ZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtYnVzLXBjaS1kZXZpY2VzLWNjaXNzIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1idXMtcGNpLWRldmljZXMtY2Npc3MKaW5kZXggMGE5MmE3Yy4uNGYyOWU1ZjEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtYnVzLXBjaS1kZXZpY2VzLWNjaXNzCisrKyBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtYnVzLXBjaS1kZXZpY2VzLWNjaXNzCkBAIC0zMSwzICszMSwzMSBAQAogS2VybmVsIFZlcnNpb246IDIuNi4zMAogQ29udGFjdDoJaXNzX3N0b3JhZ2VkZXZAaHAuY29tCiBEZXNjcmlwdGlvbjoJQSBzeW1ib2xpYyBsaW5rIHRvIC9zeXMvYmxvY2svY2Npc3MhY1hkWQorCitXaGVyZToJCS9zeXMvYnVzL3BjaS9kZXZpY2VzLzxkZXY+L2NjaXNzWC9yZXNjYW4KK0RhdGU6CQlBdWd1c3QgMjAwOQorS2VybmVsIFZlcnNpb246CTIuNi4zMQorQ29udGFjdDoJaXNzX3N0b3JhZ2VkZXZAaHAuY29tCitEZXNjcmlwdGlvbjoJS2lja3Mgb2YgYSByZXNjYW4gb2YgdGhlIGNvbnRyb2xsZXIgdG8gZGlzY292ZXIgbG9naWNhbAorCQlkcml2ZSB0b3BvbG9neSBjaGFuZ2VzLgorCitXaGVyZToJCS9zeXMvYnVzL3BjaS9kZXZpY2VzLzxkZXY+L2NjaXNzWC9jWGRZL2x1bmlkCitEYXRlOgkJQXVndXN0IDIwMDkKK0tlcm5lbCBWZXJzaW9uOiAyLjYuMzEKK0NvbnRhY3Q6CWlzc19zdG9yYWdlZGV2QGhwLmNvbQorRGVzY3JpcHRpb246CURpc3BsYXlzIHRoZSA4LWJ5dGUgTFVOIElEIHVzZWQgdG8gYWRkcmVzcyBsb2dpY2FsCisJCWRyaXZlIFkgb2YgY29udHJvbGxlciBYLgorCitXaGVyZToJCS9zeXMvYnVzL3BjaS9kZXZpY2VzLzxkZXY+L2NjaXNzWC9jWGRZL3JhaWRfbGV2ZWwKK0RhdGU6CQlBdWd1c3QgMjAwOQorS2VybmVsIFZlcnNpb246IDIuNi4zMQorQ29udGFjdDoJaXNzX3N0b3JhZ2VkZXZAaHAuY29tCitEZXNjcmlwdGlvbjoJRGlzcGxheXMgdGhlIFJBSUQgbGV2ZWwgb2YgbG9naWNhbCBkcml2ZSBZIG9mCisJCWNvbnRyb2xsZXIgWC4KKworV2hlcmU6CQkvc3lzL2J1cy9wY2kvZGV2aWNlcy88ZGV2Pi9jY2lzc1gvY1hkWS91c2FnZV9jb3VudAorRGF0ZToJCUF1Z3VzdCAyMDA5CitLZXJuZWwgVmVyc2lvbjogMi42LjMxCitDb250YWN0Oglpc3Nfc3RvcmFnZWRldkBocC5jb20KK0Rlc2NyaXB0aW9uOglEaXNwbGF5cyB0aGUgdXNhZ2UgY291bnQgKG51bWJlciBvZiBvcGVucykgb2YgbG9naWNhbCBkcml2ZSBZCisJCW9mIGNvbnRyb2xsZXIgWC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtY2xhc3MtdXNiX2hvc3QgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWNsYXNzLXV3Yl9yYy13dXNiaGMKc2ltaWxhcml0eSBpbmRleCA4OCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1jbGFzcy11c2JfaG9zdApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1jbGFzcy11d2JfcmMtd3VzYmhjCmluZGV4IDQ2YjY2YWQxLi40ZTgxMDZmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWNsYXNzLXVzYl9ob3N0CisrKyBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtY2xhc3MtdXdiX3JjLXd1c2JoYwpAQCAtMSw0ICsxLDQgQEAKLVdoYXQ6ICAgICAgICAgICAvc3lzL2NsYXNzL3VzYl9ob3N0L3VzYl9ob3N0Ti93dXNiX2NoaWQKK1doYXQ6ICAgICAgICAgICAvc3lzL2NsYXNzL3V3Yl9yYy91d2JOL3d1c2JoYy93dXNiX2NoaWQKIERhdGU6ICAgICAgICAgICBKdWx5IDIwMDgKIEtlcm5lbFZlcnNpb246ICAyLjYuMjcKIENvbnRhY3Q6ICAgICAgICBEYXZpZCBWcmFiZWwgPGRhdmlkLnZyYWJlbEBjc3IuY29tPgpAQCAtOSw3ICs5LDcgQEAKIAogICAgICAgICAgICAgICAgIFNldCBhbiBhbGwgemVybyBDSElEIHRvIHN0b3AgdGhlIGhvc3QgY29udHJvbGxlci4KIAotV2hhdDogICAgICAgICAgIC9zeXMvY2xhc3MvdXNiX2hvc3QvdXNiX2hvc3ROL3d1c2JfdHJ1c3RfdGltZW91dAorV2hhdDogICAgICAgICAgIC9zeXMvY2xhc3MvdXdiX3JjL3V3Yk4vd3VzYmhjL3d1c2JfdHJ1c3RfdGltZW91dAogRGF0ZTogICAgICAgICAgIEp1bHkgMjAwOAogS2VybmVsVmVyc2lvbjogIDIuNi4yNwogQ29udGFjdDogICAgICAgIERhdmlkIFZyYWJlbCA8ZGF2aWQudnJhYmVsQGNzci5jb20+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWRldmljZXMtY2FjaGVfZGlzYWJsZSBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZGV2aWNlcy1jYWNoZV9kaXNhYmxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNzViYjRmLi4wMDAwMDAwCi0tLSBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZGV2aWNlcy1jYWNoZV9kaXNhYmxlCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotV2hhdDogICAgICAvc3lzL2RldmljZXMvc3lzdGVtL2NwdS9jcHUqL2NhY2hlL2luZGV4Ki9jYWNoZV9kaXNhYmxlX1gKLURhdGU6ICAgICAgQXVndXN0IDIwMDgKLUtlcm5lbFZlcnNpb246CTIuNi4yNwotQ29udGFjdDoJbWFyay5sYW5nc2RvcmZAYW1kLmNvbQotRGVzY3JpcHRpb246CVRoZXNlIGZpbGVzIGV4aXN0IGluIGV2ZXJ5IGNwdSdzIGNhY2hlIGluZGV4IGRpcmVjdG9yaWVzLgotCQlUaGVyZSBhcmUgY3VycmVudGx5IDIgY2FjaGVfZGlzYWJsZV8jIGZpbGVzIGluIGVhY2gKLQkJZGlyZWN0b3J5LiAgUmVhZGluZyBmcm9tIHRoZXNlIGZpbGVzIG9uIGEgc3VwcG9ydGVkCi0JCXByb2Nlc3NvciB3aWxsIHJldHVybiB0aGF0IGNhY2hlIGRpc2FibGUgaW5kZXggdmFsdWUKLQkJZm9yIHRoYXQgcHJvY2Vzc29yIGFuZCBub2RlLiAgV3JpdGluZyB0byBvbmUgb2YgdGhlc2UKLQkJZmlsZXMgd2lsbCBjYXVzZSB0aGUgc3BlY2lmaWNlZCBjYWNoZSBpbmRleCB0byBiZSBkaXNhYmxlZC4KLQotCQlDdXJyZW50bHksIG9ubHkgQU1EIEZhbWlseSAxMGggUHJvY2Vzc29ycyBzdXBwb3J0IGNhY2hlIGluZGV4Ci0JCWRpc2FibGUsIGFuZCBvbmx5IGZvciB0aGVpciBMMyBjYWNoZXMuICBTZWUgdGhlIEJJT1MgYW5kCi0JCUtlcm5lbCBEZXZlbG9wZXIncyBHdWlkZSBhdAotCQlodHRwOi8vd3d3LmFtZC5jb20vdXMtZW4vYXNzZXRzL2NvbnRlbnRfdHlwZS93aGl0ZV9wYXBlcnNfYW5kX3RlY2hfZG9jcy8zMTExNi1QdWJsaWMtR0gtQktER18zLjIwXzItNC0wOS5wZGYKLQkJZm9yIGZvcm1hdHRpbmcgaW5mb3JtYXRpb24gYW5kIG90aGVyIGRldGFpbHMgb24gdGhlCi0JCWNhY2hlIGluZGV4IGRpc2FibGUuCi1Vc2VyczogICAgam9hY2hpbS5kZWd1YXJhQGFtZC5jb20KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZGV2aWNlcy1zeXN0ZW0tY3B1IGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1kZXZpY2VzLXN5c3RlbS1jcHUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTcwM2I5ZQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZGV2aWNlcy1zeXN0ZW0tY3B1CkBAIC0wLDAgKzEsMTU2IEBACitXaGF0OgkJL3N5cy9kZXZpY2VzL3N5c3RlbS9jcHUvCitEYXRlOgkJcHJlLWdpdCBoaXN0b3J5CitDb250YWN0OglMaW51eCBrZXJuZWwgbWFpbGluZyBsaXN0IDxsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnPgorRGVzY3JpcHRpb246CisJCUEgY29sbGVjdGlvbiBvZiBib3RoIGdsb2JhbCBhbmQgaW5kaXZpZHVhbCBDUFUgYXR0cmlidXRlcworCisJCUluZGl2aWR1YWwgQ1BVIGF0dHJpYnV0ZXMgYXJlIGNvbnRhaW5lZCBpbiBzdWJkaXJlY3RvcmllcworCQluYW1lZCBieSB0aGUga2VybmVsJ3MgbG9naWNhbCBDUFUgbnVtYmVyLCBlLmcuOgorCisJCS9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L2NwdSMvCisKK1doYXQ6CQkvc3lzL2RldmljZXMvc3lzdGVtL2NwdS9zY2hlZF9tY19wb3dlcl9zYXZpbmdzCisJCS9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L3NjaGVkX3NtdF9wb3dlcl9zYXZpbmdzCitEYXRlOgkJSnVuZSAyMDA2CitDb250YWN0OglMaW51eCBrZXJuZWwgbWFpbGluZyBsaXN0IDxsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnPgorRGVzY3JpcHRpb246CURpc2NvdmVyIGFuZCBhZGp1c3QgdGhlIGtlcm5lbCdzIG11bHRpLWNvcmUgc2NoZWR1bGVyIHN1cHBvcnQuCisKKwkJUG9zc2libGUgdmFsdWVzIGFyZToKKworCQkwIC0gTm8gcG93ZXIgc2F2aW5nIGxvYWQgYmFsYW5jZSAoZGVmYXVsdCB2YWx1ZSkKKwkJMSAtIEZpbGwgb25lIHRocmVhZC9jb3JlL3BhY2thZ2UgZmlyc3QgZm9yIGxvbmcgcnVubmluZyB0aHJlYWRzCisJCTIgLSBBbHNvIGJpYXMgdGFzayB3YWtldXBzIHRvIHNlbWktaWRsZSBjcHUgcGFja2FnZSBmb3IgcG93ZXIKKwkJICAgIHNhdmluZ3MKKworCQlzY2hlZF9tY19wb3dlcl9zYXZpbmdzIGlzIGRlcGVuZGVudCB1cG9uIFNDSEVEX01DLCB3aGljaCBpcworCQlpdHNlbGYgYXJjaGl0ZWN0dXJlIGRlcGVuZGVudC4KKworCQlzY2hlZF9zbXRfcG93ZXJfc2F2aW5ncyBpcyBkZXBlbmRlbnQgdXBvbiBTQ0hFRF9TTVQsIHdoaWNoCisJCWlzIGl0c2VsZiBhcmNoaXRlY3R1cmUgZGVwZW5kZW50LgorCisJCVRoZSB0d28gZmlsZXMgYXJlIGluZGVwZW5kZW50IG9mIGVhY2ggb3RoZXIuIEl0IGlzIHBvc3NpYmxlCisJCXRoYXQgb25lIGZpbGUgbWF5IGJlIHByZXNlbnQgd2l0aG91dCB0aGUgb3RoZXIuCisKKwkJSW50cm9kdWNlZCBieSBnaXQgY29tbWl0IDVjNDViZjI3LgorCisKK1doYXQ6CQkvc3lzL2RldmljZXMvc3lzdGVtL2NwdS9rZXJuZWxfbWF4CisJCS9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L29mZmxpbmUKKwkJL3N5cy9kZXZpY2VzL3N5c3RlbS9jcHUvb25saW5lCisJCS9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L3Bvc3NpYmxlCisJCS9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L3ByZXNlbnQKK0RhdGU6CQlEZWNlbWJlciAyMDA4CitDb250YWN0OglMaW51eCBrZXJuZWwgbWFpbGluZyBsaXN0IDxsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnPgorRGVzY3JpcHRpb246CUNQVSB0b3BvbG9neSBmaWxlcyB0aGF0IGRlc2NyaWJlIGtlcm5lbCBsaW1pdHMgcmVsYXRlZCB0bworCQlob3RwbHVnLiBCcmllZmx5OgorCisJCWtlcm5lbF9tYXg6IHRoZSBtYXhpbXVtIGNwdSBpbmRleCBhbGxvd2VkIGJ5IHRoZSBrZXJuZWwKKwkJY29uZmlndXJhdGlvbi4KKworCQlvZmZsaW5lOiBjcHVzIHRoYXQgYXJlIG5vdCBvbmxpbmUgYmVjYXVzZSB0aGV5IGhhdmUgYmVlbgorCQlIT1RQTFVHR0VEIG9mZiBvciBleGNlZWQgdGhlIGxpbWl0IG9mIGNwdXMgYWxsb3dlZCBieSB0aGUKKwkJa2VybmVsIGNvbmZpZ3VyYXRpb24gKGtlcm5lbF9tYXggYWJvdmUpLgorCisJCW9ubGluZTogY3B1cyB0aGF0IGFyZSBvbmxpbmUgYW5kIGJlaW5nIHNjaGVkdWxlZC4KKworCQlwb3NzaWJsZTogY3B1cyB0aGF0IGhhdmUgYmVlbiBhbGxvY2F0ZWQgcmVzb3VyY2VzIGFuZCBjYW4gYmUKKwkJYnJvdWdodCBvbmxpbmUgaWYgdGhleSBhcmUgcHJlc2VudC4KKworCQlwcmVzZW50OiBjcHVzIHRoYXQgaGF2ZSBiZWVuIGlkZW50aWZpZWQgYXMgYmVpbmcgcHJlc2VudCBpbgorCQl0aGUgc3lzdGVtLgorCisJCVNlZSBEb2N1bWVudGF0aW9uL2NwdXRvcG9sb2d5LnR4dCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworCisKK1doYXQ6CQkvc3lzL2RldmljZXMvc3lzdGVtL2NwdS9jcHUjL25vZGUKK0RhdGU6CQlPY3RvYmVyIDIwMDkKK0NvbnRhY3Q6CUxpbnV4IG1lbW9yeSBtYW5hZ2VtZW50IG1haWxpbmcgbGlzdCA8bGludXgtbW1Aa3ZhY2sub3JnPgorRGVzY3JpcHRpb246CURpc2NvdmVyIE5VTUEgbm9kZSBhIENQVSBiZWxvbmdzIHRvCisKKwkJV2hlbiBDT05GSUdfTlVNQSBpcyBlbmFibGVkLCBhIHN5bWJvbGljIGxpbmsgdGhhdCBwb2ludHMKKwkJdG8gdGhlIGNvcnJlc3BvbmRpbmcgTlVNQSBub2RlIGRpcmVjdG9yeS4KKworCQlGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBzeW1saW5rIGlzIGNyZWF0ZWQgZm9yIGNwdTQyCisJCWluIE5VTUEgbm9kZSAyOgorCisJCS9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L2NwdTQyL25vZGUyIC0+IC4uLy4uL25vZGUvbm9kZTIKKworCitXaGF0OgkJL3N5cy9kZXZpY2VzL3N5c3RlbS9jcHUvY3B1Iy90b3BvbG9neS9jb3JlX2lkCisJCS9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L2NwdSMvdG9wb2xvZ3kvY29yZV9zaWJsaW5ncworCQkvc3lzL2RldmljZXMvc3lzdGVtL2NwdS9jcHUjL3RvcG9sb2d5L2NvcmVfc2libGluZ3NfbGlzdAorCQkvc3lzL2RldmljZXMvc3lzdGVtL2NwdS9jcHUjL3RvcG9sb2d5L3BoeXNpY2FsX3BhY2thZ2VfaWQKKwkJL3N5cy9kZXZpY2VzL3N5c3RlbS9jcHUvY3B1Iy90b3BvbG9neS90aHJlYWRfc2libGluZ3MKKwkJL3N5cy9kZXZpY2VzL3N5c3RlbS9jcHUvY3B1Iy90b3BvbG9neS90aHJlYWRfc2libGluZ3NfbGlzdAorRGF0ZToJCURlY2VtYmVyIDIwMDgKK0NvbnRhY3Q6CUxpbnV4IGtlcm5lbCBtYWlsaW5nIGxpc3QgPGxpbnV4LWtlcm5lbEB2Z2VyLmtlcm5lbC5vcmc+CitEZXNjcmlwdGlvbjoJQ1BVIHRvcG9sb2d5IGZpbGVzIHRoYXQgZGVzY3JpYmUgYSBsb2dpY2FsIENQVSdzIHJlbGF0aW9uc2hpcAorCQl0byBvdGhlciBjb3JlcyBhbmQgdGhyZWFkcyBpbiB0aGUgc2FtZSBwaHlzaWNhbCBwYWNrYWdlLgorCisJCU9uZSBjcHUjIGRpcmVjdG9yeSBpcyBjcmVhdGVkIHBlciBsb2dpY2FsIENQVSBpbiB0aGUgc3lzdGVtLAorCQllLmcuIC9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L2NwdTQyLy4KKworCQlCcmllZmx5LCB0aGUgZmlsZXMgYWJvdmUgYXJlOgorCisJCWNvcmVfaWQ6IHRoZSBDUFUgY29yZSBJRCBvZiBjcHUjLiBUeXBpY2FsbHkgaXQgaXMgdGhlCisJCWhhcmR3YXJlIHBsYXRmb3JtJ3MgaWRlbnRpZmllciAocmF0aGVyIHRoYW4gdGhlIGtlcm5lbCdzKS4KKwkJVGhlIGFjdHVhbCB2YWx1ZSBpcyBhcmNoaXRlY3R1cmUgYW5kIHBsYXRmb3JtIGRlcGVuZGVudC4KKworCQljb3JlX3NpYmxpbmdzOiBpbnRlcm5hbCBrZXJuZWwgbWFwIG9mIGNwdSMncyBoYXJkd2FyZSB0aHJlYWRzCisJCXdpdGhpbiB0aGUgc2FtZSBwaHlzaWNhbF9wYWNrYWdlX2lkLgorCisJCWNvcmVfc2libGluZ3NfbGlzdDogaHVtYW4tcmVhZGFibGUgbGlzdCBvZiB0aGUgbG9naWNhbCBDUFUKKwkJbnVtYmVycyB3aXRoaW4gdGhlIHNhbWUgcGh5c2ljYWxfcGFja2FnZV9pZCBhcyBjcHUjLgorCisJCXBoeXNpY2FsX3BhY2thZ2VfaWQ6IHBoeXNpY2FsIHBhY2thZ2UgaWQgb2YgY3B1Iy4gVHlwaWNhbGx5CisJCWNvcnJlc3BvbmRzIHRvIGEgcGh5c2ljYWwgc29ja2V0IG51bWJlciwgYnV0IHRoZSBhY3R1YWwgdmFsdWUKKwkJaXMgYXJjaGl0ZWN0dXJlIGFuZCBwbGF0Zm9ybSBkZXBlbmRlbnQuCisKKwkJdGhyZWFkX3NpYmxpbmdzOiBpbnRlcm5lbCBrZXJuZWwgbWFwIG9mIGNwdSMncyBoYXJkd2FyZQorCQl0aHJlYWRzIHdpdGhpbiB0aGUgc2FtZSBjb3JlIGFzIGNwdSMKKworCQl0aHJlYWRfc2libGluZ3NfbGlzdDogaHVtYW4tcmVhZGFibGUgbGlzdCBvZiBjcHUjJ3MgaGFyZHdhcmUKKwkJdGhyZWFkcyB3aXRoaW4gdGhlIHNhbWUgY29yZSBhcyBjcHUjCisKKwkJU2VlIERvY3VtZW50YXRpb24vY3B1dG9wb2xvZ3kudHh0IGZvciBtb3JlIGluZm9ybWF0aW9uLgorCisKK1doYXQ6CQkvc3lzL2RldmljZXMvc3lzdGVtL2NwdS9jcHVpZGxlL2N1cnJlbnRfZHJpdmVyCisJCS9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L2NwdWlkbGUvY3VycmVudF9nb3Zlcm5lcl9ybworRGF0ZToJCVNlcHRlbWJlciAyMDA3CitDb250YWN0OglMaW51eCBrZXJuZWwgbWFpbGluZyBsaXN0IDxsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnPgorRGVzY3JpcHRpb246CURpc2NvdmVyIGNwdWlkbGUgcG9saWN5IGFuZCBtZWNoYW5pc20KKworCQlWYXJpb3VzIENQVXMgdG9kYXkgc3VwcG9ydCBtdWx0aXBsZSBpZGxlIGxldmVscyB0aGF0IGFyZQorCQlkaWZmZXJlbnRpYXRlZCBieSB2YXJ5aW5nIGV4aXQgbGF0ZW5jaWVzIGFuZCBwb3dlcgorCQljb25zdW1wdGlvbiBkdXJpbmcgaWRsZS4KKworCQlJZGxlIHBvbGljeSAoZ292ZXJub3IpIGlzIGRpZmZlcmVudGlhdGVkIGZyb20gaWRsZSBtZWNoYW5pc20KKwkJKGRyaXZlcikKKworCQljdXJyZW50X2RyaXZlcjogZGlzcGxheXMgY3VycmVudCBpZGxlIG1lY2hhbmlzbQorCisJCWN1cnJlbnRfZ292ZXJub3Jfcm86IGRpc3BsYXlzIGN1cnJlbnQgaWRsZSBwb2xpY3kKKworCQlTZWUgZmlsZXMgaW4gRG9jdW1lbnRhdGlvbi9jcHVpZGxlLyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworCitXaGF0OiAgICAgIC9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L2NwdSovY2FjaGUvaW5kZXgqL2NhY2hlX2Rpc2FibGVfWAorRGF0ZTogICAgICBBdWd1c3QgMjAwOAorS2VybmVsVmVyc2lvbjoJMi42LjI3CitDb250YWN0OgltYXJrLmxhbmdzZG9yZkBhbWQuY29tCitEZXNjcmlwdGlvbjoJVGhlc2UgZmlsZXMgZXhpc3QgaW4gZXZlcnkgY3B1J3MgY2FjaGUgaW5kZXggZGlyZWN0b3JpZXMuCisJCVRoZXJlIGFyZSBjdXJyZW50bHkgMiBjYWNoZV9kaXNhYmxlXyMgZmlsZXMgaW4gZWFjaAorCQlkaXJlY3RvcnkuICBSZWFkaW5nIGZyb20gdGhlc2UgZmlsZXMgb24gYSBzdXBwb3J0ZWQKKwkJcHJvY2Vzc29yIHdpbGwgcmV0dXJuIHRoYXQgY2FjaGUgZGlzYWJsZSBpbmRleCB2YWx1ZQorCQlmb3IgdGhhdCBwcm9jZXNzb3IgYW5kIG5vZGUuICBXcml0aW5nIHRvIG9uZSBvZiB0aGVzZQorCQlmaWxlcyB3aWxsIGNhdXNlIHRoZSBzcGVjaWZpY2VkIGNhY2hlIGluZGV4IHRvIGJlIGRpc2FibGVkLgorCisJCUN1cnJlbnRseSwgb25seSBBTUQgRmFtaWx5IDEwaCBQcm9jZXNzb3JzIHN1cHBvcnQgY2FjaGUgaW5kZXgKKwkJZGlzYWJsZSwgYW5kIG9ubHkgZm9yIHRoZWlyIEwzIGNhY2hlcy4gIFNlZSB0aGUgQklPUyBhbmQKKwkJS2VybmVsIERldmVsb3BlcidzIEd1aWRlIGF0CisJCWh0dHA6Ly93d3cuYW1kLmNvbS91cy1lbi9hc3NldHMvY29udGVudF90eXBlL3doaXRlX3BhcGVyc19hbmRfdGVjaF9kb2NzLzMxMTE2LVB1YmxpYy1HSC1CS0RHXzMuMjBfMi00LTA5LnBkZgorCQlmb3IgZm9ybWF0dGluZyBpbmZvcm1hdGlvbiBhbmQgb3RoZXIgZGV0YWlscyBvbiB0aGUKKwkJY2FjaGUgaW5kZXggZGlzYWJsZS4KK1VzZXJzOiAgICBqb2FjaGltLmRlZ3VhcmFAYW1kLmNvbQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9TdWJtaXR0aW5nUGF0Y2hlcyBiL0RvY3VtZW50YXRpb24vU3VibWl0dGluZ1BhdGNoZXMKaW5kZXggYjdmOWQzYi4uNzI2NTFmNyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9TdWJtaXR0aW5nUGF0Y2hlcworKysgYi9Eb2N1bWVudGF0aW9uL1N1Ym1pdHRpbmdQYXRjaGVzCkBAIC0yMzIsNyArMjMyLDcgQEAKIFdoZW4gc2VuZGluZyBwYXRjaGVzIHRvIExpbnVzLCBhbHdheXMgZm9sbG93IHN0ZXAgIzcuCiAKIExhcmdlIGNoYW5nZXMgYXJlIG5vdCBhcHByb3ByaWF0ZSBmb3IgbWFpbGluZyBsaXN0cywgYW5kIHNvbWUKLW1haW50YWluZXJzLiAgSWYgeW91ciBwYXRjaCwgdW5jb21wcmVzc2VkLCBleGNlZWRzIDQwIGtCIGluIHNpemUsCittYWludGFpbmVycy4gIElmIHlvdXIgcGF0Y2gsIHVuY29tcHJlc3NlZCwgZXhjZWVkcyAzMDAga0IgaW4gc2l6ZSwKIGl0IGlzIHByZWZlcnJlZCB0aGF0IHlvdSBzdG9yZSB5b3VyIHBhdGNoIG9uIGFuIEludGVybmV0LWFjY2Vzc2libGUKIHNlcnZlciwgYW5kIHByb3ZpZGUgaW5zdGVhZCBhIFVSTCAobGluaykgcG9pbnRpbmcgdG8geW91ciBwYXRjaC4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hcm0vdGNtLnR4dCBiL0RvY3VtZW50YXRpb24vYXJtL3RjbS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzdmZDkzNwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vYXJtL3RjbS50eHQKQEAgLTAsMCArMSwxNDcgQEAKK0FSTSBUQ00gKFRpZ2h0bHktQ291cGxlZCBNZW1vcnkpIGhhbmRsaW5nIGluIExpbnV4CistLS0tCitXcml0dGVuIGJ5IExpbnVzIFdhbGxlaWogPGxpbnVzLndhbGxlaWpAc3Rlcmljc3Nvbi5jb20+CisKK1NvbWUgQVJNIFNvQzpzIGhhdmUgYSBzby1jYWxsZWQgVENNIChUaWdodGx5LUNvdXBsZWQgTWVtb3J5KS4KK1RoaXMgaXMgdXN1YWxseSBqdXN0IGEgZmV3ICg0LTY0KSBLaUIgb2YgUkFNIGluc2lkZSB0aGUgQVJNCitwcm9jZXNzb3IuCisKK0R1ZSB0byBiZWluZyBlbWJlZGRlZCBpbnNpZGUgdGhlIENQVSBUaGUgVENNIGhhcyBhCitIYXJ2YXJkLWFyY2hpdGVjdHVyZSwgc28gdGhlcmUgaXMgYW4gSVRDTSAoaW5zdHJ1Y3Rpb24gVENNKQorYW5kIGEgRFRDTSAoZGF0YSBUQ00pLiBUaGUgRFRDTSBjYW4gbm90IGNvbnRhaW4gYW55CitpbnN0cnVjdGlvbnMsIGJ1dCB0aGUgSVRDTSBjYW4gYWN0dWFsbHkgY29udGFpbiBkYXRhLgorVGhlIHNpemUgb2YgRFRDTSBvciBJVENNIGlzIG1pbmltdW0gNEtpQiBzbyB0aGUgdHlwaWNhbAorbWluaW11bSBjb25maWd1cmF0aW9uIGlzIDRLaUIgSVRDTSBhbmQgNEtpQiBEVENNLgorCitBUk0gQ1BVOnMgaGF2ZSBzcGVjaWFsIHJlZ2lzdGVycyB0byByZWFkIG91dCBzdGF0dXMsIHBoeXNpY2FsCitsb2NhdGlvbiBhbmQgc2l6ZSBvZiBUQ00gbWVtb3JpZXMuIGFyY2gvYXJtL2luY2x1ZGUvYXNtL2NwdXR5cGUuaAorZGVmaW5lcyBhIENQVUlEX1RDTSByZWdpc3RlciB0aGF0IHlvdSBjYW4gcmVhZCBvdXQgZnJvbSB0aGUKK3N5c3RlbSBjb250cm9sIGNvcHJvY2Vzc29yLiBEb2N1bWVudGF0aW9uIGZyb20gQVJNIGNhbiBiZSBmb3VuZAorYXQgaHR0cDovL2luZm9jZW50ZXIuYXJtLmNvbSwgc2VhcmNoIGZvciAiVENNIFN0YXR1cyBSZWdpc3RlciIKK3RvIHNlZSBkb2N1bWVudHMgZm9yIGFsbCBDUFVzLiBSZWFkaW5nIHRoaXMgcmVnaXN0ZXIgeW91IGNhbgorZGV0ZXJtaW5lIGlmIElUQ00gKGJpdCAwKSBhbmQvb3IgRFRDTSAoYml0IDE2KSBpcyBwcmVzZW50IGluIHRoZQorbWFjaGluZS4KKworVGhlcmUgaXMgZnVydGhlciBhIFRDTSByZWdpb24gcmVnaXN0ZXIgKHNlYXJjaCBmb3IgIlRDTSBSZWdpb24KK1JlZ2lzdGVycyIgYXQgdGhlIEFSTSBzaXRlKSB0aGF0IGNhbiByZXBvcnQgYW5kIG1vZGlmeSB0aGUgbG9jYXRpb24KK3NpemUgb2YgVENNIG1lbW9yaWVzIGF0IHJ1bnRpbWUuIFRoaXMgaXMgdXNlZCB0byByZWFkIG91dCBhbmQgbW9kaWZ5CitUQ00gbG9jYXRpb24gYW5kIHNpemUuIE5vdGljZSB0aGF0IHRoaXMgaXMgbm90IGEgTU1VIHRhYmxlOiB5b3UKK2FjdHVhbGx5IG1vdmUgdGhlIHBoeXNpY2FsIGxvY2F0aW9uIG9mIHRoZSBUQ00gYXJvdW5kLiBBdCB0aGUKK3BsYWNlIHlvdSBwdXQgaXQsIGl0IHdpbGwgbWFzayBhbnkgdW5kZXJseWluZyBSQU0gZnJvbSB0aGUKK0NQVSBzbyBpdCBpcyB1c3VhbGx5IHdpc2Ugbm90IHRvIG92ZXJsYXAgYW55IHBoeXNpY2FsIFJBTSB3aXRoCit0aGUgVENNLgorCitUaGUgVENNIG1lbW9yeSBjYW4gdGhlbiBiZSByZW1hcHBlZCB0byBhbm90aGVyIGFkZHJlc3MgYWdhaW4gdXNpbmcKK3RoZSBNTVUsIGJ1dCBub3RpY2UgdGhhdCB0aGUgVENNIGlmIG9mdGVuIHVzZWQgaW4gc2l0dWF0aW9ucyB3aGVyZQordGhlIE1NVSBpcyB0dXJuZWQgb2ZmLiBUbyBhdm9pZCBjb25mdXNpb24gdGhlIGN1cnJlbnQgTGludXgKK2ltcGxlbWVudGF0aW9uIHdpbGwgbWFwIHRoZSBUQ00gMSB0byAxIGZyb20gcGh5c2ljYWwgdG8gdmlydHVhbAorbWVtb3J5IGluIHRoZSBsb2NhdGlvbiBzcGVjaWZpZWQgYnkgdGhlIG1hY2hpbmUuCisKK1RDTSBpcyB1c2VkIGZvciBhIGZldyB0aGluZ3M6CisKKy0gRklRIGFuZCBvdGhlciBpbnRlcnJ1cHQgaGFuZGxlcnMgdGhhdCBuZWVkIGRldGVybWluaXN0aWMKKyAgdGltaW5nIGFuZCBjYW5ub3Qgd2FpdCBmb3IgY2FjaGUgbWlzc2VzLgorCistIElkbGUgbG9vcHMgd2hlcmUgYWxsIGV4dGVybmFsIFJBTSBpcyBzZXQgdG8gc2VsZi1yZWZyZXNoCisgIHJldGVudGlvbiBtb2RlLCBzbyBvbmx5IG9uLWNoaXAgUkFNIGlzIGFjY2Vzc2libGUgYnkKKyAgdGhlIENQVSBhbmQgdGhlbiB3ZSBoYW5nIGluc2lkZSBJVENNIHdhaXRpbmcgZm9yIGFuCisgIGludGVycnVwdC4KKworLSBPdGhlciBvcGVyYXRpb25zIHdoaWNoIGltcGxpZXMgc2h1dHRpbmcgb2ZmIG9yIHJlY29uZmlndXJpbmcKKyAgdGhlIGV4dGVybmFsIFJBTSBjb250cm9sbGVyLgorCitUaGVyZSBpcyBhbiBpbnRlcmZhY2UgZm9yIHVzaW5nIFRDTSBvbiB0aGUgQVJNIGFyY2hpdGVjdHVyZQoraW4gPGFzbS90Y20uaD4uIFVzaW5nIHRoaXMgaW50ZXJmYWNlIGl0IGlzIHBvc3NpYmxlIHRvOgorCistIERlZmluZSB0aGUgcGh5c2ljYWwgYWRkcmVzcyBhbmQgc2l6ZSBvZiBJVENNIGFuZCBEVENNLgorCistIFRhZyBmdW5jdGlvbnMgdG8gYmUgY29tcGlsZWQgaW50byBJVENNLgorCistIFRhZyBkYXRhIGFuZCBjb25zdGFudHMgdG8gYmUgYWxsb2NhdGVkIHRvIERUQ00gYW5kIElUQ00uCisKKy0gSGF2ZSB0aGUgcmVtYWluaW5nIFRDTSBSQU0gYWRkZWQgdG8gYSBzcGVjaWFsCisgIGFsbG9jYXRpb24gcG9vbCB3aXRoIGdlbl9wb29sX2NyZWF0ZSgpIGFuZCBnZW5fcG9vbF9hZGQoKQorICBhbmQgcHJvdmljZSB0Y21fYWxsb2MoKSBhbmQgdGNtX2ZyZWUoKSBmb3IgdGhpcworICBtZW1vcnkuIFN1Y2ggYSBoZWFwIGlzIGdyZWF0IGZvciB0aGluZ3MgbGlrZSBzYXZpbmcKKyAgZGV2aWNlIHN0YXRlIHdoZW4gc2h1dHRpbmcgb2ZmIGRldmljZSBwb3dlciBkb21haW5zLgorCitBIG1hY2hpbmUgdGhhdCBoYXMgVENNIG1lbW9yeSBzaGFsbCBzZWxlY3QgSEFWRV9UQ00gaW4KK2FyY2gvYXJtL0tjb25maWcgZm9yIGl0c2VsZiwgYW5kIHRoZW4gdGhlCityZXN0IG9mIHRoZSBmdW5jdGlvbmFsaXR5IHdpbGwgZGVwZW5kIG9uIHRoZSBwaHlzaWNhbAorbG9jYXRpb24gYW5kIHNpemUgb2YgSVRDTSBhbmQgRFRDTSB0byBiZSBkZWZpbmVkIGluCittYWNoL21lbW9yeS5oIGZvciB0aGUgbWFjaGluZS4gQ29kZSB0aGF0IG5lZWRzIHRvIHVzZQorVENNIHNoYWxsICNpbmNsdWRlIDxhc20vdGNtLmg+IElmIHRoZSBUQ00gaXMgbm90IGxvY2F0ZWQKK2F0IHRoZSBwbGFjZSBnaXZlbiBpbiBtZW1vcnkuaCBpdCB3aWxsIGJlIG1vdmVkIHVzaW5nCit0aGUgVENNIFJlZ2lvbiByZWdpc3RlcnMuCisKK0Z1bmN0aW9ucyB0byBnbyBpbnRvIGl0Y20gY2FuIGJlIHRhZ2dlZCBsaWtlIHRoaXM6CitpbnQgX190Y21mdW5jIGZvbyhpbnQgYmFyKTsKKworVmFyaWFibGVzIHRvIGdvIGludG8gZHRjbSBjYW4gYmUgdGFnZ2VkIGxpa2UgdGhpczoKK2ludCBfX3RjbWRhdGEgZm9vOworCitDb25zdGFudHMgY2FuIGJlIHRhZ2dlZCBsaWtlIHRoaXM6CitpbnQgX190Y21jb25zdCBmb287CisKK1RvIHB1dCBhc3NlbWJsZXIgaW50byBUQ00ganVzdCB1c2UKKy5zZWN0aW9uICIudGNtLnRleHQiIG9yIC5zZWN0aW9uICIudGNtLmRhdGEiCityZXNwZWN0aXZlbHkuCisKK0V4YW1wbGUgY29kZToKKworI2luY2x1ZGUgPGFzbS90Y20uaD4KKworLyogVW5pbml0aWFsaXplZCBkYXRhICovCitzdGF0aWMgdTMyIF9fdGNtZGF0YSB0Y212YXI7CisvKiBJbml0aWFsaXplZCBkYXRhICovCitzdGF0aWMgdTMyIF9fdGNtZGF0YSB0Y21hc3NpZ25lZCA9IDB4MkJBREJBQkVVOworLyogQ29uc3RhbnQgKi8KK3N0YXRpYyBjb25zdCB1MzIgX190Y21jb25zdCB0Y21jb25zdCA9IDB4Q0FGRUJBQkVVOworCitzdGF0aWMgdm9pZCBfX3RjbWxvY2FsZnVuYyB0Y21fdG9fdGNtKHZvaWQpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IDEwMDsgaSsrKQorCQl0Y212YXIgKys7Cit9CisKK3N0YXRpYyB2b2lkIF9fdGNtZnVuYyBoZWxsb190Y20odm9pZCkKK3sKKwkvKiBTb21lIGFic3RyYWN0IGNvZGUgdGhhdCBydW5zIGluIElUQ00gKi8KKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgMTAwOyBpKyspIHsKKwkJdGNtdmFyICsrOworCX0KKwl0Y21fdG9fdGNtKCk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCB0ZXN0X3RjbSh2b2lkKQoreworCXUzMiAqdGNtZW07CisJaW50IGk7CisKKwloZWxsb190Y20oKTsKKwlwcmludGsoIkhlbGxvIFRDTSBleGVjdXRlZCBmcm9tIElUQ00gUkFNXG4iKTsKKworCXByaW50aygiVENNIHZhcmlhYmxlIGZyb20gdGVzdHJ1bjogJXUgQCAlcFxuIiwgdGNtdmFyLCAmdGNtdmFyKTsKKwl0Y212YXIgPSAweERFQURCRUVGVTsKKwlwcmludGsoIlRDTSB2YXJpYWJsZTogMHgleCBAICVwXG4iLCB0Y212YXIsICZ0Y212YXIpOworCisJcHJpbnRrKCJUQ00gYXNzaWduZWQgdmFyaWFibGU6IDB4JXggQCAlcFxuIiwgdGNtYXNzaWduZWQsICZ0Y21hc3NpZ25lZCk7CisKKwlwcmludGsoIlRDTSBjb25zdGFudDogMHgleCBAICVwXG4iLCB0Y21jb25zdCwgJnRjbWNvbnN0KTsKKworCS8qIEFsbG9jYXRlIHNvbWUgVENNIG1lbW9yeSBmcm9tIHRoZSBwb29sICovCisJdGNtZW0gPSB0Y21fYWxsb2MoMjApOworCWlmICh0Y21lbSkgeworCQlwcmludGsoIlRDTSBBbGxvY2F0ZWQgMjAgYnl0ZXMgb2YgVENNIEAgJXBcbiIsIHRjbWVtKTsKKwkJdGNtZW1bMF0gPSAweERFQURCRUVGVTsKKwkJdGNtZW1bMV0gPSAweDJCQURCQUJFVTsKKwkJdGNtZW1bMl0gPSAweENBRkVCQUJFVTsKKwkJdGNtZW1bM10gPSAweERFQURCRUVGVTsKKwkJdGNtZW1bNF0gPSAweDJCQURCQUJFVTsKKwkJZm9yIChpID0gMDsgaSA8IDU7IGkrKykKKwkJCXByaW50aygiVENNIHRjbWVtWyVkXSA9ICUwOHhcbiIsIGksIHRjbWVtW2ldKTsKKwkJdGNtX2ZyZWUodGNtZW0sIDIwKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2Nncm91cHMvY2dyb3Vwcy50eHQgYi9Eb2N1bWVudGF0aW9uL2Nncm91cHMvY2dyb3Vwcy50eHQKaW5kZXggNDU1ZDRlNi4uMGIzM2JmZSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9jZ3JvdXBzL2Nncm91cHMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vY2dyb3Vwcy9jZ3JvdXBzLnR4dApAQCAtMjI3LDcgKzIyNywxNCBAQAogRWFjaCBjZ3JvdXAgaXMgcmVwcmVzZW50ZWQgYnkgYSBkaXJlY3RvcnkgaW4gdGhlIGNncm91cCBmaWxlIHN5c3RlbQogY29udGFpbmluZyB0aGUgZm9sbG93aW5nIGZpbGVzIGRlc2NyaWJpbmcgdGhhdCBjZ3JvdXA6CiAKLSAtIHRhc2tzOiBsaXN0IG9mIHRhc2tzIChieSBwaWQpIGF0dGFjaGVkIHRvIHRoYXQgY2dyb3VwCisgLSB0YXNrczogbGlzdCBvZiB0YXNrcyAoYnkgcGlkKSBhdHRhY2hlZCB0byB0aGF0IGNncm91cC4gIFRoaXMgbGlzdAorICAgaXMgbm90IGd1YXJhbnRlZWQgdG8gYmUgc29ydGVkLiAgV3JpdGluZyBhIHRocmVhZCBpZCBpbnRvIHRoaXMgZmlsZQorICAgbW92ZXMgdGhlIHRocmVhZCBpbnRvIHRoaXMgY2dyb3VwLgorIC0gY2dyb3VwLnByb2NzOiBsaXN0IG9mIHRnaWRzIGluIHRoZSBjZ3JvdXAuICBUaGlzIGxpc3QgaXMgbm90CisgICBndWFyYW50ZWVkIHRvIGJlIHNvcnRlZCBvciBmcmVlIG9mIGR1cGxpY2F0ZSB0Z2lkcywgYW5kIHVzZXJzcGFjZQorICAgc2hvdWxkIHNvcnQvdW5pcXVpZnkgdGhlIGxpc3QgaWYgdGhpcyBwcm9wZXJ0eSBpcyByZXF1aXJlZC4KKyAgIFdyaXRpbmcgYSB0Z2lkIGludG8gdGhpcyBmaWxlIG1vdmVzIGFsbCB0aHJlYWRzIHdpdGggdGhhdCB0Z2lkIGludG8KKyAgIHRoaXMgY2dyb3VwLgogIC0gbm90aWZ5X29uX3JlbGVhc2UgZmxhZzogcnVuIHRoZSByZWxlYXNlIGFnZW50IG9uIGV4aXQ/CiAgLSByZWxlYXNlX2FnZW50OiB0aGUgcGF0aCB0byB1c2UgZm9yIHJlbGVhc2Ugbm90aWZpY2F0aW9ucyAodGhpcyBmaWxlCiAgICBleGlzdHMgaW4gdGhlIHRvcCBjZ3JvdXAgb25seSkKQEAgLTM3NCw3ICszODEsNyBAQAogCiBJbiB0aGlzIGRpcmVjdG9yeSB5b3UgY2FuIGZpbmQgc2V2ZXJhbCBmaWxlczoKICMgbHMKLW5vdGlmeV9vbl9yZWxlYXNlIHRhc2tzCitjZ3JvdXAucHJvY3Mgbm90aWZ5X29uX3JlbGVhc2UgdGFza3MKIChwbHVzIHdoYXRldmVyIGZpbGVzIGFkZGVkIGJ5IHRoZSBhdHRhY2hlZCBzdWJzeXN0ZW1zKQogCiBOb3cgYXR0YWNoIHlvdXIgc2hlbGwgdG8gdGhpcyBjZ3JvdXA6CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2NwdXRvcG9sb2d5LnR4dCBiL0RvY3VtZW50YXRpb24vY3B1dG9wb2xvZ3kudHh0CmluZGV4IGI0MWYzZTUuLmYxYzVjNGIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vY3B1dG9wb2xvZ3kudHh0CisrKyBiL0RvY3VtZW50YXRpb24vY3B1dG9wb2xvZ3kudHh0CkBAIC0xLDE1ICsxLDI4IEBACiAKLUV4cG9ydCBjcHUgdG9wb2xvZ3kgaW5mbyB2aWEgc3lzZnMuIEl0ZW1zIChhdHRyaWJ1dGVzKSBhcmUgc2ltaWxhcgorRXhwb3J0IENQVSB0b3BvbG9neSBpbmZvIHZpYSBzeXNmcy4gSXRlbXMgKGF0dHJpYnV0ZXMpIGFyZSBzaW1pbGFyCiB0byAvcHJvYy9jcHVpbmZvLgogCiAxKSAvc3lzL2RldmljZXMvc3lzdGVtL2NwdS9jcHVYL3RvcG9sb2d5L3BoeXNpY2FsX3BhY2thZ2VfaWQ6Ci1yZXByZXNlbnQgdGhlIHBoeXNpY2FsIHBhY2thZ2UgaWQgb2YgIGNwdSBYOworCisJcGh5c2ljYWwgcGFja2FnZSBpZCBvZiBjcHVYLiBUeXBpY2FsbHkgY29ycmVzcG9uZHMgdG8gYSBwaHlzaWNhbAorCXNvY2tldCBudW1iZXIsIGJ1dCB0aGUgYWN0dWFsIHZhbHVlIGlzIGFyY2hpdGVjdHVyZSBhbmQgcGxhdGZvcm0KKwlkZXBlbmRlbnQuCisKIDIpIC9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L2NwdVgvdG9wb2xvZ3kvY29yZV9pZDoKLXJlcHJlc2VudCB0aGUgY3B1IGNvcmUgaWQgdG8gY3B1IFg7CisKKwl0aGUgQ1BVIGNvcmUgSUQgb2YgY3B1WC4gVHlwaWNhbGx5IGl0IGlzIHRoZSBoYXJkd2FyZSBwbGF0Zm9ybSdzCisJaWRlbnRpZmllciAocmF0aGVyIHRoYW4gdGhlIGtlcm5lbCdzKS4gIFRoZSBhY3R1YWwgdmFsdWUgaXMKKwlhcmNoaXRlY3R1cmUgYW5kIHBsYXRmb3JtIGRlcGVuZGVudC4KKwogMykgL3N5cy9kZXZpY2VzL3N5c3RlbS9jcHUvY3B1WC90b3BvbG9neS90aHJlYWRfc2libGluZ3M6Ci1yZXByZXNlbnQgdGhlIHRocmVhZCBzaWJsaW5ncyB0byBjcHUgWCBpbiB0aGUgc2FtZSBjb3JlOworCisJaW50ZXJuZWwga2VybmVsIG1hcCBvZiBjcHVYJ3MgaGFyZHdhcmUgdGhyZWFkcyB3aXRoaW4gdGhlIHNhbWUKKwljb3JlIGFzIGNwdVgKKwogNCkgL3N5cy9kZXZpY2VzL3N5c3RlbS9jcHUvY3B1WC90b3BvbG9neS9jb3JlX3NpYmxpbmdzOgotcmVwcmVzZW50IHRoZSB0aHJlYWQgc2libGluZ3MgdG8gY3B1IFggaW4gdGhlIHNhbWUgcGh5c2ljYWwgcGFja2FnZTsKKworCWludGVybmFsIGtlcm5lbCBtYXAgb2YgY3B1WCdzIGhhcmR3YXJlIHRocmVhZHMgd2l0aGluIHRoZSBzYW1lCisJcGh5c2ljYWxfcGFja2FnZV9pZC4KIAogVG8gaW1wbGVtZW50IGl0IGluIGFuIGFyY2hpdGVjdHVyZS1uZXV0cmFsIHdheSwgYSBuZXcgc291cmNlIGZpbGUsCiBkcml2ZXJzL2Jhc2UvdG9wb2xvZ3kuYywgaXMgdG8gZXhwb3J0IHRoZSA0IGF0dHJpYnV0ZXMuCkBAIC0zMiwzMiArNDUsMzIgQEAKIDMpIHRocmVhZF9zaWJsaW5nczoganVzdCB0aGUgZ2l2ZW4gQ1BVCiA0KSBjb3JlX3NpYmxpbmdzOiBqdXN0IHRoZSBnaXZlbiBDUFUKIAotQWRkaXRpb25hbGx5LCBjcHUgdG9wb2xvZ3kgaW5mb3JtYXRpb24gaXMgcHJvdmlkZWQgdW5kZXIKK0FkZGl0aW9uYWxseSwgQ1BVIHRvcG9sb2d5IGluZm9ybWF0aW9uIGlzIHByb3ZpZGVkIHVuZGVyCiAvc3lzL2RldmljZXMvc3lzdGVtL2NwdSBhbmQgaW5jbHVkZXMgdGhlc2UgZmlsZXMuICBUaGUgaW50ZXJuYWwKIHNvdXJjZSBmb3IgdGhlIG91dHB1dCBpcyBpbiBicmFja2V0cyAoIltdIikuCiAKLSAgICBrZXJuZWxfbWF4OiB0aGUgbWF4aW11bSBjcHUgaW5kZXggYWxsb3dlZCBieSB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uCisgICAga2VybmVsX21heDogdGhlIG1heGltdW0gQ1BVIGluZGV4IGFsbG93ZWQgYnkgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLgogCQlbTlJfQ1BVUy0xXQogCi0gICAgb2ZmbGluZToJY3B1cyB0aGF0IGFyZSBub3Qgb25saW5lIGJlY2F1c2UgdGhleSBoYXZlIGJlZW4KKyAgICBvZmZsaW5lOglDUFVzIHRoYXQgYXJlIG5vdCBvbmxpbmUgYmVjYXVzZSB0aGV5IGhhdmUgYmVlbgogCQlIT1RQTFVHR0VEIG9mZiAoc2VlIGNwdS1ob3RwbHVnLnR4dCkgb3IgZXhjZWVkIHRoZSBsaW1pdAotCQlvZiBjcHVzIGFsbG93ZWQgYnkgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIChrZXJuZWxfbWF4CisJCW9mIENQVXMgYWxsb3dlZCBieSB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gKGtlcm5lbF9tYXgKIAkJYWJvdmUpLiBbfmNwdV9vbmxpbmVfbWFzayArIGNwdXMgPj0gTlJfQ1BVU10KIAotICAgIG9ubGluZToJY3B1cyB0aGF0IGFyZSBvbmxpbmUgYW5kIGJlaW5nIHNjaGVkdWxlZCBbY3B1X29ubGluZV9tYXNrXQorICAgIG9ubGluZToJQ1BVcyB0aGF0IGFyZSBvbmxpbmUgYW5kIGJlaW5nIHNjaGVkdWxlZCBbY3B1X29ubGluZV9tYXNrXQogCi0gICAgcG9zc2libGU6CWNwdXMgdGhhdCBoYXZlIGJlZW4gYWxsb2NhdGVkIHJlc291cmNlcyBhbmQgY2FuIGJlCisgICAgcG9zc2libGU6CUNQVXMgdGhhdCBoYXZlIGJlZW4gYWxsb2NhdGVkIHJlc291cmNlcyBhbmQgY2FuIGJlCiAJCWJyb3VnaHQgb25saW5lIGlmIHRoZXkgYXJlIHByZXNlbnQuIFtjcHVfcG9zc2libGVfbWFza10KIAotICAgIHByZXNlbnQ6CWNwdXMgdGhhdCBoYXZlIGJlZW4gaWRlbnRpZmllZCBhcyBiZWluZyBwcmVzZW50IGluIHRoZQorICAgIHByZXNlbnQ6CUNQVXMgdGhhdCBoYXZlIGJlZW4gaWRlbnRpZmllZCBhcyBiZWluZyBwcmVzZW50IGluIHRoZQogCQlzeXN0ZW0uIFtjcHVfcHJlc2VudF9tYXNrXQogCiBUaGUgZm9ybWF0IGZvciB0aGUgYWJvdmUgb3V0cHV0IGlzIGNvbXBhdGlibGUgd2l0aCBjcHVsaXN0X3BhcnNlKCkKIFtzZWUgPGxpbnV4L2NwdW1hc2suaD5dLiAgU29tZSBleGFtcGxlcyBmb2xsb3cuCiAKLUluIHRoaXMgZXhhbXBsZSwgdGhlcmUgYXJlIDY0IGNwdXMgaW4gdGhlIHN5c3RlbSBidXQgY3B1cyAzMi02MyBleGNlZWQKK0luIHRoaXMgZXhhbXBsZSwgdGhlcmUgYXJlIDY0IENQVXMgaW4gdGhlIHN5c3RlbSBidXQgY3B1cyAzMi02MyBleGNlZWQKIHRoZSBrZXJuZWwgbWF4IHdoaWNoIGlzIGxpbWl0ZWQgdG8gMC4uMzEgYnkgdGhlIE5SX0NQVVMgY29uZmlnIG9wdGlvbgotYmVpbmcgMzIuICBOb3RlIGFsc28gdGhhdCBjcHVzIDIgYW5kIDQtMzEgYXJlIG5vdCBvbmxpbmUgYnV0IGNvdWxkIGJlCitiZWluZyAzMi4gIE5vdGUgYWxzbyB0aGF0IENQVXMgMiBhbmQgNC0zMSBhcmUgbm90IG9ubGluZSBidXQgY291bGQgYmUKIGJyb3VnaHQgb25saW5lIGFzIHRoZXkgYXJlIGJvdGggcHJlc2VudCBhbmQgcG9zc2libGUuCiAKICAgICAga2VybmVsX21heDogMzEKQEAgLTY3LDggKzgwLDggQEAKICAgICAgICAgcHJlc2VudDogMC0zMQogCiBJbiB0aGlzIGV4YW1wbGUsIHRoZSBOUl9DUFVTIGNvbmZpZyBvcHRpb24gaXMgMTI4LCBidXQgdGhlIGtlcm5lbCB3YXMKLXN0YXJ0ZWQgd2l0aCBwb3NzaWJsZV9jcHVzPTE0NC4gIFRoZXJlIGFyZSA0IGNwdXMgaW4gdGhlIHN5c3RlbSBhbmQgY3B1Mgotd2FzIG1hbnVhbGx5IHRha2VuIG9mZmxpbmUgKGFuZCBpcyB0aGUgb25seSBjcHUgdGhhdCBjYW4gYmUgYnJvdWdodAorc3RhcnRlZCB3aXRoIHBvc3NpYmxlX2NwdXM9MTQ0LiAgVGhlcmUgYXJlIDQgQ1BVcyBpbiB0aGUgc3lzdGVtIGFuZCBjcHUyCit3YXMgbWFudWFsbHkgdGFrZW4gb2ZmbGluZSAoYW5kIGlzIHRoZSBvbmx5IENQVSB0aGF0IGNhbiBiZSBicm91Z2h0CiBvbmxpbmUuKQogCiAgICAgIGtlcm5lbF9tYXg6IDEyNwpAQCAtNzgsNCArOTEsNCBAQAogICAgICAgICBwcmVzZW50OiAwLTMKIAogU2VlIGNwdS1ob3RwbHVnLnR4dCBmb3IgdGhlIHBvc3NpYmxlX2NwdXM9TlVNIGtlcm5lbCBzdGFydCBwYXJhbWV0ZXIKLWFzIHdlbGwgYXMgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgdmFyaW91cyBjcHVtYXNrJ3MuCithcyB3ZWxsIGFzIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIHZhcmlvdXMgY3B1bWFza3MuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RlYnVnZ2luZy12aWEtb2hjaTEzOTQudHh0IGIvRG9jdW1lbnRhdGlvbi9kZWJ1Z2dpbmctdmlhLW9oY2kxMzk0LnR4dAppbmRleCA1OWE5MWU1Li42MTFmNWE1IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RlYnVnZ2luZy12aWEtb2hjaTEzOTQudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZGVidWdnaW5nLXZpYS1vaGNpMTM5NC50eHQKQEAgLTY0LDE0ICs2NCwxNCBAQAogCiBCZXJuaGFyZCBLYWluZGwgZW5oYW5jZWQgZmlyZXNjb3BlIHRvIHN1cHBvcnQgYWNjZXNzaW5nIDY0LWJpdCBtYWNoaW5lcwogZnJvbSAzMi1iaXQgZmlyZXNjb3BlIGFuZCB2aWNlIHZlcnNhOgotLSBmdHA6Ly9mdHAuc3VzZS5kZS9wcml2YXRlL2JrL2ZpcmV3aXJlL3Rvb2xzL2ZpcmVzY29wZS0wLjIuMi50YXIuYnoyCistIGh0dHA6Ly9oYWxvYmF0ZXMuZGUvZmlyZXdpcmUvZmlyZXNjb3BlLTAuMi4yLnRhci5iejIKIAogYW5kIGhlIGltcGxlbWVudGVkIGZhc3Qgc3lzdGVtIGR1bXAgKGFscGhhIHZlcnNpb24gLSByZWFkIFJFQURNRS50eHQpOgotLSBmdHA6Ly9mdHAuc3VzZS5kZS9wcml2YXRlL2JrL2ZpcmV3aXJlL3Rvb2xzL2ZpcmVkdW1wLTAuMS50YXIuYnoyCistIGh0dHA6Ly9oYWxvYmF0ZXMuZGUvZmlyZXdpcmUvZmlyZWR1bXAtMC4xLnRhci5iejIKIAogVGhlcmUgaXMgYWxzbyBhIGdkYiBwcm94eSBmb3IgZmlyZXdpcmUgd2hpY2ggYWxsb3dzIHRvIHVzZSBnZGIgdG8gYWNjZXNzCiBkYXRhIHdoaWNoIGNhbiBiZSByZWZlcmVuY2VkIGZyb20gc3ltYm9scyBmb3VuZCBieSBnZGIgaW4gdm1saW51eDoKLS0gZnRwOi8vZnRwLnN1c2UuZGUvcHJpdmF0ZS9iay9maXJld2lyZS90b29scy9maXJlcHJveHktMC4zMy50YXIuYnoyCistIGh0dHA6Ly9oYWxvYmF0ZXMuZGUvZmlyZXdpcmUvZmlyZXByb3h5LTAuMzMudGFyLmJ6MgogCiBUaGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhpcyBnZGIgcHJveHkgKGZpcmVwcm94eS0wLjM0KSBjYW4gY29tbXVuaWNhdGUgKG5vdAogeWV0IHN0YWJsZSkgd2l0aCBrZ2RiIG92ZXIgYW4gbWVtb3J5LWJhc2VkIGNvbW11bmljYXRpb24gbW9kdWxlIChrZ2Rib20pLgpAQCAtMTc4LDcgKzE3OCw3IEBACiAKIE5vdGVzCiAtLS0tLQotRG9jdW1lbnRhdGlvbiBhbmQgc3BlY2lmaWNhdGlvbnM6IGZ0cDovL2Z0cC5zdXNlLmRlL3ByaXZhdGUvYmsvZmlyZXdpcmUvZG9jcworRG9jdW1lbnRhdGlvbiBhbmQgc3BlY2lmaWNhdGlvbnM6IGh0dHA6Ly9oYWxvYmF0ZXMuZGUvZmlyZXdpcmUvCiAKIEZpcmVXaXJlIGlzIGEgdHJhZGVtYXJrIG9mIEFwcGxlIEluYy4gLSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBwbGVhc2UgcmVmZXIgdG86CiBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0ZpcmVXaXJlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZlYXR1cmUtcmVtb3ZhbC1zY2hlZHVsZS50eHQgYi9Eb2N1bWVudGF0aW9uL2ZlYXR1cmUtcmVtb3ZhbC1zY2hlZHVsZS50eHQKaW5kZXggODlhNDdiNS4uYmM2OTNmZiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9mZWF0dXJlLXJlbW92YWwtc2NoZWR1bGUudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZmVhdHVyZS1yZW1vdmFsLXNjaGVkdWxlLnR4dApAQCAtNDE4LDYgKzQxOCwxNCBAQAogV2h5OglTaG91bGQgYmUgaW1wbGVtZW50ZWQgaW4gdXNlcnNwYWNlLCBwb2xpY3kgZGFlbW9uLgogV2hvOglKb2hhbm5lcyBCZXJnIDxqb2hhbm5lc0BzaXBzb2x1dGlvbnMubmV0PgogCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworV2hhdDoJQ09ORklHX0lOT1RJRlkKK1doZW46CTIuNi4zMworV2h5OglsYXN0IHVzZXIgKGF1ZGl0KSB3aWxsIGJlIGNvbnZlcnRlZCB0byB0aGUgbmV3ZXIgbW9yZSBnZW5lcmljCisJYW5kIG1vcmUgZWFzaWx5IG1haW50YWluZWQgZnNub3RpZnkgc3Vic3lzdGVtCitXaG86CUVyaWMgUGFyaXMgPGVwYXJpc0ByZWRoYXQuY29tPgorCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIFdoYXQ6CWxvY2tfcG9saWN5X3J3c2VtXyogYW5kIHVubG9ja19wb2xpY3lfcndzZW1fKiB3aWxsIG5vdCBiZQpAQCAtNDUxLDMgKzQ1OSwzMyBAQAogCXdpbGwgYWxzbyBhbGxvdyBtYWtpbmcgQUxTQSBPU1MgZW11bGF0aW9uIGluZGVwZW5kZW50IG9mCiAJc291bmRfY29yZS4gIFRoZSBkZXBlbmRlbmN5IHdpbGwgYmUgYnJva2VuIHRoZW4gdG9vLgogV2hvOglUZWp1biBIZW8gPHRqQGtlcm5lbC5vcmc+CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworV2hhdDoJU3VwcG9ydCBmb3IgVk13YXJlJ3MgZ3Vlc3QgcGFyYXZpcnR1bGlhemF0aW9uIHRlY2huaXF1ZSBbVk1JXSB3aWxsIGJlCisJZHJvcHBlZC4KK1doZW46CTIuNi4zNyBvciBlYXJsaWVyLgorV2h5OglXaXRoIHRoZSByZWNlbnQgaW5ub3ZhdGlvbnMgaW4gQ1BVIGhhcmR3YXJlIGFjY2VsZXJhdGlvbiB0ZWNobm9sb2dpZXMKKwlmcm9tIEludGVsIGFuZCBBTUQsIFZNd2FyZSByYW4gYSBmZXcgZXhwZXJpbWVudHMgdG8gY29tcGFyZSB0aGVzZQorCXRlY2huaXF1ZXMgdG8gZ3Vlc3QgcGFyYXZpcnR1YWxpemF0aW9uIHRlY2huaXF1ZSBvbiBWTXdhcmUncyBwbGF0Zm9ybS4KKwlUaGVzZSBoYXJkd2FyZSBhc3Npc3RlZCB2aXJ0dWFsaXphdGlvbiB0ZWNobmlxdWVzIGhhdmUgb3V0cGVyZm9ybWVkIHRoZQorCXBlcmZvcm1hbmNlIGJlbmVmaXRzIHByb3ZpZGVkIGJ5IFZNSSBpbiBtb3N0IG9mIHRoZSB3b3JrbG9hZHMuIFZNd2FyZQorCWV4cGVjdHMgdGhhdCB0aGVzZSBoYXJkd2FyZSBmZWF0dXJlcyB3aWxsIGJlIHViaXF1aXRvdXMgaW4gYSBjb3VwbGUgb2YKKwl5ZWFycywgYXMgYSByZXN1bHQsIFZNd2FyZSBoYXMgc3RhcnRlZCBhIHBoYXNlZCByZXRpcmVtZW50IG9mIHRoaXMKKwlmZWF0dXJlIGZyb20gdGhlIGh5cGVydmlzb3IuIFdlIHdpbGwgYmUgcmVtb3ZpbmcgdGhpcyBmZWF0dXJlIGZyb20gdGhlCisJS2VybmVsIHRvby4gUmlnaHQgbm93IHdlIGFyZSB0YXJnZXRpbmcgMi42LjM3IGJ1dCBjYW4gcmV0aXJlIGVhcmxpZXIgaWYKKwl0ZWNobmljYWwgcmVhc29ucyAocmVhZCBvcHBvcnR1bml0eSB0byByZW1vdmUgbWFqb3IgY2h1bmsgb2YgcHZvcHMpCisJYXJpc2UuCisKKwlQbGVhc2Ugbm90ZSB0aGF0IFZNSSBoYXMgYWx3YXlzIGJlZW4gYW4gb3B0aW1pemF0aW9uIGFuZCBub24tVk1JIGtlcm5lbHMKKwlzdGlsbCB3b3JrIGZpbmUgb24gVk13YXJlJ3MgcGxhdGZvcm0uCisJTGF0ZXN0IHZlcnNpb25zIG9mIFZNd2FyZSdzIHByb2R1Y3Qgd2hpY2ggc3VwcG9ydCBWTUkgYXJlLAorCVdvcmtzdGF0aW9uIDcuMCBhbmQgVlNwaGVyZSA0LjAgb24gRVNYIHNpZGUsIGZ1dHVyZSBtYWludGFpbmVuY2UKKwlyZWxlYXNlcyBmb3IgdGhlc2UgcHJvZHVjdHMgd2lsbCBjb250aW51ZSBzdXBwb3J0aW5nIFZNSS4KKworCUZvciBtb3JlIGRldGFpbHMgYWJvdXQgVk1JIHJldGlyZW1lbnQgdGFrZSBhIGxvb2sgYXQgdGhpcywKKwlodHRwOi8vYmxvZ3Mudm13YXJlLmNvbS9ndWVzdG9zZ3VpZGUvMjAwOS8wOS92bWktcmV0aXJlbWVudC5odG1sCisKK1dobzoJQWxvayBOIEthdGFyaWEgPGFrYXRhcmlhQHZtd2FyZS5jb20+CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZXh0My50eHQgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2V4dDMudHh0CmluZGV4IDU3MGY5YmQuLjA1ZDVjZjEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZXh0My50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9leHQzLnR4dApAQCAtMTIzLDEwICsxMjMsMTggQEAKIAogc2I9bgkJCVVzZSBhbHRlcm5hdGUgc3VwZXJibG9jayBhdCB0aGlzIGxvY2F0aW9uLgogCi1xdW90YQotbm9xdW90YQotZ3JwcXVvdGEKLXVzcnF1b3RhCitxdW90YQkJCVRoZXNlIG9wdGlvbnMgYXJlIGlnbm9yZWQgYnkgdGhlIGZpbGVzeXN0ZW0uIFRoZXkKK25vcXVvdGEJCQlhcmUgdXNlZCBvbmx5IGJ5IHF1b3RhIHRvb2xzIHRvIHJlY29nbml6ZSB2b2x1bWVzCitncnBxdW90YQkJd2hlcmUgcXVvdGEgc2hvdWxkIGJlIHR1cm5lZCBvbi4gU2VlIGRvY3VtZW50YXRpb24KK3VzcnF1b3RhCQlpbiB0aGUgcXVvdGEtdG9vbHMgcGFja2FnZSBmb3IgbW9yZSBkZXRhaWxzCisJCQkoaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9saW51eHF1b3RhKS4KKworanFmbXQ9PHF1b3RhIHR5cGU+CVRoZXNlIG9wdGlvbnMgdGVsbCBmaWxlc3lzdGVtIGRldGFpbHMgYWJvdXQgcXVvdGEKK3VzcmpxdW90YT08ZmlsZT4Jc28gdGhhdCBxdW90YSBpbmZvcm1hdGlvbiBjYW4gYmUgcHJvcGVybHkgdXBkYXRlZAorZ3JwanF1b3RhPTxmaWxlPglkdXJpbmcgam91cm5hbCByZXBsYXkuIFRoZXkgcmVwbGFjZSB0aGUgYWJvdmUKKwkJCXF1b3RhIG9wdGlvbnMuIFNlZSBkb2N1bWVudGF0aW9uIGluIHRoZSBxdW90YS10b29scworCQkJcGFja2FnZSBmb3IgbW9yZSBkZXRhaWxzCisJCQkoaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9saW51eHF1b3RhKS4KIAogYmgJCSgqKQlleHQzIGFzc29jaWF0ZXMgYnVmZmVyIGhlYWRzIHRvIGRhdGEgcGFnZXMgdG8KIG5vYmgJCQkoYSkgY2FjaGUgZGlzayBibG9jayBtYXBwaW5nIGluZm9ybWF0aW9uCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2V4dDQudHh0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9leHQ0LnR4dAppbmRleCAxOGI1ZWM4Li42ZDk0ZTA2IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2V4dDQudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZXh0NC50eHQKQEAgLTEzNCw5ICsxMzQsMTUgQEAKICAgICAgICAgICAgICAgICAgICAgIAltb3VudCBvcHRpb25zICJybyxub2xvYWQiIGNhbiBiZSB1c2VkIHRvIHByZXZlbnQKIAkJICAgICAJd3JpdGVzIHRvIHRoZSBmaWxlc3lzdGVtLgogCitqb3VybmFsX2NoZWNrc3VtCUVuYWJsZSBjaGVja3N1bW1pbmcgb2YgdGhlIGpvdXJuYWwgdHJhbnNhY3Rpb25zLgorCQkJVGhpcyB3aWxsIGFsbG93IHRoZSByZWNvdmVyeSBjb2RlIGluIGUyZnNjayBhbmQgdGhlCisJCQlrZXJuZWwgdG8gZGV0ZWN0IGNvcnJ1cHRpb24gaW4gdGhlIGtlcm5lbC4gIEl0IGlzIGEKKwkJCWNvbXBhdGlibGUgY2hhbmdlIGFuZCB3aWxsIGJlIGlnbm9yZWQgYnkgb2xkZXIga2VybmVscy4KKwogam91cm5hbF9hc3luY19jb21taXQJQ29tbWl0IGJsb2NrIGNhbiBiZSB3cml0dGVuIHRvIGRpc2sgd2l0aG91dCB3YWl0aW5nCiAJCQlmb3IgZGVzY3JpcHRvciBibG9ja3MuIElmIGVuYWJsZWQgb2xkZXIga2VybmVscyBjYW5ub3QKLQkJCW1vdW50IHRoZSBkZXZpY2UuCisJCQltb3VudCB0aGUgZGV2aWNlLiBUaGlzIHdpbGwgZW5hYmxlICdqb3VybmFsX2NoZWNrc3VtJworCQkJaW50ZXJuYWxseS4KIAogam91cm5hbD11cGRhdGUJCVVwZGF0ZSB0aGUgZXh0NCBmaWxlIHN5c3RlbSdzIGpvdXJuYWwgdG8gdGhlIGN1cnJlbnQKIAkJCWZvcm1hdC4KQEAgLTI4Miw5ICsyODgsMTYgQEAKIAkJCXRvIHVzZSBmb3IgYWxsb2NhdGlvbiBzaXplIGFuZCBhbGlnbm1lbnQuIEZvciBSQUlENS82CiAJCQlzeXN0ZW1zIHRoaXMgc2hvdWxkIGJlIHRoZSBudW1iZXIgb2YgZGF0YQogCQkJZGlza3MgKiAgUkFJRCBjaHVuayBzaXplIGluIGZpbGUgc3lzdGVtIGJsb2Nrcy4KLWRlbGFsbG9jCSgqKQlEZWZlcnJpbmcgYmxvY2sgYWxsb2NhdGlvbiB1bnRpbCB3cml0ZS1vdXQgdGltZS4KLW5vZGVsYWxsb2MJCURpc2FibGUgZGVsYXllZCBhbGxvY2F0aW9uLiBCbG9ja3MgYXJlIGFsbG9jYXRpb24KLQkJCXdoZW4gZGF0YSBpcyBjb3BpZWQgZnJvbSB1c2VyIHRvIHBhZ2UgY2FjaGUuCisKK2RlbGFsbG9jCSgqKQlEZWZlciBibG9jayBhbGxvY2F0aW9uIHVudGlsIGp1c3QgYmVmb3JlIGV4dDQKKwkJCXdyaXRlcyBvdXQgdGhlIGJsb2NrKHMpIGluIHF1ZXN0aW9uLiAgVGhpcworCQkJYWxsb3dzIGV4dDQgdG8gYmV0dGVyIGFsbG9jYXRpb24gZGVjaXNpb25zCisJCQltb3JlIGVmZmljaWVudGx5Lgorbm9kZWxhbGxvYwkJRGlzYWJsZSBkZWxheWVkIGFsbG9jYXRpb24uICBCbG9ja3MgYXJlIGFsbG9jYXRlZAorCQkJd2hlbiB0aGUgZGF0YSBpcyBjb3BpZWQgZnJvbSB1c2Vyc3BhY2UgdG8gdGhlCisJCQlwYWdlIGNhY2hlLCBlaXRoZXIgdmlhIHRoZSB3cml0ZSgyKSBzeXN0ZW0gY2FsbAorCQkJb3Igd2hlbiBhbiBtbWFwJ2VkIHBhZ2Ugd2hpY2ggd2FzIHByZXZpb3VzbHkKKwkJCXVuYWxsb2NhdGVkIGlzIHdyaXR0ZW4gZm9yIHRoZSBmaXJzdCB0aW1lLgogCiBtYXhfYmF0Y2hfdGltZT11c2VjCU1heGltdW0gYW1vdW50IG9mIHRpbWUgZXh0NCBzaG91bGQgd2FpdCBmb3IKIAkJCWFkZGl0aW9uYWwgZmlsZXN5c3RlbSBvcGVyYXRpb25zIHRvIGJlIGJhdGNoCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Byb2MudHh0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wcm9jLnR4dAppbmRleCBiNWFlZTc4Li4yYzQ4Zjk0IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Byb2MudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcHJvYy50eHQKQEAgLTExMTMsNyArMTExMyw2IEBACiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KICBGaWxlICAgICAgICAgICAgQ29udGVudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICBtYl9ncm91cHMgICAgICAgZGV0YWlscyBvZiBtdWx0aWJsb2NrIGFsbG9jYXRvciBidWRkeSBjYWNoZSBvZiBmcmVlIGJsb2NrcwotIG1iX2hpc3RvcnkgICAgICBtdWx0aWJsb2NrIGFsbG9jYXRpb24gaGlzdG9yeQogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy92ZmF0LnR4dCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZhdC50eHQKaW5kZXggYjU4Yjg0Yi4uZWVkNTIwZiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy92ZmF0LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3ZmYXQudHh0CkBAIC0xMDIsNyArMTAyLDcgQEAKIAkJIHdpbm50OiBlbXVsYXRlIHRoZSBXaW5kb3dzIE5UIHJ1bGUgZm9yIGRpc3BsYXkvY3JlYXRlLgogCQkgbWl4ZWQ6IGVtdWxhdGUgdGhlIFdpbmRvd3MgTlQgcnVsZSBmb3IgZGlzcGxheSwKIAkJCWVtdWxhdGUgdGhlIFdpbmRvd3MgOTUgcnVsZSBmb3IgY3JlYXRlLgotCQkgRGVmYXVsdCBzZXR0aW5nIGlzIGBsb3dlcicuCisJCSBEZWZhdWx0IHNldHRpbmcgaXMgYG1peGVkJy4KIAogdHo9VVRDICAgICAgICAtLSBJbnRlcnByZXQgdGltZXN0YW1wcyBhcyBVVEMgcmF0aGVyIHRoYW4gbG9jYWwgdGltZS4KICAgICAgICAgICAgICAgICAgVGhpcyBvcHRpb24gZGlzYWJsZXMgdGhlIGNvbnZlcnNpb24gb2YgdGltZXN0YW1wcwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9mbGV4aWJsZS1hcnJheXMudHh0IGIvRG9jdW1lbnRhdGlvbi9mbGV4aWJsZS1hcnJheXMudHh0CmluZGV4IDg0ZWIyNjguLmNiOGEzYTAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmxleGlibGUtYXJyYXlzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2ZsZXhpYmxlLWFycmF5cy50eHQKQEAgLTEsNSArMSw1IEBACiBVc2luZyBmbGV4aWJsZSBhcnJheXMgaW4gdGhlIGtlcm5lbAotTGFzdCB1cGRhdGVkIGZvciAyLjYuMzEKK0xhc3QgdXBkYXRlZCBmb3IgMi42LjMyCiBKb25hdGhhbiBDb3JiZXQgPGNvcmJldEBsd24ubmV0PgogCiBMYXJnZSBjb250aWd1b3VzIG1lbW9yeSBhbGxvY2F0aW9ucyBjYW4gYmUgdW5yZWxpYWJsZSBpbiB0aGUgTGludXgga2VybmVsLgpAQCAtNDAsNiArNDAsMTMgQEAKIHRoZSBjdXJyZW50IGNvZGUsIHVzaW5nIGZsYWdzIHRvIGFzayBmb3IgaGlnaCBtZW1vcnkgaXMgbGlrZWx5IHRvIGxlYWQgdG8KIG5vdGFibHkgdW5wbGVhc2FudCBzaWRlIGVmZmVjdHMuCiAKK0l0IGlzIGFsc28gcG9zc2libGUgdG8gZGVmaW5lIGZsZXhpYmxlIGFycmF5cyBhdCBjb21waWxlIHRpbWUgd2l0aDoKKworICAgIERFRklORV9GTEVYX0FSUkFZKG5hbWUsIGVsZW1lbnRfc2l6ZSwgdG90YWwpOworCitUaGlzIG1hY3JvIHdpbGwgcmVzdWx0IGluIGEgZGVmaW5pdGlvbiBvZiBhbiBhcnJheSB3aXRoIHRoZSBnaXZlbiBuYW1lOyB0aGUKK2VsZW1lbnQgc2l6ZSBhbmQgdG90YWwgd2lsbCBiZSBjaGVja2VkIGZvciB2YWxpZGl0eSBhdCBjb21waWxlIHRpbWUuCisKIFN0b3JpbmcgZGF0YSBpbnRvIGEgZmxleGlibGUgYXJyYXkgaXMgYWNjb21wbGlzaGVkIHdpdGggYSBjYWxsIHRvOgogCiAgICAgaW50IGZsZXhfYXJyYXlfcHV0KHN0cnVjdCBmbGV4X2FycmF5ICphcnJheSwgdW5zaWduZWQgaW50IGVsZW1lbnRfbnIsCkBAIC03NiwxNiArODMsMzAgQEAKIE5vdGUgdGhhdCBpdCBpcyBwb3NzaWJsZSB0byBnZXQgYmFjayBhIHZhbGlkIHBvaW50ZXIgZm9yIGFuIGVsZW1lbnQgd2hpY2gKIGhhcyBuZXZlciBiZWVuIHN0b3JlZCBpbiB0aGUgYXJyYXkuICBNZW1vcnkgZm9yIGFycmF5IGVsZW1lbnRzIGlzIGFsbG9jYXRlZAogb25lIHBhZ2UgYXQgYSB0aW1lOyBhIHNpbmdsZSBhbGxvY2F0aW9uIGNvdWxkIHByb3ZpZGUgbWVtb3J5IGZvciBzZXZlcmFsCi1hZGphY2VudCBlbGVtZW50cy4gIFRoZSBmbGV4aWJsZSBhcnJheSBjb2RlIGRvZXMgbm90IGtub3cgaWYgYSBzcGVjaWZpYwotZWxlbWVudCBoYXMgYmVlbiB3cml0dGVuOyBpdCBvbmx5IGtub3dzIGlmIHRoZSBhc3NvY2lhdGVkIG1lbW9yeSBpcwotcHJlc2VudC4gIFNvIGEgZmxleF9hcnJheV9nZXQoKSBjYWxsIG9uIGFuIGVsZW1lbnQgd2hpY2ggd2FzIG5ldmVyIHN0b3JlZAotaW4gdGhlIGFycmF5IGhhcyB0aGUgcG90ZW50aWFsIHRvIHJldHVybiBhIHBvaW50ZXIgdG8gcmFuZG9tIGRhdGEuICBJZiB0aGUKLWNhbGxlciBkb2VzIG5vdCBoYXZlIGEgc2VwYXJhdGUgd2F5IHRvIGtub3cgd2hpY2ggZWxlbWVudHMgd2VyZSBhY3R1YWxseQotc3RvcmVkLCBpdCBtaWdodCBiZSB3aXNlLCBhdCBsZWFzdCwgdG8gYWRkIEdGUF9aRVJPIHRvIHRoZSBmbGFncyBhcmd1bWVudAotdG8gZW5zdXJlIHRoYXQgYWxsIGVsZW1lbnRzIGFyZSB6ZXJvZWQuCithZGphY2VudCBlbGVtZW50cy4gIEZsZXhpYmxlIGFycmF5IGVsZW1lbnRzIGFyZSBub3JtYWxseSBpbml0aWFsaXplZCB0byB0aGUKK3ZhbHVlIEZMRVhfQVJSQVlfRlJFRSAoZGVmaW5lZCBhcyAweDZjIGluIDxsaW51eC9wb2lzb24uaD4pLCBzbyBlcnJvcnMKK2ludm9sdmluZyB0aGF0IG51bWJlciBwcm9iYWJseSByZXN1bHQgZnJvbSB1c2Ugb2YgdW5zdG9yZWQgYXJyYXkgZW50cmllcy4KK05vdGUgdGhhdCwgaWYgYXJyYXkgZWxlbWVudHMgYXJlIGFsbG9jYXRlZCB3aXRoIF9fR0ZQX1pFUk8sIHRoZXkgd2lsbCBiZQoraW5pdGlhbGl6ZWQgdG8gemVybyBhbmQgdGhpcyBwb2lzb25pbmcgd2lsbCBub3QgaGFwcGVuLgogCi1UaGVyZSBpcyBubyB3YXkgdG8gcmVtb3ZlIGEgc2luZ2xlIGVsZW1lbnQgZnJvbSB0aGUgYXJyYXkuICBJdCBpcyBwb3NzaWJsZSwKLXRob3VnaCwgdG8gcmVtb3ZlIGFsbCBlbGVtZW50cyB3aXRoIGEgY2FsbCB0bzoKK0luZGl2aWR1YWwgZWxlbWVudHMgaW4gdGhlIGFycmF5IGNhbiBiZSBjbGVhcmVkIHdpdGg6CisKKyAgICBpbnQgZmxleF9hcnJheV9jbGVhcihzdHJ1Y3QgZmxleF9hcnJheSAqYXJyYXksIHVuc2lnbmVkIGludCBlbGVtZW50X25yKTsKKworVGhpcyBmdW5jdGlvbiB3aWxsIHNldCB0aGUgZ2l2ZW4gZWxlbWVudCB0byBGTEVYX0FSUkFZX0ZSRUUgYW5kIHJldHVybgoremVyby4gIElmIHN0b3JhZ2UgZm9yIHRoZSBpbmRpY2F0ZWQgZWxlbWVudCBpcyBub3QgYWxsb2NhdGVkIGZvciB0aGUgYXJyYXksCitmbGV4X2FycmF5X2NsZWFyKCkgd2lsbCByZXR1cm4gLUVJTlZBTCBpbnN0ZWFkLiAgTm90ZSB0aGF0IGNsZWFyaW5nIGFuCitlbGVtZW50IGRvZXMgbm90IHJlbGVhc2UgdGhlIHN0b3JhZ2UgYXNzb2NpYXRlZCB3aXRoIGl0OyB0byByZWR1Y2UgdGhlCithbGxvY2F0ZWQgc2l6ZSBvZiBhbiBhcnJheSwgY2FsbDoKKworICAgIGludCBmbGV4X2FycmF5X3NocmluayhzdHJ1Y3QgZmxleF9hcnJheSAqYXJyYXkpOworCitUaGUgcmV0dXJuIHZhbHVlIHdpbGwgYmUgdGhlIG51bWJlciBvZiBwYWdlcyBvZiBtZW1vcnkgYWN0dWFsbHkgZnJlZWQuCitUaGlzIGZ1bmN0aW9uIHdvcmtzIGJ5IHNjYW5uaW5nIHRoZSBhcnJheSBmb3IgcGFnZXMgY29udGFpbmluZyBub3RoaW5nIGJ1dAorRkxFWF9BUlJBWV9GUkVFIGJ5dGVzLCBzbyAoMSkgaXQgY2FuIGJlIGV4cGVuc2l2ZSwgYW5kICgyKSBpdCB3aWxsIG5vdCB3b3JrCitpZiB0aGUgYXJyYXkncyBwYWdlcyBhcmUgYWxsb2NhdGVkIHdpdGggX19HRlBfWkVSTy4KKworSXQgaXMgcG9zc2libGUgdG8gcmVtb3ZlIGFsbCBlbGVtZW50cyBvZiBhbiBhcnJheSB3aXRoIGEgY2FsbCB0bzoKIAogICAgIHZvaWQgZmxleF9hcnJheV9mcmVlX3BhcnRzKHN0cnVjdCBmbGV4X2FycmF5ICphcnJheSk7CiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaHdtb24vbHRjNDIxNSBiL0RvY3VtZW50YXRpb24vaHdtb24vbHRjNDIxNQppbmRleCAyZTZhMjFlLi5jMTk2YTE4IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2h3bW9uL2x0YzQyMTUKKysrIGIvRG9jdW1lbnRhdGlvbi9od21vbi9sdGM0MjE1CkBAIC0yMiwxMiArMjIsMTMgQEAKIC0tLS0tLS0tLS0tCiAKIFRoaXMgZHJpdmVyIGRvZXMgbm90IHByb2JlIGZvciBMVEM0MjE1IGRldmljZXMsIGR1ZSB0byB0aGUgZmFjdCB0aGF0IHNvbWUKLW9mIHRoZSBwb3NzaWJsZSBhZGRyZXNzZXMgYXJlIHVuZnJpZW5kbHkgdG8gcHJvYmluZy4gWW91IHdpbGwgbmVlZCB0byB1c2UKLXRoZSAiZm9yY2UiIHBhcmFtZXRlciB0byB0ZWxsIHRoZSBkcml2ZXIgd2hlcmUgdG8gZmluZCB0aGUgZGV2aWNlLgorb2YgdGhlIHBvc3NpYmxlIGFkZHJlc3NlcyBhcmUgdW5mcmllbmRseSB0byBwcm9iaW5nLiBZb3Ugd2lsbCBoYXZlIHRvCitpbnN0YW50aWF0ZSB0aGUgZGV2aWNlcyBleHBsaWNpdGx5LgogCiBFeGFtcGxlOiB0aGUgZm9sbG93aW5nIHdpbGwgbG9hZCB0aGUgZHJpdmVyIGZvciBhbiBMVEM0MjE1IGF0IGFkZHJlc3MgMHg0NAogb24gSTJDIGJ1cyAjMDoKLSQgbW9kcHJvYmUgbHRjNDIxNSBmb3JjZT0wLDB4NDQKKyQgbW9kcHJvYmUgbHRjNDIxNQorJCBlY2hvIGx0YzQyMTUgMHg0NCA+IC9zeXMvYnVzL2kyYy9kZXZpY2VzL2kyYy0wL25ld19kZXZpY2UKIAogCiBTeXNmcyBlbnRyaWVzCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2h3bW9uL2x0YzQyNDUgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL2x0YzQyNDUKaW5kZXggYmFlN2EzYS4uMDI4MzhhNCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9od21vbi9sdGM0MjQ1CisrKyBiL0RvY3VtZW50YXRpb24vaHdtb24vbHRjNDI0NQpAQCAtMjMsMTIgKzIzLDEzIEBACiAtLS0tLS0tLS0tLQogCiBUaGlzIGRyaXZlciBkb2VzIG5vdCBwcm9iZSBmb3IgTFRDNDI0NSBkZXZpY2VzLCBkdWUgdG8gdGhlIGZhY3QgdGhhdCBzb21lCi1vZiB0aGUgcG9zc2libGUgYWRkcmVzc2VzIGFyZSB1bmZyaWVuZGx5IHRvIHByb2JpbmcuIFlvdSB3aWxsIG5lZWQgdG8gdXNlCi10aGUgImZvcmNlIiBwYXJhbWV0ZXIgdG8gdGVsbCB0aGUgZHJpdmVyIHdoZXJlIHRvIGZpbmQgdGhlIGRldmljZS4KK29mIHRoZSBwb3NzaWJsZSBhZGRyZXNzZXMgYXJlIHVuZnJpZW5kbHkgdG8gcHJvYmluZy4gWW91IHdpbGwgaGF2ZSB0bworaW5zdGFudGlhdGUgdGhlIGRldmljZXMgZXhwbGljaXRseS4KIAogRXhhbXBsZTogdGhlIGZvbGxvd2luZyB3aWxsIGxvYWQgdGhlIGRyaXZlciBmb3IgYW4gTFRDNDI0NSBhdCBhZGRyZXNzIDB4MjMKIG9uIEkyQyBidXMgIzE6Ci0kIG1vZHByb2JlIGx0YzQyNDUgZm9yY2U9MSwweDIzCiskIG1vZHByb2JlIGx0YzQyNDUKKyQgZWNobyBsdGM0MjQ1IDB4MjMgPiAvc3lzL2J1cy9pMmMvZGV2aWNlcy9pMmMtMS9uZXdfZGV2aWNlCiAKIAogU3lzZnMgZW50cmllcwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9od21vbi9zeXNmcy1pbnRlcmZhY2UgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL3N5c2ZzLWludGVyZmFjZQppbmRleCBkY2JkNTAyLi44MmRlZjg4IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2h3bW9uL3N5c2ZzLWludGVyZmFjZQorKysgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL3N5c2ZzLWludGVyZmFjZQpAQCAtMzUzLDEwICszNTMsMjAgQEAKIAkJCQlVbml0OiBtaWNyb1dhdHQKIAkJCQlSTwogCi1wb3dlclsxLSpdX2F2ZXJhZ2VfaW50ZXJ2YWwJUG93ZXIgdXNlIGF2ZXJhZ2luZyBpbnRlcnZhbAorcG93ZXJbMS0qXV9hdmVyYWdlX2ludGVydmFsCVBvd2VyIHVzZSBhdmVyYWdpbmcgaW50ZXJ2YWwuICBBIHBvbGwKKwkJCQlub3RpZmljYXRpb24gaXMgc2VudCB0byB0aGlzIGZpbGUgaWYgdGhlCisJCQkJaGFyZHdhcmUgY2hhbmdlcyB0aGUgYXZlcmFnaW5nIGludGVydmFsLgogCQkJCVVuaXQ6IG1pbGxpc2Vjb25kcwogCQkJCVJXCiAKK3Bvd2VyWzEtKl1fYXZlcmFnZV9pbnRlcnZhbF9tYXgJTWF4aW11bSBwb3dlciB1c2UgYXZlcmFnaW5nIGludGVydmFsCisJCQkJVW5pdDogbWlsbGlzZWNvbmRzCisJCQkJUk8KKworcG93ZXJbMS0qXV9hdmVyYWdlX2ludGVydmFsX21pbglNaW5pbXVtIHBvd2VyIHVzZSBhdmVyYWdpbmcgaW50ZXJ2YWwKKwkJCQlVbml0OiBtaWxsaXNlY29uZHMKKwkJCQlSTworCiBwb3dlclsxLSpdX2F2ZXJhZ2VfaGlnaGVzdAlIaXN0b3JpY2FsIGF2ZXJhZ2UgbWF4aW11bSBwb3dlciB1c2UKIAkJCQlVbml0OiBtaWNyb1dhdHQKIAkJCQlSTwpAQCAtMzY1LDYgKzM3NSwxOCBAQAogCQkJCVVuaXQ6IG1pY3JvV2F0dAogCQkJCVJPCiAKK3Bvd2VyWzEtKl1fYXZlcmFnZV9tYXgJCUEgcG9sbCBub3RpZmljYXRpb24gaXMgc2VudCB0bworCQkJCXBvd2VyWzEtKl1fYXZlcmFnZSB3aGVuIHBvd2VyIHVzZQorCQkJCXJpc2VzIGFib3ZlIHRoaXMgdmFsdWUuCisJCQkJVW5pdDogbWljcm9XYXR0CisJCQkJUlcKKworcG93ZXJbMS0qXV9hdmVyYWdlX21pbgkJQSBwb2xsIG5vdGlmaWNhdGlvbiBpcyBzZW50IHRvCisJCQkJcG93ZXJbMS0qXV9hdmVyYWdlIHdoZW4gcG93ZXIgdXNlCisJCQkJc2lua3MgYmVsb3cgdGhpcyB2YWx1ZS4KKwkJCQlVbml0OiBtaWNyb1dhdHQKKwkJCQlSVworCiBwb3dlclsxLSpdX2lucHV0CQlJbnN0YW50YW5lb3VzIHBvd2VyIHVzZQogCQkJCVVuaXQ6IG1pY3JvV2F0dAogCQkJCVJPCkBAIC0zODEsNiArNDAzLDM5IEBACiAJCQkJYXZlcmFnZV9oaWdoZXN0IGFuZCBhdmVyYWdlX2xvd2VzdC4KIAkJCQlXTwogCitwb3dlclsxLSpdX2FjY3VyYWN5CQlBY2N1cmFjeSBvZiB0aGUgcG93ZXIgbWV0ZXIuCisJCQkJVW5pdDogUGVyY2VudAorCQkJCVJPCisKK3Bvd2VyWzEtKl1fYWxhcm0JCTEgaWYgdGhlIHN5c3RlbSBpcyBkcmF3aW5nIG1vcmUgcG93ZXIgdGhhbiB0aGUKKwkJCQljYXAgYWxsb3dzOyAwIG90aGVyd2lzZS4gIEEgcG9sbCBub3RpZmljYXRpb24gaXMKKwkJCQlzZW50IHRvIHRoaXMgZmlsZSB3aGVuIHRoZSBwb3dlciB1c2UgZXhjZWVkcyB0aGUKKwkJCQljYXAuICBUaGlzIGZpbGUgb25seSBhcHBlYXJzIGlmIHRoZSBjYXAgaXMga25vd24KKwkJCQl0byBiZSBlbmZvcmNlZCBieSBoYXJkd2FyZS4KKwkJCQlSTworCitwb3dlclsxLSpdX2NhcAkJCUlmIHBvd2VyIHVzZSByaXNlcyBhYm92ZSB0aGlzIGxpbWl0LCB0aGUKKwkJCQlzeXN0ZW0gc2hvdWxkIHRha2UgYWN0aW9uIHRvIHJlZHVjZSBwb3dlciB1c2UuCisJCQkJQSBwb2xsIG5vdGlmaWNhdGlvbiBpcyBzZW50IHRvIHRoaXMgZmlsZSBpZiB0aGUKKwkJCQljYXAgaXMgY2hhbmdlZCBieSB0aGUgaGFyZHdhcmUuICBUaGUgKl9jYXAKKwkJCQlmaWxlcyBvbmx5IGFwcGVhciBpZiB0aGUgY2FwIGlzIGtub3duIHRvIGJlCisJCQkJZW5mb3JjZWQgYnkgaGFyZHdhcmUuCisJCQkJVW5pdDogbWljcm9XYXR0CisJCQkJUlcKKworcG93ZXJbMS0qXV9jYXBfaHlzdAkJTWFyZ2luIG9mIGh5c3RlcmVzaXMgYnVpbHQgYXJvdW5kIGNhcHBpbmcgYW5kCisJCQkJbm90aWZpY2F0aW9uLgorCQkJCVVuaXQ6IG1pY3JvV2F0dAorCQkJCVJXCisKK3Bvd2VyWzEtKl1fY2FwX21heAkJTWF4aW11bSBjYXAgdGhhdCBjYW4gYmUgc2V0LgorCQkJCVVuaXQ6IG1pY3JvV2F0dAorCQkJCVJPCisKK3Bvd2VyWzEtKl1fY2FwX21pbgkJTWluaW11bSBjYXAgdGhhdCBjYW4gYmUgc2V0LgorCQkJCVVuaXQ6IG1pY3JvV2F0dAorCQkJCVJPCisKICoqKioqKioqKioKICogRW5lcmd5ICoKICoqKioqKioqKioKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaTJjL2luc3RhbnRpYXRpbmctZGV2aWNlcyBiL0RvY3VtZW50YXRpb24vaTJjL2luc3RhbnRpYXRpbmctZGV2aWNlcwppbmRleCBjNzQwYjdiLi5lODk0OTAyIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2kyYy9pbnN0YW50aWF0aW5nLWRldmljZXMKKysrIGIvRG9jdW1lbnRhdGlvbi9pMmMvaW5zdGFudGlhdGluZy1kZXZpY2VzCkBAIC0xODgsNyArMTg4LDcgQEAKIGRlbGV0ZWQuCiAKIEV4YW1wbGU6Ci0jIGVjaG8gZWVwcm9tIDB4NTAgPiAvc3lzL2NsYXNzL2kyYy1hZGFwdGVyL2kyYy0zL25ld19kZXZpY2UKKyMgZWNobyBlZXByb20gMHg1MCA+IC9zeXMvYnVzL2kyYy9kZXZpY2VzL2kyYy0zL25ld19kZXZpY2UKIAogV2hpbGUgdGhpcyBpbnRlcmZhY2Ugc2hvdWxkIG9ubHkgYmUgdXNlZCB3aGVuIGluLWtlcm5lbCBkZXZpY2UgZGVjbGFyYXRpb24KIGNhbid0IGJlIGRvbmUsIHRoZXJlIGlzIGEgdmFyaWV0eSBvZiBjYXNlcyB3aGVyZSBpdCBjYW4gYmUgaGVscGZ1bDoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaW5maW5pYmFuZC91c2VyX21hZC50eHQgYi9Eb2N1bWVudGF0aW9uL2luZmluaWJhbmQvdXNlcl9tYWQudHh0CmluZGV4IDc0NDY4N2QuLjhhMzY2OTUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaW5maW5pYmFuZC91c2VyX21hZC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9pbmZpbmliYW5kL3VzZXJfbWFkLnR4dApAQCAtMTI4LDggKzEyOCw4IEBACiAgIFRvIGNyZWF0ZSB0aGUgYXBwcm9wcmlhdGUgY2hhcmFjdGVyIGRldmljZSBmaWxlcyBhdXRvbWF0aWNhbGx5IHdpdGgKICAgdWRldiwgYSBydWxlIGxpa2UKIAotICAgIEtFUk5FTD0idW1hZCoiLCBOQU1FPSJpbmZpbmliYW5kLyVrIgotICAgIEtFUk5FTD0iaXNzbSoiLCBOQU1FPSJpbmZpbmliYW5kLyVrIgorICAgIEtFUk5FTD09InVtYWQqIiwgTkFNRT0iaW5maW5pYmFuZC8layIKKyAgICBLRVJORUw9PSJpc3NtKiIsIE5BTUU9ImluZmluaWJhbmQvJWsiCiAKICAgY2FuIGJlIHVzZWQuICBUaGlzIHdpbGwgY3JlYXRlIGRldmljZSBub2RlcyBuYW1lZAogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2luZmluaWJhbmQvdXNlcl92ZXJicy50eHQgYi9Eb2N1bWVudGF0aW9uL2luZmluaWJhbmQvdXNlcl92ZXJicy50eHQKaW5kZXggZjg0NzUwMS4uYWZlM2Y4ZCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9pbmZpbmliYW5kL3VzZXJfdmVyYnMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vaW5maW5pYmFuZC91c2VyX3ZlcmJzLnR4dApAQCAtNTgsNyArNTgsNyBAQAogICBUbyBjcmVhdGUgdGhlIGFwcHJvcHJpYXRlIGNoYXJhY3RlciBkZXZpY2UgZmlsZXMgYXV0b21hdGljYWxseSB3aXRoCiAgIHVkZXYsIGEgcnVsZSBsaWtlCiAKLSAgICBLRVJORUw9InV2ZXJicyoiLCBOQU1FPSJpbmZpbmliYW5kLyVrIgorICAgIEtFUk5FTD09InV2ZXJicyoiLCBOQU1FPSJpbmZpbmliYW5kLyVrIgogCiAgIGNhbiBiZSB1c2VkLiAgVGhpcyB3aWxsIGNyZWF0ZSBkZXZpY2Ugbm9kZXMgbmFtZWQKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9rZXJuZWwtcGFyYW1ldGVycy50eHQgYi9Eb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dAppbmRleCA2ZmE3MjkyLi45MTA3YjM4IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dApAQCAtNjcxLDYgKzY3MSw3IEBACiAJZWFybHlwcmludGs9CVtYODYsU0gsQkxBQ0tGSU5dCiAJCQllYXJseXByaW50az12Z2EKIAkJCWVhcmx5cHJpbnRrPXNlcmlhbFssdHR5U25bLGJhdWRyYXRlXV0KKwkJCWVhcmx5cHJpbnRrPXR0eVNuWyxiYXVkcmF0ZV0KIAkJCWVhcmx5cHJpbnRrPWRiZ3BbZGVidWdDb250cm9sbGVyI10KIAogCQkJQXBwZW5kICIsa2VlcCIgdG8gbm90IGRpc2FibGUgaXQgd2hlbiB0aGUgcmVhbCBjb25zb2xlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2xhcHRvcHMvdGhpbmtwYWQtYWNwaS50eHQgYi9Eb2N1bWVudGF0aW9uL2xhcHRvcHMvdGhpbmtwYWQtYWNwaS50eHQKaW5kZXggNmQwMzQ4Ny4uYWFmY2FhNiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9sYXB0b3BzL3RoaW5rcGFkLWFjcGkudHh0CisrKyBiL0RvY3VtZW50YXRpb24vbGFwdG9wcy90aGlua3BhZC1hY3BpLnR4dApAQCAtMTk5LDE4ICsxOTksMjIgQEAKIAogTm90IGFsbCBiaXRzIGluIHRoZSBtYXNrIGNhbiBiZSBtb2RpZmllZC4gIE5vdCBhbGwgYml0cyB0aGF0IGNhbiBiZQogbW9kaWZpZWQgZG8gYW55dGhpbmcuICBOb3QgYWxsIGhvdCBrZXlzIGNhbiBiZSBpbmRpdmlkdWFsbHkgY29udHJvbGxlZAotYnkgdGhlIG1hc2suICBTb21lIG1vZGVscyBkbyBub3Qgc3VwcG9ydCB0aGUgbWFzayBhdCBhbGwsIGFuZCBpbiB0aG9zZQotbW9kZWxzLCBob3Qga2V5cyBjYW5ub3QgYmUgY29udHJvbGxlZCBpbmRpdmlkdWFsbHkuICBUaGUgYmVoYXZpb3VyIG9mCi10aGUgbWFzayBpcywgdGhlcmVmb3JlLCBoaWdobHkgZGVwZW5kZW50IG9uIHRoZSBUaGlua1BhZCBtb2RlbC4KK2J5IHRoZSBtYXNrLiAgU29tZSBtb2RlbHMgZG8gbm90IHN1cHBvcnQgdGhlIG1hc2sgYXQgYWxsLiAgVGhlIGJlaGF2aW91cgorb2YgdGhlIG1hc2sgaXMsIHRoZXJlZm9yZSwgaGlnaGx5IGRlcGVuZGVudCBvbiB0aGUgVGhpbmtQYWQgbW9kZWwuCisKK1RoZSBkcml2ZXIgd2lsbCBmaWx0ZXIgb3V0IGFueSB1bm1hc2tlZCBob3RrZXlzLCBzbyBldmVuIGlmIHRoZSBmaXJtd2FyZQorZG9lc24ndCBhbGxvdyBkaXNhYmxpbmcgYW4gc3BlY2lmaWMgaG90a2V5LCB0aGUgZHJpdmVyIHdpbGwgbm90IHJlcG9ydAorZXZlbnRzIGZvciB1bm1hc2tlZCBob3RrZXlzLgogCiBOb3RlIHRoYXQgdW5tYXNraW5nIHNvbWUga2V5cyBwcmV2ZW50cyB0aGVpciBkZWZhdWx0IGJlaGF2aW9yLiAgRm9yCiBleGFtcGxlLCBpZiBGbitGNSBpcyB1bm1hc2tlZCwgdGhhdCBrZXkgd2lsbCBubyBsb25nZXIgZW5hYmxlL2Rpc2FibGUKLUJsdWV0b290aCBieSBpdHNlbGYuCitCbHVldG9vdGggYnkgaXRzZWxmIGluIGZpcm13YXJlLgogCi1Ob3RlIGFsc28gdGhhdCBub3QgYWxsIEZuIGtleSBjb21iaW5hdGlvbnMgYXJlIHN1cHBvcnRlZCB0aHJvdWdoIEFDUEkuCi1Gb3IgZXhhbXBsZSwgb24gdGhlIFg0MCwgdGhlIGJyaWdodG5lc3MsIHZvbHVtZSBhbmQgIkFjY2VzcyBJQk0iIGJ1dHRvbnMKLWRvIG5vdCBnZW5lcmF0ZSBBQ1BJIGV2ZW50cyBldmVuIHdpdGggdGhpcyBkcml2ZXIuICBUaGV5ICpjYW4qIGJlIHVzZWQKLXRocm91Z2ggdGhlICJUaGlua1BhZCBCdXR0b25zIiB1dGlsaXR5LCBzZWUgaHR0cDovL3d3dy5ub25nbnUub3JnL3RwYi8KK05vdGUgYWxzbyB0aGF0IG5vdCBhbGwgRm4ga2V5IGNvbWJpbmF0aW9ucyBhcmUgc3VwcG9ydGVkIHRocm91Z2ggQUNQSQorZGVwZW5kaW5nIG9uIHRoZSBUaGlua1BhZCBtb2RlbCBhbmQgZmlybXdhcmUgdmVyc2lvbi4gIE9uIHRob3NlCitUaGlua1BhZHMsIGl0IGlzIHN0aWxsIHBvc3NpYmxlIHRvIHN1cHBvcnQgc29tZSBleHRyYSBob3RrZXlzIGJ5Citwb2xsaW5nIHRoZSAiQ01PUyBOVlJBTSIgYXQgbGVhc3QgMTAgdGltZXMgcGVyIHNlY29uZC4gIFRoZSBkcml2ZXIKK2F0dGVtcHRzIHRvIGVuYWJsZXMgdGhpcyBmdW5jdGlvbmFsaXR5IGF1dG9tYXRpY2FsbHkgd2hlbiByZXF1aXJlZC4KIAogcHJvY2ZzIG5vdGVzOgogCkBAIC0yNTUsMTggKzI1OSwxMSBAQAogCQkxOiBkb2VzIG5vdGhpbmcKIAogCWhvdGtleV9tYXNrOgotCQliaXQgbWFzayB0byBlbmFibGUgZHJpdmVyLWhhbmRsaW5nIChhbmQgZGVwZW5kaW5nIG9uCisJCWJpdCBtYXNrIHRvIGVuYWJsZSByZXBvcnRpbmcgKGFuZCBkZXBlbmRpbmcgb24KIAkJdGhlIGZpcm13YXJlLCBBQ1BJIGV2ZW50IGdlbmVyYXRpb24pIGZvciBlYWNoIGhvdCBrZXkKIAkJKHNlZSBhYm92ZSkuICBSZXR1cm5zIHRoZSBjdXJyZW50IHN0YXR1cyBvZiB0aGUgaG90IGtleXMKIAkJbWFzaywgYW5kIGFsbG93cyBvbmUgdG8gbW9kaWZ5IGl0LgogCi0JCU5vdGU6IHdoZW4gTlZSQU0gcG9sbGluZyBpcyBhY3RpdmUsIHRoZSBmaXJtd2FyZSBtYXNrCi0JCXdpbGwgYmUgZGlmZmVyZW50IGZyb20gdGhlIHZhbHVlIHJldHVybmVkIGJ5Ci0JCWhvdGtleV9tYXNrLiAgVGhlIGRyaXZlciB3aWxsIHJldGFpbiBlbmFibGVkIGJpdHMgZm9yCi0JCWhvdGtleXMgdGhhdCBhcmUgdW5kZXIgTlZSQU0gcG9sbGluZyBldmVuIGlmIHRoZQotCQlmaXJtd2FyZSByZWZ1c2VzIHRoZW0sIGFuZCB3aWxsIG5vdCBzZXQgdGhlc2UgYml0cyBvbgotCQl0aGUgZmlybXdhcmUgaG90IGtleSBtYXNrLgotCiAJaG90a2V5X2FsbF9tYXNrOgogCQliaXQgbWFzayB0aGF0IHNob3VsZCBlbmFibGUgZXZlbnQgcmVwb3J0aW5nIGZvciBhbGwKIAkJc3VwcG9ydGVkIGhvdCBrZXlzLCB3aGVuIGVjaG9lZCB0byBob3RrZXlfbWFzayBhYm92ZS4KQEAgLTI3OSw3ICsyNzYsOCBAQAogCQliaXQgbWFzayB0aGF0IHNob3VsZCBlbmFibGUgZXZlbnQgcmVwb3J0aW5nIGZvciBhbGwKIAkJc3VwcG9ydGVkIGhvdCBrZXlzLCBleGNlcHQgdGhvc2Ugd2hpY2ggYXJlIGFsd2F5cwogCQloYW5kbGVkIGJ5IHRoZSBmaXJtd2FyZSBhbnl3YXkuICBFY2hvIGl0IHRvCi0JCWhvdGtleV9tYXNrIGFib3ZlLCB0byB1c2UuCisJCWhvdGtleV9tYXNrIGFib3ZlLCB0byB1c2UuICBUaGlzIGlzIHRoZSBkZWZhdWx0IG1hc2sKKwkJdXNlZCBieSB0aGUgZHJpdmVyLgogCiAJaG90a2V5X3NvdXJjZV9tYXNrOgogCQliaXQgbWFzayB0aGF0IHNlbGVjdHMgd2hpY2ggaG90IGtleXMgd2lsbCB0aGUgZHJpdmVyCkBAIC0yODcsOSArMjg1LDEwIEBACiAJCWJhc2VkIG9uIHRoZSBjYXBhYmlsaXRpZXMgcmVwb3J0ZWQgYnkgdGhlIEFDUEkgZmlybXdhcmUsCiAJCWJ1dCBpdCBjYW4gYmUgb3ZlcnJpZGRlbiBhdCBydW50aW1lLgogCi0JCUhvdCBrZXlzIHdob3NlIGJpdHMgYXJlIHNldCBpbiBib3RoIGhvdGtleV9zb3VyY2VfbWFzawotCQlhbmQgYWxzbyBvbiBob3RrZXlfbWFzayBhcmUgcG9sbGVkIGZvciBpbiBOVlJBTS4gIE9ubHkgYQotCQlmZXcgaG90IGtleXMgYXJlIGF2YWlsYWJsZSB0aHJvdWdoIENNT1MgTlZSQU0gcG9sbGluZy4KKwkJSG90IGtleXMgd2hvc2UgYml0cyBhcmUgc2V0IGluIGhvdGtleV9zb3VyY2VfbWFzayBhcmUKKwkJcG9sbGVkIGZvciBpbiBOVlJBTSwgYW5kIHJlcG9ydGVkIGFzIGhvdGtleSBldmVudHMgaWYKKwkJZW5hYmxlZCBpbiBob3RrZXlfbWFzay4gIE9ubHkgYSBmZXcgaG90IGtleXMgYXJlCisJCWF2YWlsYWJsZSB0aHJvdWdoIENNT1MgTlZSQU0gcG9sbGluZy4KIAogCQlXYXJuaW5nOiB3aGVuIGluIE5WUkFNIG1vZGUsIHRoZSB2b2x1bWUgdXAvZG93bi9tdXRlCiAJCWtleXMgYXJlIHN5bnRoZXNpemVkIGFjY29yZGluZyB0byBjaGFuZ2VzIGluIHRoZSBtaXhlciwKQEAgLTUyNSw2ICs1MjQsNyBAQAogMHgyMzA1CQlTeXN0ZW0gaXMgd2FraW5nIHVwIGZyb20gc3VzcGVuZCB0byBlamVjdCBiYXkKIDB4MjQwNAkJU3lzdGVtIGlzIHdha2luZyB1cCBmcm9tIGhpYmVybmF0aW9uIHRvIHVuZG9jawogMHgyNDA1CQlTeXN0ZW0gaXMgd2FraW5nIHVwIGZyb20gaGliZXJuYXRpb24gdG8gZWplY3QgYmF5CisweDUwMTAJCUJyaWdodG5lc3MgbGV2ZWwgY2hhbmdlZC9jb250cm9sIGV2ZW50CiAKIFRoZSBhYm92ZSBldmVudHMgYXJlIG5ldmVyIHByb3BhZ2F0ZWQgYnkgdGhlIGRyaXZlci4KIApAQCAtNTMyLDcgKzUzMiw2IEBACiAweDQwMDMJCVVuZG9ja2VkIChzZWUgMHgyeDA0KSwgY2FuIHNsZWVwIGFnYWluCiAweDUwMEIJCVRhYmxldCBwZW4gaW5zZXJ0ZWQgaW50byBpdHMgc3RvcmFnZSBiYXkKIDB4NTAwQwkJVGFibGV0IHBlbiByZW1vdmVkIGZyb20gaXRzIHN0b3JhZ2UgYmF5Ci0weDUwMTAJCUJyaWdodG5lc3MgbGV2ZWwgY2hhbmdlZCAobmV3ZXIgTGVub3ZvIEJJT1NlcykKIAogVGhlIGFib3ZlIGV2ZW50cyBhcmUgcHJvcGFnYXRlZCBieSB0aGUgZHJpdmVyLgogCkBAIC02MjEsNiArNjIwLDggQEAKIDIuIERvICpOT1QqIGxvYWQgdXAgQUNQSSB2aWRlbywgZW5hYmxlIHRoZSBob3RrZXlzIGluIHRoaW5rcGFkLWFjcGksCiAgICBhbmQgbWFwIHRoZW0gdG8gS0VZX0JSSUdIVE5FU1NfVVAgYW5kIEtFWV9CUklHSFRORVNTX0RPV04uICBQcm9jZXNzCiAgICB0aGVzZSBrZXlzIG9uIHVzZXJzcGFjZSBzb21laG93IChlLmcuIGJ5IGNhbGxpbmcgeGJhY2tsaWdodCkuCisgICBUaGUgZHJpdmVyIHdpbGwgZG8gdGhpcyBhdXRvbWF0aWNhbGx5IGlmIGl0IGRldGVjdHMgdGhhdCBBQ1BJIHZpZGVvCisgICBoYXMgYmVlbiBkaXNhYmxlZC4KIAogCiBCbHVldG9vdGgKQEAgLTE0NTksMyArMTQ2MCw4IEBACiAweDAyMDQwMDoJTWFya2VyIGZvciAxNiBMRURzIHN1cHBvcnQuICBBbHNvLCBMRURzIHRoYXQgYXJlIGtub3duCiAJCXRvIG5vdCBleGlzdCBpbiBhIGdpdmVuIG1vZGVsIGFyZSBub3QgcmVnaXN0ZXJlZCB3aXRoCiAJCXRoZSBMRUQgc3lzZnMgY2xhc3MgYW55bW9yZS4KKworMHgwMjA1MDA6CVVwZGF0ZWQgaG90a2V5IGRyaXZlciwgaG90a2V5X21hc2sgaXMgYWx3YXlzIGF2YWlsYWJsZQorCQlhbmQgaXQgaXMgYWx3YXlzIGFibGUgdG8gZGlzYWJsZSBob3Qga2V5cy4gIFZlcnkgb2xkCisJCXRoaW5rcGFkcyBhcmUgcHJvcGVybHkgc3VwcG9ydGVkLiAgaG90a2V5X2Jpb3NfbWFzaworCQlpcyBkZXByZWNhdGVkIGFuZCBtYXJrZWQgZm9yIHJlbW92YWwuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2xndWVzdC9sZ3Vlc3QuYyBiL0RvY3VtZW50YXRpb24vbGd1ZXN0L2xndWVzdC5jCmluZGV4IGJhOTM3M2YuLjA5OGRlNWIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbGd1ZXN0L2xndWVzdC5jCisrKyBiL0RvY3VtZW50YXRpb24vbGd1ZXN0L2xndWVzdC5jCkBAIC00Miw3ICs0Miw2IEBACiAjaW5jbHVkZSA8c2lnbmFsLmg+CiAjaW5jbHVkZSAibGludXgvbGd1ZXN0X2xhdW5jaGVyLmgiCiAjaW5jbHVkZSAibGludXgvdmlydGlvX2NvbmZpZy5oIgotI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb19pZHMuaD4KICNpbmNsdWRlICJsaW51eC92aXJ0aW9fbmV0LmgiCiAjaW5jbHVkZSAibGludXgvdmlydGlvX2Jsay5oIgogI2luY2x1ZGUgImxpbnV4L3ZpcnRpb19jb25zb2xlLmgiCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2kyYy9jaGlwcy9lZXByb20gYi9Eb2N1bWVudGF0aW9uL21pc2MtZGV2aWNlcy9lZXByb20Kc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vaTJjL2NoaXBzL2VlcHJvbQpyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9taXNjLWRldmljZXMvZWVwcm9tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2kyYy9jaGlwcy9tYXg2ODc1IGIvRG9jdW1lbnRhdGlvbi9taXNjLWRldmljZXMvbWF4Njg3NQpzaW1pbGFyaXR5IGluZGV4IDk0JQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL2kyYy9jaGlwcy9tYXg2ODc1CnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL21pc2MtZGV2aWNlcy9tYXg2ODc1CmluZGV4IDEwY2E0M2MuLjFlODllZTMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaTJjL2NoaXBzL21heDY4NzUKKysrIGIvRG9jdW1lbnRhdGlvbi9taXNjLWRldmljZXMvbWF4Njg3NQpAQCAtNDIsMTAgKzQyLDEyIEBACiAKIFZhbGlkIGFkZHJlc3NlcyBmb3IgdGhlIE1BWDY4NzUgYXJlIDB4NTAgYW5kIDB4NTIuCiBWYWxpZCBhZGRyZXNzZXMgZm9yIHRoZSBNQVg2ODc0IGFyZSAweDUwLCAweDUyLCAweDU0IGFuZCAweDU2LgotVGhlIGRyaXZlciBkb2VzIG5vdCBwcm9iZSBhbnkgYWRkcmVzcywgc28geW91IG11c3QgZm9yY2UgdGhlIGFkZHJlc3MuCitUaGUgZHJpdmVyIGRvZXMgbm90IHByb2JlIGFueSBhZGRyZXNzLCBzbyB5b3UgZXhwbGljaXRseSBpbnN0YW50aWF0ZSB0aGUKK2RldmljZXMuCiAKIEV4YW1wbGU6Ci0kIG1vZHByb2JlIG1heDY4NzUgZm9yY2U9MCwweDUwCiskIG1vZHByb2JlIG1heDY4NzUKKyQgZWNobyBtYXg2ODc1IDB4NTAgPiAvc3lzL2J1cy9pMmMvZGV2aWNlcy9pMmMtMC9uZXdfZGV2aWNlCiAKIFRoZSBNQVg2ODc0L01BWDY4NzUgaWdub3JlcyBhZGRyZXNzIGJpdCAwLCBzbyB0aGlzIGRyaXZlciBhdHRhY2hlcyB0byBtdWx0aXBsZQogYWRkcmVzc2VzLiAgRm9yIGV4YW1wbGUsIGZvciBhZGRyZXNzIDB4NTAsIGl0IGFsc28gcmVzZXJ2ZXMgMHg1MS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2NzaS9ocHRpb3AudHh0IGIvRG9jdW1lbnRhdGlvbi9zY3NpL2hwdGlvcC50eHQKaW5kZXggYTZlYjRhZC4uOTYwNTE3OSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9zY3NpL2hwdGlvcC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9zY3NpL2hwdGlvcC50eHQKQEAgLTMsNiArMywyNSBAQAogQ29udHJvbGxlciBSZWdpc3RlciBNYXAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorRm9yIFJSNDR4eCBJbnRlbCBJT1AgYmFzZWQgYWRhcHRlcnMsIHRoZSBjb250cm9sbGVyIElPUCBpcyBhY2Nlc3NlZCB2aWEgUENJIEJBUjAgYW5kIEJBUjI6CisKKyAgICAgQkFSMCBvZmZzZXQgICAgUmVnaXN0ZXIKKyAgICAgICAgICAgIDB4MTFDNUMgTGluayBJbnRlcmZhY2UgSVJRIFNldAorICAgICAgICAgICAgMHgxMUM2MCBMaW5rIEludGVyZmFjZSBJUlEgQ2xlYXIKKworICAgICBCQVIyIG9mZnNldCAgICBSZWdpc3RlcgorICAgICAgICAgICAgMHgxMCAgICBJbmJvdW5kIE1lc3NhZ2UgUmVnaXN0ZXIgMAorICAgICAgICAgICAgMHgxNCAgICBJbmJvdW5kIE1lc3NhZ2UgUmVnaXN0ZXIgMQorICAgICAgICAgICAgMHgxOCAgICBPdXRib3VuZCBNZXNzYWdlIFJlZ2lzdGVyIDAKKyAgICAgICAgICAgIDB4MUMgICAgT3V0Ym91bmQgTWVzc2FnZSBSZWdpc3RlciAxCisgICAgICAgICAgICAweDIwICAgIEluYm91bmQgRG9vcmJlbGwgUmVnaXN0ZXIKKyAgICAgICAgICAgIDB4MjQgICAgSW5ib3VuZCBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyCisgICAgICAgICAgICAweDI4ICAgIEluYm91bmQgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIKKyAgICAgICAgICAgIDB4MzAgICAgT3V0Ym91bmQgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlcgorICAgICAgICAgICAgMHgzNCAgICBPdXRib3VuZCBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlcgorICAgICAgICAgICAgMHg0MCAgICBJbmJvdW5kIFF1ZXVlIFBvcnQKKyAgICAgICAgICAgIDB4NDQgICAgT3V0Ym91bmQgUXVldWUgUG9ydAorCiBGb3IgSW50ZWwgSU9QIGJhc2VkIGFkYXB0ZXJzLCB0aGUgY29udHJvbGxlciBJT1AgaXMgYWNjZXNzZWQgdmlhIFBDSSBCQVIwOgogCiAgICAgIEJBUjAgb2Zmc2V0ICAgIFJlZ2lzdGVyCkBAIC05Myw3ICsxMTIsNyBAQAogCiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1Db3B5cmlnaHQgKEMpIDIwMDYtMjAwNyBIaWdoUG9pbnQgVGVjaG5vbG9naWVzLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCitDb3B5cmlnaHQgKEMpIDIwMDYtMjAwOSBIaWdoUG9pbnQgVGVjaG5vbG9naWVzLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAKICAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvQUxTQS1Db25maWd1cmF0aW9uLnR4dCBiL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9BTFNBLUNvbmZpZ3VyYXRpb24udHh0CmluZGV4IDFjOGViNDUuLmZkOWEyZjYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9BTFNBLUNvbmZpZ3VyYXRpb24udHh0CisrKyBiL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9BTFNBLUNvbmZpZ3VyYXRpb24udHh0CkBAIC01MjIsNyArNTIyLDcgQEAKICAgICBwY21fZGV2cyAgICAgICAtIE51bWJlciBvZiBQQ00gZGV2aWNlcyBhc3NpZ25lZCB0byBlYWNoIGNhcmQKICAgICAgICAgICAgICAgICAgICAgIChkZWZhdWx0ID0gMSwgdXAgdG8gNCkKICAgICBwY21fc3Vic3RyZWFtcyAtIE51bWJlciBvZiBQQ00gc3Vic3RyZWFtcyBhc3NpZ25lZCB0byBlYWNoIFBDTQotICAgICAgICAgICAgICAgICAgICAgKGRlZmF1bHQgPSA4LCB1cCB0byAxNikKKyAgICAgICAgICAgICAgICAgICAgIChkZWZhdWx0ID0gOCwgdXAgdG8gMTI4KQogICAgIGhydGltZXIgICAgICAgIC0gVXNlIGhydGltZXIgKD0xLCBkZWZhdWx0KSBvciBzeXN0ZW0gdGltZXIgKD0wKQogICAgIGZha2VfYnVmZmVyICAgIC0gRmFrZSBidWZmZXIgYWxsb2NhdGlvbnMgKGRlZmF1bHQgPSAxKQogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvSEQtQXVkaW8tTW9kZWxzLnR4dCBiL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9IRC1BdWRpby1Nb2RlbHMudHh0CmluZGV4IGYxNzA4YjcuLjRjN2Y5YWUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9IRC1BdWRpby1Nb2RlbHMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9IRC1BdWRpby1Nb2RlbHMudHh0CkBAIC0yMDksNiArMjA5LDcgQEAKICAgbGFwdG9wCWxhcHRvcCB3aXRoIEhQIGphY2sgc2Vuc2luZwogICBtb2JpbGUJbW9iaWxlIGRldmljZXMgd2l0aCBIUCBqYWNrIHNlbnNpbmcKICAgdGhpbmtwYWQJTGVub3ZvIFRoaW5rcGFkIFgzMDAKKyAgdG91Y2hzbWFydAlIUCBUb3VjaHNtYXJ0CiAKIEFEMTg4NAogPT09PT09CkBAIC0zNTgsNiArMzU5LDcgQEAKICAgNXN0YWNrLW5vLWZwCUQ5NjUgNXN0YWNrIHdpdGhvdXQgZnJvbnQgcGFuZWwKICAgZGVsbC0zc3RhY2sJRGVsbCBEaW1lbnNpb24gRTUyMAogICBkZWxsLWJpb3MJRml4ZXMgd2l0aCBEZWxsIEJJT1Mgc2V0dXAKKyAgdm9sa25vYglGaXhlcyB3aXRoIHZvbHVtZS1rbm9iIHdpZGdldCAweDI0CiAgIGF1dG8JCUJJT1Mgc2V0dXAgKGRlZmF1bHQpCiAKIFNUQUM5MkhENzFCKgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90cmFjZS9mdHJhY2UudHh0IGIvRG9jdW1lbnRhdGlvbi90cmFjZS9mdHJhY2UudHh0CmluZGV4IDk1N2IyMmYuLjgxNzk2OTIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdHJhY2UvZnRyYWNlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3RyYWNlL2Z0cmFjZS50eHQKQEAgLTEyMzEsNiArMTIzMSw3IEBACiAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KICNpbmNsdWRlIDxmY250bC5oPgogI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgogCiAjZGVmaW5lIF9TVFIoeCkgI3gKICNkZWZpbmUgU1RSKHgpIF9TVFIoeCkKQEAgLTEyNjUsNiArMTI2Niw3IEBACiAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICB9CiAKKyAgICAgICBzdHJjYXQoZGVidWdmcywgIi90cmFjaW5nLyIpOwogICAgICAgIGRlYnVnZnNfZm91bmQgPSAxOwogCiAgICAgICAgcmV0dXJuIGRlYnVnZnM7CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZtL2h3cG9pc29uLnR4dCBiL0RvY3VtZW50YXRpb24vdm0vaHdwb2lzb24udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmZmFkZjgKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3ZtL2h3cG9pc29uLnR4dApAQCAtMCwwICsxLDEzNiBAQAorV2hhdCBpcyBod3BvaXNvbj8KKworVXBjb21pbmcgSW50ZWwgQ1BVcyBoYXZlIHN1cHBvcnQgZm9yIHJlY292ZXJpbmcgZnJvbSBzb21lIG1lbW9yeSBlcnJvcnMKKyhgYE1DQSByZWNvdmVyeScnKS4gVGhpcyByZXF1aXJlcyB0aGUgT1MgdG8gZGVjbGFyZSBhIHBhZ2UgInBvaXNvbmVkIiwKK2tpbGwgdGhlIHByb2Nlc3NlcyBhc3NvY2lhdGVkIHdpdGggaXQgYW5kIGF2b2lkIHVzaW5nIGl0IGluIHRoZSBmdXR1cmUuCisKK1RoaXMgcGF0Y2hraXQgaW1wbGVtZW50cyB0aGUgbmVjZXNzYXJ5IGluZnJhc3RydWN0dXJlIGluIHRoZSBWTS4KKworVG8gcXVvdGUgdGhlIG92ZXJ2aWV3IGNvbW1lbnQ6CisKKyAqIEhpZ2ggbGV2ZWwgbWFjaGluZSBjaGVjayBoYW5kbGVyLiBIYW5kbGVzIHBhZ2VzIHJlcG9ydGVkIGJ5IHRoZQorICogaGFyZHdhcmUgYXMgYmVpbmcgY29ycnVwdGVkIHVzdWFsbHkgZHVlIHRvIGEgMmJpdCBFQ0MgbWVtb3J5IG9yIGNhY2hlCisgKiBmYWlsdXJlLgorICoKKyAqIFRoaXMgZm9jdXNzZXMgb24gcGFnZXMgZGV0ZWN0ZWQgYXMgY29ycnVwdGVkIGluIHRoZSBiYWNrZ3JvdW5kLgorICogV2hlbiB0aGUgY3VycmVudCBDUFUgdHJpZXMgdG8gY29uc3VtZSBjb3JydXB0aW9uIHRoZSBjdXJyZW50bHkKKyAqIHJ1bm5pbmcgcHJvY2VzcyBjYW4ganVzdCBiZSBraWxsZWQgZGlyZWN0bHkgaW5zdGVhZC4gVGhpcyBpbXBsaWVzCisgKiB0aGF0IGlmIHRoZSBlcnJvciBjYW5ub3QgYmUgaGFuZGxlZCBmb3Igc29tZSByZWFzb24gaXQncyBzYWZlIHRvCisgKiBqdXN0IGlnbm9yZSBpdCBiZWNhdXNlIG5vIGNvcnJ1cHRpb24gaGFzIGJlZW4gY29uc3VtZWQgeWV0LiBJbnN0ZWFkCisgKiB3aGVuIHRoYXQgaGFwcGVucyBhbm90aGVyIG1hY2hpbmUgY2hlY2sgd2lsbCBoYXBwZW4uCisgKgorICogSGFuZGxlcyBwYWdlIGNhY2hlIHBhZ2VzIGluIHZhcmlvdXMgc3RhdGVzLiBUaGUgdHJpY2t5IHBhcnQKKyAqIGhlcmUgaXMgdGhhdCB3ZSBjYW4gYWNjZXNzIGFueSBwYWdlIGFzeW5jaHJvbm91cyB0byBvdGhlciBWTQorICogdXNlcnMsIGJlY2F1c2UgbWVtb3J5IGZhaWx1cmVzIGNvdWxkIGhhcHBlbiBhbnl0aW1lIGFuZCBhbnl3aGVyZSwKKyAqIHBvc3NpYmx5IHZpb2xhdGluZyBzb21lIG9mIHRoZWlyIGFzc3VtcHRpb25zLiBUaGlzIGlzIHdoeSB0aGlzIGNvZGUKKyAqIGhhcyB0byBiZSBleHRyZW1lbHkgY2FyZWZ1bC4gR2VuZXJhbGx5IGl0IHRyaWVzIHRvIHVzZSBub3JtYWwgbG9ja2luZworICogcnVsZXMsIGFzIGluIGdldCB0aGUgc3RhbmRhcmQgbG9ja3MsIGV2ZW4gaWYgdGhhdCBtZWFucyB0aGUKKyAqIGVycm9yIGhhbmRsaW5nIHRha2VzIHBvdGVudGlhbGx5IGEgbG9uZyB0aW1lLgorICoKKyAqIFNvbWUgb2YgdGhlIG9wZXJhdGlvbnMgaGVyZSBhcmUgc29tZXdoYXQgaW5lZmZpY2llbnQgYW5kIGhhdmUgbm9uCisgKiBsaW5lYXIgYWxnb3JpdGhtaWMgY29tcGxleGl0eSwgYmVjYXVzZSB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGhhdmUgbm90CisgKiBiZWVuIG9wdGltaXplZCBmb3IgdGhpcyBjYXNlLiBUaGlzIGlzIGluIHBhcnRpY3VsYXIgdGhlIGNhc2UKKyAqIGZvciB0aGUgbWFwcGluZyBmcm9tIGEgdm1hIHRvIGEgcHJvY2Vzcy4gU2luY2UgdGhpcyBjYXNlIGlzIGV4cGVjdGVkCisgKiB0byBiZSByYXJlIHdlIGhvcGUgd2UgY2FuIGdldCBhd2F5IHdpdGggdGhpcy4KKworVGhlIGNvZGUgY29uc2lzdHMgb2YgYSB0aGUgaGlnaCBsZXZlbCBoYW5kbGVyIGluIG1tL21lbW9yeS1mYWlsdXJlLmMsCithIG5ldyBwYWdlIHBvaXNvbiBiaXQgYW5kIHZhcmlvdXMgY2hlY2tzIGluIHRoZSBWTSB0byBoYW5kbGUgcG9pc29uZWQKK3BhZ2VzLgorCitUaGUgbWFpbiB0YXJnZXQgcmlnaHQgbm93IGlzIEtWTSBndWVzdHMsIGJ1dCBpdCB3b3JrcyBmb3IgYWxsIGtpbmRzCitvZiBhcHBsaWNhdGlvbnMuIEtWTSBzdXBwb3J0IHJlcXVpcmVzIGEgcmVjZW50IHFlbXUta3ZtIHJlbGVhc2UuCisKK0ZvciB0aGUgS1ZNIHVzZSB0aGVyZSB3YXMgbmVlZCBmb3IgYSBuZXcgc2lnbmFsIHR5cGUgc28gdGhhdAorS1ZNIGNhbiBpbmplY3QgdGhlIG1hY2hpbmUgY2hlY2sgaW50byB0aGUgZ3Vlc3Qgd2l0aCB0aGUgcHJvcGVyCithZGRyZXNzLiBUaGlzIGluIHRoZW9yeSBhbGxvd3Mgb3RoZXIgYXBwbGljYXRpb25zIHRvIGhhbmRsZQorbWVtb3J5IGZhaWx1cmVzIHRvby4gVGhlIGV4cGVjdGlvbiBpcyB0aGF0IG5lYXIgYWxsIGFwcGxpY2F0aW9ucword29uJ3QgZG8gdGhhdCwgYnV0IHNvbWUgdmVyeSBzcGVjaWFsaXplZCBvbmVzIG1pZ2h0LgorCistLS0KKworVGhlcmUgYXJlIHR3byAoYWN0dWFsbHkgdGhyZWUpIG1vZGkgbWVtb3J5IGZhaWx1cmUgcmVjb3ZlcnkgY2FuIGJlIGluOgorCit2bS5tZW1vcnlfZmFpbHVyZV9yZWNvdmVyeSBzeXNjdGwgc2V0IHRvIHplcm86CisJQWxsIG1lbW9yeSBmYWlsdXJlcyBjYXVzZSBhIHBhbmljLiBEbyBub3QgYXR0ZW1wdCByZWNvdmVyeS4KKwkob24geDg2IHRoaXMgY2FuIGJlIGFsc28gYWZmZWN0ZWQgYnkgdGhlIHRvbGVyYW50IGxldmVsIG9mIHRoZQorCU1DRSBzdWJzeXN0ZW0pCisKK2Vhcmx5IGtpbGwKKwkoY2FuIGJlIGNvbnRyb2xsZWQgZ2xvYmFsbHkgYW5kIHBlciBwcm9jZXNzKQorCVNlbmQgU0lHQlVTIHRvIHRoZSBhcHBsaWNhdGlvbiBhcyBzb29uIGFzIHRoZSBlcnJvciBpcyBkZXRlY3RlZAorCVRoaXMgYWxsb3dzIGFwcGxpY2F0aW9ucyB3aG8gY2FuIHByb2Nlc3MgbWVtb3J5IGVycm9ycyBpbiBhIGdlbnRsZQorCXdheSAoZS5nLiBkcm9wIGFmZmVjdGVkIG9iamVjdCkKKwlUaGlzIGlzIHRoZSBtb2RlIHVzZWQgYnkgS1ZNIHFlbXUuCisKK2xhdGUga2lsbAorCVNlbmQgU0lHQlVTIHdoZW4gdGhlIGFwcGxpY2F0aW9uIHJ1bnMgaW50byB0aGUgY29ycnVwdGVkIHBhZ2UuCisJVGhpcyBpcyBiZXN0IGZvciBtZW1vcnkgZXJyb3IgdW5hd2FyZSBhcHBsaWNhdGlvbnMgYW5kIGRlZmF1bHQKKwlOb3RlIHNvbWUgcGFnZXMgYXJlIGFsd2F5cyBoYW5kbGVkIGFzIGxhdGUga2lsbC4KKworLS0tCisKK1VzZXIgY29udHJvbDoKKwordm0ubWVtb3J5X2ZhaWx1cmVfcmVjb3ZlcnkKKwlTZWUgc3lzY3RsLnR4dAorCit2bS5tZW1vcnlfZmFpbHVyZV9lYXJseV9raWxsCisJRW5hYmxlIGVhcmx5IGtpbGwgbW9kZSBnbG9iYWxseQorCitQUl9NQ0VfS0lMTAorCVNldCBlYXJseS9sYXRlIGtpbGwgbW9kZS9yZXZlcnQgdG8gc3lzdGVtIGRlZmF1bHQKKwlhcmcxOiBQUl9NQ0VfS0lMTF9DTEVBUjogUmV2ZXJ0IHRvIHN5c3RlbSBkZWZhdWx0CisJYXJnMTogUFJfTUNFX0tJTExfU0VUOiBhcmcyIGRlZmluZXMgdGhyZWFkIHNwZWNpZmljIG1vZGUKKwkJUFJfTUNFX0tJTExfRUFSTFk6IEVhcmx5IGtpbGwKKwkJUFJfTUNFX0tJTExfTEFURTogIExhdGUga2lsbAorCQlQUl9NQ0VfS0lMTF9ERUZBVUxUOiBVc2Ugc3lzdGVtIGdsb2JhbCBkZWZhdWx0CitQUl9NQ0VfS0lMTF9HRVQKKwlyZXR1cm4gY3VycmVudCBtb2RlCisKKworLS0tCisKK1Rlc3Rpbmc6CisKK21hZHZpc2UoTUFEVl9QT0lTT04sIC4uLi4pCisJKGFzIHJvb3QpCisJUG9pc29uIGEgcGFnZSBpbiB0aGUgcHJvY2VzcyBmb3IgdGVzdGluZworCisKK2h3cG9pc29uLWluamVjdCBtb2R1bGUgdGhyb3VnaCBkZWJ1Z2ZzCisJL3N5cy9kZWJ1Zy9od3BvaXNvbi9jb3JydXB0LXBmbgorCitJbmplY3QgaHdwb2lzb24gZmF1bHQgYXQgUEZOIGVjaG9lZCBpbnRvIHRoaXMgZmlsZQorCisKK0FyY2hpdGVjdHVyZSBzcGVjaWZpYyBNQ0UgaW5qZWN0b3IKKworeDg2IGhhcyBtY2UtaW5qZWN0LCBtY2UtdGVzdAorCitTb21lIHBvcnRhYmxlIGh3cG9pc29uIHRlc3QgcHJvZ3JhbXMgaW4gbWNlLXRlc3QsIHNlZSBibG93LgorCistLS0KKworUmVmZXJlbmNlczoKKworaHR0cDovL2hhbG9iYXRlcy5kZS9tY2UtbGMwOS0yLnBkZgorCU92ZXJ2aWV3IHByZXNlbnRhdGlvbiBmcm9tIExpbnV4Q29uIDA5CisKK2dpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vdXRpbHMvY3B1L21jZS9tY2UtdGVzdC5naXQKKwlUZXN0IHN1aXRlIChod3BvaXNvbiBzcGVjaWZpYyBwb3J0YWJsZSB0ZXN0cyBpbiB0c3JjKQorCitnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL3V0aWxzL2NwdS9tY2UvbWNlLWluamVjdC5naXQKKwl4ODYgc3BlY2lmaWMgaW5qZWN0b3IKKworCistLS0KKworTGltaXRhdGlvbnM6CisKKy0gTm90IGFsbCBwYWdlIHR5cGVzIGFyZSBzdXBwb3J0ZWQgYW5kIG5ldmVyIHdpbGwuIE1vc3Qga2VybmVsIGludGVybmFsCitvYmplY3RzIGNhbm5vdCBiZSByZWNvdmVyZWQsIG9ubHkgTFJVIHBhZ2VzIGZvciBub3cuCistIFJpZ2h0IG5vdyBodWdlcGFnZSBzdXBwb3J0IGlzIG1pc3NpbmcuCisKKy0tLQorQW5kaSBLbGVlbiwgT2N0IDIwMDkKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92bS9rc20udHh0IGIvRG9jdW1lbnRhdGlvbi92bS9rc20udHh0CmluZGV4IDcyYTIyZjYuLjI2MmQ4ZTYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdm0va3NtLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3ZtL2tzbS50eHQKQEAgLTUyLDE1ICs1MiwxNSBAQAogcmVhZGFibGUgYnkgYWxsIGJ1dCB3cml0YWJsZSBvbmx5IGJ5IHJvb3Q6CiAKIG1heF9rZXJuZWxfcGFnZXMgLSBzZXQgdG8gbWF4aW11bSBudW1iZXIgb2Yga2VybmVsIHBhZ2VzIHRoYXQgS1NNIG1heSB1c2UKLSAgICAgICAgICAgICAgICAgICBlLmcuICJlY2hvIDIwMDAgPiAvc3lzL2tlcm5lbC9tbS9rc20vbWF4X2tlcm5lbF9wYWdlcyIKKyAgICAgICAgICAgICAgICAgICBlLmcuICJlY2hvIDEwMDAwMCA+IC9zeXMva2VybmVsL21tL2tzbS9tYXhfa2VybmVsX3BhZ2VzIgogICAgICAgICAgICAgICAgICAgIFZhbHVlIDAgaW1wb3NlcyBubyBsaW1pdCBvbiB0aGUga2VybmVsIHBhZ2VzIEtTTSBtYXkgdXNlOwogICAgICAgICAgICAgICAgICAgIGJ1dCBub3RlIHRoYXQgYW55IHByb2Nlc3MgdXNpbmcgTUFEVl9NRVJHRUFCTEUgY2FuIGNhdXNlCiAgICAgICAgICAgICAgICAgICAgS1NNIHRvIGFsbG9jYXRlIHRoZXNlIHBhZ2VzLCB1bnN3YXBwYWJsZSB1bnRpbCBpdCBleGl0cy4KLSAgICAgICAgICAgICAgICAgICBEZWZhdWx0OiAyMDAwIChjaG9zZW4gZm9yIGRlbW9uc3RyYXRpb24gcHVycG9zZXMpCisgICAgICAgICAgICAgICAgICAgRGVmYXVsdDogcXVhcnRlciBvZiBtZW1vcnkgKGNob3NlbiB0byBub3QgcGluIHRvbyBtdWNoKQogCiBwYWdlc190b19zY2FuICAgIC0gaG93IG1hbnkgcHJlc2VudCBwYWdlcyB0byBzY2FuIGJlZm9yZSBrc21kIGdvZXMgdG8gc2xlZXAKLSAgICAgICAgICAgICAgICAgICBlLmcuICJlY2hvIDIwMCA+IC9zeXMva2VybmVsL21tL2tzbS9wYWdlc190b19zY2FuIgotICAgICAgICAgICAgICAgICAgIERlZmF1bHQ6IDIwMCAoY2hvc2VuIGZvciBkZW1vbnN0cmF0aW9uIHB1cnBvc2VzKQorICAgICAgICAgICAgICAgICAgIGUuZy4gImVjaG8gMTAwID4gL3N5cy9rZXJuZWwvbW0va3NtL3BhZ2VzX3RvX3NjYW4iCisgICAgICAgICAgICAgICAgICAgRGVmYXVsdDogMTAwIChjaG9zZW4gZm9yIGRlbW9uc3RyYXRpb24gcHVycG9zZXMpCiAKIHNsZWVwX21pbGxpc2VjcyAgLSBob3cgbWFueSBtaWxsaXNlY29uZHMga3NtZCBzaG91bGQgc2xlZXAgYmVmb3JlIG5leHQgc2NhbgogICAgICAgICAgICAgICAgICAgIGUuZy4gImVjaG8gMjAgPiAvc3lzL2tlcm5lbC9tbS9rc20vc2xlZXBfbWlsbGlzZWNzIgpAQCAtNzAsNyArNzAsOCBAQAogICAgICAgICAgICAgICAgICAgIHNldCAxIHRvIHJ1biBrc21kIGUuZy4gImVjaG8gMSA+IC9zeXMva2VybmVsL21tL2tzbS9ydW4iLAogICAgICAgICAgICAgICAgICAgIHNldCAyIHRvIHN0b3Aga3NtZCBhbmQgdW5tZXJnZSBhbGwgcGFnZXMgY3VycmVudGx5IG1lcmdlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICBidXQgbGVhdmUgbWVyZ2VhYmxlIGFyZWFzIHJlZ2lzdGVyZWQgZm9yIG5leHQgcnVuCi0gICAgICAgICAgICAgICAgICAgRGVmYXVsdDogMSAoZm9yIGltbWVkaWF0ZSB1c2UgYnkgYXBwcyB3aGljaCByZWdpc3RlcikKKyAgICAgICAgICAgICAgICAgICBEZWZhdWx0OiAwIChtdXN0IGJlIGNoYW5nZWQgdG8gMSB0byBhY3RpdmF0ZSBLU00sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IGlmIENPTkZJR19TWVNGUyBpcyBkaXNhYmxlZCkKIAogVGhlIGVmZmVjdGl2ZW5lc3Mgb2YgS1NNIGFuZCBNQURWX01FUkdFQUJMRSBpcyBzaG93biBpbiAvc3lzL2tlcm5lbC9tbS9rc20vOgogCkBAIC04Niw0ICs4Nyw0IEBACiBwcm9wb3J0aW9uIHRoZXJlIHdvdWxkIGFsc28gaW5kaWNhdGUgcG9vciB1c2Ugb2YgbWFkdmlzZSBNQURWX01FUkdFQUJMRS4KIAogSXppayBFaWR1cywKLUh1Z2ggRGlja2lucywgMzAgSnVseSAyMDA5CitIdWdoIERpY2tpbnMsIDI0IFNlcHQgMjAwOQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92bS9wYWdlLXR5cGVzLmMgYi9Eb2N1bWVudGF0aW9uL3ZtL3BhZ2UtdHlwZXMuYwppbmRleCBmYTFhMzBkLi4zZWM0ZjJhIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3ZtL3BhZ2UtdHlwZXMuYworKysgYi9Eb2N1bWVudGF0aW9uL3ZtL3BhZ2UtdHlwZXMuYwpAQCAtMiw3ICsyLDEwIEBACiAgKiBwYWdlLXR5cGVzOiBUb29sIGZvciBxdWVyeWluZyBwYWdlIGZsYWdzCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA5IEludGVsIGNvcnBvcmF0aW9uCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgV3UgRmVuZ2d1YW5nIDxmZW5nZ3Vhbmcud3VAaW50ZWwuY29tPgorICoKKyAqIEF1dGhvcnM6IFd1IEZlbmdndWFuZyA8ZmVuZ2d1YW5nLnd1QGludGVsLmNvbT4KKyAqCisgKiBSZWxlYXNlZCB1bmRlciB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKS4KICAqLwogCiAjZGVmaW5lIF9MQVJHRUZJTEU2NF9TT1VSQ0UKQEAgLTY5LDcgKzcyLDkgQEAKICNkZWZpbmUgS1BGX0NPTVBPVU5EX1RBSUwJMTYKICNkZWZpbmUgS1BGX0hVR0UJCTE3CiAjZGVmaW5lIEtQRl9VTkVWSUNUQUJMRQkJMTgKKyNkZWZpbmUgS1BGX0hXUE9JU09OCQkxOQogI2RlZmluZSBLUEZfTk9QQUdFCQkyMAorI2RlZmluZSBLUEZfS1NNCQkJMjEKIAogLyogWzMyLV0ga2VybmVsIGhhY2tpbmcgYXNzaXN0YW5jZXMgKi8KICNkZWZpbmUgS1BGX1JFU0VSVkVECQkzMgpAQCAtMTE2LDcgKzEyMSw5IEBACiAJW0tQRl9DT01QT1VORF9UQUlMXQk9ICJUOmNvbXBvdW5kX3RhaWwiLAogCVtLUEZfSFVHRV0JCT0gIkc6aHVnZSIsCiAJW0tQRl9VTkVWSUNUQUJMRV0JPSAidTp1bmV2aWN0YWJsZSIsCisJW0tQRl9IV1BPSVNPTl0JCT0gIlg6aHdwb2lzb24iLAogCVtLUEZfTk9QQUdFXQkJPSAibjpub3BhZ2UiLAorCVtLUEZfS1NNXQkJPSAieDprc20iLAogCiAJW0tQRl9SRVNFUlZFRF0JCT0gInI6cmVzZXJ2ZWQiLAogCVtLUEZfTUxPQ0tFRF0JCT0gIm06bWxvY2tlZCIsCkBAIC0xNTIsOSArMTU5LDYgQEAKIHN0YXRpYyBpbnQJCW5yX3ZtYXM7CiBzdGF0aWMgdW5zaWduZWQgbG9uZwlwZ19zdGFydFtNQVhfVk1BU107CiBzdGF0aWMgdW5zaWduZWQgbG9uZwlwZ19lbmRbTUFYX1ZNQVNdOwotc3RhdGljIHVuc2lnbmVkIGxvbmcJdm9mZnNldDsKLQotc3RhdGljIGludAkJcGFnZW1hcF9mZDsKIAogI2RlZmluZSBNQVhfQklUX0ZJTFRFUlMJNjQKIHN0YXRpYyBpbnQJCW5yX2JpdF9maWx0ZXJzOwpAQCAtMTYzLDkgKzE2NywxNiBAQAogCiBzdGF0aWMgaW50CQlwYWdlX3NpemU7CiAKLSNkZWZpbmUgUEFHRVNfQkFUQ0gJKDY0IDw8IDEwKQkvKiA2NGsgcGFnZXMgKi8KK3N0YXRpYyBpbnQJCXBhZ2VtYXBfZmQ7CiBzdGF0aWMgaW50CQlrcGFnZWZsYWdzX2ZkOwogCitzdGF0aWMgaW50CQlvcHRfaHdwb2lzb247CitzdGF0aWMgaW50CQlvcHRfdW5wb2lzb247CisKK3N0YXRpYyBjaGFyCQkqaHdwb2lzb25fZGVidWdfZnMgPSAiL2RlYnVnL2h3cG9pc29uIjsKK3N0YXRpYyBpbnQJCWh3cG9pc29uX2luamVjdF9mZDsKK3N0YXRpYyBpbnQJCWh3cG9pc29uX2ZvcmdldF9mZDsKKwogI2RlZmluZSBIQVNIX1NISUZUCTEzCiAjZGVmaW5lIEhBU0hfU0laRQkoMSA8PCBIQVNIX1NISUZUKQogI2RlZmluZSBIQVNIX01BU0sJKEhBU0hfU0laRSAtIDEpCkBAIC0yMDcsNiArMjE4LDc0IEBACiAJZXhpdChFWElUX0ZBSUxVUkUpOwogfQogCitpbnQgY2hlY2tlZF9vcGVuKGNvbnN0IGNoYXIgKnBhdGhuYW1lLCBpbnQgZmxhZ3MpCit7CisJaW50IGZkID0gb3BlbihwYXRobmFtZSwgZmxhZ3MpOworCisJaWYgKGZkIDwgMCkgeworCQlwZXJyb3IocGF0aG5hbWUpOworCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQorCisJcmV0dXJuIGZkOworfQorCisvKgorICogcGFnZW1hcC9rcGFnZWZsYWdzIHJvdXRpbmVzCisgKi8KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgZG9fdTY0X3JlYWQoaW50IGZkLCBjaGFyICpuYW1lLAorCQkJCSB1aW50NjRfdCAqYnVmLAorCQkJCSB1bnNpZ25lZCBsb25nIGluZGV4LAorCQkJCSB1bnNpZ25lZCBsb25nIGNvdW50KQoreworCWxvbmcgYnl0ZXM7CisKKwlpZiAoaW5kZXggPiBVTE9OR19NQVggLyA4KQorCQlmYXRhbCgiaW5kZXggb3ZlcmZsb3c6ICVsdVxuIiwgaW5kZXgpOworCisJaWYgKGxzZWVrKGZkLCBpbmRleCAqIDgsIFNFRUtfU0VUKSA8IDApIHsKKwkJcGVycm9yKG5hbWUpOworCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQorCisJYnl0ZXMgPSByZWFkKGZkLCBidWYsIGNvdW50ICogOCk7CisJaWYgKGJ5dGVzIDwgMCkgeworCQlwZXJyb3IobmFtZSk7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisJaWYgKGJ5dGVzICUgOCkKKwkJZmF0YWwoInBhcnRpYWwgcmVhZDogJWx1IGJ5dGVzXG4iLCBieXRlcyk7CisKKwlyZXR1cm4gYnl0ZXMgLyA4OworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBrcGFnZWZsYWdzX3JlYWQodWludDY0X3QgKmJ1ZiwKKwkJCQkgICAgIHVuc2lnbmVkIGxvbmcgaW5kZXgsCisJCQkJICAgICB1bnNpZ25lZCBsb25nIHBhZ2VzKQoreworCXJldHVybiBkb191NjRfcmVhZChrcGFnZWZsYWdzX2ZkLCBQUk9DX0tQQUdFRkxBR1MsIGJ1ZiwgaW5kZXgsIHBhZ2VzKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgcGFnZW1hcF9yZWFkKHVpbnQ2NF90ICpidWYsCisJCQkJICB1bnNpZ25lZCBsb25nIGluZGV4LAorCQkJCSAgdW5zaWduZWQgbG9uZyBwYWdlcykKK3sKKwlyZXR1cm4gZG9fdTY0X3JlYWQocGFnZW1hcF9mZCwgIi9wcm9jL3BpZC9wYWdlbWFwIiwgYnVmLCBpbmRleCwgcGFnZXMpOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBwYWdlbWFwX3Bmbih1aW50NjRfdCB2YWwpCit7CisJdW5zaWduZWQgbG9uZyBwZm47CisKKwlpZiAodmFsICYgUE1fUFJFU0VOVCkKKwkJcGZuID0gUE1fUEZSQU1FKHZhbCk7CisJZWxzZQorCQlwZm4gPSAwOworCisJcmV0dXJuIHBmbjsKK30KKwogCiAvKgogICogcGFnZSBmbGFnIG5hbWVzCkBAIC0yNTUsNyArMzM0LDggQEAKICAqIHBhZ2UgbGlzdCBhbmQgc3VtbWFyeQogICovCiAKLXN0YXRpYyB2b2lkIHNob3dfcGFnZV9yYW5nZSh1bnNpZ25lZCBsb25nIG9mZnNldCwgdWludDY0X3QgZmxhZ3MpCitzdGF0aWMgdm9pZCBzaG93X3BhZ2VfcmFuZ2UodW5zaWduZWQgbG9uZyB2b2Zmc2V0LAorCQkJICAgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1aW50NjRfdCBmbGFncykKIHsKIAlzdGF0aWMgdWludDY0X3QgICAgICBmbGFnczA7CiAJc3RhdGljIHVuc2lnbmVkIGxvbmcgdm9mZjsKQEAgLTI4MSw3ICszNjEsOCBAQAogCWNvdW50ICA9IDE7CiB9CiAKLXN0YXRpYyB2b2lkIHNob3dfcGFnZSh1bnNpZ25lZCBsb25nIG9mZnNldCwgdWludDY0X3QgZmxhZ3MpCitzdGF0aWMgdm9pZCBzaG93X3BhZ2UodW5zaWduZWQgbG9uZyB2b2Zmc2V0LAorCQkgICAgICB1bnNpZ25lZCBsb25nIG9mZnNldCwgdWludDY0X3QgZmxhZ3MpCiB7CiAJaWYgKG9wdF9waWQpCiAJCXByaW50ZigiJWx4XHQiLCB2b2Zmc2V0KTsKQEAgLTM2Miw2ICs0NDMsNjIgQEAKIAlyZXR1cm4gZmxhZ3M7CiB9CiAKK3N0YXRpYyB1aW50NjRfdCBrcGFnZWZsYWdzX2ZsYWdzKHVpbnQ2NF90IGZsYWdzKQoreworCWZsYWdzID0gZXhwYW5kX292ZXJsb2FkZWRfZmxhZ3MoZmxhZ3MpOworCisJaWYgKCFvcHRfcmF3KQorCQlmbGFncyA9IHdlbGxfa25vd25fZmxhZ3MoZmxhZ3MpOworCisJcmV0dXJuIGZsYWdzOworfQorCisvKgorICogcGFnZSBhY3Rpb25zCisgKi8KKworc3RhdGljIHZvaWQgcHJlcGFyZV9od3BvaXNvbl9mZCh2b2lkKQoreworCWNoYXIgYnVmWzEwMF07CisKKwlpZiAob3B0X2h3cG9pc29uICYmICFod3BvaXNvbl9pbmplY3RfZmQpIHsKKwkJc3ByaW50ZihidWYsICIlcy9jb3JydXB0LXBmbiIsIGh3cG9pc29uX2RlYnVnX2ZzKTsKKwkJaHdwb2lzb25faW5qZWN0X2ZkID0gY2hlY2tlZF9vcGVuKGJ1ZiwgT19XUk9OTFkpOworCX0KKworCWlmIChvcHRfdW5wb2lzb24gJiYgIWh3cG9pc29uX2ZvcmdldF9mZCkgeworCQlzcHJpbnRmKGJ1ZiwgIiVzL3JlbmV3LXBmbiIsIGh3cG9pc29uX2RlYnVnX2ZzKTsKKwkJaHdwb2lzb25fZm9yZ2V0X2ZkID0gY2hlY2tlZF9vcGVuKGJ1ZiwgT19XUk9OTFkpOworCX0KK30KKworc3RhdGljIGludCBod3BvaXNvbl9wYWdlKHVuc2lnbmVkIGxvbmcgb2Zmc2V0KQoreworCWNoYXIgYnVmWzEwMF07CisJaW50IGxlbjsKKworCWxlbiA9IHNwcmludGYoYnVmLCAiMHglbHhcbiIsIG9mZnNldCk7CisJbGVuID0gd3JpdGUoaHdwb2lzb25faW5qZWN0X2ZkLCBidWYsIGxlbik7CisJaWYgKGxlbiA8IDApIHsKKwkJcGVycm9yKCJod3BvaXNvbiBpbmplY3QiKTsKKwkJcmV0dXJuIGxlbjsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdW5wb2lzb25fcGFnZSh1bnNpZ25lZCBsb25nIG9mZnNldCkKK3sKKwljaGFyIGJ1ZlsxMDBdOworCWludCBsZW47CisKKwlsZW4gPSBzcHJpbnRmKGJ1ZiwgIjB4JWx4XG4iLCBvZmZzZXQpOworCWxlbiA9IHdyaXRlKGh3cG9pc29uX2ZvcmdldF9mZCwgYnVmLCBsZW4pOworCWlmIChsZW4gPCAwKSB7CisJCXBlcnJvcigiaHdwb2lzb24gZm9yZ2V0Iik7CisJCXJldHVybiBsZW47CisJfQorCXJldHVybiAwOworfQogCiAvKgogICogcGFnZSBmcmFtZSB3YWxrZXIKQEAgLTM5NCwxMDQgKzUzMSw4MyBAQAogCWV4aXQoRVhJVF9GQUlMVVJFKTsKIH0KIAotc3RhdGljIHZvaWQgYWRkX3BhZ2UodW5zaWduZWQgbG9uZyBvZmZzZXQsIHVpbnQ2NF90IGZsYWdzKQorc3RhdGljIHZvaWQgYWRkX3BhZ2UodW5zaWduZWQgbG9uZyB2b2Zmc2V0LAorCQkgICAgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1aW50NjRfdCBmbGFncykKIHsKLQlmbGFncyA9IGV4cGFuZF9vdmVybG9hZGVkX2ZsYWdzKGZsYWdzKTsKLQotCWlmICghb3B0X3JhdykKLQkJZmxhZ3MgPSB3ZWxsX2tub3duX2ZsYWdzKGZsYWdzKTsKKwlmbGFncyA9IGtwYWdlZmxhZ3NfZmxhZ3MoZmxhZ3MpOwogCiAJaWYgKCFiaXRfbWFza19vayhmbGFncykpCiAJCXJldHVybjsKIAorCWlmIChvcHRfaHdwb2lzb24pCisJCWh3cG9pc29uX3BhZ2Uob2Zmc2V0KTsKKwlpZiAob3B0X3VucG9pc29uKQorCQl1bnBvaXNvbl9wYWdlKG9mZnNldCk7CisKIAlpZiAob3B0X2xpc3QgPT0gMSkKLQkJc2hvd19wYWdlX3JhbmdlKG9mZnNldCwgZmxhZ3MpOworCQlzaG93X3BhZ2VfcmFuZ2Uodm9mZnNldCwgb2Zmc2V0LCBmbGFncyk7CiAJZWxzZSBpZiAob3B0X2xpc3QgPT0gMikKLQkJc2hvd19wYWdlKG9mZnNldCwgZmxhZ3MpOworCQlzaG93X3BhZ2Uodm9mZnNldCwgb2Zmc2V0LCBmbGFncyk7CiAKIAlucl9wYWdlc1toYXNoX3Nsb3QoZmxhZ3MpXSsrOwogCXRvdGFsX3BhZ2VzKys7CiB9CiAKLXN0YXRpYyB2b2lkIHdhbGtfcGZuKHVuc2lnbmVkIGxvbmcgaW5kZXgsIHVuc2lnbmVkIGxvbmcgY291bnQpCisjZGVmaW5lIEtQQUdFRkxBR1NfQkFUQ0gJKDY0IDw8IDEwKQkvKiA2NGsgcGFnZXMgKi8KK3N0YXRpYyB2b2lkIHdhbGtfcGZuKHVuc2lnbmVkIGxvbmcgdm9mZnNldCwKKwkJICAgICB1bnNpZ25lZCBsb25nIGluZGV4LAorCQkgICAgIHVuc2lnbmVkIGxvbmcgY291bnQpCiB7CisJdWludDY0X3QgYnVmW0tQQUdFRkxBR1NfQkFUQ0hdOwogCXVuc2lnbmVkIGxvbmcgYmF0Y2g7Ci0JdW5zaWduZWQgbG9uZyBuOworCXVuc2lnbmVkIGxvbmcgcGFnZXM7CiAJdW5zaWduZWQgbG9uZyBpOwogCi0JaWYgKGluZGV4ID4gVUxPTkdfTUFYIC8gS1BGX0JZVEVTKQotCQlmYXRhbCgiaW5kZXggb3ZlcmZsb3c6ICVsdVxuIiwgaW5kZXgpOwotCi0JbHNlZWsoa3BhZ2VmbGFnc19mZCwgaW5kZXggKiBLUEZfQllURVMsIFNFRUtfU0VUKTsKLQogCXdoaWxlIChjb3VudCkgewotCQl1aW50NjRfdCBrcGFnZWZsYWdzX2J1ZltLUEZfQllURVMgKiBQQUdFU19CQVRDSF07Ci0KLQkJYmF0Y2ggPSBtaW5fdCh1bnNpZ25lZCBsb25nLCBjb3VudCwgUEFHRVNfQkFUQ0gpOwotCQluID0gcmVhZChrcGFnZWZsYWdzX2ZkLCBrcGFnZWZsYWdzX2J1ZiwgYmF0Y2ggKiBLUEZfQllURVMpOwotCQlpZiAobiA9PSAwKQorCQliYXRjaCA9IG1pbl90KHVuc2lnbmVkIGxvbmcsIGNvdW50LCBLUEFHRUZMQUdTX0JBVENIKTsKKwkJcGFnZXMgPSBrcGFnZWZsYWdzX3JlYWQoYnVmLCBpbmRleCwgYmF0Y2gpOworCQlpZiAocGFnZXMgPT0gMCkKIAkJCWJyZWFrOwotCQlpZiAobiA8IDApIHsKLQkJCXBlcnJvcihQUk9DX0tQQUdFRkxBR1MpOwotCQkJZXhpdChFWElUX0ZBSUxVUkUpOwotCQl9CiAKLQkJaWYgKG4gJSBLUEZfQllURVMgIT0gMCkKLQkJCWZhdGFsKCJwYXJ0aWFsIHJlYWQ6ICVsdSBieXRlc1xuIiwgbik7Ci0JCW4gPSBuIC8gS1BGX0JZVEVTOworCQlmb3IgKGkgPSAwOyBpIDwgcGFnZXM7IGkrKykKKwkJCWFkZF9wYWdlKHZvZmZzZXQgKyBpLCBpbmRleCArIGksIGJ1ZltpXSk7CiAKLQkJZm9yIChpID0gMDsgaSA8IG47IGkrKykKLQkJCWFkZF9wYWdlKGluZGV4ICsgaSwga3BhZ2VmbGFnc19idWZbaV0pOwotCi0JCWluZGV4ICs9IGJhdGNoOwotCQljb3VudCAtPSBiYXRjaDsKKwkJaW5kZXggKz0gcGFnZXM7CisJCWNvdW50IC09IHBhZ2VzOwogCX0KIH0KIAotCi0jZGVmaW5lIFBBR0VNQVBfQkFUQ0gJNDA5Ngotc3RhdGljIHVuc2lnbmVkIGxvbmcgdGFza19wZm4odW5zaWduZWQgbG9uZyBwZ29mZikKKyNkZWZpbmUgUEFHRU1BUF9CQVRDSAkoNjQgPDwgMTApCitzdGF0aWMgdm9pZCB3YWxrX3ZtYSh1bnNpZ25lZCBsb25nIGluZGV4LCB1bnNpZ25lZCBsb25nIGNvdW50KQogewotCXN0YXRpYyB1aW50NjRfdCBidWZbUEFHRU1BUF9CQVRDSF07Ci0Jc3RhdGljIHVuc2lnbmVkIGxvbmcgc3RhcnQ7Ci0Jc3RhdGljIGxvbmcgY291bnQ7Ci0JdWludDY0X3QgcGZuOworCXVpbnQ2NF90IGJ1ZltQQUdFTUFQX0JBVENIXTsKKwl1bnNpZ25lZCBsb25nIGJhdGNoOworCXVuc2lnbmVkIGxvbmcgcGFnZXM7CisJdW5zaWduZWQgbG9uZyBwZm47CisJdW5zaWduZWQgbG9uZyBpOwogCi0JaWYgKHBnb2ZmIDwgc3RhcnQgfHwgcGdvZmYgPj0gc3RhcnQgKyBjb3VudCkgewotCQlpZiAobHNlZWs2NChwYWdlbWFwX2ZkLAotCQkJICAgICh1aW50NjRfdClwZ29mZiAqIFBNX0VOVFJZX0JZVEVTLAotCQkJICAgIFNFRUtfU0VUKSA8IDApIHsKLQkJCXBlcnJvcigicGFnZW1hcCBzZWVrIik7Ci0JCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJd2hpbGUgKGNvdW50KSB7CisJCWJhdGNoID0gbWluX3QodW5zaWduZWQgbG9uZywgY291bnQsIFBBR0VNQVBfQkFUQ0gpOworCQlwYWdlcyA9IHBhZ2VtYXBfcmVhZChidWYsIGluZGV4LCBiYXRjaCk7CisJCWlmIChwYWdlcyA9PSAwKQorCQkJYnJlYWs7CisKKwkJZm9yIChpID0gMDsgaSA8IHBhZ2VzOyBpKyspIHsKKwkJCXBmbiA9IHBhZ2VtYXBfcGZuKGJ1ZltpXSk7CisJCQlpZiAocGZuKQorCQkJCXdhbGtfcGZuKGluZGV4ICsgaSwgcGZuLCAxKTsKIAkJfQotCQljb3VudCA9IHJlYWQocGFnZW1hcF9mZCwgYnVmLCBzaXplb2YoYnVmKSk7Ci0JCWlmIChjb3VudCA9PSAwKQotCQkJcmV0dXJuIDA7Ci0JCWlmIChjb3VudCA8IDApIHsKLQkJCXBlcnJvcigicGFnZW1hcCByZWFkIik7Ci0JCQlleGl0KEVYSVRfRkFJTFVSRSk7Ci0JCX0KLQkJaWYgKGNvdW50ICUgUE1fRU5UUllfQllURVMpIHsKLQkJCWZhdGFsKCJwYWdlbWFwIHJlYWQgbm90IGFsaWduZWQuXG4iKTsKLQkJCWV4aXQoRVhJVF9GQUlMVVJFKTsKLQkJfQotCQljb3VudCAvPSBQTV9FTlRSWV9CWVRFUzsKLQkJc3RhcnQgPSBwZ29mZjsKKworCQlpbmRleCArPSBwYWdlczsKKwkJY291bnQgLT0gcGFnZXM7CiAJfQotCi0JcGZuID0gYnVmW3Bnb2ZmIC0gc3RhcnRdOwotCWlmIChwZm4gJiBQTV9QUkVTRU5UKQotCQlwZm4gPSBQTV9QRlJBTUUocGZuKTsKLQllbHNlCi0JCXBmbiA9IDA7Ci0KLQlyZXR1cm4gcGZuOwogfQogCiBzdGF0aWMgdm9pZCB3YWxrX3Rhc2sodW5zaWduZWQgbG9uZyBpbmRleCwgdW5zaWduZWQgbG9uZyBjb3VudCkKIHsKLQlpbnQgaSA9IDA7CiAJY29uc3QgdW5zaWduZWQgbG9uZyBlbmQgPSBpbmRleCArIGNvdW50OworCXVuc2lnbmVkIGxvbmcgc3RhcnQ7CisJaW50IGkgPSAwOwogCiAJd2hpbGUgKGluZGV4IDwgZW5kKSB7CiAKQEAgLTUwMSwxNSArNjE3LDExIEBACiAJCWlmIChwZ19zdGFydFtpXSA+PSBlbmQpCiAJCQlyZXR1cm47CiAKLQkJdm9mZnNldCA9IG1heF90KHVuc2lnbmVkIGxvbmcsIHBnX3N0YXJ0W2ldLCBpbmRleCk7Ci0JCWluZGV4ICAgPSBtaW5fdCh1bnNpZ25lZCBsb25nLCBwZ19lbmRbaV0sIGVuZCk7CisJCXN0YXJ0ID0gbWF4X3QodW5zaWduZWQgbG9uZywgcGdfc3RhcnRbaV0sIGluZGV4KTsKKwkJaW5kZXggPSBtaW5fdCh1bnNpZ25lZCBsb25nLCBwZ19lbmRbaV0sIGVuZCk7CiAKLQkJYXNzZXJ0KHZvZmZzZXQgPCBpbmRleCk7Ci0JCWZvciAoOyB2b2Zmc2V0IDwgaW5kZXg7IHZvZmZzZXQrKykgewotCQkJdW5zaWduZWQgbG9uZyBwZm4gPSB0YXNrX3Bmbih2b2Zmc2V0KTsKLQkJCWlmIChwZm4pCi0JCQkJd2Fsa19wZm4ocGZuLCAxKTsKLQkJfQorCQlhc3NlcnQoc3RhcnQgPCBpbmRleCk7CisJCXdhbGtfdm1hKHN0YXJ0LCBpbmRleCAtIHN0YXJ0KTsKIAl9CiB9CiAKQEAgLTUyNywxOCArNjM5LDE0IEBACiB7CiAJaW50IGk7CiAKLQlrcGFnZWZsYWdzX2ZkID0gb3BlbihQUk9DX0tQQUdFRkxBR1MsIE9fUkRPTkxZKTsKLQlpZiAoa3BhZ2VmbGFnc19mZCA8IDApIHsKLQkJcGVycm9yKFBST0NfS1BBR0VGTEFHUyk7Ci0JCWV4aXQoRVhJVF9GQUlMVVJFKTsKLQl9CisJa3BhZ2VmbGFnc19mZCA9IGNoZWNrZWRfb3BlbihQUk9DX0tQQUdFRkxBR1MsIE9fUkRPTkxZKTsKIAogCWlmICghbnJfYWRkcl9yYW5nZXMpCiAJCWFkZF9hZGRyX3JhbmdlKDAsIFVMT05HX01BWCk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgbnJfYWRkcl9yYW5nZXM7IGkrKykKIAkJaWYgKCFvcHRfcGlkKQotCQkJd2Fsa19wZm4ob3B0X29mZnNldFtpXSwgb3B0X3NpemVbaV0pOworCQkJd2Fsa19wZm4oMCwgb3B0X29mZnNldFtpXSwgb3B0X3NpemVbaV0pOwogCQllbHNlCiAJCQl3YWxrX3Rhc2sob3B0X29mZnNldFtpXSwgb3B0X3NpemVbaV0pOwogCkBAIC01NzUsNiArNjgzLDggQEAKICIgICAgICAgICAgICAtbHwtLWxpc3QgICAgICAgICAgICAgICAgIFNob3cgcGFnZSBkZXRhaWxzIGluIHJhbmdlc1xuIgogIiAgICAgICAgICAgIC1MfC0tbGlzdC1lYWNoICAgICAgICAgICAgU2hvdyBwYWdlIGRldGFpbHMgb25lIGJ5IG9uZVxuIgogIiAgICAgICAgICAgIC1OfC0tbm8tc3VtbWFyeSAgICAgICAgICAgRG9uJ3Qgc2hvdyBzdW1tYXkgaW5mb1xuIgorIiAgICAgICAgICAgIC1YfC0taHdwb2lzb24gICAgICAgICAgICAgaHdwb2lzb24gcGFnZXNcbiIKKyIgICAgICAgICAgICAteHwtLXVucG9pc29uICAgICAgICAgICAgIHVucG9pc29uIHBhZ2VzXG4iCiAiICAgICAgICAgICAgLWh8LS1oZWxwICAgICAgICAgICAgICAgICBTaG93IHRoaXMgdXNhZ2UgbWVzc2FnZVxuIgogImFkZHItc3BlYzpcbiIKICIgICAgICAgICAgICBOICAgICAgICAgICAgICAgICAgICAgICAgIG9uZSBwYWdlIGF0IG9mZnNldCBOICh1bml0OiBwYWdlcylcbiIKQEAgLTYyNCwxMSArNzM0LDcgQEAKIAlvcHRfcGlkID0gcGFyc2VfbnVtYmVyKHN0cik7CiAKIAlzcHJpbnRmKGJ1ZiwgIi9wcm9jLyVkL3BhZ2VtYXAiLCBvcHRfcGlkKTsKLQlwYWdlbWFwX2ZkID0gb3BlbihidWYsIE9fUkRPTkxZKTsKLQlpZiAocGFnZW1hcF9mZCA8IDApIHsKLQkJcGVycm9yKGJ1Zik7Ci0JCWV4aXQoRVhJVF9GQUlMVVJFKTsKLQl9CisJcGFnZW1hcF9mZCA9IGNoZWNrZWRfb3BlbihidWYsIE9fUkRPTkxZKTsKIAogCXNwcmludGYoYnVmLCAiL3Byb2MvJWQvbWFwcyIsIG9wdF9waWQpOwogCWZpbGUgPSBmb3BlbihidWYsICJyIik7CkBAIC03ODgsNiArODk0LDggQEAKIAl7ICJsaXN0IiAgICAgICwgMCwgTlVMTCwgJ2wnIH0sCiAJeyAibGlzdC1lYWNoIiAsIDAsIE5VTEwsICdMJyB9LAogCXsgIm5vLXN1bW1hcnkiLCAwLCBOVUxMLCAnTicgfSwKKwl7ICJod3BvaXNvbiIgICwgMCwgTlVMTCwgJ1gnIH0sCisJeyAidW5wb2lzb24iICAsIDAsIE5VTEwsICd4JyB9LAogCXsgImhlbHAiICAgICAgLCAwLCBOVUxMLCAnaCcgfSwKIAl7IE5VTEwgICAgICAgICwgMCwgTlVMTCwgMCB9CiB9OwpAQCAtNzk5LDcgKzkwNyw3IEBACiAJcGFnZV9zaXplID0gZ2V0cGFnZXNpemUoKTsKIAogCXdoaWxlICgoYyA9IGdldG9wdF9sb25nKGFyZ2MsIGFyZ3YsCi0JCQkJInJwOmY6YTpiOmxMTmgiLCBvcHRzLCBOVUxMKSkgIT0gLTEpIHsKKwkJCQkicnA6ZjphOmI6bExOWHhoIiwgb3B0cywgTlVMTCkpICE9IC0xKSB7CiAJCXN3aXRjaCAoYykgewogCQljYXNlICdyJzoKIAkJCW9wdF9yYXcgPSAxOwpAQCAtODI1LDYgKzkzMywxNCBAQAogCQljYXNlICdOJzoKIAkJCW9wdF9ub19zdW1tYXJ5ID0gMTsKIAkJCWJyZWFrOworCQljYXNlICdYJzoKKwkJCW9wdF9od3BvaXNvbiA9IDE7CisJCQlwcmVwYXJlX2h3cG9pc29uX2ZkKCk7CisJCQlicmVhazsKKwkJY2FzZSAneCc6CisJCQlvcHRfdW5wb2lzb24gPSAxOworCQkJcHJlcGFyZV9od3BvaXNvbl9mZCgpOworCQkJYnJlYWs7CiAJCWNhc2UgJ2gnOgogCQkJdXNhZ2UoKTsKIAkJCWV4aXQoMCk7CkBAIC04NDQsNyArOTYwLDcgQEAKIAl3YWxrX2FkZHJfcmFuZ2VzKCk7CiAKIAlpZiAob3B0X2xpc3QgPT0gMSkKLQkJc2hvd19wYWdlX3JhbmdlKDAsIDApOyAgLyogZHJhaW4gdGhlIGJ1ZmZlciAqLworCQlzaG93X3BhZ2VfcmFuZ2UoMCwgMCwgMCk7ICAvKiBkcmFpbiB0aGUgYnVmZmVyICovCiAKIAlpZiAob3B0X25vX3N1bW1hcnkpCiAJCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92bS9wYWdlbWFwLnR4dCBiL0RvY3VtZW50YXRpb24vdm0vcGFnZW1hcC50eHQKaW5kZXggNjAwYTMwNC4uZGYwOWI5NiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi92bS9wYWdlbWFwLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3ZtL3BhZ2VtYXAudHh0CkBAIC01Nyw3ICs1Nyw5IEBACiAgICAgMTYuIENPTVBPVU5EX1RBSUwKICAgICAxNi4gSFVHRQogICAgIDE4LiBVTkVWSUNUQUJMRQorICAgIDE5LiBIV1BPSVNPTgogICAgIDIwLiBOT1BBR0UKKyAgICAyMS4gS1NNCiAKIFNob3J0IGRlc2NyaXB0aW9ucyB0byB0aGUgcGFnZSBmbGFnczoKIApAQCAtODYsOSArODgsMTUgQEAKIDE3LiBIVUdFCiAgICAgdGhpcyBpcyBhbiBpbnRlZ3JhbCBwYXJ0IG9mIGEgSHVnZVRMQiBwYWdlCiAKKzE5LiBIV1BPSVNPTgorICAgIGhhcmR3YXJlIGRldGVjdGVkIG1lbW9yeSBjb3JydXB0aW9uIG9uIHRoaXMgcGFnZTogZG9uJ3QgdG91Y2ggdGhlIGRhdGEhCisKIDIwLiBOT1BBR0UKICAgICBubyBwYWdlIGZyYW1lIGV4aXN0cyBhdCB0aGUgcmVxdWVzdGVkIGFkZHJlc3MKIAorMjEuIEtTTQorICAgIGlkZW50aWNhbCBtZW1vcnkgcGFnZXMgZHluYW1pY2FsbHkgc2hhcmVkIGJldHdlZW4gb25lIG9yIG1vcmUgcHJvY2Vzc2VzCisKICAgICBbSU8gcmVsYXRlZCBwYWdlIGZsYWdzXQogIDEuIEVSUk9SICAgICBJTyBlcnJvciBvY2N1cnJlZAogIDMuIFVQVE9EQVRFICBwYWdlIGhhcyB1cC10by1kYXRlIGRhdGEKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdzEvbWFzdGVycy9kczI0ODIgYi9Eb2N1bWVudGF0aW9uL3cxL21hc3RlcnMvZHMyNDgyCmluZGV4IDkyMTBkNmYuLjI5OWI5MWMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdzEvbWFzdGVycy9kczI0ODIKKysrIGIvRG9jdW1lbnRhdGlvbi93MS9tYXN0ZXJzL2RzMjQ4MgpAQCAtMjQsOCArMjQsOCBAQAogCiBWYWxpZCBhZGRyZXNzZXMgYXJlIDB4MTgsIDB4MTksIDB4MWEsIGFuZCAweDFiLgogSG93ZXZlciwgdGhlIGRldmljZSBjYW5ub3QgYmUgZGV0ZWN0ZWQgd2l0aG91dCB3cml0aW5nIHRvIHRoZSBpMmMgYnVzLCBzbyBubwotZGV0ZWN0aW9uIGlzIGRvbmUuCi1Zb3Ugc2hvdWxkIGZvcmNlIHRoZSBkZXZpY2UgYWRkcmVzcy4KK2RldGVjdGlvbiBpcyBkb25lLiBZb3Ugc2hvdWxkIGluc3RhbnRpYXRlIHRoZSBkZXZpY2UgZXhwbGljaXRseS4KIAotJCBtb2Rwcm9iZSBkczI0ODIgZm9yY2U9MCwweDE4CiskIG1vZHByb2JlIGRzMjQ4MgorJCBlY2hvIGRzMjQ4MiAweDE4ID4gL3N5cy9idXMvaTJjL2RldmljZXMvaTJjLTAvbmV3X2RldmljZQogCmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTCmluZGV4IGNkYmJhZjUuLmExYTJhY2UgMTAwNjQ0Ci0tLSBhL01BSU5UQUlORVJTCisrKyBiL01BSU5UQUlORVJTCkBAIC02NSw0MyArNjUsNTEgQEAKIAogOC4JSGFwcHkgaGFja2luZy4KIAotCQktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorRGVzY3JpcHRpb25zIG9mIHNlY3Rpb24gZW50cmllczoKIAotTWFpbnRhaW5lcnMgTGlzdCAodHJ5IHRvIGxvb2sgZm9yIG1vc3QgcHJlY2lzZSBhcmVhcyBmaXJzdCkKKwlQOiBQZXJzb24gKG9ic29sZXRlKQorCU06IE1haWwgcGF0Y2hlcyB0bzogRnVsbE5hbWUgPGFkZHJlc3NAZG9tYWluPgorCUw6IE1haWxpbmcgbGlzdCB0aGF0IGlzIHJlbGV2YW50IHRvIHRoaXMgYXJlYQorCVc6IFdlYi1wYWdlIHdpdGggc3RhdHVzL2luZm8KKwlUOiBTQ00gdHJlZSB0eXBlIGFuZCBsb2NhdGlvbi4gIFR5cGUgaXMgb25lIG9mOiBnaXQsIGhnLCBxdWlsdCwgc3RnaXQuCisJUzogU3RhdHVzLCBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKwkgICBTdXBwb3J0ZWQ6CVNvbWVvbmUgaXMgYWN0dWFsbHkgcGFpZCB0byBsb29rIGFmdGVyIHRoaXMuCisJICAgTWFpbnRhaW5lZDoJU29tZW9uZSBhY3R1YWxseSBsb29rcyBhZnRlciBpdC4KKwkgICBPZGQgRml4ZXM6CUl0IGhhcyBhIG1haW50YWluZXIgYnV0IHRoZXkgZG9uJ3QgaGF2ZSB0aW1lIHRvIGRvCisJCQltdWNoIG90aGVyIHRoYW4gdGhyb3cgdGhlIG9kZCBwYXRjaCBpbi4gU2VlIGJlbG93Li4KKwkgICBPcnBoYW46CU5vIGN1cnJlbnQgbWFpbnRhaW5lciBbYnV0IG1heWJlIHlvdSBjb3VsZCB0YWtlIHRoZQorCQkJcm9sZSBhcyB5b3Ugd3JpdGUgeW91ciBuZXcgY29kZV0uCisJICAgT2Jzb2xldGU6CU9sZCBjb2RlLiBTb21ldGhpbmcgdGFnZ2VkIG9ic29sZXRlIGdlbmVyYWxseSBtZWFucworCQkJaXQgaGFzIGJlZW4gcmVwbGFjZWQgYnkgYSBiZXR0ZXIgc3lzdGVtIGFuZCB5b3UKKwkJCXNob3VsZCBiZSB1c2luZyB0aGF0LgorCUY6IEZpbGVzIGFuZCBkaXJlY3RvcmllcyB3aXRoIHdpbGRjYXJkIHBhdHRlcm5zLgorCSAgIEEgdHJhaWxpbmcgc2xhc2ggaW5jbHVkZXMgYWxsIGZpbGVzIGFuZCBzdWJkaXJlY3RvcnkgZmlsZXMuCisJICAgRjoJZHJpdmVycy9uZXQvCWFsbCBmaWxlcyBpbiBhbmQgYmVsb3cgZHJpdmVycy9uZXQKKwkgICBGOglkcml2ZXJzL25ldC8qCWFsbCBmaWxlcyBpbiBkcml2ZXJzL25ldCwgYnV0IG5vdCBiZWxvdworCSAgIEY6CSovbmV0LyoJCWFsbCBmaWxlcyBpbiAiYW55IHRvcCBsZXZlbCBkaXJlY3RvcnkiL25ldAorCSAgIE9uZSBwYXR0ZXJuIHBlciBsaW5lLiAgTXVsdGlwbGUgRjogbGluZXMgYWNjZXB0YWJsZS4KKwlYOiBGaWxlcyBhbmQgZGlyZWN0b3JpZXMgdGhhdCBhcmUgTk9UIG1haW50YWluZWQsIHNhbWUgcnVsZXMgYXMgRjoKKwkgICBGaWxlcyBleGNsdXNpb25zIGFyZSB0ZXN0ZWQgYmVmb3JlIGZpbGUgbWF0Y2hlcy4KKwkgICBDYW4gYmUgdXNlZnVsIGZvciBleGNsdWRpbmcgYSBzcGVjaWZpYyBzdWJkaXJlY3RvcnksIGZvciBpbnN0YW5jZToKKwkgICBGOgluZXQvCisJICAgWDoJbmV0L2lwdjYvCisJICAgbWF0Y2hlcyBhbGwgZmlsZXMgaW4gYW5kIGJlbG93IG5ldCBleGNsdWRpbmcgbmV0L2lwdjYvCisJSzogS2V5d29yZCBwZXJsIGV4dGVuZGVkIHJlZ2V4IHBhdHRlcm4gdG8gbWF0Y2ggY29udGVudCBpbiBhCisJICAgcGF0Y2ggb3IgZmlsZS4gIEZvciBpbnN0YW5jZToKKwkgICBLOiBvZl9nZXRfcHJvZmlsZQorCSAgICAgIG1hdGNoZXMgcGF0Y2hlcyBvciBmaWxlcyB0aGF0IGNvbnRhaW4gIm9mX2dldF9wcm9maWxlIgorCSAgIEs6IFxiKHByaW50a3xwcl8oaW5mb3xlcnIpKVxiCisJICAgICAgbWF0Y2hlcyBwYXRjaGVzIG9yIGZpbGVzIHRoYXQgY29udGFpbiBvbmUgb3IgbW9yZSBvZiB0aGUgd29yZHMKKwkgICAgICBwcmludGssIHByX2luZm8gb3IgcHJfZXJyCisJICAgT25lIHJlZ2V4IHBhdHRlcm4gcGVyIGxpbmUuICBNdWx0aXBsZSBLOiBsaW5lcyBhY2NlcHRhYmxlLgogCiBOb3RlOiBGb3IgdGhlIGhhcmQgb2YgdGhpbmtpbmcsIHRoaXMgbGlzdCBpcyBtZWFudCB0byByZW1haW4gaW4gYWxwaGFiZXRpY2FsCiBvcmRlci4gSWYgeW91IGNvdWxkIGFkZCB5b3Vyc2VsdmVzIHRvIGl0IGluIGFscGhhYmV0aWNhbCBvcmRlciB0aGF0IHdvdWxkIGJlCiBzbyBtdWNoIGVhc2llciBbRWRdCiAKLVA6IFBlcnNvbiAob2Jzb2xldGUpCi1NOiBNYWlsIHBhdGNoZXMgdG86IEZ1bGxOYW1lIDxhZGRyZXNzQGRvbWFpbj4KLUw6IE1haWxpbmcgbGlzdCB0aGF0IGlzIHJlbGV2YW50IHRvIHRoaXMgYXJlYQotVzogV2ViLXBhZ2Ugd2l0aCBzdGF0dXMvaW5mbwotVDogU0NNIHRyZWUgdHlwZSBhbmQgbG9jYXRpb24uICBUeXBlIGlzIG9uZSBvZjogZ2l0LCBoZywgcXVpbHQsIHN0Z2l0LgotUzogU3RhdHVzLCBvbmUgb2YgdGhlIGZvbGxvd2luZzoKK01haW50YWluZXJzIExpc3QgKHRyeSB0byBsb29rIGZvciBtb3N0IHByZWNpc2UgYXJlYXMgZmlyc3QpCiAKLQlTdXBwb3J0ZWQ6CVNvbWVvbmUgaXMgYWN0dWFsbHkgcGFpZCB0byBsb29rIGFmdGVyIHRoaXMuCi0JTWFpbnRhaW5lZDoJU29tZW9uZSBhY3R1YWxseSBsb29rcyBhZnRlciBpdC4KLQlPZGQgRml4ZXM6CUl0IGhhcyBhIG1haW50YWluZXIgYnV0IHRoZXkgZG9uJ3QgaGF2ZSB0aW1lIHRvIGRvCi0JCQltdWNoIG90aGVyIHRoYW4gdGhyb3cgdGhlIG9kZCBwYXRjaCBpbi4gU2VlIGJlbG93Li4KLQlPcnBoYW46CQlObyBjdXJyZW50IG1haW50YWluZXIgW2J1dCBtYXliZSB5b3UgY291bGQgdGFrZSB0aGUKLQkJCXJvbGUgYXMgeW91IHdyaXRlIHlvdXIgbmV3IGNvZGVdLgotCU9ic29sZXRlOglPbGQgY29kZS4gU29tZXRoaW5nIHRhZ2dlZCBvYnNvbGV0ZSBnZW5lcmFsbHkgbWVhbnMKLQkJCWl0IGhhcyBiZWVuIHJlcGxhY2VkIGJ5IGEgYmV0dGVyIHN5c3RlbSBhbmQgeW91Ci0JCQlzaG91bGQgYmUgdXNpbmcgdGhhdC4KLQotRjogRmlsZXMgYW5kIGRpcmVjdG9yaWVzIHdpdGggd2lsZGNhcmQgcGF0dGVybnMuCi0gICBBIHRyYWlsaW5nIHNsYXNoIGluY2x1ZGVzIGFsbCBmaWxlcyBhbmQgc3ViZGlyZWN0b3J5IGZpbGVzLgotCUY6CWRyaXZlcnMvbmV0LwlhbGwgZmlsZXMgaW4gYW5kIGJlbG93IGRyaXZlcnMvbmV0Ci0JRjoJZHJpdmVycy9uZXQvKglhbGwgZmlsZXMgaW4gZHJpdmVycy9uZXQsIGJ1dCBub3QgYmVsb3cKLQlGOgkqL25ldC8qCQlhbGwgZmlsZXMgaW4gImFueSB0b3AgbGV2ZWwgZGlyZWN0b3J5Ii9uZXQKLSAgIE9uZSBwYXR0ZXJuIHBlciBsaW5lLiAgTXVsdGlwbGUgRjogbGluZXMgYWNjZXB0YWJsZS4KLVg6IEZpbGVzIGFuZCBkaXJlY3RvcmllcyB0aGF0IGFyZSBOT1QgbWFpbnRhaW5lZCwgc2FtZSBydWxlcyBhcyBGOgotICAgRmlsZXMgZXhjbHVzaW9ucyBhcmUgdGVzdGVkIGJlZm9yZSBmaWxlIG1hdGNoZXMuCi0gICBDYW4gYmUgdXNlZnVsIGZvciBleGNsdWRpbmcgYSBzcGVjaWZpYyBzdWJkaXJlY3RvcnksIGZvciBpbnN0YW5jZToKLQlGOgluZXQvCi0JWDoJbmV0L2lwdjYvCi0gICBtYXRjaGVzIGFsbCBmaWxlcyBpbiBhbmQgYmVsb3cgbmV0IGV4Y2x1ZGluZyBuZXQvaXB2Ni8KKwkJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogM0M1MDUgTkVUV09SSyBEUklWRVIKIE06CVBoaWxpcCBCbHVuZGVsbCA8cGhpbGJAZ251Lm9yZz4KQEAgLTI1Nyw2ICsyNjUsMTMgQEAKIFM6CVN1cHBvcnRlZAogRjoJZHJpdmVycy9hY3BpL2Zhbi5jCiAKK0FDUEkgUFJPQ0VTU09SIEFHR1JFR0FUT1IgRFJJVkVSCitNOglTaGFvaHVhIExpIDxzaGFvaHVhLmxpQGludGVsLmNvbT4KK0w6CWxpbnV4LWFjcGlAdmdlci5rZXJuZWwub3JnCitXOglodHRwOi8vd3d3Lmxlc3N3YXR0cy5vcmcvcHJvamVjdHMvYWNwaS8KK1M6CVN1cHBvcnRlZAorRjoJZHJpdmVycy9hY3BpL2FjcGlfcGFkLmMKKwogQUNQSSBUSEVSTUFMIERSSVZFUgogTToJWmhhbmcgUnVpIDxydWkuemhhbmdAaW50ZWwuY29tPgogTDoJbGludXgtYWNwaUB2Z2VyLmtlcm5lbC5vcmcKQEAgLTU3MCw2ICs1ODUsMTEgQEAKIEw6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZyAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpCiBTOglNYWludGFpbmVkCiAKK0FSTS9DT05URUMgTUlDUk85IE1BQ0hJTkUgU1VQUE9SVAorTToJSHViZXJ0IEZldXJzdGVpbiA8aHViZXJ0LmZldXJzdGVpbkBjb250ZWMuYXQ+CitTOglNYWludGFpbmVkCitGOglhcmNoL2FybS9tYWNoLWVwOTN4eC9taWNybzkuYworCiBBUk0vQ09SR0kgTUFDSElORSBTVVBQT1JUCiBNOglSaWNoYXJkIFB1cmRpZSA8cnB1cmRpZUBycHN5cy5uZXQ+CiBTOglNYWludGFpbmVkCkBAIC02NDYsMjQgKzY2NiwyNCBAQAogTToJTGVubmVydCBCdXl0ZW5oZWsgPGtlcm5lbEB3YW50c3RvZmx5Lm9yZz4KIE06CURhbiBXaWxsaWFtcyA8ZGFuLmoud2lsbGlhbXNAaW50ZWwuY29tPgogTDoJbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnIChtb2RlcmF0ZWQgZm9yIG5vbi1zdWJzY3JpYmVycykKLVM6CVN1cHBvcnRlZAorUzoJTWFpbnRhaW5lZAogCiBBUk0vSU5URUwgSU9QMzNYIEFSTSBBUkNISVRFQ1RVUkUKIE06CURhbiBXaWxsaWFtcyA8ZGFuLmoud2lsbGlhbXNAaW50ZWwuY29tPgogTDoJbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnIChtb2RlcmF0ZWQgZm9yIG5vbi1zdWJzY3JpYmVycykKLVM6CVN1cHBvcnRlZAorUzoJTWFpbnRhaW5lZAogCiBBUk0vSU5URUwgSU9QMTNYWCBBUk0gQVJDSElURUNUVVJFCiBNOglMZW5uZXJ0IEJ1eXRlbmhlayA8a2VybmVsQHdhbnRzdG9mbHkub3JnPgogTToJRGFuIFdpbGxpYW1zIDxkYW4uai53aWxsaWFtc0BpbnRlbC5jb20+CiBMOglsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcgKG1vZGVyYXRlZCBmb3Igbm9uLXN1YnNjcmliZXJzKQotUzoJU3VwcG9ydGVkCitTOglNYWludGFpbmVkCiAKIEFSTS9JTlRFTCBJUTgxMzQyRVggTUFDSElORSBTVVBQT1JUCiBNOglMZW5uZXJ0IEJ1eXRlbmhlayA8a2VybmVsQHdhbnRzdG9mbHkub3JnPgogTToJRGFuIFdpbGxpYW1zIDxkYW4uai53aWxsaWFtc0BpbnRlbC5jb20+CiBMOglsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcgKG1vZGVyYXRlZCBmb3Igbm9uLXN1YnNjcmliZXJzKQotUzoJU3VwcG9ydGVkCitTOglNYWludGFpbmVkCiAKIEFSTS9JTlRFTCBJWFAyMDAwIEFSTSBBUkNISVRFQ1RVUkUKIE06CUxlbm5lcnQgQnV5dGVuaGVrIDxrZXJuZWxAd2FudHN0b2ZseS5vcmc+CkBAIC02ODMsNyArNzAzLDcgQEAKIEFSTS9JTlRFTCBJWFA0WFggQVJNIEFSQ0hJVEVDVFVSRQogTToJSW1yZSBLYWxveiA8a2Fsb3pAb3BlbndydC5vcmc+CiBNOglLcnp5c3p0b2YgSGFsYXNhIDxraGNAcG0ud2F3LnBsPgotTDoJbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnCitMOglsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcgKG1vZGVyYXRlZCBmb3Igbm9uLXN1YnNjcmliZXJzKQogUzoJTWFpbnRhaW5lZAogRjoJYXJjaC9hcm0vbWFjaC1peHA0eHgvCiAKQEAgLTY5MSw3ICs3MTEsNyBAQAogTToJTGVubmVydCBCdXl0ZW5oZWsgPGtlcm5lbEB3YW50c3RvZmx5Lm9yZz4KIE06CURhbiBXaWxsaWFtcyA8ZGFuLmoud2lsbGlhbXNAaW50ZWwuY29tPgogTDoJbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnIChtb2RlcmF0ZWQgZm9yIG5vbi1zdWJzY3JpYmVycykKLVM6CVN1cHBvcnRlZAorUzoJTWFpbnRhaW5lZAogCiBBUk0vSVAgRkFCUklDUyBET1VCTEUgRVNQUkVTU08gTUFDSElORSBTVVBQT1JUCiBNOglMZW5uZXJ0IEJ1eXRlbmhlayA8a2VybmVsQHdhbnRzdG9mbHkub3JnPgpAQCAtNzQwLDIwICs3NjAsMzcgQEAKIE06CURpcmsgT3BmZXIgPGRpcmtAb3BmZXItb25saW5lLmRlPgogUzoJTWFpbnRhaW5lZAogCi1BUk0vUEFMTVRYLFBBTE1UNSxQQUxNTEQsUEFMTVRFMiBTVVBQT1JUCitBUk0vUEFMTVRYLFBBTE1UNSxQQUxNTEQsUEFMTVRFMixQQUxNVEMgU1VQUE9SVAogTToJTWFyZWsgVmFzdXQgPG1hcmVrLnZhc3V0QGdtYWlsLmNvbT4KK0w6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwogVzoJaHR0cDovL2hhY2tuZGV2LmNvbQogUzoJTWFpbnRhaW5lZAorRjoJYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3BhbG10eC5oCitGOglhcmNoL2FybS9tYWNoLXB4YS9wYWxtdHguYworRjoJYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3BhbG10NS5oCitGOglhcmNoL2FybS9tYWNoLXB4YS9wYWxtdDUuYworRjoJYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3BhbG1sZC5oCitGOglhcmNoL2FybS9tYWNoLXB4YS9wYWxtbGQuYworRjoJYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3BhbG10ZTIuaAorRjoJYXJjaC9hcm0vbWFjaC1weGEvcGFsbXRlMi5jCitGOglhcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcGFsbXRjLmgKK0Y6CWFyY2gvYXJtL21hY2gtcHhhL3BhbG10Yy5jCiAKIEFSTS9QQUxNIFRSRU8gNjgwIFNVUFBPUlQKIE06CVRvbWFzIENlY2ggPHNsZWVwX3dhbGtlckBzdXNlLmN6PgorTDoJbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnCiBXOglodHRwOi8vaGFja25kZXYuY29tCiBTOglNYWludGFpbmVkCitGOglhcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvdHJlbzY4MC5oCitGOglhcmNoL2FybS9tYWNoLXB4YS90cmVvNjgwLmMKIAogQVJNL1BBTE1aNzIgU1VQUE9SVAogTToJU2VyZ2V5IExhcGluIDxzbGFwaW5Ab3NzZmFucy5vcmc+CitMOglsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKIFc6CWh0dHA6Ly9oYWNrbmRldi5jb20KIFM6CU1haW50YWluZWQKK0Y6CWFyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9wYWxtejcyLmgKK0Y6CWFyY2gvYXJtL21hY2gtcHhhL3BhbG16NzIuYwogCiBBUk0vUExFQiBTVVBQT1JUCiBNOglQZXRlciBDaHViYiA8cGxlYkBnZWxhdG8udW5zdy5lZHUuYXU+CkBAIC05NjMsNyArMTAwMCw3IEBACiAKIEFUTQogTToJQ2hhcyBXaWxsaWFtcyA8Y2hhc0BjbWYubnJsLm5hdnkubWlsPgotTDoJbGludXgtYXRtLWdlbmVyYWxAbGlzdHMuc291cmNlZm9yZ2UubmV0IChzdWJzY3JpYmVycy1vbmx5KQorTDoJbGludXgtYXRtLWdlbmVyYWxAbGlzdHMuc291cmNlZm9yZ2UubmV0IChtb2RlcmF0ZWQgZm9yIG5vbi1zdWJzY3JpYmVycykKIEw6CW5ldGRldkB2Z2VyLmtlcm5lbC5vcmcKIFc6CWh0dHA6Ly9saW51eC1hdG0uc291cmNlZm9yZ2UubmV0CiBTOglNYWludGFpbmVkCkBAIC0xMjA3LDYgKzEyNDQsMTMgQEAKIFM6CVN1cHBvcnRlZAogRjoJZHJpdmVycy9uZXQvdGczLioKIAorQlJPQ0FERSBCRkEgRkMgU0NTSSBEUklWRVIKK1A6ICAgICAgSmluZyBIdWFuZworTTogICAgICBodWFuZ2pAYnJvY2FkZS5jb20KK0w6ICAgICAgbGludXgtc2NzaUB2Z2VyLmtlcm5lbC5vcmcKK1M6ICAgICAgU3VwcG9ydGVkCitGOiAgICAgIGRyaXZlcnMvc2NzaS9iZmEvCisKIEJTRyAoYmxvY2sgbGF5ZXIgZ2VuZXJpYyBzZyB2NCBkcml2ZXIpCiBNOglGVUpJVEEgVG9tb25vcmkgPGZ1aml0YS50b21vbm9yaUBsYWIubnR0LmNvLmpwPgogTDoJbGludXgtc2NzaUB2Z2VyLmtlcm5lbC5vcmcKQEAgLTE0NDQsNiArMTQ4OCw3IEBACiAKIENPUkVURU1QIEhBUkRXQVJFIE1PTklUT1JJTkcgRFJJVkVSCiBNOglSdWRvbGYgTWFyZWsgPHIubWFyZWtAYXNzZW1ibGVyLmN6PgorTToJSHVheHUgV2FuIDxodWF4dS53YW5AaW50ZWwuY29tPgogTDoJbG0tc2Vuc29yc0BsbS1zZW5zb3JzLm9yZwogUzoJTWFpbnRhaW5lZAogRjoJRG9jdW1lbnRhdGlvbi9od21vbi9jb3JldGVtcApAQCAtMjAzNCw3ICsyMDc5LDcgQEAKIEY6CWZzLyoKIAogRklOVEVLIEY3NTM3NVMgSEFSRFdBUkUgTU9OSVRPUiBBTkQgRkFOIENPTlRST0xMRVIgRFJJVkVSCi1NOglSaWt1IFZvaXBpbyA8cmlrdS52aXBpb0Bpa2kuZmk+CitNOglSaWt1IFZvaXBpbyA8cmlrdS52b2lwaW9AaWtpLmZpPgogTDoJbG0tc2Vuc29yc0BsbS1zZW5zb3JzLm9yZwogUzoJTWFpbnRhaW5lZAogRjoJZHJpdmVycy9od21vbi9mNzUzNzVzLmMKQEAgLTIxMTUsNyArMjE2MCw3IEBACiBGOglhcmNoL3Bvd2VycGMvc3lzZGV2L3FlX2xpYi8KIEY6CWFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS8qcWUuaAogCi1GUkVFU0NBTEUgVVNCIFBFUklQSEVSSUFMIERSSVZFUlMKK0ZSRUVTQ0FMRSBVU0IgUEVSSVBIRVJBTCBEUklWRVJTCiBNOglMaSBZYW5nIDxsZW9saUBmcmVlc2NhbGUuY29tPgogTDoJbGludXgtdXNiQHZnZXIua2VybmVsLm9yZwogTDoJbGludXhwcGMtZGV2QG96bGFicy5vcmcKQEAgLTIxNjYsMTggKzIyMTEsNiBAQAogRjoJZnMvZnNjYWNoZS8KIEY6CWluY2x1ZGUvbGludXgvZnNjYWNoZSouaAogCi1UUkFDSU5HCi1NOglTdGV2ZW4gUm9zdGVkdCA8cm9zdGVkdEBnb29kbWlzLm9yZz4KLU06CUZyZWRlcmljIFdlaXNiZWNrZXIgPGZ3ZWlzYmVjQGdtYWlsLmNvbT4KLU06CUluZ28gTW9sbmFyIDxtaW5nb0ByZWRoYXQuY29tPgotVDoJZ2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC90aXAvbGludXgtMi42LXRpcC5naXQgdHJhY2luZy9jb3JlCi1TOglNYWludGFpbmVkCi1GOglEb2N1bWVudGF0aW9uL3RyYWNlL2Z0cmFjZS50eHQKLUY6CWFyY2gvKi8qLyovZnRyYWNlLmgKLUY6CWFyY2gvKi9rZXJuZWwvZnRyYWNlLmMKLUY6CWluY2x1ZGUvKi9mdHJhY2UuaCBpbmNsdWRlL3RyYWNlLyBpbmNsdWRlL2xpbnV4L3RyYWNlKi5oCi1GOglrZXJuZWwvdHJhY2UvCi0KIEZVSklUU1UgRlItViAoRlJWKSBQT1JUCiBNOglEYXZpZCBIb3dlbGxzIDxkaG93ZWxsc0ByZWRoYXQuY29tPgogUzoJTWFpbnRhaW5lZApAQCAtMjIzNiw5ICsyMjY5LDggQEAKIEY6CWluY2x1ZGUvYXNtLWdlbmVyaWMKIAogR0VORVJJQyBVSU8gRFJJVkVSIEZPUiBQQ0kgREVWSUNFUwotTToJTWljaGFlbCBTLiBUc2lya2luIDxtc3RAcmVkaGF0LmNvbT4KK006CSJNaWNoYWVsIFMuIFRzaXJraW4iIDxtc3RAcmVkaGF0LmNvbT4KIEw6CWt2bUB2Z2VyLmtlcm5lbC5vcmcKLUw6CWxpbnV4LWtlcm5lbEB2Z2VyLmtlcm5lbC5vcmcKIFM6CVN1cHBvcnRlZAogRjoJZHJpdmVycy91aW8vdWlvX3BjaV9nZW5lcmljLmMKIApAQCAtMjU3OSw2ICsyNjExLDcgQEAKIFc6CWh0dHA6Ly93d3cubGludXgxMzk0Lm9yZy8KIFQ6CWdpdCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvaWVlZTEzOTQvbGludXgxMzk0LTIuNi5naXQKIFM6CU1haW50YWluZWQKK0Y6CURvY3VtZW50YXRpb24vZGVidWdnaW5nLXZpYS1vaGNpMTM5NC50eHQKIEY6CWRyaXZlcnMvaWVlZTEzOTQvCiAKIElFRUUgMTM5NCBSQVcgSS9PIERSSVZFUgpAQCAtMjY3OCw3ICsyNzExLDcgQEAKIAogSU5URUwgSU9QLUFETUEgRE1BIERSSVZFUgogTToJRGFuIFdpbGxpYW1zIDxkYW4uai53aWxsaWFtc0BpbnRlbC5jb20+Ci1TOglTdXBwb3J0ZWQKK1M6CU1haW50YWluZWQKIEY6CWRyaXZlcnMvZG1hL2lvcC1hZG1hLmMKIAogSU5URUwgSVhQNFhYIFFNR1IsIE5QRSwgRVRIRVJORVQgYW5kIEhTUyBTVVBQT1JUCkBAIC0yOTY3LDggKzMwMDAsOCBAQAogCiBLRVJORUwgSkFOSVRPUlMKIEw6CWtlcm5lbC1qYW5pdG9yc0B2Z2VyLmtlcm5lbC5vcmcKLVc6CWh0dHA6Ly93d3cua2VybmVsamFuaXRvcnMub3JnLwotUzoJTWFpbnRhaW5lZAorVzoJaHR0cDovL2phbml0b3Iua2VybmVsbmV3Ymllcy5vcmcvCitTOglPZGQgRml4ZXMKIAogS0VSTkVMIE5GU0QsIFNVTlJQQywgQU5EIExPQ0tEIFNFUlZFUlMKIE06CSJKLiBCcnVjZSBGaWVsZHMiIDxiZmllbGRzQGZpZWxkc2VzLm9yZz4KQEAgLTM3NDgsNyArMzc4MSw3IEBACiBGOglkcml2ZXJzL3ZpZGVvL252aWRpYS8KIAogT01BUCBTVVBQT1JUCi1NOgkiVG9ueSBMaW5kZ3JlbiA8dG9ueUBhdG9taWRlLmNvbT4iIDx0b255QGF0b21pZGUuY29tPgorTToJVG9ueSBMaW5kZ3JlbiA8dG9ueUBhdG9taWRlLmNvbT4KIEw6CWxpbnV4LW9tYXBAdmdlci5rZXJuZWwub3JnCiBXOglodHRwOi8vd3d3Lm11cnUuY29tL2xpbnV4L29tYXAvCiBXOglodHRwOi8vbGludXgub21hcC5jb20vCkBAIC0zODUzLDYgKzM4ODYsMTUgQEAKIEY6CURvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtb2NvcmVzCiBGOglkcml2ZXJzL2kyYy9idXNzZXMvaTJjLW9jb3Jlcy5jCiAKK09QRU4gRklSTVdBUkUgQU5EIEZMQVRURU5FRCBERVZJQ0UgVFJFRQorTToJR3JhbnQgTGlrZWx5IDxncmFudC5saWtlbHlAc2VjcmV0bGFiLmNhPgorTDoJZGV2aWNldHJlZS1kaXNjdXNzQGxpc3RzLm96bGFicy5vcmcKK1c6CWh0dHA6Ly9mZHQuc2VjcmV0bGFiLmNhCitTOglNYWludGFpbmVkCitGOglkcml2ZXJzL29mCitGOglpbmNsdWRlL2xpbnV4L29mKi5oCitLOglvZl9nZXRfcHJvcGVydHkKKwogT1BST0ZJTEUKIE06CVJvYmVydCBSaWNodGVyIDxyb2JlcnQucmljaHRlckBhbWQuY29tPgogTDoJb3Byb2ZpbGUtbGlzdEBsaXN0cy5zZi5uZXQKQEAgLTM5NTcsNiArMzk5OSw3IEBACiBQQVJJU0MgQVJDSElURUNUVVJFCiBNOglLeWxlIE1jTWFydGluIDxreWxlQG1jbWFydGluLmNhPgogTToJSGVsZ2UgRGVsbGVyIDxkZWxsZXJAZ214LmRlPgorTToJIkphbWVzIEUuSi4gQm90dG9tbGV5IiA8amVqYkBwYXJpc2MtbGludXgub3JnPgogTDoJbGludXgtcGFyaXNjQHZnZXIua2VybmVsLm9yZwogVzoJaHR0cDovL3d3dy5wYXJpc2MtbGludXgub3JnLwogVDoJZ2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9reWxlL3BhcmlzYy0yLjYuZ2l0CkBAIC00MDQwLDYgKzQwODMsMTMgQEAKIE06CVBhdWwgTWFja2VycmFzIDxwYXVsdXNAc2FtYmEub3JnPgogTToJSW5nbyBNb2xuYXIgPG1pbmdvQGVsdGUuaHU+CiBTOglTdXBwb3J0ZWQKK0Y6CWtlcm5lbC9wZXJmX2V2ZW50LmMKK0Y6CWluY2x1ZGUvbGludXgvcGVyZl9ldmVudC5oCitGOglhcmNoLyovKi9rZXJuZWwvcGVyZl9ldmVudC5jCitGOglhcmNoLyovaW5jbHVkZS9hc20vcGVyZl9ldmVudC5oCitGOglhcmNoLyovbGliL3BlcmZfZXZlbnQuYworRjoJYXJjaC8qL2tlcm5lbC9wZXJmX2NhbGxjaGFpbi5jCitGOgl0b29scy9wZXJmLwogCiBQRVJTT05BTElUWSBIQU5ETElORwogTToJQ2hyaXN0b3BoIEhlbGx3aWcgPGhjaEBpbmZyYWRlYWQub3JnPgpAQCAtNDQ4OSwxMiArNDUzOSwxMSBAQAogRjoJaW5jbHVkZS9saW51eC9zY2hlZC5oCiAKIFNDT1JFIEFSQ0hJVEVDVFVSRQotUDoJQ2hlbiBMaXFpbgotTToJbGlxaW4uY2hlbkBzdW5wbHVzY3QuY29tCi1QOglMZW5ub3ggV3UKLU06CWxlbm5veC53dUBnbWFpbC5jb20KK006CUNoZW4gTGlxaW4gPGxpcWluLmNoZW5Ac3VucGx1c2N0LmNvbT4KK006CUxlbm5veCBXdSA8bGVubm94Lnd1QGdtYWlsLmNvbT4KIFc6CWh0dHA6Ly93d3cuc3VucGx1c2N0LmNvbQogUzoJU3VwcG9ydGVkCitGOglhcmNoL3Njb3JlLwogCiBTQ1NJIENEUk9NIERSSVZFUgogTToJSmVucyBBeGJvZSA8YXhib2VAa2VybmVsLmRrPgpAQCAtNDU2NywyMCArNDYxNiwyMCBAQAogRjoJZHJpdmVycy9tbWMvaG9zdC9zZHJpY29oX2NzLmMKIAogU0VDVVJFIERJR0lUQUwgSE9TVCBDT05UUk9MTEVSIElOVEVSRkFDRSAoU0RIQ0kpIERSSVZFUgotUzogICAgIE9ycGhhbgotTDogICAgIGxpbnV4LW1tY0B2Z2VyLmtlcm5lbC5vcmcKLUY6ICAgICBkcml2ZXJzL21tYy9ob3N0L3NkaGNpLioKK1M6CU9ycGhhbgorTDoJbGludXgtbW1jQHZnZXIua2VybmVsLm9yZworRjoJZHJpdmVycy9tbWMvaG9zdC9zZGhjaS4qCiAKIFNFQ1VSRSBESUdJVEFMIEhPU1QgQ09OVFJPTExFUiBJTlRFUkZBQ0UsIE9QRU4gRklSTVdBUkUgQklORElOR1MgKFNESENJLU9GKQogTToJQW50b24gVm9yb250c292IDxhdm9yb250c292QHJ1Lm12aXN0YS5jb20+CiBMOglsaW51eHBwYy1kZXZAb3psYWJzLm9yZwotTDogICAgIGxpbnV4LW1tY0B2Z2VyLmtlcm5lbC5vcmcKK0w6CWxpbnV4LW1tY0B2Z2VyLmtlcm5lbC5vcmcKIFM6CU1haW50YWluZWQKLUY6ICAgICBkcml2ZXJzL21tYy9ob3N0L3NkaGNpLW9mLioKK0Y6CWRyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktb2YuKgogCiBTRUNVUkUgRElHSVRBTCBIT1NUIENPTlRST0xMRVIgSU5URVJGQUNFIChTREhDSSkgU0FNU1VORyBEUklWRVIKIE06CUJlbiBEb29rcyA8YmVuLWxpbnV4QGZsdWZmLm9yZz4KLUw6ICAgICBsaW51eC1tbWNAdmdlci5rZXJuZWwub3JnCitMOglsaW51eC1tbWNAdmdlci5rZXJuZWwub3JnCiBTOglNYWludGFpbmVkCiBGOglkcml2ZXJzL21tYy9ob3N0L3NkaGNpLXMzYy5jCiAKQEAgLTQ2MjIsNiArNDY3MSwxNCBAQAogRjoJaW5jbHVkZS9saW51eC9hdGEuaAogRjoJaW5jbHVkZS9saW51eC9saWJhdGEuaAogCitTRVJWRVIgRU5HSU5FUyAxMEdicHMgaVNDU0kgLSBCbGFkZUVuZ2luZSAyIERSSVZFUgorUDogICAgIEpheWFtb2hhbiBLYWxsaWNrYWwKK006ICAgICBqYXlhbW9oYW5rQHNlcnZlcmVuZ2luZXMuY29tCitMOiAgICAgbGludXgtc2NzaUB2Z2VyLmtlcm5lbC5vcmcKK1c6ICAgICBodHRwOi8vd3d3LnNlcnZlcmVuZ2luZXMuY29tCitTOiAgICAgU3VwcG9ydGVkCitGOiAgICAgZHJpdmVycy9zY3NpL2JlMmlzY3NpLworCiBTRVJWRVIgRU5HSU5FUyAxMEdicHMgTklDIC0gQmxhZGVFbmdpbmUgMiBEUklWRVIKIE06CVNhdGh5YSBQZXJsYSA8c2F0aHlhcEBzZXJ2ZXJlbmdpbmVzLmNvbT4KIE06CVN1YmJ1IFNlZXRoYXJhbWFuIDxzdWJidXNAc2VydmVyZW5naW5lcy5jb20+CkBAIC00Njc1LDggKzQ3MzIsNyBAQAogRjoJZHJpdmVycy91c2IvaG9zdC9vaGNpLWxoN2E0MCoKIAogU0lNUExFIEZJUk1XQVJFIElOVEVSRkFDRSAoU0ZJKQotUDoJTGVuIEJyb3duCi1NOglsZW5iQGtlcm5lbC5vcmcKK006CUxlbiBCcm93biA8bGVuYkBrZXJuZWwub3JnPgogTDoJc2ZpLWRldmVsQHNpbXBsZWZpcm13YXJlLm9yZwogVzoJaHR0cDovL3NpbXBsZWZpcm13YXJlLm9yZy8KIFQ6CWdpdCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvbGVuYi9saW51eC1zZmktMi42LmdpdApAQCAtNTEyNCw2ICs1MTgwLDIwIEBACiBTOglNYWludGFpbmVkCiBGOglkcml2ZXJzL2NoYXIvdHBtLwogCitUUkFDSU5HCitNOglTdGV2ZW4gUm9zdGVkdCA8cm9zdGVkdEBnb29kbWlzLm9yZz4KK006CUZyZWRlcmljIFdlaXNiZWNrZXIgPGZ3ZWlzYmVjQGdtYWlsLmNvbT4KK006CUluZ28gTW9sbmFyIDxtaW5nb0ByZWRoYXQuY29tPgorVDoJZ2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC90aXAvbGludXgtMi42LXRpcC5naXQgdHJhY2luZy9jb3JlCitTOglNYWludGFpbmVkCitGOglEb2N1bWVudGF0aW9uL3RyYWNlL2Z0cmFjZS50eHQKK0Y6CWFyY2gvKi8qLyovZnRyYWNlLmgKK0Y6CWFyY2gvKi9rZXJuZWwvZnRyYWNlLmMKK0Y6CWluY2x1ZGUvKi9mdHJhY2UuaAorRjoJaW5jbHVkZS9saW51eC90cmFjZSouaAorRjoJaW5jbHVkZS90cmFjZS8KK0Y6CWtlcm5lbC90cmFjZS8KKwogVFJJVklBTCBQQVRDSEVTCiBNOglKaXJpIEtvc2luYSA8dHJpdmlhbEBrZXJuZWwub3JnPgogVDoJZ2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9qaWtvcy90cml2aWFsLmdpdApAQCAtNTY5MCw4ICs1NzYwLDcgQEAKIEY6CWRyaXZlcnMvc2NzaS93ZDcwMDAuYwogCiBXSU5CT05EIENJUiBEUklWRVIKLVA6CURhdmlkIEjkcmRlbWFuCi1NOglkYXZpZEBoYXJkZW1hbi5udQorTToJRGF2aWQgSMOkcmRlbWFuIDxkYXZpZEBoYXJkZW1hbi5udT4KIFM6CU1haW50YWluZWQKIEY6CWRyaXZlcnMvaW5wdXQvbWlzYy93aW5ib25kLWNpci5jCiAKQEAgLTU3NDgsOSArNTgxNyw3IEBACiBGOglpbmNsdWRlL2xpbnV4L3dtOTd4eC5oCiAKIFdPTEZTT04gTUlDUk9FTEVDVFJPTklDUyBQTUlDIERSSVZFUlMKLVA6CU1hcmsgQnJvd24KLU06CWJyb29uaWVAb3BlbnNvdXJjZS53b2xmc29ubWljcm8uY29tCi1MOglsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnCitNOglNYXJrIEJyb3duIDxicm9vbmllQG9wZW5zb3VyY2Uud29sZnNvbm1pY3JvLmNvbT4KIFQ6CWdpdCBnaXQ6Ly9vcGVuc291cmNlLndvbGZzb25taWNyby5jb20vbGludXgtMi42LWF1ZGlvcGx1cwogVzoJaHR0cDovL29wZW5zb3VyY2Uud29sZnNvbm1pY3JvLmNvbS9ub2RlLzgKIFM6CVN1cHBvcnRlZApkaWZmIC0tZ2l0IGEvTWFrZWZpbGUgYi9NYWtlZmlsZQppbmRleCBmOTA4YWNjLi45NDI1ZDFkIDEwMDY0NAotLS0gYS9NYWtlZmlsZQorKysgYi9NYWtlZmlsZQpAQCAtMSw3ICsxLDcgQEAKIFZFUlNJT04gPSAyCiBQQVRDSExFVkVMID0gNgotU1VCTEVWRUwgPSAzMQotRVhUUkFWRVJTSU9OID0KK1NVQkxFVkVMID0gMzIKK0VYVFJBVkVSU0lPTiA9IC1yYzUKIE5BTUUgPSBNYW4tRWF0aW5nIFNlYWxzIG9mIEFudGlxdWl0eQogCiAjICpET0NVTUVOVEFUSU9OKgpAQCAtMTc5LDQ2ICsxNzksOSBAQAogIyBBbHRlcm5hdGl2ZWx5IENST1NTX0NPTVBJTEUgY2FuIGJlIHNldCBpbiB0aGUgZW52aXJvbm1lbnQuCiAjIERlZmF1bHQgdmFsdWUgZm9yIENST1NTX0NPTVBJTEUgaXMgbm90IHRvIHByZWZpeCBleGVjdXRhYmxlcwogIyBOb3RlOiBTb21lIGFyY2hpdGVjdHVyZXMgYXNzaWduIENST1NTX0NPTVBJTEUgaW4gdGhlaXIgYXJjaC8qL01ha2VmaWxlCi0jCi0jIFRvIGZvcmNlIEFSQ0ggYW5kIENST1NTX0NPTVBJTEUgc2V0dGluZ3MgaW5jbHVkZSBrZXJuZWwuKiBmaWxlcwotIyBpbiB0aGUga2VybmVsIHRyZWUgLSBkbyBub3QgcGF0Y2ggdGhpcyBmaWxlLgogZXhwb3J0IEtCVUlMRF9CVUlMREhPU1QgOj0gJChTVUJBUkNIKQotCi0jIEtidWlsZCBzYXZlIHRoZSBBUkNIIGFuZCBDUk9TU19DT01QSUxFIHNldHRpbmcgaW4ga2VybmVsLiogZmlsZXMuCi0jIFJlc3RvcmUgdGhlc2Ugc2V0dGluZ3MgYW5kIGNoZWNrIHRoYXQgdXNlciBkaWQgbm90IHNwZWNpZnkKLSMgY29uZmxpY3RpbmcgdmFsdWVzLgotCi1zYXZlZF9hcmNoICA6PSAkKHNoZWxsIGNhdCBpbmNsdWRlL2dlbmVyYXRlZC9rZXJuZWwuYXJjaCAgMj4gL2Rldi9udWxsKQotc2F2ZWRfY3Jvc3MgOj0gJChzaGVsbCBjYXQgaW5jbHVkZS9nZW5lcmF0ZWQva2VybmVsLmNyb3NzIDI+IC9kZXYvbnVsbCkKLQotaWZuZXEgKCQoQ1JPU1NfQ09NUElMRSksKQotICAgICAgICBpZm5lcSAoJChzYXZlZF9jcm9zcyksKQotICAgICAgICAgICAgICAgIGlmbmVxICgkKENST1NTX0NPTVBJTEUpLCQoc2F2ZWRfY3Jvc3MpKQotICAgICAgICAgICAgICAgICAgICAgICAgJChlcnJvciBDUk9TU19DT01QSUxFIGNoYW5nZWQgZnJvbSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIkKHNhdmVkX2Nyb3NzKSIgdG8gXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gIiQoQ1JPU1NfQ09NUElMRSkiLiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2UgIm1ha2UgbXJwcm9wZXIiIHRvIGZpeCBpdCB1cCkKLSAgICAgICAgICAgICAgICBlbmRpZgotICAgICAgICBlbmRpZgotZWxzZQotICAgIENST1NTX0NPTVBJTEUgOj0gJChzYXZlZF9jcm9zcykKLWVuZGlmCi0KLWlmbmVxICgkKEFSQ0gpLCkKLSAgICAgICAgaWZuZXEgKCQoc2F2ZWRfYXJjaCksKQotICAgICAgICAgICAgICAgIGlmbmVxICgkKHNhdmVkX2FyY2gpLCQoQVJDSCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAkKGVycm9yIEFSQ0ggY2hhbmdlZCBmcm9tIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiQoc2F2ZWRfYXJjaCkiIHRvICIkKEFSQ0gpIi4gXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlICJtYWtlIG1ycHJvcGVyIiB0byBmaXggaXQgdXApCi0gICAgICAgICAgICAgICAgZW5kaWYKLSAgICAgICAgZW5kaWYKLWVsc2UKLSAgICAgICAgaWZuZXEgKCQoc2F2ZWRfYXJjaCksKQotICAgICAgICAgICAgICAgIEFSQ0ggOj0gJChzYXZlZF9hcmNoKQotICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgQVJDSCA6PSAkKFNVQkFSQ0gpCi0gICAgICAgIGVuZGlmCi1lbmRpZgorQVJDSAkJPz0gJChTVUJBUkNIKQorQ1JPU1NfQ09NUElMRQk/PQogCiAjIEFyY2hpdGVjdHVyZSBhcyBwcmVzZW50IGluIGNvbXBpbGUuaAogVVRTX01BQ0hJTkUgCTo9ICQoQVJDSCkKQEAgLTQ4MywxMSArNDQ2LDYgQEAKIGluY2x1ZGUgJChzcmN0cmVlKS9hcmNoLyQoU1JDQVJDSCkvTWFrZWZpbGUKIGV4cG9ydCBLQlVJTERfREVGQ09ORklHIEtCVUlMRF9LQ09ORklHCiAKLSMgc2F2ZSBBUkNIICYgQ1JPU1NfQ09NUElMRSBzZXR0aW5ncwotJChzaGVsbCBta2RpciAtcCBpbmNsdWRlL2dlbmVyYXRlZCAmJiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGVjaG8gJChBUkNIKSAgICAgICAgICA+IGluY2x1ZGUvZ2VuZXJhdGVkL2tlcm5lbC5hcmNoICYmIFwKLSAgICAgICAgZWNobyAkKENST1NTX0NPTVBJTEUpID4gaW5jbHVkZS9nZW5lcmF0ZWQva2VybmVsLmNyb3NzKQotCiBjb25maWc6IHNjcmlwdHNfYmFzaWMgb3V0cHV0bWFrZWZpbGUgRk9SQ0UKIAkkKFEpbWtkaXIgLXAgaW5jbHVkZS9saW51eCBpbmNsdWRlL2NvbmZpZwogCSQoUSkkKE1BS0UpICQoYnVpbGQpPXNjcmlwdHMva2NvbmZpZyAkQApkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvaW5pdF90YXNrLmMgYi9hcmNoL2FscGhhL2tlcm5lbC9pbml0X3Rhc2suYwppbmRleCAxOWI4NjMyLi42ZjgwY2E0IDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC9pbml0X3Rhc2suYworKysgYi9hcmNoL2FscGhhL2tlcm5lbC9pbml0X3Rhc2suYwpAQCAtMTMsNiArMTMsNSBAQAogc3RydWN0IHRhc2tfc3RydWN0IGluaXRfdGFzayA9IElOSVRfVEFTSyhpbml0X3Rhc2spOwogRVhQT1JUX1NZTUJPTChpbml0X3Rhc2spOwogCi11bmlvbiB0aHJlYWRfdW5pb24gaW5pdF90aHJlYWRfdW5pb24KLQlfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCIuZGF0YS5pbml0X3RocmVhZCIpKSkKLQk9IHsgSU5JVF9USFJFQURfSU5GTyhpbml0X3Rhc2spIH07Cit1bmlvbiB0aHJlYWRfdW5pb24gaW5pdF90aHJlYWRfdW5pb24gX19pbml0X3Rhc2tfZGF0YSA9CisJeyBJTklUX1RIUkVBRF9JTkZPKGluaXRfdGFzaykgfTsKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL3ZtbGludXgubGRzLlMgYi9hcmNoL2FscGhhL2tlcm5lbC92bWxpbnV4Lmxkcy5TCmluZGV4IDZkYzAzYzMuLjAwM2VmNGMgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEva2VybmVsL3ZtbGludXgubGRzLlMKKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvdm1saW51eC5sZHMuUwpAQCAtMSw0ICsxLDUgQEAKICNpbmNsdWRlIDxhc20tZ2VuZXJpYy92bWxpbnV4Lmxkcy5oPgorI2luY2x1ZGUgPGFzbS90aHJlYWRfaW5mby5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAKIE9VVFBVVF9GT1JNQVQoImVsZjY0LWFscGhhIikKQEAgLTMxLDg4ICszMiwyMSBAQAogCX0gOmtlcm5lbAogCiAJUk9EQVRBCi0KLQkvKiBFeGNlcHRpb24gdGFibGUgKi8KLQkuID0gQUxJR04oMTYpOwotCV9fZXhfdGFibGUgOiB7Ci0JCV9fc3RhcnRfX19leF90YWJsZSA9IC47Ci0JCSooX19leF90YWJsZSkKLQkJX19zdG9wX19fZXhfdGFibGUgPSAuOwotCX0KKwlFWENFUFRJT05fVEFCTEUoMTYpCiAKIAkvKiBXaWxsIGJlIGZyZWVkIGFmdGVyIGluaXQgKi8KLQkuID0gQUxJR04oUEFHRV9TSVpFKTsKLQkvKiBJbml0IGNvZGUgYW5kIGRhdGEgKi8KLQlfX2luaXRfYmVnaW4gPSAuOwotCS5pbml0LnRleHQgOiB7Ci0JCV9zaW5pdHRleHQgPSAuOwotCQlJTklUX1RFWFQKLQkJX2Vpbml0dGV4dCA9IC47Ci0JfQotCS5pbml0LmRhdGEgOiB7Ci0JCUlOSVRfREFUQQotCX0KLQotCS4gPSBBTElHTigxNik7Ci0JLmluaXQuc2V0dXAgOiB7Ci0JCV9fc2V0dXBfc3RhcnQgPSAuOwotCQkqKC5pbml0LnNldHVwKQotCQlfX3NldHVwX2VuZCA9IC47Ci0JfQotCi0JLiA9IEFMSUdOKDgpOwotCS5pbml0Y2FsbC5pbml0IDogewotCQlfX2luaXRjYWxsX3N0YXJ0ID0gLjsKLQkJSU5JVENBTExTCi0JCV9faW5pdGNhbGxfZW5kID0gLjsKLQl9Ci0KLSNpZmRlZiBDT05GSUdfQkxLX0RFVl9JTklUUkQKLQkuID0gQUxJR04oUEFHRV9TSVpFKTsKLQkuaW5pdC5yYW1mcyA6IHsKLQkJX19pbml0cmFtZnNfc3RhcnQgPSAuOwotCQkqKC5pbml0LnJhbWZzKQotCQlfX2luaXRyYW1mc19lbmQgPSAuOwotCX0KLSNlbmRpZgotCi0JLiA9IEFMSUdOKDgpOwotCS5jb25faW5pdGNhbGwuaW5pdCA6IHsKLQkJX19jb25faW5pdGNhbGxfc3RhcnQgPSAuOwotCQkqKC5jb25faW5pdGNhbGwuaW5pdCkKLQkJX19jb25faW5pdGNhbGxfZW5kID0gLjsKLQl9Ci0KLQkuID0gQUxJR04oOCk7Ci0JU0VDVVJJVFlfSU5JVAotCisJX19pbml0X2JlZ2luID0gQUxJR04oUEFHRV9TSVpFKTsKKwlJTklUX1RFWFRfU0VDVElPTihQQUdFX1NJWkUpCisJSU5JVF9EQVRBX1NFQ1RJT04oMTYpCiAJUEVSQ1BVKFBBR0VfU0laRSkKLQotCS4gPSBBTElHTigyICogUEFHRV9TSVpFKTsKKwkvKiBBbGlnbiB0byBUSFJFQURfU0laRSByYXRoZXIgdGhhbiBQQUdFX1NJWkUgaGVyZSBzbyBhbnkgcGFkZGluZyBwYWdlCisJICAgbmVlZGVkIGZvciB0aGUgVEhSRUFEX1NJWkUgYWxpZ25lZCBpbml0X3Rhc2sgZ2V0cyBmcmVlZCBhZnRlciBpbml0ICovCisJLiA9IEFMSUdOKFRIUkVBRF9TSVpFKTsKIAlfX2luaXRfZW5kID0gLjsKIAkvKiBGcmVlZCBhZnRlciBpbml0IGVuZHMgaGVyZSAqLwogCi0JLyogTm90ZSAyIHBhZ2UgYWxpZ25tZW50IGFib3ZlLiAgKi8KLQkuZGF0YS5pbml0X3RocmVhZCA6IHsKLQkJKiguZGF0YS5pbml0X3RocmVhZCkKLQl9Ci0KLQkuID0gQUxJR04oUEFHRV9TSVpFKTsKLQkuZGF0YS5wYWdlX2FsaWduZWQgOiB7Ci0JCSooLmRhdGEucGFnZV9hbGlnbmVkKQotCX0KLQotCS4gPSBBTElHTig2NCk7Ci0JLmRhdGEuY2FjaGVsaW5lX2FsaWduZWQgOiB7Ci0JCSooLmRhdGEuY2FjaGVsaW5lX2FsaWduZWQpCi0JfQotCiAJX2RhdGEgPSAuOwotCS8qIERhdGEgKi8KLQkuZGF0YSA6IHsKLQkJREFUQV9EQVRBCi0JCUNPTlNUUlVDVE9SUwotCX0KKwlSV19EQVRBX1NFQ1RJT04oNjQsIFBBR0VfU0laRSwgVEhSRUFEX1NJWkUpCiAKIAkuZ290IDogewogCQkqKC5nb3QpCkBAIC0xMjIsMTYgKzU2LDcgQEAKIAl9CiAJX2VkYXRhID0gLjsJLyogRW5kIG9mIGRhdGEgc2VjdGlvbiAqLwogCi0JX19ic3Nfc3RhcnQgPSAuOwotCS5zYnNzIDogewotCQkqKC5zYnNzKQotCQkqKC5zY29tbW9uKQotCX0KLQkuYnNzIDogewotCQkqKC5ic3MpCi0JCSooQ09NTU9OKQotCX0KLQlfX2Jzc19zdG9wID0gLjsKKwlCU1NfU0VDVElPTigwLCAwLCAwKQogCV9lbmQgPSAuOwogCiAJLm1kZWJ1ZyAwIDogewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vS2NvbmZpZyBiL2FyY2gvYXJtL0tjb25maWcKaW5kZXggZDc3OGE2OS4uMWM0MTE5YyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vS2NvbmZpZworKysgYi9hcmNoL2FybS9LY29uZmlnCkBAIC00Niw2ICs0NiwxMCBAQAogCWRlcGVuZHMgb24gR0VORVJJQ19DTE9DS0VWRU5UUwogCWRlZmF1bHQgeSBpZiBTTVAgJiYgIUxPQ0FMX1RJTUVSUwogCitjb25maWcgSEFWRV9UQ00KKwlib29sCisJc2VsZWN0IEdFTkVSSUNfQUxMT0NBVE9SCisKIGNvbmZpZyBOT19JT1BPUlQKIAlib29sCiAKQEAgLTY0OSw2ICs2NTMsNyBAQAogCWJvb2wgIlNULUVyaWNzc29uIFUzMDAgU2VyaWVzIgogCWRlcGVuZHMgb24gTU1VCiAJc2VsZWN0IENQVV9BUk05MjZUCisJc2VsZWN0IEhBVkVfVENNCiAJc2VsZWN0IEFSTV9BTUJBCiAJc2VsZWN0IEFSTV9WSUMKIAlzZWxlY3QgR0VORVJJQ19USU1FCmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb21tb24vbG9jb21vLmMgYi9hcmNoL2FybS9jb21tb24vbG9jb21vLmMKaW5kZXggMjI5M2YwYy4uYmQzNmM3NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29tbW9uL2xvY29tby5jCisrKyBiL2FyY2gvYXJtL2NvbW1vbi9sb2NvbW8uYwpAQCAtODY1LDYgKzg2NSw3IEBACiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsY2hpcC0+bG9jaywgZmxhZ3MpOwogfQorRVhQT1JUX1NZTUJPTChsb2NvbW9fZ3Bpb19zZXRfZGlyKTsKIAogaW50IGxvY29tb19ncGlvX3JlYWRfbGV2ZWwoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgYml0cykKIHsKQEAgLTg4Miw2ICs4ODMsNyBAQAogCXJldCAmPSBiaXRzOwogCXJldHVybiByZXQ7CiB9CitFWFBPUlRfU1lNQk9MKGxvY29tb19ncGlvX3JlYWRfbGV2ZWwpOwogCiBpbnQgbG9jb21vX2dwaW9fcmVhZF9vdXRwdXQoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgYml0cykKIHsKQEAgLTg5OSw2ICs5MDEsNyBAQAogCXJldCAmPSBiaXRzOwogCXJldHVybiByZXQ7CiB9CitFWFBPUlRfU1lNQk9MKGxvY29tb19ncGlvX3JlYWRfb3V0cHV0KTsKIAogdm9pZCBsb2NvbW9fZ3Bpb193cml0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBiaXRzLCB1bnNpZ25lZCBpbnQgc2V0KQogewpAQCAtOTIwLDYgKzkyMyw3IEBACiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsY2hpcC0+bG9jaywgZmxhZ3MpOwogfQorRVhQT1JUX1NZTUJPTChsb2NvbW9fZ3Bpb193cml0ZSk7CiAKIHN0YXRpYyB2b2lkIGxvY29tb19tNjIzMzJfc2VuZGJpdCh2b2lkICptYXBiYXNlLCBpbnQgYml0KQogewpAQCAtMTA4NCwxMyArMTA4OCwxMiBAQAogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbGNoaXAtPmxvY2ssIGZsYWdzKTsKIH0KK0VYUE9SVF9TWU1CT0wobG9jb21vX202MjMzMl9zZW5kZGF0YSk7CiAKIC8qCiAgKglGcm9udGxpZ2h0IGNvbnRyb2wKICAqLwogCi1zdGF0aWMgc3RydWN0IGxvY29tbyAqbG9jb21vX2NoaXBfZHJpdmVyKHN0cnVjdCBsb2NvbW9fZGV2ICpsZGV2KTsKLQogdm9pZCBsb2NvbW9fZnJvbnRsaWdodF9zZXQoc3RydWN0IGxvY29tb19kZXYgKmRldiwgaW50IGR1dHksIGludCB2ciwgaW50IGJwd2YpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTExODIsMTEgKzExODUsMTMgQEAKIAlkcml2ZXItPmRydi5idXMgPSAmbG9jb21vX2J1c190eXBlOwogCXJldHVybiBkcml2ZXJfcmVnaXN0ZXIoJmRyaXZlci0+ZHJ2KTsKIH0KK0VYUE9SVF9TWU1CT0wobG9jb21vX2RyaXZlcl9yZWdpc3Rlcik7CiAKIHZvaWQgbG9jb21vX2RyaXZlcl91bnJlZ2lzdGVyKHN0cnVjdCBsb2NvbW9fZHJpdmVyICpkcml2ZXIpCiB7CiAJZHJpdmVyX3VucmVnaXN0ZXIoJmRyaXZlci0+ZHJ2KTsKIH0KK0VYUE9SVF9TWU1CT0wobG9jb21vX2RyaXZlcl91bnJlZ2lzdGVyKTsKIAogc3RhdGljIGludCBfX2luaXQgbG9jb21vX2luaXQodm9pZCkKIHsKQEAgLTEyMDgsMTEgKzEyMTMsMyBAQAogTU9EVUxFX0RFU0NSSVBUSU9OKCJTaGFycCBMb0NvTW8gY29yZSBkcml2ZXIiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9BVVRIT1IoIkpvaG4gTGVueiA8bGVuekBjcy53aXNjLmVkdT4iKTsKLQotRVhQT1JUX1NZTUJPTChsb2NvbW9fZHJpdmVyX3JlZ2lzdGVyKTsKLUVYUE9SVF9TWU1CT0wobG9jb21vX2RyaXZlcl91bnJlZ2lzdGVyKTsKLUVYUE9SVF9TWU1CT0wobG9jb21vX2dwaW9fc2V0X2Rpcik7Ci1FWFBPUlRfU1lNQk9MKGxvY29tb19ncGlvX3JlYWRfbGV2ZWwpOwotRVhQT1JUX1NZTUJPTChsb2NvbW9fZ3Bpb19yZWFkX291dHB1dCk7Ci1FWFBPUlRfU1lNQk9MKGxvY29tb19ncGlvX3dyaXRlKTsKLUVYUE9SVF9TWU1CT0wobG9jb21vX202MjMzMl9zZW5kZGF0YSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb21tb24vc2ExMTExLmMgYi9hcmNoL2FybS9jb21tb24vc2ExMTExLmMKaW5kZXggZWYxMjc5NC4uOGJhNzA0NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29tbW9uL3NhMTExMS5jCisrKyBiL2FyY2gvYXJtL2NvbW1vbi9zYTExMTEuYwpAQCAtMTAzMiw2ICsxMDMyLDcgQEAKIAogCXJldHVybiBfX3NhMTExMV9wbGxfY2xvY2soc2FjaGlwKTsKIH0KK0VYUE9SVF9TWU1CT0woc2ExMTExX3BsbF9jbG9jayk7CiAKIC8qKgogICoJc2ExMTExX3NlbGVjdF9hdWRpb19tb2RlIC0gc2VsZWN0IEkyUyBvciBBQyBsaW5rIG1vZGUKQEAgLTEwNTksNiArMTA2MCw3IEBACiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzYWNoaXAtPmxvY2ssIGZsYWdzKTsKIH0KK0VYUE9SVF9TWU1CT0woc2ExMTExX3NlbGVjdF9hdWRpb19tb2RlKTsKIAogLyoqCiAgKglzYTExMTFfc2V0X2F1ZGlvX3JhdGUgLSBzZXQgdGhlIGF1ZGlvIHNhbXBsZSByYXRlCkBAIC0xMDgzLDYgKzEwODUsNyBAQAogCiAJcmV0dXJuIDA7CiB9CitFWFBPUlRfU1lNQk9MKHNhMTExMV9zZXRfYXVkaW9fcmF0ZSk7CiAKIC8qKgogICoJc2ExMTExX2dldF9hdWRpb19yYXRlIC0gZ2V0IHRoZSBhdWRpbyBzYW1wbGUgcmF0ZQpAQCAtMTEwMCw2ICsxMTAzLDcgQEAKIAogCXJldHVybiBfX3NhMTExMV9wbGxfY2xvY2soc2FjaGlwKSAvICgyNTYgKiBkaXYpOwogfQorRVhQT1JUX1NZTUJPTChzYTExMTFfZ2V0X2F1ZGlvX3JhdGUpOwogCiB2b2lkIHNhMTExMV9zZXRfaW9fZGlyKHN0cnVjdCBzYTExMTFfZGV2ICpzYWRldiwKIAkJICAgICAgIHVuc2lnbmVkIGludCBiaXRzLCB1bnNpZ25lZCBpbnQgZGlyLApAQCAtMTEyOCw2ICsxMTMyLDcgQEAKIAlNT0RJRllfQklUUyhncGlvICsgU0ExMTExX0dQSU9fUENTRFIsIChiaXRzID4+IDE2KSAmIDI1NSwgc2xlZXBfZGlyID4+IDE2KTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzYWNoaXAtPmxvY2ssIGZsYWdzKTsKIH0KK0VYUE9SVF9TWU1CT0woc2ExMTExX3NldF9pb19kaXIpOwogCiB2b2lkIHNhMTExMV9zZXRfaW8oc3RydWN0IHNhMTExMV9kZXYgKnNhZGV2LCB1bnNpZ25lZCBpbnQgYml0cywgdW5zaWduZWQgaW50IHYpCiB7CkBAIC0xMTQyLDYgKzExNDcsNyBAQAogCU1PRElGWV9CSVRTKGdwaW8gKyBTQTExMTFfR1BJT19QQ0RXUiwgKGJpdHMgPj4gMTYpICYgMjU1LCB2ID4+IDE2KTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzYWNoaXAtPmxvY2ssIGZsYWdzKTsKIH0KK0VYUE9SVF9TWU1CT0woc2ExMTExX3NldF9pbyk7CiAKIHZvaWQgc2ExMTExX3NldF9zbGVlcF9pbyhzdHJ1Y3Qgc2ExMTExX2RldiAqc2FkZXYsIHVuc2lnbmVkIGludCBiaXRzLCB1bnNpZ25lZCBpbnQgdikKIHsKQEAgLTExNTYsNiArMTE2Miw3IEBACiAJTU9ESUZZX0JJVFMoZ3BpbyArIFNBMTExMV9HUElPX1BDU1NSLCAoYml0cyA+PiAxNikgJiAyNTUsIHYgPj4gMTYpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNhY2hpcC0+bG9jaywgZmxhZ3MpOwogfQorRVhQT1JUX1NZTUJPTChzYTExMTFfc2V0X3NsZWVwX2lvKTsKIAogLyoKICAqIEluZGl2aWR1YWwgZGV2aWNlIG9wZXJhdGlvbnMuCkBAIC0xMTc2LDYgKzExODMsNyBAQAogCXNhMTExMV93cml0ZWwodmFsIHwgc2FkZXYtPnNrcGNyX21hc2ssIHNhY2hpcC0+YmFzZSArIFNBMTExMV9TS1BDUik7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2FjaGlwLT5sb2NrLCBmbGFncyk7CiB9CitFWFBPUlRfU1lNQk9MKHNhMTExMV9lbmFibGVfZGV2aWNlKTsKIAogLyoqCiAgKglzYTExMTFfZGlzYWJsZV9kZXZpY2UgLSBkaXNhYmxlIGFuIG9uLWNoaXAgU0ExMTExIGZ1bmN0aW9uIGJsb2NrCkBAIC0xMTkyLDYgKzEyMDAsNyBAQAogCXNhMTExMV93cml0ZWwodmFsICYgfnNhZGV2LT5za3Bjcl9tYXNrLCBzYWNoaXAtPmJhc2UgKyBTQTExMTFfU0tQQ1IpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNhY2hpcC0+bG9jaywgZmxhZ3MpOwogfQorRVhQT1JUX1NZTUJPTChzYTExMTFfZGlzYWJsZV9kZXZpY2UpOwogCiAvKgogICoJU0ExMTExICJSZWdpc3RlciBBY2Nlc3MgQnVzLiIKQEAgLTEyNTksMTcgKzEyNjgsMjAgQEAKIAkuc3VzcGVuZAk9IHNhMTExMV9idXNfc3VzcGVuZCwKIAkucmVzdW1lCQk9IHNhMTExMV9idXNfcmVzdW1lLAogfTsKK0VYUE9SVF9TWU1CT0woc2ExMTExX2J1c190eXBlKTsKIAogaW50IHNhMTExMV9kcml2ZXJfcmVnaXN0ZXIoc3RydWN0IHNhMTExMV9kcml2ZXIgKmRyaXZlcikKIHsKIAlkcml2ZXItPmRydi5idXMgPSAmc2ExMTExX2J1c190eXBlOwogCXJldHVybiBkcml2ZXJfcmVnaXN0ZXIoJmRyaXZlci0+ZHJ2KTsKIH0KK0VYUE9SVF9TWU1CT0woc2ExMTExX2RyaXZlcl9yZWdpc3Rlcik7CiAKIHZvaWQgc2ExMTExX2RyaXZlcl91bnJlZ2lzdGVyKHN0cnVjdCBzYTExMTFfZHJpdmVyICpkcml2ZXIpCiB7CiAJZHJpdmVyX3VucmVnaXN0ZXIoJmRyaXZlci0+ZHJ2KTsKIH0KK0VYUE9SVF9TWU1CT0woc2ExMTExX2RyaXZlcl91bnJlZ2lzdGVyKTsKIAogc3RhdGljIGludCBfX2luaXQgc2ExMTExX2luaXQodm9pZCkKIHsKQEAgLTEyOTAsMTYgKzEzMDIsMyBAQAogCiBNT0RVTEVfREVTQ1JJUFRJT04oIkludGVsIENvcnBvcmF0aW9uIFNBMTExMSBjb3JlIGRyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCi1FWFBPUlRfU1lNQk9MKHNhMTExMV9zZWxlY3RfYXVkaW9fbW9kZSk7Ci1FWFBPUlRfU1lNQk9MKHNhMTExMV9zZXRfYXVkaW9fcmF0ZSk7Ci1FWFBPUlRfU1lNQk9MKHNhMTExMV9nZXRfYXVkaW9fcmF0ZSk7Ci1FWFBPUlRfU1lNQk9MKHNhMTExMV9zZXRfaW9fZGlyKTsKLUVYUE9SVF9TWU1CT0woc2ExMTExX3NldF9pbyk7Ci1FWFBPUlRfU1lNQk9MKHNhMTExMV9zZXRfc2xlZXBfaW8pOwotRVhQT1JUX1NZTUJPTChzYTExMTFfZW5hYmxlX2RldmljZSk7Ci1FWFBPUlRfU1lNQk9MKHNhMTExMV9kaXNhYmxlX2RldmljZSk7Ci1FWFBPUlRfU1lNQk9MKHNhMTExMV9wbGxfY2xvY2spOwotRVhQT1JUX1NZTUJPTChzYTExMTFfYnVzX3R5cGUpOwotRVhQT1JUX1NZTUJPTChzYTExMTFfZHJpdmVyX3JlZ2lzdGVyKTsKLUVYUE9SVF9TWU1CT0woc2ExMTExX2RyaXZlcl91bnJlZ2lzdGVyKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbW1vbi92aWMuYyBiL2FyY2gvYXJtL2NvbW1vbi92aWMuYwppbmRleCA5MjBjZWQwLi5mMjMyOTQxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb21tb24vdmljLmMKKysrIGIvYXJjaC9hcm0vY29tbW9uL3ZpYy5jCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvYW1iYS9idXMuaD4KIAogI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9oMzYwMF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2gzNjAwX2RlZmNvbmZpZwppbmRleCAxNTAyOTU3Li5mNmFlZDc3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2gzNjAwX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2gzNjAwX2RlZmNvbmZpZwpAQCAtOTAsNyArOTAsNiBAQAogIyBDT05GSUdfU0ExMTAwX0NPTExJRSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQTExMDBfSDMxMDAgaXMgbm90IHNldAogQ09ORklHX1NBMTEwMF9IMzYwMD15Ci1DT05GSUdfU0ExMTAwX0gzWFhYPXkKICMgQ09ORklHX1NBMTEwMF9CQURHRTQgaXMgbm90IHNldAogIyBDT05GSUdfU0ExMTAwX0pPUk5BREE3MjAgaXMgbm90IHNldAogIyBDT05GSUdfU0ExMTAwX0hBQ0tLSVQgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9pb3AzM3hfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9pb3AzM3hfZGVmY29uZmlnCmluZGV4IGVlYzQ4ODIuLmVkMmQ1OWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvaW9wMzN4X2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2lvcDMzeF9kZWZjb25maWcKQEAgLTEsMjkgKzEsMjYgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNC1yYzUKLSMgV2VkIERlYyAxMiAxNjoxMToyNyAyMDA3CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM2CisjIFR1ZSBBdWcgMTggMTM6NDE6NDEgMjAwOQogIwogQ09ORklHX0FSTT15CiBDT05GSUdfU1lTX1NVUFBPUlRTX0FQTV9FTVVMQVRJT049eQotIyBDT05GSUdfR0VORVJJQ19HUElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dFTkVSSUNfVElNRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0dQSU89eQogQ09ORklHX01NVT15Ci0jIENPTkZJR19OT19JT1BPUlQgaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CitDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQogQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CiBDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CiBDT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CiBDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15Ci0jIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQogQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKLUNPTkZJR19aT05FX0RNQT15CitDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKIENPTkZJR19WRUNUT1JTX0JBU0U9MHhmZmZmMDAwMAogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKQEAgLTQwLDIxICszNywzOSBAQAogQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1Q9eQogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVF9WMyBpcyBub3Qgc2V0CiAjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVVNFUl9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSURfTlMgaXMgbm90IHNldAogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorCisjCisjIFJDVSBTdWJzeXN0ZW0KKyMKKyMgQ09ORklHX0NMQVNTSUNfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAorIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKKyMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKICMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAotQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQ9eQotQ09ORklHX0ZBSVJfVVNFUl9TQ0hFRD15Ci0jIENPTkZJR19GQUlSX0NHUk9VUF9TQ0hFRCBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CisjIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKK0NPTkZJR19OQU1FU1BBQ0VTPXkKKyMgQ09ORklHX1VUU19OUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUENfTlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNFUl9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19QSURfTlMgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX05TIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorQ09ORklHX1JEX0daSVA9eQorQ09ORklHX1JEX0JaSVAyPXkKK0NPTkZJR19SRF9MWk1BPXkKIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CiBDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CiAjIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0CiBDT05GSUdfVUlEMTY9eQogQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKQEAgLTY3LDI5ICs4Miw0OCBAQAogQ09ORklHX0VMRl9DT1JFPXkKIENPTkZJR19CQVNFX0ZVTEw9eQogQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19USU1FUkZEPXkKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CitDT05GSUdfQUlPPXkKKworIworIyBQZXJmb3JtYW5jZSBDb3VudGVycworIwogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19QQ0lfUVVJUktTPXkKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKK0NPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9PUFJPRklMRT15CisjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0tQUk9CRVM9eQorQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCisjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAorQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQorQ09ORklHX1NMQUJJTkZPPXkKIENPTkZJR19SVF9NVVRFWEVTPXkKLSMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MAogQ09ORklHX01PRFVMRVM9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQogIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0CiAjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAotQ09ORklHX0tNT0Q9eQogQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CitDT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCiAjCiAjIElPIFNjaGVkdWxlcnMKQEAgLTEwMyw2ICsxMzcsNyBAQAogQ09ORklHX0RFRkFVTFRfQ0ZRPXkKICMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCisjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKIAogIwogIyBTeXN0ZW0gVHlwZQpAQCAtMTEyLDE1ICsxNDcsMTUgQEAKICMgQ09ORklHX0FSQ0hfUkVBTFZJRVcgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9BVDkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ0xQUzc1MDAgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NPMjg1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfR0VNSU5JIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0VQOTNYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9NWEMgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TVE1QM1hYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX05FVFggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lNWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lPUDEzWFggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9JT1AzMlggaXMgbm90IHNldAogQ09ORklHX0FSQ0hfSU9QMzNYPXkKQEAgLTEyOCwxOSArMTYzLDI2IEBACiAjIENPTkZJR19BUkNIX0lYUDIwMDAgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0tJUktXT09EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTE9LSSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX01WNzhYWDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9PUklPTjVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTU1QIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfS1M4Njk1IGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfTlM5WFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTVhDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfVzkwWDkwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1BOWDQwMDggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9QWEEgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9NU00gaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9TQTExMDAgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9TM0MyNDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUzNDNjRYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1NIQVJLIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfTEg3QTQwWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1UzMDAgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9EQVZJTkNJIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfT01BUCBpcyBub3Qgc2V0Ci1DT05GSUdfSU9QM1hYX0FUVT15CiAKICMKICMgSU9QMzN4IEltcGxlbWVudGF0aW9uIE9wdGlvbnMKQEAgLTE1MSwxNCArMTkzLDYgQEAKICMKIENPTkZJR19BUkNIX0lRODAzMzE9eQogQ09ORklHX01BQ0hfSVE4MDMzMj15Ci0KLSMKLSMgQm9vdCBvcHRpb25zCi0jCi0KLSMKLSMgUG93ZXIgbWFuYWdlbWVudAotIwogQ09ORklHX1BMQVRfSU9QPXkKIAogIwpAQCAtMTY4LDYgKzIwMiw3IEBACiBDT05GSUdfQ1BVX1hTQ0FMRT15CiBDT05GSUdfQ1BVXzMydjU9eQogQ09ORklHX0NQVV9BQlJUX0VWNVQ9eQorQ09ORklHX0NQVV9QQUJSVF9OT0lGQVI9eQogQ09ORklHX0NQVV9DQUNIRV9WSVZUPXkKIENPTkZJR19DUFVfVExCX1Y0V0JJPXkKIENPTkZJR19DUFVfQ1AxNT15CkBAIC0xNzgsNyArMjEzLDYgQEAKICMKICMgQ09ORklHX0FSTV9USFVNQiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAotIyBDT05GSUdfT1VURVJfQ0FDSEUgaXMgbm90IHNldAogIyBDT05GSUdfSVdNTVhUIGlzIG5vdCBzZXQKIENPTkZJR19YU0NBTEVfUE1VPXkKIApAQCAtMTkwLDQxICsyMjQsNTUgQEAKICMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKIENPTkZJR19QQ0lfTEVHQUNZPXkKICMgQ09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lfU1RVQiBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lfSU9WIGlzIG5vdCBzZXQKICMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CiAKICMKICMgS2VybmVsIEZlYXR1cmVzCiAjCi0jIENPTkZJR19USUNLX09ORVNIT1QgaXMgbm90IHNldAorQ09ORklHX1ZNU1BMSVRfM0c9eQorIyBDT05GSUdfVk1TUExJVF8yRyBpcyBub3Qgc2V0CisjIENPTkZJR19WTVNQTElUXzFHIGlzIG5vdCBzZXQKK0NPTkZJR19QQUdFX09GRlNFVD0weEMwMDAwMDAwCiAjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKIENPTkZJR19IWj0xMDAKICMgQ09ORklHX0FFQUJJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRElTQ09OVElHTUVNX0VOQUJMRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NQQVJTRU1FTV9ERUZBVUxUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU0VMRUNUX01FTU9SWV9NT0RFTCBpcyBub3Qgc2V0CisjIENPTkZJR19ISUdITUVNIGlzIG5vdCBzZXQKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKIENPTkZJR19GTEFUTUVNX01BTlVBTD15CiAjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAogQ09ORklHX0ZMQVRNRU09eQogQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLSMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAotIyBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVBfRU5BQkxFIGlzIG5vdCBzZXQKK0NPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQwOTYKLSMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfWk9ORV9ETUFfRkxBRz0xCi1DT05GSUdfQk9VTkNFPXkKKyMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19aT05FX0RNQV9GTEFHPTAKIENPTkZJR19WSVJUX1RPX0JVUz15CitDT05GSUdfSEFWRV9NTE9DSz15CitDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKK0NPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKKyMgQ09ORklHX1VBQ0NFU1NfV0lUSF9NRU1DUFkgaXMgbm90IHNldAogCiAjCiAjIEJvb3Qgb3B0aW9ucwogIwogQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MAogQ09ORklHX1pCT09UX1JPTV9CU1M9MHgwCi1DT05GSUdfQ01ETElORT0iY29uc29sZT10dHlTMCwxMTUyMDAgcm9vdD0vZGV2L25mcyBpcD1ib290cCBjYWNoZXBvbGljeT13cml0ZWFsbG9jIgorQ09ORklHX0NNRExJTkU9ImNvbnNvbGU9dHR5UzAsMTE1MjAwIHJvb3Q9L2Rldi9uZnMgaXA9Ym9vdHAgY2FjaGVwb2xpY3k9d3JpdGVhbGxvYyBpb3AzeHhfaW5pdF9hdHU9eSIKICMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAogIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAogCiAjCisjIENQVSBQb3dlciBNYW5hZ2VtZW50CisjCisjIENPTkZJR19DUFVfSURMRSBpcyBub3Qgc2V0CisKKyMKICMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCiAjCiAKQEAgLTIzOSw2ICsyODcsOCBAQAogIyBVc2Vyc3BhY2UgYmluYXJ5IGZvcm1hdHMKICMKIENPTkZJR19CSU5GTVRfRUxGPXkKKyMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0FPVVQ9eQogQ09ORklHX0JJTkZNVF9BT1VUPXkKICMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSVEhVUiBpcyBub3Qgc2V0CkBAIC0yNDcsMTEgKzI5Nyw3IEBACiAjIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucwogIwogIyBDT05GSUdfUE0gaXMgbm90IHNldAotQ09ORklHX1NVU1BFTkRfVVBfUE9TU0lCTEU9eQotCi0jCi0jIE5ldHdvcmtpbmcKLSMKK0NPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQogQ09ORklHX05FVD15CiAKICMKQEAgLTI2NCw2ICszMTAsNyBAQAogIyBDT05GSUdfWEZSTV9VU0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQogQ09ORklHX0lQX01VTFRJQ0FTVD15CkBAIC0zMTAsNiArMzU3LDcgQEAKICMgQ09ORklHX0lQVjZfU0lUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjZfVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjZfTVVMVElQTEVfVEFCTEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjZfTVJPVVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CkBAIC0zMTcsNiArMzY1LDcgQEAKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAogIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xMQzIgaXMgbm90IHNldApAQCAtMzI2LDI0ICszNzUsMzEgQEAKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxNTQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CiAKICMKICMgTmV0d29yayB0ZXN0aW5nCiAjCiAjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKK0NPTkZJR19XSVJFTEVTUz15CisjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWSBpcyBub3Qgc2V0CisjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAorIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldAogCiAjCi0jIFdpcmVsZXNzCisjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi0jIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAotIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKKyMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAogCkBAIC0zNTcsNyArNDEzLDkgQEAKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15Ci0jIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAorQ09ORklHX0ZXX0xPQURFUj15CitDT05GSUdfRklSTVdBUkVfSU5fS0VSTkVMPXkKK0NPTkZJR19FWFRSQV9GSVJNV0FSRT0iIgogIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CkBAIC0zNjYsMTIgKzQyNCwxNCBAQAogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAogQ09ORklHX01URF9QQVJUSVRJT05TPXkKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1JFREJPT1RfUEFSVFM9eQogQ09ORklHX01URF9SRURCT09UX0RJUkVDVE9SWV9CTE9DSz0tMQogQ09ORklHX01URF9SRURCT09UX1BBUlRTX1VOQUxMT0NBVEVEPXkKIENPTkZJR19NVERfUkVEQk9PVF9QQVJUU19SRUFET05MWT15CiAjIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQUZTX1BBUlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldAogCiAjCiAjIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCkBAIC00MjEsOSArNDgxLDcgQEAKICMKICMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEhZU01BUD15Ci1DT05GSUdfTVREX1BIWVNNQVBfU1RBUlQ9MHgwCi1DT05GSUdfTVREX1BIWVNNQVBfTEVOPTB4MAotQ09ORklHX01URF9QSFlTTUFQX0JBTktXSURUSD0xCisjIENPTkZJR19NVERfUEhZU01BUF9DT01QQVQgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0FSTV9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9JTlRFTF9WUl9OT1IgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldApAQCAtNDQ3LDYgKzUwNSwxMSBAQAogIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAogCiAjCisjIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAorCisjCiAjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcwogIwogIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CkBAIC00NjMsMTQgKzUyNiwyOSBAQAogQ09ORklHX0JMS19ERVZfUkFNPXkKIENPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9ODE5MgotQ09ORklHX0JMS19ERVZfUkFNX0JMT0NLU0laRT0xMDI0CisjIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19NR19ESVNLIGlzIG5vdCBzZXQKIENPTkZJR19NSVNDX0RFVklDRVM9eQogIyBDT05GSUdfUEhBTlRPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAogIyBDT05GSUdfU0dJX0lPQzQgaXMgbm90IHNldAogIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lDUzkzMlM0MDEgaXMgbm90IHNldAorIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQX0lMTyBpcyBub3Qgc2V0CisjIENPTkZJR19JU0wyOTAwMyBpcyBub3Qgc2V0CisjIENPTkZJR19DMlBPUlQgaXMgbm90IHNldAorCisjCisjIEVFUFJPTSBzdXBwb3J0CisjCisjIENPTkZJR19FRVBST01fQVQyNCBpcyBub3Qgc2V0CisjIENPTkZJR19FRVBST01fTEVHQUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VFUFJPTV9NQVg2ODc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CisjIENPTkZJR19DQjcxMF9DT1JFIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lERT15CiAjIENPTkZJR19JREUgaXMgbm90IHNldAogCiAjCkBAIC00OTIsMTAgKzU3MCw2IEBACiAjIENPTkZJR19CTEtfREVWX1NSIGlzIG5vdCBzZXQKIENPTkZJR19DSFJfREVWX1NHPXkKICMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKLQotIwotIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKLSMKICMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0CkBAIC01MTIsNiArNTg2LDggQEAKICMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJX0xPV0xFVkVMPXkKICMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0NYR0IzX0lTQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQk5YMl9JU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJXzNXXzlYWFggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BQ0FSRCBpcyBub3Qgc2V0CkBAIC01MjAsMTMgKzU5NiwxOCBAQAogIyBDT05GSUdfU0NTSV9BSUM3WFhYX09MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FJQzc5WFggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BSUM5NFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTVZTQVMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9EUFRfSTJPIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQURWQU5TWVMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BUkNNU1IgaXMgbm90IHNldAogIyBDT05GSUdfTUVHQVJBSURfTkVXR0VOIGlzIG5vdCBzZXQKICMgQ09ORklHX01FR0FSQUlEX0xFR0FDWSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRUdBUkFJRF9TQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9NUFQyU0FTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfSFBUSU9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkZDT0UgaXMgbm90IHNldAorIyBDT05GSUdfRkNPRSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RNWDMxOTFEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfRlVUVVJFX0RPTUFJTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lQUyBpcyBub3Qgc2V0CkBAIC01NDMsMTUgKzYyNCwxOCBAQAogIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CiBDT05GSUdfTUQ9eQogQ09ORklHX0JMS19ERVZfTUQ9eQorQ09ORklHX01EX0FVVE9ERVRFQ1Q9eQogQ09ORklHX01EX0xJTkVBUj15CiBDT05GSUdfTURfUkFJRDA9eQogQ09ORklHX01EX1JBSUQxPXkKICMgQ09ORklHX01EX1JBSUQxMCBpcyBub3Qgc2V0CiBDT05GSUdfTURfUkFJRDQ1Nj15Ci0jIENPTkZJR19NRF9SQUlENV9SRVNIQVBFIGlzIG5vdCBzZXQKK0NPTkZJR19NRF9SQUlENl9QUT15CiAjIENPTkZJR19NRF9NVUxUSVBBVEggaXMgbm90IHNldAogIyBDT05GSUdfTURfRkFVTFRZIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0RNPXkKQEAgLTU2OCwyNyArNjUyLDM0IEBACiAjCiAjIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKICMKKworIworIyBZb3UgY2FuIGVuYWJsZSBvbmUgb3IgYm90aCBGaXJlV2lyZSBkcml2ZXIgc3RhY2tzLgorIworCisjCisjIFNlZSB0aGUgaGVscCB0ZXh0cyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyMKICMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKICMgQ09ORklHX0kyTyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15Ci0jIENPTkZJR19ORVRERVZJQ0VTX01VTFRJUVVFVUUgaXMgbm90IHNldAogIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAogIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19UVU4gaXMgbm90IHNldAogIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUDEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9FVEhFUk5FVCBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDA9eQogIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKICMgQ09ORklHX0RMMksgaXMgbm90IHNldAogQ09ORklHX0UxMDAwPXkKLUNPTkZJR19FMTAwMF9OQVBJPXkKLSMgQ09ORklHX0UxMDAwX0RJU0FCTEVfUEFDS0VUX1NQTElUIGlzIG5vdCBzZXQKICMgQ09ORklHX0UxMDAwRSBpcyBub3Qgc2V0CisjIENPTkZJR19JUDEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfSUdCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lHQlZGIGlzIG5vdCBzZXQKICMgQ09ORklHX05TODM4MjAgaXMgbm90IHNldAogIyBDT05GSUdfSEFNQUNISSBpcyBub3Qgc2V0CiAjIENPTkZJR19ZRUxMT1dGSU4gaXMgbm90IHNldApAQCAtNTk2LDIzICs2ODcsMzQgQEAKICMgQ09ORklHX1NJUzE5MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TS0dFIGlzIG5vdCBzZXQKICMgQ09ORklHX1NLWTIgaXMgbm90IHNldAotIyBDT05GSUdfU0s5OExJTiBpcyBub3Qgc2V0CiAjIENPTkZJR19WSUFfVkVMT0NJVFkgaXMgbm90IHNldAogIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKICMgQ09ORklHX0JOWDIgaXMgbm90IHNldAorIyBDT05GSUdfQ05JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDEgaXMgbm90IHNldAorIyBDT05GSUdfQVRMMUUgaXMgbm90IHNldAorIyBDT05GSUdfQVRMMUMgaXMgbm90IHNldAorIyBDT05GSUdfSk1FIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMDA9eQogIyBDT05GSUdfQ0hFTFNJT19UMSBpcyBub3Qgc2V0CitDT05GSUdfQ0hFTFNJT19UM19ERVBFTkRTPXkKICMgQ09ORklHX0NIRUxTSU9fVDMgaXMgbm90IHNldAorIyBDT05GSUdfRU5JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19JWEdCRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKICMgQ09ORklHX1MySU8gaXMgbm90IHNldAorIyBDT05GSUdfVlhHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19NWVJJMTBHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRYRU5fTklDIGlzIG5vdCBzZXQKICMgQ09ORklHX05JVSBpcyBub3Qgc2V0CisjIENPTkZJR19NTFg0X0VOIGlzIG5vdCBzZXQKICMgQ09ORklHX01MWDRfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19URUhVVEkgaXMgbm90IHNldAorIyBDT05GSUdfQk5YMlggaXMgbm90IHNldAorIyBDT05GSUdfUUxHRSBpcyBub3Qgc2V0CisjIENPTkZJR19TRkMgaXMgbm90IHNldAorIyBDT05GSUdfQkUyTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKIAogIwpAQCAtNjIwLDEzICs3MjIsMTYgQEAKICMKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CisKKyMKKyMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycworIwogIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZEREkgaXMgbm90IHNldAogIyBDT05GSUdfSElQUEkgaXMgbm90IHNldAogIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMSVAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX0ZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIQVBFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CkBAIC02NzAsMTAgKzc3NSwxMyBAQAogIyBDaGFyYWN0ZXIgZGV2aWNlcwogIwogQ09ORklHX1ZUPXkKK0NPTkZJR19DT05TT0xFX1RSQU5TTEFUSU9OUz15CiBDT05GSUdfVlRfQ09OU09MRT15CiBDT05GSUdfSFdfQ09OU09MRT15CiAjIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkcgaXMgbm90IHNldAorQ09ORklHX0RFVktNRU09eQogIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX05PWk9NSSBpcyBub3Qgc2V0CiAKICMKICMgU2VyaWFsIGRyaXZlcnMKQEAgLTY5MiwxMSArODAwLDEyIEBACiBDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CiAjIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKIENPTkZJR19VTklYOThfUFRZUz15CisjIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19MRUdBQ1lfUFRZUz15CiBDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKICMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CiBDT05GSUdfSFdfUkFORE9NPXkKLSMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXX1JBTkRPTV9USU1FUklPTUVNIGlzIG5vdCBzZXQKICMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKICMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKICMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldApAQCAtNzA1LDY3ICs4MTQsOTcgQEAKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQogQ09ORklHX0kyQ19DSEFSREVWPXkKLQotIwotIyBJMkMgQWxnb3JpdGhtcwotIwotIyBDT05GSUdfSTJDX0FMR09CSVQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMR09QQ0YgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMR09QQ0EgaXMgbm90IHNldAorQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiAKICMKICMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0CiAjCisKKyMKKyMgUEMgU01CdXMgaG9zdCBjb250cm9sbGVyIGRyaXZlcnMKKyMKICMgQ09ORklHX0kyQ19BTEkxNTM1IGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19BTEkxNTYzIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19BTEkxNVgzIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19BTUQ3NTYgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0FNRDgxMTEgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0k4MDEgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0k4MTAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0lTQ0ggaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1BJSVg0IGlzIG5vdCBzZXQKLUNPTkZJR19JMkNfSU9QM1hYPXkKICMgQ09ORklHX0kyQ19ORk9SQ0UyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1BST1NBVkFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0FWQUdFNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19TSVM1NTk1IGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19TSVM2MzAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1NJUzk2WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1ZJQSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfVklBUFJPIGlzIG5vdCBzZXQKKworIworIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKKyMKKyMgQ09ORklHX0kyQ19HUElPIGlzIG5vdCBzZXQKK0NPTkZJR19JMkNfSU9QM1hYPXkKKyMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0CisKKyMKKyMgRXh0ZXJuYWwgSTJDL1NNQnVzIGFkYXB0ZXIgZHJpdmVycworIworIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKKworIworIyBHcmFwaGljcyBhZGFwdGVyIEkyQy9EREMgY2hhbm5lbCBkcml2ZXJzCisjCiAjIENPTkZJR19JMkNfVk9PRE9PMyBpcyBub3Qgc2V0CiAKICMKKyMgT3RoZXIgSTJDL1NNQnVzIGJ1cyBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfUENBX1BMQVRGT1JNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKKworIwogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKLSMgQ09ORklHX1NFTlNPUlNfRFMxMzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRFMxMzc0IGlzIG5vdCBzZXQKICMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fTEVHQUNZIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9SRVFVSVJFX0dQSU9MSUI9eQorQ09ORklHX0dQSU9MSUI9eQorIyBDT05GSUdfREVCVUdfR1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX1NZU0ZTIGlzIG5vdCBzZXQKIAogIwotIyBTUEkgc3VwcG9ydAorIyBNZW1vcnkgbWFwcGVkIEdQSU8gZXhwYW5kZXJzOgogIwotIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSV9NQVNURVIgaXMgbm90IHNldAorCisjCisjIEkyQyBHUElPIGV4cGFuZGVyczoKKyMKKyMgQ09ORklHX0dQSU9fTUFYNzMyWCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX1BDQTk1M1ggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19QQ0Y4NTdYIGlzIG5vdCBzZXQKKworIworIyBQQ0kgR1BJTyBleHBhbmRlcnM6CisjCisjIENPTkZJR19HUElPX0JUOFhYIGlzIG5vdCBzZXQKKworIworIyBTUEkgR1BJTyBleHBhbmRlcnM6CisjCiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogQ09ORklHX0hXTU9OPXkKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FENzQxNCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRE0xMDI1IGlzIG5vdCBzZXQKQEAgLTc3MywxMyArOTEyLDE3IEBACiAjIENPTkZJR19TRU5TT1JTX0FETTEwMjkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRE0xMDMxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURNOTI0MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEVDc0NjIgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRFQ3NDcwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURUNzQ3MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEVDc0NzUgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BVFhQMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0RTMTYyMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0k1S19BTUIgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfRjcxODgyRkcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19GNzUzNzVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRzc2MEEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19HTDUxOFNNIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfR0w1MjBTTSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldApAQCAtNzk0LDE2ICs5MzcsMjMgQEAKICMgQ09ORklHX1NFTlNPUlNfTE05MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0xNOTIgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19MTTkzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTFRDNDIxNSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xUQzQyNDUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTk1MjQxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfTUFYMTYxOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX01BWDY2NTAgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfUEM4NzQyNyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TSFQxNSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1NJUzU1OTUgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19ETUUxNzM3IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMTkyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UTVA0MDEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WSUE2ODZBIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKQEAgLTgxMiwyOCArOTYyLDM4IEBACiAjIENPTkZJR19TRU5TT1JTX1c4Mzc5MkQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM3OTMgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODNMNzg1VFMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODNMNzg2TkcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CitDT05GSUdfU1NCX1BPU1NJQkxFPXkKIAogIwogIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKICMKLUNPTkZJR19TU0JfUE9TU0lCTEU9eQogIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKIAogIwogIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCiAjCisjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZGV2aWNlcwotIwotIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKLUNPTkZJR19EQUI9eQorIyBDT05GSUdfTUZEX0FTSUMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hUQ19FR1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RQUzY1MDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RXTDQwMzBfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVEM2MzkzWEIgaXMgbm90IHNldAorIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAorIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydApAQCAtODU0LDE1ICsxMDE0LDE2IEBACiAjCiAjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0CiBDT05GSUdfRFVNTVlfQ09OU09MRT15Ci0KLSMKLSMgU291bmQKLSMKICMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKIENPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPXkKICMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0CisKKyMKKyMgU3BlY2lhbCBISUQgZHJpdmVycworIwogQ09ORklHX1VTQl9TVVBQT1JUPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CkBAIC04NzAsMTQgKzEwMzEsMjEgQEAKICMgQ09ORklHX1VTQiBpcyBub3Qgc2V0CiAKICMKLSMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JworIyBFbmFibGUgSG9zdCBvciBHYWRnZXQgc3VwcG9ydCB0byBzZWUgSW52ZW50cmEgb3B0aW9ucwogIwogCiAjCi0jIFVTQiBHYWRnZXQgU3VwcG9ydAorIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5CiAjCiAjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKKworIworIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKKyMKKyMgQ09ORklHX1VXQiBpcyBub3Qgc2V0CiAjIENPTkZJR19NTUMgaXMgbm90IHNldAorIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CiBDT05GSUdfUlRDX0xJQj15CiAjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldApAQCAtODkzLDYgKzEwNjEsMTIgQEAKICMgRE1BIENsaWVudHMKICMKIENPTkZJR19ORVRfRE1BPXkKKyMgQ09ORklHX0FTWU5DX1RYX0RNQSBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFURVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CisjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKIAogIwogIyBGaWxlIHN5c3RlbXMKQEAgLTkwMSwxMCArMTA3NSwxMSBAQAogIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CiBDT05GSUdfRVhUM19GUz15CisjIENPTkZJR19FWFQzX0RFRkFVTFRTX1RPX09SREVSRUQgaXMgbm90IHNldAogQ09ORklHX0VYVDNfRlNfWEFUVFI9eQogIyBDT05GSUdfRVhUM19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfRVhUM19GU19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAogQ09ORklHX0pCRD15CiBDT05GSUdfRlNfTUJDQUNIRT15CiAjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CkBAIC05MTMsMTcgKzEwODgsMjMgQEAKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GSUxFX0xPQ0tJTkc9eQorQ09ORklHX0ZTTk9USUZZPXkKK0NPTkZJR19ETk9USUZZPXkKIENPTkZJR19JTk9USUZZPXkKIENPTkZJR19JTk9USUZZX1VTRVI9eQogIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAotQ09ORklHX0ROT1RJRlk9eQogIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CiAKICMKKyMgQ2FjaGVzCisjCisjIENPTkZJR19GU0NBQ0hFIGlzIG5vdCBzZXQKKworIwogIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCiAjCiAjIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKQEAgLTk0MSwxNSArMTEyMiwxMyBAQAogIwogQ09ORklHX1BST0NfRlM9eQogQ09ORklHX1BST0NfU1lTQ1RMPXkKK0NPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CiBDT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKICMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKLSMKK0NPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKICMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldApAQCAtOTU5LDI5ICsxMTM4LDMxIEBACiAjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0NSQU1GUz15CisjIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CiAjIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNfRElSRUNUSU8gaXMgbm90IHNldAorQ09ORklHX1JPT1RfTkZTPXkKIENPTkZJR19ORlNEPXkKIENPTkZJR19ORlNEX1YzPXkKICMgQ09ORklHX05GU0RfVjNfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX05GU0RfVjQgaXMgbm90IHNldAotIyBDT05GSUdfTkZTRF9UQ1AgaXMgbm90IHNldAotQ09ORklHX1JPT1RfTkZTPXkKIENPTkZJR19MT0NLRD15CiBDT05GSUdfTE9DS0RfVjQ9eQogQ09ORklHX0VYUE9SVEZTPXkKIENPTkZJR19ORlNfQ09NTU9OPXkKIENPTkZJR19TVU5SUEM9eQotIyBDT05GSUdfU1VOUlBDX0JJTkQzNCBpcyBub3Qgc2V0CiAjIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAogIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldApAQCAtMTAxMyw5ICsxMTk0LDYgQEAKICMgQ09ORklHX1NZU1Y2OF9QQVJUSVRJT04gaXMgbm90IHNldAogIyBDT05GSUdfTkxTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RMTSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5TVFJVTUVOVEFUSU9OPXkKLSMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIAogIwogIyBLZXJuZWwgaGFja2luZwpAQCAtMTAyMyw2ICsxMjAxLDcgQEAKICMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKIENPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CitDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiBDT05GSUdfTUFHSUNfU1lTUlE9eQogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldApAQCAtMTAzMCwxMCArMTIwOSwxNyBAQAogQ09ORklHX0RFQlVHX0tFUk5FTD15CiAjIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0CiBDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQorIyBDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUMgaXMgbm90IHNldAorQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDX1ZBTFVFPTAKK0NPTkZJR19ERVRFQ1RfSFVOR19UQVNLPXkKKyMgQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUMgaXMgbm90IHNldAorQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUNfVkFMVUU9MAogQ09ORklHX1NDSEVEX0RFQlVHPXkKICMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tNRU1MRUFLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAogIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKQEAgLTEwNDcsMTYgKzEyMzMsNDEgQEAKIENPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKICMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfV1JJVEVDT1VOVCBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQ9eQogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAogQ09ORklHX0ZSQU1FX1BPSU5URVI9eQotIyBDT05GSUdfRk9SQ0VEX0lOTElOSU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBR0VfUE9JU09OSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKK0NPTkZJR19GVFJBQ0U9eQorIyBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19FTkFCTEVfREVGQVVMVF9UUkFDRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKK0NPTkZJR19CUkFOQ0hfUFJPRklMRV9OT05FPXkKKyMgQ09ORklHX1BST0ZJTEVfQU5OT1RBVEVEX0JSQU5DSEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTEVfQUxMX0JSQU5DSEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUQUNLX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19LTUVNVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfV09SS1FVRVVFX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKKyMgQ09ORklHX0tHREIgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX1VTRVI9eQogIyBDT05GSUdfREVCVUdfRVJST1JTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19MTD15CiAjIENPTkZJR19ERUJVR19JQ0VEQ0MgaXMgbm90IHNldAogCkBAIC0xMDY1LDI0ICsxMjc2LDExNyBAQAogIwogIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKIENPTkZJR19YT1JfQkxPQ0tTPXkKIENPTkZJR19BU1lOQ19DT1JFPXkKIENPTkZJR19BU1lOQ19NRU1DUFk9eQogQ09ORklHX0FTWU5DX1hPUj15Ci0jIENPTkZJR19DUllQVE8gaXMgbm90IHNldAorQ09ORklHX0NSWVBUTz15CisKKyMKKyMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCisjCisjIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUFOQUdFUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUFOQUdFUjIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAorCisjCisjIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQorIworIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0CisKKyMKKyMgQmxvY2sgbW9kZXMKKyMKKyMgQ09ORklHX0NSWVBUT19DQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19FQ0IgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKKworIworIyBIYXNoIG1vZGVzCisjCisjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisKKyMKKyMgRGlnZXN0CisjCisjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDEyOCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAorCisjCisjIENpcGhlcnMKKyMKKyMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0RFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0CisKKyMKKyMgQ29tcHJlc3Npb24KKyMKKyMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19aTElCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAorCisjCisjIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbgorIworIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19IVz15CisjIENPTkZJR19DUllQVE9fREVWX0hJRk5fNzk1WCBpcyBub3Qgc2V0CisjIENPTkZJR19CSU5BUllfUFJJTlRGIGlzIG5vdCBzZXQKIAogIwogIyBMaWJyYXJ5IHJvdXRpbmVzCiAjCitDT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKICMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfVDEwRElGIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkMzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CiBDT05GSUdfWkxJQl9JTkZMQVRFPXkKLUNPTkZJR19QTElTVD15CitDT05GSUdfREVDT01QUkVTU19HWklQPXkKK0NPTkZJR19ERUNPTVBSRVNTX0JaSVAyPXkKK0NPTkZJR19ERUNPTVBSRVNTX0xaTUE9eQogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15CitDT05GSUdfTkxBVFRSPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvbGl0dGxldG9uX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvbGl0dGxldG9uX2RlZmNvbmZpZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWRiNDk2OS4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9jb25maWdzL2xpdHRsZXRvbl9kZWZjb25maWcKKysrIC9kZXYvbnVsbApAQCAtMSw3ODMgKzAsMCBAQAotIwotIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI0LXJjNQotIyBGcmkgRGVjIDIxIDExOjA2OjE5IDIwMDcKLSMKLUNPTkZJR19BUk09eQotQ09ORklHX1NZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OPXkKLUNPTkZJR19HRU5FUklDX0dQSU89eQotQ09ORklHX0dFTkVSSUNfVElNRT15Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15Ci1DT05GSUdfTU1VPXkKLSMgQ09ORklHX05PX0lPUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRUz15Ci1DT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKLUNPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQotQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQotQ09ORklHX0hBUkRJUlFTX1NXX1JFU0VORD15Ci1DT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQotQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQotIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15Ci1DT05GSUdfWk9ORV9ETUE9eQotQ09ORklHX0FSQ0hfTVREX1hJUD15Ci1DT05GSUdfVkVDVE9SU19CQVNFPTB4ZmZmZjAwMDAKLUNPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCi0KLSMKLSMgR2VuZXJhbCBzZXR1cAotIwotQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci1DT05GSUdfTE9DS19LRVJORUw9eQotQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgotQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgotQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKLUNPTkZJR19TV0FQPXkKLUNPTkZJR19TWVNWSVBDPXkKLUNPTkZJR19TWVNWSVBDX1NZU0NUTD15Ci0jIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVVNFUl9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSURfTlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAotIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAotQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAotQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQ9eQotQ09ORklHX0ZBSVJfVVNFUl9TQ0hFRD15Ci0jIENPTkZJR19GQUlSX0NHUk9VUF9TQ0hFRCBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRD15Ci0jIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKLUNPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15Ci1DT05GSUdfU1lTQ1RMPXkKLSMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKLUNPTkZJR19VSUQxNj15Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQotQ09ORklHX0tBTExTWU1TPXkKLSMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKLUNPTkZJR19IT1RQTFVHPXkKLUNPTkZJR19QUklOVEs9eQotQ09ORklHX0JVRz15Ci1DT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfRlVURVg9eQotQ09ORklHX0FOT05fSU5PREVTPXkKLUNPTkZJR19FUE9MTD15Ci1DT05GSUdfU0lHTkFMRkQ9eQotQ09ORklHX0VWRU5URkQ9eQotQ09ORklHX1NITUVNPXkKLUNPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci1DT05GSUdfU0xBQj15Ci0jIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMT0IgaXMgbm90IHNldAotQ09ORklHX1JUX01VVEVYRVM9eQotIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0Ci1DT05GSUdfQkFTRV9TTUFMTD0wCi1DT05GSUdfTU9EVUxFUz15Ci1DT05GSUdfTU9EVUxFX1VOTE9BRD15Ci1DT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRD15Ci0jIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAotIyBDT05GSUdfS01PRCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKLQotIwotIyBJTyBTY2hlZHVsZXJzCi0jCi1DT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKLUNPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKLUNPTkZJR19JT1NDSEVEX0NGUT15Ci0jIENPTkZJR19ERUZBVUxUX0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCi0KLSMKLSMgU3lzdGVtIFR5cGUKLSMKLSMgQ09ORklHX0FSQ0hfQUFFQzIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUkVBTFZJRVcgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9BVDkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ0xQUzc1MDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NPMjg1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0VQOTNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9ORVRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AxM1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMzJYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMzNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQMjNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0tTODY5NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX05TOVhYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01YQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BOWDQwMDggaXMgbm90IHNldAotQ09ORklHX0FSQ0hfUFhBPXkKLSMgQ09ORklHX0FSQ0hfUlBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0ExMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUzNDMjQxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NIQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTEg3QTQwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0RBVklOQ0kgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKLQotIwotIyBJbnRlbCBQWEEyeHgvUFhBM3h4IEltcGxlbWVudGF0aW9ucwotIwotCi0jCi0jIFN1cHBvcnRlZCBQWEEzeHggUHJvY2Vzc29yIFZhcmlhbnRzCi0jCi1DT05GSUdfQ1BVX1BYQTMwMD15Ci1DT05GSUdfQ1BVX1BYQTMxMD15Ci0jIENPTkZJR19DUFVfUFhBMzIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTFVCQk9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX0xPR0lDUERfUFhBMjcwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfTUFJTlNUT05FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUFhBX0lEUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QWEFfU0hBUlBTTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX1RSSVpFUFM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfRU1fWDI3MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX1pZTE9OSVRFIGlzIG5vdCBzZXQKLUNPTkZJR19NQUNIX0xJVFRMRVRPTj15Ci0jIENPTkZJR19NQUNIX0FSTUNPUkUgaXMgbm90IHNldAotQ09ORklHX1BYQTN4eD15Ci1DT05GSUdfUFhBX1NTUD15Ci0KLSMKLSMgQm9vdCBvcHRpb25zCi0jCi0KLSMKLSMgUG93ZXIgbWFuYWdlbWVudAotIwotCi0jCi0jIFByb2Nlc3NvciBUeXBlCi0jCi1DT05GSUdfQ1BVXzMyPXkKLUNPTkZJR19DUFVfWFNDMz15Ci1DT05GSUdfQ1BVXzMydjU9eQotQ09ORklHX0NQVV9BQlJUX0VWNVQ9eQotQ09ORklHX0NQVV9DQUNIRV9WSVZUPXkKLUNPTkZJR19DUFVfVExCX1Y0V0JJPXkKLUNPTkZJR19DUFVfQ1AxNT15Ci1DT05GSUdfQ1BVX0NQMTVfTU1VPXkKLUNPTkZJR19JT18zNj15Ci0KLSMKLSMgUHJvY2Vzc29yIEZlYXR1cmVzCi0jCi0jIENPTkZJR19BUk1fVEhVTUIgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9CUFJFRElDVF9ESVNBQkxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX09VVEVSX0NBQ0hFIGlzIG5vdCBzZXQKLUNPTkZJR19JV01NWFQ9eQotCi0jCi0jIEJ1cyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QQ0lfU1lTQ0FMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBGZWF0dXJlcwotIwotQ09ORklHX1RJQ0tfT05FU0hPVD15Ci0jIENPTkZJR19OT19IWiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISUdIX1JFU19USU1FUlMgaXMgbm90IHNldAotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQotQ09ORklHX1BSRUVNUFQ9eQotQ09ORklHX0haPTEwMAotQ09ORklHX0FFQUJJPXkKLUNPTkZJR19PQUJJX0NPTVBBVD15Ci0jIENPTkZJR19BUkNIX0RJU0NPTlRJR01FTV9FTkFCTEUgaXMgbm90IHNldAotQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQotQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKLSMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAotIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci1DT05GSUdfRkxBVE1FTT15Ci1DT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQotIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fVk1FTU1BUF9FTkFCTEUgaXMgbm90IHNldAotQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQwOTYKLSMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfWk9ORV9ETUFfRkxBRz0xCi1DT05GSUdfQk9VTkNFPXkKLUNPTkZJR19WSVJUX1RPX0JVUz15Ci1DT05GSUdfQUxJR05NRU5UX1RSQVA9eQotCi0jCi0jIEJvb3Qgb3B0aW9ucwotIwotQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MAotQ09ORklHX1pCT09UX1JPTV9CU1M9MHgwCi1DT05GSUdfQ01ETElORT0icm9vdD0vZGV2L25mcyByb290ZnN0eXBlPW5mcyBuZnNyb290PTE5Mi4xNjguMS4xMDA6L25mc3Jvb3QvIGlwPTE5Mi4xNjguMS4xMDE6MTkyLjE2OC4xLjEwMDo6MjU1LjI1NS4yNTUuMDo6ZXRoMDpvbiBjb25zb2xlPXR0eVMyLDM4NDAwIG1lbT02NE0iCi0jIENPTkZJR19YSVBfS0VSTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKLQotIwotIyBDUFUgRnJlcXVlbmN5IHNjYWxpbmcKLSMKLSMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKLQotIwotIyBGbG9hdGluZyBwb2ludCBlbXVsYXRpb24KLSMKLQotIwotIyBBdCBsZWFzdCBvbmUgZW11bGF0aW9uIG11c3QgYmUgc2VsZWN0ZWQKLSMKLUNPTkZJR19GUEVfTldGUEU9eQotIyBDT05GSUdfRlBFX05XRlBFX1hQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZQRV9GQVNURlBFIGlzIG5vdCBzZXQKLQotIwotIyBVc2Vyc3BhY2UgYmluYXJ5IGZvcm1hdHMKLSMKLUNPTkZJR19CSU5GTVRfRUxGPXkKLSMgQ09ORklHX0JJTkZNVF9BT1VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKLQotIwotIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKLSMKLSMgQ09ORklHX1BNIGlzIG5vdCBzZXQKLUNPTkZJR19TVVNQRU5EX1VQX1BPU1NJQkxFPXkKLQotIwotIyBOZXR3b3JraW5nCi0jCi1DT05GSUdfTkVUPXkKLQotIwotIyBOZXR3b3JraW5nIG9wdGlvbnMKLSMKLUNPTkZJR19QQUNLRVQ9eQotIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAotQ09ORklHX1VOSVg9eQotQ09ORklHX1hGUk09eQotIyBDT05GSUdfWEZSTV9VU0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVD15Ci0jIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAotIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9GSUJfSEFTSD15Ci1DT05GSUdfSVBfUE5QPXkKLSMgQ09ORklHX0lQX1BOUF9ESENQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1BOUF9CT09UUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAotIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKLSMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX0RJQUc9eQotQ09ORklHX0lORVRfVENQX0RJQUc9eQotIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX1RDUF9DT05HX0NVQklDPXkKLUNPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKLSMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAotIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE0gaXMgbm90IHNldAotIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAotIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1gyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayB0ZXN0aW5nCi0jCi0jIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSREEgaXMgbm90IHNldAotIyBDT05GSUdfQlQgaXMgbm90IHNldAotIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzCi0jCi0jIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAotIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAotCi0jCi0jIERldmljZSBEcml2ZXJzCi0jCi0KLSMKLSMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwotIwotQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKLSMgQ09ORklHX1NUQU5EQUxPTkUgaXMgbm90IHNldAotIyBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRCBpcyBub3Qgc2V0Ci1DT05GSUdfRldfTE9BREVSPXkKLSMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAotIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVYgaXMgbm90IHNldAotIyBDT05GSUdfTUlTQ19ERVZJQ0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lERSBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRE1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEEgaXMgbm90IHNldAotIyBDT05GSUdfTUQgaXMgbm90IHNldAotQ09ORklHX05FVERFVklDRVM9eQotIyBDT05GSUdfTkVUREVWSUNFU19NVUxUSVFVRVVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZFVEggaXMgbm90IHNldAotIyBDT05GSUdfUEhZTElCIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRfRVRIRVJORVQ9eQotQ09ORklHX01JST15Ci0jIENPTkZJR19BWDg4Nzk2IGlzIG5vdCBzZXQKLUNPTkZJR19TTUM5MVg9eQotIyBDT05GSUdfRE05MDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQzkxMVggaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0I0NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIwotIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUFAgaXMgbm90IHNldAotIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19JTlBVVD15Ci0jIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAotCi0jCi0jIFVzZXJsYW5kIGludGVyZmFjZXMKLSMKLUNPTkZJR19JTlBVVF9NT1VTRURFVj15Ci0jIENPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAotIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIEkvTyBwb3J0cwotIwotIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAotIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAotCi0jCi0jIENoYXJhY3RlciBkZXZpY2VzCi0jCi1DT05GSUdfVlQ9eQotQ09ORklHX1ZUX0NPTlNPTEU9eQotQ09ORklHX0hXX0NPTlNPTEU9eQotIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIGRyaXZlcnMKLSMKLSMgQ09ORklHX1NFUklBTF84MjUwIGlzIG5vdCBzZXQKLQotIwotIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0Ci0jCi1DT05GSUdfU0VSSUFMX1BYQT15Ci1DT05GSUdfU0VSSUFMX1BYQV9DT05TT0xFPXkKLUNPTkZJR19TRVJJQUxfQ09SRT15Ci1DT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQotIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAotIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAotIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKLQotIwotIyBTUEkgc3VwcG9ydAotIwotIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSV9NQVNURVIgaXMgbm90IHNldAotIyBDT05GSUdfVzEgaXMgbm90IHNldAotIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKLQotIwotIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKLSMKLUNPTkZJR19TU0JfUE9TU0lCTEU9eQotIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZGV2aWNlcwotIwotIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RBQiBpcyBub3Qgc2V0Ci0KLSMKLSMgR3JhcGhpY3Mgc3VwcG9ydAotIwotIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAotQ09ORklHX0ZCPXkKLSMgQ09ORklHX0ZJUk1XQVJFX0VESUQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfRERDIGlzIG5vdCBzZXQKLUNPTkZJR19GQl9DRkJfRklMTFJFQ1Q9eQotQ09ORklHX0ZCX0NGQl9DT1BZQVJFQT15Ci1DT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVD15Ci0jIENPTkZJR19GQl9DRkJfUkVWX1BJWEVMU19JTl9CWVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19GSUxMUkVDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TWVNfQ09QWUFSRUEgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0lNQUdFQkxJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TWVNfRk9QUyBpcyBub3Qgc2V0Ci1DT05GSUdfRkJfREVGRVJSRURfSU89eQotIyBDT05GSUdfRkJfU1ZHQUxJQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9NQUNNT0RFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9CQUNLTElHSFQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTU9ERV9IRUxQRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1RJTEVCTElUVElORyBpcyBub3Qgc2V0Ci0KLSMKLSMgRnJhbWUgYnVmZmVyIGhhcmR3YXJlIGRyaXZlcnMKLSMKLSMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKLUNPTkZJR19GQl9QWEE9eQotIyBDT05GSUdfRkJfUFhBX1BBUkFNRVRFUlMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTUJYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAotIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAotIwotIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAotQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQotQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEU9eQotIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ERVRFQ1RfUFJJTUFSWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX1JPVEFUSU9OIGlzIG5vdCBzZXQKLUNPTkZJR19GT05UUz15Ci0jIENPTkZJR19GT05UXzh4OCBpcyBub3Qgc2V0Ci1DT05GSUdfRk9OVF84eDE2PXkKLSMgQ09ORklHX0ZPTlRfNngxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT05UXzd4MTQgaXMgbm90IHNldAotIyBDT05GSUdfRk9OVF9QRUFSTF84eDggaXMgbm90IHNldAotIyBDT05GSUdfRk9OVF9BQ09STl84eDggaXMgbm90IHNldAotIyBDT05GSUdfRk9OVF9NSU5JXzR4NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT05UX1NVTjh4MTYgaXMgbm90IHNldAotIyBDT05GSUdfRk9OVF9TVU4xMngyMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT05UXzEweDE4IGlzIG5vdCBzZXQKLUNPTkZJR19MT0dPPXkKLUNPTkZJR19MT0dPX0xJTlVYX01PTk89eQotQ09ORklHX0xPR09fTElOVVhfVkdBMTY9eQotQ09ORklHX0xPR09fTElOVVhfQ0xVVDIyND15Ci0KLSMKLSMgU291bmQKLSMKLSMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9TVVBQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVVBQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0Ci1DT05GSUdfUlRDX0xJQj15Ci0jIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAotCi0jCi0jIEZpbGUgc3lzdGVtcwotIwotIyBDT05GSUdfRVhUMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19GU19QT1NJWF9BQ0w9eQotIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSU5PVElGWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETk9USUZZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAotCi0jCi0jIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRkFUX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQotQ09ORklHX1BST0NfU1lTQ1RMPXkKLUNPTkZJR19TWVNGUz15Ci0jIENPTkZJR19UTVBGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQotQ09ORklHX05GU19GUz15Ci1DT05GSUdfTkZTX1YzPXkKLUNPTkZJR19ORlNfVjNfQUNMPXkKLUNPTkZJR19ORlNfVjQ9eQotQ09ORklHX05GU19ESVJFQ1RJTz15Ci0jIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKLUNPTkZJR19ST09UX05GUz15Ci1DT05GSUdfTE9DS0Q9eQotQ09ORklHX0xPQ0tEX1Y0PXkKLUNPTkZJR19ORlNfQUNMX1NVUFBPUlQ9eQotQ09ORklHX05GU19DT01NT049eQotQ09ORklHX1NVTlJQQz15Ci1DT05GSUdfU1VOUlBDX0dTUz15Ci0jIENPTkZJR19TVU5SUENfQklORDM0IGlzIG5vdCBzZXQKLUNPTkZJR19SUENTRUNfR1NTX0tSQjU9eQotIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBhcnRpdGlvbiBUeXBlcwotIwotIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19NU0RPU19QQVJUSVRJT049eQotIyBDT05GSUdfTkxTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RMTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlNUUlVNRU5UQVRJT04gaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBoYWNraW5nCi0jCi1DT05GSUdfUFJJTlRLX1RJTUU9eQotQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQotQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKLUNPTkZJR19NQUdJQ19TWVNSUT15Ci0jIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19LRVJORUw9eQotIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAotQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKLUNPTkZJR19TQ0hFRF9ERUJVRz15Ci0jIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfUFJFRU1QVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAotIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQotQ09ORklHX0RFQlVHX0lORk89eQotIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0Ci1DT05GSUdfRlJBTUVfUE9JTlRFUj15Ci1DT05GSUdfRk9SQ0VEX0lOTElOSU5HPXkKLSMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX1VTRVI9eQotQ09ORklHX0RFQlVHX0VSUk9SUz15Ci1DT05GSUdfREVCVUdfTEw9eQotIyBDT05GSUdfREVCVUdfSUNFRENDIGlzIG5vdCBzZXQKLQotIwotIyBTZWN1cml0eSBvcHRpb25zCi0jCi0jIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE89eQotQ09ORklHX0NSWVBUT19BTEdBUEk9eQotQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQotQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKLSMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19NRDU9eQotIyBDT05GSUdfQ1JZUFRPX1NIQTEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fRUNCIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fQ0JDPXkKLSMgQ09ORklHX0NSWVBUT19QQ0JDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fREVTPXkKLSMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19IVz15Ci0KLSMKLSMgTGlicmFyeSByb3V0aW5lcwotIwotQ09ORklHX0JJVFJFVkVSU0U9eQotQ09ORklHX0NSQ19DQ0lUVD15Ci0jIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAotQ09ORklHX0NSQzMyPXkKLSMgQ09ORklHX0NSQzcgaXMgbm90IHNldAotIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKLUNPTkZJR19QTElTVD15Ci1DT05GSUdfSEFTX0lPTUVNPXkKLUNPTkZJR19IQVNfSU9QT1JUPXkKLUNPTkZJR19IQVNfRE1BPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mvbjh4MF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL244eDBfZGVmY29uZmlnCmluZGV4IDhkYTc1ZGUuLjI2NGY1MmIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3Mvbjh4MF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9uOHgwX2RlZmNvbmZpZwpAQCAtMzA0LDcgKzMwNCw3IEBACiBDT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgxMEMwODAwMAogQ09ORklHX1pCT09UX1JPTV9CU1M9MHgxMDIwMDAwMAogIyBDT05GSUdfWkJPT1RfUk9NIGlzIG5vdCBzZXQKLUNPTkZJR19DTURMSU5FPSJyb290PTFmMDMgcm9vdGZzdHlwZT1qZmZzMiBjb25zb2xlPXR0eVMwLDExNTIwMG44IgorQ09ORklHX0NNRExJTkU9InJvb3Q9MWYwMyByb290ZnN0eXBlPWpmZnMyIGNvbnNvbGU9dHR5UzIsMTE1MjAwbjgiCiAjIENPTkZJR19YSVBfS0VSTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9vbWFwM19iZWFnbGVfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9vbWFwM19iZWFnbGVfZGVmY29uZmlnCmluZGV4IDM1N2Q0MDIuLmIzYzhjY2UgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcDNfYmVhZ2xlX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL29tYXAzX2JlYWdsZV9kZWZjb25maWcKQEAgLTk2OSw3ICs5NjksNiBAQAogIwogQ09ORklHX1VTQl9PVEdfVVRJTFM9eQogIyBDT05GSUdfVVNCX0dQSU9fVkJVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JU1AxMzAxX09NQVAgaXMgbm90IHNldAogQ09ORklHX1RXTDQwMzBfVVNCPXkKICMgQ09ORklHX05PUF9VU0JfWENFSVYgaXMgbm90IHNldAogQ09ORklHX01NQz15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL3B4YTN4eF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL3B4YTN4eF9kZWZjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzMzYjg1MQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvcHhhM3h4X2RlZmNvbmZpZwpAQCAtMCwwICsxLDEzMzIgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMS1yYzEKKyMgTW9uIEp1bCAxMyAyMjo0ODo0OSAyMDA5CisjCitDT05GSUdfQVJNPXkKK0NPTkZJR19IQVZFX1BXTT15CitDT05GSUdfU1lTX1NVUFBPUlRTX0FQTV9FTVVMQVRJT049eQorQ09ORklHX0dFTkVSSUNfR1BJTz15CitDT05GSUdfR0VORVJJQ19USU1FPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKK0NPTkZJR19NTVU9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CitDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQorQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CitDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CitDT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKK0NPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CitDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKK0NPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfQVJDSF9NVERfWElQPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQorQ09ORklHX1ZFQ1RPUlNfQkFTRT0weGZmZmYwMDAwCitDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CitDT05GSUdfTE9DS19LRVJORUw9eQorQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKK0NPTkZJR19TV0FQPXkKK0NPTkZJR19TWVNWSVBDPXkKK0NPTkZJR19TWVNWSVBDX1NZU0NUTD15CisjIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAorIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CisjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorCisjCisjIFJDVSBTdWJzeXN0ZW0KKyMKKyMgQ09ORklHX0NMQVNTSUNfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAorIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTgKK0NPTkZJR19HUk9VUF9TQ0hFRD15CitDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRD15CisjIENPTkZJR19SVF9HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CitDT05GSUdfVVNFUl9TQ0hFRD15CisjIENPTkZJR19DR1JPVVBfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CisjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CitDT05GSUdfTkFNRVNQQUNFUz15CisjIENPTkZJR19VVFNfTlMgaXMgbm90IHNldAorIyBDT05GSUdfSVBDX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTRVJfTlMgaXMgbm90IHNldAorIyBDT05GSUdfUElEX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0CisjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CisjIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0CitDT05GSUdfVUlEMTY9eQorQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKK0NPTkZJR19LQUxMU1lNUz15CitDT05GSUdfS0FMTFNZTVNfQUxMPXkKKyMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAorQ09ORklHX0hPVFBMVUc9eQorQ09ORklHX1BSSU5USz15CitDT05GSUdfQlVHPXkKK0NPTkZJR19FTEZfQ09SRT15CitDT05GSUdfQkFTRV9GVUxMPXkKK0NPTkZJR19GVVRFWD15CitDT05GSUdfRVBPTEw9eQorQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19USU1FUkZEPXkKK0NPTkZJR19FVkVOVEZEPXkKK0NPTkZJR19TSE1FTT15CitDT05GSUdfQUlPPXkKKworIworIyBQZXJmb3JtYW5jZSBDb3VudGVycworIworQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKK0NPTkZJR19DT01QQVRfQlJLPXkKK0NPTkZJR19TTEFCPXkKKyMgQ09ORklHX1NMVUIgaXMgbm90IHNldAorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9PUFJPRklMRT15CisjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0tQUk9CRVM9eQorQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CitDT05GSUdfSEFWRV9DTEs9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIworIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKK0NPTkZJR19TTEFCSU5GTz15CitDT05GSUdfUlRfTVVURVhFUz15CitDT05GSUdfQkFTRV9TTUFMTD0wCitDT05GSUdfTU9EVUxFUz15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RVTEVfVU5MT0FEIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CitDT05GSUdfQkxPQ0s9eQorQ09ORklHX0xCREFGPXkKKyMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKK0NPTkZJR19JT1NDSEVEX0FTPXkKK0NPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKK0NPTkZJR19JT1NDSEVEX0NGUT15CisjIENPTkZJR19ERUZBVUxUX0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfQ0ZRPXkKKyMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCisjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKKworIworIyBTeXN0ZW0gVHlwZQorIworIyBDT05GSUdfQVJDSF9BQUVDMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9SRUFMVklFVyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0FUOTEgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0dFTUlOSSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9FUDkzWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTVhDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU1RNUDNYWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9ORVRYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AxM1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU9QMzJYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU9QMzNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQMjNYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0tJUktXT09EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTE9LSSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX01WNzhYWDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9PUklPTjVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTU1QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfS1M4Njk1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTlM5WFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfVzkwWDkwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1BOWDQwMDggaXMgbm90IHNldAorQ09ORklHX0FSQ0hfUFhBPXkKKyMgQ09ORklHX0FSQ0hfTVNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUlBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU0ExMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUzNDMjQxMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1MzQzY0WFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9VMzAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfREFWSU5DSSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX09NQVAgaXMgbm90IHNldAorCisjCisjIEludGVsIFBYQTJ4eC9QWEEzeHggSW1wbGVtZW50YXRpb25zCisjCisKKyMKKyMgU3VwcG9ydGVkIFBYQTN4eCBQcm9jZXNzb3IgVmFyaWFudHMKKyMKK0NPTkZJR19DUFVfUFhBMzAwPXkKK0NPTkZJR19DUFVfUFhBMzEwPXkKK0NPTkZJR19DUFVfUFhBMzIwPXkKK0NPTkZJR19DUFVfUFhBOTMwPXkKK0NPTkZJR19DUFVfUFhBOTM1PXkKKyMgQ09ORklHX0FSQ0hfR1VNU1RJWCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0lOVEVMTU9URTIgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9TVEFSR0FURTIgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MVUJCT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfTE9HSUNQRF9QWEEyNzAgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9NQUlOU1RPTkUgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9NUDkwMEMgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9QWEFfSURQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BYQV9TSEFSUFNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfVklQRVIgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9QWEFfRVNFUklFUyBpcyBub3Qgc2V0CisjIENPTkZJR19UUklaRVBTX1BYQSBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0g1MDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfRU1fWDI3MCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0VYRURBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfQ09MSUJSSSBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0NPTElCUkkzMDAgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9DT0xJQlJJMzIwIGlzIG5vdCBzZXQKK0NPTkZJR19NQUNIX1pZTE9OSVRFPXkKK0NPTkZJR19NQUNIX0xJVFRMRVRPTj15CitDT05GSUdfTUFDSF9UQVZPUkVWQj15CitDT05GSUdfTUFDSF9TQUFSPXkKKyMgQ09ORklHX01BQ0hfQVJNQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0NNX1gzMDAgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9INDcwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX01BR0lDSUFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfSElNQUxBWUEgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9NSU9BNzAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfUENNMDI3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUFhBX1BBTE0gaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9DU0I3MjYgaXMgbm90IHNldAorIyBDT05GSUdfUFhBX0VaWCBpcyBub3Qgc2V0CitDT05GSUdfUFhBM3h4PXkKK0NPTkZJR19QWEFfU1NQPXkKK0NPTkZJR19QWEFfSEFWRV9CT0FSRF9JUlFTPXkKK0NPTkZJR19QTEFUX1BYQT15CisKKyMKKyMgUHJvY2Vzc29yIFR5cGUKKyMKK0NPTkZJR19DUFVfMzI9eQorQ09ORklHX0NQVV9YU0MzPXkKK0NPTkZJR19DUFVfMzJ2NT15CitDT05GSUdfQ1BVX0FCUlRfRVY1VD15CitDT05GSUdfQ1BVX1BBQlJUX05PSUZBUj15CitDT05GSUdfQ1BVX0NBQ0hFX1ZJVlQ9eQorQ09ORklHX0NQVV9UTEJfVjRXQkk9eQorQ09ORklHX0NQVV9DUDE1PXkKK0NPTkZJR19DUFVfQ1AxNV9NTVU9eQorQ09ORklHX0lPXzM2PXkKKworIworIyBQcm9jZXNzb3IgRmVhdHVyZXMKKyMKK0NPTkZJR19BUk1fVEhVTUI9eQorIyBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9CUFJFRElDVF9ESVNBQkxFIGlzIG5vdCBzZXQKK0NPTkZJR19PVVRFUl9DQUNIRT15CitDT05GSUdfQ0FDSEVfWFNDM0wyPXkKK0NPTkZJR19JV01NWFQ9eQorQ09ORklHX0NPTU1PTl9DTEtERVY9eQorCisjCisjIEJ1cyBzdXBwb3J0CisjCisjIENPTkZJR19QQ0lfU1lTQ0FMTCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBGZWF0dXJlcworIworQ09ORklHX1RJQ0tfT05FU0hPVD15CisjIENPTkZJR19OT19IWiBpcyBub3Qgc2V0CisjIENPTkZJR19ISUdIX1JFU19USU1FUlMgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQorQ09ORklHX1ZNU1BMSVRfM0c9eQorIyBDT05GSUdfVk1TUExJVF8yRyBpcyBub3Qgc2V0CisjIENPTkZJR19WTVNQTElUXzFHIGlzIG5vdCBzZXQKK0NPTkZJR19QQUdFX09GRlNFVD0weEMwMDAwMDAwCitDT05GSUdfUFJFRU1QVD15CitDT05GSUdfSFo9MTAwCitDT05GSUdfQUVBQkk9eQorQ09ORklHX09BQklfQ09NUEFUPXkKKyMgQ09ORklHX0FSQ0hfU1BBUlNFTUVNX0RFRkFVTFQgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TRUxFQ1RfTUVNT1JZX01PREVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJR0hNRU0gaXMgbm90IHNldAorQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKKyMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0CitDT05GSUdfRkxBVE1FTT15CitDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQorQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15CitDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NDA5NgorIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAorQ09ORklHX1ZJUlRfVE9fQlVTPXkKK0NPTkZJR19IQVZFX01MT0NLPXkKK0NPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CitDT05GSUdfQUxJR05NRU5UX1RSQVA9eQorIyBDT05GSUdfVUFDQ0VTU19XSVRIX01FTUNQWSBpcyBub3Qgc2V0CisKKyMKKyMgQm9vdCBvcHRpb25zCisjCitDT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCitDT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKK0NPTkZJR19DTURMSU5FPSJyb290PS9kZXYvbmZzIHJvb3Rmc3R5cGU9bmZzIG5mc3Jvb3Q9MTkyLjE2OC4xLjEwMDovbmZzcm9vdC8gaXA9MTkyLjE2OC4xLjEwMToxOTIuMTY4LjEuMTAwOjoyNTUuMjU1LjI1NS4wOjpldGgwOm9uIGNvbnNvbGU9dHR5UzAsMTE1MjAwIG1lbT02NE0gZGVidWciCisjIENPTkZJR19YSVBfS0VSTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKKworIworIyBDUFUgUG93ZXIgTWFuYWdlbWVudAorIworIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0lETEUgaXMgbm90IHNldAorCisjCisjIEZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbgorIworCisjCisjIEF0IGxlYXN0IG9uZSBlbXVsYXRpb24gbXVzdCBiZSBzZWxlY3RlZAorIworQ09ORklHX0ZQRV9OV0ZQRT15CisjIENPTkZJR19GUEVfTldGUEVfWFAgaXMgbm90IHNldAorIyBDT05GSUdfRlBFX0ZBU1RGUEUgaXMgbm90IHNldAorCisjCisjIFVzZXJzcGFjZSBiaW5hcnkgZm9ybWF0cworIworQ09ORklHX0JJTkZNVF9FTEY9eQorIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfQU9VVD15CisjIENPTkZJR19CSU5GTVRfQU9VVCBpcyBub3Qgc2V0CisjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CisKKyMKKyMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCisjCisjIENPTkZJR19QTSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworQ09ORklHX1BBQ0tFVD15CisjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CitDT05GSUdfVU5JWD15CisjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUPXkKKyMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAorQ09ORklHX0lQX0ZJQl9IQVNIPXkKK0NPTkZJR19JUF9QTlA9eQorIyBDT05GSUdfSVBfUE5QX0RIQ1AgaXMgbm90IHNldAorIyBDT05GSUdfSVBfUE5QX0JPT1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9ESUFHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19UQ1BfQ09OR19DVUJJQz15CitDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCisjIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAorIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFggaXMgbm90IHNldAorIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxNTQgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCisjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJUkVMRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAorCisjCisjIERldmljZSBEcml2ZXJzCisjCisKKyMKKyMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucworIworQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX1NUQU5EQUxPTkUgaXMgbm90IHNldAorIyBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRCBpcyBub3Qgc2V0CitDT05GSUdfRldfTE9BREVSPXkKK0NPTkZJR19GSVJNV0FSRV9JTl9LRVJORUw9eQorQ09ORklHX0VYVFJBX0ZJUk1XQVJFPSIiCisjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CitDT05GSUdfTVREPXkKKyMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NPTkNBVD15CitDT05GSUdfTVREX1BBUlRJVElPTlM9eQorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BRlNfUEFSVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CisKKyMKKyMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKKyMKK0NPTkZJR19NVERfQ0hBUj15CitDT05GSUdfTVREX0JMS0RFVlM9eQorQ09ORklHX01URF9CTE9DSz15CisjIENPTkZJR19GVEwgaXMgbm90IHNldAorIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKKworIworIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycworIworIyBDT05GSUdfTVREX0NGSSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0kxPXkKK0NPTkZJR19NVERfQ0ZJX0kyPXkKKyMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0CisKKyMKKyMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcworIworIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAorCisjCisjIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTVREX0RBVEFGTEFTSCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTTI1UDgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKKworIworIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX05BTkQ9eQorQ09ORklHX01URF9OQU5EX1ZFUklGWV9XUklURT15CisjIENPTkZJR19NVERfTkFORF9FQ0NfU01DIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX01VU0VVTV9JRFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfSDE5MDAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfR1BJTyBpcyBub3Qgc2V0CitDT05GSUdfTVREX05BTkRfSURTPXkKKyMgQ09ORklHX01URF9OQU5EX0RJU0tPTkNISVAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfU0hBUlBTTCBpcyBub3Qgc2V0CitDT05GSUdfTVREX05BTkRfUFhBM3h4PXkKK0NPTkZJR19NVERfTkFORF9QWEEzeHhfQlVJTFRJTj15CisjIENPTkZJR19NVERfTkFORF9OQU5EU0lNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX1BMQVRGT1JNIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfT05FTkFORD15CitDT05GSUdfTVREX09ORU5BTkRfVkVSSUZZX1dSSVRFPXkKK0NPTkZJR19NVERfT05FTkFORF9HRU5FUklDPXkKKyMgQ09ORklHX01URF9PTkVOQU5EX09UUCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT05FTkFORF8yWF9QUk9HUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PTkVOQU5EX1NJTSBpcyBub3Qgc2V0CisKKyMKKyMgTFBERFIgZmxhc2ggbWVtb3J5IGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9MUEREUiBpcyBub3Qgc2V0CisKKyMKKyMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCisjCisjIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVY9eQorIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0xPT1A9eQorIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1JBTT15CitDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKK0NPTkZJR19CTEtfREVWX1JBTV9TSVpFPTQwOTYKKyMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAorIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX01HX0RJU0sgaXMgbm90IHNldAorIyBDT05GSUdfTUlTQ19ERVZJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lERT15CisjIENPTkZJR19JREUgaXMgbm90IHNldAorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RNQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAorIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01EIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZJQ0VTPXkKKyMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAorIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZFVEggaXMgbm90IHNldAorIyBDT05GSUdfUEhZTElCIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfRVRIRVJORVQ9eQorQ09ORklHX01JST15CisjIENPTkZJR19BWDg4Nzk2IGlzIG5vdCBzZXQKK0NPTkZJR19TTUM5MVg9eQorIyBDT05GSUdfRE05MDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQzI4SjYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VUSE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQzkxMVggaXMgbm90IHNldAorIyBDT05GSUdfU01TQzkxMVggaXMgbm90IHNldAorIyBDT05GSUdfRE5FVCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKKworIworIyBXaXJlbGVzcyBMQU4KKyMKKyMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CisKKyMKKyMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycworIworIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQUCBpcyBub3Qgc2V0CisjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lTRE4gaXMgbm90IHNldAorCisjCisjIElucHV0IGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfSU5QVVQ9eQorIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKKworIworIyBVc2VybGFuZCBpbnRlcmZhY2VzCisjCitDT05GSUdfSU5QVVRfTU9VU0VERVY9eQorIyBDT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVggaXMgbm90IHNldAorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKKyMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgRGV2aWNlIERyaXZlcnMKKyMKK0NPTkZJR19JTlBVVF9LRVlCT0FSRD15CisjIENPTkZJR19LRVlCT0FSRF9BVEtCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX0xNODMyMyBpcyBub3Qgc2V0CitDT05GSUdfS0VZQk9BUkRfUFhBMjd4PXkKK0NPTkZJR19LRVlCT0FSRF9QWEE5MzBfUk9UQVJZPXkKK0NPTkZJR19LRVlCT0FSRF9HUElPPXkKK0NPTkZJR19JTlBVVF9NT1VTRT15CitDT05GSUdfTU9VU0VfUFMyPXkKK0NPTkZJR19NT1VTRV9QUzJfQUxQUz15CitDT05GSUdfTU9VU0VfUFMyX0xPR0lQUzJQUD15CitDT05GSUdfTU9VU0VfUFMyX1NZTkFQVElDUz15CitDT05GSUdfTU9VU0VfUFMyX1RSQUNLUE9JTlQ9eQorIyBDT05GSUdfTU9VU0VfUFMyX0VMQU5URUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX1BTMl9UT1VDSEtJVCBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9TRVJJQUwgaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfVlNYWFhBQSBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9HUElPIGlzIG5vdCBzZXQKK0NPTkZJR19NT1VTRV9QWEE5MzBfVFJLQkFMTD15CisjIENPTkZJR19NT1VTRV9TWU5BUFRJQ1NfSTJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU49eQorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fQURTNzg0NiBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9BRDc4NzcgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fQUQ3ODc5X0kyQyBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9BRDc4NzlfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0FENzg3OSBpcyBub3Qgc2V0CitDT05GSUdfVE9VQ0hTQ1JFRU5fREE5MDM0PXkKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0VFVEkgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fRlVKSVRTVSBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9HVU5aRSBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9FTE8gaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fV0FDT01fVzgwMDEgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fTVRPVUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0lORVhJTyBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9NSzcxMiBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9QRU5NT1VOVCBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSFJJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1RPVUNIV0lOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1RPVUNISVQyMTMgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVFNDMjAwNyBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9XOTBYOTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIEkvTyBwb3J0cworIworQ09ORklHX1NFUklPPXkKK0NPTkZJR19TRVJJT19TRVJQT1JUPXkKK0NPTkZJR19TRVJJT19MSUJQUzI9eQorIyBDT05GSUdfU0VSSU9fUkFXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworQ09ORklHX1ZUPXkKK0NPTkZJR19DT05TT0xFX1RSQU5TTEFUSU9OUz15CitDT05GSUdfVlRfQ09OU09MRT15CitDT05GSUdfSFdfQ09OU09MRT15CisjIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkcgaXMgbm90IHNldAorQ09ORklHX0RFVktNRU09eQorIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgZHJpdmVycworIworIyBDT05GSUdfU0VSSUFMXzgyNTAgaXMgbm90IHNldAorCisjCisjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKKyMKKyMgQ09ORklHX1NFUklBTF9NQVgzMTAwIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJQUxfUFhBPXkKK0NPTkZJR19TRVJJQUxfUFhBX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF9DT1JFPXkKK0NPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKK0NPTkZJR19VTklYOThfUFRZUz15CisjIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAorIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAorIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKK0NPTkZJR19JMkM9eQorQ09ORklHX0kyQ19CT0FSRElORk89eQorIyBDT05GSUdfSTJDX0NIQVJERVYgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0hFTFBFUl9BVVRPIGlzIG5vdCBzZXQKKworIworIyBJMkMgQWxnb3JpdGhtcworIworIyBDT05GSUdfSTJDX0FMR09CSVQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMR09QQ0YgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMR09QQ0EgaXMgbm90IHNldAorCisjCisjIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAorIworCisjCisjIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQorIworIyBDT05GSUdfSTJDX0RFU0lHTldBUkUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0dQSU8gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CitDT05GSUdfSTJDX1BYQT15CisjIENPTkZJR19JMkNfUFhBX1NMQVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAorCisjCisjIEV4dGVybmFsIEkyQy9TTUJ1cyBhZGFwdGVyIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0CisKKyMKKyMgT3RoZXIgSTJDL1NNQnVzIGJ1cyBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfUENBX1BMQVRGT1JNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CitDT05GSUdfU1BJPXkKKyMgQ09ORklHX1NQSV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfU1BJX01BU1RFUj15CisKKyMKKyMgU1BJIE1hc3RlciBDb250cm9sbGVyIERyaXZlcnMKKyMKKyMgQ09ORklHX1NQSV9CSVRCQU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9HUElPIGlzIG5vdCBzZXQKK0NPTkZJR19TUElfUFhBMlhYPXkKKworIworIyBTUEkgUHJvdG9jb2wgTWFzdGVycworIworIyBDT05GSUdfU1BJX1NQSURFViBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfVExFNjJYMCBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9SRVFVSVJFX0dQSU9MSUI9eQorQ09ORklHX0dQSU9MSUI9eQorIyBDT05GSUdfREVCVUdfR1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX1NZU0ZTIGlzIG5vdCBzZXQKKworIworIyBNZW1vcnkgbWFwcGVkIEdQSU8gZXhwYW5kZXJzOgorIworCisjCisjIEkyQyBHUElPIGV4cGFuZGVyczoKKyMKK0NPTkZJR19HUElPX01BWDczMlg9eQorQ09ORklHX0dQSU9fUENBOTUzWD15CitDT05GSUdfR1BJT19QQ0Y4NTdYPXkKKworIworIyBQQ0kgR1BJTyBleHBhbmRlcnM6CisjCisKKyMKKyMgU1BJIEdQSU8gZXhwYW5kZXJzOgorIworQ09ORklHX0dQSU9fTUFYNzMwMT15CisjIENPTkZJR19HUElPX01DUDIzUzA4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1cxIGlzIG5vdCBzZXQKK0NPTkZJR19QT1dFUl9TVVBQTFk9eQorQ09ORklHX1BPV0VSX1NVUFBMWV9ERUJVRz15CitDT05GSUdfUERBX1BPV0VSPXkKKyMgQ09ORklHX0JBVFRFUllfRFMyNzYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBVFRFUllfQlEyN3gwMCBpcyBub3Qgc2V0CitDT05GSUdfQkFUVEVSWV9EQTkwMzA9eQorIyBDT05GSUdfQkFUVEVSWV9NQVgxNzA0MCBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorQ09ORklHX1NTQl9QT1NTSUJMRT15CisKKyMKKyMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCisjCisjIENPTkZJR19TU0IgaXMgbm90IHNldAorCisjCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfSFRDX0VHUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfVFBTNjUwMTAgaXMgbm90IHNldAorIyBDT05GSUdfVFdMNDAzMF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UN0w2NlhCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UQzYzODdYQiBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVEM2MzkzWEIgaXMgbm90IHNldAorQ09ORklHX1BNSUNfREE5MDNYPXkKKyMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VaWF9QQ0FQIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKK0NPTkZJR19GQj15CisjIENPTkZJR19GSVJNV0FSRV9FRElEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0REQyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9CT09UX1ZFU0FfU1VQUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfRkJfQ0ZCX0ZJTExSRUNUPXkKK0NPTkZJR19GQl9DRkJfQ09QWUFSRUE9eQorQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9eQorIyBDT05GSUdfRkJfQ0ZCX1JFVl9QSVhFTFNfSU5fQllURSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfRklMTFJFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0NPUFlBUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19JTUFHRUJMSVQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfRk9SRUlHTl9FTkRJQU4gaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0ZPUFMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1ZHQUxJQiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NQUNNT0RFUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9CQUNLTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTU9ERV9IRUxQRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1RJTEVCTElUVElORyBpcyBub3Qgc2V0CisKKyMKKyMgRnJhbWUgYnVmZmVyIGhhcmR3YXJlIGRyaXZlcnMKKyMKKyMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9QWEE9eQorIyBDT05GSUdfRkJfUFhBX09WRVJMQVkgaXMgbm90IHNldAorIyBDT05GSUdfRkJfUFhBX1NNQVJUUEFORUwgaXMgbm90IHNldAorIyBDT05GSUdfRkJfUFhBX1BBUkFNRVRFUlMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUJYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1cxMDAgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NRVRST05PTUUgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUI4NjJYWCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9CUk9BRFNIRUVUIGlzIG5vdCBzZXQKK0NPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQ9eQorQ09ORklHX0xDRF9DTEFTU19ERVZJQ0U9eQorIyBDT05GSUdfTENEX0xUVjM1MFFWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xDRF9JTEk5MzIwIGlzIG5vdCBzZXQKK0NPTkZJR19MQ0RfVERPMjRNPXkKKyMgQ09ORklHX0xDRF9WR0cyNDMyQTQgaXMgbm90IHNldAorIyBDT05GSUdfTENEX1BMQVRGT1JNIGlzIG5vdCBzZXQKK0NPTkZJR19CQUNLTElHSFRfQ0xBU1NfREVWSUNFPXkKKyMgQ09ORklHX0JBQ0tMSUdIVF9HRU5FUklDIGlzIG5vdCBzZXQKK0NPTkZJR19CQUNLTElHSFRfUFdNPXkKK0NPTkZJR19CQUNLTElHSFRfREE5MDNYPXkKKworIworIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAorIworIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAorQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQorQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEU9eQorQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfREVURUNUX1BSSU1BUlk9eQorIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ST1RBVElPTiBpcyBub3Qgc2V0CitDT05GSUdfRk9OVFM9eQorIyBDT05GSUdfRk9OVF84eDggaXMgbm90IHNldAorIyBDT05GSUdfRk9OVF84eDE2IGlzIG5vdCBzZXQKK0NPTkZJR19GT05UXzZ4MTE9eQorIyBDT05GSUdfRk9OVF83eDE0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZPTlRfUEVBUkxfOHg4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZPTlRfQUNPUk5fOHg4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZPTlRfTUlOSV80eDYgaXMgbm90IHNldAorIyBDT05GSUdfRk9OVF9TVU44eDE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZPTlRfU1VOMTJ4MjIgaXMgbm90IHNldAorIyBDT05GSUdfRk9OVF8xMHgxOCBpcyBub3Qgc2V0CitDT05GSUdfTE9HTz15CitDT05GSUdfTE9HT19MSU5VWF9NT05PPXkKK0NPTkZJR19MT0dPX0xJTlVYX1ZHQTE2PXkKK0NPTkZJR19MT0dPX0xJTlVYX0NMVVQyMjQ9eQorIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1NVUFBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NVUFBPUlQgaXMgbm90IHNldAorQ09ORklHX01NQz15CisjIENPTkZJR19NTUNfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX1VOU0FGRV9SRVNVTUUgaXMgbm90IHNldAorCisjCisjIE1NQy9TRC9TRElPIENhcmQgRHJpdmVycworIworQ09ORklHX01NQ19CTE9DSz15CitDT05GSUdfTU1DX0JMT0NLX0JPVU5DRT15CisjIENPTkZJR19TRElPX1VBUlQgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX1RFU1QgaXMgbm90IHNldAorCisjCisjIE1NQy9TRC9TRElPIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCisjCitDT05GSUdfTU1DX1BYQT15CisjIENPTkZJR19NTUNfU0RIQ0kgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX1NQSSBpcyBub3Qgc2V0CisjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKK0NPTkZJR19ORVdfTEVEUz15CitDT05GSUdfTEVEU19DTEFTUz1tCisKKyMKKyMgTEVEIGRyaXZlcnMKKyMKKyMgQ09ORklHX0xFRFNfUENBOTUzMiBpcyBub3Qgc2V0CitDT05GSUdfTEVEU19HUElPPW0KK0NPTkZJR19MRURTX0dQSU9fUExBVEZPUk09eQorIyBDT05GSUdfTEVEU19MUDU1MjEgaXMgbm90IHNldAorIyBDT05GSUdfTEVEU19QQ0E5NTVYIGlzIG5vdCBzZXQKK0NPTkZJR19MRURTX0RBOTAzWD1tCisjIENPTkZJR19MRURTX0RBQzEyNFMwODUgaXMgbm90IHNldAorIyBDT05GSUdfTEVEU19QV00gaXMgbm90IHNldAorIyBDT05GSUdfTEVEU19CRDI4MDIgaXMgbm90IHNldAorCisjCisjIExFRCBUcmlnZ2VycworIworQ09ORklHX0xFRFNfVFJJR0dFUlM9eQorQ09ORklHX0xFRFNfVFJJR0dFUl9USU1FUj1tCitDT05GSUdfTEVEU19UUklHR0VSX0hFQVJUQkVBVD1tCitDT05GSUdfTEVEU19UUklHR0VSX0JBQ0tMSUdIVD1tCitDT05GSUdfTEVEU19UUklHR0VSX0dQSU89bQorQ09ORklHX0xFRFNfVFJJR0dFUl9ERUZBVUxUX09OPW0KKworIworIyBpcHRhYmxlcyB0cmlnZ2VyIGlzIHVuZGVyIE5ldGZpbHRlciBjb25maWcgKExFRCB0YXJnZXQpCisjCitDT05GSUdfUlRDX0xJQj15CisjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAorIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKK0NPTkZJR19SRUdVTEFUT1I9eQorQ09ORklHX1JFR1VMQVRPUl9ERUJVRz15CisjIENPTkZJR19SRUdVTEFUT1JfRklYRURfVk9MVEFHRSBpcyBub3Qgc2V0CitDT05GSUdfUkVHVUxBVE9SX1ZJUlRVQUxfQ09OU1VNRVI9eQorIyBDT05GSUdfUkVHVUxBVE9SX1VTRVJTUEFDRV9DT05TVU1FUiBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1JfQlEyNDAyMiBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1JfTUFYMTU4NiBpcyBub3Qgc2V0CitDT05GSUdfUkVHVUxBVE9SX0RBOTAzWD15CisjIENPTkZJR19SRUdVTEFUT1JfTFAzOTcxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CisjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKKworIworIyBGaWxlIHN5c3RlbXMKKyMKKyMgQ09ORklHX0VYVDJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfRlNfUE9TSVhfQUNMPXkKKyMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GSUxFX0xPQ0tJTkc9eQorQ09ORklHX0ZTTk9USUZZPXkKK0NPTkZJR19ETk9USUZZPXkKKyMgQ09ORklHX0lOT1RJRlkgaXMgbm90IHNldAorQ09ORklHX0lOT1RJRllfVVNFUj15CisjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKKworIworIyBDYWNoZXMKKyMKKyMgQ09ORklHX0ZTQ0FDSEUgaXMgbm90IHNldAorCisjCisjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKKworIworIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19WRkFUX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1BST0NfU1lTQ1RMPXkKK0NPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CitDT05GSUdfU1lTRlM9eQorIyBDT05GSUdfVE1QRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKKyMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX0ZTPXkKK0NPTkZJR19KRkZTMl9GU19ERUJVRz0wCitDT05GSUdfSkZGUzJfRlNfV1JJVEVCVUZGRVI9eQorQ09ORklHX0pGRlMyX0ZTX1dCVUZfVkVSSUZZPXkKKyMgQ09ORklHX0pGRlMyX1NVTU1BUlkgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfRlNfWEFUVFIgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlM9eQorQ09ORklHX0pGRlMyX1pMSUI9eQorQ09ORklHX0pGRlMyX0xaTz15CitDT05GSUdfSkZGUzJfUlRJTUU9eQorQ09ORklHX0pGRlMyX1JVQklOPXkKKyMgQ09ORklHX0pGRlMyX0NNT0RFX05PTkUgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX0NNT0RFX1BSSU9SSVRZPXkKKyMgQ09ORklHX0pGRlMyX0NNT0RFX1NJWkUgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfQ01PREVfRkFWT1VSTFpPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0CisjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKK0NPTkZJR19ORlNfRlM9eQorQ09ORklHX05GU19WMz15CitDT05GSUdfTkZTX1YzX0FDTD15CitDT05GSUdfTkZTX1Y0PXkKKyMgQ09ORklHX05GU19WNF8xIGlzIG5vdCBzZXQKK0NPTkZJR19ST09UX05GUz15CisjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKK0NPTkZJR19MT0NLRD15CitDT05GSUdfTE9DS0RfVjQ9eQorQ09ORklHX05GU19BQ0xfU1VQUE9SVD15CitDT05GSUdfTkZTX0NPTU1PTj15CitDT05GSUdfU1VOUlBDPXkKK0NPTkZJR19TVU5SUENfR1NTPXkKK0NPTkZJR19SUENTRUNfR1NTX0tSQjU9eQorIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CisjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19NU0RPU19QQVJUSVRJT049eQorQ09ORklHX05MUz15CitDT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKKyMgQ09ORklHX05MU19DT0RFUEFHRV80MzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19BU0NJSSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV83IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19VVEY4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0RMTSBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIGhhY2tpbmcKKyMKK0NPTkZJR19QUklOVEtfVElNRT15CitDT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15CitDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQorQ09ORklHX0ZSQU1FX1dBUk49MTAyNAorQ09ORklHX01BR0lDX1NZU1JRPXkKKyMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0tFUk5FTD15CitDT05GSUdfREVCVUdfU0hJUlE9eQorQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKK0NPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQz15CitDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUNfVkFMVUU9MQorQ09ORklHX0RFVEVDVF9IVU5HX1RBU0s9eQorIyBDT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQyBpcyBub3Qgc2V0CitDT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQ19WQUxVRT0wCisjIENPTkZJR19TQ0hFRF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfUFJFRU1QVD15CisjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfU1BJTkxPQ0s9eQorIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUD15CisjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfQlVHVkVSQk9TRT15CisjIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1dSSVRFQ09VTlQgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX01FTU9SWV9JTklUPXkKKyMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBR0VfUE9JU09OSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKKyMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0FSQ0hfS0dEQj15CisjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tNRU1DSEVDSyBpcyBub3Qgc2V0CitDT05GSUdfQVJNX1VOV0lORD15CitDT05GSUdfREVCVUdfVVNFUj15CisjIENPTkZJR19ERUJVR19FUlJPUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTEwgaXMgbm90IHNldAorCisjCisjIFNlY3VyaXR5IG9wdGlvbnMKKyMKKyMgQ09ORklHX0tFWVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPPXkKKworIworIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKKyMKKyMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fQUxHQVBJPXkKK0NPTkZJR19DUllQVE9fQUxHQVBJMj15CitDT05GSUdfQ1JZUFRPX0FFQUQyPXkKK0NPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKK0NPTkZJR19DUllQVE9fQkxLQ0lQSEVSMj15CitDT05GSUdfQ1JZUFRPX0hBU0g9eQorQ09ORklHX0NSWVBUT19IQVNIMj15CitDT05GSUdfQ1JZUFRPX1JORzI9eQorQ09ORklHX0NSWVBUT19QQ09NUD15CitDT05GSUdfQ1JZUFRPX01BTkFHRVI9eQorQ09ORklHX0NSWVBUT19NQU5BR0VSMj15CisjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19XT1JLUVVFVUU9eQorIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhCisjCisjIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKKworIworIyBCbG9jayBtb2RlcworIworQ09ORklHX0NSWVBUT19DQkM9eQorIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19FQ0IgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKKworIworIyBIYXNoIG1vZGVzCisjCisjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisKKyMKKyMgRGlnZXN0CisjCisjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19NRDU9eQorIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQxMjggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDE2MCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQzMjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKKworIworIyBDaXBoZXJzCisjCisjIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fREVTPXkKKyMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0FMU0EyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKKworIworIyBDb21wcmVzc2lvbgorIworIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1pMSUIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0CisKKyMKKyMgUmFuZG9tIE51bWJlciBHZW5lcmF0aW9uCisjCisjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fSFcgaXMgbm90IHNldAorIyBDT05GSUdfQklOQVJZX1BSSU5URiBpcyBub3Qgc2V0CisKKyMKKyMgTGlicmFyeSByb3V0aW5lcworIworQ09ORklHX0JJVFJFVkVSU0U9eQorQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15CisjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAorQ09ORklHX0NSQzMyPXkKKyMgQ09ORklHX0NSQzcgaXMgbm90IHNldAorIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKK0NPTkZJR19aTElCX0lORkxBVEU9eQorQ09ORklHX1pMSUJfREVGTEFURT15CitDT05GSUdfTFpPX0NPTVBSRVNTPXkKK0NPTkZJR19MWk9fREVDT01QUkVTUz15CitDT05GSUdfSEFTX0lPTUVNPXkKK0NPTkZJR19IQVNfSU9QT1JUPXkKK0NPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19OTEFUVFI9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy91MzAwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvdTMwMF9kZWZjb25maWcKaW5kZXggN2Q2MWFlNi4uOTUzYmEwMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy91MzAwX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL3UzMDBfZGVmY29uZmlnCkBAIC0xLDE0ICsxLDE0IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmMzCi0jIFRodSBKdWwgMTYgMjM6MzY6MTAgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNQorIyBTYXQgT2N0IDE3IDIzOjMyOjI0IDIwMDkKICMKIENPTkZJR19BUk09eQogQ09ORklHX1NZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OPXkKIENPTkZJR19HRU5FUklDX0dQSU89eQogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15Ci1DT05GSUdfTU1VPXkKK0NPTkZJR19IQVZFX1RDTT15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CkBAIC00NCwxMSArNDQsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldApAQCAtODAsMTcgKzgxLDE1IEBACiAjIENPTkZJR19BSU8gaXMgbm90IHNldAogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCiAjIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfU0xVQl9ERUJVRz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKQEAgLTEzMyw2ICsxMzIsNyBAQAogIwogIyBTeXN0ZW0gVHlwZQogIworQ09ORklHX01NVT15CiAjIENPTkZJR19BUkNIX0FBRUMyMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1JFQUxWSUVXIGlzIG5vdCBzZXQKQEAgLTE0Nyw2ICsxNDcsNyBAQAogIyBDT05GSUdfQVJDSF9TVE1QM1hYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX05FVFggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX05PTUFESUsgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9JT1AxM1hYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSU9QMzJYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSU9QMzNYIGlzIG5vdCBzZXQKQEAgLTE2OSwxMSArMTcwLDEzIEBACiAjIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9TM0M2NFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUzVQQzFYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1NIQVJLIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfTEg3QTQwWCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9VMzAwPXkKICMgQ09ORklHX0FSQ0hfREFWSU5DSSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX09NQVAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9CQ01SSU5HIGlzIG5vdCBzZXQKIAogIwogIyBTVC1Fcmljc3NvbiBBQiBVMzAwL1UzMzAvVTMzNS9VMzY1IFBsYXRmb3JtCkBAIC0xOTUsNiArMTk4LDcgQEAKIENPTkZJR19NQUNIX1UzMDBfRFVBTF9SQU09eQogQ09ORklHX1UzMDBfREVCVUc9eQogIyBDT05GSUdfTUFDSF9VMzAwX1NFTUlfSVNfU0hBUkVEIGlzIG5vdCBzZXQKK0NPTkZJR19NQUNIX1UzMDBfU1BJRFVNTVk9eQogCiAjCiAjIEFsbCB0aGUgc2V0dGluZ3MgYmVsb3cgbXVzdCBtYXRjaCB0aGUgYm9vdGxvYWRlcidzIHNldHRpbmdzCkBAIC0yMDcsNyArMjExLDcgQEAKIENPTkZJR19DUFVfQVJNOTI2VD15CiBDT05GSUdfQ1BVXzMydjU9eQogQ09ORklHX0NQVV9BQlJUX0VWNVRKPXkKLUNPTkZJR19DUFVfUEFCUlRfTk9JRkFSPXkKK0NPTkZJR19DUFVfUEFCUlRfTEVHQUNZPXkKIENPTkZJR19DUFVfQ0FDSEVfVklWVD15CiBDT05GSUdfQ1BVX0NPUFlfVjRXQj15CiBDT05GSUdfQ1BVX1RMQl9WNFdCST15CkBAIC0yMjIsNiArMjI2LDcgQEAKICMgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfRENBQ0hFX1dSSVRFVEhST1VHSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfQ0FDSEVfUk9VTkRfUk9CSU4gaXMgbm90IHNldAorQ09ORklHX0FSTV9MMV9DQUNIRV9TSElGVD01CiBDT05GSUdfQVJNX1ZJQz15CiBDT05GSUdfQVJNX1ZJQ19OUj0yCiBDT05GSUdfQ09NTU9OX0NMS0RFVj15CkBAIC0yNDUsNiArMjUwLDggQEAKICMgQ09ORklHX1ZNU1BMSVRfMkcgaXMgbm90IHNldAogIyBDT05GSUdfVk1TUExJVF8xRyBpcyBub3Qgc2V0CiBDT05GSUdfUEFHRV9PRkZTRVQ9MHhDMDAwMDAwMAorIyBDT05GSUdfUFJFRU1QVF9OT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKIENPTkZJR19QUkVFTVBUPXkKIENPTkZJR19IWj0xMDAKIENPTkZJR19BRUFCST15CkBAIC0yNjUsNiArMjcyLDcgQEAKIENPTkZJR19WSVJUX1RPX0JVUz15CiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19BTElHTk1FTlRfVFJBUD15CiAjIENPTkZJR19VQUNDRVNTX1dJVEhfTUVNQ1BZIGlzIG5vdCBzZXQKQEAgLTMxMyw2ICszMjEsNyBAQAogIyBDT05GSUdfUE1fREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU1VTUEVORCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUE1fRU1VTEFUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNX1JVTlRJTUUgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15CiBDT05GSUdfTkVUPXkKIApAQCAtMzUxLDYgKzM2MCw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtMzkxLDYgKzQwMSw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiAjIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEIGlzIG5vdCBzZXQKIENPTkZJR19GV19MT0FERVI9eQpAQCAtNDAyLDkgKzQxMyw5IEBACiAjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQogIyBDT05GSUdfTVREX0FGU19QQVJUUyBpcyBub3Qgc2V0CkBAIC00NTMsNiArNDY0LDcgQEAKICMKICMgQ09ORklHX01URF9EQVRBRkxBU0ggaXMgbm90IHNldAogIyBDT05GSUdfTVREX00yNVA4MCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfU1NUMjVMIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0CkBAIC01MjAsNiArNTMyLDcgQEAKICMgQ09ORklHX01EIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVklDRVMgaXMgbm90IHNldAogIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CiAKICMKICMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKQEAgLTU0MCwxMiArNTUzLDE2IEBACiAjIElucHV0IERldmljZSBEcml2ZXJzCiAjCiBDT05GSUdfSU5QVVRfS0VZQk9BUkQ9eQorIyBDT05GSUdfS0VZQk9BUkRfQURQNTU4OCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9BVEtCRCBpcyBub3Qgc2V0CisjIENPTkZJR19RVDIxNjAgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfR1BJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9NQVRSSVggaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfTE04MzIzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX01BWDczNTkgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX09QRU5DT1JFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldApAQCAtNTk3LDYgKzYxNCw3IEBACiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogIyBDT05GSUdfSTJDX0NIQVJERVYgaXMgbm90IHNldAogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiAKQEAgLTYyOSw5ICs2NDcsNiBAQAogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKICMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKQEAgLTY1MywxNiArNjY4LDIxIEBACiAjCiAjIENPTkZJR19TUElfU1BJREVWIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSV9UTEU2MlgwIGlzIG5vdCBzZXQKKworIworIyBQUFMgc3VwcG9ydAorIworIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKIENPTkZJR19QT1dFUl9TVVBQTFk9eQogIyBDT05GSUdfUE9XRVJfU1VQUExZX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1BEQV9QT1dFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQVRURVJZX0RTMjc2MCBpcyBub3Qgc2V0CisjIENPTkZJR19CQVRURVJZX0RTMjc4MiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQVRURVJZX0JRMjd4MDAgaXMgbm90IHNldAogIyBDT05GSUdfQkFUVEVSWV9NQVgxNzA0MCBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogQ09ORklHX1dBVENIRE9HPXkKICMgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUIGlzIG5vdCBzZXQKIApAQCAtNjkwLDEwICs3MTAsMjQgQEAKICMgQ09ORklHX01GRF9UQzYzODdYQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9NQzEzNzgzIGlzIG5vdCBzZXQKIENPTkZJR19BQjMxMDBfQ09SRT15CitDT05GSUdfQUIzMTAwX09UUD15CiAjIENPTkZJR19FWlhfUENBUCBpcyBub3Qgc2V0CitDT05GSUdfUkVHVUxBVE9SPXkKKyMgQ09ORklHX1JFR1VMQVRPUl9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1JfRklYRURfVk9MVEFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1JfVklSVFVBTF9DT05TVU1FUiBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1JfVVNFUlNQQUNFX0NPTlNVTUVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUl9CUTI0MDIyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUl9NQVgxNTg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUl9MUDM5NzEgaXMgbm90IHNldAorQ09ORklHX1JFR1VMQVRPUl9BQjMxMDA9eQorIyBDT05GSUdfUkVHVUxBVE9SX1RQUzY1MDIzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUl9UUFM2NTA3WCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwpAQCAtNzkyLDkgKzgyNiwxMCBAQAogIwogQ09ORklHX01NQ19BUk1NTUNJPXkKICMgQ09ORklHX01NQ19TREhDSSBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfQVQ5MSBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfQVRNRUxNQ0kgaXMgbm90IHNldAogIyBDT05GSUdfTU1DX1NQSSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKIENPTkZJR19ORVdfTEVEUz15CiBDT05GSUdfTEVEU19DTEFTUz15CiAKQEAgLTgyMCwxMCArODU1LDEwIEBACiAjCiAjIGlwdGFibGVzIHRyaWdnZXIgaXMgdW5kZXIgTmV0ZmlsdGVyIGNvbmZpZyAoTEVEIHRhcmdldCkKICMKKyMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAogQ09ORklHX1JUQ19MSUI9eQogQ09ORklHX1JUQ19DTEFTUz15Ci1DT05GSUdfUlRDX0hDVE9TWVM9eQotQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKKyMgQ09ORklHX1JUQ19IQ1RPU1lTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0CiAKICMKQEAgLTg2Myw2ICs4OTgsNyBAQAogIyBDT05GSUdfUlRDX0RSVl9SOTcwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1JTNUMzNDggaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9EUzMyMzQgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0YyMTIzIGlzIG5vdCBzZXQKIAogIwogIyBQbGF0Zm9ybSBSVEMgZHJpdmVycwpAQCAtODc4LDI3ICs5MTQsMjUgQEAKICMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfQlE0ODAyIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAorQ09ORklHX1JUQ19EUlZfQUIzMTAwPXkKIAogIwogIyBvbi1DUFUgUlRDIGRyaXZlcnMKICMKICMgQ09ORklHX1JUQ19EUlZfUEwwMzAgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9QTDAzMSBpcyBub3Qgc2V0CitDT05GSUdfUlRDX0RSVl9DT0g5MDEzMzE9eQogQ09ORklHX0RNQURFVklDRVM9eQogCiAjCiAjIERNQSBEZXZpY2VzCiAjCiAjIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKLUNPTkZJR19SRUdVTEFUT1I9eQotIyBDT05GSUdfUkVHVUxBVE9SX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFR1VMQVRPUl9GSVhFRF9WT0xUQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFR1VMQVRPUl9WSVJUVUFMX0NPTlNVTUVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFR1VMQVRPUl9VU0VSU1BBQ0VfQ09OU1VNRVIgaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SX0JRMjQwMjIgaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SX01BWDE1ODYgaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SX0xQMzk3MSBpcyBub3Qgc2V0CiAjIENPTkZJR19VSU8gaXMgbm90IHNldAorCisjCisjIFRJIFZMWU5RCisjCiAjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKIAogIwpAQCAtOTEzLDYgKzk0Nyw3IEBACiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKICMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldApAQCAtOTc1LDcgKzEwMTAsNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVMgaXMgbm90IHNldAogCiAjCkBAIC0xMDMzLDYgKzEwNjcsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTA2NiwxMSArMTEwMSwxMyBAQAogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAogIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTExMjEsNiArMTE1OCw3IEBACiAjIENPTkZJR19DUkMzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19BTExPQ0FUT1I9eQogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL3hjZXBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy94Y2VwX2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zM2JiNzI1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vY29uZmlncy94Y2VwX2RlZmNvbmZpZwpAQCAtMCwwICsxLDExMjkgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMS1yYzYKKyMgVGh1IEF1ZyAyMCAwOTowMjozNyAyMDA5CisjCitDT05GSUdfQVJNPXkKK0NPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15CitDT05GSUdfR0VORVJJQ19HUElPPXkKK0NPTkZJR19HRU5FUklDX1RJTUU9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQorQ09ORklHX01NVT15CitDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CitDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKK0NPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CitDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKK0NPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKK0NPTkZJR19IQVJESVJRU19TV19SRVNFTkQ9eQorQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQorQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19BUkNIX01URF9YSVA9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CitDT05GSUdfVkVDVE9SU19CQVNFPTB4ZmZmZjAwMDAKK0NPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCitDT05GSUdfQ09OU1RSVUNUT1JTPXkKKworIworIyBHZW5lcmFsIHNldHVwCisjCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKK0NPTkZJR19MT0NBTFZFUlNJT049Ii54Y2VwLWl0ZWNoIgorIyBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE8gaXMgbm90IHNldAorQ09ORklHX1NZU1ZJUEM9eQorQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKKyMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CitDT05GSUdfQlNEX1BST0NFU1NfQUNDVD15CisjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUX1YzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisKKyMKKyMgUkNVIFN1YnN5c3RlbQorIworQ09ORklHX0NMQVNTSUNfUkNVPXkKKyMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19JS0NPTkZJRz15CitDT05GSUdfSUtDT05GSUdfUFJPQz15CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNgorIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CisjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lOSVRSRD15CitDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorQ09ORklHX1JEX0daSVA9eQorIyBDT05GSUdfUkRfQlpJUDIgaXMgbm90IHNldAorIyBDT05GSUdfUkRfTFpNQSBpcyBub3Qgc2V0CitDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQorQ09ORklHX1NZU0NUTD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQorQ09ORklHX0VNQkVEREVEPXkKKyMgQ09ORklHX1VJRDE2IGlzIG5vdCBzZXQKK0NPTkZJR19TWVNDVExfU1lTQ0FMTD15CitDT05GSUdfS0FMTFNZTVM9eQorIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAorQ09ORklHX0hPVFBMVUc9eQorQ09ORklHX1BSSU5USz15CitDT05GSUdfQlVHPXkKK0NPTkZJR19FTEZfQ09SRT15CitDT05GSUdfQkFTRV9GVUxMPXkKK0NPTkZJR19GVVRFWD15CitDT05GSUdfRVBPTEw9eQorQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19USU1FUkZEPXkKK0NPTkZJR19FVkVOVEZEPXkKKyMgQ09ORklHX1NITUVNIGlzIG5vdCBzZXQKK0NPTkZJR19BSU89eQorCisjCisjIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjCisjIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUyBpcyBub3Qgc2V0CitDT05GSUdfU1RSSVBfQVNNX1NZTVM9eQorIyBDT05GSUdfQ09NUEFUX0JSSyBpcyBub3Qgc2V0CisjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMVUIgaXMgbm90IHNldAorQ09ORklHX1NMT0I9eQorIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19UUkFDRVBPSU5UUz15CitDT05GSUdfTUFSS0VSUz15CitDT05GSUdfSEFWRV9PUFJPRklMRT15CitDT05GSUdfS1BST0JFUz15CitDT05GSUdfS1JFVFBST0JFUz15CitDT05GSUdfSEFWRV9LUFJPQkVTPXkKK0NPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQorQ09ORklHX0hBVkVfQ0xLPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKKyMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CitDT05GSUdfUlRfTVVURVhFUz15CitDT05GSUdfQkFTRV9TTUFMTD0wCitDT05GSUdfTU9EVUxFUz15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CitDT05GSUdfTU9EVUxFX1VOTE9BRD15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKK0NPTkZJR19NT0RWRVJTSU9OUz15CitDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMPXkKKyMgQ09ORklHX0JMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAorCisjCisjIFN5c3RlbSBUeXBlCisjCisjIENPTkZJR19BUkNIX0FBRUMyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1JFQUxWSUVXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfVkVSU0FUSUxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQVQ5MSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfR0VNSU5JIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0VQOTNYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9NWEMgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TVE1QM1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX05FVFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDEzWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AzMlggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AzM1ggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFAyM1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfS0lSS1dPT0QgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MT0tJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTVY3OFhYMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX09SSU9ONVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9NTVAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9LUzg2OTUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9OUzlYWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9XOTBYOTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUE5YNDAwOCBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9QWEE9eQorIyBDT05GSUdfQVJDSF9NU00gaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TQTExMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TM0MyNDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUzNDNjRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NIQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTEg3QTQwWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1UzMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9EQVZJTkNJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfT01BUCBpcyBub3Qgc2V0CisKKyMKKyMgSW50ZWwgUFhBMnh4L1BYQTN4eCBJbXBsZW1lbnRhdGlvbnMKKyMKKyMgQ09ORklHX0FSQ0hfR1VNU1RJWCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0lOVEVMTU9URTIgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9TVEFSR0FURTIgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MVUJCT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfTE9HSUNQRF9QWEEyNzAgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9NQUlOU1RPTkUgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9NUDkwMEMgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9QWEFfSURQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BYQV9TSEFSUFNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfVklQRVIgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9QWEFfRVNFUklFUyBpcyBub3Qgc2V0CisjIENPTkZJR19UUklaRVBTX1BYQSBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0g1MDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfRU1fWDI3MCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0VYRURBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfQ09MSUJSSSBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0NPTElCUkkzMDAgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9DT0xJQlJJMzIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfWllMT05JVEUgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9MSVRUTEVUT04gaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9UQVZPUkVWQiBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX1NBQVIgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9BUk1DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfQ01fWDMwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0g0NzAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfTUFHSUNJQU4gaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9ISU1BTEFZQSBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX01JT0E3MDEgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9QQ00wMjcgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9QWEFfUEFMTSBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0NTQjcyNiBpcyBub3Qgc2V0CisjIENPTkZJR19QWEFfRVpYIGlzIG5vdCBzZXQKK0NPTkZJR19NQUNIX1hDRVA9eQorQ09ORklHX1BYQTI1eD15CitDT05GSUdfUFhBX1NTUD15CitDT05GSUdfUExBVF9QWEE9eQorCisjCisjIFByb2Nlc3NvciBUeXBlCisjCitDT05GSUdfQ1BVXzMyPXkKK0NPTkZJR19DUFVfWFNDQUxFPXkKK0NPTkZJR19DUFVfMzJ2NT15CitDT05GSUdfQ1BVX0FCUlRfRVY1VD15CitDT05GSUdfQ1BVX1BBQlJUX05PSUZBUj15CitDT05GSUdfQ1BVX0NBQ0hFX1ZJVlQ9eQorQ09ORklHX0NQVV9UTEJfVjRXQkk9eQorQ09ORklHX0NQVV9DUDE1PXkKK0NPTkZJR19DUFVfQ1AxNV9NTVU9eQorCisjCisjIFByb2Nlc3NvciBGZWF0dXJlcworIworQ09ORklHX0FSTV9USFVNQj15CisjIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAorQ09ORklHX0lXTU1YVD15CitDT05GSUdfWFNDQUxFX1BNVT15CitDT05GSUdfQ09NTU9OX0NMS0RFVj15CisKKyMKKyMgQnVzIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BDSV9TWVNDQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIEZlYXR1cmVzCisjCitDT05GSUdfVElDS19PTkVTSE9UPXkKK0NPTkZJR19OT19IWj15CitDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKK0NPTkZJR19WTVNQTElUXzNHPXkKKyMgQ09ORklHX1ZNU1BMSVRfMkcgaXMgbm90IHNldAorIyBDT05GSUdfVk1TUExJVF8xRyBpcyBub3Qgc2V0CitDT05GSUdfUEFHRV9PRkZTRVQ9MHhDMDAwMDAwMAorIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CitDT05GSUdfSFo9MTAwCitDT05GSUdfQUVBQkk9eQorQ09ORklHX09BQklfQ09NUEFUPXkKKyMgQ09ORklHX0FSQ0hfU1BBUlNFTUVNX0RFRkFVTFQgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TRUxFQ1RfTUVNT1JZX01PREVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJR0hNRU0gaXMgbm90IHNldAorQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKKyMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0CitDT05GSUdfRkxBVE1FTT15CitDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQorQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15CitDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NDA5NgorIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAorQ09ORklHX1ZJUlRfVE9fQlVTPXkKK0NPTkZJR19IQVZFX01MT0NLPXkKK0NPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CitDT05GSUdfQUxJR05NRU5UX1RSQVA9eQorIyBDT05GSUdfVUFDQ0VTU19XSVRIX01FTUNQWSBpcyBub3Qgc2V0CisKKyMKKyMgQm9vdCBvcHRpb25zCisjCitDT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCitDT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKK0NPTkZJR19DTURMSU5FPSJyb290PW10ZDQgcm9vdGZzdHlwZT1qZmZzMiBybyBjb25zb2xlPXR0eVMwLDExNTIwMCIKKyMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAorIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAorCisjCisjIENQVSBQb3dlciBNYW5hZ2VtZW50CisjCisjIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfSURMRSBpcyBub3Qgc2V0CisKKyMKKyMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCisjCisKKyMKKyMgQXQgbGVhc3Qgb25lIGVtdWxhdGlvbiBtdXN0IGJlIHNlbGVjdGVkCisjCitDT05GSUdfRlBFX05XRlBFPXkKKyMgQ09ORklHX0ZQRV9OV0ZQRV9YUCBpcyBub3Qgc2V0CisjIENPTkZJR19GUEVfRkFTVEZQRSBpcyBub3Qgc2V0CisKKyMKKyMgVXNlcnNwYWNlIGJpbmFyeSBmb3JtYXRzCisjCitDT05GSUdfQklORk1UX0VMRj15CisjIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9BT1VUPXkKKyMgQ09ORklHX0JJTkZNVF9BT1VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKKyMKKyMgQ09ORklHX1BNIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQorQ09ORklHX05FVD15CisKKyMKKyMgTmV0d29ya2luZyBvcHRpb25zCisjCitDT05GSUdfUEFDS0VUPW0KK0NPTkZJR19QQUNLRVRfTU1BUD15CitDT05GSUdfVU5JWD15CitDT05GSUdfWEZSTT15CisjIENPTkZJR19YRlJNX1VTRVIgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldAorQ09ORklHX05FVF9LRVk9eQorIyBDT05GSUdfTkVUX0tFWV9NSUdSQVRFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUPXkKK0NPTkZJR19JUF9NVUxUSUNBU1Q9eQorIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9GSUJfSEFTSD15CitDT05GSUdfSVBfUE5QPXkKK0NPTkZJR19JUF9QTlBfREhDUD15CitDT05GSUdfSVBfUE5QX0JPT1RQPXkKKyMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9NUk9VVEUgaXMgbm90IHNldAorIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CisjIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX0xSTz15CisjIENPTkZJR19JTkVUX0RJQUcgaXMgbm90IHNldAorIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX1RDUF9DT05HX0NVQklDPXkKK0NPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKKyMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAorIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RTQSBpcyBub3Qgc2V0CisjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CisjIENPTkZJR19YMjUgaXMgbm90IHNldAorIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjE1NCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKKyMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1RDUFBST0JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9EUk9QX01PTklUT1IgaXMgbm90IHNldAorIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSREEgaXMgbm90IHNldAorIyBDT05GSUdfQlQgaXMgbm90IHNldAorIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAorIyBDT05GSUdfV0lSRUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAorIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CisKKyMKKyMgRGV2aWNlIERyaXZlcnMKKyMKKworIworIyBHZW5lcmljIERyaXZlciBPcHRpb25zCisjCitDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorQ09ORklHX1NUQU5EQUxPTkU9eQorIyBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRCBpcyBub3Qgc2V0CisjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAorQ09ORklHX01URD15CisjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorQ09ORklHX01URF9DT05DQVQ9eQorQ09ORklHX01URF9QQVJUSVRJT05TPXkKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQUZTX1BBUlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldAorCisjCisjIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCisjCitDT05GSUdfTVREX0NIQVI9eQorIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAorCisjCisjIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCisjCitDT05GSUdfTVREX0NGST15CisjIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0dFTl9QUk9CRT15CisjIENPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfSTE9eQorQ09ORklHX01URF9DRklfSTI9eQorIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0lOVEVMRVhUPXkKKyMgQ09ORklHX01URF9DRklfQU1EU1REIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9VVElMPXkKKyMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9YSVAgaXMgbm90IHNldAorCisjCisjIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKKyMKK0NPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUz15CitDT05GSUdfTVREX1BIWVNNQVA9eQorIyBDT05GSUdfTVREX1BIWVNNQVBfQ09NUEFUIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfUFhBMlhYPXkKKyMgQ09ORklHX01URF9BUk1fSU5URUdSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0CisKKyMKKyMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAorCisjCisjIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKKworIworIyBMUEREUiBmbGFzaCBtZW1vcnkgZHJpdmVycworIworIyBDT05GSUdfTVREX0xQRERSIGlzIG5vdCBzZXQKKworIworIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKKyMKKyMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAorIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVNDX0RFVklDRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKKworIworIyBTQ1NJIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19TQ1NJX0RNQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAorQ09ORklHX05FVERFVklDRVM9eQorIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAorIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UVU4gaXMgbm90IHNldAorIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0CisjIENPTkZJR19QSFlMSUIgaXMgbm90IHNldAorQ09ORklHX05FVF9FVEhFUk5FVD15CitDT05GSUdfTUlJPXkKKyMgQ09ORklHX0FYODg3OTYgaXMgbm90IHNldAorQ09ORklHX1NNQzkxWD15CisjIENPTkZJR19ETTkwMDAgaXMgbm90IHNldAorIyBDT05GSUdfRVRIT0MgaXMgbm90IHNldAorIyBDT05GSUdfU01DOTExWCBpcyBub3Qgc2V0CisjIENPTkZJR19TTVNDOTExWCBpcyBub3Qgc2V0CisjIENPTkZJR19ETkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAorIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzIExBTgorIworIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKKworIworIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCisjCisjIENPTkZJR19XQU4gaXMgbm90IHNldAorIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19JTlBVVD15CisjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAorCisjCisjIFVzZXJsYW5kIGludGVyZmFjZXMKKyMKKyMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBJL08gcG9ydHMKKyMKKyMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworQ09ORklHX1ZUPXkKK0NPTkZJR19DT05TT0xFX1RSQU5TTEFUSU9OUz15CitDT05GSUdfVlRfQ09OU09MRT15CitDT05GSUdfSFdfQ09OU09MRT15CisjIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfREVWS01FTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBkcml2ZXJzCisjCisjIENPTkZJR19TRVJJQUxfODI1MCBpcyBub3Qgc2V0CisKKyMKKyMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAorIworQ09ORklHX1NFUklBTF9QWEE9eQorQ09ORklHX1NFUklBTF9QWEFfQ09OU09MRT15CitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorQ09ORklHX1VOSVg5OF9QVFlTPXkKKyMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAorIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAorIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKK0NPTkZJR19JMkM9bQorQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DSEFSREVWPW0KK0NPTkZJR19JMkNfSEVMUEVSX0FVVE89eQorCisjCisjIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAorIworCisjCisjIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQorIworIyBDT05GSUdfSTJDX0RFU0lHTldBUkUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0dQSU8gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CitDT05GSUdfSTJDX1BYQT1tCisjIENPTkZJR19JMkNfUFhBX1NMQVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAorCisjCisjIEV4dGVybmFsIEkyQy9TTUJ1cyBhZGFwdGVyIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0CisKKyMKKyMgT3RoZXIgSTJDL1NNQnVzIGJ1cyBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfUENBX1BMQVRGT1JNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAorIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAorIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1JFUVVJUkVfR1BJT0xJQj15CitDT05GSUdfR1BJT0xJQj15CisjIENPTkZJR19ERUJVR19HUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fU1lTRlMgaXMgbm90IHNldAorCisjCisjIE1lbW9yeSBtYXBwZWQgR1BJTyBleHBhbmRlcnM6CisjCisKKyMKKyMgSTJDIEdQSU8gZXhwYW5kZXJzOgorIworIyBDT05GSUdfR1BJT19NQVg3MzJYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fUENBOTUzWCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX1BDRjg1N1ggaXMgbm90IHNldAorCisjCisjIFBDSSBHUElPIGV4cGFuZGVyczoKKyMKKworIworIyBTUEkgR1BJTyBleHBhbmRlcnM6CisjCisjIENPTkZJR19XMSBpcyBub3Qgc2V0CisjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAorQ09ORklHX0hXTU9OPW0KKyMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FENzQxNCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0CitDT05GSUdfU0VOU09SU19BRE0xMDIxPW0KKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyNSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDI5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAzMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTkyNDAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFQ3NDYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURUNzQ3MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEVDc0NzMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFQ3NDc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQVRYUDEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19EUzE2MjEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRjcxODgyRkcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GNzUzNzVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRzc2MEEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19HTDUxOFNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfR0w1MjBTTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTc4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTg1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNOTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE05MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xUQzQyMTUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MVEM0MjQ1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE05NTI0MSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDE2MTkgaXMgbm90IHNldAorQ09ORklHX1NFTlNPUlNfTUFYNjY1MD1tCisjIENPTkZJR19TRU5TT1JTX1BDODczNjAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQzg3NDI3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NIVDE1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRE1FMTczNyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNU0M0N00xIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTE5MiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFM3ODI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVE1QNDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzgxRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc5MUQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3OTJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzkzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzTDc4NVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzTDc4Nk5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKK0NPTkZJR19TU0JfUE9TU0lCTEU9eQorCisjCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQorIworIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKKworIworIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX0FTSUMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hUQ19FR1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RQUzY1MDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UN0w2NlhCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UQzYzODdYQiBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVEM2MzkzWEIgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAorIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3Mgc3VwcG9ydAorIworIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAorIyBDT05GSUdfRkIgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAorIworIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAorQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQorIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1NVUFBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NVUFBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAorIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorQ09ORklHX1JUQ19MSUI9eQorQ09ORklHX1JUQ19DTEFTUz1tCisKKyMKKyMgUlRDIGludGVyZmFjZXMKKyMKK0NPTkZJR19SVENfSU5URl9TWVNGUz15CitDT05GSUdfUlRDX0lOVEZfUFJPQz15CitDT05GSUdfUlRDX0lOVEZfREVWPXkKKyMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAorCisjCisjIEkyQyBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9EUzEzMDcgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEzNzQgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE2NzIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlM1QzM3MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0lTTDEyMDggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9YMTIwNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjg1NjMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JYODU4MSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JYODAyNSBpcyBub3Qgc2V0CisKKyMKKyMgU1BJIFJUQyBkcml2ZXJzCisjCisKKyMKKyMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfQ01PUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTI4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTUxMSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDM1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfQlE0ODAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAorCisjCisjIG9uLUNQVSBSVEMgZHJpdmVycworIworQ09ORklHX1JUQ19EUlZfU0ExMTAwPW0KKyMgQ09ORklHX1JUQ19EUlZfUFhBIGlzIG5vdCBzZXQKK0NPTkZJR19ETUFERVZJQ0VTPXkKKworIworIyBETUEgRGV2aWNlcworIworIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAorCisjCisjIEZpbGUgc3lzdGVtcworIworQ09ORklHX0ZJTEVfTE9DS0lORz15CisjIENPTkZJR19GU05PVElGWSBpcyBub3Qgc2V0CisjIENPTkZJR19ETk9USUZZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOT1RJRlkgaXMgbm90IHNldAorIyBDT05GSUdfSU5PVElGWV9VU0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAorCisjCisjIENhY2hlcworIworIyBDT05GSUdfRlNDQUNIRSBpcyBub3Qgc2V0CisKKyMKKyMgUHNldWRvIGZpbGVzeXN0ZW1zCisjCitDT05GSUdfUFJPQ19GUz15CitDT05GSUdfUFJPQ19TWVNDVEw9eQorQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKK0NPTkZJR19TWVNGUz15CitDT05GSUdfVE1QRlM9eQorIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15CitDT05GSUdfSkZGUzJfRlM9eQorQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKK0NPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUj15CitDT05GSUdfSkZGUzJfRlNfV0JVRl9WRVJJRlk9eQorIyBDT05GSUdfSkZGUzJfU1VNTUFSWSBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9aTElCPXkKKyMgQ09ORklHX0pGRlMyX0xaTyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfUlRJTUU9eQorIyBDT05GSUdfSkZGUzJfUlVCSU4gaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQorQ09ORklHX05GU19GUz1tCitDT05GSUdfTkZTX1YzPXkKKyMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU0QgaXMgbm90IHNldAorQ09ORklHX0xPQ0tEPW0KK0NPTkZJR19MT0NLRF9WND15CitDT05GSUdfTkZTX0NPTU1PTj15CitDT05GSUdfU1VOUlBDPW0KKyMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0CisjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTkxTPW0KK0NPTkZJR19OTFNfREVGQVVMVD0idXRmOCIKKyMgQ09ORklHX05MU19DT0RFUEFHRV80MzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19BU0NJSSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV83IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfVVRGOD1tCisjIENPTkZJR19ETE0gaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBoYWNraW5nCisjCitDT05GSUdfUFJJTlRLX1RJTUU9eQorQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQorQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKK0NPTkZJR19GUkFNRV9XQVJOPTEwMjQKKyMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0tFUk5FTD15CisjIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0CitDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQorIyBDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUMgaXMgbm90IHNldAorQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDX1ZBTFVFPTAKK0NPTkZJR19ERVRFQ1RfSFVOR19UQVNLPXkKKyMgQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUMgaXMgbm90IHNldAorQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUNfVkFMVUU9MAorIyBDT05GSUdfU0NIRURfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tNRU1MRUFLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfV1JJVEVDT1VOVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CitDT05GSUdfRlJBTUVfUE9JTlRFUj15CisjIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAorIyBDT05GSUdfS1BST0JFU19TQU5JVFlfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CisjIENPTkZJR19QQUdFX1BPSVNPTklORyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CisjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9BUkNIX0tHREI9eQorIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CisjIENPTkZJR19BUk1fVU5XSU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1VTRVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRVJST1JTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xMIGlzIG5vdCBzZXQKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUTz15CisKKyMKKyMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCisjCisjIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0FMR0FQST1tCitDT05GSUdfQ1JZUFRPX0FMR0FQSTI9bQorQ09ORklHX0NSWVBUT19IQVNIPW0KK0NPTkZJR19DUllQVE9fSEFTSDI9bQorIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKKworIworIyBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBc3NvY2lhdGVkIERhdGEKKyMKKyMgQ09ORklHX0NSWVBUT19DQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAorCisjCisjIEJsb2NrIG1vZGVzCisjCisjIENPTkZJR19DUllQVE9fQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NUUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fRUNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1BDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0CisKKyMKKyMgSGFzaCBtb2RlcworIworIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorCisjCisjIERpZ2VzdAorIworQ09ORklHX0NSWVBUT19DUkMzMkM9bQorIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMTI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQxNjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMzIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0CisKKyMKKyMgQ2lwaGVycworIworIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fREVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0FMU0EyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKKworIworIyBDb21wcmVzc2lvbgorIworIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1pMSUIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0CisKKyMKKyMgUmFuZG9tIE51bWJlciBHZW5lcmF0aW9uCisjCisjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fSFcgaXMgbm90IHNldAorIyBDT05GSUdfQklOQVJZX1BSSU5URiBpcyBub3Qgc2V0CisKKyMKKyMgTGlicmFyeSByb3V0aW5lcworIworQ09ORklHX0JJVFJFVkVSU0U9eQorQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15CisjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAorQ09ORklHX0NSQzMyPXkKKyMgQ09ORklHX0NSQzcgaXMgbm90IHNldAorQ09ORklHX0xJQkNSQzMyQz1tCitDT05GSUdfWkxJQl9JTkZMQVRFPXkKK0NPTkZJR19aTElCX0RFRkxBVEU9eQorQ09ORklHX0RFQ09NUFJFU1NfR1pJUD15CitDT05GSUdfSEFTX0lPTUVNPXkKK0NPTkZJR19IQVNfSU9QT1JUPXkKK0NPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19OTEFUVFI9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy96eWxvbml0ZV9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL3p5bG9uaXRlX2RlZmNvbmZpZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzk0OWQwNC4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9jb25maWdzL3p5bG9uaXRlX2RlZmNvbmZpZworKysgL2Rldi9udWxsCkBAIC0xLDczNiArMCwwIEBACi0jCi0jIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjMKLSMgVHVlIE9jdCAyMyAxMzozMzoyMCAyMDA3Ci0jCi1DT05GSUdfQVJNPXkKLUNPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15Ci1DT05GSUdfR0VORVJJQ19HUElPPXkKLUNPTkZJR19HRU5FUklDX1RJTUU9eQotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQotQ09ORklHX01NVT15Ci0jIENPTkZJR19OT19JT1BPUlQgaXMgbm90IHNldAotQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQotQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15Ci1DT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKLUNPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKLUNPTkZJR19IQVJESVJRU19TV19SRVNFTkQ9eQotQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKLUNPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKLSMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAotQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQotQ09ORklHX1pPTkVfRE1BPXkKLUNPTkZJR19BUkNIX01URF9YSVA9eQotQ09ORklHX1ZFQ1RPUlNfQkFTRT0weGZmZmYwMDAwCi1DT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgotCi0jCi0jIEdlbmVyYWwgc2V0dXAKLSMKLUNPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgotQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgotQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKLUNPTkZJR19TV0FQPXkKLUNPTkZJR19TWVNWSVBDPXkKLUNPTkZJR19TWVNWSVBDX1NZU0NUTD15Ci0jIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVVNFUl9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVURJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0Ci1DT05GSUdfTE9HX0JVRl9TSElGVD0xOAotIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0Ci1DT05GSUdfRkFJUl9HUk9VUF9TQ0hFRD15Ci1DT05GSUdfRkFJUl9VU0VSX1NDSEVEPXkKLSMgQ09ORklHX0ZBSVJfQ0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKLSMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDVEw9eQotIyBDT05GSUdfRU1CRURERUQgaXMgbm90IHNldAotQ09ORklHX1VJRDE2PXkKLUNPTkZJR19TWVNDVExfU1lTQ0FMTD15Ci1DT05GSUdfS0FMTFNZTVM9eQotIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfUFJJTlRLPXkKLUNPTkZJR19CVUc9eQotQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15Ci1DT05GSUdfRVBPTEw9eQotQ09ORklHX1NJR05BTEZEPXkKLUNPTkZJR19FVkVOVEZEPXkKLUNPTkZJR19TSE1FTT15Ci1DT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotQ09ORklHX1NMVUJfREVCVUc9eQotIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0Ci1DT05GSUdfU0xVQj15Ci0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKLUNPTkZJR19SVF9NVVRFWEVTPXkKLSMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAotQ09ORklHX0JBU0VfU01BTEw9MAotQ09ORklHX01PRFVMRVM9eQotIyBDT05GSUdfTU9EVUxFX1VOTE9BRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAotIyBDT05GSUdfS01PRCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKLQotIwotIyBJTyBTY2hlZHVsZXJzCi0jCi1DT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKLUNPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKLUNPTkZJR19JT1NDSEVEX0NGUT15Ci0jIENPTkZJR19ERUZBVUxUX0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCi0KLSMKLSMgU3lzdGVtIFR5cGUKLSMKLSMgQ09ORklHX0FSQ0hfQUFFQzIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUkVBTFZJRVcgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9BVDkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ0xQUzc1MDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NPMjg1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0VQOTNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9ORVRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JT1AxM1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMzJYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMzNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQMjNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0tTODY5NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX05TOVhYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01YQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BOWDQwMDggaXMgbm90IHNldAotQ09ORklHX0FSQ0hfUFhBPXkKLSMgQ09ORklHX0FSQ0hfUlBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0ExMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUzNDMjQxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NIQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTEg3QTQwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0RBVklOQ0kgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKLQotIwotIyBJbnRlbCBQWEEyeHgvUFhBM3h4IEltcGxlbWVudGF0aW9ucwotIwotCi0jCi0jIFN1cHBvcnRlZCBQWEEzeHggUHJvY2Vzc29yIFZhcmlhbnRzCi0jCi1DT05GSUdfQ1BVX1BYQTMwMD15Ci1DT05GSUdfQ1BVX1BYQTMxMD15Ci1DT05GSUdfQ1BVX1BYQTMyMD15Ci0jIENPTkZJR19BUkNIX0xVQkJPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9MT0dJQ1BEX1BYQTI3MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX01BSU5TVE9ORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BYQV9JRFAgaXMgbm90IHNldAotIyBDT05GSUdfUFhBX1NIQVJQU0wgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9UUklaRVBTNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX0VNX1gyNzAgaXMgbm90IHNldAotQ09ORklHX01BQ0hfWllMT05JVEU9eQotIyBDT05GSUdfTUFDSF9BUk1DT1JFIGlzIG5vdCBzZXQKLUNPTkZJR19QWEEzeHg9eQotCi0jCi0jIEJvb3Qgb3B0aW9ucwotIwotCi0jCi0jIFBvd2VyIG1hbmFnZW1lbnQKLSMKLQotIwotIyBQcm9jZXNzb3IgVHlwZQotIwotQ09ORklHX0NQVV8zMj15Ci1DT05GSUdfQ1BVX1hTQzM9eQotQ09ORklHX0NQVV8zMnY1PXkKLUNPTkZJR19DUFVfQUJSVF9FVjVUPXkKLUNPTkZJR19DUFVfQ0FDSEVfVklWVD15Ci1DT05GSUdfQ1BVX1RMQl9WNFdCST15Ci1DT05GSUdfQ1BVX0NQMTU9eQotQ09ORklHX0NQVV9DUDE1X01NVT15Ci1DT05GSUdfSU9fMzY9eQotCi0jCi0jIFByb2Nlc3NvciBGZWF0dXJlcwotIwotIyBDT05GSUdfQVJNX1RIVU1CIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfQlBSRURJQ1RfRElTQUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19PVVRFUl9DQUNIRSBpcyBub3Qgc2V0Ci1DT05GSUdfSVdNTVhUPXkKLQotIwotIyBCdXMgc3VwcG9ydAotIwotIyBDT05GSUdfUENJX1NZU0NBTEwgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAotIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgRmVhdHVyZXMKLSMKLSMgQ09ORklHX1RJQ0tfT05FU0hPVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OT19IWiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISUdIX1JFU19USU1FUlMgaXMgbm90IHNldAotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQotIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0Ci1DT05GSUdfSFo9MTAwCi1DT05GSUdfQUVBQkk9eQotQ09ORklHX09BQklfQ09NUEFUPXkKLSMgQ09ORklHX0FSQ0hfRElTQ09OVElHTUVNX0VOQUJMRSBpcyBub3Qgc2V0Ci1DT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15Ci1DT05GSUdfRkxBVE1FTV9NQU5VQUw9eQotIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLUNPTkZJR19GTEFUTUVNPXkKLUNPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci0jIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQX0VOQUJMRSBpcyBub3Qgc2V0Ci1DT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NDA5NgotIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19aT05FX0RNQV9GTEFHPTEKLUNPTkZJR19CT1VOQ0U9eQotQ09ORklHX1ZJUlRfVE9fQlVTPXkKLUNPTkZJR19BTElHTk1FTlRfVFJBUD15Ci0KLSMKLSMgQm9vdCBvcHRpb25zCi0jCi1DT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCi1DT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKLUNPTkZJR19DTURMSU5FPSJyb290PS9kZXYvbmZzIHJvb3Rmc3R5cGU9bmZzIG5mc3Jvb3Q9MTkyLjE2OC4xLjEwMDovbmZzL3Jvb3Rmcy8gaXA9MTkyLjE2OC4xLjEwMToxOTIuMTY4LjEuMTAwOjoyNTUuMjU1LjI1NS4wOjpldGgwOm9uIGNvbnNvbGU9dHR5UzAsMzg0MDAgbWVtPTY0TSBkZWJ1ZyIKLSMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAotIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAotCi0jCi0jIEZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbgotIwotCi0jCi0jIEF0IGxlYXN0IG9uZSBlbXVsYXRpb24gbXVzdCBiZSBzZWxlY3RlZAotIwotQ09ORklHX0ZQRV9OV0ZQRT15Ci0jIENPTkZJR19GUEVfTldGUEVfWFAgaXMgbm90IHNldAotIyBDT05GSUdfRlBFX0ZBU1RGUEUgaXMgbm90IHNldAotCi0jCi0jIFVzZXJzcGFjZSBiaW5hcnkgZm9ybWF0cwotIwotQ09ORklHX0JJTkZNVF9FTEY9eQotIyBDT05GSUdfQklORk1UX0FPVVQgaXMgbm90IHNldAotIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAotCi0jCi0jIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucwotIwotIyBDT05GSUdfUE0gaXMgbm90IHNldAotQ09ORklHX1NVU1BFTkRfVVBfUE9TU0lCTEU9eQotCi0jCi0jIE5ldHdvcmtpbmcKLSMKLUNPTkZJR19ORVQ9eQotCi0jCi0jIE5ldHdvcmtpbmcgb3B0aW9ucwotIwotQ09ORklHX1BBQ0tFVD15Ci0jIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0Ci1DT05GSUdfVU5JWD15Ci0jIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUPXkKLSMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAotQ09ORklHX0lQX0ZJQl9IQVNIPXkKLUNPTkZJR19JUF9QTlA9eQotQ09ORklHX0lQX1BOUF9ESENQPXkKLUNPTkZJR19JUF9QTlBfQk9PVFA9eQotQ09ORklHX0lQX1BOUF9SQVJQPXkKLSMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9ESUFHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19UQ1BfQ09OR19DVUJJQz15Ci1DT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCi0jIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAotIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19YMjUgaXMgbm90IHNldAotIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgdGVzdGluZwotIwotIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcwotIwotIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRktJTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKLQotIwotIyBEZXZpY2UgRHJpdmVycwotIwotCi0jCi0jIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKLSMKLUNPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCi1DT05GSUdfU1RBTkRBTE9ORT15Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15Ci1DT05GSUdfRldfTE9BREVSPXkKLSMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVEQgaXMgbm90IHNldAotIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JU0NfREVWSUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JREUgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAotIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX01EIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRERVZJQ0VTPXkKLSMgQ09ORklHX05FVERFVklDRVNfTVVMVElRVUVVRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAotIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUX0VUSEVSTkVUPXkKLUNPTkZJR19NSUk9eQotIyBDT05GSUdfQVg4ODc5NiBpcyBub3Qgc2V0Ci1DT05GSUdfU01DOTFYPXkKLSMgQ09ORklHX0RNOTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUM5MTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CNDQgaXMgbm90IHNldAotIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKLSMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU4gaXMgbm90IHNldAotIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotIyBDT05GSUdfU0hBUEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAotIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotCi0jCi0jIElucHV0IGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfSU5QVVQ9eQotIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKLQotIwotIyBVc2VybGFuZCBpbnRlcmZhY2VzCi0jCi1DT05GSUdfSU5QVVRfTU9VU0VERVY9eQotIyBDT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVggaXMgbm90IHNldAotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKLSMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBJL08gcG9ydHMKLSMKLSMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDaGFyYWN0ZXIgZGV2aWNlcwotIwotQ09ORklHX1ZUPXkKLUNPTkZJR19WVF9DT05TT0xFPXkKLUNPTkZJR19IV19DT05TT0xFPXkKLSMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBkcml2ZXJzCi0jCi0jIENPTkZJR19TRVJJQUxfODI1MCBpcyBub3Qgc2V0Ci0KLSMKLSMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAotIwotQ09ORklHX1NFUklBTF9QWEE9eQotQ09ORklHX1NFUklBTF9QWEFfQ09OU09MRT15Ci1DT05GSUdfU0VSSUFMX0NPUkU9eQotQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQotQ09ORklHX1VOSVg5OF9QVFlTPXkKLSMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAotIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAotIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQyBpcyBub3Qgc2V0Ci0KLSMKLSMgU1BJIHN1cHBvcnQKLSMKLSMgQ09ORklHX1NQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUElfTUFTVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1cxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTiBpcyBub3Qgc2V0Ci0KLSMKLSMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCi0jCi1DT05GSUdfU1NCX1BPU1NJQkxFPXkKLSMgQ09ORklHX1NTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRldmljZXMKLSMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EQUIgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKLUNPTkZJR19GQj15Ci0jIENPTkZJR19GSVJNV0FSRV9FRElEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0REQyBpcyBub3Qgc2V0Ci1DT05GSUdfRkJfQ0ZCX0ZJTExSRUNUPXkKLUNPTkZJR19GQl9DRkJfQ09QWUFSRUE9eQotQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9eQotIyBDT05GSUdfRkJfQ0ZCX1JFVl9QSVhFTFNfSU5fQllURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TWVNfRklMTFJFQ1QgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0NPUFlBUkVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19JTUFHRUJMSVQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0ZPUFMgaXMgbm90IHNldAotQ09ORklHX0ZCX0RFRkVSUkVEX0lPPXkKLSMgQ09ORklHX0ZCX1NWR0FMSUIgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTUFDTU9ERVMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX01PREVfSEVMUEVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9USUxFQkxJVFRJTkcgaXMgbm90IHNldAotCi0jCi0jIEZyYW1lIGJ1ZmZlciBoYXJkd2FyZSBkcml2ZXJzCi0jCi0jIENPTkZJR19GQl9TMUQxM1hYWCBpcyBub3Qgc2V0Ci1DT05GSUdfRkJfUFhBPXkKLSMgQ09ORklHX0ZCX1BYQV9QQVJBTUVURVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX01CWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKLUNPTkZJR19EVU1NWV9DT05TT0xFPXkKLUNPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKLUNPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX0RFVEVDVF9QUklNQVJZPXkKLSMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfUk9UQVRJT04gaXMgbm90IHNldAotQ09ORklHX0ZPTlRTPXkKLSMgQ09ORklHX0ZPTlRfOHg4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPTlRfOHgxNiBpcyBub3Qgc2V0Ci1DT05GSUdfRk9OVF82eDExPXkKLSMgQ09ORklHX0ZPTlRfN3gxNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT05UX1BFQVJMXzh4OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT05UX0FDT1JOXzh4OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT05UX01JTklfNHg2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPTlRfU1VOOHgxNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT05UX1NVTjEyeDIyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPTlRfMTB4MTggaXMgbm90IHNldAotQ09ORklHX0xPR089eQotQ09ORklHX0xPR09fTElOVVhfTU9OTz15Ci1DT05GSUdfTE9HT19MSU5VWF9WR0ExNj15Ci1DT05GSUdfTE9HT19MSU5VWF9DTFVUMjI0PXkKLQotIwotIyBTb3VuZAotIwotIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAotIyBDT05GSUdfSElEX1NVUFBPUlQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NVUFBPUlQgaXMgbm90IHNldAotIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKLUNPTkZJR19SVENfTElCPXkKLSMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRmlsZSBzeXN0ZW1zCi0jCi0jIENPTkZJR19FWFQyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotQ09ORklHX0ZTX1BPU0lYX0FDTD15Ci0jIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTk9USUZZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLUNPTkZJR19ETk9USUZZPXkKLSMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAotCi0jCi0jIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRkFUX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQotQ09ORklHX1BST0NfU1lTQ1RMPXkKLUNPTkZJR19TWVNGUz15Ci0jIENPTkZJR19UTVBGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQotQ09ORklHX05GU19GUz15Ci1DT05GSUdfTkZTX1YzPXkKLUNPTkZJR19ORlNfVjNfQUNMPXkKLUNPTkZJR19ORlNfVjQ9eQotQ09ORklHX05GU19ESVJFQ1RJTz15Ci0jIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKLUNPTkZJR19ST09UX05GUz15Ci1DT05GSUdfTE9DS0Q9eQotQ09ORklHX0xPQ0tEX1Y0PXkKLUNPTkZJR19ORlNfQUNMX1NVUFBPUlQ9eQotQ09ORklHX05GU19DT01NT049eQotQ09ORklHX1NVTlJQQz15Ci1DT05GSUdfU1VOUlBDX0dTUz15Ci0jIENPTkZJR19TVU5SUENfQklORDM0IGlzIG5vdCBzZXQKLUNPTkZJR19SUENTRUNfR1NTX0tSQjU9eQotIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBhcnRpdGlvbiBUeXBlcwotIwotIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19NU0RPU19QQVJUSVRJT049eQotIyBDT05GSUdfTkxTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RMTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlNUUlVNRU5UQVRJT04gaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBoYWNraW5nCi0jCi0jIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQotIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAotIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAotIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfQlVHVkVSQk9TRT15Ci1DT05GSUdfRlJBTUVfUE9JTlRFUj15Ci0jIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19VU0VSPXkKLQotIwotIyBTZWN1cml0eSBvcHRpb25zCi0jCi0jIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE89eQotQ09ORklHX0NSWVBUT19BTEdBUEk9eQotQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQotQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKLSMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19NRDU9eQotIyBDT05GSUdfQ1JZUFRPX1NIQTEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fRUNCIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fQ0JDPXkKLSMgQ09ORklHX0NSWVBUT19QQ0JDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fREVTPXkKLSMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0hXIGlzIG5vdCBzZXQKLQotIwotIyBMaWJyYXJ5IHJvdXRpbmVzCi0jCi1DT05GSUdfQklUUkVWRVJTRT15Ci0jIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKLUNPTkZJR19DUkMzMj15Ci0jIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0Ci1DT05GSUdfUExJU1Q9eQotQ09ORklHX0hBU19JT01FTT15Ci1DT05GSUdfSEFTX0lPUE9SVD15Ci1DT05GSUdfSEFTX0RNQT15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9hdG9taWMuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2F0b21pYy5oCmluZGV4IDllZDIzNzcuLmQwZGFlYWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2F0b21pYy5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2F0b21pYy5oCkBAIC0xOSwzMSArMTksMjEgQEAKIAogI2lmZGVmIF9fS0VSTkVMX18KIAorLyoKKyAqIE9uIEFSTSwgb3JkaW5hcnkgYXNzaWdubWVudCAoc3RyIGluc3RydWN0aW9uKSBkb2Vzbid0IGNsZWFyIHRoZSBsb2NhbAorICogc3RyZXgvbGRyZXggbW9uaXRvciBvbiBzb21lIGltcGxlbWVudGF0aW9ucy4gVGhlIHJlYXNvbiB3ZSBjYW4gdXNlIGl0IGZvcgorICogYXRvbWljX3NldCgpIGlzIHRoZSBjbHJleCBvciBkdW1teSBzdHJleCBkb25lIG9uIGV2ZXJ5IGV4Y2VwdGlvbiByZXR1cm4uCisgKi8KICNkZWZpbmUgYXRvbWljX3JlYWQodikJKCh2KS0+Y291bnRlcikKKyNkZWZpbmUgYXRvbWljX3NldCh2LGkpCSgoKHYpLT5jb3VudGVyKSA9IChpKSkKIAogI2lmIF9fTElOVVhfQVJNX0FSQ0hfXyA+PSA2CiAKIC8qCiAgKiBBUk12NiBVUCBhbmQgU01QIHNhZmUgYXRvbWljIG9wcy4gIFdlIHVzZSBsb2FkIGV4Y2x1c2l2ZSBhbmQKICAqIHN0b3JlIGV4Y2x1c2l2ZSB0byBlbnN1cmUgdGhhdCB0aGVzZSBhcmUgYXRvbWljLiAgV2UgbWF5IGxvb3AKLSAqIHRvIGVuc3VyZSB0aGF0IHRoZSB1cGRhdGUgaGFwcGVucy4gIFdyaXRpbmcgdG8gJ3YtPmNvdW50ZXInCi0gKiB3aXRob3V0IHVzaW5nIHRoZSBmb2xsb3dpbmcgb3BlcmF0aW9ucyBXSUxMIGJyZWFrIHRoZSBhdG9taWMKLSAqIG5hdHVyZSBvZiB0aGVzZSBvcHMuCisgKiB0byBlbnN1cmUgdGhhdCB0aGUgdXBkYXRlIGhhcHBlbnMuCiAgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBhdG9taWNfc2V0KGF0b21pY190ICp2LCBpbnQgaSkKLXsKLQl1bnNpZ25lZCBsb25nIHRtcDsKLQotCV9fYXNtX18gX192b2xhdGlsZV9fKCJAIGF0b21pY19zZXRcbiIKLSIxOglsZHJleAklMCwgWyUxXVxuIgotIglzdHJleAklMCwgJTIsIFslMV1cbiIKLSIJdGVxCSUwLCAjMFxuIgotIglibmUJMWIiCi0JOiAiPSZyIiAodG1wKQotCTogInIiICgmdi0+Y291bnRlciksICJyIiAoaSkKLQk6ICJjYyIpOwotfQotCiBzdGF0aWMgaW5saW5lIHZvaWQgYXRvbWljX2FkZChpbnQgaSwgYXRvbWljX3QgKnYpCiB7CiAJdW5zaWduZWQgbG9uZyB0bXA7CkBAIC0xNjMsOCArMTUzLDYgQEAKICNlcnJvciBTTVAgbm90IHN1cHBvcnRlZCBvbiBwcmUtQVJNdjYgQ1BVcwogI2VuZGlmCiAKLSNkZWZpbmUgYXRvbWljX3NldCh2LGkpCSgoKHYpLT5jb3VudGVyKSA9IChpKSkKLQogc3RhdGljIGlubGluZSBpbnQgYXRvbWljX2FkZF9yZXR1cm4oaW50IGksIGF0b21pY190ICp2KQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9iaXRvcHMuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2JpdG9wcy5oCmluZGV4IDYzYTQ4MWYuLjMzOGZmMTkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2JpdG9wcy5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2JpdG9wcy5oCkBAIC04NCw3ICs4NCw3IEBACiAJKnAgPSByZXMgfCBtYXNrOwogCXJhd19sb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAKLQlyZXR1cm4gcmVzICYgbWFzazsKKwlyZXR1cm4gKHJlcyAmIG1hc2spICE9IDA7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50CkBAIC0xMDEsNyArMTAxLDcgQEAKIAkqcCA9IHJlcyAmIH5tYXNrOwogCXJhd19sb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAKLQlyZXR1cm4gcmVzICYgbWFzazsKKwlyZXR1cm4gKHJlcyAmIG1hc2spICE9IDA7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50CkBAIC0xMTgsNyArMTE4LDcgQEAKIAkqcCA9IHJlcyBeIG1hc2s7CiAJcmF3X2xvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAotCXJldHVybiByZXMgJiBtYXNrOworCXJldHVybiAocmVzICYgbWFzaykgIT0gMDsKIH0KIAogI2luY2x1ZGUgPGFzbS1nZW5lcmljL2JpdG9wcy9ub24tYXRvbWljLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9jYWNoZS5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vY2FjaGUuaAppbmRleCBmZWFhNzVmLi42NmMxNjBiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9jYWNoZS5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2NhY2hlLmgKQEAgLTQsNyArNCw3IEBACiAjaWZuZGVmIF9fQVNNQVJNX0NBQ0hFX0gKICNkZWZpbmUgX19BU01BUk1fQ0FDSEVfSAogCi0jZGVmaW5lIEwxX0NBQ0hFX1NISUZUCQk1CisjZGVmaW5lIEwxX0NBQ0hFX1NISUZUCQlDT05GSUdfQVJNX0wxX0NBQ0hFX1NISUZUCiAjZGVmaW5lIEwxX0NBQ0hFX0JZVEVTCQkoMSA8PCBMMV9DQUNIRV9TSElGVCkKIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2NhY2hlZmx1c2guaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2NhY2hlZmx1c2guaAppbmRleCBmZDAzZmI2Li4zZDBjZGQyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oCkBAIC00MTQsOSArNDE0LDE0IEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2ZsdXNoX2ljYWNoZV9hbGwodm9pZCkKIHsKKyNpZmRlZiBDT05GSUdfQVJNX0VSUkFUQV80MTE5MjAKKwlleHRlcm4gdm9pZCB2Nl9pY2FjaGVfaW52YWxfYWxsKHZvaWQpOworCXY2X2ljYWNoZV9pbnZhbF9hbGwoKTsKKyNlbHNlCiAJYXNtKCJtY3IJcDE1LCAwLCAlMCwgYzcsIGM1LCAwCUAgaW52YWxpZGF0ZSBJLWNhY2hlXG4iCiAJICAgIDoKIAkgICAgOiAiciIgKDApKTsKKyNlbmRpZgogfQogCiAjZGVmaW5lIEFSQ0hfSEFTX0ZMVVNIX0FOT05fUEFHRQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vY3B1dHlwZS5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vY3B1dHlwZS5oCmluZGV4IGIzZTY1NmMuLjIwYWU5NmMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2NwdXR5cGUuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9jcHV0eXBlLmgKQEAgLTYzLDYgKzYzLDExIEBACiAJcmV0dXJuIHJlYWRfY3B1aWQoQ1BVSURfQ0FDSEVUWVBFKTsKIH0KIAorc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgX19hdHRyaWJ1dGVfY29uc3RfXyByZWFkX2NwdWlkX3RjbXN0YXR1cyh2b2lkKQoreworCXJldHVybiByZWFkX2NwdWlkKENQVUlEX1RDTSk7Cit9CisKIC8qCiAgKiBJbnRlbCdzIFhTY2FsZTMgY29yZSBzdXBwb3J0cyBzb21lIHY2IGZlYXR1cmVzIChzdXBlcnNlY3Rpb25zLCBMMikKICAqIGJ1dCBhZHZlcnRpc2VzIGl0c2VsZiBhcyB2NSBhcyBpdCBkb2VzIG5vdCBzdXBwb3J0IHRoZSB2NiBJU0EuICBGb3IKQEAgLTczLDcgKzc4LDEwIEBACiAjZWxzZQogc3RhdGljIGlubGluZSBpbnQgY3B1X2lzX3hzYzModm9pZCkKIHsKLQlpZiAoKHJlYWRfY3B1aWRfaWQoKSAmIDB4ZmZmZmUwMDApID09IDB4NjkwNTYwMDApCisJdW5zaWduZWQgaW50IGlkOworCWlkID0gcmVhZF9jcHVpZF9pZCgpICYgMHhmZmZmZTAwMDsKKwkvKiBJdCBjb3ZlcnMgYm90aCBJbnRlbCBJRCBhbmQgTWFydmVsbCBJRCAqLworCWlmICgoaWQgPT0gMHg2OTA1NjAwMCkgfHwgKGlkID09IDB4NTYwNTYwMDApKQogCQlyZXR1cm4gMTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vZWxmLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9lbGYuaAppbmRleCBjM2I5MTFlLi42YWFjM2Y1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9lbGYuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9lbGYuaApAQCAtOTgsNiArOTgsOSBAQAogZXh0ZXJuIGludCBhcm1fZWxmX3JlYWRfaW1wbGllc19leGVjKGNvbnN0IHN0cnVjdCBlbGYzMl9oZHIgKiwgaW50KTsKICNkZWZpbmUgZWxmX3JlYWRfaW1wbGllc19leGVjKGV4LHN0aykgYXJtX2VsZl9yZWFkX2ltcGxpZXNfZXhlYygmKGV4KSwgc3RrKQogCitpbnQgZHVtcF90YXNrX3JlZ3Moc3RydWN0IHRhc2tfc3RydWN0ICp0LCBlbGZfZ3JlZ3NldF90ICplbGZyZWdzKTsKKyNkZWZpbmUgRUxGX0NPUkVfQ09QWV9UQVNLX1JFR1MgZHVtcF90YXNrX3JlZ3MKKwogI2RlZmluZSBVU0VfRUxGX0NPUkVfRFVNUAogI2RlZmluZSBFTEZfRVhFQ19QQUdFU0laRQk0MDk2CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2dsdWUuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2dsdWUuaAppbmRleCBhMGUzOWQ1Li4yMzRhM2ZjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9nbHVlLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vZ2x1ZS5oCkBAIC0xMjAsMjUgKzEyMCwzOSBAQAogI2VuZGlmCiAKIC8qCi0gKiBQcmVmZXRjaCBhYm9ydCBoYW5kbGVyLiAgSWYgdGhlIENQVSBoYXMgYW4gSUZBUiB1c2UgdGhhdCwgb3RoZXJ3aXNlCi0gKiB1c2UgdGhlIGFkZHJlc3Mgb2YgdGhlIGFib3J0ZWQgaW5zdHJ1Y3Rpb24KKyAqCVByZWZldGNoIEFib3J0IE1vZGVsCisgKgk9PT09PT09PT09PT09PT09CisgKgorICoJV2UgaGF2ZSB0aGUgZm9sbG93aW5nIHRvIGNob29zZSBmcm9tOgorICoJICBsZWdhY3kJLSBubyBJRlNSLCBubyBJRkFSCisgKgkgIHY2CQktIEFSTXY2OiBJRlNSLCBubyBJRkFSCisgKgkgIHY3CQktIEFSTXY3OiBJRlNSIGFuZCBJRkFSCiAgKi8KKwogI3VuZGVmIENQVV9QQUJPUlRfSEFORExFUgogI3VuZGVmIE1VTFRJX1BBQk9SVAogCi0jaWZkZWYgQ09ORklHX0NQVV9QQUJSVF9JRkFSCisjaWZkZWYgQ09ORklHX0NQVV9QQUJSVF9MRUdBQ1kKICMgaWZkZWYgQ1BVX1BBQk9SVF9IQU5ETEVSCiAjICBkZWZpbmUgTVVMVElfUEFCT1JUIDEKICMgZWxzZQotIyAgZGVmaW5lIENQVV9QQUJPUlRfSEFORExFUihyZWcsIGluc24pCW1yYyBwMTUsIDAsIHJlZywgY3I2LCBjcjAsIDIKKyMgIGRlZmluZSBDUFVfUEFCT1JUX0hBTkRMRVIgbGVnYWN5X3BhYm9ydAogIyBlbmRpZgogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfQ1BVX1BBQlJUX05PSUZBUgorI2lmZGVmIENPTkZJR19DUFVfUEFCUlRfVjYKICMgaWZkZWYgQ1BVX1BBQk9SVF9IQU5ETEVSCiAjICBkZWZpbmUgTVVMVElfUEFCT1JUIDEKICMgZWxzZQotIyAgZGVmaW5lIENQVV9QQUJPUlRfSEFORExFUihyZWcsIGluc24pCW1vdiByZWcsIGluc24KKyMgIGRlZmluZSBDUFVfUEFCT1JUX0hBTkRMRVIgdjZfcGFib3J0CisjIGVuZGlmCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19DUFVfUEFCUlRfVjcKKyMgaWZkZWYgQ1BVX1BBQk9SVF9IQU5ETEVSCisjICBkZWZpbmUgTVVMVElfUEFCT1JUIDEKKyMgZWxzZQorIyAgZGVmaW5lIENQVV9QQUJPUlRfSEFORExFUiB2N19wYWJvcnQKICMgZW5kaWYKICNlbmRpZgogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9oYXJkd2FyZS9pb3AzeHguaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2hhcmR3YXJlL2lvcDN4eC5oCmluZGV4IDRiOGU3ZjUuLjhkNjBhZDIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2hhcmR3YXJlL2lvcDN4eC5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2hhcmR3YXJlL2lvcDN4eC5oCkBAIC0yMTUsNiArMjE1LDcgQEAKICAqIElPUDNYWCBJL08gYW5kIE1lbSBzcGFjZSByZWdpb25zIGZvciBQQ0kgYXV0b2NvbmZpZ3VyYXRpb24KICAqLwogI2RlZmluZSBJT1AzWFhfUENJX0xPV0VSX01FTV9QQQkweDgwMDAwMDAwCisjZGVmaW5lIElPUDNYWF9QQ0lfTUVNX1dJTkRPV19TSVpFCTB4MDgwMDAwMDAKIAogI2RlZmluZSBJT1AzWFhfUENJX0lPX1dJTkRPV19TSVpFCTB4MDAwMTAwMDAKICNkZWZpbmUgSU9QM1hYX1BDSV9MT1dFUl9JT19QQQkJMHg5MDAwMDAwMApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vc21wX3BsYXQuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3NtcF9wbGF0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTkzMDNlMgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3NtcF9wbGF0LmgKQEAgLTAsMCArMSwxNiBAQAorLyoKKyAqIEFSTSBzcGVjaWZpYyBTTVAgaGVhZGVyLCB0aGlzIGNvbnRhaW5zIG91ciBpbXBsZW1lbnRhdGlvbgorICogZGV0YWlscy4KKyAqLworI2lmbmRlZiBfX0FTTUFSTV9TTVBfUExBVF9ICisjZGVmaW5lIF9fQVNNQVJNX1NNUF9QTEFUX0gKKworI2luY2x1ZGUgPGFzbS9jcHV0eXBlLmg+CisKKy8qIGFsbCBTTVAgY29uZmlndXJhdGlvbnMgaGF2ZSB0aGUgZXh0ZW5kZWQgQ1BVSUQgcmVnaXN0ZXJzICovCitzdGF0aWMgaW5saW5lIGludCB0bGJfb3BzX25lZWRfYnJvYWRjYXN0KHZvaWQpCit7CisJcmV0dXJuICgocmVhZF9jcHVpZF9leHQoQ1BVSURfRVhUX01NRlIzKSA+PiAxMikgJiAweGYpIDwgMjsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS90Y20uaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3RjbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5MjllZjUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS90Y20uaApAQCAtMCwwICsxLDMxIEBACisvKgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IFNULUVyaWNzc29uIEFCCisgKiBMaWNlbnNlIHRlcm1zOiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSB2ZXJzaW9uIDIKKyAqCisgKiBBdXRob3I6IFJpY2thcmQgQW5kZXJzc29uIDxyaWNrYXJkLmFuZGVyc3NvbkBzdGVyaWNzc29uLmNvbT4KKyAqIEF1dGhvcjogTGludXMgV2FsbGVpaiA8bGludXMud2FsbGVpakBzdGVyaWNzc29uLmNvbT4KKyAqCisgKi8KKyNpZm5kZWYgX19BU01BUk1fVENNX0gKKyNkZWZpbmUgX19BU01BUk1fVENNX0gKKworI2lmbmRlZiBDT05GSUdfSEFWRV9UQ00KKyNlcnJvciAiWW91IHNob3VsZCBub3QgYmUgaW5jbHVkaW5nIHRjbS5oIHVubGVzcyB5b3UgaGF2ZSBhIFRDTSEiCisjZW5kaWYKKworI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisKKy8qIFRhZyB2YXJpYWJsZXMgd2l0aCB0aGlzICovCisjZGVmaW5lIF9fdGNtZGF0YSBfX3NlY3Rpb24oLnRjbS5kYXRhKQorLyogVGFnIGNvbnN0YW50cyB3aXRoIHRoaXMgKi8KKyNkZWZpbmUgX190Y21jb25zdCBfX3NlY3Rpb24oLnRjbS5yb2RhdGEpCisvKiBUYWcgZnVuY3Rpb25zIGluc2lkZSBUQ00gY2FsbGVkIGZyb20gb3V0c2lkZSBUQ00gd2l0aCB0aGlzICovCisjZGVmaW5lIF9fdGNtZnVuYyBfX2F0dHJpYnV0ZV9fKChsb25nX2NhbGwpKSBfX3NlY3Rpb24oLnRjbS50ZXh0KSBub2lubGluZQorLyogVGFnIGZ1bmN0aW9uIGluc2lkZSBUQ00gY2FsbGVkIGZyb20gaW5zaWRlIFRDTSAgd2l0aCB0aGlzICovCisjZGVmaW5lIF9fdGNtbG9jYWxmdW5jIF9fc2VjdGlvbigudGNtLnRleHQpCisKK3ZvaWQgKnRjbV9hbGxvYyhzaXplX3QgbGVuKTsKK3ZvaWQgdGNtX2ZyZWUodm9pZCAqYWRkciwgc2l6ZV90IGxlbik7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vdGxiZmx1c2guaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3RsYmZsdXNoLmgKaW5kZXggYTQ1YWI1ZC4uYzJmMTYwNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vdGxiZmx1c2guaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS90bGJmbHVzaC5oCkBAIC0zNTAsNyArMzUwLDcgQEAKIAlpZiAodGxiX2ZsYWcoVExCX1dCKSkKIAkJZHNiKCk7CiAKLQlpZiAoY3B1bWFza190ZXN0X2NwdShzbXBfcHJvY2Vzc29yX2lkKCksIG1tX2NwdW1hc2sobW0pKSkgeworCWlmIChjcHVtYXNrX3Rlc3RfY3B1KGdldF9jcHUoKSwgbW1fY3B1bWFzayhtbSkpKSB7CiAJCWlmICh0bGJfZmxhZyhUTEJfVjNfRlVMTCkpCiAJCQlhc20oIm1jciBwMTUsIDAsICUwLCBjNiwgYzAsIDAiIDogOiAiciIgKHplcm8pIDogImNjIik7CiAJCWlmICh0bGJfZmxhZyhUTEJfVjRfVV9GVUxMKSkKQEAgLTM2MCw2ICszNjAsNyBAQAogCQlpZiAodGxiX2ZsYWcoVExCX1Y0X0lfRlVMTCkpCiAJCQlhc20oIm1jciBwMTUsIDAsICUwLCBjOCwgYzUsIDAiIDogOiAiciIgKHplcm8pIDogImNjIik7CiAJfQorCXB1dF9jcHUoKTsKIAogCWlmICh0bGJfZmxhZyhUTEJfVjZfVV9BU0lEKSkKIAkJYXNtKCJtY3IgcDE1LCAwLCAlMCwgYzgsIGM3LCAyIiA6IDogInIiIChhc2lkKSA6ICJjYyIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vdW5pZmllZC5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vdW5pZmllZC5oCmluZGV4IDA3M2U4NWIuLmJjNjMxMTYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3VuaWZpZWQuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS91bmlmaWVkLmgKQEAgLTM1LDcgKzM1LDkgQEAKIAogI2RlZmluZSBBUk0oeC4uLikKICNkZWZpbmUgVEhVTUIoeC4uLikJeAorI2lmZGVmIF9fQVNTRU1CTFlfXwogI2RlZmluZSBXKGluc3RyKQlpbnN0ci53CisjZW5kaWYKICNkZWZpbmUgQlNZTShzeW0pCXN5bSArIDEKIAogI2Vsc2UJLyogIUNPTkZJR19USFVNQjJfS0VSTkVMICovCkBAIC00NSw3ICs0Nyw5IEBACiAKICNkZWZpbmUgQVJNKHguLi4pCXgKICNkZWZpbmUgVEhVTUIoeC4uLikKKyNpZmRlZiBfX0FTU0VNQkxZX18KICNkZWZpbmUgVyhpbnN0cikJaW5zdHIKKyNlbmRpZgogI2RlZmluZSBCU1lNKHN5bSkJc3ltCiAKICNlbmRpZgkvKiBDT05GSUdfVEhVTUIyX0tFUk5FTCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vdW5pc3RkLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS91bmlzdGQuaAppbmRleCA4OWY3ZWFkLi43MDIwMjE3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS91bmlzdGQuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS91bmlzdGQuaApAQCAtNDU2LDYgKzQ1Niw3IEBACiAgKiBVbmltcGxlbWVudGVkIChvciBhbHRlcm5hdGl2ZWx5IGltcGxlbWVudGVkKSBzeXNjYWxscwogICovCiAjZGVmaW5lIF9fSUdOT1JFX2ZhZHZpc2U2NF82NAkJMQorI2RlZmluZSBfX0lHTk9SRV9taWdyYXRlX3BhZ2VzCQkxCiAKICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAjZW5kaWYgLyogX19BU01fQVJNX1VOSVNURF9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvTWFrZWZpbGUgYi9hcmNoL2FybS9rZXJuZWwvTWFrZWZpbGUKaW5kZXggYzQ0NmFlZi4uNzkwODdkZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9NYWtlZmlsZQpAQCAtMzUsNiArMzUsNyBAQAogb2JqLSQoQ09ORklHX0FSTV9USFVNQkVFKQkrPSB0aHVtYmVlLm8KIG9iai0kKENPTkZJR19LR0RCKQkJKz0ga2dkYi5vCiBvYmotJChDT05GSUdfQVJNX1VOV0lORCkJKz0gdW53aW5kLm8KK29iai0kKENPTkZJR19IQVZFX1RDTSkJCSs9IHRjbS5vCiAKIG9iai0kKENPTkZJR19DUlVOQ0gpCQkrPSBjcnVuY2gubyBjcnVuY2gtYml0cy5vCiBBRkxBR1NfY3J1bmNoLWJpdHMubwkJOj0gLVdhLC1tY3B1PWVwOTMxMgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL2VudHJ5LWFybXYuUyBiL2FyY2gvYXJtL2tlcm5lbC9lbnRyeS1hcm12LlMKaW5kZXggM2Q3MjdhOC4uMDAyMmI0ZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL2VudHJ5LWFybXYuUworKysgYi9hcmNoL2FybS9rZXJuZWwvZW50cnktYXJtdi5TCkBAIC0yNzIsNyArMjcyLDE1IEBACiAJQAogCUAgIHIwIC0gaW5zdHJ1Y3Rpb24KIAlACisjaWZuZGVmCUNPTkZJR19USFVNQjJfS0VSTkVMCiAJbGRyCXIwLCBbcjIsICMtNF0KKyNlbHNlCisJbGRyaAlyMCwgW3IyLCAjLTJdCQkJQCBUaHVtYiBpbnN0cnVjdGlvbiBhdCBMUiAtIDIKKwlhbmQJcjksIHIwLCAjMHhmODAwCisJY21wCXI5LCAjMHhlODAwCQkJQCAzMi1iaXQgaW5zdHJ1Y3Rpb24gaWYgeHggPj0gMAorCWxkcmhocwlyOSwgW3IyXQkJCUAgYm90dG9tIDE2IGJpdHMKKwlvcnJocwlyMCwgcjksIHIwLCBsc2wgIzE2CisjZW5kaWYKIAlhZHIJcjksIEJTWU0oMWYpCiAJYmwJY2FsbF9mcGUKIApAQCAtMzAzLDIyICszMTEsMTYgQEAKIAl0c3QJcjMsICNQU1JfSV9CSVQKIAliaWNlcQlyOSwgcjksICNQU1JfSV9CSVQKIAotCUAKLQlAIHNldCBhcmdzLCB0aGVuIGNhbGwgbWFpbiBoYW5kbGVyCi0JQAotCUAgIHIwIC0gYWRkcmVzcyBvZiBmYXVsdGluZyBpbnN0cnVjdGlvbgotCUAgIHIxIC0gcG9pbnRlciB0byByZWdpc3RlcnMgb24gc3RhY2sKLQlACi0jaWZkZWYgTVVMVElfUEFCT1JUCiAJbW92CXIwLCByMgkJCUAgcGFzcyBhZGRyZXNzIG9mIGFib3J0ZWQgaW5zdHJ1Y3Rpb24uCisjaWZkZWYgTVVMVElfUEFCT1JUCiAJbGRyCXI0LCAuTENwcm9jZm5zCiAJbW92CWxyLCBwYwogCWxkcglwYywgW3I0LCAjUFJPQ0VTU09SX1BBQlRfRlVOQ10KICNlbHNlCi0JQ1BVX1BBQk9SVF9IQU5ETEVSKHIwLCByMikKKwlibAlDUFVfUEFCT1JUX0hBTkRMRVIKICNlbmRpZgogCW1zcgljcHNyX2MsIHI5CQkJQCBNYXliZSBlbmFibGUgaW50ZXJydXB0cwotCW1vdglyMSwgc3AJCQkJQCByZWdzCisJbW92CXIyLCBzcAkJCQlAIHJlZ3MKIAlibAlkb19QcmVmZXRjaEFib3J0CQlAIGNhbGwgYWJvcnQgaGFuZGxlcgogCiAJQApAQCAtNjA2LDMzICs2MDgsMzMgQEAKICBUSFVNQigJYWRkCXBjLCByOAkJCSkKIAlub3AKIAotCVcobW92KQlwYywgbHIJCQkJQCBDUCMwCisJbW92d19wYwlscgkJCQlAIENQIzAKIAlXKGIpCWRvX2ZwZQkJCQlAIENQIzEgKEZQRSkKIAlXKGIpCWRvX2ZwZQkJCQlAIENQIzIgKEZQRSkKLQlXKG1vdikJcGMsIGxyCQkJCUAgQ1AjMworCW1vdndfcGMJbHIJCQkJQCBDUCMzCiAjaWZkZWYgQ09ORklHX0NSVU5DSAogCWIJY3J1bmNoX3Rhc2tfZW5hYmxlCQlAIENQIzQgKE1hdmVyaWNrQ3J1bmNoKQogCWIJY3J1bmNoX3Rhc2tfZW5hYmxlCQlAIENQIzUgKE1hdmVyaWNrQ3J1bmNoKQogCWIJY3J1bmNoX3Rhc2tfZW5hYmxlCQlAIENQIzYgKE1hdmVyaWNrQ3J1bmNoKQogI2Vsc2UKLQlXKG1vdikJcGMsIGxyCQkJCUAgQ1AjNAotCVcobW92KQlwYywgbHIJCQkJQCBDUCM1Ci0JVyhtb3YpCXBjLCBscgkJCQlAIENQIzYKKwltb3Z3X3BjCWxyCQkJCUAgQ1AjNAorCW1vdndfcGMJbHIJCQkJQCBDUCM1CisJbW92d19wYwlscgkJCQlAIENQIzYKICNlbmRpZgotCVcobW92KQlwYywgbHIJCQkJQCBDUCM3Ci0JVyhtb3YpCXBjLCBscgkJCQlAIENQIzgKLQlXKG1vdikJcGMsIGxyCQkJCUAgQ1AjOQorCW1vdndfcGMJbHIJCQkJQCBDUCM3CisJbW92d19wYwlscgkJCQlAIENQIzgKKwltb3Z3X3BjCWxyCQkJCUAgQ1AjOQogI2lmZGVmIENPTkZJR19WRlAKIAlXKGIpCWRvX3ZmcAkJCQlAIENQIzEwIChWRlApCiAJVyhiKQlkb192ZnAJCQkJQCBDUCMxMSAoVkZQKQogI2Vsc2UKLQlXKG1vdikJcGMsIGxyCQkJCUAgQ1AjMTAgKFZGUCkKLQlXKG1vdikJcGMsIGxyCQkJCUAgQ1AjMTEgKFZGUCkKKwltb3Z3X3BjCWxyCQkJCUAgQ1AjMTAgKFZGUCkKKwltb3Z3X3BjCWxyCQkJCUAgQ1AjMTEgKFZGUCkKICNlbmRpZgotCVcobW92KQlwYywgbHIJCQkJQCBDUCMxMgotCVcobW92KQlwYywgbHIJCQkJQCBDUCMxMwotCVcobW92KQlwYywgbHIJCQkJQCBDUCMxNCAoRGVidWcpCi0JVyhtb3YpCXBjLCBscgkJCQlAIENQIzE1IChDb250cm9sKQorCW1vdndfcGMJbHIJCQkJQCBDUCMxMgorCW1vdndfcGMJbHIJCQkJQCBDUCMxMworCW1vdndfcGMJbHIJCQkJQCBDUCMxNCAoRGVidWcpCisJbW92d19wYwlscgkJCQlAIENQIzE1IChDb250cm9sKQogCiAjaWZkZWYgQ09ORklHX05FT04KIAkuYWxpZ24JNgpAQCAtNjc4LDcgKzY4MCw5IEBACiAJLndvcmQJbm9fZnAKIAkucHJldmlvdXMKIAotbm9fZnA6CW1vdglwYywgbHIKK0VOVFJZKG5vX2ZwKQorCW1vdglwYywgbHIKK0VORFBST0Mobm9fZnApCiAKIF9fdW5kX3Vzcl91bmtub3duOgogCWVuYWJsZV9pcnEKQEAgLTY5MSwxNiArNjk1LDE2IEBACiBfX3BhYnRfdXNyOgogCXVzcl9lbnRyeQogCi0jaWZkZWYgTVVMVElfUEFCT1JUCiAJbW92CXIwLCByMgkJCUAgcGFzcyBhZGRyZXNzIG9mIGFib3J0ZWQgaW5zdHJ1Y3Rpb24uCisjaWZkZWYgTVVMVElfUEFCT1JUCiAJbGRyCXI0LCAuTENwcm9jZm5zCiAJbW92CWxyLCBwYwogCWxkcglwYywgW3I0LCAjUFJPQ0VTU09SX1BBQlRfRlVOQ10KICNlbHNlCi0JQ1BVX1BBQk9SVF9IQU5ETEVSKHIwLCByMikKKwlibAlDUFVfUEFCT1JUX0hBTkRMRVIKICNlbmRpZgogCWVuYWJsZV9pcnEJCQkJQCBFbmFibGUgaW50ZXJydXB0cwotCW1vdglyMSwgc3AJCQkJQCByZWdzCisJbW92CXIyLCBzcAkJCQlAIHJlZ3MKIAlibAlkb19QcmVmZXRjaEFib3J0CQlAIGNhbGwgYWJvcnQgaGFuZGxlcgogIFVOV0lORCguZm5lbmQJCSkKIAkvKiBmYWxsIHRocm91Z2ggKi8KQEAgLTczNCwxMyArNzM4LDYgQEAKICNpZmRlZiBDT05GSUdfTU1VCiAJbGRyCXI2LCBbcjIsICNUSV9DUFVfRE9NQUlOXQogI2VuZGlmCi0jaWYgX19MSU5VWF9BUk1fQVJDSF9fID49IDYKLSNpZmRlZiBDT05GSUdfQ1BVXzMydjZLCi0JY2xyZXgKLSNlbHNlCi0Jc3RyZXgJcjUsIHI0LCBbaXBdCQkJQCBDbGVhciBleGNsdXNpdmUgbW9uaXRvcgotI2VuZGlmCi0jZW5kaWYKICNpZiBkZWZpbmVkKENPTkZJR19IQVNfVExTX1JFRykKIAltY3IJcDE1LCAwLCByMywgYzEzLCBjMCwgMwkJQCBzZXQgVExTIHJlZ2lzdGVyCiAjZWxpZiAhZGVmaW5lZChDT05GSUdfVExTX1JFR19FTVVMKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL2VudHJ5LWNvbW1vbi5TIGIvYXJjaC9hcm0va2VybmVsL2VudHJ5LWNvbW1vbi5TCmluZGV4IDgwN2NmZWIuLmYwZmU5NWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9lbnRyeS1jb21tb24uUworKysgYi9hcmNoL2FybS9rZXJuZWwvZW50cnktY29tbW9uLlMKQEAgLTEyNiw3ICsxMjYsNyBAQAogCWNtcCByMCwgcjIKIAlibmUgZ251X3RyYWNlCiAJbGRtaWEgc3AhLCB7cjAtcjMsIGlwLCBscn0KLQlieCBpcAorCW1vdiBwYywgaXAKIAogZ251X3RyYWNlOgogCWxkciByMSwgW3NwLCAjMjBdCQkJQCBsciBvZiBpbnN0cnVtZW50ZWQgcm91dGluZQpAQCAtMTM1LDcgKzEzNSw3IEBACiAJbW92IGxyLCBwYwogCW1vdiBwYywgcjIKIAlsZG1pYSBzcCEsIHtyMC1yMywgaXAsIGxyfQotCWJ4IGlwCisJbW92IHBjLCBpcAogCiBFTlRSWShtY291bnQpCiAJc3RtZGIgc3AhLCB7cjAtcjMsIGxyfQpAQCAtNDI1LDEzICs0MjUsNiBAQAogI2VuZGlmCiBFTkRQUk9DKHN5c19tbWFwMikKIAotRU5UUlkocGFib3J0X2lmYXIpCi0JCW1yYwlwMTUsIDAsIHIwLCBjcjYsIGNyMCwgMgotRU5UUlkocGFib3J0X25vaWZhcikKLQkJbW92CXBjLCBscgotRU5EUFJPQyhwYWJvcnRfaWZhcikKLUVORFBST0MocGFib3J0X25vaWZhcikKLQogI2lmZGVmIENPTkZJR19PQUJJX0NPTVBBVAogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL2VudHJ5LWhlYWRlci5TIGIvYXJjaC9hcm0va2VybmVsL2VudHJ5LWhlYWRlci5TCmluZGV4IGE0ZWFmNGYuLjdlOWVkMWUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9lbnRyeS1oZWFkZXIuUworKysgYi9hcmNoL2FybS9rZXJuZWwvZW50cnktaGVhZGVyLlMKQEAgLTc2LDEzICs3NiwyNyBAQAogI2lmbmRlZiBDT05GSUdfVEhVTUIyX0tFUk5FTAogCS5tYWNybwlzdmNfZXhpdCwgcnBzcgogCW1zcglzcHNyX2N4c2YsIFxycHNyCisjaWYgZGVmaW5lZChDT05GSUdfQ1BVXzMydjZLKQorCWNscmV4CQkJCQlAIGNsZWFyIHRoZSBleGNsdXNpdmUgbW9uaXRvcgogCWxkbWlhCXNwLCB7cjAgLSBwY31eCQkJQCBsb2FkIHIwIC0gcGMsIGNwc3IKKyNlbGlmIGRlZmluZWQgKENPTkZJR19DUFVfVjYpCisJbGRyCXIwLCBbc3BdCisJc3RyZXgJcjEsIHIyLCBbc3BdCQkJQCBjbGVhciB0aGUgZXhjbHVzaXZlIG1vbml0b3IKKwlsZG1pYglzcCwge3IxIC0gcGN9XgkJCUAgbG9hZCByMSAtIHBjLCBjcHNyCisjZWxzZQorCWxkbWlhCXNwLCB7cjAgLSBwY31eCQkJQCBsb2FkIHIwIC0gcGMsIGNwc3IKKyNlbmRpZgogCS5lbmRtCiAKIAkubWFjcm8JcmVzdG9yZV91c2VyX3JlZ3MsIGZhc3QgPSAwLCBvZmZzZXQgPSAwCiAJbGRyCXIxLCBbc3AsICNcb2Zmc2V0ICsgU19QU1JdCUAgZ2V0IGNhbGxpbmcgY3BzcgogCWxkcglsciwgW3NwLCAjXG9mZnNldCArIFNfUENdIQlAIGdldCBwYwogCW1zcglzcHNyX2N4c2YsIHIxCQkJQCBzYXZlIGluIHNwc3Jfc3ZjCisjaWYgZGVmaW5lZChDT05GSUdfQ1BVXzMydjZLKQorCWNscmV4CQkJCQlAIGNsZWFyIHRoZSBleGNsdXNpdmUgbW9uaXRvcgorI2VsaWYgZGVmaW5lZCAoQ09ORklHX0NQVV9WNikKKwlzdHJleAlyMSwgcjIsIFtzcF0JCQlAIGNsZWFyIHRoZSBleGNsdXNpdmUgbW9uaXRvcgorI2VuZGlmCiAJLmlmCVxmYXN0CiAJbGRtZGIJc3AsIHtyMSAtIGxyfV4JCQlAIGdldCBjYWxsaW5nIHIxIC0gbHIKIAkuZWxzZQpAQCAtOTYsOCArMTEwLDE2IEBACiAJbW92CVxyZCwgc3AsIGxzciAjMTMKIAltb3YJXHJkLCBccmQsIGxzbCAjMTMKIAkuZW5kbQorCisJQAorCUAgMzItYml0IHdpZGUgIm1vdiBwYywgcmVnIgorCUAKKwkubWFjcm8JbW92d19wYywgcmVnCisJbW92CXBjLCBccmVnCisJLmVuZG0KICNlbHNlCS8qIENPTkZJR19USFVNQjJfS0VSTkVMICovCiAJLm1hY3JvCXN2Y19leGl0LCBycHNyCisJY2xyZXgJCQkJCUAgY2xlYXIgdGhlIGV4Y2x1c2l2ZSBtb25pdG9yCiAJbGRyCXIwLCBbc3AsICNTX1NQXQkJCUAgdG9wIG9mIHRoZSBzdGFjawogCWxkcglyMSwgW3NwLCAjU19QQ10JCQlAIHJldHVybiBhZGRyZXNzCiAJdHN0CXIwLCAjNAkJCQlAIG9yaWcgc3RhY2sgOC1ieXRlIGFsaWduZWQ/CkBAIC0xMTAsNiArMTMyLDcgQEAKIAkuZW5kbQogCiAJLm1hY3JvCXJlc3RvcmVfdXNlcl9yZWdzLCBmYXN0ID0gMCwgb2Zmc2V0ID0gMAorCWNscmV4CQkJCQlAIGNsZWFyIHRoZSBleGNsdXNpdmUgbW9uaXRvcgogCW1vdglyMiwgc3AKIAlsb2FkX3VzZXJfc3BfbHIgcjIsIHIzLCBcb2Zmc2V0ICsgU19TUAlAIGNhbGxpbmcgc3AsIGxyCiAJbGRyCXIxLCBbc3AsICNcb2Zmc2V0ICsgU19QU1JdCUAgZ2V0IGNhbGxpbmcgY3BzcgpAQCAtMTMwLDYgKzE1MywxNCBAQAogCWxzcglccmQsIFxyZCwgIzEzCiAJbW92CVxyZCwgXHJkLCBsc2wgIzEzCiAJLmVuZG0KKworCUAKKwlAIDMyLWJpdCB3aWRlICJtb3YgcGMsIHJlZyIKKwlACisJLm1hY3JvCW1vdndfcGMsIHJlZworCW1vdglwYywgXHJlZworCW5vcAorCS5lbmRtCiAjZW5kaWYJLyogIUNPTkZJR19USFVNQjJfS0VSTkVMICovCiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvaGVhZC1jb21tb24uUyBiL2FyY2gvYXJtL2tlcm5lbC9oZWFkLWNvbW1vbi5TCmluZGV4IDkzYWQ1NzYuLjg4NWE3MjEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9oZWFkLWNvbW1vbi5TCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9oZWFkLWNvbW1vbi5TCkBAIC0xMyw2ICsxMyw3IEBACiAKICNkZWZpbmUgQVRBR19DT1JFIDB4NTQ0MTAwMDEKICNkZWZpbmUgQVRBR19DT1JFX1NJWkUgKCgyKjQgKyAzKjQpID4+IDIpCisjZGVmaW5lIEFUQUdfQ09SRV9TSVpFX0VNUFRZICgoMio0KSA+PiAyKQogCiAJLmFsaWduCTIKIAkudHlwZQlfX3N3aXRjaF9kYXRhLCAlb2JqZWN0CkBAIC0yNTEsNyArMjUyLDggQEAKIAlibmUJMWYKIAogCWxkcglyNSwgW3IyLCAjMF0JCQlAIGlzIGZpcnN0IHRhZyBBVEFHX0NPUkU/Ci0Jc3VicwlyNSwgcjUsICNBVEFHX0NPUkVfU0laRQorCWNtcAlyNSwgI0FUQUdfQ09SRV9TSVpFCisJY21wbmUJcjUsICNBVEFHX0NPUkVfU0laRV9FTVBUWQogCWJuZQkxZgogCWxkcglyNSwgW3IyLCAjNF0KIAlsZHIJcjYsID1BVEFHX0NPUkUKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9rcHJvYmVzLmMgYi9hcmNoL2FybS9rZXJuZWwva3Byb2Jlcy5jCmluZGV4IGY2OTJlZmQuLjYwYzYyYzMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9rcHJvYmVzLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL2twcm9iZXMuYwpAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2twcm9iZXMuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zdG9wX21hY2hpbmUuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmdpZnkuaD4KICNpbmNsdWRlIDxhc20vdHJhcHMuaD4KICNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgpAQCAtODMsMTAgKzg0LDI0IEBACiAJZmx1c2hfaW5zbnMocC0+YWRkciwgMSk7CiB9CiAKKy8qCisgKiBUaGUgYWN0dWFsIGRpc2FybWluZyBpcyBkb25lIGhlcmUgb24gZWFjaCBDUFUgYW5kIHN5bmNocm9uaXplZCB1c2luZworICogc3RvcF9tYWNoaW5lLiBUaGlzIHN5bmNocm9uaXphdGlvbiBpcyBuZWNlc3Nhcnkgb24gU01QIHRvIGF2b2lkIHJlbW92aW5nCisgKiBhIHByb2JlIGJldHdlZW4gdGhlIG1vbWVudCB0aGUgJ1VuZGVmaW5lZCBJbnN0cnVjdGlvbicgZXhjZXB0aW9uIGlzIHJhaXNlZAorICogYW5kIHRoZSBtb21lbnQgdGhlIGV4Y2VwdGlvbiBoYW5kbGVyIHJlYWRzIHRoZSBmYXVsdGluZyBpbnN0cnVjdGlvbiBmcm9tCisgKiBtZW1vcnkuCisgKi8KK2ludCBfX2twcm9iZXMgX19hcmNoX2Rpc2FybV9rcHJvYmUodm9pZCAqcCkKK3sKKwlzdHJ1Y3Qga3Byb2JlICprcCA9IHA7CisJKmtwLT5hZGRyID0ga3AtPm9wY29kZTsKKwlmbHVzaF9pbnNucyhrcC0+YWRkciwgMSk7CisJcmV0dXJuIDA7Cit9CisKIHZvaWQgX19rcHJvYmVzIGFyY2hfZGlzYXJtX2twcm9iZShzdHJ1Y3Qga3Byb2JlICpwKQogewotCSpwLT5hZGRyID0gcC0+b3Bjb2RlOwotCWZsdXNoX2luc25zKHAtPmFkZHIsIDEpOworCXN0b3BfbWFjaGluZShfX2FyY2hfZGlzYXJtX2twcm9iZSwgcCwgJmNwdV9vbmxpbmVfbWFwKTsKIH0KIAogdm9pZCBfX2twcm9iZXMgYXJjaF9yZW1vdmVfa3Byb2JlKHN0cnVjdCBrcHJvYmUgKnApCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvcHJvY2Vzcy5jIGIvYXJjaC9hcm0va2VybmVsL3Byb2Nlc3MuYwppbmRleCA3OTBmYmVlLi4wZDk2ZDAxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvcHJvY2Vzcy5jCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9wcm9jZXNzLmMKQEAgLTMyOCw2ICszMjgsMTUgQEAKIH0KIAogLyoKKyAqIEZpbGwgaW4gdGhlIHRhc2sncyBlbGZyZWdzIHN0cnVjdHVyZSBmb3IgYSBjb3JlIGR1bXAuCisgKi8KK2ludCBkdW1wX3Rhc2tfcmVncyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQsIGVsZl9ncmVnc2V0X3QgKmVsZnJlZ3MpCit7CisJZWxmX2NvcmVfY29weV9yZWdzKGVsZnJlZ3MsIHRhc2tfcHRfcmVncyh0KSk7CisJcmV0dXJuIDE7Cit9CisKKy8qCiAgKiBmaWxsIGluIHRoZSBmcGUgc3RydWN0dXJlIGZvciBhIGNvcmUgZHVtcC4uLgogICovCiBpbnQgZHVtcF9mcHUgKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBzdHJ1Y3QgdXNlcl9mcCAqZnApCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvc2V0dXAuYyBiL2FyY2gvYXJtL2tlcm5lbC9zZXR1cC5jCmluZGV4IGQ0ZDRmNzcuLmM2YzU3YjYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9zZXR1cC5jCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9zZXR1cC5jCkBAIC00NSw2ICs0NSw3IEBACiAKICNpbmNsdWRlICJjb21wYXQuaCIKICNpbmNsdWRlICJhdGFncy5oIgorI2luY2x1ZGUgInRjbS5oIgogCiAjaWZuZGVmIE1FTV9TSVpFCiAjZGVmaW5lIE1FTV9TSVpFCSgxNioxMDI0KjEwMjQpCkBAIC03NDksNiArNzUwLDcgQEAKICNlbmRpZgogCiAJY3B1X2luaXQoKTsKKwl0Y21faW5pdCgpOwogCiAJLyoKIAkgKiBTZXQgdXAgdmFyaW91cyBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgcG9pbnRlcnMKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9zaWduYWwuYyBiL2FyY2gvYXJtL2tlcm5lbC9zaWduYWwuYwppbmRleCAxNDIzYTM0Li4yYTU3M2Q0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvc2lnbmFsLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL3NpZ25hbC5jCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICBsaW51eC9hcmNoL2FybS9rZXJuZWwvc2lnbmFsLmMKICAqCi0gKiAgQ29weXJpZ2h0IChDKSAxOTk1LTIwMDIgUnVzc2VsbCBLaW5nCisgKiAgQ29weXJpZ2h0IChDKSAxOTk1LTIwMDkgUnVzc2VsbCBLaW5nCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCkBAIC0yOSw2ICsyOSw3IEBACiAgKi8KICNkZWZpbmUgU1dJX1NZU19TSUdSRVRVUk4JKDB4ZWYwMDAwMDB8KF9fTlJfc2lncmV0dXJuKXwoX19OUl9PQUJJX1NZU0NBTExfQkFTRSkpCiAjZGVmaW5lIFNXSV9TWVNfUlRfU0lHUkVUVVJOCSgweGVmMDAwMDAwfChfX05SX3J0X3NpZ3JldHVybil8KF9fTlJfT0FCSV9TWVNDQUxMX0JBU0UpKQorI2RlZmluZSBTV0lfU1lTX1JFU1RBUlQJCSgweGVmMDAwMDAwfF9fTlJfcmVzdGFydF9zeXNjYWxsfF9fTlJfT0FCSV9TWVNDQUxMX0JBU0UpCiAKIC8qCiAgKiBXaXRoIEVBQkksIHRoZSBzeXNjYWxsIG51bWJlciBoYXMgdG8gYmUgbG9hZGVkIGludG8gcjcuCkBAIC00OSw2ICs1MCwxOCBAQAogfTsKIAogLyoKKyAqIEVpdGhlciB3ZSBzdXBwb3J0IE9BQkkgb25seSwgb3Igd2UgaGF2ZSBFQUJJIHdpdGggdGhlIE9BQkkKKyAqIGNvbXBhdCBsYXllciBlbmFibGVkLiAgSW4gdGhlIGxhdGVyIGNhc2Ugd2UgZG9uJ3Qga25vdyBpZgorICogdXNlciBzcGFjZSBpcyBFQUJJIG9yIG5vdCwgYW5kIGlmIG5vdCB3ZSBtdXN0IG5vdCBjbG9iYmVyIHI3LgorICogQWx3YXlzIHVzaW5nIHRoZSBPQUJJIHN5c2NhbGwgc29sdmVzIHRoYXQgaXNzdWUgYW5kIHdvcmtzIGZvcgorICogYWxsIHRob3NlIGNhc2VzLgorICovCitjb25zdCB1bnNpZ25lZCBsb25nIHN5c2NhbGxfcmVzdGFydF9jb2RlWzJdID0geworCVNXSV9TWVNfUkVTVEFSVCwJLyogc3dpCV9fTlJfcmVzdGFydF9zeXNjYWxsICovCisJMHhlNDlkZjAwNCwJCS8qIGxkcglwYywgW3NwXSwgIzQgKi8KK307CisKKy8qCiAgKiBhdG9taWNhbGx5IHN3YXAgaW4gdGhlIG5ldyBzaWduYWwgbWFzaywgYW5kIHdhaXQgZm9yIGEgc2lnbmFsLgogICovCiBhc21saW5rYWdlIGludCBzeXNfc2lnc3VzcGVuZChpbnQgcmVzdGFydCwgdW5zaWduZWQgbG9uZyBvbGRtYXNrLCBvbGRfc2lnc2V0X3QgbWFzaykKQEAgLTY0NSwzMiArNjU4LDEyIEBACiAJCQkJcmVncy0+QVJNX3BjIC09IDQ7CiAjZWxzZQogCQkJCXUzMiBfX3VzZXIgKnVzcDsKLQkJCQl1MzIgc3dpdmFsID0gX19OUl9yZXN0YXJ0X3N5c2NhbGw7CiAKLQkJCQlyZWdzLT5BUk1fc3AgLT0gMTI7CisJCQkJcmVncy0+QVJNX3NwIC09IDQ7CiAJCQkJdXNwID0gKHUzMiBfX3VzZXIgKilyZWdzLT5BUk1fc3A7CiAKLQkJCQkvKgotCQkJCSAqIEVpdGhlciB3ZSBzdXBwb3J0cyBPQUJJIG9ubHksIG9yIHdlIGhhdmUKLQkJCQkgKiBFQUJJIHdpdGggdGhlIE9BQkkgY29tcGF0IGxheWVyIGVuYWJsZWQuCi0JCQkJICogSW4gdGhlIGxhdGVyIGNhc2Ugd2UgZG9uJ3Qga25vdyBpZiB1c2VyCi0JCQkJICogc3BhY2UgaXMgRUFCSSBvciBub3QsIGFuZCBpZiBub3Qgd2UgbXVzdAotCQkJCSAqIG5vdCBjbG9iYmVyIHI3LiAgQWx3YXlzIHVzaW5nIHRoZSBPQUJJCi0JCQkJICogc3lzY2FsbCBzb2x2ZXMgdGhhdCBpc3N1ZSBhbmQgd29ya3MgZm9yCi0JCQkJICogYWxsIHRob3NlIGNhc2VzLgotCQkJCSAqLwotCQkJCXN3aXZhbCA9IHN3aXZhbCAtIF9fTlJfU1lTQ0FMTF9CQVNFICsgX19OUl9PQUJJX1NZU0NBTExfQkFTRTsKLQotCQkJCXB1dF91c2VyKHJlZ3MtPkFSTV9wYywgJnVzcFswXSk7Ci0JCQkJLyogc3dpIF9fTlJfcmVzdGFydF9zeXNjYWxsICovCi0JCQkJcHV0X3VzZXIoMHhlZjAwMDAwMCB8IHN3aXZhbCwgJnVzcFsxXSk7Ci0JCQkJLyogbGRyCXBjLCBbc3BdLCAjMTIgKi8KLQkJCQlwdXRfdXNlcigweGU0OWRmMDBjLCAmdXNwWzJdKTsKLQotCQkJCWZsdXNoX2ljYWNoZV9yYW5nZSgodW5zaWduZWQgbG9uZyl1c3AsCi0JCQkJCQkgICAodW5zaWduZWQgbG9uZykodXNwICsgMykpOwotCi0JCQkJcmVncy0+QVJNX3BjID0gcmVncy0+QVJNX3NwICsgNDsKKwkJCQlwdXRfdXNlcihyZWdzLT5BUk1fcGMsIHVzcCk7CisJCQkJcmVncy0+QVJNX3BjID0gS0VSTl9SRVNUQVJUX0NPREU7CiAjZW5kaWYKIAkJCX0KIAkJfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3NpZ25hbC5oIGIvYXJjaC9hcm0va2VybmVsL3NpZ25hbC5oCmluZGV4IDI3YmVlY2UuLjZmY2ZlODMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9zaWduYWwuaAorKysgYi9hcmNoL2FybS9rZXJuZWwvc2lnbmFsLmgKQEAgLTEsMTIgKzEsMTQgQEAKIC8qCiAgKiAgbGludXgvYXJjaC9hcm0va2VybmVsL3NpZ25hbC5oCiAgKgotICogIENvcHlyaWdodCAoQykgMjAwNSBSdXNzZWxsIEtpbmcuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA1LTIwMDkgUnVzc2VsbCBLaW5nLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKi8KICNkZWZpbmUgS0VSTl9TSUdSRVRVUk5fQ09ERQkoQ09ORklHX1ZFQ1RPUlNfQkFTRSArIDB4MDAwMDA1MDApCisjZGVmaW5lIEtFUk5fUkVTVEFSVF9DT0RFCShLRVJOX1NJR1JFVFVSTl9DT0RFICsgc2l6ZW9mKHNpZ3JldHVybl9jb2RlcykpCiAKIGV4dGVybiBjb25zdCB1bnNpZ25lZCBsb25nIHNpZ3JldHVybl9jb2Rlc1s3XTsKK2V4dGVybiBjb25zdCB1bnNpZ25lZCBsb25nIHN5c2NhbGxfcmVzdGFydF9jb2RlWzJdOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3NtcC5jIGIvYXJjaC9hcm0va2VybmVsL3NtcC5jCmluZGV4IGUwZDMyNzcuLjU3MTYyYWYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9zbXAuYworKysgYi9hcmNoL2FybS9rZXJuZWwvc21wLmMKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KICNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CiAjaW5jbHVkZSA8YXNtL2xvY2FsdGltZXIuaD4KKyNpbmNsdWRlIDxhc20vc21wX3BsYXQuaD4KIAogLyoKICAqIGFzIGZyb20gMi41LCBrZXJuZWxzIG5vIGxvbmdlciBoYXZlIGFuIGluaXRfdGFza3Mgc3RydWN0dXJlCkBAIC0xNTMsNyArMTU0LDcgQEAKIC8qCiAgKiBfX2NwdV9kaXNhYmxlIHJ1bnMgb24gdGhlIHByb2Nlc3NvciB0byBiZSBzaHV0ZG93bi4KICAqLwotaW50IF9fY3B1ZXhpdCBfX2NwdV9kaXNhYmxlKHZvaWQpCitpbnQgX19jcHVfZGlzYWJsZSh2b2lkKQogewogCXVuc2lnbmVkIGludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAJc3RydWN0IHRhc2tfc3RydWN0ICpwOwpAQCAtMjAwLDcgKzIwMSw3IEBACiAgKiBjYWxsZWQgb24gdGhlIHRocmVhZCB3aGljaCBpcyBhc2tpbmcgZm9yIGEgQ1BVIHRvIGJlIHNodXRkb3duIC0KICAqIHdhaXRzIHVudGlsIHNodXRkb3duIGhhcyBjb21wbGV0ZWQsIG9yIGl0IGlzIHRpbWVkIG91dC4KICAqLwotdm9pZCBfX2NwdWV4aXQgX19jcHVfZGllKHVuc2lnbmVkIGludCBjcHUpCit2b2lkIF9fY3B1X2RpZSh1bnNpZ25lZCBpbnQgY3B1KQogewogCWlmICghcGxhdGZvcm1fY3B1X2tpbGwoY3B1KSkKIAkJcHJpbnRrKCJDUFUldTogdW5hYmxlIHRvIGtpbGxcbiIsIGNwdSk7CkBAIC0yMTQsNyArMjE1LDcgQEAKICAqIG9mIHRoZSBvdGhlciBob3RwbHVnLWNwdSBjYXBhYmxlIGNvcmVzLCBzbyBwcmVzdW1hYmx5IGNvbWluZwogICogb3V0IG9mIGlkbGUgZml4ZXMgdGhpcy4KICAqLwotdm9pZCBfX2NwdWV4aXQgY3B1X2RpZSh2b2lkKQordm9pZCBfX3JlZiBjcHVfZGllKHZvaWQpCiB7CiAJdW5zaWduZWQgaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIApAQCAtNTg2LDEyICs1ODcsNiBAQAogCXVuc2lnbmVkIGxvbmcgdGFfZW5kOwogfTsKIAotLyogYWxsIFNNUCBjb25maWd1cmF0aW9ucyBoYXZlIHRoZSBleHRlbmRlZCBDUFVJRCByZWdpc3RlcnMgKi8KLXN0YXRpYyBpbmxpbmUgaW50IHRsYl9vcHNfbmVlZF9icm9hZGNhc3Qodm9pZCkKLXsKLQlyZXR1cm4gKChyZWFkX2NwdWlkX2V4dChDUFVJRF9FWFRfTU1GUjMpID4+IDEyKSAmIDB4ZikgPCAyOwotfQotCiBzdGF0aWMgaW5saW5lIHZvaWQgaXBpX2ZsdXNoX3RsYl9hbGwodm9pZCAqaWdub3JlZCkKIHsKIAlsb2NhbF9mbHVzaF90bGJfYWxsKCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvc21wX3R3ZC5jIGIvYXJjaC9hcm0va2VybmVsL3NtcF90d2QuYwppbmRleCBkOGM4OGM2Li5hNzNhMzRkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvc21wX3R3ZC5jCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9zbXBfdHdkLmMKQEAgLTE2NiwxMCArMTY2LDEyIEBACiAJY2xvY2tldmVudHNfcmVnaXN0ZXJfZGV2aWNlKGNsayk7CiB9CiAKKyNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKIC8qCiAgKiB0YWtlIGEgbG9jYWwgdGltZXIgZG93bgogICovCi12b2lkIF9fY3B1ZXhpdCB0d2RfdGltZXJfc3RvcCh2b2lkKQordm9pZCB0d2RfdGltZXJfc3RvcCh2b2lkKQogewogCV9fcmF3X3dyaXRlbCgwLCB0d2RfYmFzZSArIFRXRF9USU1FUl9DT05UUk9MKTsKIH0KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3RjbS5jIGIvYXJjaC9hcm0va2VybmVsL3RjbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1MDMwMzgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9rZXJuZWwvdGNtLmMKQEAgLTAsMCArMSwyNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSBTVC1Fcmljc3NvbiBBQgorICogTGljZW5zZSB0ZXJtczogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgdmVyc2lvbiAyCisgKiBUQ00gbWVtb3J5IGhhbmRsaW5nIGZvciBBUk0gc3lzdGVtcworICoKKyAqIEF1dGhvcjogTGludXMgV2FsbGVpaiA8bGludXMud2FsbGVpakBzdGVyaWNzc29uLmNvbT4KKyAqIEF1dGhvcjogUmlja2FyZCBBbmRlcnNzb24gPHJpY2thcmQuYW5kZXJzc29uQHN0ZXJpY3Nzb24uY29tPgorICovCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L2dlbmFsbG9jLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+IC8qIG1lbWNweSAqLworI2luY2x1ZGUgPGFzbS9wYWdlLmg+IC8qIFBBR0VfU0hJRlQgKi8KKyNpbmNsdWRlIDxhc20vY3B1dHlwZS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorI2luY2x1ZGUgPG1hY2gvbWVtb3J5Lmg+CisjaW5jbHVkZSAidGNtLmgiCisKKy8qIFNjcmVhbSBhbmQgd2FybiBhYm91dCBtaXN1c2UgKi8KKyNpZiAhZGVmaW5lZChJVENNX09GRlNFVCkgfHwgIWRlZmluZWQoSVRDTV9FTkQpIHx8IFwKKyAgICAhZGVmaW5lZChEVENNX09GRlNFVCkgfHwgIWRlZmluZWQoRFRDTV9FTkQpCisjZXJyb3IgIlRDTSBzdXBwb3J0IHNlbGVjdGVkIGJ1dCBvZmZzZXRzIG5vdCBkZWZpbmVkISIKKyNlbmRpZgorCitzdGF0aWMgc3RydWN0IGdlbl9wb29sICp0Y21fcG9vbDsKKworLyogVENNIHNlY3Rpb24gZGVmaW5pdGlvbnMgZnJvbSB0aGUgbGlua2VyICovCitleHRlcm4gY2hhciBfX2l0Y21fc3RhcnQsIF9fc2l0Y21fdGV4dCwgX19laXRjbV90ZXh0OworZXh0ZXJuIGNoYXIgX19kdGNtX3N0YXJ0LCBfX3NkdGNtX2RhdGEsIF9fZWR0Y21fZGF0YTsKKworLyoKKyAqIFRDTSBtZW1vcnkgcmVzb3VyY2VzCisgKi8KK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgZHRjbV9yZXMgPSB7CisJLm5hbWUgPSAiRFRDTSBSQU0iLAorCS5zdGFydCA9IERUQ01fT0ZGU0VULAorCS5lbmQgPSBEVENNX0VORCwKKwkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTQorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBpdGNtX3JlcyA9IHsKKwkubmFtZSA9ICJJVENNIFJBTSIsCisJLnN0YXJ0ID0gSVRDTV9PRkZTRVQsCisJLmVuZCA9IElUQ01fRU5ELAorCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNCit9OworCitzdGF0aWMgc3RydWN0IG1hcF9kZXNjIGR0Y21faW9tYXBbXSBfX2luaXRkYXRhID0geworCXsKKwkJLnZpcnR1YWwJPSBEVENNX09GRlNFVCwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKERUQ01fT0ZGU0VUKSwKKwkJLmxlbmd0aAkJPSAoRFRDTV9FTkQgLSBEVENNX09GRlNFVCArIDEpLAorCQkudHlwZQkJPSBNVF9VTkNBQ0hFRAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2MgaXRjbV9pb21hcFtdIF9faW5pdGRhdGEgPSB7CisJeworCQkudmlydHVhbAk9IElUQ01fT0ZGU0VULAorCQkucGZuCQk9IF9fcGh5c190b19wZm4oSVRDTV9PRkZTRVQpLAorCQkubGVuZ3RoCQk9IChJVENNX0VORCAtIElUQ01fT0ZGU0VUICsgMSksCisJCS50eXBlCQk9IE1UX1VOQ0FDSEVECisJfQorfTsKKworLyoKKyAqIEFsbG9jYXRlIGEgY2h1bmsgb2YgVENNIG1lbW9yeQorICovCit2b2lkICp0Y21fYWxsb2Moc2l6ZV90IGxlbikKK3sKKwl1bnNpZ25lZCBsb25nIHZhZGRyOworCisJaWYgKCF0Y21fcG9vbCkKKwkJcmV0dXJuIE5VTEw7CisKKwl2YWRkciA9IGdlbl9wb29sX2FsbG9jKHRjbV9wb29sLCBsZW4pOworCWlmICghdmFkZHIpCisJCXJldHVybiBOVUxMOworCisJcmV0dXJuICh2b2lkICopIHZhZGRyOworfQorRVhQT1JUX1NZTUJPTCh0Y21fYWxsb2MpOworCisvKgorICogRnJlZSBhIGNodW5rIG9mIFRDTSBtZW1vcnkKKyAqLwordm9pZCB0Y21fZnJlZSh2b2lkICphZGRyLCBzaXplX3QgbGVuKQoreworCWdlbl9wb29sX2ZyZWUodGNtX3Bvb2wsICh1bnNpZ25lZCBsb25nKSBhZGRyLCBsZW4pOworfQorRVhQT1JUX1NZTUJPTCh0Y21fZnJlZSk7CisKKworc3RhdGljIHZvaWQgX19pbml0IHNldHVwX3RjbV9iYW5rKHU4IHR5cGUsIHUzMiBvZmZzZXQsIHUzMiBleHBlY3RlZF9zaXplKQoreworCWNvbnN0IGludCB0Y21fc2l6ZXNbMTZdID0geyAwLCAtMSwgLTEsIDQsIDgsIDE2LCAzMiwgNjQsIDEyOCwKKwkJCQkgICAgMjU2LCA1MTIsIDEwMjQsIC0xLCAtMSwgLTEsIC0xIH07CisJdTMyIHRjbV9yZWdpb247CisJaW50IHRjbV9zaXplOworCisJLyogUmVhZCB0aGUgc3BlY2lhbCBUQ00gcmVnaW9uIHJlZ2lzdGVyIGM5LCAwICovCisJaWYgKCF0eXBlKQorCQlhc20oIm1yYwlwMTUsIDAsICUwLCBjOSwgYzEsIDAiCisJCSAgICA6ICI9ciIgKHRjbV9yZWdpb24pKTsKKwllbHNlCisJCWFzbSgibXJjCXAxNSwgMCwgJTAsIGM5LCBjMSwgMSIKKwkJICAgIDogIj1yIiAodGNtX3JlZ2lvbikpOworCisJdGNtX3NpemUgPSB0Y21fc2l6ZXNbKHRjbV9yZWdpb24gPj4gMikgJiAweDBmXTsKKwlpZiAodGNtX3NpemUgPCAwKSB7CisJCXByX2VycigiQ1BVOiAlc1RDTSBvZiB1bmtub3duIHNpemUhXG4iLAorCQkJdHlwZSA/ICJJIiA6ICJEIik7CisJfSBlbHNlIHsKKwkJcHJfaW5mbygiQ1BVOiBmb3VuZCAlc1RDTSAlZGsgQCAlMDh4LCAlc2VuYWJsZWRcbiIsCisJCQl0eXBlID8gIkkiIDogIkQiLAorCQkJdGNtX3NpemUsCisJCQkodGNtX3JlZ2lvbiAmIDB4ZmZmZmYwMDBVKSwKKwkJCSh0Y21fcmVnaW9uICYgMSkgPyAiIiA6ICJub3QgIik7CisJfQorCisJaWYgKHRjbV9zaXplICE9IGV4cGVjdGVkX3NpemUpIHsKKwkJcHJfY3JpdCgiQ1BVOiAlc1RDTSB3YXMgZGV0ZWN0ZWQgJWRrIGJ1dCBleHBlY3RlZCAlZGshXG4iLAorCQkgICAgICAgdHlwZSA/ICJJIiA6ICJEIiwKKwkJICAgICAgIHRjbV9zaXplLAorCQkgICAgICAgZXhwZWN0ZWRfc2l6ZSk7CisJCS8qIEFkanVzdCB0byB0aGUgZXhwZWN0ZWQgc2l6ZT8gd2hhdCBjYW4gd2UgZG8uLi4gKi8KKwl9CisKKwkvKiBGb3JjZSBtb3ZlIHRoZSBUQ00gYmFuayB0byB3aGVyZSB3ZSB3YW50IGl0LCBlbmFibGUgKi8KKwl0Y21fcmVnaW9uID0gb2Zmc2V0IHwgKHRjbV9yZWdpb24gJiAweDAwMDAwZmZlVSkgfCAxOworCisJaWYgKCF0eXBlKQorCQlhc20oIm1jcglwMTUsIDAsICUwLCBjOSwgYzEsIDAiCisJCSAgICA6IC8qIE5vIG91dHB1dCBvcGVyYW5kcyAqLworCQkgICAgOiAiciIgKHRjbV9yZWdpb24pKTsKKwllbHNlCisJCWFzbSgibWNyCXAxNSwgMCwgJTAsIGM5LCBjMSwgMSIKKwkJICAgIDogLyogTm8gb3V0cHV0IG9wZXJhbmRzICovCisJCSAgICA6ICJyIiAodGNtX3JlZ2lvbikpOworCisJcHJfZGVidWcoIkNQVTogbW92ZWQgJXNUQ00gJWRrIHRvICUwOHgsIGVuYWJsZWRcbiIsCisJCSB0eXBlID8gIkkiIDogIkQiLAorCQkgdGNtX3NpemUsCisJCSAodGNtX3JlZ2lvbiAmIDB4ZmZmZmYwMDBVKSk7Cit9CisKKy8qCisgKiBUaGlzIGluaXRpYWxpemVzIHRoZSBUQ00gbWVtb3J5CisgKi8KK3ZvaWQgX19pbml0IHRjbV9pbml0KHZvaWQpCit7CisJdTMyIHRjbV9zdGF0dXMgPSByZWFkX2NwdWlkX3RjbXN0YXR1cygpOworCWNoYXIgKnN0YXJ0OworCWNoYXIgKmVuZDsKKwljaGFyICpyYW07CisKKwkvKiBTZXR1cCBEVENNIGlmIHByZXNlbnQgKi8KKwlpZiAodGNtX3N0YXR1cyAmICgxIDw8IDE2KSkgeworCQlzZXR1cF90Y21fYmFuaygwLCBEVENNX09GRlNFVCwKKwkJCSAgICAgICAoRFRDTV9FTkQgLSBEVENNX09GRlNFVCArIDEpID4+IDEwKTsKKwkJcmVxdWVzdF9yZXNvdXJjZSgmaW9tZW1fcmVzb3VyY2UsICZkdGNtX3Jlcyk7CisJCWlvdGFibGVfaW5pdChkdGNtX2lvbWFwLCAxKTsKKwkJLyogQ29weSBkYXRhIGZyb20gUkFNIHRvIERUQ00gKi8KKwkJc3RhcnQgPSAmX19zZHRjbV9kYXRhOworCQllbmQgICA9ICZfX2VkdGNtX2RhdGE7CisJCXJhbSAgID0gJl9fZHRjbV9zdGFydDsKKwkJbWVtY3B5KHN0YXJ0LCByYW0sIChlbmQtc3RhcnQpKTsKKwkJcHJfZGVidWcoIkNQVSBEVENNOiBjb3BpZWQgZGF0YSBmcm9tICVwIC0gJXBcbiIsIHN0YXJ0LCBlbmQpOworCX0KKworCS8qIFNldHVwIElUQ00gaWYgcHJlc2VudCAqLworCWlmICh0Y21fc3RhdHVzICYgMSkgeworCQlzZXR1cF90Y21fYmFuaygxLCBJVENNX09GRlNFVCwKKwkJCSAgICAgICAoSVRDTV9FTkQgLSBJVENNX09GRlNFVCArIDEpID4+IDEwKTsKKwkJcmVxdWVzdF9yZXNvdXJjZSgmaW9tZW1fcmVzb3VyY2UsICZpdGNtX3Jlcyk7CisJCWlvdGFibGVfaW5pdChpdGNtX2lvbWFwLCAxKTsKKwkJLyogQ29weSBjb2RlIGZyb20gUkFNIHRvIElUQ00gKi8KKwkJc3RhcnQgPSAmX19zaXRjbV90ZXh0OworCQllbmQgICA9ICZfX2VpdGNtX3RleHQ7CisJCXJhbSAgID0gJl9faXRjbV9zdGFydDsKKwkJbWVtY3B5KHN0YXJ0LCByYW0sIChlbmQtc3RhcnQpKTsKKwkJcHJfZGVidWcoIkNQVSBJVENNOiBjb3BpZWQgY29kZSBmcm9tICVwIC0gJXBcbiIsIHN0YXJ0LCBlbmQpOworCX0KK30KKworLyoKKyAqIFRoaXMgY3JlYXRlcyB0aGUgVENNIG1lbW9yeSBwb29sIGFuZCBoYXMgdG8gYmUgZG9uZSBsYXRlciwKKyAqIGR1cmluZyB0aGUgY29yZV9pbml0aWNhbGxzLCBzaW5jZSB0aGUgYWxsb2NhdG9yIGlzIG5vdCB5ZXQKKyAqIHVwIGFuZCBydW5uaW5nIHdoZW4gdGhlIGZpcnN0IGluaXRpYWxpemF0aW9uIHJ1bnMuCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IHNldHVwX3RjbV9wb29sKHZvaWQpCit7CisJdTMyIHRjbV9zdGF0dXMgPSByZWFkX2NwdWlkX3RjbXN0YXR1cygpOworCXUzMiBkdGNtX3Bvb2xfc3RhcnQgPSAodTMyKSAmX19lZHRjbV9kYXRhOworCXUzMiBpdGNtX3Bvb2xfc3RhcnQgPSAodTMyKSAmX19laXRjbV90ZXh0OworCWludCByZXQ7CisKKwkvKgorCSAqIFNldCB1cCBtYWxsb2MgcG9vbCwgMl4yID0gNCBieXRlcyBncmFudWxhcml0eSBzaW5jZQorCSAqIHRoZSBUQ00gaXMgc29tZXRpbWVzIGp1c3QgNCBLaUIuIE5COiBwYWdlcyBhbmQgY2FjaGUKKwkgKiBsaW5lIGFsaWdubWVudHMgZG9lcyBub3QgbWF0dGVyIGluIFRDTSEKKwkgKi8KKwl0Y21fcG9vbCA9IGdlbl9wb29sX2NyZWF0ZSgyLCAtMSk7CisKKwlwcl9kZWJ1ZygiU2V0dGluZyB1cCBUQ00gbWVtb3J5IHBvb2xcbiIpOworCisJLyogQWRkIHRoZSByZXN0IG9mIERUQ00gdG8gdGhlIFRDTSBwb29sICovCisJaWYgKHRjbV9zdGF0dXMgJiAoMSA8PCAxNikpIHsKKwkJaWYgKGR0Y21fcG9vbF9zdGFydCA8IERUQ01fRU5EKSB7CisJCQlyZXQgPSBnZW5fcG9vbF9hZGQodGNtX3Bvb2wsIGR0Y21fcG9vbF9zdGFydCwKKwkJCQkJICAgRFRDTV9FTkQgLSBkdGNtX3Bvb2xfc3RhcnQgKyAxLCAtMSk7CisJCQlpZiAocmV0KSB7CisJCQkJcHJfZXJyKCJDUFUgRFRDTTogY291bGQgbm90IGFkZCBEVENNICIgXAorCQkJCSAgICAgICAicmVtYWluZGVyIHRvIHBvb2whXG4iKTsKKwkJCQlyZXR1cm4gcmV0OworCQkJfQorCQkJcHJfZGVidWcoIkNQVSBEVENNOiBBZGRlZCAlMDh4IGJ5dGVzIEAgJTA4eCB0byAiIFwKKwkJCQkgInRoZSBUQ00gbWVtb3J5IHBvb2xcbiIsCisJCQkJIERUQ01fRU5EIC0gZHRjbV9wb29sX3N0YXJ0ICsgMSwKKwkJCQkgZHRjbV9wb29sX3N0YXJ0KTsKKwkJfQorCX0KKworCS8qIEFkZCB0aGUgcmVzdCBvZiBJVENNIHRvIHRoZSBUQ00gcG9vbCAqLworCWlmICh0Y21fc3RhdHVzICYgMSkgeworCQlpZiAoaXRjbV9wb29sX3N0YXJ0IDwgSVRDTV9FTkQpIHsKKwkJCXJldCA9IGdlbl9wb29sX2FkZCh0Y21fcG9vbCwgaXRjbV9wb29sX3N0YXJ0LAorCQkJCQkgICBJVENNX0VORCAtIGl0Y21fcG9vbF9zdGFydCArIDEsIC0xKTsKKwkJCWlmIChyZXQpIHsKKwkJCQlwcl9lcnIoIkNQVSBJVENNOiBjb3VsZCBub3QgYWRkIElUQ00gIiBcCisJCQkJICAgICAgICJyZW1haW5kZXIgdG8gcG9vbCFcbiIpOworCQkJCXJldHVybiByZXQ7CisJCQl9CisJCQlwcl9kZWJ1ZygiQ1BVIElUQ006IEFkZGVkICUwOHggYnl0ZXMgQCAlMDh4IHRvICIgXAorCQkJCSAidGhlIFRDTSBtZW1vcnkgcG9vbFxuIiwKKwkJCQkgSVRDTV9FTkQgLSBpdGNtX3Bvb2xfc3RhcnQgKyAxLAorCQkJCSBpdGNtX3Bvb2xfc3RhcnQpOworCQl9CisJfQorCXJldHVybiAwOworfQorCitjb3JlX2luaXRjYWxsKHNldHVwX3RjbV9wb29sKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC90Y20uaCBiL2FyY2gvYXJtL2tlcm5lbC90Y20uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDE1YWQ0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0va2VybmVsL3RjbS5oCkBAIC0wLDAgKzEsMTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSBTVC1Fcmljc3NvbiBBQgorICogTGljZW5zZSB0ZXJtczogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgdmVyc2lvbiAyCisgKiBUQ00gbWVtb3J5IGhhbmRsaW5nIGZvciBBUk0gc3lzdGVtcworICoKKyAqIEF1dGhvcjogTGludXMgV2FsbGVpaiA8bGludXMud2FsbGVpakBzdGVyaWNzc29uLmNvbT4KKyAqIEF1dGhvcjogUmlja2FyZCBBbmRlcnNzb24gPHJpY2thcmQuYW5kZXJzc29uQHN0ZXJpY3Nzb24uY29tPgorICovCisKKyNpZmRlZiBDT05GSUdfSEFWRV9UQ00KK3ZvaWQgX19pbml0IHRjbV9pbml0KHZvaWQpOworI2Vsc2UKKy8qIE5vIFRDTSBzdXBwb3J0LCBqdXN0IGJsYW5rIGlubGluZXMgdG8gYmUgb3B0aW1pemVkIG91dCAqLworaW5saW5lIHZvaWQgdGNtX2luaXQodm9pZCkKK3sKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3RpbWUuYyBiL2FyY2gvYXJtL2tlcm5lbC90aW1lLmMKaW5kZXggNGNkYzRhMC4uZDM4Y2RmMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL3RpbWUuYworKysgYi9hcmNoL2FybS9rZXJuZWwvdGltZS5jCkBAIC0yMSw2ICsyMSw3IEBACiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWV4Lmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC90cmFwcy5jIGIvYXJjaC9hcm0va2VybmVsL3RyYXBzLmMKaW5kZXggNTdlYjBmNi4uOTU3MThhNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL3RyYXBzLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL3RyYXBzLmMKQEAgLTEsNyArMSw3IEBACiAvKgogICogIGxpbnV4L2FyY2gvYXJtL2tlcm5lbC90cmFwcy5jCiAgKgotICogIENvcHlyaWdodCAoQykgMTk5NS0yMDAyIFJ1c3NlbGwgS2luZworICogIENvcHlyaWdodCAoQykgMTk5NS0yMDA5IFJ1c3NlbGwgS2luZwogICogIEZyYWdtZW50cyB0aGF0IGFwcGVhciB0aGUgc2FtZSBhcyBsaW51eC9hcmNoL2kzODYva2VybmVsL3RyYXBzLmMgKEMpIExpbnVzIFRvcnZhbGRzCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAgLTQ1LDIxICs0NSwyMSBAQAogX19zZXR1cCgidXNlcl9kZWJ1Zz0iLCB1c2VyX2RlYnVnX3NldHVwKTsKICNlbmRpZgogCi1zdGF0aWMgdm9pZCBkdW1wX21lbShjb25zdCBjaGFyICpzdHIsIHVuc2lnbmVkIGxvbmcgYm90dG9tLCB1bnNpZ25lZCBsb25nIHRvcCk7CitzdGF0aWMgdm9pZCBkdW1wX21lbShjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyk7CiAKIHZvaWQgZHVtcF9iYWNrdHJhY2VfZW50cnkodW5zaWduZWQgbG9uZyB3aGVyZSwgdW5zaWduZWQgbG9uZyBmcm9tLCB1bnNpZ25lZCBsb25nIGZyYW1lKQogewogI2lmZGVmIENPTkZJR19LQUxMU1lNUwotCXByaW50aygiWzwlMDhseD5dICIsIHdoZXJlKTsKLQlwcmludF9zeW1ib2woIiglcykgIiwgd2hlcmUpOwotCXByaW50aygiZnJvbSBbPCUwOGx4Pl0gIiwgZnJvbSk7Ci0JcHJpbnRfc3ltYm9sKCIoJXMpXG4iLCBmcm9tKTsKKwljaGFyIHN5bTFbS1NZTV9TWU1CT0xfTEVOXSwgc3ltMltLU1lNX1NZTUJPTF9MRU5dOworCXNwcmludF9zeW1ib2woc3ltMSwgd2hlcmUpOworCXNwcmludF9zeW1ib2woc3ltMiwgZnJvbSk7CisJcHJpbnRrKCJbPCUwOGx4Pl0gKCVzKSBmcm9tIFs8JTA4bHg+XSAoJXMpXG4iLCB3aGVyZSwgc3ltMSwgZnJvbSwgc3ltMik7CiAjZWxzZQogCXByaW50aygiRnVuY3Rpb24gZW50ZXJlZCBhdCBbPCUwOGx4Pl0gZnJvbSBbPCUwOGx4Pl1cbiIsIHdoZXJlLCBmcm9tKTsKICNlbmRpZgogCiAJaWYgKGluX2V4Y2VwdGlvbl90ZXh0KHdoZXJlKSkKLQkJZHVtcF9tZW0oIkV4Y2VwdGlvbiBzdGFjayIsIGZyYW1lICsgNCwgZnJhbWUgKyA0ICsgc2l6ZW9mKHN0cnVjdCBwdF9yZWdzKSk7CisJCWR1bXBfbWVtKCIiLCAiRXhjZXB0aW9uIHN0YWNrIiwgZnJhbWUgKyA0LCBmcmFtZSArIDQgKyBzaXplb2Yoc3RydWN0IHB0X3JlZ3MpKTsKIH0KIAogI2lmbmRlZiBDT05GSUdfQVJNX1VOV0lORApAQCAtODEsOSArODEsMTAgQEAKIC8qCiAgKiBEdW1wIG91dCB0aGUgY29udGVudHMgb2Ygc29tZSBtZW1vcnkgbmljZWx5Li4uCiAgKi8KLXN0YXRpYyB2b2lkIGR1bXBfbWVtKGNvbnN0IGNoYXIgKnN0ciwgdW5zaWduZWQgbG9uZyBib3R0b20sIHVuc2lnbmVkIGxvbmcgdG9wKQorc3RhdGljIHZvaWQgZHVtcF9tZW0oY29uc3QgY2hhciAqbHZsLCBjb25zdCBjaGFyICpzdHIsIHVuc2lnbmVkIGxvbmcgYm90dG9tLAorCQkgICAgIHVuc2lnbmVkIGxvbmcgdG9wKQogewotCXVuc2lnbmVkIGxvbmcgcCA9IGJvdHRvbSAmIH4zMTsKKwl1bnNpZ25lZCBsb25nIGZpcnN0OwogCW1tX3NlZ21lbnRfdCBmczsKIAlpbnQgaTsKIApAQCAtOTUsMzMgKzk2LDM3IEBACiAJZnMgPSBnZXRfZnMoKTsKIAlzZXRfZnMoS0VSTkVMX0RTKTsKIAotCXByaW50aygiJXMoMHglMDhseCB0byAweCUwOGx4KVxuIiwgc3RyLCBib3R0b20sIHRvcCk7CisJcHJpbnRrKCIlcyVzKDB4JTA4bHggdG8gMHglMDhseClcbiIsIGx2bCwgc3RyLCBib3R0b20sIHRvcCk7CiAKLQlmb3IgKHAgPSBib3R0b20gJiB+MzE7IHAgPCB0b3A7KSB7Ci0JCXByaW50aygiJTA0bHg6ICIsIHAgJiAweGZmZmYpOworCWZvciAoZmlyc3QgPSBib3R0b20gJiB+MzE7IGZpcnN0IDwgdG9wOyBmaXJzdCArPSAzMikgeworCQl1bnNpZ25lZCBsb25nIHA7CisJCWNoYXIgc3RyW3NpemVvZigiIDEyMzQ1Njc4IikgKiA4ICsgMV07CiAKLQkJZm9yIChpID0gMDsgaSA8IDg7IGkrKywgcCArPSA0KSB7Ci0JCQl1bnNpZ25lZCBpbnQgdmFsOworCQltZW1zZXQoc3RyLCAnICcsIHNpemVvZihzdHIpKTsKKwkJc3RyW3NpemVvZihzdHIpIC0gMV0gPSAnXDAnOwogCi0JCQlpZiAocCA8IGJvdHRvbSB8fCBwID49IHRvcCkKLQkJCQlwcmludGsoIiAgICAgICAgICIpOwotCQkJZWxzZSB7Ci0JCQkJX19nZXRfdXNlcih2YWwsICh1bnNpZ25lZCBsb25nICopcCk7Ci0JCQkJcHJpbnRrKCIlMDh4ICIsIHZhbCk7CisJCWZvciAocCA9IGZpcnN0LCBpID0gMDsgaSA8IDggJiYgcCA8IHRvcDsgaSsrLCBwICs9IDQpIHsKKwkJCWlmIChwID49IGJvdHRvbSAmJiBwIDwgdG9wKSB7CisJCQkJdW5zaWduZWQgbG9uZyB2YWw7CisJCQkJaWYgKF9fZ2V0X3VzZXIodmFsLCAodW5zaWduZWQgbG9uZyAqKXApID09IDApCisJCQkJCXNwcmludGYoc3RyICsgaSAqIDksICIgJTA4bHgiLCB2YWwpOworCQkJCWVsc2UKKwkJCQkJc3ByaW50ZihzdHIgKyBpICogOSwgIiA/Pz8/Pz8/PyIpOwogCQkJfQogCQl9Ci0JCXByaW50ayAoIlxuIik7CisJCXByaW50aygiJXMlMDRseDolc1xuIiwgbHZsLCBmaXJzdCAmIDB4ZmZmZiwgc3RyKTsKIAl9CiAKIAlzZXRfZnMoZnMpOwogfQogCi1zdGF0aWMgdm9pZCBkdW1wX2luc3RyKHN0cnVjdCBwdF9yZWdzICpyZWdzKQorc3RhdGljIHZvaWQgZHVtcF9pbnN0cihjb25zdCBjaGFyICpsdmwsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCXVuc2lnbmVkIGxvbmcgYWRkciA9IGluc3RydWN0aW9uX3BvaW50ZXIocmVncyk7CiAJY29uc3QgaW50IHRodW1iID0gdGh1bWJfbW9kZShyZWdzKTsKIAljb25zdCBpbnQgd2lkdGggPSB0aHVtYiA/IDQgOiA4OwogCW1tX3NlZ21lbnRfdCBmczsKKwljaGFyIHN0cltzaXplb2YoIjAwMDAwMDAwICIpICogNSArIDIgKyAxXSwgKnAgPSBzdHI7CiAJaW50IGk7CiAKIAkvKgpAQCAtMTMyLDcgKzEzNyw2IEBACiAJZnMgPSBnZXRfZnMoKTsKIAlzZXRfZnMoS0VSTkVMX0RTKTsKIAotCXByaW50aygiQ29kZTogIik7CiAJZm9yIChpID0gLTQ7IGkgPCAxOyBpKyspIHsKIAkJdW5zaWduZWQgaW50IHZhbCwgYmFkOwogCkBAIC0xNDIsMTMgKzE0NiwxNCBAQAogCQkJYmFkID0gX19nZXRfdXNlcih2YWwsICYoKHUzMiAqKWFkZHIpW2ldKTsKIAogCQlpZiAoIWJhZCkKLQkJCXByaW50ayhpID09IDAgPyAiKCUwKngpICIgOiAiJTAqeCAiLCB3aWR0aCwgdmFsKTsKKwkJCXAgKz0gc3ByaW50ZihwLCBpID09IDAgPyAiKCUwKngpICIgOiAiJTAqeCAiLAorCQkJCQl3aWR0aCwgdmFsKTsKIAkJZWxzZSB7Ci0JCQlwcmludGsoImJhZCBQQyB2YWx1ZS4iKTsKKwkJCXAgKz0gc3ByaW50ZihwLCAiYmFkIFBDIHZhbHVlIik7CiAJCQlicmVhazsKIAkJfQogCX0KLQlwcmludGsoIlxuIik7CisJcHJpbnRrKCIlc0NvZGU6ICVzXG4iLCBsdmwsIHN0cik7CiAKIAlzZXRfZnMoZnMpOwogfQpAQCAtMjI0LDE4ICsyMjksMTkgQEAKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayA9IHRocmVhZC0+dGFzazsKIAlzdGF0aWMgaW50IGRpZV9jb3VudGVyOwogCi0JcHJpbnRrKCJJbnRlcm5hbCBlcnJvcjogJXM6ICV4IFsjJWRdIiBTX1BSRUVNUFQgU19TTVAgIlxuIiwKKwlwcmludGsoS0VSTl9FTUVSRyAiSW50ZXJuYWwgZXJyb3I6ICVzOiAleCBbIyVkXSIgU19QUkVFTVBUIFNfU01QICJcbiIsCiAJICAgICAgIHN0ciwgZXJyLCArK2RpZV9jb3VudGVyKTsKKwlzeXNmc19wcmludGtfbGFzdF9maWxlKCk7CiAJcHJpbnRfbW9kdWxlcygpOwogCV9fc2hvd19yZWdzKHJlZ3MpOwotCXByaW50aygiUHJvY2VzcyAlcyAocGlkOiAlZCwgc3RhY2sgbGltaXQgPSAweCVwKVxuIiwKLQkJdHNrLT5jb21tLCB0YXNrX3BpZF9ucih0c2spLCB0aHJlYWQgKyAxKTsKKwlwcmludGsoS0VSTl9FTUVSRyAiUHJvY2VzcyAlLipzIChwaWQ6ICVkLCBzdGFjayBsaW1pdCA9IDB4JXApXG4iLAorCQlUQVNLX0NPTU1fTEVOLCB0c2stPmNvbW0sIHRhc2tfcGlkX25yKHRzayksIHRocmVhZCArIDEpOwogCiAJaWYgKCF1c2VyX21vZGUocmVncykgfHwgaW5faW50ZXJydXB0KCkpIHsKLQkJZHVtcF9tZW0oIlN0YWNrOiAiLCByZWdzLT5BUk1fc3AsCisJCWR1bXBfbWVtKEtFUk5fRU1FUkcsICJTdGFjazogIiwgcmVncy0+QVJNX3NwLAogCQkJIFRIUkVBRF9TSVpFICsgKHVuc2lnbmVkIGxvbmcpdGFza19zdGFja19wYWdlKHRzaykpOwogCQlkdW1wX2JhY2t0cmFjZShyZWdzLCB0c2spOwotCQlkdW1wX2luc3RyKHJlZ3MpOworCQlkdW1wX2luc3RyKEtFUk5fRU1FUkcsIHJlZ3MpOwogCX0KIH0KIApAQCAtMjUwLDEzICsyNTYsMTQgQEAKIAogCW9vcHNfZW50ZXIoKTsKIAotCWNvbnNvbGVfdmVyYm9zZSgpOwogCXNwaW5fbG9ja19pcnEoJmRpZV9sb2NrKTsKKwljb25zb2xlX3ZlcmJvc2UoKTsKIAlidXN0X3NwaW5sb2NrcygxKTsKIAlfX2RpZShzdHIsIGVyciwgdGhyZWFkLCByZWdzKTsKIAlidXN0X3NwaW5sb2NrcygwKTsKIAlhZGRfdGFpbnQoVEFJTlRfRElFKTsKIAlzcGluX3VubG9ja19pcnEoJmRpZV9sb2NrKTsKKwlvb3BzX2V4aXQoKTsKIAogCWlmIChpbl9pbnRlcnJ1cHQoKSkKIAkJcGFuaWMoIkZhdGFsIGV4Y2VwdGlvbiBpbiBpbnRlcnJ1cHQiKTsKQEAgLTI2NCw3ICsyNzEsNiBAQAogCWlmIChwYW5pY19vbl9vb3BzKQogCQlwYW5pYygiRmF0YWwgZXhjZXB0aW9uIik7CiAKLQlvb3BzX2V4aXQoKTsKIAlkb19leGl0KFNJR1NFR1YpOwogfQogCkBAIC0zNDksNyArMzU1LDcgQEAKIAlpZiAodXNlcl9kZWJ1ZyAmIFVEQkdfVU5ERUZJTkVEKSB7CiAJCXByaW50ayhLRVJOX0lORk8gIiVzICglZCk6IHVuZGVmaW5lZCBpbnN0cnVjdGlvbjogcGM9JXBcbiIsCiAJCQljdXJyZW50LT5jb21tLCB0YXNrX3BpZF9ucihjdXJyZW50KSwgcGMpOwotCQlkdW1wX2luc3RyKHJlZ3MpOworCQlkdW1wX2luc3RyKEtFUk5fSU5GTywgcmVncyk7CiAJfQogI2VuZGlmCiAKQEAgLTQwMCw3ICs0MDYsNyBAQAogCWlmICh1c2VyX2RlYnVnICYgVURCR19TWVNDQUxMKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiWyVkXSAlczogb2Jzb2xldGUgc3lzdGVtIGNhbGwgJTA4eC5cbiIsCiAJCQl0YXNrX3BpZF9ucihjdXJyZW50KSwgY3VycmVudC0+Y29tbSwgbik7Ci0JCWR1bXBfaW5zdHIocmVncyk7CisJCWR1bXBfaW5zdHIoS0VSTl9FUlIsIHJlZ3MpOwogCX0KICNlbmRpZgogCkBAIC00MTgsMTIgKzQyNCwxNCBAQAogc3RhdGljIGlubGluZSB2b2lkCiBkb19jYWNoZV9vcCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwgaW50IGZsYWdzKQogeworCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gY3VycmVudC0+YWN0aXZlX21tOwogCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hOwogCiAJaWYgKGVuZCA8IHN0YXJ0IHx8IGZsYWdzKQogCQlyZXR1cm47CiAKLQl2bWEgPSBmaW5kX3ZtYShjdXJyZW50LT5hY3RpdmVfbW0sIHN0YXJ0KTsKKwlkb3duX3JlYWQoJm1tLT5tbWFwX3NlbSk7CisJdm1hID0gZmluZF92bWEobW0sIHN0YXJ0KTsKIAlpZiAodm1hICYmIHZtYS0+dm1fc3RhcnQgPCBlbmQpIHsKIAkJaWYgKHN0YXJ0IDwgdm1hLT52bV9zdGFydCkKIAkJCXN0YXJ0ID0gdm1hLT52bV9zdGFydDsKQEAgLTQzMiw2ICs0NDAsNyBAQAogCiAJCWZsdXNoX2NhY2hlX3VzZXJfcmFuZ2Uodm1hLCBzdGFydCwgZW5kKTsKIAl9CisJdXBfcmVhZCgmbW0tPm1tYXBfc2VtKTsKIH0KIAogLyoKQEAgLTU3Niw3ICs1ODUsNyBAQAogCWlmICh1c2VyX2RlYnVnICYgVURCR19TWVNDQUxMKSB7CiAJCXByaW50aygiWyVkXSAlczogYXJtIHN5c2NhbGwgJWRcbiIsCiAJCSAgICAgICB0YXNrX3BpZF9ucihjdXJyZW50KSwgY3VycmVudC0+Y29tbSwgbm8pOwotCQlkdW1wX2luc3RyKHJlZ3MpOworCQlkdW1wX2luc3RyKCIiLCByZWdzKTsKIAkJaWYgKHVzZXJfbW9kZShyZWdzKSkgewogCQkJX19zaG93X3JlZ3MocmVncyk7CiAJCQljX2JhY2t0cmFjZShyZWdzLT5BUk1fZnAsIHByb2Nlc3Nvcl9tb2RlKHJlZ3MpKTsKQEAgLTY1Myw3ICs2NjIsNyBAQAogCWlmICh1c2VyX2RlYnVnICYgVURCR19CQURBQk9SVCkgewogCQlwcmludGsoS0VSTl9FUlIgIlslZF0gJXM6IGJhZCBkYXRhIGFib3J0OiBjb2RlICVkIGluc3RyIDB4JTA4bHhcbiIsCiAJCQl0YXNrX3BpZF9ucihjdXJyZW50KSwgY3VycmVudC0+Y29tbSwgY29kZSwgaW5zdHIpOwotCQlkdW1wX2luc3RyKHJlZ3MpOworCQlkdW1wX2luc3RyKEtFUk5fRVJSLCByZWdzKTsKIAkJc2hvd19wdGUoY3VycmVudC0+bW0sIGFkZHIpOwogCX0KICNlbmRpZgpAQCAtNzQyLDYgKzc1MSw4IEBACiAJICovCiAJbWVtY3B5KCh2b2lkICopS0VSTl9TSUdSRVRVUk5fQ09ERSwgc2lncmV0dXJuX2NvZGVzLAogCSAgICAgICBzaXplb2Yoc2lncmV0dXJuX2NvZGVzKSk7CisJbWVtY3B5KCh2b2lkICopS0VSTl9SRVNUQVJUX0NPREUsIHN5c2NhbGxfcmVzdGFydF9jb2RlLAorCSAgICAgICBzaXplb2Yoc3lzY2FsbF9yZXN0YXJ0X2NvZGUpKTsKIAogCWZsdXNoX2ljYWNoZV9yYW5nZSh2ZWN0b3JzLCB2ZWN0b3JzICsgUEFHRV9TSVpFKTsKIAltb2RpZnlfZG9tYWluKERPTUFJTl9VU0VSLCBET01BSU5fQ0xJRU5UKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC91bndpbmQuYyBiL2FyY2gvYXJtL2tlcm5lbC91bndpbmQuYwppbmRleCAzOWJhZjExLi43ODZhYzJiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvdW53aW5kLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL3Vud2luZC5jCkBAIC0yNiw2ICsyNiwxNSBAQAogICogaHR0cDovL2luZm9jZW50ZXIuYXJtLmNvbS9oZWxwL3RvcGljL2NvbS5hcm0uZG9jLnN1YnNldC5zd2Rldi5hYmkvaW5kZXguaHRtbAogICovCiAKKyNpZiAhZGVmaW5lZCAoX19BUk1fRUFCSV9fKQorI3dhcm5pbmcgWW91ciBjb21waWxlciBkb2VzIG5vdCBoYXZlIEVBQkkgc3VwcG9ydC4KKyN3YXJuaW5nICAgIEFSTSB1bndpbmQgaXMga25vd24gdG8gY29tcGlsZSBvbmx5IHdpdGggRUFCSSBjb21waWxlcnMuCisjd2FybmluZyAgICBDaGFuZ2UgY29tcGlsZXIgb3IgZGlzYWJsZSBBUk1fVU5XSU5EIG9wdGlvbi4KKyNlbGlmIChfX0dOVUNfXyA9PSA0ICYmIF9fR05VQ19NSU5PUl9fIDw9IDIpCisjd2FybmluZyBZb3VyIGNvbXBpbGVyIGlzIHRvbyBidWdneTsgaXQgaXMga25vd24gdG8gbm90IGNvbXBpbGUgQVJNIHVud2luZCBzdXBwb3J0LgorI3dhcm5pbmcgICAgQ2hhbmdlIGNvbXBpbGVyIG9yIGRpc2FibGUgQVJNX1VOV0lORCBvcHRpb24uCisjZW5kaWYKKwogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC92bWxpbnV4Lmxkcy5TIGIvYXJjaC9hcm0va2VybmVsL3ZtbGludXgubGRzLlMKaW5kZXggNWNjNDgxMi4uYWVjZjg3ZGYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC92bWxpbnV4Lmxkcy5TCisrKyBiL2FyY2gvYXJtL2tlcm5lbC92bWxpbnV4Lmxkcy5TCkBAIC0xOTksNiArMTk5LDYzIEBACiAJfQogCV9lZGF0YV9sb2MgPSBfX2RhdGFfbG9jICsgU0laRU9GKC5kYXRhKTsKIAorI2lmZGVmIENPTkZJR19IQVZFX1RDTQorICAgICAgICAvKgorCSAqIFdlIGFsaWduIGV2ZXJ5dGhpbmcgdG8gYSBwYWdlIGJvdW5kYXJ5IHNvIHdlIGNhbgorCSAqIGZyZWUgaXQgYWZ0ZXIgaW5pdCBoYXMgY29tbWVuY2VkIGFuZCBUQ00gY29udGVudHMgaGF2ZQorCSAqIGJlZW4gY29waWVkIHRvIGl0cyBkZXN0aW5hdGlvbi4KKwkgKi8KKwkudGNtX3N0YXJ0IDogeworCQkuID0gQUxJR04oUEFHRV9TSVpFKTsKKwkJX190Y21fc3RhcnQgPSAuOworCQlfX2l0Y21fc3RhcnQgPSAuOworCX0KKworCS8qCisJICogTGluayB0aGVzZSB0byB0aGUgSVRDTSBSQU0KKwkgKiBQdXQgVk1BIHRvIHRoZSBUQ00gYWRkcmVzcyBhbmQgTE1BIHRvIHRoZSBjb21tb24gUkFNCisJICogYW5kIHdlJ2xsIHVwbG9hZCB0aGUgY29udGVudHMgZnJvbSBSQU0gdG8gVENNIGFuZCBmcmVlCisJICogdGhlIHVzZWQgUkFNIGFmdGVyIHRoYXQuCisJICovCisJLnRleHRfaXRjbSBJVENNX09GRlNFVCA6IEFUKF9faXRjbV9zdGFydCkKKwl7CisJCV9fc2l0Y21fdGV4dCA9IC47CisJCSooLnRjbS50ZXh0KQorCQkqKC50Y20ucm9kYXRhKQorCQkuID0gQUxJR04oNCk7CisJCV9fZWl0Y21fdGV4dCA9IC47CisJfQorCisJLyoKKwkgKiBSZXNldCB0aGUgZG90IHBvaW50ZXIsIHRoaXMgaXMgbmVlZGVkIHRvIGNyZWF0ZSB0aGUKKwkgKiByZWxhdGl2ZSBfX2R0Y21fc3RhcnQgYmVsb3cgKHRvIGJlIHVzZWQgYXMgZXh0ZXJuIGluIGNvZGUpLgorCSAqLworCS4gPSBBRERSKC50Y21fc3RhcnQpICsgU0laRU9GKC50Y21fc3RhcnQpICsgU0laRU9GKC50ZXh0X2l0Y20pOworCisJLmR0Y21fc3RhcnQgOiB7CisJCV9fZHRjbV9zdGFydCA9IC47CisJfQorCisJLyogVE9ETzogYWRkIHJlbWFpbmRlciBvZiBJVENNIGFzIHdlbGwsIHRoYXQgY2FuIGJlIHVzZWQgZm9yIGRhdGEhICovCisJLmRhdGFfZHRjbSBEVENNX09GRlNFVCA6IEFUKF9fZHRjbV9zdGFydCkKKwl7CisJCS4gPSBBTElHTig0KTsKKwkJX19zZHRjbV9kYXRhID0gLjsKKwkJKigudGNtLmRhdGEpCisJCS4gPSBBTElHTig0KTsKKwkJX19lZHRjbV9kYXRhID0gLjsKKwl9CisKKwkvKiBSZXNldCB0aGUgZG90IHBvaW50ZXIgb3IgdGhlIGxpbmtlciBnZXRzIGNvbmZ1c2VkICovCisJLiA9IEFERFIoLmR0Y21fc3RhcnQpICsgU0laRU9GKC5kYXRhX2R0Y20pOworCisJLyogRW5kIG1hcmtlciBmb3IgZnJlZWluZyBUQ00gY29weSBpbiBsaW5rZWQgb2JqZWN0ICovCisJLnRjbV9lbmQgOiBBVChBRERSKC5kdGNtX3N0YXJ0KSArIFNJWkVPRiguZGF0YV9kdGNtKSl7CisJCS4gPSBBTElHTihQQUdFX1NJWkUpOworCQlfX3RjbV9lbmQgPSAuOworCX0KKyNlbmRpZgorCiAJLmJzcyA6IHsKIAkJX19ic3Nfc3RhcnQgPSAuOwkvKiBCU1MJCQkJKi8KIAkJKiguYnNzKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbGliL2NvcHlfcGFnZS5TIGIvYXJjaC9hcm0vbGliL2NvcHlfcGFnZS5TCmluZGV4IDZhZTA0ZGIuLjZlZTJmNjcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2xpYi9jb3B5X3BhZ2UuUworKysgYi9hcmNoL2FybS9saWIvY29weV9wYWdlLlMKQEAgLTEyLDggKzEyLDkgQEAKICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CiAjaW5jbHVkZSA8YXNtL2Fzc2VtYmxlci5oPgogI2luY2x1ZGUgPGFzbS9hc20tb2Zmc2V0cy5oPgorI2luY2x1ZGUgPGFzbS9jYWNoZS5oPgogCi0jZGVmaW5lIENPUFlfQ09VTlQgKFBBR0VfU1ovNjQgUExEKCAtMSApKQorI2RlZmluZSBDT1BZX0NPVU5UIChQQUdFX1NaIC8gKDIgKiBMMV9DQUNIRV9CWVRFUykgUExEKCAtMSApKQogCiAJCS50ZXh0CiAJCS5hbGlnbgk1CkBAIC0yNiwxNyArMjcsMTYgQEAKIEVOVFJZKGNvcHlfcGFnZSkKIAkJc3RtZmQJc3AhLCB7cjQsIGxyfQkJCUAJMgogCVBMRCgJcGxkCVtyMSwgIzBdCQkpCi0JUExEKAlwbGQJW3IxLCAjMzJdCQkpCisJUExEKAlwbGQJW3IxLCAjTDFfQ0FDSEVfQllURVNdCQkpCiAJCW1vdglyMiwgI0NPUFlfQ09VTlQJCQlACTEKIAkJbGRtaWEJcjEhLCB7cjMsIHI0LCBpcCwgbHJ9CQlACTQrMQotMToJUExEKAlwbGQJW3IxLCAjNjRdCQkpCi0JUExEKAlwbGQJW3IxLCAjOTZdCQkpCi0yOgkJc3RtaWEJcjAhLCB7cjMsIHI0LCBpcCwgbHJ9CQlACTQKLQkJbGRtaWEJcjEhLCB7cjMsIHI0LCBpcCwgbHJ9CQlACTQrMQotCQlzdG1pYQlyMCEsIHtyMywgcjQsIGlwLCBscn0JCUAJNAotCQlsZG1pYQlyMSEsIHtyMywgcjQsIGlwLCBscn0JCUAJNCsxCisxOglQTEQoCXBsZAlbcjEsICMyICogTDFfQ0FDSEVfQllURVNdKQorCVBMRCgJcGxkCVtyMSwgIzMgKiBMMV9DQUNIRV9CWVRFU10pCisyOgorCS5yZXB0CSgyICogTDFfQ0FDSEVfQllURVMgLyAxNiAtIDEpCiAJCXN0bWlhCXIwISwge3IzLCByNCwgaXAsIGxyfQkJQAk0CiAJCWxkbWlhCXIxISwge3IzLCByNCwgaXAsIGxyfQkJQAk0CisJLmVuZHIKIAkJc3VicwlyMiwgcjIsICMxCQkJQAkxCiAJCXN0bWlhCXIwISwge3IzLCByNCwgaXAsIGxyfQkJQAk0CiAJCWxkbWd0aWEJcjEhLCB7cjMsIHI0LCBpcCwgbHJ9CQlACTQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxY2FwOV9kZXZpY2VzLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MWNhcDlfZGV2aWNlcy5jCmluZGV4IDQxMmFhNDkuLmQxZjc3NWUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxY2FwOV9kZXZpY2VzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFjYXA5X2RldmljZXMuYwpAQCAtNzcxLDkgKzc3MSw5IEBACiAgKiAgQUM5NwogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotI2lmIGRlZmluZWQoQ09ORklHX1NORF9BVDkxX0FDOTcpIHx8IGRlZmluZWQoQ09ORklHX1NORF9BVDkxX0FDOTdfTU9EVUxFKQorI2lmIGRlZmluZWQoQ09ORklHX1NORF9BVE1FTF9BQzk3QykgfHwgZGVmaW5lZChDT05GSUdfU05EX0FUTUVMX0FDOTdDX01PRFVMRSkKIHN0YXRpYyB1NjQgYWM5N19kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKLXN0YXRpYyBzdHJ1Y3QgYXRtZWxfYWM5N19kYXRhIGFjOTdfZGF0YTsKK3N0YXRpYyBzdHJ1Y3QgYWM5N2NfcGxhdGZvcm1fZGF0YSBhYzk3X2RhdGE7CiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgYWM5N19yZXNvdXJjZXNbXSA9IHsKIAlbMF0gPSB7CkBAIC03ODksNyArNzg5LDcgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFjYXA5X2FjOTdfZGV2aWNlID0gewotCS5uYW1lCQk9ICJhYzk3YyIsCisJLm5hbWUJCT0gImF0bWVsX2FjOTdjIiwKIAkuaWQJCT0gMSwKIAkuZGV2CQk9IHsKIAkJCQkuZG1hX21hc2sJCT0gJmFjOTdfZG1hbWFzaywKQEAgLTgwMCw3ICs4MDAsNyBAQAogCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShhYzk3X3Jlc291cmNlcyksCiB9OwogCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfYWM5NyhzdHJ1Y3QgYXRtZWxfYWM5N19kYXRhICpkYXRhKQordm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2FjOTcoc3RydWN0IGFjOTdjX3BsYXRmb3JtX2RhdGEgKmRhdGEpCiB7CiAJaWYgKCFkYXRhKQogCQlyZXR1cm47CkBAIC04MTgsNyArODE4LDcgQEAKIAlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0OTFjYXA5X2FjOTdfZGV2aWNlKTsKIH0KICNlbHNlCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfYWM5NyhzdHJ1Y3QgYXRtZWxfYWM5N19kYXRhICpkYXRhKSB7fQordm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2FjOTcoc3RydWN0IGFjOTdjX3BsYXRmb3JtX2RhdGEgKmRhdGEpIHt9CiAjZW5kaWYKIAogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTlnNDVfZGV2aWNlcy5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05ZzQ1X2RldmljZXMuYwppbmRleCBkNzQ2ZTg2Li4zMzJiNzg0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTlnNDVfZGV2aWNlcy5jCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxc2FtOWc0NV9kZXZpY2VzLmMKQEAgLTI0LDExICsyNCw1OSBAQAogI2luY2x1ZGUgPG1hY2gvYXQ5MXNhbTlnNDUuaD4KICNpbmNsdWRlIDxtYWNoL2F0OTFzYW05ZzQ1X21hdHJpeC5oPgogI2luY2x1ZGUgPG1hY2gvYXQ5MXNhbTlfc21jLmg+CisjaW5jbHVkZSA8bWFjaC9hdF9oZG1hYy5oPgogCiAjaW5jbHVkZSAiZ2VuZXJpYy5oIgogCiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgSERNQUMgLSBBSEIgRE1BIENvbnRyb2xsZXIKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpZiBkZWZpbmVkKENPTkZJR19BVF9IRE1BQykgfHwgZGVmaW5lZChDT05GSUdfQVRfSERNQUNfTU9EVUxFKQorc3RhdGljIHU2NCBoZG1hY19kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKKworc3RhdGljIHN0cnVjdCBhdF9kbWFfcGxhdGZvcm1fZGF0YSBhdGRtYV9wZGF0YSA9IHsKKwkubnJfY2hhbm5lbHMJPSA4LAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBoZG1hY19yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAk9IEFUOTFfQkFTRV9TWVMgKyBBVDkxX0RNQSwKKwkJLmVuZAk9IEFUOTFfQkFTRV9TWVMgKyBBVDkxX0RNQSArIFNaXzUxMiAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzJdID0geworCQkuc3RhcnQJPSBBVDkxU0FNOUc0NV9JRF9ETUEsCisJCS5lbmQJPSBBVDkxU0FNOUc0NV9JRF9ETUEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdF9oZG1hY19kZXZpY2UgPSB7CisJLm5hbWUJCT0gImF0X2hkbWFjIiwKKwkuaWQJCT0gLTEsCisJLmRldgkJPSB7CisJCQkJLmRtYV9tYXNrCQk9ICZoZG1hY19kbWFtYXNrLAorCQkJCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV9CSVRfTUFTSygzMiksCisJCQkJLnBsYXRmb3JtX2RhdGEJCT0gJmF0ZG1hX3BkYXRhLAorCX0sCisJLnJlc291cmNlCT0gaGRtYWNfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShoZG1hY19yZXNvdXJjZXMpLAorfTsKKwordm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2hkbWFjKHZvaWQpCit7CisJZG1hX2NhcF9zZXQoRE1BX01FTUNQWSwgYXRkbWFfcGRhdGEuY2FwX21hc2spOworCWRtYV9jYXBfc2V0KERNQV9TTEFWRSwgYXRkbWFfcGRhdGEuY2FwX21hc2spOworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXRfaGRtYWNfZGV2aWNlKTsKK30KKyNlbHNlCit2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfaGRtYWModm9pZCkge30KKyNlbmRpZgorCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiAgVVNCIEhvc3QgKE9IQ0kpCiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCkBAIC01NTAsNiArNTk4LDYxIEBACiAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICBBQzk3CisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaWYgZGVmaW5lZChDT05GSUdfU05EX0FUTUVMX0FDOTdDKSB8fCBkZWZpbmVkKENPTkZJR19TTkRfQVRNRUxfQUM5N0NfTU9EVUxFKQorc3RhdGljIHU2NCBhYzk3X2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOworc3RhdGljIHN0cnVjdCBhYzk3Y19wbGF0Zm9ybV9kYXRhIGFjOTdfZGF0YTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBhYzk3X3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CT0gQVQ5MVNBTTlHNDVfQkFTRV9BQzk3QywKKwkJLmVuZAk9IEFUOTFTQU05RzQ1X0JBU0VfQUM5N0MgKyBTWl8xNksgLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0CT0gQVQ5MVNBTTlHNDVfSURfQUM5N0MsCisJCS5lbmQJPSBBVDkxU0FNOUc0NV9JRF9BQzk3QywKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05ZzQ1X2FjOTdfZGV2aWNlID0geworCS5uYW1lCQk9ICJhdG1lbF9hYzk3YyIsCisJLmlkCQk9IDAsCisJLmRldgkJPSB7CisJCQkJLmRtYV9tYXNrCQk9ICZhYzk3X2RtYW1hc2ssCisJCQkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDMyKSwKKwkJCQkucGxhdGZvcm1fZGF0YQkJPSAmYWM5N19kYXRhLAorCX0sCisJLnJlc291cmNlCT0gYWM5N19yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGFjOTdfcmVzb3VyY2VzKSwKK307CisKK3ZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9hYzk3KHN0cnVjdCBhYzk3Y19wbGF0Zm9ybV9kYXRhICpkYXRhKQoreworCWlmICghZGF0YSkKKwkJcmV0dXJuOworCisJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEQ4LCAwKTsJLyogQUM5N0ZTICovCisJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEQ5LCAwKTsJLyogQUM5N0NLICovCisJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEQ3LCAwKTsJLyogQUM5N1RYICovCisJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEQ2LCAwKTsJLyogQUM5N1JYICovCisKKwkvKiByZXNldCAqLworCWlmIChkYXRhLT5yZXNldF9waW4pCisJCWF0OTFfc2V0X2dwaW9fb3V0cHV0KGRhdGEtPnJlc2V0X3BpbiwgMCk7CisKKwlhYzk3X2RhdGEgPSAqZGF0YTsKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0OTFzYW05ZzQ1X2FjOTdfZGV2aWNlKTsKK30KKyNlbHNlCit2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfYWM5NyhzdHJ1Y3QgYWM5N2NfcGxhdGZvcm1fZGF0YSAqZGF0YSkge30KKyNlbmRpZgorCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiAgTENEIENvbnRyb2xsZXIKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKQEAgLTczNSw3ICs4MzgsNyBAQAogICogIFdhdGNoZG9nCiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi0jaWYgZGVmaW5lZChDT05GSUdfQVQ5MVNBTTlfV0FUQ0hET0cpIHx8IGRlZmluZWQoQ09ORklHX0FUOTFTQU05X1dBVENIRE9HX01PRFVMRSkKKyNpZiBkZWZpbmVkKENPTkZJR19BVDkxU0FNOVhfV0FUQ0hET0cpIHx8IGRlZmluZWQoQ09ORklHX0FUOTFTQU05WF9XQVRDSERPR19NT0RVTEUpCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxc2FtOWc0NV93ZHRfZGV2aWNlID0gewogCS5uYW1lCQk9ICJhdDkxX3dkdCIsCiAJLmlkCQk9IC0xLApAQCAtMTIyMCw2ICsxMzIzLDcgQEAKICAqLwogc3RhdGljIGludCBfX2luaXQgYXQ5MV9hZGRfc3RhbmRhcmRfZGV2aWNlcyh2b2lkKQogeworCWF0OTFfYWRkX2RldmljZV9oZG1hYygpOwogCWF0OTFfYWRkX2RldmljZV9ydGMoKTsKIAlhdDkxX2FkZF9kZXZpY2VfcnR0KCk7CiAJYXQ5MV9hZGRfZGV2aWNlX3dhdGNoZG9nKCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTlybF9kZXZpY2VzLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTlybF9kZXZpY2VzLmMKaW5kZXggNzI4MTg2NS4uZDM0NWY1NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05cmxfZGV2aWNlcy5jCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxc2FtOXJsX2RldmljZXMuYwpAQCAtMjEsMTEgKzIxLDU3IEBACiAjaW5jbHVkZSA8bWFjaC9hdDkxc2FtOXJsLmg+CiAjaW5jbHVkZSA8bWFjaC9hdDkxc2FtOXJsX21hdHJpeC5oPgogI2luY2x1ZGUgPG1hY2gvYXQ5MXNhbTlfc21jLmg+CisjaW5jbHVkZSA8bWFjaC9hdF9oZG1hYy5oPgogCiAjaW5jbHVkZSAiZ2VuZXJpYy5oIgogCiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgSERNQUMgLSBBSEIgRE1BIENvbnRyb2xsZXIKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpZiBkZWZpbmVkKENPTkZJR19BVF9IRE1BQykgfHwgZGVmaW5lZChDT05GSUdfQVRfSERNQUNfTU9EVUxFKQorc3RhdGljIHU2NCBoZG1hY19kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKKworc3RhdGljIHN0cnVjdCBhdF9kbWFfcGxhdGZvcm1fZGF0YSBhdGRtYV9wZGF0YSA9IHsKKwkubnJfY2hhbm5lbHMJPSAyLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBoZG1hY19yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAk9IEFUOTFfQkFTRV9TWVMgKyBBVDkxX0RNQSwKKwkJLmVuZAk9IEFUOTFfQkFTRV9TWVMgKyBBVDkxX0RNQSArIFNaXzUxMiAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzJdID0geworCQkuc3RhcnQJPSBBVDkxU0FNOVJMX0lEX0RNQSwKKwkJLmVuZAk9IEFUOTFTQU05UkxfSURfRE1BLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXRfaGRtYWNfZGV2aWNlID0geworCS5uYW1lCQk9ICJhdF9oZG1hYyIsCisJLmlkCQk9IC0xLAorCS5kZXYJCT0geworCQkJCS5kbWFfbWFzawkJPSAmaGRtYWNfZG1hbWFzaywKKwkJCQkuY29oZXJlbnRfZG1hX21hc2sJPSBETUFfQklUX01BU0soMzIpLAorCQkJCS5wbGF0Zm9ybV9kYXRhCQk9ICZhdGRtYV9wZGF0YSwKKwl9LAorCS5yZXNvdXJjZQk9IGhkbWFjX3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoaGRtYWNfcmVzb3VyY2VzKSwKK307CisKK3ZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9oZG1hYyh2b2lkKQoreworCWRtYV9jYXBfc2V0KERNQV9NRU1DUFksIGF0ZG1hX3BkYXRhLmNhcF9tYXNrKTsKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0X2hkbWFjX2RldmljZSk7Cit9CisjZWxzZQordm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2hkbWFjKHZvaWQpIHt9CisjZW5kaWYKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqICBVU0IgSFMgRGV2aWNlIChHYWRnZXQpCiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCkBAIC0zOTgsNiArNDQ0LDYxIEBACiAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICBBQzk3CisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaWYgZGVmaW5lZChDT05GSUdfU05EX0FUTUVMX0FDOTdDKSB8fCBkZWZpbmVkKENPTkZJR19TTkRfQVRNRUxfQUM5N0NfTU9EVUxFKQorc3RhdGljIHU2NCBhYzk3X2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOworc3RhdGljIHN0cnVjdCBhYzk3Y19wbGF0Zm9ybV9kYXRhIGFjOTdfZGF0YTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBhYzk3X3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CT0gQVQ5MVNBTTlSTF9CQVNFX0FDOTdDLAorCQkuZW5kCT0gQVQ5MVNBTTlSTF9CQVNFX0FDOTdDICsgU1pfMTZLIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IEFUOTFTQU05UkxfSURfQUM5N0MsCisJCS5lbmQJPSBBVDkxU0FNOVJMX0lEX0FDOTdDLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTlybF9hYzk3X2RldmljZSA9IHsKKwkubmFtZQkJPSAiYXRtZWxfYWM5N2MiLAorCS5pZAkJPSAwLAorCS5kZXYJCT0geworCQkJCS5kbWFfbWFzawkJPSAmYWM5N19kbWFtYXNrLAorCQkJCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV9CSVRfTUFTSygzMiksCisJCQkJLnBsYXRmb3JtX2RhdGEJCT0gJmFjOTdfZGF0YSwKKwl9LAorCS5yZXNvdXJjZQk9IGFjOTdfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShhYzk3X3Jlc291cmNlcyksCit9OworCit2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfYWM5NyhzdHJ1Y3QgYWM5N2NfcGxhdGZvcm1fZGF0YSAqZGF0YSkKK3sKKwlpZiAoIWRhdGEpCisJCXJldHVybjsKKworCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BEMSwgMCk7CS8qIEFDOTdGUyAqLworCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BEMiwgMCk7CS8qIEFDOTdDSyAqLworCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BEMywgMCk7CS8qIEFDOTdUWCAqLworCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BENCwgMCk7CS8qIEFDOTdSWCAqLworCisJLyogcmVzZXQgKi8KKwlpZiAoZGF0YS0+cmVzZXRfcGluKQorCQlhdDkxX3NldF9ncGlvX291dHB1dChkYXRhLT5yZXNldF9waW4sIDApOworCisJYWM5N19kYXRhID0gKmRhdGE7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDkxc2FtOXJsX2FjOTdfZGV2aWNlKTsKK30KKyNlbHNlCit2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfYWM5NyhzdHJ1Y3QgYWM5N2NfcGxhdGZvcm1fZGF0YSAqZGF0YSkge30KKyNlbmRpZgorCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiAgTENEIENvbnRyb2xsZXIKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKQEAgLTExMDMsNiArMTIwNCw3IEBACiAgKi8KIHN0YXRpYyBpbnQgX19pbml0IGF0OTFfYWRkX3N0YW5kYXJkX2RldmljZXModm9pZCkKIHsKKwlhdDkxX2FkZF9kZXZpY2VfaGRtYWMoKTsKIAlhdDkxX2FkZF9kZXZpY2VfcnRjKCk7CiAJYXQ5MV9hZGRfZGV2aWNlX3J0dCgpOwogCWF0OTFfYWRkX2RldmljZV93YXRjaGRvZygpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWNhcDlhZGsuYyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1jYXA5YWRrLmMKaW5kZXggODNhMWEwZi4uZDY5NDA4NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWNhcDlhZGsuYworKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtY2FwOWFkay5jCkBAIC0zNjQsNyArMzY0LDcgQEAKIC8qCiAgKiBBQzk3CiAgKi8KLXN0YXRpYyBzdHJ1Y3QgYXRtZWxfYWM5N19kYXRhIGNhcDlhZGtfYWM5N19kYXRhID0geworc3RhdGljIHN0cnVjdCBhYzk3Y19wbGF0Zm9ybV9kYXRhIGNhcDlhZGtfYWM5N19kYXRhID0gewogLy8JLnJlc2V0X3Bpbgk9IC4uLiBub3QgY29ubmVjdGVkCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtbmVvY29yZTkyNi5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLW5lb2NvcmU5MjYuYwppbmRleCA4YzBiNzFjLi43YzFlMzgyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtbmVvY29yZTkyNi5jCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1uZW9jb3JlOTI2LmMKQEAgLTM0MCw3ICszNDAsNyBAQAogLyoKICAqIEFDOTcKICAqLwotc3RhdGljIHN0cnVjdCBhdG1lbF9hYzk3X2RhdGEgbmVvY29yZTkyNl9hYzk3X2RhdGEgPSB7CitzdGF0aWMgc3RydWN0IGFjOTdjX3BsYXRmb3JtX2RhdGEgbmVvY29yZTkyNl9hYzk3X2RhdGEgPSB7CiAJLnJlc2V0X3Bpbgk9IEFUOTFfUElOX1BBMTMsCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtc2FtOW0xMGc0NWVrLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtc2FtOW0xMGc0NWVrLmMKaW5kZXggYjg1NThlYS4uNjRjMzg0MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNhbTltMTBnNDVlay5jCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1zYW05bTEwZzQ1ZWsuYwpAQCAtMzExLDYgKzMxMSwxNCBAQAogCiAKIC8qCisgKiBBQzk3CisgKiByZXNldF9waW4gaXMgbm90IGNvbm5lY3RlZDogTlJTVAorICovCitzdGF0aWMgc3RydWN0IGFjOTdjX3BsYXRmb3JtX2RhdGEgZWtfYWM5N19kYXRhID0geworfTsKKworCisvKgogICogTEVEcyAuLi4gdGhlc2UgY291bGQgYWxsIGJlIFBXTS1kcml2ZW4sIGZvciB2YXJpYWJsZSBicmlnaHRuZXNzCiAgKi8KIHN0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWQgZWtfbGVkc1tdID0gewpAQCAtMzcyLDYgKzM4MCw4IEBACiAJYXQ5MV9hZGRfZGV2aWNlX2xjZGMoJmVrX2xjZGNfZGF0YSk7CiAJLyogUHVzaCBCdXR0b25zICovCiAJZWtfYWRkX2RldmljZV9idXR0b25zKCk7CisJLyogQUM5NyAqLworCWF0OTFfYWRkX2RldmljZV9hYzk3KCZla19hYzk3X2RhdGEpOwogCS8qIExFRHMgKi8KIAlhdDkxX2dwaW9fbGVkcyhla19sZWRzLCBBUlJBWV9TSVpFKGVrX2xlZHMpKTsKIAlhdDkxX3B3bV9sZWRzKGVrX3B3bV9sZWQsIEFSUkFZX1NJWkUoZWtfcHdtX2xlZCkpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNhbTlybGVrLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtc2FtOXJsZWsuYwppbmRleCA5NGZmYjVjLi5iZDI4ZTk4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtc2FtOXJsZWsuYworKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtc2FtOXJsZWsuYwpAQCAtMjExLDYgKzIxMSwxNCBAQAogCiAKIC8qCisgKiBBQzk3CisgKiByZXNldF9waW4gaXMgbm90IGNvbm5lY3RlZDogTlJTVAorICovCitzdGF0aWMgc3RydWN0IGFjOTdjX3BsYXRmb3JtX2RhdGEgZWtfYWM5N19kYXRhID0geworfTsKKworCisvKgogICogTEVEcwogICovCiBzdGF0aWMgc3RydWN0IGdwaW9fbGVkIGVrX2xlZHNbXSA9IHsKQEAgLTI5OSw2ICszMDcsOCBAQAogCWF0OTFfYWRkX2RldmljZV9tbWMoMCwgJmVrX21tY19kYXRhKTsKIAkvKiBMQ0QgQ29udHJvbGxlciAqLwogCWF0OTFfYWRkX2RldmljZV9sY2RjKCZla19sY2RjX2RhdGEpOworCS8qIEFDOTcgKi8KKwlhdDkxX2FkZF9kZXZpY2VfYWM5NygmZWtfYWM5N19kYXRhKTsKIAkvKiBUb3VjaCBTY3JlZW4gQ29udHJvbGxlciAqLwogCWF0OTFfYWRkX2RldmljZV90c2FkY2MoKTsKIAkvKiBMRURzICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWJjbXJpbmcvY29yZS5jIGIvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2NvcmUuYwppbmRleCA0OTJjNjQ5Li5lNTkwYmJlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWJjbXJpbmcvY29yZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtYmNtcmluZy9jb3JlLmMKQEAgLTMxLDcgKzMxLDYgQEAKICNpbmNsdWRlIDxsaW51eC9jbG9ja3NvdXJjZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsb2NrY2hpcHMuaD4KIAotI2luY2x1ZGUgPGxpbnV4L2FtYmEvYnVzLmg+CiAjaW5jbHVkZSA8bWFjaC9jc3AvbW1fYWRkci5oPgogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxhc20vY2xrZGV2Lmg+CkBAIC00NSw3ICs0NCw2IEBACiAjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL21tYy5oPgogCiAjaW5jbHVkZSA8Y2ZnX2dsb2JhbC5oPgogCkBAIC0yNzMsMTIgKzI3MSwxMiBAQAogCS5oYW5kbGVyID0gYmNtcmluZ190aW1lcl9pbnRlcnJ1cHQsCiB9OwogCi1zdGF0aWMgY3ljbGVfdCBiY21yaW5nX2dldF9jeWNsZXNfdGltZXIxKHZvaWQpCitzdGF0aWMgY3ljbGVfdCBiY21yaW5nX2dldF9jeWNsZXNfdGltZXIxKHN0cnVjdCBjbG9ja3NvdXJjZSAqY3MpCiB7CiAJcmV0dXJuIH5yZWFkbChUSU1FUjFfVkFfQkFTRSArIFRJTUVSX1ZBTFVFKTsKIH0KIAotc3RhdGljIGN5Y2xlX3QgYmNtcmluZ19nZXRfY3ljbGVzX3RpbWVyMyh2b2lkKQorc3RhdGljIGN5Y2xlX3QgYmNtcmluZ19nZXRfY3ljbGVzX3RpbWVyMyhzdHJ1Y3QgY2xvY2tzb3VyY2UgKmNzKQogewogCXJldHVybiB+cmVhZGwoVElNRVIzX1ZBX0JBU0UgKyBUSU1FUl9WQUxVRSk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWJjbXJpbmcvaW5jbHVkZS9tYWNoL3N5c3RlbS5oIGIvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaAppbmRleCBjZGJmOTNjLi4zOGIzNzA2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWJjbXJpbmcvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCisrKyBiL2FyY2gvYXJtL21hY2gtYmNtcmluZy9pbmNsdWRlL21hY2gvc3lzdGVtLmgKQEAgLTI5LDcgKzI5LDcgQEAKIAljcHVfZG9faWRsZSgpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9yZXNldChjaGFyIG1vZGUsIGNoYXIgKmNtZCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3Jlc2V0KGNoYXIgbW9kZSwgY29uc3QgY2hhciAqY21kKQogewogCXByaW50aygiYXJjaF9yZXNldDolYyAleFxuIiwgbW9kZSwgYmNtcmluZ19hcmNoX3dhcm1fcmVib290KTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2JvYXJkLWRtMzY1LWV2bS5jIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2JvYXJkLWRtMzY1LWV2bS5jCmluZGV4IGExZDVlN2QuLjUyZGQ4MDQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9ib2FyZC1kbTM2NS1ldm0uYworKysgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvYm9hcmQtZG0zNjUtZXZtLmMKQEAgLTM1LDcgKzM1LDYgQEAKICNpbmNsdWRlIDxtYWNoL2NvbW1vbi5oPgogI2luY2x1ZGUgPG1hY2gvaTJjLmg+CiAjaW5jbHVkZSA8bWFjaC9zZXJpYWwuaD4KLSNpbmNsdWRlIDxtYWNoL2NvbW1vbi5oPgogI2luY2x1ZGUgPG1hY2gvbW1jLmg+CiAjaW5jbHVkZSA8bWFjaC9uYW5kLmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L0tjb25maWcgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9LY29uZmlnCmluZGV4IGQ3MjkxYzYuLjkxNjdjM2QgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L0tjb25maWcKKysrIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvS2NvbmZpZwpAQCAtMTcsMTMgKzE3LDMxIEBACiAJYm9vbCAiMHgwMDAwMDAwMCAtIFNEQ0UzL1N5bmNCb290IgogCWhlbHAKIAkgIFNlbGVjdCB0aGlzIG9wdGlvbiBpZiB5b3Ugd2FudCBzdXBwb3J0IGZvciBFUDkzeHggYm9hcmRzIHdpdGggdGhlCi0JICBmaXJzdCBTRFJBTSBiYW5rIGF0IDB4MDAwMDAwMDAKKwkgIGZpcnN0IFNEUkFNIGJhbmsgYXQgMHgwMDAwMDAwMC4KIAogY29uZmlnIEVQOTNYWF9TRENFMF9QSFlTX09GRlNFVAogCWJvb2wgIjB4YzAwMDAwMDAgLSBTRENFTyIKIAloZWxwCiAJICBTZWxlY3QgdGhpcyBvcHRpb24gaWYgeW91IHdhbnQgc3VwcG9ydCBmb3IgRVA5M3h4IGJvYXJkcyB3aXRoIHRoZQotCSAgZmlyc3QgU0RSQU0gYmFuayBhdCAweGMwMDAwMDAwCisJICBmaXJzdCBTRFJBTSBiYW5rIGF0IDB4YzAwMDAwMDAuCisKK2NvbmZpZyBFUDkzWFhfU0RDRTFfUEhZU19PRkZTRVQKKwlib29sICIweGQwMDAwMDAwIC0gU0RDRTEiCisJaGVscAorCSAgU2VsZWN0IHRoaXMgb3B0aW9uIGlmIHlvdSB3YW50IHN1cHBvcnQgZm9yIEVQOTN4eCBib2FyZHMgd2l0aCB0aGUKKwkgIGZpcnN0IFNEUkFNIGJhbmsgYXQgMHhkMDAwMDAwMC4KKworY29uZmlnIEVQOTNYWF9TRENFMl9QSFlTX09GRlNFVAorCWJvb2wgIjB4ZTAwMDAwMDAgLSBTRENFMiIKKwloZWxwCisJICBTZWxlY3QgdGhpcyBvcHRpb24gaWYgeW91IHdhbnQgc3VwcG9ydCBmb3IgRVA5M3h4IGJvYXJkcyB3aXRoIHRoZQorCSAgZmlyc3QgU0RSQU0gYmFuayBhdCAweGUwMDAwMDAwLgorCitjb25maWcgRVA5M1hYX1NEQ0UzX0FTWU5DX1BIWVNfT0ZGU0VUCisJYm9vbCAiMHhmMDAwMDAwMCAtIFNEQ0UzL0FzeW5jQm9vdCIKKwloZWxwCisJICBTZWxlY3QgdGhpcyBvcHRpb24gaWYgeW91IHdhbnQgc3VwcG9ydCBmb3IgRVA5M3h4IGJvYXJkcyB3aXRoIHRoZQorCSAgZmlyc3QgU0RSQU0gYmFuayBhdCAweGYwMDAwMDAwLgogCiBlbmRjaG9pY2UKIApAQCAtMTEyLDI4ICsxMzAsMzYgQEAKIAlib29sCiAKIGNvbmZpZyBNQUNIX01JQ1JPOUgKLQlib29sICJTdXBwb3J0IENvbnRlYyBIeXBlcmNvbnRyb2wgTWljcm85LUgiCisJYm9vbCAiU3VwcG9ydCBDb250ZWMgTWljcm85LUhpZ2giCiAJZGVwZW5kcyBvbiBFUDkzWFhfU0RDRTNfU1lOQ19QSFlTX09GRlNFVAogCXNlbGVjdCBNQUNIX01JQ1JPOQogCWhlbHAKIAkgIFNheSAnWScgaGVyZSBpZiB5b3Ugd2FudCB5b3VyIGtlcm5lbCB0byBzdXBwb3J0IHRoZQotCSAgQ29udGVjIEh5cGVyY29udHJvbCBNaWNybzktSCBib2FyZC4KKwkgIENvbnRlYyBNaWNybzktSGlnaCBib2FyZC4KIAogY29uZmlnIE1BQ0hfTUlDUk85TQotCWJvb2wgIlN1cHBvcnQgQ29udGVjIEh5cGVyY29udHJvbCBNaWNybzktTSIKLQlkZXBlbmRzIG9uIEVQOTNYWF9TRENFM19TWU5DX1BIWVNfT0ZGU0VUCisJYm9vbCAiU3VwcG9ydCBDb250ZWMgTWljcm85LU1pZCIKKwlkZXBlbmRzIG9uIEVQOTNYWF9TRENFM19BU1lOQ19QSFlTX09GRlNFVAogCXNlbGVjdCBNQUNIX01JQ1JPOQogCWhlbHAKIAkgIFNheSAnWScgaGVyZSBpZiB5b3Ugd2FudCB5b3VyIGtlcm5lbCB0byBzdXBwb3J0IHRoZQotCSAgQ29udGVjIEh5cGVyY29udHJvbCBNaWNybzktTSBib2FyZC4KKwkgIENvbnRlYyBNaWNybzktTWlkIGJvYXJkLgogCiBjb25maWcgTUFDSF9NSUNSTzlMCi0JYm9vbCAiU3VwcG9ydCBDb250ZWMgSHlwZXJjb250cm9sIE1pY3JvOS1MIgorCWJvb2wgIlN1cHBvcnQgQ29udGVjIE1pY3JvOS1MaXRlIgogCWRlcGVuZHMgb24gRVA5M1hYX1NEQ0UzX1NZTkNfUEhZU19PRkZTRVQKIAlzZWxlY3QgTUFDSF9NSUNSTzkKIAloZWxwCiAJICBTYXkgJ1knIGhlcmUgaWYgeW91IHdhbnQgeW91ciBrZXJuZWwgdG8gc3VwcG9ydCB0aGUKLQkgIENvbnRlYyBIeXBlcmNvbnRyb2wgTWljcm85LUwgYm9hcmQuCisJICBDb250ZWMgTWljcm85LUxpdGUgYm9hcmQuCisKK2NvbmZpZyBNQUNIX01JQ1JPOVMKKwlib29sICJTdXBwb3J0IENvbnRlYyBNaWNybzktU2xpbSIKKwlkZXBlbmRzIG9uIEVQOTNYWF9TRENFM19BU1lOQ19QSFlTX09GRlNFVAorCXNlbGVjdCBNQUNIX01JQ1JPOQorCWhlbHAKKwkgIFNheSAnWScgaGVyZSBpZiB5b3Ugd2FudCB5b3VyIGtlcm5lbCB0byBzdXBwb3J0IHRoZQorCSAgQ29udGVjIE1pY3JvOS1TbGltIGJvYXJkLgogCiBjb25maWcgTUFDSF9UUzcyWFgKIAlib29sICJTdXBwb3J0IFRlY2hub2xvZ2ljIFN5c3RlbXMgVFMtNzJ4eCBTQkMiCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9NYWtlZmlsZS5ib290IGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvTWFrZWZpbGUuYm9vdAppbmRleCAyN2EwODVhLi4wYWQzM2YxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9NYWtlZmlsZS5ib290CisrKyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L01ha2VmaWxlLmJvb3QKQEAgLTMsMyArMywxMiBAQAogCiAgICB6cmVsYWRkci0kKENPTkZJR19FUDkzWFhfU0RDRTBfUEhZU19PRkZTRVQpCQk6PSAweGMwMDA4MDAwCiBwYXJhbXNfcGh5cy0kKENPTkZJR19FUDkzWFhfU0RDRTBfUEhZU19PRkZTRVQpCQk6PSAweGMwMDAwMTAwCisKKyAgIHpyZWxhZGRyLSQoQ09ORklHX0VQOTNYWF9TRENFMV9QSFlTX09GRlNFVCkJCTo9IDB4ZDAwMDgwMDAKK3BhcmFtc19waHlzLSQoQ09ORklHX0VQOTNYWF9TRENFMV9QSFlTX09GRlNFVCkJCTo9IDB4ZDAwMDAxMDAKKworICAgenJlbGFkZHItJChDT05GSUdfRVA5M1hYX1NEQ0UyX1BIWVNfT0ZGU0VUKQkJOj0gMHhlMDAwODAwMAorcGFyYW1zX3BoeXMtJChDT05GSUdfRVA5M1hYX1NEQ0UyX1BIWVNfT0ZGU0VUKQkJOj0gMHhlMDAwMDEwMAorCisgICB6cmVsYWRkci0kKENPTkZJR19FUDkzWFhfU0RDRTNfQVNZTkNfUEhZU19PRkZTRVQpCTo9IDB4ZjAwMDgwMDAKK3BhcmFtc19waHlzLSQoQ09ORklHX0VQOTNYWF9TRENFM19BU1lOQ19QSFlTX09GRlNFVCkJOj0gMHhmMDAwMDEwMApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvY2xvY2suYyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2Nsb2NrLmMKaW5kZXggZGRhMTljZDcuLjFkMGY5ZDggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2Nsb2NrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvY2xvY2suYwpAQCAtMTYsMTMgKzE2LDE2IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorCisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogCiAjaW5jbHVkZSA8YXNtL2Nsa2Rldi5oPgogI2luY2x1ZGUgPGFzbS9kaXY2NC5oPgotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KIAogCiBzdHJ1Y3QgY2xrIHsKKwlzdHJ1Y3QgY2xrCSpwYXJlbnQ7CiAJdW5zaWduZWQgbG9uZwlyYXRlOwogCWludAkJdXNlcnM7CiAJaW50CQlzd19sb2NrZWQ7CkBAIC0zOSw0MCArNDIsNjAgQEAKIHN0YXRpYyBpbnQgc2V0X2tleXRjaGNsa19yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKTsKIHN0YXRpYyBpbnQgc2V0X2Rpdl9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKTsKIAorCitzdGF0aWMgc3RydWN0IGNsayBjbGtfeHRhbGkgPSB7CisJLnJhdGUJCT0gRVA5M1hYX0VYVF9DTEtfUkFURSwKK307CiBzdGF0aWMgc3RydWN0IGNsayBjbGtfdWFydDEgPSB7CisJLnBhcmVudAkJPSAmY2xrX3h0YWxpLAogCS5zd19sb2NrZWQJPSAxLAogCS5lbmFibGVfcmVnCT0gRVA5M1hYX1NZU0NPTl9ERVZDRkcsCiAJLmVuYWJsZV9tYXNrCT0gRVA5M1hYX1NZU0NPTl9ERVZDRkdfVTFFTiwKIAkuZ2V0X3JhdGUJPSBnZXRfdWFydF9yYXRlLAogfTsKIHN0YXRpYyBzdHJ1Y3QgY2xrIGNsa191YXJ0MiA9IHsKKwkucGFyZW50CQk9ICZjbGtfeHRhbGksCiAJLnN3X2xvY2tlZAk9IDEsCiAJLmVuYWJsZV9yZWcJPSBFUDkzWFhfU1lTQ09OX0RFVkNGRywKIAkuZW5hYmxlX21hc2sJPSBFUDkzWFhfU1lTQ09OX0RFVkNGR19VMkVOLAogCS5nZXRfcmF0ZQk9IGdldF91YXJ0X3JhdGUsCiB9Owogc3RhdGljIHN0cnVjdCBjbGsgY2xrX3VhcnQzID0geworCS5wYXJlbnQJCT0gJmNsa194dGFsaSwKIAkuc3dfbG9ja2VkCT0gMSwKIAkuZW5hYmxlX3JlZwk9IEVQOTNYWF9TWVNDT05fREVWQ0ZHLAogCS5lbmFibGVfbWFzawk9IEVQOTNYWF9TWVNDT05fREVWQ0ZHX1UzRU4sCiAJLmdldF9yYXRlCT0gZ2V0X3VhcnRfcmF0ZSwKIH07Ci1zdGF0aWMgc3RydWN0IGNsayBjbGtfcGxsMTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIGNsa19mOwotc3RhdGljIHN0cnVjdCBjbGsgY2xrX2g7Ci1zdGF0aWMgc3RydWN0IGNsayBjbGtfcDsKLXN0YXRpYyBzdHJ1Y3QgY2xrIGNsa19wbGwyOworc3RhdGljIHN0cnVjdCBjbGsgY2xrX3BsbDEgPSB7CisJLnBhcmVudAkJPSAmY2xrX3h0YWxpLAorfTsKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNsa19mID0geworCS5wYXJlbnQJCT0gJmNsa19wbGwxLAorfTsKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNsa19oID0geworCS5wYXJlbnQJCT0gJmNsa19wbGwxLAorfTsKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNsa19wID0geworCS5wYXJlbnQJCT0gJmNsa19wbGwxLAorfTsKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNsa19wbGwyID0geworCS5wYXJlbnQJCT0gJmNsa194dGFsaSwKK307CiBzdGF0aWMgc3RydWN0IGNsayBjbGtfdXNiX2hvc3QgPSB7CisJLnBhcmVudAkJPSAmY2xrX3BsbDIsCiAJLmVuYWJsZV9yZWcJPSBFUDkzWFhfU1lTQ09OX1BXUkNOVCwKIAkuZW5hYmxlX21hc2sJPSBFUDkzWFhfU1lTQ09OX1BXUkNOVF9VU0hfRU4sCiB9Owogc3RhdGljIHN0cnVjdCBjbGsgY2xrX2tleXBhZCA9IHsKKwkucGFyZW50CQk9ICZjbGtfeHRhbGksCiAJLnN3X2xvY2tlZAk9IDEsCiAJLmVuYWJsZV9yZWcJPSBFUDkzWFhfU1lTQ09OX0tFWVRDSENMS0RJViwKIAkuZW5hYmxlX21hc2sJPSBFUDkzWFhfU1lTQ09OX0tFWVRDSENMS0RJVl9LRU4sCiAJLnNldF9yYXRlCT0gc2V0X2tleXRjaGNsa19yYXRlLAogfTsKIHN0YXRpYyBzdHJ1Y3QgY2xrIGNsa19wd20gPSB7CisJLnBhcmVudAkJPSAmY2xrX3h0YWxpLAogCS5yYXRlCQk9IEVQOTNYWF9FWFRfQ0xLX1JBVEUsCiB9OwogCkBAIC04NSw1MCArMTA4LDYyIEBACiAKIC8qIERNQSBDbG9ja3MgKi8KIHN0YXRpYyBzdHJ1Y3QgY2xrIGNsa19tMnAwID0geworCS5wYXJlbnQJCT0gJmNsa19oLAogCS5lbmFibGVfcmVnCT0gRVA5M1hYX1NZU0NPTl9QV1JDTlQsCiAJLmVuYWJsZV9tYXNrCT0gRVA5M1hYX1NZU0NPTl9QV1JDTlRfRE1BX00yUDAsCiB9Owogc3RhdGljIHN0cnVjdCBjbGsgY2xrX20ycDEgPSB7CisJLnBhcmVudAkJPSAmY2xrX2gsCiAJLmVuYWJsZV9yZWcJPSBFUDkzWFhfU1lTQ09OX1BXUkNOVCwKIAkuZW5hYmxlX21hc2sJPSBFUDkzWFhfU1lTQ09OX1BXUkNOVF9ETUFfTTJQMSwKIH07CiBzdGF0aWMgc3RydWN0IGNsayBjbGtfbTJwMiA9IHsKKwkucGFyZW50CQk9ICZjbGtfaCwKIAkuZW5hYmxlX3JlZwk9IEVQOTNYWF9TWVNDT05fUFdSQ05ULAogCS5lbmFibGVfbWFzawk9IEVQOTNYWF9TWVNDT05fUFdSQ05UX0RNQV9NMlAyLAogfTsKIHN0YXRpYyBzdHJ1Y3QgY2xrIGNsa19tMnAzID0geworCS5wYXJlbnQJCT0gJmNsa19oLAogCS5lbmFibGVfcmVnCT0gRVA5M1hYX1NZU0NPTl9QV1JDTlQsCiAJLmVuYWJsZV9tYXNrCT0gRVA5M1hYX1NZU0NPTl9QV1JDTlRfRE1BX00yUDMsCiB9Owogc3RhdGljIHN0cnVjdCBjbGsgY2xrX20ycDQgPSB7CisJLnBhcmVudAkJPSAmY2xrX2gsCiAJLmVuYWJsZV9yZWcJPSBFUDkzWFhfU1lTQ09OX1BXUkNOVCwKIAkuZW5hYmxlX21hc2sJPSBFUDkzWFhfU1lTQ09OX1BXUkNOVF9ETUFfTTJQNCwKIH07CiBzdGF0aWMgc3RydWN0IGNsayBjbGtfbTJwNSA9IHsKKwkucGFyZW50CQk9ICZjbGtfaCwKIAkuZW5hYmxlX3JlZwk9IEVQOTNYWF9TWVNDT05fUFdSQ05ULAogCS5lbmFibGVfbWFzawk9IEVQOTNYWF9TWVNDT05fUFdSQ05UX0RNQV9NMlA1LAogfTsKIHN0YXRpYyBzdHJ1Y3QgY2xrIGNsa19tMnA2ID0geworCS5wYXJlbnQJCT0gJmNsa19oLAogCS5lbmFibGVfcmVnCT0gRVA5M1hYX1NZU0NPTl9QV1JDTlQsCiAJLmVuYWJsZV9tYXNrCT0gRVA5M1hYX1NZU0NPTl9QV1JDTlRfRE1BX00yUDYsCiB9Owogc3RhdGljIHN0cnVjdCBjbGsgY2xrX20ycDcgPSB7CisJLnBhcmVudAkJPSAmY2xrX2gsCiAJLmVuYWJsZV9yZWcJPSBFUDkzWFhfU1lTQ09OX1BXUkNOVCwKIAkuZW5hYmxlX21hc2sJPSBFUDkzWFhfU1lTQ09OX1BXUkNOVF9ETUFfTTJQNywKIH07CiBzdGF0aWMgc3RydWN0IGNsayBjbGtfbTJwOCA9IHsKKwkucGFyZW50CQk9ICZjbGtfaCwKIAkuZW5hYmxlX3JlZwk9IEVQOTNYWF9TWVNDT05fUFdSQ05ULAogCS5lbmFibGVfbWFzawk9IEVQOTNYWF9TWVNDT05fUFdSQ05UX0RNQV9NMlA4LAogfTsKIHN0YXRpYyBzdHJ1Y3QgY2xrIGNsa19tMnA5ID0geworCS5wYXJlbnQJCT0gJmNsa19oLAogCS5lbmFibGVfcmVnCT0gRVA5M1hYX1NZU0NPTl9QV1JDTlQsCiAJLmVuYWJsZV9tYXNrCT0gRVA5M1hYX1NZU0NPTl9QV1JDTlRfRE1BX00yUDksCiB9Owogc3RhdGljIHN0cnVjdCBjbGsgY2xrX20ybTAgPSB7CisJLnBhcmVudAkJPSAmY2xrX2gsCiAJLmVuYWJsZV9yZWcJPSBFUDkzWFhfU1lTQ09OX1BXUkNOVCwKIAkuZW5hYmxlX21hc2sJPSBFUDkzWFhfU1lTQ09OX1BXUkNOVF9ETUFfTTJNMCwKIH07CiBzdGF0aWMgc3RydWN0IGNsayBjbGtfbTJtMSA9IHsKKwkucGFyZW50CQk9ICZjbGtfaCwKIAkuZW5hYmxlX3JlZwk9IEVQOTNYWF9TWVNDT05fUFdSQ05ULAogCS5lbmFibGVfbWFzawk9IEVQOTNYWF9TWVNDT05fUFdSQ05UX0RNQV9NMk0xLAogfTsKQEAgLTEzNyw2ICsxNzIsNyBAQAogCXsgLmRldl9pZCA9IGRldiwgLmNvbl9pZCA9IGNvbiwgLmNsayA9IGNrIH0KIAogc3RhdGljIHN0cnVjdCBjbGtfbG9va3VwIGNsb2Nrc1tdID0geworCUlOSVRfQ0soTlVMTCwJCQkieHRhbGkiLAkmY2xrX3h0YWxpKSwKIAlJTklUX0NLKCJhcGI6dWFydDEiLAkJTlVMTCwJCSZjbGtfdWFydDEpLAogCUlOSVRfQ0soImFwYjp1YXJ0MiIsCQlOVUxMLAkJJmNsa191YXJ0MiksCiAJSU5JVF9DSygiYXBiOnVhcnQzIiwJCU5VTEwsCQkmY2xrX3VhcnQzKSwKQEAgLTE2Myw0OCArMTk5LDg0IEBACiAJSU5JVF9DSyhOVUxMLAkJCSJtMm0xIiwJCSZjbGtfbTJtMSksCiB9OwogCitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGNsa19sb2NrKTsKKworc3RhdGljIHZvaWQgX19jbGtfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlpZiAoIWNsay0+dXNlcnMrKykgeworCQlpZiAoY2xrLT5wYXJlbnQpCisJCQlfX2Nsa19lbmFibGUoY2xrLT5wYXJlbnQpOworCisJCWlmIChjbGstPmVuYWJsZV9yZWcpIHsKKwkJCXUzMiB2OworCisJCQl2ID0gX19yYXdfcmVhZGwoY2xrLT5lbmFibGVfcmVnKTsKKwkJCXYgfD0gY2xrLT5lbmFibGVfbWFzazsKKwkJCWlmIChjbGstPnN3X2xvY2tlZCkKKwkJCQllcDkzeHhfc3lzY29uX3N3bG9ja2VkX3dyaXRlKHYsIGNsay0+ZW5hYmxlX3JlZyk7CisJCQllbHNlCisJCQkJX19yYXdfd3JpdGVsKHYsIGNsay0+ZW5hYmxlX3JlZyk7CisJCX0KKwl9Cit9CiAKIGludCBjbGtfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaykKIHsKLQlpZiAoIWNsay0+dXNlcnMrKyAmJiBjbGstPmVuYWJsZV9yZWcpIHsKLQkJdTMyIHZhbHVlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQkJdmFsdWUgPSBfX3Jhd19yZWFkbChjbGstPmVuYWJsZV9yZWcpOwotCQl2YWx1ZSB8PSBjbGstPmVuYWJsZV9tYXNrOwotCQlpZiAoY2xrLT5zd19sb2NrZWQpCi0JCQllcDkzeHhfc3lzY29uX3N3bG9ja2VkX3dyaXRlKHZhbHVlLCBjbGstPmVuYWJsZV9yZWcpOwotCQllbHNlCi0JCQlfX3Jhd193cml0ZWwodmFsdWUsIGNsay0+ZW5hYmxlX3JlZyk7Ci0JfQorCWlmICghY2xrKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjbGtfbG9jaywgZmxhZ3MpOworCV9fY2xrX2VuYWJsZShjbGspOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNsa19sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0woY2xrX2VuYWJsZSk7CiAKK3N0YXRpYyB2b2lkIF9fY2xrX2Rpc2FibGUoc3RydWN0IGNsayAqY2xrKQoreworCWlmICghLS1jbGstPnVzZXJzKSB7CisJCWlmIChjbGstPmVuYWJsZV9yZWcpIHsKKwkJCXUzMiB2OworCisJCQl2ID0gX19yYXdfcmVhZGwoY2xrLT5lbmFibGVfcmVnKTsKKwkJCXYgJj0gfmNsay0+ZW5hYmxlX21hc2s7CisJCQlpZiAoY2xrLT5zd19sb2NrZWQpCisJCQkJZXA5M3h4X3N5c2Nvbl9zd2xvY2tlZF93cml0ZSh2LCBjbGstPmVuYWJsZV9yZWcpOworCQkJZWxzZQorCQkJCV9fcmF3X3dyaXRlbCh2LCBjbGstPmVuYWJsZV9yZWcpOworCQl9CisKKwkJaWYgKGNsay0+cGFyZW50KQorCQkJX19jbGtfZGlzYWJsZShjbGstPnBhcmVudCk7CisJfQorfQorCiB2b2lkIGNsa19kaXNhYmxlKHN0cnVjdCBjbGsgKmNsaykKIHsKLQlpZiAoIS0tY2xrLT51c2VycyAmJiBjbGstPmVuYWJsZV9yZWcpIHsKLQkJdTMyIHZhbHVlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQkJdmFsdWUgPSBfX3Jhd19yZWFkbChjbGstPmVuYWJsZV9yZWcpOwotCQl2YWx1ZSAmPSB+Y2xrLT5lbmFibGVfbWFzazsKLQkJaWYgKGNsay0+c3dfbG9ja2VkKQotCQkJZXA5M3h4X3N5c2Nvbl9zd2xvY2tlZF93cml0ZSh2YWx1ZSwgY2xrLT5lbmFibGVfcmVnKTsKLQkJZWxzZQotCQkJX19yYXdfd3JpdGVsKHZhbHVlLCBjbGstPmVuYWJsZV9yZWcpOwotCX0KKwlpZiAoIWNsaykKKwkJcmV0dXJuOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNsa19sb2NrLCBmbGFncyk7CisJX19jbGtfZGlzYWJsZShjbGspOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNsa19sb2NrLCBmbGFncyk7CiB9CiBFWFBPUlRfU1lNQk9MKGNsa19kaXNhYmxlKTsKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X3VhcnRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCiB7CisJdW5zaWduZWQgbG9uZyByYXRlID0gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KTsKIAl1MzIgdmFsdWU7CiAKIAl2YWx1ZSA9IF9fcmF3X3JlYWRsKEVQOTNYWF9TWVNDT05fUFdSQ05UKTsKIAlpZiAodmFsdWUgJiBFUDkzWFhfU1lTQ09OX1BXUkNOVF9VQVJUQkFVRCkKLQkJcmV0dXJuIEVQOTNYWF9FWFRfQ0xLX1JBVEU7CisJCXJldHVybiByYXRlOwogCWVsc2UKLQkJcmV0dXJuIEVQOTNYWF9FWFRfQ0xLX1JBVEUgLyAyOworCQlyZXR1cm4gcmF0ZSAvIDI7CiB9CiAKIHVuc2lnbmVkIGxvbmcgY2xrX2dldF9yYXRlKHN0cnVjdCBjbGsgKmNsaykKQEAgLTI0NCwxNiArMzE2LDE2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIGNhbGNfY2xrX2Rpdih1bnNpZ25lZCBsb25nIHJhdGUsIGludCAqcHNlbCwgaW50ICplc2VsLAotCQkJCSAgaW50ICpwZGl2LCBpbnQgKmRpdikKK3N0YXRpYyBpbnQgY2FsY19jbGtfZGl2KHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlLAorCQkJaW50ICpwc2VsLCBpbnQgKmVzZWwsIGludCAqcGRpdiwgaW50ICpkaXYpCiB7Ci0JdW5zaWduZWQgbG9uZyBtYXhfcmF0ZSwgYmVzdF9yYXRlID0gMCwKLQkJYWN0dWFsX3JhdGUgPSAwLCBtY2xrX3JhdGUgPSAwLCByYXRlX2VyciA9IC0xOworCXN0cnVjdCBjbGsgKm1jbGs7CisJdW5zaWduZWQgbG9uZyBtYXhfcmF0ZSwgYWN0dWFsX3JhdGUsIG1jbGtfcmF0ZSwgcmF0ZV9lcnIgPSAtMTsKIAlpbnQgaSwgZm91bmQgPSAwLCBfX2RpdiA9IDAsIF9fcGRpdiA9IDA7CiAKIAkvKiBEb24ndCBleGNlZWQgdGhlIG1heGltdW0gcmF0ZSAqLwogCW1heF9yYXRlID0gbWF4KG1heChjbGtfcGxsMS5yYXRlIC8gNCwgY2xrX3BsbDIucmF0ZSAvIDQpLAotCQkgICAgICAgKHVuc2lnbmVkIGxvbmcpRVA5M1hYX0VYVF9DTEtfUkFURSAvIDQpOworCQkgICAgICAgY2xrX3h0YWxpLnJhdGUgLyA0KTsKIAlyYXRlID0gbWluKHJhdGUsIG1heF9yYXRlKTsKIAogCS8qCkBAIC0yNjcsMTEgKzMzOSwxMiBAQAogCSAqLwogCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKIAkJaWYgKGkgPT0gMCkKLQkJCW1jbGtfcmF0ZSA9IEVQOTNYWF9FWFRfQ0xLX1JBVEUgKiAyOworCQkJbWNsayA9ICZjbGtfeHRhbGk7CiAJCWVsc2UgaWYgKGkgPT0gMSkKLQkJCW1jbGtfcmF0ZSA9IGNsa19wbGwxLnJhdGUgKiAyOwotCQllbHNlIGlmIChpID09IDIpCi0JCQltY2xrX3JhdGUgPSBjbGtfcGxsMi5yYXRlICogMjsKKwkJCW1jbGsgPSAmY2xrX3BsbDE7CisJCWVsc2UKKwkJCW1jbGsgPSAmY2xrX3BsbDI7CisJCW1jbGtfcmF0ZSA9IG1jbGstPnJhdGUgKiAyOwogCiAJCS8qIFRyeSBlYWNoIHByZWRpdmlkZXIgdmFsdWUgKi8KIAkJZm9yIChfX3BkaXYgPSA0OyBfX3BkaXYgPD0gNjsgX19wZGl2KyspIHsKQEAgLTI4Niw3ICszNTksOCBAQAogCQkJCSpkaXYgPSBfX2RpdjsKIAkJCQkqcHNlbCA9IChpID09IDIpOwogCQkJCSplc2VsID0gKGkgIT0gMCk7Ci0JCQkJYmVzdF9yYXRlID0gYWN0dWFsX3JhdGU7CisJCQkJY2xrLT5wYXJlbnQgPSBtY2xrOworCQkJCWNsay0+cmF0ZSA9IGFjdHVhbF9yYXRlOwogCQkJCXJhdGVfZXJyID0gYWJzKGFjdHVhbF9yYXRlIC0gcmF0ZSk7CiAJCQkJZm91bmQgPSAxOwogCQkJfQpAQCAtMjk0LDIxICszNjgsMTkgQEAKIAl9CiAKIAlpZiAoIWZvdW5kKQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIC1FSU5WQUw7CiAKLQlyZXR1cm4gYmVzdF9yYXRlOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHNldF9kaXZfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKIHsKLQl1bnNpZ25lZCBsb25nIGFjdHVhbF9yYXRlOwotCWludCBwc2VsID0gMCwgZXNlbCA9IDAsIHBkaXYgPSAwLCBkaXYgPSAwOworCWludCBlcnIsIHBzZWwgPSAwLCBlc2VsID0gMCwgcGRpdiA9IDAsIGRpdiA9IDA7CiAJdTMyIHZhbDsKIAotCWFjdHVhbF9yYXRlID0gY2FsY19jbGtfZGl2KHJhdGUsICZwc2VsLCAmZXNlbCwgJnBkaXYsICZkaXYpOwotCWlmIChhY3R1YWxfcmF0ZSA9PSAwKQotCQlyZXR1cm4gLUVJTlZBTDsKLQljbGstPnJhdGUgPSBhY3R1YWxfcmF0ZTsKKwllcnIgPSBjYWxjX2Nsa19kaXYoY2xrLCByYXRlLCAmcHNlbCwgJmVzZWwsICZwZGl2LCAmZGl2KTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOwogCiAJLyogQ2xlYXIgdGhlIGVzZWwsIHBzZWwsIHBkaXYgYW5kIGRpdiBiaXRzICovCiAJdmFsID0gX19yYXdfcmVhZGwoY2xrLT5lbmFibGVfcmVnKTsKQEAgLTM0NCw3ICs0MTYsNyBAQAogCXVuc2lnbmVkIGxvbmcgbG9uZyByYXRlOwogCWludCBpOwogCi0JcmF0ZSA9IEVQOTNYWF9FWFRfQ0xLX1JBVEU7CisJcmF0ZSA9IGNsa194dGFsaS5yYXRlOwogCXJhdGUgKj0gKChjb25maWdfd29yZCA+PiAxMSkgJiAweDFmKSArIDE7CQkvKiBYMUZCRCAqLwogCXJhdGUgKj0gKChjb25maWdfd29yZCA+PiA1KSAmIDB4M2YpICsgMTsJCS8qIFgyRkJEICovCiAJZG9fZGl2KHJhdGUsIChjb25maWdfd29yZCAmIDB4MWYpICsgMSk7CQkJLyogWDJJUEQgKi8KQEAgLTM3Nyw3ICs0NDksNyBAQAogCiAJdmFsdWUgPSBfX3Jhd19yZWFkbChFUDkzWFhfU1lTQ09OX0NMT0NLX1NFVDEpOwogCWlmICghKHZhbHVlICYgMHgwMDgwMDAwMCkpIHsJCQkvKiBQTEwxIGJ5cGFzc2VkPyAgKi8KLQkJY2xrX3BsbDEucmF0ZSA9IEVQOTNYWF9FWFRfQ0xLX1JBVEU7CisJCWNsa19wbGwxLnJhdGUgPSBjbGtfeHRhbGkucmF0ZTsKIAl9IGVsc2UgewogCQljbGtfcGxsMS5yYXRlID0gY2FsY19wbGxfcmF0ZSh2YWx1ZSk7CiAJfQpAQCAtMzg4LDcgKzQ2MCw3IEBACiAKIAl2YWx1ZSA9IF9fcmF3X3JlYWRsKEVQOTNYWF9TWVNDT05fQ0xPQ0tfU0VUMik7CiAJaWYgKCEodmFsdWUgJiAweDAwMDgwMDAwKSkgewkJCS8qIFBMTDIgYnlwYXNzZWQ/ICAqLwotCQljbGtfcGxsMi5yYXRlID0gRVA5M1hYX0VYVF9DTEtfUkFURTsKKwkJY2xrX3BsbDIucmF0ZSA9IGNsa194dGFsaS5yYXRlOwogCX0gZWxzZSBpZiAodmFsdWUgJiAweDAwMDQwMDAwKSB7CQkvKiBQTEwyIGVuYWJsZWQ/ICAqLwogCQljbGtfcGxsMi5yYXRlID0gY2FsY19wbGxfcmF0ZSh2YWx1ZSk7CiAJfSBlbHNlIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2NvcmUuYyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2NvcmUuYwppbmRleCBmN2ViZWQ5Li5iNDM1N2MzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9jb3JlLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvY29yZS5jCkBAIC0yMDYsNyArMjA2LDYgQEAKIAlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7CiAJCWlmIChzdGF0dXMgJiAoMSA8PCBpKSkgewogCQkJaW50IGdwaW9faXJxID0gZ3Bpb190b19pcnEoRVA5M1hYX0dQSU9fTElORV9CKDApKSArIGk7Ci0JCQlkZXNjID0gaXJxX2Rlc2MgKyBncGlvX2lycTsKIAkJCWdlbmVyaWNfaGFuZGxlX2lycShncGlvX2lycSk7CiAJCX0KIAl9CkBAIC01NTAsMTMgKzU0OSwxMSBAQAogCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmZXA5M3h4X2V0aF9kZXZpY2UpOwogfQogCi1zdGF0aWMgc3RydWN0IGkyY19ncGlvX3BsYXRmb3JtX2RhdGEgZXA5M3h4X2kyY19kYXRhID0gewotCS5zZGFfcGluCQk9IEVQOTNYWF9HUElPX0xJTkVfRUVEQVQsCi0JLnNkYV9pc19vcGVuX2RyYWluCT0gMCwKLQkuc2NsX3BpbgkJPSBFUDkzWFhfR1BJT19MSU5FX0VFQ0xLLAotCS5zY2xfaXNfb3Blbl9kcmFpbgk9IDAsCi0JLnVkZWxheQkJCT0gMiwKLX07CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBFUDkzeHggaTJjIHBlcmlwaGVyYWwgaGFuZGxpbmcKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHN0cnVjdCBpMmNfZ3Bpb19wbGF0Zm9ybV9kYXRhIGVwOTN4eF9pMmNfZGF0YTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZXA5M3h4X2kyY19kZXZpY2UgPSB7CiAJLm5hbWUJCQk9ICJpMmMtZ3BpbyIsCkBAIC01NjQsOCArNTYxLDI1IEBACiAJLmRldi5wbGF0Zm9ybV9kYXRhCT0gJmVwOTN4eF9pMmNfZGF0YSwKIH07CiAKLXZvaWQgX19pbml0IGVwOTN4eF9yZWdpc3Rlcl9pMmMoc3RydWN0IGkyY19ib2FyZF9pbmZvICpkZXZpY2VzLCBpbnQgbnVtKQordm9pZCBfX2luaXQgZXA5M3h4X3JlZ2lzdGVyX2kyYyhzdHJ1Y3QgaTJjX2dwaW9fcGxhdGZvcm1fZGF0YSAqZGF0YSwKKwkJCQlzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gKmRldmljZXMsIGludCBudW0pCiB7CisJLyoKKwkgKiBTZXQgdGhlIEVFUFJPTSBpbnRlcmZhY2UgcGluIGRyaXZlIHR5cGUgY29udHJvbC4KKwkgKiBEZWZpbmVzIHRoZSBkcml2ZXIgdHlwZSBmb3IgdGhlIEVFQ0xLIGFuZCBFRURBVCBwaW5zIGFzIGVpdGhlcgorCSAqIG9wZW4gZHJhaW4sIHdoaWNoIHdpbGwgcmVxdWlyZSBhbiBleHRlcm5hbCBwdWxsLXVwLCBvciBhIG5vcm1hbAorCSAqIENNT1MgZHJpdmVyLgorCSAqLworCWlmIChkYXRhLT5zZGFfaXNfb3Blbl9kcmFpbiAmJiBkYXRhLT5zZGFfcGluICE9IEVQOTNYWF9HUElPX0xJTkVfRUVEQVQpCisJCXByX3dhcm5pbmcoImVwOTN4eDogc2RhICE9IEVFREFULCBvcGVuIGRyYWluIGhhcyBubyBlZmZlY3RcbiIpOworCWlmIChkYXRhLT5zY2xfaXNfb3Blbl9kcmFpbiAmJiBkYXRhLT5zY2xfcGluICE9IEVQOTNYWF9HUElPX0xJTkVfRUVDTEspCisJCXByX3dhcm5pbmcoImVwOTN4eDogc2NsICE9IEVFQ0xLLCBvcGVuIGRyYWluIGhhcyBubyBlZmZlY3RcbiIpOworCisJX19yYXdfd3JpdGVsKChkYXRhLT5zZGFfaXNfb3Blbl9kcmFpbiA8PCAxKSB8CisJCSAgICAgKGRhdGEtPnNjbF9pc19vcGVuX2RyYWluIDw8IDApLAorCQkgICAgIEVQOTNYWF9HUElPX0VFRFJJVkUpOworCisJZXA5M3h4X2kyY19kYXRhID0gKmRhdGE7CiAJaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMCwgZGV2aWNlcywgbnVtKTsKIAlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmVwOTN4eF9pMmNfZGV2aWNlKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2VkYjkzeHguYyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2VkYjkzeHguYwppbmRleCA3MzE0NWFlLi5hNGE3YmUzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9lZGI5M3h4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvZWRiOTN4eC5jCkBAIC0yNyw4ICsyNywxMCBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMtZ3Bpby5oPgogCiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogCkBAIC03NiwxMyArNzgsMjYgQEAKIAkucGh5X2lkCQk9IDEsCiB9OwogCi1zdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIF9faW5pdGRhdGEgZWRiOTN4eGFfaTJjX2RhdGFbXSA9IHsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEVEQjkzeHggaTJjIHBlcmlwaGVyYWwgaGFuZGxpbmcKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHN0cnVjdCBpMmNfZ3Bpb19wbGF0Zm9ybV9kYXRhIGVkYjkzeHhfaTJjX2dwaW9fZGF0YSA9IHsKKwkuc2RhX3BpbgkJPSBFUDkzWFhfR1BJT19MSU5FX0VFREFULAorCS5zZGFfaXNfb3Blbl9kcmFpbgk9IDAsCisJLnNjbF9waW4JCT0gRVA5M1hYX0dQSU9fTElORV9FRUNMSywKKwkuc2NsX2lzX29wZW5fZHJhaW4JPSAwLAorCS51ZGVsYXkJCQk9IDAsCS8qIGRlZmF1bHQgdG8gMTAwIGtIeiAqLworCS50aW1lb3V0CQk9IDAsCS8qIGRlZmF1bHQgdG8gMTAwIG1zICovCit9OworCitzdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIF9faW5pdGRhdGEgZWRiOTN4eGFfaTJjX2JvYXJkX2luZm9bXSA9IHsKIAl7CiAJCUkyQ19CT0FSRF9JTkZPKCJpc2wxMjA4IiwgMHg2ZiksCiAJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gX19pbml0ZGF0YSBlZGI5M3h4X2kyY19kYXRhW10gPSB7CitzdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIF9faW5pdGRhdGEgZWRiOTN4eF9pMmNfYm9hcmRfaW5mb1tdID0gewogCXsKIAkJSTJDX0JPQVJEX0lORk8oImRzMTMzNyIsIDB4NjgpLAogCX0sCkBAIC05MiwxMiArMTA3LDE0IEBACiB7CiAJaWYgKG1hY2hpbmVfaXNfZWRiOTMwMmEoKSB8fCBtYWNoaW5lX2lzX2VkYjkzMDdhKCkgfHwKIAkgICAgbWFjaGluZV9pc19lZGI5MzE1YSgpKSB7Ci0JCWVwOTN4eF9yZWdpc3Rlcl9pMmMoZWRiOTN4eGFfaTJjX2RhdGEsCi0JCQkJQVJSQVlfU0laRShlZGI5M3h4YV9pMmNfZGF0YSkpOworCQllcDkzeHhfcmVnaXN0ZXJfaTJjKCZlZGI5M3h4X2kyY19ncGlvX2RhdGEsCisJCQkJICAgIGVkYjkzeHhhX2kyY19ib2FyZF9pbmZvLAorCQkJCSAgICBBUlJBWV9TSVpFKGVkYjkzeHhhX2kyY19ib2FyZF9pbmZvKSk7CiAJfSBlbHNlIGlmIChtYWNoaW5lX2lzX2VkYjkzMDcoKSB8fCBtYWNoaW5lX2lzX2VkYjkzMTIoKSB8fAogCQkgICBtYWNoaW5lX2lzX2VkYjkzMTUoKSkgewotCQllcDkzeHhfcmVnaXN0ZXJfaTJjKGVkYjkzeHhfaTJjX2RhdGEsCi0JCQkJQVJSQVlfU0laRShlZGI5M3h4X2kyY19kYXRhKSk7CisJCWVwOTN4eF9yZWdpc3Rlcl9pMmMoJmVkYjkzeHhfaTJjX2dwaW9fZGF0YSwKKwkJCQkgICAgZWRiOTN4eF9pMmNfYm9hcmRfaW5mbywKKwkJCQkgICAgQVJSQVlfU0laRShlZGI5M3h4X2kyY19ib2FyZF9pbmZvKSk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9pbmNsdWRlL21hY2gvZXA5M3h4LXJlZ3MuaCBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2luY2x1ZGUvbWFjaC9lcDkzeHgtcmVncy5oCmluZGV4IDBmYmY4N2IuLmIxZjkzN2UgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2luY2x1ZGUvbWFjaC9lcDkzeHgtcmVncy5oCisrKyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2luY2x1ZGUvbWFjaC9lcDkzeHgtcmVncy5oCkBAIC01MiwyNSArNTIsMjcgQEAKICNkZWZpbmUgRVA5M1hYX0FIQl9WSVJUX0JBU0UJCTB4ZmVmMDAwMDAKICNkZWZpbmUgRVA5M1hYX0FIQl9TSVpFCQkJMHgwMDEwMDAwMAogCisjZGVmaW5lIEVQOTNYWF9BSEJfUEhZUyh4KQkJKEVQOTNYWF9BSEJfUEhZU19CQVNFICsgKHgpKQogI2RlZmluZSBFUDkzWFhfQUhCX0lPTUVNKHgpCQlJT01FTShFUDkzWFhfQUhCX1ZJUlRfQkFTRSArICh4KSkKIAogI2RlZmluZSBFUDkzWFhfQVBCX1BIWVNfQkFTRQkJMHg4MDgwMDAwMAogI2RlZmluZSBFUDkzWFhfQVBCX1ZJUlRfQkFTRQkJMHhmZWQwMDAwMAogI2RlZmluZSBFUDkzWFhfQVBCX1NJWkUJCQkweDAwMjAwMDAwCiAKKyNkZWZpbmUgRVA5M1hYX0FQQl9QSFlTKHgpCQkoRVA5M1hYX0FQQl9QSFlTX0JBU0UgKyAoeCkpCiAjZGVmaW5lIEVQOTNYWF9BUEJfSU9NRU0oeCkJCUlPTUVNKEVQOTNYWF9BUEJfVklSVF9CQVNFICsgKHgpKQogCiAKIC8qIEFIQiBwZXJpcGhlcmFscyAqLwogI2RlZmluZSBFUDkzWFhfRE1BX0JBU0UJCQlFUDkzWFhfQUhCX0lPTUVNKDB4MDAwMDAwMDApCiAKLSNkZWZpbmUgRVA5M1hYX0VUSEVSTkVUX1BIWVNfQkFTRQkoRVA5M1hYX0FIQl9QSFlTX0JBU0UgKyAweDAwMDEwMDAwKQorI2RlZmluZSBFUDkzWFhfRVRIRVJORVRfUEhZU19CQVNFCUVQOTNYWF9BSEJfUEhZUygweDAwMDEwMDAwKQogI2RlZmluZSBFUDkzWFhfRVRIRVJORVRfQkFTRQkJRVA5M1hYX0FIQl9JT01FTSgweDAwMDEwMDAwKQogCi0jZGVmaW5lIEVQOTNYWF9VU0JfUEhZU19CQVNFCQkoRVA5M1hYX0FIQl9QSFlTX0JBU0UgKyAweDAwMDIwMDAwKQorI2RlZmluZSBFUDkzWFhfVVNCX1BIWVNfQkFTRQkJRVA5M1hYX0FIQl9QSFlTKDB4MDAwMjAwMDApCiAjZGVmaW5lIEVQOTNYWF9VU0JfQkFTRQkJCUVQOTNYWF9BSEJfSU9NRU0oMHgwMDAyMDAwMCkKIAotI2RlZmluZSBFUDkzWFhfUkFTVEVSX1BIWVNfQkFTRQkJKEVQOTNYWF9BSEJfUEhZU19CQVNFICsgMHgwMDAzMDAwMCkKKyNkZWZpbmUgRVA5M1hYX1JBU1RFUl9QSFlTX0JBU0UJCUVQOTNYWF9BSEJfUEhZUygweDAwMDMwMDAwKQogI2RlZmluZSBFUDkzWFhfUkFTVEVSX0JBU0UJCUVQOTNYWF9BSEJfSU9NRU0oMHgwMDAzMDAwMCkKIAogI2RlZmluZSBFUDkzWFhfR1JBUEhJQ1NfQUNDRUxfQkFTRQlFUDkzWFhfQUhCX0lPTUVNKDB4MDAwNDAwMDApCkBAIC0xMTIsMjEgKzExNCwxMCBAQAogCiAjZGVmaW5lIEVQOTNYWF9HUElPX0JBU0UJCUVQOTNYWF9BUEJfSU9NRU0oMHgwMDA0MDAwMCkKICNkZWZpbmUgRVA5M1hYX0dQSU9fUkVHKHgpCQkoRVA5M1hYX0dQSU9fQkFTRSArICh4KSkKLSNkZWZpbmUgRVA5M1hYX0dQSU9fRl9JTlRfVFlQRTEJCUVQOTNYWF9HUElPX1JFRygweDRjKQotI2RlZmluZSBFUDkzWFhfR1BJT19GX0lOVF9UWVBFMgkJRVA5M1hYX0dQSU9fUkVHKDB4NTApCi0jZGVmaW5lIEVQOTNYWF9HUElPX0ZfSU5UX0FDSwkJRVA5M1hYX0dQSU9fUkVHKDB4NTQpCi0jZGVmaW5lIEVQOTNYWF9HUElPX0ZfSU5UX0VOQUJMRQlFUDkzWFhfR1BJT19SRUcoMHg1OCkKICNkZWZpbmUgRVA5M1hYX0dQSU9fRl9JTlRfU1RBVFVTCUVQOTNYWF9HUElPX1JFRygweDVjKQotI2RlZmluZSBFUDkzWFhfR1BJT19BX0lOVF9UWVBFMQkJRVA5M1hYX0dQSU9fUkVHKDB4OTApCi0jZGVmaW5lIEVQOTNYWF9HUElPX0FfSU5UX1RZUEUyCQlFUDkzWFhfR1BJT19SRUcoMHg5NCkKLSNkZWZpbmUgRVA5M1hYX0dQSU9fQV9JTlRfQUNLCQlFUDkzWFhfR1BJT19SRUcoMHg5OCkKLSNkZWZpbmUgRVA5M1hYX0dQSU9fQV9JTlRfRU5BQkxFCUVQOTNYWF9HUElPX1JFRygweDljKQogI2RlZmluZSBFUDkzWFhfR1BJT19BX0lOVF9TVEFUVVMJRVA5M1hYX0dQSU9fUkVHKDB4YTApCi0jZGVmaW5lIEVQOTNYWF9HUElPX0JfSU5UX1RZUEUxCQlFUDkzWFhfR1BJT19SRUcoMHhhYykKLSNkZWZpbmUgRVA5M1hYX0dQSU9fQl9JTlRfVFlQRTIJCUVQOTNYWF9HUElPX1JFRygweGIwKQotI2RlZmluZSBFUDkzWFhfR1BJT19CX0lOVF9BQ0sJCUVQOTNYWF9HUElPX1JFRygweGI0KQotI2RlZmluZSBFUDkzWFhfR1BJT19CX0lOVF9FTkFCTEUJRVA5M1hYX0dQSU9fUkVHKDB4YjgpCiAjZGVmaW5lIEVQOTNYWF9HUElPX0JfSU5UX1NUQVRVUwlFUDkzWFhfR1BJT19SRUcoMHhiYykKKyNkZWZpbmUgRVA5M1hYX0dQSU9fRUVEUklWRQkJRVA5M1hYX0dQSU9fUkVHKDB4YzgpCiAKICNkZWZpbmUgRVA5M1hYX0FBQ19CQVNFCQkJRVA5M1hYX0FQQl9JT01FTSgweDAwMDgwMDAwKQogCkBAIC0xMzQsMTMgKzEyNSwxMyBAQAogCiAjZGVmaW5lIEVQOTNYWF9JUkRBX0JBU0UJCUVQOTNYWF9BUEJfSU9NRU0oMHgwMDBiMDAwMCkKIAotI2RlZmluZSBFUDkzWFhfVUFSVDFfUEhZU19CQVNFCQkoRVA5M1hYX0FQQl9QSFlTX0JBU0UgKyAweDAwMGMwMDAwKQorI2RlZmluZSBFUDkzWFhfVUFSVDFfUEhZU19CQVNFCQlFUDkzWFhfQVBCX1BIWVMoMHgwMDBjMDAwMCkKICNkZWZpbmUgRVA5M1hYX1VBUlQxX0JBU0UJCUVQOTNYWF9BUEJfSU9NRU0oMHgwMDBjMDAwMCkKIAotI2RlZmluZSBFUDkzWFhfVUFSVDJfUEhZU19CQVNFCQkoRVA5M1hYX0FQQl9QSFlTX0JBU0UgKyAweDAwMGQwMDAwKQorI2RlZmluZSBFUDkzWFhfVUFSVDJfUEhZU19CQVNFCQlFUDkzWFhfQVBCX1BIWVMoMHgwMDBkMDAwMCkKICNkZWZpbmUgRVA5M1hYX1VBUlQyX0JBU0UJCUVQOTNYWF9BUEJfSU9NRU0oMHgwMDBkMDAwMCkKIAotI2RlZmluZSBFUDkzWFhfVUFSVDNfUEhZU19CQVNFCQkoRVA5M1hYX0FQQl9QSFlTX0JBU0UgKyAweDAwMGUwMDAwKQorI2RlZmluZSBFUDkzWFhfVUFSVDNfUEhZU19CQVNFCQlFUDkzWFhfQVBCX1BIWVMoMHgwMDBlMDAwMCkKICNkZWZpbmUgRVA5M1hYX1VBUlQzX0JBU0UJCUVQOTNYWF9BUEJfSU9NRU0oMHgwMDBlMDAwMCkKIAogI2RlZmluZSBFUDkzWFhfS0VZX01BVFJJWF9CQVNFCQlFUDkzWFhfQVBCX0lPTUVNKDB4MDAwZjAwMDApCkBAIC0xNDgsMTAgKzEzOSwxMCBAQAogI2RlZmluZSBFUDkzWFhfQURDX0JBU0UJCQlFUDkzWFhfQVBCX0lPTUVNKDB4MDAxMDAwMDApCiAjZGVmaW5lIEVQOTNYWF9UT1VDSFNDUkVFTl9CQVNFCQlFUDkzWFhfQVBCX0lPTUVNKDB4MDAxMDAwMDApCiAKLSNkZWZpbmUgRVA5M1hYX1BXTV9QSFlTX0JBU0UJCShFUDkzWFhfQVBCX1BIWVNfQkFTRSArIDB4MDAxMTAwMDApCisjZGVmaW5lIEVQOTNYWF9QV01fUEhZU19CQVNFCQlFUDkzWFhfQVBCX1BIWVMoMHgwMDExMDAwMCkKICNkZWZpbmUgRVA5M1hYX1BXTV9CQVNFCQkJRVA5M1hYX0FQQl9JT01FTSgweDAwMTEwMDAwKQogCi0jZGVmaW5lIEVQOTNYWF9SVENfUEhZU19CQVNFCQkoRVA5M1hYX0FQQl9QSFlTX0JBU0UgKyAweDAwMTIwMDAwKQorI2RlZmluZSBFUDkzWFhfUlRDX1BIWVNfQkFTRQkJRVA5M1hYX0FQQl9QSFlTKDB4MDAxMjAwMDApCiAjZGVmaW5lIEVQOTNYWF9SVENfQkFTRQkJCUVQOTNYWF9BUEJfSU9NRU0oMHgwMDEyMDAwMCkKIAogI2RlZmluZSBFUDkzWFhfU1lTQ09OX0JBU0UJCUVQOTNYWF9BUEJfSU9NRU0oMHgwMDEzMDAwMCkKQEAgLTIxOCw2ICsyMDksMTcgQEAKICNkZWZpbmUgRVA5M1hYX1NZU0NPTl9LRVlUQ0hDTEtESVZfQURJVgkoMTw8MTYpCiAjZGVmaW5lIEVQOTNYWF9TWVNDT05fS0VZVENIQ0xLRElWX0tFTgkoMTw8MTUpCiAjZGVmaW5lIEVQOTNYWF9TWVNDT05fS0VZVENIQ0xLRElWX0tESVYJKDE8PDApCisjZGVmaW5lIEVQOTNYWF9TWVNDT05fU1lTQ0ZHCQlFUDkzWFhfU1lTQ09OX1JFRygweDljKQorI2RlZmluZSBFUDkzWFhfU1lTQ09OX1NZU0NGR19SRVZfTUFTSwkoMHhmMDAwMDAwMCkKKyNkZWZpbmUgRVA5M1hYX1NZU0NPTl9TWVNDRkdfUkVWX1NISUZUCSgyOCkKKyNkZWZpbmUgRVA5M1hYX1NZU0NPTl9TWVNDRkdfU0JPT1QJKDE8PDgpCisjZGVmaW5lIEVQOTNYWF9TWVNDT05fU1lTQ0ZHX0xDU043CSgxPDw3KQorI2RlZmluZSBFUDkzWFhfU1lTQ09OX1NZU0NGR19MQ1NONgkoMTw8NikKKyNkZWZpbmUgRVA5M1hYX1NZU0NPTl9TWVNDRkdfTEFTRE8JKDE8PDUpCisjZGVmaW5lIEVQOTNYWF9TWVNDT05fU1lTQ0ZHX0xFRURBCSgxPDw0KQorI2RlZmluZSBFUDkzWFhfU1lTQ09OX1NZU0NGR19MRUVDTEsJKDE8PDMpCisjZGVmaW5lIEVQOTNYWF9TWVNDT05fU1lTQ0ZHX0xDU04yCSgxPDwxKQorI2RlZmluZSBFUDkzWFhfU1lTQ09OX1NZU0NGR19MQ1NOMQkoMTw8MCkKICNkZWZpbmUgRVA5M1hYX1NZU0NPTl9TV0xPQ0sJCUVQOTNYWF9TWVNDT05fUkVHKDB4YzApCiAKICNkZWZpbmUgRVA5M1hYX1dBVENIRE9HX0JBU0UJCUVQOTNYWF9BUEJfSU9NRU0oMHgwMDE0MDAwMCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2luY2x1ZGUvbWFjaC9ncGlvLmggYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9pbmNsdWRlL21hY2gvZ3Bpby5oCmluZGV4IDBhMTQ5OGEuLmM5OTFiMTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2luY2x1ZGUvbWFjaC9ncGlvLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvaW5jbHVkZS9tYWNoL2dwaW8uaApAQCAtMTE0LDE3ICsxMTQsOSBAQAogICogICAgICAgICAgQjAuLkI3ICAoNy4uMTUpIHRvIGlycSA3Mi4uNzksIGFuZAogICogICAgICAgICAgRjAuLkY3ICgxNi4uMjQpIHRvIGlycSA4MC4uODcuCiAgKi8KLXN0YXRpYyBpbmxpbmUgaW50IGdwaW9fdG9faXJxKHVuc2lnbmVkIGdwaW8pCi17Ci0JaWYgKGdwaW8gPD0gRVA5M1hYX0dQSU9fTElORV9NQVhfSVJRKQotCQlyZXR1cm4gNjQgKyBncGlvOworI2RlZmluZSBncGlvX3RvX2lycShncGlvKQlcCisJKCgoZ3BpbykgPD0gRVA5M1hYX0dQSU9fTElORV9NQVhfSVJRKSA/ICg2NCArIChncGlvKSkgOiAtRUlOVkFMKQogCi0JcmV0dXJuIC1FSU5WQUw7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGlycV90b19ncGlvKHVuc2lnbmVkIGlycSkKLXsKLQlyZXR1cm4gaXJxIC0gZ3Bpb190b19pcnEoMCk7Ci19CisjZGVmaW5lIGlycV90b19ncGlvKGlycSkJKChpcnEpIC0gZ3Bpb190b19pcnEoMCkpCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvaW5jbHVkZS9tYWNoL21lbW9yeS5oIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvaW5jbHVkZS9tYWNoL21lbW9yeS5oCmluZGV4IDkyNWIxMmUuLjU1NDA2NGUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2luY2x1ZGUvbWFjaC9tZW1vcnkuaAorKysgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9pbmNsdWRlL21hY2gvbWVtb3J5LmgKQEAgLTksNiArOSwxMiBAQAogI2RlZmluZSBQSFlTX09GRlNFVAkJVUwoMHgwMDAwMDAwMCkKICNlbGlmIGRlZmluZWQoQ09ORklHX0VQOTNYWF9TRENFMF9QSFlTX09GRlNFVCkKICNkZWZpbmUgUEhZU19PRkZTRVQJCVVMKDB4YzAwMDAwMDApCisjZWxpZiBkZWZpbmVkKENPTkZJR19FUDkzWFhfU0RDRTFfUEhZU19PRkZTRVQpCisjZGVmaW5lIFBIWVNfT0ZGU0VUCQlVTCgweGQwMDAwMDAwKQorI2VsaWYgZGVmaW5lZChDT05GSUdfRVA5M1hYX1NEQ0UyX1BIWVNfT0ZGU0VUKQorI2RlZmluZSBQSFlTX09GRlNFVAkJVUwoMHhlMDAwMDAwMCkKKyNlbGlmIGRlZmluZWQoQ09ORklHX0VQOTNYWF9TRENFM19BU1lOQ19QSFlTX09GRlNFVCkKKyNkZWZpbmUgUEhZU19PRkZTRVQJCVVMKDB4ZjAwMDAwMDApCiAjZWxzZQogI2Vycm9yICJLY29uZmlnIGJ1ZzogTm8gRVA5M3h4IFBIWVNfT0ZGU0VUIHNldCIKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvaW5jbHVkZS9tYWNoL3BsYXRmb3JtLmggYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9pbmNsdWRlL21hY2gvcGxhdGZvcm0uaAppbmRleCAwMWEwZjA4Li40NjlmZDk2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9pbmNsdWRlL21hY2gvcGxhdGZvcm0uaAorKysgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9pbmNsdWRlL21hY2gvcGxhdGZvcm0uaApAQCAtNCw2ICs0LDcgQEAKIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KIAorc3RydWN0IGkyY19ncGlvX3BsYXRmb3JtX2RhdGE7CiBzdHJ1Y3QgaTJjX2JvYXJkX2luZm87CiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlOwogc3RydWN0IGVwOTN4eGZiX21hY2hfaW5mbzsKQEAgLTE2LDcgKzE3LDYgQEAKIAogdm9pZCBlcDkzeHhfbWFwX2lvKHZvaWQpOwogdm9pZCBlcDkzeHhfaW5pdF9pcnEodm9pZCk7Ci12b2lkIGVwOTN4eF9pbml0X3RpbWUodW5zaWduZWQgbG9uZyk7CiAKIC8qIEVQOTN4eCBTeXN0ZW0gQ29udHJvbGxlciBzb2Z0d2FyZSBsb2NrZWQgcmVnaXN0ZXIgd3JpdGUgKi8KIHZvaWQgZXA5M3h4X3N5c2Nvbl9zd2xvY2tlZF93cml0ZSh1bnNpZ25lZCBpbnQgdmFsLCB2b2lkIF9faW9tZW0gKnJlZyk7CkBAIC0zMyw3ICszMyw4IEBACiB9CiAKIHZvaWQgZXA5M3h4X3JlZ2lzdGVyX2V0aChzdHJ1Y3QgZXA5M3h4X2V0aF9kYXRhICpkYXRhLCBpbnQgY29weV9hZGRyKTsKLXZvaWQgZXA5M3h4X3JlZ2lzdGVyX2kyYyhzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gKmRldmljZXMsIGludCBudW0pOwordm9pZCBlcDkzeHhfcmVnaXN0ZXJfaTJjKHN0cnVjdCBpMmNfZ3Bpb19wbGF0Zm9ybV9kYXRhICpkYXRhLAorCQkJIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyAqZGV2aWNlcywgaW50IG51bSk7CiB2b2lkIGVwOTN4eF9yZWdpc3Rlcl9mYihzdHJ1Y3QgZXA5M3h4ZmJfbWFjaF9pbmZvICpkYXRhKTsKIHZvaWQgZXA5M3h4X3JlZ2lzdGVyX3B3bShpbnQgcHdtMCwgaW50IHB3bTEpOwogaW50IGVwOTN4eF9wd21fYWNxdWlyZV9ncGlvKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvbWljcm85LmMgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9taWNybzkuYwppbmRleCAwYTMxM2U4Li5kODNiODA0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9taWNybzkuYworKysgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9taWNybzkuYwpAQCAtMiw3ICsyLDkgQEAKICAqICBsaW51eC9hcmNoL2FybS9tYWNoLWVwOTN4eC9taWNybzkuYwogICoKICAqIENvcHlyaWdodCAoQykgMjAwNiBDb250ZWMgU3RldWVydW5nc3RlY2huaWsgJiBBdXRvbWF0aW9uIEdtYkgKLSAqICAgICAgICAgICAgICAgICAgIE1hbmZyZWQgR3J1YmVyIDxtYW5mcmVkLmdydWJlckBjb250ZWMuYXQ+CisgKiAgICAgICAgICAgICAgICAgICAgTWFuZnJlZCBHcnViZXIgPG0uZ3J1YmVyQHRpcm9sLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBDb250ZWMgU3RldWVydW5nc3RlY2huaWsgJiBBdXRvbWF0aW9uIEdtYkgKKyAqICAgICAgICAgICAgICAgICAgICBIdWJlcnQgRmV1cnN0ZWluIDxodWJlcnQuZmV1cnN0ZWluQGNvbnRlYy5hdD4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKQEAgLTIwLDEwNCArMjIsMTI0IEBACiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgogCiAKLXN0YXRpYyBzdHJ1Y3QgZXA5M3h4X2V0aF9kYXRhIG1pY3JvOV9ldGhfZGF0YSA9IHsKLQkucGh5X2lkCQk9IDB4MWYsCi19OworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIE1pY3JvOSBOT1IgRmxhc2gKKyAqCisgKiBNaWNybzktSGlnaCBoYXMgdXAgdG8gNjRNQiBvZiAzMi1iaXQgZmxhc2ggb24gQ1MxCisgKiBNaWNybzktTWlkIGhhcyB1cCB0byA2NE1CIG9mIGVpdGhlciAzMi1iaXQgb3IgMTYtYml0IGZsYXNoIG9uIENTMQorICogTWljcm85LUxpdGUgdXNlcyBhIHNlcGVyYXRlIE1URCBtYXAgZHJpdmVyIGZvciBmbGFzaCBzdXBwb3J0CisgKiBNaWNybzktU2xpbSBoYXMgdXAgdG8gNjRNQiBvZiBlaXRoZXIgMzItYml0IG9yIDE2LWJpdCBmbGFzaCBvbiBDUzEKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHN0cnVjdCBwaHlzbWFwX2ZsYXNoX2RhdGEgbWljcm85X2ZsYXNoX2RhdGE7CiAKLXN0YXRpYyB2b2lkIF9faW5pdCBtaWNybzlfaW5pdCh2b2lkKQotewotCWVwOTN4eF9yZWdpc3Rlcl9ldGgoJm1pY3JvOV9ldGhfZGF0YSwgMSk7Ci19Ci0KLS8qCi0gKiBNaWNybzktSAotICovCi0jaWZkZWYgQ09ORklHX01BQ0hfTUlDUk85SAotc3RhdGljIHN0cnVjdCBwaHlzbWFwX2ZsYXNoX2RhdGEgbWljcm85aF9mbGFzaF9kYXRhID0gewotCS53aWR0aAkJPSA0LAotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBtaWNybzloX2ZsYXNoX3Jlc291cmNlID0geworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBtaWNybzlfZmxhc2hfcmVzb3VyY2UgPSB7CiAJLnN0YXJ0CQk9IEVQOTNYWF9DUzFfUEhZU19CQVNFLAogCS5lbmQJCT0gRVA5M1hYX0NTMV9QSFlTX0JBU0UgKyBTWl82NE0gLSAxLAogCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG1pY3JvOWhfZmxhc2ggPSB7CitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBtaWNybzlfZmxhc2ggPSB7CiAJLm5hbWUJCT0gInBoeXNtYXAtZmxhc2giLAogCS5pZAkJPSAwLAogCS5kZXYJCT0gewotCQkucGxhdGZvcm1fZGF0YQk9ICZtaWNybzloX2ZsYXNoX2RhdGEsCisJCS5wbGF0Zm9ybV9kYXRhCT0gJm1pY3JvOV9mbGFzaF9kYXRhLAogCX0sCiAJLm51bV9yZXNvdXJjZXMJPSAxLAotCS5yZXNvdXJjZQk9ICZtaWNybzloX2ZsYXNoX3Jlc291cmNlLAorCS5yZXNvdXJjZQk9ICZtaWNybzlfZmxhc2hfcmVzb3VyY2UsCiB9OwogCi1zdGF0aWMgdm9pZCBfX2luaXQgbWljcm85aF9pbml0KHZvaWQpCitzdGF0aWMgdm9pZCBfX2luaXQgX19taWNybzlfcmVnaXN0ZXJfZmxhc2godW5zaWduZWQgaW50IHdpZHRoKQogewotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmbWljcm85aF9mbGFzaCk7CisJbWljcm85X2ZsYXNoX2RhdGEud2lkdGggPSB3aWR0aDsKKworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmbWljcm85X2ZsYXNoKTsKIH0KIAotc3RhdGljIHZvaWQgX19pbml0IG1pY3JvOWhfaW5pdF9tYWNoaW5lKHZvaWQpCitzdGF0aWMgdW5zaWduZWQgaW50IF9faW5pdCBtaWNybzlfZGV0ZWN0X2Jvb3R3aWR0aCh2b2lkKQoreworCXUzMiB2OworCisJLyogRGV0ZWN0IHRoZSBidXMgd2lkdGggb2YgdGhlIGV4dGVybmFsIGZsYXNoIG1lbW9yeSAqLworCXYgPSBfX3Jhd19yZWFkbChFUDkzWFhfU1lTQ09OX1NZU0NGRyk7CisJaWYgKHYgJiBFUDkzWFhfU1lTQ09OX1NZU0NGR19MQ1NONykKKwkJcmV0dXJuIDQ7IC8qIDMyLWJpdCAqLworCWVsc2UKKwkJcmV0dXJuIDI7IC8qIDE2LWJpdCAqLworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgbWljcm85X3JlZ2lzdGVyX2ZsYXNoKHZvaWQpCit7CisJaWYgKG1hY2hpbmVfaXNfbWljcm85KCkpCisJCV9fbWljcm85X3JlZ2lzdGVyX2ZsYXNoKDQpOworCWVsc2UgaWYgKG1hY2hpbmVfaXNfbWljcm85bSgpIHx8IG1hY2hpbmVfaXNfbWljcm85cygpKQorCQlfX21pY3JvOV9yZWdpc3Rlcl9mbGFzaChtaWNybzlfZGV0ZWN0X2Jvb3R3aWR0aCgpKTsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogTWljcm85IEV0aGVybmV0CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBzdHJ1Y3QgZXA5M3h4X2V0aF9kYXRhIG1pY3JvOV9ldGhfZGF0YSA9IHsKKwkucGh5X2lkCQk9IDB4MWYsCit9OworCisKK3N0YXRpYyB2b2lkIF9faW5pdCBtaWNybzlfaW5pdF9tYWNoaW5lKHZvaWQpCiB7CiAJZXA5M3h4X2luaXRfZGV2aWNlcygpOwotCW1pY3JvOV9pbml0KCk7Ci0JbWljcm85aF9pbml0KCk7CisJZXA5M3h4X3JlZ2lzdGVyX2V0aCgmbWljcm85X2V0aF9kYXRhLCAxKTsKKwltaWNybzlfcmVnaXN0ZXJfZmxhc2goKTsKIH0KIAotTUFDSElORV9TVEFSVChNSUNSTzksICJDb250ZWMgSHlwZXJjb250cm9sIE1pY3JvOS1IIikKLQkvKiBNYWludGFpbmVyOiBNYW5mcmVkIEdydWJlciA8bWFuZnJlZC5ncnViZXJAY29udGVjLmF0PiAqLworCisjaWZkZWYgQ09ORklHX01BQ0hfTUlDUk85SAorTUFDSElORV9TVEFSVChNSUNSTzksICJDb250ZWMgTWljcm85LUhpZ2giKQorCS8qIE1haW50YWluZXI6IEh1YmVydCBGZXVyc3RlaW4gPGh1YmVydC5mZXVyc3RlaW5AY29udGVjLmF0PiAqLwogCS5waHlzX2lvCT0gRVA5M1hYX0FQQl9QSFlTX0JBU0UsCiAJLmlvX3BnX29mZnN0CT0gKChFUDkzWFhfQVBCX1ZJUlRfQkFTRSkgPj4gMTgpICYgMHhmZmZjLAogCS5ib290X3BhcmFtcwk9IEVQOTNYWF9TRENFM19QSFlTX0JBU0VfU1lOQyArIDB4MTAwLAogCS5tYXBfaW8JCT0gZXA5M3h4X21hcF9pbywKIAkuaW5pdF9pcnEJPSBlcDkzeHhfaW5pdF9pcnEsCiAJLnRpbWVyCQk9ICZlcDkzeHhfdGltZXIsCi0JLmluaXRfbWFjaGluZQk9IG1pY3JvOWhfaW5pdF9tYWNoaW5lLAorCS5pbml0X21hY2hpbmUJPSBtaWNybzlfaW5pdF9tYWNoaW5lLAogTUFDSElORV9FTkQKICNlbmRpZgogCi0vKgotICogTWljcm85LU0KLSAqLwogI2lmZGVmIENPTkZJR19NQUNIX01JQ1JPOU0KLXN0YXRpYyB2b2lkIF9faW5pdCBtaWNybzltX2luaXRfbWFjaGluZSh2b2lkKQotewotCWVwOTN4eF9pbml0X2RldmljZXMoKTsKLQltaWNybzlfaW5pdCgpOwotfQotCi1NQUNISU5FX1NUQVJUKE1JQ1JPOU0sICJDb250ZWMgSHlwZXJjb250cm9sIE1pY3JvOS1NIikKLQkvKiBNYWludGFpbmVyOiBNYW5mcmVkIEdydWJlciA8bWFuZnJlZC5ncnViZXJAY29udGVjLmF0PiAqLworTUFDSElORV9TVEFSVChNSUNSTzlNLCAiQ29udGVjIE1pY3JvOS1NaWQiKQorCS8qIE1haW50YWluZXI6IEh1YmVydCBGZXVyc3RlaW4gPGh1YmVydC5mZXVyc3RlaW5AY29udGVjLmF0PiAqLwogCS5waHlzX2lvCT0gRVA5M1hYX0FQQl9QSFlTX0JBU0UsCiAJLmlvX3BnX29mZnN0CT0gKChFUDkzWFhfQVBCX1ZJUlRfQkFTRSkgPj4gMTgpICYgMHhmZmZjLAotCS5ib290X3BhcmFtcwk9IEVQOTNYWF9TRENFM19QSFlTX0JBU0VfU1lOQyArIDB4MTAwLAorCS5ib290X3BhcmFtcwk9IEVQOTNYWF9TRENFM19QSFlTX0JBU0VfQVNZTkMgKyAweDEwMCwKIAkubWFwX2lvCQk9IGVwOTN4eF9tYXBfaW8sCiAJLmluaXRfaXJxCT0gZXA5M3h4X2luaXRfaXJxLAogCS50aW1lcgkJPSAmZXA5M3h4X3RpbWVyLAotCS5pbml0X21hY2hpbmUJPSBtaWNybzltX2luaXRfbWFjaGluZSwKKwkuaW5pdF9tYWNoaW5lCT0gbWljcm85X2luaXRfbWFjaGluZSwKIE1BQ0hJTkVfRU5ECiAjZW5kaWYKIAotLyoKLSAqIE1pY3JvOS1MCi0gKi8KICNpZmRlZiBDT05GSUdfTUFDSF9NSUNSTzlMCi1zdGF0aWMgdm9pZCBfX2luaXQgbWljcm85bF9pbml0X21hY2hpbmUodm9pZCkKLXsKLQllcDkzeHhfaW5pdF9kZXZpY2VzKCk7Ci0JbWljcm85X2luaXQoKTsKLX0KLQotTUFDSElORV9TVEFSVChNSUNSTzlMLCAiQ29udGVjIEh5cGVyY29udHJvbCBNaWNybzktTCIpCi0JLyogTWFpbnRhaW5lcjogTWFuZnJlZCBHcnViZXIgPG1hbmZyZWQuZ3J1YmVyQGNvbnRlYy5hdD4gKi8KK01BQ0hJTkVfU1RBUlQoTUlDUk85TCwgIkNvbnRlYyBNaWNybzktTGl0ZSIpCisJLyogTWFpbnRhaW5lcjogSHViZXJ0IEZldXJzdGVpbiA8aHViZXJ0LmZldXJzdGVpbkBjb250ZWMuYXQ+ICovCiAJLnBoeXNfaW8JPSBFUDkzWFhfQVBCX1BIWVNfQkFTRSwKIAkuaW9fcGdfb2Zmc3QJPSAoKEVQOTNYWF9BUEJfVklSVF9CQVNFKSA+PiAxOCkgJiAweGZmZmMsCiAJLmJvb3RfcGFyYW1zCT0gRVA5M1hYX1NEQ0UzX1BIWVNfQkFTRV9TWU5DICsgMHgxMDAsCiAJLm1hcF9pbwkJPSBlcDkzeHhfbWFwX2lvLAogCS5pbml0X2lycQk9IGVwOTN4eF9pbml0X2lycSwKIAkudGltZXIJCT0gJmVwOTN4eF90aW1lciwKLQkuaW5pdF9tYWNoaW5lCT0gbWljcm85bF9pbml0X21hY2hpbmUsCisJLmluaXRfbWFjaGluZQk9IG1pY3JvOV9pbml0X21hY2hpbmUsCiBNQUNISU5FX0VORAogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfTUFDSF9NSUNSTzlTCitNQUNISU5FX1NUQVJUKE1JQ1JPOVMsICJDb250ZWMgTWljcm85LVNsaW0iKQorCS8qIE1haW50YWluZXI6IEh1YmVydCBGZXVyc3RlaW4gPGh1YmVydC5mZXVyc3RlaW5AY29udGVjLmF0PiAqLworCS5waHlzX2lvCT0gRVA5M1hYX0FQQl9QSFlTX0JBU0UsCisJLmlvX3BnX29mZnN0CT0gKChFUDkzWFhfQVBCX1ZJUlRfQkFTRSkgPj4gMTgpICYgMHhmZmZjLAorCS5ib290X3BhcmFtcwk9IEVQOTNYWF9TRENFM19QSFlTX0JBU0VfQVNZTkMgKyAweDEwMCwKKwkubWFwX2lvCQk9IGVwOTN4eF9tYXBfaW8sCisJLmluaXRfaXJxCT0gZXA5M3h4X2luaXRfaXJxLAorCS50aW1lcgkJPSAmZXA5M3h4X3RpbWVyLAorCS5pbml0X21hY2hpbmUJPSBtaWNybzlfaW5pdF9tYWNoaW5lLAorTUFDSElORV9FTkQKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2luY2x1ZGUvbWFjaC9tZW1vcnkuaCBiL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9pbmNsdWRlL21hY2gvbWVtb3J5LmgKaW5kZXggMmIyZTdhMS4uNDg5MTgyOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2luY2x1ZGUvbWFjaC9tZW1vcnkuaAorKysgYi9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvaW5jbHVkZS9tYWNoL21lbW9yeS5oCkBAIC0yOCw1ICsyOCw2IEBACiAjZGVmaW5lIEJVU19PRkZTRVQJVUwoMHg4MDAwMDAwMCkKICNkZWZpbmUgX192aXJ0X3RvX2J1cyh4KQkoKHgpIC0gUEFHRV9PRkZTRVQgKyBCVVNfT0ZGU0VUKQogI2RlZmluZSBfX2J1c190b192aXJ0KHgpCSgoeCkgLSBCVVNfT0ZGU0VUICsgUEFHRV9PRkZTRVQpCisjZGVmaW5lIF9fcGZuX3RvX2J1cyh4KQkJKCgoeCkgPDwgUEFHRV9TSElGVCkgKyBCVVNfT0ZGU0VUKQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9pbnRlZ3JhdG9yX2NwLmMgYi9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvaW50ZWdyYXRvcl9jcC5jCmluZGV4IDJhMzE4ZWIuLjNmMzUyOTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9pbnRlZ3JhdG9yX2NwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2ludGVncmF0b3JfY3AuYwpAQCAtMTksNiArMTksNyBAQAogI2luY2x1ZGUgPGxpbnV4L2FtYmEvYnVzLmg+CiAjaW5jbHVkZSA8bGludXgvYW1iYS9rbWkuaD4KICNpbmNsdWRlIDxsaW51eC9hbWJhL2NsY2QuaD4KKyNpbmNsdWRlIDxsaW51eC9hbWJhL21tY2kuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogCiAjaW5jbHVkZSA8YXNtL2Nsa2Rldi5oPgpAQCAtMzUsNyArMzYsNiBAQAogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KICNpbmNsdWRlIDxhc20vbWFjaC9mbGFzaC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL21tYy5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KIApAQCAtNDAwLDcgKzQwMCw3IEBACiAJcmV0dXJuIHN0YXR1cyAmIDg7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgbW1jX3BsYXRmb3JtX2RhdGEgbW1jX2RhdGEgPSB7CitzdGF0aWMgc3RydWN0IG1tY2lfcGxhdGZvcm1fZGF0YSBtbWNfZGF0YSA9IHsKIAkub2NyX21hc2sJPSBNTUNfVkREXzMyXzMzfE1NQ19WRERfMzNfMzQsCiAJLnN0YXR1cwkJPSBtbWNfc3RhdHVzLAogCS5ncGlvX3dwCT0gLTEsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvcGNpX3YzLmMgYi9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvcGNpX3YzLmMKaW5kZXggZjFkNzJiMi4uMTQ4ZDI1ZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL3BjaV92My5jCisrKyBiL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9wY2lfdjMuYwpAQCAtMzEsNiArMzEsNyBAQAogCiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vc2lnbmFsLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL3BjaS5oPgogI2luY2x1ZGUgPGFzbS9pcnFfcmVncy5oPgpAQCAtNDg2LDcgKzQ4Nyw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RydWN0IHBjaV9idXMgKnBjaV92M19zY2FuX2J1cyhpbnQgbnIsIHN0cnVjdCBwY2lfc3lzX2RhdGEgKnN5cykKK3N0cnVjdCBwY2lfYnVzICogX19pbml0IHBjaV92M19zY2FuX2J1cyhpbnQgbnIsIHN0cnVjdCBwY2lfc3lzX2RhdGEgKnN5cykKIHsKIAlyZXR1cm4gcGNpX3NjYW5fYnVzKHN5cy0+YnVzbnIsICZwY2lfdjNfb3BzLCBzeXMpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pb3AzMngvaW5jbHVkZS9tYWNoL2lvcDMyeC5oIGIvYXJjaC9hcm0vbWFjaC1pb3AzMngvaW5jbHVkZS9tYWNoL2lvcDMyeC5oCmluZGV4IGFiZDllYjQuLjk0MWYzNjMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW9wMzJ4L2luY2x1ZGUvbWFjaC9pb3AzMnguaAorKysgYi9hcmNoL2FybS9tYWNoLWlvcDMyeC9pbmNsdWRlL21hY2gvaW9wMzJ4LmgKQEAgLTMxLDcgKzMxLDUgQEAKICNkZWZpbmUgSU9QMzJYX01BWF9SQU1fU0laRSAgICAgICAgICAgIDB4NDAwMDAwMDBVTAogI2RlZmluZSBJT1AzWFhfTUFYX1JBTV9TSVpFICAgICAgICAgICAgSU9QMzJYX01BWF9SQU1fU0laRQogI2RlZmluZSBJT1AzWFhfUENJX0xPV0VSX01FTV9CQSAgICAgICAgMHg4MDAwMDAwMAotI2RlZmluZSBJT1AzMlhfUENJX01FTV9XSU5ET1dfU0laRSAgICAgMHgwNDAwMDAwMAotI2RlZmluZSBJT1AzWFhfUENJX01FTV9XSU5ET1dfU0laRSAgICAgSU9QMzJYX1BDSV9NRU1fV0lORE9XX1NJWkUKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlvcDMzeC9pbmNsdWRlL21hY2gvaW9wMzN4LmggYi9hcmNoL2FybS9tYWNoLWlvcDMzeC9pbmNsdWRlL21hY2gvaW9wMzN4LmgKaW5kZXggMjQ1NjczMS4uYTg5YzBhMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pb3AzM3gvaW5jbHVkZS9tYWNoL2lvcDMzeC5oCisrKyBiL2FyY2gvYXJtL21hY2gtaW9wMzN4L2luY2x1ZGUvbWFjaC9pb3AzM3guaApAQCAtMzYsOCArMzYsNiBAQAogI2RlZmluZSBJT1AzM1hfTUFYX1JBTV9TSVpFCQkweDgwMDAwMDAwVUwKICNkZWZpbmUgSU9QM1hYX01BWF9SQU1fU0laRQkJSU9QMzNYX01BWF9SQU1fU0laRQogI2RlZmluZSBJT1AzWFhfUENJX0xPV0VSX01FTV9CQQkoUEhZU19PRkZTRVQgKyBJT1AzM1hfTUFYX1JBTV9TSVpFKQotI2RlZmluZSBJT1AzM1hfUENJX01FTV9XSU5ET1dfU0laRQkweDA4MDAwMDAwCi0jZGVmaW5lIElPUDNYWF9QQ0lfTUVNX1dJTkRPV19TSVpFCUlPUDMzWF9QQ0lfTUVNX1dJTkRPV19TSVpFCiAKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14Mi9jbG9ja19pbXgyNy5jIGIvYXJjaC9hcm0vbWFjaC1teDIvY2xvY2tfaW14MjcuYwppbmRleCA0MDg5OTUxLi5mZjVlMzMyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14Mi9jbG9ja19pbXgyNy5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXgyL2Nsb2NrX2lteDI3LmMKQEAgLTYzOCw5ICs2MzgsOSBAQAogCV9SRUdJU1RFUl9DTE9DSygibXhjLW1tYy4wIiwgTlVMTCwgc2RoYzFfY2xrKQogCV9SRUdJU1RFUl9DTE9DSygibXhjLW1tYy4xIiwgTlVMTCwgc2RoYzJfY2xrKQogCV9SRUdJU1RFUl9DTE9DSygibXhjLW1tYy4yIiwgTlVMTCwgc2RoYzNfY2xrKQotCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAiY3NwaTEiLCBjc3BpMV9jbGspCi0JX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJjc3BpMiIsIGNzcGkyX2NsaykKLQlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImNzcGkzIiwgY3NwaTNfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygic3BpX2lteC4wIiwgTlVMTCwgY3NwaTFfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygic3BpX2lteC4xIiwgTlVMTCwgY3NwaTJfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygic3BpX2lteC4yIiwgTlVMTCwgY3NwaTNfY2xrKQogCV9SRUdJU1RFUl9DTE9DSygiaW14LWZiLjAiLCBOVUxMLCBsY2RjX2NsaykKIAlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImNzaSIsIGNzaV9jbGspCiAJX1JFR0lTVEVSX0NMT0NLKCJmc2wtdXNiMi11ZGMiLCAidXNiIiwgdXNiX2NsaykKQEAgLTY2NSw3ICs2NjUsNyBAQAogCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAic2FoYXJhMiIsIHNhaGFyYTJfY2xrKQogCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAiYXRhIiwgYXRhX2NsaykKIAlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgIm1zdGljayIsIG1zdGlja19jbGspCi0JX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJ3ZG9nIiwgd2RvZ19jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJpbXgtd2R0LjAiLCBOVUxMLCB3ZG9nX2NsaykKIAlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImdwaW8iLCBncGlvX2NsaykKIAlfUkVHSVNURVJfQ0xPQ0soImlteC1pMmMuMCIsIE5VTEwsIGkyYzFfY2xrKQogCV9SRUdJU1RFUl9DTE9DSygiaW14LWkyYy4xIiwgTlVMTCwgaTJjMl9jbGspCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14Mi9wY20wMzguYyBiL2FyY2gvYXJtL21hY2gtbXgyL3BjbTAzOC5jCmluZGV4IGVlNjVkZGEuLjkwNmQ1OWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgyL3BjbTAzOC5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXgyL3BjbTAzOC5jCkBAIC0yMyw2ICsyMywxMCBAQAogI2luY2x1ZGUgPGxpbnV4L210ZC9wbGF0LXJhbS5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL21hY2hpbmUuaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvbWMxMzc4My5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KIAogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgpAQCAtMzUsNiArMzksNyBAQAogI2luY2x1ZGUgPG1hY2gvaW9tdXguaD4KICNpbmNsdWRlIDxtYWNoL2lteC11YXJ0Lmg+CiAjaW5jbHVkZSA8bWFjaC9teGNfbmFuZC5oPgorI2luY2x1ZGUgPG1hY2gvc3BpLmg+CiAKICNpbmNsdWRlICJkZXZpY2VzLmgiCiAKQEAgLTc4LDggKzgzLDYgQEAKIAlQQzZfUEZfSTJDMl9TQ0wsCiAJLyogU1BJMSAqLwogCVBEMjVfUEZfQ1NQSTFfUkRZLAotCVBEMjdfUEZfQ1NQSTFfU1MxLAotCVBEMjhfUEZfQ1NQSTFfU1MwLAogCVBEMjlfUEZfQ1NQSTFfU0NMSywKIAlQRDMwX1BGX0NTUEkxX01JU08sCiAJUEQzMV9QRl9DU1BJMV9NT1NJLApAQCAtMTk2LDYgKzE5OSw4NiBAQAogCX0KIH07CiAKK3N0YXRpYyBpbnQgcGNtMDM4X3NwaV9jc1tdID0ge0dQSU9fUE9SVEQgKyAyOH07CisKK3N0YXRpYyBzdHJ1Y3Qgc3BpX2lteF9tYXN0ZXIgcGNtMDM4X3NwaV8wX2RhdGEgPSB7CisJLmNoaXBzZWxlY3QgPSBwY20wMzhfc3BpX2NzLAorCS5udW1fY2hpcHNlbGVjdCA9IEFSUkFZX1NJWkUocGNtMDM4X3NwaV9jcyksCit9OworCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgc2RoYzFfY29uc3VtZXJzW10gPSB7CisJeworCQkuZGV2CT0gJm14Y19zZGhjX2RldmljZTEuZGV2LAorCQkuc3VwcGx5CT0gInNkaGNfdmNjIiwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIHNkaGMxX2RhdGEgPSB7CisJLmNvbnN0cmFpbnRzID0geworCQkubWluX3VWID0gMzAwMDAwMCwKKwkJLm1heF91ViA9IDM0MDAwMDAsCisJCS52YWxpZF9vcHNfbWFzayA9IFJFR1VMQVRPUl9DSEFOR0VfVk9MVEFHRSB8CisJCQlSRUdVTEFUT1JfQ0hBTkdFX01PREUgfCBSRUdVTEFUT1JfQ0hBTkdFX1NUQVRVUywKKwkJLnZhbGlkX21vZGVzX21hc2sgPSBSRUdVTEFUT1JfTU9ERV9OT1JNQUwgfAorCQkJUkVHVUxBVE9SX01PREVfRkFTVCwKKwkJLmFsd2F5c19vbiA9IDAsCisJCS5ib290X29uID0gMCwKKwl9LAorCS5udW1fY29uc3VtZXJfc3VwcGxpZXMgPSBBUlJBWV9TSVpFKHNkaGMxX2NvbnN1bWVycyksCisJLmNvbnN1bWVyX3N1cHBsaWVzID0gc2RoYzFfY29uc3VtZXJzLAorfTsKKworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfY29uc3VtZXJfc3VwcGx5IGNhbV9jb25zdW1lcnNbXSA9IHsKKwl7CisJCS5kZXYJPSBOVUxMLAorCQkuc3VwcGx5CT0gImlteF9jYW1fdmNjIiwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIGNhbV9kYXRhID0geworCS5jb25zdHJhaW50cyA9IHsKKwkJLm1pbl91ViA9IDMwMDAwMDAsCisJCS5tYXhfdVYgPSAzNDAwMDAwLAorCQkudmFsaWRfb3BzX21hc2sgPSBSRUdVTEFUT1JfQ0hBTkdFX1ZPTFRBR0UgfAorCQkJUkVHVUxBVE9SX0NIQU5HRV9NT0RFIHwgUkVHVUxBVE9SX0NIQU5HRV9TVEFUVVMsCisJCS52YWxpZF9tb2Rlc19tYXNrID0gUkVHVUxBVE9SX01PREVfTk9STUFMIHwKKwkJCVJFR1VMQVRPUl9NT0RFX0ZBU1QsCisJCS5hbHdheXNfb24gPSAwLAorCQkuYm9vdF9vbiA9IDAsCisJfSwKKwkubnVtX2NvbnN1bWVyX3N1cHBsaWVzID0gQVJSQVlfU0laRShjYW1fY29uc3VtZXJzKSwKKwkuY29uc3VtZXJfc3VwcGxpZXMgPSBjYW1fY29uc3VtZXJzLAorfTsKKworc3RydWN0IG1jMTM3ODNfcmVndWxhdG9yX2luaXRfZGF0YSBwY20wMzhfcmVndWxhdG9yc1tdID0geworCXsKKwkJLmlkID0gTUMxMzc4M19SRUdVX1ZDQU0sCisJCS5pbml0X2RhdGEgPSAmY2FtX2RhdGEsCisJfSwgeworCQkuaWQgPSBNQzEzNzgzX1JFR1VfVk1NQzEsCisJCS5pbml0X2RhdGEgPSAmc2RoYzFfZGF0YSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBtYzEzNzgzX3BsYXRmb3JtX2RhdGEgcGNtMDM4X3BtaWMgPSB7CisJLnJlZ3VsYXRvcnMgPSBwY20wMzhfcmVndWxhdG9ycywKKwkubnVtX3JlZ3VsYXRvcnMgPSBBUlJBWV9TSVpFKHBjbTAzOF9yZWd1bGF0b3JzKSwKKwkuZmxhZ3MgPSBNQzEzNzgzX1VTRV9BREMgfCBNQzEzNzgzX1VTRV9SRUdVTEFUT1IgfAorCQkgTUMxMzc4M19VU0VfVE9VQ0hTQ1JFRU4sCit9OworCitzdGF0aWMgc3RydWN0IHNwaV9ib2FyZF9pbmZvIHBjbTAzOF9zcGlfYm9hcmRfaW5mb1tdIF9faW5pdGRhdGEgPSB7CisJeworCQkubW9kYWxpYXMgPSAibWMxMzc4MyIsCisJCS5pcnEgPSBJUlFfR1BJT0IoMjMpLAorCQkubWF4X3NwZWVkX2h6ID0gMzAwMDAwLAorCQkuYnVzX251bSA9IDAsCisJCS5jaGlwX3NlbGVjdCA9IDAsCisJCS5wbGF0Zm9ybV9kYXRhID0gJnBjbTAzOF9wbWljLAorCQkubW9kZSA9IFNQSV9DU19ISUdILAorCX0KK307CisKIHN0YXRpYyB2b2lkIF9faW5pdCBwY20wMzhfaW5pdCh2b2lkKQogewogCW14Y19ncGlvX3NldHVwX211bHRpcGxlX3BpbnMocGNtMDM4X3BpbnMsIEFSUkFZX1NJWkUocGNtMDM4X3BpbnMpLApAQCAtMjE5LDYgKzMwMiwxNSBAQAogCS8qIFBFMTggZm9yIHVzZXItTEVEIEQ0MCAqLwogCW14Y19ncGlvX21vZGUoR1BJT19QT1JURSB8IDE4IHwgR1BJT19HUElPIHwgR1BJT19PVVQpOwogCisJbXhjX2dwaW9fbW9kZShHUElPX1BPUlREIHwgMjggfCBHUElPX0dQSU8gfCBHUElPX09VVCk7CisKKwkvKiBNQzEzNzgzIElSUSAqLworCW14Y19ncGlvX21vZGUoR1BJT19QT1JUQiB8IDIzIHwgR1BJT19HUElPIHwgR1BJT19JTik7CisKKwlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfc3BpX2RldmljZTAsICZwY20wMzhfc3BpXzBfZGF0YSk7CisJc3BpX3JlZ2lzdGVyX2JvYXJkX2luZm8ocGNtMDM4X3NwaV9ib2FyZF9pbmZvLAorCQkJCUFSUkFZX1NJWkUocGNtMDM4X3NwaV9ib2FyZF9pbmZvKSk7CisKIAlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhwbGF0Zm9ybV9kZXZpY2VzLCBBUlJBWV9TSVpFKHBsYXRmb3JtX2RldmljZXMpKTsKIAogI2lmZGVmIENPTkZJR19NQUNIX1BDTTk3MF9CQVNFQk9BUkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgyL3BjbTk3MC1iYXNlYm9hcmQuYyBiL2FyY2gvYXJtL21hY2gtbXgyL3BjbTk3MC1iYXNlYm9hcmQuYwppbmRleCBjMjYxZjU5Li4zY2I3ZjQ1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14Mi9wY205NzAtYmFzZWJvYXJkLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teDIvcGNtOTcwLWJhc2Vib2FyZC5jCkBAIC0zOSw3ICszOSw2IEBACiAJUEI3X1BGX1NEMl9EMywKIAlQQjhfUEZfU0QyX0NNRCwKIAlQQjlfUEZfU0QyX0NMSywKLQlHUElPX1BPUlRDIHwgMjggfCBHUElPX0dQSU8gfCBHUElPX0lOLCAvKiBjYXJkIGRldGVjdCAqLwogCS8qIGRpc3BsYXkgKi8KIAlQQTVfUEZfTFNDTEssCiAJUEE2X1BGX0xEMCwKQEAgLTIyOCw2ICsyMjcsNyBAQAogCQkJIlBDTTk3MCIpOwogCiAJbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX2ZiX2RldmljZSwgJnBjbTAzOF9mYl9kYXRhKTsKKwlteGNfZ3Bpb19tb2RlKEdQSU9fUE9SVEMgfCAyOCB8IEdQSU9fR1BJTyB8IEdQSU9fSU4pOwogCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y19zZGhjX2RldmljZTEsICZzZGhjX3BkYXRhKTsKIAlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnBjbTk3MF9zamExMDAwKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgyNS9kZXZpY2VzLmMgYi9hcmNoL2FybS9tYWNoLW14MjUvZGV2aWNlcy5jCmluZGV4IGViMTJkZTEuLjYzNTExZGUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgyNS9kZXZpY2VzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teDI1L2RldmljZXMuYwpAQCAtMSw0ICsxLDIzIEBACisvKgorICogQ29weXJpZ2h0IDIwMDkgU2FzY2hhIEhhdWVyLCA8a2VybmVsQHBlbmd1dHJvbml4LmRlPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgorICogb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAjaW5jbHVkZSA8bWFjaC9teDI1Lmg+CiAjaW5jbHVkZSA8bWFjaC9pcnFzLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14MjUvbXgyNXBkay5jIGIvYXJjaC9hcm0vbWFjaC1teDI1L214MjVwZGsuYwppbmRleCA5MmFhNGZkLi5kMjNhZTU3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14MjUvbXgyNXBkay5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXgyNS9teDI1cGRrLmMKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA5IFNhc2NoYSBIYXVlciwgPGtlcm5lbEBwZW5ndXRyb25peC5kZT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKKyAqIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BICAwMjExMC0xMzAxLCBVU0EuCisgKi8KKwogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgpAQCAtMjMsMTkgKzQxLDEyIEBACiAJLmZsYWdzID0gSU1YVUFSVF9IQVZFX1JUU0NUUywKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgbXhjX25hbmRfcGxhdGZvcm1fZGF0YSBuYW5kX2JvYXJkX2luZm8gPSB7Ci0JLndpZHRoID0gMSwKLQkuaHdfZWNjID0gMSwKLX07Ci0KIHN0YXRpYyB2b2lkIF9faW5pdCBteDI1cGRrX2luaXQodm9pZCkKIHsKIAlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfdWFydF9kZXZpY2UwLCAmdWFydF9wZGF0YSk7CiAJbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3VzYmgyLCBOVUxMKTsKLQlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfbmFuZF9kZXZpY2UsICZuYW5kX2JvYXJkX2luZm8pOwogfQogCi0KIHN0YXRpYyB2b2lkIF9faW5pdCBteDI1cGRrX3RpbWVyX2luaXQodm9pZCkKIHsKIAlteDI1X2Nsb2Nrc19pbml0KDI2MDAwMDAwKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgzL2Nsb2NrLWlteDM1LmMgYi9hcmNoL2FybS9tYWNoLW14My9jbG9jay1pbXgzNS5jCmluZGV4IGZlNWM0MjEuLmM1OTUyNjAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgzL2Nsb2NrLWlteDM1LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teDMvY2xvY2staW14MzUuYwpAQCAtNDQzLDcgKzQ0Myw3IEBACiAJX1JFR0lTVEVSX0NMT0NLKCJteGMtZWhjaS4xIiwgInVzYiIsIHVzYm90Z19jbGspCiAJX1JFR0lTVEVSX0NMT0NLKCJteGMtZWhjaS4yIiwgInVzYiIsIHVzYm90Z19jbGspCiAJX1JFR0lTVEVSX0NMT0NLKCJmc2wtdXNiMi11ZGMiLCAidXNiIiwgdXNib3RnX2NsaykKLQlfUkVHSVNURVJfQ0xPQ0soIm14Y193ZHQuMCIsIE5VTEwsIHdkb2dfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygiaW14LXdkdC4wIiwgTlVMTCwgd2RvZ19jbGspCiAJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJtYXgiLCBtYXhfY2xrKQogCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAiYWRtdXgiLCBhZG11eF9jbGspCiAJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJjc2kiLCBjc2lfY2xrKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDMvY2xvY2suYyBiL2FyY2gvYXJtL21hY2gtbXgzL2Nsb2NrLmMKaW5kZXggMDZiZDYxOC4uYjJhM2JjZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDMvY2xvY2suYworKysgYi9hcmNoL2FybS9tYWNoLW14My9jbG9jay5jCkBAIC01MzAsNyArNTMwLDcgQEAKIAlfUkVHSVNURVJfQ0xPQ0soInNwaV9pbXguMiIsIE5VTEwsIGNzcGkzX2NsaykKIAlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImdwdCIsIGdwdF9jbGspCiAJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJwd20iLCBwd21fY2xrKQotCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAid2RvZyIsIHdkb2dfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygiaW14LXdkdC4wIiwgTlVMTCwgd2RvZ19jbGspCiAJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJydGMiLCBydGNfY2xrKQogCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAiZXBpdCIsIGVwaXQxX2NsaykKIAlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImVwaXQiLCBlcGl0Ml9jbGspCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14My9kZXZpY2VzLmMgYi9hcmNoL2FybS9tYWNoLW14My9kZXZpY2VzLmMKaW5kZXggOGE1NzdmMy4uZTZhYmUxOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDMvZGV2aWNlcy5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXgzL2RldmljZXMuYwpAQCAtNDU5LDcgKzQ1OSw3IEBACiAgKiBTUEkgbWFzdGVyIGNvbnRyb2xsZXIKICAqIDMgY2hhbm5lbHMKICAqLwotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBpbXhfc3BpXzBfcmVzb3VyY2VzW10gPSB7CitzdGF0aWMgc3RydWN0IHJlc291cmNlIG14Y19zcGlfMF9yZXNvdXJjZXNbXSA9IHsKIAl7CiAJICAgICAgIC5zdGFydCA9IENTUEkxX0JBU0VfQUREUiwKIAkgICAgICAgLmVuZCA9IENTUEkxX0JBU0VfQUREUiArIFNaXzRLIC0gMSwKQEAgLTQ3MSw3ICs0NzEsNyBAQAogCX0sCiB9OwogCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGlteF9zcGlfMV9yZXNvdXJjZXNbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbXhjX3NwaV8xX3Jlc291cmNlc1tdID0gewogCXsKIAkJLnN0YXJ0ID0gQ1NQSTJfQkFTRV9BRERSLAogCQkuZW5kID0gQ1NQSTJfQkFTRV9BRERSICsgU1pfNEsgLSAxLApAQCAtNDgzLDcgKzQ4Myw3IEBACiAJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaW14X3NwaV8yX3Jlc291cmNlc1tdID0geworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBteGNfc3BpXzJfcmVzb3VyY2VzW10gPSB7CiAJewogCQkuc3RhcnQgPSBDU1BJM19CQVNFX0FERFIsCiAJCS5lbmQgPSBDU1BJM19CQVNFX0FERFIgKyBTWl80SyAtIDEsCkBAIC00OTUsMjUgKzQ5NSwyNSBAQAogCX0sCiB9OwogCi1zdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGlteF9zcGlfZGV2aWNlMCA9IHsKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX3NwaV9kZXZpY2UwID0gewogCS5uYW1lID0gInNwaV9pbXgiLAogCS5pZCA9IDAsCi0JLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKGlteF9zcGlfMF9yZXNvdXJjZXMpLAotCS5yZXNvdXJjZSA9IGlteF9zcGlfMF9yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKG14Y19zcGlfMF9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZSA9IG14Y19zcGlfMF9yZXNvdXJjZXMsCiB9OwogCi1zdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGlteF9zcGlfZGV2aWNlMSA9IHsKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX3NwaV9kZXZpY2UxID0gewogCS5uYW1lID0gInNwaV9pbXgiLAogCS5pZCA9IDEsCi0JLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKGlteF9zcGlfMV9yZXNvdXJjZXMpLAotCS5yZXNvdXJjZSA9IGlteF9zcGlfMV9yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKG14Y19zcGlfMV9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZSA9IG14Y19zcGlfMV9yZXNvdXJjZXMsCiB9OwogCi1zdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGlteF9zcGlfZGV2aWNlMiA9IHsKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX3NwaV9kZXZpY2UyID0gewogCS5uYW1lID0gInNwaV9pbXgiLAogCS5pZCA9IDIsCi0JLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKGlteF9zcGlfMl9yZXNvdXJjZXMpLAotCS5yZXNvdXJjZSA9IGlteF9zcGlfMl9yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKG14Y19zcGlfMl9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZSA9IG14Y19zcGlfMl9yZXNvdXJjZXMsCiB9OwogCiAjaWZkZWYgQ09ORklHX0FSQ0hfTVgzNQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDMvZGV2aWNlcy5oIGIvYXJjaC9hcm0vbWFjaC1teDMvZGV2aWNlcy5oCmluZGV4IDc5ZjJiZTQuLmFiODc0MTkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgzL2RldmljZXMuaAorKysgYi9hcmNoL2FybS9tYWNoLW14My9kZXZpY2VzLmgKQEAgLTIwLDcgKzIwLDcgQEAKIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y191c2JoMTsKIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y191c2JoMjsKIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19ybmdhX2RldmljZTsKLWV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGlteF9zcGlfZGV2aWNlMDsKLWV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGlteF9zcGlfZGV2aWNlMTsKLWV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGlteF9zcGlfZGV2aWNlMjsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19zcGlfZGV2aWNlMDsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19zcGlfZGV2aWNlMTsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19zcGlfZGV2aWNlMjsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDMvbW0uYyBiL2FyY2gvYXJtL21hY2gtbXgzL21tLmMKaW5kZXggYWQ1YTExMi4uYmVkZjViOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDMvbW0uYworKysgYi9hcmNoL2FybS9tYWNoLW14My9tbS5jCkBAIC04MSw2ICs4MSw3IEBACiAJaW90YWJsZV9pbml0KG14Y19pb19kZXNjLCBBUlJBWV9TSVpFKG14Y19pb19kZXNjKSk7CiB9CiAKKyNpZmRlZiBDT05GSUdfQVJDSF9NWDM1CiB2b2lkIF9faW5pdCBteDM1X21hcF9pbyh2b2lkKQogewogCW14Y19zZXRfY3B1X3R5cGUoTVhDX0NQVV9NWDM1KTsKQEAgLTg5LDYgKzkwLDcgQEAKIAogCWlvdGFibGVfaW5pdChteGNfaW9fZGVzYywgQVJSQVlfU0laRShteGNfaW9fZGVzYykpOwogfQorI2VuZGlmCiAKIHZvaWQgX19pbml0IG14MzFfaW5pdF9pcnEodm9pZCkKIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbnM5eHh4L2Nsb2NrLmMgYi9hcmNoL2FybS9tYWNoLW5zOXh4eC9jbG9jay5jCmluZGV4IDQ0ZWQyMGQuLmNmODFjYmMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbnM5eHh4L2Nsb2NrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1uczl4eHgvY2xvY2suYwpAQCAtMTk1LDcgKzE5NSw3IEBACiAJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIGNsa19kZWJ1Z2ZzX3Nob3csIE5VTEwpOwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBjbGtfZGVidWdmc19vcGVyYXRpb25zID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgY2xrX2RlYnVnZnNfb3BlcmF0aW9ucyA9IHsKIAkub3BlbiA9IGNsa19kZWJ1Z2ZzX29wZW4sCiAJLnJlYWQgPSBzZXFfcmVhZCwKIAkubGxzZWVrID0gc2VxX2xzZWVrLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1hbXMtZGVsdGEuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtYW1zLWRlbHRhLmMKaW5kZXggNDI5MjBmOS4uOGFkNWNjMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1hbXMtZGVsdGEuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWFtcy1kZWx0YS5jCkBAIC0yMTksNiArMjE5LDEwIEBACiAKIHN0YXRpYyB2b2lkIF9faW5pdCBhbXNfZGVsdGFfaW5pdCh2b2lkKQogeworCS8qIG11eCBwaW5zIGZvciB1YXJ0cyAqLworCW9tYXBfY2ZnX3JlZyhVQVJUMV9UWCk7CisJb21hcF9jZmdfcmVnKFVBUlQxX1JUUyk7CisKIAlpb3RhYmxlX2luaXQoYW1zX2RlbHRhX2lvX2Rlc2MsIEFSUkFZX1NJWkUoYW1zX2RlbHRhX2lvX2Rlc2MpKTsKIAogCW9tYXBfYm9hcmRfY29uZmlnID0gYW1zX2RlbHRhX2NvbmZpZzsKQEAgLTIzMSw2ICsyMzUsOCBAQAogCiAJb21hcF91c2JfaW5pdCgmYW1zX2RlbHRhX3VzYl9jb25maWcpOwogCXBsYXRmb3JtX2FkZF9kZXZpY2VzKGFtc19kZWx0YV9kZXZpY2VzLCBBUlJBWV9TSVpFKGFtc19kZWx0YV9kZXZpY2VzKSk7CisKKwlvbWFwX3dyaXRldyhvbWFwX3JlYWR3KEFSTV9SU1RDVDEpIHwgMHgwMDA0LCBBUk1fUlNUQ1QxKTsKIH0KIAogc3RhdGljIHN0cnVjdCBwbGF0X3NlcmlhbDgyNTBfcG9ydCBhbXNfZGVsdGFfbW9kZW1fcG9ydHNbXSA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtZ2VuZXJpYy5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1nZW5lcmljLmMKaW5kZXggZmI0NzIzOS4uNmM4YTQxZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1nZW5lcmljLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1nZW5lcmljLmMKQEAgLTY0LDYgKzY0LDE0IEBACiB7CiAjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDE1WFgKIAlpZiAoY3B1X2lzX29tYXAxNXh4KCkpIHsKKwkJLyogbXV4IHBpbnMgZm9yIHVhcnRzICovCisJCW9tYXBfY2ZnX3JlZyhVQVJUMV9UWCk7CisJCW9tYXBfY2ZnX3JlZyhVQVJUMV9SVFMpOworCQlvbWFwX2NmZ19yZWcoVUFSVDJfVFgpOworCQlvbWFwX2NmZ19yZWcoVUFSVDJfUlRTKTsKKwkJb21hcF9jZmdfcmVnKFVBUlQzX1RYKTsKKwkJb21hcF9jZmdfcmVnKFVBUlQzX1JYKTsKKwogCQlvbWFwX3VzYl9pbml0KCZnZW5lcmljMTUxMF91c2JfY29uZmlnKTsKIAl9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtaW5ub3ZhdG9yLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWlubm92YXRvci5jCmluZGV4IGNjMmFiYmIuLmNkNmMzOTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtaW5ub3ZhdG9yLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1pbm5vdmF0b3IuYwpAQCAtMzc2LDYgKzM3NiwyNiBAQAogewogI2lmZGVmIENPTkZJR19BUkNIX09NQVAxNVhYCiAJaWYgKGNwdV9pc19vbWFwMTUxMCgpKSB7CisJCXVuc2lnbmVkIGNoYXIgcmVnOworCisJCS8qIG11eCBwaW5zIGZvciB1YXJ0cyAqLworCQlvbWFwX2NmZ19yZWcoVUFSVDFfVFgpOworCQlvbWFwX2NmZ19yZWcoVUFSVDFfUlRTKTsKKwkJb21hcF9jZmdfcmVnKFVBUlQyX1RYKTsKKwkJb21hcF9jZmdfcmVnKFVBUlQyX1JUUyk7CisJCW9tYXBfY2ZnX3JlZyhVQVJUM19UWCk7CisJCW9tYXBfY2ZnX3JlZyhVQVJUM19SWCk7CisKKwkJcmVnID0gZnBnYV9yZWFkKE9NQVAxNTEwX0ZQR0FfUE9XRVIpOworCQlyZWcgfD0gT01BUDE1MTBfRlBHQV9QQ1JfQ09NMV9FTjsKKwkJZnBnYV93cml0ZShyZWcsIE9NQVAxNTEwX0ZQR0FfUE9XRVIpOworCQl1ZGVsYXkoMTApOworCisJCXJlZyA9IGZwZ2FfcmVhZChPTUFQMTUxMF9GUEdBX1BPV0VSKTsKKwkJcmVnIHw9IE9NQVAxNTEwX0ZQR0FfUENSX0NPTTJfRU47CisJCWZwZ2Ffd3JpdGUocmVnLCBPTUFQMTUxMF9GUEdBX1BPV0VSKTsKKwkJdWRlbGF5KDEwKTsKKwogCQlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhpbm5vdmF0b3IxNTEwX2RldmljZXMsIEFSUkFZX1NJWkUoaW5ub3ZhdG9yMTUxMF9kZXZpY2VzKSk7CiAJCXNwaV9yZWdpc3Rlcl9ib2FyZF9pbmZvKGlubm92YXRvcjE1MTBfYm9hcmRpbmZvLAogCQkJCUFSUkFZX1NJWkUoaW5ub3ZhdG9yMTUxMF9ib2FyZGluZm8pKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtcGFsbXRlLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXBhbG10ZS5jCmluZGV4IDkwZGQwNDMuLjRkZTI1ODQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtcGFsbXRlLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1wYWxtdGUuYwpAQCAtMzQyLDYgKzM0MiwxNCBAQAogCiBzdGF0aWMgdm9pZCBfX2luaXQgb21hcF9wYWxtdGVfaW5pdCh2b2lkKQogeworCS8qIG11eCBwaW5zIGZvciB1YXJ0cyAqLworCW9tYXBfY2ZnX3JlZyhVQVJUMV9UWCk7CisJb21hcF9jZmdfcmVnKFVBUlQxX1JUUyk7CisJb21hcF9jZmdfcmVnKFVBUlQyX1RYKTsKKwlvbWFwX2NmZ19yZWcoVUFSVDJfUlRTKTsKKwlvbWFwX2NmZ19yZWcoVUFSVDNfVFgpOworCW9tYXBfY2ZnX3JlZyhVQVJUM19SWCk7CisKIAlvbWFwX2JvYXJkX2NvbmZpZyA9IHBhbG10ZV9jb25maWc7CiAJb21hcF9ib2FyZF9jb25maWdfc2l6ZSA9IEFSUkFZX1NJWkUocGFsbXRlX2NvbmZpZyk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtcGFsbXR0LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXBhbG10dC5jCmluZGV4IDgyNTYxMzkuLmQ5NzJjZjkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtcGFsbXR0LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1wYWxtdHQuYwpAQCAtMjg5LDYgKzI4OSwxNCBAQAogCiBzdGF0aWMgdm9pZCBfX2luaXQgb21hcF9wYWxtdHRfaW5pdCh2b2lkKQogeworCS8qIG11eCBwaW5zIGZvciB1YXJ0cyAqLworCW9tYXBfY2ZnX3JlZyhVQVJUMV9UWCk7CisJb21hcF9jZmdfcmVnKFVBUlQxX1JUUyk7CisJb21hcF9jZmdfcmVnKFVBUlQyX1RYKTsKKwlvbWFwX2NmZ19yZWcoVUFSVDJfUlRTKTsKKwlvbWFwX2NmZ19yZWcoVUFSVDNfVFgpOworCW9tYXBfY2ZnX3JlZyhVQVJUM19SWCk7CisKIAlvbWFwX21wdV93ZHRfbW9kZSgwKTsKIAogCW9tYXBfYm9hcmRfY29uZmlnID0gcGFsbXR0X2NvbmZpZzsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtcGFsbXo3MS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1wYWxtejcxLmMKaW5kZXggODFiNmJkZS4uOTg2YmQ0ZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1wYWxtejcxLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1wYWxtejcxLmMKQEAgLTMwNyw2ICszMDcsMTQgQEAKIHN0YXRpYyB2b2lkIF9faW5pdAogb21hcF9wYWxtejcxX2luaXQodm9pZCkKIHsKKwkvKiBtdXggcGlucyBmb3IgdWFydHMgKi8KKwlvbWFwX2NmZ19yZWcoVUFSVDFfVFgpOworCW9tYXBfY2ZnX3JlZyhVQVJUMV9SVFMpOworCW9tYXBfY2ZnX3JlZyhVQVJUMl9UWCk7CisJb21hcF9jZmdfcmVnKFVBUlQyX1JUUyk7CisJb21hcF9jZmdfcmVnKFVBUlQzX1RYKTsKKwlvbWFwX2NmZ19yZWcoVUFSVDNfUlgpOworCiAJcGFsbXo3MV9ncGlvX3NldHVwKDEpOwogCW9tYXBfbXB1X3dkdF9tb2RlKDApOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXN4MS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1zeDEuYwppbmRleCAwMmM4NWNhLi4wNTZhZTY0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXN4MS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtc3gxLmMKQEAgLTM3Nyw2ICszNzcsMTQgQEAKIAogc3RhdGljIHZvaWQgX19pbml0IG9tYXBfc3gxX2luaXQodm9pZCkKIHsKKwkvKiBtdXggcGlucyBmb3IgdWFydHMgKi8KKwlvbWFwX2NmZ19yZWcoVUFSVDFfVFgpOworCW9tYXBfY2ZnX3JlZyhVQVJUMV9SVFMpOworCW9tYXBfY2ZnX3JlZyhVQVJUMl9UWCk7CisJb21hcF9jZmdfcmVnKFVBUlQyX1JUUyk7CisJb21hcF9jZmdfcmVnKFVBUlQzX1RYKTsKKwlvbWFwX2NmZ19yZWcoVUFSVDNfUlgpOworCiAJcGxhdGZvcm1fYWRkX2RldmljZXMoc3gxX2RldmljZXMsIEFSUkFZX1NJWkUoc3gxX2RldmljZXMpKTsKIAogCW9tYXBfYm9hcmRfY29uZmlnID0gc3gxX2NvbmZpZzsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtdm9pY2VibHVlLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXZvaWNlYmx1ZS5jCmluZGV4IGMwNmU3YTUuLjA3YjA3NTIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtdm9pY2VibHVlLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC12b2ljZWJsdWUuYwpAQCAtMTUyLDYgKzE1MiwxNCBAQAogCiBzdGF0aWMgdm9pZCBfX2luaXQgdm9pY2VibHVlX2luaXQodm9pZCkKIHsKKwkvKiBtdXggcGlucyBmb3IgdWFydHMgKi8KKwlvbWFwX2NmZ19yZWcoVUFSVDFfVFgpOworCW9tYXBfY2ZnX3JlZyhVQVJUMV9SVFMpOworCW9tYXBfY2ZnX3JlZyhVQVJUMl9UWCk7CisJb21hcF9jZmdfcmVnKFVBUlQyX1JUUyk7CisJb21hcF9jZmdfcmVnKFVBUlQzX1RYKTsKKwlvbWFwX2NmZ19yZWcoVUFSVDNfUlgpOworCiAJLyogV2F0Y2hkb2cgKi8KIAlncGlvX3JlcXVlc3QoMCwgIldhdGNoZG9nIik7CiAJLyogc21jOTF4IHJlc2V0ICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2lkLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2lkLmMKaW5kZXggNGVmMjZmYS4uZTVkY2RmNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9pZC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvaWQuYwpAQCAtMzgsNyArMzgsNyBAQAogCXsgLmp0YWdfaWQgPSAweGI1NzQsIC5kaWVfcmV2ID0gMHgyLCAub21hcF9pZCA9IDB4MDMzMTAzMTUsIC50eXBlID0gMHgwMzEwMDAwMH0sCiAJeyAuanRhZ19pZCA9IDB4MzU1ZiwgLmRpZV9yZXYgPSAweDAsIC5vbWFwX2lkID0gMHgwMzMyMDAwMCwgLnR5cGUgPSAweDA3MzAwMTAwfSwKIAl7IC5qdGFnX2lkID0gMHhiNTVmLCAuZGllX3JldiA9IDB4MCwgLm9tYXBfaWQgPSAweDAzMzIwMDAwLCAudHlwZSA9IDB4MDczMDAzMDB9LAotCXsgLmp0YWdfaWQgPSAweGI1NWYsIC5kaWVfcmV2ID0gMHgwLCAub21hcF9pZCA9IDB4MDMzMjA1MDAsIC50eXBlID0gMHgwODUwMDAwMH0sCisJeyAuanRhZ19pZCA9IDB4YjYyYywgLmRpZV9yZXYgPSAweDEsIC5vbWFwX2lkID0gMHgwMzMyMDUwMCwgLnR5cGUgPSAweDA4NTAwMDAwfSwKIAl7IC5qdGFnX2lkID0gMHhiNDcwLCAuZGllX3JldiA9IDB4MCwgLm9tYXBfaWQgPSAweDAzMzEwMTAwLCAudHlwZSA9IDB4MTUxMDAwMDB9LAogCXsgLmp0YWdfaWQgPSAweGI1NzYsIC5kaWVfcmV2ID0gMHgwLCAub21hcF9pZCA9IDB4MDMzMjAwMDAsIC50eXBlID0gMHgxNjEwMDAwMH0sCiAJeyAuanRhZ19pZCA9IDB4YjU3NiwgLmRpZV9yZXYgPSAweDIsIC5vbWFwX2lkID0gMHgwMzMyMDEwMCwgLnR5cGUgPSAweDE2MTEwMDAwfSwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvc2VyaWFsLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL3NlcmlhbC5jCmluZGV4IGQ0OTZlNTAuLmQyMzk3OWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvc2VyaWFsLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9zZXJpYWwuYwpAQCAtMTMxLDggKzEzMSw2IEBACiAJfQogCiAJZm9yIChpID0gMDsgaSA8IE9NQVBfTUFYX05SX1BPUlRTOyBpKyspIHsKLQkJdW5zaWduZWQgY2hhciByZWc7Ci0KIAkJc3dpdGNoIChpKSB7CiAJCWNhc2UgMDoKIAkJCXVhcnQxX2NrID0gY2xrX2dldChOVUxMLCAidWFydDFfY2siKTsKQEAgLTE0MywxNiArMTQxLDYgQEAKIAkJCQlpZiAoY3B1X2lzX29tYXAxNXh4KCkpCiAJCQkJCWNsa19zZXRfcmF0ZSh1YXJ0MV9jaywgMTIwMDAwMDApOwogCQkJfQotCQkJaWYgKGNwdV9pc19vbWFwMTV4eCgpKSB7Ci0JCQkJb21hcF9jZmdfcmVnKFVBUlQxX1RYKTsKLQkJCQlvbWFwX2NmZ19yZWcoVUFSVDFfUlRTKTsKLQkJCQlpZiAobWFjaGluZV9pc19vbWFwX2lubm92YXRvcigpKSB7Ci0JCQkJCXJlZyA9IGZwZ2FfcmVhZChPTUFQMTUxMF9GUEdBX1BPV0VSKTsKLQkJCQkJcmVnIHw9IE9NQVAxNTEwX0ZQR0FfUENSX0NPTTFfRU47Ci0JCQkJCWZwZ2Ffd3JpdGUocmVnLCBPTUFQMTUxMF9GUEdBX1BPV0VSKTsKLQkJCQkJdWRlbGF5KDEwKTsKLQkJCQl9Ci0JCQl9CiAJCQlicmVhazsKIAkJY2FzZSAxOgogCQkJdWFydDJfY2sgPSBjbGtfZ2V0KE5VTEwsICJ1YXJ0Ml9jayIpOwpAQCAtMTY1LDE2ICsxNTMsNiBAQAogCQkJCWVsc2UKIAkJCQkJY2xrX3NldF9yYXRlKHVhcnQyX2NrLCA0ODAwMDAwMCk7CiAJCQl9Ci0JCQlpZiAoY3B1X2lzX29tYXAxNXh4KCkpIHsKLQkJCQlvbWFwX2NmZ19yZWcoVUFSVDJfVFgpOwotCQkJCW9tYXBfY2ZnX3JlZyhVQVJUMl9SVFMpOwotCQkJCWlmIChtYWNoaW5lX2lzX29tYXBfaW5ub3ZhdG9yKCkpIHsKLQkJCQkJcmVnID0gZnBnYV9yZWFkKE9NQVAxNTEwX0ZQR0FfUE9XRVIpOwotCQkJCQlyZWcgfD0gT01BUDE1MTBfRlBHQV9QQ1JfQ09NMl9FTjsKLQkJCQkJZnBnYV93cml0ZShyZWcsIE9NQVAxNTEwX0ZQR0FfUE9XRVIpOwotCQkJCQl1ZGVsYXkoMTApOwotCQkJCX0KLQkJCX0KIAkJCWJyZWFrOwogCQljYXNlIDI6CiAJCQl1YXJ0M19jayA9IGNsa19nZXQoTlVMTCwgInVhcnQzX2NrIik7CkBAIC0xODUsMTAgKzE2Myw2IEBACiAJCQkJaWYgKGNwdV9pc19vbWFwMTV4eCgpKQogCQkJCQljbGtfc2V0X3JhdGUodWFydDNfY2ssIDEyMDAwMDAwKTsKIAkJCX0KLQkJCWlmIChjcHVfaXNfb21hcDE1eHgoKSkgewotCQkJCW9tYXBfY2ZnX3JlZyhVQVJUM19UWCk7Ci0JCQkJb21hcF9jZmdfcmVnKFVBUlQzX1JYKTsKLQkJCX0KIAkJCWJyZWFrOwogCQl9CiAJCW9tYXBfc2VyaWFsX3Jlc2V0KCZzZXJpYWxfcGxhdGZvcm1fZGF0YVtpXSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL0tjb25maWcgYi9hcmNoL2FybS9tYWNoLW9tYXAyL0tjb25maWcKaW5kZXggNzViMWM3ZS4uYWFkMTk0ZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvS2NvbmZpZwpAQCAtNzMsOSArNzMsMjEgQEAKIAlib29sICJPTUFQIDM0MzAgU0RQIGJvYXJkIgogCWRlcGVuZHMgb24gQVJDSF9PTUFQMyAmJiBBUkNIX09NQVAzNFhYCiAKK2NvbmZpZyBNQUNIX05PS0lBX044MDAKKyAgICAgICBib29sCisKK2NvbmZpZyBNQUNIX05PS0lBX044MTAKKyAgICAgICBib29sCisKK2NvbmZpZyBNQUNIX05PS0lBX044MTBfV0lNQVgKKyAgICAgICBib29sCisKIGNvbmZpZyBNQUNIX05PS0lBX044WDAKIAlib29sICJOb2tpYSBOODAwL044MTAiCiAJZGVwZW5kcyBvbiBBUkNIX09NQVAyNDIwCisJc2VsZWN0IE1BQ0hfTk9LSUFfTjgwMAorCXNlbGVjdCBNQUNIX05PS0lBX044MTAKKwlzZWxlY3QgTUFDSF9OT0tJQV9OODEwX1dJTUFYCiAKIGNvbmZpZyBNQUNIX05PS0lBX1JYNTEKIAlib29sICJOb2tpYSBSWC01MSBib2FyZCIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtMzQzMHNkcC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC0zNDMwc2RwLmMKaW5kZXggYmQ1N2VjNy4uMGFjYjU1NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC0zNDMwc2RwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC0zNDMwc2RwLmMKQEAgLTE3LDYgKzE3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQvbWF0cml4X2tleXBhZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KICNpbmNsdWRlIDxsaW51eC9zcGkvYWRzNzg0Ni5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy90d2w0MDMwLmg+CkBAIC0zOCw3ICszOSw2IEBACiAjaW5jbHVkZSA8bWFjaC9ncG1jLmg+CiAKICNpbmNsdWRlIDxtYWNoL2NvbnRyb2wuaD4KLSNpbmNsdWRlIDxtYWNoL2tleXBhZC5oPgogI2luY2x1ZGUgPG1hY2gvZ3BtYy1zbWM5MXguaD4KIAogI2luY2x1ZGUgInNkcmFtLXFpbW9uZGEtaHliMThtNTEyMTYwYWYtNi5oIgpAQCAtNTQsNyArNTQsNyBAQAogCiAjZGVmaW5lIFRXTDQwMzBfTVNFQ1VSRV9HUElPIDIyCiAKLXN0YXRpYyBpbnQgc2RwMzQzMF9rZXltYXBbXSA9IHsKK3N0YXRpYyBpbnQgYm9hcmRfa2V5bWFwW10gPSB7CiAJS0VZKDAsIDAsIEtFWV9MRUZUKSwKIAlLRVkoMCwgMSwgS0VZX1JJR0hUKSwKIAlLRVkoMCwgMiwgS0VZX0EpLApAQCAtODgsMTEgKzg4LDE1IEBACiAJMAogfTsKIAorc3RhdGljIHN0cnVjdCBtYXRyaXhfa2V5bWFwX2RhdGEgYm9hcmRfbWFwX2RhdGEgPSB7CisJLmtleW1hcAkJCT0gYm9hcmRfa2V5bWFwLAorCS5rZXltYXBfc2l6ZQkJPSBBUlJBWV9TSVpFKGJvYXJkX2tleW1hcCksCit9OworCiBzdGF0aWMgc3RydWN0IHR3bDQwMzBfa2V5cGFkX2RhdGEgc2RwMzQzMF9rcF9kYXRhID0geworCS5rZXltYXBfZGF0YQk9ICZib2FyZF9tYXBfZGF0YSwKIAkucm93cwkJPSA1LAogCS5jb2xzCQk9IDYsCi0JLmtleW1hcAkJPSBzZHAzNDMwX2tleW1hcCwKLQkua2V5bWFwc2l6ZQk9IEFSUkFZX1NJWkUoc2RwMzQzMF9rZXltYXApLAogCS5yZXAJCT0gMSwKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtNDQzMHNkcC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC00NDMwc2RwLmMKaW5kZXggZWIzN2M0MC4uNjA5YTVhNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC00NDMwc2RwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC00NDMwc2RwLmMKQEAgLTU4LDYgKzU4LDggQEAKIAogc3RhdGljIHZvaWQgX19pbml0IG9tYXBfNDQzMHNkcF9pbml0X2lycSh2b2lkKQogeworCW9tYXBfYm9hcmRfY29uZmlnID0gc2RwNDQzMF9jb25maWc7CisJb21hcF9ib2FyZF9jb25maWdfc2l6ZSA9IEFSUkFZX1NJWkUoc2RwNDQzMF9jb25maWcpOwogCW9tYXAyX2luaXRfY29tbW9uX2h3KE5VTEwsIE5VTEwpOwogI2lmZGVmIENPTkZJR19PTUFQXzMyS19USU1FUgogCW9tYXAyX2dwX2Nsb2NrZXZlbnRfc2V0X2dwdGltZXIoMSk7CkBAIC03MCw4ICs3Miw2IEBACiBzdGF0aWMgdm9pZCBfX2luaXQgb21hcF80NDMwc2RwX2luaXQodm9pZCkKIHsKIAlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhzZHA0NDMwX2RldmljZXMsIEFSUkFZX1NJWkUoc2RwNDQzMF9kZXZpY2VzKSk7Ci0Jb21hcF9ib2FyZF9jb25maWcgPSBzZHA0NDMwX2NvbmZpZzsKLQlvbWFwX2JvYXJkX2NvbmZpZ19zaXplID0gQVJSQVlfU0laRShzZHA0NDMwX2NvbmZpZyk7CiAJb21hcF9zZXJpYWxfaW5pdCgpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWxkcC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1sZHAuYwppbmRleCBlYzY4NTRjLi5kNTdlYzJmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWxkcC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtbGRwLmMKQEAgLTE2LDYgKzE2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQvbWF0cml4X2tleXBhZC5oPgogI2luY2x1ZGUgPGxpbnV4L2dwaW9fa2V5cy5oPgogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgpAQCAtNDEsNyArNDIsNiBAQAogI2luY2x1ZGUgPGFzbS9kZWxheS5oPgogI2luY2x1ZGUgPG1hY2gvY29udHJvbC5oPgogI2luY2x1ZGUgPG1hY2gvdXNiLmg+Ci0jaW5jbHVkZSA8bWFjaC9rZXlwYWQuaD4KIAogI2luY2x1ZGUgIm1tYy10d2w0MDMwLmgiCiAKQEAgLTgwLDcgKzgwLDcgQEAKIAl9LAogfTsKIAotc3RhdGljIGludCBsZHBfdHdsNDAzMF9rZXltYXBbXSA9IHsKK3N0YXRpYyBpbnQgYm9hcmRfa2V5bWFwW10gPSB7CiAJS0VZKDAsIDAsIEtFWV8xKSwKIAlLRVkoMSwgMCwgS0VZXzIpLAogCUtFWSgyLCAwLCBLRVlfMyksCkBAIC0xMDEsMTEgKzEwMSwxNSBAQAogCTAKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgbWF0cml4X2tleW1hcF9kYXRhIGJvYXJkX21hcF9kYXRhID0geworCS5rZXltYXAJCQk9IGJvYXJkX2tleW1hcCwKKwkua2V5bWFwX3NpemUJCT0gQVJSQVlfU0laRShib2FyZF9rZXltYXApLAorfTsKKwogc3RhdGljIHN0cnVjdCB0d2w0MDMwX2tleXBhZF9kYXRhIGxkcF9rcF90d2w0MDMwX2RhdGEgPSB7CisJLmtleW1hcF9kYXRhCT0gJmJvYXJkX21hcF9kYXRhLAogCS5yb3dzCQk9IDYsCiAJLmNvbHMJCT0gNiwKLQkua2V5bWFwCQk9IGxkcF90d2w0MDMwX2tleW1hcCwKLQkua2V5bWFwc2l6ZQk9IEFSUkFZX1NJWkUobGRwX3R3bDQwMzBfa2V5bWFwKSwKIAkucmVwCQk9IDEsCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXAzYmVhZ2xlLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXAzYmVhZ2xlLmMKaW5kZXggNTAwYzk5NS4uNzBkZjZiNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwM2JlYWdsZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb21hcDNiZWFnbGUuYwpAQCAtMTM5LDggKzEzOSwxMyBAQAogc3RhdGljIGludCBiZWFnbGVfdHdsX2dwaW9fc2V0dXAoc3RydWN0IGRldmljZSAqZGV2LAogCQl1bnNpZ25lZCBncGlvLCB1bnNpZ25lZCBuZ3BpbykKIHsKKwlpZiAoc3lzdGVtX3JldiA+PSAweDIwICYmIHN5c3RlbV9yZXYgPD0gMHgzNDMwMTAwMCkgeworCQlvbWFwX2NmZ19yZWcoQUc5XzM0WFhfR1BJTzIzKTsKKwkJbW1jWzBdLmdwaW9fd3AgPSAyMzsKKwl9IGVsc2UgeworCQlvbWFwX2NmZ19yZWcoQUg4XzM0WFhfR1BJTzI5KTsKKwl9CiAJLyogZ3BpbyArIDAgaXMgIm1tYzBfY2QiIChpbnB1dC9JUlEpICovCi0Jb21hcF9jZmdfcmVnKEFIOF8zNFhYX0dQSU8yOSk7CiAJbW1jWzBdLmdwaW9fY2QgPSBncGlvICsgMDsKIAl0d2w0MDMwX21tY19pbml0KG1tYyk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb21hcDNldm0uYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb21hcDNldm0uYwppbmRleCBkNTBiOWJlLi40YzRkN2Y4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXAzZXZtLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwM2V2bS5jCkBAIC0yMCw2ICsyMCw3IEBACiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQvbWF0cml4X2tleXBhZC5oPgogI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KIAogI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KQEAgLTM3LDcgKzM4LDYgQEAKICNpbmNsdWRlIDxtYWNoL3VzYi5oPgogI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+CiAjaW5jbHVkZSA8bWFjaC9tY3NwaS5oPgotI2luY2x1ZGUgPG1hY2gva2V5cGFkLmg+CiAKICNpbmNsdWRlICJzZHJhbS1taWNyb24tbXQ0NmgzMm0zMmxmLTYuaCIKICNpbmNsdWRlICJtbWMtdHdsNDAzMC5oIgpAQCAtMTU5LDcgKzE1OSw3IEBACiAJLnVzYl9tb2RlCT0gVDJfVVNCX01PREVfVUxQSSwKIH07CiAKLXN0YXRpYyBpbnQgb21hcDNldm1fa2V5bWFwW10gPSB7CitzdGF0aWMgaW50IGJvYXJkX2tleW1hcFtdID0gewogCUtFWSgwLCAwLCBLRVlfTEVGVCksCiAJS0VZKDAsIDEsIEtFWV9SSUdIVCksCiAJS0VZKDAsIDIsIEtFWV9BKSwKQEAgLTE3OCwxMSArMTc4LDE1IEBACiAJS0VZKDMsIDMsIEtFWV9QKQogfTsKIAorc3RhdGljIHN0cnVjdCBtYXRyaXhfa2V5bWFwX2RhdGEgYm9hcmRfbWFwX2RhdGEgPSB7CisJLmtleW1hcAkJCT0gYm9hcmRfa2V5bWFwLAorCS5rZXltYXBfc2l6ZQkJPSBBUlJBWV9TSVpFKGJvYXJkX2tleW1hcCksCit9OworCiBzdGF0aWMgc3RydWN0IHR3bDQwMzBfa2V5cGFkX2RhdGEgb21hcDNldm1fa3BfZGF0YSA9IHsKKwkua2V5bWFwX2RhdGEJPSAmYm9hcmRfbWFwX2RhdGEsCiAJLnJvd3MJCT0gNCwKIAkuY29scwkJPSA0LAotCS5rZXltYXAJCT0gb21hcDNldm1fa2V5bWFwLAotCS5rZXltYXBzaXplCT0gQVJSQVlfU0laRShvbWFwM2V2bV9rZXltYXApLAogCS5yZXAJCT0gMSwKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb21hcDNwYW5kb3JhLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXAzcGFuZG9yYS5jCmluZGV4IGI0M2Y2ZTMuLjUzMjZlMGQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb21hcDNwYW5kb3JhLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwM3BhbmRvcmEuYwpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2kyYy90d2w0MDMwLmg+CiAjaW5jbHVkZSA8bGludXgvbGVkcy5oPgogI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQvbWF0cml4X2tleXBhZC5oPgogI2luY2x1ZGUgPGxpbnV4L2dwaW9fa2V5cy5oPgogCiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KQEAgLTM5LDcgKzQwLDYgQEAKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8bWFjaC9tY3NwaS5oPgogI2luY2x1ZGUgPG1hY2gvdXNiLmg+Ci0jaW5jbHVkZSA8bWFjaC9rZXlwYWQuaD4KICNpbmNsdWRlIDxtYWNoL211eC5oPgogCiAjaW5jbHVkZSAic2RyYW0tbWljcm9uLW10NDZoMzJtMzJsZi02LmgiCkBAIC0xMzMsNyArMTMzLDcgQEAKIAlvbWFwX3NldF9ncGlvX2RlYm91bmNlX3RpbWUoMzIgKiA1LCBHUElPX0RFQk9VTkNFX1RJTUUpOwogfQogCi1zdGF0aWMgaW50IHBhbmRvcmFfa2V5cGFkX21hcFtdID0geworc3RhdGljIGludCBib2FyZF9rZXltYXBbXSA9IHsKIAkvKiBjb2wsIHJvdywgY29kZSAqLwogCUtFWSgwLCAwLCBLRVlfOSksCiAJS0VZKDAsIDEsIEtFWV8wKSwKQEAgLTE4MCwxMSArMTgwLDE1IEBACiAJS0VZKDUsIDIsIEtFWV9GTiksCiB9OwogCitzdGF0aWMgc3RydWN0IG1hdHJpeF9rZXltYXBfZGF0YSBib2FyZF9tYXBfZGF0YSA9IHsKKwkua2V5bWFwCQkJPSBib2FyZF9rZXltYXAsCisJLmtleW1hcF9zaXplCQk9IEFSUkFZX1NJWkUoYm9hcmRfa2V5bWFwKSwKK307CisKIHN0YXRpYyBzdHJ1Y3QgdHdsNDAzMF9rZXlwYWRfZGF0YSBwYW5kb3JhX2twX2RhdGEgPSB7CisJLmtleW1hcF9kYXRhCT0gJmJvYXJkX21hcF9kYXRhLAogCS5yb3dzCQk9IDgsCiAJLmNvbHMJCT0gNiwKLQkua2V5bWFwCQk9IHBhbmRvcmFfa2V5cGFkX21hcCwKLQkua2V5bWFwc2l6ZQk9IEFSUkFZX1NJWkUocGFuZG9yYV9rZXlwYWRfbWFwKSwKIAkucmVwCQk9IDEsCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXJ4NTEtcGVyaXBoZXJhbHMuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtcng1MS1wZXJpcGhlcmFscy5jCmluZGV4IGU2ZTgyOTAuLmUzNGQ5NmEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtcng1MS1wZXJpcGhlcmFscy5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtcng1MS1wZXJpcGhlcmFscy5jCkBAIC0xMiw2ICsxMiw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQvbWF0cml4X2tleXBhZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMvdHdsNDAzMC5oPgpAQCAtMjcsNyArMjgsNiBAQAogI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+CiAjaW5jbHVkZSA8bWFjaC9kbWEuaD4KICNpbmNsdWRlIDxtYWNoL2dwbWMuaD4KLSNpbmNsdWRlIDxtYWNoL2tleXBhZC5oPgogI2luY2x1ZGUgPG1hY2gvb25lbmFuZC5oPgogI2luY2x1ZGUgPG1hY2gvZ3BtYy1zbWM5MXguaD4KIApAQCAtMzYsNTggKzM2LDYyIEBACiAjZGVmaW5lIFNZU1RFTV9SRVZfQl9VU0VTX1ZBVVgzCTB4MTY5OQogI2RlZmluZSBTWVNURU1fUkVWX1NfVVNFU19WQVVYMyAweDgKIAotc3RhdGljIGludCByeDUxX2tleW1hcFtdID0geworc3RhdGljIGludCBib2FyZF9rZXltYXBbXSA9IHsKIAlLRVkoMCwgMCwgS0VZX1EpLAotCUtFWSgwLCAxLCBLRVlfVyksCi0JS0VZKDAsIDIsIEtFWV9FKSwKLQlLRVkoMCwgMywgS0VZX1IpLAotCUtFWSgwLCA0LCBLRVlfVCksCi0JS0VZKDAsIDUsIEtFWV9ZKSwKLQlLRVkoMCwgNiwgS0VZX1UpLAotCUtFWSgwLCA3LCBLRVlfSSksCi0JS0VZKDEsIDAsIEtFWV9PKSwKKwlLRVkoMCwgMSwgS0VZX08pLAorCUtFWSgwLCAyLCBLRVlfUCksCisJS0VZKDAsIDMsIEtFWV9DT01NQSksCisJS0VZKDAsIDQsIEtFWV9CQUNLU1BBQ0UpLAorCUtFWSgwLCA2LCBLRVlfQSksCisJS0VZKDAsIDcsIEtFWV9TKSwKKwlLRVkoMSwgMCwgS0VZX1cpLAogCUtFWSgxLCAxLCBLRVlfRCksCi0JS0VZKDEsIDIsIEtFWV9ET1QpLAotCUtFWSgxLCAzLCBLRVlfViksCi0JS0VZKDEsIDQsIEtFWV9ET1dOKSwKLQlLRVkoMiwgMCwgS0VZX1ApLAotCUtFWSgyLCAxLCBLRVlfRiksCisJS0VZKDEsIDIsIEtFWV9GKSwKKwlLRVkoMSwgMywgS0VZX0cpLAorCUtFWSgxLCA0LCBLRVlfSCksCisJS0VZKDEsIDUsIEtFWV9KKSwKKwlLRVkoMSwgNiwgS0VZX0spLAorCUtFWSgxLCA3LCBLRVlfTCksCisJS0VZKDIsIDAsIEtFWV9FKSwKKwlLRVkoMiwgMSwgS0VZX0RPVCksCiAJS0VZKDIsIDIsIEtFWV9VUCksCi0JS0VZKDIsIDMsIEtFWV9CKSwKLQlLRVkoMiwgNCwgS0VZX1JJR0hUKSwKLQlLRVkoMywgMCwgS0VZX0NPTU1BKSwKLQlLRVkoMywgMSwgS0VZX0cpLAotCUtFWSgzLCAyLCBLRVlfRU5URVIpLAorCUtFWSgyLCAzLCBLRVlfRU5URVIpLAorCUtFWSgyLCA1LCBLRVlfWiksCisJS0VZKDIsIDYsIEtFWV9YKSwKKwlLRVkoMiwgNywgS0VZX0MpLAorCUtFWSgzLCAwLCBLRVlfUiksCisJS0VZKDMsIDEsIEtFWV9WKSwKKwlLRVkoMywgMiwgS0VZX0IpLAogCUtFWSgzLCAzLCBLRVlfTiksCi0JS0VZKDQsIDAsIEtFWV9CQUNLU1BBQ0UpLAotCUtFWSg0LCAxLCBLRVlfSCksCi0JS0VZKDQsIDMsIEtFWV9NKSwKKwlLRVkoMywgNCwgS0VZX00pLAorCUtFWSgzLCA1LCBLRVlfU1BBQ0UpLAorCUtFWSgzLCA2LCBLRVlfU1BBQ0UpLAorCUtFWSgzLCA3LCBLRVlfTEVGVCksCisJS0VZKDQsIDAsIEtFWV9UKSwKKwlLRVkoNCwgMSwgS0VZX0RPV04pLAorCUtFWSg0LCAyLCBLRVlfUklHSFQpLAogCUtFWSg0LCA0LCBLRVlfTEVGVENUUkwpLAotCUtFWSg1LCAxLCBLRVlfSiksCi0JS0VZKDUsIDIsIEtFWV9aKSwKLQlLRVkoNSwgMywgS0VZX1NQQUNFKSwKLQlLRVkoNSwgNCwgS0VZX0xFRlRTSElGVCksCi0JS0VZKDYsIDAsIEtFWV9BKSwKLQlLRVkoNiwgMSwgS0VZX0spLAotCUtFWSg2LCAyLCBLRVlfWCksCi0JS0VZKDYsIDMsIEtFWV9TUEFDRSksCi0JS0VZKDYsIDQsIEtFWV9GTiksCi0JS0VZKDcsIDAsIEtFWV9TKSwKLQlLRVkoNywgMSwgS0VZX0wpLAotCUtFWSg3LCAyLCBLRVlfQyksCi0JS0VZKDcsIDMsIEtFWV9MRUZUKSwKLQlLRVkoMHhmZiwgMCwgS0VZX0Y2KSwKLQlLRVkoMHhmZiwgMSwgS0VZX0Y3KSwKLQlLRVkoMHhmZiwgMiwgS0VZX0Y4KSwKLQlLRVkoMHhmZiwgNCwgS0VZX0Y5KSwKLQlLRVkoMHhmZiwgNSwgS0VZX0YxMCksCisJS0VZKDQsIDUsIEtFWV9SSUdIVEFMVCksCisJS0VZKDQsIDYsIEtFWV9MRUZUU0hJRlQpLAorCUtFWSg1LCAwLCBLRVlfWSksCisJS0VZKDYsIDAsIEtFWV9VKSwKKwlLRVkoNywgMCwgS0VZX0kpLAorCUtFWSg3LCAxLCBLRVlfRjcpLAorCUtFWSg3LCAyLCBLRVlfRjgpLAorCUtFWSgweGZmLCAyLCBLRVlfRjkpLAorCUtFWSgweGZmLCA0LCBLRVlfRjEwKSwKKwlLRVkoMHhmZiwgNSwgS0VZX0YxMSksCit9OworCitzdGF0aWMgc3RydWN0IG1hdHJpeF9rZXltYXBfZGF0YSBib2FyZF9tYXBfZGF0YSA9IHsKKwkua2V5bWFwCQkJPSBib2FyZF9rZXltYXAsCisJLmtleW1hcF9zaXplCQk9IEFSUkFZX1NJWkUoYm9hcmRfa2V5bWFwKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdHdsNDAzMF9rZXlwYWRfZGF0YSByeDUxX2twX2RhdGEgPSB7CisJLmtleW1hcF9kYXRhCT0gJmJvYXJkX21hcF9kYXRhLAogCS5yb3dzCQk9IDgsCiAJLmNvbHMJCT0gOCwKLQkua2V5bWFwCQk9IHJ4NTFfa2V5bWFwLAotCS5rZXltYXBzaXplCT0gQVJSQVlfU0laRShyeDUxX2tleW1hcCksCiAJLnJlcAkJPSAxLAogfTsKIApAQCAtNDQwLDcgKzQ0NCw3IEBACiAJCXJ4NTFfdHdsZGF0YS52YXV4MyA9ICZyeDUxX3ZhdXgzX2NhbTsKIAkJcng1MV90d2xkYXRhLnZtbWMyID0gJnJ4NTFfdm1tYzI7CiAJfQotCW9tYXBfcmVnaXN0ZXJfaTJjX2J1cygxLCAyNjAwLCByeDUxX3BlcmlwaGVyYWxzX2kyY19ib2FyZF9pbmZvXzEsCisJb21hcF9yZWdpc3Rlcl9pMmNfYnVzKDEsIDIyMDAsIHJ4NTFfcGVyaXBoZXJhbHNfaTJjX2JvYXJkX2luZm9fMSwKIAkJCUFSUkFZX1NJWkUocng1MV9wZXJpcGhlcmFsc19pMmNfYm9hcmRfaW5mb18xKSk7CiAJb21hcF9yZWdpc3Rlcl9pMmNfYnVzKDIsIDEwMCwgTlVMTCwgMCk7CiAJb21hcF9yZWdpc3Rlcl9pMmNfYnVzKDMsIDQwMCwgTlVMTCwgMCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXJ4NTEuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtcng1MS5jCmluZGV4IGY5MTk2YzMuLjc4ODY5YTkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtcng1MS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtcng1MS5jCkBAIC0yNiw3ICsyNiw2IEBACiAjaW5jbHVkZSA8bWFjaC9tdXguaD4KICNpbmNsdWRlIDxtYWNoL2JvYXJkLmg+CiAjaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KLSNpbmNsdWRlIDxtYWNoL2tleXBhZC5oPgogI2luY2x1ZGUgPG1hY2gvZG1hLmg+CiAjaW5jbHVkZSA8bWFjaC9ncG1jLmg+CiAjaW5jbHVkZSA8bWFjaC91c2IuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtem9vbTIuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtem9vbTIuYwppbmRleCAzMjQwMDllLi5lYTAwNDg2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXpvb20yLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC16b29tMi5jCkBAIC0xMyw2ICsxMyw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQvbWF0cml4X2tleXBhZC5oPgogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KICNpbmNsdWRlIDxsaW51eC9pMmMvdHdsNDAzMC5oPgogI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9tYWNoaW5lLmg+CkBAIC0yMiwxMiArMjMsMTIgQEAKIAogI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+CiAjaW5jbHVkZSA8bWFjaC91c2IuaD4KLSNpbmNsdWRlIDxtYWNoL2tleXBhZC5oPgogCiAjaW5jbHVkZSAibW1jLXR3bDQwMzAuaCIKKyNpbmNsdWRlICJzZHJhbS1taWNyb24tbXQ0NmgzMm0zMmxmLTYuaCIKIAogLyogWm9vbTIgaGFzIFF3ZXJ0eSBrZXlib2FyZCovCi1zdGF0aWMgaW50IHpvb20yX3R3bDQwMzBfa2V5bWFwW10gPSB7CitzdGF0aWMgaW50IGJvYXJkX2tleW1hcFtdID0gewogCUtFWSgwLCAwLCBLRVlfRSksCiAJS0VZKDEsIDAsIEtFWV9SKSwKIAlLRVkoMiwgMCwgS0VZX1QpLApAQCAtODIsMTEgKzgzLDE1IEBACiAJMAogfTsKIAorc3RhdGljIHN0cnVjdCBtYXRyaXhfa2V5bWFwX2RhdGEgYm9hcmRfbWFwX2RhdGEgPSB7CisJLmtleW1hcAkJCT0gYm9hcmRfa2V5bWFwLAorCS5rZXltYXBfc2l6ZQkJPSBBUlJBWV9TSVpFKGJvYXJkX2tleW1hcCksCit9OworCiBzdGF0aWMgc3RydWN0IHR3bDQwMzBfa2V5cGFkX2RhdGEgem9vbTJfa3BfdHdsNDAzMF9kYXRhID0geworCS5rZXltYXBfZGF0YQk9ICZib2FyZF9tYXBfZGF0YSwKIAkucm93cwkJPSA4LAogCS5jb2xzCQk9IDgsCi0JLmtleW1hcAkJPSB6b29tMl90d2w0MDMwX2tleW1hcCwKLQkua2V5bWFwc2l6ZQk9IEFSUkFZX1NJWkUoem9vbTJfdHdsNDAzMF9rZXltYXApLAogCS5yZXAJCT0gMSwKIH07CiAKQEAgLTIwOSw3ICsyMTQsOCBAQAogewogCW9tYXBfYm9hcmRfY29uZmlnID0gem9vbTJfY29uZmlnOwogCW9tYXBfYm9hcmRfY29uZmlnX3NpemUgPSBBUlJBWV9TSVpFKHpvb20yX2NvbmZpZyk7Ci0Jb21hcDJfaW5pdF9jb21tb25faHcoTlVMTCwgTlVMTCk7CisJb21hcDJfaW5pdF9jb21tb25faHcobXQ0NmgzMm0zMmxmNl9zZHJjX3BhcmFtcywKKwkJCQkgbXQ0NmgzMm0zMmxmNl9zZHJjX3BhcmFtcyk7CiAJb21hcF9pbml0X2lycSgpOwogCW9tYXBfZ3Bpb19pbml0KCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrMjR4eC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazI0eHguYwppbmRleCBiYzVkM2FjLi5lMmRiZWRkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrMjR4eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2syNHh4LmMKQEAgLTc2OSw2ICs3NjksNyBAQAogCQlpZiAoYy0+Y3B1ICYgY3B1X21hc2spIHsKIAkJCWNsa2Rldl9hZGQoJmMtPmxrKTsKIAkJCWNsa19yZWdpc3RlcihjLT5say5jbGspOworCQkJb21hcDJfaW5pdF9jbGtfY2xrZG0oYy0+bGsuY2xrKTsKIAkJfQogCiAJLyogQ2hlY2sgdGhlIE1QVSByYXRlIHNldCBieSBib290bG9hZGVyICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrMzR4eC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazM0eHguYwppbmRleCBmYWZjZDMyLi40ODk1NTZlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrMzR4eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2szNHh4LmMKQEAgLTMzOCw2ICszMzgsMTMgQEAKICAqLwogI2RlZmluZSBTRFJDX01QVVJBVEVfTE9PUFMJCTk2CiAKKy8qCisgKiBEUExMNV9GUkVRX0ZPUl9VU0JIT1NUOiBVU0JIT1NUIGFuZCBVU0JUTEwgYXJlIHRoZSBvbmx5IGNsb2NrcworICogdGhhdCBhcmUgc291cmNlZCBieSBEUExMNSwgYW5kIGJvdGggb2YgdGhlc2UgcmVxdWlyZSB0aGlzIGNsb2NrCisgKiB0byBiZSBhdCAxMjAgTUh6IGZvciBwcm9wZXIgb3BlcmF0aW9uLgorICovCisjZGVmaW5lIERQTEw1X0ZSRVFfRk9SX1VTQkhPU1QJCTEyMDAwMDAwMAorCiAvKioKICAqIG9tYXAzNDMwZXMyX2Nsa19zc2lfZmluZF9pZGxlc3QgLSByZXR1cm4gQ01fSURMRVNUIGluZm8gZm9yIFNTSQogICogQGNsazogc3RydWN0IGNsayAqIGJlaW5nIGVuYWJsZWQKQEAgLTEwNTYsNiArMTA2MywyOCBAQAogI2VuZGlmCiB9CiAKK3N0YXRpYyB2b2lkIG9tYXAzX2Nsa19sb2NrX2RwbGw1KHZvaWQpCit7CisJc3RydWN0IGNsayAqZHBsbDVfY2xrOworCXN0cnVjdCBjbGsgKmRwbGw1X20yX2NsazsKKworCWRwbGw1X2NsayA9IGNsa19nZXQoTlVMTCwgImRwbGw1X2NrIik7CisJY2xrX3NldF9yYXRlKGRwbGw1X2NsaywgRFBMTDVfRlJFUV9GT1JfVVNCSE9TVCk7CisJY2xrX2VuYWJsZShkcGxsNV9jbGspOworCisJLyogRW5hYmxlIGF1dG9pZGxlIHRvIGFsbG93IGl0IHRvIGVudGVyIGxvdyBwb3dlciBieXBhc3MgKi8KKwlvbWFwM19kcGxsX2FsbG93X2lkbGUoZHBsbDVfY2xrKTsKKworCS8qIFByb2dyYW0gZHBsbDVfbTJfY2xrIGRpdmlkZXIgZm9yIG5vIGRpdmlzaW9uICovCisJZHBsbDVfbTJfY2xrID0gY2xrX2dldChOVUxMLCAiZHBsbDVfbTJfY2siKTsKKwljbGtfZW5hYmxlKGRwbGw1X20yX2Nsayk7CisJY2xrX3NldF9yYXRlKGRwbGw1X20yX2NsaywgRFBMTDVfRlJFUV9GT1JfVVNCSE9TVCk7CisKKwljbGtfZGlzYWJsZShkcGxsNV9tMl9jbGspOworCWNsa19kaXNhYmxlKGRwbGw1X2Nsayk7CisJcmV0dXJuOworfQorCiAvKiBSRVZJU0lUOiBNb3ZlIHRoaXMgaW5pdCBzdHVmZiBvdXQgaW50byBjbG9jay5jICovCiAKIC8qCkBAIC0xMTQ4LDYgKzExNzcsMTIgQEAKIAkgKi8KIAljbGtfZW5hYmxlX2luaXRfY2xvY2tzKCk7CiAKKwkvKgorCSAqIExvY2sgRFBMTDUgYW5kIHB1dCBpdCBpbiBhdXRvaWRsZS4KKwkgKi8KKwlpZiAob21hcF9yZXYoKSA+PSBPTUFQMzQzMF9SRVZfRVMyXzApCisJCW9tYXAzX2Nsa19sb2NrX2RwbGw1KCk7CisKIAkvKiBBdm9pZCBzbGVlcGluZyBkdXJpbmcgb21hcDJfY2xrX3ByZXBhcmVfZm9yX3JlYm9vdCgpICovCiAJLyogUkVWSVNJVDogbm90IHlldCByZWFkeSBmb3IgMzQzeCAqLwogI2lmIDAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2tkb21haW4uYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2tkb21haW4uYwppbmRleCA0ZWY3YjRmLi41OGFmZjg0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrZG9tYWluLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9ja2RvbWFpbi5jCkBAIC0xMzcsNiArMTM3LDM2IEBACiAJfQogfQogCisvKgorICogX29tYXAyX2Nsa2RtX3NldF9od3N1cCAtIHNldCB0aGUgaHdzdXAgaWRsZSB0cmFuc2l0aW9uIGJpdAorICogQGNsa2RtOiBzdHJ1Y3QgY2xvY2tkb21haW4gKgorICogQGVuYWJsZTogaW50IDAgdG8gZGlzYWJsZSwgMSB0byBlbmFibGUKKyAqCisgKiBJbnRlcm5hbCBoZWxwZXIgZm9yIGFjdHVhbGx5IHN3aXRjaGluZyB0aGUgYml0IHRoYXQgY29udHJvbHMgaHdzdXAKKyAqIGlkbGUgdHJhbnNpdGlvbnMgZm9yIGNsa2RtLgorICovCitzdGF0aWMgdm9pZCBfb21hcDJfY2xrZG1fc2V0X2h3c3VwKHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0sIGludCBlbmFibGUpCit7CisJdTMyIHY7CisKKwlpZiAoY3B1X2lzX29tYXAyNHh4KCkpIHsKKwkJaWYgKGVuYWJsZSkKKwkJCXYgPSBPTUFQMjRYWF9DTEtTVENUUkxfRU5BQkxFX0FVVE87CisJCWVsc2UKKwkJCXYgPSBPTUFQMjRYWF9DTEtTVENUUkxfRElTQUJMRV9BVVRPOworCX0gZWxzZSBpZiAoY3B1X2lzX29tYXAzNHh4KCkpIHsKKwkJaWYgKGVuYWJsZSkKKwkJCXYgPSBPTUFQMzRYWF9DTEtTVENUUkxfRU5BQkxFX0FVVE87CisJCWVsc2UKKwkJCXYgPSBPTUFQMzRYWF9DTEtTVENUUkxfRElTQUJMRV9BVVRPOworCX0gZWxzZSB7CisJCUJVRygpOworCX0KKworCWNtX3Jtd19tb2RfcmVnX2JpdHMoY2xrZG0tPmNsa3RyY3RybF9tYXNrLAorCQkJICAgIHYgPDwgX19mZnMoY2xrZG0tPmNsa3RyY3RybF9tYXNrKSwKKwkJCSAgICBjbGtkbS0+cHdyZG0ucHRyLT5wcmNtX29mZnMsIENNX0NMS1NUQ1RSTCk7Cit9CiAKIHN0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gKl9jbGtkbV9sb29rdXAoY29uc3QgY2hhciAqbmFtZSkKIHsKQEAgLTQ1Niw4ICs0ODYsNiBAQAogICovCiB2b2lkIG9tYXAyX2Nsa2RtX2FsbG93X2lkbGUoc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbSkKIHsKLQl1MzIgdjsKLQogCWlmICghY2xrZG0pCiAJCXJldHVybjsKIApAQCAtNDczLDE4ICs1MDEsNyBAQAogCWlmIChhdG9taWNfcmVhZCgmY2xrZG0tPnVzZWNvdW50KSA+IDApCiAJCV9jbGtkbV9hZGRfYXV0b2RlcHMoY2xrZG0pOwogCi0JaWYgKGNwdV9pc19vbWFwMjR4eCgpKQotCQl2ID0gT01BUDI0WFhfQ0xLU1RDVFJMX0VOQUJMRV9BVVRPOwotCWVsc2UgaWYgKGNwdV9pc19vbWFwMzR4eCgpKQotCQl2ID0gT01BUDM0WFhfQ0xLU1RDVFJMX0VOQUJMRV9BVVRPOwotCWVsc2UKLQkJQlVHKCk7Ci0KLQotCWNtX3Jtd19tb2RfcmVnX2JpdHMoY2xrZG0tPmNsa3RyY3RybF9tYXNrLAotCQkJICAgIHYgPDwgX19mZnMoY2xrZG0tPmNsa3RyY3RybF9tYXNrKSwKLQkJCSAgICBjbGtkbS0+cHdyZG0ucHRyLT5wcmNtX29mZnMsCi0JCQkgICAgQ01fQ0xLU1RDVFJMKTsKKwlfb21hcDJfY2xrZG1fc2V0X2h3c3VwKGNsa2RtLCAxKTsKIAogCXB3cmRtX2Nsa2RtX3N0YXRlX3N3aXRjaChjbGtkbSk7CiB9CkBAIC01MDAsOCArNTE3LDYgQEAKICAqLwogdm9pZCBvbWFwMl9jbGtkbV9kZW55X2lkbGUoc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbSkKIHsKLQl1MzIgdjsKLQogCWlmICghY2xrZG0pCiAJCXJldHVybjsKIApAQCAtNTE0LDE2ICs1MjksNyBAQAogCXByX2RlYnVnKCJjbG9ja2RvbWFpbjogZGlzYWJsaW5nIGF1dG9tYXRpYyBpZGxlIHRyYW5zaXRpb25zIGZvciAlc1xuIiwKIAkJIGNsa2RtLT5uYW1lKTsKIAotCWlmIChjcHVfaXNfb21hcDI0eHgoKSkKLQkJdiA9IE9NQVAyNFhYX0NMS1NUQ1RSTF9ESVNBQkxFX0FVVE87Ci0JZWxzZSBpZiAoY3B1X2lzX29tYXAzNHh4KCkpCi0JCXYgPSBPTUFQMzRYWF9DTEtTVENUUkxfRElTQUJMRV9BVVRPOwotCWVsc2UKLQkJQlVHKCk7Ci0KLQljbV9ybXdfbW9kX3JlZ19iaXRzKGNsa2RtLT5jbGt0cmN0cmxfbWFzaywKLQkJCSAgICB2IDw8IF9fZmZzKGNsa2RtLT5jbGt0cmN0cmxfbWFzayksCi0JCQkgICAgY2xrZG0tPnB3cmRtLnB0ci0+cHJjbV9vZmZzLCBDTV9DTEtTVENUUkwpOworCV9vbWFwMl9jbGtkbV9zZXRfaHdzdXAoY2xrZG0sIDApOwogCiAJaWYgKGF0b21pY19yZWFkKCZjbGtkbS0+dXNlY291bnQpID4gMCkKIAkJX2Nsa2RtX2RlbF9hdXRvZGVwcyhjbGtkbSk7CkBAIC01NjksMTAgKzU3NSwxNCBAQAogCXYgPSBvbWFwMl9jbGtkbV9jbGt0cmN0cmxfcmVhZChjbGtkbSk7CiAKIAlpZiAoKGNwdV9pc19vbWFwMzR4eCgpICYmIHYgPT0gT01BUDM0WFhfQ0xLU1RDVFJMX0VOQUJMRV9BVVRPKSB8fAotCSAgICAoY3B1X2lzX29tYXAyNHh4KCkgJiYgdiA9PSBPTUFQMjRYWF9DTEtTVENUUkxfRU5BQkxFX0FVVE8pKQorCSAgICAoY3B1X2lzX29tYXAyNHh4KCkgJiYgdiA9PSBPTUFQMjRYWF9DTEtTVENUUkxfRU5BQkxFX0FVVE8pKSB7CisJCS8qIERpc2FibGUgSFcgdHJhbnNpdGlvbnMgd2hlbiB3ZSBhcmUgY2hhbmdpbmcgZGVwcyAqLworCQlfb21hcDJfY2xrZG1fc2V0X2h3c3VwKGNsa2RtLCAwKTsKIAkJX2Nsa2RtX2FkZF9hdXRvZGVwcyhjbGtkbSk7Ci0JZWxzZQorCQlfb21hcDJfY2xrZG1fc2V0X2h3c3VwKGNsa2RtLCAxKTsKKwl9IGVsc2UgewogCQlvbWFwMl9jbGtkbV93YWtldXAoY2xrZG0pOworCX0KIAogCXB3cmRtX3dhaXRfdHJhbnNpdGlvbihjbGtkbS0+cHdyZG0ucHRyKTsKIAlwd3JkbV9jbGtkbV9zdGF0ZV9zd2l0Y2goY2xrZG0pOwpAQCAtNjIzLDEwICs2MzMsMTQgQEAKIAl2ID0gb21hcDJfY2xrZG1fY2xrdHJjdHJsX3JlYWQoY2xrZG0pOwogCiAJaWYgKChjcHVfaXNfb21hcDM0eHgoKSAmJiB2ID09IE9NQVAzNFhYX0NMS1NUQ1RSTF9FTkFCTEVfQVVUTykgfHwKLQkgICAgKGNwdV9pc19vbWFwMjR4eCgpICYmIHYgPT0gT01BUDI0WFhfQ0xLU1RDVFJMX0VOQUJMRV9BVVRPKSkKKwkgICAgKGNwdV9pc19vbWFwMjR4eCgpICYmIHYgPT0gT01BUDI0WFhfQ0xLU1RDVFJMX0VOQUJMRV9BVVRPKSkgeworCQkvKiBEaXNhYmxlIEhXIHRyYW5zaXRpb25zIHdoZW4gd2UgYXJlIGNoYW5naW5nIGRlcHMgKi8KKwkJX29tYXAyX2Nsa2RtX3NldF9od3N1cChjbGtkbSwgMCk7CiAJCV9jbGtkbV9kZWxfYXV0b2RlcHMoY2xrZG0pOwotCWVsc2UKKwkJX29tYXAyX2Nsa2RtX3NldF9od3N1cChjbGtkbSwgMSk7CisJfSBlbHNlIHsKIAkJb21hcDJfY2xrZG1fc2xlZXAoY2xrZG0pOworCX0KIAogCXB3cmRtX2Nsa2RtX3N0YXRlX3N3aXRjaChjbGtkbSk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY200eHh4LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2NtNHh4eC5jCmluZGV4IGU0ZWJkNmQuLjRhZjc2YmIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvY200eHh4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbTR4eHguYwpAQCAtMjIsNyArMjIsNiBAQAogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KIAogI2luY2x1ZGUgImNtLmgiCi0jaW5jbHVkZSAiY20tcmVnYml0cy00eHh4LmgiCiAKIC8qIFhYWCBtb3ZlIHRoaXMgdG8gY20uaCAqLwogLyogTUFYX01PRFVMRV9SRUFEWV9USU1FOiBtYXggbWlsbGlzZWNvbmRzIGZvciBtb2R1bGUgdG8gbGVhdmUgaWRsZSAqLwpAQCAtNTAsMTkgKzQ5LDcgQEAKICAqLwogaW50IG9tYXA0X2NtX3dhaXRfaWRsZXN0X3JlYWR5KHUzMiBwcmNtX21vZCwgdTggcHJjbV9kZXZfb2ZmcykKIHsKLQlpbnQgaSA9IDA7Ci0JdTggY21faWQ7Ci0JdTE2IHByY21fbW9kX29mZnM7Ci0JdTMyIG1hc2sgPSBPTUFQNF9QUkNNX0NNX0NMS0NUUkxfSURMRVNUX01BU0s7Ci0KLQljbV9pZCA9IHByY21fbW9kID4+IE9NQVA0X1BSQ01fTU9EX0NNX0lEX1NISUZUOwotCXByY21fbW9kX29mZnMgPSBwcmNtX21vZCAmIE9NQVA0X1BSQ01fTU9EX09GRlNfTUFTSzsKLQotCXdoaWxlICgoKG9tYXA0X2NtX3JlYWRfbW9kX3JlZyhjbV9pZCwgcHJjbV9tb2Rfb2ZmcywgcHJjbV9kZXZfb2ZmcywKLQkJCQkgICAgICAgT01BUDRfQ01fQ0xLQ1RSTF9EUkVHKSAmIG1hc2spICE9IDApICYmCi0JICAgICAgIChpKysgPCBNQVhfTU9EVUxFX1JFQURZX1RJTUUpKQotCQl1ZGVsYXkoMSk7Ci0KLQlyZXR1cm4gKGkgPCBNQVhfTU9EVUxFX1JFQURZX1RJTUUpID8gMCA6IC1FQlVTWTsKKwkvKiBGSVhNRTogQWRkIGNsb2NrIG1hbmFnZXIgcmVsYXRlZCBjb2RlICovCisJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvZGV2aWNlcy5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9kZXZpY2VzLmMKaW5kZXggYmNmY2ZjNy4uZmFmN2ExZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9kZXZpY2VzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9kZXZpY2VzLmMKQEAgLTM1NSwyOSArMzU1LDYwIEBACiB9OwogI2VuZGlmCiAKLXN0YXRpYyB2b2lkIG9tYXBfaW5pdF9tY3NwaSh2b2lkKQorI2lmZGVmIENPTkZJR19BUkNIX09NQVA0CitzdGF0aWMgaW5saW5lIHZvaWQgb21hcDRfbWNzcGlfZml4dXAodm9pZCkKIHsKLQlpZiAoY3B1X2lzX29tYXA0NHh4KCkpIHsKLQkJb21hcDJfbWNzcGkxX3Jlc291cmNlc1swXS5zdGFydAk9IE9NQVA0X01DU1BJMV9CQVNFOwotCQlvbWFwMl9tY3NwaTFfcmVzb3VyY2VzWzBdLmVuZAk9IE9NQVA0X01DU1BJMV9CQVNFICsgMHhmZjsKLQkJb21hcDJfbWNzcGkyX3Jlc291cmNlc1swXS5zdGFydAk9IE9NQVA0X01DU1BJMl9CQVNFOwotCQlvbWFwMl9tY3NwaTJfcmVzb3VyY2VzWzBdLmVuZAk9IE9NQVA0X01DU1BJMl9CQVNFICsgMHhmZjsKLQkJb21hcDJfbWNzcGkzX3Jlc291cmNlc1swXS5zdGFydAk9IE9NQVA0X01DU1BJM19CQVNFOwotCQlvbWFwMl9tY3NwaTNfcmVzb3VyY2VzWzBdLmVuZAk9IE9NQVA0X01DU1BJM19CQVNFICsgMHhmZjsKLQkJb21hcDJfbWNzcGk0X3Jlc291cmNlc1swXS5zdGFydAk9IE9NQVA0X01DU1BJNF9CQVNFOwotCQlvbWFwMl9tY3NwaTRfcmVzb3VyY2VzWzBdLmVuZAk9IE9NQVA0X01DU1BJNF9CQVNFICsgMHhmZjsKLQl9Ci0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZvbWFwMl9tY3NwaTEpOwotCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmb21hcDJfbWNzcGkyKTsKKwlvbWFwMl9tY3NwaTFfcmVzb3VyY2VzWzBdLnN0YXJ0CT0gT01BUDRfTUNTUEkxX0JBU0U7CisJb21hcDJfbWNzcGkxX3Jlc291cmNlc1swXS5lbmQJPSBPTUFQNF9NQ1NQSTFfQkFTRSArIDB4ZmY7CisJb21hcDJfbWNzcGkyX3Jlc291cmNlc1swXS5zdGFydAk9IE9NQVA0X01DU1BJMl9CQVNFOworCW9tYXAyX21jc3BpMl9yZXNvdXJjZXNbMF0uZW5kCT0gT01BUDRfTUNTUEkyX0JBU0UgKyAweGZmOworCW9tYXAyX21jc3BpM19yZXNvdXJjZXNbMF0uc3RhcnQJPSBPTUFQNF9NQ1NQSTNfQkFTRTsKKwlvbWFwMl9tY3NwaTNfcmVzb3VyY2VzWzBdLmVuZAk9IE9NQVA0X01DU1BJM19CQVNFICsgMHhmZjsKKwlvbWFwMl9tY3NwaTRfcmVzb3VyY2VzWzBdLnN0YXJ0CT0gT01BUDRfTUNTUEk0X0JBU0U7CisJb21hcDJfbWNzcGk0X3Jlc291cmNlc1swXS5lbmQJPSBPTUFQNF9NQ1NQSTRfQkFTRSArIDB4ZmY7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIG9tYXA0X21jc3BpX2ZpeHVwKHZvaWQpCit7Cit9CisjZW5kaWYKKwogI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0MzApIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDMpIHx8IFwKIAlkZWZpbmVkKENPTkZJR19BUkNIX09NQVA0KQotCWlmIChjcHVfaXNfb21hcDI0MzAoKSB8fCBjcHVfaXNfb21hcDM0M3goKSB8fCBjcHVfaXNfb21hcDQ0eHgoKSkKLQkJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZvbWFwMl9tY3NwaTMpOworc3RhdGljIGlubGluZSB2b2lkIG9tYXAyX21jc3BpM19pbml0KHZvaWQpCit7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZvbWFwMl9tY3NwaTMpOworfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBvbWFwMl9tY3NwaTNfaW5pdCh2b2lkKQoreworfQogI2VuZGlmCisKICNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVA0KQotCWlmIChjcHVfaXNfb21hcDM0M3goKSB8fCBjcHVfaXNfb21hcDQ0eHgoKSkKLQkJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZvbWFwMl9tY3NwaTQpOworc3RhdGljIGlubGluZSB2b2lkIG9tYXAyX21jc3BpNF9pbml0KHZvaWQpCit7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZvbWFwMl9tY3NwaTQpOworfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBvbWFwMl9tY3NwaTRfaW5pdCh2b2lkKQoreworfQogI2VuZGlmCisKK3N0YXRpYyB2b2lkIG9tYXBfaW5pdF9tY3NwaSh2b2lkKQoreworCWlmIChjcHVfaXNfb21hcDQ0eHgoKSkKKwkJb21hcDRfbWNzcGlfZml4dXAoKTsKKworCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmb21hcDJfbWNzcGkxKTsKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJm9tYXAyX21jc3BpMik7CisKKwlpZiAoY3B1X2lzX29tYXAyNDMwKCkgfHwgY3B1X2lzX29tYXAzNDN4KCkgfHwgY3B1X2lzX29tYXA0NHh4KCkpCisJCW9tYXAyX21jc3BpM19pbml0KCk7CisKKwlpZiAoY3B1X2lzX29tYXAzNDN4KCkgfHwgY3B1X2lzX29tYXA0NHh4KCkpCisJCW9tYXAyX21jc3BpNF9pbml0KCk7CiB9CiAKICNlbHNlCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2lvLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2lvLmMKaW5kZXggNzU3NGI2Zi4uNTZiZTg3ZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9pby5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvaW8uYwpAQCAtMjk0LDE1ICsyOTQsMTcgQEAKIAllbHNlIGlmIChjcHVfaXNfb21hcDM0eHgoKSkKIAkJaHdtb2RzID0gb21hcDM0eHhfaHdtb2RzOwogCi0Jb21hcF9od21vZF9pbml0KGh3bW9kcyk7Ci0Jb21hcDJfbXV4X2luaXQoKTsKICNpZm5kZWYgQ09ORklHX0FSQ0hfT01BUDQgLyogRklYTUU6IFJlbW92ZSB0aGlzIG9uY2UgdGhlIGNsa2RldiBpcyByZWFkeSAqLwogCS8qIFRoZSBPUFAgdGFibGVzIGhhdmUgdG8gYmUgcmVnaXN0ZXJlZCBiZWZvcmUgYSBjbGsgaW5pdCAqLworCW9tYXBfaHdtb2RfaW5pdChod21vZHMpOworCW9tYXAyX211eF9pbml0KCk7CiAJb21hcF9wbV9pZl9lYXJseV9pbml0KG1wdV9vcHBzLCBkc3Bfb3BwcywgbDNfb3Bwcyk7CiAJcHdyZG1faW5pdChwb3dlcmRvbWFpbnNfb21hcCk7CiAJY2xrZG1faW5pdChjbG9ja2RvbWFpbnNfb21hcCwgY2xrZG1fcHdyZG1fYXV0b2RlcHMpOwogCW9tYXAyX2Nsa19pbml0KCk7CisjZW5kaWYKIAlvbWFwX3NlcmlhbF9lYXJseV9pbml0KCk7CisjaWZuZGVmIENPTkZJR19BUkNIX09NQVA0CiAJb21hcF9od21vZF9sYXRlX2luaXQoKTsKIAlvbWFwX3BtX2lmX2luaXQoKTsKIAlvbWFwMl9zZHJjX2luaXQoc2RyY19jczAsIHNkcmNfY3MxKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvaW9tbXUyLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2lvbW11Mi5jCmluZGV4IDJkOWI1Y2MuLjRhMGUxY2QgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvaW9tbXUyLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9pb21tdTIuYwpAQCAtNzksNyArNzksNyBAQAogCQlsID0gaW9tbXVfcmVhZF9yZWcob2JqLCBNTVVfU1lTU1RBVFVTKTsKIAkJaWYgKGwgJiBNTVVfU1lTX1JFU0VURE9ORSkKIAkJCWJyZWFrOwotCX0gd2hpbGUgKHRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW91dCkpOworCX0gd2hpbGUgKCF0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQpKTsKIAogCWlmICghKGwgJiBNTVVfU1lTX1JFU0VURE9ORSkpIHsKIAkJZGV2X2VycihvYmotPmRldiwgImNhbid0IHRha2UgbW11IG91dCBvZiByZXNldFxuIik7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL21haWxib3guYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvbWFpbGJveC5jCmluZGV4IDZmNzFmMzcuLmMwMzVhZDMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvbWFpbGJveC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvbWFpbGJveC5jCkBAIC0zMCw2ICszMCwxNCBAQAogI2RlZmluZSBNQUlMQk9YX0lSUV9ORVdNU0codSkJCSgxIDw8ICgyICogKHUpKSkKICNkZWZpbmUgTUFJTEJPWF9JUlFfTk9URlVMTCh1KQkJKDEgPDwgKDIgKiAodSkgKyAxKSkKIAorLyogU1lTQ09ORklHOiByZWdpc3RlciBiaXQgZGVmaW5pdGlvbiAqLworI2RlZmluZSBBVVRPSURMRQkoMSA8PCAwKQorI2RlZmluZSBTT0ZUUkVTRVQJKDEgPDwgMSkKKyNkZWZpbmUgU01BUlRJRExFCSgyIDw8IDMpCisKKy8qIFNZU1NUQVRVUzogcmVnaXN0ZXIgYml0IGRlZmluaXRpb24gKi8KKyNkZWZpbmUgUkVTRVRET05FCSgxIDw8IDApCisKICNkZWZpbmUgTUJPWF9SRUdfU0laRQkJCTB4MTIwCiAjZGVmaW5lIE1CT1hfTlJfUkVHUwkJCShNQk9YX1JFR19TSVpFIC8gc2l6ZW9mKHUzMikpCiAKQEAgLTY5LDIxICs3NywzMyBAQAogLyogTWFpbGJveCBIL1cgcHJlcGFyYXRpb25zICovCiBzdGF0aWMgaW50IG9tYXAyX21ib3hfc3RhcnR1cChzdHJ1Y3Qgb21hcF9tYm94ICptYm94KQogewotCXVuc2lnbmVkIGludCBsOworCXUzMiBsOworCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKIAogCW1ib3hfaWNrX2hhbmRsZSA9IGNsa19nZXQoTlVMTCwgIm1haWxib3hlc19pY2siKTsKIAlpZiAoSVNfRVJSKG1ib3hfaWNrX2hhbmRsZSkpIHsKLQkJcHJpbnRrKCJDb3VsZCBub3QgZ2V0IG1haWxib3hlc19pY2tcbiIpOworCQlwcl9lcnIoIkNhbid0IGdldCBtYWlsYm94ZXNfaWNrXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCWNsa19lbmFibGUobWJveF9pY2tfaGFuZGxlKTsKIAorCW1ib3hfd3JpdGVfcmVnKFNPRlRSRVNFVCwgTUFJTEJPWF9TWVNDT05GSUcpOworCXRpbWVvdXQgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcygyMCk7CisJZG8geworCQlsID0gbWJveF9yZWFkX3JlZyhNQUlMQk9YX1NZU1NUQVRVUyk7CisJCWlmIChsICYgUkVTRVRET05FKQorCQkJYnJlYWs7CisJfSB3aGlsZSAoIXRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW91dCkpOworCisJaWYgKCEobCAmIFJFU0VURE9ORSkpIHsKKwkJcHJfZXJyKCJDYW4ndCB0YWtlIG1tdSBvdXQgb2YgcmVzZXRcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKIAlsID0gbWJveF9yZWFkX3JlZyhNQUlMQk9YX1JFVklTSU9OKTsKIAlwcl9pbmZvKCJvbWFwIG1haWxib3ggcmV2ICVkLiVkXG4iLCAobCAmIDB4ZjApID4+IDQsIChsICYgMHgwZikpOwogCi0JLyogc2V0IHNtYXJ0LWlkbGUgJiBhdXRvaWRsZSAqLwotCWwgPSBtYm94X3JlYWRfcmVnKE1BSUxCT1hfU1lTQ09ORklHKTsKLQlsIHw9IDB4MDAwMDAwMTE7CisJbCA9IFNNQVJUSURMRSB8IEFVVE9JRExFOwogCW1ib3hfd3JpdGVfcmVnKGwsIE1BSUxCT1hfU1lTQ09ORklHKTsKIAogCW9tYXAyX21ib3hfZW5hYmxlX2lycShtYm94LCBJUlFfUlgpOwpAQCAtMTU2LDYgKzE3Niw5IEBACiAJdTMyIGJpdCA9IChpcnEgPT0gSVJRX1RYKSA/IHAtPm5vdGZ1bGxfYml0IDogcC0+bmV3bXNnX2JpdDsKIAogCW1ib3hfd3JpdGVfcmVnKGJpdCwgcC0+aXJxc3RhdHVzKTsKKworCS8qIEZsdXNoIHBvc3RlZCB3cml0ZSBmb3IgaXJxIHN0YXR1cyB0byBhdm9pZCBzcHVyaW91cyBpbnRlcnJ1cHRzICovCisJbWJveF9yZWFkX3JlZyhwLT5pcnFzdGF0dXMpOwogfQogCiBzdGF0aWMgaW50IG9tYXAyX21ib3hfaXNfaXJxKHN0cnVjdCBvbWFwX21ib3ggKm1ib3gsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL211eC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9tdXguYwppbmRleCAyZGFhNTk1Li5iNWZhYzMyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL211eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvbXV4LmMKQEAgLTQ2MCw2ICs0NjAsOCBAQAogCQlPTUFQMzRYWF9NVVhfTU9ERTQgfCBPTUFQMzRYWF9QSU5fSU5QVVQpCiBNVVhfQ0ZHXzM0WFgoIkFGMjJfMzRYWF9HUElPOSIsIDB4YTE4LAogCQlPTUFQMzRYWF9NVVhfTU9ERTQgfCBPTUFQMzRYWF9QSU5fSU5QVVQpCitNVVhfQ0ZHXzM0WFgoIkFHOV8zNFhYX0dQSU8yMyIsIDB4NWVlLAorCQlPTUFQMzRYWF9NVVhfTU9ERTQgfCBPTUFQMzRYWF9QSU5fSU5QVVQpCiBNVVhfQ0ZHXzM0WFgoIkFIOF8zNFhYX0dQSU8yOSIsIDB4NWZhLAogCQlPTUFQMzRYWF9NVVhfTU9ERTQgfCBPTUFQMzRYWF9QSU5fSU5QVVQpCiBNVVhfQ0ZHXzM0WFgoIlU4XzM0WFhfR1BJTzU0X09VVCIsIDB4MGI0LApAQCAtNDcyLDYgKzQ3NCw4IEBACiAJCU9NQVAzNFhYX01VWF9NT0RFNCB8IE9NQVAzNFhYX1BJTl9PVVRQVVQpCiBNVVhfQ0ZHXzM0WFgoIkFHNF8zNFhYX0dQSU8xMzRfT1VUIiwgMHgxNjAsCiAJCU9NQVAzNFhYX01VWF9NT0RFNCB8IE9NQVAzNFhYX1BJTl9PVVRQVVQpCitNVVhfQ0ZHXzM0WFgoIkFGNF8zNFhYX0dQSU8xMzVfT1VUIiwgMHgxNjIsCisJCU9NQVAzNFhYX01VWF9NT0RFNCB8IE9NQVAzNFhYX1BJTl9PVVRQVVQpCiBNVVhfQ0ZHXzM0WFgoIkFFNF8zNFhYX0dQSU8xMzZfT1VUIiwgMHgxNjQsCiAJCU9NQVAzNFhYX01VWF9NT0RFNCB8IE9NQVAzNFhYX1BJTl9PVVRQVVQpCiBNVVhfQ0ZHXzM0WFgoIkFGNl8zNFhYX0dQSU8xNDBfVVAiLCAweDE2YywKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvcG0tZGVidWcuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcG0tZGVidWcuYwppbmRleCAxYjRjMTYwLi4yZmM0ZDZhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL3BtLWRlYnVnLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wbS1kZWJ1Zy5jCkBAIC01NDEsNyArNTQxLDcgQEAKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogb25seSBPTUFQMyBzdXBwb3J0ZWRcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQotCQkKKwogCWQgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoInBtX2RlYnVnIiwgTlVMTCk7CiAJaWYgKElTX0VSUihkKSkKIAkJcmV0dXJuIFBUUl9FUlIoZCk7CkBAIC01NTEsNyArNTUxLDcgQEAKIAkodm9pZCkgZGVidWdmc19jcmVhdGVfZmlsZSgidGltZSIsIFNfSVJVR08sCiAJCWQsICh2b2lkICopREVCVUdfRklMRV9USU1FUlMsICZkZWJ1Z19mb3BzKTsKIAotCXB3cmRtX2Zvcl9lYWNoKHB3cmRtc19zZXR1cCwgKHZvaWQgKilkKTsKKwlwd3JkbV9mb3JfZWFjaF9ub2xvY2socHdyZG1zX3NldHVwLCAodm9pZCAqKWQpOwogCiAJcG1fZGJnX2RpciA9IGRlYnVnZnNfY3JlYXRlX2RpcigicmVnaXN0ZXJzIiwgZCk7CiAJaWYgKElTX0VSUihwbV9kYmdfZGlyKSkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvcG0zNHh4LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3BtMzR4eC5jCmluZGV4IDBmZjVhNmMuLjg5NDYzMTkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvcG0zNHh4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTM0eHguYwpAQCAtNTEsOTcgKzUxLDExMiBAQAogCiBzdGF0aWMgc3RydWN0IHBvd2VyZG9tYWluICptcHVfcHdyZG07CiAKLS8qIFBSQ00gSW50ZXJydXB0IEhhbmRsZXIgZm9yIHdha2V1cHMgKi8KKy8qCisgKiBQUkNNIEludGVycnVwdCBIYW5kbGVyIEhlbHBlciBGdW5jdGlvbgorICoKKyAqIFRoZSBwdXJwb3NlIG9mIHRoaXMgZnVuY3Rpb24gaXMgdG8gY2xlYXIgYW55IHdha2UtdXAgZXZlbnRzIGxhdGNoZWQKKyAqIGluIHRoZSBQUkNNIFBNX1dLU1RfeCByZWdpc3RlcnMuIEl0IGlzIHBvc3NpYmxlIHRoYXQgYSB3YWtlLXVwIGV2ZW50CisgKiBtYXkgb2NjdXIgd2hpbHN0IGF0dGVtcHRpbmcgdG8gY2xlYXIgYSBQTV9XS1NUX3ggcmVnaXN0ZXIgYW5kIHRodXMKKyAqIHNldCBhbm90aGVyIGJpdCBpbiB0aGlzIHJlZ2lzdGVyLiBBIHdoaWxlIGxvb3AgaXMgdXNlZCB0byBlbnN1cmUKKyAqIHRoYXQgYW55IHBlcmlwaGVyYWwgd2FrZS11cCBldmVudHMgb2NjdXJyaW5nIHdoaWxlIGF0dGVtcHRpbmcgdG8KKyAqIGNsZWFyIHRoZSBQTV9XS1NUX3ggYXJlIGRldGVjdGVkIGFuZCBjbGVhcmVkLgorICovCitzdGF0aWMgaW50IHByY21fY2xlYXJfbW9kX2lycXMoczE2IG1vZHVsZSwgdTggcmVncykKK3sKKwl1MzIgd2tzdCwgZmNsaywgaWNsaywgY2xrZW47CisJdTE2IHdrc3Rfb2ZmID0gKHJlZ3MgPT0gMykgPyBPTUFQMzQzMEVTMl9QTV9XS1NUMyA6IFBNX1dLU1QxOworCXUxNiBmY2xrX29mZiA9IChyZWdzID09IDMpID8gT01BUDM0MzBFUzJfQ01fRkNMS0VOMyA6IENNX0ZDTEtFTjE7CisJdTE2IGljbGtfb2ZmID0gKHJlZ3MgPT0gMykgPyBDTV9JQ0xLRU4zIDogQ01fSUNMS0VOMTsKKwl1MTYgZ3Jwc2VsX29mZiA9IChyZWdzID09IDMpID8KKwkJT01BUDM0MzBFUzJfUE1fTVBVR1JQU0VMMyA6IE9NQVAzNDMwX1BNX01QVUdSUFNFTDsKKwlpbnQgYyA9IDA7CisKKwl3a3N0ID0gcHJtX3JlYWRfbW9kX3JlZyhtb2R1bGUsIHdrc3Rfb2ZmKTsKKwl3a3N0ICY9IHBybV9yZWFkX21vZF9yZWcobW9kdWxlLCBncnBzZWxfb2ZmKTsKKwlpZiAod2tzdCkgeworCQlpY2xrID0gY21fcmVhZF9tb2RfcmVnKG1vZHVsZSwgaWNsa19vZmYpOworCQlmY2xrID0gY21fcmVhZF9tb2RfcmVnKG1vZHVsZSwgZmNsa19vZmYpOworCQl3aGlsZSAod2tzdCkgeworCQkJY2xrZW4gPSB3a3N0OworCQkJY21fc2V0X21vZF9yZWdfYml0cyhjbGtlbiwgbW9kdWxlLCBpY2xrX29mZik7CisJCQkvKgorCQkJICogRm9yIFVTQkhPU1QsIHdlIGRvbid0IGtub3cgd2hldGhlciBIT1NUMSBvcgorCQkJICogSE9TVDIgd29rZSB1cyB1cCwgc28gZW5hYmxlIGJvdGggZi1jbG9ja3MKKwkJCSAqLworCQkJaWYgKG1vZHVsZSA9PSBPTUFQMzQzMEVTMl9VU0JIT1NUX01PRCkKKwkJCQljbGtlbiB8PSAxIDw8IE9NQVAzNDMwRVMyX0VOX1VTQkhPU1QyX1NISUZUOworCQkJY21fc2V0X21vZF9yZWdfYml0cyhjbGtlbiwgbW9kdWxlLCBmY2xrX29mZik7CisJCQlwcm1fd3JpdGVfbW9kX3JlZyh3a3N0LCBtb2R1bGUsIHdrc3Rfb2ZmKTsKKwkJCXdrc3QgPSBwcm1fcmVhZF9tb2RfcmVnKG1vZHVsZSwgd2tzdF9vZmYpOworCQkJYysrOworCQl9CisJCWNtX3dyaXRlX21vZF9yZWcoaWNsaywgbW9kdWxlLCBpY2xrX29mZik7CisJCWNtX3dyaXRlX21vZF9yZWcoZmNsaywgbW9kdWxlLCBmY2xrX29mZik7CisJfQorCisJcmV0dXJuIGM7Cit9CisKK3N0YXRpYyBpbnQgX3ByY21faW50X2hhbmRsZV93YWtldXAodm9pZCkKK3sKKwlpbnQgYzsKKworCWMgPSBwcmNtX2NsZWFyX21vZF9pcnFzKFdLVVBfTU9ELCAxKTsKKwljICs9IHByY21fY2xlYXJfbW9kX2lycXMoQ09SRV9NT0QsIDEpOworCWMgKz0gcHJjbV9jbGVhcl9tb2RfaXJxcyhPTUFQMzQzMF9QRVJfTU9ELCAxKTsKKwlpZiAob21hcF9yZXYoKSA+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+cGxhdGZvcm1fZGF0YTsKLQotCWlmICgoMSA8PCB2ZGQpICYgcF9kLT5vY3JfbWFzaykgewotCQlkZXZfZGJnKGRldiwgInBvd2VyIG9uXG4iKTsKLQkJZ3Bpb19zZXRfdmFsdWUoR1BJTzEwNV9NTUNfUE9XRVIsIDApOwotCX0gZWxzZSB7Ci0JCWdwaW9fc2V0X3ZhbHVlKEdQSU8xMDVfTU1DX1BPV0VSLCAxKTsKLQkJZGV2X2RiZyhkZXYsICJwb3dlciBvZmZcbiIpOwotCX0KLX0KLQotc3RhdGljIHZvaWQgY214MjcwX21jaV9leGl0KHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKLXsKLQlmcmVlX2lycShDTVgyNzBfTU1DX0lSUSwgZGF0YSk7Ci0JZ3Bpb19mcmVlKEdQSU8xMDVfTU1DX1BPV0VSKTsKLX0KLQogc3RhdGljIHN0cnVjdCBweGFtY2lfcGxhdGZvcm1fZGF0YSBjbXgyNzBfbWNpX3BsYXRmb3JtX2RhdGEgPSB7Ci0JLm9jcl9tYXNrCT0gTU1DX1ZERF8zMl8zM3xNTUNfVkREXzMzXzM0LAotCS5pbml0IAkJPSBjbXgyNzBfbWNpX2luaXQsCi0JLnNldHBvd2VyIAk9IGNteDI3MF9tY2lfc2V0cG93ZXIsCi0JLmV4aXQJCT0gY214MjcwX21jaV9leGl0LAorCS5vY3JfbWFzawkJPSBNTUNfVkREXzMyXzMzfE1NQ19WRERfMzNfMzQsCisJLmdwaW9fY2FyZF9kZXRlY3QJPSBHUElPODNfTU1DX0lSUSwKKwkuZ3Bpb19jYXJkX3JvCQk9IC0xLAorCS5ncGlvX3Bvd2VyCQk9IEdQSU8xMDVfTU1DX1BPV0VSLAorCS5ncGlvX3Bvd2VyX2ludmVydAk9IDEsCiB9OwogCiBzdGF0aWMgdm9pZCBfX2luaXQgY214MjcwX2luaXRfbW1jKHZvaWQpCkBAIC0zMzEsNiArMjk4LDEwMCBAQAogc3RhdGljIGlubGluZSB2b2lkIGNteDI3MF9pbml0X21tYyh2b2lkKSB7fQogI2VuZGlmCiAKKyNpZiBkZWZpbmVkKENPTkZJR19TUElfUFhBMlhYKSB8fCBkZWZpbmVkKENPTkZJR19TUElfUFhBMlhYX01PRFVMRSkKK3N0YXRpYyBzdHJ1Y3QgcHhhMnh4X3NwaV9tYXN0ZXIgY21feDI3MF9zcGlfaW5mbyA9IHsKKwkubnVtX2NoaXBzZWxlY3QJPSAxLAorCS5lbmFibGVfZG1hCT0gMSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcHhhMnh4X3NwaV9jaGlwIGNtX3gyNzBfbGliZXJ0YXNfY2hpcCA9IHsKKwkucnhfdGhyZXNob2xkCT0gMSwKKwkudHhfdGhyZXNob2xkCT0gMSwKKwkudGltZW91dAk9IDEwMDAsCisJLmdwaW9fY3MJPSAxNCwKK307CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGNtX3gyNzBfbGliZXJ0YXNfcGluX2NvbmZpZ1tdID0geworCS8qIFNTUDIgKi8KKwlHUElPMTlfU1NQMl9TQ0xLLAorCUdQSU8xNF9HUElPLAorCUdQSU84N19TU1AyX1RYRCwKKwlHUElPODhfU1NQMl9SWEQsCisKK307CisKK3N0YXRpYyBpbnQgY21feDI3MF9saWJlcnRhc19zZXR1cChzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQoreworCWludCBlcnIgPSBncGlvX3JlcXVlc3QoR1BJTzE5X1dMQU5fU1RSQVAsICJXTEFOIFNUUkFQIik7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWVyciA9IGdwaW9fcmVxdWVzdChHUElPMTAyX1dMQU5fUlNULCAiV0xBTiBSU1QiKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9mcmVlX3N0cmFwOworCisJZXJyID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU8xMDJfV0xBTl9SU1QsIDApOworCWlmIChlcnIpCisJCWdvdG8gZXJyX2ZyZWVfc3RyYXA7CisJbXNsZWVwKDEwMCk7CisKKwllcnIgPSBncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJTzE5X1dMQU5fU1RSQVAsIDEpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX2ZyZWVfc3RyYXA7CisJbXNsZWVwKDEwMCk7CisKKwlweGEyeHhfbWZwX2NvbmZpZyhBUlJBWV9BTkRfU0laRShjbV94MjcwX2xpYmVydGFzX3Bpbl9jb25maWcpKTsKKworCWdwaW9fc2V0X3ZhbHVlKEdQSU8xMDJfV0xBTl9SU1QsIDEpOworCW1zbGVlcCgxMDApOworCisJc3BpLT5iaXRzX3Blcl93b3JkID0gMTY7CisJc3BpX3NldHVwKHNwaSk7CisKKwlyZXR1cm4gMDsKKworZXJyX2ZyZWVfc3RyYXA6CisJZ3Bpb19mcmVlKEdQSU8xOV9XTEFOX1NUUkFQKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgY21feDI3MF9saWJlcnRhc190ZWFyZG93bihzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQoreworCWdwaW9fc2V0X3ZhbHVlKEdQSU8xMDJfV0xBTl9SU1QsIDApOworCWdwaW9fZnJlZShHUElPMTAyX1dMQU5fUlNUKTsKKwlncGlvX2ZyZWUoR1BJTzE5X1dMQU5fU1RSQVApOworCisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBsaWJlcnRhc19zcGlfcGxhdGZvcm1fZGF0YSBjbV94MjcwX2xpYmVydGFzX3BkYXRhID0geworCS51c2VfZHVtbXlfd3JpdGVzCT0gMSwKKwkuc2V0dXAJCQk9IGNtX3gyNzBfbGliZXJ0YXNfc2V0dXAsCisJLnRlYXJkb3duCQk9IGNtX3gyNzBfbGliZXJ0YXNfdGVhcmRvd24sCit9OworCitzdGF0aWMgc3RydWN0IHNwaV9ib2FyZF9pbmZvIGNtX3gyNzBfc3BpX2RldmljZXNbXSBfX2luaXRkYXRhID0geworCXsKKwkJLm1vZGFsaWFzCQk9ICJsaWJlcnRhc19zcGkiLAorCQkubWF4X3NwZWVkX2h6CQk9IDEzMDAwMDAwLAorCQkuYnVzX251bQkJPSAyLAorCQkuaXJxCQkJPSBncGlvX3RvX2lycSg5NSksCisJCS5jaGlwX3NlbGVjdAkJPSAwLAorCQkuY29udHJvbGxlcl9kYXRhCT0gJmNtX3gyNzBfbGliZXJ0YXNfY2hpcCwKKwkJLnBsYXRmb3JtX2RhdGEJCT0gJmNtX3gyNzBfbGliZXJ0YXNfcGRhdGEsCisJfSwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBjbXgyNzBfaW5pdF9zcGkodm9pZCkKK3sKKwlweGEyeHhfc2V0X3NwaV9pbmZvKDIsICZjbV94MjcwX3NwaV9pbmZvKTsKKwlzcGlfcmVnaXN0ZXJfYm9hcmRfaW5mbyhBUlJBWV9BTkRfU0laRShjbV94MjcwX3NwaV9kZXZpY2VzKSk7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIGNteDI3MF9pbml0X3NwaSh2b2lkKSB7fQorI2VuZGlmCisKIHZvaWQgX19pbml0IGNteDI3MF9pbml0KHZvaWQpCiB7CiAJcHhhMnh4X21mcF9jb25maWcoQVJSQVlfQU5EX1NJWkUoY214MjcwX3Bpbl9jb25maWcpKTsKQEAgLTM0Myw0ICs0MDQsNSBAQAogCWNteDI3MF9pbml0X21tYygpOwogCWNteDI3MF9pbml0X29oY2koKTsKIAljbXgyNzBfaW5pdF8yNzAwRygpOworCWNteDI3MF9pbml0X3NwaSgpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvY20teDMwMC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvY20teDMwMC5jCmluZGV4IDQ2NWRhMjYuLjEwMjkxNmYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2NtLXgzMDAuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9jbS14MzAwLmMKQEAgLTQzLDEwICs0MywxMCBAQAogCiAjZGVmaW5lIENNX1gzMDBfRVRIX1BIWVMJMHgwODAwMDAxMAogCi0jZGVmaW5lIEdQSU84Ml9NTUMyX0lSUQkJKDgyKQotI2RlZmluZSBHUElPODVfTU1DMl9XUAkJKDg1KQorI2RlZmluZSBHUElPODJfTU1DX0lSUQkJKDgyKQorI2RlZmluZSBHUElPODVfTU1DX1dQCQkoODUpCiAKLSNkZWZpbmUJQ01fWDMwMF9NTUMyX0lSUQlJUlFfR1BJTyhHUElPODJfTU1DMl9JUlEpCisjZGVmaW5lCUNNX1gzMDBfTU1DX0lSUQkJSVJRX0dQSU8oR1BJTzgyX01NQ19JUlEpCiAKICNkZWZpbmUgR1BJTzk1X1JUQ19DUwkJKDk1KQogI2RlZmluZSBHUElPOTZfUlRDX1dSCQkoOTYpCkBAIC0yOTIsODIgKzI5MiwzNSBAQAogI2VuZGlmCiAKICNpZiBkZWZpbmVkKENPTkZJR19NTUMpIHx8IGRlZmluZWQoQ09ORklHX01NQ19NT0RVTEUpCi0vKiBUaGUgZmlyc3QgTU1DIHNsb3Qgb2YgQ00tWDMwMCBpcyBoYXJkd2lyZWQgdG8gTGliZXJ0YXMgY2FyZCBhbmQgaGFzCi0gICBubyBkZXRlY3Rpb24vcm8gcGlucyAqLwotc3RhdGljIGludCBjbV94MzAwX21jaV9pbml0KHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCSAgICBpcnFfaGFuZGxlcl90IGNtX3gzMDBfZGV0ZWN0X2ludCwKLQkJCSAgICB2b2lkICpkYXRhKQotewotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBjbV94MzAwX21jaV9leGl0KHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKLXsKLX0KLQogc3RhdGljIHN0cnVjdCBweGFtY2lfcGxhdGZvcm1fZGF0YSBjbV94MzAwX21jaV9wbGF0Zm9ybV9kYXRhID0gewotCS5kZXRlY3RfZGVsYXkJPSAyMCwKLQkub2NyX21hc2sJPSBNTUNfVkREXzMyXzMzfE1NQ19WRERfMzNfMzQsCi0JLmluaXQgCQk9IGNtX3gzMDBfbWNpX2luaXQsCi0JLmV4aXQJCT0gY21feDMwMF9tY2lfZXhpdCwKKwkuZGV0ZWN0X2RlbGF5CQk9IDIwLAorCS5vY3JfbWFzawkJPSBNTUNfVkREXzMyXzMzfE1NQ19WRERfMzNfMzQsCisJLmdwaW9fY2FyZF9kZXRlY3QJPSBHUElPODJfTU1DX0lSUSwKKwkuZ3Bpb19jYXJkX3JvCQk9IEdQSU84NV9NTUNfV1AsCisJLmdwaW9fcG93ZXIJCT0gLTEsCiB9OwogCi1zdGF0aWMgaW50IGNtX3gzMDBfbWNpMl9ybyhzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0JcmV0dXJuIGdwaW9fZ2V0X3ZhbHVlKEdQSU84NV9NTUMyX1dQKTsKLX0KLQorLyogVGhlIHNlY29uZCBNTUMgc2xvdCBvZiBDTS1YMzAwIGlzIGhhcmR3aXJlZCB0byBMaWJlcnRhcyBjYXJkIGFuZCBoYXMKKyAgIG5vIGRldGVjdGlvbi9ybyBwaW5zICovCiBzdGF0aWMgaW50IGNtX3gzMDBfbWNpMl9pbml0KHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCSAgICAgaXJxX2hhbmRsZXJfdCBjbV94MzAwX2RldGVjdF9pbnQsCi0JCQkgICAgIHZvaWQgKmRhdGEpCisJdm9pZCAqZGF0YSkKIHsKLQlpbnQgZXJyOwotCi0JLyoKLQkgKiBzZXR1cCBHUElPIGZvciBDTS1YMzAwIE1NQyBjb250cm9sbGVyCi0JICovCi0JZXJyID0gZ3Bpb19yZXF1ZXN0KEdQSU84Ml9NTUMyX0lSUSwgIm1tYyBjYXJkIGRldGVjdCIpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyX3JlcXVlc3RfY2Q7Ci0JZ3Bpb19kaXJlY3Rpb25faW5wdXQoR1BJTzgyX01NQzJfSVJRKTsKLQotCWVyciA9IGdwaW9fcmVxdWVzdChHUElPODVfTU1DMl9XUCwgIm1tYyB3cml0ZSBwcm90ZWN0Iik7Ci0JaWYgKGVycikKLQkJZ290byBlcnJfcmVxdWVzdF93cDsKLQlncGlvX2RpcmVjdGlvbl9pbnB1dChHUElPODVfTU1DMl9XUCk7Ci0KLQllcnIgPSByZXF1ZXN0X2lycShDTV9YMzAwX01NQzJfSVJRLCBjbV94MzAwX2RldGVjdF9pbnQsCi0JCQkgIElSUUZfVFJJR0dFUl9SSVNJTkcgfCBJUlFGX1RSSUdHRVJfRkFMTElORywKLQkJCSAgIk1NQyBjYXJkIGRldGVjdCIsIGRhdGEpOwotCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogTU1DL1NEL1NESU86ICIKLQkJCQkiY2FuJ3QgcmVxdWVzdCBjYXJkIGRldGVjdCBJUlFcbiIsIF9fZnVuY19fKTsKLQkJZ290byBlcnJfcmVxdWVzdF9pcnE7Ci0JfQotCiAJcmV0dXJuIDA7Ci0KLWVycl9yZXF1ZXN0X2lycToKLQlncGlvX2ZyZWUoR1BJTzg1X01NQzJfV1ApOwotZXJyX3JlcXVlc3Rfd3A6Ci0JZ3Bpb19mcmVlKEdQSU84Ml9NTUMyX0lSUSk7Ci1lcnJfcmVxdWVzdF9jZDoKLQlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgdm9pZCBjbV94MzAwX21jaTJfZXhpdChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCiB7Ci0JZnJlZV9pcnEoQ01fWDMwMF9NTUMyX0lSUSwgZGF0YSk7Ci0JZ3Bpb19mcmVlKEdQSU84Ml9NTUMyX0lSUSk7Ci0JZ3Bpb19mcmVlKEdQSU84NV9NTUMyX1dQKTsKIH0KIAogc3RhdGljIHN0cnVjdCBweGFtY2lfcGxhdGZvcm1fZGF0YSBjbV94MzAwX21jaTJfcGxhdGZvcm1fZGF0YSA9IHsKLQkuZGV0ZWN0X2RlbGF5CT0gMjAsCi0JLm9jcl9tYXNrCT0gTU1DX1ZERF8zMl8zM3xNTUNfVkREXzMzXzM0LAotCS5pbml0IAkJPSBjbV94MzAwX21jaTJfaW5pdCwKLQkuZXhpdAkJPSBjbV94MzAwX21jaTJfZXhpdCwKLQkuZ2V0X3JvCQk9IGNtX3gzMDBfbWNpMl9ybywKKwkuZGV0ZWN0X2RlbGF5CQk9IDIwLAorCS5vY3JfbWFzawkJPSBNTUNfVkREXzMyXzMzfE1NQ19WRERfMzNfMzQsCisJLmluaXQgCQkJPSBjbV94MzAwX21jaTJfaW5pdCwKKwkuZXhpdAkJCT0gY21feDMwMF9tY2kyX2V4aXQsCisJLmdwaW9fY2FyZF9kZXRlY3QJPSAtMSwKKwkuZ3Bpb19jYXJkX3JvCQk9IC0xLAorCS5ncGlvX3Bvd2VyCQk9IC0xLAogfTsKIAogc3RhdGljIHZvaWQgX19pbml0IGNtX3gzMDBfaW5pdF9tbWModm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2NvbGlicmktcHhhMzAwLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9jb2xpYnJpLXB4YTMwMC5jCmluZGV4IDdjOWMzNGMuLjM3YzIzOWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2NvbGlicmktcHhhMzAwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvY29saWJyaS1weGEzMDAuYwpAQCAtMTcyLDYgKzE3Miw3IEBACiB7CiAJY29saWJyaV9weGEzMDBfaW5pdF9ldGgoKTsKIAljb2xpYnJpX3B4YTMwMF9pbml0X29oY2koKTsKKwljb2xpYnJpX3B4YTN4eF9pbml0X25hbmQoKTsKIAljb2xpYnJpX3B4YTMwMF9pbml0X2xjZCgpOwogCWNvbGlicmlfcHhhM3h4X2luaXRfbGNkKG1mcF90b19ncGlvKEdQSU8zOV9HUElPKSk7CiAJY29saWJyaV9weGEzMTBfaW5pdF9hYzk3KCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9jb2xpYnJpLXB4YTMyMC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvY29saWJyaS1weGEzMjAuYwppbmRleCBhMThkMzdiLi40OTQ1NzI4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9jb2xpYnJpLXB4YTMyMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2NvbGlicmktcHhhMzIwLmMKQEAgLTE2NCwxNSArMTY0LDQ4IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgY29saWJyaV9weGEzMjBfaW5pdF9hYzk3KHZvaWQpIHt9CiAjZW5kaWYKIAorLyoKKyAqIFRoZSBmb2xsb3dpbmcgY29uZmlndXJhdGlvbiBpcyB2ZXJpZmllZCB0byB3b3JrIHdpdGggdGhlIFRvcmFkZXggT3JjaGlkCisgKiBjYXJyaWVyIGJvYXJkCisgKi8KK3N0YXRpYyBtZnBfY2ZnX3QgY29saWJyaV9weGEzMjBfdWFydF9waW5fY29uZmlnW10gX19pbml0ZGF0YSA9IHsKKwkvKiBVQVJUIDEgY29uZmlndXJhdGlvbiAobWF5IGJlIHNldCBieSBib290bG9hZGVyKSAqLworCUdQSU85OV9VQVJUMV9DVFMsCisJR1BJTzEwNF9VQVJUMV9SVFMsCisJR1BJTzk3X1VBUlQxX1JYRCwKKwlHUElPOThfVUFSVDFfVFhELAorCUdQSU8xMDFfVUFSVDFfRFRSLAorCUdQSU8xMDNfVUFSVDFfRFNSLAorCUdQSU8xMDBfVUFSVDFfRENELAorCUdQSU8xMDJfVUFSVDFfUkksCisKKwkvKiBVQVJUIDIgY29uZmlndXJhdGlvbiAqLworCUdQSU8xMDlfVUFSVDJfQ1RTLAorCUdQSU8xMTJfVUFSVDJfUlRTLAorCUdQSU8xMTBfVUFSVDJfUlhELAorCUdQSU8xMTFfVUFSVDJfVFhELAorCisJLyogVUFSVCAzIGNvbmZpZ3VyYXRpb24gKi8KKwlHUElPMzBfVUFSVDNfUlhELAorCUdQSU8zMV9VQVJUM19UWEQsCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgY29saWJyaV9weGEzMjBfaW5pdF91YXJ0KHZvaWQpCit7CisJcHhhM3h4X21mcF9jb25maWcoQVJSQVlfQU5EX1NJWkUoY29saWJyaV9weGEzMjBfdWFydF9waW5fY29uZmlnKSk7Cit9CisKIHZvaWQgX19pbml0IGNvbGlicmlfcHhhMzIwX2luaXQodm9pZCkKIHsKIAljb2xpYnJpX3B4YTMyMF9pbml0X2V0aCgpOwogCWNvbGlicmlfcHhhMzIwX2luaXRfb2hjaSgpOworCWNvbGlicmlfcHhhM3h4X2luaXRfbmFuZCgpOwogCWNvbGlicmlfcHhhMzIwX2luaXRfbGNkKCk7CiAJY29saWJyaV9weGEzeHhfaW5pdF9sY2QobWZwX3RvX2dwaW8oR1BJTzQ5X0dQSU8pKTsKIAljb2xpYnJpX3B4YTMyMF9pbml0X2FjOTcoKTsKIAljb2xpYnJpX3B4YTN4eF9pbml0X21tYyhBUlJBWV9BTkRfU0laRShjb2xpYnJpX3B4YTMyMF9tbWNfcGluX2NvbmZpZyksCiAJCQkJbWZwX3RvX2dwaW8oTUZQX1BJTl9HUElPMjgpKTsKKwljb2xpYnJpX3B4YTMyMF9pbml0X3VhcnQoKTsKIH0KIAogTUFDSElORV9TVEFSVChDT0xJQlJJMzIwLCAiVG9yYWRleCBDb2xpYnJpIFBYQTMyMCIpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9jb2xpYnJpLXB4YTN4eC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvY29saWJyaS1weGEzeHguYwppbmRleCBlYTM0ZTM0Li5lZmViYWY0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9jb2xpYnJpLXB4YTN4eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2NvbGlicmktcHhhM3h4LmMKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlIDxtYWNoL2NvbGlicmkuaD4KICNpbmNsdWRlIDxtYWNoL21tYy5oPgogI2luY2x1ZGUgPG1hY2gvcHhhZmIuaD4KKyNpbmNsdWRlIDxtYWNoL3B4YTN4eF9uYW5kLmg+CiAKICNpbmNsdWRlICJnZW5lcmljLmgiCiAjaW5jbHVkZSAiZGV2aWNlcy5oIgpAQCAtOTUsMTAgKzk2LDEzIEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcHhhbWNpX3BsYXRmb3JtX2RhdGEgY29saWJyaV9weGEzeHhfbWNpX3BsYXRmb3JtX2RhdGEgPSB7Ci0JLmRldGVjdF9kZWxheQk9IDIwLAotCS5vY3JfbWFzawk9IE1NQ19WRERfMzJfMzMgfCBNTUNfVkREXzMzXzM0LAotCS5pbml0CQk9IGNvbGlicmlfcHhhM3h4X21jaV9pbml0LAotCS5leGl0CQk9IGNvbGlicmlfcHhhM3h4X21jaV9leGl0LAorCS5kZXRlY3RfZGVsYXkJCT0gMjAsCisJLm9jcl9tYXNrCQk9IE1NQ19WRERfMzJfMzMgfCBNTUNfVkREXzMzXzM0LAorCS5pbml0CQkJPSBjb2xpYnJpX3B4YTN4eF9tY2lfaW5pdCwKKwkuZXhpdAkJCT0gY29saWJyaV9weGEzeHhfbWNpX2V4aXQsCisJLmdwaW9fY2FyZF9kZXRlY3QJPSAtMSwKKwkuZ3Bpb19jYXJkX3JvCQk9IC0xLAorCS5ncGlvX3Bvd2VyCQk9IC0xLAogfTsKIAogdm9pZCBfX2luaXQgY29saWJyaV9weGEzeHhfaW5pdF9tbWMobWZwX2NmZ190ICpwaW5zLCBpbnQgbGVuLCBpbnQgZGV0ZWN0X3BpbikKQEAgLTE1NCwzICsxNTgsNDMgQEAKIH0KICNlbmRpZgogCisjaWYgZGVmaW5lZChDT05GSUdfTVREX05BTkRfUFhBM3h4KSB8fCBkZWZpbmVkKENPTkZJR19NVERfTkFORF9QWEEzeHhfTU9EVUxFKQorc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIGNvbGlicmlfbmFuZF9wYXJ0aXRpb25zW10gPSB7CisJeworCQkubmFtZSAgICAgICAgPSAiYm9vdGxvYWRlciIsCisJCS5vZmZzZXQgICAgICA9IDAsCisJCS5zaXplICAgICAgICA9IFNaXzUxMkssCisJCS5tYXNrX2ZsYWdzICA9IE1URF9XUklURUFCTEUsIC8qIGZvcmNlIHJlYWQtb25seSAqLworCX0sCisJeworCQkubmFtZSAgICAgICAgPSAia2VybmVsIiwKKwkJLm9mZnNldCAgICAgID0gTVREUEFSVF9PRlNfQVBQRU5ELAorCQkuc2l6ZSAgICAgICAgPSBTWl80TSwKKwkJLm1hc2tfZmxhZ3MgID0gTVREX1dSSVRFQUJMRSwgLyogZm9yY2UgcmVhZC1vbmx5ICovCisJfSwKKwl7CisJCS5uYW1lICAgICAgICA9ICJyZXNlcnZlZCIsCisJCS5vZmZzZXQgICAgICA9IE1URFBBUlRfT0ZTX0FQUEVORCwKKwkJLnNpemUgICAgICAgID0gU1pfMU0sCisJCS5tYXNrX2ZsYWdzICA9IE1URF9XUklURUFCTEUsIC8qIGZvcmNlIHJlYWQtb25seSAqLworCX0sCisJeworCQkubmFtZSAgICAgICAgPSAiZnMiLAorCQkub2Zmc2V0ICAgICAgPSBNVERQQVJUX09GU19BUFBFTkQsCisJCS5zaXplICAgICAgICA9IE1URFBBUlRfU0laX0ZVTEwsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcHhhM3h4X25hbmRfcGxhdGZvcm1fZGF0YSBjb2xpYnJpX25hbmRfaW5mbyA9IHsKKwkuZW5hYmxlX2FyYml0ZXIJPSAxLAorCS5rZWVwX2NvbmZpZwk9IDEsCisJLnBhcnRzCQk9IGNvbGlicmlfbmFuZF9wYXJ0aXRpb25zLAorCS5ucl9wYXJ0cwk9IEFSUkFZX1NJWkUoY29saWJyaV9uYW5kX3BhcnRpdGlvbnMpLAorfTsKKwordm9pZCBfX2luaXQgY29saWJyaV9weGEzeHhfaW5pdF9uYW5kKHZvaWQpCit7CisJcHhhM3h4X3NldF9uYW5kX2luZm8oJmNvbGlicmlfbmFuZF9pbmZvKTsKK30KKyNlbmRpZgorCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9jb3JnaS5jIGIvYXJjaC9hcm0vbWFjaC1weGEvY29yZ2kuYwppbmRleCA1MzYzZTFhLi5iNTM2YjVhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9jb3JnaS5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2NvcmdpLmMKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zcGkvYWRzNzg0Ni5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaS9jb3JnaV9sY2QuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvc2hhcnBzbC5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0L21hdHJpeF9rZXlwYWQuaD4KICNpbmNsdWRlIDx2aWRlby93MTAwZmIuaD4KIAogI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgpAQCAtMTA0LDYgKzEwNSwyOCBAQAogCUdQSU82X01NQ19DTEssCiAJR1BJTzhfTU1DX0NTMCwKIAorCS8qIEdQSU8gTWF0cml4IEtleXBhZCAqLworCUdQSU82Nl9HUElPLAkvKiBjb2x1bW4gMCAqLworCUdQSU82N19HUElPLAkvKiBjb2x1bW4gMSAqLworCUdQSU82OF9HUElPLAkvKiBjb2x1bW4gMiAqLworCUdQSU82OV9HUElPLAkvKiBjb2x1bW4gMyAqLworCUdQSU83MF9HUElPLAkvKiBjb2x1bW4gNCAqLworCUdQSU83MV9HUElPLAkvKiBjb2x1bW4gNSAqLworCUdQSU83Ml9HUElPLAkvKiBjb2x1bW4gNiAqLworCUdQSU83M19HUElPLAkvKiBjb2x1bW4gNyAqLworCUdQSU83NF9HUElPLAkvKiBjb2x1bW4gOCAqLworCUdQSU83NV9HUElPLAkvKiBjb2x1bW4gOSAqLworCUdQSU83Nl9HUElPLAkvKiBjb2x1bW4gMTAgKi8KKwlHUElPNzdfR1BJTywJLyogY29sdW1uIDExICovCisJR1BJTzU4X0dQSU8sCS8qIHJvdyAwICovCisJR1BJTzU5X0dQSU8sCS8qIHJvdyAxICovCisJR1BJTzYwX0dQSU8sCS8qIHJvdyAyICovCisJR1BJTzYxX0dQSU8sCS8qIHJvdyAzICovCisJR1BJTzYyX0dQSU8sCS8qIHJvdyA0ICovCisJR1BJTzYzX0dQSU8sCS8qIHJvdyA1ICovCisJR1BJTzY0X0dQSU8sCS8qIHJvdyA2ICovCisJR1BJTzY1X0dQSU8sCS8qIHJvdyA3ICovCisKIAkvKiBHUElPICovCiAJR1BJTzlfR1BJTywJLyogQ09SR0lfR1BJT19uU0RfREVURUNUICovCiAJR1BJTzdfR1BJTywJLyogQ09SR0lfR1BJT19uU0RfV1AgKi8KQEAgLTI2Nyw5ICsyOTAsMTE1IEBACiAvKgogICogQ29yZ2kgS2V5Ym9hcmQgRGV2aWNlCiAgKi8KKyNkZWZpbmUgQ09SR0lfS0VZX0NBTEVOREVSCUtFWV9GMQorI2RlZmluZSBDT1JHSV9LRVlfQUREUkVTUwlLRVlfRjIKKyNkZWZpbmUgQ09SR0lfS0VZX0ZOCQlLRVlfRjMKKyNkZWZpbmUgQ09SR0lfS0VZX0NBTkNFTAlLRVlfRjQKKyNkZWZpbmUgQ09SR0lfS0VZX09GRgkJS0VZX1NVU1BFTkQKKyNkZWZpbmUgQ09SR0lfS0VZX0VYT0sJCUtFWV9GNQorI2RlZmluZSBDT1JHSV9LRVlfRVhDQU5DRUwJS0VZX0Y2CisjZGVmaW5lIENPUkdJX0tFWV9FWEpPR0RPV04JS0VZX0Y3CisjZGVmaW5lIENPUkdJX0tFWV9FWEpPR1VQCUtFWV9GOAorI2RlZmluZSBDT1JHSV9LRVlfSkFQMQkJS0VZX0xFRlRDVFJMCisjZGVmaW5lIENPUkdJX0tFWV9KQVAyCQlLRVlfTEVGVEFMVAorI2RlZmluZSBDT1JHSV9LRVlfTUFJTAkJS0VZX0YxMAorI2RlZmluZSBDT1JHSV9LRVlfT0sJCUtFWV9GMTEKKyNkZWZpbmUgQ09SR0lfS0VZX01FTlUJCUtFWV9GMTIKKworc3RhdGljIGNvbnN0IHVpbnQzMl90IGNvcmdpa2JkX2tleW1hcFtdID0geworCUtFWSgwLCAxLCBLRVlfMSksCisJS0VZKDAsIDIsIEtFWV8zKSwKKwlLRVkoMCwgMywgS0VZXzUpLAorCUtFWSgwLCA0LCBLRVlfNiksCisJS0VZKDAsIDUsIEtFWV83KSwKKwlLRVkoMCwgNiwgS0VZXzkpLAorCUtFWSgwLCA3LCBLRVlfMCksCisJS0VZKDAsIDgsIEtFWV9CQUNLU1BBQ0UpLAorCUtFWSgxLCAxLCBLRVlfMiksCisJS0VZKDEsIDIsIEtFWV80KSwKKwlLRVkoMSwgMywgS0VZX1IpLAorCUtFWSgxLCA0LCBLRVlfWSksCisJS0VZKDEsIDUsIEtFWV84KSwKKwlLRVkoMSwgNiwgS0VZX0kpLAorCUtFWSgxLCA3LCBLRVlfTyksCisJS0VZKDEsIDgsIEtFWV9QKSwKKwlLRVkoMiwgMCwgS0VZX1RBQiksCisJS0VZKDIsIDEsIEtFWV9RKSwKKwlLRVkoMiwgMiwgS0VZX0UpLAorCUtFWSgyLCAzLCBLRVlfVCksCisJS0VZKDIsIDQsIEtFWV9HKSwKKwlLRVkoMiwgNSwgS0VZX1UpLAorCUtFWSgyLCA2LCBLRVlfSiksCisJS0VZKDIsIDcsIEtFWV9LKSwKKwlLRVkoMywgMCwgQ09SR0lfS0VZX0NBTEVOREVSKSwKKwlLRVkoMywgMSwgS0VZX1cpLAorCUtFWSgzLCAyLCBLRVlfUyksCisJS0VZKDMsIDMsIEtFWV9GKSwKKwlLRVkoMywgNCwgS0VZX1YpLAorCUtFWSgzLCA1LCBLRVlfSCksCisJS0VZKDMsIDYsIEtFWV9NKSwKKwlLRVkoMywgNywgS0VZX0wpLAorCUtFWSgzLCA5LCBLRVlfUklHSFRTSElGVCksCisJS0VZKDQsIDAsIENPUkdJX0tFWV9BRERSRVNTKSwKKwlLRVkoNCwgMSwgS0VZX0EpLAorCUtFWSg0LCAyLCBLRVlfRCksCisJS0VZKDQsIDMsIEtFWV9DKSwKKwlLRVkoNCwgNCwgS0VZX0IpLAorCUtFWSg0LCA1LCBLRVlfTiksCisJS0VZKDQsIDYsIEtFWV9ET1QpLAorCUtFWSg0LCA4LCBLRVlfRU5URVIpLAorCUtFWSg0LCAxMCwgS0VZX0xFRlRTSElGVCksCisJS0VZKDUsIDAsIENPUkdJX0tFWV9NQUlMKSwKKwlLRVkoNSwgMSwgS0VZX1opLAorCUtFWSg1LCAyLCBLRVlfWCksCisJS0VZKDUsIDMsIEtFWV9NSU5VUyksCisJS0VZKDUsIDQsIEtFWV9TUEFDRSksCisJS0VZKDUsIDUsIEtFWV9DT01NQSksCisJS0VZKDUsIDcsIEtFWV9VUCksCisJS0VZKDUsIDExLCBDT1JHSV9LRVlfRk4pLAorCUtFWSg2LCAwLCBLRVlfU1lTUlEpLAorCUtFWSg2LCAxLCBDT1JHSV9LRVlfSkFQMSksCisJS0VZKDYsIDIsIENPUkdJX0tFWV9KQVAyKSwKKwlLRVkoNiwgMywgQ09SR0lfS0VZX0NBTkNFTCksCisJS0VZKDYsIDQsIENPUkdJX0tFWV9PSyksCisJS0VZKDYsIDUsIENPUkdJX0tFWV9NRU5VKSwKKwlLRVkoNiwgNiwgS0VZX0xFRlQpLAorCUtFWSg2LCA3LCBLRVlfRE9XTiksCisJS0VZKDYsIDgsIEtFWV9SSUdIVCksCisJS0VZKDcsIDAsIENPUkdJX0tFWV9PRkYpLAorCUtFWSg3LCAxLCBDT1JHSV9LRVlfRVhPSyksCisJS0VZKDcsIDIsIENPUkdJX0tFWV9FWENBTkNFTCksCisJS0VZKDcsIDMsIENPUkdJX0tFWV9FWEpPR0RPV04pLAorCUtFWSg3LCA0LCBDT1JHSV9LRVlfRVhKT0dVUCksCit9OworCitzdGF0aWMgc3RydWN0IG1hdHJpeF9rZXltYXBfZGF0YSBjb3JnaWtiZF9rZXltYXBfZGF0YSA9IHsKKwkua2V5bWFwCQk9IGNvcmdpa2JkX2tleW1hcCwKKwkua2V5bWFwX3NpemUJPSBBUlJBWV9TSVpFKGNvcmdpa2JkX2tleW1hcCksCit9OworCitzdGF0aWMgY29uc3QgaW50IGNvcmdpa2JkX3Jvd19ncGlvc1tdID0KKwkJeyA1OCwgNTksIDYwLCA2MSwgNjIsIDYzLCA2NCwgNjUgfTsKK3N0YXRpYyBjb25zdCBpbnQgY29yZ2lrYmRfY29sX2dwaW9zW10gPQorCQl7IDY2LCA2NywgNjgsIDY5LCA3MCwgNzEsIDcyLCA3MywgNzQsIDc1LCA3NiwgNzcgfTsKKworc3RhdGljIHN0cnVjdCBtYXRyaXhfa2V5cGFkX3BsYXRmb3JtX2RhdGEgY29yZ2lrYmRfcGRhdGEgPSB7CisJLmtleW1hcF9kYXRhCQk9ICZjb3JnaWtiZF9rZXltYXBfZGF0YSwKKwkucm93X2dwaW9zCQk9IGNvcmdpa2JkX3Jvd19ncGlvcywKKwkuY29sX2dwaW9zCQk9IGNvcmdpa2JkX2NvbF9ncGlvcywKKwkubnVtX3Jvd19ncGlvcwkJPSBBUlJBWV9TSVpFKGNvcmdpa2JkX3Jvd19ncGlvcyksCisJLm51bV9jb2xfZ3Bpb3MJCT0gQVJSQVlfU0laRShjb3JnaWtiZF9jb2xfZ3Bpb3MpLAorCS5jb2xfc2Nhbl9kZWxheV91cwk9IDEwLAorCS5kZWJvdW5jZV9tcwkJPSAxMCwKKwkud2FrZXVwCQkJPSAxLAorfTsKKwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgY29yZ2lrYmRfZGV2aWNlID0gewotCS5uYW1lCQk9ICJjb3JnaS1rZXlib2FyZCIsCisJLm5hbWUJCT0gIm1hdHJpeC1rZXlwYWQiLAogCS5pZAkJPSAtMSwKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmY29yZ2lrYmRfcGRhdGEsCisJfSwKIH07CiAKIC8qCkBAIC0zMDcsMTExICs0MzYsMjAgQEAKICAqIFRoZSBjYXJkIGRldGVjdCBpbnRlcnJ1cHQgaXNuJ3QgZGVib3VuY2VkIHNvIHdlIGRlbGF5IGl0IGJ5IDI1MG1zCiAgKiB0byBnaXZlIHRoZSBjYXJkIGEgY2hhbmNlIHRvIGZ1bGx5IGluc2VydC9lamVjdC4KICAqLwotc3RhdGljIHN0cnVjdCBweGFtY2lfcGxhdGZvcm1fZGF0YSBjb3JnaV9tY2lfcGxhdGZvcm1fZGF0YTsKLQotc3RhdGljIGludCBjb3JnaV9tY2lfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYsIGlycV9oYW5kbGVyX3QgY29yZ2lfZGV0ZWN0X2ludCwgdm9pZCAqZGF0YSkKLXsKLQlpbnQgZXJyOwotCi0JZXJyID0gZ3Bpb19yZXF1ZXN0KENPUkdJX0dQSU9fblNEX0RFVEVDVCwgIm5TRF9ERVRFQ1QiKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycl9vdXQ7Ci0KLQllcnIgPSBncGlvX3JlcXVlc3QoQ09SR0lfR1BJT19uU0RfV1AsICJuU0RfV1AiKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycl9mcmVlXzE7Ci0KLQllcnIgPSBncGlvX3JlcXVlc3QoQ09SR0lfR1BJT19TRF9QV1IsICJTRF9QV1IiKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycl9mcmVlXzI7Ci0KLQlncGlvX2RpcmVjdGlvbl9pbnB1dChDT1JHSV9HUElPX25TRF9ERVRFQ1QpOwotCWdwaW9fZGlyZWN0aW9uX2lucHV0KENPUkdJX0dQSU9fblNEX1dQKTsKLQlncGlvX2RpcmVjdGlvbl9vdXRwdXQoQ09SR0lfR1BJT19TRF9QV1IsIDApOwotCi0JY29yZ2lfbWNpX3BsYXRmb3JtX2RhdGEuZGV0ZWN0X2RlbGF5ID0gbXNlY3NfdG9famlmZmllcygyNTApOwotCi0JZXJyID0gcmVxdWVzdF9pcnEoQ09SR0lfSVJRX0dQSU9fblNEX0RFVEVDVCwgY29yZ2lfZGV0ZWN0X2ludCwKLQkJCQlJUlFGX0RJU0FCTEVEIHwgSVJRRl9UUklHR0VSX1JJU0lORyB8Ci0JCQkJSVJRRl9UUklHR0VSX0ZBTExJTkcsCi0JCQkJIk1NQyBjYXJkIGRldGVjdCIsIGRhdGEpOwotCWlmIChlcnIpIHsKLQkJcHJfZXJyKCIlczogTU1DL1NEOiBjYW4ndCByZXF1ZXN0IE1NQyBjYXJkIGRldGVjdCBJUlFcbiIsCi0JCQkJX19mdW5jX18pOwotCQlnb3RvIGVycl9mcmVlXzM7Ci0JfQotCXJldHVybiAwOwotCi1lcnJfZnJlZV8zOgotCWdwaW9fZnJlZShDT1JHSV9HUElPX1NEX1BXUik7Ci1lcnJfZnJlZV8yOgotCWdwaW9fZnJlZShDT1JHSV9HUElPX25TRF9XUCk7Ci1lcnJfZnJlZV8xOgotCWdwaW9fZnJlZShDT1JHSV9HUElPX25TRF9ERVRFQ1QpOwotZXJyX291dDoKLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgdm9pZCBjb3JnaV9tY2lfc2V0cG93ZXIoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgdmRkKQotewotCXN0cnVjdCBweGFtY2lfcGxhdGZvcm1fZGF0YSogcF9kID0gZGV2LT5wbGF0Zm9ybV9kYXRhOwotCi0JZ3Bpb19zZXRfdmFsdWUoQ09SR0lfR1BJT19TRF9QV1IsICgoMSA8PCB2ZGQpICYgcF9kLT5vY3JfbWFzaykpOwotfQotCi1zdGF0aWMgaW50IGNvcmdpX21jaV9nZXRfcm8oc3RydWN0IGRldmljZSAqZGV2KQotewotCXJldHVybiBncGlvX2dldF92YWx1ZShDT1JHSV9HUElPX25TRF9XUCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGNvcmdpX21jaV9leGl0KHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKLXsKLQlmcmVlX2lycShDT1JHSV9JUlFfR1BJT19uU0RfREVURUNULCBkYXRhKTsKLQlncGlvX2ZyZWUoQ09SR0lfR1BJT19TRF9QV1IpOwotCWdwaW9fZnJlZShDT1JHSV9HUElPX25TRF9XUCk7Ci0JZ3Bpb19mcmVlKENPUkdJX0dQSU9fblNEX0RFVEVDVCk7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgcHhhbWNpX3BsYXRmb3JtX2RhdGEgY29yZ2lfbWNpX3BsYXRmb3JtX2RhdGEgPSB7Ci0JLm9jcl9tYXNrCT0gTU1DX1ZERF8zMl8zM3xNTUNfVkREXzMzXzM0LAotCS5pbml0IAkJPSBjb3JnaV9tY2lfaW5pdCwKLQkuZ2V0X3JvCQk9IGNvcmdpX21jaV9nZXRfcm8sCi0JLnNldHBvd2VyIAk9IGNvcmdpX21jaV9zZXRwb3dlciwKLQkuZXhpdAkJPSBjb3JnaV9tY2lfZXhpdCwKKwkub2NyX21hc2sJCT0gTU1DX1ZERF8zMl8zM3xNTUNfVkREXzMzXzM0LAorCS5ncGlvX2NhcmRfZGV0ZWN0CT0gLTEsCisJLmdwaW9fY2FyZF9ybwkJPSBDT1JHSV9HUElPX25TRF9XUCwKKwkuZ3Bpb19wb3dlcgkJPSBDT1JHSV9HUElPX1NEX1BXUiwKIH07CiAKIAogLyoKICAqIElyZGEKICAqLwotc3RhdGljIHZvaWQgY29yZ2lfaXJkYV90cmFuc2NlaXZlcl9tb2RlKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IG1vZGUpCi17Ci0JZ3Bpb19zZXRfdmFsdWUoQ09SR0lfR1BJT19JUl9PTiwgbW9kZSAmIElSX09GRik7Ci0JcHhhMnh4X3RyYW5zY2VpdmVyX21vZGUoZGV2LCBtb2RlKTsKLX0KLQotc3RhdGljIGludCBjb3JnaV9pcmRhX3N0YXJ0dXAoc3RydWN0IGRldmljZSAqZGV2KQotewotCWludCBlcnI7Ci0KLQllcnIgPSBncGlvX3JlcXVlc3QoQ09SR0lfR1BJT19JUl9PTiwgIklSX09OIik7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKLQotCWdwaW9fZGlyZWN0aW9uX291dHB1dChDT1JHSV9HUElPX0lSX09OLCAxKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgY29yZ2lfaXJkYV9zaHV0ZG93bihzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0JZ3Bpb19mcmVlKENPUkdJX0dQSU9fSVJfT04pOwotfQotCiBzdGF0aWMgc3RydWN0IHB4YWZpY3BfcGxhdGZvcm1fZGF0YSBjb3JnaV9maWNwX3BsYXRmb3JtX2RhdGEgPSB7CisJLmdwaW9fcHdkb3duCQk9IENPUkdJX0dQSU9fSVJfT04sCiAJLnRyYW5zY2VpdmVyX2NhcAk9IElSX1NJUk1PREUgfCBJUl9PRkYsCi0JLnRyYW5zY2VpdmVyX21vZGUJPSBjb3JnaV9pcmRhX3RyYW5zY2VpdmVyX21vZGUsCi0JLnN0YXJ0dXAJCT0gY29yZ2lfaXJkYV9zdGFydHVwLAotCS5zaHV0ZG93bgkJPSBjb3JnaV9pcmRhX3NodXRkb3duLAogfTsKIAogCkBAIC02MzYsNiArNjc0LDcgQEAKIAljb3JnaV9pbml0X3NwaSgpOwogCiAgCXB4YV9zZXRfdWRjX2luZm8oJnVkY19pbmZvKTsKKwljb3JnaV9tY2lfcGxhdGZvcm1fZGF0YS5kZXRlY3RfZGVsYXkgPSBtc2Vjc190b19qaWZmaWVzKDI1MCk7CiAJcHhhX3NldF9tY2lfaW5mbygmY29yZ2lfbWNpX3BsYXRmb3JtX2RhdGEpOwogCXB4YV9zZXRfZmljcF9pbmZvKCZjb3JnaV9maWNwX3BsYXRmb3JtX2RhdGEpOwogCXB4YV9zZXRfaTJjX2luZm8oTlVMTCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9jcHVmcmVxLXB4YTJ4eC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvY3B1ZnJlcS1weGEyeHguYwppbmRleCAzYThlZTIyLi45ODNjYzhjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9jcHVmcmVxLXB4YTJ4eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2NwdWZyZXEtcHhhMnh4LmMKQEAgLTE1NSw3ICsxNTUsNyBAQAogCiBzdGF0aWMgcHhhX2ZyZXFzX3QgcHhhMjd4X2ZyZXFzW10gPSB7CiAJezEwNDAwMCwgMTA0MDAwLCBQWEEyN3hfQ0NDUigxLAkgOCwgMiksIDAsIENDTEtDRkcyKDEsIDAsIDEpLCAgOTAwMDAwLCAxNzA1MDAwIH0sCi0JezE1NjAwMCwgMTA0MDAwLCBQWEEyN3hfQ0NDUigxLAkgOCwgNiksIDAsIENDTEtDRkcyKDEsIDEsIDEpLCAxMDAwMDAwLCAxNzA1MDAwIH0sCisJezE1NjAwMCwgMTA0MDAwLCBQWEEyN3hfQ0NDUigxLAkgOCwgMyksIDAsIENDTEtDRkcyKDEsIDAsIDEpLCAxMDAwMDAwLCAxNzA1MDAwIH0sCiAJezIwODAwMCwgMjA4MDAwLCBQWEEyN3hfQ0NDUigwLCAxNiwgMiksIDEsIENDTEtDRkcyKDAsIDAsIDEpLCAxMTgwMDAwLCAxNzA1MDAwIH0sCiAJezMxMjAwMCwgMjA4MDAwLCBQWEEyN3hfQ0NDUigxLCAxNiwgMyksIDEsIENDTEtDRkcyKDEsIDAsIDEpLCAxMjUwMDAwLCAxNzA1MDAwIH0sCiAJezQxNjAwMCwgMjA4MDAwLCBQWEEyN3hfQ0NDUigxLCAxNiwgNCksIDEsIENDTEtDRkcyKDEsIDAsIDEpLCAxMzUwMDAwLCAxNzA1MDAwIH0sCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9jc2I3MjYuYyBiL2FyY2gvYXJtL21hY2gtcHhhL2NzYjcyNi5jCmluZGV4IDdkM2UxYjQuLjk2NTQ4MGUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2NzYjcyNi5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2NzYjcyNi5jCkBAIC0xMzAsNjEgKzEzMCwxNyBAQAogc3RhdGljIGludCBjc2I3MjZfbWNpX2luaXQoc3RydWN0IGRldmljZSAqZGV2LAogCQlpcnFfaGFuZGxlcl90IGRldGVjdCwgdm9pZCAqZGF0YSkKIHsKLQlpbnQgZXJyOwotCiAJY3NiNzI2X21jaV9kYXRhLmRldGVjdF9kZWxheSA9IG1zZWNzX3RvX2ppZmZpZXMoNTAwKTsKLQotCWVyciA9IGdwaW9fcmVxdWVzdChDU0I3MjZfR1BJT19NTUNfREVURUNULCAiTU1DIGRldGVjdCIpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyX2RldF9yZXE7Ci0KLQllcnIgPSBncGlvX2RpcmVjdGlvbl9pbnB1dChDU0I3MjZfR1BJT19NTUNfREVURUNUKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycl9kZXRfZGlyOwotCi0JZXJyID0gZ3Bpb19yZXF1ZXN0KENTQjcyNl9HUElPX01NQ19STywgIk1NQyBybyIpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyX3JvX3JlcTsKLQotCWVyciA9IGdwaW9fZGlyZWN0aW9uX2lucHV0KENTQjcyNl9HUElPX01NQ19STyk7Ci0JaWYgKGVycikKLQkJZ290byBlcnJfcm9fZGlyOwotCi0JZXJyID0gcmVxdWVzdF9pcnEoZ3Bpb190b19pcnEoQ1NCNzI2X0dQSU9fTU1DX0RFVEVDVCksIGRldGVjdCwKLQkJCUlSUUZfRElTQUJMRUQsICJNTUMgY2FyZCBkZXRlY3QiLCBkYXRhKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycl9pcnE7Ci0KIAlyZXR1cm4gMDsKLQotZXJyX2lycToKLWVycl9yb19kaXI6Ci0JZ3Bpb19mcmVlKENTQjcyNl9HUElPX01NQ19STyk7Ci1lcnJfcm9fcmVxOgotZXJyX2RldF9kaXI6Ci0JZ3Bpb19mcmVlKENTQjcyNl9HUElPX01NQ19ERVRFQ1QpOwotZXJyX2RldF9yZXE6Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGludCBjc2I3MjZfbWNpX2dldF9ybyhzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0JcmV0dXJuIGdwaW9fZ2V0X3ZhbHVlKENTQjcyNl9HUElPX01NQ19STyk7Ci19Ci0KLXN0YXRpYyB2b2lkIGNzYjcyNl9tY2lfZXhpdChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCi17Ci0JZnJlZV9pcnEoZ3Bpb190b19pcnEoQ1NCNzI2X0dQSU9fTU1DX0RFVEVDVCksIGRhdGEpOwotCWdwaW9fZnJlZShDU0I3MjZfR1BJT19NTUNfUk8pOwotCWdwaW9fZnJlZShDU0I3MjZfR1BJT19NTUNfREVURUNUKTsKIH0KIAogc3RhdGljIHN0cnVjdCBweGFtY2lfcGxhdGZvcm1fZGF0YSBjc2I3MjZfbWNpID0gewotCS5vY3JfbWFzawk9IE1NQ19WRERfMzJfMzN8TU1DX1ZERF8zM18zNCwKLQkuaW5pdAkJPSBjc2I3MjZfbWNpX2luaXQsCi0JLmdldF9ybwkJPSBjc2I3MjZfbWNpX2dldF9ybywKKwkub2NyX21hc2sJCT0gTU1DX1ZERF8zMl8zM3xNTUNfVkREXzMzXzM0LAorCS5pbml0CQkJPSBjc2I3MjZfbWNpX2luaXQsCiAJLyogRklYTUUgc2V0cG93ZXIgKi8KLQkuZXhpdAkJPSBjc2I3MjZfbWNpX2V4aXQsCisJLmdwaW9fY2FyZF9kZXRlY3QJPSBDU0I3MjZfR1BJT19NTUNfREVURUNULAorCS5ncGlvX2NhcmRfcm8JCT0gQ1NCNzI2X0dQSU9fTU1DX1JPLAorCS5ncGlvX3Bvd2VyCQk9IC0xLAogfTsKIAogc3RhdGljIHN0cnVjdCBweGFvaGNpX3BsYXRmb3JtX2RhdGEgY3NiNzI2X29oY2lfcGxhdGZvcm1fZGF0YSA9IHsKQEAgLTI4Miw3ICsyMzgsNyBAQAogfTsKIAogc3RydWN0IHNtc2M5MTF4X3BsYXRmb3JtX2NvbmZpZyBjc2I3MjZfbGFuX2NvbmZpZyA9IHsKLQkuaXJxX3R5cGUJPSBTTVNDOTExWF9JUlFfUE9MQVJJVFlfQUNUSVZFX0xPVywKKwkuaXJxX3BvbGFyaXR5CT0gU01TQzkxMVhfSVJRX1BPTEFSSVRZX0FDVElWRV9MT1csCiAJLmlycV90eXBlCT0gU01TQzkxMVhfSVJRX1RZUEVfUFVTSF9QVUxMLAogCS5mbGFncwkJPSBTTVNDOTExWF9VU0VfMzJCSVQsCiAJLnBoeV9pbnRlcmZhY2UJPSBQSFlfSU5URVJGQUNFX01PREVfTUlJLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvZGV2aWNlcy5jIGIvYXJjaC9hcm0vbWFjaC1weGEvZGV2aWNlcy5jCmluZGV4IGVjYzA4ZjMuLjQ2ZmFiZTFjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9kZXZpY2VzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvZGV2aWNlcy5jCkBAIC05MzUsNiArOTM1LDMzIEBACiB7CiAJcHhhX3JlZ2lzdGVyX2RldmljZSgmcHhhM3h4X2RldmljZV9uYW5kLCBpbmZvKTsKIH0KKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBweGEzeHhfcmVzb3VyY2VzX2djdVtdID0geworCXsKKwkJLnN0YXJ0CT0gMHg1NDAwMDAwMCwKKwkJLmVuZAk9IDB4NTQwMDBmZmYsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQJPSBJUlFfR0NVLAorCQkuZW5kCT0gSVJRX0dDVSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyB1NjQgcHhhM3h4X2djdV9kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKKworc3RydWN0IHBsYXRmb3JtX2RldmljZSBweGEzeHhfZGV2aWNlX2djdSA9IHsKKwkubmFtZQkJPSAicHhhM3h4LWdjdSIsCisJLmlkCQk9IC0xLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShweGEzeHhfcmVzb3VyY2VzX2djdSksCisJLnJlc291cmNlCT0gcHhhM3h4X3Jlc291cmNlc19nY3UsCisJLmRldgkJPSB7CisJCS5kbWFfbWFzayA9ICZweGEzeHhfZ2N1X2RtYW1hc2ssCisJCS5jb2hlcmVudF9kbWFfbWFzayA9IDB4ZmZmZmZmZmYsCisJfSwKK307CisKICNlbmRpZiAvKiBDT05GSUdfUFhBM3h4ICovCiAKIC8qIHB4YTJ4eC1zcGkgcGxhdGZvcm0tZGV2aWNlIElEIGVxdWFscyByZXNwZWN0aXZlIFNTUCBwbGF0Zm9ybS1kZXZpY2UgSUQgKyAxLgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvZGV2aWNlcy5oIGIvYXJjaC9hcm0vbWFjaC1weGEvZGV2aWNlcy5oCmluZGV4IGVjYzI0YTQuLjkzODE3ZDkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2RldmljZXMuaAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9kZXZpY2VzLmgKQEAgLTM1LDQgKzM1LDYgQEAKIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHB4YTN4eF9kZXZpY2VfbmFuZDsKIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHB4YTN4eF9kZXZpY2VfaTJjX3Bvd2VyOwogCitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBweGEzeHhfZGV2aWNlX2djdTsKKwogdm9pZCBfX2luaXQgcHhhX3JlZ2lzdGVyX2RldmljZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvZTc0MC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvZTc0MC5jCmluZGV4IGEzNmZjMTcuLjQ5YWNkZmEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2U3NDAuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9lNzQwLmMKQEAgLTE5OSw3ICsxOTksNiBAQAogCXBsYXRmb3JtX2FkZF9kZXZpY2VzKGRldmljZXMsIEFSUkFZX1NJWkUoZGV2aWNlcykpOwogCXB4YV9zZXRfdWRjX2luZm8oJmU3eHhfdWRjX21hY2hfaW5mbyk7CiAJcHhhX3NldF9hYzk3X2luZm8oTlVMTCk7Ci0JZTd4eF9pcmRhX2luaXQoKTsKIAlweGFfc2V0X2ZpY3BfaW5mbygmZTd4eF9maWNwX3BsYXRmb3JtX2RhdGEpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9lNzUwLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9lNzUwLmMKaW5kZXggMWQwMDExMC4uNDA1MmVjZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvZTc1MC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2U3NTAuYwpAQCAtMjAwLDcgKzIwMCw2IEBACiAJcGxhdGZvcm1fYWRkX2RldmljZXMoZGV2aWNlcywgQVJSQVlfU0laRShkZXZpY2VzKSk7CiAJcHhhX3NldF91ZGNfaW5mbygmZTd4eF91ZGNfbWFjaF9pbmZvKTsKIAlweGFfc2V0X2FjOTdfaW5mbyhOVUxMKTsKLQllN3h4X2lyZGFfaW5pdCgpOwogCXB4YV9zZXRfZmljcF9pbmZvKCZlN3h4X2ZpY3BfcGxhdGZvcm1fZGF0YSk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2VtLXgyNzAuYyBiL2FyY2gvYXJtL21hY2gtcHhhL2VtLXgyNzAuYwppbmRleCA5Y2QwOTQ2Li5hZWM3ZjQyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9lbS14MjcwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvZW0teDI3MC5jCkBAIC02NDYsMTMgKzY0NiwxNiBAQAogfQogCiBzdGF0aWMgc3RydWN0IHB4YW1jaV9wbGF0Zm9ybV9kYXRhIGVtX3gyNzBfbWNpX3BsYXRmb3JtX2RhdGEgPSB7Ci0JLm9jcl9tYXNrCT0gTU1DX1ZERF8yMF8yMXxNTUNfVkREXzIxXzIyfE1NQ19WRERfMjJfMjN8Ci0JCQkgIE1NQ19WRERfMjRfMjV8TU1DX1ZERF8yNV8yNnxNTUNfVkREXzI2XzI3fAotCQkJICBNTUNfVkREXzI3XzI4fE1NQ19WRERfMjhfMjl8TU1DX1ZERF8yOV8zMHwKLQkJCSAgTU1DX1ZERF8zMF8zMXxNTUNfVkREXzMxXzMyLAotCS5pbml0IAkJPSBlbV94MjcwX21jaV9pbml0LAotCS5zZXRwb3dlciAJPSBlbV94MjcwX21jaV9zZXRwb3dlciwKLQkuZXhpdAkJPSBlbV94MjcwX21jaV9leGl0LAorCS5vY3JfbWFzawkJPSBNTUNfVkREXzIwXzIxfE1NQ19WRERfMjFfMjJ8TU1DX1ZERF8yMl8yM3wKKwkJCQkgIE1NQ19WRERfMjRfMjV8TU1DX1ZERF8yNV8yNnxNTUNfVkREXzI2XzI3fAorCQkJCSAgTU1DX1ZERF8yN18yOHxNTUNfVkREXzI4XzI5fE1NQ19WRERfMjlfMzB8CisJCQkJICBNTUNfVkREXzMwXzMxfE1NQ19WRERfMzFfMzIsCisJLmluaXQgCQkJPSBlbV94MjcwX21jaV9pbml0LAorCS5zZXRwb3dlciAJCT0gZW1feDI3MF9tY2lfc2V0cG93ZXIsCisJLmV4aXQJCQk9IGVtX3gyNzBfbWNpX2V4aXQsCisJLmdwaW9fY2FyZF9kZXRlY3QJPSAtMSwKKwkuZ3Bpb19jYXJkX3JvCQk9IC0xLAorCS5ncGlvX3Bvd2VyCQk9IC0xLAogfTsKIAogc3RhdGljIHZvaWQgX19pbml0IGVtX3gyNzBfaW5pdF9tbWModm9pZCkKQEAgLTEwMjIsMjIgKzEwMjUsMzIgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBzb2NfY2FtZXJhX2xpbmsgaWNsaW5rID0gewotCS5idXNfaWQJPSAwLAotCS5wb3dlciA9IGVtX3gyNzBfc2Vuc29yX3Bvd2VyLAotfTsKLQogc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBlbV94MjcwX2kyY19jYW1faW5mb1tdID0gewogCXsKIAkJSTJDX0JPQVJEX0lORk8oIm10OW0xMTEiLCAweDQ4KSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBzb2NfY2FtZXJhX2xpbmsgaWNsaW5rID0geworCS5idXNfaWQJCT0gMCwKKwkucG93ZXIJCT0gZW1feDI3MF9zZW5zb3JfcG93ZXIsCisJLmJvYXJkX2luZm8JPSAmZW1feDI3MF9pMmNfY2FtX2luZm9bMF0sCisJLmkyY19hZGFwdGVyX2lkCT0gMCwKKwkubW9kdWxlX25hbWUJPSAibXQ5bTExMSIsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBlbV94MjcwX2NhbWVyYSA9IHsKKwkubmFtZQk9ICJzb2MtY2FtZXJhLXBkcnYiLAorCS5pZAk9IC0xLAorCS5kZXYJPSB7CiAJCS5wbGF0Zm9ybV9kYXRhID0gJmljbGluaywKIAl9LAogfTsKIAogc3RhdGljIHZvaWQgIF9faW5pdCBlbV94MjcwX2luaXRfY2FtZXJhKHZvaWQpCiB7Ci0JaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMCwgQVJSQVlfQU5EX1NJWkUoZW1feDI3MF9pMmNfY2FtX2luZm8pKTsKIAlweGFfc2V0X2NhbWVyYV9pbmZvKCZlbV94MjcwX2NhbWVyYV9wbGF0Zm9ybV9kYXRhKTsKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmVtX3gyNzBfY2FtZXJhKTsKIH0KICNlbHNlCiBzdGF0aWMgaW5saW5lIHZvaWQgZW1feDI3MF9pbml0X2NhbWVyYSh2b2lkKSB7fQpAQCAtMTEwMyw2ICsxMTE2LDcgQEAKIFJFR1VMQVRPUl9DT05TVU1FUihsZG8xMCwgJnB4YV9kZXZpY2VfbWNpLmRldiwgInZjYyBzZGlvIik7CiBSRUdVTEFUT1JfQ09OU1VNRVIobGRvMTIsIE5VTEwsICJ2Y2MgdXNiIik7CiBSRUdVTEFUT1JfQ09OU1VNRVIobGRvMTksICZlbV94MjcwX2dwcnNfdXNlcnNwYWNlX2NvbnN1bWVyLmRldiwgInZjYyBncHJzIik7CitSRUdVTEFUT1JfQ09OU1VNRVIoYnVjazIsIE5VTEwsICJ2Y2NfY29yZSIpOwogCiAjZGVmaW5lIFJFR1VMQVRPUl9JTklUKF9sZG8sIF9taW5fdVYsIF9tYXhfdVYsIF9vcHNfbWFzaykJCVwKIAlzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgX2xkbyMjX2RhdGEgPSB7CQlcCkBAIC0xMTI1LDYgKzExMzksNyBAQAogCSAgICAgICBSRUdVTEFUT1JfQ0hBTkdFX1NUQVRVUyB8IFJFR1VMQVRPUl9DSEFOR0VfVk9MVEFHRSk7CiBSRUdVTEFUT1JfSU5JVChsZG8xMiwgMzAwMDAwMCwgMzAwMDAwMCwgUkVHVUxBVE9SX0NIQU5HRV9TVEFUVVMpOwogUkVHVUxBVE9SX0lOSVQobGRvMTksIDMyMDAwMDAsIDMyMDAwMDAsIFJFR1VMQVRPUl9DSEFOR0VfU1RBVFVTKTsKK1JFR1VMQVRPUl9JTklUKGJ1Y2syLCAxMDAwMDAwLCAxNjUwMDAwLCBSRUdVTEFUT1JfQ0hBTkdFX1ZPTFRBR0UpOwogCiBzdHJ1Y3QgbGVkX2luZm8gZW1feDI3MF9sZWRfaW5mbyA9IHsKIAkubmFtZSA9ICJlbS14MjcwOm9yYW5nZSIsCkBAIC0xMTk0LDYgKzEyMDksOCBAQAogCURBOTAzMF9MRE8oMTIpLAogCURBOTAzMF9MRE8oMTkpLAogCisJREE5MDMwX1NVQkRFVihyZWd1bGF0b3IsIEJVQ0syLCAmYnVjazJfZGF0YSksCisKIAlEQTkwMzBfU1VCREVWKGxlZCwgTEVEX1BDLCAmZW1feDI3MF9sZWRfaW5mbyksCiAJREE5MDMwX1NVQkRFVihiYWNrbGlnaHQsIFdMRUQsICZlbV94MjcwX2xlZF9pbmZvKSwKIAlEQTkwMzBfU1VCREVWKGJhdHRlcnksIEJBVCwgJmVtX3gyNzBfYmF0dGVydHlfaW5mbyksCkBAIC0xMjQ1LDcgKzEyNjIsNiBAQAogCiBzdGF0aWMgdm9pZCBfX2luaXQgZW1feDI3MF9tb2R1bGVfaW5pdCh2b2lkKQogewotCXByX2luZm8oIiVzXG4iLCBfX2Z1bmNfXyk7CiAJcHhhMnh4X21mcF9jb25maWcoQVJSQVlfQU5EX1NJWkUoZW1feDI3MF9waW5fY29uZmlnKSk7CiAKIAltbWNfY2QgPSBHUElPMTNfTU1DX0NEOwpAQCAtMTI1Nyw3ICsxMjczLDYgQEAKIAogc3RhdGljIHZvaWQgX19pbml0IGVtX3gyNzBfZXhlZGFfaW5pdCh2b2lkKQogewotCXByX2luZm8oIiVzXG4iLCBfX2Z1bmNfXyk7CiAJcHhhMnh4X21mcF9jb25maWcoQVJSQVlfQU5EX1NJWkUoZXhlZGFfcGluX2NvbmZpZykpOwogCiAJbW1jX2NkID0gR1BJTzExNF9NTUNfQ0Q7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9lc2VyaWVzLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9lc2VyaWVzLmMKaW5kZXggYzYwZGFkZi4uOTE0MTdmMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvZXNlcmllcy5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2VzZXJpZXMuYwpAQCAtNDcsNDQgKzQ3LDkgQEAKIAkuZ3Bpb19wdWxsdXBfaW52ZXJ0ZWQgPSAxCiB9OwogCi1zdGF0aWMgdm9pZCBlN3h4X2lyZGFfdHJhbnNjZWl2ZXJfbW9kZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBtb2RlKQotewotCWlmIChtb2RlICYgSVJfT0ZGKSB7Ci0JCWdwaW9fc2V0X3ZhbHVlKEdQSU9fRTdYWF9JUl9PRkYsIDEpOwotCQlweGEyeHhfdHJhbnNjZWl2ZXJfbW9kZShkZXYsIG1vZGUpOwotCX0gZWxzZSB7Ci0JCXB4YTJ4eF90cmFuc2NlaXZlcl9tb2RlKGRldiwgbW9kZSk7Ci0JCWdwaW9fc2V0X3ZhbHVlKEdQSU9fRTdYWF9JUl9PRkYsIDApOwotCX0KLX0KLQotaW50IGU3eHhfaXJkYV9pbml0KHZvaWQpCi17Ci0JaW50IHJldDsKLQotCXJldCA9IGdwaW9fcmVxdWVzdChHUElPX0U3WFhfSVJfT0ZGLCAiSXJEQSBwb3dlciIpOwotCWlmIChyZXQpCi0JCWdvdG8gb3V0OwotCi0JcmV0ID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fRTdYWF9JUl9PRkYsIDApOwotCWlmIChyZXQpCi0JCWdvdG8gb3V0OwotCi0JZTd4eF9pcmRhX3RyYW5zY2VpdmVyX21vZGUoTlVMTCwgSVJfU0lSTU9ERSB8IElSX09GRik7Ci1vdXQ6Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHZvaWQgZTd4eF9pcmRhX3NodXRkb3duKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQllN3h4X2lyZGFfdHJhbnNjZWl2ZXJfbW9kZShkZXYsIElSX1NJUk1PREUgfCBJUl9PRkYpOwotCWdwaW9fZnJlZShHUElPX0U3WFhfSVJfT0ZGKTsKLX0KLQogc3RydWN0IHB4YWZpY3BfcGxhdGZvcm1fZGF0YSBlN3h4X2ZpY3BfcGxhdGZvcm1fZGF0YSA9IHsKLQkudHJhbnNjZWl2ZXJfY2FwICA9IElSX1NJUk1PREUgfCBJUl9PRkYsCi0JLnRyYW5zY2VpdmVyX21vZGUgPSBlN3h4X2lyZGFfdHJhbnNjZWl2ZXJfbW9kZSwKLQkuc2h1dGRvd24gPSBlN3h4X2lyZGFfc2h1dGRvd24sCisJLmdwaW9fcHdkb3duCQk9IEdQSU9fRTdYWF9JUl9PRkYsCisJLnRyYW5zY2VpdmVyX2NhcAk9IElSX1NJUk1PREUgfCBJUl9PRkYsCiB9OwogCiBpbnQgZXNlcmllc190bWlvX2VuYWJsZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9ndW1zdGl4LmMgYi9hcmNoL2FybS9tYWNoLXB4YS9ndW1zdGl4LmMKaW5kZXggY2E5OTEyZS4uMTcwOGMwMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvZ3Vtc3RpeC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2d1bXN0aXguYwpAQCAtODgsNyArODgsMTAgQEAKIAogI2lmZGVmIENPTkZJR19NTUNfUFhBCiBzdGF0aWMgc3RydWN0IHB4YW1jaV9wbGF0Zm9ybV9kYXRhIGd1bXN0aXhfbWNpX3BsYXRmb3JtX2RhdGEgPSB7Ci0JLm9jcl9tYXNrCT0gTU1DX1ZERF8zMl8zM3xNTUNfVkREXzMzXzM0LAorCS5vY3JfbWFzawkJPSBNTUNfVkREXzMyXzMzfE1NQ19WRERfMzNfMzQsCisJLmdwaW9fY2FyZF9kZXRlY3QgCT0gLTEsCisJLmdwaW9fY2FyZF9ybwkJPSAtMSwKKwkuZ3Bpb19wb3dlcgkJPSAtMSwKIH07CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBndW1zdGl4X21tY19pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9oeDQ3MDAuYyBiL2FyY2gvYXJtL21hY2gtcHhhL2h4NDcwMC5jCmluZGV4IDgxMzU5ZDUuLmFiZmY5ZTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2h4NDcwMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2h4NDcwMC5jCkBAIC00NSw2ICs0NSw3IEBACiAjaW5jbHVkZSA8bWFjaC9pcmRhLmg+CiAjaW5jbHVkZSA8bWFjaC9weGEyeHhfc3BpLmg+CiAKKyNpbmNsdWRlIDx2aWRlby9wbGF0Zm9ybV9sY2QuaD4KICNpbmNsdWRlIDx2aWRlby93MTAwZmIuaD4KIAogI2luY2x1ZGUgImRldmljZXMuaCIKQEAgLTE3NCwxNCArMTc1LDkgQEAKICAqIElSREEKICAqLwogCi1zdGF0aWMgdm9pZCBpcmRhX3RyYW5zY2VpdmVyX21vZGUoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgbW9kZSkKLXsKLQlncGlvX3NldF92YWx1ZShHUElPMTA1X0hYNDcwMF9uSVJfT04sIG1vZGUgJiBJUl9PRkYpOwotfQotCiBzdGF0aWMgc3RydWN0IHB4YWZpY3BfcGxhdGZvcm1fZGF0YSBmaWNwX2luZm8gPSB7Ci0JLnRyYW5zY2VpdmVyX2NhcCAgPSBJUl9TSVJNT0RFIHwgSVJfT0ZGLAotCS50cmFuc2NlaXZlcl9tb2RlID0gaXJkYV90cmFuc2NlaXZlcl9tb2RlLAorCS5ncGlvX3B3ZG93bgkJPSBHUElPMTA1X0hYNDcwMF9uSVJfT04sCisJLnRyYW5zY2VpdmVyX2NhcAk9IElSX1NJUk1PREUgfCBJUl9PRkYsCiB9OwogCiAvKgpAQCAtMzY4LDggKzM2NCw2IEBACiAgKiBMQ0QgLSBTb255IGRpc3BsYXkgY29ubmVjdGVkIHRvIEFUSSBJbWFnZW9uIHczMjIwCiAgKi8KIAotc3RhdGljIGludCBsY2RfcG93ZXI7Ci0KIHN0YXRpYyB2b2lkIHNvbnlfbGNkX2luaXQodm9pZCkKIHsKIAlncGlvX3NldF92YWx1ZShHUElPODRfSFg0NzAwX0xDRF9TUU4sIDEpOwpAQCAtNDEwLDM1ICs0MDQsNiBAQAogCWdwaW9fc2V0X3ZhbHVlKEdQSU8xMTBfSFg0NzAwX0xDRF9MVkREXzNWM19PTiwgMCk7CiB9CiAKLXN0YXRpYyBpbnQgaHg0NzAwX2xjZF9zZXRfcG93ZXIoc3RydWN0IGxjZF9kZXZpY2UgKmxkZXYsIGludCBsZXZlbCkKLXsKLQlzd2l0Y2ggKGxldmVsKSB7Ci0JY2FzZSBGQl9CTEFOS19VTkJMQU5LOgotCQlzb255X2xjZF9pbml0KCk7Ci0JCWJyZWFrOwotCWNhc2UgRkJfQkxBTktfTk9STUFMOgotCWNhc2UgRkJfQkxBTktfVlNZTkNfU1VTUEVORDoKLQljYXNlIEZCX0JMQU5LX0hTWU5DX1NVU1BFTkQ6Ci0JY2FzZSBGQl9CTEFOS19QT1dFUkRPV046Ci0JCXNvbnlfbGNkX29mZigpOwotCQlicmVhazsKLQl9Ci0JbGNkX3Bvd2VyID0gbGV2ZWw7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgaHg0NzAwX2xjZF9nZXRfcG93ZXIoc3RydWN0IGxjZF9kZXZpY2UgKmxtKQotewotCXJldHVybiBsY2RfcG93ZXI7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgbGNkX29wcyBoeDQ3MDBfbGNkX29wcyA9IHsKLQkuZ2V0X3Bvd2VyID0gaHg0NzAwX2xjZF9nZXRfcG93ZXIsCi0JLnNldF9wb3dlciA9IGh4NDcwMF9sY2Rfc2V0X3Bvd2VyLAotfTsKLQotc3RhdGljIHN0cnVjdCBsY2RfZGV2aWNlICpoeDQ3MDBfbGNkX2RldmljZTsKLQogI2lmZGVmIENPTkZJR19QTQogc3RhdGljIHZvaWQgdzMyMjBfbGNkX3N1c3BlbmQoc3RydWN0IHcxMDBmYl9wYXIgKndmYikKIHsKQEAgLTU3Myw2ICs1MzgsMjcgQEAKIAkucmVzb3VyY2UgICAgICA9IHczMjIwX3Jlc291cmNlcywKIH07CiAKK3N0YXRpYyB2b2lkIGh4NDcwMF9sY2Rfc2V0X3Bvd2VyKHN0cnVjdCBwbGF0X2xjZF9kYXRhICpwZCwgdW5zaWduZWQgaW50IHBvd2VyKQoreworCWlmIChwb3dlcikKKwkJc29ueV9sY2RfaW5pdCgpOworCWVsc2UKKwkJc29ueV9sY2Rfb2ZmKCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdF9sY2RfZGF0YSBoeDQ3MDBfbGNkX2RhdGEgPSB7CisJLnNldF9wb3dlciA9IGh4NDcwMF9sY2Rfc2V0X3Bvd2VyLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaHg0NzAwX2xjZCA9IHsKKwkubmFtZSA9ICJwbGF0Zm9ybS1sY2QiLAorCS5pZCAgID0gLTEsCisJLmRldiAgPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJmh4NDcwMF9sY2RfZGF0YSwKKwkJLnBhcmVudCAgICAgICAgPSAmdzMyMjAuZGV2LAorCX0sCit9OworCiAvKgogICogQmFja2xpZ2h0CiAgKi8KQEAgLTg3Miw5ICs4NTgsNiBAQAogCXB4YTJ4eF9zZXRfc3BpX2luZm8oMiwgJnB4YV9zc3AyX21hc3Rlcl9pbmZvKTsKIAlzcGlfcmVnaXN0ZXJfYm9hcmRfaW5mbyhBUlJBWV9BTkRfU0laRSh0c2MyMDQ2X2JvYXJkX2luZm8pKTsKIAotCWh4NDcwMF9sY2RfZGV2aWNlID0gbGNkX2RldmljZV9yZWdpc3RlcigidzEwMGZiIiwgTlVMTCwKLQkJCQkJKHZvaWQgKikmdzMyMjBfaW5mbywgJmh4NDcwMF9sY2Rfb3BzKTsKLQogCWdwaW9fc2V0X3ZhbHVlKEdQSU83MV9IWDQ3MDBfQVNJQzNfblJFU0VULCAwKTsKIAltZGVsYXkoMTApOwogCWdwaW9fc2V0X3ZhbHVlKEdQSU83MV9IWDQ3MDBfQVNJQzNfblJFU0VULCAxKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2lkcC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvaWRwLmMKaW5kZXggYjYyNDNiNS4uYjY0ODZlZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvaWRwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvaWRwLmMKQEAgLTE2OCw3ICsxNjgsMTAgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcHhhbWNpX3BsYXRmb3JtX2RhdGEgaWRwX21jaV9wbGF0Zm9ybV9kYXRhID0gewotCS5vY3JfbWFzawk9IE1NQ19WRERfMzJfMzN8TU1DX1ZERF8zM18zNCwKKwkub2NyX21hc2sJCT0gTU1DX1ZERF8zMl8zM3xNTUNfVkREXzMzXzM0LAorCS5ncGlvX2NhcmRfZGV0ZWN0CT0gLTEsCisJLmdwaW9fY2FyZF9ybwkJPSAtMSwKKwkuZ3Bpb19wb3dlcgkJPSAtMSwKIH07CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBpZHBfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvaW1vdGUyLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9pbW90ZTIuYwppbmRleCA5NjE4MDdkLi4yYTQ5NDVkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9pbW90ZTIuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9pbW90ZTIuYwpAQCAtMzg5LDYgKzM4OSw5IEBACiBzdGF0aWMgc3RydWN0IHB4YW1jaV9wbGF0Zm9ybV9kYXRhIGltb3RlMl9tY2lfcGxhdGZvcm1fZGF0YSA9IHsKIAkub2NyX21hc2sgPSBNTUNfVkREXzMyXzMzIHwgTU1DX1ZERF8zM18zNCwgLyogZGVmYXVsdCBhbnl3YXkgKi8KIAkuZ2V0X3JvID0gaW1vdGUyX21jaV9nZXRfcm8sCisJLmdwaW9fY2FyZF9kZXRlY3QgPSAtMSwKKwkuZ3Bpb19jYXJkX3JvCT0gLTEsCisJLmdwaW9fcG93ZXIgPSAtMSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBpbW90ZTJmbGFzaF9wYXJ0aXRpb25zW10gPSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvYmFsbG9vbjMuaCBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9iYWxsb29uMy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmZWMwOWIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvYmFsbG9vbjMuaApAQCAtMCwwICsxLDEzNCBAQAorLyoKKyAqICBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvYmFsbG9vbjMuaAorICoKKyAqICBBdXRob3JzOglOaWNrIEJhbmUgYW5kIFdvb2tleQorICogIENyZWF0ZWQ6CU9jdCwgMjAwNQorICogIENvcHlyaWdodDoJVG9ieSBDaHVyY2hpbGwgTHRkCisgKiAgQ3JpYmJlZCBmcm9tIG1haW5zdG9uZS5jLCBieSBOaWNob2xhcyBQaXRyZQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2lmbmRlZiBBU01fQVJDSF9CQUxMT09OM19ICisjZGVmaW5lIEFTTV9BUkNIX0JBTExPT04zX0gKKworZW51bSBiYWxsb29uM19mZWF0dXJlcyB7CisJQkFMTE9PTjNfRkVBVFVSRV9PSENJLAorCUJBTExPT04zX0ZFQVRVUkVfTU1DLAorCUJBTExPT04zX0ZFQVRVUkVfQ0YsCisJQkFMTE9PTjNfRkVBVFVSRV9BVURJTywKKwlCQUxMT09OM19GRUFUVVJFX1RPUFBPTFksCit9OworCisjZGVmaW5lIEJBTExPT04zX0ZQR0FfUEhZUwlQWEFfQ1M0X1BIWVMKKyNkZWZpbmUgQkFMTE9PTjNfRlBHQV9WSVJUCSgweGYxMDAwMDAwKQkvKiBhcyBwZXIgYmFsbG9vbjIgKi8KKyNkZWZpbmUgQkFMTE9PTjNfRlBHQV9MRU5HVEgJMHgwMTAwMDAwMAorCisvKiBGUEdBL0NQTEQgcmVnaXN0ZXJzICovCisjZGVmaW5lIEJBTExPT04zX1BDTUNJQTBfUkVHCQkoQkFMTE9PTjNfRlBHQV9WSVJUICsgMHgwMGUwMDAwOCkKKy8qIGZpeG1lIC0gc2FtZSBmb3Igbm93ICovCisjZGVmaW5lIEJBTExPT04zX1BDTUNJQTFfUkVHCQkoQkFMTE9PTjNfRlBHQV9WSVJUICsgMHgwMGUwMDAwOCkKKyNkZWZpbmUgQkFMTE9PTjNfTkFORElPX0lPX1JFRwkJKEJBTExPT04zX0ZQR0FfVklSVCArIDB4MDBlMDAwMDApCisvKiBmcGdhL2NwbGQgaW50ZXJydXB0IGNvbnRyb2wgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgQkFMTE9PTjNfSU5UX0NPTlRST0xfUkVHCShCQUxMT09OM19GUEdBX1ZJUlQgKyAweDAwZTAwMDBDKQorI2RlZmluZSBCQUxMT09OM19OQU5ESU9fQ1RMMl9SRUcgCShCQUxMT09OM19GUEdBX1ZJUlQgKyAweDAwZTAwMDEwKQorI2RlZmluZSBCQUxMT09OM19OQU5ESU9fQ1RMX1JFRyAJKEJBTExPT04zX0ZQR0FfVklSVCArIDB4MDBlMDAwMTQpCisjZGVmaW5lIEJBTExPT04zX1ZFUlNJT05fUkVHCQkoQkFMTE9PTjNfRlBHQV9WSVJUICsgMHgwMGUwMDAxYykKKworI2RlZmluZSBCQUxMT09OM19TQU1PU0FfQUREUl9SRUcJKEJBTExPT04zX0ZQR0FfVklSVCArIDB4MDBjMDAwMDApCisjZGVmaW5lIEJBTExPT04zX1NBTU9TQV9EQVRBX1JFRwkoQkFMTE9PTjNfRlBHQV9WSVJUICsgMHgwMGMwMDAwNCkKKyNkZWZpbmUgQkFMTE9PTjNfU0FNT1NBX1NUQVRVU19SRUcJKEJBTExPT04zX0ZQR0FfVklSVCArIDB4MDBjMDAwMWMpCisKKy8qIEdQSU9zIGZvciBpcnFzICovCisjZGVmaW5lIEJBTExPT04zX0dQSU9fQVVYX05JUlEJCSg5NCkKKyNkZWZpbmUgQkFMTE9PTjNfR1BJT19DT0RFQ19JUlEJCSg5NSkKKworLyogVGltZXIgYW5kIElkbGUgTEVEIGxvY2F0aW9ucyAqLworI2RlZmluZSBCQUxMT09OM19HUElPX0xFRF9OQU5ECQkoOSkKKyNkZWZpbmUgQkFMTE9PTjNfR1BJT19MRURfSURMRQkJKDEwKQorCisvKiBiYWNrbGlnaHQgY29udHJvbCAqLworI2RlZmluZSBCQUxMT09OM19HUElPX1JVTl9CQUNLTElHSFQJKDk5KQorCisjZGVmaW5lIEJBTExPT04zX0dQSU9fUzBfQ0QJCSgxMDUpCisKKy8qIEZQR0EgSW50ZXJydXB0IE1hc2svQWNrbm93bGVkZ2UgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgQkFMTE9PTjNfSU5UX1MwX0lSUQkJKDEgPDwgMCkgIC8qIFBDTUNJQSAwIElSUSAqLworI2RlZmluZSBCQUxMT09OM19JTlRfUzBfU1RTQ0hHCQkoMSA8PCAxKSAgLyogUENNQ0lBIDAgc3RhdHVzIGNoYW5nZWQgKi8KKworLyogQ0YgU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lIEJBTExPT04zX1BDTUNJQV9uSVJRCQkoMSA8PCAwKSAgLyogSVJRIC8gcmVhZHkgc2lnbmFsICovCisjZGVmaW5lIEJBTExPT04zX1BDTUNJQV9uU1RTQ0hHX0JWRDEJKDEgPDwgMSkKKwkJCQkJLyogVkREIHNlbnNlIC8gY2FyZCBzdGF0dXMgY2hhbmdlZCAqLworCisvKiBDRiBjb250cm9sIHJlZ2lzdGVyICh3cml0ZSkgKi8KKyNkZWZpbmUgQkFMTE9PTjNfUENNQ0lBX1JFU0VUCQkoMSA8PCAwKSAgIC8qIENhcmQgcmVzZXQgc2lnbmFsICovCisjZGVmaW5lIEJBTExPT04zX1BDTUNJQV9FTkFCTEUJCSgxIDw8IDEpCisjZGVmaW5lIEJBTExPT04zX1BDTUNJQV9BRERfRU5BQkxFCSgxIDw8IDIpCisKKy8qIENQTEQgKGFuZCBGUEdBKSBpbnRlcmZhY2UgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgQ1BMRF9MQ0QwX0RBVEFfU0VUICAgICAgICAgICAgIDB4MDAKKyNkZWZpbmUgQ1BMRF9MQ0QwX0RBVEFfQ0xSICAgICAgICAgICAgIDB4MTAKKyNkZWZpbmUgQ1BMRF9MQ0QwX0NPTU1BTkRfU0VUICAgICAgICAgIDB4MDEKKyNkZWZpbmUgQ1BMRF9MQ0QwX0NPTU1BTkRfQ0xSICAgICAgICAgIDB4MTEKKyNkZWZpbmUgQ1BMRF9MQ0QxX0RBVEFfU0VUICAgICAgICAgICAgIDB4MDIKKyNkZWZpbmUgQ1BMRF9MQ0QxX0RBVEFfQ0xSICAgICAgICAgICAgIDB4MTIKKyNkZWZpbmUgQ1BMRF9MQ0QxX0NPTU1BTkRfU0VUICAgICAgICAgIDB4MDMKKyNkZWZpbmUgQ1BMRF9MQ0QxX0NPTU1BTkRfQ0xSICAgICAgICAgIDB4MTMKKworI2RlZmluZSBDUExEX01JU0NfU0VUICAgICAgICAgICAgICAgICAgMHgwNworI2RlZmluZSBDUExEX01JU0NfQ0xSICAgICAgICAgICAgICAgICAgMHgxNworI2RlZmluZSBDUExEX01JU0NfTE9PTl9OUkVTRVRfQklUICAgICAgMAorI2RlZmluZSBDUExEX01JU0NfTE9PTl9VTlNVU1BfQklUICAgICAgMQorI2RlZmluZSBDUExEX01JU0NfUlVOXzVWX0JJVCAgICAgICAgICAgMgorI2RlZmluZSBDUExEX01JU0NfQ0hHX0QwX0JJVCAgICAgICAgICAgMworI2RlZmluZSBDUExEX01JU0NfQ0hHX0QxX0JJVCAgICAgICAgICAgNAorI2RlZmluZSBDUExEX01JU0NfREFDX05DU19CSVQgICAgICAgICAgNQorCisjZGVmaW5lIENQTERfTENEX1NFVCAgICAgICAgICAgICAgICAgICAweDA4CisjZGVmaW5lIENQTERfTENEX0NMUiAgICAgICAgICAgICAgICAgICAweDE4CisjZGVmaW5lIENQTERfTENEX0JBQ0tMSUdIVF9FTl8wX0JJVCAgICAwCisjZGVmaW5lIENQTERfTENEX0JBQ0tMSUdIVF9FTl8xX0JJVCAgICAxCisjZGVmaW5lIENQTERfTENEX0xFRF9SRURfQklUICAgICAgICAgICA0CisjZGVmaW5lIENQTERfTENEX0xFRF9HUkVFTl9CSVQgICAgICAgICA1CisjZGVmaW5lIENQTERfTENEX05SRVNFVF9CSVQgICAgICAgICAgICA3CisKKyNkZWZpbmUgQ1BMRF9MQ0RfUk9fU0VUICAgICAgICAgICAgICAgIDB4MDkKKyNkZWZpbmUgQ1BMRF9MQ0RfUk9fQ0xSICAgICAgICAgICAgICAgIDB4MTkKKyNkZWZpbmUgQ1BMRF9MQ0RfUk9fTENEMF9uV0FJVF9CSVQgICAgIDAKKyNkZWZpbmUgQ1BMRF9MQ0RfUk9fTENEMV9uV0FJVF9CSVQgICAgIDEKKworI2RlZmluZSBDUExEX1NFUklBTF9TRVQgICAgICAgICAgICAgICAgMHgwYQorI2RlZmluZSBDUExEX1NFUklBTF9DTFIgICAgICAgICAgICAgICAgMHgxYQorI2RlZmluZSBDUExEX1NFUklBTF9HU01fUklfQklUICAgICAgICAgMAorI2RlZmluZSBDUExEX1NFUklBTF9HU01fQ1RTX0JJVCAgICAgICAgMQorI2RlZmluZSBDUExEX1NFUklBTF9HU01fRFRSX0JJVCAgICAgICAgMgorI2RlZmluZSBDUExEX1NFUklBTF9MUFJfQ1RTX0JJVCAgICAgICAgMworI2RlZmluZSBDUExEX1NFUklBTF9UQzIzMl9DVFNfQklUICAgICAgNAorI2RlZmluZSBDUExEX1NFUklBTF9UQzIzMl9EU1JfQklUICAgICAgNQorCisjZGVmaW5lIENQTERfU1JPVVRJTkdfU0VUICAgICAgICAgICAgICAweDBiCisjZGVmaW5lIENQTERfU1JPVVRJTkdfQ0xSICAgICAgICAgICAgICAweDFiCisjZGVmaW5lIENQTERfU1JPVVRJTkdfTVNQNDMwX0xQUiAgICAgICAwCisjZGVmaW5lIENQTERfU1JPVVRJTkdfTVNQNDMwX1RDMjMyICAgICAxCisjZGVmaW5lIENQTERfU1JPVVRJTkdfTVNQNDMwX0dTTSAgICAgICAyCisjZGVmaW5lIENQTERfU1JPVVRJTkdfTE9PTl9MUFIgICAgICAgICAoMCA8PCA0KQorI2RlZmluZSBDUExEX1NST1VUSU5HX0xPT05fVEMyMzIgICAgICAgKDEgPDwgNCkKKyNkZWZpbmUgQ1BMRF9TUk9VVElOR19MT09OX0dTTSAgICAgICAgICgyIDw8IDQpCisKKyNkZWZpbmUgQ1BMRF9BUk9VVElOR19TRVQgICAgICAgICAgICAgIDB4MGMKKyNkZWZpbmUgQ1BMRF9BUk9VVElOR19DTFIgICAgICAgICAgICAgIDB4MWMKKyNkZWZpbmUgQ1BMRF9BUk9VVElOR19NSUMyUEhPTkVfQklUICAgIDAKKyNkZWZpbmUgQ1BMRF9BUk9VVElOR19QSE9ORTJJTlRfQklUICAgIDEKKyNkZWZpbmUgQ1BMRF9BUk9VVElOR19QSE9ORTJFWFRfQklUICAgIDIKKyNkZWZpbmUgQ1BMRF9BUk9VVElOR19MT09OTDJJTlRfQklUICAgIDMKKyNkZWZpbmUgQ1BMRF9BUk9VVElOR19MT09OTDJFWFRfQklUICAgIDQKKyNkZWZpbmUgQ1BMRF9BUk9VVElOR19MT09OUjJQSE9ORV9CSVQgIDUKKyNkZWZpbmUgQ1BMRF9BUk9VVElOR19MT09OUjJJTlRfQklUICAgIDYKKyNkZWZpbmUgQ1BMRF9BUk9VVElOR19MT09OUjJFWFRfQklUICAgIDcKKworZXh0ZXJuIGludCBiYWxsb29uM19oYXMoZW51bSBiYWxsb29uM19mZWF0dXJlcyBmZWF0dXJlKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvY29saWJyaS5oIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2NvbGlicmkuaAppbmRleCBhODhkN2NhLi44MTE3NDNjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvY29saWJyaS5oCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9jb2xpYnJpLmgKQEAgLTIzLDYgKzIzLDEyIEBACiBleHRlcm4gdm9pZCBjb2xpYnJpX3B4YTN4eF9pbml0X2V0aChzdHJ1Y3QgYXhfcGxhdF9kYXRhICpwbGF0X2RhdGEpOwogI2VuZGlmCiAKKyNpZiBkZWZpbmVkKENPTkZJR19NVERfTkFORF9QWEEzeHgpIHx8IGRlZmluZWQoQ09ORklHX01URF9OQU5EX1BYQTN4eF9NT0RVTEUpCitleHRlcm4gdm9pZCBjb2xpYnJpX3B4YTN4eF9pbml0X25hbmQodm9pZCk7CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIGNvbGlicmlfcHhhM3h4X2luaXRfbmFuZCh2b2lkKSB7fQorI2VuZGlmCisKIC8qIHBoeXNpY2FsIG1lbW9yeSByZWdpb25zICovCiAjZGVmaW5lIENPTElCUklfU0RSQU1fQkFTRQkweGEwMDAwMDAwICAgICAgLyogU0RSQU0gcmVnaW9uICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9lbnRyeS1tYWNyby5TIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2VudHJ5LW1hY3JvLlMKaW5kZXggZjZiNGJmMy4uMjQxODgwNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2VudHJ5LW1hY3JvLlMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2VudHJ5LW1hY3JvLlMKQEAgLTI0LDM0ICsyNCwyNyBAQAogCQltb3YJXHRtcCwgXHRtcCwgbHNyICMxMwogCQlhbmQJXHRtcCwgXHRtcCwgIzB4NwkJQCBDb3JlIEcKIAkJY21wCVx0bXAsICMxCi0JCWJoaQkxMDA0ZgorCQliaGkJMTAwMmYKIAorCQlAIENvcmUgR2VuZXJhdGlvbiAxIChQWEEyNXgpCiAJCW1vdglcYmFzZSwgI2lvX3AydigweDQwMDAwMDAwKQlAIElJUiBDdGwgPSAweDQwZDAwMDAwCiAJCWFkZAlcYmFzZSwgXGJhc2UsICMweDAwZDAwMDAwCiAJCWxkcglcaXJxc3RhdCwgW1xiYXNlLCAjMF0JCUAgSUNJUAogCQlsZHIJXGlycW5yLCBbXGJhc2UsICM0XQkJQCBJQ01SCi0JCWIJMTAwMmYKIAotMTAwNDoKLQkJbXJjCXA2LCAwLCBcaXJxc3RhdCwgYzYsIGMwLCAwCUAgSUNJUDIKLQkJbXJjCXA2LCAwLCBcaXJxbnIsIGM3LCBjMCwgMAlAIElDTVIyCi0JCWFuZHMJXGlycW5yLCBcaXJxc3RhdCwgXGlycW5yCi0JCWJlcQkxMDAzZgotCQlyc2IJXGlycXN0YXQsIFxpcnFuciwgIzAKLQkJYW5kCVxpcnFzdGF0LCBcaXJxc3RhdCwgXGlycW5yCi0JCWNseglcaXJxbnIsIFxpcnFzdGF0Ci0JCXJzYglcaXJxbnIsIFxpcnFuciwgIzMxCi0JCWFkZAlcaXJxbnIsIFxpcnFuciwgIygzMiArIFBYQV9JUlEoMCkpCi0JCWIJMTAwMWYKLTEwMDM6Ci0JCW1yYwlwNiwgMCwgXGlycXN0YXQsIGMwLCBjMCwgMAlAIElDSVAKLQkJbXJjCXA2LCAwLCBcaXJxbnIsIGMxLCBjMCwgMAlAIElDTVIKLTEwMDI6CiAJCWFuZHMJXGlycW5yLCBcaXJxc3RhdCwgXGlycW5yCiAJCWJlcQkxMDAxZgogCQlyc2IJXGlycXN0YXQsIFxpcnFuciwgIzAKIAkJYW5kCVxpcnFzdGF0LCBcaXJxc3RhdCwgXGlycW5yCiAJCWNseglcaXJxbnIsIFxpcnFzdGF0CiAJCXJzYglcaXJxbnIsIFxpcnFuciwgIygzMSArIFBYQV9JUlEoMCkpCisJCWIJMTAwMWYKKzEwMDI6CisJCUAgQ29yZSBHZW5lcmF0aW9uIDIgKFBYQTI3eCkgb3IgQ29yZSBHZW5lcmF0aW9uIDMgKFBYQTN4eCkKKwkJbXJjCXA2LCAwLCBcaXJxc3RhdCwgYzUsIGMwLCAwCUAgSUNIUAorCQl0c3QJXGlycXN0YXQsICMweDgwMDAwMDAwCisJCWJlcQkxMDAxZgorCQliaWMJXGlycXN0YXQsIFxpcnFzdGF0LCAjMHg4MDAwMDAwMAorCQltb3YJXGlycW5yLCBcaXJxc3RhdCwgbHNyICMxNgogMTAwMToKIAkJLmVuZG0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmgKaW5kZXggMTZhYjc5NS4uYWEzZDlmNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmgKQEAgLTE5Nyw2ICsxOTcsMTYgQEAKICNkZWZpbmUgX19jcHVfaXNfcHhhOTM1KGlkKQkoMCkKICNlbmRpZgogCisjaWZkZWYgQ09ORklHX0NQVV9QWEE5NTAKKyNkZWZpbmUgX19jcHVfaXNfcHhhOTUwKGlkKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJdW5zaWduZWQgaW50IF9pZCA9IChpZCkgPj4gNCAmIDB4ZmZmOwlcCisJCWlkID09IDB4Njk3OwkJCQlcCisJIH0pCisjZWxzZQorI2RlZmluZSBfX2NwdV9pc19weGE5NTAoaWQpCSgwKQorI2VuZGlmCisKICNkZWZpbmUgY3B1X2lzX3B4YTIxMCgpCQkJCQlcCiAJKHsJCQkJCQlcCiAJCV9fY3B1X2lzX3B4YTIxMChyZWFkX2NwdWlkX2lkKCkpOwlcCkBAIC0yNDksNiArMjU5LDEzIEBACiAJCV9fY3B1X2lzX3B4YTkzNShpZCk7CQkJXAogCSB9KQogCisjZGVmaW5lIGNwdV9pc19weGE5NTAoKQkJCQkJXAorCSh7CQkJCQkJXAorCQl1bnNpZ25lZCBpbnQgaWQgPSByZWFkX2NwdWlkKENQVUlEX0lEKTsJXAorCQlfX2NwdV9pc19weGE5NTAoaWQpOwkJCVwKKwkgfSkKKworCiAvKgogICogQ1BVSUQgQ29yZSBHZW5lcmF0aW9uIEJpdAogICogPD0gMHgyIGZvciBweGEyMXgvcHhhMjV4L3B4YTI2eC9weGEyN3gKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9pcmRhLmggYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvaXJkYS5oCmluZGV4IDBhNTBjM2MuLjNjZDQxZjcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9pcmRhLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2lyZGEuaApAQCAtMTIsNiArMTIsOCBAQAogCXZvaWQgKCp0cmFuc2NlaXZlcl9tb2RlKShzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBtb2RlKTsKIAlpbnQgKCpzdGFydHVwKShzdHJ1Y3QgZGV2aWNlICpkZXYpOwogCXZvaWQgKCpzaHV0ZG93bikoc3RydWN0IGRldmljZSAqZGV2KTsKKwlpbnQgZ3Bpb19wd2Rvd247CQkvKiBwb3dlcmRvd24gR1BJTyBmb3IgdGhlIElyREEgY2hpcCAqLworCWJvb2wgZ3Bpb19wd2Rvd25faW52ZXJ0ZWQ7CS8qIGdwaW9fcHdkb3duIGlzIGludmVydGVkICovCiB9OwogCiBleHRlcm4gdm9pZCBweGFfc2V0X2ZpY3BfaW5mbyhzdHJ1Y3QgcHhhZmljcF9wbGF0Zm9ybV9kYXRhICppbmZvKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9pcnFzLmggYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvaXJxcy5oCmluZGV4IDZhMWQ5NTkuLjM2NzdhOWEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9pcnFzLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2lycXMuaApAQCAtNjgsOSArNjgsMTAgQEAKICNpZmRlZiBDT05GSUdfUFhBM3h4CiAjZGVmaW5lIElSUV9TU1A0CVBYQV9JUlEoMTMpCS8qIFNTUDQgc2VydmljZSByZXF1ZXN0ICovCiAjZGVmaW5lIElSUV9DSVIJCVBYQV9JUlEoMzQpCS8qIENvbnN1bWVyIElSICovCisjZGVmaW5lIElSUV9DT01NX1dEVAlQWEFfSVJRKDM1KSAJLyogQ29tbSBXRFQgaW50ZXJydXB0ICovCiAjZGVmaW5lIElSUV9UU0kJCVBYQV9JUlEoMzYpCS8qIFRvdWNoIFNjcmVlbiBJbnRlcmZhY2UgKFBYQTMyMCkgKi8KICNkZWZpbmUgSVJRX1VTSU0yCVBYQV9JUlEoMzgpCS8qIFVTSU0yIENvbnRyb2xsZXIgKi8KLSNkZWZpbmUgSVJRX0dSUEhJQ1MJUFhBX0lSUSgzOSkJLyogR3JhcGhpY3MgQ29udHJvbGxlciAqLworI2RlZmluZSBJUlFfR0NVCQlQWEFfSVJRKDM5KQkvKiBHcmFwaGljcyBDb250cm9sbGVyICovCiAjZGVmaW5lIElSUV9NTUMyCVBYQV9JUlEoNDEpCS8qIE1NQzIgQ29udHJvbGxlciAqLwogI2RlZmluZSBJUlFfMVdJUkUJUFhBX0lSUSg0NCkJLyogMS1XaXJlIENvbnRyb2xsZXIgKi8KICNkZWZpbmUgSVJRX05BTkQJUFhBX0lSUSg0NSkJLyogTkFORCBDb250cm9sbGVyICovCkBAIC04MSw4ICs4MiwzMSBAQAogI2RlZmluZSBJUlFfTU1DMwlQWEFfSVJRKDU1KQkvKiBNTUMzIENvbnRyb2xsZXIgKFBYQTMxMCkgKi8KICNlbmRpZgogCi0jZGVmaW5lIFBYQV9HUElPX0lSUV9CQVNFCVBYQV9JUlEoNjQpCi0jZGVmaW5lIFBYQV9HUElPX0lSUV9OVU0JKDEyOCkKKyNpZmRlZiBDT05GSUdfQ1BVX1BYQTkzNQorI2RlZmluZSBJUlFfVTJPCQlQWEFfSVJRKDY0KQkvKiBVU0IgT1RHIDIuMCBDb250cm9sbGVyIChQWEE5MzUpICovCisjZGVmaW5lIElSUV9VMkgJCVBYQV9JUlEoNjUpCS8qIFVTQiBIb3N0IDIuMCBDb250cm9sbGVyIChQWEE5MzUpICovCisKKyNkZWZpbmUgSVJRX01NQzNfUFhBOTM1CVBYQV9JUlEoNzIpCS8qIE1NQzMgQ29udHJvbGxlciAoUFhBOTM1KSAqLworI2RlZmluZSBJUlFfTU1DNF9QWEE5MzUJUFhBX0lSUSg3MykJLyogTU1DNCBDb250cm9sbGVyIChQWEE5MzUpICovCisjZGVmaW5lIElSUV9NTUM1X1BYQTkzNQlQWEFfSVJRKDc0KQkvKiBNTUM1IENvbnRyb2xsZXIgKFBYQTkzNSkgKi8KKworI2RlZmluZSBJUlFfVTJQCQlQWEFfSVJRKDkzKQkvKiBVU0IgUEhZIEQrL0QtIExpbmVzIChQWEE5MzUpICovCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19DUFVfUFhBOTMwCisjZGVmaW5lIElSUV9FTkhST1QJUFhBX0lSUSgzNykJLyogRW5oYW5jZWQgUm90YXJ5IChQWEE5MzApICovCisjZGVmaW5lIElSUV9BQ0lQQzAJUFhBX0lSUSg1KQorI2RlZmluZSBJUlFfQUNJUEMxCVBYQV9JUlEoNDApCisjZGVmaW5lIElSUV9BQ0lQQzIJUFhBX0lSUSgxOSkKKyNkZWZpbmUgSVJRX1RSS0JBTEwJUFhBX0lSUSg0MykJLyogVHJhY2sgQmFsbCAqLworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQ1BVX1BYQTk1MAorI2RlZmluZSBJUlFfR0M1MDAJUFhBX0lSUSg3MCkJLyogR3JhcGhpY3MgQ29udHJvbGxlciAoUFhBOTUwKSAqLworI2VuZGlmCisKKyNkZWZpbmUgUFhBX0dQSU9fSVJRX0JBU0UJUFhBX0lSUSg5NikKKyNkZWZpbmUgUFhBX0dQSU9fSVJRX05VTQkoMTkyKQogCiAjZGVmaW5lIEdQSU9fMl94X1RPX0lSUSh4KQkoUFhBX0dQSU9fSVJRX0JBU0UgKyAoeCkpCiAjZGVmaW5lIElSUV9HUElPKHgpCSgoKHgpIDwgMikgPyAoSVJRX0dQSU8wICsgKHgpKSA6IEdQSU9fMl94X1RPX0lSUSh4KSkKQEAgLTEwNSw2ICsxMjksOCBAQAogI2RlZmluZSBJUlFfQk9BUkRfRU5ECQkoSVJRX0JPQVJEX1NUQVJUICsgNzApCiAjZWxpZiBkZWZpbmVkKENPTkZJR19NQUNIX1pZTE9OSVRFKQogI2RlZmluZSBJUlFfQk9BUkRfRU5ECQkoSVJRX0JPQVJEX1NUQVJUICsgMzIpCisjZWxpZiBkZWZpbmVkKENPTkZJR19QWEFfRVpYKQorI2RlZmluZSBJUlFfQk9BUkRfRU5ECQkoSVJRX0JPQVJEX1NUQVJUICsgMjMpCiAjZWxzZQogI2RlZmluZSBJUlFfQk9BUkRfRU5ECQkoSVJRX0JPQVJEX1NUQVJUICsgMTYpCiAjZW5kaWYKQEAgLTIzNyw2ICsyNjMsMTYgQEAKICNkZWZpbmUgTUFJTlNUT05FX1MxX1NUU0NIR19JUlEJTUFJTlNUT05FX0lSUSgxNCkKICNkZWZpbmUgTUFJTlNUT05FX1MxX0lSUQlNQUlOU1RPTkVfSVJRKDE1KQogCisvKiBCYWxsb29uMyBJbnRlcnJ1cHRzICovCisjZGVmaW5lIEJBTExPT04zX0lSUSh4KQkJKElSUV9CT0FSRF9TVEFSVCArICh4KSkKKworI2RlZmluZSBCQUxMT09OM19CUF9DRl9OUkRZX0lSUQlCQUxMT09OM19JUlEoMCkKKyNkZWZpbmUgQkFMTE9PTjNfQlBfTlNUU0NIR19JUlEJQkFMTE9PTjNfSVJRKDEpCisKKyNkZWZpbmUgQkFMTE9PTjNfQVVYX05JUlEJSVJRX0dQSU8oQkFMTE9PTjNfR1BJT19BVVhfTklSUSkKKyNkZWZpbmUgQkFMTE9PTjNfQ09ERUNfSVJRCUlSUV9HUElPKEJBTExPT04zX0dQSU9fQ09ERUNfSVJRKQorI2RlZmluZSBCQUxMT09OM19TMF9DRF9JUlEJSVJRX0dQSU8oQkFMTE9PTjNfR1BJT19TMF9DRCkKKwogLyogTG9Db01vIEludGVycnVwdHMgKENPTkZJR19TSEFSUF9MT0NPTU8pICovCiAjZGVmaW5lIElSUV9MT0NPTU9fS0VZX0JBU0UJKElSUV9CT0FSRF9TVEFSVCArIDApCiAjZGVmaW5lIElSUV9MT0NPTU9fR1BJT19CQVNFCShJUlFfQk9BUkRfU1RBUlQgKyAxKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL21mcC5oIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL21mcC5oCmluZGV4IDQ4MjE4NTAuLjI3MWUyNDkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9tZnAuaAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvbWZwLmgKQEAgLTE2LDMwNSArMTYsNiBAQAogI2lmbmRlZiBfX0FTTV9BUkNIX01GUF9ICiAjZGVmaW5lIF9fQVNNX0FSQ0hfTUZQX0gKIAotI2RlZmluZSBtZnBfdG9fZ3BpbyhtKQkoKG0pICUgMTI4KQotCi0vKiBsaXN0IG9mIGFsbCB0aGUgY29uZmlndXJhYmxlIE1GUCBwaW5zICovCi1lbnVtIHsKLQlNRlBfUElOX0lOVkFMSUQgPSAtMSwKLQotCU1GUF9QSU5fR1BJTzAgPSAwLAotCU1GUF9QSU5fR1BJTzEsCi0JTUZQX1BJTl9HUElPMiwKLQlNRlBfUElOX0dQSU8zLAotCU1GUF9QSU5fR1BJTzQsCi0JTUZQX1BJTl9HUElPNSwKLQlNRlBfUElOX0dQSU82LAotCU1GUF9QSU5fR1BJTzcsCi0JTUZQX1BJTl9HUElPOCwKLQlNRlBfUElOX0dQSU85LAotCU1GUF9QSU5fR1BJTzEwLAotCU1GUF9QSU5fR1BJTzExLAotCU1GUF9QSU5fR1BJTzEyLAotCU1GUF9QSU5fR1BJTzEzLAotCU1GUF9QSU5fR1BJTzE0LAotCU1GUF9QSU5fR1BJTzE1LAotCU1GUF9QSU5fR1BJTzE2LAotCU1GUF9QSU5fR1BJTzE3LAotCU1GUF9QSU5fR1BJTzE4LAotCU1GUF9QSU5fR1BJTzE5LAotCU1GUF9QSU5fR1BJTzIwLAotCU1GUF9QSU5fR1BJTzIxLAotCU1GUF9QSU5fR1BJTzIyLAotCU1GUF9QSU5fR1BJTzIzLAotCU1GUF9QSU5fR1BJTzI0LAotCU1GUF9QSU5fR1BJTzI1LAotCU1GUF9QSU5fR1BJTzI2LAotCU1GUF9QSU5fR1BJTzI3LAotCU1GUF9QSU5fR1BJTzI4LAotCU1GUF9QSU5fR1BJTzI5LAotCU1GUF9QSU5fR1BJTzMwLAotCU1GUF9QSU5fR1BJTzMxLAotCU1GUF9QSU5fR1BJTzMyLAotCU1GUF9QSU5fR1BJTzMzLAotCU1GUF9QSU5fR1BJTzM0LAotCU1GUF9QSU5fR1BJTzM1LAotCU1GUF9QSU5fR1BJTzM2LAotCU1GUF9QSU5fR1BJTzM3LAotCU1GUF9QSU5fR1BJTzM4LAotCU1GUF9QSU5fR1BJTzM5LAotCU1GUF9QSU5fR1BJTzQwLAotCU1GUF9QSU5fR1BJTzQxLAotCU1GUF9QSU5fR1BJTzQyLAotCU1GUF9QSU5fR1BJTzQzLAotCU1GUF9QSU5fR1BJTzQ0LAotCU1GUF9QSU5fR1BJTzQ1LAotCU1GUF9QSU5fR1BJTzQ2LAotCU1GUF9QSU5fR1BJTzQ3LAotCU1GUF9QSU5fR1BJTzQ4LAotCU1GUF9QSU5fR1BJTzQ5LAotCU1GUF9QSU5fR1BJTzUwLAotCU1GUF9QSU5fR1BJTzUxLAotCU1GUF9QSU5fR1BJTzUyLAotCU1GUF9QSU5fR1BJTzUzLAotCU1GUF9QSU5fR1BJTzU0LAotCU1GUF9QSU5fR1BJTzU1LAotCU1GUF9QSU5fR1BJTzU2LAotCU1GUF9QSU5fR1BJTzU3LAotCU1GUF9QSU5fR1BJTzU4LAotCU1GUF9QSU5fR1BJTzU5LAotCU1GUF9QSU5fR1BJTzYwLAotCU1GUF9QSU5fR1BJTzYxLAotCU1GUF9QSU5fR1BJTzYyLAotCU1GUF9QSU5fR1BJTzYzLAotCU1GUF9QSU5fR1BJTzY0LAotCU1GUF9QSU5fR1BJTzY1LAotCU1GUF9QSU5fR1BJTzY2LAotCU1GUF9QSU5fR1BJTzY3LAotCU1GUF9QSU5fR1BJTzY4LAotCU1GUF9QSU5fR1BJTzY5LAotCU1GUF9QSU5fR1BJTzcwLAotCU1GUF9QSU5fR1BJTzcxLAotCU1GUF9QSU5fR1BJTzcyLAotCU1GUF9QSU5fR1BJTzczLAotCU1GUF9QSU5fR1BJTzc0LAotCU1GUF9QSU5fR1BJTzc1LAotCU1GUF9QSU5fR1BJTzc2LAotCU1GUF9QSU5fR1BJTzc3LAotCU1GUF9QSU5fR1BJTzc4LAotCU1GUF9QSU5fR1BJTzc5LAotCU1GUF9QSU5fR1BJTzgwLAotCU1GUF9QSU5fR1BJTzgxLAotCU1GUF9QSU5fR1BJTzgyLAotCU1GUF9QSU5fR1BJTzgzLAotCU1GUF9QSU5fR1BJTzg0LAotCU1GUF9QSU5fR1BJTzg1LAotCU1GUF9QSU5fR1BJTzg2LAotCU1GUF9QSU5fR1BJTzg3LAotCU1GUF9QSU5fR1BJTzg4LAotCU1GUF9QSU5fR1BJTzg5LAotCU1GUF9QSU5fR1BJTzkwLAotCU1GUF9QSU5fR1BJTzkxLAotCU1GUF9QSU5fR1BJTzkyLAotCU1GUF9QSU5fR1BJTzkzLAotCU1GUF9QSU5fR1BJTzk0LAotCU1GUF9QSU5fR1BJTzk1LAotCU1GUF9QSU5fR1BJTzk2LAotCU1GUF9QSU5fR1BJTzk3LAotCU1GUF9QSU5fR1BJTzk4LAotCU1GUF9QSU5fR1BJTzk5LAotCU1GUF9QSU5fR1BJTzEwMCwKLQlNRlBfUElOX0dQSU8xMDEsCi0JTUZQX1BJTl9HUElPMTAyLAotCU1GUF9QSU5fR1BJTzEwMywKLQlNRlBfUElOX0dQSU8xMDQsCi0JTUZQX1BJTl9HUElPMTA1LAotCU1GUF9QSU5fR1BJTzEwNiwKLQlNRlBfUElOX0dQSU8xMDcsCi0JTUZQX1BJTl9HUElPMTA4LAotCU1GUF9QSU5fR1BJTzEwOSwKLQlNRlBfUElOX0dQSU8xMTAsCi0JTUZQX1BJTl9HUElPMTExLAotCU1GUF9QSU5fR1BJTzExMiwKLQlNRlBfUElOX0dQSU8xMTMsCi0JTUZQX1BJTl9HUElPMTE0LAotCU1GUF9QSU5fR1BJTzExNSwKLQlNRlBfUElOX0dQSU8xMTYsCi0JTUZQX1BJTl9HUElPMTE3LAotCU1GUF9QSU5fR1BJTzExOCwKLQlNRlBfUElOX0dQSU8xMTksCi0JTUZQX1BJTl9HUElPMTIwLAotCU1GUF9QSU5fR1BJTzEyMSwKLQlNRlBfUElOX0dQSU8xMjIsCi0JTUZQX1BJTl9HUElPMTIzLAotCU1GUF9QSU5fR1BJTzEyNCwKLQlNRlBfUElOX0dQSU8xMjUsCi0JTUZQX1BJTl9HUElPMTI2LAotCU1GUF9QSU5fR1BJTzEyNywKLQlNRlBfUElOX0dQSU8wXzIsCi0JTUZQX1BJTl9HUElPMV8yLAotCU1GUF9QSU5fR1BJTzJfMiwKLQlNRlBfUElOX0dQSU8zXzIsCi0JTUZQX1BJTl9HUElPNF8yLAotCU1GUF9QSU5fR1BJTzVfMiwKLQlNRlBfUElOX0dQSU82XzIsCi0JTUZQX1BJTl9HUElPN18yLAotCU1GUF9QSU5fR1BJTzhfMiwKLQlNRlBfUElOX0dQSU85XzIsCi0JTUZQX1BJTl9HUElPMTBfMiwKLQlNRlBfUElOX0dQSU8xMV8yLAotCU1GUF9QSU5fR1BJTzEyXzIsCi0JTUZQX1BJTl9HUElPMTNfMiwKLQlNRlBfUElOX0dQSU8xNF8yLAotCU1GUF9QSU5fR1BJTzE1XzIsCi0JTUZQX1BJTl9HUElPMTZfMiwKLQlNRlBfUElOX0dQSU8xN18yLAotCi0JTUZQX1BJTl9VTFBJX1NUUCwKLQlNRlBfUElOX1VMUElfTlhULAotCU1GUF9QSU5fVUxQSV9ESVIsCi0KLQlNRlBfUElOX25YQ1ZSRU4sCi0JTUZQX1BJTl9ERl9DTEVfbk9FLAotCU1GUF9QSU5fREZfbkFEVjFfQUxFLAotCU1GUF9QSU5fREZfU0NMS19FLAotCU1GUF9QSU5fREZfU0NMS19TLAotCU1GUF9QSU5fbkJFMCwKLQlNRlBfUElOX25CRTEsCi0JTUZQX1BJTl9ERl9uQURWMl9BTEUsCi0JTUZQX1BJTl9ERl9JTlRfUm5CLAotCU1GUF9QSU5fREZfbkNTMCwKLQlNRlBfUElOX0RGX25DUzEsCi0JTUZQX1BJTl9uTFVBLAotCU1GUF9QSU5fbkxMQSwKLQlNRlBfUElOX0RGX25XRSwKLQlNRlBfUElOX0RGX0FMRV9uV0UsCi0JTUZQX1BJTl9ERl9uUkVfbk9FLAotCU1GUF9QSU5fREZfQUREUjAsCi0JTUZQX1BJTl9ERl9BRERSMSwKLQlNRlBfUElOX0RGX0FERFIyLAotCU1GUF9QSU5fREZfQUREUjMsCi0JTUZQX1BJTl9ERl9JTzAsCi0JTUZQX1BJTl9ERl9JTzEsCi0JTUZQX1BJTl9ERl9JTzIsCi0JTUZQX1BJTl9ERl9JTzMsCi0JTUZQX1BJTl9ERl9JTzQsCi0JTUZQX1BJTl9ERl9JTzUsCi0JTUZQX1BJTl9ERl9JTzYsCi0JTUZQX1BJTl9ERl9JTzcsCi0JTUZQX1BJTl9ERl9JTzgsCi0JTUZQX1BJTl9ERl9JTzksCi0JTUZQX1BJTl9ERl9JTzEwLAotCU1GUF9QSU5fREZfSU8xMSwKLQlNRlBfUElOX0RGX0lPMTIsCi0JTUZQX1BJTl9ERl9JTzEzLAotCU1GUF9QSU5fREZfSU8xNCwKLQlNRlBfUElOX0RGX0lPMTUsCi0KLQkvKiBhZGRpdGlvbmFsIHBpbnMgb24gUFhBOTMwICovCi0JTUZQX1BJTl9HU0lNX1VJTywKLQlNRlBfUElOX0dTSU1fVUNMSywKLQlNRlBfUElOX0dTSU1fVURFVCwKLQlNRlBfUElOX0dTSU1fblVSU1QsCi0JTUZQX1BJTl9QTUlDX0lOVCwKLQlNRlBfUElOX1JEWSwKLQotCU1GUF9QSU5fTUFYLAotfTsKLQotLyoKLSAqIGEgcG9zc2libGUgTUZQIGNvbmZpZ3VyYXRpb24gaXMgcmVwcmVzZW50ZWQgYnkgYSAzMi1iaXQgaW50ZWdlcgotICoKLSAqIGJpdCAgMC4uIDkgLSBNRlAgUGluIE51bWJlciAoMTAyNCBQaW5zIE1heGltdW0pCi0gKiBiaXQgMTAuLjEyIC0gQWx0ZXJuYXRlIEZ1bmN0aW9uIFNlbGVjdGlvbgotICogYml0IDEzLi4xNSAtIERyaXZlIFN0cmVuZ3RoCi0gKiBiaXQgMTYuLjE4IC0gTG93IFBvd2VyIE1vZGUgU3RhdGUKLSAqIGJpdCAxOS4uMjAgLSBMb3cgUG93ZXIgTW9kZSBFZGdlIERldGVjdGlvbgotICogYml0IDIxLi4yMiAtIFJ1biBNb2RlIFB1bGwgU3RhdGUKLSAqCi0gKiB0byBmYWNpbGl0YXRlIHRoZSBkZWZpbml0aW9uLCB0aGUgZm9sbG93aW5nIG1hY3JvcyBhcmUgcHJvdmlkZWQKLSAqCi0gKiBNRlBfQ0ZHX0RFRkFVTFQgLSBkZWZhdWx0IE1GUCBjb25maWd1cmF0aW9uIHZhbHVlLCB3aXRoCi0gKiAJCSAgYWx0ZXJuYXRlIGZ1bmN0aW9uID0gMCwKLSAqIAkJICBkcml2ZSBzdHJlbmd0aCA9IGZhc3QgM21BIChNRlBfRFMwM1gpCi0gKiAJCSAgbG93IHBvd2VyIG1vZGUgPSBkZWZhdWx0Ci0gKiAJCSAgZWRnZSBkZXRlY3Rpb24gPSBub25lCi0gKgotICogTUZQX0NGRwktIGRlZmF1bHQgTUZQUiB2YWx1ZSB3aXRoIGFsdGVybmF0ZSBmdW5jdGlvbgotICogTUZQX0NGR19EUlYJLSBkZWZhdWx0IE1GUFIgdmFsdWUgd2l0aCBhbHRlcm5hdGUgZnVuY3Rpb24gYW5kCi0gKiAJCSAgcGluIGRyaXZlIHN0cmVuZ3RoCi0gKiBNRlBfQ0ZHX0xQTQktIGRlZmF1bHQgTUZQUiB2YWx1ZSB3aXRoIGFsdGVybmF0ZSBmdW5jdGlvbiBhbmQKLSAqIAkJICBsb3cgcG93ZXIgbW9kZQotICogTUZQX0NGR19YCS0gZGVmYXVsdCBNRlBSIHZhbHVlIHdpdGggYWx0ZXJuYXRlIGZ1bmN0aW9uLAotICogCQkgIHBpbiBkcml2ZSBzdHJlbmd0aCBhbmQgbG93IHBvd2VyIG1vZGUKLSAqLwotCi10eXBlZGVmIHVuc2lnbmVkIGxvbmcgbWZwX2NmZ190OwotCi0jZGVmaW5lIE1GUF9QSU4oeCkJCSgoeCkgJiAweDNmZikKLQotI2RlZmluZSBNRlBfQUYwCQkJKDB4MCA8PCAxMCkKLSNkZWZpbmUgTUZQX0FGMQkJCSgweDEgPDwgMTApCi0jZGVmaW5lIE1GUF9BRjIJCQkoMHgyIDw8IDEwKQotI2RlZmluZSBNRlBfQUYzCQkJKDB4MyA8PCAxMCkKLSNkZWZpbmUgTUZQX0FGNAkJCSgweDQgPDwgMTApCi0jZGVmaW5lIE1GUF9BRjUJCQkoMHg1IDw8IDEwKQotI2RlZmluZSBNRlBfQUY2CQkJKDB4NiA8PCAxMCkKLSNkZWZpbmUgTUZQX0FGNwkJCSgweDcgPDwgMTApCi0jZGVmaW5lIE1GUF9BRl9NQVNLCQkoMHg3IDw8IDEwKQotI2RlZmluZSBNRlBfQUYoeCkJCSgoKHgpID4+IDEwKSAmIDB4NykKLQotI2RlZmluZSBNRlBfRFMwMVgJCSgweDAgPDwgMTMpCi0jZGVmaW5lIE1GUF9EUzAyWAkJKDB4MSA8PCAxMykKLSNkZWZpbmUgTUZQX0RTMDNYCQkoMHgyIDw8IDEzKQotI2RlZmluZSBNRlBfRFMwNFgJCSgweDMgPDwgMTMpCi0jZGVmaW5lIE1GUF9EUzA2WAkJKDB4NCA8PCAxMykKLSNkZWZpbmUgTUZQX0RTMDhYCQkoMHg1IDw8IDEzKQotI2RlZmluZSBNRlBfRFMxMFgJCSgweDYgPDwgMTMpCi0jZGVmaW5lIE1GUF9EUzEzWAkJKDB4NyA8PCAxMykKLSNkZWZpbmUgTUZQX0RTX01BU0sJCSgweDcgPDwgMTMpCi0jZGVmaW5lIE1GUF9EUyh4KQkJKCgoeCkgPj4gMTMpICYgMHg3KQotCi0jZGVmaW5lIE1GUF9MUE1fREVGQVVMVAkJKDB4MCA8PCAxNikKLSNkZWZpbmUgTUZQX0xQTV9EUklWRV9MT1cJKDB4MSA8PCAxNikKLSNkZWZpbmUgTUZQX0xQTV9EUklWRV9ISUdICSgweDIgPDwgMTYpCi0jZGVmaW5lIE1GUF9MUE1fUFVMTF9MT1cJKDB4MyA8PCAxNikKLSNkZWZpbmUgTUZQX0xQTV9QVUxMX0hJR0gJKDB4NCA8PCAxNikKLSNkZWZpbmUgTUZQX0xQTV9GTE9BVAkJKDB4NSA8PCAxNikKLSNkZWZpbmUgTUZQX0xQTV9JTlBVVAkJKDB4NiA8PCAxNikKLSNkZWZpbmUgTUZQX0xQTV9TVEFURV9NQVNLCSgweDcgPDwgMTYpCi0jZGVmaW5lIE1GUF9MUE1fU1RBVEUoeCkJKCgoeCkgPj4gMTYpICYgMHg3KQotCi0jZGVmaW5lIE1GUF9MUE1fRURHRV9OT05FCSgweDAgPDwgMTkpCi0jZGVmaW5lIE1GUF9MUE1fRURHRV9SSVNFCSgweDEgPDwgMTkpCi0jZGVmaW5lIE1GUF9MUE1fRURHRV9GQUxMCSgweDIgPDwgMTkpCi0jZGVmaW5lIE1GUF9MUE1fRURHRV9CT1RICSgweDMgPDwgMTkpCi0jZGVmaW5lIE1GUF9MUE1fRURHRV9NQVNLCSgweDMgPDwgMTkpCi0jZGVmaW5lIE1GUF9MUE1fRURHRSh4KQkJKCgoeCkgPj4gMTkpICYgMHgzKQotCi0jZGVmaW5lIE1GUF9QVUxMX05PTkUJCSgweDAgPDwgMjEpCi0jZGVmaW5lIE1GUF9QVUxMX0xPVwkJKDB4MSA8PCAyMSkKLSNkZWZpbmUgTUZQX1BVTExfSElHSAkJKDB4MiA8PCAyMSkKLSNkZWZpbmUgTUZQX1BVTExfQk9USAkJKDB4MyA8PCAyMSkKLSNkZWZpbmUgTUZQX1BVTExfTUFTSwkJKDB4MyA8PCAyMSkKLSNkZWZpbmUgTUZQX1BVTEwoeCkJCSgoKHgpID4+IDIxKSAmIDB4MykKLQotI2RlZmluZSBNRlBfQ0ZHX0RFRkFVTFQJCShNRlBfQUYwIHwgTUZQX0RTMDNYIHwgTUZQX0xQTV9ERUZBVUxUIHxcCi0JCQkJIE1GUF9MUE1fRURHRV9OT05FIHwgTUZQX1BVTExfTk9ORSkKLQotI2RlZmluZSBNRlBfQ0ZHKHBpbiwgYWYpCQlcCi0JKChNRlBfQ0ZHX0RFRkFVTFQgJiB+TUZQX0FGX01BU0spIHxcCi0JIChNRlBfUElOKE1GUF9QSU5fIyNwaW4pIHwgTUZQXyMjYWYpKQotCi0jZGVmaW5lIE1GUF9DRkdfRFJWKHBpbiwgYWYsIGRydikJXAotCSgoTUZQX0NGR19ERUZBVUxUICYgfihNRlBfQUZfTUFTSyB8IE1GUF9EU19NQVNLKSkgfFwKLQkgKE1GUF9QSU4oTUZQX1BJTl8jI3BpbikgfCBNRlBfIyNhZiB8IE1GUF8jI2RydikpCi0KLSNkZWZpbmUgTUZQX0NGR19MUE0ocGluLCBhZiwgbHBtKQlcCi0JKChNRlBfQ0ZHX0RFRkFVTFQgJiB+KE1GUF9BRl9NQVNLIHwgTUZQX0xQTV9TVEFURV9NQVNLKSkgfFwKLQkgKE1GUF9QSU4oTUZQX1BJTl8jI3BpbikgfCBNRlBfIyNhZiB8IE1GUF9MUE1fIyNscG0pKQotCi0jZGVmaW5lIE1GUF9DRkdfWChwaW4sIGFmLCBkcnYsIGxwbSkJXAotCSgoTUZQX0NGR19ERUZBVUxUICYgfihNRlBfQUZfTUFTSyB8IE1GUF9EU19NQVNLIHwgTUZQX0xQTV9TVEFURV9NQVNLKSkgfFwKLQkgKE1GUF9QSU4oTUZQX1BJTl8jI3BpbikgfCBNRlBfIyNhZiB8IE1GUF8jI2RydiB8IE1GUF9MUE1fIyNscG0pKQorI2luY2x1ZGUgPHBsYXQvbWZwLmg+CiAKICNlbmRpZiAvKiBfX0FTTV9BUkNIX01GUF9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvbW1jLmggYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvbW1jLmgKaW5kZXggNmQxMzA0Yy4uMDJhNjlkYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL21tYy5oCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9tbWMuaApAQCAtMTQsNiArMTQsMTEgQEAKIAlpbnQgKCpnZXRfcm8pKHN0cnVjdCBkZXZpY2UgKik7CiAJdm9pZCAoKnNldHBvd2VyKShzdHJ1Y3QgZGV2aWNlICosIHVuc2lnbmVkIGludCk7CiAJdm9pZCAoKmV4aXQpKHN0cnVjdCBkZXZpY2UgKiwgdm9pZCAqKTsKKwlpbnQgZ3Bpb19jYXJkX2RldGVjdDsJCQkvKiBncGlvIGRldGVjdGluZyBjYXJkIGluc2VydGlvbiAqLworCWludCBncGlvX2NhcmRfcm87CQkJLyogZ3BpbyBkZXRlY3RpbmcgcmVhZCBvbmx5IHRvZ2dsZSAqLworCWJvb2wgZ3Bpb19jYXJkX3JvX2ludmVydDsJCS8qIGdwaW8gcm8gaXMgaW52ZXJ0ZWQgKi8KKwlpbnQgZ3Bpb19wb3dlcjsJCQkJLyogZ3BpbyBwb3dlcmluZyB1cCBNTUMgYnVzICovCisJYm9vbCBncGlvX3Bvd2VyX2ludmVydDsJCQkvKiBncGlvIHBvd2VyIGlzIGludmVydGVkICovCiB9OwogCiBleHRlcm4gdm9pZCBweGFfc2V0X21jaV9pbmZvKHN0cnVjdCBweGFtY2lfcGxhdGZvcm1fZGF0YSAqaW5mbyk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcGFsbXRjLmggYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcGFsbXRjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2RjOWIwNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9wYWxtdGMuaApAQCAtMCwwICsxLDg2IEBACisvKgorICogbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL3BhbG10Yy1ncGlvLmgKKyAqCisgKiBHUElPcyBhbmQgaW50ZXJydXB0cyBmb3IgUGFsbSBUdW5nc3RlbnxDIEhhbmRoZWxkIENvbXB1dGVyCisgKgorICogQXV0aG9yczoJQWxleCBPc2Jvcm5lIDxib2JvZmRvb21AZ21haWwuY29tPgorICoJCU1hcmVrIFZhc3V0IDxtYXJlay52YXN1dEBnbWFpbC5jb20+CisgKgkJSG9sZ2VyIEJvY2tsZXQgPGJpdHouZW1haWxAZ214Lm5ldD4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqLworCisjaWZuZGVmIF9JTkNMVURFX1BBTE1UQ19IXworI2RlZmluZSBfSU5DTFVERV9QQUxNVENfSF8KKworLyoqIEhFUkUgQVJFIEdQSU9zICoqLworCisvKiBHUElPcyAqLworI2RlZmluZSBHUElPX05SX1BBTE1UQ19FQVJQSE9ORV9ERVRFQ1QJMgorI2RlZmluZSBHUElPX05SX1BBTE1UQ19DUkFETEVfREVURUNUCTUKKyNkZWZpbmUgR1BJT19OUl9QQUxNVENfSE9UU1lOQ19CVVRUT04JNworCisvKiBTRC9NTUMgKi8KKyNkZWZpbmUgR1BJT19OUl9QQUxNVENfU0RfREVURUNUX04JMTIKKyNkZWZpbmUgR1BJT19OUl9QQUxNVENfU0RfUE9XRVIJCTMyCisjZGVmaW5lIEdQSU9fTlJfUEFMTVRDX1NEX1JFQURPTkxZCTU0CisKKy8qIFdMQU4gKi8KKyNkZWZpbmUgR1BJT19OUl9QQUxNVENfUENNQ0lBX1JFQURZCTEzCisjZGVmaW5lIEdQSU9fTlJfUEFMTVRDX1BDTUNJQV9QV1JSRUFEWQkxNAorI2RlZmluZSBHUElPX05SX1BBTE1UQ19QQ01DSUFfUE9XRVIxCTE1CisjZGVmaW5lIEdQSU9fTlJfUEFMTVRDX1BDTUNJQV9QT1dFUjIJMzMKKyNkZWZpbmUgR1BJT19OUl9QQUxNVENfUENNQ0lBX1BPV0VSMwk1NQorI2RlZmluZSBHUElPX05SX1BBTE1UQ19QQ01DSUFfUkVTRVQJNzgKKworLyogVURDICovCisjZGVmaW5lIEdQSU9fTlJfUEFMTVRDX1VTQl9ERVRFQ1RfTgk0CisjZGVmaW5lIEdQSU9fTlJfUEFMTVRDX1VTQl9QT1dFUgkzNgorCisvKiBMQ0QvQkFDS0xJR0hUICovCisjZGVmaW5lIEdQSU9fTlJfUEFMTVRDX0JMX1BPV0VSCQkxNgorI2RlZmluZSBHUElPX05SX1BBTE1UQ19MQ0RfUE9XRVIJNDQKKyNkZWZpbmUgR1BJT19OUl9QQUxNVENfTENEX0JMQU5LCTM4CisKKy8qIFVBUlQgKi8KKyNkZWZpbmUgR1BJT19OUl9QQUxNVENfUlMyMzJfUE9XRVIJMzcKKworLyogSVJEQSAqLworI2RlZmluZSBHUElPX05SX1BBTE1UQ19JUl9ESVNBQkxFCTQ1CisKKy8qIElSUXMgKi8KKyNkZWZpbmUgSVJRX0dQSU9fUEFMTVRDX1NEX0RFVEVDVF9OCUlSUV9HUElPKEdQSU9fTlJfUEFMTVRDX1NEX0RFVEVDVF9OKQorI2RlZmluZSBJUlFfR1BJT19QQUxNVENfV0xBTl9SRUFEWQlJUlFfR1BJTyhHUElPX05SX1BBTE1UQ19XTEFOX1JFQURZKQorCisvKiBVQ0IxNDAwIEdQSU9zICovCisjZGVmaW5lIEdQSU9fTlJfUEFMTVRDX1BPV0VSX0RFVEVDVAkoMHg4MCB8IDB4MDApCisjZGVmaW5lIEdQSU9fTlJfUEFMTVRDX0hFQURQSE9ORV9ERVRFQ1QJKDB4ODAgfCAweDAxKQorI2RlZmluZSBHUElPX05SX1BBTE1UQ19TUEVBS0VSX0VOQUJMRQkoMHg4MCB8IDB4MDMpCisjZGVmaW5lIEdQSU9fTlJfUEFMTVRDX1ZJQlJBX1BPV0VSCSgweDgwIHwgMHgwNSkKKyNkZWZpbmUgR1BJT19OUl9QQUxNVENfTEVEX1BPV0VSCSgweDgwIHwgMHgwNykKKworLyoqIEhFUkUgQVJFIElOSVQgVkFMVUVTICoqLworI2RlZmluZSBQQUxNVENfVUNCMTQwMF9HUElPX09GRlNFVAkweDgwCisKKy8qIEJBVFRFUlkgKi8KKyNkZWZpbmUgUEFMTVRDX0JBVF9NQVhfVk9MVEFHRQkJNDAwMAkvKiA0LjAwViBtYXhpbXVtIHZvbHRhZ2UgKi8KKyNkZWZpbmUgUEFMTVRDX0JBVF9NSU5fVk9MVEFHRQkJMzU1MAkvKiAzLjU1ViBjcml0aWNhbCB2b2x0YWdlICovCisjZGVmaW5lIFBBTE1UQ19CQVRfTUFYX0NVUlJFTlQJCTAJLyogdW5rbm9rbiAqLworI2RlZmluZSBQQUxNVENfQkFUX01JTl9DVVJSRU5UCQkwCS8qIHVua25vd24gKi8KKyNkZWZpbmUgUEFMTVRDX0JBVF9NQVhfQ0hBUkdFCQkxCS8qIHVua25vd24gKi8KKyNkZWZpbmUgUEFMTVRDX0JBVF9NSU5fQ0hBUkdFCQkxCS8qIHVua25vd24gKi8KKyNkZWZpbmUgUEFMTVRDX01BWF9MSUZFX01JTlMJCTI0MAkvKiBvbi1saWZlIGluIG1pbnV0ZXMgKi8KKworI2RlZmluZSBQQUxNVENfQkFUX01FQVNVUkVfREVMQVkJKEhaICogMSkKKworLyogQkFDS0xJR0hUICovCisjZGVmaW5lIFBBTE1UQ19NQVhfSU5URU5TSVRZCQkweEZFCisjZGVmaW5lIFBBTE1UQ19ERUZBVUxUX0lOVEVOU0lUWQkweDdFCisjZGVmaW5lIFBBTE1UQ19MSU1JVF9NQVNLCQkweDdGCisjZGVmaW5lIFBBTE1UQ19QUkVTQ0FMRVIJCTB4M0YKKyNkZWZpbmUgUEFMTVRDX1BFUklPRF9OUwkJMzUwMAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9wYWxtdHguaCBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9wYWxtdHguaAppbmRleCBlNzQwODJjLi4xYmUwZGI2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcGFsbXR4LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3BhbG10eC5oCkBAIC04Miw2ICs4MiwxMSBAQAogI2RlZmluZSBQQUxNVFhfUEhZU19GTEFTSF9TVEFSVAlQWEFfQ1MwX1BIWVMJLyogQ2hpcFNlbGVjdCAwICovCiAjZGVmaW5lIFBBTE1UWF9QSFlTX05BTkRfU1RBUlQJUFhBX0NTMV9QSFlTCS8qIENoaXBTZWxlY3QgMSAqLwogCisjZGVmaW5lIFBBTE1UWF9OQU5EX0FMRV9QSFlTCShQQUxNVFhfUEhZU19OQU5EX1NUQVJUIHwgKDEgPDwgMjQpKQorI2RlZmluZSBQQUxNVFhfTkFORF9DTEVfUEhZUwkoUEFMTVRYX1BIWVNfTkFORF9TVEFSVCB8ICgxIDw8IDI1KSkKKyNkZWZpbmUgUEFMTVRYX05BTkRfQUxFX1ZJUlQJMHhmZjEwMDAwMAorI2RlZmluZSBQQUxNVFhfTkFORF9DTEVfVklSVAkweGZmMjAwMDAwCisKIC8qIFRPVUNIU0NSRUVOICovCiAjZGVmaW5lIEFDOTdfTElOS19GUkFNRQkJCTIxCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9weGEzeHgtcmVncy5oIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3B4YTN4eC1yZWdzLmgKaW5kZXggN2QxYTA1OS4uZTkxZDYzYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3B4YTN4eC1yZWdzLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3B4YTN4eC1yZWdzLmgKQEAgLTIwOCw3ICsyMDgsNyBAQAogI2RlZmluZSBDS0VOX01WRUQJNDMJLyogPCBNVkVEIGNsb2NrIGVuYWJsZSAqLwogCiAvKiBOb3RlOiBHQ1UgY2xvY2sgZW5hYmxlIGJpdCBkaWZmZXJzIG9uIFBYQTMwMC9QWEEzMTAgYW5kIFBYQTMyMCAqLwotI2RlZmluZSBQWEEzMDBfQ0tFTl9HUkFQSElDUwk0MgkvKiBHcmFwaGljcyBjb250cm9sbGVyIGNsb2NrIGVuYWJsZSAqLwotI2RlZmluZSBQWEEzMjBfQ0tFTl9HUkFQSElDUwk3CS8qIEdyYXBoaWNzIGNvbnRyb2xsZXIgY2xvY2sgZW5hYmxlICovCisjZGVmaW5lIENLRU5fUFhBMzAwX0dDVQkJNDIJLyogR3JhcGhpY3MgY29udHJvbGxlciBjbG9jayBlbmFibGUgKi8KKyNkZWZpbmUgQ0tFTl9QWEEzMjBfR0NVCQk3CS8qIEdyYXBoaWNzIGNvbnRyb2xsZXIgY2xvY2sgZW5hYmxlICovCiAKICNlbmRpZiAvKiBfX0FTTV9BUkNIX1BYQTNYWF9SRUdTX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9weGFmYi5oIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3B4YWZiLmgKaW5kZXggNjkzMjcyMC4uZjczMDYxYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3B4YWZiLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3B4YWZiLmgKQEAgLTExOCw3ICsxMTgsOCBAQAogCXVfaW50CQlmaXhlZF9tb2RlczoxLAogCQkJY21hcF9pbnZlcnNlOjEsCiAJCQljbWFwX3N0YXRpYzoxLAotCQkJdW51c2VkOjI5OworCQkJYWNjZWxlcmF0aW9uX2VuYWJsZWQ6MSwKKwkJCXVudXNlZDoyODsKIAogCS8qIFRoZSBmb2xsb3dpbmcgc2hvdWxkIGJlIGRlZmluZWQgaW4gTENDUjAKIAkgKiAgICAgIExDQ1IwX0FjdCBvciBMQ0NSMF9QYXMgICAgICAgICAgQWN0aXZlIG9yIFBhc3NpdmUKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9yZWdzLWludGMuaCBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9yZWdzLWludGMuaAppbmRleCBhZDIzZTc0Li42ODQ2NGNlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcmVncy1pbnRjLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3JlZ3MtaW50Yy5oCkBAIC0xMyw2ICsxMyw3IEBACiAjZGVmaW5lIElDRlAJCV9fUkVHKDB4NDBEMDAwMEMpICAvKiBJbnRlcnJ1cHQgQ29udHJvbGxlciBGSVEgUGVuZGluZyBSZWdpc3RlciAqLwogI2RlZmluZSBJQ1BSCQlfX1JFRygweDQwRDAwMDEwKSAgLyogSW50ZXJydXB0IENvbnRyb2xsZXIgUGVuZGluZyBSZWdpc3RlciAqLwogI2RlZmluZSBJQ0NSCQlfX1JFRygweDQwRDAwMDE0KSAgLyogSW50ZXJydXB0IENvbnRyb2xsZXIgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBJQ0hQCQlfX1JFRygweDQwRDAwMDE4KSAgLyogSW50ZXJydXB0IENvbnRyb2xsZXIgSGlnaGVzdCBQcmlvcml0eSBSZWdpc3RlciAqLwogCiAjZGVmaW5lIElDSVAyCQlfX1JFRygweDQwRDAwMDlDKSAgLyogSW50ZXJydXB0IENvbnRyb2xsZXIgSVJRIFBlbmRpbmcgUmVnaXN0ZXIgMiAqLwogI2RlZmluZSBJQ01SMgkJX19SRUcoMHg0MEQwMDBBMCkgIC8qIEludGVycnVwdCBDb250cm9sbGVyIE1hc2sgUmVnaXN0ZXIgMiAqLwpAQCAtMjAsNCArMjEsMTQgQEAKICNkZWZpbmUgSUNGUDIJCV9fUkVHKDB4NDBEMDAwQTgpICAvKiBJbnRlcnJ1cHQgQ29udHJvbGxlciBGSVEgUGVuZGluZyBSZWdpc3RlciAyICovCiAjZGVmaW5lIElDUFIyCQlfX1JFRygweDQwRDAwMEFDKSAgLyogSW50ZXJydXB0IENvbnRyb2xsZXIgUGVuZGluZyBSZWdpc3RlciAyICovCiAKKyNkZWZpbmUgSUNJUDMJCV9fUkVHKDB4NDBEMDAxMzApICAvKiBJbnRlcnJ1cHQgQ29udHJvbGxlciBJUlEgUGVuZGluZyBSZWdpc3RlciAzICovCisjZGVmaW5lIElDTVIzCQlfX1JFRygweDQwRDAwMTM0KSAgLyogSW50ZXJydXB0IENvbnRyb2xsZXIgTWFzayBSZWdpc3RlciAzICovCisjZGVmaW5lIElDTFIzCQlfX1JFRygweDQwRDAwMTM4KSAgLyogSW50ZXJydXB0IENvbnRyb2xsZXIgTGV2ZWwgUmVnaXN0ZXIgMyAqLworI2RlZmluZSBJQ0ZQMwkJX19SRUcoMHg0MEQwMDEzQykgIC8qIEludGVycnVwdCBDb250cm9sbGVyIEZJUSBQZW5kaW5nIFJlZ2lzdGVyIDMgKi8KKyNkZWZpbmUgSUNQUjMJCV9fUkVHKDB4NDBEMDAxNDApICAvKiBJbnRlcnJ1cHQgQ29udHJvbGxlciBQZW5kaW5nIFJlZ2lzdGVyIDMgKi8KKworI2RlZmluZSBJUFIoeCkJCV9fUkVHKDB4NDBEMDAwMUMgKyAoeCA8IDMyID8gKHggPDwgMikJCVwKKwkJCQk6ICh4IDwgNjQgPyAoMHg5NCArICgoeCAtIDMyKSA8PCAyKSkJXAorCQkJCTogKDB4MTI4ICsgKCh4IC0gNjQpIDw8IDIpKSkpKQorCiAjZW5kaWYgLyogX19BU01fTUFDSF9SRUdTX0lOVENfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3VuY29tcHJlc3MuaCBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC91bmNvbXByZXNzLmgKaW5kZXggYjU0NzQ5NC4uMjM3NzM0YiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3VuY29tcHJlc3MuaAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvdW5jb21wcmVzcy5oCkBAIC0zNyw3ICszNyw3IEBACiB7CiAJaWYgKG1hY2hpbmVfaXNfbGl0dGxldG9uKCkgfHwgbWFjaGluZV9pc19pbnRlbG1vdGUyKCkKIAkgICAgfHwgbWFjaGluZV9pc19jc2I3MjYoKSB8fCBtYWNoaW5lX2lzX3N0YXJnYXRlMigpCi0JICAgIHx8IG1hY2hpbmVfaXNfY21feDMwMCgpKQorCSAgICB8fCBtYWNoaW5lX2lzX2NtX3gzMDAoKSB8fCBtYWNoaW5lX2lzX2JhbGxvb24zKCkpCiAJCVVBUlQgPSBTVFVBUlQ7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2lycS5jIGIvYXJjaC9hcm0vbWFjaC1weGEvaXJxLmMKaW5kZXggZjZlMDMwMC4uZDY5NGNlMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvaXJxLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvaXJxLmMKQEAgLTEyMCw3ICsxMjAsNyBAQAogCiB2b2lkIF9faW5pdCBweGFfaW5pdF9pcnEoaW50IGlycV9uciwgc2V0X3dha2VfdCBmbikKIHsKLQlpbnQgaXJxOworCWludCBpcnEsIGk7CiAKIAlweGFfaW50ZXJuYWxfaXJxX25yID0gaXJxX25yOwogCkBAIC0xMjksNiArMTI5LDEyIEBACiAJCV9JQ0xSKGlycSkgPSAwOwkvKiBhbGwgSVJRcyBhcmUgSVJRLCBub3QgRklRICovCiAJfQogCisJLyogaW5pdGlhbGl6ZSBpbnRlcnJ1cHQgcHJpb3JpdHkgKi8KKwlpZiAoY3B1X2lzX3B4YTI3eCgpIHx8IGNwdV9pc19weGEzeHgoKSkgeworCQlmb3IgKGkgPSAwOyBpIDwgaXJxX25yOyBpKyspCisJCQlJUFIoaSkgPSBpIHwgKDEgPDwgMzEpOworCX0KKwogCS8qIG9ubHkgdW5tYXNrZWQgaW50ZXJydXB0cyBraWNrIHVzIG91dCBvZiBpZGxlICovCiAJSUNDUiA9IDE7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2xpdHRsZXRvbi5jIGIvYXJjaC9hcm0vbWFjaC1weGEvbGl0dGxldG9uLmMKaW5kZXggNTViMzc4OC4uMTM4NDg5NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvbGl0dGxldG9uLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvbGl0dGxldG9uLmMKQEAgLTI2NSw0NSArMjY1LDEyIEBACiAjZW5kaWYKIAogI2lmIGRlZmluZWQoQ09ORklHX01NQ19QWEEpIHx8IGRlZmluZWQoQ09ORklHX01NQ19QWEFfTU9EVUxFKQotc3RhdGljIGludCBsaXR0bGV0b25fbWNpX2luaXQoc3RydWN0IGRldmljZSAqZGV2LAotCQkJICAgICAgaXJxX2hhbmRsZXJfdCBsaXR0bGV0b25fZGV0ZWN0X2ludCwgdm9pZCAqZGF0YSkKLXsKLQlpbnQgZXJyLCBncGlvX2NkID0gR1BJT19NTUMxX0NBUkRfREVURUNUOwotCi0JZXJyID0gZ3Bpb19yZXF1ZXN0KGdwaW9fY2QsICJtbWMgY2FyZCBkZXRlY3QiKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycl9yZXF1ZXN0X2NkOwotCi0JZ3Bpb19kaXJlY3Rpb25faW5wdXQoZ3Bpb19jZCk7Ci0KLQllcnIgPSByZXF1ZXN0X2lycShncGlvX3RvX2lycShncGlvX2NkKSwgbGl0dGxldG9uX2RldGVjdF9pbnQsCi0JCQkgIElSUUZfVFJJR0dFUl9SSVNJTkcgfCBJUlFGX1RSSUdHRVJfRkFMTElORywKLQkJCSAgIm1tYyBjYXJkIGRldGVjdCIsIGRhdGEpOwotCWlmIChlcnIpIHsKLQkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gcmVxdWVzdCBjYXJkIGRldGVjdCBJUlFcbiIpOwotCQlnb3RvIGVycl9yZXF1ZXN0X2lycTsKLQl9Ci0JcmV0dXJuIDA7Ci0KLWVycl9yZXF1ZXN0X2lycToKLQlncGlvX2ZyZWUoZ3Bpb19jZCk7Ci1lcnJfcmVxdWVzdF9jZDoKLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgdm9pZCBsaXR0bGV0b25fbWNpX2V4aXQoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQotewotCWludCBncGlvX2NkID0gR1BJT19NTUMxX0NBUkRfREVURUNUOwotCi0JZnJlZV9pcnEoZ3Bpb190b19pcnEoZ3Bpb19jZCksIGRhdGEpOwotCWdwaW9fZnJlZShncGlvX2NkKTsKLX0KLQogc3RhdGljIHN0cnVjdCBweGFtY2lfcGxhdGZvcm1fZGF0YSBsaXR0bGV0b25fbWNpX3BsYXRmb3JtX2RhdGEgPSB7Ci0JLmRldGVjdF9kZWxheQk9IDIwLAotCS5vY3JfbWFzawk9IE1NQ19WRERfMzJfMzMgfCBNTUNfVkREXzMzXzM0LAotCS5pbml0IAkJPSBsaXR0bGV0b25fbWNpX2luaXQsCi0JLmV4aXQJCT0gbGl0dGxldG9uX21jaV9leGl0LAorCS5kZXRlY3RfZGVsYXkJCT0gMjAsCisJLm9jcl9tYXNrCQk9IE1NQ19WRERfMzJfMzMgfCBNTUNfVkREXzMzXzM0LAorCS5ncGlvX2NhcmRfZGV0ZWN0CT0gR1BJT19NTUMxX0NBUkRfREVURUNULAorCS5ncGlvX2NhcmRfcm8JCT0gLTEsCisJLmdwaW9fcG93ZXIJCT0gLTEsCiB9OwogCiBzdGF0aWMgdm9pZCBfX2luaXQgbGl0dGxldG9uX2luaXRfbW1jKHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9sdWJib2NrLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9sdWJib2NrLmMKaW5kZXggZjA0YzgzMy4uYzZhOTRkMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvbHViYm9jay5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2x1YmJvY2suYwpAQCAtNDgyLDExICs0ODIsMTQgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBweGFtY2lfcGxhdGZvcm1fZGF0YSBsdWJib2NrX21jaV9wbGF0Zm9ybV9kYXRhID0gewotCS5vY3JfbWFzawk9IE1NQ19WRERfMzJfMzN8TU1DX1ZERF8zM18zNCwKLQkuZGV0ZWN0X2RlbGF5CT0gMSwKLQkuaW5pdCAJCT0gbHViYm9ja19tY2lfaW5pdCwKLQkuZ2V0X3JvCQk9IGx1YmJvY2tfbWNpX2dldF9ybywKLQkuZXhpdCAJCT0gbHViYm9ja19tY2lfZXhpdCwKKwkub2NyX21hc2sJCT0gTU1DX1ZERF8zMl8zM3xNTUNfVkREXzMzXzM0LAorCS5kZXRlY3RfZGVsYXkJCT0gMSwKKwkuaW5pdCAJCQk9IGx1YmJvY2tfbWNpX2luaXQsCisJLmdldF9ybwkJCT0gbHViYm9ja19tY2lfZ2V0X3JvLAorCS5leGl0IAkJCT0gbHViYm9ja19tY2lfZXhpdCwKKwkuZ3Bpb19jYXJkX2RldGVjdAk9IC0xLAorCS5ncGlvX2NhcmRfcm8JCT0gLTEsCisJLmdwaW9fcG93ZXIJCT0gLTEsCiB9OwogCiBzdGF0aWMgdm9pZCBsdWJib2NrX2lyZGFfdHJhbnNjZWl2ZXJfbW9kZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBtb2RlKQpAQCAtNTA0LDggKzUwNyw5IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcHhhZmljcF9wbGF0Zm9ybV9kYXRhIGx1YmJvY2tfZmljcF9wbGF0Zm9ybV9kYXRhID0gewotCS50cmFuc2NlaXZlcl9jYXAgID0gSVJfU0lSTU9ERSB8IElSX0ZJUk1PREUsCi0JLnRyYW5zY2VpdmVyX21vZGUgPSBsdWJib2NrX2lyZGFfdHJhbnNjZWl2ZXJfbW9kZSwKKwkuZ3Bpb19wd2Rvd24JCT0gLTEsCisJLnRyYW5zY2VpdmVyX2NhcAk9IElSX1NJUk1PREUgfCBJUl9GSVJNT0RFLAorCS50cmFuc2NlaXZlcl9tb2RlCT0gbHViYm9ja19pcmRhX3RyYW5zY2VpdmVyX21vZGUsCiB9OwogCiBzdGF0aWMgdm9pZCBfX2luaXQgbHViYm9ja19pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9tYWdpY2lhbi5jIGIvYXJjaC9hcm0vbWFjaC1weGEvbWFnaWNpYW4uYwppbmRleCBjYTM5NjY5Li41MzYwYzA3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9tYWdpY2lhbi5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL21hZ2ljaWFuLmMKQEAgLTE0MCwxNSArMTQwLDkgQEAKICAqIElSREEKICAqLwogCi1zdGF0aWMgdm9pZCBtYWdpY2lhbl9pcmRhX3RyYW5zY2VpdmVyX21vZGUoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgbW9kZSkKLXsKLQlncGlvX3NldF92YWx1ZShHUElPODNfTUFHSUNJQU5fbklSX0VOLCBtb2RlICYgSVJfT0ZGKTsKLQlweGEyeHhfdHJhbnNjZWl2ZXJfbW9kZShkZXYsIG1vZGUpOwotfQotCiBzdGF0aWMgc3RydWN0IHB4YWZpY3BfcGxhdGZvcm1fZGF0YSBtYWdpY2lhbl9maWNwX2luZm8gPSB7Ci0JLnRyYW5zY2VpdmVyX2NhcCAgPSBJUl9TSVJNT0RFIHwgSVJfT0ZGLAotCS50cmFuc2NlaXZlcl9tb2RlID0gbWFnaWNpYW5faXJkYV90cmFuc2NlaXZlcl9tb2RlLAorCS5ncGlvX3B3ZG93bgkJPSBHUElPODNfTUFHSUNJQU5fbklSX0VOLAorCS50cmFuc2NlaXZlcl9jYXAJPSBJUl9TSVJNT0RFIHwgSVJfT0ZGLAogfTsKIAogLyoKQEAgLTY1MSw1NSArNjQ1LDI0IEBACiBzdGF0aWMgaW50IG1hZ2ljaWFuX21jaV9pbml0KHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCQlpcnFfaGFuZGxlcl90IGRldGVjdF9pcnEsIHZvaWQgKmRhdGEpCiB7Ci0JaW50IGVycjsKLQotCWVyciA9IHJlcXVlc3RfaXJxKElSUV9NQUdJQ0lBTl9TRCwgZGV0ZWN0X2lycSwKKwlyZXR1cm4gcmVxdWVzdF9pcnEoSVJRX01BR0lDSUFOX1NELCBkZXRlY3RfaXJxLAogCQkJCUlSUUZfRElTQUJMRUQgfCBJUlFGX1NBTVBMRV9SQU5ET00sCi0JCQkJIk1NQyBjYXJkIGRldGVjdCIsIGRhdGEpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyX3JlcXVlc3RfaXJxOwotCWVyciA9IGdwaW9fcmVxdWVzdChFR1BJT19NQUdJQ0lBTl9TRF9QT1dFUiwgIlNEX1BPV0VSIik7Ci0JaWYgKGVycikKLQkJZ290byBlcnJfcmVxdWVzdF9wb3dlcjsKLQllcnIgPSBncGlvX3JlcXVlc3QoRUdQSU9fTUFHSUNJQU5fblNEX1JFQURPTkxZLCAiblNEX1JFQURPTkxZIik7Ci0JaWYgKGVycikKLQkJZ290byBlcnJfcmVxdWVzdF9yZWFkb25seTsKLQotCXJldHVybiAwOwotCi1lcnJfcmVxdWVzdF9yZWFkb25seToKLQlncGlvX2ZyZWUoRUdQSU9fTUFHSUNJQU5fU0RfUE9XRVIpOwotZXJyX3JlcXVlc3RfcG93ZXI6Ci0JZnJlZV9pcnEoSVJRX01BR0lDSUFOX1NELCBkYXRhKTsKLWVycl9yZXF1ZXN0X2lycToKLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgdm9pZCBtYWdpY2lhbl9tY2lfc2V0cG93ZXIoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgdmRkKQotewotCXN0cnVjdCBweGFtY2lfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBkZXYtPnBsYXRmb3JtX2RhdGE7Ci0KLQlncGlvX3NldF92YWx1ZShFR1BJT19NQUdJQ0lBTl9TRF9QT1dFUiwgKDEgPDwgdmRkKSAmIHBkYXRhLT5vY3JfbWFzayk7Ci19Ci0KLXN0YXRpYyBpbnQgbWFnaWNpYW5fbWNpX2dldF9ybyhzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0JcmV0dXJuICghZ3Bpb19nZXRfdmFsdWUoRUdQSU9fTUFHSUNJQU5fblNEX1JFQURPTkxZKSk7CisJCQkJIm1tYyBjYXJkIGRldGVjdCIsIGRhdGEpOwogfQogCiBzdGF0aWMgdm9pZCBtYWdpY2lhbl9tY2lfZXhpdChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCiB7Ci0JZ3Bpb19mcmVlKEVHUElPX01BR0lDSUFOX25TRF9SRUFET05MWSk7Ci0JZ3Bpb19mcmVlKEVHUElPX01BR0lDSUFOX1NEX1BPV0VSKTsKIAlmcmVlX2lycShJUlFfTUFHSUNJQU5fU0QsIGRhdGEpOwogfQogCiBzdGF0aWMgc3RydWN0IHB4YW1jaV9wbGF0Zm9ybV9kYXRhIG1hZ2ljaWFuX21jaV9pbmZvID0gewotCS5vY3JfbWFzayA9IE1NQ19WRERfMzJfMzN8TU1DX1ZERF8zM18zNCwKLQkuaW5pdCAgICAgPSBtYWdpY2lhbl9tY2lfaW5pdCwKLQkuZ2V0X3JvICAgPSBtYWdpY2lhbl9tY2lfZ2V0X3JvLAotCS5zZXRwb3dlciA9IG1hZ2ljaWFuX21jaV9zZXRwb3dlciwKLQkuZXhpdCAgICAgPSBtYWdpY2lhbl9tY2lfZXhpdCwKKwkub2NyX21hc2sgCQk9IE1NQ19WRERfMzJfMzN8TU1DX1ZERF8zM18zNCwKKwkuaW5pdCAgICAgCQk9IG1hZ2ljaWFuX21jaV9pbml0LAorCS5leGl0ICAgICAJCT0gbWFnaWNpYW5fbWNpX2V4aXQsCisJLmdwaW9fY2FyZF9kZXRlY3QJPSAtMSwKKwkuZ3Bpb19jYXJkX3JvCQk9IEVHUElPX01BR0lDSUFOX25TRF9SRUFET05MWSwKKwkuZ3Bpb19jYXJkX3JvX2ludmVydAk9IDEsCisJLmdwaW9fcG93ZXIJCT0gRUdQSU9fTUFHSUNJQU5fU0RfUE9XRVIsCiB9OwogCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL21haW5zdG9uZS5jIGIvYXJjaC9hcm0vbWFjaC1weGEvbWFpbnN0b25lLmMKaW5kZXggZjRkYWJmMC4uYTRlZWFlMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvbWFpbnN0b25lLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvbWFpbnN0b25lLmMKQEAgLTQ1MCwxMCArNDUwLDEzIEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcHhhbWNpX3BsYXRmb3JtX2RhdGEgbWFpbnN0b25lX21jaV9wbGF0Zm9ybV9kYXRhID0gewotCS5vY3JfbWFzawk9IE1NQ19WRERfMzJfMzN8TU1DX1ZERF8zM18zNCwKLQkuaW5pdCAJCT0gbWFpbnN0b25lX21jaV9pbml0LAotCS5zZXRwb3dlciAJPSBtYWluc3RvbmVfbWNpX3NldHBvd2VyLAotCS5leGl0CQk9IG1haW5zdG9uZV9tY2lfZXhpdCwKKwkub2NyX21hc2sJCT0gTU1DX1ZERF8zMl8zM3xNTUNfVkREXzMzXzM0LAorCS5pbml0IAkJCT0gbWFpbnN0b25lX21jaV9pbml0LAorCS5zZXRwb3dlciAJCT0gbWFpbnN0b25lX21jaV9zZXRwb3dlciwKKwkuZXhpdAkJCT0gbWFpbnN0b25lX21jaV9leGl0LAorCS5ncGlvX2NhcmRfZGV0ZWN0CT0gLTEsCisJLmdwaW9fY2FyZF9ybwkJPSAtMSwKKwkuZ3Bpb19wb3dlcgkJPSAtMSwKIH07CiAKIHN0YXRpYyB2b2lkIG1haW5zdG9uZV9pcmRhX3RyYW5zY2VpdmVyX21vZGUoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgbW9kZSkKQEAgLTQ3Niw4ICs0NzksOSBAQAogfQogCiBzdGF0aWMgc3RydWN0IHB4YWZpY3BfcGxhdGZvcm1fZGF0YSBtYWluc3RvbmVfZmljcF9wbGF0Zm9ybV9kYXRhID0gewotCS50cmFuc2NlaXZlcl9jYXAgID0gSVJfU0lSTU9ERSB8IElSX0ZJUk1PREUgfCBJUl9PRkYsCi0JLnRyYW5zY2VpdmVyX21vZGUgPSBtYWluc3RvbmVfaXJkYV90cmFuc2NlaXZlcl9tb2RlLAorCS5ncGlvX3B3ZG93bgkJPSAtMSwKKwkudHJhbnNjZWl2ZXJfY2FwCT0gSVJfU0lSTU9ERSB8IElSX0ZJUk1PREUgfCBJUl9PRkYsCisJLnRyYW5zY2VpdmVyX21vZGUJPSBtYWluc3RvbmVfaXJkYV90cmFuc2NlaXZlcl9tb2RlLAogfTsKIAogc3RhdGljIHN0cnVjdCBncGlvX2tleXNfYnV0dG9uIGdwaW9fa2V5c19idXR0b25bXSA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL21pb2E3MDEuYyBiL2FyY2gvYXJtL21hY2gtcHhhL21pb2E3MDEuYwppbmRleCAyZDI4MTMyLi4zY2FiNDUyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9taW9hNzAxLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvbWlvYTcwMS5jCkBAIC00MzQsNzIgKzQzNCwxNSBAQAogLyoKICAqIFNESU8vTU1DIENhcmQgY29udHJvbGxlcgogICovCi1zdGF0aWMgdm9pZCBtY2lfc2V0cG93ZXIoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgdmRkKQotewotCXN0cnVjdCBweGFtY2lfcGxhdGZvcm1fZGF0YSAqcF9kID0gZGV2LT5wbGF0Zm9ybV9kYXRhOwotCi0JaWYgKCgxIDw8IHZkZCkgJiBwX2QtPm9jcl9tYXNrKQotCQlncGlvX3NldF92YWx1ZShHUElPOTFfU0RJT19FTiwgMSk7CS8qIGVuYWJsZSBTRElPIHBvd2VyICovCi0JZWxzZQotCQlncGlvX3NldF92YWx1ZShHUElPOTFfU0RJT19FTiwgMCk7CS8qIGRpc2FibGUgU0RJTyBwb3dlciAqLwotfQotCi1zdGF0aWMgaW50IG1jaV9nZXRfcm8oc3RydWN0IGRldmljZSAqZGV2KQotewotCXJldHVybiBncGlvX2dldF92YWx1ZShHUElPNzhfU0RJT19STyk7Ci19Ci0KLXN0cnVjdCBncGlvX3Jlc3MgbWNpX2dwaW9zW10gPSB7Ci0JTUlPX0dQSU9fSU4oR1BJTzc4X1NESU9fUk8sIAkiU0RJTyByZWFkb25seSBkZXRlY3QiKSwKLQlNSU9fR1BJT19JTihHUElPMTVfU0RJT19JTlNFUlQsCSJTRElPIGluc2VydGlvbiBkZXRlY3QiKSwKLQlNSU9fR1BJT19PVVQoR1BJTzkxX1NESU9fRU4sIDAsCSJTRElPIHBvd2VyIGVuYWJsZSIpCi19OwotCi1zdGF0aWMgdm9pZCBtY2lfZXhpdChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCi17Ci0JbWlvX2dwaW9fZnJlZShBUlJBWV9BTkRfU0laRShtY2lfZ3Bpb3MpKTsKLQlmcmVlX2lycShncGlvX3RvX2lycShHUElPMTVfU0RJT19JTlNFUlQpLCBkYXRhKTsKLX0KLQotc3RhdGljIHN0cnVjdCBweGFtY2lfcGxhdGZvcm1fZGF0YSBtaW9hNzAxX21jaV9pbmZvOwotCiAvKioKICAqIFRoZSBjYXJkIGRldGVjdCBpbnRlcnJ1cHQgaXNuJ3QgZGVib3VuY2VkIHNvIHdlIGRlbGF5IGl0IGJ5IDI1MG1zCiAgKiB0byBnaXZlIHRoZSBjYXJkIGEgY2hhbmNlIHRvIGZ1bGx5IGluc2VydC9lamVjdC4KICAqLwotc3RhdGljIGludCBtY2lfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYsIGlycV9oYW5kbGVyX3QgZGV0ZWN0X2ludCwgdm9pZCAqZGF0YSkKLXsKLQlpbnQgcmM7Ci0JaW50IGlycSA9IGdwaW9fdG9faXJxKEdQSU8xNV9TRElPX0lOU0VSVCk7Ci0KLQlyYyA9IG1pb19ncGlvX3JlcXVlc3QoQVJSQVlfQU5EX1NJWkUobWNpX2dwaW9zKSk7Ci0JaWYgKHJjKQotCQlnb3RvIGVycl9ncGlvOwotCS8qIGVuYWJsZSBSRS9GRSBpbnRlcnJ1cHQgb24gY2FyZCBpbnNlcnRpb24gYW5kIHJlbW92YWwgKi8KLQlyYyA9IHJlcXVlc3RfaXJxKGlycSwgZGV0ZWN0X2ludCwKLQkJCSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9UUklHR0VSX1JJU0lORyB8Ci0JCQkgSVJRRl9UUklHR0VSX0ZBTExJTkcsCi0JCQkgIk1NQyBjYXJkIGRldGVjdCIsIGRhdGEpOwotCWlmIChyYykKLQkJZ290byBlcnJfaXJxOwotCi0JbWlvYTcwMV9tY2lfaW5mby5kZXRlY3RfZGVsYXkgPSBtc2Vjc190b19qaWZmaWVzKDI1MCk7Ci0JcmV0dXJuIDA7Ci0KLWVycl9pcnE6Ci0JZGV2X2VycihkZXYsICJtaW9hNzAxX21jaV9pbml0OiBNTUMvU0Q6IgotCQkiIGNhbid0IHJlcXVlc3QgTU1DIGNhcmQgZGV0ZWN0IElSUVxuIik7Ci0JbWlvX2dwaW9fZnJlZShBUlJBWV9BTkRfU0laRShtY2lfZ3Bpb3MpKTsKLWVycl9ncGlvOgotCXJldHVybiByYzsKLX0KLQogc3RhdGljIHN0cnVjdCBweGFtY2lfcGxhdGZvcm1fZGF0YSBtaW9hNzAxX21jaV9pbmZvID0gewotCS5vY3JfbWFzayA9IE1NQ19WRERfMzJfMzMgfCBNTUNfVkREXzMzXzM0LAotCS5pbml0CSAgPSBtY2lfaW5pdCwKLQkuZ2V0X3JvCSAgPSBtY2lfZ2V0X3JvLAotCS5zZXRwb3dlciA9IG1jaV9zZXRwb3dlciwKLQkuZXhpdAkgID0gbWNpX2V4aXQsCisJLm9jcl9tYXNrIAkJPSBNTUNfVkREXzMyXzMzIHwgTU1DX1ZERF8zM18zNCwKKwkuZ3Bpb19jYXJkX2RldGVjdAk9IEdQSU8xNV9TRElPX0lOU0VSVCwKKwkuZ3Bpb19jYXJkX3JvCQk9IEdQSU83OF9TRElPX1JPLAorCS5ncGlvX3Bvd2VyCQk9IEdQSU85MV9TRElPX0VOLAogfTsKIAogLyogRmxhc2hSQU0gKi8KQEAgLTc2NSwxOSArNzA4LDIwIEBACiAJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc29jX2NhbWVyYV9saW5rIGljbGluayA9IHsKLQkuYnVzX2lkCT0gMCwgLyogTXVzdCBtYXRjaCBpZCBpbiBweGEyN3hfZGV2aWNlX2NhbWVyYSBpbiBkZXZpY2UuYyAqLwotfTsKLQogLyogQm9hcmQgSTJDIGRldmljZXMuICovCiBzdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIF9faW5pdGRhdGEgbWlvYTcwMV9pMmNfZGV2aWNlc1tdID0gewogCXsKLQkJLyogTXVzdCBpbml0aWFsaXplIGJlZm9yZSB0aGUgY2FtZXJhKHMpICovCiAJCUkyQ19CT0FSRF9JTkZPKCJtdDltMTExIiwgMHg1ZCksCi0JCS5wbGF0Zm9ybV9kYXRhID0gJmljbGluaywKIAl9LAogfTsKIAorc3RhdGljIHN0cnVjdCBzb2NfY2FtZXJhX2xpbmsgaWNsaW5rID0geworCS5idXNfaWQJCT0gMCwgLyogTWF0Y2ggaWQgaW4gcHhhMjd4X2RldmljZV9jYW1lcmEgaW4gZGV2aWNlLmMgKi8KKwkuYm9hcmRfaW5mbwk9ICZtaW9hNzAxX2kyY19kZXZpY2VzWzBdLAorCS5pMmNfYWRhcHRlcl9pZAk9IDAsCisJLm1vZHVsZV9uYW1lCT0gIm10OW0xMTEiLAorfTsKKwogc3RydWN0IGkyY19weGFfcGxhdGZvcm1fZGF0YSBpMmNfcGRhdGEgPSB7CiAJLmZhc3RfbW9kZSA9IDEsCiB9OwpAQCAtODExLDYgKzc1NSw3IEBACiBNSU9fU0lNUExFX0RFVihtaW9hNzAxX3NvdW5kLAkgICJtaW9hNzAxLXdtOTcxMyIsIE5VTEwpCiBNSU9fU0lNUExFX0RFVihtaW9hNzAxX2JvYXJkLAkgICJtaW9hNzAxLWJvYXJkIiwgIE5VTEwpCiBNSU9fU0lNUExFX0RFVihncGlvX3ZidXMsCSAgImdwaW8tdmJ1cyIsICAgICAgJmdwaW9fdmJ1c19kYXRhKTsKK01JT19TSU1QTEVfREVWKG1pb2E3MDFfY2FtZXJhLAkgICJzb2MtY2FtZXJhLXBkcnYiLCZpY2xpbmspOwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CiAJJm1pb2E3MDFfZ3Bpb19rZXlzLApAQCAtODIxLDYgKzc2Niw3IEBACiAJJnBvd2VyX2RldiwKIAkmc3RyYXRhZmxhc2gsCiAJJmdwaW9fdmJ1cywKKwkmbWlvYTcwMV9jYW1lcmEsCiAJJm1pb2E3MDFfYm9hcmQsCiB9OwogCkBAIC04NDEsNyArNzg3LDcgQEAKIHN0YXRpYyBzdHJ1Y3QgZ3Bpb19yZXNzIGdsb2JhbF9ncGlvc1tdID0gewogCU1JT19HUElPX09VVChHUElPOV9DSEFSR0VfRU4sIDEsICJDaGFyZ2VyIGVuYWJsZSIpLAogCU1JT19HUElPX09VVChHUElPMThfUE9XRVJPRkYsIDAsICJQb3dlciBPZmYiKSwKLQlNSU9fR1BJT19PVVQoR1BJTzg3X0xDRF9QT1dFUiwgMCwgIkxDRCBQb3dlciIpCisJTUlPX0dQSU9fT1VUKEdQSU84N19MQ0RfUE9XRVIsIDAsICJMQ0QgUG93ZXIiKSwKIH07CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBtaW9hNzAxX21hY2hpbmVfaW5pdCh2b2lkKQpAQCAtODU1LDYgKzgwMSw3IEBACiAJbWlvX2dwaW9fcmVxdWVzdChBUlJBWV9BTkRfU0laRShnbG9iYWxfZ3Bpb3MpKTsKIAlib290c3RyYXBfaW5pdCgpOwogCXNldF9weGFfZmJfaW5mbygmbWlvYTcwMV9weGFmYl9pbmZvKTsKKwltaW9hNzAxX21jaV9pbmZvLmRldGVjdF9kZWxheSA9IG1zZWNzX3RvX2ppZmZpZXMoMjUwKTsKIAlweGFfc2V0X21jaV9pbmZvKCZtaW9hNzAxX21jaV9pbmZvKTsKIAlweGFfc2V0X2tleXBhZF9pbmZvKCZtaW9hNzAxX2tleXBhZF9pbmZvKTsKIAl3bTk3eHhfYmF0X3NldF9wZGF0YSgmbWlvYTcwMV9iYXR0ZXJ5X2RhdGEpOwpAQCAtODY5LDcgKzgxNiw2IEBACiAJcHhhX3NldF9pMmNfaW5mbygmaTJjX3BkYXRhKTsKIAlweGEyN3hfc2V0X2kyY19wb3dlcl9pbmZvKE5VTEwpOwogCXB4YV9zZXRfY2FtZXJhX2luZm8oJm1pb2E3MDFfcHhhY2FtZXJhX3BsYXRmb3JtX2RhdGEpOwotCWkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDAsIEFSUkFZX0FORF9TSVpFKG1pb2E3MDFfaTJjX2RldmljZXMpKTsKIH0KIAogc3RhdGljIHZvaWQgbWlvYTcwMV9tYWNoaW5lX2V4aXQodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3BhbG1sZC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvcGFsbWxkLmMKaW5kZXggMTY5ZmNjMS4uMWFkMDI5ZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvcGFsbWxkLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvcGFsbWxkLmMKQEAgLTI1LDYgKzI1LDkgQEAKICNpbmNsdWRlIDxsaW51eC93bTk3eHhfYmF0dC5oPgogI2luY2x1ZGUgPGxpbnV4L3Bvd2VyX3N1cHBseS5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KQEAgLTE0MSw4NSArMTQ0LDUwIEBACiB9OwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBOT1IgRmxhc2gKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gcGFsbWxkX3BhcnRpdGlvbnNbXSA9IHsKKwl7CisJCS5uYW1lCQk9ICJGbGFzaCIsCisJCS5vZmZzZXQJCT0gMHgwMDAwMDAwMCwKKwkJLnNpemUJCT0gTVREUEFSVF9TSVpfRlVMTCwKKwkJLm1hc2tfZmxhZ3MJPSAwCisJfQorfTsKKworc3RhdGljIHN0cnVjdCBwaHlzbWFwX2ZsYXNoX2RhdGEgcGFsbWxkX2ZsYXNoX2RhdGFbXSA9IHsKKwl7CisJCS53aWR0aAkJPSAyLAkJCS8qIGJhbmt3aWR0aCBpbiBieXRlcyAqLworCQkucGFydHMJCT0gcGFsbWxkX3BhcnRpdGlvbnMsCisJCS5ucl9wYXJ0cwk9IEFSUkFZX1NJWkUocGFsbWxkX3BhcnRpdGlvbnMpCisJfQorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBwYWxtbGRfZmxhc2hfcmVzb3VyY2UgPSB7CisJLnN0YXJ0CT0gUFhBX0NTMF9QSFlTLAorCS5lbmQJPSBQWEFfQ1MwX1BIWVMgKyBTWl80TSAtIDEsCisJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBwYWxtbGRfZmxhc2ggPSB7CisJLm5hbWUJCT0gInBoeXNtYXAtZmxhc2giLAorCS5pZAkJPSAwLAorCS5yZXNvdXJjZQk9ICZwYWxtbGRfZmxhc2hfcmVzb3VyY2UsCisJLm51bV9yZXNvdXJjZXMJPSAxLAorCS5kZXYgCQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSBwYWxtbGRfZmxhc2hfZGF0YSwKKwl9LAorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogU0QvTU1DIGNhcmQgY29udHJvbGxlcgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBpbnQgcGFsbWxkX21jaV9pbml0KHN0cnVjdCBkZXZpY2UgKmRldiwgaXJxX2hhbmRsZXJfdCBwYWxtbGRfZGV0ZWN0X2ludCwKLQkJCQl2b2lkICpkYXRhKQotewotCWludCBlcnIgPSAwOwotCi0JLyogU2V0dXAgYW4gaW50ZXJydXB0IGZvciBkZXRlY3RpbmcgY2FyZCBpbnNlcnQvcmVtb3ZlIGV2ZW50cyAqLwotCWVyciA9IGdwaW9fcmVxdWVzdChHUElPX05SX1BBTE1MRF9TRF9ERVRFQ1RfTiwgIlNEIElSUSIpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyOwotCWVyciA9IGdwaW9fZGlyZWN0aW9uX2lucHV0KEdQSU9fTlJfUEFMTUxEX1NEX0RFVEVDVF9OKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycjI7Ci0JZXJyID0gcmVxdWVzdF9pcnEoZ3Bpb190b19pcnEoR1BJT19OUl9QQUxNTERfU0RfREVURUNUX04pLAotCQkJcGFsbWxkX2RldGVjdF9pbnQsIElSUUZfRElTQUJMRUQgfCBJUlFGX1NBTVBMRV9SQU5ET00gfAotCQkJSVJRRl9UUklHR0VSX0ZBTExJTkcgfCBJUlFGX1RSSUdHRVJfUklTSU5HLAotCQkJIlNEL01NQyBjYXJkIGRldGVjdCIsIGRhdGEpOwotCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogY2Fubm90IHJlcXVlc3QgU0QvTU1DIGNhcmQgZGV0ZWN0IElSUVxuIiwKLQkJCQlfX2Z1bmNfXyk7Ci0JCWdvdG8gZXJyMjsKLQl9Ci0KLQllcnIgPSBncGlvX3JlcXVlc3QoR1BJT19OUl9QQUxNTERfU0RfUE9XRVIsICJTRF9QT1dFUiIpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyMzsKLQllcnIgPSBncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19OUl9QQUxNTERfU0RfUE9XRVIsIDApOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyNDsKLQotCWVyciA9IGdwaW9fcmVxdWVzdChHUElPX05SX1BBTE1MRF9TRF9SRUFET05MWSwgIlNEX1JFQURPTkxZIik7Ci0JaWYgKGVycikKLQkJZ290byBlcnI0OwotCWVyciA9IGdwaW9fZGlyZWN0aW9uX2lucHV0KEdQSU9fTlJfUEFMTUxEX1NEX1JFQURPTkxZKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycjU7Ci0KLQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGlycSByZWdpc3RlcmVkXG4iLCBfX2Z1bmNfXyk7Ci0KLQlyZXR1cm4gMDsKLQotZXJyNToKLQlncGlvX2ZyZWUoR1BJT19OUl9QQUxNTERfU0RfUkVBRE9OTFkpOwotZXJyNDoKLQlncGlvX2ZyZWUoR1BJT19OUl9QQUxNTERfU0RfUE9XRVIpOwotZXJyMzoKLQlmcmVlX2lycShncGlvX3RvX2lycShHUElPX05SX1BBTE1MRF9TRF9ERVRFQ1RfTiksIGRhdGEpOwotZXJyMjoKLQlncGlvX2ZyZWUoR1BJT19OUl9QQUxNTERfU0RfREVURUNUX04pOwotZXJyOgotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyB2b2lkIHBhbG1sZF9tY2lfZXhpdChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCi17Ci0JZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTUxEX1NEX1JFQURPTkxZKTsKLQlncGlvX2ZyZWUoR1BJT19OUl9QQUxNTERfU0RfUE9XRVIpOwotCWZyZWVfaXJxKGdwaW9fdG9faXJxKEdQSU9fTlJfUEFMTUxEX1NEX0RFVEVDVF9OKSwgZGF0YSk7Ci0JZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTUxEX1NEX0RFVEVDVF9OKTsKLX0KLQotc3RhdGljIHZvaWQgcGFsbWxkX21jaV9wb3dlcihzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCB2ZGQpCi17Ci0Jc3RydWN0IHB4YW1jaV9wbGF0Zm9ybV9kYXRhICpwX2QgPSBkZXYtPnBsYXRmb3JtX2RhdGE7Ci0JZ3Bpb19zZXRfdmFsdWUoR1BJT19OUl9QQUxNTERfU0RfUE9XRVIsIHBfZC0+b2NyX21hc2sgJiAoMSA8PCB2ZGQpKTsKLX0KLQotc3RhdGljIGludCBwYWxtbGRfbWNpX2dldF9ybyhzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0JcmV0dXJuIGdwaW9fZ2V0X3ZhbHVlKEdQSU9fTlJfUEFMTUxEX1NEX1JFQURPTkxZKTsKLX0KLQogc3RhdGljIHN0cnVjdCBweGFtY2lfcGxhdGZvcm1fZGF0YSBwYWxtbGRfbWNpX3BsYXRmb3JtX2RhdGEgPSB7Ci0JLm9jcl9tYXNrCT0gTU1DX1ZERF8zMl8zMyB8IE1NQ19WRERfMzNfMzQsCi0JLnNldHBvd2VyCT0gcGFsbWxkX21jaV9wb3dlciwKLQkuZ2V0X3JvCQk9IHBhbG1sZF9tY2lfZ2V0X3JvLAotCS5pbml0IAkJPSBwYWxtbGRfbWNpX2luaXQsCi0JLmV4aXQJCT0gcGFsbWxkX21jaV9leGl0LAorCS5vY3JfbWFzawkJPSBNTUNfVkREXzMyXzMzIHwgTU1DX1ZERF8zM18zNCwKKwkuZ3Bpb19jYXJkX2RldGVjdAk9IEdQSU9fTlJfUEFMTUxEX1NEX0RFVEVDVF9OLAorCS5ncGlvX2NhcmRfcm8JCT0gR1BJT19OUl9QQUxNTERfU0RfUkVBRE9OTFksCisJLmdwaW9fcG93ZXIJCT0gR1BJT19OUl9QQUxNTERfU0RfUE9XRVIsCisJLmRldGVjdF9kZWxheQkJPSAyMCwKIH07CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTMzNiwzNSArMzA0LDkgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIElyREEKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgaW50IHBhbG1sZF9pcmRhX3N0YXJ0dXAoc3RydWN0IGRldmljZSAqZGV2KQotewotCWludCBlcnI7Ci0JZXJyID0gZ3Bpb19yZXF1ZXN0KEdQSU9fTlJfUEFMTUxEX0lSX0RJU0FCTEUsICJJUiBESVNBQkxFIik7Ci0JaWYgKGVycikKLQkJZ290byBlcnI7Ci0JZXJyID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fTlJfUEFMTUxEX0lSX0RJU0FCTEUsIDEpOwotCWlmIChlcnIpCi0JCWdwaW9fZnJlZShHUElPX05SX1BBTE1MRF9JUl9ESVNBQkxFKTsKLWVycjoKLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgdm9pZCBwYWxtbGRfaXJkYV9zaHV0ZG93bihzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0JZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTUxEX0lSX0RJU0FCTEUpOwotfQotCi1zdGF0aWMgdm9pZCBwYWxtbGRfaXJkYV90cmFuc2NlaXZlcl9tb2RlKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IG1vZGUpCi17Ci0JZ3Bpb19zZXRfdmFsdWUoR1BJT19OUl9QQUxNTERfSVJfRElTQUJMRSwgbW9kZSAmIElSX09GRik7Ci0JcHhhMnh4X3RyYW5zY2VpdmVyX21vZGUoZGV2LCBtb2RlKTsKLX0KLQogc3RhdGljIHN0cnVjdCBweGFmaWNwX3BsYXRmb3JtX2RhdGEgcGFsbWxkX2ZpY3BfcGxhdGZvcm1fZGF0YSA9IHsKLQkuc3RhcnR1cAkJPSBwYWxtbGRfaXJkYV9zdGFydHVwLAotCS5zaHV0ZG93bgkJPSBwYWxtbGRfaXJkYV9zaHV0ZG93biwKLQkudHJhbnNjZWl2ZXJfY2FwCT0gSVJfU0lSTU9ERSB8IElSX0ZJUk1PREUgfCBJUl9PRkYsCi0JLnRyYW5zY2VpdmVyX21vZGUJPSBwYWxtbGRfaXJkYV90cmFuc2NlaXZlcl9tb2RlLAorCS5ncGlvX3B3ZG93bgkJPSBHUElPX05SX1BBTE1MRF9JUl9ESVNBQkxFLAorCS50cmFuc2NlaXZlcl9jYXAJPSBJUl9TSVJNT0RFIHwgSVJfT0ZGLAogfTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtNTYwLDYgKzUwMiw3IEBACiAJJnBvd2VyX3N1cHBseSwKIAkmcGFsbWxkX2Fzb2MsCiAJJnBhbG1sZF9oZGQsCisJJnBhbG1sZF9mbGFzaCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2MgcGFsbWxkX2lvX2Rlc2NbXSBfX2luaXRkYXRhID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvcGFsbXQ1LmMgYi9hcmNoL2FybS9tYWNoLXB4YS9wYWxtdDUuYwppbmRleCAzM2Y3MjZmLi4yZGQ3Y2UyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9wYWxtdDUuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9wYWxtdDUuYwpAQCAtMTI0LDgzICsxMjQsMTIgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIFNEL01NQyBjYXJkIGNvbnRyb2xsZXIKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgaW50IHBhbG10NV9tY2lfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYsIGlycV9oYW5kbGVyX3QgcGFsbXQ1X2RldGVjdF9pbnQsCi0JCQkJdm9pZCAqZGF0YSkKLXsKLQlpbnQgZXJyID0gMDsKLQotCS8qIFNldHVwIGFuIGludGVycnVwdCBmb3IgZGV0ZWN0aW5nIGNhcmQgaW5zZXJ0L3JlbW92ZSBldmVudHMgKi8KLQllcnIgPSBncGlvX3JlcXVlc3QoR1BJT19OUl9QQUxNVDVfU0RfREVURUNUX04sICJTRCBJUlEiKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycjsKLQllcnIgPSBncGlvX2RpcmVjdGlvbl9pbnB1dChHUElPX05SX1BBTE1UNV9TRF9ERVRFQ1RfTik7Ci0JaWYgKGVycikKLQkJZ290byBlcnIyOwotCWVyciA9IHJlcXVlc3RfaXJxKGdwaW9fdG9faXJxKEdQSU9fTlJfUEFMTVQ1X1NEX0RFVEVDVF9OKSwKLQkJCXBhbG10NV9kZXRlY3RfaW50LCBJUlFGX0RJU0FCTEVEIHwgSVJRRl9TQU1QTEVfUkFORE9NIHwKLQkJCUlSUUZfVFJJR0dFUl9GQUxMSU5HIHwgSVJRRl9UUklHR0VSX1JJU0lORywKLQkJCSJTRC9NTUMgY2FyZCBkZXRlY3QiLCBkYXRhKTsKLQlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGNhbm5vdCByZXF1ZXN0IFNEL01NQyBjYXJkIGRldGVjdCBJUlFcbiIsCi0JCQkJX19mdW5jX18pOwotCQlnb3RvIGVycjI7Ci0JfQotCi0JZXJyID0gZ3Bpb19yZXF1ZXN0KEdQSU9fTlJfUEFMTVQ1X1NEX1BPV0VSLCAiU0RfUE9XRVIiKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycjM7Ci0JZXJyID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fTlJfUEFMTVQ1X1NEX1BPV0VSLCAwKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycjQ7Ci0KLQllcnIgPSBncGlvX3JlcXVlc3QoR1BJT19OUl9QQUxNVDVfU0RfUkVBRE9OTFksICJTRF9SRUFET05MWSIpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyNDsKLQllcnIgPSBncGlvX2RpcmVjdGlvbl9pbnB1dChHUElPX05SX1BBTE1UNV9TRF9SRUFET05MWSk7Ci0JaWYgKGVycikKLQkJZ290byBlcnI1OwotCi0JcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBpcnEgcmVnaXN0ZXJlZFxuIiwgX19mdW5jX18pOwotCi0JcmV0dXJuIDA7Ci0KLWVycjU6Ci0JZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTVQ1X1NEX1JFQURPTkxZKTsKLWVycjQ6Ci0JZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTVQ1X1NEX1BPV0VSKTsKLWVycjM6Ci0JZnJlZV9pcnEoZ3Bpb190b19pcnEoR1BJT19OUl9QQUxNVDVfU0RfREVURUNUX04pLCBkYXRhKTsKLWVycjI6Ci0JZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTVQ1X1NEX0RFVEVDVF9OKTsKLWVycjoKLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgdm9pZCBwYWxtdDVfbWNpX2V4aXQoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQotewotCWdwaW9fZnJlZShHUElPX05SX1BBTE1UNV9TRF9SRUFET05MWSk7Ci0JZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTVQ1X1NEX1BPV0VSKTsKLQlmcmVlX2lycShJUlFfR1BJT19QQUxNVDVfU0RfREVURUNUX04sIGRhdGEpOwotCWdwaW9fZnJlZShHUElPX05SX1BBTE1UNV9TRF9ERVRFQ1RfTik7Ci19Ci0KLXN0YXRpYyB2b2lkIHBhbG10NV9tY2lfcG93ZXIoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgdmRkKQotewotCXN0cnVjdCBweGFtY2lfcGxhdGZvcm1fZGF0YSAqcF9kID0gZGV2LT5wbGF0Zm9ybV9kYXRhOwotCWdwaW9fc2V0X3ZhbHVlKEdQSU9fTlJfUEFMTVQ1X1NEX1BPV0VSLCBwX2QtPm9jcl9tYXNrICYgKDEgPDwgdmRkKSk7Ci19Ci0KLXN0YXRpYyBpbnQgcGFsbXQ1X21jaV9nZXRfcm8oc3RydWN0IGRldmljZSAqZGV2KQotewotCXJldHVybiBncGlvX2dldF92YWx1ZShHUElPX05SX1BBTE1UNV9TRF9SRUFET05MWSk7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgcHhhbWNpX3BsYXRmb3JtX2RhdGEgcGFsbXQ1X21jaV9wbGF0Zm9ybV9kYXRhID0gewotCS5vY3JfbWFzawk9IE1NQ19WRERfMzJfMzMgfCBNTUNfVkREXzMzXzM0LAotCS5zZXRwb3dlcgk9IHBhbG10NV9tY2lfcG93ZXIsCi0JLmdldF9ybwkJPSBwYWxtdDVfbWNpX2dldF9ybywKLQkuaW5pdCAJCT0gcGFsbXQ1X21jaV9pbml0LAotCS5leGl0CQk9IHBhbG10NV9tY2lfZXhpdCwKKwkub2NyX21hc2sJCT0gTU1DX1ZERF8zMl8zMyB8IE1NQ19WRERfMzNfMzQsCisJLmdwaW9fY2FyZF9kZXRlY3QJPSBHUElPX05SX1BBTE1UNV9TRF9ERVRFQ1RfTiwKKwkuZ3Bpb19jYXJkX3JvCQk9IEdQSU9fTlJfUEFMTVQ1X1NEX1JFQURPTkxZLAorCS5ncGlvX3Bvd2VyCQk9IEdQSU9fTlJfUEFMTVQ1X1NEX1BPV0VSLAorCS5kZXRlY3RfZGVsYXkJCT0gMjAsCiB9OwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0zMTQsMzUgKzI0Myw5IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBJckRBCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIGludCBwYWxtdDVfaXJkYV9zdGFydHVwKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlpbnQgZXJyOwotCWVyciA9IGdwaW9fcmVxdWVzdChHUElPX05SX1BBTE1UNV9JUl9ESVNBQkxFLCAiSVIgRElTQUJMRSIpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyOwotCWVyciA9IGdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX05SX1BBTE1UNV9JUl9ESVNBQkxFLCAxKTsKLQlpZiAoZXJyKQotCQlncGlvX2ZyZWUoR1BJT19OUl9QQUxNVDVfSVJfRElTQUJMRSk7Ci1lcnI6Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIHZvaWQgcGFsbXQ1X2lyZGFfc2h1dGRvd24oc3RydWN0IGRldmljZSAqZGV2KQotewotCWdwaW9fZnJlZShHUElPX05SX1BBTE1UNV9JUl9ESVNBQkxFKTsKLX0KLQotc3RhdGljIHZvaWQgcGFsbXQ1X2lyZGFfdHJhbnNjZWl2ZXJfbW9kZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBtb2RlKQotewotCWdwaW9fc2V0X3ZhbHVlKEdQSU9fTlJfUEFMTVQ1X0lSX0RJU0FCTEUsIG1vZGUgJiBJUl9PRkYpOwotCXB4YTJ4eF90cmFuc2NlaXZlcl9tb2RlKGRldiwgbW9kZSk7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgcHhhZmljcF9wbGF0Zm9ybV9kYXRhIHBhbG10NV9maWNwX3BsYXRmb3JtX2RhdGEgPSB7Ci0JLnN0YXJ0dXAJCT0gcGFsbXQ1X2lyZGFfc3RhcnR1cCwKLQkuc2h1dGRvd24JCT0gcGFsbXQ1X2lyZGFfc2h1dGRvd24sCi0JLnRyYW5zY2VpdmVyX2NhcAk9IElSX1NJUk1PREUgfCBJUl9GSVJNT0RFIHwgSVJfT0ZGLAotCS50cmFuc2NlaXZlcl9tb2RlCT0gcGFsbXQ1X2lyZGFfdHJhbnNjZWl2ZXJfbW9kZSwKKwkuZ3Bpb19wd2Rvd24JCT0gR1BJT19OUl9QQUxNVDVfSVJfRElTQUJMRSwKKwkudHJhbnNjZWl2ZXJfY2FwCT0gSVJfU0lSTU9ERSB8IElSX09GRiwKIH07CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3BhbG10Yy5jIGIvYXJjaC9hcm0vbWFjaC1weGEvcGFsbXRjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmIyY2MwZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3BhbG10Yy5jCkBAIC0wLDAgKzEsNDM2IEBACisvKgorICogbGludXgvYXJjaC9hcm0vbWFjaC1weGEvcGFsbXRjLmMKKyAqCisgKiBTdXBwb3J0IGZvciB0aGUgUGFsbSBUdW5nc3RlbnxDCisgKgorICogQXV0aG9yOglNYXJlayBWYXN1dCA8bWFyZWsudmFzdXRAZ21haWwuY29tPgorICoKKyAqIEJhc2VkIG9uIHdvcmsgb2Y6CisgKgkJUGV0ciBCbGFoYSA8cDN0M0BjZW50cnVtLmN6PgorICoJCUNoZXRhbiBTLiBLdW1hciA8c2hpdmFrdW1hci5jaGV0YW5AZ21haWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wd21fYmFja2xpZ2h0Lmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0L21hdHJpeF9rZXlwYWQuaD4KKyNpbmNsdWRlIDxsaW51eC91Y2IxNDAwLmg+CisjaW5jbHVkZSA8bGludXgvcG93ZXJfc3VwcGx5Lmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpb19rZXlzLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorCisjaW5jbHVkZSA8bWFjaC9hdWRpby5oPgorI2luY2x1ZGUgPG1hY2gvcGFsbXRjLmg+CisjaW5jbHVkZSA8bWFjaC9tbWMuaD4KKyNpbmNsdWRlIDxtYWNoL3B4YWZiLmg+CisjaW5jbHVkZSA8bWFjaC9tZnAtcHhhMjV4Lmg+CisjaW5jbHVkZSA8bWFjaC9pcmRhLmg+CisjaW5jbHVkZSA8bWFjaC91ZGMuaD4KKyNpbmNsdWRlIDxtYWNoL3B4YTJ4eC1yZWdzLmg+CisKKyNpbmNsdWRlICJnZW5lcmljLmgiCisjaW5jbHVkZSAiZGV2aWNlcy5oIgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBQaW4gY29uZmlndXJhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIHBhbG10Y19waW5fY29uZmlnW10gX19pbml0ZGF0YSA9IHsKKwkvKiBNTUMgKi8KKwlHUElPNl9NTUNfQ0xLLAorCUdQSU84X01NQ19DUzAsCisJR1BJTzEyX0dQSU8sCS8qIGRldGVjdCAqLworCUdQSU8zMl9HUElPLAkvKiBwb3dlciAqLworCUdQSU81NF9HUElPLAkvKiByL28gc3dpdGNoICovCisKKwkvKiBQQ01DSUEgKi8KKwlHUElPNTJfblBDRV8xLAorCUdQSU81M19uUENFXzIsCisJR1BJTzUwX25QSU9SLAorCUdQSU81MV9uUElPVywKKwlHUElPNDlfblBXRSwKKwlHUElPNDhfblBPRSwKKwlHUElPNTJfblBDRV8xLAorCUdQSU81M19uUENFXzIsCisJR1BJTzU3X25JT0lTMTYsCisJR1BJTzU2X25QV0FJVCwKKworCS8qIEFDOTcgKi8KKwlHUElPMjhfQUM5N19CSVRDTEssCisJR1BJTzI5X0FDOTdfU0RBVEFfSU5fMCwKKwlHUElPMzBfQUM5N19TREFUQV9PVVQsCisJR1BJTzMxX0FDOTdfU1lOQywKKworCS8qIElyREEgKi8KKwlHUElPNDVfR1BJTywJLyogaXIgZGlzYWJsZSAqLworCUdQSU80Nl9GSUNQX1JYRCwKKwlHUElPNDdfRklDUF9UWEQsCisKKwkvKiBQV00gKi8KKwlHUElPMTdfUFdNMV9PVVQsCisKKwkvKiBVU0IgKi8KKwlHUElPNF9HUElPLAkvKiBkZXRlY3QgKi8KKwlHUElPMzZfR1BJTywJLyogcHVsbHVwICovCisKKwkvKiBMQ0QgKi8KKwlHUElPNThfTENEX0xERF8wLAorCUdQSU81OV9MQ0RfTEREXzEsCisJR1BJTzYwX0xDRF9MRERfMiwKKwlHUElPNjFfTENEX0xERF8zLAorCUdQSU82Ml9MQ0RfTEREXzQsCisJR1BJTzYzX0xDRF9MRERfNSwKKwlHUElPNjRfTENEX0xERF82LAorCUdQSU82NV9MQ0RfTEREXzcsCisJR1BJTzY2X0xDRF9MRERfOCwKKwlHUElPNjdfTENEX0xERF85LAorCUdQSU82OF9MQ0RfTEREXzEwLAorCUdQSU82OV9MQ0RfTEREXzExLAorCUdQSU83MF9MQ0RfTEREXzEyLAorCUdQSU83MV9MQ0RfTEREXzEzLAorCUdQSU83Ml9MQ0RfTEREXzE0LAorCUdQSU83M19MQ0RfTEREXzE1LAorCUdQSU83NF9MQ0RfRkNMSywKKwlHUElPNzVfTENEX0xDTEssCisJR1BJTzc2X0xDRF9QQ0xLLAorCUdQSU83N19MQ0RfQklBUywKKworCS8qIE1BVFJJWCBLRVlQQUQgKi8KKwlHUElPMF9HUElPIHwgV0FLRVVQX09OX0VER0VfQk9USCwJLyogaW4gMCAqLworCUdQSU85X0dQSU8gfCBXQUtFVVBfT05fRURHRV9CT1RILAkvKiBpbiAxICovCisJR1BJTzEwX0dQSU8gfCBXQUtFVVBfT05fRURHRV9CT1RILAkvKiBpbiAyICovCisJR1BJTzExX0dQSU8gfCBXQUtFVVBfT05fRURHRV9CT1RILAkvKiBpbiAzICovCisJR1BJTzE4X0dQSU8gfCBNRlBfTFBNX0RSSVZFX0xPVywJLyogb3V0IDAgKi8KKwlHUElPMTlfR1BJTyB8IE1GUF9MUE1fRFJJVkVfTE9XLAkvKiBvdXQgMSAqLworCUdQSU8yMF9HUElPIHwgTUZQX0xQTV9EUklWRV9MT1csCS8qIG91dCAyICovCisJR1BJTzIxX0dQSU8gfCBNRlBfTFBNX0RSSVZFX0xPVywJLyogb3V0IDMgKi8KKwlHUElPMjJfR1BJTyB8IE1GUF9MUE1fRFJJVkVfTE9XLAkvKiBvdXQgNCAqLworCUdQSU8yM19HUElPIHwgTUZQX0xQTV9EUklWRV9MT1csCS8qIG91dCA1ICovCisJR1BJTzI0X0dQSU8gfCBNRlBfTFBNX0RSSVZFX0xPVywJLyogb3V0IDYgKi8KKwlHUElPMjVfR1BJTyB8IE1GUF9MUE1fRFJJVkVfTE9XLAkvKiBvdXQgNyAqLworCUdQSU8yNl9HUElPIHwgTUZQX0xQTV9EUklWRV9MT1csCS8qIG91dCA4ICovCisJR1BJTzI3X0dQSU8gfCBNRlBfTFBNX0RSSVZFX0xPVywJLyogb3V0IDkgKi8KKwlHUElPNzlfR1BJTyB8IE1GUF9MUE1fRFJJVkVfTE9XLAkvKiBvdXQgMTAgKi8KKwlHUElPODBfR1BJTyB8IE1GUF9MUE1fRFJJVkVfTE9XLAkvKiBvdXQgMTEgKi8KKworCS8qIFBYQSBHUElPIEtFWVMgKi8KKwlHUElPN19HUElPIHwgV0FLRVVQX09OX0VER0VfQk9USCwJLyogaG90c3luYyBidXR0b24gb24gY3JhZGxlICovCisKKwkvKiBNSVNDICovCisJR1BJTzFfUlNULAkvKiByZXNldCAqLworCUdQSU8yX0dQSU8sCS8qIGVhcnBob25lIGRldGVjdCAqLworCUdQSU8xNl9HUElPLAkvKiBiYWNrbGlnaHQgc3dpdGNoICovCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBTRC9NTUMgY2FyZCBjb250cm9sbGVyCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHN0cnVjdCBweGFtY2lfcGxhdGZvcm1fZGF0YSBwYWxtdGNfbWNpX3BsYXRmb3JtX2RhdGEgPSB7CisJLm9jcl9tYXNrCQk9IE1NQ19WRERfMzJfMzMgfCBNTUNfVkREXzMzXzM0LAorCS5ncGlvX3Bvd2VyCQk9IEdQSU9fTlJfUEFMTVRDX1NEX1BPV0VSLAorCS5ncGlvX2NhcmRfcm8JCT0gR1BJT19OUl9QQUxNVENfU0RfUkVBRE9OTFksCisJLmdwaW9fY2FyZF9kZXRlY3QJPSBHUElPX05SX1BBTE1UQ19TRF9ERVRFQ1RfTiwKKwkuZGV0ZWN0X2RlbGF5CQk9IDIwLAorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogR1BJTyBrZXlzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHN0cnVjdCBncGlvX2tleXNfYnV0dG9uIHBhbG10Y19weGFfYnV0dG9uc1tdID0geworCXtLRVlfRjgsIEdQSU9fTlJfUEFMTVRDX0hPVFNZTkNfQlVUVE9OLCAxLCAiSG90U3luYyBCdXR0b24iLCBFVl9LRVksIDF9LAorfTsKKworc3RhdGljIHN0cnVjdCBncGlvX2tleXNfcGxhdGZvcm1fZGF0YSBwYWxtdGNfcHhhX2tleXNfZGF0YSA9IHsKKwkuYnV0dG9ucwk9IHBhbG10Y19weGFfYnV0dG9ucywKKwkubmJ1dHRvbnMJPSBBUlJBWV9TSVpFKHBhbG10Y19weGFfYnV0dG9ucyksCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBwYWxtdGNfcHhhX2tleXMgPSB7CisJLm5hbWUJPSAiZ3Bpby1rZXlzIiwKKwkuaWQJPSAtMSwKKwkuZGV2CT0geworCQkucGxhdGZvcm1fZGF0YSA9ICZwYWxtdGNfcHhhX2tleXNfZGF0YSwKKwl9LAorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQmFja2xpZ2h0CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCBwYWxtdGNfYmFja2xpZ2h0X2luaXQoc3RydWN0IGRldmljZSAqZGV2KQoreworCWludCByZXQ7CisKKwlyZXQgPSBncGlvX3JlcXVlc3QoR1BJT19OUl9QQUxNVENfQkxfUE9XRVIsICJCTCBQT1dFUiIpOworCWlmIChyZXQpCisJCWdvdG8gZXJyOworCXJldCA9IGdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX05SX1BBTE1UQ19CTF9QT1dFUiwgMSk7CisJaWYgKHJldCkKKwkJZ290byBlcnIyOworCisJcmV0dXJuIDA7CisKK2VycjI6CisJZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTVRDX0JMX1BPV0VSKTsKK2VycjoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHBhbG10Y19iYWNrbGlnaHRfbm90aWZ5KGludCBicmlnaHRuZXNzKQoreworCS8qIGJhY2tsaWdodCBpcyBvbiB3aGVuIEdQSU8xNiBBRjAgaXMgaGlnaCAqLworCWdwaW9fc2V0X3ZhbHVlKEdQSU9fTlJfUEFMTVRDX0JMX1BPV0VSLCBicmlnaHRuZXNzKTsKKwlyZXR1cm4gYnJpZ2h0bmVzczsKK30KKworc3RhdGljIHZvaWQgcGFsbXRjX2JhY2tsaWdodF9leGl0KHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlncGlvX2ZyZWUoR1BJT19OUl9QQUxNVENfQkxfUE9XRVIpOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX3B3bV9iYWNrbGlnaHRfZGF0YSBwYWxtdGNfYmFja2xpZ2h0X2RhdGEgPSB7CisJLnB3bV9pZAkJPSAxLAorCS5tYXhfYnJpZ2h0bmVzcwk9IFBBTE1UQ19NQVhfSU5URU5TSVRZLAorCS5kZnRfYnJpZ2h0bmVzcwk9IFBBTE1UQ19NQVhfSU5URU5TSVRZLAorCS5wd21fcGVyaW9kX25zCT0gUEFMTVRDX1BFUklPRF9OUywKKwkuaW5pdAkJPSBwYWxtdGNfYmFja2xpZ2h0X2luaXQsCisJLm5vdGlmeQkJPSBwYWxtdGNfYmFja2xpZ2h0X25vdGlmeSwKKwkuZXhpdAkJPSBwYWxtdGNfYmFja2xpZ2h0X2V4aXQsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBwYWxtdGNfYmFja2xpZ2h0ID0geworCS5uYW1lCT0gInB3bS1iYWNrbGlnaHQiLAorCS5kZXYJPSB7CisJCS5wYXJlbnQJCT0gJnB4YTI1eF9kZXZpY2VfcHdtMS5kZXYsCisJCS5wbGF0Zm9ybV9kYXRhCT0gJnBhbG10Y19iYWNrbGlnaHRfZGF0YSwKKwl9LAorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogSXJEQQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBzdHJ1Y3QgcHhhZmljcF9wbGF0Zm9ybV9kYXRhIHBhbG10Y19maWNwX3BsYXRmb3JtX2RhdGEgPSB7CisJLmdwaW9fcHdkb3duCQk9IEdQSU9fTlJfUEFMTVRDX0lSX0RJU0FCTEUsCisJLnRyYW5zY2VpdmVyX2NhcAk9IElSX1NJUk1PREUgfCBJUl9PRkYsCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBLZXlib2FyZAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBjb25zdCB1aW50MzJfdCBwYWxtdGNfbWF0cml4X2tleXNbXSA9IHsKKwlLRVkoMCwgMCwgS0VZX0YxKSwKKwlLRVkoMCwgMSwgS0VZX1gpLAorCUtFWSgwLCAyLCBLRVlfUE9XRVIpLAorCUtFWSgwLCAzLCBLRVlfVEFCKSwKKwlLRVkoMCwgNCwgS0VZX0EpLAorCUtFWSgwLCA1LCBLRVlfUSksCisJS0VZKDAsIDYsIEtFWV9MRUZUU0hJRlQpLAorCUtFWSgwLCA3LCBLRVlfWiksCisJS0VZKDAsIDgsIEtFWV9TKSwKKwlLRVkoMCwgOSwgS0VZX1cpLAorCUtFWSgwLCAxMCwgS0VZX0UpLAorCUtFWSgwLCAxMSwgS0VZX1VQKSwKKworCUtFWSgxLCAwLCBLRVlfRjIpLAorCUtFWSgxLCAxLCBLRVlfRE9XTiksCisJS0VZKDEsIDMsIEtFWV9EKSwKKwlLRVkoMSwgNCwgS0VZX0MpLAorCUtFWSgxLCA1LCBLRVlfRiksCisJS0VZKDEsIDYsIEtFWV9SKSwKKwlLRVkoMSwgNywgS0VZX1NQQUNFKSwKKwlLRVkoMSwgOCwgS0VZX1YpLAorCUtFWSgxLCA5LCBLRVlfRyksCisJS0VZKDEsIDEwLCBLRVlfVCksCisJS0VZKDEsIDExLCBLRVlfTEVGVCksCisKKwlLRVkoMiwgMCwgS0VZX0YzKSwKKwlLRVkoMiwgMSwgS0VZX0xFRlRDVFJMKSwKKwlLRVkoMiwgMywgS0VZX0gpLAorCUtFWSgyLCA0LCBLRVlfWSksCisJS0VZKDIsIDUsIEtFWV9OKSwKKwlLRVkoMiwgNiwgS0VZX0opLAorCUtFWSgyLCA3LCBLRVlfVSksCisJS0VZKDIsIDgsIEtFWV9NKSwKKwlLRVkoMiwgOSwgS0VZX0spLAorCUtFWSgyLCAxMCwgS0VZX0kpLAorCUtFWSgyLCAxMSwgS0VZX1JJR0hUKSwKKworCUtFWSgzLCAwLCBLRVlfRjQpLAorCUtFWSgzLCAxLCBLRVlfRU5URVIpLAorCUtFWSgzLCAzLCBLRVlfRE9UKSwKKwlLRVkoMywgNCwgS0VZX0wpLAorCUtFWSgzLCA1LCBLRVlfTyksCisJS0VZKDMsIDYsIEtFWV9MRUZUQUxUKSwKKwlLRVkoMywgNywgS0VZX0VOVEVSKSwKKwlLRVkoMywgOCwgS0VZX0JBQ0tTUEFDRSksCisJS0VZKDMsIDksIEtFWV9QKSwKKwlLRVkoMywgMTAsIEtFWV9CKSwKKwlLRVkoMywgMTEsIEtFWV9GTiksCit9OworCitjb25zdCBzdHJ1Y3QgbWF0cml4X2tleW1hcF9kYXRhIHBhbG10Y19rZXltYXBfZGF0YSA9IHsKKwkua2V5bWFwCQkJPSBwYWxtdGNfbWF0cml4X2tleXMsCisJLmtleW1hcF9zaXplCQk9IEFSUkFZX1NJWkUocGFsbXRjX21hdHJpeF9rZXlzKSwKK307CisKK2NvbnN0IHN0YXRpYyB1bnNpZ25lZCBpbnQgcGFsbXRjX2tleXBhZF9yb3dfZ3Bpb3NbXSA9IHsKKwkwLCA5LCAxMCwgMTEKK307CisKK2NvbnN0IHN0YXRpYyB1bnNpZ25lZCBpbnQgcGFsbXRjX2tleXBhZF9jb2xfZ3Bpb3NbXSA9IHsKKwkxOCwgMTksIDIwLCAyMSwgMjIsIDIzLCAyNCwgMjUsIDI2LCAyNywgNzksIDgwCit9OworCitzdGF0aWMgc3RydWN0IG1hdHJpeF9rZXlwYWRfcGxhdGZvcm1fZGF0YSBwYWxtdGNfa2V5cGFkX3BsYXRmb3JtX2RhdGEgPSB7CisJLmtleW1hcF9kYXRhCT0gJnBhbG10Y19rZXltYXBfZGF0YSwKKwkuY29sX2dwaW9zCT0gcGFsbXRjX2tleXBhZF9yb3dfZ3Bpb3MsCisJLm51bV9jb2xfZ3Bpb3MJPSAxMiwKKwkucm93X2dwaW9zCT0gcGFsbXRjX2tleXBhZF9jb2xfZ3Bpb3MsCisJLm51bV9yb3dfZ3Bpb3MJPSA0LAorCS5hY3RpdmVfbG93CT0gMSwKKworCS5kZWJvdW5jZV9tcwkJPSAyMCwKKwkuY29sX3NjYW5fZGVsYXlfdXMJPSA1LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcGFsbXRjX2tleWJvYXJkID0geworCS5uYW1lCT0gIm1hdHJpeC1rZXlwYWQiLAorCS5pZAk9IC0xLAorCS5kZXYJPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJnBhbG10Y19rZXlwYWRfcGxhdGZvcm1fZGF0YSwKKwl9LAorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogVURDCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHN0cnVjdCBweGEyeHhfdWRjX21hY2hfaW5mbyBwYWxtdGNfdWRjX2luZm8gX19pbml0ZGF0YSA9IHsKKwkuZ3Bpb192YnVzCQk9IEdQSU9fTlJfUEFMTVRDX1VTQl9ERVRFQ1RfTiwKKwkuZ3Bpb192YnVzX2ludmVydGVkCT0gMSwKKwkuZ3Bpb19wdWxsdXAJCT0gR1BJT19OUl9QQUxNVENfVVNCX1BPV0VSLAorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogVG91Y2hzY3JlZW4gLyBCYXR0ZXJ5IC8gR1BJTy1leHRlbmRlcgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHBhbG10Y191Y2IxNDAwX2NvcmUgPSB7CisJLm5hbWUJPSAidWNiMTQwMF9jb3JlIiwKKwkuaWQJPSAtMSwKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIE5PUiBGbGFzaAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcGFsbXRjX2ZsYXNoX3Jlc291cmNlID0geworCS5zdGFydAk9IFBYQV9DUzBfUEhZUywKKwkuZW5kCT0gUFhBX0NTMF9QSFlTICsgU1pfMTZNIC0gMSwKKwkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBwYWxtdGNfZmxhc2hfcGFydHNbXSA9IHsKKwl7CisJCS5uYW1lCT0gIlUtQm9vdCBCb290bG9hZGVyIiwKKwkJLm9mZnNldAk9IDB4MCwKKwkJLnNpemUJPSAweDQwMDAwLAorCX0sCisJeworCQkubmFtZQk9ICJMaW51eCBLZXJuZWwiLAorCQkub2Zmc2V0CT0gMHg0MDAwMCwKKwkJLnNpemUJPSAweDJjMDAwMCwKKwl9LAorCXsKKwkJLm5hbWUJPSAiRmlsZXN5c3RlbSIsCisJCS5vZmZzZXQJPSAweDMwMDAwMCwKKwkJLnNpemUJPSAweGNjMDAwMCwKKwl9LAorCXsKKwkJLm5hbWUJPSAiVS1Cb290IEVudmlyb25tZW50IiwKKwkJLm9mZnNldAk9IDB4ZmMwMDAwLAorCQkuc2l6ZQk9IE1URFBBUlRfU0laX0ZVTEwsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGh5c21hcF9mbGFzaF9kYXRhIHBhbG10Y19mbGFzaF9kYXRhID0geworCS53aWR0aAkJPSA0LAorCS5wYXJ0cwkJPSBwYWxtdGNfZmxhc2hfcGFydHMsCisJLm5yX3BhcnRzCT0gQVJSQVlfU0laRShwYWxtdGNfZmxhc2hfcGFydHMpLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcGFsbXRjX2ZsYXNoID0geworCS5uYW1lCQk9ICJwaHlzbWFwLWZsYXNoIiwKKwkuaWQJCT0gLTEsCisJLnJlc291cmNlCT0gJnBhbG10Y19mbGFzaF9yZXNvdXJjZSwKKwkubnVtX3Jlc291cmNlcwk9IDEsCisJLmRldiA9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmcGFsbXRjX2ZsYXNoX2RhdGEsCisJfSwKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEZyYW1lYnVmZmVyCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHN0cnVjdCBweGFmYl9tb2RlX2luZm8gcGFsbXRjX2xjZF9tb2Rlc1tdID0geworeworCS5waXhjbG9jawk9IDExNTM4NCwKKwkueHJlcwkJPSAzMjAsCisJLnlyZXMJCT0gMzIwLAorCS5icHAJCT0gMTYsCisKKwkubGVmdF9tYXJnaW4JPSAyNywKKwkucmlnaHRfbWFyZ2luCT0gNywKKwkudXBwZXJfbWFyZ2luCT0gNywKKwkubG93ZXJfbWFyZ2luCT0gOCwKKworCS5oc3luY19sZW4JPSA2LAorCS52c3luY19sZW4JPSAxLAorfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcHhhZmJfbWFjaF9pbmZvIHBhbG10Y19sY2Rfc2NyZWVuID0geworCS5tb2RlcwkJCT0gcGFsbXRjX2xjZF9tb2RlcywKKwkubnVtX21vZGVzCQk9IEFSUkFZX1NJWkUocGFsbXRjX2xjZF9tb2RlcyksCisJLmxjZF9jb25uCQk9IExDRF9DT0xPUl9URlRfMTZCUFAgfCBMQ0RfUENMS19FREdFX0ZBTEwsCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBNYWNoaW5lIGluaXQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CisJJnBhbG10Y19iYWNrbGlnaHQsCisJJnBhbG10Y191Y2IxNDAwX2NvcmUsCisJJnBhbG10Y19rZXlib2FyZCwKKwkmcGFsbXRjX3B4YV9rZXlzLAorCSZwYWxtdGNfZmxhc2gsCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgcGFsbXRjX2luaXQodm9pZCkKK3sKKwlweGEyeHhfbWZwX2NvbmZpZyhBUlJBWV9BTkRfU0laRShwYWxtdGNfcGluX2NvbmZpZykpOworCisJc2V0X3B4YV9mYl9pbmZvKCZwYWxtdGNfbGNkX3NjcmVlbik7CisJcHhhX3NldF9tY2lfaW5mbygmcGFsbXRjX21jaV9wbGF0Zm9ybV9kYXRhKTsKKwlweGFfc2V0X3VkY19pbmZvKCZwYWxtdGNfdWRjX2luZm8pOworCXB4YV9zZXRfYWM5N19pbmZvKE5VTEwpOworCXB4YV9zZXRfZmljcF9pbmZvKCZwYWxtdGNfZmljcF9wbGF0Zm9ybV9kYXRhKTsKKworCXBsYXRmb3JtX2FkZF9kZXZpY2VzKGRldmljZXMsIEFSUkFZX1NJWkUoZGV2aWNlcykpOworfTsKKworTUFDSElORV9TVEFSVChQQUxNVEMsICJQYWxtIFR1bmdzdGVufEMiKQorCS5waHlzX2lvCT0gMHg0MDAwMDAwMCwKKwkuYm9vdF9wYXJhbXMgCT0gMHhhMDAwMDEwMCwKKwkuaW9fcGdfb2Zmc3QJPSAoaW9fcDJ2KDB4NDAwMDAwMDApID4+IDE4KSAmIDB4ZmZmYywKKwkubWFwX2lvCQk9IHB4YV9tYXBfaW8sCisJLmluaXRfaXJxCT0gcHhhMjV4X2luaXRfaXJxLAorCS50aW1lcgkJPSAmcHhhX3RpbWVyLAorCS5pbml0X21hY2hpbmUJPSBwYWxtdGNfaW5pdAorTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3BhbG10ZTIuYyBiL2FyY2gvYXJtL21hY2gtcHhhL3BhbG10ZTIuYwppbmRleCBkODIzYjA5Li4yNzdjNDA2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9wYWxtdGUyLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvcGFsbXRlMi5jCkBAIC0xMTcsODMgKzExNywxMSBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogU0QvTU1DIGNhcmQgY29udHJvbGxlcgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBpbnQgcGFsbXRlMl9tY2lfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkJaXJxX2hhbmRsZXJfdCBwYWxtdGUyX2RldGVjdF9pbnQsIHZvaWQgKmRhdGEpCi17Ci0JaW50IGVyciA9IDA7Ci0KLQkvKiBTZXR1cCBhbiBpbnRlcnJ1cHQgZm9yIGRldGVjdGluZyBjYXJkIGluc2VydC9yZW1vdmUgZXZlbnRzICovCi0JZXJyID0gZ3Bpb19yZXF1ZXN0KEdQSU9fTlJfUEFMTVRFMl9TRF9ERVRFQ1RfTiwgIlNEIElSUSIpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyOwotCWVyciA9IGdwaW9fZGlyZWN0aW9uX2lucHV0KEdQSU9fTlJfUEFMTVRFMl9TRF9ERVRFQ1RfTik7Ci0JaWYgKGVycikKLQkJZ290byBlcnIyOwotCWVyciA9IHJlcXVlc3RfaXJxKGdwaW9fdG9faXJxKEdQSU9fTlJfUEFMTVRFMl9TRF9ERVRFQ1RfTiksCi0JCQlwYWxtdGUyX2RldGVjdF9pbnQsIElSUUZfRElTQUJMRUQgfCBJUlFGX1NBTVBMRV9SQU5ET00gfAotCQkJSVJRRl9UUklHR0VSX0ZBTExJTkcgfCBJUlFGX1RSSUdHRVJfUklTSU5HLAotCQkJIlNEL01NQyBjYXJkIGRldGVjdCIsIGRhdGEpOwotCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogY2Fubm90IHJlcXVlc3QgU0QvTU1DIGNhcmQgZGV0ZWN0IElSUVxuIiwKLQkJCQlfX2Z1bmNfXyk7Ci0JCWdvdG8gZXJyMjsKLQl9Ci0KLQllcnIgPSBncGlvX3JlcXVlc3QoR1BJT19OUl9QQUxNVEUyX1NEX1BPV0VSLCAiU0RfUE9XRVIiKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycjM7Ci0JZXJyID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fTlJfUEFMTVRFMl9TRF9QT1dFUiwgMCk7Ci0JaWYgKGVycikKLQkJZ290byBlcnI0OwotCi0JZXJyID0gZ3Bpb19yZXF1ZXN0KEdQSU9fTlJfUEFMTVRFMl9TRF9SRUFET05MWSwgIlNEX1JFQURPTkxZIik7Ci0JaWYgKGVycikKLQkJZ290byBlcnI0OwotCWVyciA9IGdwaW9fZGlyZWN0aW9uX2lucHV0KEdQSU9fTlJfUEFMTVRFMl9TRF9SRUFET05MWSk7Ci0JaWYgKGVycikKLQkJZ290byBlcnI1OwotCi0JcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBpcnEgcmVnaXN0ZXJlZFxuIiwgX19mdW5jX18pOwotCi0JcmV0dXJuIDA7Ci0KLWVycjU6Ci0JZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTVRFMl9TRF9SRUFET05MWSk7Ci1lcnI0OgotCWdwaW9fZnJlZShHUElPX05SX1BBTE1URTJfU0RfUE9XRVIpOwotZXJyMzoKLQlmcmVlX2lycShncGlvX3RvX2lycShHUElPX05SX1BBTE1URTJfU0RfREVURUNUX04pLCBkYXRhKTsKLWVycjI6Ci0JZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTVRFMl9TRF9ERVRFQ1RfTik7Ci1lcnI6Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIHZvaWQgcGFsbXRlMl9tY2lfZXhpdChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCi17Ci0JZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTVRFMl9TRF9SRUFET05MWSk7Ci0JZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTVRFMl9TRF9QT1dFUik7Ci0JZnJlZV9pcnEoZ3Bpb190b19pcnEoR1BJT19OUl9QQUxNVEUyX1NEX0RFVEVDVF9OKSwgZGF0YSk7Ci0JZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTVRFMl9TRF9ERVRFQ1RfTik7Ci19Ci0KLXN0YXRpYyB2b2lkIHBhbG10ZTJfbWNpX3Bvd2VyKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHZkZCkKLXsKLQlzdHJ1Y3QgcHhhbWNpX3BsYXRmb3JtX2RhdGEgKnBfZCA9IGRldi0+cGxhdGZvcm1fZGF0YTsKLQlncGlvX3NldF92YWx1ZShHUElPX05SX1BBTE1URTJfU0RfUE9XRVIsIHBfZC0+b2NyX21hc2sgJiAoMSA8PCB2ZGQpKTsKLX0KLQotc3RhdGljIGludCBwYWxtdGUyX21jaV9nZXRfcm8oc3RydWN0IGRldmljZSAqZGV2KQotewotCXJldHVybiBncGlvX2dldF92YWx1ZShHUElPX05SX1BBTE1URTJfU0RfUkVBRE9OTFkpOwotfQotCiBzdGF0aWMgc3RydWN0IHB4YW1jaV9wbGF0Zm9ybV9kYXRhIHBhbG10ZTJfbWNpX3BsYXRmb3JtX2RhdGEgPSB7Ci0JLm9jcl9tYXNrCT0gTU1DX1ZERF8zMl8zMyB8IE1NQ19WRERfMzNfMzQsCi0JLnNldHBvd2VyCT0gcGFsbXRlMl9tY2lfcG93ZXIsCi0JLmdldF9ybwkJPSBwYWxtdGUyX21jaV9nZXRfcm8sCi0JLmluaXQgCQk9IHBhbG10ZTJfbWNpX2luaXQsCi0JLmV4aXQJCT0gcGFsbXRlMl9tY2lfZXhpdCwKKwkub2NyX21hc2sJCT0gTU1DX1ZERF8zMl8zMyB8IE1NQ19WRERfMzNfMzQsCisJLmdwaW9fY2FyZF9kZXRlY3QJPSBHUElPX05SX1BBTE1URTJfU0RfREVURUNUX04sCisJLmdwaW9fY2FyZF9ybwkJPSBHUElPX05SX1BBTE1URTJfU0RfUkVBRE9OTFksCisJLmdwaW9fcG93ZXIJCT0gR1BJT19OUl9QQUxNVEUyX1NEX1BPV0VSLAogfTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMjg3LDM1ICsyMTUsOSBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogSXJEQQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBpbnQgcGFsbXRlMl9pcmRhX3N0YXJ0dXAoc3RydWN0IGRldmljZSAqZGV2KQotewotCWludCBlcnI7Ci0JZXJyID0gZ3Bpb19yZXF1ZXN0KEdQSU9fTlJfUEFMTVRFMl9JUl9ESVNBQkxFLCAiSVIgRElTQUJMRSIpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyOwotCWVyciA9IGdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX05SX1BBTE1URTJfSVJfRElTQUJMRSwgMSk7Ci0JaWYgKGVycikKLQkJZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTVRFMl9JUl9ESVNBQkxFKTsKLWVycjoKLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgdm9pZCBwYWxtdGUyX2lyZGFfc2h1dGRvd24oc3RydWN0IGRldmljZSAqZGV2KQotewotCWdwaW9fZnJlZShHUElPX05SX1BBTE1URTJfSVJfRElTQUJMRSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHBhbG10ZTJfaXJkYV90cmFuc2NlaXZlcl9tb2RlKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IG1vZGUpCi17Ci0JZ3Bpb19zZXRfdmFsdWUoR1BJT19OUl9QQUxNVEUyX0lSX0RJU0FCTEUsIG1vZGUgJiBJUl9PRkYpOwotCXB4YTJ4eF90cmFuc2NlaXZlcl9tb2RlKGRldiwgbW9kZSk7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgcHhhZmljcF9wbGF0Zm9ybV9kYXRhIHBhbG10ZTJfZmljcF9wbGF0Zm9ybV9kYXRhID0gewotCS5zdGFydHVwCQk9IHBhbG10ZTJfaXJkYV9zdGFydHVwLAotCS5zaHV0ZG93bgkJPSBwYWxtdGUyX2lyZGFfc2h1dGRvd24sCi0JLnRyYW5zY2VpdmVyX2NhcAk9IElSX1NJUk1PREUgfCBJUl9GSVJNT0RFIHwgSVJfT0ZGLAotCS50cmFuc2NlaXZlcl9tb2RlCT0gcGFsbXRlMl9pcmRhX3RyYW5zY2VpdmVyX21vZGUsCisJLmdwaW9fcHdkb3duCQk9IEdQSU9fTlJfUEFMTVRFMl9JUl9ESVNBQkxFLAorCS50cmFuc2NlaXZlcl9jYXAJPSBJUl9TSVJNT0RFIHwgSVJfT0ZGLAogfTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvcGFsbXR4LmMgYi9hcmNoL2FybS9tYWNoLXB4YS9wYWxtdHguYwppbmRleCA4M2QwMjA4Li43NmEyYjM3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9wYWxtdHguYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9wYWxtdHguYwpAQCAtMjgsNiArMjgsMTAgQEAKICNpbmNsdWRlIDxsaW51eC93bTk3eHhfYmF0dC5oPgogI2luY2x1ZGUgPGxpbnV4L3Bvd2VyX3N1cHBseS5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi9ncGlvX3ZidXMuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvbmFuZC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KQEAgLTEzMSw2ICsxMzUsMTAgQEAKIAlHUElPMzRfRkZVQVJUX1JYRCwKIAlHUElPMzlfRkZVQVJUX1RYRCwKIAorCS8qIE5BTkQgKi8KKwlHUElPMTVfbkNTXzEsCisJR1BJTzE4X1JEWSwKKwogCS8qIE1JU0MuICovCiAJR1BJTzEwX0dQSU8sCS8qIGhvdHN5bmMgYnV0dG9uICovCiAJR1BJTzEyX0dQSU8sCS8qIHBvd2VyIGRldGVjdCAqLwpAQCAtMTM4LDg1ICsxNDYsNTAgQEAKIH07CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIE5PUiBGbGFzaAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBwYWxtdHhfcGFydGl0aW9uc1tdID0geworCXsKKwkJLm5hbWUJCT0gIkZsYXNoIiwKKwkJLm9mZnNldAkJPSAweDAwMDAwMDAwLAorCQkuc2l6ZQkJPSBNVERQQVJUX1NJWl9GVUxMLAorCQkubWFza19mbGFncwk9IDAKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHBoeXNtYXBfZmxhc2hfZGF0YSBwYWxtdHhfZmxhc2hfZGF0YVtdID0geworCXsKKwkJLndpZHRoCQk9IDIsCQkJLyogYmFua3dpZHRoIGluIGJ5dGVzICovCisJCS5wYXJ0cwkJPSBwYWxtdHhfcGFydGl0aW9ucywKKwkJLm5yX3BhcnRzCT0gQVJSQVlfU0laRShwYWxtdHhfcGFydGl0aW9ucykKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHBhbG10eF9mbGFzaF9yZXNvdXJjZSA9IHsKKwkuc3RhcnQJPSBQWEFfQ1MwX1BIWVMsCisJLmVuZAk9IFBYQV9DUzBfUEhZUyArIFNaXzhNIC0gMSwKKwkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHBhbG10eF9mbGFzaCA9IHsKKwkubmFtZQkJPSAicGh5c21hcC1mbGFzaCIsCisJLmlkCQk9IDAsCisJLnJlc291cmNlCT0gJnBhbG10eF9mbGFzaF9yZXNvdXJjZSwKKwkubnVtX3Jlc291cmNlcwk9IDEsCisJLmRldiAJCT0geworCQkucGxhdGZvcm1fZGF0YSA9IHBhbG10eF9mbGFzaF9kYXRhLAorCX0sCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBTRC9NTUMgY2FyZCBjb250cm9sbGVyCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIGludCBwYWxtdHhfbWNpX2luaXQoc3RydWN0IGRldmljZSAqZGV2LCBpcnFfaGFuZGxlcl90IHBhbG10eF9kZXRlY3RfaW50LAotCQkJCXZvaWQgKmRhdGEpCi17Ci0JaW50IGVyciA9IDA7Ci0KLQkvKiBTZXR1cCBhbiBpbnRlcnJ1cHQgZm9yIGRldGVjdGluZyBjYXJkIGluc2VydC9yZW1vdmUgZXZlbnRzICovCi0JZXJyID0gZ3Bpb19yZXF1ZXN0KEdQSU9fTlJfUEFMTVRYX1NEX0RFVEVDVF9OLCAiU0QgSVJRIik7Ci0JaWYgKGVycikKLQkJZ290byBlcnI7Ci0JZXJyID0gZ3Bpb19kaXJlY3Rpb25faW5wdXQoR1BJT19OUl9QQUxNVFhfU0RfREVURUNUX04pOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyMjsKLQllcnIgPSByZXF1ZXN0X2lycShncGlvX3RvX2lycShHUElPX05SX1BBTE1UWF9TRF9ERVRFQ1RfTiksCi0JCQlwYWxtdHhfZGV0ZWN0X2ludCwgSVJRRl9ESVNBQkxFRCB8IElSUUZfU0FNUExFX1JBTkRPTSB8Ci0JCQlJUlFGX1RSSUdHRVJfRkFMTElORyB8IElSUUZfVFJJR0dFUl9SSVNJTkcsCi0JCQkiU0QvTU1DIGNhcmQgZGV0ZWN0IiwgZGF0YSk7Ci0JaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBjYW5ub3QgcmVxdWVzdCBTRC9NTUMgY2FyZCBkZXRlY3QgSVJRXG4iLAotCQkJCV9fZnVuY19fKTsKLQkJZ290byBlcnIyOwotCX0KLQotCWVyciA9IGdwaW9fcmVxdWVzdChHUElPX05SX1BBTE1UWF9TRF9QT1dFUiwgIlNEX1BPV0VSIik7Ci0JaWYgKGVycikKLQkJZ290byBlcnIzOwotCWVyciA9IGdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX05SX1BBTE1UWF9TRF9QT1dFUiwgMCk7Ci0JaWYgKGVycikKLQkJZ290byBlcnI0OwotCi0JZXJyID0gZ3Bpb19yZXF1ZXN0KEdQSU9fTlJfUEFMTVRYX1NEX1JFQURPTkxZLCAiU0RfUkVBRE9OTFkiKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycjQ7Ci0JZXJyID0gZ3Bpb19kaXJlY3Rpb25faW5wdXQoR1BJT19OUl9QQUxNVFhfU0RfUkVBRE9OTFkpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyNTsKLQotCXByaW50ayhLRVJOX0RFQlVHICIlczogaXJxIHJlZ2lzdGVyZWRcbiIsIF9fZnVuY19fKTsKLQotCXJldHVybiAwOwotCi1lcnI1OgotCWdwaW9fZnJlZShHUElPX05SX1BBTE1UWF9TRF9SRUFET05MWSk7Ci1lcnI0OgotCWdwaW9fZnJlZShHUElPX05SX1BBTE1UWF9TRF9QT1dFUik7Ci1lcnIzOgotCWZyZWVfaXJxKGdwaW9fdG9faXJxKEdQSU9fTlJfUEFMTVRYX1NEX0RFVEVDVF9OKSwgZGF0YSk7Ci1lcnIyOgotCWdwaW9fZnJlZShHUElPX05SX1BBTE1UWF9TRF9ERVRFQ1RfTik7Ci1lcnI6Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIHZvaWQgcGFsbXR4X21jaV9leGl0KHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKLXsKLQlncGlvX2ZyZWUoR1BJT19OUl9QQUxNVFhfU0RfUkVBRE9OTFkpOwotCWdwaW9fZnJlZShHUElPX05SX1BBTE1UWF9TRF9QT1dFUik7Ci0JZnJlZV9pcnEoZ3Bpb190b19pcnEoR1BJT19OUl9QQUxNVFhfU0RfREVURUNUX04pLCBkYXRhKTsKLQlncGlvX2ZyZWUoR1BJT19OUl9QQUxNVFhfU0RfREVURUNUX04pOwotfQotCi1zdGF0aWMgdm9pZCBwYWxtdHhfbWNpX3Bvd2VyKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHZkZCkKLXsKLQlzdHJ1Y3QgcHhhbWNpX3BsYXRmb3JtX2RhdGEgKnBfZCA9IGRldi0+cGxhdGZvcm1fZGF0YTsKLQlncGlvX3NldF92YWx1ZShHUElPX05SX1BBTE1UWF9TRF9QT1dFUiwgcF9kLT5vY3JfbWFzayAmICgxIDw8IHZkZCkpOwotfQotCi1zdGF0aWMgaW50IHBhbG10eF9tY2lfZ2V0X3JvKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlyZXR1cm4gZ3Bpb19nZXRfdmFsdWUoR1BJT19OUl9QQUxNVFhfU0RfUkVBRE9OTFkpOwotfQotCiBzdGF0aWMgc3RydWN0IHB4YW1jaV9wbGF0Zm9ybV9kYXRhIHBhbG10eF9tY2lfcGxhdGZvcm1fZGF0YSA9IHsKLQkub2NyX21hc2sJPSBNTUNfVkREXzMyXzMzIHwgTU1DX1ZERF8zM18zNCwKLQkuc2V0cG93ZXIJPSBwYWxtdHhfbWNpX3Bvd2VyLAotCS5nZXRfcm8JCT0gcGFsbXR4X21jaV9nZXRfcm8sCi0JLmluaXQgCQk9IHBhbG10eF9tY2lfaW5pdCwKLQkuZXhpdAkJPSBwYWxtdHhfbWNpX2V4aXQsCisJLm9jcl9tYXNrCQk9IE1NQ19WRERfMzJfMzMgfCBNTUNfVkREXzMzXzM0LAorCS5ncGlvX2NhcmRfZGV0ZWN0CT0gR1BJT19OUl9QQUxNVFhfU0RfREVURUNUX04sCisJLmdwaW9fY2FyZF9ybwkJPSBHUElPX05SX1BBTE1UWF9TRF9SRUFET05MWSwKKwkuZ3Bpb19wb3dlcgkJPSBHUElPX05SX1BBTE1UWF9TRF9QT1dFUiwKKwkuZGV0ZWN0X2RlbGF5CQk9IDIwLAogfTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMzMwLDM1ICszMDMsOSBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogSXJEQQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBpbnQgcGFsbXR4X2lyZGFfc3RhcnR1cChzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0JaW50IGVycjsKLQllcnIgPSBncGlvX3JlcXVlc3QoR1BJT19OUl9QQUxNVFhfSVJfRElTQUJMRSwgIklSIERJU0FCTEUiKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycjsKLQllcnIgPSBncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19OUl9QQUxNVFhfSVJfRElTQUJMRSwgMSk7Ci0JaWYgKGVycikKLQkJZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTVRYX0lSX0RJU0FCTEUpOwotZXJyOgotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyB2b2lkIHBhbG10eF9pcmRhX3NodXRkb3duKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlncGlvX2ZyZWUoR1BJT19OUl9QQUxNVFhfSVJfRElTQUJMRSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHBhbG10eF9pcmRhX3RyYW5zY2VpdmVyX21vZGUoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgbW9kZSkKLXsKLQlncGlvX3NldF92YWx1ZShHUElPX05SX1BBTE1UWF9JUl9ESVNBQkxFLCBtb2RlICYgSVJfT0ZGKTsKLQlweGEyeHhfdHJhbnNjZWl2ZXJfbW9kZShkZXYsIG1vZGUpOwotfQotCiBzdGF0aWMgc3RydWN0IHB4YWZpY3BfcGxhdGZvcm1fZGF0YSBwYWxtdHhfZmljcF9wbGF0Zm9ybV9kYXRhID0gewotCS5zdGFydHVwCQk9IHBhbG10eF9pcmRhX3N0YXJ0dXAsCi0JLnNodXRkb3duCQk9IHBhbG10eF9pcmRhX3NodXRkb3duLAotCS50cmFuc2NlaXZlcl9jYXAJPSBJUl9TSVJNT0RFIHwgSVJfRklSTU9ERSB8IElSX09GRiwKLQkudHJhbnNjZWl2ZXJfbW9kZQk9IHBhbG10eF9pcmRhX3RyYW5zY2VpdmVyX21vZGUsCisJLmdwaW9fcHdkb3duCQk9IEdQSU9fTlJfUEFMTVRYX0lSX0RJU0FCTEUsCisJLnRyYW5zY2VpdmVyX2NhcAk9IElSX1NJUk1PREUgfCBJUl9PRkYsCiB9OwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC00OTMsNiArNDQwLDY4IEBACiB9OwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBOQU5EIEZsYXNoCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHZvaWQgcGFsbXR4X25hbmRfY21kX2N0bChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IGNtZCwKKwkJCQkgdW5zaWduZWQgaW50IGN0cmwpCit7CisJc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKKwl1bnNpZ25lZCBsb25nIG5hbmRhZGRyID0gKHVuc2lnbmVkIGxvbmcpdGhpcy0+SU9fQUREUl9XOworCisJaWYgKGNtZCA9PSBOQU5EX0NNRF9OT05FKQorCQlyZXR1cm47CisKKwlpZiAoY3RybCAmIE5BTkRfQ0xFKQorCQl3cml0ZWIoY21kLCBQQUxNVFhfTkFORF9DTEVfVklSVCk7CisJZWxzZSBpZiAoY3RybCAmIE5BTkRfQUxFKQorCQl3cml0ZWIoY21kLCBQQUxNVFhfTkFORF9BTEVfVklSVCk7CisJZWxzZQorCQl3cml0ZWIoY21kLCBuYW5kYWRkcik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBwYWxtdHhfcGFydGl0aW9uX2luZm9bXSA9IHsKKwlbMF0gPSB7CisJCS5uYW1lCT0gInBhbG10eC0wIiwKKwkJLm9mZnNldAk9IDAsCisJCS5zaXplCT0gTVREUEFSVF9TSVpfRlVMTAorCX0sCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqcGFsbXR4X3BhcnRfcHJvYmVzW10gPSB7ICJjbWRsaW5lcGFydCIsIE5VTEwgfTsKKworc3RydWN0IHBsYXRmb3JtX25hbmRfZGF0YSBwYWxtdHhfbmFuZF9wbGF0ZGF0YSA9IHsKKwkuY2hpcAk9IHsKKwkJLm5yX2NoaXBzCQk9IDEsCisJCS5jaGlwX29mZnNldAkJPSAwLAorCQkubnJfcGFydGl0aW9ucwkJPSBBUlJBWV9TSVpFKHBhbG10eF9wYXJ0aXRpb25faW5mbyksCisJCS5wYXJ0aXRpb25zCQk9IHBhbG10eF9wYXJ0aXRpb25faW5mbywKKwkJLmNoaXBfZGVsYXkJCT0gMjAsCisJCS5wYXJ0X3Byb2JlX3R5cGVzIAk9IHBhbG10eF9wYXJ0X3Byb2JlcywKKwl9LAorCS5jdHJsCT0geworCQkuY21kX2N0cmwJPSBwYWxtdHhfbmFuZF9jbWRfY3RsLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHBhbG10eF9uYW5kX3Jlc291cmNlW10gPSB7CisJWzBdCT0geworCQkuc3RhcnQJPSBQWEFfQ1MxX1BIWVMsCisJCS5lbmQJPSBQWEFfQ1MxX1BIWVMgKyBTWl8xTSAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBwYWxtdHhfbmFuZCA9IHsKKwkubmFtZQkJPSAiZ2VuX25hbmQiLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShwYWxtdHhfbmFuZF9yZXNvdXJjZSksCisJLnJlc291cmNlCT0gcGFsbXR4X25hbmRfcmVzb3VyY2UsCisJLmlkCQk9IC0xLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZwYWxtdHhfbmFuZF9wbGF0ZGF0YSwKKwl9Cit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBQb3dlciBtYW5hZ2VtZW50IC0gc3RhbmRieQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHN0YXRpYyB2b2lkIF9faW5pdCBwYWxtdHhfcG1faW5pdCh2b2lkKQpAQCAtNTE4LDYgKzUyNyw4IEBACiAJJnBvd2VyX3N1cHBseSwKIAkmcGFsbXR4X2Fzb2MsCiAJJnBhbG10eF9ncGlvX3ZidXMsCisJJnBhbG10eF9mbGFzaCwKKwkmcGFsbXR4X25hbmQsCiB9OwogCiBzdGF0aWMgc3RydWN0IG1hcF9kZXNjIHBhbG10eF9pb19kZXNjW10gX19pbml0ZGF0YSA9IHsKQEAgLTUyNSw4ICs1MzYsMTggQEAKIAkudmlydHVhbAk9IFBBTE1UWF9QQ01DSUFfVklSVCwKIAkucGZuCQk9IF9fcGh5c190b19wZm4oUEFMTVRYX1BDTUNJQV9QSFlTKSwKIAkubGVuZ3RoCQk9IFBBTE1UWF9QQ01DSUFfU0laRSwKLQkudHlwZQkJPSBNVF9ERVZJQ0UKLX0sCisJLnR5cGUJCT0gTVRfREVWSUNFLAorfSwgeworCS52aXJ0dWFsCT0gUEFMTVRYX05BTkRfQUxFX1ZJUlQsCisJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKFBBTE1UWF9OQU5EX0FMRV9QSFlTKSwKKwkubGVuZ3RoCQk9IFNaXzFNLAorCS50eXBlCQk9IE1UX0RFVklDRSwKK30sIHsKKwkudmlydHVhbAk9IFBBTE1UWF9OQU5EX0NMRV9WSVJULAorCS5wZm4JCT0gX19waHlzX3RvX3BmbihQQUxNVFhfTkFORF9DTEVfUEhZUyksCisJLmxlbmd0aAkJPSBTWl8xTSwKKwkudHlwZQkJPSBNVF9ERVZJQ0UsCit9CiB9OwogCiBzdGF0aWMgdm9pZCBfX2luaXQgcGFsbXR4X21hcF9pbyh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvcGFsbXo3Mi5jIGIvYXJjaC9hcm0vbWFjaC1weGEvcGFsbXo3Mi5jCmluZGV4IGMzNjQ1YWEuLmMyYmY0OTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3BhbG16NzIuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9wYWxtejcyLmMKQEAgLTEyOSw4OCArMTI5LDE0IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBTRC9NTUMgY2FyZCBjb250cm9sbGVyCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIGludCBwYWxtejcyX21jaV9pbml0KHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCQlpcnFfaGFuZGxlcl90IHBhbG16NzJfZGV0ZWN0X2ludCwgdm9pZCAqZGF0YSkKLXsKLQlpbnQgZXJyID0gMDsKLQotCS8qIFNldHVwIGFuIGludGVycnVwdCBmb3IgZGV0ZWN0aW5nIGNhcmQgaW5zZXJ0L3JlbW92ZSBldmVudHMgKi8KLQllcnIgPSBncGlvX3JlcXVlc3QoR1BJT19OUl9QQUxNWjcyX1NEX0RFVEVDVF9OLCAiU0QgSVJRIik7Ci0JaWYgKGVycikKLQkJZ290byBlcnI7Ci0JZXJyID0gZ3Bpb19kaXJlY3Rpb25faW5wdXQoR1BJT19OUl9QQUxNWjcyX1NEX0RFVEVDVF9OKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycjI7Ci0JZXJyID0gcmVxdWVzdF9pcnEoZ3Bpb190b19pcnEoR1BJT19OUl9QQUxNWjcyX1NEX0RFVEVDVF9OKSwKLQkJCXBhbG16NzJfZGV0ZWN0X2ludCwgSVJRRl9ESVNBQkxFRCB8IElSUUZfU0FNUExFX1JBTkRPTSB8Ci0JCQlJUlFGX1RSSUdHRVJfRkFMTElORyB8IElSUUZfVFJJR0dFUl9SSVNJTkcsCi0JCQkiU0QvTU1DIGNhcmQgZGV0ZWN0IiwgZGF0YSk7Ci0JaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBjYW5ub3QgcmVxdWVzdCBTRC9NTUMgY2FyZCBkZXRlY3QgSVJRXG4iLAotCQkJCV9fZnVuY19fKTsKLQkJZ290byBlcnIyOwotCX0KLQotCS8qIFNEX1BPV0VSIGlzIG5vdCBhY3R1YWxseSBwb3dlciwgYnV0IGl0IGlzIG1vcmUgbGlrZSBjaGlwCi0JICogc2VsZWN0LCBpLmUuIGl0IGlzIGludmVydGVkICovCi0KLQllcnIgPSBncGlvX3JlcXVlc3QoR1BJT19OUl9QQUxNWjcyX1NEX1BPV0VSX04sICJTRF9QT1dFUiIpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyMzsKLQllcnIgPSBncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19OUl9QQUxNWjcyX1NEX1BPV0VSX04sIDApOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyNDsKLQllcnIgPSBncGlvX3JlcXVlc3QoR1BJT19OUl9QQUxNWjcyX1NEX1JPLCAiU0RfUk8iKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycjQ7Ci0JZXJyID0gZ3Bpb19kaXJlY3Rpb25faW5wdXQoR1BJT19OUl9QQUxNWjcyX1NEX1JPKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycjU7Ci0KLQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGlycSByZWdpc3RlcmVkXG4iLCBfX2Z1bmNfXyk7Ci0KLQlyZXR1cm4gMDsKLQotZXJyNToKLQlncGlvX2ZyZWUoR1BJT19OUl9QQUxNWjcyX1NEX1JPKTsKLWVycjQ6Ci0JZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTVo3Ml9TRF9QT1dFUl9OKTsKLWVycjM6Ci0JZnJlZV9pcnEoZ3Bpb190b19pcnEoR1BJT19OUl9QQUxNWjcyX1NEX0RFVEVDVF9OKSwgZGF0YSk7Ci1lcnIyOgotCWdwaW9fZnJlZShHUElPX05SX1BBTE1aNzJfU0RfREVURUNUX04pOwotZXJyOgotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyB2b2lkIHBhbG16NzJfbWNpX2V4aXQoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQotewotCWdwaW9fZnJlZShHUElPX05SX1BBTE1aNzJfU0RfUE9XRVJfTik7Ci0JZnJlZV9pcnEoZ3Bpb190b19pcnEoR1BJT19OUl9QQUxNWjcyX1NEX0RFVEVDVF9OKSwgZGF0YSk7Ci0JZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTVo3Ml9TRF9ERVRFQ1RfTik7Ci0JZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTVo3Ml9TRF9STyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHBhbG16NzJfbWNpX3Bvd2VyKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHZkZCkKLXsKLQlzdHJ1Y3QgcHhhbWNpX3BsYXRmb3JtX2RhdGEgKnBfZCA9IGRldi0+cGxhdGZvcm1fZGF0YTsKLQlpZiAocF9kLT5vY3JfbWFzayAmICgxIDw8IHZkZCkpCi0JCWdwaW9fc2V0X3ZhbHVlKEdQSU9fTlJfUEFMTVo3Ml9TRF9QT1dFUl9OLCAwKTsKLQllbHNlCi0JCWdwaW9fc2V0X3ZhbHVlKEdQSU9fTlJfUEFMTVo3Ml9TRF9QT1dFUl9OLCAxKTsKLX0KLQotc3RhdGljIGludCBwYWxtejcyX21jaV9ybyhzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0JcmV0dXJuIGdwaW9fZ2V0X3ZhbHVlKEdQSU9fTlJfUEFMTVo3Ml9TRF9STyk7Ci19Ci0KKy8qIFNEX1BPV0VSIGlzIG5vdCBhY3R1YWxseSBwb3dlciwgYnV0IGl0IGlzIG1vcmUgbGlrZSBjaGlwCisgKiBzZWxlY3QsIGkuZS4gaXQgaXMgaW52ZXJ0ZWQgKi8KIHN0YXRpYyBzdHJ1Y3QgcHhhbWNpX3BsYXRmb3JtX2RhdGEgcGFsbXo3Ml9tY2lfcGxhdGZvcm1fZGF0YSA9IHsKLQkub2NyX21hc2sJPSBNTUNfVkREXzMyXzMzIHwgTU1DX1ZERF8zM18zNCwKLQkuc2V0cG93ZXIJPSBwYWxtejcyX21jaV9wb3dlciwKLQkuZ2V0X3JvCQk9IHBhbG16NzJfbWNpX3JvLAotCS5pbml0IAkJPSBwYWxtejcyX21jaV9pbml0LAotCS5leGl0CQk9IHBhbG16NzJfbWNpX2V4aXQsCisJLm9jcl9tYXNrCQk9IE1NQ19WRERfMzJfMzMgfCBNTUNfVkREXzMzXzM0LAorCS5ncGlvX2NhcmRfZGV0ZWN0CT0gR1BJT19OUl9QQUxNWjcyX1NEX0RFVEVDVF9OLAorCS5ncGlvX2NhcmRfcm8JCT0gR1BJT19OUl9QQUxNWjcyX1NEX1JPLAorCS5ncGlvX3Bvd2VyCQk9IEdQSU9fTlJfUEFMTVo3Ml9TRF9QT1dFUl9OLAorCS5ncGlvX3Bvd2VyX2ludmVydAk9IDEsCiB9OwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0zMDQsMzUgKzIzMCw5IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBJckRBCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIGludCBwYWxtejcyX2lyZGFfc3RhcnR1cChzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0JaW50IGVycjsKLQllcnIgPSBncGlvX3JlcXVlc3QoR1BJT19OUl9QQUxNWjcyX0lSX0RJU0FCTEUsICJJUiBESVNBQkxFIik7Ci0JaWYgKGVycikKLQkJZ290byBlcnI7Ci0JZXJyID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fTlJfUEFMTVo3Ml9JUl9ESVNBQkxFLCAxKTsKLQlpZiAoZXJyKQotCQlncGlvX2ZyZWUoR1BJT19OUl9QQUxNWjcyX0lSX0RJU0FCTEUpOwotZXJyOgotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyB2b2lkIHBhbG16NzJfaXJkYV9zaHV0ZG93bihzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0JZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTVo3Ml9JUl9ESVNBQkxFKTsKLX0KLQotc3RhdGljIHZvaWQgcGFsbXo3Ml9pcmRhX3RyYW5zY2VpdmVyX21vZGUoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgbW9kZSkKLXsKLQlncGlvX3NldF92YWx1ZShHUElPX05SX1BBTE1aNzJfSVJfRElTQUJMRSwgbW9kZSAmIElSX09GRik7Ci0JcHhhMnh4X3RyYW5zY2VpdmVyX21vZGUoZGV2LCBtb2RlKTsKLX0KLQogc3RhdGljIHN0cnVjdCBweGFmaWNwX3BsYXRmb3JtX2RhdGEgcGFsbXo3Ml9maWNwX3BsYXRmb3JtX2RhdGEgPSB7Ci0JLnN0YXJ0dXAJCT0gcGFsbXo3Ml9pcmRhX3N0YXJ0dXAsCi0JLnNodXRkb3duCQk9IHBhbG16NzJfaXJkYV9zaHV0ZG93biwKKwkuZ3Bpb19wd2Rvd24JCT0gR1BJT19OUl9QQUxNWjcyX0lSX0RJU0FCTEUsCiAJLnRyYW5zY2VpdmVyX2NhcAk9IElSX1NJUk1PREUgfCBJUl9PRkYsCi0JLnRyYW5zY2VpdmVyX21vZGUJPSBwYWxtejcyX2lyZGFfdHJhbnNjZWl2ZXJfbW9kZSwKIH07CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3BjbTk5MC1iYXNlYm9hcmQuYyBiL2FyY2gvYXJtL21hY2gtcHhhL3BjbTk5MC1iYXNlYm9hcmQuYwppbmRleCAwMTc5MWQ3Li5iYmRhNTcwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9wY205OTAtYmFzZWJvYXJkLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvcGNtOTkwLWJhc2Vib2FyZC5jCkBAIC0zMjEsMTEgKzMyMSwxNCBAQAogI2RlZmluZSBNU0VDU19QRVJfSklGRlkgKDEwMDAvSFopCiAKIHN0YXRpYyBzdHJ1Y3QgcHhhbWNpX3BsYXRmb3JtX2RhdGEgcGNtOTkwX21jaV9wbGF0Zm9ybV9kYXRhID0gewotCS5kZXRlY3RfZGVsYXkJPSAyNTAgLyBNU0VDU19QRVJfSklGRlksCi0JLm9jcl9tYXNrCT0gTU1DX1ZERF8zMl8zMyB8IE1NQ19WRERfMzNfMzQsCi0JLmluaXQgCQk9IHBjbTk5MF9tY2lfaW5pdCwKLQkuc2V0cG93ZXIgCT0gcGNtOTkwX21jaV9zZXRwb3dlciwKLQkuZXhpdAkJPSBwY205OTBfbWNpX2V4aXQsCisJLmRldGVjdF9kZWxheQkJPSAyNTAgLyBNU0VDU19QRVJfSklGRlksCisJLm9jcl9tYXNrCQk9IE1NQ19WRERfMzJfMzMgfCBNTUNfVkREXzMzXzM0LAorCS5pbml0IAkJCT0gcGNtOTkwX21jaV9pbml0LAorCS5zZXRwb3dlciAJCT0gcGNtOTkwX21jaV9zZXRwb3dlciwKKwkuZXhpdAkJCT0gcGNtOTkwX21jaV9leGl0LAorCS5ncGlvX2NhcmRfZGV0ZWN0CT0gLTEsCisJLmdwaW9fY2FyZF9ybwkJPSAtMSwKKwkuZ3Bpb19wb3dlcgkJPSAtMSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcHhhb2hjaV9wbGF0Zm9ybV9kYXRhIHBjbTk5MF9vaGNpX3BsYXRmb3JtX2RhdGEgPSB7CkBAIC00MjcsMjUgKzQzMCw1NiBAQAogCWdwaW9fYnVzX3N3aXRjaCA9IC1FSU5WQUw7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc29jX2NhbWVyYV9saW5rIGljbGluayA9IHsKLQkuYnVzX2lkCT0gMCwgLyogTXVzdCBtYXRjaCB3aXRoIHRoZSBjYW1lcmEgSUQgYWJvdmUgKi8KLQkucXVlcnlfYnVzX3BhcmFtID0gcGNtOTkwX2NhbWVyYV9xdWVyeV9idXNfcGFyYW0sCi0JLnNldF9idXNfcGFyYW0gPSBwY205OTBfY2FtZXJhX3NldF9idXNfcGFyYW0sCi0JLmZyZWVfYnVzID0gcGNtOTkwX2NhbWVyYV9mcmVlX2J1cywKLX07Ci0KIC8qIEJvYXJkIEkyQyBkZXZpY2VzLiAqLwogc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBfX2luaXRkYXRhIHBjbTk5MF9pMmNfZGV2aWNlc1tdID0gewogCXsKIAkJLyogTXVzdCBpbml0aWFsaXplIGJlZm9yZSB0aGUgY2FtZXJhKHMpICovCiAJCUkyQ19CT0FSRF9JTkZPKCJwY2E5NTM2IiwgMHg0MSksCiAJCS5wbGF0Zm9ybV9kYXRhID0gJnBjYTk1MzZfZGF0YSwKLQl9LCB7CisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gcGNtOTkwX2NhbWVyYV9pMmNbXSA9IHsKKwl7CiAJCUkyQ19CT0FSRF9JTkZPKCJtdDl2MDIyIiwgMHg0OCksCi0JCS5wbGF0Zm9ybV9kYXRhID0gJmljbGluaywgLyogV2l0aCBleHRlbmRlciAqLwogCX0sIHsKIAkJSTJDX0JPQVJEX0lORk8oIm10OW0wMDEiLCAweDVkKSwKLQkJLnBsYXRmb3JtX2RhdGEgPSAmaWNsaW5rLCAvKiBXaXRoIGV4dGVuZGVyICovCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc29jX2NhbWVyYV9saW5rIGljbGlua1tdID0geworCXsKKwkJLmJ1c19pZAkJCT0gMCwgLyogTXVzdCBtYXRjaCB3aXRoIHRoZSBjYW1lcmEgSUQgKi8KKwkJLmJvYXJkX2luZm8JCT0gJnBjbTk5MF9jYW1lcmFfaTJjWzBdLAorCQkuaTJjX2FkYXB0ZXJfaWQJCT0gMCwKKwkJLnF1ZXJ5X2J1c19wYXJhbQk9IHBjbTk5MF9jYW1lcmFfcXVlcnlfYnVzX3BhcmFtLAorCQkuc2V0X2J1c19wYXJhbQkJPSBwY205OTBfY2FtZXJhX3NldF9idXNfcGFyYW0sCisJCS5mcmVlX2J1cwkJPSBwY205OTBfY2FtZXJhX2ZyZWVfYnVzLAorCQkubW9kdWxlX25hbWUJCT0gIm10OXYwMjIiLAorCX0sIHsKKwkJLmJ1c19pZAkJCT0gMCwgLyogTXVzdCBtYXRjaCB3aXRoIHRoZSBjYW1lcmEgSUQgKi8KKwkJLmJvYXJkX2luZm8JCT0gJnBjbTk5MF9jYW1lcmFfaTJjWzFdLAorCQkuaTJjX2FkYXB0ZXJfaWQJCT0gMCwKKwkJLnF1ZXJ5X2J1c19wYXJhbQk9IHBjbTk5MF9jYW1lcmFfcXVlcnlfYnVzX3BhcmFtLAorCQkuc2V0X2J1c19wYXJhbQkJPSBwY205OTBfY2FtZXJhX3NldF9idXNfcGFyYW0sCisJCS5mcmVlX2J1cwkJPSBwY205OTBfY2FtZXJhX2ZyZWVfYnVzLAorCQkubW9kdWxlX25hbWUJCT0gIm10OW0wMDEiLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBwY205OTBfY2FtZXJhW10gPSB7CisJeworCQkubmFtZQk9ICJzb2MtY2FtZXJhLXBkcnYiLAorCQkuaWQJPSAwLAorCQkuZGV2CT0geworCQkJLnBsYXRmb3JtX2RhdGEgPSAmaWNsaW5rWzBdLAorCQl9LAorCX0sIHsKKwkJLm5hbWUJPSAic29jLWNhbWVyYS1wZHJ2IiwKKwkJLmlkCT0gMSwKKwkJLmRldgk9IHsKKwkJCS5wbGF0Zm9ybV9kYXRhID0gJmljbGlua1sxXSwKKwkJfSwKIAl9LAogfTsKICNlbmRpZiAvKiBDT05GSUdfVklERU9fUFhBMjd4IHx8Q09ORklHX1ZJREVPX1BYQTI3eF9NT0RVTEUgKi8KQEAgLTUwMSw2ICs1MzUsOSBAQAogCXB4YV9zZXRfY2FtZXJhX2luZm8oJnBjbTk5MF9weGFjYW1lcmFfcGxhdGZvcm1fZGF0YSk7CiAKIAlpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbygwLCBBUlJBWV9BTkRfU0laRShwY205OTBfaTJjX2RldmljZXMpKTsKKworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmcGNtOTkwX2NhbWVyYVswXSk7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZwY205OTBfY2FtZXJhWzFdKTsKICNlbmRpZgogCiAJcHJpbnRrKEtFUk5fSU5GTyAiUENNLTk5MCBFdmFsdWF0aW9uIGJhc2Vib2FyZCBpbml0aWFsaXplZFxuIik7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9wb29kbGUuYyBiL2FyY2gvYXJtL21hY2gtcHhhL3Bvb2RsZS5jCmluZGV4IDkzNTJkNGEuLmExODY5OTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3Bvb2RsZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3Bvb2RsZS5jCkBAIC0yNDUsMjAgKzI0NSwxMCBAQAogICogVGhlIGNhcmQgZGV0ZWN0IGludGVycnVwdCBpc24ndCBkZWJvdW5jZWQgc28gd2UgZGVsYXkgaXQgYnkgMjUwbXMKICAqIHRvIGdpdmUgdGhlIGNhcmQgYSBjaGFuY2UgdG8gZnVsbHkgaW5zZXJ0L2VqZWN0LgogICovCi1zdGF0aWMgc3RydWN0IHB4YW1jaV9wbGF0Zm9ybV9kYXRhIHBvb2RsZV9tY2lfcGxhdGZvcm1fZGF0YTsKLQogc3RhdGljIGludCBwb29kbGVfbWNpX2luaXQoc3RydWN0IGRldmljZSAqZGV2LCBpcnFfaGFuZGxlcl90IHBvb2RsZV9kZXRlY3RfaW50LCB2b2lkICpkYXRhKQogewogCWludCBlcnI7CiAKLQllcnIgPSBncGlvX3JlcXVlc3QoUE9PRExFX0dQSU9fblNEX0RFVEVDVCwgIm5TRF9ERVRFQ1QiKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycl9vdXQ7Ci0KLQllcnIgPSBncGlvX3JlcXVlc3QoUE9PRExFX0dQSU9fblNEX1dQLCAiblNEX1dQIik7Ci0JaWYgKGVycikKLQkJZ290byBlcnJfZnJlZV8xOwotCiAJZXJyID0gZ3Bpb19yZXF1ZXN0KFBPT0RMRV9HUElPX1NEX1BXUiwgIlNEX1BXUiIpOwogCWlmIChlcnIpCiAJCWdvdG8gZXJyX2ZyZWVfMjsKQEAgLTI2NywzNCArMjU3LDE0IEBACiAJaWYgKGVycikKIAkJZ290byBlcnJfZnJlZV8zOwogCi0JZ3Bpb19kaXJlY3Rpb25faW5wdXQoUE9PRExFX0dQSU9fblNEX0RFVEVDVCk7Ci0JZ3Bpb19kaXJlY3Rpb25faW5wdXQoUE9PRExFX0dQSU9fblNEX1dQKTsKLQogCWdwaW9fZGlyZWN0aW9uX291dHB1dChQT09ETEVfR1BJT19TRF9QV1IsIDApOwogCWdwaW9fZGlyZWN0aW9uX291dHB1dChQT09ETEVfR1BJT19TRF9QV1IxLCAwKTsKIAotCXBvb2RsZV9tY2lfcGxhdGZvcm1fZGF0YS5kZXRlY3RfZGVsYXkgPSBtc2Vjc190b19qaWZmaWVzKDI1MCk7Ci0KLQllcnIgPSByZXF1ZXN0X2lycShQT09ETEVfSVJRX0dQSU9fblNEX0RFVEVDVCwgcG9vZGxlX2RldGVjdF9pbnQsCi0JCQkgIElSUUZfRElTQUJMRUQgfCBJUlFGX1RSSUdHRVJfUklTSU5HIHwgSVJRRl9UUklHR0VSX0ZBTExJTkcsCi0JCQkgICJNTUMgY2FyZCBkZXRlY3QiLCBkYXRhKTsKLQlpZiAoZXJyKSB7Ci0JCXByX2VycigiJXM6IE1NQy9TRDogY2FuJ3QgcmVxdWVzdCBNTUMgY2FyZCBkZXRlY3QgSVJRXG4iLAotCQkJCV9fZnVuY19fKTsKLQkJZ290byBlcnJfZnJlZV80OwotCX0KLQogCXJldHVybiAwOwogCi1lcnJfZnJlZV80OgotCWdwaW9fZnJlZShQT09ETEVfR1BJT19TRF9QV1IxKTsKIGVycl9mcmVlXzM6CiAJZ3Bpb19mcmVlKFBPT0RMRV9HUElPX1NEX1BXUik7CiBlcnJfZnJlZV8yOgotCWdwaW9fZnJlZShQT09ETEVfR1BJT19uU0RfV1ApOwotZXJyX2ZyZWVfMToKLQlncGlvX2ZyZWUoUE9PRExFX0dQSU9fblNEX0RFVEVDVCk7Ci1lcnJfb3V0OgogCXJldHVybiBlcnI7CiB9CiAKQEAgLTMxMiw2MiArMjgyLDI5IEBACiAJfQogfQogCi1zdGF0aWMgaW50IHBvb2RsZV9tY2lfZ2V0X3JvKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlyZXR1cm4gISFncGlvX2dldF92YWx1ZShQT09ETEVfR1BJT19uU0RfV1ApOwotCXJldHVybiBHUExSKFBPT0RMRV9HUElPX25TRF9XUCkgJiBHUElPX2JpdChQT09ETEVfR1BJT19uU0RfV1ApOwotfQotCi0KIHN0YXRpYyB2b2lkIHBvb2RsZV9tY2lfZXhpdChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCiB7Ci0JZnJlZV9pcnEoUE9PRExFX0lSUV9HUElPX25TRF9ERVRFQ1QsIGRhdGEpOwogCWdwaW9fZnJlZShQT09ETEVfR1BJT19TRF9QV1IxKTsKIAlncGlvX2ZyZWUoUE9PRExFX0dQSU9fU0RfUFdSKTsKLQlncGlvX2ZyZWUoUE9PRExFX0dQSU9fblNEX1dQKTsKLQlncGlvX2ZyZWUoUE9PRExFX0dQSU9fblNEX0RFVEVDVCk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcHhhbWNpX3BsYXRmb3JtX2RhdGEgcG9vZGxlX21jaV9wbGF0Zm9ybV9kYXRhID0gewotCS5vY3JfbWFzawk9IE1NQ19WRERfMzJfMzN8TU1DX1ZERF8zM18zNCwKLQkuaW5pdCAJCT0gcG9vZGxlX21jaV9pbml0LAotCS5nZXRfcm8JCT0gcG9vZGxlX21jaV9nZXRfcm8sCi0JLnNldHBvd2VyIAk9IHBvb2RsZV9tY2lfc2V0cG93ZXIsCi0JLmV4aXQJCT0gcG9vZGxlX21jaV9leGl0LAorCS5vY3JfbWFzawkJPSBNTUNfVkREXzMyXzMzfE1NQ19WRERfMzNfMzQsCisJLmluaXQgCQkJPSBwb29kbGVfbWNpX2luaXQsCisJLnNldHBvd2VyIAkJPSBwb29kbGVfbWNpX3NldHBvd2VyLAorCS5leGl0CQkJPSBwb29kbGVfbWNpX2V4aXQsCisJLmdwaW9fY2FyZF9kZXRlY3QJPSBQT09ETEVfSVJRX0dQSU9fblNEX0RFVEVDVCwKKwkuZ3Bpb19jYXJkX3JvCQk9IFBPT0RMRV9HUElPX25TRF9XUCwKKwkuZ3Bpb19wb3dlcgkJPSAtMSwKIH07CiAKIAogLyoKICAqIElyZGEKICAqLwotc3RhdGljIHZvaWQgcG9vZGxlX2lyZGFfdHJhbnNjZWl2ZXJfbW9kZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBtb2RlKQotewotCWdwaW9fc2V0X3ZhbHVlKFBPT0RMRV9HUElPX0lSX09OLCBtb2RlICYgSVJfT0ZGKTsKLQlweGEyeHhfdHJhbnNjZWl2ZXJfbW9kZShkZXYsIG1vZGUpOwotfQotCi1zdGF0aWMgaW50IHBvb2RsZV9pcmRhX3N0YXJ0dXAoc3RydWN0IGRldmljZSAqZGV2KQotewotCWludCBlcnI7Ci0KLQllcnIgPSBncGlvX3JlcXVlc3QoUE9PRExFX0dQSU9fSVJfT04sICJJUl9PTiIpOwotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7Ci0KLQlncGlvX2RpcmVjdGlvbl9vdXRwdXQoUE9PRExFX0dQSU9fSVJfT04sIDEpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBwb29kbGVfaXJkYV9zaHV0ZG93bihzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0JZ3Bpb19mcmVlKFBPT0RMRV9HUElPX0lSX09OKTsKLX0KLQogc3RhdGljIHN0cnVjdCBweGFmaWNwX3BsYXRmb3JtX2RhdGEgcG9vZGxlX2ZpY3BfcGxhdGZvcm1fZGF0YSA9IHsKKwkuZ3Bpb19wd2Rvd24JCT0gUE9PRExFX0dQSU9fSVJfT04sCiAJLnRyYW5zY2VpdmVyX2NhcAk9IElSX1NJUk1PREUgfCBJUl9PRkYsCi0JLnRyYW5zY2VpdmVyX21vZGUJPSBwb29kbGVfaXJkYV90cmFuc2NlaXZlcl9tb2RlLAotCS5zdGFydHVwCQk9IHBvb2RsZV9pcmRhX3N0YXJ0dXAsCi0JLnNodXRkb3duCQk9IHBvb2RsZV9pcmRhX3NodXRkb3duLAogfTsKIAogCkBAIC01MjEsNiArNDU4LDcgQEAKIAlzZXRfcHhhX2ZiX3BhcmVudCgmcG9vZGxlX2xvY29tb19kZXZpY2UuZGV2KTsKIAlzZXRfcHhhX2ZiX2luZm8oJnBvb2RsZV9mYl9pbmZvKTsKIAlweGFfc2V0X3VkY19pbmZvKCZ1ZGNfaW5mbyk7CisJcG9vZGxlX21jaV9wbGF0Zm9ybV9kYXRhLmRldGVjdF9kZWxheSA9IG1zZWNzX3RvX2ppZmZpZXMoMjUwKTsKIAlweGFfc2V0X21jaV9pbmZvKCZwb29kbGVfbWNpX3BsYXRmb3JtX2RhdGEpOwogCXB4YV9zZXRfZmljcF9pbmZvKCZwb29kbGVfZmljcF9wbGF0Zm9ybV9kYXRhKTsKIAlweGFfc2V0X2kyY19pbmZvKE5VTEwpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvcHhhMnh4LmMgYi9hcmNoL2FybS9tYWNoLXB4YS9weGEyeHguYwppbmRleCAyZjMzOTRmLi44NjgyNzA0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9weGEyeHguYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9weGEyeHguYwpAQCAtNTIsMyArNTIsNCBAQAogCX0gZWxzZQogCQlCVUcoKTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHB4YTJ4eF90cmFuc2NlaXZlcl9tb2RlKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3B4YTMwMC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvcHhhMzAwLmMKaW5kZXggNGJhNmQyMS4uZjRhZjZlMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvcHhhMzAwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvcHhhMzAwLmMKQEAgLTg0LDkgKzg0LDExIEBACiB9OwogCiBzdGF0aWMgREVGSU5FX1BYQTNfQ0tFTihjb21tb25fbmFuZCwgTkFORCwgMTU2MDAwMDAwLCAwKTsKK3N0YXRpYyBERUZJTkVfUFhBM19DS0VOKGdjdSwgUFhBMzAwX0dDVSwgMCwgMCk7CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrX2xvb2t1cCBjb21tb25fY2xrcmVnc1tdID0gewogCUlOSVRfQ0xLUkVHKCZjbGtfY29tbW9uX25hbmQsICJweGEzeHgtbmFuZCIsIE5VTEwpLAorCUlOSVRfQ0xLUkVHKCZjbGtfZ2N1LCAicHhhM3h4LWdjdSIsIE5VTEwpLAogfTsKIAogc3RhdGljIERFRklORV9QWEEzX0NLRU4ocHhhMzEwX21tYzMsIE1NQzMsIDE5NTAwMDAwLCAwKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3B4YTMyMC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvcHhhMzIwLmMKaW5kZXggOGIzZDk3ZS4uYzczNzNlNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvcHhhMzIwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvcHhhMzIwLmMKQEAgLTc4LDkgKzc4LDExIEBACiB9OwogCiBzdGF0aWMgREVGSU5FX1BYQTNfQ0tFTihweGEzMjBfbmFuZCwgTkFORCwgMTA0MDAwMDAwLCAwKTsKK3N0YXRpYyBERUZJTkVfUFhBM19DS0VOKGdjdSwgUFhBMzIwX0dDVSwgMCwgMCk7CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrX2xvb2t1cCBweGEzMjBfY2xrcmVnc1tdID0gewogCUlOSVRfQ0xLUkVHKCZjbGtfcHhhMzIwX25hbmQsICJweGEzeHgtbmFuZCIsIE5VTEwpLAorCUlOSVRfQ0xLUkVHKCZjbGtfZ2N1LCAicHhhM3h4LWdjdSIsIE5VTEwpLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgcHhhMzIwX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3B4YTkzMC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvcHhhOTMwLmMKaW5kZXggNzExMzE3NC4uMDY0MjkyMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvcHhhOTMwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvcHhhOTMwLmMKQEAgLTE3NiwxMyArMTc2LDMwIEBACiAJTUZQX0FERFJfRU5ELAogfTsKIAorc3RhdGljIHN0cnVjdCBtZnBfYWRkcl9tYXAgcHhhOTM1X21mcF9hZGRyX21hcFtdIF9faW5pdGRhdGEgPSB7CisJTUZQX0FERFIoR1BJTzE1OSwgMHgwNTI0KSwKKwlNRlBfQUREUihHUElPMTYzLCAweDA1MzQpLAorCU1GUF9BRERSKEdQSU8xNjcsIDB4MDU0NCksCisJTUZQX0FERFIoR1BJTzE2OCwgMHgwNTQ4KSwKKwlNRlBfQUREUihHUElPMTY5LCAweDA1NGMpLAorCU1GUF9BRERSKEdQSU8xNzAsIDB4MDU1MCksCisJTUZQX0FERFIoR1BJTzE3MSwgMHgwNTU0KSwKKwlNRlBfQUREUihHUElPMTcyLCAweDA1NTgpLAorCU1GUF9BRERSKEdQSU8xNzMsIDB4MDU1YyksCisKKwlNRlBfQUREUl9FTkQsCit9OworCiBzdGF0aWMgaW50IF9faW5pdCBweGE5MzBfaW5pdCh2b2lkKQogewotCWlmIChjcHVfaXNfcHhhOTMwKCkpIHsKKwlpZiAoY3B1X2lzX3B4YTkzMCgpIHx8IGNwdV9pc19weGE5MzUoKSkgewogCQltZnBfaW5pdF9iYXNlKGlvX3AydihNRlBSX0JBU0UpKTsKIAkJbWZwX2luaXRfYWRkcihweGE5MzBfbWZwX2FkZHJfbWFwKTsKIAl9CiAKKwlpZiAoY3B1X2lzX3B4YTkzNSgpKQorCQltZnBfaW5pdF9hZGRyKHB4YTkzNV9tZnBfYWRkcl9tYXApOworCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3NwaXR6LmMgYi9hcmNoL2FybS9tYWNoLXB4YS9zcGl0ei5jCmluZGV4IGRkYTMxMGYuLjgyZmY1NzMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3NwaXR6LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvc3BpdHouYwpAQCAtMTUsNiArMTUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpb19rZXlzLmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgpAQCAtMjQsNiArMjUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NwaS9hZHM3ODQ2Lmg+CiAjaW5jbHVkZSA8bGludXgvc3BpL2NvcmdpX2xjZC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9zaGFycHNsLmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQvbWF0cml4X2tleXBhZC5oPgogCiAjaW5jbHVkZSA8YXNtL3NldHVwLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KQEAgLTExMSw2ICsxMTMsMjYgQEAKIAlHUElPMTA1X0dQSU8sCS8qIFNQSVRaX0dQSU9fQ0ZfSVJRICovCiAJR1BJTzEwNl9HUElPLAkvKiBTUElUWl9HUElPX0NGMl9JUlEgKi8KIAorCS8qIEdQSU8gbWF0cml4IGtleXBhZCAqLworCUdQSU84OF9HUElPLAkvKiBjb2x1bW4gMCAqLworCUdQSU8yM19HUElPLAkvKiBjb2x1bW4gMSAqLworCUdQSU8yNF9HUElPLAkvKiBjb2x1bW4gMiAqLworCUdQSU8yNV9HUElPLAkvKiBjb2x1bW4gMyAqLworCUdQSU8yNl9HUElPLAkvKiBjb2x1bW4gNCAqLworCUdQSU8yN19HUElPLAkvKiBjb2x1bW4gNSAqLworCUdQSU81Ml9HUElPLAkvKiBjb2x1bW4gNiAqLworCUdQSU8xMDNfR1BJTywJLyogY29sdW1uIDcgKi8KKwlHUElPMTA3X0dQSU8sCS8qIGNvbHVtbiA4ICovCisJR1BJTzEwOF9HUElPLAkvKiBjb2x1bW4gOSAqLworCUdQSU8xMTRfR1BJTywJLyogY29sdW1uIDEwICovCisJR1BJTzEyX0dQSU8sCS8qIHJvdyAwICovCisJR1BJTzE3X0dQSU8sCS8qIHJvdyAxICovCisJR1BJTzkxX0dQSU8sCS8qIHJvdyAyICovCisJR1BJTzM0X0dQSU8sCS8qIHJvdyAzICovCisJR1BJTzM2X0dQSU8sCS8qIHJvdyA0ICovCisJR1BJTzM4X0dQSU8sCS8qIHJvdyA1ICovCisJR1BJTzM5X0dQSU8sCS8qIHJvdyA2ICovCisKIAkvKiBJMkMgKi8KIAlHUElPMTE3X0kyQ19TQ0wsCiAJR1BJTzExOF9JMkNfU0RBLApAQCAtMjQyLDkgKzI2NCwxNTIgQEAKIC8qCiAgKiBTcGl0eiBLZXlib2FyZCBEZXZpY2UKICAqLworI2RlZmluZSBTUElUWl9LRVlfQ0FMRU5EQVIJS0VZX0YxCisjZGVmaW5lIFNQSVRaX0tFWV9BRERSRVNTCUtFWV9GMgorI2RlZmluZSBTUElUWl9LRVlfRk4JCUtFWV9GMworI2RlZmluZSBTUElUWl9LRVlfQ0FOQ0VMCUtFWV9GNAorI2RlZmluZSBTUElUWl9LRVlfRVhPSwkJS0VZX0Y1CisjZGVmaW5lIFNQSVRaX0tFWV9FWENBTkNFTAlLRVlfRjYKKyNkZWZpbmUgU1BJVFpfS0VZX0VYSk9HRE9XTglLRVlfRjcKKyNkZWZpbmUgU1BJVFpfS0VZX0VYSk9HVVAJS0VZX0Y4CisjZGVmaW5lIFNQSVRaX0tFWV9KQVAxCQlLRVlfTEVGVEFMVAorI2RlZmluZSBTUElUWl9LRVlfSkFQMgkJS0VZX1JJR0hUQ1RSTAorI2RlZmluZSBTUElUWl9LRVlfU1lOQwkJS0VZX0Y5CisjZGVmaW5lIFNQSVRaX0tFWV9NQUlMCQlLRVlfRjEwCisjZGVmaW5lIFNQSVRaX0tFWV9PSwkJS0VZX0YxMQorI2RlZmluZSBTUElUWl9LRVlfTUVOVQkJS0VZX0YxMgorCitzdGF0aWMgY29uc3QgdWludDMyX3Qgc3BpdHprYmRfa2V5bWFwW10gPSB7CisJS0VZKDAsIDAsIEtFWV9MRUZUQ1RSTCksCisJS0VZKDAsIDEsIEtFWV8xKSwKKwlLRVkoMCwgMiwgS0VZXzMpLAorCUtFWSgwLCAzLCBLRVlfNSksCisJS0VZKDAsIDQsIEtFWV82KSwKKwlLRVkoMCwgNSwgS0VZXzcpLAorCUtFWSgwLCA2LCBLRVlfOSksCisJS0VZKDAsIDcsIEtFWV8wKSwKKwlLRVkoMCwgOCwgS0VZX0JBQ0tTUEFDRSksCisJS0VZKDAsIDksIFNQSVRaX0tFWV9FWE9LKSwJLyogRVhPSyAqLworCUtFWSgwLCAxMCwgU1BJVFpfS0VZX0VYQ0FOQ0VMKSwJLyogRVhDQU5DRUwgKi8KKwlLRVkoMSwgMSwgS0VZXzIpLAorCUtFWSgxLCAyLCBLRVlfNCksCisJS0VZKDEsIDMsIEtFWV9SKSwKKwlLRVkoMSwgNCwgS0VZX1kpLAorCUtFWSgxLCA1LCBLRVlfOCksCisJS0VZKDEsIDYsIEtFWV9JKSwKKwlLRVkoMSwgNywgS0VZX08pLAorCUtFWSgxLCA4LCBLRVlfUCksCisJS0VZKDEsIDksIFNQSVRaX0tFWV9FWEpPR0RPV04pLAkvKiBFWEpPR0RPV04gKi8KKwlLRVkoMSwgMTAsIFNQSVRaX0tFWV9FWEpPR1VQKSwJLyogRVhKT0dVUCAqLworCUtFWSgyLCAwLCBLRVlfVEFCKSwKKwlLRVkoMiwgMSwgS0VZX1EpLAorCUtFWSgyLCAyLCBLRVlfRSksCisJS0VZKDIsIDMsIEtFWV9UKSwKKwlLRVkoMiwgNCwgS0VZX0cpLAorCUtFWSgyLCA1LCBLRVlfVSksCisJS0VZKDIsIDYsIEtFWV9KKSwKKwlLRVkoMiwgNywgS0VZX0spLAorCUtFWSgzLCAwLCBTUElUWl9LRVlfQUREUkVTUyksCS8qIEFERFJFU1MgKi8KKwlLRVkoMywgMSwgS0VZX1cpLAorCUtFWSgzLCAyLCBLRVlfUyksCisJS0VZKDMsIDMsIEtFWV9GKSwKKwlLRVkoMywgNCwgS0VZX1YpLAorCUtFWSgzLCA1LCBLRVlfSCksCisJS0VZKDMsIDYsIEtFWV9NKSwKKwlLRVkoMywgNywgS0VZX0wpLAorCUtFWSgzLCA5LCBLRVlfUklHSFRTSElGVCksCisJS0VZKDQsIDAsIFNQSVRaX0tFWV9DQUxFTkRBUiksCS8qIENBTEVOREFSICovCisJS0VZKDQsIDEsIEtFWV9BKSwKKwlLRVkoNCwgMiwgS0VZX0QpLAorCUtFWSg0LCAzLCBLRVlfQyksCisJS0VZKDQsIDQsIEtFWV9CKSwKKwlLRVkoNCwgNSwgS0VZX04pLAorCUtFWSg0LCA2LCBLRVlfRE9UKSwKKwlLRVkoNCwgOCwgS0VZX0VOVEVSKSwKKwlLRVkoNCwgOSwgS0VZX0xFRlRTSElGVCksCisJS0VZKDUsIDAsIFNQSVRaX0tFWV9NQUlMKSwJLyogTUFJTCAqLworCUtFWSg1LCAxLCBLRVlfWiksCisJS0VZKDUsIDIsIEtFWV9YKSwKKwlLRVkoNSwgMywgS0VZX01JTlVTKSwKKwlLRVkoNSwgNCwgS0VZX1NQQUNFKSwKKwlLRVkoNSwgNSwgS0VZX0NPTU1BKSwKKwlLRVkoNSwgNywgS0VZX1VQKSwKKwlLRVkoNSwgMTAsIFNQSVRaX0tFWV9GTiksCS8qIEZOICovCisJS0VZKDYsIDAsIEtFWV9TWVNSUSksCisJS0VZKDYsIDEsIFNQSVRaX0tFWV9KQVAxKSwJLyogSkFQMSAqLworCUtFWSg2LCAyLCBTUElUWl9LRVlfSkFQMiksCS8qIEpBUDIgKi8KKwlLRVkoNiwgMywgU1BJVFpfS0VZX0NBTkNFTCksCS8qIENBTkNFTCAqLworCUtFWSg2LCA0LCBTUElUWl9LRVlfT0spLAkvKiBPSyAqLworCUtFWSg2LCA1LCBTUElUWl9LRVlfTUVOVSksCS8qIE1FTlUgKi8KKwlLRVkoNiwgNiwgS0VZX0xFRlQpLAorCUtFWSg2LCA3LCBLRVlfRE9XTiksCisJS0VZKDYsIDgsIEtFWV9SSUdIVCksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG1hdHJpeF9rZXltYXBfZGF0YSBzcGl0emtiZF9rZXltYXBfZGF0YSA9IHsKKwkua2V5bWFwCQk9IHNwaXR6a2JkX2tleW1hcCwKKwkua2V5bWFwX3NpemUJPSBBUlJBWV9TSVpFKHNwaXR6a2JkX2tleW1hcCksCit9OworCitzdGF0aWMgY29uc3QgdWludDMyX3Qgc3BpdHprYmRfcm93X2dwaW9zW10gPQorCQl7IDEyLCAxNywgOTEsIDM0LCAzNiwgMzgsIDM5IH07CitzdGF0aWMgY29uc3QgdWludDMyX3Qgc3BpdHprYmRfY29sX2dwaW9zW10gPQorCQl7IDg4LCAyMywgMjQsIDI1LCAyNiwgMjcsIDUyLCAxMDMsIDEwNywgMTA4LCAxMTQgfTsKKworc3RhdGljIHN0cnVjdCBtYXRyaXhfa2V5cGFkX3BsYXRmb3JtX2RhdGEgc3BpdHprYmRfcGRhdGEgPSB7CisJLmtleW1hcF9kYXRhCQk9ICZzcGl0emtiZF9rZXltYXBfZGF0YSwKKwkucm93X2dwaW9zCQk9IHNwaXR6a2JkX3Jvd19ncGlvcywKKwkuY29sX2dwaW9zCQk9IHNwaXR6a2JkX2NvbF9ncGlvcywKKwkubnVtX3Jvd19ncGlvcwkJPSBBUlJBWV9TSVpFKHNwaXR6a2JkX3Jvd19ncGlvcyksCisJLm51bV9jb2xfZ3Bpb3MJCT0gQVJSQVlfU0laRShzcGl0emtiZF9jb2xfZ3Bpb3MpLAorCS5jb2xfc2Nhbl9kZWxheV91cwk9IDEwLAorCS5kZWJvdW5jZV9tcwkJPSAxMCwKKwkud2FrZXVwCQkJPSAxLAorfTsKKwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc3BpdHprYmRfZGV2aWNlID0gewotCS5uYW1lCQk9ICJzcGl0ei1rZXlib2FyZCIsCisJLm5hbWUJCT0gIm1hdHJpeC1rZXlwYWQiLAogCS5pZAkJPSAtMSwKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmc3BpdHprYmRfcGRhdGEsCisJfSwKK307CisKKworc3RhdGljIHN0cnVjdCBncGlvX2tleXNfYnV0dG9uIHNwaXR6X2dwaW9fa2V5c1tdID0geworCXsKKwkJLnR5cGUJPSBFVl9QV1IsCisJCS5jb2RlCT0gS0VZX1NVU1BFTkQsCisJCS5ncGlvCT0gU1BJVFpfR1BJT19PTl9LRVksCisJCS5kZXNjCT0gIk9uL09mZiIsCisJCS53YWtldXAJPSAxLAorCX0sCisJLyogVHdvIGJ1dHRvbnMgZGV0ZWN0aW5nIHRoZSBsaWQgc3RhdGUgKi8KKwl7CisJCS50eXBlCT0gRVZfU1csCisJCS5jb2RlCT0gMCwKKwkJLmdwaW8JPSBTUElUWl9HUElPX1NXQSwKKwkJLmRlc2MJPSAi77u/RGlzcGxheSBEb3duIiwKKwl9LAorCXsKKwkJLnR5cGUJPSBFVl9TVywKKwkJLmNvZGUJPSAxLAorCQkuZ3Bpbwk9IFNQSVRaX0dQSU9fU1dCLAorCQkuZGVzYwk9ICLvu79MaWQgQ2xvc2VkIiwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBncGlvX2tleXNfcGxhdGZvcm1fZGF0YSBzcGl0el9ncGlvX2tleXNfcGxhdGZvcm1fZGF0YSA9IHsKKwkuYnV0dG9ucwk9IHNwaXR6X2dwaW9fa2V5cywKKwkubmJ1dHRvbnMJPSBBUlJBWV9TSVpFKHNwaXR6X2dwaW9fa2V5cyksCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzcGl0el9ncGlvX2tleXNfZGV2aWNlID0geworCS5uYW1lCT0gImdwaW8ta2V5cyIsCisJLmlkCT0gLTEsCisJLmRldgk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmc3BpdHpfZ3Bpb19rZXlzX3BsYXRmb3JtX2RhdGEsCisJfSwKIH07CiAKIApAQCAtMjk2LDYgKzQ2MSw3IEBACiAJLnZyZWZfZGVsYXlfdXNlY3MJPSAxMDAsCiAJLnhfcGxhdGVfb2htcwkJPSA0MTksCiAJLnlfcGxhdGVfb2htcwkJPSA0ODYsCisJLnByZXNzdXJlX21heAkJPSAxMDI0LAogCS5ncGlvX3BlbmRvd24JCT0gU1BJVFpfR1BJT19UUF9JTlQsCiAJLndhaXRfZm9yX3N5bmMJCT0gc3BpdHpfd2FpdF9mb3JfaHN5bmMsCiB9OwpAQCAtMzc4LDQ1ICs1NDQsNiBAQAogICogVGhlIGNhcmQgZGV0ZWN0IGludGVycnVwdCBpc24ndCBkZWJvdW5jZWQgc28gd2UgZGVsYXkgaXQgYnkgMjUwbXMKICAqIHRvIGdpdmUgdGhlIGNhcmQgYSBjaGFuY2UgdG8gZnVsbHkgaW5zZXJ0L2VqZWN0LgogICovCi0KLXN0YXRpYyBzdHJ1Y3QgcHhhbWNpX3BsYXRmb3JtX2RhdGEgc3BpdHpfbWNpX3BsYXRmb3JtX2RhdGE7Ci0KLXN0YXRpYyBpbnQgc3BpdHpfbWNpX2luaXQoc3RydWN0IGRldmljZSAqZGV2LCBpcnFfaGFuZGxlcl90IHNwaXR6X2RldGVjdF9pbnQsIHZvaWQgKmRhdGEpCi17Ci0JaW50IGVycjsKLQotCWVyciA9IGdwaW9fcmVxdWVzdChTUElUWl9HUElPX25TRF9ERVRFQ1QsICJuU0RfREVURUNUIik7Ci0JaWYgKGVycikKLQkJZ290byBlcnJfb3V0OwotCi0JZXJyID0gZ3Bpb19yZXF1ZXN0KFNQSVRaX0dQSU9fblNEX1dQLCAiblNEX1dQIik7Ci0JaWYgKGVycikKLQkJZ290byBlcnJfZnJlZV8xOwotCi0JZ3Bpb19kaXJlY3Rpb25faW5wdXQoU1BJVFpfR1BJT19uU0RfREVURUNUKTsKLQlncGlvX2RpcmVjdGlvbl9pbnB1dChTUElUWl9HUElPX25TRF9XUCk7Ci0KLQlzcGl0el9tY2lfcGxhdGZvcm1fZGF0YS5kZXRlY3RfZGVsYXkgPSBtc2Vjc190b19qaWZmaWVzKDI1MCk7Ci0KLQllcnIgPSByZXF1ZXN0X2lycShTUElUWl9JUlFfR1BJT19uU0RfREVURUNULCBzcGl0el9kZXRlY3RfaW50LAotCQkJICBJUlFGX0RJU0FCTEVEIHwgSVJRRl9UUklHR0VSX1JJU0lORyB8Ci0JCQkgIElSUUZfVFJJR0dFUl9GQUxMSU5HLAotCQkJICAiTU1DIGNhcmQgZGV0ZWN0IiwgZGF0YSk7Ci0JaWYgKGVycikgewotCQlwcl9lcnIoIiVzOiBNTUMvU0Q6IGNhbid0IHJlcXVlc3QgTU1DIGNhcmQgZGV0ZWN0IElSUVxuIiwKLQkJCQlfX2Z1bmNfXyk7Ci0JCWdvdG8gZXJyX2ZyZWVfMjsKLQl9Ci0JcmV0dXJuIDA7Ci0KLWVycl9mcmVlXzI6Ci0JZ3Bpb19mcmVlKFNQSVRaX0dQSU9fblNEX1dQKTsKLWVycl9mcmVlXzE6Ci0JZ3Bpb19mcmVlKFNQSVRaX0dQSU9fblNEX0RFVEVDVCk7Ci1lcnJfb3V0OgotCXJldHVybiBlcnI7Ci19Ci0KIHN0YXRpYyB2b2lkIHNwaXR6X21jaV9zZXRwb3dlcihzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCB2ZGQpCiB7CiAJc3RydWN0IHB4YW1jaV9wbGF0Zm9ybV9kYXRhKiBwX2QgPSBkZXYtPnBsYXRmb3JtX2RhdGE7CkBAIC00MjcsMjQgKzU1NCwxMiBAQAogCQlzcGl0el9jYXJkX3B3cl9jdHJsKFNQSVRaX1BXUl9TRCwgMHgwMDAwKTsKIH0KIAotc3RhdGljIGludCBzcGl0el9tY2lfZ2V0X3JvKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlyZXR1cm4gZ3Bpb19nZXRfdmFsdWUoU1BJVFpfR1BJT19uU0RfV1ApOwotfQotCi1zdGF0aWMgdm9pZCBzcGl0el9tY2lfZXhpdChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCi17Ci0JZnJlZV9pcnEoU1BJVFpfSVJRX0dQSU9fblNEX0RFVEVDVCwgZGF0YSk7Ci0JZ3Bpb19mcmVlKFNQSVRaX0dQSU9fblNEX1dQKTsKLQlncGlvX2ZyZWUoU1BJVFpfR1BJT19uU0RfREVURUNUKTsKLX0KLQogc3RhdGljIHN0cnVjdCBweGFtY2lfcGxhdGZvcm1fZGF0YSBzcGl0el9tY2lfcGxhdGZvcm1fZGF0YSA9IHsKLQkub2NyX21hc2sJPSBNTUNfVkREXzMyXzMzfE1NQ19WRERfMzNfMzQsCi0JLmluaXQgCQk9IHNwaXR6X21jaV9pbml0LAotCS5nZXRfcm8JCT0gc3BpdHpfbWNpX2dldF9ybywKLQkuc2V0cG93ZXIgCT0gc3BpdHpfbWNpX3NldHBvd2VyLAotCS5leGl0CQk9IHNwaXR6X21jaV9leGl0LAorCS5vY3JfbWFzawkJPSBNTUNfVkREXzMyXzMzfE1NQ19WRERfMzNfMzQsCisJLnNldHBvd2VyIAkJPSBzcGl0el9tY2lfc2V0cG93ZXIsCisJLmdwaW9fY2FyZF9kZXRlY3QJPSBTUElUWl9HUElPX25TRF9ERVRFQ1QsCisJLmdwaW9fY2FyZF9ybwkJPSBTUElUWl9HUElPX25TRF9XUCwKKwkuZ3Bpb19wb3dlcgkJPSAtMSwKIH07CiAKIApAQCAtNDg0LDUwICs1OTksMTAgQEAKIC8qCiAgKiBJcmRhCiAgKi8KLXN0YXRpYyBpbnQgc3BpdHpfaXJkYV9zdGFydHVwKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlpbnQgcmM7Ci0KLQlyYyA9IGdwaW9fcmVxdWVzdChTUElUWl9HUElPX0lSX09OLCAiSXJEQSBvbiIpOwotCWlmIChyYykKLQkJZ290byBlcnI7Ci0KLQlyYyA9IGdwaW9fZGlyZWN0aW9uX291dHB1dChTUElUWl9HUElPX0lSX09OLCAxKTsKLQlpZiAocmMpCi0JCWdvdG8gZXJyX2RpcjsKLQotCXJldHVybiAwOwotCi1lcnJfZGlyOgotCWdwaW9fZnJlZShTUElUWl9HUElPX0lSX09OKTsKLWVycjoKLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyB2b2lkIHNwaXR6X2lyZGFfc2h1dGRvd24oc3RydWN0IGRldmljZSAqZGV2KQotewotCWdwaW9fZnJlZShTUElUWl9HUElPX0lSX09OKTsKLX0KLQotc3RhdGljIHZvaWQgc3BpdHpfaXJkYV90cmFuc2NlaXZlcl9tb2RlKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IG1vZGUpCi17Ci0JZ3Bpb19zZXRfdmFsdWUoU1BJVFpfR1BJT19JUl9PTiwgbW9kZSAmIElSX09GRik7Ci0JcHhhMnh4X3RyYW5zY2VpdmVyX21vZGUoZGV2LCBtb2RlKTsKLX0KLQotI2lmZGVmIENPTkZJR19NQUNIX0FLSVRBCi1zdGF0aWMgdm9pZCBha2l0YV9pcmRhX3RyYW5zY2VpdmVyX21vZGUoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgbW9kZSkKLXsKLQlncGlvX3NldF92YWx1ZShBS0lUQV9HUElPX0lSX09OLCBtb2RlICYgSVJfT0ZGKTsKLQlweGEyeHhfdHJhbnNjZWl2ZXJfbW9kZShkZXYsIG1vZGUpOwotfQotI2VuZGlmCiAKIHN0YXRpYyBzdHJ1Y3QgcHhhZmljcF9wbGF0Zm9ybV9kYXRhIHNwaXR6X2ZpY3BfcGxhdGZvcm1fZGF0YSA9IHsKKy8qIC5ncGlvX3B3ZG93biBpcyBzZXQgaW4gc3BpdHpfaW5pdCgpIGFuZCBha2l0YV9pbml0KCkgYWNjb3JkaW5nbHkgKi8KIAkudHJhbnNjZWl2ZXJfY2FwCT0gSVJfU0lSTU9ERSB8IElSX09GRiwKLQkudHJhbnNjZWl2ZXJfbW9kZQk9IHNwaXR6X2lyZGFfdHJhbnNjZWl2ZXJfbW9kZSwKLQkuc3RhcnR1cAkJPSBzcGl0el9pcmRhX3N0YXJ0dXAsCi0JLnNodXRkb3duCQk9IHNwaXR6X2lyZGFfc2h1dGRvd24sCiB9OwogCiAKQEAgLTY1Miw2ICs3MjcsNyBAQAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZXNbXSBfX2luaXRkYXRhID0gewogCSZzcGl0enNjb29wX2RldmljZSwKIAkmc3BpdHprYmRfZGV2aWNlLAorCSZzcGl0el9ncGlvX2tleXNfZGV2aWNlLAogCSZzcGl0emxlZF9kZXZpY2UsCiAJJnNoYXJwc2xfbmFuZF9kZXZpY2UsCiAJJnNoYXJwc2xfcm9tX2RldmljZSwKQEAgLTY5NSw2ICs3NzEsNyBAQAogCXNwaXR6X2luaXRfc3BpKCk7CiAKIAlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhkZXZpY2VzLCBBUlJBWV9TSVpFKGRldmljZXMpKTsKKwlzcGl0el9tY2lfcGxhdGZvcm1fZGF0YS5kZXRlY3RfZGVsYXkgPSBtc2Vjc190b19qaWZmaWVzKDI1MCk7CiAJcHhhX3NldF9tY2lfaW5mbygmc3BpdHpfbWNpX3BsYXRmb3JtX2RhdGEpOwogCXB4YV9zZXRfb2hjaV9pbmZvKCZzcGl0el9vaGNpX3BsYXRmb3JtX2RhdGEpOwogCXB4YV9zZXRfZmljcF9pbmZvKCZzcGl0el9maWNwX3BsYXRmb3JtX2RhdGEpOwpAQCAtNzA1LDYgKzc4Miw4IEBACiAjaWYgZGVmaW5lZChDT05GSUdfTUFDSF9TUElUWikgfHwgZGVmaW5lZChDT05GSUdfTUFDSF9CT1JaT0kpCiBzdGF0aWMgdm9pZCBfX2luaXQgc3BpdHpfaW5pdCh2b2lkKQogeworCXNwaXR6X2ZpY3BfcGxhdGZvcm1fZGF0YS5ncGlvX3B3ZG93biA9IFNQSVRaX0dQSU9fSVJfT047CisKIAlwbGF0Zm9ybV9zY29vcF9jb25maWcgPSAmc3BpdHpfcGNtY2lhX2NvbmZpZzsKIAogCWNvbW1vbl9pbml0KCk7CkBAIC03NDcsNyArODI2LDcgQEAKIAogc3RhdGljIHZvaWQgX19pbml0IGFraXRhX2luaXQodm9pZCkKIHsKLQlzcGl0el9maWNwX3BsYXRmb3JtX2RhdGEudHJhbnNjZWl2ZXJfbW9kZSA9IGFraXRhX2lyZGFfdHJhbnNjZWl2ZXJfbW9kZTsKKwlzcGl0el9maWNwX3BsYXRmb3JtX2RhdGEuZ3Bpb19wd2Rvd24gPSBBS0lUQV9HUElPX0lSX09OOwogCiAJc2hhcnBzbF9uYW5kX3BsYXRmb3JtX2RhdGEuYmFkYmxvY2tfcGF0dGVybiA9ICZzaGFycHNsX2FraXRhX2JidDsKIAlzaGFycHNsX25hbmRfcGxhdGZvcm1fZGF0YS5lY2NfbGF5b3V0ID0gJmFraXRhX29vYmluZm87CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS90b3NhLmMgYi9hcmNoL2FybS9tYWNoLXB4YS90b3NhLmMKaW5kZXggMTE3YWQ1OS4uZTgxYTUyNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvdG9zYS5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3Rvc2EuYwpAQCAtMjQ3LDQ5ICsyNDcsMTAgQEAKIC8qCiAgKiBNTUMvU0QgRGV2aWNlCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgcHhhbWNpX3BsYXRmb3JtX2RhdGEgdG9zYV9tY2lfcGxhdGZvcm1fZGF0YTsKLQogc3RhdGljIGludCB0b3NhX21jaV9pbml0KHN0cnVjdCBkZXZpY2UgKmRldiwgaXJxX2hhbmRsZXJfdCB0b3NhX2RldGVjdF9pbnQsIHZvaWQgKmRhdGEpCiB7CiAJaW50IGVycjsKIAotCXRvc2FfbWNpX3BsYXRmb3JtX2RhdGEuZGV0ZWN0X2RlbGF5ID0gbXNlY3NfdG9famlmZmllcygyNTApOwotCi0JZXJyID0gZ3Bpb19yZXF1ZXN0KFRPU0FfR1BJT19uU0RfREVURUNULCAiTU1DL1NEIGNhcmQgZGV0ZWN0Iik7Ci0JaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgInRvc2FfbWNpX2luaXQ6IGNhbid0IHJlcXVlc3QgblNEX0RFVEVDVCBncGlvXG4iKTsKLQkJZ290byBlcnJfZ3Bpb19kZXRlY3Q7Ci0JfQotCWVyciA9IGdwaW9fZGlyZWN0aW9uX2lucHV0KFRPU0FfR1BJT19uU0RfREVURUNUKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycl9ncGlvX2RldGVjdF9kaXI7Ci0KLQllcnIgPSByZXF1ZXN0X2lycShUT1NBX0lSUV9HUElPX25TRF9ERVRFQ1QsIHRvc2FfZGV0ZWN0X2ludCwKLQkJCSAgSVJRRl9ESVNBQkxFRCB8IElSUUZfVFJJR0dFUl9SSVNJTkcgfCBJUlFGX1RSSUdHRVJfRkFMTElORywKLQkJCQkiTU1DL1NEIGNhcmQgZGV0ZWN0IiwgZGF0YSk7Ci0JaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgInRvc2FfbWNpX2luaXQ6IE1NQy9TRDogY2FuJ3QgcmVxdWVzdCBNTUMgY2FyZCBkZXRlY3QgSVJRXG4iKTsKLQkJZ290byBlcnJfaXJxOwotCX0KLQotCWVyciA9IGdwaW9fcmVxdWVzdChUT1NBX0dQSU9fU0RfV1AsICJTRCBXcml0ZSBQcm90ZWN0Iik7Ci0JaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgInRvc2FfbWNpX2luaXQ6IGNhbid0IHJlcXVlc3QgU0RfV1AgZ3Bpb1xuIik7Ci0JCWdvdG8gZXJyX2dwaW9fd3A7Ci0JfQotCWVyciA9IGdwaW9fZGlyZWN0aW9uX2lucHV0KFRPU0FfR1BJT19TRF9XUCk7Ci0JaWYgKGVycikKLQkJZ290byBlcnJfZ3Bpb193cF9kaXI7Ci0KLQllcnIgPSBncGlvX3JlcXVlc3QoVE9TQV9HUElPX1BXUl9PTiwgIlNEIFBvd2VyIik7Ci0JaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgInRvc2FfbWNpX2luaXQ6IGNhbid0IHJlcXVlc3QgU0RfUFdSIGdwaW9cbiIpOwotCQlnb3RvIGVycl9ncGlvX3B3cjsKLQl9Ci0JZXJyID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KFRPU0FfR1BJT19QV1JfT04sIDApOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyX2dwaW9fcHdyX2RpcjsKLQogCWVyciA9IGdwaW9fcmVxdWVzdChUT1NBX0dQSU9fblNEX0lOVCwgIlNEIEludCIpOwogCWlmIChlcnIpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJ0b3NhX21jaV9pbml0OiBjYW4ndCByZXF1ZXN0IFNEX1BXUiBncGlvXG4iKTsKQEAgLTMwNCw1MSArMjY1LDIxIEBACiBlcnJfZ3Bpb19pbnRfZGlyOgogCWdwaW9fZnJlZShUT1NBX0dQSU9fblNEX0lOVCk7CiBlcnJfZ3Bpb19pbnQ6Ci1lcnJfZ3Bpb19wd3JfZGlyOgotCWdwaW9fZnJlZShUT1NBX0dQSU9fUFdSX09OKTsKLWVycl9ncGlvX3B3cjoKLWVycl9ncGlvX3dwX2RpcjoKLQlncGlvX2ZyZWUoVE9TQV9HUElPX1NEX1dQKTsKLWVycl9ncGlvX3dwOgotCWZyZWVfaXJxKFRPU0FfSVJRX0dQSU9fblNEX0RFVEVDVCwgZGF0YSk7Ci1lcnJfaXJxOgotZXJyX2dwaW9fZGV0ZWN0X2RpcjoKLQlncGlvX2ZyZWUoVE9TQV9HUElPX25TRF9ERVRFQ1QpOwotZXJyX2dwaW9fZGV0ZWN0OgogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyB2b2lkIHRvc2FfbWNpX3NldHBvd2VyKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHZkZCkKLXsKLQlzdHJ1Y3QgcHhhbWNpX3BsYXRmb3JtX2RhdGEqIHBfZCA9IGRldi0+cGxhdGZvcm1fZGF0YTsKLQotCWlmICgoIDEgPDwgdmRkKSAmIHBfZC0+b2NyX21hc2spIHsKLQkJZ3Bpb19zZXRfdmFsdWUoVE9TQV9HUElPX1BXUl9PTiwgMSk7Ci0JfSBlbHNlIHsKLQkJZ3Bpb19zZXRfdmFsdWUoVE9TQV9HUElPX1BXUl9PTiwgMCk7Ci0JfQotfQotCi1zdGF0aWMgaW50IHRvc2FfbWNpX2dldF9ybyhzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0JcmV0dXJuIGdwaW9fZ2V0X3ZhbHVlKFRPU0FfR1BJT19TRF9XUCk7Ci19Ci0KIHN0YXRpYyB2b2lkIHRvc2FfbWNpX2V4aXQoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQogewogCWdwaW9fZnJlZShUT1NBX0dQSU9fblNEX0lOVCk7Ci0JZ3Bpb19mcmVlKFRPU0FfR1BJT19QV1JfT04pOwotCWdwaW9fZnJlZShUT1NBX0dQSU9fU0RfV1ApOwotCWZyZWVfaXJxKFRPU0FfSVJRX0dQSU9fblNEX0RFVEVDVCwgZGF0YSk7Ci0JZ3Bpb19mcmVlKFRPU0FfR1BJT19uU0RfREVURUNUKTsKIH0KIAogc3RhdGljIHN0cnVjdCBweGFtY2lfcGxhdGZvcm1fZGF0YSB0b3NhX21jaV9wbGF0Zm9ybV9kYXRhID0gewotCS5vY3JfbWFzayAgICAgICA9IE1NQ19WRERfMzJfMzN8TU1DX1ZERF8zM18zNCwKLQkuaW5pdCAgICAgICAgICAgPSB0b3NhX21jaV9pbml0LAotCS5nZXRfcm8JCT0gdG9zYV9tY2lfZ2V0X3JvLAotCS5zZXRwb3dlciAgICAgICA9IHRvc2FfbWNpX3NldHBvd2VyLAotCS5leGl0ICAgICAgICAgICA9IHRvc2FfbWNpX2V4aXQsCisJLm9jcl9tYXNrICAgICAgIAk9IE1NQ19WRERfMzJfMzN8TU1DX1ZERF8zM18zNCwKKwkuaW5pdCAgICAgICAgICAgCT0gdG9zYV9tY2lfaW5pdCwKKwkuZXhpdCAgICAgICAgICAgCT0gdG9zYV9tY2lfZXhpdCwKKwkuZ3Bpb19jYXJkX2RldGVjdAk9IFRPU0FfR1BJT19uU0RfREVURUNULAorCS5ncGlvX2NhcmRfcm8JCT0gVE9TQV9HUElPX1NEX1dQLAorCS5ncGlvX3Bvd2VyCQk9IFRPU0FfR1BJT19QV1JfT04sCiB9OwogCiAvKgpAQCAtNDA2LDEwICszMzcsMTEgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBweGFmaWNwX3BsYXRmb3JtX2RhdGEgdG9zYV9maWNwX3BsYXRmb3JtX2RhdGEgPSB7Ci0JLnRyYW5zY2VpdmVyX2NhcCAgPSBJUl9TSVJNT0RFIHwgSVJfT0ZGLAotCS50cmFuc2NlaXZlcl9tb2RlID0gdG9zYV9pcmRhX3RyYW5zY2VpdmVyX21vZGUsCi0JLnN0YXJ0dXAgPSB0b3NhX2lyZGFfc3RhcnR1cCwKLQkuc2h1dGRvd24gPSB0b3NhX2lyZGFfc2h1dGRvd24sCisJLmdwaW9fcHdkb3duCQk9IC0xLAorCS50cmFuc2NlaXZlcl9jYXAJPSBJUl9TSVJNT0RFIHwgSVJfT0ZGLAorCS50cmFuc2NlaXZlcl9tb2RlCT0gdG9zYV9pcmRhX3RyYW5zY2VpdmVyX21vZGUsCisJLnN0YXJ0dXAJCT0gdG9zYV9pcmRhX3N0YXJ0dXAsCisJLnNodXRkb3duCQk9IHRvc2FfaXJkYV9zaHV0ZG93biwKIH07CiAKIC8qCkBAIC05MTAsNiArODQyLDcgQEAKIAlkdW1teSA9IGdwaW9jaGlwX3Jlc2VydmUoVE9TQV9TQ09PUF9KQ19HUElPX0JBU0UsIDEyKTsKIAlkdW1teSA9IGdwaW9jaGlwX3Jlc2VydmUoVE9TQV9UQzYzOTNYQl9HUElPX0JBU0UsIDE2KTsKIAorCXRvc2FfbWNpX3BsYXRmb3JtX2RhdGEuZGV0ZWN0X2RlbGF5ID0gbXNlY3NfdG9famlmZmllcygyNTApOwogCXB4YV9zZXRfbWNpX2luZm8oJnRvc2FfbWNpX3BsYXRmb3JtX2RhdGEpOwogCXB4YV9zZXRfdWRjX2luZm8oJnVkY19pbmZvKTsKIAlweGFfc2V0X2ZpY3BfaW5mbygmdG9zYV9maWNwX3BsYXRmb3JtX2RhdGEpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvdHJlbzY4MC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvdHJlbzY4MC5jCmluZGV4IDc1M2VjNGQuLmZlMDg1MDcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3RyZW82ODAuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS90cmVvNjgwLmMKQEAgLTE1Myw4NyArMTUzLDExIEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBTRC9NTUMgY2FyZCBjb250cm9sbGVyCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIGludCB0cmVvNjgwX21jaV9pbml0KHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJaXJxX2hhbmRsZXJfdCB0cmVvNjgwX2RldGVjdF9pbnQsIHZvaWQgKmRhdGEpCi17Ci0JaW50IGVyciA9IDA7Ci0KLQkvKiBTZXR1cCBhbiBpbnRlcnJ1cHQgZm9yIGRldGVjdGluZyBjYXJkIGluc2VydC9yZW1vdmUgZXZlbnRzICovCi0JZXJyID0gZ3Bpb19yZXF1ZXN0KEdQSU9fTlJfVFJFTzY4MF9TRF9ERVRFQ1RfTiwgIlNEIElSUSIpOwotCi0JaWYgKGVycikKLQkJZ290byBlcnI7Ci0KLQllcnIgPSBncGlvX2RpcmVjdGlvbl9pbnB1dChHUElPX05SX1RSRU82ODBfU0RfREVURUNUX04pOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyMjsKLQotCWVyciA9IHJlcXVlc3RfaXJxKGdwaW9fdG9faXJxKEdQSU9fTlJfVFJFTzY4MF9TRF9ERVRFQ1RfTiksCi0JCQl0cmVvNjgwX2RldGVjdF9pbnQsIElSUUZfRElTQUJMRUQgfCBJUlFGX1NBTVBMRV9SQU5ET00gfAotCQkJSVJRRl9UUklHR0VSX0ZBTExJTkcgfCBJUlFGX1RSSUdHRVJfUklTSU5HLAotCQkJIlNEL01NQyBjYXJkIGRldGVjdCIsIGRhdGEpOwotCi0JaWYgKGVycikgewotCQlkZXZfZXJyKGRldiwgIiVzOiBjYW5ub3QgcmVxdWVzdCBTRC9NTUMgY2FyZCBkZXRlY3QgSVJRXG4iLAotCQkJICAgICBfX2Z1bmNfXyk7Ci0JCWdvdG8gZXJyMjsKLQl9Ci0KLQllcnIgPSBncGlvX3JlcXVlc3QoR1BJT19OUl9UUkVPNjgwX1NEX1BPV0VSLCAiU0RfUE9XRVIiKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycjM7Ci0KLQllcnIgPSBncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19OUl9UUkVPNjgwX1NEX1BPV0VSLCAxKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycjQ7Ci0KLQllcnIgPSBncGlvX3JlcXVlc3QoR1BJT19OUl9UUkVPNjgwX1NEX1JFQURPTkxZLCAiU0RfUkVBRE9OTFkiKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycjQ7Ci0KLQllcnIgPSBncGlvX2RpcmVjdGlvbl9pbnB1dChHUElPX05SX1RSRU82ODBfU0RfUkVBRE9OTFkpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyNTsKLQotCXJldHVybiAwOwotCi1lcnI1OgotCWdwaW9fZnJlZShHUElPX05SX1RSRU82ODBfU0RfUkVBRE9OTFkpOwotZXJyNDoKLQlncGlvX2ZyZWUoR1BJT19OUl9UUkVPNjgwX1NEX1BPV0VSKTsKLWVycjM6Ci0JZnJlZV9pcnEoZ3Bpb190b19pcnEoR1BJT19OUl9UUkVPNjgwX1NEX0RFVEVDVF9OKSwgZGF0YSk7Ci1lcnIyOgotCWdwaW9fZnJlZShHUElPX05SX1RSRU82ODBfU0RfREVURUNUX04pOwotZXJyOgotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyB2b2lkIHRyZW82ODBfbWNpX2V4aXQoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQotewotCWdwaW9fZnJlZShHUElPX05SX1RSRU82ODBfU0RfUkVBRE9OTFkpOwotCWdwaW9fZnJlZShHUElPX05SX1RSRU82ODBfU0RfUE9XRVIpOwotCWZyZWVfaXJxKGdwaW9fdG9faXJxKEdQSU9fTlJfVFJFTzY4MF9TRF9ERVRFQ1RfTiksIGRhdGEpOwotCWdwaW9fZnJlZShHUElPX05SX1RSRU82ODBfU0RfREVURUNUX04pOwotfQotCi1zdGF0aWMgdm9pZCB0cmVvNjgwX21jaV9wb3dlcihzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCB2ZGQpCi17Ci0Jc3RydWN0IHB4YW1jaV9wbGF0Zm9ybV9kYXRhICpwX2QgPSBkZXYtPnBsYXRmb3JtX2RhdGE7Ci0JZ3Bpb19zZXRfdmFsdWUoR1BJT19OUl9UUkVPNjgwX1NEX1BPV0VSLCBwX2QtPm9jcl9tYXNrICYgKDEgPDwgdmRkKSk7Ci19Ci0KLXN0YXRpYyBpbnQgdHJlbzY4MF9tY2lfZ2V0X3JvKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlyZXR1cm4gZ3Bpb19nZXRfdmFsdWUoR1BJT19OUl9UUkVPNjgwX1NEX1JFQURPTkxZKTsKLX0KLQogc3RhdGljIHN0cnVjdCBweGFtY2lfcGxhdGZvcm1fZGF0YSB0cmVvNjgwX21jaV9wbGF0Zm9ybV9kYXRhID0gewotCS5vY3JfbWFzawk9IE1NQ19WRERfMzJfMzMgfCBNTUNfVkREXzMzXzM0LAotCS5zZXRwb3dlcgk9IHRyZW82ODBfbWNpX3Bvd2VyLAotCS5nZXRfcm8JCT0gdHJlbzY4MF9tY2lfZ2V0X3JvLAotCS5pbml0IAkJPSB0cmVvNjgwX21jaV9pbml0LAotCS5leGl0CQk9IHRyZW82ODBfbWNpX2V4aXQsCisJLm9jcl9tYXNrCQk9IE1NQ19WRERfMzJfMzMgfCBNTUNfVkREXzMzXzM0LAorCS5ncGlvX2NhcmRfZGV0ZWN0CT0gR1BJT19OUl9UUkVPNjgwX1NEX0RFVEVDVF9OLAorCS5ncGlvX2NhcmRfcm8JCT0gR1BJT19OUl9UUkVPNjgwX1NEX1JFQURPTkxZLAorCS5ncGlvX3Bvd2VyCQk9IEdQSU9fTlJfVFJFTzY4MF9TRF9QT1dFUiwKIH07CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTMzMCwxNiArMjU0LDkgQEAKIAlyZXQgPSBncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19OUl9UUkVPNjgwX0JMX1BPV0VSLCAwKTsKIAlpZiAocmV0KQogCQlnb3RvIGVycjI7Ci0JcmV0ID0gZ3Bpb19yZXF1ZXN0KEdQSU9fTlJfVFJFTzY4MF9MQ0RfUE9XRVIsICJMQ0QgUE9XRVIiKTsKLQlpZiAocmV0KQotCQlnb3RvIGVycjI7Ci0JcmV0ID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fTlJfVFJFTzY4MF9MQ0RfUE9XRVIsIDApOwotCWlmIChyZXQpCi0JCWdvdG8gZXJyMzsKIAogCXJldHVybiAwOwotZXJyMzoKLQlncGlvX2ZyZWUoR1BJT19OUl9UUkVPNjgwX0xDRF9QT1dFUik7CisKIGVycjI6CiAJZ3Bpb19mcmVlKEdQSU9fTlJfVFJFTzY4MF9CTF9QT1dFUik7CiBlcnI6CkBAIC0zNTUsNyArMjcyLDYgQEAKIHN0YXRpYyB2b2lkIHRyZW82ODBfYmFja2xpZ2h0X2V4aXQoc3RydWN0IGRldmljZSAqZGV2KQogewogCWdwaW9fZnJlZShHUElPX05SX1RSRU82ODBfQkxfUE9XRVIpOwotCWdwaW9fZnJlZShHUElPX05SX1RSRU82ODBfTENEX1BPV0VSKTsKIH0KIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9wd21fYmFja2xpZ2h0X2RhdGEgdHJlbzY4MF9iYWNrbGlnaHRfZGF0YSA9IHsKQEAgLTM3OSw0NCArMjk1LDkgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIElyREEKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgdm9pZCB0cmVvNjgwX3RyYW5zY2VpdmVyX21vZGUoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgbW9kZSkKLXsKLQlncGlvX3NldF92YWx1ZShHUElPX05SX1RSRU82ODBfSVJfRU4sIG1vZGUgJiBJUl9PRkYpOwotCXB4YTJ4eF90cmFuc2NlaXZlcl9tb2RlKGRldiwgbW9kZSk7Ci19Ci0KLXN0YXRpYyBpbnQgdHJlbzY4MF9pcmRhX3N0YXJ0dXAoc3RydWN0IGRldmljZSAqZGV2KQotewotCWludCBlcnI7Ci0KLQllcnIgPSBncGlvX3JlcXVlc3QoR1BJT19OUl9UUkVPNjgwX0lSX0VOLCAiSXIgcG9ydCBkaXNhYmxlIik7Ci0JaWYgKGVycikKLQkJZ290byBlcnIxOwotCi0JZXJyID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fTlJfVFJFTzY4MF9JUl9FTiwgMSk7Ci0JaWYgKGVycikKLQkJZ290byBlcnIyOwotCi0JcmV0dXJuIDA7Ci0KLWVycjI6Ci0JZGV2X2VycihkZXYsICJ0cmVvNjgwX2lyZGE6IGNhbm5vdCBjaGFuZ2UgSVIgZ3BpbyBkaXJlY3Rpb25cbiIpOwotCWdwaW9fZnJlZShHUElPX05SX1RSRU82ODBfSVJfRU4pOwotZXJyMToKLQlkZXZfZXJyKGRldiwgInRyZW82ODBfaXJkYTogY2Fubm90IGFsbG9jYXRlIElSIGdwaW9cbiIpOwotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyB2b2lkIHRyZW82ODBfaXJkYV9zaHV0ZG93bihzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0JZ3Bpb19mcmVlKEdQSU9fTlJfVFJFTzY4MF9JUl9FTik7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgcHhhZmljcF9wbGF0Zm9ybV9kYXRhIHRyZW82ODBfZmljcF9pbmZvID0gewotCS50cmFuc2NlaXZlcl9jYXAgID0gSVJfRklSTU9ERSB8IElSX1NJUk1PREUgfCBJUl9PRkYsCi0JLnN0YXJ0dXAgICAgICAgICAgPSB0cmVvNjgwX2lyZGFfc3RhcnR1cCwKLQkuc2h1dGRvd24gICAgICAgICA9IHRyZW82ODBfaXJkYV9zaHV0ZG93biwKLQkudHJhbnNjZWl2ZXJfbW9kZSA9IHRyZW82ODBfdHJhbnNjZWl2ZXJfbW9kZSwKKwkuZ3Bpb19wd2Rvd24JCT0gR1BJT19OUl9UUkVPNjgwX0lSX0VOLAorCS50cmFuc2NlaXZlcl9jYXAJPSBJUl9TSVJNT0RFIHwgSVJfT0ZGLAogfTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtNTQ2LDYgKzQyNywxMSBAQAogfSwKIH07CiAKK3N0YXRpYyB2b2lkIHRyZW82ODBfbGNkX3Bvd2VyKGludCBvbiwgc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICppbmZvKQoreworCWdwaW9fc2V0X3ZhbHVlKEdQSU9fTlJfVFJFTzY4MF9CTF9QT1dFUiwgb24pOworfQorCiBzdGF0aWMgc3RydWN0IHB4YWZiX21hY2hfaW5mbyB0cmVvNjgwX2xjZF9zY3JlZW4gPSB7CiAJLm1vZGVzCQk9IHRyZW82ODBfbGNkX21vZGVzLAogCS5udW1fbW9kZXMJPSBBUlJBWV9TSVpFKHRyZW82ODBfbGNkX21vZGVzKSwKQEAgLTU4NSwxMSArNDcxLDMyIEBACiAJfQogfQogCitzdGF0aWMgdm9pZCBfX2luaXQgdHJlbzY4MF9sY2RfcG93ZXJfaW5pdCh2b2lkKQoreworCWludCByZXQ7CisKKwlyZXQgPSBncGlvX3JlcXVlc3QoR1BJT19OUl9UUkVPNjgwX0xDRF9QT1dFUiwgIkxDRCBQT1dFUiIpOworCWlmIChyZXQpIHsKKwkJcHJfZXJyKCJUcmVvNjgwOiBMQ0QgcG93ZXIgR1BJTyByZXF1ZXN0IGZhaWxlZCFcbiIpOworCQlyZXR1cm47CisJfQorCisJcmV0ID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fTlJfVFJFTzY4MF9MQ0RfUE9XRVIsIDApOworCWlmIChyZXQpIHsKKwkJcHJfZXJyKCJUcmVvNjgwOiBzZXR0aW5nIExDRCBwb3dlciBHUElPIGRpcmVjdGlvbiBmYWlsZWQhXG4iKTsKKwkJZ3Bpb19mcmVlKEdQSU9fTlJfVFJFTzY4MF9MQ0RfUE9XRVIpOworCQlyZXR1cm47CisJfQorCisJdHJlbzY4MF9sY2Rfc2NyZWVuLnB4YWZiX2xjZF9wb3dlciA9IHRyZW82ODBfbGNkX3Bvd2VyOworfQorCiBzdGF0aWMgdm9pZCBfX2luaXQgdHJlbzY4MF9pbml0KHZvaWQpCiB7CiAJdHJlbzY4MF9wbV9pbml0KCk7CiAJcHhhMnh4X21mcF9jb25maWcoQVJSQVlfQU5EX1NJWkUodHJlbzY4MF9waW5fY29uZmlnKSk7CiAJcHhhX3NldF9rZXlwYWRfaW5mbygmdHJlbzY4MF9rZXlwYWRfcGxhdGZvcm1fZGF0YSk7CisJdHJlbzY4MF9sY2RfcG93ZXJfaW5pdCgpOwogCXNldF9weGFfZmJfaW5mbygmdHJlbzY4MF9sY2Rfc2NyZWVuKTsKIAlweGFfc2V0X21jaV9pbmZvKCZ0cmVvNjgwX21jaV9wbGF0Zm9ybV9kYXRhKTsKIAl0cmVvNjgwX3VkY19pbml0KCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS90cml6ZXBzNC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvdHJpemVwczQuYwppbmRleCA4MjVmNTQwLi4zOTgxZTAzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS90cml6ZXBzNC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3RyaXplcHM0LmMKQEAgLTM2Nyw2ICszNjcsOSBAQAogCS5leGl0CQk9IHRyaXplcHM0X21jaV9leGl0LAogCS5nZXRfcm8JCT0gTlVMTCwJLyogd3JpdGUtcHJvdGVjdGlvbiBub3Qgc3VwcG9ydGVkICovCiAJLnNldHBvd2VyIAk9IE5VTEwsCS8qIHBvd2VyLXN3aXRjaGluZyBub3Qgc3VwcG9ydGVkICovCisJLmdwaW9fY2FyZF9kZXRlY3QgPSAtMSwKKwkuZ3Bpb19jYXJkX3JvCT0gLTEsCisJLmdwaW9fcG93ZXIJPSAtMSwKIH07CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC00MTIsNiArNDE1LDcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBweGFmaWNwX3BsYXRmb3JtX2RhdGEgdHJpemVwczRfZmljcF9wbGF0Zm9ybV9kYXRhID0geworCS5ncGlvX3B3ZG93bgkJPSAtMSwKIAkudHJhbnNjZWl2ZXJfY2FwCT0gSVJfU0lSTU9ERSB8IElSX0ZJUk1PREUgfCBJUl9PRkYsCiAJLnRyYW5zY2VpdmVyX21vZGUJPSB0cml6ZXBzNF9pcmRhX3RyYW5zY2VpdmVyX21vZGUsCiAJLnN0YXJ0dXAJCT0gdHJpemVwczRfaXJkYV9zdGFydHVwLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEveGNlcC5jIGIvYXJjaC9hcm0vbWFjaC1weGEveGNlcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmZDc5Y2IKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS94Y2VwLmMKQEAgLTAsMCArMSwxODcgQEAKKy8qICBsaW51eC9hcmNoL2FybS9tYWNoLXB4YS94Y2VwLmMKKyAqCisgKiAgU3VwcG9ydCBmb3IgdGhlIElza3JhdGVsIEVsZWN0cm9uaWNzIFhDRVAgcGxhdGZvcm0gYXMgdXNlZCBpbgorICogIHRoZSBMaWJlcmEgaW5zdHJ1bWVudHMgZnJvbSBJbnN0cnVtZW50YXRpb24gVGVjaG5vbG9naWVzLgorICoKKyAqICBBdXRob3I6ICAgICBBbGVzIEJhcmRvcmZlciA8YWxlc0BpLXRlY2guc2k+CisgKiAgQ29udHJpYnV0aW9ucyBieTogQWJib3R0LCBNRyAoTWljaGFlbCkgPG1pY2hhZWwuYWJib3R0QGRpYW1vbmQuYWMudWs+CisgKiAgQ29udHJpYnV0aW9ucyBieTogTWF0ZWogS2VuZGEgPG1hdGVqLmtlbmRhQGktdGVjaC5zaT4KKyAqICBDcmVhdGVkOiAgICBKdW5lIDIwMDYKKyAqICBDb3B5cmlnaHQ6ICAoQykgMjAwNi0yMDA5IEluc3RydW1lbnRhdGlvbiBUZWNobm9sb2dpZXMKKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9zbWM5MXguaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisKKyNpbmNsdWRlIDxwbGF0L2kyYy5oPgorCisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPG1hY2gvcHhhMnh4LXJlZ3MuaD4KKyNpbmNsdWRlIDxtYWNoL21mcC1weGEyNXguaD4KKworI2luY2x1ZGUgImdlbmVyaWMuaCIKKworI2RlZmluZSBYQ0VQX0VUSF9QSFlTCQkoUFhBX0NTM19QSFlTICsgMHgwMDAwMDMwMCkKKyNkZWZpbmUgWENFUF9FVEhfUEhZU19FTkQJKFBYQV9DUzNfUEhZUyArIDB4MDAwZmZmZmYpCisjZGVmaW5lIFhDRVBfRVRIX0FUVFIJCShQWEFfQ1MzX1BIWVMgKyAweDAyMDAwMDAwKQorI2RlZmluZSBYQ0VQX0VUSF9BVFRSX0VORAkoUFhBX0NTM19QSFlTICsgMHgwMjBmZmZmZikKKyNkZWZpbmUgWENFUF9FVEhfSVJRCQlJUlFfR1BJTzAKKworLyogIFhDRVAgQ1BMRCBiYXNlICovCisjZGVmaW5lIFhDRVBfQ1BMRF9CQVNFCQkweGYwMDAwMDAwCisKKworLyogRmxhc2ggcGFydGl0aW9ucy4gKi8KKworc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIHhjZXBfcGFydGl0aW9uc1tdID0geworCXsKKwkJLm5hbWUgPQkJIkJvb3Rsb2FkZXIiLAorCQkuc2l6ZSA9CQkweDAwMDQwMDAwLAorCQkub2Zmc2V0ID0JMCwKKwkJLm1hc2tfZmxhZ3MgPQlNVERfV1JJVEVBQkxFCisJfSwgeworCQkubmFtZSA9CQkiQm9vdGxvYWRlciBFTlYiLAorCQkuc2l6ZSA9CQkweDAwMDQwMDAwLAorCQkub2Zmc2V0ID0JMHgwMDA0MDAwMCwKKwkJLm1hc2tfZmxhZ3MgPQlNVERfV1JJVEVBQkxFCisJfSwgeworCQkubmFtZSA9CQkiS2VybmVsIiwKKwkJLnNpemUgPQkJMHgwMDEwMDAwMCwKKwkJLm9mZnNldCA9CTB4MDAwODAwMDAsCisJfSwgeworCQkubmFtZSA9CQkiUmVzY3VlIGZzIiwKKwkJLnNpemUgPQkJMHgwMDI4MDAwMCwKKwkJLm9mZnNldCA9CTB4MDAxODAwMDAsCisJfSwgeworCQkubmFtZSA9CQkiRmlsZXN5c3RlbSIsCisJCS5zaXplID0JCU1URFBBUlRfU0laX0ZVTEwsCisJCS5vZmZzZXQgPQkweDAwNDAwMDAwCisJfQorfTsKKworc3RhdGljIHN0cnVjdCBwaHlzbWFwX2ZsYXNoX2RhdGEgeGNlcF9mbGFzaF9kYXRhW10gPSB7CisJeworCQkud2lkdGgJCT0gNCwJCS8qIGJhbmt3aWR0aCBpbiBieXRlcyAqLworCQkucGFydHMJCT0geGNlcF9wYXJ0aXRpb25zLAorCQkubnJfcGFydHMJPSBBUlJBWV9TSVpFKHhjZXBfcGFydGl0aW9ucykKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGZsYXNoX3Jlc291cmNlID0geworCS5zdGFydAk9IFBYQV9DUzBfUEhZUywKKwkuZW5kCT0gUFhBX0NTMF9QSFlTICsgU1pfMzJNIC0gMSwKKwkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGZsYXNoX2RldmljZSA9IHsKKwkubmFtZQk9ICJwaHlzbWFwLWZsYXNoIiwKKwkuaWQJPSAwLAorCS5kZXYgCT0geworCQkucGxhdGZvcm1fZGF0YSA9IHhjZXBfZmxhc2hfZGF0YSwKKwl9LAorCS5yZXNvdXJjZSA9ICZmbGFzaF9yZXNvdXJjZSwKKwkubnVtX3Jlc291cmNlcyA9IDEsCit9OworCisKKworLyogU01DIExBTjkxQzExMSBuZXR3b3JrIGNvbnRyb2xsZXIuICovCisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc21jOTF4X3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLm5hbWUJPSAic21jOTF4LXJlZ3MiLAorCQkuc3RhcnQJPSBYQ0VQX0VUSF9QSFlTLAorCQkuZW5kCT0gWENFUF9FVEhfUEhZU19FTkQsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJPSBYQ0VQX0VUSF9JUlEsCisJCS5lbmQJPSBYQ0VQX0VUSF9JUlEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCisJWzJdID0geworCQkubmFtZQk9ICJzbWM5MXgtYXR0cmliIiwKKwkJLnN0YXJ0CT0gWENFUF9FVEhfQVRUUiwKKwkJLmVuZAk9IFhDRVBfRVRIX0FUVFJfRU5ELAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBzbWM5MXhfcGxhdGRhdGEgeGNlcF9zbWM5MXhfaW5mbyA9IHsKKwkuZmxhZ3MJPSBTTUM5MVhfVVNFXzMyQklUIHwgU01DOTFYX05PV0FJVCB8IFNNQzkxWF9VU0VfRE1BLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc21jOTF4X2RldmljZSA9IHsKKwkubmFtZQkJPSAic21jOTF4IiwKKwkuaWQJCT0gLTEsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHNtYzkxeF9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IHNtYzkxeF9yZXNvdXJjZXMsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJnhjZXBfc21jOTF4X2luZm8sCisJfSwKK307CisKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZXNbXSBfX2luaXRkYXRhID0geworCSZmbGFzaF9kZXZpY2UsCisJJnNtYzkxeF9kZXZpY2UsCit9OworCisKKy8qIFdlIGhhdmUgdG8gc3RhdGUgdGhhdCB0aGVyZSBhcmUgSFdNT04gZGV2aWNlcyBvbiB0aGUgSTJDIGJ1cyBvbiBYQ0VQLgorICogRHJpdmVycyBmb3IgSFdNT04gdmVyaWZ5IGNhcGFiaWxpdGllcyBvZiB0aGUgYWRhcHRlciB3aGVuIGxvYWRpbmcgYW5kCisgKiByZWZ1c2UgdG8gYXR0YWNoIGlmIHRoZSBhZGFwdGVyIGRvZXNuJ3Qgc3VwcG9ydCBIV01PTiBjbGFzcyBvZiBkZXZpY2VzLgorICogU2VlIGFsc28gRG9jdW1lbnRhdGlvbi9pMmMvcG9ydGluZy1jbGllbnRzLiAqLworc3RhdGljIHN0cnVjdCBpMmNfcHhhX3BsYXRmb3JtX2RhdGEgeGNlcF9pMmNfcGxhdGZvcm1fZGF0YSAgPSB7CisJLmNsYXNzID0gSTJDX0NMQVNTX0hXTU9OCit9OworCisKK3N0YXRpYyBtZnBfY2ZnX3QgeGNlcF9waW5fY29uZmlnW10gX19pbml0ZGF0YSA9IHsKKwlHUElPNzlfbkNTXzMsCS8qIFNNQyA5MUMxMTEgY2hpcCBzZWxlY3QuICovCisJR1BJTzgwX25DU180LAkvKiBDUExEIGNoaXAgc2VsZWN0LiAqLworCS8qIFNTUCBjb21tdW5pY2F0aW9uIHRvIE1TUDQzMCAqLworCUdQSU8yM19TU1AxX1NDTEssCisJR1BJTzI0X1NTUDFfU0ZSTSwKKwlHUElPMjVfU1NQMV9UWEQsCisJR1BJTzI2X1NTUDFfUlhELAorCUdQSU8yN19TU1AxX0VYVENMSworfTsKKworc3RhdGljIHZvaWQgX19pbml0IHhjZXBfaW5pdCh2b2lkKQoreworCXB4YTJ4eF9tZnBfY29uZmlnKEFSUkFZX0FORF9TSVpFKHhjZXBfcGluX2NvbmZpZykpOworCisJLyogU2VlIEludGVsIFhTY2FsZSBEZXZlbG9wZXIncyBHdWlkZSBmb3IgZGV0YWlscyAqLworCS8qIFNldCBSREYgYW5kIFJETiB0byBhcHByb3ByaWF0ZSB2YWx1ZXMgKGNoaXAgc2VsZWN0IDMgKHNtYzkxeCkpICovCisJTVNDMSA9IChNU0MxICYgMHhmZmZmKSB8IDB4RDU1NDAwMDA7CisJLyogU2V0IFJERiBhbmQgUkROIHRvIGFwcHJvcHJpYXRlIHZhbHVlcyAoY2hpcCBzZWxlY3QgNSAoZnBnYSkpICovCisJTVNDMiA9IChNU0MyICYgMHhmZmZmKSB8IDB4NzJBMDAwMDA7CisKKwlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhBUlJBWV9BTkRfU0laRShkZXZpY2VzKSk7CisJcHhhX3NldF9pMmNfaW5mbygmeGNlcF9pMmNfcGxhdGZvcm1fZGF0YSk7Cit9CisKK01BQ0hJTkVfU1RBUlQoWENFUCwgIklza3JhdGVsIFhDRVAiKQorCS5waHlzX2lvCT0gMHg0MDAwMDAwMCwKKwkuaW9fcGdfb2Zmc3QJPSAoaW9fcDJ2KDB4NDAwMDAwMDApID4+IDE4KSAmIDB4ZmZmYywKKwkuYm9vdF9wYXJhbXMJPSAweGEwMDAwMTAwLAorCS5pbml0X21hY2hpbmUJPSB4Y2VwX2luaXQsCisJLm1hcF9pbwkJPSBweGFfbWFwX2lvLAorCS5pbml0X2lycQk9IHB4YTI1eF9pbml0X2lycSwKKwkudGltZXIJCT0gJnB4YV90aW1lciwKK01BQ0hJTkVfRU5ECisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3p5bG9uaXRlLmMgYi9hcmNoL2FybS9tYWNoLXB4YS96eWxvbml0ZS5jCmluZGV4IDIxOGQyMDAuLjA5Nzg0ZDMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3p5bG9uaXRlLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvenlsb25pdGUuYwpAQCAtMjkwLDYgKzI5MCw5IEBACiAJLmluaXQgCQk9IHp5bG9uaXRlX21jaV9pbml0LAogCS5leGl0CQk9IHp5bG9uaXRlX21jaV9leGl0LAogCS5nZXRfcm8JCT0genlsb25pdGVfbWNpX3JvLAorCS5ncGlvX2NhcmRfZGV0ZWN0ID0gLTEsCisJLmdwaW9fY2FyZF9ybwk9IC0xLAorCS5ncGlvX3Bvd2VyCT0gLTEsCiB9OwogCiBzdGF0aWMgc3RydWN0IHB4YW1jaV9wbGF0Zm9ybV9kYXRhIHp5bG9uaXRlX21jaTJfcGxhdGZvcm1fZGF0YSA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvY29yZS5jIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9jb3JlLmMKaW5kZXggZGMzNTE5Yy4uYTIwODNiNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9jb3JlLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9jb3JlLmMKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L3Ntc2M5MTF4Lmg+CiAjaW5jbHVkZSA8bGludXgvYXRhX3BsYXRmb3JtLmg+CisjaW5jbHVkZSA8bGludXgvYW1iYS9tbWNpLmg+CiAKICNpbmNsdWRlIDxhc20vY2xrZGV2Lmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgpAQCAtNDQsNyArNDUsNiBAQAogI2luY2x1ZGUgPGFzbS9tYWNoL2ZsYXNoLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvbW1jLmg+CiAKICNpbmNsdWRlIDxhc20vaGFyZHdhcmUvZ2ljLmg+CiAKQEAgLTIzNywxNCArMjM3LDE0IEBACiAJcmV0dXJuIHJlYWRsKFJFQUxWSUVXX1NZU01DSSkgJiBtYXNrOwogfQogCi1zdHJ1Y3QgbW1jX3BsYXRmb3JtX2RhdGEgcmVhbHZpZXdfbW1jMF9wbGF0X2RhdGEgPSB7CitzdHJ1Y3QgbW1jaV9wbGF0Zm9ybV9kYXRhIHJlYWx2aWV3X21tYzBfcGxhdF9kYXRhID0gewogCS5vY3JfbWFzawk9IE1NQ19WRERfMzJfMzN8TU1DX1ZERF8zM18zNCwKIAkuc3RhdHVzCQk9IHJlYWx2aWV3X21tY19zdGF0dXMsCiAJLmdwaW9fd3AJPSAxNywKIAkuZ3Bpb19jZAk9IDE2LAogfTsKIAotc3RydWN0IG1tY19wbGF0Zm9ybV9kYXRhIHJlYWx2aWV3X21tYzFfcGxhdF9kYXRhID0geworc3RydWN0IG1tY2lfcGxhdGZvcm1fZGF0YSByZWFsdmlld19tbWMxX3BsYXRfZGF0YSA9IHsKIAkub2NyX21hc2sJPSBNTUNfVkREXzMyXzMzfE1NQ19WRERfMzNfMzQsCiAJLnN0YXR1cwkJPSByZWFsdmlld19tbWNfc3RhdHVzLAogCS5ncGlvX3dwCT0gMTksCkBAIC0yOTYsMzEgKzI5NiwzMSBAQAogCiBzdGF0aWMgc3RydWN0IGNsa19sb29rdXAgbG9va3Vwc1tdID0gewogCXsJLyogVUFSVDAgKi8KLQkJLmRldl9pZAkJPSAiZGV2OmYxIiwKKwkJLmRldl9pZAkJPSAiZGV2OnVhcnQwIiwKIAkJLmNsawkJPSAmcmVmMjRfY2xrLAogCX0sIHsJLyogVUFSVDEgKi8KLQkJLmRldl9pZAkJPSAiZGV2OmYyIiwKKwkJLmRldl9pZAkJPSAiZGV2OnVhcnQxIiwKIAkJLmNsawkJPSAmcmVmMjRfY2xrLAogCX0sIHsJLyogVUFSVDIgKi8KLQkJLmRldl9pZAkJPSAiZGV2OmYzIiwKKwkJLmRldl9pZAkJPSAiZGV2OnVhcnQyIiwKIAkJLmNsawkJPSAmcmVmMjRfY2xrLAogCX0sIHsJLyogVUFSVDMgKi8KLQkJLmRldl9pZAkJPSAiZnBnYTowOSIsCisJCS5kZXZfaWQJCT0gImZwZ2E6dWFydDMiLAogCQkuY2xrCQk9ICZyZWYyNF9jbGssCiAJfSwgewkvKiBLTUkwICovCi0JCS5kZXZfaWQJCT0gImZwZ2E6MDYiLAorCQkuZGV2X2lkCQk9ICJmcGdhOmttaTAiLAogCQkuY2xrCQk9ICZyZWYyNF9jbGssCiAJfSwgewkvKiBLTUkxICovCi0JCS5kZXZfaWQJCT0gImZwZ2E6MDciLAorCQkuZGV2X2lkCQk9ICJmcGdhOmttaTEiLAogCQkuY2xrCQk9ICZyZWYyNF9jbGssCiAJfSwgewkvKiBNTUMwICovCi0JCS5kZXZfaWQJCT0gImZwZ2E6MDUiLAorCQkuZGV2X2lkCQk9ICJmcGdhOm1tYzAiLAogCQkuY2xrCQk9ICZyZWYyNF9jbGssCiAJfSwgewkvKiBFQjpDTENEICovCi0JCS5kZXZfaWQJCT0gImRldjoyMCIsCisJCS5kZXZfaWQJCT0gImRldjpjbGNkIiwKIAkJLmNsawkJPSAmb3NjdmNvX2NsaywKIAl9LCB7CS8qIFBCOkNMQ0QgKi8KLQkJLmRldl9pZAkJPSAiaXNzcDoyMCIsCisJCS5kZXZfaWQJCT0gImlzc3A6Y2xjZCIsCiAJCS5jbGsJCT0gJm9zY3Zjb19jbGssCiAJfQogfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvY29yZS5oIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9jb3JlLmgKaW5kZXggNTlhMzM3Yi4uNjk5NjcxZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9jb3JlLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9jb3JlLmgKQEAgLTQ3LDggKzQ3LDggQEAKIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHJlYWx2aWV3X2ZsYXNoX2RldmljZTsKIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHJlYWx2aWV3X2NmX2RldmljZTsKIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHJlYWx2aWV3X2kyY19kZXZpY2U7Ci1leHRlcm4gc3RydWN0IG1tY19wbGF0Zm9ybV9kYXRhIHJlYWx2aWV3X21tYzBfcGxhdF9kYXRhOwotZXh0ZXJuIHN0cnVjdCBtbWNfcGxhdGZvcm1fZGF0YSByZWFsdmlld19tbWMxX3BsYXRfZGF0YTsKK2V4dGVybiBzdHJ1Y3QgbW1jaV9wbGF0Zm9ybV9kYXRhIHJlYWx2aWV3X21tYzBfcGxhdF9kYXRhOworZXh0ZXJuIHN0cnVjdCBtbWNpX3BsYXRmb3JtX2RhdGEgcmVhbHZpZXdfbW1jMV9wbGF0X2RhdGE7CiBleHRlcm4gc3RydWN0IGNsY2RfYm9hcmQgY2xjZF9wbGF0X2RhdGE7CiBleHRlcm4gdm9pZCBfX2lvbWVtICpnaWNfY3B1X2Jhc2VfYWRkcjsKIGV4dGVybiB2b2lkIF9faW9tZW0gKnRpbWVyMF92YV9iYXNlOwpAQCAtNjEsNSArNjEsNSBAQAogZXh0ZXJuIGludCByZWFsdmlld19mbGFzaF9yZWdpc3RlcihzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgdTMyIG51bSk7CiBleHRlcm4gaW50IHJlYWx2aWV3X2V0aF9yZWdpc3Rlcihjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcyk7CiBleHRlcm4gaW50IHJlYWx2aWV3X3VzYl9yZWdpc3RlcihzdHJ1Y3QgcmVzb3VyY2UgKnJlcyk7Ci0KK2V4dGVybiB2b2lkICgqcmVhbHZpZXdfcmVzZXQpKGNoYXIpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2luY2x1ZGUvbWFjaC9ib2FyZC1wYjExNzYuaCBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvaW5jbHVkZS9tYWNoL2JvYXJkLXBiMTE3Ni5oCmluZGV4IDk4ZjhlN2UuLjM0YjgwYjcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvaW5jbHVkZS9tYWNoL2JvYXJkLXBiMTE3Ni5oCisrKyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvaW5jbHVkZS9tYWNoL2JvYXJkLXBiMTE3Ni5oCkBAIC03Myw0ICs3Myw5IEBACiAjZGVmaW5lIFJFQUxWSUVXX1BCMTE3Nl9HSUNfRElTVF9CQVNFCQkweDEwMDQxMDAwIC8qIEdJQyBkaXN0cmlidXRvciwgb24gRlBHQSAqLwogI2RlZmluZSBSRUFMVklFV19QQjExNzZfTDIyMF9CQVNFCQkweDEwMTEwMDAwIC8qIEwyMjAgcmVnaXN0ZXJzICovCiAKKy8qCisgKiBDb250cm9sIHJlZ2lzdGVyIFNZU19SRVNFVENUTCBpcyBzZXQgdG8gMSB0byBmb3JjZSBhIHNvZnQgcmVzZXQKKyAqLworI2RlZmluZSBSRUFMVklFV19QQjExNzZfU1lTX0xPQ0tWQUxfUlNUQ1RMICAgIDB4MDEwMAorCiAjZW5kaWYJLyogX19BU01fQVJDSF9CT0FSRF9QQjExNzZfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9pbmNsdWRlL21hY2gvYm9hcmQtcGIxMW1wLmggYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2luY2x1ZGUvbWFjaC9ib2FyZC1wYjExbXAuaAppbmRleCBmMGQ2OGUwLi43YWJmOTE4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2luY2x1ZGUvbWFjaC9ib2FyZC1wYjExbXAuaAorKysgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2luY2x1ZGUvbWFjaC9ib2FyZC1wYjExbXAuaApAQCAtODEsNCArODEsMTYgQEAKICNkZWZpbmUgUkVBTFZJRVdfVEMxMU1QX0dJQ19ESVNUX0JBU0UJCTB4MUYwMDEwMDAJLyogVGVzdCBjaGlwIGludGVycnVwdCBjb250cm9sbGVyIGRpc3RyaWJ1dG9yICovCiAjZGVmaW5lIFJFQUxWSUVXX1RDMTFNUF9MMjIwX0JBU0UJCTB4MUYwMDIwMDAJLyogTDIyMCByZWdpc3RlcnMgKi8KIAorIC8qCisgKiBWYWx1ZXMgZm9yIFJFQUxWSUVXX1NZU19SRVNFVF9DVFJMCisgKi8KKyNkZWZpbmUgUkVBTFZJRVdfUEIxMU1QX1NZU19DVFJMX1JFU0VUX0NPTkZJR0NMUiAgICAweDAxCisjZGVmaW5lIFJFQUxWSUVXX1BCMTFNUF9TWVNfQ1RSTF9SRVNFVF9DT05GSUdJTklUICAgMHgwMgorI2RlZmluZSBSRUFMVklFV19QQjExTVBfU1lTX0NUUkxfUkVTRVRfRExMUkVTRVQgICAgIDB4MDMKKyNkZWZpbmUgUkVBTFZJRVdfUEIxMU1QX1NZU19DVFJMX1JFU0VUX1BMTFJFU0VUICAgICAweDA0CisjZGVmaW5lIFJFQUxWSUVXX1BCMTFNUF9TWVNfQ1RSTF9SRVNFVF9QT1IgICAgICAgICAgMHgwNQorI2RlZmluZSBSRUFMVklFV19QQjExTVBfU1lTX0NUUkxfUkVTRVRfRG9DICAgICAgICAgIDB4MDYKKworI2RlZmluZSBSRUFMVklFV19QQjExTVBfU1lTX0NUUkxfTEVEICAgICAgICAgKDEgPDwgMCkKKwogI2VuZGlmCS8qIF9fQVNNX0FSQ0hfQk9BUkRfUEIxMU1QX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvaW5jbHVkZS9tYWNoL3BsYXRmb3JtLmggYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2luY2x1ZGUvbWFjaC9wbGF0Zm9ybS5oCmluZGV4IGM4ZjUwODMuLjRmNDZiZjcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvaW5jbHVkZS9tYWNoL3BsYXRmb3JtLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9pbmNsdWRlL21hY2gvcGxhdGZvcm0uaApAQCAtMTE5LDE5ICsxMTksNiBAQAogI2RlZmluZSBSRUFMVklFV19TWVNfVEVTVF9PU0MzICAgICAgICAgICAgICAgKFJFQUxWSUVXX1NZU19CQVNFICsgUkVBTFZJRVdfU1lTX1RFU1RfT1NDM19PRkZTRVQpCiAjZGVmaW5lIFJFQUxWSUVXX1NZU19URVNUX09TQzQgICAgICAgICAgICAgICAoUkVBTFZJRVdfU1lTX0JBU0UgKyBSRUFMVklFV19TWVNfVEVTVF9PU0M0X09GRlNFVCkKIAotLyogCi0gKiBWYWx1ZXMgZm9yIFJFQUxWSUVXX1NZU19SRVNFVF9DVFJMCi0gKi8KLSNkZWZpbmUgUkVBTFZJRVdfU1lTX0NUUkxfUkVTRVRfQ09ORklHQ0xSICAgIDB4MDEKLSNkZWZpbmUgUkVBTFZJRVdfU1lTX0NUUkxfUkVTRVRfQ09ORklHSU5JVCAgIDB4MDIKLSNkZWZpbmUgUkVBTFZJRVdfU1lTX0NUUkxfUkVTRVRfRExMUkVTRVQgICAgIDB4MDMKLSNkZWZpbmUgUkVBTFZJRVdfU1lTX0NUUkxfUkVTRVRfUExMUkVTRVQgICAgIDB4MDQKLSNkZWZpbmUgUkVBTFZJRVdfU1lTX0NUUkxfUkVTRVRfUE9SICAgICAgICAgIDB4MDUKLSNkZWZpbmUgUkVBTFZJRVdfU1lTX0NUUkxfUkVTRVRfRG9DICAgICAgICAgIDB4MDYKLQotI2RlZmluZSBSRUFMVklFV19TWVNfQ1RSTF9MRUQgICAgICAgICAoMSA8PCAwKQotCi0KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogIFJlYWxWaWV3IGNvbnRyb2wgcmVnaXN0ZXJzCiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTE1Myw3ICsxNDAsNyBAQAogICogICAgIFNZU19DTEQsIFNZU19CT09UQ1MKICAqLwogI2RlZmluZSBSRUFMVklFV19TWVNfTE9DS19MT0NLRUQgICAgKDEgPDwgMTYpCi0jZGVmaW5lIFJFQUxWSUVXX1NZU19MT0NLVkFMX01BU0sJMHhGRkZGCQkvKiB3cml0ZSAweEEwNUYgdG8gZW5hYmxlIHdyaXRlIGFjY2VzcyAqLworI2RlZmluZSBSRUFMVklFV19TWVNfTE9DS1ZBTF9NQVNLCTB4QTA1RgkgICAgICAgLyogRW5hYmxlIHdyaXRlIGFjY2VzcyAqLwogCiAvKgogICogUkVBTFZJRVdfU1lTX0ZMQVNICmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2luY2x1ZGUvbWFjaC9zeXN0ZW0uaCBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCmluZGV4IDFhMTVhNDQuLmEzMGYyZTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCisrKyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCkBAIC0yNSw2ICsyNSw4IEBACiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPG1hY2gvcGxhdGZvcm0uaD4KIAordm9pZCAoKnJlYWx2aWV3X3Jlc2V0KShjaGFyIG1vZGUpOworCiBzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9pZGxlKHZvaWQpCiB7CiAJLyoKQEAgLTM2LDE2ICszOCwxMiBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9yZXNldChjaGFyIG1vZGUsIGNvbnN0IGNoYXIgKmNtZCkKIHsKLQl2b2lkIF9faW9tZW0gKmhkcl9jdHJsID0gX19pb19hZGRyZXNzKFJFQUxWSUVXX1NZU19CQVNFKSArIFJFQUxWSUVXX1NZU19SRVNFVENUTF9PRkZTRVQ7Ci0JdW5zaWduZWQgaW50IHZhbDsKLQogCS8qCiAJICogVG8gcmVzZXQsIHdlIGhpdCB0aGUgb24tYm9hcmQgcmVzZXQgcmVnaXN0ZXIKIAkgKiBpbiB0aGUgc3lzdGVtIEZQR0EKIAkgKi8KLQl2YWwgPSBfX3Jhd19yZWFkbChoZHJfY3RybCk7Ci0JdmFsIHw9IFJFQUxWSUVXX1NZU19DVFJMX1JFU0VUX0NPTkZJR0NMUjsKLQlfX3Jhd193cml0ZWwodmFsLCBoZHJfY3RybCk7CisJaWYgKHJlYWx2aWV3X3Jlc2V0KQorCQlyZWFsdmlld19yZXNldChtb2RlKTsKIH0KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3JlYWx2aWV3X2ViLmMgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3JlYWx2aWV3X2ViLmMKaW5kZXggYWJkMTNiNC4uMWQ2NWU2NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9yZWFsdmlld19lYi5jCisrKyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcmVhbHZpZXdfZWIuYwpAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L2FtYmEvYnVzLmg+CiAjaW5jbHVkZSA8bGludXgvYW1iYS9wbDA2MS5oPgorI2luY2x1ZGUgPGxpbnV4L2FtYmEvbW1jaS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CkBAIC0zNyw3ICszOCw2IEBACiAKICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvbW1jLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgogCiAjaW5jbHVkZSA8bWFjaC9ib2FyZC1lYi5oPgpAQCAtMTkzLDI3ICsxOTMsMjcgQEAKICNkZWZpbmUgRUJfU1NQX0RNQQl7IDksIDggfQogCiAvKiBGUEdBIFByaW1lY2VsbHMgKi8KLUFNQkFfREVWSUNFKGFhY2ksICAiZnBnYTowNCIsIEFBQ0ksICAgICBOVUxMKTsKLUFNQkFfREVWSUNFKG1tYzAsICAiZnBnYTowNSIsIE1NQ0kwLCAgICAmcmVhbHZpZXdfbW1jMF9wbGF0X2RhdGEpOwotQU1CQV9ERVZJQ0Uoa21pMCwgICJmcGdhOjA2IiwgS01JMCwgICAgIE5VTEwpOwotQU1CQV9ERVZJQ0Uoa21pMSwgICJmcGdhOjA3IiwgS01JMSwgICAgIE5VTEwpOwotQU1CQV9ERVZJQ0UodWFydDMsICJmcGdhOjA5IiwgRUJfVUFSVDMsIE5VTEwpOworQU1CQV9ERVZJQ0UoYWFjaSwgICJmcGdhOmFhY2kiLCAgQUFDSSwgICAgIE5VTEwpOworQU1CQV9ERVZJQ0UobW1jMCwgICJmcGdhOm1tYzAiLCAgTU1DSTAsICAgICZyZWFsdmlld19tbWMwX3BsYXRfZGF0YSk7CitBTUJBX0RFVklDRShrbWkwLCAgImZwZ2E6a21pMCIsICBLTUkwLCAgICAgTlVMTCk7CitBTUJBX0RFVklDRShrbWkxLCAgImZwZ2E6a21pMSIsICBLTUkxLCAgICAgTlVMTCk7CitBTUJBX0RFVklDRSh1YXJ0MywgImZwZ2E6dWFydDMiLCBFQl9VQVJUMywgTlVMTCk7CiAKIC8qIERldkNoaXAgUHJpbWVjZWxscyAqLwotQU1CQV9ERVZJQ0Uoc21jLCAgICJkZXY6MDAiLCAgRUJfU01DLCAgIE5VTEwpOwotQU1CQV9ERVZJQ0UoY2xjZCwgICJkZXY6MjAiLCAgRUJfQ0xDRCwgICZjbGNkX3BsYXRfZGF0YSk7Ci1BTUJBX0RFVklDRShkbWFjLCAgImRldjozMCIsICBETUFDLCAgICAgTlVMTCk7Ci1BTUJBX0RFVklDRShzY3RsLCAgImRldjplMCIsICBTQ1RMLCAgICAgTlVMTCk7Ci1BTUJBX0RFVklDRSh3ZG9nLCAgImRldjplMSIsICBFQl9XQVRDSERPRywgTlVMTCk7Ci1BTUJBX0RFVklDRShncGlvMCwgImRldjplNCIsICBFQl9HUElPMCwgJmdwaW8wX3BsYXRfZGF0YSk7Ci1BTUJBX0RFVklDRShncGlvMSwgImRldjplNSIsICBHUElPMSwgICAgJmdwaW8xX3BsYXRfZGF0YSk7Ci1BTUJBX0RFVklDRShncGlvMiwgImRldjplNiIsICBHUElPMiwgICAgJmdwaW8yX3BsYXRfZGF0YSk7Ci1BTUJBX0RFVklDRShydGMsICAgImRldjplOCIsICBFQl9SVEMsICAgTlVMTCk7Ci1BTUJBX0RFVklDRShzY2kwLCAgImRldjpmMCIsICBTQ0ksICAgICAgTlVMTCk7Ci1BTUJBX0RFVklDRSh1YXJ0MCwgImRldjpmMSIsICBFQl9VQVJUMCwgTlVMTCk7Ci1BTUJBX0RFVklDRSh1YXJ0MSwgImRldjpmMiIsICBFQl9VQVJUMSwgTlVMTCk7Ci1BTUJBX0RFVklDRSh1YXJ0MiwgImRldjpmMyIsICBFQl9VQVJUMiwgTlVMTCk7Ci1BTUJBX0RFVklDRShzc3AwLCAgImRldjpmNCIsICBFQl9TU1AsICAgTlVMTCk7CitBTUJBX0RFVklDRShzbWMsICAgImRldjpzbWMiLCAgIEVCX1NNQywgICBOVUxMKTsKK0FNQkFfREVWSUNFKGNsY2QsICAiZGV2OmNsY2QiLCAgRUJfQ0xDRCwgICZjbGNkX3BsYXRfZGF0YSk7CitBTUJBX0RFVklDRShkbWFjLCAgImRldjpkbWFjIiwgIERNQUMsICAgICBOVUxMKTsKK0FNQkFfREVWSUNFKHNjdGwsICAiZGV2OnNjdGwiLCAgU0NUTCwgICAgIE5VTEwpOworQU1CQV9ERVZJQ0Uod2RvZywgICJkZXY6d2RvZyIsICBFQl9XQVRDSERPRywgTlVMTCk7CitBTUJBX0RFVklDRShncGlvMCwgImRldjpncGlvMCIsIEVCX0dQSU8wLCAmZ3BpbzBfcGxhdF9kYXRhKTsKK0FNQkFfREVWSUNFKGdwaW8xLCAiZGV2OmdwaW8xIiwgR1BJTzEsICAgICZncGlvMV9wbGF0X2RhdGEpOworQU1CQV9ERVZJQ0UoZ3BpbzIsICJkZXY6Z3BpbzIiLCBHUElPMiwgICAgJmdwaW8yX3BsYXRfZGF0YSk7CitBTUJBX0RFVklDRShydGMsICAgImRldjpydGMiLCAgIEVCX1JUQywgICBOVUxMKTsKK0FNQkFfREVWSUNFKHNjaTAsICAiZGV2OnNjaTAiLCAgU0NJLCAgICAgIE5VTEwpOworQU1CQV9ERVZJQ0UodWFydDAsICJkZXY6dWFydDAiLCBFQl9VQVJUMCwgTlVMTCk7CitBTUJBX0RFVklDRSh1YXJ0MSwgImRldjp1YXJ0MSIsIEVCX1VBUlQxLCBOVUxMKTsKK0FNQkFfREVWSUNFKHVhcnQyLCAiZGV2OnVhcnQyIiwgRUJfVUFSVDIsIE5VTEwpOworQU1CQV9ERVZJQ0Uoc3NwMCwgICJkZXY6c3NwMCIsICBFQl9TU1AsICAgTlVMTCk7CiAKIHN0YXRpYyBzdHJ1Y3QgYW1iYV9kZXZpY2UgKmFtYmFfZGV2c1tdIF9faW5pdGRhdGEgPSB7CiAJJmRtYWNfZGV2aWNlLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9yZWFsdmlld19wYjExNzYuYyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcmVhbHZpZXdfcGIxMTc2LmMKaW5kZXggMTdmYmIwZS4uYTZiYTE0NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9yZWFsdmlld19wYjExNzYuYworKysgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3JlYWx2aWV3X3BiMTE3Ni5jCkBAIC0yNCw2ICsyNCw3IEBACiAjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvYW1iYS9idXMuaD4KICNpbmNsdWRlIDxsaW51eC9hbWJhL3BsMDYxLmg+CisjaW5jbHVkZSA8bGludXgvYW1iYS9tbWNpLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KIAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KQEAgLTM3LDcgKzM4LDYgQEAKICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvZmxhc2guaD4KICNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9tbWMuaD4KICNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+CiAKICNpbmNsdWRlIDxtYWNoL2JvYXJkLXBiMTE3Ni5oPgpAQCAtMTcwLDI5ICsxNzAsMjkgQEAKICNkZWZpbmUgUEIxMTc2X1NTUF9ETUEJCXsgOSwgOCB9CiAKIC8qIEZQR0EgUHJpbWVjZWxscyAqLwotQU1CQV9ERVZJQ0UoYWFjaSwJImZwZ2E6MDQiLAlBQUNJLAkJTlVMTCk7Ci1BTUJBX0RFVklDRShtbWMwLAkiZnBnYTowNSIsCU1NQ0kwLAkJJnJlYWx2aWV3X21tYzBfcGxhdF9kYXRhKTsKLUFNQkFfREVWSUNFKGttaTAsCSJmcGdhOjA2IiwJS01JMCwJCU5VTEwpOwotQU1CQV9ERVZJQ0Uoa21pMSwJImZwZ2E6MDciLAlLTUkxLAkJTlVMTCk7Ci1BTUJBX0RFVklDRSh1YXJ0MywJImZwZ2E6MDkiLAlQQjExNzZfVUFSVDMsCU5VTEwpOworQU1CQV9ERVZJQ0UoYWFjaSwJImZwZ2E6YWFjaSIsCUFBQ0ksCQlOVUxMKTsKK0FNQkFfREVWSUNFKG1tYzAsCSJmcGdhOm1tYzAiLAlNTUNJMCwJCSZyZWFsdmlld19tbWMwX3BsYXRfZGF0YSk7CitBTUJBX0RFVklDRShrbWkwLAkiZnBnYTprbWkwIiwJS01JMCwJCU5VTEwpOworQU1CQV9ERVZJQ0Uoa21pMSwJImZwZ2E6a21pMSIsCUtNSTEsCQlOVUxMKTsKK0FNQkFfREVWSUNFKHVhcnQzLAkiZnBnYTp1YXJ0MyIsCVBCMTE3Nl9VQVJUMywJTlVMTCk7CiAKIC8qIERldkNoaXAgUHJpbWVjZWxscyAqLwotQU1CQV9ERVZJQ0Uoc21jLAkiZGV2OjAwIiwJUEIxMTc2X1NNQywJTlVMTCk7Ci1BTUJBX0RFVklDRShzY3RsLAkiZGV2OmUwIiwJU0NUTCwJCU5VTEwpOwotQU1CQV9ERVZJQ0Uod2RvZywJImRldjplMSIsCVBCMTE3Nl9XQVRDSERPRywJTlVMTCk7Ci1BTUJBX0RFVklDRShncGlvMCwJImRldjplNCIsCVBCMTE3Nl9HUElPMCwJJmdwaW8wX3BsYXRfZGF0YSk7Ci1BTUJBX0RFVklDRShncGlvMSwJImRldjplNSIsCUdQSU8xLAkJJmdwaW8xX3BsYXRfZGF0YSk7Ci1BTUJBX0RFVklDRShncGlvMiwJImRldjplNiIsCUdQSU8yLAkJJmdwaW8yX3BsYXRfZGF0YSk7Ci1BTUJBX0RFVklDRShydGMsCSJkZXY6ZTgiLAlQQjExNzZfUlRDLAlOVUxMKTsKLUFNQkFfREVWSUNFKHNjaTAsCSJkZXY6ZjAiLAlTQ0ksCQlOVUxMKTsKLUFNQkFfREVWSUNFKHVhcnQwLAkiZGV2OmYxIiwJUEIxMTc2X1VBUlQwLAlOVUxMKTsKLUFNQkFfREVWSUNFKHVhcnQxLAkiZGV2OmYyIiwJUEIxMTc2X1VBUlQxLAlOVUxMKTsKLUFNQkFfREVWSUNFKHVhcnQyLAkiZGV2OmYzIiwJUEIxMTc2X1VBUlQyLAlOVUxMKTsKLUFNQkFfREVWSUNFKHNzcDAsCSJkZXY6ZjQiLAlQQjExNzZfU1NQLAlOVUxMKTsKK0FNQkFfREVWSUNFKHNtYywJImRldjpzbWMiLAlQQjExNzZfU01DLAlOVUxMKTsKK0FNQkFfREVWSUNFKHNjdGwsCSJkZXY6c2N0bCIsCVNDVEwsCQlOVUxMKTsKK0FNQkFfREVWSUNFKHdkb2csCSJkZXY6d2RvZyIsCVBCMTE3Nl9XQVRDSERPRywJTlVMTCk7CitBTUJBX0RFVklDRShncGlvMCwJImRldjpncGlvMCIsCVBCMTE3Nl9HUElPMCwJJmdwaW8wX3BsYXRfZGF0YSk7CitBTUJBX0RFVklDRShncGlvMSwJImRldjpncGlvMSIsCUdQSU8xLAkJJmdwaW8xX3BsYXRfZGF0YSk7CitBTUJBX0RFVklDRShncGlvMiwJImRldjpncGlvMiIsCUdQSU8yLAkJJmdwaW8yX3BsYXRfZGF0YSk7CitBTUJBX0RFVklDRShydGMsCSJkZXY6cnRjIiwJUEIxMTc2X1JUQywJTlVMTCk7CitBTUJBX0RFVklDRShzY2kwLAkiZGV2OnNjaTAiLAlTQ0ksCQlOVUxMKTsKK0FNQkFfREVWSUNFKHVhcnQwLAkiZGV2OnVhcnQwIiwJUEIxMTc2X1VBUlQwLAlOVUxMKTsKK0FNQkFfREVWSUNFKHVhcnQxLAkiZGV2OnVhcnQxIiwJUEIxMTc2X1VBUlQxLAlOVUxMKTsKK0FNQkFfREVWSUNFKHVhcnQyLAkiZGV2OnVhcnQyIiwJUEIxMTc2X1VBUlQyLAlOVUxMKTsKK0FNQkFfREVWSUNFKHNzcDAsCSJkZXY6c3NwMCIsCVBCMTE3Nl9TU1AsCU5VTEwpOwogCiAvKiBQcmltZWNlbGxzIG9uIHRoZSBORUMgSVNTUCBjaGlwICovCi1BTUJBX0RFVklDRShjbGNkLAkiaXNzcDoyMCIsCVBCMTE3Nl9DTENELAkmY2xjZF9wbGF0X2RhdGEpOwotLy9BTUJBX0RFVklDRShkbWFjLAkiaXNzcDozMCIsCVBCMTE3Nl9ETUFDLAlOVUxMKTsKK0FNQkFfREVWSUNFKGNsY2QsCSJpc3NwOmNsY2QiLAlQQjExNzZfQ0xDRCwJJmNsY2RfcGxhdF9kYXRhKTsKKy8vQU1CQV9ERVZJQ0UoZG1hYywJImlzc3A6ZG1hYyIsCVBCMTE3Nl9ETUFDLAlOVUxMKTsKIAogc3RhdGljIHN0cnVjdCBhbWJhX2RldmljZSAqYW1iYV9kZXZzW10gX19pbml0ZGF0YSA9IHsKIC8vCSZkbWFjX2RldmljZSwKQEAgLTI5MCw2ICsyOTAsMTYgQEAKIAkuaW5pdAkJPSByZWFsdmlld19wYjExNzZfdGltZXJfaW5pdCwKIH07CiAKK3N0YXRpYyB2b2lkIHJlYWx2aWV3X3BiMTE3Nl9yZXNldChjaGFyIG1vZGUpCit7CisJdm9pZCBfX2lvbWVtICpoZHJfY3RybCA9IF9faW9fYWRkcmVzcyhSRUFMVklFV19TWVNfQkFTRSkgKworCQlSRUFMVklFV19TWVNfUkVTRVRDVExfT0ZGU0VUOworCXZvaWQgX19pb21lbSAqcnN0X2hkcl9jdHJsID0gX19pb19hZGRyZXNzKFJFQUxWSUVXX1NZU19CQVNFKSArCisJCVJFQUxWSUVXX1NZU19MT0NLX09GRlNFVDsKKwlfX3Jhd193cml0ZWwoUkVBTFZJRVdfU1lTX0xPQ0tWQUxfTUFTSywgcnN0X2hkcl9jdHJsKTsKKwlfX3Jhd193cml0ZWwoUkVBTFZJRVdfUEIxMTc2X1NZU19MT0NLVkFMX1JTVENUTCwgaGRyX2N0cmwpOworfQorCiBzdGF0aWMgdm9pZCBfX2luaXQgcmVhbHZpZXdfcGIxMTc2X2luaXQodm9pZCkKIHsKIAlpbnQgaTsKQEAgLTMxMyw2ICszMjMsNyBAQAogI2lmZGVmIENPTkZJR19MRURTCiAJbGVkc19ldmVudCA9IHJlYWx2aWV3X2xlZHNfZXZlbnQ7CiAjZW5kaWYKKwlyZWFsdmlld19yZXNldCA9IHJlYWx2aWV3X3BiMTE3Nl9yZXNldDsKIH0KIAogTUFDSElORV9TVEFSVChSRUFMVklFV19QQjExNzYsICJBUk0tUmVhbFZpZXcgUEIxMTc2IikKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcmVhbHZpZXdfcGIxMW1wLmMgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3JlYWx2aWV3X3BiMTFtcC5jCmluZGV4IGZkZDA0MmIuLjA3MGQyODQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcmVhbHZpZXdfcGIxMW1wLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9yZWFsdmlld19wYjExbXAuYwpAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L2FtYmEvYnVzLmg+CiAjaW5jbHVkZSA8bGludXgvYW1iYS9wbDA2MS5oPgorI2luY2x1ZGUgPGxpbnV4L2FtYmEvbW1jaS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CkBAIC0zOCw3ICszOSw2IEBACiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2ZsYXNoLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvbW1jLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgogCiAjaW5jbHVkZSA8bWFjaC9ib2FyZC1wYjExbXAuaD4KQEAgLTE3MiwyOSArMTcyLDI5IEBACiAjZGVmaW5lIFBCMTFNUF9TU1BfRE1BCQl7IDksIDggfQogCiAvKiBGUEdBIFByaW1lY2VsbHMgKi8KLUFNQkFfREVWSUNFKGFhY2ksCSJmcGdhOjA0IiwJQUFDSSwJCU5VTEwpOwotQU1CQV9ERVZJQ0UobW1jMCwJImZwZ2E6MDUiLAlNTUNJMCwJCSZyZWFsdmlld19tbWMwX3BsYXRfZGF0YSk7Ci1BTUJBX0RFVklDRShrbWkwLAkiZnBnYTowNiIsCUtNSTAsCQlOVUxMKTsKLUFNQkFfREVWSUNFKGttaTEsCSJmcGdhOjA3IiwJS01JMSwJCU5VTEwpOwotQU1CQV9ERVZJQ0UodWFydDMsCSJmcGdhOjA5IiwJUEIxMU1QX1VBUlQzLAlOVUxMKTsKK0FNQkFfREVWSUNFKGFhY2ksCSJmcGdhOmFhY2kiLAlBQUNJLAkJTlVMTCk7CitBTUJBX0RFVklDRShtbWMwLAkiZnBnYTptbWMwIiwJTU1DSTAsCQkmcmVhbHZpZXdfbW1jMF9wbGF0X2RhdGEpOworQU1CQV9ERVZJQ0Uoa21pMCwJImZwZ2E6a21pMCIsCUtNSTAsCQlOVUxMKTsKK0FNQkFfREVWSUNFKGttaTEsCSJmcGdhOmttaTEiLAlLTUkxLAkJTlVMTCk7CitBTUJBX0RFVklDRSh1YXJ0MywJImZwZ2E6dWFydDMiLAlQQjExTVBfVUFSVDMsCU5VTEwpOwogCiAvKiBEZXZDaGlwIFByaW1lY2VsbHMgKi8KLUFNQkFfREVWSUNFKHNtYywJImRldjowMCIsCVBCMTFNUF9TTUMsCU5VTEwpOwotQU1CQV9ERVZJQ0Uoc2N0bCwJImRldjplMCIsCVNDVEwsCQlOVUxMKTsKLUFNQkFfREVWSUNFKHdkb2csCSJkZXY6ZTEiLAlQQjExTVBfV0FUQ0hET0csIE5VTEwpOwotQU1CQV9ERVZJQ0UoZ3BpbzAsCSJkZXY6ZTQiLAlQQjExTVBfR1BJTzAsCSZncGlvMF9wbGF0X2RhdGEpOwotQU1CQV9ERVZJQ0UoZ3BpbzEsCSJkZXY6ZTUiLAlHUElPMSwJCSZncGlvMV9wbGF0X2RhdGEpOwotQU1CQV9ERVZJQ0UoZ3BpbzIsCSJkZXY6ZTYiLAlHUElPMiwJCSZncGlvMl9wbGF0X2RhdGEpOwotQU1CQV9ERVZJQ0UocnRjLAkiZGV2OmU4IiwJUEIxMU1QX1JUQywJTlVMTCk7Ci1BTUJBX0RFVklDRShzY2kwLAkiZGV2OmYwIiwJU0NJLAkJTlVMTCk7Ci1BTUJBX0RFVklDRSh1YXJ0MCwJImRldjpmMSIsCVBCMTFNUF9VQVJUMCwJTlVMTCk7Ci1BTUJBX0RFVklDRSh1YXJ0MSwJImRldjpmMiIsCVBCMTFNUF9VQVJUMSwJTlVMTCk7Ci1BTUJBX0RFVklDRSh1YXJ0MiwJImRldjpmMyIsCVBCMTFNUF9VQVJUMiwJTlVMTCk7Ci1BTUJBX0RFVklDRShzc3AwLAkiZGV2OmY0IiwJUEIxMU1QX1NTUCwJTlVMTCk7CitBTUJBX0RFVklDRShzbWMsCSJkZXY6c21jIiwJUEIxMU1QX1NNQywJTlVMTCk7CitBTUJBX0RFVklDRShzY3RsLAkiZGV2OnNjdGwiLAlTQ1RMLAkJTlVMTCk7CitBTUJBX0RFVklDRSh3ZG9nLAkiZGV2Ondkb2ciLAlQQjExTVBfV0FUQ0hET0csIE5VTEwpOworQU1CQV9ERVZJQ0UoZ3BpbzAsCSJkZXY6Z3BpbzAiLAlQQjExTVBfR1BJTzAsCSZncGlvMF9wbGF0X2RhdGEpOworQU1CQV9ERVZJQ0UoZ3BpbzEsCSJkZXY6Z3BpbzEiLAlHUElPMSwJCSZncGlvMV9wbGF0X2RhdGEpOworQU1CQV9ERVZJQ0UoZ3BpbzIsCSJkZXY6Z3BpbzIiLAlHUElPMiwJCSZncGlvMl9wbGF0X2RhdGEpOworQU1CQV9ERVZJQ0UocnRjLAkiZGV2OnJ0YyIsCVBCMTFNUF9SVEMsCU5VTEwpOworQU1CQV9ERVZJQ0Uoc2NpMCwJImRldjpzY2kwIiwJU0NJLAkJTlVMTCk7CitBTUJBX0RFVklDRSh1YXJ0MCwJImRldjp1YXJ0MCIsCVBCMTFNUF9VQVJUMCwJTlVMTCk7CitBTUJBX0RFVklDRSh1YXJ0MSwJImRldjp1YXJ0MSIsCVBCMTFNUF9VQVJUMSwJTlVMTCk7CitBTUJBX0RFVklDRSh1YXJ0MiwJImRldjp1YXJ0MiIsCVBCMTFNUF9VQVJUMiwJTlVMTCk7CitBTUJBX0RFVklDRShzc3AwLAkiZGV2OnNzcDAiLAlQQjExTVBfU1NQLAlOVUxMKTsKIAogLyogUHJpbWVjZWxscyBvbiB0aGUgTkVDIElTU1AgY2hpcCAqLwotQU1CQV9ERVZJQ0UoY2xjZCwJImlzc3A6MjAiLAlQQjExTVBfQ0xDRCwJJmNsY2RfcGxhdF9kYXRhKTsKLUFNQkFfREVWSUNFKGRtYWMsCSJpc3NwOjMwIiwJRE1BQywJCU5VTEwpOworQU1CQV9ERVZJQ0UoY2xjZCwJImlzc3A6Y2xjZCIsCVBCMTFNUF9DTENELAkmY2xjZF9wbGF0X2RhdGEpOworQU1CQV9ERVZJQ0UoZG1hYywJImlzc3A6ZG1hYyIsCURNQUMsCQlOVUxMKTsKIAogc3RhdGljIHN0cnVjdCBhbWJhX2RldmljZSAqYW1iYV9kZXZzW10gX19pbml0ZGF0YSA9IHsKIAkmZG1hY19kZXZpY2UsCkBAIC0yOTksNiArMjk5LDIxIEBACiAJLmluaXQJCT0gcmVhbHZpZXdfcGIxMW1wX3RpbWVyX2luaXQsCiB9OwogCitzdGF0aWMgdm9pZCByZWFsdmlld19wYjExbXBfcmVzZXQoY2hhciBtb2RlKQoreworCXZvaWQgX19pb21lbSAqaGRyX2N0cmwgPSBfX2lvX2FkZHJlc3MoUkVBTFZJRVdfU1lTX0JBU0UpICsKKwkJUkVBTFZJRVdfU1lTX1JFU0VUQ1RMX09GRlNFVDsKKwl1bnNpZ25lZCBpbnQgdmFsOworCisJLyoKKwkgKiBUbyByZXNldCwgd2UgaGl0IHRoZSBvbi1ib2FyZCByZXNldCByZWdpc3RlcgorCSAqIGluIHRoZSBzeXN0ZW0gRlBHQQorCSAqLworCXZhbCA9IF9fcmF3X3JlYWRsKGhkcl9jdHJsKTsKKwl2YWwgfD0gUkVBTFZJRVdfUEIxMU1QX1NZU19DVFJMX1JFU0VUX0NPTkZJR0NMUjsKKwlfX3Jhd193cml0ZWwodmFsLCBoZHJfY3RybCk7Cit9CisKIHN0YXRpYyB2b2lkIF9faW5pdCByZWFsdmlld19wYjExbXBfaW5pdCh2b2lkKQogewogCWludCBpOwpAQCAtMzI0LDYgKzMzOSw3IEBACiAjaWZkZWYgQ09ORklHX0xFRFMKIAlsZWRzX2V2ZW50ID0gcmVhbHZpZXdfbGVkc19ldmVudDsKICNlbmRpZgorCXJlYWx2aWV3X3Jlc2V0ID0gcmVhbHZpZXdfcGIxMW1wX3Jlc2V0OwogfQogCiBNQUNISU5FX1NUQVJUKFJFQUxWSUVXX1BCMTFNUCwgIkFSTS1SZWFsVmlldyBQQjExTVBDb3JlIikKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcmVhbHZpZXdfcGJhOC5jIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9yZWFsdmlld19wYmE4LmMKaW5kZXggNzBiYmE5OS4uOTQxYmViMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9yZWFsdmlld19wYmE4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9yZWFsdmlld19wYmE4LmMKQEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KICNpbmNsdWRlIDxsaW51eC9hbWJhL2J1cy5oPgogI2luY2x1ZGUgPGxpbnV4L2FtYmEvcGwwNjEuaD4KKyNpbmNsdWRlIDxsaW51eC9hbWJhL21tY2kuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogCiAjaW5jbHVkZSA8YXNtL2lycS5oPgpAQCAtMzQsNyArMzUsNiBAQAogCiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL21tYy5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KIAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KQEAgLTE2MiwyOSArMTYyLDI5IEBACiAjZGVmaW5lIFBCQThfU1NQX0RNQQkJeyA5LCA4IH0KIAogLyogRlBHQSBQcmltZWNlbGxzICovCi1BTUJBX0RFVklDRShhYWNpLAkiZnBnYTowNCIsCUFBQ0ksCQlOVUxMKTsKLUFNQkFfREVWSUNFKG1tYzAsCSJmcGdhOjA1IiwJTU1DSTAsCQkmcmVhbHZpZXdfbW1jMF9wbGF0X2RhdGEpOwotQU1CQV9ERVZJQ0Uoa21pMCwJImZwZ2E6MDYiLAlLTUkwLAkJTlVMTCk7Ci1BTUJBX0RFVklDRShrbWkxLAkiZnBnYTowNyIsCUtNSTEsCQlOVUxMKTsKLUFNQkFfREVWSUNFKHVhcnQzLAkiZnBnYTowOSIsCVBCQThfVUFSVDMsCU5VTEwpOworQU1CQV9ERVZJQ0UoYWFjaSwJImZwZ2E6YWFjaSIsCUFBQ0ksCQlOVUxMKTsKK0FNQkFfREVWSUNFKG1tYzAsCSJmcGdhOm1tYzAiLAlNTUNJMCwJCSZyZWFsdmlld19tbWMwX3BsYXRfZGF0YSk7CitBTUJBX0RFVklDRShrbWkwLAkiZnBnYTprbWkwIiwJS01JMCwJCU5VTEwpOworQU1CQV9ERVZJQ0Uoa21pMSwJImZwZ2E6a21pMSIsCUtNSTEsCQlOVUxMKTsKK0FNQkFfREVWSUNFKHVhcnQzLAkiZnBnYTp1YXJ0MyIsCVBCQThfVUFSVDMsCU5VTEwpOwogCiAvKiBEZXZDaGlwIFByaW1lY2VsbHMgKi8KLUFNQkFfREVWSUNFKHNtYywJImRldjowMCIsCVBCQThfU01DLAlOVUxMKTsKLUFNQkFfREVWSUNFKHNjdGwsCSJkZXY6ZTAiLAlTQ1RMLAkJTlVMTCk7Ci1BTUJBX0RFVklDRSh3ZG9nLAkiZGV2OmUxIiwJUEJBOF9XQVRDSERPRywgTlVMTCk7Ci1BTUJBX0RFVklDRShncGlvMCwJImRldjplNCIsCVBCQThfR1BJTzAsCSZncGlvMF9wbGF0X2RhdGEpOwotQU1CQV9ERVZJQ0UoZ3BpbzEsCSJkZXY6ZTUiLAlHUElPMSwJCSZncGlvMV9wbGF0X2RhdGEpOwotQU1CQV9ERVZJQ0UoZ3BpbzIsCSJkZXY6ZTYiLAlHUElPMiwJCSZncGlvMl9wbGF0X2RhdGEpOwotQU1CQV9ERVZJQ0UocnRjLAkiZGV2OmU4IiwJUEJBOF9SVEMsCU5VTEwpOwotQU1CQV9ERVZJQ0Uoc2NpMCwJImRldjpmMCIsCVNDSSwJCU5VTEwpOwotQU1CQV9ERVZJQ0UodWFydDAsCSJkZXY6ZjEiLAlQQkE4X1VBUlQwLAlOVUxMKTsKLUFNQkFfREVWSUNFKHVhcnQxLAkiZGV2OmYyIiwJUEJBOF9VQVJUMSwJTlVMTCk7Ci1BTUJBX0RFVklDRSh1YXJ0MiwJImRldjpmMyIsCVBCQThfVUFSVDIsCU5VTEwpOwotQU1CQV9ERVZJQ0Uoc3NwMCwJImRldjpmNCIsCVBCQThfU1NQLAlOVUxMKTsKK0FNQkFfREVWSUNFKHNtYywJImRldjpzbWMiLAlQQkE4X1NNQywJTlVMTCk7CitBTUJBX0RFVklDRShzY3RsLAkiZGV2OnNjdGwiLAlTQ1RMLAkJTlVMTCk7CitBTUJBX0RFVklDRSh3ZG9nLAkiZGV2Ondkb2ciLAlQQkE4X1dBVENIRE9HLCBOVUxMKTsKK0FNQkFfREVWSUNFKGdwaW8wLAkiZGV2OmdwaW8wIiwJUEJBOF9HUElPMCwJJmdwaW8wX3BsYXRfZGF0YSk7CitBTUJBX0RFVklDRShncGlvMSwJImRldjpncGlvMSIsCUdQSU8xLAkJJmdwaW8xX3BsYXRfZGF0YSk7CitBTUJBX0RFVklDRShncGlvMiwJImRldjpncGlvMiIsCUdQSU8yLAkJJmdwaW8yX3BsYXRfZGF0YSk7CitBTUJBX0RFVklDRShydGMsCSJkZXY6cnRjIiwJUEJBOF9SVEMsCU5VTEwpOworQU1CQV9ERVZJQ0Uoc2NpMCwJImRldjpzY2kwIiwJU0NJLAkJTlVMTCk7CitBTUJBX0RFVklDRSh1YXJ0MCwJImRldjp1YXJ0MCIsCVBCQThfVUFSVDAsCU5VTEwpOworQU1CQV9ERVZJQ0UodWFydDEsCSJkZXY6dWFydDEiLAlQQkE4X1VBUlQxLAlOVUxMKTsKK0FNQkFfREVWSUNFKHVhcnQyLAkiZGV2OnVhcnQyIiwJUEJBOF9VQVJUMiwJTlVMTCk7CitBTUJBX0RFVklDRShzc3AwLAkiZGV2OnNzcDAiLAlQQkE4X1NTUCwJTlVMTCk7CiAKIC8qIFByaW1lY2VsbHMgb24gdGhlIE5FQyBJU1NQIGNoaXAgKi8KLUFNQkFfREVWSUNFKGNsY2QsCSJpc3NwOjIwIiwJUEJBOF9DTENELAkmY2xjZF9wbGF0X2RhdGEpOwotQU1CQV9ERVZJQ0UoZG1hYywJImlzc3A6MzAiLAlETUFDLAkJTlVMTCk7CitBTUJBX0RFVklDRShjbGNkLAkiaXNzcDpjbGNkIiwJUEJBOF9DTENELAkmY2xjZF9wbGF0X2RhdGEpOworQU1CQV9ERVZJQ0UoZG1hYywJImlzc3A6ZG1hYyIsCURNQUMsCQlOVUxMKTsKIAogc3RhdGljIHN0cnVjdCBhbWJhX2RldmljZSAqYW1iYV9kZXZzW10gX19pbml0ZGF0YSA9IHsKIAkmZG1hY19kZXZpY2UsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3JlYWx2aWV3X3BieC5jIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9yZWFsdmlld19wYnguYwppbmRleCBjZTZjNWQyLi43ZTRiYzZjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3JlYWx2aWV3X3BieC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcmVhbHZpZXdfcGJ4LmMKQEAgLTIzLDYgKzIzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KICNpbmNsdWRlIDxsaW51eC9hbWJhL2J1cy5oPgogI2luY2x1ZGUgPGxpbnV4L2FtYmEvcGwwNjEuaD4KKyNpbmNsdWRlIDxsaW51eC9hbWJhL21tY2kuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogCiAjaW5jbHVkZSA8YXNtL2lycS5oPgpAQCAtMzQsNyArMzUsNiBAQAogCiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL21tYy5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KIAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KQEAgLTE4MiwyOSArMTgyLDI5IEBACiAjZGVmaW5lIFBCWF9TU1BfRE1BCQl7IDksIDggfQogCiAvKiBGUEdBIFByaW1lY2VsbHMgKi8KLUFNQkFfREVWSUNFKGFhY2ksCSJmcGdhOjA0IiwJQUFDSSwJCU5VTEwpOwotQU1CQV9ERVZJQ0UobW1jMCwJImZwZ2E6MDUiLAlNTUNJMCwJCSZyZWFsdmlld19tbWMwX3BsYXRfZGF0YSk7Ci1BTUJBX0RFVklDRShrbWkwLAkiZnBnYTowNiIsCUtNSTAsCQlOVUxMKTsKLUFNQkFfREVWSUNFKGttaTEsCSJmcGdhOjA3IiwJS01JMSwJCU5VTEwpOwotQU1CQV9ERVZJQ0UodWFydDMsCSJmcGdhOjA5IiwJUEJYX1VBUlQzLAlOVUxMKTsKK0FNQkFfREVWSUNFKGFhY2ksCSJmcGdhOmFhY2kiLAlBQUNJLAkJTlVMTCk7CitBTUJBX0RFVklDRShtbWMwLAkiZnBnYTptbWMwIiwJTU1DSTAsCQkmcmVhbHZpZXdfbW1jMF9wbGF0X2RhdGEpOworQU1CQV9ERVZJQ0Uoa21pMCwJImZwZ2E6a21pMCIsCUtNSTAsCQlOVUxMKTsKK0FNQkFfREVWSUNFKGttaTEsCSJmcGdhOmttaTEiLAlLTUkxLAkJTlVMTCk7CitBTUJBX0RFVklDRSh1YXJ0MywJImZwZ2E6dWFydDMiLAlQQlhfVUFSVDMsCU5VTEwpOwogCiAvKiBEZXZDaGlwIFByaW1lY2VsbHMgKi8KLUFNQkFfREVWSUNFKHNtYywJImRldjowMCIsCVBCWF9TTUMsCU5VTEwpOwotQU1CQV9ERVZJQ0Uoc2N0bCwJImRldjplMCIsCVNDVEwsCQlOVUxMKTsKLUFNQkFfREVWSUNFKHdkb2csCSJkZXY6ZTEiLAlQQlhfV0FUQ0hET0csIAlOVUxMKTsKLUFNQkFfREVWSUNFKGdwaW8wLAkiZGV2OmU0IiwJUEJYX0dQSU8wLAkmZ3BpbzBfcGxhdF9kYXRhKTsKLUFNQkFfREVWSUNFKGdwaW8xLAkiZGV2OmU1IiwJR1BJTzEsCQkmZ3BpbzFfcGxhdF9kYXRhKTsKLUFNQkFfREVWSUNFKGdwaW8yLAkiZGV2OmU2IiwJR1BJTzIsCQkmZ3BpbzJfcGxhdF9kYXRhKTsKLUFNQkFfREVWSUNFKHJ0YywJImRldjplOCIsCVBCWF9SVEMsCU5VTEwpOwotQU1CQV9ERVZJQ0Uoc2NpMCwJImRldjpmMCIsCVNDSSwJCU5VTEwpOwotQU1CQV9ERVZJQ0UodWFydDAsCSJkZXY6ZjEiLAlQQlhfVUFSVDAsCU5VTEwpOwotQU1CQV9ERVZJQ0UodWFydDEsCSJkZXY6ZjIiLAlQQlhfVUFSVDEsCU5VTEwpOwotQU1CQV9ERVZJQ0UodWFydDIsCSJkZXY6ZjMiLAlQQlhfVUFSVDIsCU5VTEwpOwotQU1CQV9ERVZJQ0Uoc3NwMCwJImRldjpmNCIsCVBCWF9TU1AsCU5VTEwpOworQU1CQV9ERVZJQ0Uoc21jLAkiZGV2OnNtYyIsCVBCWF9TTUMsCU5VTEwpOworQU1CQV9ERVZJQ0Uoc2N0bCwJImRldjpzY3RsIiwJU0NUTCwJCU5VTEwpOworQU1CQV9ERVZJQ0Uod2RvZywJImRldjp3ZG9nIiwJUEJYX1dBVENIRE9HLCAJTlVMTCk7CitBTUJBX0RFVklDRShncGlvMCwJImRldjpncGlvMCIsCVBCWF9HUElPMCwJJmdwaW8wX3BsYXRfZGF0YSk7CitBTUJBX0RFVklDRShncGlvMSwJImRldjpncGlvMSIsCUdQSU8xLAkJJmdwaW8xX3BsYXRfZGF0YSk7CitBTUJBX0RFVklDRShncGlvMiwJImRldjpncGlvMiIsCUdQSU8yLAkJJmdwaW8yX3BsYXRfZGF0YSk7CitBTUJBX0RFVklDRShydGMsCSJkZXY6cnRjIiwJUEJYX1JUQywJTlVMTCk7CitBTUJBX0RFVklDRShzY2kwLAkiZGV2OnNjaTAiLAlTQ0ksCQlOVUxMKTsKK0FNQkFfREVWSUNFKHVhcnQwLAkiZGV2OnVhcnQwIiwJUEJYX1VBUlQwLAlOVUxMKTsKK0FNQkFfREVWSUNFKHVhcnQxLAkiZGV2OnVhcnQxIiwJUEJYX1VBUlQxLAlOVUxMKTsKK0FNQkFfREVWSUNFKHVhcnQyLAkiZGV2OnVhcnQyIiwJUEJYX1VBUlQyLAlOVUxMKTsKK0FNQkFfREVWSUNFKHNzcDAsCSJkZXY6c3NwMCIsCVBCWF9TU1AsCU5VTEwpOwogCiAvKiBQcmltZWNlbGxzIG9uIHRoZSBORUMgSVNTUCBjaGlwICovCi1BTUJBX0RFVklDRShjbGNkLAkiaXNzcDoyMCIsCVBCWF9DTENELAkmY2xjZF9wbGF0X2RhdGEpOwotQU1CQV9ERVZJQ0UoZG1hYywJImlzc3A6MzAiLAlETUFDLAkJTlVMTCk7CitBTUJBX0RFVklDRShjbGNkLAkiaXNzcDpjbGNkIiwJUEJYX0NMQ0QsCSZjbGNkX3BsYXRfZGF0YSk7CitBTUJBX0RFVklDRShkbWFjLAkiaXNzcDpkbWFjIiwJRE1BQywJCU5VTEwpOwogCiBzdGF0aWMgc3RydWN0IGFtYmFfZGV2aWNlICphbWJhX2RldnNbXSBfX2luaXRkYXRhID0gewogCSZkbWFjX2RldmljZSwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL0tjb25maWcKaW5kZXggZDhjMDIzZC4uM2Q0ZTlkYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL0tjb25maWcKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL0tjb25maWcKQEAgLTc3LDYgKzc3LDcgQEAKIAlzZWxlY3QgQ1BVX1MzQzI0MTAKIAlzZWxlY3QgUE1fSDE5NDAgaWYgUE0KIAlzZWxlY3QgUzNDX0RFVl9VU0JfSE9TVAorCXNlbGVjdCBTM0NfREVWX05BTkQKIAloZWxwCiAJICBTYXkgWSBoZXJlIGlmIHlvdSBhcmUgdXNpbmcgdGhlIEhQIElQQVEgSDE5NDAKIApAQCAtODksNiArOTAsNyBAQAogCWJvb2wgIkFjZXIgTjMwIGZhbWlseSIKIAlzZWxlY3QgQ1BVX1MzQzI0MTAKIAlzZWxlY3QgUzNDX0RFVl9VU0JfSE9TVAorCXNlbGVjdCBTM0NfREVWX05BTkQKIAloZWxwCiAJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHN1cHB0IGZvciB0aGUgQWNlciBOMzAsIEFjZXIgTjM1LAogCSAgTmF2bWFuIFBpTjU3MCwgWWFrdW1vIEFscGhhWCBvciBBaXJpcyBOQzA1IFBEQXMuCkBAIC0xMDMsNiArMTA1LDcgQEAKIAlzZWxlY3QgUzNDMjRYWF9EQ0xLCiAJc2VsZWN0IElTQQogCXNlbGVjdCBTM0NfREVWX1VTQl9IT1NUCisJc2VsZWN0IFMzQ19ERVZfTkFORAogCWhlbHAKIAkgIFNheSBZIGhlcmUgaWYgeW91IGFyZSB1c2luZyB0aGUgU2ltdGVjIEVsZWN0cm9uaWNzIEVCMjQxMElUWAogCSAgZGV2ZWxvcG1lbnQgYm9hcmQgKGFsc28ga25vd24gYXMgQkFTVCkKQEAgLTExMSw2ICsxMTQsNyBAQAogIAlib29sICJOZXhWaXNpb24gT1RPTSBCb2FyZCIKICAJc2VsZWN0IENQVV9TM0MyNDEwCiAJc2VsZWN0IFMzQ19ERVZfVVNCX0hPU1QKKwlzZWxlY3QgUzNDX0RFVl9OQU5ECiAJaGVscAogIAkgIFNheSBZIGhlcmUgaWYgeW91IGFyZSB1c2luZyB0aGUgTmV4IFZpc2lvbiBPVE9NIGJvYXJkCiAKQEAgLTE1NCw2ICsxNTgsNyBAQAogCWJvb2wgIlFUMjQxMCIKIAlzZWxlY3QgQ1BVX1MzQzI0MTAKIAlzZWxlY3QgUzNDX0RFVl9VU0JfSE9TVAorCXNlbGVjdCBTM0NfREVWX05BTkQKIAloZWxwCiAJICAgU2F5IFkgaGVyZSBpZiB5b3UgYXJlIHVzaW5nIHRoZSBBcm16b25lIFFUMjQxMAogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTIvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMi9LY29uZmlnCmluZGV4IDM1YzFiZGUuLmMyYmRjNDYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMi9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMi9LY29uZmlnCkBAIC00OCw2ICs0OCw3IEBACiAJYm9vbCAiTG9naXRlY2ggSml2ZSIKIAlzZWxlY3QgQ1BVX1MzQzI0MTIKIAlzZWxlY3QgUzNDX0RFVl9VU0JfSE9TVAorCXNlbGVjdCBTM0NfREVWX05BTkQKIAloZWxwCiAJICBTYXkgWSBoZXJlIGlmIHlvdSBhcmUgdXNpbmcgdGhlIExvZ2l0ZWNoIEppdmUuCiAKQEAgLTYxLDYgKzYyLDcgQEAKIAlzZWxlY3QgTUFDSF9TM0MyNDEzCiAJc2VsZWN0IE1BQ0hfU01ESwogCXNlbGVjdCBTM0NfREVWX1VTQl9IT1NUCisJc2VsZWN0IFMzQ19ERVZfTkFORAogCWhlbHAKIAkgIFNheSBZIGhlcmUgaWYgeW91IGFyZSB1c2luZyBhbiBTTURLMjQxMwogCkBAIC04NCw2ICs4Niw3IEBACiAJYm9vbCAiVk1TVE1TIgogCXNlbGVjdCBDUFVfUzNDMjQxMgogCXNlbGVjdCBTM0NfREVWX1VTQl9IT1NUCisJc2VsZWN0IFMzQ19ERVZfTkFORAogCWhlbHAKIAkgIFNheSBZIGhlcmUgaWYgeW91IGFyZSB1c2luZyBhbiBWU1RNUyBib2FyZAogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0NDAvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9LY29uZmlnCmluZGV4IDhhZTFiMjguLmQ3YmJhOTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9LY29uZmlnCkBAIC00OCw2ICs0OCw3IEBACiAJc2VsZWN0IFMzQzI0NDBfWFRBTF8xMjAwMDAwMAogCXNlbGVjdCBTM0MyNDEwX0lPVElNSU5HIGlmIFMzQzI0NDBfQ1BVRlJFUQogCXNlbGVjdCBTM0NfREVWX1VTQl9IT1NUCisJc2VsZWN0IFMzQ19ERVZfTkFORAogCWhlbHAKIAkgIFNheSBZIGhlcmUgaWYgeW91IGFyZSB1c2luZyB0aGUgU2ltdGVjIElNMjQ0MEQyMCBtb2R1bGUsIGFsc28KIAkgIGtub3duIGFzIHRoZSBPc2lyaXMuCkBAIC01Nyw2ICs1OCw3IEBACiAJc2VsZWN0IENQVV9TM0MyNDQwCiAJc2VsZWN0IFMzQzI0NDBfWFRBTF8xNjkzNDQwMAogCXNlbGVjdCBQTV9IMTk0MCBpZiBQTQorCXNlbGVjdCBTM0NfREVWX05BTkQKIAloZWxwCiAJICBTYXkgWSBoZXJlIGlmIHlvdSBhcmUgdXNpbmcgdGhlIEhQIGlQQVEgcngzNzE1LgogCkBAIC02Niw2ICs2OCw3IEBACiAJc2VsZWN0IFMzQzI0NDBfWFRBTF8xNjkzNDQwMAogCXNlbGVjdCBNQUNIX1NNREsKIAlzZWxlY3QgUzNDX0RFVl9VU0JfSE9TVAorCXNlbGVjdCBTM0NfREVWX05BTkQKIAloZWxwCiAJICBTYXkgWSBoZXJlIGlmIHlvdSBhcmUgdXNpbmcgdGhlIFNNREsyNDQwLgogCkBAIC03NCw2ICs3Nyw3IEBACiAgCXNlbGVjdCBDUFVfUzNDMjQ0MAogCXNlbGVjdCBTM0MyNDQwX1hUQUxfMTIwMDAwMDAKIAlzZWxlY3QgUzNDX0RFVl9VU0JfSE9TVAorCXNlbGVjdCBTM0NfREVWX05BTkQKIAloZWxwCiAgCSAgU2F5IFkgaGVyZSBpZiB5b3UgYXJlIHVzaW5nIHRoZSBOZXggVmlzaW9uIE5FWENPREVSIDI0NDAgTGlnaHQgQm9hcmQKIApAQCAtODgsNiArOTIsNyBAQAogCWJvb2wgIkF2YW50ZWNoIEFUMjQ0MEVWQiBkZXZlbG9wbWVudCBib2FyZCIKIAlzZWxlY3QgQ1BVX1MzQzI0NDAKIAlzZWxlY3QgUzNDX0RFVl9VU0JfSE9TVAorCXNlbGVjdCBTM0NfREVWX05BTkQKIAloZWxwCiAJICBTYXkgWSBoZXJlIGlmIHlvdSBhcmUgdXNpbmcgdGhlIEFUMjQ0MEVWQiBkZXZlbG9wbWVudCBib2FyZAogCkBAIC05Nyw2ICsxMDIsNyBAQAogCXNlbGVjdCBFRVBST01fQVQyNAogCXNlbGVjdCBMRURTX1RSSUdHRVJfQkFDS0xJR0hUCiAJc2VsZWN0IFNORF9TM0MyNFhYX1NPQ19TM0MyNFhYX1VEQTEzNFgKKwlzZWxlY3QgUzNDX0RFVl9OQU5ECiAJaGVscAogCSAgU2F5IFkgaGVyZSB0byBzZWxlY3Qgc3VwcG9ydCBmb3IgdGhlIE1JTkkyNDQwLiBJcyBhIDEwY20geCAxMGNtIGJvYXJkCiAJICBhdmFpbGFibGUgdmlhIHZhcmlvdXMgc291cmNlcy4gSXQgY2FuIGNvbWUgd2l0aCBhIDMuNSIgb3IgNyIgdG91Y2ggTENELgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2M2NDAwL0tjb25maWcgYi9hcmNoL2FybS9tYWNoLXMzYzY0MDAvS2NvbmZpZwppbmRleCBmNWFmMjEyLi43NzBiNzIwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzY0MDAvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLXMzYzY0MDAvS2NvbmZpZwpAQCAtMjYsNiArMjYsNyBAQAogICAgICAgIGJvb2wgIlNNREs2NDAwIgogCXNlbGVjdCBDUFVfUzNDNjQwMAogCXNlbGVjdCBTM0NfREVWX0hTTU1DCisJc2VsZWN0IFMzQ19ERVZfTkFORAogCXNlbGVjdCBTM0M2NDAwX1NFVFVQX1NESENJCiAJaGVscAogCSAgTWFjaGluZSBzdXBwb3J0IGZvciB0aGUgU2Ftc3VuZyBTTURLNjQwMApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2M2NDEwL0tjb25maWcgYi9hcmNoL2FybS9tYWNoLXMzYzY0MTAvS2NvbmZpZwppbmRleCBmOWQwZjA5Li41M2ZjM2ZmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzY0MTAvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLXMzYzY0MTAvS2NvbmZpZwpAQCAtMTAyLDYgKzEwMiw3IEBACiAJYm9vbCAiQWlyZ29vIEhNVCIKIAlzZWxlY3QgQ1BVX1MzQzY0MTAKIAlzZWxlY3QgUzNDX0RFVl9GQgorCXNlbGVjdCBTM0NfREVWX05BTkQKIAlzZWxlY3QgUzNDX0RFVl9VU0JfSE9TVAogCXNlbGVjdCBTM0M2NFhYX1NFVFVQX0ZCXzI0QlBQCiAJc2VsZWN0IEhBVkVfUFdNCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvS2NvbmZpZwppbmRleCA4MWZmZmY3Li40ZTVjMDdmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL0tjb25maWcKQEAgLTcxLDExICs3MSw2IEBACiAJICA8aHR0cDovL3d3dy5oYW5kaGVsZHMub3JnL0NvbXBhcS9pbmRleC5odG1sI2lQQVFfSDM2MDA+CiAJICA8aHR0cDovL3d3dy5jb21wYXEuY29tL3Byb2R1Y3RzL2hhbmRoZWxkcy9wb2NrZXRwYy8+CiAKLWNvbmZpZyBTQTExMDBfSDNYWFgKLQlib29sCi0JZGVwZW5kcyBvbiBTQTExMDBfSDMxMDAgfHwgU0ExMTAwX0gzNjAwCi0JZGVmYXVsdCB5Ci0KIGNvbmZpZyBTQTExMDBfQkFER0U0CiAJYm9vbCAiSFAgTGFicyBCYWRnZVBBRCA0IgogCXNlbGVjdCBTQTExMTEKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL01ha2VmaWxlIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvTWFrZWZpbGUKaW5kZXggOGE1NTQ2ZS4uYmI3YjgxOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvTWFrZWZpbGUKQEAgLTI1LDYgKzI1LDcgQEAKIAogb2JqLSQoQ09ORklHX1NBMTEwMF9DT0xMSUUpCQkrPSBjb2xsaWUubwogCitvYmotJChDT05GSUdfU0ExMTAwX0gzMTAwKQkJKz0gaDM2MDAubwogb2JqLSQoQ09ORklHX1NBMTEwMF9IMzYwMCkJCSs9IGgzNjAwLm8KIAogb2JqLSQoQ09ORklHX1NBMTEwMF9IQUNLS0lUKQkJKz0gaGFja2tpdC5vCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9kbWEuYyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL2RtYS5jCmluZGV4IDk1ZjljNWEuLmNiNDUyMWEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL2RtYS5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL2RtYS5jCkBAIC0zOSw3ICszOSw3IEBACiAKIHN0YXRpYyBzYTExMDBfZG1hX3QgZG1hX2NoYW5bU0ExMTAwX0RNQV9DSEFOTkVMU107CiAKLXN0YXRpYyBzcGlubG9ja190IGRtYV9saXN0X2xvY2s7CitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGRtYV9saXN0X2xvY2spOwogCiAKIHN0YXRpYyBpcnFyZXR1cm5fdCBkbWFfaXJxX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2X2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvdGltZS5jIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvdGltZS5jCmluZGV4IDk1ZDkyZTguLmI5Y2JiNTYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL3RpbWUuYworKysgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC90aW1lLmMKQEAgLTc3LDcgKzc3LDcgQEAKIAkuc2V0X21vZGUJPSBzYTExMDBfb3NtcjBfc2V0X21vZGUsCiB9OwogCi1zdGF0aWMgY3ljbGVfdCBzYTExMDBfcmVhZF9vc2NyKHZvaWQpCitzdGF0aWMgY3ljbGVfdCBzYTExMDBfcmVhZF9vc2NyKHN0cnVjdCBjbG9ja3NvdXJjZSAqcykKIHsKIAlyZXR1cm4gT1NDUjsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdTMwMC9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC11MzAwL0tjb25maWcKaW5kZXggMzM3YjlhYS4uODAxYjIxZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC11MzAwL0tjb25maWcKKysrIGIvYXJjaC9hcm0vbWFjaC11MzAwL0tjb25maWcKQEAgLTgxLDYgKzgxLDE4IEBACiAJCU1lbW9yeSBJbnRlcmZhY2UpIGZyb20gYm90aCBmcm9tIGFjY2VzcyBhbmQgYXBwbGljYXRpb24KIAkJc2lkZS4KIAorY29uZmlnIE1BQ0hfVTMwMF9TUElEVU1NWQorCWJvb2wgIlNTUC9TUEkgZHVtbXkgY2hpcCIKKwlzZWxlY3QgU1BJCisJc2VsZWN0IFNQSV9NQVNURVIKKwlzZWxlY3QgU1BJX1BMMDIyCisJaGVscAorCQlUaGlzIGNyZWF0ZXMgYSBzbWFsbCBrZXJuZWwgbW9kdWxlIHRoYXQgY3JlYXRlcyBhIGR1bW15CisJCVNQSSBkZXZpY2UgdG8gYmUgdXNlZCBmb3IgbG9vcGJhY2sgdGVzdHMuIFJlZ3VsYXJseSB1c2VkCisJCXRvIHRlc3QgcmVmZXJlbmNlIGRlc2lnbnMuIElmIHlvdSdyZSBub3QgdGVzdGluZyBTUEksCisJCXlvdSBkb24ndCBuZWVkIGl0LiBTZWxlY3RpbmcgdGhpcyB3aWxsIGFjdGl2YXRlIHRoZQorCQlTUEkgZnJhbWV3b3JrIGFuZCBBUk0gUEwwMjIgc3VwcG9ydC4KKwogY29tbWVudCAiQWxsIHRoZSBzZXR0aW5ncyBiZWxvdyBtdXN0IG1hdGNoIHRoZSBib290bG9hZGVyJ3Mgc2V0dGluZ3MiCiAKIGNvbmZpZyBNQUNIX1UzMDBfQUNDRVNTX01FTV9TSVpFCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXUzMDAvTWFrZWZpbGUgYi9hcmNoL2FybS9tYWNoLXUzMDAvTWFrZWZpbGUKaW5kZXggMjQ5NTBlMC4uODg1YjVjMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC11MzAwL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL21hY2gtdTMwMC9NYWtlZmlsZQpAQCAtOSwzICs5LDYgQEAKIAogb2JqLSQoQ09ORklHX0FSQ0hfVTMwMCkJICAgICAgICAgICs9IHUzMDAubwogb2JqLSQoQ09ORklHX01NQykgICAgICAgICAgICAgICAgICs9IG1tYy5vCitvYmotJChDT05GSUdfU1BJX1BMMDIyKSAgICAgICAgICAgKz0gc3BpLm8KK29iai0kKENPTkZJR19NQUNIX1UzMDBfU1BJRFVNTVkpICArPSBkdW1teXNwaWNoaXAubworb2JqLSQoQ09ORklHX0kyQ19TVFUzMDApICAgICAgICAgICs9IGkyYy5vCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXUzMDAvY29yZS5jIGIvYXJjaC9hcm0vbWFjaC11MzAwL2NvcmUuYwppbmRleCAyZTliOGNjLi5iZTYwZDZkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXUzMDAvY29yZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtdTMwMC9jb3JlLmMKQEAgLTMyLDYgKzMyLDggQEAKIAogI2luY2x1ZGUgImNsb2NrLmgiCiAjaW5jbHVkZSAibW1jLmgiCisjaW5jbHVkZSAic3BpLmgiCisjaW5jbHVkZSAiaTJjLmgiCiAKIC8qCiAgKiBTdGF0aWMgSS9PIG1hcHBpbmdzIHRoYXQgYXJlIG5lZWRlZCBmb3IgYm9vdGluZyB0aGUgVTMwMCBwbGF0Zm9ybXMuIFRoZQpAQCAtMzc4LDE0ICszODAsMTQgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGkyYzBfZGV2aWNlID0gewotCS5uYW1lID0gInN0ZGRjaTJjIiwKKwkubmFtZSA9ICJzdHUzMDAiLAogCS5pZCA9IDAsCiAJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKGkyYzBfcmVzb3VyY2VzKSwKIAkucmVzb3VyY2UgPSBpMmMwX3Jlc291cmNlcywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGkyYzFfZGV2aWNlID0gewotCS5uYW1lID0gInN0ZGRjaTJjIiwKKwkubmFtZSA9ICJzdHUzMDAiLAogCS5pZCA9IDEsCiAJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKGkyYzFfcmVzb3VyY2VzKSwKIAkucmVzb3VyY2UgPSBpMmMxX3Jlc291cmNlcywKQEAgLTYxMSw2ICs2MTMsOCBAQAogCS8qIFdhaXQgZm9yIHRoZSBQTEwyMDggdG8gbG9jayBpZiBub3QgbG9ja2VkIGluIHlldCAqLwogCXdoaWxlICghKHJlYWR3KFUzMDBfU1lTQ09OX1ZCQVNFICsgVTMwMF9TWVNDT05fQ1NSKSAmCiAJCSBVMzAwX1NZU0NPTl9DU1JfUExMMjA4X0xPQ0tfSU5EKSk7CisJLyogSW5pdGlhbGl6ZSBTUEkgZGV2aWNlIHdpdGggc29tZSBib2FyZCBzcGVjaWZpY3MgKi8KKwl1MzAwX3NwaV9pbml0KCZwbDAyMl9kZXZpY2UpOwogCiAJLyogUmVnaXN0ZXIgdGhlIEFNQkEgZGV2aWNlcyBpbiB0aGUgQU1CQSBidXMgYWJzdHJhY3Rpb24gbGF5ZXIgKi8KIAl1MzAwX2Nsb2NrX3ByaW1lY2VsbHMoKTsKQEAgLTYyMiw2ICs2MjYsMTIgQEAKIAogCXUzMDBfYXNzaWduX3BoeXNtZW0oKTsKIAorCS8qIFJlZ2lzdGVyIHN1YmRldmljZXMgb24gdGhlIEkyQyBidXNlcyAqLworCXUzMDBfaTJjX3JlZ2lzdGVyX2JvYXJkX2RldmljZXMoKTsKKworCS8qIFJlZ2lzdGVyIHN1YmRldmljZXMgb24gdGhlIFNQSSBidXMgKi8KKwl1MzAwX3NwaV9yZWdpc3Rlcl9ib2FyZF9kZXZpY2VzKCk7CisKIAkvKiBSZWdpc3RlciB0aGUgcGxhdGZvcm0gZGV2aWNlcyAqLwogCXBsYXRmb3JtX2FkZF9kZXZpY2VzKHBsYXRmb3JtX2RldnMsIEFSUkFZX1NJWkUocGxhdGZvcm1fZGV2cykpOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXUzMDAvZHVtbXlzcGljaGlwLmMgYi9hcmNoL2FybS9tYWNoLXUzMDAvZHVtbXlzcGljaGlwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTYyZjlkZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtdTMwMC9kdW1teXNwaWNoaXAuYwpAQCAtMCwwICsxLDI5MCBAQAorLyoKKyAqIGFyY2gvYXJtL21hY2gtdTMwMC9kdW1teXNwaWNoaXAuYworICoKKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA5IFNULUVyaWNzc29uIEFCCisgKiBMaWNlbnNlIHRlcm1zOiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSB2ZXJzaW9uIDIKKyAqIFRoaXMgaXMgYSBkdW1teSBsb29wYmFjayBTUEkgImNoaXAiIHVzZWQgZm9yIHRlc3RpbmcgU1BJLgorICogQXV0aG9yOiBMaW51cyBXYWxsZWlqIDxsaW51cy53YWxsZWlqQHN0ZXJpY3Nzb24uY29tPgorICovCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2ZzLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKy8qCisgKiBXQVJOSU5HISBEbyBub3QgaW5jbHVkZSB0aGlzIHBsMDIyLXNwZWNpZmljIGNvbnRyb2xsZXIgaGVhZGVyCisgKiBmb3IgYW55IGdlbmVyaWMgZHJpdmVyLiBJdCBpcyBvbmx5IGRvbmUgaW4gdGhpcyBkdW1teSBjaGlwCisgKiBiZWNhdXNlIHdlIGFsdGVyIHRoZSBjaGlwIGNvbmZpZ3VyYXRpb24gaW4gb3JkZXIgdG8gdGVzdCBzb21lCisgKiBkaWZmZXJlbnQgc2V0dGluZ3Mgb24gdGhlIGxvb3BiYWNrIGRldmljZS4gTm9ybWFsIGNoaXAgY29uZmlncworICogc2hhbGwgYmUgU1RBVElDIGFuZCBub3QgYWx0ZXJlZCBieSB0aGUgZHJpdmVyIQorICovCisjaW5jbHVkZSA8bGludXgvYW1iYS9wbDAyMi5oPgorCitzdHJ1Y3QgZHVtbXkgeworCXN0cnVjdCBkZXZpY2UgKmRldjsKKwlzdHJ1Y3QgbXV0ZXggbG9jazsKK307CisKKyNkZWZpbmUgRE1BX1RFU1RfU0laRSAyMDQ4CisKKy8qIFdoZW4gd2UgY2F0IC9zeXMvYnVzL3NwaS9kZXZpY2VzL3NwaTAuMC9sb29wdGVzdCB0aGlzIHdpbGwgYmUgdHJpZ2dlcmVkICovCitzdGF0aWMgc3NpemVfdCBkdW1teV9sb29wdGVzdChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IHNwaV9kZXZpY2UgKnNwaSA9IHRvX3NwaV9kZXZpY2UoZGV2KTsKKwlzdHJ1Y3QgZHVtbXkgKnBfZHVtbXkgPSBkZXZfZ2V0X2RydmRhdGEoJnNwaS0+ZGV2KTsKKworCS8qCisJICogV0FSTklORyEgRG8gbm90IGRlcmVmZXJlbmNlIHRoZSBjaGlwLXNwZWNpZmljIGRhdGEgaW4gYW55IG5vcm1hbAorCSAqIGRyaXZlciBmb3IgYSBjaGlwLiBJdCBpcyB1c3VhbGx5IFNUQVRJQyBhbmQgc2hhbGwgbm90IGJlIHJlYWQKKwkgKiBvciB3cml0dGVuIHRvLiBZb3VyIGNoaXAgZHJpdmVyIHNob3VsZCBOT1QgZGVwZW5kIG9uIGZpZWxkcyBpbiB0aGlzCisJICogc3RydWN0LCB0aGlzIGlzIGp1c3QgdXNlZCBoZXJlIHRvIGFsdGVyIHRoZSBiZWhhdmlvdXIgb2YgdGhlIGNoaXAKKwkgKiBpbiBvcmRlciB0byBwZXJmb3JtIHRlc3RzLgorCSAqLworCXN0cnVjdCBwbDAyMl9jb25maWdfY2hpcCAqY2hpcF9pbmZvID0gc3BpLT5jb250cm9sbGVyX2RhdGE7CisJaW50IHN0YXR1czsKKwl1OCB0eGJ1ZlsxNF0gPSB7MHhERSwgMHhBRCwgMHhCRSwgMHhFRiwgMHgyQiwgMHhBRCwKKwkJCTB4Q0EsIDB4RkUsIDB4QkEsIDB4QkUsIDB4QjEsIDB4MDUsCisJCQkweEYwLCAweDBEfTsKKwl1OCByeGJ1ZlsxNF07CisJdTggKmJpZ3R4YnVmX3ZpcnR1YWw7CisJdTggKmJpZ3J4YnVmX3ZpcnR1YWw7CisKKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZwX2R1bW15LT5sb2NrKSkKKwkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKworCWJpZ3R4YnVmX3ZpcnR1YWwgPSBrbWFsbG9jKERNQV9URVNUX1NJWkUsIEdGUF9LRVJORUwpOworCWlmIChiaWd0eGJ1Zl92aXJ0dWFsID09IE5VTEwpIHsKKwkJc3RhdHVzID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCWJpZ3J4YnVmX3ZpcnR1YWwgPSBrbWFsbG9jKERNQV9URVNUX1NJWkUsIEdGUF9LRVJORUwpOworCisJLyogRmlsbCBUWEJVRiB3aXRoIHNvbWUgaGFwcHkgcGF0dGVybiAqLworCW1lbXNldChiaWd0eGJ1Zl92aXJ0dWFsLCAweEFBLCBETUFfVEVTVF9TSVpFKTsKKworCS8qCisJICogRm9yY2UgY2hpcCB0byA4IGJpdCBtb2RlCisJICogV0FSTklORzogTkVWRVIgRE8gVEhJUyBJTiBSRUFMIERSSVZFUiBDT0RFLCBUSElTIFNIT1VMRCBCRSBTVEFUSUMhCisJICovCisJY2hpcF9pbmZvLT5kYXRhX3NpemUgPSBTU1BfREFUQV9CSVRTXzg7CisJLyogWW91IHNob3VsZCBOT1QgRE8gVEhJUyBFSVRIRVIgKi8KKwlzcGktPm1hc3Rlci0+c2V0dXAoc3BpKTsKKworCS8qIE5vdyBydW4gdGhlIHRlc3RzIGZvciA4Yml0IG1vZGUgKi8KKwlwcl9pbmZvKCJTaW1wbGUgdGVzdCAxOiB3cml0ZSAweEFBIGJ5dGUsIHJlYWQgYmFjayBnYXJiYWdlIGJ5dGUgIgorCQkiaW4gOGJpdCBtb2RlXG4iKTsKKwlzdGF0dXMgPSBzcGlfdzhyOChzcGksIDB4QUEpOworCWlmIChzdGF0dXMgPCAwKQorCQlwcl93YXJuaW5nKCJTaXBsZSB0ZXN0IDE6IEZBSUxVUkU6IHNwaV93cml0ZV90aGVuX3JlYWQgIgorCQkJICAgImZhaWxlZCB3aXRoIHN0YXR1cyAlZFxuIiwgc3RhdHVzKTsKKwllbHNlCisJCXByX2luZm8oIlNpbXBsZSB0ZXN0IDE6IFNVQ0NFU1MhXG4iKTsKKworCXByX2luZm8oIlNpbXBsZSB0ZXN0IDI6IHdyaXRlIDggYnl0ZXMsIHJlYWQgYmFjayA4IGJ5dGVzIGdhcmJhZ2UgIgorCQkiaW4gOGJpdCBtb2RlIChmdWxsIEZJRk8pXG4iKTsKKwlzdGF0dXMgPSBzcGlfd3JpdGVfdGhlbl9yZWFkKHNwaSwgJnR4YnVmWzBdLCA4LCAmcnhidWZbMF0sIDgpOworCWlmIChzdGF0dXMgPCAwKQorCQlwcl93YXJuaW5nKCJTaW1wbGUgdGVzdCAyOiBGQUlMVVJFOiBzcGlfd3JpdGVfdGhlbl9yZWFkKCkgIgorCQkJICAgImZhaWxlZCB3aXRoIHN0YXR1cyAlZFxuIiwgc3RhdHVzKTsKKwllbHNlCisJCXByX2luZm8oIlNpbXBsZSB0ZXN0IDI6IFNVQ0NFU1MhXG4iKTsKKworCXByX2luZm8oIlNpbXBsZSB0ZXN0IDM6IHdyaXRlIDE0IGJ5dGVzLCByZWFkIGJhY2sgMTQgYnl0ZXMgZ2FyYmFnZSAiCisJCSJpbiA4Yml0IG1vZGUgKHNlZSBpZiB3ZSBvdmVyZmxvdyBGSUZPKVxuIik7CisJc3RhdHVzID0gc3BpX3dyaXRlX3RoZW5fcmVhZChzcGksICZ0eGJ1ZlswXSwgMTQsICZyeGJ1ZlswXSwgMTQpOworCWlmIChzdGF0dXMgPCAwKQorCQlwcl93YXJuaW5nKCJTaW1wbGUgdGVzdCAzOiBGQUlMVVJFOiBmYWlsZWQgd2l0aCBzdGF0dXMgJWQgIgorCQkJICAgIihwcm9iYWJseSBGSUZPIG92ZXJydW4pXG4iLCBzdGF0dXMpOworCWVsc2UKKwkJcHJfaW5mbygiU2ltcGxlIHRlc3QgMzogU1VDQ0VTUyFcbiIpOworCisJcHJfaW5mbygiU2ltcGxlIHRlc3QgNDogd3JpdGUgOCBieXRlcyB3aXRoIHNwaV93cml0ZSgpLCByZWFkIDggIgorCQkiYnl0ZXMgZ2FyYmFnZSB3aXRoIHNwaV9yZWFkKCkgaW4gOGJpdCBtb2RlXG4iKTsKKwlzdGF0dXMgPSBzcGlfd3JpdGUoc3BpLCAmdHhidWZbMF0sIDgpOworCWlmIChzdGF0dXMgPCAwKQorCQlwcl93YXJuaW5nKCJTaW1wbGUgdGVzdCA0IHN0ZXAgMTogRkFJTFVSRTogc3BpX3dyaXRlKCkgIgorCQkJICAgImZhaWxlZCB3aXRoIHN0YXR1cyAlZFxuIiwgc3RhdHVzKTsKKwllbHNlCisJCXByX2luZm8oIlNpbXBsZSB0ZXN0IDQgc3RlcCAxOiBTVUNDRVNTIVxuIik7CisJc3RhdHVzID0gc3BpX3JlYWQoc3BpLCAmcnhidWZbMF0sIDgpOworCWlmIChzdGF0dXMgPCAwKQorCQlwcl93YXJuaW5nKCJTaW1wbGUgdGVzdCA0IHN0ZXAgMjogRkFJTFVSRTogc3BpX3JlYWQoKSAiCisJCQkgICAiZmFpbGVkIHdpdGggc3RhdHVzICVkXG4iLCBzdGF0dXMpOworCWVsc2UKKwkJcHJfaW5mbygiU2ltcGxlIHRlc3QgNCBzdGVwIDI6IFNVQ0NFU1MhXG4iKTsKKworCXByX2luZm8oIlNpbXBsZSB0ZXN0IDU6IHdyaXRlIDE0IGJ5dGVzIHdpdGggc3BpX3dyaXRlKCksIHJlYWQgIgorCQkiMTQgYnl0ZXMgZ2FyYmFnZSB3aXRoIHNwaV9yZWFkKCkgaW4gOGJpdCBtb2RlXG4iKTsKKwlzdGF0dXMgPSBzcGlfd3JpdGUoc3BpLCAmdHhidWZbMF0sIDE0KTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJcHJfd2FybmluZygiU2ltcGxlIHRlc3QgNSBzdGVwIDE6IEZBSUxVUkU6IHNwaV93cml0ZSgpICIKKwkJCSAgICJmYWlsZWQgd2l0aCBzdGF0dXMgJWQgKHByb2JhYmx5IEZJRk8gb3ZlcnJ1bilcbiIsCisJCQkgICBzdGF0dXMpOworCWVsc2UKKwkJcHJfaW5mbygiU2ltcGxlIHRlc3QgNSBzdGVwIDE6IFNVQ0NFU1MhXG4iKTsKKwlzdGF0dXMgPSBzcGlfcmVhZChzcGksICZyeGJ1ZlswXSwgMTQpOworCWlmIChzdGF0dXMgPCAwKQorCQlwcl93YXJuaW5nKCJTaW1wbGUgdGVzdCA1IHN0ZXAgMjogRkFJTFVSRTogc3BpX3JlYWQoKSAiCisJCQkgICAiZmFpbGVkIHdpdGggc3RhdHVzICVkIChwcm9iYWJseSBGSUZPIG92ZXJydW4pXG4iLAorCQkJICAgc3RhdHVzKTsKKwllbHNlCisJCXByX2luZm8oIlNpbXBsZSB0ZXN0IDU6IFNVQ0NFU1MhXG4iKTsKKworCXByX2luZm8oIlNpbXBsZSB0ZXN0IDY6IHdyaXRlICVkIGJ5dGVzIHdpdGggc3BpX3dyaXRlKCksICIKKwkJInJlYWQgJWQgYnl0ZXMgZ2FyYmFnZSB3aXRoIHNwaV9yZWFkKCkgaW4gOGJpdCBtb2RlXG4iLAorCQlETUFfVEVTVF9TSVpFLCBETUFfVEVTVF9TSVpFKTsKKwlzdGF0dXMgPSBzcGlfd3JpdGUoc3BpLCAmYmlndHhidWZfdmlydHVhbFswXSwgRE1BX1RFU1RfU0laRSk7CisJaWYgKHN0YXR1cyA8IDApCisJCXByX3dhcm5pbmcoIlNpbXBsZSB0ZXN0IDYgc3RlcCAxOiBGQUlMVVJFOiBzcGlfd3JpdGUoKSAiCisJCQkgICAiZmFpbGVkIHdpdGggc3RhdHVzICVkIChwcm9iYWJseSBGSUZPIG92ZXJydW4pXG4iLAorCQkJICAgc3RhdHVzKTsKKwllbHNlCisJCXByX2luZm8oIlNpbXBsZSB0ZXN0IDYgc3RlcCAxOiBTVUNDRVNTIVxuIik7CisJc3RhdHVzID0gc3BpX3JlYWQoc3BpLCAmYmlncnhidWZfdmlydHVhbFswXSwgRE1BX1RFU1RfU0laRSk7CisJaWYgKHN0YXR1cyA8IDApCisJCXByX3dhcm5pbmcoIlNpbXBsZSB0ZXN0IDYgc3RlcCAyOiBGQUlMVVJFOiBzcGlfcmVhZCgpICIKKwkJCSAgICJmYWlsZWQgd2l0aCBzdGF0dXMgJWQgKHByb2JhYmx5IEZJRk8gb3ZlcnJ1bilcbiIsCisJCQkgICBzdGF0dXMpOworCWVsc2UKKwkJcHJfaW5mbygiU2ltcGxlIHRlc3QgNjogU1VDQ0VTUyFcbiIpOworCisKKwkvKgorCSAqIEZvcmNlIGNoaXAgdG8gMTYgYml0IG1vZGUKKwkgKiBXQVJOSU5HOiBORVZFUiBETyBUSElTIElOIFJFQUwgRFJJVkVSIENPREUsIFRISVMgU0hPVUxEIEJFIFNUQVRJQyEKKwkgKi8KKwljaGlwX2luZm8tPmRhdGFfc2l6ZSA9IFNTUF9EQVRBX0JJVFNfMTY7CisJLyogWW91IHNob3VsZCBOT1QgRE8gVEhJUyBFSVRIRVIgKi8KKwlzcGktPm1hc3Rlci0+c2V0dXAoc3BpKTsKKworCXByX2luZm8oIlNpbXBsZSB0ZXN0IDc6IHdyaXRlIDB4QUEgYnl0ZSwgcmVhZCBiYWNrIGdhcmJhZ2UgYnl0ZSAiCisJCSJpbiAxNmJpdCBidXMgbW9kZVxuIik7CisJc3RhdHVzID0gc3BpX3c4cjgoc3BpLCAweEFBKTsKKwlpZiAoc3RhdHVzID09IC1FSU8pCisJCXByX2luZm8oIlNpbXBsZSB0ZXN0IDc6IFNVQ0NFU1MhIChleHBlY3RlZCBmYWlsdXJlIHdpdGggIgorCQkJInN0YXR1cyBFSU8pXG4iKTsKKwllbHNlIGlmIChzdGF0dXMgPCAwKQorCQlwcl93YXJuaW5nKCJTaXBsZSB0ZXN0IDc6IEZBSUxVUkU6IHNwaV93cml0ZV90aGVuX3JlYWQgIgorCQkJICAgImZhaWxlZCB3aXRoIHN0YXR1cyAlZFxuIiwgc3RhdHVzKTsKKwllbHNlCisJCXByX3dhcm5pbmcoIlNpcGxlIHRlc3QgNzogRkFJTFVSRTogc3BpX3dyaXRlX3RoZW5fcmVhZCAiCisJCQkgICAic3VjY2VlZGVkIGJ1dCBpdCB3YXMgZXhwZWN0ZWQgdG8gZmFpbCFcbiIpOworCisJcHJfaW5mbygiU2ltcGxlIHRlc3QgODogd3JpdGUgOCBieXRlcywgcmVhZCBiYWNrIDggYnl0ZXMgZ2FyYmFnZSAiCisJCSJpbiAxNmJpdCBtb2RlIChmdWxsIEZJRk8pXG4iKTsKKwlzdGF0dXMgPSBzcGlfd3JpdGVfdGhlbl9yZWFkKHNwaSwgJnR4YnVmWzBdLCA4LCAmcnhidWZbMF0sIDgpOworCWlmIChzdGF0dXMgPCAwKQorCQlwcl93YXJuaW5nKCJTaW1wbGUgdGVzdCA4OiBGQUlMVVJFOiBzcGlfd3JpdGVfdGhlbl9yZWFkKCkgIgorCQkJICAgImZhaWxlZCB3aXRoIHN0YXR1cyAlZFxuIiwgc3RhdHVzKTsKKwllbHNlCisJCXByX2luZm8oIlNpbXBsZSB0ZXN0IDg6IFNVQ0NFU1MhXG4iKTsKKworCXByX2luZm8oIlNpbXBsZSB0ZXN0IDk6IHdyaXRlIDE0IGJ5dGVzLCByZWFkIGJhY2sgMTQgYnl0ZXMgZ2FyYmFnZSAiCisJCSJpbiAxNmJpdCBtb2RlIChzZWUgaWYgd2Ugb3ZlcmZsb3cgRklGTylcbiIpOworCXN0YXR1cyA9IHNwaV93cml0ZV90aGVuX3JlYWQoc3BpLCAmdHhidWZbMF0sIDE0LCAmcnhidWZbMF0sIDE0KTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJcHJfd2FybmluZygiU2ltcGxlIHRlc3QgOTogRkFJTFVSRTogZmFpbGVkIHdpdGggc3RhdHVzICVkICIKKwkJCSAgICIocHJvYmFibHkgRklGTyBvdmVycnVuKVxuIiwgc3RhdHVzKTsKKwllbHNlCisJCXByX2luZm8oIlNpbXBsZSB0ZXN0IDk6IFNVQ0NFU1MhXG4iKTsKKworCXByX2luZm8oIlNpbXBsZSB0ZXN0IDEwOiB3cml0ZSAlZCBieXRlcyB3aXRoIHNwaV93cml0ZSgpLCAiCisJICAgICAgICJyZWFkICVkIGJ5dGVzIGdhcmJhZ2Ugd2l0aCBzcGlfcmVhZCgpIGluIDE2Yml0IG1vZGVcbiIsCisJICAgICAgIERNQV9URVNUX1NJWkUsIERNQV9URVNUX1NJWkUpOworCXN0YXR1cyA9IHNwaV93cml0ZShzcGksICZiaWd0eGJ1Zl92aXJ0dWFsWzBdLCBETUFfVEVTVF9TSVpFKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJcHJfd2FybmluZygiU2ltcGxlIHRlc3QgMTAgc3RlcCAxOiBGQUlMVVJFOiBzcGlfd3JpdGUoKSAiCisJCQkgICAiZmFpbGVkIHdpdGggc3RhdHVzICVkIChwcm9iYWJseSBGSUZPIG92ZXJydW4pXG4iLAorCQkJICAgc3RhdHVzKTsKKwllbHNlCisJCXByX2luZm8oIlNpbXBsZSB0ZXN0IDEwIHN0ZXAgMTogU1VDQ0VTUyFcbiIpOworCisJc3RhdHVzID0gc3BpX3JlYWQoc3BpLCAmYmlncnhidWZfdmlydHVhbFswXSwgRE1BX1RFU1RfU0laRSk7CisJaWYgKHN0YXR1cyA8IDApCisJCXByX3dhcm5pbmcoIlNpbXBsZSB0ZXN0IDEwIHN0ZXAgMjogRkFJTFVSRTogc3BpX3JlYWQoKSAiCisJCQkgICAiZmFpbGVkIHdpdGggc3RhdHVzICVkIChwcm9iYWJseSBGSUZPIG92ZXJydW4pXG4iLAorCQkJICAgc3RhdHVzKTsKKwllbHNlCisJCXByX2luZm8oIlNpbXBsZSB0ZXN0IDEwOiBTVUNDRVNTIVxuIik7CisKKwlzdGF0dXMgPSBzcHJpbnRmKGJ1ZiwgImxvb3AgdGVzdCBjb21wbGV0ZVxuIik7CisJa2ZyZWUoYmlncnhidWZfdmlydHVhbCk7CisJa2ZyZWUoYmlndHhidWZfdmlydHVhbCk7Cisgb3V0OgorCW11dGV4X3VubG9jaygmcF9kdW1teS0+bG9jayk7CisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIERFVklDRV9BVFRSKGxvb3B0ZXN0LCBTX0lSVUdPLCBkdW1teV9sb29wdGVzdCwgTlVMTCk7CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHBsMDIyX2R1bW15X3Byb2JlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCit7CisJc3RydWN0IGR1bW15ICpwX2R1bW15OworCWludCBzdGF0dXM7CisKKwlkZXZfaW5mbygmc3BpLT5kZXYsICJwcm9iaW5nIGR1bW15IFNQSSBkZXZpY2VcbiIpOworCisJcF9kdW1teSA9IGt6YWxsb2Moc2l6ZW9mICpwX2R1bW15LCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBfZHVtbXkpCisJCXJldHVybiAtRU5PTUVNOworCisJZGV2X3NldF9kcnZkYXRhKCZzcGktPmRldiwgcF9kdW1teSk7CisJbXV0ZXhfaW5pdCgmcF9kdW1teS0+bG9jayk7CisKKwkvKiBzeXNmcyBob29rICovCisJc3RhdHVzID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZzcGktPmRldiwgJmRldl9hdHRyX2xvb3B0ZXN0KTsKKwlpZiAoc3RhdHVzKSB7CisJCWRldl9kYmcoJnNwaS0+ZGV2LCAiZGV2aWNlX2NyZWF0ZV9maWxlIGxvb3B0ZXN0IGZhaWx1cmUuXG4iKTsKKwkJZ290byBvdXRfZGV2X2NyZWF0ZV9sb29wdGVzdF9mYWlsZWQ7CisJfQorCisJcmV0dXJuIDA7CisKK291dF9kZXZfY3JlYXRlX2xvb3B0ZXN0X2ZhaWxlZDoKKwlkZXZfc2V0X2RydmRhdGEoJnNwaS0+ZGV2LCBOVUxMKTsKKwlrZnJlZShwX2R1bW15KTsKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBwbDAyMl9kdW1teV9yZW1vdmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKK3sKKwlzdHJ1Y3QgZHVtbXkgKnBfZHVtbXkgPSBkZXZfZ2V0X2RydmRhdGEoJnNwaS0+ZGV2KTsKKworCWRldl9pbmZvKCZzcGktPmRldiwgInJlbW92aW5nIGR1bW15IFNQSSBkZXZpY2VcbiIpOworCWRldmljZV9yZW1vdmVfZmlsZSgmc3BpLT5kZXYsICZkZXZfYXR0cl9sb29wdGVzdCk7CisJZGV2X3NldF9kcnZkYXRhKCZzcGktPmRldiwgTlVMTCk7CisJa2ZyZWUocF9kdW1teSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzcGlfZHJpdmVyIHBsMDIyX2R1bW15X2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZQk9ICJzcGktZHVtbXkiLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwl9LAorCS5wcm9iZQk9IHBsMDIyX2R1bW15X3Byb2JlLAorCS5yZW1vdmUJPSBfX2RldmV4aXRfcChwbDAyMl9kdW1teV9yZW1vdmUpLAorfTsKKworc3RhdGljIGludCBfX2luaXQgcGwwMjJfaW5pdF9kdW1teSh2b2lkKQoreworCXJldHVybiBzcGlfcmVnaXN0ZXJfZHJpdmVyKCZwbDAyMl9kdW1teV9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgcGwwMjJfZXhpdF9kdW1teSh2b2lkKQoreworCXNwaV91bnJlZ2lzdGVyX2RyaXZlcigmcGwwMjJfZHVtbXlfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQocGwwMjJfaW5pdF9kdW1teSk7Cittb2R1bGVfZXhpdChwbDAyMl9leGl0X2R1bW15KTsKKworTU9EVUxFX0FVVEhPUigiTGludXMgV2FsbGVpaiA8bGludXMud2FsbGVpakBzdGVyaWNzc29uLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiUEwwMjIgU1NQL1NQSSBEVU1NWSBMaW51eCBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdTMwMC9ncGlvLmMgYi9hcmNoL2FybS9tYWNoLXUzMDAvZ3Bpby5jCmluZGV4IDMwOGNkYjEuLjBiMzU4MjYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdTMwMC9ncGlvLmMKKysrIGIvYXJjaC9hcm0vbWFjaC11MzAwL2dwaW8uYwpAQCAtMjUsMTEgKzI1LDYgQEAKICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAKLS8qIE5lZWQgYWNjZXNzIHRvIFNZU0NPTiByZWdpc3RlcnMgZm9yIFBBRG11eGluZyAqLwotI2luY2x1ZGUgPG1hY2gvc3lzY29uLmg+Ci0KLSNpbmNsdWRlICJwYWRtdXguaCIKLQogLyogUmVmZXJlbmNlIHRvIEdQSU8gYmxvY2sgY2xvY2sgKi8KIHN0YXRpYyBzdHJ1Y3QgY2xrICpjbGs7CiAKQEAgLTI4Niw2ICsyODEsMTYgQEAKIH0KIEVYUE9SVF9TWU1CT0woZ3Bpb191bnJlZ2lzdGVyX2NhbGxiYWNrKTsKIAorLyogTm9uLXplcm8gbWVhbnMgdmFsaWQgKi8KK2ludCBncGlvX2lzX3ZhbGlkKGludCBudW1iZXIpCit7CisJaWYgKG51bWJlciA+PSAwICYmCisJICAgIG51bWJlciA8IChVMzAwX0dQSU9fTlVNX1BPUlRTICogVTMwMF9HUElPX1BJTlNfUEVSX1BPUlQpKQorCQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0woZ3Bpb19pc192YWxpZCk7CisKIGludCBncGlvX3JlcXVlc3QodW5zaWduZWQgZ3BpbywgY29uc3QgY2hhciAqbGFiZWwpCiB7CiAJaWYgKGdwaW9fcGluW2dwaW9dLnVzZXJzKQpAQCAtNjA2LDE0ICs2MTEsNiBAQAogCXdyaXRlbChVMzAwX0dQSU9fQ1JfQkxPQ0tfQ0xLUlFfRU5BQkxFLCB2aXJ0YmFzZSArIFUzMDBfR1BJT19DUik7CiAjZW5kaWYKIAotCS8qIFNldCB1cCBzb21lIHBhZG11eGluZyBoZXJlICovCi0jaWZkZWYgQ09ORklHX01NQwotCXBteF9zZXRfbWlzc2lvbl9tb2RlX21tYygpOwotI2VuZGlmCi0jaWZkZWYgQ09ORklHX1NQSV9QTDAyMgotCXBteF9zZXRfbWlzc2lvbl9tb2RlX3NwaSgpOwotI2VuZGlmCi0KIAlncGlvX3NldF9pbml0aWFsX3ZhbHVlcygpOwogCiAJZm9yIChudW1faXJxcyA9IDAgOyBudW1faXJxcyA8IFUzMDBfR1BJT19OVU1fUE9SVFM7IG51bV9pcnFzKyspIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdTMwMC9pMmMuYyBiL2FyY2gvYXJtL21hY2gtdTMwMC9pMmMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMGJlMWY4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC11MzAwL2kyYy5jCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisgKiBhcmNoL2FybS9tYWNoLXUzMDAvaTJjLmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgU1QtRXJpY3Nzb24gQUIKKyAqIExpY2Vuc2UgdGVybXM6IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIHZlcnNpb24gMgorICoKKyAqIFJlZ2lzdGVyIGJvYXJkIGkyYyBkZXZpY2VzCisgKiBBdXRob3I6IExpbnVzIFdhbGxlaWogPGxpbnVzLndhbGxlaWpAc3Rlcmljc3Nvbi5jb20+CisgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxtYWNoL2lycXMuaD4KKworc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBfX2luaXRkYXRhIGJ1czBfaTJjX2JvYXJkX2luZm9bXSA9IHsKKwl7CisJCS50eXBlID0gImFiMzEwMCIsCisJCS5hZGRyID0gMHg0OCwKKwkJLmlycSA9IElSUV9VMzAwX0lSUTBfRVhULAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIF9faW5pdGRhdGEgYnVzMV9pMmNfYm9hcmRfaW5mb1tdID0geworI2lmZGVmIENPTkZJR19NQUNIX1UzMDBfQlMzMzUKKwl7CisJCS50eXBlID0gImZ3Y2FtIiwKKwkJLmFkZHIgPSAweDEwLAorCX0sCisJeworCQkudHlwZSA9ICJmd2NhbSIsCisJCS5hZGRyID0gMHg1ZCwKKwl9LAorI2Vsc2UKKwl7IH0sCisjZW5kaWYKK307CisKK3ZvaWQgX19pbml0IHUzMDBfaTJjX3JlZ2lzdGVyX2JvYXJkX2RldmljZXModm9pZCkKK3sKKwlpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbygwLCBidXMwX2kyY19ib2FyZF9pbmZvLAorCQkJCUFSUkFZX1NJWkUoYnVzMF9pMmNfYm9hcmRfaW5mbykpOworCWkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDEsIGJ1czFfaTJjX2JvYXJkX2luZm8sCisJCQkJQVJSQVlfU0laRShidXMxX2kyY19ib2FyZF9pbmZvKSk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXUzMDAvaTJjLmggYi9hcmNoL2FybS9tYWNoLXUzMDAvaTJjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDg1YzAyZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtdTMwMC9pMmMuaApAQCAtMCwwICsxLDIzIEBACisvKgorICogYXJjaC9hcm0vbWFjaC11MzAwL2kyYy5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IFNULUVyaWNzc29uIEFCCisgKiBMaWNlbnNlIHRlcm1zOiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSB2ZXJzaW9uIDIKKyAqCisgKiBSZWdpc3RlciBib2FyZCBpMmMgZGV2aWNlcworICogQXV0aG9yOiBMaW51cyBXYWxsZWlqIDxsaW51cy53YWxsZWlqQHN0ZXJpY3Nzb24uY29tPgorICovCisKKyNpZm5kZWYgTUFDSF9VMzAwX0kyQ19ICisjZGVmaW5lIE1BQ0hfVTMwMF9JMkNfSAorCisjaWZkZWYgQ09ORklHX0kyQ19TVFUzMDAKK3ZvaWQgX19pbml0IHUzMDBfaTJjX3JlZ2lzdGVyX2JvYXJkX2RldmljZXModm9pZCk7CisjZWxzZQorLyogQ29tcGlsZSBvdXQgdGhpcyBzdHVmZiBpZiBubyBJMkMgYWRhcHRlciBpcyBhdmFpbGFibGUgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2luaXQgdTMwMF9pMmNfcmVnaXN0ZXJfYm9hcmRfZGV2aWNlcyh2b2lkKQoreworfQorI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC11MzAwL2luY2x1ZGUvbWFjaC9ncGlvLmggYi9hcmNoL2FybS9tYWNoLXUzMDAvaW5jbHVkZS9tYWNoL2dwaW8uaAppbmRleCBjODE3NDEyLi43YjFmYzk4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXUzMDAvaW5jbHVkZS9tYWNoL2dwaW8uaAorKysgYi9hcmNoL2FybS9tYWNoLXUzMDAvaW5jbHVkZS9tYWNoL2dwaW8uaApAQCAtMjU4LDYgKzI1OCw3IEBACiAjZGVmaW5lIFBJTl9UT19QT1JUKHZhbCkgKHZhbCA+PiAzKQogCiAvKiBUaGVzZSBjYW4gYmUgZm91bmQgaW4gYXJjaC9hcm0vbWFjaC11MzAwL2dwaW8uYyAqLworZXh0ZXJuIGludCBncGlvX2lzX3ZhbGlkKGludCBudW1iZXIpOwogZXh0ZXJuIGludCBncGlvX3JlcXVlc3QodW5zaWduZWQgZ3BpbywgY29uc3QgY2hhciAqbGFiZWwpOwogZXh0ZXJuIHZvaWQgZ3Bpb19mcmVlKHVuc2lnbmVkIGdwaW8pOwogZXh0ZXJuIGludCBncGlvX2RpcmVjdGlvbl9pbnB1dCh1bnNpZ25lZCBncGlvKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdTMwMC9pbmNsdWRlL21hY2gvbWVtb3J5LmggYi9hcmNoL2FybS9tYWNoLXUzMDAvaW5jbHVkZS9tYWNoL21lbW9yeS5oCmluZGV4IGJmMTM0YmMuLmFiMDAwZGYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdTMwMC9pbmNsdWRlL21hY2gvbWVtb3J5LmgKKysrIGIvYXJjaC9hcm0vbWFjaC11MzAwL2luY2x1ZGUvbWFjaC9tZW1vcnkuaApAQCAtMzUsNiArMzUsMTQgQEAKICNlbmRpZgogCiAvKgorICogVENNIG1lbW9yeSB3aGVyZWFib3V0cworICovCisjZGVmaW5lIElUQ01fT0ZGU0VUCTB4ZmZmZjIwMDAKKyNkZWZpbmUgSVRDTV9FTkQJMHhmZmZmM2ZmZgorI2RlZmluZSBEVENNX09GRlNFVAkweGZmZmY0MDAwCisjZGVmaW5lIERUQ01fRU5ECTB4ZmZmZjVmZmYKKworLyoKICAqIFdlIGVuYWJsZSBhIHJlYWwgYmlnIERNQSBidWZmZXIgaWYgbmVlZCBiZS4KICAqLwogI2RlZmluZSBDT05TSVNURU5UX0RNQV9TSVpFIFNaXzRNCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXUzMDAvaW5jbHVkZS9tYWNoL3N5c2Nvbi5oIGIvYXJjaC9hcm0vbWFjaC11MzAwL2luY2x1ZGUvbWFjaC9zeXNjb24uaAppbmRleCAxYzkwZDFiLi43NDQ0ZjVjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXUzMDAvaW5jbHVkZS9tYWNoL3N5c2Nvbi5oCisrKyBiL2FyY2gvYXJtL21hY2gtdTMwMC9pbmNsdWRlL21hY2gvc3lzY29uLmgKQEAgLTI0MCw4ICsyNDAsMTMgQEAKICNkZWZpbmUgVTMwMF9TWVNDT05fUE1DMUxSX0NESV9NQVNLCQkJCSgweEMwMDApCiAjZGVmaW5lIFUzMDBfU1lTQ09OX1BNQzFMUl9DRElfQ0RJCQkJCSgweDAwMDApCiAjZGVmaW5lIFUzMDBfU1lTQ09OX1BNQzFMUl9DRElfRU1JRgkJCQkoMHg0MDAwKQorI2lmZGVmIENPTkZJR19NQUNIX1UzMDBfQlMzMzUKKyNkZWZpbmUgVTMwMF9TWVNDT05fUE1DMUxSX0NESV9DREkyCQkJCSgweDgwMDApCisjZGVmaW5lIFUzMDBfU1lTQ09OX1BNQzFMUl9DRElfV0NETUFfQVBQX0dQSU8JCQkoMHhDMDAwKQorI2VsaWYgQ09ORklHX01BQ0hfVTMwMF9CUzM2NQogI2RlZmluZSBVMzAwX1NZU0NPTl9QTUMxTFJfQ0RJX0dQSU8JCQkJKDB4ODAwMCkKICNkZWZpbmUgVTMwMF9TWVNDT05fUE1DMUxSX0NESV9XQ0RNQQkJCQkoMHhDMDAwKQorI2VuZGlmCiAjZGVmaW5lIFUzMDBfU1lTQ09OX1BNQzFMUl9QRElfTUFTSwkJCQkoMHgzMDAwKQogI2RlZmluZSBVMzAwX1NZU0NPTl9QTUMxTFJfUERJX1BESQkJCQkoMHgwMDAwKQogI2RlZmluZSBVMzAwX1NZU0NPTl9QTUMxTFJfUERJX0VHRwkJCQkoMHgxMDAwKQpAQCAtMzQ1LDE5ICszNTAsNjkgQEAKICNkZWZpbmUgVTMwMF9TWVNDT05fTU1DUl9NQVNLCQkJCQkoMHgwMDAzKQogI2RlZmluZSBVMzAwX1NZU0NPTl9NTUNSX01NQ19GQl9DTEtfU0VMX0VOQUJMRQkJCSgweDAwMDIpCiAjZGVmaW5lIFUzMDBfU1lTQ09OX01NQ1JfTVNQUk9fRlJFUVNFTF9FTkFCTEUJCQkoMHgwMDAxKQotCisvKiBQdWxsIHVwL2Rvd24gY29udHJvbCAoUi9XKSAqLworI2RlZmluZSBVMzAwX1NZU0NPTl9QVUNSCQkJCQkoMHgxMDQpCisjZGVmaW5lIFUzMDBfU1lTQ09OX1BVQ1JfRU1JRl8xX1dBSVRfTl9QVV9FTkFCTEUJCSgweDAyMDApCisjZGVmaW5lIFUzMDBfU1lTQ09OX1BVQ1JfRU1JRl8xX05GSUZfUkVBRFlfUFVfRU5BQkxFCQkoMHgwMTAwKQorI2RlZmluZSBVMzAwX1NZU0NPTl9QVUNSX0VNSUZfMV8xNkJJVF9QVV9FTkFCTEUJCQkoMHgwMDgwKQorI2RlZmluZSBVMzAwX1NZU0NPTl9QVUNSX0VNSUZfMV84QklUX1BVX0VOQUJMRQkJCSgweDAwNDApCisjZGVmaW5lIFUzMDBfU1lTQ09OX1BVQ1JfS0VZX0lOX1BVX0VOX01BU0sJCQkoMHgwMDNGKQorLyogUGFkbXV4IDIgY29udHJvbCAqLworI2RlZmluZSBVMzAwX1NZU0NPTl9QTUMyUgkJCQkJKDB4MTAwKQorI2RlZmluZSBVMzAwX1NZU0NPTl9QTUMyUl9BUFBfTUlTQ18wX01BU0sJCQkoMHgwMEMwKQorI2RlZmluZSBVMzAwX1NZU0NPTl9QTUMyUl9BUFBfTUlTQ18wX0FQUF9HUElPCQkJKDB4MDAwMCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fUE1DMlJfQVBQX01JU0NfMF9FTUlGX1NEUkFNCQkJKDB4MDA0MCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fUE1DMlJfQVBQX01JU0NfMF9NTUMJCQkoMHgwMDgwKQorI2RlZmluZSBVMzAwX1NZU0NPTl9QTUMyUl9BUFBfTUlTQ18wX0NESTIJCQkoMHgwMEMwKQorI2RlZmluZSBVMzAwX1NZU0NPTl9QTUMyUl9BUFBfTUlTQ18xX01BU0sJCQkoMHgwMzAwKQorI2RlZmluZSBVMzAwX1NZU0NPTl9QTUMyUl9BUFBfTUlTQ18xX0FQUF9HUElPCQkJKDB4MDAwMCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fUE1DMlJfQVBQX01JU0NfMV9FTUlGX1NEUkFNCQkJKDB4MDEwMCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fUE1DMlJfQVBQX01JU0NfMV9NTUMJCQkoMHgwMjAwKQorI2RlZmluZSBVMzAwX1NZU0NPTl9QTUMyUl9BUFBfTUlTQ18xX0NESTIJCQkoMHgwMzAwKQorI2RlZmluZSBVMzAwX1NZU0NPTl9QTUMyUl9BUFBfTUlTQ18yX01BU0sJCQkoMHgwQzAwKQorI2RlZmluZSBVMzAwX1NZU0NPTl9QTUMyUl9BUFBfTUlTQ18yX0FQUF9HUElPCQkJKDB4MDAwMCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fUE1DMlJfQVBQX01JU0NfMl9FTUlGX1NEUkFNCQkJKDB4MDQwMCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fUE1DMlJfQVBQX01JU0NfMl9NTUMJCQkoMHgwODAwKQorI2RlZmluZSBVMzAwX1NZU0NPTl9QTUMyUl9BUFBfTUlTQ18yX0NESTIJCQkoMHgwQzAwKQorI2RlZmluZSBVMzAwX1NZU0NPTl9QTUMyUl9BUFBfTUlTQ18zX01BU0sJCQkoMHgzMDAwKQorI2RlZmluZSBVMzAwX1NZU0NPTl9QTUMyUl9BUFBfTUlTQ18zX0FQUF9HUElPCQkJKDB4MDAwMCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fUE1DMlJfQVBQX01JU0NfM19FTUlGX1NEUkFNCQkJKDB4MTAwMCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fUE1DMlJfQVBQX01JU0NfM19NTUMJCQkoMHgyMDAwKQorI2RlZmluZSBVMzAwX1NZU0NPTl9QTUMyUl9BUFBfTUlTQ18zX0NESTIJCQkoMHgzMDAwKQorI2RlZmluZSBVMzAwX1NZU0NPTl9QTUMyUl9BUFBfTUlTQ180X01BU0sJCQkoMHhDMDAwKQorI2RlZmluZSBVMzAwX1NZU0NPTl9QTUMyUl9BUFBfTUlTQ180X0FQUF9HUElPCQkJKDB4MDAwMCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fUE1DMlJfQVBQX01JU0NfNF9FTUlGX1NEUkFNCQkJKDB4NDAwMCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fUE1DMlJfQVBQX01JU0NfNF9NTUMJCQkoMHg4MDAwKQorI2RlZmluZSBVMzAwX1NZU0NPTl9QTUMyUl9BUFBfTUlTQ180X0FDQ19HUElPCQkJKDB4QzAwMCkKIC8qIFRPRE86IE1vcmUgU1lTQ09OIHJlZ2lzdGVycyBtaXNzaW5nICovCiAjZGVmaW5lIFUzMDBfU1lTQ09OX1BNQzNSCQkJCQkoMHgxMGMpCiAjZGVmaW5lIFUzMDBfU1lTQ09OX1BNQzNSX0FQUF9NSVNDXzExX01BU0sJCQkoMHhjMDAwKQogI2RlZmluZSBVMzAwX1NZU0NPTl9QTUMzUl9BUFBfTUlTQ18xMV9TUEkJCQkoMHg0MDAwKQogI2RlZmluZSBVMzAwX1NZU0NPTl9QTUMzUl9BUFBfTUlTQ18xMF9NQVNLCQkJKDB4MzAwMCkKICNkZWZpbmUgVTMwMF9TWVNDT05fUE1DM1JfQVBQX01JU0NfMTBfU1BJCQkJKDB4MTAwMCkKLS8qIFRPRE86IE1pc3Npbmcgb3RoZXIgY29uZmlncywgSSBqdXN0IGFkZGVkIHRoZSBTUEkgc3R1ZmYgKi8KLQorLyogVE9ETzogTWlzc2luZyBvdGhlciBjb25maWdzICovCisjZGVmaW5lIFUzMDBfU1lTQ09OX1BNQzRSCQkJCQkoMHgxNjgpCisjZGVmaW5lIFUzMDBfU1lTQ09OX1BNQzRSX0FQUF9NSVNDXzEyX01BU0sJCQkoMHgwMDAzKQorI2RlZmluZSBVMzAwX1NZU0NPTl9QTUM0Ul9BUFBfTUlTQ18xMl9BUFBfR1BJTwkJCSgweDAwMDApCisjZGVmaW5lIFUzMDBfU1lTQ09OX1BNQzRSX0FQUF9NSVNDXzEzX01BU0sJCQkoMHgwMDBDKQorI2RlZmluZSBVMzAwX1NZU0NPTl9QTUM0Ul9BUFBfTUlTQ18xM19DREkJCQkoMHgwMDAwKQorI2RlZmluZSBVMzAwX1NZU0NPTl9QTUM0Ul9BUFBfTUlTQ18xM19TTUlBCQkJKDB4MDAwNCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fUE1DNFJfQVBQX01JU0NfMTNfU01JQTIJCQkoMHgwMDA4KQorI2RlZmluZSBVMzAwX1NZU0NPTl9QTUM0Ul9BUFBfTUlTQ18xM19BUFBfR1BJTwkJCSgweDAwMEMpCisjZGVmaW5lIFUzMDBfU1lTQ09OX1BNQzRSX0FQUF9NSVNDXzE0X01BU0sJCQkoMHgwMDMwKQorI2RlZmluZSBVMzAwX1NZU0NPTl9QTUM0Ul9BUFBfTUlTQ18xNF9DREkJCQkoMHgwMDAwKQorI2RlZmluZSBVMzAwX1NZU0NPTl9QTUM0Ul9BUFBfTUlTQ18xNF9TTUlBCQkJKDB4MDAxMCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fUE1DNFJfQVBQX01JU0NfMTRfQ0RJMgkJCSgweDAwMjApCisjZGVmaW5lIFUzMDBfU1lTQ09OX1BNQzRSX0FQUF9NSVNDXzE0X0FQUF9HUElPCQkJKDB4MDAzMCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fUE1DNFJfQVBQX01JU0NfMTZfTUFTSwkJCSgweDAzMDApCisjZGVmaW5lIFUzMDBfU1lTQ09OX1BNQzRSX0FQUF9NSVNDXzE2X0FQUF9HUElPXzEzCQkoMHgwMDAwKQorI2RlZmluZSBVMzAwX1NZU0NPTl9QTUM0Ul9BUFBfTUlTQ18xNl9BUFBfVUFSVDFfQ1RTCQkoMHgwMTAwKQorI2RlZmluZSBVMzAwX1NZU0NPTl9QTUM0Ul9BUFBfTUlTQ18xNl9FTUlGXzFfU1RBVElDX0NTNV9OCSgweDAyMDApCiAvKiBTWVNfMF9DTEtfQ09OVFJPTCBmaXJzdCBjbG9jayBjb250cm9sIDE2Yml0IChSL1cpICovCiAjZGVmaW5lIFUzMDBfU1lTQ09OX1MwQ0NSCQkJCQkoMHgxMjApCiAjZGVmaW5lIFUzMDBfU1lTQ09OX1MwQ0NSX0ZJRUxEX01BU0sJCQkJKDB4NDNGRikKICNkZWZpbmUgVTMwMF9TWVNDT05fUzBDQ1JfQ0xPQ0tfUkVRCQkJCSgweDQwMDApCisjZGVmaW5lIFUzMDBfU1lTQ09OX1MwQ0NSX0NMT0NLX1JFUV9NT05JVE9SCQkJKDB4MjAwMCkKICNkZWZpbmUgVTMwMF9TWVNDT05fUzBDQ1JfQ0xPQ0tfSU5WCQkJCSgweDAyMDApCiAjZGVmaW5lIFUzMDBfU1lTQ09OX1MwQ0NSX0NMT0NLX0ZSRVFfTUFTSwkJCSgweDAxRTApCiAjZGVmaW5lIFUzMDBfU1lTQ09OX1MwQ0NSX0NMT0NLX1NFTEVDVF9NQVNLCQkJKDB4MDAxRSkKQEAgLTM3NSw2ICs0MzAsNyBAQAogI2RlZmluZSBVMzAwX1NZU0NPTl9TMUNDUgkJCQkJKDB4MTI0KQogI2RlZmluZSBVMzAwX1NZU0NPTl9TMUNDUl9GSUVMRF9NQVNLCQkJCSgweDQzRkYpCiAjZGVmaW5lIFUzMDBfU1lTQ09OX1MxQ0NSX0NMT0NLX1JFUQkJCQkoMHg0MDAwKQorI2RlZmluZSBVMzAwX1NZU0NPTl9TMUNDUl9DTE9DS19SRVFfTU9OSVRPUgkJCSgweDIwMDApCiAjZGVmaW5lIFUzMDBfU1lTQ09OX1MxQ0NSX0NMT0NLX0lOVgkJCQkoMHgwMjAwKQogI2RlZmluZSBVMzAwX1NZU0NPTl9TMUNDUl9DTE9DS19GUkVRX01BU0sJCQkoMHgwMUUwKQogI2RlZmluZSBVMzAwX1NZU0NPTl9TMUNDUl9DTE9DS19TRUxFQ1RfTUFTSwkJCSgweDAwMUUpCkBAIC0zOTMsNiArNDQ5LDcgQEAKICNkZWZpbmUgVTMwMF9TWVNDT05fUzJDQ1JfRklFTERfTUFTSwkJCQkoMHhDM0ZGKQogI2RlZmluZSBVMzAwX1NZU0NPTl9TMkNDUl9DTEtfU1RFQUwJCQkJKDB4ODAwMCkKICNkZWZpbmUgVTMwMF9TWVNDT05fUzJDQ1JfQ0xPQ0tfUkVRCQkJCSgweDQwMDApCisjZGVmaW5lIFUzMDBfU1lTQ09OX1MyQ0NSX0NMT0NLX1JFUV9NT05JVE9SCQkJKDB4MjAwMCkKICNkZWZpbmUgVTMwMF9TWVNDT05fUzJDQ1JfQ0xPQ0tfSU5WCQkJCSgweDAyMDApCiAjZGVmaW5lIFUzMDBfU1lTQ09OX1MyQ0NSX0NMT0NLX0ZSRVFfTUFTSwkJCSgweDAxRTApCiAjZGVmaW5lIFUzMDBfU1lTQ09OX1MyQ0NSX0NMT0NLX1NFTEVDVF9NQVNLCQkJKDB4MDAxRSkKQEAgLTQyNSw2ICs0ODIsNDQgQEAKICNkZWZpbmUgVTMwMF9TWVNDT05fTUNSX1BNR0VOX0NSXzBfRU1JRl8wX1NEUkFNCQkJKDB4MDAwQykKICNkZWZpbmUgVTMwMF9TWVNDT05fTUNSX1BNMUdfTU9ERV9FTkFCTEUJCQkoMHgwMDAyKQogI2RlZmluZSBVMzAwX1NZU0NPTl9NQ1JfUE1URzVfTU9ERV9FTkFCTEUJCQkoMHgwMDAxKQorLyogU0NfUExMX0lSUV9DT05UUk9MIDE2Yml0IChSL1cpICovCisjZGVmaW5lIFUzMDBfU1lTQ09OX1BJQ1IJCQkJCSgweDAxMzApCisjZGVmaW5lIFUzMDBfU1lTQ09OX1BJQ1JfTUFTSwkJCQkJKDB4MDBGRikKKyNkZWZpbmUgVTMwMF9TWVNDT05fUElDUl9GT1JDRV9QTEwyMDhfTE9DS19MT1dfRU5BQkxFCQkoMHgwMDgwKQorI2RlZmluZSBVMzAwX1NZU0NPTl9QSUNSX0ZPUkNFX1BMTDIwOF9MT0NLX0hJR0hfRU5BQkxFCQkoMHgwMDQwKQorI2RlZmluZSBVMzAwX1NZU0NPTl9QSUNSX0ZPUkNFX1BMTDEzX0xPQ0tfTE9XX0VOQUJMRQkJKDB4MDAyMCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fUElDUl9GT1JDRV9QTEwxM19MT0NLX0hJR0hfRU5BQkxFCQkoMHgwMDEwKQorI2RlZmluZSBVMzAwX1NZU0NPTl9QSUNSX0lSUU1BU0tfUExMMTNfVU5MT0NLX0VOQUJMRQkJKDB4MDAwOCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fUElDUl9JUlFNQVNLX1BMTDEzX0xPQ0tfRU5BQkxFCQkoMHgwMDA0KQorI2RlZmluZSBVMzAwX1NZU0NPTl9QSUNSX0lSUU1BU0tfUExMMjA4X1VOTE9DS19FTkFCTEUJCSgweDAwMDIpCisjZGVmaW5lIFUzMDBfU1lTQ09OX1BJQ1JfSVJRTUFTS19QTEwyMDhfTE9DS19FTkFCTEUJCSgweDAwMDEpCisvKiBTQ19QTExfSVJRX1NUQVRVUyAxNiBiaXQgKFIvLSkgKi8KKyNkZWZpbmUgVTMwMF9TWVNDT05fUElTUgkJCQkJKDB4MDEzNCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fUElTUl9NQVNLCQkJCQkoMHgwMDBGKQorI2RlZmluZSBVMzAwX1NZU0NPTl9QSVNSX1BMTDEzX1VOTE9DS19JTkQJCQkoMHgwMDA4KQorI2RlZmluZSBVMzAwX1NZU0NPTl9QSVNSX1BMTDEzX0xPQ0tfSU5ECQkJCSgweDAwMDQpCisjZGVmaW5lIFUzMDBfU1lTQ09OX1BJU1JfUExMMjA4X1VOTE9DS19JTkQJCQkoMHgwMDAyKQorI2RlZmluZSBVMzAwX1NZU0NPTl9QSVNSX1BMTDIwOF9MT0NLX0lORAkJCSgweDAwMDEpCisvKiBTQ19QTExfSVJRX0NMRUFSIDE2IGJpdCAoLS9XKSAqLworI2RlZmluZSBVMzAwX1NZU0NPTl9QSUNMUgkJCQkJKDB4MDEzOCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fUElDTFJfTUFTSwkJCQkJKDB4MDAwRikKKyNkZWZpbmUgVTMwMF9TWVNDT05fUElDTFJfUldNQVNLCQkJCSgweDAwMDApCisjZGVmaW5lIFUzMDBfU1lTQ09OX1BJQ0xSX1BMTDEzX1VOTE9DS19TQwkJCSgweDAwMDgpCisjZGVmaW5lIFUzMDBfU1lTQ09OX1BJQ0xSX1BMTDEzX0xPQ0tfU0MJCQkJKDB4MDAwNCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fUElDTFJfUExMMjA4X1VOTE9DS19TQwkJCSgweDAwMDIpCisjZGVmaW5lIFUzMDBfU1lTQ09OX1BJQ0xSX1BMTDIwOF9MT0NLX1NDCQkJKDB4MDAwMSkKKy8qIENBTUlGX0NPTlRST0wgMTYgYml0ICgtL1cpICovCisjZGVmaW5lIFUzMDBfU1lTQ09OX0NJQ1IJCQkJCSgweDAxM0MpCisjZGVmaW5lIFUzMDBfU1lTQ09OX0NJQ1JfTUFTSwkJCQkJKDB4MEZGRikKKyNkZWZpbmUgVTMwMF9TWVNDT05fQ0lDUl9BUFBfU1VCTFZEU19URVNUTU9ERV9NQVNLCQkoMHgwRjAwKQorI2RlZmluZSBVMzAwX1NZU0NPTl9DSUNSX0FQUF9TVUJMVkRTX1RFU1RNT0RFX1BPUlQxCQkoMHgwQzAwKQorI2RlZmluZSBVMzAwX1NZU0NPTl9DSUNSX0FQUF9TVUJMVkRTX1RFU1RNT0RFX1BPUlQwCQkoMHgwMzAwKQorI2RlZmluZSBVMzAwX1NZU0NPTl9DSUNSX0FQUF9TVUJMVkRTX1JFU0NPTl9NQVNLCQkoMHgwMEYwKQorI2RlZmluZSBVMzAwX1NZU0NPTl9DSUNSX0FQUF9TVUJMVkRTX1JFU0NPTl9QT1JUMQkJKDB4MDBDMCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fQ0lDUl9BUFBfU1VCTFZEU19SRVNDT05fUE9SVDAJCSgweDAwMzApCisjZGVmaW5lIFUzMDBfU1lTQ09OX0NJQ1JfQVBQX1NVQkxWRFNfUFdSX0RXTl9OX01BU0sJCSgweDAwMEYpCisjZGVmaW5lIFUzMDBfU1lTQ09OX0NJQ1JfQVBQX1NVQkxWRFNfUFdSX0RXTl9OX1BPUlQxCQkoMHgwMDBDKQorI2RlZmluZSBVMzAwX1NZU0NPTl9DSUNSX0FQUF9TVUJMVkRTX1BXUl9EV05fTl9QT1JUMAkJKDB4MDAwMykKIC8qIENsb2NrIGFjdGl2aXR5IG9ic2VydmFiaWxpdHkgcmVnaXN0ZXIgMCAqLwogI2RlZmluZSBVMzAwX1NZU0NPTl9DME9BUgkJCQkJKDB4MTQwKQogI2RlZmluZSBVMzAwX1NZU0NPTl9DME9BUl9NQVNLCQkJCQkoMHhGRkZGKQpAQCAtNTEzLDcgKzYwOCw3IEBACiAvKioKICAqIENQVSBtZWRpdW0gZnJlcXVlbmN5IGluIE1IegogICovCi0jZGVmaW5lIFNZU0NPTl9DUFVfQ0xPQ0tfTUVESVVNICAxMDQKKyNkZWZpbmUgU1lTQ09OX0NQVV9DTE9DS19NRURJVU0gICA1MgogLyoqCiAgKiBDUFUgbG93IGZyZXF1ZW5jeSBpbiBNSHoKICAqLwpAQCAtNTI3LDcgKzYyMiw3IEBACiAvKioKICAqIEVNSUYgbWVkaXVtIGZyZXF1ZW5jeSBpbiBNSHoKICAqLwotI2RlZmluZSBTWVNDT05fRU1JRl9DTE9DS19NRURJVU0gMTA0CisjZGVmaW5lIFNZU0NPTl9FTUlGX0NMT0NLX01FRElVTSAgNTIKIC8qKgogICogRU1JRiBsb3cgZnJlcXVlbmN5IGluIE1IegogICovCkBAIC01NDEsNyArNjM2LDcgQEAKIC8qKgogICogQUhCIG1lZGl1bSBmcmVxdWVuY3kgaW4gTUh6CiAgKi8KLSNkZWZpbmUgU1lTQ09OX0FIQl9DTE9DS19NRURJVU0gICA1MgorI2RlZmluZSBTWVNDT05fQUhCX0NMT0NLX01FRElVTSAgIDI2CiAvKioKICAqIEFIQiBsb3cgZnJlcXVlbmN5IGluIE1IegogICovCkBAIC01NTMsNiArNjQ4LDE1IEBACiAgIFNZU0NPTl9CTV9WSURFT19FTkMKIH07CiAKKy8qIFNlbGVjdHIgYSByZXNpc3RvciBvciBhIHNldCBvZiByZXNpc3RvcnMgKi8KK2VudW0gc3lzY29uX3B1bGxfdXBfZG93biB7CisgIFNZU0NPTl9QVV9LRVlfSU5fRU4sCisgIFNZU0NPTl9QVV9FTUlGXzFfOF9CSVRfRU4sCisgIFNZU0NPTl9QVV9FTUlGXzFfMTZfQklUX0VOLAorICBTWVNDT05fUFVfRU1JRl8xX05GSUZfUkVBRFlfRU4sCisgIFNZU0NPTl9QVV9FTUlGXzFfTkZJRl9XQUlUX05fRU4sCit9OworCiAvKgogICogTm90ZSB0aGF0IHRoaXMgYXJyYXkgbXVzdCBtYXRjaCB0aGUgb3JkZXIgb2YgdGhlIGFycmF5ICJjbGtfcmVnIgogICogaW4gc3lzY29uLmMKQEAgLTU3NSw2ICs2NzksNyBAQAogICBTWVNDT05fQ0xLQ09OVFJPTF9TUEksCiAgIFNZU0NPTl9DTEtDT05UUk9MX0kyUzBfQ09SRSwKICAgU1lTQ09OX0NMS0NPTlRST0xfSTJTMV9DT1JFLAorICBTWVNDT05fQ0xLQ09OVFJPTF9VQVJUMSwKICAgU1lTQ09OX0NMS0NPTlRST0xfQUFJRiwKICAgU1lTQ09OX0NMS0NPTlRST0xfQUhCLAogICBTWVNDT05fQ0xLQ09OVFJPTF9BUEVYLApAQCAtNjA0LDcgKzcwOSw4IEBACiAKIGVudW0gc3lzY29uX3N5c2Nsa19yZXEgewogICBTWVNDT05fU1lTQ0xLUkVRX0RJU0FCTEVELAotICBTWVNDT05fU1lTQ0xLUkVRX0FDVElWRV9MT1cKKyAgU1lTQ09OX1NZU0NMS1JFUV9BQ1RJVkVfTE9XLAorICBTWVNDT05fU1lTQ0xLUkVRX01PTklUT1IKIH07CiAKIGVudW0gc3lzY29uX2Nsa19tb2RlIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdTMwMC9tbWMuYyBiL2FyY2gvYXJtL21hY2gtdTMwMC9tbWMuYwppbmRleCA1ODVjYzAxLi43YjZiMDE2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXUzMDAvbW1jLmMKKysrIGIvYXJjaC9hcm0vbWFjaC11MzAwL21tYy5jCkBAIC0xOSwxNSArMTksMTYgQEAKICNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaD4KICNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvbWFjaGluZS5oPgogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9hbWJhL21tY2kuaD4KIAotI2luY2x1ZGUgPGFzbS9tYWNoL21tYy5oPgogI2luY2x1ZGUgIm1tYy5oIgorI2luY2x1ZGUgInBhZG11eC5oIgogCiBzdHJ1Y3QgbW1jaV9jYXJkX2V2ZW50IHsKIAlzdHJ1Y3QgaW5wdXRfZGV2ICptbWNfaW5wdXQ7CiAJaW50IG1tY19pbnNlcnRlZDsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29ya3E7Ci0Jc3RydWN0IG1tY19wbGF0Zm9ybV9kYXRhIG1tYzBfcGxhdF9kYXRhOworCXN0cnVjdCBtbWNpX3BsYXRmb3JtX2RhdGEgbW1jMF9wbGF0X2RhdGE7CiB9OwogCiBzdGF0aWMgdW5zaWduZWQgaW50IG1tY19zdGF0dXMoc3RydWN0IGRldmljZSAqZGV2KQpAQCAtMTQ2LDYgKzE0Nyw3IEBACiB7CiAJc3RydWN0IG1tY2lfY2FyZF9ldmVudCAqbW1jaV9jYXJkOwogCXN0cnVjdCBkZXZpY2UgKm1tY3NkX2RldmljZSA9ICZhZGV2LT5kZXY7CisJc3RydWN0IHBteCAqcG14OwogCWludCByZXQgPSAwOwogCiAJbW1jaV9jYXJkID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG1tY2lfY2FyZF9ldmVudCksIEdGUF9LRVJORUwpOwpAQCAtMTU4LDYgKzE2MCw4IEBACiAJbW1jaV9jYXJkLT5tbWMwX3BsYXRfZGF0YS5zdGF0dXMgPSBtbWNfc3RhdHVzOwogCW1tY2lfY2FyZC0+bW1jMF9wbGF0X2RhdGEuZ3Bpb193cCA9IC0xOwogCW1tY2lfY2FyZC0+bW1jMF9wbGF0X2RhdGEuZ3Bpb19jZCA9IC0xOworCW1tY2lfY2FyZC0+bW1jMF9wbGF0X2RhdGEuY2FwYWJpbGl0aWVzID0gTU1DX0NBUF9NTUNfSElHSFNQRUVEIHwKKwkJTU1DX0NBUF9TRF9ISUdIU1BFRUQgfCBNTUNfQ0FQXzRfQklUX0RBVEE7CiAKIAltbWNzZF9kZXZpY2UtPnBsYXRmb3JtX2RhdGEgPSAodm9pZCAqKSAmbW1jaV9jYXJkLT5tbWMwX3BsYXRfZGF0YTsKIApAQCAtMjA3LDYgKzIxMSwyMCBAQAogCiAJaW5wdXRfc2V0X2RydmRhdGEobW1jaV9jYXJkLT5tbWNfaW5wdXQsIG1tY2lfY2FyZCk7CiAKKwkvKgorCSAqIFNldHVwIHBhZG11eGluZyBmb3IgTU1DLiBTaW5jZSB0aGlzIG11c3QgYWx3YXlzIGJlCisJICogY29tcGlsZWQgaW50byB0aGUga2VybmVsLCBwbXggaXMgbmV2ZXIgcmVsZWFzZWQuCisJICovCisJcG14ID0gcG14X2dldChtbWNzZF9kZXZpY2UsIFUzMDBfQVBQX1BNWF9NTUNfU0VUVElORyk7CisKKwlpZiAoSVNfRVJSKHBteCkpCisJCXByX3dhcm5pbmcoIkNvdWxkIG5vdCBnZXQgcGFkbXV4IGhhbmRsZVxuIik7CisJZWxzZSB7CisJCXJldCA9IHBteF9hY3RpdmF0ZShtbWNzZF9kZXZpY2UsIHBteCk7CisJCWlmIChJU19FUlJfVkFMVUUocmV0KSkKKwkJCXByX3dhcm5pbmcoIkNvdWxkIG5vdCBhY3RpdmF0ZSBwYWRtdXhpbmdcbiIpOworCX0KKwogCXJldCA9IGdwaW9fcmVnaXN0ZXJfY2FsbGJhY2soVTMwMF9HUElPX1BJTl9NTUNfQ0QsIG1tY2lfY2FsbGJhY2ssCiAJCQkJICAgICBtbWNpX2NhcmQpOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXUzMDAvcGFkbXV4LmMgYi9hcmNoL2FybS9tYWNoLXUzMDAvcGFkbXV4LmMKaW5kZXggZjM2NjQ1Ni4uNGM5M2M2YyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC11MzAwL3BhZG11eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtdTMwMC9wYWRtdXguYwpAQCAtNiw1MyArNiwzNjIgQEAKICAqIENvcHlyaWdodCAoQykgMjAwOSBTVC1Fcmljc3NvbiBBQgogICogTGljZW5zZSB0ZXJtczogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgdmVyc2lvbiAyCiAgKiBVMzAwIFBBRE1VWCBmdW5jdGlvbnMKLSAqIEF1dGhvcjogTGludXMgV2FsbGVpaiA8bGludXMud2FsbGVpakBzdGVyaWNzc29uLmNvbT4KLSAqCisgKiBBdXRob3I6IE1hcnRpbiBQZXJzc29uIDxtYXJ0aW4ucGVyc3NvbkBzdGVyaWNzc29uLmNvbT4KICAqLwotI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9idWcuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxtYWNoL3UzMDAtcmVncy5oPgogI2luY2x1ZGUgPG1hY2gvc3lzY29uLmg+Ci0KICNpbmNsdWRlICJwYWRtdXguaCIKIAotLyogU2V0IHRoZSBQQUQgTVVYIHRvIHJvdXRlIHRoZSBNTUMgcmVhZGVyIGNvcnJlY3RseSB0byBHUElPMC4gKi8KLXZvaWQgcG14X3NldF9taXNzaW9uX21vZGVfbW1jKHZvaWQpCi17Ci0JdTE2IHZhbDsKK3N0YXRpYyBERUZJTkVfTVVURVgocG14X211dGV4KTsKIAotCXZhbCA9IHJlYWR3KFUzMDBfU1lTQ09OX1ZCQVNFICsgVTMwMF9TWVNDT05fUE1DMUxSKTsKLQl2YWwgJj0gflUzMDBfU1lTQ09OX1BNQzFMUl9NTUNTRF9NQVNLOwotCXdyaXRldyh2YWwsIFUzMDBfU1lTQ09OX1ZCQVNFICsgVTMwMF9TWVNDT05fUE1DMUxSKTsKLQl2YWwgPSByZWFkdyhVMzAwX1NZU0NPTl9WQkFTRSArIFUzMDBfU1lTQ09OX1BNQzFIUik7Ci0JdmFsICY9IH5VMzAwX1NZU0NPTl9QTUMxSFJfQVBQX0dQSU9fMV9NQVNLOwotCXZhbCB8PSBVMzAwX1NZU0NPTl9QTUMxSFJfQVBQX0dQSU9fMV9NTUM7Ci0Jd3JpdGV3KHZhbCwgVTMwMF9TWVNDT05fVkJBU0UgKyBVMzAwX1NZU0NPTl9QTUMxSFIpOworY29uc3QgdTMyIHBteF9yZWdpc3RlcnNbXSA9IHsKKwkoVTMwMF9TWVNDT05fVkJBU0UgKyBVMzAwX1NZU0NPTl9QTUMxTFIpLAorCShVMzAwX1NZU0NPTl9WQkFTRSArIFUzMDBfU1lTQ09OX1BNQzFIUiksCisJKFUzMDBfU1lTQ09OX1ZCQVNFICsgVTMwMF9TWVNDT05fUE1DMlIpLAorCShVMzAwX1NZU0NPTl9WQkFTRSArIFUzMDBfU1lTQ09OX1BNQzNSKSwKKwkoVTMwMF9TWVNDT05fVkJBU0UgKyBVMzAwX1NZU0NPTl9QTUM0UikKK307CisKKy8qIEhpZ2ggbGV2ZWwgZnVuY3Rpb25hbGl0eSAqLworCisvKiBMYXp5IGRvZzoKKyAqIG9ubWFzayA9IHsKKyAqICAgeyJQTUMxTFIiIG1hc2ssICJQTUMxTFIiIHZhbHVlfSwKKyAqICAgeyJQTUMxSFIiIG1hc2ssICJQTUMxSFIiIHZhbHVlfSwKKyAqICAgeyJQTUMyUiIgIG1hc2ssICJQTUMyUiIgIHZhbHVlfSwKKyAqICAgeyJQTUMzUiIgIG1hc2ssICJQTUMzUiIgIHZhbHVlfSwKKyAqICAgeyJQTUM0UiIgIG1hc2ssICJQTUM0UiIgIHZhbHVlfQorICogfQorICovCitzdGF0aWMgc3RydWN0IHBteCBtbWNfc2V0dGluZyA9IHsKKwkuc2V0dGluZyA9IFUzMDBfQVBQX1BNWF9NTUNfU0VUVElORywKKwkuZGVmYXVsdF9vbiA9IGZhbHNlLAorCS5hY3RpdmF0ZWQgPSBmYWxzZSwKKwkubmFtZSA9ICJNTUMiLAorCS5vbm1hc2sgPSB7CisJCSAgIHtVMzAwX1NZU0NPTl9QTUMxTFJfTU1DU0RfTUFTSywKKwkJICAgIFUzMDBfU1lTQ09OX1BNQzFMUl9NTUNTRF9NTUNTRH0sCisJCSAgIHswLCAwfSwKKwkJICAgezAsIDB9LAorCQkgICB7MCwgMH0sCisJCSAgIHtVMzAwX1NZU0NPTl9QTUM0Ul9BUFBfTUlTQ18xMl9NQVNLLAorCQkgICAgVTMwMF9TWVNDT05fUE1DNFJfQVBQX01JU0NfMTJfQVBQX0dQSU99CisJCSAgIH0sCit9OworCitzdGF0aWMgc3RydWN0IHBteCBzcGlfc2V0dGluZyA9IHsKKwkuc2V0dGluZyA9IFUzMDBfQVBQX1BNWF9TUElfU0VUVElORywKKwkuZGVmYXVsdF9vbiA9IGZhbHNlLAorCS5hY3RpdmF0ZWQgPSBmYWxzZSwKKwkubmFtZSA9ICJTUEkiLAorCS5vbm1hc2sgPSB7ezAsIDB9LAorCQkgICB7VTMwMF9TWVNDT05fUE1DMUhSX0FQUF9TUElfMl9NQVNLIHwKKwkJICAgIFUzMDBfU1lTQ09OX1BNQzFIUl9BUFBfU1BJX0NTXzFfTUFTSyB8CisJCSAgICBVMzAwX1NZU0NPTl9QTUMxSFJfQVBQX1NQSV9DU18yX01BU0ssCisJCSAgICBVMzAwX1NZU0NPTl9QTUMxSFJfQVBQX1NQSV8yX1NQSSB8CisJCSAgICBVMzAwX1NZU0NPTl9QTUMxSFJfQVBQX1NQSV9DU18xX1NQSSB8CisJCSAgICBVMzAwX1NZU0NPTl9QTUMxSFJfQVBQX1NQSV9DU18yX1NQSX0sCisJCSAgIHswLCAwfSwKKwkJICAgezAsIDB9LAorCQkgICB7MCwgMH0KKwkJICAgfSwKK307CisKKy8qIEF2YWlsYWJsZSBwYWRtdXggc2V0dGluZ3MgKi8KK3N0YXRpYyBzdHJ1Y3QgcG14ICpwbXhfc2V0dGluZ3NbXSA9IHsKKwkmbW1jX3NldHRpbmcsCisJJnNwaV9zZXR0aW5nLAorfTsKKworc3RhdGljIHZvaWQgdXBkYXRlX3JlZ2lzdGVycyhzdHJ1Y3QgcG14ICpwbXgsIGJvb2wgYWN0aXZhdGUpCit7CisJdTE2IHJlZ3ZhbCwgdmFsLCBtYXNrOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocG14X3JlZ2lzdGVycyk7IGkrKykgeworCQlpZiAoYWN0aXZhdGUpCisJCQl2YWwgPSBwbXgtPm9ubWFza1tpXS52YWw7CisJCWVsc2UKKwkJCXZhbCA9IDA7CisKKwkJbWFzayA9IHBteC0+b25tYXNrW2ldLm1hc2s7CisJCWlmIChtYXNrICE9IDApIHsKKwkJCXJlZ3ZhbCA9IHJlYWR3KHBteF9yZWdpc3RlcnNbaV0pOworCQkJcmVndmFsICY9IH5tYXNrOworCQkJcmVndmFsIHw9IHZhbDsKKwkJCXdyaXRldyhyZWd2YWwsIHBteF9yZWdpc3RlcnNbaV0pOworCQl9CisJfQogfQogCi12b2lkIHBteF9zZXRfbWlzc2lvbl9tb2RlX3NwaSh2b2lkKQorc3RydWN0IHBteCAqcG14X2dldChzdHJ1Y3QgZGV2aWNlICpkZXYsIGVudW0gcG14X3NldHRpbmdzIHNldHRpbmcpCiB7Ci0JdTE2IHZhbDsKKwlpbnQgaTsKKwlzdHJ1Y3QgcG14ICpwbXggPSBFUlJfUFRSKC1FTk9FTlQpOwogCi0JLyogU2V0IHVwIHBhZG11eGluZyBzbyB0aGUgU1BJIHBvcnQgYW5kIGl0cyBjaGlwc2VsZWN0cyBhcmUgYWN0aXZlICovCi0JdmFsID0gcmVhZHcoVTMwMF9TWVNDT05fVkJBU0UgKyBVMzAwX1NZU0NPTl9QTUMxSFIpOwotCS8qCi0JICogQWN0aXZhdGUgdGhlIFNQSSBwb3J0IChkaXNhYmxlIHRoZSB1c2Ugb2YgdGhlc2UgcGlucyBmb3IgZ2VuZXJpYwotCSAqIEdQSU8sIERTUCwgQUFJRgotCSAqLwotCXZhbCAmPSB+VTMwMF9TWVNDT05fUE1DMUhSX0FQUF9TUElfMl9NQVNLOwotCXZhbCB8PSBVMzAwX1NZU0NPTl9QTUMxSFJfQVBQX1NQSV8yX1NQSTsKLQkvKgotCSAqIFVzZSBHUElPIHBpbiBTUEkgQ1MxIGZvciBDUzEgYWN0dWFsbHkgKGl0IGNhbiBiZSB1c2VkIGZvciBvdGhlcgotCSAqIHRoaW5ncyBhbHNvKQotCSAqLwotCXZhbCAmPSB+VTMwMF9TWVNDT05fUE1DMUhSX0FQUF9TUElfQ1NfMV9NQVNLOwotCXZhbCB8PSBVMzAwX1NZU0NPTl9QTUMxSFJfQVBQX1NQSV9DU18xX1NQSTsKLQkvKgotCSAqIFVzZSBHUElPIHBpbiBTUEkgQ1MyIGZvciBDUzIgYWN0dWFsbHkgKGl0IGNhbiBiZSB1c2VkIGZvciBvdGhlcgotCSAqIHRoaW5ncyBhbHNvKQotCSAqLwotCXZhbCAmPSB+VTMwMF9TWVNDT05fUE1DMUhSX0FQUF9TUElfQ1NfMl9NQVNLOwotCXZhbCB8PSBVMzAwX1NZU0NPTl9QTUMxSFJfQVBQX1NQSV9DU18yX1NQSTsKLQl3cml0ZXcodmFsLCBVMzAwX1NZU0NPTl9WQkFTRSArIFUzMDBfU1lTQ09OX1BNQzFIUik7CisJaWYgKGRldiA9PSBOVUxMKQorCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKworCW11dGV4X2xvY2soJnBteF9tdXRleCk7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocG14X3NldHRpbmdzKTsgaSsrKSB7CisKKwkJaWYgKHNldHRpbmcgPT0gcG14X3NldHRpbmdzW2ldLT5zZXR0aW5nKSB7CisKKwkJCWlmIChwbXhfc2V0dGluZ3NbaV0tPmRldiAhPSBOVUxMKSB7CisJCQkJV0FSTigxLCAicGFkbXV4OiByZXF1aXJlZCBzZXR0aW5nICIKKwkJCQkgICAgICJpbiB1c2UgYnkgYW5vdGhlciBjb25zdW1lclxuIik7CisJCQl9IGVsc2UgeworCQkJCXBteCA9IHBteF9zZXR0aW5nc1tpXTsKKwkJCQlwbXgtPmRldiA9IGRldjsKKwkJCQlkZXZfZGJnKGRldiwgInBhZG11eDogc2V0dGluZyBuciAlZCBpcyBub3cgIgorCQkJCQkiYm91bmQgdG8gJXMgYW5kIHJlYWR5IHRvIHVzZVxuIiwKKwkJCQkJc2V0dGluZywgZGV2X25hbWUoZGV2KSk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisJbXV0ZXhfdW5sb2NrKCZwbXhfbXV0ZXgpOworCisJcmV0dXJuIHBteDsKIH0KK0VYUE9SVF9TWU1CT0wocG14X2dldCk7CisKK2ludCBwbXhfcHV0KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHBteCAqcG14KQoreworCWludCBpOworCWludCByZXQgPSAtRU5PRU5UOworCisJaWYgKHBteCA9PSBOVUxMIHx8IGRldiA9PSBOVUxMKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW11dGV4X2xvY2soJnBteF9tdXRleCk7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocG14X3NldHRpbmdzKTsgaSsrKSB7CisKKwkJaWYgKHBteC0+c2V0dGluZyA9PSBwbXhfc2V0dGluZ3NbaV0tPnNldHRpbmcpIHsKKworCQkJaWYgKGRldiAhPSBwbXgtPmRldikgeworCQkJCVdBUk4oMSwgInBhZG11eDogY2Fubm90IHJlbGVhc2UgaGFuZGxlIGFzICIKKwkJCQkJIml0IGlzIGJvdW5kIHRvIGFub3RoZXIgY29uc3VtZXJcbiIpOworCQkJCXJldCA9IC1FSU5WQUw7CisJCQkJYnJlYWs7CisJCQl9IGVsc2UgeworCQkJCXBteF9zZXR0aW5nc1tpXS0+ZGV2ID0gTlVMTDsKKwkJCQlyZXQgPSAwOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCW11dGV4X3VubG9jaygmcG14X211dGV4KTsKKworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MKHBteF9wdXQpOworCitpbnQgcG14X2FjdGl2YXRlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHBteCAqcG14KQoreworCWludCBpLCBqLCByZXQ7CisJcmV0ID0gMDsKKworCWlmIChwbXggPT0gTlVMTCB8fCBkZXYgPT0gTlVMTCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltdXRleF9sb2NrKCZwbXhfbXV0ZXgpOworCisJLyogTWFrZSBzdXJlIHRoZSByZXF1aXJlZCBiaXRzIGFyZSBub3QgdXNlZCAqLworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHBteF9zZXR0aW5ncyk7IGkrKykgeworCisJCWlmIChwbXhfc2V0dGluZ3NbaV0tPmRldiA9PSBOVUxMIHx8IHBteF9zZXR0aW5nc1tpXSA9PSBwbXgpCisJCQljb250aW51ZTsKKworCQlmb3IgKGogPSAwOyBqIDwgQVJSQVlfU0laRShwbXhfcmVnaXN0ZXJzKTsgaisrKSB7CisKKwkJCWlmIChwbXhfc2V0dGluZ3NbaV0tPm9ubWFza1tqXS5tYXNrICYgcG14LT4KKwkJCQlvbm1hc2tbal0ubWFzaykgeworCQkJCS8qIE1vcmUgdGhhbiBvbmUgZW50cnkgb24gdGhlIHNhbWUgYml0cyAqLworCQkJCVdBUk4oMSwgInBhZG11eDogY2Fubm90IGFjdGl2YXRlICIKKwkJCQkJInNldHRpbmcuIEJpdCBjb25mbGljdCB3aXRoICIKKwkJCQkJImFuIGFjdGl2ZSBzZXR0aW5nXG4iKTsKKworCQkJCXJldCA9IC1FVVNFUlM7CisJCQkJZ290byBleGl0OworCQkJfQorCQl9CisJfQorCXVwZGF0ZV9yZWdpc3RlcnMocG14LCB0cnVlKTsKKwlwbXgtPmFjdGl2YXRlZCA9IHRydWU7CisJZGV2X2RiZyhkZXYsICJwYWRtdXg6IHNldHRpbmcgbnIgJWQgaXMgYWN0aXZhdGVkXG4iLAorCQlwbXgtPnNldHRpbmcpOworCitleGl0OgorCW11dGV4X3VubG9jaygmcG14X211dGV4KTsKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChwbXhfYWN0aXZhdGUpOworCitpbnQgcG14X2RlYWN0aXZhdGUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcG14ICpwbXgpCit7CisJaW50IGk7CisJaW50IHJldCA9IC1FTk9FTlQ7CisKKwlpZiAocG14ID09IE5VTEwgfHwgZGV2ID09IE5VTEwpCisJCXJldHVybiAtRUlOVkFMOworCisJbXV0ZXhfbG9jaygmcG14X211dGV4KTsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwbXhfc2V0dGluZ3MpOyBpKyspIHsKKworCQlpZiAocG14X3NldHRpbmdzW2ldLT5kZXYgPT0gTlVMTCkKKwkJCWNvbnRpbnVlOworCisJCWlmIChwbXgtPnNldHRpbmcgPT0gcG14X3NldHRpbmdzW2ldLT5zZXR0aW5nKSB7CisKKwkJCWlmIChkZXYgIT0gcG14LT5kZXYpIHsKKwkJCQlXQVJOKDEsICJwYWRtdXg6IGNhbm5vdCBkZWFjdGl2YXRlICIKKwkJCQkgICAgICJwbXggc2V0dGluZyBhcyBpdCB3YXMgYWN0aXZhdGVkICIKKwkJCQkgICAgICJieSBhbm90aGVyIGNvbnN1bWVyXG4iKTsKKworCQkJCXJldCA9IC1FQlVTWTsKKwkJCQljb250aW51ZTsKKwkJCX0gZWxzZSB7CisJCQkJdXBkYXRlX3JlZ2lzdGVycyhwbXgsIGZhbHNlKTsKKwkJCQlwbXhfc2V0dGluZ3NbaV0tPmRldiA9IE5VTEw7CisJCQkJcG14LT5hY3RpdmF0ZWQgPSBmYWxzZTsKKwkJCQlyZXQgPSAwOworCQkJCWRldl9kYmcoZGV2LCAicGFkbXV4OiBzZXR0aW5nIG5yICVkIGlzIGRlYWN0aXZhdGVkIiwKKwkJCQkJcG14LT5zZXR0aW5nKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKwltdXRleF91bmxvY2soJnBteF9tdXRleCk7CisKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChwbXhfZGVhY3RpdmF0ZSk7CisKKy8qCisgKiBGb3IgaW50ZXJuYWwgdXNlIG9ubHkuIElmIGl0IGlzIHRvIGJlIGV4cG9ydGVkLAorICogaXQgc2hvdWxkIGJlIHJlZW50cmFudC4gTm90aWNlIHRoYXQgcG14X2FjdGl2YXRlCisgKiAoaS5lLiBydW50aW1lIHNldHRpbmdzKSBhbHdheXMgb3ZlcnJpZGUgZGVmYXVsdCBzZXR0aW5ncy4KKyAqLworc3RhdGljIGludCBwbXhfc2V0X2RlZmF1bHQodm9pZCkKK3sKKwkvKiBVc2VkIHRvIGlkZW50aWZ5IHNldmVyYWwgZW50cmllcyBvbiB0aGUgc2FtZSBiaXRzICovCisJdTE2IG1vZGJpdHNbQVJSQVlfU0laRShwbXhfcmVnaXN0ZXJzKV07CisKKwlpbnQgaSwgajsKKworCW1lbXNldChtb2RiaXRzLCAwLCBBUlJBWV9TSVpFKHBteF9yZWdpc3RlcnMpICogc2l6ZW9mKHUxNikpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocG14X3NldHRpbmdzKTsgaSsrKSB7CisKKwkJaWYgKCFwbXhfc2V0dGluZ3NbaV0tPmRlZmF1bHRfb24pCisJCQljb250aW51ZTsKKworCQlmb3IgKGogPSAwOyBqIDwgQVJSQVlfU0laRShwbXhfcmVnaXN0ZXJzKTsgaisrKSB7CisKKwkJCS8qIE1ha2Ugc3VyZSB0aGVyZSBpcyBvbmx5IG9uZSBlbnRyeSBvbiB0aGUgc2FtZSBiaXRzICovCisJCQlpZiAobW9kYml0c1tqXSAmIHBteF9zZXR0aW5nc1tpXS0+b25tYXNrW2pdLm1hc2spIHsKKwkJCQlCVUcoKTsKKwkJCQlyZXR1cm4gLUVVU0VSUzsKKwkJCX0KKwkJCW1vZGJpdHNbal0gfD0gcG14X3NldHRpbmdzW2ldLT5vbm1hc2tbal0ubWFzazsKKwkJfQorCQl1cGRhdGVfcmVnaXN0ZXJzKHBteF9zZXR0aW5nc1tpXSwgdHJ1ZSk7CisJfQorCXJldHVybiAwOworfQorCisjaWYgKGRlZmluZWQoQ09ORklHX0RFQlVHX0ZTKSAmJiBkZWZpbmVkKENPTkZJR19VMzAwX0RFQlVHKSkKK3N0YXRpYyBpbnQgcG14X3Nob3coc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICpkYXRhKQoreworCWludCBpOworCXNlcV9wcmludGYocywgIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOworCXNlcV9wcmludGYocywgIlNFVFRJTkcgICAgIEJPVU5EIFRPIERFVklDRSAgICAgICAgICAgICAgIFNUQVRFXG4iKTsKKwlzZXFfcHJpbnRmKHMsICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKKwltdXRleF9sb2NrKCZwbXhfbXV0ZXgpOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHBteF9zZXR0aW5ncyk7IGkrKykgeworCQkvKiBGb3JtYXQgcG14IGFuZCBkZXZpY2UgbmFtZSBuaWNlbHkgKi8KKwkJY2hhciBjZHBbMzNdOworCQlpbnQgY2hhcnM7CisKKwkJY2hhcnMgPSBzbnByaW50ZigmY2RwWzBdLCAxNywgIiVzIiwgcG14X3NldHRpbmdzW2ldLT5uYW1lKTsKKwkJd2hpbGUgKGNoYXJzIDwgMTYpIHsKKwkJCWNkcFtjaGFyc10gPSAnICc7CisJCQljaGFycysrOworCQl9CisJCWNoYXJzID0gc25wcmludGYoJmNkcFsxNl0sIDE3LCAiJXMiLCBwbXhfc2V0dGluZ3NbaV0tPmRldiA/CisJCQkJZGV2X25hbWUocG14X3NldHRpbmdzW2ldLT5kZXYpIDogIk4vQSIpOworCQl3aGlsZSAoY2hhcnMgPCAxNikgeworCQkJY2RwW2NoYXJzKzE2XSA9ICcgJzsKKwkJCWNoYXJzKys7CisJCX0KKwkJY2RwWzMyXSA9ICdcMCc7CisKKwkJc2VxX3ByaW50ZihzLAorCQkJIiVzXHQlc1xuIiwKKwkJCSZjZHBbMF0sCisJCQlwbXhfc2V0dGluZ3NbaV0tPmFjdGl2YXRlZCA/CisJCQkiQUNUSVZBVEVEIiA6ICJERUFDVElWQVRFRCIKKwkJCSk7CisKKwl9CisJbXV0ZXhfdW5sb2NrKCZwbXhfbXV0ZXgpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBteF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBwbXhfc2hvdywgTlVMTCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHBteF9vcGVyYXRpb25zID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkub3BlbgkJPSBwbXhfb3BlbiwKKwkucmVhZAkJPSBzZXFfcmVhZCwKKwkubGxzZWVrCQk9IHNlcV9sc2VlaywKKwkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAorfTsKKworc3RhdGljIGludCBfX2luaXQgaW5pdF9wbXhfcmVhZF9kZWJ1Z2ZzKHZvaWQpCit7CisJLyogRXhwb3NlIGEgc2ltcGxlIGRlYnVnZnMgaW50ZXJmYWNlIHRvIHZpZXcgcG14IHNldHRpbmdzICovCisJKHZvaWQpIGRlYnVnZnNfY3JlYXRlX2ZpbGUoInBhZG11eCIsIFNfSUZSRUcgfCBTX0lSVUdPLAorCQkJCSAgIE5VTEwsIE5VTEwsCisJCQkJICAgJnBteF9vcGVyYXRpb25zKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoaXMgbmVlZHMgdG8gY29tZSBpbiBhZnRlciB0aGUgY29yZV9pbml0Y2FsbCgpLAorICogYmVjYXVzZSBkZWJ1Z2ZzIGlzIG5vdCBhdmFpbGFibGUgdW50aWwKKyAqIHRoZSBzdWJzeXN0ZW1zIGNvbWUgdXAuCisgKi8KK21vZHVsZV9pbml0KGluaXRfcG14X3JlYWRfZGVidWdmcyk7CisjZW5kaWYKKworc3RhdGljIGludCBfX2luaXQgcG14X2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gcG14X3NldF9kZWZhdWx0KCk7CisKKwlpZiAoSVNfRVJSX1ZBTFVFKHJldCkpCisJCXByX2NyaXQoInBhZG11eDogZGVmYXVsdCBzZXR0aW5ncyBjb3VsZCBub3QgYmUgc2V0XG4iKTsKKworCXJldHVybiAwOworfQorCisvKiBTaG91bGQgYmUgaW5pdGlhbGl6ZWQgYmVmb3JlIGNvbnN1bWVycyAqLworY29yZV9pbml0Y2FsbChwbXhfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXUzMDAvcGFkbXV4LmggYi9hcmNoL2FybS9tYWNoLXUzMDAvcGFkbXV4LmgKaW5kZXggOGMyMDk5YS4uNmU4Yjg2MCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC11MzAwL3BhZG11eC5oCisrKyBiL2FyY2gvYXJtL21hY2gtdTMwMC9wYWRtdXguaApAQCAtNiwxNCArNiwzNCBAQAogICogQ29weXJpZ2h0IChDKSAyMDA5IFNULUVyaWNzc29uIEFCCiAgKiBMaWNlbnNlIHRlcm1zOiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSB2ZXJzaW9uIDIKICAqIFUzMDAgUEFETVVYIEFQSQotICogQXV0aG9yOiBMaW51cyBXYWxsZWlqIDxsaW51cy53YWxsZWlqQHN0ZXJpY3Nzb24uY29tPgotICoKKyAqIEF1dGhvcjogTWFydGluIFBlcnNzb24gPG1hcnRpbi5wZXJzc29uQHN0ZXJpY3Nzb24uY29tPgogICovCiAKICNpZm5kZWYgX19NQUNIX1UzMDBfUEFETVVYX0gKICNkZWZpbmUgX19NQUNIX1UzMDBfUEFETVVYX0gKIAotdm9pZCBwbXhfc2V0X21pc3Npb25fbW9kZV9tbWModm9pZCk7Ci12b2lkIHBteF9zZXRfbWlzc2lvbl9tb2RlX3NwaSh2b2lkKTsKK2VudW0gcG14X3NldHRpbmdzIHsKKwlVMzAwX0FQUF9QTVhfTU1DX1NFVFRJTkcsCisJVTMwMF9BUFBfUE1YX1NQSV9TRVRUSU5HCit9OworCitzdHJ1Y3QgcG14X29ubWFzayB7CisJdTE2IG1hc2s7CQkvKiBNYXNrIGJpdHMgKi8KKwl1MTYgdmFsOwkJLyogVmFsdWUgd2hlbiBhY3RpdmUgKi8KK307CisKK3N0cnVjdCBwbXggeworCXN0cnVjdCBkZXZpY2UgKmRldjsKKwllbnVtIHBteF9zZXR0aW5ncyBzZXR0aW5nOworCWNoYXIgKm5hbWU7CisJYm9vbCBhY3RpdmF0ZWQ7CisJYm9vbCBkZWZhdWx0X29uOworCXN0cnVjdCBwbXhfb25tYXNrIG9ubWFza1tdOworfTsKKworc3RydWN0IHBteCAqcG14X2dldChzdHJ1Y3QgZGV2aWNlICpkZXYsIGVudW0gcG14X3NldHRpbmdzIHNldHRpbmcpOworaW50IHBteF9wdXQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcG14ICpwbXgpOworaW50IHBteF9hY3RpdmF0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBwbXggKnBteCk7CitpbnQgcG14X2RlYWN0aXZhdGUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcG14ICpwbXgpOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdTMwMC9zcGkuYyBiL2FyY2gvYXJtL21hY2gtdTMwMC9zcGkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMGU4ODdiCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC11MzAwL3NwaS5jCkBAIC0wLDAgKzEsMTI0IEBACisvKgorICogYXJjaC9hcm0vbWFjaC11MzAwL3NwaS5jCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IFNULUVyaWNzc29uIEFCCisgKiBMaWNlbnNlIHRlcm1zOiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSB2ZXJzaW9uIDIKKyAqCisgKiBBdXRob3I6IExpbnVzIFdhbGxlaWogPGxpbnVzLndhbGxlaWpAc3Rlcmljc3Nvbi5jb20+CisgKi8KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9hbWJhL2J1cy5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9hbWJhL3BsMDIyLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSAicGFkbXV4LmgiCisKKy8qCisgKiBUaGUgZm9sbG93aW5nIGlzIGZvciB0aGUgYWN0dWFsIGRldmljZXMgb24gdGhlIFNTUC9TUEkgYnVzCisgKi8KKyNpZmRlZiBDT05GSUdfTUFDSF9VMzAwX1NQSURVTU1ZCitzdGF0aWMgdm9pZCBzZWxlY3RfZHVtbXlfY2hpcCh1MzIgY2hpcHNlbGVjdCkKK3sKKwlwcl9kZWJ1ZygiQ09SRTogJXMgY2FsbGVkIHdpdGggQ1M9MHgleCAoJXMpXG4iLAorCQkgX19mdW5jX18sCisJCSBjaGlwc2VsZWN0LAorCQkgY2hpcHNlbGVjdCA/ICJ1bnNlbGVjdCBjaGlwIiA6ICJzZWxlY3QgY2hpcCIpOworCS8qCisJICogSGVyZSB5b3Ugd291bGQgd3JpdGUgdGhlIGNoaXAgc2VsZWN0IHZhbHVlIHRvIHRoZSBHUElPIHBpbnMgaWYKKwkgKiB0aGlzIHdhcyBhIHJlYWwgY2hpcCAoYnV0IHRoaXMgaXMgYSBsb29wYmFjayBkdW1teSkuCisJICovCit9CisKK3N0cnVjdCBwbDAyMl9jb25maWdfY2hpcCBkdW1teV9jaGlwX2luZm8gPSB7CisJLyogTm9taW5hbGx5IHRoaXMgaXMgTE9PUEJBQ0tfRElTQUJMRUQsIGJ1dCB0aGlzIGlzIG91ciBkdW1teSBjaGlwISAqLworCS5sYm0gPSBMT09QQkFDS19FTkFCTEVELAorCS8qCisJICogYXZhaWxhYmxlIFBPTExJTkdfVFJBTlNGRVIgYW5kIElOVEVSUlVQVF9UUkFOU0ZFUiwKKwkgKiBETUFfVFJBTlNGRVIgZG9lcyBub3Qgd29yaworCSAqLworCS5jb21fbW9kZSA9IElOVEVSUlVQVF9UUkFOU0ZFUiwKKwkuaWZhY2UgPSBTU1BfSU5URVJGQUNFX01PVE9ST0xBX1NQSSwKKwkvKiBXZSBjYW4gb25seSBhY3QgYXMgbWFzdGVyIGJ1dCBTU1BfU0xBVkUgaXMgcG9zc2libGUgaW4gdGhlb3J5ICovCisJLmhpZXJhcmNoeSA9IFNTUF9NQVNURVIsCisJLyogMCA9IGRyaXZlIFRYIGV2ZW4gYXMgc2xhdmUsIDEgPSBkbyBub3QgZHJpdmUgVFggYXMgc2xhdmUgKi8KKwkuc2xhdmVfdHhfZGlzYWJsZSA9IDAsCisJLyogTFNCIGZpcnN0ICovCisJLmVuZGlhbl90eCA9IFNTUF9UWF9MU0IsCisJLmVuZGlhbl9yeCA9IFNTUF9SWF9MU0IsCisJLmRhdGFfc2l6ZSA9IFNTUF9EQVRBX0JJVFNfOCwgLyogdXNlZCB0byBiZSAxMiBpbiBzb21lIGRlZmF1bHQgKi8KKwkucnhfbGV2X3RyaWcgPSBTU1BfUlhfMV9PUl9NT1JFX0VMRU0sCisJLnR4X2xldl90cmlnID0gU1NQX1RYXzFfT1JfTU9SRV9FTVBUWV9MT0MsCisJLmNsa19waGFzZSA9IFNTUF9DTEtfU0VDT05EX0VER0UsCisJLmNsa19wb2wgPSBTU1BfQ0xLX1BPTF9JRExFX0xPVywKKwkuY3RybF9sZW4gPSBTU1BfQklUU18xMiwKKwkud2FpdF9zdGF0ZSA9IFNTUF9NV0lSRV9XQUlUX1pFUk8sCisJLmR1cGxleCA9IFNTUF9NSUNST1dJUkVfQ0hBTk5FTF9GVUxMX0RVUExFWCwKKwkvKgorCSAqIFRoaXMgaXMgd2hlcmUgeW91IGluc2VydCBhIGNhbGwgdG8gYSBmdW5jdGlvbiB0byBlbmFibGUgQ1MKKwkgKiAodXN1YWxseSBHUElPKSBmb3IgYSBjZXJ0YWluIGNoaXAuCisJICovCisJLmNzX2NvbnRyb2wgPSBzZWxlY3RfZHVtbXlfY2hpcCwKK307CisjZW5kaWYKKworc3RhdGljIHN0cnVjdCBzcGlfYm9hcmRfaW5mbyB1MzAwX3NwaV9kZXZpY2VzW10gPSB7CisjaWZkZWYgQ09ORklHX01BQ0hfVTMwMF9TUElEVU1NWQorCXsKKwkJLyogQSBkdW1teSBjaGlwIHVzZWQgZm9yIGxvb3BiYWNrIHRlc3RzICovCisJCS5tb2RhbGlhcyAgICAgICA9ICJzcGktZHVtbXkiLAorCQkvKiBSZWFsbHkgZHVtbXksIHBhc3MgaW4gYWRkaXRpb25hbCBjaGlwIGNvbmZpZyBoZXJlICovCisJCS5wbGF0Zm9ybV9kYXRhICA9IE5VTEwsCisJCS8qIFRoaXMgZGVmaW5lcyBob3cgdGhlIGNvbnRyb2xsZXIgc2hhbGwgaGFuZGxlIHRoZSBkZXZpY2UgKi8KKwkJLmNvbnRyb2xsZXJfZGF0YSA9ICZkdW1teV9jaGlwX2luZm8sCisJCS8qIC5pcnEgLSBubyBleHRlcm5hbCBJUlEgcm91dGVkIGZyb20gdGhpcyBkZXZpY2UgKi8KKwkJLm1heF9zcGVlZF9oeiAgID0gMTAwMDAwMCwKKwkJLmJ1c19udW0gICAgICAgID0gMCwgLyogT25seSBvbmUgYnVzIG9uIHRoaXMgY2hpcCAqLworCQkuY2hpcF9zZWxlY3QgICAgPSAwLAorCQkvKiBNZWFucyBTUElfQ1NfSElHSCwgY2hhbmdlIGlmIGUuZyBsb3cgQ1MgKi8KKwkJLm1vZGUgICAgICAgICAgID0gMCwKKwl9LAorI2VuZGlmCit9OworCitzdGF0aWMgc3RydWN0IHBsMDIyX3NzcF9jb250cm9sbGVyIHNzcF9wbGF0Zm9ybV9kYXRhID0geworCS8qIElmIHlvdSBoYXZlIHNldmVyYWwgU1BJIGJ1c2VzIHRoaXMgdmFyaWVzLCB3ZSBoYXZlIG9ubHkgYnVzIDAgKi8KKwkuYnVzX2lkID0gMCwKKwkvKiBTZXQgdGhpcyB0byAxIHdoZW4gd2UgdGhpbmsgd2UgZ290IERNQSB3b3JraW5nICovCisJLmVuYWJsZV9kbWEgPSAwLAorCS8qCisJICogT24gdGhlIEFQUCBDUFUgR1BJTyA0LCA1IGFuZCA2IGFyZSBjb25uZWN0ZWQgYXMgZ2VuZXJpYworCSAqIGNoaXAgc2VsZWN0cyBmb3IgU1BJLiAoU2FtZSBvbiBVMzMwLCBVMzM1IGFuZCBVMzY1LikKKwkgKiBUT0RPOiBtYWtlIHN1cmUgdGhlIEdQSU8gZHJpdmVyIGNhbiBzZWxlY3QgdGhlc2UgcHJvcGVybHkKKwkgKiBhbmQgZG8gcGFkbXV4aW5nIGFjY29yZGluZ2x5IHRvby4KKwkgKi8KKwkubnVtX2NoaXBzZWxlY3QgPSAzLAorfTsKKworCit2b2lkIF9faW5pdCB1MzAwX3NwaV9pbml0KHN0cnVjdCBhbWJhX2RldmljZSAqYWRldikKK3sKKwlzdHJ1Y3QgcG14ICpwbXg7CisKKwlhZGV2LT5kZXYucGxhdGZvcm1fZGF0YSA9ICZzc3BfcGxhdGZvcm1fZGF0YTsKKwkvKgorCSAqIFNldHVwIHBhZG11eGluZyBmb3IgU1BJLiBTaW5jZSB0aGlzIG11c3QgYWx3YXlzIGJlCisJICogY29tcGlsZWQgaW50byB0aGUga2VybmVsLCBwbXggaXMgbmV2ZXIgcmVsZWFzZWQuCisJICovCisJcG14ID0gcG14X2dldCgmYWRldi0+ZGV2LCBVMzAwX0FQUF9QTVhfU1BJX1NFVFRJTkcpOworCisJaWYgKElTX0VSUihwbXgpKQorCQlkZXZfd2FybigmYWRldi0+ZGV2LCAiQ291bGQgbm90IGdldCBwYWRtdXggaGFuZGxlXG4iKTsKKwllbHNlIHsKKwkJaW50IHJldDsKKworCQlyZXQgPSBwbXhfYWN0aXZhdGUoJmFkZXYtPmRldiwgcG14KTsKKwkJaWYgKElTX0VSUl9WQUxVRShyZXQpKQorCQkJZGV2X3dhcm4oJmFkZXYtPmRldiwgIkNvdWxkIG5vdCBhY3RpdmF0ZSBwYWRtdXhpbmdcbiIpOworCX0KKworfQordm9pZCBfX2luaXQgdTMwMF9zcGlfcmVnaXN0ZXJfYm9hcmRfZGV2aWNlcyh2b2lkKQoreworCS8qIFJlZ2lzdGVyIGFueSBTUEkgZGV2aWNlcyAqLworCXNwaV9yZWdpc3Rlcl9ib2FyZF9pbmZvKHUzMDBfc3BpX2RldmljZXMsIEFSUkFZX1NJWkUodTMwMF9zcGlfZGV2aWNlcykpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC11MzAwL3NwaS5oIGIvYXJjaC9hcm0vbWFjaC11MzAwL3NwaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkM2Q4NjcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXUzMDAvc3BpLmgKQEAgLTAsMCArMSwyNiBAQAorLyoKKyAqIGFyY2gvYXJtL21hY2gtdTMwMC9zcGkuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBTVC1Fcmljc3NvbiBBQgorICogTGljZW5zZSB0ZXJtczogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgdmVyc2lvbiAyCisgKgorICogQXV0aG9yOiBMaW51cyBXYWxsZWlqIDxsaW51cy53YWxsZWlqQHN0ZXJpY3Nzb24uY29tPgorICovCisjaWZuZGVmIFNQSV9ICisjZGVmaW5lIFNQSV9ICisjaW5jbHVkZSA8bGludXgvYW1iYS9idXMuaD4KKworI2lmZGVmIENPTkZJR19TUElfUEwwMjIKK3ZvaWQgX19pbml0IHUzMDBfc3BpX2luaXQoc3RydWN0IGFtYmFfZGV2aWNlICphZGV2KTsKK3ZvaWQgX19pbml0IHUzMDBfc3BpX3JlZ2lzdGVyX2JvYXJkX2RldmljZXModm9pZCk7CisjZWxzZQorLyogQ29tcGlsZSBvdXQgU1BJIHN1cHBvcnQgaWYgUEwwMjIgaXMgbm90IHNlbGVjdGVkICovCitzdGF0aWMgaW5saW5lIHZvaWQgX19pbml0IHUzMDBfc3BpX2luaXQoc3RydWN0IGFtYmFfZGV2aWNlICphZGV2KQoreworfQorc3RhdGljIGlubGluZSB2b2lkIF9faW5pdCB1MzAwX3NwaV9yZWdpc3Rlcl9ib2FyZF9kZXZpY2VzKHZvaWQpCit7Cit9CisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXUzMDAvdGltZXIuYyBiL2FyY2gvYXJtL21hY2gtdTMwMC90aW1lci5jCmluZGV4IGNjZTUzMjAuLjI2ZDI2ZjUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdTMwMC90aW1lci5jCisrKyBiL2FyY2gvYXJtL21hY2gtdTMwMC90aW1lci5jCkBAIC0zNDYsNiArMzQ2LDIxIEBACiAJLmZsYWdzICAgICAgICAgID0gQ0xPQ0tfU09VUkNFX0lTX0NPTlRJTlVPVVMsCiB9OwogCisvKgorICogT3ZlcnJpZGUgdGhlIGdsb2JhbCB3ZWFrIHNjaGVkX2Nsb2NrIHN5bWJvbCB3aXRoIHRoaXMKKyAqIGxvY2FsIGltcGxlbWVudGF0aW9uIHdoaWNoIHVzZXMgdGhlIGNsb2Nrc291cmNlIHRvIGdldCBzb21lCisgKiBiZXR0ZXIgcmVzb2x1dGlvbiB3aGVuIHNjaGVkdWxpbmcgdGhlIGtlcm5lbC4gV2UgYWNjZXB0IHRoYXQKKyAqIHRoaXMgd3JhcHMgYXJvdW5kIGZvciBub3csIHNpbmNlIGl0IGlzIGp1c3QgYSByZWxhdGl2ZSB0aW1lCisgKiBzdGFtcC4gKEluc3BpcmVkIGJ5IE9NQVAgaW1wbGVtZW50YXRpb24uKQorICovCit1bnNpZ25lZCBsb25nIGxvbmcgbm90cmFjZSBzY2hlZF9jbG9jayh2b2lkKQoreworCXJldHVybiBjbG9ja3NvdXJjZV9jeWMybnMoY2xvY2tzb3VyY2VfdTMwMF8xbWh6LnJlYWQoCisJCQkJICAmY2xvY2tzb3VyY2VfdTMwMF8xbWh6KSwKKwkJCQkgIGNsb2Nrc291cmNlX3UzMDBfMW1oei5tdWx0LAorCQkJCSAgY2xvY2tzb3VyY2VfdTMwMF8xbWh6LnNoaWZ0KTsKK30KKwogCiAvKgogICogVGhpcyBzZXRzIHVwIHRoZSBzeXN0ZW0gdGltZXJzLCBjbG9jayBzb3VyY2UgYW5kIGNsb2NrIGV2ZW50LgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvY29yZS5jIGIvYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvY29yZS5jCmluZGV4IDk3NWVhZTQuLmUxM2JlN2MgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdmVyc2F0aWxlL2NvcmUuYworKysgYi9hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9jb3JlLmMKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9hbWJhL2J1cy5oPgogI2luY2x1ZGUgPGxpbnV4L2FtYmEvY2xjZC5oPgogI2luY2x1ZGUgPGxpbnV4L2FtYmEvcGwwNjEuaD4KKyNpbmNsdWRlIDxsaW51eC9hbWJhL21tY2kuaD4KICNpbmNsdWRlIDxsaW51eC9jbG9ja3NvdXJjZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsb2NrY2hpcHMuaD4KICNpbmNsdWRlIDxsaW51eC9jbnQzMl90b182My5oPgpAQCAtNDcsNyArNDgsNiBAQAogI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9tbWMuaD4KIAogI2luY2x1ZGUgImNvcmUuaCIKICNpbmNsdWRlICJjbG9jay5oIgpAQCAtMzY5LDcgKzM2OSw3IEBACiAJcmV0dXJuIHJlYWRsKFZFUlNBVElMRV9TWVNNQ0kpICYgbWFzazsKIH0KIAotc3RhdGljIHN0cnVjdCBtbWNfcGxhdGZvcm1fZGF0YSBtbWMwX3BsYXRfZGF0YSA9IHsKK3N0YXRpYyBzdHJ1Y3QgbW1jaV9wbGF0Zm9ybV9kYXRhIG1tYzBfcGxhdF9kYXRhID0gewogCS5vY3JfbWFzawk9IE1NQ19WRERfMzJfMzN8TU1DX1ZERF8zM18zNCwKIAkuc3RhdHVzCQk9IG1tY19zdGF0dXMsCiAJLmdwaW9fd3AJPSAtMSwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3ZlcnNhdGlsZV9wYi5jIGIvYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvdmVyc2F0aWxlX3BiLmMKaW5kZXggOWFmOGQ4MS4uMjM5Y2QzMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvdmVyc2F0aWxlX3BiLmMKKysrIGIvYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvdmVyc2F0aWxlX3BiLmMKQEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KICNpbmNsdWRlIDxsaW51eC9hbWJhL2J1cy5oPgogI2luY2x1ZGUgPGxpbnV4L2FtYmEvcGwwNjEuaD4KKyNpbmNsdWRlIDxsaW51eC9hbWJhL21tY2kuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogCiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgpAQCAtMzEsNyArMzIsNiBAQAogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvbW1jLmg+CiAKICNpbmNsdWRlICJjb3JlLmgiCiAKQEAgLTQxLDcgKzQxLDcgQEAKICNkZWZpbmUgSVJRX01NQ0kxQQlJUlFfU0lDX01NQ0kxQQogI2VuZGlmCiAKLXN0YXRpYyBzdHJ1Y3QgbW1jX3BsYXRmb3JtX2RhdGEgbW1jMV9wbGF0X2RhdGEgPSB7CitzdGF0aWMgc3RydWN0IG1tY2lfcGxhdGZvcm1fZGF0YSBtbWMxX3BsYXRfZGF0YSA9IHsKIAkub2NyX21hc2sJPSBNTUNfVkREXzMyXzMzfE1NQ19WRERfMzNfMzQsCiAJLnN0YXR1cwkJPSBtbWNfc3RhdHVzLAogCS5ncGlvX3dwCT0gLTEsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9LY29uZmlnIGIvYXJjaC9hcm0vbW0vS2NvbmZpZwppbmRleCA1ZmU1OTVhLi45MjY0ZDgxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21tL0tjb25maWcKQEAgLTE3LDcgKzE3LDcgQEAKIAlzZWxlY3QgQ1BVX0NQMTVfTU1VCiAJc2VsZWN0IENQVV9DT1BZX1YzIGlmIE1NVQogCXNlbGVjdCBDUFVfVExCX1YzIGlmIE1NVQotCXNlbGVjdCBDUFVfUEFCUlRfTk9JRkFSCisJc2VsZWN0IENQVV9QQUJSVF9MRUdBQ1kKIAloZWxwCiAJICBUaGUgQVJNNjEwIGlzIHRoZSBzdWNjZXNzb3IgdG8gdGhlIEFSTTMgcHJvY2Vzc29yCiAJICBhbmQgd2FzIHByb2R1Y2VkIGJ5IFZMU0kgVGVjaG5vbG9neSBJbmMuCkBAIC0zMSw3ICszMSw3IEBACiAJZGVwZW5kcyBvbiAhTU1VCiAJc2VsZWN0IENQVV8zMnY0VAogCXNlbGVjdCBDUFVfQUJSVF9MVjRUCi0Jc2VsZWN0IENQVV9QQUJSVF9OT0lGQVIKKwlzZWxlY3QgQ1BVX1BBQlJUX0xFR0FDWQogCXNlbGVjdCBDUFVfQ0FDSEVfVjQKIAloZWxwCiAJICBBIDMyLWJpdCBSSVNDIG1pY3JvcHJvY2Vzc29yIGJhc2VkIG9uIHRoZSBBUk03IHByb2Nlc3NvciBjb3JlCkBAIC00OSw3ICs0OSw3IEBACiAJc2VsZWN0IENQVV9DUDE1X01NVQogCXNlbGVjdCBDUFVfQ09QWV9WMyBpZiBNTVUKIAlzZWxlY3QgQ1BVX1RMQl9WMyBpZiBNTVUKLQlzZWxlY3QgQ1BVX1BBQlJUX05PSUZBUgorCXNlbGVjdCBDUFVfUEFCUlRfTEVHQUNZCiAJaGVscAogCSAgQSAzMi1iaXQgUklTQyBtaWNyb3Byb2Nlc3NvciBiYXNlZCBvbiB0aGUgQVJNNyBwcm9jZXNzb3IgY29yZQogCSAgZGVzaWduZWQgYnkgQWR2YW5jZWQgUklTQyBNYWNoaW5lcyBMdGQuIFRoZSBBUk03MTAgaXMgdGhlCkBAIC02NCw3ICs2NCw3IEBACiAJYm9vbCAiU3VwcG9ydCBBUk03MjBUIHByb2Nlc3NvciIgaWYgQVJDSF9JTlRFR1JBVE9SCiAJc2VsZWN0IENQVV8zMnY0VAogCXNlbGVjdCBDUFVfQUJSVF9MVjRUCi0Jc2VsZWN0IENQVV9QQUJSVF9OT0lGQVIKKwlzZWxlY3QgQ1BVX1BBQlJUX0xFR0FDWQogCXNlbGVjdCBDUFVfQ0FDSEVfVjQKIAlzZWxlY3QgQ1BVX0NBQ0hFX1ZJVlQKIAlzZWxlY3QgQ1BVX0NQMTVfTU1VCkBAIC04Myw3ICs4Myw3IEBACiAJZGVwZW5kcyBvbiAhTU1VCiAJc2VsZWN0IENQVV8zMnY0VAogCXNlbGVjdCBDUFVfQUJSVF9MVjRUCi0Jc2VsZWN0IENQVV9QQUJSVF9OT0lGQVIKKwlzZWxlY3QgQ1BVX1BBQlJUX0xFR0FDWQogCXNlbGVjdCBDUFVfQ0FDSEVfVjMJIyBhbHRob3VnaCB0aGUgY29yZSBpcyB2NHQKIAlzZWxlY3QgQ1BVX0NQMTVfTVBVCiAJaGVscApAQCAtMTAwLDcgKzEwMCw3IEBACiAJZGVwZW5kcyBvbiAhTU1VCiAJc2VsZWN0IENQVV8zMnY0VAogCXNlbGVjdCBDUFVfQUJSVF9OT01NVQotCXNlbGVjdCBDUFVfUEFCUlRfTk9JRkFSCisJc2VsZWN0IENQVV9QQUJSVF9MRUdBQ1kKIAlzZWxlY3QgQ1BVX0NBQ0hFX1Y0CiAJaGVscAogCSAgQSAzMi1iaXQgUklTQyBtaWNyb3Byb2Nlc3NvciBiYXNlZCBvbiB0aGUgQVJNOSBwcm9jZXNzb3IgY29yZQpAQCAtMTE0LDcgKzExNCw3IEBACiAJYm9vbCAiU3VwcG9ydCBBUk05MjBUIHByb2Nlc3NvciIgaWYgQVJDSF9JTlRFR1JBVE9SCiAJc2VsZWN0IENQVV8zMnY0VAogCXNlbGVjdCBDUFVfQUJSVF9FVjRUCi0Jc2VsZWN0IENQVV9QQUJSVF9OT0lGQVIKKwlzZWxlY3QgQ1BVX1BBQlJUX0xFR0FDWQogCXNlbGVjdCBDUFVfQ0FDSEVfVjRXVAogCXNlbGVjdCBDUFVfQ0FDSEVfVklWVAogCXNlbGVjdCBDUFVfQ1AxNV9NTVUKQEAgLTEyMiwxMCArMTIyLDcgQEAKIAlzZWxlY3QgQ1BVX1RMQl9WNFdCSSBpZiBNTVUKIAloZWxwCiAJICBUaGUgQVJNOTIwVCBpcyBsaWNlbnNlZCB0byBiZSBwcm9kdWNlZCBieSBudW1lcm91cyB2ZW5kb3JzLAotCSAgYW5kIGlzIHVzZWQgaW4gdGhlIE1hdmVyaWNrIEVQOTMxMiBhbmQgdGhlIFNhbXN1bmcgUzNDMjQxMC4KLQotCSAgTW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgTWF2ZXJpY2sgRVA5MzEyIGF0Ci0JICA8aHR0cDovL2xpbnV4ZGV2aWNlcy5jb20vcHJvZHVjdHMvUEQyMzgyODY2MDY4Lmh0bWw+LgorCSAgYW5kIGlzIHVzZWQgaW4gdGhlIENpcnJ1cyBFUDkzeHggYW5kIHRoZSBTYW1zdW5nIFMzQzI0MTAuCiAKIAkgIFNheSBZIGlmIHlvdSB3YW50IHN1cHBvcnQgZm9yIHRoZSBBUk05MjBUIHByb2Nlc3Nvci4KIAkgIE90aGVyd2lzZSwgc2F5IE4uCkBAIC0xMzUsNyArMTMyLDcgQEAKIAlib29sICJTdXBwb3J0IEFSTTkyMlQgcHJvY2Vzc29yIiBpZiBBUkNIX0lOVEVHUkFUT1IKIAlzZWxlY3QgQ1BVXzMydjRUCiAJc2VsZWN0IENQVV9BQlJUX0VWNFQKLQlzZWxlY3QgQ1BVX1BBQlJUX05PSUZBUgorCXNlbGVjdCBDUFVfUEFCUlRfTEVHQUNZCiAJc2VsZWN0IENQVV9DQUNIRV9WNFdUCiAJc2VsZWN0IENQVV9DQUNIRV9WSVZUCiAJc2VsZWN0IENQVV9DUDE1X01NVQpAQCAtMTU0LDcgKzE1MSw3IEBACiAgCWJvb2wgIlN1cHBvcnQgQVJNOTI1VCBwcm9jZXNzb3IiIGlmIEFSQ0hfT01BUDEKIAlzZWxlY3QgQ1BVXzMydjRUCiAJc2VsZWN0IENQVV9BQlJUX0VWNFQKLQlzZWxlY3QgQ1BVX1BBQlJUX05PSUZBUgorCXNlbGVjdCBDUFVfUEFCUlRfTEVHQUNZCiAJc2VsZWN0IENQVV9DQUNIRV9WNFdUCiAJc2VsZWN0IENQVV9DQUNIRV9WSVZUCiAJc2VsZWN0IENQVV9DUDE1X01NVQpAQCAtMTczLDcgKzE3MCw3IEBACiAJYm9vbCAiU3VwcG9ydCBBUk05MjZUIHByb2Nlc3NvciIgaWYgQVJDSF9JTlRFR1JBVE9SIHx8IE1BQ0hfUkVBTFZJRVdfRUIKIAlzZWxlY3QgQ1BVXzMydjUKIAlzZWxlY3QgQ1BVX0FCUlRfRVY1VEoKLQlzZWxlY3QgQ1BVX1BBQlJUX05PSUZBUgorCXNlbGVjdCBDUFVfUEFCUlRfTEVHQUNZCiAJc2VsZWN0IENQVV9DQUNIRV9WSVZUCiAJc2VsZWN0IENQVV9DUDE1X01NVQogCXNlbGVjdCBDUFVfQ09QWV9WNFdCIGlmIE1NVQpAQCAtMTkxLDcgKzE4OCw3IEBACiAJYm9vbAogCXNlbGVjdCBDUFVfMzJ2NAogCXNlbGVjdCBDUFVfQUJSVF9FVjQKLQlzZWxlY3QgQ1BVX1BBQlJUX05PSUZBUgorCXNlbGVjdCBDUFVfUEFCUlRfTEVHQUNZCiAJc2VsZWN0IENQVV9DQUNIRV9WSVZUCiAJc2VsZWN0IENQVV9DUDE1X01NVQogCXNlbGVjdCBDUFVfQ0FDSEVfRkEKQEAgLTIxMCw3ICsyMDcsNyBAQAogCWRlcGVuZHMgb24gIU1NVQogCXNlbGVjdCBDUFVfMzJ2NFQKIAlzZWxlY3QgQ1BVX0FCUlRfTk9NTVUKLQlzZWxlY3QgQ1BVX1BBQlJUX05PSUZBUgorCXNlbGVjdCBDUFVfUEFCUlRfTEVHQUNZCiAJc2VsZWN0IENQVV9DQUNIRV9WSVZUCiAJc2VsZWN0IENQVV9DUDE1X01QVQogCWhlbHAKQEAgLTIyOCw3ICsyMjUsNyBAQAogCWRlcGVuZHMgb24gIU1NVQogCXNlbGVjdCBDUFVfMzJ2NQogCXNlbGVjdCBDUFVfQUJSVF9OT01NVQotCXNlbGVjdCBDUFVfUEFCUlRfTk9JRkFSCisJc2VsZWN0IENQVV9QQUJSVF9MRUdBQ1kKIAlzZWxlY3QgQ1BVX0NBQ0hFX1ZJVlQKIAlzZWxlY3QgQ1BVX0NQMTVfTVBVCiAJaGVscApAQCAtMjQ0LDcgKzI0MSw3IEBACiAJYm9vbCAiU3VwcG9ydCBBUk0xMDIwVCAocmV2IDApIHByb2Nlc3NvciIgaWYgQVJDSF9JTlRFR1JBVE9SCiAJc2VsZWN0IENQVV8zMnY1CiAJc2VsZWN0IENQVV9BQlJUX0VWNFQKLQlzZWxlY3QgQ1BVX1BBQlJUX05PSUZBUgorCXNlbGVjdCBDUFVfUEFCUlRfTEVHQUNZCiAJc2VsZWN0IENQVV9DQUNIRV9WNFdUCiAJc2VsZWN0IENQVV9DQUNIRV9WSVZUCiAJc2VsZWN0IENQVV9DUDE1X01NVQpAQCAtMjYyLDcgKzI1OSw3IEBACiAJYm9vbCAiU3VwcG9ydCBBUk0xMDIwRSBwcm9jZXNzb3IiIGlmIEFSQ0hfSU5URUdSQVRPUgogCXNlbGVjdCBDUFVfMzJ2NQogCXNlbGVjdCBDUFVfQUJSVF9FVjRUCi0Jc2VsZWN0IENQVV9QQUJSVF9OT0lGQVIKKwlzZWxlY3QgQ1BVX1BBQlJUX0xFR0FDWQogCXNlbGVjdCBDUFVfQ0FDSEVfVjRXVAogCXNlbGVjdCBDUFVfQ0FDSEVfVklWVAogCXNlbGVjdCBDUFVfQ1AxNV9NTVUKQEAgLTI3NSw3ICsyNzIsNyBAQAogCWJvb2wgIlN1cHBvcnQgQVJNMTAyMkUgcHJvY2Vzc29yIiBpZiBBUkNIX0lOVEVHUkFUT1IKIAlzZWxlY3QgQ1BVXzMydjUKIAlzZWxlY3QgQ1BVX0FCUlRfRVY0VAotCXNlbGVjdCBDUFVfUEFCUlRfTk9JRkFSCisJc2VsZWN0IENQVV9QQUJSVF9MRUdBQ1kKIAlzZWxlY3QgQ1BVX0NBQ0hFX1ZJVlQKIAlzZWxlY3QgQ1BVX0NQMTVfTU1VCiAJc2VsZWN0IENQVV9DT1BZX1Y0V0IgaWYgTU1VICMgY2FuIHByb2JhYmx5IGRvIGJldHRlcgpAQCAtMjkzLDcgKzI5MCw3IEBACiAJYm9vbCAiU3VwcG9ydCBBUk0xMDI2RUotUyBwcm9jZXNzb3IiIGlmIEFSQ0hfSU5URUdSQVRPUgogCXNlbGVjdCBDUFVfMzJ2NQogCXNlbGVjdCBDUFVfQUJSVF9FVjVUICMgQnV0IG5lZWQgSmF6ZWxsZSwgYnV0IEVWNVRKIGlnbm9yZXMgYml0IDEwCi0Jc2VsZWN0IENQVV9QQUJSVF9OT0lGQVIKKwlzZWxlY3QgQ1BVX1BBQlJUX0xFR0FDWQogCXNlbGVjdCBDUFVfQ0FDSEVfVklWVAogCXNlbGVjdCBDUFVfQ1AxNV9NTVUKIAlzZWxlY3QgQ1BVX0NPUFlfVjRXQiBpZiBNTVUgIyBjYW4gcHJvYmFibHkgZG8gYmV0dGVyCkBAIC0zMTEsNyArMzA4LDcgQEAKIAlzZWxlY3QgQ1BVXzMydjMgaWYgQVJDSF9SUEMKIAlzZWxlY3QgQ1BVXzMydjQgaWYgIUFSQ0hfUlBDCiAJc2VsZWN0IENQVV9BQlJUX0VWNAotCXNlbGVjdCBDUFVfUEFCUlRfTk9JRkFSCisJc2VsZWN0IENQVV9QQUJSVF9MRUdBQ1kKIAlzZWxlY3QgQ1BVX0NBQ0hFX1Y0V0IKIAlzZWxlY3QgQ1BVX0NBQ0hFX1ZJVlQKIAlzZWxlY3QgQ1BVX0NQMTVfTU1VCkBAIC0zMzEsNyArMzI4LDcgQEAKIAlib29sCiAJc2VsZWN0IENQVV8zMnY0CiAJc2VsZWN0IENQVV9BQlJUX0VWNAotCXNlbGVjdCBDUFVfUEFCUlRfTk9JRkFSCisJc2VsZWN0IENQVV9QQUJSVF9MRUdBQ1kKIAlzZWxlY3QgQ1BVX0NBQ0hFX1Y0V0IKIAlzZWxlY3QgQ1BVX0NBQ0hFX1ZJVlQKIAlzZWxlY3QgQ1BVX0NQMTVfTU1VCkBAIC0zNDIsNyArMzM5LDcgQEAKIAlib29sCiAJc2VsZWN0IENQVV8zMnY1CiAJc2VsZWN0IENQVV9BQlJUX0VWNVQKLQlzZWxlY3QgQ1BVX1BBQlJUX05PSUZBUgorCXNlbGVjdCBDUFVfUEFCUlRfTEVHQUNZCiAJc2VsZWN0IENQVV9DQUNIRV9WSVZUCiAJc2VsZWN0IENQVV9DUDE1X01NVQogCXNlbGVjdCBDUFVfVExCX1Y0V0JJIGlmIE1NVQpAQCAtMzUyLDcgKzM0OSw3IEBACiAJYm9vbAogCXNlbGVjdCBDUFVfMzJ2NQogCXNlbGVjdCBDUFVfQUJSVF9FVjVUCi0Jc2VsZWN0IENQVV9QQUJSVF9OT0lGQVIKKwlzZWxlY3QgQ1BVX1BBQlJUX0xFR0FDWQogCXNlbGVjdCBDUFVfQ0FDSEVfVklWVAogCXNlbGVjdCBDUFVfQ1AxNV9NTVUKIAlzZWxlY3QgQ1BVX1RMQl9WNFdCSSBpZiBNTVUKQEAgLTM2Myw3ICszNjAsNyBAQAogCWJvb2wKIAlzZWxlY3QgQ1BVXzMydjUKIAlzZWxlY3QgQ1BVX0FCUlRfRVY1VAotCXNlbGVjdCBDUFVfUEFCUlRfTk9JRkFSCisJc2VsZWN0IENQVV9QQUJSVF9MRUdBQ1kKIAlzZWxlY3QgQ1BVX0NBQ0hFX1ZJVlQKIAlzZWxlY3QgQ1BVX0NQMTVfTU1VCiAJc2VsZWN0IENQVV9UTEJfVjRXQkkgaWYgTU1VCkBAIC0zNzQsNyArMzcxLDcgQEAKIAlib29sCiAJc2VsZWN0IENQVV8zMnY1CiAJc2VsZWN0IENQVV9BQlJUX0VWNVQKLQlzZWxlY3QgQ1BVX1BBQlJUX05PSUZBUgorCXNlbGVjdCBDUFVfUEFCUlRfTEVHQUNZCiAJc2VsZWN0IENQVV9DQUNIRV9WSVZUCiAJc2VsZWN0IENQVV9DUDE1X01NVQogCXNlbGVjdCBDUFVfQ09QWV9GRVJPQ0VPTiBpZiBNTVUKQEAgLTM5NCw3ICszOTEsNyBAQAogCWJvb2wgIlN1cHBvcnQgQVJNIFY2IHByb2Nlc3NvciIgaWYgQVJDSF9JTlRFR1JBVE9SIHx8IE1BQ0hfUkVBTFZJRVdfRUIgfHwgTUFDSF9SRUFMVklFV19QQlgKIAlzZWxlY3QgQ1BVXzMydjYKIAlzZWxlY3QgQ1BVX0FCUlRfRVY2Ci0Jc2VsZWN0IENQVV9QQUJSVF9OT0lGQVIKKwlzZWxlY3QgQ1BVX1BBQlJUX1Y2CiAJc2VsZWN0IENQVV9DQUNIRV9WNgogCXNlbGVjdCBDUFVfQ0FDSEVfVklQVAogCXNlbGVjdCBDUFVfQ1AxNV9NTVUKQEAgLTQyMCw3ICs0MTcsNyBAQAogCXNlbGVjdCBDUFVfMzJ2NksKIAlzZWxlY3QgQ1BVXzMydjcKIAlzZWxlY3QgQ1BVX0FCUlRfRVY3Ci0Jc2VsZWN0IENQVV9QQUJSVF9JRkFSCisJc2VsZWN0IENQVV9QQUJSVF9WNwogCXNlbGVjdCBDUFVfQ0FDSEVfVjcKIAlzZWxlY3QgQ1BVX0NBQ0hFX1ZJUFQKIAlzZWxlY3QgQ1BVX0NQMTVfTU1VCkBAIC00ODIsMTAgKzQ3OSwxMyBAQAogY29uZmlnIENQVV9BQlJUX0VWNwogCWJvb2wKIAotY29uZmlnIENQVV9QQUJSVF9JRkFSCitjb25maWcgQ1BVX1BBQlJUX0xFR0FDWQogCWJvb2wKIAotY29uZmlnIENQVV9QQUJSVF9OT0lGQVIKK2NvbmZpZyBDUFVfUEFCUlRfVjYKKwlib29sCisKK2NvbmZpZyBDUFVfUEFCUlRfVjcKIAlib29sCiAKICMgVGhlIGNhY2hlIG1vZGVsCkBAIC03NzEsMyArNzcxLDggQEAKIAlzZWxlY3QgT1VURVJfQ0FDSEUKIAloZWxwCiAJICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBMMiBjYWNoZSBvbiBYU2NhbGUzLgorCitjb25maWcgQVJNX0wxX0NBQ0hFX1NISUZUCisJaW50CisJZGVmYXVsdCA2IGlmIEFSQ0hfT01BUDMKKwlkZWZhdWx0IDUKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL01ha2VmaWxlIGIvYXJjaC9hcm0vbW0vTWFrZWZpbGUKaW5kZXggNjNlM2Y2ZC4uMDU1Y2IyYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vbW0vTWFrZWZpbGUKQEAgLTI3LDYgKzI3LDEwIEBACiBvYmotJChDT05GSUdfQ1BVX0FCUlRfRVY2KQkrPSBhYm9ydC1ldjYubwogb2JqLSQoQ09ORklHX0NQVV9BQlJUX0VWNykJKz0gYWJvcnQtZXY3Lm8KIAorb2JqLSQoQ09ORklHX0NQVV9QQUJSVF9MRUdBQ1kpCSs9IHBhYm9ydC1sZWdhY3kubworb2JqLSQoQ09ORklHX0NQVV9QQUJSVF9WNikJKz0gcGFib3J0LXY2Lm8KK29iai0kKENPTkZJR19DUFVfUEFCUlRfVjcpCSs9IHBhYm9ydC12Ny5vCisKIG9iai0kKENPTkZJR19DUFVfQ0FDSEVfVjMpCSs9IGNhY2hlLXYzLm8KIG9iai0kKENPTkZJR19DUFVfQ0FDSEVfVjQpCSs9IGNhY2hlLXY0Lm8KIG9iai0kKENPTkZJR19DUFVfQ0FDSEVfVjRXVCkJKz0gY2FjaGUtdjR3dC5vCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9jYWNoZS12Ni5TIGIvYXJjaC9hcm0vbW0vY2FjaGUtdjYuUwppbmRleCA4ZjVjMTNmLi4yOTVlMjVkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9jYWNoZS12Ni5TCisrKyBiL2FyY2gvYXJtL21tL2NhY2hlLXY2LlMKQEAgLTEyLDYgKzEyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGFzbS9hc3NlbWJsZXIuaD4KKyNpbmNsdWRlIDxhc20vdW53aW5kLmg+CiAKICNpbmNsdWRlICJwcm9jLW1hY3Jvcy5TIgogCkBAIC0xMjEsMTEgKzEyMiwxMyBAQAogICoJLSB0aGUgSWNhY2hlIGRvZXMgbm90IHJlYWQgZGF0YSBmcm9tIHRoZSB3cml0ZSBidWZmZXIKICAqLwogRU5UUlkodjZfY29oZXJlbnRfdXNlcl9yYW5nZSkKLQorIFVOV0lORCguZm5zdGFydAkJKQogI2lmZGVmIEhBUlZBUkRfQ0FDSEUKIAliaWMJcjAsIHIwLCAjQ0FDSEVfTElORV9TSVpFIC0gMQotMToJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDEJCUAgY2xlYW4gRCBsaW5lCisxOgorIFVTRVIoCW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCAxCSkJQCBjbGVhbiBEIGxpbmUKIAlhZGQJcjAsIHIwLCAjQ0FDSEVfTElORV9TSVpFCisyOgogCWNtcAlyMCwgcjEKIAlibG8JMWIKICNlbmRpZgpAQCAtMTQzLDYgKzE0NiwxOSBAQAogCW1vdglwYywgbHIKIAogLyoKKyAqIEZhdWx0IGhhbmRsaW5nIGZvciB0aGUgY2FjaGUgb3BlcmF0aW9uIGFib3ZlLiBJZiB0aGUgdmlydHVhbCBhZGRyZXNzIGluIHIwCisgKiBpc24ndCBtYXBwZWQsIGp1c3QgdHJ5IHRoZSBuZXh0IHBhZ2UuCisgKi8KKzkwMDE6CisJbW92CXIwLCByMCwgbHNyICMxMgorCW1vdglyMCwgcjAsIGxzbCAjMTIKKwlhZGQJcjAsIHIwLCAjNDA5NgorCWIJMmIKKyBVTldJTkQoLmZuZW5kCQkpCitFTkRQUk9DKHY2X2NvaGVyZW50X3VzZXJfcmFuZ2UpCitFTkRQUk9DKHY2X2NvaGVyZW50X2tlcm5fcmFuZ2UpCisKKy8qCiAgKgl2Nl9mbHVzaF9rZXJuX2RjYWNoZV9wYWdlKGthZGRyKQogICoKICAqCUVuc3VyZSB0aGF0IHRoZSBkYXRhIGhlbGQgaW4gdGhlIHBhZ2Uga2FkZHIgaXMgd3JpdHRlbiBiYWNrCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9jYWNoZS12Ny5TIGIvYXJjaC9hcm0vbW0vY2FjaGUtdjcuUwppbmRleCBiZGEwZWMzLi5lMWJkOTc1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9jYWNoZS12Ny5TCisrKyBiL2FyY2gvYXJtL21tL2NhY2hlLXY3LlMKQEAgLTEzLDYgKzEzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGFzbS9hc3NlbWJsZXIuaD4KKyNpbmNsdWRlIDxhc20vdW53aW5kLmg+CiAKICNpbmNsdWRlICJwcm9jLW1hY3Jvcy5TIgogCkBAIC0xNTMsMTMgKzE1NCwxNiBAQAogICoJLSB0aGUgSWNhY2hlIGRvZXMgbm90IHJlYWQgZGF0YSBmcm9tIHRoZSB3cml0ZSBidWZmZXIKICAqLwogRU5UUlkodjdfY29oZXJlbnRfdXNlcl9yYW5nZSkKKyBVTldJTkQoLmZuc3RhcnQJCSkKIAlkY2FjaGVfbGluZV9zaXplIHIyLCByMwogCXN1YglyMywgcjIsICMxCiAJYmljCXIwLCByMCwgcjMKLTE6CW1jcglwMTUsIDAsIHIwLCBjNywgYzExLCAxCQlAIGNsZWFuIEQgbGluZSB0byB0aGUgcG9pbnQgb2YgdW5pZmljYXRpb24KKzE6CisgVVNFUigJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTEsIDEJKQlAIGNsZWFuIEQgbGluZSB0byB0aGUgcG9pbnQgb2YgdW5pZmljYXRpb24KIAlkc2IKLQltY3IJcDE1LCAwLCByMCwgYzcsIGM1LCAxCQlAIGludmFsaWRhdGUgSSBsaW5lCisgVVNFUigJbWNyCXAxNSwgMCwgcjAsIGM3LCBjNSwgMQkpCUAgaW52YWxpZGF0ZSBJIGxpbmUKIAlhZGQJcjAsIHIwLCByMgorMjoKIAljbXAJcjAsIHIxCiAJYmxvCTFiCiAJbW92CXIwLCAjMApAQCAtMTY3LDYgKzE3MSwxNyBAQAogCWRzYgogCWlzYgogCW1vdglwYywgbHIKKworLyoKKyAqIEZhdWx0IGhhbmRsaW5nIGZvciB0aGUgY2FjaGUgb3BlcmF0aW9uIGFib3ZlLiBJZiB0aGUgdmlydHVhbCBhZGRyZXNzIGluIHIwCisgKiBpc24ndCBtYXBwZWQsIGp1c3QgdHJ5IHRoZSBuZXh0IHBhZ2UuCisgKi8KKzkwMDE6CisJbW92CXIwLCByMCwgbHNyICMxMgorCW1vdglyMCwgcjAsIGxzbCAjMTIKKwlhZGQJcjAsIHIwLCAjNDA5NgorCWIJMmIKKyBVTldJTkQoLmZuZW5kCQkpCiBFTkRQUk9DKHY3X2NvaGVyZW50X2tlcm5fcmFuZ2UpCiBFTkRQUk9DKHY3X2NvaGVyZW50X3VzZXJfcmFuZ2UpCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL2NvbnRleHQuYyBiL2FyY2gvYXJtL21tL2NvbnRleHQuYwppbmRleCA2YmRhNzZhLi5hOWUyMmUzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9jb250ZXh0LmMKKysrIGIvYXJjaC9hcm0vbW0vY29udGV4dC5jCkBAIC01MCwxMCArNTAsNyBAQAogCQlpc2IoKTsKIAkJZmx1c2hfdGxiX2FsbCgpOwogCQlpZiAoaWNhY2hlX2lzX3ZpdnRfYXNpZF90YWdnZWQoKSkgewotCQkJYXNtKCJtY3IJcDE1LCAwLCAlMCwgYzcsIGM1LCAwCUAgaW52YWxpZGF0ZSBJLWNhY2hlXG4iCi0JCQkgICAgIm1jcglwMTUsIDAsICUwLCBjNywgYzUsIDYJQCBmbHVzaCBCVEFDL0JUQlxuIgotCQkJICAgIDoKLQkJCSAgICA6ICJyIiAoMCkpOworCQkJX19mbHVzaF9pY2FjaGVfYWxsKCk7CiAJCQlkc2IoKTsKIAkJfQogCX0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL2RtYS1tYXBwaW5nLmMgYi9hcmNoL2FybS9tbS9kbWEtbWFwcGluZy5jCmluZGV4IGIzMDkyNWYuLmI5NTkwYTcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL2RtYS1tYXBwaW5nLmMKKysrIGIvYXJjaC9hcm0vbW0vZG1hLW1hcHBpbmcuYwpAQCAtMjA1LDcgKzIwNSw3IEBACiAKIAlvcmRlciA9IGdldF9vcmRlcihzaXplKTsKIAotCWlmIChtYXNrICE9IDB4ZmZmZmZmZmYpCisJaWYgKG1hc2sgPCAweGZmZmZmZmZmVUxMKQogCQlnZnAgfD0gR0ZQX0RNQTsKIAogCXBhZ2UgPSBhbGxvY19wYWdlcyhnZnAsIG9yZGVyKTsKQEAgLTI4OSw3ICsyODksNyBAQAogCWlmICghbWFzaykKIAkJZ290byBlcnJvcjsKIAotCWlmIChtYXNrICE9IDB4ZmZmZmZmZmYpCisJaWYgKG1hc2sgPCAweGZmZmZmZmZmVUxMKQogCQlnZnAgfD0gR0ZQX0RNQTsKIAl2aXJ0ID0ga21hbGxvYyhzaXplLCBnZnApOwogCWlmICghdmlydCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL2ZhdWx0LWFybXYuYyBiL2FyY2gvYXJtL21tL2ZhdWx0LWFybXYuYwppbmRleCBiYzAwOTlkLi5kMGQxN2I2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9mYXVsdC1hcm12LmMKKysrIGIvYXJjaC9hcm0vbW0vZmF1bHQtYXJtdi5jCkBAIC0xNTMsMTQgKzE1MywxMSBAQAogCiAJcGFnZSA9IHBmbl90b19wYWdlKHBmbik7CiAJbWFwcGluZyA9IHBhZ2VfbWFwcGluZyhwYWdlKTsKLQlpZiAobWFwcGluZykgewogI2lmbmRlZiBDT05GSUdfU01QCi0JCWludCBkaXJ0eSA9IHRlc3RfYW5kX2NsZWFyX2JpdChQR19kY2FjaGVfZGlydHksICZwYWdlLT5mbGFncyk7Ci0KLQkJaWYgKGRpcnR5KQotCQkJX19mbHVzaF9kY2FjaGVfcGFnZShtYXBwaW5nLCBwYWdlKTsKKwlpZiAodGVzdF9hbmRfY2xlYXJfYml0KFBHX2RjYWNoZV9kaXJ0eSwgJnBhZ2UtPmZsYWdzKSkKKwkJX19mbHVzaF9kY2FjaGVfcGFnZShtYXBwaW5nLCBwYWdlKTsKICNlbmRpZgotCisJaWYgKG1hcHBpbmcpIHsKIAkJaWYgKGNhY2hlX2lzX3ZpdnQoKSkKIAkJCW1ha2VfY29oZXJlbnQobWFwcGluZywgdm1hLCBhZGRyLCBwZm4pOwogCQllbHNlIGlmICh2bWEtPnZtX2ZsYWdzICYgVk1fRVhFQykKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL2ZhdWx0LmMgYi9hcmNoL2FybS9tbS9mYXVsdC5jCmluZGV4IGNjODgyOWQuLjEwZTA2ODAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL2ZhdWx0LmMKKysrIGIvYXJjaC9hcm0vbW0vZmF1bHQuYwpAQCAtMjUsNiArMjUsMTkgQEAKIAogI2luY2x1ZGUgImZhdWx0LmgiCiAKKy8qCisgKiBGYXVsdCBzdGF0dXMgcmVnaXN0ZXIgZW5jb2RpbmdzLiAgV2Ugc3RlYWwgYml0IDMxIGZvciBvdXIgb3duIHB1cnBvc2VzLgorICovCisjZGVmaW5lIEZTUl9MTlhfUEYJCSgxIDw8IDMxKQorI2RlZmluZSBGU1JfV1JJVEUJCSgxIDw8IDExKQorI2RlZmluZSBGU1JfRlM0CQkJKDEgPDwgMTApCisjZGVmaW5lIEZTUl9GUzNfMAkJKDE1KQorCitzdGF0aWMgaW5saW5lIGludCBmc3JfZnModW5zaWduZWQgaW50IGZzcikKK3sKKwlyZXR1cm4gKGZzciAmIEZTUl9GUzNfMCkgfCAoZnNyICYgRlNSX0ZTNCkgPj4gNjsKK30KKwogI2lmZGVmIENPTkZJR19NTVUKIAogI2lmZGVmIENPTkZJR19LUFJPQkVTCkBAIC0xODIsMTggKzE5NSwzNSBAQAogI2RlZmluZSBWTV9GQVVMVF9CQURNQVAJCTB4MDEwMDAwCiAjZGVmaW5lIFZNX0ZBVUxUX0JBREFDQ0VTUwkweDAyMDAwMAogCi1zdGF0aWMgaW50CisvKgorICogQ2hlY2sgdGhhdCB0aGUgcGVybWlzc2lvbnMgb24gdGhlIFZNQSBhbGxvdyBmb3IgdGhlIGZhdWx0IHdoaWNoIG9jY3VycmVkLgorICogSWYgd2UgZW5jb3VudGVyZWQgYSB3cml0ZSBmYXVsdCwgd2UgbXVzdCBoYXZlIHdyaXRlIHBlcm1pc3Npb24sIG90aGVyd2lzZQorICogd2UgYWxsb3cgYW55IHBlcm1pc3Npb24uCisgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbCBhY2Nlc3NfZXJyb3IodW5zaWduZWQgaW50IGZzciwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCit7CisJdW5zaWduZWQgaW50IG1hc2sgPSBWTV9SRUFEIHwgVk1fV1JJVEUgfCBWTV9FWEVDOworCisJaWYgKGZzciAmIEZTUl9XUklURSkKKwkJbWFzayA9IFZNX1dSSVRFOworCWlmIChmc3IgJiBGU1JfTE5YX1BGKQorCQltYXNrID0gVk1fRVhFQzsKKworCXJldHVybiB2bWEtPnZtX2ZsYWdzICYgbWFzayA/IGZhbHNlIDogdHJ1ZTsKK30KKworc3RhdGljIGludCBfX2twcm9iZXMKIF9fZG9fcGFnZV9mYXVsdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBpbnQgZnNyLAogCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKIHsKIAlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKLQlpbnQgZmF1bHQsIG1hc2s7CisJaW50IGZhdWx0OwogCiAJdm1hID0gZmluZF92bWEobW0sIGFkZHIpOwogCWZhdWx0ID0gVk1fRkFVTFRfQkFETUFQOwotCWlmICghdm1hKQorCWlmICh1bmxpa2VseSghdm1hKSkKIAkJZ290byBvdXQ7Ci0JaWYgKHZtYS0+dm1fc3RhcnQgPiBhZGRyKQorCWlmICh1bmxpa2VseSh2bWEtPnZtX3N0YXJ0ID4gYWRkcikpCiAJCWdvdG8gY2hlY2tfc3RhY2s7CiAKIAkvKgpAQCAtMjAxLDQ3ICsyMzEsMjQgQEAKIAkgKiBtZW1vcnkgYWNjZXNzLCBzbyB3ZSBjYW4gaGFuZGxlIGl0LgogCSAqLwogZ29vZF9hcmVhOgotCWlmIChmc3IgJiAoMSA8PCAxMSkpIC8qIHdyaXRlPyAqLwotCQltYXNrID0gVk1fV1JJVEU7Ci0JZWxzZQotCQltYXNrID0gVk1fUkVBRHxWTV9FWEVDfFZNX1dSSVRFOwotCi0JZmF1bHQgPSBWTV9GQVVMVF9CQURBQ0NFU1M7Ci0JaWYgKCEodm1hLT52bV9mbGFncyAmIG1hc2spKQorCWlmIChhY2Nlc3NfZXJyb3IoZnNyLCB2bWEpKSB7CisJCWZhdWx0ID0gVk1fRkFVTFRfQkFEQUNDRVNTOwogCQlnb3RvIG91dDsKKwl9CiAKIAkvKgotCSAqIElmIGZvciBhbnkgcmVhc29uIGF0IGFsbCB3ZSBjb3VsZG4ndCBoYW5kbGUKLQkgKiB0aGUgZmF1bHQsIG1ha2Ugc3VyZSB3ZSBleGl0IGdyYWNlZnVsbHkgcmF0aGVyCi0JICogdGhhbiBlbmRsZXNzbHkgcmVkbyB0aGUgZmF1bHQuCisJICogSWYgZm9yIGFueSByZWFzb24gYXQgYWxsIHdlIGNvdWxkbid0IGhhbmRsZSB0aGUgZmF1bHQsIG1ha2UKKwkgKiBzdXJlIHdlIGV4aXQgZ3JhY2VmdWxseSByYXRoZXIgdGhhbiBlbmRsZXNzbHkgcmVkbyB0aGUgZmF1bHQuCiAJICovCi1zdXJ2aXZlOgotCWZhdWx0ID0gaGFuZGxlX21tX2ZhdWx0KG1tLCB2bWEsIGFkZHIgJiBQQUdFX01BU0ssIChmc3IgJiAoMSA8PCAxMSkpID8gRkFVTFRfRkxBR19XUklURSA6IDApOwotCWlmICh1bmxpa2VseShmYXVsdCAmIFZNX0ZBVUxUX0VSUk9SKSkgewotCQlpZiAoZmF1bHQgJiBWTV9GQVVMVF9PT00pCi0JCQlnb3RvIG91dF9vZl9tZW1vcnk7Ci0JCWVsc2UgaWYgKGZhdWx0ICYgVk1fRkFVTFRfU0lHQlVTKQotCQkJcmV0dXJuIGZhdWx0OwotCQlCVUcoKTsKLQl9CisJZmF1bHQgPSBoYW5kbGVfbW1fZmF1bHQobW0sIHZtYSwgYWRkciAmIFBBR0VfTUFTSywgKGZzciAmIEZTUl9XUklURSkgPyBGQVVMVF9GTEFHX1dSSVRFIDogMCk7CisJaWYgKHVubGlrZWx5KGZhdWx0ICYgVk1fRkFVTFRfRVJST1IpKQorCQlyZXR1cm4gZmF1bHQ7CiAJaWYgKGZhdWx0ICYgVk1fRkFVTFRfTUFKT1IpCiAJCXRzay0+bWFqX2ZsdCsrOwogCWVsc2UKIAkJdHNrLT5taW5fZmx0Kys7CiAJcmV0dXJuIGZhdWx0OwogCi1vdXRfb2ZfbWVtb3J5OgotCWlmICghaXNfZ2xvYmFsX2luaXQodHNrKSkKLQkJZ290byBvdXQ7Ci0KLQkvKgotCSAqIElmIHdlIGFyZSBvdXQgb2YgbWVtb3J5IGZvciBwaWQxLCBzbGVlcCBmb3IgYSB3aGlsZSBhbmQgcmV0cnkKLQkgKi8KLQl1cF9yZWFkKCZtbS0+bW1hcF9zZW0pOwotCXlpZWxkKCk7Ci0JZG93bl9yZWFkKCZtbS0+bW1hcF9zZW0pOwotCWdvdG8gc3Vydml2ZTsKLQogY2hlY2tfc3RhY2s6CiAJaWYgKHZtYS0+dm1fZmxhZ3MgJiBWTV9HUk9XU0RPV04gJiYgIWV4cGFuZF9zdGFjayh2bWEsIGFkZHIpKQogCQlnb3RvIGdvb2RfYXJlYTsKQEAgLTI3OCw2ICsyODUsMTggQEAKIAkJaWYgKCF1c2VyX21vZGUocmVncykgJiYgIXNlYXJjaF9leGNlcHRpb25fdGFibGVzKHJlZ3MtPkFSTV9wYykpCiAJCQlnb3RvIG5vX2NvbnRleHQ7CiAJCWRvd25fcmVhZCgmbW0tPm1tYXBfc2VtKTsKKwl9IGVsc2UgeworCQkvKgorCQkgKiBUaGUgYWJvdmUgZG93bl9yZWFkX3RyeWxvY2soKSBtaWdodCBoYXZlIHN1Y2NlZWRlZCBpbgorCQkgKiB3aGljaCBjYXNlLCB3ZSdsbCBoYXZlIG1pc3NlZCB0aGUgbWlnaHRfc2xlZXAoKSBmcm9tCisJCSAqIGRvd25fcmVhZCgpCisJCSAqLworCQltaWdodF9zbGVlcCgpOworI2lmZGVmIENPTkZJR19ERUJVR19WTQorCQlpZiAoIXVzZXJfbW9kZShyZWdzKSAmJgorCQkgICAgIXNlYXJjaF9leGNlcHRpb25fdGFibGVzKHJlZ3MtPkFSTV9wYykpCisJCQlnb3RvIG5vX2NvbnRleHQ7CisjZW5kaWYKIAl9CiAKIAlmYXVsdCA9IF9fZG9fcGFnZV9mYXVsdChtbSwgYWRkciwgZnNyLCB0c2spOwpAQCAtMjg5LDYgKzMwOCwxNiBAQAogCWlmIChsaWtlbHkoIShmYXVsdCAmIChWTV9GQVVMVF9FUlJPUiB8IFZNX0ZBVUxUX0JBRE1BUCB8IFZNX0ZBVUxUX0JBREFDQ0VTUykpKSkKIAkJcmV0dXJuIDA7CiAKKwlpZiAoZmF1bHQgJiBWTV9GQVVMVF9PT00pIHsKKwkJLyoKKwkJICogV2UgcmFuIG91dCBvZiBtZW1vcnksIGNhbGwgdGhlIE9PTSBraWxsZXIsIGFuZCByZXR1cm4gdG8KKwkJICogdXNlcnNwYWNlICh3aGljaCB3aWxsIHJldHJ5IHRoZSBmYXVsdCwgb3Iga2lsbCB1cyBpZiB3ZQorCQkgKiBnb3Qgb29tLWtpbGxlZCkKKwkJICovCisJCXBhZ2VmYXVsdF9vdXRfb2ZfbWVtb3J5KCk7CisJCXJldHVybiAwOworCX0KKwogCS8qCiAJICogSWYgd2UgYXJlIGluIGtlcm5lbCBtb2RlIGF0IHRoaXMgcG9pbnQsIHdlCiAJICogaGF2ZSBubyBjb250ZXh0IHRvIGhhbmRsZSB0aGlzIGZhdWx0IHdpdGguCkBAIC0yOTYsMTYgKzMyNSw2IEBACiAJaWYgKCF1c2VyX21vZGUocmVncykpCiAJCWdvdG8gbm9fY29udGV4dDsKIAotCWlmIChmYXVsdCAmIFZNX0ZBVUxUX09PTSkgewotCQkvKgotCQkgKiBXZSByYW4gb3V0IG9mIG1lbW9yeSwgb3Igc29tZSBvdGhlciB0aGluZwotCQkgKiBoYXBwZW5lZCB0byB1cyB0aGF0IG1hZGUgdXMgdW5hYmxlIHRvIGhhbmRsZQotCQkgKiB0aGUgcGFnZSBmYXVsdCBncmFjZWZ1bGx5LgotCQkgKi8KLQkJcHJpbnRrKCJWTToga2lsbGluZyBwcm9jZXNzICVzXG4iLCB0c2stPmNvbW0pOwotCQlkb19ncm91cF9leGl0KFNJR0tJTEwpOwotCQlyZXR1cm4gMDsKLQl9CiAJaWYgKGZhdWx0ICYgVk1fRkFVTFRfU0lHQlVTKSB7CiAJCS8qCiAJCSAqIFdlIGhhZCBzb21lIG1lbW9yeSwgYnV0IHdlcmUgdW5hYmxlIHRvCkBAIC00ODksMTAgKzUwOCwxMCBAQAogYXNtbGlua2FnZSB2b2lkIF9fZXhjZXB0aW9uCiBkb19EYXRhQWJvcnQodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBpbnQgZnNyLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKLQljb25zdCBzdHJ1Y3QgZnNyX2luZm8gKmluZiA9IGZzcl9pbmZvICsgKGZzciAmIDE1KSArICgoZnNyICYgKDEgPDwgMTApKSA+PiA2KTsKKwljb25zdCBzdHJ1Y3QgZnNyX2luZm8gKmluZiA9IGZzcl9pbmZvICsgZnNyX2ZzKGZzcik7CiAJc3RydWN0IHNpZ2luZm8gaW5mbzsKIAotCWlmICghaW5mLT5mbihhZGRyLCBmc3IsIHJlZ3MpKQorCWlmICghaW5mLT5mbihhZGRyLCBmc3IgJiB+RlNSX0xOWF9QRiwgcmVncykpCiAJCXJldHVybjsKIAogCXByaW50ayhLRVJOX0FMRVJUICJVbmhhbmRsZWQgZmF1bHQ6ICVzICgweCUwM3gpIGF0IDB4JTA4bHhcbiIsCkBAIC01MDUsOSArNTI0LDU4IEBACiAJYXJtX25vdGlmeV9kaWUoIiIsIHJlZ3MsICZpbmZvLCBmc3IsIDApOwogfQogCisKK3N0YXRpYyBzdHJ1Y3QgZnNyX2luZm8gaWZzcl9pbmZvW10gPSB7CisJeyBkb19iYWQsCQlTSUdCVVMsICAwLAkJInVua25vd24gMCIJCQkgICB9LAorCXsgZG9fYmFkLAkJU0lHQlVTLCAgMCwJCSJ1bmtub3duIDEiCQkJICAgfSwKKwl7IGRvX2JhZCwJCVNJR0JVUywgIDAsCQkiZGVidWcgZXZlbnQiCQkJICAgfSwKKwl7IGRvX2JhZCwJCVNJR1NFR1YsIFNFR1ZfQUNDRVJSLAkic2VjdGlvbiBhY2Nlc3MgZmxhZyBmYXVsdCIJICAgfSwKKwl7IGRvX2JhZCwJCVNJR0JVUywgIDAsCQkidW5rbm93biA0IgkJCSAgIH0sCisJeyBkb190cmFuc2xhdGlvbl9mYXVsdCwJU0lHU0VHViwgU0VHVl9NQVBFUlIsCSJzZWN0aW9uIHRyYW5zbGF0aW9uIGZhdWx0IgkgICB9LAorCXsgZG9fYmFkLAkJU0lHU0VHViwgU0VHVl9BQ0NFUlIsCSJwYWdlIGFjY2VzcyBmbGFnIGZhdWx0IgkgICB9LAorCXsgZG9fcGFnZV9mYXVsdCwJU0lHU0VHViwgU0VHVl9NQVBFUlIsCSJwYWdlIHRyYW5zbGF0aW9uIGZhdWx0IgkgICB9LAorCXsgZG9fYmFkLAkJU0lHQlVTLAkgMCwJCSJleHRlcm5hbCBhYm9ydCBvbiBub24tbGluZWZldGNoIiAgfSwKKwl7IGRvX2JhZCwJCVNJR1NFR1YsIFNFR1ZfQUNDRVJSLAkic2VjdGlvbiBkb21haW4gZmF1bHQiCQkgICB9LAorCXsgZG9fYmFkLAkJU0lHQlVTLCAgMCwJCSJ1bmtub3duIDEwIgkJCSAgIH0sCisJeyBkb19iYWQsCQlTSUdTRUdWLCBTRUdWX0FDQ0VSUiwJInBhZ2UgZG9tYWluIGZhdWx0IgkJICAgfSwKKwl7IGRvX2JhZCwJCVNJR0JVUywJIDAsCQkiZXh0ZXJuYWwgYWJvcnQgb24gdHJhbnNsYXRpb24iCSAgIH0sCisJeyBkb19zZWN0X2ZhdWx0LAlTSUdTRUdWLCBTRUdWX0FDQ0VSUiwJInNlY3Rpb24gcGVybWlzc2lvbiBmYXVsdCIJICAgfSwKKwl7IGRvX2JhZCwJCVNJR0JVUywJIDAsCQkiZXh0ZXJuYWwgYWJvcnQgb24gdHJhbnNsYXRpb24iCSAgIH0sCisJeyBkb19wYWdlX2ZhdWx0LAlTSUdTRUdWLCBTRUdWX0FDQ0VSUiwJInBhZ2UgcGVybWlzc2lvbiBmYXVsdCIJCSAgIH0sCisJeyBkb19iYWQsCQlTSUdCVVMsICAwLAkJInVua25vd24gMTYiCQkJICAgfSwKKwl7IGRvX2JhZCwJCVNJR0JVUywgIDAsCQkidW5rbm93biAxNyIJCQkgICB9LAorCXsgZG9fYmFkLAkJU0lHQlVTLCAgMCwJCSJ1bmtub3duIDE4IgkJCSAgIH0sCisJeyBkb19iYWQsCQlTSUdCVVMsICAwLAkJInVua25vd24gMTkiCQkJICAgfSwKKwl7IGRvX2JhZCwJCVNJR0JVUywgIDAsCQkidW5rbm93biAyMCIJCQkgICB9LAorCXsgZG9fYmFkLAkJU0lHQlVTLCAgMCwJCSJ1bmtub3duIDIxIgkJCSAgIH0sCisJeyBkb19iYWQsCQlTSUdCVVMsICAwLAkJInVua25vd24gMjIiCQkJICAgfSwKKwl7IGRvX2JhZCwJCVNJR0JVUywgIDAsCQkidW5rbm93biAyMyIJCQkgICB9LAorCXsgZG9fYmFkLAkJU0lHQlVTLCAgMCwJCSJ1bmtub3duIDI0IgkJCSAgIH0sCisJeyBkb19iYWQsCQlTSUdCVVMsICAwLAkJInVua25vd24gMjUiCQkJICAgfSwKKwl7IGRvX2JhZCwJCVNJR0JVUywgIDAsCQkidW5rbm93biAyNiIJCQkgICB9LAorCXsgZG9fYmFkLAkJU0lHQlVTLCAgMCwJCSJ1bmtub3duIDI3IgkJCSAgIH0sCisJeyBkb19iYWQsCQlTSUdCVVMsICAwLAkJInVua25vd24gMjgiCQkJICAgfSwKKwl7IGRvX2JhZCwJCVNJR0JVUywgIDAsCQkidW5rbm93biAyOSIJCQkgICB9LAorCXsgZG9fYmFkLAkJU0lHQlVTLCAgMCwJCSJ1bmtub3duIDMwIgkJCSAgIH0sCisJeyBkb19iYWQsCQlTSUdCVVMsICAwLAkJInVua25vd24gMzEiCQkJICAgfSwKK307CisKIGFzbWxpbmthZ2Ugdm9pZCBfX2V4Y2VwdGlvbgotZG9fUHJlZmV0Y2hBYm9ydCh1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQorZG9fUHJlZmV0Y2hBYm9ydCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGludCBpZnNyLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKLQlkb190cmFuc2xhdGlvbl9mYXVsdChhZGRyLCAwLCByZWdzKTsKKwljb25zdCBzdHJ1Y3QgZnNyX2luZm8gKmluZiA9IGlmc3JfaW5mbyArIGZzcl9mcyhpZnNyKTsKKwlzdHJ1Y3Qgc2lnaW5mbyBpbmZvOworCisJaWYgKCFpbmYtPmZuKGFkZHIsIGlmc3IgfCBGU1JfTE5YX1BGLCByZWdzKSkKKwkJcmV0dXJuOworCisJcHJpbnRrKEtFUk5fQUxFUlQgIlVuaGFuZGxlZCBwcmVmZXRjaCBhYm9ydDogJXMgKDB4JTAzeCkgYXQgMHglMDhseFxuIiwKKwkJaW5mLT5uYW1lLCBpZnNyLCBhZGRyKTsKKworCWluZm8uc2lfc2lnbm8gPSBpbmYtPnNpZzsKKwlpbmZvLnNpX2Vycm5vID0gMDsKKwlpbmZvLnNpX2NvZGUgID0gaW5mLT5jb2RlOworCWluZm8uc2lfYWRkciAgPSAodm9pZCBfX3VzZXIgKilhZGRyOworCWFybV9ub3RpZnlfZGllKCIiLCByZWdzLCAmaW5mbywgaWZzciwgMCk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL2ZsdXNoLmMgYi9hcmNoL2FybS9tbS9mbHVzaC5jCmluZGV4IGIyNzk0MjkuLjdmMjk0ZjMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL2ZsdXNoLmMKKysrIGIvYXJjaC9hcm0vbW0vZmx1c2guYwpAQCAtMTgsMTAgKzE4LDYgQEAKIAogI2luY2x1ZGUgIm1tLmgiCiAKLSNpZmRlZiBDT05GSUdfQVJNX0VSUkFUQV80MTE5MjAKLWV4dGVybiB2b2lkIHY2X2ljYWNoZV9pbnZhbF9hbGwodm9pZCk7Ci0jZW5kaWYKLQogI2lmZGVmIENPTkZJR19DUFVfQ0FDSEVfVklQVAogCiAjZGVmaW5lIEFMSUFTX0ZMVVNIX1NUQVJUCTB4ZmZmZjQwMDAKQEAgLTM1LDE2ICszMSwxMSBAQAogCWZsdXNoX3RsYl9rZXJuZWxfcGFnZSh0byk7CiAKIAlhc20oCSJtY3JyCXAxNSwgMCwgJTEsICUwLCBjMTRcbiIKLQkiCW1jcglwMTUsIDAsICUyLCBjNywgYzEwLCA0XG4iCi0jaWZuZGVmIENPTkZJR19BUk1fRVJSQVRBXzQxMTkyMAotCSIJbWNyCXAxNSwgMCwgJTIsIGM3LCBjNSwgMFxuIgotI2VuZGlmCisJIgltY3IJcDE1LCAwLCAlMiwgYzcsIGMxMCwgNCIKIAkgICAgOgogCSAgICA6ICJyIiAodG8pLCAiciIgKHRvICsgUEFHRV9TSVpFIC0gTDFfQ0FDSEVfQllURVMpLCAiciIgKHplcm8pCiAJICAgIDogImNjIik7Ci0jaWZkZWYgQ09ORklHX0FSTV9FUlJBVEFfNDExOTIwCi0JdjZfaWNhY2hlX2ludmFsX2FsbCgpOwotI2VuZGlmCisJX19mbHVzaF9pY2FjaGVfYWxsKCk7CiB9CiAKIHZvaWQgZmx1c2hfY2FjaGVfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pCkBAIC01NywxNiArNDgsMTEgQEAKIAogCWlmIChjYWNoZV9pc192aXB0X2FsaWFzaW5nKCkpIHsKIAkJYXNtKAkibWNyCXAxNSwgMCwgJTAsIGM3LCBjMTQsIDBcbiIKLQkJIgltY3IJcDE1LCAwLCAlMCwgYzcsIGMxMCwgNFxuIgotI2lmbmRlZiBDT05GSUdfQVJNX0VSUkFUQV80MTE5MjAKLQkJIgltY3IJcDE1LCAwLCAlMCwgYzcsIGM1LCAwXG4iCi0jZW5kaWYKKwkJIgltY3IJcDE1LCAwLCAlMCwgYzcsIGMxMCwgNCIKIAkJICAgIDoKIAkJICAgIDogInIiICgwKQogCQkgICAgOiAiY2MiKTsKLSNpZmRlZiBDT05GSUdfQVJNX0VSUkFUQV80MTE5MjAKLQkJdjZfaWNhY2hlX2ludmFsX2FsbCgpOwotI2VuZGlmCisJCV9fZmx1c2hfaWNhY2hlX2FsbCgpOwogCX0KIH0KIApAQCAtODEsMTYgKzY3LDExIEBACiAKIAlpZiAoY2FjaGVfaXNfdmlwdF9hbGlhc2luZygpKSB7CiAJCWFzbSgJIm1jcglwMTUsIDAsICUwLCBjNywgYzE0LCAwXG4iCi0JCSIJbWNyCXAxNSwgMCwgJTAsIGM3LCBjMTAsIDRcbiIKLSNpZm5kZWYgQ09ORklHX0FSTV9FUlJBVEFfNDExOTIwCi0JCSIJbWNyCXAxNSwgMCwgJTAsIGM3LCBjNSwgMFxuIgotI2VuZGlmCisJCSIJbWNyCXAxNSwgMCwgJTAsIGM3LCBjMTAsIDQiCiAJCSAgICA6CiAJCSAgICA6ICJyIiAoMCkKIAkJICAgIDogImNjIik7Ci0jaWZkZWYgQ09ORklHX0FSTV9FUlJBVEFfNDExOTIwCi0JCXY2X2ljYWNoZV9pbnZhbF9hbGwoKTsKLSNlbmRpZgorCQlfX2ZsdXNoX2ljYWNoZV9hbGwoKTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL2hpZ2htZW0uYyBiL2FyY2gvYXJtL21tL2hpZ2htZW0uYwppbmRleCA3M2NhZTU3Li4zMGY4MmZiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9oaWdobWVtLmMKKysrIGIvYXJjaC9hcm0vbW0vaGlnaG1lbS5jCkBAIC00Niw2ICs0Niw4IEBACiAJaWYgKCFQYWdlSGlnaE1lbShwYWdlKSkKIAkJcmV0dXJuIHBhZ2VfYWRkcmVzcyhwYWdlKTsKIAorCWRlYnVnX2ttYXBfYXRvbWljKHR5cGUpOworCiAJa21hcCA9IGttYXBfaGlnaF9nZXQocGFnZSk7CiAJaWYgKGttYXApCiAJCXJldHVybiBrbWFwOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vaW5pdC5jIGIvYXJjaC9hcm0vbW0vaW5pdC5jCmluZGV4IGY5ODI2MDYuLjUyYzQwZDEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL2luaXQuYworKysgYi9hcmNoL2FybS9tbS9pbml0LmMKQEAgLTI3Myw3ICsyNzMsNiBAQAogCQlzdHJ1Y3QgbWVtYmFuayAqYmFuayA9ICZtaS0+YmFua1tpXTsKIAkJaWYgKCFiYW5rLT5oaWdobWVtKQogCQkJZnJlZV9ib290bWVtX25vZGUocGdkYXQsIGJhbmtfcGh5c19zdGFydChiYW5rKSwgYmFua19waHlzX3NpemUoYmFuaykpOwotCQltZW1vcnlfcHJlc2VudChub2RlLCBiYW5rX3Bmbl9zdGFydChiYW5rKSwgYmFua19wZm5fZW5kKGJhbmspKTsKIAl9CiAKIAkvKgpAQCAtMzcwLDYgKzM2OSwxOSBAQAogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTChwZm5fdmFsaWQpOworCitzdGF0aWMgdm9pZCBhcm1fbWVtb3J5X3ByZXNlbnQoc3RydWN0IG1lbWluZm8gKm1pLCBpbnQgbm9kZSkKK3sKK30KKyNlbHNlCitzdGF0aWMgdm9pZCBhcm1fbWVtb3J5X3ByZXNlbnQoc3RydWN0IG1lbWluZm8gKm1pLCBpbnQgbm9kZSkKK3sKKwlpbnQgaTsKKwlmb3JfZWFjaF9ub2RlYmFuayhpLCBtaSwgbm9kZSkgeworCQlzdHJ1Y3QgbWVtYmFuayAqYmFuayA9ICZtaS0+YmFua1tpXTsKKwkJbWVtb3J5X3ByZXNlbnQobm9kZSwgYmFua19wZm5fc3RhcnQoYmFuayksIGJhbmtfcGZuX2VuZChiYW5rKSk7CisJfQorfQogI2VuZGlmCiAKIHN0YXRpYyBpbnQgX19pbml0IG1lbWluZm9fY21wKGNvbnN0IHZvaWQgKl9hLCBjb25zdCB2b2lkICpfYikKQEAgLTQyNyw2ICs0MzksMTIgQEAKIAkJICovCiAJCWlmIChub2RlID09IGluaXRyZF9ub2RlKQogCQkJYm9vdG1lbV9yZXNlcnZlX2luaXRyZChub2RlKTsKKworCQkvKgorCQkgKiBTcGFyc2VtZW0gdHJpZXMgdG8gYWxsb2NhdGUgYm9vdG1lbSBpbiBtZW1vcnlfcHJlc2VudCgpLAorCQkgKiBzbyBtdXN0IGJlIGRvbmUgYWZ0ZXIgdGhlIGZpeGVkIHJlc2VydmF0aW9ucworCQkgKi8KKwkJYXJtX21lbW9yeV9wcmVzZW50KG1pLCBub2RlKTsKIAl9CiAKIAkvKgpAQCAtNDgzLDcgKzUwMSw3IEBACiAJLyoKIAkgKiBDb252ZXJ0IHN0YXJ0X3Bmbi9lbmRfcGZuIHRvIGEgc3RydWN0IHBhZ2UgcG9pbnRlci4KIAkgKi8KLQlzdGFydF9wZyA9IHBmbl90b19wYWdlKHN0YXJ0X3Bmbik7CisJc3RhcnRfcGcgPSBwZm5fdG9fcGFnZShzdGFydF9wZm4gLSAxKSArIDE7CiAJZW5kX3BnID0gcGZuX3RvX3BhZ2UoZW5kX3Bmbik7CiAKIAkvKgpAQCAtNjEzLDYgKzYzMSwxNCBAQAogCiB2b2lkIGZyZWVfaW5pdG1lbSh2b2lkKQogeworI2lmZGVmIENPTkZJR19IQVZFX1RDTQorCWV4dGVybiBjaGFyICpfX3RjbV9zdGFydCwgKl9fdGNtX2VuZDsKKworCXRvdGFscmFtX3BhZ2VzICs9IGZyZWVfYXJlYShfX3BoeXNfdG9fcGZuKF9fcGEoX190Y21fc3RhcnQpKSwKKwkJCQkgICAgX19waHlzX3RvX3BmbihfX3BhKF9fdGNtX2VuZCkpLAorCQkJCSAgICAiVENNIGxpbmsiKTsKKyNlbmRpZgorCiAJaWYgKCFtYWNoaW5lX2lzX2ludGVncmF0b3IoKSAmJiAhbWFjaGluZV9pc19jaW50ZWdyYXRvcigpKQogCQl0b3RhbHJhbV9wYWdlcyArPSBmcmVlX2FyZWEoX19waHlzX3RvX3BmbihfX3BhKF9faW5pdF9iZWdpbikpLAogCQkJCQkgICAgX19waHlzX3RvX3BmbihfX3BhKF9faW5pdF9lbmQpKSwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL21tYXAuYyBiL2FyY2gvYXJtL21tL21tYXAuYwppbmRleCBmNzQ1N2ZlLi4yYjc5OTY0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9tbWFwLmMKKysrIGIvYXJjaC9hcm0vbW0vbW1hcC5jCkBAIC0xMjQsNyArMTI0LDcgQEAKIHsKIAlpZiAoYWRkciA8IFBIWVNfT0ZGU0VUKQogCQlyZXR1cm4gMDsKLQlpZiAoYWRkciArIHNpemUgPj0gX19wYShoaWdoX21lbW9yeSAtIDEpKQorCWlmIChhZGRyICsgc2l6ZSA+IF9fcGEoaGlnaF9tZW1vcnkgLSAxKSArIDEpCiAJCXJldHVybiAwOwogCiAJcmV0dXJuIDE7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9tbXUuYyBiL2FyY2gvYXJtL21tL21tdS5jCmluZGV4IDQ0MjZlZTYuLmVhNjdiZTAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL21tdS5jCisrKyBiL2FyY2gvYXJtL21tL21tdS5jCkBAIC0yMSw2ICsyMSw3IEBACiAjaW5jbHVkZSA8YXNtL2NhY2hldHlwZS5oPgogI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgogI2luY2x1ZGUgPGFzbS9zaXplcy5oPgorI2luY2x1ZGUgPGFzbS9zbXBfcGxhdC5oPgogI2luY2x1ZGUgPGFzbS90bGIuaD4KICNpbmNsdWRlIDxhc20vaGlnaG1lbS5oPgogCkBAIC0xMTYsNiArMTE3LDEzIEBACiAJfQogCWlmIChpID09IEFSUkFZX1NJWkUoY2FjaGVfcG9saWNpZXMpKQogCQlwcmludGsoS0VSTl9FUlIgIkVSUk9SOiB1bmtub3duIG9yIHVuc3VwcG9ydGVkIGNhY2hlIHBvbGljeVxuIik7CisJLyoKKwkgKiBUaGlzIHJlc3RyaWN0aW9uIGlzIHBhcnRseSB0byBkbyB3aXRoIHRoZSB3YXkgd2UgYm9vdDsgaXQgaXMKKwkgKiB1bnByZWRpY3RhYmxlIHRvIGhhdmUgbWVtb3J5IG1hcHBlZCB1c2luZyB0d28gZGlmZmVyZW50IHNldHMgb2YKKwkgKiBtZW1vcnkgYXR0cmlidXRlcyAoc2hhcmVkLCB0eXBlLCBhbmQgY2FjaGUgYXR0cmlicykuICBXZSBjYW4gbm90CisJICogY2hhbmdlIHRoZXNlIGF0dHJpYnV0ZXMgb25jZSB0aGUgaW5pdGlhbCBhc3NlbWJseSBoYXMgc2V0dXAgdGhlCisJICogcGFnZSB0YWJsZXMuCisJICovCiAJaWYgKGNwdV9hcmNoaXRlY3R1cmUoKSA+PSBDUFVfQVJDSF9BUk12NikgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICJPbmx5IGNhY2hlcG9saWN5PXdyaXRlYmFjayBzdXBwb3J0ZWQgb24gQVJNdjYgYW5kIGxhdGVyXG4iKTsKIAkJY2FjaGVwb2xpY3kgPSBDUE9MSUNZX1dSSVRFQkFDSzsKQEAgLTcwOSwxMCArNzE3LDYgQEAKIAkJCWlmIChtZW1pbmZvLm5yX2JhbmtzID49IE5SX0JBTktTKSB7CiAJCQkJcHJpbnRrKEtFUk5fQ1JJVCAiTlJfQkFOS1MgdG9vIGxvdywgIgogCQkJCQkJICJpZ25vcmluZyBoaWdoIG1lbW9yeVxuIik7Ci0JCQl9IGVsc2UgaWYgKGNhY2hlX2lzX3ZpcHRfYWxpYXNpbmcoKSkgewotCQkJCXByaW50ayhLRVJOX0NSSVQgIkhJR0hNRU0gaXMgbm90IHlldCBzdXBwb3J0ZWQgIgotCQkJCQkJICJ3aXRoIFZJUFQgYWxpYXNpbmcgY2FjaGUsICIKLQkJCQkJCSAiaWdub3JpbmcgaGlnaCBtZW1vcnlcbiIpOwogCQkJfSBlbHNlIHsKIAkJCQltZW1tb3ZlKGJhbmsgKyAxLCBiYW5rLAogCQkJCQkobWVtaW5mby5ucl9iYW5rcyAtIGkpICogc2l6ZW9mKCpiYW5rKSk7CkBAIC03MjYsNiArNzMwLDggQEAKIAkJCWJhbmstPnNpemUgPSBWTUFMTE9DX01JTiAtIF9fdmEoYmFuay0+c3RhcnQpOwogCQl9CiAjZWxzZQorCQliYW5rLT5oaWdobWVtID0gaGlnaG1lbTsKKwogCQkvKgogCQkgKiBDaGVjayB3aGV0aGVyIHRoaXMgbWVtb3J5IGJhbmsgd291bGQgZW50aXJlbHkgb3ZlcmxhcAogCQkgKiB0aGUgdm1hbGxvYyBhcmVhLgpAQCAtNzU0LDYgKzc2MCwzOCBAQAogI2VuZGlmCiAJCWorKzsKIAl9CisjaWZkZWYgQ09ORklHX0hJR0hNRU0KKwlpZiAoaGlnaG1lbSkgeworCQljb25zdCBjaGFyICpyZWFzb24gPSBOVUxMOworCisJCWlmIChjYWNoZV9pc192aXB0X2FsaWFzaW5nKCkpIHsKKwkJCS8qCisJCQkgKiBJbnRlcmFjdGlvbnMgYmV0d2VlbiBrbWFwIGFuZCBvdGhlciBtYXBwaW5ncworCQkJICogbWFrZSBoaWdobWVtIHN1cHBvcnQgd2l0aCBhbGlhc2luZyBWSVBUIGNhY2hlcworCQkJICogcmF0aGVyIGRpZmZpY3VsdC4KKwkJCSAqLworCQkJcmVhc29uID0gIndpdGggVklQVCBhbGlhc2luZyBjYWNoZSI7CisjaWZkZWYgQ09ORklHX1NNUAorCQl9IGVsc2UgaWYgKHRsYl9vcHNfbmVlZF9icm9hZGNhc3QoKSkgeworCQkJLyoKKwkJCSAqIGttYXBfaGlnaCBuZWVkcyB0byBvY2Nhc2lvbmFsbHkgZmx1c2ggVExCIGVudHJpZXMsCisJCQkgKiBob3dldmVyLCBpZiB0aGUgVExCIGVudHJpZXMgbmVlZCB0byBiZSBicm9hZGNhc3QKKwkJCSAqIHdlIG1heSBkZWFkbG9jazoKKwkJCSAqICBrbWFwX2hpZ2goaXJxcyBvZmYpLT5mbHVzaF9hbGxfemVyb19wa21hcHMtPgorCQkJICogIGZsdXNoX3RsYl9rZXJuZWxfcmFuZ2UtPnNtcF9jYWxsX2Z1bmN0aW9uX21hbnkKKwkJCSAqICAgKG11c3Qgbm90IGJlIGNhbGxlZCB3aXRoIGlycXMgb2ZmKQorCQkJICovCisJCQlyZWFzb24gPSAid2l0aG91dCBoYXJkd2FyZSBUTEIgb3BzIGJyb2FkY2FzdGluZyI7CisjZW5kaWYKKwkJfQorCQlpZiAocmVhc29uKSB7CisJCQlwcmludGsoS0VSTl9DUklUICJISUdITUVNIGlzIG5vdCBzdXBwb3J0ZWQgJXMsIGlnbm9yaW5nIGhpZ2ggbWVtb3J5XG4iLAorCQkJCXJlYXNvbik7CisJCQl3aGlsZSAoaiA+IDAgJiYgbWVtaW5mby5iYW5rW2ogLSAxXS5oaWdobWVtKQorCQkJCWotLTsKKwkJfQorCX0KKyNlbmRpZgogCW1lbWluZm8ubnJfYmFua3MgPSBqOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wYWJvcnQtbGVnYWN5LlMgYi9hcmNoL2FybS9tbS9wYWJvcnQtbGVnYWN5LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODc5NzBlYgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21tL3BhYm9ydC1sZWdhY3kuUwpAQCAtMCwwICsxLDE5IEBACisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorI2luY2x1ZGUgPGFzbS9hc3NlbWJsZXIuaD4KKworLyoKKyAqIEZ1bmN0aW9uOiBsZWdhY3lfcGFib3J0CisgKgorICogUGFyYW1zICA6IHIwID0gYWRkcmVzcyBvZiBhYm9ydGVkIGluc3RydWN0aW9uCisgKgorICogUmV0dXJucyA6IHIwID0gYWRkcmVzcyBvZiBhYm9ydAorICoJICAgOiByMSA9IFNpbXVsYXRlZCBJRlNSIHdpdGggc2VjdGlvbiB0cmFuc2xhdGlvbiBmYXVsdCBzdGF0dXMKKyAqCisgKiBQdXJwb3NlIDogb2J0YWluIGluZm9ybWF0aW9uIGFib3V0IGN1cnJlbnQgcHJlZmV0Y2ggYWJvcnQuCisgKi8KKworCS5hbGlnbgk1CitFTlRSWShsZWdhY3lfcGFib3J0KQorCW1vdglyMSwgIzUKKwltb3YJcGMsIGxyCitFTkRQUk9DKGxlZ2FjeV9wYWJvcnQpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wYWJvcnQtdjYuUyBiL2FyY2gvYXJtL21tL3BhYm9ydC12Ni5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2ZTNkMWUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tbS9wYWJvcnQtdjYuUwpAQCAtMCwwICsxLDE5IEBACisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorI2luY2x1ZGUgPGFzbS9hc3NlbWJsZXIuaD4KKworLyoKKyAqIEZ1bmN0aW9uOiB2Nl9wYWJvcnQKKyAqCisgKiBQYXJhbXMgIDogcjAgPSBhZGRyZXNzIG9mIGFib3J0ZWQgaW5zdHJ1Y3Rpb24KKyAqCisgKiBSZXR1cm5zIDogcjAgPSBhZGRyZXNzIG9mIGFib3J0CisgKgkgICA6IHIxID0gSUZTUgorICoKKyAqIFB1cnBvc2UgOiBvYnRhaW4gaW5mb3JtYXRpb24gYWJvdXQgY3VycmVudCBwcmVmZXRjaCBhYm9ydC4KKyAqLworCisJLmFsaWduCTUKK0VOVFJZKHY2X3BhYm9ydCkKKwltcmMJcDE1LCAwLCByMSwgYzUsIGMwLCAxCQlAIGdldCBJRlNSCisJbW92CXBjLCBscgorRU5EUFJPQyh2Nl9wYWJvcnQpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wYWJvcnQtdjcuUyBiL2FyY2gvYXJtL21tL3BhYm9ydC12Ny5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4YjNiMzAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tbS9wYWJvcnQtdjcuUwpAQCAtMCwwICsxLDIwIEBACisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorI2luY2x1ZGUgPGFzbS9hc3NlbWJsZXIuaD4KKworLyoKKyAqIEZ1bmN0aW9uOiB2Nl9wYWJvcnQKKyAqCisgKiBQYXJhbXMgIDogcjAgPSBhZGRyZXNzIG9mIGFib3J0ZWQgaW5zdHJ1Y3Rpb24KKyAqCisgKiBSZXR1cm5zIDogcjAgPSBhZGRyZXNzIG9mIGFib3J0CisgKgkgICA6IHIxID0gSUZTUgorICoKKyAqIFB1cnBvc2UgOiBvYnRhaW4gaW5mb3JtYXRpb24gYWJvdXQgY3VycmVudCBwcmVmZXRjaCBhYm9ydC4KKyAqLworCisJLmFsaWduCTUKK0VOVFJZKHY3X3BhYm9ydCkKKwltcmMJcDE1LCAwLCByMCwgYzYsIGMwLCAyCQlAIGdldCBJRkFSCisJbXJjCXAxNSwgMCwgcjEsIGM1LCBjMCwgMQkJQCBnZXQgSUZTUgorCW1vdglwYywgbHIKK0VORFBST0ModjdfcGFib3J0KQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy1hcm0xMDIwLlMgYi9hcmNoL2FybS9tbS9wcm9jLWFybTEwMjAuUwppbmRleCBiNTU1MWJmLi5kOWZiNGI5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLWFybTEwMjAuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLWFybTEwMjAuUwpAQCAtNDQ5LDcgKzQ0OSw3IEBACiAJLnR5cGUJYXJtMTAyMF9wcm9jZXNzb3JfZnVuY3Rpb25zLCAjb2JqZWN0CiBhcm0xMDIwX3Byb2Nlc3Nvcl9mdW5jdGlvbnM6CiAJLndvcmQJdjR0X2Vhcmx5X2Fib3J0Ci0JLndvcmQJcGFib3J0X25vaWZhcgorCS53b3JkCWxlZ2FjeV9wYWJvcnQKIAkud29yZAljcHVfYXJtMTAyMF9wcm9jX2luaXQKIAkud29yZAljcHVfYXJtMTAyMF9wcm9jX2ZpbgogCS53b3JkCWNwdV9hcm0xMDIwX3Jlc2V0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLWFybTEwMjBlLlMgYi9hcmNoL2FybS9tbS9wcm9jLWFybTEwMjBlLlMKaW5kZXggOGJjNjc0MC4uNzQ1M2I3NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy1hcm0xMDIwZS5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtMTAyMGUuUwpAQCAtNDMwLDcgKzQzMCw3IEBACiAJLnR5cGUJYXJtMTAyMGVfcHJvY2Vzc29yX2Z1bmN0aW9ucywgI29iamVjdAogYXJtMTAyMGVfcHJvY2Vzc29yX2Z1bmN0aW9uczoKIAkud29yZAl2NHRfZWFybHlfYWJvcnQKLQkud29yZAlwYWJvcnRfbm9pZmFyCisJLndvcmQJbGVnYWN5X3BhYm9ydAogCS53b3JkCWNwdV9hcm0xMDIwZV9wcm9jX2luaXQKIAkud29yZAljcHVfYXJtMTAyMGVfcHJvY19maW4KIAkud29yZAljcHVfYXJtMTAyMGVfcmVzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MtYXJtMTAyMi5TIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm0xMDIyLlMKaW5kZXggMmNkMDNlNi4uOGViNzJkNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy1hcm0xMDIyLlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm0xMDIyLlMKQEAgLTQxMyw3ICs0MTMsNyBAQAogCS50eXBlCWFybTEwMjJfcHJvY2Vzc29yX2Z1bmN0aW9ucywgI29iamVjdAogYXJtMTAyMl9wcm9jZXNzb3JfZnVuY3Rpb25zOgogCS53b3JkCXY0dF9lYXJseV9hYm9ydAotCS53b3JkCXBhYm9ydF9ub2lmYXIKKwkud29yZAlsZWdhY3lfcGFib3J0CiAJLndvcmQJY3B1X2FybTEwMjJfcHJvY19pbml0CiAJLndvcmQJY3B1X2FybTEwMjJfcHJvY19maW4KIAkud29yZAljcHVfYXJtMTAyMl9yZXNldApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy1hcm0xMDI2LlMgYi9hcmNoL2FybS9tbS9wcm9jLWFybTEwMjYuUwppbmRleCBhZDk2MWE4Li4zYjU5ZjBkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLWFybTEwMjYuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLWFybTEwMjYuUwpAQCAtNDA4LDcgKzQwOCw3IEBACiAJLnR5cGUJYXJtMTAyNl9wcm9jZXNzb3JfZnVuY3Rpb25zLCAjb2JqZWN0CiBhcm0xMDI2X3Byb2Nlc3Nvcl9mdW5jdGlvbnM6CiAJLndvcmQJdjV0X2Vhcmx5X2Fib3J0Ci0JLndvcmQJcGFib3J0X25vaWZhcgorCS53b3JkCWxlZ2FjeV9wYWJvcnQKIAkud29yZAljcHVfYXJtMTAyNl9wcm9jX2luaXQKIAkud29yZAljcHVfYXJtMTAyNl9wcm9jX2ZpbgogCS53b3JkCWNwdV9hcm0xMDI2X3Jlc2V0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLWFybTZfNy5TIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm02XzcuUwppbmRleCA4MGQ2ZTFkLi4zZjljZDNkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLWFybTZfNy5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtNl83LlMKQEAgLTI3OCw3ICsyNzgsNyBAQAogCQkudHlwZQlhcm02X3Byb2Nlc3Nvcl9mdW5jdGlvbnMsICNvYmplY3QKIEVOVFJZKGFybTZfcHJvY2Vzc29yX2Z1bmN0aW9ucykKIAkJLndvcmQJY3B1X2FybTZfZGF0YV9hYm9ydAotCQkud29yZAlwYWJvcnRfbm9pZmFyCisJCS53b3JkCWxlZ2FjeV9wYWJvcnQKIAkJLndvcmQJY3B1X2FybTZfcHJvY19pbml0CiAJCS53b3JkCWNwdV9hcm02X3Byb2NfZmluCiAJCS53b3JkCWNwdV9hcm02X3Jlc2V0CkBAIC0yOTUsNyArMjk1LDcgQEAKIAkJLnR5cGUJYXJtN19wcm9jZXNzb3JfZnVuY3Rpb25zLCAjb2JqZWN0CiBFTlRSWShhcm03X3Byb2Nlc3Nvcl9mdW5jdGlvbnMpCiAJCS53b3JkCWNwdV9hcm03X2RhdGFfYWJvcnQKLQkJLndvcmQJcGFib3J0X25vaWZhcgorCQkud29yZAlsZWdhY3lfcGFib3J0CiAJCS53b3JkCWNwdV9hcm03X3Byb2NfaW5pdAogCQkud29yZAljcHVfYXJtN19wcm9jX2ZpbgogCQkud29yZAljcHVfYXJtN19yZXNldApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy1hcm03MjAuUyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtNzIwLlMKaW5kZXggODVhZTE4Ni4uMGI2MmRlMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy1hcm03MjAuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLWFybTcyMC5TCkBAIC0xODEsNyArMTgxLDcgQEAKIAkJLnR5cGUJYXJtNzIwX3Byb2Nlc3Nvcl9mdW5jdGlvbnMsICNvYmplY3QKIEVOVFJZKGFybTcyMF9wcm9jZXNzb3JfZnVuY3Rpb25zKQogCQkud29yZAl2NHRfbGF0ZV9hYm9ydAotCQkud29yZAlwYWJvcnRfbm9pZmFyCisJCS53b3JkCWxlZ2FjeV9wYWJvcnQKIAkJLndvcmQJY3B1X2FybTcyMF9wcm9jX2luaXQKIAkJLndvcmQJY3B1X2FybTcyMF9wcm9jX2ZpbgogCQkud29yZAljcHVfYXJtNzIwX3Jlc2V0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLWFybTc0MC5TIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm03NDAuUwppbmRleCA0Zjk1YmVlLi4wMTg2MGNkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLWFybTc0MC5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtNzQwLlMKQEAgLTEyNiw3ICsxMjYsNyBAQAogCS50eXBlCWFybTc0MF9wcm9jZXNzb3JfZnVuY3Rpb25zLCAjb2JqZWN0CiBFTlRSWShhcm03NDBfcHJvY2Vzc29yX2Z1bmN0aW9ucykKIAkud29yZAl2NHRfbGF0ZV9hYm9ydAotCS53b3JkCXBhYm9ydF9ub2lmYXIKKwkud29yZAlsZWdhY3lfcGFib3J0CiAJLndvcmQJY3B1X2FybTc0MF9wcm9jX2luaXQKIAkud29yZAljcHVfYXJtNzQwX3Byb2NfZmluCiAJLndvcmQJY3B1X2FybTc0MF9yZXNldApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy1hcm03dGRtaS5TIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm03dGRtaS5TCmluZGV4IDkzZTA1ZmEuLjEyMDFiOTggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MtYXJtN3RkbWkuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLWFybTd0ZG1pLlMKQEAgLTY0LDcgKzY0LDcgQEAKIAkJLnR5cGUJYXJtN3RkbWlfcHJvY2Vzc29yX2Z1bmN0aW9ucywgI29iamVjdAogRU5UUlkoYXJtN3RkbWlfcHJvY2Vzc29yX2Z1bmN0aW9ucykKIAkJLndvcmQJdjR0X2xhdGVfYWJvcnQKLQkJLndvcmQJcGFib3J0X25vaWZhcgorCQkud29yZAlsZWdhY3lfcGFib3J0CiAJCS53b3JkCWNwdV9hcm03dGRtaV9wcm9jX2luaXQKIAkJLndvcmQJY3B1X2FybTd0ZG1pX3Byb2NfZmluCiAJCS53b3JkCWNwdV9hcm03dGRtaV9yZXNldApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy1hcm05MjAuUyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtOTIwLlMKaW5kZXggOTE0ZDY4OC4uMmI3YzE5NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy1hcm05MjAuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLWFybTkyMC5TCkBAIC0zOTUsNyArMzk1LDcgQEAKIAkudHlwZQlhcm05MjBfcHJvY2Vzc29yX2Z1bmN0aW9ucywgI29iamVjdAogYXJtOTIwX3Byb2Nlc3Nvcl9mdW5jdGlvbnM6CiAJLndvcmQJdjR0X2Vhcmx5X2Fib3J0Ci0JLndvcmQJcGFib3J0X25vaWZhcgorCS53b3JkCWxlZ2FjeV9wYWJvcnQKIAkud29yZAljcHVfYXJtOTIwX3Byb2NfaW5pdAogCS53b3JkCWNwdV9hcm05MjBfcHJvY19maW4KIAkud29yZAljcHVfYXJtOTIwX3Jlc2V0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLWFybTkyMi5TIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm05MjIuUwppbmRleCA1MWM5Yzk4Li4wNmExYWE0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLWFybTkyMi5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtOTIyLlMKQEAgLTM5OSw3ICszOTksNyBAQAogCS50eXBlCWFybTkyMl9wcm9jZXNzb3JfZnVuY3Rpb25zLCAjb2JqZWN0CiBhcm05MjJfcHJvY2Vzc29yX2Z1bmN0aW9uczoKIAkud29yZAl2NHRfZWFybHlfYWJvcnQKLQkud29yZAlwYWJvcnRfbm9pZmFyCisJLndvcmQJbGVnYWN5X3BhYm9ydAogCS53b3JkCWNwdV9hcm05MjJfcHJvY19pbml0CiAJLndvcmQJY3B1X2FybTkyMl9wcm9jX2ZpbgogCS53b3JkCWNwdV9hcm05MjJfcmVzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MtYXJtOTI1LlMgYi9hcmNoL2FybS9tbS9wcm9jLWFybTkyNS5TCmluZGV4IDI3MjQ1MjYuLmNiNTM0MzUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MtYXJtOTI1LlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm05MjUuUwpAQCAtNDYyLDcgKzQ2Miw3IEBACiAJLnR5cGUJYXJtOTI1X3Byb2Nlc3Nvcl9mdW5jdGlvbnMsICNvYmplY3QKIGFybTkyNV9wcm9jZXNzb3JfZnVuY3Rpb25zOgogCS53b3JkCXY0dF9lYXJseV9hYm9ydAotCS53b3JkCXBhYm9ydF9ub2lmYXIKKwkud29yZAlsZWdhY3lfcGFib3J0CiAJLndvcmQJY3B1X2FybTkyNV9wcm9jX2luaXQKIAkud29yZAljcHVfYXJtOTI1X3Byb2NfZmluCiAJLndvcmQJY3B1X2FybTkyNV9yZXNldApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy1hcm05MjYuUyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtOTI2LlMKaW5kZXggNTQ0NjY5My4uMWM0ODQ4NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy1hcm05MjYuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLWFybTkyNi5TCkBAIC00MTUsNyArNDE1LDcgQEAKIAkudHlwZQlhcm05MjZfcHJvY2Vzc29yX2Z1bmN0aW9ucywgI29iamVjdAogYXJtOTI2X3Byb2Nlc3Nvcl9mdW5jdGlvbnM6CiAJLndvcmQJdjV0al9lYXJseV9hYm9ydAotCS53b3JkCXBhYm9ydF9ub2lmYXIKKwkud29yZAlsZWdhY3lfcGFib3J0CiAJLndvcmQJY3B1X2FybTkyNl9wcm9jX2luaXQKIAkud29yZAljcHVfYXJtOTI2X3Byb2NfZmluCiAJLndvcmQJY3B1X2FybTkyNl9yZXNldApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy1hcm05NDAuUyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtOTQwLlMKaW5kZXggZjU5NTExNy4uNWIwZjg0NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy1hcm05NDAuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLWFybTk0MC5TCkBAIC0zMjIsNyArMzIyLDcgQEAKIAkudHlwZQlhcm05NDBfcHJvY2Vzc29yX2Z1bmN0aW9ucywgI29iamVjdAogRU5UUlkoYXJtOTQwX3Byb2Nlc3Nvcl9mdW5jdGlvbnMpCiAJLndvcmQJbm9tbXVfZWFybHlfYWJvcnQKLQkud29yZAlwYWJvcnRfbm9pZmFyCisJLndvcmQJbGVnYWN5X3BhYm9ydAogCS53b3JkCWNwdV9hcm05NDBfcHJvY19pbml0CiAJLndvcmQJY3B1X2FybTk0MF9wcm9jX2ZpbgogCS53b3JkCWNwdV9hcm05NDBfcmVzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MtYXJtOTQ2LlMgYi9hcmNoL2FybS9tbS9wcm9jLWFybTk0Ni5TCmluZGV4IGUwM2Y2ZmYuLjQwYzA0NDkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MtYXJtOTQ2LlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm05NDYuUwpAQCAtMzc3LDcgKzM3Nyw3IEBACiAJLnR5cGUJYXJtOTQ2X3Byb2Nlc3Nvcl9mdW5jdGlvbnMsICNvYmplY3QKIEVOVFJZKGFybTk0Nl9wcm9jZXNzb3JfZnVuY3Rpb25zKQogCS53b3JkCW5vbW11X2Vhcmx5X2Fib3J0Ci0JLndvcmQJcGFib3J0X25vaWZhcgorCS53b3JkCWxlZ2FjeV9wYWJvcnQKIAkud29yZAljcHVfYXJtOTQ2X3Byb2NfaW5pdAogCS53b3JkCWNwdV9hcm05NDZfcHJvY19maW4KIAkud29yZAljcHVfYXJtOTQ2X3Jlc2V0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLWFybTl0ZG1pLlMgYi9hcmNoL2FybS9tbS9wcm9jLWFybTl0ZG1pLlMKaW5kZXggYmU2YzExZC4uMjg1NDVjMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy1hcm05dGRtaS5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtOXRkbWkuUwpAQCAtNjQsNyArNjQsNyBAQAogCQkudHlwZQlhcm05dGRtaV9wcm9jZXNzb3JfZnVuY3Rpb25zLCAjb2JqZWN0CiBFTlRSWShhcm05dGRtaV9wcm9jZXNzb3JfZnVuY3Rpb25zKQogCQkud29yZAlub21tdV9lYXJseV9hYm9ydAotCQkud29yZAlwYWJvcnRfbm9pZmFyCisJCS53b3JkCWxlZ2FjeV9wYWJvcnQKIAkJLndvcmQJY3B1X2FybTl0ZG1pX3Byb2NfaW5pdAogCQkud29yZAljcHVfYXJtOXRkbWlfcHJvY19maW4KIAkJLndvcmQJY3B1X2FybTl0ZG1pX3Jlc2V0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLWZhNTI2LlMgYi9hcmNoL2FybS9tbS9wcm9jLWZhNTI2LlMKaW5kZXggMDhiOGE5NS4uMDhmNWFjMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy1mYTUyNi5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2MtZmE1MjYuUwpAQCAtMTkxLDcgKzE5MSw3IEBACiAJLnR5cGUJZmE1MjZfcHJvY2Vzc29yX2Z1bmN0aW9ucywgI29iamVjdAogZmE1MjZfcHJvY2Vzc29yX2Z1bmN0aW9uczoKIAkud29yZAl2NF9lYXJseV9hYm9ydAotCS53b3JkCXBhYm9ydF9ub2lmYXIKKwkud29yZAlsZWdhY3lfcGFib3J0CiAJLndvcmQJY3B1X2ZhNTI2X3Byb2NfaW5pdAogCS53b3JkCWNwdV9mYTUyNl9wcm9jX2ZpbgogCS53b3JkCWNwdV9mYTUyNl9yZXNldApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy1mZXJvY2Vvbi5TIGIvYXJjaC9hcm0vbW0vcHJvYy1mZXJvY2Vvbi5TCmluZGV4IDBmZTFmOGYuLmQwZDc3OTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MtZmVyb2Nlb24uUworKysgYi9hcmNoL2FybS9tbS9wcm9jLWZlcm9jZW9uLlMKQEAgLTQ5OSw3ICs0OTksNyBAQAogCS50eXBlCWZlcm9jZW9uX3Byb2Nlc3Nvcl9mdW5jdGlvbnMsICNvYmplY3QKIGZlcm9jZW9uX3Byb2Nlc3Nvcl9mdW5jdGlvbnM6CiAJLndvcmQJdjV0X2Vhcmx5X2Fib3J0Ci0JLndvcmQJcGFib3J0X25vaWZhcgorCS53b3JkCWxlZ2FjeV9wYWJvcnQKIAkud29yZAljcHVfZmVyb2Nlb25fcHJvY19pbml0CiAJLndvcmQJY3B1X2Zlcm9jZW9uX3Byb2NfZmluCiAJLndvcmQJY3B1X2Zlcm9jZW9uX3Jlc2V0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLW1vaGF3ay5TIGIvYXJjaC9hcm0vbW0vcHJvYy1tb2hhd2suUwppbmRleCA1NDBmNTA3Li41MmI1ZmQ3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLW1vaGF3ay5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2MtbW9oYXdrLlMKQEAgLTM1OSw3ICszNTksNyBAQAogCS50eXBlCW1vaGF3a19wcm9jZXNzb3JfZnVuY3Rpb25zLCAjb2JqZWN0CiBtb2hhd2tfcHJvY2Vzc29yX2Z1bmN0aW9uczoKIAkud29yZAl2NXRfZWFybHlfYWJvcnQKLQkud29yZAlwYWJvcnRfbm9pZmFyCisJLndvcmQJbGVnYWN5X3BhYm9ydAogCS53b3JkCWNwdV9tb2hhd2tfcHJvY19pbml0CiAJLndvcmQJY3B1X21vaGF3a19wcm9jX2ZpbgogCS53b3JkCWNwdV9tb2hhd2tfcmVzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2Mtc2ExMTAuUyBiL2FyY2gvYXJtL21tL3Byb2Mtc2ExMTAuUwppbmRleCA5MGE3ZTUyLi43YjcwNmIzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLXNhMTEwLlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy1zYTExMC5TCkBAIC0xOTksNyArMTk5LDcgQEAKIAkudHlwZQlzYTExMF9wcm9jZXNzb3JfZnVuY3Rpb25zLCAjb2JqZWN0CiBFTlRSWShzYTExMF9wcm9jZXNzb3JfZnVuY3Rpb25zKQogCS53b3JkCXY0X2Vhcmx5X2Fib3J0Ci0JLndvcmQJcGFib3J0X25vaWZhcgorCS53b3JkCWxlZ2FjeV9wYWJvcnQKIAkud29yZAljcHVfc2ExMTBfcHJvY19pbml0CiAJLndvcmQJY3B1X3NhMTEwX3Byb2NfZmluCiAJLndvcmQJY3B1X3NhMTEwX3Jlc2V0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLXNhMTEwMC5TIGIvYXJjaC9hcm0vbW0vcHJvYy1zYTExMDAuUwppbmRleCA0NTFlMmQ5Li5lZTc3MDAyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLXNhMTEwMC5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2Mtc2ExMTAwLlMKQEAgLTIxNCw3ICsyMTQsNyBAQAogCS50eXBlCXNhMTEwMF9wcm9jZXNzb3JfZnVuY3Rpb25zLCAjb2JqZWN0CiBFTlRSWShzYTExMDBfcHJvY2Vzc29yX2Z1bmN0aW9ucykKIAkud29yZAl2NF9lYXJseV9hYm9ydAotCS53b3JkCXBhYm9ydF9ub2lmYXIKKwkud29yZAlsZWdhY3lfcGFib3J0CiAJLndvcmQJY3B1X3NhMTEwMF9wcm9jX2luaXQKIAkud29yZAljcHVfc2ExMTAwX3Byb2NfZmluCiAJLndvcmQJY3B1X3NhMTEwMF9yZXNldApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy12Ni5TIGIvYXJjaC9hcm0vbW0vcHJvYy12Ni5TCmluZGV4IDUyNGRkYWUuLjcwZjc1ZDIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MtdjYuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLXY2LlMKQEAgLTMyLDggKzMyLDEwIEBACiAKICNpZm5kZWYgQ09ORklHX1NNUAogI2RlZmluZSBUVEJfRkxBR1MJVFRCX1JHTl9XQldBCisjZGVmaW5lIFBNRF9GTEFHUwlQTURfU0VDVF9XQgogI2Vsc2UKICNkZWZpbmUgVFRCX0ZMQUdTCVRUQl9SR05fV0JXQXxUVEJfUworI2RlZmluZSBQTURfRkxBR1MJUE1EX1NFQ1RfV0JXQXxQTURfU0VDVF9TCiAjZW5kaWYKIAogRU5UUlkoY3B1X3Y2X3Byb2NfaW5pdCkKQEAgLTE5MSw3ICsxOTMsNyBAQAogCS50eXBlCXY2X3Byb2Nlc3Nvcl9mdW5jdGlvbnMsICNvYmplY3QKIEVOVFJZKHY2X3Byb2Nlc3Nvcl9mdW5jdGlvbnMpCiAJLndvcmQJdjZfZWFybHlfYWJvcnQKLQkud29yZAlwYWJvcnRfbm9pZmFyCisJLndvcmQJdjZfcGFib3J0CiAJLndvcmQJY3B1X3Y2X3Byb2NfaW5pdAogCS53b3JkCWNwdV92Nl9wcm9jX2ZpbgogCS53b3JkCWNwdV92Nl9yZXNldApAQCAtMjIyLDEwICsyMjQsOSBAQAogCS5sb25nCTB4MDAwN2IwMDAKIAkubG9uZwkweDAwMDdmMDAwCiAJLmxvbmcgICBQTURfVFlQRV9TRUNUIHwgXAotCQlQTURfU0VDVF9CVUZGRVJBQkxFIHwgXAotCQlQTURfU0VDVF9DQUNIRUFCTEUgfCBcCiAJCVBNRF9TRUNUX0FQX1dSSVRFIHwgXAotCQlQTURfU0VDVF9BUF9SRUFECisJCVBNRF9TRUNUX0FQX1JFQUQgfCBcCisJCVBNRF9GTEFHUwogCS5sb25nICAgUE1EX1RZUEVfU0VDVCB8IFwKIAkJUE1EX1NFQ1RfWE4gfCBcCiAJCVBNRF9TRUNUX0FQX1dSSVRFIHwgXApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy12Ny5TIGIvYXJjaC9hcm0vbW0vcHJvYy12Ny5TCmluZGV4IGYzZmExYzMuLmVlZWVkMDEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MtdjcuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLXY3LlMKQEAgLTMzLDkgKzMzLDExIEBACiAjaWZuZGVmIENPTkZJR19TTVAKIC8qIFBUV3MgY2FjaGVhYmxlLCBpbm5lciBXQiBub3Qgc2hhcmVhYmxlLCBvdXRlciBXQiBub3Qgc2hhcmVhYmxlICovCiAjZGVmaW5lIFRUQl9GTEFHUwlUVEJfSVJHTl9XQnxUVEJfUkdOX09DX1dCCisjZGVmaW5lIFBNRF9GTEFHUwlQTURfU0VDVF9XQgogI2Vsc2UKIC8qIFBUV3MgY2FjaGVhYmxlLCBpbm5lciBXQldBIHNoYXJlYWJsZSwgb3V0ZXIgV0JXQSBub3Qgc2hhcmVhYmxlICovCiAjZGVmaW5lIFRUQl9GTEFHUwlUVEJfSVJHTl9XQldBfFRUQl9TfFRUQl9OT1N8VFRCX1JHTl9PQ19XQldBCisjZGVmaW5lIFBNRF9GTEFHUwlQTURfU0VDVF9XQldBfFBNRF9TRUNUX1MKICNlbmRpZgogCiBFTlRSWShjcHVfdjdfcHJvY19pbml0KQpAQCAtMjk1LDcgKzI5Nyw3IEBACiAJLnR5cGUJdjdfcHJvY2Vzc29yX2Z1bmN0aW9ucywgI29iamVjdAogRU5UUlkodjdfcHJvY2Vzc29yX2Z1bmN0aW9ucykKIAkud29yZAl2N19lYXJseV9hYm9ydAotCS53b3JkCXBhYm9ydF9pZmFyCisJLndvcmQJdjdfcGFib3J0CiAJLndvcmQJY3B1X3Y3X3Byb2NfaW5pdAogCS53b3JkCWNwdV92N19wcm9jX2ZpbgogCS53b3JkCWNwdV92N19yZXNldApAQCAtMzI2LDEwICszMjgsOSBAQAogCS5sb25nCTB4MDAwZjAwMDAJCUAgUmVxdWlyZWQgSUQgdmFsdWUKIAkubG9uZwkweDAwMGYwMDAwCQlAIE1hc2sgZm9yIElECiAJLmxvbmcgICBQTURfVFlQRV9TRUNUIHwgXAotCQlQTURfU0VDVF9CVUZGRVJBQkxFIHwgXAotCQlQTURfU0VDVF9DQUNIRUFCTEUgfCBcCiAJCVBNRF9TRUNUX0FQX1dSSVRFIHwgXAotCQlQTURfU0VDVF9BUF9SRUFECisJCVBNRF9TRUNUX0FQX1JFQUQgfCBcCisJCVBNRF9GTEFHUwogCS5sb25nICAgUE1EX1RZUEVfU0VDVCB8IFwKIAkJUE1EX1NFQ1RfWE4gfCBcCiAJCVBNRF9TRUNUX0FQX1dSSVRFIHwgXApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy14c2MzLlMgYi9hcmNoL2FybS9tbS9wcm9jLXhzYzMuUwppbmRleCAzMzUxNWMyLi4yMDI4ZjM3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLXhzYzMuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLXhzYzMuUwpAQCAtNDI4LDcgKzQyOCw3IEBACiAJLnR5cGUJeHNjM19wcm9jZXNzb3JfZnVuY3Rpb25zLCAjb2JqZWN0CiBFTlRSWSh4c2MzX3Byb2Nlc3Nvcl9mdW5jdGlvbnMpCiAJLndvcmQJdjV0X2Vhcmx5X2Fib3J0Ci0JLndvcmQJcGFib3J0X25vaWZhcgorCS53b3JkCWxlZ2FjeV9wYWJvcnQKIAkud29yZAljcHVfeHNjM19wcm9jX2luaXQKIAkud29yZAljcHVfeHNjM19wcm9jX2ZpbgogCS53b3JkCWNwdV94c2MzX3Jlc2V0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLXhzY2FsZS5TIGIvYXJjaC9hcm0vbW0vcHJvYy14c2NhbGUuUwppbmRleCA0MjMzOTQyLi5mMDU2YzI4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLXhzY2FsZS5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2MteHNjYWxlLlMKQEAgLTUxMSw3ICs1MTEsNyBAQAogCS50eXBlCXhzY2FsZV9wcm9jZXNzb3JfZnVuY3Rpb25zLCAjb2JqZWN0CiBFTlRSWSh4c2NhbGVfcHJvY2Vzc29yX2Z1bmN0aW9ucykKIAkud29yZAl2NXRfZWFybHlfYWJvcnQKLQkud29yZAlwYWJvcnRfbm9pZmFyCisJLndvcmQJbGVnYWN5X3BhYm9ydAogCS53b3JkCWNwdV94c2NhbGVfcHJvY19pbml0CiAJLndvcmQJY3B1X3hzY2FsZV9wcm9jX2ZpbgogCS53b3JkCWNwdV94c2NhbGVfcmVzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL29wcm9maWxlL29wX21vZGVsX3Y2LmMgYi9hcmNoL2FybS9vcHJvZmlsZS9vcF9tb2RlbF92Ni5jCmluZGV4IGZlNTgxMzguLmY3ZDJlYzUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL29wcm9maWxlL29wX21vZGVsX3Y2LmMKKysrIGIvYXJjaC9hcm0vb3Byb2ZpbGUvb3BfbW9kZWxfdjYuYwpAQCAtMzMsNiArMzMsOSBAQAogI2lmZGVmIENPTkZJR19BUkNIX09NQVAyCiAJMywKICNlbmRpZgorI2lmZGVmIENPTkZJR19BUkNIX0JDTVJJTkcKKwlJUlFfUE1VSVJRLCAvKiBmb3IgQkNNUklORywgQVJNIFBNVSBpbnRlcnJ1cHQgaXMgNDMgKi8KKyNlbmRpZgogfTsKIAogc3RhdGljIHZvaWQgYXJtdjZfcG11X3N0b3Aodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtaW9wL3BjaS5jIGIvYXJjaC9hcm0vcGxhdC1pb3AvcGNpLmMKaW5kZXggNzdmYTdjYy4uY2UzMWYzMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1pb3AvcGNpLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1pb3AvcGNpLmMKQEAgLTI1Nyw3ICsyNTcsOCBAQAogCSpJT1AzWFhfT1VNV1RWUjAgPSAwOwogCiAJLyogT3V0Ym91bmQgd2luZG93IDEgKi8KLQkqSU9QM1hYX09NV1RWUjEgPSBJT1AzWFhfUENJX0xPV0VSX01FTV9CQSArIElPUDNYWF9QQ0lfTUVNX1dJTkRPV19TSVpFOworCSpJT1AzWFhfT01XVFZSMSA9IElPUDNYWF9QQ0lfTE9XRVJfTUVNX0JBICsKKwkJCSAgSU9QM1hYX1BDSV9NRU1fV0lORE9XX1NJWkUgLyAyOwogCSpJT1AzWFhfT1VNV1RWUjEgPSAwOwogCiAJLyogQkFSIDMgKCBEaXNhYmxlZCApICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LWlvcC90aW1lLmMgYi9hcmNoL2FybS9wbGF0LWlvcC90aW1lLmMKaW5kZXggMzY5NWJiZS4uOGRhOTVkNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1pb3AvdGltZS5jCisrKyBiL2FyY2gvYXJtL3BsYXQtaW9wL3RpbWUuYwpAQCAtODUsNyArODUsNyBAQAogewogCXUzMiB0aW1lcl9jdGw7CiAKLQl0aWNrc19wZXJfamlmZnkgPSAodGlja19yYXRlICsgSFovMikgLyBIWjsKKwl0aWNrc19wZXJfamlmZnkgPSBESVZfUk9VTkRfQ0xPU0VTVCh0aWNrX3JhdGUsIEhaKTsKIAl0aWNrc19wZXJfdXNlYyA9IHRpY2tfcmF0ZSAvIDEwMDAwMDA7CiAJbmV4dF9qaWZmeV90aW1lID0gMHhmZmZmZmZmZjsKIAlpb3BfdGlja19yYXRlID0gdGlja19yYXRlOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2RtYS5jIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2RtYS5jCmluZGV4IGZkMzE1NGEuLmI1MzEyNWYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9kbWEuYworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvZG1hLmMKQEAgLTgyOSwxMCArODI5LDEwIEBACiAgKgogICogQHBhcmFtIGFyYl9yYXRlCiAgKiBAcGFyYW0gbWF4X2ZpZm9fZGVwdGgKLSAqIEBwYXJhbSB0cGFyYW1zIC0gTnVtYmVyIG9mIHRoZXJlYWRzIHRvIHJlc2VydmUgOiBETUFfVEhSRUFEX1JFU0VSVkVfTk9STQotICogCQkJCQkJICAgIERNQV9USFJFQURfUkVTRVJWRV9PTkVUCi0gKiAJCQkJCQkgICAgRE1BX1RIUkVBRF9SRVNFUlZFX1RXT1QKLSAqIAkJCQkJCSAgICBETUFfVEhSRUFEX1JFU0VSVkVfVEhSRUVUCisgKiBAcGFyYW0gdHBhcmFtcyAtIE51bWJlciBvZiB0aHJlYWRzIHRvIHJlc2VydmUgOiBETUFfVEhSRUFEX1JFU0VSVkVfTk9STQorICogCQkJCQkJICAgRE1BX1RIUkVBRF9SRVNFUlZFX09ORVQKKyAqIAkJCQkJCSAgIERNQV9USFJFQURfUkVTRVJWRV9UV09UCisgKiAJCQkJCQkgICBETUFfVEhSRUFEX1JFU0VSVkVfVEhSRUVUCiAgKi8KIHZvaWQKIG9tYXBfZG1hX3NldF9nbG9iYWxfcGFyYW1zKGludCBhcmJfcmF0ZSwgaW50IG1heF9maWZvX2RlcHRoLCBpbnQgdHBhcmFtcykKQEAgLTg0NCwxMSArODQ0LDE0IEBACiAJCXJldHVybjsKIAl9CiAKKwlpZiAobWF4X2ZpZm9fZGVwdGggPT0gMCkKKwkJbWF4X2ZpZm9fZGVwdGggPSAxOwogCWlmIChhcmJfcmF0ZSA9PSAwKQogCQlhcmJfcmF0ZSA9IDE7CiAKLQlyZWcgPSAoYXJiX3JhdGUgJiAweGZmKSA8PCAxNjsKLQlyZWcgfD0gKDB4ZmYgJiBtYXhfZmlmb19kZXB0aCk7CisJcmVnID0gMHhmZiAmIG1heF9maWZvX2RlcHRoOworCXJlZyB8PSAoMHgzICYgdHBhcmFtcykgPDwgMTI7CisJcmVnIHw9IChhcmJfcmF0ZSAmIDB4ZmYpIDw8IDE2OwogCiAJZG1hX3dyaXRlKHJlZywgR0NSKTsKIH0KQEAgLTk3NSw2ICs5NzgsMTQgQEAKIHsKIAl1MzIgbDsKIAorCS8qIERpc2FibGUgYWxsIGludGVycnVwdHMgb24gdGhlIGNoYW5uZWwgKi8KKwlpZiAoY3B1X2NsYXNzX2lzX29tYXAxKCkpCisJCWRtYV93cml0ZSgwLCBDSUNSKGxjaCkpOworCisJbCA9IGRtYV9yZWFkKENDUihsY2gpKTsKKwlsICY9IH5PTUFQX0RNQV9DQ1JfRU47CisJZG1hX3dyaXRlKGwsIENDUihsY2gpKTsKKwogCWlmICghb21hcF9kbWFfaW5fMTUxMF9tb2RlKCkgJiYgZG1hX2NoYW5bbGNoXS5uZXh0X2xjaCAhPSAtMSkgewogCQlpbnQgbmV4dF9sY2gsIGN1cl9sY2ggPSBsY2g7CiAJCWNoYXIgZG1hX2NoYW5fbGlua19tYXBbT01BUF9ETUE0X0xPR0lDQUxfRE1BX0NIX0NPVU5UXTsKQEAgLTk5MiwxOCArMTAwMyw4IEBACiAJCQluZXh0X2xjaCA9IGRtYV9jaGFuW2N1cl9sY2hdLm5leHRfbGNoOwogCQkJY3VyX2xjaCA9IG5leHRfbGNoOwogCQl9IHdoaWxlIChuZXh0X2xjaCAhPSAtMSk7Ci0KLQkJcmV0dXJuOwogCX0KIAotCS8qIERpc2FibGUgYWxsIGludGVycnVwdHMgb24gdGhlIGNoYW5uZWwgKi8KLQlpZiAoY3B1X2NsYXNzX2lzX29tYXAxKCkpCi0JCWRtYV93cml0ZSgwLCBDSUNSKGxjaCkpOwotCi0JbCA9IGRtYV9yZWFkKENDUihsY2gpKTsKLQlsICY9IH5PTUFQX0RNQV9DQ1JfRU47Ci0JZG1hX3dyaXRlKGwsIENDUihsY2gpKTsKLQogCWRtYV9jaGFuW2xjaF0uZmxhZ3MgJj0gfk9NQVBfRE1BX0FDVElWRTsKIH0KIEVYUE9SVF9TWU1CT0wob21hcF9zdG9wX2RtYSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvZ3Bpby5jIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2dwaW8uYwppbmRleCA2OTM4MzljLi43MWViZDdmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvZ3Bpby5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9ncGlvLmMKQEAgLTI1MCw3ICsyNTAsNyBAQAogCiAjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDg1MAogc3RhdGljIHN0cnVjdCBncGlvX2JhbmsgZ3Bpb19iYW5rXzg1MFs3XSA9IHsKLQl7IE9NQVAxX01QVUlPX0JBU0UsICAgICBJTlRfODUwX01QVUlPLAkgICAgSUhfTVBVSU9fQkFTRSwJTUVUSE9EX01QVUlPIH0sCisJeyBPTUFQMV9NUFVJT19WQkFTRSwgICAgIElOVF84NTBfTVBVSU8sCSAgICBJSF9NUFVJT19CQVNFLAlNRVRIT0RfTVBVSU8gfSwKIAl7IE9NQVA4NTBfR1BJTzFfQkFTRSwgIElOVF84NTBfR1BJT19CQU5LMSwgIElIX0dQSU9fQkFTRSwJTUVUSE9EX0dQSU9fODUwIH0sCiAJeyBPTUFQODUwX0dQSU8yX0JBU0UsICBJTlRfODUwX0dQSU9fQkFOSzIsICBJSF9HUElPX0JBU0UgKyAzMiwJTUVUSE9EX0dQSU9fODUwIH0sCiAJeyBPTUFQODUwX0dQSU8zX0JBU0UsICBJTlRfODUwX0dQSU9fQkFOSzMsICBJSF9HUElPX0JBU0UgKyA2NCwJTUVUSE9EX0dQSU9fODUwIH0sCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2NwdS5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9jcHUuaAppbmRleCAxMWU3M2Q5Li5mMTI5ZWZiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2NwdS5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvY3B1LmgKQEAgLTMwMywzMiArMzAzLDIxIEBACiAjZGVmaW5lIGNwdV9pc19vbWFwMjQzMCgpCQkwCiAjZGVmaW5lIGNwdV9pc19vbWFwMzQzMCgpCQkwCiAKLSNpZiBkZWZpbmVkKE1VTFRJX09NQVAxKQotIyBpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVA3MzApCi0jICB1bmRlZiAgY3B1X2lzX29tYXA3MzAKLSMgIGRlZmluZSBjcHVfaXNfb21hcDczMCgpCQlpc19vbWFwNzMwKCkKLSMgZW5kaWYKLSMgaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQODUwKQotIyAgdW5kZWYgIGNwdV9pc19vbWFwODUwCi0jICBkZWZpbmUgY3B1X2lzX29tYXA4NTAoKQkJaXNfb21hcDg1MCgpCi0jIGVuZGlmCi0jZWxzZQotIyBpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVA3MzApCi0jICB1bmRlZiAgY3B1X2lzX29tYXA3MzAKLSMgIGRlZmluZSBjcHVfaXNfb21hcDczMCgpCQkxCi0jIGVuZGlmCi0jZW5kaWYKLSNlbHNlCi0jIGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDg1MCkKLSMgIHVuZGVmICBjcHVfaXNfb21hcDg1MAotIyAgZGVmaW5lIGNwdV9pc19vbWFwODUwKCkJCTEKLSMgZW5kaWYKLSNlbmRpZgotCiAvKgogICogV2hldGhlciB3ZSBoYXZlIE1VTFRJX09NQVAxIG9yIG5vdCwgd2Ugc3RpbGwgbmVlZCB0byBkaXN0aW5ndWlzaAotICogYmV0d2VlbiAzMzAgdnMuIDE1MTAgYW5kIDE2MTFCLzU5MTIgdnMuIDE3MTAuCisgKiBiZXR3ZWVuIDczMCB2cyA4NTAsIDMzMCB2cy4gMTUxMCBhbmQgMTYxMUIvNTkxMiB2cy4gMTcxMC4KICAqLworCisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQNzMwKQorIyB1bmRlZiAgY3B1X2lzX29tYXA3MzAKKyMgZGVmaW5lIGNwdV9pc19vbWFwNzMwKCkJCWlzX29tYXA3MzAoKQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVA4NTApCisjIHVuZGVmICBjcHVfaXNfb21hcDg1MAorIyBkZWZpbmUgY3B1X2lzX29tYXA4NTAoKQkJaXNfb21hcDg1MCgpCisjZW5kaWYKKwogI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDE1WFgpCiAjIHVuZGVmICBjcHVfaXNfb21hcDMxMAogIyB1bmRlZiAgY3B1X2lzX29tYXAxNTEwCkBAIC00MzMsMyArNDIyLDUgQEAKIAogaW50IG9tYXBfY2hpcF9pcyhzdHJ1Y3Qgb21hcF9jaGlwX2lkIG9jaSk7CiB2b2lkIG9tYXAyX2NoZWNrX3JldmlzaW9uKHZvaWQpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gva2V5cGFkLmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2tleXBhZC5oCmluZGV4IDQ1ZWEzYWUuLjNhZTUyY2MgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gva2V5cGFkLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9rZXlwYWQuaApAQCAtMTAsNiArMTAsOCBAQAogI2lmbmRlZiBBU01BUk1fQVJDSF9LRVlQQURfSAogI2RlZmluZSBBU01BUk1fQVJDSF9LRVlQQURfSAogCisjd2FybmluZzogUGxlYXNlIHVwZGF0ZSB0aGUgYm9hcmQgdG8gdXNlIG1hdHJpeF9rZXlwYWQuaCBpbnN0ZWFkCisKIHN0cnVjdCBvbWFwX2twX3BsYXRmb3JtX2RhdGEgewogCWludCByb3dzOwogCWludCBjb2xzOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9tdXguaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvbXV4LmgKaW5kZXggOThkZmFiNi4uMGY0OWQyZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9tdXguaAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL211eC5oCkBAIC04NDAsMTIgKzg0MCwxNCBAQAogCSAqLwogCUFGMjZfMzRYWF9HUElPMCwKIAlBRjIyXzM0WFhfR1BJTzksCisJQUc5XzM0WFhfR1BJTzIzLAogCUFIOF8zNFhYX0dQSU8yOSwKIAlVOF8zNFhYX0dQSU81NF9PVVQsCiAJVThfMzRYWF9HUElPNTRfRE9XTiwKIAlMOF8zNFhYX0dQSU82MywKIAlHMjVfMzRYWF9HUElPODZfT1VULAogCUFHNF8zNFhYX0dQSU8xMzRfT1VULAorCUFGNF8zNFhYX0dQSU8xMzVfT1VULAogCUFFNF8zNFhYX0dQSU8xMzZfT1VULAogCUFGNl8zNFhYX0dQSU8xNDBfVVAsCiAJQUU2XzM0WFhfR1BJTzE0MSwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvcG93ZXJkb21haW4uaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvcG93ZXJkb21haW4uaAppbmRleCA2MjcxZDg1Li5mYTY0NjE0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL3Bvd2VyZG9tYWluLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9wb3dlcmRvbWFpbi5oCkBAIC0xMzUsNiArMTM1LDggQEAKIAogaW50IHB3cmRtX2Zvcl9lYWNoKGludCAoKmZuKShzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtLCB2b2lkICp1c2VyKSwKIAkJCXZvaWQgKnVzZXIpOworaW50IHB3cmRtX2Zvcl9lYWNoX25vbG9jayhpbnQgKCpmbikoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSwgdm9pZCAqdXNlciksCisJCQl2b2lkICp1c2VyKTsKIAogaW50IHB3cmRtX2FkZF9jbGtkbShzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtLCBzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtKTsKIGludCBwd3JkbV9kZWxfY2xrZG0oc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSwgc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW9tbXUuYyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pb21tdS5jCmluZGV4IDRiNjAxMjcuLjk0NTg0ZjEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pb21tdS5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pb21tdS5jCkBAIC02NjQsNyArNjY0LDcgQEAKIAkJbmVudCA9IDE7IC8qIGZvciB0aGUgbmV4dCBMMSBlbnRyeSAqLwogCX0gZWxzZSB7CiAJCWJ5dGVzID0gSU9QR0RfU0laRTsKLQkJaWYgKCppb3BnZCAmIElPUEdEX1NVUEVSKSB7CisJCWlmICgoKmlvcGdkICYgSU9QR0RfU1VQRVIpID09IElPUEdEX1NVUEVSKSB7CiAJCQluZW50ICo9IDE2OwogCQkJLyogcmV3aW5kIHRvIHRoZSAxc3QgZW50cnkgKi8KIAkJCWlvcGdkID0gKHUzMiAqKSgodTMyKWlvcGdkICYgSU9TVVBFUl9NQVNLKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pb3ZtbS5jIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2lvdm1tLmMKaW5kZXggNmZjNTJmYy4uZGMzZmFjMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2lvdm1tLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2lvdm1tLmMKQEAgLTQ3LDcgKzQ3LDcgQEAKICAqCSd2YSc6CW1wdSB2aXJ0dWFsIGFkZHJlc3MKICAqCiAgKgknYyc6CWNvbnRpZ3VvdXMgbWVtb3J5IGFyZWEKLSAqCSdkJzoJZGljb250aWd1b3VzIG1lbW9yeSBhcmVhCisgKgknZCc6CWRpc2NvbnRpZ3VvdXMgbWVtb3J5IGFyZWEKICAqCSdhJzoJYW5vbnltb3VzIG1lbW9yeSBhbGxvY2F0aW9uCiAgKgknKCknOglvcHRpb25hbCBmZWF0dXJlCiAgKgpAQCAtMTk5LDcgKzE5OSw4IEBACiAJCXZhICs9IGJ5dGVzOwogCX0KIAotCWZsdXNoX2NhY2hlX3ZtYXAobmV3LT5hZGRyLCBuZXctPmFkZHIgKyB0b3RhbCk7CisJZmx1c2hfY2FjaGVfdm1hcCgodW5zaWduZWQgbG9uZyluZXctPmFkZHIsCisJCQkJKHVuc2lnbmVkIGxvbmcpKG5ldy0+YWRkciArIHRvdGFsKSk7CiAJcmV0dXJuIG5ldy0+YWRkcjsKIAogZXJyX291dDoKQEAgLTM2Miw4ICszNjMsOSBAQAogCQlnb3RvIG91dDsKIAl9CiAJdmEgPSBhcmVhLT52YTsKLQltdXRleF91bmxvY2soJm9iai0+bW1hcF9sb2NrKTsKIG91dDoKKwltdXRleF91bmxvY2soJm9iai0+bW1hcF9sb2NrKTsKKwogCXJldHVybiB2YTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGRhX3RvX3ZhKTsKQEAgLTM5MCwxNCArMzkyLDE0IEBACiAJfQogCiAJdmFfZW5kID0gX3ZhICsgUEFHRV9TSVpFICogaTsKLQlmbHVzaF9jYWNoZV92bWFwKF92YSwgdmFfZW5kKTsKKwlmbHVzaF9jYWNoZV92bWFwKCh1bnNpZ25lZCBsb25nKV92YSwgKHVuc2lnbmVkIGxvbmcpdmFfZW5kKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHNndGFibGVfZHJhaW5fdm1hbGxvYyhzdHJ1Y3Qgc2dfdGFibGUgKnNndCkKIHsKIAkvKgogCSAqIEFjdHVhbGx5IHRoaXMgaXMgbm90IG5lY2Vzc2FyeSBhdCBhbGwsIGp1c3QgZXhpc3RzIGZvcgotCSAqIGNvbnNpc3RlbmN5IG9mIHRoZSBjb2RlIHJlYWRpYmlsaXR5LgorCSAqIGNvbnNpc3RlbmN5IG9mIHRoZSBjb2RlIHJlYWRhYmlsaXR5LgogCSAqLwogCUJVR19PTighc2d0KTsKIH0KQEAgLTQzMyw3ICs0MzUsNyBAQAogewogCS8qCiAJICogQWN0dWFsbHkgdGhpcyBpcyBub3QgbmVjZXNzYXJ5IGF0IGFsbCwganVzdCBleGlzdHMgZm9yCi0JICogY29uc2lzdGVuY3kgb2YgdGhlIGNvZGUgcmVhZGliaWxpdHkKKwkgKiBjb25zaXN0ZW5jeSBvZiB0aGUgY29kZSByZWFkYWJpbGl0eQogCSAqLwogCUJVR19PTighc2d0KTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9tY2JzcC5jIGIvYXJjaC9hcm0vcGxhdC1vbWFwL21jYnNwLmMKaW5kZXggODhhYzk3Ni4uZTY2NGI5MSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL21jYnNwLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL21jYnNwLmMKQEAgLTU5NSw3ICs1OTUsNyBAQAogCXJ4ICY9IDE7CiAJaWYgKGNwdV9pc19vbWFwMjQzMCgpIHx8IGNwdV9pc19vbWFwMzR4eCgpKSB7CiAJCXcgPSBPTUFQX01DQlNQX1JFQUQoaW9fYmFzZSwgUkNDUik7Ci0JCXcgfD0gKHR4ID8gUkRJU0FCTEUgOiAwKTsKKwkJdyB8PSAocnggPyBSRElTQUJMRSA6IDApOwogCQlPTUFQX01DQlNQX1dSSVRFKGlvX2Jhc2UsIFJDQ1IsIHcpOwogCX0KIAl3ID0gT01BUF9NQ0JTUF9SRUFEKGlvX2Jhc2UsIFNQQ1IxKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9zcmFtLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvc3JhbS5jCmluZGV4IDkyNWY2NDcuLjc1ZDFmMjYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9zcmFtLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL3NyYW0uYwpAQCAtMjcwLDcgKzI3MCw4IEBACiAJb21hcF9zcmFtX2NlaWwgLT0gc2l6ZTsKIAlvbWFwX3NyYW1fY2VpbCA9IFJPVU5EX0RPV04ob21hcF9zcmFtX2NlaWwsIHNpemVvZih2b2lkICopKTsKIAltZW1jcHkoKHZvaWQgKilvbWFwX3NyYW1fY2VpbCwgc3RhcnQsIHNpemUpOwotCWZsdXNoX2ljYWNoZV9yYW5nZSgodW5zaWduZWQgbG9uZylzdGFydCwgKHVuc2lnbmVkIGxvbmcpKHN0YXJ0ICsgc2l6ZSkpOworCWZsdXNoX2ljYWNoZV9yYW5nZSgodW5zaWduZWQgbG9uZylvbWFwX3NyYW1fY2VpbCwKKwkJKHVuc2lnbmVkIGxvbmcpKG9tYXBfc3JhbV9jZWlsICsgc2l6ZSkpOwogCiAJcmV0dXJuICh2b2lkICopb21hcF9zcmFtX2NlaWw7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXB4YS9kbWEuYyBiL2FyY2gvYXJtL3BsYXQtcHhhL2RtYS5jCmluZGV4IDcwYWVlZTQuLjI5NzU3OTggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtcHhhL2RtYS5jCisrKyBiL2FyY2gvYXJtL3BsYXQtcHhhL2RtYS5jCkBAIC0xNywyMiArMTcsMjY2IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogCiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vbWVtb3J5Lmg+CiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPG1hY2gvZG1hLmg+CiAKKyNkZWZpbmUgRE1BX0RFQlVHX05BTUUJCSJweGFfZG1hIgorI2RlZmluZSBETUFfTUFYX1JFUVVFU1RFUlMJNjQKKwogc3RydWN0IGRtYV9jaGFubmVsIHsKIAljaGFyICpuYW1lOwogCXB4YV9kbWFfcHJpbyBwcmlvOwogCXZvaWQgKCppcnFfaGFuZGxlcikoaW50LCB2b2lkICopOwogCXZvaWQgKmRhdGE7CisJc3BpbmxvY2tfdCBsb2NrOwogfTsKIAogc3RhdGljIHN0cnVjdCBkbWFfY2hhbm5lbCAqZG1hX2NoYW5uZWxzOwogc3RhdGljIGludCBudW1fZG1hX2NoYW5uZWxzOwogCisvKgorICogRGVidWcgZnMKKyAqLworI2lmZGVmIENPTkZJR19ERUJVR19GUworI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKworc3RhdGljIHN0cnVjdCBkZW50cnkgKmRiZ2ZzX3Jvb3QsICpkYmdmc19zdGF0ZSwgKipkYmdmc19jaGFuOworCitzdGF0aWMgaW50IGRiZ19zaG93X3JlcXVlc3Rlcl9jaGFuKHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqcCkKK3sKKwlpbnQgcG9zID0gMDsKKwlpbnQgY2hhbiA9IChpbnQpcy0+cHJpdmF0ZTsKKwlpbnQgaTsKKwl1MzIgZHJjbXI7CisKKwlwb3MgKz0gc2VxX3ByaW50ZihzLCAiRE1BIGNoYW5uZWwgJWQgcmVxdWVzdGVycyBsaXN0IDpcbiIsIGNoYW4pOworCWZvciAoaSA9IDA7IGkgPCBETUFfTUFYX1JFUVVFU1RFUlM7IGkrKykgeworCQlkcmNtciA9IERSQ01SKGkpOworCQlpZiAoKGRyY21yICYgRFJDTVJfQ0hMTlVNKSA9PSBjaGFuKQorCQkJcG9zICs9IHNlcV9wcmludGYocywgIlx0UmVxdWVzdGVyICVkIChNQVBWTEQ9JWQpXG4iLCBpLAorCQkJCQkgICEhKGRyY21yICYgRFJDTVJfTUFQVkxEKSk7CisJfQorCXJldHVybiBwb3M7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGRiZ19idXJzdF9mcm9tX2RjbWQodTMyIGRjbWQpCit7CisJaW50IGJ1cnN0ID0gKGRjbWQgPj4gMTYpICYgMHgzOworCisJcmV0dXJuIGJ1cnN0ID8gNCA8PCBidXJzdCA6IDA7Cit9CisKK3N0YXRpYyBpbnQgaXNfcGh5c192YWxpZCh1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJcmV0dXJuIHBmbl92YWxpZChfX3BoeXNfdG9fcGZuKGFkZHIpKTsKK30KKworI2RlZmluZSBEQ1NSX1NUUihmbGFnKSAoZGNzciAmIERDU1JfIyNmbGFnID8gI2ZsYWciICIgOiAiIikKKyNkZWZpbmUgRENNRF9TVFIoZmxhZykgKGRjbWQgJiBEQ01EXyMjZmxhZyA/ICNmbGFnIiAiIDogIiIpCisKK3N0YXRpYyBpbnQgZGJnX3Nob3dfZGVzY3JpcHRvcnMoc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICpwKQoreworCWludCBwb3MgPSAwOworCWludCBjaGFuID0gKGludClzLT5wcml2YXRlOworCWludCBpLCBtYXhfc2hvdyA9IDIwLCBidXJzdCwgd2lkdGg7CisJdTMyIGRjbWQ7CisJdW5zaWduZWQgbG9uZyBwaHlzX2Rlc2M7CisJc3RydWN0IHB4YV9kbWFfZGVzYyAqZGVzYzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRtYV9jaGFubmVsc1tjaGFuXS5sb2NrLCBmbGFncyk7CisJcGh5c19kZXNjID0gRERBRFIoY2hhbik7CisKKwlwb3MgKz0gc2VxX3ByaW50ZihzLCAiRE1BIGNoYW5uZWwgJWQgZGVzY3JpcHRvcnMgOlxuIiwgY2hhbik7CisJcG9zICs9IHNlcV9wcmludGYocywgIlslMDNkXSBGaXJzdCBkZXNjcmlwdG9yIHVua25vd25cbiIsIDApOworCWZvciAoaSA9IDE7IGkgPCBtYXhfc2hvdyAmJiBpc19waHlzX3ZhbGlkKHBoeXNfZGVzYyk7IGkrKykgeworCQlkZXNjID0gcGh5c190b192aXJ0KHBoeXNfZGVzYyk7CisJCWRjbWQgPSBkZXNjLT5kY21kOworCQlidXJzdCA9IGRiZ19idXJzdF9mcm9tX2RjbWQoZGNtZCk7CisJCXdpZHRoID0gKDEgPDwgKChkY21kID4+IDE0KSAmIDB4MykpID4+IDE7CisKKwkJcG9zICs9IHNlcV9wcmludGYocywgIlslMDNkXSBEZXNjIGF0ICUwOGx4KHZpcnQgJXApXG4iLAorCQkJCSAgaSwgcGh5c19kZXNjLCBkZXNjKTsKKwkJcG9zICs9IHNlcV9wcmludGYocywgIlx0RERBRFIgPSAlMDh4XG4iLCBkZXNjLT5kZGFkcik7CisJCXBvcyArPSBzZXFfcHJpbnRmKHMsICJcdERTQURSID0gJTA4eFxuIiwgZGVzYy0+ZHNhZHIpOworCQlwb3MgKz0gc2VxX3ByaW50ZihzLCAiXHREVEFEUiA9ICUwOHhcbiIsIGRlc2MtPmR0YWRyKTsKKwkJcG9zICs9IHNlcV9wcmludGYocywgIlx0RENNRCAgPSAlMDh4ICglcyVzJXMlcyVzJXMlc2J1cnN0PSVkIgorCQkJCSAgIiB3aWR0aD0lZCBsZW49JWQpXG4iLAorCQkJCSAgZGNtZCwKKwkJCQkgIERDTURfU1RSKElOQ1NSQ0FERFIpLCBEQ01EX1NUUihJTkNUUkdBRERSKSwKKwkJCQkgIERDTURfU1RSKEZMT1dTUkMpLCBEQ01EX1NUUihGTE9XVFJHKSwKKwkJCQkgIERDTURfU1RSKFNUQVJUSVJRRU4pLCBEQ01EX1NUUihFTkRJUlFFTiksCisJCQkJICBEQ01EX1NUUihFTkRJQU4pLCBidXJzdCwgd2lkdGgsCisJCQkJICBkY21kICYgRENNRF9MRU5HVEgpOworCQlwaHlzX2Rlc2MgPSBkZXNjLT5kZGFkcjsKKwl9CisJaWYgKGkgPT0gbWF4X3Nob3cpCisJCXBvcyArPSBzZXFfcHJpbnRmKHMsICJbJTAzZF0gRGVzYyBhdCAlMDhseCAuLi4gbWF4IGRpc3BsYXkgcmVhY2hlZFxuIiwKKwkJCQkgIGksIHBoeXNfZGVzYyk7CisJZWxzZQorCQlwb3MgKz0gc2VxX3ByaW50ZihzLCAiWyUwM2RdIERlc2MgYXQgJTA4bHggaXMgJXNcbiIsCisJCQkJICBpLCBwaHlzX2Rlc2MsIHBoeXNfZGVzYyA9PSBEREFEUl9TVE9QID8KKwkJCQkgICJEREFEUl9TVE9QIiA6ICJpbnZhbGlkIik7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkbWFfY2hhbm5lbHNbY2hhbl0ubG9jaywgZmxhZ3MpOworCXJldHVybiBwb3M7Cit9CisKK3N0YXRpYyBpbnQgZGJnX3Nob3dfY2hhbl9zdGF0ZShzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKnApCit7CisJaW50IHBvcyA9IDA7CisJaW50IGNoYW4gPSAoaW50KXMtPnByaXZhdGU7CisJdTMyIGRjc3IsIGRjbWQ7CisJaW50IGJ1cnN0LCB3aWR0aDsKKwlzdGF0aWMgY2hhciAqc3RyX3ByaW9bXSA9IHsgImhpZ2giLCAibm9ybWFsIiwgImxvdyIgfTsKKworCWRjc3IgPSBEQ1NSKGNoYW4pOworCWRjbWQgPSBEQ01EKGNoYW4pOworCWJ1cnN0ID0gZGJnX2J1cnN0X2Zyb21fZGNtZChkY21kKTsKKwl3aWR0aCA9ICgxIDw8ICgoZGNtZCA+PiAxNCkgJiAweDMpKSA+PiAxOworCisJcG9zICs9IHNlcV9wcmludGYocywgIkRNQSBjaGFubmVsICVkXG4iLCBjaGFuKTsKKwlwb3MgKz0gc2VxX3ByaW50ZihzLCAiXHRQcmlvcml0eSA6ICVzXG4iLAorCQkJICBzdHJfcHJpb1tkbWFfY2hhbm5lbHNbY2hhbl0ucHJpb10pOworCXBvcyArPSBzZXFfcHJpbnRmKHMsICJcdFVuYWxpZ25lZCB0cmFuc2ZlciBiaXQ6ICVzXG4iLAorCQkJICBEQUxHTiAmICgxIDw8IGNoYW4pID8gInllcyIgOiAibm8iKTsKKwlwb3MgKz0gc2VxX3ByaW50ZihzLCAiXHREQ1NSICA9ICUwOHggKCVzJXMlcyVzJXMlcyVzJXMlcyVzJXMlcyVzJXMlcylcbiIsCisJCQkgIGRjc3IsIERDU1JfU1RSKFJVTiksIERDU1JfU1RSKE5PREVTQyksCisJCQkgIERDU1JfU1RSKFNUT1BJUlFFTiksIERDU1JfU1RSKEVPUklSUUVOKSwKKwkJCSAgRENTUl9TVFIoRU9SSk1QRU4pLCBEQ1NSX1NUUihFT1JTVE9QRU4pLAorCQkJICBEQ1NSX1NUUihTRVRDTVBTVCksIERDU1JfU1RSKENMUkNNUFNUKSwKKwkJCSAgRENTUl9TVFIoQ01QU1QpLCBEQ1NSX1NUUihFT1JJTlRSKSwgRENTUl9TVFIoUkVRUEVORCksCisJCQkgIERDU1JfU1RSKFNUT1BTVEFURSksIERDU1JfU1RSKEVORElOVFIpLAorCQkJICBEQ1NSX1NUUihTVEFSVElOVFIpLCBEQ1NSX1NUUihCVVNFUlIpKTsKKworCXBvcyArPSBzZXFfcHJpbnRmKHMsICJcdERDTUQgID0gJTA4eCAoJXMlcyVzJXMlcyVzJXNidXJzdD0lZCB3aWR0aD0lZCIKKwkJCSAgIiBsZW49JWQpXG4iLAorCQkJICBkY21kLAorCQkJICBEQ01EX1NUUihJTkNTUkNBRERSKSwgRENNRF9TVFIoSU5DVFJHQUREUiksCisJCQkgIERDTURfU1RSKEZMT1dTUkMpLCBEQ01EX1NUUihGTE9XVFJHKSwKKwkJCSAgRENNRF9TVFIoU1RBUlRJUlFFTiksIERDTURfU1RSKEVORElSUUVOKSwKKwkJCSAgRENNRF9TVFIoRU5ESUFOKSwgYnVyc3QsIHdpZHRoLCBkY21kICYgRENNRF9MRU5HVEgpOworCXBvcyArPSBzZXFfcHJpbnRmKHMsICJcdERTQURSID0gJTA4eFxuIiwgRFNBRFIoY2hhbikpOworCXBvcyArPSBzZXFfcHJpbnRmKHMsICJcdERUQURSID0gJTA4eFxuIiwgRFRBRFIoY2hhbikpOworCXBvcyArPSBzZXFfcHJpbnRmKHMsICJcdEREQURSID0gJTA4eFxuIiwgRERBRFIoY2hhbikpOworCXJldHVybiBwb3M7Cit9CisKK3N0YXRpYyBpbnQgZGJnX3Nob3dfc3RhdGUoc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICpwKQoreworCWludCBwb3MgPSAwOworCisJLyogYmFzaWMgZGV2aWNlIHN0YXR1cyAqLworCXBvcyArPSBzZXFfcHJpbnRmKHMsICJETUEgZW5naW5lIHN0YXR1c1xuIik7CisJcG9zICs9IHNlcV9wcmludGYocywgIlx0Q2hhbm5lbCBudW1iZXI6ICVkXG4iLCBudW1fZG1hX2NoYW5uZWxzKTsKKworCXJldHVybiBwb3M7Cit9CisKKyNkZWZpbmUgREJHRlNfRlVOQ19ERUNMKG5hbWUpIFwKK3N0YXRpYyBpbnQgZGJnX29wZW5fIyNuYW1lKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKSBcCit7IFwKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgZGJnX3Nob3dfIyNuYW1lLCBpbm9kZS0+aV9wcml2YXRlKTsgXAorfSBcCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkYmdfZm9wc18jI25hbWUgPSB7IFwKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsIFwKKwkub3BlbgkJPSBkYmdfb3Blbl8jI25hbWUsIFwKKwkubGxzZWVrCQk9IHNlcV9sc2VlaywgXAorCS5yZWFkCQk9IHNlcV9yZWFkLCBcCisJLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwgXAorfQorCitEQkdGU19GVU5DX0RFQ0woc3RhdGUpOworREJHRlNfRlVOQ19ERUNMKGNoYW5fc3RhdGUpOworREJHRlNfRlVOQ19ERUNMKGRlc2NyaXB0b3JzKTsKK0RCR0ZTX0ZVTkNfREVDTChyZXF1ZXN0ZXJfY2hhbik7CisKK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpweGFfZG1hX2RiZ19hbGxvY19jaGFuKGludCBjaCwgc3RydWN0IGRlbnRyeSAqY2hhbmRpcikKK3sKKwljaGFyIGNoYW5fbmFtZVsxMV07CisJc3RydWN0IGRlbnRyeSAqY2hhbiwgKmNoYW5fc3RhdGUgPSBOVUxMLCAqY2hhbl9kZXNjciA9IE5VTEw7CisJc3RydWN0IGRlbnRyeSAqY2hhbl9yZXFzID0gTlVMTDsKKwl2b2lkICpkdDsKKworCXNjbnByaW50ZihjaGFuX25hbWUsIHNpemVvZihjaGFuX25hbWUpLCAiJWQiLCBjaCk7CisJY2hhbiA9IGRlYnVnZnNfY3JlYXRlX2RpcihjaGFuX25hbWUsIGNoYW5kaXIpOworCWR0ID0gKHZvaWQgKiljaDsKKworCWlmIChjaGFuKQorCQljaGFuX3N0YXRlID0gZGVidWdmc19jcmVhdGVfZmlsZSgic3RhdGUiLCAwNDAwLCBjaGFuLCBkdCwKKwkJCQkJCSAmZGJnX2ZvcHNfY2hhbl9zdGF0ZSk7CisJaWYgKGNoYW5fc3RhdGUpCisJCWNoYW5fZGVzY3IgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJkZXNjcmlwdG9ycyIsIDA0MDAsIGNoYW4sIGR0LAorCQkJCQkJICZkYmdfZm9wc19kZXNjcmlwdG9ycyk7CisJaWYgKGNoYW5fZGVzY3IpCisJCWNoYW5fcmVxcyA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoInJlcXVlc3RlcnMiLCAwNDAwLCBjaGFuLCBkdCwKKwkJCQkJCSZkYmdfZm9wc19yZXF1ZXN0ZXJfY2hhbik7CisJaWYgKCFjaGFuX3JlcXMpCisJCWdvdG8gZXJyX3N0YXRlOworCisJcmV0dXJuIGNoYW47CisKK2Vycl9zdGF0ZToKKwlkZWJ1Z2ZzX3JlbW92ZV9yZWN1cnNpdmUoY2hhbik7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIHB4YV9kbWFfaW5pdF9kZWJ1Z2ZzKHZvaWQpCit7CisJaW50IGk7CisJc3RydWN0IGRlbnRyeSAqY2hhbmRpcjsKKworCWRiZ2ZzX3Jvb3QgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoRE1BX0RFQlVHX05BTUUsIE5VTEwpOworCWlmIChJU19FUlIoZGJnZnNfcm9vdCkgfHwgIWRiZ2ZzX3Jvb3QpCisJCWdvdG8gZXJyX3Jvb3Q7CisKKwlkYmdmc19zdGF0ZSA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoInN0YXRlIiwgMDQwMCwgZGJnZnNfcm9vdCwgTlVMTCwKKwkJCQkJICAmZGJnX2ZvcHNfc3RhdGUpOworCWlmICghZGJnZnNfc3RhdGUpCisJCWdvdG8gZXJyX3N0YXRlOworCisJZGJnZnNfY2hhbiA9IGttYWxsb2Moc2l6ZW9mKCpkYmdmc19zdGF0ZSkgKiBudW1fZG1hX2NoYW5uZWxzLAorCQkJICAgICBHRlBfS0VSTkVMKTsKKwlpZiAoIWRiZ2ZzX3N0YXRlKQorCQlnb3RvIGVycl9hbGxvYzsKKworCWNoYW5kaXIgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoImNoYW5uZWxzIiwgZGJnZnNfcm9vdCk7CisJaWYgKCFjaGFuZGlyKQorCQlnb3RvIGVycl9jaGFuZGlyOworCisJZm9yIChpID0gMDsgaSA8IG51bV9kbWFfY2hhbm5lbHM7IGkrKykgeworCQlkYmdmc19jaGFuW2ldID0gcHhhX2RtYV9kYmdfYWxsb2NfY2hhbihpLCBjaGFuZGlyKTsKKwkJaWYgKCFkYmdmc19jaGFuW2ldKQorCQkJZ290byBlcnJfY2hhbnM7CisJfQorCisJcmV0dXJuOworZXJyX2NoYW5zOgorZXJyX2NoYW5kaXI6CisJa2ZyZWUoZGJnZnNfY2hhbik7CitlcnJfYWxsb2M6CitlcnJfc3RhdGU6CisJZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlKGRiZ2ZzX3Jvb3QpOworZXJyX3Jvb3Q6CisJcHJfZXJyKCJweGFfZG1hOiBkZWJ1Z2ZzIGlzIG5vdCBhdmFpbGFibGVcbiIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgcHhhX2RtYV9jbGVhbnVwX2RlYnVnZnModm9pZCkKK3sKKwlkZWJ1Z2ZzX3JlbW92ZV9yZWN1cnNpdmUoZGJnZnNfcm9vdCk7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIHB4YV9kbWFfaW5pdF9kZWJ1Z2ZzKHZvaWQpIHt9CitzdGF0aWMgaW5saW5lIHZvaWQgcHhhX2RtYV9jbGVhbnVwX2RlYnVnZnModm9pZCkge30KKyNlbmRpZgorCiBpbnQgcHhhX3JlcXVlc3RfZG1hIChjaGFyICpuYW1lLCBweGFfZG1hX3ByaW8gcHJpbywKIAkJCXZvaWQgKCppcnFfaGFuZGxlcikoaW50LCB2b2lkICopLAogCQkJdm9pZCAqZGF0YSkKQEAgLTcxLDYgKzMxNSw3IEBACiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCXJldHVybiBpOwogfQorRVhQT1JUX1NZTUJPTChweGFfcmVxdWVzdF9kbWEpOwogCiB2b2lkIHB4YV9mcmVlX2RtYSAoaW50IGRtYV9jaCkKIHsKQEAgLTg4LDI0ICszMzMsMjYgQEAKIAlkbWFfY2hhbm5lbHNbZG1hX2NoXS5uYW1lID0gTlVMTDsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CitFWFBPUlRfU1lNQk9MKHB4YV9mcmVlX2RtYSk7CiAKIHN0YXRpYyBpcnFyZXR1cm5fdCBkbWFfaXJxX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2X2lkKQogewogCWludCBpLCBkaW50ID0gRElOVDsKKwlzdHJ1Y3QgZG1hX2NoYW5uZWwgKmNoYW5uZWw7CiAKLQlmb3IgKGkgPSAwOyBpIDwgbnVtX2RtYV9jaGFubmVsczsgaSsrKSB7Ci0JCWlmIChkaW50ICYgKDEgPDwgaSkpIHsKLQkJCXN0cnVjdCBkbWFfY2hhbm5lbCAqY2hhbm5lbCA9ICZkbWFfY2hhbm5lbHNbaV07Ci0JCQlpZiAoY2hhbm5lbC0+bmFtZSAmJiBjaGFubmVsLT5pcnFfaGFuZGxlcikgewotCQkJCWNoYW5uZWwtPmlycV9oYW5kbGVyKGksIGNoYW5uZWwtPmRhdGEpOwotCQkJfSBlbHNlIHsKLQkJCQkvKgotCQkJCSAqIElSUSBmb3IgYW4gdW5yZWdpc3RlcmVkIERNQSBjaGFubmVsOgotCQkJCSAqIGxldCdzIGNsZWFyIHRoZSBpbnRlcnJ1cHRzIGFuZCBkaXNhYmxlIGl0LgotCQkJCSAqLwotCQkJCXByaW50ayAoS0VSTl9XQVJOSU5HICJzcHVyaW91cyBJUlEgZm9yIERNQSBjaGFubmVsICVkXG4iLCBpKTsKLQkJCQlEQ1NSKGkpID0gRENTUl9TVEFSVElOVFJ8RENTUl9FTkRJTlRSfERDU1JfQlVTRVJSOwotCQkJfQorCXdoaWxlIChkaW50KSB7CisJCWkgPSBfX2ZmcyhkaW50KTsKKwkJZGludCAmPSAoZGludCAtIDEpOworCQljaGFubmVsID0gJmRtYV9jaGFubmVsc1tpXTsKKwkJaWYgKGNoYW5uZWwtPm5hbWUgJiYgY2hhbm5lbC0+aXJxX2hhbmRsZXIpIHsKKwkJCWNoYW5uZWwtPmlycV9oYW5kbGVyKGksIGNoYW5uZWwtPmRhdGEpOworCQl9IGVsc2UgeworCQkJLyoKKwkJCSAqIElSUSBmb3IgYW4gdW5yZWdpc3RlcmVkIERNQSBjaGFubmVsOgorCQkJICogbGV0J3MgY2xlYXIgdGhlIGludGVycnVwdHMgYW5kIGRpc2FibGUgaXQuCisJCQkgKi8KKwkJCXByaW50ayAoS0VSTl9XQVJOSU5HICJzcHVyaW91cyBJUlEgZm9yIERNQSBjaGFubmVsICVkXG4iLCBpKTsKKwkJCURDU1IoaSkgPSBEQ1NSX1NUQVJUSU5UUnxEQ1NSX0VORElOVFJ8RENTUl9CVVNFUlI7CiAJCX0KIAl9CiAJcmV0dXJuIElSUV9IQU5ETEVEOwpAQCAtMTI3LDYgKzM3NCw3IEBACiAJZm9yIChpID0gMDsgaSA8IG51bV9jaDsgaSsrKSB7CiAJCURDU1IoaSkgPSAwOwogCQlkbWFfY2hhbm5lbHNbaV0ucHJpbyA9IG1pbigoaSAmIDB4ZikgPj4gMiwgRE1BX1BSSU9fTE9XKTsKKwkJc3Bpbl9sb2NrX2luaXQoJmRtYV9jaGFubmVsc1tpXS5sb2NrKTsKIAl9CiAKIAlyZXQgPSByZXF1ZXN0X2lycShpcnEsIGRtYV9pcnFfaGFuZGxlciwgSVJRRl9ESVNBQkxFRCwgIkRNQSIsIE5VTEwpOwpAQCAtMTM1LDEwICszODMsOSBAQAogCQlrZnJlZShkbWFfY2hhbm5lbHMpOwogCQlyZXR1cm4gcmV0OwogCX0KLQogCW51bV9kbWFfY2hhbm5lbHMgPSBudW1fY2g7CisKKwlweGFfZG1hX2luaXRfZGVidWdmcygpOworCiAJcmV0dXJuIDA7CiB9Ci0KLUVYUE9SVF9TWU1CT0wocHhhX3JlcXVlc3RfZG1hKTsKLUVYUE9SVF9TWU1CT0wocHhhX2ZyZWVfZG1hKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtcHhhL2luY2x1ZGUvcGxhdC9tZnAuaCBiL2FyY2gvYXJtL3BsYXQtcHhhL2luY2x1ZGUvcGxhdC9tZnAuaAppbmRleCA2NDAxOTQ2Li4yMjA4NmU2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXB4YS9pbmNsdWRlL3BsYXQvbWZwLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1weGEvaW5jbHVkZS9wbGF0L21mcC5oCkBAIC0xNTAsNiArMTUwLDc0IEBACiAJTUZQX1BJTl9HUElPMTI1LAogCU1GUF9QSU5fR1BJTzEyNiwKIAlNRlBfUElOX0dQSU8xMjcsCisKKwlNRlBfUElOX0dQSU8xMjgsCisJTUZQX1BJTl9HUElPMTI5LAorCU1GUF9QSU5fR1BJTzEzMCwKKwlNRlBfUElOX0dQSU8xMzEsCisJTUZQX1BJTl9HUElPMTMyLAorCU1GUF9QSU5fR1BJTzEzMywKKwlNRlBfUElOX0dQSU8xMzQsCisJTUZQX1BJTl9HUElPMTM1LAorCU1GUF9QSU5fR1BJTzEzNiwKKwlNRlBfUElOX0dQSU8xMzcsCisJTUZQX1BJTl9HUElPMTM4LAorCU1GUF9QSU5fR1BJTzEzOSwKKwlNRlBfUElOX0dQSU8xNDAsCisJTUZQX1BJTl9HUElPMTQxLAorCU1GUF9QSU5fR1BJTzE0MiwKKwlNRlBfUElOX0dQSU8xNDMsCisJTUZQX1BJTl9HUElPMTQ0LAorCU1GUF9QSU5fR1BJTzE0NSwKKwlNRlBfUElOX0dQSU8xNDYsCisJTUZQX1BJTl9HUElPMTQ3LAorCU1GUF9QSU5fR1BJTzE0OCwKKwlNRlBfUElOX0dQSU8xNDksCisJTUZQX1BJTl9HUElPMTUwLAorCU1GUF9QSU5fR1BJTzE1MSwKKwlNRlBfUElOX0dQSU8xNTIsCisJTUZQX1BJTl9HUElPMTUzLAorCU1GUF9QSU5fR1BJTzE1NCwKKwlNRlBfUElOX0dQSU8xNTUsCisJTUZQX1BJTl9HUElPMTU2LAorCU1GUF9QSU5fR1BJTzE1NywKKwlNRlBfUElOX0dQSU8xNTgsCisJTUZQX1BJTl9HUElPMTU5LAorCU1GUF9QSU5fR1BJTzE2MCwKKwlNRlBfUElOX0dQSU8xNjEsCisJTUZQX1BJTl9HUElPMTYyLAorCU1GUF9QSU5fR1BJTzE2MywKKwlNRlBfUElOX0dQSU8xNjQsCisJTUZQX1BJTl9HUElPMTY1LAorCU1GUF9QSU5fR1BJTzE2NiwKKwlNRlBfUElOX0dQSU8xNjcsCisJTUZQX1BJTl9HUElPMTY4LAorCU1GUF9QSU5fR1BJTzE2OSwKKwlNRlBfUElOX0dQSU8xNzAsCisJTUZQX1BJTl9HUElPMTcxLAorCU1GUF9QSU5fR1BJTzE3MiwKKwlNRlBfUElOX0dQSU8xNzMsCisJTUZQX1BJTl9HUElPMTc0LAorCU1GUF9QSU5fR1BJTzE3NSwKKwlNRlBfUElOX0dQSU8xNzYsCisJTUZQX1BJTl9HUElPMTc3LAorCU1GUF9QSU5fR1BJTzE3OCwKKwlNRlBfUElOX0dQSU8xNzksCisJTUZQX1BJTl9HUElPMTgwLAorCU1GUF9QSU5fR1BJTzE4MSwKKwlNRlBfUElOX0dQSU8xODIsCisJTUZQX1BJTl9HUElPMTgzLAorCU1GUF9QSU5fR1BJTzE4NCwKKwlNRlBfUElOX0dQSU8xODUsCisJTUZQX1BJTl9HUElPMTg2LAorCU1GUF9QSU5fR1BJTzE4NywKKwlNRlBfUElOX0dQSU8xODgsCisJTUZQX1BJTl9HUElPMTg5LAorCU1GUF9QSU5fR1BJTzE5MCwKKwlNRlBfUElOX0dQSU8xOTEsCisKKwlNRlBfUElOX0dQSU8yNTUgPSAyNTUsCisKIAlNRlBfUElOX0dQSU8wXzIsCiAJTUZQX1BJTl9HUElPMV8yLAogCU1GUF9QSU5fR1BJTzJfMiwKQEAgLTMyNSw4ICszOTMsOSBAQAogI2RlZmluZSBNRlBfUFVMTF9MT1cJCSgweDEgPDwgMjEpCiAjZGVmaW5lIE1GUF9QVUxMX0hJR0gJCSgweDIgPDwgMjEpCiAjZGVmaW5lIE1GUF9QVUxMX0JPVEgJCSgweDMgPDwgMjEpCi0jZGVmaW5lIE1GUF9QVUxMX01BU0sJCSgweDMgPDwgMjEpCi0jZGVmaW5lIE1GUF9QVUxMKHgpCQkoKCh4KSA+PiAyMSkgJiAweDMpCisjZGVmaW5lIE1GUF9QVUxMX0ZMT0FUCQkoMHg0IDw8IDIxKQorI2RlZmluZSBNRlBfUFVMTF9NQVNLCQkoMHg3IDw8IDIxKQorI2RlZmluZSBNRlBfUFVMTCh4KQkJKCgoeCkgPj4gMjEpICYgMHg3KQogCiAjZGVmaW5lIE1GUF9DRkdfREVGQVVMVAkJKE1GUF9BRjAgfCBNRlBfRFMwM1ggfCBNRlBfTFBNX0RFRkFVTFQgfFwKIAkJCQkgTUZQX0xQTV9FREdFX05PTkUgfCBNRlBfUFVMTF9OT05FKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1weGEvbWZwLmMgYi9hcmNoL2FybS9wbGF0LXB4YS9tZnAuYwppbmRleCBlNzE2YzYyLi45NDA1ZDAzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXB4YS9tZnAuYworKysgYi9hcmNoL2FybS9wbGF0LXB4YS9tZnAuYwpAQCAtNzcsMTEgKzc3LDEzIEBACiAgKiBNRlBSX1BVTExfTE9XICAgICAgICAxICAgICAgICAgMCAgICAgICAgMQogICogTUZQUl9QVUxMX0hJR0ggICAgICAgMSAgICAgICAgIDEgICAgICAgIDAKICAqIE1GUFJfUFVMTF9CT1RIICAgICAgIDEgICAgICAgICAxICAgICAgICAxCisgKiBNRlBSX1BVTExfRkxPQVQJMSAgICAgICAgIDAgICAgICAgIDAKICAqLwogI2RlZmluZSBNRlBSX1BVTExfTk9ORQkJKDApCiAjZGVmaW5lIE1GUFJfUFVMTF9MT1cJCShNRlBSX1BVTExfU0VMIHwgTUZQUl9QVUxMRE9XTl9FTikKICNkZWZpbmUgTUZQUl9QVUxMX0JPVEgJCShNRlBSX1BVTExfTE9XIHwgTUZQUl9QVUxMVVBfRU4pCiAjZGVmaW5lIE1GUFJfUFVMTF9ISUdICQkoTUZQUl9QVUxMX1NFTCB8IE1GUFJfUFVMTFVQX0VOKQorI2RlZmluZSBNRlBSX1BVTExfRkxPQVQJCShNRlBSX1BVTExfU0VMKQogCiAvKiBtZnBfc3Bpbl9sb2NrIGlzIHVzZWQgdG8gZW5zdXJlIHRoYXQgTUZQIHJlZ2lzdGVyIGNvbmZpZ3VyYXRpb24KICAqIChtb3N0IGxpa2VseSBhIHJlYWQtbW9kaWZ5LXdyaXRlIG9wZXJhdGlvbikgaXMgYXRvbWljLCBhbmQgdGhhdApAQCAtMTE2LDYgKzExOCw3IEBACiAJTUZQUl9QVUxMX0xPVywKIAlNRlBSX1BVTExfSElHSCwKIAlNRlBSX1BVTExfQk9USCwKKwlNRlBSX1BVTExfRkxPQVQsCiB9OwogCiAvKiBtYXBwaW5nIG9mIE1GUF9MUE1fRURHRV8qIGRlZmluaXRpb25zIHRvIE1GUFJfRURHRV8qIHJlZ2lzdGVyIGJpdHMgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjL2dwaW8uYyBiL2FyY2gvYXJtL3BsYXQtczNjL2dwaW8uYwppbmRleCAyNjBmZGM2Li41ZmYyNGUwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXMzYy9ncGlvLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2MvZ3Bpby5jCkBAIC0yOCw3ICsyOCw3IEBACiAKIAlncG4gPSBjaGlwLT5jaGlwLmJhc2U7CiAJZm9yIChpID0gMDsgaSA8IGNoaXAtPmNoaXAubmdwaW87IGkrKywgZ3BuKyspIHsKLQkJQlVHX09OKGdwbiA+IEFSUkFZX1NJWkUoczNjX2dwaW9zKSk7CisJCUJVR19PTihncG4gPj0gQVJSQVlfU0laRShzM2NfZ3Bpb3MpKTsKIAkJczNjX2dwaW9zW2dwbl0gPSBjaGlwOwogCX0KIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9hZGMuYyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9hZGMuYwppbmRleCAxMTExN2E3Li40ZDM2Yjc4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvYWRjLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2FkYy5jCkBAIC0xNCw2ICsxNCw3IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvaW5jbHVkZS9wbGF0L21jaS5oIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2luY2x1ZGUvcGxhdC9tY2kuaAppbmRleCAyZDA4NTJhLi5jMmNlZjYxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvaW5jbHVkZS9wbGF0L21jaS5oCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9pbmNsdWRlL3BsYXQvbWNpLmgKQEAgLTIsOCArMiwxMSBAQAogI2RlZmluZSBfQVJDSF9NQ0lfSAogCiBzdHJ1Y3QgczNjMjR4eF9tY2lfcGRhdGEgeworCXVuc2lnbmVkIGludAlub193cHJvdGVjdCA6IDE7CisJdW5zaWduZWQgaW50CW5vX2RldGVjdCA6IDE7CiAJdW5zaWduZWQgaW50CXdwcm90ZWN0X2ludmVydCA6IDE7CiAJdW5zaWduZWQgaW50CWRldGVjdF9pbnZlcnQgOiAxOyAgIC8qIHNldCA9PiBkZXRlY3QgYWN0aXZlIGhpZ2guICovCisJdW5zaWduZWQgaW50CXVzZV9kbWEgOiAxOwogCiAJdW5zaWduZWQgaW50CWdwaW9fZGV0ZWN0OwogCXVuc2lnbmVkIGludAlncGlvX3dwcm90ZWN0OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2RtYS5jIGIvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2RtYS5jCmluZGV4IDY3YWE5M2QuLjI2NmExMDcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9kbWEuYworKysgYi9hcmNoL2FybS9wbGF0LXMzYzY0eHgvZG1hLmMKQEAgLTM0NSwxMyArMzQ1LDEzIEBACiAJaWYgKCFjaGFuKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWJ1ZmYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgczNjNjR4eF9kbWFfYnVmZiksIEdGUF9LRVJORUwpOworCWJ1ZmYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgczNjNjR4eF9kbWFfYnVmZiksIEdGUF9BVE9NSUMpOwogCWlmICghYnVmZikgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBubyBtZW1vcnkgZm9yIGJ1ZmZlclxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKLQlsbGkgPSBkbWFfcG9vbF9hbGxvYyhkbWFfcG9vbCwgR0ZQX0tFUk5FTCwgJmJ1ZmYtPmxsaV9kbWEpOworCWxsaSA9IGRtYV9wb29sX2FsbG9jKGRtYV9wb29sLCBHRlBfQVRPTUlDLCAmYnVmZi0+bGxpX2RtYSk7CiAJaWYgKCFsbGkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogbm8gbWVtb3J5IGZvciBsbGlcbiIsIF9fZnVuY19fKTsKIAkJcmV0ID0gLUVOT01FTTsKQEAgLTY5Nyw3ICs2OTcsNyBAQAogCiAJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFJlZ2lzdGVyaW5nIERNQSBjaGFubmVsc1xuIiwgX19mdW5jX18pOwogCi0JZG1hX3Bvb2wgPSBkbWFfcG9vbF9jcmVhdGUoIkRNQS1MTEkiLCBOVUxMLCAzMiwgMTYsIDApOworCWRtYV9wb29sID0gZG1hX3Bvb2xfY3JlYXRlKCJETUEtTExJIiwgTlVMTCwgc2l6ZW9mKHN0cnVjdCBwbDA4MHNfbGxpKSwgMTYsIDApOwogCWlmICghZG1hX3Bvb2wpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIGNyZWF0ZSBwb29sXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2luY2x1ZGUvcGxhdC9kbWEtcGxhdC5oIGIvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2luY2x1ZGUvcGxhdC9kbWEtcGxhdC5oCmluZGV4IDBjMzBkZDkuLjhmNzZhMWUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9pbmNsdWRlL3BsYXQvZG1hLXBsYXQuaAorKysgYi9hcmNoL2FybS9wbGF0LXMzYzY0eHgvaW5jbHVkZS9wbGF0L2RtYS1wbGF0LmgKQEAgLTI2LDcgKzI2LDcgQEAKIAlzdHJ1Y3QgczNjNjR4eF9kbWFfYnVmZiAqbmV4dDsKIAogCXZvaWQJCQkqcHc7Ci0Jc3RydWN0IHBsMDgwX2xsaQkqbGxpOworCXN0cnVjdCBwbDA4MHNfbGxpCSpsbGk7CiAJZG1hX2FkZHJfdAkJIGxsaV9kbWE7CiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYzY0eHgvaW5jbHVkZS9wbGF0L2lycXMuaCBiL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9pbmNsdWRlL3BsYXQvaXJxcy5oCmluZGV4IDc0M2E3MDAuLjc5NTZmZDMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9pbmNsdWRlL3BsYXQvaXJxcy5oCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9pbmNsdWRlL3BsYXQvaXJxcy5oCkBAIC0xOTQsOSArMTk0LDE3IEBACiAKICNkZWZpbmUgSVJRX0VJTlRfR1JPVVAoZ3JvdXAsIG5vKQkoSVJRX0VJTlRfR1JPVVAjI2dyb3VwIyNfQkFTRSArIChubykpCiAKKy8qIERlZmluZSBhIGdyb3VwIG9mIGludGVycnVwdHMgZm9yIGJvYXJkLXNwZWNpZmljIHVzZSAoZWcsIGZvciBNRkQKKyAqIGludGVycnVwdCBjb250cm9sbGVycykuICovCisjZGVmaW5lIElSUV9CT0FSRF9TVEFSVCAoSVJRX0VJTlRfR1JPVVA5X0JBU0UgKyBJUlFfRUlOVF9HUk9VUDlfTlIgKyAxKQorCisjZGVmaW5lIElSUV9CT0FSRF9OUiAxNgorCisjZGVmaW5lIElSUV9CT0FSRF9FTkQgKElSUV9CT0FSRF9TVEFSVCArIElSUV9CT0FSRF9OUikKKwogLyogU2V0IHRoZSBkZWZhdWx0IE5SX0lSUVMgKi8KIAotI2RlZmluZSBOUl9JUlFTCShJUlFfRUlOVF9HUk9VUDlfQkFTRSArIElSUV9FSU5UX0dST1VQOV9OUiArIDEpCisjZGVmaW5lIE5SX0lSUVMJKElSUV9CT0FSRF9FTkQgKyAxKQogCiAjZW5kaWYgLyogX19BU01fUExBVF9TM0M2NFhYX0lSUVNfSCAqLwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYzY0eHgvczNjNjQwMC1jbG9jay5jIGIvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L3MzYzY0MDAtY2xvY2suYwppbmRleCBmZWJhYzE5Li45NzQ1ODUyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXMzYzY0eHgvczNjNjQwMC1jbG9jay5jCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9zM2M2NDAwLWNsb2NrLmMKQEAgLTMwMiw4ICszMDIsOCBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXZhbCA9IF9fcmF3X3JlYWRsKHJlZyk7Ci0JdmFsICY9IH4oMHhmIDw8IHNjbGstPnNoaWZ0KTsKLQl2YWwgfD0gKGRpdiAtIDEpIDw8IHNjbGstPnNoaWZ0OworCXZhbCAmPSB+KDB4ZiA8PCBzY2xrLT5kaXZpZGVyX3NoaWZ0KTsKKwl2YWwgfD0gKGRpdiAtIDEpIDw8IHNjbGstPmRpdmlkZXJfc2hpZnQ7CiAJX19yYXdfd3JpdGVsKHZhbCwgcmVnKTsKIAogCXJldHVybiAwOwpAQCAtMzI4LDYgKzMyOCw4IEBACiAJCWNsa3NyYyB8PSBzcmNfbnIgPDwgc2Nsay0+c2hpZnQ7CiAKIAkJX19yYXdfd3JpdGVsKGNsa3NyYywgUzNDX0NMS19TUkMpOworCisJCWNsay0+cGFyZW50ID0gcGFyZW50OwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTM0Myw3ICszNDUsNyBAQAogCWlmIChyYXRlID4gcGFyZW50X3JhdGUpCiAJCXJhdGUgPSBwYXJlbnRfcmF0ZTsKIAllbHNlIHsKLQkJZGl2ID0gcmF0ZSAvIHBhcmVudF9yYXRlOworCQlkaXYgPSBwYXJlbnRfcmF0ZSAvIHJhdGU7CiAKIAkJaWYgKGRpdiA9PSAwKQogCQkJZGl2ID0gMTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtc3RtcDN4eHgvZG1hLmMgYi9hcmNoL2FybS9wbGF0LXN0bXAzeHh4L2RtYS5jCmluZGV4IGQyZjQ5NzcuLmVmODhmMjUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtc3RtcDN4eHgvZG1hLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1zdG1wM3h4eC9kbWEuYwpAQCAtMjY0LDcgKzI2NCw3IEBACiAJCQkJCXN0bXAzeHh4X2RtYV9mcmVlX2NvbW1hbmQoY2gsCiAJCQkJCQkJCSAgJmRlc2NyaXB0b3JzCiAJCQkJCQkJCSAgW2ldKTsKLQkJCQl9IHdoaWxlIChpLS0gPj0gMCk7CisJCQkJfSB3aGlsZSAoaS0tID4gMCk7CiAJCQl9CiAJCQlyZXR1cm4gZXJyOwogCQl9CmRpZmYgLS1naXQgYS9hcmNoL2FybS90b29scy9tYWNoLXR5cGVzIGIvYXJjaC9hcm0vdG9vbHMvbWFjaC10eXBlcwppbmRleCBjOGM1NWI0Li45NGJlN2JiIDEwMDY0NAotLS0gYS9hcmNoL2FybS90b29scy9tYWNoLXR5cGVzCisrKyBiL2FyY2gvYXJtL3Rvb2xzL21hY2gtdHlwZXMKQEAgLTEyLDcgKzEyLDcgQEAKICMKICMgICBodHRwOi8vd3d3LmFybS5saW51eC5vcmcudWsvZGV2ZWxvcGVyL21hY2hpbmVzLz9hY3Rpb249bmV3CiAjCi0jIExhc3QgdXBkYXRlOiBTYXQgU2VwIDEyIDEyOjAwOjE2IDIwMDkKKyMgTGFzdCB1cGRhdGU6IEZyaSBTZXAgMTggMjE6NDI6MDAgMjAwOQogIwogIyBtYWNoaW5lX2lzX3h4eAlDT05GSUdfeHh4eAkJTUFDSF9UWVBFX3h4eAkJbnVtYmVyCiAjCkBAIC0xNjM4LDcgKzE2MzgsNyBAQAogYW1sX204MDUwCQlNQUNIX0FNTF9NODA1MAkJQU1MX004MDUwCQkxNjQ0CiBteDM1XzNkcwkJTUFDSF9NWDM1XzNEUwkJTVgzNV8zRFMJCTE2NDUKIG1hcnMJCQlNQUNIX01BUlMJCU1BUlMJCQkxNjQ2Ci1udG9zZF82NDR4YQkJTUFDSF9OVE9TRF82NDRYQQlOVE9TRF82NDRYQQkJMTY0NworbmV1cm9zX29zZDIJCU1BQ0hfTkVVUk9TX09TRDIJTkVVUk9TX09TRDIJCTE2NDcKIGJhZGdlcgkJCU1BQ0hfQkFER0VSCQlCQURHRVIJCQkxNjQ4CiB0cml6ZXBzNHdsCQlNQUNIX1RSSVpFUFM0V0wJCVRSSVpFUFM0V0wJCTE2NDkKIHRyaXplcHM1CQlNQUNIX1RSSVpFUFM1CQlUUklaRVBTNQkJMTY1MApAQCAtMTY1NCw3ICsxNjU0LDcgQEAKIHpvcmFuNDN4eAkJTUFDSF9aT1JBTjQzWFgJCVpPUkFONDNYWAkJMTY2MAogc29uaXg5MjYJCU1BQ0hfU09OSVg5MjYJCVNPTklYOTI2CQkxNjYxCiBjZWxlc3RpYWxzZW1pCQlNQUNIX0NFTEVTVElBTFNFTUkJQ0VMRVNUSUFMU0VNSQkJMTY2MgotY2M5bTI0NDMJCU1BQ0hfQ0M5TTI0NDMJCUNDOU0yNDQzCQkxNjYzCitjYzltMjQ0M2pzCQlNQUNIX0NDOU0yNDQzSlMJCUNDOU0yNDQzSlMJCTE2NjMKIHR3NTMzNAkJCU1BQ0hfVFc1MzM0CQlUVzUzMzQJCQkxNjY0CiBvbWFwX2h0Y2FydGVtaXMJCU1BQ0hfSFRDQVJURU1JUwkJSFRDQVJURU1JUwkJMTY2NQogbmFsX2hsaXRlCQlNQUNIX05BTF9ITElURQkJTkFMX0hMSVRFCQkxNjY2CkBAIC0xODAyLDcgKzE4MDIsNyBAQAogcmQ4OGY1MTgxbF9nZQkJTUFDSF9SRDg4RjUxODFMX0dFCVJEODhGNTE4MUxfR0UJCTE4MTIKIHNpZm1haW4JCQlNQUNIX1NJRk1BSU4JCVNJRk1BSU4JCQkxODEzCiBzYW05X2w5MjYxCQlNQUNIX1NBTTlfTDkyNjEJCVNBTTlfTDkyNjEJCTE4MTQKLWNjOW0yNDQzanMJCU1BQ0hfQ0M5TTI0NDNKUwkJQ0M5TTI0NDNKUwkJMTgxNQorY2M5bTI0NDMJCU1BQ0hfQ0M5TTI0NDMJCUNDOU0yNDQzCQkxODE1CiB4YXJpYTMwMAkJTUFDSF9YQVJJQTMwMAkJWEFSSUEzMDAJCTE4MTYKIGl0OTIwMAkJCU1BQ0hfSVQ5MjAwCQlJVDkyMDAJCQkxODE3CiByZDg4ZjUxODFsX2Z4bwkJTUFDSF9SRDg4RjUxODFMX0ZYTwlSRDg4RjUxODFMX0ZYTwkJMTgxOApAQCAtMjQwOSwzICsyNDA5LDE1IEBACiBwc3MyCQkJTUFDSF9QU1MyCQlQU1MyCQkJMjQyMwogZGF2aW5jaV9hcG0xNTAJCU1BQ0hfREFWSU5DSV9BUE0xNTAJREFWSU5DSV9BUE0xNTAJCTI0MjQKIHN0cjkxMDAJCQlNQUNIX1NUUjkxMDAJCVNUUjkxMDAJCQkyNDI1CituZXQ1YmlnCQkJTUFDSF9ORVQ1QklHCQlORVQ1QklHCQkJMjQyNgorc2VhYmVkOTI2MwkJTUFDSF9TRUFCRUQ5MjYzCQlTRUFCRUQ5MjYzCQkyNDI3CitteDUxX20yaWQJCU1BQ0hfTVg1MV9NMklECQlNWDUxX00ySUQJCTI0MjgKK29jdHZvY3BsdXNfZWIJCU1BQ0hfT0NUVk9DUExVU19FQglPQ1RWT0NQTFVTX0VCCQkyNDI5CitrbGtfZmlyZWZveAkJTUFDSF9LTEtfRklSRUZPWAlLTEtfRklSRUZPWAkJMjQzMAora2xrX3dpcm1hX21vZHVsZQlNQUNIX0tMS19XSVJNQV9NT0RVTEUJS0xLX1dJUk1BX01PRFVMRQkyNDMxCitrbGtfd2lybWFfbW1pCQlNQUNIX0tMS19XSVJNQV9NTUkJS0xLX1dJUk1BX01NSQkJMjQzMgorc3VwZXJzb25pYwkJTUFDSF9TVVBFUlNPTklDCQlTVVBFUlNPTklDCQkyNDMzCitsaWJlcnR5CQkJTUFDSF9MSUJFUlRZCQlMSUJFUlRZCQkJMjQzNAorbWgzNTUJCQlNQUNIX01IMzU1CQlNSDM1NQkJCTI0MzUKK3BjNzgwMgkJCU1BQ0hfUEM3ODAyCQlQQzc4MDIJCQkyNDM2CitnbmV0X3NnYwkJTUFDSF9HTkVUX1NHQwkJR05FVF9TR0MJCTI0MzcKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vQURJX0JTRC50eHQgYi9hcmNoL2JsYWNrZmluL0FESV9CU0QudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwMWQwYjYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2JsYWNrZmluL0FESV9CU0QudHh0CkBAIC0wLDAgKzEsNDEgQEAKK1RoaXMgQlNELVN0eWxlIExpY2Vuc2UgYXBwbGllcyB0byBhIGZldyBmaWxlcyBpbiAuL2FyY2gvYmxhY2tmaW4gZGlyZWN0b3J5LAorYW5kIGlzIGluY2x1ZGVkIGhlcmUsIHNvIHBlb3BsZSB1bmRlcnN0YW5kIHdoaWNoIGNvZGUgdGhleSBjYW4gdXNlIG91dHNpZGUKK3RoZSBMaW51eCBrZXJuZWwsIGluIG5vbi1HUEwgYmFzZWQgcHJvamVjdHMuCisKK1VzaW5nIHRoZSBmaWxlcyByZWxlYXNlZCB1bmRlciB0aGUgIkFESSBCU0QiIGxpY2Vuc2UsIG11c3QgY29tcGx5IHdpdGgKK3RoZXNlIGxpY2Vuc2UgdGVybXMuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NvcHlyaWdodCBBbmFsb2cgRGV2aWNlcywgSW5jLgorCitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworYXJlIG1ldDoKKyAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAgICBkaXN0cmlidXRpb24uCisgIC0gTmVpdGhlciB0aGUgbmFtZSBvZiBBbmFsb2cgRGV2aWNlcywgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAgLSBUaGUgdXNlIG9mIHRoaXMgc29mdHdhcmUgbWF5IG9yIG1heSBub3QgaW5mcmluZ2UgdGhlIHBhdGVudCByaWdodHMKKyAgICBvZiBvbmUgb3IgbW9yZSBwYXRlbnQgaG9sZGVycy4gIFRoaXMgbGljZW5zZSBkb2VzIG5vdCByZWxlYXNlIHlvdQorICAgIGZyb20gdGhlIHJlcXVpcmVtZW50IHRoYXQgeW91IG9idGFpbiBzZXBhcmF0ZSBsaWNlbnNlcyBmcm9tIHRoZXNlCisgICAgcGF0ZW50IGhvbGRlcnMgdG8gdXNlIHRoaXMgc29mdHdhcmUuCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQU5BTE9HIERFVklDRVMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IKK0lNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIE5PTi1JTkZSSU5HRU1FTlQsCitNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorSU4gTk8gRVZFTlQgU0hBTEwgQU5BTE9HIERFVklDRVMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKK0lOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCitCVVQgTk9UIExJTUlURUQgVE8sIElOVEVMTEVDVFVBTCBQUk9QRVJUWSBSSUdIVFMsIFBST0NVUkVNRU5UIE9GCitTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IKK0JVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLAorV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IKK09USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYKK0FEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL0tjb25maWcgYi9hcmNoL2JsYWNrZmluL0tjb25maWcKaW5kZXggOWEwMWQ0NC4uYWU2YTYwZiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9LY29uZmlnCisrKyBiL2FyY2gvYmxhY2tmaW4vS2NvbmZpZwpAQCAtNDcsNiArNDcsOSBAQAogY29uZmlnIEdFTkVSSUNfSVJRX1BST0JFCiAJZGVmX2Jvb2wgeQogCitjb25maWcgR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRCisJZGVmX2Jvb2wgeQorCiBjb25maWcgR0VORVJJQ19HUElPCiAJZGVmX2Jvb2wgeQogCkBAIC0yMjksNyArMjMyLDcgQEAKIAogY29uZmlnIFNNUAogCWRlcGVuZHMgb24gQkY1NjEKLQlzZWxlY3QgR0VORVJJQ19USU1FCisJc2VsZWN0IEdFTkVSSUNfQ0xPQ0tFVkVOVFMKIAlib29sICJTeW1tZXRyaWMgbXVsdGktcHJvY2Vzc2luZyBzdXBwb3J0IgogCS0tLWhlbHAtLS0KIAkgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciBzeXN0ZW1zIHdpdGggbW9yZSB0aGFuIG9uZSBDUFUsCkBAIC02MTMsMTIgKzYxNiwxMCBAQAogc291cmNlIGtlcm5lbC9LY29uZmlnLmh6CiAKIGNvbmZpZyBHRU5FUklDX1RJTUUKLQlib29sICJHZW5lcmljIHRpbWUiCi0JZGVmYXVsdCB5CisJZGVmX2Jvb2wgeQogCiBjb25maWcgR0VORVJJQ19DTE9DS0VWRU5UUwogCWJvb2wgIkdlbmVyaWMgY2xvY2sgZXZlbnRzIgotCWRlcGVuZHMgb24gR0VORVJJQ19USU1FCiAJZGVmYXVsdCB5CiAKIGNob2ljZQpAQCAtNjUzLDYgKzY1NCwxMCBAQAogCWRlcGVuZHMgb24gR0VORVJJQ19DTE9DS0VWRU5UUwogCWRlcGVuZHMgb24gIVRJQ0tTT1VSQ0VfR1BUTVIwCiAKK2NvbmZpZyBBUkNIX1VTRVNfR0VUVElNRU9GRlNFVAorCWRlcGVuZHMgb24gIUdFTkVSSUNfQ0xPQ0tFVkVOVFMKKwlkZWZfYm9vbCB5CisKIHNvdXJjZSBrZXJuZWwvdGltZS9LY29uZmlnCiAKIGNvbW1lbnQgIk1pc2MiCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2F0b21pYy5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9hdG9taWMuaAppbmRleCA4OGYzNmQ1Li5kMjdjNjI3IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2F0b21pYy5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vYXRvbWljLmgKQEAgLTEsMyArMSw5IEBACisvKgorwqAqIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgorwqAqCivCoCogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgorwqAqLworCiAjaWZuZGVmIF9fQVJDSF9CTEFDS0ZJTl9BVE9NSUNfXwogI2RlZmluZSBfX0FSQ0hfQkxBQ0tGSU5fQVRPTUlDX18KIApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9iZmluLWdsb2JhbC5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9iZmluLWdsb2JhbC5oCmluZGV4IGFlZjA1OTQuLjEwMDY0ZjkgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vYmZpbi1nbG9iYWwuaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2JmaW4tZ2xvYmFsLmgKQEAgLTEsMjkgKzEsOSBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgaW5jbHVkZS9hc20tYmxhY2tmaW4vYmZpbi1nbG9iYWwuaAotICogQmFzZWQgb246Ci0gKiBBdXRob3I6ICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjogIEdsb2JhbCBleHRlcm4gZGVmaW5lcyBmb3IgYmxhY2tmaW4KKyAqIEdsb2JhbCBleHRlcm4gZGVmaW5lcyBmb3IgYmxhY2tmaW4KICAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwNiBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKiBDb3B5cmlnaHQgMjAwNi0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAjaWZuZGVmIF9CRklOX0dMT0JBTF9IXwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9iZmluNXh4X3NwaS5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9iZmluNXh4X3NwaS5oCmluZGV4IGMyODFjNjMuLmVkNGY4YzYgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vYmZpbjV4eF9zcGkuaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2JmaW41eHhfc3BpLmgKQEAgLTMsOCArMyw2IEBACiAgKgogICogQ29weXJpZ2h0IDIwMDQtMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgogICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vYmZpbl9yb3RhcnkuaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vYmZpbl9yb3RhcnkuaAppbmRleCA0MjVlY2U2Li5hYmRiMmFmIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2JmaW5fcm90YXJ5LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9iZmluX3JvdGFyeS5oCkBAIC0xLDYgKzEsMTAgQEAKIC8qCiAgKiBib2FyZCBpbml0aWFsaXphdGlvbiBzaG91bGQgcHV0IG9uZSBvZiB0aGVzZSBzdHJ1Y3R1cmVzIGludG8gcGxhdGZvcm1fZGF0YQogICogYW5kIHBsYWNlIHRoZSBiZmluLXJvdGFyeSBvbnRvIHBsYXRmb3JtX2J1cyBuYW1lZCAiYmZpbi1yb3RhcnkiLgorICoKKyAqIENvcHlyaWdodCAyMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2lmbmRlZiBfQkZJTl9ST1RBUllfSApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9iZmluX3NpbXBsZV90aW1lci5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9iZmluX3NpbXBsZV90aW1lci5oCmluZGV4IGZjY2JiNTkuLjUyNDhjMTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vYmZpbl9zaW1wbGVfdGltZXIuaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2JmaW5fc2ltcGxlX3RpbWVyLmgKQEAgLTEsMyArMSw5IEBACisvKgorICogQ29weXJpZ2h0IDIwMDYtMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgorICovCisKICNpZm5kZWYgX2JmaW5fc2ltcGxlX3RpbWVyX2hfCiAjZGVmaW5lIF9iZmluX3NpbXBsZV90aW1lcl9oXwogCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2JpdG9wcy5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9iaXRvcHMuaAppbmRleCBkYWZmYTcxLi5hMmZmM2ZiIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2JpdG9wcy5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vYml0b3BzLmgKQEAgLTEsMyArMSw5IEBACisvKgorICogQ29weXJpZ2h0IDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgorICovCisKICNpZm5kZWYgX0JMQUNLRklOX0JJVE9QU19ICiAjZGVmaW5lIF9CTEFDS0ZJTl9CSVRPUFNfSAogCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2JsYWNrZmluLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2JsYWNrZmluLmgKaW5kZXggNGQ0NDM5NS4uZWI3YzE0NCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9ibGFja2Zpbi5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vYmxhY2tmaW4uaApAQCAtMSw2ICsxLDkgQEAKIC8qCi0gKiBDb21tb24gaGVhZGVyIGZpbGUgZm9yIGJsYWNrZmluIGZhbWlseSBvZiBwcm9jZXNzb3JzLgorICogQ29tbW9uIGhlYWRlciBmaWxlIGZvciBCbGFja2ZpbiBmYW1pbHkgb2YgcHJvY2Vzc29ycy4KICAqCivCoCogQ29weXJpZ2h0IDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCivCoCoKK8KgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2lmbmRlZiBfQkxBQ0tGSU5fSF8KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vYnVnLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2J1Zy5oCmluZGV4IDY1NWU0OTUuLjZmNDU0OGEgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vYnVnLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9idWcuaApAQCAtMSwzICsxLDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCisgKi8KKwogI2lmbmRlZiBfQkxBQ0tGSU5fQlVHX0gKICNkZWZpbmUgX0JMQUNLRklOX0JVR19ICiAKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vYnl0ZW9yZGVyLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2J5dGVvcmRlci5oCmluZGV4IDNlNjkxMDYuLjk1NTg0MTYgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vYnl0ZW9yZGVyLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9ieXRlb3JkZXIuaApAQCAtMSw2ICsxIEBACi0jaWZuZGVmIF9CTEFDS0ZJTl9CWVRFT1JERVJfSAotI2RlZmluZSBfQkxBQ0tGSU5fQllURU9SREVSX0gKLQogI2luY2x1ZGUgPGxpbnV4L2J5dGVvcmRlci9saXR0bGVfZW5kaWFuLmg+Ci0KLSNlbmRpZgkJCQkvKiBfQkxBQ0tGSU5fQllURU9SREVSX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vY2FjaGUuaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vY2FjaGUuaAppbmRleCA0NzcwNTBhLi44NTQyYmMzIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2NhY2hlLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9jYWNoZS5oCkBAIC0xLDYgKzEsOSBAQAogLyoKLSAqIGluY2x1ZGUvYXNtLWJsYWNrZmluL2NhY2hlLmgKKyAqIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLworCiAjaWZuZGVmIF9fQVJDSF9CTEFDS0ZJTl9DQUNIRV9ICiAjZGVmaW5lIF9fQVJDSF9CTEFDS0ZJTl9DQUNIRV9ICiAKQEAgLTM1LDEwICszOCwxMCBAQAogCiAjaWYgZGVmaW5lZChDT05GSUdfU01QKSAmJiBcCiAgICAgIWRlZmluZWQoQ09ORklHX0JGSU5fQ0FDSEVfQ09IRVJFTlQpCi0jIGlmIGRlZmluZWQoQ09ORklHX0JGSU5fSUNBQ0hFQUJMRSkgfHwgZGVmaW5lZChDT05GSUdfQkZJTl9MMl9JQ0FDSEVBQkxFKQorIyBpZiBkZWZpbmVkKENPTkZJR19CRklOX0VYVE1FTV9JQ0FDSEVBQkxFKSB8fCBkZWZpbmVkKENPTkZJR19CRklOX0wyX0lDQUNIRUFCTEUpCiAjIGRlZmluZSBfX0FSQ0hfU1lOQ19DT1JFX0lDQUNIRQogIyBlbmRpZgotIyBpZiBkZWZpbmVkKENPTkZJR19CRklOX0RDQUNIRUFCTEUpIHx8IGRlZmluZWQoQ09ORklHX0JGSU5fTDJfRENBQ0hFQUJMRSkKKyMgaWYgZGVmaW5lZChDT05GSUdfQkZJTl9FWFRNRU1fRENBQ0hFQUJMRSkgfHwgZGVmaW5lZChDT05GSUdfQkZJTl9MMl9EQ0FDSEVBQkxFKQogIyBkZWZpbmUgX19BUkNIX1NZTkNfQ09SRV9EQ0FDSEUKICMgZW5kaWYKICNpZm5kZWYgX19BU1NFTUJMWV9fCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2NhY2hlZmx1c2guaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oCmluZGV4IDdlNTU1NDllLi5hZjAzYTM2IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2NhY2hlZmx1c2guaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2NhY2hlZmx1c2guaApAQCAtMSwzMCArMSw5IEBACiAvKgotICogRmlsZTogICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9jYWNoZWZsdXNoLmgKLSAqIEJhc2VkIG9uOgkgaW5jbHVkZS9hc20tbTY4a25vbW11L2NhY2hlZmx1c2guaAotICogQXV0aG9yOiAgICAgICBMRyBTb2Z0IEluZGlhCi0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAoQykgMjAwNCBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKiBDcmVhdGVkOiAgICAgIFR1ZSBTZXAgMjEgMjAwNAotICogRGVzY3JpcHRpb246ICBCbGFja2ZpbiBsb3ctbGV2ZWwgY2FjaGUgcm91dGluZXMgYWRhcHRlZCBmcm9tIHRoZSBpMzg2Ci0gKiAJCSBhbmQgUFBDIHZlcnNpb25zIGJ5IEdyZWcgVW5nZXJlciAoZ2VyZ0BzbmFwZ2Vhci5jb20pCisgKiBCbGFja2ZpbiBsb3ctbGV2ZWwgY2FjaGUgcm91dGluZXMKICAqCi0gKiBNb2RpZmllZDoKKyAqIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gKiBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCi0gKiBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0gKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpZm5kZWYgX0JMQUNLRklOX0NBQ0hFRkxVU0hfSApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9jZGVmX0xQQmxhY2tmaW4uaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vY2RlZl9MUEJsYWNrZmluLmgKaW5kZXggMzVmODQxYi4uODc3OGUwZiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9jZGVmX0xQQmxhY2tmaW4uaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2NkZWZfTFBCbGFja2Zpbi5oCkBAIC0xLDMwICsxLDggQEAKLSAvKgotICAqIEZpbGU6ICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWNvbW1vbi9jZGVmX0xQQmxhY2tmaW4uaAotICAqIEJhc2VkIG9uOgotICAqIEF1dGhvcjogICAgICB1bmtub3duCi0gICogICAgICAgICAgICAgIENPUFlSSUdIVCAyMDA1IEFuYWxvZyBEZXZpY2VzCi0gICogQ3JlYXRlZDogICAgID8KLSAgKiBEZXNjcmlwdGlvbjoKLSAgKgotICAqIE1vZGlmaWVkOgotICAqCi0gICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAgKgotICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gICogYW55IGxhdGVyIHZlcnNpb24uCi0gICoKLSAgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICAqCi0gICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCi0gICogSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotICAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCi0gICovCisvKgorICogQ29weXJpZ2h0IDIwMDUtMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgorICovCiAKICNpZm5kZWYgX0NERUZfTFBCTEFDS0ZJTl9ICiAjZGVmaW5lIF9DREVGX0xQQkxBQ0tGSU5fSApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9jaGVja3N1bS5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9jaGVja3N1bS5oCmluZGV4IDc5MzU4MWYuLmEyMzQxNWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vY2hlY2tzdW0uaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2NoZWNrc3VtLmgKQEAgLTEsOSArMSwxNCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgorICogICAgICAgICAgICAgICAgICAgICBha2Jhci5odXNzYWluQGxpbmVvLmNvbQorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KKyAqLworCiAjaWZuZGVmIF9CRklOX0NIRUNLU1VNX0gKICNkZWZpbmUgX0JGSU5fQ0hFQ0tTVU1fSAogCiAvKgotICogTU9ESUZJRUQgRk9SIEJGSU4gQXByaWwgMzAsIDIwMDEgYWtiYXIuaHVzc2FpbkBsaW5lby5jb20KLSAqCiAgKiBjb21wdXRlcyB0aGUgY2hlY2tzdW0gb2YgYSBtZW1vcnkgYmxvY2sgYXQgYnVmZiwgbGVuZ3RoIGxlbiwKICAqIGFuZCBhZGRzIGluICJzdW0iICgzMi1iaXQpCiAgKgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9jbG9ja3MuaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vY2xvY2tzLmgKaW5kZXggMDMzYmJhOS4uZjgwZGFkNSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9jbG9ja3MuaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2Nsb2Nrcy5oCkBAIC0xLDMwICsxLDkgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGluY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtY29tbW9uL2Nsb2Nrcy5oCi0gKiBCYXNlZCBvbjogICAgIGluY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1MzcvYmY1MzcuaAotICogQXV0aG9yOgkgUm9iaW4gR2V0eiA8cmdldHpAYmxhY2tmaW4udWNsaW51eC5vcmc+CisgKiBDb21tb24gQ2xvY2sgZGVmaW5pdGlvbnMgZm9yIHZhcmlvdXMga2VybmVsIGZpbGVzCiAgKgotICogQ3JlYXRlZDogICAgICAyNUp1bDA3Ci0gKiBEZXNjcmlwdGlvbjogIENvbW1vbiBDbG9jayBkZWZpbml0aW9ucyBmb3IgdmFyaW91cyBrZXJuZWwgZmlsZXMKKyAqIENvcHlyaWdodCAyMDA3LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA3IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAjaWZuZGVmIF9CRklOX0NMT0NLU19ICmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2NvbnRleHQuUyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vY29udGV4dC5TCmluZGV4IGY4YTY2NGYuLjVkZmZhZjUgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vY29udGV4dC5TCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vY29udGV4dC5TCkBAIC0xLDMwICsxLDcgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4va2VybmVsL2NvbnRleHQuUwotICogQmFzZWQgb246Ci0gKiBBdXRob3I6CisgKiBDb3B5cmlnaHQgMjAwNy0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246Ci0gKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDcgQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2NwbGIuaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vY3BsYi5oCmluZGV4IGQxOGQxNjguLmZkYTk2MjYgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vY3BsYi5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vY3BsYi5oCkBAIC0xLDMwICsxLDcgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGluY2x1ZGUvYXNtLWJsYWNrZmluL2NwbGIuaAotICogQmFzZWQgb246ICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTM3L2JmNTM3LmgKLSAqIEF1dGhvcjogICAgICAgUm9iaW4gR2V0eiA8cmdldHpAYmxhY2tmaW4udWNsaW51eC5vcmc+CisgKiBDb3B5cmlnaHQgMjAwNC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBDcmVhdGVkOiAgICAgIDIwMDAKLSAqIERlc2NyaXB0aW9uOiAgQ29tbW9uIENQTEIgZGVmaW5pdGlvbnMgZm9yIENQTEIgaW5pdAotICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA3IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAjaWZuZGVmIF9DUExCX0gKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vY3BsYmluaXQuaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vY3BsYmluaXQuaAppbmRleCAwNWIxNGE2Li5mMzE1YzgzIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2NwbGJpbml0LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9jcGxiaW5pdC5oCkBAIC0xLDMwICsxLDkgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGluY2x1ZGUvYXNtLWJsYWNrZmluL2NwbGJpbml0LmgKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogQ29tbW9uIENQTEIgZGVmaW5pdGlvbnMgZm9yIENQTEIgaW5pdAogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjoKKyAqIENvcHlyaWdodCAyMDA2LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA2IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAjaWZuZGVmIF9fQVNNX0NQTEJJTklUX0hfXwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9jcHUuaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vY3B1LmgKaW5kZXggZmFkZmE4Mi4uYjE5MWRjNiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9jcHUuaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2NwdS5oCkBAIC0xLDIzICsxLDggQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vY3B1LmguCi0gKiBBdXRob3I6ICAgICAgIFBoaWxpcHBlIEdlcnVtIDxycG1AeGVub21haS5vcmc+CisgKiBDb3B5cmlnaHQgMjAwNy0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgIFBoaWxpcHBlIEdlcnVtIDxycG1AeGVub21haS5vcmc+CiAgKgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNyBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpZm5kZWYgX19BU01fQkxBQ0tGSU5fQ1BVX0gKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vZGVmX0xQQmxhY2tmaW4uaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vZGVmX0xQQmxhY2tmaW4uaAppbmRleCA2MzQxZWViLi4yNTkwNjQ2IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2RlZl9MUEJsYWNrZmluLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9kZWZfTFBCbGFja2Zpbi5oCkBAIC0xLDMyICsxLDEwIEBACi0gLyoKLSAgKiBGaWxlOiAgICAgICAgaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1jb21tb24vZGVmX0xQQmxhY2tmaW4uaAotICAqIEJhc2VkIG9uOgotICAqIEF1dGhvcjogICAgICB1bmtub3duCi0gICogICAgICAgICAgICAgIENPUFlSSUdIVCAyMDA1IEFuYWxvZyBEZXZpY2VzCi0gICogQ3JlYXRlZDogICAgID8KLSAgKiBEZXNjcmlwdGlvbjoKLSAgKgotICAqIE1vZGlmaWVkOgotICAqCi0gICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAgKgotICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gICogYW55IGxhdGVyIHZlcnNpb24uCi0gICoKLSAgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICAqCi0gICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCi0gICogSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotICAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCi0gICovCi0KLS8qIExQIEJsYWNrZmluIENPUkUgUkVHSVNURVIgQklUICYgQUREUkVTUyBERUZJTklUSU9OUyBGT1IgQURTUC1CRjUzMi8zMyAqLworLyoKKyAqIEJsYWNrZmluIGNvcmUgcmVnaXN0ZXIgYml0ICYgYWRkcmVzcyBkZWZpbml0aW9ucworICoKKyAqIENvcHlyaWdodCAyMDA1LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBREkgQlNEIGxpY2Vuc2Ugb3IgR1BMLTIgKG9yIGxhdGVyKS4KKyAqLwogCiAjaWZuZGVmIF9ERUZfTFBCTEFDS0ZJTl9ICiAjZGVmaW5lIF9ERUZfTFBCTEFDS0ZJTl9ICmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmgKaW5kZXggZWQ2YjFmMy4uN2EyM2Q4MiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaApAQCAtMSwzICsxLDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCisgKi8KKwogI2lmbmRlZiBfQkxBQ0tGSU5fRE1BX01BUFBJTkdfSAogI2RlZmluZSBfQkxBQ0tGSU5fRE1BX01BUFBJTkdfSAogCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2RwbWMuaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vZHBtYy5oCmluZGV4IDk2ZTgyMDguLjkyNWU2NmMgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vZHBtYy5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vZHBtYy5oCkBAIC0xLDkgKzEsMTEgQEAKIC8qCi0gKiBpbmNsdWRlL2FzbS1ibGFja2Zpbi9kcG1jLmggLSAgTWlzY2VsbGFuZW91cyBJT0NUTCBjb21tYW5kcyBmb3IgRHluYW1pYyBQb3dlcgotICogICAJCQkgCU1hbmFnZW1lbnQgQ29udHJvbGxlciBEcml2ZXIuCisgKiBNaXNjZWxsYW5lb3VzIElPQ1RMIGNvbW1hbmRzIGZvciBEeW5hbWljIFBvd2VyIE1hbmFnZW1lbnQgQ29udHJvbGxlciBEcml2ZXIKKyAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwOCBBbmFsb2cgRGV2aWNlIEluYy4KICAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIKICAqLworCiAjaWZuZGVmIF9CTEFDS0ZJTl9EUE1DX0hfCiAjZGVmaW5lIF9CTEFDS0ZJTl9EUE1DX0hfCiAKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vZWFybHlfcHJpbnRrLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2Vhcmx5X3ByaW50ay5oCmluZGV4IDUzYTc2MmIuLjY4YTkxMGQgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vZWFybHlfcHJpbnRrLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9lYXJseV9wcmludGsuaApAQCAtMSwyNyArMSwxMSBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgaW5jbHVkZS9hc20tYmxhY2tmaW4vZWFybHlfcHJpbnRrLmgKLSAqIEF1dGhvcjogICAgICAgUm9iaW4gR2V0eiA8cmdldHpAYmxhY2tmaW4udWNsaW51eC5vcmcKKyAqIGZ1bmN0aW9uIHByb3RvdHB5ZXMgZm9yIGVhcmx5IHByaW50awogICoKLSAqIENyZWF0ZWQ6ICAgICAgMTRBdWcyMDA3Ci0gKiBEZXNjcmlwdGlvbjogIGZ1bmN0aW9uIHByb3RvdHB5ZXMgZm9yIGVhcmx5IHByaW50aworICogQ29weXJpZ2h0IDIwMDctMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDcgQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKLQogI2lmbmRlZiBfX0FTTV9FQVJMWV9QUklOVEtfSF9fCiAjZGVmaW5lIF9fQVNNX0VBUkxZX1BSSU5US19IX18KIApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9lbGYuaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vZWxmLmgKaW5kZXggYzgyM2U4ZS4uOGUwNzY0YyAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9lbGYuaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2VsZi5oCkBAIC0xLDQgKzEsOCBAQAotLyogQ2hhbmdlcyBtYWRlIGJ5ICBMRyBTb2Z0IE9jdCAyMDA0Ki8KKy8qCisgKiBDb3B5cmlnaHQgMjAwNC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCisgKi8KIAogI2lmbmRlZiBfX0FTTUJGSU5fRUxGX0gKICNkZWZpbmUgX19BU01CRklOX0VMRl9ICmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2VudHJ5LmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2VudHJ5LmgKaW5kZXggNTViODA4Zi4uYTY4ODZmNiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9lbnRyeS5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vZW50cnkuaApAQCAtMSwzICsxLDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCisgKi8KKwogI2lmbmRlZiBfX0JGSU5fRU5UUllfSAogI2RlZmluZSBfX0JGSU5fRU5UUllfSAogCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2ZjbnRsLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2ZjbnRsLmgKaW5kZXggOWM0MDM3MS4uODcyN2IyYiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9mY250bC5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vZmNudGwuaApAQCAtMSwzICsxLDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNC0yMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCisgKi8KKwogI2lmbmRlZiBfQkZJTl9GQ05UTF9ICiAjZGVmaW5lIF9CRklOX0ZDTlRMX0gKIApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9maXhlZF9jb2RlLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2ZpeGVkX2NvZGUuaAppbmRleCAzMmM0ZDQ5Li43M2ZlNTNlIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2ZpeGVkX2NvZGUuaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2ZpeGVkX2NvZGUuaApAQCAtMSw1ICsxLDExIEBACi0vKiBUaGlzIGZpbGUgZGVmaW5lcyB0aGUgZml4ZWQgYWRkcmVzc2VzIHdoZXJlIHVzZXJzcGFjZSBwcm9ncmFtcyBjYW4gZmluZAotICAgYXRvbWljIGNvZGUgc2VxdWVuY2VzLiAgKi8KKy8qCisgKiBUaGlzIGZpbGUgZGVmaW5lcyB0aGUgZml4ZWQgYWRkcmVzc2VzIHdoZXJlIHVzZXJzcGFjZSBwcm9ncmFtcworICogY2FuIGZpbmQgYXRvbWljIGNvZGUgc2VxdWVuY2VzLgorICoKKyAqIENvcHlyaWdodCAyMDA3LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KKyAqLwogCiAjaWZuZGVmIF9fQkZJTl9BU01fRklYRURfQ09ERV9IX18KICNkZWZpbmUgX19CRklOX0FTTV9GSVhFRF9DT0RFX0hfXwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9mbGF0LmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2ZsYXQuaAppbmRleCA3MzNhMTc4Li5jMTMxNGM1IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2ZsYXQuaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2ZsYXQuaApAQCAtMSw4ICsxLDkgQEAKIC8qCi0gKiBpbmNsdWRlL2FzbS1ibGFja2Zpbi9mbGF0LmggLS0gdUNsaW51eCBmbGF0LWZvcm1hdCBleGVjdXRhYmxlcworICogdUNsaW51eCBmbGF0LWZvcm1hdCBleGVjdXRhYmxlcwogICoKLSAqIENvcHlyaWdodCAoQykgMjAwMywKKyAqIENvcHlyaWdodCAyMDAzLTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMgogICovCiAKICNpZm5kZWYgX19CTEFDS0ZJTl9GTEFUX0hfXwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9ncGlvLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2dwaW8uaAppbmRleCBmZTEzOTYxLi41YjQ0ZDA1IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2dwaW8uaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2dwaW8uaApAQCAtMSwzMCArMSw3IEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL2tlcm5lbC9iZmluX2dwaW8uaAotICogQmFzZWQgb246Ci0gKiBBdXRob3I6CSBNaWNoYWVsIEhlbm5lcmljaCAoaGVubmVyaWNoQGJsYWNrZmluLnVjbGludXgub3JnKQorICogQ29weXJpZ2h0IDIwMDYtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOgotICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAjaWZuZGVmIF9fQVJDSF9CTEFDS0ZJTl9HUElPX0hfXwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9oYXJkaXJxLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2hhcmRpcnEuaAppbmRleCAwYjc4Yjg3Li5jMDc4ZGQ3IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2hhcmRpcnEuaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2hhcmRpcnEuaApAQCAtMSwzICsxLDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCisgKi8KKwogI2lmbmRlZiBfX0JGSU5fSEFSRElSUV9ICiAjZGVmaW5lIF9fQkZJTl9IQVJESVJRX0gKIApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9pby5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9pby5oCmluZGV4IDM3MDUzZWMuLmQxZjUwMjkgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vaW8uaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2lvLmgKQEAgLTEsMyArMSw5IEBACisvKgorICogQ29weXJpZ2h0IDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgorICovCisKICNpZm5kZWYgX0JGSU5fSU9fSAogI2RlZmluZSBfQkZJTl9JT19ICiAKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vaXJxLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2lycS5oCmluZGV4IDQyYTE1ZjUuLmU3YzA2MjMgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vaXJxLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9pcnEuaApAQCAtMSwxNyArMSwxMCBAQAogLyoKLSAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQotICogZm9yIG1vcmUgZGV0YWlscy4KKyAqIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgorICogICAgICAgICAgICAgICAgMjAwMyBIdVRhbworICogICAgICAgICAgICAgICAgMjAwMiBBcmN0dXJ1cyBOZXR3b3JrcyBJbmMuICh3d3cuYXJjdHVydXNuZXR3b3Jrcy5jb20KKyAqICAgICAgICAgICAgICAgICAgICAgICBUZWQgTWEgPG1hdGVkQHN5bXBhdGljby5jYT4KICAqCi0gKiBDaGFuZ2VkIGJ5IEh1VGFvIEFwcjE4LCAyMDAzCi0gKgotICogQ29weXJpZ2h0IHdhcyBtaXNzaW5nIHdoZW4gSSBnb3QgdGhlIGNvZGUgc28gdG9vayBmcm9tIE1JUFMgYXJjaCAuLi5NYVRlZC0tLQotICogQ29weXJpZ2h0IChDKSAxOTk0IGJ5IFdhbGRvcmYgR01CSCwgd3JpdHRlbiBieSBSYWxmIEJhZWNobGUKLSAqIENvcHlyaWdodCAoQykgMTk5NSwgOTYsIDk3LCA5OCwgOTksIDIwMDAsIDIwMDEgYnkgUmFsZiBCYWVjaGxlCi0gKgotICogQWRhcHRlZCBmb3IgQmxhY2tGaW4gKEFESSkgYnkgVGVkIE1hIDxtYXRlZEBzeW1wYXRpY28uY2E+Ci0gKiBDb3B5cmlnaHQgKGMpIDIwMDIgQXJjdHVydXMgTmV0d29ya3MgSW5jLiAod3d3LmFyY3R1cnVzbmV0d29ya3MuY29tKQotICogQ29weXJpZ2h0IChjKSAyMDAyIExpbmVvLCBJbmMuIDxtYXR0d0BsaW5lby5jb20+CisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIKICAqLwogCiAjaWZuZGVmIF9CRklOX0lSUV9IXwpAQCAtMTksNiArMTIsOCBAQAogCiAjaW5jbHVkZSA8bGludXgvaXJxZmxhZ3MuaD4KIAorI2luY2x1ZGUgPG1hY2gvYW5vbWFseS5oPgorCiAvKiBTWVNfSVJRUyBhbmQgTlJfSVJRUyBhcmUgZGVmaW5lZCBpbiA8bWFjaC1iZjV4eC9pcnEuaD4gKi8KICNpbmNsdWRlIDxtYWNoL2lycS5oPgogCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2lycV9oYW5kbGVyLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2lycV9oYW5kbGVyLmgKaW5kZXggN2Q5ZTJkMy4uN2ZiZTQyMyAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9pcnFfaGFuZGxlci5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vaXJxX2hhbmRsZXIuaApAQCAtMSwzICsxLDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNy0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCisgKi8KKwogI2lmbmRlZiBfSVJRX0hBTkRMRVJfSAogI2RlZmluZSBfSVJRX0hBTkRMRVJfSAogCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2wxbGF5b3V0LmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2wxbGF5b3V0LmgKaW5kZXggNzlkYmVmYS4uYzg3ZTY4NiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9sMWxheW91dC5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vbDFsYXlvdXQuaApAQCAtMSw2ICsxLDkgQEAKIC8qCi0gKiBsMWxheW91dC5oCiAgKiBEZWZpbmVzIGEgbGF5b3V0IG9mIEwxIHNjcmF0Y2hwYWQgbWVtb3J5IHRoYXQgdXNlcnNwYWNlIGNhbiByZWx5IG9uLgorICoKKyAqIENvcHlyaWdodCAyMDA2LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAjaWZuZGVmIF9MMUxBWU9VVF9IXwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9saW5rYWdlLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2xpbmthZ2UuaAppbmRleCA1YTgyMmJiLi5mN2Q2ZDQ3IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2xpbmthZ2UuaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2xpbmthZ2UuaApAQCAtMSwzICsxLDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCisgKi8KKwogI2lmbmRlZiBfX0FTTV9MSU5LQUdFX0gKICNkZWZpbmUgX19BU01fTElOS0FHRV9ICiAKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vbW11LmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL21tdS5oCmluZGV4IGRiZmQ2ODYuLjI2ZjZiNzAgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vbW11LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9tbXUuaApAQCAtMSw4ICsxLDEzIEBACisvKgorICogQ29weXJpZ2h0IDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKiAgICAgICAgICAgICAgICAyMDAyIERhdmlkIE1jQ3VsbG91Z2ggPGRhdmlkbUBzbmFwZ2Vhci5jb20+CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yLgorICovCisKICNpZm5kZWYgX19NTVVfSAogI2RlZmluZSBfX01NVV9ICiAKLS8qIENvcHlyaWdodCAoQykgMjAwMiwgRGF2aWQgTWNDdWxsb3VnaCA8ZGF2aWRtQHNuYXBnZWFyLmNvbT4gKi8KLQogc3RydWN0IHNyYW1fbGlzdF9zdHJ1Y3QgewogCXN0cnVjdCBzcmFtX2xpc3Rfc3RydWN0ICpuZXh0OwogCXZvaWQgKmFkZHI7CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmgKaW5kZXggMDQwNDEwYi4uNGEzYmUzNyAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9tbXVfY29udGV4dC5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaApAQCAtMSwzMCArMSw3IEBACiAvKgotICogRmlsZTogICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tbXVfY29udGV4dC5oCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjoKLSAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwNiBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2lmbmRlZiBfX0JMQUNLRklOX01NVV9DT05URVhUX0hfXwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9tb2R1bGUuaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vbW9kdWxlLmgKaW5kZXggZTMxMjhkZi4uOWMxY2ZmZiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9tb2R1bGUuaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL21vZHVsZS5oCkBAIC0xLDMgKzEsOSBAQAorLyoKK8KgKiBDb3B5cmlnaHQgMjAwNC0yMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KK8KgKgorwqAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KK8KgKi8KKwogI2lmbmRlZiBfQVNNX0JGSU5fTU9EVUxFX0gKICNkZWZpbmUgX0FTTV9CRklOX01PRFVMRV9ICiAKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vbXV0ZXguaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vbXV0ZXguaAppbmRleCA1Y2M2NDFjLi5mNzI2ZTNhIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL211dGV4LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9tdXRleC5oCkBAIC00LDYgKzQsMTAgQEAKICAqIFRPRE86IGltcGxlbWVudCBvcHRpbWl6ZWQgcHJpbWl0aXZlcyBpbnN0ZWFkLCBvciBsZWF2ZSB0aGUgZ2VuZXJpYwogICogaW1wbGVtZW50YXRpb24gaW4gcGxhY2UsIG9yIHBpY2sgdGhlIGF0b21pY194Y2hnKCkgYmFzZWQgZ2VuZXJpYwogICogaW1wbGVtZW50YXRpb24uIChzZWUgYXNtLWdlbmVyaWMvbXV0ZXgteGNoZy5oIGZvciBkZXRhaWxzKQorICoKKyAqIENvcHlyaWdodCAyMDA2LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAjaWZuZGVmIF9BU01fTVVURVhfSApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9uYW5kLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL25hbmQuaAppbmRleCBhZmJhYWZhLi4zYWU4YjU2IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL25hbmQuaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL25hbmQuaApAQCAtMSwxMyArMSw5IEBACi0vKiBsaW51eC9pbmNsdWRlL2FzbS1ibGFja2Zpbi9uYW5kLmgKLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgQW5hbG9nIERldmljZXMsIEluYy4KLSAqCUJyeWFuIFd1IDxicnlhbi53dUBhbmFsb2cuY29tPgotICoKKy8qCiAgKiBCRjVYWCAtIE5BTkQgZmxhc2ggY29udHJvbGxlciBwbGF0ZnJvbV9kZXZpY2UgaW5mbwogICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKiBDb3B5cmlnaHQgMjAwNy0yMDA4IEFuYWxvZyBEZXZpY2VzLCBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yCiAgKi8KIAogLyogc3RydWN0IGJmNXh4X25hbmRfcGxhdGZvcm0KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vcGFnZS5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9wYWdlLmgKaW5kZXggMjlkY2Y3NS4uOTQ0YTA3YyAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9wYWdlLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9wYWdlLmgKQEAgLTEsMyArMSw5IEBACisvKgorwqAqIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgorwqAqCivCoCogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgorwqAqLworCiAjaWZuZGVmIF9CTEFDS0ZJTl9QQUdFX0gKICNkZWZpbmUgX0JMQUNLRklOX1BBR0VfSAogCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3BhZ2Vfb2Zmc2V0LmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3BhZ2Vfb2Zmc2V0LmgKaW5kZXggY2JhZmYyNC4uZDA2YTg5YjggMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vcGFnZV9vZmZzZXQuaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3BhZ2Vfb2Zmc2V0LmgKQEAgLTEsNSArMSwxMCBAQAotCi0vKiBUaGlzIGhhbmRsZXMgdGhlIG1lbW9yeSBtYXAuLiAqLworLyoKKyAqIFRoaXMgaGFuZGxlcyB0aGUgbWVtb3J5IG1hcAorICoKKyAqIENvcHlyaWdodCAyMDA0LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KKyAqLwogCiAjaWZkZWYgQ09ORklHX0JMQUNLRklOCiAjZGVmaW5lIFBBR0VfT0ZGU0VUX1JBVwkJMHgwMDAwMDAwMApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9wZGEuaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vcGRhLmgKaW5kZXggYTZmOTU2OS4uZDQ5YmIyNiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9wZGEuaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3BkYS5oCkBAIC0xLDIzICsxLDggQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vcGRhLmgKLSAqIEF1dGhvcjogICAgICAgUGhpbGlwcGUgR2VydW0gPHJwbUB4ZW5vbWFpLm9yZz4KKyAqIENvcHlyaWdodCAyMDA3LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgorICogICAgICAgICAgICAgICAgICAgICAgICAgUGhpbGlwcGUgR2VydW0gPHJwbUB4ZW5vbWFpLm9yZz4KICAqCi0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA3IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2lmbmRlZiBfQVNNX0JMQUNLRklOX1BEQV9ICmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vcGd0YWJsZS5oCmluZGV4IDc4M2M4ZjcuLjgyMWM2OTkgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vcGd0YWJsZS5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vcGd0YWJsZS5oCkBAIC0xLDMgKzEsOSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KKyAqLworCiAjaWZuZGVmIF9CTEFDS0ZJTl9QR1RBQkxFX0gKICNkZWZpbmUgX0JMQUNLRklOX1BHVEFCTEVfSAogCkBAIC05Miw2ICs5OCwxMiBAQAogI2RlZmluZQlWTUFMTE9DX1NUQVJUCTAKICNkZWZpbmUJVk1BTExPQ19FTkQJMHhmZmZmZmZmZgogCisvKiBwcm92aWRlIGEgc3BlY2lhbCBnZXRfdW5tYXBwZWRfYXJlYSBmb3IgZnJhbWVidWZmZXIgbW1hcHMgb2Ygbm9tbXUgKi8KK2V4dGVybiB1bnNpZ25lZCBsb25nIGdldF9mYl91bm1hcHBlZF9hcmVhKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nLAorCQkJCQkgIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsCisJCQkJCSAgdW5zaWduZWQgbG9uZyk7CisjZGVmaW5lIEhBVkVfQVJDSF9GQl9VTk1BUFBFRF9BUkVBCisKICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9wZ3RhYmxlLmg+CiAKICNlbmRpZgkJCQkvKiBfQkxBQ0tGSU5fUEdUQUJMRV9IICovCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3BvbGwuaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vcG9sbC5oCmluZGV4IGEwNTU2NjcuLjA3MmQ4OTYgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vcG9sbC5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vcG9sbC5oCkBAIC0xLDMgKzEsMTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCisgKgorICovCisKICNpZm5kZWYgX19CRklOX1BPTExfSAogI2RlZmluZSBfX0JGSU5fUE9MTF9ICiAKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vcG9ydG11eC5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9wb3J0bXV4LmgKaW5kZXggODhlYjVjMC4uZWRkOGVmMyAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9wb3J0bXV4LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9wb3J0bXV4LmgKQEAgLTEsNiArMSw5IEBACiAvKgotICogQ29tbW9uIGhlYWRlciBmaWxlIGZvciBibGFja2ZpbiBmYW1pbHkgb2YgcHJvY2Vzc29ycy4KKyAqIENvbW1vbiBoZWFkZXIgZmlsZSBmb3IgQmxhY2tmaW4gZmFtaWx5IG9mIHByb2Nlc3NvcnMKICAqCivCoCogQ29weXJpZ2h0IDIwMDctMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCivCoCoKK8KgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2lmbmRlZiBfUE9SVE1VWF9IXwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9wb3NpeF90eXBlcy5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9wb3NpeF90eXBlcy5oCmluZGV4IDgwYzlkNjQuLjQxYmMxODcgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vcG9zaXhfdHlwZXMuaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3Bvc2l4X3R5cGVzLmgKQEAgLTEsMyArMSw5IEBACisvKgorICogQ29weXJpZ2h0IDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgorICovCisKICNpZm5kZWYgX19BUkNIX0JGSU5fUE9TSVhfVFlQRVNfSAogI2RlZmluZSBfX0FSQ0hfQkZJTl9QT1NJWF9UWVBFU19ICiAKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vcHJvY2Vzc29yLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oCmluZGV4IGEzNmFkOGQuLmFlYTg4MDIgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaApAQCAtMSwzICsxLDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCisgKi8KKwogI2lmbmRlZiBfX0FTTV9CRklOX1BST0NFU1NPUl9ICiAjZGVmaW5lIF9fQVNNX0JGSU5fUFJPQ0VTU09SX0gKIApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9wdHJhY2UuaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vcHRyYWNlLmgKaW5kZXggZTNmMDg2ZC4uMjcyOTBjOSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9wdHJhY2UuaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3B0cmFjZS5oCkBAIC0xLDMgKzEsOSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA0LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KKyAqLworCiAjaWZuZGVmIF9CRklOX1BUUkFDRV9ICiAjZGVmaW5lIF9CRklOX1BUUkFDRV9ICiAKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vc2VjdGlvbnMuaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vc2VjdGlvbnMuaAppbmRleCBhZTRkYWUxLi4xZjUzODFmIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3NlY3Rpb25zLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9zZWN0aW9ucy5oCkBAIC0xLDMgKzEsOSBAQAorLyoKK8KgKiBDb3B5cmlnaHQgMjAwNC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KK8KgKgorwqAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KK8KgKi8KKwogI2lmbmRlZiBfQkxBQ0tGSU5fU0VDVElPTlNfSAogI2RlZmluZSBfQkxBQ0tGSU5fU0VDVElPTlNfSAogCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3NlZ21lbnQuaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vc2VnbWVudC5oCmluZGV4IDAyY2ZkMDkuLmY4ZTE5ODQgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vc2VnbWVudC5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vc2VnbWVudC5oCkBAIC0xLDMgKzEsOSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA0LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KKyAqLworCiAjaWZuZGVmIF9CRklOX1NFR01FTlRfSAogI2RlZmluZSBfQkZJTl9TRUdNRU5UX0gKIApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9zaWdjb250ZXh0LmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3NpZ2NvbnRleHQuaAppbmRleCBjZTAwYjAzLi5jZTQwODFhIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3NpZ2NvbnRleHQuaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3NpZ2NvbnRleHQuaApAQCAtMSwzICsxLDkgQEAKKy8qCivCoCogQ29weXJpZ2h0IDIwMDQtMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCivCoCoKK8KgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCivCoCovCisKICNpZm5kZWYgX0FTTV9CTEFDS0ZJTl9TSUdDT05URVhUX0gKICNkZWZpbmUgX0FTTV9CTEFDS0ZJTl9TSUdDT05URVhUX0gKIApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9zaWdpbmZvLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3NpZ2luZm8uaAppbmRleCBlY2E0NTY1Li4zZTgxMzA2IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3NpZ2luZm8uaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3NpZ2luZm8uaApAQCAtMSwzICsxLDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNC0yMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCisgKi8KKwogI2lmbmRlZiBfQkZJTl9TSUdJTkZPX0gKICNkZWZpbmUgX0JGSU5fU0lHSU5GT19ICiAKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vc21wLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3NtcC5oCmluZGV4IDExOGRlZWUuLjZhMGZlOTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vc21wLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9zbXAuaApAQCAtMSwyMyArMSw4IEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3NtcC5oCi0gKiBBdXRob3I6ICAgICAgIFBoaWxpcHBlIEdlcnVtIDxycG1AeGVub21haS5vcmc+CisgKiBDb3B5cmlnaHQgMjAwNy0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBQaGlsaXBwZSBHZXJ1bSA8cnBtQHhlbm9tYWkub3JnPgogICoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDcgQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAjaWZuZGVmIF9fQVNNX0JMQUNLRklOX1NNUF9ICmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3NwaW5sb2NrLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3NwaW5sb2NrLmgKaW5kZXggZDZmZjRiNS4uYjBjN2YwZSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9zcGlubG9jay5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vc3BpbmxvY2suaApAQCAtMSwzICsxLDkgQEAKKy8qCivCoCogQ29weXJpZ2h0IDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCivCoCoKK8KgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCivCoCovCisKICNpZm5kZWYgX19CRklOX1NQSU5MT0NLX0gKICNkZWZpbmUgX19CRklOX1NQSU5MT0NLX0gKIApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9zcGlubG9ja190eXBlcy5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9zcGlubG9ja190eXBlcy5oCmluZGV4IGIxZTNjNGMuLmJlNzU3NjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vc3BpbmxvY2tfdHlwZXMuaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3NwaW5sb2NrX3R5cGVzLmgKQEAgLTEsMyArMSw5IEBACisvKgorICogQ29weXJpZ2h0IDIwMDggQW5hbG9nIERldmljZXMgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KKyAqLworCiAjaWZuZGVmIF9fQVNNX1NQSU5MT0NLX1RZUEVTX0gKICNkZWZpbmUgX19BU01fU1BJTkxPQ0tfVFlQRVNfSAogCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3N0YXQuaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vc3RhdC5oCmluZGV4IGQyYjZmMTEuLjJlMjc2NjUgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vc3RhdC5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vc3RhdC5oCkBAIC0xLDMgKzEsOSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA0LTIwMDYgQW5hbG9nIERldmljZXMgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMi4KKyAqLworCiAjaWZuZGVmIF9CRklOX1NUQVRfSAogI2RlZmluZSBfQkZJTl9TVEFUX0gKIApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9zdHJpbmcuaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vc3RyaW5nLmgKaW5kZXggMzIxZjRkOS4uZDdmMGNjYiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9zdHJpbmcuaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3N0cmluZy5oCkBAIC0xLDMgKzEsOSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA0LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KKyAqLworCiAjaWZuZGVmIF9CTEFDS0ZJTl9TVFJJTkdfSF8KICNkZWZpbmUgX0JMQUNLRklOX1NUUklOR19IXwogCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3N3YWIuaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vc3dhYi5oCmluZGV4IGQ0NDIxMTMuLjg5ZGU2NTAgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vc3dhYi5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vc3dhYi5oCkBAIC0xLDMgKzEsOSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCisgKi8KKwogI2lmbmRlZiBfQkxBQ0tGSU5fU1dBQl9ICiAjZGVmaW5lIF9CTEFDS0ZJTl9TV0FCX0gKIApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9zeXN0ZW0uaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vc3lzdGVtLmgKaW5kZXggODVlOGYxNi4uZGRlMTliMSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9zeXN0ZW0uaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3N5c3RlbS5oCkBAIC0xLDM0ICsxLDggQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgaW5jbHVkZS9hc20vc3lzdGVtLmgKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOiAgICAgIFRvbnkgS291ICh0b255a29AbGluZW8uY2EpCi0gKiAgICAgICAgICAgICAgQ29weXJpZ2h0IChjKSAyMDAyIEFyY3R1cnVzIE5ldHdvcmtzIEluYy4KLSAqICAgICAgICAgICAgICAgICAgICAod3d3LmFyY3R1cnVzbmV0d29ya3MuY29tKQotICogICAgICAgICAgICAgIENvcHlyaWdodCAoYykgMjAwMyBNZXRyb3dlcmtzICh3d3cubWV0cm93ZXJrcy5jb20pCi0gKiAgICAgICAgICAgICAgQ29weXJpZ2h0IChjKSAyMDA0IEFuYWxvZyBEZXZpY2UgSW5jLgotICogQ3JlYXRlZDogICAgIDI1SmFuMjAwMSAtIFRvbnkgS291Ci0gKiBEZXNjcmlwdGlvbjogc3lzdGVtLmggaW5jbHVkZSBmaWxlCisgKiBDb3B5cmlnaHQgMjAwNC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqICAgICAgICAgICAgICAgVG9ueSBLb3UgKHRvbnlrb0BsaW5lby5jYSkKICAqCi0gKiBNb2RpZmllZDogICAgIDIyU2VwMjAwNiAtIFJvYmluIEdldHoKLSAqICAgICAgICAgICAgICAgIC0gbW92ZSBpbmNsdWRlIGJsYWNrZmluLmggZG93biwgc28gSSBjYW4gZ2V0IGFjY2VzcyB0bwotICogICAgICAgICAgICAgICAgICAgaXJxIGZ1bmN0aW9ucyBpbiBvdGhlciBpbmNsdWRlIGZpbGVzLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gKiBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCi0gKiBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0gKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyCiAgKi8KIAogI2lmbmRlZiBfQkxBQ0tGSU5fU1lTVEVNX0gKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaAppbmRleCAyYmJmZGQ5Li5hZmIzYTg2IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCkBAIC0xLDI3ICsxLDcgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGluY2x1ZGUvYXNtLWJsYWNrZmluL3RocmVhZF9pbmZvLmgKLSAqIEJhc2VkIG9uOiAgICAgaW5jbHVkZS9hc20tbTY4a25vbW11L3RocmVhZF9pbmZvLmgKLSAqIEF1dGhvcjogICAgICAgTEcgU29mdCBJbmRpYQotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNSBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKiBDcmVhdGVkOiAgICAgIFR1ZSBTZXAgMjEgMjAwNAotICogRGVzY3JpcHRpb246ICBCbGFja2ZpbiBsb3ctbGV2ZWwgdGhyZWFkIGluZm9ybWF0aW9uCi0gKiBNb2RpZmllZDoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCisgKiBDb3B5cmlnaHQgMjAwNC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAqIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KLSAqIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKLSAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2lmbmRlZiBfQVNNX1RIUkVBRF9JTkZPX0gKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vdGxiLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3RsYi5oCmluZGV4IDg5YTEyZWUuLmE3NGFlMDggMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vdGxiLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS90bGIuaApAQCAtMSwzICsxLDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNC0yMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCisgKi8KKwogI2lmbmRlZiBfQkxBQ0tGSU5fVExCX0gKICNkZWZpbmUgX0JMQUNLRklOX1RMQl9ICiAKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vdHJhY2UuaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vdHJhY2UuaAppbmRleCAzMTJiNTk2Li42MDlhZDNjIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3RyYWNlLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS90cmFjZS5oCkBAIC0xLDYgKzEsOSBAQAogLyoKLSAqIENvbW1vbiBoZWFkZXIgZmlsZSBmb3IgYmxhY2tmaW4gZmFtaWx5IG9mIHByb2Nlc3NvcnMuCisgKiBoZWFkZXIgZmlsZSBmb3IgaGFyZHdhcmUgdHJhY2UgZnVuY3Rpb25zCiAgKgorICogQ29weXJpZ2h0IDIwMDctMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpZm5kZWYgX0JMQUNLRklOX1RSQUNFXwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS90cmFwcy5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS90cmFwcy5oCmluZGV4IDNjZGM0NTQuLjlmZTBkYTYgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vdHJhcHMuaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3RyYXBzLmgKQEAgLTEsMTMgKzEsMTAgQEAKIC8qCi0gKiAgbGludXgvaW5jbHVkZS9hc20vdHJhcHMuaAorICogIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgorICogICAgICAgICAgICAgICAgIDIwMDEgTGluZW8sIEluYworICogICAgICAgICAgICAgICAgICAgICAgICBUb255IEtvdQorICogICAgICAgICAgICAgICAgIDE5OTMgSGFtaXNoIE1hY2RvbmFsZAogICoKLSAqICBDb3B5cmlnaHQgKEMpIDE5OTMgICAgICAgIEhhbWlzaCBNYWNkb25hbGQKLSAqCi0gKiAgTGluZW8sIEluYyAgICBKdWwgMjAwMSAgICBUb255IEtvdQotICoKLSAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQotICogZm9yIG1vcmUgZGV0YWlscy4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMgogICovCiAKICNpZm5kZWYgX0JGSU5fVFJBUFNfSApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS91YWNjZXNzLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3VhY2Nlc3MuaAppbmRleCAyZjQ2OWExLi5jMDNiODUzIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3VhY2Nlc3MuaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3VhY2Nlc3MuaApAQCAtMSw0ICsxLDcgQEAKLS8qIENoYW5nZXMgbWFkZSBieSBMaW5lbyBJbmMuICAgIE1heSAyMDAxCisvKgorICogQ29weXJpZ2h0IDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICoKICAqIEJhc2VkIG9uOiBpbmNsdWRlL2FzbS1tNjhrbm9tbXUvdWFjY2Vzcy5oCiAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vdW5pc3RkLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3VuaXN0ZC5oCmluZGV4IDAyYjE1MjkuLjc3OWJlMDIgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vdW5pc3RkLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS91bmlzdGQuaApAQCAtMSwzICsxLDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCisgKi8KKwogI2lmbmRlZiBfX0FTTV9CRklOX1VOSVNURF9ICiAjZGVmaW5lIF9fQVNNX0JGSU5fVU5JU1REX0gKIC8qCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9hc20tb2Zmc2V0cy5jIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvYXNtLW9mZnNldHMuYwppbmRleCBmMDVkMWI5Li5iZDMyYzA5IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9hc20tb2Zmc2V0cy5jCisrKyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL2FzbS1vZmZzZXRzLmMKQEAgLTEsMzAgKzEsOSBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9rZXJuZWwvYXNtLW9mZnNldHMuYwotICogQmFzZWQgb246Ci0gKiBBdXRob3I6CisgKiBnZW5lcmF0ZSBkZWZpbml0aW9ucyBuZWVkZWQgYnkgYXNzZW1ibHkgbGFuZ3VhZ2UgbW9kdWxlcwogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjogIGdlbmVyYXRlIGRlZmluaXRpb25zIG5lZWRlZCBieSBhc3NlbWJseSBsYW5ndWFnZSBtb2R1bGVzLgorICogQ29weXJpZ2h0IDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDYgQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvYmZpbl9kbWFfNXh4LmMgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC9iZmluX2RtYV81eHguYwppbmRleCAzODQ4NjhkLi4xZjE3MDIxIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9iZmluX2RtYV81eHguYworKysgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC9iZmluX2RtYV81eHguYwpAQCAtMiw2ICsyLDcgQEAKICAqIGJmaW5fZG1hXzV4eC5jIC0gQmxhY2tmaW4gRE1BIGltcGxlbWVudGF0aW9uCiAgKgogICogQ29weXJpZ2h0IDIwMDQtMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKgogICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4va2VybmVsL2JmaW5fZ3Bpby5jIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvYmZpbl9ncGlvLmMKaW5kZXggZmM0NjgxYy4uMjI3MDVlZSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvYmZpbl9ncGlvLmMKKysrIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvYmZpbl9ncGlvLmMKQEAgLTEsMzAgKzEsOSBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9rZXJuZWwvYmZpbl9ncGlvLmMKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOiAgICAgICBNaWNoYWVsIEhlbm5lcmljaCAoaGVubmVyaWNoQGJsYWNrZmluLnVjbGludXgub3JnKQorICogR1BJTyBBYnN0cmFjdGlvbiBMYXllcgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjogIEdQSU8gQWJzdHJhY3Rpb24gTGF5ZXIKKyAqIENvcHlyaWdodCAyMDA2LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIKICAqLwogCiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4va2VybmVsL2NwbGItbXB1L2NwbGJpbml0LmMgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC9jcGxiLW1wdS9jcGxiaW5pdC5jCmluZGV4IDM2MTkzZWUuLmY3YjljZGMgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4va2VybmVsL2NwbGItbXB1L2NwbGJpbml0LmMKKysrIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvY3BsYi1tcHUvY3BsYmluaXQuYwpAQCAtMSwyNSArMSwxMSBAQAogLyoKICAqIEJsYWNrZmluIENQTEIgaW5pdGlhbGl6YXRpb24KICAqCi0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDcgQW5hbG9nIERldmljZXMgSW5jLgorICogQ29weXJpZ2h0IDIwMDgtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KKwogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogCiAjaW5jbHVkZSA8YXNtL2JsYWNrZmluLmg+CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9jcGxiLW1wdS9jcGxibWdyLmMgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC9jcGxiLW1wdS9jcGxibWdyLmMKaW5kZXggOGUxZTllOS4uNjllMGU1MyAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvY3BsYi1tcHUvY3BsYm1nci5jCisrKyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL2NwbGItbXB1L2NwbGJtZ3IuYwpAQCAtMSwyMiArMSwxMSBAQAogLyoKLSAqICAgICAgICAgICAgICAgQmxhY2tmaW4gQ1BMQiBleGNlcHRpb24gaGFuZGxpbmcuCi0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDcgQW5hbG9nIERldmljZXMgSW5jLgorICogQmxhY2tmaW4gQ1BMQiBleGNlcHRpb24gaGFuZGxpbmcgZm9yIHdoZW4gTVBVIGluIG9uCiAgKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqIENvcHlyaWdodCAyMDA4LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KKwogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4va2VybmVsL2NwbGItbm9tcHUvY3BsYmluaXQuYyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL2NwbGItbm9tcHUvY3BsYmluaXQuYwppbmRleCA1ZDhhZDUwLi5mZDlhMmYzIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9jcGxiLW5vbXB1L2NwbGJpbml0LmMKKysrIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvY3BsYi1ub21wdS9jcGxiaW5pdC5jCkBAIC0xLDI0ICsxLDkgQEAKIC8qCiAgKiBCbGFja2ZpbiBDUExCIGluaXRpYWxpemF0aW9uCiAgKgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA3IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqIENvcHlyaWdodCAyMDA3LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4va2VybmVsL2NwbGItbm9tcHUvY3BsYm1nci5jIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvY3BsYi1ub21wdS9jcGxibWdyLmMKaW5kZXggZDllYTQ2Yy4uNWI4ODg2MSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvY3BsYi1ub21wdS9jcGxibWdyLmMKKysrIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvY3BsYi1ub21wdS9jcGxibWdyLmMKQEAgLTEsMjYgKzEsMTQgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4va2VybmVsL2NwbGItbm9tcHUtYy9jcGxibWdyLmMKICAqIEJhc2VkIG9uOiAgICAgYXJjaC9ibGFja2Zpbi9rZXJuZWwvY3BsYi1tcHUvY3BsYm1nci5jCiAgKiBBdXRob3I6ICAgICAgIE1pY2hhZWwgTWNUZXJuYW4gPG1tY3Rlcm5hbkBhaXJ2YW5hLmNvbT4KICAqCi0gKiBDcmVhdGVkOiAgICAgIDAxTm92MjAwOAogICogRGVzY3JpcHRpb246ICBDUExCIG1pc3MgaGFuZGxlci4KICAqCiAgKiBNb2RpZmllZDoKICAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDggQWlydmFuYSBJbmMuCi0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDcgQW5hbG9nIERldmljZXMgSW5jLgorICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwOC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlcgogICovCiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4va2VybmVsL2NwbGJpbmZvLmMgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC9jcGxiaW5mby5jCmluZGV4IDY0ZDc4MzAuLjBiZGFhNTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4va2VybmVsL2NwbGJpbmZvLmMKKysrIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvY3BsYmluZm8uYwpAQCAtMiw2ICsyLDcgQEAKICAqIGFyY2gvYmxhY2tmaW4va2VybmVsL2NwbGJpbmZvLmMgLSBkaXNwbGF5IENQTEIgc3RhdHVzCiAgKgogICogQ29weXJpZ2h0IDIwMDQtMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKgogICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKQEAgLTExMSwyNCArMTEyLDIxIEBACiAJLnNob3cgID0gY3BsYmluZm9fc2hvdywKIH07CiAKKyNkZWZpbmUgQ1BMQklORk9fRENQTEJfRkxBRyAweDgwMDAwMDAwCisKIHN0YXRpYyBpbnQgY3BsYmluZm9fb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQljaGFyIGJ1ZlsyNTZdLCAqcGF0aCwgKnA7CisJc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwZGUgPSBQREUoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSk7CisJY2hhciBjcGxiX3R5cGU7CiAJdW5zaWduZWQgaW50IGNwdTsKLQljaGFyICpzX2NwdSwgKnNfY3BsYjsKIAlpbnQgcmV0OwogCXN0cnVjdCBzZXFfZmlsZSAqbTsKIAlzdHJ1Y3QgY3BsYmluZm9fZGF0YSAqY2RhdGE7CiAKLQlwYXRoID0gZF9wYXRoKCZmaWxlLT5mX3BhdGgsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOwotCWlmIChJU19FUlIocGF0aCkpCi0JCXJldHVybiBQVFJfRVJSKHBhdGgpOwotCXNfY3B1ID0gc3Ryc3RyKHBhdGgsICIvY3B1Iik7Ci0Jc19jcGxiID0gc3RycmNocihwYXRoLCAnLycpOwotCWlmICghc19jcHUgfHwgIXNfY3BsYikKLQkJcmV0dXJuIC1FSU5WQUw7CisJY3B1ID0gKHVuc2lnbmVkIGludClwZGUtPmRhdGE7CisJY3BsYl90eXBlID0gY3B1ICYgQ1BMQklORk9fRENQTEJfRkxBRyA/ICdEJyA6ICdJJzsKKwljcHUgJj0gfkNQTEJJTkZPX0RDUExCX0ZMQUc7CiAKLQljcHUgPSBzaW1wbGVfc3RydG91bChzX2NwdSArIDQsICZwLCAxMCk7CiAJaWYgKCFjcHVfb25saW5lKGNwdSkpCiAJCXJldHVybiAtRU5PREVWOwogCkBAIC0xMzksNyArMTM3LDcgQEAKIAljZGF0YSA9IG0tPnByaXZhdGU7CiAKIAljZGF0YS0+cG9zID0gMDsKLQljZGF0YS0+Y3BsYl90eXBlID0gdG91cHBlcihzX2NwbGJbMV0pOworCWNkYXRhLT5jcGxiX3R5cGUgPSBjcGxiX3R5cGU7CiAJY3BsYmluZm9fc2VxX2luaXQoY2RhdGEsIGNwdSk7CiAKIAlyZXR1cm4gMDsKQEAgLTE2OCw4ICsxNjYsMTAgQEAKIAkJaWYgKCFjcHVfZGlyKQogCQkJcmV0dXJuIC1FTk9NRU07CiAKLQkJcHJvY19jcmVhdGUoImljcGxiIiwgU19JUlVHTywgY3B1X2RpciwgJmNwbGJpbmZvX2ZvcHMpOwotCQlwcm9jX2NyZWF0ZSgiZGNwbGIiLCBTX0lSVUdPLCBjcHVfZGlyLCAmY3BsYmluZm9fZm9wcyk7CisJCXByb2NfY3JlYXRlX2RhdGEoImljcGxiIiwgU19JUlVHTywgY3B1X2RpciwgJmNwbGJpbmZvX2ZvcHMsCisJCQkodm9pZCAqKWNwdSk7CisJCXByb2NfY3JlYXRlX2RhdGEoImRjcGxiIiwgU19JUlVHTywgY3B1X2RpciwgJmNwbGJpbmZvX2ZvcHMsCisJCQkodm9pZCAqKShjcHUgfCBDUExCSU5GT19EQ1BMQl9GTEFHKSk7CiAJfQogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9kbWEtbWFwcGluZy5jIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvZG1hLW1hcHBpbmcuYwppbmRleCAyZjYyYTlmLi5lNzRlNzRkIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9kbWEtbWFwcGluZy5jCisrKyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL2RtYS1tYXBwaW5nLmMKQEAgLTEsMzAgKzEsOSBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9rZXJuZWwvZG1hLW1hcHBpbmcuYwotICogQmFzZWQgb246Ci0gKiBBdXRob3I6CisgKiBEeW5hbWljIERNQSBtYXBwaW5nIHN1cHBvcnQKICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246ICBEeW5hbWljIERNQSBtYXBwaW5nIHN1cHBvcnQuCisgKiBDb3B5cmlnaHQgMjAwNS0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwNiBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIKICAqLwogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4va2VybmVsL2Vhcmx5X3ByaW50ay5jIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvZWFybHlfcHJpbnRrLmMKaW5kZXggOTMxYzc4Yi4uODRlZDgzNyAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvZWFybHlfcHJpbnRrLmMKKysrIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvZWFybHlfcHJpbnRrLmMKQEAgLTEsMjUgKzEsMTAgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4va2VybmVsL2Vhcmx5X3ByaW50ay5jCi0gKiBCYXNlZCBvbjogICAgIGFyY2gveDg2XzY0L2tlcm5lbC9lYXJseV9wcmludGsuYwotICogQXV0aG9yOiAgICAgICBSb2JpbiBHZXR6IDxyZ2V0ekBibGFja2Zpbi51Y2xpbnV4Lm9yZworICogYWxsb3cgYSBjb25zb2xlIHRvIGJlIHVzZWQgZm9yIGVhcmx5IHByaW50aworICogZGVyaXZlZCBmcm9tIGFyY2gveDg2L2tlcm5lbC9lYXJseV9wcmludGsuYwogICoKLSAqIENyZWF0ZWQ6ICAgICAgMTRBdWcyMDA3Ci0gKiBEZXNjcmlwdGlvbjogIGFsbG93IGEgY29uc29sZSB0byBiZSB1c2VkIGZvciBlYXJseSBwcmludGsKKyAqIENvcHlyaWdodCAyMDA3LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA3IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMgogICovCiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4va2VybmVsL2VudHJ5LlMgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC9lbnRyeS5TCmluZGV4IDNmODc2OWIuLmYyN2RjMjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4va2VybmVsL2VudHJ5LlMKKysrIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvZW50cnkuUwpAQCAtMSwzMCArMSw3IEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL2tlcm5lbC9lbnRyeS5TCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjoKLSAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwNiBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIKICAqLwogCiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvZml4ZWRfY29kZS5TIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvZml4ZWRfY29kZS5TCmluZGV4IDBkMmQ5ZTAuLjA1NjU5MTcgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4va2VybmVsL2ZpeGVkX2NvZGUuUworKysgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC9maXhlZF9jb2RlLlMKQEAgLTYsNyArNiwxMiBAQAogICogVGhlc2UgYXJlIGFsaWduZWQgdG8gMTYgYnl0ZXMsIHNvIHRoYXQgd2UgaGF2ZSBzb21lIHNwYWNlIHRvIHJlcGxhY2UKICAqIHRoZXNlIHNlcXVlbmNlcyB3aXRoIHNvbWV0aGluZyBlbHNlIChlLmcuIGtlcm5lbCB0cmFwcyBpZiB3ZSBldmVyIGRvCiAgKiBCRjU2MSBTTVApLgorICoKKyAqIENvcHlyaWdodCAyMDA3LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLworCiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC91bmlzdGQuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4va2VybmVsL2ZsYXQuYyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL2ZsYXQuYwppbmRleCBkMTg4YjI0Li5hODhkYWRkIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9mbGF0LmMKKysrIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvZmxhdC5jCkBAIC0xLDIxICsxLDcgQEAKIC8qCi0gKiAgYXJjaC9ibGFja2Zpbi9rZXJuZWwvZmxhdC5jCisgKiBDb3B5cmlnaHQgMjAwNyBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogIENvcHlyaWdodCAoQykgMjAwNyBBbmFsb2cgRGV2aWNlcywgSW5jLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMi4KICAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9pbml0X3Rhc2suYyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL2luaXRfdGFzay5jCmluZGV4IGMyNmMzNGQuLjExOGM1YjkgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4va2VybmVsL2luaXRfdGFzay5jCisrKyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL2luaXRfdGFzay5jCkBAIC0xLDMwICsxLDcgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4va2VybmVsL2luaXRfdGFzay5jCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjogIFRoaXMgZmlsZSBjb250YWlucyB0aGUgc2ltcGxlIERNQSBJbXBsZW1lbnRhdGlvbiBmb3IgQmxhY2tmaW4KLSAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwNiBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIKICAqLwogCiAjaW5jbHVkZSA8bGludXgvbW0uaD4KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4va2VybmVsL2lycWNoaXAuYyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL2lycWNoaXAuYwppbmRleCA0YjVmZDM2Li5kYjlmOWM5IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9pcnFjaGlwLmMKKysrIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvaXJxY2hpcC5jCkBAIC0xLDMwICsxLDcgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4va2VybmVsL2lycWNoaXAuYwotICogQmFzZWQgb246Ci0gKiBBdXRob3I6CisgKiBDb3B5cmlnaHQgMjAwNS0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246ICBUaGlzIGZpbGUgY29udGFpbnMgdGhlIHNpbXBsZSBETUEgSW1wbGVtZW50YXRpb24gZm9yIEJsYWNrZmluCi0gKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDYgQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbF9zdGF0Lmg+CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9tb2R1bGUuYyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL21vZHVsZS5jCmluZGV4IDY3ZmM3YTUuLmE2ZGZhNmIgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4va2VybmVsL21vZHVsZS5jCisrKyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL21vZHVsZS5jCkBAIC0xLDMwICsxLDcgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4va2VybmVsL21vZHVsZS5jCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjoKLSAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwNiBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIKICAqLwogCiAjZGVmaW5lIHByX2ZtdChmbXQpICJtb2R1bGUgJXM6ICIgZm10CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9wcm9jZXNzLmMgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggZjViMjg2MS4uNDMwYWUzOSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvcHJvY2Vzcy5jCisrKyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL3Byb2Nlc3MuYwpAQCAtMSwzMCArMSw5IEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL2tlcm5lbC9wcm9jZXNzLmMKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogQmxhY2tmaW4gYXJjaGl0ZWN0dXJlLWRlcGVuZGVudCBwcm9jZXNzIGhhbmRsaW5nCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOiAgQmxhY2tmaW4gYXJjaGl0ZWN0dXJlLWRlcGVuZGVudCBwcm9jZXNzIGhhbmRsaW5nLgorICogQ29weXJpZ2h0IDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDYgQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvcHRyYWNlLmMgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC9wdHJhY2UuYwppbmRleCAzMGY0ODI4Li4wOTgyYjVkIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9wdHJhY2UuYworKysgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC9wdHJhY2UuYwpAQCAtMSwzMCArMSw4IEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL2tlcm5lbC9wdHJhY2UuYwotICogQmFzZWQgb246ICAgICBUYWtlbiBmcm9tIGxpbnV4L2tlcm5lbC9wdHJhY2UuYwotICogQXV0aG9yOiAgICAgICBsaW51eC9rZXJuZWwvcHRyYWNlLmMgaXMgYnkgUm9zcyBCaXJvIDEvMjMvOTIsIGVkaXRlZCBieSBMaW51cyBUb3J2YWxkcworICogbGludXgva2VybmVsL3B0cmFjZS5jIGlzIGJ5IFJvc3MgQmlybyAxLzIzLzkyLCBlZGl0ZWQgYnkgTGludXMgVG9ydmFsZHMKKyAqIHRoZXNlIG1vZGlmaWNhdGlvbnMgYXJlIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIENyZWF0ZWQ6ICAgICAgMS8yMy85MgotICogRGVzY3JpcHRpb246Ci0gKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDYgQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvc2V0dXAuYyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL3NldHVwLmMKaW5kZXggMzY5NTM1Yi4uYzIwMmE0NCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvc2V0dXAuYworKysgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC9zZXR1cC5jCkBAIC0xLDkgKzEsNSBAQAogLyoKLSAqIGFyY2gvYmxhY2tmaW4va2VybmVsL3NldHVwLmMKLSAqCi0gKiBDb3B5cmlnaHQgMjAwNC0yMDA2IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KKyAqIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvc2hhZG93X2NvbnNvbGUuYyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL3NoYWRvd19jb25zb2xlLmMKaW5kZXggOGI4YzcxMC4uNTU3ZTlmZSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvc2hhZG93X2NvbnNvbGUuYworKysgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC9zaGFkb3dfY29uc29sZS5jCkBAIC00LDggKzQsNiBAQAogICoKICAqIENvcHlyaWdodCAyMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvc2lnbmFsLmMgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC9zaWduYWwuYwppbmRleCBkYmMzYmJmLi45ZDkwYzE4IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9zaWduYWwuYworKysgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC9zaWduYWwuYwpAQCAtMSwzMCArMSw3IEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL2tlcm5lbC9zaWduYWwuYwotICogQmFzZWQgb246Ci0gKiBBdXRob3I6CisgKiBDb3B5cmlnaHQgMjAwNC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246Ci0gKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDYgQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvc3lzX2JmaW4uYyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL3N5c19iZmluLmMKaW5kZXggM2RhNjBmYi4uYWZjZWYxMiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvc3lzX2JmaW4uYworKysgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC9zeXNfYmZpbi5jCkBAIC0xLDMyICsxLDEwIEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL2tlcm5lbC9zeXNfYmZpbi5jCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIGNvbnRhaW5zIHZhcmlvdXMgcmFuZG9tIHN5c3RlbSBjYWxscyB0aGF0IGhhdmUgYSBub24tc3RhbmRhcmQKKyAqIGNhbGxpbmcgc2VxdWVuY2Ugb24gdGhlIExpbnV4L0JsYWNrZmluIHBsYXRmb3JtLgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjogIFRoaXMgZmlsZSBjb250YWlucyB2YXJpb3VzIHJhbmRvbSBzeXN0ZW0gY2FsbHMgdGhhdAotICogICAgICAgICAgICAgICBoYXZlIGEgbm9uLXN0YW5kYXJkIGNhbGxpbmcgc2VxdWVuY2Ugb24gdGhlIExpbnV4L2JmaW4KLSAqICAgICAgICAgICAgICAgcGxhdGZvcm0uCisgKiBDb3B5cmlnaHQgMjAwNC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwNiBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIKICAqLwogCiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KQEAgLTkxLDMgKzY5LDE0IEBACiB7CiAJcmV0dXJuIHNhZmVfZG1hX21lbWNweShkZXN0LCBzcmMsIGxlbik7CiB9CisKKyNpZiBkZWZpbmVkKENPTkZJR19GQikgfHwgZGVmaW5lZChDT05GSUdfRkJfTU9EVUxFKQorI2luY2x1ZGUgPGxpbnV4L2ZiLmg+Cit1bnNpZ25lZCBsb25nIGdldF9mYl91bm1hcHBlZF9hcmVhKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIG9yaWdfYWRkciwKKwl1bnNpZ25lZCBsb25nIGxlbiwgdW5zaWduZWQgbG9uZyBwZ29mZiwgdW5zaWduZWQgbG9uZyBmbGFncykKK3sKKwlzdHJ1Y3QgZmJfaW5mbyAqaW5mbyA9IGZpbHAtPnByaXZhdGVfZGF0YTsKKwlyZXR1cm4gKHVuc2lnbmVkIGxvbmcpaW5mby0+c2NyZWVuX2Jhc2U7Cit9CitFWFBPUlRfU1lNQk9MKGdldF9mYl91bm1hcHBlZF9hcmVhKTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvdGltZS10cy5jIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvdGltZS10cy5jCmluZGV4IGY5NzE1NzYuLjM1OWNmYjEgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4va2VybmVsL3RpbWUtdHMuYworKysgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC90aW1lLXRzLmMKQEAgLTEsMTMgKzEsMTMgQEAKIC8qCi0gKiBsaW51eC9hcmNoL2tlcm5lbC90aW1lLXRzLmMKLSAqCiAgKiBCYXNlZCBvbiBhcm0gY2xvY2tldmVudHMgaW1wbGVtZW50YXRpb24gYW5kIG9sZCBiZmluIHRpbWUgdGljay4KICAqCi0gKiBDb3B5cmlnaHQoQykgMjAwOCwgR2VvVGVjaG5vbG9naWVzLCBWaXRqYSBNYWthcm92CisgKiBDb3B5cmlnaHQgMjAwOC0yMDA5IEFuYWxvZyBEZXZpY3MgSW5jLgorICogICAgICAgICAgICAgICAgMjAwOCBHZW9UZWNobm9sb2dpZXMKKyAqICAgICAgICAgICAgICAgICAgICAgVml0amEgTWFrYXJvdgogICoKLSAqIFRoaXMgY29kZSBpcyBsaWNlbmNlZCB1bmRlciB0aGUgR1BMIHZlcnNpb24gMi4gRm9yIGRldGFpbHMgc2VlCi0gKiBrZXJuZWwtYmFzZS9DT1BZSU5HLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yCiAgKi8KKwogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3Byb2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4va2VybmVsL3RpbWUuYyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL3RpbWUuYwppbmRleCBhZGI1NGFhLi5iZDNiNTNkIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2tlcm5lbC90aW1lLmMKKysrIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvdGltZS5jCkBAIC0xNCw2ICsxNCw3IEBACiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KIAogI2luY2x1ZGUgPGFzbS9ibGFja2Zpbi5oPgogI2luY2x1ZGUgPGFzbS90aW1lLmg+CkBAIC04MSwxMSArODIsMTEgQEAKICNlbmRpZgogfQogCisjaWZkZWYgQ09ORklHX0FSQ0hfVVNFU19HRVRUSU1FT0ZGU0VUCiAvKgogICogU2hvdWxkIHJldHVybiB1c2Vjb25kcyBzaW5jZSBsYXN0IHRpbWVyIHRpY2sKICAqLwotI2lmbmRlZiBDT05GSUdfR0VORVJJQ19USU1FCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBnZXR0aW1lb2Zmc2V0KHZvaWQpCit1MzIgYXJjaF9nZXR0aW1lb2Zmc2V0KHZvaWQpCiB7CiAJdW5zaWduZWQgbG9uZyBvZmZzZXQ7CiAJdW5zaWduZWQgbG9uZyBjbG9ja3NfcGVyX2ppZmZ5OwpAQCAtMTg0LDY1ICsxODUsNiBAQAogCXRpbWVfc2NoZWRfaW5pdCh0aW1lcl9pbnRlcnJ1cHQpOwogfQogCi0jaWZuZGVmIENPTkZJR19HRU5FUklDX1RJTUUKLXZvaWQgZG9fZ2V0dGltZW9mZGF5KHN0cnVjdCB0aW1ldmFsICp0dikKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXVuc2lnbmVkIGxvbmcgc2VxOwotCXVuc2lnbmVkIGxvbmcgdXNlYywgc2VjOwotCi0JZG8gewotCQlzZXEgPSByZWFkX3NlcWJlZ2luX2lycXNhdmUoJnh0aW1lX2xvY2ssIGZsYWdzKTsKLQkJdXNlYyA9IGdldHRpbWVvZmZzZXQoKTsKLQkJc2VjID0geHRpbWUudHZfc2VjOwotCQl1c2VjICs9ICh4dGltZS50dl9uc2VjIC8gTlNFQ19QRVJfVVNFQyk7Ci0JfQotCXdoaWxlIChyZWFkX3NlcXJldHJ5X2lycXJlc3RvcmUoJnh0aW1lX2xvY2ssIHNlcSwgZmxhZ3MpKTsKLQotCXdoaWxlICh1c2VjID49IFVTRUNfUEVSX1NFQykgewotCQl1c2VjIC09IFVTRUNfUEVSX1NFQzsKLQkJc2VjKys7Ci0JfQotCi0JdHYtPnR2X3NlYyA9IHNlYzsKLQl0di0+dHZfdXNlYyA9IHVzZWM7Ci19Ci1FWFBPUlRfU1lNQk9MKGRvX2dldHRpbWVvZmRheSk7Ci0KLWludCBkb19zZXR0aW1lb2ZkYXkoc3RydWN0IHRpbWVzcGVjICp0dikKLXsKLQl0aW1lX3Qgd3RtX3NlYywgc2VjID0gdHYtPnR2X3NlYzsKLQlsb25nIHd0bV9uc2VjLCBuc2VjID0gdHYtPnR2X25zZWM7Ci0KLQlpZiAoKHVuc2lnbmVkIGxvbmcpdHYtPnR2X25zZWMgPj0gTlNFQ19QRVJfU0VDKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXdyaXRlX3NlcWxvY2tfaXJxKCZ4dGltZV9sb2NrKTsKLQkvKgotCSAqIFRoaXMgaXMgcmV2b2x0aW5nLiBXZSBuZWVkIHRvIHNldCB0aGUgeHRpbWUudHZfdXNlYwotCSAqIGNvcnJlY3RseS4gSG93ZXZlciwgdGhlIHZhbHVlIGluIHRoaXMgbG9jYXRpb24gaXMKLQkgKiBpcyB2YWx1ZSBhdCB0aGUgbGFzdCB0aWNrLgotCSAqIERpc2NvdmVyIHdoYXQgY29ycmVjdGlvbiBnZXR0aW1lb2ZkYXkKLQkgKiB3b3VsZCBoYXZlIGRvbmUsIGFuZCB0aGVuIHVuZG8gaXQhCi0JICovCi0JbnNlYyAtPSAoZ2V0dGltZW9mZnNldCgpICogTlNFQ19QRVJfVVNFQyk7Ci0KLQl3dG1fc2VjID0gd2FsbF90b19tb25vdG9uaWMudHZfc2VjICsgKHh0aW1lLnR2X3NlYyAtIHNlYyk7Ci0Jd3RtX25zZWMgPSB3YWxsX3RvX21vbm90b25pYy50dl9uc2VjICsgKHh0aW1lLnR2X25zZWMgLSBuc2VjKTsKLQotCXNldF9ub3JtYWxpemVkX3RpbWVzcGVjKCZ4dGltZSwgc2VjLCBuc2VjKTsKLQlzZXRfbm9ybWFsaXplZF90aW1lc3BlYygmd2FsbF90b19tb25vdG9uaWMsIHd0bV9zZWMsIHd0bV9uc2VjKTsKLQotCW50cF9jbGVhcigpOwotCi0Jd3JpdGVfc2VxdW5sb2NrX2lycSgmeHRpbWVfbG9jayk7Ci0JY2xvY2tfd2FzX3NldCgpOwotCi0JcmV0dXJuIDA7Ci19Ci1FWFBPUlRfU1lNQk9MKGRvX3NldHRpbWVvZmRheSk7Ci0jZW5kaWYgLyogIUNPTkZJR19HRU5FUklDX1RJTUUgKi8KLQogLyoKICAqIFNjaGVkdWxlciBjbG9jayAtIHJldHVybnMgY3VycmVudCB0aW1lIGluIG5hbm9zZWMgdW5pdHMuCiAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4va2VybmVsL3RyYXBzLmMgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC90cmFwcy5jCmluZGV4IDU2NDY0Y2IuLjZiNzMyNWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4va2VybmVsL3RyYXBzLmMKKysrIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvdHJhcHMuYwpAQCAtMSwzMCArMSw3IEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL2tlcm5lbC90cmFwcy5jCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjogICAgICAgSGFtaXNoIE1hY2RvbmFsZAorICogQ29weXJpZ2h0IDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOiAgdXNlcyBTL1cgaW50ZXJydXB0IDE1IGZvciB0aGUgc3lzdGVtIGNhbGxzCi0gKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDYgQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2J1Zy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvdm1saW51eC5sZHMuUyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL3ZtbGludXgubGRzLlMKaW5kZXggMjFhYzdjMi4uMTBlMTI1MyAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvdm1saW51eC5sZHMuUworKysgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC92bWxpbnV4Lmxkcy5TCkBAIC0xLDMwICsxLDcgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4va2VybmVsL3ZtbGludXgubGRzLlMKLSAqIEJhc2VkIG9uOiAgICAgbm9uZSAtIG9yaWdpbmFsIHdvcmsKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIENyZWF0ZWQ6ICAgICAgVHVlIFNlcCAyMSAyMDA0Ci0gKiBEZXNjcmlwdGlvbjogIE1hc3RlciBsaW5rZXIgc2NyaXB0IGZvciBibGFja2ZpbiBhcmNoaXRlY3R1cmUKLSAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwNyBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIKICAqLwogCiAjZGVmaW5lIFZNTElOVVhfU1lNQk9MKF9zeW1fKSBfIyNfc3ltXwpAQCAtOTYsOCArNzMsNyBAQAogCXsKIAkJX19zZGF0YSA9IC47CiAJCS8qIFRoaXMgZ2V0cyBkb25lIGZpcnN0LCBzbyB0aGUgZ2xvYiBkb2Vzbid0IHN1Y2sgaXQgaW4gKi8KLQkJLiA9IEFMSUdOKDMyKTsKLQkJKiguZGF0YS5jYWNoZWxpbmVfYWxpZ25lZCkKKwkJQ0FDSEVMSU5FX0FMSUdORURfREFUQSgzMikKIAogI2lmICFMMV9EQVRBX0FfTEVOR1RICiAJCS4gPSBBTElHTigzMik7CkBAIC0xMTYsMTIgKzkyLDcgQEAKIAkJREFUQV9EQVRBCiAJCUNPTlNUUlVDVE9SUwogCi0JCS8qIG1ha2Ugc3VyZSB0aGUgaW5pdF90YXNrIGlzIGFsaWduZWQgdG8gdGhlCi0JCSAqIGtlcm5lbCB0aHJlYWQgc2l6ZSBzbyB3ZSBjYW4gbG9jYXRlIHRoZSBrZXJuZWwKLQkJICogc3RhY2sgcHJvcGVybHkgYW5kIHF1aWNrbHkuCi0JCSAqLwotCQkuID0gQUxJR04oVEhSRUFEX1NJWkUpOwotCQkqKC5pbml0X3Rhc2suZGF0YSkKKwkJSU5JVF9UQVNLX0RBVEEoVEhSRUFEX1NJWkUpCiAKIAkJX19lZGF0YSA9IC47CiAJfQpAQCAtMTM0LDM5ICsxMDUsMTAgQEAKIAkuID0gQUxJR04oUEFHRV9TSVpFKTsKIAlfX19pbml0X2JlZ2luID0gLjsKIAotCS5pbml0LnRleHQgOgotCXsKLQkJLiA9IEFMSUdOKFBBR0VfU0laRSk7Ci0JCV9fc2luaXR0ZXh0ID0gLjsKLQkJSU5JVF9URVhUCi0JCV9fZWluaXR0ZXh0ID0gLjsKLQl9Ci0JLmluaXQuZGF0YSA6Ci0JewotCQkuID0gQUxJR04oMTYpOwotCQlJTklUX0RBVEEKLQl9Ci0JLmluaXQuc2V0dXAgOgotCXsKLQkJLiA9IEFMSUdOKDE2KTsKLQkJX19fc2V0dXBfc3RhcnQgPSAuOwotCQkqKC5pbml0LnNldHVwKQotCQlfX19zZXR1cF9lbmQgPSAuOwotCX0KLQkuaW5pdGNhbGwuaW5pdCA6Ci0JewotCQlfX19pbml0Y2FsbF9zdGFydCA9IC47Ci0JCUlOSVRDQUxMUwotCQlfX19pbml0Y2FsbF9lbmQgPSAuOwotCX0KLQkuY29uX2luaXRjYWxsLmluaXQgOgotCXsKLQkJX19fY29uX2luaXRjYWxsX3N0YXJ0ID0gLjsKLQkJKiguY29uX2luaXRjYWxsLmluaXQpCi0JCV9fX2Nvbl9pbml0Y2FsbF9lbmQgPSAuOwotCX0KKwlJTklUX1RFWFRfU0VDVElPTihQQUdFX1NJWkUpCisJLiA9IEFMSUdOKDE2KTsKKwlJTklUX0RBVEFfU0VDVElPTigxNikKIAlQRVJDUFUoNCkKLQlTRUNVUklUWV9JTklUCiAKIAkvKiB3ZSBoYXZlIHRvIGRpc2NhcmQgZXhpdCB0ZXh0IGFuZCBzdWNoIGF0IHJ1bnRpbWUsIG5vdCBsaW5rIHRpbWUsIHRvCiAJICogaGFuZGxlIGVtYmVkZGVkIGNyb3NzLXNlY3Rpb24gcmVmZXJlbmNlcyAoYWx0IGluc3RydWN0aW9ucywgYnVnCkBAIC0xODEsMTggKzEyMyw5IEBACiAJCUVYSVRfREFUQQogCX0KIAotCS5pbml0LnJhbWZzIDoKLQl7Ci0JCS4gPSBBTElHTig0KTsKLQkJX19faW5pdHJhbWZzX3N0YXJ0ID0gLjsKLQkJKiguaW5pdC5yYW1mcykKLQkJLiA9IEFMSUdOKDQpOwotCQlfX19pbml0cmFtZnNfZW5kID0gLjsKLQl9Ci0KIAlfX2wxX2xtYV9zdGFydCA9IC47CiAKLQkudGV4dF9sMSBMMV9DT0RFX1NUQVJUIDogQVQoTE9BREFERFIoLmluaXQucmFtZnMpICsgU0laRU9GKC5pbml0LnJhbWZzKSkKKwkudGV4dF9sMSBMMV9DT0RFX1NUQVJUIDogQVQoTE9BREFERFIoLmV4aXQuZGF0YSkgKyBTSVpFT0YoLmV4aXQuZGF0YSkpCiAJewogCQkuID0gQUxJR04oNCk7CiAJCV9fc3RleHRfbDEgPSAuOwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9saWIvYXNobGRpMy5jIGIvYXJjaC9ibGFja2Zpbi9saWIvYXNobGRpMy5jCmluZGV4IGE4YzI3OWUuLmFiNjlkODcgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbGliL2FzaGxkaTMuYworKysgYi9hcmNoL2JsYWNrZmluL2xpYi9hc2hsZGkzLmMKQEAgLTEsMzAgKzEsNyBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9saWIvYXNobGRpMy5jCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjoKLSAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwNiBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2luY2x1ZGUgImdjY2xpYi5oIgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9saWIvYXNocmRpMy5jIGIvYXJjaC9ibGFja2Zpbi9saWIvYXNocmRpMy5jCmluZGV4IGEwZDM0MTkuLmI1YjM1MWUgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbGliL2FzaHJkaTMuYworKysgYi9hcmNoL2JsYWNrZmluL2xpYi9hc2hyZGkzLmMKQEAgLTEsMzAgKzEsNyBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9saWIvYXNocmRpMy5jCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjoKLSAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwNiBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2luY2x1ZGUgImdjY2xpYi5oIgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9saWIvY2hlY2tzdW0uYyBiL2FyY2gvYmxhY2tmaW4vbGliL2NoZWNrc3VtLmMKaW5kZXggY2Q2MDVlNy4uYzYyOTY5ZCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9saWIvY2hlY2tzdW0uYworKysgYi9hcmNoL2JsYWNrZmluL2xpYi9jaGVja3N1bS5jCkBAIC0xLDMyICsxLDEyIEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL2xpYi9jaGVja3N1bS5jCi0gKiBCYXNlZCBvbjogICAgIG5vbmUgLSBvcmlnaW5hbCB3b3JrCi0gKiBBdXRob3I6CisgKiBDb3B5cmlnaHQgMjAwNC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246ICBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgVENQL0lQIHByb3RvY29sIHN1aXRlIGZvciB0aGUgTElOVVgKLSAqICAgICAgICAgICAgICAgb3BlcmF0aW5nIHN5c3RlbS4gIElORVQgaXMgaW1wbGVtZW50ZWQgdXNpbmcgdGhlICBCU0QgU29ja2V0Ci0gKiAgICAgICAgICAgICAgIGludGVyZmFjZSBhcyB0aGUgbWVhbnMgb2YgY29tbXVuaWNhdGlvbiB3aXRoIHRoZSB1c2VyIGxldmVsLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA2IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBUQ1AvSVAgcHJvdG9jb2wgc3VpdGUgZm9yIHRoZSBMSU5VWCBvcGVyYXRpbmcKKyAqIHN5c3RlbS4gSU5FVCBpcyBpbXBsZW1lbnRlZCB1c2luZyB0aGUgQlNEIFNvY2tldCBpbnRlcmZhY2UgYXMgdGhlCisgKiBtZWFucyBvZiBjb21tdW5pY2F0aW9uIHdpdGggdGhlIHVzZXIgbGV2ZWwuCiAgKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9saWIvZGl2c2kzLlMgYi9hcmNoL2JsYWNrZmluL2xpYi9kaXZzaTMuUwppbmRleCAyYWM1OWM3Li5mODljNWE0IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2xpYi9kaXZzaTMuUworKysgYi9hcmNoL2JsYWNrZmluL2xpYi9kaXZzaTMuUwpAQCAtMSwxMCArMSw5IEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL2xpYi9kaXZzaTMuUwotICogQmFzZWQgb246Ci0gKiBBdXRob3I6CisgKiBDb3B5cmlnaHQgMjAwNC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246ICAxNiAvIDMyIGJpdCBzaWduZWQgZGl2aXNpb24uCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQURJIEJTRCBsaWNlbnNlIG9yIHRoZSBHUEwtMiAob3IgbGF0ZXIpCisgKgorICogMTYgLyAzMiBiaXQgc2lnbmVkIGRpdmlzaW9uLgogICogICAgICAgICAgICAgICAgIFNwZWNpYWwgY2FzZXMgOgogICogICAgICAgICAgICAgICAgICAgICAgMSkgIElmKG51bWVyYXRvciA9PSAwKQogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwCkBAIC0yMiwyNSArMjEsNiBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFIwIC0gUXVvdGllbnQgICAgKG8pCiAgKiAgICAgICAgICAgICAgICAgUmVnaXN0ZXJzIFVzZWQgOiBSMi1SNyxQMC1QMgogICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA2IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKICAqLwogCiAuZ2xvYmFsICAgX19fZGl2c2kzOwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9saWIvZ2NjbGliLmggYi9hcmNoL2JsYWNrZmluL2xpYi9nY2NsaWIuaAppbmRleCA5Y2NkMzlhLi43MjRmMDdmIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2xpYi9nY2NsaWIuaAorKysgYi9hcmNoL2JsYWNrZmluL2xpYi9nY2NsaWIuaApAQCAtMSwzMCArMSw3IEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL2xpYi9nY2NsaWIuaAotICogQmFzZWQgb246Ci0gKiBBdXRob3I6CisgKiBDb3B5cmlnaHQgMjAwNC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246Ci0gKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDYgQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNkZWZpbmUgQklUU19QRVJfVU5JVCAgOApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9saWIvbHNocmRpMy5jIGIvYXJjaC9ibGFja2Zpbi9saWIvbHNocmRpMy5jCmluZGV4IGU1N2JmNmYuLjUzZjE3NDEgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbGliL2xzaHJkaTMuYworKysgYi9hcmNoL2JsYWNrZmluL2xpYi9sc2hyZGkzLmMKQEAgLTEsMzAgKzEsNyBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9saWIvbHNocmRpMy5jCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjoKLSAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwNiBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2luY2x1ZGUgImdjY2xpYi5oIgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9saWIvbWVtY2hyLlMgYi9hcmNoL2JsYWNrZmluL2xpYi9tZW1jaHIuUwppbmRleCA1ZGE0MjgxLi41NDJlNDBmIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2xpYi9tZW1jaHIuUworKysgYi9hcmNoL2JsYWNrZmluL2xpYi9tZW1jaHIuUwpAQCAtMSwzMCArMSw3IEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL2xpYi9tZW1jaHIuUwotICogQmFzZWQgb246Ci0gKiBBdXRob3I6CisgKiBDb3B5cmlnaHQgMjAwNS0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246Ci0gKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDYgQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEFESSBCU0QgbGljZW5zZSBvciB0aGUgR1BMLTIgKG9yIGxhdGVyKQogICovCiAKICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2xpYi9tZW1jbXAuUyBiL2FyY2gvYmxhY2tmaW4vbGliL21lbWNtcC5TCmluZGV4IDIxOWZhMjguLmNlNWI5ZjEgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbGliL21lbWNtcC5TCisrKyBiL2FyY2gvYmxhY2tmaW4vbGliL21lbWNtcC5TCkBAIC0xLDMwICsxLDcgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4vbGliL21lbWNtcC5TCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjoKLSAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwNiBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQURJIEJTRCBsaWNlbnNlIG9yIHRoZSBHUEwtMiAob3IgbGF0ZXIpCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbGliL21lbWNweS5TIGIvYXJjaC9ibGFja2Zpbi9saWIvbWVtY3B5LlMKaW5kZXggZTY1NGExOC4uYzMxYmYyMiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9saWIvbWVtY3B5LlMKKysrIGIvYXJjaC9ibGFja2Zpbi9saWIvbWVtY3B5LlMKQEAgLTEsMzYgKzEsMTMgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4vbGliL21lbWNweS5TCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIGludGVybmFsIHZlcnNpb24gb2YgbWVtY3B5KCksIGlzc3VlZCBieSB0aGUgY29tcGlsZXIgdG8gY29weSBibG9ja3Mgb2YKKyAqIGRhdGEgYXJvdW5kLiBUaGlzIGlzIHJlYWxseSBtZW1tb3ZlKCkgLSBpdCBoYXMgdG8gYmUgYWJsZSB0byBkZWFsIHdpdGgKKyAqIHBvc3NpYmxlIG92ZXJsYXBzLCBiZWNhdXNlIHRoYXQgYW1iaWd1aXR5IGlzIHdoZW4gdGhlIGNvbXBpbGVyIGdpdmVzIHVwCisgKiBhbmQgY2FsbHMgYSBmdW5jdGlvbi4gV2UgaGF2ZSBvdXIgb3duLCBpbnRlcm5hbCB2ZXJzaW9uIHNvIHRoYXQgd2UgZ2V0CisgKiBzb21ldGhpbmcgd2UgdHJ1c3QsIGV2ZW4gaWYgdGhlIHVzZXIgaGFzIHJlZGVmaW5lZCB0aGUgbm9ybWFsIHN5bWJvbC4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246ICBpbnRlcm5hbCB2ZXJzaW9uIG9mIG1lbWNweSgpLCBpc3N1ZWQgYnkgdGhlIGNvbXBpbGVyCi0gKiAgICAgICAgICAgICAgIHRvIGNvcHkgYmxvY2tzIG9mIGRhdGEgYXJvdW5kLgotICogICAgICAgICAgICAgICBUaGlzIGlzIHJlYWxseSBtZW1tb3ZlKCkgLSBpdCBoYXMgdG8gYmUgYWJsZSB0byBkZWFsIHdpdGgKLSAqICAgICAgICAgICAgICAgcG9zc2libGUgb3ZlcmxhcHMsIGJlY2F1c2UgdGhhdCBhbWJpZ3VpdHkgaXMgd2hlbiB0aGUgY29tcGlsZXIKLSAqICAgICAgICAgICAgICAgZ2l2ZXMgdXAgYW5kIGNhbGxzIGEgZnVuY3Rpb24uIFdlIGhhdmUgb3VyIG93biwgaW50ZXJuYWwgdmVyc2lvbgotICogICAgICAgICAgICAgICBzbyB0aGF0IHdlIGdldCBzb21ldGhpbmcgd2UgdHJ1c3QsIGV2ZW4gaWYgdGhlIHVzZXIgaGFzIHJlZGVmaW5lZAotICogICAgICAgICAgICAgICB0aGUgbm9ybWFsIHN5bWJvbC4KKyAqIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA2IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBREkgQlNEIGxpY2Vuc2Ugb3IgdGhlIEdQTC0yIChvciBsYXRlcikKICAqLwogCiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9saWIvbWVtbW92ZS5TIGIvYXJjaC9ibGFja2Zpbi9saWIvbWVtbW92ZS5TCmluZGV4IDMzZjg2NTMuLjgwYzI0MGEgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbGliL21lbW1vdmUuUworKysgYi9hcmNoL2JsYWNrZmluL2xpYi9tZW1tb3ZlLlMKQEAgLTEsMzAgKzEsNyBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9saWIvbWVtbW92ZS5TCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA1LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjoKLSAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwNiBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQURJIEJTRCBsaWNlbnNlIG9yIHRoZSBHUEwtMiAob3IgbGF0ZXIpCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbGliL21lbXNldC5TIGIvYXJjaC9ibGFja2Zpbi9saWIvbWVtc2V0LlMKaW5kZXggODE1OTEzNi4uYzMwZDk5YiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9saWIvbWVtc2V0LlMKKysrIGIvYXJjaC9ibGFja2Zpbi9saWIvbWVtc2V0LlMKQEAgLTEsMzAgKzEsNyBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9saWIvbWVtc2V0LlMKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogQ29weXJpZ2h0IDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOgotICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA2IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBREkgQlNEIGxpY2Vuc2Ugb3IgdGhlIEdQTC0yIChvciBsYXRlcikKICAqLwogCiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9saWIvbW9kc2kzLlMgYi9hcmNoL2JsYWNrZmluL2xpYi9tb2RzaTMuUwppbmRleCBjYTFkZDM5Li44YjBjN2Q0IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2xpYi9tb2RzaTMuUworKysgYi9hcmNoL2JsYWNrZmluL2xpYi9tb2RzaTMuUwpAQCAtMSwzNiArMSwxMiBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9saWIvbW9kc2kzLlMKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogVGhpcyBwcm9ncmFtIGNvbXB1dGVzIDMyIGJpdCBzaWduZWQgcmVtYWluZGVyLiBJdCBjYWxscyBkaXYzMiBmdW5jdGlvbgorICogZm9yIHF1b3RpZW50IGVzdGltYXRpb24uCisgKiAgIFJlZ2lzdGVycyBpbjogIFIwLCBSMSA9IE51bWVyYXRvci8gRGVub21pbmF0b3IKKyAqICAgUmVnaXN0ZXJzIG91dDogUjAgICAgID0gUmVtYWluZGVyCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOiAgVGhpcyBwcm9ncmFtIGNvbXB1dGVzIDMyIGJpdCBzaWduZWQgcmVtYWluZGVyLiBJdCBjYWxscyBkaXYzMiBmdW5jdGlvbgotICogICAgICAgICAgICAgICBmb3IgcXVvdGllbnQgZXN0aW1hdGlvbi4KKyAqIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqICAgICAgICAgICAgICAgUmVnaXN0ZXJzIHVzZWQgOgotICogICAgICAgICAgICAgICBOdW1lcmF0b3IvIERlbm9taW5hdG9yIGluICBSMCwgUjEKLSAqICAgICAgICAgICAgICAgICBSMCAgLSAgcmV0dXJucyByZW1haW5kZXIuCi0gKiAgICAgICAgICAgICAgICAgUjItUjcKLSAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwNiBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQURJIEJTRCBsaWNlbnNlIG9yIHRoZSBHUEwtMiAob3IgbGF0ZXIpCiAgKi8KIAogLmdsb2JhbCBfX19tb2RzaTM7CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2xpYi9tdWxkaTMuUyBiL2FyY2gvYmxhY2tmaW4vbGliL211bGRpMy5TCmluZGV4IGFiZGUxMjAuLjk1M2EzOGEgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbGliL211bGRpMy5TCisrKyBiL2FyY2gvYmxhY2tmaW4vbGliL211bGRpMy5TCkBAIC0xLDMgKzEsOSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQURJIEJTRCBsaWNlbnNlIG9yIHRoZSBHUEwtMiAob3IgbGF0ZXIpCisgKi8KKwogLmFsaWduIDIKIC5nbG9iYWwgX19fbXVsZGkzOwogLnR5cGUgX19fbXVsZGkzLCBTVFRfRlVOQzsKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbGliL291dHMuUyBiL2FyY2gvYmxhY2tmaW4vbGliL291dHMuUwppbmRleCA0Njg1YjdhLi4yNTBmNGQ0IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2xpYi9vdXRzLlMKKysrIGIvYXJjaC9ibGFja2Zpbi9saWIvb3V0cy5TCkBAIC0xLDMwICsxLDExIEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL2xpYi9vdXRzLlMKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOiAgICAgICBCYXMgVmVybWV1bGVuIDxiYXNAYnV5d2F5cy5ubD4KKyAqIEltcGxlbWVudGF0aW9uIG9mIG91dHN7YndsfSBmb3IgQmxhY2tGaW4gcHJvY2Vzc29ycyB1c2luZyB6ZXJvIG92ZXJoZWFkIGxvb3BzLgogICoKLSAqIENyZWF0ZWQ6ICAgICAgVHVlIE1hciAyMiAxNToyNzoyNCBDRVNUIDIwMDUKLSAqIERlc2NyaXB0aW9uOiAgSW1wbGVtZW50YXRpb24gb2Ygb3V0c3tid2x9IGZvciBCbGFja0ZpbiBwcm9jZXNzb3JzIHVzaW5nIHplcm8gb3ZlcmhlYWQgbG9vcHMuCisgKiBDb3B5cmlnaHQgMjAwNS0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqICAgICAgICAgICAgICAgIDIwMDUgQnV5V2F5cyBCVgorICogICAgICAgICAgICAgICAgICAgICAgQmFzIFZlcm1ldWxlbiA8YmFzQGJ1eXdheXMubmw+CiAgKgotICogTW9kaWZpZWQ6ICAgICBDb3B5cmlnaHQgKEMpIDIwMDUgQmFzIFZlcm1ldWxlbiwgQnV5V2F5cyBCViA8YmFzQGJ1eXdheXMubmw+Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yLgogICovCiAKICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2xpYi9zbXVsc2kzX2hpZ2hwYXJ0LlMgYi9hcmNoL2JsYWNrZmluL2xpYi9zbXVsc2kzX2hpZ2hwYXJ0LlMKaW5kZXggZTM4M2NkMy4uOTllZThjNSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9saWIvc211bHNpM19oaWdocGFydC5TCisrKyBiL2FyY2gvYmxhY2tmaW4vbGliL3NtdWxzaTNfaGlnaHBhcnQuUwpAQCAtMSwzICsxLDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNyBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFESSBCU0QgbGljZW5zZSBvciB0aGUgR1BMLTIgKG9yIGxhdGVyKQorICovCisKIC5hbGlnbiAyCiAuZ2xvYmFsIF9fX3NtdWxzaTNfaGlnaHBhcnQ7CiAudHlwZSBfX19zbXVsc2kzX2hpZ2hwYXJ0LCBTVFRfRlVOQzsKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbGliL3VkaXZzaTMuUyBiL2FyY2gvYmxhY2tmaW4vbGliL3VkaXZzaTMuUwppbmRleCA1OGZkOTZkLi45N2U5MDQzIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2xpYi91ZGl2c2kzLlMKKysrIGIvYXJjaC9ibGFja2Zpbi9saWIvdWRpdnNpMy5TCkBAIC0xLDMwICsxLDcgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4vbGliL3VkaXZzaTMuUwotICogQmFzZWQgb246Ci0gKiBBdXRob3I6CisgKiBDb3B5cmlnaHQgMjAwNC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246Ci0gKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDYgQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEFESSBCU0QgbGljZW5zZSBvciB0aGUgR1BMLTIgKG9yIGxhdGVyKQogICovCiAKICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2xpYi91bW9kc2kzLlMgYi9hcmNoL2JsYWNrZmluL2xpYi91bW9kc2kzLlMKaW5kZXggNGYyYjc2ZS4uMTY4ZWJhNyAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9saWIvdW1vZHNpMy5TCisrKyBiL2FyY2gvYmxhY2tmaW4vbGliL3Vtb2RzaTMuUwpAQCAtMSwzMCArMSw5IEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL2xpYi91bW9kc2kzLlMKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogbGliZ2NjMSByb3V0aW5lcyBmb3IgQmxhY2tmaW4gNXh4CiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOiAgbGliZ2NjMSByb3V0aW5lcyBmb3IgQmxhY2tmaW4gNXh4CisgKiBDb3B5cmlnaHQgMjAwNC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwNiBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQURJIEJTRCBsaWNlbnNlIG9yIHRoZSBHUEwtMiAob3IgbGF0ZXIpCiAgKi8KIAogI2lmZGVmIENPTkZJR19BUklUSE1FVElDX09QU19MMQpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9saWIvdW11bHNpM19oaWdocGFydC5TIGIvYXJjaC9ibGFja2Zpbi9saWIvdW11bHNpM19oaWdocGFydC5TCmluZGV4IDY3Yjc5OTMuLjA1MTgyNGEgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbGliL3VtdWxzaTNfaGlnaHBhcnQuUworKysgYi9hcmNoL2JsYWNrZmluL2xpYi91bXVsc2kzX2hpZ2hwYXJ0LlMKQEAgLTEsMyArMSw5IEBACisvKgorICogQ29weXJpZ2h0IDIwMDcgQW5hbG9nIERldmljZXMgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBREkgQlNEIGxpY2Vuc2Ugb3IgdGhlIEdQTC0yIChvciBsYXRlcikKKyAqLworCiAuYWxpZ24gMgogLmdsb2JhbCBfX191bXVsc2kzX2hpZ2hwYXJ0OwogLnR5cGUgX19fdW11bHNpM19oaWdocGFydCwgU1RUX0ZVTkM7CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvYm9hcmRzL2V6YnJkLmMgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvYm9hcmRzL2V6YnJkLmMKaW5kZXggMDNlNGE5OS4uMDE5NzVjMCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2JvYXJkcy9lemJyZC5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9ib2FyZHMvZXpicmQuYwpAQCAtMSwzMSArMSw5IEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvYm9hcmRzL2V6YnJkLmMKLSAqIEJhc2VkIG9uOiAgICAgYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2JvYXJkcy9lemJyZC5jCi0gKiBBdXRob3I6ICAgICAgIEJyeWFuIFd1IDxjb29sb25leUBrZXJuZWwub3JnPgorICogQ29weXJpZ2h0IDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKiAgICAgICAgICAgICAgICAyMDA1IE5hdGlvbmFsIElDVCBBdXN0cmFsaWEgKE5JQ1RBKQorICogICAgICAgICAgICAgICAgICAgICAgQWlkYW4gV2lsbGlhbXMgPGFpZGFuQG5pY3RhLmNvbS5hdT4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246Ci0gKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA1IE5hdGlvbmFsIElDVCBBdXN0cmFsaWEgKE5JQ1RBKQotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CkBAIC01NzEsMTkgKzU0OSw2IEBACiB9OwogI2VuZGlmCiAKLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgYmZpbl9ncGlvc19yZXNvdXJjZXMgPSB7Ci0JLnN0YXJ0ID0gMCwKLQkuZW5kICAgPSBNQVhfQkxBQ0tGSU5fR1BJT1MgLSAxLAotCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYmZpbl9ncGlvc19kZXZpY2UgPSB7Ci0JLm5hbWUgPSAic2ltcGxlLWdwaW8iLAotCS5pZCA9IC0xLAotCS5udW1fcmVzb3VyY2VzID0gMSwKLQkucmVzb3VyY2UgPSAmYmZpbl9ncGlvc19yZXNvdXJjZXMsCi19OwotCiBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGNjbGtfdmxldl9kYXRhc2hlZXRbXSA9CiB7CiAJVlJQQUlSKFZMRVZfMTAwLCA0MDAwMDAwMDApLApAQCAtNjYwLDggKzYyNSw2IEBACiAjaWYgZGVmaW5lZChDT05GSUdfTVREX1BIWVNNQVApIHx8IGRlZmluZWQoQ09ORklHX01URF9QSFlTTUFQX01PRFVMRSkKIAkmZXpicmRfZmxhc2hfZGV2aWNlLAogI2VuZGlmCi0KLQkmYmZpbl9ncGlvc19kZXZpY2UsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBlemJyZF9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvZG1hLmMgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvZG1hLmMKaW5kZXggNjk4ZTg4Yy4uNzhiNDM2MCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2RtYS5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9kbWEuYwpAQCAtMSwzMSArMSwxMSBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2RtYS5jCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjogICAgICAgQnJ5YW4gV3UgPGNvb2xvbmV5QGtlcm5lbC5vcmc+CisgKiB0aGUgc2ltcGxlIERNQSBJbXBsZW1lbnRhdGlvbiBmb3IgQmxhY2tmaW4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246ICBUaGlzIGZpbGUgY29udGFpbnMgdGhlIHNpbXBsZSBETUEgSW1wbGVtZW50YXRpb24gZm9yIEJsYWNrZmluCisgKiBDb3B5cmlnaHQgMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCisKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KIAogI2luY2x1ZGUgPGFzbS9ibGFja2Zpbi5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9iZjUxOC5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9iZjUxOC5oCmluZGV4IDc4ZGExYTAuLjg1NmIzMzAgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvYmY1MTguaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2JmNTE4LmgKQEAgLTEsMzAgKzEsNyBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjUxOC9iZjUxOC5oCi0gKiBCYXNlZCBvbjoJaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjUyNy9iZjUyNy5oCi0gKiBBdXRob3I6CU1pY2hhZWwgSGVubmVyaWNoIChtaWNoYWVsLmhlbm5lcmljaEBhbmFsb2cuY29tKQorICogQ29weXJpZ2h0IDIwMDggQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjogIFNZU1RFTSBNTVIgUkVHSVNURVIgQU5EIE1FTU9SWSBNQVAgRk9SIEFEU1AtQkY1MTgKLSAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwNyBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2lmbmRlZiBfX01BQ0hfQkY1MThfSF9fCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2JmaW5fc2VyaWFsXzV4eC5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9iZmluX3NlcmlhbF81eHguaAppbmRleCBkYmFkZTkzLi45NzBkMzEwIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2JmaW5fc2VyaWFsXzV4eC5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvYmZpbl9zZXJpYWxfNXh4LmgKQEAgLTEsMzIgKzEsNyBAQAogLyoKLSAqIGZpbGU6ICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTE4L2JmaW5fc2VyaWFsXzV4eC5oCi0gKiBiYXNlZCBvbjoKLSAqIGF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA4LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIGNyZWF0ZWQ6Ci0gKiBkZXNjcmlwdGlvbjoKLSAqCWJsYWNrZmluIHNlcmlhbCBkcml2ZXIgaGVhZCBmaWxlCi0gKiByZXY6Ci0gKgotICogbW9kaWZpZWQ6Ci0gKgotICoKLSAqIGJ1Z3M6ICAgICAgICAgZW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogdGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgZ251IGdlbmVyYWwgcHVibGljIGxpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgZnJlZSBzb2Z0d2FyZSBmb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gKiBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiB0aGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCB3aXRob3V0IGFueSB3YXJyYW50eTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBtZXJjaGFudGFiaWxpdHkgb3IgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UuICBzZWUgdGhlCi0gKiBnbnUgZ2VuZXJhbCBwdWJsaWMgbGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIGdudSBnZW5lcmFsIHB1YmxpYyBsaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIGNvcHlpbmcuCi0gKiBpZiBub3QsIHdyaXRlIHRvIHRoZSBmcmVlIHNvZnR3YXJlIGZvdW5kYXRpb24sCi0gKiA1OSB0ZW1wbGUgcGxhY2UgLSBzdWl0ZSAzMzAsIGJvc3RvbiwgbWEgMDIxMTEtMTMwNywgdXNhLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9ibGFja2Zpbi5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9ibGFja2Zpbi5oCmluZGV4IDgzNDIxZDMuLjZjZmIyNDYgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvYmxhY2tmaW4uaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2JsYWNrZmluLmgKQEAgLTEsMzIgKzEsNyBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjUxOC9ibGFja2Zpbi5oCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA4LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjoKLSAqCi0gKiBSZXY6Ci0gKgotICogTW9kaWZpZWQ6Ci0gKgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gKiBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCi0gKiBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0gKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyCiAgKi8KIAogI2lmbmRlZiBfTUFDSF9CTEFDS0ZJTl9IXwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9jZGVmQkY1MTIuaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvY2RlZkJGNTEyLmgKaW5kZXggODIwYzEzYy4uNDkzMDIwZCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9jZGVmQkY1MTIuaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2NkZWZCRjUxMi5oCkBAIC0xLDMyICsxLDcgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGluY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1MTgvY2RlZmJmNTEyLmgKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogQ29weXJpZ2h0IDIwMDgtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOiAgc3lzdGVtIG1tciByZWdpc3RlciBtYXAKLSAqCi0gKiBSZXY6Ci0gKgotICogTW9kaWZpZWQ6Ci0gKgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gKiBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCi0gKiBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0gKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFESSBCU0QgbGljZW5zZSBvciB0aGUgR1BMLTIgKG9yIGxhdGVyKQogICovCiAKICNpZm5kZWYgX0NERUZfQkY1MTJfSApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9jZGVmQkY1MTQuaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvY2RlZkJGNTE0LmgKaW5kZXggZGZlNDkyZC4uZTFkOTk5MSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9jZGVmQkY1MTQuaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2NkZWZCRjUxNC5oCkBAIC0xLDMyICsxLDcgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGluY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1MTgvY2RlZmJmNTE0LmgKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogQ29weXJpZ2h0IDIwMDgtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOiAgc3lzdGVtIG1tciByZWdpc3RlciBtYXAKLSAqCi0gKiBSZXY6Ci0gKgotICogTW9kaWZpZWQ6Ci0gKgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gKiBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCi0gKiBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0gKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyCiAgKi8KIAogI2lmbmRlZiBfQ0RFRl9CRjUxNF9ICmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2NkZWZCRjUxNi5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9jZGVmQkY1MTYuaAppbmRleCAxNGRmNDNkLi42YjM2NGVkIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2NkZWZCRjUxNi5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvY2RlZkJGNTE2LmgKQEAgLTEsMzIgKzEsNyBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjUxOC9jZGVmYmY1MTYuaAotICogQmFzZWQgb246Ci0gKiBBdXRob3I6CisgKiBDb3B5cmlnaHQgMjAwOC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246ICBzeXN0ZW0gbW1yIHJlZ2lzdGVyIG1hcAotICoKLSAqIFJldjoKLSAqCi0gKiBNb2RpZmllZDoKLSAqCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAqIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KLSAqIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKLSAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIKICAqLwogCiAjaWZuZGVmIF9DREVGX0JGNTE2X0gKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvY2RlZkJGNTE4LmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2NkZWZCRjUxOC5oCmluZGV4IGJhZmIzNzAuLjkyOWI5MDYgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvY2RlZkJGNTE4LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9jZGVmQkY1MTguaApAQCAtMSwzMiArMSw3IEBACiAvKgotICogRmlsZTogICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTE4L2NkZWZiZjUxOC5oCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA4LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjogIHN5c3RlbSBtbXIgcmVnaXN0ZXIgbWFwCi0gKgotICogUmV2OgotICoKLSAqIE1vZGlmaWVkOgotICoKLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICogYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgotICogSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlcgogICovCiAKICNpZm5kZWYgX0NERUZfQkY1MThfSApAQCAtMjExLDYgKzE4Niw0NyBAQAogI2RlZmluZSBiZmluX3JlYWRfRU1BQ19UWENfQUJPUlQoKQkJYmZpbl9yZWFkMzIoRU1BQ19UWENfQUJPUlQpCiAjZGVmaW5lIGJmaW5fd3JpdGVfRU1BQ19UWENfQUJPUlQodmFsKQkJYmZpbl93cml0ZTMyKEVNQUNfVFhDX0FCT1JULCB2YWwpCiAKKyNkZWZpbmUgYmZpbl9yZWFkX0VNQUNfUFRQX0NUTCgpICAgICAgICAgICAgICAgIGJmaW5fcmVhZDE2KEVNQUNfUFRQX0NUTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9FTUFDX1BUUF9DVEwodmFsKSAgICAgICAgICAgIGJmaW5fd3JpdGUxNihFTUFDX1BUUF9DVEwsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0VNQUNfUFRQX0lFKCkgICAgICAgICAgICAgICAgIGJmaW5fcmVhZDE2KEVNQUNfUFRQX0lFKQorI2RlZmluZSBiZmluX3dyaXRlX0VNQUNfUFRQX0lFKHZhbCkgICAgICAgICAgICAgYmZpbl93cml0ZTE2KEVNQUNfUFRQX0lFLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9FTUFDX1BUUF9JU1RBVCgpICAgICAgICAgICAgICBiZmluX3JlYWQxNihFTUFDX1BUUF9JU1RBVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9FTUFDX1BUUF9JU1RBVCh2YWwpICAgICAgICAgIGJmaW5fd3JpdGUxNihFTUFDX1BUUF9JU1RBVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRU1BQ19QVFBfRk9GRigpICAgICAgICAgICAgICAgYmZpbl9yZWFkMzIoRU1BQ19QVFBfRk9GRikKKyNkZWZpbmUgYmZpbl93cml0ZV9FTUFDX1BUUF9GT0ZGKHZhbCkgICAgICAgICAgIGJmaW5fd3JpdGUzMihFTUFDX1BUUF9GT0ZGLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9FTUFDX1BUUF9GVjEoKSAgICAgICAgICAgICAgICBiZmluX3JlYWQzMihFTUFDX1BUUF9GVjEpCisjZGVmaW5lIGJmaW5fd3JpdGVfRU1BQ19QVFBfRlYxKHZhbCkgICAgICAgICAgICBiZmluX3dyaXRlMzIoRU1BQ19QVFBfRlYxLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9FTUFDX1BUUF9GVjIoKSAgICAgICAgICAgICAgICBiZmluX3JlYWQzMihFTUFDX1BUUF9GVjIpCisjZGVmaW5lIGJmaW5fd3JpdGVfRU1BQ19QVFBfRlYyKHZhbCkgICAgICAgICAgICBiZmluX3dyaXRlMzIoRU1BQ19QVFBfRlYyLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9FTUFDX1BUUF9GVjMoKSAgICAgICAgICAgICAgICBiZmluX3JlYWQzMihFTUFDX1BUUF9GVjMpCisjZGVmaW5lIGJmaW5fd3JpdGVfRU1BQ19QVFBfRlYzKHZhbCkgICAgICAgICAgICBiZmluX3dyaXRlMzIoRU1BQ19QVFBfRlYzLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9FTUFDX1BUUF9BRERFTkQoKSAgICAgICAgICAgICBiZmluX3JlYWQzMihFTUFDX1BUUF9BRERFTkQpCisjZGVmaW5lIGJmaW5fd3JpdGVfRU1BQ19QVFBfQURERU5EKHZhbCkgICAgICAgICBiZmluX3dyaXRlMzIoRU1BQ19QVFBfQURERU5ELCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9FTUFDX1BUUF9BQ0NSKCkgICAgICAgICAgICAgICBiZmluX3JlYWQzMihFTUFDX1BUUF9BQ0NSKQorI2RlZmluZSBiZmluX3dyaXRlX0VNQUNfUFRQX0FDQ1IodmFsKSAgICAgICAgICAgYmZpbl93cml0ZTMyKEVNQUNfUFRQX0FDQ1IsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0VNQUNfUFRQX09GRlNFVCgpICAgICAgICAgICAgIGJmaW5fcmVhZDMyKEVNQUNfUFRQX09GRlNFVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9FTUFDX1BUUF9PRkZTRVQodmFsKSAgICAgICAgIGJmaW5fd3JpdGUzMihFTUFDX1BUUF9PRkZTRVQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0VNQUNfUFRQX1RJTUVMTygpICAgICAgICAgICAgIGJmaW5fcmVhZDMyKEVNQUNfUFRQX1RJTUVMTykKKyNkZWZpbmUgYmZpbl93cml0ZV9FTUFDX1BUUF9USU1FTE8odmFsKSAgICAgICAgIGJmaW5fd3JpdGUzMihFTUFDX1BUUF9USU1FTE8sIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0VNQUNfUFRQX1RJTUVISSgpICAgICAgICAgICAgIGJmaW5fcmVhZDMyKEVNQUNfUFRQX1RJTUVISSkKKyNkZWZpbmUgYmZpbl93cml0ZV9FTUFDX1BUUF9USU1FSEkodmFsKSAgICAgICAgIGJmaW5fd3JpdGUzMihFTUFDX1BUUF9USU1FSEksIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0VNQUNfUFRQX1JYU05BUExPKCkgICAgICAgICAgIGJmaW5fcmVhZDMyKEVNQUNfUFRQX1JYU05BUExPKQorI2RlZmluZSBiZmluX3JlYWRfRU1BQ19QVFBfUlhTTkFQSEkoKSAgICAgICAgICAgYmZpbl9yZWFkMzIoRU1BQ19QVFBfUlhTTkFQSEkpCisjZGVmaW5lIGJmaW5fcmVhZF9FTUFDX1BUUF9UWFNOQVBMTygpICAgICAgICAgICBiZmluX3JlYWQzMihFTUFDX1BUUF9UWFNOQVBMTykKKyNkZWZpbmUgYmZpbl9yZWFkX0VNQUNfUFRQX1RYU05BUEhJKCkgICAgICAgICAgIGJmaW5fcmVhZDMyKEVNQUNfUFRQX1RYU05BUEhJKQorI2RlZmluZSBiZmluX3JlYWRfRU1BQ19QVFBfQUxBUk1MTygpICAgICAgICAgICAgYmZpbl9yZWFkMzIoRU1BQ19QVFBfQUxBUk1MTykKKyNkZWZpbmUgYmZpbl93cml0ZV9FTUFDX1BUUF9BTEFSTUxPKHZhbCkgICAgICAgIGJmaW5fd3JpdGUzMihFTUFDX1BUUF9BTEFSTUxPLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9FTUFDX1BUUF9BTEFSTUhJKCkgICAgICAgICAgICBiZmluX3JlYWQzMihFTUFDX1BUUF9BTEFSTUhJKQorI2RlZmluZSBiZmluX3dyaXRlX0VNQUNfUFRQX0FMQVJNSEkodmFsKSAgICAgICAgYmZpbl93cml0ZTMyKEVNQUNfUFRQX0FMQVJNSEksIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0VNQUNfUFRQX0lEX09GRigpICAgICAgICAgICAgIGJmaW5fcmVhZDE2KEVNQUNfUFRQX0lEX09GRikKKyNkZWZpbmUgYmZpbl93cml0ZV9FTUFDX1BUUF9JRF9PRkYodmFsKSAgICAgICAgIGJmaW5fd3JpdGUxNihFTUFDX1BUUF9JRF9PRkYsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0VNQUNfUFRQX0lEX1NOQVAoKSAgICAgICAgICAgIGJmaW5fcmVhZDMyKEVNQUNfUFRQX0lEX1NOQVApCisjZGVmaW5lIGJmaW5fd3JpdGVfRU1BQ19QVFBfSURfU05BUCh2YWwpICAgICAgICBiZmluX3dyaXRlMzIoRU1BQ19QVFBfSURfU05BUCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRU1BQ19QVFBfUFBTX1NUQVJUSEkoKSAgICAgICAgYmZpbl9yZWFkMzIoRU1BQ19QVFBfUFBTX1NUQVJUSEkpCisjZGVmaW5lIGJmaW5fd3JpdGVfRU1BQ19QVFBfUFBTX1NUQVJUSEkodmFsKSAgICBiZmluX3dyaXRlMzIoRU1BQ19QVFBfUFBTX1NUQVJUSEksIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0VNQUNfUFRQX1BQU19QRVJJT0QoKSAgICAgICAgIGJmaW5fcmVhZDMyKEVNQUNfUFRQX1BQU19QRVJJT0QpCisjZGVmaW5lIGJmaW5fd3JpdGVfRU1BQ19QVFBfUFBTX1BFUklPRCh2YWwpICAgICBiZmluX3dyaXRlMzIoRU1BQ19QVFBfUFBTX1BFUklPRCwgdmFsKQorCiAvKiBSZW1vdmFibGUgU3RvcmFnZSBJbnRlcmZhY2UgUmVnaXN0ZXJzICovCiAKICNkZWZpbmUgYmZpbl9yZWFkX1JTSV9QV1JfQ1RMKCkgICAgICAgIGJmaW5fcmVhZDE2KFJTSV9QV1JfQ09OVFJPTCkKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvY2RlZkJGNTF4X2Jhc2UuaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvY2RlZkJGNTF4X2Jhc2UuaAppbmRleCBlZTNkNDczLi4xZDk3MGRmIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2NkZWZCRjUxeF9iYXNlLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9jZGVmQkY1MXhfYmFzZS5oCkBAIC0xLDMxICsxLDcgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGluY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1MTgvY2RlZkJGNTF4X2Jhc2UuaAotICogQmFzZWQgb246Ci0gKiBBdXRob3I6CisgKiBDb3B5cmlnaHQgMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOgotICoKLSAqIFJldjoKLSAqCi0gKiBNb2RpZmllZDoKLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICogYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgotICogSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlcgogICovCiAKICNpZm5kZWYgX0NERUZfQkY1MlhfSApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9kZWZCRjUxMi5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9kZWZCRjUxMi5oCmluZGV4IGE5NmNhOTAuLjliNTA1YmIgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvZGVmQkY1MTIuaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2RlZkJGNTEyLmgKQEAgLTEsMzEgKzEsNyBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjUxOC9kZWZCRjUxMi5oCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246Ci0gKgotICogUmV2OgotICoKLSAqIE1vZGlmaWVkOgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gKiBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCi0gKiBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0gKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFESSBCU0QgbGljZW5zZSBvciB0aGUgR1BMLTIgKG9yIGxhdGVyKQogICovCiAKICNpZm5kZWYgX0RFRl9CRjUxMl9ICmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2RlZkJGNTE0LmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2RlZkJGNTE0LmgKaW5kZXggNTZlZTVhNy4uYjVhZGNhMiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9kZWZCRjUxNC5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvZGVmQkY1MTQuaApAQCAtMSwzMSArMSw3IEBACiAvKgotICogRmlsZTogICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTE4L2RlZkJGNTE0LmgKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogQ29weXJpZ2h0IDIwMDgtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOgotICoKLSAqIFJldjoKLSAqCi0gKiBNb2RpZmllZDoKLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICogYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgotICogSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBREkgQlNEIGxpY2Vuc2Ugb3IgdGhlIEdQTC0yIChvciBsYXRlcikKICAqLwogCiAjaWZuZGVmIF9ERUZfQkY1MTRfSApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9kZWZCRjUxNi5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9kZWZCRjUxNi5oCmluZGV4IGRmYzkzODQuLjdlYjE4NzcgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvZGVmQkY1MTYuaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2RlZkJGNTE2LmgKQEAgLTEsMzEgKzEsNyBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjUxOC9kZWZCRjUxNi5oCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA4LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjoKLSAqCi0gKiBSZXY6Ci0gKgotICogTW9kaWZpZWQ6Ci0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAqIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KLSAqIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKLSAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQURJIEJTRCBsaWNlbnNlIG9yIHRoZSBHUEwtMiAob3IgbGF0ZXIpCiAgKi8KIAogI2lmbmRlZiBfREVGX0JGNTE2X0gKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvZGVmQkY1MTguaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvZGVmQkY1MTguaAppbmRleCA2ZTk4MmFiLi43OTRjZjA2IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2RlZkJGNTE4LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9kZWZCRjUxOC5oCkBAIC0xLDMxICsxLDcgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGluY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1MTgvZGVmQkY1MTguaAotICogQmFzZWQgb246Ci0gKiBBdXRob3I6CisgKiBDb3B5cmlnaHQgMjAwOC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246Ci0gKgotICogUmV2OgotICoKLSAqIE1vZGlmaWVkOgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gKiBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCi0gKiBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0gKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFESSBCU0QgbGljZW5zZSBvciB0aGUgR1BMLTIgKG9yIGxhdGVyKQogICovCiAKICNpZm5kZWYgX0RFRl9CRjUxOF9ICkBAIC02NDgsNCArNjI0LDMyIEBACiAKICNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIFJXUiAgMHgxICAgICAgICAvKiBSZWFkIFdhaXQgUmVxdWVzdCAqLwogCisvKiBCaXQgbWFza3MgZm9yIEVNQUNfUFRQX0NUTCAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBQVFBfRU4gIDB4MSAgICAgICAgLyogRW5hYmxlIHRoZSBQVFBfVFNZTkMgbW9kdWxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICAgVEwgIDB4MiAgICAgICAgLyogVGltZXN0YW1wIGxvY2sgY29udHJvbCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBBU0VOICAweDEwICAgICAgIC8qIEF1eGlsaWFyeSBzbmFwc2hvdCBjb250cm9sICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgUFBTRU4gIDB4ODAgICAgICAgLyogUHVsc2UtcGVyLXNlY29uZCAoUFBTKSBjb250cm9sICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgQ0tPRU4gIDB4MjAwMCAgICAgLyogQ2xvY2sgb3V0cHV0IGNvbnRyb2wgKi8KKworLyogQml0IG1hc2tzIGZvciBFTUFDX1BUUF9JRSAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIEFMSUUgIDB4MSAgICAgICAgLyogQWxhcm0gaW50ZXJydXB0IGVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFJYRUlFICAweDIgICAgICAgIC8qIFJlY2VpdmUgZXZlbnQgaW50ZXJydXB0IGVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFJYR0lFICAweDQgICAgICAgIC8qIFJlY2VpdmUgZ2VuZXJhbCBpbnRlcnJ1cHQgZW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFRYSUUgIDB4OCAgICAgICAgLyogVHJhbnNtaXQgaW50ZXJydXB0IGVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFJYT1ZFICAweDEwICAgICAgIC8qIFJlY2VpdmUgb3ZlcnJ1biBlcnJvciBpbnRlcnJ1cHQgZW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgVFhPVkUgIDB4MjAgICAgICAgLyogVHJhbnNtaXQgb3ZlcnJ1biBlcnJvciBpbnRlcnJ1cHQgZW5hYmxlICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIEFTSUUgIDB4NDAgICAgICAgLyogQXV4aWxpYXJ5IHNuYXBzaG90IGludGVycnVwdCBlbmFibGUgKi8KKworLyogQml0IG1hc2tzIGZvciBFTUFDX1BUUF9JU1RBVCAqLworCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBBTFMgIDB4MSAgICAgICAgLyogQWxhcm0gc3RhdHVzICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFJYRUwgIDB4MiAgICAgICAgLyogUmVjZWl2ZSBldmVudCBpbnRlcnJ1cHQgc3RhdHVzICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFJYR0wgIDB4NCAgICAgICAgLyogUmVjZWl2ZSBnZW5lcmFsIGludGVycnVwdCBzdGF0dXMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgVFhUTCAgMHg4ICAgICAgICAvKiBUcmFuc21pdCBzbmFwc2hvdCBzdGF0dXMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgUlhPViAgMHgxMCAgICAgICAvKiBSZWNlaXZlIHNuYXBzaG90IG92ZXJydW4gc3RhdHVzICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFRYT1YgIDB4MjAgICAgICAgLyogVHJhbnNtaXQgc25hcHNob3Qgb3ZlcnJ1biBzdGF0dXMgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIEFTTCAgMHg0MCAgICAgICAvKiBBdXhpbGlhcnkgc25hcHNob3QgaW50ZXJydXB0IHN0YXR1cyAqLworCiAjZW5kaWYgLyogX0RFRl9CRjUxOF9IICovCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2RlZkJGNTF4X2Jhc2UuaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvZGVmQkY1MXhfYmFzZS5oCmluZGV4IDFiZWM4ZDEuLmUwNmY0MTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvZGVmQkY1MXhfYmFzZS5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvZGVmQkY1MXhfYmFzZS5oCkBAIC0xLDMxICsxLDcgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGluY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1MTgvZGVmQkY1MXhfYmFzZS5oCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246Ci0gKgotICogUmV2OgotICoKLSAqIE1vZGlmaWVkOgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gKiBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCi0gKiBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0gKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFESSBCU0QgbGljZW5zZSBvciB0aGUgR1BMLTIgKG9yIGxhdGVyKQogICovCiAKICNpZm5kZWYgX0RFRl9CRjUxWF9ICmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2dwaW8uaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvZ3Bpby5oCmluZGV4IDk3NTc2ODMuLmJiYWIyZDcgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvZ3Bpby5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvZ3Bpby5oCkBAIC0xLDcgKzEsNCBAQAogLyoKLSAqIEZpbGU6IGFyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvZ3Bpby5oCi0gKiBCdWdzOiBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggQW5hbG9nIERldmljZXMgSW5jLgogICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2lycS5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9pcnEuaAppbmRleCAzZmYwZjA5Li4xNGU1MmVjIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2lycS5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvaXJxLmgKQEAgLTEsMzIgKzEsNyBAQAogLyoKLSAqIGZpbGU6CWluY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1MTgvaXJxLmgKLSAqIGJhc2VkIG9uOglpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTI3L2lycS5oCi0gKiBhdXRob3I6CU1pY2hhZWwgSGVubmVyaWNoIChtaWNoYWVsLmhlbm5lcmljaEBhbmFsb2cuY29tKQorICogQ29weXJpZ2h0IDIwMDggQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIGNyZWF0ZWQ6Ci0gKiBkZXNjcmlwdGlvbjoKLSAqCXN5c3RlbSBtbXIgcmVnaXN0ZXIgbWFwCi0gKiByZXY6Ci0gKgotICogbW9kaWZpZWQ6Ci0gKgotICoKLSAqIGJ1Z3M6ICAgICAgICAgZW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogdGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgZ251IGdlbmVyYWwgcHVibGljIGxpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgZnJlZSBzb2Z0d2FyZSBmb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gKiBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiB0aGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCB3aXRob3V0IGFueSB3YXJyYW50eTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBtZXJjaGFudGFiaWxpdHkgb3IgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UuICBzZWUgdGhlCi0gKiBnbnUgZ2VuZXJhbCBwdWJsaWMgbGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIGdudSBnZW5lcmFsIHB1YmxpYyBsaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIGNvcHlpbmcuCi0gKiBpZiBub3QsIHdyaXRlIHRvIHRoZSBmcmVlIHNvZnR3YXJlIGZvdW5kYXRpb24sCi0gKiA1OSB0ZW1wbGUgcGxhY2UgLSBzdWl0ZSAzMzAsIGJvc3RvbiwgbWEgMDIxMTEtMTMwNywgdXNhLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyCiAgKi8KIAogI2lmbmRlZiBfQkY1MThfSVJRX0hfCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL3BvcnRtdXguaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvcG9ydG11eC5oCmluZGV4IGEwZmM3N2YuLmUzNTI5MTAgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvcG9ydG11eC5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvcG9ydG11eC5oCkBAIC0xLDMgKzEsOSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA4LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlcgorICovCisKICNpZm5kZWYgX01BQ0hfUE9SVE1VWF9IXwogI2RlZmluZSBfTUFDSF9QT1JUTVVYX0hfCiAKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbnRzLXByaW9yaXR5LmMgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW50cy1wcmlvcml0eS5jCmluZGV4IDMxNTFmZDUuLmJiMDViZWYgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbnRzLXByaW9yaXR5LmMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2ludHMtcHJpb3JpdHkuYwpAQCAtMSwzMCArMSw5IEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW50cy1wcmlvcml0eS5jCi0gKiBCYXNlZCBvbjogICAgIGFyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbnRzLXByaW9yaXR5LmMKLSAqIEF1dGhvcjogICAgICAgQnJ5YW4gV3UgPGNvb2xvbmV5QGtlcm5lbC5vcmc+CisgKiBTZXQgdXAgdGhlIGludGVycnVwdCBwcmlvcml0aWVzCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOiAgU2V0IHVwIHRoZSBpbnRlcnJ1cHQgcHJpb3JpdGllcworICogQ29weXJpZ2h0IDIwMDggQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA3IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvYm9hcmRzL2NtX2JmNTI3LmMgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvYm9hcmRzL2NtX2JmNTI3LmMKaW5kZXggMDhhM2YwMS4uZjE5OTZiMSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2JvYXJkcy9jbV9iZjUyNy5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9ib2FyZHMvY21fYmY1MjcuYwpAQCAtMSwzMSArMSwxMCBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2JvYXJkcy9jbS1iZjUyNy5jCi0gKiBCYXNlZCBvbjogICAgIGFyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9ib2FyZHMvc3RhbXAuYwotICogQXV0aG9yOiAgICAgICBBaWRhbiBXaWxsaWFtcyA8YWlkYW5AbmljdGEuY29tLmF1PgorICogQ29weXJpZ2h0IDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKiAgICAgICAgICAgMjAwOC0yMDA5IEJsdWV0ZWNobml4CisgKiAgICAgICAgICAgICAgICAyMDA1IE5hdGlvbmFsIElDVCBBdXN0cmFsaWEgKE5JQ1RBKQorICogICAgICAgICAgICAgICAgICAgICAgQWlkYW4gV2lsbGlhbXMgPGFpZGFuQG5pY3RhLmNvbS5hdT4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246Ci0gKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA1IE5hdGlvbmFsIElDVCBBdXN0cmFsaWEgKE5JQ1RBKQotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CkBAIC02MTYsMTIgKzU5NSw2IEBACiB9OwogI2VuZGlmICAvKiBzcGkgbWFzdGVyIGFuZCBkZXZpY2VzICovCiAKLSNpZiBkZWZpbmVkKENPTkZJR19GQl9CRklOXzczOTMpIHx8IGRlZmluZWQoQ09ORklHX0ZCX0JGSU5fNzM5M19NT0RVTEUpCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBiZmluX2ZiX2FkdjczOTNfZGV2aWNlID0gewotCS5uYW1lID0gImJmaW4tYWR2NzM5MyIsCi19OwotI2VuZGlmCi0KICNpZiBkZWZpbmVkKENPTkZJR19NVERfR1BJT19BRERSKSB8fCBkZWZpbmVkKENPTkZJR19NVERfR1BJT19BRERSX01PRFVMRSkKIHN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBjbV9wYXJ0aXRpb25zW10gPSB7CiAJewpAQCAtNzg2LDYgKzc1OSwxMSBAQAogCQkuaXJxID0gSVJRX1BGOCwKIAl9LAogI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfRkJfQkZJTl83MzkzKSB8fCBkZWZpbmVkKENPTkZJR19GQl9CRklOXzczOTNfTU9EVUxFKQorCXsKKwkJSTJDX0JPQVJEX0lORk8oImJmaW4tYWR2NzM5MyIsIDB4MkIpLAorCX0sCisjZW5kaWYKIH07CiAKICNpZiBkZWZpbmVkKENPTkZJR19TRVJJQUxfQkZJTl9TUE9SVCkgfHwgZGVmaW5lZChDT05GSUdfU0VSSUFMX0JGSU5fU1BPUlRfTU9EVUxFKQpAQCAtODIxLDE5ICs3OTksNiBAQAogfTsKICNlbmRpZgogCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGJmaW5fZ3Bpb3NfcmVzb3VyY2VzID0gewotCS5zdGFydCA9IDAsCi0JLmVuZCAgID0gTUFYX0JMQUNLRklOX0dQSU9TIC0gMSwKLQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGJmaW5fZ3Bpb3NfZGV2aWNlID0gewotCS5uYW1lID0gInNpbXBsZS1ncGlvIiwKLQkuaWQgPSAtMSwKLQkubnVtX3Jlc291cmNlcyA9IDEsCi0JLnJlc291cmNlID0gJmJmaW5fZ3Bpb3NfcmVzb3VyY2VzLAotfTsKLQogc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBjY2xrX3ZsZXZfZGF0YXNoZWV0W10gPQogewogCVZSUEFJUihWTEVWXzEwMCwgNDAwMDAwMDAwKSwKQEAgLTkwOSwxMCArODc0LDYgQEAKIAkmYmZpbl9zcGkwX2RldmljZSwKICNlbmRpZgogCi0jaWYgZGVmaW5lZChDT05GSUdfRkJfQkZJTl83MzkzKSB8fCBkZWZpbmVkKENPTkZJR19GQl9CRklOXzczOTNfTU9EVUxFKQotCSZiZmluX2ZiX2FkdjczOTNfZGV2aWNlLAotI2VuZGlmCi0KICNpZiBkZWZpbmVkKENPTkZJR19TRVJJQUxfQkZJTikgfHwgZGVmaW5lZChDT05GSUdfU0VSSUFMX0JGSU5fTU9EVUxFKQogCSZiZmluX3VhcnRfZGV2aWNlLAogI2VuZGlmCkBAIC05NDIsOCArOTAzLDYgQEAKICNpZiBkZWZpbmVkKENPTkZJR19NVERfR1BJT19BRERSKSB8fCBkZWZpbmVkKENPTkZJR19NVERfR1BJT19BRERSX01PRFVMRSkKIAkmY21fZmxhc2hfZGV2aWNlLAogI2VuZGlmCi0KLQkmYmZpbl9ncGlvc19kZXZpY2UsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBjbV9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvYm9hcmRzL2V6YnJkLmMgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvYm9hcmRzL2V6YnJkLmMKaW5kZXggNjhiNGM4MC4uY2FkMjNiMSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2JvYXJkcy9lemJyZC5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9ib2FyZHMvZXpicmQuYwpAQCAtMSwzMSArMSw5IEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvYm9hcmRzL2V6YnJkLmMKLSAqIEJhc2VkIG9uOiAgICAgYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2JvYXJkcy9zdGFtcC5jCi0gKiBBdXRob3I6ICAgICAgIEFpZGFuIFdpbGxpYW1zIDxhaWRhbkBuaWN0YS5jb20uYXU+CisgKiBDb3B5cmlnaHQgMjAwNC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqICAgICAgICAgICAgICAgIDIwMDUgTmF0aW9uYWwgSUNUIEF1c3RyYWxpYSAoTklDVEEpCisgKiAgICAgICAgICAgICAgICAgICAgICBBaWRhbiBXaWxsaWFtcyA8YWlkYW5AbmljdGEuY29tLmF1PgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjoKLSAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDUgTmF0aW9uYWwgSUNUIEF1c3RyYWxpYSAoTklDVEEpCi0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KQEAgLTYxMSwxOSArNTg5LDYgQEAKIH07CiAjZW5kaWYKIAotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBiZmluX2dwaW9zX3Jlc291cmNlcyA9IHsKLQkuc3RhcnQgPSAwLAotCS5lbmQgICA9IE1BWF9CTEFDS0ZJTl9HUElPUyAtIDEsCi0JLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBiZmluX2dwaW9zX2RldmljZSA9IHsKLQkubmFtZSA9ICJzaW1wbGUtZ3BpbyIsCi0JLmlkID0gLTEsCi0JLm51bV9yZXNvdXJjZXMgPSAxLAotCS5yZXNvdXJjZSA9ICZiZmluX2dwaW9zX3Jlc291cmNlcywKLX07Ci0KIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgY2Nsa192bGV2X2RhdGFzaGVldFtdID0KIHsKIAlWUlBBSVIoVkxFVl8xMDAsIDQwMDAwMDAwMCksCkBAIC03MzIsOCArNjk3LDYgQEAKICNpZiBkZWZpbmVkKENPTkZJR19NVERfUEhZU01BUCkgfHwgZGVmaW5lZChDT05GSUdfTVREX1BIWVNNQVBfTU9EVUxFKQogCSZlemJyZF9mbGFzaF9kZXZpY2UsCiAjZW5kaWYKLQotCSZiZmluX2dwaW9zX2RldmljZSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IGV6YnJkX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9ib2FyZHMvZXpraXQuYyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9ib2FyZHMvZXpraXQuYwppbmRleCAyODQ5YjA5Li5mMDk2NjVmIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvYm9hcmRzL2V6a2l0LmMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2JvYXJkcy9lemtpdC5jCkBAIC0xLDMxICsxLDkgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9ib2FyZHMvZXpraXQuYwotICogQmFzZWQgb246ICAgICBhcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvYm9hcmRzL3N0YW1wLmMKLSAqIEF1dGhvcjogICAgICAgQWlkYW4gV2lsbGlhbXMgPGFpZGFuQG5pY3RhLmNvbS5hdT4KKyAqIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgorICogICAgICAgICAgICAgICAgMjAwNSBOYXRpb25hbCBJQ1QgQXVzdHJhbGlhIChOSUNUQSkKKyAqICAgICAgICAgICAgICAgICAgICAgIEFpZGFuIFdpbGxpYW1zIDxhaWRhbkBuaWN0YS5jb20uYXU+CiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOgotICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNSBOYXRpb25hbCBJQ1QgQXVzdHJhbGlhIChOSUNUQSkKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgpAQCAtNzE2LDEyICs2OTQsNiBAQAogfTsKICNlbmRpZgogCi0jaWYgZGVmaW5lZChDT05GSUdfRkJfQkZJTl83MzkzKSB8fCBkZWZpbmVkKENPTkZJR19GQl9CRklOXzczOTNfTU9EVUxFKQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYmZpbl9mYl9hZHY3MzkzX2RldmljZSA9IHsKLQkubmFtZSA9ICJiZmluLWFkdjczOTMiLAotfTsKLSNlbmRpZgotCiAjaWYgZGVmaW5lZChDT05GSUdfU0VSSUFMX0JGSU4pIHx8IGRlZmluZWQoQ09ORklHX1NFUklBTF9CRklOX01PRFVMRSkKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgYmZpbl91YXJ0X3Jlc291cmNlc1tdID0gewogI2lmZGVmIENPTkZJR19TRVJJQUxfQkZJTl9VQVJUMApAQCAtODM3LDYgKzgwOSwxMSBAQAogCQkuaXJxID0gSVJRX1BGOCwKIAl9LAogI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfRkJfQkZJTl83MzkzKSB8fCBkZWZpbmVkKENPTkZJR19GQl9CRklOXzczOTNfTU9EVUxFKQorCXsKKwkJSTJDX0JPQVJEX0lORk8oImJmaW4tYWR2NzM5MyIsIDB4MkIpLAorCX0sCisjZW5kaWYKIH07CiAKICNpZiBkZWZpbmVkKENPTkZJR19TRVJJQUxfQkZJTl9TUE9SVCkgfHwgZGVmaW5lZChDT05GSUdfU0VSSUFMX0JGSU5fU1BPUlRfTU9EVUxFKQpAQCAtOTA1LDE5ICs4ODIsNiBAQAogfTsKICNlbmRpZgogCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGJmaW5fZ3Bpb3NfcmVzb3VyY2VzID0gewotCS5zdGFydCA9IDAsCi0JLmVuZCAgID0gTUFYX0JMQUNLRklOX0dQSU9TIC0gMSwKLQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGJmaW5fZ3Bpb3NfZGV2aWNlID0gewotCS5uYW1lID0gInNpbXBsZS1ncGlvIiwKLQkuaWQgPSAtMSwKLQkubnVtX3Jlc291cmNlcyA9IDEsCi0JLnJlc291cmNlID0gJmJmaW5fZ3Bpb3NfcmVzb3VyY2VzLAotfTsKLQogc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBjY2xrX3ZsZXZfZGF0YXNoZWV0W10gPQogewogCVZSUEFJUihWTEVWXzEwMCwgNDAwMDAwMDAwKSwKQEAgLTEwMDEsMTAgKzk2NSw2IEBACiAJJmJmNTJ4X3QzNTBtY3FiX2RldmljZSwKICNlbmRpZgogCi0jaWYgZGVmaW5lZChDT05GSUdfRkJfQkZJTl83MzkzKSB8fCBkZWZpbmVkKENPTkZJR19GQl9CRklOXzczOTNfTU9EVUxFKQotCSZiZmluX2ZiX2FkdjczOTNfZGV2aWNlLAotI2VuZGlmCi0KICNpZiBkZWZpbmVkKENPTkZJR19TRVJJQUxfQkZJTikgfHwgZGVmaW5lZChDT05GSUdfU0VSSUFMX0JGSU5fTU9EVUxFKQogCSZiZmluX3VhcnRfZGV2aWNlLAogI2VuZGlmCkBAIC0xMDM4LDggKzk5OCw2IEBACiAjaWYgZGVmaW5lZChDT05GSUdfTVREX1BIWVNNQVApIHx8IGRlZmluZWQoQ09ORklHX01URF9QSFlTTUFQX01PRFVMRSkKIAkmZXpraXRfZmxhc2hfZGV2aWNlLAogI2VuZGlmCi0KLQkmYmZpbl9ncGlvc19kZXZpY2UsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBlemtpdF9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvZG1hLmMgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvZG1hLmMKaW5kZXggMjMxODc3NS4uN2JjNzU3NyAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2RtYS5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9kbWEuYwpAQCAtMSwzMSArMSwxMSBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2RtYS5jCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIFRoaXMgZmlsZSBjb250YWlucyB0aGUgc2ltcGxlIERNQSBJbXBsZW1lbnRhdGlvbiBmb3IgQmxhY2tmaW4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246ICBUaGlzIGZpbGUgY29udGFpbnMgdGhlIHNpbXBsZSBETUEgSW1wbGVtZW50YXRpb24gZm9yIEJsYWNrZmluCisgKiBDb3B5cmlnaHQgMjAwNy0yMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwNyBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KKwogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogCiAjaW5jbHVkZSA8YXNtL2JsYWNrZmluLmg+CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL2JmNTI3LmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL2JmNTI3LmgKaW5kZXggMzgzMmFhYi4uZmY2OGM4OCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9iZjUyNy5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvYmY1MjcuaApAQCAtMSwzMCArMSw3IEBACiAvKgotICogRmlsZTogICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTI3L2JmNTI3LmgKLSAqIEJhc2VkIG9uOglpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTM3L2JmNTM3LmgKLSAqIEF1dGhvcjoJTWljaGFlbCBIZW5uZXJpY2ggKG1pY2hhZWwuaGVubmVyaWNoQGFuYWxvZy5jb20pCisgKiBDb3B5cmlnaHQgMjAwNy0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246ICBTWVNURU0gTU1SIFJFR0lTVEVSIEFORCBNRU1PUlkgTUFQIEZPUiBBRFNQLUJGNTI3Ci0gKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDcgQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpZm5kZWYgX19NQUNIX0JGNTI3X0hfXwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9iZmluX3NlcmlhbF81eHguaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvYmZpbl9zZXJpYWxfNXh4LmgKaW5kZXggZWJkNmNlYi4uYzFkNTViOCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9iZmluX3NlcmlhbF81eHguaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL2JmaW5fc2VyaWFsXzV4eC5oCkBAIC0xLDMyICsxLDcgQEAKIC8qCi0gKiBmaWxlOiAgICAgICAgaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjUyNy9iZmluX3NlcmlhbF81eHguaAotICogYmFzZWQgb246Ci0gKiBhdXRob3I6CisgKiBDb3B5cmlnaHQgMjAwNy0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBjcmVhdGVkOgotICogZGVzY3JpcHRpb246Ci0gKglibGFja2ZpbiBzZXJpYWwgZHJpdmVyIGhlYWQgZmlsZQotICogcmV2OgotICoKLSAqIG1vZGlmaWVkOgotICoKLSAqCi0gKiBidWdzOiAgICAgICAgIGVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIHRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIGdudSBnZW5lcmFsIHB1YmxpYyBsaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIGZyZWUgc29mdHdhcmUgZm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICogYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogdGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgd2l0aG91dCBhbnkgd2FycmFudHk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogbWVyY2hhbnRhYmlsaXR5IG9yIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlLiAgc2VlIHRoZQotICogZ251IGdlbmVyYWwgcHVibGljIGxpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBnbnUgZ2VuZXJhbCBwdWJsaWMgbGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBjb3B5aW5nLgotICogaWYgbm90LCB3cml0ZSB0byB0aGUgZnJlZSBzb2Z0d2FyZSBmb3VuZGF0aW9uLAotICogNTkgdGVtcGxlIHBsYWNlIC0gc3VpdGUgMzMwLCBib3N0b24sIG1hIDAyMTExLTEzMDcsIHVzYS4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlcgogICovCiAKICNpbmNsdWRlIDxsaW51eC9zZXJpYWwuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvYmxhY2tmaW4uaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvYmxhY2tmaW4uaAppbmRleCBlYTljYjBmLi5lN2Q2MDM0IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL2JsYWNrZmluLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9ibGFja2Zpbi5oCkBAIC0xLDMyICsxLDcgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGluY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1MjcvYmxhY2tmaW4uaAotICogQmFzZWQgb246Ci0gKiBBdXRob3I6CisgKiBDb3B5cmlnaHQgMjAwNy0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246Ci0gKgotICogUmV2OgotICoKLSAqIE1vZGlmaWVkOgotICoKLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICogYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgotICogSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlcgogICovCiAKICNpZm5kZWYgX01BQ0hfQkxBQ0tGSU5fSF8KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvY2RlZkJGNTIyLmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL2NkZWZCRjUyMi5oCmluZGV4IDY2M2MyYmIuLjEwNzlhZjggMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvY2RlZkJGNTIyLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9jZGVmQkY1MjIuaApAQCAtMSwzMiArMSw3IEBACiAvKgotICogRmlsZTogICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTI3L2NkZWZiZjUyMi5oCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA3LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjogIHN5c3RlbSBtbXIgcmVnaXN0ZXIgbWFwCi0gKgotICogUmV2OgotICoKLSAqIE1vZGlmaWVkOgotICoKLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICogYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgotICogSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlcgogICovCiAKICNpZm5kZWYgX0NERUZfQkY1MjJfSApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9jZGVmQkY1MjUuaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvY2RlZkJGNTI1LmgKaW5kZXggMDAzNzdlYi4uZGMzMTE5ZTkgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvY2RlZkJGNTI1LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9jZGVmQkY1MjUuaApAQCAtMSwzMiArMSw3IEBACiAvKgotICogRmlsZTogICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTI3L2NkZWZiZjUyNS5oCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA3LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjogIHN5c3RlbSBtbXIgcmVnaXN0ZXIgbWFwCi0gKgotICogUmV2OgotICoKLSAqIE1vZGlmaWVkOgotICoKLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICogYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgotICogSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlcgogICovCiAKICNpZm5kZWYgX0NERUZfQkY1MjVfSApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9jZGVmQkY1MjcuaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvY2RlZkJGNTI3LmgKaW5kZXggZmNhOGRiNy4uZDY1Nzk0NDkgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvY2RlZkJGNTI3LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9jZGVmQkY1MjcuaApAQCAtMSwzMiArMSw3IEBACiAvKgotICogRmlsZTogICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTI3L2NkZWZiZjUyNy5oCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA3LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjogIHN5c3RlbSBtbXIgcmVnaXN0ZXIgbWFwCi0gKgotICogUmV2OgotICoKLSAqIE1vZGlmaWVkOgotICoKLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICogYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgotICogSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlcgogICovCiAKICNpZm5kZWYgX0NERUZfQkY1MjdfSApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9jZGVmQkY1MnhfYmFzZS5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9jZGVmQkY1MnhfYmFzZS5oCmluZGV4IDFmZTc2ZDguLjcwMTRkZGUgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvY2RlZkJGNTJ4X2Jhc2UuaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL2NkZWZCRjUyeF9iYXNlLmgKQEAgLTEsMzEgKzEsNyBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjUyNy9jZGVmQkY1MnhfYmFzZS5oCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA3LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjoKLSAqCi0gKiBSZXY6Ci0gKgotICogTW9kaWZpZWQ6Ci0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAqIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KLSAqIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKLSAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIKICAqLwogCiAjaWZuZGVmIF9DREVGX0JGNTJYX0gKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvZGVmQkY1MjIuaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvZGVmQkY1MjIuaAppbmRleCAwYThjZGNkLi5jYjEzOWEyIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL2RlZkJGNTIyLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9kZWZCRjUyMi5oCkBAIC0xLDMxICsxLDcgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGluY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1MjcvZGVmQkY1MjIuaAotICogQmFzZWQgb246Ci0gKiBBdXRob3I6CisgKiBDb3B5cmlnaHQgMjAwNy0yMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246Ci0gKgotICogUmV2OgotICoKLSAqIE1vZGlmaWVkOgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gKiBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCi0gKiBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0gKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFESSBCU0QgbGljZW5zZSBvciB0aGUgR1BMLTIgKG9yIGxhdGVyKQogICovCiAKICNpZm5kZWYgX0RFRl9CRjUyMl9ICmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL2RlZkJGNTI1LmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL2RlZkJGNTI1LmgKaW5kZXggNWNkNzU3Ni4uODJhYmVmYyAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9kZWZCRjUyNS5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvZGVmQkY1MjUuaApAQCAtMSwzMSArMSw3IEBACiAvKgotICogRmlsZTogICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTI3L2RlZkJGNTI1LmgKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogQ29weXJpZ2h0IDIwMDctMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOgotICoKLSAqIFJldjoKLSAqCi0gKiBNb2RpZmllZDoKLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICogYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgotICogSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBREkgQlNEIGxpY2Vuc2Ugb3IgdGhlIEdQTC0yIChvciBsYXRlcikKICAqLwogCiAjaWZuZGVmIF9ERUZfQkY1MjVfSApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9kZWZCRjUyNy5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9kZWZCRjUyNy5oCmluZGV4IGYwNDBmMzYuLjU3MGExMjUgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvZGVmQkY1MjcuaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL2RlZkJGNTI3LmgKQEAgLTEsMzEgKzEsNyBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjUyNy9kZWZCRjUyNy5oCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA3LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjoKLSAqCi0gKiBSZXY6Ci0gKgotICogTW9kaWZpZWQ6Ci0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAqIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KLSAqIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKLSAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQURJIEJTRCBsaWNlbnNlIG9yIHRoZSBHUEwtMiAob3IgbGF0ZXIpCiAgKi8KIAogI2lmbmRlZiBfREVGX0JGNTI3X0gKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvZGVmQkY1MnhfYmFzZS5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9kZWZCRjUyeF9iYXNlLmgKaW5kZXggNjhiNTVkMC4uZjgyMTcwMCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9kZWZCRjUyeF9iYXNlLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9kZWZCRjUyeF9iYXNlLmgKQEAgLTEsMzEgKzEsNyBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjUyNy9kZWZCRjUyeF9iYXNlLmgKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogQ29weXJpZ2h0IDIwMDctMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOgotICoKLSAqIFJldjoKLSAqCi0gKiBNb2RpZmllZDoKLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICogYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgotICogSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBREkgQlNEIGxpY2Vuc2Ugb3IgdGhlIEdQTC0yIChvciBsYXRlcikKICAqLwogCiAjaWZuZGVmIF9ERUZfQkY1MlhfSApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9ncGlvLmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL2dwaW8uaAppbmRleCAwNmI2ZWViLi4xMDRiZmY4IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL2dwaW8uaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL2dwaW8uaApAQCAtMSw3ICsxLDQgQEAKIC8qCi0gKiBGaWxlOiBhcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL2dwaW8uaAotICogQnVnczogRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgogICogQ29weXJpZ2h0IChDKSAyMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9pcnEuaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvaXJxLmgKaW5kZXggOGVhNjYwZC4uYWE2NTc5YSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9pcnEuaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL2lycS5oCkBAIC0xLDMyICsxLDcgQEAKIC8qCi0gKiBmaWxlOglpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTI3L2lycS5oCi0gKiBiYXNlZCBvbjoJaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjUzNy9pcnEuaAotICogYXV0aG9yOglNaWNoYWVsIEhlbm5lcmljaCAobWljaGFlbC5oZW5uZXJpY2hAYW5hbG9nLmNvbSkKKyAqIENvcHlyaWdodCAyMDA3LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIGNyZWF0ZWQ6Ci0gKiBkZXNjcmlwdGlvbjoKLSAqCXN5c3RlbSBtbXIgcmVnaXN0ZXIgbWFwCi0gKiByZXY6Ci0gKgotICogbW9kaWZpZWQ6Ci0gKgotICoKLSAqIGJ1Z3M6ICAgICAgICAgZW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogdGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgZ251IGdlbmVyYWwgcHVibGljIGxpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgZnJlZSBzb2Z0d2FyZSBmb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gKiBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiB0aGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCB3aXRob3V0IGFueSB3YXJyYW50eTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBtZXJjaGFudGFiaWxpdHkgb3IgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UuICBzZWUgdGhlCi0gKiBnbnUgZ2VuZXJhbCBwdWJsaWMgbGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIGdudSBnZW5lcmFsIHB1YmxpYyBsaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIGNvcHlpbmcuCi0gKiBpZiBub3QsIHdyaXRlIHRvIHRoZSBmcmVlIHNvZnR3YXJlIGZvdW5kYXRpb24sCi0gKiA1OSB0ZW1wbGUgcGxhY2UgLSBzdWl0ZSAzMzAsIGJvc3RvbiwgbWEgMDIxMTEtMTMwNywgdXNhLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyCiAgKi8KIAogI2lmbmRlZiBfQkY1MjdfSVJRX0hfCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL3BvcnRtdXguaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvcG9ydG11eC5oCmluZGV4IDcyYjE2NTIuLmQ0NTE4YjYgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvcG9ydG11eC5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvcG9ydG11eC5oCkBAIC0xLDMgKzEsOSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA3LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlcgorICovCisKICNpZm5kZWYgX01BQ0hfUE9SVE1VWF9IXwogI2RlZmluZSBfTUFDSF9QT1JUTVVYX0hfCiAKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbnRzLXByaW9yaXR5LmMgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW50cy1wcmlvcml0eS5jCmluZGV4IGY4YzhhY2QuLjQ0Y2EyMTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbnRzLXByaW9yaXR5LmMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2ludHMtcHJpb3JpdHkuYwpAQCAtMSwzMCArMSw5IEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvaW50cy1wcmlvcml0eS5jCi0gKiBCYXNlZCBvbjogICAgIGFyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9pbnRzLXByaW9yaXR5LmMKLSAqIEF1dGhvcjogICAgICAgTWljaGFlbCBIZW5uZXJpY2ggKG1pY2hhZWwuaGVubmVyaWNoQGFuYWxvZy5jb20pCisgKiBTZXQgdXAgdGhlIGludGVycnVwdCBwcmlvcml0aWVzCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOiAgU2V0IHVwIHRoZSBpbnRlcnJ1cHQgcHJpb3JpdGllcworICogQ29weXJpZ2h0IDIwMDctMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDcgQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9ib2FyZHMvSDg2MDYuYyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9ib2FyZHMvSDg2MDYuYwppbmRleCA2YzJiNDdmLi40M2Y0M2EwIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvYm9hcmRzL0g4NjA2LmMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2JvYXJkcy9IODYwNi5jCkBAIC0xLDMyICsxLDExIEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvSDg2MDYuYwotICogQmFzZWQgb246ICAgICBhcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvc3RhbXAuYwotICogQXV0aG9yOiAgICAgICBKYXZpZXIgSGVycmVybyA8amhlcnJlcm9AaHZzaXN0ZW1hcy5lcz4KKyAqIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgorICogICAgICAgICAgIDIwMDctMjAwOCBIViBTaXN0ZW1hcyBTLkwuCisgKiAgICAgICAgICAgICAgICAgICAgICBKYXZpZXIgSGVycmVybyA8amhlcnJlcm9AaHZzaXN0ZW1hcy5lcz4KKyAqICAgICAgICAgICAgICAgIDIwMDUgTmF0aW9uYWwgSUNUIEF1c3RyYWxpYSAoTklDVEEpCisgKiAgICAgICAgICAgICAgICAgICAgICBBaWRhbiBXaWxsaWFtcyA8YWlkYW5AbmljdGEuY29tLmF1PgogICoKLSAqIENyZWF0ZWQ6ICAgICAgMjAwNwotICogRGVzY3JpcHRpb246ICBCb2FyZCBJbmZvIEZpbGUgZm9yIHRoZSBIViBTaXN0ZW1hcyBIODYwNiBib2FyZAotICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNSBOYXRpb25hbCBJQ1QgQXVzdHJhbGlhIChOSUNUQSkKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwNiBBbmFsb2cgRGV2aWNlcyBJbmMKLSAqCQkgQ29weXJpZ2h0IDIwMDcsMjAwOCBIViBTaXN0ZW1hcyBTLkwuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2JvYXJkcy9ibGFja3N0YW1wLmMgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvYm9hcmRzL2JsYWNrc3RhbXAuYwppbmRleCA4MjA4ZDY3Li5iNTgwODg0IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvYm9hcmRzL2JsYWNrc3RhbXAuYworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvYm9hcmRzL2JsYWNrc3RhbXAuYwpAQCAtMSwxNiArMSwxMCBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2JsYWNrc3RhbXAuYwotICogQmFzZWQgb246ICAgICBhcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvc3RhbXAuYwotICogQXV0aG9yOiAgICAgICBCZW5qYW1pbiBNYXR0aGV3cyA8Ym1hdEBsbGUucm9jaGVzdGVyLmVkdT4KLSAqICAgICAgICAgICAgICAgQWlkYW4gV2lsbGlhbXMgPGFpZGFuQG5pY3RhLmNvbS5hdT4KKyAqIEJvYXJkIEluZm8gRmlsZSBmb3IgdGhlIEJsYWNrU3RhbXAKICAqCi0gKiBDcmVhdGVkOiAgICAgIDIwMDgKLSAqIERlc2NyaXB0aW9uOiAgQm9hcmQgSW5mbyBGaWxlIGZvciB0aGUgQmxhY2tTdGFtcAotICoKLSAqIENvcHlyaWdodCAyMDA1IE5hdGlvbmFsIElDVCBBdXN0cmFsaWEgKE5JQ1RBKQogICogQ29weXJpZ2h0IDIwMDQtMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCisgKiAgICAgICAgICAgICAgICAyMDA4IEJlbmphbWluIE1hdHRoZXdzIDxibWF0QGxsZS5yb2NoZXN0ZXIuZWR1PgorICogICAgICAgICAgICAgICAgMjAwNSBOYXRpb25hbCBJQ1QgQXVzdHJhbGlhIChOSUNUQSkKKyAqICAgICAgICAgICAgICAgICAgICAgIEFpZGFuIFdpbGxpYW1zIDxhaWRhbkBuaWN0YS5jb20uYXU+CiAgKgogICogTW9yZSBpbmZvIGFib3V0IHRoZSBCbGFja1N0YW1wIGF0OgogICogCWh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy9nZi9wcm9qZWN0L2JsYWNrc3RhbXAvCkBAIC0yODEsMTkgKzI3NSw2IEBACiB9OwogI2VuZGlmCiAKLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgYmZpbl9ncGlvc19yZXNvdXJjZXMgPSB7Ci0JLnN0YXJ0ID0gMCwKLQkuZW5kICAgPSBNQVhfQkxBQ0tGSU5fR1BJT1MgLSAxLAotCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYmZpbl9ncGlvc19kZXZpY2UgPSB7Ci0JLm5hbWUgPSAic2ltcGxlLWdwaW8iLAotCS5pZCA9IC0xLAotCS5udW1fcmVzb3VyY2VzID0gMSwKLQkucmVzb3VyY2UgPSAmYmZpbl9ncGlvc19yZXNvdXJjZXMsCi19OwotCiAjaWYgZGVmaW5lZChDT05GSUdfSTJDX0dQSU8pIHx8IGRlZmluZWQoQ09ORklHX0kyQ19HUElPX01PRFVMRSkKICNpbmNsdWRlIDxsaW51eC9pMmMtZ3Bpby5oPgogCkBAIC0zODQsOCArMzY1LDYgQEAKICNpZiBkZWZpbmVkKENPTkZJR19JMkNfR1BJTykgfHwgZGVmaW5lZChDT05GSUdfSTJDX0dQSU9fTU9EVUxFKQogCSZpMmNfZ3Bpb19kZXZpY2UsCiAjZW5kaWYKLQotCSZiZmluX2dwaW9zX2RldmljZSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IGJsYWNrc3RhbXBfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2JvYXJkcy9jbV9iZjUzMy5jIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2JvYXJkcy9jbV9iZjUzMy5jCmluZGV4IDc0NDNiMjYuLjdmYzNiODYgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9ib2FyZHMvY21fYmY1MzMuYworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvYm9hcmRzL2NtX2JmNTMzLmMKQEAgLTEsMzAgKzEsMTAgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9ib2FyZHMvY21fYmY1MzMuYwotICogQmFzZWQgb246ICAgICBhcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvYm9hcmRzL2V6a2l0LmMKLSAqIEF1dGhvcjogICAgICAgQWlkYW4gV2lsbGlhbXMgPGFpZGFuQG5pY3RhLmNvbS5hdT4gQ29weXJpZ2h0IDIwMDUKKyAqIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgorICogICAgICAgICAgIDIwMDgtMjAwOSBCbHVldGVjaG5peAorICogICAgICAgICAgICAgICAgMjAwNSBOYXRpb25hbCBJQ1QgQXVzdHJhbGlhIChOSUNUQSkKKyAqICAgICAgICAgICAgICAgICAgICAgIEFpZGFuIFdpbGxpYW1zIDxhaWRhbkBuaWN0YS5jb20uYXU+CiAgKgotICogQ3JlYXRlZDogICAgICAyMDA1Ci0gKiBEZXNjcmlwdGlvbjogIEJvYXJkIGRlc2NyaXB0aW9uIGZpbGUKLSAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwNiBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgpAQCAtMjYxLDE5ICsyNDEsNiBAQAogfTsKICNlbmRpZgogCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGJmaW5fZ3Bpb3NfcmVzb3VyY2VzID0gewotCS5zdGFydCA9IDAsCi0JLmVuZCAgID0gTUFYX0JMQUNLRklOX0dQSU9TIC0gMSwKLQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGJmaW5fZ3Bpb3NfZGV2aWNlID0gewotCS5uYW1lID0gInNpbXBsZS1ncGlvIiwKLQkuaWQgPSAtMSwKLQkubnVtX3Jlc291cmNlcyA9IDEsCi0JLnJlc291cmNlID0gJmJmaW5fZ3Bpb3NfcmVzb3VyY2VzLAotfTsKLQogI2lmIGRlZmluZWQoQ09ORklHX1NFUklBTF9CRklOKSB8fCBkZWZpbmVkKENPTkZJR19TRVJJQUxfQkZJTl9NT0RVTEUpCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIGJmaW5fdWFydF9yZXNvdXJjZXNbXSA9IHsKIAl7CkBAIC01MDYsOCArNDczLDYgQEAKICNpZiBkZWZpbmVkKENPTkZJR19NVERfUEhZU01BUCkgfHwgZGVmaW5lZChDT05GSUdfTVREX1BIWVNNQVBfTU9EVUxFKQogCSZwYXJhX2ZsYXNoX2RldmljZSwKICNlbmRpZgotCi0JJmJmaW5fZ3Bpb3NfZGV2aWNlLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgY21fYmY1MzNfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2JvYXJkcy9lemtpdC5jIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2JvYXJkcy9lemtpdC5jCmluZGV4IGZkNTE4ZTMuLmQ0Njg5ZGMgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9ib2FyZHMvZXpraXQuYworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvYm9hcmRzL2V6a2l0LmMKQEAgLTEsMzEgKzEsOSBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2V6a2l0LmMKLSAqIEJhc2VkIG9uOiAgICAgT3JpZ2luYWwgV29yawotICogQXV0aG9yOiAgICAgICBBaWRhbiBXaWxsaWFtcyA8YWlkYW5AbmljdGEuY29tLmF1PgorICogQ29weXJpZ2h0IDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKiAgICAgICAgICAgICAgICAyMDA1IE5hdGlvbmFsIElDVCBBdXN0cmFsaWEgKE5JQ1RBKQorICogICAgICAgICAgICAgICAgICAgICAgQWlkYW4gV2lsbGlhbXMgPGFpZGFuQG5pY3RhLmNvbS5hdT4KICAqCi0gKiBDcmVhdGVkOiAgICAgIDIwMDUKLSAqIERlc2NyaXB0aW9uOgotICoKLSAqIE1vZGlmaWVkOiAgICAgUm9iaW4gR2V0eiA8cmdldHpAYmxhY2tmaW4udWNsaW51eC5vcmc+IC0gTmFtZWQgdGhlIGJvYXJkcwotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNSBOYXRpb25hbCBJQ1QgQXVzdHJhbGlhIChOSUNUQSkKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwNiBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgpAQCAtMzMsMTIgKzExLDE0IEBACiAjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL3BsYXQtcmFtLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpL2ZsYXNoLmg+CiAjaWYgZGVmaW5lZChDT05GSUdfVVNCX0lTUDEzNjJfSENEKSB8fCBkZWZpbmVkKENPTkZJR19VU0JfSVNQMTM2Ml9IQ0RfTU9EVUxFKQogI2luY2x1ZGUgPGxpbnV4L3VzYi9pc3AxMzYyLmg+CiAjZW5kaWYKICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxhc20vZG1hLmg+CiAjaW5jbHVkZSA8YXNtL2JmaW41eHhfc3BpLmg+CiAjaW5jbHVkZSA8YXNtL3BvcnRtdXguaD4KQEAgLTU2LDEyICszNiw2IEBACiB9OwogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKENPTkZJR19GQl9CRklOXzczOTMpIHx8IGRlZmluZWQoQ09ORklHX0ZCX0JGSU5fNzM5M19NT0RVTEUpCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBiZmluX2ZiX2FkdjczOTNfZGV2aWNlID0gewotCS5uYW1lID0gImJmaW4tYWR2NzM5MyIsCi19OwotI2VuZGlmCi0KIC8qCiAgKiAgVVNCLUxBTiBFekV4dGVuZGVyIGJvYXJkCiAgKiAgRHJpdmVyIG5lZWRzIHRvIGtub3cgYWRkcmVzcywgaXJxIGFuZCBmbGFnIHBpbi4KQEAgLTk4LDU0ICs3Miw2OSBAQAogfTsKICNlbmRpZgogCi0jaWYgZGVmaW5lZChDT05GSUdfTVREX1BTRDQyNTZHKSB8fCBkZWZpbmVkKENPTkZJR19NVERfUFNENDI1NkdfTU9EVUxFKQotc3RhdGljIGNvbnN0IGNoYXIgKm1hcF9wcm9iZXNbXSA9IHsKLQkic3RtX2ZsYXNoIiwKLQlOVUxMLAorI2lmIGRlZmluZWQoQ09ORklHX01URF9QSFlTTUFQKSB8fCBkZWZpbmVkKENPTkZJR19NVERfUEhZU01BUF9NT0RVTEUpCitzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gZXpraXRfcGFydGl0aW9uc19hW10gPSB7CisJeworCQkubmFtZSAgICAgICA9ICJib290bG9hZGVyKG5vciBhKSIsCisJCS5zaXplICAgICAgID0gMHg0MDAwMCwKKwkJLm9mZnNldCAgICAgPSAwLAorCX0sIHsKKwkJLm5hbWUgICAgICAgPSAibGludXgga2VybmVsKG5vciBhKSIsCisJCS5zaXplICAgICAgID0gTVREUEFSVF9TSVpfRlVMTCwKKwkJLm9mZnNldCAgICAgPSBNVERQQVJUX09GU19BUFBFTkQsCisJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGxhdGRhdGFfbXRkX3JhbSBzdG1fcHJpX2RhdGFfYSA9IHsKLQkubWFwbmFtZSAgICA9ICJGbGFzaCBBIFByaW1hcnkiLAotCS5tYXBfcHJvYmVzID0gbWFwX3Byb2JlcywKLQkuYmFua3dpZHRoICA9IDIsCitzdGF0aWMgc3RydWN0IHBoeXNtYXBfZmxhc2hfZGF0YSBlemtpdF9mbGFzaF9kYXRhX2EgPSB7CisJLndpZHRoICAgICAgPSAyLAorCS5wYXJ0cyAgICAgID0gZXpraXRfcGFydGl0aW9uc19hLAorCS5ucl9wYXJ0cyAgID0gQVJSQVlfU0laRShlemtpdF9wYXJ0aXRpb25zX2EpLAogfTsKIAotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzdG1fcHJpX3Jlc291cmNlX2EgPSB7CitzdGF0aWMgc3RydWN0IHJlc291cmNlIGV6a2l0X2ZsYXNoX3Jlc291cmNlX2EgPSB7CiAJLnN0YXJ0ID0gMHgyMDAwMDAwMCwKIAkuZW5kICAgPSAweDIwMGZmZmZmLAogCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAogfTsKIAotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc3RtX3ByaV9kZXZpY2VfYSA9IHsKLQkubmFtZSAgICAgICAgICA9ICJtdGQtcmFtIiwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGV6a2l0X2ZsYXNoX2RldmljZV9hID0geworCS5uYW1lICAgICAgICAgID0gInBoeXNtYXAtZmxhc2giLAogCS5pZCAgICAgICAgICAgID0gMCwKIAkuZGV2ID0gewotCQkucGxhdGZvcm1fZGF0YSA9ICZzdG1fcHJpX2RhdGFfYSwKKwkJLnBsYXRmb3JtX2RhdGEgPSAmZXpraXRfZmxhc2hfZGF0YV9hLAogCX0sCiAJLm51bV9yZXNvdXJjZXMgPSAxLAotCS5yZXNvdXJjZSAgICAgID0gJnN0bV9wcmlfcmVzb3VyY2VfYSwKKwkucmVzb3VyY2UgICAgICA9ICZlemtpdF9mbGFzaF9yZXNvdXJjZV9hLAogfTsKIAotc3RhdGljIHN0cnVjdCBwbGF0ZGF0YV9tdGRfcmFtIHN0bV9wcmlfZGF0YV9iID0gewotCS5tYXBuYW1lICAgID0gIkZsYXNoIEIgUHJpbWFyeSIsCi0JLm1hcF9wcm9iZXMgPSBtYXBfcHJvYmVzLAotCS5iYW5rd2lkdGggID0gMiwKK3N0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBlemtpdF9wYXJ0aXRpb25zX2JbXSA9IHsKKwl7CisJCS5uYW1lICAgPSAiZmlsZSBzeXN0ZW0obm9yIGIpIiwKKwkJLnNpemUgICA9IE1URFBBUlRfU0laX0ZVTEwsCisJCS5vZmZzZXQgPSBNVERQQVJUX09GU19BUFBFTkQsCisJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc3RtX3ByaV9yZXNvdXJjZV9iID0geworc3RhdGljIHN0cnVjdCBwaHlzbWFwX2ZsYXNoX2RhdGEgZXpraXRfZmxhc2hfZGF0YV9iID0geworCS53aWR0aCAgICAgID0gMiwKKwkucGFydHMgICAgICA9IGV6a2l0X3BhcnRpdGlvbnNfYiwKKwkubnJfcGFydHMgICA9IEFSUkFZX1NJWkUoZXpraXRfcGFydGl0aW9uc19iKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgZXpraXRfZmxhc2hfcmVzb3VyY2VfYiA9IHsKIAkuc3RhcnQgPSAweDIwMTAwMDAwLAogCS5lbmQgICA9IDB4MjAxZmZmZmYsCiAJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCiB9OwogCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzdG1fcHJpX2RldmljZV9iID0gewotCS5uYW1lICAgICAgICAgID0gIm10ZC1yYW0iLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZXpraXRfZmxhc2hfZGV2aWNlX2IgPSB7CisJLm5hbWUgICAgICAgICAgPSAicGh5c21hcC1mbGFzaCIsCiAJLmlkICAgICAgICAgICAgPSA0LAogCS5kZXYgPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhID0gJnN0bV9wcmlfZGF0YV9iLAorCQkucGxhdGZvcm1fZGF0YSA9ICZlemtpdF9mbGFzaF9kYXRhX2IsCiAJfSwKIAkubnVtX3Jlc291cmNlcyA9IDEsCi0JLnJlc291cmNlICAgICAgPSAmc3RtX3ByaV9yZXNvdXJjZV9iLAorCS5yZXNvdXJjZSAgICAgID0gJmV6a2l0X2ZsYXNoX3Jlc291cmNlX2IsCiB9OwogI2VuZGlmCiAKQEAgLTQwMCwxOSArMzg5LDYgQEAKIH07CiAjZW5kaWYKIAotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBiZmluX2dwaW9zX3Jlc291cmNlcyA9IHsKLQkuc3RhcnQgPSAwLAotCS5lbmQgICA9IE1BWF9CTEFDS0ZJTl9HUElPUyAtIDEsCi0JLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBiZmluX2dwaW9zX2RldmljZSA9IHsKLQkubmFtZSA9ICJzaW1wbGUtZ3BpbyIsCi0JLmlkID0gLTEsCi0JLm51bV9yZXNvdXJjZXMgPSAxLAotCS5yZXNvdXJjZSA9ICZiZmluX2dwaW9zX3Jlc291cmNlcywKLX07Ci0KICNpZiBkZWZpbmVkKENPTkZJR19JMkNfR1BJTykgfHwgZGVmaW5lZChDT05GSUdfSTJDX0dQSU9fTU9EVUxFKQogI2luY2x1ZGUgPGxpbnV4L2kyYy1ncGlvLmg+CiAKQEAgLTQ2MCwxMyArNDM2LDIxIEBACiAJfSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gX19pbml0ZGF0YSBiZmluX2kyY19ib2FyZF9pbmZvW10gPSB7CisjaWYgZGVmaW5lZChDT05GSUdfRkJfQkZJTl83MzkzKSB8fCBkZWZpbmVkKENPTkZJR19GQl9CRklOXzczOTNfTU9EVUxFKQorCXsKKwkJSTJDX0JPQVJEX0lORk8oImJmaW4tYWR2NzM5MyIsIDB4MkIpLAorCX0sCisjZW5kaWYKK307CisKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICplemtpdF9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKIAogCSZiZmluX2RwbWMsCiAKLSNpZiBkZWZpbmVkKENPTkZJR19NVERfUFNENDI1NkcpIHx8IGRlZmluZWQoQ09ORklHX01URF9QU0Q0MjU2R19NT0RVTEUpCi0JJnN0bV9wcmlfZGV2aWNlX2EsCi0JJnN0bV9wcmlfZGV2aWNlX2IsCisjaWYgZGVmaW5lZChDT05GSUdfTVREX1BIWVNNQVApIHx8IGRlZmluZWQoQ09ORklHX01URF9QSFlTTUFQX01PRFVMRSkKKwkmZXpraXRfZmxhc2hfZGV2aWNlX2EsCisJJmV6a2l0X2ZsYXNoX2RldmljZV9iLAogI2VuZGlmCiAKICNpZiBkZWZpbmVkKENPTkZJR19NVERfUExBVFJBTSkgfHwgZGVmaW5lZChDT05GSUdfTVREX1BMQVRSQU1fTU9EVUxFKQpAQCAtNDgyLDEwICs0NjYsNiBAQAogCSZiZmluX3NwaTBfZGV2aWNlLAogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKENPTkZJR19GQl9CRklOXzczOTMpIHx8IGRlZmluZWQoQ09ORklHX0ZCX0JGSU5fNzM5M19NT0RVTEUpCi0JJmJmaW5fZmJfYWR2NzM5M19kZXZpY2UsCi0jZW5kaWYKLQogI2lmIGRlZmluZWQoQ09ORklHX1JUQ19EUlZfQkZJTikgfHwgZGVmaW5lZChDT05GSUdfUlRDX0RSVl9CRklOX01PRFVMRSkKIAkmcnRjX2RldmljZSwKICNlbmRpZgpAQCAtNTA3LDggKzQ4Nyw2IEBACiAjaWYgZGVmaW5lZChDT05GSUdfSTJDX0dQSU8pIHx8IGRlZmluZWQoQ09ORklHX0kyQ19HUElPX01PRFVMRSkKIAkmaTJjX2dwaW9fZGV2aWNlLAogI2VuZGlmCi0KLQkmYmZpbl9ncGlvc19kZXZpY2UsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBlemtpdF9pbml0KHZvaWQpCkBAIC01MTYsNiArNDk0LDggQEAKIAlwcmludGsoS0VSTl9JTkZPICIlcygpOiByZWdpc3RlcmluZyBkZXZpY2UgcmVzb3VyY2VzXG4iLCBfX2Z1bmNfXyk7CiAJcGxhdGZvcm1fYWRkX2RldmljZXMoZXpraXRfZGV2aWNlcywgQVJSQVlfU0laRShlemtpdF9kZXZpY2VzKSk7CiAJc3BpX3JlZ2lzdGVyX2JvYXJkX2luZm8oYmZpbl9zcGlfYm9hcmRfaW5mbywgQVJSQVlfU0laRShiZmluX3NwaV9ib2FyZF9pbmZvKSk7CisJaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMCwgYmZpbl9pMmNfYm9hcmRfaW5mbywKKwkJCQlBUlJBWV9TSVpFKGJmaW5faTJjX2JvYXJkX2luZm8pKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2JvYXJkcy9pcDB4LmMgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvYm9hcmRzL2lwMHguYwppbmRleCBmMTliNjMzLi42NDRiZTVlIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvYm9hcmRzL2lwMHguYworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvYm9hcmRzL2lwMHguYwpAQCAtMSwzNCArMSwxMiBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2lwMHguYwotICogQmFzZWQgb246ICAgICBhcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvYmYxLmMKLSAqIEJhc2VkIG9uOiAgICAgYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL3N0YW1wLmMKLSAqIEF1dGhvcjogICAgICAgSXZhbiBEYW5vdiA8aWRhbm92QGdtYWlsLmNvbT4KLSAqICAgICAgICAgICAgICAgTW9kaWZpZWQgZm9yIElQMFggRGF2aWQgUm93ZQorICogQ29weXJpZ2h0IDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKiAgICAgICAgICAgICAgICAyMDA3IERhdmlkIFJvd2UKKyAqICAgICAgICAgICAgICAgIDIwMDYgSW50cmF0cmFkZSBMdGQuCisgKiAgICAgICAgICAgICAgICAgICAgIEl2YW4gRGFub3YgPGlkYW5vdkBnbWFpbC5jb20+CisgKiAgICAgICAgICAgICAgICAyMDA1IE5hdGlvbmFsIElDVCBBdXN0cmFsaWEgKE5JQ1RBKQorICogICAgICAgICAgICAgICAgICAgICBBaWRhbiBXaWxsaWFtcyA8YWlkYW5AbmljdGEuY29tLmF1PgogICoKLSAqIENyZWF0ZWQ6ICAgICAgMjAwNwotICogRGVzY3JpcHRpb246ICBCb2FyZCBpbmZvIGZpbGUgZm9yIHRoZSBJUDA0L0lQMDggYm9hcmRzLCB3aGljaAotICogICAgICAgICAgICAgICBhcmUgZGVyaXZlZCBmcm9tIHRoZSBCbGFja2Zpbk9uZSBWMi4wIGJvYXJkcy4KLSAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ09weXJpZ2h0IDIwMDcgRGF2aWQgUm93ZQotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNiBJbnRyYXRyYWRlIEx0ZC4KLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDUgTmF0aW9uYWwgSUNUIEF1c3RyYWxpYSAoTklDVEEpCi0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDYgQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CkBAIC0xNDUsNyArMTIzLDYgQEAKIAkuY3RsX3JlZyA9IDB4MTAwMCwJCS8qIENQT0w9MCxDUEhBPTAsU2FuZGlzayAxRyB3b3JrICovCiAJLmVuYWJsZV9kbWEgPSAwLAkJLyogaWYgMSAtIGJsb2NrISEhICovCiAJLmJpdHNfcGVyX3dvcmQgPSA4LAotCS5jc19jaGFuZ2VfcGVyX3dvcmQgPSAwLAogfTsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvYm9hcmRzL3N0YW1wLmMgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvYm9hcmRzL3N0YW1wLmMKaW5kZXggNzI5ZmQ3Yy4uODJmNzBlZiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2JvYXJkcy9zdGFtcC5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9ib2FyZHMvc3RhbXAuYwpAQCAtMSwzMSArMSw5IEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvc3RhbXAuYwotICogQmFzZWQgb246ICAgICBhcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvZXpraXQuYwotICogQXV0aG9yOiAgICAgICBBaWRhbiBXaWxsaWFtcyA8YWlkYW5AbmljdGEuY29tLmF1PgorICogQ29weXJpZ2h0IDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKiAgICAgICAgICAgICAgICAyMDA1IE5hdGlvbmFsIElDVCBBdXN0cmFsaWEgKE5JQ1RBKQorICogICAgICAgICAgICAgICAgICAgICAgQWlkYW4gV2lsbGlhbXMgPGFpZGFuQG5pY3RhLmNvbS5hdT4KICAqCi0gKiBDcmVhdGVkOiAgICAgIDIwMDUKLSAqIERlc2NyaXB0aW9uOiAgQm9hcmQgSW5mbyBGaWxlIGZvciB0aGUgQkY1MzMtU1RBTVAKLSAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDUgTmF0aW9uYWwgSUNUIEF1c3RyYWxpYSAoTklDVEEpCi0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDYgQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KQEAgLTk1LDEyICs3Myw2IEBACiB9OwogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKENPTkZJR19GQl9CRklOXzczOTMpIHx8IGRlZmluZWQoQ09ORklHX0ZCX0JGSU5fNzM5M19NT0RVTEUpCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBiZmluX2ZiX2FkdjczOTNfZGV2aWNlID0gewotCS5uYW1lID0gImJmaW4tYWR2NzM5MyIsCi19OwotI2VuZGlmCi0KICNpZiBkZWZpbmVkKENPTkZJR19VU0JfTkVUMjI3MikgfHwgZGVmaW5lZChDT05GSUdfVVNCX05FVDIyNzJfTU9EVUxFKQogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBuZXQyMjcyX2JmaW5fcmVzb3VyY2VzW10gPSB7CiAJewpAQCAtNDM2LDE5ICs0MDgsNiBAQAogfTsKICNlbmRpZgogCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGJmaW5fZ3Bpb3NfcmVzb3VyY2VzID0gewotCS5zdGFydCA9IDAsCi0JLmVuZCAgID0gTUFYX0JMQUNLRklOX0dQSU9TIC0gMSwKLQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGJmaW5fZ3Bpb3NfZGV2aWNlID0gewotCS5uYW1lID0gInNpbXBsZS1ncGlvIiwKLQkuaWQgPSAtMSwKLQkubnVtX3Jlc291cmNlcyA9IDEsCi0JLnJlc291cmNlID0gJmJmaW5fZ3Bpb3NfcmVzb3VyY2VzLAotfTsKLQogI2lmIGRlZmluZWQoQ09ORklHX0kyQ19HUElPKSB8fCBkZWZpbmVkKENPTkZJR19JMkNfR1BJT19NT0RVTEUpCiAjaW5jbHVkZSA8bGludXgvaTJjLWdwaW8uaD4KIApAQCAtNDg3LDYgKzQ0NiwxMSBAQAogCQkuaXJxID0gMzksCiAJfSwKICNlbmRpZgorI2lmIGRlZmluZWQoQ09ORklHX0ZCX0JGSU5fNzM5MykgfHwgZGVmaW5lZChDT05GSUdfRkJfQkZJTl83MzkzX01PRFVMRSkKKwl7CisJCUkyQ19CT0FSRF9JTkZPKCJiZmluLWFkdjczOTMiLCAweDJCKSwKKwl9LAorI2VuZGlmCiB9OwogCiBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGNjbGtfdmxldl9kYXRhc2hlZXRbXSA9CkBAIC01MjgsMTAgKzQ5Miw2IEBACiAJJnNtYzkxeF9kZXZpY2UsCiAjZW5kaWYKIAotI2lmIGRlZmluZWQoQ09ORklHX0ZCX0JGSU5fNzM5MykgfHwgZGVmaW5lZChDT05GSUdfRkJfQkZJTl83MzkzX01PRFVMRSkKLQkmYmZpbl9mYl9hZHY3MzkzX2RldmljZSwKLSNlbmRpZgotCiAjaWYgZGVmaW5lZChDT05GSUdfVVNCX05FVDIyNzIpIHx8IGRlZmluZWQoQ09ORklHX1VTQl9ORVQyMjcyX01PRFVMRSkKIAkmbmV0MjI3Ml9iZmluX2RldmljZSwKICNlbmRpZgpAQCAtNTYzLDggKzUyMyw2IEBACiAJJmkyY19ncGlvX2RldmljZSwKICNlbmRpZgogCi0JJmJmaW5fZ3Bpb3NfZGV2aWNlLAotCiAjaWYgZGVmaW5lZChDT05GSUdfTVREX0JGSU5fQVNZTkMpIHx8IGRlZmluZWQoQ09ORklHX01URF9CRklOX0FTWU5DX01PRFVMRSkKIAkmc3RhbXBfZmxhc2hfZGV2aWNlLAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvZG1hLmMgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvZG1hLmMKaW5kZXggN2E0NDNjMy4uNGExNGE0NiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2RtYS5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9kbWEuYwpAQCAtMSwzMSArMSwxMSBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2RtYS5jCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIHNpbXBsZSBETUEgSW1wbGVtZW50YXRpb24gZm9yIEJsYWNrZmluCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOiAgVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBzaW1wbGUgRE1BIEltcGxlbWVudGF0aW9uIGZvciBCbGFja2ZpbgorICogQ29weXJpZ2h0IDIwMDctMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDYgQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCisKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KIAogI2luY2x1ZGUgPGFzbS9ibGFja2Zpbi5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2luY2x1ZGUvbWFjaC9iZjUzMy5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2luY2x1ZGUvbWFjaC9iZjUzMy5oCmluZGV4IGNmNDQyN2MuLmUzZTA1ZjggMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9pbmNsdWRlL21hY2gvYmY1MzMuaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvaW5jbHVkZS9tYWNoL2JmNTMzLmgKQEAgLTEsMzAgKzEsOSBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjUzMy9iZjUzMy5oCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIFNZU1RFTSBNTVIgUkVHSVNURVIgQU5EIE1FTU9SWSBNQVAgRk9SIEFEU1AtQkY1NjEKICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246ICBTWVNURU0gTU1SIFJFR0lTVEVSIEFORCBNRU1PUlkgTUFQIEZPUiBBRFNQLUJGNTYxCisgKiBDb3B5cmlnaHQgMjAwNS0yMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwNiBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2lmbmRlZiBfX01BQ0hfQkY1MzNfSF9fCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvaW5jbHVkZS9tYWNoL2JmaW5fc2VyaWFsXzV4eC5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2luY2x1ZGUvbWFjaC9iZmluX3NlcmlhbF81eHguaAppbmRleCA2OTY1YjQwLi45ZTFmM2RlIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvaW5jbHVkZS9tYWNoL2JmaW5fc2VyaWFsXzV4eC5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9pbmNsdWRlL21hY2gvYmZpbl9zZXJpYWxfNXh4LmgKQEAgLTEsMzIgKzEsNyBAQAogLyoKLSAqIGZpbGU6ICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTMzL2JmaW5fc2VyaWFsXzV4eC5oCi0gKiBiYXNlZCBvbjoKLSAqIGF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA2LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIGNyZWF0ZWQ6Ci0gKiBkZXNjcmlwdGlvbjoKLSAqCWJsYWNrZmluIHNlcmlhbCBkcml2ZXIgaGVhZCBmaWxlCi0gKiByZXY6Ci0gKgotICogbW9kaWZpZWQ6Ci0gKgotICoKLSAqIGJ1Z3M6ICAgICAgICAgZW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogdGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgZ251IGdlbmVyYWwgcHVibGljIGxpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgZnJlZSBzb2Z0d2FyZSBmb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gKiBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiB0aGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCB3aXRob3V0IGFueSB3YXJyYW50eTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBtZXJjaGFudGFiaWxpdHkgb3IgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UuICBzZWUgdGhlCi0gKiBnbnUgZ2VuZXJhbCBwdWJsaWMgbGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIGdudSBnZW5lcmFsIHB1YmxpYyBsaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIGNvcHlpbmcuCi0gKiBpZiBub3QsIHdyaXRlIHRvIHRoZSBmcmVlIHNvZnR3YXJlIGZvdW5kYXRpb24sCi0gKiA1OSB0ZW1wbGUgcGxhY2UgLSBzdWl0ZSAzMzAsIGJvc3RvbiwgbWEgMDIxMTEtMTMwNywgdXNhLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2luY2x1ZGUvbWFjaC9ibGFja2Zpbi5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2luY2x1ZGUvbWFjaC9ibGFja2Zpbi5oCmluZGV4IDQ5OWU4OTcuLmY0YmQ2ZGYgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9pbmNsdWRlL21hY2gvYmxhY2tmaW4uaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvaW5jbHVkZS9tYWNoL2JsYWNrZmluLmgKQEAgLTEsMzEgKzEsNyBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjUzMy9ibGFja2Zpbi5oCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA1LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjoKLSAqCi0gKiBSZXY6Ci0gKgotICogTW9kaWZpZWQ6Ci0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAqIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KLSAqIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKLSAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIKICAqLwogCiAjaWZuZGVmIF9NQUNIX0JMQUNLRklOX0hfCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvaW5jbHVkZS9tYWNoL2NkZWZCRjUzMi5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2luY2x1ZGUvbWFjaC9jZGVmQkY1MzIuaAppbmRleCBiYmMzYzgzLi5mZWIyMzkyIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvaW5jbHVkZS9tYWNoL2NkZWZCRjUzMi5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9pbmNsdWRlL21hY2gvY2RlZkJGNTMyLmgKQEAgLTEsMzEgKzEsNyBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjUzMy9jZGVmQkY1MzIuaAotICogQmFzZWQgb246Ci0gKiBBdXRob3I6CisgKiBDb3B5cmlnaHQgMjAwNS0yMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246Ci0gKgotICogUmV2OgotICoKLSAqIE1vZGlmaWVkOgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gKiBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCi0gKiBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0gKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyCiAgKi8KIAogI2lmbmRlZiBfQ0RFRl9CRjUzMl9ICmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvaW5jbHVkZS9tYWNoL2RlZkJGNTMyLmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvaW5jbHVkZS9tYWNoL2RlZkJGNTMyLmgKaW5kZXggN2Y0NjMzMi4uMDJiMzI4ZSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2luY2x1ZGUvbWFjaC9kZWZCRjUzMi5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9pbmNsdWRlL21hY2gvZGVmQkY1MzIuaApAQCAtMSw0OCArMSwxMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIFB1YmxpYwotICogTGljZW5zZS4gU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCi0gKiBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIE5vbi1HUEwgTGljZW5zZSBhbHNvIGF2YWlsYWJsZSBhcyBwYXJ0IG9mIFZpc3VhbERTUCsrCi0gKiBodHRwOi8vd3d3LmFuYWxvZy5jb20vcHJvY2Vzc29ycy9yZXNvdXJjZXMvY3Jvc3Njb3JlL3Zpc3VhbERzcERldlNvZnR3YXJlLmh0bWwKLSAqCi0gKiAoYykgQ29weXJpZ2h0IDIwMDEtMjAwNSBBbmFsb2cgRGV2aWNlcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkCi0gKgotICogVGhpcyBmaWxlIHVuZGVyIHNvdXJjZSBjb2RlIGNvbnRyb2wsIHBsZWFzZSBzZW5kIGJ1Z3Mgb3IgY2hhbmdlcyB0bzoKLSAqIGRzcHRvb2xzLnN1cHBvcnRAYW5hbG9nLmNvbQotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKgotICogRmlsZTogICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTMzL2RlZkJGNTMyLmgKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogU3lzdGVtICYgTU1SIGJpdCBhbmQgQWRkcmVzcyBkZWZpbml0aW9ucyBmb3IgQURTUC1CRjUzMgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjoKKyAqIENvcHlyaWdodCAyMDA1LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIFJldjoKLSAqCi0gKiBNb2RpZmllZDoKLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICogYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgotICogSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBREkgQlNEIGxpY2Vuc2Ugb3IgdGhlIEdQTC0yIChvciBsYXRlcikKICAqLwotLyogU1lTVEVNICYgTU0gUkVHSVNURVIgQklUICYgQUREUkVTUyBERUZJTklUSU9OUyBGT1IgQURTUC1CRjUzMiAqLwogCiAjaWZuZGVmIF9ERUZfQkY1MzJfSAogI2RlZmluZSBfREVGX0JGNTMyX0gKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9pbmNsdWRlL21hY2gvZ3Bpby5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2luY2x1ZGUvbWFjaC9ncGlvLmgKaW5kZXggZTQ1YzE3MC4uMmFmMTlkNiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2luY2x1ZGUvbWFjaC9ncGlvLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2luY2x1ZGUvbWFjaC9ncGlvLmgKQEAgLTEsNyArMSw0IEBACiAvKgotICogRmlsZTogYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2luY2x1ZGUvbWFjaC9ncGlvLmgKLSAqIEJ1Z3M6IEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKICAqIENvcHlyaWdodCAoQykgMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9pbmNsdWRlL21hY2gvaXJxLmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvaW5jbHVkZS9tYWNoL2lycS5oCmluZGV4IGRiMWUzNDYuLmMzMTQ5OGIgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9pbmNsdWRlL21hY2gvaXJxLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2luY2x1ZGUvbWFjaC9pcnEuaApAQCAtMSwzMSArMSw3IEBACiAvKgotICogRmlsZTogICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTMzL2RlZkJGNTMyLmgKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogQ29weXJpZ2h0IDIwMDUtMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOgotICoKLSAqIFJldjoKLSAqCi0gKiBNb2RpZmllZDoKLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICogYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgotICogSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlcgogICovCiAKICNpZm5kZWYgX0JGNTMzX0lSUV9IXwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2luY2x1ZGUvbWFjaC9wb3J0bXV4LmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvaW5jbHVkZS9tYWNoL3BvcnRtdXguaAppbmRleCAyZjU5Y2UwLi4wNzVkYWUxIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvaW5jbHVkZS9tYWNoL3BvcnRtdXguaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvaW5jbHVkZS9tYWNoL3BvcnRtdXguaApAQCAtMSwzICsxLDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNy0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIKKyAqLworCiAjaWZuZGVmIF9NQUNIX1BPUlRNVVhfSF8KICNkZWZpbmUgX01BQ0hfUE9SVE1VWF9IXwogCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvaW50cy1wcmlvcml0eS5jIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2ludHMtcHJpb3JpdHkuYwppbmRleCBmNTE5OTRiLi44ZjcxNGNmIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvaW50cy1wcmlvcml0eS5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9pbnRzLXByaW9yaXR5LmMKQEAgLTEsMzAgKzEsOSBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2ludHMtcHJpb3JpdHkuYwotICogQmFzZWQgb246Ci0gKiBBdXRob3I6ICAgICAgIE1pY2hhZWwgSGVubmVyaWNoCisgKiBTZXQgdXAgdGhlIGludGVycnVwdCBwcmlvcml0aWVzCiAgKgotICogQ3JlYXRlZDogICAgICA/Ci0gKiBEZXNjcmlwdGlvbjogIFNldCB1cCB0aGUgaW50ZXJydXB0IHByaW9yaXRpZXMKKyAqIENvcHlyaWdodCAyMDA1LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA2IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvYm9hcmRzL2NtX2JmNTM3ZS5jIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2JvYXJkcy9jbV9iZjUzN2UuYwppbmRleCA4N2FjYjdkLi5jODVmNGQ3IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvYm9hcmRzL2NtX2JmNTM3ZS5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9ib2FyZHMvY21fYmY1MzdlLmMKQEAgLTEsMzEgKzEsMTAgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9ib2FyZHMvY21fYmY1MzcuYwotICogQmFzZWQgb246ICAgICBhcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvYm9hcmRzL2V6a2l0LmMKLSAqIEF1dGhvcjogICAgICAgQWlkYW4gV2lsbGlhbXMgPGFpZGFuQG5pY3RhLmNvbS5hdT4KKyAqIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgorICogICAgICAgICAgIDIwMDgtMjAwOSBCbHVldGVjaG5peAorICogICAgICAgICAgICAgICAgMjAwNSBOYXRpb25hbCBJQ1QgQXVzdHJhbGlhIChOSUNUQSkKKyAqICAgICAgICAgICAgICAgICAgICAgIEFpZGFuIFdpbGxpYW1zIDxhaWRhbkBuaWN0YS5jb20uYXU+CiAgKgotICogQ3JlYXRlZDogICAgICAyMDA1Ci0gKiBEZXNjcmlwdGlvbjogIEJvYXJkIGRlc2NyaXB0aW9uIGZpbGUKLSAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDUgTmF0aW9uYWwgSUNUIEF1c3RyYWxpYSAoTklDVEEpCi0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDYgQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KQEAgLTI5NywxOSArMjc2LDYgQEAKIH07CiAjZW5kaWYKIAotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBiZmluX2dwaW9zX3Jlc291cmNlcyA9IHsKLQkuc3RhcnQgPSAwLAotCS5lbmQgICA9IE1BWF9CTEFDS0ZJTl9HUElPUyAtIDEsCi0JLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBiZmluX2dwaW9zX2RldmljZSA9IHsKLQkubmFtZSA9ICJzaW1wbGUtZ3BpbyIsCi0JLmlkID0gLTEsCi0JLm51bV9yZXNvdXJjZXMgPSAxLAotCS5yZXNvdXJjZSA9ICZiZmluX2dwaW9zX3Jlc291cmNlcywKLX07Ci0KICNpZiBkZWZpbmVkKENPTkZJR19NVERfR1BJT19BRERSKSB8fCBkZWZpbmVkKENPTkZJR19NVERfR1BJT19BRERSX01PRFVMRSkKIHN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBjbV9wYXJ0aXRpb25zW10gPSB7CiAJewpAQCAtNjk5LDggKzY2NSw2IEBACiAjaWYgZGVmaW5lZChDT05GSUdfTVREX0dQSU9fQUREUikgfHwgZGVmaW5lZChDT05GSUdfTVREX0dQSU9fQUREUl9NT0RVTEUpCiAJJmNtX2ZsYXNoX2RldmljZSwKICNlbmRpZgotCi0JJmJmaW5fZ3Bpb3NfZGV2aWNlLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgY21fYmY1MzdlX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9ib2FyZHMvY21fYmY1Mzd1LmMgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvYm9hcmRzL2NtX2JmNTM3dS5jCmluZGV4IDgyMTlkYzMuLmVhMTFhYTggMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9ib2FyZHMvY21fYmY1Mzd1LmMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2JvYXJkcy9jbV9iZjUzN3UuYwpAQCAtMSwzMSArMSwxMCBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2JvYXJkcy9jbV9iZjUzN3UuYwotICogQmFzZWQgb246ICAgICBhcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvYm9hcmRzL2V6a2l0LmMKLSAqIEF1dGhvcjogICAgICAgQWlkYW4gV2lsbGlhbXMgPGFpZGFuQG5pY3RhLmNvbS5hdT4KKyAqIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgorICogICAgICAgICAgIDIwMDgtMjAwOSBCbHVldGVjaG5peAorICogICAgICAgICAgICAgICAgMjAwNSBOYXRpb25hbCBJQ1QgQXVzdHJhbGlhIChOSUNUQSkKKyAqICAgICAgICAgICAgICAgICAgICAgIEFpZGFuIFdpbGxpYW1zIDxhaWRhbkBuaWN0YS5jb20uYXU+CiAgKgotICogQ3JlYXRlZDogICAgICAyMDA1Ci0gKiBEZXNjcmlwdGlvbjogIEJvYXJkIGRlc2NyaXB0aW9uIGZpbGUKLSAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDUgTmF0aW9uYWwgSUNUIEF1c3RyYWxpYSAoTklDVEEpCi0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDYgQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KQEAgLTI5OCwxOSArMjc3LDYgQEAKIH07CiAjZW5kaWYKIAotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBiZmluX2dwaW9zX3Jlc291cmNlcyA9IHsKLQkuc3RhcnQgPSAwLAotCS5lbmQgICA9IE1BWF9CTEFDS0ZJTl9HUElPUyAtIDEsCi0JLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBiZmluX2dwaW9zX2RldmljZSA9IHsKLQkubmFtZSA9ICJzaW1wbGUtZ3BpbyIsCi0JLmlkID0gLTEsCi0JLm51bV9yZXNvdXJjZXMgPSAxLAotCS5yZXNvdXJjZSA9ICZiZmluX2dwaW9zX3Jlc291cmNlcywKLX07Ci0KICNpZiBkZWZpbmVkKENPTkZJR19NVERfR1BJT19BRERSKSB8fCBkZWZpbmVkKENPTkZJR19NVERfR1BJT19BRERSX01PRFVMRSkKIHN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBjbV9wYXJ0aXRpb25zW10gPSB7CiAJewpAQCAtNjA1LDggKzU3MSw2IEBACiAjaWYgZGVmaW5lZChDT05GSUdfTVREX0dQSU9fQUREUikgfHwgZGVmaW5lZChDT05GSUdfTVREX0dQSU9fQUREUl9NT0RVTEUpCiAJJmNtX2ZsYXNoX2RldmljZSwKICNlbmRpZgotCi0JJmJmaW5fZ3Bpb3NfZGV2aWNlLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgY21fYmY1Mzd1X2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9ib2FyZHMvbWlub3RhdXIuYyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9ib2FyZHMvbWlub3RhdXIuYwppbmRleCAzOTlmODFkLi4wZGE5MjcyIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvYm9hcmRzL21pbm90YXVyLmMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2JvYXJkcy9taW5vdGF1ci5jCkBAIC0xLDQgKzEsMTAgQEAKIC8qCisgKiBDb3B5cmlnaHQgMjAwNC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqICAgICAgICAgICAyMDA4LTIwMDkgQ2FtYnJpZGdlIFNpZ25hbCBQcm9jZXNzaW5nCisgKiAgICAgICAgICAgICAgICAyMDA1IE5hdGlvbmFsIElDVCBBdXN0cmFsaWEgKE5JQ1RBKQorICogICAgICAgICAgICAgICAgICAgICAgQWlkYW4gV2lsbGlhbXMgPGFpZGFuQG5pY3RhLmNvbS5hdT4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2JvYXJkcy9wbmF2MTAuYyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9ib2FyZHMvcG5hdjEwLmMKaW5kZXggMTBiMzViOC4uOWJhMjkwNCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2JvYXJkcy9wbmF2MTAuYworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvYm9hcmRzL3BuYXYxMC5jCkBAIC0xLDMxICsxLDkgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9ib2FyZHMvc3RhbXAuYwotICogQmFzZWQgb246ICAgICBhcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvYm9hcmRzL2V6a2l0LmMKLSAqIEF1dGhvcjogICAgICAgQWlkYW4gV2lsbGlhbXMgPGFpZGFuQG5pY3RhLmNvbS5hdT4KKyAqIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgorICogICAgICAgICAgICAgICAgMjAwNSBOYXRpb25hbCBJQ1QgQXVzdHJhbGlhIChOSUNUQSkKKyAqICAgICAgICAgICAgICAgICAgICAgIEFpZGFuIFdpbGxpYW1zIDxhaWRhbkBuaWN0YS5jb20uYXU+CiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOgotICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNSBOYXRpb25hbCBJQ1QgQXVzdHJhbGlhIChOSUNUQSkKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgpAQCAtMzAyLDcgKzI4MCw2IEBACiAKICNpZiBkZWZpbmVkKENPTkZJR19UT1VDSFNDUkVFTl9BRDc4NzcpIHx8IGRlZmluZWQoQ09ORklHX1RPVUNIU0NSRUVOX0FENzg3N19NT0RVTEUpCiBzdGF0aWMgc3RydWN0IGJmaW41eHhfc3BpX2NoaXAgc3BpX2FkNzg3N19jaGlwX2luZm8gPSB7Ci0JLmNzX2NoYW5nZV9wZXJfd29yZCA9IDAsCiAJLmVuYWJsZV9kbWEgPSAwLAogCS5iaXRzX3Blcl93b3JkID0gMTYsCiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2JvYXJkcy9zdGFtcC5jIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2JvYXJkcy9zdGFtcC5jCmluZGV4IDlkYjZiNDAuLmM0NmJhYTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9ib2FyZHMvc3RhbXAuYworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvYm9hcmRzL3N0YW1wLmMKQEAgLTEsMzEgKzEsOSBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2JvYXJkcy9zdGFtcC5jCi0gKiBCYXNlZCBvbjogICAgIGFyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9ib2FyZHMvZXpraXQuYwotICogQXV0aG9yOiAgICAgICBBaWRhbiBXaWxsaWFtcyA8YWlkYW5AbmljdGEuY29tLmF1PgorICogQ29weXJpZ2h0IDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKiAgICAgICAgICAgICAgICAyMDA1IE5hdGlvbmFsIElDVCBBdXN0cmFsaWEgKE5JQ1RBKQorICogICAgICAgICAgICAgICAgICAgICAgQWlkYW4gV2lsbGlhbXMgPGFpZGFuQG5pY3RhLmNvbS5hdT4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246Ci0gKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA1IE5hdGlvbmFsIElDVCBBdXN0cmFsaWEgKE5JQ1RBKQotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA2IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CkBAIC0xMjEsMTkgKzk5LDYgQEAKIH07CiAjZW5kaWYKIAotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBiZmluX2dwaW9zX3Jlc291cmNlcyA9IHsKLQkuc3RhcnQgPSAwLAotCS5lbmQgICA9IE1BWF9CTEFDS0ZJTl9HUElPUyAtIDEsCi0JLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBiZmluX2dwaW9zX2RldmljZSA9IHsKLQkubmFtZSA9ICJzaW1wbGUtZ3BpbyIsCi0JLmlkID0gLTEsCi0JLm51bV9yZXNvdXJjZXMgPSAxLAotCS5yZXNvdXJjZSA9ICZiZmluX2dwaW9zX3Jlc291cmNlcywKLX07Ci0KICNpZiBkZWZpbmVkKENPTkZJR19CRklOX0NGUENNQ0lBKSB8fCBkZWZpbmVkKENPTkZJR19CRklOX0NGUENNQ0lBX01PRFVMRSkKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgYmZpbl9wY21jaWFfY2ZfcmVzb3VyY2VzW10gPSB7CiAJewpAQCAtMTA3OCwxMiArMTA0Myw2IEBACiB9OwogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKENPTkZJR19GQl9CRklOXzczOTMpIHx8IGRlZmluZWQoQ09ORklHX0ZCX0JGSU5fNzM5M19NT0RVTEUpCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBiZmluX2ZiX2FkdjczOTNfZGV2aWNlID0gewotCS5uYW1lID0gImJmaW4tYWR2NzM5MyIsCi19OwotI2VuZGlmCi0KICNpZiBkZWZpbmVkKENPTkZJR19GQl9CRklOX0xRMDM1UTEpIHx8IGRlZmluZWQoQ09ORklHX0ZCX0JGSU5fTFEwMzVRMV9NT0RVTEUpCiAjaW5jbHVkZSA8YXNtL2JmaW4tbHEwMzVxMS5oPgogCkBAIC0xNDk4LDYgKzE0NTcsMTEgQEAKIAkJLnBsYXRmb3JtX2RhdGEgPSAodm9pZCAqKSZhZHA1NTg4X2dwaW9fZGF0YSwKIAl9LAogI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfRkJfQkZJTl83MzkzKSB8fCBkZWZpbmVkKENPTkZJR19GQl9CRklOXzczOTNfTU9EVUxFKQorCXsKKwkJSTJDX0JPQVJEX0lORk8oImJmaW4tYWR2NzM5MyIsIDB4MkIpLAorCX0sCisjZW5kaWYKIH07CiAKICNpZiBkZWZpbmVkKENPTkZJR19TRVJJQUxfQkZJTl9TUE9SVCkgfHwgZGVmaW5lZChDT05GSUdfU0VSSUFMX0JGSU5fU1BPUlRfTU9EVUxFKQpAQCAtMTY2OCwxMCArMTYzMiw2IEBACiAJJmJmaW5fbHEwMzVxMV9kZXZpY2UsCiAjZW5kaWYKIAotI2lmIGRlZmluZWQoQ09ORklHX0ZCX0JGSU5fNzM5MykgfHwgZGVmaW5lZChDT05GSUdfRkJfQkZJTl83MzkzX01PRFVMRSkKLQkmYmZpbl9mYl9hZHY3MzkzX2RldmljZSwKLSNlbmRpZgotCiAjaWYgZGVmaW5lZChDT05GSUdfU0VSSUFMX0JGSU4pIHx8IGRlZmluZWQoQ09ORklHX1NFUklBTF9CRklOX01PRFVMRSkKIAkmYmZpbl91YXJ0X2RldmljZSwKICNlbmRpZgpAQCAtMTcwMiw4ICsxNjYyLDYgQEAKIAkmYmZpbl9kZXZpY2VfZ3Bpb2tleXMsCiAjZW5kaWYKIAotCSZiZmluX2dwaW9zX2RldmljZSwKLQogI2lmIGRlZmluZWQoQ09ORklHX01URF9OQU5EX1BMQVRGT1JNKSB8fCBkZWZpbmVkKENPTkZJR19NVERfTkFORF9QTEFURk9STV9NT0RVTEUpCiAJJmJmaW5fYXN5bmNfbmFuZF9kZXZpY2UsCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9ib2FyZHMvdGNtX2JmNTM3LmMgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvYm9hcmRzL3RjbV9iZjUzNy5jCmluZGV4IDYxMzUzZjcuLjU3MTYzYjYgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9ib2FyZHMvdGNtX2JmNTM3LmMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2JvYXJkcy90Y21fYmY1MzcuYwpAQCAtMSwzMSArMSwxMCBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2JvYXJkcy90Y21fYmY1MzcuYwotICogQmFzZWQgb246ICAgICBhcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvYm9hcmRzL2NtX2JmNTM3LmMKLSAqIEF1dGhvcjogICAgICAgQWlkYW4gV2lsbGlhbXMgPGFpZGFuQG5pY3RhLmNvbS5hdT4KKyAqIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgorICogICAgICAgICAgIDIwMDgtMjAwOSBCbHVldGVjaG5peAorICogICAgICAgICAgICAgICAgMjAwNSBOYXRpb25hbCBJQ1QgQXVzdHJhbGlhIChOSUNUQSkKKyAqICAgICAgICAgICAgICAgICAgICAgIEFpZGFuIFdpbGxpYW1zIDxhaWRhbkBuaWN0YS5jb20uYXU+CiAgKgotICogQ3JlYXRlZDogICAgICAyMDA1Ci0gKiBEZXNjcmlwdGlvbjogIEJvYXJkIGRlc2NyaXB0aW9uIGZpbGUKLSAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDUgTmF0aW9uYWwgSUNUIEF1c3RyYWxpYSAoTklDVEEpCi0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDYgQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KQEAgLTI5OCwxOSArMjc3LDYgQEAKIH07CiAjZW5kaWYKIAotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBiZmluX2dwaW9zX3Jlc291cmNlcyA9IHsKLQkuc3RhcnQgPSAwLAotCS5lbmQgICA9IE1BWF9CTEFDS0ZJTl9HUElPUyAtIDEsCi0JLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBiZmluX2dwaW9zX2RldmljZSA9IHsKLQkubmFtZSA9ICJzaW1wbGUtZ3BpbyIsCi0JLmlkID0gLTEsCi0JLm51bV9yZXNvdXJjZXMgPSAxLAotCS5yZXNvdXJjZSA9ICZiZmluX2dwaW9zX3Jlc291cmNlcywKLX07Ci0KICNpZiBkZWZpbmVkKENPTkZJR19NVERfR1BJT19BRERSKSB8fCBkZWZpbmVkKENPTkZJR19NVERfR1BJT19BRERSX01PRFVMRSkKIHN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBjbV9wYXJ0aXRpb25zW10gPSB7CiAJewpAQCAtNjA3LDggKzU3Myw2IEBACiAjaWYgZGVmaW5lZChDT05GSUdfTVREX0dQSU9fQUREUikgfHwgZGVmaW5lZChDT05GSUdfTVREX0dQSU9fQUREUl9NT0RVTEUpCiAJJmNtX2ZsYXNoX2RldmljZSwKICNlbmRpZgotCi0JJmJmaW5fZ3Bpb3NfZGV2aWNlLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgdGNtX2JmNTM3X2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9kbWEuYyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9kbWEuYwppbmRleCBkMjNmYzBlLi41YzhjNGVkIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvZG1hLmMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2RtYS5jCkBAIC0xLDMxICsxLDExIEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvZG1hLmMKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogQ29weXJpZ2h0IDIwMDctMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOiAgVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBzaW1wbGUgRE1BIEltcGxlbWVudGF0aW9uIGZvciBCbGFja2ZpbgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA3IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIFRoaXMgZmlsZSBjb250YWlucyB0aGUgc2ltcGxlIERNQSBJbXBsZW1lbnRhdGlvbiBmb3IgQmxhY2tmaW4KICAqLworCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAKICNpbmNsdWRlIDxhc20vYmxhY2tmaW4uaD4KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9pbmNsdWRlL21hY2gvYmY1MzcuaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9pbmNsdWRlL21hY2gvYmY1MzcuaAppbmRleCBmMTk0YTg0Li4xN2ZhYjQ0IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvaW5jbHVkZS9tYWNoL2JmNTM3LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2luY2x1ZGUvbWFjaC9iZjUzNy5oCkBAIC0xLDMwICsxLDkgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGluY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1MzcvYmY1MzcuaAotICogQmFzZWQgb246Ci0gKiBBdXRob3I6CisgKiBTeXN0ZW0gTU1SIFJlZ2lzdGVyIGFuZCBtZW1vcnkgbWFwIGZvciBBRFNQLUJGNTM3CiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOiAgU1lTVEVNIE1NUiBSRUdJU1RFUiBBTkQgTUVNT1JZIE1BUCBGT1IgQURTUC1CRjUzNworICogQ29weXJpZ2h0IDIwMDUtMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDYgQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpZm5kZWYgX19NQUNIX0JGNTM3X0hfXwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2luY2x1ZGUvbWFjaC9iZmluX3NlcmlhbF81eHguaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9pbmNsdWRlL21hY2gvYmZpbl9zZXJpYWxfNXh4LmgKaW5kZXggZTk1ZDU0Zi4uNjM1YzkxYyAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2luY2x1ZGUvbWFjaC9iZmluX3NlcmlhbF81eHguaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvaW5jbHVkZS9tYWNoL2JmaW5fc2VyaWFsXzV4eC5oCkBAIC0xLDMyICsxLDcgQEAKIC8qCi0gKiBmaWxlOiAgICAgICAgIGluY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1MzcvYmZpbl9zZXJpYWxfNXh4LmgKLSAqIGJhc2VkIG9uOgotICogYXV0aG9yOgorICogQ29weXJpZ2h0IDIwMDYtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogY3JlYXRlZDoKLSAqIGRlc2NyaXB0aW9uOgotICoJYmxhY2tmaW4gc2VyaWFsIGRyaXZlciBoZWFkZXIgZmlsZXMKLSAqIHJldjoKLSAqCi0gKiBtb2RpZmllZDoKLSAqCi0gKgotICogYnVnczogICAgICAgICBlbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiB0aGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBnbnUgZ2VuZXJhbCBwdWJsaWMgbGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBmcmVlIHNvZnR3YXJlIGZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAqIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIHRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IHdpdGhvdXQgYW55IHdhcnJhbnR5OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIG1lcmNoYW50YWJpbGl0eSBvciBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZS4gIHNlZSB0aGUKLSAqIGdudSBnZW5lcmFsIHB1YmxpYyBsaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgZ251IGdlbmVyYWwgcHVibGljIGxpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgY29weWluZy4KLSAqIGlmIG5vdCwgd3JpdGUgdG8gdGhlIGZyZWUgc29mdHdhcmUgZm91bmRhdGlvbiwKLSAqIDU5IHRlbXBsZSBwbGFjZSAtIHN1aXRlIDMzMCwgYm9zdG9uLCBtYSAwMjExMS0xMzA3LCB1c2EuCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIKICAqLwogCiAjaW5jbHVkZSA8bGludXgvc2VyaWFsLmg+CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvaW5jbHVkZS9tYWNoL2JsYWNrZmluLmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvaW5jbHVkZS9tYWNoL2JsYWNrZmluLmgKaW5kZXggOWVlODgzNC4uZWFiMDA2ZCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2luY2x1ZGUvbWFjaC9ibGFja2Zpbi5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9pbmNsdWRlL21hY2gvYmxhY2tmaW4uaApAQCAtMSwzMiArMSw3IEBACiAvKgotICogRmlsZTogICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTM3L2JsYWNrZmluLmgKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogQ29weXJpZ2h0IDIwMDUtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOgotICoKLSAqIFJldjoKLSAqCi0gKiBNb2RpZmllZDoKLSAqCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAqIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KLSAqIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKLSAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIKICAqLwogCiAjaWZuZGVmIF9NQUNIX0JMQUNLRklOX0hfCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvaW5jbHVkZS9tYWNoL2NkZWZCRjUzNC5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2luY2x1ZGUvbWFjaC9jZGVmQkY1MzQuaAppbmRleCA1ZjhiNWY4Li45MTgyNWM5IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvaW5jbHVkZS9tYWNoL2NkZWZCRjUzNC5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9pbmNsdWRlL21hY2gvY2RlZkJGNTM0LmgKQEAgLTEsMzIgKzEsNyBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjUzNy9jZGVmYmY1MzQuaAotICogQmFzZWQgb246Ci0gKiBBdXRob3I6CisgKiBDb3B5cmlnaHQgMjAwNS0yMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246ICBzeXN0ZW0gbW1yIHJlZ2lzdGVyIG1hcAotICoKLSAqIFJldjoKLSAqCi0gKiBNb2RpZmllZDoKLSAqCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAqIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KLSAqIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKLSAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIKICAqLwogCiAjaWZuZGVmIF9DREVGX0JGNTM0X0gKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9pbmNsdWRlL21hY2gvY2RlZkJGNTM3LmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvaW5jbHVkZS9tYWNoL2NkZWZCRjUzNy5oCmluZGV4IGI4ZmM5NDkuLjkzNjNjMzkgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9pbmNsdWRlL21hY2gvY2RlZkJGNTM3LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2luY2x1ZGUvbWFjaC9jZGVmQkY1MzcuaApAQCAtMSwzMiArMSw3IEBACiAvKgotICogRmlsZTogICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTM3L2NkZWZCRjUzNy5oCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA1LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjoKLSAqCVN5c3RlbSBNTVIgUmVnaXN0ZXIgTWFwCi0gKiBSZXY6Ci0gKgotICogTW9kaWZpZWQ6Ci0gKgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gKiBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCi0gKiBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0gKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyCiAgKi8KIAogI2lmbmRlZiBfQ0RFRl9CRjUzN19ICmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvaW5jbHVkZS9tYWNoL2RlZkJGNTM0LmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvaW5jbHVkZS9tYWNoL2RlZkJGNTM0LmgKaW5kZXggYTMyMjdmOS4uY2ViYjE0ZiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2luY2x1ZGUvbWFjaC9kZWZCRjUzNC5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9pbmNsdWRlL21hY2gvZGVmQkY1MzQuaApAQCAtMSwzMSArMSw3IEBACiAvKgotICogRmlsZTogICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTM3L2NkZWZCRjUzNy5oCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA1LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjoKLSAqCi0gKiBSZXY6Ci0gKgotICogTW9kaWZpZWQ6Ci0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAqIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KLSAqIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKLSAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQURJIEJTRCBsaWNlbnNlIG9yIHRoZSBHUEwtMiAob3IgbGF0ZXIpCiAgKi8KIAogI2lmbmRlZiBfREVGX0JGNTM0X0gKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9pbmNsdWRlL21hY2gvZGVmQkY1MzcuaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9pbmNsdWRlL21hY2gvZGVmQkY1MzcuaAppbmRleCAzZDZjODNlLi44Y2I1ZDVjIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvaW5jbHVkZS9tYWNoL2RlZkJGNTM3LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2luY2x1ZGUvbWFjaC9kZWZCRjUzNy5oCkBAIC0xLDMyICsxLDcgQEAKIC8qCi0gKiBmaWxlOiAgICAgICAgIGluY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1MzcvZGVmYmY1MzcuaAotICogYmFzZWQgb246Ci0gKiBhdXRob3I6CisgKiBDb3B5cmlnaHQgMjAwNS0yMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBjcmVhdGVkOgotICogZGVzY3JpcHRpb246Ci0gKglzeXN0ZW0gbW1yIHJlZ2lzdGVyIG1hcAotICogcmV2OgotICoKLSAqIG1vZGlmaWVkOgotICoKLSAqCi0gKiBidWdzOiAgICAgICAgIGVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIHRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIGdudSBnZW5lcmFsIHB1YmxpYyBsaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIGZyZWUgc29mdHdhcmUgZm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICogYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogdGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgd2l0aG91dCBhbnkgd2FycmFudHk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogbWVyY2hhbnRhYmlsaXR5IG9yIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlLiAgc2VlIHRoZQotICogZ251IGdlbmVyYWwgcHVibGljIGxpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBnbnUgZ2VuZXJhbCBwdWJsaWMgbGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBjb3B5aW5nLgotICogaWYgbm90LCB3cml0ZSB0byB0aGUgZnJlZSBzb2Z0d2FyZSBmb3VuZGF0aW9uLAotICogNTkgdGVtcGxlIHBsYWNlIC0gc3VpdGUgMzMwLCBib3N0b24sIG1hIDAyMTExLTEzMDcsIHVzYS4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBREkgQlNEIGxpY2Vuc2Ugb3IgdGhlIEdQTC0yIChvciBsYXRlcikKICAqLwogCiAjaWZuZGVmIF9ERUZfQkY1MzdfSApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2luY2x1ZGUvbWFjaC9ncGlvLmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvaW5jbHVkZS9tYWNoL2dwaW8uaAppbmRleCBkNzdhMzFlLi4xMDRiZmY4IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvaW5jbHVkZS9tYWNoL2dwaW8uaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvaW5jbHVkZS9tYWNoL2dwaW8uaApAQCAtMSw3ICsxLDQgQEAKIC8qCi0gKiBGaWxlOiBhcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvaW5jbHVkZS9tYWNoL2dwaW8uaAotICogQnVnczogRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgogICogQ29weXJpZ2h0IChDKSAyMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2luY2x1ZGUvbWFjaC9pcnEuaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9pbmNsdWRlL21hY2gvaXJxLmgKaW5kZXggYjJhNzFkNS4uMGRlZmE5NCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2luY2x1ZGUvbWFjaC9pcnEuaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvaW5jbHVkZS9tYWNoL2lycS5oCkBAIC0xLDMyICsxLDcgQEAKIC8qCi0gKiBmaWxlOiAgICAgICAgIGluY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1MzcvaXJxLmgKLSAqIGJhc2VkIG9uOgotICogYXV0aG9yOgorICogQ29weXJpZ2h0IDIwMDUtMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogY3JlYXRlZDoKLSAqIGRlc2NyaXB0aW9uOgotICoJc3lzdGVtIG1tciByZWdpc3RlciBtYXAKLSAqIHJldjoKLSAqCi0gKiBtb2RpZmllZDoKLSAqCi0gKgotICogYnVnczogICAgICAgICBlbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiB0aGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBnbnUgZ2VuZXJhbCBwdWJsaWMgbGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBmcmVlIHNvZnR3YXJlIGZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAqIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIHRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IHdpdGhvdXQgYW55IHdhcnJhbnR5OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIG1lcmNoYW50YWJpbGl0eSBvciBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZS4gIHNlZSB0aGUKLSAqIGdudSBnZW5lcmFsIHB1YmxpYyBsaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgZ251IGdlbmVyYWwgcHVibGljIGxpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgY29weWluZy4KLSAqIGlmIG5vdCwgd3JpdGUgdG8gdGhlIGZyZWUgc29mdHdhcmUgZm91bmRhdGlvbiwKLSAqIDU5IHRlbXBsZSBwbGFjZSAtIHN1aXRlIDMzMCwgYm9zdG9uLCBtYSAwMjExMS0xMzA3LCB1c2EuCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIKICAqLwogCiAjaWZuZGVmIF9CRjUzN19JUlFfSF8KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9pbmNsdWRlL21hY2gvcG9ydG11eC5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2luY2x1ZGUvbWFjaC9wb3J0bXV4LmgKaW5kZXggODcyODVlNy4uZGE5NzYwMyAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2luY2x1ZGUvbWFjaC9wb3J0bXV4LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2luY2x1ZGUvbWFjaC9wb3J0bXV4LmgKQEAgLTEsMyArMSw5IEBACisvKgorICogQ29weXJpZ2h0IDIwMDctMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyCisgKi8KKwogI2lmbmRlZiBfTUFDSF9QT1JUTVVYX0hfCiAjZGVmaW5lIF9NQUNIX1BPUlRNVVhfSF8KIApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2ludHMtcHJpb3JpdHkuYyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9pbnRzLXByaW9yaXR5LmMKaW5kZXggNTFjNDgwOC4uZjY1MDA2MiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2ludHMtcHJpb3JpdHkuYworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvaW50cy1wcmlvcml0eS5jCkBAIC0xLDMwICsxLDkgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9pbnRzLXByaW9yaXR5LmMKLSAqIEJhc2VkIG9uOiAgICAgYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2ludHMtcHJpb3JpdHkuYwotICogQXV0aG9yOiAgICAgICBNaWNoYWVsIEhlbm5lcmljaAorICogQ29weXJpZ2h0IDIwMDUtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOiAgU2V0IHVwIHRoZSBpbnRlcnJ1cHQgcHJpb3JpdGllcworICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA2IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIFNldCB1cCB0aGUgaW50ZXJydXB0IHByaW9yaXRpZXMKICAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzgvYm9hcmRzL2V6a2l0LmMgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzgvYm9hcmRzL2V6a2l0LmMKaW5kZXggZjJhYzNiMC4uMTRhZjVjMiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM4L2JvYXJkcy9lemtpdC5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzOC9ib2FyZHMvZXpraXQuYwpAQCAtMSwzMSArMSw5IEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL21hY2gtYmY1MzgvYm9hcmRzL2V6a2l0LmMKLSAqIEJhc2VkIG9uOiAgICAgYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2JvYXJkcy9lemtpdC5jCi0gKiBBdXRob3I6ICAgICAgIEFpZGFuIFdpbGxpYW1zIDxhaWRhbkBuaWN0YS5jb20uYXU+CisgKiBDb3B5cmlnaHQgMjAwNC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqICAgICAgICAgICAgICAgIDIwMDUgTmF0aW9uYWwgSUNUIEF1c3RyYWxpYSAoTklDVEEpCisgKiAgICAgICAgICAgICAgICAgICAgICBBaWRhbiBXaWxsaWFtcyA8YWlkYW5AbmljdGEuY29tLmF1PgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjoKLSAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDUgTmF0aW9uYWwgSUNUIEF1c3RyYWxpYSAoTklDVEEpCi0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgpAQCAtMjM3LDcgKzIxNSw2IEBACiBzdGF0aWMgc3RydWN0IGJmaW41eHhfc3BpX2NoaXAgc3BpX2ZsYXNoX2NoaXBfaW5mbyA9IHsKIAkuZW5hYmxlX2RtYSA9IDAsICAgICAgICAgLyogdXNlIGRtYSB0cmFuc2ZlciB3aXRoIHRoaXMgY2hpcCovCiAJLmJpdHNfcGVyX3dvcmQgPSA4LAotCS5jc19jaGFuZ2VfcGVyX3dvcmQgPSAwLAogfTsKICNlbmRpZgogCkBAIC01MDYsMTkgKzQ4Myw2IEBACiAjZW5kaWYKICNlbmRpZgogCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGJmaW5fZ3Bpb3NfcmVzb3VyY2VzID0gewotCS5zdGFydCA9IDAsCi0JLmVuZCAgID0gTUFYX0JMQUNLRklOX0dQSU9TIC0gMSwKLQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGJmaW5fZ3Bpb3NfZGV2aWNlID0gewotCS5uYW1lID0gInNpbXBsZS1ncGlvIiwKLQkuaWQgPSAtMSwKLQkubnVtX3Jlc291cmNlcyA9IDEsCi0JLnJlc291cmNlID0gJmJmaW5fZ3Bpb3NfcmVzb3VyY2VzLAotfTsKLQogI2lmIGRlZmluZWQoQ09ORklHX0tFWUJPQVJEX0dQSU8pIHx8IGRlZmluZWQoQ09ORklHX0tFWUJPQVJEX0dQSU9fTU9EVUxFKQogI2luY2x1ZGUgPGxpbnV4L2dwaW9fa2V5cy5oPgogCkBAIC02NTgsOCArNjIyLDYgQEAKIAkmYmZpbl9kZXZpY2VfZ3Bpb2tleXMsCiAjZW5kaWYKIAotCSZiZmluX2dwaW9zX2RldmljZSwKLQogI2lmIGRlZmluZWQoQ09ORklHX01URF9QSFlTTUFQKSB8fCBkZWZpbmVkKENPTkZJR19NVERfUEhZU01BUF9NT0RVTEUpCiAJJmV6a2l0X2ZsYXNoX2RldmljZSwKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM4L2RtYS5jIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM4L2RtYS5jCmluZGV4IGQ2ODM3ZmIuLjVkYzAyMjUgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzOC9kbWEuYworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzgvZG1hLmMKQEAgLTEsMzEgKzEsMTEgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4vbWFjaC1iZjUzOC9kbWEuYwotICogQmFzZWQgb246Ci0gKiBBdXRob3I6CisgKiB0aGUgc2ltcGxlIERNQSBJbXBsZW1lbnRhdGlvbiBmb3IgQmxhY2tmaW4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246ICBUaGlzIGZpbGUgY29udGFpbnMgdGhlIHNpbXBsZSBETUEgSW1wbGVtZW50YXRpb24gZm9yIEJsYWNrZmluCisgKiBDb3B5cmlnaHQgMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLworCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAKICNpbmNsdWRlIDxhc20vYmxhY2tmaW4uaD4KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzOC9pbmNsdWRlL21hY2gvYmY1MzguaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzOC9pbmNsdWRlL21hY2gvYmY1MzguaAppbmRleCA5YzhhYmIzLi4wY2Y1YmY4IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzgvaW5jbHVkZS9tYWNoL2JmNTM4LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM4L2luY2x1ZGUvbWFjaC9iZjUzOC5oCkBAIC0xLDMwICsxLDkgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGluY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1MzgvYmY1MzguaAotICogQmFzZWQgb246CWluY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1MzcvYmY1MzcuaAotICogQXV0aG9yOglNaWNoYWVsIEhlbm5lcmljaCAobWljaGFlbC5oZW5uZXJpY2hAYW5hbG9nLmNvbSkKKyAqIFNZU1RFTSBNTVIgUkVHSVNURVIgQU5EIE1FTU9SWSBNQVAgRk9SIEFEU1AtQkY1MzgKICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246ICBTWVNURU0gTU1SIFJFR0lTVEVSIEFORCBNRU1PUlkgTUFQIEZPUiBBRFNQLUJGNTI3CisgKiBDb3B5cmlnaHQgMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDcgQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpZm5kZWYgX19NQUNIX0JGNTM4X0hfXwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM4L2luY2x1ZGUvbWFjaC9iZmluX3NlcmlhbF81eHguaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzOC9pbmNsdWRlL21hY2gvYmZpbl9zZXJpYWxfNXh4LmgKaW5kZXggOTk5ZjIzOS4uNWMxNDgxNCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM4L2luY2x1ZGUvbWFjaC9iZmluX3NlcmlhbF81eHguaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzgvaW5jbHVkZS9tYWNoL2JmaW5fc2VyaWFsXzV4eC5oCkBAIC0xLDMyICsxLDcgQEAKIC8qCi0gKiBmaWxlOiAgICAgICAgIGluY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1MzgvYmZpbl9zZXJpYWxfNXh4LmgKLSAqIGJhc2VkIG9uOgotICogYXV0aG9yOgorICogQ29weXJpZ2h0IDIwMDgtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogY3JlYXRlZDoKLSAqIGRlc2NyaXB0aW9uOgotICoJYmxhY2tmaW4gc2VyaWFsIGRyaXZlciBoZWFkZXIgZmlsZXMKLSAqIHJldjoKLSAqCi0gKiBtb2RpZmllZDoKLSAqCi0gKgotICogYnVnczogICAgICAgICBlbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiB0aGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBnbnUgZ2VuZXJhbCBwdWJsaWMgbGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBmcmVlIHNvZnR3YXJlIGZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAqIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIHRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IHdpdGhvdXQgYW55IHdhcnJhbnR5OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIG1lcmNoYW50YWJpbGl0eSBvciBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZS4gIHNlZSB0aGUKLSAqIGdudSBnZW5lcmFsIHB1YmxpYyBsaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgZ251IGdlbmVyYWwgcHVibGljIGxpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgY29weWluZy4KLSAqIGlmIG5vdCwgd3JpdGUgdG8gdGhlIGZyZWUgc29mdHdhcmUgZm91bmRhdGlvbiwKLSAqIDU5IHRlbXBsZSBwbGFjZSAtIHN1aXRlIDMzMCwgYm9zdG9uLCBtYSAwMjExMS0xMzA3LCB1c2EuCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM4L2luY2x1ZGUvbWFjaC9ibGFja2Zpbi5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM4L2luY2x1ZGUvbWFjaC9ibGFja2Zpbi5oCmluZGV4IDVlY2VlMTYuLjI3OGU4OTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzOC9pbmNsdWRlL21hY2gvYmxhY2tmaW4uaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzgvaW5jbHVkZS9tYWNoL2JsYWNrZmluLmgKQEAgLTEsMzIgKzEsNyBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjUzOC9ibGFja2Zpbi5oCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA4LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjoKLSAqCi0gKiBSZXY6Ci0gKgotICogTW9kaWZpZWQ6Ci0gKgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gKiBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCi0gKiBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0gKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpZm5kZWYgX01BQ0hfQkxBQ0tGSU5fSF8KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzOC9pbmNsdWRlL21hY2gvY2RlZkJGNTM4LmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzgvaW5jbHVkZS9tYWNoL2NkZWZCRjUzOC5oCmluZGV4IDFkZTY3NTEuLjQwMWViZDcgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzOC9pbmNsdWRlL21hY2gvY2RlZkJGNTM4LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM4L2luY2x1ZGUvbWFjaC9jZGVmQkY1MzguaApAQCAtMSwzMSArMSw3IEBACiAvKgotICogRmlsZTogICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTM4L2NkZWZCRjUzOC5oCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA4LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjoKLSAqCi0gKiBSZXY6Ci0gKgotICogTW9kaWZpZWQ6Ci0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAqIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KLSAqIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKLSAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2lmbmRlZiBfQ0RFRl9CRjUzOF9ICmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzgvaW5jbHVkZS9tYWNoL2RlZkJGNTM5LmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzgvaW5jbHVkZS9tYWNoL2RlZkJGNTM5LmgKaW5kZXggMWM1ODkxNC4uNWY2YzM0ZCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM4L2luY2x1ZGUvbWFjaC9kZWZCRjUzOS5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzOC9pbmNsdWRlL21hY2gvZGVmQkY1MzkuaApAQCAtMSw0NyArMSw5IEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgUHVibGljCi0gKiBMaWNlbnNlLiBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKLSAqIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogTm9uLUdQTCBMaWNlbnNlIGFsc28gYXZhaWxhYmxlIGFzIHBhcnQgb2YgVmlzdWFsRFNQKysKLSAqIGh0dHA6Ly93d3cuYW5hbG9nLmNvbS9wcm9jZXNzb3JzL3Jlc291cmNlcy9jcm9zc2NvcmUvdmlzdWFsRHNwRGV2U29mdHdhcmUuaHRtbAotICoKLSAqIChjKSBDb3B5cmlnaHQgMjAwMS0yMDA1IEFuYWxvZyBEZXZpY2VzLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQKLSAqCi0gKiBUaGlzIGZpbGUgdW5kZXIgc291cmNlIGNvZGUgY29udHJvbCwgcGxlYXNlIHNlbmQgYnVncyBvciBjaGFuZ2VzIHRvOgotICogZHNwdG9vbHMuc3VwcG9ydEBhbmFsb2cuY29tCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qCi0gKiBGaWxlOiAgICAgICAgIGluY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1MzgvZGVmQkY1MzkuaAotICogQmFzZWQgb246Ci0gKiBBdXRob3I6CisgKiBDb3B5cmlnaHQgMjAwOC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246Ci0gKgotICogUmV2OgotICoKLSAqIE1vZGlmaWVkOgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gKiBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCi0gKiBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0gKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFESSBCU0QgbGljZW5zZSBvciB0aGUgR1BMLTIgKG9yIGxhdGVyKQogICovCisKIC8qIFNZU1RFTSAmIE1NIFJFR0lTVEVSIEJJVCAmIEFERFJFU1MgREVGSU5JVElPTlMgRk9SIEFEU1AtQkY1MzgvOSAqLwogCiAjaWZuZGVmIF9ERUZfQkY1MzlfSApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM4L2luY2x1ZGUvbWFjaC9ncGlvLmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzgvaW5jbHVkZS9tYWNoL2dwaW8uaAppbmRleCAzMGY0ZjcyLi4yOTVjNzhhIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzgvaW5jbHVkZS9tYWNoL2dwaW8uaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzgvaW5jbHVkZS9tYWNoL2dwaW8uaApAQCAtMSw3ICsxLDQgQEAKIC8qCi0gKiBGaWxlOiBhcmNoL2JsYWNrZmluL21hY2gtYmY1MzgvaW5jbHVkZS9tYWNoL2dwaW8uaAotICogQnVnczogRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgogICogQ29weXJpZ2h0IChDKSAyMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM4L2luY2x1ZGUvbWFjaC9pcnEuaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzOC9pbmNsdWRlL21hY2gvaXJxLmgKaW5kZXggZmRjODdmZS4uYTRiN2ZjYiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM4L2luY2x1ZGUvbWFjaC9pcnEuaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzgvaW5jbHVkZS9tYWNoL2lycS5oCkBAIC0xLDMyICsxLDcgQEAKIC8qCi0gKiBmaWxlOglpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTM4L2lycS5oCi0gKiBiYXNlZCBvbjoJaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjUzNy9pcnEuaAotICogYXV0aG9yOglNaWNoYWVsIEhlbm5lcmljaCAobWljaGFlbC5oZW5uZXJpY2hAYW5hbG9nLmNvbSkKKyAqIENvcHlyaWdodCAyMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBjcmVhdGVkOgotICogZGVzY3JpcHRpb246Ci0gKglzeXN0ZW0gbW1yIHJlZ2lzdGVyIG1hcAotICogcmV2OgotICoKLSAqIG1vZGlmaWVkOgotICoKLSAqCi0gKiBidWdzOiAgICAgICAgIGVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIHRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIGdudSBnZW5lcmFsIHB1YmxpYyBsaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIGZyZWUgc29mdHdhcmUgZm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICogYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogdGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgd2l0aG91dCBhbnkgd2FycmFudHk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogbWVyY2hhbnRhYmlsaXR5IG9yIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlLiAgc2VlIHRoZQotICogZ251IGdlbmVyYWwgcHVibGljIGxpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBnbnUgZ2VuZXJhbCBwdWJsaWMgbGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBjb3B5aW5nLgotICogaWYgbm90LCB3cml0ZSB0byB0aGUgZnJlZSBzb2Z0d2FyZSBmb3VuZGF0aW9uLAotICogNTkgdGVtcGxlIHBsYWNlIC0gc3VpdGUgMzMwLCBib3N0b24sIG1hIDAyMTExLTEzMDcsIHVzYS4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAjaWZuZGVmIF9CRjUzOF9JUlFfSF8KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzOC9pbmNsdWRlL21hY2gvcG9ydG11eC5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM4L2luY2x1ZGUvbWFjaC9wb3J0bXV4LmgKaW5kZXggYzhkYjI2NC4uNjEyMWNmOCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM4L2luY2x1ZGUvbWFjaC9wb3J0bXV4LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM4L2luY2x1ZGUvbWFjaC9wb3J0bXV4LmgKQEAgLTEsMyArMSw5IEBACisvKgorICogQ29weXJpZ2h0IDIwMDgtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgorICovCisKICNpZm5kZWYgX01BQ0hfUE9SVE1VWF9IXwogI2RlZmluZSBfTUFDSF9QT1JUTVVYX0hfCiAKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzOC9pbnRzLXByaW9yaXR5LmMgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzgvaW50cy1wcmlvcml0eS5jCmluZGV4IDcwZDE3ZTUuLjFmYTc5M2MgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzOC9pbnRzLXByaW9yaXR5LmMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM4L2ludHMtcHJpb3JpdHkuYwpAQCAtMSwzMCArMSw5IEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL21hY2gtYmY1MzgvaW50cy1wcmlvcml0eS5jCi0gKiBCYXNlZCBvbjogICAgIGFyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9pbnRzLXByaW9yaXR5LmMKLSAqIEF1dGhvcjogICAgICAgTWljaGFlbCBIZW5uZXJpY2gKKyAqIFNldCB1cCB0aGUgaW50ZXJydXB0IHByaW9yaXRpZXMKICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246ICBTZXQgdXAgdGhlIGludGVycnVwdCBwcmlvcml0aWVzCisgKiBDb3B5cmlnaHQgMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvYm9hcmRzL2NtX2JmNTQ4LmMgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvYm9hcmRzL2NtX2JmNTQ4LmMKaW5kZXggZTU2NWFhZS4uY2NkY2Q2ZCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2JvYXJkcy9jbV9iZjU0OC5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9ib2FyZHMvY21fYmY1NDguYwpAQCAtMSwzMSArMSwxMCBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2JvYXJkcy9jbV9iZjU0OC5jCi0gKiBCYXNlZCBvbjogICAgIGFyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9ib2FyZHMvZXpraXQuYwotICogQXV0aG9yOiAgICAgICBBaWRhbiBXaWxsaWFtcyA8YWlkYW5AbmljdGEuY29tLmF1PgorICogQ29weXJpZ2h0IDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKiAgICAgICAgICAgMjAwOC0yMDA5IEJsdWV0ZWNobml4CisgKiAgICAgICAgICAgICAgICAyMDA1IE5hdGlvbmFsIElDVCBBdXN0cmFsaWEgKE5JQ1RBKQorICogICAgICAgICAgICAgICAgICAgICAgQWlkYW4gV2lsbGlhbXMgPGFpZGFuQG5pY3RhLmNvbS5hdT4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246Ci0gKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA1IE5hdGlvbmFsIElDVCBBdXN0cmFsaWEgKE5JQ1RBKQotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CkBAIC0zODAsMTkgKzM1OSw2IEBACiB9OwogI2VuZGlmCiAKLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgYmZpbl9ncGlvc19yZXNvdXJjZXMgPSB7Ci0JLnN0YXJ0ID0gMCwKLQkuZW5kICAgPSBNQVhfQkxBQ0tGSU5fR1BJT1MgLSAxLAotCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYmZpbl9ncGlvc19kZXZpY2UgPSB7Ci0JLm5hbWUgPSAic2ltcGxlLWdwaW8iLAotCS5pZCA9IC0xLAotCS5udW1fcmVzb3VyY2VzID0gMSwKLQkucmVzb3VyY2UgPSAmYmZpbl9ncGlvc19yZXNvdXJjZXMsCi19OwotCiAjaWYgZGVmaW5lZChDT05GSUdfUEFUQV9CRjU0WCkgfHwgZGVmaW5lZChDT05GSUdfUEFUQV9CRjU0WF9NT0RVTEUpCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIGJmaW5fYXRhcGlfcmVzb3VyY2VzW10gPSB7CiAJewpAQCAtNTQ2LDEzICs1MTIsMTEgQEAKIHN0YXRpYyBzdHJ1Y3QgYmZpbjV4eF9zcGlfY2hpcCBzcGlfZmxhc2hfY2hpcF9pbmZvID0gewogCS5lbmFibGVfZG1hID0gMCwgICAgICAgICAvKiB1c2UgZG1hIHRyYW5zZmVyIHdpdGggdGhpcyBjaGlwKi8KIAkuYml0c19wZXJfd29yZCA9IDgsCi0JLmNzX2NoYW5nZV9wZXJfd29yZCA9IDAsCiB9OwogI2VuZGlmCiAKICNpZiBkZWZpbmVkKENPTkZJR19UT1VDSFNDUkVFTl9BRDc4NzcpIHx8IGRlZmluZWQoQ09ORklHX1RPVUNIU0NSRUVOX0FENzg3N19NT0RVTEUpCiBzdGF0aWMgc3RydWN0IGJmaW41eHhfc3BpX2NoaXAgc3BpX2FkNzg3N19jaGlwX2luZm8gPSB7Ci0JLmNzX2NoYW5nZV9wZXJfd29yZCA9IDAsCiAJLmVuYWJsZV9kbWEgPSAwLAogCS5iaXRzX3Blcl93b3JkID0gMTYsCiB9OwpAQCAtODUzLDggKzgxNyw2IEBACiAjaWYgZGVmaW5lZChDT05GSUdfTVREX1BIWVNNQVApIHx8IGRlZmluZWQoQ09ORklHX01URF9QSFlTTUFQX01PRFVMRSkKIAkmcGFyYV9mbGFzaF9kZXZpY2UsCiAjZW5kaWYKLQotCSZiZmluX2dwaW9zX2RldmljZSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IGNtX2JmNTQ4X2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9ib2FyZHMvZXpraXQuYyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9ib2FyZHMvZXpraXQuYwppbmRleCBjNjZmMzgwLi4xYTUyODZiIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvYm9hcmRzL2V6a2l0LmMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2JvYXJkcy9lemtpdC5jCkBAIC0xLDMxICsxLDkgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9ib2FyZHMvZXpraXQuYwotICogQmFzZWQgb246ICAgICBhcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvYm9hcmRzL2V6a2l0LmMKLSAqIEF1dGhvcjogICAgICAgQWlkYW4gV2lsbGlhbXMgPGFpZGFuQG5pY3RhLmNvbS5hdT4KKyAqIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgorICogICAgICAgICAgICAgICAgMjAwNSBOYXRpb25hbCBJQ1QgQXVzdHJhbGlhIChOSUNUQSkKKyAqICAgICAgICAgICAgICAgICAgICAgIEFpZGFuIFdpbGxpYW1zIDxhaWRhbkBuaWN0YS5jb20uYXU+CiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOgotICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNSBOYXRpb25hbCBJQ1QgQXVzdHJhbGlhIChOSUNUQSkKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwNyBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgpAQCAtMjA4LDcgKzE4Niw2IEBACiAjZW5kaWYKIAogI2lmIGRlZmluZWQoQ09ORklHX0lOUFVUX0FEWEwzNFgpIHx8IGRlZmluZWQoQ09ORklHX0lOUFVUX0FEWEwzNFhfTU9EVUxFKQotI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3BpL2FkeGwzNHguaD4KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYWR4bDM0eF9wbGF0Zm9ybV9kYXRhIGFkeGwzNHhfaW5mbyA9IHsKIAkueF9heGlzX29mZnNldCA9IDAsCkBAIC02MzYsNyArNjEzLDYgQEAKIHN0YXRpYyBzdHJ1Y3QgYmZpbjV4eF9zcGlfY2hpcCBzcGlfZmxhc2hfY2hpcF9pbmZvID0gewogCS5lbmFibGVfZG1hID0gMCwgICAgICAgICAvKiB1c2UgZG1hIHRyYW5zZmVyIHdpdGggdGhpcyBjaGlwKi8KIAkuYml0c19wZXJfd29yZCA9IDgsCi0JLmNzX2NoYW5nZV9wZXJfd29yZCA9IDAsCiB9OwogI2VuZGlmCiAKQEAgLTY1MCw3ICs2MjYsNiBAQAogCiAjaWYgZGVmaW5lZChDT05GSUdfVE9VQ0hTQ1JFRU5fQUQ3ODc3KSB8fCBkZWZpbmVkKENPTkZJR19UT1VDSFNDUkVFTl9BRDc4NzdfTU9EVUxFKQogc3RhdGljIHN0cnVjdCBiZmluNXh4X3NwaV9jaGlwIHNwaV9hZDc4NzdfY2hpcF9pbmZvID0gewotCS5jc19jaGFuZ2VfcGVyX3dvcmQgPSAwLAogCS5lbmFibGVfZG1hID0gMCwKIAkuYml0c19wZXJfd29yZCA9IDE2LAogfTsKQEAgLTY4MSw3ICs2NTYsNiBAQAogc3RhdGljIHN0cnVjdCBiZmluNXh4X3NwaV9jaGlwIHNwaV9hZHhsMzR4X2NoaXBfaW5mbyA9IHsKIAkuZW5hYmxlX2RtYSA9IDAsICAgICAgICAgLyogdXNlIGRtYSB0cmFuc2ZlciB3aXRoIHRoaXMgY2hpcCovCiAJLmJpdHNfcGVyX3dvcmQgPSA4LAotCS5jc19jaGFuZ2VfcGVyX3dvcmQgPSAwLAogfTsKICNlbmRpZgogCkBAIC05MDgsMTkgKzg4Miw2IEBACiB9OwogI2VuZGlmCiAKLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgYmZpbl9ncGlvc19yZXNvdXJjZXMgPSB7Ci0JLnN0YXJ0ID0gMCwKLQkuZW5kICAgPSBNQVhfQkxBQ0tGSU5fR1BJT1MgLSAxLAotCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYmZpbl9ncGlvc19kZXZpY2UgPSB7Ci0JLm5hbWUgPSAic2ltcGxlLWdwaW8iLAotCS5pZCA9IC0xLAotCS5udW1fcmVzb3VyY2VzID0gMSwKLQkucmVzb3VyY2UgPSAmYmZpbl9ncGlvc19yZXNvdXJjZXMsCi19OwotCiBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGNjbGtfdmxldl9kYXRhc2hlZXRbXSA9CiB7CiAvKgpAQCAtMTAyOCw4ICs5ODksNiBAQAogCSZiZmluX2RldmljZV9ncGlva2V5cywKICNlbmRpZgogCi0JJmJmaW5fZ3Bpb3NfZGV2aWNlLAotCiAjaWYgZGVmaW5lZChDT05GSUdfTVREX1BIWVNNQVApIHx8IGRlZmluZWQoQ09ORklHX01URF9QSFlTTUFQX01PRFVMRSkKIAkmZXpraXRfZmxhc2hfZGV2aWNlLAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvZG1hLmMgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvZG1hLmMKaW5kZXggZDkyMzliYy4uMDM5YTZkOSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2RtYS5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9kbWEuYwpAQCAtMSwzMCArMSw5IEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvZG1hLmMKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogdGhlIHNpbXBsZSBETUEgSW1wbGVtZW50YXRpb24gZm9yIEJsYWNrZmluCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOiAgVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBzaW1wbGUgRE1BIEltcGxlbWVudGF0aW9uIGZvciBCbGFja2ZpbgorICogQ29weXJpZ2h0IDIwMDctMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvYmY1NDguaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvYmY1NDguaAppbmRleCBjZDMxZjcyLi43YmVhZDVjIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2JmNTQ4LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9iZjU0OC5oCkBAIC0xLDMwICsxLDcgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGluY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1NDgvYmY1NDguaAotICogQmFzZWQgb246Ci0gKiBBdXRob3I6CisgKiBDb3B5cmlnaHQgMjAwNy0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246ICBTeXN0ZW0gTU1SIHJlZ2lzdGVyIGFuZCBtZW1vcnkgbWFwIGZvciBBRFNQLUJGNTQ4Ci0gKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDcgQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpZm5kZWYgX19NQUNIX0JGNTQ4X0hfXwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9iZjU0eC1scTA0My5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9iZjU0eC1scTA0My5oCmluZGV4IDljN2NhNjIuLjg4MjFlZmUgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvYmY1NHgtbHEwNDMuaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2JmNTR4LWxxMDQzLmgKQEAgLTEsMyArMSw5IEBACisvKgorICogQ29weXJpZ2h0IDIwMDctMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgorICovCisKICNpZm5kZWYgQkY1NFhfTFEwNDNfSAogI2RlZmluZSBCRjU0WF9MUTA0M19ICiAKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvYmY1NHhfa2V5cy5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9iZjU0eF9rZXlzLmgKaW5kZXggMWZiNGVjNy4uNDkzMzhhZSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9iZjU0eF9rZXlzLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9iZjU0eF9rZXlzLmgKQEAgLTEsMyArMSw5IEBACisvKgorICogQ29weXJpZ2h0IDIwMDctMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgorICovCisKICNpZm5kZWYgX0JGSU5fS1BBRF9ICiAjZGVmaW5lIF9CRklOX0tQQURfSAogCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2JmaW5fc2VyaWFsXzV4eC5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9iZmluX3NlcmlhbF81eHguaAppbmRleCAyZDFiNWZhLi5kZDQ0YWE3IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2JmaW5fc2VyaWFsXzV4eC5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvYmZpbl9zZXJpYWxfNXh4LmgKQEAgLTEsMzIgKzEsNyBAQAogLyoKLSAqIGZpbGU6ICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTQ4L2JmaW5fc2VyaWFsXzV4eC5oCi0gKiBiYXNlZCBvbjoKLSAqIGF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA3LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIGNyZWF0ZWQ6Ci0gKiBkZXNjcmlwdGlvbjoKLSAqCWJsYWNrZmluIHNlcmlhbCBkcml2ZXIgaGVhZCBmaWxlCi0gKiByZXY6Ci0gKgotICogbW9kaWZpZWQ6Ci0gKgotICoKLSAqIGJ1Z3M6ICAgICAgICAgZW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogdGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgZ251IGdlbmVyYWwgcHVibGljIGxpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgZnJlZSBzb2Z0d2FyZSBmb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gKiBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiB0aGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCB3aXRob3V0IGFueSB3YXJyYW50eTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBtZXJjaGFudGFiaWxpdHkgb3IgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UuICBzZWUgdGhlCi0gKiBnbnUgZ2VuZXJhbCBwdWJsaWMgbGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIGdudSBnZW5lcmFsIHB1YmxpYyBsaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIGNvcHlpbmcuCi0gKiBpZiBub3QsIHdyaXRlIHRvIHRoZSBmcmVlIHNvZnR3YXJlIGZvdW5kYXRpb24sCi0gKiA1OSB0ZW1wbGUgcGxhY2UgLSBzdWl0ZSAzMzAsIGJvc3RvbiwgbWEgMDIxMTEtMTMwNywgdXNhLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpbmNsdWRlIDxsaW51eC9zZXJpYWwuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvYmxhY2tmaW4uaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvYmxhY2tmaW4uaAppbmRleCAzMTg2NjdiLi4xMzMwMmI2IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2JsYWNrZmluLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9ibGFja2Zpbi5oCkBAIC0xLDMyICsxLDcgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGluY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1NDgvYmxhY2tmaW4uaAotICogQmFzZWQgb246Ci0gKiBBdXRob3I6CisgKiBDb3B5cmlnaHQgMjAwNy0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246Ci0gKgotICogUmV2OgotICoKLSAqIE1vZGlmaWVkOgotICoKLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICogYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgotICogSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAjaWZuZGVmIF9NQUNIX0JMQUNLRklOX0hfCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2NkZWZCRjU0Mi5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9jZGVmQkY1NDIuaAppbmRleCAwN2FlZmI5Li40MmY0YTk0IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2NkZWZCRjU0Mi5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvY2RlZkJGNTQyLmgKQEAgLTEsMzEgKzEsNyBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjU0OC9jZGVmQkY1NDIuaAotICogQmFzZWQgb246Ci0gKiBBdXRob3I6CisgKiBDb3B5cmlnaHQgMjAwNy0yMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246Ci0gKgotICogUmV2OgotICoKLSAqIE1vZGlmaWVkOgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gKiBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCi0gKiBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0gKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpZm5kZWYgX0NERUZfQkY1NDJfSApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9jZGVmQkY1NDQuaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvY2RlZkJGNTQ0LmgKaW5kZXggNDMxYTY5Mi4uMjIwNzc5OSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9jZGVmQkY1NDQuaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2NkZWZCRjU0NC5oCkBAIC0xLDMxICsxLDcgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGluY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1NDgvY2RlZkJGNTQ0LmgKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogQ29weXJpZ2h0IDIwMDctMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOgotICoKLSAqIFJldjoKLSAqCi0gKiBNb2RpZmllZDoKLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICogYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgotICogSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAjaWZuZGVmIF9DREVGX0JGNTQ0X0gKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvY2RlZkJGNTQ3LmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2NkZWZCRjU0Ny5oCmluZGV4IDkzMzc2ZTkuLjQyMzQyMTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvY2RlZkJGNTQ3LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9jZGVmQkY1NDcuaApAQCAtMSwzMSArMSw3IEBACiAvKgotICogRmlsZTogICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTQ4L2NkZWZCRjU0Ny5oCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246Ci0gKgotICogUmV2OgotICoKLSAqIE1vZGlmaWVkOgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gKiBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCi0gKiBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0gKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpZm5kZWYgX0NERUZfQkY1NDhfSApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9jZGVmQkY1NDguaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvY2RlZkJGNTQ4LmgKaW5kZXggOWNkNzQzOC4uZGY4NDE4MCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9jZGVmQkY1NDguaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2NkZWZCRjU0OC5oCkBAIC0xLDMxICsxLDcgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGluY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1NDgvY2RlZkJGNTQ4LmgKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogQ29weXJpZ2h0IDIwMDctMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOgotICoKLSAqIFJldjoKLSAqCi0gKiBNb2RpZmllZDoKLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICogYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgotICogSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAjaWZuZGVmIF9DREVGX0JGNTQ4X0gKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvY2RlZkJGNTQ5LmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2NkZWZCRjU0OS5oCmluZGV4IGVhZDM2MGIuLjM0Yzg0YzcgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvY2RlZkJGNTQ5LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9jZGVmQkY1NDkuaApAQCAtMSwzMSArMSw3IEBACiAvKgotICogRmlsZTogICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTQ5L2NkZWZCRjU0OS5oCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA3LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjoKLSAqCi0gKiBSZXY6Ci0gKgotICogTW9kaWZpZWQ6Ci0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAqIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KLSAqIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKLSAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2lmbmRlZiBfQ0RFRl9CRjU0OV9ICmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2NkZWZCRjU0eF9iYXNlLmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2NkZWZCRjU0eF9iYXNlLmgKaW5kZXggNmU2MzZjNC4uYTJlOWQ5OCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9jZGVmQkY1NHhfYmFzZS5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvY2RlZkJGNTR4X2Jhc2UuaApAQCAtMSwzMSArMSw3IEBACiAvKgotICogRmlsZTogICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTQ4L2NkZWZCRjU0eF9iYXNlLmgKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogQ29weXJpZ2h0IDIwMDctMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOgotICoKLSAqIFJldjoKLSAqCi0gKiBNb2RpZmllZDoKLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICogYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgotICogSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAjaWZuZGVmIF9DREVGX0JGNTRYX0gKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvZGVmQkY1NDIuaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvZGVmQkY1NDIuaAppbmRleCBiMTMxNjU0Li5kM2JjNmQxIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2RlZkJGNTQyLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9kZWZCRjU0Mi5oCkBAIC0xLDMxICsxLDcgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGluY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1NDgvZGVmQkY1NDIuaAotICogQmFzZWQgb246Ci0gKiBBdXRob3I6CisgKiBDb3B5cmlnaHQgMjAwNy0yMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246Ci0gKgotICogUmV2OgotICoKLSAqIE1vZGlmaWVkOgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gKiBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCi0gKiBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0gKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFESSBCU0QgbGljZW5zZSBvciB0aGUgR1BMLTIgKG9yIGxhdGVyKQogICovCiAKICNpZm5kZWYgX0RFRl9CRjU0Ml9ICmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2RlZkJGNTQ0LmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2RlZkJGNTQ0LmgKaW5kZXggYzJjNzg1Yi4uZGQ0MTRhZSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9kZWZCRjU0NC5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvZGVmQkY1NDQuaApAQCAtMSwzMSArMSw3IEBACiAvKgotICogRmlsZTogICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTQ4L2RlZkJGNTQ0LmgKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogQ29weXJpZ2h0IDIwMDctMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOgotICoKLSAqIFJldjoKLSAqCi0gKiBNb2RpZmllZDoKLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICogYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgotICogSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBREkgQlNEIGxpY2Vuc2Ugb3IgdGhlIEdQTC0yIChvciBsYXRlcikKICAqLwogCiAjaWZuZGVmIF9ERUZfQkY1NDRfSApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9kZWZCRjU0Ny5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9kZWZCRjU0Ny5oCmluZGV4IDY2MWYwZDguLjVhOWRiYWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvZGVmQkY1NDcuaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2RlZkJGNTQ3LmgKQEAgLTEsMzEgKzEsNyBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjU0OC9kZWZCRjU0Ny5oCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246Ci0gKgotICogUmV2OgotICoKLSAqIE1vZGlmaWVkOgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gKiBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCi0gKiBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0gKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFESSBCU0QgbGljZW5zZSBvciB0aGUgR1BMLTIgKG9yIGxhdGVyKQogICovCiAKICNpZm5kZWYgX0RFRl9CRjU0OF9ICmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2RlZkJGNTQ4LmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2RlZkJGNTQ4LmgKaW5kZXggODVkNGJhZC4uODJjZDU5MyAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9kZWZCRjU0OC5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvZGVmQkY1NDguaApAQCAtMSwzMSArMSw3IEBACiAvKgotICogRmlsZTogICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTQ4L2RlZkJGNTQ4LmgKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogQ29weXJpZ2h0IDIwMDctMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOgotICoKLSAqIFJldjoKLSAqCi0gKiBNb2RpZmllZDoKLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICogYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgotICogSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBREkgQlNEIGxpY2Vuc2Ugb3IgdGhlIEdQTC0yIChvciBsYXRlcikKICAqLwogCiAjaWZuZGVmIF9ERUZfQkY1NDhfSApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9kZWZCRjU0OS5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9kZWZCRjU0OS5oCmluZGV4IDA5NjczNDUuLjZmYzZlMzkgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvZGVmQkY1NDkuaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2RlZkJGNTQ5LmgKQEAgLTEsMzEgKzEsNyBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjU0OC9kZWZCRjU0OS5oCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA3LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjoKLSAqCi0gKiBSZXY6Ci0gKgotICogTW9kaWZpZWQ6Ci0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAqIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KLSAqIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKLSAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQURJIEJTRCBsaWNlbnNlIG9yIHRoZSBHUEwtMiAob3IgbGF0ZXIpCiAgKi8KIAogI2lmbmRlZiBfREVGX0JGNTQ5X0gKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvZGVmQkY1NHhfYmFzZS5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9kZWZCRjU0eF9iYXNlLmgKaW5kZXggZTAyMmU4OS4uODU5MGM4YyAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9kZWZCRjU0eF9iYXNlLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9kZWZCRjU0eF9iYXNlLmgKQEAgLTEsMzEgKzEsNyBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjU0OC9kZWZCRjU0eF9iYXNlLmgKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogQ29weXJpZ2h0IDIwMDctMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOgotICoKLSAqIFJldjoKLSAqCi0gKiBNb2RpZmllZDoKLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICogYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgotICogSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBREkgQlNEIGxpY2Vuc2Ugb3IgdGhlIEdQTC0yIChvciBsYXRlcikKICAqLwogCiAjaWZuZGVmIF9ERUZfQkY1NFhfSApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9ncGlvLmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2dwaW8uaAppbmRleCAzYTIwNTE3Li44NTBlMzlkIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2dwaW8uaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2dwaW8uaApAQCAtMSwzNCArMSw4IEBACiAvKgotICogRmlsZTogICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTQ4L2dwaW8uaAotICogQmFzZWQgb246Ci0gKiBBdXRob3I6CSBNaWNoYWVsIEhlbm5lcmljaCAoaGVubmVyaWNoQGJsYWNrZmluLnVjbGludXgub3JnKQotICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjoKLSAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwNyBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBDb3B5cmlnaHQgMjAwNy0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCi0KLQogI2RlZmluZSBHUElPX1BBMAkwCiAjZGVmaW5lIEdQSU9fUEExCTEKICNkZWZpbmUgR1BJT19QQTIJMgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9pcnEuaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvaXJxLmgKaW5kZXggZjE5NDYyNS4uMTA2ZGIwNSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9pcnEuaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2lycS5oCkBAIC0xLDMyICsxLDcgQEAKIC8qCi0gKiBmaWxlOglpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTQ4L2lycS5oCi0gKiBiYXNlZCBvbjoJaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjUzNy9pcnEuaAotICogYXV0aG9yOglSb3kgSHVhbmcgKHJveS5odWFuZ0BhbmFsb2cuY29tKQorICogQ29weXJpZ2h0IDIwMDctMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogY3JlYXRlZDoKLSAqIGRlc2NyaXB0aW9uOgotICoJc3lzdGVtIG1tciByZWdpc3RlciBtYXAKLSAqIHJldjoKLSAqCi0gKiBtb2RpZmllZDoKLSAqCi0gKgotICogYnVnczogICAgICAgICBlbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiB0aGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBnbnUgZ2VuZXJhbCBwdWJsaWMgbGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBmcmVlIHNvZnR3YXJlIGZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAqIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIHRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IHdpdGhvdXQgYW55IHdhcnJhbnR5OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIG1lcmNoYW50YWJpbGl0eSBvciBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZS4gIHNlZSB0aGUKLSAqIGdudSBnZW5lcmFsIHB1YmxpYyBsaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgZ251IGdlbmVyYWwgcHVibGljIGxpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgY29weWluZy4KLSAqIGlmIG5vdCwgd3JpdGUgdG8gdGhlIGZyZWUgc29mdHdhcmUgZm91bmRhdGlvbiwKLSAqIDU5IHRlbXBsZSBwbGFjZSAtIHN1aXRlIDMzMCwgYm9zdG9uLCBtYSAwMjExMS0xMzA3LCB1c2EuCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2lmbmRlZiBfQkY1NDhfSVJRX0hfCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL3BvcnRtdXguaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvcG9ydG11eC5oCmluZGV4IGNlMzcyYmEuLjg5YWQ2YTggMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvcG9ydG11eC5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvcG9ydG11eC5oCkBAIC0xLDMgKzEsOSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA3LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KKyAqLworCiAjaWZuZGVmIF9NQUNIX1BPUlRNVVhfSF8KICNkZWZpbmUgX01BQ0hfUE9SVE1VWF9IXwogCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW50cy1wcmlvcml0eS5jIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2ludHMtcHJpb3JpdHkuYwppbmRleCA5ZGQwZmEzLi40OGRkM2E0IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW50cy1wcmlvcml0eS5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbnRzLXByaW9yaXR5LmMKQEAgLTEsMzAgKzEsOSBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2ludHMtcHJpb3JpdHkuYwotICogQmFzZWQgb246ICAgICBhcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvaW50cy1wcmlvcml0eS5jCi0gKiBBdXRob3I6ICAgICAgIE1pY2hhZWwgSGVubmVyaWNoCisgKiBDb3B5cmlnaHQgMjAwNy0yMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246ICBTZXQgdXAgdGhlIGludGVycnVwdCBwcmlvcml0aWVzCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDYgQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogU2V0IHVwIHRoZSBpbnRlcnJ1cHQgcHJpb3JpdGllcwogICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9hdG9taWMuUyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9hdG9taWMuUwppbmRleCA5NDM5YmM2Li4wMjYxYTVlIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvYXRvbWljLlMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2F0b21pYy5TCkBAIC0xLDIzICsxLDggQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9hdG9taWMuUwotICogQXV0aG9yOiAgICAgICBQaGlsaXBwZSBHZXJ1bSA8cnBtQHhlbm9tYWkub3JnPgorICogQ29weXJpZ2h0IDIwMDctMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKiAgICAgICAgICAgICAgUGhpbGlwcGUgR2VydW0gPHJwbUB4ZW5vbWFpLm9yZz4KICAqCi0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA3IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9ib2FyZHMvY21fYmY1NjEuYyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9ib2FyZHMvY21fYmY1NjEuYwppbmRleCA2NTc3ZWNmLi5kZmM4ZDViIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvYm9hcmRzL2NtX2JmNTYxLmMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2JvYXJkcy9jbV9iZjU2MS5jCkBAIC0xLDMwICsxLDEwIEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvYm9hcmRzL2NtX2JmNTYxLmMKLSAqIEJhc2VkIG9uOiAgICAgYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2JvYXJkcy9lemtpdC5jCi0gKiBBdXRob3I6ICAgICAgIEFpZGFuIFdpbGxpYW1zIDxhaWRhbkBuaWN0YS5jb20uYXU+IENvcHlyaWdodCAyMDA1CisgKiBDb3B5cmlnaHQgMjAwNC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqICAgICAgICAgICAgICAgMjAwOC0yMDA5IEJsdWV0ZWNobml4CisgKiAgICAgICAgICAgICAgIDIwMDUgTmF0aW9uYWwgSUNUIEF1c3RyYWxpYSAoTklDVEEpCisgKiAgICAgICAgICAgICAgICAgICAgQWlkYW4gV2lsbGlhbXMgPGFpZGFuQG5pY3RhLmNvbS5hdT4KICAqCi0gKiBDcmVhdGVkOiAgICAgIDIwMDYKLSAqIERlc2NyaXB0aW9uOiAgQm9hcmQgZGVzY3JpcHRpb24gZmlsZQotICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA2IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CkBAIC0yODUsMTkgKzI2NSw2IEBACiB9OwogI2VuZGlmCiAKLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgYmZpbl9ncGlvc19yZXNvdXJjZXMgPSB7Ci0JLnN0YXJ0ID0gMCwKLQkuZW5kICAgPSBNQVhfQkxBQ0tGSU5fR1BJT1MgLSAxLAotCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYmZpbl9ncGlvc19kZXZpY2UgPSB7Ci0JLm5hbWUgPSAic2ltcGxlLWdwaW8iLAotCS5pZCA9IC0xLAotCS5udW1fcmVzb3VyY2VzID0gMSwKLQkucmVzb3VyY2UgPSAmYmZpbl9ncGlvc19yZXNvdXJjZXMsCi19OwotCiAjaWYgZGVmaW5lZChDT05GSUdfVVNCX0lTUDEzNjJfSENEKSB8fCBkZWZpbmVkKENPTkZJR19VU0JfSVNQMTM2Ml9IQ0RfTU9EVUxFKQogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBpc3AxMzYyX2hjZF9yZXNvdXJjZXNbXSA9IHsKIAl7CkBAIC01MzIsOCArNDk5LDYgQEAKICNpZiBkZWZpbmVkKENPTkZJR19NVERfUEhZU01BUCkgfHwgZGVmaW5lZChDT05GSUdfTVREX1BIWVNNQVBfTU9EVUxFKQogCSZwYXJhX2ZsYXNoX2RldmljZSwKICNlbmRpZgotCi0JJmJmaW5fZ3Bpb3NfZGV2aWNlLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgY21fYmY1NjFfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2JvYXJkcy9lemtpdC5jIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2JvYXJkcy9lemtpdC5jCmluZGV4IGNhZWQ5NmIuLjllMmQ4Y2YgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9ib2FyZHMvZXpraXQuYworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvYm9hcmRzL2V6a2l0LmMKQEAgLTEsMzAgKzEsOSBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2V6a2l0LmMKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogQ29weXJpZ2h0IDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKiAgICAgICAgICAgICAgIDIwMDUgTmF0aW9uYWwgSUNUIEF1c3RyYWxpYSAoTklDVEEpCisgKiAgICAgICAgICAgICAgICAgICAgQWlkYW4gV2lsbGlhbXMgPGFpZGFuQG5pY3RhLmNvbS5hdT4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246Ci0gKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDYgQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KQEAgLTM4NywxOSArMzY2LDYgQEAKIH07CiAjZW5kaWYKIAotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBiZmluX2dwaW9zX3Jlc291cmNlcyA9IHsKLQkuc3RhcnQgPSAwLAotCS5lbmQgICA9IE1BWF9CTEFDS0ZJTl9HUElPUyAtIDEsCi0JLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBiZmluX2dwaW9zX2RldmljZSA9IHsKLQkubmFtZSA9ICJzaW1wbGUtZ3BpbyIsCi0JLmlkID0gLTEsCi0JLm51bV9yZXNvdXJjZXMgPSAxLAotCS5yZXNvdXJjZSA9ICZiZmluX2dwaW9zX3Jlc291cmNlcywKLX07Ci0KICNpZiBkZWZpbmVkKENPTkZJR19JMkNfR1BJTykgfHwgZGVmaW5lZChDT05GSUdfSTJDX0dQSU9fTU9EVUxFKQogI2luY2x1ZGUgPGxpbnV4L2kyYy1ncGlvLmg+CiAKQEAgLTQ5Myw4ICs0NTksNiBAQAogCSZpc3AxMzYyX2hjZF9kZXZpY2UsCiAjZW5kaWYKIAotCSZiZmluX2dwaW9zX2RldmljZSwKLQogI2lmIGRlZmluZWQoQ09ORklHX01URF9QSFlTTUFQKSB8fCBkZWZpbmVkKENPTkZJR19NVERfUEhZU01BUF9NT0RVTEUpCiAJJmV6a2l0X2ZsYXNoX2RldmljZSwKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2JvYXJkcy90ZXBsYS5jIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2JvYXJkcy90ZXBsYS5jCmluZGV4IDZmNzdkYmUuLjhiYTcyNTIgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9ib2FyZHMvdGVwbGEuYworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvYm9hcmRzL3RlcGxhLmMKQEAgLTEsMTUgKzEsMTMgQEAKIC8qCi0gKiAgRmlsZTogYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL3RlcGxhLmMKKyAqIENvcHlyaWdodCAyMDA0LTIwMDcgQW5hbG9nIERldmljZXMgSW5jLgorICogICAgICAgICAgICAgICAgMjAwNSBOYXRpb25hbCBJQ1QgQXVzdHJhbGlhIChOSUNUQSkKKyAqICAgICAgICAgICAgICAgICAgICAgIEFpZGFuIFdpbGxpYW1zIDxhaWRhbkBuaWN0YS5jb20uYXU+CiAgKgotICogIENvcHlyaWdodCAyMDA0LTIwMDcgQW5hbG9nIERldmljZXMgSW5jLgotICogIE9ubHkgU01TQzkxQzExMTEgd2FzIHJlZ2lzdGVyZWQsIG1heSBkbyBtb3JlIGxhdGVyLgorICogVGhhbmtzIHRvIEphbWV5IEhpY2tzLgogICoKLSAqICBDb3B5cmlnaHQgMjAwNSBOYXRpb25hbCBJQ1QgQXVzdHJhbGlhIChOSUNUQSksIEFpZGFuIFdpbGxpYW1zIDxhaWRhbkBuaWN0YS5jb20uYXU+Ci0gKiAgVGhhbmtzIHRvIEphbWV5IEhpY2tzLgorICogT25seSBTTVNDOTFDMTExMSB3YXMgcmVnaXN0ZXJlZCwgbWF5IGRvIG1vcmUgbGF0ZXIuCiAgKgotICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMgogICovCiAKICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9jb3JlYi5jIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2NvcmViLmMKaW5kZXggOTM2MzVhNy4uMWU2MGE5MiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2NvcmViLmMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2NvcmViLmMKQEAgLTQ4LDcgKzQ4LDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBjb3JlYl9mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgY29yZWJfZm9wcyA9IHsKIAkub3duZXIgICA9IFRISVNfTU9EVUxFLAogCS5pb2N0bCAgID0gY29yZWJfaW9jdGwsCiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2RtYS5jIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2RtYS5jCmluZGV4IDQyYjAwMzcuLmM5MzhjM2MgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9kbWEuYworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvZG1hLmMKQEAgLTEsMzEgKzEsMTEgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9kbWEuYwotICogQmFzZWQgb246Ci0gKiBBdXRob3I6CisgKiB0aGUgc2ltcGxlIERNQSBJbXBsZW1lbnRhdGlvbiBmb3IgQmxhY2tmaW4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246ICBUaGlzIGZpbGUgY29udGFpbnMgdGhlIHNpbXBsZSBETUEgSW1wbGVtZW50YXRpb24gZm9yIEJsYWNrZmluCisgKiBDb3B5cmlnaHQgMjAwNy0yMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwNyBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KKwogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogCiAjaW5jbHVkZSA8YXNtL2JsYWNrZmluLmg+CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvaW5jbHVkZS9tYWNoL2JmNTYxLmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvaW5jbHVkZS9tYWNoL2JmNTYxLmgKaW5kZXggOTk2ODM2Mi4uOWY5YTM2NyAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2luY2x1ZGUvbWFjaC9iZjU2MS5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9pbmNsdWRlL21hY2gvYmY1NjEuaApAQCAtMSwzMCArMSw5IEBACiAvKgotICogRmlsZTogICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTYxL2JmNTYxLmgKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogU1lTVEVNIE1NUiBSRUdJU1RFUiBBTkQgTUVNT1JZIE1BUCBGT1IgQURTUC1CRjU2MQogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjogIFNZU1RFTSBNTVIgUkVHSVNURVIgQU5EIE1FTU9SWSBNQVAgRk9SIEFEU1AtQkY1NjEKKyAqIENvcHlyaWdodCAyMDA1LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA2IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAjaWZuZGVmIF9fTUFDSF9CRjU2MV9IX18KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9pbmNsdWRlL21hY2gvYmZpbl9zZXJpYWxfNXh4LmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvaW5jbHVkZS9tYWNoL2JmaW5fc2VyaWFsXzV4eC5oCmluZGV4IGZkNWU4ODcuLmUzM2UxNTggMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9pbmNsdWRlL21hY2gvYmZpbl9zZXJpYWxfNXh4LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2luY2x1ZGUvbWFjaC9iZmluX3NlcmlhbF81eHguaApAQCAtMSwzMiArMSw3IEBACiAvKgotICogZmlsZTogICAgICAgIGluY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1NjEvYmZpbl9zZXJpYWxfNXh4LmgKLSAqIGJhc2VkIG9uOgotICogYXV0aG9yOgorICogQ29weXJpZ2h0IDIwMDYtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogY3JlYXRlZDoKLSAqIGRlc2NyaXB0aW9uOgotICoJYmxhY2tmaW4gc2VyaWFsIGRyaXZlciBoZWFkIGZpbGUKLSAqIHJldjoKLSAqCi0gKiBtb2RpZmllZDoKLSAqCi0gKgotICogYnVnczogICAgICAgICBlbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiB0aGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBnbnUgZ2VuZXJhbCBwdWJsaWMgbGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBmcmVlIHNvZnR3YXJlIGZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAqIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIHRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IHdpdGhvdXQgYW55IHdhcnJhbnR5OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIG1lcmNoYW50YWJpbGl0eSBvciBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZS4gIHNlZSB0aGUKLSAqIGdudSBnZW5lcmFsIHB1YmxpYyBsaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgZ251IGdlbmVyYWwgcHVibGljIGxpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgY29weWluZy4KLSAqIGlmIG5vdCwgd3JpdGUgdG8gdGhlIGZyZWUgc29mdHdhcmUgZm91bmRhdGlvbiwKLSAqIDU5IHRlbXBsZSBwbGFjZSAtIHN1aXRlIDMzMCwgYm9zdG9uLCBtYSAwMjExMS0xMzA3LCB1c2EuCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2luY2x1ZGUvbWFjaC9ibGFja2Zpbi5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2luY2x1ZGUvbWFjaC9ibGFja2Zpbi5oCmluZGV4IDhiZTMxMzUuLjY3ZDZiZGMgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9pbmNsdWRlL21hY2gvYmxhY2tmaW4uaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvaW5jbHVkZS9tYWNoL2JsYWNrZmluLmgKQEAgLTEsMzEgKzEsNyBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjU2MS9ibGFja2Zpbi5oCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA1LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjoKLSAqCi0gKiBSZXY6Ci0gKgotICogTW9kaWZpZWQ6Ci0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAqIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KLSAqIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKLSAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2lmbmRlZiBfTUFDSF9CTEFDS0ZJTl9IXwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2luY2x1ZGUvbWFjaC9jZGVmQkY1NjEuaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9pbmNsdWRlL21hY2gvY2RlZkJGNTYxLmgKaW5kZXggOWQ5ODU4Yy4uODFlY2RiNyAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2luY2x1ZGUvbWFjaC9jZGVmQkY1NjEuaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvaW5jbHVkZS9tYWNoL2NkZWZCRjU2MS5oCkBAIC0xLDMxICsxLDcgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGluY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1NjEvY2RlZkJGNTYxLmgKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogQ29weXJpZ2h0IDIwMDUtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOiAgQyBQT0lOVEVSUyBUTyBTWVNURU0gTU1SIFJFR0lTVEVSIEFORCBNRU1PUlkgTUFQIEZPUiBBRFNQLUJGNTYxCi0gKgotICogUmV2OgotICoKLSAqIE1vZGlmaWVkOgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gKiBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCi0gKiBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0gKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpZm5kZWYgX0NERUZfQkY1NjFfSApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2luY2x1ZGUvbWFjaC9kZWZCRjU2MS5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2luY2x1ZGUvbWFjaC9kZWZCRjU2MS5oCmluZGV4IDVmYzBmMDUuLmEzMWU1MDkgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9pbmNsdWRlL21hY2gvZGVmQkY1NjEuaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvaW5jbHVkZS9tYWNoL2RlZkJGNTYxLmgKQEAgLTEsMzIgKzEsNyBAQAotCiAvKgotICogRmlsZTogICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTYxL2RlZkJGNTYxLmgKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogQ29weXJpZ2h0IDIwMDUtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOgotICogU1lTVEVNIE1NUiBSRUdJU1RFUiBBTkQgTUVNT1JZIE1BUCBGT1IgQURTUC1CRjU2MQotICogUmV2OgotICoKLSAqIE1vZGlmaWVkOgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gKiBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCi0gKiBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0gKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFESSBCU0QgbGljZW5zZSBvciB0aGUgR1BMLTIgKG9yIGxhdGVyKQogICovCiAKICNpZm5kZWYgX0RFRl9CRjU2MV9ICmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvaW5jbHVkZS9tYWNoL2dwaW8uaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9pbmNsdWRlL21hY2gvZ3Bpby5oCmluZGV4IDc4ODJmNzkuLmE2NTFhOGMgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9pbmNsdWRlL21hY2gvZ3Bpby5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9pbmNsdWRlL21hY2gvZ3Bpby5oCkBAIC0xLDcgKzEsNCBAQAogLyoKLSAqIEZpbGU6IGFyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9pbmNsdWRlL21hY2gvZ3Bpby5oCi0gKiBCdWdzOiBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggQW5hbG9nIERldmljZXMgSW5jLgogICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvaW5jbHVkZS9tYWNoL2lycS5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2luY2x1ZGUvbWFjaC9pcnEuaAppbmRleCA2Njk4Mzg5Li43YjIwOGRiIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvaW5jbHVkZS9tYWNoL2lycS5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9pbmNsdWRlL21hY2gvaXJxLmgKQEAgLTEsMzIgKzEsNyBAQAotCiAvKgotICogRmlsZTogICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTYxL2lycS5oCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA1LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjoKLSAqCi0gKiBSZXY6Ci0gKgotICogTW9kaWZpZWQ6Ci0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAqIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KLSAqIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKLSAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2lmbmRlZiBfQkY1NjFfSVJRX0hfCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvaW5jbHVkZS9tYWNoL3BvcnRtdXguaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9pbmNsdWRlL21hY2gvcG9ydG11eC5oCmluZGV4IDJlNWFkNjMuLjNhN2I0NmIgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9pbmNsdWRlL21hY2gvcG9ydG11eC5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9pbmNsdWRlL21hY2gvcG9ydG11eC5oCkBAIC0xLDMgKzEsOSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA3LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KKyAqLworCiAjaWZuZGVmIF9NQUNIX1BPUlRNVVhfSF8KICNkZWZpbmUgX01BQ0hfUE9SVE1VWF9IXwogCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvaW5jbHVkZS9tYWNoL3NtcC5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2luY2x1ZGUvbWFjaC9zbXAuaAppbmRleCBmOWU2NWViLi4zOTBjN2Y0IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvaW5jbHVkZS9tYWNoL3NtcC5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9pbmNsdWRlL21hY2gvc21wLmgKQEAgLTEsMyArMSw5IEBACisvKgorICogQ29weXJpZ2h0IDIwMDctMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgorICovCisKICNpZm5kZWYgX01BQ0hfQkY1NjFfU01QCiAjZGVmaW5lIF9NQUNIX0JGNTYxX1NNUAogCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvaW50cy1wcmlvcml0eS5jIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2ludHMtcHJpb3JpdHkuYwppbmRleCA5ZDJmMjMzLi5iNDQyNDE3IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvaW50cy1wcmlvcml0eS5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9pbnRzLXByaW9yaXR5LmMKQEAgLTEsMzAgKzEsOSBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2ludHMtcHJpb3JpdHkuYwotICogQmFzZWQgb246ICAgICBhcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvaW50cy1wcmlvcml0eS5jCi0gKiBBdXRob3I6ICAgICAgIE1pY2hhZWwgSGVubmVyaWNoCisgKiBTZXQgdXAgdGhlIGludGVycnVwdCBwcmlvcml0aWVzCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOiAgU2V0IHVwIHRoZSBpbnRlcnJ1cHQgcHJpb3JpdGllcworICogQ29weXJpZ2h0IDIwMDUtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDYgQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9zZWNvbmRhcnkuUyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9zZWNvbmRhcnkuUwppbmRleCBmNzJhNmFmLi44ZTYwNTAzIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvc2Vjb25kYXJ5LlMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL3NlY29uZGFyeS5TCkBAIC0xLDI2ICsxLDEwIEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvc2Vjb25kYXJ5LlMKLSAqIEJhc2VkIG9uOiAgICAgYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2hlYWQuUwotICogQXV0aG9yOiAgICAgICBQaGlsaXBwZSBHZXJ1bSA8cnBtQHhlbm9tYWkub3JnPgorICogQkY1NjEgY29yZUIgYm9vdHN0cmFwIGZpbGUKICAqCi0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA3IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqIENvcHlyaWdodCAyMDA3LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgorICogICAgICAgICAgICAgICBQaGlsaXBwZSBHZXJ1bSA8cnBtQHhlbm9tYWkub3JnPgogICoKLSAqIERlc2NyaXB0aW9uOiAgQkY1NjEgY29yZUIgYm9vdHN0cmFwIGZpbGUKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9zbXAuYyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9zbXAuYwppbmRleCA4YzEwNzAxLi41MTBmNTc2IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvc21wLmMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL3NtcC5jCkBAIC0xLDIzICsxLDggQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9zbXAuYwotICogQXV0aG9yOiAgICAgICBQaGlsaXBwZSBHZXJ1bSA8cnBtQHhlbm9tYWkub3JnPgorICogQ29weXJpZ2h0IDIwMDctMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKiAgICAgICAgICAgICAgIFBoaWxpcHBlIEdlcnVtIDxycG1AeGVub21haS5vcmc+CiAgKgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNyBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2FyY2hfY2hlY2tzLmMgYi9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2FyY2hfY2hlY2tzLmMKaW5kZXggNTk5OGQ4Ni4uOWRiYWZjZCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9hcmNoX2NoZWNrcy5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vYXJjaF9jaGVja3MuYwpAQCAtMSwzMCArMSw5IEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2FyY2hfY2hlY2tzLmMKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgkgUm9iaW4gR2V0eiA8cmdldHpAYmxhY2tmaW4udWNsaW51eC5vcmc+CisgKiBEbyBzb21lIGNoZWNraW5nIHRvIG1ha2Ugc3VyZSB0aGluZ3MgYXJlIE9LCiAgKgotICogQ3JlYXRlZDogICAgICAyNUp1bDA3Ci0gKiBEZXNjcmlwdGlvbjogIERvIHNvbWUgY2hlY2tpbmcgdG8gbWFrZSBzdXJlIHRoaW5ncyBhcmUgT0sKKyAqIENvcHlyaWdodCAyMDA3LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA3IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAjaW5jbHVkZSA8YXNtL2ZpeGVkX2NvZGUuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vY2FjaGUtYy5jIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9jYWNoZS1jLmMKaW5kZXggNGViYmQ3OC4uYTYwYTI0ZiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9jYWNoZS1jLmMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9jYWNoZS1jLmMKQEAgLTMsOCArMyw2IEBACiAgKgogICogQ29weXJpZ2h0IDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgogICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vY2FjaGUuUyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vY2FjaGUuUwppbmRleCBkOTY2NmZlLi5lYTU0MDMxIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2NhY2hlLlMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9jYWNoZS5TCkBAIC0zLDggKzMsNiBAQAogICoKICAqIENvcHlyaWdodCAyMDA0LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2NwdWZyZXEuYyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vY3B1ZnJlcS5jCmluZGV4IDg1YzY1ODAuLjAxNTA2NTAgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vY3B1ZnJlcS5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vY3B1ZnJlcS5jCkBAIC0xLDMwICsxLDkgQEAKIC8qCi0gKiBGaWxlOgkgYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9jcHVmcmVxLmMKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogQmxhY2tmaW4gY29yZSBjbG9jayBzY2FsaW5nCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOgkgQmxhY2tmaW4gY29yZSBjbG9jayBzY2FsaW5nCisgKiBDb3B5cmlnaHQgMjAwOC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBNb2RpZmllZDoKLSAqCQkgQ29weXJpZ2h0IDIwMDQtMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczoJIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgkgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCTAyMTEwLTEzMDEJVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9lbnRyeS5TIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9lbnRyeS5TCmluZGV4IDFlN2NhYzIuLjk0YTAzNzUgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vZW50cnkuUworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2VudHJ5LlMKQEAgLTEsMzIgKzEsMTEgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vZW50cnkuUwotICogQmFzZWQgb246Ci0gKiBBdXRob3I6ICAgICAgIExpbnVzIFRvcnZhbGRzCisgKiBDb250YWlucyB0aGUgc3lzdGVtLWNhbGwgYW5kIGZhdWx0IGxvdy1sZXZlbCBoYW5kbGluZyByb3V0aW5lcy4KKyAqIFRoaXMgYWxzbyBjb250YWlucyB0aGUgdGltZXItaW50ZXJydXB0IGhhbmRsZXIsIGFzIHdlbGwgYXMgYWxsCisgKiBpbnRlcnJ1cHRzIGFuZCBmYXVsdHMgdGhhdCBjYW4gcmVzdWx0IGluIGEgdGFzay1zd2l0Y2guCiAgKgotICogQ3JlYXRlZDogICAgICA/Ci0gKiBEZXNjcmlwdGlvbjogIGNvbnRhaW5zIHRoZSBzeXN0ZW0tY2FsbCBhbmQgZmF1bHQgbG93LWxldmVsIGhhbmRsaW5nIHJvdXRpbmVzLgotICogICAgICAgICAgICAgICBUaGlzIGFsc28gY29udGFpbnMgdGhlIHRpbWVyLWludGVycnVwdCBoYW5kbGVyLCBhcyB3ZWxsIGFzIGFsbAotICogICAgICAgICAgICAgICBpbnRlcnJ1cHRzIGFuZCBmYXVsdHMgdGhhdCBjYW4gcmVzdWx0IGluIGEgdGFzay1zd2l0Y2guCisgKiBDb3B5cmlnaHQgMjAwNS0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwNiBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogLyogTk9URTogVGhpcyBjb2RlIGhhbmRsZXMgc2lnbmFsLXJlY29nbml0aW9uLCB3aGljaCBoYXBwZW5zIGV2ZXJ5IHRpbWUKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vaGVhZC5TIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9oZWFkLlMKaW5kZXggOWM3OWRmZS4uY2FiMGEwMCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9oZWFkLlMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9oZWFkLlMKQEAgLTMsOCArMyw2IEBACiAgKgogICogQ29weXJpZ2h0IDIwMDQtMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgogICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vaW50ZXJydXB0LlMgYi9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2ludGVycnVwdC5TCmluZGV4IDgyZDQxN2UuLjgwODVmZjEgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vaW50ZXJydXB0LlMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9pbnRlcnJ1cHQuUwpAQCAtMSwzMSArMSwxMSBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9pbnRlcnJ1cHQuUwotICogQmFzZWQgb246Ci0gKiBBdXRob3I6ICAgICAgIEQuIEplZmYgRGlvbm5lIDxqZWZmQHJ5ZWhhbS5lZS5yeWVyc29uLmNhPgorICogSW50ZXJydXB0IEVudHJpZXMKKyAqCisgKiBDb3B5cmlnaHQgMjAwNS0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqICAgICAgICAgICAgICAgRC4gSmVmZiBEaW9ubmUgPGplZmZAcnllaGFtLmVlLnJ5ZXJzb24uY2E+CiAgKiAgICAgICAgICAgICAgIEtlbm5ldGggQWxiYW5vd3NraSA8a2phaGRzQGtqYWhkcy5jb20+CiAgKgotICogQ3JlYXRlZDogICAgICA/Ci0gKiBEZXNjcmlwdGlvbjogIEludGVycnVwdCBFbnRyaWVzCi0gKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDYgQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpbmNsdWRlIDxhc20vYmxhY2tmaW4uaD4KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vaW50cy1wcmlvcml0eS5jIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9pbnRzLXByaW9yaXR5LmMKaW5kZXggNmZmZGE3OC4uNjYwZWExYiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9pbnRzLXByaW9yaXR5LmMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9pbnRzLXByaW9yaXR5LmMKQEAgLTEsMzMgKzEsMTQgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vaW50cy1wcmlvcml0eS5jCisgKiBTZXQgdXAgdGhlIGludGVycnVwdCBwcmlvcml0aWVzCiAgKgotICogRGVzY3JpcHRpb246ICBTZXQgdXAgdGhlIGludGVycnVwdCBwcmlvcml0aWVzCisgKiBDb3B5cmlnaHQgIDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKiAgICAgICAgICAgICAgICAgMjAwMyBCYXMgVmVybWV1bGVuIDxiYXNAYnV5d2F5cy5ubD4KKyAqICAgICAgICAgICAgICAgICAyMDAyIEFyY3R1cnVzIE5ldHdvcmtzIEluYy4gTWFUZWQgPG1hdGVkQHN5bXBhdGljby5jYT4KKyAqICAgICAgICAgICAgMjAwMC0yMDAxIExpbmVvLCBJbmMuIEQuIEplZmZmIERpb25uZSA8amVmZkBsaW5lby5jYT4KKyAqICAgICAgICAgICAgICAgICAxOTk5IEQuIEplZmYgRGlvbm5lIDxqZWZmQHVjbGludXgub3JnPgorICogICAgICAgICAgICAgICAgIDE5OTYgUm9tYW4gWmlwcGVsCiAgKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIDE5OTYgUm9tYW4gWmlwcGVsCi0gKiAgICAgICAgICAgICAgIDE5OTkgRC4gSmVmZiBEaW9ubmUgPGplZmZAdWNsaW51eC5vcmc+Ci0gKiAgICAgICAgICAgICAgIDIwMDAtMjAwMSBMaW5lbywgSW5jLiBELiBKZWZmZiBEaW9ubmUgPGplZmZAbGluZW8uY2E+Ci0gKiAgICAgICAgICAgICAgIDIwMDIgQXJjdHVydXMgTmV0d29ya3MgSW5jLiBNYVRlZCA8bWF0ZWRAc3ltcGF0aWNvLmNhPgotICogICAgICAgICAgICAgICAyMDAzIE1ldHJvd2Vya3MvTW90b3JvbGEKLSAqICAgICAgICAgICAgICAgMjAwMyBCYXMgVmVybWV1bGVuIDxiYXNAYnV5d2F5cy5ubD4KLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIKICAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2lycXBhbmljLmMgYi9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2lycXBhbmljLmMKaW5kZXggODgzZTMyNC4uYzY0OTYyNCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9pcnFwYW5pYy5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vaXJxcGFuaWMuYwpAQCAtMSwzMCArMSw5IEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2lycXBhbmljLmMKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogcGFuaWMga2VybmVsIHdpdGggZHVtcCBpbmZvcm1hdGlvbgogICoKLSAqIENyZWF0ZWQ6ICAgICAgPwotICogRGVzY3JpcHRpb246ICBwYW5pYyBrZXJuZWwgd2l0aCBkdW1wIGluZm9ybWF0aW9uCisgKiBDb3B5cmlnaHQgMjAwNS0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBNb2RpZmllZDogICAgIHJnZXR6IC0gYWRkZWQgY2FjaGUgY2hlY2tpbmcgY29kZSAxNEZlYjA2Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDYgQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vcG0uYyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vcG0uYwppbmRleCAwZTNkNGZmLi44ODM3YmU0IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL3BtLmMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9wbS5jCkBAIC0xLDM1ICsxLDExIEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL3BtLmMKLSAqIEJhc2VkIG9uOiAgICAgYXJtL21hY2gtb21hcC9wbS5jCi0gKiBBdXRob3I6ICAgICAgIENsaWZmIEJyYWtlIDxjYnJha2VAYWNjZWxlbnQuY29tPiBDb3B5cmlnaHQgKGMpIDIwMDEKKyAqIEJsYWNrZmluIHBvd2VyIG1hbmFnZW1lbnQKICAqCi0gKiBDcmVhdGVkOiAgICAgIDIwMDEKLSAqIERlc2NyaXB0aW9uOiAgQmxhY2tmaW4gcG93ZXIgbWFuYWdlbWVudAorICogQ29weXJpZ2h0IDIwMDYtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogTW9kaWZpZWQ6ICAgICBOaWNvbGFzIFBpdHJlIC0gUFhBMjUwIHN1cHBvcnQKLSAqICAgICAgICAgICAgICAgIENvcHlyaWdodCAoYykgMjAwMiBNb250YSBWaXN0YSBTb2Z0d2FyZSwgSW5jLgotICogICAgICAgICAgICAgICBEYXZpZCBTaW5nbGV0b24gLSBPTUFQMTUxMAotICogICAgICAgICAgICAgICAgQ29weXJpZ2h0IChjKSAyMDAyIE1vbnRhIFZpc3RhIFNvZnR3YXJlLCBJbmMuCi0gKiAgICAgICAgICAgICAgIERpcmsgQmVobWUgPGRpcmsuYmVobWVAZGUuYm9zY2guY29tPiAtIE9NQVAxNTEwLzE2MTAKLSAqICAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yCisgKiBiYXNlZCBvbiBhcm0vbWFjaC1vbWFwL3BtLmMKKyAqICAgIENvcHlyaWdodCAyMDAxLCBDbGlmZiBCcmFrZSA8Y2JyYWtlQGFjY2VsZW50LmNvbT4gYW5kIG90aGVycwogICovCiAKICNpbmNsdWRlIDxsaW51eC9zdXNwZW5kLmg+CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL3NtcC5jIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9zbXAuYwppbmRleCAzNDllZTNmLi5kOTg1ODVmIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL3NtcC5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vc21wLmMKQEAgLTEsMjQgKzEsMTAgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4va2VybmVsL3NtcC5jCi0gKiBBdXRob3I6ICAgICAgIFBoaWxpcHBlIEdlcnVtIDxycG1AeGVub21haS5vcmc+Ci0gKiBJUEkgbWFuYWdlbWVudCBiYXNlZCBvbiBhcmNoL2FybS9rZXJuZWwvc21wLmMuCisgKiBJUEkgbWFuYWdlbWVudCBiYXNlZCBvbiBhcmNoL2FybS9rZXJuZWwvc21wLmMgKENvcHlyaWdodCAyMDAyIEFSTSBMaW1pdGVkKQogICoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDcgQW5hbG9nIERldmljZXMgSW5jLgorICogQ29weXJpZ2h0IDIwMDctMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICBQaGlsaXBwZSBHZXJ1bSA8cnBtQHhlbm9tYWkub3JnPgogICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMi4KICAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21tL2JsYWNrZmluX3NyYW0uaCBiL2FyY2gvYmxhY2tmaW4vbW0vYmxhY2tmaW5fc3JhbS5oCmluZGV4IGJjMDA2MjguLmZiMGIxNTkgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbW0vYmxhY2tmaW5fc3JhbS5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbW0vYmxhY2tmaW5fc3JhbS5oCkBAIC0xLDMwICsxLDkgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4vbW0vYmxhY2tmaW5fc3JhbS5oCi0gKiBCYXNlZCBvbjogICAgIGFyY2gvYmxhY2tmaW4vbW0vYmxhY2tmaW5fc3JhbS5jCi0gKiBBdXRob3I6ICAgICAgIE1pa2UgRnJ5c2luZ2VyCisgKiBMb2NhbCBwcm90b3R5cGVzIG1lYW50IGZvciBpbnRlcm5hbCB1c2Ugb25seQogICoKLSAqIENyZWF0ZWQ6ICAgICAgQXVnIDIwMDYKLSAqIERlc2NyaXB0aW9uOiAgTG9jYWwgcHJvdG90eXBlcyBtZWFudCBmb3IgaW50ZXJuYWwgdXNlIG9ubHkKKyAqIENvcHlyaWdodCAyMDA2LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNiBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2lmbmRlZiBfX0JMQUNLRklOX1NSQU1fSF9fCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21tL2luaXQuYyBiL2FyY2gvYmxhY2tmaW4vbW0vaW5pdC5jCmluZGV4IGI4OGNlN2YuLmJiOWM5OGYgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbW0vaW5pdC5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbW0vaW5pdC5jCkBAIC0xLDMwICsxLDcgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4vbW0vaW5pdC5jCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjoKLSAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwNyBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L3N3YXAuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbW0vaXNyYW0tZHJpdmVyLmMgYi9hcmNoL2JsYWNrZmluL21tL2lzcmFtLWRyaXZlci5jCmluZGV4IGJlYjFhNjAuLjg0Y2RjNWEgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbW0vaXNyYW0tZHJpdmVyLmMKKysrIGIvYXJjaC9ibGFja2Zpbi9tbS9pc3JhbS1kcml2ZXIuYwpAQCAtMSwxOSArMSw5IEBACiAvKgotICogRGVzY3JpcHRpb246IEluc3RydWN0aW9uIFNSQU0gYWNjZXNzb3IgZnVuY3Rpb25zIGZvciB0aGUgQmxhY2tmaW4KKyAqIEluc3RydWN0aW9uIFNSQU0gYWNjZXNzb3IgZnVuY3Rpb25zIGZvciB0aGUgQmxhY2tmaW4KICAqCiAgKiBDb3B5cmlnaHQgMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQnVnczogRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlcgogICovCiAKICNkZWZpbmUgcHJfZm10KGZtdCkgImlzcmFtOiAiIGZtdApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tbS9zcmFtLWFsbG9jLmMgYi9hcmNoL2JsYWNrZmluL21tL3NyYW0tYWxsb2MuYwppbmRleCBlYjYzYWIzLi5mMDY4YzExIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21tL3NyYW0tYWxsb2MuYworKysgYi9hcmNoL2JsYWNrZmluL21tL3NyYW0tYWxsb2MuYwpAQCAtMSwzMCArMSw5IEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL21tL3NyYW0tYWxsb2MuYwotICogQmFzZWQgb246Ci0gKiBBdXRob3I6CisgKiBTUkFNIGFsbG9jYXRvciBmb3IgQmxhY2tmaW4gb24tY2hpcCBtZW1vcnkKICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246ICBTUkFNIGFsbG9jYXRvciBmb3IgQmxhY2tmaW4gTDEgYW5kIEwyIG1lbW9yeQorICogQ29weXJpZ2h0IDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYxMC9kcml2ZXJzL3N5bmNfc2VyaWFsLmMgYi9hcmNoL2NyaXMvYXJjaC12MTAvZHJpdmVycy9zeW5jX3NlcmlhbC5jCmluZGV4IDZjYzFhMDMuLjU2MmI5YTcgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9hcmNoLXYxMC9kcml2ZXJzL3N5bmNfc2VyaWFsLmMKKysrIGIvYXJjaC9jcmlzL2FyY2gtdjEwL2RyaXZlcnMvc3luY19zZXJpYWwuYwpAQCAtMjQ0LDcgKzI0NCw3IEBACiAKICNkZWZpbmUgTlVNQkVSX09GX1BPUlRTIDIKIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc3luY19zZXJpYWxfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHN5bmNfc2VyaWFsX2ZvcHMgPSB7CiAJLm93bmVyICAgPSBUSElTX01PRFVMRSwKIAkud3JpdGUgICA9IHN5bmNfc2VyaWFsX3dyaXRlLAogCS5yZWFkICAgID0gc3luY19zZXJpYWxfcmVhZCwKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYxMC9rZXJuZWwvdGltZS5jIGIvYXJjaC9jcmlzL2FyY2gtdjEwL2tlcm5lbC90aW1lLmMKaW5kZXggMmI3M2M3YS4uMzFjYTE0MSAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2FyY2gtdjEwL2tlcm5lbC90aW1lLmMKKysrIGIvYXJjaC9jcmlzL2FyY2gtdjEwL2tlcm5lbC90aW1lLmMKQEAgLTI4LDcgKzI4LDYgQEAKIAogZXh0ZXJuIHZvaWQgdXBkYXRlX3h0aW1lX2Zyb21fY21vcyh2b2lkKTsKIGV4dGVybiBpbnQgc2V0X3J0Y19tbXNzKHVuc2lnbmVkIGxvbmcgbm93dGltZSk7Ci1leHRlcm4gaW50IHNldHVwX2lycShpbnQsIHN0cnVjdCBpcnFhY3Rpb24gKik7CiBleHRlcm4gaW50IGhhdmVfcnRjOwogCiB1bnNpZ25lZCBsb25nIGdldF9uc19pbl9qaWZmaWUodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9kcml2ZXJzL21hY2gtZnMvZ3Bpby5jIGIvYXJjaC9jcmlzL2FyY2gtdjMyL2RyaXZlcnMvbWFjaC1mcy9ncGlvLmMKaW5kZXggZmUxZmRlOC4uZDg5YWI4MCAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2FyY2gtdjMyL2RyaXZlcnMvbWFjaC1mcy9ncGlvLmMKKysrIGIvYXJjaC9jcmlzL2FyY2gtdjMyL2RyaXZlcnMvbWFjaC1mcy9ncGlvLmMKQEAgLTg1NSw3ICs4NTUsNyBAQAogCXJldHVybiAwOwogfQogCi1zdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGdwaW9fZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGdwaW9fZm9wcyA9IHsKIAkub3duZXIgICAgICAgPSBUSElTX01PRFVMRSwKIAkucG9sbCAgICAgICAgPSBncGlvX3BvbGwsCiAJLmlvY3RsICAgICAgID0gZ3Bpb19pb2N0bCwKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9rZXJuZWwvc21wLmMgYi9hcmNoL2NyaXMvYXJjaC12MzIva2VybmVsL3NtcC5jCmluZGV4IGQyYTNmZjguLjA1OGFkZGQgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9rZXJuZWwvc21wLmMKKysrIGIvYXJjaC9jcmlzL2FyY2gtdjMyL2tlcm5lbC9zbXAuYwpAQCAtNTIsOCArNTIsNiBAQAogc3RhdGljIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCogZmx1c2hfdm1hOwogc3RhdGljIHVuc2lnbmVkIGxvbmcgZmx1c2hfYWRkcjsKIAotZXh0ZXJuIGludCBzZXR1cF9pcnEoaW50LCBzdHJ1Y3QgaXJxYWN0aW9uICopOwotCiAvKiBNb2RlIHJlZ2lzdGVycyAqLwogc3RhdGljIHVuc2lnbmVkIGxvbmcgaXJxX3JlZ3NbTlJfQ1BVU10gPSB7CiAgIHJlZ2lfaXJxLApkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2FyY2gtdjMyL2tlcm5lbC90aW1lLmMgYi9hcmNoL2NyaXMvYXJjaC12MzIva2VybmVsL3RpbWUuYwppbmRleCA2NTYzM2QwLi5iMTkyMGQ4IDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvYXJjaC12MzIva2VybmVsL3RpbWUuYworKysgYi9hcmNoL2NyaXMvYXJjaC12MzIva2VybmVsL3RpbWUuYwpAQCAtNDYsNyArNDYsNiBAQAogCiBleHRlcm4gdm9pZCB1cGRhdGVfeHRpbWVfZnJvbV9jbW9zKHZvaWQpOwogZXh0ZXJuIGludCBzZXRfcnRjX21tc3ModW5zaWduZWQgbG9uZyBub3d0aW1lKTsKLWV4dGVybiBpbnQgc2V0dXBfaXJxKGludCwgc3RydWN0IGlycWFjdGlvbiAqKTsKIGV4dGVybiBpbnQgaGF2ZV9ydGM7CiAKICNpZmRlZiBDT05GSUdfQ1BVX0ZSRVEKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9tYWNoLWEzL2lvLmMgYi9hcmNoL2NyaXMvYXJjaC12MzIvbWFjaC1hMy9pby5jCmluZGV4IGMyMmY2N2UuLjA5MGNlYjkgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9tYWNoLWEzL2lvLmMKKysrIGIvYXJjaC9jcmlzL2FyY2gtdjMyL21hY2gtYTMvaW8uYwpAQCAtMzYsNyArMzYsNyBAQAogCX0sCiB9OwogCi0jZGVmaW5lIE5CUl9PRl9QT1JUUyBzaXplb2YoY3Jpc3YzMl9pb3BvcnRzKS9zaXplb2Yoc3RydWN0IGNyaXN2MzJfaW9wb3J0KQorI2RlZmluZSBOQlJfT0ZfUE9SVFMgQVJSQVlfU0laRShjcmlzdjMyX2lvcG9ydHMpCiAKIHN0cnVjdCBjcmlzdjMyX2lvcGluIGNyaXN2MzJfbGVkX25ldDBfZ3JlZW47CiBzdHJ1Y3QgY3Jpc3YzMl9pb3BpbiBjcmlzdjMyX2xlZF9uZXQwX3JlZDsKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9tYWNoLWZzL2lvLmMgYi9hcmNoL2NyaXMvYXJjaC12MzIvbWFjaC1mcy9pby5jCmluZGV4IGNiNjMyN2IuLmE2OTU4NjYgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9tYWNoLWZzL2lvLmMKKysrIGIvYXJjaC9jcmlzL2FyY2gtdjMyL21hY2gtZnMvaW8uYwpAQCAtNTIsNyArNTIsNyBAQAogCX0KIH07CiAKLSNkZWZpbmUgTkJSX09GX1BPUlRTIHNpemVvZihjcmlzdjMyX2lvcG9ydHMpL3NpemVvZihzdHJ1Y3QgY3Jpc3YzMl9pb3BvcnQpCisjZGVmaW5lIE5CUl9PRl9QT1JUUyBBUlJBWV9TSVpFKGNyaXN2MzJfaW9wb3J0cykKIAogc3RydWN0IGNyaXN2MzJfaW9waW4gY3Jpc3YzMl9sZWRfbmV0MF9ncmVlbjsKIHN0cnVjdCBjcmlzdjMyX2lvcGluIGNyaXN2MzJfbGVkX25ldDBfcmVkOwpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2luY2x1ZGUvYXJjaC12MTAvYXJjaC9tbXUuaCBiL2FyY2gvY3Jpcy9pbmNsdWRlL2FyY2gtdjEwL2FyY2gvbW11LmgKaW5kZXggZGY4NGYxNy4uZTgyOWU1YSAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2luY2x1ZGUvYXJjaC12MTAvYXJjaC9tbXUuaAorKysgYi9hcmNoL2NyaXMvaW5jbHVkZS9hcmNoLXYxMC9hcmNoL21tdS5oCkBAIC0zMywxMCArMzMsMTAgQEAKIAogLyogQ1JJUyBQVEUgYml0cyAoc2VlIFJfVExCX0xPIGluIHRoZSByZWdpc3RlciBkZXNjcmlwdGlvbikKICAqCi0gKiAgIEJpdDogIDMxLTEzIDEyLS0tLS0tLTQgICAgMyAgICAgICAgMiAgICAgICAxICAgICAgIDAgIAotICogICAgICAgICBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KLSAqICAgICAgICB8IHBmbiB8IHJlc2VydmVkIHwgZ2xvYmFsIHwgdmFsaWQgfCBrZXJuZWwgfCB3ZSAgfAotICogICAgICAgIHxfX19fX3xfX19fX19fX19ffF9fX19fX19ffF9fX19fX198X19fX19fX198X19fX198CisgKiAgIEJpdDogIDMxICAgICAzMC0xMyAxMi0tLS0tLS00ICAgIDMgICAgICAgIDIgICAgICAgMSAgICAgICAwCisgKiAgICAgICAgIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KKyAqICAgICAgICB8IGNhY2hlIHxwZm4gfCByZXNlcnZlZCB8IGdsb2JhbCB8IHZhbGlkIHwga2VybmVsIHwgd2UgIHwKKyAqICAgICAgICB8X19fX19fX3xfX19ffF9fX19fX19fX198X19fX19fX198X19fX19fX3xfX19fX19fX3xfX19fX3wKICAqCiAgKiAocGZuID0gcGh5c2ljYWwgZnJhbWUgbnVtYmVyKQogICovCkBAIC01Myw2ICs1Myw3IEBACiAjZGVmaW5lIF9QQUdFX1ZBTElECSAgICgxPDwyKSAvKiBwYWdlIGlzIHZhbGlkICovCiAjZGVmaW5lIF9QQUdFX1NJTEVOVF9SRUFEICAoMTw8MikgLyogc3lub255bSAqLwogI2RlZmluZSBfUEFHRV9HTE9CQUwgICAgICAgKDE8PDMpIC8qIGdsb2JhbCBwYWdlIC0gY29udGV4dCBpcyBpZ25vcmVkICovCisjZGVmaW5lIF9QQUdFX05PX0NBQ0hFCSAgICgxPDwzMSkgLyogcGFydCBvZiB0aGUgdW5jYWNoZWQgbWVtb3J5IG1hcCAqLwogCiAvKiBCaXRzIHRoZSBIVyBkb2Vzbid0IGNhcmUgYWJvdXQgYnV0IHRoZSBrZXJuZWwgdXNlcyB0aGVtIGluIFNXICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9pbmNsdWRlL2FyY2gtdjMyL2FyY2gvbW11LmggYi9hcmNoL2NyaXMvaW5jbHVkZS9hcmNoLXYzMi9hcmNoL21tdS5oCmluZGV4IDZiY2RjM2YuLmMxYTEzZTAgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9pbmNsdWRlL2FyY2gtdjMyL2FyY2gvbW11LmgKKysrIGIvYXJjaC9jcmlzL2luY2x1ZGUvYXJjaC12MzIvYXJjaC9tbXUuaApAQCAtMjgsMTAgKzI4LDEwIEBACiAvKgogICogQ1JJU3YzMiBQVEUgYml0czoKICAqCi0gKiAgQml0OiAgMzEtMTMgIDEyLTUgICAgIDQgICAgICAgIDMgICAgICAgMiAgICAgICAgMSAgICAgICAgMAotICogICAgICAgKy0tLS0tKy0tLS0tLSstLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0rLS0tLS0tLS0tKwotICogICAgICAgfCBwZm4gfCB6ZXJvIHwgZ2xvYmFsIHwgdmFsaWQgfCBrZXJuZWwgfCB3cml0ZSB8IGV4ZWN1dGUgfAotICogICAgICAgKy0tLS0tKy0tLS0tLSstLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0rLS0tLS0tLS0tKworICogIEJpdDogICAzMSAgICAgMzAtMTMgIDEyLTUgICAgIDQgICAgICAgIDMgICAgICAgMiAgICAgICAgMSAgICAgICAgMAorICogICAgICAgKy0tLS0tLS0rLS0tLS0rLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLSstLS0tLS0tLS0rCisgKiAgICAgICB8IGNhY2hlIHwgcGZuIHwgemVybyB8IGdsb2JhbCB8IHZhbGlkIHwga2VybmVsIHwgd3JpdGUgfCBleGVjdXRlIHwKKyAqICAgICAgICstLS0tLS0tKy0tLS0tKy0tLS0tLSstLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0rLS0tLS0tLS0tKwogICovCiAKIC8qCkBAIC00NSw2ICs0NSw4IEBACiAjZGVmaW5lIF9QQUdFX1ZBTElEICAgICAgICAgKDEgPDwgMykJLyogUGFnZSBpcyB2YWxpZC4gKi8KICNkZWZpbmUgX1BBR0VfU0lMRU5UX1JFQUQgICAoMSA8PCAzKQkvKiBTYW1lIGFzIGFib3ZlLiAqLwogI2RlZmluZSBfUEFHRV9HTE9CQUwgICAgICAgICgxIDw8IDQpCS8qIEdsb2JhbCBwYWdlLiAqLworI2RlZmluZSBfUEFHRV9OT19DQUNIRQkgICAgKDEgPDwgMzEpCS8qIHBhcnQgb2YgdGhlIHVuY2FjaGVkIG1lbW9yeSBtYXAgKi8KKwogCiAvKgogICogVGhlIGhhcmR3YXJlIGRvZXNuJ3QgY2FyZSBhYm91dCB0aGVzZSBiaXRzLCBidXQgdGhlIGtlcm5lbCB1c2VzIHRoZW0gaW4KZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9pbmNsdWRlL2FzbS9oYXJkaXJxLmggYi9hcmNoL2NyaXMvaW5jbHVkZS9hc20vaGFyZGlycS5oCmluZGV4IDc0MTc4YWQuLjE3YmIxMmQgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9pbmNsdWRlL2FzbS9oYXJkaXJxLmgKKysrIGIvYXJjaC9jcmlzL2luY2x1ZGUvYXNtL2hhcmRpcnEuaApAQCAtMiwxNiArMiw2IEBACiAjZGVmaW5lIF9fQVNNX0hBUkRJUlFfSAogCiAjaW5jbHVkZSA8YXNtL2lycS5oPgotI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KLSNpbmNsdWRlIDxsaW51eC9jYWNoZS5oPgotCi10eXBlZGVmIHN0cnVjdCB7Ci0JdW5zaWduZWQgaW50IF9fc29mdGlycV9wZW5kaW5nOwotfSBfX19fY2FjaGVsaW5lX2FsaWduZWQgaXJxX2NwdXN0YXRfdDsKLQotI2luY2x1ZGUgPGxpbnV4L2lycV9jcHVzdGF0Lmg+IC8qIFN0YW5kYXJkIG1hcHBpbmdzIGZvciBpcnFfY3B1c3RhdF90IGFib3ZlICovCi0KLXZvaWQgYWNrX2JhZF9pcnEodW5zaWduZWQgaW50IGlycSk7CiAKICNkZWZpbmUgSEFSRElSUV9CSVRTCTgKIApAQCAtMjQsNCArMTQsNiBAQAogIyBlcnJvciBIQVJESVJRX0JJVFMgaXMgdG9vIGxvdyEKICNlbmRpZgogCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvaGFyZGlycS5oPgorCiAjZW5kaWYgLyogX19BU01fSEFSRElSUV9IICovCmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC9jcmlzL2luY2x1ZGUvYXNtL3BndGFibGUuaAppbmRleCA1MGFhOTc0Li4xZmNjZTAwIDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvaW5jbHVkZS9hc20vcGd0YWJsZS5oCisrKyBiL2FyY2gvY3Jpcy9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKQEAgLTE5Nyw2ICsxOTcsOCBAQAogc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbW9kaWZ5KHB0ZV90IHB0ZSwgcGdwcm90X3QgbmV3cHJvdCkKIHsgcHRlX3ZhbChwdGUpID0gKHB0ZV92YWwocHRlKSAmIF9QQUdFX0NIR19NQVNLKSB8IHBncHJvdF92YWwobmV3cHJvdCk7IHJldHVybiBwdGU7IH0KIAorI2RlZmluZSBwZ3Byb3Rfbm9uY2FjaGVkKHByb3QpIF9fcGdwcm90KChwZ3Byb3RfdmFsKHByb3QpIHwgX1BBR0VfTk9fQ0FDSEUpKQorCiAKIC8qIHB0ZV92YWwgcmVmZXJzIHRvIGEgcGFnZSBpbiB0aGUgMHg0eHh4eHh4eCBwaHlzaWNhbCBEUkFNIGludGVydmFsCiAgKiBfX3B0ZV9wYWdlKHB0ZV92YWwpIHJlZmVycyB0byB0aGUgInZpcnR1YWwiIERSQU0gaW50ZXJ2YWwKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9rZXJuZWwvaXJxLmMgYi9hcmNoL2NyaXMva2VybmVsL2lycS5jCmluZGV4IDdmNjQyZmMuLjBjYTdkOTggMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9rZXJuZWwvaXJxLmMKKysrIGIvYXJjaC9jcmlzL2tlcm5lbC9pcnEuYwpAQCAtMzgsMTEgKzM4LDYgQEAKIAogI2luY2x1ZGUgPGFzbS9pby5oPgogCi12b2lkIGFja19iYWRfaXJxKHVuc2lnbmVkIGludCBpcnEpCi17Ci0JcHJpbnRrKCJ1bmV4cGVjdGVkIElSUSB0cmFwIGF0IHZlY3RvciAlMDJ4XG4iLCBpcnEpOwotfQotCiBpbnQgc2hvd19pbnRlcnJ1cHRzKHN0cnVjdCBzZXFfZmlsZSAqcCwgdm9pZCAqdikKIHsKIAlpbnQgaSA9ICoobG9mZl90ICopIHYsIGo7CmRpZmYgLS1naXQgYS9hcmNoL2NyaXMva2VybmVsL3ZtbGludXgubGRzLlMgYi9hcmNoL2NyaXMva2VybmVsL3ZtbGludXgubGRzLlMKaW5kZXggNmM4MTgzNi4uYmJmZGE2NyAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2tlcm5lbC92bWxpbnV4Lmxkcy5TCisrKyBiL2FyY2gvY3Jpcy9rZXJuZWwvdm1saW51eC5sZHMuUwpAQCAtNTEsMTAgKzUxLDcgQEAKIAlfZXRleHQgPSAuIDsJCQkvKiBFbmQgb2YgdGV4dCBzZWN0aW9uLiAqLwogCV9fZXRleHQgPSAuOwogCi0JLiA9IEFMSUdOKDQpOwkJCS8qIEV4Y2VwdGlvbiB0YWJsZS4gKi8KLQlfX3N0YXJ0X19fZXhfdGFibGUgPSAuOwotCV9fZXhfdGFibGUgOiB7ICooX19leF90YWJsZSkgfQotCV9fc3RvcF9fX2V4X3RhYmxlID0gLjsKKwlFWENFUFRJT05fVEFCTEUoNCkKIAogCVJPREFUQQogCkBAIC02NywzNiArNjQsMjQgQEAKIAlfX2VkYXRhID0gLiA7CQkJLyogRW5kIG9mIGRhdGEgc2VjdGlvbi4gKi8KIAlfZWRhdGEgPSAuIDsKIAotCS4gPSBBTElHTihQQUdFX1NJWkUpOwkvKiBpbml0X3Rhc2sgYW5kIHN0YWNrLCBtdXN0IGJlIGFsaWduZWQuICovCi0JLmRhdGEuaW5pdF90YXNrIDogeyAqKC5kYXRhLmluaXRfdGFzaykgfQorCUlOSVRfVEFTS19EQVRBX1NFQ1RJT04oUEFHRV9TSVpFKQogCiAJLiA9IEFMSUdOKFBBR0VfU0laRSk7CQkvKiBJbml0IGNvZGUgYW5kIGRhdGEuICovCiAJX19pbml0X2JlZ2luID0gLjsKLQkuaW5pdC50ZXh0IDogewotCQkgICBfc2luaXR0ZXh0ID0gLjsKLQkJICAgSU5JVF9URVhUCi0JCSAgIF9laW5pdHRleHQgPSAuOwotCX0KKwlJTklUX1RFWFRfU0VDVElPTihQQUdFX1NJWkUpCiAJLmluaXQuZGF0YSA6IHsgSU5JVF9EQVRBIH0KLQkuID0gQUxJR04oMTYpOwotCV9fc2V0dXBfc3RhcnQgPSAuOwotCS5pbml0LnNldHVwIDogeyAqKC5pbml0LnNldHVwKSB9Ci0JX19zZXR1cF9lbmQgPSAuOworCS5pbml0LnNldHVwIDogeyBJTklUX1NFVFVQKDE2KSB9CiAjaWZkZWYgQ09ORklHX0VUUkFYX0FSQ0hfVjMyCiAJX19zdGFydF9fX3BhcmFtID0gLjsKIAlfX3BhcmFtIDogeyAqKF9fcGFyYW0pIH0KIAlfX3N0b3BfX19wYXJhbSA9IC47CiAjZW5kaWYKIAkuaW5pdGNhbGwuaW5pdCA6IHsKLQkJX19pbml0Y2FsbF9zdGFydCA9IC47Ci0JCUlOSVRDQUxMUwotCQlfX2luaXRjYWxsX2VuZCA9IC47CisJCUlOSVRfQ0FMTFMKIAl9CiAKIAkuY29uX2luaXRjYWxsLmluaXQgOiB7Ci0JCV9fY29uX2luaXRjYWxsX3N0YXJ0ID0gLjsKLQkJKiguY29uX2luaXRjYWxsLmluaXQpCi0JCV9fY29uX2luaXRjYWxsX2VuZCA9IC47CisJCUNPTl9JTklUQ0FMTAogCX0KIAlTRUNVUklUWV9JTklUCiAKQEAgLTExNCw5ICs5OSw3IEBACiAJUEVSQ1BVKFBBR0VfU0laRSkKIAogCS5pbml0LnJhbWZzIDogewotCQlfX2luaXRyYW1mc19zdGFydCA9IC47Ci0JCSooLmluaXQucmFtZnMpCi0JCV9faW5pdHJhbWZzX2VuZCA9IC47CisJCUlOSVRfUkFNX0ZTCiAJfQogI2VuZGlmCiAKQEAgLTEzMCwxMSArMTEzLDcgQEAKIAlfX2luaXRfZW5kID0gLjsKIAogCV9fZGF0YV9lbmQgPSAuIDsJCS8qIE1vdmUgdG8gX2VkYXRhID8gKi8KLQlfX2Jzc19zdGFydCA9IC47CQkvKiBCU1MuICovCi0JLmJzcyA6IHsKLQkJKihDT01NT04pCi0JCSooLmJzcykKLQl9CisJQlNTX1NFQ1RJT04oMCwgMCwgMCkKIAogCS4gPSAgQUxJR04gKDB4MjApOwogCV9lbmQgPSAuOwpkaWZmIC0tZ2l0IGEvYXJjaC9mcnYva2VybmVsL3NpZ25hbC5jIGIvYXJjaC9mcnYva2VybmVsL3NpZ25hbC5jCmluZGV4IDZiMGEyYjYuLjA5NzRjMGUgMTAwNjQ0Ci0tLSBhL2FyY2gvZnJ2L2tlcm5lbC9zaWduYWwuYworKysgYi9hcmNoL2Zydi9rZXJuZWwvc2lnbmFsLmMKQEAgLTUyNyw3ICs1MjcsNyBAQAogCiBub19zaWduYWw6CiAJLyogRGlkIHdlIGNvbWUgZnJvbSBhIHN5c3RlbSBjYWxsPyAqLwotCWlmIChfX2ZyYW1lLT5zeXNjYWxsbm8gPj0gMCkgeworCWlmIChfX2ZyYW1lLT5zeXNjYWxsbm8gIT0gLTEpIHsKIAkJLyogUmVzdGFydCB0aGUgc3lzdGVtIGNhbGwgLSBubyBoYW5kbGVycyBwcmVzZW50ICovCiAJCXN3aXRjaCAoX19mcmFtZS0+Z3I4KSB7CiAJCWNhc2UgLUVSRVNUQVJUTk9IQU5EOgpkaWZmIC0tZ2l0IGEvYXJjaC9mcnYvbWI5MzA5MC1tYjAwL01ha2VmaWxlIGIvYXJjaC9mcnYvbWI5MzA5MC1tYjAwL01ha2VmaWxlCmluZGV4IDc2NTk1ZTguLmI3M2I1NDIgMTAwNjQ0Ci0tLSBhL2FyY2gvZnJ2L21iOTMwOTAtbWIwMC9NYWtlZmlsZQorKysgYi9hcmNoL2Zydi9tYjkzMDkwLW1iMDAvTWFrZWZpbGUKQEAgLTExLDMgKzExLDUgQEAKIG9iai15ICs9IHBjaS1kbWEtbm9tbXUubwogZW5kaWYKIGVuZGlmCisKK29iai0kKENPTkZJR19NVEQpICs9IGZsYXNoLm8KZGlmZiAtLWdpdCBhL2FyY2gvZnJ2L21iOTMwOTAtbWIwMC9mbGFzaC5jIGIvYXJjaC9mcnYvbWI5MzA5MC1tYjAwL2ZsYXNoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzBlMzcwNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvZnJ2L21iOTMwOTAtbWIwMC9mbGFzaC5jCkBAIC0wLDAgKzEsOTAgQEAKKy8qIEZsYXNoIG1hcHBpbmdzIGZvciB0aGUgTUI5MzA5MC1NQjAwIG1vdGhlcmJvYXJkCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IFJlZCBIYXQsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIFdyaXR0ZW4gYnkgRGF2aWQgSG93ZWxscyAoZGhvd2VsbHNAcmVkaGF0LmNvbSkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5jZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAyIG9mIHRoZSBMaWNlbmNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgorCisjZGVmaW5lIE1COTMwOTBfQk9PVFJPTV9BRERSCTB4RkYwMDAwMDAJLyogQm9vdCBST00gKi8KKyNkZWZpbmUgTUI5MzA5MF9CT09UUk9NX1NJWkUJKDIgKiAxMDI0ICogMTAyNCkKKyNkZWZpbmUgTUI5MzA5MF9VU0VSUk9NX0FERFIJMHhGRjIwMDAwMAkvKiBVc2VyIFJPTSAqLworI2RlZmluZSBNQjkzMDkwX1VTRVJST01fU0laRQkoMiAqIDEwMjQgKiAxMDI0KQorCisvKgorICogZGVmYXVsdCBNVEQgcGFydGl0aW9uIHRhYmxlIGZvciBib3RoIG1haW4gZmxhc2ggZGV2aWNlcywgZXhwZWN0ZWQgdG8gYmUKKyAqIG92ZXJyaWRkZW4gYnkgUmVkQm9vdAorICovCitzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gbWI5MzA5MF9wYXJ0aXRpb25zW10gPSB7CisJeworCQkubmFtZQkJPSAiRmlsZXN5c3RlbSIsCisJCS5zaXplCQk9IE1URFBBUlRfU0laX0ZVTEwsCisJCS5vZmZzZXQJCT0gMCwKKwl9Cit9OworCisvKgorICogRGVmaW5pdGlvbiBvZiB0aGUgTUI5MzA5MCBCb290IFJPTSAob24gdGhlIENQVSBjYXJkKQorICovCitzdGF0aWMgc3RydWN0IHBoeXNtYXBfZmxhc2hfZGF0YSBtYjkzMDkwX2Jvb3Ryb21fZGF0YSA9IHsKKwkud2lkdGgJCT0gMiwKKwkubnJfcGFydHMJPSAyLAorCS5wYXJ0cwkJPSBtYjkzMDkwX3BhcnRpdGlvbnMsCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIG1iOTMwOTBfYm9vdHJvbV9yZXNvdXJjZSA9IHsKKwkuc3RhcnQJCT0gTUI5MzA5MF9CT09UUk9NX0FERFIsCisJLmVuZAkJPSBNQjkzMDkwX0JPT1RST01fQUREUiArIE1COTMwOTBfQk9PVFJPTV9TSVpFIC0gMSwKKwkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBtYjkzMDkwX2Jvb3Ryb20gPSB7CisJLm5hbWUJCT0gInBoeXNtYXAtZmxhc2giLAorCS5pZAkJPSAwLAorCS5kZXYucGxhdGZvcm1fZGF0YSA9ICZtYjkzMDkwX2Jvb3Ryb21fZGF0YSwKKwkubnVtX3Jlc291cmNlcwk9IDEsCisJLnJlc291cmNlCT0gJm1iOTMwOTBfYm9vdHJvbV9yZXNvdXJjZSwKK307CisKKy8qCisgKiBEZWZpbml0aW9uIG9mIHRoZSBNQjkzMDkwIFVzZXIgUk9NIGRlZmluaXRpb24gKG9uIHRoZSBtb3RoZXJib2FyZCkKKyAqLworc3RhdGljIHN0cnVjdCBwaHlzbWFwX2ZsYXNoX2RhdGEgbWI5MzA5MF91c2Vycm9tX2RhdGEgPSB7CisJLndpZHRoCQk9IDIsCisJLm5yX3BhcnRzCT0gMiwKKwkucGFydHMJCT0gbWI5MzA5MF9wYXJ0aXRpb25zLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBtYjkzMDkwX3VzZXJyb21fcmVzb3VyY2UgPSB7CisJLnN0YXJ0CQk9IE1COTMwOTBfVVNFUlJPTV9BRERSLAorCS5lbmQJCT0gTUI5MzA5MF9VU0VSUk9NX0FERFIgKyBNQjkzMDkwX1VTRVJST01fU0laRSAtIDEsCisJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbWI5MzA5MF91c2Vycm9tID0geworCS5uYW1lCQk9ICJwaHlzbWFwLWZsYXNoIiwKKwkuaWQJCT0gMSwKKwkuZGV2LnBsYXRmb3JtX2RhdGEgPSAmbWI5MzA5MF91c2Vycm9tX2RhdGEsCisJLm51bV9yZXNvdXJjZXMJPSAxLAorCS5yZXNvdXJjZQk9ICZtYjkzMDkwX3VzZXJyb21fcmVzb3VyY2UsCit9OworCisvKgorICogcmVnaXN0ZXIgdGhlIE1COTMwOTAgZmxhc2hlcworICovCitzdGF0aWMgaW50IF9faW5pdCBtYjkzMDkwX210ZF9pbml0KHZvaWQpCit7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZtYjkzMDkwX2Jvb3Ryb20pOworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmbWI5MzA5MF91c2Vycm9tKTsKKwlyZXR1cm4gMDsKK30KKworbW9kdWxlX2luaXQobWI5MzA5MF9tdGRfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL2g4MzAwL2tlcm5lbC92bWxpbnV4Lmxkcy5TIGIvYXJjaC9oODMwMC9rZXJuZWwvdm1saW51eC5sZHMuUwppbmRleCA2NjJiMDJlLi5iOWUyNDkwNyAxMDA2NDQKLS0tIGEvYXJjaC9oODMwMC9rZXJuZWwvdm1saW51eC5sZHMuUworKysgYi9hcmNoL2g4MzAwL2tlcm5lbC92bWxpbnV4Lmxkcy5TCkBAIC0xLDUgKzEsNiBAQAogI2RlZmluZSBWTUxJTlVYX1NZTUJPTChfc3ltXykgXyMjX3N5bV8KICNpbmNsdWRlIDxhc20tZ2VuZXJpYy92bWxpbnV4Lmxkcy5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAKIC8qIHRhcmdldCBtZW1vcnkgbWFwICovCiAjaWZkZWYgQ09ORklHX0g4MzAwSF9HRU5FUklDCkBAIC03OSwxMSArODAsOCBAQAogCVNDSEVEX1RFWFQKIAlMT0NLX1RFWFQKIAlfX2V0ZXh0ID0gLiA7Ci0JLiA9IEFMSUdOKDE2KTsgICAgICAgICAgLyogRXhjZXB0aW9uIHRhYmxlICAgICAgICAgICAgICAqLwotCV9fX3N0YXJ0X19fZXhfdGFibGUgPSAuOwotCQkqKF9fZXhfdGFibGUpCi0JX19fc3RvcF9fX2V4X3RhYmxlID0gLjsKIAl9CisJRVhDRVBUSU9OX1RBQkxFKDE2KQogCiAJUk9EQVRBCiAjaWYgZGVmaW5lZChDT05GSUdfUk9NS0VSTkVMKQpAQCAtMTAwLDggKzk4LDcgQEAKIAlfX3NkYXRhID0gLiA7CiAJX19fZGF0YV9zdGFydCA9IC4gOwogCi0JLiA9IEFMSUdOKDB4MjAwMCkgOwotCQkqKC5kYXRhLmluaXRfdGFzaykKKwlJTklUX1RBU0tfREFUQSgweDIwMDApCiAJLiA9IEFMSUdOKDB4NCkgOwogCQlEQVRBX0RBVEEKIAkuID0gQUxJR04oMHg0KSA7CkBAIC0xMTQsMjQgKzExMSwxNiBAQAogCV9fZWluaXR0ZXh0ID0gLjsgCiAJCUlOSVRfREFUQQogCS4gPSBBTElHTigweDQpIDsKKwlJTklUX1NFVFVQKDB4NCkKIAlfX19zZXR1cF9zdGFydCA9IC47CiAJCSooLmluaXQuc2V0dXApCiAJLiA9IEFMSUdOKDB4NCkgOwogCV9fX3NldHVwX2VuZCA9IC47Ci0JX19faW5pdGNhbGxfc3RhcnQgPSAuOwotCQlJTklUQ0FMTFMKLQlfX19pbml0Y2FsbF9lbmQgPSAuOwotCV9fX2Nvbl9pbml0Y2FsbF9zdGFydCA9IC47Ci0JCSooLmNvbl9pbml0Y2FsbC5pbml0KQotCV9fX2Nvbl9pbml0Y2FsbF9lbmQgPSAuOworCUlOSVRfQ0FMTFMKKwlDT05fSU5JVENBTEwKIAkJRVhJVF9URVhUCiAJCUVYSVRfREFUQQotI2lmIGRlZmluZWQoQ09ORklHX0JMS19ERVZfSU5JVFJEKQotCQkuID0gQUxJR04oNCk7Ci0JX19faW5pdHJhbWZzX3N0YXJ0ID0gLjsKLSAgCQkqKC5pbml0LnJhbWZzKQotICAJX19faW5pdHJhbWZzX2VuZCA9IC47Ci0jZW5kaWYKKwlJTklUX1JBTV9GUwogCS4gPSBBTElHTigweDQpIDsKIAlfX19pbml0X2VuZCA9IC47CiAJX19lZGF0YSA9IC4gOwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L0tjb25maWcgYi9hcmNoL2lhNjQvS2NvbmZpZwppbmRleCA2ODUxZTUyLi4xZWU1OTZjIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvS2NvbmZpZworKysgYi9hcmNoL2lhNjQvS2NvbmZpZwpAQCAtNjAsOSArNjAsNyBAQAogICAgICAgIGJvb2wKIAogY29uZmlnIEdFTkVSSUNfTE9DS0JSRUFLCi0JYm9vbAotCWRlZmF1bHQgeQotCWRlcGVuZHMgb24gU01QICYmIFBSRUVNUFQKKwlkZWZfYm9vbCBuCiAKIGNvbmZpZyBSV1NFTV9YQ0hHQUREX0FMR09SSVRITQogCWJvb2wKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9pYTMyL2JpbmZtdF9lbGYzMi5jIGIvYXJjaC9pYTY0L2lhMzIvYmluZm10X2VsZjMyLmMKaW5kZXggZjkyYmRhYS4uYzY5NTUyYiAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2lhMzIvYmluZm10X2VsZjMyLmMKKysrIGIvYXJjaC9pYTY0L2lhMzIvYmluZm10X2VsZjMyLmMKQEAgLTY5LDExICs2OSwxMSBAQAogfQogCiAKLXN0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgaWEzMl9zaGFyZWRfcGFnZV92bV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGlhMzJfc2hhcmVkX3BhZ2Vfdm1fb3BzID0gewogCS5mYXVsdCA9IGlhMzJfaW5zdGFsbF9zaGFyZWRfcGFnZQogfTsKIAotc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBpYTMyX2dhdGVfcGFnZV92bV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGlhMzJfZ2F0ZV9wYWdlX3ZtX29wcyA9IHsKIAkuZmF1bHQgPSBpYTMyX2luc3RhbGxfZ2F0ZV9wYWdlCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vYWNwaS5oIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2FjcGkuaAppbmRleCAwZjgyY2MyLi45MWRmOTY4IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vYWNwaS5oCisrKyBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9hY3BpLmgKQEAgLTg5LDEwICs4OSwxMiBAQAogI2RlZmluZSBBQ1BJX1JFTEVBU0VfR0xPQkFMX0xPQ0soZmFjcywgQWNxKQkJCQlcCiAJKChBY3EpID0gaWE2NF9hY3BpX3JlbGVhc2VfZ2xvYmFsX2xvY2soJmZhY3MtPmdsb2JhbF9sb2NrKSkKIAorI2lmZGVmCUNPTkZJR19BQ1BJCiAjZGVmaW5lIGFjcGlfZGlzYWJsZWQgMAkvKiBBQ1BJIGFsd2F5cyBlbmFibGVkIG9uIElBNjQgKi8KICNkZWZpbmUgYWNwaV9ub2lycSAwCS8qIEFDUEkgYWx3YXlzIGVuYWJsZWQgb24gSUE2NCAqLwogI2RlZmluZSBhY3BpX3BjaV9kaXNhYmxlZCAwIC8qIEFDUEkgUENJIGFsd2F5cyBlbmFibGVkIG9uIElBNjQgKi8KICNkZWZpbmUgYWNwaV9zdHJpY3QgMQkvKiBubyBBQ1BJIHNwZWMgd29ya2Fyb3VuZHMgb24gSUE2NCAqLworI2VuZGlmCiAjZGVmaW5lIGFjcGlfcHJvY2Vzc29yX2NzdGF0ZV9jaGVjayh4KSAoeCkgLyogbm8gaWRsZSBsaW1pdHMgb24gSUE2NCA6KSAqLwogc3RhdGljIGlubGluZSB2b2lkIGRpc2FibGVfYWNwaSh2b2lkKSB7IH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3NwaW5sb2NrLmggYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vc3BpbmxvY2suaAppbmRleCAxM2FiNzE1Li4yMzllY2RjIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vc3BpbmxvY2suaAorKysgYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vc3BpbmxvY2suaApAQCAtMTksMTAzICsxOSwxMjYgQEAKIAogI2RlZmluZSBfX3Jhd19zcGluX2xvY2tfaW5pdCh4KQkJCSgoeCktPmxvY2sgPSAwKQogCi0jaWZkZWYgQVNNX1NVUFBPUlRFRAogLyoKLSAqIFRyeSB0byBnZXQgdGhlIGxvY2suICBJZiB3ZSBmYWlsIHRvIGdldCB0aGUgbG9jaywgbWFrZSBhIG5vbi1zdGFuZGFyZCBjYWxsIHRvCi0gKiBpYTY0X3NwaW5sb2NrX2NvbnRlbnRpb24oKS4gIFdlIGRvIG5vdCB1c2UgYSBub3JtYWwgY2FsbCBiZWNhdXNlIHRoYXQgd291bGQgZm9yY2UgYWxsCi0gKiBjYWxsZXJzIG9mIF9fcmF3X3NwaW5fbG9jaygpIHRvIGJlIG5vbi1sZWFmIHJvdXRpbmVzLiAgSW5zdGVhZCwgaWE2NF9zcGlubG9ja19jb250ZW50aW9uKCkgaXMKLSAqIGNhcmVmdWxseSBjb2RlZCB0byB0b3VjaCBvbmx5IHRob3NlIHJlZ2lzdGVycyB0aGF0IF9fcmF3X3NwaW5fbG9jaygpIG1hcmtzICJjbG9iYmVyZWQiLgorICogVGlja2V0IGxvY2tzIGFyZSBjb25jZXB0dWFsbHkgdHdvIHBhcnRzLCBvbmUgaW5kaWNhdGluZyB0aGUgY3VycmVudCBoZWFkIG9mCisgKiB0aGUgcXVldWUsIGFuZCB0aGUgb3RoZXIgaW5kaWNhdGluZyB0aGUgY3VycmVudCB0YWlsLiBUaGUgbG9jayBpcyBhY3F1aXJlZAorICogYnkgYXRvbWljYWxseSBub3RpbmcgdGhlIHRhaWwgYW5kIGluY3JlbWVudGluZyBpdCBieSBvbmUgKHRodXMgYWRkaW5nCisgKiBvdXJzZWxmIHRvIHRoZSBxdWV1ZSBhbmQgbm90aW5nIG91ciBwb3NpdGlvbiksIHRoZW4gd2FpdGluZyB1bnRpbCB0aGUgaGVhZAorICogYmVjb21lcyBlcXVhbCB0byB0aGUgdGhlIGluaXRpYWwgdmFsdWUgb2YgdGhlIHRhaWwuCisgKiBUaGUgcGFkIGJpdHMgaW4gdGhlIG1pZGRsZSBhcmUgdXNlZCB0byBwcmV2ZW50IHRoZSBuZXh0X3RpY2tldCBudW1iZXIKKyAqIG92ZXJmbG93aW5nIGludG8gdGhlIG5vd19zZXJ2aW5nIG51bWJlci4KKyAqCisgKiAgIDMxICAgICAgICAgICAgIDE3ICAxNiAgICAxNSAgMTQgICAgICAgICAgICAgICAgICAgIDAKKyAqICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAqICB8ICBub3dfc2VydmluZyAgICAgfCBwYWRkaW5nIHwgICBuZXh0X3RpY2tldCAgICAgICAgIHwKKyAqICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKICAqLwogCi0jZGVmaW5lIElBNjRfU1BJTkxPQ0tfQ0xPQkJFUlMgImFyLmNjdiIsICJhci5wZnMiLCAicDE0IiwgInAxNSIsICJyMjciLCAicjI4IiwgInIyOSIsICJyMzAiLCAiYjYiLCAibWVtb3J5IgorI2RlZmluZSBUSUNLRVRfU0hJRlQJMTcKKyNkZWZpbmUgVElDS0VUX0JJVFMJMTUKKyNkZWZpbmUJVElDS0VUX01BU0sJKCgxIDw8IFRJQ0tFVF9CSVRTKSAtIDEpCiAKLXN0YXRpYyBpbmxpbmUgdm9pZAotX19yYXdfc3Bpbl9sb2NrX2ZsYWdzIChyYXdfc3BpbmxvY2tfdCAqbG9jaywgdW5zaWduZWQgbG9uZyBmbGFncykKK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBfX3RpY2tldF9zcGluX2xvY2socmF3X3NwaW5sb2NrX3QgKmxvY2spCiB7Ci0JcmVnaXN0ZXIgdm9sYXRpbGUgdW5zaWduZWQgaW50ICpwdHIgYXNtICgicjMxIikgPSAmbG9jay0+bG9jazsKKwlpbnQJKnAgPSAoaW50ICopJmxvY2stPmxvY2ssIHRpY2tldCwgc2VydmU7CiAKLSNpZiAoX19HTlVDX18gPT0gMyAmJiBfX0dOVUNfTUlOT1JfXyA8IDMpCi0jIGlmZGVmIENPTkZJR19JVEFOSVVNCi0JLyogZG9uJ3QgdXNlIGJybCBvbiBJdGFuaXVtLi4uICovCi0JYXNtIHZvbGF0aWxlICgie1xuXHQiCi0JCSAgICAgICIgIG1vdiBhci5jY3YgPSByMFxuXHQiCi0JCSAgICAgICIgIG1vdiByMjggPSBpcFxuXHQiCi0JCSAgICAgICIgIG1vdiByMzAgPSAxOztcblx0IgotCQkgICAgICAifVxuXHQiCi0JCSAgICAgICJjbXB4Y2hnNC5hY3EgcjMwID0gWyUxXSwgcjMwLCBhci5jY3Zcblx0IgotCQkgICAgICAibW92bCByMjkgPSBpYTY0X3NwaW5sb2NrX2NvbnRlbnRpb25fcHJlM180Oztcblx0IgotCQkgICAgICAiY21wNC5uZSBwMTQsIHAwID0gcjMwLCByMFxuXHQiCi0JCSAgICAgICJtb3YgYjYgPSByMjk7O1xuXHQiCi0JCSAgICAgICJtb3YgcjI3PSUyXG5cdCIKLQkJICAgICAgIihwMTQpIGJyLmNvbmQuc3BudC5tYW55IGI2IgotCQkgICAgICA6ICI9ciIocHRyKSA6ICJyIihwdHIpLCAiciIgKGZsYWdzKSA6IElBNjRfU1BJTkxPQ0tfQ0xPQkJFUlMpOwotIyBlbHNlCi0JYXNtIHZvbGF0aWxlICgie1xuXHQiCi0JCSAgICAgICIgIG1vdiBhci5jY3YgPSByMFxuXHQiCi0JCSAgICAgICIgIG1vdiByMjggPSBpcFxuXHQiCi0JCSAgICAgICIgIG1vdiByMzAgPSAxOztcblx0IgotCQkgICAgICAifVxuXHQiCi0JCSAgICAgICJjbXB4Y2hnNC5hY3EgcjMwID0gWyUxXSwgcjMwLCBhci5jY3Y7O1xuXHQiCi0JCSAgICAgICJjbXA0Lm5lIHAxNCwgcDAgPSByMzAsIHIwXG5cdCIKLQkJICAgICAgIm1vdiByMjc9JTJcblx0IgotCQkgICAgICAiKHAxNCkgYnJsLmNvbmQuc3BudC5tYW55IGlhNjRfc3BpbmxvY2tfY29udGVudGlvbl9wcmUzXzQ7OyIKLQkJICAgICAgOiAiPXIiKHB0cikgOiAiciIocHRyKSwgInIiIChmbGFncykgOiBJQTY0X1NQSU5MT0NLX0NMT0JCRVJTKTsKLSMgZW5kaWYgLyogQ09ORklHX01DS0lOTEVZICovCi0jZWxzZQotIyBpZmRlZiBDT05GSUdfSVRBTklVTQotCS8qIGRvbid0IHVzZSBicmwgb24gSXRhbml1bS4uLiAqLwotCS8qIG1pcy1kZWNsYXJlLCBzbyB3ZSBnZXQgdGhlIGVudHJ5LXBvaW50LCBub3QgaXQncyBmdW5jdGlvbiBkZXNjcmlwdG9yOiAqLwotCWFzbSB2b2xhdGlsZSAoIm1vdiByMzAgPSAxXG5cdCIKLQkJICAgICAgIm1vdiByMjc9JTJcblx0IgotCQkgICAgICAibW92IGFyLmNjdiA9IHIwOztcblx0IgotCQkgICAgICAiY21weGNoZzQuYWNxIHIzMCA9IFslMF0sIHIzMCwgYXIuY2N2XG5cdCIKLQkJICAgICAgIm1vdmwgcjI5ID0gaWE2NF9zcGlubG9ja19jb250ZW50aW9uOztcblx0IgotCQkgICAgICAiY21wNC5uZSBwMTQsIHAwID0gcjMwLCByMFxuXHQiCi0JCSAgICAgICJtb3YgYjYgPSByMjk7O1xuXHQiCi0JCSAgICAgICIocDE0KSBici5jYWxsLnNwbnQubWFueSBiNiA9IGI2IgotCQkgICAgICA6ICI9ciIocHRyKSA6ICJyIihwdHIpLCAiciIgKGZsYWdzKSA6IElBNjRfU1BJTkxPQ0tfQ0xPQkJFUlMpOwotIyBlbHNlCi0JYXNtIHZvbGF0aWxlICgibW92IHIzMCA9IDFcblx0IgotCQkgICAgICAibW92IHIyNz0lMlxuXHQiCi0JCSAgICAgICJtb3YgYXIuY2N2ID0gcjA7O1xuXHQiCi0JCSAgICAgICJjbXB4Y2hnNC5hY3EgcjMwID0gWyUwXSwgcjMwLCBhci5jY3Y7O1xuXHQiCi0JCSAgICAgICJjbXA0Lm5lIHAxNCwgcDAgPSByMzAsIHIwXG5cdCIKLQkJICAgICAgIihwMTQpIGJybC5jYWxsLnNwbnQubWFueSBiNj1pYTY0X3NwaW5sb2NrX2NvbnRlbnRpb247OyIKLQkJICAgICAgOiAiPXIiKHB0cikgOiAiciIocHRyKSwgInIiIChmbGFncykgOiBJQTY0X1NQSU5MT0NLX0NMT0JCRVJTKTsKLSMgZW5kaWYgLyogQ09ORklHX01DS0lOTEVZICovCi0jZW5kaWYKKwl0aWNrZXQgPSBpYTY0X2ZldGNoYWRkKDEsIHAsIGFjcSk7CisKKwlpZiAoISgoKHRpY2tldCA+PiBUSUNLRVRfU0hJRlQpIF4gdGlja2V0KSAmIFRJQ0tFVF9NQVNLKSkKKwkJcmV0dXJuOworCisJaWE2NF9pbnZhbGEoKTsKKworCWZvciAoOzspIHsKKwkJYXNtIHZvbGF0aWxlICgibGQ0LmMubmMgJTA9WyUxXSIgOiAiPXIiKHNlcnZlKSA6ICJyIihwKSA6ICJtZW1vcnkiKTsKKworCQlpZiAoISgoKHNlcnZlID4+IFRJQ0tFVF9TSElGVCkgXiB0aWNrZXQpICYgVElDS0VUX01BU0spKQorCQkJcmV0dXJuOworCQljcHVfcmVsYXgoKTsKKwl9CiB9CiAKLSNkZWZpbmUgX19yYXdfc3Bpbl9sb2NrKGxvY2spIF9fcmF3X3NwaW5fbG9ja19mbGFncyhsb2NrLCAwKQorc3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgX190aWNrZXRfc3Bpbl90cnlsb2NrKHJhd19zcGlubG9ja190ICpsb2NrKQoreworCWludCB0bXAgPSBBQ0NFU1NfT05DRShsb2NrLT5sb2NrKTsKIAotLyogVW5sb2NrIGJ5IGRvaW5nIGFuIG9yZGVyZWQgc3RvcmUgYW5kIHJlbGVhc2luZyB0aGUgY2FjaGVsaW5lIHdpdGggbnRhICovCi1zdGF0aWMgaW5saW5lIHZvaWQgX19yYXdfc3Bpbl91bmxvY2socmF3X3NwaW5sb2NrX3QgKngpIHsKLQliYXJyaWVyKCk7Ci0JYXNtIHZvbGF0aWxlICgic3Q0LnJlbC5udGEgWyUwXSA9IHIwXG5cdCIgOjogInIiKHgpKTsKKwlpZiAoISgoKHRtcCA+PiBUSUNLRVRfU0hJRlQpIF4gdG1wKSAmIFRJQ0tFVF9NQVNLKSkKKwkJcmV0dXJuIGlhNjRfY21weGNoZyhhY3EsICZsb2NrLT5sb2NrLCB0bXAsIHRtcCArIDEsIHNpemVvZiAodG1wKSkgPT0gdG1wOworCXJldHVybiAwOwogfQogCi0jZWxzZSAvKiAhQVNNX1NVUFBPUlRFRCAqLwotI2RlZmluZSBfX3Jhd19zcGluX2xvY2tfZmxhZ3MobG9jaywgZmxhZ3MpIF9fcmF3X3NwaW5fbG9jayhsb2NrKQotIyBkZWZpbmUgX19yYXdfc3Bpbl9sb2NrKHgpCQkJCQkJCQlcCi1kbyB7CQkJCQkJCQkJCQlcCi0JX191MzIgKmlhNjRfc3BpbmxvY2tfcHRyID0gKF9fdTMyICopICh4KTsJCQkJCVwKLQlfX3U2NCBpYTY0X3NwaW5sb2NrX3ZhbDsJCQkJCQkJXAotCWlhNjRfc3BpbmxvY2tfdmFsID0gaWE2NF9jbXB4Y2hnNF9hY3EoaWE2NF9zcGlubG9ja19wdHIsIDEsIDApOwkJCVwKLQlpZiAodW5saWtlbHkoaWE2NF9zcGlubG9ja192YWwpKSB7CQkJCQkJXAotCQlkbyB7CQkJCQkJCQkJXAotCQkJd2hpbGUgKCppYTY0X3NwaW5sb2NrX3B0cikJCQkJCVwKLQkJCQlpYTY0X2JhcnJpZXIoKTsJCQkJCQlcCi0JCQlpYTY0X3NwaW5sb2NrX3ZhbCA9IGlhNjRfY21weGNoZzRfYWNxKGlhNjRfc3BpbmxvY2tfcHRyLCAxLCAwKTsJXAotCQl9IHdoaWxlIChpYTY0X3NwaW5sb2NrX3ZhbCk7CQkJCQkJXAotCX0JCQkJCQkJCQkJXAotfSB3aGlsZSAoMCkKLSNkZWZpbmUgX19yYXdfc3Bpbl91bmxvY2soeCkJZG8geyBiYXJyaWVyKCk7ICgocmF3X3NwaW5sb2NrX3QgKikgeCktPmxvY2sgPSAwOyB9IHdoaWxlICgwKQotI2VuZGlmIC8qICFBU01fU1VQUE9SVEVEICovCitzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgX190aWNrZXRfc3Bpbl91bmxvY2socmF3X3NwaW5sb2NrX3QgKmxvY2spCit7CisJdW5zaWduZWQgc2hvcnQJKnAgPSAodW5zaWduZWQgc2hvcnQgKikmbG9jay0+bG9jayArIDEsIHRtcDsKIAotI2RlZmluZSBfX3Jhd19zcGluX2lzX2xvY2tlZCh4KQkJKCh4KS0+bG9jayAhPSAwKQotI2RlZmluZSBfX3Jhd19zcGluX3RyeWxvY2soeCkJCShjbXB4Y2hnX2FjcSgmKHgpLT5sb2NrLCAwLCAxKSA9PSAwKQotI2RlZmluZSBfX3Jhd19zcGluX3VubG9ja193YWl0KGxvY2spIFwKLQlkbyB7IHdoaWxlIChfX3Jhd19zcGluX2lzX2xvY2tlZChsb2NrKSkgY3B1X3JlbGF4KCk7IH0gd2hpbGUgKDApCisJYXNtIHZvbGF0aWxlICgibGQyLmJpYXMgJTA9WyUxXSIgOiAiPXIiKHRtcCkgOiAiciIocCkpOworCUFDQ0VTU19PTkNFKCpwKSA9ICh0bXAgKyAyKSAmIH4xOworfQorCitzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgX190aWNrZXRfc3Bpbl91bmxvY2tfd2FpdChyYXdfc3BpbmxvY2tfdCAqbG9jaykKK3sKKwlpbnQJKnAgPSAoaW50ICopJmxvY2stPmxvY2ssIHRpY2tldDsKKworCWlhNjRfaW52YWxhKCk7CisKKwlmb3IgKDs7KSB7CisJCWFzbSB2b2xhdGlsZSAoImxkNC5jLm5jICUwPVslMV0iIDogIj1yIih0aWNrZXQpIDogInIiKHApIDogIm1lbW9yeSIpOworCQlpZiAoISgoKHRpY2tldCA+PiBUSUNLRVRfU0hJRlQpIF4gdGlja2V0KSAmIFRJQ0tFVF9NQVNLKSkKKwkJCXJldHVybjsKKwkJY3B1X3JlbGF4KCk7CisJfQorfQorCitzdGF0aWMgaW5saW5lIGludCBfX3RpY2tldF9zcGluX2lzX2xvY2tlZChyYXdfc3BpbmxvY2tfdCAqbG9jaykKK3sKKwlsb25nIHRtcCA9IEFDQ0VTU19PTkNFKGxvY2stPmxvY2spOworCisJcmV0dXJuICEhKCgodG1wID4+IFRJQ0tFVF9TSElGVCkgXiB0bXApICYgVElDS0VUX01BU0spOworfQorCitzdGF0aWMgaW5saW5lIGludCBfX3RpY2tldF9zcGluX2lzX2NvbnRlbmRlZChyYXdfc3BpbmxvY2tfdCAqbG9jaykKK3sKKwlsb25nIHRtcCA9IEFDQ0VTU19PTkNFKGxvY2stPmxvY2spOworCisJcmV0dXJuICgodG1wIC0gKHRtcCA+PiBUSUNLRVRfU0hJRlQpKSAmIFRJQ0tFVF9NQVNLKSA+IDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IF9fcmF3X3NwaW5faXNfbG9ja2VkKHJhd19zcGlubG9ja190ICpsb2NrKQoreworCXJldHVybiBfX3RpY2tldF9zcGluX2lzX2xvY2tlZChsb2NrKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgX19yYXdfc3Bpbl9pc19jb250ZW5kZWQocmF3X3NwaW5sb2NrX3QgKmxvY2spCit7CisJcmV0dXJuIF9fdGlja2V0X3NwaW5faXNfY29udGVuZGVkKGxvY2spOworfQorI2RlZmluZSBfX3Jhd19zcGluX2lzX2NvbnRlbmRlZAlfX3Jhd19zcGluX2lzX2NvbnRlbmRlZAorCitzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgX19yYXdfc3Bpbl9sb2NrKHJhd19zcGlubG9ja190ICpsb2NrKQoreworCV9fdGlja2V0X3NwaW5fbG9jayhsb2NrKTsKK30KKworc3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgX19yYXdfc3Bpbl90cnlsb2NrKHJhd19zcGlubG9ja190ICpsb2NrKQoreworCXJldHVybiBfX3RpY2tldF9zcGluX3RyeWxvY2sobG9jayk7Cit9CisKK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBfX3Jhd19zcGluX3VubG9jayhyYXdfc3BpbmxvY2tfdCAqbG9jaykKK3sKKwlfX3RpY2tldF9zcGluX3VubG9jayhsb2NrKTsKK30KKworc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIF9fcmF3X3NwaW5fbG9ja19mbGFncyhyYXdfc3BpbmxvY2tfdCAqbG9jaywKKwkJCQkJCSAgdW5zaWduZWQgbG9uZyBmbGFncykKK3sKKwlfX3Jhd19zcGluX2xvY2sobG9jayk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3Jhd19zcGluX3VubG9ja193YWl0KHJhd19zcGlubG9ja190ICpsb2NrKQoreworCV9fdGlja2V0X3NwaW5fdW5sb2NrX3dhaXQobG9jayk7Cit9CiAKICNkZWZpbmUgX19yYXdfcmVhZF9jYW5fbG9jayhydykJCSgqKHZvbGF0aWxlIGludCAqKShydykgPj0gMCkKICNkZWZpbmUgX19yYXdfd3JpdGVfY2FuX2xvY2socncpCSgqKHZvbGF0aWxlIGludCAqKShydykgPT0gMCkKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvaGVhZC5TIGIvYXJjaC9pYTY0L2tlcm5lbC9oZWFkLlMKaW5kZXggMWE2ZTQ0NS4uNjk2ZWZmMiAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9oZWFkLlMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9oZWFkLlMKQEAgLTExMzAsOTUgKzExMzAsNiBAQAogI2VuZGlmIC8qIENPTkZJR19JQTY0X0JSTF9FTVUgKi8KIAogI2lmZGVmIENPTkZJR19TTVAKLQkvKgotCSAqIFRoaXMgcm91dGluZSBoYW5kbGVzIHNwaW5sb2NrIGNvbnRlbnRpb24uICBJdCB1c2VzIGEgbm9uLXN0YW5kYXJkIGNhbGxpbmcKLQkgKiBjb252ZW50aW9uIHRvIGF2b2lkIGNvbnZlcnRpbmcgbGVhZiByb3V0aW5lcyBpbnRvIGludGVyaW9yIHJvdXRpbmVzLiAgQmVjYXVzZQotCSAqIG9mIHRoaXMgc3BlY2lhbCBjb252ZW50aW9uLCB0aGVyZSBhcmUgc2V2ZXJhbCByZXN0cmljdGlvbnM6Ci0JICoKLQkgKiAtIGRvIG5vdCB1c2UgZ3AgcmVsYXRpdmUgdmFyaWFibGVzLCB0aGlzIGNvZGUgaXMgY2FsbGVkIGZyb20gdGhlIGtlcm5lbAotCSAqICAgYW5kIGZyb20gbW9kdWxlcywgcjEgaXMgdW5kZWZpbmVkLgotCSAqIC0gZG8gbm90IHVzZSBzdGFja2VkIHJlZ2lzdGVycywgdGhlIGNhbGxlciBvd25zIHRoZW0uCi0JICogLSBkbyBub3QgdXNlIHRoZSBzY3JhdGNoIHN0YWNrIHNwYWNlLCB0aGUgY2FsbGVyIG93bnMgaXQuCi0JICogLSBkbyBub3QgdXNlIGFueSByZWdpc3RlcnMgb3RoZXIgdGhhbiB0aGUgb25lcyBsaXN0ZWQgYmVsb3cKLQkgKgotCSAqIElucHV0czoKLQkgKiAgIGFyLnBmcyAtIHNhdmVkIENGTSBvZiBjYWxsZXIKLQkgKiAgIGFyLmNjdiAtIDAgKGFuZCBhdmFpbGFibGUgZm9yIHVzZSkKLQkgKiAgIHIyNyAgICAtIGZsYWdzIGZyb20gc3Bpbl9sb2NrX2lycXNhdmUgb3IgMC4gIE11c3QgYmUgcHJlc2VydmVkLgotCSAqICAgcjI4ICAgIC0gYXZhaWxhYmxlIGZvciB1c2UuCi0JICogICByMjkgICAgLSBhdmFpbGFibGUgZm9yIHVzZS4KLQkgKiAgIHIzMCAgICAtIGF2YWlsYWJsZSBmb3IgdXNlLgotCSAqICAgcjMxICAgIC0gYWRkcmVzcyBvZiBsb2NrLCBhdmFpbGFibGUgZm9yIHVzZS4KLQkgKiAgIGI2ICAgICAtIHJldHVybiBhZGRyZXNzCi0JICogICBwMTQgICAgLSBhdmFpbGFibGUgZm9yIHVzZS4KLQkgKiAgIHAxNSAgICAtIHVzZWQgdG8gdHJhY2sgZmxhZyBzdGF0dXMuCi0JICoKLQkgKiBJZiB5b3UgcGF0Y2ggdGhpcyBjb2RlIHRvIHVzZSBtb3JlIHJlZ2lzdGVycywgZG8gbm90IGZvcmdldCB0byB1cGRhdGUKLQkgKiB0aGUgY2xvYmJlciBsaXN0cyBmb3Igc3Bpbl9sb2NrKCkgaW4gYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3NwaW5sb2NrLmguCi0JICovCi0KLSNpZiAoX19HTlVDX18gPT0gMyAmJiBfX0dOVUNfTUlOT1JfXyA8IDMpCi0KLUdMT0JBTF9FTlRSWShpYTY0X3NwaW5sb2NrX2NvbnRlbnRpb25fcHJlM180KQotCS5wcm9sb2d1ZQotCS5zYXZlIGFyLnBmcywgcjAJLy8gdGhpcyBjb2RlIGVmZmVjdGl2ZWx5IGhhcyBhIHplcm8gZnJhbWUgc2l6ZQotCS5zYXZlIHJwLCByMjgKLQkuYm9keQotCW5vcCAwCi0JdGJpdC5ueiBwMTUscDA9cjI3LElBNjRfUFNSX0lfQklUCi0JLnJlc3RvcmUgc3AJCS8vIHBvcCBleGlzdGluZyBwcm9sb2d1ZSBhZnRlciBuZXh0IGluc24KLQltb3YgYjYgPSByMjgKLQkucHJvbG9ndWUKLQkuc2F2ZSBhci5wZnMsIHIwCi0JLmFsdHJwIGI2Ci0JLmJvZHkKLQk7OwotKHAxNSkJc3NtIHBzci5pCQkvLyByZWVuYWJsZSBpbnRlcnJ1cHRzIGlmIHRoZXkgd2VyZSBvbgotCQkJCS8vIERhdmlkTSBzYXlzIHRoYXQgc3Jsei5kIGlzIHNsb3cgYW5kIGlzIG5vdCByZXF1aXJlZCBpbiB0aGlzIGNhc2UKLS53YWl0OgotCS8vIGV4cG9uZW50aWFsIGJhY2tvZmYsIGtkYiwgbG9ja21ldGVyIGV0Yy4gZ28gaW4gaGVyZQotCWhpbnQgQHBhdXNlCi0JbGQ0IHIzMD1bcjMxXQkJLy8gZG9uJ3QgdXNlIGxkNC5iaWFzOyBpZiBpdCdzIGNvbnRlbmRlZCwgd2Ugd29uJ3Qgd3JpdGUgdGhlIHdvcmQKLQlub3AgMAotCTs7Ci0JY21wNC5uZSBwMTQscDA9cjMwLHIwCi0ocDE0KQlici5jb25kLnNwdGsuZmV3IC53YWl0Ci0ocDE1KQlyc20gcHNyLmkJCS8vIGRpc2FibGUgaW50ZXJydXB0cyBpZiB3ZSByZWVuYWJsZWQgdGhlbQotCWJyLmNvbmQuc3B0ay5mZXcgYjYJLy8gbG9jayBpcyBub3cgZnJlZSwgdHJ5IHRvIGFjcXVpcmUKLQkuZ2xvYmFsIGlhNjRfc3BpbmxvY2tfY29udGVudGlvbl9wcmUzXzRfZW5kCS8vIGZvciBrZXJucHJvZgotaWE2NF9zcGlubG9ja19jb250ZW50aW9uX3ByZTNfNF9lbmQ6Ci1FTkQoaWE2NF9zcGlubG9ja19jb250ZW50aW9uX3ByZTNfNCkKLQotI2Vsc2UKLQotR0xPQkFMX0VOVFJZKGlhNjRfc3BpbmxvY2tfY29udGVudGlvbikKLQkucHJvbG9ndWUKLQkuYWx0cnAgYjYKLQkuYm9keQotCXRiaXQubnogcDE1LHAwPXIyNyxJQTY0X1BTUl9JX0JJVAotCTs7Ci0ud2FpdDoKLShwMTUpCXNzbSBwc3IuaQkJLy8gcmVlbmFibGUgaW50ZXJydXB0cyBpZiB0aGV5IHdlcmUgb24KLQkJCQkvLyBEYXZpZE0gc2F5cyB0aGF0IHNybHouZCBpcyBzbG93IGFuZCBpcyBub3QgcmVxdWlyZWQgaW4gdGhpcyBjYXNlCi0ud2FpdDI6Ci0JLy8gZXhwb25lbnRpYWwgYmFja29mZiwga2RiLCBsb2NrbWV0ZXIgZXRjLiBnbyBpbiBoZXJlCi0JaGludCBAcGF1c2UKLQlsZDQgcjMwPVtyMzFdCQkvLyBkb24ndCB1c2UgbGQ0LmJpYXM7IGlmIGl0J3MgY29udGVuZGVkLCB3ZSB3b24ndCB3cml0ZSB0aGUgd29yZAotCTs7Ci0JY21wNC5uZSBwMTQscDA9cjMwLHIwCi0JbW92IHIzMCA9IDEKLShwMTQpCWJyLmNvbmQuc3B0ay5mZXcgLndhaXQyCi0ocDE1KQlyc20gcHNyLmkJCS8vIGRpc2FibGUgaW50ZXJydXB0cyBpZiB3ZSByZWVuYWJsZWQgdGhlbQotCTs7Ci0JY21weGNoZzQuYWNxIHIzMD1bcjMxXSwgcjMwLCBhci5jY3YKLQk7OwotCWNtcDQubmUgcDE0LHAwPXIwLHIzMAotKHAxNCkJYnIuY29uZC5zcHRrLmZldyAud2FpdAotCi0JYnIucmV0LnNwdGsubWFueSBiNgkvLyBsb2NrIGlzIG5vdyB0YWtlbgotRU5EKGlhNjRfc3BpbmxvY2tfY29udGVudGlvbikKLQotI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKIEdMT0JBTF9FTlRSWShpYTY0X2p1bXBfdG9fc2FsKQpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9pYTY0X2tzeW1zLmMgYi9hcmNoL2lhNjQva2VybmVsL2lhNjRfa3N5bXMuYwppbmRleCA4ZWJjY2I1Li4xNGQzOWUzIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL2lhNjRfa3N5bXMuYworKysgYi9hcmNoL2lhNjQva2VybmVsL2lhNjRfa3N5bXMuYwpAQCAtODQsMjYgKzg0LDYgQEAKICNpbmNsdWRlIDxhc20vdW53aW5kLmg+CiBFWFBPUlRfU1lNQk9MKHVud19pbml0X3J1bm5pbmcpOwogCi0jaWZkZWYgQVNNX1NVUFBPUlRFRAotIyBpZmRlZiBDT05GSUdfU01QCi0jICBpZiAoX19HTlVDX18gPT0gMyAmJiBfX0dOVUNfTUlOT1JfXyA8IDMpCi0vKgotICogVGhpcyBpcyBub3QgYSBub3JtYWwgcm91dGluZSBhbmQgd2UgZG9uJ3Qgd2FudCBhIGZ1bmN0aW9uIGRlc2NyaXB0b3IgZm9yIGl0LCBzbyB3ZSB1c2UKLSAqIGEgZmFrZSBkZWNsYXJhdGlvbiBoZXJlLgotICovCi1leHRlcm4gY2hhciBpYTY0X3NwaW5sb2NrX2NvbnRlbnRpb25fcHJlM180OwotRVhQT1JUX1NZTUJPTChpYTY0X3NwaW5sb2NrX2NvbnRlbnRpb25fcHJlM180KTsKLSMgIGVsc2UKLS8qCi0gKiBUaGlzIGlzIG5vdCBhIG5vcm1hbCByb3V0aW5lIGFuZCB3ZSBkb24ndCB3YW50IGEgZnVuY3Rpb24gZGVzY3JpcHRvciBmb3IgaXQsIHNvIHdlIHVzZQotICogYSBmYWtlIGRlY2xhcmF0aW9uIGhlcmUuCi0gKi8KLWV4dGVybiBjaGFyIGlhNjRfc3BpbmxvY2tfY29udGVudGlvbjsKLUVYUE9SVF9TWU1CT0woaWE2NF9zcGlubG9ja19jb250ZW50aW9uKTsKLSMgIGVuZGlmCi0jIGVuZGlmCi0jZW5kaWYKLQogI2lmIGRlZmluZWQoQ09ORklHX0lBNjRfRVNJKSB8fCBkZWZpbmVkKENPTkZJR19JQTY0X0VTSV9NT0RVTEUpCiBleHRlcm4gdm9pZCBlc2lfY2FsbF9waHlzICh2b2lkKTsKIEVYUE9SVF9TWU1CT0xfR1BMKGVzaV9jYWxsX3BoeXMpOwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9tY2EuYyBiL2FyY2gvaWE2NC9rZXJuZWwvbWNhLmMKaW5kZXggZDI4NzdhNy4uNDk2YWM3YSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9tY2EuYworKysgYi9hcmNoL2lhNjQva2VybmVsL21jYS5jCkBAIC04ODcsNiArODg3LDYwIEBACiAJbWVtY3B5KGN1cnJlbnQtPmNvbW0sIGNvbW0sIHNpemVvZihjdXJyZW50LT5jb21tKSk7CiB9CiAKK3N0YXRpYyB2b2lkCitmaW5pc2hfcHRfcmVncyhzdHJ1Y3QgcHRfcmVncyAqcmVncywgY29uc3QgcGFsX21pbl9zdGF0ZV9hcmVhX3QgKm1zLAorCQl1bnNpZ25lZCBsb25nICpuYXQpCit7CisJY29uc3QgdTY0ICpiYW5rOworCisJLyogSWYgaXBzci5pYyB0aGVuIHVzZSBwbXNhX3tpaXAsaXBzcixpZnN9LCBlbHNlIHVzZQorCSAqIHBtc2Ffe3hpcCx4cHNyLHhmc30KKwkgKi8KKwlpZiAoaWE2NF9wc3IocmVncyktPmljKSB7CisJCXJlZ3MtPmNyX2lpcCA9IG1zLT5wbXNhX2lpcDsKKwkJcmVncy0+Y3JfaXBzciA9IG1zLT5wbXNhX2lwc3I7CisJCXJlZ3MtPmNyX2lmcyA9IG1zLT5wbXNhX2lmczsKKwl9IGVsc2UgeworCQlyZWdzLT5jcl9paXAgPSBtcy0+cG1zYV94aXA7CisJCXJlZ3MtPmNyX2lwc3IgPSBtcy0+cG1zYV94cHNyOworCQlyZWdzLT5jcl9pZnMgPSBtcy0+cG1zYV94ZnM7CisJfQorCXJlZ3MtPnByID0gbXMtPnBtc2FfcHI7CisJcmVncy0+YjAgPSBtcy0+cG1zYV9icjA7CisJcmVncy0+YXJfcnNjID0gbXMtPnBtc2FfcnNjOworCWNvcHlfcmVnKCZtcy0+cG1zYV9nclsxLTFdLCBtcy0+cG1zYV9uYXRfYml0cywgJnJlZ3MtPnIxLCBuYXQpOworCWNvcHlfcmVnKCZtcy0+cG1zYV9nclsyLTFdLCBtcy0+cG1zYV9uYXRfYml0cywgJnJlZ3MtPnIyLCBuYXQpOworCWNvcHlfcmVnKCZtcy0+cG1zYV9nclszLTFdLCBtcy0+cG1zYV9uYXRfYml0cywgJnJlZ3MtPnIzLCBuYXQpOworCWNvcHlfcmVnKCZtcy0+cG1zYV9ncls4LTFdLCBtcy0+cG1zYV9uYXRfYml0cywgJnJlZ3MtPnI4LCBuYXQpOworCWNvcHlfcmVnKCZtcy0+cG1zYV9ncls5LTFdLCBtcy0+cG1zYV9uYXRfYml0cywgJnJlZ3MtPnI5LCBuYXQpOworCWNvcHlfcmVnKCZtcy0+cG1zYV9nclsxMC0xXSwgbXMtPnBtc2FfbmF0X2JpdHMsICZyZWdzLT5yMTAsIG5hdCk7CisJY29weV9yZWcoJm1zLT5wbXNhX2dyWzExLTFdLCBtcy0+cG1zYV9uYXRfYml0cywgJnJlZ3MtPnIxMSwgbmF0KTsKKwljb3B5X3JlZygmbXMtPnBtc2FfZ3JbMTItMV0sIG1zLT5wbXNhX25hdF9iaXRzLCAmcmVncy0+cjEyLCBuYXQpOworCWNvcHlfcmVnKCZtcy0+cG1zYV9nclsxMy0xXSwgbXMtPnBtc2FfbmF0X2JpdHMsICZyZWdzLT5yMTMsIG5hdCk7CisJY29weV9yZWcoJm1zLT5wbXNhX2dyWzE0LTFdLCBtcy0+cG1zYV9uYXRfYml0cywgJnJlZ3MtPnIxNCwgbmF0KTsKKwljb3B5X3JlZygmbXMtPnBtc2FfZ3JbMTUtMV0sIG1zLT5wbXNhX25hdF9iaXRzLCAmcmVncy0+cjE1LCBuYXQpOworCWlmIChpYTY0X3BzcihyZWdzKS0+Ym4pCisJCWJhbmsgPSBtcy0+cG1zYV9iYW5rMV9ncjsKKwllbHNlCisJCWJhbmsgPSBtcy0+cG1zYV9iYW5rMF9ncjsKKwljb3B5X3JlZygmYmFua1sxNi0xNl0sIG1zLT5wbXNhX25hdF9iaXRzLCAmcmVncy0+cjE2LCBuYXQpOworCWNvcHlfcmVnKCZiYW5rWzE3LTE2XSwgbXMtPnBtc2FfbmF0X2JpdHMsICZyZWdzLT5yMTcsIG5hdCk7CisJY29weV9yZWcoJmJhbmtbMTgtMTZdLCBtcy0+cG1zYV9uYXRfYml0cywgJnJlZ3MtPnIxOCwgbmF0KTsKKwljb3B5X3JlZygmYmFua1sxOS0xNl0sIG1zLT5wbXNhX25hdF9iaXRzLCAmcmVncy0+cjE5LCBuYXQpOworCWNvcHlfcmVnKCZiYW5rWzIwLTE2XSwgbXMtPnBtc2FfbmF0X2JpdHMsICZyZWdzLT5yMjAsIG5hdCk7CisJY29weV9yZWcoJmJhbmtbMjEtMTZdLCBtcy0+cG1zYV9uYXRfYml0cywgJnJlZ3MtPnIyMSwgbmF0KTsKKwljb3B5X3JlZygmYmFua1syMi0xNl0sIG1zLT5wbXNhX25hdF9iaXRzLCAmcmVncy0+cjIyLCBuYXQpOworCWNvcHlfcmVnKCZiYW5rWzIzLTE2XSwgbXMtPnBtc2FfbmF0X2JpdHMsICZyZWdzLT5yMjMsIG5hdCk7CisJY29weV9yZWcoJmJhbmtbMjQtMTZdLCBtcy0+cG1zYV9uYXRfYml0cywgJnJlZ3MtPnIyNCwgbmF0KTsKKwljb3B5X3JlZygmYmFua1syNS0xNl0sIG1zLT5wbXNhX25hdF9iaXRzLCAmcmVncy0+cjI1LCBuYXQpOworCWNvcHlfcmVnKCZiYW5rWzI2LTE2XSwgbXMtPnBtc2FfbmF0X2JpdHMsICZyZWdzLT5yMjYsIG5hdCk7CisJY29weV9yZWcoJmJhbmtbMjctMTZdLCBtcy0+cG1zYV9uYXRfYml0cywgJnJlZ3MtPnIyNywgbmF0KTsKKwljb3B5X3JlZygmYmFua1syOC0xNl0sIG1zLT5wbXNhX25hdF9iaXRzLCAmcmVncy0+cjI4LCBuYXQpOworCWNvcHlfcmVnKCZiYW5rWzI5LTE2XSwgbXMtPnBtc2FfbmF0X2JpdHMsICZyZWdzLT5yMjksIG5hdCk7CisJY29weV9yZWcoJmJhbmtbMzAtMTZdLCBtcy0+cG1zYV9uYXRfYml0cywgJnJlZ3MtPnIzMCwgbmF0KTsKKwljb3B5X3JlZygmYmFua1szMS0xNl0sIG1zLT5wbXNhX25hdF9iaXRzLCAmcmVncy0+cjMxLCBuYXQpOworfQorCiAvKiBPbiBlbnRyeSB0byB0aGlzIHJvdXRpbmUsIHdlIGFyZSBydW5uaW5nIG9uIHRoZSBwZXIgY3B1IHN0YWNrLCBzZWUKICAqIG1jYV9hc20uaC4gIFRoZSBvcmlnaW5hbCBzdGFjayBoYXMgbm90IGJlZW4gdG91Y2hlZCBieSB0aGlzIGV2ZW50LiAgU29tZSBvZgogICogdGhlIG9yaWdpbmFsIHN0YWNrJ3MgcmVnaXN0ZXJzIHdpbGwgYmUgaW4gdGhlIFJCUyBvbiB0aGlzIHN0YWNrLiAgVGhpcyBzdGFjawpAQCAtOTIxLDcgKzk3NSw2IEBACiAJdTY0IHIxMiA9IG1zLT5wbXNhX2dyWzEyLTFdLCByMTMgPSBtcy0+cG1zYV9nclsxMy0xXTsKIAl1NjQgYXJfYnNwc3RvcmUgPSByZWdzLT5hcl9ic3BzdG9yZTsKIAl1NjQgYXJfYnNwID0gcmVncy0+YXJfYnNwc3RvcmUgKyAobG9hZHJzID4+IDE2KTsKLQljb25zdCB1NjQgKmJhbms7CiAJY29uc3QgY2hhciAqbXNnOwogCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAKQEAgLTEwMjQsNTQgKzEwNzcsOSBAQAogCXAgPSAoY2hhciAqKXIxMiAtIHNpemVvZigqcmVncyk7CiAJb2xkX3JlZ3MgPSAoc3RydWN0IHB0X3JlZ3MgKilwOwogCW1lbWNweShvbGRfcmVncywgcmVncywgc2l6ZW9mKCpyZWdzKSk7Ci0JLyogSWYgaXBzci5pYyB0aGVuIHVzZSBwbXNhX3tpaXAsaXBzcixpZnN9LCBlbHNlIHVzZQotCSAqIHBtc2Ffe3hpcCx4cHNyLHhmc30KLQkgKi8KLQlpZiAoaWE2NF9wc3IocmVncyktPmljKSB7Ci0JCW9sZF9yZWdzLT5jcl9paXAgPSBtcy0+cG1zYV9paXA7Ci0JCW9sZF9yZWdzLT5jcl9pcHNyID0gbXMtPnBtc2FfaXBzcjsKLQkJb2xkX3JlZ3MtPmNyX2lmcyA9IG1zLT5wbXNhX2lmczsKLQl9IGVsc2UgewotCQlvbGRfcmVncy0+Y3JfaWlwID0gbXMtPnBtc2FfeGlwOwotCQlvbGRfcmVncy0+Y3JfaXBzciA9IG1zLT5wbXNhX3hwc3I7Ci0JCW9sZF9yZWdzLT5jcl9pZnMgPSBtcy0+cG1zYV94ZnM7Ci0JfQotCW9sZF9yZWdzLT5wciA9IG1zLT5wbXNhX3ByOwotCW9sZF9yZWdzLT5iMCA9IG1zLT5wbXNhX2JyMDsKIAlvbGRfcmVncy0+bG9hZHJzID0gbG9hZHJzOwotCW9sZF9yZWdzLT5hcl9yc2MgPSBtcy0+cG1zYV9yc2M7CiAJb2xkX3VuYXQgPSBvbGRfcmVncy0+YXJfdW5hdDsKLQljb3B5X3JlZygmbXMtPnBtc2FfZ3JbMS0xXSwgbXMtPnBtc2FfbmF0X2JpdHMsICZvbGRfcmVncy0+cjEsICZvbGRfdW5hdCk7Ci0JY29weV9yZWcoJm1zLT5wbXNhX2dyWzItMV0sIG1zLT5wbXNhX25hdF9iaXRzLCAmb2xkX3JlZ3MtPnIyLCAmb2xkX3VuYXQpOwotCWNvcHlfcmVnKCZtcy0+cG1zYV9nclszLTFdLCBtcy0+cG1zYV9uYXRfYml0cywgJm9sZF9yZWdzLT5yMywgJm9sZF91bmF0KTsKLQljb3B5X3JlZygmbXMtPnBtc2FfZ3JbOC0xXSwgbXMtPnBtc2FfbmF0X2JpdHMsICZvbGRfcmVncy0+cjgsICZvbGRfdW5hdCk7Ci0JY29weV9yZWcoJm1zLT5wbXNhX2dyWzktMV0sIG1zLT5wbXNhX25hdF9iaXRzLCAmb2xkX3JlZ3MtPnI5LCAmb2xkX3VuYXQpOwotCWNvcHlfcmVnKCZtcy0+cG1zYV9nclsxMC0xXSwgbXMtPnBtc2FfbmF0X2JpdHMsICZvbGRfcmVncy0+cjEwLCAmb2xkX3VuYXQpOwotCWNvcHlfcmVnKCZtcy0+cG1zYV9nclsxMS0xXSwgbXMtPnBtc2FfbmF0X2JpdHMsICZvbGRfcmVncy0+cjExLCAmb2xkX3VuYXQpOwotCWNvcHlfcmVnKCZtcy0+cG1zYV9nclsxMi0xXSwgbXMtPnBtc2FfbmF0X2JpdHMsICZvbGRfcmVncy0+cjEyLCAmb2xkX3VuYXQpOwotCWNvcHlfcmVnKCZtcy0+cG1zYV9nclsxMy0xXSwgbXMtPnBtc2FfbmF0X2JpdHMsICZvbGRfcmVncy0+cjEzLCAmb2xkX3VuYXQpOwotCWNvcHlfcmVnKCZtcy0+cG1zYV9nclsxNC0xXSwgbXMtPnBtc2FfbmF0X2JpdHMsICZvbGRfcmVncy0+cjE0LCAmb2xkX3VuYXQpOwotCWNvcHlfcmVnKCZtcy0+cG1zYV9nclsxNS0xXSwgbXMtPnBtc2FfbmF0X2JpdHMsICZvbGRfcmVncy0+cjE1LCAmb2xkX3VuYXQpOwotCWlmIChpYTY0X3BzcihvbGRfcmVncyktPmJuKQotCQliYW5rID0gbXMtPnBtc2FfYmFuazFfZ3I7Ci0JZWxzZQotCQliYW5rID0gbXMtPnBtc2FfYmFuazBfZ3I7Ci0JY29weV9yZWcoJmJhbmtbMTYtMTZdLCBtcy0+cG1zYV9uYXRfYml0cywgJm9sZF9yZWdzLT5yMTYsICZvbGRfdW5hdCk7Ci0JY29weV9yZWcoJmJhbmtbMTctMTZdLCBtcy0+cG1zYV9uYXRfYml0cywgJm9sZF9yZWdzLT5yMTcsICZvbGRfdW5hdCk7Ci0JY29weV9yZWcoJmJhbmtbMTgtMTZdLCBtcy0+cG1zYV9uYXRfYml0cywgJm9sZF9yZWdzLT5yMTgsICZvbGRfdW5hdCk7Ci0JY29weV9yZWcoJmJhbmtbMTktMTZdLCBtcy0+cG1zYV9uYXRfYml0cywgJm9sZF9yZWdzLT5yMTksICZvbGRfdW5hdCk7Ci0JY29weV9yZWcoJmJhbmtbMjAtMTZdLCBtcy0+cG1zYV9uYXRfYml0cywgJm9sZF9yZWdzLT5yMjAsICZvbGRfdW5hdCk7Ci0JY29weV9yZWcoJmJhbmtbMjEtMTZdLCBtcy0+cG1zYV9uYXRfYml0cywgJm9sZF9yZWdzLT5yMjEsICZvbGRfdW5hdCk7Ci0JY29weV9yZWcoJmJhbmtbMjItMTZdLCBtcy0+cG1zYV9uYXRfYml0cywgJm9sZF9yZWdzLT5yMjIsICZvbGRfdW5hdCk7Ci0JY29weV9yZWcoJmJhbmtbMjMtMTZdLCBtcy0+cG1zYV9uYXRfYml0cywgJm9sZF9yZWdzLT5yMjMsICZvbGRfdW5hdCk7Ci0JY29weV9yZWcoJmJhbmtbMjQtMTZdLCBtcy0+cG1zYV9uYXRfYml0cywgJm9sZF9yZWdzLT5yMjQsICZvbGRfdW5hdCk7Ci0JY29weV9yZWcoJmJhbmtbMjUtMTZdLCBtcy0+cG1zYV9uYXRfYml0cywgJm9sZF9yZWdzLT5yMjUsICZvbGRfdW5hdCk7Ci0JY29weV9yZWcoJmJhbmtbMjYtMTZdLCBtcy0+cG1zYV9uYXRfYml0cywgJm9sZF9yZWdzLT5yMjYsICZvbGRfdW5hdCk7Ci0JY29weV9yZWcoJmJhbmtbMjctMTZdLCBtcy0+cG1zYV9uYXRfYml0cywgJm9sZF9yZWdzLT5yMjcsICZvbGRfdW5hdCk7Ci0JY29weV9yZWcoJmJhbmtbMjgtMTZdLCBtcy0+cG1zYV9uYXRfYml0cywgJm9sZF9yZWdzLT5yMjgsICZvbGRfdW5hdCk7Ci0JY29weV9yZWcoJmJhbmtbMjktMTZdLCBtcy0+cG1zYV9uYXRfYml0cywgJm9sZF9yZWdzLT5yMjksICZvbGRfdW5hdCk7Ci0JY29weV9yZWcoJmJhbmtbMzAtMTZdLCBtcy0+cG1zYV9uYXRfYml0cywgJm9sZF9yZWdzLT5yMzAsICZvbGRfdW5hdCk7Ci0JY29weV9yZWcoJmJhbmtbMzEtMTZdLCBtcy0+cG1zYV9uYXRfYml0cywgJm9sZF9yZWdzLT5yMzEsICZvbGRfdW5hdCk7CisJZmluaXNoX3B0X3JlZ3Mob2xkX3JlZ3MsIG1zLCAmb2xkX3VuYXQpOwogCiAJLyogTmV4dCBzdGFjayBhIHN0cnVjdCBzd2l0Y2hfc3RhY2suICBtY2FfYXNtLlMgYnVpbHQgYSBwYXJ0aWFsCiAJICogc3dpdGNoX3N0YWNrLCBjb3B5IGl0IGFuZCBmaWxsIGluIHRoZSBibGFua3MgdXNpbmcgcHRfcmVncyBhbmQKQEAgLTExNDEsNiArMTE0OSw4IEBACiBub19tb2Q6CiAJbXByaW50ayhLRVJOX0lORk8gImNwdSAlZCwgJXMgJXMsIG9yaWdpbmFsIHN0YWNrIG5vdCBtb2RpZmllZFxuIiwKIAkJCXNtcF9wcm9jZXNzb3JfaWQoKSwgdHlwZSwgbXNnKTsKKwlvbGRfdW5hdCA9IHJlZ3MtPmFyX3VuYXQ7CisJZmluaXNoX3B0X3JlZ3MocmVncywgbXMsICZvbGRfdW5hdCk7CiAJcmV0dXJuIHByZXZpb3VzX2N1cnJlbnQ7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvdW5hbGlnbmVkLmMgYi9hcmNoL2lhNjQva2VybmVsL3VuYWxpZ25lZC5jCmluZGV4IDZkYjA4NTkuLjc3NmRkNDAgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvdW5hbGlnbmVkLmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC91bmFsaWduZWQuYwpAQCAtNjAsNyArNjAsNiBAQAogICovCiBpbnQgbm9fdW5hbGlnbmVkX3dhcm5pbmc7CiBpbnQgdW5hbGlnbmVkX2R1bXBfc3RhY2s7Ci1zdGF0aWMgaW50IG5vcHJpbnRfd2FybmluZzsKIAogLyoKICAqIEZvciBNLXVuaXQ6CkBAIC0xMzU3LDkgKzEzNTYsOCBAQAogCQkJLyogd2F0Y2ggZm9yIGNvbW1hbmQgbmFtZXMgY29udGFpbmluZyAlcyAqLwogCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXMiLCBidWYpOwogCQl9IGVsc2UgewotCQkJaWYgKG5vX3VuYWxpZ25lZF93YXJuaW5nICYmICFub3ByaW50X3dhcm5pbmcpIHsKLQkJCQlub3ByaW50X3dhcm5pbmcgPSAxOwotCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzKCVkKSBlbmNvdW50ZXJlZCBhbiAiCisJCQlpZiAobm9fdW5hbGlnbmVkX3dhcm5pbmcpIHsKKwkJCQlwcmludGtfb25jZShLRVJOX1dBUk5JTkcgIiVzKCVkKSBlbmNvdW50ZXJlZCBhbiAiCiAJCQkJICAgICAgICJ1bmFsaWduZWQgZXhjZXB0aW9uIHdoaWNoIHJlcXVpcmVkXG4iCiAJCQkJICAgICAgICJrZXJuZWwgYXNzaXN0YW5jZSwgd2hpY2ggZGVncmFkZXMgIgogCQkJCSAgICAgICAidGhlIHBlcmZvcm1hbmNlIG9mIHRoZSBhcHBsaWNhdGlvbi5cbiIKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9tbS90bGIuYyBiL2FyY2gvaWE2NC9tbS90bGIuYwppbmRleCBmNDI2ZGM3Li5lZTA5ZDI2IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvbW0vdGxiLmMKKysrIGIvYXJjaC9pYTY0L21tL3RsYi5jCkBAIC0xMDAsMjQgKzEwMCwzNiBAQAogICogdGhpcyBwcmltaXRpdmUgaXQgY2FuIGJlIG1vdmVkIHVwIHRvIGEgc3BpbmFwaG9yZS5oIGhlYWRlci4KICAqLwogc3RydWN0IHNwaW5hcGhvcmUgewotCWF0b21pY190CWN1cjsKKwl1bnNpZ25lZCBsb25nCXRpY2tldDsKKwl1bnNpZ25lZCBsb25nCXNlcnZlOwogfTsKIAogc3RhdGljIGlubGluZSB2b2lkIHNwaW5hcGhvcmVfaW5pdChzdHJ1Y3Qgc3BpbmFwaG9yZSAqc3MsIGludCB2YWwpCiB7Ci0JYXRvbWljX3NldCgmc3MtPmN1ciwgdmFsKTsKKwlzcy0+dGlja2V0ID0gMDsKKwlzcy0+c2VydmUgPSB2YWw7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBkb3duX3NwaW4oc3RydWN0IHNwaW5hcGhvcmUgKnNzKQogewotCXdoaWxlICh1bmxpa2VseSghYXRvbWljX2FkZF91bmxlc3MoJnNzLT5jdXIsIC0xLCAwKSkpCi0JCXdoaWxlIChhdG9taWNfcmVhZCgmc3MtPmN1cikgPT0gMCkKLQkJCWNwdV9yZWxheCgpOworCXVuc2lnbmVkIGxvbmcgdCA9IGlhNjRfZmV0Y2hhZGQoMSwgJnNzLT50aWNrZXQsIGFjcSksIHNlcnZlOworCisJaWYgKHRpbWVfYmVmb3JlKHQsIHNzLT5zZXJ2ZSkpCisJCXJldHVybjsKKworCWlhNjRfaW52YWxhKCk7CisKKwlmb3IgKDs7KSB7CisJCWFzbSB2b2xhdGlsZSAoImxkNC5jLm5jICUwPVslMV0iIDogIj1yIihzZXJ2ZSkgOiAiciIoJnNzLT5zZXJ2ZSkgOiAibWVtb3J5Iik7CisJCWlmICh0aW1lX2JlZm9yZSh0LCBzZXJ2ZSkpCisJCQlyZXR1cm47CisJCWNwdV9yZWxheCgpOworCX0KIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHVwX3NwaW4oc3RydWN0IHNwaW5hcGhvcmUgKnNzKQogewotCWF0b21pY19hZGQoMSwgJnNzLT5jdXIpOworCWlhNjRfZmV0Y2hhZGQoMSwgJnNzLT5zZXJ2ZSwgcmVsKTsKIH0KIAogc3RhdGljIHN0cnVjdCBzcGluYXBob3JlIHB0Y2dfc2VtOwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L29wcm9maWxlL2JhY2t0cmFjZS5jIGIvYXJjaC9pYTY0L29wcm9maWxlL2JhY2t0cmFjZS5jCmluZGV4IGFkYjAxNTYuLjVjZGQ3ZTQgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9vcHJvZmlsZS9iYWNrdHJhY2UuYworKysgYi9hcmNoL2lhNjQvb3Byb2ZpbGUvYmFja3RyYWNlLmMKQEAgLTMyLDI0ICszMiw2IEBACiAJdTY0ICpwcmV2X3Bmc19sb2M7CS8qIHN0YXRlIGZvciBXQVIgZm9yIG9sZCBzcGlubG9jayBvb2wgY29kZSAqLwogfSBpYTY0X2JhY2t0cmFjZV90OwogCi0jaWYgKF9fR05VQ19fID09IDMgJiYgX19HTlVDX01JTk9SX18gPCAzKQotLyoKLSAqIFJldHVybnMgbm9uLXplcm8gaWYgdGhlIFBDIGlzIGluIHRoZSBzcGlubG9jayBjb250ZW50aW9uIG91dC1vZi1saW5lIGNvZGUKLSAqIHdpdGggbm9uLXN0YW5kYXJkIGNhbGxpbmcgc2VxdWVuY2UgKG9uIG9sZGVyIGNvbXBpbGVycykuCi0gKi8KLXN0YXRpYyBfX2lubGluZV9fIGludCBpbl9vbGRfb29sX3NwaW5sb2NrX2NvZGUodW5zaWduZWQgbG9uZyBwYykKLXsKLQlleHRlcm4gY29uc3QgY2hhciBpYTY0X3NwaW5sb2NrX2NvbnRlbnRpb25fcHJlM180W10gX19hdHRyaWJ1dGVfXyAoKHdlYWspKTsKLQlleHRlcm4gY29uc3QgY2hhciBpYTY0X3NwaW5sb2NrX2NvbnRlbnRpb25fcHJlM180X2VuZFtdIF9fYXR0cmlidXRlX18gKCh3ZWFrKSk7Ci0JdW5zaWduZWQgbG9uZyBzY19zdGFydCA9ICh1bnNpZ25lZCBsb25nKWlhNjRfc3BpbmxvY2tfY29udGVudGlvbl9wcmUzXzQ7Ci0JdW5zaWduZWQgbG9uZyBzY19lbmQgPSAodW5zaWduZWQgbG9uZylpYTY0X3NwaW5sb2NrX2NvbnRlbnRpb25fcHJlM180X2VuZDsKLQlyZXR1cm4gKHNjX3N0YXJ0ICYmIHNjX2VuZCAmJiBwYyA+PSBzY19zdGFydCAmJiBwYyA8IHNjX2VuZCk7Ci19Ci0jZWxzZQotLyogTmV3ZXIgc3BpbmxvY2sgY29kZSBkb2VzIGEgcHJvcGVyIGJyLmNhbGwgYW5kIHdvcmtzIGZpbmUgd2l0aCB0aGUgdW53aW5kZXIgKi8KLSNkZWZpbmUgaW5fb2xkX29vbF9zcGlubG9ja19jb2RlKHBjKQkwCi0jZW5kaWYKLQogLyogUmV0dXJucyBub24temVybyBpZiB0aGUgUEMgaXMgaW4gdGhlIEludGVycnVwdCBWZWN0b3IgVGFibGUgKi8KIHN0YXRpYyBfX2lubGluZV9fIGludCBpbl9pdnRfY29kZSh1bnNpZ25lZCBsb25nIHBjKQogewpAQCAtODAsNyArNjIsNyBAQAogCSAqLwogCWlmIChidC0+cHJldl9wZnNfbG9jICYmIGJ0LT5yZWdzICYmIGJ0LT5mcmFtZS5wZnNfbG9jID09IGJ0LT5wcmV2X3Bmc19sb2MpCiAJCWJ0LT5mcmFtZS5wZnNfbG9jID0gJmJ0LT5yZWdzLT5hcl9wZnM7Ci0JYnQtPnByZXZfcGZzX2xvYyA9IChpbl9vbGRfb29sX3NwaW5sb2NrX2NvZGUoYnQtPmZyYW1lLmlwKSA/IGJ0LT5mcmFtZS5wZnNfbG9jIDogTlVMTCk7CisJYnQtPnByZXZfcGZzX2xvYyA9IE5VTEw7CiAKIAlyZXR1cm4gdW53X3Vud2luZCgmYnQtPmZyYW1lKSA9PSAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L3BjaS9wY2kuYyBiL2FyY2gvaWE2NC9wY2kvcGNpLmMKaW5kZXggN2RlNzZkZC4uYzBmY2EyYyAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L3BjaS9wY2kuYworKysgYi9hcmNoL2lhNjQvcGNpL3BjaS5jCkBAIC01NiwxMCArNTYsMTMgQEAKIAlpZiAoKHNlZyB8IHJlZykgPD0gMjU1KSB7CiAJCWFkZHIgPSBQQ0lfU0FMX0FERFJFU1Moc2VnLCBidXMsIGRldmZuLCByZWcpOwogCQltb2RlID0gMDsKLQl9IGVsc2UgeworCX0gZWxzZSBpZiAoc2FsX3JldmlzaW9uID49IFNBTF9WRVJTSU9OX0NPREUoMywyKSkgewogCQlhZGRyID0gUENJX1NBTF9FWFRfQUREUkVTUyhzZWcsIGJ1cywgZGV2Zm4sIHJlZyk7CiAJCW1vZGUgPSAxOworCX0gZWxzZSB7CisJCXJldHVybiAtRUlOVkFMOwogCX0KKwogCXJlc3VsdCA9IGlhNjRfc2FsX3BjaV9jb25maWdfcmVhZChhZGRyLCBtb2RlLCBsZW4sICZkYXRhKTsKIAlpZiAocmVzdWx0ICE9IDApCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtODAsOSArODMsMTEgQEAKIAlpZiAoKHNlZyB8IHJlZykgPD0gMjU1KSB7CiAJCWFkZHIgPSBQQ0lfU0FMX0FERFJFU1Moc2VnLCBidXMsIGRldmZuLCByZWcpOwogCQltb2RlID0gMDsKLQl9IGVsc2UgeworCX0gZWxzZSBpZiAoc2FsX3JldmlzaW9uID49IFNBTF9WRVJTSU9OX0NPREUoMywyKSkgewogCQlhZGRyID0gUENJX1NBTF9FWFRfQUREUkVTUyhzZWcsIGJ1cywgZGV2Zm4sIHJlZyk7CiAJCW1vZGUgPSAxOworCX0gZWxzZSB7CisJCXJldHVybiAtRUlOVkFMOwogCX0KIAlyZXN1bHQgPSBpYTY0X3NhbF9wY2lfY29uZmlnX3dyaXRlKGFkZHIsIG1vZGUsIGxlbiwgdmFsdWUpOwogCWlmIChyZXN1bHQgIT0gMCkKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9zbi9rZXJuZWwvaW9fY29tbW9uLmMgYi9hcmNoL2lhNjQvc24va2VybmVsL2lvX2NvbW1vbi5jCmluZGV4IDI1ODMxYzQuLjMwOGU2NTkgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9zbi9rZXJuZWwvaW9fY29tbW9uLmMKKysrIGIvYXJjaC9pYTY0L3NuL2tlcm5lbC9pb19jb21tb24uYwpAQCAtMTE5LDcgKzExOSw2IEBACiAgKiBBZGRpdGlvbmFsbHkgbm90ZSB0aGF0IHRoZSBzdHJ1Y3Qgc25fZmx1c2hfZGV2aWNlX3dhciBhbHNvIGhhcyB0byBiZQogICogcmVtb3ZlZCBmcm9tIGFyY2gvaWE2NC9zbi9pbmNsdWRlL3h0YWxrL2h1YmRldi5oCiAgKi8KLXN0YXRpYyB1OCB3YXJfaW1wbGVtZW50ZWQgPSAwOwogCiBzdGF0aWMgczY0IHNuX2RldmljZV9maXh1cF93YXIodTY0IG5hc2lkLCB1NjQgd2lkZ2V0LCBpbnQgZGV2aWNlLAogCQkJICAgICAgIHN0cnVjdCBzbl9mbHVzaF9kZXZpY2VfY29tbW9uICpjb21tb24pCkBAIC0xMjgsMTEgKzEyNyw4IEBACiAJc3RydWN0IHNuX2ZsdXNoX2RldmljZV93YXIgKmRldl9lbnRyeTsKIAlzdHJ1Y3QgaWE2NF9zYWxfcmV0dmFsIGlzcnYgPSB7MCwwLDAsMH07CiAKLQlpZiAoIXdhcl9pbXBsZW1lbnRlZCkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJQUk9NIHZlcnNpb24gPCA0LjUwIC0tIGltcGxlbWVudGluZyBvbGQgIgotCQkgICAgICAgIlBST00gZmx1c2ggV0FSXG4iKTsKLQkJd2FyX2ltcGxlbWVudGVkID0gMTsKLQl9CisJcHJpbnRrX29uY2UoS0VSTl9XQVJOSU5HCisJCSJQUk9NIHZlcnNpb24gPCA0LjUwIC0tIGltcGxlbWVudGluZyBvbGQgUFJPTSBmbHVzaCBXQVJcbiIpOwogCiAJd2FyX2xpc3QgPSBremFsbG9jKERFVl9QRVJfV0lER0VUICogc2l6ZW9mKCp3YXJfbGlzdCksIEdGUF9LRVJORUwpOwogCUJVR19PTighd2FyX2xpc3QpOwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L3NuL2tlcm5lbC9zbjIvc25faHdwZXJmLmMgYi9hcmNoL2lhNjQvc24va2VybmVsL3NuMi9zbl9od3BlcmYuYwppbmRleCA0YzdlNzQ3Li41NWFjM2M0IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvc24va2VybmVsL3NuMi9zbl9od3BlcmYuYworKysgYi9hcmNoL2lhNjQvc24va2VybmVsL3NuMi9zbl9od3BlcmYuYwpAQCAtNzg2LDE3ICs3ODYsMTggQEAKIAkJYnJlYWs7CiAKIAljYXNlIFNOX0hXUEVSRl9HRVRfT0JKX05PREU6Ci0JCWlmIChhLnN6ICE9IHNpemVvZih1NjQpIHx8IGEuYXJnIDwgMCkgeworCQlpID0gYS5hcmc7CisJCWlmIChhLnN6ICE9IHNpemVvZih1NjQpIHx8IGkgPCAwKSB7CiAJCQlyID0gLUVJTlZBTDsKIAkJCWdvdG8gZXJyb3I7CiAJCX0KIAkJaWYgKChyID0gc25faHdwZXJmX2VudW1fb2JqZWN0cygmbm9iaiwgJm9ianMpKSA9PSAwKSB7Ci0JCQlpZiAoYS5hcmcgPj0gbm9iaikgeworCQkJaWYgKGkgPj0gbm9iaikgewogCQkJCXIgPSAtRUlOVkFMOwogCQkJCXZmcmVlKG9ianMpOwogCQkJCWdvdG8gZXJyb3I7CiAJCQl9Ci0JCQlpZiAob2Jqc1soaSA9IGEuYXJnKV0uaWQgIT0gYS5hcmcpIHsKKwkJCWlmIChvYmpzW2ldLmlkICE9IGEuYXJnKSB7CiAJCQkJZm9yIChpID0gMDsgaSA8IG5vYmo7IGkrKykgewogCQkJCQlpZiAob2Jqc1tpXS5pZCA9PSBhLmFyZykKIAkJCQkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL2luY2x1ZGUvYXNtL2lvLmggYi9hcmNoL20zMnIvaW5jbHVkZS9hc20vaW8uaAppbmRleCBkMDY5MzNiLi40MDEwZjFmIDEwMDY0NAotLS0gYS9hcmNoL20zMnIvaW5jbHVkZS9hc20vaW8uaAorKysgYi9hcmNoL20zMnIvaW5jbHVkZS9hc20vaW8uaApAQCAtMTYyLDYgKzE2MiwxMyBAQAogI2RlZmluZSBfX3Jhd193cml0ZXcgd3JpdGV3CiAjZGVmaW5lIF9fcmF3X3dyaXRlbCB3cml0ZWwKIAorI2RlZmluZSBpb3JlYWQ4IHJlYWQKKyNkZWZpbmUgaW9yZWFkMTYgcmVhZHcKKyNkZWZpbmUgaW9yZWFkMzIgcmVhZGwKKyNkZWZpbmUgaW93cml0ZTggd3JpdGViCisjZGVmaW5lIGlvd3JpdGUxNiB3cml0ZXcKKyNkZWZpbmUgaW93cml0ZTMyIHdyaXRlbAorCiAjZGVmaW5lIG1taW93YigpCiAKICNkZWZpbmUgZmx1c2hfd3JpdGVfYnVmZmVycygpIGRvIHsgfSB3aGlsZSAoMCkgIC8qIE0zMlJfRklYTUUgKi8KZGlmZiAtLWdpdCBhL2FyY2gvbTMyci9pbmNsdWRlL2FzbS9wYWdlLmggYi9hcmNoL20zMnIvaW5jbHVkZS9hc20vcGFnZS5oCmluZGV4IDExNzc3ZjcuLjcyNWVkZTggMTAwNjQ0Ci0tLSBhL2FyY2gvbTMyci9pbmNsdWRlL2FzbS9wYWdlLmgKKysrIGIvYXJjaC9tMzJyL2luY2x1ZGUvYXNtL3BhZ2UuaApAQCAtMSw5ICsxLDExIEBACiAjaWZuZGVmIF9BU01fTTMyUl9QQUdFX0gKICNkZWZpbmUgX0FTTV9NMzJSX1BBR0VfSAogCisjaW5jbHVkZSA8bGludXgvY29uc3QuaD4KKwogLyogUEFHRV9TSElGVCBkZXRlcm1pbmVzIHRoZSBwYWdlIHNpemUgKi8KICNkZWZpbmUgUEFHRV9TSElGVAkxMgotI2RlZmluZSBQQUdFX1NJWkUJKDFVTCA8PCBQQUdFX1NISUZUKQorI2RlZmluZSBQQUdFX1NJWkUJKF9BQygxLCBVTCkgPDwgUEFHRV9TSElGVCkKICNkZWZpbmUgUEFHRV9NQVNLCSh+KFBBR0VfU0laRS0xKSkKIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KZGlmZiAtLWdpdCBhL2FyY2gvbTMyci9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaCBiL2FyY2gvbTMyci9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaAppbmRleCAxYTk5N2ZjLi44Mzk3YzI0IDEwMDY0NAotLS0gYS9hcmNoL20zMnIvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgKKysrIGIvYXJjaC9tMzJyL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oCkBAIC0xNDAsOCArMTQwLDYgQEAKICNkZWZpbmUgS1NUS19FSVAodHNrKSAgKCh0c2spLT50aHJlYWQubHIpCiAjZGVmaW5lIEtTVEtfRVNQKHRzaykgICgodHNrKS0+dGhyZWFkLnNwKQogCi0jZGVmaW5lIFRIUkVBRF9TSVpFICgyKlBBR0VfU0laRSkKLQogI2RlZmluZSBjcHVfcmVsYXgoKQliYXJyaWVyKCkKIAogI2VuZGlmIC8qIF9BU01fTTMyUl9QUk9DRVNTT1JfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmggYi9hcmNoL20zMnIvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaAppbmRleCA3MTU3ODE1Li5lZDI0MGI2IDEwMDY0NAotLS0gYS9hcmNoL20zMnIvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaAorKysgYi9hcmNoL20zMnIvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaApAQCAtNTUsNiArNTUsOCBAQAogCiAjZGVmaW5lIFBSRUVNUFRfQUNUSVZFCQkweDEwMDAwMDAwCiAKKyNkZWZpbmUgVEhSRUFEX1NJWkUgKFBBR0VfU0laRSA8PCAxKQorCiAvKgogICogbWFjcm9zL2Z1bmN0aW9ucyBmb3IgZ2FpbmluZyBhY2Nlc3MgdG8gdGhlIHRocmVhZCBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUKICAqLwpAQCAtNzYsOCArNzgsNiBAQAogI2RlZmluZSBpbml0X3RocmVhZF9pbmZvCShpbml0X3RocmVhZF91bmlvbi50aHJlYWRfaW5mbykKICNkZWZpbmUgaW5pdF9zdGFjawkJKGluaXRfdGhyZWFkX3VuaW9uLnN0YWNrKQogCi0jZGVmaW5lIFRIUkVBRF9TSVpFICgyKlBBR0VfU0laRSkKLQogLyogaG93IHRvIGdldCB0aGUgdGhyZWFkIGluZm9ybWF0aW9uIHN0cnVjdCBmcm9tIEMgKi8KIHN0YXRpYyBpbmxpbmUgc3RydWN0IHRocmVhZF9pbmZvICpjdXJyZW50X3RocmVhZF9pbmZvKHZvaWQpCiB7CkBAIC0xMjUsMTcgKzEyNSw2IEBACiAJcmV0dXJuIHRpLT5mbGFncyA+PiBUSV9GTEFHX0ZBVUxUX0NPREVfU0hJRlQ7CiB9CiAKLSNlbHNlIC8qICFfX0FTU0VNQkxZX18gKi8KLQotI2RlZmluZSBUSFJFQURfU0laRQk4MTkyCi0KLS8qIGhvdyB0byBnZXQgdGhlIHRocmVhZCBpbmZvcm1hdGlvbiBzdHJ1Y3QgZnJvbSBBU00gKi8KLSNkZWZpbmUgR0VUX1RIUkVBRF9JTkZPKHJlZykJR0VUX1RIUkVBRF9JTkZPIHJlZwotCS5tYWNybyBHRVRfVEhSRUFEX0lORk8gcmVnCi0JbGRpCVxyZWcsICMtVEhSRUFEX1NJWkUKLQlhbmQJXHJlZywgc3AKLQkuZW5kbQotCiAjZW5kaWYKIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvbTMyci9rZXJuZWwvZW50cnkuUyBiL2FyY2gvbTMyci9rZXJuZWwvZW50cnkuUwppbmRleCA2MTJkMzViLi40MDM4Njk4IDEwMDY0NAotLS0gYS9hcmNoL20zMnIva2VybmVsL2VudHJ5LlMKKysrIGIvYXJjaC9tMzJyL2tlcm5lbC9lbnRyeS5TCkBAIC0xMTgsNiArMTE4LDEzIEBACiAjZGVmaW5lIHJlc3VtZV9rZXJuZWwJCXJlc3RvcmVfYWxsCiAjZW5kaWYKIAorLyogaG93IHRvIGdldCB0aGUgdGhyZWFkIGluZm9ybWF0aW9uIHN0cnVjdCBmcm9tIEFTTSAqLworI2RlZmluZSBHRVRfVEhSRUFEX0lORk8ocmVnKQlHRVRfVEhSRUFEX0lORk8gcmVnCisJLm1hY3JvIEdFVF9USFJFQURfSU5GTyByZWcKKwlsZGkJXHJlZywgIy1USFJFQURfU0laRQorCWFuZAlccmVnLCBzcAorCS5lbmRtCisKIEVOVFJZKHJldF9mcm9tX2ZvcmspCiAJcG9wCXIwCiAJYmwJc2NoZWR1bGVfdGFpbApkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL2tlcm5lbC9oZWFkLlMgYi9hcmNoL20zMnIva2VybmVsL2hlYWQuUwppbmRleCAwYTcxOTQ0Li5hNDY2NTJkIDEwMDY0NAotLS0gYS9hcmNoL20zMnIva2VybmVsL2hlYWQuUworKysgYi9hcmNoL20zMnIva2VybmVsL2hlYWQuUwpAQCAtMjY4LDEzICsyNjgsMTMgQEAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBTdGFjayBhcmVhCiAgKi8KLQkuc2VjdGlvbiAuc3BpCisJLnNlY3Rpb24gLmluaXQuZGF0YSwgImF3IgogCUFMSUdOCiAJLmdsb2JhbCBzcGlfc3RhY2tfdG9wCiAJLnplcm8JMTAyNAogc3BpX3N0YWNrX3RvcDoKIAotCS5zZWN0aW9uIC5zcHUKKwkuc2VjdGlvbiAuaW5pdC5kYXRhLCAiYXciCiAJQUxJR04KIAkuZ2xvYmFsIHNwdV9zdGFja190b3AKIAkuemVybwkxMDI0CmRpZmYgLS1naXQgYS9hcmNoL20zMnIva2VybmVsL20zMnJfa3N5bXMuYyBiL2FyY2gvbTMyci9rZXJuZWwvbTMycl9rc3ltcy5jCmluZGV4IDIyNjI0YjUuLjcwMDU3MDcgMTAwNjQ0Ci0tLSBhL2FyY2gvbTMyci9rZXJuZWwvbTMycl9rc3ltcy5jCisrKyBiL2FyY2gvbTMyci9rZXJuZWwvbTMycl9rc3ltcy5jCkBAIC0yMywxMiArMjMsNiBAQAogRVhQT1JUX1NZTUJPTChpb3VubWFwKTsKIEVYUE9SVF9TWU1CT0woa2VybmVsX3RocmVhZCk7CiAKLS8qIE5ldHdvcmtpbmcgaGVscGVyIHJvdXRpbmVzLiAqLwotLyogRGVsYXkgbG9vcHMgKi8KLUVYUE9SVF9TWU1CT0woX191ZGVsYXkpOwotRVhQT1JUX1NZTUJPTChfX2RlbGF5KTsKLUVYUE9SVF9TWU1CT0woX19jb25zdF91ZGVsYXkpOwotCiBFWFBPUlRfU1lNQk9MKHN0cm5jcHlfZnJvbV91c2VyKTsKIEVYUE9SVF9TWU1CT0woX19zdHJuY3B5X2Zyb21fdXNlcik7CiBFWFBPUlRfU1lNQk9MKGNsZWFyX3VzZXIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL2tlcm5lbC9zbXAuYyBiL2FyY2gvbTMyci9rZXJuZWwvc21wLmMKaW5kZXggMWI3NTk4ZS4uOGE4OGYxZiAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL2tlcm5lbC9zbXAuYworKysgYi9hcmNoL20zMnIva2VybmVsL3NtcC5jCkBAIC0xNyw2ICsxNyw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KZGlmZiAtLWdpdCBhL2FyY2gvbTMyci9rZXJuZWwvdGltZS5jIGIvYXJjaC9tMzJyL2tlcm5lbC90aW1lLmMKaW5kZXggYmE2MWM0Yy4uZTdmZWUwZjEgMTAwNjQ0Ci0tLSBhL2FyY2gvbTMyci9rZXJuZWwvdGltZS5jCisrKyBiL2FyY2gvbTMyci9rZXJuZWwvdGltZS5jCkBAIC0zMyw2ICszMywxNSBAQAogCiAjaW5jbHVkZSA8YXNtL2h3X2lycS5oPgogCisjaWYgZGVmaW5lZChDT05GSUdfUlRDX0RSVl9DTU9TKSB8fCBkZWZpbmVkKENPTkZJR19SVENfRFJWX0NNT1NfTU9EVUxFKQorLyogdGhpcyBuZWVkcyBhIGJldHRlciBob21lICovCitERUZJTkVfU1BJTkxPQ0socnRjX2xvY2spOworCisjaWZkZWYgQ09ORklHX1JUQ19EUlZfQ01PU19NT0RVTEUKK0VYUE9SVF9TWU1CT0wocnRjX2xvY2spOworI2VuZGlmCisjZW5kaWYgIC8qIHBjLXN0eWxlICdDTU9TJyBSVEMgc3VwcG9ydCAqLworCiAjaWZkZWYgQ09ORklHX1NNUAogZXh0ZXJuIHZvaWQgc21wX2xvY2FsX3RpbWVyX2ludGVycnVwdCh2b2lkKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL2tlcm5lbC90cmFwcy5jIGIvYXJjaC9tMzJyL2tlcm5lbC90cmFwcy5jCmluZGV4IDAzYjE0ZTUuLmZiZDEwOTAgMTAwNjQ0Ci0tLSBhL2FyY2gvbTMyci9rZXJuZWwvdHJhcHMuYworKysgYi9hcmNoL20zMnIva2VybmVsL3RyYXBzLmMKQEAgLTEwNCw4ICsxMDQsOCBAQAogCWVpdF92ZWN0b3JbMTg2XSA9ICh1bnNpZ25lZCBsb25nKXNtcF9jYWxsX2Z1bmN0aW9uX2ludGVycnVwdDsKIAllaXRfdmVjdG9yWzE4N10gPSAodW5zaWduZWQgbG9uZylzbXBfaXBpX3RpbWVyX2ludGVycnVwdDsKIAllaXRfdmVjdG9yWzE4OF0gPSAodW5zaWduZWQgbG9uZylzbXBfZmx1c2hfY2FjaGVfYWxsX2ludGVycnVwdDsKLQllaXRfdmVjdG9yWzE4OV0gPSAodW5zaWduZWQgbG9uZylzbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGVfaW50ZXJydXB0OwotCWVpdF92ZWN0b3JbMTkwXSA9IDA7CisJZWl0X3ZlY3RvclsxODldID0gMDsJLyogQ1BVX0JPT1RfSVBJICovCisJZWl0X3ZlY3RvclsxOTBdID0gKHVuc2lnbmVkIGxvbmcpc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlX2ludGVycnVwdDsKIAllaXRfdmVjdG9yWzE5MV0gPSAwOwogI2VuZGlmCiAJX2ZsdXNoX2NhY2hlX2NvcHliYWNrX2FsbCgpOwpkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL2tlcm5lbC92bWxpbnV4Lmxkcy5TIGIvYXJjaC9tMzJyL2tlcm5lbC92bWxpbnV4Lmxkcy5TCmluZGV4IGRlNWUyMWMuLjhjZWI2MTggMTAwNjQ0Ci0tLSBhL2FyY2gvbTMyci9rZXJuZWwvdm1saW51eC5sZHMuUworKysgYi9hcmNoL20zMnIva2VybmVsL3ZtbGludXgubGRzLlMKQEAgLTQsNiArNCw3IEBACiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvdm1saW51eC5sZHMuaD4KICNpbmNsdWRlIDxhc20vYWRkcnNwYWNlLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vdGhyZWFkX2luZm8uaD4KIAogT1VUUFVUX0FSQ0gobTMycikKICNpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTl9fKQpAQCAtNDAsODMgKzQxLDIyIEBACiAjZW5kaWYKICAgX2V0ZXh0ID0gLjsJCQkvKiBFbmQgb2YgdGV4dCBzZWN0aW9uICovCiAKLSAgLiA9IEFMSUdOKDE2KTsJCS8qIEV4Y2VwdGlvbiB0YWJsZSAqLwotICBfX3N0YXJ0X19fZXhfdGFibGUgPSAuOwotICBfX2V4X3RhYmxlIDogeyAqKF9fZXhfdGFibGUpIH0KLSAgX19zdG9wX19fZXhfdGFibGUgPSAuOwotCisgIEVYQ0VQVElPTl9UQUJMRSgxNikKICAgUk9EQVRBCi0KLSAgLyogd3JpdGVhYmxlICovCi0gIC5kYXRhIDogewkJCS8qIERhdGEgKi8KLQkqKC5zcHUpCi0JKiguc3BpKQotCURBVEFfREFUQQotCUNPTlNUUlVDVE9SUwotCX0KLQotICAuID0gQUxJR04oNDA5Nik7Ci0gIF9fbm9zYXZlX2JlZ2luID0gLjsKLSAgLmRhdGFfbm9zYXZlIDogeyAqKC5kYXRhLm5vc2F2ZSkgfQotICAuID0gQUxJR04oNDA5Nik7Ci0gIF9fbm9zYXZlX2VuZCA9IC47Ci0KLSAgLiA9IEFMSUdOKDMyKTsKLSAgLmRhdGEuY2FjaGVsaW5lX2FsaWduZWQgOiB7ICooLmRhdGEuY2FjaGVsaW5lX2FsaWduZWQpIH0KLQorICBSV19EQVRBX1NFQ1RJT04oMzIsIFBBR0VfU0laRSwgVEhSRUFEX1NJWkUpCiAgIF9lZGF0YSA9IC47CQkJLyogRW5kIG9mIGRhdGEgc2VjdGlvbiAqLwogCi0gIC4gPSBBTElHTig4MTkyKTsJCS8qIGluaXRfdGFzayAqLwotICAuZGF0YS5pbml0X3Rhc2sgOiB7ICooLmRhdGEuaW5pdF90YXNrKSB9Ci0KICAgLyogd2lsbCBiZSBmcmVlZCBhZnRlciBpbml0ICovCi0gIC4gPSBBTElHTig0MDk2KTsJCS8qIEluaXQgY29kZSBhbmQgZGF0YSAqLworICAuID0gQUxJR04oUEFHRV9TSVpFKTsJCS8qIEluaXQgY29kZSBhbmQgZGF0YSAqLwogICBfX2luaXRfYmVnaW4gPSAuOwotICAuaW5pdC50ZXh0IDogewotCV9zaW5pdHRleHQgPSAuOwotCUlOSVRfVEVYVAotCV9laW5pdHRleHQgPSAuOwotICB9Ci0gIC5pbml0LmRhdGEgOiB7IElOSVRfREFUQSB9Ci0gIC4gPSBBTElHTigxNik7Ci0gIF9fc2V0dXBfc3RhcnQgPSAuOwotICAuaW5pdC5zZXR1cCA6IHsgKiguaW5pdC5zZXR1cCkgfQotICBfX3NldHVwX2VuZCA9IC47Ci0gIF9faW5pdGNhbGxfc3RhcnQgPSAuOwotICAuaW5pdGNhbGwuaW5pdCA6IHsKLQlJTklUQ0FMTFMKLSAgfQotICBfX2luaXRjYWxsX2VuZCA9IC47Ci0gIF9fY29uX2luaXRjYWxsX3N0YXJ0ID0gLjsKLSAgLmNvbl9pbml0Y2FsbC5pbml0IDogeyAqKC5jb25faW5pdGNhbGwuaW5pdCkgfQotICBfX2Nvbl9pbml0Y2FsbF9lbmQgPSAuOwotICBTRUNVUklUWV9JTklUCi0gIC4gPSBBTElHTig0KTsKLSAgX19hbHRfaW5zdHJ1Y3Rpb25zID0gLjsKLSAgLmFsdGluc3RydWN0aW9ucyA6IHsgKiguYWx0aW5zdHJ1Y3Rpb25zKSB9Ci0gIF9fYWx0X2luc3RydWN0aW9uc19lbmQgPSAuOwotICAuYWx0aW5zdHJfcmVwbGFjZW1lbnQgOiB7ICooLmFsdGluc3RyX3JlcGxhY2VtZW50KSB9Ci0gIC8qIC5leGl0LnRleHQgaXMgZGlzY2FyZCBhdCBydW50aW1lLCBub3QgbGluayB0aW1lLCB0byBkZWFsIHdpdGggcmVmZXJlbmNlcwotICAgICBmcm9tIC5hbHRpbnN0cnVjdGlvbnMgYW5kIC5laF9mcmFtZSAqLwotICAuZXhpdC50ZXh0IDogeyBFWElUX1RFWFQgfQotICAuZXhpdC5kYXRhIDogeyBFWElUX0RBVEEgfQotCi0jaWZkZWYgQ09ORklHX0JMS19ERVZfSU5JVFJECi0gIC4gPSBBTElHTig0MDk2KTsKLSAgX19pbml0cmFtZnNfc3RhcnQgPSAuOwotICAuaW5pdC5yYW1mcyA6IHsgKiguaW5pdC5yYW1mcykgfQotICBfX2luaXRyYW1mc19lbmQgPSAuOwotI2VuZGlmCi0KLSAgUEVSQ1BVKDQwOTYpCi0gIC4gPSBBTElHTig0MDk2KTsKKyAgSU5JVF9URVhUX1NFQ1RJT04oUEFHRV9TSVpFKQorICBJTklUX0RBVEFfU0VDVElPTigxNikKKyAgUEVSQ1BVKFBBR0VfU0laRSkKKyAgLiA9IEFMSUdOKFBBR0VfU0laRSk7CiAgIF9faW5pdF9lbmQgPSAuOwogICAvKiBmcmVlZCBhZnRlciBpbml0IGVuZHMgaGVyZSAqLwogCi0gIF9fYnNzX3N0YXJ0ID0gLjsJCS8qIEJTUyAqLwotICAuYnNzIDogeyAqKC5ic3MpIH0KLSAgLiA9IEFMSUdOKDQpOwotICBfX2Jzc19zdG9wID0gLjsKKyAgQlNTX1NFQ1RJT04oMCwgMCwgNCkKIAogICBfZW5kID0gLiA7CiAKZGlmZiAtLWdpdCBhL2FyY2gvbTMyci9saWIvZGVsYXkuYyBiL2FyY2gvbTMyci9saWIvZGVsYXkuYwppbmRleCBjZWQ1NDliLi45NDBmNDgzIDEwMDY0NAotLS0gYS9hcmNoL20zMnIvbGliL2RlbGF5LmMKKysrIGIvYXJjaC9tMzJyL2xpYi9kZWxheS5jCkBAIC0xMjIsNCArMTIyLDggQEAKIHsKIAlfX2NvbnN0X3VkZWxheShuc2VjcyAqIDB4MDAwMDUpOyAgLyogMioqMzIgLyAxMDAwMDAwMDAwIChyb3VuZGVkIHVwKSAqLwogfQorCitFWFBPUlRfU1lNQk9MKF9fZGVsYXkpOworRVhQT1JUX1NZTUJPTChfX2NvbnN0X3VkZWxheSk7CitFWFBPUlRfU1lNQk9MKF9fdWRlbGF5KTsKIEVYUE9SVF9TWU1CT0woX19uZGVsYXkpOwpkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL21tL2Rpc2NvbnRpZy5jIGIvYXJjaC9tMzJyL21tL2Rpc2NvbnRpZy5jCmluZGV4IGI3YTc4YWQuLjVkMjg1OGYgMTAwNjQ0Ci0tLSBhL2FyY2gvbTMyci9tbS9kaXNjb250aWcuYworKysgYi9hcmNoL20zMnIvbW0vZGlzY29udGlnLmMKQEAgLTMyLDYgKzMyLDkgQEAKIH0gbWVtX3Byb2ZfdDsKIHN0YXRpYyBtZW1fcHJvZl90IG1lbV9wcm9mW01BWF9OVU1OT0RFU107CiAKK2V4dGVybiB1bnNpZ25lZCBsb25nIG1lbW9yeV9zdGFydDsKK2V4dGVybiB1bnNpZ25lZCBsb25nIG1lbW9yeV9lbmQ7CisKIHN0YXRpYyB2b2lkIF9faW5pdCBtZW1fcHJvZl9pbml0KHZvaWQpCiB7CiAJdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIGhvbGVzLCBmcmVlX3BmbjsKQEAgLTQyLDcgKzQ1LDcgQEAKIAkvKiBOb2RlIzAgU0RSQU0gKi8KIAltcCA9ICZtZW1fcHJvZlswXTsKIAltcC0+c3RhcnRfcGZuID0gUEZOX1VQKENPTkZJR19NRU1PUllfU1RBUlQpOwotCW1wLT5wYWdlcyA9IFBGTl9ET1dOKENPTkZJR19NRU1PUllfU0laRSk7CisJbXAtPnBhZ2VzID0gUEZOX0RPV04obWVtb3J5X2VuZCAtIG1lbW9yeV9zdGFydCk7CiAJbXAtPmhvbGVzID0gMDsKIAltcC0+ZnJlZV9wZm4gPSBQRk5fVVAoX19wYShfZW5kKSk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvbTMyci9tbS9tbXUuUyBiL2FyY2gvbTMyci9tbS9tbXUuUwppbmRleCA0OWE2ZDE2Li5lOTQ5MWE1IDEwMDY0NAotLS0gYS9hcmNoL20zMnIvbW0vbW11LlMKKysrIGIvYXJjaC9tMzJyL21tL21tdS5TCkBAIC0xNTAsOSArMTUwLDEzIEBACiAKIAk7IHBtZCA9IHBtZF9vZmZzZXQocGdkLCBhZGRyZXNzKTsKIAlsZAlyMywgQHIzCQkJOyByMzogcG1kIGRhdGEKLQlsZGkJcjIsICMtNDA5NgogCWJlcXoJcjMsIDNmCQkJOyBwbWRfbm9uZSgqcG1kKSA/CiAKKwlhbmQzCXIyLCByMywgIzB4ZmZmCisJYWRkMwlyMiwgcjIsICMtMzU1CQk7IF9LRVJOUEdfVEFCTEUoPTB4MTYzKQorCWJuZXoJcjIsIDNmCQkJOyBwbWRfYmFkKCpwbWQpID8KKwlsZGkJcjIsICMtNDA5NgorCiAJOyBwdGUgPSBwdGVfb2Zmc2V0KHBtZCwgYWRkcmVzcyk7CiAJYW5kCXIyLCByMwkJCTsgcjI6IHB0ZSBiYXNlIGFkZHIKIAlzcmwzCXIzLCByMCwgIzEwCkBAIC0yNjMsOSArMjY3LDkgQEAKIAlsZAlyMSwgQHIzCQkJOyByMTogcG1kCiAJYmVxeglyMSwgM2YJCQk7IHBtZF9ub25lKCpwbWQpID8KIDsKLQlhbmQzCXIxLCByMSwgIzB4ZWZmCi0JbGRpCXI0LCAjNjExCQk7IF9LRVJOUEdfVEFCTEUoPTYxMSkKLQlibmUJcjEsIHI0LCAzZgkJOyAhcG1kX2JhZCgqcG1kKSA/CisJYW5kMwlyMSwgcjEsICMweDNmZgorCWxkaQlyNCwgIzB4MTYzCQk7IF9LRVJOUEdfVEFCTEUoPTB4MTYzKQorCWJuZQlyMSwgcjQsIDNmCQk7IHBtZF9iYWQoKnBtZCkgPwogCiAJLmZpbGxpbnNuCiA0OgpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL0tjb25maWcgYi9hcmNoL202OGsvS2NvbmZpZwppbmRleCAyOWRkODQ4Li5lY2RjMTlhIDEwMDY0NAotLS0gYS9hcmNoL202OGsvS2NvbmZpZworKysgYi9hcmNoL202OGsvS2NvbmZpZwpAQCAtNTYxLDcgKzU2MSw3IEBACiAKIGNvbmZpZyBNVk1FMTQ3X1NDQwogCWJvb2wgIlNDQyBzdXBwb3J0IGZvciBNVk1FMTQ3IHNlcmlhbCBwb3J0cyIKLQlkZXBlbmRzIG9uIE1WTUUxNDcKKwlkZXBlbmRzIG9uIE1WTUUxNDcgJiYgQlJPS0VOCiAJaGVscAogCSAgVGhpcyBpcyB0aGUgZHJpdmVyIGZvciB0aGUgc2VyaWFsIHBvcnRzIG9uIHRoZSBNb3Rvcm9sYSBNVk1FMTQ3CiAJICBib2FyZHMuICBFdmVyeW9uZSB1c2luZyBvbmUgb2YgdGhlc2UgYm9hcmRzIHNob3VsZCBzYXkgWSBoZXJlLgpAQCAtNTc2LDE0ICs1NzYsMTQgQEAKIAogY29uZmlnIE1WTUUxNjJfU0NDCiAJYm9vbCAiU0NDIHN1cHBvcnQgZm9yIE1WTUUxNjIgc2VyaWFsIHBvcnRzIgotCWRlcGVuZHMgb24gTVZNRTE2eAorCWRlcGVuZHMgb24gTVZNRTE2eCAmJiBCUk9LRU4KIAloZWxwCiAJICBUaGlzIGlzIHRoZSBkcml2ZXIgZm9yIHRoZSBzZXJpYWwgcG9ydHMgb24gdGhlIE1vdG9yb2xhIE1WTUUxNjIgYW5kCiAJICAxNzIgYm9hcmRzLiAgRXZlcnlvbmUgdXNpbmcgb25lIG9mIHRoZXNlIGJvYXJkcyBzaG91bGQgc2F5IFkgaGVyZS4KIAogY29uZmlnIEJWTUU2MDAwX1NDQwogCWJvb2wgIlNDQyBzdXBwb3J0IGZvciBCVk1FNjAwMCBzZXJpYWwgcG9ydHMiCi0JZGVwZW5kcyBvbiBCVk1FNjAwMAorCWRlcGVuZHMgb24gQlZNRTYwMDAgJiYgQlJPS0VOCiAJaGVscAogCSAgVGhpcyBpcyB0aGUgZHJpdmVyIGZvciB0aGUgc2VyaWFsIHBvcnRzIG9uIHRoZSBCVk1FNDAwMCBhbmQgQlZNRTYwMDAKIAkgIGJvYXJkcyBmcm9tIEJWTSBMdGQuICBFdmVyeW9uZSB1c2luZyBvbmUgb2YgdGhlc2UgYm9hcmRzIHNob3VsZCBzYXkKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9oYXJkaXJxX21tLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vaGFyZGlycV9tbS5oCmluZGV4IDU1NGY2NWIuLjM5NGVlOTQgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9oYXJkaXJxX21tLmgKKysrIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2hhcmRpcnFfbW0uaApAQCAtMSw4ICsxLDE2IEBACiAjaWZuZGVmIF9fTTY4S19IQVJESVJRX0gKICNkZWZpbmUgX19NNjhLX0hBUkRJUlFfSAogCi0jZGVmaW5lIEhBUkRJUlFfQklUUwk4CisjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgorI2luY2x1ZGUgPGxpbnV4L2NhY2hlLmg+CiAKLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9oYXJkaXJxLmg+CisvKiBlbnRyeS5TIGlzIHNlbnNpdGl2ZSB0byB0aGUgb2Zmc2V0cyBvZiB0aGVzZSBmaWVsZHMgKi8KK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBpbnQgX19zb2Z0aXJxX3BlbmRpbmc7Cit9IF9fX19jYWNoZWxpbmVfYWxpZ25lZCBpcnFfY3B1c3RhdF90OworCisjaW5jbHVkZSA8bGludXgvaXJxX2NwdXN0YXQuaD4JLyogU3RhbmRhcmQgbWFwcGluZ3MgZm9yIGlycV9jcHVzdGF0X3QgYWJvdmUgKi8KKworI2RlZmluZSBIQVJESVJRX0JJVFMJOAogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvbTY4a25vbW11L2tlcm5lbC9hc20tb2Zmc2V0cy5jIGIvYXJjaC9tNjhrbm9tbXUva2VybmVsL2FzbS1vZmZzZXRzLmMKaW5kZXggNTk0ZWUwZS4uOWE4ODc2ZiAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrbm9tbXUva2VybmVsL2FzbS1vZmZzZXRzLmMKKysrIGIvYXJjaC9tNjhrbm9tbXUva2VybmVsL2FzbS1vZmZzZXRzLmMKQEAgLTQ1LDI1ICs0NSwyNSBAQAogCURFRklORShUSFJFQURfRlBTVEFURSwgb2Zmc2V0b2Yoc3RydWN0IHRocmVhZF9zdHJ1Y3QsIGZwc3RhdGUpKTsKIAogCS8qIG9mZnNldHMgaW50byB0aGUgcHRfcmVncyAqLwotCURFRklORShQVF9EMCwgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIGQwKSk7Ci0JREVGSU5FKFBUX09SSUdfRDAsIG9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCBvcmlnX2QwKSk7Ci0JREVGSU5FKFBUX0QxLCBvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgZDEpKTsKLQlERUZJTkUoUFRfRDIsIG9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCBkMikpOwotCURFRklORShQVF9EMywgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIGQzKSk7Ci0JREVGSU5FKFBUX0Q0LCBvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgZDQpKTsKLQlERUZJTkUoUFRfRDUsIG9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCBkNSkpOwotCURFRklORShQVF9BMCwgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIGEwKSk7Ci0JREVGSU5FKFBUX0ExLCBvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgYTEpKTsKLQlERUZJTkUoUFRfQTIsIG9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCBhMikpOwotCURFRklORShQVF9QQywgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIHBjKSk7Ci0JREVGSU5FKFBUX1NSLCBvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgc3IpKTsKKwlERUZJTkUoUFRfT0ZGX0QwLCBvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgZDApKTsKKwlERUZJTkUoUFRfT0ZGX09SSUdfRDAsIG9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCBvcmlnX2QwKSk7CisJREVGSU5FKFBUX09GRl9EMSwgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIGQxKSk7CisJREVGSU5FKFBUX09GRl9EMiwgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIGQyKSk7CisJREVGSU5FKFBUX09GRl9EMywgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIGQzKSk7CisJREVGSU5FKFBUX09GRl9ENCwgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIGQ0KSk7CisJREVGSU5FKFBUX09GRl9ENSwgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIGQ1KSk7CisJREVGSU5FKFBUX09GRl9BMCwgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIGEwKSk7CisJREVGSU5FKFBUX09GRl9BMSwgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIGExKSk7CisJREVGSU5FKFBUX09GRl9BMiwgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIGEyKSk7CisJREVGSU5FKFBUX09GRl9QQywgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIHBjKSk7CisJREVGSU5FKFBUX09GRl9TUiwgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIHNyKSk7CiAKICNpZmRlZiBDT05GSUdfQ09MREZJUkUKIAkvKiBiaXRmaWVsZHMgYXJlIGEgYml0IGRpZmZpY3VsdCAqLwotCURFRklORShQVF9GT1JNQVRWRUMsIG9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCBzcikgLSAyKTsKKwlERUZJTkUoUFRfT0ZGX0ZPUk1BVFZFQywgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIHNyKSAtIDIpOwogI2Vsc2UKIAkvKiBiaXRmaWVsZHMgYXJlIGEgYml0IGRpZmZpY3VsdCAqLwotCURFRklORShQVF9WRUNUT1IsIG9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCBwYykgKyA0KTsKKwlERUZJTkUoUFRfT0ZGX1ZFQ1RPUiwgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIHBjKSArIDQpOwogI2VuZGlmCiAKIAkvKiBzaWduYWwgZGVmaW5lcyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrbm9tbXUva2VybmVsL2VudHJ5LlMgYi9hcmNoL202OGtub21tdS9rZXJuZWwvZW50cnkuUwppbmRleCBmNTZmYWE1Li41NjA0M2FkIDEwMDY0NAotLS0gYS9hcmNoL202OGtub21tdS9rZXJuZWwvZW50cnkuUworKysgYi9hcmNoL202OGtub21tdS9rZXJuZWwvZW50cnkuUwpAQCAtNDYsNyArNDYsNyBAQAogRU5UUlkoYnVzZXJyKQogCVNBVkVfQUxMCiAJbW92ZXEJIy0xLCVkMAotCW1vdmVsCSVkMCwlc3BAKFBUX09SSUdfRDApCisJbW92ZWwJJWQwLCVzcEAoUFRfT0ZGX09SSUdfRDApCiAJbW92ZWwJJXNwLCVzcEAtIAkJLyogc3RhY2sgZnJhbWUgcG9pbnRlciBhcmd1bWVudCAqLwogCWpzcglidXNlcnJfYwogCWFkZHFsCSM0LCVzcApAQCAtNTUsNyArNTUsNyBAQAogRU5UUlkodHJhcCkKIAlTQVZFX0FMTAogCW1vdmVxCSMtMSwlZDAKLQltb3ZlbAklZDAsJXNwQChQVF9PUklHX0QwKQorCW1vdmVsCSVkMCwlc3BAKFBUX09GRl9PUklHX0QwKQogCW1vdmVsCSVzcCwlc3BALSAJCS8qIHN0YWNrIGZyYW1lIHBvaW50ZXIgYXJndW1lbnQgKi8KIAlqc3IJdHJhcF9jCiAJYWRkcWwJIzQsJXNwCkBAIC02Nyw3ICs2Nyw3IEBACiBFTlRSWShkYmdpbnRlcnJ1cHQpCiAJU0FWRV9BTEwKIAltb3ZlcQkjLTEsJWQwCi0JbW92ZWwJJWQwLCVzcEAoUFRfT1JJR19EMCkKKwltb3ZlbAklZDAsJXNwQChQVF9PRkZfT1JJR19EMCkKIAltb3ZlbAklc3AsJXNwQC0gCQkvKiBzdGFjayBmcmFtZSBwb2ludGVyIGFyZ3VtZW50ICovCiAJanNyCWRiZ2ludGVycnVwdF9jCiAJYWRkcWwJIzQsJXNwCmRpZmYgLS1naXQgYS9hcmNoL202OGtub21tdS9tbS9pbml0LmMgYi9hcmNoL202OGtub21tdS9tbS9pbml0LmMKaW5kZXggYjE3MDNjNi4uZjMyMzZkMCAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrbm9tbXUvbW0vaW5pdC5jCisrKyBiL2FyY2gvbTY4a25vbW11L21tL2luaXQuYwpAQCAtMTYyLDcgKzE2Miw3IEBACiAJCXRvdGFscmFtX3BhZ2VzKys7CiAJCXBhZ2VzKys7CiAJfQotCXByaW50ayAoS0VSTl9OT1RJQ0UgIkZyZWVpbmcgaW5pdHJkIG1lbW9yeTogJWRrIGZyZWVkXG4iLCBwYWdlcyk7CisJcHJpbnRrIChLRVJOX05PVElDRSAiRnJlZWluZyBpbml0cmQgbWVtb3J5OiAlZGsgZnJlZWRcbiIsIHBhZ2VzICogKFBBR0VfU0laRSAvIDEwMjQpKTsKIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9hcmNoL202OGtub21tdS9wbGF0Zm9ybS81MjA2ZS9jb25maWcuYyBiL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzUyMDZlL2NvbmZpZy5jCmluZGV4IDBmNDFiYTguLjk0MjM5NzkgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzUyMDZlL2NvbmZpZy5jCisrKyBiL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzUyMDZlL2NvbmZpZy5jCkBAIC0xNyw3ICsxNyw2IEBACiAjaW5jbHVkZSA8YXNtL21jZnNpbS5oPgogI2luY2x1ZGUgPGFzbS9tY2Z1YXJ0Lmg+CiAjaW5jbHVkZSA8YXNtL21jZmRtYS5oPgotI2luY2x1ZGUgPGFzbS9tY2Z1YXJ0Lmg+CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKZGlmZiAtLWdpdCBhL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzY4MzI4L2VudHJ5LlMgYi9hcmNoL202OGtub21tdS9wbGF0Zm9ybS82ODMyOC9lbnRyeS5TCmluZGV4IGIxYWVmNzIuLjlkODBkMmMgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzY4MzI4L2VudHJ5LlMKKysrIGIvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNjgzMjgvZW50cnkuUwpAQCAtMzksMTcgKzM5LDE3IEBACiAuZ2xvYmwgaW50aGFuZGxlcjcKIAogYmFkc3lzOgotCW1vdmVsCSMtRU5PU1lTLCVzcEAoUFRfRDApCisJbW92ZWwJIy1FTk9TWVMsJXNwQChQVF9PRkZfRDApCiAJanJhCXJldF9mcm9tX2V4Y2VwdGlvbgogCiBkb190cmFjZToKLQltb3ZlbAkjLUVOT1NZUywlc3BAKFBUX0QwKQkvKiBuZWVkZWQgZm9yIHN0cmFjZSovCisJbW92ZWwJIy1FTk9TWVMsJXNwQChQVF9PRkZfRDApCS8qIG5lZWRlZCBmb3Igc3RyYWNlKi8KIAlzdWJxbAkjNCwlc3AKIAlTQVZFX1NXSVRDSF9TVEFDSwogCWpic3IJc3lzY2FsbF90cmFjZQogCVJFU1RPUkVfU1dJVENIX1NUQUNLCiAJYWRkcWwJIzQsJXNwCi0JbW92ZWwJJXNwQChQVF9PUklHX0QwKSwlZDEKKwltb3ZlbAklc3BAKFBUX09GRl9PUklHX0QwKSwlZDEKIAltb3ZlbAkjLUVOT1NZUywlZDAKIAljbXBsCSNOUl9zeXNjYWxscywlZDEKIAlqY2MJMWYKQEAgLTU3LDcgKzU3LDcgQEAKIAlsZWEJc3lzX2NhbGxfdGFibGUsICVhMAogCWpic3IJJWEwQCglZDEpCiAKLTE6CW1vdmVsCSVkMCwlc3BAKFBUX0QwKQkJLyogc2F2ZSB0aGUgcmV0dXJuIHZhbHVlICovCisxOgltb3ZlbAklZDAsJXNwQChQVF9PRkZfRDApCQkvKiBzYXZlIHRoZSByZXR1cm4gdmFsdWUgKi8KIAlzdWJxbAkjNCwlc3AJCQkvKiBkdW1teSByZXR1cm4gYWRkcmVzcyAqLwogCVNBVkVfU1dJVENIX1NUQUNLCiAJamJzcglzeXNjYWxsX3RyYWNlCkBAIC03NSw3ICs3NSw3IEBACiAJamJzciAgICBzZXRfZXNwMAogCWFkZHFsICAgIzQsJXNwCiAKLQltb3ZlbAklc3BAKFBUX09SSUdfRDApLCVkMAorCW1vdmVsCSVzcEAoUFRfT0ZGX09SSUdfRDApLCVkMAogCiAJbW92ZWwJJXNwLCVkMQkJCS8qIGdldCB0aHJlYWRfaW5mbyBwb2ludGVyICovCiAJYW5kbAkjLVRIUkVBRF9TSVpFLCVkMQpAQCAtODgsMTAgKzg4LDEwIEBACiAJbGVhCXN5c19jYWxsX3RhYmxlLCVhMAogCW1vdmVsCSVhMEAoJWQwKSwgJWEwCiAJamJzcgklYTBACi0JbW92ZWwJJWQwLCVzcEAoUFRfRDApCQkvKiBzYXZlIHRoZSByZXR1cm4gdmFsdWUqLworCW1vdmVsCSVkMCwlc3BAKFBUX09GRl9EMCkJCS8qIHNhdmUgdGhlIHJldHVybiB2YWx1ZSovCiAKIHJldF9mcm9tX2V4Y2VwdGlvbjoKLQlidHN0CSM1LCVzcEAoUFRfU1IpCQkvKiBjaGVjayBpZiByZXR1cm5pbmcgdG8ga2VybmVsKi8KKwlidHN0CSM1LCVzcEAoUFRfT0ZGX1NSKQkJLyogY2hlY2sgaWYgcmV0dXJuaW5nIHRvIGtlcm5lbCovCiAJamVxCUx1c2VyX3JldHVybgkJLyogaWYgc28sIHNraXAgcmVzY2hlZCwgc2lnbmFscyovCiAKIExrZXJuZWxfcmV0dXJuOgpAQCAtMTMzLDcgKzEzMyw3IEBACiAgKi8KIGludGhhbmRsZXIxOgogCVNBVkVfQUxMCi0JbW92ZXcJJXNwQChQVF9WRUNUT1IpLCAlZDAKKwltb3Zldwklc3BAKFBUX09GRl9WRUNUT1IpLCAlZDAKIAlhbmQJIzB4M2ZmLCAlZDAKIAogCW1vdmVsCSVzcCwlc3BALQpAQCAtMTQ0LDcgKzE0NCw3IEBACiAKIGludGhhbmRsZXIyOgogCVNBVkVfQUxMCi0JbW92ZXcJJXNwQChQVF9WRUNUT1IpLCAlZDAKKwltb3Zldwklc3BAKFBUX09GRl9WRUNUT1IpLCAlZDAKIAlhbmQJIzB4M2ZmLCAlZDAKIAogCW1vdmVsCSVzcCwlc3BALQpAQCAtMTU1LDcgKzE1NSw3IEBACiAKIGludGhhbmRsZXIzOgogCVNBVkVfQUxMCi0JbW92ZXcJJXNwQChQVF9WRUNUT1IpLCAlZDAKKwltb3Zldwklc3BAKFBUX09GRl9WRUNUT1IpLCAlZDAKIAlhbmQJIzB4M2ZmLCAlZDAKIAogCW1vdmVsCSVzcCwlc3BALQpAQCAtMTY2LDcgKzE2Niw3IEBACiAKIGludGhhbmRsZXI0OgogCVNBVkVfQUxMCi0JbW92ZXcJJXNwQChQVF9WRUNUT1IpLCAlZDAKKwltb3Zldwklc3BAKFBUX09GRl9WRUNUT1IpLCAlZDAKIAlhbmQJIzB4M2ZmLCAlZDAKIAogCW1vdmVsCSVzcCwlc3BALQpAQCAtMTc3LDcgKzE3Nyw3IEBACiAKIGludGhhbmRsZXI1OgogCVNBVkVfQUxMCi0JbW92ZXcJJXNwQChQVF9WRUNUT1IpLCAlZDAKKwltb3Zldwklc3BAKFBUX09GRl9WRUNUT1IpLCAlZDAKIAlhbmQJIzB4M2ZmLCAlZDAKIAogCW1vdmVsCSVzcCwlc3BALQpAQCAtMTg4LDcgKzE4OCw3IEBACiAKIGludGhhbmRsZXI2OgogCVNBVkVfQUxMCi0JbW92ZXcJJXNwQChQVF9WRUNUT1IpLCAlZDAKKwltb3Zldwklc3BAKFBUX09GRl9WRUNUT1IpLCAlZDAKIAlhbmQJIzB4M2ZmLCAlZDAKIAogCW1vdmVsCSVzcCwlc3BALQpAQCAtMTk5LDcgKzE5OSw3IEBACiAKIGludGhhbmRsZXI3OgogCVNBVkVfQUxMCi0JbW92ZXcJJXNwQChQVF9WRUNUT1IpLCAlZDAKKwltb3Zldwklc3BAKFBUX09GRl9WRUNUT1IpLCAlZDAKIAlhbmQJIzB4M2ZmLCAlZDAKIAogCW1vdmVsCSVzcCwlc3BALQpAQCAtMjEwLDcgKzIxMCw3IEBACiAKIGludGhhbmRsZXI6CiAJU0FWRV9BTEwKLQltb3Zldwklc3BAKFBUX1ZFQ1RPUiksICVkMAorCW1vdmV3CSVzcEAoUFRfT0ZGX1ZFQ1RPUiksICVkMAogCWFuZAkjMHgzZmYsICVkMAogCiAJbW92ZWwJJXNwLCVzcEAtCkBAIC0yMjQsNyArMjI0LDcgQEAKIDI6CiAJUkVTVE9SRV9BTEwKIDE6Ci0JbW92ZWIJJXNwQChQVF9TUiksICVkMAorCW1vdmViCSVzcEAoUFRfT0ZGX1NSKSwgJWQwCiAJYW5kCSM3LCAlZDAKIAlqaGkJMmIKIApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNjgzNjAvZW50cnkuUyBiL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzY4MzYwL2VudHJ5LlMKaW5kZXggNTVkZmVmZS4uNmQzNDYwYSAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNjgzNjAvZW50cnkuUworKysgYi9hcmNoL202OGtub21tdS9wbGF0Zm9ybS82ODM2MC9lbnRyeS5TCkBAIC0zNSwxNyArMzUsMTcgQEAKIC5nbG9ibCBpbnRoYW5kbGVyCiAKIGJhZHN5czoKLQltb3ZlbAkjLUVOT1NZUywlc3BAKFBUX0QwKQorCW1vdmVsCSMtRU5PU1lTLCVzcEAoUFRfT0ZGX0QwKQogCWpyYQlyZXRfZnJvbV9leGNlcHRpb24KIAogZG9fdHJhY2U6Ci0JbW92ZWwJIy1FTk9TWVMsJXNwQChQVF9EMCkJLyogbmVlZGVkIGZvciBzdHJhY2UqLworCW1vdmVsCSMtRU5PU1lTLCVzcEAoUFRfT0ZGX0QwKSAvKiBuZWVkZWQgZm9yIHN0cmFjZSovCiAJc3VicWwJIzQsJXNwCiAJU0FWRV9TV0lUQ0hfU1RBQ0sKIAlqYnNyCXN5c2NhbGxfdHJhY2UKIAlSRVNUT1JFX1NXSVRDSF9TVEFDSwogCWFkZHFsCSM0LCVzcAotCW1vdmVsCSVzcEAoUFRfT1JJR19EMCksJWQxCisJbW92ZWwJJXNwQChQVF9PRkZfT1JJR19EMCksJWQxCiAJbW92ZWwJIy1FTk9TWVMsJWQwCiAJY21wbAkjTlJfc3lzY2FsbHMsJWQxCiAJamNjCTFmCkBAIC01Myw3ICs1Myw3IEBACiAJbGVhCXN5c19jYWxsX3RhYmxlLCAlYTAKIAlqYnNyCSVhMEAoJWQxKQogCi0xOgltb3ZlbAklZDAsJXNwQChQVF9EMCkJCS8qIHNhdmUgdGhlIHJldHVybiB2YWx1ZSAqLworMToJbW92ZWwJJWQwLCVzcEAoUFRfT0ZGX0QwKQkvKiBzYXZlIHRoZSByZXR1cm4gdmFsdWUgKi8KIAlzdWJxbAkjNCwlc3AJCQkvKiBkdW1teSByZXR1cm4gYWRkcmVzcyAqLwogCVNBVkVfU1dJVENIX1NUQUNLCiAJamJzcglzeXNjYWxsX3RyYWNlCkBAIC03OSwxMCArNzksMTAgQEAKIAlsZWEJc3lzX2NhbGxfdGFibGUsJWEwCiAJbW92ZWwJJWEwQCglZDApLCAlYTAKIAlqYnNyCSVhMEAKLQltb3ZlbAklZDAsJXNwQChQVF9EMCkJCS8qIHNhdmUgdGhlIHJldHVybiB2YWx1ZSovCisJbW92ZWwJJWQwLCVzcEAoUFRfT0ZGX0QwKQkvKiBzYXZlIHRoZSByZXR1cm4gdmFsdWUqLwogCiByZXRfZnJvbV9leGNlcHRpb246Ci0JYnRzdAkjNSwlc3BAKFBUX1NSKQkJLyogY2hlY2sgaWYgcmV0dXJuaW5nIHRvIGtlcm5lbCovCisJYnRzdAkjNSwlc3BAKFBUX09GRl9TUikJLyogY2hlY2sgaWYgcmV0dXJuaW5nIHRvIGtlcm5lbCovCiAJamVxCUx1c2VyX3JldHVybgkJLyogaWYgc28sIHNraXAgcmVzY2hlZCwgc2lnbmFscyovCiAKIExrZXJuZWxfcmV0dXJuOgpAQCAtMTI0LDcgKzEyNCw3IEBACiAgKi8KIGludGhhbmRsZXI6CiAJU0FWRV9BTEwKLQltb3Zldwklc3BAKFBUX1ZFQ1RPUiksICVkMAorCW1vdmV3CSVzcEAoUFRfT0ZGX1ZFQ1RPUiksICVkMAogCWFuZC5sCSMweDNmZiwgJWQwCiAJbHNyLmwgICAjMHgwMiwgICVkMAogCkBAIC0xMzksNyArMTM5LDcgQEAKIDI6CiAJUkVTVE9SRV9BTEwKIDE6Ci0JbW92ZWIJJXNwQChQVF9TUiksICVkMAorCW1vdmViCSVzcEAoUFRfT0ZGX1NSKSwgJWQwCiAJYW5kCSM3LCAlZDAKIAlqaGkJMmIKIAkvKiBjaGVjayBpZiB3ZSBuZWVkIHRvIGRvIHNvZnR3YXJlIGludGVycnVwdHMgKi8KZGlmZiAtLWdpdCBhL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtL2NvbGRmaXJlL2VudHJ5LlMgYi9hcmNoL202OGtub21tdS9wbGF0Zm9ybS9jb2xkZmlyZS9lbnRyeS5TCmluZGV4IDNiNDcxYzAuLmRkN2Q1OTEgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtL2NvbGRmaXJlL2VudHJ5LlMKKysrIGIvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vY29sZGZpcmUvZW50cnkuUwpAQCAtODEsMTEgKzgxLDExIEBACiAKIAltb3ZlbAklZDMsJWEwCiAJamJzcgklYTBACi0JbW92ZWwJJWQwLCVzcEAoUFRfRDApCQkvKiBzYXZlIHRoZSByZXR1cm4gdmFsdWUgKi8KKwltb3ZlbAklZDAsJXNwQChQVF9PRkZfRDApCS8qIHNhdmUgdGhlIHJldHVybiB2YWx1ZSAqLwogCWpyYQlyZXRfZnJvbV9leGNlcHRpb24KIDE6Ci0JbW92ZWwJIy1FTk9TWVMsJWQyCQkvKiBzdHJhY2UgbmVlZHMgLUVOT1NZUyBpbiBQVF9EMCAqLwotCW1vdmVsCSVkMixQVF9EMCglc3ApCQkvKiBvbiBzeXNjYWxsIGVudHJ5ICovCisJbW92ZWwJIy1FTk9TWVMsJWQyCQkvKiBzdHJhY2UgbmVlZHMgLUVOT1NZUyBpbiBQVF9PRkZfRDAgKi8KKwltb3ZlbAklZDIsUFRfT0ZGX0QwKCVzcCkJLyogb24gc3lzY2FsbCBlbnRyeSAqLwogCXN1YnFsCSM0LCVzcAogCVNBVkVfU1dJVENIX1NUQUNLCiAJamJzcglzeXNjYWxsX3RyYWNlCkBAIC05Myw3ICs5Myw3IEBACiAJYWRkcWwJIzQsJXNwCiAJbW92ZWwJJWQzLCVhMAogCWpic3IJJWEwQAotCW1vdmVsCSVkMCwlc3BAKFBUX0QwKQkJLyogc2F2ZSB0aGUgcmV0dXJuIHZhbHVlICovCisJbW92ZWwJJWQwLCVzcEAoUFRfT0ZGX0QwKQkJLyogc2F2ZSB0aGUgcmV0dXJuIHZhbHVlICovCiAJc3VicWwJIzQsJXNwCQkJLyogZHVtbXkgcmV0dXJuIGFkZHJlc3MgKi8KIAlTQVZFX1NXSVRDSF9TVEFDSwogCWpic3IJc3lzY2FsbF90cmFjZQpAQCAtMTA0LDcgKzEwNCw3IEBACiAKIHJldF9mcm9tX2V4Y2VwdGlvbjoKIAltb3ZlCSMweDI3MDAsJXNyCQkvKiBkaXNhYmxlIGludHJzICovCi0JYnRzdAkjNSwlc3BAKFBUX1NSKQkJLyogY2hlY2sgaWYgcmV0dXJuaW5nIHRvIGtlcm5lbCAqLworCWJ0c3QJIzUsJXNwQChQVF9PRkZfU1IpCS8qIGNoZWNrIGlmIHJldHVybmluZyB0byBrZXJuZWwgKi8KIAlqZXEJTHVzZXJfcmV0dXJuCQkvKiBpZiBzbywgc2tpcCByZXNjaGVkLCBzaWduYWxzICovCiAKICNpZmRlZiBDT05GSUdfUFJFRU1QVApAQCAtMTQyLDggKzE0Miw4IEBACiBMcmV0dXJuOgogCW1vdmUJIzB4MjcwMCwlc3IJCS8qIGRpc2FibGUgaW50cnMgKi8KIAltb3ZlbAlzd191c3AsJWEwCQkvKiBnZXQgdXNwICovCi0JbW92ZWwJJXNwQChQVF9QQyksJWEwQC0JLyogY29weSBleGNlcHRpb24gcHJvZ3JhbSBjb3VudGVyICovCi0JbW92ZWwJJXNwQChQVF9GT1JNQVRWRUMpLCVhMEAtLyogY29weSBleGNlcHRpb24gZm9ybWF0L3ZlY3Rvci9zciAqLworCW1vdmVsCSVzcEAoUFRfT0ZGX1BDKSwlYTBALQkvKiBjb3B5IGV4Y2VwdGlvbiBwcm9ncmFtIGNvdW50ZXIgKi8KKwltb3ZlbAklc3BAKFBUX09GRl9GT1JNQVRWRUMpLCVhMEAtIC8qIGNvcHkgZXhjZXB0aW9uIGZvcm1hdC92ZWN0b3Ivc3IgKi8KIAltb3ZlbWwJJXNwQCwlZDEtJWQ1LyVhMC0lYTIKIAlsZWEJJXNwQCgzMiksJXNwCQkvKiBzcGFjZSBmb3IgOCByZWdzICovCiAJbW92ZWwJJXNwQCssJWQwCkBAIC0xODEsOSArMTgxLDkgQEAKIEVOVFJZKGludGhhbmRsZXIpCiAJU0FWRV9BTEwKIAltb3ZlcQkjLTEsJWQwCi0JbW92ZWwJJWQwLCVzcEAoUFRfT1JJR19EMCkKKwltb3ZlbAklZDAsJXNwQChQVF9PRkZfT1JJR19EMCkKIAotCW1vdmV3CSVzcEAoUFRfRk9STUFUVkVDKSwlZDAJLyogcHV0IGV4Y2VwdGlvbiAjIGluIGQwICovCisJbW92ZXcJJXNwQChQVF9PRkZfRk9STUFUVkVDKSwlZDAgLyogcHV0IGV4Y2VwdGlvbiAjIGluIGQwICovCiAJYW5kbAkjMHgwM2ZjLCVkMAkJLyogbWFzayBvdXQgdmVjdG9yIG9ubHkgKi8KIAogCW1vdmVsCSVzcCwlc3BALQkJLyogcHVzaCByZWdzIGFyZyAqLwpAQCAtMjAzLDcgKzIwMyw3IEBACiBFTlRSWShmYXN0aGFuZGxlcikKIAlTQVZFX0xPQ0FMCiAKLQltb3Zldwklc3BAKFBUX0ZPUk1BVFZFQyksJWQwCisJbW92ZXcJJXNwQChQVF9PRkZfRk9STUFUVkVDKSwlZDAKIAlhbmRsCSMweDAzZmMsJWQwCQkvKiBtYXNrIG91dCB2ZWN0b3Igb25seSAqLwogCiAJbW92ZWwJJXNwLCVzcEAtCQkvKiBwdXNoIHJlZ3MgYXJnICovCmRpZmYgLS1naXQgYS9hcmNoL21pY3JvYmxhemUva2VybmVsL2VudHJ5LlMgYi9hcmNoL21pY3JvYmxhemUva2VybmVsL2VudHJ5LlMKaW5kZXggYWNjMWYwNS4uZTNlY2IzNiAxMDA2NDQKLS0tIGEvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9lbnRyeS5TCisrKyBiL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvZW50cnkuUwpAQCAtNTkyLDYgKzU5Miw4IEBACiAJbm9wCiAJbWZzCXI3LCByZnNyOwkJLyogc2F2ZSBGU1IgKi8KIAlub3AKKwltdHMJcmZzciwgcjA7CS8qIENsZWFyIHN0aWNreSBmc3IgKi8KKwlub3AKIAlsYQlyMTIsIHIwLCBmdWxsX2V4Y2VwdGlvbgogCXNldF92bXM7CiAJcnRiZAlyMTIsIDA7CmRpZmYgLS1naXQgYS9hcmNoL21pY3JvYmxhemUva2VybmVsL2h3X2V4Y2VwdGlvbl9oYW5kbGVyLlMgYi9hcmNoL21pY3JvYmxhemUva2VybmVsL2h3X2V4Y2VwdGlvbl9oYW5kbGVyLlMKaW5kZXggNmIwMjg4ZS4uMmI4NmMwMyAxMDA2NDQKLS0tIGEvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9od19leGNlcHRpb25faGFuZGxlci5TCisrKyBiL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvaHdfZXhjZXB0aW9uX2hhbmRsZXIuUwpAQCAtMzg0LDcgKzM4NCw3IEBACiAJYWRkawlyOCwgcjE3LCByMDsgLyogTG9hZCBleGNlcHRpb24gYWRkcmVzcyAqLwogCWJyYWxpZAlyMTUsIGZ1bGxfZXhjZXB0aW9uOyAvKiBCcmFuY2ggdG8gdGhlIGhhbmRsZXIgKi8KIAlub3A7Ci0JbXRzCXIwLCByZnNyOwkvKiBDbGVhciBzdGlja3kgZnNyICovCisJbXRzCXJmc3IsIHIwOwkvKiBDbGVhciBzdGlja3kgZnNyICovCiAJbm9wCiAKIAkvKgpkaWZmIC0tZ2l0IGEvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9wcm9jZXNzLmMgYi9hcmNoL21pY3JvYmxhemUva2VybmVsL3Byb2Nlc3MuYwppbmRleCA0MjAxYzc0Li5jNTkyZDQ3IDEwMDY0NAotLS0gYS9hcmNoL21pY3JvYmxhemUva2VybmVsL3Byb2Nlc3MuYworKysgYi9hcmNoL21pY3JvYmxhemUva2VybmVsL3Byb2Nlc3MuYwpAQCAtMjM1LDcgKzIzNSw5IEBACiAJcmVncy0+cGMgPSBwYzsKIAlyZWdzLT5yMSA9IHVzcDsKIAlyZWdzLT5wdF9tb2RlID0gMDsKKyNpZmRlZiBDT05GSUdfTU1VCiAJcmVncy0+bXNyIHw9IE1TUl9VTVM7CisjZW5kaWYKIH0KIAogI2lmZGVmIENPTkZJR19NTVUKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9kYmRtYS5jIGIvYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL2RiZG1hLmMKaW5kZXggM2FiNmQ4MC4uMTljMWM4MiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL2RiZG1hLmMKKysrIGIvYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL2RiZG1hLmMKQEAgLTE3NSw3ICsxNzUsNyBAQAogI2RlZmluZSBEQkRFVl9UQUJfU0laRQlBUlJBWV9TSVpFKGRiZGV2X3RhYikKIAogI2lmZGVmIENPTkZJR19QTQotc3RhdGljIHUzMiBhdTF4eHhfZGJkbWFfcG1fcmVnc1tOVU1fREJETUFfQ0hBTlMgKyAxXVs4XTsKK3N0YXRpYyB1MzIgYXUxeHh4X2RiZG1hX3BtX3JlZ3NbTlVNX0RCRE1BX0NIQU5TICsgMV1bNl07CiAjZW5kaWYKIAogCkBAIC05OTMsMTQgKzk5MywxMyBAQAogCWF1MXh4eF9kYmRtYV9wbV9yZWdzWzBdWzNdID0gYXVfcmVhZGwoYWRkciArIDB4MGMpOwogCiAJLyogc2F2ZSBjaGFubmVsIGNvbmZpZ3VyYXRpb25zICovCi0JZm9yIChpID0gMSwgYWRkciA9IERETUFfQ0hBTk5FTF9CQVNFOyBpIDwgTlVNX0RCRE1BX0NIQU5TOyBpKyspIHsKKwlmb3IgKGkgPSAxLCBhZGRyID0gRERNQV9DSEFOTkVMX0JBU0U7IGkgPD0gTlVNX0RCRE1BX0NIQU5TOyBpKyspIHsKIAkJYXUxeHh4X2RiZG1hX3BtX3JlZ3NbaV1bMF0gPSBhdV9yZWFkbChhZGRyICsgMHgwMCk7CiAJCWF1MXh4eF9kYmRtYV9wbV9yZWdzW2ldWzFdID0gYXVfcmVhZGwoYWRkciArIDB4MDQpOwogCQlhdTF4eHhfZGJkbWFfcG1fcmVnc1tpXVsyXSA9IGF1X3JlYWRsKGFkZHIgKyAweDA4KTsKIAkJYXUxeHh4X2RiZG1hX3BtX3JlZ3NbaV1bM10gPSBhdV9yZWFkbChhZGRyICsgMHgwYyk7CiAJCWF1MXh4eF9kYmRtYV9wbV9yZWdzW2ldWzRdID0gYXVfcmVhZGwoYWRkciArIDB4MTApOwogCQlhdTF4eHhfZGJkbWFfcG1fcmVnc1tpXVs1XSA9IGF1X3JlYWRsKGFkZHIgKyAweDE0KTsKLQkJYXUxeHh4X2RiZG1hX3BtX3JlZ3NbaV1bNl0gPSBhdV9yZWFkbChhZGRyICsgMHgxOCk7CiAKIAkJLyogaGFsdCBjaGFubmVsICovCiAJCWF1X3dyaXRlbChhdTF4eHhfZGJkbWFfcG1fcmVnc1tpXVswXSAmIH4xLCBhZGRyICsgMHgwMCk7CkBAIC0xMDI3LDE0ICsxMDI2LDEzIEBACiAJYXVfd3JpdGVsKGF1MXh4eF9kYmRtYV9wbV9yZWdzWzBdWzNdLCBhZGRyICsgMHgwYyk7CiAKIAkvKiByZXN0b3JlIGNoYW5uZWwgY29uZmlndXJhdGlvbnMgKi8KLQlmb3IgKGkgPSAxLCBhZGRyID0gRERNQV9DSEFOTkVMX0JBU0U7IGkgPCBOVU1fREJETUFfQ0hBTlM7IGkrKykgeworCWZvciAoaSA9IDEsIGFkZHIgPSBERE1BX0NIQU5ORUxfQkFTRTsgaSA8PSBOVU1fREJETUFfQ0hBTlM7IGkrKykgewogCQlhdV93cml0ZWwoYXUxeHh4X2RiZG1hX3BtX3JlZ3NbaV1bMF0sIGFkZHIgKyAweDAwKTsKIAkJYXVfd3JpdGVsKGF1MXh4eF9kYmRtYV9wbV9yZWdzW2ldWzFdLCBhZGRyICsgMHgwNCk7CiAJCWF1X3dyaXRlbChhdTF4eHhfZGJkbWFfcG1fcmVnc1tpXVsyXSwgYWRkciArIDB4MDgpOwogCQlhdV93cml0ZWwoYXUxeHh4X2RiZG1hX3BtX3JlZ3NbaV1bM10sIGFkZHIgKyAweDBjKTsKIAkJYXVfd3JpdGVsKGF1MXh4eF9kYmRtYV9wbV9yZWdzW2ldWzRdLCBhZGRyICsgMHgxMCk7CiAJCWF1X3dyaXRlbChhdTF4eHhfZGJkbWFfcG1fcmVnc1tpXVs1XSwgYWRkciArIDB4MTQpOwotCQlhdV93cml0ZWwoYXUxeHh4X2RiZG1hX3BtX3JlZ3NbaV1bNl0sIGFkZHIgKyAweDE4KTsKIAkJYXVfc3luYygpOwogCQlhZGRyICs9IDB4MTAwOwkvKiBuZXh0IGNoYW5uZWwgYmFzZSAqLwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9iYXNsZXIvZXhjaXRlL2V4Y2l0ZV9pb2Rldi5jIGIvYXJjaC9taXBzL2Jhc2xlci9leGNpdGUvZXhjaXRlX2lvZGV2LmMKaW5kZXggZGZiZmQ3ZS4uOTM4YjFkMCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2Jhc2xlci9leGNpdGUvZXhjaXRlX2lvZGV2LmMKKysrIGIvYXJjaC9taXBzL2Jhc2xlci9leGNpdGUvZXhjaXRlX2lvZGV2LmMKQEAgLTExMiwxMCArMTEyLDggQEAKIHsKIAlpbnQgcmV0OwogCi0JbG9ja19rZXJuZWwoKTsKIAlyZXQgPSByZXF1ZXN0X2lycShpb2Rldl9pcnEsIGlvZGV2X2lycWhkbCwgSVJRRl9ESVNBQkxFRCwKIAkJCSAgIGlvZGV2X25hbWUsICZtaXNjZGV2KTsKLQl1bmxvY2tfa2VybmVsKCk7CiAKIAlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2JjbTYzeHgvTWFrZWZpbGUgYi9hcmNoL21pcHMvYmNtNjN4eC9NYWtlZmlsZQppbmRleCBhYWE1ODVjLi5jMTQ2ZDFlIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYmNtNjN4eC9NYWtlZmlsZQorKysgYi9hcmNoL21pcHMvYmNtNjN4eC9NYWtlZmlsZQpAQCAtMSw1ICsxLDUgQEAKIG9iai15CQkrPSBjbGsubyBjcHUubyBjcy5vIGdwaW8ubyBpcnEubyBwcm9tLm8gc2V0dXAubyB0aW1lci5vIFwKLQkJICAgZGV2LWRzcC5vIGRldi1lbmV0Lm8KKwkJICAgZGV2LWRzcC5vIGRldi1lbmV0Lm8gZGV2LXBjbWNpYS5vIGRldi11YXJ0Lm8KIG9iai0kKENPTkZJR19FQVJMWV9QUklOVEspCSs9IGVhcmx5X3ByaW50ay5vCiAKIG9iai15CQkrPSBib2FyZHMvCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYmNtNjN4eC9ib2FyZHMvYm9hcmRfYmNtOTYzeHguYyBiL2FyY2gvbWlwcy9iY202M3h4L2JvYXJkcy9ib2FyZF9iY205NjN4eC5jCmluZGV4IGZkNzdmNTQuLjc4ZTE1NWQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9iY202M3h4L2JvYXJkcy9ib2FyZF9iY205NjN4eC5jCisrKyBiL2FyY2gvbWlwcy9iY202M3h4L2JvYXJkcy9ib2FyZF9iY205NjN4eC5jCkBAIC0yMCwxMCArMjAsMTEgQEAKICNpbmNsdWRlIDxiY202M3h4X2NwdS5oPgogI2luY2x1ZGUgPGJjbTYzeHhfcmVncy5oPgogI2luY2x1ZGUgPGJjbTYzeHhfaW8uaD4KLSNpbmNsdWRlIDxiY202M3h4X2JvYXJkLmg+CiAjaW5jbHVkZSA8YmNtNjN4eF9kZXZfcGNpLmg+CiAjaW5jbHVkZSA8YmNtNjN4eF9kZXZfZW5ldC5oPgogI2luY2x1ZGUgPGJjbTYzeHhfZGV2X2RzcC5oPgorI2luY2x1ZGUgPGJjbTYzeHhfZGV2X3BjbWNpYS5oPgorI2luY2x1ZGUgPGJjbTYzeHhfZGV2X3VhcnQuaD4KICNpbmNsdWRlIDxib2FyZF9iY205NjN4eC5oPgogCiAjZGVmaW5lIFBGWAkiYm9hcmRfYmNtOTYzeHg6ICIKQEAgLTc5Myw2ICs3OTQsMTEgQEAKIHsKIAl1MzIgdmFsOwogCisJYmNtNjN4eF91YXJ0X3JlZ2lzdGVyKCk7CisKKwlpZiAoYm9hcmQuaGFzX3BjY2FyZCkKKwkJYmNtNjN4eF9wY21jaWFfcmVnaXN0ZXIoKTsKKwogCWlmIChib2FyZC5oYXNfZW5ldDAgJiYKIAkgICAgIWJvYXJkX2dldF9tYWNfYWRkcmVzcyhib2FyZC5lbmV0MC5tYWNfYWRkcikpCiAJCWJjbTYzeHhfZW5ldF9yZWdpc3RlcigwLCAmYm9hcmQuZW5ldDApOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2JjbTYzeHgvZGV2LXBjbWNpYS5jIGIvYXJjaC9taXBzL2JjbTYzeHgvZGV2LXBjbWNpYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlNGQ5MTcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvYmNtNjN4eC9kZXYtcGNtY2lhLmMKQEAgLTAsMCArMSwxNDQgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggTWF4aW1lIEJpem9uIDxtYml6b25AZnJlZWJveC5mcj4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGFzbS9ib290aW5mby5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGJjbTYzeHhfY3MuaD4KKyNpbmNsdWRlIDxiY202M3h4X2NwdS5oPgorI2luY2x1ZGUgPGJjbTYzeHhfZGV2X3BjbWNpYS5oPgorI2luY2x1ZGUgPGJjbTYzeHhfaW8uaD4KKyNpbmNsdWRlIDxiY202M3h4X3JlZ3MuaD4KKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBwY21jaWFfcmVzb3VyY2VzW10gPSB7CisJLyogcGNtY2lhIHJlZ2lzdGVycyAqLworCXsKKwkJLyogc3RhcnQgJiBlbmQgZmlsbGVkIGF0IHJ1bnRpbWUgKi8KKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisKKwkvKiBwY21jaWEgbWVtb3J5IHpvbmUgcmVzb3VyY2VzICovCisJeworCQkuc3RhcnQJCT0gQkNNX1BDTUNJQV9DT01NT05fQkFTRV9QQSwKKwkJLmVuZAkJPSBCQ01fUENNQ0lBX0NPTU1PTl9FTkRfUEEsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLnN0YXJ0CQk9IEJDTV9QQ01DSUFfQVRUUl9CQVNFX1BBLAorCQkuZW5kCQk9IEJDTV9QQ01DSUFfQVRUUl9FTkRfUEEsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLnN0YXJ0CQk9IEJDTV9QQ01DSUFfSU9fQkFTRV9QQSwKKwkJLmVuZAkJPSBCQ01fUENNQ0lBX0lPX0VORF9QQSwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisKKwkvKiBQQ01DSUEgaXJxICovCisJeworCQkvKiBzdGFydCBmaWxsZWQgYXQgcnVudGltZSAqLworCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKKworCS8qIGRlY2xhcmUgUENNQ0lBIElPIHJlc291cmNlIGFsc28gKi8KKwl7CisJCS5zdGFydAkJPSBCQ01fUENNQ0lBX0lPX0JBU0VfUEEsCisJCS5lbmQJCT0gQkNNX1BDTUNJQV9JT19FTkRfUEEsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX0lPLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGJjbTYzeHhfcGNtY2lhX3BsYXRmb3JtX2RhdGEgcGQ7CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGJjbTYzeHhfcGNtY2lhX2RldmljZSA9IHsKKwkubmFtZQkJPSAiYmNtNjN4eF9wY21jaWEiLAorCS5pZAkJPSAwLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShwY21jaWFfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSBwY21jaWFfcmVzb3VyY2VzLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YSA9ICZwZCwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgY29uZmlnX3BjbWNpYV9jcyh1bnNpZ25lZCBpbnQgY3MsCisJCQkJICAgdTMyIGJhc2UsIHVuc2lnbmVkIGludCBzaXplKQoreworCWludCByZXQ7CisKKwlyZXQgPSBiY202M3h4X3NldF9jc19zdGF0dXMoY3MsIDApOworCWlmICghcmV0KQorCQlyZXQgPSBiY202M3h4X3NldF9jc19iYXNlKGNzLCBiYXNlLCBzaXplKTsKKwlpZiAoIXJldCkKKwkJcmV0ID0gYmNtNjN4eF9zZXRfY3Nfc3RhdHVzKGNzLCAxKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgY29uc3QgX19pbml0ZGF0YSBzdHJ1Y3QgeworCXVuc2lnbmVkIGludAljczsKKwl1bnNpZ25lZCBpbnQJYmFzZTsKKwl1bnNpZ25lZCBpbnQJc2l6ZTsKK30gcGNtY2lhX2NzWzNdID0geworCXsKKwkJLmNzCT0gTVBJX0NTX1BDTUNJQV9DT01NT04sCisJCS5iYXNlCT0gQkNNX1BDTUNJQV9DT01NT05fQkFTRV9QQSwKKwkJLnNpemUJPSBCQ01fUENNQ0lBX0NPTU1PTl9TSVpFCisJfSwKKwl7CisJCS5jcwk9IE1QSV9DU19QQ01DSUFfQVRUUiwKKwkJLmJhc2UJPSBCQ01fUENNQ0lBX0FUVFJfQkFTRV9QQSwKKwkJLnNpemUJPSBCQ01fUENNQ0lBX0FUVFJfU0laRQorCX0sCisJeworCQkuY3MJPSBNUElfQ1NfUENNQ0lBX0lPLAorCQkuYmFzZQk9IEJDTV9QQ01DSUFfSU9fQkFTRV9QQSwKKwkJLnNpemUJPSBCQ01fUENNQ0lBX0lPX1NJWkUKKwl9LAorfTsKKworaW50IF9faW5pdCBiY202M3h4X3BjbWNpYV9yZWdpc3Rlcih2b2lkKQoreworCWludCByZXQsIGk7CisKKwlpZiAoIUJDTUNQVV9JU182MzQ4KCkgJiYgIUJDTUNQVV9JU182MzU4KCkpCisJCXJldHVybiAwOworCisJLyogdXNlIGNvcnJlY3QgcGNtY2lhIHJlYWR5IGdwaW8gZGVwZW5kaW5nIG9uIHByb2Nlc3NvciAqLworCXN3aXRjaCAoYmNtNjN4eF9nZXRfY3B1X2lkKCkpIHsKKwljYXNlIEJDTTYzNDhfQ1BVX0lEOgorCQlwZC5yZWFkeV9ncGlvID0gMjI7CisJCWJyZWFrOworCisJY2FzZSBCQ002MzU4X0NQVV9JRDoKKwkJcGQucmVhZHlfZ3BpbyA9IDE4OworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXBjbWNpYV9yZXNvdXJjZXNbMF0uc3RhcnQgPSBiY202M3h4X3JlZ3NldF9hZGRyZXNzKFJTRVRfUENNQ0lBKTsKKwlwY21jaWFfcmVzb3VyY2VzWzBdLmVuZCA9IHBjbWNpYV9yZXNvdXJjZXNbMF0uc3RhcnQgKworCQlSU0VUX1BDTUNJQV9TSVpFIC0gMTsKKwlwY21jaWFfcmVzb3VyY2VzWzRdLnN0YXJ0ID0gYmNtNjN4eF9nZXRfaXJxX251bWJlcihJUlFfUENNQ0lBKTsKKworCS8qIGNvbmZpZ3VyZSBwY21jaWEgY2hpcCBzZWxlY3RzICovCisJZm9yIChpID0gMDsgaSA8IDM7IGkrKykgeworCQlyZXQgPSBjb25maWdfcGNtY2lhX2NzKHBjbWNpYV9jc1tpXS5jcywKKwkJCQkgICAgICAgcGNtY2lhX2NzW2ldLmJhc2UsCisJCQkJICAgICAgIHBjbWNpYV9jc1tpXS5zaXplKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gb3V0X2VycjsKKwl9CisKKwlyZXR1cm4gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZiY202M3h4X3BjbWNpYV9kZXZpY2UpOworCitvdXRfZXJyOgorCXByaW50ayhLRVJOX0VSUiAidW5hYmxlIHRvIHNldCBwY21jaWEgY2hpcCBzZWxlY3RcbiIpOworCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYmNtNjN4eC9kZXYtdWFydC5jIGIvYXJjaC9taXBzL2JjbTYzeHgvZGV2LXVhcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZjNkODljCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2JjbTYzeHgvZGV2LXVhcnQuYwpAQCAtMCwwICsxLDQxIEBACisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IE1heGltZSBCaXpvbiA8bWJpem9uQGZyZWVib3guZnI+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxiY202M3h4X2NwdS5oPgorI2luY2x1ZGUgPGJjbTYzeHhfZGV2X3VhcnQuaD4KKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSB1YXJ0X3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0CQk9IC0xLCAvKiBmaWxsZWQgYXQgcnVudGltZSAqLworCQkuZW5kCQk9IC0xLCAvKiBmaWxsZWQgYXQgcnVudGltZSAqLworCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5zdGFydAkJPSAtMSwgLyogZmlsbGVkIGF0IHJ1bnRpbWUgKi8KKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBiY202M3h4X3VhcnRfZGV2aWNlID0geworCS5uYW1lCQk9ICJiY202M3h4X3VhcnQiLAorCS5pZAkJPSAwLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh1YXJ0X3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gdWFydF9yZXNvdXJjZXMsCit9OworCitpbnQgX19pbml0IGJjbTYzeHhfdWFydF9yZWdpc3Rlcih2b2lkKQoreworCXVhcnRfcmVzb3VyY2VzWzBdLnN0YXJ0ID0gYmNtNjN4eF9yZWdzZXRfYWRkcmVzcyhSU0VUX1VBUlQwKTsKKwl1YXJ0X3Jlc291cmNlc1swXS5lbmQgPSB1YXJ0X3Jlc291cmNlc1swXS5zdGFydDsKKwl1YXJ0X3Jlc291cmNlc1swXS5lbmQgKz0gUlNFVF9VQVJUX1NJWkUgLSAxOworCXVhcnRfcmVzb3VyY2VzWzFdLnN0YXJ0ID0gYmNtNjN4eF9nZXRfaXJxX251bWJlcihJUlFfVUFSVDApOworCXJldHVybiBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmJjbTYzeHhfdWFydF9kZXZpY2UpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYmNtNjN4eC9iY202M3h4X2Rldl9wY21jaWEuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWJjbTYzeHgvYmNtNjN4eF9kZXZfcGNtY2lhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmJlYjM5NgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWJjbTYzeHgvYmNtNjN4eF9kZXZfcGNtY2lhLmgKQEAgLTAsMCArMSwxMyBAQAorI2lmbmRlZiBCQ002M1hYX0RFVl9QQ01DSUFfSF8KKyNkZWZpbmUgQkNNNjNYWF9ERVZfUENNQ0lBX0hfCisKKy8qCisgKiBQQ01DSUEgZHJpdmVyIHBsYXRmb3JtIGRhdGEKKyAqLworc3RydWN0IGJjbTYzeHhfcGNtY2lhX3BsYXRmb3JtX2RhdGEgeworCXVuc2lnbmVkIGludCByZWFkeV9ncGlvOworfTsKKworaW50IGJjbTYzeHhfcGNtY2lhX3JlZ2lzdGVyKHZvaWQpOworCisjZW5kaWYgLyogQkNNNjNYWF9ERVZfUENNQ0lBX0hfICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1iY202M3h4L2JjbTYzeHhfZGV2X3VhcnQuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWJjbTYzeHgvYmNtNjN4eF9kZXZfdWFydC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmMzQ4ZjUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1iY202M3h4L2JjbTYzeHhfZGV2X3VhcnQuaApAQCAtMCwwICsxLDYgQEAKKyNpZm5kZWYgQkNNNjNYWF9ERVZfVUFSVF9IXworI2RlZmluZSBCQ002M1hYX0RFVl9VQVJUX0hfCisKK2ludCBiY202M3h4X3VhcnRfcmVnaXN0ZXIodm9pZCk7CisKKyNlbmRpZiAvKiBCQ002M1hYX0RFVl9VQVJUX0hfICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vc21wLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vc21wLmgKaW5kZXggZTE1ZjExYS4uYWY0MjM4NSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NtcC5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zbXAuaApAQCAtNzcsNyArNzcsMTggQEAKIAogZXh0ZXJuIGFzbWxpbmthZ2Ugdm9pZCBzbXBfY2FsbF9mdW5jdGlvbl9pbnRlcnJ1cHQodm9pZCk7CiAKLWV4dGVybiB2b2lkIGFyY2hfc2VuZF9jYWxsX2Z1bmN0aW9uX3NpbmdsZV9pcGkoaW50IGNwdSk7Ci1leHRlcm4gdm9pZCBhcmNoX3NlbmRfY2FsbF9mdW5jdGlvbl9pcGlfbWFzayhjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzayk7CitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9zZW5kX2NhbGxfZnVuY3Rpb25fc2luZ2xlX2lwaShpbnQgY3B1KQoreworCWV4dGVybiBzdHJ1Y3QgcGxhdF9zbXBfb3BzICptcF9vcHM7ICAgICAvKiBwcml2YXRlICovCisKKwltcF9vcHMtPnNlbmRfaXBpX21hc2soJmNwdW1hc2tfb2ZfY3B1KGNwdSksIFNNUF9DQUxMX0ZVTkNUSU9OKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGFyY2hfc2VuZF9jYWxsX2Z1bmN0aW9uX2lwaV9tYXNrKGNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrKQoreworCWV4dGVybiBzdHJ1Y3QgcGxhdF9zbXBfb3BzICptcF9vcHM7ICAgICAvKiBwcml2YXRlICovCisKKwltcF9vcHMtPnNlbmRfaXBpX21hc2sobWFzaywgU01QX0NBTExfRlVOQ1RJT04pOworfQogCiAjZW5kaWYgLyogX19BU01fU01QX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS91bmFsaWduZWQuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS91bmFsaWduZWQuaAppbmRleCA3OTI0MDQ5Li40MmY2NmMzIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vdW5hbGlnbmVkLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3VuYWxpZ25lZC5oCkBAIC0xMiwxNyArMTIsMTcgQEAKICNpZiBkZWZpbmVkKF9fTUlQU0VCX18pCiAjIGluY2x1ZGUgPGxpbnV4L3VuYWxpZ25lZC9iZV9zdHJ1Y3QuaD4KICMgaW5jbHVkZSA8bGludXgvdW5hbGlnbmVkL2xlX2J5dGVzaGlmdC5oPgotIyBpbmNsdWRlIDxsaW51eC91bmFsaWduZWQvZ2VuZXJpYy5oPgogIyBkZWZpbmUgZ2V0X3VuYWxpZ25lZAlfX2dldF91bmFsaWduZWRfYmUKICMgZGVmaW5lIHB1dF91bmFsaWduZWQJX19wdXRfdW5hbGlnbmVkX2JlCiAjZWxpZiBkZWZpbmVkKF9fTUlQU0VMX18pCiAjIGluY2x1ZGUgPGxpbnV4L3VuYWxpZ25lZC9sZV9zdHJ1Y3QuaD4KICMgaW5jbHVkZSA8bGludXgvdW5hbGlnbmVkL2JlX2J5dGVzaGlmdC5oPgotIyBpbmNsdWRlIDxsaW51eC91bmFsaWduZWQvZ2VuZXJpYy5oPgogIyBkZWZpbmUgZ2V0X3VuYWxpZ25lZAlfX2dldF91bmFsaWduZWRfbGUKICMgZGVmaW5lIHB1dF91bmFsaWduZWQJX19wdXRfdW5hbGlnbmVkX2xlCiAjZWxzZQogIyAgZXJyb3IgIk1JUFMsIGJ1dCBuZWl0aGVyIF9fTUlQU0VCX18sIG5vciBfX01JUFNFTF9fPz8/IgogI2VuZGlmCiAKKyMgaW5jbHVkZSA8bGludXgvdW5hbGlnbmVkL2dlbmVyaWMuaD4KKwogI2VuZGlmIC8qIF9BU01fTUlQU19VTkFMSUdORURfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9NYWtlZmlsZSBiL2FyY2gvbWlwcy9rZXJuZWwvTWFrZWZpbGUKaW5kZXggZTk2MTIyMS4uZWVjZDJhOSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9NYWtlZmlsZQorKysgYi9hcmNoL21pcHMva2VybmVsL01ha2VmaWxlCkBAIC0yLDYgKzIsOCBAQAogIyBNYWtlZmlsZSBmb3IgdGhlIExpbnV4L01JUFMga2VybmVsLgogIwogCitDUFBGTEFHU192bWxpbnV4LmxkcyA6PSAkKEtCVUlMRF9DRkxBR1MpCisKIGV4dHJhLXkJCTo9IGhlYWQubyBpbml0X3Rhc2subyB2bWxpbnV4LmxkcwogCiBvYmoteQkJKz0gY3B1LXByb2JlLm8gYnJhbmNoLm8gZW50cnkubyBnZW5leC5vIGlycS5vIHByb2Nlc3MubyBcCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL2tzcGQuYyBiL2FyY2gvbWlwcy9rZXJuZWwva3NwZC5jCmluZGV4IGYyMzk3ZjAuLmFkNGUwMTcgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwva3NwZC5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwva3NwZC5jCkBAIC0xNzIsMTMgKzE3MiwyMCBAQAogfQogCiAKLXN0YXRpYyB2b2lkIHNwX3NldGZzdWlkZ2lkKCB1aWRfdCB1aWQsIGdpZF90IGdpZCkKK3N0YXRpYyBpbnQgc3Bfc2V0ZnN1aWRnaWQodWlkX3QgdWlkLCBnaWRfdCBnaWQpCiB7Ci0JY3VycmVudC0+Y3JlZC0+ZnN1aWQgPSB1aWQ7Ci0JY3VycmVudC0+Y3JlZC0+ZnNnaWQgPSBnaWQ7CisJc3RydWN0IGNyZWQgKm5ldzsKIAotCWtleV9mc3VpZF9jaGFuZ2VkKGN1cnJlbnQpOwotCWtleV9mc2dpZF9jaGFuZ2VkKGN1cnJlbnQpOworCW5ldyA9IHByZXBhcmVfY3JlZHMoKTsKKwlpZiAoIW5ldykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwluZXctPmZzdWlkID0gdWlkOworCW5ldy0+ZnNnaWQgPSBnaWQ7CisKKwljb21taXRfY3JlZHMobmV3KTsKKworCXJldHVybiAwOwogfQogCiAvKgpAQCAtMTk2LDcgKzIwMyw3IEBACiAJbW1fc2VnbWVudF90IG9sZF9mczsKIAlzdHJ1Y3QgdGltZXZhbCB0djsKIAlzdHJ1Y3QgdGltZXpvbmUgdHo7Ci0JaW50IGNtZDsKKwlpbnQgZXJyLCBjbWQ7CiAKIAljaGFyICp2Y3dkOwogCWludCBzaXplOwpAQCAtMjI1LDggKzIzMiwxMSBAQAogCS8qIFJ1biB0aGUgc3lzY2FsbCBhdCB0aGUgcHJpdmlsZWdlIG9mIHRoZSB1c2VyIHdobyBsb2FkZWQgdGhlCiAJICAgU1AgcHJvZ3JhbSAqLwogCi0JaWYgKHZwZV9nZXR1aWQodGNsaW1pdCkpCi0JCXNwX3NldGZzdWlkZ2lkKHZwZV9nZXR1aWQodGNsaW1pdCksIHZwZV9nZXRnaWQodGNsaW1pdCkpOworCWlmICh2cGVfZ2V0dWlkKHRjbGltaXQpKSB7CisJCWVyciA9IHNwX3NldGZzdWlkZ2lkKHZwZV9nZXR1aWQodGNsaW1pdCksIHZwZV9nZXRnaWQodGNsaW1pdCkpOworCQlpZiAoIWVycikKKwkJCXByX2VycigiQ2hhbmdlIG9mIGNyZWRzIGZhaWxlZFxuIik7CisJfQogCiAJc3dpdGNoIChzYy5jbWQpIHsKIAkvKiBuZWVkcyB0aGUgZmxhZ3MgYXJndW1lbnQgdHJhbnNsYXRpbmcgZnJvbSBTREUga2l0IHRvCkBAIC0yODMsOCArMjkzLDExIEBACiAJCWJyZWFrOwogIAl9IC8qIHN3aXRjaCAqLwogCi0JaWYgKHZwZV9nZXR1aWQodGNsaW1pdCkpCi0JCXNwX3NldGZzdWlkZ2lkKCAwLCAwKTsKKwlpZiAodnBlX2dldHVpZCh0Y2xpbWl0KSkgeworCQllcnIgPSBzcF9zZXRmc3VpZGdpZCgwLCAwKTsKKwkJaWYgKCFlcnIpCisJCQlwcl9lcnIoInJlc3RvcmluZyBvbGQgY3JlZHMgZmFpbGVkXG4iKTsKKwl9CiAKIAlvbGRfZnMgPSBnZXRfZnMoKTsKIAlzZXRfZnMoS0VSTkVMX0RTKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvcnRseC5jIGIvYXJjaC9taXBzL2tlcm5lbC9ydGx4LmMKaW5kZXggYTEwZWJmZC4uMzY0ZjA2NiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9ydGx4LmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9ydGx4LmMKQEAgLTcyLDggKzcyLDkgQEAKICovCiBzdGF0aWMgaXJxcmV0dXJuX3QgcnRseF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQogeworCXVuc2lnbmVkIGludCB2cGVmbGFnczsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBpOwotCXVuc2lnbmVkIGludCBmbGFncywgdnBlZmxhZ3M7CiAKIAkvKiBPdWdodCBub3QgdG8gYmUgc3RyaWN0bHkgbmVjZXNzYXJ5IGZvciBTTVRDIGJ1aWxkcyAqLwogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKQEAgLTM5MiwyMCArMzkzLDEyIEBACiAKIHN0YXRpYyBpbnQgZmlsZV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQogewotCWludCBtaW5vciA9IGltaW5vcihpbm9kZSk7Ci0JaW50IGVycjsKLQotCWxvY2tfa2VybmVsKCk7Ci0JZXJyID0gcnRseF9vcGVuKG1pbm9yLCAoZmlscC0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spID8gMCA6IDEpOwotCXVubG9ja19rZXJuZWwoKTsKLQlyZXR1cm4gZXJyOworCXJldHVybiBydGx4X29wZW4oaW1pbm9yKGlub2RlKSwgKGZpbHAtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSA/IDAgOiAxKTsKIH0KIAogc3RhdGljIGludCBmaWxlX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCiB7Ci0JaW50IG1pbm9yID0gaW1pbm9yKGlub2RlKTsKLQotCXJldHVybiBydGx4X3JlbGVhc2UobWlub3IpOworCXJldHVybiBydGx4X3JlbGVhc2UoaW1pbm9yKGlub2RlKSk7CiB9CiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgZmlsZV9wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBwb2xsX3RhYmxlICogd2FpdCkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvc21wLmMgYi9hcmNoL21pcHMva2VybmVsL3NtcC5jCmluZGV4IDRlYjEwNmMuLmU3MmU2ODQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvc21wLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9zbXAuYwpAQCAtMzIsNyArMzIsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KICNpbmNsdWRlIDxsaW51eC9jcHUuaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXAuaD4KIAogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KICNpbmNsdWRlIDxhc20vY3B1Lmg+CkBAIC0xMjgsMTkgKzEyNyw2IEBACiAJY3B1X2lkbGUoKTsKIH0KIAotdm9pZCBhcmNoX3NlbmRfY2FsbF9mdW5jdGlvbl9pcGlfbWFzayhjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaykKLXsKLQltcF9vcHMtPnNlbmRfaXBpX21hc2sobWFzaywgU01QX0NBTExfRlVOQ1RJT04pOwotfQotCi0vKgotICogV2UgcmV1c2UgdGhlIHNhbWUgdmVjdG9yIGZvciB0aGUgc2luZ2xlIElQSQotICovCi12b2lkIGFyY2hfc2VuZF9jYWxsX2Z1bmN0aW9uX3NpbmdsZV9pcGkoaW50IGNwdSkKLXsKLQltcF9vcHMtPnNlbmRfaXBpX21hc2soY3B1bWFza19vZl9jcHUoY3B1KSwgU01QX0NBTExfRlVOQ1RJT04pOwotfQotCiAvKgogICogQ2FsbCBpbnRvIGJvdGggaW50ZXJydXB0IGhhbmRsZXJzLCBhcyB3ZSBzaGFyZSB0aGUgSVBJIGZvciB0aGVtCiAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvc210Yy5jIGIvYXJjaC9taXBzL2tlcm5lbC9zbXRjLmMKaW5kZXggNjcxNTNhMC4uNGQxODFkZiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9zbXRjLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9zbXRjLmMKQEAgLTEwOTgsOSArMTA5OCw4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIGlycV9pcGkgPSB7CiAJLmhhbmRsZXIJPSBpcGlfaW50ZXJydXB0LAotCS5mbGFncwkJPSBJUlFGX0RJU0FCTEVELAotCS5uYW1lCQk9ICJTTVRDX0lQSSIsCi0JLmZsYWdzCQk9IElSUUZfUEVSQ1BVCisJLmZsYWdzCQk9IElSUUZfRElTQUJMRUQgfCBJUlFGX1BFUkNQVSwKKwkubmFtZQkJPSAiU01UQ19JUEkiCiB9OwogCiBzdGF0aWMgdm9pZCBzZXR1cF9jcm9zc192cGVfaW50ZXJydXB0cyh1bnNpZ25lZCBpbnQgbnZwZSkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvdm1saW51eC5sZHMuUyBiL2FyY2gvbWlwcy9rZXJuZWwvdm1saW51eC5sZHMuUwppbmRleCA5YmYwZTNkLi4xNjJiMjk5IDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3ZtbGludXgubGRzLlMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC92bWxpbnV4Lmxkcy5TCkBAIC0xMSwxNSArMTEsMTUgQEAKIAlub3RlIFBUX05PVEUgRkxBR1MoNCk7CS8qIFJfXyAqLwogfQogCi1pZmRlZiBDT05GSUdfMzJCSVQKLQlpZmRlZiBDT05GSUdfQ1BVX0xJVFRMRV9FTkRJQU4KKyNpZmRlZiBDT05GSUdfMzJCSVQKKwkjaWZkZWYgQ09ORklHX0NQVV9MSVRUTEVfRU5ESUFOCiAJCWppZmZpZXMgID0gamlmZmllc182NDsKLQllbHNlCisJI2Vsc2UKIAkJamlmZmllcyAgPSBqaWZmaWVzXzY0ICsgNDsKLQllbmRpZgotZWxzZQorCSNlbmRpZgorI2Vsc2UKIAlqaWZmaWVzICA9IGppZmZpZXNfNjQ7Ci1lbmRpZgorI2VuZGlmCiAKIFNFQ1RJT05TCiB7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3ZwZS5jIGIvYXJjaC9taXBzL2tlcm5lbC92cGUuYwppbmRleCBlYjZjNGM1Li4wMzA5MmFiIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3ZwZS5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvdnBlLmMKQEAgLTE0NCwxNCArMTQ0LDE1IEBACiB9OwogCiBzdHJ1Y3QgewotCS8qIFZpcnR1YWwgcHJvY2Vzc2luZyBlbGVtZW50cyAqLwotCXN0cnVjdCBsaXN0X2hlYWQgdnBlX2xpc3Q7Ci0KLQkvKiBUaHJlYWQgY29udGV4dHMgKi8KLQlzdHJ1Y3QgbGlzdF9oZWFkIHRjX2xpc3Q7CisJc3BpbmxvY2tfdCB2cGVfbGlzdF9sb2NrOworCXN0cnVjdCBsaXN0X2hlYWQgdnBlX2xpc3Q7CS8qIFZpcnR1YWwgcHJvY2Vzc2luZyBlbGVtZW50cyAqLworCXNwaW5sb2NrX3QgdGNfbGlzdF9sb2NrOworCXN0cnVjdCBsaXN0X2hlYWQgdGNfbGlzdDsJLyogVGhyZWFkIGNvbnRleHRzICovCiB9IHZwZWNvbnRyb2wgPSB7Ci0JLnZwZV9saXN0ID0gTElTVF9IRUFEX0lOSVQodnBlY29udHJvbC52cGVfbGlzdCksCi0JLnRjX2xpc3QgPSBMSVNUX0hFQURfSU5JVCh2cGVjb250cm9sLnRjX2xpc3QpCisJLnZwZV9saXN0X2xvY2sJPSBTUElOX0xPQ0tfVU5MT0NLRUQsCisJLnZwZV9saXN0CT0gTElTVF9IRUFEX0lOSVQodnBlY29udHJvbC52cGVfbGlzdCksCisJLnRjX2xpc3RfbG9jawk9IFNQSU5fTE9DS19VTkxPQ0tFRCwKKwkudGNfbGlzdAk9IExJU1RfSEVBRF9JTklUKHZwZWNvbnRyb2wudGNfbGlzdCkKIH07CiAKIHN0YXRpYyB2b2lkIHJlbGVhc2VfcHJvZ21lbSh2b2lkICpwdHIpOwpAQCAtMTU5LDI4ICsxNjAsMzggQEAKIC8qIGdldCB0aGUgdnBlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIG1pbm9yICovCiBzdGF0aWMgc3RydWN0IHZwZSAqZ2V0X3ZwZShpbnQgbWlub3IpCiB7Ci0Jc3RydWN0IHZwZSAqdjsKKwlzdHJ1Y3QgdnBlICpyZXMsICp2OwogCiAJaWYgKCFjcHVfaGFzX21pcHNtdCkKIAkJcmV0dXJuIE5VTEw7CiAKKwlyZXMgPSBOVUxMOworCXNwaW5fbG9jaygmdnBlY29udHJvbC52cGVfbGlzdF9sb2NrKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHYsICZ2cGVjb250cm9sLnZwZV9saXN0LCBsaXN0KSB7Ci0JCWlmICh2LT5taW5vciA9PSBtaW5vcikKLQkJCXJldHVybiB2OworCQlpZiAodi0+bWlub3IgPT0gbWlub3IpIHsKKwkJCXJlcyA9IHY7CisJCQlicmVhazsKKwkJfQogCX0KKwlzcGluX3VubG9jaygmdnBlY29udHJvbC52cGVfbGlzdF9sb2NrKTsKIAotCXJldHVybiBOVUxMOworCXJldHVybiByZXM7CiB9CiAKIC8qIGdldCB0aGUgdnBlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIG1pbm9yICovCiBzdGF0aWMgc3RydWN0IHRjICpnZXRfdGMoaW50IGluZGV4KQogewotCXN0cnVjdCB0YyAqdDsKKwlzdHJ1Y3QgdGMgKnJlcywgKnQ7CiAKKwlyZXMgPSBOVUxMOworCXNwaW5fbG9jaygmdnBlY29udHJvbC50Y19saXN0X2xvY2spOwogCWxpc3RfZm9yX2VhY2hfZW50cnkodCwgJnZwZWNvbnRyb2wudGNfbGlzdCwgbGlzdCkgewotCQlpZiAodC0+aW5kZXggPT0gaW5kZXgpCi0JCQlyZXR1cm4gdDsKKwkJaWYgKHQtPmluZGV4ID09IGluZGV4KSB7CisJCQlyZXMgPSB0OworCQkJYnJlYWs7CisJCX0KIAl9CisJc3Bpbl91bmxvY2soJnZwZWNvbnRyb2wudGNfbGlzdF9sb2NrKTsKIAogCXJldHVybiBOVUxMOwogfQpAQCAtMTkwLDE1ICsyMDEsMTcgQEAKIHsKIAlzdHJ1Y3QgdnBlICp2OwogCi0JaWYgKCh2ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHZwZSksIEdGUF9LRVJORUwpKSA9PSBOVUxMKSB7CisJaWYgKCh2ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHZwZSksIEdGUF9LRVJORUwpKSA9PSBOVUxMKQogCQlyZXR1cm4gTlVMTDsKLQl9CiAKIAlJTklUX0xJU1RfSEVBRCgmdi0+dGMpOworCXNwaW5fbG9jaygmdnBlY29udHJvbC52cGVfbGlzdF9sb2NrKTsKIAlsaXN0X2FkZF90YWlsKCZ2LT5saXN0LCAmdnBlY29udHJvbC52cGVfbGlzdCk7CisJc3Bpbl91bmxvY2soJnZwZWNvbnRyb2wudnBlX2xpc3RfbG9jayk7CiAKIAlJTklUX0xJU1RfSEVBRCgmdi0+bm90aWZ5KTsKIAl2LT5taW5vciA9IG1pbm9yOworCiAJcmV0dXJuIHY7CiB9CiAKQEAgLTIxMiw3ICsyMjUsMTAgQEAKIAogCUlOSVRfTElTVF9IRUFEKCZ0Yy0+dGMpOwogCXRjLT5pbmRleCA9IGluZGV4OworCisJc3Bpbl9sb2NrKCZ2cGVjb250cm9sLnRjX2xpc3RfbG9jayk7CiAJbGlzdF9hZGRfdGFpbCgmdGMtPmxpc3QsICZ2cGVjb250cm9sLnRjX2xpc3QpOworCXNwaW5fdW5sb2NrKCZ2cGVjb250cm9sLnRjX2xpc3RfbG9jayk7CiAKIG91dDoKIAlyZXR1cm4gdGM7CkBAIC0yMjcsNyArMjQzLDcgQEAKIAlrZnJlZSh2KTsKIH0KIAotc3RhdGljIHZvaWQgZHVtcF9tdHJlZ3Modm9pZCkKK3N0YXRpYyB2b2lkIF9fbWF5YmVfdW51c2VkIGR1bXBfbXRyZWdzKHZvaWQpCiB7CiAJdW5zaWduZWQgbG9uZyB2YWw7CiAKQEAgLTEwNDgsMjAgKzEwNjQsMTkgQEAKIAllbnVtIHZwZV9zdGF0ZSBzdGF0ZTsKIAlzdHJ1Y3QgdnBlX25vdGlmaWNhdGlvbnMgKm5vdDsKIAlzdHJ1Y3QgdnBlICp2OwotCWludCByZXQsIGVyciA9IDA7CisJaW50IHJldDsKIAotCWxvY2tfa2VybmVsKCk7CiAJaWYgKG1pbm9yICE9IGltaW5vcihpbm9kZSkpIHsKIAkJLyogYXNzdW1lIG9ubHkgMSBkZXZpY2UgYXQgdGhlIG1vbWVudC4gKi8KLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiVlBFIGxvYWRlcjogb25seSB2cGUxIGlzIHN1cHBvcnRlZFxuIik7Ci0JCWVyciA9IC1FTk9ERVY7Ci0JCWdvdG8gb3V0OworCQlwcl93YXJuaW5nKCJWUEUgbG9hZGVyOiBvbmx5IHZwZTEgaXMgc3VwcG9ydGVkXG4iKTsKKworCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKIAlpZiAoKHYgPSBnZXRfdnBlKHRjbGltaXQpKSA9PSBOVUxMKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIlZQRSBsb2FkZXI6IHVuYWJsZSB0byBnZXQgdnBlXG4iKTsKLQkJZXJyID0gLUVOT0RFVjsKLQkJZ290byBvdXQ7CisJCXByX3dhcm5pbmcoIlZQRSBsb2FkZXI6IHVuYWJsZSB0byBnZXQgdnBlXG4iKTsKKworCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKIAlzdGF0ZSA9IHhjaGcoJnYtPnN0YXRlLCBWUEVfU1RBVEVfSU5VU0UpOwpAQCAtMTEwMSw4ICsxMTE2LDggQEAKIAl2LT5zaGFyZWRfcHRyID0gTlVMTDsKIAl2LT5fX3N0YXJ0ID0gMDsKIAotb3V0OgogCXVubG9ja19rZXJuZWwoKTsKKwogCXJldHVybiAwOwogfQogCkBAIC0xNTk0LDE0ICsxNjA5LDE0IEBACiB7CiAJc3RydWN0IHZwZSAqdiwgKm47CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodiwgbiwgJnZwZWNvbnRyb2wudnBlX2xpc3QsIGxpc3QpIHsKLQkJaWYgKHYtPnN0YXRlICE9IFZQRV9TVEFURV9VTlVTRUQpIHsKLQkJCXJlbGVhc2VfdnBlKHYpOwotCQl9Ci0JfQotCiAJZGV2aWNlX2RlbCgmdnBlX2RldmljZSk7CiAJdW5yZWdpc3Rlcl9jaHJkZXYobWFqb3IsIG1vZHVsZV9uYW1lKTsKKworCS8qIE5vIGxvY2tpbmcgbmVlZGVkIGhlcmUgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodiwgbiwgJnZwZWNvbnRyb2wudnBlX2xpc3QsIGxpc3QpIHsKKwkJaWYgKHYtPnN0YXRlICE9IFZQRV9TVEFURV9VTlVTRUQpCisJCQlyZWxlYXNlX3ZwZSh2KTsKKwl9CiB9CiAKIG1vZHVsZV9pbml0KHZwZV9tb2R1bGVfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbW0vc2MtbWlwcy5jIGIvYXJjaC9taXBzL21tL3NjLW1pcHMuYwppbmRleCBiNTVjMmQxLi41YWI1ZmE4IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbW0vc2MtbWlwcy5jCisrKyBiL2FyY2gvbWlwcy9tbS9zYy1taXBzLmMKQEAgLTMyLDYgKzMyLDExIEBACiAgKi8KIHN0YXRpYyB2b2lkIG1pcHNfc2NfaW52KHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBzaXplKQogeworCXVuc2lnbmVkIGxvbmcgbHNpemUgPSBjcHVfc2NhY2hlX2xpbmVfc2l6ZSgpOworCXVuc2lnbmVkIGxvbmcgYWxtYXNrID0gfihsc2l6ZSAtIDEpOworCisJY2FjaGVfb3AoSGl0X1dyaXRlYmFja19JbnZfU0QsIGFkZHIgJiBhbG1hc2spOworCWNhY2hlX29wKEhpdF9Xcml0ZWJhY2tfSW52X1NELCAoYWRkciArIHNpemUgLSAxKSAmIGFsbWFzayk7CiAJYmxhc3RfaW52X3NjYWNoZV9yYW5nZShhZGRyLCBhZGRyICsgc2l6ZSk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9vcHJvZmlsZS9vcF9tb2RlbF9sb29uZ3NvbjIuYyBiL2FyY2gvbWlwcy9vcHJvZmlsZS9vcF9tb2RlbF9sb29uZ3NvbjIuYwppbmRleCA2NTVjYjhkLi5kZWVkMWQ1IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvb3Byb2ZpbGUvb3BfbW9kZWxfbG9vbmdzb24yLmMKKysrIGIvYXJjaC9taXBzL29wcm9maWxlL29wX21vZGVsX2xvb25nc29uMi5jCkBAIC00NCw3ICs0NCw3IEBACiAJdW5zaWduZWQgaW50IGN0cmw7CiAJdW5zaWduZWQgbG9uZyBsb25nIHJlc2V0X2NvdW50ZXIxOwogCXVuc2lnbmVkIGxvbmcgbG9uZyByZXNldF9jb3VudGVyMjsKLQlpbnQgY250MV9lbmFsYmVkLCBjbnQyX2VuYWxiZWQ7CisJaW50IGNudDFfZW5hYmxlZCwgY250Ml9lbmFibGVkOwogfSByZWc7CiAKIERFRklORV9TUElOTE9DSyhzYW1wbGVfbG9jayk7CkBAIC04MSw4ICs4MSw4IEBACiAKIAlyZWcuY3RybCA9IGN0cmw7CiAKLQlyZWcuY250MV9lbmFsYmVkID0gY2ZnWzBdLmVuYWJsZWQ7Ci0JcmVnLmNudDJfZW5hbGJlZCA9IGNmZ1sxXS5lbmFibGVkOworCXJlZy5jbnQxX2VuYWJsZWQgPSBjZmdbMF0uZW5hYmxlZDsKKwlyZWcuY250Ml9lbmFibGVkID0gY2ZnWzFdLmVuYWJsZWQ7CiAKIH0KIApAQCAtOTksNyArOTksNyBAQAogc3RhdGljIHZvaWQgbG9vbmdzb24yX2NwdV9zdGFydCh2b2lkICphcmdzKQogewogCS8qIFN0YXJ0IGFsbCBjb3VudGVycyBvbiBjdXJyZW50IENQVSAqLwotCWlmIChyZWcuY250MV9lbmFsYmVkIHx8IHJlZy5jbnQyX2VuYWxiZWQpCisJaWYgKHJlZy5jbnQxX2VuYWJsZWQgfHwgcmVnLmNudDJfZW5hYmxlZCkKIAkJd3JpdGVfYzBfcGVyZmN0cmwocmVnLmN0cmwpOwogfQogCkBAIC0xMjUsNyArMTI1LDcgQEAKIAkgKi8KIAogCS8qIENoZWNrIHdoZXRoZXIgdGhlIGlycSBiZWxvbmdzIHRvIG1lICovCi0JZW5hYmxlZCA9IHJlZy5jbnQxX2VuYWxiZWQgfCByZWcuY250Ml9lbmFsYmVkOworCWVuYWJsZWQgPSByZWcuY250MV9lbmFibGVkIHwgcmVnLmNudDJfZW5hYmxlZDsKIAlpZiAoIWVuYWJsZWQpCiAJCXJldHVybiBJUlFfTk9ORTsKIApAQCAtMTM2LDEyICsxMzYsMTIgQEAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmc2FtcGxlX2xvY2ssIGZsYWdzKTsKIAogCWlmIChjb3VudGVyMSAmIExPT05HU09OMl9QRVJGQ05UX09WRVJGTE9XKSB7Ci0JCWlmIChyZWcuY250MV9lbmFsYmVkKQorCQlpZiAocmVnLmNudDFfZW5hYmxlZCkKIAkJCW9wcm9maWxlX2FkZF9zYW1wbGUocmVncywgMCk7CiAJCWNvdW50ZXIxID0gcmVnLnJlc2V0X2NvdW50ZXIxOwogCX0KIAlpZiAoY291bnRlcjIgJiBMT09OR1NPTjJfUEVSRkNOVF9PVkVSRkxPVykgewotCQlpZiAocmVnLmNudDJfZW5hbGJlZCkKKwkJaWYgKHJlZy5jbnQyX2VuYWJsZWQpCiAJCQlvcHJvZmlsZV9hZGRfc2FtcGxlKHJlZ3MsIDEpOwogCQljb3VudGVyMiA9IHJlZy5yZXNldF9jb3VudGVyMjsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcGNpL29wcy1wbWNtc3AuYyBiL2FyY2gvbWlwcy9wY2kvb3BzLXBtY21zcC5jCmluZGV4IDEwOWM5NWMuLjMyNTQ4YjUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9wY2kvb3BzLXBtY21zcC5jCisrKyBiL2FyY2gvbWlwcy9wY2kvb3BzLXBtY21zcC5jCkBAIC0zODUsNiArMzg1LDcgQEAKIAl1bnNpZ25lZCBsb25nIGludHI7CiAJdW5zaWduZWQgbG9uZyB2YWx1ZTsKIAlzdGF0aWMgY2hhciBwY2lpcnFmbGFnOworCWludCByZXQ7CiAjaWYgZGVmaW5lZChDT05GSUdfUE1DX01TUDcxMjBfR1cpIHx8IGRlZmluZWQoQ09ORklHX1BNQ19NU1A3MTIwX0VWQUwpCiAJdW5zaWduZWQgaW50CXZwZV9zdGF0dXM7CiAjZW5kaWYKQEAgLTQwMiwxMSArNDAzLDEzIEBACiAJICogYWxsb2NhdGlvbiBhc3NpZ25zIGFuIGludGVycnVwdCBoYW5kbGVyIHRvIHRoZSBpbnRlcnJ1cHQuCiAJICovCiAJaWYgKHBjaWlycWZsYWcgPT0gMCkgewotCQlyZXF1ZXN0X2lycShNU1BfSU5UX1BDSSwvKiBIYXJkY29kZWQgaW50ZXJuYWwgTVNQNzEyMCB3aXJpbmcgKi8KKwkJcmV0ID0gcmVxdWVzdF9pcnEoTVNQX0lOVF9QQ0ksLyogSGFyZGNvZGVkIGludGVybmFsIE1TUDcxMjAgd2lyaW5nICovCiAJCQkJYnBjaV9pbnRlcnJ1cHQsCiAJCQkJSVJRRl9TSEFSRUQgfCBJUlFGX0RJU0FCTEVELAogCQkJCSJQTUMgTVNQIFBDSSBIb3N0IiwKIAkJCQlwcmVnKTsKKwkJaWYgKHJldCAhPSAwKQorCQkJcmV0dXJuIHJldDsKIAkJcGNpaXJxZmxhZyA9IH4wOwogCX0KIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3NnaS1pcDI3L2lwMjctc21wLmMgYi9hcmNoL21pcHMvc2dpLWlwMjcvaXAyNy1zbXAuYwppbmRleCA5YWE4ZjI5Li5jNjg1MWRmIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvc2dpLWlwMjcvaXAyNy1zbXAuYworKysgYi9hcmNoL21pcHMvc2dpLWlwMjcvaXAyNy1zbXAuYwpAQCAtMTY1LDcgKzE2NSw3IEBACiAJUkVNT1RFX0hVQl9TRU5EX0lOVFIoQ09NUEFDVF9UT19OQVNJRF9OT0RFSUQoY3B1X3RvX25vZGUoZGVzdGlkKSksIGlycSk7CiB9CiAKLXN0YXRpYyB2b2lkIGlwMjdfc2VuZF9pcGkoY29uc3Qgc3RydWN0IGNwdW1hc2sgKm1hc2ssIHVuc2lnbmVkIGludCBhY3Rpb24pCitzdGF0aWMgdm9pZCBpcDI3X3NlbmRfaXBpX21hc2soY29uc3Qgc3RydWN0IGNwdW1hc2sgKm1hc2ssIHVuc2lnbmVkIGludCBhY3Rpb24pCiB7CiAJdW5zaWduZWQgaW50IGk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zaWJ5dGUvYmNtMTQ4MC9pcnEuYyBiL2FyY2gvbWlwcy9zaWJ5dGUvYmNtMTQ4MC9pcnEuYwppbmRleCBiYTU5ODM5Li40MDcwMjY4IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvc2lieXRlL2JjbTE0ODAvaXJxLmMKKysrIGIvYXJjaC9taXBzL3NpYnl0ZS9iY20xNDgwL2lycS5jCkBAIC0xMTcsMTAgKzExNyw2IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBpbnQgaXJxX2RpcnR5OwogCi0JaWYgKGNwdW1hc2tfd2VpZ2h0KG1hc2spICE9IDEpIHsKLQkJcHJpbnRrKCJhdHRlbXB0ZWQgdG8gc2V0IGlycSBhZmZpbml0eSBmb3IgaXJxICVkIHRvIG11bHRpcGxlIENQVXNcbiIsIGlycSk7Ci0JCXJldHVybiAtMTsKLQl9CiAJaSA9IGNwdW1hc2tfZmlyc3QobWFzayk7CiAKIAkvKiBDb252ZXJ0IGxvZ2ljYWwgQ1BVIHRvIHBoeXNpY2FsIENQVSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3NpYnl0ZS9jb21tb24vc2JfdGJwcm9mLmMgYi9hcmNoL21pcHMvc2lieXRlL2NvbW1vbi9zYl90YnByb2YuYwppbmRleCA2MzdhMTk0Li4xNWVhNzc4IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvc2lieXRlL2NvbW1vbi9zYl90YnByb2YuYworKysgYi9hcmNoL21pcHMvc2lieXRlL2NvbW1vbi9zYl90YnByb2YuYwpAQCAtNDAzLDM2ICs0MDMsMzEgQEAKIHN0YXRpYyBpbnQgc2Jwcm9mX3RiX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCiB7CiAJaW50IG1pbm9yOwotCWludCBlcnIgPSAwOwogCi0JbG9ja19rZXJuZWwoKTsKIAltaW5vciA9IGltaW5vcihpbm9kZSk7Ci0JaWYgKG1pbm9yICE9IDApIHsKLQkJZXJyID0gLUVOT0RFVjsKLQkJZ290byBvdXQ7Ci0JfQorCWlmIChtaW5vciAhPSAwKQorCQlyZXR1cm4gLUVOT0RFVjsKIAotCWlmICh4Y2hnKCZzYnAub3BlbiwgU0JfT1BFTklORykgIT0gU0JfQ0xPU0VEKSB7Ci0JCWVyciA9IC1FQlVTWTsKLQkJZ290byBvdXQ7Ci0JfQorCWlmICh4Y2hnKCZzYnAub3BlbiwgU0JfT1BFTklORykgIT0gU0JfQ0xPU0VEKQorCQlyZXR1cm4gLUVCVVNZOwogCiAJbWVtc2V0KCZzYnAsIDAsIHNpemVvZihzdHJ1Y3Qgc2Jwcm9mX3RiKSk7CiAJc2JwLnNicHJvZl90YmJ1ZiA9IHZtYWxsb2MoTUFYX1RCU0FNUExFX0JZVEVTKTsKIAlpZiAoIXNicC5zYnByb2ZfdGJidWYpIHsKLQkJZXJyID0gLUVOT01FTTsKLQkJZ290byBvdXQ7CisJCXNicC5vcGVuID0gU0JfQ0xPU0VEOworCQl3bWIoKTsKKwkJcmV0dXJuIC1FTk9NRU07CiAJfQorCiAJbWVtc2V0KHNicC5zYnByb2ZfdGJidWYsIDAsIE1BWF9UQlNBTVBMRV9CWVRFUyk7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmc2JwLnRiX3N5bmMpOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnNicC50Yl9yZWFkKTsKIAltdXRleF9pbml0KCZzYnAubG9jayk7CiAKIAlzYnAub3BlbiA9IFNCX09QRU47CisJd21iKCk7CiAKLSAgb3V0OgotCXVubG9ja19rZXJuZWwoKTsKLQlyZXR1cm4gZXJyOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHNicHJvZl90Yl9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQpAQCAtNDQwLDcgKzQzNSw3IEBACiAJaW50IG1pbm9yOwogCiAJbWlub3IgPSBpbWlub3IoaW5vZGUpOwotCWlmIChtaW5vciAhPSAwIHx8ICFzYnAub3BlbikKKwlpZiAobWlub3IgIT0gMCB8fCBzYnAub3BlbiAhPSBTQl9DTE9TRUQpCiAJCXJldHVybiAtRU5PREVWOwogCiAJbXV0ZXhfbG9jaygmc2JwLmxvY2spOwpAQCAtNDQ5LDcgKzQ0NCw4IEBACiAJCXNicHJvZl96YnByb2Zfc3RvcCgpOwogCiAJdmZyZWUoc2JwLnNicHJvZl90YmJ1Zik7Ci0Jc2JwLm9wZW4gPSAwOworCXNicC5vcGVuID0gU0JfQ0xPU0VEOworCXdtYigpOwogCiAJbXV0ZXhfdW5sb2NrKCZzYnAubG9jayk7CiAKQEAgLTU4Myw3ICs1NzksOCBAQAogCX0KIAl0Yl9kZXYgPSBkZXY7CiAKLQlzYnAub3BlbiA9IDA7CisJc2JwLm9wZW4gPSBTQl9DTE9TRUQ7CisJd21iKCk7CiAJdGJfcGVyaW9kID0gemJidXNfbWh6ICogMTAwMDBMTDsKIAlwcl9pbmZvKERFVk5BTUUgIjogaW5pdGlhbGl6ZWQgLSB0Yl9wZXJpb2QgPSAlbGxkXG4iLAogCQkobG9uZyBsb25nKSB0Yl9wZXJpb2QpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3NpYnl0ZS9zd2FybS9zZXR1cC5jIGIvYXJjaC9taXBzL3NpYnl0ZS9zd2FybS9zZXR1cC5jCmluZGV4IDYyM2ZmYzkuLjUyNzdhYWMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9zaWJ5dGUvc3dhcm0vc2V0dXAuYworKysgYi9hcmNoL21pcHMvc2lieXRlL3N3YXJtL3NldHVwLmMKQEAgLTEwNiw3ICsxMDYsNyBAQAogCQlicmVhazsKIAl9CiAJdHMtPnR2X3NlYyA9IHNlYzsKLQl0di0+dHZfbnNlYyA9IDA7CisJdHMtPnR2X25zZWMgPSAwOwogfQogCiBpbnQgcnRjX21pcHNfc2V0X3RpbWUodW5zaWduZWQgbG9uZyBzZWMpCmRpZmYgLS1naXQgYS9hcmNoL21uMTAzMDAvaW5jbHVkZS9hc20vdWFjY2Vzcy5oIGIvYXJjaC9tbjEwMzAwL2luY2x1ZGUvYXNtL3VhY2Nlc3MuaAppbmRleCA4YTNhNGRkLi4xNjdlMTBmIDEwMDY0NAotLS0gYS9hcmNoL21uMTAzMDAvaW5jbHVkZS9hc20vdWFjY2Vzcy5oCisrKyBiL2FyY2gvbW4xMDMwMC9pbmNsdWRlL2FzbS91YWNjZXNzLmgKQEAgLTEyOSw0MiArMTI5LDQ3IEBACiBzdHJ1Y3QgX19sYXJnZV9zdHJ1Y3QgeyB1bnNpZ25lZCBsb25nIGJ1ZlsxMDBdOyB9OwogI2RlZmluZSBfX20oeCkgKCooc3RydWN0IF9fbGFyZ2Vfc3RydWN0ICopKHgpKQogCi0jZGVmaW5lIF9fZ2V0X3VzZXJfbm9jaGVjayh4LCBwdHIsIHNpemUpCVwKLSh7CQkJCQkJXAotCV9fdHlwZW9mKCoocHRyKSkgX19ndV92YWw7CQlcCi0JdW5zaWduZWQgbG9uZyBfX2d1X2FkZHI7CQlcCi0JaW50IF9fZ3VfZXJyOwkJCQlcCi0JX19ndV9hZGRyID0gKHVuc2lnbmVkIGxvbmcpIChwdHIpOwlcCi0Jc3dpdGNoIChzaXplKSB7CQkJCVwKLQljYXNlIDE6ICBfX2dldF91c2VyX2FzbSgiYnUiKTsgYnJlYWs7CVwKLQljYXNlIDI6ICBfX2dldF91c2VyX2FzbSgiaHUiKTsgYnJlYWs7CVwKLQljYXNlIDQ6ICBfX2dldF91c2VyX2FzbSgiIiAgKTsgYnJlYWs7CVwKLQlkZWZhdWx0OiBfX2dldF91c2VyX3Vua25vd24oKTsgYnJlYWs7CVwKLQl9CQkJCQlcCi0JeCA9IChfX3R5cGVvZl9fKCoocHRyKSkpIF9fZ3VfdmFsOwlcCi0JX19ndV9lcnI7CQkJCVwKKyNkZWZpbmUgX19nZXRfdXNlcl9ub2NoZWNrKHgsIHB0ciwgc2l6ZSkJCQkJXAorKHsJCQkJCQkJCQlcCisJdW5zaWduZWQgbG9uZyBfX2d1X2FkZHI7CQkJCQlcCisJaW50IF9fZ3VfZXJyOwkJCQkJCQlcCisJX19ndV9hZGRyID0gKHVuc2lnbmVkIGxvbmcpIChwdHIpOwkJCQlcCisJc3dpdGNoIChzaXplKSB7CQkJCQkJCVwKKwljYXNlIDE6IHsJCQkJCQkJXAorCQl1bnNpZ25lZCBjaGFyIF9fZ3VfdmFsOwkJCQkJXAorCQlfX2dldF91c2VyX2FzbSgiYnUiKTsJCQkJCVwKKwkJKHgpID0gKihfX2ZvcmNlIF9fdHlwZW9mX18oKihwdHIpKSopICZfX2d1X3ZhbDsJCVwKKwkJYnJlYWs7CQkJCQkJCVwKKwl9CQkJCQkJCQlcCisJY2FzZSAyOiB7CQkJCQkJCVwKKwkJdW5zaWduZWQgc2hvcnQgX19ndV92YWw7CQkJCVwKKwkJX19nZXRfdXNlcl9hc20oImh1Iik7CQkJCQlcCisJCSh4KSA9ICooX19mb3JjZSBfX3R5cGVvZl9fKCoocHRyKSkqKSAmX19ndV92YWw7CQlcCisJCWJyZWFrOwkJCQkJCQlcCisJfQkJCQkJCQkJXAorCWNhc2UgNDogewkJCQkJCQlcCisJCXVuc2lnbmVkIGludCBfX2d1X3ZhbDsJCQkJCVwKKwkJX19nZXRfdXNlcl9hc20oIiIpOwkJCQkJXAorCQkoeCkgPSAqKF9fZm9yY2UgX190eXBlb2ZfXygqKHB0cikpKikgJl9fZ3VfdmFsOwkJXAorCQlicmVhazsJCQkJCQkJXAorCX0JCQkJCQkJCVwKKwlkZWZhdWx0OgkJCQkJCQlcCisJCV9fZ2V0X3VzZXJfdW5rbm93bigpOwkJCQkJXAorCQlicmVhazsJCQkJCQkJXAorCX0JCQkJCQkJCVwKKwlfX2d1X2VycjsJCQkJCQkJXAogfSkKIAotI2RlZmluZSBfX2dldF91c2VyX2NoZWNrKHgsIHB0ciwgc2l6ZSkJCQlcCi0oewkJCQkJCQlcCi0JX190eXBlb2ZfXygqKHB0cikpIF9fZ3VfdmFsOwkJCVwKLQl1bnNpZ25lZCBsb25nIF9fZ3VfYWRkcjsJCQlcCi0JaW50IF9fZ3VfZXJyOwkJCQkJXAotCV9fZ3VfYWRkciA9ICh1bnNpZ25lZCBsb25nKSAocHRyKTsJCVwKLQlpZiAobGlrZWx5KF9fYWNjZXNzX29rKF9fZ3VfYWRkcixzaXplKSkpIHsJXAotCQlzd2l0Y2ggKHNpemUpIHsJCQkJXAotCQljYXNlIDE6ICBfX2dldF91c2VyX2FzbSgiYnUiKTsgYnJlYWs7CVwKLQkJY2FzZSAyOiAgX19nZXRfdXNlcl9hc20oImh1Iik7IGJyZWFrOwlcCi0JCWNhc2UgNDogIF9fZ2V0X3VzZXJfYXNtKCIiICApOyBicmVhazsJXAotCQlkZWZhdWx0OiBfX2dldF91c2VyX3Vua25vd24oKTsgYnJlYWs7CVwKLQkJfQkJCQkJXAotCX0JCQkJCQlcCi0JZWxzZSB7CQkJCQkJXAotCQlfX2d1X2VyciA9IC1FRkFVTFQ7CQkJXAotCQlfX2d1X3ZhbCA9IDA7CQkJCVwKLQl9CQkJCQkJXAotCXggPSAoX190eXBlb2ZfXygqKHB0cikpKSBfX2d1X3ZhbDsJCVwKLQlfX2d1X2VycjsJCQkJCVwKKyNkZWZpbmUgX19nZXRfdXNlcl9jaGVjayh4LCBwdHIsIHNpemUpCQkJCQlcCisoewkJCQkJCQkJCVwKKwlpbnQgX2U7CQkJCQkJCQlcCisJaWYgKGxpa2VseShfX2FjY2Vzc19vaygodW5zaWduZWQgbG9uZykgKHB0ciksIChzaXplKSkpKQkJXAorCQlfZSA9IF9fZ2V0X3VzZXJfbm9jaGVjaygoeCksIChwdHIpLCAoc2l6ZSkpOwkJXAorCWVsc2UgewkJCQkJCQkJXAorCQlfZSA9IC1FRkFVTFQ7CQkJCQkJXAorCQkoeCkgPSAoX190eXBlb2ZfXyh4KSkwOwkJCQkJXAorCX0JCQkJCQkJCVwKKwlfZTsJCQkJCQkJCVwKIH0pCiAKICNkZWZpbmUgX19nZXRfdXNlcl9hc20oSU5TTikJCQkJCVwKZGlmZiAtLWdpdCBhL2FyY2gvbW4xMDMwMC9rZXJuZWwvdm1saW51eC5sZHMuUyBiL2FyY2gvbW4xMDMwMC9rZXJuZWwvdm1saW51eC5sZHMuUwppbmRleCA3NmY0MWJkLi4xMDU0OWRjIDEwMDY0NAotLS0gYS9hcmNoL21uMTAzMDAva2VybmVsL3ZtbGludXgubGRzLlMKKysrIGIvYXJjaC9tbjEwMzAwL2tlcm5lbC92bWxpbnV4Lmxkcy5TCkBAIC00NCwyNCArNDQsOCBAQAogICBST19EQVRBKFBBR0VfU0laRSkKIAogICAvKiB3cml0ZWFibGUgKi8KLSAgLmRhdGEgOiB7CQkJLyogRGF0YSAqLwotCURBVEFfREFUQQotCUNPTlNUUlVDVE9SUwotCX0KLQotICAuZGF0YV9ub3NhdmUgOiB7IE5PU0FWRV9EQVRBOyB9Ci0KLSAgLmRhdGEucGFnZV9hbGlnbmVkIDogeyBQQUdFX0FMSUdORURfREFUQShQQUdFX1NJWkUpOyB9Ci0gIC5kYXRhLmNhY2hlbGluZV9hbGlnbmVkIDogeyBDQUNIRUxJTkVfQUxJR05FRF9EQVRBKDMyKTsgfQotCi0gIC8qIHJhcmVseSBjaGFuZ2VkIGRhdGEgbGlrZSBjcHUgbWFwcyAqLwotICAuID0gQUxJR04oMzIpOwotICAuZGF0YS5yZWFkX21vc3RseSA6IEFUKEFERFIoLmRhdGEucmVhZF9tb3N0bHkpKSB7Ci0JUkVBRF9NT1NUTFlfREFUQSgzMik7Ci0JX2VkYXRhID0gLjsJCS8qIEVuZCBvZiBkYXRhIHNlY3Rpb24gKi8KLSAgfQotCi0gIC5kYXRhLmluaXRfdGFzayA6IHsgSU5JVF9UQVNLX0RBVEEoVEhSRUFEX1NJWkUpOyB9CisgIFJXX0RBVEFfU0VDVElPTigzMiwgUEFHRV9TSVpFLCBUSFJFQURfU0laRSkKKyAgX2VkYXRhID0gLjsKIAogICAvKiBtaWdodCBnZXQgZnJlZWQgYWZ0ZXIgaW5pdCAqLwogICAuID0gQUxJR04oUEFHRV9TSVpFKTsKQEAgLTc0LDIyICs1OCw4IEBACiAgIC8qIHdpbGwgYmUgZnJlZWQgYWZ0ZXIgaW5pdCAqLwogICAuID0gQUxJR04oUEFHRV9TSVpFKTsJCS8qIEluaXQgY29kZSBhbmQgZGF0YSAqLwogICBfX2luaXRfYmVnaW4gPSAuOwotICAuaW5pdC50ZXh0IDogewotCV9zaW5pdHRleHQgPSAuOwotCUlOSVRfVEVYVDsKLQlfZWluaXR0ZXh0ID0gLjsKLSAgfQotICAuaW5pdC5kYXRhIDogeyBJTklUX0RBVEE7IH0KLSAgLnNldHVwLmluaXQgOiB7IElOSVRfU0VUVVAoMTYpOyB9Ci0KLSAgX19pbml0Y2FsbF9zdGFydCA9IC47Ci0gIC5pbml0Y2FsbC5pbml0IDogewotCUlOSVRDQUxMUwotICB9Ci0gIF9faW5pdGNhbGxfZW5kID0gLjsKLSAgLmNvbl9pbml0Y2FsbC5pbml0IDogeyBDT05fSU5JVENBTEw7IH0KLQotICBTRUNVUklUWV9JTklUCisgIElOSVRfVEVYVF9TRUNUSU9OKFBBR0VfU0laRSkKKyAgSU5JVF9EQVRBX1NFQ1RJT04oMTYpCiAgIC4gPSBBTElHTig0KTsKICAgX19hbHRfaW5zdHJ1Y3Rpb25zID0gLjsKICAgLmFsdGluc3RydWN0aW9ucyA6IHsgKiguYWx0aW5zdHJ1Y3Rpb25zKSB9CkBAIC0xMDAsOCArNzAsNiBAQAogCS5leGl0LnRleHQgOiB7IEVYSVRfVEVYVDsgfQogCS5leGl0LmRhdGEgOiB7IEVYSVRfREFUQTsgfQogCi0gIC5pbml0LnJhbWZzIDogeyBJTklUX1JBTV9GUzsgfQotCiAgIFBFUkNQVSgzMikKICAgLiA9IEFMSUdOKFBBR0VfU0laRSk7CiAgIF9faW5pdF9lbmQgPSAuOwpkaWZmIC0tZ2l0IGEvYXJjaC9tbjEwMzAwL3VuaXQtYXNiMjMwMy9pbmNsdWRlL3VuaXQvY2xvY2suaCBiL2FyY2gvbW4xMDMwMC91bml0LWFzYjIzMDMvaW5jbHVkZS91bml0L2Nsb2NrLmgKaW5kZXggOGI0NTBlOS4uMmEwYmY3OSAxMDA2NDQKLS0tIGEvYXJjaC9tbjEwMzAwL3VuaXQtYXNiMjMwMy9pbmNsdWRlL3VuaXQvY2xvY2suaAorKysgYi9hcmNoL21uMTAzMDAvdW5pdC1hc2IyMzAzL2luY2x1ZGUvdW5pdC9jbG9jay5oCkBAIC0yMCw5ICsyMCw5IEBACiBleHRlcm4gdW5zaWduZWQgbG9uZyBtbjEwMzAwX2lvYmNsazsKIGV4dGVybiB1bnNpZ25lZCBsb25nIG1uMTAzMDBfdHNjX3Blcl9IWjsKIAotI2RlZmluZSBNTjEwMzAwX0lPQ0xLCQkoKHVuc2lnbmVkIGxvbmcpbW4xMDMwMF9pb2NsaykKKyNkZWZpbmUgTU4xMDMwMF9JT0NMSwkJbW4xMDMwMF9pb2NsawogLyogSWYgdGhpcyBwcm9jZXNzb3JzIGhhcyBhIGFub3RoZXIgY2xvY2ssIHVuY29tbWVudCB0aGUgYmVsb3cuICovCi0vKiAjZGVmaW5lIE1OMTAzMDBfSU9CQ0xLCSgodW5zaWduZWQgbG9uZyltbjEwMzAwX2lvYmNsaykgKi8KKy8qICNkZWZpbmUgTU4xMDMwMF9JT0JDTEsJbW4xMDMwMF9pb2JjbGsgKi8KIAogI2Vsc2UgLyogIUNPTkZJR19NTjEwMzAwX1JUQyAqLwogCkBAIC0zNSw3ICszNSw3IEBACiAjZGVmaW5lIE1OMTAzMDBfVFNDQ0xLCQlNTjEwMzAwX0lPQ0xLCiAKICNpZmRlZiBDT05GSUdfTU4xMDMwMF9SVEMKLSNkZWZpbmUgTU4xMDMwMF9UU0NfUEVSX0haCSgodW5zaWduZWQgbG9uZyltbjEwMzAwX3RzY19wZXJfSFopCisjZGVmaW5lIE1OMTAzMDBfVFNDX1BFUl9IWgltbjEwMzAwX3RzY19wZXJfSFoKICNlbHNlIC8qICFDT05GSUdfTU4xMDMwMF9SVEMgKi8KICNkZWZpbmUgTU4xMDMwMF9UU0NfUEVSX0haCShNTjEwMzAwX1RTQ0NMSy9IWikKICNlbmRpZiAvKiAhQ09ORklHX01OMTAzMDBfUlRDICovCmRpZmYgLS1naXQgYS9hcmNoL21uMTAzMDAvdW5pdC1hc2IyMzA1L2luY2x1ZGUvdW5pdC9jbG9jay5oIGIvYXJjaC9tbjEwMzAwL3VuaXQtYXNiMjMwNS9pbmNsdWRlL3VuaXQvY2xvY2suaAppbmRleCA3ZDUxNDg0Li42N2JlM2YyIDEwMDY0NAotLS0gYS9hcmNoL21uMTAzMDAvdW5pdC1hc2IyMzA1L2luY2x1ZGUvdW5pdC9jbG9jay5oCisrKyBiL2FyY2gvbW4xMDMwMC91bml0LWFzYjIzMDUvaW5jbHVkZS91bml0L2Nsb2NrLmgKQEAgLTIwLDkgKzIwLDkgQEAKIGV4dGVybiB1bnNpZ25lZCBsb25nIG1uMTAzMDBfaW9iY2xrOwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbW4xMDMwMF90c2NfcGVyX0haOwogCi0jZGVmaW5lIE1OMTAzMDBfSU9DTEsJCSgodW5zaWduZWQgbG9uZyltbjEwMzAwX2lvY2xrKQorI2RlZmluZSBNTjEwMzAwX0lPQ0xLCQltbjEwMzAwX2lvY2xrCiAvKiBJZiB0aGlzIHByb2Nlc3NvcnMgaGFzIGEgYW5vdGhlciBjbG9jaywgdW5jb21tZW50IHRoZSBiZWxvdy4gKi8KLS8qICNkZWZpbmUgTU4xMDMwMF9JT0JDTEsJKCh1bnNpZ25lZCBsb25nKW1uMTAzMDBfaW9iY2xrKSAqLworLyogI2RlZmluZSBNTjEwMzAwX0lPQkNMSwltbjEwMzAwX2lvYmNsayAqLwogCiAjZWxzZSAvKiAhQ09ORklHX01OMTAzMDBfUlRDICovCiAKQEAgLTM1LDcgKzM1LDcgQEAKICNkZWZpbmUgTU4xMDMwMF9UU0NDTEsJCU1OMTAzMDBfSU9DTEsKIAogI2lmZGVmIENPTkZJR19NTjEwMzAwX1JUQwotI2RlZmluZSBNTjEwMzAwX1RTQ19QRVJfSFoJKCh1bnNpZ25lZCBsb25nKW1uMTAzMDBfdHNjX3Blcl9IWikKKyNkZWZpbmUgTU4xMDMwMF9UU0NfUEVSX0haCW1uMTAzMDBfdHNjX3Blcl9IWgogI2Vsc2UgLyogIUNPTkZJR19NTjEwMzAwX1JUQyAqLwogI2RlZmluZSBNTjEwMzAwX1RTQ19QRVJfSFoJKE1OMTAzMDBfVFNDQ0xLL0haKQogI2VuZGlmIC8qICFDT05GSUdfTU4xMDMwMF9SVEMgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL0tjb25maWcgYi9hcmNoL3BhcmlzYy9LY29uZmlnCmluZGV4IGYzODhkYzYuLjUyNGQ5MzUgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL0tjb25maWcKKysrIGIvYXJjaC9wYXJpc2MvS2NvbmZpZwpAQCAtMTgsNiArMTgsNyBAQAogCXNlbGVjdCBCVUcKIAlzZWxlY3QgSEFWRV9QRVJGX0VWRU5UUwogCXNlbGVjdCBHRU5FUklDX0FUT01JQzY0IGlmICE2NEJJVAorCXNlbGVjdCBIQVZFX0FSQ0hfVFJBQ0VIT09LCiAJaGVscAogCSAgVGhlIFBBLVJJU0MgbWljcm9wcm9jZXNzb3IgaXMgZGVzaWduZWQgYnkgSGV3bGV0dC1QYWNrYXJkIGFuZCB1c2VkCiAJICBpbiBtYW55IG9mIHRoZWlyIHdvcmtzdGF0aW9ucyAmIHNlcnZlcnMgKEhQOTAwMCA3MDAgYW5kIDgwMCBzZXJpZXMsCmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9maXhtYXAuaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2ZpeG1hcC5oCmluZGV4IGRlM2ZlM2EuLjZmZWM0ZDQgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2ZpeG1hcC5oCisrKyBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2ZpeG1hcC5oCkBAIC0yMSw5ICsyMSw5IEBACiAjZGVmaW5lIEtFUk5FTF9NQVBfRU5ECQkoVE1QQUxJQVNfTUFQX1NUQVJUKQogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwotZXh0ZXJuIHZvaWQgKnZtYWxsb2Nfc3RhcnQ7CitleHRlcm4gdm9pZCAqcGFyaXNjX3ZtYWxsb2Nfc3RhcnQ7CiAjZGVmaW5lIFBDWExfRE1BX01BUF9TSVpFCSg4KjEwMjQqMTAyNCkKLSNkZWZpbmUgVk1BTExPQ19TVEFSVAkJKCh1bnNpZ25lZCBsb25nKXZtYWxsb2Nfc3RhcnQpCisjZGVmaW5lIFZNQUxMT0NfU1RBUlQJCSgodW5zaWduZWQgbG9uZylwYXJpc2Nfdm1hbGxvY19zdGFydCkKICNkZWZpbmUgVk1BTExPQ19FTkQJCShLRVJORUxfTUFQX0VORCkKICNlbmRpZiAvKl9fQVNTRU1CTFlfXyovCiAKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2hhcmRpcnEuaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2hhcmRpcnEuaAppbmRleCBjZTkzMTMzLi4wZDY4MTg0YSAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vaGFyZGlycS5oCisrKyBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2hhcmRpcnEuaApAQCAtMSwyOSArMSwxMSBAQAogLyogaGFyZGlycS5oOiBQQS1SSVNDIGhhcmQgSVJRIHN1cHBvcnQuCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDAxIE1hdHRoZXcgV2lsY294IDxtYXR0aGV3QHdpbC5jeD4KLSAqCi0gKiBUaGUgbG9ja2luZyBpcyByZWFsbHkgcXVpdGUgaW50ZXJlc3RpbmcuICBUaGVyZSdzIGEgY3B1LWxvY2FsCi0gKiBjb3VudCBvZiBob3cgbWFueSBpbnRlcnJ1cHRzIGFyZSBiZWluZyBoYW5kbGVkLCBhbmQgYSBnbG9iYWwKLSAqIGxvY2suICBBbiBpbnRlcnJ1cHQgY2FuIG9ubHkgYmUgc2VydmljZWQgaWYgdGhlIGdsb2JhbCBsb2NrCi0gKiBpcyBmcmVlLiAgWW91IGNhbid0IGJlIHN1cmUgbm8gbW9yZSBpbnRlcnJ1cHRzIGFyZSBiZWluZwotICogc2VydmljZWQgdW50aWwgeW91J3ZlIGFjcXVpcmVkIHRoZSBsb2NrIGFuZCB0aGVuIGNoZWNrZWQKLSAqIGFsbCB0aGUgcGVyLWNwdSBpbnRlcnJ1cHQgY291bnRzIGFyZSBhbGwgemVyby4gIEl0J3MgYSBzcGVjaWFsaXNlZAotICogYnJfbG9jaywgYW5kIHRoYXQncyBleGFjdGx5IGhvdyBTcGFyYyBkb2VzIGl0LiAgV2UgZG9uJ3QgYmVjYXVzZQotICogaXQncyBtb3JlIGxvY2tpbmcgZm9yIHVzLiAgVGhpcyB3YXkgaXMgbG9jay1mcmVlIGluIHRoZSBpbnRlcnJ1cHQgcGF0aC4KICAqLwogCiAjaWZuZGVmIF9QQVJJU0NfSEFSRElSUV9ICiAjZGVmaW5lIF9QQVJJU0NfSEFSRElSUV9ICiAKLSNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+Ci0jaW5jbHVkZSA8bGludXgvaXJxLmg+Ci0KLXR5cGVkZWYgc3RydWN0IHsKLQl1bnNpZ25lZCBsb25nIF9fc29mdGlycV9wZW5kaW5nOyAvKiBzZXRfYml0IGlzIHVzZWQgb24gdGhpcyAqLwotfSBfX19fY2FjaGVsaW5lX2FsaWduZWQgaXJxX2NwdXN0YXRfdDsKLQotI2luY2x1ZGUgPGxpbnV4L2lycV9jcHVzdGF0Lmg+CS8qIFN0YW5kYXJkIG1hcHBpbmdzIGZvciBpcnFfY3B1c3RhdF90IGFib3ZlICovCi0KLXZvaWQgYWNrX2JhZF9pcnEodW5zaWduZWQgaW50IGlycSk7CisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvaGFyZGlycS5oPgogCiAjZW5kaWYgLyogX1BBUklTQ19IQVJESVJRX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3B0cmFjZS5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vcHRyYWNlLmgKaW5kZXggMzAyZjY4ZC4uYWVhZDQwYiAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vcHRyYWNlLmgKKysrIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vcHRyYWNlLmgKQEAgLTU5LDggKzU5LDExIEBACiAjZGVmaW5lIHVzZXJfbW9kZShyZWdzKQkJCSgoKHJlZ3MpLT5pYW9xWzBdICYgMykgPyAxIDogMCkKICNkZWZpbmUgdXNlcl9zcGFjZShyZWdzKQkJKCgocmVncyktPmlhc3FbMV0gIT0gMCkgPyAxIDogMCkKICNkZWZpbmUgaW5zdHJ1Y3Rpb25fcG9pbnRlcihyZWdzKQkoKHJlZ3MpLT5pYW9xWzBdICYgfjMpCisjZGVmaW5lIHVzZXJfc3RhY2tfcG9pbnRlcihyZWdzKQkoKHJlZ3MpLT5nclszMF0pCiB1bnNpZ25lZCBsb25nIHByb2ZpbGVfcGMoc3RydWN0IHB0X3JlZ3MgKik7CiBleHRlcm4gdm9pZCBzaG93X3JlZ3Moc3RydWN0IHB0X3JlZ3MgKik7Ci0jZW5kaWYKKworCisjZW5kaWYgLyogX19LRVJORUxfXyAqLwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3N5c2NhbGwuaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3N5c2NhbGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YmRmZDJjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vc3lzY2FsbC5oCkBAIC0wLDAgKzEsNDAgQEAKKy8qIHN5c2NhbGwuaCAqLworCisjaWZuZGVmIF9BU01fUEFSSVNDX1NZU0NBTExfSF8KKyNkZWZpbmUgX0FTTV9QQVJJU0NfU1lTQ0FMTF9IXworCisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgorCitzdGF0aWMgaW5saW5lIGxvbmcgc3lzY2FsbF9nZXRfbnIoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssCisJCQkJICBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlyZXR1cm4gcmVncy0+Z3JbMjBdOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc3lzY2FsbF9nZXRfYXJndW1lbnRzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLAorCQkJCQkgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGludCBpLAorCQkJCQkgdW5zaWduZWQgaW50IG4sIHVuc2lnbmVkIGxvbmcgKmFyZ3MpCit7CisJQlVHX09OKGkpOworCisJc3dpdGNoIChuKSB7CisJY2FzZSA2OgorCQlhcmdzWzVdID0gcmVncy0+Z3JbMjFdOworCWNhc2UgNToKKwkJYXJnc1s0XSA9IHJlZ3MtPmdyWzIyXTsKKwljYXNlIDQ6CisJCWFyZ3NbM10gPSByZWdzLT5nclsyM107CisJY2FzZSAzOgorCQlhcmdzWzJdID0gcmVncy0+Z3JbMjRdOworCWNhc2UgMjoKKwkJYXJnc1sxXSA9IHJlZ3MtPmdyWzI1XTsKKwljYXNlIDE6CisJCWFyZ3NbMF0gPSByZWdzLT5nclsyNl07CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVRygpOworCX0KK30KKworI2VuZGlmIC8qX0FTTV9QQVJJU0NfU1lTQ0FMTF9IXyovCmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaAppbmRleCBhYzc3NWE3Li43ZWNjMTAzIDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCisrKyBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKQEAgLTMyLDYgKzMyLDExIEBACiAjZGVmaW5lIGluaXRfdGhyZWFkX2luZm8gICAgICAgIChpbml0X3RocmVhZF91bmlvbi50aHJlYWRfaW5mbykKICNkZWZpbmUgaW5pdF9zdGFjayAgICAgICAgICAgICAgKGluaXRfdGhyZWFkX3VuaW9uLnN0YWNrKQogCisvKiBob3cgdG8gZ2V0IHRoZSB0aHJlYWQgaW5mb3JtYXRpb24gc3RydWN0IGZyb20gQyAqLworI2RlZmluZSBjdXJyZW50X3RocmVhZF9pbmZvKCkJKChzdHJ1Y3QgdGhyZWFkX2luZm8gKiltZmN0bCgzMCkpCisKKyNlbmRpZiAvKiAhX19BU1NFTUJMWSAqLworCiAvKiB0aHJlYWQgaW5mb3JtYXRpb24gYWxsb2NhdGlvbiAqLwogCiAjZGVmaW5lIFRIUkVBRF9TSVpFX09SREVSICAgICAgICAgICAgMgpAQCAtNDAsMTEgKzQ1LDYgQEAKICNkZWZpbmUgVEhSRUFEX1NJWkUgICAgICAgICAgICAgKFBBR0VfU0laRSA8PCBUSFJFQURfU0laRV9PUkRFUikKICNkZWZpbmUgVEhSRUFEX1NISUZUICAgICAgICAgICAgKFBBR0VfU0hJRlQgKyBUSFJFQURfU0laRV9PUkRFUikKIAotLyogaG93IHRvIGdldCB0aGUgdGhyZWFkIGluZm9ybWF0aW9uIHN0cnVjdCBmcm9tIEMgKi8KLSNkZWZpbmUgY3VycmVudF90aHJlYWRfaW5mbygpCSgoc3RydWN0IHRocmVhZF9pbmZvICopbWZjdGwoMzApKQotCi0jZW5kaWYgLyogIV9fQVNTRU1CTFkgKi8KLQogI2RlZmluZSBQUkVFTVBUX0FDVElWRV9CSVQJMjgKICNkZWZpbmUgUFJFRU1QVF9BQ1RJVkUJCSgxIDw8IFBSRUVNUFRfQUNUSVZFX0JJVCkKIApAQCAtNjAsNiArNjAsOCBAQAogI2RlZmluZSBUSUZfUkVTVE9SRV9TSUdNQVNLCTYJLyogcmVzdG9yZSBzYXZlZCBzaWduYWwgbWFzayAqLwogI2RlZmluZSBUSUZfRlJFRVpFCQk3CS8qIGlzIGZyZWV6aW5nIGZvciBzdXNwZW5kICovCiAjZGVmaW5lIFRJRl9OT1RJRllfUkVTVU1FCTgJLyogY2FsbGJhY2sgYmVmb3JlIHJldHVybmluZyB0byB1c2VyICovCisjZGVmaW5lIFRJRl9TSU5HTEVTVEVQCQk5CS8qIHNpbmdsZSBzdGVwcGluZz8gKi8KKyNkZWZpbmUgVElGX0JMT0NLU1RFUAkJMTAJLyogYnJhbmNoIHN0ZXBwaW5nPyAqLwogCiAjZGVmaW5lIF9USUZfU1lTQ0FMTF9UUkFDRQkoMSA8PCBUSUZfU1lTQ0FMTF9UUkFDRSkKICNkZWZpbmUgX1RJRl9TSUdQRU5ESU5HCQkoMSA8PCBUSUZfU0lHUEVORElORykKQEAgLTY5LDYgKzcxLDggQEAKICNkZWZpbmUgX1RJRl9SRVNUT1JFX1NJR01BU0sJKDEgPDwgVElGX1JFU1RPUkVfU0lHTUFTSykKICNkZWZpbmUgX1RJRl9GUkVFWkUJCSgxIDw8IFRJRl9GUkVFWkUpCiAjZGVmaW5lIF9USUZfTk9USUZZX1JFU1VNRQkoMSA8PCBUSUZfTk9USUZZX1JFU1VNRSkKKyNkZWZpbmUgX1RJRl9TSU5HTEVTVEVQCQkoMSA8PCBUSUZfU0lOR0xFU1RFUCkKKyNkZWZpbmUgX1RJRl9CTE9DS1NURVAJCSgxIDw8IFRJRl9CTE9DS1NURVApCiAKICNkZWZpbmUgX1RJRl9VU0VSX1dPUktfTUFTSyAgICAgKF9USUZfU0lHUEVORElORyB8IF9USUZfTk9USUZZX1JFU1VNRSB8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9USUZfTkVFRF9SRVNDSEVEIHwgX1RJRl9SRVNUT1JFX1NJR01BU0spCmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9rZXJuZWwvYXNtLW9mZnNldHMuYyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9hc20tb2Zmc2V0cy5jCmluZGV4IDY5OWNmOGUuLmZjZDNjNzAgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2tlcm5lbC9hc20tb2Zmc2V0cy5jCisrKyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9hc20tb2Zmc2V0cy5jCkBAIC0yNzAsOCArMjcwLDggQEAKIAlERUZJTkUoRFRMQl9PRkZfQ09VTlQsIG9mZnNldG9mKHN0cnVjdCBwZGNfY2FjaGVfaW5mbywgZHRfb2ZmX2NvdW50KSk7CiAJREVGSU5FKERUTEJfTE9PUCwgb2Zmc2V0b2Yoc3RydWN0IHBkY19jYWNoZV9pbmZvLCBkdF9sb29wKSk7CiAJQkxBTksoKTsKLQlERUZJTkUoUEFfQkxPQ0tTVEVQX0JJVCwgMzEtUFRfQkxPQ0tTVEVQX0JJVCk7Ci0JREVGSU5FKFBBX1NJTkdMRVNURVBfQklULCAzMS1QVF9TSU5HTEVTVEVQX0JJVCk7CisJREVGSU5FKFRJRl9CTE9DS1NURVBfUEFfQklULCAzMS1USUZfQkxPQ0tTVEVQKTsKKwlERUZJTkUoVElGX1NJTkdMRVNURVBfUEFfQklULCAzMS1USUZfU0lOR0xFU1RFUCk7CiAJQkxBTksoKTsKIAlERUZJTkUoQVNNX1BNRF9TSElGVCwgUE1EX1NISUZUKTsKIAlERUZJTkUoQVNNX1BHRElSX1NISUZULCBQR0RJUl9TSElGVCk7CmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9rZXJuZWwvZW50cnkuUyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9lbnRyeS5TCmluZGV4IDhjNDcxMmIuLjNhNDRmN2YgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2tlcm5lbC9lbnRyeS5TCisrKyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9lbnRyeS5TCkBAIC0yMDQ3LDEyICsyMDQ3LDEzIEBACiAJYixuICAgICBzeXNjYWxsX2NoZWNrX3NpZwogCiBzeXNjYWxsX3Jlc3RvcmU6Ci0JLyogQXJlIHdlIGJlaW5nIHB0cmFjZWQ/ICovCiAJTERSRUcJVElfVEFTSy1USFJFQURfU1pfQUxHTi1GUkFNRV9TSVpFKCVyMzApLCVyMQogCi0JbGR3CVRBU0tfUFRSQUNFKCVyMSksICVyMTkKLQliYiw8CSVyMTksMzEsc3lzY2FsbF9yZXN0b3JlX3JmaQotCW5vcAorCS8qIEFyZSB3ZSBiZWluZyBwdHJhY2VkPyAqLworCWxkdwlUQVNLX0ZMQUdTKCVyMSksJXIxOQorCWxkaQkoX1RJRl9TSU5HTEVTVEVQfF9USUZfQkxPQ0tTVEVQKSwlcjIKKwlhbmQsQ09ORCg9KQklcjE5LCVyMiwlcjAKKwliLG4Jc3lzY2FsbF9yZXN0b3JlX3JmaQogCiAJbGRvCVRBU0tfUFRfRlIzMSglcjEpLCVyMTkJCSAgIC8qIHJlbG9hZCBmcHJlZ3MgKi8KIAlyZXN0X2ZwCSVyMTkKQEAgLTIxMTMsMTYgKzIxMTQsMTYgQEAKIAlsZGkJMHgwYiwlcjIwCQkJICAgLyogQ3JlYXRlIG5ldyBQU1cgKi8KIAlkZXBpCS0xLDEzLDEsJXIyMAkJCSAgIC8qIEMsIFEsIEQsIGFuZCBJIGJpdHMgKi8KIAotCS8qIFRoZSB2YWx1ZXMgb2YgUEFfU0lOR0xFU1RFUF9CSVQgYW5kIFBBX0JMT0NLU1RFUF9CSVQgYXJlCi0JICogc2V0IGluIGluY2x1ZGUvbGludXgvcHRyYWNlLmggYW5kIGNvbnZlcnRlZCB0byBQQSBiaXRtYXAKKwkvKiBUaGUgdmFsdWVzIG9mIFNJTkdMRVNURVBfQklUIGFuZCBCTE9DS1NURVBfQklUIGFyZQorCSAqIHNldCBpbiB0aHJlYWRfaW5mby5oIGFuZCBjb252ZXJ0ZWQgdG8gUEEgYml0bWFwCiAJICogbnVtYmVycyBpbiBhc20tb2Zmc2V0cy5jICovCiAKLQkvKiBpZiAoKCVyMTkuUEFfU0lOR0xFU1RFUF9CSVQpKSB7ICVyMjAuMjc9MX0gKi8KLQlleHRydSw9CSVyMTksUEFfU0lOR0xFU1RFUF9CSVQsMSwlcjAKKwkvKiBpZiAoKCVyMTkuU0lOR0xFU1RFUF9CSVQpKSB7ICVyMjAuMjc9MX0gKi8KKwlleHRydSw9CSVyMTksVElGX1NJTkdMRVNURVBfUEFfQklULDEsJXIwCiAJZGVwaQktMSwyNywxLCVyMjAJCQkgICAvKiBSIGJpdCAqLwogCi0JLyogaWYgKCglcjE5LlBBX0JMT0NLU1RFUF9CSVQpKSB7ICVyMjAuNz0xfSAqLwotCWV4dHJ1LD0gJXIxOSxQQV9CTE9DS1NURVBfQklULDEsJXIwCisJLyogaWYgKCglcjE5LkJMT0NLU1RFUF9CSVQpKSB7ICVyMjAuNz0xfSAqLworCWV4dHJ1LD0gJXIxOSxUSUZfQkxPQ0tTVEVQX1BBX0JJVCwxLCVyMAogCWRlcGkJLTEsNywxLCVyMjAJCQkgICAvKiBUIGJpdCAqLwogCiAJU1RSRUcJJXIyMCxUQVNLX1BUX1BTVyglcjEpCmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9rZXJuZWwvaXJxLmMgYi9hcmNoL3BhcmlzYy9rZXJuZWwvaXJxLmMKaW5kZXggMzMwZjUzNi4uMmU3NjEwYyAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2Mva2VybmVsL2lycS5jCisrKyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9pcnEuYwpAQCAtNDIzLDggKzQyMywzIEBACiAgICAgICAgIHNldF9laWVtKGNwdV9laWVtKTsJLyogRUlFTSA6IGVuYWJsZSBhbGwgZXh0ZXJuYWwgaW50ciAqLwogCiB9Ci0KLXZvaWQgYWNrX2JhZF9pcnEodW5zaWduZWQgaW50IGlycSkKLXsKLQlwcmludGsoS0VSTl9XQVJOSU5HICJ1bmV4cGVjdGVkIElSUSAlZFxuIiwgaXJxKTsKLX0KZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2tlcm5lbC9tb2R1bGUuYyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9tb2R1bGUuYwppbmRleCA2MWVlMGVlLi4yMTIwNzQ2IDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9rZXJuZWwvbW9kdWxlLmMKKysrIGIvYXJjaC9wYXJpc2Mva2VybmVsL21vZHVsZS5jCkBAIC04OTMsNyArODkzLDcgQEAKIAkgKiBvdXJzZWx2ZXMgKi8KIAlmb3IgKGkgPSAxOyBpIDwgaGRyLT5lX3NobnVtOyBpKyspIHsKIAkJaWYoc2VjaGRyc1tpXS5zaF90eXBlID09IFNIVF9TWU1UQUIKLQkJICAgJiYgKHNlY2hkcnNbaV0uc2hfdHlwZSAmIFNIRl9BTExPQykpIHsKKwkJICAgJiYgKHNlY2hkcnNbaV0uc2hfZmxhZ3MgJiBTSEZfQUxMT0MpKSB7CiAJCQlpbnQgc3RyaW5kZXggPSBzZWNoZHJzW2ldLnNoX2xpbms7CiAJCQkvKiBGSVhNRTogQVdGVUwgSEFDSwogCQkJICogVGhlIGNhc3QgaXMgdG8gZHJvcCB0aGUgY29uc3QgZnJvbQpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2Mva2VybmVsL3B0cmFjZS5jIGIvYXJjaC9wYXJpc2Mva2VybmVsL3B0cmFjZS5jCmluZGV4IDkyN2RiMzYuLmM0ZjQ5ZTQgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2tlcm5lbC9wdHJhY2UuYworKysgYi9hcmNoL3BhcmlzYy9rZXJuZWwvcHRyYWNlLmMKQEAgLTEzLDYgKzEzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgorI2luY2x1ZGUgPGxpbnV4L3RyYWNlaG9vay5oPgogI2luY2x1ZGUgPGxpbnV4L3VzZXIuaD4KICNpbmNsdWRlIDxsaW51eC9wZXJzb25hbGl0eS5oPgogI2luY2x1ZGUgPGxpbnV4L3NlY3VyaXR5Lmg+CkBAIC0zNSw3ICszNiw4IEBACiAgKi8KIHZvaWQgcHRyYWNlX2Rpc2FibGUoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQogewotCXRhc2stPnB0cmFjZSAmPSB+KFBUX1NJTkdMRVNURVB8UFRfQkxPQ0tTVEVQKTsKKwljbGVhcl90c2tfdGhyZWFkX2ZsYWcodGFzaywgVElGX1NJTkdMRVNURVApOworCWNsZWFyX3Rza190aHJlYWRfZmxhZyh0YXNrLCBUSUZfQkxPQ0tTVEVQKTsKIAogCS8qIG1ha2Ugc3VyZSB0aGUgdHJhcCBiaXRzIGFyZSBub3Qgc2V0ICovCiAJcGFfcHN3KHRhc2spLT5yID0gMDsKQEAgLTU1LDggKzU3LDggQEAKIAogdm9pZCB1c2VyX2VuYWJsZV9zaW5nbGVfc3RlcChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCiB7Ci0JdGFzay0+cHRyYWNlICY9IH5QVF9CTE9DS1NURVA7Ci0JdGFzay0+cHRyYWNlIHw9IFBUX1NJTkdMRVNURVA7CisJY2xlYXJfdHNrX3RocmVhZF9mbGFnKHRhc2ssIFRJRl9CTE9DS1NURVApOworCXNldF90c2tfdGhyZWFkX2ZsYWcodGFzaywgVElGX1NJTkdMRVNURVApOwogCiAJaWYgKHBhX3Bzdyh0YXNrKS0+bikgewogCQlzdHJ1Y3Qgc2lnaW5mbyBzaTsKQEAgLTk4LDggKzEwMCw4IEBACiAKIHZvaWQgdXNlcl9lbmFibGVfYmxvY2tfc3RlcChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCiB7Ci0JdGFzay0+cHRyYWNlICY9IH5QVF9TSU5HTEVTVEVQOwotCXRhc2stPnB0cmFjZSB8PSBQVF9CTE9DS1NURVA7CisJY2xlYXJfdHNrX3RocmVhZF9mbGFnKHRhc2ssIFRJRl9TSU5HTEVTVEVQKTsKKwlzZXRfdHNrX3RocmVhZF9mbGFnKHRhc2ssIFRJRl9CTE9DS1NURVApOwogCiAJLyogRW5hYmxlIHRha2VuIGJyYW5jaCB0cmFwLiAqLwogCXBhX3Bzdyh0YXNrKS0+ciA9IDA7CkBAIC0yNjMsMjIgKzI2NSwyMCBAQAogfQogI2VuZGlmCiAKLQotdm9pZCBzeXNjYWxsX3RyYWNlKHZvaWQpCitsb25nIGRvX3N5c2NhbGxfdHJhY2VfZW50ZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7Ci0JaWYgKCF0ZXN0X3RocmVhZF9mbGFnKFRJRl9TWVNDQUxMX1RSQUNFKSkKLQkJcmV0dXJuOwotCWlmICghKGN1cnJlbnQtPnB0cmFjZSAmIFBUX1BUUkFDRUQpKQotCQlyZXR1cm47Ci0JcHRyYWNlX25vdGlmeShTSUdUUkFQIHwgKChjdXJyZW50LT5wdHJhY2UgJiBQVF9UUkFDRVNZU0dPT0QpCi0JCQkJID8gMHg4MCA6IDApKTsKLQkvKgotCSAqIHRoaXMgaXNuJ3QgdGhlIHNhbWUgYXMgY29udGludWluZyB3aXRoIGEgc2lnbmFsLCBidXQgaXQgd2lsbCBkbwotCSAqIGZvciBub3JtYWwgdXNlLiAgc3RyYWNlIG9ubHkgY29udGludWVzIHdpdGggYSBzaWduYWwgaWYgdGhlCi0JICogc3RvcHBpbmcgc2lnbmFsIGlzIG5vdCBTSUdUUkFQLiAgLWJybAotCSAqLwotCWlmIChjdXJyZW50LT5leGl0X2NvZGUpIHsKLQkJc2VuZF9zaWcoY3VycmVudC0+ZXhpdF9jb2RlLCBjdXJyZW50LCAxKTsKLQkJY3VycmVudC0+ZXhpdF9jb2RlID0gMDsKLQl9CisJaWYgKHRlc3RfdGhyZWFkX2ZsYWcoVElGX1NZU0NBTExfVFJBQ0UpICYmCisJICAgIHRyYWNlaG9va19yZXBvcnRfc3lzY2FsbF9lbnRyeShyZWdzKSkKKwkJcmV0dXJuIC0xTDsKKworCXJldHVybiByZWdzLT5nclsyMF07Cit9CisKK3ZvaWQgZG9fc3lzY2FsbF90cmFjZV9leGl0KHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCWludCBzdGVwcGluZyA9IHRlc3RfdGhyZWFkX2ZsYWcoVElGX1NJTkdMRVNURVApIHx8CisJCXRlc3RfdGhyZWFkX2ZsYWcoVElGX0JMT0NLU1RFUCk7CisKKwlpZiAoc3RlcHBpbmcgfHwgdGVzdF90aHJlYWRfZmxhZyhUSUZfU1lTQ0FMTF9UUkFDRSkpCisJCXRyYWNlaG9va19yZXBvcnRfc3lzY2FsbF9leGl0KHJlZ3MsIHN0ZXBwaW5nKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2tlcm5lbC9zaWduYWwuYyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9zaWduYWwuYwppbmRleCA4ZWIzYzYzLi5lODQ2N2U0IDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9rZXJuZWwvc2lnbmFsLmMKKysrIGIvYXJjaC9wYXJpc2Mva2VybmVsL3NpZ25hbC5jCkBAIC0yMSw2ICsyMSw3IEBACiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CiAjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CisjaW5jbHVkZSA8bGludXgvdHJhY2Vob29rLmg+CiAjaW5jbHVkZSA8bGludXgvdW5pc3RkLmg+CiAjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGF0Lmg+CkBAIC0zNCw3ICszNSw2IEBACiAjaW5jbHVkZSA8YXNtL2FzbS1vZmZzZXRzLmg+CiAKICNpZmRlZiBDT05GSUdfQ09NUEFUCi0jaW5jbHVkZSA8bGludXgvY29tcGF0Lmg+CiAjaW5jbHVkZSAic2lnbmFsMzIuaCIKICNlbmRpZgogCkBAIC00NjgsNiArNDY4LDkgQEAKIAkJc2lnYWRkc2V0KCZjdXJyZW50LT5ibG9ja2VkLHNpZyk7CiAJcmVjYWxjX3NpZ3BlbmRpbmcoKTsKIAlzcGluX3VubG9ja19pcnEoJmN1cnJlbnQtPnNpZ2hhbmQtPnNpZ2xvY2spOworCisJdHJhY2Vob29rX3NpZ25hbF9oYW5kbGVyKHNpZywgaW5mbywga2EsIHJlZ3MsIDApOworCiAJcmV0dXJuIDE7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2tlcm5lbC9zeXNjYWxsLlMgYi9hcmNoL3BhcmlzYy9rZXJuZWwvc3lzY2FsbC5TCmluZGV4IDU5ZmMxYTQuLmY1Zjk2MDIgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2tlcm5lbC9zeXNjYWxsLlMKKysrIGIvYXJjaC9wYXJpc2Mva2VybmVsL3N5c2NhbGwuUwpAQCAtMjg4LDE4ICsyODgsMjMgQEAKIAlTVFJFRwklcjE4LFBUX0dSMTgoJXIyKQogCS8qIEZpbmlzaGVkIHNhdmluZyB0aGluZ3MgZm9yIHRoZSBkZWJ1Z2dlciAqLwogCi0JbGRpbAlMJXN5c2NhbGxfdHJhY2UsJXIxCisJY29weQklcjIsJXIyNgorCWxkaWwJTCVkb19zeXNjYWxsX3RyYWNlX2VudGVyLCVyMQogCWxkaWwJTCV0cmFjZXN5c19uZXh0LCVyMgotCWJlCVIlc3lzY2FsbF90cmFjZSglc3I3LCVyMSkKKwliZQlSJWRvX3N5c2NhbGxfdHJhY2VfZW50ZXIoJXNyNywlcjEpCiAJbGRvCVIldHJhY2VzeXNfbmV4dCglcjIpLCVyMgogCQotdHJhY2VzeXNfbmV4dDoJCit0cmFjZXN5c19uZXh0OgorCS8qIGRvX3N5c2NhbGxfdHJhY2VfZW50ZXIgZWl0aGVyIHJldHVybmVkIHRoZSBzeXNjYWxsbm8sIG9yIC0xTCwKKwkgKiAgc28gd2Ugc2tpcCByZXN0b3JpbmcgdGhlIFBUX0dSMjAgYmVsb3csIHNpbmNlIHdlIHB1bGxlZCBpdCBmcm9tCisJICogIHRhc2stPnRocmVhZC5yZWdzLmdyWzIwXSBhYm92ZS4KKwkgKi8KKwljb3B5CSVyZXQwLCVyMjAKIAlsZGlsCUwlc3lzX2NhbGxfdGFibGUsJXIxCiAJbGRvICAgICBSJXN5c19jYWxsX3RhYmxlKCVyMSksICVyMTkKIAogCWxkbyAgICAgLVRIUkVBRF9TWl9BTEdOLUZSQU1FX1NJWkUoJXIzMCksJXIxICAgICAgLyogZ2V0IHRhc2sgcHRyICovCiAJTERSRUcJVElfVEFTSyglcjEpLCAlcjEKLQlMRFJFRyAgIFRBU0tfUFRfR1IyMCglcjEpLCAlcjIwCiAJTERSRUcgICBUQVNLX1BUX0dSMjYoJXIxKSwgJXIyNgkJLyogUmVzdG9yZSB0aGUgdXNlcnMgYXJncyAqLwogCUxEUkVHICAgVEFTS19QVF9HUjI1KCVyMSksICVyMjUKIAlMRFJFRyAgIFRBU0tfUFRfR1IyNCglcjEpLCAlcjI0CkBAIC0zMzYsNyArMzQxLDggQEAKICNpZmRlZiBDT05GSUdfNjRCSVQKIAlsZG8JLTE2KCVyMzApLCVyMjkJCQkvKiBSZWZlcmVuY2UgcGFyYW0gc2F2ZSBhcmVhICovCiAjZW5kaWYKLQlibAlzeXNjYWxsX3RyYWNlLCAlcjIKKwlsZG8JVEFTS19SRUdTKCVyMSksJXIyNgorCWJsCWRvX3N5c2NhbGxfdHJhY2VfZXhpdCwlcjIKIAlTVFJFRyAgICVyMjgsVEFTS19QVF9HUjI4KCVyMSkgICAgICAgICAgLyogc2F2ZSByZXR1cm4gdmFsdWUgbm93ICovCiAJbGRvICAgICAtVEhSRUFEX1NaX0FMR04tRlJBTUVfU0laRSglcjMwKSwlcjEgICAgICAvKiBnZXQgdGFzayBwdHIgKi8KIAlMRFJFRwlUSV9UQVNLKCVyMSksICVyMQpAQCAtMzUzLDEyICszNTksMTIgQEAKIAogdHJhY2VzeXNfc2lnZXhpdDoKIAlsZG8gICAgIC1USFJFQURfU1pfQUxHTi1GUkFNRV9TSVpFKCVyMzApLCVyMSAgICAgIC8qIGdldCB0YXNrIHB0ciAqLwotCUxEUkVHCTAoJXIxKSwgJXIxCisJTERSRUcJVElfVEFTSyglcjEpLCAlcjEKICNpZmRlZiBDT05GSUdfNjRCSVQKIAlsZG8JLTE2KCVyMzApLCVyMjkJCQkvKiBSZWZlcmVuY2UgcGFyYW0gc2F2ZSBhcmVhICovCiAjZW5kaWYKLQlibAlzeXNjYWxsX3RyYWNlLCAlcjIKLQlub3AKKwlibAlkb19zeXNjYWxsX3RyYWNlX2V4aXQsJXIyCisJbGRvCVRBU0tfUkVHUyglcjEpLCVyMjYKIAogCWxkaWwJTCVzeXNjYWxsX2V4aXRfcmZpLCVyMQogCWJlLG4JUiVzeXNjYWxsX2V4aXRfcmZpKCVzcjcsJXIxKQpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2Mva2VybmVsL3ZtbGludXgubGRzLlMgYi9hcmNoL3BhcmlzYy9rZXJuZWwvdm1saW51eC5sZHMuUwppbmRleCBhZWExNzg0Li5mZGE0YmFhIDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9rZXJuZWwvdm1saW51eC5sZHMuUworKysgYi9hcmNoL3BhcmlzYy9rZXJuZWwvdm1saW51eC5sZHMuUwpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgPGFzbS9jYWNoZS5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAjaW5jbHVkZSA8YXNtL2FzbS1vZmZzZXRzLmg+CisjaW5jbHVkZSA8YXNtL3RocmVhZF9pbmZvLmg+CiAJCiAvKiBsZCBzY3JpcHQgdG8gbWFrZSBocHBhIExpbnV4IGtlcm5lbCAqLwogI2lmbmRlZiBDT05GSUdfNjRCSVQKQEAgLTc3LDEzICs3OCw3IEBACiAJICovCiAJLiA9IEFMSUdOKFBBR0VfU0laRSk7CiAJZGF0YV9zdGFydCA9IC47Ci0JLiA9IEFMSUdOKDE2KTsKLQkvKiBFeGNlcHRpb24gdGFibGUgKi8KLQlfX2V4X3RhYmxlIDogewotCQlfX3N0YXJ0X19fZXhfdGFibGUgPSAuOwotCQkqKF9fZXhfdGFibGUpCi0JCV9fc3RvcF9fX2V4X3RhYmxlID0gLjsKLQl9CisJRVhDRVBUSU9OX1RBQkxFKDE2KQogCiAJTk9URVMKIApAQCAtOTQsMjMgKzg5LDggQEAKIAkJX19zdG9wX19fdW53aW5kID0gLjsKIAl9CiAKLQkvKiByYXJlbHkgY2hhbmdlZCBkYXRhIGxpa2UgY3B1IG1hcHMgKi8KLQkuID0gQUxJR04oMTYpOwotCS5kYXRhLnJlYWRfbW9zdGx5IDogewotCQkqKC5kYXRhLnJlYWRfbW9zdGx5KQotCX0KLQotCS4gPSBBTElHTihMMV9DQUNIRV9CWVRFUyk7CiAJLyogRGF0YSAqLwotCS5kYXRhIDogewotCQlEQVRBX0RBVEEKLQkJQ09OU1RSVUNUT1JTCi0JfQotCi0JLiA9IEFMSUdOKEwxX0NBQ0hFX0JZVEVTKTsKLQkuZGF0YS5jYWNoZWxpbmVfYWxpZ25lZCA6IHsKLQkJKiguZGF0YS5jYWNoZWxpbmVfYWxpZ25lZCkKLQl9CisJUldfREFUQV9TRUNUSU9OKEwxX0NBQ0hFX0JZVEVTLCBQQUdFX1NJWkUsIFRIUkVBRF9TSVpFKQogCiAJLyogUEEtUklTQyBsb2NrcyByZXF1aXJlcyAxNi1ieXRlIGFsaWdubWVudCAqLwogCS4gPSBBTElHTigxNik7CkBAIC0xMTgsMTcgKzk4LDYgQEAKIAkJKiguZGF0YS5sb2NrX2FsaWduZWQpCiAJfQogCi0JLyogbm9zYXZlIGRhdGEgaXMgcmVhbGx5IG9ubHkgdXNlZCBmb3Igc29mdHdhcmUgc3VzcGVuZC4uLml0J3MgaGVyZQotCSAqIGp1c3QgaW4gY2FzZSB3ZSBldmVyIGltcGxlbWVudCBpdAotCSAqLwotCS4gPSBBTElHTihQQUdFX1NJWkUpOwotCV9fbm9zYXZlX2JlZ2luID0gLjsKLQkuZGF0YV9ub3NhdmUgOiB7Ci0JCSooLmRhdGEubm9zYXZlKQotCX0KLQkuID0gQUxJR04oUEFHRV9TSVpFKTsKLQlfX25vc2F2ZV9lbmQgPSAuOwotCiAJLyogRW5kIG9mIGRhdGEgc2VjdGlvbiAqLwogCV9lZGF0YSA9IC47CiAKQEAgLTE0NywxNCArMTE2LDYgQEAKIAl9CiAJX19ic3Nfc3RvcCA9IC47CiAKLQotCS8qIGFzc2VtYmxlciBjb2RlIGV4cGVjdHMgaW5pdF90YXNrIHRvIGJlIDE2ayBhbGlnbmVkICovCi0JLiA9IEFMSUdOKDE2Mzg0KTsKLQkvKiBpbml0X3Rhc2sgKi8KLQkuZGF0YS5pbml0X3Rhc2sgOiB7Ci0JCSooLmRhdGEuaW5pdF90YXNrKQotCX0KLQogI2lmZGVmIENPTkZJR182NEJJVAogCS4gPSBBTElHTigxNik7CiAJLyogTGlua2FnZSB0YWJsZXMgKi8KQEAgLTE3Miw2NCArMTMzLDE3IEBACiAJLyogcmVzZXJ2ZSBzcGFjZSBmb3IgaW50ZXJydXB0IHN0YWNrIGJ5IGFsaWduaW5nIF9faW5pdCogdG8gMTZrICovCiAJLiA9IEFMSUdOKDE2Mzg0KTsKIAlfX2luaXRfYmVnaW4gPSAuOwotCS5pbml0LnRleHQgOiB7IAotCQlfc2luaXR0ZXh0ID0gLjsKLQkJSU5JVF9URVhUCi0JCV9laW5pdHRleHQgPSAuOwotCX0KLQkuaW5pdC5kYXRhIDogewotCQlJTklUX0RBVEEKLQl9Ci0JLiA9IEFMSUdOKDE2KTsKLQkuaW5pdC5zZXR1cCA6IHsKLQkJX19zZXR1cF9zdGFydCA9IC47Ci0JCSooLmluaXQuc2V0dXApCi0JCV9fc2V0dXBfZW5kID0gLjsKLQl9Ci0JLmluaXRjYWxsLmluaXQgOiB7Ci0JCV9faW5pdGNhbGxfc3RhcnQgPSAuOwotCQlJTklUQ0FMTFMKLQkJX19pbml0Y2FsbF9lbmQgPSAuOwotCX0KLQkuY29uX2luaXRjYWxsLmluaXQgOiB7Ci0JCV9fY29uX2luaXRjYWxsX3N0YXJ0ID0gLjsKLQkJKiguY29uX2luaXRjYWxsLmluaXQpCi0JCV9fY29uX2luaXRjYWxsX2VuZCA9IC47Ci0JfQotCVNFQ1VSSVRZX0lOSVQKLQotCS8qIGFsdGVybmF0ZSBpbnN0cnVjdGlvbiByZXBsYWNlbWVudC4gIFRoaXMgaXMgYSBtZWNoYW5pc20geDg2IHVzZXMKLQkgKiB0byBkZXRlY3QgdGhlIENQVSB0eXBlIGFuZCByZXBsYWNlIGdlbmVyaWMgaW5zdHJ1Y3Rpb24gc2VxdWVuY2VzCi0JICogd2l0aCBDUFUgc3BlY2lmaWMgb25lcy4gIFdlIGRvbid0IGN1cnJlbnRseSBkbyB0aGlzIGluIFBBLCBidXQKLQkgKiBpdCBzZWVtcyBsaWtlIGEgZ29vZCBpZGVhLi4uCi0JICovCi0JLiA9IEFMSUdOKDQpOwotCS5hbHRpbnN0cnVjdGlvbnMgOiB7Ci0JCV9fYWx0X2luc3RydWN0aW9ucyA9IC47Ci0JCSooLmFsdGluc3RydWN0aW9ucykKLQkJX19hbHRfaW5zdHJ1Y3Rpb25zX2VuZCA9IC47IAotCX0gCi0JLmFsdGluc3RyX3JlcGxhY2VtZW50IDogewotCQkqKC5hbHRpbnN0cl9yZXBsYWNlbWVudCkKLQl9IAotCi0JLyogLmV4aXQudGV4dCBpcyBkaXNjYXJkIGF0IHJ1bnRpbWUsIG5vdCBsaW5rIHRpbWUsIHRvIGRlYWwgd2l0aCByZWZlcmVuY2VzCi0JICogIGZyb20gLmFsdGluc3RydWN0aW9ucyBhbmQgLmVoX2ZyYW1lCi0JICovCi0JLmV4aXQudGV4dCA6IHsKKwlJTklUX1RFWFRfU0VDVElPTigxNjM4NCkKKwlJTklUX0RBVEFfU0VDVElPTigxNikKKwkvKiB3ZSBoYXZlIHRvIGRpc2NhcmQgZXhpdCB0ZXh0IGFuZCBzdWNoIGF0IHJ1bnRpbWUsIG5vdCBsaW5rIHRpbWUgKi8KKwkuZXhpdC50ZXh0IDoKKwl7CiAJCUVYSVRfVEVYVAogCX0KLQkuZXhpdC5kYXRhIDogeworCS5leGl0LmRhdGEgOgorCXsKIAkJRVhJVF9EQVRBCiAJfQotI2lmZGVmIENPTkZJR19CTEtfREVWX0lOSVRSRAotCS4gPSBBTElHTihQQUdFX1NJWkUpOwotCS5pbml0LnJhbWZzIDogewotCQlfX2luaXRyYW1mc19zdGFydCA9IC47Ci0JCSooLmluaXQucmFtZnMpCi0JCV9faW5pdHJhbWZzX2VuZCA9IC47Ci0JfQotI2VuZGlmCiAKIAlQRVJDUFUoUEFHRV9TSVpFKQogCS4gPSBBTElHTihQQUdFX1NJWkUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2MvbW0vaW5pdC5jIGIvYXJjaC9wYXJpc2MvbW0vaW5pdC5jCmluZGV4IGQ1YWNhMzEuLjEzYjZlM2UgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL21tL2luaXQuYworKysgYi9hcmNoL3BhcmlzYy9tbS9pbml0LmMKQEAgLTQzNCw4ICs0MzQsOCBAQAogI2RlZmluZSBTRVRfTUFQX09GRlNFVCh4KSAoKHZvaWQgKikoKCh1bnNpZ25lZCBsb25nKSh4KSArIFZNX01BUF9PRkZTRVQpIFwKIAkJCQkgICAgICYgfihWTV9NQVBfT0ZGU0VULTEpKSkKIAotdm9pZCAqdm1hbGxvY19zdGFydCBfX3JlYWRfbW9zdGx5OwotRVhQT1JUX1NZTUJPTCh2bWFsbG9jX3N0YXJ0KTsKK3ZvaWQgKnBhcmlzY192bWFsbG9jX3N0YXJ0IF9fcmVhZF9tb3N0bHk7CitFWFBPUlRfU1lNQk9MKHBhcmlzY192bWFsbG9jX3N0YXJ0KTsKIAogI2lmZGVmIENPTkZJR19QQTExCiB1bnNpZ25lZCBsb25nIHBjeGxfZG1hX3N0YXJ0IF9fcmVhZF9tb3N0bHk7CkBAIC00OTYsMTMgKzQ5NiwxNCBAQAogI2lmZGVmIENPTkZJR19QQTExCiAJaWYgKGhwcGFfZG1hX29wcyA9PSAmcGN4bF9kbWFfb3BzKSB7CiAJCXBjeGxfZG1hX3N0YXJ0ID0gKHVuc2lnbmVkIGxvbmcpU0VUX01BUF9PRkZTRVQoTUFQX1NUQVJUKTsKLQkJdm1hbGxvY19zdGFydCA9IFNFVF9NQVBfT0ZGU0VUKHBjeGxfZG1hX3N0YXJ0ICsgUENYTF9ETUFfTUFQX1NJWkUpOworCQlwYXJpc2Nfdm1hbGxvY19zdGFydCA9IFNFVF9NQVBfT0ZGU0VUKHBjeGxfZG1hX3N0YXJ0CisJCQkJCQkrIFBDWExfRE1BX01BUF9TSVpFKTsKIAl9IGVsc2UgewogCQlwY3hsX2RtYV9zdGFydCA9IDA7Ci0JCXZtYWxsb2Nfc3RhcnQgPSBTRVRfTUFQX09GRlNFVChNQVBfU1RBUlQpOworCQlwYXJpc2Nfdm1hbGxvY19zdGFydCA9IFNFVF9NQVBfT0ZGU0VUKE1BUF9TVEFSVCk7CiAJfQogI2Vsc2UKLQl2bWFsbG9jX3N0YXJ0ID0gU0VUX01BUF9PRkZTRVQoTUFQX1NUQVJUKTsKKwlwYXJpc2Nfdm1hbGxvY19zdGFydCA9IFNFVF9NQVBfT0ZGU0VUKE1BUF9TVEFSVCk7CiAjZW5kaWYKIAogCXByaW50ayhLRVJOX0lORk8gIk1lbW9yeTogJWx1ay8lbHVrIGF2YWlsYWJsZSAoJWRrIGtlcm5lbCBjb2RlLCAlZGsgcmVzZXJ2ZWQsICVkayBkYXRhLCAlZGsgaW5pdClcbiIsCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvS2NvbmZpZyBiL2FyY2gvcG93ZXJwYy9LY29uZmlnCmluZGV4IDRmZDQ3OTAuLjEwYTBhNTQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9LY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9LY29uZmlnCkBAIC0zODUsOSArMzg1LDE1IEBACiAKIGNvbmZpZyBOT0RFU19TSElGVAogCWludAorCWRlZmF1bHQgIjgiIGlmIFBQQzY0CiAJZGVmYXVsdCAiNCIKIAlkZXBlbmRzIG9uIE5FRURfTVVMVElQTEVfTk9ERVMKIAorY29uZmlnIE1BWF9BQ1RJVkVfUkVHSU9OUworCWludAorCWRlZmF1bHQgIjI1NiIgaWYgUFBDNjQKKwlkZWZhdWx0ICIzMiIKKwogY29uZmlnIEFSQ0hfU0VMRUNUX01FTU9SWV9NT0RFTAogCWRlZl9ib29sIHkKIAlkZXBlbmRzIG9uIFBQQzY0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvTWFrZWZpbGUgYi9hcmNoL3Bvd2VycGMvTWFrZWZpbGUKaW5kZXggYWFjZjYyOS4uMWE1NGEzYiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL01ha2VmaWxlCisrKyBiL2FyY2gvcG93ZXJwYy9NYWtlZmlsZQpAQCAtMTY0LDYgKzE2NCwxNyBAQAogCiBib290IDo9IGFyY2gvJChBUkNIKS9ib290CiAKK2lmZXEgKCQoQ09ORklHX1JFTE9DQVRBQkxFKSx5KQorcXVpZXRfY21kX3JlbG9jc19jaGVjayA9IENBTEwgICAgJDwKKyAgICAgIGNtZF9yZWxvY3NfY2hlY2sgPSBwZXJsICQ8ICIkKE9CSkRVTVApIiAiJChvYmopL3ZtbGludXgiCisKK1BIT05ZICs9IHJlbG9jc19jaGVjaworcmVsb2NzX2NoZWNrOiBhcmNoL3Bvd2VycGMvcmVsb2NzX2NoZWNrLnBsIHZtbGludXgKKwkkKGNhbGwgY21kLHJlbG9jc19jaGVjaykKKworekltYWdlOiByZWxvY3NfY2hlY2sKK2VuZGlmCisKICQoQk9PVF9UQVJHRVRTKTogdm1saW51eAogCSQoUSkkKE1BS0UpIEFSQ0g9cHBjNjQgJChidWlsZCk9JChib290KSAkKHBhdHN1YnN0ICUsJChib290KS8lLCRAKQogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvY201MjAwLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9jbTUyMDAuZHRzCmluZGV4IGNlZTgwODAuLmRkMzg2MDggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9jbTUyMDAuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9jbTUyMDAuZHRzCkBAIC0yMTAsNyArMjEwLDYgQEAKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWkyYyIsImZzbCxtcGM1MjAwLWkyYyIsImZzbC1pMmMiOwogCQkJcmVnID0gPDB4M2Q0MCAweDQwPjsKIAkJCWludGVycnVwdHMgPSA8MiAxNiAwPjsKLQkJCWZzbDUyMDAtY2xvY2tpbmc7CiAJCX07CiAKIAkJc3JhbUA4MDAwIHsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9kaWdzeV9tdGMuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2RpZ3N5X210Yy5kdHMKaW5kZXggNGMzNjE4Ni4uOGU5YmU2YiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2RpZ3N5X210Yy5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2RpZ3N5X210Yy5kdHMKQEAgLTE5OSw3ICsxOTksNiBAQAogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItaTJjIiwiZnNsLG1wYzUyMDAtaTJjIiwiZnNsLWkyYyI7CiAJCQlyZWcgPSA8MHgzZDAwIDB4NDA+OwogCQkJaW50ZXJydXB0cyA9IDwyIDE1IDA+OwotCQkJZnNsNTIwMC1jbG9ja2luZzsKIAogCQkJcnRjQDUwIHsKIAkJCQljb21wYXRpYmxlID0gImF0LDI0YzA4IjsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9saXRlNTIwMC5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbGl0ZTUyMDAuZHRzCmluZGV4IGRlMzBiM2YuLjgyZmYyYjEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9saXRlNTIwMC5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2xpdGU1MjAwLmR0cwpAQCAtMjQ3LDcgKzI0Nyw2IEBACiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwLWkyYyIsImZzbC1pMmMiOwogCQkJcmVnID0gPDB4M2QwMCAweDQwPjsKIAkJCWludGVycnVwdHMgPSA8MiAxNSAwPjsKLQkJCWZzbDUyMDAtY2xvY2tpbmc7CiAJCX07CiAKIAkJaTJjQDNkNDAgewpAQCAtMjU2LDcgKzI1NSw2IEBACiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwLWkyYyIsImZzbC1pMmMiOwogCQkJcmVnID0gPDB4M2Q0MCAweDQwPjsKIAkJCWludGVycnVwdHMgPSA8MiAxNiAwPjsKLQkJCWZzbDUyMDAtY2xvY2tpbmc7CiAJCX07CiAJCXNyYW1AODAwMCB7CiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwLXNyYW0iOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2xpdGU1MjAwYi5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbGl0ZTUyMDBiLmR0cwppbmRleCBkMTNjYjExLi5lNDVhNjNiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbGl0ZTUyMDBiLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbGl0ZTUyMDBiLmR0cwpAQCAtMjUxLDcgKzI1MSw2IEBACiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1pMmMiLCJmc2wsbXBjNTIwMC1pMmMiLCJmc2wtaTJjIjsKIAkJCXJlZyA9IDwweDNkMDAgMHg0MD47CiAJCQlpbnRlcnJ1cHRzID0gPDIgMTUgMD47Ci0JCQlmc2w1MjAwLWNsb2NraW5nOwogCQl9OwogCiAJCWkyY0AzZDQwIHsKQEAgLTI2MCw3ICsyNTksNiBAQAogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItaTJjIiwiZnNsLG1wYzUyMDAtaTJjIiwiZnNsLWkyYyI7CiAJCQlyZWcgPSA8MHgzZDQwIDB4NDA+OwogCQkJaW50ZXJydXB0cyA9IDwyIDE2IDA+OwotCQkJZnNsNTIwMC1jbG9ja2luZzsKIAkJfTsKIAogCQlzcmFtQDgwMDAgewpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21lZGlhNTIwMC5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbWVkaWE1MjAwLmR0cwppbmRleCBlMjk3ZDhiLi4wYzM5MDJiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbWVkaWE1MjAwLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbWVkaWE1MjAwLmR0cwpAQCAtMjIzLDcgKzIyMyw2IEBACiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1pMmMiLCJmc2wsbXBjNTIwMC1pMmMiLCJmc2wtaTJjIjsKIAkJCXJlZyA9IDwweDNkMDAgMHg0MD47CiAJCQlpbnRlcnJ1cHRzID0gPDIgMTUgMD47Ci0JCQlmc2w1MjAwLWNsb2NraW5nOwogCQl9OwogCiAJCWkyY0AzZDQwIHsKQEAgLTIzMiw3ICsyMzEsNiBAQAogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItaTJjIiwiZnNsLG1wYzUyMDAtaTJjIiwiZnNsLWkyYyI7CiAJCQlyZWcgPSA8MHgzZDQwIDB4NDA+OwogCQkJaW50ZXJydXB0cyA9IDwyIDE2IDA+OwotCQkJZnNsNTIwMC1jbG9ja2luZzsKIAkJfTsKIAogCQlzcmFtQDgwMDAgewpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21vdGlvbnByby5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbW90aW9ucHJvLmR0cwppbmRleCA3YmU4Y2EwLi42Y2E0ZmMxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbW90aW9ucHJvLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbW90aW9ucHJvLmR0cwpAQCAtMjIyLDcgKzIyMiw2IEBACiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1pMmMiLCJmc2wsbXBjNTIwMC1pMmMiLCJmc2wtaTJjIjsKIAkJCXJlZyA9IDwweDNkNDAgMHg0MD47CiAJCQlpbnRlcnJ1cHRzID0gPDIgMTYgMD47Ci0JCQlmc2w1MjAwLWNsb2NraW5nOwogCiAJCQlydGNANjggewogCQkJCWNvbXBhdGlibGUgPSAiZGFsbGFzLGRzMTMzOSI7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjNTEyMWFkcy5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjNTEyMWFkcy5kdHMKaW5kZXggYzJiOGRiZi4uYzM1M2RhYyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzUxMjFhZHMuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM1MTIxYWRzLmR0cwpAQCAtMjA5LDcgKzIwOSw2IEBACiAJCQlyZWcgPSA8MHgxNzAwIDB4MjA+OwogCQkJaW50ZXJydXB0cyA9IDw5IDB4OD47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCAmaXBpYyA+OwotCQkJZnNsNTIwMC1jbG9ja2luZzsKIAkJfTsKIAogCQlpMmNAMTcyMCB7CkBAIC0yMjAsNyArMjE5LDYgQEAKIAkJCXJlZyA9IDwweDE3MjAgMHgyMD47CiAJCQlpbnRlcnJ1cHRzID0gPDEwIDB4OD47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCAmaXBpYyA+OwotCQkJZnNsNTIwMC1jbG9ja2luZzsKIAkJfTsKIAogCQlpMmNAMTc0MCB7CkBAIC0yMzEsNyArMjI5LDYgQEAKIAkJCXJlZyA9IDwweDE3NDAgMHgyMD47CiAJCQlpbnRlcnJ1cHRzID0gPDExIDB4OD47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCAmaXBpYyA+OwotCQkJZnNsNTIwMC1jbG9ja2luZzsKIAkJfTsKIAogCQlpMmNjb250cm9sQDE3NjAgewpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL211Y21jNTIuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL211Y21jNTIuZHRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3MmE3NTgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXVjbWM1Mi5kdHMKQEAgLTAsMCArMSwzMzIgQEAKKy8qCisgKiBNYW5yb2xhbmQgbXVjbWM1MiBib2FyZCBEZXZpY2UgVHJlZSBTb3VyY2UKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZyBHbWJICisgKiBIZWlrbyBTY2hvY2hlciA8aHNAZGVueC5kZT4KKyAqIENvcHlyaWdodCAyMDA2LTIwMDcgU2VjcmV0IExhYiBUZWNobm9sb2dpZXMgTHRkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworL2R0cy12MS87CisKKy8geworCW1vZGVsID0gIm1hbnJvbGFuZCxtdWNtYzUyIjsKKwljb21wYXRpYmxlID0gIm1hbnJvbGFuZCxtdWNtYzUyIjsKKwkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkjc2l6ZS1jZWxscyA9IDwxPjsKKwlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CisKKwljcHVzIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDA+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+OwotCQkJZnNsNTIwMC1jbG9ja2luZzsKIAkJfTsKIAogCQlpMmNAM2Q0MCB7CkBAIC0yNTMsNyArMjUyLDYgQEAKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWkyYyIsImZzbCxtcGM1MjAwLWkyYyIsImZzbC1pMmMiOwogCQkJcmVnID0gPDB4M2Q0MCAweDQwPjsKIAkJCWludGVycnVwdHMgPSA8MiAxNiAwPjsKLQkJCWZzbDUyMDAtY2xvY2tpbmc7CiAJCQlydGNANTEgewogCQkJCWNvbXBhdGlibGUgPSAibnhwLHBjZjg1NjMiOwogCQkJCXJlZyA9IDwweDUxPjsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy90cW01MjAwLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy90cW01MjAwLmR0cwppbmRleCBjOTU5MGI1Li4xZGIwN2Y2IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvdHFtNTIwMC5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3RxbTUyMDAuZHRzCkBAIC0xNjAsNyArMTYwLDYgQEAKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDAtaTJjIiwiZnNsLWkyYyI7CiAJCQlyZWcgPSA8MHgzZDQwIDB4NDA+OwogCQkJaW50ZXJydXB0cyA9IDwyIDE2IDA+OwotCQkJZnNsNTIwMC1jbG9ja2luZzsKIAogCQkJIHJ0Y0A2OCB7CiAJCQkJY29tcGF0aWJsZSA9ICJkYWxsYXMsZHMxMzA3IjsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy91YzEwMS5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvdWMxMDEuZHRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxOTI2NGMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvdWMxMDEuZHRzCkBAIC0wLDAgKzEsMjg0IEBACisvKgorICogTWFucm9sYW5kIHVjMTAxIGJvYXJkIERldmljZSBUcmVlIFNvdXJjZQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nIEdtYkgKKyAqIEhlaWtvIFNjaG9jaGVyIDxoc0BkZW54LmRlPgorICogQ29weXJpZ2h0IDIwMDYtMjAwNyBTZWNyZXQgTGFiIFRlY2hub2xvZ2llcyBMdGQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisvZHRzLXYxLzsKKworLyB7CisJbW9kZWwgPSAibWFucm9sYW5kLHVjMTAxIjsKKwljb21wYXRpYmxlID0gIm1hbnJvbGFuZCx1YzEwMSI7CisJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJI3NpemUtY2VsbHMgPSA8MT47CisJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OworCisJY3B1cyB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKworCQlQb3dlclBDLDUyMDBAMCB7CisJCQlkZXZpY2VfdHlwZSA9ICJjcHUiOworCQkJcmVnID0gPDA+OworCQkJZC1jYWNoZS1saW5lLXNpemUgPSA8MzI+OworCQkJaS1jYWNoZS1saW5lLXNpemUgPSA8MzI+OworCQkJZC1jYWNoZS1zaXplID0gPDB4NDAwMD47CS8vIEwxLCAxNksKKwkJCWktY2FjaGUtc2l6ZSA9IDwweDQwMDA+OwkvLyBMMSwgMTZLCisJCQl0aW1lYmFzZS1mcmVxdWVuY3kgPSA8MD47CS8vIGZyb20gYm9vdGxvYWRlcgorCQkJYnVzLWZyZXF1ZW5jeSA9IDwwPjsJCS8vIGZyb20gYm9vdGxvYWRlcgorCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OwkJLy8gZnJvbSBib290bG9hZGVyCisJCX07CisJfTsKKworCW1lbW9yeSB7CisJCWRldmljZV90eXBlID0gIm1lbW9yeSI7CisJCXJlZyA9IDwweDAwMDAwMDAwIDB4MDQwMDAwMDA+OwkvLyA2NE1CCisJfTsKKworCXNvYzUyMDBAZjAwMDAwMDAgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MT47CisJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWltbXIiOworCQlyYW5nZXMgPSA8MCAweGYwMDAwMDAwIDB4MDAwMGMwMDA+OworCQlyZWcgPSA8MHhmMDAwMDAwMCAweDAwMDAwMTAwPjsKKwkJYnVzLWZyZXF1ZW5jeSA9IDwwPjsJCS8vIGZyb20gYm9vdGxvYWRlcgorCQlzeXN0ZW0tZnJlcXVlbmN5ID0gPDA+OwkJLy8gZnJvbSBib290bG9hZGVyCisKKwkJY2RtQDIwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1jZG0iLCJmc2wsbXBjNTIwMC1jZG0iOworCQkJcmVnID0gPDB4MjAwIDB4Mzg+OworCQl9OworCisJCW1wYzUyMDBfcGljOiBpbnRlcnJ1cHQtY29udHJvbGxlckA1MDAgeworCQkJLy8gNTIwMCBpbnRlcnJ1cHRzIGFyZSBlbmNvZGVkIGludG8gdHdvIGxldmVsczsKKwkJCWludGVycnVwdC1jb250cm9sbGVyOworCQkJI2ludGVycnVwdC1jZWxscyA9IDwzPjsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLXBpYyIsImZzbCxtcGM1MjAwLXBpYyI7CisJCQlyZWcgPSA8MHg1MDAgMHg4MD47CisJCX07CisKKwkJZ3B0MDogdGltZXJANjAwIHsJLy8gR2VuZXJhbCBQdXJwb3NlIFRpbWVyIGluIEdQSU8gbW9kZQorCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZ3B0IiwiZnNsLG1wYzUyMDAtZ3B0IjsKKwkJCXJlZyA9IDwweDYwMCAweDEwPjsKKwkJCWludGVycnVwdHMgPSA8MSA5IDA+OworCQkJZ3Bpby1jb250cm9sbGVyOworCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCX07CisKKwkJZ3B0MTogdGltZXJANjEwIHsJLy8gR2VuZXJhbCBQdXJwb3NlIFRpbWVyIGluIEdQSU8gbW9kZQorCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZ3B0IiwiZnNsLG1wYzUyMDAtZ3B0IjsKKwkJCXJlZyA9IDwweDYxMCAweDEwPjsKKwkJCWludGVycnVwdHMgPSA8MSAxMCAwPjsKKwkJCWdwaW8tY29udHJvbGxlcjsKKwkJCSNncGlvLWNlbGxzID0gPDI+OworCQl9OworCisJCWdwdDI6IHRpbWVyQDYyMCB7CS8vIEdlbmVyYWwgUHVycG9zZSBUaW1lciBpbiBHUElPIG1vZGUKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWdwdCIsImZzbCxtcGM1MjAwLWdwdCI7CisJCQlyZWcgPSA8MHg2MjAgMHgxMD47CisJCQlpbnRlcnJ1cHRzID0gPDEgMTEgMD47CisJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJfTsKKworCQlncHQzOiB0aW1lckA2MzAgewkvLyBHZW5lcmFsIFB1cnBvc2UgVGltZXIgaW4gR1BJTyBtb2RlCisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1ncHQiLCJmc2wsbXBjNTIwMC1ncHQiOworCQkJcmVnID0gPDB4NjMwIDB4MTA+OworCQkJaW50ZXJydXB0cyA9IDwxIDEyIDA+OworCQkJZ3Bpby1jb250cm9sbGVyOworCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCX07CisKKwkJZ3B0NDogdGltZXJANjQwIHsJLy8gR2VuZXJhbCBQdXJwb3NlIFRpbWVyIGluIEdQSU8gbW9kZQorCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZ3B0IiwiZnNsLG1wYzUyMDAtZ3B0IjsKKwkJCXJlZyA9IDwweDY0MCAweDEwPjsKKwkJCWludGVycnVwdHMgPSA8MSAxMyAwPjsKKwkJCWdwaW8tY29udHJvbGxlcjsKKwkJCSNncGlvLWNlbGxzID0gPDI+OworCQl9OworCisJCWdwdDU6IHRpbWVyQDY1MCB7CS8vIEdlbmVyYWwgUHVycG9zZSBUaW1lciBpbiBHUElPIG1vZGUKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWdwdCIsImZzbCxtcGM1MjAwLWdwdCI7CisJCQlyZWcgPSA8MHg2NTAgMHgxMD47CisJCQlpbnRlcnJ1cHRzID0gPDEgMTQgMD47CisJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJfTsKKworCQlncHQ2OiB0aW1lckA2NjAgewkvLyBHZW5lcmFsIFB1cnBvc2UgVGltZXIgaW4gR1BJTyBtb2RlCisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1ncHQiLCJmc2wsbXBjNTIwMC1ncHQiOworCQkJcmVnID0gPDB4NjYwIDB4MTA+OworCQkJaW50ZXJydXB0cyA9IDwxIDE1IDA+OworCQkJZ3Bpby1jb250cm9sbGVyOworCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCX07CisKKwkJZ3B0NzogdGltZXJANjcwIHsJLy8gR2VuZXJhbCBQdXJwb3NlIFRpbWVyIGluIEdQSU8gbW9kZQorCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZ3B0IiwiZnNsLG1wYzUyMDAtZ3B0IjsKKwkJCXJlZyA9IDwweDY3MCAweDEwPjsKKwkJCWludGVycnVwdHMgPSA8MSAxNiAwPjsKKwkJCWdwaW8tY29udHJvbGxlcjsKKwkJCSNncGlvLWNlbGxzID0gPDI+OworCQl9OworCisJCWdwaW9fc2ltcGxlOiBncGlvQGIwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1ncGlvIiwiZnNsLG1wYzUyMDAtZ3BpbyI7CisJCQlyZWcgPSA8MHhiMDAgMHg0MD47CisJCQlpbnRlcnJ1cHRzID0gPDEgNyAwPjsKKwkJCWdwaW8tY29udHJvbGxlcjsKKwkJCSNncGlvLWNlbGxzID0gPDI+OworCQl9OworCisJCWdwaW9fd2t1cDogZ3Bpb0BjMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZ3Bpby13a3VwIiwiZnNsLG1wYzUyMDAtZ3Bpby13a3VwIjsKKwkJCXJlZyA9IDwweGMwMCAweDQwPjsKKwkJCWludGVycnVwdHMgPSA8MSA4IDAgMCAzIDA+OworCQkJZ3Bpby1jb250cm9sbGVyOworCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCX07CisKKwkJZG1hLWNvbnRyb2xsZXJAMTIwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1iZXN0Y29tbSIsImZzbCxtcGM1MjAwLWJlc3Rjb21tIjsKKwkJCXJlZyA9IDwweDEyMDAgMHg4MD47CisJCQlpbnRlcnJ1cHRzID0gPDMgMCAwICAzIDEgMCAgMyAyIDAgIDMgMyAwCisJCQkgICAgICAgICAgICAgIDMgNCAwICAzIDUgMCAgMyA2IDAgIDMgNyAwCisJCQkgICAgICAgICAgICAgIDMgOCAwICAzIDkgMCAgMyAxMCAwICAzIDExIDAKKwkJCSAgICAgICAgICAgICAgMyAxMiAwICAzIDEzIDAgIDMgMTQgMCAgMyAxNSAwPjsKKwkJfTsKKworCQl4bGJAMWYwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi14bGIiLCJmc2wsbXBjNTIwMC14bGIiOworCQkJcmVnID0gPDB4MWYwMCAweDEwMD47CisJCX07CisKKwkJc2VyaWFsQDIwMDAgeyAvKiBQU0MxIGluIFVBUlQgbW9kZSAqLworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItcHNjLXVhcnQiLCJmc2wsbXBjNTIwMC1wc2MtdWFydCI7CisJCQlyZWcgPSA8MHgyMDAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8MiAxIDA+OworCQl9OworCisJCXNlcmlhbEAyMjAwIHsgLyogUFNDMiBpbiBVQVJUIG1vZGUgKi8KKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLXBzYy11YXJ0IiwiZnNsLG1wYzUyMDAtcHNjLXVhcnQiOworCQkJcmVnID0gPDB4MjIwMCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPDIgMiAwPjsKKwkJfTsKKworCQlzZXJpYWxAMmMwMCB7CQkvKiBQU0M2IGluIFVBUlQgbW9kZSAqLworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItcHNjLXVhcnQiLCJmc2wsbXBjNTIwMC1wc2MtdWFydCI7CisJCQlyZWcgPSA8MHgyYzAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8MiA0IDA+OworCQl9OworCisJCWV0aGVybmV0QDMwMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZmVjIiwiZnNsLG1wYzUyMDAtZmVjIjsKKwkJCXJlZyA9IDwweDMwMDAgMHg0MDA+OworCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CisJCQlpbnRlcnJ1cHRzID0gPDIgNSAwPjsKKwkJCXBoeS1oYW5kbGUgPSA8JnBoeTA+OworCQl9OworCisJCW1kaW9AMzAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItbWRpbyIsImZzbCxtcGM1MjAwLW1kaW8iOworCQkJcmVnID0gPDB4MzAwMCAweDQwMD47CS8vIGZlYyByYW5nZSwgc2luY2Ugd2UgbmVlZCB0byBzZXR1cCBmZWMgaW50ZXJydXB0cworCQkJaW50ZXJydXB0cyA9IDwyIDUgMD47CS8vIHRoZXNlIGFyZSBmb3IgIm1paSBjb21tYW5kIGZpbmlzaGVkIiwgbm90IGxpbmsgY2hhbmdlcyAmIGNvLgorCisJCQlwaHkwOiBldGhlcm5ldC1waHlAMCB7CisJCQkJY29tcGF0aWJsZSA9ICJpbnRlbCxseHQ5NzEiOworCQkJCXJlZyA9IDwwPjsKKwkJCX07CisJCX07CisKKwkJYXRhQDNhMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItYXRhIiwiZnNsLG1wYzUyMDAtYXRhIjsKKwkJCXJlZyA9IDwweDNhMDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDwyIDcgMD47CisJCX07CisKKwkJaTJjQDNkNDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWkyYyIsImZzbCxtcGM1MjAwLWkyYyIsImZzbC1pMmMiOworCQkJcmVnID0gPDB4M2Q0MCAweDQwPjsKKwkJCWludGVycnVwdHMgPSA8MiAxNiAwPjsKKwkJCWZzbCxwcmVzZXJ2ZS1jbG9ja2luZzsKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDw0MDAwMDA+OworCisJCQlod21vbkAyYyB7CisJCQkJY29tcGF0aWJsZSA9ICJhZCxhZG05MjQwIjsKKwkJCQlyZWcgPSA8MHgyYz47CisJCQl9OworCQkJcnRjQDUxIHsKKwkJCQljb21wYXRpYmxlID0gIm54cCxwY2Y4NTYzIjsKKwkJCQlyZWcgPSA8MHg1MT47CisJCQl9OworCQl9OworCisJCXNyYW1AODAwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1zcmFtIiwiZnNsLG1wYzUyMDAtc3JhbSI7CisJCQlyZWcgPSA8MHg4MDAwIDB4NDAwMD47CisJCX07CisJfTsKKworCWxvY2FsYnVzIHsKKwkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItbHBiIiwiZnNsLG1wYzUyMDAtbHBiIiwic2ltcGxlLWJ1cyI7CisKKwkJI2FkZHJlc3MtY2VsbHMgPSA8Mj47CisJCSNzaXplLWNlbGxzID0gPDE+OworCisJCXJhbmdlcyA9IDwwIDAgMHhmZjgwMDAwMCAweDAwODAwMDAwCisJCQkgIDEgMCAweDgwMDAwMDAwIDB4MDA4MDAwMDAKKwkJCSAgMyAwIDB4ODAwMDAwMDAgMHgwMDgwMDAwMD47CisKKwkJZmxhc2hAMCwwIHsKKwkJCWNvbXBhdGlibGUgPSAiY2ZpLWZsYXNoIjsKKwkJCXJlZyA9IDwwIDAgMHgwMDgwMDAwMD47CisJCQliYW5rLXdpZHRoID0gPDI+OworCQkJZGV2aWNlLXdpZHRoID0gPDI+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKworCQkJcGFydGl0aW9uQDAgeworCQkJCWxhYmVsID0gIkRUUyI7CisJCQkJcmVnID0gPDB4MCAweDAwMTAwMDAwPjsKKwkJCX07CisJCQlwYXJ0aXRpb25AMTAwMDAwIHsKKwkJCQlsYWJlbCA9ICJLZXJuZWwiOworCQkJCXJlZyA9IDwweDEwMDAwMCAweDAwMjAwMDAwPjsKKwkJCX07CisJCQlwYXJ0aXRpb25AMzAwMDAwIHsKKwkJCQlsYWJlbCA9ICJSb290RlMiOworCQkJCXJlZyA9IDwweDAwMzAwMDAwIDB4MDAyMDAwMDA+OworCQkJfTsKKwkJCXBhcnRpdGlvbkA1MDAwMDAgeworCQkJCWxhYmVsID0gInVzZXIiOworCQkJCXJlZyA9IDwweDAwNTAwMDAwIDB4MDAyMDAwMDA+OworCQkJfTsKKwkJCXBhcnRpdGlvbkA3MDAwMDAgeworCQkJCWxhYmVsID0gIlUtQm9vdCI7CisJCQkJcmVnID0gPDB4MDA3MDAwMDAgMHgwMDA0MDAwMD47CisJCQl9OworCQkJcGFydGl0aW9uQDc0MDAwMCB7CisJCQkJbGFiZWwgPSAiRW52IjsKKwkJCQlyZWcgPSA8MHgwMDc0MDAwMCAweDAwMDEwMDAwPjsKKwkJCX07CisJCQlwYXJ0aXRpb25ANzUwMDAwIHsKKwkJCQlsYWJlbCA9ICJyZWQuIEVudiI7CisJCQkJcmVnID0gPDB4MDA3NTAwMDAgMHgwMDAxMDAwMD47CisJCQl9OworCQkJcGFydGl0aW9uQDc2MDAwMCB7CisJCQkJbGFiZWwgPSAicmVzZXJ2ZSI7CisJCQkJcmVnID0gPDB4MDA3NjAwMDAgMHgwMDBhMDAwMD47CisJCQl9OworCQl9OworCisJfTsKK307CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy81Mnh4L2NtNTIwMF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy81Mnh4L2NtNTIwMF9kZWZjb25maWcKaW5kZXggMzgzOGI3Ny4uMDM5NmNlNyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNTJ4eC9jbTUyMDBfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzUyeHgvY201MjAwX2RlZmNvbmZpZwpAQCAtMSwyNSArMSwyNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMwLXJjMgotIyBTYXQgQXByIDE4IDAwOjQ3OjQ0IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzQKKyMgVGh1IE9jdCAxNSAxMDozMzoyMiAyMDA5CiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKICMKICMgUHJvY2Vzc29yIHN1cHBvcnQKICMKLUNPTkZJR182eHg9eQorQ09ORklHX1BQQ19CT09LM1NfMzI9eQogIyBDT05GSUdfUFBDXzg1eHggaXMgbm90IHNldAogIyBDT05GSUdfUFBDXzh4eCBpcyBub3Qgc2V0CiAjIENPTkZJR180MHggaXMgbm90IHNldAogIyBDT05GSUdfNDR4IGlzIG5vdCBzZXQKICMgQ09ORklHX0UyMDAgaXMgbm90IHNldAogQ09ORklHX1BQQ19CT09LM1M9eQorQ09ORklHXzZ4eD15CiBDT05GSUdfUFBDX0ZQVT15CiAjIENPTkZJR19BTFRJVkVDIGlzIG5vdCBzZXQKIENPTkZJR19QUENfU1REX01NVT15CiBDT05GSUdfUFBDX1NURF9NTVVfMzI9eQogIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfUFBDX0hBVkVfUE1VX1NVUFBPUlQ9eQogIyBDT05GSUdfU01QIGlzIG5vdCBzZXQKIENPTkZJR19QUEMzMj15CiBDT05GSUdfV09SRF9TSVpFPTMyCkBAIC0zMCwxNSArMzIsMTcgQEAKIENPTkZJR19HRU5FUklDX1RJTUVfVlNZU0NBTEw9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiAjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKK0NPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKIENPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQogQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzI9eQogQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQogQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CiAjIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTIGlzIG5vdCBzZXQKIENPTkZJR19QUEM9eQpAQCAtNTIsMTEgKzU2LDEzIEBACiAjIENPTkZJR19HRU5FUklDX1RCU1lOQyBpcyBub3Qgc2V0CiBDT05GSUdfQVVESVRfQVJDSD15CiBDT05GSUdfR0VORVJJQ19CVUc9eQorQ09ORklHX0RUQz15CiBDT05GSUdfREVGQVVMVF9VSU1BR0U9eQogIyBDT05GSUdfUFBDX0RDUl9OQVRJVkUgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0RDUl9NTUlPIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX1NVUFBPUlRTX0RFQlVHX1BBR0VBTExPQz15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtNzcsMTEgKzgzLDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19HUk9VUF9TQ0hFRD15CkBAIC0xMDUsNyArMTEyLDYgQEAKIENPTkZJR19FTUJFRERFRD15CiAjIENPTkZJR19TWVNDVExfU1lTQ0FMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19LQUxMU1lNUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfSE9UUExVRz15CiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQpAQCAtMTE4LDYgKzEyNCwxMyBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQorCisjCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCisjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CisjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfU0xVQl9ERUJVRz15CiBDT05GSUdfQ09NUEFUX0JSSz15CkBAIC0xMjUsMTQgKzEzOCwxOSBAQAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CiBDT05GSUdfSEFWRV9DTEs9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCiAjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAogIyBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVCBpcyBub3Qgc2V0CiBDT05GSUdfU0xBQklORk89eQpAQCAtMTQwLDcgKzE1OCw3IEBACiBDT05GSUdfQkFTRV9TTUFMTD0wCiAjIENPTkZJR19NT0RVTEVTIGlzIG5vdCBzZXQKIENPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAorQ09ORklHX0xCREFGPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIApAQCAtMjE5LDExICsyMzcsMTMgQEAKICMgQ09ORklHX0hBVkVfQU9VVCBpcyBub3Qgc2V0CiAjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CiAjIENPTkZJR19JT01NVV9IRUxQRVIgaXMgbm90IHNldAorIyBDT05GSUdfU1dJT1RMQiBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQogQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKICMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTIzOSw5ICsyNTksMTAgQEAKIENPTkZJR19aT05FX0RNQV9GTEFHPTEKIENPTkZJR19CT1VOQ0U9eQogQ09ORklHX1ZJUlRfVE9fQlVTPXkKLUNPTkZJR19VTkVWSUNUQUJMRV9MUlU9eQogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfUFBDXzRLX1BBR0VTPXkKICMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldAogIyBDT05GSUdfUFBDXzY0S19QQUdFUyBpcyBub3Qgc2V0CkBAIC0yNTIsNiArMjczLDcgQEAKIENPTkZJR19FWFRSQV9UQVJHRVRTPSIiCiBDT05GSUdfUE09eQogIyBDT05GSUdfUE1fREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfUE1fUlVOVElNRSBpcyBub3Qgc2V0CiBDT05GSUdfU0VDQ09NUD15CiBDT05GSUdfSVNBX0RNQV9BUEk9eQogCkBAIC0zMjgsNiArMzUwLDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC0zNDIsNiArMzY1LDcgQEAKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFODAyMTU0IGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19EQ0IgaXMgbm90IHNldAogCkBAIC0zNjcsNiArMzkxLDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CkBAIC00NTcsNiArNDgyLDcgQEAKICMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAogQ09ORklHX09GX0RFVklDRT15CiBDT05GSUdfT0ZfSTJDPXkKK0NPTkZJR19PRl9NRElPPXkKICMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVY9eQogIyBDT05GSUdfQkxLX0RFVl9GRCBpcyBub3Qgc2V0CkBAIC00OTUsMTAgKzUyMSw2IEBACiAjIENPTkZJR19CTEtfREVWX1NSIGlzIG5vdCBzZXQKIENPTkZJR19DSFJfREVWX1NHPXkKICMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKLQotIwotIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKLSMKICMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0CkBAIC01MTksNyArNTQxLDYgQEAKICMgQ09ORklHX01EIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0lOVE9TSF9EUklWRVJTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKLUNPTkZJR19DT01QQVRfTkVUX0RFVl9PUFM9eQogIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAogIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKQEAgLTU1OCwxNCArNTc5LDE0IEBACiAjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiBDT05GSUdfRkVDX01QQzUyeHg9eQogQ09ORklHX0ZFQ19NUEM1Mnh4X01ESU89eQorIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC02MzYsNiArNjU3LDcgQEAKICMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CiBDT05GSUdfSTJDX0NIQVJERVY9eQogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiAKQEAgLTY0Niw2ICs2NjgsNyBAQAogIwogIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKICMKKyMgQ09ORklHX0kyQ19ERVNJR05XQVJFIGlzIG5vdCBzZXQKIENPTkZJR19JMkNfTVBDPXkKICMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0CkBAIC02NjYsMjMgKzY4OSwyMyBAQAogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKICMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisKKyMKKyMgUFBTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9XQU5UX09QVElPTkFMX0dQSU9MSUI9eQogIyBDT05GSUdfR1BJT0xJQiBpcyBub3Qgc2V0CiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKIENPTkZJR19XQVRDSERPRz15CiAjIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBub3Qgc2V0CiAKQEAgLTcxMywyNSArNzM2LDEyIEBACiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0KLSMKLSMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19NRURJQSBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkcml2ZXJzCi0jCi0jIENPTkZJR19EQUIgaXMgbm90IHNldAorIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydApAQCAtNzc1LDExICs3ODUsMTIgQEAKICMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9PSENJX0hDRD15CiBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19TT0M9eQotQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0Y9eQogQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfQkU9eQogIyBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9MRSBpcyBub3Qgc2V0CitDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRj15CiBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9ERVNDPXkKIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX01NSU89eQogIyBDT05GSUdfVVNCX09IQ0lfTElUVExFX0VORElBTiBpcyBub3Qgc2V0CkBAIC04NjYsNiArODc3LDEwIEBACiAjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAogIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKworIworIyBUSSBWTFlOUQorIwogIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CiAKICMKQEAgLTg4NSwxMCArOTAwLDEzIEBACiAjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLUNPTkZJR19GSUxFX0xPQ0tJTkc9eQogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GSUxFX0xPQ0tJTkc9eQorQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKIENPTkZJR19JTk9USUZZPXkKIENPTkZJR19JTk9USUZZX1VTRVI9eQpAQCAtOTU5LDEyICs5NzcsMTIgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQogIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CiBDT05GSUdfTkZTX1Y0PXkKKyMgQ09ORklHX05GU19WNF8xIGlzIG5vdCBzZXQKIENPTkZJR19ST09UX05GUz15CiAjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKIENPTkZJR19MT0NLRD15CkBAIC0xMDY0LDYgKzEwODIsNyBAQAogQ09ORklHX0hBU19ETUE9eQogQ09ORklHX0hBVkVfTE1CPXkKIENPTkZJR19OTEFUVFI9eQorQ09ORklHX0dFTkVSSUNfQVRPTUlDNjQ9eQogCiAjCiAjIEtlcm5lbCBoYWNraW5nCkBAIC0xMDczLDYgKzEwOTIsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTA5MCwxMCArMTExMCwxNCBAQAogIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS01FTUxFQUsgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKQEAgLTExMDUsMTEgKzExMjksMTIgQEAKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19QQUdFQUxMT0MgaXMgbm90IHNldApAQCAtMTExOCwyMyArMTE0MywyNSBAQAogQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15Ci0KLSMKLSMgVHJhY2VycwotIworQ09ORklHX0ZUUkFDRT15CiAjIENPTkZJR19GVU5DVElPTl9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfSVJRU09GRl9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FVkVOVF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfRU5BQkxFX0RFRkFVTFRfVFJBQ0VSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUkFDRV9CUkFOQ0hfUFJPRklMSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19CUkFOQ0hfUFJPRklMRV9OT05FPXkKKyMgQ09ORklHX1BST0ZJTEVfQU5OT1RBVEVEX0JSQU5DSEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTEVfQUxMX0JSQU5DSEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NUQUNLX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19LTUVNVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfV09SS1FVRVVFX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldAorQ09ORklHX1BQQ19XRVJST1I9eQogQ09ORklHX1BSSU5UX1NUQUNLX0RFUFRIPTY0CiAjIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKQEAgLTExNTksNyArMTE4Niw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fQUVBRDI9eQpAQCAtMTIwMCwxMSArMTIyNiwxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX01ENT15CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNTJ4eC9saXRlNTIwMGJfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNTJ4eC9saXRlNTIwMGJfZGVmY29uZmlnCmluZGV4IDI5YjBmMzQuLmY1YzA3ZmQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzUyeHgvbGl0ZTUyMDBiX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy81Mnh4L2xpdGU1MjAwYl9kZWZjb25maWcKQEAgLTEsMjUgKzEsMjcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMC1yYzIKLSMgU2F0IEFwciAxOCAwMDo0ODowNCAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM0CisjIFRodSBPY3QgMTUgMTA6MzM6MjQgMjAwOQogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCiAjCiAjIFByb2Nlc3NvciBzdXBwb3J0CiAjCi1DT05GSUdfNnh4PXkKK0NPTkZJR19QUENfQk9PSzNTXzMyPXkKICMgQ09ORklHX1BQQ184NXh4IGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ184eHggaXMgbm90IHNldAogIyBDT05GSUdfNDB4IGlzIG5vdCBzZXQKICMgQ09ORklHXzQ0eCBpcyBub3Qgc2V0CiAjIENPTkZJR19FMjAwIGlzIG5vdCBzZXQKIENPTkZJR19QUENfQk9PSzNTPXkKK0NPTkZJR182eHg9eQogQ09ORklHX1BQQ19GUFU9eQogIyBDT05GSUdfQUxUSVZFQyBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX1NURF9NTVU9eQogQ09ORklHX1BQQ19TVERfTU1VXzMyPXkKICMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAorQ09ORklHX1BQQ19IQVZFX1BNVV9TVVBQT1JUPXkKICMgQ09ORklHX1NNUCBpcyBub3Qgc2V0CiBDT05GSUdfUFBDMzI9eQogQ09ORklHX1dPUkRfU0laRT0zMgpAQCAtMzAsMTUgKzMyLDE3IEBACiBDT05GSUdfR0VORVJJQ19USU1FX1ZTWVNDQUxMPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CitDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CiBDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKIENPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15CiBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKIENPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKIENPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQogIyBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUyBpcyBub3Qgc2V0CiBDT05GSUdfUFBDPXkKQEAgLTUyLDEyICs1NiwxNCBAQAogIyBDT05GSUdfR0VORVJJQ19UQlNZTkMgaXMgbm90IHNldAogQ09ORklHX0FVRElUX0FSQ0g9eQogQ09ORklHX0dFTkVSSUNfQlVHPXkKK0NPTkZJR19EVEM9eQogQ09ORklHX0RFRkFVTFRfVUlNQUdFPXkKIENPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQogIyBDT05GSUdfUFBDX0RDUl9OQVRJVkUgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0RDUl9NTUlPIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX1NVUFBPUlRTX0RFQlVHX1BBR0VBTExPQz15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtNzgsMTEgKzg0LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19HUk9VUF9TQ0hFRD15CkBAIC0xMDYsNyArMTEzLDYgQEAKIENPTkZJR19FTUJFRERFRD15CiAjIENPTkZJR19TWVNDVExfU1lTQ0FMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19LQUxMU1lNUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfSE9UUExVRz15CiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQpAQCAtMTE5LDYgKzEyNSwxMyBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQorCisjCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCisjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CisjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15CiBDT05GSUdfU0xVQl9ERUJVRz15CkBAIC0xMjcsMTQgKzE0MCwxOSBAQAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CiBDT05GSUdfSEFWRV9DTEs9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCiAjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAogIyBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVCBpcyBub3Qgc2V0CiBDT05GSUdfU0xBQklORk89eQpAQCAtMTQ3LDcgKzE2NSw3IEBACiAjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAogQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CitDT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCkBAIC0yMjgsMTEgKzI0NiwxMyBAQAogIyBDT05GSUdfSEFWRV9BT1VUIGlzIG5vdCBzZXQKICMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKICMgQ09ORklHX0lPTU1VX0hFTFBFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TV0lPVExCIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CiBDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQogIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JBU0hfRFVNUCBpcyBub3Qgc2V0CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQpAQCAtMjQ4LDkgKzI2OCwxMCBAQAogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQogQ09ORklHX0JPVU5DRT15CiBDT05GSUdfVklSVF9UT19CVVM9eQotQ09ORklHX1VORVZJQ1RBQkxFX0xSVT15CiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19QUENfNEtfUEFHRVM9eQogIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfNjRLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTI2NCw2ICsyODUsNyBAQAogQ09ORklHX1BNX1NMRUVQPXkKIENPTkZJR19TVVNQRU5EPXkKIENPTkZJR19TVVNQRU5EX0ZSRUVaRVI9eQorIyBDT05GSUdfUE1fUlVOVElNRSBpcyBub3Qgc2V0CiBDT05GSUdfU0VDQ09NUD15CiBDT05GSUdfSVNBX0RNQV9BUEk9eQogCkBAIC0zNDgsNiArMzcwLDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC0zNjIsNiArMzg1LDcgQEAKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFODAyMTU0IGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19EQ0IgaXMgbm90IHNldAogCkBAIC0zODcsNiArNDExLDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CkBAIC0zOTcsNiArNDIyLDcgQEAKICMgQ09ORklHX01URCBpcyBub3Qgc2V0CiBDT05GSUdfT0ZfREVWSUNFPXkKIENPTkZJR19PRl9JMkM9eQorQ09ORklHX09GX01ESU89eQogIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVj15CiAjIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKQEAgLTQzMSw3ICs0NTcsOSBAQAogIwogIyBDT05GSUdfRUVQUk9NX0FUMjQgaXMgbm90IHNldAogIyBDT05GSUdfRUVQUk9NX0xFR0FDWSBpcyBub3Qgc2V0CisjIENPTkZJR19FRVBST01fTUFYNjg3NSBpcyBub3Qgc2V0CiAjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAorIyBDT05GSUdfQ0I3MTBfQ09SRSBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9JREU9eQogIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKIApAQCAtNDU0LDEwICs0ODIsNiBAQAogIyBDT05GSUdfQkxLX0RFVl9TUiBpcyBub3Qgc2V0CiAjIENPTkZJR19DSFJfREVWX1NHIGlzIG5vdCBzZXQKICMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKLQotIwotIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKLSMKICMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0CkBAIC00NzUsNiArNDk5LDggQEAKIENPTkZJR19TQ1NJX0xPV0xFVkVMPXkKICMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0NYR0IzX0lTQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQk5YMl9JU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19CRTJJU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJXzNXXzlYWFggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BQ0FSRCBpcyBub3Qgc2V0CkBAIC00ODMsNiArNTA5LDcgQEAKICMgQ09ORklHX1NDU0lfQUlDN1hYWF9PTEQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BSUM3OVhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUlDOTRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX01WU0FTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfRFBUX0kyTyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FEVkFOU1lTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQVJDTVNSIGlzIG5vdCBzZXQKQEAgLTUwMiw3ICs1MjksNiBAQAogIyBDT05GSUdfU0NTSV9JUFMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9JTklUSU8gaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9JTklBMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTVZTQVMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TVEVYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1lNNTNDOFhYXzIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9JUFIgaXMgbm90IHNldApAQCAtNTE0LDExICs1NDAsMTQgQEAKICMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1BNQ1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9CRkFfRkMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogQ09ORklHX0FUQT15CiAjIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorQ09ORklHX0FUQV9WRVJCT1NFX0VSUk9SPXkKIENPTkZJR19TQVRBX1BNUD15CiAjIENPTkZJR19TQVRBX0FIQ0kgaXMgbm90IHNldAogIyBDT05GSUdfU0FUQV9TSUwyNCBpcyBub3Qgc2V0CkBAIC01NDAsNiArNTY5LDcgQEAKICMgQ09ORklHX1BBVEFfQUxJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQU1EIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVJUT1AgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BVFA4NjdYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVRJSVhQIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjQwX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0NNRDY0WCBpcyBub3Qgc2V0CkBAIC01NjgsNiArNTk4LDcgQEAKICMgQ09ORklHX1BBVEFfT1BUSURNQSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1BEQ19PTEQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SQURJU1lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUkRDIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUloxMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0MxMjAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0VSVkVSV09SS1MgaXMgbm90IHNldApAQCAtNTg2LDE0ICs2MTcsMTcgQEAKICMKIAogIwotIyBFbmFibGUgb25seSBvbmUgb2YgdGhlIHR3byBzdGFja3MsIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcKKyMgWW91IGNhbiBlbmFibGUgb25lIG9yIGJvdGggRmlyZVdpcmUgZHJpdmVyIHN0YWNrcy4KKyMKKworIworIyBTZWUgdGhlIGhlbHAgdGV4dHMgZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAjCiAjIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMk8gaXMgbm90IHNldAogIyBDT05GSUdfTUFDSU5UT1NIX0RSSVZFUlMgaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQotQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUz15CiAjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CiAjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldApAQCAtNjQwLDkgKzY3NCwxMiBAQAogIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKIENPTkZJR19GRUNfTVBDNTJ4eD15CiBDT05GSUdfRkVDX01QQzUyeHhfTURJTz15CiAjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDA9eQogIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKICMgQ09ORklHX0RMMksgaXMgbm90IHNldApAQCAtNjYxLDYgKzY5OCw4IEBACiAjIENPTkZJR19WSUFfVkVMT0NJVFkgaXMgbm90IHNldAogIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKICMgQ09ORklHX0JOWDIgaXMgbm90IHNldAorIyBDT05GSUdfQ05JQyBpcyBub3Qgc2V0CisjIENPTkZJR19NVjY0M1hYX0VUSCBpcyBub3Qgc2V0CiAjIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDEgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMUUgaXMgbm90IHNldApAQCAtNjg2LDEwICs3MjUsNyBAQAogIyBDT05GSUdfU0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX0JFMk5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC03NTksNiArNzk1LDcgQEAKIENPTkZJR19ERVZQT1JUPXkKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogQ09ORklHX0kyQ19DSEFSREVWPXkKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogCkBAIC03ODcsNiArODI0LDcgQEAKICMKICMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCiAjCisjIENPTkZJR19JMkNfREVTSUdOV0FSRSBpcyBub3Qgc2V0CiBDT05GSUdfSTJDX01QQz15CiAjIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldApAQCAtODEyLDIzICs4NTAsMjMgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TUEkgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElCPXkKICMgQ09ORklHX0dQSU9MSUIgaXMgbm90IHNldAogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtODQ3LDMwICs4ODUsMTggQEAKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAorIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRldmljZXMKLSMKLQotIwotIyBNdWx0aW1lZGlhIGNvcmUgc3VwcG9ydAotIwotIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX01FRElBIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRyaXZlcnMKLSMKLSMgQ09ORklHX0RBQiBpcyBub3Qgc2V0CisjIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwogIyBHcmFwaGljcyBzdXBwb3J0CiAjCiAjIENPTkZJR19BR1AgaXMgbm90IHNldAorQ09ORklHX1ZHQV9BUkI9eQogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD1tCkBAIC05MTMsNiArOTM5LDEwIEBACiAjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAogIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKworIworIyBUSSBWTFlOUQorIwogIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CiAKICMKQEAgLTkzMiwxMCArOTYyLDEzIEBACiAjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLUNPTkZJR19GSUxFX0xPQ0tJTkc9eQogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GSUxFX0xPQ0tJTkc9eQorQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKIENPTkZJR19JTk9USUZZPXkKIENPTkZJR19JTk9USUZZX1VTRVI9eQpAQCAtOTkyLDEyICsxMDI1LDEyIEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKICMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAogQ09ORklHX05GU19WND15CisjIENPTkZJR19ORlNfVjRfMSBpcyBub3Qgc2V0CiBDT05GSUdfUk9PVF9ORlM9eQogIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CiBDT05GSUdfTE9DS0Q9eQpAQCAtMTA0MSw2ICsxMDc0LDcgQEAKIENPTkZJR19IQVNfRE1BPXkKIENPTkZJR19IQVZFX0xNQj15CiBDT05GSUdfTkxBVFRSPXkKK0NPTkZJR19HRU5FUklDX0FUT01JQzY0PXkKIAogIwogIyBLZXJuZWwgaGFja2luZwpAQCAtMTA1MCw2ICsxMDg0LDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTEwNjcsMTAgKzExMDIsMTQgQEAKICMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tNRU1MRUFLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAogIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CkBAIC0xMDgyLDExICsxMTIxLDEyIEBACiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfUEFHRUFMTE9DIGlzIG5vdCBzZXQKQEAgLTEwOTUsMjMgKzExMzUsMjUgQEAKIENPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQotCi0jCi0jIFRyYWNlcnMKLSMKK0NPTkZJR19GVFJBQ0U9eQogIyBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSUVNPRkZfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfRVZFTlRfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQUJMRV9ERUZBVUxUX1RSQUNFUlMgaXMgbm90IHNldAogIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFJBQ0VfQlJBTkNIX1BST0ZJTElORyBpcyBub3Qgc2V0CitDT05GSUdfQlJBTkNIX1BST0ZJTEVfTk9ORT15CisjIENPTkZJR19QUk9GSUxFX0FOTk9UQVRFRF9CUkFOQ0hFUyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxFX0FMTF9CUkFOQ0hFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX0tHREIgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfV0VSUk9SPXkKIENPTkZJR19QUklOVF9TVEFDS19ERVBUSD02NAogIyBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CkBAIC0xMTM2LDcgKzExNzgsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKIENPTkZJR19DUllQVE9fQUxHQVBJMj15CiBDT05GSUdfQ1JZUFRPX0FFQUQyPXkKQEAgLTExNzgsMTEgKzEyMTksMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NRDU9eQogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzUyeHgvbW90aW9ucHJvX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzUyeHgvbW90aW9ucHJvX2RlZmNvbmZpZwppbmRleCAwN2I2YjI2Li40Zjc3YTFiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy81Mnh4L21vdGlvbnByb19kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNTJ4eC9tb3Rpb25wcm9fZGVmY29uZmlnCkBAIC0xLDI1ICsxLDI3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzAtcmMyCi0jIFNhdCBBcHIgMTggMDA6NDg6MjIgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNAorIyBUaHUgT2N0IDE1IDEwOjMzOjIyIDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIAogIwogIyBQcm9jZXNzb3Igc3VwcG9ydAogIwotQ09ORklHXzZ4eD15CitDT05GSUdfUFBDX0JPT0szU18zMj15CiAjIENPTkZJR19QUENfODV4eCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfOHh4IGlzIG5vdCBzZXQKICMgQ09ORklHXzQweCBpcyBub3Qgc2V0CiAjIENPTkZJR180NHggaXMgbm90IHNldAogIyBDT05GSUdfRTIwMCBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX0JPT0szUz15CitDT05GSUdfNnh4PXkKIENPTkZJR19QUENfRlBVPXkKICMgQ09ORklHX0FMVElWRUMgaXMgbm90IHNldAogQ09ORklHX1BQQ19TVERfTU1VPXkKIENPTkZJR19QUENfU1REX01NVV8zMj15CiAjIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfSEFWRV9QTVVfU1VQUE9SVD15CiAjIENPTkZJR19TTVAgaXMgbm90IHNldAogQ09ORklHX1BQQzMyPXkKIENPTkZJR19XT1JEX1NJWkU9MzIKQEAgLTMwLDE1ICszMiwxNyBAQAogQ09ORklHX0dFTkVSSUNfVElNRV9WU1lTQ0FMTD15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CitDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQorQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQogQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CiBDT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQogQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMj15CiBDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CiBDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKICMgQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVMgaXMgbm90IHNldAogQ09ORklHX1BQQz15CkBAIC01MiwxMSArNTYsMTMgQEAKICMgQ09ORklHX0dFTkVSSUNfVEJTWU5DIGlzIG5vdCBzZXQKIENPTkZJR19BVURJVF9BUkNIPXkKIENPTkZJR19HRU5FUklDX0JVRz15CitDT05GSUdfRFRDPXkKIENPTkZJR19ERUZBVUxUX1VJTUFHRT15CiAjIENPTkZJR19QUENfRENSX05BVElWRSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfRENSX01NSU8gaXMgbm90IHNldAogQ09ORklHX0FSQ0hfU1VQUE9SVFNfREVCVUdfUEFHRUFMTE9DPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCitDT05GSUdfQ09OU1RSVUNUT1JTPXkKIAogIwogIyBHZW5lcmFsIHNldHVwCkBAIC03NywxMSArODMsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0dST1VQX1NDSEVEPXkKQEAgLTEwNSw3ICsxMTIsNiBAQAogQ09ORklHX0VNQkVEREVEPXkKICMgQ09ORklHX1NZU0NUTF9TWVNDQUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0tBTExTWU1TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19IT1RQTFVHPXkKIENPTkZJR19QUklOVEs9eQogQ09ORklHX0JVRz15CkBAIC0xMTgsNiArMTI0LDEzIEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CisKKyMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKKyMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19TTFVCX0RFQlVHPXkKIENPTkZJR19DT01QQVRfQlJLPXkKQEAgLTEyNSwxNCArMTM4LDE5IEBACiBDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKIENPTkZJR19IQVZFX0NMSz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKICMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CiAjIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UIGlzIG5vdCBzZXQKIENPTkZJR19TTEFCSU5GTz15CkBAIC0xNDAsNyArMTU4LDcgQEAKIENPTkZJR19CQVNFX1NNQUxMPTAKICMgQ09ORklHX01PRFVMRVMgaXMgbm90IHNldAogQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CitDT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCkBAIC0yMjAsMTEgKzIzOCwxMyBAQAogIyBDT05GSUdfSEFWRV9BT1VUIGlzIG5vdCBzZXQKICMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKICMgQ09ORklHX0lPTU1VX0hFTFBFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TV0lPVExCIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CiBDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQogIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JBU0hfRFVNUCBpcyBub3Qgc2V0CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQpAQCAtMjQwLDkgKzI2MCwxMCBAQAogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQogQ09ORklHX0JPVU5DRT15CiBDT05GSUdfVklSVF9UT19CVVM9eQotQ09ORklHX1VORVZJQ1RBQkxFX0xSVT15CiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19QUENfNEtfUEFHRVM9eQogIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfNjRLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTI1Myw2ICsyNzQsNyBAQAogQ09ORklHX0VYVFJBX1RBUkdFVFM9IiIKIENPTkZJR19QTT15CiAjIENPTkZJR19QTV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19QTV9SVU5USU1FIGlzIG5vdCBzZXQKIENPTkZJR19TRUNDT01QPXkKIENPTkZJR19JU0FfRE1BX0FQST15CiAKQEAgLTMyOSw2ICszNTEsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTM0Myw2ICszNjYsNyBAQAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAogIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxNTQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKICMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CiAKQEAgLTM2OCw2ICszOTIsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKQEAgLTQ1OCw2ICs0ODMsNyBAQAogIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CiBDT05GSUdfT0ZfREVWSUNFPXkKIENPTkZJR19PRl9JMkM9eQorQ09ORklHX09GX01ESU89eQogIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVj15CiAjIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKQEAgLTQ4Myw2ICs1MDksNyBAQAogIwogIyBDT05GSUdfRUVQUk9NX0FUMjQgaXMgbm90IHNldAogQ09ORklHX0VFUFJPTV9MRUdBQ1k9eQorIyBDT05GSUdfRUVQUk9NX01BWDY4NzUgaXMgbm90IHNldAogIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0lERT15CiAjIENPTkZJR19JREUgaXMgbm90IHNldApAQCAtNTA2LDEwICs1MzMsNiBAQAogIyBDT05GSUdfQkxLX0RFVl9TUiBpcyBub3Qgc2V0CiBDT05GSUdfQ0hSX0RFVl9TRz15CiAjIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0Ci0KLSMKLSMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCi0jCiAjIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldApAQCAtNTMyLDYgKzU1NSw3IEBACiAjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogQ09ORklHX0FUQT15CiAjIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorQ09ORklHX0FUQV9WRVJCT1NFX0VSUk9SPXkKIENPTkZJR19TQVRBX1BNUD15CiBDT05GSUdfQVRBX1NGRj15CiAjIENPTkZJR19TQVRBX01WIGlzIG5vdCBzZXQKQEAgLTU0MCw3ICs1NjQsNiBAQAogIyBDT05GSUdfTUQgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSU5UT1NIX0RSSVZFUlMgaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQotQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUz15CiAjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CiAjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldApAQCAtNTc5LDE0ICs2MDIsMTQgQEAKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKIENPTkZJR19GRUNfTVBDNTJ4eD15CiBDT05GSUdfRkVDX01QQzUyeHhfTURJTz15CisjIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTY0Nyw2ICs2NzAsNyBAQAogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15CiBDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIApAQCAtNjU3LDYgKzY4MSw3IEBACiAjCiAjIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQogIworIyBDT05GSUdfSTJDX0RFU0lHTldBUkUgaXMgbm90IHNldAogQ09ORklHX0kyQ19NUEM9eQogIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKQEAgLTY3NiwyMiArNzAxLDI4IEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAogIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKworIworIyBQUFMgc3VwcG9ydAorIworIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX1dBTlRfT1BUSU9OQUxfR1BJT0xJQj15CiAjIENPTkZJR19HUElPTElCIGlzIG5vdCBzZXQKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiBDT05GSUdfSFdNT049eQogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIE5hdGl2ZSBkcml2ZXJzCisjCiAjIENPTkZJR19TRU5TT1JTX0FENzQxNCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldApAQCAtNzM4LDYgKzc2OSw4IEBACiAjIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRFM3ODI4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVE1QNDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVE1QNDIxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNzgxRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4Mzc5MUQgaXMgbm90IHNldApAQCAtNzQ3LDkgKzc4MCw3IEBACiAjIENPTkZJR19TRU5TT1JTX1c4M0w3ODZORyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKIENPTkZJR19XQVRDSERPRz15CiAjIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBub3Qgc2V0CiAKQEAgLTc3NSwyNSArODA2LDEyIEBACiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0KLSMKLSMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19NRURJQSBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkcml2ZXJzCi0jCi1DT05GSUdfREFCPXkKKyMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKQEAgLTgxNyw3ICs4MzUsNyBAQAogIwogIyBMRUQgZHJpdmVycwogIwotIyBDT05GSUdfTEVEU19MUDU1MjEgaXMgbm90IHNldAorIyBDT05GSUdfTEVEU19MUDM5NDQgaXMgbm90IHNldAogIyBDT05GSUdfTEVEU19QQ0E5NTVYIGlzIG5vdCBzZXQKICMgQ09ORklHX0xFRFNfQkQyODAyIGlzIG5vdCBzZXQKIApAQCAtODY2LDYgKzg4NCw3IEBACiAjIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9SWDg1ODEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SWDgwMjUgaXMgbm90IHNldAogCiAjCiAjIFNQSSBSVEMgZHJpdmVycwpAQCAtODkzLDYgKzkxMiwxMCBAQAogIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CisKKyMKKyMgVEkgVkxZTlEKKyMKICMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAogCiAjCkBAIC05MTIsMTAgKzkzNSwxMyBAQAogIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci1DT05GSUdfRklMRV9MT0NLSU5HPXkKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CitDT05GSUdfRklMRV9MT0NLSU5HPXkKK0NPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15CiBDT05GSUdfSU5PVElGWV9VU0VSPXkKQEAgLTk4NiwxMiArMTAxMiwxMiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CiAjIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKIENPTkZJR19ORlNfVjQ9eQorIyBDT05GSUdfTkZTX1Y0XzEgaXMgbm90IHNldAogQ09ORklHX1JPT1RfTkZTPXkKICMgQ09ORklHX05GU0QgaXMgbm90IHNldAogQ09ORklHX0xPQ0tEPXkKQEAgLTEwOTEsNiArMTExNyw3IEBACiBDT05GSUdfSEFTX0RNQT15CiBDT05GSUdfSEFWRV9MTUI9eQogQ09ORklHX05MQVRUUj15CitDT05GSUdfR0VORVJJQ19BVE9NSUM2ND15CiAKICMKICMgS2VybmVsIGhhY2tpbmcKQEAgLTExMDAsNiArMTEyNyw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xMTE3LDEwICsxMTQ1LDE0IEBACiAjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAorIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldApAQCAtMTEzMiwxMSArMTE2NCwxMiBAQAogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAotIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1BBR0VBTExPQyBpcyBub3Qgc2V0CkBAIC0xMTQ1LDIzICsxMTc4LDI1IEBACiBDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKLQotIwotIyBUcmFjZXJzCi0jCitDT05GSUdfRlRSQUNFPXkKICMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VWRU5UX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19FTkFCTEVfREVGQVVMVF9UUkFDRVJTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSQUNFX0JSQU5DSF9QUk9GSUxJTkcgaXMgbm90IHNldAorQ09ORklHX0JSQU5DSF9QUk9GSUxFX05PTkU9eQorIyBDT05GSUdfUFJPRklMRV9BTk5PVEFURURfQlJBTkNIRVMgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMRV9BTExfQlJBTkNIRVMgaXMgbm90IHNldAogIyBDT05GSUdfU1RBQ0tfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0tNRU1UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0CitDT05GSUdfUFBDX1dFUlJPUj15CiBDT05GSUdfUFJJTlRfU1RBQ0tfREVQVEg9NjQKICMgQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldApAQCAtMTE4Niw3ICsxMjIxLDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0FMR0FQST15CiBDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQogQ09ORklHX0NSWVBUT19BRUFEMj15CkBAIC0xMjI3LDExICsxMjYxLDEzIEBACiAjCiAjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTUQ1PXkKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy81Mnh4L3BjbTAzMF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy81Mnh4L3BjbTAzMF9kZWZjb25maWcKaW5kZXggYWZiMWEzZC4uZjkxNjhjMSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNTJ4eC9wY20wMzBfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzUyeHgvcGNtMDMwX2RlZmNvbmZpZwpAQCAtMSwyNSArMSwyNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMwLXJjMgotIyBTYXQgQXByIDE4IDAwOjQ4OjQyIDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzQKKyMgVGh1IE9jdCAxNSAxMDozMzoyNSAyMDA5CiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKICMKICMgUHJvY2Vzc29yIHN1cHBvcnQKICMKLUNPTkZJR182eHg9eQorQ09ORklHX1BQQ19CT09LM1NfMzI9eQogIyBDT05GSUdfUFBDXzg1eHggaXMgbm90IHNldAogIyBDT05GSUdfUFBDXzh4eCBpcyBub3Qgc2V0CiAjIENPTkZJR180MHggaXMgbm90IHNldAogIyBDT05GSUdfNDR4IGlzIG5vdCBzZXQKICMgQ09ORklHX0UyMDAgaXMgbm90IHNldAogQ09ORklHX1BQQ19CT09LM1M9eQorQ09ORklHXzZ4eD15CiBDT05GSUdfUFBDX0ZQVT15CiAjIENPTkZJR19BTFRJVkVDIGlzIG5vdCBzZXQKIENPTkZJR19QUENfU1REX01NVT15CiBDT05GSUdfUFBDX1NURF9NTVVfMzI9eQogIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfUFBDX0hBVkVfUE1VX1NVUFBPUlQ9eQogIyBDT05GSUdfU01QIGlzIG5vdCBzZXQKIENPTkZJR19QUEMzMj15CiBDT05GSUdfV09SRF9TSVpFPTMyCkBAIC0zMCwxNSArMzIsMTcgQEAKIENPTkZJR19HRU5FUklDX1RJTUVfVlNZU0NBTEw9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiAjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKK0NPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKIENPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQogQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzI9eQogQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQogQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CiAjIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTIGlzIG5vdCBzZXQKIENPTkZJR19QUEM9eQpAQCAtNTIsMTEgKzU2LDEzIEBACiAjIENPTkZJR19HRU5FUklDX1RCU1lOQyBpcyBub3Qgc2V0CiBDT05GSUdfQVVESVRfQVJDSD15CiBDT05GSUdfR0VORVJJQ19CVUc9eQorQ09ORklHX0RUQz15CiBDT05GSUdfREVGQVVMVF9VSU1BR0U9eQogIyBDT05GSUdfUFBDX0RDUl9OQVRJVkUgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0RDUl9NTUlPIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX1NVUFBPUlRTX0RFQlVHX1BBR0VBTExPQz15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtNzksMTEgKzg1LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CkBAIC0xMDUsNyArMTEyLDYgQEAKICMgQ09ORklHX1NZU0NUTF9TWVNDQUxMIGlzIG5vdCBzZXQKIENPTkZJR19LQUxMU1lNUz15CiAjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19IT1RQTFVHPXkKIENPTkZJR19QUklOVEs9eQogQ09ORklHX0JVRz15CkBAIC0xMTgsNiArMTI0LDEzIEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CisKKyMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKKyMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogIyBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1BDSV9RVUlSS1M9eQogQ09ORklHX0NPTVBBVF9CUks9eQpAQCAtMTI1LDcgKzEzOCw2IEBACiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CkBAIC0xMzMsNyArMTQ1LDEzIEBACiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKIENPTkZJR19IQVZFX0NMSz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKICMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CiAjIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UIGlzIG5vdCBzZXQKIENPTkZJR19TTEFCSU5GTz15CkBAIC0xNDYsNyArMTY0LDcgQEAKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKK0NPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKQEAgLTIyNywxMSArMjQ1LDEzIEBACiAjIENPTkZJR19IQVZFX0FPVVQgaXMgbm90IHNldAogIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAogIyBDT05GSUdfSU9NTVVfSEVMUEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NXSU9UTEIgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKIENPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CiAjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CkBAIC0yNDcsOSArMjY3LDEwIEBACiBDT05GSUdfWk9ORV9ETUFfRkxBRz0xCiBDT05GSUdfQk9VTkNFPXkKIENPTkZJR19WSVJUX1RPX0JVUz15Ci1DT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ182NEtfUEFHRVMgaXMgbm90IHNldApAQCAtMzM2LDYgKzM1Nyw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtMzUwLDYgKzM3Miw3IEBACiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjE1NCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAogIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKIApAQCAtMzc1LDYgKzM5OCw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldApAQCAtMzgyLDkgKzQwNiw5IEBACiAjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQogIyBDT05GSUdfTVREX09GX1BBUlRTIGlzIG5vdCBzZXQKQEAgLTQ2Nyw2ICs0OTEsNyBAQAogIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CiBDT05GSUdfT0ZfREVWSUNFPXkKIENPTkZJR19PRl9JMkM9eQorQ09ORklHX09GX01ESU89eQogIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWIGlzIG5vdCBzZXQKICMgQ09ORklHX01JU0NfREVWSUNFUyBpcyBub3Qgc2V0CkBAIC00OTIsMTAgKzUxNyw2IEBACiAjIENPTkZJR19CTEtfREVWX1NSIGlzIG5vdCBzZXQKICMgQ09ORklHX0NIUl9ERVZfU0cgaXMgbm90IHNldAogIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAotCi0jCi0jIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVOcwotIwogIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKQEAgLTUxNSw2ICs1MzYsNyBAQAogIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKIENPTkZJR19BVEE9bQogIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19BVEFfVkVSQk9TRV9FUlJPUj15CiBDT05GSUdfU0FUQV9QTVA9eQogIyBDT05GSUdfU0FUQV9BSENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBVEFfU0lMMjQgaXMgbm90IHNldApAQCAtNTM2LDYgKzU1OCw3IEBACiAjIENPTkZJR19QQVRBX0FMSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FNRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FSVE9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQVRQODY3WCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FUSUlYUCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0NNRDY0MF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9DTUQ2NFggaXMgbm90IHNldApAQCAtNTY0LDYgKzU4Nyw3IEBACiAjIENPTkZJR19QQVRBX09QVElETUEgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9QRENfT0xEIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUkFESVNZUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1JEQyBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JaMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1NDMTIwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1NFUlZFUldPUktTIGlzIG5vdCBzZXQKQEAgLTU4MiwxNCArNjA2LDE3IEBACiAjCiAKICMKLSMgRW5hYmxlIG9ubHkgb25lIG9mIHRoZSB0d28gc3RhY2tzLCB1bmxlc3MgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nCisjIFlvdSBjYW4gZW5hYmxlIG9uZSBvciBib3RoIEZpcmVXaXJlIGRyaXZlciBzdGFja3MuCisjCisKKyMKKyMgU2VlIHRoZSBoZWxwIHRleHRzIGZvciBtb3JlIGluZm9ybWF0aW9uLgogIwogIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAogIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAogIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0lOVE9TSF9EUklWRVJTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKLUNPTkZJR19DT01QQVRfTkVUX0RFVl9PUFM9eQogIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAogIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKQEAgLTYzNiwxNiArNjYzLDE2IEBACiAjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogQ09ORklHX0ZFQ19NUEM1Mnh4PXkKIENPTkZJR19GRUNfTVBDNTJ4eF9NRElPPXkKICMgQ09ORklHX0FUTDIgaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC03MjIsNiArNzQ5LDcgQEAKIENPTkZJR19ERVZQT1JUPXkKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogQ09ORklHX0kyQ19DSEFSREVWPXkKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogCkBAIC03NTAsNiArNzc4LDcgQEAKICMKICMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCiAjCisjIENPTkZJR19JMkNfREVTSUdOV0FSRSBpcyBub3Qgc2V0CiBDT05GSUdfSTJDX01QQz15CiAjIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldApAQCAtNzc2LDIzICs4MDUsMjMgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TUEkgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElCPXkKICMgQ09ORklHX0dQSU9MSUIgaXMgbm90IHNldAogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtODExLDMwICs4NDAsMTggQEAKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAorIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRldmljZXMKLSMKLQotIwotIyBNdWx0aW1lZGlhIGNvcmUgc3VwcG9ydAotIwotIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX01FRElBIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRyaXZlcnMKLSMKLSMgQ09ORklHX0RBQiBpcyBub3Qgc2V0CisjIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwogIyBHcmFwaGljcyBzdXBwb3J0CiAjCiAjIENPTkZJR19BR1AgaXMgbm90IHNldAorQ09ORklHX1ZHQV9BUkI9eQogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKQEAgLTg3MSwxNSArODg4LDE3IEBACiAjIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwogIwogIyBDT05GSUdfVVNCX0M2N1gwMF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1hIQ0lfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9FSENJX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0Q9bQogIyBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19TT0MgaXMgbm90IHNldAotQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0Y9eQogQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfQkU9eQogIyBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9MRSBpcyBub3Qgc2V0CitDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRj15CiAjIENPTkZJR19VU0JfT0hDSV9IQ0RfUENJIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX0RFU0M9eQogQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fTU1JTz15CkBAIC05OTUsNiArMTAxNCw3IEBACiAjIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9SWDg1ODEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SWDgwMjUgaXMgbm90IHNldAogCiAjCiAjIFNQSSBSVEMgZHJpdmVycwpAQCAtMTAyMiw2ICsxMDQyLDEwIEBACiAjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAogIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKworIworIyBUSSBWTFlOUQorIwogIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CiAKICMKQEAgLTEwNDEsMTIgKzEwNjUsMTYgQEAKICMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotQ09ORklHX0ZJTEVfTE9DS0lORz15CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAorQ09ORklHX0ZJTEVfTE9DS0lORz15CitDT05GSUdfRlNOT1RJRlk9eQogIyBDT05GSUdfRE5PVElGWSBpcyBub3Qgc2V0CiAjIENPTkZJR19JTk9USUZZIGlzIG5vdCBzZXQKK0NPTkZJR19JTk9USUZZX1VTRVI9eQogIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAogIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldApAQCAtMTExNCw3ICsxMTQyLDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQpAQCAtMTIwMSw2ICsxMjI4LDcgQEAKIENPTkZJR19IQVNfRE1BPXkKIENPTkZJR19IQVZFX0xNQj15CiBDT05GSUdfTkxBVFRSPXkKK0NPTkZJR19HRU5FUklDX0FUT01JQzY0PXkKIAogIwogIyBLZXJuZWwgaGFja2luZwpAQCAtMTIxMCw2ICsxMjM4LDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTEyMjMsMjMgKzEyNTIsMTIgQEAKIENPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQotCi0jCi0jIFRyYWNlcnMKLSMKLSMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VWRU5UX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUkFDRV9CUkFOQ0hfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NUQUNLX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LTUVNVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfV09SS1FVRVVFX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKKyMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0CitDT05GSUdfUFBDX1dFUlJPUj15CiBDT05GSUdfUFJJTlRfU1RBQ0tfREVQVEg9NjQKICMgQ09ORklHX0lSUVNUQUNLUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CT09UWF9URVhUIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzUyeHgvdHFtNTIwMF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy81Mnh4L3RxbTUyMDBfZGVmY29uZmlnCmluZGV4IDg1ODVjN2MuLjc1YzgzNWMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzUyeHgvdHFtNTIwMF9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNTJ4eC90cW01MjAwX2RlZmNvbmZpZwpAQCAtMSwyNSArMSwyNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMwLXJjMgotIyBTYXQgQXByIDE4IDAwOjQ4OjU3IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzQKKyMgVGh1IE9jdCAxNSAxMDozMzoyMyAyMDA5CiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKICMKICMgUHJvY2Vzc29yIHN1cHBvcnQKICMKLUNPTkZJR182eHg9eQorQ09ORklHX1BQQ19CT09LM1NfMzI9eQogIyBDT05GSUdfUFBDXzg1eHggaXMgbm90IHNldAogIyBDT05GSUdfUFBDXzh4eCBpcyBub3Qgc2V0CiAjIENPTkZJR180MHggaXMgbm90IHNldAogIyBDT05GSUdfNDR4IGlzIG5vdCBzZXQKICMgQ09ORklHX0UyMDAgaXMgbm90IHNldAogQ09ORklHX1BQQ19CT09LM1M9eQorQ09ORklHXzZ4eD15CiBDT05GSUdfUFBDX0ZQVT15CiAjIENPTkZJR19BTFRJVkVDIGlzIG5vdCBzZXQKIENPTkZJR19QUENfU1REX01NVT15CiBDT05GSUdfUFBDX1NURF9NTVVfMzI9eQogIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfUFBDX0hBVkVfUE1VX1NVUFBPUlQ9eQogIyBDT05GSUdfU01QIGlzIG5vdCBzZXQKIENPTkZJR19QUEMzMj15CiBDT05GSUdfV09SRF9TSVpFPTMyCkBAIC0zMCwxNSArMzIsMTcgQEAKIENPTkZJR19HRU5FUklDX1RJTUVfVlNZU0NBTEw9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiAjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKK0NPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKIENPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQogQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzI9eQogQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQogQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CiAjIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTIGlzIG5vdCBzZXQKIENPTkZJR19QUEM9eQpAQCAtNTIsMTEgKzU2LDEzIEBACiAjIENPTkZJR19HRU5FUklDX1RCU1lOQyBpcyBub3Qgc2V0CiBDT05GSUdfQVVESVRfQVJDSD15CiBDT05GSUdfR0VORVJJQ19CVUc9eQorQ09ORklHX0RUQz15CiBDT05GSUdfREVGQVVMVF9VSU1BR0U9eQogIyBDT05GSUdfUFBDX0RDUl9OQVRJVkUgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0RDUl9NTUlPIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX1NVUFBPUlRTX0RFQlVHX1BBR0VBTExPQz15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtNzcsMTEgKzgzLDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19HUk9VUF9TQ0hFRD15CkBAIC0xMDUsNyArMTEyLDYgQEAKIENPTkZJR19FTUJFRERFRD15CiAjIENPTkZJR19TWVNDVExfU1lTQ0FMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19LQUxMU1lNUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfSE9UUExVRz15CiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQpAQCAtMTE4LDYgKzEyNCwxMyBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQorCisjCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCisjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CisjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfU0xVQl9ERUJVRz15CiBDT05GSUdfQ09NUEFUX0JSSz15CkBAIC0xMjUsMTQgKzEzOCwxOSBAQAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CiBDT05GSUdfSEFWRV9DTEs9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCiAjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAogIyBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVCBpcyBub3Qgc2V0CiBDT05GSUdfU0xBQklORk89eQpAQCAtMTQ1LDcgKzE2Myw3IEBACiBDT05GSUdfTU9EVkVSU0lPTlM9eQogIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKIENPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAorQ09ORklHX0xCREFGPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIApAQCAtMjI1LDExICsyNDMsMTMgQEAKICMgQ09ORklHX0hBVkVfQU9VVCBpcyBub3Qgc2V0CiAjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CiAjIENPTkZJR19JT01NVV9IRUxQRVIgaXMgbm90IHNldAorIyBDT05GSUdfU1dJT1RMQiBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQogQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKICMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTI0NSw5ICsyNjUsMTAgQEAKIENPTkZJR19aT05FX0RNQV9GTEFHPTEKIENPTkZJR19CT1VOQ0U9eQogQ09ORklHX1ZJUlRfVE9fQlVTPXkKLUNPTkZJR19VTkVWSUNUQUJMRV9MUlU9eQogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfUFBDXzRLX1BBR0VTPXkKICMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldAogIyBDT05GSUdfUFBDXzY0S19QQUdFUyBpcyBub3Qgc2V0CkBAIC0yNTgsNiArMjc5LDcgQEAKIENPTkZJR19FWFRSQV9UQVJHRVRTPSIiCiBDT05GSUdfUE09eQogIyBDT05GSUdfUE1fREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfUE1fUlVOVElNRSBpcyBub3Qgc2V0CiBDT05GSUdfU0VDQ09NUD15CiBDT05GSUdfSVNBX0RNQV9BUEk9eQogCkBAIC0zMzQsNiArMzU2LDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC0zNDgsNiArMzcxLDcgQEAKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFODAyMTU0IGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19EQ0IgaXMgbm90IHNldAogCkBAIC0zNzMsNiArMzk3LDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CkBAIC0zODIsOSArNDA3LDkgQEAKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DT05DQVQ9eQogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQogIyBDT05GSUdfTVREX09GX1BBUlRTIGlzIG5vdCBzZXQKQEAgLTQ2NCw2ICs0ODksNyBAQAogIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CiBDT05GSUdfT0ZfREVWSUNFPXkKIENPTkZJR19PRl9JMkM9eQorQ09ORklHX09GX01ESU89eQogIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVj15CiAjIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKQEAgLTUwMiwxMCArNTI4LDYgQEAKICMgQ09ORklHX0JMS19ERVZfU1IgaXMgbm90IHNldAogQ09ORklHX0NIUl9ERVZfU0c9eQogIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAotCi0jCi0jIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVOcwotIwogIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKQEAgLTUyOSw2ICs1NTEsNyBAQAogIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKIENPTkZJR19BVEE9eQogIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19BVEFfVkVSQk9TRV9FUlJPUj15CiBDT05GSUdfU0FUQV9QTVA9eQogQ09ORklHX0FUQV9TRkY9eQogIyBDT05GSUdfU0FUQV9NViBpcyBub3Qgc2V0CkBAIC01MzgsNyArNTYxLDYgQEAKICMgQ09ORklHX01EIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0lOVE9TSF9EUklWRVJTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKLUNPTkZJR19DT01QQVRfTkVUX0RFVl9PUFM9eQogIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAogIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKQEAgLTU3NywxNCArNTk5LDE0IEBACiAjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiBDT05GSUdfRkVDX01QQzUyeHg9eQogQ09ORklHX0ZFQ19NUEM1Mnh4X01ESU89eQorIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC02NTQsNiArNjc2LDcgQEAKICMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CiBDT05GSUdfSTJDX0NIQVJERVY9eQogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiAKQEAgLTY2NCw2ICs2ODcsNyBAQAogIwogIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKICMKKyMgQ09ORklHX0kyQ19ERVNJR05XQVJFIGlzIG5vdCBzZXQKIENPTkZJR19JMkNfTVBDPXkKICMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0CkBAIC02ODUsMjIgKzcwOSwyOCBAQAogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKICMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisKKyMKKyMgUFBTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9XQU5UX09QVElPTkFMX0dQSU9MSUI9eQogIyBDT05GSUdfR1BJT0xJQiBpcyBub3Qgc2V0CiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogQ09ORklHX0hXTU9OPXkKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBOYXRpdmUgZHJpdmVycworIwogIyBDT05GSUdfU0VOU09SU19BRDc0MTQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKQEAgLTc0Nyw2ICs3NzcsOCBAQAogIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RNUDQwMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RNUDQyMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4Mzc4MUQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM3OTFEIGlzIG5vdCBzZXQKQEAgLTc1Niw5ICs3ODgsNyBAQAogIyBDT05GSUdfU0VOU09SU19XODNMNzg2TkcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiBDT05GSUdfV0FUQ0hET0c9eQogIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAogCkBAIC03ODksMjUgKzgxOSwxMiBAQAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CisjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZGV2aWNlcwotIwotCi0jCi0jIE11bHRpbWVkaWEgY29yZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fTUVESUEgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZHJpdmVycwotIwotIyBDT05GSUdfREFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKQEAgLTg1MSwxMSArODY4LDEyIEBACiAjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0Q9eQogQ09ORklHX1VTQl9PSENJX0hDRF9QUENfU09DPXkKLUNPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GPXkKIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0JFPXkKICMgQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfTEUgaXMgbm90IHNldAorQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0Y9eQogQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQz15CiBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPPXkKICMgQ09ORklHX1VTQl9PSENJX0xJVFRMRV9FTkRJQU4gaXMgbm90IHNldApAQCAtOTY5LDYgKzk4Nyw3IEBACiAjIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9SWDg1ODEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SWDgwMjUgaXMgbm90IHNldAogCiAjCiAjIFNQSSBSVEMgZHJpdmVycwpAQCAtOTk2LDYgKzEwMTUsMTAgQEAKICMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAogIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19VSU8gaXMgbm90IHNldAorCisjCisjIFRJIFZMWU5RCisjCiAjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKIAogIwpAQCAtMTAxNSwxMCArMTAzOCwxMyBAQAogIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci1DT05GSUdfRklMRV9MT0NLSU5HPXkKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CitDT05GSUdfRklMRV9MT0NLSU5HPXkKK0NPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15CiBDT05GSUdfSU5PVElGWV9VU0VSPXkKQEAgLTEwODksMTIgKzExMTUsMTIgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQogIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CiBDT05GSUdfTkZTX1Y0PXkKKyMgQ09ORklHX05GU19WNF8xIGlzIG5vdCBzZXQKIENPTkZJR19ST09UX05GUz15CiAjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKIENPTkZJR19MT0NLRD15CkBAIC0xMTk0LDYgKzEyMjAsNyBAQAogQ09ORklHX0hBU19ETUE9eQogQ09ORklHX0hBVkVfTE1CPXkKIENPTkZJR19OTEFUVFI9eQorQ09ORklHX0dFTkVSSUNfQVRPTUlDNjQ9eQogCiAjCiAjIEtlcm5lbCBoYWNraW5nCkBAIC0xMjAzLDYgKzEyMzAsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTIyMCwxMCArMTI0OCwxNCBAQAogIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS01FTUxFQUsgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKQEAgLTEyMzUsMTEgKzEyNjcsMTIgQEAKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19QQUdFQUxMT0MgaXMgbm90IHNldApAQCAtMTI0OCwyMyArMTI4MSwyNSBAQAogQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15Ci0KLSMKLSMgVHJhY2VycwotIworQ09ORklHX0ZUUkFDRT15CiAjIENPTkZJR19GVU5DVElPTl9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfSVJRU09GRl9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FVkVOVF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfRU5BQkxFX0RFRkFVTFRfVFJBQ0VSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUkFDRV9CUkFOQ0hfUFJPRklMSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19CUkFOQ0hfUFJPRklMRV9OT05FPXkKKyMgQ09ORklHX1BST0ZJTEVfQU5OT1RBVEVEX0JSQU5DSEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTEVfQUxMX0JSQU5DSEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NUQUNLX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19LTUVNVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfV09SS1FVRVVFX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldAorQ09ORklHX1BQQ19XRVJST1I9eQogQ09ORklHX1BSSU5UX1NUQUNLX0RFUFRIPTY0CiAjIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKQEAgLTEyODksNyArMTMyNCw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fQUVBRDI9eQpAQCAtMTMzMSwxMSArMTM2NSwxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX01ENT15CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjNTIwMF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM1MjAwX2RlZmNvbmZpZwppbmRleCBhYWE0NDE2Li41MjNkNWZlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM1MjAwX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM1MjAwX2RlZmNvbmZpZwpAQCAtMSwyNSArMSwyNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMwLXJjMgotIyBNb24gQXByIDIwIDExOjA2OjI1IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzQKKyMgVGh1IE9jdCAxNSAxMDozMzoyMSAyMDA5CiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKICMKICMgUHJvY2Vzc29yIHN1cHBvcnQKICMKLUNPTkZJR182eHg9eQorQ09ORklHX1BQQ19CT09LM1NfMzI9eQogIyBDT05GSUdfUFBDXzg1eHggaXMgbm90IHNldAogIyBDT05GSUdfUFBDXzh4eCBpcyBub3Qgc2V0CiAjIENPTkZJR180MHggaXMgbm90IHNldAogIyBDT05GSUdfNDR4IGlzIG5vdCBzZXQKICMgQ09ORklHX0UyMDAgaXMgbm90IHNldAogQ09ORklHX1BQQ19CT09LM1M9eQorQ09ORklHXzZ4eD15CiBDT05GSUdfUFBDX0ZQVT15CiAjIENPTkZJR19BTFRJVkVDIGlzIG5vdCBzZXQKIENPTkZJR19QUENfU1REX01NVT15CiBDT05GSUdfUFBDX1NURF9NTVVfMzI9eQogIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfUFBDX0hBVkVfUE1VX1NVUFBPUlQ9eQogIyBDT05GSUdfU01QIGlzIG5vdCBzZXQKIENPTkZJR19QUEMzMj15CiBDT05GSUdfV09SRF9TSVpFPTMyCkBAIC0zMCwxNSArMzIsMTcgQEAKIENPTkZJR19HRU5FUklDX1RJTUVfVlNZU0NBTEw9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiAjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKK0NPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKIENPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQogQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzI9eQogQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQogQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CiBDT05GSUdfR0VORVJJQ19HUElPPXkKICMgQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVMgaXMgbm90IHNldApAQCAtNTMsMTIgKzU3LDE0IEBACiAjIENPTkZJR19HRU5FUklDX1RCU1lOQyBpcyBub3Qgc2V0CiBDT05GSUdfQVVESVRfQVJDSD15CiBDT05GSUdfR0VORVJJQ19CVUc9eQorQ09ORklHX0RUQz15CiBDT05GSUdfREVGQVVMVF9VSU1BR0U9eQogQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15CiAjIENPTkZJR19QUENfRENSX05BVElWRSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfRENSX01NSU8gaXMgbm90IHNldAogQ09ORklHX0FSQ0hfU1VQUE9SVFNfREVCVUdfUEFHRUFMTE9DPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCitDT05GSUdfQ09OU1RSVUNUT1JTPXkKIAogIwogIyBHZW5lcmFsIHNldHVwCkBAIC03OSwxMSArODUsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldApAQCAtMTAzLDcgKzExMCw2IEBACiBDT05GSUdfRU1CRURERUQ9eQogIyBDT05GSUdfU1lTQ1RMX1NZU0NBTEwgaXMgbm90IHNldAogIyBDT05GSUdfS0FMTFNZTVMgaXMgbm90IHNldAotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0hPVFBMVUc9eQogQ09ORklHX1BSSU5USz15CiBDT05GSUdfQlVHPXkKQEAgLTExNiw2ICsxMjIsMTMgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKKworIworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycworIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAorIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQogQ09ORklHX1NMVUJfREVCVUc9eQpAQCAtMTI0LDE0ICsxMzcsMTkgQEAKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQogQ09ORklHX0hBVkVfQ0xLPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIwogIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQgaXMgbm90IHNldAogQ09ORklHX1NMQUJJTkZPPXkKQEAgLTE0NCw3ICsxNjIsNyBAQAogIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKIENPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAorQ09ORklHX0xCREFGPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIApAQCAtMjA1LDcgKzIyMyw3IEBACiBDT05GSUdfUFBDX0JFU1RDT01NPXkKIENPTkZJR19QUENfQkVTVENPTU1fQVRBPXkKIENPTkZJR19QUENfQkVTVENPTU1fRkVDPXkKLSMgQ09ORklHX1NJTVBMRV9HUElPIGlzIG5vdCBzZXQKK0NPTkZJR19TSU1QTEVfR1BJTz15CiAKICMKICMgS2VybmVsIG9wdGlvbnMKQEAgLTIyOSwxMSArMjQ3LDEzIEBACiAjIENPTkZJR19IQVZFX0FPVVQgaXMgbm90IHNldAogIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAogIyBDT05GSUdfSU9NTVVfSEVMUEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NXSU9UTEIgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKIENPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CiAjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CkBAIC0yNDksOSArMjY5LDEwIEBACiBDT05GSUdfWk9ORV9ETUFfRkxBRz0xCiBDT05GSUdfQk9VTkNFPXkKIENPTkZJR19WSVJUX1RPX0JVUz15Ci1DT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ182NEtfUEFHRVMgaXMgbm90IHNldApAQCAtMjY1LDYgKzI4Niw3IEBACiBDT05GSUdfUE1fU0xFRVA9eQogQ09ORklHX1NVU1BFTkQ9eQogQ09ORklHX1NVU1BFTkRfRlJFRVpFUj15CisjIENPTkZJR19QTV9SVU5USU1FIGlzIG5vdCBzZXQKIENPTkZJR19TRUNDT01QPXkKIENPTkZJR19JU0FfRE1BX0FQST15CiAKQEAgLTM0OSw2ICszNzEsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTM2Myw2ICszODYsNyBAQAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAogIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxNTQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKICMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CiAKQEAgLTM4OCw2ICs0MTIsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKQEAgLTM5Nyw5ICs0MjIsOSBAQAogIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NPTkNBVD15CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ01ETElORV9QQVJUUz15CiBDT05GSUdfTVREX09GX1BBUlRTPXkKQEAgLTQ1OCw2ICs0ODMsNyBAQAogIyBDT05GSUdfTVREX1BNQzU1MSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfREFUQUZMQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9NMjVQODAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1NTVDI1TCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldApAQCAtNDkzLDYgKzUxOSw3IEBACiBDT05GSUdfT0ZfR1BJTz15CiBDT05GSUdfT0ZfSTJDPXkKIENPTkZJR19PRl9TUEk9eQorQ09ORklHX09GX01ESU89eQogIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVj15CiAjIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKQEAgLTUyOSw3ICs1NTYsOSBAQAogQ09ORklHX0VFUFJPTV9BVDI0PXkKICMgQ09ORklHX0VFUFJPTV9BVDI1IGlzIG5vdCBzZXQKICMgQ09ORklHX0VFUFJPTV9MRUdBQ1kgaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk9NX01BWDY4NzUgaXMgbm90IHNldAogIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NCNzEwX0NPUkUgaXMgbm90IHNldAogQ09ORklHX0hBVkVfSURFPXkKICMgQ09ORklHX0lERSBpcyBub3Qgc2V0CiAKQEAgLTU1MiwxMCArNTgxLDYgQEAKICMgQ09ORklHX0JMS19ERVZfU1IgaXMgbm90IHNldAogQ09ORklHX0NIUl9ERVZfU0c9eQogIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAotCi0jCi0jIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVOcwotIwogIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKQEAgLTU3Miw2ICs1OTcsOCBAQAogIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAogQ09ORklHX1NDU0lfTE9XTEVWRUw9eQogIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQk5YMl9JU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19CRTJJU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJXzNXXzlYWFggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BQ0FSRCBpcyBub3Qgc2V0CkBAIC01ODAsNiArNjA3LDcgQEAKICMgQ09ORklHX1NDU0lfQUlDN1hYWF9PTEQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BSUM3OVhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUlDOTRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX01WU0FTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfRFBUX0kyTyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FEVkFOU1lTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQVJDTVNSIGlzIG5vdCBzZXQKQEAgLTU5OSw3ICs2MjcsNiBAQAogIyBDT05GSUdfU0NTSV9JUFMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9JTklUSU8gaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9JTklBMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTVZTQVMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TVEVYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1lNNTNDOFhYXzIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9JUFIgaXMgbm90IHNldApAQCAtNjExLDExICs2MzgsMTQgQEAKICMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1BNQ1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9CRkFfRkMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogQ09ORklHX0FUQT15CiAjIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorQ09ORklHX0FUQV9WRVJCT1NFX0VSUk9SPXkKIENPTkZJR19TQVRBX1BNUD15CiAjIENPTkZJR19TQVRBX0FIQ0kgaXMgbm90IHNldAogIyBDT05GSUdfU0FUQV9TSUwyNCBpcyBub3Qgc2V0CkBAIC02MzcsNiArNjY3LDcgQEAKICMgQ09ORklHX1BBVEFfQUxJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQU1EIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVJUT1AgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BVFA4NjdYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVRJSVhQIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjQwX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0NNRDY0WCBpcyBub3Qgc2V0CkBAIC02NjUsNiArNjk2LDcgQEAKICMgQ09ORklHX1BBVEFfT1BUSURNQSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1BEQ19PTEQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SQURJU1lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUkRDIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUloxMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0MxMjAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0VSVkVSV09SS1MgaXMgbm90IHNldApAQCAtNjg0LDE0ICs3MTYsMTcgQEAKICMKIAogIwotIyBFbmFibGUgb25seSBvbmUgb2YgdGhlIHR3byBzdGFja3MsIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcKKyMgWW91IGNhbiBlbmFibGUgb25lIG9yIGJvdGggRmlyZVdpcmUgZHJpdmVyIHN0YWNrcy4KKyMKKworIworIyBTZWUgdGhlIGhlbHAgdGV4dHMgZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAjCiAjIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMk8gaXMgbm90IHNldAogIyBDT05GSUdfTUFDSU5UT1NIX0RSSVZFUlMgaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQotQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUz15CiAjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CiAjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldApAQCAtNzM5LDE2ICs3NzQsMTcgQEAKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogQ09ORklHX0ZFQ19NUEM1Mnh4PXkKIENPTkZJR19GRUNfTVBDNTJ4eF9NRElPPXkKICMgQ09ORklHX0FUTDIgaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC04NTQsNiArODkwLDcgQEAKIENPTkZJR19ERVZQT1JUPXkKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogQ09ORklHX0kyQ19DSEFSREVWPXkKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogQ09ORklHX0kyQ19BTEdPQklUPXkKQEAgLTg4Myw2ICs5MjAsNyBAQAogIwogIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKICMKKyMgQ09ORklHX0kyQ19ERVNJR05XQVJFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19HUElPIGlzIG5vdCBzZXQKIENPTkZJR19JMkNfTVBDPXkKICMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldApAQCAtOTEwLDEwICs5NDgsNiBAQAogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKICMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CkBAIC05MzUsNiArOTY5LDExIEBACiAjCiBDT05GSUdfU1BJX1NQSURFVj1tCiAjIENPTkZJR19TUElfVExFNjJYMCBpcyBub3Qgc2V0CisKKyMKKyMgUFBTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9XQU5UX09QVElPTkFMX0dQSU9MSUI9eQogQ09ORklHX0FSQ0hfUkVRVUlSRV9HUElPTElCPXkKIENPTkZJR19HUElPTElCPXkKQEAgLTk1NywxNiArOTk2LDI3IEBACiAjIFBDSSBHUElPIGV4cGFuZGVyczoKICMKICMgQ09ORklHX0dQSU9fQlQ4WFggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19MQU5HV0VMTCBpcyBub3Qgc2V0CiAKICMKICMgU1BJIEdQSU8gZXhwYW5kZXJzOgogIwogIyBDT05GSUdfR1BJT19NQVg3MzAxIGlzIG5vdCBzZXQKICMgQ09ORklHX0dQSU9fTUNQMjNTMDggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19NQzMzODgwIGlzIG5vdCBzZXQKKworIworIyBBQzk3IEdQSU8gZXhwYW5kZXJzOgorIwogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKIENPTkZJR19IV01PTj15CiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgTmF0aXZlIGRyaXZlcnMKKyMKICMgQ09ORklHX1NFTlNPUlNfQUQ3NDE0IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQUQ3NDE4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURDWFggaXMgbm90IHNldApAQCAtMTAxOSw2ICsxMDY5LDggQEAKICMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UTVA0MDEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UTVA0MjEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WSUE2ODZBIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKQEAgLTEwMzEsOSArMTA4Myw3IEBACiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfTElTM19TUEkgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogQ09ORklHX1dBVENIRE9HPXkKICMgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUIGlzIG5vdCBzZXQKIApAQCAtMTA3MywzMSArMTEyMywyMCBAQAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfTUMxMzc4MyBpcyBub3Qgc2V0CisjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19FWlhfUENBUCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZGV2aWNlcwotIwotCi0jCi0jIE11bHRpbWVkaWEgY29yZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fTUVESUEgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZHJpdmVycwotIwotQ09ORklHX0RBQj15Ci0jIENPTkZJR19VU0JfREFCVVNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKICMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CitDT05GSUdfVkdBX0FSQj15CiBDT05GSUdfRFJNPXkKICMgQ09ORklHX0RSTV9UREZYIGlzIG5vdCBzZXQKICMgQ09ORklHX0RSTV9SMTI4IGlzIG5vdCBzZXQKQEAgLTExNjcsNiArMTIwNiw3IEBACiAjIENPTkZJR19GQl9CUk9BRFNIRUVUIGlzIG5vdCBzZXQKIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQ9eQogQ09ORklHX0xDRF9DTEFTU19ERVZJQ0U9bQorIyBDT05GSUdfTENEX0xNUzI4M0dGMDUgaXMgbm90IHNldAogIyBDT05GSUdfTENEX0xUVjM1MFFWIGlzIG5vdCBzZXQKICMgQ09ORklHX0xDRF9JTEk5MzIwIGlzIG5vdCBzZXQKICMgQ09ORklHX0xDRF9URE8yNE0gaXMgbm90IHNldApAQCAtMTE5OCw3ICsxMjM4LDYgQEAKICMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKIENPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAogCiAjCkBAIC0xMjE3LDEwICsxMjU2LDExIEBACiBDT05GSUdfSElEX0NIRVJSWT15CiAjIENPTkZJR19ISURfQ0hJQ09OWSBpcyBub3Qgc2V0CiBDT05GSUdfSElEX0NZUFJFU1M9eQotIyBDT05GSUdfRFJBR09OUklTRV9GRiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfRFJBR09OUklTRSBpcyBub3Qgc2V0CiBDT05GSUdfSElEX0VaS0VZPXkKICMgQ09ORklHX0hJRF9LWUUgaXMgbm90IHNldAogIyBDT05GSUdfSElEX0dZUkFUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9UV0lOSEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9LRU5TSU5HVE9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9MT0dJVEVDSCBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfTUlDUk9TT0ZUIGlzIG5vdCBzZXQKQEAgLTEyMzEsMTAgKzEyNzEsMTEgQEAKICMgQ09ORklHX0hJRF9TQU1TVU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9TT05ZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9TVU5QTFVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dSRUVOQVNJQV9GRiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfR1JFRU5BU0lBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9TTUFSVEpPWVBMVVMgaXMgbm90IHNldAogIyBDT05GSUdfSElEX1RPUFNFRUQgaXMgbm90IHNldAotIyBDT05GSUdfVEhSVVNUTUFTVEVSX0ZGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1pFUk9QTFVTX0ZGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9USFJVU1RNQVNURVIgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1pFUk9QTFVTIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfU1VQUE9SVD15CiBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CiBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQpAQCAtMTI2MSwxNSArMTMwMiwxNyBAQAogIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKICMKICMgQ09ORklHX1VTQl9DNjdYMDBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9YSENJX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfRUhDSV9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09IQ0lfSENEPXkKIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX1NPQz15Ci1DT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRj15CiBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9CRT15CiAjIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0xFIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GPXkKIENPTkZJR19VU0JfT0hDSV9IQ0RfUENJPXkKIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX0RFU0M9eQogQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fTU1JTz15CkBAIC0xNDAwLDYgKzE0NDMsNyBAQAogIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfUlg4NTgxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlg4MDI1IGlzIG5vdCBzZXQKIAogIwogIyBTUEkgUlRDIGRyaXZlcnMKQEAgLTE0MTEsNiArMTQ1NSw3IEBACiAjIENPTkZJR19SVENfRFJWX1I5NzAxIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfUlM1QzM0OCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0RTMzIzNCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjIxMjMgaXMgbm90IHNldAogCiAjCiAjIFBsYXRmb3JtIFJUQyBkcml2ZXJzCkBAIC0xNDM0LDYgKzE0NzksMTAgQEAKICMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAogIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19VSU8gaXMgbm90IHNldAorCisjCisjIFRJIFZMWU5RCisjCiAjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKIAogIwpAQCAtMTQ1MywxMCArMTUwMiwxMyBAQAogIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci1DT05GSUdfRklMRV9MT0NLSU5HPXkKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CitDT05GSUdfRklMRV9MT0NLSU5HPXkKK0NPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15CiBDT05GSUdfSU5PVElGWV9VU0VSPXkKQEAgLTE1MzMsMTIgKzE1ODUsMTIgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQogIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CiBDT05GSUdfTkZTX1Y0PXkKKyMgQ09ORklHX05GU19WNF8xIGlzIG5vdCBzZXQKIENPTkZJR19ST09UX05GUz15CiAjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKIENPTkZJR19MT0NLRD15CkBAIC0xNjI0LDYgKzE2NzYsNyBAQAogQ09ORklHX0hBU19ETUE9eQogQ09ORklHX0hBVkVfTE1CPXkKIENPTkZJR19OTEFUVFI9eQorQ09ORklHX0dFTkVSSUNfQVRPTUlDNjQ9eQogCiAjCiAjIEtlcm5lbCBoYWNraW5nCkBAIC0xNjMzLDYgKzE2ODYsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTY1MCwxMCArMTcwNCwxNCBAQAogIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS01FTUxFQUsgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKQEAgLTE2NjUsMTEgKzE3MjMsMTIgQEAKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19QQUdFQUxMT0MgaXMgbm90IHNldApAQCAtMTY3OCwyMyArMTczNywyNSBAQAogQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15Ci0KLSMKLSMgVHJhY2VycwotIworQ09ORklHX0ZUUkFDRT15CiAjIENPTkZJR19GVU5DVElPTl9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfSVJRU09GRl9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FVkVOVF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfRU5BQkxFX0RFRkFVTFRfVFJBQ0VSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUkFDRV9CUkFOQ0hfUFJPRklMSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19CUkFOQ0hfUFJPRklMRV9OT05FPXkKKyMgQ09ORklHX1BST0ZJTEVfQU5OT1RBVEVEX0JSQU5DSEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTEVfQUxMX0JSQU5DSEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NUQUNLX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19LTUVNVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfV09SS1FVRVVFX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldAorQ09ORklHX1BQQ19XRVJST1I9eQogQ09ORklHX1BSSU5UX1NUQUNLX0RFUFRIPTY0CiAjIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKQEAgLTE3MTksNyArMTc4MCw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fQUVBRDI9eQpAQCAtMTc2MSwxMSArMTgyMSwxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX01ENT15CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHBjNjRlX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL3BwYzY0ZV9kZWZjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMThhZjQ2MAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL3BwYzY0ZV9kZWZjb25maWcKQEAgLTAsMCArMSwyMTk5IEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM1CisjIEZyaSBPY3QgMTYgMTE6Mzc6MTUgMjAwOQorIworQ09ORklHX1BQQzY0PXkKKworIworIyBQcm9jZXNzb3Igc3VwcG9ydAorIworIyBDT05GSUdfUFBDX0JPT0szU182NCBpcyBub3Qgc2V0CitDT05GSUdfUFBDX0JPT0szRV82ND15CitDT05GSUdfUFBDX0JPT0szRT15CitDT05GSUdfUFBDX0ZQVT15CitDT05GSUdfQk9PS0U9eQorQ09ORklHX1BQQ19NTVVfTk9IQVNIPXkKK0NPTkZJR19QUENfTU1VX05PSEFTSF82ND15CitDT05GSUdfUFBDX0JPT0szRV9NTVU9eQorIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfVklSVF9DUFVfQUNDT1VOVElORz15CitDT05GSUdfUFBDX0hBVkVfUE1VX1NVUFBPUlQ9eQorQ09ORklHX1BQQ19QRVJGX0NUUlM9eQorQ09ORklHX1NNUD15CitDT05GSUdfTlJfQ1BVUz0zMgorQ09ORklHXzY0QklUPXkKK0NPTkZJR19XT1JEX1NJWkU9NjQKK0NPTkZJR19BUkNIX1BIWVNfQUREUl9UXzY0QklUPXkKK0NPTkZJR19NTVU9eQorQ09ORklHX0dFTkVSSUNfQ01PU19VUERBVEU9eQorQ09ORklHX0dFTkVSSUNfVElNRT15CitDT05GSUdfR0VORVJJQ19USU1FX1ZTWVNDQUxMPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQorQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBPXkKK0NPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTks9eQorQ09ORklHX0lSUV9QRVJfQ1BVPXkKK0NPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQorQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKK0NPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKK0NPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQorQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKK0NPTkZJR19BUkNIX0hBU19JTE9HMl9VMzI9eQorQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2ND15CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQorQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQorQ09ORklHX1BQQz15CitDT05GSUdfRUFSTFlfUFJJTlRLPXkKK0NPTkZJR19DT01QQVQ9eQorQ09ORklHX1NZU1ZJUENfQ09NUEFUPXkKK0NPTkZJR19TQ0hFRF9PTUlUX0ZSQU1FX1BPSU5URVI9eQorQ09ORklHX0FSQ0hfTUFZX0hBVkVfUENfRkRDPXkKK0NPTkZJR19QUENfT0Y9eQorQ09ORklHX09GPXkKKyMgQ09ORklHX1BQQ19VREJHXzE2NTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dFTkVSSUNfVEJTWU5DIGlzIG5vdCBzZXQKK0NPTkZJR19BVURJVF9BUkNIPXkKK0NPTkZJR19HRU5FUklDX0JVRz15CitDT05GSUdfRFRDPXkKKyMgQ09ORklHX0RFRkFVTFRfVUlNQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19EQ1JfTkFUSVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19EQ1JfTU1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfT0ZfUExBVEZPUk1fUENJIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1NVUFBPUlRTX0RFQlVHX1BBR0VBTExPQz15CitDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfTE9DS19LRVJORUw9eQorQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKK0NPTkZJR19TV0FQPXkKK0NPTkZJR19TWVNWSVBDPXkKK0NPTkZJR19TWVNWSVBDX1NZU0NUTD15CitDT05GSUdfUE9TSVhfTVFVRVVFPXkKK0NPTkZJR19QT1NJWF9NUVVFVUVfU1lTQ1RMPXkKKyMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAorQ09ORklHX1RBU0tTVEFUUz15CitDT05GSUdfVEFTS19ERUxBWV9BQ0NUPXkKKyMgQ09ORklHX1RBU0tfWEFDQ1QgaXMgbm90IHNldAorIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorCisjCisjIFJDVSBTdWJzeXN0ZW0KKyMKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD02NAorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CisjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfSUtDT05GSUc9eQorQ09ORklHX0lLQ09ORklHX1BST0M9eQorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTcKKyMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKK0NPTkZJR19DR1JPVVBTPXkKKyMgQ09ORklHX0NHUk9VUF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19DR1JPVVBfTlMgaXMgbm90IHNldAorIyBDT05GSUdfQ0dST1VQX0ZSRUVaRVIgaXMgbm90IHNldAorIyBDT05GSUdfQ0dST1VQX0RFVklDRSBpcyBub3Qgc2V0CitDT05GSUdfQ1BVU0VUUz15CitDT05GSUdfUFJPQ19QSURfQ1BVU0VUPXkKKyMgQ09ORklHX0NHUk9VUF9DUFVBQ0NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFU09VUkNFX0NPVU5URVJTIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKK0NPTkZJR19SRUxBWT15CitDT05GSUdfTkFNRVNQQUNFUz15CisjIENPTkZJR19VVFNfTlMgaXMgbm90IHNldAorIyBDT05GSUdfSVBDX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTRVJfTlMgaXMgbm90IHNldAorIyBDT05GSUdfUElEX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9OUyBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQorQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKK0NPTkZJR19SRF9HWklQPXkKK0NPTkZJR19SRF9CWklQMj15CitDT05GSUdfUkRfTFpNQT15CitDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQorQ09ORklHX1NZU0NUTD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQorIyBDT05GSUdfRU1CRURERUQgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKK0NPTkZJR19LQUxMU1lNUz15CitDT05GSUdfS0FMTFNZTVNfQUxMPXkKKyMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAorQ09ORklHX0hPVFBMVUc9eQorQ09ORklHX1BSSU5USz15CitDT05GSUdfQlVHPXkKK0NPTkZJR19FTEZfQ09SRT15CitDT05GSUdfQkFTRV9GVUxMPXkKK0NPTkZJR19GVVRFWD15CitDT05GSUdfRVBPTEw9eQorQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19USU1FUkZEPXkKK0NPTkZJR19FVkVOVEZEPXkKK0NPTkZJR19TSE1FTT15CitDT05GSUdfQUlPPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKKworIworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycworIworQ09ORklHX1BFUkZfRVZFTlRTPXkKK0NPTkZJR19FVkVOVF9QUk9GSUxFPXkKKyMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfUEVSRl9VU0VfVk1BTExPQyBpcyBub3Qgc2V0CitDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX1BDSV9RVUlSS1M9eQorQ09ORklHX1NMVUJfREVCVUc9eQorIyBDT05GSUdfQ09NUEFUX0JSSyBpcyBub3Qgc2V0CisjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKK0NPTkZJR19TTFVCPXkKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorQ09ORklHX1BST0ZJTElORz15CitDT05GSUdfVFJBQ0VQT0lOVFM9eQorQ09ORklHX09QUk9GSUxFPXkKK0NPTkZJR19IQVZFX09QUk9GSUxFPXkKKyMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQorQ09ORklHX0hBVkVfU1lTQ0FMTF9XUkFQUEVSUz15CitDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQorQ09ORklHX0hBVkVfS1BST0JFUz15CitDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKK0NPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CitDT05GSUdfVVNFX0dFTkVSSUNfU01QX0hFTFBFUlM9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCisjIENPTkZJR19HQ09WX0tFUk5FTCBpcyBub3Qgc2V0CitDT05GSUdfU0xPV19XT1JLPXkKKyMgQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQgaXMgbm90IHNldAorQ09ORklHX1NMQUJJTkZPPXkKK0NPTkZJR19SVF9NVVRFWEVTPXkKK0NPTkZJR19CQVNFX1NNQUxMPTAKK0NPTkZJR19NT0RVTEVTPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKK0NPTkZJR19NT0RVTEVfVU5MT0FEPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAorQ09ORklHX01PRFZFUlNJT05TPXkKK0NPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEw9eQorQ09ORklHX1NUT1BfTUFDSElORT15CitDT05GSUdfQkxPQ0s9eQorQ09ORklHX0JMS19ERVZfQlNHPXkKKyMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKK0NPTkZJR19CTE9DS19DT01QQVQ9eQorCisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJR19JT1NDSEVEX05PT1A9eQorQ09ORklHX0lPU0NIRURfQVM9eQorQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQorQ09ORklHX0lPU0NIRURfQ0ZRPXkKK0NPTkZJR19ERUZBVUxUX0FTPXkKKyMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKKyMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAorCisjCisjIFBsYXRmb3JtIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQQ19DRUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19DRUxMX05BVElWRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUTJBRFMgaXMgbm90IHNldAorQ09ORklHX1BQQ19PRl9CT09UX1RSQU1QT0xJTkU9eQorIyBDT05GSUdfSVBJQyBpcyBub3Qgc2V0CisjIENPTkZJR19NUElDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QSUNfV0VJUkQgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0k4MjU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1UzX0RBUlQgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX1JUQVMgaXMgbm90IHNldAorIyBDT05GSUdfTU1JT19OVlJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfTVBDMTA2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ185NzBfTkFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19JTkRJUkVDVF9JTyBpcyBub3Qgc2V0CisjIENPTkZJR19HRU5FUklDX0lPTUFQIGlzIG5vdCBzZXQKK0NPTkZJR19DUFVfRlJFUT15CitDT05GSUdfQ1BVX0ZSRVFfVEFCTEU9eQorIyBDT05GSUdfQ1BVX0ZSRVFfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0NQVV9GUkVRX1NUQVQ9eQorIyBDT05GSUdfQ1BVX0ZSRVFfU1RBVF9ERVRBSUxTIGlzIG5vdCBzZXQKK0NPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9QRVJGT1JNQU5DRT15CisjIENPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9QT1dFUlNBVkUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfVVNFUlNQQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX09OREVNQU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX0NPTlNFUlZBVElWRSBpcyBub3Qgc2V0CitDT05GSUdfQ1BVX0ZSRVFfR09WX1BFUkZPUk1BTkNFPXkKK0NPTkZJR19DUFVfRlJFUV9HT1ZfUE9XRVJTQVZFPXkKK0NPTkZJR19DUFVfRlJFUV9HT1ZfVVNFUlNQQUNFPXkKKyMgQ09ORklHX0NQVV9GUkVRX0dPVl9PTkRFTUFORCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRlJFUV9HT1ZfQ09OU0VSVkFUSVZFIGlzIG5vdCBzZXQKKworIworIyBDUFUgRnJlcXVlbmN5IGRyaXZlcnMKKyMKKyMgQ09ORklHX0ZTTF9VTEkxNTc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJTVBMRV9HUElPIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgb3B0aW9ucworIworQ09ORklHX1RJQ0tfT05FU0hPVD15CitDT05GSUdfTk9fSFo9eQorQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15CisjIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAorQ09ORklHX0haXzI1MD15CisjIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0CitDT05GSUdfSFo9MjUwCitDT05GSUdfU0NIRURfSFJUSUNLPXkKK0NPTkZJR19QUkVFTVBUX05PTkU9eQorIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CitDT05GSUdfQklORk1UX0VMRj15CitDT05GSUdfQ09NUEFUX0JJTkZNVF9FTEY9eQorIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAorIyBDT05GSUdfSEFWRV9BT1VUIGlzIG5vdCBzZXQKK0NPTkZJR19CSU5GTVRfTUlTQz1tCitDT05GSUdfSU9NTVVfVk1FUkdFPXkKK0NPTkZJR19JT01NVV9IRUxQRVI9eQorIyBDT05GSUdfU1dJT1RMQiBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQorQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKK0NPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKKyMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAorQ09ORklHX0lSUV9BTExfQ1BVUz15CisjIENPTkZJR19OVU1BIGlzIG5vdCBzZXQKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MjU2CitDT05GSUdfQVJDSF9TRUxFQ1RfTUVNT1JZX01PREVMPXkKK0NPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKK0NPTkZJR19BUkNIX1NQQVJTRU1FTV9FTkFCTEU9eQorQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKK0NPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKKyMgQ09ORklHX0ZMQVRNRU1fTUFOVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAorQ09ORklHX1NQQVJTRU1FTV9NQU5VQUw9eQorQ09ORklHX1NQQVJTRU1FTT15CitDT05GSUdfSEFWRV9NRU1PUllfUFJFU0VOVD15CitDT05GSUdfU1BBUlNFTUVNX0VYVFJFTUU9eQorQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQX0VOQUJMRT15CitDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVA9eQorIyBDT05GSUdfTUVNT1JZX0hPVFBMVUcgaXMgbm90IHNldAorQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15CitDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAorQ09ORklHX01JR1JBVElPTj15CitDT05GSUdfUEhZU19BRERSX1RfNjRCSVQ9eQorQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQorQ09ORklHX0JPVU5DRT15CitDT05GSUdfSEFWRV9NTE9DSz15CitDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKKyMgQ09ORklHX1BQQ19IQVNfSEFTSF82NEsgaXMgbm90IHNldAorQ09ORklHX1BQQ180S19QQUdFUz15CisjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ182NEtfUEFHRVMgaXMgbm90IHNldAorIyBDT05GSUdfUFBDXzI1NktfUEFHRVMgaXMgbm90IHNldAorQ09ORklHX0ZPUkNFX01BWF9aT05FT1JERVI9MTMKKyMgQ09ORklHX1NDSEVEX1NNVCBpcyBub3Qgc2V0CitDT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKKyMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CitDT05GSUdfRVhUUkFfVEFSR0VUUz0iIgorIyBDT05GSUdfUE0gaXMgbm90IHNldAorQ09ORklHX1NFQ0NPTVA9eQorQ09ORklHX0lTQV9ETUFfQVBJPXkKKworIworIyBCdXMgb3B0aW9ucworIworQ09ORklHX1pPTkVfRE1BPXkKK0NPTkZJR19HRU5FUklDX0lTQV9ETUE9eQorIyBDT05GSUdfUFBDX0lORElSRUNUX1BDSSBpcyBub3Qgc2V0CitDT05GSUdfUENJPXkKK0NPTkZJR19QQ0lfRE9NQUlOUz15CitDT05GSUdfUENJX1NZU0NBTEw9eQorIyBDT05GSUdfUENJRVBPUlRCVVMgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJPXkKK0NPTkZJR19QQ0lfTVNJPXkKKyMgQ09ORklHX1BDSV9MRUdBQ1kgaXMgbm90IHNldAorIyBDT05GSUdfUENJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDSV9TVFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDSV9JT1YgaXMgbm90IHNldAorQ09ORklHX1BDQ0FSRD15CisjIENPTkZJR19QQ01DSUFfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1BDTUNJQT15CitDT05GSUdfUENNQ0lBX0xPQURfQ0lTPXkKK0NPTkZJR19QQ01DSUFfSU9DVEw9eQorQ09ORklHX0NBUkRCVVM9eQorCisjCisjIFBDLWNhcmQgYnJpZGdlcworIworIyBDT05GSUdfWUVOVEEgaXMgbm90IHNldAorIyBDT05GSUdfUEQ2NzI5IGlzIG5vdCBzZXQKKyMgQ09ORklHX0k4MjA5MiBpcyBub3Qgc2V0CitDT05GSUdfSE9UUExVR19QQ0k9bQorIyBDT05GSUdfSE9UUExVR19QQ0lfRkFLRSBpcyBub3Qgc2V0CisjIENPTkZJR19IT1RQTFVHX1BDSV9DUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPVFBMVUdfUENJX1NIUEMgaXMgbm90IHNldAorIyBDT05GSUdfSEFTX1JBUElESU8gaXMgbm90IHNldAorIyBDT05GSUdfUkVMT0NBVEFCTEUgaXMgbm90IHNldAorQ09ORklHX1BBR0VfT0ZGU0VUPTB4YzAwMDAwMDAwMDAwMDAwMAorQ09ORklHX0tFUk5FTF9TVEFSVD0weGMwMDAwMDAwMDAwMDAwMDAKK0NPTkZJR19QSFlTSUNBTF9TVEFSVD0weDAwMDAwMDAwCitDT05GSUdfTkVUPXkKK0NPTkZJR19DT01QQVRfTkVUTElOS19NRVNTQUdFUz15CisKKyMKKyMgTmV0d29ya2luZyBvcHRpb25zCisjCitDT05GSUdfUEFDS0VUPXkKKyMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKK0NPTkZJR19VTklYPXkKK0NPTkZJR19YRlJNPXkKK0NPTkZJR19YRlJNX1VTRVI9bQorIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldAorQ09ORklHX1hGUk1fSVBDT01QPW0KK0NPTkZJR19ORVRfS0VZPW0KKyMgQ09ORklHX05FVF9LRVlfTUlHUkFURSBpcyBub3Qgc2V0CitDT05GSUdfSU5FVD15CitDT05GSUdfSVBfTVVMVElDQVNUPXkKKyMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CitDT05GSUdfSVBfRklCX0hBU0g9eQorQ09ORklHX0lQX1BOUD15CitDT05GSUdfSVBfUE5QX0RIQ1A9eQorQ09ORklHX0lQX1BOUF9CT09UUD15CisjIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0lQSVA9eQorIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX01ST1VURSBpcyBub3Qgc2V0CisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKK0NPTkZJR19TWU5fQ09PS0lFUz15CitDT05GSUdfSU5FVF9BSD1tCitDT05GSUdfSU5FVF9FU1A9bQorQ09ORklHX0lORVRfSVBDT01QPW0KK0NPTkZJR19JTkVUX1hGUk1fVFVOTkVMPW0KK0NPTkZJR19JTkVUX1RVTk5FTD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9eQorQ09ORklHX0lORVRfTFJPPXkKK0NPTkZJR19JTkVUX0RJQUc9eQorQ09ORklHX0lORVRfVENQX0RJQUc9eQorIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX1RDUF9DT05HX0NVQklDPXkKK0NPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKKyMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAorQ09ORklHX05FVEZJTFRFUj15CisjIENPTkZJR19ORVRGSUxURVJfREVCVUcgaXMgbm90IHNldAorQ09ORklHX05FVEZJTFRFUl9BRFZBTkNFRD15CisKKyMKKyMgQ29yZSBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgorIworQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LPW0KK0NPTkZJR19ORVRGSUxURVJfTkVUTElOS19RVUVVRT1tCitDT05GSUdfTkVURklMVEVSX05FVExJTktfTE9HPW0KK0NPTkZJR19ORl9DT05OVFJBQ0s9bQorQ09ORklHX05GX0NUX0FDQ1Q9eQorQ09ORklHX05GX0NPTk5UUkFDS19NQVJLPXkKK0NPTkZJR19ORl9DT05OVFJBQ0tfRVZFTlRTPXkKKyMgQ09ORklHX05GX0NUX1BST1RPX0RDQ1AgaXMgbm90IHNldAorQ09ORklHX05GX0NUX1BST1RPX0dSRT1tCitDT05GSUdfTkZfQ1RfUFJPVE9fU0NUUD1tCisjIENPTkZJR19ORl9DVF9QUk9UT19VRFBMSVRFIGlzIG5vdCBzZXQKK0NPTkZJR19ORl9DT05OVFJBQ0tfQU1BTkRBPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfRlRQPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfSDMyMz1tCitDT05GSUdfTkZfQ09OTlRSQUNLX0lSQz1tCitDT05GSUdfTkZfQ09OTlRSQUNLX05FVEJJT1NfTlM9bQorQ09ORklHX05GX0NPTk5UUkFDS19QUFRQPW0KKyMgQ09ORklHX05GX0NPTk5UUkFDS19TQU5FIGlzIG5vdCBzZXQKK0NPTkZJR19ORl9DT05OVFJBQ0tfU0lQPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfVEZUUD1tCitDT05GSUdfTkZfQ1RfTkVUTElOSz1tCitDT05GSUdfTkVURklMVEVSX1RQUk9YWT1tCitDT05GSUdfTkVURklMVEVSX1hUQUJMRVM9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfQ0xBU1NJRlk9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfQ09OTk1BUks9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfRFNDUD1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ITD1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9NQVJLPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GTE9HPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GUVVFVUU9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTk9UUkFDSz1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9SQVRFRVNUPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RQUk9YWT1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9UUkFDRT1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9UQ1BNU1M9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVENQT1BUU1RSSVA9bQorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NMVVNURVIgaXMgbm90IHNldAorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT01NRU5UPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTkJZVEVTPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTkxJTUlUPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTk1BUks9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OVFJBQ0s9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9EQ0NQPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRFNDUD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0VTUD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0hBU0hMSU1JVD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0hFTFBFUj1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0hMPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSVBSQU5HRT1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xFTkdUSD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xJTUlUPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTUFDPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTUFSSz1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01VTFRJUE9SVD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX09XTkVSPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUE9MSUNZPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUEtUVFlQRT1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1FVT1RBPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUkFURUVTVD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JFQUxNPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUkVDRU5UPW0KKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SRUNFTlRfUFJPQ19DT01QQVQgaXMgbm90IHNldAorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TQ1RQPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU09DS0VUPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RBVEU9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVEFUSVNUSUM9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVFJJTkc9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9UQ1BNU1M9bQorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1RJTUUgaXMgbm90IHNldAorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9VMzI9bQorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX09TRiBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9WUyBpcyBub3Qgc2V0CisKKyMKKyMgSVA6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCisjCitDT05GSUdfTkZfREVGUkFHX0lQVjQ9bQorQ09ORklHX05GX0NPTk5UUkFDS19JUFY0PW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfUFJPQ19DT01QQVQ9eQorQ09ORklHX0lQX05GX1FVRVVFPW0KK0NPTkZJR19JUF9ORl9JUFRBQkxFUz1tCitDT05GSUdfSVBfTkZfTUFUQ0hfQUREUlRZUEU9bQorQ09ORklHX0lQX05GX01BVENIX0FIPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9FQ049bQorQ09ORklHX0lQX05GX01BVENIX1RUTD1tCitDT05GSUdfSVBfTkZfRklMVEVSPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfUkVKRUNUPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfTE9HPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfVUxPRz1tCitDT05GSUdfTkZfTkFUPW0KK0NPTkZJR19ORl9OQVRfTkVFREVEPXkKK0NPTkZJR19JUF9ORl9UQVJHRVRfTUFTUVVFUkFERT1tCitDT05GSUdfSVBfTkZfVEFSR0VUX05FVE1BUD1tCitDT05GSUdfSVBfTkZfVEFSR0VUX1JFRElSRUNUPW0KK0NPTkZJR19ORl9OQVRfU05NUF9CQVNJQz1tCitDT05GSUdfTkZfTkFUX1BST1RPX0dSRT1tCitDT05GSUdfTkZfTkFUX1BST1RPX1NDVFA9bQorQ09ORklHX05GX05BVF9GVFA9bQorQ09ORklHX05GX05BVF9JUkM9bQorQ09ORklHX05GX05BVF9URlRQPW0KK0NPTkZJR19ORl9OQVRfQU1BTkRBPW0KK0NPTkZJR19ORl9OQVRfUFBUUD1tCitDT05GSUdfTkZfTkFUX0gzMjM9bQorQ09ORklHX05GX05BVF9TSVA9bQorQ09ORklHX0lQX05GX01BTkdMRT1tCitDT05GSUdfSVBfTkZfVEFSR0VUX0NMVVNURVJJUD1tCitDT05GSUdfSVBfTkZfVEFSR0VUX0VDTj1tCitDT05GSUdfSVBfTkZfVEFSR0VUX1RUTD1tCitDT05GSUdfSVBfTkZfUkFXPW0KK0NPTkZJR19JUF9ORl9BUlBUQUJMRVM9bQorQ09ORklHX0lQX05GX0FSUEZJTFRFUj1tCitDT05GSUdfSVBfTkZfQVJQX01BTkdMRT1tCisjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJUEMgaXMgbm90IHNldAorIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAorIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKK0NPTkZJR19MTEM9eQorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFggaXMgbm90IHNldAorIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxNTQgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfQ0xTX1JPVVRFPXkKKyMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCisjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9EUk9QX01PTklUT1IgaXMgbm90IHNldAorIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSREEgaXMgbm90IHNldAorIyBDT05GSUdfQlQgaXMgbm90IHNldAorIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAorQ09ORklHX1dJUkVMRVNTPXkKKyMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKK0NPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15CitDT05GSUdfV0lSRUxFU1NfRVhUPXkKK0NPTkZJR19XSVJFTEVTU19FWFRfU1lTRlM9eQorIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldAorCisjCisjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCisjCisjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CisjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CitDT05GSUdfU1RBTkRBTE9ORT15CitDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CitDT05GSUdfRldfTE9BREVSPXkKK0NPTkZJR19GSVJNV0FSRV9JTl9LRVJORUw9eQorQ09ORklHX0VYVFJBX0ZJUk1XQVJFPSIiCisjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CisjIENPTkZJR19NVEQgaXMgbm90IHNldAorQ09ORklHX09GX0RFVklDRT15CitDT05GSUdfT0ZfSTJDPXkKK0NPTkZJR19PRl9NRElPPXkKKyMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVY9eQorQ09ORklHX0JMS19ERVZfRkQ9eQorIyBDT05GSUdfQkxLX0NQUV9DSVNTX0RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfREFDOTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfTE9PUD15CisjIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfTkJEPW0KKyMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfUkFNPXkKK0NPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9NjU1MzYKKyMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAorIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAorQ09ORklHX01JU0NfREVWSUNFUz15CisjIENPTkZJR19QSEFOVE9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NHSV9JT0M0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JQ1M5MzJTNDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUF9JTE8gaXMgbm90IHNldAorIyBDT05GSUdfSVNMMjkwMDMgaXMgbm90IHNldAorIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKKworIworIyBFRVBST00gc3VwcG9ydAorIworIyBDT05GSUdfRUVQUk9NX0FUMjQgaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk9NX0xFR0FDWSBpcyBub3Qgc2V0CisjIENPTkZJR19FRVBST01fTUFYNjg3NSBpcyBub3Qgc2V0CisjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAorIyBDT05GSUdfQ0I3MTBfQ09SRSBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JREU9eQorQ09ORklHX0lERT15CisKKyMKKyMgUGxlYXNlIHNlZSBEb2N1bWVudGF0aW9uL2lkZS9pZGUudHh0IGZvciBoZWxwL2luZm8gb24gSURFIGRyaXZlcworIworQ09ORklHX0lERV9YRkVSX01PREU9eQorQ09ORklHX0lERV9USU1JTkdTPXkKK0NPTkZJR19JREVfQVRBUEk9eQorIyBDT05GSUdfQkxLX0RFVl9JREVfU0FUQSBpcyBub3Qgc2V0CitDT05GSUdfSURFX0dEPXkKK0NPTkZJR19JREVfR0RfQVRBPXkKKyMgQ09ORklHX0lERV9HRF9BVEFQSSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lERUNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfREVMS0lOIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lERUNEPXkKK0NPTkZJR19CTEtfREVWX0lERUNEX1ZFUkJPU0VfRVJST1JTPXkKKyMgQ09ORklHX0JMS19ERVZfSURFVEFQRSBpcyBub3Qgc2V0CisjIENPTkZJR19JREVfVEFTS19JT0NUTCBpcyBub3Qgc2V0CitDT05GSUdfSURFX1BST0NfRlM9eQorCisjCisjIElERSBjaGlwc2V0IHN1cHBvcnQvYnVnZml4ZXMKKyMKKyMgQ09ORklHX0JMS19ERVZfUExBVEZPUk0gaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSURFRE1BX1NGRj15CisKKyMKKyMgUENJIElERSBjaGlwc2V0cyBzdXBwb3J0CisjCitDT05GSUdfQkxLX0RFVl9JREVQQ0k9eQorQ09ORklHX0lERVBDSV9QQ0lCVVNfT1JERVI9eQorIyBDT05GSUdfQkxLX0RFVl9PRkZCT0FSRCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9HRU5FUklDPXkKKyMgQ09ORklHX0JMS19ERVZfT1BUSTYyMSBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JREVETUFfUENJPXkKKyMgQ09ORklHX0JMS19ERVZfQUVDNjJYWCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0FMSTE1WDMgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfQU1ENzRYWD15CisjIENPTkZJR19CTEtfREVWX0NNRDY0WCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1RSSUZMRVggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9DUzU1MjAgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9DUzU1MzAgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9IUFQzNjYgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9KTUlDUk9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU0MxMjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfUElJWCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lUODE3MiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lUODIxMyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lUODIxWCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX05TODc0MTUgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9QREMyMDJYWF9PTEQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9QREMyMDJYWF9ORVcgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TVldLUyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NJSU1BR0UgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TTDgyQzEwNSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NMQzkwRTY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVFJNMjkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVklBODJDWFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVEM4NkMwMDEgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSURFRE1BPXkKKworIworIyBTQ1NJIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJPXkKK0NPTkZJR19TQ1NJX0RNQT15CisjIENPTkZJR19TQ1NJX1RHVCBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9ORVRMSU5LPXkKK0NPTkZJR19TQ1NJX1BST0NfRlM9eQorCisjCisjIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCisjCitDT05GSUdfQkxLX0RFVl9TRD15CitDT05GSUdfQ0hSX0RFVl9TVD15CisjIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfU1I9eQorQ09ORklHX0JMS19ERVZfU1JfVkVORE9SPXkKK0NPTkZJR19DSFJfREVWX1NHPXkKKyMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX01VTFRJX0xVTj15CitDT05GSUdfU0NTSV9DT05TVEFOVFM9eQorIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0NBTl9BU1lOQyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9XQUlUX1NDQU49bQorCisjCisjIFNDU0kgVHJhbnNwb3J0cworIworQ09ORklHX1NDU0lfU1BJX0FUVFJTPXkKK0NPTkZJR19TQ1NJX0ZDX0FUVFJTPXkKK0NPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTPW0KKyMgQ09ORklHX1NDU0lfU0FTX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0FTX0xJQlNBUyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9TUlBfQVRUUlM9eQorQ09ORklHX1NDU0lfTE9XTEVWRUw9eQorIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQ1hHQjNfSVNDU0kgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9CTlgyX0lTQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFMklTQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUFDUkFJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FJQzdYWFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSUM3WFhYX09MRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FJQzc5WFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSUM5NFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTVZTQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BUkNNU1IgaXMgbm90IHNldAorIyBDT05GSUdfTUVHQVJBSURfTkVXR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FR0FSQUlEX0xFR0FDWSBpcyBub3Qgc2V0CisjIENPTkZJR19NRUdBUkFJRF9TQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9NUFQyU0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSFBUSU9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkZDT0UgaXMgbm90IHNldAorIyBDT05GSUdfRkNPRSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RNWDMxOTFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRUFUQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0ZVVFVSRV9ET01BSU4gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9HRFRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSVBTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSU5JVElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSU5JQTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NURVggaXMgbm90IHNldAorQ09ORklHX1NDU0lfU1lNNTNDOFhYXzI9eQorQ09ORklHX1NDU0lfU1lNNTNDOFhYX0RNQV9BRERSRVNTSU5HX01PREU9MAorQ09ORklHX1NDU0lfU1lNNTNDOFhYX0RFRkFVTFRfVEFHUz0xNgorQ09ORklHX1NDU0lfU1lNNTNDOFhYX01BWF9UQUdTPTY0CitDT05GSUdfU0NTSV9TWU01M0M4WFhfTU1JTz15CitDT05GSUdfU0NTSV9JUFI9eQorQ09ORklHX1NDU0lfSVBSX1RSQUNFPXkKK0NPTkZJR19TQ1NJX0lQUl9EVU1QPXkKKyMgQ09ORklHX1NDU0lfUUxPR0lDXzEyODAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9RTEFfRkMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9RTEFfSVNDU0kgaXMgbm90IHNldAorQ09ORklHX1NDU0lfTFBGQz1tCisjIENPTkZJR19TQ1NJX0xQRkNfREVCVUdfRlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9EQzM5NXggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAorQ09ORklHX1NDU0lfREVCVUc9bQorIyBDT05GSUdfU0NTSV9QTUNSQUlEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQkZBX0ZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTE9XTEVWRUxfUENNQ0lBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKK0NPTkZJR19BVEE9eQorIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19BVEFfVkVSQk9TRV9FUlJPUj15CitDT05GSUdfU0FUQV9QTVA9eQorIyBDT05GSUdfU0FUQV9BSENJIGlzIG5vdCBzZXQKK0NPTkZJR19TQVRBX1NJTDI0PXkKK0NPTkZJR19BVEFfU0ZGPXkKK0NPTkZJR19TQVRBX1NWVz15CisjIENPTkZJR19BVEFfUElJWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX01WIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfTlYgaXMgbm90IHNldAorIyBDT05GSUdfUERDX0FETUEgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9RU1RPUiBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1BST01JU0UgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9TWDQgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9TSUwgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9TSVMgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9VTEkgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9WSUEgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9WSVRFU1NFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfSU5JQzE2MlggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BTEkgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BTUQgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BUlRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FUUDg2N1ggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BVElJWFAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9DTUQ2NDBfUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQ01ENjRYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQ1M1NTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQ1M1NTMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQ1lQUkVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0VGQVIgaXMgbm90IHNldAorIyBDT05GSUdfQVRBX0dFTkVSSUMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9IUFQzNjYgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9IUFQzN1ggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9IUFQzWDJOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSFBUM1gzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSVQ4MjFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSVQ4MjEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSk1JQ1JPTiBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1RSSUZMRVggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9NQVJWRUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfTVBJSVggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9PTERQSUlYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfTkVUQ0VMTCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX05JTkpBMzIgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9OUzg3NDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfTlM4NzQxNSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX09QVEkgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9PUFRJRE1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUENNQ0lBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUERDX09MRCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1JBRElTWVMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9SREMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9SWjEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9TQzEyMDAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9TRVJWRVJXT1JLUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1BEQzIwMjdYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfU0lMNjgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfU0lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfVklBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfV0lOQk9ORCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1BMQVRGT1JNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfU0NIIGlzIG5vdCBzZXQKK0NPTkZJR19NRD15CitDT05GSUdfQkxLX0RFVl9NRD15CitDT05GSUdfTURfQVVUT0RFVEVDVD15CitDT05GSUdfTURfTElORUFSPXkKK0NPTkZJR19NRF9SQUlEMD15CitDT05GSUdfTURfUkFJRDE9eQorQ09ORklHX01EX1JBSUQxMD15CitDT05GSUdfTURfUkFJRDQ1Nj15CisjIENPTkZJR19NVUxUSUNPUkVfUkFJRDQ1NiBpcyBub3Qgc2V0CitDT05GSUdfTURfUkFJRDZfUFE9eQorIyBDT05GSUdfQVNZTkNfUkFJRDZfVEVTVCBpcyBub3Qgc2V0CitDT05GSUdfTURfTVVMVElQQVRIPW0KK0NPTkZJR19NRF9GQVVMVFk9bQorQ09ORklHX0JMS19ERVZfRE09eQorIyBDT05GSUdfRE1fREVCVUcgaXMgbm90IHNldAorQ09ORklHX0RNX0NSWVBUPW0KK0NPTkZJR19ETV9TTkFQU0hPVD1tCitDT05GSUdfRE1fTUlSUk9SPW0KKyMgQ09ORklHX0RNX0xPR19VU0VSU1BBQ0UgaXMgbm90IHNldAorQ09ORklHX0RNX1pFUk89bQorQ09ORklHX0RNX01VTFRJUEFUSD1tCisjIENPTkZJR19ETV9NVUxUSVBBVEhfUUwgaXMgbm90IHNldAorIyBDT05GSUdfRE1fTVVMVElQQVRIX1NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNX0RFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNX1VFVkVOVCBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNJT04gaXMgbm90IHNldAorCisjCisjIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKKyMKKworIworIyBZb3UgY2FuIGVuYWJsZSBvbmUgb3IgYm90aCBGaXJlV2lyZSBkcml2ZXIgc3RhY2tzLgorIworCisjCisjIFNlZSB0aGUgaGVscCB0ZXh0cyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyMKKyMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKK0NPTkZJR19JRUVFMTM5ND15CitDT05GSUdfSUVFRTEzOTRfT0hDSTEzOTQ9eQorIyBDT05GSUdfSUVFRTEzOTRfUENJTFlOWCBpcyBub3Qgc2V0CitDT05GSUdfSUVFRTEzOTRfU0JQMj1tCitDT05GSUdfSUVFRTEzOTRfRVRIMTM5NF9ST01fRU5UUlk9eQorQ09ORklHX0lFRUUxMzk0X0VUSDEzOTQ9bQorQ09ORklHX0lFRUUxMzk0X1JBV0lPPXkKK0NPTkZJR19JRUVFMTM5NF9WSURFTzEzOTQ9bQorQ09ORklHX0lFRUUxMzk0X0RWMTM5ND1tCisjIENPTkZJR19JRUVFMTM5NF9WRVJCT1NFREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKK0NPTkZJR19NQUNJTlRPU0hfRFJJVkVSUz15CisjIENPTkZJR19NQUNfRU1VTU9VU0VCVE4gaXMgbm90IHNldAorQ09ORklHX1dJTkRGQVJNPXkKK0NPTkZJR19ORVRERVZJQ0VTPXkKK0NPTkZJR19EVU1NWT1tCitDT05GSUdfQk9ORElORz1tCisjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CitDT05GSUdfVFVOPW0KKyMgQ09ORklHX1ZFVEggaXMgbm90IHNldAorIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKK0NPTkZJR19QSFlMSUI9eQorCisjCisjIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKKyMKK0NPTkZJR19NQVJWRUxMX1BIWT15CisjIENPTkZJR19EQVZJQ09NX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19RU0VNSV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTFhUX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19DSUNBREFfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJVEVTU0VfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNU0NfUEhZIGlzIG5vdCBzZXQKK0NPTkZJR19CUk9BRENPTV9QSFk9bQorIyBDT05GSUdfSUNQTFVTX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19SRUFMVEVLX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19OQVRJT05BTF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfU1RFMTBYUCBpcyBub3Qgc2V0CisjIENPTkZJR19MU0lfRVQxMDExQ19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0VUSEVSTkVUPXkKK0NPTkZJR19NSUk9eQorIyBDT05GSUdfSEFQUFlNRUFMIGlzIG5vdCBzZXQKK0NPTkZJR19TVU5HRU09eQorIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0CitDT05GSUdfTkVUX1ZFTkRPUl8zQ09NPXkKK0NPTkZJR19WT1JURVg9eQorIyBDT05GSUdfVFlQSE9PTiBpcyBub3Qgc2V0CisjIENPTkZJR19FVEhPQyBpcyBub3Qgc2V0CisjIENPTkZJR19ETkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9UVUxJUCBpcyBub3Qgc2V0CisjIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfUENJPXkKK0NPTkZJR19QQ05FVDMyPXkKKyMgQ09ORklHX0FNRDgxMTFfRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FEQVBURUNfU1RBUkZJUkUgaXMgbm90IHNldAorIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZPUkNFREVUSCBpcyBub3Qgc2V0CitDT05GSUdfRTEwMD15CisjIENPTkZJR19GRUFMTlggaXMgbm90IHNldAorIyBDT05GSUdfTkFUU0VNSSBpcyBub3Qgc2V0CisjIENPTkZJR19ORTJLX1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR184MTM5Q1AgaXMgbm90IHNldAorIyBDT05GSUdfODEzOVRPTyBpcyBub3Qgc2V0CisjIENPTkZJR19SNjA0MCBpcyBub3Qgc2V0CisjIENPTkZJR19TSVM5MDAgaXMgbm90IHNldAorIyBDT05GSUdfRVBJQzEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TTVNDOTQyMCBpcyBub3Qgc2V0CisjIENPTkZJR19TVU5EQU5DRSBpcyBub3Qgc2V0CisjIENPTkZJR19UTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJQV9SSElORSBpcyBub3Qgc2V0CisjIENPTkZJR19TQzkyMDMxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTDIgaXMgbm90IHNldAorQ09ORklHX05FVERFVl8xMDAwPXkKK0NPTkZJR19BQ0VOSUM9eQorQ09ORklHX0FDRU5JQ19PTUlUX1RJR09OX0k9eQorIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CitDT05GSUdfRTEwMDA9eQorIyBDT05GSUdfRTEwMDBFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19JR0IgaXMgbm90IHNldAorIyBDT05GSUdfSUdCVkYgaXMgbm90IHNldAorIyBDT05GSUdfTlM4MzgyMCBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1lFTExPV0ZJTiBpcyBub3Qgc2V0CisjIENPTkZJR19SODE2OSBpcyBub3Qgc2V0CisjIENPTkZJR19TSVMxOTAgaXMgbm90IHNldAorIyBDT05GSUdfU0tHRSBpcyBub3Qgc2V0CisjIENPTkZJR19TS1kyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0CitDT05GSUdfVElHT04zPXkKKyMgQ09ORklHX0JOWDIgaXMgbm90IHNldAorIyBDT05GSUdfQ05JQyBpcyBub3Qgc2V0CisjIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTDEgaXMgbm90IHNldAorIyBDT05GSUdfQVRMMUUgaXMgbm90IHNldAorIyBDT05GSUdfQVRMMUMgaXMgbm90IHNldAorIyBDT05GSUdfSk1FIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZfMTAwMDA9eQorIyBDT05GSUdfQ0hFTFNJT19UMSBpcyBub3Qgc2V0CitDT05GSUdfQ0hFTFNJT19UM19ERVBFTkRTPXkKKyMgQ09ORklHX0NIRUxTSU9fVDMgaXMgbm90IHNldAorIyBDT05GSUdfRU5JQyBpcyBub3Qgc2V0CisjIENPTkZJR19JWEdCRSBpcyBub3Qgc2V0CitDT05GSUdfSVhHQj1tCisjIENPTkZJR19TMklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZYR0UgaXMgbm90IHNldAorIyBDT05GSUdfTVlSSTEwR0UgaXMgbm90IHNldAorIyBDT05GSUdfTkVUWEVOX05JQyBpcyBub3Qgc2V0CisjIENPTkZJR19OSVUgaXMgbm90IHNldAorIyBDT05GSUdfTUxYNF9FTiBpcyBub3Qgc2V0CisjIENPTkZJR19NTFg0X0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfVEVIVVRJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JOWDJYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FMR0UgaXMgbm90IHNldAorIyBDT05GSUdfU0ZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFMk5FVCBpcyBub3Qgc2V0CitDT05GSUdfVFI9eQorQ09ORklHX0lCTU9MPXkKKyMgQ09ORklHXzNDMzU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1RNUzM4MFRSIGlzIG5vdCBzZXQKK0NPTkZJR19XTEFOPXkKKyMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CisKKyMKKyMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycworIworCisjCisjIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCisjCisjIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfS0FXRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BDTUNJQSBpcyBub3Qgc2V0CisjIENPTkZJR19XQU4gaXMgbm90IHNldAorIyBDT05GSUdfRkRESSBpcyBub3Qgc2V0CisjIENPTkZJR19ISVBQSSBpcyBub3Qgc2V0CitDT05GSUdfUFBQPW0KKyMgQ09ORklHX1BQUF9NVUxUSUxJTksgaXMgbm90IHNldAorIyBDT05GSUdfUFBQX0ZJTFRFUiBpcyBub3Qgc2V0CitDT05GSUdfUFBQX0FTWU5DPW0KK0NPTkZJR19QUFBfU1lOQ19UVFk9bQorQ09ORklHX1BQUF9ERUZMQVRFPW0KK0NPTkZJR19QUFBfQlNEQ09NUD1tCisjIENPTkZJR19QUFBfTVBQRSBpcyBub3Qgc2V0CitDT05GSUdfUFBQT0U9bQorIyBDT05GSUdfUFBQT0wyVFAgaXMgbm90IHNldAorIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CitDT05GSUdfU0xIQz1tCisjIENPTkZJR19ORVRfRkMgaXMgbm90IHNldAorQ09ORklHX05FVENPTlNPTEU9eQorIyBDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRQT0xMPXkKK0NPTkZJR19ORVRQT0xMX1RSQVA9eQorQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVI9eQorIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19JTlBVVD15CisjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAorCisjCisjIFVzZXJsYW5kIGludGVyZmFjZXMKKyMKK0NPTkZJR19JTlBVVF9NT1VTRURFVj15CisjIENPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWCBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAorIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9FVkRFVj1tCisjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgRGV2aWNlIERyaXZlcnMKKyMKK0NPTkZJR19JTlBVVF9LRVlCT0FSRD15CisjIENPTkZJR19LRVlCT0FSRF9BRFA1NTg4IGlzIG5vdCBzZXQKK0NPTkZJR19LRVlCT0FSRF9BVEtCRD15CisjIENPTkZJR19RVDIxNjAgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTUFYNzM1OSBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfT1BFTkNPUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfTU9VU0U9eQorQ09ORklHX01PVVNFX1BTMj15CitDT05GSUdfTU9VU0VfUFMyX0FMUFM9eQorQ09ORklHX01PVVNFX1BTMl9MT0dJUFMyUFA9eQorQ09ORklHX01PVVNFX1BTMl9TWU5BUFRJQ1M9eQorQ09ORklHX01PVVNFX1BTMl9UUkFDS1BPSU5UPXkKKyMgQ09ORklHX01PVVNFX1BTMl9FTEFOVEVDSCBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9QUzJfU0VOVEVMSUMgaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfUFMyX1RPVUNIS0lUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX1NFUklBTCBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9BUFBMRVRPVUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX0JDTTU5NzQgaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfVlNYWFhBQSBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9TWU5BUFRJQ1NfSTJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfTUlTQz15CisjIENPTkZJR19JTlBVVF9BVElfUkVNT1RFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0FUSV9SRU1PVEUyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0tFWVNQQU5fUkVNT1RFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1BPV0VSTUFURSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9ZRUFMSU5LIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0NNMTA5IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1VJTlBVVCBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgSS9PIHBvcnRzCisjCitDT05GSUdfU0VSSU89eQorQ09ORklHX1NFUklPX0k4MDQyPXkKKyMgQ09ORklHX1NFUklPX1NFUlBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSU9fUENJUFMyIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJT19MSUJQUzI9eQorIyBDT05GSUdfU0VSSU9fUkFXIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklPX1hJTElOWF9YUFNfUFMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworQ09ORklHX1ZUPXkKK0NPTkZJR19DT05TT0xFX1RSQU5TTEFUSU9OUz15CitDT05GSUdfVlRfQ09OU09MRT15CitDT05GSUdfSFdfQ09OU09MRT15CitDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HPXkKK0NPTkZJR19ERVZLTUVNPXkKKyMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisjIENPTkZJR19OT1pPTUkgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBkcml2ZXJzCisjCitDT05GSUdfU0VSSUFMXzgyNTA9eQorQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF84MjUwX1BDST15CisjIENPTkZJR19TRVJJQUxfODI1MF9DUyBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9NAorQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NAorIyBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQgaXMgbm90IHNldAorCisjCisjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKKyMKK0NPTkZJR19TRVJJQUxfQ09SRT15CitDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CisjIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF9PRl9QTEFURk9STSBpcyBub3Qgc2V0CitDT05GSUdfVU5JWDk4X1BUWVM9eQorIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0CitDT05GSUdfTEVHQUNZX1BUWVM9eQorQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CisjIENPTkZJR19IVkNfVURCRyBpcyBub3Qgc2V0CisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKKworIworIyBQQ01DSUEgY2hhcmFjdGVyIGRldmljZXMKKyMKKyMgQ09ORklHX1NZTkNMSU5LX0NTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBUkRNQU5fNDAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19DQVJETUFOXzQwNDAgaXMgbm90IHNldAorIyBDT05GSUdfSVBXSVJFTEVTUyBpcyBub3Qgc2V0CitDT05GSUdfUkFXX0RSSVZFUj15CitDT05GSUdfTUFYX1JBV19ERVZTPTI1NgorIyBDT05GSUdfSEFOR0NIRUNLX1RJTUVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAorQ09ORklHX0RFVlBPUlQ9eQorQ09ORklHX0kyQz15CitDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CitDT05GSUdfSTJDX0NIQVJERVY9eQorQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CitDT05GSUdfSTJDX0FMR09CSVQ9eQorCisjCisjIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAorIworCisjCisjIFBDIFNNQnVzIGhvc3QgY29udHJvbGxlciBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfQUxJMTUzNSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxJMTU2MyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxJMTVYMyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQU1ENzU2IGlzIG5vdCBzZXQKK0NPTkZJR19JMkNfQU1EODExMT15CisjIENPTkZJR19JMkNfSTgwMSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfSVNDSCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfUElJWDQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX05GT1JDRTIgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJUzU1OTUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJUzYzMCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lTOTZYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19WSUEgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1ZJQVBSTyBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCisjCisjIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAorCisjCisjIEV4dGVybmFsIEkyQy9TTUJ1cyBhZGFwdGVyIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVElOWV9VU0IgaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIGFkYXB0ZXIgSTJDL0REQyBjaGFubmVsIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19WT09ET08zIGlzIG5vdCBzZXQKKworIworIyBPdGhlciBJMkMvU01CdXMgYnVzIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19QQ0FfUExBVEZPUk0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAorIworIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisKKyMKKyMgUFBTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9XQU5UX09QVElPTkFMX0dQSU9MSUI9eQorIyBDT05GSUdfR1BJT0xJQiBpcyBub3Qgc2V0CisjIENPTkZJR19XMSBpcyBub3Qgc2V0CisjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CisjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CitDT05GSUdfU1NCX1BPU1NJQkxFPXkKKworIworIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKKyMKKyMgQ09ORklHX1NTQiBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfVFdMNDAzMF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAorIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIHN1cHBvcnQKKyMKKyMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CitDT05GSUdfVkdBX0FSQj15CisjIENPTkZJR19EUk0gaXMgbm90IHNldAorIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAorQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPW0KK0NPTkZJR19GQj15CitDT05GSUdfRklSTVdBUkVfRURJRD15CitDT05GSUdfRkJfRERDPXkKKyMgQ09ORklHX0ZCX0JPT1RfVkVTQV9TVVBQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9DRkJfRklMTFJFQ1Q9eQorQ09ORklHX0ZCX0NGQl9DT1BZQVJFQT15CitDT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVD15CisjIENPTkZJR19GQl9DRkJfUkVWX1BJWEVMU19JTl9CWVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19GSUxMUkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfQ09QWUFSRUEgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0lNQUdFQkxJVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9GT1JFSUdOX0VORElBTiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfRk9QUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TVkdBTElCIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9NQUNNT0RFUz15CitDT05GSUdfRkJfQkFDS0xJR0hUPXkKK0NPTkZJR19GQl9NT0RFX0hFTFBFUlM9eQorQ09ORklHX0ZCX1RJTEVCTElUVElORz15CisKKyMKKyMgRnJhbWUgYnVmZmVyIGhhcmR3YXJlIGRyaXZlcnMKKyMKKyMgQ09ORklHX0ZCX0NJUlJVUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9QTTIgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQ1lCRVIyMDAwIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9PRj15CisjIENPTkZJR19GQl9BU0lMSUFOVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9JTVNUVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9WR0ExNiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TMUQxM1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9OVklESUEgaXMgbm90IHNldAorIyBDT05GSUdfRkJfUklWQSBpcyBub3Qgc2V0CitDT05GSUdfRkJfTUFUUk9YPXkKK0NPTkZJR19GQl9NQVRST1hfTUlMTEVOSVVNPXkKK0NPTkZJR19GQl9NQVRST1hfTVlTVElRVUU9eQorQ09ORklHX0ZCX01BVFJPWF9HPXkKK0NPTkZJR19GQl9NQVRST1hfSTJDPW0KK0NPTkZJR19GQl9NQVRST1hfTUFWRU49bQorQ09ORklHX0ZCX1JBREVPTj15CitDT05GSUdfRkJfUkFERU9OX0kyQz15CitDT05GSUdfRkJfUkFERU9OX0JBQ0tMSUdIVD15CisjIENPTkZJR19GQl9SQURFT05fREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQVRZMTI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0FUWSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TMyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TQVZBR0UgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU0lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1ZJQSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9ORU9NQUdJQyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9LWVJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCXzNERlggaXMgbm90IHNldAorIyBDT05GSUdfRkJfVk9PRE9PMSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9WVDg2MjMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVFJJREVOVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9BUksgaXMgbm90IHNldAorIyBDT05GSUdfRkJfUE0zIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0NBUk1JTkUgaXMgbm90IHNldAorQ09ORklHX0ZCX0lCTV9HWFQ0NTAwPXkKKyMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUVUUk9OT01FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01CODYyWFggaXMgbm90IHNldAorIyBDT05GSUdfRkJfQlJPQURTSEVFVCBpcyBub3Qgc2V0CitDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUPXkKK0NPTkZJR19MQ0RfQ0xBU1NfREVWSUNFPXkKKyMgQ09ORklHX0xDRF9JTEk5MzIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xDRF9QTEFURk9STSBpcyBub3Qgc2V0CitDT05GSUdfQkFDS0xJR0hUX0NMQVNTX0RFVklDRT15CitDT05GSUdfQkFDS0xJR0hUX0dFTkVSSUM9eQorCisjCisjIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19ESVNQTEFZX1NVUFBPUlQ9eQorCisjCisjIERpc3BsYXkgaGFyZHdhcmUgZHJpdmVycworIworCisjCisjIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAorIworIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAorQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQorQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEU9eQorIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ERVRFQ1RfUFJJTUFSWSBpcyBub3Qgc2V0CisjIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX1JPVEFUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZPTlRTIGlzIG5vdCBzZXQKK0NPTkZJR19GT05UXzh4OD15CitDT05GSUdfRk9OVF84eDE2PXkKK0NPTkZJR19MT0dPPXkKK0NPTkZJR19MT0dPX0xJTlVYX01PTk89eQorQ09ORklHX0xPR09fTElOVVhfVkdBMTY9eQorQ09ORklHX0xPR09fTElOVVhfQ0xVVDIyND15CitDT05GSUdfU09VTkQ9bQorQ09ORklHX1NPVU5EX09TU19DT1JFPXkKK0NPTkZJR19TT1VORF9PU1NfQ09SRV9QUkVDTEFJTT15CitDT05GSUdfU05EPW0KK0NPTkZJR19TTkRfVElNRVI9bQorQ09ORklHX1NORF9QQ009bQorQ09ORklHX1NORF9TRVFVRU5DRVI9bQorQ09ORklHX1NORF9TRVFfRFVNTVk9bQorQ09ORklHX1NORF9PU1NFTVVMPXkKK0NPTkZJR19TTkRfTUlYRVJfT1NTPW0KK0NPTkZJR19TTkRfUENNX09TUz1tCitDT05GSUdfU05EX1BDTV9PU1NfUExVR0lOUz15CitDT05GSUdfU05EX1NFUVVFTkNFUl9PU1M9eQorIyBDT05GSUdfU05EX0hSVElNRVIgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfU1VQUE9SVF9PTERfQVBJPXkKK0NPTkZJR19TTkRfVkVSQk9TRV9QUk9DRlM9eQorIyBDT05GSUdfU05EX1ZFUkJPU0VfUFJJTlRLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfUkFXTUlESV9TRVEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX09QTDNfTElCX1NFUSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfT1BMNF9MSUJfU0VRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TQkFXRV9TRVEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0VNVTEwSzFfU0VRIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfRFJJVkVSUz15CisjIENPTkZJR19TTkRfRFVNTVkgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1ZJUk1JREkgaXMgbm90IHNldAorIyBDT05GSUdfU05EX01UUEFWIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TRVJJQUxfVTE2NTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9NUFU0MDEgaXMgbm90IHNldAorQ09ORklHX1NORF9QQ0k9eQorIyBDT05GSUdfU05EX0FEMTg4OSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQUxTMzAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9BTFM0MDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9BTEk1NDUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9BVElJWFAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0FUSUlYUF9NT0RFTSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQVU4ODEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9BVTg4MjAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0FVODgzMCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQVcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9BWlQzMzI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9CVDg3WCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQ0EwMTA2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9DTUlQQ0kgaXMgbm90IHNldAorIyBDT05GSUdfU05EX09YWUdFTiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQ1M0MjgxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9DUzQ2WFggaXMgbm90IHNldAorIyBDT05GSUdfU05EX0NTNTUzMCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQ1RYRkkgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0RBUkxBMjAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0dJTkEyMCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTEFZTEEyMCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfREFSTEEyNCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfR0lOQTI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9MQVlMQTI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9NT05BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9NSUEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0VDSE8zRyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSU5ESUdPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9JTkRJR09JTyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSU5ESUdPREogaXMgbm90IHNldAorIyBDT05GSUdfU05EX0lORElHT0lPWCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSU5ESUdPREpYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9FTVUxMEsxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9FTVUxMEsxWCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRU5TMTM3MCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRU5TMTM3MSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRVMxOTM4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9FUzE5NjggaXMgbm90IHNldAorIyBDT05GSUdfU05EX0ZNODAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9IREFfSU5URUwgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0hEU1AgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0hEU1BNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9ISUZJRVIgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0lDRTE3MTIgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0lDRTE3MjQgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0lOVEVMOFgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9JTlRFTDhYME0gaXMgbm90IHNldAorIyBDT05GSUdfU05EX0tPUkcxMjEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9MWDY0NjRFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTUFFU1RSTzMgaXMgbm90IHNldAorIyBDT05GSUdfU05EX01JWEFSVCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTk0yNTYgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1BDWEhSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9SSVBUSURFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9STUUzMiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfUk1FOTYgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1JNRTk2NTIgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NPTklDVklCRVMgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1RSSURFTlQgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1ZJQTgyWFggaXMgbm90IHNldAorIyBDT05GSUdfU05EX1ZJQTgyWFhfTU9ERU0gaXMgbm90IHNldAorIyBDT05GSUdfU05EX1ZJUlRVT1NPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9WWDIyMiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfWU1GUENJIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfUFBDPXkKK0NPTkZJR19TTkRfVVNCPXkKKyMgQ09ORklHX1NORF9VU0JfQVVESU8gaXMgbm90IHNldAorIyBDT05GSUdfU05EX1VTQl9VU1gyWSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfVVNCX0NBSUFRIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfUENNQ0lBPXkKKyMgQ09ORklHX1NORF9WWFBPQ0tFVCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfUERBVURJT0NGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TT0MgaXMgbm90IHNldAorIyBDT05GSUdfU09VTkRfUFJJTUUgaXMgbm90IHNldAorQ09ORklHX0hJRF9TVVBQT1JUPXkKK0NPTkZJR19ISUQ9eQorIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKKworIworIyBVU0IgSW5wdXQgRGV2aWNlcworIworQ09ORklHX1VTQl9ISUQ9eQorIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0hJRERFVj15CisKKyMKKyMgU3BlY2lhbCBISUQgZHJpdmVycworIworQ09ORklHX0hJRF9BNFRFQ0g9eQorQ09ORklHX0hJRF9BUFBMRT15CitDT05GSUdfSElEX0JFTEtJTj15CitDT05GSUdfSElEX0NIRVJSWT15CitDT05GSUdfSElEX0NISUNPTlk9eQorQ09ORklHX0hJRF9DWVBSRVNTPXkKK0NPTkZJR19ISURfRFJBR09OUklTRT15CisjIENPTkZJR19EUkFHT05SSVNFX0ZGIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfRVpLRVk9eQorQ09ORklHX0hJRF9LWUU9eQorQ09ORklHX0hJRF9HWVJBVElPTj15CitDT05GSUdfSElEX1RXSU5IQU49eQorQ09ORklHX0hJRF9LRU5TSU5HVE9OPXkKK0NPTkZJR19ISURfTE9HSVRFQ0g9eQorIyBDT05GSUdfTE9HSVRFQ0hfRkYgaXMgbm90IHNldAorIyBDT05GSUdfTE9HSVJVTUJMRVBBRDJfRkYgaXMgbm90IHNldAorQ09ORklHX0hJRF9NSUNST1NPRlQ9eQorQ09ORklHX0hJRF9NT05URVJFWT15CitDT05GSUdfSElEX05UUklHPXkKK0NPTkZJR19ISURfUEFOVEhFUkxPUkQ9eQorIyBDT05GSUdfUEFOVEhFUkxPUkRfRkYgaXMgbm90IHNldAorQ09ORklHX0hJRF9QRVRBTFlOWD15CitDT05GSUdfSElEX1NBTVNVTkc9eQorQ09ORklHX0hJRF9TT05ZPXkKK0NPTkZJR19ISURfU1VOUExVUz15CitDT05GSUdfSElEX0dSRUVOQVNJQT15CisjIENPTkZJR19HUkVFTkFTSUFfRkYgaXMgbm90IHNldAorQ09ORklHX0hJRF9TTUFSVEpPWVBMVVM9eQorIyBDT05GSUdfU01BUlRKT1lQTFVTX0ZGIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfVE9QU0VFRD15CitDT05GSUdfSElEX1RIUlVTVE1BU1RFUj15CisjIENPTkZJR19USFJVU1RNQVNURVJfRkYgaXMgbm90IHNldAorQ09ORklHX0hJRF9aRVJPUExVUz15CisjIENPTkZJR19aRVJPUExVU19GRiBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1NVUFBPUlQ9eQorQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQorQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15CitDT05GSUdfVVNCPXkKKyMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQU5OT1VOQ0VfTkVXX0RFVklDRVMgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKKyMKK0NPTkZJR19VU0JfREVWSUNFRlM9eQorQ09ORklHX1VTQl9ERVZJQ0VfQ0xBU1M9eQorIyBDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV1VTQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV1VTQl9DQkFGIGlzIG5vdCBzZXQKKworIworIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9DNjdYMDBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9YSENJX0hDRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0VIQ0lfSENEPXkKKyMgQ09ORklHX1VTQl9FSENJX1JPT1RfSFVCX1RUIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfRUhDSV9UVF9ORVdTQ0hFRD15CisjIENPTkZJR19VU0JfRUhDSV9IQ0RfUFBDX09GIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAorQ09ORklHX1VTQl9PSENJX0hDRD15CisjIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfTEUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX0RFU0MgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfT0hDSV9MSVRUTEVfRU5ESUFOPXkKKyMgQ09ORklHX1VTQl9VSENJX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dIQ0lfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9IV0FfSENEIGlzIG5vdCBzZXQKKworIworIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BSSU5URVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dETSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVE1DIGlzIG5vdCBzZXQKKworIworIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5CisjCisKKyMKKyMgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm8KKyMKK0NPTkZJR19VU0JfU1RPUkFHRT1tCisjIENPTkZJR19VU0JfU1RPUkFHRV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfSVNEMjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX09ORVRPVUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0tBUk1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0NZUFJFU1NfQVRBQ0IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKKworIworIyBVU0IgSW1hZ2luZyBkZXZpY2VzCisjCisjIENPTkZJR19VU0JfTURDODAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NSUNST1RFSyBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIHBvcnQgZHJpdmVycworIworIyBDT05GSUdfVVNCX1NFUklBTCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycworIworIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQURVVFVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVZTRUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0JFUlJZX0NIQVJHRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfQVBQTEVESVNQTEFZPW0KKyMgQ09ORklHX1VTQl9TSVNVU0JWR0EgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVlNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAorCisjCisjIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQorIworIyBDT05GSUdfTk9QX1VTQl9YQ0VJViBpcyBub3Qgc2V0CisjIENPTkZJR19VV0IgaXMgbm90IHNldAorIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAorQ09ORklHX0lORklOSUJBTkQ9bQorIyBDT05GSUdfSU5GSU5JQkFORF9VU0VSX01BRCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkZJTklCQU5EX1VTRVJfQUNDRVNTIGlzIG5vdCBzZXQKK0NPTkZJR19JTkZJTklCQU5EX0FERFJfVFJBTlM9eQorQ09ORklHX0lORklOSUJBTkRfTVRIQ0E9bQorQ09ORklHX0lORklOSUJBTkRfTVRIQ0FfREVCVUc9eQorIyBDT05GSUdfSU5GSU5JQkFORF9JUEFUSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkZJTklCQU5EX0FNU08xMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01MWDRfSU5GSU5JQkFORCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkZJTklCQU5EX05FUyBpcyBub3Qgc2V0CitDT05GSUdfSU5GSU5JQkFORF9JUE9JQj1tCisjIENPTkZJR19JTkZJTklCQU5EX0lQT0lCX0NNIGlzIG5vdCBzZXQKK0NPTkZJR19JTkZJTklCQU5EX0lQT0lCX0RFQlVHPXkKKyMgQ09ORklHX0lORklOSUJBTkRfSVBPSUJfREVCVUdfREFUQSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkZJTklCQU5EX1NSUCBpcyBub3Qgc2V0CitDT05GSUdfSU5GSU5JQkFORF9JU0VSPW0KK0NPTkZJR19FREFDPXkKKworIworIyBSZXBvcnRpbmcgc3Vic3lzdGVtcworIworIyBDT05GSUdfRURBQ19ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfRURBQ19NTV9FREFDPXkKKyMgQ09ORklHX0VEQUNfQ1BDOTI1IGlzIG5vdCBzZXQKK0NPTkZJR19SVENfTElCPXkKK0NPTkZJR19SVENfQ0xBU1M9eQorQ09ORklHX1JUQ19IQ1RPU1lTPXkKK0NPTkZJR19SVENfSENUT1NZU19ERVZJQ0U9InJ0YzAiCisjIENPTkZJR19SVENfREVCVUcgaXMgbm90IHNldAorCisjCisjIFJUQyBpbnRlcmZhY2VzCisjCitDT05GSUdfUlRDX0lOVEZfU1lTRlM9eQorQ09ORklHX1JUQ19JTlRGX1BST0M9eQorQ09ORklHX1JUQ19JTlRGX0RFVj15CisjIENPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUwgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9URVNUIGlzIG5vdCBzZXQKKworIworIyBJMkMgUlRDIGRyaXZlcnMKKyMKK0NPTkZJR19SVENfRFJWX0RTMTMwNz15CisjIENPTkZJR19SVENfRFJWX0RTMTM3NCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTY3MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX01BWDY5MDAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SUzVDMzcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfSVNMMTIwOCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1gxMjA1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGODU2MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjg1ODMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDFUODAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlg4NTgxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlg4MDI1IGlzIG5vdCBzZXQKKworIworIyBTUEkgUlRDIGRyaXZlcnMKKyMKKworIworIyBQbGF0Zm9ybSBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9DTU9TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMjg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUMzUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9CUTQ4MDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0CisKKyMKKyMgb24tQ1BVIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX0dFTkVSSUMgaXMgbm90IHNldAorIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CisKKyMKKyMgVEkgVkxZTlEKKyMKKyMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAorCisjCisjIEZpbGUgc3lzdGVtcworIworQ09ORklHX0VYVDJfRlM9eQorQ09ORklHX0VYVDJfRlNfWEFUVFI9eQorQ09ORklHX0VYVDJfRlNfUE9TSVhfQUNMPXkKK0NPTkZJR19FWFQyX0ZTX1NFQ1VSSVRZPXkKK0NPTkZJR19FWFQyX0ZTX1hJUD15CitDT05GSUdfRVhUM19GUz15CisjIENPTkZJR19FWFQzX0RFRkFVTFRTX1RPX09SREVSRUQgaXMgbm90IHNldAorQ09ORklHX0VYVDNfRlNfWEFUVFI9eQorQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMPXkKK0NPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZPXkKK0NPTkZJR19FWFQ0X0ZTPXkKK0NPTkZJR19FWFQ0X0ZTX1hBVFRSPXkKK0NPTkZJR19FWFQ0X0ZTX1BPU0lYX0FDTD15CitDT05GSUdfRVhUNF9GU19TRUNVUklUWT15CisjIENPTkZJR19FWFQ0X0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19GU19YSVA9eQorQ09ORklHX0pCRD15CisjIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0pCRDI9eQorIyBDT05GSUdfSkJEMl9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfRlNfTUJDQUNIRT15CitDT05GSUdfUkVJU0VSRlNfRlM9eQorIyBDT05GSUdfUkVJU0VSRlNfQ0hFQ0sgaXMgbm90IHNldAorIyBDT05GSUdfUkVJU0VSRlNfUFJPQ19JTkZPIGlzIG5vdCBzZXQKK0NPTkZJR19SRUlTRVJGU19GU19YQVRUUj15CitDT05GSUdfUkVJU0VSRlNfRlNfUE9TSVhfQUNMPXkKK0NPTkZJR19SRUlTRVJGU19GU19TRUNVUklUWT15CitDT05GSUdfSkZTX0ZTPXkKK0NPTkZJR19KRlNfUE9TSVhfQUNMPXkKK0NPTkZJR19KRlNfU0VDVVJJVFk9eQorIyBDT05GSUdfSkZTX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19TVEFUSVNUSUNTIGlzIG5vdCBzZXQKK0NPTkZJR19GU19QT1NJWF9BQ0w9eQorQ09ORklHX1hGU19GUz1tCisjIENPTkZJR19YRlNfUVVPVEEgaXMgbm90IHNldAorQ09ORklHX1hGU19QT1NJWF9BQ0w9eQorIyBDT05GSUdfWEZTX1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGU19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CitDT05GSUdfRklMRV9MT0NLSU5HPXkKK0NPTkZJR19GU05PVElGWT15CitDT05GSUdfRE5PVElGWT15CitDT05GSUdfSU5PVElGWT15CitDT05GSUdfSU5PVElGWV9VU0VSPXkKKyMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CitDT05GSUdfQVVUT0ZTNF9GUz1tCisjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKKworIworIyBDYWNoZXMKKyMKKyMgQ09ORklHX0ZTQ0FDSEUgaXMgbm90IHNldAorCisjCisjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKKyMKK0NPTkZJR19JU085NjYwX0ZTPXkKKyMgQ09ORklHX0pPTElFVCBpcyBub3Qgc2V0CisjIENPTkZJR19aSVNPRlMgaXMgbm90IHNldAorQ09ORklHX1VERl9GUz1tCitDT05GSUdfVURGX05MUz15CisKKyMKKyMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcworIworQ09ORklHX0ZBVF9GUz15CitDT05GSUdfTVNET1NfRlM9eQorQ09ORklHX1ZGQVRfRlM9eQorQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTQzNworQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNvODg1OS0xIgorIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUHNldWRvIGZpbGVzeXN0ZW1zCisjCitDT05GSUdfUFJPQ19GUz15CitDT05GSUdfUFJPQ19LQ09SRT15CitDT05GSUdfUFJPQ19TWVNDVEw9eQorQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKK0NPTkZJR19TWVNGUz15CitDT05GSUdfVE1QRlM9eQorIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJGUyBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAorIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAorQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQorIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19IRlNfRlM9bQorQ09ORklHX0hGU1BMVVNfRlM9bQorIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19DUkFNRlM9eQorIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAorIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKK0NPTkZJR19ORlNfRlM9eQorQ09ORklHX05GU19WMz15CitDT05GSUdfTkZTX1YzX0FDTD15CitDT05GSUdfTkZTX1Y0PXkKKyMgQ09ORklHX05GU19WNF8xIGlzIG5vdCBzZXQKK0NPTkZJR19ST09UX05GUz15CitDT05GSUdfTkZTRD1tCitDT05GSUdfTkZTRF9WMl9BQ0w9eQorQ09ORklHX05GU0RfVjM9eQorQ09ORklHX05GU0RfVjNfQUNMPXkKK0NPTkZJR19ORlNEX1Y0PXkKK0NPTkZJR19MT0NLRD15CitDT05GSUdfTE9DS0RfVjQ9eQorQ09ORklHX0VYUE9SVEZTPW0KK0NPTkZJR19ORlNfQUNMX1NVUFBPUlQ9eQorQ09ORklHX05GU19DT01NT049eQorQ09ORklHX1NVTlJQQz15CitDT05GSUdfU1VOUlBDX0dTUz15CitDT05GSUdfU1VOUlBDX1hQUlRfUkRNQT1tCitDT05GSUdfUlBDU0VDX0dTU19LUkI1PXkKK0NPTkZJR19SUENTRUNfR1NTX1NQS00zPW0KKyMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CitDT05GSUdfQ0lGUz1tCisjIENPTkZJR19DSUZTX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlNfV0VBS19QV19IQVNIIGlzIG5vdCBzZXQKK0NPTkZJR19DSUZTX1hBVFRSPXkKK0NPTkZJR19DSUZTX1BPU0lYPXkKKyMgQ09ORklHX0NJRlNfREVCVUcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlNfRVhQRVJJTUVOVEFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUGFydGl0aW9uIFR5cGVzCisjCitDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKKyMgQ09ORklHX0FDT1JOX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19PU0ZfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FNSUdBX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFSSV9QQVJUSVRJT04gaXMgbm90IHNldAorQ09ORklHX01BQ19QQVJUSVRJT049eQorQ09ORklHX01TRE9TX1BBUlRJVElPTj15CisjIENPTkZJR19CU0RfRElTS0xBQkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX1NVQlBBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TT0xBUklTX1g4Nl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfVU5JWFdBUkVfRElTS0xBQkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xETV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU0dJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfS0FSTUFfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU1lTVjY4X1BBUlRJVElPTiBpcyBub3Qgc2V0CitDT05GSUdfTkxTPXkKK0NPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgorQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eQorQ09ORklHX05MU19DT0RFUEFHRV83Mzc9bQorQ09ORklHX05MU19DT0RFUEFHRV83NzU9bQorQ09ORklHX05MU19DT0RFUEFHRV84NTA9bQorQ09ORklHX05MU19DT0RFUEFHRV84NTI9bQorQ09ORklHX05MU19DT0RFUEFHRV84NTU9bQorQ09ORklHX05MU19DT0RFUEFHRV84NTc9bQorQ09ORklHX05MU19DT0RFUEFHRV84NjA9bQorQ09ORklHX05MU19DT0RFUEFHRV84NjE9bQorQ09ORklHX05MU19DT0RFUEFHRV84NjI9bQorQ09ORklHX05MU19DT0RFUEFHRV84NjM9bQorQ09ORklHX05MU19DT0RFUEFHRV84NjQ9bQorQ09ORklHX05MU19DT0RFUEFHRV84NjU9bQorQ09ORklHX05MU19DT0RFUEFHRV84NjY9bQorQ09ORklHX05MU19DT0RFUEFHRV84Njk9bQorQ09ORklHX05MU19DT0RFUEFHRV85MzY9bQorQ09ORklHX05MU19DT0RFUEFHRV85NTA9bQorQ09ORklHX05MU19DT0RFUEFHRV85MzI9bQorQ09ORklHX05MU19DT0RFUEFHRV85NDk9bQorQ09ORklHX05MU19DT0RFUEFHRV84NzQ9bQorQ09ORklHX05MU19JU084ODU5Xzg9bQorQ09ORklHX05MU19DT0RFUEFHRV8xMjUwPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfMTI1MT1tCitDT05GSUdfTkxTX0FTQ0lJPW0KK0NPTkZJR19OTFNfSVNPODg1OV8xPXkKK0NPTkZJR19OTFNfSVNPODg1OV8yPW0KK0NPTkZJR19OTFNfSVNPODg1OV8zPW0KK0NPTkZJR19OTFNfSVNPODg1OV80PW0KK0NPTkZJR19OTFNfSVNPODg1OV81PW0KK0NPTkZJR19OTFNfSVNPODg1OV82PW0KK0NPTkZJR19OTFNfSVNPODg1OV83PW0KK0NPTkZJR19OTFNfSVNPODg1OV85PW0KK0NPTkZJR19OTFNfSVNPODg1OV8xMz1tCitDT05GSUdfTkxTX0lTTzg4NTlfMTQ9bQorQ09ORklHX05MU19JU084ODU5XzE1PW0KK0NPTkZJR19OTFNfS09JOF9SPW0KK0NPTkZJR19OTFNfS09JOF9VPW0KK0NPTkZJR19OTFNfVVRGOD1tCisjIENPTkZJR19ETE0gaXMgbm90IHNldAorQ09ORklHX0JJTkFSWV9QUklOVEY9eQorCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKK0NPTkZJR19CSVRSRVZFUlNFPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQorQ09ORklHX0NSQ19DQ0lUVD1tCitDT05GSUdfQ1JDMTY9eQorQ09ORklHX0NSQ19UMTBESUY9eQorQ09ORklHX0NSQ19JVFVfVD1tCitDT05GSUdfQ1JDMzI9eQorIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CitDT05GSUdfTElCQ1JDMzJDPW0KK0NPTkZJR19aTElCX0lORkxBVEU9eQorQ09ORklHX1pMSUJfREVGTEFURT1tCitDT05GSUdfTFpPX0NPTVBSRVNTPW0KK0NPTkZJR19MWk9fREVDT01QUkVTUz1tCitDT05GSUdfREVDT01QUkVTU19HWklQPXkKK0NPTkZJR19ERUNPTVBSRVNTX0JaSVAyPXkKK0NPTkZJR19ERUNPTVBSRVNTX0xaTUE9eQorQ09ORklHX1RFWFRTRUFSQ0g9eQorQ09ORklHX1RFWFRTRUFSQ0hfS01QPW0KK0NPTkZJR19URVhUU0VBUkNIX0JNPW0KK0NPTkZJR19URVhUU0VBUkNIX0ZTTT1tCitDT05GSUdfSEFTX0lPTUVNPXkKK0NPTkZJR19IQVNfSU9QT1JUPXkKK0NPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19IQVZFX0xNQj15CitDT05GSUdfTkxBVFRSPXkKKworIworIyBLZXJuZWwgaGFja2luZworIworIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQorQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKK0NPTkZJR19GUkFNRV9XQVJOPTIwNDgKK0NPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CisjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfRlM9eQorIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfS0VSTkVMPXkKKyMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKK0NPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15CisjIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQyBpcyBub3Qgc2V0CitDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUNfVkFMVUU9MAorQ09ORklHX0RFVEVDVF9IVU5HX1RBU0s9eQorIyBDT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQyBpcyBub3Qgc2V0CitDT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQ19WQUxVRT0wCitDT05GSUdfU0NIRURfREVCVUc9eQorQ09ORklHX1NDSEVEU1RBVFM9eQorIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS01FTUxFQUsgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX01VVEVYRVM9eQorIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0CitDT05GSUdfVFJBQ0VfSVJRRkxBR1M9eQorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKK0NPTkZJR19TVEFDS1RSQUNFPXkKKyMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQorIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19NRU1PUllfSU5JVD15CisjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAorIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19MQVRFTkNZVE9QPXkKK0NPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CisjIENPTkZJR19ERUJVR19QQUdFQUxMT0MgaXMgbm90IHNldAorQ09ORklHX05PUF9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15CitDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CitDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CitDT05GSUdfVFJBQ0VSX01BWF9UUkFDRT15CitDT05GSUdfUklOR19CVUZGRVI9eQorQ09ORklHX0VWRU5UX1RSQUNJTkc9eQorQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUj15CitDT05GSUdfUklOR19CVUZGRVJfQUxMT1dfU1dBUD15CitDT05GSUdfVFJBQ0lORz15CitDT05GSUdfR0VORVJJQ19UUkFDRVI9eQorQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CitDT05GSUdfRlRSQUNFPXkKKyMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0CitDT05GSUdfSVJRU09GRl9UUkFDRVI9eQorQ09ORklHX1NDSEVEX1RSQUNFUj15CisjIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0CitDT05GSUdfQlJBTkNIX1BST0ZJTEVfTk9ORT15CisjIENPTkZJR19QUk9GSUxFX0FOTk9UQVRFRF9CUkFOQ0hFUyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxFX0FMTF9CUkFOQ0hFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSU9fVFJBQ0U9eQorIyBDT05GSUdfRlRSQUNFX1NUQVJUVVBfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19SSU5HX0JVRkZFUl9CRU5DSE1BUksgaXMgbm90IHNldAorIyBDT05GSUdfRFlOQU1JQ19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKKyMgQ09ORklHX0tHREIgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfV0VSUk9SPXkKK0NPTkZJR19QUklOVF9TVEFDS19ERVBUSD02NAorQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1c9eQorQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFPXkKKyMgQ09ORklHX1BQQ19FTVVMQVRFRF9TVEFUUyBpcyBub3Qgc2V0CitDT05GSUdfQ09ERV9QQVRDSElOR19TRUxGVEVTVD15CitDT05GSUdfRlRSX0ZJWFVQX1NFTEZURVNUPXkKK0NPTkZJR19NU0lfQklUTUFQX1NFTEZURVNUPXkKK0NPTkZJR19YTU9OPXkKKyMgQ09ORklHX1hNT05fREVGQVVMVCBpcyBub3Qgc2V0CitDT05GSUdfWE1PTl9ESVNBU1NFTUJMWT15CitDT05GSUdfREVCVUdHRVI9eQorQ09ORklHX0lSUVNUQUNLUz15CisjIENPTkZJR19WSVJRX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19FQVJMWV9ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKK0NPTkZJR19YT1JfQkxPQ0tTPXkKK0NPTkZJR19BU1lOQ19DT1JFPXkKK0NPTkZJR19BU1lOQ19NRU1DUFk9eQorQ09ORklHX0FTWU5DX1hPUj15CitDT05GSUdfQVNZTkNfUFE9eQorQ09ORklHX0FTWU5DX1JBSUQ2X1JFQ09WPXkKK0NPTkZJR19DUllQVE89eQorCisjCisjIENyeXB0byBjb3JlIG9yIGhlbHBlcgorIworQ09ORklHX0NSWVBUT19BTEdBUEk9eQorQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKK0NPTkZJR19DUllQVE9fQUVBRD1tCitDT05GSUdfQ1JZUFRPX0FFQUQyPXkKK0NPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKK0NPTkZJR19DUllQVE9fQkxLQ0lQSEVSMj15CitDT05GSUdfQ1JZUFRPX0hBU0g9eQorQ09ORklHX0NSWVBUT19IQVNIMj15CitDT05GSUdfQ1JZUFRPX1JORz1tCitDT05GSUdfQ1JZUFRPX1JORzI9eQorQ09ORklHX0NSWVBUT19QQ09NUD15CitDT05GSUdfQ1JZUFRPX01BTkFHRVI9eQorQ09ORklHX0NSWVBUT19NQU5BR0VSMj15CitDT05GSUdfQ1JZUFRPX0dGMTI4TVVMPW0KK0NPTkZJR19DUllQVE9fTlVMTD1tCitDT05GSUdfQ1JZUFRPX1dPUktRVUVVRT15CisjIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fQVVUSEVOQz1tCitDT05GSUdfQ1JZUFRPX1RFU1Q9bQorCisjCisjIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQorIworQ09ORklHX0NSWVBUT19DQ009bQorQ09ORklHX0NSWVBUT19HQ009bQorQ09ORklHX0NSWVBUT19TRVFJVj1tCisKKyMKKyMgQmxvY2sgbW9kZXMKKyMKK0NPTkZJR19DUllQVE9fQ0JDPXkKK0NPTkZJR19DUllQVE9fQ1RSPW0KKyMgQ09ORklHX0NSWVBUT19DVFMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19FQ0I9bQorIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX1BDQkM9bQorIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0CisKKyMKKyMgSGFzaCBtb2RlcworIworQ09ORklHX0NSWVBUT19ITUFDPXkKKyMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKKworIworIyBEaWdlc3QKKyMKK0NPTkZJR19DUllQVE9fQ1JDMzJDPW0KK0NPTkZJR19DUllQVE9fR0hBU0g9bQorQ09ORklHX0NSWVBUT19NRDQ9bQorQ09ORklHX0NSWVBUT19NRDU9eQorQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQz1tCisjIENPTkZJR19DUllQVE9fUk1EMTI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQxNjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMzIwIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fU0hBMT1tCitDT05GSUdfQ1JZUFRPX1NIQTI1Nj1tCitDT05GSUdfQ1JZUFRPX1NIQTUxMj1tCitDT05GSUdfQ1JZUFRPX1RHUjE5Mj1tCitDT05GSUdfQ1JZUFRPX1dQNTEyPW0KKworIworIyBDaXBoZXJzCisjCitDT05GSUdfQ1JZUFRPX0FFUz1tCitDT05GSUdfQ1JZUFRPX0FOVUJJUz1tCitDT05GSUdfQ1JZUFRPX0FSQzQ9bQorQ09ORklHX0NSWVBUT19CTE9XRklTSD1tCisjIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19DQVNUNT1tCitDT05GSUdfQ1JZUFRPX0NBU1Q2PW0KK0NPTkZJR19DUllQVE9fREVTPXkKKyMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19LSEFaQUQ9bQorQ09ORklHX0NSWVBUT19TQUxTQTIwPW0KKyMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fU0VSUEVOVD1tCitDT05GSUdfQ1JZUFRPX1RFQT1tCitDT05GSUdfQ1JZUFRPX1RXT0ZJU0g9bQorQ09ORklHX0NSWVBUT19UV09GSVNIX0NPTU1PTj1tCisKKyMKKyMgQ29tcHJlc3Npb24KKyMKK0NPTkZJR19DUllQVE9fREVGTEFURT1tCisjIENPTkZJR19DUllQVE9fWkxJQiBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0xaTz1tCisKKyMKKyMgUmFuZG9tIE51bWJlciBHZW5lcmF0aW9uCisjCisjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fSFcgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0NMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJUlRVQUxJWkFUSU9OIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9kZXZpY2UuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9kZXZpY2UuaAppbmRleCA5ZGFkZTE1Li42ZDk0ZDI3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZGV2aWNlLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2RldmljZS5oCkBAIC0xNSw3ICsxNSwxNiBAQAogCiAJLyogRE1BIG9wZXJhdGlvbnMgb24gdGhhdCBkZXZpY2UgKi8KIAlzdHJ1Y3QgZG1hX21hcF9vcHMJKmRtYV9vcHM7Ci0Jdm9pZAkJCSpkbWFfZGF0YTsKKworCS8qCisJICogV2hlbiBhbiBpb21tdSBpcyBpbiB1c2UsIGRtYV9kYXRhIGlzIHVzZWQgYXMgYSBwdHIgdG8gdGhlIGJhc2Ugb2YgdGhlCisJICogaW9tbXVfdGFibGUuICBPdGhlcndpc2UsIGl0IGlzIGEgc2ltcGxlIG51bWVyaWNhbCBvZmZzZXQuCisJICovCisJdW5pb24geworCQlkbWFfYWRkcl90CWRtYV9vZmZzZXQ7CisJCXZvaWQJCSppb21tdV90YWJsZV9iYXNlOworCX0gZG1hX2RhdGE7CisKICNpZmRlZiBDT05GSUdfU1dJT1RMQgogCWRtYV9hZGRyX3QJCW1heF9kaXJlY3RfZG1hX2FkZHI7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmgKaW5kZXggY2IyY2E0MS4uZTI4MWRhZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmgKQEAgLTI2LDcgKzI2LDYgQEAKIGV4dGVybiB2b2lkIGRtYV9kaXJlY3RfZnJlZV9jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLAogCQkJCSAgICAgdm9pZCAqdmFkZHIsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSk7CiAKLWV4dGVybiB1bnNpZ25lZCBsb25nIGdldF9kbWFfZGlyZWN0X29mZnNldChzdHJ1Y3QgZGV2aWNlICpkZXYpOwogCiAjaWZkZWYgQ09ORklHX05PVF9DT0hFUkVOVF9DQUNIRQogLyoKQEAgLTkwLDYgKzg5LDI4IEBACiAJZGV2LT5hcmNoZGF0YS5kbWFfb3BzID0gb3BzOwogfQogCisvKgorICogZ2V0X2RtYV9vZmZzZXQoKQorICoKKyAqIEdldCB0aGUgZG1hIG9mZnNldCBvbiBjb25maWd1cmF0aW9ucyB3aGVyZSB0aGUgZG1hIGFkZHJlc3MgY2FuIGJlIGRldGVybWluZWQKKyAqIGZyb20gdGhlIHBoeXNpY2FsIGFkZHJlc3MgYnkgbG9va2luZyBhdCBhIHNpbXBsZSBvZmZzZXQuICBEaXJlY3QgZG1hIGFuZAorICogc3dpb3RsYiB1c2UgdGhpcyBmdW5jdGlvbiwgYnV0IGl0IGlzIHR5cGljYWxseSBub3QgdXNlZCBieSBpbXBsZW1lbnRhdGlvbnMKKyAqIHdpdGggYW4gaW9tbXUuCisgKi8KK3N0YXRpYyBpbmxpbmUgZG1hX2FkZHJfdCBnZXRfZG1hX29mZnNldChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJaWYgKGRldikKKwkJcmV0dXJuIGRldi0+YXJjaGRhdGEuZG1hX2RhdGEuZG1hX29mZnNldDsKKworCXJldHVybiBQQ0lfRFJBTV9PRkZTRVQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfZG1hX29mZnNldChzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3Qgb2ZmKQoreworCWlmIChkZXYpCisJCWRldi0+YXJjaGRhdGEuZG1hX2RhdGEuZG1hX29mZnNldCA9IG9mZjsKK30KKwogLyogdGhpcyB3aWxsIGJlIHJlbW92ZWQgc29vbiAqLwogI2RlZmluZSBmbHVzaF93cml0ZV9idWZmZXJzKCkKIApAQCAtMTgxLDEyICsyMDIsMTIgQEAKIAogc3RhdGljIGlubGluZSBkbWFfYWRkcl90IHBoeXNfdG9fZG1hKHN0cnVjdCBkZXZpY2UgKmRldiwgcGh5c19hZGRyX3QgcGFkZHIpCiB7Ci0JcmV0dXJuIHBhZGRyICsgZ2V0X2RtYV9kaXJlY3Rfb2Zmc2V0KGRldik7CisJcmV0dXJuIHBhZGRyICsgZ2V0X2RtYV9vZmZzZXQoZGV2KTsKIH0KIAogc3RhdGljIGlubGluZSBwaHlzX2FkZHJfdCBkbWFfdG9fcGh5cyhzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgZGFkZHIpCiB7Ci0JcmV0dXJuIGRhZGRyIC0gZ2V0X2RtYV9kaXJlY3Rfb2Zmc2V0KGRldik7CisJcmV0dXJuIGRhZGRyIC0gZ2V0X2RtYV9vZmZzZXQoZGV2KTsKIH0KIAogI2RlZmluZSBkbWFfYWxsb2Nfbm9uY29oZXJlbnQoZCwgcywgaCwgZikgZG1hX2FsbG9jX2NvaGVyZW50KGQsIHMsIGgsIGYpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZmlybXdhcmUuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9maXJtd2FyZS5oCmluZGV4IDNhMTc5ODIuLjIwNzc4YTQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9maXJtd2FyZS5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9maXJtd2FyZS5oCkBAIC0zNyw3ICszNyw3IEBACiAjZGVmaW5lIEZXX0ZFQVRVUkVfVklPCQlBU01fQ09OU1QoMHgwMDAwMDAwMDAwMDA0MDAwKQogI2RlZmluZSBGV19GRUFUVVJFX1JETUEJCUFTTV9DT05TVCgweDAwMDAwMDAwMDAwMDgwMDApCiAjZGVmaW5lIEZXX0ZFQVRVUkVfTExBTgkJQVNNX0NPTlNUKDB4MDAwMDAwMDAwMDAxMDAwMCkKLSNkZWZpbmUgRldfRkVBVFVSRV9CVUxLCQlBU01fQ09OU1QoMHgwMDAwMDAwMDAwMDIwMDAwKQorI2RlZmluZSBGV19GRUFUVVJFX0JVTEtfUkVNT1ZFCUFTTV9DT05TVCgweDAwMDAwMDAwMDAwMjAwMDApCiAjZGVmaW5lIEZXX0ZFQVRVUkVfWERBQlIJQVNNX0NPTlNUKDB4MDAwMDAwMDAwMDA0MDAwMCkKICNkZWZpbmUgRldfRkVBVFVSRV9NVUxUSVRDRQlBU01fQ09OU1QoMHgwMDAwMDAwMDAwMDgwMDAwKQogI2RlZmluZSBGV19GRUFUVVJFX1NQTFBBUglBU01fQ09OU1QoMHgwMDAwMDAwMDAwMTAwMDAwKQpAQCAtNDUsOCArNDUsNyBAQAogI2RlZmluZSBGV19GRUFUVVJFX0xQQVIJCUFTTV9DT05TVCgweDAwMDAwMDAwMDA0MDAwMDApCiAjZGVmaW5lIEZXX0ZFQVRVUkVfUFMzX0xWMQlBU01fQ09OU1QoMHgwMDAwMDAwMDAwODAwMDAwKQogI2RlZmluZSBGV19GRUFUVVJFX0JFQVQJCUFTTV9DT05TVCgweDAwMDAwMDAwMDEwMDAwMDApCi0jZGVmaW5lIEZXX0ZFQVRVUkVfQlVMS19SRU1PVkUJQVNNX0NPTlNUKDB4MDAwMDAwMDAwMjAwMDAwMCkKLSNkZWZpbmUgRldfRkVBVFVSRV9DTU8JCUFTTV9DT05TVCgweDAwMDAwMDAwMDQwMDAwMDApCisjZGVmaW5lIEZXX0ZFQVRVUkVfQ01PCQlBU01fQ09OU1QoMHgwMDAwMDAwMDAyMDAwMDAwKQogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogCkBAIC01OCw4ICs1Nyw5IEBACiAJCUZXX0ZFQVRVUkVfUEVSRiB8IEZXX0ZFQVRVUkVfRFVNUCB8IEZXX0ZFQVRVUkVfSU5URVJSVVBUIHwKIAkJRldfRkVBVFVSRV9NSUdSQVRFIHwgRldfRkVBVFVSRV9QRVJGTU9OIHwgRldfRkVBVFVSRV9DUlEgfAogCQlGV19GRUFUVVJFX1ZJTyB8IEZXX0ZFQVRVUkVfUkRNQSB8IEZXX0ZFQVRVUkVfTExBTiB8Ci0JCUZXX0ZFQVRVUkVfQlVMSyB8IEZXX0ZFQVRVUkVfWERBQlIgfCBGV19GRUFUVVJFX01VTFRJVENFIHwKLQkJRldfRkVBVFVSRV9TUExQQVIgfCBGV19GRUFUVVJFX0xQQVIgfCBGV19GRUFUVVJFX0NNTywKKwkJRldfRkVBVFVSRV9CVUxLX1JFTU9WRSB8IEZXX0ZFQVRVUkVfWERBQlIgfAorCQlGV19GRUFUVVJFX01VTFRJVENFIHwgRldfRkVBVFVSRV9TUExQQVIgfCBGV19GRUFUVVJFX0xQQVIgfAorCQlGV19GRUFUVVJFX0NNTywKIAlGV19GRUFUVVJFX1BTRVJJRVNfQUxXQVlTID0gMCwKIAlGV19GRUFUVVJFX0lTRVJJRVNfUE9TU0lCTEUgPSBGV19GRUFUVVJFX0lTRVJJRVMgfCBGV19GRUFUVVJFX0xQQVIsCiAJRldfRkVBVFVSRV9JU0VSSUVTX0FMV0FZUyA9IEZXX0ZFQVRVUkVfSVNFUklFUyB8IEZXX0ZFQVRVUkVfTFBBUiwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9pb21tdS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2lvbW11LmgKaW5kZXggNzQ2NGMwZC4uZWRmYzk4MCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2lvbW11LmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2lvbW11LmgKQEAgLTcwLDYgKzcwLDE2IEBACiAKIHN0cnVjdCBzY2F0dGVybGlzdDsKIAorc3RhdGljIGlubGluZSB2b2lkIHNldF9pb21tdV90YWJsZV9iYXNlKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqYmFzZSkKK3sKKwlkZXYtPmFyY2hkYXRhLmRtYV9kYXRhLmlvbW11X3RhYmxlX2Jhc2UgPSBiYXNlOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgKmdldF9pb21tdV90YWJsZV9iYXNlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gZGV2LT5hcmNoZGF0YS5kbWFfZGF0YS5pb21tdV90YWJsZV9iYXNlOworfQorCiAvKiBGcmVlcyB0YWJsZSBmb3IgYW4gaW5kaXZpZHVhbCBkZXZpY2Ugbm9kZSAqLwogZXh0ZXJuIHZvaWQgaW9tbXVfZnJlZV90YWJsZShzdHJ1Y3QgaW9tbXVfdGFibGUgKnRibCwgY29uc3QgY2hhciAqbm9kZV9uYW1lKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BtYy5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BtYy5oCmluZGV4IGNjYzY4YjUuLjVhOWVkZTQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wbWMuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcG1jLmgKQEAgLTI5LDcgKzI5LDcgQEAKIHZvaWQgcmVsZWFzZV9wbWNfaGFyZHdhcmUodm9pZCk7CiB2b2lkIHBwY19lbmFibGVfcG1jcyh2b2lkKTsKIAotI2lmZGVmIENPTkZJR19QUEM2NAorI2lmZGVmIENPTkZJR19QUENfQk9PSzNTXzY0CiAjaW5jbHVkZSA8YXNtL2xwcGFjYS5oPgogCiBzdGF0aWMgaW5saW5lIHZvaWQgcHBjX3NldF9wbXVfaW51c2UoaW50IGludXNlKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3B0ZS00MHguaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wdGUtNDB4LmgKaW5kZXggNmMzZTFmNC4uZWMwYjBiMCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3B0ZS00MHguaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHRlLTQweC5oCkBAIC00Myw2ICs0Myw3IEBACiAjZGVmaW5lCV9QQUdFX05PX0NBQ0hFCTB4MDA0CS8qIEk6IGNhY2hpbmcgaXMgaW5oaWJpdGVkICovCiAjZGVmaW5lCV9QQUdFX1dSSVRFVEhSVQkweDAwOAkvKiBXOiBjYWNoaW5nIGlzIHdyaXRlLXRocm91Z2ggKi8KICNkZWZpbmUJX1BBR0VfVVNFUgkweDAxMAkvKiBtYXRjaGVzIG9uZSBvZiB0aGUgem9uZSBwZXJtaXNzaW9uIGJpdHMgKi8KKyNkZWZpbmUJX1BBR0VfU1BFQ0lBTAkweDAyMAkvKiBzb2Z0d2FyZTogU3BlY2lhbCBwYWdlICovCiAjZGVmaW5lCV9QQUdFX1JXCTB4MDQwCS8qIHNvZnR3YXJlOiBXcml0ZXMgcGVybWl0dGVkICovCiAjZGVmaW5lCV9QQUdFX0RJUlRZCTB4MDgwCS8qIHNvZnR3YXJlOiBkaXJ0eSBwYWdlICovCiAjZGVmaW5lIF9QQUdFX0hXV1JJVEUJMHgxMDAJLyogaGFyZHdhcmU6IERpcnR5ICYgUlcsIHNldCBpbiBleGNlcHRpb24gKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wdGUtOHh4LmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHRlLTh4eC5oCmluZGV4IDk0ZTk3OTcuLmRkNWVhOTUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wdGUtOHh4LmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3B0ZS04eHguaApAQCAtMzIsNiArMzIsNyBAQAogI2RlZmluZSBfUEFHRV9GSUxFCTB4MDAwMgkvKiB3aGVuICFwcmVzZW50OiBub25saW5lYXIgZmlsZSBtYXBwaW5nICovCiAjZGVmaW5lIF9QQUdFX05PX0NBQ0hFCTB4MDAwMgkvKiBJOiBjYWNoZSBpbmhpYml0ICovCiAjZGVmaW5lIF9QQUdFX1NIQVJFRAkweDAwMDQJLyogTm8gQVNJRCAoY29udGV4dCkgY29tcGFyZSAqLworI2RlZmluZSBfUEFHRV9TUEVDSUFMCTB4MDAwOAkvKiBTVyBlbnRyeSwgZm9yY2VkIHRvIDAgYnkgdGhlIFRMQiBtaXNzICovCiAKIC8qIFRoZXNlIGZpdmUgc29mdHdhcmUgYml0cyBtdXN0IGJlIG1hc2tlZCBvdXQgd2hlbiB0aGUgZW50cnkgaXMgbG9hZGVkCiAgKiBpbnRvIHRoZSBUTEIuCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHRlLWNvbW1vbi5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3B0ZS1jb21tb24uaAppbmRleCBjM2I2NTA3Li5mMmIzNzAxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHRlLWNvbW1vbi5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wdGUtY29tbW9uLmgKQEAgLTI1LDkgKzI1LDYgQEAKICNpZm5kZWYgX1BBR0VfV1JJVEVUSFJVCiAjZGVmaW5lIF9QQUdFX1dSSVRFVEhSVQkwCiAjZW5kaWYKLSNpZm5kZWYgX1BBR0VfU1BFQ0lBTAotI2RlZmluZSBfUEFHRV9TUEVDSUFMCTAKLSNlbmRpZgogI2lmbmRlZiBfUEFHRV80S19QRk4KICNkZWZpbmUgX1BBR0VfNEtfUEZOCQkwCiAjZW5kaWYKQEAgLTE3OSw3ICsxNzYsNSBAQAogI2RlZmluZSBIQVZFX1BBR0VfQUdQCiAKIC8qIEFkdmVydGlzZSBzdXBwb3J0IGZvciBfUEFHRV9TUEVDSUFMICovCi0jaWZkZWYgX1BBR0VfU1BFQ0lBTAogI2RlZmluZSBfX0hBVkVfQVJDSF9QVEVfU1BFQ0lBTAotI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3B1dGFibGUuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3B1dGFibGUuYwppbmRleCAwYjljOTEzLi4wM2M4NjJiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2NwdXRhYmxlLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcHV0YWJsZS5jCkBAIC03MTEsNiArNzExLDggQEAKIAkJLmNwdV9zZXR1cAkJPSBfX3NldHVwX2NwdV83NTAsCiAJCS5tYWNoaW5lX2NoZWNrCQk9IG1hY2hpbmVfY2hlY2tfZ2VuZXJpYywKIAkJLnBsYXRmb3JtCQk9ICJwcGM3NTAiLAorCQkub3Byb2ZpbGVfY3B1X3R5cGUgICAgICA9ICJwcGMvNzUwIiwKKwkJLm9wcm9maWxlX3R5cGUJCT0gUFBDX09QUk9GSUxFX0c0LAogCX0sCiAJewkvKiA3NDUvNzU1ICovCiAJCS5wdnJfbWFzawkJPSAweGZmZmZmMDAwLApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9kbWEtaW9tbXUuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvZG1hLWlvbW11LmMKaW5kZXggODdkZGIzZi4uMzc3NzFhNSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9kbWEtaW9tbXUuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2RtYS1pb21tdS5jCkBAIC0xOCw3ICsxOCw3IEBACiBzdGF0aWMgdm9pZCAqZG1hX2lvbW11X2FsbG9jX2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsCiAJCQkJICAgICAgZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSwgZ2ZwX3QgZmxhZykKIHsKLQlyZXR1cm4gaW9tbXVfYWxsb2NfY29oZXJlbnQoZGV2LCBkZXYtPmFyY2hkYXRhLmRtYV9kYXRhLCBzaXplLAorCXJldHVybiBpb21tdV9hbGxvY19jb2hlcmVudChkZXYsIGdldF9pb21tdV90YWJsZV9iYXNlKGRldiksIHNpemUsCiAJCQkJICAgIGRtYV9oYW5kbGUsIGRldmljZV90b19tYXNrKGRldiksIGZsYWcsCiAJCQkJICAgIGRldl90b19ub2RlKGRldikpOwogfQpAQCAtMjYsNyArMjYsNyBAQAogc3RhdGljIHZvaWQgZG1hX2lvbW11X2ZyZWVfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwKIAkJCQkgICAgdm9pZCAqdmFkZHIsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSkKIHsKLQlpb21tdV9mcmVlX2NvaGVyZW50KGRldi0+YXJjaGRhdGEuZG1hX2RhdGEsIHNpemUsIHZhZGRyLCBkbWFfaGFuZGxlKTsKKwlpb21tdV9mcmVlX2NvaGVyZW50KGdldF9pb21tdV90YWJsZV9iYXNlKGRldiksIHNpemUsIHZhZGRyLCBkbWFfaGFuZGxlKTsKIH0KIAogLyogQ3JlYXRlcyBUQ0VzIGZvciBhIHVzZXIgcHJvdmlkZWQgYnVmZmVyLiAgVGhlIHVzZXIgYnVmZmVyIG11c3QgYmUKQEAgLTM5LDggKzM5LDggQEAKIAkJCQkgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbiwKIAkJCQkgICAgIHN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKQogewotCXJldHVybiBpb21tdV9tYXBfcGFnZShkZXYsIGRldi0+YXJjaGRhdGEuZG1hX2RhdGEsIHBhZ2UsIG9mZnNldCwgc2l6ZSwKLQkJCSAgICAgIGRldmljZV90b19tYXNrKGRldiksIGRpcmVjdGlvbiwgYXR0cnMpOworCXJldHVybiBpb21tdV9tYXBfcGFnZShkZXYsIGdldF9pb21tdV90YWJsZV9iYXNlKGRldiksIHBhZ2UsIG9mZnNldCwKKwkJCSAgICAgIHNpemUsIGRldmljZV90b19tYXNrKGRldiksIGRpcmVjdGlvbiwgYXR0cnMpOwogfQogCiAKQEAgLTQ4LDcgKzQ4LDcgQEAKIAkJCQkgc2l6ZV90IHNpemUsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbiwKIAkJCQkgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpCiB7Ci0JaW9tbXVfdW5tYXBfcGFnZShkZXYtPmFyY2hkYXRhLmRtYV9kYXRhLCBkbWFfaGFuZGxlLCBzaXplLCBkaXJlY3Rpb24sCisJaW9tbXVfdW5tYXBfcGFnZShnZXRfaW9tbXVfdGFibGVfYmFzZShkZXYpLCBkbWFfaGFuZGxlLCBzaXplLCBkaXJlY3Rpb24sCiAJCQkgYXR0cnMpOwogfQogCkBAIC01Nyw3ICs1Nyw3IEBACiAJCQkgICAgaW50IG5lbGVtcywgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uLAogCQkJICAgIHN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKQogewotCXJldHVybiBpb21tdV9tYXBfc2coZGV2LCBkZXYtPmFyY2hkYXRhLmRtYV9kYXRhLCBzZ2xpc3QsIG5lbGVtcywKKwlyZXR1cm4gaW9tbXVfbWFwX3NnKGRldiwgZ2V0X2lvbW11X3RhYmxlX2Jhc2UoZGV2KSwgc2dsaXN0LCBuZWxlbXMsCiAJCQkgICAgZGV2aWNlX3RvX21hc2soZGV2KSwgZGlyZWN0aW9uLCBhdHRycyk7CiB9CiAKQEAgLTY1LDE0ICs2NSwxNCBAQAogCQlpbnQgbmVsZW1zLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24sCiAJCXN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKQogewotCWlvbW11X3VubWFwX3NnKGRldi0+YXJjaGRhdGEuZG1hX2RhdGEsIHNnbGlzdCwgbmVsZW1zLCBkaXJlY3Rpb24sCisJaW9tbXVfdW5tYXBfc2coZ2V0X2lvbW11X3RhYmxlX2Jhc2UoZGV2KSwgc2dsaXN0LCBuZWxlbXMsIGRpcmVjdGlvbiwKIAkJICAgICAgIGF0dHJzKTsKIH0KIAogLyogV2Ugc3VwcG9ydCBETUEgdG8vZnJvbSBhbnkgbWVtb3J5IHBhZ2UgdmlhIHRoZSBpb21tdSAqLwogc3RhdGljIGludCBkbWFfaW9tbXVfZG1hX3N1cHBvcnRlZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHU2NCBtYXNrKQogewotCXN0cnVjdCBpb21tdV90YWJsZSAqdGJsID0gZGV2LT5hcmNoZGF0YS5kbWFfZGF0YTsKKwlzdHJ1Y3QgaW9tbXVfdGFibGUgKnRibCA9IGdldF9pb21tdV90YWJsZV9iYXNlKGRldik7CiAKIAlpZiAoIXRibCB8fCB0YmwtPml0X29mZnNldCA+IG1hc2spIHsKIAkJcHJpbnRrKEtFUk5fSU5GTwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9kbWEuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvZG1hLmMKaW5kZXggMjFiNzg0ZC4uNjIxNTA2MiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9kbWEuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2RtYS5jCkBAIC0yMSwxMyArMjEsNiBAQAogICogZGVmYXVsdCB0aGUgb2Zmc2V0IGlzIFBDSV9EUkFNX09GRlNFVC4KICAqLwogCi11bnNpZ25lZCBsb25nIGdldF9kbWFfZGlyZWN0X29mZnNldChzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0JaWYgKGRldikKLQkJcmV0dXJuICh1bnNpZ25lZCBsb25nKWRldi0+YXJjaGRhdGEuZG1hX2RhdGE7Ci0KLQlyZXR1cm4gUENJX0RSQU1fT0ZGU0VUOwotfQogCiB2b2lkICpkbWFfZGlyZWN0X2FsbG9jX2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsCiAJCQkJZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSwgZ2ZwX3QgZmxhZykKQEAgLTM3LDcgKzMwLDcgQEAKIAlyZXQgPSBfX2RtYV9hbGxvY19jb2hlcmVudChkZXYsIHNpemUsIGRtYV9oYW5kbGUsIGZsYWcpOwogCWlmIChyZXQgPT0gTlVMTCkKIAkJcmV0dXJuIE5VTEw7Ci0JKmRtYV9oYW5kbGUgKz0gZ2V0X2RtYV9kaXJlY3Rfb2Zmc2V0KGRldik7CisJKmRtYV9oYW5kbGUgKz0gZ2V0X2RtYV9vZmZzZXQoZGV2KTsKIAlyZXR1cm4gcmV0OwogI2Vsc2UKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKQEAgLTUxLDcgKzQ0LDcgQEAKIAkJcmV0dXJuIE5VTEw7CiAJcmV0ID0gcGFnZV9hZGRyZXNzKHBhZ2UpOwogCW1lbXNldChyZXQsIDAsIHNpemUpOwotCSpkbWFfaGFuZGxlID0gdmlydF90b19hYnMocmV0KSArIGdldF9kbWFfZGlyZWN0X29mZnNldChkZXYpOworCSpkbWFfaGFuZGxlID0gdmlydF90b19hYnMocmV0KSArIGdldF9kbWFfb2Zmc2V0KGRldik7CiAKIAlyZXR1cm4gcmV0OwogI2VuZGlmCkBAIC03NSw3ICs2OCw3IEBACiAJaW50IGk7CiAKIAlmb3JfZWFjaF9zZyhzZ2wsIHNnLCBuZW50cywgaSkgewotCQlzZy0+ZG1hX2FkZHJlc3MgPSBzZ19waHlzKHNnKSArIGdldF9kbWFfZGlyZWN0X29mZnNldChkZXYpOworCQlzZy0+ZG1hX2FkZHJlc3MgPSBzZ19waHlzKHNnKSArIGdldF9kbWFfb2Zmc2V0KGRldik7CiAJCXNnLT5kbWFfbGVuZ3RoID0gc2ctPmxlbmd0aDsKIAkJX19kbWFfc3luY19wYWdlKHNnX3BhZ2Uoc2cpLCBzZy0+b2Zmc2V0LCBzZy0+bGVuZ3RoLCBkaXJlY3Rpb24pOwogCX0KQEAgLTExMCw3ICsxMDMsNyBAQAogewogCUJVR19PTihkaXIgPT0gRE1BX05PTkUpOwogCV9fZG1hX3N5bmNfcGFnZShwYWdlLCBvZmZzZXQsIHNpemUsIGRpcik7Ci0JcmV0dXJuIHBhZ2VfdG9fcGh5cyhwYWdlKSArIG9mZnNldCArIGdldF9kbWFfZGlyZWN0X29mZnNldChkZXYpOworCXJldHVybiBwYWdlX3RvX3BoeXMocGFnZSkgKyBvZmZzZXQgKyBnZXRfZG1hX29mZnNldChkZXYpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgZG1hX2RpcmVjdF91bm1hcF9wYWdlKHN0cnVjdCBkZXZpY2UgKmRldiwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvZW50cnlfNjQuUyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvZW50cnlfNjQuUwppbmRleCA5MDBlMGVlLi45NzYzMjY3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2VudHJ5XzY0LlMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9lbnRyeV82NC5TCkBAIC02NTgsNDIgKzY1OCw0MyBAQAogCWNtcGRpCXIwLDAKIAljcmFuZGMJZXEsY3IxKjQrZXEsZXEKIAlibmUJcmVzdG9yZQotCS8qIGhlcmUgd2UgYXJlIHByZWVtcHRpbmcgdGhlIGN1cnJlbnQgdGFzayAqLwotMToKLSNpZmRlZiBDT05GSUdfVFJBQ0VfSVJRRkxBR1MKLQlibAkudHJhY2VfaGFyZGlycXNfb24KLQkvKiBOb3RlOiB3ZSBqdXN0IGNsb2JiZXJlZCByMTAgd2hpY2ggdXNlZCB0byBjb250YWluIHRoZSBwcmV2aW91cwotCSAqIE1TUiBiZWZvcmUgdGhlIGhhcmQtZGlzYWJsaW5nIGRvbmUgYnkgdGhlIGNhbGxlciBvZiBkb193b3JrLgotCSAqIFdlIGRvbid0IGhhdmUgdGhhdCB2YWx1ZSBhbnltb3JlLCBidXQgaXQgZG9lc24ndCBtYXR0ZXIgYXMKLQkgKiB3ZSB3aWxsIGhhcmQtZW5hYmxlIHVuY29uZGl0aW9uYWxseSwgd2UgY2FuIGp1c3QgcmVsb2FkIHRoZQotCSAqIGN1cnJlbnQgTVNSIGludG8gcjEwCisKKwkvKiBIZXJlIHdlIGFyZSBwcmVlbXB0aW5nIHRoZSBjdXJyZW50IHRhc2suCisJICoKKwkgKiBFbnN1cmUgaW50ZXJydXB0cyBhcmUgc29mdC1kaXNhYmxlZC4gV2UgYWxzbyBwcm9wZXJseSBtYXJrCisJICogdGhlIFBBQ0EgdG8gcmVmbGVjdCB0aGUgZmFjdCB0aGF0IHRoZXkgYXJlIGhhcmQtZGlzYWJsZWQKKwkgKiBhbmQgdHJhY2UgdGhlIGNoYW5nZQogCSAqLwotCW1mbXNyCXIxMAotI2VuZGlmIC8qIENPTkZJR19UUkFDRV9JUlFGTEFHUyAqLwotCWxpCXIwLDEKKwlsaQlyMCwwCiAJc3RiCXIwLFBBQ0FTT0ZUSVJRRU4ocjEzKQogCXN0YglyMCxQQUNBSEFSRElSUUVOKHIxMykKKwlUUkFDRV9ESVNBQkxFX0lOVFMKKworCS8qIENhbGwgdGhlIHNjaGVkdWxlciB3aXRoIHNvZnQgSVJRcyBvZmYgKi8KKzE6CWJsCS5wcmVlbXB0X3NjaGVkdWxlX2lycQorCisJLyogSGFyZC1kaXNhYmxlIGludGVycnVwdHMgYWdhaW4gKGFuZCB1cGRhdGUgUEFDQSkgKi8KICNpZmRlZiBDT05GSUdfUFBDX0JPT0szRQotCXdydGVlaQkxCi0JYmwJLnByZWVtcHRfc2NoZWR1bGUKIAl3cnRlZWkJMAogI2Vsc2UKLQlvcmkJcjEwLHIxMCxNU1JfRUUKLQltdG1zcmQJcjEwLDEJCS8qIHJlZW5hYmxlIGludGVycnVwdHMgKi8KLQlibAkucHJlZW1wdF9zY2hlZHVsZQogCW1mbXNyCXIxMAotCWNscnJkaQlyOSxyMSxUSFJFQURfU0hJRlQKLQlybGRpY2wJcjEwLHIxMCw0OCwxCS8qIGRpc2FibGUgaW50ZXJydXB0cyBhZ2FpbiAqLworCXJsZGljbAlyMTAscjEwLDQ4LDEKIAlyb3RsZGkJcjEwLHIxMCwxNgogCW10bXNyZAlyMTAsMQogI2VuZGlmIC8qIENPTkZJR19QUENfQk9PSzNFICovCisJbGkJcjAsMAorCXN0YglyMCxQQUNBSEFSRElSUUVOKHIxMykKKworCS8qIFJlLXRlc3QgZmxhZ3MgYW5kIGV2ZW50dWFsbHkgbG9vcCAqLworCWNscnJkaQlyOSxyMSxUSFJFQURfU0hJRlQKIAlsZAlyNCxUSV9GTEFHUyhyOSkKIAlhbmRpLglyMCxyNCxfVElGX05FRURfUkVTQ0hFRAogCWJuZQkxYgogCWIJcmVzdG9yZQogCiB1c2VyX3dvcms6Ci0jZW5kaWYKKyNlbmRpZiAvKiBDT05GSUdfUFJFRU1QVCAqLworCiAJLyogRW5hYmxlIGludGVycnVwdHMgKi8KICNpZmRlZiBDT05GSUdfUFBDX0JPT0szRQogCXdydGVlaQkxCkBAIC0xMDM4LDggKzEwMzksNyBAQAogCSAqIFdlIGFyZSBpbiBhIG1vZHVsZSB1c2luZyB0aGUgbW9kdWxlJ3MgVE9DLgogCSAqIFN3aXRjaCB0byBvdXIgVE9DIHRvIHJ1biBpbnNpZGUgdGhlIGNvcmUga2VybmVsLgogCSAqLwotCUxPQURfUkVHX0lNTUVESUFURShyNCxmdHJhY2VfcmV0dXJuX3RvX2hhbmRsZXIpCi0JbGQJcjIsIDgocjQpCisJbGQJcjIsIFBBQ0FUT0MocjEzKQogCiAJYmwJLmZ0cmFjZV9yZXR1cm5fdG9faGFuZGxlcgogCW5vcApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9leGNlcHRpb25zLTY0ZS5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9leGNlcHRpb25zLTY0ZS5TCmluZGV4IDkwNDhmOTYuLjI0ZGNjMGUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvZXhjZXB0aW9ucy02NGUuUworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2V4Y2VwdGlvbnMtNjRlLlMKQEAgLTE3LDcgKzE3LDYgQEAKICNpbmNsdWRlIDxhc20vY3B1dGFibGUuaD4KICNpbmNsdWRlIDxhc20vc2V0dXAuaD4KICNpbmNsdWRlIDxhc20vdGhyZWFkX2luZm8uaD4KLSNpbmNsdWRlIDxhc20vcmVnLmg+CiAjaW5jbHVkZSA8YXNtL2V4Y2VwdGlvbi02NGUuaD4KICNpbmNsdWRlIDxhc20vYnVnLmg+CiAjaW5jbHVkZSA8YXNtL2lycWZsYWdzLmg+CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2tnZGIuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwva2dkYi5jCmluZGV4IGZlOGY3MWQuLjY0MWM3NGIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwva2dkYi5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwva2dkYi5jCkBAIC0yODIsMTIgKzI4Miw2IEBACiB7CiAJdW5zaWduZWQgbG9uZyAqcHRyID0gZ2RiX3JlZ3M7CiAJaW50IHJlZzsKLSNpZmRlZiBDT05GSUdfU1BFCi0JdW5pb24gewotCQl1MzIgdjMyWzJdOwotCQl1NjQgdjY0OwotCX0gYWNjOwotI2VuZGlmCiAKIAlmb3IgKHJlZyA9IDA7IHJlZyA8IDMyOyByZWcrKykKIAkJVU5QQUNLNjQocmVncy0+Z3ByW3JlZ10sIHB0cik7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3BjaS1jb21tb24uYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGNpLWNvbW1vbi5jCmluZGV4IGU5ZjQ4NDAuLmU4ZGZkYmQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGNpLWNvbW1vbi5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGNpLWNvbW1vbi5jCkBAIC0xMTE3LDcgKzExMTcsNyBAQAogCiAJCS8qIEhvb2sgdXAgZGVmYXVsdCBETUEgb3BzICovCiAJCXNkLT5kbWFfb3BzID0gcGNpX2RtYV9vcHM7Ci0JCXNkLT5kbWFfZGF0YSA9ICh2b2lkICopUENJX0RSQU1fT0ZGU0VUOworCQlzZXRfZG1hX29mZnNldCgmZGV2LT5kZXYsIFBDSV9EUkFNX09GRlNFVCk7CiAKIAkJLyogQWRkaXRpb25hbCBwbGF0Zm9ybSBETUEvaW9tbXUgc2V0dXAgKi8KIAkJaWYgKHBwY19tZC5wY2lfZG1hX2Rldl9zZXR1cCkKQEAgLTExOTAsNyArMTE5MCw3IEBACiAgKiBSZXBhcmVudCByZXNvdXJjZSBjaGlsZHJlbiBvZiBwciB0aGF0IGNvbmZsaWN0IHdpdGggcmVzCiAgKiB1bmRlciByZXMsIGFuZCBtYWtlIHJlcyByZXBsYWNlIHRob3NlIGNoaWxkcmVuLgogICovCi1zdGF0aWMgaW50IF9faW5pdCByZXBhcmVudF9yZXNvdXJjZXMoc3RydWN0IHJlc291cmNlICpwYXJlbnQsCitzdGF0aWMgaW50IHJlcGFyZW50X3Jlc291cmNlcyhzdHJ1Y3QgcmVzb3VyY2UgKnBhcmVudCwKIAkJCQkgICAgIHN0cnVjdCByZXNvdXJjZSAqcmVzKQogewogCXN0cnVjdCByZXNvdXJjZSAqcCwgKipwcDsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGNpXzY0LmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3BjaV82NC5jCmluZGV4IGJhOTQ5YTIuLmNjZjU2YWMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGNpXzY0LmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wY2lfNjQuYwpAQCAtOTcsNyArOTcsOSBAQAogCSAqIHRvIGRvIGFuIGFwcHJvcHJpYXRlIFRMQiBmbHVzaCBoZXJlIHRvbwogCSAqLwogCWlmIChidXMtPnNlbGYpIHsKKyNpZmRlZiBDT05GSUdfUFBDX1NURF9NTVVfNjQKIAkJc3RydWN0IHJlc291cmNlICpyZXMgPSBidXMtPnJlc291cmNlWzBdOworI2VuZGlmCiAKIAkJcHJfZGVidWcoIklPIHVubWFwcGluZyBmb3IgUENJLVBDSSBicmlkZ2UgJXNcbiIsCiAJCQkgcGNpX25hbWUoYnVzLT5zZWxmKSk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3BlcmZfZXZlbnQuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGVyZl9ldmVudC5jCmluZGV4IGJiY2JhZTEuLjg3ZjE2NjMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGVyZl9ldmVudC5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGVyZl9ldmVudC5jCkBAIC0xMTYsMjAgKzExNiwyMyBAQAogc3RhdGljIGlubGluZSB1MzIgcGVyZl9nZXRfbWlzY19mbGFncyhzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAl1bnNpZ25lZCBsb25nIG1tY3JhID0gcmVncy0+ZHNpc3I7CisJdW5zaWduZWQgbG9uZyBzaWh2ID0gTU1DUkFfU0lIVjsKKwl1bnNpZ25lZCBsb25nIHNpcHIgPSBNTUNSQV9TSVBSOwogCiAJaWYgKFRSQVAocmVncykgIT0gMHhmMDApCiAJCXJldHVybiAwOwkvKiBub3QgYSBQTVUgaW50ZXJydXB0ICovCiAKIAlpZiAocHBtdS0+ZmxhZ3MgJiBQUE1VX0FMVF9TSVBSKSB7Ci0JCWlmIChtbWNyYSAmIFBPV0VSNl9NTUNSQV9TSUhWKQotCQkJcmV0dXJuIFBFUkZfUkVDT1JEX01JU0NfSFlQRVJWSVNPUjsKLQkJcmV0dXJuIChtbWNyYSAmIFBPV0VSNl9NTUNSQV9TSVBSKSA/Ci0JCQlQRVJGX1JFQ09SRF9NSVNDX1VTRVIgOiBQRVJGX1JFQ09SRF9NSVNDX0tFUk5FTDsKKwkJc2lodiA9IFBPV0VSNl9NTUNSQV9TSUhWOworCQlzaXByID0gUE9XRVI2X01NQ1JBX1NJUFI7CiAJfQotCWlmIChtbWNyYSAmIE1NQ1JBX1NJSFYpCisKKwkvKiBQUiBoYXMgcHJpb3JpdHkgb3ZlciBIViwgc28gb3JkZXIgYmVsb3cgaXMgaW1wb3J0YW50ICovCisJaWYgKG1tY3JhICYgc2lwcikKKwkJcmV0dXJuIFBFUkZfUkVDT1JEX01JU0NfVVNFUjsKKwlpZiAoKG1tY3JhICYgc2lodikgJiYgKGZyZWV6ZV9ldmVudHNfa2VybmVsICE9IE1NQ1IwX0ZDSFYpKQogCQlyZXR1cm4gUEVSRl9SRUNPUkRfTUlTQ19IWVBFUlZJU09SOwotCXJldHVybiAobW1jcmEgJiBNTUNSQV9TSVBSKSA/IFBFUkZfUkVDT1JEX01JU0NfVVNFUiA6Ci0JCVBFUkZfUkVDT1JEX01JU0NfS0VSTkVMOworCXJldHVybiBQRVJGX1JFQ09SRF9NSVNDX0tFUk5FTDsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvY2Vzcy5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggMGEzMjE2NC4uYzkzMGFjMyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9jZXNzLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9jZXNzLmMKQEAgLTEwMTYsOSArMTAxNiwxMyBAQAogI2lmZGVmIENPTkZJR19GVU5DVElPTl9HUkFQSF9UUkFDRVIKIAlpbnQgY3Vycl9mcmFtZSA9IGN1cnJlbnQtPmN1cnJfcmV0X3N0YWNrOwogCWV4dGVybiB2b2lkIHJldHVybl90b19oYW5kbGVyKHZvaWQpOwotCXVuc2lnbmVkIGxvbmcgYWRkciA9ICh1bnNpZ25lZCBsb25nKXJldHVybl90b19oYW5kbGVyOworCXVuc2lnbmVkIGxvbmcgcnRoID0gKHVuc2lnbmVkIGxvbmcpcmV0dXJuX3RvX2hhbmRsZXI7CisJdW5zaWduZWQgbG9uZyBtcnRoID0gLTE7CiAjaWZkZWYgQ09ORklHX1BQQzY0Ci0JYWRkciA9ICoodW5zaWduZWQgbG9uZyopYWRkcjsKKwlleHRlcm4gdm9pZCBtb2RfcmV0dXJuX3RvX2hhbmRsZXIodm9pZCk7CisJcnRoID0gKih1bnNpZ25lZCBsb25nICopcnRoOworCW1ydGggPSAodW5zaWduZWQgbG9uZyltb2RfcmV0dXJuX3RvX2hhbmRsZXI7CisJbXJ0aCA9ICoodW5zaWduZWQgbG9uZyAqKW1ydGg7CiAjZW5kaWYKICNlbmRpZgogCkBAIC0xMDQ0LDcgKzEwNDgsNyBAQAogCQlpZiAoIWZpcnN0ZnJhbWUgfHwgaXAgIT0gbHIpIHsKIAkJCXByaW50aygiWyJSRUciXSBbIlJFRyJdICVwUyIsIHNwLCBpcCwgKHZvaWQgKilpcCk7CiAjaWZkZWYgQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUgotCQkJaWYgKGlwID09IGFkZHIgJiYgY3Vycl9mcmFtZSA+PSAwKSB7CisJCQlpZiAoKGlwID09IHJ0aCB8fCBpcCA9PSBtcnRoKSAmJiBjdXJyX2ZyYW1lID49IDApIHsKIAkJCQlwcmludGsoIiAoJXBTKSIsCiAJCQkJICAgICAgICh2b2lkICopY3VycmVudC0+cmV0X3N0YWNrW2N1cnJfZnJhbWVdLnJldCk7CiAJCQkJY3Vycl9mcmFtZS0tOwpAQCAtMTE2NSw3ICsxMTY5LDIyIEBACiAKIHVuc2lnbmVkIGxvbmcgYXJjaF9yYW5kb21pemVfYnJrKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQogewotCXVuc2lnbmVkIGxvbmcgcmV0ID0gUEFHRV9BTElHTihtbS0+YnJrICsgYnJrX3JuZCgpKTsKKwl1bnNpZ25lZCBsb25nIGJhc2UgPSBtbS0+YnJrOworCXVuc2lnbmVkIGxvbmcgcmV0OworCisjaWZkZWYgQ09ORklHX1BQQ19TVERfTU1VXzY0CisJLyoKKwkgKiBJZiB3ZSBhcmUgdXNpbmcgMVRCIHNlZ21lbnRzIGFuZCB3ZSBhcmUgYWxsb3dlZCB0byByYW5kb21pc2UKKwkgKiB0aGUgaGVhcCwgd2UgY2FuIHB1dCBpdCBhYm92ZSAxVEIgc28gaXQgaXMgYmFja2VkIGJ5IGEgMVRCCisJICogc2VnbWVudC4gT3RoZXJ3aXNlIHRoZSBoZWFwIHdpbGwgYmUgaW4gdGhlIGJvdHRvbSAxVEIKKwkgKiB3aGljaCBhbHdheXMgdXNlcyAyNTZNQiBzZWdtZW50cyBhbmQgdGhpcyBtYXkgcmVzdWx0IGluIGEKKwkgKiBwZXJmb3JtYW5jZSBwZW5hbHR5LgorCSAqLworCWlmICghaXNfMzJiaXRfdGFzaygpICYmIChtbXVfaGlnaHVzZXJfc3NpemUgPT0gTU1VX1NFR1NJWkVfMVQpKQorCQliYXNlID0gbWF4X3QodW5zaWduZWQgbG9uZywgbW0tPmJyaywgMVVMIDw8IFNJRF9TSElGVF8xVCk7CisjZW5kaWYKKworCXJldCA9IFBBR0VfQUxJR04oYmFzZSArIGJya19ybmQoKSk7CiAKIAlpZiAocmV0IDwgbW0tPmJyaykKIAkJcmV0dXJuIG1tLT5icms7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3Byb21faW5pdC5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9tX2luaXQuYwppbmRleCA4NjQzMzRiLi5iYWZhYzJlNCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9tX2luaXQuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Byb21faW5pdC5jCkBAIC04MDAsNyArODAwLDcgQEAKIAlyb290ID0gY2FsbF9wcm9tKCJvcGVuIiwgMSwgMSwgQUREUigiLyIpKTsKIAlpZiAocm9vdCAhPSAwKSB7CiAJCS8qIHRyeSBjYWxsaW5nIHRoZSBpYm0sY2xpZW50LWFyY2hpdGVjdHVyZS1zdXBwb3J0IG1ldGhvZCAqLwotCQlwcm9tX3ByaW50ZigiQ2FsbGluZyBpYm0sY2xpZW50LWFyY2hpdGVjdHVyZS4uLiIpOworCQlwcm9tX3ByaW50ZigiQ2FsbGluZyBpYm0sY2xpZW50LWFyY2hpdGVjdHVyZS1zdXBwb3J0Li4uIik7CiAJCWlmIChjYWxsX3Byb21fcmV0KCJjYWxsLW1ldGhvZCIsIDMsIDIsICZyZXQsCiAJCQkJICBBRERSKCJpYm0sY2xpZW50LWFyY2hpdGVjdHVyZS1zdXBwb3J0IiksCiAJCQkJICByb290LApAQCAtODE0LDYgKzgxNCw3IEBACiAJCQlyZXR1cm47CiAJCX0KIAkJY2FsbF9wcm9tKCJjbG9zZSIsIDEsIDAsIHJvb3QpOworCQlwcm9tX3ByaW50ZigiIG5vdCBpbXBsZW1lbnRlZFxuIik7CiAJfQogCiAJLyogbm8gaWJtLGNsaWVudC1hcmNoaXRlY3R1cmUtc3VwcG9ydCBjYWxsLCB0cnkgdGhlIG9sZCB3YXkgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2V0dXBfNjQuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2V0dXBfNjQuYwppbmRleCA3OTdlYTk1Li4wNGY2MzhkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3NldHVwXzY0LmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zZXR1cF82NC5jCkBAIC01Nyw3ICs1Nyw2IEBACiAjaW5jbHVkZSA8YXNtL2NhY2hlLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KICNpbmNsdWRlIDxhc20vbW11Lmg+Ci0jaW5jbHVkZSA8YXNtL21tdS1oYXNoNjQuaD4KICNpbmNsdWRlIDxhc20vZmlybXdhcmUuaD4KICNpbmNsdWRlIDxhc20veG1vbi5oPgogI2luY2x1ZGUgPGFzbS91ZGJnLmg+CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3Zkc28uYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmRzby5jCmluZGV4IDNmYWFmMjkuLjEzN2RjMjIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmRzby5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmRzby5jCkBAIC01MCw2ICs1MCw5IEBACiAvKiBNYXggc3VwcG9ydGVkIHNpemUgZm9yIHN5bWJvbCBuYW1lcyAqLwogI2RlZmluZSBNQVhfU1lNTkFNRQk2NAogCisvKiBUaGUgYWxpZ25tZW50IG9mIHRoZSB2RFNPICovCisjZGVmaW5lIFZEU09fQUxJR05NRU5UCSgxIDw8IDE2KQorCiBleHRlcm4gY2hhciB2ZHNvMzJfc3RhcnQsIHZkc28zMl9lbmQ7CiBzdGF0aWMgdm9pZCAqdmRzbzMyX2tiYXNlID0gJnZkc28zMl9zdGFydDsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgdmRzbzMyX3BhZ2VzOwpAQCAtMjMxLDE1ICsyMzQsMjggQEAKIAkgKiBwaWNrIGEgYmFzZSBhZGRyZXNzIGZvciB0aGUgdkRTTyBpbiBwcm9jZXNzIHNwYWNlLiBXZSB0cnkgdG8gcHV0IGl0CiAJICogYXQgdmRzb19iYXNlIHdoaWNoIGlzIHRoZSAibmF0dXJhbCIgYmFzZSBmb3IgaXQsIGJ1dCB3ZSBtaWdodCBmYWlsCiAJICogYW5kIGVuZCB1cCBwdXR0aW5nIGl0IGVsc2V3aGVyZS4KKwkgKiBBZGQgZW5vdWdoIHRvIHRoZSBzaXplIHNvIHRoYXQgdGhlIHJlc3VsdCBjYW4gYmUgYWxpZ25lZC4KIAkgKi8KIAlkb3duX3dyaXRlKCZtbS0+bW1hcF9zZW0pOwogCXZkc29fYmFzZSA9IGdldF91bm1hcHBlZF9hcmVhKE5VTEwsIHZkc29fYmFzZSwKLQkJCQkgICAgICB2ZHNvX3BhZ2VzIDw8IFBBR0VfU0hJRlQsIDAsIDApOworCQkJCSAgICAgICh2ZHNvX3BhZ2VzIDw8IFBBR0VfU0hJRlQpICsKKwkJCQkgICAgICAoKFZEU09fQUxJR05NRU5UIC0gMSkgJiBQQUdFX01BU0spLAorCQkJCSAgICAgIDAsIDApOwogCWlmIChJU19FUlJfVkFMVUUodmRzb19iYXNlKSkgewogCQlyYyA9IHZkc29fYmFzZTsKIAkJZ290byBmYWlsX21tYXBzZW07CiAJfQogCisJLyogQWRkIHJlcXVpcmVkIGFsaWdubWVudC4gKi8KKwl2ZHNvX2Jhc2UgPSBBTElHTih2ZHNvX2Jhc2UsIFZEU09fQUxJR05NRU5UKTsKKworCS8qCisJICogUHV0IHZEU08gYmFzZSBpbnRvIG1tIHN0cnVjdC4gV2UgbmVlZCB0byBkbyB0aGlzIGJlZm9yZSBjYWxsaW5nCisJICogaW5zdGFsbF9zcGVjaWFsX21hcHBpbmcgb3IgdGhlIHBlcmYgY291bnRlciBtbWFwIHRyYWNraW5nIGNvZGUKKwkgKiB3aWxsIGZhaWwgdG8gcmVjb2duaXNlIGl0IGFzIGEgdkRTTyAoc2luY2UgYXJjaF92bWFfbmFtZSBmYWlscykuCisJICovCisJY3VycmVudC0+bW0tPmNvbnRleHQudmRzb19iYXNlID0gdmRzb19iYXNlOworCiAJLyoKIAkgKiBvdXIgdm1hIGZsYWdzIGRvbid0IGhhdmUgVk1fV1JJVEUgc28gYnkgZGVmYXVsdCwgdGhlIHByb2Nlc3MgaXNuJ3QKIAkgKiBhbGxvd2VkIHRvIHdyaXRlIHRob3NlIHBhZ2VzLgpAQCAtMjYwLDExICsyNzYsMTAgQEAKIAkJCQkgICAgIFZNX01BWVJFQUR8Vk1fTUFZV1JJVEV8Vk1fTUFZRVhFQ3wKIAkJCQkgICAgIFZNX0FMV0FZU0RVTVAsCiAJCQkJICAgICB2ZHNvX3BhZ2VsaXN0KTsKLQlpZiAocmMpCisJaWYgKHJjKSB7CisJCWN1cnJlbnQtPm1tLT5jb250ZXh0LnZkc29fYmFzZSA9IDA7CiAJCWdvdG8gZmFpbF9tbWFwc2VtOwotCi0JLyogUHV0IHZEU08gYmFzZSBpbnRvIG1tIHN0cnVjdCAqLwotCWN1cnJlbnQtPm1tLT5jb250ZXh0LnZkc29fYmFzZSA9IHZkc29fYmFzZTsKKwl9CiAKIAl1cF93cml0ZSgmbW0tPm1tYXBfc2VtKTsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmRzbzMyL3Zkc28zMi5sZHMuUyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmRzbzMyL3Zkc28zMi5sZHMuUwppbmRleCA5MDRlZjEzLi4wNTQ2YmNkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3Zkc28zMi92ZHNvMzIubGRzLlMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC92ZHNvMzIvdmRzbzMyLmxkcy5TCkBAIC0yNSw3ICsyNSw3IEBACiAJLiA9IEFMSUdOKDE2KTsKIAkudGV4dAkJOiB7CiAJCSooLnRleHQgLnN0dWIgLnRleHQuKiAuZ251LmxpbmtvbmNlLnQuKiBfX2Z0cl9hbHRfKikKLQl9CisJfQkJICAgICAgCSAgICAgIAkJCTp0ZXh0CiAJUFJPVklERShfX2V0ZXh0ID0gLik7CiAJUFJPVklERShfZXRleHQgPSAuKTsKIAlQUk9WSURFKGV0ZXh0ID0gLik7CkBAIC01Niw3ICs1Niw3IEBACiAJLmZpeHVwCQk6IHsgKiguZml4dXApIH0KIAogCS5keW5hbWljCTogeyAqKC5keW5hbWljKSB9CQk6dGV4dAk6ZHluYW1pYwotCS5nb3QJCTogeyAqKC5nb3QpIH0KKwkuZ290CQk6IHsgKiguZ290KSB9CQkJOnRleHQKIAkucGx0CQk6IHsgKigucGx0KSB9CiAKIAlfZW5kID0gLjsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmlvLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Zpby5jCmluZGV4IGJjN2I0MWUuLjc3ZjY0MjEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmlvLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC92aW8uYwpAQCAtMTA1NCw2ICsxMDU0LDggQEAKIAkJcmV0dXJuIE5VTEw7CiAKIAl0YmwgPSBrbWFsbG9jKHNpemVvZigqdGJsKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHRibCA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKIAogCW9mX3BhcnNlX2RtYV93aW5kb3coZGV2LT5kZXYuYXJjaGRhdGEub2Zfbm9kZSwgZG1hX3dpbmRvdywKIAkJCSAgICAmdGJsLT5pdF9pbmRleCwgJm9mZnNldCwgJnNpemUpOwpAQCAtMTIzMyw3ICsxMjM1LDcgQEAKIAkJdmlvX2Ntb19zZXRfZG1hX29wcyh2aW9kZXYpOwogCWVsc2UKIAkJdmlvZGV2LT5kZXYuYXJjaGRhdGEuZG1hX29wcyA9ICZkbWFfaW9tbXVfb3BzOwotCXZpb2Rldi0+ZGV2LmFyY2hkYXRhLmRtYV9kYXRhID0gdmlvX2J1aWxkX2lvbW11X3RhYmxlKHZpb2Rldik7CisJc2V0X2lvbW11X3RhYmxlX2Jhc2UoJnZpb2Rldi0+ZGV2LCB2aW9fYnVpbGRfaW9tbXVfdGFibGUodmlvZGV2KSk7CiAJc2V0X2Rldl9ub2RlKCZ2aW9kZXYtPmRldiwgb2Zfbm9kZV90b19uaWQob2Zfbm9kZSkpOwogCiAJLyogaW5pdCBnZW5lcmljICdzdHJ1Y3QgZGV2aWNlJyBmaWVsZHM6ICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3ZtbGludXgubGRzLlMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3ZtbGludXgubGRzLlMKaW5kZXggNThkYTQwNy4uMjc3MzVhNyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC92bWxpbnV4Lmxkcy5TCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdm1saW51eC5sZHMuUwpAQCAtNiw2ICs2LDcgQEAKICNpbmNsdWRlIDxhc20vcGFnZS5oPgogI2luY2x1ZGUgPGFzbS1nZW5lcmljL3ZtbGludXgubGRzLmg+CiAjaW5jbHVkZSA8YXNtL2NhY2hlLmg+CisjaW5jbHVkZSA8YXNtL3RocmVhZF9pbmZvLmg+CiAKIEVOVFJZKF9zdGV4dCkKIApAQCAtNzEsMTIgKzcyLDcgQEAKIAkvKiBSZWFkLW9ubHkgZGF0YSAqLwogCVJPREFUQQogCi0JLyogRXhjZXB0aW9uICYgYnVnIHRhYmxlcyAqLwotCV9fZXhfdGFibGUgOiBBVChBRERSKF9fZXhfdGFibGUpIC0gTE9BRF9PRkZTRVQpIHsKLQkJX19zdGFydF9fX2V4X3RhYmxlID0gLjsKLQkJKihfX2V4X3RhYmxlKQotCQlfX3N0b3BfX19leF90YWJsZSA9IC47Ci0JfQorCUVYQ0VQVElPTl9UQUJMRSgwKQogCiAJTk9URVMgOmtlcm5lbCA6bm90ZXMKIApAQCAtOTMsMTIgKzg5LDcgQEAKICAqLwogCS4gPSBBTElHTihQQUdFX1NJWkUpOwogCV9faW5pdF9iZWdpbiA9IC47Ci0KLQkuaW5pdC50ZXh0IDogQVQoQUREUiguaW5pdC50ZXh0KSAtIExPQURfT0ZGU0VUKSB7Ci0JCV9zaW5pdHRleHQgPSAuOwotCQlJTklUX1RFWFQKLQkJX2Vpbml0dGV4dCA9IC47Ci0JfSA6a2VybmVsCisJSU5JVF9URVhUX1NFQ1RJT04oUEFHRV9TSVpFKSA6a2VybmVsCiAKIAkvKiAuZXhpdC50ZXh0IGlzIGRpc2NhcmRlZCBhdCBydW50aW1lLCBub3QgbGluayB0aW1lLAogCSAqIHRvIGRlYWwgd2l0aCByZWZlcmVuY2VzIGZyb20gX19idWdfdGFibGUKQEAgLTEyMiwyMyArMTEzLDE2IEBACiAjZW5kaWYKIAl9CiAKLQkuID0gQUxJR04oMTYpOwogCS5pbml0LnNldHVwIDogQVQoQUREUiguaW5pdC5zZXR1cCkgLSBMT0FEX09GRlNFVCkgewotCQlfX3NldHVwX3N0YXJ0ID0gLjsKLQkJKiguaW5pdC5zZXR1cCkKLQkJX19zZXR1cF9lbmQgPSAuOworCQlJTklUX1NFVFVQKDE2KQogCX0KIAogCS5pbml0Y2FsbC5pbml0IDogQVQoQUREUiguaW5pdGNhbGwuaW5pdCkgLSBMT0FEX09GRlNFVCkgewotCQlfX2luaXRjYWxsX3N0YXJ0ID0gLjsKLQkJSU5JVENBTExTCi0JCV9faW5pdGNhbGxfZW5kID0gLjsKLQkJfQorCQlJTklUX0NBTExTCisJfQogCiAJLmNvbl9pbml0Y2FsbC5pbml0IDogQVQoQUREUiguY29uX2luaXRjYWxsLmluaXQpIC0gTE9BRF9PRkZTRVQpIHsKLQkJX19jb25faW5pdGNhbGxfc3RhcnQgPSAuOwotCQkqKC5jb25faW5pdGNhbGwuaW5pdCkKLQkJX19jb25faW5pdGNhbGxfZW5kID0gLjsKKwkJQ09OX0lOSVRDQUxMCiAJfQogCiAJU0VDVVJJVFlfSU5JVApAQCAtMTY5LDE0ICsxNTMsMTAgQEAKIAkJX19zdG9wX19fZndfZnRyX2ZpeHVwID0gLjsKIAl9CiAjZW5kaWYKLSNpZmRlZiBDT05GSUdfQkxLX0RFVl9JTklUUkQKLQkuID0gQUxJR04oUEFHRV9TSVpFKTsKIAkuaW5pdC5yYW1mcyA6IEFUKEFERFIoLmluaXQucmFtZnMpIC0gTE9BRF9PRkZTRVQpIHsKLQkJX19pbml0cmFtZnNfc3RhcnQgPSAuOwotCQkqKC5pbml0LnJhbWZzKQotCQlfX2luaXRyYW1mc19lbmQgPSAuOworCQlJTklUX1JBTV9GUwogCX0KLSNlbmRpZgorCiAJUEVSQ1BVKFBBR0VfU0laRSkKIAogCS4gPSBBTElHTig4KTsKQEAgLTI0MCwzNiArMjIwLDI1IEBACiAjZW5kaWYKIAogCS8qIFRoZSBpbml0aWFsIHRhc2sgYW5kIGtlcm5lbCBzdGFjayAqLwotI2lmZGVmIENPTkZJR19QUEMzMgotCS4gPSBBTElHTig4MTkyKTsKLSNlbHNlCi0JLiA9IEFMSUdOKDE2Mzg0KTsKLSNlbmRpZgogCS5kYXRhLmluaXRfdGFzayA6IEFUKEFERFIoLmRhdGEuaW5pdF90YXNrKSAtIExPQURfT0ZGU0VUKSB7Ci0JCSooLmRhdGEuaW5pdF90YXNrKQorCQlJTklUX1RBU0tfREFUQShUSFJFQURfU0laRSkKIAl9CiAKLQkuID0gQUxJR04oUEFHRV9TSVpFKTsKIAkuZGF0YS5wYWdlX2FsaWduZWQgOiBBVChBRERSKC5kYXRhLnBhZ2VfYWxpZ25lZCkgLSBMT0FEX09GRlNFVCkgewotCQkqKC5kYXRhLnBhZ2VfYWxpZ25lZCkKKwkJUEFHRV9BTElHTkVEX0RBVEEoUEFHRV9TSVpFKQogCX0KIAotCS4gPSBBTElHTihMMV9DQUNIRV9CWVRFUyk7CiAJLmRhdGEuY2FjaGVsaW5lX2FsaWduZWQgOiBBVChBRERSKC5kYXRhLmNhY2hlbGluZV9hbGlnbmVkKSAtIExPQURfT0ZGU0VUKSB7Ci0JCSooLmRhdGEuY2FjaGVsaW5lX2FsaWduZWQpCisJCUNBQ0hFTElORV9BTElHTkVEX0RBVEEoTDFfQ0FDSEVfQllURVMpCiAJfQogCi0JLiA9IEFMSUdOKEwxX0NBQ0hFX0JZVEVTKTsKIAkuZGF0YS5yZWFkX21vc3RseSA6IEFUKEFERFIoLmRhdGEucmVhZF9tb3N0bHkpIC0gTE9BRF9PRkZTRVQpIHsKLQkJKiguZGF0YS5yZWFkX21vc3RseSkKKwkJUkVBRF9NT1NUTFlfREFUQShMMV9DQUNIRV9CWVRFUykKIAl9CiAKIAkuID0gQUxJR04oUEFHRV9TSVpFKTsKIAkuZGF0YV9ub3NhdmUgOiBBVChBRERSKC5kYXRhX25vc2F2ZSkgLSBMT0FEX09GRlNFVCkgewotCQlfX25vc2F2ZV9iZWdpbiA9IC47Ci0JCSooLmRhdGEubm9zYXZlKQotCQkuID0gQUxJR04oUEFHRV9TSVpFKTsKLQkJX19ub3NhdmVfZW5kID0gLjsKKwkJTk9TQVZFX0RBVEEKIAl9CiAKIAkuID0gQUxJR04oUEFHRV9TSVpFKTsKQEAgLTI4MCwxNCArMjQ5LDcgQEAKICAqIEFuZCBmaW5hbGx5IHRoZSBic3MKICAqLwogCi0JLmJzcyA6IEFUKEFERFIoLmJzcykgLSBMT0FEX09GRlNFVCkgewotCQlfX2Jzc19zdGFydCA9IC47Ci0JCSooLnNic3MpICooLnNjb21tb24pCi0JCSooLmR5bmJzcykKLQkJKiguYnNzKQotCQkqKENPTU1PTikKLQkJX19ic3Nfc3RvcCA9IC47Ci0JfQorCUJTU19TRUNUSU9OKDAsIDAsIDApCiAKIAkuID0gQUxJR04oUEFHRV9TSVpFKTsKIAlfZW5kID0gLiA7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva3ZtL3RpbWluZy5jIGIvYXJjaC9wb3dlcnBjL2t2bS90aW1pbmcuYwppbmRleCA0N2VlNjAzLi4yYWEzNzFlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva3ZtL3RpbWluZy5jCisrKyBiL2FyY2gvcG93ZXJwYy9rdm0vdGltaW5nLmMKQEAgLTIwMSw3ICsyMDEsNyBAQAogCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBrdm1wcGNfZXhpdF90aW1pbmdfc2hvdywgaW5vZGUtPmlfcHJpdmF0ZSk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGt2bXBwY19leGl0X3RpbWluZ19mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMga3ZtcHBjX2V4aXRfdGltaW5nX2ZvcHMgPSB7CiAJLm93bmVyICAgPSBUSElTX01PRFVMRSwKIAkub3BlbiAgICA9IGt2bXBwY19leGl0X3RpbWluZ19vcGVuLAogCS5yZWFkICAgID0gc2VxX3JlYWQsCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vcGd0YWJsZS5jIGIvYXJjaC9wb3dlcnBjL21tL3BndGFibGUuYwppbmRleCA4M2YxNTUxLi41MzA0MDkzIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vcGd0YWJsZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9tbS9wZ3RhYmxlLmMKQEAgLTMwLDYgKzMwLDggQEAKICNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KICNpbmNsdWRlIDxhc20vdGxiLmg+CiAKKyNpbmNsdWRlICJtbXVfZGVjbC5oIgorCiBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgbW11X2dhdGhlciwgbW11X2dhdGhlcnMpOwogCiAjaWZkZWYgQ09ORklHX1NNUApAQCAtMTY2LDcgKzE2OCw3IEBACiAgKiBzdXBwb3J0IGZhbGxzIGludG8gdGhlIHNhbWUgY2F0ZWdvcnkuCiAgKi8KIAotc3RhdGljIHB0ZV90IHNldF9wdGVfZmlsdGVyKHB0ZV90IHB0ZSkKK3N0YXRpYyBwdGVfdCBzZXRfcHRlX2ZpbHRlcihwdGVfdCBwdGUsIHVuc2lnbmVkIGxvbmcgYWRkcikKIHsKIAlwdGUgPSBfX3B0ZShwdGVfdmFsKHB0ZSkgJiB+X1BBR0VfSFBURUZMQUdTKTsKIAlpZiAocHRlX2xvb2tzX25vcm1hbChwdGUpICYmICEoY3B1X2hhc19mZWF0dXJlKENQVV9GVFJfQ09IRVJFTlRfSUNBQ0hFKSB8fApAQCAtMTc1LDYgKzE3NywxNyBAQAogCQlpZiAoIXBnKQogCQkJcmV0dXJuIHB0ZTsKIAkJaWYgKCF0ZXN0X2JpdChQR19hcmNoXzEsICZwZy0+ZmxhZ3MpKSB7CisjaWZkZWYgQ09ORklHXzh4eAorCQkJLyogT24gOHh4LCBjYWNoZSBjb250cm9sIGluc3RydWN0aW9ucyAocGFydGljdWxhcmx5CisJCQkgKiAiZGNic3QiIGZyb20gZmx1c2hfZGNhY2hlX2ljYWNoZSkgZmF1bHQgYXMgd3JpdGUKKwkJCSAqIG9wZXJhdGlvbiBpZiB0aGVyZSBpcyBhbiB1bnBvcHVsYXRlZCBUTEIgZW50cnkKKwkJCSAqIGZvciB0aGUgYWRkcmVzcyBpbiBxdWVzdGlvbi4gVG8gd29ya2Fyb3VuZCB0aGF0LAorCQkJICogd2UgaW52YWxpZGF0ZSB0aGUgVExCIGhlcmUsIHRodXMgYXZvaWRpbmcgZGNic3QKKwkJCSAqIG1pc2JlaGF2aW91ci4KKwkJCSAqLworCQkJLyogOHh4IGRvZXNuJ3QgY2FyZSBhYm91dCBQSUQsIHNpemUgb3IgaW5kIGFyZ3MgKi8KKwkJCV90bGJpbF92YShhZGRyLCAwLCAwLCAwKTsKKyNlbmRpZiAvKiBDT05GSUdfOHh4ICovCiAJCQlmbHVzaF9kY2FjaGVfaWNhY2hlX3BhZ2UocGcpOwogCQkJc2V0X2JpdChQR19hcmNoXzEsICZwZy0+ZmxhZ3MpOwogCQl9CkBAIC0xOTQsNyArMjA3LDcgQEAKICAqIGFzIHdlIGRvbid0IGhhdmUgdHdvIGJpdHMgdG8gc3BhcmUgZm9yIF9QQUdFX0VYRUMgYW5kIF9QQUdFX0hXRVhFQyBzbwogICogaW5zdGVhZCB3ZSAiZmlsdGVyIG91dCIgdGhlIGV4ZWMgcGVybWlzc2lvbiBmb3Igbm9uIGNsZWFuIHBhZ2VzLgogICovCi1zdGF0aWMgcHRlX3Qgc2V0X3B0ZV9maWx0ZXIocHRlX3QgcHRlKQorc3RhdGljIHB0ZV90IHNldF9wdGVfZmlsdGVyKHB0ZV90IHB0ZSwgdW5zaWduZWQgbG9uZyBhZGRyKQogewogCXN0cnVjdCBwYWdlICpwZzsKIApAQCAtMjc2LDcgKzI4OSw3IEBACiAJICogdGhpcyBjb250ZXh0IG1pZ2h0IG5vdCBoYXZlIGJlZW4gYWN0aXZhdGVkIHlldCB3aGVuIHRoaXMKIAkgKiBpcyBjYWxsZWQuCiAJICovCi0JcHRlID0gc2V0X3B0ZV9maWx0ZXIocHRlKTsKKwlwdGUgPSBzZXRfcHRlX2ZpbHRlcihwdGUsIGFkZHIpOwogCiAJLyogUGVyZm9ybSB0aGUgc2V0dGluZyBvZiB0aGUgUFRFICovCiAJX19zZXRfcHRlX2F0KG1tLCBhZGRyLCBwdGVwLCBwdGUsIDApOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL3NsYl9sb3cuUyBiL2FyY2gvcG93ZXJwYy9tbS9zbGJfbG93LlMKaW5kZXggYmM0NGRjNC4uOTVjZTM1NSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL3NsYl9sb3cuUworKysgYi9hcmNoL3Bvd2VycGMvbW0vc2xiX2xvdy5TCkBAIC03MiwxOSArNzIsMTcgQEAKIDE6CiAjZW5kaWYgLyogQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQICovCiAKLQkvKiB2bWFsbG9jL2lvcmVtYXAgbWFwcGluZyBlbmNvZGluZyBiaXRzLCB0aGUgImxpIiBpbnN0cnVjdGlvbnMgYmVsb3cKLQkgKiB3aWxsIGJlIHBhdGNoZWQgYnkgdGhlIGtlcm5lbCBhdCBib290CisJLyogdm1hbGxvYyBtYXBwaW5nIGdldHMgdGhlIGVuY29kaW5nIGZyb20gdGhlIFBBQ0EgYXMgdGhlIG1hcHBpbmcKKwkgKiBjYW4gYmUgZGVtb3RlZCBmcm9tIDY0SyAtPiA0SyBkeW5hbWljYWxseSBvbiBzb21lIG1hY2hpbmVzCiAJICovCi1CRUdJTl9GVFJfU0VDVElPTgotCS8qIGNoZWNrIHdoZXRoZXIgdGhpcyBpcyBpbiB2bWFsbG9jIG9yIGlvcmVtYXAgc3BhY2UgKi8KIAljbHJsZGkJcjExLHIxMCw0OAogCWNtcGxkaQlyMTEsKFZNQUxMT0NfU0laRSA+PiAyOCkgLSAxCiAJYmd0CTVmCiAJbGh6CXIxMSxQQUNBVk1BTExPQ1NMTFAocjEzKQogCWIJNmYKIDU6Ci1FTkRfRlRSX1NFQ1RJT05fSUZDTFIoQ1BVX0ZUUl9DSV9MQVJHRV9QQUdFKQotX0dMT0JBTChzbGJfbWlzc19rZXJuZWxfbG9hZF9pbykKKwkvKiBJTyBtYXBwaW5nICovCisJX0dMT0JBTChzbGJfbWlzc19rZXJuZWxfbG9hZF9pbykKIAlsaQlyMTEsMAogNjoKIEJFR0lOX0ZUUl9TRUNUSU9OCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vdGxiX2xvd182NGUuUyBiL2FyY2gvcG93ZXJwYy9tbS90bGJfbG93XzY0ZS5TCmluZGV4IGVmMWNjY2YuLmYyODgyNzkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS90bGJfbG93XzY0ZS5TCisrKyBiL2FyY2gvcG93ZXJwYy9tbS90bGJfbG93XzY0ZS5TCkBAIC0xOCw3ICsxOCw2IEBACiAjaW5jbHVkZSA8YXNtL2FzbS1vZmZzZXRzLmg+CiAjaW5jbHVkZSA8YXNtL2NwdXRhYmxlLmg+CiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KLSNpbmNsdWRlIDxhc20vcmVnLmg+CiAjaW5jbHVkZSA8YXNtL2V4Y2VwdGlvbi02NGUuaD4KICNpbmNsdWRlIDxhc20vcHBjLW9wY29kZS5oPgogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUyeHgvbXBjNTIwMF9zaW1wbGUuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTJ4eC9tcGM1MjAwX3NpbXBsZS5jCmluZGV4IGMzMWU1YjUuLmQ0NWJlNWIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTJ4eC9tcGM1MjAwX3NpbXBsZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTJ4eC9tcGM1MjAwX3NpbXBsZS5jCkBAIC01MSw2ICs1MSw4IEBACiAvKiBsaXN0IG9mIHRoZSBzdXBwb3J0ZWQgYm9hcmRzICovCiBzdGF0aWMgY2hhciAqYm9hcmRbXSBfX2luaXRkYXRhID0gewogCSJpbnRlcmNvbnRyb2wsZGlnc3ktbXRjIiwKKwkibWFucm9sYW5kLG11Y21jNTIiLAorCSJtYW5yb2xhbmQsdWMxMDEiLAogCSJwaHl0ZWMscGNtMDMwIiwKIAkicGh5dGVjLHBjbTAzMiIsCiAJInByb21lc3MsbW90aW9ucHJvIiwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9heG9uX21zaS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2F4b25fbXNpLmMKaW5kZXggYWNhNTc0MS4uYTg2YzM0YiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2F4b25fbXNpLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2F4b25fbXNpLmMKQEAgLTM2NSw3ICszNjUsNyBAQAogCQlwcmludGsoS0VSTl9FUlIKIAkJICAgICAgICJheG9uX21zaTogY291bGRuJ3QgcGFyc2UgZGNyIHByb3BlcnRpZXMgb24gJXNcbiIsCiAJCQlkbi0+ZnVsbF9uYW1lKTsKLQkJZ290byBvdXQ7CisJCWdvdG8gb3V0X2ZyZWVfbXNpYzsKIAl9CiAKIAltc2ljLT5kY3JfaG9zdCA9IGRjcl9tYXAoZG4sIGRjcl9iYXNlLCBkY3JfbGVuKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9iZWF0X2lvbW11LmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvYmVhdF9pb21tdS5jCmluZGV4IDkzYjBlZmQuLjM5ZDM2MWMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9iZWF0X2lvbW11LmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2JlYXRfaW9tbXUuYwpAQCAtNzcsNyArNzcsNyBAQAogc3RhdGljIHZvaWQgY2VsbGViX2RtYV9kZXZfc2V0dXAoc3RydWN0IGRldmljZSAqZGV2KQogewogCWRldi0+YXJjaGRhdGEuZG1hX29wcyA9IGdldF9wY2lfZG1hX29wcygpOwotCWRldi0+YXJjaGRhdGEuZG1hX2RhdGEgPSAodm9pZCAqKWNlbGxlYl9kbWFfZGlyZWN0X29mZnNldDsKKwlzZXRfZG1hX29mZnNldChkZXYsIGNlbGxlYl9kbWFfZGlyZWN0X29mZnNldCk7CiB9CiAKIHN0YXRpYyB2b2lkIGNlbGxlYl9wY2lfZG1hX2Rldl9zZXR1cChzdHJ1Y3QgcGNpX2RldiAqcGRldikKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9pb21tdS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2lvbW11LmMKaW5kZXggNDE2ZGIxNy4uY2E1YmZkZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2lvbW11LmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2lvbW11LmMKQEAgLTY1NywxNSArNjU3LDEzIEBACiAKIHN0YXRpYyB2b2lkIGNlbGxfZG1hX2Rldl9zZXR1cChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IGRldl9hcmNoZGF0YSAqYXJjaGRhdGEgPSAmZGV2LT5hcmNoZGF0YTsKLQogCS8qIE9yZGVyIGlzIGltcG9ydGFudCBoZXJlLCB0aGVzZSBhcmUgbm90IG11dHVhbGx5IGV4Y2x1c2l2ZSAqLwogCWlmIChnZXRfZG1hX29wcyhkZXYpID09ICZkbWFfaW9tbXVfZml4ZWRfb3BzKQogCQljZWxsX2RtYV9kZXZfc2V0dXBfZml4ZWQoZGV2KTsKIAllbHNlIGlmIChnZXRfcGNpX2RtYV9vcHMoKSA9PSAmZG1hX2lvbW11X29wcykKLQkJYXJjaGRhdGEtPmRtYV9kYXRhID0gY2VsbF9nZXRfaW9tbXVfdGFibGUoZGV2KTsKKwkJc2V0X2lvbW11X3RhYmxlX2Jhc2UoZGV2LCBjZWxsX2dldF9pb21tdV90YWJsZShkZXYpKTsKIAllbHNlIGlmIChnZXRfcGNpX2RtYV9vcHMoKSA9PSAmZG1hX2RpcmVjdF9vcHMpCi0JCWFyY2hkYXRhLT5kbWFfZGF0YSA9ICh2b2lkICopY2VsbF9kbWFfZGlyZWN0X29mZnNldDsKKwkJc2V0X2RtYV9vZmZzZXQoZGV2LCBjZWxsX2RtYV9kaXJlY3Rfb2Zmc2V0KTsKIAllbHNlCiAJCUJVRygpOwogfQpAQCAtOTczLDExICs5NzEsMTAgQEAKIAogc3RhdGljIHZvaWQgY2VsbF9kbWFfZGV2X3NldHVwX2ZpeGVkKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgZGV2X2FyY2hkYXRhICphcmNoZGF0YSA9ICZkZXYtPmFyY2hkYXRhOwogCXU2NCBhZGRyOwogCiAJYWRkciA9IGNlbGxfaW9tbXVfZ2V0X2ZpeGVkX2FkZHJlc3MoZGV2KSArIGRtYV9pb21tdV9maXhlZF9iYXNlOwotCWFyY2hkYXRhLT5kbWFfZGF0YSA9ICh2b2lkICopYWRkcjsKKwlzZXRfZG1hX29mZnNldChkZXYsIGFkZHIpOwogCiAJZGV2X2RiZyhkZXYsICJpb21tdTogZml4ZWQgYWRkciA9ICVsbHhcbiIsIGFkZHIpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2ZpbGUuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9maWxlLmMKaW5kZXggOGYwNzliOC4uODg0ZThiYyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2ZpbGUuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvZmlsZS5jCkBAIC0xNDcsNyArMTQ3LDcgQEAKIAlfX3NpbXBsZV9hdHRyX2NoZWNrX2Zvcm1hdChfX2ZtdCwgMHVsbCk7CQkJXAogCXJldHVybiBzcHVmc19hdHRyX29wZW4oaW5vZGUsIGZpbGUsIF9fZ2V0LCBfX3NldCwgX19mbXQpOwlcCiB9CQkJCQkJCQkJXAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgX19mb3BzID0gewkJCQlcCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBfX2ZvcHMgPSB7CQkJCVwKIAkub3duZXIJID0gVEhJU19NT0RVTEUsCQkJCQkJXAogCS5vcGVuCSA9IF9fZm9wcyAjIyBfb3BlbiwJCQkJCVwKIAkucmVsZWFzZSA9IHNwdWZzX2F0dHJfcmVsZWFzZSwJCQkJCVwKQEAgLTMwOSw3ICszMDksNyBAQAogCXJldHVybiBsZW47CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3Qgc3B1ZnNfbWVtX21tYXBfdm1vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHNwdWZzX21lbV9tbWFwX3Ztb3BzID0gewogCS5mYXVsdCA9IHNwdWZzX21lbV9tbWFwX2ZhdWx0LAogCS5hY2Nlc3MgPSBzcHVmc19tZW1fbW1hcF9hY2Nlc3MsCiB9OwpAQCAtNDM2LDcgKzQzNiw3IEBACiAJcmV0dXJuIHNwdWZzX3BzX2ZhdWx0KHZtYSwgdm1mLCAweDQwMDAsIFNQVUZTX0NOVExfTUFQX1NJWkUpOwogfQogCi1zdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHNwdWZzX2NudGxfbW1hcF92bW9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3Qgc3B1ZnNfY250bF9tbWFwX3Ztb3BzID0gewogCS5mYXVsdCA9IHNwdWZzX2NudGxfbW1hcF9mYXVsdCwKIH07CiAKQEAgLTExNDMsNyArMTE0Myw3IEBACiAjZW5kaWYKIH0KIAotc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBzcHVmc19zaWduYWwxX21tYXBfdm1vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHNwdWZzX3NpZ25hbDFfbW1hcF92bW9wcyA9IHsKIAkuZmF1bHQgPSBzcHVmc19zaWduYWwxX21tYXBfZmF1bHQsCiB9OwogCkBAIC0xMjc5LDcgKzEyNzksNyBAQAogI2VuZGlmCiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3Qgc3B1ZnNfc2lnbmFsMl9tbWFwX3Ztb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBzcHVmc19zaWduYWwyX21tYXBfdm1vcHMgPSB7CiAJLmZhdWx0ID0gc3B1ZnNfc2lnbmFsMl9tbWFwX2ZhdWx0LAogfTsKIApAQCAtMTM5Nyw3ICsxMzk3LDcgQEAKIAlyZXR1cm4gc3B1ZnNfcHNfZmF1bHQodm1hLCB2bWYsIDB4MDAwMCwgU1BVRlNfTVNTX01BUF9TSVpFKTsKIH0KIAotc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBzcHVmc19tc3NfbW1hcF92bW9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3Qgc3B1ZnNfbXNzX21tYXBfdm1vcHMgPSB7CiAJLmZhdWx0ID0gc3B1ZnNfbXNzX21tYXBfZmF1bHQsCiB9OwogCkBAIC0xNDU4LDcgKzE0NTgsNyBAQAogCXJldHVybiBzcHVmc19wc19mYXVsdCh2bWEsIHZtZiwgMHgwMDAwLCBTUFVGU19QU19NQVBfU0laRSk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3Qgc3B1ZnNfcHNtYXBfbW1hcF92bW9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3Qgc3B1ZnNfcHNtYXBfbW1hcF92bW9wcyA9IHsKIAkuZmF1bHQgPSBzcHVmc19wc21hcF9tbWFwX2ZhdWx0LAogfTsKIApAQCAtMTUxNyw3ICsxNTE3LDcgQEAKIAlyZXR1cm4gc3B1ZnNfcHNfZmF1bHQodm1hLCB2bWYsIDB4MzAwMCwgU1BVRlNfTUZDX01BUF9TSVpFKTsKIH0KIAotc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBzcHVmc19tZmNfbW1hcF92bW9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3Qgc3B1ZnNfbWZjX21tYXBfdm1vcHMgPSB7CiAJLmZhdWx0ID0gc3B1ZnNfbWZjX21tYXBfZmF1bHQsCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvTWFrZWZpbGUgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvTWFrZWZpbGUKaW5kZXggY2M3MTYxZi4uY2UwMTQ5MiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL01ha2VmaWxlCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9NYWtlZmlsZQpAQCAtMSwxOCArMSw5IEBACiBFWFRSQV9DRkxBR1MJKz0gLW1uby1taW5pbWFsLXRvYwogCi1leHRyYS15ICs9IGR0Lm8KLQogb2JqLXkgKz0gZXhjZXB0aW9uLm8KLW9iai15ICs9IGh2bG9nLm8gaHZscGNvbmZpZy5vIGxwYXJkYXRhLm8gc2V0dXAubyBkdF9tb2QubyBtZi5vIGxwZXZlbnRzLm8gXAorb2JqLXkgKz0gaHZsb2cubyBodmxwY29uZmlnLm8gbHBhcmRhdGEubyBzZXR1cC5vIGR0Lm8gbWYubyBscGV2ZW50cy5vIFwKIAlodmNhbGwubyBwcm9jLm8gaHRhYi5vIGlvbW11Lm8gbWlzYy5vIGlycS5vCiBvYmotJChDT05GSUdfUENJKSArPSBwY2kubwogb2JqLSQoQ09ORklHX1NNUCkgKz0gc21wLm8KIG9iai0kKENPTkZJR19WSU9QQVRIKSArPSB2aW9wYXRoLm8gdmlvLm8KIG9iai0kKENPTkZJR19NT0RVTEVTKSArPSBrc3ltcy5vCi0KLXF1aWV0X2NtZF9kdF9zdHJpbmdzID0gRFRfU1RSICAkQAotICAgICAgY21kX2R0X3N0cmluZ3MgPSAkKE9CSkNPUFkpIC0tcmVuYW1lLXNlY3Rpb24gLnJvZGF0YS5zdHIxLjg9LmR0X3N0cmluZ3MgXAotCQkJCSQ8ICRACi0KLSQob2JqKS9kdF9tb2QubzoJJChvYmopL2R0Lm8KLQkkKGNhbGwgaWZfY2hhbmdlZCxkdF9zdHJpbmdzKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL2R0LmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvZHQuYwppbmRleCBjNWE4N2E3Li43ZjQ1YTUxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvZHQuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvZHQuYwpAQCAtNTEsMTEgKzUxLDE2IEBACiAKIC8qCiAgKiBUaGVzZSBhcmUgY3JlYXRlZCBieSB0aGUgbGlua2VyIHNjcmlwdCBhdCB0aGUgc3RhcnQgYW5kIGVuZAotICogb2YgdGhlIHNlY3Rpb24gY29udGFpbmluZyBhbGwgdGhlIHN0cmluZ3MgZnJvbSB0aGlzIGZpbGUuCisgKiBvZiB0aGUgc2VjdGlvbiBjb250YWluaW5nIGFsbCB0aGUgc3RyaW5ncyBtYXJrZWQgd2l0aCB0aGUgRFMgbWFjcm8uCiAgKi8KIGV4dGVybiBjaGFyIF9fZHRfc3RyaW5nc19zdGFydFtdOwogZXh0ZXJuIGNoYXIgX19kdF9zdHJpbmdzX2VuZFtdOwogCisjZGVmaW5lIERTKHMpCSh7CVwKKwlzdGF0aWMgY29uc3QgY2hhciBfX3NbXSBfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCIuZHRfc3RyaW5ncyIpKSkgPSBzOyBcCisJX19zOwkJXAorfSkKKwogc3RydWN0IGlzZXJpZXNfZmxhdF9kdCB7CiAJc3RydWN0IGJvb3RfcGFyYW1faGVhZGVyIGhlYWRlcjsKIAl1NjQgcmVzZXJ2ZV9tYXBbMl07CkBAIC02NCw5ICs2OSw4IEBACiBzdGF0aWMgdm9pZCAqIF9faW5pdGRhdGEgZHRfZGF0YTsKIAogLyoKLSAqIFB1dHRpbmcgdGhlc2Ugc3RyaW5ncyBoZXJlIGtlZXBzIHRoZW0gb3V0IG9mIHRoZSBzZWN0aW9uCi0gKiB0aGF0IHdlIHJlbmFtZSB0byAuZHRfc3RyaW5ncyB1c2luZyBvYmpjb3B5IGFuZCBjYXB0dXJlCi0gKiBmb3IgdGhlIHN0cmluZ3MgYmxvYiBvZiB0aGUgZmxhdHRlbmVkIGRldmljZSB0cmVlLgorICogUHV0dGluZyB0aGVzZSBzdHJpbmdzIGhlcmUga2VlcHMgdGhlbSBvdXQgb2YgdGhlIC5kdF9zdHJpbmdzIHNlY3Rpb24KKyAqIHRoYXQgd2UgY2FwdHVyZSBmb3IgdGhlIHN0cmluZ3MgYmxvYiBvZiB0aGUgZmxhdHRlbmVkIGRldmljZSB0cmVlLgogICovCiBzdGF0aWMgY2hhciBfX2luaXRkYXRhIGRldmljZV90eXBlX2NwdVtdID0gImNwdSI7CiBzdGF0aWMgY2hhciBfX2luaXRkYXRhIGRldmljZV90eXBlX21lbW9yeVtdID0gIm1lbW9yeSI7CkBAIC0xNzMsNyArMTc3LDcgQEAKIAogI2RlZmluZSBkdF9lbmRfbm9kZShkdCkgZHRfcHVzaF91MzIoZHQsIE9GX0RUX0VORF9OT0RFKQogCi1zdGF0aWMgdm9pZCBfX2luaXQgZHRfcHJvcChzdHJ1Y3QgaXNlcmllc19mbGF0X2R0ICpkdCwgY29uc3QgY2hhciAqbmFtZSwKK3N0YXRpYyB2b2lkIF9faW5pdCBfX2R0X3Byb3Aoc3RydWN0IGlzZXJpZXNfZmxhdF9kdCAqZHQsIGNvbnN0IGNoYXIgKm5hbWUsCiAJCWNvbnN0IHZvaWQgKmRhdGEsIGludCBsZW4pCiB7CiAJdW5zaWduZWQgbG9uZyBvZmZzZXQ7CkBAIC0xOTEsNDQgKzE5NSwzMiBAQAogCS8qIFRoZSBhY3R1YWwgZGF0YS4gKi8KIAlkdF9wdXNoX2J5dGVzKGR0LCBkYXRhLCBsZW4pOwogfQorI2RlZmluZSBkdF9wcm9wKGR0LCBuYW1lLCBkYXRhLCBsZW4pCV9fZHRfcHJvcCgoZHQpLCBEUyhuYW1lKSwgKGRhdGEpLCAobGVuKSkKIAotc3RhdGljIHZvaWQgX19pbml0IGR0X3Byb3Bfc3RyKHN0cnVjdCBpc2VyaWVzX2ZsYXRfZHQgKmR0LCBjb25zdCBjaGFyICpuYW1lLAotCQljb25zdCBjaGFyICpkYXRhKQotewotCWR0X3Byb3AoZHQsIG5hbWUsIGRhdGEsIHN0cmxlbihkYXRhKSArIDEpOyAvKiArIDEgZm9yIE5VTEwgKi8KLX0KKyNkZWZpbmUgZHRfcHJvcF9zdHIoZHQsIG5hbWUsIGRhdGEpCVwKKwlkdF9wcm9wKChkdCksIG5hbWUsIChkYXRhKSwgc3RybGVuKChkYXRhKSkgKyAxKTsgLyogKyAxIGZvciBOVUxMICovCiAKLXN0YXRpYyB2b2lkIF9faW5pdCBkdF9wcm9wX3UzMihzdHJ1Y3QgaXNlcmllc19mbGF0X2R0ICpkdCwgY29uc3QgY2hhciAqbmFtZSwKK3N0YXRpYyB2b2lkIF9faW5pdCBfX2R0X3Byb3BfdTMyKHN0cnVjdCBpc2VyaWVzX2ZsYXRfZHQgKmR0LCBjb25zdCBjaGFyICpuYW1lLAogCQl1MzIgZGF0YSkKIHsKLQlkdF9wcm9wKGR0LCBuYW1lLCAmZGF0YSwgc2l6ZW9mKHUzMikpOworCV9fZHRfcHJvcChkdCwgbmFtZSwgJmRhdGEsIHNpemVvZih1MzIpKTsKIH0KKyNkZWZpbmUgZHRfcHJvcF91MzIoZHQsIG5hbWUsIGRhdGEpCV9fZHRfcHJvcF91MzIoKGR0KSwgRFMobmFtZSksIChkYXRhKSkKIAotc3RhdGljIHZvaWQgX19pbml0IF9fbWF5YmVfdW51c2VkIGR0X3Byb3BfdTY0KHN0cnVjdCBpc2VyaWVzX2ZsYXRfZHQgKmR0LAotCQkJCQkgICAgICBjb25zdCBjaGFyICpuYW1lLAotCQl1NjQgZGF0YSkKK3N0YXRpYyB2b2lkIF9faW5pdCBfX21heWJlX3VudXNlZCBfX2R0X3Byb3BfdTY0KHN0cnVjdCBpc2VyaWVzX2ZsYXRfZHQgKmR0LAorCQljb25zdCBjaGFyICpuYW1lLCB1NjQgZGF0YSkKIHsKLQlkdF9wcm9wKGR0LCBuYW1lLCAmZGF0YSwgc2l6ZW9mKHU2NCkpOworCV9fZHRfcHJvcChkdCwgbmFtZSwgJmRhdGEsIHNpemVvZih1NjQpKTsKIH0KKyNkZWZpbmUgZHRfcHJvcF91NjQoZHQsIG5hbWUsIGRhdGEpCV9fZHRfcHJvcF91NjQoKGR0KSwgRFMobmFtZSksIChkYXRhKSkKIAotc3RhdGljIHZvaWQgX19pbml0IGR0X3Byb3BfdTY0X2xpc3Qoc3RydWN0IGlzZXJpZXNfZmxhdF9kdCAqZHQsCi0JCWNvbnN0IGNoYXIgKm5hbWUsIHU2NCAqZGF0YSwgaW50IG4pCi17Ci0JZHRfcHJvcChkdCwgbmFtZSwgZGF0YSwgc2l6ZW9mKHU2NCkgKiBuKTsKLX0KKyNkZWZpbmUgZHRfcHJvcF91NjRfbGlzdChkdCwgbmFtZSwgZGF0YSwgbikJXAorCWR0X3Byb3AoKGR0KSwgbmFtZSwgKGRhdGEpLCBzaXplb2YodTY0KSAqIChuKSkKIAotc3RhdGljIHZvaWQgX19pbml0IGR0X3Byb3BfdTMyX2xpc3Qoc3RydWN0IGlzZXJpZXNfZmxhdF9kdCAqZHQsCi0JCWNvbnN0IGNoYXIgKm5hbWUsIHUzMiAqZGF0YSwgaW50IG4pCi17Ci0JZHRfcHJvcChkdCwgbmFtZSwgZGF0YSwgc2l6ZW9mKHUzMikgKiBuKTsKLX0KKyNkZWZpbmUgZHRfcHJvcF91MzJfbGlzdChkdCwgbmFtZSwgZGF0YSwgbikJXAorCWR0X3Byb3AoKGR0KSwgbmFtZSwgKGRhdGEpLCBzaXplb2YodTMyKSAqIChuKSkKIAotI2lmZGVmIG5vdHlldAotc3RhdGljIHZvaWQgX19pbml0IGR0X3Byb3BfZW1wdHkoc3RydWN0IGlzZXJpZXNfZmxhdF9kdCAqZHQsIGNvbnN0IGNoYXIgKm5hbWUpCi17Ci0JZHRfcHJvcChkdCwgbmFtZSwgTlVMTCwgMCk7Ci19Ci0jZW5kaWYKKyNkZWZpbmUgZHRfcHJvcF9lbXB0eShkdCwgbmFtZSkJCWR0X3Byb3AoKGR0KSwgbmFtZSwgTlVMTCwgMCkKIAogc3RhdGljIHZvaWQgX19pbml0IGR0X2NwdXMoc3RydWN0IGlzZXJpZXNfZmxhdF9kdCAqZHQpCiB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvaW9tbXUuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9pb21tdS5jCmluZGV4IDZjMWUxMDEuLjlkNTNjYjQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9pb21tdS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9pb21tdS5jCkBAIC0xOTMsNyArMTkzLDcgQEAKIAkJcGRuLT5pb21tdV90YWJsZSA9IGlvbW11X2luaXRfdGFibGUodGJsLCAtMSk7CiAJZWxzZQogCQlrZnJlZSh0YmwpOwotCXBkZXYtPmRldi5hcmNoZGF0YS5kbWFfZGF0YSA9IHBkbi0+aW9tbXVfdGFibGU7CisJc2V0X2lvbW11X3RhYmxlX2Jhc2UoJnBkZXYtPmRldiwgcGRuLT5pb21tdV90YWJsZSk7CiB9CiAjZWxzZQogI2RlZmluZSBwY2lfZG1hX2Rldl9zZXR1cF9pc2VyaWVzCU5VTEwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcGFzZW1pL2lvbW11LmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bhc2VtaS9pb21tdS5jCmluZGV4IGEwZmYwM2EuLjdiMWQ2MDggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcGFzZW1pL2lvbW11LmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wYXNlbWkvaW9tbXUuYwpAQCAtMTg5LDcgKzE4OSw3IEBACiAJfQogI2VuZGlmCiAKLQlkZXYtPmRldi5hcmNoZGF0YS5kbWFfZGF0YSA9ICZpb21tdV90YWJsZV9pb2JtYXA7CisJc2V0X2lvbW11X3RhYmxlX2Jhc2UoJmRldi0+ZGV2LCAmaW9tbXVfdGFibGVfaW9ibWFwKTsKIH0KIAogc3RhdGljIHZvaWQgcGNpX2RtYV9idXNfc2V0dXBfbnVsbChzdHJ1Y3QgcGNpX2J1cyAqYikgeyB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL2xvd19pMmMuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvbG93X2kyYy5jCmluZGV4IDIxMjI2YjcuLjQxNGNhOTggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvbG93X2kyYy5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvbG93X2kyYy5jCkBAIC01NDAsOCArNTQwLDExIEBACiAJLyogTWFrZSBzdXJlIElSUSBpcyBkaXNhYmxlZCAqLwogCWt3X3dyaXRlX3JlZyhyZWdfaWVyLCAwKTsKIAotCS8qIFJlcXVlc3QgY2hpcCBpbnRlcnJ1cHQgKi8KLQlpZiAocmVxdWVzdF9pcnEoaG9zdC0+aXJxLCBrd19pMmNfaXJxLCAwLCAia2V5d2VzdCBpMmMiLCBob3N0KSkKKwkvKiBSZXF1ZXN0IGNoaXAgaW50ZXJydXB0LiBXZSBzZXQgSVJRRl9USU1FUiBiZWNhdXNlIHdlIGRvbid0CisJICogd2FudCB0aGF0IGludGVycnVwdCBkaXNhYmxlZCBiZXR3ZWVuIHRoZSAyIHBhc3NlcyBvZiBkcml2ZXIKKwkgKiBzdXNwZW5kIG9yIHdlJ2xsIGhhdmUgaXNzdWVzIHJ1bm5pbmcgdGhlIHBmdW5jcworCSAqLworCWlmIChyZXF1ZXN0X2lycShob3N0LT5pcnEsIGt3X2kyY19pcnEsIElSUUZfVElNRVIsICJrZXl3ZXN0IGkyYyIsIGhvc3QpKQogCQlob3N0LT5pcnEgPSBOT19JUlE7CiAKIAlwcmludGsoS0VSTl9JTkZPICJLZXlXZXN0IGkyYyBAMHglMDh4IGlycSAlZCAlc1xuIiwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9kdGwuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9kdGwuYwppbmRleCBhYjY5OTI1Li45MzdhNTQ0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZHRsLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2R0bC5jCkBAIC0yMDksNyArMjA5LDcgQEAKIAlyZXR1cm4gbl9yZWFkICogc2l6ZW9mKHN0cnVjdCBkdGxfZW50cnkpOwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkdGxfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGR0bF9mb3BzID0gewogCS5vcGVuCQk9IGR0bF9maWxlX29wZW4sCiAJLnJlbGVhc2UJPSBkdGxfZmlsZV9yZWxlYXNlLAogCS5yZWFkCQk9IGR0bF9maWxlX3JlYWQsCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZmlybXdhcmUuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9maXJtd2FyZS5jCmluZGV4IDVhNzA3ZGEuLjBhMTRkOGMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9maXJtd2FyZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9maXJtd2FyZS5jCkBAIC01MSwxMSArNTEsMTAgQEAKIAl7RldfRkVBVFVSRV9WSU8sCQkiaGNhbGwtdmlvIn0sCiAJe0ZXX0ZFQVRVUkVfUkRNQSwJCSJoY2FsbC1yZG1hIn0sCiAJe0ZXX0ZFQVRVUkVfTExBTiwJCSJoY2FsbC1sTEFOIn0sCi0Je0ZXX0ZFQVRVUkVfQlVMSywJCSJoY2FsbC1idWxrIn0sCisJe0ZXX0ZFQVRVUkVfQlVMS19SRU1PVkUsCSJoY2FsbC1idWxrIn0sCiAJe0ZXX0ZFQVRVUkVfWERBQlIsCQkiaGNhbGwteGRhYnIifSwKIAl7RldfRkVBVFVSRV9NVUxUSVRDRSwJCSJoY2FsbC1tdWx0aS10Y2UifSwKIAl7RldfRkVBVFVSRV9TUExQQVIsCQkiaGNhbGwtc3BscGFyIn0sCi0Je0ZXX0ZFQVRVUkVfQlVMS19SRU1PVkUsCSJoY2FsbC1idWxrIn0sCiB9OwogCiAvKiBCdWlsZCB1cCB0aGUgZmlybXdhcmUgZmVhdHVyZXMgYml0bWFzayB1c2luZyB0aGUgY29udGVudHMgb2YKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9pb21tdS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2lvbW11LmMKaW5kZXggNjYxYzhlMC4uMWEwMDAwYSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2lvbW11LmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2lvbW11LmMKQEAgLTQ4Miw3ICs0ODIsNyBAQAogCQkJCSAgIHBoYi0+bm9kZSk7CiAJCWlvbW11X3RhYmxlX3NldHBhcm1zKHBoYiwgZG4sIHRibCk7CiAJCVBDSV9ETihkbiktPmlvbW11X3RhYmxlID0gaW9tbXVfaW5pdF90YWJsZSh0YmwsIHBoYi0+bm9kZSk7Ci0JCWRldi0+ZGV2LmFyY2hkYXRhLmRtYV9kYXRhID0gUENJX0ROKGRuKS0+aW9tbXVfdGFibGU7CisJCXNldF9pb21tdV90YWJsZV9iYXNlKCZkZXYtPmRldiwgUENJX0ROKGRuKS0+aW9tbXVfdGFibGUpOwogCQlyZXR1cm47CiAJfQogCkBAIC00OTQsNyArNDk0LDcgQEAKIAkJZG4gPSBkbi0+cGFyZW50OwogCiAJaWYgKGRuICYmIFBDSV9ETihkbikpCi0JCWRldi0+ZGV2LmFyY2hkYXRhLmRtYV9kYXRhID0gUENJX0ROKGRuKS0+aW9tbXVfdGFibGU7CisJCXNldF9pb21tdV90YWJsZV9iYXNlKCZkZXYtPmRldiwgUENJX0ROKGRuKS0+aW9tbXVfdGFibGUpOwogCWVsc2UKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiaW9tbXU6IERldmljZSAlcyBoYXMgbm8gaW9tbXUgdGFibGVcbiIsCiAJCSAgICAgICBwY2lfbmFtZShkZXYpKTsKQEAgLTUzOCw3ICs1MzgsNyBAQAogCSAqLwogCWlmIChkbWFfd2luZG93ID09IE5VTEwgfHwgcGRuLT5wYXJlbnQgPT0gTlVMTCkgewogCQlwcl9kZWJ1ZygiICBubyBkbWEgd2luZG93IGZvciBkZXZpY2UsIGxpbmtpbmcgdG8gcGFyZW50XG4iKTsKLQkJZGV2LT5kZXYuYXJjaGRhdGEuZG1hX2RhdGEgPSBQQ0lfRE4ocGRuKS0+aW9tbXVfdGFibGU7CisJCXNldF9pb21tdV90YWJsZV9iYXNlKCZkZXYtPmRldiwgUENJX0ROKHBkbiktPmlvbW11X3RhYmxlKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtNTU0LDcgKzU1NCw3IEBACiAJCXByX2RlYnVnKCIgIGZvdW5kIERNQSB3aW5kb3csIHRhYmxlOiAlcFxuIiwgcGNpLT5pb21tdV90YWJsZSk7CiAJfQogCi0JZGV2LT5kZXYuYXJjaGRhdGEuZG1hX2RhdGEgPSBwY2ktPmlvbW11X3RhYmxlOworCXNldF9pb21tdV90YWJsZV9iYXNlKCZkZXYtPmRldiwgcGNpLT5pb21tdV90YWJsZSk7CiB9CiAjZWxzZSAgLyogQ09ORklHX1BDSSAqLwogI2RlZmluZSBwY2lfZG1hX2J1c19zZXR1cF9wU2VyaWVzCU5VTEwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9yZWxvY3NfY2hlY2sucGwgYi9hcmNoL3Bvd2VycGMvcmVsb2NzX2NoZWNrLnBsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmQyNTcxMDkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvcmVsb2NzX2NoZWNrLnBsCkBAIC0wLDAgKzEsNTYgQEAKKyMhL3Vzci9iaW4vcGVybAorCisjIENvcHlyaWdodCDCqSAyMDA5IElCTSBDb3Jwb3JhdGlvbgorCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyMgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisjIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyMgVGhpcyBzY3JpcHQgY2hlY2tzIHRoZSByZWxjb2F0aW9ucyBvZiBhIHZtbGludXggZm9yICJzdXNwaWNpb3VzIgorIyByZWxvY2F0aW9ucy4KKwordXNlIHN0cmljdDsKK3VzZSB3YXJuaW5nczsKKworaWYgKCQjQVJHViAhPSAxKSB7CisJZGllICIkMCBbcGF0aCB0byBvYmpkdW1wXSBbcGF0aCB0byB2bWxpbnV4XVxuIjsKK30KKworIyBIYXZlIEtidWlsZCBzdXBwbHkgdGhlIHBhdGggdG8gb2JqZHVtcCBzbyB3ZSBoYW5kbGUgY3Jvc3MgY29tcGlsYXRpb24uCitteSAkb2JqZHVtcCA9IHNoaWZ0OworbXkgJHZtbGludXggPSBzaGlmdDsKK215ICRiYWRfcmVsb2NzX2NvdW50ID0gMDsKK215ICRiYWRfcmVsb2NzID0gIiI7CitteSAkb2xkX2JpbnV0aWxzID0gMDsKKworb3BlbihGRCwgIiRvYmpkdW1wIC1SICR2bWxpbnV4fCIpIG9yIGRpZTsKK3doaWxlICg8RkQ+KSB7CisJc3R1ZHkgJF87CisKKwkjIE9ubHkgbG9vayBhdCByZWxjb2F0aW9uIGxpbmVzLgorCW5leHQgaWYgKCEvXHMrUl8vKTsKKworCSMgVGhlc2UgcmVsb2NhdGlvbnMgYXJlIG9rYXkKKwluZXh0IGlmICgvUl9QUEM2NF9SRUxBVElWRS8gb3IgL1JfUFBDNjRfTk9ORS8gb3IKKwkgICAgICAgICAvUl9QUEM2NF9BRERSNjRccyttYWNoXy8pOworCisJIyBJZiB3ZSBzZWUgdGhpcyB0eXBlIG9mIHJlbGNvYXRpb24gaXQncyBhbiBpZGljYXRpb24gdGhhdAorCSMgd2UgL21heS8gYmUgdXNpbmcgYW4gb2xkIHZlcnNpb24gb2YgYmludXRpbHMuCisJaWYgKC9SX1BQQzY0X1VBRERSNjQvKSB7CisJCSRvbGRfYmludXRpbHMrKzsKKwl9CisKKwkkYmFkX3JlbG9jc19jb3VudCsrOworCSRiYWRfcmVsb2NzIC49ICRfOworfQorCitpZiAoJGJhZF9yZWxvY3NfY291bnQpIHsKKwlwcmludCAiV0FSTklORzogJGJhZF9yZWxvY3NfY291bnQgYmFkIHJlbG9jYXRpb25zXG4iOworCXByaW50ICRiYWRfcmVsb2NzOworfQorCitpZiAoJG9sZF9iaW51dGlscykgeworCXByaW50ICJXQVJOSU5HOiBZb3UgbmVlZCBhdCBiaW51dGlscyA+PSAyLjE5IHRvIGJ1aWxkIGEgIi4KKwkgICAgICAiQ09ORklHX1JFTENPQVRBQkxFIGtlcm5lbFxuIjsKK30KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvZGFydF9pb21tdS5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9kYXJ0X2lvbW11LmMKaW5kZXggODk2MzllYy4uYWUzYzRkYiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9kYXJ0X2lvbW11LmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9kYXJ0X2lvbW11LmMKQEAgLTI5Nyw3ICsyOTcsNyBAQAogCS8qIFdlIG9ubHkgaGF2ZSBvbmUgaW9tbXUgdGFibGUgb24gdGhlIG1hYyBmb3Igbm93LCB3aGljaCBtYWtlcwogCSAqIHRoaW5ncyBzaW1wbGUuIFNldHVwIGFsbCBQQ0kgZGV2aWNlcyB0byBwb2ludCB0byB0aGlzIHRhYmxlCiAJICovCi0JZGV2LT5kZXYuYXJjaGRhdGEuZG1hX2RhdGEgPSAmaW9tbXVfdGFibGVfZGFydDsKKwlzZXRfaW9tbXVfdGFibGVfYmFzZSgmZGV2LT5kZXYsICZpb21tdV90YWJsZV9kYXJ0KTsKIH0KIAogc3RhdGljIHZvaWQgcGNpX2RtYV9idXNfc2V0dXBfZGFydChzdHJ1Y3QgcGNpX2J1cyAqYnVzKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3htb24veG1vbi5jIGIvYXJjaC9wb3dlcnBjL3htb24veG1vbi5jCmluZGV4IDBlMDlhNDUuLmJkYmU5NmMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy94bW9uL3htb24uYworKysgYi9hcmNoL3Bvd2VycGMveG1vbi94bW9uLmMKQEAgLTMzNSw2ICszMzUsMTYgQEAKIH0KICNlbmRpZgogCitzdGF0aWMgaW5saW5lIGludCB1bnJlY292ZXJhYmxlX2V4Y3Aoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisjaWZkZWYgQ09ORklHXzR4eAorCS8qIFdlIGhhdmUgbm8gTVNSX1JJIGJpdCBvbiA0eHgsIHNvIHdlIHNpbXBseSByZXR1cm4gZmFsc2UgKi8KKwlyZXR1cm4gMDsKKyNlbHNlCisJcmV0dXJuICgocmVncy0+bXNyICYgTVNSX1JJKSA9PSAwKTsKKyNlbmRpZgorfQorCiBzdGF0aWMgaW50IHhtb25fY29yZShzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IGZyb21pcGkpCiB7CiAJaW50IGNtZCA9IDA7CkBAIC0zODgsNyArMzk4LDcgQEAKIAlicCA9IE5VTEw7CiAJaWYgKChyZWdzLT5tc3IgJiAoTVNSX0lSfE1TUl9QUnxNU1JfU0YpKSA9PSAoTVNSX0lSfE1TUl9TRikpCiAJCWJwID0gYXRfYnJlYWtwb2ludChyZWdzLT5uaXApOwotCWlmIChicCB8fCAocmVncy0+bXNyICYgTVNSX1JJKSA9PSAwKQorCWlmIChicCB8fCB1bnJlY292ZXJhYmxlX2V4Y3AocmVncykpCiAJCWZyb21pcGkgPSAwOwogCiAJaWYgKCFmcm9taXBpKSB7CkBAIC0zOTksNyArNDA5LDcgQEAKIAkJCSAgICAgICBjcHUsIEJQX05VTShicCkpOwogCQkJeG1vbl9wcmludF9zeW1ib2wocmVncy0+bmlwLCAiICIsICIpXG4iKTsKIAkJfQotCQlpZiAoKHJlZ3MtPm1zciAmIE1TUl9SSSkgPT0gMCkKKwkJaWYgKHVucmVjb3ZlcmFibGVfZXhjcChyZWdzKSkKIAkJCXByaW50ZigiV0FSTklORzogZXhjZXB0aW9uIGlzIG5vdCByZWNvdmVyYWJsZSwgIgogCQkJICAgICAgICJjYW4ndCBjb250aW51ZVxuIik7CiAJCXJlbGVhc2Vfb3V0cHV0X2xvY2soKTsKQEAgLTQ5MCw3ICs1MDAsNyBAQAogCQkJcHJpbnRmKCJTdG9wcGVkIGF0IGJyZWFrcG9pbnQgJXggKCIsIEJQX05VTShicCkpOwogCQkJeG1vbl9wcmludF9zeW1ib2wocmVncy0+bmlwLCAiICIsICIpXG4iKTsKIAkJfQotCQlpZiAoKHJlZ3MtPm1zciAmIE1TUl9SSSkgPT0gMCkKKwkJaWYgKHVucmVjb3ZlcmFibGVfZXhjcChyZWdzKSkKIAkJCXByaW50ZigiV0FSTklORzogZXhjZXB0aW9uIGlzIG5vdCByZWNvdmVyYWJsZSwgIgogCQkJICAgICAgICJjYW4ndCBjb250aW51ZVxuIik7CiAJCXJlbW92ZV9icHRzKCk7CkBAIC01MDcsNiArNTE3LDE1IEBACiAJaW5feG1vbiA9IDA7CiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19CT09LRQorCWlmIChyZWdzLT5tc3IgJiBNU1JfREUpIHsKKwkJYnAgPSBhdF9icmVha3BvaW50KHJlZ3MtPm5pcCk7CisJCWlmIChicCAhPSBOVUxMKSB7CisJCQlyZWdzLT5uaXAgPSAodW5zaWduZWQgbG9uZykgJmJwLT5pbnN0clswXTsKKwkJCWF0b21pY19pbmMoJmJwLT5yZWZfY291bnQpOworCQl9CisJfQorI2Vsc2UKIAlpZiAoKHJlZ3MtPm1zciAmIChNU1JfSVJ8TVNSX1BSfE1TUl9TRikpID09IChNU1JfSVJ8TVNSX1NGKSkgewogCQlicCA9IGF0X2JyZWFrcG9pbnQocmVncy0+bmlwKTsKIAkJaWYgKGJwICE9IE5VTEwpIHsKQEAgLTUyMCw3ICs1MzksNyBAQAogCQkJfQogCQl9CiAJfQotCisjZW5kaWYKIAlpbnNlcnRfY3B1X2JwdHMoKTsKIAogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKQEAgLTg4NCw2ICs5MDMsMTQgQEAKIAl9CiB9CiAKKyNpZmRlZiBDT05GSUdfQk9PS0UKK3N0YXRpYyBpbnQgZG9fc3RlcChzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlyZWdzLT5tc3IgfD0gTVNSX0RFOworCW10c3ByKFNQUk5fREJDUjAsIG1mc3ByKFNQUk5fREJDUjApIHwgREJDUjBfSUMgfCBEQkNSMF9JRE0pOworCXJldHVybiAxOworfQorI2Vsc2UKIC8qCiAgKiBTdGVwIGEgc2luZ2xlIGluc3RydWN0aW9uLgogICogU29tZSBpbnN0cnVjdGlvbnMgd2UgZW11bGF0ZSwgb3RoZXJzIHdlIGV4ZWN1dGUgd2l0aCBNU1JfU0Ugc2V0LgpAQCAtOTE0LDYgKzk0MSw3IEBACiAJcmVncy0+bXNyIHw9IE1TUl9TRTsKIAlyZXR1cm4gMTsKIH0KKyNlbmRpZgogCiBzdGF0aWMgdm9pZCBib290Y21kcyh2b2lkKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2h5cGZzL2h5cGZzX2RpYWcuYyBiL2FyY2gvczM5MC9oeXBmcy9oeXBmc19kaWFnLmMKaW5kZXggNzA0ZGQzOS4uNzdkZjcyNiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2h5cGZzL2h5cGZzX2RpYWcuYworKysgYi9hcmNoL3MzOTAvaHlwZnMvaHlwZnNfZGlhZy5jCkBAIC00MzgsNyArNDM4LDcgQEAKIAkJfQogCQlpZiAoZGlhZzIwNCgodW5zaWduZWQgbG9uZylTVUJDX1NUSUI2IHwKIAkJCSAgICAodW5zaWduZWQgbG9uZylJTkZPX0VYVCwgcGFnZXMsIGJ1ZikgPj0gMCkgewotCQkJZGlhZzIwNF9zdG9yZV9zYyA9IFNVQkNfU1RJQjc7CisJCQlkaWFnMjA0X3N0b3JlX3NjID0gU1VCQ19TVElCNjsKIAkJCWRpYWcyMDRfaW5mb190eXBlID0gSU5GT19FWFQ7CiAJCQlnb3RvIG91dDsKIAkJfQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2NwdXRpbWUuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9jcHV0aW1lLmgKaW5kZXggMjRiMTI0NC4uZjIzOTYxYSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2NwdXRpbWUuaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vY3B1dGltZS5oCkBAIC03OCw3ICs3OCw3IEBACiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludAogY3B1dGltZV90b19tc2Vjcyhjb25zdCBjcHV0aW1lX3QgY3B1dGltZSkKIHsKLQlyZXR1cm4gX19kaXYoY3B1dGltZSwgNDA5NjAwMCk7CisJcmV0dXJuIGNwdXRpbWVfZGl2KGNwdXRpbWUsIDQwOTYwMDApOwogfQogCiBzdGF0aWMgaW5saW5lIGNwdXRpbWVfdApAQCAtMTYwLDcgKzE2MCw3IEBACiBzdGF0aWMgaW5saW5lIGNsb2NrX3QKIGNwdXRpbWVfdG9fY2xvY2tfdChjcHV0aW1lX3QgY3B1dGltZSkKIHsKLQlyZXR1cm4gX19kaXYoY3B1dGltZSwgNDA5NjAwMDAwMFVMTCAvIFVTRVJfSFopOworCXJldHVybiBjcHV0aW1lX2RpdihjcHV0aW1lLCA0MDk2MDAwMDAwVUxMIC8gVVNFUl9IWik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgY3B1dGltZV90CkBAIC0xNzUsNyArMTc1LDcgQEAKIHN0YXRpYyBpbmxpbmUgY2xvY2tfdAogY3B1dGltZTY0X3RvX2Nsb2NrX3QoY3B1dGltZTY0X3QgY3B1dGltZSkKIHsKLSAgICAgICByZXR1cm4gX19kaXYoY3B1dGltZSwgNDA5NjAwMDAwMFVMTCAvIFVTRVJfSFopOworICAgICAgIHJldHVybiBjcHV0aW1lX2RpdihjcHV0aW1lLCA0MDk2MDAwMDAwVUxMIC8gVVNFUl9IWik7CiB9CiAKIHN0cnVjdCBzMzkwX2lkbGVfZGF0YSB7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vZGVsYXkuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9kZWxheS5oCmluZGV4IGEzNTZjOTUuLjhhMDk2YjggMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9kZWxheS5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9kZWxheS5oCkBAIC0xNCwxMCArMTQsMTEgQEAKICNpZm5kZWYgX1MzOTBfREVMQVlfSAogI2RlZmluZSBfUzM5MF9ERUxBWV9ICiAKLWV4dGVybiB2b2lkIF9fdWRlbGF5KHVuc2lnbmVkIGxvbmcgdXNlY3MpOwotZXh0ZXJuIHZvaWQgdWRlbGF5X3NpbXBsZSh1bnNpZ25lZCBsb25nIHVzZWNzKTsKK2V4dGVybiB2b2lkIF9fdWRlbGF5KHVuc2lnbmVkIGxvbmcgbG9uZyB1c2Vjcyk7CitleHRlcm4gdm9pZCB1ZGVsYXlfc2ltcGxlKHVuc2lnbmVkIGxvbmcgbG9uZyB1c2Vjcyk7CiBleHRlcm4gdm9pZCBfX2RlbGF5KHVuc2lnbmVkIGxvbmcgbG9vcHMpOwogCi0jZGVmaW5lIHVkZWxheShuKSBfX3VkZWxheShuKQorI2RlZmluZSB1ZGVsYXkobikgX191ZGVsYXkoKHVuc2lnbmVkIGxvbmcgbG9uZykgKG4pKQorI2RlZmluZSBtZGVsYXkobikgX191ZGVsYXkoKHVuc2lnbmVkIGxvbmcgbG9uZykgKG4pICogMTAwMCkKIAogI2VuZGlmIC8qIGRlZmluZWQoX1MzOTBfREVMQVlfSCkgKi8KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9lbGYuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9lbGYuaAppbmRleCA3NGQwYmJiLi5lODg1NDQyIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vZWxmLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2VsZi5oCkBAIC05Miw2ICs5MiwxOCBAQAogLyogS2VlcCB0aGlzIHRoZSBsYXN0IGVudHJ5LiAgKi8KICNkZWZpbmUgUl8zOTBfTlVNCTYxCiAKKy8qIEJpdHMgcHJlc2VudCBpbiBBVF9IV0NBUC4gKi8KKyNkZWZpbmUgSFdDQVBfUzM5MF9FU0FOMwkxCisjZGVmaW5lIEhXQ0FQX1MzOTBfWkFSQ0gJMgorI2RlZmluZSBIV0NBUF9TMzkwX1NURkxFCTQKKyNkZWZpbmUgSFdDQVBfUzM5MF9NU0EJCTgKKyNkZWZpbmUgSFdDQVBfUzM5MF9MRElTUAkxNgorI2RlZmluZSBIV0NBUF9TMzkwX0VJTU0JCTMyCisjZGVmaW5lIEhXQ0FQX1MzOTBfREZQCQk2NAorI2RlZmluZSBIV0NBUF9TMzkwX0hQQUdFCTEyOAorI2RlZmluZSBIV0NBUF9TMzkwX0VURjNFSAkyNTYKKyNkZWZpbmUgSFdDQVBfUzM5MF9ISUdIX0dQUlMJNTEyCisKIC8qCiAgKiBUaGVzZSBhcmUgdXNlZCB0byBzZXQgcGFyYW1ldGVycyBpbiB0aGUgY29yZSBkdW1wcy4KICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3B0cmFjZS5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3B0cmFjZS5oCmluZGV4IDUzOTI2M2YuLjk1ZGNmMTggMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wdHJhY2UuaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcHRyYWNlLmgKQEAgLTMxMSw2ICszMTEsMTAgQEAKIAlfX3UzMgkJb3JpZ19ncHIyOwogfSBzMzkwX2NvbXBhdF9yZWdzOwogCit0eXBlZGVmIHN0cnVjdAoreworCV9fdTMyCQlncHJzX2hpZ2hbTlVNX0dQUlNdOworfSBzMzkwX2NvbXBhdF9yZWdzX2hpZ2g7CiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS91Y29udGV4dC5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3Vjb250ZXh0LmgKaW5kZXggZDY5YmVjMC4uY2ZiODc0ZSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3Vjb250ZXh0LmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3Vjb250ZXh0LmgKQEAgLTksNiArOSwyMSBAQAogI2lmbmRlZiBfQVNNX1MzOTBfVUNPTlRFWFRfSAogI2RlZmluZSBfQVNNX1MzOTBfVUNPTlRFWFRfSAogCisjZGVmaW5lIFVDX0VYVEVOREVECTB4MDAwMDAwMDEKKworI2lmbmRlZiBfX3MzOTB4X18KKworc3RydWN0IHVjb250ZXh0X2V4dGVuZGVkIHsKKwl1bnNpZ25lZCBsb25nCSAgdWNfZmxhZ3M7CisJc3RydWN0IHVjb250ZXh0ICAqdWNfbGluazsKKwlzdGFja190CQkgIHVjX3N0YWNrOworCV9zaWdyZWdzCSAgdWNfbWNvbnRleHQ7CisJdW5zaWduZWQgbG9uZwkgIHVjX3NpZ21hc2tbMl07CisJdW5zaWduZWQgbG9uZwkgIHVjX2dwcnNfaGlnaFsxNl07Cit9OworCisjZW5kaWYKKwogc3RydWN0IHVjb250ZXh0IHsKIAl1bnNpZ25lZCBsb25nCSAgdWNfZmxhZ3M7CiAJc3RydWN0IHVjb250ZXh0ICAqdWNfbGluazsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvY29tcGF0X3NpZ25hbC5jIGIvYXJjaC9zMzkwL2tlcm5lbC9jb21wYXRfc2lnbmFsLmMKaW5kZXggYjUzN2NiMC4uZWVlOTk5OCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9jb21wYXRfc2lnbmFsLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9jb21wYXRfc2lnbmFsLmMKQEAgLTM5LDYgKzM5LDcgQEAKIAlzdHJ1Y3Qgc2lnY29udGV4dDMyIHNjOwogCV9zaWdyZWdzMzIgc3JlZ3M7CiAJaW50IHNpZ25vOworCV9fdTMyIGdwcnNfaGlnaFtOVU1fR1BSU107CiAJX191OCByZXRjb2RlW1MzOTBfU1lTQ0FMTF9TSVpFXTsKIH0gc2lnZnJhbWUzMjsKIApAQCAtNDgsNiArNDksNyBAQAogCV9fdTggcmV0Y29kZVtTMzkwX1NZU0NBTExfU0laRV07CiAJY29tcGF0X3NpZ2luZm9fdCBpbmZvOwogCXN0cnVjdCB1Y29udGV4dDMyIHVjOworCV9fdTMyIGdwcnNfaGlnaFtOVU1fR1BSU107CiB9IHJ0X3NpZ2ZyYW1lMzI7CiAKIGludCBjb3B5X3NpZ2luZm9fdG9fdXNlcjMyKGNvbXBhdF9zaWdpbmZvX3QgX191c2VyICp0bywgc2lnaW5mb190ICpmcm9tKQpAQCAtMzQ0LDYgKzM0NiwzMCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IHNhdmVfc2lncmVnc19ncHJzX2hpZ2goc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIF9fdTMyIF9fdXNlciAqdXJlZ3MpCit7CisJX191MzIgZ3Byc19oaWdoW05VTV9HUFJTXTsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBOVU1fR1BSUzsgaSsrKQorCQlncHJzX2hpZ2hbaV0gPSByZWdzLT5ncHJzW2ldID4+IDMyOworCisJcmV0dXJuIF9fY29weV90b191c2VyKHVyZWdzLCAmZ3Byc19oaWdoLCBzaXplb2YoZ3Byc19oaWdoKSk7Cit9CisKK3N0YXRpYyBpbnQgcmVzdG9yZV9zaWdyZWdzX2dwcnNfaGlnaChzdHJ1Y3QgcHRfcmVncyAqcmVncywgX191MzIgX191c2VyICp1cmVncykKK3sKKwlfX3UzMiBncHJzX2hpZ2hbTlVNX0dQUlNdOworCWludCBlcnIsIGk7CisKKwllcnIgPSBfX2NvcHlfZnJvbV91c2VyKCZncHJzX2hpZ2gsIHVyZWdzLCBzaXplb2YoZ3Byc19oaWdoKSk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwlmb3IgKGkgPSAwOyBpIDwgTlVNX0dQUlM7IGkrKykKKwkJKihfX3UzMiAqKSZyZWdzLT5ncHJzW2ldID0gZ3Byc19oaWdoW2ldOworCXJldHVybiAwOworfQorCiBhc21saW5rYWdlIGxvbmcgc3lzMzJfc2lncmV0dXJuKHZvaWQpCiB7CiAJc3RydWN0IHB0X3JlZ3MgKnJlZ3MgPSB0YXNrX3B0X3JlZ3MoY3VycmVudCk7CkBAIC0zNjMsNiArMzg5LDggQEAKIAogCWlmIChyZXN0b3JlX3NpZ3JlZ3MzMihyZWdzLCAmZnJhbWUtPnNyZWdzKSkKIAkJZ290byBiYWRmcmFtZTsKKwlpZiAocmVzdG9yZV9zaWdyZWdzX2dwcnNfaGlnaChyZWdzLCBmcmFtZS0+Z3Byc19oaWdoKSkKKwkJZ290byBiYWRmcmFtZTsKIAogCXJldHVybiByZWdzLT5ncHJzWzJdOwogCkBAIC0zOTQsNiArNDIyLDggQEAKIAogCWlmIChyZXN0b3JlX3NpZ3JlZ3MzMihyZWdzLCAmZnJhbWUtPnVjLnVjX21jb250ZXh0KSkKIAkJZ290byBiYWRmcmFtZTsKKwlpZiAocmVzdG9yZV9zaWdyZWdzX2dwcnNfaGlnaChyZWdzLCBmcmFtZS0+Z3Byc19oaWdoKSkKKwkJZ290byBiYWRmcmFtZTsKIAogCWVyciA9IF9fZ2V0X3VzZXIoc3Nfc3AsICZmcmFtZS0+dWMudWNfc3RhY2suc3Nfc3ApOwogCXN0LnNzX3NwID0gY29tcGF0X3B0cihzc19zcCk7CkBAIC00NzQsNiArNTA0LDggQEAKIAogCWlmIChzYXZlX3NpZ3JlZ3MzMihyZWdzLCAmZnJhbWUtPnNyZWdzKSkKIAkJZ290byBnaXZlX3NpZ3NlZ3Y7CisJaWYgKHNhdmVfc2lncmVnc19ncHJzX2hpZ2gocmVncywgZnJhbWUtPmdwcnNfaGlnaCkpCisJCWdvdG8gZ2l2ZV9zaWdzZWd2OwogCWlmIChfX3B1dF91c2VyKCh1bnNpZ25lZCBsb25nKSAmZnJhbWUtPnNyZWdzLCAmZnJhbWUtPnNjLnNyZWdzKSkKIAkJZ290byBnaXZlX3NpZ3NlZ3Y7CiAKQEAgLTUyOSwxMyArNTYxLDE0IEBACiAJCWdvdG8gZ2l2ZV9zaWdzZWd2OwogCiAJLyogQ3JlYXRlIHRoZSB1Y29udGV4dC4gICovCi0JZXJyIHw9IF9fcHV0X3VzZXIoMCwgJmZyYW1lLT51Yy51Y19mbGFncyk7CisJZXJyIHw9IF9fcHV0X3VzZXIoVUNfRVhURU5ERUQsICZmcmFtZS0+dWMudWNfZmxhZ3MpOwogCWVyciB8PSBfX3B1dF91c2VyKDAsICZmcmFtZS0+dWMudWNfbGluayk7CiAJZXJyIHw9IF9fcHV0X3VzZXIoY3VycmVudC0+c2FzX3NzX3NwLCAmZnJhbWUtPnVjLnVjX3N0YWNrLnNzX3NwKTsKIAllcnIgfD0gX19wdXRfdXNlcihzYXNfc3NfZmxhZ3MocmVncy0+Z3Byc1sxNV0pLAogCSAgICAgICAgICAgICAgICAgICZmcmFtZS0+dWMudWNfc3RhY2suc3NfZmxhZ3MpOwogCWVyciB8PSBfX3B1dF91c2VyKGN1cnJlbnQtPnNhc19zc19zaXplLCAmZnJhbWUtPnVjLnVjX3N0YWNrLnNzX3NpemUpOwogCWVyciB8PSBzYXZlX3NpZ3JlZ3MzMihyZWdzLCAmZnJhbWUtPnVjLnVjX21jb250ZXh0KTsKKwllcnIgfD0gc2F2ZV9zaWdyZWdzX2dwcnNfaGlnaChyZWdzLCBmcmFtZS0+Z3Byc19oaWdoKTsKIAllcnIgfD0gX19jb3B5X3RvX3VzZXIoJmZyYW1lLT51Yy51Y19zaWdtYXNrLCBzZXQsIHNpemVvZigqc2V0KSk7CiAJaWYgKGVycikKIAkJZ290byBnaXZlX3NpZ3NlZ3Y7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL2NvbXBhdF93cmFwcGVyLlMgYi9hcmNoL3MzOTAva2VybmVsL2NvbXBhdF93cmFwcGVyLlMKaW5kZXggNjgyZmI2OS4uY2JkOTkwMSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9jb21wYXRfd3JhcHBlci5TCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvY29tcGF0X3dyYXBwZXIuUwpAQCAtNDA5LDcgKzQwOSw3IEBACiAJLmdsb2JsCXN5czMyX3RydW5jYXRlX3dyYXBwZXIKIHN5czMyX3RydW5jYXRlX3dyYXBwZXI6CiAJbGxndHIJJXIyLCVyMgkJCSMgY29uc3QgY2hhciAqCi0JbGxnZnIJJXIzLCVyMwkJCSMgdW5zaWduZWQgbG9uZworCWxnZnIJJXIzLCVyMwkJCSMgbG9uZwogCWpnCXN5c190cnVuY2F0ZQkJIyBicmFuY2ggdG8gc3lzdGVtIGNhbGwKIAogCS5nbG9ibAlzeXMzMl9mdHJ1bmNhdGVfd3JhcHBlcgpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9mdHJhY2UuYyBiL2FyY2gvczM5MC9rZXJuZWwvZnRyYWNlLmMKaW5kZXggNTdiZGNiMS4uZjVmZTM0ZCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9mdHJhY2UuYworKysgYi9hcmNoL3MzOTAva2VybmVsL2Z0cmFjZS5jCkBAIC0xODUsOSArMTg1LDYgQEAKIHsKIAlzdHJ1Y3QgZnRyYWNlX2dyYXBoX2VudCB0cmFjZTsKIAotCS8qIE5taSdzIGFyZSBjdXJyZW50bHkgdW5zdXBwb3J0ZWQuICovCi0JaWYgKHVubGlrZWx5KGluX25taSgpKSkKLQkJZ290byBvdXQ7CiAJaWYgKHVubGlrZWx5KGF0b21pY19yZWFkKCZjdXJyZW50LT50cmFjaW5nX2dyYXBoX3BhdXNlKSkpCiAJCWdvdG8gb3V0OwogCWlmIChmdHJhY2VfcHVzaF9yZXR1cm5fdHJhY2UocGFyZW50LCBpcCwgJnRyYWNlLmRlcHRoLCAwKSA9PSAtRUJVU1kpCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL2lwbC5jIGIvYXJjaC9zMzkwL2tlcm5lbC9pcGwuYwppbmRleCBlZTU3YTQyLi40ODkwYWM2IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL2lwbC5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvaXBsLmMKQEAgLTE1OTUsMTAgKzE1OTUsOSBAQAogewogCWlmIChzdHJjbXAodHJpZ2dlci0+bmFtZSwgT05fUEFOSUNfU1RSKSA9PSAwKQogCQlkaXNhYmxlZF93YWl0KCh1bnNpZ25lZCBsb25nKSBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpOwotCWVsc2UgewotCQlzaWduYWxfcHJvY2Vzc29yKHNtcF9wcm9jZXNzb3JfaWQoKSwgc2lncF9zdG9wKTsKLQkJZm9yICg7Oyk7Ci0JfQorCXdoaWxlIChzaWduYWxfcHJvY2Vzc29yKHNtcF9wcm9jZXNzb3JfaWQoKSwgc2lncF9zdG9wKSA9PSBzaWdwX2J1c3kpCisJCWNwdV9yZWxheCgpOworCWZvciAoOzspOwogfQogCiBzdGF0aWMgc3RydWN0IHNodXRkb3duX2FjdGlvbiBzdG9wX2FjdGlvbiA9IHtTSFVURE9XTl9BQ1RJT05fU1RPUF9TVFIsCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL21vZHVsZS5jIGIvYXJjaC9zMzkwL2tlcm5lbC9tb2R1bGUuYwppbmRleCBhYjJlM2VkLi42MzkzODBhIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL21vZHVsZS5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvbW9kdWxlLmMKQEAgLTU1LDYgKzU1LDggQEAKIC8qIEZyZWUgbWVtb3J5IHJldHVybmVkIGZyb20gbW9kdWxlX2FsbG9jICovCiB2b2lkIG1vZHVsZV9mcmVlKHN0cnVjdCBtb2R1bGUgKm1vZCwgdm9pZCAqbW9kdWxlX3JlZ2lvbikKIHsKKwl2ZnJlZShtb2QtPmFyY2guc3ltaW5mbyk7CisJbW9kLT5hcmNoLnN5bWluZm8gPSBOVUxMOwogCXZmcmVlKG1vZHVsZV9yZWdpb24pOwogfQogCkBAIC00MDIsNiArNDA0LDcgQEAKIAkJICAgIHN0cnVjdCBtb2R1bGUgKm1lKQogewogCXZmcmVlKG1lLT5hcmNoLnN5bWluZm8pOworCW1lLT5hcmNoLnN5bWluZm8gPSBOVUxMOwogCXJldHVybiBtb2R1bGVfYnVnX2ZpbmFsaXplKGhkciwgc2VjaGRycywgbWUpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3Byb2Nlc3Nvci5jIGIvYXJjaC9zMzkwL2tlcm5lbC9wcm9jZXNzb3IuYwppbmRleCA4MDJjOGFiLi4wNzI5ZjM2IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL3Byb2Nlc3Nvci5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvcHJvY2Vzc29yLmMKQEAgLTMxLDkgKzMxLDkgQEAKIAogc3RhdGljIGludCBzaG93X2NwdWluZm8oc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQogewotCXN0YXRpYyBjb25zdCBjaGFyICpod2NhcF9zdHJbOV0gPSB7CisJc3RhdGljIGNvbnN0IGNoYXIgKmh3Y2FwX3N0clsxMF0gPSB7CiAJCSJlc2FuMyIsICJ6YXJjaCIsICJzdGZsZSIsICJtc2EiLCAibGRpc3AiLCAiZWltbSIsICJkZnAiLAotCQkiZWRhdCIsICJldGYzZWgiCisJCSJlZGF0IiwgImV0ZjNlaCIsICJoaWdoZ3BycyIKIAl9OwogCXN0cnVjdCBfbG93Y29yZSAqbGM7CiAJdW5zaWduZWQgbG9uZyBuID0gKHVuc2lnbmVkIGxvbmcpIHYgLSAxOwpAQCAtNDgsNyArNDgsNyBAQAogCQkJICAgbnVtX29ubGluZV9jcHVzKCksIGxvb3BzX3Blcl9qaWZmeS8oNTAwMDAwL0haKSwKIAkJCSAgIChsb29wc19wZXJfamlmZnkvKDUwMDAvSFopKSUxMDApOwogCQlzZXFfcHV0cyhtLCAiZmVhdHVyZXNcdDogIik7Ci0JCWZvciAoaSA9IDA7IGkgPCA5OyBpKyspCisJCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKQogCQkJaWYgKGh3Y2FwX3N0cltpXSAmJiAoZWxmX2h3Y2FwICYgKDFVTCA8PCBpKSkpCiAJCQkJc2VxX3ByaW50ZihtLCAiJXMgIiwgaHdjYXBfc3RyW2ldKTsKIAkJc2VxX3B1dHMobSwgIlxuIik7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3B0cmFjZS5jIGIvYXJjaC9zMzkwL2tlcm5lbC9wdHJhY2UuYwppbmRleCBhODczODY3Li42NTNjNmExIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL3B0cmFjZS5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvcHRyYWNlLmMKQEAgLTU3LDYgKzU3LDcgQEAKIGVudW0gczM5MF9yZWdzZXQgewogCVJFR1NFVF9HRU5FUkFMLAogCVJFR1NFVF9GUCwKKwlSRUdTRVRfR0VORVJBTF9FWFRFTkRFRCwKIH07CiAKIHN0YXRpYyB2b2lkCkBAIC04NzksNiArODgwLDY3IEBACiAJcmV0dXJuIHJjOwogfQogCitzdGF0aWMgaW50IHMzOTBfY29tcGF0X3JlZ3NfaGlnaF9nZXQoc3RydWN0IHRhc2tfc3RydWN0ICp0YXJnZXQsCisJCQkJICAgICBjb25zdCBzdHJ1Y3QgdXNlcl9yZWdzZXQgKnJlZ3NldCwKKwkJCQkgICAgIHVuc2lnbmVkIGludCBwb3MsIHVuc2lnbmVkIGludCBjb3VudCwKKwkJCQkgICAgIHZvaWQgKmtidWYsIHZvaWQgX191c2VyICp1YnVmKQoreworCWNvbXBhdF91bG9uZ190ICpncHJzX2hpZ2g7CisKKwlncHJzX2hpZ2ggPSAoY29tcGF0X3Vsb25nX3QgKikKKwkJJnRhc2tfcHRfcmVncyh0YXJnZXQpLT5ncHJzW3BvcyAvIHNpemVvZihjb21wYXRfdWxvbmdfdCldOworCWlmIChrYnVmKSB7CisJCWNvbXBhdF91bG9uZ190ICprID0ga2J1ZjsKKwkJd2hpbGUgKGNvdW50ID4gMCkgeworCQkJKmsrKyA9ICpncHJzX2hpZ2g7CisJCQlncHJzX2hpZ2ggKz0gMjsKKwkJCWNvdW50IC09IHNpemVvZigqayk7CisJCX0KKwl9IGVsc2UgeworCQljb21wYXRfdWxvbmdfdCBfX3VzZXIgKnUgPSB1YnVmOworCQl3aGlsZSAoY291bnQgPiAwKSB7CisJCQlpZiAoX19wdXRfdXNlcigqZ3Byc19oaWdoLCB1KyspKQorCQkJCXJldHVybiAtRUZBVUxUOworCQkJZ3Byc19oaWdoICs9IDI7CisJCQljb3VudCAtPSBzaXplb2YoKnUpOworCQl9CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHMzOTBfY29tcGF0X3JlZ3NfaGlnaF9zZXQoc3RydWN0IHRhc2tfc3RydWN0ICp0YXJnZXQsCisJCQkJICAgICBjb25zdCBzdHJ1Y3QgdXNlcl9yZWdzZXQgKnJlZ3NldCwKKwkJCQkgICAgIHVuc2lnbmVkIGludCBwb3MsIHVuc2lnbmVkIGludCBjb3VudCwKKwkJCQkgICAgIGNvbnN0IHZvaWQgKmtidWYsIGNvbnN0IHZvaWQgX191c2VyICp1YnVmKQoreworCWNvbXBhdF91bG9uZ190ICpncHJzX2hpZ2g7CisJaW50IHJjID0gMDsKKworCWdwcnNfaGlnaCA9IChjb21wYXRfdWxvbmdfdCAqKQorCQkmdGFza19wdF9yZWdzKHRhcmdldCktPmdwcnNbcG9zIC8gc2l6ZW9mKGNvbXBhdF91bG9uZ190KV07CisJaWYgKGtidWYpIHsKKwkJY29uc3QgY29tcGF0X3Vsb25nX3QgKmsgPSBrYnVmOworCQl3aGlsZSAoY291bnQgPiAwKSB7CisJCQkqZ3Byc19oaWdoID0gKmsrKzsKKwkJCSpncHJzX2hpZ2ggKz0gMjsKKwkJCWNvdW50IC09IHNpemVvZigqayk7CisJCX0KKwl9IGVsc2UgeworCQljb25zdCBjb21wYXRfdWxvbmdfdCAgX191c2VyICp1ID0gdWJ1ZjsKKwkJd2hpbGUgKGNvdW50ID4gMCAmJiAhcmMpIHsKKwkJCXVuc2lnbmVkIGxvbmcgd29yZDsKKwkJCXJjID0gX19nZXRfdXNlcih3b3JkLCB1KyspOworCQkJaWYgKHJjKQorCQkJCWJyZWFrOworCQkJKmdwcnNfaGlnaCA9IHdvcmQ7CisJCQkqZ3Byc19oaWdoICs9IDI7CisJCQljb3VudCAtPSBzaXplb2YoKnUpOworCQl9CisJfQorCisJcmV0dXJuIHJjOworfQorCiBzdGF0aWMgY29uc3Qgc3RydWN0IHVzZXJfcmVnc2V0IHMzOTBfY29tcGF0X3JlZ3NldHNbXSA9IHsKIAlbUkVHU0VUX0dFTkVSQUxdID0gewogCQkuY29yZV9ub3RlX3R5cGUgPSBOVF9QUlNUQVRVUywKQEAgLTg5Niw2ICs5NTgsMTQgQEAKIAkJLmdldCA9IHMzOTBfZnByZWdzX2dldCwKIAkJLnNldCA9IHMzOTBfZnByZWdzX3NldCwKIAl9LAorCVtSRUdTRVRfR0VORVJBTF9FWFRFTkRFRF0gPSB7CisJCS5jb3JlX25vdGVfdHlwZSA9IE5UX1BSWFNUQVRVUywKKwkJLm4gPSBzaXplb2YoczM5MF9jb21wYXRfcmVnc19oaWdoKSAvIHNpemVvZihjb21wYXRfbG9uZ190KSwKKwkJLnNpemUgPSBzaXplb2YoY29tcGF0X2xvbmdfdCksCisJCS5hbGlnbiA9IHNpemVvZihjb21wYXRfbG9uZ190KSwKKwkJLmdldCA9IHMzOTBfY29tcGF0X3JlZ3NfaGlnaF9nZXQsCisJCS5zZXQgPSBzMzkwX2NvbXBhdF9yZWdzX2hpZ2hfc2V0LAorCX0sCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHVzZXJfcmVnc2V0X3ZpZXcgdXNlcl9zMzkwX2NvbXBhdF92aWV3ID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jIGIvYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jCmluZGV4IDllZDEzYTEuLjA2MTQ3OWYgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvc2V0dXAuYworKysgYi9hcmNoL3MzOTAva2VybmVsL3NldHVwLmMKQEAgLTcyOSw3ICs3MjksNyBAQAogCiAJaWYgKChmYWNpbGl0eV9saXN0ICYgKDFVTCA8PCAoMzEgLSAyMikpKQogCSAgICAmJiAoZmFjaWxpdHlfbGlzdCAmICgxVUwgPDwgKDMxIC0gMzApKSkpCi0JCWVsZl9od2NhcCB8PSAxVUwgPDwgODsKKwkJZWxmX2h3Y2FwIHw9IEhXQ0FQX1MzOTBfRVRGM0VIOwogCiAJLyoKIAkgKiBDaGVjayBmb3IgYWRkaXRpb25hbCBmYWNpbGl0aWVzIHdpdGggc3RvcmUtZmFjaWxpdHktbGlzdC1leHRlbmRlZC4KQEAgLTc0OCwxMSArNzQ4LDIwIEBACiAJICAgIF9fc3RmbGUoJmZhY2lsaXR5X2xpc3RfZXh0ZW5kZWQsIDEpID4gMCkgewogCQlpZiAoKGZhY2lsaXR5X2xpc3RfZXh0ZW5kZWQgJiAoMVVMTCA8PCAoNjMgLSA0MikpKQogCQkgICAgJiYgKGZhY2lsaXR5X2xpc3RfZXh0ZW5kZWQgJiAoMVVMTCA8PCAoNjMgLSA0NCkpKSkKLQkJCWVsZl9od2NhcCB8PSAxVUwgPDwgNjsKKwkJCWVsZl9od2NhcCB8PSBIV0NBUF9TMzkwX0RGUDsKIAl9CiAKKwkvKgorCSAqIEh1Z2UgcGFnZSBzdXBwb3J0IEhXQ0FQX1MzOTBfSFBBR0UgaXMgYml0IDcuCisJICovCiAJaWYgKE1BQ0hJTkVfSEFTX0hQQUdFKQotCQllbGZfaHdjYXAgfD0gMVVMIDw8IDc7CisJCWVsZl9od2NhcCB8PSBIV0NBUF9TMzkwX0hQQUdFOworCisJLyoKKwkgKiA2NC1iaXQgcmVnaXN0ZXIgc3VwcG9ydCBmb3IgMzEtYml0IHByb2Nlc3NlcworCSAqIEhXQ0FQX1MzOTBfSElHSF9HUFJTIGlzIGJpdCA5LgorCSAqLworCWVsZl9od2NhcCB8PSBIV0NBUF9TMzkwX0hJR0hfR1BSUzsKIAogCXN3aXRjaCAoUzM5MF9sb3djb3JlLmNwdV9pZC5tYWNoaW5lKSB7CiAJY2FzZSAweDk2NzI6CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3NtcC5jIGIvYXJjaC9zMzkwL2tlcm5lbC9zbXAuYwppbmRleCBjOTMyY2FhLi45M2U1MjAzIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL3NtcC5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvc21wLmMKQEAgLTc2LDcgKzc2LDYgQEAKIAlfX3UzMiBzdGF0dXM7CiAKIAlzd2l0Y2ggKHNpZ25hbF9wcm9jZXNzb3JfcHMoJnN0YXR1cywgMCwgY3B1LCBzaWdwX3NlbnNlKSkgewotCWNhc2Ugc2lncF9vcmRlcl9jb2RlX2FjY2VwdGVkOgogCWNhc2Ugc2lncF9zdGF0dXNfc3RvcmVkOgogCQkvKiBDaGVjayBmb3Igc3RvcHBlZCBhbmQgY2hlY2sgc3RvcCBzdGF0ZSAqLwogCQlpZiAoc3RhdHVzICYgMHg1MCkKQEAgLTYzOCw2ICs2MzcsOCBAQAogCS8qIFdhaXQgdW50aWwgdGFyZ2V0IGNwdSBpcyBkb3duICovCiAJd2hpbGUgKCFjcHVfc3RvcHBlZChjcHUpKQogCQljcHVfcmVsYXgoKTsKKwl3aGlsZSAoc2lnbmFsX3Byb2Nlc3Nvcl9wKDAsIGNwdSwgc2lncF9zZXRfcHJlZml4KSA9PSBzaWdwX2J1c3kpCisJCXVkZWxheSgxMCk7CiAJc21wX2ZyZWVfbG93Y29yZShjcHUpOwogCXByX2luZm8oIlByb2Nlc3NvciAlZCBzdG9wcGVkXG4iLCBjcHUpOwogfQpAQCAtNjQ1LDggKzY0Niw4IEBACiB2b2lkIGNwdV9kaWUodm9pZCkKIHsKIAlpZGxlX3Rhc2tfZXhpdCgpOwotCXNpZ25hbF9wcm9jZXNzb3Ioc21wX3Byb2Nlc3Nvcl9pZCgpLCBzaWdwX3N0b3ApOwotCUJVRygpOworCXdoaWxlIChzaWduYWxfcHJvY2Vzc29yKHNtcF9wcm9jZXNzb3JfaWQoKSwgc2lncF9zdG9wKSA9PSBzaWdwX2J1c3kpCisJCWNwdV9yZWxheCgpOwogCWZvciAoOzspOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3N3c3VzcF9hc202NC5TIGIvYXJjaC9zMzkwL2tlcm5lbC9zd3N1c3BfYXNtNjQuUwppbmRleCBmZTkyN2QwLi4wYzI2Y2MxIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL3N3c3VzcF9hc202NC5TCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvc3dzdXNwX2FzbTY0LlMKQEAgLTQzLDcgKzQzLDcgQEAKIAlsZ2hpCSVyMSwweDEwMDAKIAogCS8qIFNhdmUgQ1BVIGFkZHJlc3MgKi8KLQlzdGFwCV9fTENfQ1BVX0FERFJFU1MoJXIxKQorCXN0YXAJX19MQ19DUFVfQUREUkVTUyglcjApCiAKIAkvKiBTdG9yZSByZWdpc3RlcnMgKi8KIAltdmMJMHgzMTgoNCwlcjEpLF9fU0ZfRU1QVFkoJXIxNSkJLyogbW92ZSBwcmVmaXggdG8gbG93Y29yZSAqLwpAQCAtNjksOCArNjksMjEgQEAKIAlzdG1nCSVyMCwlcjE1LDB4MjgwKCVyMSkJCS8qIHN0b3JlIGdlbmVyYWwgcmVnaXN0ZXJzICovCiAKIAlzdHB0CTB4MzI4KCVyMSkJCQkvKiBzdG9yZSB0aW1lciAqLworCXN0Y2sJX19TRl9FTVBUWSglcjE1KQkJLyogc3RvcmUgY2xvY2sgKi8KIAlzdGNrYwkweDMzMCglcjEpCQkJLyogc3RvcmUgY2xvY2sgY29tcGFyYXRvciAqLwogCisJLyogVXBkYXRlIGNwdXRpbWUgYWNjb3VudGluZyBiZWZvcmUgZ29pbmcgdG8gc2xlZXAgKi8KKwlsZwklcjAsX19MQ19MQVNUX1VQREFURV9USU1FUgorCXNsZwklcjAsMHgzMjgoJXIxKQorCWFsZwklcjAsX19MQ19TWVNURU1fVElNRVIKKwlzdGcJJXIwLF9fTENfU1lTVEVNX1RJTUVSCisJbXZjCV9fTENfTEFTVF9VUERBVEVfVElNRVIoOCksMHgzMjgoJXIxKQorCWxnCSVyMCxfX0xDX0xBU1RfVVBEQVRFX0NMT0NLCisJc2xnCSVyMCxfX1NGX0VNUFRZKCVyMTUpCisJYWxnCSVyMCxfX0xDX1NURUFMX1RJTUVSCisJc3RnCSVyMCxfX0xDX1NURUFMX1RJTUVSCisJbXZjCV9fTENfTEFTVF9VUERBVEVfQ0xPQ0soOCksX19TRl9FTVBUWSglcjE1KQorCiAJLyogQWN0aXZhdGUgREFUICovCiAJc3Rvc20JX19TRl9FTVBUWSglcjE1KSwweDA0CiAKQEAgLTE1OSw4ICsxNzIsNyBAQAogCWxhcmwJJXIxLC5McmVzdW1lX2NwdQkJLyogUmVzdW1lIENQVSBhZGRyZXNzOiByMiAqLwogCXN0YXAJMCglcjEpCiAJbGxnaAklcjIsMCglcjEpCi0JbGdoaQklcjMsMHgxMDAwCi0JbGxnaAklcjEsX19MQ19DUFVfQUREUkVTUyglcjMpCS8qIFN1c3BlbmQgQ1BVIGFkZHJlc3M6IHIxICovCisJbGxnaAklcjEsX19MQ19DUFVfQUREUkVTUyglcjApCS8qIFN1c3BlbmQgQ1BVIGFkZHJlc3M6IHIxICovCiAJY2dyCSVyMSwlcjIKIAlqZQlyZXN0b3JlX3JlZ2lzdGVycwkJLyogcjEgPSByMiAtPiBub3RoaW5nIHRvIGRvICovCiAJbGFybAklcjQsLkxyZXN0YXJ0X3N1c3BlbmRfcHN3CS8qIFNldCBuZXcgcmVzdGFydCBQU1cgKi8KQEAgLTE4Nyw2ICsxOTksNyBAQAogCWJyYwkyLDRiCQkJLyogYnVzeSwgdHJ5IGFnYWluICovCiA1OgogCXNpZ3AJJXI5LCVyMixfX1NJR1BfU1RPUAkvKiBzdG9wIHJlc3VtZSAoY3VycmVudCkgQ1BVICovCisJYnJjCTIsNWIJCQkvKiBidXN5LCB0cnkgYWdhaW4gKi8KIDY6CWoJNmIKIAogcmVzdGFydF9zdXNwZW5kOgpAQCAtMTk0LDE0ICsyMDcsMTggQEAKIAlsbGdoCSVyMiwwKCVyMSkKIDc6CiAJc2lncAklcjksJXIyLF9fU0lHUF9TRU5TRQkvKiBXYWl0IGZvciByZXN1bWUgQ1BVICovCisJYnJjCTgsN2IJCQkvKiBhY2NlcHRlZCwgc3RhdHVzIDAsIHN0aWxsIHJ1bm5pbmcgKi8KIAlicmMJMiw3YgkJCS8qIGJ1c3ksIHRyeSBhZ2FpbiAqLwogCXRtbGwJJXI5LDB4NDAJCS8qIFRlc3QgaWYgcmVzdW1lIENQVSBpcyBzdG9wcGVkICovCiAJanoJN2IKIAogcmVzdG9yZV9yZWdpc3RlcnM6CiAJLyogUmVzdG9yZSByZWdpc3RlcnMgKi8KLQlsZ2hpCSVyMTMsMHgxMDAwCQkvKiAlcjEgPSBwb2ludGVyIHRvIHNhdmUgYXJhZSAqLworCWxnaGkJJXIxMywweDEwMDAJCS8qICVyMSA9IHBvaW50ZXIgdG8gc2F2ZSBhcmVhICovCiAKKwkvKiBJZ25vcmUgdGltZSBzcGVudCBpbiBzdXNwZW5kZWQgc3RhdGUuICovCisJbGxnZgklcjEsMHgzMTgoJXIxMykKKwlzdGNrCV9fTENfTEFTVF9VUERBVEVfQ0xPQ0soJXIxKQogCXNwdAkweDMyOCglcjEzKQkJLyogcmVwcm9ncmFtIHRpbWVyICovCiAJLy9zY2tjCTB4MzMwKCVyMTMpCQkvKiBzZXQgY2xvY2sgY29tcGFyYXRvciAqLwogCkBAIC0yMjksOSArMjQ2LDYgQEAKIAkvKiBMb2FkIG9sZCBzdGFjayAqLwogCWxnCSVyMTUsMHgyZjgoJXIxMykKIAotCS8qIFBvaW50ZXIgdG8gc2F2ZSBhcmVhICovCi0JbGdoaQklcjEzLDB4MTAwMAotCiAJLyogUmVzdG9yZSBwcmVmaXggcmVnaXN0ZXIgKi8KIAlzcHgJMHgzMTgoJXIxMykKIApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC92ZHNvLmMgYi9hcmNoL3MzOTAva2VybmVsL3Zkc28uYwppbmRleCA0NWEzZTlhLi5hZGZiMzJhIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL3Zkc28uYworKysgYi9hcmNoL3MzOTAva2VybmVsL3Zkc28uYwpAQCAtMjQ3LDYgKzI0NywxMyBAQAogCX0KIAogCS8qCisJICogUHV0IHZEU08gYmFzZSBpbnRvIG1tIHN0cnVjdC4gV2UgbmVlZCB0byBkbyB0aGlzIGJlZm9yZSBjYWxsaW5nCisJICogaW5zdGFsbF9zcGVjaWFsX21hcHBpbmcgb3IgdGhlIHBlcmYgY291bnRlciBtbWFwIHRyYWNraW5nIGNvZGUKKwkgKiB3aWxsIGZhaWwgdG8gcmVjb2duaXNlIGl0IGFzIGEgdkRTTyAoc2luY2UgYXJjaF92bWFfbmFtZSBmYWlscykuCisJICovCisJY3VycmVudC0+bW0tPmNvbnRleHQudmRzb19iYXNlID0gdmRzb19iYXNlOworCisJLyoKIAkgKiBvdXIgdm1hIGZsYWdzIGRvbid0IGhhdmUgVk1fV1JJVEUgc28gYnkgZGVmYXVsdCwgdGhlIHByb2Nlc3MKIAkgKiBpc24ndCBhbGxvd2VkIHRvIHdyaXRlIHRob3NlIHBhZ2VzLgogCSAqIGdkYiBjYW4gYnJlYWsgdGhhdCB3aXRoIHB0cmFjZSBpbnRlcmZhY2UsIGFuZCB0aHVzIHRyaWdnZXIgQ09XCkBAIC0yNjcsMTQgKzI3NCw3IEBACiAJCQkJICAgICBWTV9BTFdBWVNEVU1QLAogCQkJCSAgICAgdmRzb19wYWdlbGlzdCk7CiAJaWYgKHJjKQotCQlnb3RvIG91dF91cDsKLQotCS8qIFB1dCB2RFNPIGJhc2UgaW50byBtbSBzdHJ1Y3QgKi8KLQljdXJyZW50LT5tbS0+Y29udGV4dC52ZHNvX2Jhc2UgPSB2ZHNvX2Jhc2U7Ci0KLQl1cF93cml0ZSgmbW0tPm1tYXBfc2VtKTsKLQlyZXR1cm4gMDsKLQorCQljdXJyZW50LT5tbS0+Y29udGV4dC52ZHNvX2Jhc2UgPSAwOwogb3V0X3VwOgogCXVwX3dyaXRlKCZtbS0+bW1hcF9zZW0pOwogCXJldHVybiByYzsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvdm1saW51eC5sZHMuUyBiL2FyY2gvczM5MC9rZXJuZWwvdm1saW51eC5sZHMuUwppbmRleCBiYzE1ZWY5Li5hNjhhYzEwIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL3ZtbGludXgubGRzLlMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC92bWxpbnV4Lmxkcy5TCkBAIC01MSw2ICs1MSw3IEBACiAKIAkuID0gQUxJR04oUEFHRV9TSVpFKTsKIAlfZXNoYXJlZCA9IC47CQkvKiBFbmQgb2Ygc2hhcmVhYmxlIGRhdGEgKi8KKwlfc2RhdGEgPSAuOwkJLyogU3RhcnQgb2YgZGF0YSBzZWN0aW9uICovCiAKIAlFWENFUFRJT05fVEFCTEUoMTYpIDpkYXRhCiAKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuaCBiL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuaAppbmRleCBlYzVlZWU3Li4wNmNjZTgyIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmgKKysrIGIvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oCkBAIC01OCw3ICs1OCw3IEBACiBpbnQga3ZtX3MzOTBfaW5qZWN0X3Byb2dyYW1faW50KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTE2IGNvZGUpOwogaW50IGt2bV9zMzkwX2luamVjdF9zaWdwX3N0b3Aoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgYWN0aW9uKTsKIAotc3RhdGljIGlubGluZSBpbnQga3ZtX3MzOTBfdmNwdV9nZXRfbWVtc2l6ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCitzdGF0aWMgaW5saW5lIGxvbmcga3ZtX3MzOTBfdmNwdV9nZXRfbWVtc2l6ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJcmV0dXJuIHZjcHUtPmFyY2guc2llX2Jsb2NrLT5nbXNsbQogCQktIHZjcHUtPmFyY2guc2llX2Jsb2NrLT5nbXNvcgpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2xpYi9kZWxheS5jIGIvYXJjaC9zMzkwL2xpYi9kZWxheS5jCmluZGV4IDk3YzFlY2EuLjc1MmIzNjIgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9saWIvZGVsYXkuYworKysgYi9hcmNoL3MzOTAvbGliL2RlbGF5LmMKQEAgLTI1LDEzICsyNSwxMyBAQAogCWFzbSB2b2xhdGlsZSgiMDogYnJjdCAlMCwwYiIgOiA6ICJkIiAoKGxvb3BzLzIpICsgMSkpOwogfQogCi1zdGF0aWMgdm9pZCBfX3VkZWxheV9kaXNhYmxlZCh1bnNpZ25lZCBsb25nIHVzZWNzKQorc3RhdGljIHZvaWQgX191ZGVsYXlfZGlzYWJsZWQodW5zaWduZWQgbG9uZyBsb25nIHVzZWNzKQogewogCXVuc2lnbmVkIGxvbmcgbWFzaywgY3IwLCBjcjBfc2F2ZWQ7CiAJdTY0IGNsb2NrX3NhdmVkOwogCiAJY2xvY2tfc2F2ZWQgPSBsb2NhbF90aWNrX2Rpc2FibGUoKTsKLQlzZXRfY2xvY2tfY29tcGFyYXRvcihnZXRfY2xvY2soKSArICgodTY0KSB1c2VjcyA8PCAxMikpOworCXNldF9jbG9ja19jb21wYXJhdG9yKGdldF9jbG9jaygpICsgKHVzZWNzIDw8IDEyKSk7CiAJX19jdGxfc3RvcmUoY3IwX3NhdmVkLCAwLCAwKTsKIAljcjAgPSAoY3IwX3NhdmVkICYgMHhmZmZmMDBlMCkgfCAweDAwMDAwODAwOwogCV9fY3RsX2xvYWQoY3IwICwgMCwgMCk7CkBAIC00NiwyMCArNDYsMjUgQEAKIAlzZXRfY2xvY2tfY29tcGFyYXRvcihTMzkwX2xvd2NvcmUuY2xvY2tfY29tcGFyYXRvcik7CiB9CiAKLXN0YXRpYyB2b2lkIF9fdWRlbGF5X2VuYWJsZWQodW5zaWduZWQgbG9uZyB1c2VjcykKK3N0YXRpYyB2b2lkIF9fdWRlbGF5X2VuYWJsZWQodW5zaWduZWQgbG9uZyBsb25nIHVzZWNzKQogewogCXVuc2lnbmVkIGxvbmcgbWFzazsKLQl1NjQgZW5kLCB0aW1lOworCXU2NCBjbG9ja19zYXZlZDsKKwl1NjQgZW5kOwogCiAJbWFzayA9IHBzd19rZXJuZWxfYml0cyB8IFBTV19NQVNLX1dBSVQgfCBQU1dfTUFTS19FWFQgfCBQU1dfTUFTS19JTzsKLQllbmQgPSBnZXRfY2xvY2soKSArICgodTY0KSB1c2VjcyA8PCAxMik7CisJZW5kID0gZ2V0X2Nsb2NrKCkgKyAodXNlY3MgPDwgMTIpOwogCWRvIHsKLQkJdGltZSA9IGVuZCA8IFMzOTBfbG93Y29yZS5jbG9ja19jb21wYXJhdG9yID8KLQkJCWVuZCA6IFMzOTBfbG93Y29yZS5jbG9ja19jb21wYXJhdG9yOwotCQlzZXRfY2xvY2tfY29tcGFyYXRvcih0aW1lKTsKKwkJY2xvY2tfc2F2ZWQgPSAwOworCQlpZiAoZW5kIDwgUzM5MF9sb3djb3JlLmNsb2NrX2NvbXBhcmF0b3IpIHsKKwkJCWNsb2NrX3NhdmVkID0gbG9jYWxfdGlja19kaXNhYmxlKCk7CisJCQlzZXRfY2xvY2tfY29tcGFyYXRvcihlbmQpOworCQl9CiAJCXRyYWNlX2hhcmRpcnFzX29uKCk7CiAJCV9fbG9hZF9wc3dfbWFzayhtYXNrKTsKIAkJbG9jYWxfaXJxX2Rpc2FibGUoKTsKKwkJaWYgKGNsb2NrX3NhdmVkKQorCQkJbG9jYWxfdGlja19lbmFibGUoY2xvY2tfc2F2ZWQpOwogCX0gd2hpbGUgKGdldF9jbG9jaygpIDwgZW5kKTsKIAlzZXRfY2xvY2tfY29tcGFyYXRvcihTMzkwX2xvd2NvcmUuY2xvY2tfY29tcGFyYXRvcik7CiB9CkBAIC02Nyw3ICs3Miw3IEBACiAvKgogICogV2FpdHMgZm9yICd1c2VjcycgbWljcm9zZWNvbmRzIHVzaW5nIHRoZSBUT0QgY2xvY2sgY29tcGFyYXRvci4KICAqLwotdm9pZCBfX3VkZWxheSh1bnNpZ25lZCBsb25nIHVzZWNzKQordm9pZCBfX3VkZWxheSh1bnNpZ25lZCBsb25nIGxvbmcgdXNlY3MpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIApAQCAtMTAxLDExICsxMDYsMTEgQEAKICAqIFNpbXBsZSB1ZGVsYXkgdmFyaWFudC4gVG8gYmUgdXNlZCBvbiBzdGFydHVwIGFuZCByZWJvb3QKICAqIHdoZW4gdGhlIGludGVycnVwdCBoYW5kbGVyIGlzbid0IHdvcmtpbmcuCiAgKi8KLXZvaWQgdWRlbGF5X3NpbXBsZSh1bnNpZ25lZCBsb25nIHVzZWNzKQordm9pZCB1ZGVsYXlfc2ltcGxlKHVuc2lnbmVkIGxvbmcgbG9uZyB1c2VjcykKIHsKIAl1NjQgZW5kOwogCi0JZW5kID0gZ2V0X2Nsb2NrKCkgKyAoKHU2NCkgdXNlY3MgPDwgMTIpOworCWVuZCA9IGdldF9jbG9jaygpICsgKHVzZWNzIDw8IDEyKTsKIAl3aGlsZSAoZ2V0X2Nsb2NrKCkgPCBlbmQpCiAJCWNwdV9yZWxheCgpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2xpYi91YWNjZXNzX212Y29zLmMgYi9hcmNoL3MzOTAvbGliL3VhY2Nlc3NfbXZjb3MuYwppbmRleCAzZjE1YWFmLi41OGRhM2Y0IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvbGliL3VhY2Nlc3NfbXZjb3MuYworKysgYi9hcmNoL3MzOTAvbGliL3VhY2Nlc3NfbXZjb3MuYwpAQCAtMzYsNyArMzYsNyBAQAogCXRtcDEgPSAtNDA5NlVMOwogCWFzbSB2b2xhdGlsZSgKIAkJIjA6IC5pbnNuIHNzLDB4YzgwMDAwMDAwMDAwLDAoJTAsJTIpLDAoJTEpLDBcbiIKLQkJIiAgIGp6ICAgIDdmXG4iCisJCSI5OiBqeiAgICA3ZlxuIgogCQkiMToiQUxSIiAgJTAsJTNcbiIKIAkJIiAgIlNMUiIgICUxLCUzXG4iCiAJCSIgICJTTFIiICAlMiwlM1xuIgpAQCAtNDcsNyArNDcsNyBAQAogCQkiICAiQ0xSIiAgJTAsJTRcbiIJLyogY29weSBjcm9zc2VzIG5leHQgcGFnZSBib3VuZGFyeT8gKi8KIAkJIiAgIGpuaCAgIDRmXG4iCiAJCSIzOiAuaW5zbiBzcywweGM4MDAwMDAwMDAwMCwwKCU0LCUyKSwwKCUxKSwwXG4iCi0JCSIgICJTTFIiICAlMCwlNFxuIgorCQkiMTA6IlNMUiIgICUwLCU0XG4iCiAJCSIgICJBTFIiICAlMiwlNFxuIgogCQkiNDoiTEhJIiAgJTQsLTFcbiIKIAkJIiAgIkFMUiIgICU0LCUwXG4iCS8qIGNvcHkgcmVtYWluaW5nIHNpemUsIHN1YnRyYWN0IDEgKi8KQEAgLTYxLDcgKzYxLDcgQEAKIAkJIiAgIGogICAgIDhmXG4iCiAJCSI3OiJTTFIiICAlMCwlMFxuIgogCQkiODogXG4iCi0JCUVYX1RBQkxFKDBiLDJiKSBFWF9UQUJMRSgzYiw0YikKKwkJRVhfVEFCTEUoMGIsMmIpIEVYX1RBQkxFKDNiLDRiKSBFWF9UQUJMRSg5YiwyYikgRVhfVEFCTEUoMTBiLDRiKQogCQk6ICIrYSIgKHNpemUpLCAiK2EiIChwdHIpLCAiK2EiICh4KSwgIithIiAodG1wMSksICI9YSIgKHRtcDIpCiAJCTogImQiIChyZWcwKSA6ICJjYyIsICJtZW1vcnkiKTsKIAlyZXR1cm4gc2l6ZTsKQEAgLTgyLDcgKzgyLDcgQEAKIAl0bXAxID0gLTQwOTZVTDsKIAlhc20gdm9sYXRpbGUoCiAJCSIwOiAuaW5zbiBzcywweGM4MDAwMDAwMDAwMCwwKCUwLCUxKSwwKCUyKSwwXG4iCi0JCSIgICBqeiAgICA0ZlxuIgorCQkiNjoganogICAgNGZcbiIKIAkJIjE6IkFMUiIgICUwLCUzXG4iCiAJCSIgICJTTFIiICAlMSwlM1xuIgogCQkiICAiU0xSIiAgJTIsJTNcbiIKQEAgLTkzLDExICs5MywxMSBAQAogCQkiICAiQ0xSIiAgJTAsJTRcbiIJLyogY29weSBjcm9zc2VzIG5leHQgcGFnZSBib3VuZGFyeT8gKi8KIAkJIiAgIGpuaCAgIDVmXG4iCiAJCSIzOiAuaW5zbiBzcywweGM4MDAwMDAwMDAwMCwwKCU0LCUxKSwwKCUyKSwwXG4iCi0JCSIgICJTTFIiICAlMCwlNFxuIgorCQkiNzoiU0xSIiAgJTAsJTRcbiIKIAkJIiAgIGogICAgIDVmXG4iCiAJCSI0OiJTTFIiICAlMCwlMFxuIgogCQkiNTogXG4iCi0JCUVYX1RBQkxFKDBiLDJiKSBFWF9UQUJMRSgzYiw1YikKKwkJRVhfVEFCTEUoMGIsMmIpIEVYX1RBQkxFKDNiLDViKSBFWF9UQUJMRSg2YiwyYikgRVhfVEFCTEUoN2IsNWIpCiAJCTogIithIiAoc2l6ZSksICIrYSIgKHB0ciksICIrYSIgKHgpLCAiK2EiICh0bXAxKSwgIj1hIiAodG1wMikKIAkJOiAiZCIgKHJlZzApIDogImNjIiwgIm1lbW9yeSIpOwogCXJldHVybiBzaXplOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2xpYi91YWNjZXNzX3N0ZC5jIGIvYXJjaC9zMzkwL2xpYi91YWNjZXNzX3N0ZC5jCmluZGV4IGQyZmZiYWQuLjA3ZGVhZWUgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9saWIvdWFjY2Vzc19zdGQuYworKysgYi9hcmNoL3MzOTAvbGliL3VhY2Nlc3Nfc3RkLmMKQEAgLTM2LDEyICszNiwxMiBAQAogCXRtcDEgPSAtMjU2VUw7CiAJYXNtIHZvbGF0aWxlKAogCQkiMDogbXZjcCAgMCglMCwlMiksMCglMSksJTNcbiIKLQkJIiAgIGp6ICAgIDhmXG4iCisJCSIxMDpqeiAgICA4ZlxuIgogCQkiMToiQUxSIiAgJTAsJTNcbiIKIAkJIiAgIGxhICAgICUxLDI1NiglMSlcbiIKIAkJIiAgIGxhICAgICUyLDI1NiglMilcbiIKIAkJIjI6IG12Y3AgIDAoJTAsJTIpLDAoJTEpLCUzXG4iCi0JCSIgICBqbnogICAxYlxuIgorCQkiMTE6am56ICAgMWJcbiIKIAkJIiAgIGogICAgIDhmXG4iCiAJCSIzOiBsYSAgICAlNCwyNTUoJTEpXG4iCS8qICU0ID0gcHRyICsgMjU1ICovCiAJCSIgICJMSEkiICAlMywtNDA5NlxuIgpAQCAtNTAsNyArNTAsNyBAQAogCQkiICAiQ0xSIiAgJTAsJTRcbiIJLyogY29weSBjcm9zc2VzIG5leHQgcGFnZSBib3VuZGFyeT8gKi8KIAkJIiAgIGpuaCAgIDVmXG4iCiAJCSI0OiBtdmNwICAwKCU0LCUyKSwwKCUxKSwlM1xuIgotCQkiICAiU0xSIiAgJTAsJTRcbiIKKwkJIjEyOiJTTFIiICAlMCwlNFxuIgogCQkiICAiQUxSIiAgJTIsJTRcbiIKIAkJIjU6IkxISSIgICU0LC0xXG4iCiAJCSIgICJBTFIiICAlNCwlMFxuIgkvKiBjb3B5IHJlbWFpbmluZyBzaXplLCBzdWJ0cmFjdCAxICovCkBAIC02NSw2ICs2NSw3IEBACiAJCSI4OiJTTFIiICAlMCwlMFxuIgogCQkiOTogXG4iCiAJCUVYX1RBQkxFKDBiLDNiKSBFWF9UQUJMRSgyYiwzYikgRVhfVEFCTEUoNGIsNWIpCisJCUVYX1RBQkxFKDEwYiwzYikgRVhfVEFCTEUoMTFiLDNiKSBFWF9UQUJMRSgxMmIsNWIpCiAJCTogIithIiAoc2l6ZSksICIrYSIgKHB0ciksICIrYSIgKHgpLCAiK2EiICh0bXAxKSwgIj1hIiAodG1wMikKIAkJOiA6ICJjYyIsICJtZW1vcnkiKTsKIAlyZXR1cm4gc2l6ZTsKQEAgLTg1LDEyICs4NiwxMiBAQAogCXRtcDEgPSAtMjU2VUw7CiAJYXNtIHZvbGF0aWxlKAogCQkiMDogbXZjcyAgMCglMCwlMSksMCglMiksJTNcbiIKLQkJIiAgIGp6ICAgIDVmXG4iCisJCSI3OiBqeiAgICA1ZlxuIgogCQkiMToiQUxSIiAgJTAsJTNcbiIKIAkJIiAgIGxhICAgICUxLDI1NiglMSlcbiIKIAkJIiAgIGxhICAgICUyLDI1NiglMilcbiIKIAkJIjI6IG12Y3MgIDAoJTAsJTEpLDAoJTIpLCUzXG4iCi0JCSIgICBqbnogICAxYlxuIgorCQkiODogam56ICAgMWJcbiIKIAkJIiAgIGogICAgIDVmXG4iCiAJCSIzOiBsYSAgICAlNCwyNTUoJTEpXG4iIC8qICU0ID0gcHRyICsgMjU1ICovCiAJCSIgICJMSEkiICAlMywtNDA5NlxuIgpAQCAtOTksMTEgKzEwMCwxMiBAQAogCQkiICAiQ0xSIiAgJTAsJTRcbiIJLyogY29weSBjcm9zc2VzIG5leHQgcGFnZSBib3VuZGFyeT8gKi8KIAkJIiAgIGpuaCAgIDZmXG4iCiAJCSI0OiBtdmNzICAwKCU0LCUxKSwwKCUyKSwlM1xuIgotCQkiICAiU0xSIiAgJTAsJTRcbiIKKwkJIjk6IlNMUiIgICUwLCU0XG4iCiAJCSIgICBqICAgICA2ZlxuIgogCQkiNToiU0xSIiAgJTAsJTBcbiIKIAkJIjY6IFxuIgogCQlFWF9UQUJMRSgwYiwzYikgRVhfVEFCTEUoMmIsM2IpIEVYX1RBQkxFKDRiLDZiKQorCQlFWF9UQUJMRSg3YiwzYikgRVhfVEFCTEUoOGIsM2IpIEVYX1RBQkxFKDliLDZiKQogCQk6ICIrYSIgKHNpemUpLCAiK2EiIChwdHIpLCAiK2EiICh4KSwgIithIiAodG1wMSksICI9YSIgKHRtcDIpCiAJCTogOiAiY2MiLCAibWVtb3J5Iik7CiAJcmV0dXJuIHNpemU7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvbW0vcGd0YWJsZS5jIGIvYXJjaC9zMzkwL21tL3BndGFibGUuYwppbmRleCBjNjBiZmIzLi4yNzU3YzU2IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvbW0vcGd0YWJsZS5jCisrKyBiL2FyY2gvczM5MC9tbS9wZ3RhYmxlLmMKQEAgLTI3OSw3ICsyNzksMTAgQEAKIAkvKiBsZXRzIGNoZWNrIGlmIHdlIGFyZSBhbGxvd2VkIHRvIHJlcGxhY2UgdGhlIG1tICovCiAJdGFza19sb2NrKHRzayk7CiAJaWYgKCF0c2stPm1tIHx8IGF0b21pY19yZWFkKCZ0c2stPm1tLT5tbV91c2VycykgPiAxIHx8Ci0JICAgIHRzay0+bW0gIT0gdHNrLT5hY3RpdmVfbW0gfHwgIWhsaXN0X2VtcHR5KCZ0c2stPm1tLT5pb2N0eF9saXN0KSkgeworI2lmZGVmIENPTkZJR19BSU8KKwkgICAgIWhsaXN0X2VtcHR5KCZ0c2stPm1tLT5pb2N0eF9saXN0KSB8fAorI2VuZGlmCisJICAgIHRzay0+bW0gIT0gdHNrLT5hY3RpdmVfbW0pIHsKIAkJdGFza191bmxvY2sodHNrKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtMjk1LDcgKzI5OCwxMCBAQAogCS8qIE5vdyBsZXRzIGNoZWNrIGFnYWluIGlmIHNvbWV0aGluZyBoYXBwZW5lZCAqLwogCXRhc2tfbG9jayh0c2spOwogCWlmICghdHNrLT5tbSB8fCBhdG9taWNfcmVhZCgmdHNrLT5tbS0+bW1fdXNlcnMpID4gMSB8fAotCSAgICB0c2stPm1tICE9IHRzay0+YWN0aXZlX21tIHx8ICFobGlzdF9lbXB0eSgmdHNrLT5tbS0+aW9jdHhfbGlzdCkpIHsKKyNpZmRlZiBDT05GSUdfQUlPCisJICAgICFobGlzdF9lbXB0eSgmdHNrLT5tbS0+aW9jdHhfbGlzdCkgfHwKKyNlbmRpZgorCSAgICB0c2stPm1tICE9IHRzay0+YWN0aXZlX21tKSB7CiAJCW1tcHV0KG1tKTsKIAkJdGFza191bmxvY2sodHNrKTsKIAkJcmV0dXJuIC1FSU5WQUw7CmRpZmYgLS1naXQgYS9hcmNoL3NoL0tjb25maWcgYi9hcmNoL3NoL0tjb25maWcKaW5kZXggYjk0MDQyNC4uODhjZGViOSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9LY29uZmlnCisrKyBiL2FyY2gvc2gvS2NvbmZpZwpAQCAtMzcsNyArMzcsNiBAQAogCXNlbGVjdCBIQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JECiAJc2VsZWN0IEhBVkVfRFlOQU1JQ19GVFJBQ0UKIAlzZWxlY3QgSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVAotCXNlbGVjdCBIQVZFX0ZUUkFDRV9TWVNDQUxMUwogCXNlbGVjdCBIQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUgogCXNlbGVjdCBIQVZFX0FSQ0hfS0dEQgogCXNlbGVjdCBBUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFIGlmIE1NVQpAQCAtMTIyLDYgKzEyMSw5IEBACiAJYm9vbAogCXNlbGVjdCBBUkNIX1NVU1BFTkRfUE9TU0lCTEUKIAorY29uZmlnIFNZU19TVVBQT1JUU19IVUdFVExCRlMKKwlib29sCisKIGNvbmZpZyBTWVNfU1VQUE9SVFNfU01QCiAJYm9vbAogCkBAIC0xOTYsNiArMTk4LDcgQEAKIAlzZWxlY3QgQ1BVX0hBU19TUl9SQgogCXNlbGVjdCBDUFVfSEFTX0ZQVSBpZiAhQ1BVX1NINEFMX0RTUAogCXNlbGVjdCBTWVNfU1VQUE9SVFNfVE1VCisJc2VsZWN0IFNZU19TVVBQT1JUU19IVUdFVExCRlMgaWYgTU1VCiAKIGNvbmZpZyBDUFVfU0g0QQogCWJvb2wKQEAgLTIxMCw2ICsyMTMsNyBAQAogCWJvb2wKIAlzZWxlY3QgQ1BVX0hBU19GUFUKIAlzZWxlY3QgU1lTX1NVUFBPUlRTX1RNVQorCXNlbGVjdCBTWVNfU1VQUE9SVFNfSFVHRVRMQkZTIGlmIE1NVQogCiBjb25maWcgQ1BVX1NIWDIKIAlib29sCmRpZmYgLS1naXQgYS9hcmNoL3NoL01ha2VmaWxlIGIvYXJjaC9zaC9NYWtlZmlsZQppbmRleCBmYzUxYTkxLi42NmU0MGFhIDEwMDY0NAotLS0gYS9hcmNoL3NoL01ha2VmaWxlCisrKyBiL2FyY2gvc2gvTWFrZWZpbGUKQEAgLTE5OSw3ICsxOTksNyBAQAogbGlicy0kKENPTkZJR19TVVBFUkgzMikJCTo9IGFyY2gvc2gvbGliLwkkKGxpYnMteSkKIGxpYnMtJChDT05GSUdfU1VQRVJINjQpCQk6PSBhcmNoL3NoL2xpYjY0LyAkKGxpYnMteSkKIAotQk9PVF9UQVJHRVRTID0gdUltYWdlIHVJbWFnZS5iejIgdUltYWdlLmd6IHVJbWFnZS5sem1hIHVJbWFnZS5zcmVjIFwKK0JPT1RfVEFSR0VUUyA9IHVJbWFnZSB1SW1hZ2UuYnoyIHVJbWFnZS5neiB1SW1hZ2UubHptYSB1SW1hZ2Uuc3JlYyB1SW1hZ2UuYmluIFwKIAkgICAgICAgekltYWdlIHZtbGludXguc3JlYyByb21JbWFnZQogUEhPTlkgKz0gbWFrZXRvb2xzICQoQk9PVF9UQVJHRVRTKSBGT1JDRQogCkBAIC0yMjUsNiArMjI1LDcgQEAKIAlAZWNobyAnICB2bWxpbnV4LnNyZWMJICAgICAgICAgICAtIENyZWF0ZSBhbiBFTEYgUy1yZWNvcmQnCiAJQGVjaG8gJyogdUltYWdlICAJICAgICAgICAgICAtIEFsaWFzIHRvIGJvb3RhYmxlIFUtQm9vdCBpbWFnZScKIAlAZWNobyAnICB1SW1hZ2Uuc3JlYwkgICAgICAgICAgIC0gQ3JlYXRlIGFuIFMtcmVjb3JkIGZvciBVLUJvb3QnCisJQGVjaG8gJyAgdUltYWdlLmJpbgkgICAgICAgICAgIC0gS2VybmVsLW9ubHkgaW1hZ2UgZm9yIFUtQm9vdCAoYmluKScKIAlAZWNobyAnKiB1SW1hZ2UuZ3oJICAgICAgICAgICAtIEtlcm5lbC1vbmx5IGltYWdlIGZvciBVLUJvb3QgKGd6aXApJwogCUBlY2hvICcgIHVJbWFnZS5iejIJICAgICAgICAgICAtIEtlcm5lbC1vbmx5IGltYWdlIGZvciBVLUJvb3QgKGJ6aXAyKScKIAlAZWNobyAnICB1SW1hZ2UubHptYQkgICAgICAgICAgIC0gS2VybmVsLW9ubHkgaW1hZ2UgZm9yIFUtQm9vdCAobHptYSknCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9ib2FyZC1tYWdpY3BhbmVscjIuYyBiL2FyY2gvc2gvYm9hcmRzL2JvYXJkLW1hZ2ljcGFuZWxyMi5jCmluZGV4IDBhMzdjOGIuLjk5ZmZjNWYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL2JvYXJkLW1hZ2ljcGFuZWxyMi5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL2JvYXJkLW1hZ2ljcGFuZWxyMi5jCkBAIC0yMDUsOCArMjA1LDYgQEAKIAogc3RhdGljIHZvaWQgX19pbml0IG1wcjJfc2V0dXAoY2hhciAqKmNtZGxpbmVfcCkKIHsKLQlfX3NldF9pb19wb3J0X2Jhc2UoMHhhMDAwMDAwMCk7Ci0KIAkvKiBzZXQgUGluIFNlbGVjdCBSZWdpc3RlciBBOgogCSAqIC9QQ0NfQ0QxLCAvUENDX0NEMiwgIFBDQ19CVkQxLCBQQ0NfQlZEMiwKIAkgKiAvSU9JUzE2LCAgSVJRNCwJSVJRNSwJICBVU0IxZF9TVVNQRU5ECmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWRyZWFtY2FzdC9zZXR1cC5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1kcmVhbWNhc3Qvc2V0dXAuYwppbmRleCBlYmU5OTIyLi5hNGI3NDAyIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWRyZWFtY2FzdC9zZXR1cC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtZHJlYW1jYXN0L3NldHVwLmMKQEAgLTQyLDggKzQyLDYgQEAKIAkvKiBBY2tub3dsZWRnZSBhbnkgcHJldmlvdXMgZXZlbnRzICovCiAJLyogWFhYICovCiAKLQlfX3NldF9pb19wb3J0X2Jhc2UoMHhhMDAwMDAwMCk7Ci0KIAkvKiBBc3NpZ24gYWxsIHZpcnR1YWwgSVJRcyB0byB0aGUgU3lzdGVtIEFTSUMgaW50LiBoYW5kbGVyICovCiAJZm9yIChpID0gSFdfRVZFTlRfSVJRX0JBU0U7IGkgPCBIV19FVkVOVF9JUlFfTUFYOyBpKyspCiAJCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcihpLCAmc3lzdGVtYXNpY19pbnQsCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWVjb3ZlYzI0L3NldHVwLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWVjb3ZlYzI0L3NldHVwLmMKaW5kZXggOTZiYzE2OS4uM2IxY2ViNCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1lY292ZWMyNC9zZXR1cC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtZWNvdmVjMjQvc2V0dXAuYwpAQCAtMTgsNiArMTgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvdXNiL3I4YTY2NTk3Lmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvaTJjL3RzYzIwMDcuaD4KICNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgogI2luY2x1ZGUgPHZpZGVvL3NoX21vYmlsZV9sY2RjLmg+CiAjaW5jbHVkZSA8bWVkaWEvc2hfbW9iaWxlX2NldS5oPgpAQCAtMzgsNiArMzksMjAgQEAKICAqICAweDE4MDBfMDAwMCAgTUZJICAgICAgICAgICAgICAxNmJpdAogICovCiAKKy8qIFNXSVRDSAorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIERTMlsxXSA9IEZsYXNoUk9NIHdyaXRlIHByb3RlY3QgIE9OICAgICA6IHdyaXRlIHByb3RlY3QKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9GRiAgICA6IE5vIHdyaXRlIHByb3RlY3QKKyAqIERTMlsyXSA9IFJNSUkgLyBUUywgU0NJRiAgICAgICAgIE9OICAgICA6IFJNSUkKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9GRiAgICA6IFRTLCBTQ0lGMworICogRFMyWzNdID0gQ2FtZXJhIC8gVmlkZW8gICAgICAgICAgT04gICAgIDogQ2FtZXJhCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPRkYgICAgOiBOVFNDL1BBTCAoSU4pCisgKiBEUzJbNV0gPSBOVFNDX09VVCBDbG9jayAgICAgICAgICBPTiAgICAgOiBPbiBib2FyZCBPU0MKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9GRiAgICA6IFNINzcyNCBEVl9DTEsKKyAqIERTMls2LTddID0gTU1DIC8gU0QgICAgICAgICAgICAgIE9OLU9GRiA6IFNECisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPRkYtT04gOiBNTUMKKyAqLworCiAvKiBIZWFydGJlYXQgKi8KIHN0YXRpYyB1bnNpZ25lZCBjaGFyIGxlZF9wb3NbXSA9IHsgMCwgMSwgMiwgMyB9Owogc3RhdGljIHN0cnVjdCBoZWFydGJlYXRfZGF0YSBoZWFydGJlYXRfZGF0YSA9IHsKQEAgLTcwLDcgKzg1LDcgQEAKIAkJLm5hbWUgPSAiYm9vdCBsb2FkZXIiLAogCQkub2Zmc2V0ID0gMCwKIAkJLnNpemUgPSAoNSAqIDEwMjQgKiAxMDI0KSwKLQkJLm1hc2tfZmxhZ3MgPSBNVERfQ0FQX1JPTSwKKwkJLm1hc2tfZmxhZ3MgPSBNVERfV1JJVEVBQkxFLCAgLyogZm9yY2UgcmVhZC1vbmx5ICovCiAJfSwgewogCQkubmFtZSA9ICJmcmVlLWFyZWEiLAogCQkub2Zmc2V0ID0gTVREUEFSVF9PRlNfQVBQRU5ELApAQCAtMTIxLDYgKzEzNiw3IEBACiBzdHJ1Y3Qgc2hfZXRoX3BsYXRfZGF0YSBzaF9ldGhfcGxhdCA9IHsKIAkucGh5ID0gMHgxZiwgLyogU01TQyBMQU44NzAwICovCiAJLmVkbWFjX2VuZGlhbiA9IEVETUFDX0xJVFRMRV9FTkRJQU4sCisJLmV0aGVyX2xpbmtfYWN0aXZlX2xvdyA9IDEKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNoX2V0aF9kZXZpY2UgPSB7CkBAIC0zNzUsNiArMzkxLDQzIEBACiAJfSwKIH07CiAKKy8qIFRvdWNoU2NyZWVuICovCisjZGVmaW5lIElSUTAgMzIKK3N0YXRpYyBpbnQgdHNfZ2V0X3BlbmRvd25fc3RhdGUodm9pZCkKK3sKKwlpbnQgdmFsID0gMDsKKwlncGlvX2ZyZWUoR1BJT19GTl9JTlRDX0lSUTApOworCWdwaW9fcmVxdWVzdChHUElPX1BUWjAsIE5VTEwpOworCWdwaW9fZGlyZWN0aW9uX2lucHV0KEdQSU9fUFRaMCk7CisKKwl2YWwgPSBncGlvX2dldF92YWx1ZShHUElPX1BUWjApOworCisJZ3Bpb19mcmVlKEdQSU9fUFRaMCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fSU5UQ19JUlEwLCBOVUxMKTsKKworCXJldHVybiB2YWwgPyAwIDogMTsKK30KKworc3RhdGljIGludCB0c19pbml0KHZvaWQpCit7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fSU5UQ19JUlEwLCBOVUxMKTsKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IHRzYzIwMDdfcGxhdGZvcm1fZGF0YSB0c2MyMDA3X2luZm8gPSB7CisJLm1vZGVsCQkJPSAyMDA3LAorCS54X3BsYXRlX29obXMJCT0gMTgwLAorCS5nZXRfcGVuZG93bl9zdGF0ZQk9IHRzX2dldF9wZW5kb3duX3N0YXRlLAorCS5pbml0X3BsYXRmb3JtX2h3CT0gdHNfaW5pdCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gdHNfaTJjX2NsaWVudHMgPSB7CisJSTJDX0JPQVJEX0lORk8oInRzYzIwMDciLCAweDQ4KSwKKwkudHlwZQkJPSAidHNjMjAwNyIsCisJLnBsYXRmb3JtX2RhdGEJPSAmdHNjMjAwN19pbmZvLAorCS5pcnEJCT0gSVJRMCwKK307CisKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICplY292ZWNfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CiAJJmhlYXJ0YmVhdF9kZXZpY2UsCiAJJm5vcl9mbGFzaF9kZXZpY2UsCkBAIC00NTksNiArNTEyLDExIEBACiAjZGVmaW5lIElPRFJJVkVBICAweEE0MDUwMThBCiBzdGF0aWMgaW50IF9faW5pdCBhcmNoX3NldHVwKHZvaWQpCiB7CisJLyogZW5hYmxlIFNUQVRVUzAsIFNUQVRVUzIgYW5kIFBEU1RBVFVTICovCisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fU1RBVFVTMCwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fU1RBVFVTMiwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fUERTVEFUVVMsIE5VTEwpOworCiAJLyogZW5hYmxlIFNDSUZBMCAqLwogCWdwaW9fcmVxdWVzdChHUElPX0ZOX1NDSUYwX1RYRCwgTlVMTCk7CiAJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fU0NJRjBfUlhELCBOVUxMKTsKQEAgLTU4OSw2ICs2NDcsMTAgQEAKIAkJICovCiAJCWdwaW9fcmVxdWVzdChHUElPX1BURjQsIE5VTEwpOwogCQlncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19QVEY0LCAxKTsKKworCQkvKiBlbmFibGUgVG91Y2hTY3JlZW4gKi8KKwkJaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMCwgJnRzX2kyY19jbGllbnRzLCAxKTsKKwkJc2V0X2lycV90eXBlKElSUTAsIElSUV9UWVBFX0xFVkVMX0xPVyk7CiAJfQogCiAJLyogZW5hYmxlIENFVTAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtbGFuZGlzay9naW8uYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtbGFuZGlzay9naW8uYwppbmRleCAyNWNkZjczLi41MjgwMTMxIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWxhbmRpc2svZ2lvLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1sYW5kaXNrL2dpby5jCkBAIC0xNCw3ICsxNCw2IEBACiAgKi8KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9rZGV2X3QuaD4KICNpbmNsdWRlIDxsaW51eC9jZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KQEAgLTM1LDcgKzM0LDcgQEAKIAlpbnQgbWlub3I7CiAJaW50IHJldCA9IC1FTk9FTlQ7CiAKLQlsb2NrX2tlcm5lbCgpOworCXByZWVtcHRfZGlzYWJsZSgpOwogCW1pbm9yID0gTUlOT1IoaW5vZGUtPmlfcmRldik7CiAJaWYgKG1pbm9yIDwgREVWQ09VTlQpIHsKIAkJaWYgKG9wZW5DbnQgPiAwKSB7CkBAIC00NSw3ICs0NCw3IEBACiAJCQlyZXQgPSAwOwogCQl9CiAJfQotCXVubG9ja19rZXJuZWwoKTsKKwlwcmVlbXB0X2VuYWJsZSgpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTYwLDggKzU5LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBnaW9faW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHAsCi0JCQkgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQorc3RhdGljIGxvbmcgZ2lvX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKIAl1bnNpZ25lZCBpbnQgZGF0YTsKIAlzdGF0aWMgdW5zaWduZWQgaW50IGFkZHIgPSAwOwpAQCAtMTI5LDcgKzEyNyw3IEBACiAJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLm9wZW4gPSBnaW9fb3BlbiwJLyogb3BlbiAqLwogCS5yZWxlYXNlID0gZ2lvX2Nsb3NlLAkvKiByZWxlYXNlICovCi0JLmlvY3RsID0gZ2lvX2lvY3RsLAkvKiBpb2N0bCAqLworCS51bmxvY2tlZF9pb2N0bCA9IGdpb19pb2N0bCwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IGdpb19pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXJzay9kZXZpY2VzLXJzazcyMDMuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtcnNrL2RldmljZXMtcnNrNzIwMy5jCmluZGV4IDRhZjNhNzcuLmMzNzYxN2UgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtcnNrL2RldmljZXMtcnNrNzIwMy5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtcnNrL2RldmljZXMtcnNrNzIwMy5jCkBAIC0xMSwxMCArMTEsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgotI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+Ci0jaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KLSNpbmNsdWRlIDxsaW51eC9tdGQvbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvc21zYzkxMXguaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAjaW5jbHVkZSA8bGludXgvbGVkcy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1yc2svc2V0dXAuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtcnNrL3NldHVwLmMKaW5kZXggYWY2NGQwMy4uYTVjMGRmNyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1yc2svc2V0dXAuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXJzay9zZXR1cC5jCkBAIC0xNSwxNCArMTUsMTIgQEAKICNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgorI2lmZGVmIENPTkZJR19NVEQKICNpbmNsdWRlIDxsaW51eC9tdGQvbWFwLmg+CisjZW5kaWYKICNpbmNsdWRlIDxhc20vbWFjaHZlYy5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogCi1zdGF0aWMgY29uc3QgY2hhciAqcHJvYmVzW10gPSB7ICJjbWRsaW5lcGFydCIsIE5VTEwgfTsKLQotc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uICpwYXJzZWRfcGFydGl0aW9uczsKLQogc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIHJza19wYXJ0aXRpb25zW10gPSB7CiAJewogCQkubmFtZQkJPSAiQm9vdGxvYWRlciIsCkBAIC00MSw2ICszOSw4IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IHBoeXNtYXBfZmxhc2hfZGF0YSBmbGFzaF9kYXRhID0geworCS5wYXJ0cwkJPSByc2tfcGFydGl0aW9ucywKKwkubnJfcGFydHMJPSBBUlJBWV9TSVpFKHJza19wYXJ0aXRpb25zKSwKIAkud2lkdGgJCT0gMiwKIH07CiAKQEAgLTYwLDcgKzYwLDggQEAKIAl9LAogfTsKIAotc3RhdGljIHN0cnVjdCBtdGRfaW5mbyAqZmxhc2hfbXRkOworI2lmZGVmIENPTkZJR19NVEQKK3N0YXRpYyBjb25zdCBjaGFyICpwcm9iZXNbXSA9IHsgImNtZGxpbmVwYXJ0IiwgTlVMTCB9OwogCiBzdGF0aWMgc3RydWN0IG1hcF9pbmZvIHJza19mbGFzaF9tYXAgPSB7CiAJLm5hbWUJCT0gIlJTSysgRmxhc2giLApAQCAtNjgsNiArNjksMTAgQEAKIAkuYmFua3dpZHRoCT0gMiwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgbXRkX2luZm8gKmZsYXNoX210ZDsKKworc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uICpwYXJzZWRfcGFydGl0aW9uczsKKwogc3RhdGljIHZvaWQgX19pbml0IHNldF9tdGRfcGFydGl0aW9ucyh2b2lkKQogewogCWludCBucl9wYXJ0cyA9IDA7CkBAIC03NywxNCArODIsMTQgQEAKIAlucl9wYXJ0cyA9IHBhcnNlX210ZF9wYXJ0aXRpb25zKGZsYXNoX210ZCwgcHJvYmVzLAogCQkJCQkmcGFyc2VkX3BhcnRpdGlvbnMsIDApOwogCS8qIElmIHRoZXJlIGlzIG5vIHBhcnRpdGlvbiB0YWJsZSwgdXNlZCB0aGUgaGFyZCBjb2RlZCB0YWJsZSAqLwotCWlmIChucl9wYXJ0cyA8PSAwKSB7Ci0JCWZsYXNoX2RhdGEucGFydHMgPSByc2tfcGFydGl0aW9uczsKLQkJZmxhc2hfZGF0YS5ucl9wYXJ0cyA9IEFSUkFZX1NJWkUocnNrX3BhcnRpdGlvbnMpOwotCX0gZWxzZSB7CisJaWYgKG5yX3BhcnRzID4gMCkgewogCQlmbGFzaF9kYXRhLm5yX3BhcnRzID0gbnJfcGFydHM7CiAJCWZsYXNoX2RhdGEucGFydHMgPSBwYXJzZWRfcGFydGl0aW9uczsKIAl9CiB9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIHNldF9tdGRfcGFydGl0aW9ucyh2b2lkKSB7fQorI2VuZGlmCiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpyc2tfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CiAJJmZsYXNoX2RldmljZSwKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtc2UvNzcyNC9zZXR1cC5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZS83NzI0L3NldHVwLmMKaW5kZXggMDA5NzNlMC4uZTc4YzNiZSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZS83NzI0L3NldHVwLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZS83NzI0L3NldHVwLmMKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlIDxsaW51eC91c2IvcjhhNjY1OTcuaD4KICNpbmNsdWRlIDx2aWRlby9zaF9tb2JpbGVfbGNkYy5oPgogI2luY2x1ZGUgPG1lZGlhL3NoX21vYmlsZV9jZXUuaD4KKyNpbmNsdWRlIDxzb3VuZC9zaF9mc2kuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vaGVhcnRiZWF0Lmg+CiAjaW5jbHVkZSA8YXNtL3NoX2V0aC5oPgpAQCAtMjU1LDYgKzI1Niw2NSBAQAogCX0sCiB9OwogCisvKiBGU0kgKi8KKy8qCisgKiBGU0ktQSB1c2UgZXh0ZXJuYWwgY2xvY2sgd2hpY2ggY2FtZSBmcm9tIGFrNDY0eC4KKyAqIFNvLCB3ZSBzaG91bGQgY2hhbmdlIHBhcmVudCBvZiBmc2kKKyAqLworI2RlZmluZSBGQ0xLQUNSCQkweGE0MTUwMDA4CitzdGF0aWMgdm9pZCBmc2ltY2tfaW5pdChzdHJ1Y3QgY2xrICpjbGspCit7CisJdTMyIHN0YXR1cyA9IGN0cmxfaW5sKGNsay0+ZW5hYmxlX3JlZyk7CisKKwkvKiB1c2UgZXh0ZXJuYWwgY2xvY2sgKi8KKwlzdGF0dXMgJj0gfjB4MDAwMDAwZmY7CisJc3RhdHVzIHw9IDB4MDAwMDAwODA7CisJY3RybF9vdXRsKHN0YXR1cywgY2xrLT5lbmFibGVfcmVnKTsKK30KKworc3RhdGljIHN0cnVjdCBjbGtfb3BzIGZzaW1ja19jbGtfb3BzID0geworCS5pbml0ID0gZnNpbWNrX2luaXQsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBmc2ltY2thX2NsayA9IHsKKwkubmFtZQkJPSAiZnNpbWNrYV9jbGsiLAorCS5pZAkJPSAtMSwKKwkub3BzCQk9ICZmc2ltY2tfY2xrX29wcywKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKilGQ0xLQUNSLAorCS5yYXRlCQk9IDAsIC8qIHVua25vd24gKi8KK307CisKK3N0cnVjdCBzaF9mc2lfcGxhdGZvcm1faW5mbyBmc2lfaW5mbyA9IHsKKwkucG9ydGFfZmxhZ3MgPSBTSF9GU0lfQlJTX0lOViB8CisJCSAgICAgICBTSF9GU0lfT1VUX1NMQVZFX01PREUgfAorCQkgICAgICAgU0hfRlNJX0lOX1NMQVZFX01PREUgfAorCQkgICAgICAgU0hfRlNJX09GTVQoUENNKSB8CisJCSAgICAgICBTSF9GU0lfSUZNVChQQ00pLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBmc2lfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkubmFtZQk9ICJGU0kiLAorCQkuc3RhcnQJPSAweEZFM0MwMDAwLAorCQkuZW5kCT0gMHhGRTNDMDIxZCwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydCAgPSAxMDgsCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZnNpX2RldmljZSA9IHsKKwkubmFtZQkJPSAic2hfZnNpIiwKKwkuaWQJCT0gMCwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoZnNpX3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gZnNpX3Jlc291cmNlcywKKwkuZGV2CT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZmc2lfaW5mbywKKwl9LAorfTsKKwogLyogS0VZU0MgaW4gU29DIChOZWVkcyBTVzMzLTIgc2V0IHRvIE9OKSAqLwogc3RhdGljIHN0cnVjdCBzaF9rZXlzY19pbmZvIGtleXNjX2luZm8gPSB7CiAJLm1vZGUgPSBTSF9LRVlTQ19NT0RFXzEsCkBAIC0zOTksNiArNDU5LDcgQEAKIAkmc2hfZXRoX2RldmljZSwKIAkmc2g3NzI0X3VzYjBfaG9zdF9kZXZpY2UsCiAJJnNoNzcyNF91c2IxX2dhZGdldF9kZXZpY2UsCisJJmZzaV9kZXZpY2UsCiB9OwogCiAjZGVmaW5lIEVFUFJPTV9PUCAgIDB4QkEyMDYwMDAKQEAgLTQ2NiwxMSArNTI3LDEzIEBACiBzdGF0aWMgaW50IF9faW5pdCBkZXZpY2VzX3NldHVwKHZvaWQpCiB7CiAJdTE2IHN3ID0gY3RybF9pbncoU1c0MTQwKTsgLyogc2VsZWN0IGNhbWVyYSwgbW9uaXRvciAqLworCXN0cnVjdCBjbGsgKmZzaWFfY2xrOwogCiAJLyogUmVzZXQgUmVsZWFzZSAqLwogCWN0cmxfb3V0dyhjdHJsX2ludyhGUEdBX09VVCkgJgogCQkgIH4oKDEgPDwgMSkgIHwgLyogTEFOICovCiAJCSAgICAoMSA8PCA2KSAgfCAvKiBWSURFTyBEQUMgKi8KKwkJICAgICgxIDw8IDcpICB8IC8qIEFLNDY0MyAqLwogCQkgICAgKDEgPDwgMTIpIHwgLyogVVNCMCAqLwogCQkgICAgKDEgPDwgMTQpKSwgLyogUk1JSSAqLwogCQkgIEZQR0FfT1VUKTsKQEAgLTYwOSw2ICs2NzIsMzIgQEAKIAlncGlvX3JlcXVlc3QoR1BJT19GTl9LRVlPVVQxLCAgICAgTlVMTCk7CiAJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fS0VZT1VUMCwgICAgIE5VTEwpOwogCisJLyogZW5hYmxlIEZTSSAqLworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0ZTSU1DS0IsICAgIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0ZTSU1DS0EsICAgIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0ZTSU9BU0QsICAgIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0ZTSUlBQkNLLCAgIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0ZTSUlBTFJDSywgIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0ZTSU9BQkNLLCAgIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0ZTSU9BTFJDSywgIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0NMS0FVRElPQU8sIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0ZTSUlCU0QsICAgIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0ZTSU9CU0QsICAgIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0ZTSUlCQkNLLCAgIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0ZTSUlCTFJDSywgIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0ZTSU9CQkNLLCAgIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0ZTSU9CTFJDSywgIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0NMS0FVRElPQk8sIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0ZTSUlBU0QsICAgIE5VTEwpOworCisJLyogY2hhbmdlIHBhcmVudCBvZiBGU0kgQSAqLworCWZzaWFfY2xrID0gY2xrX2dldChOVUxMLCAiZnNpYV9jbGsiKTsKKwljbGtfcmVnaXN0ZXIoJmZzaW1ja2FfY2xrKTsKKwljbGtfc2V0X3BhcmVudChmc2lhX2NsaywgJmZzaW1ja2FfY2xrKTsKKwljbGtfc2V0X3JhdGUoZnNpYV9jbGssIDExMDAwKTsKKwljbGtfc2V0X3JhdGUoJmZzaW1ja2FfY2xrLCAxMTAwMCk7CisJY2xrX3B1dChmc2lhX2Nsayk7CisKIAkvKgogCSAqIGVuYWJsZSBTSC1FdGgKIAkgKgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib290L01ha2VmaWxlIGIvYXJjaC9zaC9ib290L01ha2VmaWxlCmluZGV4IGExMzE2ODcuLmNiOGNmNTUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9vdC9NYWtlZmlsZQorKysgYi9hcmNoL3NoL2Jvb3QvTWFrZWZpbGUKQEAgLTIwLDExICsyMCwxMiBAQAogQ09ORklHX1pFUk9fUEFHRV9PRkZTRVQJPz0gMHgwMDAwMTAwMAogQ09ORklHX0VOVFJZX09GRlNFVAk/PSAweDAwMDAxMDAwCiAKK3N1ZmZpeC15IDo9IGJpbgogc3VmZml4LSQoQ09ORklHX0tFUk5FTF9HWklQKSAgOj0gZ3oKIHN1ZmZpeC0kKENPTkZJR19LRVJORUxfQlpJUDIpIDo9IGJ6Mgogc3VmZml4LSQoQ09ORklHX0tFUk5FTF9MWk1BKSAgOj0gbHptYQogCi10YXJnZXRzIDo9IHpJbWFnZSB2bWxpbnV4LnNyZWMgcm9tSW1hZ2UgdUltYWdlIHVJbWFnZS5zcmVjIHVJbWFnZS5neiB1SW1hZ2UuYnoyIHVJbWFnZS5sem1hCit0YXJnZXRzIDo9IHpJbWFnZSB2bWxpbnV4LnNyZWMgcm9tSW1hZ2UgdUltYWdlIHVJbWFnZS5zcmVjIHVJbWFnZS5neiB1SW1hZ2UuYnoyIHVJbWFnZS5sem1hIHVJbWFnZS5iaW4KIGV4dHJhLXkgKz0gdm1saW51eC5iaW4gdm1saW51eC5iaW4uZ3ogdm1saW51eC5iaW4uYnoyIHZtbGludXguYmluLmx6bWEKIHN1YmRpci0gOj0gY29tcHJlc3NlZCByb21pbWFnZQogCkBAIC04OCw2ICs4OSw5IEBACiAkKG9iaikvdUltYWdlLmx6bWE6ICQob2JqKS92bWxpbnV4LmJpbi5sem1hCiAJJChjYWxsIGlmX2NoYW5nZWQsdWltYWdlLGx6bWEpCiAKKyQob2JqKS91SW1hZ2UuYmluOiAkKG9iaikvdm1saW51eC5iaW4KKwkkKGNhbGwgaWZfY2hhbmdlZCx1aW1hZ2Usbm9uZSkKKwogT0JKQ09QWUZMQUdTX3ZtbGludXguc3JlYyA6PSAtSSBiaW5hcnkgLU8gc3JlYwogJChvYmopL3ZtbGludXguc3JlYzogJChvYmopL2NvbXByZXNzZWQvdm1saW51eAogCSQoY2FsbCBpZl9jaGFuZ2VkLG9iamNvcHkpCmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3MvYXAzMjVyeGFfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL2FwMzI1cnhhX2RlZmNvbmZpZwppbmRleCA2YzM4YTQzLi4yZjc4ZDAxIDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3MvYXAzMjVyeGFfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9hcDMyNXJ4YV9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzAKLSMgVGh1IEp1biAxOCAxNjowNDoxMSAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEKKyMgRnJpIFNlcCAyNSAxMToyMjo1MCAyMDA5CiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0xNCw2ICsxNCw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CitDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX0dFTkVSSUNfR1BJTz15CiBDT05GSUdfR0VORVJJQ19USU1FPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKQEAgLTI4LDcgKzI5LDkgQEAKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CiBDT05GSUdfQVJDSF9IQVNfREVGQVVMVF9JRExFPXkKK0NPTkZJR19BUkNIX0hBU19DUFVfSURMRV9XQUlUPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCitDT05GSUdfQ09OU1RSVUNUT1JTPXkKIAogIwogIyBHZW5lcmFsIHNldHVwCkBAIC0zOSw2ICs0MiwxMiBAQAogQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgogQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgogIyBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE8gaXMgbm90IHNldAorQ09ORklHX0hBVkVfS0VSTkVMX0daSVA9eQorQ09ORklHX0hBVkVfS0VSTkVMX0JaSVAyPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9MWk1BPXkKK0NPTkZJR19LRVJORUxfR1pJUD15CisjIENPTkZJR19LRVJORUxfQlpJUDIgaXMgbm90IHNldAorIyBDT05GSUdfS0VSTkVMX0xaTUEgaXMgbm90IHNldAogQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKQEAgLTUxLDExICs2MCwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfR1JPVVBfU0NIRUQ9eQpAQCAtODgsMTggKzk4LDE5IEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQogQ09ORklHX0hBVkVfS1BST0JFUz15CkBAIC0xMDcsNiArMTE4LDEwIEBACiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CiBDT05GSUdfSEFWRV9DTEs9eQogQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCiAjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAogQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQogQ09ORklHX1NMQUJJTkZPPXkKQEAgLTExOSw3ICsxMzQsNyBAQAogIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKIENPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAorQ09ORklHX0xCREFGPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIApAQCAtMTM1LDcgKzE1MCw3IEBACiBDT05GSUdfREVGQVVMVF9DRlE9eQogIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKLSMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAorQ09ORklHX0ZSRUVaRVI9eQogCiAjCiAjIFN5c3RlbSB0eXBlCkBAIC0xNjksNiArMTg0LDcgQEAKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINF8yMDIgaXMgbm90IHNldAogQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMz15CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjQgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzU3IGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwIGlzIG5vdCBzZXQKQEAgLTIxNSw2ICsyMzEsNyBAQAogQ09ORklHX05SX1FVSUNLPTIKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogCiAjCkBAIC0yOTYsNyArMzEzLDggQEAKIENPTkZJR19aRVJPX1BBR0VfT0ZGU0VUPTB4MDAwMDEwMDAKIENPTkZJR19CT09UX0xJTktfT0ZGU0VUPTB4MDA4MDAwMDAKIENPTkZJR19FTlRSWV9PRkZTRVQ9MHgwMDAwMTAwMAotQ09ORklHX0NNRExJTkVfQk9PTD15CitDT05GSUdfQ01ETElORV9PVkVSV1JJVEU9eQorIyBDT05GSUdfQ01ETElORV9FWFRFTkQgaXMgbm90IHNldAogQ09ORklHX0NNRExJTkU9ImNvbnNvbGU9dHR5MSBjb25zb2xlPXR0eVNDNSwzODQwMCByb290PS9kZXYvbmZzIGlwPWRoY3AiCiAKICMKQEAgLTMxNiw3ICszMzQsMTMgQEAKICMKICMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zIChFWFBFUklNRU5UQUwpCiAjCi0jIENPTkZJR19QTSBpcyBub3Qgc2V0CitDT05GSUdfUE09eQorIyBDT05GSUdfUE1fREVCVUcgaXMgbm90IHNldAorQ09ORklHX1BNX1NMRUVQPXkKK0NPTkZJR19TVVNQRU5EPXkKK0NPTkZJR19TVVNQRU5EX0ZSRUVaRVI9eQorIyBDT05GSUdfSElCRVJOQVRJT04gaXMgbm90IHNldAorQ09ORklHX1BNX1JVTlRJTUU9eQogIyBDT05GSUdfQ1BVX0lETEUgaXMgbm90IHNldAogQ09ORklHX05FVD15CiAKQEAgLTM2NCw2ICszODgsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTM5Myw2ICs0MTgsNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CkBAIC00MDAsNyArNDI2LDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtNDEzLDYgKzQzOCw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiBDT05GSUdfRldfTE9BREVSPXkKQEAgLTQyMiw5ICs0NDgsOSBAQAogIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NPTkNBVD15CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ01ETElORV9QQVJUUz15CiAjIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKQEAgLTQ4MCw2ICs1MDYsNyBAQAogIwogIyBDT05GSUdfTVREX0RBVEFGTEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfTTI1UDgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9TU1QyNUwgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKQEAgLTU4Myw3ICs2MTAsNiBAQAogIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAogQ09ORklHX1NDU0lfTE9XTEVWRUw9eQogIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQk5YMl9JU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUJGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUJGQ09FIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldApAQCAtNjM3LDEyICs2NjMsMTAgQEAKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtNzI2LDYgKzc1MCw3IEBACiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogQ09ORklHX0kyQ19DSEFSREVWPXkKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogCkBAIC03MzYsNiArNzYxLDcgQEAKICMKICMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCiAjCisjIENPTkZJR19JMkNfREVTSUdOV0FSRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfR1BJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKIENPTkZJR19JMkNfU0hfTU9CSUxFPXkKQEAgLTc1Nyw5ICs3ODMsNiBAQAogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKICMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKQEAgLTc4MCw2ICs4MDMsMTEgQEAKICMKICMgQ09ORklHX1NQSV9TUElERVYgaXMgbm90IHNldAogIyBDT05GSUdfU1BJX1RMRTYyWDAgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfUkVRVUlSRV9HUElPTElCPXkKIENPTkZJR19HUElPTElCPXkKICMgQ09ORklHX0dQSU9fU1lTRlMgaXMgbm90IHNldApAQCAtODA0LDExICs4MzIsMTUgQEAKICMKICMgQ09ORklHX0dQSU9fTUFYNzMwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19HUElPX01DUDIzUzA4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fTUMzMzg4MCBpcyBub3Qgc2V0CisKKyMKKyMgQUM5NyBHUElPIGV4cGFuZGVyczoKKyMKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTgyOCw4ICs4NjAsMTIgQEAKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX01DMTM3ODMgaXMgbm90IHNldAorIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfRVpYX1BDQVAgaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NRURJQV9TVVBQT1JUPXkKIApAQCAtOTU3LDYgKzk5Myw4IEBACiAjIE1NQy9TRC9TRElPIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCiAjCiAjIENPTkZJR19NTUNfU0RIQ0kgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX0FUOTEgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX0FUTUVMTUNJIGlzIG5vdCBzZXQKIENPTkZJR19NTUNfU1BJPXkKICMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKQEAgLTk5Miw2ICsxMDMwLDcgQEAKICMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1JYODU4MSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JYODAyNSBpcyBub3Qgc2V0CiAKICMKICMgU1BJIFJUQyBkcml2ZXJzCkBAIC0xMDAzLDYgKzEwNDIsNyBAQAogIyBDT05GSUdfUlRDX0RSVl9SOTcwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1JTNUMzNDggaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9EUzMyMzQgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0YyMTIzIGlzIG5vdCBzZXQKIAogIwogIyBQbGF0Zm9ybSBSVEMgZHJpdmVycwpAQCAtMTA1Niw4ICsxMDk2LDEwIEBACiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0ZTX1BPU0lYX0FDTD15CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtMTEyMiw3ICsxMTY0LDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQpAQCAtMTIwMiw2ICsxMjQzLDcgQEAKICMgQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTIxMiw4ICsxMjU0LDExIEBACiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUPXkKIENPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKK0NPTkZJR19IQVZFX1NZU0NBTExfVFJBQ0VQT0lOVFM9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiAjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CkBAIC0xMjIxLDYgKzEyNjYsNyBAQAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MgaXMgbm90IHNldAogIyBDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RXQVJGX1VOV0lOREVSIGlzIG5vdCBzZXQKIAogIwogIyBTZWN1cml0eSBvcHRpb25zCkBAIC0xMjM0LDcgKzEyODAsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKIENPTkZJR19DUllQVE9fQUxHQVBJMj15CiBDT05GSUdfQ1JZUFRPX0FFQUQyPXkKQEAgLTEyNzUsMTEgKzEzMjAsMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApAQCAtMTM0MSw1ICsxMzg4LDYgQEAKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQorQ09ORklHX0hBVkVfTE1CPXkKIENPTkZJR19OTEFUVFI9eQogQ09ORklHX0dFTkVSSUNfQVRPTUlDNjQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL2RyZWFtY2FzdF9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3MvZHJlYW1jYXN0X2RlZmNvbmZpZwppbmRleCA5NTcxN2EwLi5hZWRiZDRmIDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3MvZHJlYW1jYXN0X2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3MvZHJlYW1jYXN0X2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMAotIyBUaHUgSnVuIDE4IDEyOjI0OjQ4IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMQorIyBUaHUgU2VwIDI0IDE3OjU2OjA3IDIwMDkKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTE0LDYgKzE0LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19JUlFfUEVSX0NQVT15CiAjIENPTkZJR19HRU5FUklDX0dQSU8gaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CkBAIC0yOSw3ICszMCw5IEBACiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQogQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15CitDT05GSUdfQVJDSF9IQVNfQ1BVX0lETEVfV0FJVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtNDAsNiArNDMsMTIgQEAKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIENPTkZJR19MT0NBTFZFUlNJT049IiIKIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfSEFWRV9LRVJORUxfR1pJUD15CitDT05GSUdfSEFWRV9LRVJORUxfQlpJUDI9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTUE9eQorQ09ORklHX0tFUk5FTF9HWklQPXkKKyMgQ09ORklHX0tFUk5FTF9CWklQMiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVJORUxfTFpNQSBpcyBub3Qgc2V0CiBDT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfU1lTVklQQ19TWVNDVEw9eQpAQCAtNTIsMTEgKzYxLDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKICMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKQEAgLTg2LDE5ICs5NiwyMCBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCitDT05GSUdfUEVSRl9FVkVOVFM9eQorIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKIENPTkZJR19QUk9GSUxJTkc9eQotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PUFJPRklMRSBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiAjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKQEAgLTEwOCw2ICsxMTksMTAgQEAKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKIENPTkZJR19IQVZFX0NMSz15CiBDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKICMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CiBDT05GSUdfU0xBQklORk89eQpAQCAtMTIwLDcgKzEzNSw3IEBACiAjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAogQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CitDT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCkBAIC0xNjcsNiArMTgyLDcgQEAKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINF8yMDIgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTcgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc3MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODAgaXMgbm90IHNldApAQCAtMjE4LDYgKzIzNCw3IEBACiBDT05GSUdfTlJfUVVJQ0s9MgogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiAKICMKQEAgLTMyMiw3ICszMzksOCBAQAogQ09ORklHX0JPT1RfTElOS19PRkZTRVQ9MHgwMDgwMDAwMAogQ09ORklHX0VOVFJZX09GRlNFVD0weDAwMDAxMDAwCiAjIENPTkZJR19VQkNfV0FLRVVQIGlzIG5vdCBzZXQKLUNPTkZJR19DTURMSU5FX0JPT0w9eQorQ09ORklHX0NNRExJTkVfT1ZFUldSSVRFPXkKKyMgQ09ORklHX0NNRExJTkVfRVhURU5EIGlzIG5vdCBzZXQKIENPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eVNDMSwxMTUyMDAgcGFuaWM9MyIKIAogIwpAQCAtMzk1LDYgKzQxMyw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtNDI0LDYgKzQ0Myw3IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKQEAgLTQzMSw3ICs0NTEsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC00NDQsNiArNDYzLDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NUQU5EQUxPTkUgaXMgbm90IHNldAogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKQEAgLTQ5Niw3ICs1MTYsMTEgQEAKICMKIAogIwotIyBFbmFibGUgb25seSBvbmUgb2YgdGhlIHR3byBzdGFja3MsIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcKKyMgWW91IGNhbiBlbmFibGUgb25lIG9yIGJvdGggRmlyZVdpcmUgZHJpdmVyIHN0YWNrcy4KKyMKKworIworIyBTZWUgdGhlIGhlbHAgdGV4dHMgZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAjCiAjIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0CkBAIC01NjEsMTAgKzU4NSw3IEBACiAjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtNjA1LDEzICs2MjYsMTQgQEAKICMKIENPTkZJR19JTlBVVF9LRVlCT0FSRD15CiAjIENPTkZJR19LRVlCT0FSRF9BVEtCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKIENPTkZJR19LRVlCT0FSRF9NQVBMRT15CisjIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfT1BFTkNPUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9TSF9LRVlTQyBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfTU9VU0U9eQogIyBDT05GSUdfTU9VU0VfUFMyIGlzIG5vdCBzZXQKICMgQ09ORklHX01PVVNFX1NFUklBTCBpcyBub3Qgc2V0CkBAIC02NzUsMTEgKzY5NywxNSBAQAogQ09ORklHX0RFVlBPUlQ9eQogIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisKKyMKKyMgUFBTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKIENPTkZJR19XQVRDSERPRz15CiAjIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBub3Qgc2V0CiAKQEAgLTcxNiw2ICs3NDIsNyBAQAogIwogIyBHcmFwaGljcyBzdXBwb3J0CiAjCitDT05GSUdfVkdBX0FSQj15CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPW0KQEAgLTgwNyw3ICs4MzQsNiBAQAogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKIApAQCAtODYxLDggKzg4NywxMCBAQAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogIyBDT05GSUdfRE5PVElGWSBpcyBub3Qgc2V0CkBAIC05MjIsNyArOTUwLDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiAjIENPTkZJR19ORlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CkBAIC05NDksNiArOTc2LDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTk1OCw4ICs5ODYsMTEgQEAKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUPXkKIENPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKK0NPTkZJR19IQVZFX1NZU0NBTExfVFJBQ0VQT0lOVFM9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiAjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CkBAIC05NjcsNiArOTk4LDcgQEAKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19TSF9TVEFOREFSRF9CSU9TIGlzIG5vdCBzZXQKICMgQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19EV0FSRl9VTldJTkRFUiBpcyBub3Qgc2V0CiAKICMKICMgU2VjdXJpdHkgb3B0aW9ucwpAQCAtOTgwLDcgKzEwMTIsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldApAQCAtMTAxMiwxMSArMTA0MywxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CkBAIC0xMDc5LDUgKzExMTIsNiBAQAogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15CitDT05GSUdfSEFWRV9MTUI9eQogQ09ORklHX05MQVRUUj15CiBDT05GSUdfR0VORVJJQ19BVE9NSUM2ND15CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3MvZWNvdmVjMjQtcm9taW1hZ2VfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL2Vjb3ZlYzI0LXJvbWltYWdlX2RlZmNvbmZpZwppbmRleCA5YTIyYzY0Li4wNzc0OTI0IDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3MvZWNvdmVjMjQtcm9taW1hZ2VfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9lY292ZWMyNC1yb21pbWFnZV9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM3Ci0jIFR1ZSBTZXAgIDggMTM6NTY6MTggMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxCisjIFRodSBTZXAgMjQgMTc6NTY6NDEgMjAwOQogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtNTksMTEgKzU5LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CkBAIC03OSwxNSArODAsOSBAQAogIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKLUNPTkZJR19JTklUUkFNRlNfUk9PVF9VSUQ9MAotQ09ORklHX0lOSVRSQU1GU19ST09UX0dJRD0wCiBDT05GSUdfUkRfR1pJUD15CiAjIENPTkZJR19SRF9CWklQMiBpcyBub3Qgc2V0CiAjIENPTkZJR19SRF9MWk1BIGlzIG5vdCBzZXQKLUNPTkZJR19JTklUUkFNRlNfQ09NUFJFU1NJT05fTk9ORT15Ci0jIENPTkZJR19JTklUUkFNRlNfQ09NUFJFU1NJT05fR1pJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTklUUkFNRlNfQ09NUFJFU1NJT05fQlpJUDIgaXMgbm90IHNldAotIyBDT05GSUdfSU5JVFJBTUZTX0NPTVBSRVNTSU9OX0xaTUEgaXMgbm90IHNldAogQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKIENPTkZJR19TWVNDVEw9eQogQ09ORklHX0FOT05fSU5PREVTPXkKQEAgLTEwNywyMCArMTAyLDE5IEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0NPVU5URVJTPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAogIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKQEAgLTIzNyw2ICsyMzEsNyBAQAogQ09ORklHX05SX1FVSUNLPTIKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogCiAjCkBAIC0zMTksNyArMzE0LDggQEAKIENPTkZJR19aRVJPX1BBR0VfT0ZGU0VUPTB4MDAwMDEwMDAKIENPTkZJR19CT09UX0xJTktfT0ZGU0VUPTB4MDA4MDAwMDAKIENPTkZJR19FTlRSWV9PRkZTRVQ9MHgwMDAwMTAwMAotQ09ORklHX0NNRExJTkVfQk9PTD15CitDT05GSUdfQ01ETElORV9PVkVSV1JJVEU9eQorIyBDT05GSUdfQ01ETElORV9FWFRFTkQgaXMgbm90IHNldAogQ09ORklHX0NNRExJTkU9ImNvbnNvbGU9dHR5U0MwLDExNTIwMCIKIAogIwpAQCAtMzgyLDYgKzM3OCw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtNDIyLDYgKzQxOSw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiBDT05GSUdfRldfTE9BREVSPXkKQEAgLTUzMCwxMCArNTI4LDcgQEAKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtNjI1LDYgKzYyMCw3IEBACiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogIyBDT05GSUdfSTJDX0NIQVJERVYgaXMgbm90IHNldAogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiAKQEAgLTY1Nyw5ICs2NTMsNiBAQAogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKICMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKQEAgLTY5MywxMSArNjg2LDE0IEBACiAjCiAjIFNQSSBHUElPIGV4cGFuZGVyczoKICMKKworIworIyBBQzk3IEdQSU8gZXhwYW5kZXJzOgorIwogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtNzE3LDYgKzcxMyw3IEBACiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKICMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKQEAgLTc3MSw2ICs3NjgsNyBAQAogIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfUjhBNjY1OTdfSENEPXkKICMgQ09ORklHX1VTQl9IV0FfSENEIGlzIG5vdCBzZXQKQEAgLTg3NSw2ICs4NzMsNyBAQAogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKICMgQ09ORklHX0ZTTk9USUZZIGlzIG5vdCBzZXQKICMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldApAQCAtOTc1LDYgKzk3NCw3IEBACiAjIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfRlM9eQogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC05ODksNyArOTg5LDcgQEAKIENPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUPXkKIENPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKLUNPTkZJR19IQVZFX0ZUUkFDRV9TWVNDQUxMUz15CitDT05GSUdfSEFWRV9TWVNDQUxMX1RSQUNFUE9JTlRTPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0RZTkFNSUNfREVCVUcgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL2Vjb3ZlYzI0X2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9lY292ZWMyNF9kZWZjb25maWcKaW5kZXggMjA1MGE3Ni4uYWM2NDY5NyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL2Vjb3ZlYzI0X2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3MvZWNvdmVjMjRfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxLXJjNwotIyBXZWQgQXVnIDI2IDA5OjA5OjA3IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMQorIyBUaHUgU2VwIDI0IDE3OjQ1OjM5IDIwMDkKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTYwLDExICs2MCwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfR1JPVVBfU0NIRUQ9eQpAQCAtOTcsMjAgKzk4LDE5IEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0NPVU5URVJTPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAogIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKQEAgLTIzMiw2ICsyMzIsNyBAQAogQ09ORklHX05SX1FVSUNLPTIKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogCiAjCkBAIC0zMTQsNyArMzE1LDggQEAKIENPTkZJR19aRVJPX1BBR0VfT0ZGU0VUPTB4MDAwMDEwMDAKIENPTkZJR19CT09UX0xJTktfT0ZGU0VUPTB4MDA4MDAwMDAKIENPTkZJR19FTlRSWV9PRkZTRVQ9MHgwMDAwMTAwMAotQ09ORklHX0NNRExJTkVfQk9PTD15CitDT05GSUdfQ01ETElORV9PVkVSV1JJVEU9eQorIyBDT05GSUdfQ01ETElORV9FWFRFTkQgaXMgbm90IHNldAogQ09ORklHX0NNRExJTkU9ImNvbnNvbGU9dHR5MCwgY29uc29sZT10dHlTQzAsMTE1MjAwIHJvb3Q9L2Rldi9uZnMgaXA9ZGhjcCBtZW09MTIwTSBtZW1jaHVuay52cHU9NG0iCiAKICMKQEAgLTM4OCw2ICszOTAsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTQxNyw2ICs0MjAsNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CkBAIC00MjQsNyArNDI4LDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtNDM3LDYgKzQ0MCw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiBDT05GSUdfRldfTE9BREVSPXkKQEAgLTQ0Niw5ICs0NTAsOSBAQAogIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NPTkNBVD15CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ01ETElORV9QQVJUUz15CiAjIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKQEAgLTUwNCw2ICs1MDgsNyBAQAogIwogIyBDT05GSUdfTVREX0RBVEFGTEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfTTI1UDgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9TU1QyNUwgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKQEAgLTY2NiwxMCArNjcxLDcgQEAKICMgQ09ORklHX0tTODg1MSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtNzEzLDExICs3MTUsMTUgQEAKICMgSW5wdXQgRGV2aWNlIERyaXZlcnMKICMKIENPTkZJR19JTlBVVF9LRVlCT0FSRD15CisjIENPTkZJR19LRVlCT0FSRF9BRFA1NTg4IGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX0FUS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FUMjE2MCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9HUElPIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX01BVFJJWCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9NQVg3MzU5IGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9PUEVOQ09SRVMgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKIENPTkZJR19LRVlCT0FSRF9TSF9LRVlTQz15CkBAIC03NzEsNiArNzc3LDcgQEAKICMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CiBDT05GSUdfSTJDX0NIQVJERVY9eQogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiAKQEAgLTgwNCw5ICs4MTEsNiBAQAogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKICMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKQEAgLTg1NiwxMSArODYwLDE1IEBACiAjCiAjIENPTkZJR19HUElPX01BWDczMDEgaXMgbm90IHNldAogIyBDT05GSUdfR1BJT19NQ1AyM1MwOCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX01DMzM4ODAgaXMgbm90IHNldAorCisjCisjIEFDOTcgR1BJTyBleHBhbmRlcnM6CisjCiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19TU0JfUE9TU0lCTEU9eQogCkBAIC04ODAsOCArODg4LDEwIEBACiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9NQzEzNzgzIGlzIG5vdCBzZXQKICMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0VaWF9QQ0FQIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CkBAIC05MzYsOCArOTQ2LDEwIEBACiBDT05GSUdfVklERU9fU0hfTU9CSUxFX0NFVT15CiAjIENPTkZJR19WNExfVVNCX0RSSVZFUlMgaXMgbm90IHNldAogQ09ORklHX1JBRElPX0FEQVBURVJTPXkKKyMgQ09ORklHX0kyQ19TSTQ3MTMgaXMgbm90IHNldAorIyBDT05GSUdfUkFESU9fU0k0NzEzIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9EU0JSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TSTQ3MFggaXMgbm90IHNldAorIyBDT05GSUdfUkFESU9fU0k0NzBYIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9NUjgwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQURJT19URUE1NzY0IGlzIG5vdCBzZXQKICMgQ09ORklHX0RBQiBpcyBub3Qgc2V0CkBAIC0xMDAzLDcgKzEwMTUsNiBAQAogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CiAKICMKQEAgLTEwMjYsNiArMTAzNyw3IEBACiAjIENPTkZJR19ISURfRVpLRVkgaXMgbm90IHNldAogIyBDT05GSUdfSElEX0tZRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfR1lSQVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfSElEX1RXSU5IQU4gaXMgbm90IHNldAogIyBDT05GSUdfSElEX0tFTlNJTkdUT04gaXMgbm90IHNldAogIyBDT05GSUdfSElEX0xPR0lURUNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9NSUNST1NPRlQgaXMgbm90IHNldApAQCAtMTA3MCw2ICsxMDgyLDcgQEAKICMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRD15CiAjIENPTkZJR19VU0JfSFdBX0hDRCBpcyBub3Qgc2V0CkBAIC0xMTYxLDYgKzExNzQsOCBAQAogIyBNTUMvU0QvU0RJTyBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwogIwogIyBDT05GSUdfTU1DX1NESENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19BVDkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19BVE1FTE1DSSBpcyBub3Qgc2V0CiBDT05GSUdfTU1DX1NQST15CiAjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CkBAIC0xMjA4LDYgKzEyMjMsNyBAQAogIyBDT05GSUdfUlRDX0RSVl9SOTcwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1JTNUMzNDggaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9EUzMyMzQgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0YyMTIzIGlzIG5vdCBzZXQKIAogIwogIyBQbGF0Zm9ybSBSVEMgZHJpdmVycwpAQCAtMTI2NSw2ICsxMjgxLDcgQEAKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKQEAgLTEzMjksNyArMTM0Niw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKQEAgLTE0MDksNiArMTQyNSw3IEBACiAjIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfRlM9eQogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xNDIzLDcgKzE0NDAsNyBAQAogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VfTUNPVU5UX1RFU1Q9eQogQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQotQ09ORklHX0hBVkVfRlRSQUNFX1NZU0NBTExTPXkKK0NPTkZJR19IQVZFX1NZU0NBTExfVFJBQ0VQT0lOVFM9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiAjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfRFlOQU1JQ19ERUJVRyBpcyBub3Qgc2V0CkBAIC0xNDQ2LDcgKzE0NjMsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKIENPTkZJR19DUllQVE9fQUxHQVBJMj15CiBDT05GSUdfQ1JZUFRPX0FFQUQyPXkKQEAgLTE0ODcsMTEgKzE1MDMsMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL2Vkb3NrNzcwNV9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3MvZWRvc2s3NzA1X2RlZmNvbmZpZwppbmRleCA0OTc0MTRjLi44NmM5YmMwIDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3MvZWRvc2s3NzA1X2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3MvZWRvc2s3NzA1X2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMAotIyBUaHUgSnVuIDE4IDEyOjI1OjM1IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMQorIyBUaHUgU2VwIDI0IDE3OjU3OjEzIDIwMDkKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTEzLDYgKzEzLDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19JUlFfUEVSX0NQVT15CiAjIENPTkZJR19HRU5FUklDX0dQSU8gaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CkBAIC0yNiw3ICsyNyw5IEBACiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQogQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15CitDT05GSUdfQVJDSF9IQVNfQ1BVX0lETEVfV0FJVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtMzYsMTcgKzM5LDI0IEBACiBDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiBDT05GSUdfTE9DQUxWRVJTSU9OPSIiCiAjIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9LRVJORUxfR1pJUD15CitDT05GSUdfSEFWRV9LRVJORUxfQlpJUDI9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTUE9eQorQ09ORklHX0tFUk5FTF9HWklQPXkKKyMgQ09ORklHX0tFUk5FTF9CWklQMiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVJORUxfTFpNQSBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWSVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAogCiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTcKICMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldApAQCAtNzAsMTggKzgwLDE5IEBACiAjIENPTkZJR19FVkVOVEZEIGlzIG5vdCBzZXQKIENPTkZJR19TSE1FTT15CiAjIENPTkZJR19BSU8gaXMgbm90IHNldAorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CisjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPTVBBVF9CUksgaXMgbm90IHNldAogIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CiBDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKQEAgLTg5LDYgKzEwMCwxMCBAQAogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQogQ09ORklHX0hBVkVfQ0xLPXkKIENPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIwogIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKIENPTkZJR19CQVNFX1NNQUxMPTEKQEAgLTEyNSw2ICsxNDAsNyBAQAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g0XzIwMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1NyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCBpcyBub3Qgc2V0CkBAIC0xNjUsNyArMTgxLDYgQEAKIENPTkZJR19TUEFSU0VNRU09eQogQ09ORklHX0hBVkVfTUVNT1JZX1BSRVNFTlQ9eQogQ09ORklHX1NQQVJTRU1FTV9TVEFUSUM9eQotQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAogQ09ORklHX01JR1JBVElPTj15CiAjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CkBAIC0xNzMsNiArMTg4LDcgQEAKIENPTkZJR19OUl9RVUlDSz0yCiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIAogIwpAQCAtMjUwLDcgKzI2Niw4IEBACiBDT05GSUdfWkVST19QQUdFX09GRlNFVD0weDAwMDAxMDAwCiBDT05GSUdfQk9PVF9MSU5LX09GRlNFVD0weDAwODAwMDAwCiBDT05GSUdfRU5UUllfT0ZGU0VUPTB4MDAwMDEwMDAKLSMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CisjIENPTkZJR19DTURMSU5FX09WRVJXUklURSBpcyBub3Qgc2V0CisjIENPTkZJR19DTURMSU5FX0VYVEVORCBpcyBub3Qgc2V0CiAKICMKICMgQnVzIG9wdGlvbnMKQEAgLTMyMSwxMSArMzM4LDE0IEBACiAjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkMgaXMgbm90IHNldAogIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKworIworIyBQUFMgc3VwcG9ydAorIwogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtNDA5LDYgKzQyOSw3IEBACiAjIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CkBAIC00MTYsOCArNDM3LDExIEBACiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVD15CiBDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CitDT05GSUdfSEFWRV9TWVNDQUxMX1RSQUNFUE9JTlRTPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldApAQCAtNDI1LDYgKzQ0OSw3IEBACiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfU0hfU1RBTkRBUkRfQklPUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfRFdBUkZfVU5XSU5ERVIgaXMgbm90IHNldAogCiAjCiAjIFNlY3VyaXR5IG9wdGlvbnMKQEAgLTQ0OSw0ICs0NzQsNSBAQAogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15CitDT05GSUdfSEFWRV9MTUI9eQogQ09ORklHX0dFTkVSSUNfQVRPTUlDNjQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL2Vkb3NrNzc2MF9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3MvZWRvc2s3NzYwX2RlZmNvbmZpZwppbmRleCA3NzY4NGVkLi40YzBmODJiIDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3MvZWRvc2s3NzYwX2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3MvZWRvc2s3NzYwX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMAotIyBUaHUgSnVuIDE4IDEyOjI1OjU1IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMQorIyBUaHUgU2VwIDI0IDE3OjU3OjMwIDIwMDkKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTE0LDYgKzE0LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19JUlFfUEVSX0NQVT15CiAjIENPTkZJR19HRU5FUklDX0dQSU8gaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CkBAIC0yNyw3ICsyOCw5IEBACiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQogQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15CitDT05GSUdfQVJDSF9IQVNfQ1BVX0lETEVfV0FJVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtMzgsNiArNDEsMTIgQEAKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIENPTkZJR19MT0NBTFZFUlNJT049Il9lZG9zazc3NjAiCiBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX0hBVkVfS0VSTkVMX0daSVA9eQorQ09ORklHX0hBVkVfS0VSTkVMX0JaSVAyPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9MWk1BPXkKK0NPTkZJR19LRVJORUxfR1pJUD15CisjIENPTkZJR19LRVJORUxfQlpJUDIgaXMgbm90IHNldAorIyBDT05GSUdfS0VSTkVMX0xaTUEgaXMgbm90IHNldAogQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKQEAgLTUxLDExICs2MCwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNwpAQCAtOTEsMTkgKzEwMSwyMCBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CisjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfU0xVQl9ERUJVRz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQpAQCAtMTEyLDYgKzEyMywxMCBAQAogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQogQ09ORklHX0hBVkVfQ0xLPXkKIENPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIwogIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKIENPTkZJR19TTEFCSU5GTz15CkBAIC0xMjQsNyArMTM5LDcgQEAKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKK0NPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKQEAgLTE3MSw2ICsxODYsNyBAQAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g0XzIwMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1NyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCBpcyBub3Qgc2V0CkBAIC0yMTYsNiArMjMyLDcgQEAKIENPTkZJR19OUl9RVUlDSz0yCiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIAogIwpAQCAtMzA0LDcgKzMyMSw4IEBACiBDT05GSUdfQk9PVF9MSU5LX09GRlNFVD0weDAyMDAwMDAwCiBDT05GSUdfRU5UUllfT0ZGU0VUPTB4MDAwMDEwMDAKICMgQ09ORklHX1VCQ19XQUtFVVAgaXMgbm90IHNldAotQ09ORklHX0NNRExJTkVfQk9PTD15CitDT05GSUdfQ01ETElORV9PVkVSV1JJVEU9eQorIyBDT05GSUdfQ01ETElORV9FWFRFTkQgaXMgbm90IHNldAogQ09ORklHX0NNRExJTkU9Im1lbT02NE0gY29uc29sZT10dHlTQzIsMTE1MjAwIHJvb3Q9L2Rldi9uZnMgcncgbmZzcm9vdD0xOTIuMTY4LjAuMzovc2NyaXB0cy9maWxlc3lzIGlwPTE5Mi4xNjguMC40IgogCiAjCkBAIC0zNjcsNiArMzg1LDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC0zOTYsNiArNDE1LDcgQEAKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWSBpcyBub3Qgc2V0CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldApAQCAtNDAzLDcgKzQyMyw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTQxNiw2ICs0MzUsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKQEAgLTQyNiw5ICs0NDYsOSBAQAogQ09ORklHX01URD15CiBDT05GSUdfTVREX0RFQlVHPXkKIENPTkZJR19NVERfREVCVUdfVkVSQk9TRT0wCisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DT05DQVQ9eQogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQogIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CkBAIC01NjMsMTAgKzU4Myw3IEBACiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTY0OSw2ICs2NjYsNyBAQAogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15CiBDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIApAQCAtNjU5LDYgKzY3Nyw3IEBACiAjCiAjIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQogIworIyBDT05GSUdfSTJDX0RFU0lHTldBUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CiBDT05GSUdfSTJDX1NINzc2MD15CiAjIENPTkZJR19JMkNfU0hfTU9CSUxFIGlzIG5vdCBzZXQKQEAgLTY4MCwyMCArNjk5LDIxIEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogQ09ORklHX0kyQ19ERUJVR19DT1JFPXkKIENPTkZJR19JMkNfREVCVUdfQUxHTz15CiBDT05GSUdfSTJDX0RFQlVHX0JVUz15CiBDT05GSUdfSTJDX0RFQlVHX0NISVA9eQogIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKworIworIyBQUFMgc3VwcG9ydAorIworIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTcxMiw4ICs3MzIsMTAgQEAKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAorIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAogCkBAIC04MzcsOCArODU5LDEwIEBACiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0ZTX1BPU0lYX0FDTD15CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtOTAwLDcgKzkyNCw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiAjIENPTkZJR19ORlNfVjMgaXMgbm90IHNldApAQCAtOTc0LDYgKzk5Nyw3IEBACiAjIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiBDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX1VOVVNFRF9TWU1CT0xTPXkKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTAxMCwxOCArMTAzNCwyMyBAQAogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAogIyBDT05GSUdfRlJBTUVfUE9JTlRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKICMgQ09ORklHX1BBR0VfUE9JU09OSU5HIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VfTUNPVU5UX1RFU1Q9eQogQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQorQ09ORklHX0hBVkVfU1lTQ0FMTF9UUkFDRVBPSU5UUz15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKIENPTkZJR19GVFJBQ0U9eQogIyBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSIGlzIG5vdCBzZXQKQEAgLTEwMjksNiArMTA1OCw3IEBACiAjIENPTkZJR19QUkVFTVBUX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfRU5BQkxFX0RFRkFVTFRfVFJBQ0VSUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVFJBQ0VfU1lTQ0FMTFMgaXMgbm90IHNldAogIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAogQ09ORklHX0JSQU5DSF9QUk9GSUxFX05PTkU9eQogIyBDT05GSUdfUFJPRklMRV9BTk5PVEFURURfQlJBTkNIRVMgaXMgbm90IHNldApAQCAtMTA0NSwxMSArMTA3NSwxMSBAQAogQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRT15CiBDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFX1BPUlQ9MHhmZmU4MDAwMAogQ09ORklHX0VBUkxZX1BSSU5USz15Ci0jIENPTkZJR19ERUJVR19CT09UTUVNIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XPXkKKyMgQ09ORklHX1NUQUNLX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKICMgQ09ORklHXzRLU1RBQ0tTIGlzIG5vdCBzZXQKIENPTkZJR19EVU1QX0NPREU9eQorIyBDT05GSUdfRFdBUkZfVU5XSU5ERVIgaXMgbm90IHNldAogIyBDT05GSUdfU0hfTk9fQlNTX0lOSVQgaXMgbm90IHNldAogCiAjCkBAIC0xMDY0LDcgKzEwOTQsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKIENPTkZJR19DUllQVE9fQUxHQVBJMj15CiBDT05GSUdfQ1JZUFRPX0hBU0g9eQpAQCAtMTEwMCwxMSArMTEyOSwxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX01ENT15CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApAQCAtMTE2OCw1ICsxMTk5LDYgQEAKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQorQ09ORklHX0hBVkVfTE1CPXkKIENPTkZJR19OTEFUVFI9eQogQ09ORklHX0dFTkVSSUNfQVRPTUlDNjQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL2VzcHRfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL2VzcHRfZGVmY29uZmlnCmluZGV4IDg4MTEyOGUuLjliNzg1NTEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9lc3B0X2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3MvZXNwdF9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzAKLSMgVGh1IEp1biAxOCAxMjoyNzoyMSAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEKKyMgVGh1IFNlcCAyNCAxNzo1ODoxOCAyMDA5CiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0xNCw2ICsxNCw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CitDT05GSUdfSVJRX1BFUl9DUFU9eQogIyBDT05GSUdfR0VORVJJQ19HUElPIGlzIG5vdCBzZXQKIENPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQpAQCAtMjcsNyArMjgsOSBAQAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQorQ09ORklHX0FSQ0hfSEFTX0NQVV9JRExFX1dBSVQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKQEAgLTM3LDYgKzQwLDEyIEBACiBDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiBDT05GSUdfTE9DQUxWRVJTSU9OPSIiCiBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX0hBVkVfS0VSTkVMX0daSVA9eQorQ09ORklHX0hBVkVfS0VSTkVMX0JaSVAyPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9MWk1BPXkKK0NPTkZJR19LRVJORUxfR1pJUD15CisjIENPTkZJR19LRVJORUxfQlpJUDIgaXMgbm90IHNldAorIyBDT05GSUdfS0VSTkVMX0xaTUEgaXMgbm90IHNldAogQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKQEAgLTQ4LDExICs1NywxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNApAQCAtOTIsMTkgKzEwMiwyMSBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCitDT05GSUdfUEVSRl9FVkVOVFM9eQorQ09ORklHX0VWRU5UX1BST0ZJTEU9eQorIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKIENPTkZJR19QUk9GSUxJTkc9eQogQ09ORklHX1RSQUNFUE9JTlRTPXkKLUNPTkZJR19NQVJLRVJTPXkKIENPTkZJR19PUFJPRklMRT15CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiAjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKQEAgLTExNCw2ICsxMjYsMTEgQEAKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKIENPTkZJR19IQVZFX0NMSz15CiBDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKKyMgQ09ORklHX0dDT1ZfS0VSTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CiBDT05GSUdfU0xBQklORk89eQpAQCAtMTI1LDcgKzE0Miw3IEBACiAjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAogQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CitDT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCkBAIC0xNzMsNiArMTkwLDcgQEAKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINF8yMDIgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTcgaXMgbm90IHNldAogQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2Mz15CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwIGlzIG5vdCBzZXQKQEAgLTIxNCw3ICsyMzIsNiBAQAogQ09ORklHX0hBVkVfTUVNT1JZX1BSRVNFTlQ9eQogQ09ORklHX1NQQVJTRU1FTV9TVEFUSUM9eQogIyBDT05GSUdfTUVNT1JZX0hPVFBMVUcgaXMgbm90IHNldAotQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAogQ09ORklHX01JR1JBVElPTj15CiAjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CkBAIC0yMjIsNiArMjM5LDcgQEAKIENPTkZJR19OUl9RVUlDSz0yCiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIAogIwpAQCAtMzAzLDcgKzMyMSw4IEBACiBDT05GSUdfWkVST19QQUdFX09GRlNFVD0weDAwMDAxMDAwCiBDT05GSUdfQk9PVF9MSU5LX09GRlNFVD0weDAwODAwMDAwCiBDT05GSUdfRU5UUllfT0ZGU0VUPTB4MDAwMDEwMDAKLUNPTkZJR19DTURMSU5FX0JPT0w9eQorQ09ORklHX0NNRExJTkVfT1ZFUldSSVRFPXkKKyMgQ09ORklHX0NNRExJTkVfRVhURU5EIGlzIG5vdCBzZXQKIENPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eVNDMCwxMTUyMDAgcm9vdD0vZGV2L25mcyBpcD1ib290cCIKIAogIwpAQCAtMzcxLDYgKzM5MCw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtNDEyLDYgKzQzMiw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiBDT05GSUdfRldfTE9BREVSPXkKQEAgLTQyMSw5ICs0NDIsOSBAQAogIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKICMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldApAQCAtNDc3LDYgKzQ5OCw3IEBACiBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1M9eQogQ09ORklHX01URF9QSFlTTUFQPXkKICMgQ09ORklHX01URF9QSFlTTUFQX0NPTVBBVCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfR1BJT19BRERSIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKIAogIwpAQCAtNTU0LDcgKzU3Niw2IEBACiAjIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0CiBDT05GSUdfU0NTSV9MT1dMRVZFTD15CiAjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9CTlgyX0lTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQkZDIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQkZDT0UgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CkBAIC02MTAsMTAgKzYzMSw3IEBACiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTcwNSwxMSArNzIzLDE1IEBACiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TUEkgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtODE5LDYgKzg0MSw3IEBACiAjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0Q9eQogIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9ERVNDIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fTU1JTyBpcyBub3Qgc2V0CkBAIC04ODgsNiArOTExLDcgQEAKICMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1ZTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKQEAgLTkzMCw4ICs5NTQsMTAgQEAKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfRlNfUE9TSVhfQUNMPXkKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC05OTcsNyArMTAyMyw2IEBACiBDT05GSUdfUk9NRlNfT05fQkxPQ0s9eQogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogIyBDT05GSUdfTkZTX1YzIGlzIG5vdCBzZXQKQEAgLTEwNzEsNiArMTA5Niw3IEBACiAjIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfRlM9eQogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xMDgyLDExICsxMTA4LDE1IEBACiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19OT1BfVFJBQ0VSPXkKIENPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VfTUNPVU5UX1RFU1Q9eQogQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQorQ09ORklHX0hBVkVfU1lTQ0FMTF9UUkFDRVBPSU5UUz15CiBDT05GSUdfUklOR19CVUZGRVI9eQogQ09ORklHX0VWRU5UX1RSQUNJTkc9eQogQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUj15CitDT05GSUdfUklOR19CVUZGRVJfQUxMT1dfU1dBUD15CiBDT05GSUdfVFJBQ0lORz15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKICMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CkBAIC0xMDk2LDYgKzExMjYsNyBAQAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MgaXMgbm90IHNldAogIyBDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RXQVJGX1VOV0lOREVSIGlzIG5vdCBzZXQKIAogIwogIyBTZWN1cml0eSBvcHRpb25zCkBAIC0xMTA5LDcgKzExNDAsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldApAQCAtMTE0MSwxMSArMTE3MSwxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CkBAIC0xMjA4LDUgKzEyNDAsNiBAQAogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15CitDT05GSUdfSEFWRV9MTUI9eQogQ09ORklHX05MQVRUUj15CiBDT05GSUdfR0VORVJJQ19BVE9NSUM2ND15CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3MvaHA2eHhfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL2hwNnh4X2RlZmNvbmZpZwppbmRleCAzMjQ5ZDQ2Li5mNTliZTQ0IDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3MvaHA2eHhfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9ocDZ4eF9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzAKLSMgVGh1IEp1biAxOCAxMjoyODoxMiAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEKKyMgVGh1IFNlcCAyNCAxNzo1OTo0NSAyMDA5CiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0xNCw2ICsxNCw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CitDT05GSUdfSVJRX1BFUl9DUFU9eQogIyBDT05GSUdfR0VORVJJQ19HUElPIGlzIG5vdCBzZXQKIENPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQpAQCAtMjgsNyArMjksOSBAQAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQorQ09ORklHX0FSQ0hfSEFTX0NQVV9JRExFX1dBSVQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKQEAgLTM4LDYgKzQxLDEyIEBACiBDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiBDT05GSUdfTE9DQUxWRVJTSU9OPSIiCiBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX0hBVkVfS0VSTkVMX0daSVA9eQorQ09ORklHX0hBVkVfS0VSTkVMX0JaSVAyPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9MWk1BPXkKK0NPTkZJR19LRVJORUxfR1pJUD15CisjIENPTkZJR19LRVJORUxfQlpJUDIgaXMgbm90IHNldAorIyBDT05GSUdfS0VSTkVMX0xaTUEgaXMgbm90IHNldAogQ09ORklHX1NXQVA9eQogIyBDT05GSUdfU1lTVklQQyBpcyBub3Qgc2V0CiBDT05GSUdfQlNEX1BST0NFU1NfQUNDVD15CkBAIC00NiwxMSArNTUsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKQEAgLTgxLDE4ICs5MSwxOSBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CisjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKIENPTkZJR19IQVZFX0tQUk9CRVM9eQpAQCAtMTAwLDYgKzExMSwxMCBAQAogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQogQ09ORklHX0hBVkVfQ0xLPXkKIENPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIwogIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKIENPTkZJR19TTEFCSU5GTz15CkBAIC0xMDcsNyArMTIyLDcgQEAKIENPTkZJR19CQVNFX1NNQUxMPTAKICMgQ09ORklHX01PRFVMRVMgaXMgbm90IHNldAogQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CitDT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCkBAIC0xNTQsNiArMTY5LDcgQEAKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINF8yMDIgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTcgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc3MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODAgaXMgbm90IHNldApAQCAtMTk5LDYgKzIxNSw3IEBACiBDT05GSUdfTlJfUVVJQ0s9MgogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiAKICMKQEAgLTI4OCw3ICszMDUsOCBAQAogQ09ORklHX1pFUk9fUEFHRV9PRkZTRVQ9MHgwMDAwMTAwMAogQ09ORklHX0JPT1RfTElOS19PRkZTRVQ9MHgwMDgwMDAwMAogQ09ORklHX0VOVFJZX09GRlNFVD0weDAwMDAxMDAwCi0jIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAorIyBDT05GSUdfQ01ETElORV9PVkVSV1JJVEUgaXMgbm90IHNldAorIyBDT05GSUdfQ01ETElORV9FWFRFTkQgaXMgbm90IHNldAogCiAjCiAjIEJ1cyBvcHRpb25zCkBAIC0zMjIsNiArMzQwLDcgQEAKIENPTkZJR19TVVNQRU5EX0ZSRUVaRVI9eQogIyBDT05GSUdfSElCRVJOQVRJT04gaXMgbm90IHNldAogQ09ORklHX0FQTV9FTVVMQVRJT049eQorIyBDT05GSUdfUE1fUlVOVElNRSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfSURMRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVQgaXMgbm90IHNldAogCkBAIC0zOTAsNyArNDA5LDYgQEAKICMgQ09ORklHX1NDU0lfU0FTX0xJQlNBUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0CiBDT05GSUdfU0NTSV9MT1dMRVZFTD15Ci0jIENPTkZJR19TQ1NJX0JOWDJfSVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfTElCRkMgaXMgbm90IHNldAogIyBDT05GSUdfTElCRkNPRSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKQEAgLTM5OSw2ICs0MTcsNyBAQAogIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKIENPTkZJR19BVEE9eQogIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19BVEFfVkVSQk9TRV9FUlJPUj15CiBDT05GSUdfU0FUQV9QTVA9eQogQ09ORklHX0FUQV9TRkY9eQogIyBDT05GSUdfU0FUQV9NViBpcyBub3Qgc2V0CkBAIC00MjgsMTMgKzQ0NywxNCBAQAogIwogQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKICMgQ09ORklHX0tFWUJPQVJEX0FUS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAogQ09ORklHX0tFWUJPQVJEX0hQNlhYPXkKKyMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9PUEVOQ09SRVMgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX1NIX0tFWVNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CkBAIC00NTIsNiArNDcyLDcgQEAKICMgQ09ORklHX1RPVUNIU0NSRUVOX1RPVUNIUklHSFQgaXMgbm90IHNldAogIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVE9VQ0hXSU4gaXMgbm90IHNldAogIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVE9VQ0hJVDIxMyBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9XOTBYOTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAogCiAjCkBAIC01MDcsMTEgKzUyOCwxNSBAQAogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkMgaXMgbm90IHNldAogIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKworIworIyBQUFMgc3VwcG9ydAorIworIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTY2Myw3ICs2ODgsOSBAQAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtNzI1LDcgKzc1Miw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogCiAjCiAjIFBhcnRpdGlvbiBUeXBlcwpAQCAtNzgyLDYgKzgwOCw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC03OTEsOCArODE4LDExIEBACiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVD15CiBDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CitDT05GSUdfSEFWRV9TWVNDQUxMX1RSQUNFUE9JTlRTPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldApAQCAtODAwLDYgKzgzMCw3IEBACiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfU0hfU1RBTkRBUkRfQklPUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfRFdBUkZfVU5XSU5ERVIgaXMgbm90IHNldAogCiAjCiAjIFNlY3VyaXR5IG9wdGlvbnMKQEAgLTgxMyw3ICs4NDQsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKIENPTkZJR19DUllQVE9fQUxHQVBJMj15CiBDT05GSUdfQ1JZUFRPX0FFQUQyPXkKQEAgLTg1NCwxMSArODg0LDEzIEBACiAjCiAjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTUQ1PXkKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CkBAIC05MjAsNCArOTUyLDUgQEAKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQorQ09ORklHX0hBVkVfTE1CPXkKIENPTkZJR19HRU5FUklDX0FUT01JQzY0PXkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9rZnIycjA5LXJvbWltYWdlX2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9rZnIycjA5LXJvbWltYWdlX2RlZmNvbmZpZwppbmRleCBjMGY5MjYzLi4wMjU5MGUxIDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3Mva2ZyMnIwOS1yb21pbWFnZV9kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL2tmcjJyMDktcm9taW1hZ2VfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxLXJjNgotIyBUaHUgQXVnIDIwIDE1OjA5OjE2IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMQorIyBUaHUgU2VwIDI0IDE4OjAxOjQ4IDIwMDkKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTU4LDExICs1OCwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNApAQCAtNzgsMTUgKzc5LDkgQEAKICMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKIENPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCi1DT05GSUdfSU5JVFJBTUZTX1JPT1RfVUlEPTAKLUNPTkZJR19JTklUUkFNRlNfUk9PVF9HSUQ9MAogQ09ORklHX1JEX0daSVA9eQogIyBDT05GSUdfUkRfQlpJUDIgaXMgbm90IHNldAogIyBDT05GSUdfUkRfTFpNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTklUUkFNRlNfQ09NUFJFU1NJT05fTk9ORSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5JVFJBTUZTX0NPTVBSRVNTSU9OX0daSVA9eQotIyBDT05GSUdfSU5JVFJBTUZTX0NPTVBSRVNTSU9OX0JaSVAyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOSVRSQU1GU19DT01QUkVTU0lPTl9MWk1BIGlzIG5vdCBzZXQKIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CiBDT05GSUdfU1lTQ1RMPXkKIENPTkZJR19BTk9OX0lOT0RFUz15CkBAIC0xMDYsMjAgKzEwMSwxOSBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9DT1VOVEVSUz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQogQ09ORklHX0hBVkVfS1BST0JFUz15CkBAIC0xNzMsNiArMTY3LDcgQEAKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINF8yMDIgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIzIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjQ9eQorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzU3IGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwIGlzIG5vdCBzZXQKQEAgLTIxOSw2ICsyMTQsNyBAQAogQ09ORklHX05SX1FVSUNLPTIKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogCiAjCkBAIC0zMDEsNyArMjk3LDggQEAKIENPTkZJR19aRVJPX1BBR0VfT0ZGU0VUPTB4MDAwMDEwMDAKIENPTkZJR19CT09UX0xJTktfT0ZGU0VUPTB4MDA4MDAwMDAKIENPTkZJR19FTlRSWV9PRkZTRVQ9MHgwMDAwMTAwMAotQ09ORklHX0NNRExJTkVfQk9PTD15CitDT05GSUdfQ01ETElORV9PVkVSV1JJVEU9eQorIyBDT05GSUdfQ01ETElORV9FWFRFTkQgaXMgbm90IHNldAogQ09ORklHX0NNRExJTkU9ImNvbnNvbGU9dHR5U0MxLDExNTIwMCBxdWlldCIKIAogIwpAQCAtMzI0LDYgKzMyMSw3IEBACiBDT05GSUdfUE09eQogIyBDT05GSUdfUE1fREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU1VTUEVORCBpcyBub3Qgc2V0CitDT05GSUdfUE1fUlVOVElNRT15CiAjIENPTkZJR19DUFVfSURMRSBpcyBub3Qgc2V0CiBDT05GSUdfTkVUPXkKIApAQCAtMzYyLDYgKzM2MCw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtNDAyLDYgKzQwMSw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiBDT05GSUdfRldfTE9BREVSPXkKQEAgLTQ4OSw2ICs0ODksNyBAQAogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKICMgQ09ORklHX0kyQ19DSEFSREVWIGlzIG5vdCBzZXQKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogCkBAIC01MjAsOSArNTIxLDYgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CkBAIC01NTYsMTEgKzU1NCwxNCBAQAogIwogIyBTUEkgR1BJTyBleHBhbmRlcnM6CiAjCisKKyMKKyMgQUM5NyBHUElPIGV4cGFuZGVyczoKKyMKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTU4MCw2ICs1ODEsNyBAQAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CiAjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CkBAIC03MTgsNiArNzIwLDcgQEAKICMgQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19GUz15CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTczMiw3ICs3MzUsNyBAQAogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VfTUNPVU5UX1RFU1Q9eQogQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQotQ09ORklHX0hBVkVfRlRSQUNFX1NZU0NBTExTPXkKK0NPTkZJR19IQVZFX1NZU0NBTExfVFJBQ0VQT0lOVFM9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiAjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfRFlOQU1JQ19ERUJVRyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3Mva2ZyMnIwOV9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3Mva2ZyMnIwOV9kZWZjb25maWcKaW5kZXggY2VmNjEzMS4uOGFlNjVkMiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL2tmcjJyMDlfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9rZnIycjA5X2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMS1yYzYKLSMgVGh1IEF1ZyAyMCAyMTo1ODo1MiAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEKKyMgRnJpIFNlcCAyNSAxMTo1NDoyMiAyMDA5CiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC02MCwxMSArNjAsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKQEAgLTEwMiwyMCArMTAzLDE5IEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0NPVU5URVJTPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAogIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKQEAgLTE5MCw2ICsxOTAsNyBAQAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g0XzIwMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjMgaXMgbm90IHNldAogQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyND15CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTcgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc3MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODAgaXMgbm90IHNldApAQCAtMjM2LDYgKzIzNyw3IEBACiBDT05GSUdfTlJfUVVJQ0s9MgogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiAKICMKQEAgLTMxOSw3ICszMjEsOCBAQAogQ09ORklHX1pFUk9fUEFHRV9PRkZTRVQ9MHgwMDAwMTAwMAogQ09ORklHX0JPT1RfTElOS19PRkZTRVQ9MHgwMDgwMDAwMAogQ09ORklHX0VOVFJZX09GRlNFVD0weDAwMDAxMDAwCi1DT05GSUdfQ01ETElORV9CT09MPXkKK0NPTkZJR19DTURMSU5FX09WRVJXUklURT15CisjIENPTkZJR19DTURMSU5FX0VYVEVORCBpcyBub3Qgc2V0CiBDT05GSUdfQ01ETElORT0iY29uc29sZT10dHkwIGNvbnNvbGU9dHR5U0MxLDExNTIwMCIKIAogIwpAQCAtMzQzLDYgKzM0Niw3IEBACiAjIENPTkZJR19QTV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TVVNQRU5EIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJQkVSTkFUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19QTV9SVU5USU1FPXkKIENPTkZJR19DUFVfSURMRT15CiBDT05GSUdfQ1BVX0lETEVfR09WX0xBRERFUj15CiBDT05GSUdfQ1BVX0lETEVfR09WX01FTlU9eQpAQCAtMzgzLDYgKzM4Nyw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtNDIzLDYgKzQyOCw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiBDT05GSUdfRldfTE9BREVSPXkKQEAgLTQzMiw5ICs0MzgsOSBAQAogIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NPTkNBVD15CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ01ETElORV9QQVJUUz15CiAjIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKQEAgLTUwMCw3ICs1MDYsMTIgQEAKICMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0CitDT05GSUdfTVREX09ORU5BTkQ9eQorIyBDT05GSUdfTVREX09ORU5BTkRfVkVSSUZZX1dSSVRFIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfT05FTkFORF9HRU5FUklDPXkKKyMgQ09ORklHX01URF9PTkVOQU5EX09UUCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT05FTkFORF8yWF9QUk9HUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PTkVOQU5EX1NJTSBpcyBub3Qgc2V0CiAKICMKICMgTFBERFIgZmxhc2ggbWVtb3J5IGRyaXZlcnMKQEAgLTU2NCwxMSArNTc1LDE1IEBACiAjIElucHV0IERldmljZSBEcml2ZXJzCiAjCiBDT05GSUdfSU5QVVRfS0VZQk9BUkQ9eQorIyBDT05GSUdfS0VZQk9BUkRfQURQNTU4OCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9BVEtCRCBpcyBub3Qgc2V0CisjIENPTkZJR19RVDIxNjAgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfR1BJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9NQVRSSVggaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTUFYNzM1OSBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfT1BFTkNPUkVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CiBDT05GSUdfS0VZQk9BUkRfU0hfS0VZU0M9eQpAQCAtNjIxLDYgKzYzNiw3IEBACiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogIyBDT05GSUdfSTJDX0NIQVJERVYgaXMgbm90IHNldAogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiAKQEAgLTY1Myw5ICs2NjksNiBAQAogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKICMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKQEAgLTY4OSwxMSArNzAyLDE0IEBACiAjCiAjIFNQSSBHUElPIGV4cGFuZGVyczoKICMKKworIworIyBBQzk3IEdQSU8gZXhwYW5kZXJzOgorIwogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtNzEzLDYgKzcyOSw3IEBACiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKICMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKQEAgLTg1Niw2ICs4NzMsOCBAQAogIyBNTUMvU0QvU0RJTyBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwogIwogIyBDT05GSUdfTU1DX1NESENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19BVDkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19BVE1FTE1DSSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKQEAgLTk0MSw2ICs5NjAsNyBAQAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtMTAwMiw2ICsxMDIyLDcgQEAKICMgQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19GUz15CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTEwMTYsNyArMTAzNyw3IEBACiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVD15CiBDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15Ci1DT05GSUdfSEFWRV9GVFJBQ0VfU1lTQ0FMTFM9eQorQ09ORklHX0hBVkVfU1lTQ0FMTF9UUkFDRVBPSU5UUz15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKICMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19EWU5BTUlDX0RFQlVHIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9sYW5kaXNrX2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9sYW5kaXNrX2RlZmNvbmZpZwppbmRleCBiYTA1NzM5Li5jMmE5YTM5IDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3MvbGFuZGlza19kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL2xhbmRpc2tfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMwCi0jIFRodSBKdW4gMTggMTI6Mjg6NDUgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxCisjIFRodSBTZXAgMjQgMTg6MDU6NDkgMjAwOQogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtMTQsNiArMTQsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiBDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQorQ09ORklHX0lSUV9QRVJfQ1BVPXkKICMgQ09ORklHX0dFTkVSSUNfR1BJTyBpcyBub3Qgc2V0CiBDT05GSUdfR0VORVJJQ19USU1FPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKQEAgLTI4LDcgKzI5LDkgQEAKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CiBDT05GSUdfQVJDSF9IQVNfREVGQVVMVF9JRExFPXkKK0NPTkZJR19BUkNIX0hBU19DUFVfSURMRV9XQUlUPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCitDT05GSUdfQ09OU1RSVUNUT1JTPXkKIAogIwogIyBHZW5lcmFsIHNldHVwCkBAIC0zOCw2ICs0MSwxMiBAQAogQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgogQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgogQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9HWklQPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9CWklQMj15CitDT05GSUdfSEFWRV9LRVJORUxfTFpNQT15CitDT05GSUdfS0VSTkVMX0daSVA9eQorIyBDT05GSUdfS0VSTkVMX0JaSVAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFUk5FTF9MWk1BIGlzIG5vdCBzZXQKIENPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKIENPTkZJR19TWVNWSVBDX1NZU0NUTD15CkBAIC00OSwxMSArNTgsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldApAQCAtODMsMTkgKzkzLDIwIEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiAjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CkBAIC0xMDQsNiArMTE1LDEwIEBACiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CiBDT05GSUdfSEFWRV9DTEs9eQogQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCiAjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAogQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQogQ09ORklHX1NMQUJJTkZPPXkKQEAgLTExNiw3ICsxMzEsNyBAQAogIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKIENPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAorQ09ORklHX0xCREFGPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIApAQCAtMTYzLDYgKzE3OCw3IEBACiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDRfMjAyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjQgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzU3IGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwIGlzIG5vdCBzZXQKQEAgLTIwOCw2ICsyMjQsNyBAQAogQ09ORklHX05SX1FVSUNLPTIKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogCiAjCkBAIC0yOTUsNyArMzEyLDggQEAKIENPTkZJR19CT09UX0xJTktfT0ZGU0VUPTB4MDA4MDAwMDAKIENPTkZJR19FTlRSWV9PRkZTRVQ9MHgwMDAwMTAwMAogIyBDT05GSUdfVUJDX1dBS0VVUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAorIyBDT05GSUdfQ01ETElORV9PVkVSV1JJVEUgaXMgbm90IHNldAorIyBDT05GSUdfQ01ETElORV9FWFRFTkQgaXMgbm90IHNldAogCiAjCiAjIEJ1cyBvcHRpb25zCkBAIC00MTEsNiArNDI5LDcgQEAKICMgQ09ORklHX0lQX05GX0FSUFRBQkxFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC00NDIsNiArNDYxLDcgQEAKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWSBpcyBub3Qgc2V0CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldApAQCAtNDQ5LDcgKzQ2OSw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTQ2Miw2ICs0ODEsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogQ09ORklHX0ZXX0xPQURFUj15CkBAIC02MzEsNiArNjUxLDcgQEAKICMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1BNQ1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9MT1dMRVZFTF9QQ01DSUEgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CkBAIC02NTMsNyArNjc0LDExIEBACiAjCiAKICMKLSMgRW5hYmxlIG9ubHkgb25lIG9mIHRoZSB0d28gc3RhY2tzLCB1bmxlc3MgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nCisjIFlvdSBjYW4gZW5hYmxlIG9uZSBvciBib3RoIEZpcmVXaXJlIGRyaXZlciBzdGFja3MuCisjCisKKyMKKyMgU2VlIHRoZSBoZWxwIHRleHRzIGZvciBtb3JlIGluZm9ybWF0aW9uLgogIwogIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAogIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldApAQCAtNzI5LDYgKzc1NCw3IEBACiAjIENPTkZJR19WSUFfVkVMT0NJVFkgaXMgbm90IHNldAogIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKICMgQ09ORklHX0JOWDIgaXMgbm90IHNldAorIyBDT05GSUdfQ05JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDEgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMUUgaXMgbm90IHNldApAQCAtNzU0LDEwICs3ODAsNyBAQAogIyBDT05GSUdfU0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX0JFMk5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC04NjgsMTAgKzg5MSwyMCBAQAogQ09ORklHX0RFVlBPUlQ9eQogIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisKKyMKKyMgUFBTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogQ09ORklHX0hXTU9OPXkKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBOYXRpdmUgZHJpdmVycworIwogIyBDT05GSUdfU0VOU09SU19JNUtfQU1CIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0Y3MTg4MkZHIGlzIG5vdCBzZXQKQEAgLTg4Niw5ICs5MTksNyBAQAogIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtOTEwLDYgKzk0MSw3IEBACiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKK0NPTkZJR19WR0FfQVJCPXkKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiAjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CkBAIC05MjgsMTEgKzk2MCwxMSBAQAogQ09ORklHX0ZPTlRfOHgxNj15CiBDT05GSUdfU09VTkQ9bQogQ09ORklHX1NPVU5EX09TU19DT1JFPXkKK0NPTkZJR19TT1VORF9PU1NfQ09SRV9QUkVDTEFJTT15CiAjIENPTkZJR19TTkQgaXMgbm90IHNldAogQ09ORklHX1NPVU5EX1BSSU1FPW0KIENPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAogCiAjCkBAIC05NjEsNiArOTkzLDcgQEAKIENPTkZJR19ISURfRVpLRVk9bQogIyBDT05GSUdfSElEX0tZRSBpcyBub3Qgc2V0CiBDT05GSUdfSElEX0dZUkFUSU9OPW0KKyMgQ09ORklHX0hJRF9UV0lOSEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9LRU5TSU5HVE9OIGlzIG5vdCBzZXQKIENPTkZJR19ISURfTE9HSVRFQ0g9bQogIyBDT05GSUdfTE9HSVRFQ0hfRkYgaXMgbm90IHNldApAQCAtMTAxMSw2ICsxMDQ0LDcgQEAKICMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9PSENJX0hDRD15CiAjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX0RFU0MgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPIGlzIG5vdCBzZXQKQEAgLTExNzcsOCArMTIxMSwxMCBAQAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtMTI1MSw3ICsxMjg3LDYgQEAKIENPTkZJR19VRlNfRlM9bQogIyBDT05GSUdfVUZTX0ZTX1dSSVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz1tCiBDT05GSUdfTkZTX1YzPXkKQEAgLTEzMzEsNiArMTM2Niw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xMzQwLDggKzEzNzYsMTEgQEAKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUPXkKIENPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKK0NPTkZJR19IQVZFX1NZU0NBTExfVFJBQ0VQT0lOVFM9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiAjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CkBAIC0xMzUwLDYgKzEzODksNyBAQAogQ09ORklHX1NIX1NUQU5EQVJEX0JJT1M9eQogIyBDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFIGlzIG5vdCBzZXQKICMgQ09ORklHX0VBUkxZX1BSSU5USyBpcyBub3Qgc2V0CisjIENPTkZJR19EV0FSRl9VTldJTkRFUiBpcyBub3Qgc2V0CiAKICMKICMgU2VjdXJpdHkgb3B0aW9ucwpAQCAtMTM2Myw3ICsxNDAzLDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUjIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKQEAgLTEzOTUsMTEgKzE0MzQsMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApAQCAtMTQ2Miw1ICsxNTAzLDYgQEAKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQorQ09ORklHX0hBVkVfTE1CPXkKIENPTkZJR19OTEFUVFI9eQogQ09ORklHX0dFTkVSSUNfQVRPTUlDNjQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL2xib3hyZTJfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL2xib3hyZTJfZGVmY29uZmlnCmluZGV4IGMwYmMyZmQuLmVjMGMwYjQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9sYm94cmUyX2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3MvbGJveHJlMl9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzAKLSMgVGh1IEp1biAxOCAxMjoyOTo1MCAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEKKyMgVGh1IFNlcCAyNCAxODowOTo1OSAyMDA5CiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0xNCw2ICsxNCw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CitDT05GSUdfSVJRX1BFUl9DUFU9eQogIyBDT05GSUdfR0VORVJJQ19HUElPIGlzIG5vdCBzZXQKIENPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQpAQCAtMjgsNyArMjksOSBAQAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQorQ09ORklHX0FSQ0hfSEFTX0NQVV9JRExFX1dBSVQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKQEAgLTM4LDYgKzQxLDEyIEBACiBDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiBDT05GSUdfTE9DQUxWRVJTSU9OPSIiCiBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX0hBVkVfS0VSTkVMX0daSVA9eQorQ09ORklHX0hBVkVfS0VSTkVMX0JaSVAyPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9MWk1BPXkKK0NPTkZJR19LRVJORUxfR1pJUD15CisjIENPTkZJR19LRVJORUxfQlpJUDIgaXMgbm90IHNldAorIyBDT05GSUdfS0VSTkVMX0xaTUEgaXMgbm90IHNldAogQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKQEAgLTQ5LDExICs1OCwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiAjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CkBAIC04MywxOSArOTMsMjAgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAorIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKICMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKQEAgLTEwNCw2ICsxMTUsMTAgQEAKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKIENPTkZJR19IQVZFX0NMSz15CiBDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKICMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CiBDT05GSUdfU0xBQklORk89eQpAQCAtMTE2LDcgKzEzMSw3IEBACiAjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAogQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CitDT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCkBAIC0xNjMsNiArMTc4LDcgQEAKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINF8yMDIgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTcgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc3MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODAgaXMgbm90IHNldApAQCAtMjA4LDYgKzIyNCw3IEBACiBDT05GSUdfTlJfUVVJQ0s9MgogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiAKICMKQEAgLTI5NSw3ICszMTIsOCBAQAogQ09ORklHX0JPT1RfTElOS19PRkZTRVQ9MHgwMDgwMDAwMAogQ09ORklHX0VOVFJZX09GRlNFVD0weDAwMDAxMDAwCiAjIENPTkZJR19VQkNfV0FLRVVQIGlzIG5vdCBzZXQKLUNPTkZJR19DTURMSU5FX0JPT0w9eQorQ09ORklHX0NNRExJTkVfT1ZFUldSSVRFPXkKKyMgQ09ORklHX0NNRExJTkVfRVhURU5EIGlzIG5vdCBzZXQKIENPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eVNDMSwxMTUyMDAgcm9vdD0vZGV2L3NkYTEiCiAKICMKQEAgLTQxMSw2ICs0MjksNyBAQAogIyBDT05GSUdfSVBfTkZfQVJQVEFCTEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTQ0MCw2ICs0NTksNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CkBAIC00NDcsNyArNDY3LDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtNDYwLDYgKzQ3OSw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiBDT05GSUdfRldfTE9BREVSPXkKQEAgLTU3MiwxMiArNTkyLDE0IEBACiAjIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9QTUNSQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTE9XTEVWRUxfUENNQ0lBIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKIENPTkZJR19BVEE9eQogIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19BVEFfVkVSQk9TRV9FUlJPUj15CiBDT05GSUdfU0FUQV9QTVA9eQogIyBDT05GSUdfU0FUQV9BSENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBVEFfU0lMMjQgaXMgbm90IHNldApAQCAtNTk5LDYgKzYyMSw3IEBACiAjIENPTkZJR19QQVRBX0FMSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FNRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FSVE9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQVRQODY3WCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FUSUlYUCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0NNRDY0MF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9DTUQ2NFggaXMgbm90IHNldApAQCAtNjI3LDYgKzY1MCw3IEBACiAjIENPTkZJR19QQVRBX1BDTUNJQSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1BEQ19PTEQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SQURJU1lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUkRDIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUloxMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0MxMjAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0VSVkVSV09SS1MgaXMgbm90IHNldApAQCAtNjQ1LDcgKzY2OSwxMSBAQAogIwogCiAjCi0jIEVuYWJsZSBvbmx5IG9uZSBvZiB0aGUgdHdvIHN0YWNrcywgdW5sZXNzIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZworIyBZb3UgY2FuIGVuYWJsZSBvbmUgb3IgYm90aCBGaXJlV2lyZSBkcml2ZXIgc3RhY2tzLgorIworCisjCisjIFNlZSB0aGUgaGVscCB0ZXh0cyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KICMKICMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKQEAgLTcyNSw2ICs3NTMsNyBAQAogIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NOSUMgaXMgbm90IHNldAogIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDFFIGlzIG5vdCBzZXQKQEAgLTc1MCwxMCArNzc5LDcgQEAKICMgQ09ORklHX1NGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRTJORVQgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtODYzLDEwICs4ODksMjAgQEAKIENPTkZJR19ERVZQT1JUPXkKICMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TUEkgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKIENPTkZJR19IV01PTj15CiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgTmF0aXZlIGRyaXZlcnMKKyMKICMgQ09ORklHX1NFTlNPUlNfSTVLX0FNQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19GNzE4ODJGRyBpcyBub3Qgc2V0CkBAIC04ODEsOSArOTE3LDcgQEAKICMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTkwNSw2ICs5MzksNyBAQAogIwogIyBHcmFwaGljcyBzdXBwb3J0CiAjCitDT05GSUdfVkdBX0FSQj15CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldApAQCAtOTIzLDcgKzk1OCw2IEBACiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAogCkBAIC0xMDIxLDggKzEwNTUsMTAgQEAKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKQEAgLTEwODksNyArMTEyNSw2IEBACiBDT05GSUdfUk9NRlNfT05fQkxPQ0s9eQogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKICMgQ09ORklHX05GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKQEAgLTExNTUsNiArMTE5MCw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xMTY0LDggKzEyMDAsMTEgQEAKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUPXkKIENPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKK0NPTkZJR19IQVZFX1NZU0NBTExfVFJBQ0VQT0lOVFM9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiAjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CkBAIC0xMTc0LDYgKzEyMTMsNyBAQAogQ09ORklHX1NIX1NUQU5EQVJEX0JJT1M9eQogIyBDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFIGlzIG5vdCBzZXQKICMgQ09ORklHX0VBUkxZX1BSSU5USyBpcyBub3Qgc2V0CisjIENPTkZJR19EV0FSRl9VTldJTkRFUiBpcyBub3Qgc2V0CiAKICMKICMgU2VjdXJpdHkgb3B0aW9ucwpAQCAtMTE4Nyw3ICsxMjI3LDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUjIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKQEAgLTEyMTksMTEgKzEyNTgsMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApAQCAtMTI4Niw1ICsxMzI3LDYgQEAKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQorQ09ORklHX0hBVkVfTE1CPXkKIENPTkZJR19OTEFUVFI9eQogQ09ORklHX0dFTkVSSUNfQVRPTUlDNjQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL21hZ2ljcGFuZWxyMl9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3MvbWFnaWNwYW5lbHIyX2RlZmNvbmZpZwppbmRleCBjNTg1OWU4Li43OTA5MWUzIDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3MvbWFnaWNwYW5lbHIyX2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3MvbWFnaWNwYW5lbHIyX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMAotIyBUaHUgSnVuIDE4IDEyOjMwOjMxIDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMQorIyBUaHUgU2VwIDI0IDE4OjEwOjQ5IDIwMDkKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTE0LDYgKzE0LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfR0VORVJJQ19HUElPPXkKIENPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQpAQCAtMjgsNyArMjksOSBAQAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQorQ09ORklHX0FSQ0hfSEFTX0NQVV9JRExFX1dBSVQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKQEAgLTM4LDYgKzQxLDEyIEBACiBDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiBDT05GSUdfTE9DQUxWRVJTSU9OPSIiCiAjIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9LRVJORUxfR1pJUD15CitDT05GSUdfSEFWRV9LRVJORUxfQlpJUDI9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTUE9eQorQ09ORklHX0tFUk5FTF9HWklQPXkKKyMgQ09ORklHX0tFUk5FTF9CWklQMiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVJORUxfTFpNQSBpcyBub3Qgc2V0CiBDT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfU1lTVklQQ19TWVNDVEw9eQpAQCAtNTIsMTEgKzYxLDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTcKICMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKQEAgLTkxLDE4ICsxMDEsMTkgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAorIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKICMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKQEAgLTExMSw2ICsxMjIsMTAgQEAKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKIENPTkZJR19IQVZFX0NMSz15CiBDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKICMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CiBDT05GSUdfU0xBQklORk89eQpAQCAtMTIzLDcgKzEzOCw3IEBACiBDT05GSUdfTU9EVkVSU0lPTlM9eQogQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTD15CiBDT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKK0NPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKQEAgLTE3MCw2ICsxODUsNyBAQAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g0XzIwMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1NyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCBpcyBub3Qgc2V0CkBAIC0yMTUsNiArMjMxLDcgQEAKIENPTkZJR19OUl9RVUlDSz0yCiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIAogIwpAQCAtMzA2LDcgKzMyMyw4IEBACiBDT05GSUdfWkVST19QQUdFX09GRlNFVD0weDAwMDAxMDAwCiBDT05GSUdfQk9PVF9MSU5LX09GRlNFVD0weDAwODAwMDAwCiBDT05GSUdfRU5UUllfT0ZGU0VUPTB4MDAwMDEwMDAKLSMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CisjIENPTkZJR19DTURMSU5FX09WRVJXUklURSBpcyBub3Qgc2V0CisjIENPTkZJR19DTURMSU5FX0VYVEVORCBpcyBub3Qgc2V0CiAKICMKICMgQnVzIG9wdGlvbnMKQEAgLTM2OCw2ICszODYsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTM5Nyw2ICs0MTYsNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CkBAIC00MDQsNyArNDI0LDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtNDE3LDYgKzQzNiw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TVEFOREFMT05FIGlzIG5vdCBzZXQKICMgQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQgaXMgbm90IHNldAogQ09ORklHX0ZXX0xPQURFUj15CkBAIC00MjgsOSArNDQ4LDkgQEAKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUz15CiBDT05GSUdfTVREX1JFREJPT1RfRElSRUNUT1JZX0JMT0NLPS0xCiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUU19VTkFMTE9DQVRFRCBpcyBub3Qgc2V0CkBAIC01ODksMTAgKzYwOSw3IEBACiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTYzMSwxMyArNjQ4LDE1IEBACiAjCiBDT05GSUdfSU5QVVRfS0VZQk9BUkQ9eQogQ09ORklHX0tFWUJPQVJEX0FUS0JEPXkKLSMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfR1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9NQVRSSVggaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX09QRU5DT1JFUyBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfU0hfS0VZU0MgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAogQ09ORklHX0lOUFVUX01PVVNFPXkKICMgQ09ORklHX01PVVNFX1BTMiBpcyBub3Qgc2V0CiAjIENPTkZJR19NT1VTRV9TRVJJQUwgaXMgbm90IHNldApAQCAtNzAxLDYgKzcyMCwxMSBAQAogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkMgaXMgbm90IHNldAogIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKworIworIyBQUFMgc3VwcG9ydAorIworIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX1JFUVVJUkVfR1BJT0xJQj15CiBDT05GSUdfR1BJT0xJQj15CiAjIENPTkZJR19ERUJVR19HUElPIGlzIG5vdCBzZXQKQEAgLTcyMSwxMSArNzQ1LDE0IEBACiAjCiAjIFNQSSBHUElPIGV4cGFuZGVyczoKICMKKworIworIyBBQzk3IEdQSU8gZXhwYW5kZXJzOgorIwogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtODI5LDggKzg1NiwxMCBAQAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogIyBDT05GSUdfRE5PVElGWSBpcyBub3Qgc2V0CkBAIC05MDAsNyArOTI5LDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQpAQCAtOTc2LDYgKzEwMDQsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKIENPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTEwMDYsMjQgKzEwMzUsMzAgQEAKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKIENPTkZJR19GUkFNRV9QT0lOVEVSPXkKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQogIyBDT05GSUdfUEFHRV9QT0lTT05JTkcgaXMgbm90IHNldAogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVD15CiBDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CitDT05GSUdfSEFWRV9TWVNDQUxMX1RSQUNFUE9JTlRTPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogQ09ORklHX0ZUUkFDRT15CiAjIENPTkZJR19GVU5DVElPTl9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfSVJRU09GRl9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0VOQUJMRV9ERUZBVUxUX1RSQUNFUlMgaXMgbm90IHNldAorIyBDT05GSUdfRlRSQUNFX1NZU0NBTExTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKIENPTkZJR19CUkFOQ0hfUFJPRklMRV9OT05FPXkKICMgQ09ORklHX1BST0ZJTEVfQU5OT1RBVEVEX0JSQU5DSEVTIGlzIG5vdCBzZXQKQEAgLTEwMzYsMTYgKzEwNzEsMTUgQEAKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX0tHREIgaXMgbm90IHNldAotIyBDT05GSUdfS01FTUNIRUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MgaXMgbm90IHNldAogQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRT15CiBDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFX1BPUlQ9MHhhNDQzMDAwMAogQ09ORklHX0VBUkxZX1BSSU5USz15Ci0jIENPTkZJR19ERUJVR19CT09UTUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1cgaXMgbm90IHNldAorIyBDT05GSUdfU1RBQ0tfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAogIyBDT05GSUdfNEtTVEFDS1MgaXMgbm90IHNldAogQ09ORklHX0RVTVBfQ09ERT15CisjIENPTkZJR19EV0FSRl9VTldJTkRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TSF9OT19CU1NfSU5JVCBpcyBub3Qgc2V0CiAKICMKQEAgLTEwNzcsNSArMTExMSw2IEBACiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19IQVZFX0xNQj15CiBDT05GSUdfTkxBVFRSPXkKIENPTkZJR19HRU5FUklDX0FUT01JQzY0PXkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9taWNyb2Rldl9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3MvbWljcm9kZXZfZGVmY29uZmlnCmluZGV4IGU1YTIxZTEuLjZiYjU5NzYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9taWNyb2Rldl9kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL21pY3JvZGV2X2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMAotIyBUaHUgSnVuIDE4IDEyOjMxOjU2IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMQorIyBUaHUgU2VwIDI0IDE4OjE0OjM1IDIwMDkKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTE0LDYgKzE0LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19JUlFfUEVSX0NQVT15CiAjIENPTkZJR19HRU5FUklDX0dQSU8gaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CkBAIC0yNyw3ICsyOCw5IEBACiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQogQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15CitDT05GSUdfQVJDSF9IQVNfQ1BVX0lETEVfV0FJVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtMzgsNiArNDEsMTIgQEAKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIENPTkZJR19MT0NBTFZFUlNJT049IiIKIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfSEFWRV9LRVJORUxfR1pJUD15CitDT05GSUdfSEFWRV9LRVJORUxfQlpJUDI9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTUE9eQorQ09ORklHX0tFUk5FTF9HWklQPXkKKyMgQ09ORklHX0tFUk5FTF9CWklQMiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVJORUxfTFpNQSBpcyBub3Qgc2V0CiBDT05GSUdfU1dBUD15CiAjIENPTkZJR19TWVNWSVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CkBAIC00OSwxMSArNTgsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldApAQCAtODcsMTggKzk3LDE5IEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQogQ09ORklHX0hBVkVfS1BST0JFUz15CkBAIC0xMDYsNiArMTE3LDEwIEBACiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CiBDT05GSUdfSEFWRV9DTEs9eQogQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCiAjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAogQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQogQ09ORklHX1NMQUJJTkZPPXkKQEAgLTExMyw3ICsxMjgsNyBAQAogQ09ORklHX0JBU0VfU01BTEw9MAogIyBDT05GSUdfTU9EVUxFUyBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKK0NPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKQEAgLTE2MCw2ICsxNzUsNyBAQAogQ09ORklHX0NQVV9TVUJUWVBFX1NINF8yMDI9eQogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTcgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc3MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODAgaXMgbm90IHNldApAQCAtMjExLDYgKzIyNyw3IEBACiBDT05GSUdfTlJfUVVJQ0s9MgogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiAKICMKQEAgLTI5Niw3ICszMTMsOCBAQAogQ09ORklHX0JPT1RfTElOS19PRkZTRVQ9MHgwMDgwMDAwMAogQ09ORklHX0VOVFJZX09GRlNFVD0weDAwMDAxMDAwCiAjIENPTkZJR19VQkNfV0FLRVVQIGlzIG5vdCBzZXQKLUNPTkZJR19DTURMSU5FX0JPT0w9eQorQ09ORklHX0NNRExJTkVfT1ZFUldSSVRFPXkKKyMgQ09ORklHX0NNRExJTkVfRVhURU5EIGlzIG5vdCBzZXQKIENPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eVNDMCwxMTUyMDAgcm9vdD0vZGV2L2hkYTEiCiAKICMKQEAgLTM2NCw2ICszODIsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTM5Myw2ICs0MTIsNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CkBAIC00MDAsNyArNDIwLDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtNDEzLDYgKzQzMiw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldApAQCAtNDk5LDEwICs1MTksNyBAQAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15CiBDT05GSUdfTkVUREVWXzEwMDAwPXkKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTU2MSwxMCArNTc4LDIwIEBACiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TUEkgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKIENPTkZJR19IV01PTj15CiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgTmF0aXZlIGRyaXZlcnMKKyMKICMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0Y3MTg4MkZHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0CkBAIC01NzUsOSArNjAyLDcgQEAKICMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTY2Miw4ICs2ODcsMTAgQEAKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKQEAgLTcyNiwxMiArNzUzLDEyIEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKICMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAogQ09ORklHX05GU19WND15CisjIENPTkZJR19ORlNfVjRfMSBpcyBub3Qgc2V0CiBDT05GSUdfUk9PVF9ORlM9eQogIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CiBDT05GSUdfTE9DS0Q9eQpAQCAtODAzLDYgKzgzMCw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC04MTIsOCArODQwLDExIEBACiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVD15CiBDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CitDT05GSUdfSEFWRV9TWVNDQUxMX1RSQUNFUE9JTlRTPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldApAQCAtODIxLDYgKzg1Miw3IEBACiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfU0hfU1RBTkRBUkRfQklPUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfRFdBUkZfVU5XSU5ERVIgaXMgbm90IHNldAogCiAjCiAjIFNlY3VyaXR5IG9wdGlvbnMKQEAgLTgzNCw3ICs4NjYsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKIENPTkZJR19DUllQVE9fQUxHQVBJMj15CiBDT05GSUdfQ1JZUFRPX0FFQUQyPXkKQEAgLTg3NSwxMSArOTA2LDEzIEBACiAjCiAjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTUQ1PXkKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CkBAIC05NDMsNSArOTc2LDYgQEAKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQorQ09ORklHX0hBVkVfTE1CPXkKIENPTkZJR19OTEFUVFI9eQogQ09ORklHX0dFTkVSSUNfQVRPTUlDNjQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL21pZ29yX2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9taWdvcl9kZWZjb25maWcKaW5kZXggYjE4Y2ZkMy4uNjUwMTgyOCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL21pZ29yX2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3MvbWlnb3JfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMwCi0jIFRodSBKdW4gMTggMTY6MDY6NDggMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxCisjIFRodSBTZXAgMjQgMTg6MTc6NDEgMjAwOQogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtMTQsNiArMTQsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiBDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQorQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19HRU5FUklDX0dQSU89eQogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CkBAIC0yOSw3ICszMCw5IEBACiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQogQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15CitDT05GSUdfQVJDSF9IQVNfQ1BVX0lETEVfV0FJVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtMzksNiArNDIsMTIgQEAKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIENPTkZJR19MT0NBTFZFUlNJT049IiIKIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfSEFWRV9LRVJORUxfR1pJUD15CitDT05GSUdfSEFWRV9LRVJORUxfQlpJUDI9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTUE9eQorQ09ORklHX0tFUk5FTF9HWklQPXkKKyMgQ09ORklHX0tFUk5FTF9CWklQMiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVJORUxfTFpNQSBpcyBub3Qgc2V0CiBDT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfU1lTVklQQ19TWVNDVEw9eQpAQCAtNTAsMTEgKzU5LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CkBAIC04OSwxOSArOTksMjEgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworQ09ORklHX1BFUkZfRVZFTlRTPXkKK0NPTkZJR19FVkVOVF9QUk9GSUxFPXkKKyMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiBDT05GSUdfUFJPRklMSU5HPXkKIENPTkZJR19UUkFDRVBPSU5UUz15Ci1DT05GSUdfTUFSS0VSUz15CiBDT05GSUdfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CkBAIC0xMTEsNiArMTIzLDExIEBACiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CiBDT05GSUdfSEFWRV9DTEs9eQogQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCisjIENPTkZJR19HQ09WX0tFUk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAogQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQogQ09ORklHX1NMQUJJTkZPPXkKQEAgLTEyMiw3ICsxMzksNyBAQAogIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKIENPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAorQ09ORklHX0xCREFGPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIApAQCAtMTM4LDcgKzE1NSw3IEBACiAjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgotIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CitDT05GSUdfRlJFRVpFUj15CiAKICMKICMgU3lzdGVtIHR5cGUKQEAgLTE3Myw2ICsxOTAsNyBAQAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g0XzIwMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1NyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCBpcyBub3Qgc2V0CkBAIC0yMjQsNiArMjQyLDcgQEAKIENPTkZJR19OUl9RVUlDSz0yCiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIAogIwpAQCAtMzA4LDcgKzMyNyw4IEBACiBDT05GSUdfWkVST19QQUdFX09GRlNFVD0weDAwMDAxMDAwCiBDT05GSUdfQk9PVF9MSU5LX09GRlNFVD0weDAwODAwMDAwCiBDT05GSUdfRU5UUllfT0ZGU0VUPTB4MDAwMDEwMDAKLUNPTkZJR19DTURMSU5FX0JPT0w9eQorQ09ORklHX0NNRExJTkVfT1ZFUldSSVRFPXkKKyMgQ09ORklHX0NNRExJTkVfRVhURU5EIGlzIG5vdCBzZXQKIENPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eTAgY29uc29sZT10dHlTQzAsMTE1MjAwIGVhcmx5cHJpbnRrPXNlcmlhbCBpcD1vbiByb290PS9kZXYvbmZzIGlwPWRoY3AiCiAKICMKQEAgLTMyOCw3ICszNDgsMTMgQEAKICMKICMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zIChFWFBFUklNRU5UQUwpCiAjCi0jIENPTkZJR19QTSBpcyBub3Qgc2V0CitDT05GSUdfUE09eQorIyBDT05GSUdfUE1fREVCVUcgaXMgbm90IHNldAorQ09ORklHX1BNX1NMRUVQPXkKK0NPTkZJR19TVVNQRU5EPXkKK0NPTkZJR19TVVNQRU5EX0ZSRUVaRVI9eQorIyBDT05GSUdfSElCRVJOQVRJT04gaXMgbm90IHNldAorQ09ORklHX1BNX1JVTlRJTUU9eQogIyBDT05GSUdfQ1BVX0lETEUgaXMgbm90IHNldAogQ09ORklHX05FVD15CiAKQEAgLTM3Niw2ICs0MDIsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTQwNiw2ICs0MzMsNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTU19FWFQ9eQogQ09ORklHX1dJUkVMRVNTX0VYVF9TWVNGUz15CkBAIC00MTQsNyArNDQyLDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtNDI3LDYgKzQ1NCw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiBDT05GSUdfRldfTE9BREVSPW0KQEAgLTQzNiw5ICs0NjQsOSBAQAogIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NPTkNBVD15CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ01ETElORV9QQVJUUz15CiAjIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKQEAgLTU4NSw3ICs2MTMsNiBAQAogIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAogQ09ORklHX1NDU0lfTE9XTEVWRUw9eQogIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQk5YMl9JU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUJGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUJGQ09FIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldApAQCAtNjIxLDEwICs2NDgsNyBAQAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC02NTksMTQgKzY4MywxOSBAQAogIyBJbnB1dCBEZXZpY2UgRHJpdmVycwogIwogQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKKyMgQ09ORklHX0tFWUJPQVJEX0FEUDU1ODggaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfQVRLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FUMjE2MCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfR1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9NQVRSSVggaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTUFYNzM1OSBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfT1BFTkNPUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CiBDT05GSUdfS0VZQk9BUkRfU0hfS0VZU0M9eQorIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKQEAgLTcxNSw2ICs3NDQsNyBAQAogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKICMgQ09ORklHX0kyQ19DSEFSREVWIGlzIG5vdCBzZXQKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogCkBAIC03MjUsNiArNzU1LDcgQEAKICMKICMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCiAjCisjIENPTkZJR19JMkNfREVTSUdOV0FSRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfR1BJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKIENPTkZJR19JMkNfU0hfTU9CSUxFPXkKQEAgLTc0NiwxNSArNzc3LDE3IEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TUEkgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfUkVRVUlSRV9HUElPTElCPXkKIENPTkZJR19HUElPTElCPXkKICMgQ09ORklHX0dQSU9fU1lTRlMgaXMgbm90IHNldApAQCAtNzc3LDExICs4MTAsMTQgQEAKICMKICMgU1BJIEdQSU8gZXhwYW5kZXJzOgogIworCisjCisjIEFDOTcgR1BJTyBleHBhbmRlcnM6CisjCiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19TU0JfUE9TU0lCTEU9eQogCkBAIC04MDEsOCArODM3LDEwIEBACiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfTUVESUFfU1VQUE9SVD15CiAKQEAgLTkyMiw3ICs5NjAsNiBAQAogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKIApAQCAtOTUyLDEzICs5ODksMTMgQEAKICMgQ09ORklHX1VTQl9HQURHRVRfTEg3QTQwWCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUX09NQVAgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVF9QWEEyNVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9SOEE2NjU5NyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUX1BYQTI3WCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUX1MzQ19IU09URyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX1MzQzI0MTAgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVF9JTVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9TM0MyNDEwIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfR0FER0VUX002NjU5Mj15CiBDT05GSUdfVVNCX002NjU5Mj15Ci1DT05GSUdfU1VQRVJIX0JVSUxUX0lOX002NjU5Mj15CiAjIENPTkZJR19VU0JfR0FER0VUX0FNRDU1MzZVREMgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVF9GU0xfUUUgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVF9DSTEzWFhYIGlzIG5vdCBzZXQKQEAgLTEwMTcsNiArMTA1NCw3IEBACiAjIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9SWDg1ODEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SWDgwMjUgaXMgbm90IHNldAogCiAjCiAjIFNQSSBSVEMgZHJpdmVycwpAQCAtMTA2NCw4ICsxMTAyLDEwIEBACiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiAjIENPTkZJR19ETk9USUZZIGlzIG5vdCBzZXQKQEAgLTExMjYsNyArMTE2Niw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiAjIENPTkZJR19ORlNfVjMgaXMgbm90IHNldApAQCAtMTE2MSw2ICsxMjAwLDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfRlM9eQogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xMTcyLDExICsxMjEyLDE1IEBACiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19OT1BfVFJBQ0VSPXkKIENPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VfTUNPVU5UX1RFU1Q9eQogQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQorQ09ORklHX0hBVkVfU1lTQ0FMTF9UUkFDRVBPSU5UUz15CiBDT05GSUdfUklOR19CVUZGRVI9eQogQ09ORklHX0VWRU5UX1RSQUNJTkc9eQogQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUj15CitDT05GSUdfUklOR19CVUZGRVJfQUxMT1dfU1dBUD15CiBDT05GSUdfVFJBQ0lORz15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKICMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CkBAIC0xMTg4LDYgKzEyMzIsNyBAQAogQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRT15CiBDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFX1BPUlQ9MHhmZmUwMDAwMAogQ09ORklHX0VBUkxZX1BSSU5USz15CisjIENPTkZJR19EV0FSRl9VTldJTkRFUiBpcyBub3Qgc2V0CiAKICMKICMgU2VjdXJpdHkgb3B0aW9ucwpAQCAtMTIwMSw3ICsxMjQ2LDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQogQ09ORklHX0NSWVBUT19BRUFEMj15CiBDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUjI9eQpAQCAtMTI0MCwxMSArMTI4NCwxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CkBAIC0xMzA4LDUgKzEzNTQsNiBAQAogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15CitDT05GSUdfSEFWRV9MTUI9eQogQ09ORklHX05MQVRUUj15CiBDT05GSUdfR0VORVJJQ19BVE9NSUM2ND15CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3MvcG9sYXJpc19kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3MvcG9sYXJpc19kZWZjb25maWcKaW5kZXggNjdlZGQzZi4uN2ZjMTk1MiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL3BvbGFyaXNfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9wb2xhcmlzX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMAotIyBUaHUgSnVuIDE4IDEyOjMzOjI4IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMQorIyBUaHUgU2VwIDI0IDE4OjIwOjUzIDIwMDkKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTE0LDYgKzE0LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19JUlFfUEVSX0NQVT15CiAjIENPTkZJR19HRU5FUklDX0dQSU8gaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CkBAIC0yNyw3ICsyOCw5IEBACiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQogQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15CitDT05GSUdfQVJDSF9IQVNfQ1BVX0lETEVfV0FJVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtMzgsNiArNDEsMTIgQEAKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIENPTkZJR19MT0NBTFZFUlNJT049IiIKICMgQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0tFUk5FTF9HWklQPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9CWklQMj15CitDT05GSUdfSEFWRV9LRVJORUxfTFpNQT15CitDT05GSUdfS0VSTkVMX0daSVA9eQorIyBDT05GSUdfS0VSTkVMX0JaSVAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFUk5FTF9MWk1BIGlzIG5vdCBzZXQKICMgQ09ORklHX1NXQVAgaXMgbm90IHNldAogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKQEAgLTUyLDExICs2MSwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfR1JPVVBfU0NIRUQ9eQpAQCAtOTEsMTggKzEwMSwxOSBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CisjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQpAQCAtMTExLDYgKzEyMiwxMCBAQAogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQogQ09ORklHX0hBVkVfQ0xLPXkKIENPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIwogIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKIENPTkZJR19TTEFCSU5GTz15CkBAIC0xMjMsNyArMTM4LDcgQEAKIENPTkZJR19NT0RWRVJTSU9OUz15CiAjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAogQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CitDT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCkBAIC0xNzAsNiArMTg1LDcgQEAKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINF8yMDIgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTcgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc3MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODAgaXMgbm90IHNldApAQCAtMjE1LDYgKzIzMSw3IEBACiBDT05GSUdfTlJfUVVJQ0s9MgogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiAKICMKQEAgLTMwMiw3ICszMTksOCBAQAogQ09ORklHX1pFUk9fUEFHRV9PRkZTRVQ9MHgwMDAwMTAwMAogQ09ORklHX0JPT1RfTElOS19PRkZTRVQ9MHgwMDgwMDAwMAogQ09ORklHX0VOVFJZX09GRlNFVD0weDAwMDAxMDAwCi1DT05GSUdfQ01ETElORV9CT09MPXkKK0NPTkZJR19DTURMSU5FX09WRVJXUklURT15CisjIENPTkZJR19DTURMSU5FX0VYVEVORCBpcyBub3Qgc2V0CiBDT05GSUdfQ01ETElORT0iY29uc29sZT10dHlTQzEsMTE1MjAwIHJvb3Q9L2Rldi9tdGRibG9jazIgcm9vdGZzdHlwZT1qZmZzMiBtZW09NjNNIG10ZHBhcnRzPXBoeXNtYXAtZmxhc2guMDoweDAwMTAwMDAwKGJvb3Rsb2FkZXIpcm8sMHgwMDUwMDAwMChLZXJuZWwpcm8sMHgwMEEwMDAwMChGaWxlc3lzdGVtKSIKIAogIwpAQCAtMzYzLDYgKzM4MSw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtNDAzLDYgKzQyMiw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiBDT05GSUdfRldfTE9BREVSPXkKQEAgLTQxNCw5ICs0MzQsOSBAQAogIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKICMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldApAQCAtNTc3LDEwICs1OTcsNyBAQAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC02NjYsMTEgKzY4MywxNSBAQAogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkMgaXMgbm90IHNldAogIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKworIworIyBQUFMgc3VwcG9ydAorIworIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTc3MCw4ICs3OTEsMTAgQEAKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKICMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldApAQCAtODQxLDcgKzg2NCw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKQEAgLTg3Nyw2ICs4OTksNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtOTE2LDE4ICs5MzksMjMgQEAKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX1NHPXkKICMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CiBDT05GSUdfRlJBTUVfUE9JTlRFUj15CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKICMgQ09ORklHX1BBR0VfUE9JU09OSU5HIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VfTUNPVU5UX1RFU1Q9eQogQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQorQ09ORklHX0hBVkVfU1lTQ0FMTF9UUkFDRVBPSU5UUz15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKIENPTkZJR19GVFJBQ0U9eQogIyBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSIGlzIG5vdCBzZXQKQEAgLTkzNSw2ICs5NjMsNyBAQAogIyBDT05GSUdfUFJFRU1QVF9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0VOQUJMRV9ERUZBVUxUX1RSQUNFUlMgaXMgbm90IHNldAorIyBDT05GSUdfRlRSQUNFX1NZU0NBTExTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKIENPTkZJR19CUkFOQ0hfUFJPRklMRV9OT05FPXkKICMgQ09ORklHX1BST0ZJTEVfQU5OT1RBVEVEX0JSQU5DSEVTIGlzIG5vdCBzZXQKQEAgLTk0NywxNiArOTc2LDE1IEBACiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tNRU1DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19TSF9TVEFOREFSRF9CSU9TIGlzIG5vdCBzZXQKIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEU9eQotQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRV9QT1JUPTB4MDAwMDAwMDAKK0NPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEVfUE9SVD0weGE0MDAwMTUwCiBDT05GSUdfRUFSTFlfUFJJTlRLPXkKLSMgQ09ORklHX0RFQlVHX0JPT1RNRU0gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVyBpcyBub3Qgc2V0CisjIENPTkZJR19TVEFDS19ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CiAjIENPTkZJR180S1NUQUNLUyBpcyBub3Qgc2V0CiBDT05GSUdfRFVNUF9DT0RFPXkKKyMgQ09ORklHX0RXQVJGX1VOV0lOREVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NIX05PX0JTU19JTklUIGlzIG5vdCBzZXQKIAogIwpAQCAtOTg3LDUgKzEwMTUsNiBAQAogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15CitDT05GSUdfSEFWRV9MTUI9eQogQ09ORklHX05MQVRUUj15CiBDT05GSUdfR0VORVJJQ19BVE9NSUM2ND15CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3Mvcjc3ODBtcF9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3Mvcjc3ODBtcF9kZWZjb25maWcKaW5kZXggMTA3YThlMy4uOTAzYjAyMSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL3I3NzgwbXBfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9yNzc4MG1wX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMAotIyBUaHUgSnVuIDE4IDEyOjM0OjQ0IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMQorIyBUaHUgU2VwIDI0IDE4OjI0OjMxIDIwMDkKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTE0LDYgKzE0LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19JUlFfUEVSX0NQVT15CiAjIENPTkZJR19HRU5FUklDX0dQSU8gaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CkBAIC0yOCw4ICsyOSwxMCBAQAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQorQ09ORklHX0FSQ0hfSEFTX0NQVV9JRExFX1dBSVQ9eQogQ09ORklHX0lPX1RSQVBQRUQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKQEAgLTQwLDYgKzQzLDEyIEBACiBDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiBDT05GSUdfTE9DQUxWRVJTSU9OPSIiCiBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX0hBVkVfS0VSTkVMX0daSVA9eQorQ09ORklHX0hBVkVfS0VSTkVMX0JaSVAyPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9MWk1BPXkKK0NPTkZJR19LRVJORUxfR1pJUD15CisjIENPTkZJR19LRVJORUxfQlpJUDIgaXMgbm90IHNldAorIyBDT05GSUdfS0VSTkVMX0xaTUEgaXMgbm90IHNldAogQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKQEAgLTUyLDExICs2MSwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNApAQCAtOTIsMjAgKzEwMiwyMiBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCitDT05GSUdfUEVSRl9FVkVOVFM9eQorQ09ORklHX0VWRU5UX1BST0ZJTEU9eQorIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKIENPTkZJR19QUk9GSUxJTkc9eQogQ09ORklHX1RSQUNFUE9JTlRTPXkKLUNPTkZJR19NQVJLRVJTPXkKIENPTkZJR19PUFJPRklMRT1tCiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiAjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKQEAgLTExNSw2ICsxMjcsMTEgQEAKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKIENPTkZJR19IQVZFX0NMSz15CiBDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKKyMgQ09ORklHX0dDT1ZfS0VSTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CiBDT05GSUdfU0xBQklORk89eQpAQCAtMTI2LDcgKzE0Myw3IEBACiAjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAogQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CitDT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCkBAIC0xNzQsNiArMTkxLDcgQEAKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINF8yMDIgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTcgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc3MCBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwPXkKQEAgLTIyOSw2ICsyNDcsNyBAQAogQ09ORklHX05SX1FVSUNLPTIKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogCiAjCkBAIC0zMTUsNyArMzM0LDggQEAKIENPTkZJR19aRVJPX1BBR0VfT0ZGU0VUPTB4MDAwMDEwMDAKIENPTkZJR19CT09UX0xJTktfT0ZGU0VUPTB4MDA4MDAwMDAKIENPTkZJR19FTlRSWV9PRkZTRVQ9MHgwMDAwMTAwMAotQ09ORklHX0NNRExJTkVfQk9PTD15CitDT05GSUdfQ01ETElORV9PVkVSV1JJVEU9eQorIyBDT05GSUdfQ01ETElORV9FWFRFTkQgaXMgbm90IHNldAogQ09ORklHX0NNRExJTkU9ImNvbnNvbGU9dHR5U0MwLDExNTIwMCByb290PS9kZXYvc2RhMSIKIAogIwpAQCAtMzk2LDYgKzQxNiw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiBDT05GSUdfU1RQPW0KQEAgLTQyOCw2ICs0NDksNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTU19FWFQ9eQogQ09ORklHX1dJUkVMRVNTX0VYVF9TWVNGUz15CkBAIC00MzYsNyArNDU4LDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtNDQ5LDYgKzQ3MCw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiBDT05GSUdfRldfTE9BREVSPW0KQEAgLTQ2MCw5ICs0ODIsOSBAQAogIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CkBAIC01MTMsNiArNTM1LDcgQEAKIENPTkZJR19NVERfUEhZU01BUD15CiAjIENPTkZJR19NVERfUEhZU01BUF9DT01QQVQgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfR1BJT19BRERSIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9JTlRFTF9WUl9OT1IgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAogCkBAIC02NTEsMTEgKzY3NCwxMyBAQAogIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUE1DUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfQVRBPXkKICMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CitDT05GSUdfQVRBX1ZFUkJPU0VfRVJST1I9eQogQ09ORklHX1NBVEFfUE1QPXkKICMgQ09ORklHX1NBVEFfQUhDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQVRBX1NJTDI0IGlzIG5vdCBzZXQKQEAgLTY3Nyw2ICs3MDIsNyBAQAogIyBDT05GSUdfUEFUQV9BTEkgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BTUQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BUlRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FUUDg2N1ggaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BVElJWFAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9DTUQ2NDBfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjRYIGlzIG5vdCBzZXQKQEAgLTcwNCw2ICs3MzAsNyBAQAogIyBDT05GSUdfUEFUQV9PUFRJRE1BIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUERDX09MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JBRElTWVMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9SREMgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SWjEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TQzEyMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TRVJWRVJXT1JLUyBpcyBub3Qgc2V0CkBAIC03MjIsNyArNzQ5LDExIEBACiAjCiAKICMKLSMgRW5hYmxlIG9ubHkgb25lIG9mIHRoZSB0d28gc3RhY2tzLCB1bmxlc3MgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nCisjIFlvdSBjYW4gZW5hYmxlIG9uZSBvciBib3RoIEZpcmVXaXJlIGRyaXZlciBzdGFja3MuCisjCisKKyMKKyMgU2VlIHRoZSBoZWxwIHRleHRzIGZvciBtb3JlIGluZm9ybWF0aW9uLgogIwogIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAogIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldApAQCAtODA0LDYgKzgzNSw3IEBACiAjIENPTkZJR19WSUFfVkVMT0NJVFkgaXMgbm90IHNldAogIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKICMgQ09ORklHX0JOWDIgaXMgbm90IHNldAorIyBDT05GSUdfQ05JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDEgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMUUgaXMgbm90IHNldApAQCAtODI5LDEwICs4NjEsNyBAQAogIyBDT05GSUdfU0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX0JFMk5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC04NzMsMTMgKzkwMiwxNyBAQAogIyBJbnB1dCBEZXZpY2UgRHJpdmVycwogIwogQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKKyMgQ09ORklHX0tFWUJPQVJEX0FEUDU1ODggaXMgbm90IHNldAogQ09ORklHX0tFWUJPQVJEX0FUS0JEPXkKLSMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CisjIENPTkZJR19RVDIxNjAgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTUFYNzM1OSBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfT1BFTkNPUkVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9TSF9LRVlTQyBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldApAQCAtOTMzLDYgKzk2Niw3IEBACiBDT05GSUdfREVWUE9SVD15CiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15CiBDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIApAQCAtOTYxLDYgKzk5NSw3IEBACiAjCiAjIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQogIworIyBDT05GSUdfSTJDX0RFU0lHTldBUkUgaXMgbm90IHNldAogQ09ORklHX0kyQ19ISUdITEFOREVSPXkKICMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1NIX01PQklMRSBpcyBub3Qgc2V0CkBAIC05ODcsMTkgKzEwMjIsMjYgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisKKyMKKyMgUFBTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogQ09ORklHX0hXTU9OPXkKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBOYXRpdmUgZHJpdmVycworIwogIyBDT05GSUdfU0VOU09SU19BRDc0MTQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKQEAgLTEwNDksNiArMTA5MSw3IEBACiAjIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UTVA0MDEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UTVA0MjEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WSUE2ODZBIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKQEAgLTEwNjAsNyArMTEwMyw2IEBACiAjIENPTkZJR19TRU5TT1JTX1c4M0w3ODZORyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAogQ09ORklHX1RIRVJNQUw9eQogIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CkBAIC0xMDgxLDE0ICsxMTIzLDE3IEBACiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwogIyBHcmFwaGljcyBzdXBwb3J0CiAjCitDT05GSUdfVkdBX0FSQj15CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldApAQCAtMTEwMSwxMSArMTE0NiwxMSBAQAogIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKIENPTkZJR19TT1VORD1tCiBDT05GSUdfU09VTkRfT1NTX0NPUkU9eQorQ09ORklHX1NPVU5EX09TU19DT1JFX1BSRUNMQUlNPXkKICMgQ09ORklHX1NORCBpcyBub3Qgc2V0CiBDT05GSUdfU09VTkRfUFJJTUU9bQogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKIApAQCAtMTE2OSw2ICsxMjE0LDcgQEAKICMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1JYODU4MSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JYODAyNSBpcyBub3Qgc2V0CiAKICMKICMgU1BJIFJUQyBkcml2ZXJzCkBAIC0xMjIxLDggKzEyNjcsMTAgQEAKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfRlNfUE9TSVhfQUNMPXkKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC0xMjg5LDEyICsxMzM3LDEyIEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKICMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAogQ09ORklHX05GU19WND15CisjIENPTkZJR19ORlNfVjRfMSBpcyBub3Qgc2V0CiBDT05GSUdfUk9PVF9ORlM9eQogQ09ORklHX05GU0Q9eQogQ09ORklHX05GU0RfVjM9eQpAQCAtMTM3MCw2ICsxNDE4LDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiBDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0ZTPXkKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTQwNCwyMSArMTQ1MywyNyBAQAogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAogIyBDT05GSUdfRlJBTUVfUE9JTlRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogIyBDT05GSUdfUEFHRV9QT0lTT05JTkcgaXMgbm90IHNldAogQ09ORklHX05PUF9UUkFDRVI9eQogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVD15CiBDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CitDT05GSUdfSEFWRV9TWVNDQUxMX1RSQUNFUE9JTlRTPXkKIENPTkZJR19SSU5HX0JVRkZFUj15CiBDT05GSUdfRVZFTlRfVFJBQ0lORz15CiBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSPXkKK0NPTkZJR19SSU5HX0JVRkZFUl9BTExPV19TV0FQPXkKIENPTkZJR19UUkFDSU5HPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogQ09ORklHX0ZUUkFDRT15CkBAIC0xNDI3LDYgKzE0ODIsNyBAQAogIyBDT05GSUdfUFJFRU1QVF9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0VOQUJMRV9ERUZBVUxUX1RSQUNFUlMgaXMgbm90IHNldAorIyBDT05GSUdfRlRSQUNFX1NZU0NBTExTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKIENPTkZJR19CUkFOQ0hfUFJPRklMRV9OT05FPXkKICMgQ09ORklHX1BST0ZJTEVfQU5OT1RBVEVEX0JSQU5DSEVTIGlzIG5vdCBzZXQKQEAgLTE0NDUsMTEgKzE1MDEsMTEgQEAKIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEU9eQogQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRV9QT1JUPTB4ZmZlMDAwMDAKICMgQ09ORklHX0VBUkxZX1BSSU5USyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19CT09UTUVNIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XPXkKKyMgQ09ORklHX1NUQUNLX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKICMgQ09ORklHXzRLU1RBQ0tTIGlzIG5vdCBzZXQKIENPTkZJR19EVU1QX0NPREU9eQorIyBDT05GSUdfRFdBUkZfVU5XSU5ERVIgaXMgbm90IHNldAogIyBDT05GSUdfU0hfTk9fQlNTX0lOSVQgaXMgbm90IHNldAogCiAjCkBAIC0xNDY0LDcgKzE1MjAsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKIENPTkZJR19DUllQVE9fQUxHQVBJMj15CiBDT05GSUdfQ1JZUFRPX0FFQUQyPXkKQEAgLTE1MDYsMTEgKzE1NjEsMTMgQEAKICMKIENPTkZJR19DUllQVE9fSE1BQz15CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTUQ1PXkKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CkBAIC0xNTczLDUgKzE2MzAsNiBAQAogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15CitDT05GSUdfSEFWRV9MTUI9eQogQ09ORklHX05MQVRUUj15CiBDT05GSUdfR0VORVJJQ19BVE9NSUM2ND15CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3Mvcjc3ODVycF9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3Mvcjc3ODVycF9kZWZjb25maWcKaW5kZXggOGEzZGMzMC4uMjdmZjQ2YyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL3I3Nzg1cnBfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9yNzc4NXJwX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMAotIyBUaHUgSnVuIDE4IDEyOjM3OjIwIDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMQorIyBUaHUgU2VwIDI0IDE4OjI5OjIzIDIwMDkKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTE0LDYgKzE0LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfR0VORVJJQ19HUElPPXkKIENPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQpAQCAtMjksOCArMzAsMTAgQEAKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CiBDT05GSUdfQVJDSF9IQVNfREVGQVVMVF9JRExFPXkKK0NPTkZJR19BUkNIX0hBU19DUFVfSURMRV9XQUlUPXkKIENPTkZJR19JT19UUkFQUEVEPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCitDT05GSUdfQ09OU1RSVUNUT1JTPXkKIAogIwogIyBHZW5lcmFsIHNldHVwCkBAIC00MSw2ICs0NCwxMiBAQAogQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgogQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgogQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9HWklQPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9CWklQMj15CitDT05GSUdfSEFWRV9LRVJORUxfTFpNQT15CitDT05GSUdfS0VSTkVMX0daSVA9eQorIyBDT05GSUdfS0VSTkVMX0JaSVAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFUk5FTF9MWk1BIGlzIG5vdCBzZXQKIENPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKIENPTkZJR19TWVNWSVBDX1NZU0NUTD15CkBAIC01NiwxMiArNjUsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotIyBDT05GSUdfQ0xBU1NJQ19SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotQ09ORklHX1BSRUVNUFRfUkNVPXkKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKIENPTkZJR19SQ1VfVFJBQ0U9eQotIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFPXkKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVV9UUkFDRT15CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKQEAgLTkzLDIwICsxMDIsMjIgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworQ09ORklHX1BFUkZfRVZFTlRTPXkKK0NPTkZJR19FVkVOVF9QUk9GSUxFPXkKKyMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiBDT05GSUdfUFJPRklMSU5HPXkKIENPTkZJR19UUkFDRVBPSU5UUz15Ci1DT05GSUdfTUFSS0VSUz15CiBDT05GSUdfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0tQUk9CRVM9eQpAQCAtMTE3LDYgKzEyOCwxMSBAQAogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQogQ09ORklHX0hBVkVfQ0xLPXkKIENPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIworIyBDT05GSUdfR0NPVl9LRVJORUwgaXMgbm90IHNldAogIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKIENPTkZJR19TTEFCSU5GTz15CkBAIC0xMjksNyArMTQ1LDcgQEAKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKK0NPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKQEAgLTE3OCw2ICsxOTQsNyBAQAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g0XzIwMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1NyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCBpcyBub3Qgc2V0CkBAIC0yMzEsNyArMjQ4LDYgQEAKIENPTkZJR19IQVZFX01FTU9SWV9QUkVTRU5UPXkKIENPTkZJR19TUEFSU0VNRU1fU1RBVElDPXkKICMgQ09ORklHX01FTU9SWV9IT1RQTFVHIGlzIG5vdCBzZXQKLUNPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKIENPTkZJR19NSUdSQVRJT049eQogIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldApAQCAtMjM5LDYgKzI1NSw3IEBACiBDT05GSUdfTlJfUVVJQ0s9MgogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiAKICMKQEAgLTMzOCw3ICszNTUsOCBAQAogQ09ORklHX1pFUk9fUEFHRV9PRkZTRVQ9MHgwMDAwMTAwMAogQ09ORklHX0JPT1RfTElOS19PRkZTRVQ9MHgwMDgwMDAwMAogQ09ORklHX0VOVFJZX09GRlNFVD0weDAwMDAxMDAwCi1DT05GSUdfQ01ETElORV9CT09MPXkKK0NPTkZJR19DTURMSU5FX09WRVJXUklURT15CisjIENPTkZJR19DTURMSU5FX0VYVEVORCBpcyBub3Qgc2V0CiBDT05GSUdfQ01ETElORT0iY29uc29sZT10dHlTQzAsMTE1MjAwIHJvb3Q9L2Rldi9zZGExIgogCiAjCkBAIC00MTksNiArNDM3LDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKIENPTkZJR19TVFA9bQpAQCAtNDUyLDYgKzQ3MSw3IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTX0VYVD15CiBDT05GSUdfV0lSRUxFU1NfRVhUX1NZU0ZTPXkKQEAgLTQ2MCw3ICs0ODAsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC00NzMsNiArNDkyLDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKIENPTkZJR19GV19MT0FERVI9bQpAQCAtNTkxLDExICs2MTEsMTMgQEAKICMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1BNQ1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogQ09ORklHX0FUQT15CiAjIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorQ09ORklHX0FUQV9WRVJCT1NFX0VSUk9SPXkKIENPTkZJR19TQVRBX1BNUD15CiAjIENPTkZJR19TQVRBX0FIQ0kgaXMgbm90IHNldAogIyBDT05GSUdfU0FUQV9TSUwyNCBpcyBub3Qgc2V0CkBAIC02MTcsNiArNjM5LDcgQEAKICMgQ09ORklHX1BBVEFfQUxJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQU1EIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVJUT1AgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BVFA4NjdYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVRJSVhQIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjQwX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0NNRDY0WCBpcyBub3Qgc2V0CkBAIC02NDQsNiArNjY3LDcgQEAKICMgQ09ORklHX1BBVEFfT1BUSURNQSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1BEQ19PTEQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SQURJU1lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUkRDIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUloxMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0MxMjAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0VSVkVSV09SS1MgaXMgbm90IHNldApAQCAtNjYyLDcgKzY4NiwxMSBAQAogIwogCiAjCi0jIEVuYWJsZSBvbmx5IG9uZSBvZiB0aGUgdHdvIHN0YWNrcywgdW5sZXNzIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZworIyBZb3UgY2FuIGVuYWJsZSBvbmUgb3IgYm90aCBGaXJlV2lyZSBkcml2ZXIgc3RhY2tzLgorIworCisjCisjIFNlZSB0aGUgaGVscCB0ZXh0cyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KICMKICMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKQEAgLTcyMSw2ICs3NDksNyBAQAogIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NOSUMgaXMgbm90IHNldAogIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDFFIGlzIG5vdCBzZXQKQEAgLTc0NiwxMCArNzc1LDcgQEAKICMgQ09ORklHX1NGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRTJORVQgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtNzkwLDE0ICs4MTYsMTkgQEAKICMgSW5wdXQgRGV2aWNlIERyaXZlcnMKICMKIENPTkZJR19JTlBVVF9LRVlCT0FSRD15CisjIENPTkZJR19LRVlCT0FSRF9BRFA1NTg4IGlzIG5vdCBzZXQKIENPTkZJR19LRVlCT0FSRF9BVEtCRD15Ci0jIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAorIyBDT05GSUdfUVQyMTYwIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9HUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX01BVFJJWCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9NQVg3MzU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9PUEVOQ09SRVMgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX1NIX0tFWVNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CkBAIC04NTEsNiArODgyLDcgQEAKIENPTkZJR19ERVZQT1JUPXkKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogQ09ORklHX0kyQ19DSEFSREVWPXkKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogCkBAIC04NzksNiArOTExLDcgQEAKICMKICMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCiAjCisjIENPTkZJR19JMkNfREVTSUdOV0FSRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfR1BJTyBpcyBub3Qgc2V0CiBDT05GSUdfSTJDX0hJR0hMQU5ERVI9eQogIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CkBAIC05MDYsMTUgKzkzOSwxNyBAQAogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKICMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAogIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKworIworIyBQUFMgc3VwcG9ydAorIworIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX1JFUVVJUkVfR1BJT0xJQj15CiBDT05GSUdfR1BJT0xJQj15CiAjIENPTkZJR19ERUJVR19HUElPIGlzIG5vdCBzZXQKQEAgLTkzNSwxNCArOTcwLDI0IEBACiAjIFBDSSBHUElPIGV4cGFuZGVyczoKICMKICMgQ09ORklHX0dQSU9fQlQ4WFggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19MQU5HV0VMTCBpcyBub3Qgc2V0CiAKICMKICMgU1BJIEdQSU8gZXhwYW5kZXJzOgogIworCisjCisjIEFDOTcgR1BJTyBleHBhbmRlcnM6CisjCiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogQ09ORklHX0hXTU9OPXkKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBOYXRpdmUgZHJpdmVycworIwogIyBDT05GSUdfU0VOU09SU19BRDc0MTQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKQEAgLTk5Myw2ICsxMDM4LDcgQEAKICMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RNUDQwMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RNUDQyMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldApAQCAtMTAwNCw5ICsxMDUwLDcgQEAKICMgQ09ORklHX1NFTlNPUlNfVzgzTDc4Nk5HIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTEwMjYsMTQgKzEwNzAsMTcgQEAKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAorIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKK0NPTkZJR19WR0FfQVJCPXkKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiAjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CkBAIC0xMDk5LDExICsxMTQ2LDExIEBACiAjIENPTkZJR19MT0dPIGlzIG5vdCBzZXQKIENPTkZJR19TT1VORD1tCiBDT05GSUdfU09VTkRfT1NTX0NPUkU9eQorQ09ORklHX1NPVU5EX09TU19DT1JFX1BSRUNMQUlNPXkKICMgQ09ORklHX1NORCBpcyBub3Qgc2V0CiBDT05GSUdfU09VTkRfUFJJTUU9bQogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKIApAQCAtMTE2Nyw2ICsxMjE0LDcgQEAKICMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1JYODU4MSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JYODAyNSBpcyBub3Qgc2V0CiAKICMKICMgU1BJIFJUQyBkcml2ZXJzCkBAIC0xMjE5LDggKzEyNjcsMTAgQEAKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfRlNfUE9TSVhfQUNMPXkKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC0xMjg2LDEyICsxMzM2LDEyIEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKICMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAogQ09ORklHX05GU19WND15CisjIENPTkZJR19ORlNfVjRfMSBpcyBub3Qgc2V0CiBDT05GSUdfUk9PVF9ORlM9eQogQ09ORklHX05GU0Q9eQogQ09ORklHX05GU0RfVjM9eQpAQCAtMTM2Nyw2ICsxNDE3LDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiBDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0ZTPXkKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTQwMSwyMiArMTQ1MiwyOSBAQAogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAogQ09ORklHX0ZSQU1FX1BPSU5URVI9eQogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0tQUk9CRVNfU0FOSVRZX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAogIyBDT05GSUdfTEtEVE0gaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogIyBDT05GSUdfUEFHRV9QT0lTT05JTkcgaXMgbm90IHNldAogQ09ORklHX05PUF9UUkFDRVI9eQogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVD15CiBDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CitDT05GSUdfSEFWRV9TWVNDQUxMX1RSQUNFUE9JTlRTPXkKIENPTkZJR19SSU5HX0JVRkZFUj15CiBDT05GSUdfRVZFTlRfVFJBQ0lORz15CiBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSPXkKK0NPTkZJR19SSU5HX0JVRkZFUl9BTExPV19TV0FQPXkKIENPTkZJR19UUkFDSU5HPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogQ09ORklHX0ZUUkFDRT15CkBAIC0xNDI1LDYgKzE0ODMsNyBAQAogIyBDT05GSUdfUFJFRU1QVF9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0VOQUJMRV9ERUZBVUxUX1RSQUNFUlMgaXMgbm90IHNldAorIyBDT05GSUdfRlRSQUNFX1NZU0NBTExTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKIENPTkZJR19CUkFOQ0hfUFJPRklMRV9OT05FPXkKICMgQ09ORklHX1BST0ZJTEVfQU5OT1RBVEVEX0JSQU5DSEVTIGlzIG5vdCBzZXQKQEAgLTE0NDIsMTEgKzE1MDEsMTEgQEAKIENPTkZJR19TSF9TVEFOREFSRF9CSU9TPXkKICMgQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRSBpcyBub3Qgc2V0CiBDT05GSUdfRUFSTFlfUFJJTlRLPXkKLSMgQ09ORklHX0RFQlVHX0JPT1RNRU0gaXMgbm90IHNldAotQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1c9eQorIyBDT05GSUdfU1RBQ0tfREVCVUcgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFPXkKIENPTkZJR180S1NUQUNLUz15CiBDT05GSUdfRFVNUF9DT0RFPXkKKyMgQ09ORklHX0RXQVJGX1VOV0lOREVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NIX05PX0JTU19JTklUIGlzIG5vdCBzZXQKIAogIwpAQCAtMTQ2MSw3ICsxNTIwLDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0FMR0FQST15CiBDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQogQ09ORklHX0NSWVBUT19BRUFEMj15CkBAIC0xNTAzLDExICsxNTYxLDEzIEBACiAjCiBDT05GSUdfQ1JZUFRPX0hNQUM9eQogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX01ENT15CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApAQCAtMTU3MSw1ICsxNjMxLDYgQEAKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQorQ09ORklHX0hBVkVfTE1CPXkKIENPTkZJR19OTEFUVFI9eQogQ09ORklHX0dFTkVSSUNfQVRPTUlDNjQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL3JzazcyMDFfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL3JzazcyMDFfZGVmY29uZmlnCmluZGV4IDU1YzM2NTYuLmM0MGRiMTIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9yc2s3MjAxX2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3MvcnNrNzIwMV9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzAKLSMgVGh1IEp1biAxOCAxMjozOTo1NCAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEKKyMgVGh1IFNlcCAyNCAxODozNDoyOSAyMDA5CiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0xNCw2ICsxNCw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CitDT05GSUdfSVJRX1BFUl9DUFU9eQogIyBDT05GSUdfR0VORVJJQ19HUElPIGlzIG5vdCBzZXQKIENPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQpAQCAtMjcsNyArMjgsOSBAQAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQorQ09ORklHX0FSQ0hfSEFTX0NQVV9JRExFX1dBSVQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKQEAgLTM3LDYgKzQwLDEyIEBACiBDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiBDT05GSUdfTE9DQUxWRVJTSU9OPSIiCiAjIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9LRVJORUxfR1pJUD15CitDT05GSUdfSEFWRV9LRVJORUxfQlpJUDI9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTUE9eQorQ09ORklHX0tFUk5FTF9HWklQPXkKKyMgQ09ORklHX0tFUk5FTF9CWklQMiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVJORUxfTFpNQSBpcyBub3Qgc2V0CiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfU1lTVklQQ19TWVNDVEw9eQogQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1Q9eQpAQCAtNDUsMTEgKzU0LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKICMgQ09ORklHX0lLQ09ORklHX1BST0MgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKQEAgLTg2LDE5ICs5NiwyMSBAQAogQ09ORklHX1RJTUVSRkQ9eQogQ09ORklHX0VWRU5URkQ9eQogIyBDT05GSUdfQUlPIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworQ09ORklHX1BFUkZfRVZFTlRTPXkKK0NPTkZJR19FVkVOVF9QUk9GSUxFPXkKKyMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiBDT05GSUdfU0xPQj15CiBDT05GSUdfUFJPRklMSU5HPXkKIENPTkZJR19UUkFDRVBPSU5UUz15Ci1DT05GSUdfTUFSS0VSUz15CiBDT05GSUdfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CkBAIC0xMDcsNiArMTE5LDExIEBACiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CiBDT05GSUdfSEFWRV9DTEs9eQogQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCisjIENPTkZJR19HQ09WX0tFUk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAogQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQogQ09ORklHX1JUX01VVEVYRVM9eQpAQCAtMTE3LDcgKzEzNCw3IEBACiAjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAogQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CitDT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCkBAIC0xNjUsNiArMTgyLDcgQEAKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINF8yMDIgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTcgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc3MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODAgaXMgbm90IHNldApAQCAtMjg1LDcgKzMwMyw4IEBACiBDT05GSUdfWkVST19QQUdFX09GRlNFVD0weDAwMDAxMDAwCiBDT05GSUdfQk9PVF9MSU5LX09GRlNFVD0weDAwODAwMDAwCiBDT05GSUdfRU5UUllfT0ZGU0VUPTB4MDAwMDEwMDAKLUNPTkZJR19DTURMSU5FX0JPT0w9eQorQ09ORklHX0NNRExJTkVfT1ZFUldSSVRFPXkKKyMgQ09ORklHX0NNRExJTkVfRVhURU5EIGlzIG5vdCBzZXQKIENPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eVNDMCwxMTUyMDAgZWFybHlwcmludGs9c2VyaWFsIGlnbm9yZV9sb2dsZXZlbCIKIAogIwpAQCAtMzA5LDYgKzMyOCw3IEBACiAjCiBDT05GSUdfUE09eQogIyBDT05GSUdfUE1fREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfUE1fUlVOVElNRSBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX0lETEU9eQogQ09ORklHX0NQVV9JRExFX0dPVl9MQURERVI9eQogIyBDT05GSUdfTkVUIGlzIG5vdCBzZXQKQEAgLTMyNyw5ICszNDcsOSBAQAogIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ09OQ0FUPXkKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogQ09ORklHX01URF9SRURCT09UX1BBUlRTPXkKIENPTkZJR19NVERfUkVEQk9PVF9ESVJFQ1RPUllfQkxPQ0s9LTEKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTX1VOQUxMT0NBVEVEIGlzIG5vdCBzZXQKQEAgLTQ5OCw2ICs1MTgsMTEgQEAKICMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAogIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisKKyMKKyMgUFBTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldApAQCAtNTk3LDcgKzYyMiw5IEBACiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GSUxFX0xPQ0tJTkcgaXMgbm90IHNldAogQ09ORklHX0ZTTk9USUZZPXkKICMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldApAQCAtNjMyLDcgKzY1OSw2IEBACiBDT05GSUdfUFJPQ19GUz15CiBDT05GSUdfUFJPQ19TWVNDVEw9eQogQ09ORklHX1NZU0ZTPXkKLSMgQ09ORklHX1RNUEZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15CkBAIC02NjgsNyArNjk0LDYgQEAKIENPTkZJR19ST01GU19PTl9CTE9DSz15CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogCiAjCiAjIFBhcnRpdGlvbiBUeXBlcwpAQCAtNjg2LDYgKzcxMSw3IEBACiAjIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiBDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0ZTPXkKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtNjk4LDExICs3MjQsMTUgQEAKIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CiBDT05GSUdfTk9QX1RSQUNFUj15CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUPXkKIENPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKK0NPTkZJR19IQVZFX1NZU0NBTExfVFJBQ0VQT0lOVFM9eQogQ09ORklHX1JJTkdfQlVGRkVSPXkKIENPTkZJR19FVkVOVF9UUkFDSU5HPXkKIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVI9eQorQ09ORklHX1JJTkdfQlVGRkVSX0FMTE9XX1NXQVA9eQogQ09ORklHX1RSQUNJTkc9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiAjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldApAQCAtNzEyLDYgKzc0Miw3IEBACiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfU0hfU1RBTkRBUkRfQklPUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfRFdBUkZfVU5XSU5ERVIgaXMgbm90IHNldAogCiAjCiAjIFNlY3VyaXR5IG9wdGlvbnMKQEAgLTc0MSw0ICs3NzIsNSBAQAogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15CitDT05GSUdfSEFWRV9MTUI9eQogQ09ORklHX0dFTkVSSUNfQVRPTUlDNjQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL3JzazcyMDNfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL3JzazcyMDNfZGVmY29uZmlnCmluZGV4IDY5ZTYxOTkuLjVjYWJkYjMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9yc2s3MjAzX2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3MvcnNrNzIwM19kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzAKLSMgVGh1IEp1biAxOCAxMjo0MDo0NCAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEKKyMgVGh1IFNlcCAyNCAxODozNTowNCAyMDA5CiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0xNCw2ICsxNCw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CitDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX0dFTkVSSUNfR1BJTz15CiBDT05GSUdfR0VORVJJQ19USU1FPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKQEAgLTI4LDcgKzI5LDkgQEAKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CiBDT05GSUdfQVJDSF9IQVNfREVGQVVMVF9JRExFPXkKK0NPTkZJR19BUkNIX0hBU19DUFVfSURMRV9XQUlUPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCitDT05GSUdfQ09OU1RSVUNUT1JTPXkKIAogIwogIyBHZW5lcmFsIHNldHVwCkBAIC0zOCw2ICs0MSwxMiBAQAogQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgogQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgogIyBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE8gaXMgbm90IHNldAorQ09ORklHX0hBVkVfS0VSTkVMX0daSVA9eQorQ09ORklHX0hBVkVfS0VSTkVMX0JaSVAyPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9MWk1BPXkKK0NPTkZJR19LRVJORUxfR1pJUD15CisjIENPTkZJR19LRVJORUxfQlpJUDIgaXMgbm90IHNldAorIyBDT05GSUdfS0VSTkVMX0xaTUEgaXMgbm90IHNldAogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKIENPTkZJR19QT1NJWF9NUVVFVUU9eQpAQCAtNTAsMTEgKzU5LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKICMgQ09ORklHX0lLQ09ORklHX1BST0MgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKQEAgLTkzLDE5ICsxMDMsMjEgQEAKIENPTkZJR19USU1FUkZEPXkKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19BSU89eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCitDT05GSUdfUEVSRl9FVkVOVFM9eQorQ09ORklHX0VWRU5UX1BST0ZJTEU9eQorIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKIENPTkZJR19TTE9CPXkKIENPTkZJR19QUk9GSUxJTkc9eQogQ09ORklHX1RSQUNFUE9JTlRTPXkKLUNPTkZJR19NQVJLRVJTPXkKIENPTkZJR19PUFJPRklMRT15CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiAjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKQEAgLTExNCw2ICsxMjYsMTEgQEAKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKIENPTkZJR19IQVZFX0NMSz15CiBDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKKyMgQ09ORklHX0dDT1ZfS0VSTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CiBDT05GSUdfUlRfTVVURVhFUz15CkBAIC0xMjQsNyArMTQxLDcgQEAKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKK0NPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKQEAgLTE3Miw2ICsxODksNyBAQAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g0XzIwMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1NyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCBpcyBub3Qgc2V0CkBAIC0zMDgsNyArMzI2LDggQEAKIENPTkZJR19aRVJPX1BBR0VfT0ZGU0VUPTB4MDAwMDEwMDAKIENPTkZJR19CT09UX0xJTktfT0ZGU0VUPTB4MDA4MDAwMDAKIENPTkZJR19FTlRSWV9PRkZTRVQ9MHgwMDAwMTAwMAotQ09ORklHX0NNRExJTkVfQk9PTD15CitDT05GSUdfQ01ETElORV9PVkVSV1JJVEU9eQorIyBDT05GSUdfQ01ETElORV9FWFRFTkQgaXMgbm90IHNldAogQ09ORklHX0NNRExJTkU9ImNvbnNvbGU9dHR5U0MwLDExNTIwMCBlYXJseXByaW50az1zZXJpYWwgaWdub3JlX2xvZ2xldmVsIgogCiAjCkBAIC0zMzIsNiArMzUxLDcgQEAKICMKIENPTkZJR19QTT15CiAjIENPTkZJR19QTV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19QTV9SVU5USU1FIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfSURMRT15CiBDT05GSUdfQ1BVX0lETEVfR09WX0xBRERFUj15CiBDT05GSUdfTkVUPXkKQEAgLTM3Myw2ICszOTMsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTQwMyw2ICs0MjQsNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CkBAIC00MTAsNyArNDMyLDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtNDMyLDkgKzQ1Myw5IEBACiAjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ09OQ0FUPXkKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogQ09ORklHX01URF9SRURCT09UX1BBUlRTPXkKIENPTkZJR19NVERfUkVEQk9PVF9ESVJFQ1RPUllfQkxPQ0s9LTEKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTX1VOQUxMT0NBVEVEIGlzIG5vdCBzZXQKQEAgLTU5MSwxMCArNjEyLDcgQEAKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtNjc5LDYgKzY5NywxMSBAQAogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkMgaXMgbm90IHNldAogIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKworIworIyBQUFMgc3VwcG9ydAorIworIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX1JFUVVJUkVfR1BJT0xJQj15CiBDT05GSUdfR1BJT0xJQj15CiAjIENPTkZJR19ERUJVR19HUElPIGlzIG5vdCBzZXQKQEAgLTY5OSw2ICs3MjIsMTAgQEAKICMKICMgU1BJIEdQSU8gZXhwYW5kZXJzOgogIworCisjCisjIEFDOTcgR1BJTyBleHBhbmRlcnM6CisjCiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldApAQCAtNzQxLDcgKzc2OCw2IEBACiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKIAogIwpAQCAtNzY0LDYgKzc5MCw3IEBACiBDT05GSUdfSElEX0VaS0VZPXkKICMgQ09ORklHX0hJRF9LWUUgaXMgbm90IHNldAogQ09ORklHX0hJRF9HWVJBVElPTj15CisjIENPTkZJR19ISURfVFdJTkhBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfS0VOU0lOR1RPTiBpcyBub3Qgc2V0CiBDT05GSUdfSElEX0xPR0lURUNIPXkKICMgQ09ORklHX0xPR0lURUNIX0ZGIGlzIG5vdCBzZXQKQEAgLTgxMSw2ICs4MzgsNyBAQAogIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfUjhBNjY1OTdfSENEPXkKICMgQ09ORklHX1VTQl9IV0FfSENEIGlzIG5vdCBzZXQKQEAgLTk1NCw4ICs5ODIsMTAgQEAKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKICMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldApAQCAtOTkwLDcgKzEwMjAsNiBAQAogQ09ORklHX1BST0NfRlM9eQogQ09ORklHX1BST0NfU1lTQ1RMPXkKIENPTkZJR19TWVNGUz15Ci0jIENPTkZJR19UTVBGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAogQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQpAQCAtMTAxNiw3ICsxMDQ1LDYgQEAKIENPTkZJR19ST01GU19PTl9CTE9DSz15CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiAjIENPTkZJR19ORlNfVjMgaXMgbm90IHNldApAQCAtMTA5MCw2ICsxMTE4LDcgQEAKICMgQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKIENPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfRlM9eQogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xMTI5LDIyICsxMTU4LDI4IEBACiBDT05GSUdfREVCVUdfTElTVD15CiBDT05GSUdfREVCVUdfU0c9eQogIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKIENPTkZJR19GUkFNRV9QT0lOVEVSPXkKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQogIyBDT05GSUdfUEFHRV9QT0lTT05JTkcgaXMgbm90IHNldAogQ09ORklHX05PUF9UUkFDRVI9eQogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVD15CiBDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CitDT05GSUdfSEFWRV9TWVNDQUxMX1RSQUNFUE9JTlRTPXkKIENPTkZJR19SSU5HX0JVRkZFUj15CiBDT05GSUdfRVZFTlRfVFJBQ0lORz15CiBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSPXkKK0NPTkZJR19SSU5HX0JVRkZFUl9BTExPV19TV0FQPXkKIENPTkZJR19UUkFDSU5HPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogQ09ORklHX0ZUUkFDRT15CkBAIC0xMTUyLDYgKzExODcsNyBAQAogIyBDT05GSUdfSVJRU09GRl9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0VOQUJMRV9ERUZBVUxUX1RSQUNFUlMgaXMgbm90IHNldAorIyBDT05GSUdfRlRSQUNFX1NZU0NBTExTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKIENPTkZJR19CUkFOQ0hfUFJPRklMRV9OT05FPXkKICMgQ09ORklHX1BST0ZJTEVfQU5OT1RBVEVEX0JSQU5DSEVTIGlzIG5vdCBzZXQKQEAgLTExNzAsMTAgKzEyMDYsMTAgQEAKIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEU9eQogQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRV9QT1JUPTB4ZmZmZTgwMDAKIENPTkZJR19FQVJMWV9QUklOVEs9eQotQ09ORklHX0RFQlVHX0JPT1RNRU09eQotQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1c9eQorIyBDT05GSUdfU1RBQ0tfREVCVUcgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFPXkKIENPTkZJR19EVU1QX0NPREU9eQorIyBDT05GSUdfRFdBUkZfVU5XSU5ERVIgaXMgbm90IHNldAogIyBDT05GSUdfU0hfTk9fQlNTX0lOSVQgaXMgbm90IHNldAogCiAjCkBAIC0xMjAzLDUgKzEyMzksNiBAQAogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15CitDT05GSUdfSEFWRV9MTUI9eQogQ09ORklHX05MQVRUUj15CiBDT05GSUdfR0VORVJJQ19BVE9NSUM2ND15CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3MvcnRzNzc1MXIyZDFfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL3J0czc3NTFyMmQxX2RlZmNvbmZpZwppbmRleCBjNmU5YjFjLi5mNTIxZTgyIDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3MvcnRzNzc1MXIyZDFfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9ydHM3NzUxcjJkMV9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzAKLSMgVGh1IEp1biAxOCAxMjo0MjoyNiAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEKKyMgVGh1IFNlcCAyNCAxODozNjoyNSAyMDA5CiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0xNCw2ICsxNCw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CitDT05GSUdfSVJRX1BFUl9DUFU9eQogIyBDT05GSUdfR0VORVJJQ19HUElPIGlzIG5vdCBzZXQKIENPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQpAQCAtMjgsOCArMjksMTAgQEAKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CiBDT05GSUdfQVJDSF9IQVNfREVGQVVMVF9JRExFPXkKK0NPTkZJR19BUkNIX0hBU19DUFVfSURMRV9XQUlUPXkKIENPTkZJR19JT19UUkFQUEVEPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCitDT05GSUdfQ09OU1RSVUNUT1JTPXkKIAogIwogIyBHZW5lcmFsIHNldHVwCkBAIC0zOSw2ICs0MiwxMiBAQAogQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgogQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgogQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9HWklQPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9CWklQMj15CitDT05GSUdfSEFWRV9LRVJORUxfTFpNQT15CitDT05GSUdfS0VSTkVMX0daSVA9eQorIyBDT05GSUdfS0VSTkVMX0JaSVAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFUk5FTF9MWk1BIGlzIG5vdCBzZXQKIENPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKIENPTkZJR19TWVNWSVBDX1NZU0NUTD15CkBAIC01MCwxMSArNTksMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldApAQCAtODQsMjAgKzk0LDIyIEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKK0NPTkZJR19QRVJGX0VWRU5UUz15CitDT05GSUdfRVZFTlRfUFJPRklMRT15CisjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogQ09ORklHX1BST0ZJTElORz15CiBDT05GSUdfVFJBQ0VQT0lOVFM9eQotQ09ORklHX01BUktFUlM9eQogQ09ORklHX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKICMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldApAQCAtMTA3LDYgKzExOSwxMSBAQAogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQogQ09ORklHX0hBVkVfQ0xLPXkKIENPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIworIyBDT05GSUdfR0NPVl9LRVJORUwgaXMgbm90IHNldAogIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKIENPTkZJR19TTEFCSU5GTz15CkBAIC0xMTgsNyArMTM1LDcgQEAKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKK0NPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKQEAgLTE2NSw2ICsxODIsNyBAQAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g0XzIwMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1NyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCBpcyBub3Qgc2V0CkBAIC0yMTAsNiArMjI4LDcgQEAKIENPTkZJR19OUl9RVUlDSz0yCiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIAogIwpAQCAtMzAzLDcgKzMyMiw4IEBACiBDT05GSUdfQk9PVF9MSU5LX09GRlNFVD0weDAwODAwMDAwCiBDT05GSUdfRU5UUllfT0ZGU0VUPTB4MDAwMDEwMDAKICMgQ09ORklHX1VCQ19XQUtFVVAgaXMgbm90IHNldAotQ09ORklHX0NNRExJTkVfQk9PTD15CitDT05GSUdfQ01ETElORV9PVkVSV1JJVEU9eQorIyBDT05GSUdfQ01ETElORV9FWFRFTkQgaXMgbm90IHNldAogQ09ORklHX0NNRExJTkU9ImNvbnNvbGU9dHR5MCBjb25zb2xlPXR0eVNDMCwxMTUyMDAgcm9vdD0vZGV2L3NkYTEgZWFybHlwcmludGs9c2VyaWFsIgogCiAjCkBAIC0zNzgsNiArMzk4LDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC00MDgsNiArNDI5LDcgQEAKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWSBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1NfRVhUPXkKIENPTkZJR19XSVJFTEVTU19FWFRfU1lTRlM9eQpAQCAtNDE2LDcgKzQzOCw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTQyOSw2ICs0NTAsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogQ09ORklHX0ZXX0xPQURFUj1tCkBAIC01NDIsMTEgKzU2NCwxMyBAQAogIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUE1DUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfQVRBPXkKICMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CitDT05GSUdfQVRBX1ZFUkJPU0VfRVJST1I9eQogQ09ORklHX1NBVEFfUE1QPXkKICMgQ09ORklHX1NBVEFfQUhDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQVRBX1NJTDI0IGlzIG5vdCBzZXQKQEAgLTU2OCw2ICs1OTIsNyBAQAogIyBDT05GSUdfUEFUQV9BTEkgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BTUQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BUlRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FUUDg2N1ggaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BVElJWFAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9DTUQ2NDBfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjRYIGlzIG5vdCBzZXQKQEAgLTU5NSw2ICs2MjAsNyBAQAogIyBDT05GSUdfUEFUQV9PUFRJRE1BIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUERDX09MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JBRElTWVMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9SREMgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SWjEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TQzEyMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TRVJWRVJXT1JLUyBpcyBub3Qgc2V0CkBAIC02MTMsNyArNjM5LDExIEBACiAjCiAKICMKLSMgRW5hYmxlIG9ubHkgb25lIG9mIHRoZSB0d28gc3RhY2tzLCB1bmxlc3MgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nCisjIFlvdSBjYW4gZW5hYmxlIG9uZSBvciBib3RoIEZpcmVXaXJlIGRyaXZlciBzdGFja3MuCisjCisKKyMKKyMgU2VlIHRoZSBoZWxwIHRleHRzIGZvciBtb3JlIGluZm9ybWF0aW9uLgogIwogIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAogIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldApAQCAtNjczLDYgKzcwMyw3IEBACiAjIENPTkZJR19TVU5EQU5DRSBpcyBub3Qgc2V0CiAjIENPTkZJR19UTEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTEgaXMgbm90IHNldAogIyBDT05GSUdfVklBX1JISU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDOTIwMzEgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CkBAIC02OTQsNiArNzI1LDcgQEAKICMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19USUdPTjMgaXMgbm90IHNldAogIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0CisjIENPTkZJR19DTklDIGlzIG5vdCBzZXQKICMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAogIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwxRSBpcyBub3Qgc2V0CkBAIC03MTksMTAgKzc1MSw3IEBACiAjIENPTkZJR19TRkMgaXMgbm90IHNldAogIyBDT05GSUdfQkUyTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTg0MCwxMCArODY5LDIwIEBACiAjCiAjIENPTkZJR19TUElfU1BJREVWIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSV9UTEU2MlgwIGlzIG5vdCBzZXQKKworIworIyBQUFMgc3VwcG9ydAorIworIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiBDT05GSUdfSFdNT049eQogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIE5hdGl2ZSBkcml2ZXJzCisjCiAjIENPTkZJR19TRU5TT1JTX0FEQ1hYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfSTVLX0FNQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldApAQCAtODYyLDkgKzkwMSw3IEBACiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfTElTM19TUEkgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTg4MCwxMiArOTE3LDE1IEBACiBDT05GSUdfTUZEX1NNNTAxPXkKICMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAorIyBDT05GSUdfTUZEX01DMTM3ODMgaXMgbm90IHNldAorIyBDT05GSUdfRVpYX1BDQVAgaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKK0NPTkZJR19WR0FfQVJCPXkKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9bQpAQCAtOTY5LDYgKzEwMDksNyBAQAogQ09ORklHX0xPR09fU1VQRVJIX0NMVVQyMjQ9eQogQ09ORklHX1NPVU5EPXkKIENPTkZJR19TT1VORF9PU1NfQ09SRT15CitDT05GSUdfU09VTkRfT1NTX0NPUkVfUFJFQ0xBSU09eQogQ09ORklHX1NORD1tCiBDT05GSUdfU05EX1RJTUVSPW0KIENPTkZJR19TTkRfUENNPW0KQEAgLTEwNzEsNyArMTExMiw2IEBACiBDT05GSUdfQUM5N19CVVM9bQogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CiAKICMKQEAgLTEwOTQsNiArMTEzNCw3IEBACiBDT05GSUdfSElEX0VaS0VZPXkKICMgQ09ORklHX0hJRF9LWUUgaXMgbm90IHNldAogQ09ORklHX0hJRF9HWVJBVElPTj15CisjIENPTkZJR19ISURfVFdJTkhBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfS0VOU0lOR1RPTiBpcyBub3Qgc2V0CiBDT05GSUdfSElEX0xPR0lURUNIPXkKICMgQ09ORklHX0xPR0lURUNIX0ZGIGlzIG5vdCBzZXQKQEAgLTExNDIsNiArMTE4Myw3IEBACiAjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0Q9eQogIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9ERVNDIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fTU1JTyBpcyBub3Qgc2V0CkBAIC0xMjEzLDYgKzEyNTUsNyBAQAogIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVlNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldApAQCAtMTI1Miw2ICsxMjk1LDcgQEAKIENPTkZJR19SVENfRFJWX1I5NzAxPXkKICMgQ09ORklHX1JUQ19EUlZfUlM1QzM0OCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0RTMzIzNCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjIxMjMgaXMgbm90IHNldAogCiAjCiAjIFBsYXRmb3JtIFJUQyBkcml2ZXJzCkBAIC0xMjkzLDggKzEzMzcsMTAgQEAKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKQEAgLTEzNTcsNyArMTQwMyw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogIyBDT05GSUdfTkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX05GU0QgaXMgbm90IHNldApAQCAtMTQyMyw2ICsxNDY4LDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfRlM9eQogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xNDM0LDExICsxNDgwLDE1IEBACiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19OT1BfVFJBQ0VSPXkKIENPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VfTUNPVU5UX1RFU1Q9eQogQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQorQ09ORklHX0hBVkVfU1lTQ0FMTF9UUkFDRVBPSU5UUz15CiBDT05GSUdfUklOR19CVUZGRVI9eQogQ09ORklHX0VWRU5UX1RSQUNJTkc9eQogQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUj15CitDT05GSUdfUklOR19CVUZGRVJfQUxMT1dfU1dBUD15CiBDT05GSUdfVFJBQ0lORz15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKICMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CkBAIC0xNDUwLDYgKzE1MDAsNyBAQAogQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRT15CiBDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFX1BPUlQ9MHhmZmU4MDAwMAogQ09ORklHX0VBUkxZX1BSSU5USz15CisjIENPTkZJR19EV0FSRl9VTldJTkRFUiBpcyBub3Qgc2V0CiAKICMKICMgU2VjdXJpdHkgb3B0aW9ucwpAQCAtMTQ2Myw3ICsxNTE0LDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUjIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKQEAgLTE0OTUsMTEgKzE1NDUsMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApAQCAtMTU2Miw1ICsxNjE0LDYgQEAKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQorQ09ORklHX0hBVkVfTE1CPXkKIENPTkZJR19OTEFUVFI9eQogQ09ORklHX0dFTkVSSUNfQVRPTUlDNjQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL3J0czc3NTFyMmRwbHVzX2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9ydHM3NzUxcjJkcGx1c19kZWZjb25maWcKaW5kZXggYmMxMDQ2OS4uYTE1NmNkMSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL3J0czc3NTFyMmRwbHVzX2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3MvcnRzNzc1MXIyZHBsdXNfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMwCi0jIFRodSBKdW4gMTggMTI6NDM6MTkgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxCisjIFRodSBTZXAgMjQgMTg6Mzk6NDggMjAwOQogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtMTQsNiArMTQsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiBDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQorQ09ORklHX0lSUV9QRVJfQ1BVPXkKICMgQ09ORklHX0dFTkVSSUNfR1BJTyBpcyBub3Qgc2V0CiBDT05GSUdfR0VORVJJQ19USU1FPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKQEAgLTI4LDggKzI5LDEwIEBACiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQogQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15CitDT05GSUdfQVJDSF9IQVNfQ1BVX0lETEVfV0FJVD15CiBDT05GSUdfSU9fVFJBUFBFRD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtMzksNiArNDIsMTIgQEAKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIENPTkZJR19MT0NBTFZFUlNJT049IiIKIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfSEFWRV9LRVJORUxfR1pJUD15CitDT05GSUdfSEFWRV9LRVJORUxfQlpJUDI9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTUE9eQorQ09ORklHX0tFUk5FTF9HWklQPXkKKyMgQ09ORklHX0tFUk5FTF9CWklQMiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVJORUxfTFpNQSBpcyBub3Qgc2V0CiBDT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfU1lTVklQQ19TWVNDVEw9eQpAQCAtNTAsMTEgKzU5LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKICMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKQEAgLTg0LDIwICs5NCwyMiBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCitDT05GSUdfUEVSRl9FVkVOVFM9eQorQ09ORklHX0VWRU5UX1BST0ZJTEU9eQorIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKIENPTkZJR19QUk9GSUxJTkc9eQogQ09ORklHX1RSQUNFUE9JTlRTPXkKLUNPTkZJR19NQVJLRVJTPXkKIENPTkZJR19PUFJPRklMRT15CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiAjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKQEAgLTEwNyw2ICsxMTksMTEgQEAKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKIENPTkZJR19IQVZFX0NMSz15CiBDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKKyMgQ09ORklHX0dDT1ZfS0VSTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CiBDT05GSUdfU0xBQklORk89eQpAQCAtMTE4LDcgKzEzNSw3IEBACiAjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAogQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CitDT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCkBAIC0xNjUsNiArMTgyLDcgQEAKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINF8yMDIgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTcgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc3MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODAgaXMgbm90IHNldApAQCAtMjEwLDYgKzIyOCw3IEBACiBDT05GSUdfTlJfUVVJQ0s9MgogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiAKICMKQEAgLTMwMyw3ICszMjIsOCBAQAogQ09ORklHX0JPT1RfTElOS19PRkZTRVQ9MHgwMDgwMDAwMAogQ09ORklHX0VOVFJZX09GRlNFVD0weDAwMDAxMDAwCiAjIENPTkZJR19VQkNfV0FLRVVQIGlzIG5vdCBzZXQKLUNPTkZJR19DTURMSU5FX0JPT0w9eQorQ09ORklHX0NNRExJTkVfT1ZFUldSSVRFPXkKKyMgQ09ORklHX0NNRExJTkVfRVhURU5EIGlzIG5vdCBzZXQKIENPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eTAgY29uc29sZT10dHlTQzAsMTE1MjAwIHJvb3Q9L2Rldi9zZGExIGVhcmx5cHJpbnRrPXNlcmlhbCIKIAogIwpAQCAtMzc4LDYgKzM5OCw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtNDA4LDYgKzQyOSw3IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTX0VYVD15CiBDT05GSUdfV0lSRUxFU1NfRVhUX1NZU0ZTPXkKQEAgLTQxNiw3ICs0MzgsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC00MjksNiArNDUwLDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKIENPTkZJR19GV19MT0FERVI9bQpAQCAtNDM4LDkgKzQ2MCw5IEBACiAjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ09OQ0FUPXkKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKICMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldApAQCAtNDk5LDYgKzUyMSw3IEBACiAjIENPTkZJR19NVERfUE1DNTUxIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9EQVRBRkxBU0ggaXMgbm90IHNldAogIyBDT05GSUdfTVREX00yNVA4MCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfU1NUMjVMIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0CkBAIC02MjcsMTEgKzY1MCwxMyBAQAogIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUE1DUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfQVRBPXkKICMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CitDT05GSUdfQVRBX1ZFUkJPU0VfRVJST1I9eQogQ09ORklHX1NBVEFfUE1QPXkKICMgQ09ORklHX1NBVEFfQUhDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQVRBX1NJTDI0IGlzIG5vdCBzZXQKQEAgLTY1Myw2ICs2NzgsNyBAQAogIyBDT05GSUdfUEFUQV9BTEkgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BTUQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BUlRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FUUDg2N1ggaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BVElJWFAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9DTUQ2NDBfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjRYIGlzIG5vdCBzZXQKQEAgLTY4MCw2ICs3MDYsNyBAQAogIyBDT05GSUdfUEFUQV9PUFRJRE1BIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUERDX09MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JBRElTWVMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9SREMgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SWjEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TQzEyMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TRVJWRVJXT1JLUyBpcyBub3Qgc2V0CkBAIC02OTgsNyArNzI1LDExIEBACiAjCiAKICMKLSMgRW5hYmxlIG9ubHkgb25lIG9mIHRoZSB0d28gc3RhY2tzLCB1bmxlc3MgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nCisjIFlvdSBjYW4gZW5hYmxlIG9uZSBvciBib3RoIEZpcmVXaXJlIGRyaXZlciBzdGFja3MuCisjCisKKyMKKyMgU2VlIHRoZSBoZWxwIHRleHRzIGZvciBtb3JlIGluZm9ybWF0aW9uLgogIwogIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAogIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldApAQCAtNzU4LDYgKzc4OSw3IEBACiAjIENPTkZJR19TVU5EQU5DRSBpcyBub3Qgc2V0CiAjIENPTkZJR19UTEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTEgaXMgbm90IHNldAogIyBDT05GSUdfVklBX1JISU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDOTIwMzEgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CkBAIC03NzksNiArODExLDcgQEAKICMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19USUdPTjMgaXMgbm90IHNldAogIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0CisjIENPTkZJR19DTklDIGlzIG5vdCBzZXQKICMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAogIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwxRSBpcyBub3Qgc2V0CkBAIC04MDQsMTAgKzgzNyw3IEBACiAjIENPTkZJR19TRkMgaXMgbm90IHNldAogIyBDT05GSUdfQkUyTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTkyNSwxMCArOTU1LDIwIEBACiAjCiAjIENPTkZJR19TUElfU1BJREVWIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSV9UTEU2MlgwIGlzIG5vdCBzZXQKKworIworIyBQUFMgc3VwcG9ydAorIworIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiBDT05GSUdfSFdNT049eQogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIE5hdGl2ZSBkcml2ZXJzCisjCiAjIENPTkZJR19TRU5TT1JTX0FEQ1hYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfSTVLX0FNQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldApAQCAtOTQ3LDkgKzk4Nyw3IEBACiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfTElTM19TUEkgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTk2NSwxMiArMTAwMywxNSBAQAogQ09ORklHX01GRF9TTTUwMT15CiAjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9NQzEzNzgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VaWF9QQ0FQIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwogIyBHcmFwaGljcyBzdXBwb3J0CiAjCitDT05GSUdfVkdBX0FSQj15CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPW0KQEAgLTEwNTQsNiArMTA5NSw3IEBACiBDT05GSUdfTE9HT19TVVBFUkhfQ0xVVDIyND15CiBDT05GSUdfU09VTkQ9eQogQ09ORklHX1NPVU5EX09TU19DT1JFPXkKK0NPTkZJR19TT1VORF9PU1NfQ09SRV9QUkVDTEFJTT15CiBDT05GSUdfU05EPW0KIENPTkZJR19TTkRfVElNRVI9bQogQ09ORklHX1NORF9QQ009bQpAQCAtMTE1Niw3ICsxMTk4LDYgQEAKIENPTkZJR19BQzk3X0JVUz1tCiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKIAogIwpAQCAtMTE3OSw2ICsxMjIwLDcgQEAKIENPTkZJR19ISURfRVpLRVk9eQogIyBDT05GSUdfSElEX0tZRSBpcyBub3Qgc2V0CiBDT05GSUdfSElEX0dZUkFUSU9OPXkKKyMgQ09ORklHX0hJRF9UV0lOSEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9LRU5TSU5HVE9OIGlzIG5vdCBzZXQKIENPTkZJR19ISURfTE9HSVRFQ0g9eQogIyBDT05GSUdfTE9HSVRFQ0hfRkYgaXMgbm90IHNldApAQCAtMTIyNyw2ICsxMjY5LDcgQEAKICMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9PSENJX0hDRD15CiAjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX0RFU0MgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPIGlzIG5vdCBzZXQKQEAgLTEyOTgsNiArMTM0MSw3IEBACiAjIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9WU1QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CkBAIC0xMzM3LDYgKzEzODEsNyBAQAogQ09ORklHX1JUQ19EUlZfUjk3MDE9eQogIyBDT05GSUdfUlRDX0RSVl9SUzVDMzQ4IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRFMzMjM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGMjEyMyBpcyBub3Qgc2V0CiAKICMKICMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKQEAgLTEzNzgsOCArMTQyMywxMCBAQAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtMTQ0Myw3ICsxNDkwLDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiAjIENPTkZJR19ORlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CkBAIC0xNTA5LDYgKzE1NTUsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19GUz15CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTE1MjAsMTEgKzE1NjcsMTUgQEAKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX05PUF9UUkFDRVI9eQogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVD15CiBDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CitDT05GSUdfSEFWRV9TWVNDQUxMX1RSQUNFUE9JTlRTPXkKIENPTkZJR19SSU5HX0JVRkZFUj15CiBDT05GSUdfRVZFTlRfVFJBQ0lORz15CiBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSPXkKK0NPTkZJR19SSU5HX0JVRkZFUl9BTExPV19TV0FQPXkKIENPTkZJR19UUkFDSU5HPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKQEAgLTE1MzYsNiArMTU4Nyw3IEBACiBDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFPXkKIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEVfUE9SVD0weGZmZTgwMDAwCiBDT05GSUdfRUFSTFlfUFJJTlRLPXkKKyMgQ09ORklHX0RXQVJGX1VOV0lOREVSIGlzIG5vdCBzZXQKIAogIwogIyBTZWN1cml0eSBvcHRpb25zCkBAIC0xNTQ5LDcgKzE2MDEsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldApAQCAtMTU4MSwxMSArMTYzMiwxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CkBAIC0xNjQ4LDUgKzE3MDEsNiBAQAogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15CitDT05GSUdfSEFWRV9MTUI9eQogQ09ORklHX05MQVRUUj15CiBDT05GSUdfR0VORVJJQ19BVE9NSUM2ND15CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3Mvc2RrNzc4MF9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3Mvc2RrNzc4MF9kZWZjb25maWcKaW5kZXggNzUzZmIyNy4uMDU1NTM2YiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL3Nkazc3ODBfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9zZGs3NzgwX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMAotIyBUaHUgSnVuIDE4IDEyOjQzOjU0IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMQorIyBUaHUgU2VwIDI0IDE4OjQwOjI1IDIwMDkKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTE0LDYgKzE0LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19JUlFfUEVSX0NQVT15CiAjIENPTkZJR19HRU5FUklDX0dQSU8gaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CkBAIC0yOCw3ICsyOSw5IEBACiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQogQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15CitDT05GSUdfQVJDSF9IQVNfQ1BVX0lETEVfV0FJVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtMzksNiArNDIsMTIgQEAKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIENPTkZJR19MT0NBTFZFUlNJT049Il9TREs3NzgwIgogQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9HWklQPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9CWklQMj15CitDT05GSUdfSEFWRV9LRVJORUxfTFpNQT15CitDT05GSUdfS0VSTkVMX0daSVA9eQorIyBDT05GSUdfS0VSTkVMX0JaSVAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFUk5FTF9MWk1BIGlzIG5vdCBzZXQKIENPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKIENPTkZJR19TWVNWSVBDX1NZU0NUTD15CkBAIC01MiwxMSArNjEsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTgKQEAgLTg4LDIwICs5OCwyMSBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CisjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15CiBDT05GSUdfU0xVQl9ERUJVRz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQpAQCAtMTEwLDYgKzEyMSwxMCBAQAogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQogQ09ORklHX0hBVkVfQ0xLPXkKIENPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIwogIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKIENPTkZJR19TTEFCSU5GTz15CkBAIC0xMjIsNyArMTM3LDcgQEAKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0s9eQotQ09ORklHX0xCRD15CitDT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCkBAIC0xNzAsNiArMTg1LDcgQEAKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINF8yMDIgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTcgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc3MCBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwPXkKQEAgLTIyNSw2ICsyNDEsNyBAQAogQ09ORklHX05SX1FVSUNLPTIKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogCiAjCkBAIC0zMTQsNyArMzMxLDggQEAKIENPTkZJR19aRVJPX1BBR0VfT0ZGU0VUPTB4MDAwMDEwMDAKIENPTkZJR19CT09UX0xJTktfT0ZGU0VUPTB4MDE4MDAwMDAKIENPTkZJR19FTlRSWV9PRkZTRVQ9MHgwMDAwMTAwMAotQ09ORklHX0NNRExJTkVfQk9PTD15CitDT05GSUdfQ01ETElORV9PVkVSV1JJVEU9eQorIyBDT05GSUdfQ01ETElORV9FWFRFTkQgaXMgbm90IHNldAogQ09ORklHX0NNRExJTkU9Im1lbT0xMjhNIGNvbnNvbGU9dHR5MCBjb25zb2xlPXR0eVNDMCwxMTUyMDAgaXA9Ym9vdHAgcm9vdD0vZGV2L25mcyBuZnNyb290PTE5Mi4xNjguMC4xOi9ob21lL3Jvb3RmcyIKIAogIwpAQCAtNDM1LDYgKzQ1Myw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtNDk2LDYgKzUxNSw3IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKQEAgLTUwMyw3ICs1MjMsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC01MTYsNiArNTM1LDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKIENPTkZJR19GV19MT0FERVI9eQpAQCAtNjc3LDEyICs2OTcsMTQgQEAKICMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1BNQ1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9MT1dMRVZFTF9QQ01DSUEgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogQ09ORklHX0FUQT15CiAjIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorQ09ORklHX0FUQV9WRVJCT1NFX0VSUk9SPXkKIENPTkZJR19TQVRBX1BNUD15CiAjIENPTkZJR19TQVRBX0FIQ0kgaXMgbm90IHNldAogIyBDT05GSUdfU0FUQV9TSUwyNCBpcyBub3Qgc2V0CkBAIC03MDQsNiArNzI2LDcgQEAKICMgQ09ORklHX1BBVEFfQUxJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQU1EIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVJUT1AgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BVFA4NjdYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVRJSVhQIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjQwX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0NNRDY0WCBpcyBub3Qgc2V0CkBAIC03MzIsNiArNzU1LDcgQEAKICMgQ09ORklHX1BBVEFfUENNQ0lBIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUERDX09MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JBRElTWVMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9SREMgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SWjEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TQzEyMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TRVJWRVJXT1JLUyBpcyBub3Qgc2V0CkBAIC03NjAsNyArNzg0LDExIEBACiAjCiAKICMKLSMgRW5hYmxlIG9ubHkgb25lIG9mIHRoZSB0d28gc3RhY2tzLCB1bmxlc3MgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nCisjIFlvdSBjYW4gZW5hYmxlIG9uZSBvciBib3RoIEZpcmVXaXJlIGRyaXZlciBzdGFja3MuCisjCisKKyMKKyMgU2VlIHRoZSBoZWxwIHRleHRzIGZvciBtb3JlIGluZm9ybWF0aW9uLgogIwogIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAogIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldApAQCAtODA0LDEwICs4MzIsNyBAQAogIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTg2MiwxMiArODg3LDEzIEBACiAjCiBDT05GSUdfSU5QVVRfS0VZQk9BUkQ9eQogQ09ORklHX0tFWUJPQVJEX0FUS0JEPXkKLSMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfT1BFTkNPUkVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9TSF9LRVlTQyBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfTU9VU0U9eQogQ09ORklHX01PVVNFX1BTMj15CiBDT05GSUdfTU9VU0VfUFMyX0FMUFM9eQpAQCAtODc1LDYgKzkwMSw3IEBACiBDT05GSUdfTU9VU0VfUFMyX1NZTkFQVElDUz15CiBDT05GSUdfTU9VU0VfUFMyX1RSQUNLUE9JTlQ9eQogIyBDT05GSUdfTU9VU0VfUFMyX0VMQU5URUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX1BTMl9TRU5URUxJQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT1VTRV9QUzJfVE9VQ0hLSVQgaXMgbm90IHNldAogIyBDT05GSUdfTU9VU0VfU0VSSUFMIGlzIG5vdCBzZXQKICMgQ09ORklHX01PVVNFX0FQUExFVE9VQ0ggaXMgbm90IHNldApAQCAtOTQ3LDYgKzk3NCwxMSBAQAogQ09ORklHX0RFVlBPUlQ9eQogIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisKKyMKKyMgUFBTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiBDT05GSUdfUE9XRVJfU1VQUExZPXkKICMgQ09ORklHX1BPV0VSX1NVUFBMWV9ERUJVRyBpcyBub3Qgc2V0CkBAIC05NTQsNyArOTg2LDYgQEAKICMgQ09ORklHX0JBVFRFUllfRFMyNzYwIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtOTg2LDYgKzEwMTcsNyBAQAogIwogIyBHcmFwaGljcyBzdXBwb3J0CiAjCitDT05GSUdfVkdBX0FSQj15CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldApAQCAtMTA3MiwxMSArMTEwNCwxMSBAQAogQ09ORklHX0xPR09fU1VQRVJIX0NMVVQyMjQ9eQogQ09ORklHX1NPVU5EPXkKIENPTkZJR19TT1VORF9PU1NfQ09SRT15CitDT05GSUdfU09VTkRfT1NTX0NPUkVfUFJFQ0xBSU09eQogIyBDT05GSUdfU05EIGlzIG5vdCBzZXQKIENPTkZJR19TT1VORF9QUklNRT15CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKIAogIwpAQCAtMTA5OSw2ICsxMTMxLDcgQEAKIENPTkZJR19ISURfRVpLRVk9eQogIyBDT05GSUdfSElEX0tZRSBpcyBub3Qgc2V0CiBDT05GSUdfSElEX0dZUkFUSU9OPXkKKyMgQ09ORklHX0hJRF9UV0lOSEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9LRU5TSU5HVE9OIGlzIG5vdCBzZXQKIENPTkZJR19ISURfTE9HSVRFQ0g9eQogIyBDT05GSUdfTE9HSVRFQ0hfRkYgaXMgbm90IHNldApAQCAtMTE0OSw2ICsxMTgyLDcgQEAKICMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09IQ0lfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9VSENJX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKQEAgLTEyNzgsNiArMTMxMiw3IEBACiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC0xMzQ1LDcgKzEzODAsNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CkBAIC0xNDI1LDYgKzE0NTksNyBAQAogIyBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogQ09ORklHX01BR0lDX1NZU1JRPXkKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19VTlVTRURfU1lNQk9MUz15CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTE0NjEsMTggKzE0OTYsMjMgQEAKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZSQU1FX1BPSU5URVIgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CiAjIENPTkZJR19QQUdFX1BPSVNPTklORyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUPXkKIENPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKK0NPTkZJR19IQVZFX1NZU0NBTExfVFJBQ0VQT0lOVFM9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiBDT05GSUdfRlRSQUNFPXkKICMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0CkBAIC0xNDgwLDYgKzE1MjAsNyBAQAogIyBDT05GSUdfUFJFRU1QVF9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0VOQUJMRV9ERUZBVUxUX1RSQUNFUlMgaXMgbm90IHNldAorIyBDT05GSUdfRlRSQUNFX1NZU0NBTExTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKIENPTkZJR19CUkFOQ0hfUFJPRklMRV9OT05FPXkKICMgQ09ORklHX1BST0ZJTEVfQU5OT1RBVEVEX0JSQU5DSEVTIGlzIG5vdCBzZXQKQEAgLTE0OTUsMTEgKzE1MzYsMTEgQEAKIENPTkZJR19TSF9TVEFOREFSRF9CSU9TPXkKICMgQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRSBpcyBub3Qgc2V0CiAjIENPTkZJR19FQVJMWV9QUklOVEsgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfQk9PVE1FTSBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVz15CisjIENPTkZJR19TVEFDS19ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CiAjIENPTkZJR180S1NUQUNLUyBpcyBub3Qgc2V0CiBDT05GSUdfRFVNUF9DT0RFPXkKKyMgQ09ORklHX0RXQVJGX1VOV0lOREVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NIX05PX0JTU19JTklUIGlzIG5vdCBzZXQKIAogIwpAQCAtMTUxNCw3ICsxNTU1LDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0FMR0FQST15CiBDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQogQ09ORklHX0NSWVBUT19IQVNIPXkKQEAgLTE1NTAsMTEgKzE1OTAsMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NRDU9eQogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKQEAgLTE2MTcsNSArMTY1OSw2IEBACiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19IQVZFX0xNQj15CiBDT05GSUdfTkxBVFRSPXkKIENPTkZJR19HRU5FUklDX0FUT01JQzY0PXkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9zZTcyMDZfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL3NlNzIwNl9kZWZjb25maWcKaW5kZXggOGRkMmYxMy4uMWNkMTc3NyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL3NlNzIwNl9kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL3NlNzIwNl9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzAKLSMgVGh1IEp1biAxOCAxMjo0NjoxNSAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEKKyMgVGh1IFNlcCAyNCAxODo0NToyOCAyMDA5CiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0xNCw2ICsxNCw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CitDT05GSUdfSVJRX1BFUl9DUFU9eQogIyBDT05GSUdfR0VORVJJQ19HUElPIGlzIG5vdCBzZXQKIENPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQpAQCAtMjgsNyArMjksOSBAQAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQorQ09ORklHX0FSQ0hfSEFTX0NQVV9JRExFX1dBSVQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKQEAgLTM5LDYgKzQyLDEyIEBACiBDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiBDT05GSUdfTE9DQUxWRVJTSU9OPSIiCiBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX0hBVkVfS0VSTkVMX0daSVA9eQorQ09ORklHX0hBVkVfS0VSTkVMX0JaSVAyPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9MWk1BPXkKK0NPTkZJR19LRVJORUxfR1pJUD15CisjIENPTkZJR19LRVJORUxfQlpJUDIgaXMgbm90IHNldAorIyBDT05GSUdfS0VSTkVMX0xaTUEgaXMgbm90IHNldAogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKIENPTkZJR19QT1NJWF9NUVVFVUU9eQpAQCAtNTMsMTIgKzYyLDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLSMgQ09ORklHX0NMQVNTSUNfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLUNPTkZJR19QUkVFTVBUX1JDVT15CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CiBDT05GSUdfUkNVX1RSQUNFPXkKLSMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLUNPTkZJR19QUkVFTVBUX1JDVV9UUkFDRT15CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1VfVFJBQ0U9eQogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKICMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKQEAgLTEwNSwxOSArMTE0LDIxIEBACiBDT05GSUdfVElNRVJGRD15CiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfQUlPPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworQ09ORklHX1BFUkZfRVZFTlRTPXkKK0NPTkZJR19FVkVOVF9QUk9GSUxFPXkKKyMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPTVBBVF9CUksgaXMgbm90IHNldAogIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKIENPTkZJR19TTE9CPXkKIENPTkZJR19QUk9GSUxJTkc9eQogQ09ORklHX1RSQUNFUE9JTlRTPXkKLUNPTkZJR19NQVJLRVJTPXkKIENPTkZJR19PUFJPRklMRT15CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiAjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKQEAgLTEyNiw2ICsxMzcsMTEgQEAKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKIENPTkZJR19IQVZFX0NMSz15CiBDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKKyMgQ09ORklHX0dDT1ZfS0VSTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CiBDT05GSUdfUlRfTVVURVhFUz15CkBAIC0xMzcsNyArMTUzLDcgQEAKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKK0NPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKQEAgLTE4NSw2ICsyMDEsNyBAQAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g0XzIwMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1NyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCBpcyBub3Qgc2V0CkBAIC0zMTksNyArMzM2LDggQEAKIENPTkZJR19aRVJPX1BBR0VfT0ZGU0VUPTB4MDAwMDEwMDAKIENPTkZJR19CT09UX0xJTktfT0ZGU0VUPTB4MDA4MDAwMDAKIENPTkZJR19FTlRSWV9PRkZTRVQ9MHgwMDAwMTAwMAotQ09ORklHX0NNRExJTkVfQk9PTD15CitDT05GSUdfQ01ETElORV9PVkVSV1JJVEU9eQorIyBDT05GSUdfQ01ETElORV9FWFRFTkQgaXMgbm90IHNldAogQ09ORklHX0NNRExJTkU9ImNvbnNvbGU9dHR5U0MzLDExNTIwMCBpZ25vcmVfbG9nbGV2ZWwgZWFybHlwcmludGs9c2VyaWFsIgogCiAjCkBAIC0zODksNiArNDA3LDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC00MTksNiArNDM4LDcgQEAKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWSBpcyBub3Qgc2V0CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldApAQCAtNDI2LDcgKzQ0Niw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTQ0OCw5ICs0NjcsOSBAQAogIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NPTkNBVD15CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldApAQCAtNTg4LDEwICs2MDcsNyBAQAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC02NDcsMTEgKzY2MywxNSBAQAogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkMgaXMgbm90IHNldAogIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKworIworIyBQUFMgc3VwcG9ydAorIworIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTc0Niw4ICs3NjYsMTAgQEAKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKICMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldApAQCAtNzgyLDggKzgwNCw2IEBACiBDT05GSUdfUFJPQ19GUz15CiBDT05GSUdfUFJPQ19TWVNDVEw9eQogQ09ORklHX1NZU0ZTPXkKLUNPTkZJR19UTVBGUz15Ci0jIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKIENPTkZJR19DT05GSUdGU19GUz15CiBDT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15CkBAIC04MDksNyArODI5LDYgQEAKIENPTkZJR19ST01GU19PTl9CTE9DSz15CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKQEAgLTg0Niw2ICs4NjUsNyBAQAogIyBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0ZTPXkKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtODgyLDIwICs5MDIsMjcgQEAKIENPTkZJR19ERUJVR19MSVNUPXkKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CiBDT05GSUdfRlJBTUVfUE9JTlRFUj15CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogIyBDT05GSUdfUEFHRV9QT0lTT05JTkcgaXMgbm90IHNldAogQ09ORklHX05PUF9UUkFDRVI9eQogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVD15CiBDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CitDT05GSUdfSEFWRV9TWVNDQUxMX1RSQUNFUE9JTlRTPXkKIENPTkZJR19SSU5HX0JVRkZFUj15CiBDT05GSUdfRVZFTlRfVFJBQ0lORz15CiBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSPXkKK0NPTkZJR19SSU5HX0JVRkZFUl9BTExPV19TV0FQPXkKIENPTkZJR19UUkFDSU5HPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogQ09ORklHX0ZUUkFDRT15CkBAIC05MDQsNiArOTMxLDcgQEAKICMgQ09ORklHX1BSRUVNUFRfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19FTkFCTEVfREVGQVVMVF9UUkFDRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZUUkFDRV9TWVNDQUxMUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0CiBDT05GSUdfQlJBTkNIX1BST0ZJTEVfTk9ORT15CiAjIENPTkZJR19QUk9GSUxFX0FOTk9UQVRFRF9CUkFOQ0hFUyBpcyBub3Qgc2V0CkBAIC05MjAsMTAgKzk0OCwxMCBAQAogIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TSF9TVEFOREFSRF9CSU9TIGlzIG5vdCBzZXQKICMgQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19CT09UTUVNIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XPXkKKyMgQ09ORklHX1NUQUNLX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19TVEFDS19VU0FHRT15CiBDT05GSUdfRFVNUF9DT0RFPXkKKyMgQ09ORklHX0RXQVJGX1VOV0lOREVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NIX05PX0JTU19JTklUIGlzIG5vdCBzZXQKIAogIwpAQCAtOTM4LDcgKzk2Niw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fSEFTSD15CkBAIC05NzQsMTEgKzEwMDEsMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKIENPTkZJR19DUllQVE9fQ1JDMzJDPXkKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKQEAgLTEwNDYsNSArMTA3NSw2IEBACiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19IQVZFX0xNQj15CiBDT05GSUdfTkxBVFRSPXkKIENPTkZJR19HRU5FUklDX0FUT01JQzY0PXkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9zZTczNDNfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL3NlNzM0M19kZWZjb25maWcKaW5kZXggMThmNDZkZS4uNTUzMTQ0NCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL3NlNzM0M19kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL3NlNzM0M19kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzAKLSMgVGh1IEp1biAxOCAxMjo0NzowNyAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEKKyMgVGh1IFNlcCAyNCAxODo0Njo1NSAyMDA5CiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0xNCw2ICsxNCw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CitDT05GSUdfSVJRX1BFUl9DUFU9eQogIyBDT05GSUdfR0VORVJJQ19HUElPIGlzIG5vdCBzZXQKIENPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQpAQCAtMjgsNyArMjksOSBAQAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQorQ09ORklHX0FSQ0hfSEFTX0NQVV9JRExFX1dBSVQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKQEAgLTM4LDYgKzQxLDEyIEBACiBDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiBDT05GSUdfTE9DQUxWRVJTSU9OPSIiCiBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX0hBVkVfS0VSTkVMX0daSVA9eQorQ09ORklHX0hBVkVfS0VSTkVMX0JaSVAyPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9MWk1BPXkKK0NPTkZJR19LRVJORUxfR1pJUD15CisjIENPTkZJR19LRVJORUxfQlpJUDIgaXMgbm90IHNldAorIyBDT05GSUdfS0VSTkVMX0xaTUEgaXMgbm90IHNldAogIyBDT05GSUdfU1dBUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfU1lTVklQQ19TWVNDVEw9eQpAQCAtNTAsMTEgKzU5LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19HUk9VUF9TQ0hFRD15CkBAIC04OCwxOCArOTgsMTkgQEAKIENPTkZJR19FVkVOVEZEPXkKICMgQ09ORklHX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19BSU89eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CisjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQpAQCAtMTA4LDYgKzExOSwxMCBAQAogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQogQ09ORklHX0hBVkVfQ0xLPXkKIENPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIwogIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKIENPTkZJR19TTEFCSU5GTz15CkBAIC0xMTksNyArMTM0LDcgQEAKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKK0NPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKQEAgLTEzNSw3ICsxNTAsNyBAQAogIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAogIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImRlYWRsaW5lIgotIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CitDT05GSUdfRlJFRVpFUj15CiAKICMKICMgU3lzdGVtIHR5cGUKQEAgLTE2OSw2ICsxODQsNyBAQAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g0XzIwMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1NyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCBpcyBub3Qgc2V0CkBAIC0yMTQsNiArMjMwLDcgQEAKIENPTkZJR19OUl9RVUlDSz0yCiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIAogIwpAQCAtMjk2LDcgKzMxMyw4IEBACiBDT05GSUdfWkVST19QQUdFX09GRlNFVD0weDAwMDAxMDAwCiBDT05GSUdfQk9PVF9MSU5LX09GRlNFVD0weDAwODAwMDAwCiBDT05GSUdfRU5UUllfT0ZGU0VUPTB4MDAwMDEwMDAKLUNPTkZJR19DTURMSU5FX0JPT0w9eQorQ09ORklHX0NNRExJTkVfT1ZFUldSSVRFPXkKKyMgQ09ORklHX0NNRExJTkVfRVhURU5EIGlzIG5vdCBzZXQKIENPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eVNDMCwxMTUyMDAiCiAKICMKQEAgLTMxNiw3ICszMzQsMTIgQEAKICMKICMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zIChFWFBFUklNRU5UQUwpCiAjCi0jIENPTkZJR19QTSBpcyBub3Qgc2V0CitDT05GSUdfUE09eQorIyBDT05GSUdfUE1fREVCVUcgaXMgbm90IHNldAorQ09ORklHX1BNX1NMRUVQPXkKK0NPTkZJR19TVVNQRU5EPXkKK0NPTkZJR19TVVNQRU5EX0ZSRUVaRVI9eQorQ09ORklHX1BNX1JVTlRJTUU9eQogIyBDT05GSUdfQ1BVX0lETEUgaXMgbm90IHNldAogQ09ORklHX05FVD15CiAKQEAgLTM2MCw2ICszODMsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTM4OSw2ICs0MTMsNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CkBAIC0zOTYsNyArNDIxLDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtNDE4LDkgKzQ0Miw5IEBACiAjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ09OQ0FUPXkKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CkBAIC01NjAsMTAgKzU4NCw3IEBACiBDT05GSUdfTUlJPXkKICMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC02NzEsNiArNjkyLDcgQEAKICMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CiAjIENPTkZJR19JMkNfQ0hBUkRFViBpcyBub3Qgc2V0CiBDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIApAQCAtNjgxLDYgKzcwMyw3IEBACiAjCiAjIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQogIworIyBDT05GSUdfSTJDX0RFU0lHTldBUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CiBDT05GSUdfSTJDX1NIX01PQklMRT15CiAjIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKQEAgLTcwMiwyMCArNzI1LDIxIEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TUEkgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtNzM0LDggKzc1OCwxMCBAQAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CisjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0CiAKQEAgLTc4OCw2ICs4MTQsNyBAQAogIyBDT05GSUdfTE9HTyBpcyBub3Qgc2V0CiBDT05GSUdfU09VTkQ9eQogQ09ORklHX1NPVU5EX09TU19DT1JFPXkKK0NPTkZJR19TT1VORF9PU1NfQ09SRV9QUkVDTEFJTT15CiBDT05GSUdfU05EPXkKIENPTkZJR19TTkRfVElNRVI9eQogQ09ORklHX1NORF9QQ009eQpAQCAtODIyLDcgKzg0OSw2IEBACiAjIENPTkZJR19TT1VORF9QUklNRSBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKIAogIwpAQCAtODQ1LDYgKzg3MSw3IEBACiBDT05GSUdfSElEX0VaS0VZPXkKICMgQ09ORklHX0hJRF9LWUUgaXMgbm90IHNldAogQ09ORklHX0hJRF9HWVJBVElPTj15CisjIENPTkZJR19ISURfVFdJTkhBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfS0VOU0lOR1RPTiBpcyBub3Qgc2V0CiBDT05GSUdfSElEX0xPR0lURUNIPXkKICMgQ09ORklHX0xPR0lURUNIX0ZGIGlzIG5vdCBzZXQKQEAgLTg3Nyw2ICs5MDQsNyBAQAogQ09ORklHX1VTQl9ERVZJQ0VGUz15CiBDT05GSUdfVVNCX0RFVklDRV9DTEFTUz15CiAjIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NVU1BFTkQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT1RHX1dISVRFTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUIgaXMgbm90IHNldApAQCAtODkxLDYgKzkxOSw3IEBACiAjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfSVNQMTE2WF9IQ0Q9eQogIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0hXQV9IQ0QgaXMgbm90IHNldApAQCAtOTkwLDggKzEwMTksMTAgQEAKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKICMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldApAQCAtMTAyOCw4ICsxMDU5LDYgQEAKIENPTkZJR19QUk9DX1NZU0NUTD15CiBDT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQogQ09ORklHX1NZU0ZTPXkKLUNPTkZJR19UTVBGUz15Ci0jIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfSFVHRVRMQkZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CkBAIC0xMDYyLDcgKzEwOTEsNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CkBAIC0xMTQwLDYgKzExNjgsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTE0OSw4ICsxMTc4LDExIEBACiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVD15CiBDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CitDT05GSUdfSEFWRV9TWVNDQUxMX1RSQUNFUE9JTlRTPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldApAQCAtMTE2MCw2ICsxMTkyLDcgQEAKIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEU9eQogQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRV9QT1JUPTB4ZmZlMDAwMDAKIENPTkZJR19FQVJMWV9QUklOVEs9eQorIyBDT05GSUdfRFdBUkZfVU5XSU5ERVIgaXMgbm90IHNldAogCiAjCiAjIFNlY3VyaXR5IG9wdGlvbnMKQEAgLTExNzMsNyArMTIwNiw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CkBAIC0xMjA1LDExICsxMjM3LDEzIEBACiAjCiAjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKQEAgLTEyNzMsNSArMTMwNyw2IEBACiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19IQVZFX0xNQj15CiBDT05GSUdfTkxBVFRSPXkKIENPTkZJR19HRU5FUklDX0FUT01JQzY0PXkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9zZTc2MTlfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL3NlNzYxOV9kZWZjb25maWcKaW5kZXggNzI0YmI3Ny4uNjkyMWIxOSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL3NlNzYxOV9kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL3NlNzYxOV9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzAKLSMgVGh1IEp1biAxOCAxMjo0Nzo1NiAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEKKyMgVGh1IFNlcCAyNCAxODo1MDowNSAyMDA5CiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0xNCw2ICsxNCw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CitDT05GSUdfSVJRX1BFUl9DUFU9eQogIyBDT05GSUdfR0VORVJJQ19HUElPIGlzIG5vdCBzZXQKIENPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQpAQCAtMjcsNyArMjgsOSBAQAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQorQ09ORklHX0FSQ0hfSEFTX0NQVV9JRExFX1dBSVQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKQEAgLTM3LDE3ICs0MCwyNCBAQAogQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgogQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgogIyBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE8gaXMgbm90IHNldAorQ09ORklHX0hBVkVfS0VSTkVMX0daSVA9eQorQ09ORklHX0hBVkVfS0VSTkVMX0JaSVAyPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9MWk1BPXkKK0NPTkZJR19LRVJORUxfR1pJUD15CisjIENPTkZJR19LRVJORUxfQlpJUDIgaXMgbm90IHNldAorIyBDT05GSUdfS0VSTkVMX0xaTUEgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVklQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKIAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiAjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CkBAIC03MywzMSArODMsMzYgQEAKIENPTkZJR19USU1FUkZEPXkKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19BSU89eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CisjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQogQ09ORklHX0hBVkVfQ0xLPXkKIENPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIwogIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKIENPTkZJR19TTEFCSU5GTz15CiBDT05GSUdfQkFTRV9TTUFMTD0xCiAjIENPTkZJR19NT0RVTEVTIGlzIG5vdCBzZXQKIENPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAorQ09ORklHX0xCREFGPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIApAQCAtMTQ0LDYgKzE1OSw3IEBACiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDRfMjAyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjQgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzU3IGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwIGlzIG5vdCBzZXQKQEAgLTI2Miw3ICsyNzgsOCBAQAogQ09ORklHX1pFUk9fUEFHRV9PRkZTRVQ9MHgwMDAwMTAwMAogQ09ORklHX0JPT1RfTElOS19PRkZTRVQ9MHgwMDgwMDAwMAogQ09ORklHX0VOVFJZX09GRlNFVD0weDAwMDAxMDAwCi0jIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAorIyBDT05GSUdfQ01ETElORV9PVkVSV1JJVEUgaXMgbm90IHNldAorIyBDT05GSUdfQ01ETElORV9FWFRFTkQgaXMgbm90IHNldAogCiAjCiAjIEJ1cyBvcHRpb25zCkBAIC00NjksMTEgKzQ4NiwxNSBAQAogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkMgaXMgbm90IHNldAogIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKworIworIyBQUFMgc3VwcG9ydAorIworIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTUwNyw3ICs1MjgsNiBAQAogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKIApAQCAtNTU5LDcgKzU3OSw5IEBACiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiAjIENPTkZJR19ETk9USUZZIGlzIG5vdCBzZXQKQEAgLTU5NCw3ICs2MTYsNiBAQAogQ09ORklHX1BST0NfRlM9eQogQ09ORklHX1BST0NfU1lTQ1RMPXkKICMgQ09ORklHX1NZU0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RNUEZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CiBDT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15CiAjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKQEAgLTYxOSw3ICs2NDAsNiBAQAogQ09ORklHX1JPTUZTX09OX0JMT0NLPXkKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiAKICMKICMgUGFydGl0aW9uIFR5cGVzCkBAIC02MzcsNiArNjU3LDcgQEAKICMgQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKQEAgLTY0NSw4ICs2NjYsMTEgQEAKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUPXkKIENPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKK0NPTkZJR19IQVZFX1NZU0NBTExfVFJBQ0VQT0lOVFM9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiAjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CkBAIC02NTQsNiArNjc4LDcgQEAKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19TSF9TVEFOREFSRF9CSU9TIGlzIG5vdCBzZXQKICMgQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19EV0FSRl9VTldJTkRFUiBpcyBub3Qgc2V0CiAKICMKICMgU2VjdXJpdHkgb3B0aW9ucwpAQCAtNjgwLDQgKzcwNSw1IEBACiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19IQVZFX0xNQj15CiBDT05GSUdfR0VORVJJQ19BVE9NSUM2ND15CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3Mvc2U3NzA1X2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9zZTc3MDVfZGVmY29uZmlnCmluZGV4IDZjYTZhMmYuLjNhYmIwNjggMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9zZTc3MDVfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9zZTc3MDVfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMwCi0jIFRodSBKdW4gMTggMTI6NDg6MTggMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxCisjIFRodSBTZXAgMjQgMTg6NTA6NTIgMjAwOQogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtMTQsNiArMTQsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiBDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQorQ09ORklHX0lSUV9QRVJfQ1BVPXkKICMgQ09ORklHX0dFTkVSSUNfR1BJTyBpcyBub3Qgc2V0CiBDT05GSUdfR0VORVJJQ19USU1FPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKQEAgLTI3LDcgKzI4LDkgQEAKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CiBDT05GSUdfQVJDSF9IQVNfREVGQVVMVF9JRExFPXkKK0NPTkZJR19BUkNIX0hBU19DUFVfSURMRV9XQUlUPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCitDT05GSUdfQ09OU1RSVUNUT1JTPXkKIAogIwogIyBHZW5lcmFsIHNldHVwCkBAIC0zOCw2ICs0MSwxMiBAQAogQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgogQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgogQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9HWklQPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9CWklQMj15CitDT05GSUdfSEFWRV9LRVJORUxfTFpNQT15CitDT05GSUdfS0VSTkVMX0daSVA9eQorIyBDT05GSUdfS0VSTkVMX0JaSVAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFUk5FTF9MWk1BIGlzIG5vdCBzZXQKICMgQ09ORklHX1NXQVAgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVklQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldApAQCAtNDgsMTEgKzU3LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKICMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKQEAgLTgzLDE4ICs5MywxOSBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CisjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKIENPTkZJR19IQVZFX0tQUk9CRVM9eQpAQCAtMTAyLDYgKzExMywxMCBAQAogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQogQ09ORklHX0hBVkVfQ0xLPXkKIENPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIwogIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKIENPTkZJR19TTEFCSU5GTz15CkBAIC0xMTMsNyArMTI4LDcgQEAKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKK0NPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKQEAgLTE2MCw2ICsxNzUsNyBAQAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g0XzIwMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1NyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCBpcyBub3Qgc2V0CkBAIC0yMDUsNiArMjIxLDcgQEAKIENPTkZJR19OUl9RVUlDSz0yCiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIAogIwpAQCAtMjg5LDcgKzMwNiw4IEBACiBDT05GSUdfWkVST19QQUdFX09GRlNFVD0weDAwMDAxMDAwCiBDT05GSUdfQk9PVF9MSU5LX09GRlNFVD0weDAwODAwMDAwCiBDT05GSUdfRU5UUllfT0ZGU0VUPTB4MDAwMDEwMDAKLSMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CisjIENPTkZJR19DTURMSU5FX09WRVJXUklURSBpcyBub3Qgc2V0CisjIENPTkZJR19DTURMSU5FX0VYVEVORCBpcyBub3Qgc2V0CiAKICMKICMgQnVzIG9wdGlvbnMKQEAgLTM1NSw2ICszNzMsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTM4NCw2ICs0MDMsNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CkBAIC0zOTEsNyArNDExLDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtNDA5LDkgKzQyOCw5IEBACiAjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKQEAgLTU0NywxMCArNTY2LDcgQEAKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDA9eQogQ09ORklHX05FVERFVl8xMDAwMD15Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC02NDIsMTAgKzY1OCwyMCBAQAogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkMgaXMgbm90IHNldAogIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKworIworIyBQUFMgc3VwcG9ydAorIworIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiBDT05GSUdfSFdNT049eQogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIE5hdGl2ZSBkcml2ZXJzCisjCiAjIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19GNzE4ODJGRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldApAQCAtNjU2LDkgKzY4Miw3IEBACiAjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19TU0JfUE9TU0lCTEU9eQogCkBAIC02OTIsNyArNzE2LDYgQEAKICMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKIENPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAogIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0CiAKQEAgLTc0Niw3ICs3NjksOSBAQAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtODE1LDcgKzg0MCw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiAjIENPTkZJR19ORlNfVjMgaXMgbm90IHNldApAQCAtODQ5LDYgKzg3Myw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldApAQCAtODU3LDggKzg4MiwxMSBAQAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VfTUNPVU5UX1RFU1Q9eQogQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQorQ09ORklHX0hBVkVfU1lTQ0FMTF9UUkFDRVBPSU5UUz15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKICMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKQEAgLTg2Niw2ICs4OTQsNyBAQAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MgaXMgbm90IHNldAogIyBDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RXQVJGX1VOV0lOREVSIGlzIG5vdCBzZXQKIAogIwogIyBTZWN1cml0eSBvcHRpb25zCkBAIC04NzgsNyArOTA3LDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUjIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKQEAgLTkxMCwxMSArOTM4LDEzIEBACiAjCiAjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKQEAgLTk3OSw1ICsxMDA5LDYgQEAKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQorQ09ORklHX0hBVkVfTE1CPXkKIENPTkZJR19OTEFUVFI9eQogQ09ORklHX0dFTkVSSUNfQVRPTUlDNjQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL3NlNzcxMl9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3Mvc2U3NzEyX2RlZmNvbmZpZwppbmRleCBiOGFhZTExLi4xYTQzY2ZlIDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3Mvc2U3NzEyX2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3Mvc2U3NzEyX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMAotIyBUaHUgSnVuIDE4IDEyOjQ5OjAwIDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMQorIyBUaHUgU2VwIDI0IDE4OjUzOjMyIDIwMDkKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTEzLDYgKzEzLDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19JUlFfUEVSX0NQVT15CiAjIENPTkZJR19HRU5FUklDX0dQSU8gaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CkBAIC0yNiw3ICsyNyw5IEBACiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQogQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15CitDT05GSUdfQVJDSF9IQVNfQ1BVX0lETEVfV0FJVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtMzYsNiArMzksMTIgQEAKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIENPTkZJR19MT0NBTFZFUlNJT049IiIKICMgQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0tFUk5FTF9HWklQPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9CWklQMj15CitDT05GSUdfSEFWRV9LRVJORUxfTFpNQT15CitDT05GSUdfS0VSTkVMX0daSVA9eQorIyBDT05GSUdfS0VSTkVMX0JaSVAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFUk5FTF9MWk1BIGlzIG5vdCBzZXQKICMgQ09ORklHX1NXQVAgaXMgbm90IHNldAogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKQEAgLTQ5LDExICs1OCwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiAjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CkBAIC04NCwxOCArOTQsMTkgQEAKIENPTkZJR19FVkVOVEZEPXkKICMgQ09ORklHX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19BSU89eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CisjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQpAQCAtMTA0LDYgKzExNSwxMCBAQAogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQogQ09ORklHX0hBVkVfQ0xLPXkKIENPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIwogIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKIENPTkZJR19TTEFCSU5GTz15CkBAIC0xMTUsNyArMTMwLDcgQEAKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKK0NPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKQEAgLTE2Miw2ICsxNzcsNyBAQAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g0XzIwMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1NyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCBpcyBub3Qgc2V0CkBAIC0yMDcsNiArMjIzLDcgQEAKIENPTkZJR19OUl9RVUlDSz0yCiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIAogIwpAQCAtMjkxLDcgKzMwOCw4IEBACiBDT05GSUdfWkVST19QQUdFX09GRlNFVD0weDAwMDAxMDAwCiBDT05GSUdfQk9PVF9MSU5LX09GRlNFVD0weDAwODAwMDAwCiBDT05GSUdfRU5UUllfT0ZGU0VUPTB4MDAwMDEwMDAKLUNPTkZJR19DTURMSU5FX0JPT0w9eQorQ09ORklHX0NNRExJTkVfT1ZFUldSSVRFPXkKKyMgQ09ORklHX0NNRExJTkVfRVhURU5EIGlzIG5vdCBzZXQKIENPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eVNDMCwxMTUyMDAgcm9vdD0vZGV2L3NkYTEiCiAKICMKQEAgLTM2OCw2ICszODYsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTQzMyw2ICs0NTIsNyBAQAogQ09ORklHX0ZJQl9SVUxFUz15CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKQEAgLTQ0MCw3ICs0NjAsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC00NjQsOSArNDgzLDkgQEAKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DT05DQVQ9eQogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKQEAgLTU5Nyw3ICs2MTYsNiBAQAogIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAogQ09ORklHX1NDU0lfTE9XTEVWRUw9eQogIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQk5YMl9JU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUJGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUJGQ09FIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldApAQCAtNjA1LDYgKzYyMyw3IEBACiAjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogQ09ORklHX0FUQT15CiAjIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorQ09ORklHX0FUQV9WRVJCT1NFX0VSUk9SPXkKIENPTkZJR19TQVRBX1BNUD15CiBDT05GSUdfQVRBX1NGRj15CiAjIENPTkZJR19TQVRBX01WIGlzIG5vdCBzZXQKQEAgLTY1OCwxMCArNjc3LDcgQEAKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDA9eQogQ09ORklHX05FVERFVl8xMDAwMD15Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC03MTksMTEgKzczNSwxNSBAQAogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkMgaXMgbm90IHNldAogIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKworIworIyBQUFMgc3VwcG9ydAorIworIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTgyOCw4ICs4NDgsMTAgQEAKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfRlNfUE9TSVhfQUNMPXkKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiAjIENPTkZJR19ETk9USUZZIGlzIG5vdCBzZXQKQEAgLTg2Niw4ICs4ODgsNiBAQAogQ09ORklHX1BST0NfU1lTQ1RMPXkKIENPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CiBDT05GSUdfU1lTRlM9eQotQ09ORklHX1RNUEZTPXkKLSMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCRlMgaXMgbm90IHNldAogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKQEAgLTkwMCw3ICs5MjAsNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogIyBDT05GSUdfTkZTX1YzIGlzIG5vdCBzZXQKQEAgLTkzNSw2ICs5NTQsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtOTY0LDI0ICs5ODQsMzAgQEAKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKIENPTkZJR19GUkFNRV9QT0lOVEVSPXkKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQogIyBDT05GSUdfUEFHRV9QT0lTT05JTkcgaXMgbm90IHNldAogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVD15CiBDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CitDT05GSUdfSEFWRV9TWVNDQUxMX1RSQUNFUE9JTlRTPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogQ09ORklHX0ZUUkFDRT15CiAjIENPTkZJR19GVU5DVElPTl9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfSVJRU09GRl9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0VOQUJMRV9ERUZBVUxUX1RSQUNFUlMgaXMgbm90IHNldAorIyBDT05GSUdfRlRSQUNFX1NZU0NBTExTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKIENPTkZJR19CUkFOQ0hfUFJPRklMRV9OT05FPXkKICMgQ09ORklHX1BST0ZJTEVfQU5OT1RBVEVEX0JSQU5DSEVTIGlzIG5vdCBzZXQKQEAgLTk5NCwxNCArMTAyMCwxMyBAQAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LTUVNQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfU0hfU1RBTkRBUkRfQklPUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEUgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfQk9PVE1FTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUQUNLX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKICMgQ09ORklHXzRLU1RBQ0tTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RVTVBfQ09ERSBpcyBub3Qgc2V0CisjIENPTkZJR19EV0FSRl9VTldJTkRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TSF9OT19CU1NfSU5JVCBpcyBub3Qgc2V0CiAKICMKQEAgLTEwMTYsNyArMTA0MSw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fQUVBRD15CkBAIC0xMDU5LDExICsxMDgzLDEzIEBACiAjCiBDT05GSUdfQ1JZUFRPX0hNQUM9eQogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX01ENT15CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApAQCAtMTEyNyw1ICsxMTUzLDYgQEAKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQorQ09ORklHX0hBVkVfTE1CPXkKIENPTkZJR19OTEFUVFI9eQogQ09ORklHX0dFTkVSSUNfQVRPTUlDNjQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL3NlNzcyMV9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3Mvc2U3NzIxX2RlZmNvbmZpZwppbmRleCAzMDZlMjFjLi5iOGEzYzhjIDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3Mvc2U3NzIxX2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3Mvc2U3NzIxX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMAotIyBUaHUgSnVuIDE4IDEyOjUwOjQ5IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMQorIyBUaHUgU2VwIDI0IDE4OjU3OjExIDIwMDkKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTEzLDYgKzEzLDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19JUlFfUEVSX0NQVT15CiAjIENPTkZJR19HRU5FUklDX0dQSU8gaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CkBAIC0yNyw3ICsyOCw5IEBACiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQogQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15CitDT05GSUdfQVJDSF9IQVNfQ1BVX0lETEVfV0FJVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtMzcsNiArNDAsMTIgQEAKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIENPTkZJR19MT0NBTFZFUlNJT049IiIKICMgQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0tFUk5FTF9HWklQPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9CWklQMj15CitDT05GSUdfSEFWRV9LRVJORUxfTFpNQT15CitDT05GSUdfS0VSTkVMX0daSVA9eQorIyBDT05GSUdfS0VSTkVMX0JaSVAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFUk5FTF9MWk1BIGlzIG5vdCBzZXQKICMgQ09ORklHX1NXQVAgaXMgbm90IHNldAogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKQEAgLTUwLDExICs1OSwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfR1JPVVBfU0NIRUQ9eQpAQCAtODksMTggKzk5LDE5IEBACiBDT05GSUdfRVZFTlRGRD15CiAjIENPTkZJR19TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQUlPPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAorIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKICMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKQEAgLTEwOSw2ICsxMjAsMTAgQEAKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKIENPTkZJR19IQVZFX0NMSz15CiBDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKICMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CiBDT05GSUdfU0xBQklORk89eQpAQCAtMTIwLDcgKzEzNSw3IEBACiAjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAogQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CitDT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCkBAIC0xNjcsNiArMTgyLDcgQEAKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINF8yMDIgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTcgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc3MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODAgaXMgbm90IHNldApAQCAtMjEyLDYgKzIyOCw3IEBACiBDT05GSUdfTlJfUVVJQ0s9MgogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiAKICMKQEAgLTI5Niw3ICszMTMsOCBAQAogQ09ORklHX1pFUk9fUEFHRV9PRkZTRVQ9MHgwMDAwMTAwMAogQ09ORklHX0JPT1RfTElOS19PRkZTRVQ9MHgwMDgwMDAwMAogQ09ORklHX0VOVFJZX09GRlNFVD0weDAwMDAxMDAwCi1DT05GSUdfQ01ETElORV9CT09MPXkKK0NPTkZJR19DTURMSU5FX09WRVJXUklURT15CisjIENPTkZJR19DTURMSU5FX0VYVEVORCBpcyBub3Qgc2V0CiBDT05GSUdfQ01ETElORT0iY29uc29sZT10dHlTQzAsMTE1MjAwIHJvb3Q9L2Rldi9zZGEyIgogCiAjCkBAIC0zNzMsNiArMzkxLDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC00MzgsNiArNDU3LDcgQEAKIENPTkZJR19GSUJfUlVMRVM9eQogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CkBAIC00NDUsNyArNDY1LDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtNDY5LDkgKzQ4OCw5IEBACiAjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ09OQ0FUPXkKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CkBAIC02MDYsNiArNjI1LDcgQEAKICMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfQVRBPXkKICMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CitDT05GSUdfQVRBX1ZFUkJPU0VfRVJST1I9eQogQ09ORklHX1NBVEFfUE1QPXkKIENPTkZJR19BVEFfU0ZGPXkKICMgQ09ORklHX1NBVEFfTVYgaXMgbm90IHNldApAQCAtNjIxLDEwICs2NDEsNyBAQAogIyBDT05GSUdfTkVUX0VUSEVSTkVUIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15CiBDT05GSUdfTkVUREVWXzEwMDAwPXkKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTY3MiwxMiArNjg5LDEzIEBACiAjCiBDT05GSUdfSU5QVVRfS0VZQk9BUkQ9eQogIyBDT05GSUdfS0VZQk9BUkRfQVRLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9PUEVOQ09SRVMgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX1NIX0tFWVNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9NT1VTRT15CiAjIENPTkZJR19NT1VTRV9QUzIgaXMgbm90IHNldAogIyBDT05GSUdfTU9VU0VfU0VSSUFMIGlzIG5vdCBzZXQKQEAgLTcyNSw2ICs3NDMsMTEgQEAKICMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAogIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisKKyMKKyMgUFBTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldApAQCAtNzYyLDcgKzc4NSw2IEBACiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKIAogIwpAQCAtNzg1LDYgKzgwNyw3IEBACiBDT05GSUdfSElEX0VaS0VZPXkKICMgQ09ORklHX0hJRF9LWUUgaXMgbm90IHNldAogQ09ORklHX0hJRF9HWVJBVElPTj15CisjIENPTkZJR19ISURfVFdJTkhBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfS0VOU0lOR1RPTiBpcyBub3Qgc2V0CiBDT05GSUdfSElEX0xPR0lURUNIPXkKICMgQ09ORklHX0xPR0lURUNIX0ZGIGlzIG5vdCBzZXQKQEAgLTgzMSw2ICs4NTQsNyBAQAogIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09IQ0lfSENEPXkKICMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX01NSU8gaXMgbm90IHNldApAQCAtOTAwLDYgKzkyNCw3IEBACiAjIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9WU1QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CkBAIC05NjEsOCArOTg2LDEwIEBACiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0ZTX1BPU0lYX0FDTD15CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogIyBDT05GSUdfRE5PVElGWSBpcyBub3Qgc2V0CkBAIC0xMDAyLDggKzEwMjksNiBAQAogQ09ORklHX1BST0NfU1lTQ1RMPXkKIENPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CiBDT05GSUdfU1lTRlM9eQotQ09ORklHX1RNUEZTPXkKLSMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCRlMgaXMgbm90IHNldAogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKQEAgLTEwMzYsNyArMTA2MSw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUyBpcyBub3Qgc2V0CiAKICMKQEAgLTEwOTUsNiArMTExOSw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xMTI0LDI0ICsxMTQ5LDMwIEBACiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CiBDT05GSUdfRlJBTUVfUE9JTlRFUj15CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogIyBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfUEFHRV9QT0lTT05JTkcgaXMgbm90IHNldAogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVD15CiBDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CitDT05GSUdfSEFWRV9TWVNDQUxMX1RSQUNFUE9JTlRTPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogQ09ORklHX0ZUUkFDRT15CiAjIENPTkZJR19GVU5DVElPTl9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfSVJRU09GRl9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0VOQUJMRV9ERUZBVUxUX1RSQUNFUlMgaXMgbm90IHNldAorIyBDT05GSUdfRlRSQUNFX1NZU0NBTExTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKIENPTkZJR19CUkFOQ0hfUFJPRklMRV9OT05FPXkKICMgQ09ORklHX1BST0ZJTEVfQU5OT1RBVEVEX0JSQU5DSEVTIGlzIG5vdCBzZXQKQEAgLTExNTQsMTQgKzExODUsMTMgQEAKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX0tHREIgaXMgbm90IHNldAotIyBDT05GSUdfS01FTUNIRUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MgaXMgbm90IHNldAogIyBDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0JPT1RNRU0gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVyBpcyBub3Qgc2V0CisjIENPTkZJR19TVEFDS19ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CiAjIENPTkZJR180S1NUQUNLUyBpcyBub3Qgc2V0CiAjIENPTkZJR19EVU1QX0NPREUgaXMgbm90IHNldAorIyBDT05GSUdfRFdBUkZfVU5XSU5ERVIgaXMgbm90IHNldAogIyBDT05GSUdfU0hfTk9fQlNTX0lOSVQgaXMgbm90IHNldAogCiAjCkBAIC0xMTc2LDcgKzEyMDYsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKIENPTkZJR19DUllQVE9fQUxHQVBJMj15CiBDT05GSUdfQ1JZUFRPX0FFQUQ9eQpAQCAtMTIxOSwxMSArMTI0OCwxMyBAQAogIwogQ09ORklHX0NSWVBUT19ITUFDPXkKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NRDU9eQogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKQEAgLTEyODcsNSArMTMxOCw2IEBACiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19IQVZFX0xNQj15CiBDT05GSUdfTkxBVFRSPXkKIENPTkZJR19HRU5FUklDX0FUT01JQzY0PXkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9zZTc3MjJfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL3NlNzcyMl9kZWZjb25maWcKaW5kZXggNjE5NDM4Mi4uZDcwOWI3ZiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL3NlNzcyMl9kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL3NlNzcyMl9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzAKLSMgVGh1IEp1biAxOCAxMjo1NDoyNCAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEKKyMgVGh1IFNlcCAyNCAxODo1Nzo0MSAyMDA5CiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0xNCw2ICsxNCw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CitDT05GSUdfSVJRX1BFUl9DUFU9eQogIyBDT05GSUdfR0VORVJJQ19HUElPIGlzIG5vdCBzZXQKIENPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQpAQCAtMjksNyArMzAsOSBAQAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQorQ09ORklHX0FSQ0hfSEFTX0NQVV9JRExFX1dBSVQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKQEAgLTQwLDYgKzQzLDEyIEBACiBDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiBDT05GSUdfTE9DQUxWRVJTSU9OPSIiCiBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX0hBVkVfS0VSTkVMX0daSVA9eQorQ09ORklHX0hBVkVfS0VSTkVMX0JaSVAyPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9MWk1BPXkKK0NPTkZJR19LRVJORUxfR1pJUD15CisjIENPTkZJR19LRVJORUxfQlpJUDIgaXMgbm90IHNldAorIyBDT05GSUdfS0VSTkVMX0xaTUEgaXMgbm90IHNldAogQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKQEAgLTUyLDExICs2MSwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNApAQCAtOTEsMTkgKzEwMSwyMCBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCitDT05GSUdfUEVSRl9FVkVOVFM9eQorIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1NMVUJfREVCVUc9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CiBDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKIENPTkZJR19QUk9GSUxJTkc9eQotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PUFJPRklMRSBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiAjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKQEAgLTExMyw2ICsxMjQsMTEgQEAKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKIENPTkZJR19IQVZFX0NMSz15CiBDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKKyMgQ09ORklHX0dDT1ZfS0VSTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CiBDT05GSUdfU0xBQklORk89eQpAQCAtMTI1LDcgKzE0MSw3IEBACiAjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAogQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CitDT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCkBAIC0xNDEsNyArMTU3LDcgQEAKICMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX05PT1A9eQogQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0ibm9vcCIKLSMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAorQ09ORklHX0ZSRUVaRVI9eQogCiAjCiAjIFN5c3RlbSB0eXBlCkBAIC0xNzYsNiArMTkyLDcgQEAKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINF8yMDIgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTcgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc3MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODAgaXMgbm90IHNldApAQCAtMjMzLDYgKzI1MCw3IEBACiBDT05GSUdfTlJfUVVJQ0s9MgogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiAKICMKQEAgLTMxNyw3ICszMzUsOCBAQAogQ09ORklHX1pFUk9fUEFHRV9PRkZTRVQ9MHgwMDAwMTAwMAogQ09ORklHX0JPT1RfTElOS19PRkZTRVQ9MHgwMDgwMDAwMAogQ09ORklHX0VOVFJZX09GRlNFVD0weDAwMDAxMDAwCi0jIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAorIyBDT05GSUdfQ01ETElORV9PVkVSV1JJVEUgaXMgbm90IHNldAorIyBDT05GSUdfQ01ETElORV9FWFRFTkQgaXMgbm90IHNldAogCiAjCiAjIEJ1cyBvcHRpb25zCkBAIC0zMzYsNyArMzU1LDEzIEBACiAjCiAjIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucyAoRVhQRVJJTUVOVEFMKQogIwotIyBDT05GSUdfUE0gaXMgbm90IHNldAorQ09ORklHX1BNPXkKKyMgQ09ORklHX1BNX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19QTV9TTEVFUD15CitDT05GSUdfU1VTUEVORD15CitDT05GSUdfU1VTUEVORF9GUkVFWkVSPXkKKyMgQ09ORklHX0hJQkVSTkFUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19QTV9SVU5USU1FPXkKICMgQ09ORklHX0NQVV9JRExFIGlzIG5vdCBzZXQKIENPTkZJR19ORVQ9eQogCkBAIC0zODEsNiArNDA2LDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC00MTAsNiArNDM2LDcgQEAKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWSBpcyBub3Qgc2V0CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldApAQCAtNDE3LDcgKzQ0NCw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTQzMCw2ICs0NTYsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKQEAgLTQ5NCw3ICs1MjEsNiBAQAogIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAogQ09ORklHX1NDU0lfTE9XTEVWRUw9eQogIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQk5YMl9JU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUJGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUJGQ09FIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldApAQCAtNTAyLDYgKzUyOCw3IEBACiAjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogQ09ORklHX0FUQT15CiAjIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorQ09ORklHX0FUQV9WRVJCT1NFX0VSUk9SPXkKIENPTkZJR19TQVRBX1BNUD15CiBDT05GSUdfQVRBX1NGRj15CiAjIENPTkZJR19TQVRBX01WIGlzIG5vdCBzZXQKQEAgLTUzNSwxMCArNTYyLDcgQEAKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDA9eQogQ09ORklHX05FVERFVl8xMDAwMD15Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC01NzcsMTIgKzYwMSwxMyBAQAogIwogQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKIENPTkZJR19LRVlCT0FSRF9BVEtCRD15Ci0jIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX09QRU5DT1JFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfU0hfS0VZU0MgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKQEAgLTYzMSwxMCArNjU2LDIwIEBACiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TUEkgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKIENPTkZJR19IV01PTj15CiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgTmF0aXZlIGRyaXZlcnMKKyMKICMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0Y3MTg4MkZHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0CkBAIC02NDUsOSArNjgwLDcgQEAKICMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTY4MSw3ICs3MTQsNiBAQAogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKIApAQCAtNzc4LDggKzgxMCwxMCBAQAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtODM5LDcgKzg3Myw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogIyBDT05GSUdfTkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX05GU0QgaXMgbm90IHNldApAQCAtODY2LDYgKzg5OSw3IEBACiAjIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiBDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0ZTPXkKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtODc4LDggKzkxMiwxMSBAQAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUPXkKIENPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKK0NPTkZJR19IQVZFX1NZU0NBTExfVFJBQ0VQT0lOVFM9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiAjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfRFlOQU1JQ19ERUJVRyBpcyBub3Qgc2V0CkBAIC04ODksNiArOTI2LDcgQEAKIENPTkZJR19TSF9TVEFOREFSRF9CSU9TPXkKICMgQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRSBpcyBub3Qgc2V0CiAjIENPTkZJR19FQVJMWV9QUklOVEsgaXMgbm90IHNldAorIyBDT05GSUdfRFdBUkZfVU5XSU5ERVIgaXMgbm90IHNldAogCiAjCiAjIFNlY3VyaXR5IG9wdGlvbnMKQEAgLTkwMiw3ICs5NDAsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldApAQCAtOTM0LDExICs5NzEsMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApAQCAtMTAwMiw1ICsxMDQxLDYgQEAKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQorQ09ORklHX0hBVkVfTE1CPXkKIENPTkZJR19OTEFUVFI9eQogQ09ORklHX0dFTkVSSUNfQVRPTUlDNjQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL3NlNzcyNF9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3Mvc2U3NzI0X2RlZmNvbmZpZwppbmRleCAzZWU3ODNhMC4uNTZiMGI5ZiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL3NlNzcyNF9kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL3NlNzcyNF9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzAKLSMgTW9uIEp1biAyOSAxNjoyODo0MyAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEKKyMgRnJpIFNlcCAyNSAxMTo1MDo1OSAyMDA5CiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC00Miw2ICs0MiwxMiBAQAogQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgogQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgogIyBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE8gaXMgbm90IHNldAorQ09ORklHX0hBVkVfS0VSTkVMX0daSVA9eQorQ09ORklHX0hBVkVfS0VSTkVMX0JaSVAyPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9MWk1BPXkKK0NPTkZJR19LRVJORUxfR1pJUD15CisjIENPTkZJR19LRVJORUxfQlpJUDIgaXMgbm90IHNldAorIyBDT05GSUdfS0VSTkVMX0xaTUEgaXMgbm90IHNldAogQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKQEAgLTU0LDExICs2MCwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfR1JPVVBfU0NIRUQ9eQpAQCAtOTEsMjAgKzk4LDE5IEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0NPVU5URVJTPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAogIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKQEAgLTE0NCw3ICsxNTAsNyBAQAogQ09ORklHX0RFRkFVTFRfQ0ZRPXkKICMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCi0jIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKK0NPTkZJR19GUkVFWkVSPXkKIAogIwogIyBTeXN0ZW0gdHlwZQpAQCAtMTc4LDYgKzE4NCw3IEBACiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDRfMjAyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMyBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzI0PXkKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1NyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCBpcyBub3Qgc2V0CkBAIC0yMjQsNiArMjMxLDcgQEAKIENPTkZJR19OUl9RVUlDSz0yCiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIAogIwpAQCAtMjQ5LDYgKzI1Nyw4IEBACiAjCiBDT05GSUdfU09MVVRJT05fRU5HSU5FPXkKIENPTkZJR19TSF83NzI0X1NPTFVUSU9OX0VOR0lORT15CisjIENPTkZJR19TSF9LRlIyUjA5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NIX0VDT1ZFQyBpcyBub3Qgc2V0CiAKICMKICMgVGltZXIgYW5kIGNsb2NrIGNvbmZpZ3VyYXRpb24KQEAgLTI2OSw3ICsyNzksMTAgQEAKICMKICMgRE1BIHN1cHBvcnQKICMKLSMgQ09ORklHX1NIX0RNQSBpcyBub3Qgc2V0CitDT05GSUdfU0hfRE1BX0FQST15CitDT05GSUdfU0hfRE1BPXkKK0NPTkZJR19OUl9PTkNISVBfRE1BX0NIQU5ORUxTPTEyCisjIENPTkZJR19OUl9ETUFfQ0hBTk5FTFNfQk9PTCBpcyBub3Qgc2V0CiAKICMKICMgQ29tcGFuaW9uIENoaXBzCkBAIC0zMDUsNyArMzE4LDggQEAKIENPTkZJR19aRVJPX1BBR0VfT0ZGU0VUPTB4MDAwMDEwMDAKIENPTkZJR19CT09UX0xJTktfT0ZGU0VUPTB4MDA4MDAwMDAKIENPTkZJR19FTlRSWV9PRkZTRVQ9MHgwMDAwMTAwMAotQ09ORklHX0NNRExJTkVfQk9PTD15CitDT05GSUdfQ01ETElORV9PVkVSV1JJVEU9eQorIyBDT05GSUdfQ01ETElORV9FWFRFTkQgaXMgbm90IHNldAogQ09ORklHX0NNRExJTkU9ImNvbnNvbGU9dHR5MSBjb25zb2xlPXR0eVNDMywxMTUyMDAgcm9vdD0vZGV2L25mcyBpcD1kaGNwIG1lbWNodW5rLnZwdT00bSIKIAogIwpAQCAtMzI1LDcgKzMzOSwxMyBAQAogIwogIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMgKEVYUEVSSU1FTlRBTCkKICMKLSMgQ09ORklHX1BNIGlzIG5vdCBzZXQKK0NPTkZJR19QTT15CisjIENPTkZJR19QTV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfUE1fU0xFRVA9eQorQ09ORklHX1NVU1BFTkQ9eQorQ09ORklHX1NVU1BFTkRfRlJFRVpFUj15CisjIENPTkZJR19ISUJFUk5BVElPTiBpcyBub3Qgc2V0CitDT05GSUdfUE1fUlVOVElNRT15CiAjIENPTkZJR19DUFVfSURMRSBpcyBub3Qgc2V0CiBDT05GSUdfTkVUPXkKIApAQCAtMzczLDYgKzM5Myw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtNDAyLDYgKzQyMyw3IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKQEAgLTQwOSw3ICs0MzEsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC00MjIsNiArNDQzLDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKIENPTkZJR19GV19MT0FERVI9eQpAQCAtNDMxLDkgKzQ1Myw5IEBACiAjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ09OQ0FUPXkKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKICMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldApAQCAtNDg5LDYgKzUxMSw3IEBACiAjCiAjIENPTkZJR19NVERfREFUQUZMQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9NMjVQODAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1NTVDI1TCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldApAQCAtNjQ4LDEyICs2NzEsMTAgQEAKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtNjk3LDE0ICs3MTgsMTkgQEAKICMgSW5wdXQgRGV2aWNlIERyaXZlcnMKICMKIENPTkZJR19JTlBVVF9LRVlCT0FSRD15CisjIENPTkZJR19LRVlCT0FSRF9BRFA1NTg4IGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX0FUS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CisjIENPTkZJR19RVDIxNjAgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX0dQSU8gaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTUFUUklYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX01BWDczNTkgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX09QRU5DT1JFUyBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAogQ09ORklHX0tFWUJPQVJEX1NIX0tFWVNDPXkKKyMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CkBAIC03NTQsNiArNzgwLDcgQEAKICMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CiBDT05GSUdfSTJDX0NIQVJERVY9eQogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiAKQEAgLTc2NCw2ICs3OTEsNyBAQAogIwogIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKICMKKyMgQ09ORklHX0kyQ19ERVNJR05XQVJFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19HUElPIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAogQ09ORklHX0kyQ19TSF9NT0JJTEU9eQpAQCAtNzg2LDkgKzgxNCw2IEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldApAQCAtODM4LDExICs4NjMsMTUgQEAKICMKICMgQ09ORklHX0dQSU9fTUFYNzMwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19HUElPX01DUDIzUzA4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fTUMzMzg4MCBpcyBub3Qgc2V0CisKKyMKKyMgQUM5NyBHUElPIGV4cGFuZGVyczoKKyMKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTg2Miw4ICs4OTEsMTAgQEAKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX01DMTM3ODMgaXMgbm90IHNldAogIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfRVpYX1BDQVAgaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKQEAgLTg3NiwyNCArOTA3LDI0IEBACiBDT05GSUdfVklERU9fVjRMMl9DT01NT049eQogIyBDT05GSUdfVklERU9fQUxMT1dfVjRMMSBpcyBub3Qgc2V0CiBDT05GSUdfVklERU9fVjRMMV9DT01QQVQ9eQotIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAotQ09ORklHX1ZJREVPX01FRElBPXkKK0NPTkZJR19EVkJfQ09SRT1tCitDT05GSUdfVklERU9fTUVESUE9bQogCiAjCiAjIE11bHRpbWVkaWEgZHJpdmVycwogIwogIyBDT05GSUdfTUVESUFfQVRUQUNIIGlzIG5vdCBzZXQKLUNPTkZJR19NRURJQV9UVU5FUj15CitDT05GSUdfTUVESUFfVFVORVI9bQogIyBDT05GSUdfTUVESUFfVFVORVJfQ1VTVE9NSVNFIGlzIG5vdCBzZXQKLUNPTkZJR19NRURJQV9UVU5FUl9TSU1QTEU9eQotQ09ORklHX01FRElBX1RVTkVSX1REQTgyOTA9eQotQ09ORklHX01FRElBX1RVTkVSX1REQTk4ODc9eQotQ09ORklHX01FRElBX1RVTkVSX1RFQTU3NjE9eQotQ09ORklHX01FRElBX1RVTkVSX1RFQTU3Njc9eQotQ09ORklHX01FRElBX1RVTkVSX01UMjBYWD15Ci1DT05GSUdfTUVESUFfVFVORVJfWEMyMDI4PXkKLUNPTkZJR19NRURJQV9UVU5FUl9YQzUwMDA9eQotQ09ORklHX01FRElBX1RVTkVSX01DNDRTODAzPXkKK0NPTkZJR19NRURJQV9UVU5FUl9TSU1QTEU9bQorQ09ORklHX01FRElBX1RVTkVSX1REQTgyOTA9bQorQ09ORklHX01FRElBX1RVTkVSX1REQTk4ODc9bQorQ09ORklHX01FRElBX1RVTkVSX1RFQTU3NjE9bQorQ09ORklHX01FRElBX1RVTkVSX1RFQTU3Njc9bQorQ09ORklHX01FRElBX1RVTkVSX01UMjBYWD1tCitDT05GSUdfTUVESUFfVFVORVJfWEMyMDI4PW0KK0NPTkZJR19NRURJQV9UVU5FUl9YQzUwMDA9bQorQ09ORklHX01FRElBX1RVTkVSX01DNDRTODAzPW0KIENPTkZJR19WSURFT19WNEwyPXkKIENPTkZJR19WSURFT0JVRl9HRU49eQogQ09ORklHX1ZJREVPQlVGX0RNQV9DT05USUc9eQpAQCAtOTA0LDYgKzkzNSw3IEBACiAjIENPTkZJR19WSURFT19WSVZJIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJREVPX1NBQTUyNDZBIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJREVPX1NBQTUyNDkgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fQVUwODI4IGlzIG5vdCBzZXQKIENPTkZJR19TT0NfQ0FNRVJBPXkKICMgQ09ORklHX1NPQ19DQU1FUkFfTVQ5TTAwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TT0NfQ0FNRVJBX01UOU0xMTEgaXMgbm90IHNldApAQCAtOTE5LDE1ICs5NTEsMTggQEAKIENPTkZJR19VU0JfR1NQQ0E9bQogIyBDT05GSUdfVVNCX001NjAyIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVFYwNlhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HTDg2MCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR1NQQ0FfQ09ORVggaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dTUENBX0VUT01TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HU1BDQV9GSU5FUElYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HU1BDQV9KRUlMSU5KIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HU1BDQV9NQVJTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HU1BDQV9NUjk3MzEwQSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR1NQQ0FfT1Y1MTkgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dTUENBX09WNTM0IGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HU1BDQV9QQUMyMDcgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dTUENBX1BBQzczMTEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dTUENBX1NOOUMyMFggaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dTUENBX1NPTklYQiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR1NQQ0FfU09OSVhKIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HU1BDQV9TUENBNTAwIGlzIG5vdCBzZXQKQEAgLTk1Nyw2ICs5OTIsMjYgQEAKICMgQ09ORklHX1VTQl9TVEtXRUJDQU0gaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1MyMjU1IGlzIG5vdCBzZXQKICMgQ09ORklHX1JBRElPX0FEQVBURVJTIGlzIG5vdCBzZXQKK0NPTkZJR19EVkJfTUFYX0FEQVBURVJTPTgKKyMgQ09ORklHX0RWQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CitDT05GSUdfRFZCX0NBUFRVUkVfRFJJVkVSUz15CisjIENPTkZJR19UVFBDSV9FRVBST00gaXMgbm90IHNldAorCisjCisjIFN1cHBvcnRlZCBVU0IgQWRhcHRlcnMKKyMKKyMgQ09ORklHX0RWQl9VU0IgaXMgbm90IHNldAorIyBDT05GSUdfU01TX1NJQU5PX01EVFYgaXMgbm90IHNldAorCisjCisjIFN1cHBvcnRlZCBGbGV4Q29wSUkgKEIyQzIpIEFkYXB0ZXJzCisjCisjIENPTkZJR19EVkJfQjJDMl9GTEVYQ09QIGlzIG5vdCBzZXQKKworIworIyBTdXBwb3J0ZWQgRFZCIEZyb250ZW5kcworIworIyBDT05GSUdfRFZCX0ZFX0NVU1RPTUlTRSBpcyBub3Qgc2V0CiAjIENPTkZJR19EQUIgaXMgbm90IHNldAogCiAjCkBAIC0xMDE3LDEwICsxMDcyLDgwIEBACiAjIENPTkZJR19MT0dPX1NVUEVSSF9NT05PIGlzIG5vdCBzZXQKICMgQ09ORklHX0xPR09fU1VQRVJIX1ZHQTE2IGlzIG5vdCBzZXQKIENPTkZJR19MT0dPX1NVUEVSSF9DTFVUMjI0PXkKLSMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKK0NPTkZJR19TT1VORD15CisjIENPTkZJR19TT1VORF9PU1NfQ09SRSBpcyBub3Qgc2V0CitDT05GSUdfU05EPW0KK0NPTkZJR19TTkRfVElNRVI9bQorQ09ORklHX1NORF9QQ009bQorQ09ORklHX1NORF9KQUNLPXkKKyMgQ09ORklHX1NORF9TRVFVRU5DRVIgaXMgbm90IHNldAorIyBDT05GSUdfU05EX01JWEVSX09TUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfUENNX09TUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NVUFBPUlRfT0xEX0FQSSBpcyBub3Qgc2V0CitDT05GSUdfU05EX1ZFUkJPU0VfUFJPQ0ZTPXkKKyMgQ09ORklHX1NORF9WRVJCT1NFX1BSSU5USyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1JBV01JRElfU0VRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9PUEwzX0xJQl9TRVEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX09QTDRfTElCX1NFUSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU0JBV0VfU0VRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9FTVUxMEsxX1NFUSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRFJJVkVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TVVBFUkggaXMgbm90IHNldAorQ09ORklHX1NORF9VU0I9eQorIyBDT05GSUdfU05EX1VTQl9BVURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfVVNCX0NBSUFRIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfU09DPW0KKworIworIyBTb0MgQXVkaW8gc3VwcG9ydCBmb3IgU3VwZXJICisjCitDT05GSUdfU05EX1NPQ19TSDRfRlNJPW0KK0NPTkZJR19TTkRfRlNJX0FLNDY0Mj15CitDT05GSUdfU05EX1NPQ19JMkNfQU5EX1NQST1tCitDT05GSUdfU05EX1NPQ19BTExfQ09ERUNTPW0KK0NPTkZJR19TTkRfU09DX1dNX0hVQlM9bQorQ09ORklHX1NORF9TT0NfQUQxODM2PW0KK0NPTkZJR19TTkRfU09DX0FEMTkzOD1tCitDT05GSUdfU05EX1NPQ19BRDczMzExPW0KK0NPTkZJR19TTkRfU09DX0FLNDEwND1tCitDT05GSUdfU05EX1NPQ19BSzQ1MzU9bQorQ09ORklHX1NORF9TT0NfQUs0NjQyPW0KK0NPTkZJR19TTkRfU09DX0NTNDI3MD1tCitDT05GSUdfU05EX1NPQ19MMz1tCitDT05GSUdfU05EX1NPQ19QQ00zMDA4PW0KK0NPTkZJR19TTkRfU09DX1NQRElGPW0KK0NPTkZJR19TTkRfU09DX1NTTTI2MDI9bQorQ09ORklHX1NORF9TT0NfVExWMzIwQUlDMjM9bQorQ09ORklHX1NORF9TT0NfVExWMzIwQUlDMjY9bQorQ09ORklHX1NORF9TT0NfVExWMzIwQUlDM1g9bQorQ09ORklHX1NORF9TT0NfVURBMTM0WD1tCitDT05GSUdfU05EX1NPQ19VREExMzgwPW0KK0NPTkZJR19TTkRfU09DX1dNODUxMD1tCitDT05GSUdfU05EX1NPQ19XTTg1MjM9bQorQ09ORklHX1NORF9TT0NfV004NTgwPW0KK0NPTkZJR19TTkRfU09DX1dNODcyOD1tCitDT05GSUdfU05EX1NPQ19XTTg3MzE9bQorQ09ORklHX1NORF9TT0NfV004NzUwPW0KK0NPTkZJR19TTkRfU09DX1dNODc1Mz1tCitDT05GSUdfU05EX1NPQ19XTTg3NzY9bQorQ09ORklHX1NORF9TT0NfV004OTAwPW0KK0NPTkZJR19TTkRfU09DX1dNODkwMz1tCitDT05GSUdfU05EX1NPQ19XTTg5NDA9bQorQ09ORklHX1NORF9TT0NfV004OTYwPW0KK0NPTkZJR19TTkRfU09DX1dNODk2MT1tCitDT05GSUdfU05EX1NPQ19XTTg5NzE9bQorQ09ORklHX1NORF9TT0NfV004OTc0PW0KK0NPTkZJR19TTkRfU09DX1dNODk4OD1tCitDT05GSUdfU05EX1NPQ19XTTg5OTA9bQorQ09ORklHX1NORF9TT0NfV004OTkzPW0KK0NPTkZJR19TTkRfU09DX1dNOTA4MT1tCitDT05GSUdfU05EX1NPQ19NQVg5ODc3PW0KKyMgQ09ORklHX1NPVU5EX1BSSU1FIGlzIG5vdCBzZXQKIENPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAogCiAjCkBAIC0xMDQzLDYgKzExNjgsNyBAQAogIyBDT05GSUdfSElEX0VaS0VZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9LWUUgaXMgbm90IHNldAogIyBDT05GSUdfSElEX0dZUkFUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9UV0lOSEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9LRU5TSU5HVE9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9MT0dJVEVDSCBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfTUlDUk9TT0ZUIGlzIG5vdCBzZXQKQEAgLTEwNzIsNiArMTE5OCw3IEBACiAjIENPTkZJR19VU0JfREVWSUNFRlMgaXMgbm90IHNldAogQ09ORklHX1VTQl9ERVZJQ0VfQ0xBU1M9eQogIyBDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVVNQRU5EIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09UR19XSElURUxJU1QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09UR19CTEFDS0xJU1RfSFVCIGlzIG5vdCBzZXQKQEAgLTEwODYsOSArMTIxMywxMSBAQAogIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfUjhBNjY1OTdfSENEPXkKICMgQ09ORklHX1VTQl9IV0FfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfTVVTQl9IRFJDIGlzIG5vdCBzZXQKIAogIwogIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKQEAgLTExNTEsOSArMTI4MCw0NiBAQAogIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVlNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAorQ09ORklHX1VTQl9HQURHRVQ9eQorIyBDT05GSUdfVVNCX0dBREdFVF9ERUJVR19GSUxFUyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0dBREdFVF9WQlVTX0RSQVc9MgorQ09ORklHX1VTQl9HQURHRVRfU0VMRUNURUQ9eQorIyBDT05GSUdfVVNCX0dBREdFVF9BVDkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfQVRNRUxfVVNCQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0ZTTF9VU0IyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfTEg3QTQwWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX09NQVAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9QWEEyNVggaXMgbm90IHNldAorQ09ORklHX1VTQl9HQURHRVRfUjhBNjY1OTc9eQorQ09ORklHX1VTQl9SOEE2NjU5Nz15CisjIENPTkZJR19VU0JfR0FER0VUX1BYQTI3WCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX1MzQ19IU09URyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0lNWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX1MzQzI0MTAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9NNjY1OTIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9BTUQ1NTM2VURDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfRlNMX1FFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfQ0kxM1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX05FVDIyODAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9HT0tVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfTEFOR1dFTEwgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9EVU1NWV9IQ0QgaXMgbm90IHNldAorQ09ORklHX1VTQl9HQURHRVRfRFVBTFNQRUVEPXkKKyMgQ09ORklHX1VTQl9aRVJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BVURJTyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0VUSD1tCitDT05GSUdfVVNCX0VUSF9STkRJUz15CisjIENPTkZJR19VU0JfRVRIX0VFTSBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0dBREdFVEZTPW0KK0NPTkZJR19VU0JfRklMRV9TVE9SQUdFPW0KKyMgQ09ORklHX1VTQl9GSUxFX1NUT1JBR0VfVEVTVCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0dfU0VSSUFMPW0KKyMgQ09ORklHX1VTQl9NSURJX0dBREdFVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR19QUklOVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DRENfQ09NUE9TSVRFIGlzIG5vdCBzZXQKIAogIwogIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKQEAgLTExNzYsNiArMTM0Miw4IEBACiAjIE1NQy9TRC9TRElPIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCiAjCiAjIENPTkZJR19NTUNfU0RIQ0kgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX0FUOTEgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX0FUTUVMTUNJIGlzIG5vdCBzZXQKIENPTkZJR19NTUNfU1BJPXkKICMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKQEAgLTEyMjMsNiArMTM5MSw3IEBACiAjIENPTkZJR19SVENfRFJWX1I5NzAxIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfUlM1QzM0OCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0RTMzIzNCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjIxMjMgaXMgbm90IHNldAogCiAjCiAjIFBsYXRmb3JtIFJUQyBkcml2ZXJzCkBAIC0xMjc5LDYgKzE0NDgsNyBAQAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtMTM0Myw3ICsxNTEzLDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQpAQCAtMTQyMyw2ICsxNTkyLDcgQEAKICMgQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTQzMyw4ICsxNjAzLDExIEBACiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUPXkKIENPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKK0NPTkZJR19IQVZFX1NZU0NBTExfVFJBQ0VQT0lOVFM9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiAjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CkBAIC0xNDQyLDYgKzE2MTUsNyBAQAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MgaXMgbm90IHNldAogIyBDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RXQVJGX1VOV0lOREVSIGlzIG5vdCBzZXQKIAogIwogIyBTZWN1cml0eSBvcHRpb25zCkBAIC0xNDU1LDcgKzE2MjksNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKIENPTkZJR19DUllQVE9fQUxHQVBJMj15CiBDT05GSUdfQ1JZUFRPX0FFQUQyPXkKQEAgLTE0OTYsMTEgKzE2NjksMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApAQCAtMTU2Miw1ICsxNzM3LDYgQEAKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQorQ09ORklHX0hBVkVfTE1CPXkKIENPTkZJR19OTEFUVFI9eQogQ09ORklHX0dFTkVSSUNfQVRPTUlDNjQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL3NlNzc1MF9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3Mvc2U3NzUwX2RlZmNvbmZpZwppbmRleCA1NjRiZjdiLi43YmM5MjZjIDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3Mvc2U3NzUwX2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3Mvc2U3NzUwX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMAotIyBUaHUgSnVuIDE4IDEzOjAwOjAxIDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMQorIyBUaHUgU2VwIDI0IDE4OjU4OjU4IDIwMDkKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTE0LDYgKzE0LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19JUlFfUEVSX0NQVT15CiAjIENPTkZJR19HRU5FUklDX0dQSU8gaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CkBAIC0yNyw3ICsyOCw5IEBACiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQogQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15CitDT05GSUdfQVJDSF9IQVNfQ1BVX0lETEVfV0FJVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtMzcsNiArNDAsMTIgQEAKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIENPTkZJR19MT0NBTFZFUlNJT049IiIKIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfSEFWRV9LRVJORUxfR1pJUD15CitDT05GSUdfSEFWRV9LRVJORUxfQlpJUDI9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTUE9eQorQ09ORklHX0tFUk5FTF9HWklQPXkKKyMgQ09ORklHX0tFUk5FTF9CWklQMiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVJORUxfTFpNQSBpcyBub3Qgc2V0CiAjIENPTkZJR19TV0FQIGlzIG5vdCBzZXQKIENPTkZJR19TWVNWSVBDPXkKIENPTkZJR19TWVNWSVBDX1NZU0NUTD15CkBAIC00OSwxMSArNTgsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKQEAgLTg0LDE4ICs5NCwxOSBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CisjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQpAQCAtMTA0LDYgKzExNSwxMCBAQAogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQogQ09ORklHX0hBVkVfQ0xLPXkKIENPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIwogIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKIENPTkZJR19TTEFCSU5GTz15CkBAIC0xMTUsNyArMTMwLDcgQEAKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKK0NPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKQEAgLTE2Miw2ICsxNzcsNyBAQAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g0XzIwMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1NyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCBpcyBub3Qgc2V0CkBAIC0yMDcsNiArMjIzLDcgQEAKIENPTkZJR19OUl9RVUlDSz0yCiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIAogIwpAQCAtMjkxLDcgKzMwOCw4IEBACiBDT05GSUdfQk9PVF9MSU5LX09GRlNFVD0weDAwODAwMDAwCiBDT05GSUdfRU5UUllfT0ZGU0VUPTB4MDAwMDEwMDAKICMgQ09ORklHX1VCQ19XQUtFVVAgaXMgbm90IHNldAotIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NNRExJTkVfT1ZFUldSSVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NNRExJTkVfRVhURU5EIGlzIG5vdCBzZXQKIAogIwogIyBCdXMgb3B0aW9ucwpAQCAtMzU4LDYgKzM3Niw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtMzg3LDYgKzQwNiw3IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKQEAgLTM5NCw3ICs0MTQsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC00MTIsOSArNDMxLDkgQEAKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldApAQCAtNTYzLDcgKzU4Miw2IEBACiAjIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0CiBDT05GSUdfU0NTSV9MT1dMRVZFTD15CiAjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9CTlgyX0lTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQkZDIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQkZDT0UgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CkBAIC01OTksMTAgKzYxNyw3IEBACiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwPXkKIENPTkZJR19ORVRERVZfMTAwMDA9eQotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtNjY1LDEwICs2ODAsMjAgQEAKICMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAogIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisKKyMKKyMgUFBTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogQ09ORklHX0hXTU9OPXkKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBOYXRpdmUgZHJpdmVycworIwogIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfRjcxODgyRkcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKQEAgLTY3OSw5ICs3MDQsNyBAQAogIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiBDT05GSUdfV0FUQ0hET0c9eQogIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAogCkBAIC03NjYsOCArNzg5LDEwIEBACiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC04MzgsNyArODYzLDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKICMgQ09ORklHX05GU19WMyBpcyBub3Qgc2V0CkBAIC04ODUsNiArOTA5LDcgQEAKICMgQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtODk0LDggKzkxOSwxMSBAQAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VfTUNPVU5UX1RFU1Q9eQogQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQorQ09ORklHX0hBVkVfU1lTQ0FMTF9UUkFDRVBPSU5UUz15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKICMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKQEAgLTkwMyw2ICs5MzEsNyBAQAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MgaXMgbm90IHNldAogIyBDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RXQVJGX1VOV0lOREVSIGlzIG5vdCBzZXQKIAogIwogIyBTZWN1cml0eSBvcHRpb25zCkBAIC05MTYsNyArOTQ1LDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUjIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKQEAgLTk0OCwxMSArOTc2LDEzIEBACiAjCiAjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKQEAgLTEwMTYsNSArMTA0Niw2IEBACiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19IQVZFX0xNQj15CiBDT05GSUdfTkxBVFRSPXkKIENPTkZJR19HRU5FUklDX0FUT01JQzY0PXkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9zZTc3NTFfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL3NlNzc1MV9kZWZjb25maWcKaW5kZXggZWI0MzFjNC4uYzIwYWU1ZSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL3NlNzc1MV9kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL3NlNzc1MV9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzAKLSMgVGh1IEp1biAxOCAxMzowMjoyNiAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEKKyMgVGh1IFNlcCAyNCAxOTowMTo0MSAyMDA5CiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0xNCw2ICsxNCw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CitDT05GSUdfSVJRX1BFUl9DUFU9eQogIyBDT05GSUdfR0VORVJJQ19HUElPIGlzIG5vdCBzZXQKIENPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQpAQCAtMjcsNyArMjgsOSBAQAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQorQ09ORklHX0FSQ0hfSEFTX0NQVV9JRExFX1dBSVQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKQEAgLTM3LDYgKzQwLDEyIEBACiBDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiBDT05GSUdfTE9DQUxWRVJTSU9OPSIiCiBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX0hBVkVfS0VSTkVMX0daSVA9eQorQ09ORklHX0hBVkVfS0VSTkVMX0JaSVAyPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9MWk1BPXkKK0NPTkZJR19LRVJORUxfR1pJUD15CisjIENPTkZJR19LRVJORUxfQlpJUDIgaXMgbm90IHNldAorIyBDT05GSUdfS0VSTkVMX0xaTUEgaXMgbm90IHNldAogQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKQEAgLTQ5LDExICs1OCwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiAjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CkBAIC04NywxOCArOTcsMTkgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAorIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKICMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKQEAgLTEwNyw2ICsxMTgsMTAgQEAKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKIENPTkZJR19IQVZFX0NMSz15CiBDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKICMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CiBDT05GSUdfU0xBQklORk89eQpAQCAtMTE4LDcgKzEzMyw3IEBACiAjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAogQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CitDT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCkBAIC0xNjUsNiArMTgwLDcgQEAKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINF8yMDIgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTcgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc3MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODAgaXMgbm90IHNldApAQCAtMjEwLDYgKzIyNiw3IEBACiBDT05GSUdfTlJfUVVJQ0s9MgogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiAKICMKQEAgLTI5NSw3ICszMTIsOCBAQAogQ09ORklHX0JPT1RfTElOS19PRkZTRVQ9MHgwMDgwMDAwMAogQ09ORklHX0VOVFJZX09GRlNFVD0weDAwMDAxMDAwCiAjIENPTkZJR19VQkNfV0FLRVVQIGlzIG5vdCBzZXQKLUNPTkZJR19DTURMSU5FX0JPT0w9eQorQ09ORklHX0NNRExJTkVfT1ZFUldSSVRFPXkKKyMgQ09ORklHX0NNRExJTkVfRVhURU5EIGlzIG5vdCBzZXQKIENPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eVNDMSwzODQwMCIKIAogIwpAQCAtMzgyLDYgKzQwMCw3IEBACiAjIENPTkZJR19JUF9ORl9BUlBUQUJMRVMgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtNDExLDYgKzQzMCw3IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKQEAgLTQxOCw3ICs0MzgsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC00MzYsOSArNDU1LDkgQEAKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldApAQCAtNTc0LDEwICs1OTMsNyBAQAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15CiBDT05GSUdfTkVUREVWXzEwMDAwPXkKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTYzMiwxMCArNjQ4LDIwIEBACiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TUEkgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKIENPTkZJR19IV01PTj15CiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgTmF0aXZlIGRyaXZlcnMKKyMKICMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0Y3MTg4MkZHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0CkBAIC02NDYsOSArNjcyLDcgQEAKICMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogQ09ORklHX1dBVENIRE9HPXkKICMgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUIGlzIG5vdCBzZXQKIApAQCAtNzM0LDggKzc1OCwxMCBAQAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtODA2LDcgKzgzMiw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogIyBDT05GSUdfTkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX05GU0QgaXMgbm90IHNldApAQCAtODMzLDYgKzg1OCw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC04NDIsOCArODY4LDExIEBACiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVD15CiBDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CitDT05GSUdfSEFWRV9TWVNDQUxMX1RSQUNFUE9JTlRTPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldApAQCAtODUxLDYgKzg4MCw3IEBACiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfU0hfU1RBTkRBUkRfQklPUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfRFdBUkZfVU5XSU5ERVIgaXMgbm90IHNldAogCiAjCiAjIFNlY3VyaXR5IG9wdGlvbnMKQEAgLTg2NCw3ICs4OTQsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldApAQCAtODk2LDExICs5MjUsMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApAQCAtOTY1LDUgKzk5Niw2IEBACiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19IQVZFX0xNQj15CiBDT05GSUdfTkxBVFRSPXkKIENPTkZJR19HRU5FUklDX0FUT01JQzY0PXkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9zZTc3ODBfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL3NlNzc4MF9kZWZjb25maWcKaW5kZXggNzU2YmVlYy4uODJiYWVlZiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL3NlNzc4MF9kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL3NlNzc4MF9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzAKLSMgVGh1IEp1biAxOCAxMzowMzo1NiAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEKKyMgVGh1IFNlcCAyNCAxOTowMzo1OSAyMDA5CiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0xNCw2ICsxNCw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CitDT05GSUdfSVJRX1BFUl9DUFU9eQogIyBDT05GSUdfR0VORVJJQ19HUElPIGlzIG5vdCBzZXQKIENPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQpAQCAtMjgsNyArMjksOSBAQAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQorQ09ORklHX0FSQ0hfSEFTX0NQVV9JRExFX1dBSVQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKQEAgLTM4LDYgKzQxLDEyIEBACiBDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiBDT05GSUdfTE9DQUxWRVJTSU9OPSIiCiBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX0hBVkVfS0VSTkVMX0daSVA9eQorQ09ORklHX0hBVkVfS0VSTkVMX0JaSVAyPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9MWk1BPXkKK0NPTkZJR19LRVJORUxfR1pJUD15CisjIENPTkZJR19LRVJORUxfQlpJUDIgaXMgbm90IHNldAorIyBDT05GSUdfS0VSTkVMX0xaTUEgaXMgbm90IHNldAogIyBDT05GSUdfU1dBUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfU1lTVklQQ19TWVNDVEw9eQpAQCAtNDgsMTEgKzU3LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CkBAIC04MSwxOSArOTEsMjAgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAorIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKQEAgLTEwMSw2ICsxMTIsMTEgQEAKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKIENPTkZJR19IQVZFX0NMSz15CiBDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKKyMgQ09ORklHX0dDT1ZfS0VSTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CiBDT05GSUdfU0xBQklORk89eQpAQCAtMTEyLDcgKzEyOCw4IEBACiAjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAogQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CitDT05GSUdfTEJEQUY9eQorQ09ORklHX0JMS19ERVZfQlNHPXkKICMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIAogIwpAQCAtMTU5LDYgKzE3Niw3IEBACiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDRfMjAyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjQgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzU3IGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzAgaXMgbm90IHNldAogQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MD15CkBAIC0xOTksNyArMjE3LDYgQEAKIENPTkZJR19TUEFSU0VNRU09eQogQ09ORklHX0hBVkVfTUVNT1JZX1BSRVNFTlQ9eQogQ09ORklHX1NQQVJTRU1FTV9TVEFUSUM9eQotQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAogQ09ORklHX01JR1JBVElPTj15CiAjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CkBAIC0yMDcsNiArMjI0LDcgQEAKIENPTkZJR19OUl9RVUlDSz0yCiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIAogIwpAQCAtMjg3LDggKzMwNSw5IEBACiBDT05GSUdfWkVST19QQUdFX09GRlNFVD0weDAwMDAxMDAwCiBDT05GSUdfQk9PVF9MSU5LX09GRlNFVD0weDAwODEwMDAwCiBDT05GSUdfRU5UUllfT0ZGU0VUPTB4MDAwMDEwMDAKLUNPTkZJR19DTURMSU5FX0JPT0w9eQotQ09ORklHX0NNRExJTkU9ImNvbnNvbGU9dHR5U0MwLjExNTIwMCByb290PS9kZXYvc2RhMSIKK0NPTkZJR19DTURMSU5FX09WRVJXUklURT15CisjIENPTkZJR19DTURMSU5FX0VYVEVORCBpcyBub3Qgc2V0CitDT05GSUdfQ01ETElORT0iY29uc29sZT10dHlTQzAsMTE1MjAwIHJvb3Q9L2Rldi9zZGExIgogCiAjCiAjIEJ1cyBvcHRpb25zCkBAIC0zODIsNiArNDAxLDcgQEAKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWSBpcyBub3Qgc2V0CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldApAQCAtMzg5LDcgKzQwOSw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogCkBAIC00MDYsOSArNDI1LDkgQEAKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldApAQCAtNTQ5LDYgKzU2OCw3IEBACiAjIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQVNfQVRUUlMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJX0xPV0xFVkVMPXkKQEAgLTU4NywxMSArNjA3LDEzIEBACiAjIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9QTUNSQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKIENPTkZJR19BVEE9eQogIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19BVEFfVkVSQk9TRV9FUlJPUj15CiBDT05GSUdfU0FUQV9QTVA9eQogIyBDT05GSUdfU0FUQV9BSENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBVEFfU0lMMjQgaXMgbm90IHNldApAQCAtNjEyLDYgKzYzNCw3IEBACiAjIENPTkZJR19QQVRBX0FMSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FNRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FSVE9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQVRQODY3WCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FUSUlYUCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0NNRDY0WCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0NTNTUyMCBpcyBub3Qgc2V0CkBAIC02MzAsNiArNjUzLDcgQEAKICMgQ09ORklHX1BBVEFfTlM4NzQxMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX05TODc0MTUgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9QRENfT0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUkRDIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUloxMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0MxMjAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0VSVkVSV09SS1MgaXMgbm90IHNldApAQCAtNjQ4LDggKzY3MiwxMyBAQAogIwogCiAjCi0jIEEgbmV3IGFsdGVybmF0aXZlIEZpcmVXaXJlIHN0YWNrIGlzIGF2YWlsYWJsZSB3aXRoIEVYUEVSSU1FTlRBTD15CisjIFlvdSBjYW4gZW5hYmxlIG9uZSBvciBib3RoIEZpcmVXaXJlIGRyaXZlciBzdGFja3MuCiAjCisKKyMKKyMgU2VlIHRoZSBoZWxwIHRleHRzIGZvciBtb3JlIGluZm9ybWF0aW9uLgorIworIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAogIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAogIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKQEAgLTcyNCwxMCArNzUzLDcgQEAKICMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC04MjEsMTAgKzg0NywxOSBAQAogQ09ORklHX0RFVlBPUlQ9eQogIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisKKyMKKyMgUFBTIHN1cHBvcnQKKyMKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiBDT05GSUdfSFdNT049eQogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIE5hdGl2ZSBkcml2ZXJzCisjCiAjIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfU0lTNTU5NSBpcyBub3Qgc2V0CkBAIC04MzMsNyArODY4LDYgQEAKICMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiBDT05GSUdfVEhFUk1BTD15CiAjIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKQEAgLTg1Nyw2ICs4OTEsNyBAQAogIwogIyBHcmFwaGljcyBzdXBwb3J0CiAjCitDT05GSUdfVkdBX0FSQj15CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldApAQCAtOTM3LDExICs5NzIsMTEgQEAKIENPTkZJR19MT0dPX1NVUEVSSF9DTFVUMjI0PXkKIENPTkZJR19TT1VORD15CiBDT05GSUdfU09VTkRfT1NTX0NPUkU9eQorQ09ORklHX1NPVU5EX09TU19DT1JFX1BSRUNMQUlNPXkKICMgQ09ORklHX1NORCBpcyBub3Qgc2V0CiBDT05GSUdfU09VTkRfUFJJTUU9eQogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CiAKICMKQEAgLTk2NCw2ICs5OTksNyBAQAogQ09ORklHX0hJRF9FWktFWT15CiAjIENPTkZJR19ISURfS1lFIGlzIG5vdCBzZXQKIENPTkZJR19ISURfR1lSQVRJT049eQorIyBDT05GSUdfSElEX1RXSU5IQU4gaXMgbm90IHNldAogIyBDT05GSUdfSElEX0tFTlNJTkdUT04gaXMgbm90IHNldAogQ09ORklHX0hJRF9MT0dJVEVDSD15CiAjIENPTkZJR19MT0dJVEVDSF9GRiBpcyBub3Qgc2V0CkBAIC0xMDA5LDYgKzEwNDUsNyBAQAogIyBDT05GSUdfVVNCX0VIQ0lfUk9PVF9IVUJfVFQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0Q9eQogIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9ERVNDIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fTU1JTyBpcyBub3Qgc2V0CkBAIC0xMjQzLDYgKzEyODAsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19GUz15CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTEyNTMsOCArMTI5MSwxMSBAQAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUPXkKIENPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKK0NPTkZJR19IQVZFX1NZU0NBTExfVFJBQ0VQT0lOVFM9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiAjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfRFlOQU1JQ19ERUJVRyBpcyBub3Qgc2V0CkBAIC0xMjYzLDYgKzEzMDQsNyBAQAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MgaXMgbm90IHNldAogIyBDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RXQVJGX1VOV0lOREVSIGlzIG5vdCBzZXQKIAogIwogIyBTZWN1cml0eSBvcHRpb25zCkBAIC0xMjc2LDcgKzEzMTgsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0CkBAIC0xMzA5LDYgKzEzNTAsNyBAQAogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApAQCAtMTM3MSw1ICsxNDEzLDYgQEAKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQorQ09ORklHX0hBVkVfTE1CPXkKIENPTkZJR19OTEFUVFI9eQogQ09ORklHX0dFTkVSSUNfQVRPTUlDNjQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL3NoMDNfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL3NoMDNfZGVmY29uZmlnCmluZGV4IDdmZWRhYWUuLmRkMGU4OTAgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9zaDAzX2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3Mvc2gwM19kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzAKLSMgVGh1IEp1biAxOCAxMzowNDo0MSAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEKKyMgVGh1IFNlcCAyNCAxOTowNzoxNCAyMDA5CiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0xNCw2ICsxNCw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CitDT05GSUdfSVJRX1BFUl9DUFU9eQogIyBDT05GSUdfR0VORVJJQ19HUElPIGlzIG5vdCBzZXQKIENPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQpAQCAtMjksNyArMzAsOSBAQAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQorQ09ORklHX0FSQ0hfSEFTX0NQVV9JRExFX1dBSVQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKQEAgLTQwLDYgKzQzLDEyIEBACiBDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiBDT05GSUdfTE9DQUxWRVJTSU9OPSIiCiBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX0hBVkVfS0VSTkVMX0daSVA9eQorQ09ORklHX0hBVkVfS0VSTkVMX0JaSVAyPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9MWk1BPXkKK0NPTkZJR19LRVJORUxfR1pJUD15CisjIENPTkZJR19LRVJORUxfQlpJUDIgaXMgbm90IHNldAorIyBDT05GSUdfS0VSTkVMX0xaTUEgaXMgbm90IHNldAogQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKQEAgLTUzLDExICs2MiwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiAjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CkBAIC05MSwyMCArMTAxLDIyIEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKK0NPTkZJR19QRVJGX0VWRU5UUz15CitDT05GSUdfRVZFTlRfUFJPRklMRT15CisjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogQ09ORklHX1BST0ZJTElORz15CiBDT05GSUdfVFJBQ0VQT0lOVFM9eQotQ09ORklHX01BUktFUlM9eQogQ09ORklHX09QUk9GSUxFPW0KIENPTkZJR19IQVZFX09QUk9GSUxFPXkKICMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldApAQCAtMTE0LDYgKzEyNiwxMSBAQAogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQogQ09ORklHX0hBVkVfQ0xLPXkKIENPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIworIyBDT05GSUdfR0NPVl9LRVJORUwgaXMgbm90IHNldAogIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKIENPTkZJR19TTEFCSU5GTz15CkBAIC0xMjYsNyArMTQzLDcgQEAKIENPTkZJR19NT0RWRVJTSU9OUz15CiAjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAogQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CitDT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCkBAIC0xNzMsNiArMTkwLDcgQEAKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINF8yMDIgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTcgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc3MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODAgaXMgbm90IHNldApAQCAtMjE4LDYgKzIzNiw3IEBACiBDT05GSUdfTlJfUVVJQ0s9MgogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiAKICMKQEAgLTMwMiw3ICszMjEsOCBAQAogQ09ORklHX0JPT1RfTElOS19PRkZTRVQ9MHgwMDgwMDAwMAogQ09ORklHX0VOVFJZX09GRlNFVD0weDAwMDAxMDAwCiAjIENPTkZJR19VQkNfV0FLRVVQIGlzIG5vdCBzZXQKLUNPTkZJR19DTURMSU5FX0JPT0w9eQorQ09ORklHX0NNRExJTkVfT1ZFUldSSVRFPXkKKyMgQ09ORklHX0NNRExJTkVfRVhURU5EIGlzIG5vdCBzZXQKIENPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eVNDMSwxMTUyMDAgbWVtPTY0TSByb290PS9kZXYvbmZzIgogCiAjCkBAIC0zODIsNiArNDAyLDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC00MTIsNiArNDMzLDcgQEAKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWSBpcyBub3Qgc2V0CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldApAQCAtNDE5LDcgKzQ0MSw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTQzMiw2ICs0NTMsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1RBTkRBTE9ORSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CkBAIC01OTEsNiArNjEzLDcgQEAKICMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1BNQ1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldApAQCAtNjAzLDcgKzYyNiwxMSBAQAogIwogCiAjCi0jIEVuYWJsZSBvbmx5IG9uZSBvZiB0aGUgdHdvIHN0YWNrcywgdW5sZXNzIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZworIyBZb3UgY2FuIGVuYWJsZSBvbmUgb3IgYm90aCBGaXJlV2lyZSBkcml2ZXIgc3RhY2tzLgorIworCisjCisjIFNlZSB0aGUgaGVscCB0ZXh0cyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KICMKICMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKQEAgLTY3OSw2ICs3MDYsNyBAQAogIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NOSUMgaXMgbm90IHNldAogIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDFFIGlzIG5vdCBzZXQKQEAgLTcwNCwxMCArNzMyLDcgQEAKICMgQ09ORklHX1NGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRTJORVQgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtODA0LDEwICs4MjksMjAgQEAKIENPTkZJR19ERVZQT1JUPXkKICMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TUEkgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKIENPTkZJR19IV01PTj15CiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgTmF0aXZlIGRyaXZlcnMKKyMKICMgQ09ORklHX1NFTlNPUlNfSTVLX0FNQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19GNzE4ODJGRyBpcyBub3Qgc2V0CkBAIC04MjIsOSArODU3LDcgQEAKICMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogQ09ORklHX1dBVENIRE9HPXkKICMgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUIGlzIG5vdCBzZXQKIApAQCAtODYxLDYgKzg5NCw3IEBACiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKK0NPTkZJR19WR0FfQVJCPXkKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiAjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CkBAIC04NzksNyArOTEzLDYgQEAKICMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKIENPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAogIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0CiAKQEAgLTk0NCw4ICs5NzcsMTAgQEAKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfRlNfUE9TSVhfQUNMPXkKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC0xMDExLDEyICsxMDQ2LDEyIEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKICMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAogQ09ORklHX05GU19WND15CisjIENPTkZJR19ORlNfVjRfMSBpcyBub3Qgc2V0CiBDT05GSUdfUk9PVF9ORlM9eQogQ09ORklHX05GU0Q9eQogQ09ORklHX05GU0RfVjM9eQpAQCAtMTEwOCw2ICsxMTQzLDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfRlM9eQogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xMTE5LDExICsxMTU1LDE1IEBACiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19OT1BfVFJBQ0VSPXkKIENPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VfTUNPVU5UX1RFU1Q9eQogQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQorQ09ORklHX0hBVkVfU1lTQ0FMTF9UUkFDRVBPSU5UUz15CiBDT05GSUdfUklOR19CVUZGRVI9eQogQ09ORklHX0VWRU5UX1RSQUNJTkc9eQogQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUj15CitDT05GSUdfUklOR19CVUZGRVJfQUxMT1dfU1dBUD15CiBDT05GSUdfVFJBQ0lORz15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKICMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CkBAIC0xMTM0LDYgKzExNzQsNyBAQAogQ09ORklHX1NIX1NUQU5EQVJEX0JJT1M9eQogIyBDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFIGlzIG5vdCBzZXQKICMgQ09ORklHX0VBUkxZX1BSSU5USyBpcyBub3Qgc2V0CisjIENPTkZJR19EV0FSRl9VTldJTkRFUiBpcyBub3Qgc2V0CiAKICMKICMgU2VjdXJpdHkgb3B0aW9ucwpAQCAtMTE0Nyw3ICsxMTg4LDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0FMR0FQST15CiBDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQogQ09ORklHX0NSWVBUT19BRUFEMj15CkBAIC0xMTg5LDExICsxMjI5LDEzIEBACiAjCiBDT05GSUdfQ1JZUFRPX0hNQUM9eQogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX01ENT15CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApAQCAtMTI1OSw1ICsxMzAxLDYgQEAKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQorQ09ORklHX0hBVkVfTE1CPXkKIENPTkZJR19OTEFUVFI9eQogQ09ORklHX0dFTkVSSUNfQVRPTUlDNjQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL3NoNzcxMHZvaXBnd19kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3Mvc2g3NzEwdm9pcGd3X2RlZmNvbmZpZwppbmRleCBjMjk2Y2E1Li42NjIxNTZlIDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3Mvc2g3NzEwdm9pcGd3X2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3Mvc2g3NzEwdm9pcGd3X2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMAotIyBUaHUgSnVuIDE4IDEzOjA2OjEzIDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMQorIyBUaHUgU2VwIDI0IDE5OjExOjQ5IDIwMDkKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTE0LDYgKzE0LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19JUlFfUEVSX0NQVT15CiAjIENPTkZJR19HRU5FUklDX0dQSU8gaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CkBAIC0yNyw3ICsyOCw5IEBACiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQogQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15CitDT05GSUdfQVJDSF9IQVNfQ1BVX0lETEVfV0FJVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtMzcsNiArNDAsMTIgQEAKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIENPTkZJR19MT0NBTFZFUlNJT049IiIKIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfSEFWRV9LRVJORUxfR1pJUD15CitDT05GSUdfSEFWRV9LRVJORUxfQlpJUDI9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTUE9eQorQ09ORklHX0tFUk5FTF9HWklQPXkKKyMgQ09ORklHX0tFUk5FTF9CWklQMiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVJORUxfTFpNQSBpcyBub3Qgc2V0CiAjIENPTkZJR19TV0FQIGlzIG5vdCBzZXQKIENPTkZJR19TWVNWSVBDPXkKIENPTkZJR19TWVNWSVBDX1NZU0NUTD15CkBAIC00OSwxMSArNTgsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0dST1VQX1NDSEVEPXkKQEAgLTg3LDE4ICs5NywxOSBAQAogQ09ORklHX0VWRU5URkQ9eQogIyBDT05GSUdfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0FJTz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiAjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CkBAIC0xMDcsNiArMTE4LDExIEBACiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CiBDT05GSUdfSEFWRV9DTEs9eQogQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCisjIENPTkZJR19HQ09WX0tFUk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAogQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQogQ09ORklHX1NMQUJJTkZPPXkKQEAgLTExOCw3ICsxMzQsNyBAQAogIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKIENPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAorQ09ORklHX0xCREFGPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIApAQCAtMTY1LDYgKzE4MSw3IEBACiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDRfMjAyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjQgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzU3IGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwIGlzIG5vdCBzZXQKQEAgLTIxMCw2ICsyMjcsNyBAQAogQ09ORklHX05SX1FVSUNLPTIKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogCiAjCkBAIC0yOTIsNyArMzEwLDggQEAKIENPTkZJR19aRVJPX1BBR0VfT0ZGU0VUPTB4MDAwMDEwMDAKIENPTkZJR19CT09UX0xJTktfT0ZGU0VUPTB4MDA4MDAwMDAKIENPTkZJR19FTlRSWV9PRkZTRVQ9MHgwMDAwMTAwMAotIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NNRExJTkVfT1ZFUldSSVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NNRExJTkVfRVhURU5EIGlzIG5vdCBzZXQKIAogIwogIyBCdXMgb3B0aW9ucwpAQCAtMzc0LDYgKzM5Myw3IEBACiAjIENPTkZJR19JUF9ORl9BUlBUQUJMRVMgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtNDQwLDYgKzQ2MCw3IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKQEAgLTQ0Nyw3ICs0NjgsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC00NjksOSArNDg5LDkgQEAKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldApAQCAtNjA1LDEwICs2MjUsNyBAQAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15CiBDT05GSUdfTkVUREVWXzEwMDAwPXkKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTY4Niw2ICs3MDMsMTEgQEAKICMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAogIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisKKyMKKyMgUFBTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldApAQCAtNzIzLDcgKzc0NSw2IEBACiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAogCkBAIC03NzUsOCArNzk2LDEwIEBACiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiAjIENPTkZJR19ETk9USUZZIGlzIG5vdCBzZXQKQEAgLTgxMyw4ICs4MzYsNiBAQAogQ09ORklHX1BST0NfU1lTQ1RMPXkKIENPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CiBDT05GSUdfU1lTRlM9eQotQ09ORklHX1RNUEZTPXkKLSMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCRlMgaXMgbm90IHNldAogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKQEAgLTg0Nyw3ICs4NjgsNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKICMgQ09ORklHX05GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKQEAgLTg3NCw2ICs4OTQsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19GUz15CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTg4Myw4ICs5MDQsMTEgQEAKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUPXkKIENPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKK0NPTkZJR19IQVZFX1NZU0NBTExfVFJBQ0VQT0lOVFM9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiAjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfRFlOQU1JQ19ERUJVRyBpcyBub3Qgc2V0CkBAIC04OTMsNiArOTE3LDcgQEAKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19TSF9TVEFOREFSRF9CSU9TIGlzIG5vdCBzZXQKICMgQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19EV0FSRl9VTldJTkRFUiBpcyBub3Qgc2V0CiAKICMKICMgU2VjdXJpdHkgb3B0aW9ucwpAQCAtOTA2LDcgKzkzMSw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CkBAIC05MzgsMTEgKzk2MiwxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CkBAIC0xMDA2LDUgKzEwMzIsNiBAQAogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15CitDT05GSUdfSEFWRV9MTUI9eQogQ09ORklHX05MQVRUUj15CiBDT05GSUdfR0VORVJJQ19BVE9NSUM2ND15CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3Mvc2g3NzI0X2dlbmVyaWNfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL3NoNzcyNF9nZW5lcmljX2RlZmNvbmZpZwppbmRleCBiYTI2YmUxLi5lMDY3MTlhIDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3Mvc2g3NzI0X2dlbmVyaWNfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9zaDc3MjRfZ2VuZXJpY19kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzAKLSMgVGh1IEp1biAxOCAxMzowNjo0OCAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEKKyMgVGh1IFNlcCAyNCAxOToxNDowMCAyMDA5CiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0xNCw2ICsxNCw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CitDT05GSUdfSVJRX1BFUl9DUFU9eQogIyBDT05GSUdfR0VORVJJQ19HUElPIGlzIG5vdCBzZXQKIENPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQpAQCAtMjgsNyArMjksOSBAQAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQorQ09ORklHX0FSQ0hfSEFTX0NQVV9JRExFX1dBSVQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKQEAgLTM4LDYgKzQxLDEyIEBACiBDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiBDT05GSUdfTE9DQUxWRVJTSU9OPSIiCiAjIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9LRVJORUxfR1pJUD15CitDT05GSUdfSEFWRV9LRVJORUxfQlpJUDI9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTUE9eQorQ09ORklHX0tFUk5FTF9HWklQPXkKKyMgQ09ORklHX0tFUk5FTF9CWklQMiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVJORUxfTFpNQSBpcyBub3Qgc2V0CiBDT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfU1lTVklQQ19TWVNDVEw9eQpAQCAtNDYsMTQgKzU1LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLSMgQ09ORklHX0NMQVNTSUNfUkNVIGlzIG5vdCBzZXQKIENPTkZJR19UUkVFX1JDVT15Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfUkNVX0ZBTk9VVD0zMgogIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNwogQ09ORklHX0dST1VQX1NDSEVEPXkKQEAgLTkyLDE5ICs5OSwyMSBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCitDT05GSUdfUEVSRl9FVkVOVFM9eQorQ09ORklHX0VWRU5UX1BST0ZJTEU9eQorIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfQ09NUEFUX0JSSyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogQ09ORklHX1BST0ZJTElORz15CiBDT05GSUdfVFJBQ0VQT0lOVFM9eQotQ09ORklHX01BUktFUlM9eQogQ09ORklHX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CkBAIC0xMTMsMTMgKzEyMiwxOCBAQAogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQogQ09ORklHX0hBVkVfQ0xLPXkKIENPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIworIyBDT05GSUdfR0NPVl9LRVJORUwgaXMgbm90IHNldAogIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKIENPTkZJR19SVF9NVVRFWEVTPXkKIENPTkZJR19CQVNFX1NNQUxMPTAKICMgQ09ORklHX01PRFVMRVMgaXMgbm90IHNldAogQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CitDT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCkBAIC0xNjksNiArMTgzLDcgQEAKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINF8yMDIgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIzIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjQ9eQorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzU3IGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwIGlzIG5vdCBzZXQKQEAgLTIxNCw3ICsyMjksNiBAQAogIwogIyBNZW1vcnkgaG90cGx1ZyBpcyBjdXJyZW50bHkgaW5jb21wYXRpYmxlIHdpdGggU29mdHdhcmUgU3VzcGVuZAogIwotQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAogQ09ORklHX01JR1JBVElPTj15CiAjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CkBAIC0yMjIsNiArMjM2LDcgQEAKIENPTkZJR19OUl9RVUlDSz0yCiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIAogIwpAQCAtMjQ2LDYgKzI2MSw4IEBACiAjIEJvYXJkIHN1cHBvcnQKICMKICMgQ09ORklHX1NIXzc3MjRfU09MVVRJT05fRU5HSU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NIX0tGUjJSMDkgaXMgbm90IHNldAorIyBDT05GSUdfU0hfRUNPVkVDIGlzIG5vdCBzZXQKIAogIwogIyBUaW1lciBhbmQgY2xvY2sgY29uZmlndXJhdGlvbgpAQCAtMzE4LDcgKzMzNSw4IEBACiBDT05GSUdfWkVST19QQUdFX09GRlNFVD0weDAwMDAxMDAwCiBDT05GSUdfQk9PVF9MSU5LX09GRlNFVD0weDAwODAwMDAwCiBDT05GSUdfRU5UUllfT0ZGU0VUPTB4MDAwMDEwMDAKLSMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CisjIENPTkZJR19DTURMSU5FX09WRVJXUklURSBpcyBub3Qgc2V0CisjIENPTkZJR19DTURMSU5FX0VYVEVORCBpcyBub3Qgc2V0CiAKICMKICMgQnVzIG9wdGlvbnMKQEAgLTM0NSw2ICszNjMsNyBAQAogQ09ORklHX0hJQkVSTkFUSU9OX05WUz15CiBDT05GSUdfSElCRVJOQVRJT049eQogQ09ORklHX1BNX1NURF9QQVJUSVRJT049IiIKK0NPTkZJR19QTV9SVU5USU1FPXkKIENPTkZJR19DUFVfSURMRT15CiBDT05GSUdfQ1BVX0lETEVfR09WX0xBRERFUj15CiBDT05GSUdfQ1BVX0lETEVfR09WX01FTlU9eQpAQCAtNDI3LDYgKzQ0Niw3IEBACiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogQ09ORklHX0kyQ19DSEFSREVWPXkKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogCkBAIC00MzcsNiArNDU3LDcgQEAKICMKICMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCiAjCisjIENPTkZJR19JMkNfREVTSUdOV0FSRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKIENPTkZJR19JMkNfU0hfTU9CSUxFPXkKICMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldApAQCAtNDU2LDIwICs0NzcsMjEgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisKKyMKKyMgUFBTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19TU0JfUE9TU0lCTEU9eQogCkBAIC00ODgsOCArNTEwLDEwIEBACiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKIApAQCAtNTQwLDYgKzU2NCw3IEBACiAjIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9SWDg1ODEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SWDgwMjUgaXMgbm90IHNldAogCiAjCiAjIFNQSSBSVEMgZHJpdmVycwpAQCAtNTg3LDcgKzYxMiw5IEBACiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiAjIENPTkZJR19ETk9USUZZIGlzIG5vdCBzZXQKQEAgLTY0Miw2ICs2NjksNyBAQAogIyBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0ZTPXkKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtNjU0LDExICs2ODIsMTUgQEAKICMgQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19OT1BfVFJBQ0VSPXkKIENPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VfTUNPVU5UX1RFU1Q9eQogQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQorQ09ORklHX0hBVkVfU1lTQ0FMTF9UUkFDRVBPSU5UUz15CiBDT05GSUdfUklOR19CVUZGRVI9eQogQ09ORklHX0VWRU5UX1RSQUNJTkc9eQogQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUj15CitDT05GSUdfUklOR19CVUZGRVJfQUxMT1dfU1dBUD15CiBDT05GSUdfVFJBQ0lORz15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKICMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CkBAIC02NjgsNiArNzAwLDcgQEAKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19TSF9TVEFOREFSRF9CSU9TIGlzIG5vdCBzZXQKICMgQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19EV0FSRl9VTldJTkRFUiBpcyBub3Qgc2V0CiAKICMKICMgU2VjdXJpdHkgb3B0aW9ucwpAQCAtNjkyLDQgKzcyNSw1IEBACiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19IQVZFX0xNQj15CiBDT05GSUdfR0VORVJJQ19BVE9NSUM2ND15CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3Mvc2g3NzYzcmRwX2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9zaDc3NjNyZHBfZGVmY29uZmlnCmluZGV4IGIxZDliMjMuLjE5NGZmNzAgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9zaDc3NjNyZHBfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9zaDc3NjNyZHBfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMwCi0jIFRodSBKdW4gMTggMTM6MDc6MTUgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxCisjIFRodSBTZXAgMjQgMTk6MTU6MzcgMjAwOQogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtMTQsNiArMTQsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiBDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQorQ09ORklHX0lSUV9QRVJfQ1BVPXkKICMgQ09ORklHX0dFTkVSSUNfR1BJTyBpcyBub3Qgc2V0CiBDT05GSUdfR0VORVJJQ19USU1FPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKQEAgLTI3LDcgKzI4LDkgQEAKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CiBDT05GSUdfQVJDSF9IQVNfREVGQVVMVF9JRExFPXkKK0NPTkZJR19BUkNIX0hBU19DUFVfSURMRV9XQUlUPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCitDT05GSUdfQ09OU1RSVUNUT1JTPXkKIAogIwogIyBHZW5lcmFsIHNldHVwCkBAIC0zNyw2ICs0MCwxMiBAQAogQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgogQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgogQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9HWklQPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9CWklQMj15CitDT05GSUdfSEFWRV9LRVJORUxfTFpNQT15CitDT05GSUdfS0VSTkVMX0daSVA9eQorIyBDT05GSUdfS0VSTkVMX0JaSVAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFUk5FTF9MWk1BIGlzIG5vdCBzZXQKIENPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKIENPTkZJR19TWVNWSVBDX1NZU0NUTD15CkBAIC00OCwxMSArNTcsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKQEAgLTkyLDE5ICsxMDIsMjEgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworQ09ORklHX1BFUkZfRVZFTlRTPXkKK0NPTkZJR19FVkVOVF9QUk9GSUxFPXkKKyMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiBDT05GSUdfUFJPRklMSU5HPXkKIENPTkZJR19UUkFDRVBPSU5UUz15Ci1DT05GSUdfTUFSS0VSUz15CiBDT05GSUdfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CkBAIC0xMTQsNiArMTI2LDExIEBACiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CiBDT05GSUdfSEFWRV9DTEs9eQogQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCisjIENPTkZJR19HQ09WX0tFUk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAogQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQogQ09ORklHX1NMQUJJTkZPPXkKQEAgLTEyNSw3ICsxNDIsNyBAQAogIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKIENPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAorQ09ORklHX0xCREFGPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIApAQCAtMTczLDYgKzE5MCw3IEBACiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDRfMjAyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjQgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzU3IGlzIG5vdCBzZXQKIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjM9eQogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCBpcyBub3Qgc2V0CkBAIC0yMTQsNyArMjMyLDYgQEAKIENPTkZJR19IQVZFX01FTU9SWV9QUkVTRU5UPXkKIENPTkZJR19TUEFSU0VNRU1fU1RBVElDPXkKICMgQ09ORklHX01FTU9SWV9IT1RQTFVHIGlzIG5vdCBzZXQKLUNPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKIENPTkZJR19NSUdSQVRJT049eQogIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldApAQCAtMjIyLDYgKzIzOSw3IEBACiBDT05GSUdfTlJfUVVJQ0s9MgogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiAKICMKQEAgLTMwMyw3ICszMjEsOCBAQAogQ09ORklHX1pFUk9fUEFHRV9PRkZTRVQ9MHgwMDAwMTAwMAogQ09ORklHX0JPT1RfTElOS19PRkZTRVQ9MHgwMDgwMDAwMAogQ09ORklHX0VOVFJZX09GRlNFVD0weDAwMDAxMDAwCi1DT05GSUdfQ01ETElORV9CT09MPXkKK0NPTkZJR19DTURMSU5FX09WRVJXUklURT15CisjIENPTkZJR19DTURMSU5FX0VYVEVORCBpcyBub3Qgc2V0CiBDT05GSUdfQ01ETElORT0iY29uc29sZT10dHlTQzIsMTE1MjAwIHJvb3Q9L2Rldi9zZGExIHJvb3RkZWxheT0xMCIKIAogIwpAQCAtMzcxLDYgKzM5MCw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtNDAxLDYgKzQyMSw3IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTX0VYVD15CiBDT05GSUdfV0lSRUxFU1NfRVhUX1NZU0ZTPXkKQEAgLTQwOSw3ICs0MzAsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC00MjIsNiArNDQyLDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKIENPTkZJR19GV19MT0FERVI9eQpAQCAtNDMxLDkgKzQ1Miw5IEBACiAjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQogIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CkBAIC00ODgsNiArNTA5LDcgQEAKIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUz15CiBDT05GSUdfTVREX1BIWVNNQVA9eQogIyBDT05GSUdfTVREX1BIWVNNQVBfQ09NUEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9HUElPX0FERFIgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAogCiAjCkBAIC01NjUsNyArNTg3LDYgQEAKICMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJX0xPV0xFVkVMPXkKICMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0JOWDJfSVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfTElCRkMgaXMgbm90IHNldAogIyBDT05GSUdfTElCRkNPRSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKQEAgLTYyMSwxMCArNjQyLDcgQEAKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtNzE2LDExICs3MzQsMTUgQEAKICMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAogIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisKKyMKKyMgUFBTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19TU0JfUE9TU0lCTEU9eQogCkBAIC04MzAsNiArODUyLDcgQEAKICMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9PSENJX0hDRD15CiAjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX0RFU0MgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPIGlzIG5vdCBzZXQKQEAgLTg5OSw2ICs5MjIsNyBAQAogIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVlNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldApAQCAtOTIzLDYgKzk0Nyw4IEBACiAjIE1NQy9TRC9TRElPIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCiAjCiAjIENPTkZJR19NTUNfU0RIQ0kgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX0FUOTEgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX0FUTUVMTUNJIGlzIG5vdCBzZXQKICMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldApAQCAtOTU2LDggKzk4MiwxMCBAQAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GU19QT1NJWF9BQ0w9eQogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKQEAgLTEwMjIsNyArMTA1MCw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiAjIENPTkZJR19ORlNfVjMgaXMgbm90IHNldApAQCAtMTA5Niw2ICsxMTIzLDcgQEAKICMgQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19GUz15CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTExMDcsMTEgKzExMzUsMTUgQEAKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX05PUF9UUkFDRVI9eQogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVD15CiBDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CitDT05GSUdfSEFWRV9TWVNDQUxMX1RSQUNFUE9JTlRTPXkKIENPTkZJR19SSU5HX0JVRkZFUj15CiBDT05GSUdfRVZFTlRfVFJBQ0lORz15CiBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSPXkKK0NPTkZJR19SSU5HX0JVRkZFUl9BTExPV19TV0FQPXkKIENPTkZJR19UUkFDSU5HPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKQEAgLTExMjEsNiArMTE1Myw3IEBACiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfU0hfU1RBTkRBUkRfQklPUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfRFdBUkZfVU5XSU5ERVIgaXMgbm90IHNldAogCiAjCiAjIFNlY3VyaXR5IG9wdGlvbnMKQEAgLTExMzQsNyArMTE2Nyw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CkBAIC0xMTY2LDExICsxMTk4LDEzIEBACiAjCiAjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKQEAgLTEyMzIsNSArMTI2Niw2IEBACiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19IQVZFX0xNQj15CiBDT05GSUdfTkxBVFRSPXkKIENPTkZJR19HRU5FUklDX0FUT01JQzY0PXkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9zaDc3NzBfZ2VuZXJpY19kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3Mvc2g3NzcwX2dlbmVyaWNfZGVmY29uZmlnCmluZGV4IDQyNmE4OGYuLjM0YmVkNTUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9zaDc3NzBfZ2VuZXJpY19kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL3NoNzc3MF9nZW5lcmljX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMAotIyBUaHUgSnVuIDE4IDEzOjA4OjA1IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMQorIyBUaHUgU2VwIDI0IDE5OjE3OjE2IDIwMDkKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTE0LDYgKzE0LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19JUlFfUEVSX0NQVT15CiAjIENPTkZJR19HRU5FUklDX0dQSU8gaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CkBAIC0yNyw3ICsyOCw5IEBACiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQogQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15CitDT05GSUdfQVJDSF9IQVNfQ1BVX0lETEVfV0FJVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtMzcsNiArNDAsMTIgQEAKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIENPTkZJR19MT0NBTFZFUlNJT049IiIKICMgQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0tFUk5FTF9HWklQPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9CWklQMj15CitDT05GSUdfSEFWRV9LRVJORUxfTFpNQT15CitDT05GSUdfS0VSTkVMX0daSVA9eQorIyBDT05GSUdfS0VSTkVMX0JaSVAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFUk5FTF9MWk1BIGlzIG5vdCBzZXQKIENPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKIENPTkZJR19TWVNWSVBDX1NZU0NUTD15CkBAIC00NSwxNCArNTQsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotIyBDT05GSUdfQ0xBU1NJQ19SQ1UgaXMgbm90IHNldAogQ09ORklHX1RSRUVfUkNVPXkKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19SQ1VfRkFOT1VUPTMyCiAjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE3CiBDT05GSUdfR1JPVVBfU0NIRUQ9eQpAQCAtOTEsMTkgKzk4LDIxIEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKK0NPTkZJR19QRVJGX0VWRU5UUz15CitDT05GSUdfRVZFTlRfUFJPRklMRT15CisjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DT01QQVRfQlJLIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiBDT05GSUdfUFJPRklMSU5HPXkKIENPTkZJR19UUkFDRVBPSU5UUz15Ci1DT05GSUdfTUFSS0VSUz15CiBDT05GSUdfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKQEAgLTExMiwxMyArMTIxLDE4IEBACiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CiBDT05GSUdfSEFWRV9DTEs9eQogQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCisjIENPTkZJR19HQ09WX0tFUk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAogQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQogQ09ORklHX1JUX01VVEVYRVM9eQogQ09ORklHX0JBU0VfU01BTEw9MAogIyBDT05GSUdfTU9EVUxFUyBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKK0NPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKQEAgLTE2Niw2ICsxODAsNyBAQAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g0XzIwMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1NyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjMgaXMgbm90IHNldAogQ09ORklHX0NQVV9TVUJUWVBFX1NINzc3MD15CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODAgaXMgbm90IHNldApAQCAtMjEwLDcgKzIyNSw2IEBACiAjCiAjIE1lbW9yeSBob3RwbHVnIGlzIGN1cnJlbnRseSBpbmNvbXBhdGlibGUgd2l0aCBTb2Z0d2FyZSBTdXNwZW5kCiAjCi1DT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKIENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CiBDT05GSUdfTUlHUkFUSU9OPXkKICMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKQEAgLTIxOCw2ICsyMzIsNyBAQAogQ09ORklHX05SX1FVSUNLPTIKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogCiAjCkBAIC0zMTMsNyArMzI4LDggQEAKIENPTkZJR19aRVJPX1BBR0VfT0ZGU0VUPTB4MDAwMDEwMDAKIENPTkZJR19CT09UX0xJTktfT0ZGU0VUPTB4MDA4MDAwMDAKIENPTkZJR19FTlRSWV9PRkZTRVQ9MHgwMDAwMTAwMAotIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NNRExJTkVfT1ZFUldSSVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NNRExJTkVfRVhURU5EIGlzIG5vdCBzZXQKIAogIwogIyBCdXMgb3B0aW9ucwpAQCAtMzM4LDYgKzM1NCw3IEBACiBDT05GSUdfSElCRVJOQVRJT05fTlZTPXkKIENPTkZJR19ISUJFUk5BVElPTj15CiBDT05GSUdfUE1fU1REX1BBUlRJVElPTj0iIgorIyBDT05GSUdfUE1fUlVOVElNRSBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX0lETEU9eQogQ09ORklHX0NQVV9JRExFX0dPVl9MQURERVI9eQogQ09ORklHX0NQVV9JRExFX0dPVl9NRU5VPXkKQEAgLTQyMCw2ICs0MzcsNyBAQAogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15CiBDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIApAQCAtNDMwLDYgKzQ0OCw3IEBACiAjCiAjIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQogIworIyBDT05GSUdfSTJDX0RFU0lHTldBUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CiBDT05GSUdfSTJDX1NIX01PQklMRT15CiAjIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKQEAgLTQ0OSwyMCArNDY4LDIxIEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TUEkgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtNDgxLDggKzUwMSwxMCBAQAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CisjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0CiAKQEAgLTUzMyw2ICs1NTUsNyBAQAogIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfUlg4NTgxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlg4MDI1IGlzIG5vdCBzZXQKIAogIwogIyBTUEkgUlRDIGRyaXZlcnMKQEAgLTU4MCw3ICs2MDMsOSBAQAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogIyBDT05GSUdfRE5PVElGWSBpcyBub3Qgc2V0CkBAIC02MzUsNiArNjYwLDcgQEAKICMgQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19GUz15CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTY0NywxMSArNjczLDE1IEBACiAjIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfTk9QX1RSQUNFUj15CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUPXkKIENPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKK0NPTkZJR19IQVZFX1NZU0NBTExfVFJBQ0VQT0lOVFM9eQogQ09ORklHX1JJTkdfQlVGRkVSPXkKIENPTkZJR19FVkVOVF9UUkFDSU5HPXkKIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVI9eQorQ09ORklHX1JJTkdfQlVGRkVSX0FMTE9XX1NXQVA9eQogQ09ORklHX1RSQUNJTkc9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiAjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldApAQCAtNjYxLDYgKzY5MSw3IEBACiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfU0hfU1RBTkRBUkRfQklPUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfRFdBUkZfVU5XSU5ERVIgaXMgbm90IHNldAogCiAjCiAjIFNlY3VyaXR5IG9wdGlvbnMKQEAgLTY4NSw0ICs3MTYsNSBAQAogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15CitDT05GSUdfSEFWRV9MTUI9eQogQ09ORklHX0dFTkVSSUNfQVRPTUlDNjQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL3NoNzc4NWxjcl8zMmJpdF9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3Mvc2g3Nzg1bGNyXzMyYml0X2RlZmNvbmZpZwppbmRleCBlZDMxNmY2Li41MWNiYWVkIDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3Mvc2g3Nzg1bGNyXzMyYml0X2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3Mvc2g3Nzg1bGNyXzMyYml0X2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMAotIyBUaHUgSnVuIDE4IDEzOjA4OjI5IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMQorIyBGcmkgU2VwIDI1IDExOjM5OjIwIDIwMDkKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTE0LDYgKzE0LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19JUlFfUEVSX0NQVT15CiAjIENPTkZJR19HRU5FUklDX0dQSU8gaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CkBAIC0yOSw4ICszMCw5IEBACiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQogQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15Ci1DT05GSUdfSU9fVFJBUFBFRD15CitDT05GSUdfQVJDSF9IQVNfQ1BVX0lETEVfV0FJVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtNDEsMTAgKzQzLDE3IEBACiBDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiBDT05GSUdfTE9DQUxWRVJTSU9OPSIiCiBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX0hBVkVfS0VSTkVMX0daSVA9eQorQ09ORklHX0hBVkVfS0VSTkVMX0JaSVAyPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9MWk1BPXkKK0NPTkZJR19LRVJORUxfR1pJUD15CisjIENPTkZJR19LRVJORUxfQlpJUDIgaXMgbm90IHNldAorIyBDT05GSUdfS0VSTkVMX0xaTUEgaXMgbm90IHNldAogQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKLSMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CitDT05GSUdfUE9TSVhfTVFVRVVFPXkKK0NPTkZJR19QT1NJWF9NUVVFVUVfU1lTQ1RMPXkKIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUPXkKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1RfVjMgaXMgbm90IHNldAogIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKQEAgLTUzLDExICs2MiwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNApAQCAtNjcsOCArNzcsNyBAQAogQ09ORklHX1VTRVJfU0NIRUQ9eQogIyBDT05GSUdfQ0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKICMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQorIyBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMiBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKQEAgLTc5LDcgKzg4LDcgQEAKIENPTkZJR19VSUQxNj15CiBDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQogQ09ORklHX0tBTExTWU1TPXkKLSMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0CitDT05GSUdfS0FMTFNZTVNfQUxMPXkKICMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAogQ09ORklHX0hPVFBMVUc9eQogQ09ORklHX1BSSU5USz15CkBAIC05MywyOCArMTAyLDM3IEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKK0NPTkZJR19QRVJGX0VWRU5UUz15CitDT05GSUdfRVZFTlRfUFJPRklMRT15CitDT05GSUdfUEVSRl9DT1VOVEVSUz15CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKIENPTkZJR19QUk9GSUxJTkc9eQotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PUFJPRklMRSBpcyBub3Qgc2V0CitDT05GSUdfVFJBQ0VQT0lOVFM9eQorQ09ORklHX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKLSMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAorQ09ORklHX0tQUk9CRVM9eQorQ09ORklHX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CiBDT05GSUdfSEFWRV9DTEs9eQogQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCitDT05GSUdfR0NPVl9LRVJORUw9eQogIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKIENPTkZJR19TTEFCSU5GTz15CkBAIC0xMjcsNyArMTQ1LDcgQEAKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xCREFGIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIApAQCAtMTc2LDYgKzE5NCw3IEBACiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDRfMjAyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjQgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzU3IGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwIGlzIG5vdCBzZXQKQEAgLTIxNSw2ICsyMzQsMTIgQEAKICMgQ09ORklHX1BBR0VfU0laRV84S0IgaXMgbm90IHNldAogIyBDT05GSUdfUEFHRV9TSVpFXzE2S0IgaXMgbm90IHNldAogIyBDT05GSUdfUEFHRV9TSVpFXzY0S0IgaXMgbm90IHNldAorQ09ORklHX0hVR0VUTEJfUEFHRV9TSVpFXzY0Sz15CisjIENPTkZJR19IVUdFVExCX1BBR0VfU0laRV8yNTZLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJfUEFHRV9TSVpFXzFNQiBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCX1BBR0VfU0laRV80TUIgaXMgbm90IHNldAorIyBDT05GSUdfSFVHRVRMQl9QQUdFX1NJWkVfNjRNQiBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCX1BBR0VfU0laRV81MTJNQiBpcyBub3Qgc2V0CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CiAjIENPTkZJR19GTEFUTUVNX01BTlVBTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKQEAgLTIyMyw3ICsyNDgsNiBAQAogQ09ORklHX0hBVkVfTUVNT1JZX1BSRVNFTlQ9eQogQ09ORklHX1NQQVJTRU1FTV9TVEFUSUM9eQogIyBDT05GSUdfTUVNT1JZX0hPVFBMVUcgaXMgbm90IHNldAotQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAogQ09ORklHX01JR1JBVElPTj15CiAjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CkBAIC0yMzEsNiArMjU1LDcgQEAKIENPTkZJR19OUl9RVUlDSz0yCiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIAogIwpAQCAtMjU2LDYgKzI4MSw3IEBACiAjCiAjIENPTkZJR19TSF9ISUdITEFOREVSIGlzIG5vdCBzZXQKIENPTkZJR19TSF9TSDc3ODVMQ1I9eQorIyBDT05GSUdfU0hfU0g3Nzg1TENSX1BUIGlzIG5vdCBzZXQKIAogIwogIyBUaW1lciBhbmQgY2xvY2sgY29uZmlndXJhdGlvbgpAQCAtMjY0LDE0ICsyOTAsMjkgQEAKIENPTkZJR19TSF9QQ0xLX0ZSRVE9NTAwMDAwMDAKIENPTkZJR19TSF9DTEtfQ1BHPXkKIENPTkZJR19USUNLX09ORVNIT1Q9eQotIyBDT05GSUdfTk9fSFogaXMgbm90IHNldAorQ09ORklHX05PX0haPXkKIENPTkZJR19ISUdIX1JFU19USU1FUlM9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQogCiAjCiAjIENQVSBGcmVxdWVuY3kgc2NhbGluZwogIwotIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAorQ09ORklHX0NQVV9GUkVRPXkKK0NPTkZJR19DUFVfRlJFUV9UQUJMRT15CisjIENPTkZJR19DUFVfRlJFUV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfQ1BVX0ZSRVFfU1RBVD15CitDT05GSUdfQ1BVX0ZSRVFfU1RBVF9ERVRBSUxTPXkKKyMgQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX1BFUkZPUk1BTkNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX1BPV0VSU0FWRSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9VU0VSU1BBQ0UgaXMgbm90IHNldAorQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX09OREVNQU5EPXkKKyMgQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX0NPTlNFUlZBVElWRSBpcyBub3Qgc2V0CitDT05GSUdfQ1BVX0ZSRVFfR09WX1BFUkZPUk1BTkNFPXkKKyMgQ09ORklHX0NQVV9GUkVRX0dPVl9QT1dFUlNBVkUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0ZSRVFfR09WX1VTRVJTUEFDRSBpcyBub3Qgc2V0CitDT05GSUdfQ1BVX0ZSRVFfR09WX09OREVNQU5EPXkKKyMgQ09ORklHX0NQVV9GUkVRX0dPVl9DT05TRVJWQVRJVkUgaXMgbm90IHNldAorQ09ORklHX1NIX0NQVV9GUkVRPXkKIAogIwogIyBETUEgc3VwcG9ydApAQCAtMjk5LDEyICszNDAsMTIgQEAKIENPTkZJR19TQ0hFRF9IUlRJQ0s9eQogQ09ORklHX0tFWEVDPXkKICMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAotIyBDT05GSUdfU0VDQ09NUCBpcyBub3Qgc2V0CitDT05GSUdfU0VDQ09NUD15CiAjIENPTkZJR19QUkVFTVBUX05PTkUgaXMgbm90IHNldAogIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAogQ09ORklHX1BSRUVNUFQ9eQogQ09ORklHX0dVU0E9eQotIyBDT05GSUdfU1BBUlNFX0lSUSBpcyBub3Qgc2V0CitDT05GSUdfU1BBUlNFX0lSUT15CiAKICMKICMgQm9vdCBvcHRpb25zCkBAIC0zMTIsNyArMzUzLDggQEAKIENPTkZJR19aRVJPX1BBR0VfT0ZGU0VUPTB4MDAwMDEwMDAKIENPTkZJR19CT09UX0xJTktfT0ZGU0VUPTB4MDA4MDAwMDAKIENPTkZJR19FTlRSWV9PRkZTRVQ9MHgwMDAwMTAwMAotIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NNRExJTkVfT1ZFUldSSVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NNRExJTkVfRVhURU5EIGlzIG5vdCBzZXQKIAogIwogIyBCdXMgb3B0aW9ucwpAQCAtMzIxLDggKzM2Myw3IEBACiBDT05GSUdfU0hfUENJRE1BX05PTkNPSEVSRU5UPXkKICMgQ09ORklHX1BDSUVQT1JUQlVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKLUNPTkZJR19QQ0lfTEVHQUNZPXkKLSMgQ09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lfTEVHQUNZIGlzIG5vdCBzZXQKICMgQ09ORklHX1BDSV9TVFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1BDSV9JT1YgaXMgbm90IHNldAogIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKQEAgLTMzOSw4ICszODAsMTMgQEAKICMKICMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zIChFWFBFUklNRU5UQUwpCiAjCi0jIENPTkZJR19QTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfSURMRSBpcyBub3Qgc2V0CitDT05GSUdfUE09eQorIyBDT05GSUdfUE1fREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfSElCRVJOQVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfUE1fUlVOVElNRSBpcyBub3Qgc2V0CitDT05GSUdfQ1BVX0lETEU9eQorQ09ORklHX0NQVV9JRExFX0dPVl9MQURERVI9eQorQ09ORklHX0NQVV9JRExFX0dPVl9NRU5VPXkKIENPTkZJR19ORVQ9eQogCiAjCkBAIC0zOTIsNiArNDM4LDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC00MTQsNiArNDYxLDggQEAKICMgTmV0d29yayB0ZXN0aW5nCiAjCiAjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9UQ1BQUk9CRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRFJPUF9NT05JVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKICMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKQEAgLTQyMSw2ICs0NzAsNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTU19FWFQ9eQogQ09ORklHX1dJUkVMRVNTX0VYVF9TWVNGUz15CkBAIC00MjksNyArNDc5LDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtNDQyLDE4ICs0OTEsMTcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DT05DQVQ9eQogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKQEAgLTUzOCw3ICs1ODYsOCBAQAogIyBDT05GSUdfQkxLX0RFVl9EQUM5NjAgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9VTUVNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfTE9PUD15CitDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QPW0KICMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldApAQCAtNTYxLDcgKzYxMCw3IEBACiBDT05GSUdfU0NTSV9ETUE9eQogIyBDT05GSUdfU0NTSV9UR1QgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX1BST0NfRlM9eQorIyBDT05GSUdfU0NTSV9QUk9DX0ZTIGlzIG5vdCBzZXQKIAogIwogIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQpAQCAtNTkxLDYgKzY0MCw3IEBACiAjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogQ09ORklHX0FUQT15CiAjIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorQ09ORklHX0FUQV9WRVJCT1NFX0VSUk9SPXkKIENPTkZJR19TQVRBX1BNUD15CiAjIENPTkZJR19TQVRBX0FIQ0kgaXMgbm90IHNldAogIyBDT05GSUdfU0FUQV9TSUwyNCBpcyBub3Qgc2V0CkBAIC02MTIsNiArNjYyLDcgQEAKICMgQ09ORklHX1BBVEFfQUxJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQU1EIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVJUT1AgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BVFA4NjdYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVRJSVhQIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjQwX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0NNRDY0WCBpcyBub3Qgc2V0CkBAIC02MzksNiArNjkwLDcgQEAKICMgQ09ORklHX1BBVEFfT1BUSURNQSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1BEQ19PTEQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SQURJU1lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUkRDIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUloxMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0MxMjAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0VSVkVSV09SS1MgaXMgbm90IHNldApAQCAtNjU3LDcgKzcwOSwxMSBAQAogIwogCiAjCi0jIEVuYWJsZSBvbmx5IG9uZSBvZiB0aGUgdHdvIHN0YWNrcywgdW5sZXNzIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZworIyBZb3UgY2FuIGVuYWJsZSBvbmUgb3IgYm90aCBGaXJlV2lyZSBkcml2ZXIgc3RhY2tzLgorIworCisjCisjIFNlZSB0aGUgaGVscCB0ZXh0cyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KICMKICMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKQEAgLTY5MCw2ICs3NDYsNyBAQAogIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NOSUMgaXMgbm90IHNldAogIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDFFIGlzIG5vdCBzZXQKQEAgLTY5NywxMiArNzU0LDcgQEAKICMgQ09ORklHX0pNRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIwotIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dMQU4gaXMgbm90IHNldAogCiAjCiAjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKQEAgLTczOSwyNSArNzkxLDQyIEBACiAjIFVzZXJsYW5kIGludGVyZmFjZXMKICMKIENPTkZJR19JTlBVVF9NT1VTRURFVj15Ci0jIENPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWCBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVg9eQogQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKIENPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKICMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfRVZERVY9eQorQ09ORklHX0lOUFVUX0VWQlVHPW0KIAogIwogIyBJbnB1dCBEZXZpY2UgRHJpdmVycwogIwogQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKLSMgQ09ORklHX0tFWUJPQVJEX0FUS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9BRFA1NTg4IGlzIG5vdCBzZXQKK0NPTkZJR19LRVlCT0FSRF9BVEtCRD15CisjIENPTkZJR19RVDIxNjAgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTUFYNzM1OSBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfT1BFTkNPUkVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9TSF9LRVlTQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfTU9VU0U9eQorQ09ORklHX01PVVNFX1BTMj15CitDT05GSUdfTU9VU0VfUFMyX0FMUFM9eQorQ09ORklHX01PVVNFX1BTMl9MT0dJUFMyUFA9eQorQ09ORklHX01PVVNFX1BTMl9TWU5BUFRJQ1M9eQorQ09ORklHX01PVVNFX1BTMl9UUkFDS1BPSU5UPXkKKyMgQ09ORklHX01PVVNFX1BTMl9FTEFOVEVDSCBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9QUzJfU0VOVEVMSUMgaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfUFMyX1RPVUNIS0lUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX1NFUklBTCBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9BUFBMRVRPVUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX0JDTTU5NzQgaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfVlNYWFhBQSBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9TWU5BUFRJQ1NfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CkBAIC03NjYsNyArODM1LDEyIEBACiAjCiAjIEhhcmR3YXJlIEkvTyBwb3J0cwogIwotIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAorQ09ORklHX1NFUklPPXkKK0NPTkZJR19TRVJJT19JODA0Mj15CitDT05GSUdfU0VSSU9fU0VSUE9SVD15CisjIENPTkZJR19TRVJJT19QQ0lQUzIgaXMgbm90IHNldAorQ09ORklHX1NFUklPX0xJQlBTMj15CisjIENPTkZJR19TRVJJT19SQVcgaXMgbm90IHNldAogIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAogCiAjCkBAIC03NzcsNyArODUxLDcgQEAKIENPTkZJR19WVF9DT05TT0xFPXkKIENPTkZJR19IV19DT05TT0xFPXkKIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkc9eQotQ09ORklHX0RFVktNRU09eQorIyBDT05GSUdfREVWS01FTSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAogIyBDT05GSUdfTk9aT01JIGlzIG5vdCBzZXQKIApAQCAtNzk2LDEyICs4NzAsMTAgQEAKIENPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKICMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAogQ09ORklHX1VOSVg5OF9QVFlTPXkKLSMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAotQ09ORklHX0xFR0FDWV9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgorQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVM9eQorIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAogIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKLUNPTkZJR19IV19SQU5ET009eQotIyBDT05GSUdfSFdfUkFORE9NX1RJTUVSSU9NRU0gaXMgbm90IHNldAorIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKICMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKICMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKICMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldApAQCAtODA5LDYgKzg4MSw3IEBACiBDT05GSUdfREVWUE9SVD15CiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKICMgQ09ORklHX0kyQ19DSEFSREVWIGlzIG5vdCBzZXQKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogQ09ORklHX0kyQ19BTEdPUENBPXkKQEAgLTgzOCw2ICs5MTEsNyBAQAogIwogIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKICMKKyMgQ09ORklHX0kyQ19ERVNJR05XQVJFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1NIX01PQklMRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKQEAgLTg2NCwyMSArOTM4LDQyIEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TUEkgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CitDT05GSUdfV0FUQ0hET0c9eQorIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAorCisjCisjIFdhdGNoZG9nIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19TT0ZUX1dBVENIRE9HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FMSU03MTAxX1dEVCBpcyBub3Qgc2V0CitDT05GSUdfU0hfV0RUPXkKKyMgQ09ORklHX1NIX1dEVF9NTUFQIGlzIG5vdCBzZXQKKworIworIyBQQ0ktYmFzZWQgV2F0Y2hkb2cgQ2FyZHMKKyMKKyMgQ09ORklHX1BDSVBDV0FUQ0hET0cgaXMgbm90IHNldAorIyBDT05GSUdfV0RUUENJIGlzIG5vdCBzZXQKKworIworIyBVU0ItYmFzZWQgV2F0Y2hkb2cgQ2FyZHMKKyMKKyMgQ09ORklHX1VTQlBDV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKICMKQEAgLTg5NiwxNCArOTkxLDE3IEBACiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwogIyBHcmFwaGljcyBzdXBwb3J0CiAjCisjIENPTkZJR19WR0FfQVJCIGlzIG5vdCBzZXQKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiAjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CkBAIC05MTUsMTIgKzEwMTMsMTEgQEAKIENPTkZJR19GQl9DRkJfQ09QWUFSRUE9eQogQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9eQogIyBDT05GSUdfRkJfQ0ZCX1JFVl9QSVhFTFNfSU5fQllURSBpcyBub3Qgc2V0Ci1DT05GSUdfRkJfU1lTX0ZJTExSRUNUPW0KLUNPTkZJR19GQl9TWVNfQ09QWUFSRUE9bQotQ09ORklHX0ZCX1NZU19JTUFHRUJMSVQ9bQorIyBDT05GSUdfRkJfU1lTX0ZJTExSRUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19DT1BZQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfSU1BR0VCTElUIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX0ZPUkVJR05fRU5ESUFOIGlzIG5vdCBzZXQKLUNPTkZJR19GQl9TWVNfRk9QUz1tCi1DT05GSUdfRkJfREVGRVJSRURfSU89eQorIyBDT05GSUdfRkJfU1lTX0ZPUFMgaXMgbm90IHNldAogIyBDT05GSUdfRkJfU1ZHQUxJQiBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9NQUNNT0RFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9CQUNLTElHSFQgaXMgbm90IHNldApAQCAtOTU1LDcgKzEwNTIsNyBAQAogIyBDT05GSUdfRkJfQVJLIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1BNMyBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9DQVJNSU5FIGlzIG5vdCBzZXQKLUNPTkZJR19GQl9TSF9NT0JJTEVfTENEQz1tCisjIENPTkZJR19GQl9TSF9NT0JJTEVfTENEQyBpcyBub3Qgc2V0CiBDT05GSUdfRkJfU001MDE9eQogIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9NRVRST05PTUUgaXMgbm90IHNldApAQCAtOTgxLDE0ICsxMDc4LDExMiBAQAogQ09ORklHX0xPR089eQogIyBDT05GSUdfTE9HT19MSU5VWF9NT05PIGlzIG5vdCBzZXQKICMgQ09ORklHX0xPR09fTElOVVhfVkdBMTYgaXMgbm90IHNldAotQ09ORklHX0xPR09fTElOVVhfQ0xVVDIyND15Ci0jIENPTkZJR19MT0dPX1NVUEVSSF9NT05PIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xPR09fU1VQRVJIX1ZHQTE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xPR09fU1VQRVJIX0NMVVQyMjQgaXMgbm90IHNldAotIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAorIyBDT05GSUdfTE9HT19MSU5VWF9DTFVUMjI0IGlzIG5vdCBzZXQKK0NPTkZJR19MT0dPX1NVUEVSSF9NT05PPXkKK0NPTkZJR19MT0dPX1NVUEVSSF9WR0ExNj15CitDT05GSUdfTE9HT19TVVBFUkhfQ0xVVDIyND15CitDT05GSUdfU09VTkQ9eQorQ09ORklHX1NPVU5EX09TU19DT1JFPXkKK0NPTkZJR19TT1VORF9PU1NfQ09SRV9QUkVDTEFJTT15CitDT05GSUdfU05EPXkKK0NPTkZJR19TTkRfVElNRVI9eQorQ09ORklHX1NORF9QQ009eQorQ09ORklHX1NORF9IV0RFUD15CitDT05GSUdfU05EX1JBV01JREk9eQorQ09ORklHX1NORF9TRVFVRU5DRVI9eQorIyBDT05GSUdfU05EX1NFUV9EVU1NWSBpcyBub3Qgc2V0CitDT05GSUdfU05EX09TU0VNVUw9eQorQ09ORklHX1NORF9NSVhFUl9PU1M9eQorQ09ORklHX1NORF9QQ01fT1NTPXkKK0NPTkZJR19TTkRfUENNX09TU19QTFVHSU5TPXkKK0NPTkZJR19TTkRfU0VRVUVOQ0VSX09TUz15CitDT05GSUdfU05EX0hSVElNRVI9eQorQ09ORklHX1NORF9TRVFfSFJUSU1FUl9ERUZBVUxUPXkKK0NPTkZJR19TTkRfRFlOQU1JQ19NSU5PUlM9eQorIyBDT05GSUdfU05EX1NVUFBPUlRfT0xEX0FQSSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfVkVSQk9TRV9QUk9DRlMgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1ZFUkJPU0VfUFJJTlRLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfU05EX1JBV01JRElfU0VRPXkKK0NPTkZJR19TTkRfT1BMM19MSUJfU0VRPXkKKyMgQ09ORklHX1NORF9PUEw0X0xJQl9TRVEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NCQVdFX1NFUSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRU1VMTBLMV9TRVEgaXMgbm90IHNldAorQ09ORklHX1NORF9NUFU0MDFfVUFSVD15CitDT05GSUdfU05EX09QTDNfTElCPXkKKyMgQ09ORklHX1NORF9EUklWRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfUENJPXkKKyMgQ09ORklHX1NORF9BRDE4ODkgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0FMUzMwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQUxJNTQ1MSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQVRJSVhQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9BVElJWFBfTU9ERU0gaXMgbm90IHNldAorIyBDT05GSUdfU05EX0FVODgxMCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQVU4ODIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9BVTg4MzAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0FXMiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQVpUMzMyOCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQlQ4N1ggaXMgbm90IHNldAorIyBDT05GSUdfU05EX0NBMDEwNiBpcyBub3Qgc2V0CitDT05GSUdfU05EX0NNSVBDST15CisjIENPTkZJR19TTkRfT1hZR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9DUzQyODEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0NTNDZYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQ1RYRkkgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0RBUkxBMjAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0dJTkEyMCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTEFZTEEyMCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfREFSTEEyNCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfR0lOQTI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9MQVlMQTI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9NT05BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9NSUEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0VDSE8zRyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSU5ESUdPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9JTkRJR09JTyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSU5ESUdPREogaXMgbm90IHNldAorIyBDT05GSUdfU05EX0lORElHT0lPWCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSU5ESUdPREpYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9FTVUxMEsxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9FTVUxMEsxWCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRU5TMTM3MCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRU5TMTM3MSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRVMxOTM4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9FUzE5NjggaXMgbm90IHNldAorIyBDT05GSUdfU05EX0ZNODAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9IREFfSU5URUwgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0hEU1AgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0hEU1BNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9ISUZJRVIgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0lDRTE3MTIgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0lDRTE3MjQgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0lOVEVMOFgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9JTlRFTDhYME0gaXMgbm90IHNldAorIyBDT05GSUdfU05EX0tPUkcxMjEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9MWDY0NjRFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTUFFU1RSTzMgaXMgbm90IHNldAorIyBDT05GSUdfU05EX01JWEFSVCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTk0yNTYgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1BDWEhSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9SSVBUSURFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9STUUzMiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfUk1FOTYgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1JNRTk2NTIgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NPTklDVklCRVMgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1RSSURFTlQgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1ZJQTgyWFggaXMgbm90IHNldAorIyBDT05GSUdfU05EX1ZJQTgyWFhfTU9ERU0gaXMgbm90IHNldAorIyBDT05GSUdfU05EX1ZJUlRVT1NPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9WWDIyMiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfWU1GUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TVVBFUkggaXMgbm90IHNldAorQ09ORklHX1NORF9VU0I9eQorIyBDT05GSUdfU05EX1VTQl9BVURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfVVNCX0NBSUFRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TT0MgaXMgbm90IHNldAorIyBDT05GSUdfU09VTkRfUFJJTUUgaXMgbm90IHNldAogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CiAKICMKQEAgLTEwMDEsMzQgKzExOTYsMzkgQEAKICMKICMgU3BlY2lhbCBISUQgZHJpdmVycwogIwotQ09ORklHX0hJRF9BNFRFQ0g9eQotQ09ORklHX0hJRF9BUFBMRT15Ci1DT05GSUdfSElEX0JFTEtJTj15Ci1DT05GSUdfSElEX0NIRVJSWT15Ci1DT05GSUdfSElEX0NISUNPTlk9eQotQ09ORklHX0hJRF9DWVBSRVNTPXkKLSMgQ09ORklHX0hJRF9EUkFHT05SSVNFIGlzIG5vdCBzZXQKLUNPTkZJR19ISURfRVpLRVk9eQotIyBDT05GSUdfSElEX0tZRSBpcyBub3Qgc2V0Ci1DT05GSUdfSElEX0dZUkFUSU9OPXkKLSMgQ09ORklHX0hJRF9LRU5TSU5HVE9OIGlzIG5vdCBzZXQKLUNPTkZJR19ISURfTE9HSVRFQ0g9eQorQ09ORklHX0hJRF9BNFRFQ0g9bQorQ09ORklHX0hJRF9BUFBMRT1tCitDT05GSUdfSElEX0JFTEtJTj1tCitDT05GSUdfSElEX0NIRVJSWT1tCitDT05GSUdfSElEX0NISUNPTlk9bQorQ09ORklHX0hJRF9DWVBSRVNTPW0KK0NPTkZJR19ISURfRFJBR09OUklTRT1tCisjIENPTkZJR19EUkFHT05SSVNFX0ZGIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfRVpLRVk9bQorQ09ORklHX0hJRF9LWUU9bQorQ09ORklHX0hJRF9HWVJBVElPTj1tCitDT05GSUdfSElEX1RXSU5IQU49bQorQ09ORklHX0hJRF9LRU5TSU5HVE9OPW0KK0NPTkZJR19ISURfTE9HSVRFQ0g9bQogIyBDT05GSUdfTE9HSVRFQ0hfRkYgaXMgbm90IHNldAogIyBDT05GSUdfTE9HSVJVTUJMRVBBRDJfRkYgaXMgbm90IHNldAotQ09ORklHX0hJRF9NSUNST1NPRlQ9eQotQ09ORklHX0hJRF9NT05URVJFWT15Ci0jIENPTkZJR19ISURfTlRSSUcgaXMgbm90IHNldAotQ09ORklHX0hJRF9QQU5USEVSTE9SRD15CitDT05GSUdfSElEX01JQ1JPU09GVD1tCitDT05GSUdfSElEX01PTlRFUkVZPW0KK0NPTkZJR19ISURfTlRSSUc9bQorQ09ORklHX0hJRF9QQU5USEVSTE9SRD1tCiAjIENPTkZJR19QQU5USEVSTE9SRF9GRiBpcyBub3Qgc2V0Ci1DT05GSUdfSElEX1BFVEFMWU5YPXkKLUNPTkZJR19ISURfU0FNU1VORz15Ci1DT05GSUdfSElEX1NPTlk9eQotQ09ORklHX0hJRF9TVU5QTFVTPXkKLSMgQ09ORklHX0hJRF9HUkVFTkFTSUEgaXMgbm90IHNldAotIyBDT05GSUdfSElEX1NNQVJUSk9ZUExVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfVE9QU0VFRCBpcyBub3Qgc2V0CitDT05GSUdfSElEX1BFVEFMWU5YPW0KK0NPTkZJR19ISURfU0FNU1VORz1tCitDT05GSUdfSElEX1NPTlk9bQorQ09ORklHX0hJRF9TVU5QTFVTPW0KK0NPTkZJR19ISURfR1JFRU5BU0lBPW0KKyMgQ09ORklHX0dSRUVOQVNJQV9GRiBpcyBub3Qgc2V0CitDT05GSUdfSElEX1NNQVJUSk9ZUExVUz1tCisjIENPTkZJR19TTUFSVEpPWVBMVVNfRkYgaXMgbm90IHNldAorQ09ORklHX0hJRF9UT1BTRUVEPW0KICMgQ09ORklHX0hJRF9USFJVU1RNQVNURVIgaXMgbm90IHNldAotIyBDT05GSUdfSElEX1pFUk9QTFVTIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfWkVST1BMVVM9bQorIyBDT05GSUdfWkVST1BMVVNfRkYgaXMgbm90IHNldAogQ09ORklHX1VTQl9TVVBQT1JUPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CkBAIC0xMDQwLDEzICsxMjQwLDE0IEBACiAjCiAjIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKICMKLUNPTkZJR19VU0JfREVWSUNFRlM9eQorIyBDT05GSUdfVVNCX0RFVklDRUZTIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfREVWSUNFX0NMQVNTPXkKICMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1VTUEVORCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9PVEdfV0hJVEVMSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9PVEdfQkxBQ0tMSVNUX0hVQiBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX01PTj15CisjIENPTkZJR19VU0JfTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9XVVNCIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9XVVNCX0NCQUYgaXMgbm90IHNldAogCkBAIC0xMDYxLDEwICsxMjYyLDggQEAKICMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX09IQ0lfSENEPW0KLSMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX01NSU8gaXMgbm90IHNldAotQ09ORklHX1VTQl9PSENJX0xJVFRMRV9FTkRJQU49eQorIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PSENJX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVUhDSV9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRD15CkBAIC0xMTMzLDcgKzEzMzIsNyBAQAogIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfVEVTVD1tCisjIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1ZTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKQEAgLTExNDMsNyArMTM0MiwyOSBAQAogIwogIyBDT05GSUdfTk9QX1VTQl9YQ0VJViBpcyBub3Qgc2V0CiAjIENPTkZJR19VV0IgaXMgbm90IHNldAotIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKK0NPTkZJR19NTUM9eQorIyBDT05GSUdfTU1DX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19VTlNBRkVfUkVTVU1FIGlzIG5vdCBzZXQKKworIworIyBNTUMvU0QvU0RJTyBDYXJkIERyaXZlcnMKKyMKK0NPTkZJR19NTUNfQkxPQ0s9eQorQ09ORklHX01NQ19CTE9DS19CT1VOQ0U9eQorIyBDT05GSUdfU0RJT19VQVJUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19URVNUIGlzIG5vdCBzZXQKKworIworIyBNTUMvU0QvU0RJTyBIb3N0IENvbnRyb2xsZXIgRHJpdmVycworIworQ09ORklHX01NQ19TREhDST1tCisjIENPTkZJR19NTUNfU0RIQ0lfUENJIGlzIG5vdCBzZXQKK0NPTkZJR19NTUNfU0RIQ0lfUExURk09bQorIyBDT05GSUdfTU1DX0FUOTEgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX0FUTUVMTUNJIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19USUZNX1NEIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19DQjcxMCBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfVklBX1NETU1DIGlzIG5vdCBzZXQKICMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldApAQCAtMTE3OSw2ICsxNDAwLDcgQEAKICMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1JYODU4MSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JYODAyNSBpcyBub3Qgc2V0CiAKICMKICMgU1BJIFJUQyBkcml2ZXJzCkBAIC0xMjAzLDkgKzE0MjUsMjAgQEAKICMKICMgQ09ORklHX1JUQ19EUlZfU0ggaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9HRU5FUklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAorQ09ORklHX0RNQURFVklDRVM9eQorCisjCisjIERNQSBEZXZpY2VzCisjCiAjIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CitDT05GSUdfVUlPPW0KKyMgQ09ORklHX1VJT19DSUYgaXMgbm90IHNldAorIyBDT05GSUdfVUlPX1BEUlYgaXMgbm90IHNldAorIyBDT05GSUdfVUlPX1BEUlZfR0VOSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VJT19TTVggaXMgbm90IHNldAorIyBDT05GSUdfVUlPX0FFQyBpcyBub3Qgc2V0CisjIENPTkZJR19VSU9fU0VSQ09TMyBpcyBub3Qgc2V0CisjIENPTkZJR19VSU9fUENJX0dFTkVSSUMgaXMgbm90IHNldAogCiAjCiAjIFRJIFZMWU5RCkBAIC0xMjI1LDEzICsxNDU4LDE1IEBACiAjIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAogQ09ORklHX0pCRD15CisjIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAogQ09ORklHX0ZTX01CQ0FDSEU9eQogIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19GU19QT1NJWF9BQ0w9eQorIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtMTI3NSw5ICsxNTEwLDkgQEAKIENPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQogIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hVR0VUTEJGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0hVR0VUTEJGUz15CitDT05GSUdfSFVHRVRMQl9QQUdFPXkKK0NPTkZJR19DT05GSUdGU19GUz15CiBDT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15CiAjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldApAQCAtMTI5NywyMCArMTUzMiwyMCBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CiAjIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKIENPTkZJR19ORlNfVjQ9eQorIyBDT05GSUdfTkZTX1Y0XzEgaXMgbm90IHNldAogQ09ORklHX1JPT1RfTkZTPXkKLUNPTkZJR19ORlNEPXkKK0NPTkZJR19ORlNEPW0KIENPTkZJR19ORlNEX1YzPXkKICMgQ09ORklHX05GU0RfVjNfQUNMIGlzIG5vdCBzZXQKLUNPTkZJR19ORlNEX1Y0PXkKKyMgQ09ORklHX05GU0RfVjQgaXMgbm90IHNldAogQ09ORklHX0xPQ0tEPXkKIENPTkZJR19MT0NLRF9WND15Ci1DT05GSUdfRVhQT1JURlM9eQorQ09ORklHX0VYUE9SVEZTPW0KIENPTkZJR19ORlNfQ09NTU9OPXkKIENPTkZJR19TVU5SUEM9eQogQ09ORklHX1NVTlJQQ19HU1M9eQpAQCAtMTM3Myw4NSArMTYwOCw2OSBAQAogIyBLZXJuZWwgaGFja2luZwogIwogQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQotIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAotIyBDT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRCBpcyBub3Qgc2V0CitDT05GSUdfUFJJTlRLX1RJTUU9eQorQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQogIyBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAotIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorQ09ORklHX01BR0lDX1NZU1JRPXkKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19GUz15CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19LRVJORUw9eQotIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAotQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKLSMgQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDIGlzIG5vdCBzZXQKLUNPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQ19WQUxVRT0wCi1DT05GSUdfREVURUNUX0hVTkdfVEFTSz15Ci0jIENPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDIGlzIG5vdCBzZXQKLUNPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDX1ZBTFVFPTAKKyMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfU0NIRURfREVCVUc9eQotIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX1BSRUVNUFQ9eQotIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKK0NPTkZJR19TQ0hFRFNUQVRTPXkKK0NPTkZJR19UUkFDRV9JUlFGTEFHUz15CitDT05GSUdfU1RBQ0tUUkFDRT15CiAjIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfV1JJVEVDT1VOVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GUkFNRV9QT0lOVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAorQ09ORklHX0ZSQU1FX1BPSU5URVI9eQogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKK0NPTkZJR19MQVRFTkNZVE9QPXkKIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15Ci0jIENPTkZJR19QQUdFX1BPSVNPTklORyBpcyBub3Qgc2V0CitDT05GSUdfTk9QX1RSQUNFUj15CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUPXkKIENPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKK0NPTkZJR19IQVZFX1NZU0NBTExfVFJBQ0VQT0lOVFM9eQorQ09ORklHX1RSQUNFUl9NQVhfVFJBQ0U9eQorQ09ORklHX1JJTkdfQlVGRkVSPXkKK0NPTkZJR19FVkVOVF9UUkFDSU5HPXkKK0NPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVI9eQorQ09ORklHX1JJTkdfQlVGRkVSX0FMTE9XX1NXQVA9eQorQ09ORklHX1RSQUNJTkc9eQorQ09ORklHX0dFTkVSSUNfVFJBQ0VSPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogQ09ORklHX0ZUUkFDRT15Ci0jIENPTkZJR19GVU5DVElPTl9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfSVJRU09GRl9UUkFDRVIgaXMgbm90IHNldAorQ09ORklHX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKK0NPTkZJR19JUlFTT0ZGX1RSQUNFUj15CiAjIENPTkZJR19QUkVFTVBUX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfRU5BQkxFX0RFRkFVTFRfVFJBQ0VSUyBpcyBub3Qgc2V0CitDT05GSUdfU0NIRURfVFJBQ0VSPXkKKyMgQ09ORklHX0ZUUkFDRV9TWVNDQUxMUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0CiBDT05GSUdfQlJBTkNIX1BST0ZJTEVfTk9ORT15CiAjIENPTkZJR19QUk9GSUxFX0FOTk9UQVRFRF9CUkFOQ0hFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxFX0FMTF9CUkFOQ0hFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAorQ09ORklHX1NUQUNLX1RSQUNFUj15CitDT05GSUdfS01FTVRSQUNFPXkKK0NPTkZJR19XT1JLUVVFVUVfVFJBQ0VSPXkKICMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX0RZTkFNSUNfRlRSQUNFPXkKKyMgQ09ORklHX0ZVTkNUSU9OX1BST0ZJTEVSIGlzIG5vdCBzZXQKK0NPTkZJR19GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CisjIENPTkZJR19GVFJBQ0VfU1RBUlRVUF9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JJTkdfQlVGRkVSX0JFTkNITUFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19EWU5BTUlDX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQotIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TSF9TVEFOREFSRF9CSU9TIGlzIG5vdCBzZXQKICMgQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19CT09UTUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1cgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAotIyBDT05GSUdfNEtTVEFDS1MgaXMgbm90IHNldAotIyBDT05GSUdfRFVNUF9DT0RFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIX05PX0JTU19JTklUIGlzIG5vdCBzZXQKK0NPTkZJR19EV0FSRl9VTldJTkRFUj15CitDT05GSUdfTUNPVU5UPXkKIAogIwogIyBTZWN1cml0eSBvcHRpb25zCkBAIC0xNDY1LDcgKzE2ODQsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKIENPTkZJR19DUllQVE9fQUxHQVBJMj15CiBDT05GSUdfQ1JZUFRPX0FFQUQyPXkKQEAgLTE1MDcsMTEgKzE3MjUsMTMgQEAKICMKIENPTkZJR19DUllQVE9fSE1BQz15CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTUQ1PXkKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CkBAIC0xNTU2LDcgKzE3NzYsNyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0hXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JJTkFSWV9QUklOVEYgaXMgbm90IHNldAorQ09ORklHX0JJTkFSWV9QUklOVEY9eQogCiAjCiAjIExpYnJhcnkgcm91dGluZXMKQEAgLTE1NzMsNSArMTc5Myw2IEBACiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19IQVZFX0xNQj15CiBDT05GSUdfTkxBVFRSPXkKIENPTkZJR19HRU5FUklDX0FUT01JQzY0PXkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9zaDc3ODVsY3JfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL3NoNzc4NWxjcl9kZWZjb25maWcKaW5kZXggMDA0ZTZmNS4uOGMyYzQ3ZSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL3NoNzc4NWxjcl9kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL3NoNzc4NWxjcl9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzAKLSMgVGh1IEp1biAxOCAxMzowOTozNCAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEKKyMgVGh1IFNlcCAyNCAxOToyMzoxOCAyMDA5CiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0xNCw2ICsxNCw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CitDT05GSUdfSVJRX1BFUl9DUFU9eQogIyBDT05GSUdfR0VORVJJQ19HUElPIGlzIG5vdCBzZXQKIENPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQpAQCAtMjksOCArMzAsOSBAQAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQotQ09ORklHX0lPX1RSQVBQRUQ9eQorQ09ORklHX0FSQ0hfSEFTX0NQVV9JRExFX1dBSVQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKQEAgLTQxLDYgKzQzLDEyIEBACiBDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiBDT05GSUdfTE9DQUxWRVJTSU9OPSIiCiBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX0hBVkVfS0VSTkVMX0daSVA9eQorQ09ORklHX0hBVkVfS0VSTkVMX0JaSVAyPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9MWk1BPXkKK0NPTkZJR19LRVJORUxfR1pJUD15CisjIENPTkZJR19LRVJORUxfQlpJUDIgaXMgbm90IHNldAorIyBDT05GSUdfS0VSTkVMX0xaTUEgaXMgbm90IHNldAogQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKQEAgLTUzLDExICs2MSwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNApAQCAtOTMsMTkgKzEwMiwyMCBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCitDT05GSUdfUEVSRl9FVkVOVFM9eQorIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKIENPTkZJR19QUk9GSUxJTkc9eQotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PUFJPRklMRSBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiAjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKQEAgLTExNSw2ICsxMjUsMTAgQEAKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKIENPTkZJR19IQVZFX0NMSz15CiBDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKICMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CiBDT05GSUdfU0xBQklORk89eQpAQCAtMTI3LDcgKzE0MSw3IEBACiAjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAogQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CitDT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCkBAIC0xNzYsNiArMTkwLDcgQEAKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINF8yMDIgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTcgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc3MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODAgaXMgbm90IHNldApAQCAtMjI0LDYgKzIzOSw3IEBACiBDT05GSUdfTlJfUVVJQ0s9MgogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiAKICMKQEAgLTMwNiw3ICszMjIsOCBAQAogQ09ORklHX1pFUk9fUEFHRV9PRkZTRVQ9MHgwMDAwMTAwMAogQ09ORklHX0JPT1RfTElOS19PRkZTRVQ9MHgwMDgwMDAwMAogQ09ORklHX0VOVFJZX09GRlNFVD0weDAwMDAxMDAwCi0jIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAorIyBDT05GSUdfQ01ETElORV9PVkVSV1JJVEUgaXMgbm90IHNldAorIyBDT05GSUdfQ01ETElORV9FWFRFTkQgaXMgbm90IHNldAogCiAjCiAjIEJ1cyBvcHRpb25zCkBAIC0zODYsNiArNDAzLDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC00MTUsNiArNDMzLDcgQEAKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWSBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1NfRVhUPXkKIENPTkZJR19XSVJFTEVTU19FWFRfU1lTRlM9eQpAQCAtNDIzLDcgKzQ0Miw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTQzNiw2ICs0NTQsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKQEAgLTQ0NSw5ICs0NjQsOSBAQAogIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NPTkNBVD15CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldApAQCAtNTg1LDYgKzYwNCw3IEBACiAjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogQ09ORklHX0FUQT15CiAjIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorQ09ORklHX0FUQV9WRVJCT1NFX0VSUk9SPXkKIENPTkZJR19TQVRBX1BNUD15CiAjIENPTkZJR19TQVRBX0FIQ0kgaXMgbm90IHNldAogIyBDT05GSUdfU0FUQV9TSUwyNCBpcyBub3Qgc2V0CkBAIC02MDYsNiArNjI2LDcgQEAKICMgQ09ORklHX1BBVEFfQUxJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQU1EIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVJUT1AgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BVFA4NjdYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVRJSVhQIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjQwX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0NNRDY0WCBpcyBub3Qgc2V0CkBAIC02MzMsNiArNjU0LDcgQEAKICMgQ09ORklHX1BBVEFfT1BUSURNQSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1BEQ19PTEQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SQURJU1lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUkRDIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUloxMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0MxMjAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0VSVkVSV09SS1MgaXMgbm90IHNldApAQCAtNjUxLDcgKzY3MywxMSBAQAogIwogCiAjCi0jIEVuYWJsZSBvbmx5IG9uZSBvZiB0aGUgdHdvIHN0YWNrcywgdW5sZXNzIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZworIyBZb3UgY2FuIGVuYWJsZSBvbmUgb3IgYm90aCBGaXJlV2lyZSBkcml2ZXIgc3RhY2tzLgorIworCisjCisjIFNlZSB0aGUgaGVscCB0ZXh0cyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KICMKICMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKQEAgLTY4NCw2ICs3MTAsNyBAQAogIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NOSUMgaXMgbm90IHNldAogIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDFFIGlzIG5vdCBzZXQKQEAgLTY5MSwxMCArNzE4LDcgQEAKICMgQ09ORklHX0pNRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtNzQ0LDEzICs3NjgsMTcgQEAKICMgSW5wdXQgRGV2aWNlIERyaXZlcnMKICMKIENPTkZJR19JTlBVVF9LRVlCT0FSRD15CisjIENPTkZJR19LRVlCT0FSRF9BRFA1NTg4IGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX0FUS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CisjIENPTkZJR19RVDIxNjAgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTUFYNzM1OSBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfT1BFTkNPUkVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9TSF9LRVlTQyBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldApAQCAtODAzLDYgKzgzMSw3IEBACiBDT05GSUdfREVWUE9SVD15CiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKICMgQ09ORklHX0kyQ19DSEFSREVWIGlzIG5vdCBzZXQKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogQ09ORklHX0kyQ19BTEdPUENBPXkKQEAgLTgzMiw2ICs4NjEsNyBAQAogIwogIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKICMKKyMgQ09ORklHX0kyQ19ERVNJR05XQVJFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1NIX01PQklMRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKQEAgLTg1OCwyMCArODg4LDIxIEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TUEkgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtODkwLDE0ICs5MjEsMTcgQEAKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAorIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKK0NPTkZJR19WR0FfQVJCPXkKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiAjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CkBAIC05ODIsNyArMTAxNiw2IEBACiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKIAogIwpAQCAtMTAwNSw2ICsxMDM4LDcgQEAKIENPTkZJR19ISURfRVpLRVk9eQogIyBDT05GSUdfSElEX0tZRSBpcyBub3Qgc2V0CiBDT05GSUdfSElEX0dZUkFUSU9OPXkKKyMgQ09ORklHX0hJRF9UV0lOSEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9LRU5TSU5HVE9OIGlzIG5vdCBzZXQKIENPTkZJR19ISURfTE9HSVRFQ0g9eQogIyBDT05GSUdfTE9HSVRFQ0hfRkYgaXMgbm90IHNldApAQCAtMTA1NSw2ICsxMDg5LDcgQEAKICMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9PSENJX0hDRD1tCiAjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX0RFU0MgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPIGlzIG5vdCBzZXQKQEAgLTExNzMsNiArMTIwOCw3IEBACiAjIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9SWDg1ODEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SWDgwMjUgaXMgbm90IHNldAogCiAjCiAjIFNQSSBSVEMgZHJpdmVycwpAQCAtMTIyNCw4ICsxMjYwLDEwIEBACiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0ZTX1BPU0lYX0FDTD15CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtMTI5MSwxMiArMTMyOSwxMiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CiAjIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKIENPTkZJR19ORlNfVjQ9eQorIyBDT05GSUdfTkZTX1Y0XzEgaXMgbm90IHNldAogQ09ORklHX1JPT1RfTkZTPXkKIENPTkZJR19ORlNEPXkKIENPTkZJR19ORlNEX1YzPXkKQEAgLTEzNzIsNiArMTQxMCw3IEBACiAjIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTE0MDcsMTggKzE0NDYsMjMgQEAKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZSQU1FX1BPSU5URVIgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CiAjIENPTkZJR19QQUdFX1BPSVNPTklORyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUPXkKIENPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKK0NPTkZJR19IQVZFX1NZU0NBTExfVFJBQ0VQT0lOVFM9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiBDT05GSUdfRlRSQUNFPXkKICMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0CkBAIC0xNDI2LDYgKzE0NzAsNyBAQAogIyBDT05GSUdfUFJFRU1QVF9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0VOQUJMRV9ERUZBVUxUX1RSQUNFUlMgaXMgbm90IHNldAorIyBDT05GSUdfRlRSQUNFX1NZU0NBTExTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKIENPTkZJR19CUkFOQ0hfUFJPRklMRV9OT05FPXkKICMgQ09ORklHX1BST0ZJTEVfQU5OT1RBVEVEX0JSQU5DSEVTIGlzIG5vdCBzZXQKQEAgLTE0NDAsMTEgKzE0ODUsMTEgQEAKICMgQ09ORklHX0tHREIgaXMgbm90IHNldAogIyBDT05GSUdfU0hfU1RBTkRBUkRfQklPUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEUgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfQk9PVE1FTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUQUNLX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKICMgQ09ORklHXzRLU1RBQ0tTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RVTVBfQ09ERSBpcyBub3Qgc2V0CisjIENPTkZJR19EV0FSRl9VTldJTkRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TSF9OT19CU1NfSU5JVCBpcyBub3Qgc2V0CiAKICMKQEAgLTE0NTksNyArMTUwNCw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fQUVBRDI9eQpAQCAtMTUwMSwxMSArMTU0NSwxMyBAQAogIwogQ09ORklHX0NSWVBUT19ITUFDPXkKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NRDU9eQogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKQEAgLTE1NjcsNSArMTYxMyw2IEBACiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19IQVZFX0xNQj15CiBDT05GSUdfTkxBVFRSPXkKIENPTkZJR19HRU5FUklDX0FUT01JQzY0PXkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9zaG1pbl9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3Mvc2htaW5fZGVmY29uZmlnCmluZGV4IGFkN2Q2MDkuLjkyMTE1ZTYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9zaG1pbl9kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL3NobWluX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMAotIyBUaHUgSnVuIDE4IDEzOjEwOjMzIDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMQorIyBUaHUgU2VwIDI0IDE5OjI3OjE3IDIwMDkKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTEzLDYgKzEzLDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19JUlFfUEVSX0NQVT15CiAjIENPTkZJR19HRU5FUklDX0dQSU8gaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CkBAIC0yNiw3ICsyNyw5IEBACiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQogQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15CitDT05GSUdfQVJDSF9IQVNfQ1BVX0lETEVfV0FJVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtMzYsNiArMzksMTIgQEAKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIENPTkZJR19MT0NBTFZFUlNJT049IiIKIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfSEFWRV9LRVJORUxfR1pJUD15CitDT05GSUdfSEFWRV9LRVJORUxfQlpJUDI9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTUE9eQorQ09ORklHX0tFUk5FTF9HWklQPXkKKyMgQ09ORklHX0tFUk5FTF9CWklQMiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVJORUxfTFpNQSBpcyBub3Qgc2V0CiAjIENPTkZJR19TV0FQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZJUEMgaXMgbm90IHNldAogIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKQEAgLTQ2LDExICs1NSwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiAjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CkBAIC03NywxOCArODcsMTkgQEAKIENPTkZJR19FVkVOVEZEPXkKICMgQ09ORklHX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19BSU89eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CisjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogQ09ORklHX1NMT0I9eQogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKIENPTkZJR19IQVZFX0tQUk9CRVM9eQpAQCAtOTYsMTIgKzEwNywxNiBAQAogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQogQ09ORklHX0hBVkVfQ0xLPXkKIENPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIwogIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKIENPTkZJR19CQVNFX1NNQUxMPTEKICMgQ09ORklHX01PRFVMRVMgaXMgbm90IHNldAogQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CitDT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCkBAIC0xNDgsNiArMTYzLDcgQEAKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINF8yMDIgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTcgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc3MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODAgaXMgbm90IHNldApAQCAtMTkzLDYgKzIwOSw3IEBACiBDT05GSUdfTlJfUVVJQ0s9MgogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiAKICMKQEAgLTI3NCw3ICsyOTEsOCBAQAogQ09ORklHX1pFUk9fUEFHRV9PRkZTRVQ9MHgwMDAwMTAwMAogQ09ORklHX0JPT1RfTElOS19PRkZTRVQ9MHgwMDIxMDAwMAogQ09ORklHX0VOVFJZX09GRlNFVD0weDAwMDAxMDAwCi1DT05GSUdfQ01ETElORV9CT09MPXkKK0NPTkZJR19DTURMSU5FX09WRVJXUklURT15CisjIENPTkZJR19DTURMSU5FX0VYVEVORCBpcyBub3Qgc2V0CiBDT05GSUdfQ01ETElORT0iY29uc29sZT10dHlTQzEsMTE1MjAwIHJvb3Q9MWYwMSBtdGRwYXJ0cz1waHlzX21hcHBlZF9mbGFzaDo2NGsoZmlybSlybywtKHN5cykgbmV0ZGV2PTM0LDB4MzAwLGV0aDAgIgogCiAjCkBAIC0zMzksNiArMzU3LDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC0zNjgsNiArMzg3LDcgQEAKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWSBpcyBub3Qgc2V0CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldApAQCAtMzc1LDcgKzM5NSw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTUyOSwxMCArNTQ4LDcgQEAKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDA9eQogQ09ORklHX05FVERFVl8xMDAwMD15Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC01OTEsMTEgKzYwNywxNSBAQAogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkMgaXMgbm90IHNldAogIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKworIworIyBQUFMgc3VwcG9ydAorIworIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTY3Miw3ICs2OTIsOSBAQAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogIyBDT05GSUdfRE5PVElGWSBpcyBub3Qgc2V0CkBAIC03MDksOCArNzMxLDYgQEAKIENPTkZJR19QUk9DX1NZU0NUTD15CiBDT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQogIyBDT05GSUdfU1lTRlMgaXMgbm90IHNldAotQ09ORklHX1RNUEZTPXkKLSMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCRlMgaXMgbm90IHNldAogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKIENPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKQEAgLTczMiw3ICs3NTIsNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CkBAIC03NjgsNiArNzg3LDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CkBAIC03NzUsOCArNzk1LDExIEBACiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVD15CiBDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CitDT05GSUdfSEFWRV9TWVNDQUxMX1RSQUNFUE9JTlRTPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldApAQCAtNzg1LDYgKzgwOCw3IEBACiBDT05GSUdfU0hfU1RBTkRBUkRfQklPUz15CiAjIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEUgaXMgbm90IHNldAogQ09ORklHX0VBUkxZX1BSSU5USz15CisjIENPTkZJR19EV0FSRl9VTldJTkRFUiBpcyBub3Qgc2V0CiAKICMKICMgU2VjdXJpdHkgb3B0aW9ucwpAQCAtNzk3LDcgKzgyMSw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CkBAIC04MjgsMTEgKzg1MSwxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CkBAIC04OTUsNSArOTIwLDYgQEAKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQorQ09ORklHX0hBVkVfTE1CPXkKIENPTkZJR19OTEFUVFI9eQogQ09ORklHX0dFTkVSSUNfQVRPTUlDNjQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL3NoeDNfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL3NoeDNfZGVmY29uZmlnCmluZGV4IDIwN2IwYzkuLmUzODU4ZDcgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9zaHgzX2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3Mvc2h4M19kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzAKLSMgVGh1IEp1biAxOCAxMzoxMTowMyAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEKKyMgVGh1IFNlcCAyNCAxOToyOToyNiAyMDA5CiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0xNCw2ICsxNCw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CitDT05GSUdfSVJRX1BFUl9DUFU9eQogIyBDT05GSUdfR0VORVJJQ19HUElPIGlzIG5vdCBzZXQKIENPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQpAQCAtMzAsNyArMzEsOSBAQAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQorQ09ORklHX0FSQ0hfSEFTX0NQVV9JRExFX1dBSVQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKQEAgLTQwLDYgKzQzLDEyIEBACiBDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiBDT05GSUdfTE9DQUxWRVJTSU9OPSIiCiBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX0hBVkVfS0VSTkVMX0daSVA9eQorQ09ORklHX0hBVkVfS0VSTkVMX0JaSVAyPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9MWk1BPXkKK0NPTkZJR19LRVJORUxfR1pJUD15CisjIENPTkZJR19LRVJORUxfQlpJUDIgaXMgbm90IHNldAorIyBDT05GSUdfS0VSTkVMX0xaTUEgaXMgbm90IHNldAogQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKQEAgLTU1LDEyICs2NCwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi0jIENPTkZJR19DTEFTU0lDX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci1DT05GSUdfUFJFRU1QVF9SQ1U9eQorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAogQ09ORklHX1JDVV9UUkFDRT15Ci0jIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci1DT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0U9eQorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVX1RSQUNFPXkKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNApAQCAtMTExLDE5ICsxMjAsMjEgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworQ09ORklHX1BFUkZfRVZFTlRTPXkKK0NPTkZJR19FVkVOVF9QUk9GSUxFPXkKKyMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiBDT05GSUdfU0xPQj15CiBDT05GSUdfUFJPRklMSU5HPXkKIENPTkZJR19UUkFDRVBPSU5UUz15Ci1DT05GSUdfTUFSS0VSUz15CiBDT05GSUdfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0tQUk9CRVM9eQpAQCAtMTM1LDYgKzE0NiwxMSBAQAogQ09ORklHX1VTRV9HRU5FUklDX1NNUF9IRUxQRVJTPXkKIENPTkZJR19IQVZFX0NMSz15CiBDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKKyMgQ09ORklHX0dDT1ZfS0VSTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CiBDT05GSUdfUlRfTVVURVhFUz15CkBAIC0xNDcsNyArMTYzLDcgQEAKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfU1RPUF9NQUNISU5FPXkKIENPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAorQ09ORklHX0xCREFGPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIApAQCAtMTk2LDYgKzIxMiw3IEBACiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDRfMjAyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjQgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzU3IGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwIGlzIG5vdCBzZXQKQEAgLTI1Niw2ICsyNzMsNyBAQAogQ09ORklHX05SX1FVSUNLPTIKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogCiAjCkBAIC0zNTMsNyArMzcxLDggQEAKIENPTkZJR19aRVJPX1BBR0VfT0ZGU0VUPTB4MDAwMTAwMDAKIENPTkZJR19CT09UX0xJTktfT0ZGU0VUPTB4MDA4MDAwMDAKIENPTkZJR19FTlRSWV9PRkZTRVQ9MHgwMDAxMDAwMAotQ09ORklHX0NNRExJTkVfQk9PTD15CitDT05GSUdfQ01ETElORV9PVkVSV1JJVEU9eQorIyBDT05GSUdfQ01ETElORV9FWFRFTkQgaXMgbm90IHNldAogQ09ORklHX0NNRExJTkU9ImNvbnNvbGU9dHR5U0MwLDExNTIwMCBlYXJseXByaW50az1iaW9zIGlnbm9yZV9sb2dsZXZlbCIKIAogIwpAQCAtNDM4LDYgKzQ1Nyw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtNDg5LDYgKzUwOSw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldApAQCAtNTYyLDcgKzU4Myw2IEBACiAjIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0CiBDT05GSUdfU0NTSV9MT1dMRVZFTD15CiAjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9CTlgyX0lTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQkZDIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQkZDT0UgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CkBAIC01NzAsNiArNTkwLDcgQEAKICMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfQVRBPXkKICMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CitDT05GSUdfQVRBX1ZFUkJPU0VfRVJST1I9eQogQ09ORklHX1NBVEFfUE1QPXkKIENPTkZJR19BVEFfU0ZGPXkKICMgQ09ORklHX1NBVEFfTVYgaXMgbm90IHNldApAQCAtNjAyLDEyICs2MjMsMTAgQEAKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtNjc1LDYgKzY5NCw3IEBACiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKIENPTkZJR19JMkM9bQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogIyBDT05GSUdfSTJDX0NIQVJERVYgaXMgbm90IHNldAogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiAKQEAgLTY4NSw2ICs3MDUsNyBAQAogIwogIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKICMKKyMgQ09ORklHX0kyQ19ERVNJR05XQVJFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1NIX01PQklMRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKQEAgLTcwNiw5ICs3MjcsNiBAQAogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKICMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKQEAgLTcyOSwxMSArNzQ3LDE1IEBACiAjCiAjIENPTkZJR19TUElfU1BJREVWIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSV9UTEU2MlgwIGlzIG5vdCBzZXQKKworIworIyBQUFMgc3VwcG9ydAorIworIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogQ09ORklHX1dBVENIRE9HPXkKICMgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUIGlzIG5vdCBzZXQKIApAQCAtNzYyLDggKzc4NCwxMiBAQAogIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9NQzEzNzgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VaWF9QQ0FQIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKIApAQCAtODA4LDYgKzgzNCw3IEBACiAjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9SOEE2NjU5N19IQ0Q9bQogIyBDT05GSUdfVVNCX0hXQV9IQ0QgaXMgbm90IHNldApAQCAtODYyLDYgKzg4OSw3IEBACiAjIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9WU1QgaXMgbm90IHNldAogQ09ORklHX1VTQl9HQURHRVQ9eQpAQCAtODc2LDEwICs5MDQsMTEgQEAKICMgQ09ORklHX1VTQl9HQURHRVRfTEg3QTQwWCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUX09NQVAgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVF9QWEEyNVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9SOEE2NjU5NyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUX1BYQTI3WCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUX1MzQ19IU09URyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX1MzQzI0MTAgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVF9JTVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9TM0MyNDEwIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfR0FER0VUX002NjU5Mj15CiBDT05GSUdfVVNCX002NjU5Mj15CiAjIENPTkZJR19VU0JfR0FER0VUX0FNRDU1MzZVREMgaXMgbm90IHNldApAQCAtOTM5LDYgKzk2OCw3IEBACiAjIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9SWDg1ODEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SWDgwMjUgaXMgbm90IHNldAogCiAjCiAjIFNQSSBSVEMgZHJpdmVycwpAQCAtOTUwLDYgKzk4MCw3IEBACiAjIENPTkZJR19SVENfRFJWX1I5NzAxIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfUlM1QzM0OCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0RTMzIzNCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjIxMjMgaXMgbm90IHNldAogCiAjCiAjIFBsYXRmb3JtIFJUQyBkcml2ZXJzCkBAIC0xMDAyLDggKzEwMzMsMTAgQEAKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKQEAgLTEwNjMsNyArMTA5Niw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogIyBDT05GSUdfTkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX05GU0QgaXMgbm90IHNldApAQCAtMTEyOSw2ICsxMTYxLDcgQEAKICMgQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKIENPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfRlM9eQogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xMTY0LDIyICsxMTk3LDI5IEBACiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CiBDT05GSUdfRlJBTUVfUE9JTlRFUj15CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfS1BST0JFU19TQU5JVFlfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CiAjIENPTkZJR19MS0RUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfUEFHRV9QT0lTT05JTkcgaXMgbm90IHNldAogQ09ORklHX05PUF9UUkFDRVI9eQogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVD15CiBDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CitDT05GSUdfSEFWRV9TWVNDQUxMX1RSQUNFUE9JTlRTPXkKIENPTkZJR19SSU5HX0JVRkZFUj15CiBDT05GSUdfRVZFTlRfVFJBQ0lORz15CiBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSPXkKK0NPTkZJR19SSU5HX0JVRkZFUl9BTExPV19TV0FQPXkKIENPTkZJR19UUkFDSU5HPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogQ09ORklHX0ZUUkFDRT15CkBAIC0xMTg4LDYgKzEyMjgsNyBAQAogIyBDT05GSUdfUFJFRU1QVF9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0VOQUJMRV9ERUZBVUxUX1RSQUNFUlMgaXMgbm90IHNldAorIyBDT05GSUdfRlRSQUNFX1NZU0NBTExTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKIENPTkZJR19CUkFOQ0hfUFJPRklMRV9OT05FPXkKICMgQ09ORklHX1BST0ZJTEVfQU5OT1RBVEVEX0JSQU5DSEVTIGlzIG5vdCBzZXQKQEAgLTEyMDUsMTAgKzEyNDYsMTAgQEAKIENPTkZJR19TSF9TVEFOREFSRF9CSU9TPXkKICMgQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRSBpcyBub3Qgc2V0CiBDT05GSUdfRUFSTFlfUFJJTlRLPXkKLSMgQ09ORklHX0RFQlVHX0JPT1RNRU0gaXMgbm90IHNldAotQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1c9eQorIyBDT05GSUdfU1RBQ0tfREVCVUcgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFPXkKIENPTkZJR19EVU1QX0NPREU9eQorIyBDT05GSUdfRFdBUkZfVU5XSU5ERVIgaXMgbm90IHNldAogIyBDT05GSUdfU0hfTk9fQlNTX0lOSVQgaXMgbm90IHNldAogCiAjCkBAIC0xMjIzLDcgKzEyNjQsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldApAQCAtMTI1NSwxMSArMTI5NSwxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CkBAIC0xMzIyLDUgKzEzNjQsNiBAQAogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15CitDT05GSUdfSEFWRV9MTUI9eQogQ09ORklHX05MQVRUUj15CiBDT05GSUdfR0VORVJJQ19BVE9NSUM2ND15CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3Mvc25hcGdlYXJfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL3NuYXBnZWFyX2RlZmNvbmZpZwppbmRleCAyYmUyZDc1Li5jYjkxOWEwIDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3Mvc25hcGdlYXJfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9zbmFwZ2Vhcl9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM2Ci0jIFRodSBBdWcgMjAgMTU6MDM6MDQgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxCisjIFRodSBTZXAgMjQgMTk6MzM6MDAgMjAwOQogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtNTcsMTEgKzU3LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKICMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKQEAgLTk1LDIxICs5NiwyMCBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9DT1VOVEVSUz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQogQ09ORklHX0hBVkVfS1BST0JFUz15CkBAIC0xNzUsNiArMTc1LDcgQEAKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINF8yMDIgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTcgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc3MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODAgaXMgbm90IHNldApAQCAtMjIwLDYgKzIyMSw3IEBACiBDT05GSUdfTlJfUVVJQ0s9MgogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiAKICMKQEAgLTMxMiw3ICszMTQsOCBAQAogQ09ORklHX0JPT1RfTElOS19PRkZTRVQ9MHgwMDgwMDAwMAogQ09ORklHX0VOVFJZX09GRlNFVD0weDAwMDAxMDAwCiAjIENPTkZJR19VQkNfV0FLRVVQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CisjIENPTkZJR19DTURMSU5FX09WRVJXUklURSBpcyBub3Qgc2V0CisjIENPTkZJR19DTURMSU5FX0VYVEVORCBpcyBub3Qgc2V0CiAKICMKICMgQnVzIG9wdGlvbnMKQEAgLTM3NCw2ICszNzcsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTQwMyw2ICs0MDcsNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CkBAIC00MTAsNyArNDE1LDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtNjE4LDEwICs2MjIsNyBAQAogIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTcxNCw3ICs3MTUsNiBAQAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtNzM2LDYgKzczNiw3IEBACiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKK0NPTkZJR19WR0FfQVJCPXkKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiAjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CkBAIC04MTgsNiArODE5LDcgQEAKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKICMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldApAQCAtODgyLDcgKzg4NCw2IEBACiBDT05GSUdfUk9NRlNfT05fQkxPQ0s9eQogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKICMgQ09ORklHX05GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKQEAgLTkwOSw2ICs5MTAsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtOTIyLDcgKzkyNCw3IEBACiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVD15CiBDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15Ci1DT05GSUdfSEFWRV9GVFJBQ0VfU1lTQ0FMTFM9eQorQ09ORklHX0hBVkVfU1lTQ0FMTF9UUkFDRVBPSU5UUz15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKICMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9zeXN0ZW1oX2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9zeXN0ZW1oX2RlZmNvbmZpZwppbmRleCA1ZDk3MDI2Li5iOWZlOTYwIDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3Mvc3lzdGVtaF9kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL3N5c3RlbWhfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMwCi0jIFRodSBKdW4gMTggMTM6MTI6MjggMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxCisjIFRodSBTZXAgMjQgMTk6MzU6MDMgMjAwOQogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtMTQsNiArMTQsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiBDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQorQ09ORklHX0lSUV9QRVJfQ1BVPXkKICMgQ09ORklHX0dFTkVSSUNfR1BJTyBpcyBub3Qgc2V0CiBDT05GSUdfR0VORVJJQ19USU1FPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKQEAgLTI3LDcgKzI4LDkgQEAKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CiBDT05GSUdfQVJDSF9IQVNfREVGQVVMVF9JRExFPXkKK0NPTkZJR19BUkNIX0hBU19DUFVfSURMRV9XQUlUPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCitDT05GSUdfQ09OU1RSVUNUT1JTPXkKIAogIwogIyBHZW5lcmFsIHNldHVwCkBAIC0zOCw2ICs0MSwxMiBAQAogQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgogQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgogQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9HWklQPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9CWklQMj15CitDT05GSUdfSEFWRV9LRVJORUxfTFpNQT15CitDT05GSUdfS0VSTkVMX0daSVA9eQorIyBDT05GSUdfS0VSTkVMX0JaSVAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFUk5FTF9MWk1BIGlzIG5vdCBzZXQKIENPTkZJR19TV0FQPXkKICMgQ09ORklHX1NZU1ZJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CkBAIC00NSwxMSArNTQsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldApAQCAtODMsMTggKzkzLDE5IEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiAjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CkBAIC0xMDMsNiArMTE0LDEwIEBACiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CiBDT05GSUdfSEFWRV9DTEs9eQogQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCiAjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAogQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQogQ09ORklHX1NMQUJJTkZPPXkKQEAgLTExNSw3ICsxMzAsNyBAQAogIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKIENPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAorQ09ORklHX0xCREFGPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIApAQCAtMTYyLDYgKzE3Nyw3IEBACiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDRfMjAyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjQgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzU3IGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwIGlzIG5vdCBzZXQKQEAgLTIwNyw2ICsyMjMsNyBAQAogQ09ORklHX05SX1FVSUNLPTIKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogCiAjCkBAIC0yOTQsNyArMzExLDggQEAKIENPTkZJR19CT09UX0xJTktfT0ZGU0VUPTB4MDA4MDAwMDAKIENPTkZJR19FTlRSWV9PRkZTRVQ9MHgwMDAwMTAwMAogIyBDT05GSUdfVUJDX1dBS0VVUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAorIyBDT05GSUdfQ01ETElORV9PVkVSV1JJVEUgaXMgbm90IHNldAorIyBDT05GSUdfQ01ETElORV9FWFRFTkQgaXMgbm90IHNldAogCiAjCiAjIEJ1cyBvcHRpb25zCkBAIC00MDIsMTAgKzQyMCwyMCBAQAogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkMgaXMgbm90IHNldAogIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKworIworIyBQUFMgc3VwcG9ydAorIworIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiBDT05GSUdfSFdNT049eQogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIE5hdGl2ZSBkcml2ZXJzCisjCiAjIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19GNzE4ODJGRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldApAQCAtNDE2LDkgKzQ0NCw3IEBACiAjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19TU0JfUE9TU0lCTEU9eQogCkBAIC00OTUsNyArNTIxLDkgQEAKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKQEAgLTU1OSw3ICs1ODcsNiBAQAogQ09ORklHX1JPTUZTX09OX0JMT0NLPXkKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiAKICMKICMgUGFydGl0aW9uIFR5cGVzCkBAIC01NzcsNiArNjA0LDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTU4Niw4ICs2MTQsMTEgQEAKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUPXkKIENPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKK0NPTkZJR19IQVZFX1NZU0NBTExfVFJBQ0VQT0lOVFM9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiAjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CkBAIC01OTUsNiArNjI2LDcgQEAKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19TSF9TVEFOREFSRF9CSU9TIGlzIG5vdCBzZXQKICMgQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19EV0FSRl9VTldJTkRFUiBpcyBub3Qgc2V0CiAKICMKICMgU2VjdXJpdHkgb3B0aW9ucwpAQCAtNjIzLDQgKzY1NSw1IEBACiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19IQVZFX0xNQj15CiBDT05GSUdfR0VORVJJQ19BVE9NSUM2ND15CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3MvdGl0YW5fZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL3RpdGFuX2RlZmNvbmZpZwppbmRleCA3YWQwODBlLi4yY2E3OWVkIDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3MvdGl0YW5fZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy90aXRhbl9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzAKLSMgVGh1IEp1biAxOCAxMzoxMjo1NCAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEKKyMgVGh1IFNlcCAyNCAxOTozNjozNiAyMDA5CiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0xNCw2ICsxNCw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CitDT05GSUdfSVJRX1BFUl9DUFU9eQogIyBDT05GSUdfR0VORVJJQ19HUElPIGlzIG5vdCBzZXQKIENPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQpAQCAtMjgsNyArMjksOSBAQAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQorQ09ORklHX0FSQ0hfSEFTX0NQVV9JRExFX1dBSVQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKQEAgLTM4LDYgKzQxLDEyIEBACiBDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiBDT05GSUdfTE9DQUxWRVJTSU9OPSIiCiAjIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9LRVJORUxfR1pJUD15CitDT05GSUdfSEFWRV9LRVJORUxfQlpJUDI9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTUE9eQorQ09ORklHX0tFUk5FTF9HWklQPXkKKyMgQ09ORklHX0tFUk5FTF9CWklQMiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVJORUxfTFpNQSBpcyBub3Qgc2V0CiBDT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfU1lTVklQQ19TWVNDVEw9eQpAQCAtNTAsMTEgKzU5LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE2CkBAIC05MCwxOSArMTAwLDIwIEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiAjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CkBAIC0xMTEsNiArMTIyLDEwIEBACiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CiBDT05GSUdfSEFWRV9DTEs9eQogQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCiAjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAogQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQogQ09ORklHX1NMQUJJTkZPPXkKQEAgLTEyMyw3ICsxMzgsNyBAQAogIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKIENPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAorQ09ORklHX0xCREFGPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIApAQCAtMTcwLDYgKzE4NSw3IEBACiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDRfMjAyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjQgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzU3IGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwIGlzIG5vdCBzZXQKQEAgLTIxNSw2ICsyMzEsNyBAQAogQ09ORklHX05SX1FVSUNLPTIKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogCiAjCkBAIC0zMDcsNyArMzI0LDggQEAKIENPTkZJR19CT09UX0xJTktfT0ZGU0VUPTB4MDA5ZTAwMDAKIENPTkZJR19FTlRSWV9PRkZTRVQ9MHgwMDAwMTAwMAogIyBDT05GSUdfVUJDX1dBS0VVUCBpcyBub3Qgc2V0Ci1DT05GSUdfQ01ETElORV9CT09MPXkKK0NPTkZJR19DTURMSU5FX09WRVJXUklURT15CisjIENPTkZJR19DTURMSU5FX0VYVEVORCBpcyBub3Qgc2V0CiBDT05GSUdfQ01ETElORT0iY29uc29sZT10dHlTQzEsMzg0MDBOODEgcm9vdD0vZGV2L25mcyBpcD06Ojo6OmV0aDE6YXV0b2NvbmYgcnciCiAKICMKQEAgLTUwOSw2ICs1MjcsNyBAQAogIyBDT05GSUdfQlJJREdFX05GX0VCVEFCTEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogQ09ORklHX1NUUD15CkBAIC01OTUsNiArNjE0LDcgQEAKIENPTkZJR19GSUJfUlVMRVM9eQogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTU19FWFQ9eQogQ09ORklHX1dJUkVMRVNTX0VYVF9TWVNGUz15CkBAIC02MDMsNyArNjIzLDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtNjE2LDYgKzYzNSw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiBDT05GSUdfRldfTE9BREVSPW0KQEAgLTYyOCw5ICs2NDgsOSBAQAogQ09ORklHX01URD1tCiBDT05GSUdfTVREX0RFQlVHPXkKIENPTkZJR19NVERfREVCVUdfVkVSQk9TRT0wCisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUEFSVElUSU9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogCiAjCiAjIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCkBAIC04MjAsNiArODQwLDcgQEAKICMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1BNQ1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldApAQCAtODMyLDcgKzg1MywxMSBAQAogIwogCiAjCi0jIEVuYWJsZSBvbmx5IG9uZSBvZiB0aGUgdHdvIHN0YWNrcywgdW5sZXNzIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZworIyBZb3UgY2FuIGVuYWJsZSBvbmUgb3IgYm90aCBGaXJlV2lyZSBkcml2ZXIgc3RhY2tzLgorIworCisjCisjIFNlZSB0aGUgaGVscCB0ZXh0cyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KICMKICMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKQEAgLTkzMSw2ICs5NTYsNyBAQAogIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NOSUMgaXMgbm90IHNldAogIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDFFIGlzIG5vdCBzZXQKQEAgLTk1NiwxMCArOTgyLDcgQEAKICMgQ09ORklHX1NGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRTJORVQgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtMTA4NywxMCArMTExMCwyMCBAQAogQ09ORklHX0RFVlBPUlQ9eQogIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisKKyMKKyMgUFBTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogQ09ORklHX0hXTU9OPXkKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBOYXRpdmUgZHJpdmVycworIwogIyBDT05GSUdfU0VOU09SU19JNUtfQU1CIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0Y3MTg4MkZHIGlzIG5vdCBzZXQKQEAgLTExMDUsOSArMTEzOCw3IEBACiAjIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKIENPTkZJR19XQVRDSERPRz15CiAjIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBub3Qgc2V0CiAKQEAgLTExNDksNiArMTE4MCw3IEBACiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKK0NPTkZJR19WR0FfQVJCPXkKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiAjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CkBAIC0xMTY3LDcgKzExOTksNiBAQAogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CiAKICMKQEAgLTEyMTcsNiArMTI0OCw3IEBACiAjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0Q9eQogIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9ERVNDIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fTU1JTyBpcyBub3Qgc2V0CkBAIC0xNDE2LDggKzE0NDgsMTAgQEAKICMgQ09ORklHX1hGU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfWEZTX1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGU19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC0xNDg5LDcgKzE1MjMsNiBAQAogQ09ORklHX1JPTUZTX09OX0JMT0NLPXkKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQpAQCAtMTU5MSw2ICsxNjI0LDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiBDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xNjIxLDIzICsxNjU1LDI5IEBACiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GUkFNRV9QT0lOVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQUdFX1BPSVNPTklORyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUPXkKIENPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKK0NPTkZJR19IQVZFX1NZU0NBTExfVFJBQ0VQT0lOVFM9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiBDT05GSUdfRlRSQUNFPXkKICMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfRU5BQkxFX0RFRkFVTFRfVFJBQ0VSUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVFJBQ0VfU1lTQ0FMTFMgaXMgbm90IHNldAogIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAogQ09ORklHX0JSQU5DSF9QUk9GSUxFX05PTkU9eQogIyBDT05GSUdfUFJPRklMRV9BTk5PVEFURURfQlJBTkNIRVMgaXMgbm90IHNldApAQCAtMTY1MCwxNCArMTY5MCwxMyBAQAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LTUVNQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfU0hfU1RBTkRBUkRfQklPUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEUgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfQk9PVE1FTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUQUNLX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKICMgQ09ORklHXzRLU1RBQ0tTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RVTVBfQ09ERSBpcyBub3Qgc2V0CisjIENPTkZJR19EV0FSRl9VTldJTkRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TSF9OT19CU1NfSU5JVCBpcyBub3Qgc2V0CiAKICMKQEAgLTE2NzIsNyArMTcxMSw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fQUVBRD15CkBAIC0xNzE1LDExICsxNzUzLDEzIEBACiAjCiBDT05GSUdfQ1JZUFRPX0hNQUM9eQogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogQ09ORklHX0NSWVBUT19DUkMzMkM9bQorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTUQ0PW0KIENPTkZJR19DUllQVE9fTUQ1PXkKIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUM9eQpAQCAtMTc5MCw1ICsxODMwLDYgQEAKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQorQ09ORklHX0hBVkVfTE1CPXkKIENPTkZJR19OTEFUVFI9eQogQ09ORklHX0dFTkVSSUNfQVRPTUlDNjQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL3VsMl9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3MvdWwyX2RlZmNvbmZpZwppbmRleCA2MDhmZTU2Li5iMDEyY2E3IDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3MvdWwyX2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3MvdWwyX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMAotIyBUaHUgSnVuIDE4IDEzOjE0OjM2IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMQorIyBUaHUgU2VwIDI0IDE5OjQyOjMzIDIwMDkKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTE0LDYgKzE0LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19JUlFfUEVSX0NQVT15CiAjIENPTkZJR19HRU5FUklDX0dQSU8gaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CkBAIC0yOSw3ICszMCw5IEBACiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQogQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15CitDT05GSUdfQVJDSF9IQVNfQ1BVX0lETEVfV0FJVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtNDAsNiArNDMsMTIgQEAKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIENPTkZJR19MT0NBTFZFUlNJT049IiIKIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfSEFWRV9LRVJORUxfR1pJUD15CitDT05GSUdfSEFWRV9LRVJORUxfQlpJUDI9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTUE9eQorQ09ORklHX0tFUk5FTF9HWklQPXkKKyMgQ09ORklHX0tFUk5FTF9CWklQMiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVJORUxfTFpNQSBpcyBub3Qgc2V0CiBDT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfU1lTVklQQ19TWVNDVEw9eQpAQCAtNTIsMTEgKzYxLDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CkBAIC05MSwxOSArMTAxLDIwIEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKK0NPTkZJR19QRVJGX0VWRU5UUz15CisjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfU0xVQl9ERUJVRz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogQ09ORklHX1BST0ZJTElORz15Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKICMgQ09ORklHX09QUk9GSUxFIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKICMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldApAQCAtMTEzLDYgKzEyNCwxMCBAQAogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQogQ09ORklHX0hBVkVfQ0xLPXkKIENPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIwogIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKIENPTkZJR19TTEFCSU5GTz15CkBAIC0xMjUsNyArMTQwLDcgQEAKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKK0NPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKQEAgLTE0MSw3ICsxNTYsNyBAQAogIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTk9PUD15CiBDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJub29wIgotIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CitDT05GSUdfRlJFRVpFUj15CiAKICMKICMgU3lzdGVtIHR5cGUKQEAgLTE3Niw2ICsxOTEsNyBAQAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g0XzIwMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1NyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCBpcyBub3Qgc2V0CkBAIC0yMzMsNiArMjQ5LDcgQEAKIENPTkZJR19OUl9RVUlDSz0yCiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIAogIwpAQCAtMzE0LDcgKzMzMSw4IEBACiBDT05GSUdfWkVST19QQUdFX09GRlNFVD0weDAwMDAxMDAwCiBDT05GSUdfQk9PVF9MSU5LX09GRlNFVD0weDAwODAwMDAwCiBDT05GSUdfRU5UUllfT0ZGU0VUPTB4MDAwMDEwMDAKLUNPTkZJR19DTURMSU5FX0JPT0w9eQorQ09ORklHX0NNRExJTkVfT1ZFUldSSVRFPXkKKyMgQ09ORklHX0NNRExJTkVfRVhURU5EIGlzIG5vdCBzZXQKIENPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eVNDMCwxMTUyMDAgcm9vdD0vZGV2L25mcyBpcD1kaGNwIgogCiAjCkBAIC0zMzQsNyArMzUyLDEzIEBACiAjCiAjIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucyAoRVhQRVJJTUVOVEFMKQogIwotIyBDT05GSUdfUE0gaXMgbm90IHNldAorQ09ORklHX1BNPXkKKyMgQ09ORklHX1BNX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19QTV9TTEVFUD15CitDT05GSUdfU1VTUEVORD15CitDT05GSUdfU1VTUEVORF9GUkVFWkVSPXkKKyMgQ09ORklHX0hJQkVSTkFUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19QTV9SVU5USU1FPXkKICMgQ09ORklHX0NQVV9JRExFIGlzIG5vdCBzZXQKIENPTkZJR19ORVQ9eQogCkBAIC0zODIsNiArNDA2LDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC00MTEsMTkgKzQzNiwxNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKIENPTkZJR19DRkc4MDIxMT15CisjIENPTkZJR19OTDgwMjExX1RFU1RNT0RFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NGRzgwMjExX0RFVkVMT1BFUl9XQVJOSU5HUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DRkc4MDIxMV9SRUdfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFM9eQorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MQogIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTX0VYVD15CiBDT05GSUdfV0lSRUxFU1NfRVhUX1NZU0ZTPXkKIENPTkZJR19MSUI4MDIxMT1tCiAjIENPTkZJR19MSUI4MDIxMV9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfTUFDODAyMTE9eQotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFM9eQotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MQotCi0jCi0jIFJhdGUgY29udHJvbCBhbGdvcml0aG0gc2VsZWN0aW9uCi0jCiBDT05GSUdfTUFDODAyMTFfUkNfUElEPXkKICMgQ09ORklHX01BQzgwMjExX1JDX01JTlNUUkVMIGlzIG5vdCBzZXQKIENPTkZJR19NQUM4MDIxMV9SQ19ERUZBVUxUX1BJRD15CkBAIC00NDQsNiArNDY3LDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKIENPTkZJR19GV19MT0FERVI9eQpAQCAtNDUzLDkgKzQ3Nyw5IEBACiAjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ09OQ0FUPXkKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CkBAIC01OTAsNyArNjE0LDYgQEAKICMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJX0xPV0xFVkVMPXkKICMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0JOWDJfSVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfTElCRkMgaXMgbm90IHNldAogIyBDT05GSUdfTElCRkNPRSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKQEAgLTU5OCw2ICs2MjEsNyBAQAogIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKIENPTkZJR19BVEE9eQogIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19BVEFfVkVSQk9TRV9FUlJPUj15CiBDT05GSUdfU0FUQV9QTVA9eQogQ09ORklHX0FUQV9TRkY9eQogIyBDT05GSUdfU0FUQV9NViBpcyBub3Qgc2V0CkBAIC02MzEsMTAgKzY1NSw3IEBACiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogQ09ORklHX1dMQU5fODAyMTE9eQogQ09ORklHX0xJQkVSVEFTPW0KQEAgLTY0OCwxMiArNjY5LDEzIEBACiAjIENPTkZJR19SVEw4MTg3IGlzIG5vdCBzZXQKICMgQ09ORklHX01BQzgwMjExX0hXU0lNIGlzIG5vdCBzZXQKICMgQ09ORklHX1A1NF9DT01NT04gaXMgbm90IHNldAotIyBDT05GSUdfQVI5MTcwX1VTQiBpcyBub3Qgc2V0CisjIENPTkZJR19BVEhfQ09NTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0hPU1RBUCBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDMgaXMgbm90IHNldAogIyBDT05GSUdfQjQzTEVHQUNZIGlzIG5vdCBzZXQKICMgQ09ORklHX1pEMTIxMVJXIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUMlgwMCBpcyBub3Qgc2V0CisjIENPTkZJR19XTDEyWFggaXMgbm90IHNldAogIyBDT05GSUdfSVdNIGlzIG5vdCBzZXQKIAogIwpAQCAtNzUwLDEwICs3NzIsMjAgQEAKICMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAogIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisKKyMKKyMgUFBTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogQ09ORklHX0hXTU9OPXkKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBOYXRpdmUgZHJpdmVycworIwogIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfRjcxODgyRkcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKQEAgLTc2NCw5ICs3OTYsNyBAQAogIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtODEzLDYgKzg0Myw3IEBACiAjIENPTkZJR19VU0JfREVWSUNFRlMgaXMgbm90IHNldAogQ09ORklHX1VTQl9ERVZJQ0VfQ0xBU1M9eQogIyBDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVVNQRU5EIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09UR19XSElURUxJU1QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09UR19CTEFDS0xJU1RfSFVCIGlzIG5vdCBzZXQKQEAgLTgyNyw5ICs4NTgsOSBAQAogIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfUjhBNjY1OTdfSENEPXkKLSMgQ09ORklHX1NVUEVSSF9PTl9DSElQX1I4QTY2NTk3IGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9IV0FfSENEIGlzIG5vdCBzZXQKIAogIwpAQCAtODkzLDYgKzkyNCw3IEBACiAjIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9WU1QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CkBAIC05MTcsNiArOTQ5LDggQEAKICMgTU1DL1NEL1NESU8gSG9zdCBDb250cm9sbGVyIERyaXZlcnMKICMKICMgQ09ORklHX01NQ19TREhDSSBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfQVQ5MSBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfQVRNRUxNQ0kgaXMgbm90IHNldAogIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAogIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAogIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CkBAIC05NDksOCArOTgzLDEwIEBACiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC0xMDE0LDcgKzEwNTAsNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogIyBDT05GSUdfTkZTX1YzIGlzIG5vdCBzZXQKQEAgLTEwOTEsNiArMTEyNiw3IEBACiAjIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTExMDMsOCArMTEzOSwxMSBAQAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUPXkKIENPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKK0NPTkZJR19IQVZFX1NZU0NBTExfVFJBQ0VQT0lOVFM9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiAjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CkBAIC0xMTEyLDYgKzExNTEsNyBAQAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MgaXMgbm90IHNldAogIyBDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RXQVJGX1VOV0lOREVSIGlzIG5vdCBzZXQKIAogIwogIyBTZWN1cml0eSBvcHRpb25zCkBAIC0xMTI1LDcgKzExNjUsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKIENPTkZJR19DUllQVE9fQUxHQVBJMj15CiBDT05GSUdfQ1JZUFRPX0FFQUQyPXkKQEAgLTExNjcsMTEgKzEyMDYsMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDPXkKQEAgLTEyMzUsNSArMTI3Niw2IEBACiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19IQVZFX0xNQj15CiBDT05GSUdfTkxBVFRSPXkKIENPTkZJR19HRU5FUklDX0FUT01JQzY0PXkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy91cnF1ZWxsX2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy91cnF1ZWxsX2RlZmNvbmZpZwppbmRleCBlZTE5ODdlLi45ZjhhZWU1IDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3MvdXJxdWVsbF9kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL3VycXVlbGxfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMwCi0jIFRodSBKdW4gMTggMTM6MTU6MjggMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxCisjIFRodSBTZXAgMjQgMTk6NDY6MTMgMjAwOQogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtMTQsMTEgKzE0LDEzIEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CitDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX0dFTkVSSUNfR1BJTz15CiBDT05GSUdfR0VORVJJQ19USU1FPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKICMgQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRSBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRT15CitDT05GSUdfU1lTX1NVUFBPUlRTX1NNUD15CiBDT05GSUdfU1lTX1NVUFBPUlRTX05VTUE9eQogQ09ORklHX1NZU19TVVBQT1JUU19QQ0k9eQogQ09ORklHX1NZU19TVVBQT1JUU19UTVU9eQpAQCAtMjksNyArMzEsOSBAQAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQorQ09ORklHX0FSQ0hfSEFTX0NQVV9JRExFX1dBSVQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKQEAgLTM5LDYgKzQzLDEyIEBACiBDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiBDT05GSUdfTE9DQUxWRVJTSU9OPSIiCiBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX0hBVkVfS0VSTkVMX0daSVA9eQorQ09ORklHX0hBVkVfS0VSTkVMX0JaSVAyPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9MWk1BPXkKK0NPTkZJR19LRVJORUxfR1pJUD15CisjIENPTkZJR19LRVJORUxfQlpJUDIgaXMgbm90IHNldAorIyBDT05GSUdfS0VSTkVMX0xaTUEgaXMgbm90IHNldAogQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKQEAgLTU0LDE0ICs2NCwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi0jIENPTkZJR19DTEFTU0lDX1JDVSBpcyBub3Qgc2V0CiBDT05GSUdfVFJFRV9SQ1U9eQotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX1JDVV9GQU5PVVQ9MzIKICMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CkBAIC0xMTEsMjAgKzExOSwyMCBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCitDT05GSUdfUEVSRl9FVkVOVFM9eQorIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKIENPTkZJR19QUk9GSUxJTkc9eQotQ09ORklHX1RSQUNFUE9JTlRTPXkKLUNPTkZJR19NQVJLRVJTPXkKICMgQ09ORklHX09QUk9GSUxFIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKICMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldApAQCAtMTM0LDYgKzE0MiwxMSBAQAogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQogQ09ORklHX0hBVkVfQ0xLPXkKIENPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIworIyBDT05GSUdfR0NPVl9LRVJORUwgaXMgbm90IHNldAogIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKIENPTkZJR19TTEFCSU5GTz15CkBAIC0xNDYsNyArMTU5LDcgQEAKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKK0NPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKQEAgLTE5NSw2ICsyMDgsNyBAQAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g0XzIwMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1NyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCBpcyBub3Qgc2V0CkBAIC0yNDQsNyArMjU4LDYgQEAKIENPTkZJR19IQVZFX01FTU9SWV9QUkVTRU5UPXkKIENPTkZJR19TUEFSU0VNRU1fU1RBVElDPXkKICMgQ09ORklHX01FTU9SWV9IT1RQTFVHIGlzIG5vdCBzZXQKLUNPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKIENPTkZJR19NSUdSQVRJT049eQogIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldApAQCAtMjUyLDYgKzI2NSw3IEBACiBDT05GSUdfTlJfUVVJQ0s9MgogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiAKICMKQEAgLTMyMiw2ICszMzYsNyBAQAogQ09ORklHX0tFWEVDPXkKICMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAogQ09ORklHX1NFQ0NPTVA9eQorIyBDT05GSUdfU01QIGlzIG5vdCBzZXQKIENPTkZJR19QUkVFTVBUX05PTkU9eQogIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAogIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CkBAIC0zMzQsNyArMzQ5LDggQEAKIENPTkZJR19aRVJPX1BBR0VfT0ZGU0VUPTB4MDAwMDEwMDAKIENPTkZJR19CT09UX0xJTktfT0ZGU0VUPTB4MDA4MDAwMDAKIENPTkZJR19FTlRSWV9PRkZTRVQ9MHgwMDAwMTAwMAotIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NNRExJTkVfT1ZFUldSSVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NNRExJTkVfRVhURU5EIGlzIG5vdCBzZXQKIAogIwogIyBCdXMgb3B0aW9ucwpAQCAtMzQzLDYgKzM1OSw4IEBACiAjIENPTkZJR19TSF9QQ0lETUFfTk9OQ09IRVJFTlQgaXMgbm90IHNldAogQ09ORklHX1BDSUVQT1JUQlVTPXkKIENPTkZJR19QQ0lFQUVSPXkKKyMgQ09ORklHX1BDSUVfRUNSQyBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lFQUVSX0lOSkVDVCBpcyBub3Qgc2V0CiBDT05GSUdfUENJRUFTUE09eQogQ09ORklHX1BDSUVBU1BNX0RFQlVHPXkKICMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKQEAgLTM2Nyw2ICszODUsNyBAQAogQ09ORklHX1BNPXkKICMgQ09ORklHX1BNX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJQkVSTkFUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNX1JVTlRJTUUgaXMgbm90IHNldAogQ09ORklHX0NQVV9JRExFPXkKIENPTkZJR19DUFVfSURMRV9HT1ZfTEFEREVSPXkKIENPTkZJR19ORVQ9eQpAQCAtNDIwLDYgKzQzOSw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtNDQyLDcgKzQ2Miw2IEBACiAjIE5ldHdvcmsgdGVzdGluZwogIwogIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRFJPUF9NT05JVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKICMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKQEAgLTQ1MCw2ICs0NjksNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTU19FWFQ9eQogQ09ORklHX1dJUkVMRVNTX0VYVF9TWVNGUz15CkBAIC00NTgsNyArNDc4LDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtNDcxLDYgKzQ5MCw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldApAQCAtNDgwLDkgKzUwMCw5IEBACiAjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ09OQ0FUPXkKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CkBAIC02MjAsNiArNjQwLDcgQEAKICMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfQVRBPXkKICMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CitDT05GSUdfQVRBX1ZFUkJPU0VfRVJST1I9eQogQ09ORklHX1NBVEFfUE1QPXkKICMgQ09ORklHX1NBVEFfQUhDSSBpcyBub3Qgc2V0CiBDT05GSUdfU0FUQV9TSUwyND15CkBAIC02NDEsNiArNjYyLDcgQEAKICMgQ09ORklHX1BBVEFfQUxJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQU1EIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVJUT1AgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BVFA4NjdYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVRJSVhQIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjQwX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0NNRDY0WCBpcyBub3Qgc2V0CkBAIC02NjgsNiArNjkwLDcgQEAKICMgQ09ORklHX1BBVEFfT1BUSURNQSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1BEQ19PTEQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SQURJU1lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUkRDIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUloxMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0MxMjAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0VSVkVSV09SS1MgaXMgbm90IHNldApAQCAtNjg2LDcgKzcwOSwxMSBAQAogIwogCiAjCi0jIEVuYWJsZSBvbmx5IG9uZSBvZiB0aGUgdHdvIHN0YWNrcywgdW5sZXNzIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZworIyBZb3UgY2FuIGVuYWJsZSBvbmUgb3IgYm90aCBGaXJlV2lyZSBkcml2ZXIgc3RhY2tzLgorIworCisjCisjIFNlZSB0aGUgaGVscCB0ZXh0cyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KICMKICMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKQEAgLTc4Miw2ICs4MDksNyBAQAogIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NOSUMgaXMgbm90IHNldAogIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDFFIGlzIG5vdCBzZXQKQEAgLTc4OSwxMCArODE3LDcgQEAKICMgQ09ORklHX0pNRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtODQyLDE0ICs4NjcsMTkgQEAKICMgSW5wdXQgRGV2aWNlIERyaXZlcnMKICMKIENPTkZJR19JTlBVVF9LRVlCT0FSRD15CisjIENPTkZJR19LRVlCT0FSRF9BRFA1NTg4IGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX0FUS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CisjIENPTkZJR19RVDIxNjAgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX0dQSU8gaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTUFUUklYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX01BWDczNTkgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX09QRU5DT1JFUyBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfU0hfS0VZU0MgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKQEAgLTkwMiw2ICs5MzIsNyBAQAogQ09ORklHX0RFVlBPUlQ9eQogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CiAjIENPTkZJR19JMkNfQ0hBUkRFViBpcyBub3Qgc2V0CiBDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIENPTkZJR19JMkNfQUxHT1BDQT15CkBAIC05MzEsNiArOTYyLDcgQEAKICMKICMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCiAjCisjIENPTkZJR19JMkNfREVTSUdOV0FSRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfR1BJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19TSF9NT0JJTEUgaXMgbm90IHNldApAQCAtOTU4LDE1ICs5OTAsMTcgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisKKyMKKyMgUFBTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9SRVFVSVJFX0dQSU9MSUI9eQogQ09ORklHX0dQSU9MSUI9eQogIyBDT05GSUdfREVCVUdfR1BJTyBpcyBub3Qgc2V0CkBAIC05ODcsMTQgKzEwMjEsMjQgQEAKICMgUENJIEdQSU8gZXhwYW5kZXJzOgogIwogIyBDT05GSUdfR1BJT19CVDhYWCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX0xBTkdXRUxMIGlzIG5vdCBzZXQKIAogIwogIyBTUEkgR1BJTyBleHBhbmRlcnM6CiAjCisKKyMKKyMgQUM5NyBHUElPIGV4cGFuZGVyczoKKyMKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiBDT05GSUdfSFdNT049eQogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIE5hdGl2ZSBkcml2ZXJzCisjCiAjIENPTkZJR19TRU5TT1JTX0FENzQxNCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldApAQCAtMTA0NSw2ICsxMDg5LDcgQEAKICMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RNUDQwMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RNUDQyMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldApAQCAtMTA1Niw5ICsxMTAxLDcgQEAKICMgQ09ORklHX1NFTlNPUlNfVzgzTDc4Nk5HIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLUNPTkZJR19USEVSTUFMX0hXTU9OPXkKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19TU0JfUE9TU0lCTEU9eQogCkBAIC0xMDc5LDggKzExMjIsMTAgQEAKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAorIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NRURJQV9TVVBQT1JUPXkKIApAQCAtMTA5OSw2ICsxMTQ0LDcgQEAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydAogIworQ09ORklHX1ZHQV9BUkI9eQogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKQEAgLTExODMsNyArMTIyOSw2IEBACiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKIAogIwpAQCAtMTIwNiw2ICsxMjUxLDcgQEAKIENPTkZJR19ISURfRVpLRVk9eQogIyBDT05GSUdfSElEX0tZRSBpcyBub3Qgc2V0CiBDT05GSUdfSElEX0dZUkFUSU9OPXkKKyMgQ09ORklHX0hJRF9UV0lOSEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9LRU5TSU5HVE9OIGlzIG5vdCBzZXQKIENPTkZJR19ISURfTE9HSVRFQ0g9eQogIyBDT05GSUdfTE9HSVRFQ0hfRkYgaXMgbm90IHNldApAQCAtMTI1NSw2ICsxMzAxLDcgQEAKICMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9PSENJX0hDRD15CiAjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX0RFU0MgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPIGlzIG5vdCBzZXQKQEAgLTEzNzMsNiArMTQyMCw3IEBACiAjIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9SWDg1ODEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SWDgwMjUgaXMgbm90IHNldAogCiAjCiAjIFNQSSBSVEMgZHJpdmVycwpAQCAtMTQyMiw2ICsxNDcwLDcgQEAKIENPTkZJR19FWFQ0X0ZTX1hBVFRSPXkKICMgQ09ORklHX0VYVDRfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDRfRlNfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNF9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfSkJEPXkKICMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfSkJEMj15CkBAIC0xNDMxLDkgKzE0ODAsMTEgQEAKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0JUUkZTX0ZTPXkKICMgQ09ORklHX0JUUkZTX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtMTQ5OSwxMiArMTU1MCwxMiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CiAjIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKIENPTkZJR19ORlNfVjQ9eQorIyBDT05GSUdfTkZTX1Y0XzEgaXMgbm90IHNldAogQ09ORklHX1JPT1RfTkZTPXkKICMgQ09ORklHX05GU0QgaXMgbm90IHNldAogQ09ORklHX0xPQ0tEPXkKQEAgLTE1NzYsNiArMTYyNyw3IEBACiAjIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfRlM9eQogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xNjEwLDE4ICsxNjYyLDIzIEBACiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CiBDT05GSUdfRlJBTUVfUE9JTlRFUj15CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKICMgQ09ORklHX1BBR0VfUE9JU09OSU5HIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VfTUNPVU5UX1RFU1Q9eQogQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQorQ09ORklHX0hBVkVfU1lTQ0FMTF9UUkFDRVBPSU5UUz15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKICMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19EWU5BTUlDX0RFQlVHIGlzIG5vdCBzZXQKQEAgLTE2MzMsMTEgKzE2OTAsMTEgQEAKIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEU9eQogQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRV9QT1JUPTB4ZmZlYjAwMDAKIENPTkZJR19FQVJMWV9QUklOVEs9eQotIyBDT05GSUdfREVCVUdfQk9PVE1FTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUQUNLX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKICMgQ09ORklHXzRLU1RBQ0tTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RVTVBfQ09ERSBpcyBub3Qgc2V0CisjIENPTkZJR19EV0FSRl9VTldJTkRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TSF9OT19CU1NfSU5JVCBpcyBub3Qgc2V0CiAKICMKQEAgLTE2NTIsNyArMTcwOSw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fQUVBRDI9eQpAQCAtMTY5NCwxMSArMTc1MCwxMyBAQAogIwogQ09ORklHX0NSWVBUT19ITUFDPXkKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKIENPTkZJR19DUllQVE9fQ1JDMzJDPXkKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTUQ1PXkKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CkBAIC0xNzY0LDUgKzE4MjIsNiBAQAogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15CitDT05GSUdfSEFWRV9MTUI9eQogQ09ORklHX05MQVRUUj15CiBDT05GSUdfR0VORVJJQ19BVE9NSUM2ND15CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL2VudHJ5LlMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL2VudHJ5LlMKaW5kZXggMDE1MTkzMy4uYmI0MDdlZiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9lbnRyeS5TCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvZW50cnkuUwpAQCAtMTUyLDggKzE1Miw2IEBACiAJbW92LmwJMWYsIHIwCiAJbW92LmwJQHIwLCByNgogCi0Jc3RpCi0KIAltb3YubAkzZiwgcjAKIAltb3YubAk0ZiwgcjEKIAltb3YJcjE1LCByNApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzIyLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3MjIuYwppbmRleCAzNTA5Nzc1Li41NDkxYjA5IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3MjIuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3MjIuYwpAQCAtMTcsNiArMTcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NoX3RpbWVyLmg+CiAjaW5jbHVkZSA8YXNtL2Nsb2NrLmg+CiAjaW5jbHVkZSA8YXNtL21tem9uZS5oPgorI2luY2x1ZGUgPGFzbS9kbWEtc2guaD4KICNpbmNsdWRlIDxjcHUvc2g3NzIyLmg+CiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcnRjX3Jlc291cmNlc1tdID0gewpAQCAtMzczLDYgKzM3NCwxOCBAQAogCX0sCiB9OwogCitzdGF0aWMgc3RydWN0IHNoX2RtYWVfcGRhdGEgZG1hX3BsYXRmb3JtX2RhdGEgPSB7CisJLm1vZGUgPSAwLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZG1hX2RldmljZSA9IHsKKwkubmFtZQkJPSAic2gtZG1hLWVuZ2luZSIsCisJLmlkCQk9IC0xLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZkbWFfcGxhdGZvcm1fZGF0YSwKKwl9LAorfTsKKwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnNoNzcyMl9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKIAkmY210X2RldmljZSwKIAkmdG11MF9kZXZpY2UsCkBAIC0zODUsNiArMzk4LDcgQEAKIAkmdnB1X2RldmljZSwKIAkmdmV1X2RldmljZSwKIAkmanB1X2RldmljZSwKKwkmZG1hX2RldmljZSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IHNoNzcyMl9kZXZpY2VzX3NldHVwKHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3ODAuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzc4MC5jCmluZGV4IDJjOTAxZjQuLjEyZmY1NmYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzc4MC5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzc4MC5jCkBAIC0xMyw2ICsxMyw3IEBACiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9zZXJpYWxfc2NpLmg+CiAjaW5jbHVkZSA8bGludXgvc2hfdGltZXIuaD4KKyNpbmNsdWRlIDxhc20vZG1hLXNoLmg+CiAKIHN0YXRpYyBzdHJ1Y3Qgc2hfdGltZXJfY29uZmlnIHRtdTBfcGxhdGZvcm1fZGF0YSA9IHsKIAkubmFtZSA9ICJUTVUwIiwKQEAgLTI0MCw2ICsyNDEsMTggQEAKIAl9LAogfTsKIAorc3RhdGljIHN0cnVjdCBzaF9kbWFlX3BkYXRhIGRtYV9wbGF0Zm9ybV9kYXRhID0geworCS5tb2RlID0gKFNIRE1BX01JWF9JUlEgfCBTSERNQV9ETUFPUjEpLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZG1hX2RldmljZSA9IHsKKwkubmFtZSAgICAgICAgICAgPSAic2gtZG1hLWVuZ2luZSIsCisJLmlkICAgICAgICAgICAgID0gLTEsCisJLmRldiAgICAgICAgICAgID0geworCQkucGxhdGZvcm1fZGF0YSAgPSAmZG1hX3BsYXRmb3JtX2RhdGEsCisJfSwKK307CisKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpzaDc3ODBfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CiAJJnRtdTBfZGV2aWNlLAogCSZ0bXUxX2RldmljZSwKQEAgLTI0OSw2ICsyNjIsNyBAQAogCSZ0bXU1X2RldmljZSwKIAkmcnRjX2RldmljZSwKIAkmc2NpX2RldmljZSwKKwkmZG1hX2RldmljZSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IHNoNzc4MF9kZXZpY2VzX3NldHVwKHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9kd2FyZi5jIGIvYXJjaC9zaC9rZXJuZWwvZHdhcmYuYwppbmRleCBiYzRkOGQ3Li4yZDA3MDg0IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9kd2FyZi5jCisrKyBiL2FyY2gvc2gva2VybmVsL2R3YXJmLmMKQEAgLTIwLDExICsyMCwxMSBAQAogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9tZW1wb29sLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9mdHJhY2UuaD4KICNpbmNsdWRlIDxhc20vZHdhcmYuaD4KICNpbmNsdWRlIDxhc20vdW53aW5kZXIuaD4KICNpbmNsdWRlIDxhc20vc2VjdGlvbnMuaD4KICNpbmNsdWRlIDxhc20vdW5hbGlnbmVkLmg+Ci0jaW5jbHVkZSA8YXNtL2R3YXJmLmg+CiAjaW5jbHVkZSA8YXNtL3N0YWNrdHJhY2UuaD4KIAogLyogUmVzZXJ2ZSBlbm91Z2ggbWVtb3J5IGZvciB0d28gc3RhY2sgZnJhbWVzICovCkBAIC01NTgsNiArNTU4LDI3IEBACiAJaWYgKCFwYyAmJiAhcHJldikKIAkJcGMgPSAodW5zaWduZWQgbG9uZyljdXJyZW50X3RleHRfYWRkcigpOwogCisjaWZkZWYgQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUgorCS8qCisJICogSWYgb3VyIHN0YWNrIGhhcyBiZWVuIHBhdGNoZWQgYnkgdGhlIGZ1bmN0aW9uIGdyYXBoIHRyYWNlcgorCSAqIHRoZW4gd2UgbWlnaHQgc2VlIHRoZSBhZGRyZXNzIG9mIHJldHVybl90b19oYW5kbGVyKCkgd2hlcmUgd2UKKwkgKiBleHBlY3RlZCB0byBmaW5kIHRoZSByZWFsIHJldHVybiBhZGRyZXNzLgorCSAqLworCWlmIChwYyA9PSAodW5zaWduZWQgbG9uZykmcmV0dXJuX3RvX2hhbmRsZXIpIHsKKwkJaW50IGluZGV4ID0gY3VycmVudC0+Y3Vycl9yZXRfc3RhY2s7CisKKwkJLyoKKwkJICogV2UgY3VycmVudGx5IGhhdmUgbm8gd2F5IG9mIHRyYWNraW5nIGhvdyBtYW55CisJCSAqIHJldHVybl90b19oYW5kbGVyKCkncyB3ZSd2ZSBzZWVuLiBJZiB0aGVyZSBpcyBtb3JlCisJCSAqIHRoYW4gb25lIHBhdGNoZWQgcmV0dXJuIGFkZHJlc3Mgb24gb3VyIHN0YWNrLAorCQkgKiBjb21wbGFpbiBsb3VkbHkuCisJCSAqLworCQlXQVJOX09OKGluZGV4ID4gMCk7CisKKwkJcGMgPSBjdXJyZW50LT5yZXRfc3RhY2tbaW5kZXhdLnJldDsKKwl9CisjZW5kaWYKKwogCWZyYW1lID0gbWVtcG9vbF9hbGxvYyhkd2FyZl9mcmFtZV9wb29sLCBHRlBfQVRPTUlDKTsKIAlpZiAoIWZyYW1lKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiVW5hYmxlIHRvIGFsbG9jYXRlIGEgZHdhcmYgZnJhbWVcbiIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvZW50cnktY29tbW9uLlMgYi9hcmNoL3NoL2tlcm5lbC9lbnRyeS1jb21tb24uUwppbmRleCA2OGQ5MjIzLi4zZWI4NDkzIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9lbnRyeS1jb21tb24uUworKysgYi9hcmNoL3NoL2tlcm5lbC9lbnRyeS1jb21tb24uUwpAQCAtMTIxLDcgKzEyMSw3IEBACiBFTlRSWShyZXN1bWVfdXNlcnNwYWNlKQogCSEgcjg6IGN1cnJlbnRfdGhyZWFkX2luZm8KIAljbGkKLQlUUkFDRV9JUlFTX09mRgorCVRSQUNFX0lSUVNfT0ZGCiAJbW92LmwJQChUSV9GTEFHUyxyOCksIHIwCQkhIGN1cnJlbnRfdGhyZWFkX2luZm8tPmZsYWdzCiAJdHN0CSMoX1RJRl9XT1JLX01BU0sgJiAweGZmKSwgcjAKIAlidC9zCV9fcmVzdG9yZV9hbGwKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2Z0cmFjZS5jIGIvYXJjaC9zaC9rZXJuZWwvZnRyYWNlLmMKaW5kZXggYTNkY2M2ZC4uMmM0OGUyNiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvZnRyYWNlLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvZnRyYWNlLmMKQEAgLTI5MSwzMSArMjkxLDQ4IEBACiAJcmV0dXJuIHN5c2NhbGxzX21ldGFkYXRhW25yXTsKIH0KIAotdm9pZCBhcmNoX2luaXRfZnRyYWNlX3N5c2NhbGxzKHZvaWQpCitpbnQgc3lzY2FsbF9uYW1lX3RvX25yKGNoYXIgKm5hbWUpCit7CisJaW50IGk7CisKKwlpZiAoIXN5c2NhbGxzX21ldGFkYXRhKQorCQlyZXR1cm4gLTE7CisJZm9yIChpID0gMDsgaSA8IE5SX3N5c2NhbGxzOyBpKyspCisJCWlmIChzeXNjYWxsc19tZXRhZGF0YVtpXSkKKwkJCWlmICghc3RyY21wKHN5c2NhbGxzX21ldGFkYXRhW2ldLT5uYW1lLCBuYW1lKSkKKwkJCQlyZXR1cm4gaTsKKwlyZXR1cm4gLTE7Cit9CisKK3ZvaWQgc2V0X3N5c2NhbGxfZW50ZXJfaWQoaW50IG51bSwgaW50IGlkKQoreworCXN5c2NhbGxzX21ldGFkYXRhW251bV0tPmVudGVyX2lkID0gaWQ7Cit9CisKK3ZvaWQgc2V0X3N5c2NhbGxfZXhpdF9pZChpbnQgbnVtLCBpbnQgaWQpCit7CisJc3lzY2FsbHNfbWV0YWRhdGFbbnVtXS0+ZXhpdF9pZCA9IGlkOworfQorCitzdGF0aWMgaW50IF9faW5pdCBhcmNoX2luaXRfZnRyYWNlX3N5c2NhbGxzKHZvaWQpCiB7CiAJaW50IGk7CiAJc3RydWN0IHN5c2NhbGxfbWV0YWRhdGEgKm1ldGE7CiAJdW5zaWduZWQgbG9uZyAqKnBzeXNfc3lzY2FsbF90YWJsZSA9ICZzeXNfY2FsbF90YWJsZTsKLQlzdGF0aWMgYXRvbWljX3QgcmVmczsKLQotCWlmIChhdG9taWNfaW5jX3JldHVybigmcmVmcykgIT0gMSkKLQkJZ290byBlbmQ7CiAKIAlzeXNjYWxsc19tZXRhZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKCpzeXNjYWxsc19tZXRhZGF0YSkgKgogCQkJCQlGVFJBQ0VfU1lTQ0FMTF9NQVgsIEdGUF9LRVJORUwpOwogCWlmICghc3lzY2FsbHNfbWV0YWRhdGEpIHsKIAkJV0FSTl9PTigxKTsKLQkJcmV0dXJuOworCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgRlRSQUNFX1NZU0NBTExfTUFYOyBpKyspIHsKIAkJbWV0YSA9IGZpbmRfc3lzY2FsbF9tZXRhKHBzeXNfc3lzY2FsbF90YWJsZVtpXSk7CiAJCXN5c2NhbGxzX21ldGFkYXRhW2ldID0gbWV0YTsKIAl9Ci0JcmV0dXJuOwogCi0JLyogUGFyYW5vaWQ6IGF2b2lkIG92ZXJmbG93ICovCi1lbmQ6Ci0JYXRvbWljX2RlYygmcmVmcyk7CisJcmV0dXJuIDA7CiB9CithcmNoX2luaXRjYWxsKGFyY2hfaW5pdF9mdHJhY2Vfc3lzY2FsbHMpOwogI2VuZGlmIC8qIENPTkZJR19GVFJBQ0VfU1lTQ0FMTFMgKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2lvX2dlbmVyaWMuYyBiL2FyY2gvc2gva2VybmVsL2lvX2dlbmVyaWMuYwppbmRleCA0ZmY1MDcyLi5iOGZhNjUyIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9pb19nZW5lcmljLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvaW9fZ2VuZXJpYy5jCkBAIC0xNDcsNiArMTQ3LDkgQEAKIAogdm9pZCBfX2lvbWVtICpnZW5lcmljX2lvcG9ydF9tYXAodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBpbnQgc2l6ZSkKIHsKKwlpZiAoUFhTRUcoYWRkcikgPj0gUDFTRUcpCisJCXJldHVybiAodm9pZCBfX2lvbWVtICopYWRkcjsKKwogCXJldHVybiAodm9pZCBfX2lvbWVtICopKGFkZHIgKyBnZW5lcmljX2lvX2Jhc2UpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9pcnEuYyBiL2FyY2gvc2gva2VybmVsL2lycS5jCmluZGV4IDdjYjkzM2IuLmVhYzdkYTcgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2lycS5jCisrKyBiL2FyY2gvc2gva2VybmVsL2lycS5jCkBAIC0xMSw2ICsxMSw3IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsX3N0YXQuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Z0cmFjZS5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhc20vbWFjaHZlYy5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CkBAIC0xMDYsNyArMTA3LDcgQEAKIHN0YXRpYyB1bmlvbiBpcnFfY3R4ICpzb2Z0aXJxX2N0eFtOUl9DUFVTXSBfX3JlYWRfbW9zdGx5OwogI2VuZGlmCiAKLWFzbWxpbmthZ2UgaW50IGRvX0lSUSh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK2FzbWxpbmthZ2UgX19pcnFfZW50cnkgaW50IGRvX0lSUSh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAlzdHJ1Y3QgcHRfcmVncyAqb2xkX3JlZ3MgPSBzZXRfaXJxX3JlZ3MocmVncyk7CiAjaWZkZWYgQ09ORklHX0lSUVNUQUNLUwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvbWFjaHZlYy5jIGIvYXJjaC9zaC9rZXJuZWwvbWFjaHZlYy5jCmluZGV4IDU0OGY2NjAuLmNiY2U2MzkgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL21hY2h2ZWMuYworKysgYi9hcmNoL3NoL2tlcm5lbC9tYWNodmVjLmMKQEAgLTE0LDYgKzE0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxhc20vbWFjaHZlYy5oPgogI2luY2x1ZGUgPGFzbS9zZWN0aW9ucy5oPgorI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KICNpbmNsdWRlIDxhc20vc2V0dXAuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CkBAIC0xMzMsNCArMTM0LDYgQEAKIAogCWlmICghc2hfbXYubXZfbnJfaXJxcykKIAkJc2hfbXYubXZfbnJfaXJxcyA9IE5SX0lSUVM7CisKKwlfX3NldF9pb19wb3J0X2Jhc2UoUDJTRUcpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvc2V0dXAuYyBiL2FyY2gvc2gva2VybmVsL3NldHVwLmMKaW5kZXggZjlkNDRmOC4uOTliNGZiNSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvc2V0dXAuYworKysgYi9hcmNoL3NoL2tlcm5lbC9zZXR1cC5jCkBAIC01NDksNiArNTQ5LDggQEAKIAogCWlmIChjcHUgPT0gMCkKIAkJc2VxX3ByaW50ZihtLCAibWFjaGluZVx0XHQ6ICVzXG4iLCBnZXRfc3lzdGVtX3R5cGUoKSk7CisJZWxzZQorCQlzZXFfcHJpbnRmKG0sICJcbiIpOwogCiAJc2VxX3ByaW50ZihtLCAicHJvY2Vzc29yXHQ6ICVkXG4iLCBjcHUpOwogCXNlcV9wcmludGYobSwgImNwdSBmYW1pbHlcdDogJXNcbiIsIGluaXRfdXRzbmFtZSgpLT5tYWNoaW5lKTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3NoX2tzeW1zXzMyLmMgYi9hcmNoL3NoL2tlcm5lbC9zaF9rc3ltc18zMi5jCmluZGV4IDhkYmUyNmIuLjQ0NGNjZTMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL3NoX2tzeW1zXzMyLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvc2hfa3N5bXNfMzIuYwpAQCAtODQsNiArODQsMjEgQEAKIERFQ0xBUkVfRVhQT1JUKF9fbW92c3RyX2k0X2V2ZW4pOwogREVDTEFSRV9FWFBPUlQoX19tb3ZzdHJfaTRfb2RkKTsKIERFQ0xBUkVfRVhQT1JUKF9fbW92c3RyU0kxMl9pNCk7CitERUNMQVJFX0VYUE9SVChfX21vdm1lbSk7CitERUNMQVJFX0VYUE9SVChfX21vdm1lbVNJOCk7CitERUNMQVJFX0VYUE9SVChfX21vdm1lbVNJMTIpOworREVDTEFSRV9FWFBPUlQoX19tb3ZtZW1TSTE2KTsKK0RFQ0xBUkVfRVhQT1JUKF9fbW92bWVtU0kyMCk7CitERUNMQVJFX0VYUE9SVChfX21vdm1lbVNJMjQpOworREVDTEFSRV9FWFBPUlQoX19tb3ZtZW1TSTI4KTsKK0RFQ0xBUkVfRVhQT1JUKF9fbW92bWVtU0kzMik7CitERUNMQVJFX0VYUE9SVChfX21vdm1lbVNJMzYpOworREVDTEFSRV9FWFBPUlQoX19tb3ZtZW1TSTQwKTsKK0RFQ0xBUkVfRVhQT1JUKF9fbW92bWVtU0k0NCk7CitERUNMQVJFX0VYUE9SVChfX21vdm1lbVNJNDgpOworREVDTEFSRV9FWFBPUlQoX19tb3ZtZW1TSTUyKTsKK0RFQ0xBUkVfRVhQT1JUKF9fbW92bWVtU0k1Nik7CitERUNMQVJFX0VYUE9SVChfX21vdm1lbVNJNjApOwogREVDTEFSRV9FWFBPUlQoX19tb3ZtZW1faTRfZXZlbik7CiBERUNMQVJFX0VYUE9SVChfX21vdm1lbV9pNF9vZGQpOwogREVDTEFSRV9FWFBPUlQoX19tb3ZtZW1TSTEyX2k0KTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3NpZ25hbF8zMi5jIGIvYXJjaC9zaC9rZXJuZWwvc2lnbmFsXzMyLmMKaW5kZXggNjcyOTcwMy4uM2RiMzc0MiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvc2lnbmFsXzMyLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvc2lnbmFsXzMyLmMKQEAgLTE0NSw3ICsxNDUsNyBAQAogewogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gY3VycmVudDsKIAotCWlmICghKGN1cnJlbnRfY3B1X2RhdGEuZmxhZ3MgJiBDUFVfSEFTX0ZQVSkpCisJaWYgKCEoYm9vdF9jcHVfZGF0YS5mbGFncyAmIENQVV9IQVNfRlBVKSkKIAkJcmV0dXJuIDA7CiAKIAlzZXRfdXNlZF9tYXRoKCk7CkBAIC0xNTgsNyArMTU4LDcgQEAKIHsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayA9IGN1cnJlbnQ7CiAKLQlpZiAoIShjdXJyZW50X2NwdV9kYXRhLmZsYWdzICYgQ1BVX0hBU19GUFUpKQorCWlmICghKGJvb3RfY3B1X2RhdGEuZmxhZ3MgJiBDUFVfSEFTX0ZQVSkpCiAJCXJldHVybiAwOwogCiAJaWYgKCF1c2VkX21hdGgoKSkgewpAQCAtMTk5LDcgKzE5OSw3IEBACiAjdW5kZWYgQ09QWQogCiAjaWZkZWYgQ09ORklHX1NIX0ZQVQotCWlmIChjdXJyZW50X2NwdV9kYXRhLmZsYWdzICYgQ1BVX0hBU19GUFUpIHsKKwlpZiAoYm9vdF9jcHVfZGF0YS5mbGFncyAmIENQVV9IQVNfRlBVKSB7CiAJCWludCBvd25lZF9mcDsKIAkJc3RydWN0IHRhc2tfc3RydWN0ICp0c2sgPSBjdXJyZW50OwogCkBAIC00NzIsNiArNDcyLDcgQEAKIAkJZXJyIHw9IF9fcHV0X3VzZXIoT1JfUjBfUjAsICZmcmFtZS0+cmV0Y29kZVs2XSk7CiAJCWVyciB8PSBfX3B1dF91c2VyKChfX05SX3J0X3NpZ3JldHVybiksICZmcmFtZS0+cmV0Y29kZVs3XSk7CiAJCXJlZ3MtPnByID0gKHVuc2lnbmVkIGxvbmcpIGZyYW1lLT5yZXRjb2RlOworCQlmbHVzaF9pY2FjaGVfcmFuZ2UocmVncy0+cHIsIHJlZ3MtPnByICsgc2l6ZW9mKGZyYW1lLT5yZXRjb2RlKSk7CiAJfQogCiAJaWYgKGVycikKQEAgLTQ5Nyw4ICs0OTgsNiBAQAogCXByX2RlYnVnKCJTSUcgZGVsaXZlciAoJXM6JWQpOiBzcD0lcCBwYz0lMDhseCBwcj0lMDhseFxuIiwKIAkJIGN1cnJlbnQtPmNvbW0sIHRhc2tfcGlkX25yKGN1cnJlbnQpLCBmcmFtZSwgcmVncy0+cGMsIHJlZ3MtPnByKTsKIAotCWZsdXNoX2ljYWNoZV9yYW5nZShyZWdzLT5wciwgcmVncy0+cHIgKyBzaXplb2YoZnJhbWUtPnJldGNvZGUpKTsKLQogCXJldHVybiAwOwogCiBnaXZlX3NpZ3NlZ3Y6CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9zbXAuYyBiL2FyY2gvc2gva2VybmVsL3NtcC5jCmluZGV4IDQ0MmQ4ZDQuLjE2MGRiMTAgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL3NtcC5jCisrKyBiL2FyY2gvc2gva2VybmVsL3NtcC5jCkBAIC0zNSw2ICszNSw4IEBACiB7CiAJc3RydWN0IHNoX2NwdWluZm8gKmMgPSBjcHVfZGF0YSArIGNwdTsKIAorCW1lbWNweShjLCAmYm9vdF9jcHVfZGF0YSwgc2l6ZW9mKHN0cnVjdCBzaF9jcHVpbmZvKSk7CisKIAljLT5sb29wc19wZXJfamlmZnkgPSBsb29wc19wZXJfamlmZnk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3RyYXBzXzMyLmMgYi9hcmNoL3NoL2tlcm5lbC90cmFwc18zMi5jCmluZGV4IDZhYmE5YWYuLjdhMmVlM2EgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL3RyYXBzXzMyLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvdHJhcHNfMzIuYwpAQCAtMjUsNiArMjUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tleGVjLmg+CiAjaW5jbHVkZSA8bGludXgvbGltaXRzLmg+CiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2ZzLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL2ZwdS5oPgpAQCAtNTQsOCArNTUsOCBAQAogLyogYml0ZmllbGQ6IDE6IHdhcm4gMjogZml4dXAgNDogc2lnbmFsIC0+IGNvbWJpbmF0aW9ucyAyfDQgJiYgMXwyfDQgYXJlIG5vdAogICAgdmFsaWQhICovCiBzdGF0aWMgaW50IHNlX3VzZXJtb2RlID0gMzsKLS8qIDA6IG5vIHdhcm5pbmcgMTogcHJpbnQgYSB3YXJuaW5nIG1lc3NhZ2UgKi8KLXN0YXRpYyBpbnQgc2Vfa2Vybm1vZGVfd2FybiA9IDE7CisvKiAwOiBubyB3YXJuaW5nIDE6IHByaW50IGEgd2FybmluZyBtZXNzYWdlLCBkaXNhYmxlZCBieSBkZWZhdWx0ICovCitzdGF0aWMgaW50IHNlX2tlcm5tb2RlX3dhcm47CiAKICNpZmRlZiBDT05GSUdfUFJPQ19GUwogc3RhdGljIGNvbnN0IGNoYXIgKnNlX3VzZXJtb2RlX2FjdGlvbltdID0gewpAQCAtMTU5LDEyICsxNjAsMTIgQEAKIAogCW9vcHNfZW50ZXIoKTsKIAotCWNvbnNvbGVfdmVyYm9zZSgpOwogCXNwaW5fbG9ja19pcnEoJmRpZV9sb2NrKTsKKwljb25zb2xlX3ZlcmJvc2UoKTsKIAlidXN0X3NwaW5sb2NrcygxKTsKIAogCXByaW50aygiJXM6ICUwNGx4IFsjJWRdXG4iLCBzdHIsIGVyciAmIDB4ZmZmZiwgKytkaWVfY291bnRlcik7Ci0KKwlzeXNmc19wcmludGtfbGFzdF9maWxlKCk7CiAJcHJpbnRfbW9kdWxlcygpOwogCXNob3dfcmVncyhyZWdzKTsKIApAQCAtMTgwLDYgKzE4MSw3IEBACiAJYnVzdF9zcGlubG9ja3MoMCk7CiAJYWRkX3RhaW50KFRBSU5UX0RJRSk7CiAJc3Bpbl91bmxvY2tfaXJxKCZkaWVfbG9jayk7CisJb29wc19leGl0KCk7CiAKIAlpZiAoa2V4ZWNfc2hvdWxkX2NyYXNoKGN1cnJlbnQpKQogCQljcmFzaF9rZXhlYyhyZWdzKTsKQEAgLTE5MCw3ICsxOTIsNiBAQAogCWlmIChwYW5pY19vbl9vb3BzKQogCQlwYW5pYygiRmF0YWwgZXhjZXB0aW9uIik7CiAKLQlvb3BzX2V4aXQoKTsKIAlkb19leGl0KFNJR1NFR1YpOwogfQogCkBAIC00NTIsNiArNDUzLDEyIEBACiAJdV9pbnQgcm07CiAJaW50IHJldCwgaW5kZXg7CiAKKwkvKgorCSAqIFhYWDogV2UgY2FuJ3QgaGFuZGxlIG1peGVkIDE2LzMyLWJpdCBpbnN0cnVjdGlvbnMgeWV0CisJICovCisJaWYgKGluc3RydWN0aW9uX3NpemUoaW5zdHJ1Y3Rpb24pICE9IDIpCisJCXJldHVybiAtRUlOVkFMOworCiAJaW5kZXggPSAoaW5zdHJ1Y3Rpb24+PjgpJjE1OwkvKiAweDBGMDAgKi8KIAlybSA9IHJlZ3MtPnJlZ3NbaW5kZXhdOwogCkBAIC02MTksOSArNjI2LDkgQEAKIAogCQlzZV91c2VyICs9IDE7CiAKLSNpZm5kZWYgQ09ORklHX0NQVV9TSDJBCiAJCXNldF9mcyhVU0VSX0RTKTsKLQkJaWYgKGNvcHlfZnJvbV91c2VyKCZpbnN0cnVjdGlvbiwgKHUxNiAqKShyZWdzLT5wYyAmIH4xKSwgMikpIHsKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZpbnN0cnVjdGlvbiwgKGluc25fc2l6ZV90ICopKHJlZ3MtPnBjICYgfjEpLAorCQkJCSAgIHNpemVvZihpbnN0cnVjdGlvbikpKSB7CiAJCQlzZXRfZnMob2xkZnMpOwogCQkJZ290byB1c3BhY2Vfc2VndjsKIAkJfQpAQCAtNjMzLDcgKzY0MCw2IEBACiAJCQkgICAgICAgImluIFwiJXNcIiBwaWQ9JWQgcGM9MHglcCBpbnM9MHglMDRoeFxuIiwKIAkJCSAgICAgICBjdXJyZW50LT5jb21tLCBjdXJyZW50LT5waWQsICh2b2lkICopcmVncy0+cGMsCiAJCQkgICAgICAgaW5zdHJ1Y3Rpb24pOwotI2VuZGlmCiAKIAkJaWYgKHNlX3VzZXJtb2RlICYgMikKIAkJCWdvdG8gZml4dXA7CkBAIC02NzMsMTIgKzY3OSw2IEBACiAJfSBlbHNlIHsKIAkJc2Vfc3lzICs9IDE7CiAKLQkJaWYgKHNlX2tlcm5tb2RlX3dhcm4pCi0JCQlwcmludGsoS0VSTl9OT1RJQ0UgIlVuYWxpZ25lZCBrZXJuZWwgYWNjZXNzICIKLQkJCSAgICAgICAib24gYmVoYWxmIG9mIFwiJXNcIiBwaWQ9JWQgcGM9MHglcCBpbnM9MHglMDRoeFxuIiwKLQkJCSAgICAgICBjdXJyZW50LT5jb21tLCBjdXJyZW50LT5waWQsICh2b2lkICopcmVncy0+cGMsCi0JCQkgICAgICAgaW5zdHJ1Y3Rpb24pOwotCiAJCWlmIChyZWdzLT5wYyAmIDEpCiAJCQlkaWUoInVuYWxpZ25lZCBwcm9ncmFtIGNvdW50ZXIiLCByZWdzLCBlcnJvcl9jb2RlKTsKIApAQCAtNjkyLDYgKzY5MiwxMiBAQAogCQkJZGllKCJpbnNuIGZhdWx0aW5nIGluIGRvX2FkZHJlc3NfZXJyb3IiLCByZWdzLCAwKTsKIAkJfQogCisJCWlmIChzZV9rZXJubW9kZV93YXJuKQorCQkJcHJpbnRrKEtFUk5fTk9USUNFICJVbmFsaWduZWQga2VybmVsIGFjY2VzcyAiCisJCQkgICAgICAgIm9uIGJlaGFsZiBvZiBcIiVzXCIgcGlkPSVkIHBjPTB4JXAgaW5zPTB4JTA0aHhcbiIsCisJCQkgICAgICAgY3VycmVudC0+Y29tbSwgY3VycmVudC0+cGlkLCAodm9pZCAqKXJlZ3MtPnBjLAorCQkJICAgICAgIGluc3RydWN0aW9uKTsKKwogCQloYW5kbGVfdW5hbGlnbmVkX2FjY2VzcyhpbnN0cnVjdGlvbiwgcmVncywKIAkJCQkJJnVzZXJfbWVtX2FjY2VzcywgMCk7CiAJCXNldF9mcyhvbGRmcyk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL21tL0tjb25maWcgYi9hcmNoL3NoL21tL0tjb25maWcKaW5kZXggNjRkYzFhZC4uN2Y3YjUyZiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9tbS9LY29uZmlnCisrKyBiL2FyY2gvc2gvbW0vS2NvbmZpZwpAQCAtMjI3LDcgKzIyNyw3IEBACiAKIGNob2ljZQogCXByb21wdCAiSHVnZVRMQiBwYWdlIHNpemUiCi0JZGVwZW5kcyBvbiBIVUdFVExCX1BBR0UgJiYgKENQVV9TSDQgfHwgQ1BVX1NINSkgJiYgTU1VCisJZGVwZW5kcyBvbiBIVUdFVExCX1BBR0UKIAlkZWZhdWx0IEhVR0VUTEJfUEFHRV9TSVpFXzFNQiBpZiBQQUdFX1NJWkVfNjRLQgogCWRlZmF1bHQgSFVHRVRMQl9QQUdFX1NJWkVfNjRLCiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvbW0vY2FjaGUtc2g0LmMgYi9hcmNoL3NoL21tL2NhY2hlLXNoNC5jCmluZGV4IGIyNDUzYmIuLjUxOWUyZDEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvbW0vY2FjaGUtc2g0LmMKKysrIGIvYXJjaC9zaC9tbS9jYWNoZS1zaDQuYwpAQCAtMjYsNyArMjYsNyBAQAogI2RlZmluZSBNQVhfRENBQ0hFX1BBR0VTCTY0CS8qIFhYWDogVHVuZSBmb3Igd2F5cyAqLwogI2RlZmluZSBNQVhfSUNBQ0hFX1BBR0VTCTMyCiAKLXN0YXRpYyB2b2lkIF9fZmx1c2hfY2FjaGVfNDA5Nih1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgcGh5cywKK3N0YXRpYyB2b2lkIF9fZmx1c2hfY2FjaGVfb25lKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBwaHlzLAogCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgZXhlY19vZmZzZXQpOwogCiAvKgpAQCAtNDMsNyArNDMsNyBAQAogICogQ2FsbGVkIGZyb20ga2VybmVsL21vZHVsZS5jOnN5c19pbml0X21vZHVsZSBhbmQgcm91dGluZSBmb3IgYS5vdXQgZm9ybWF0LAogICogc2lnbmFsIGhhbmRsZXIgY29kZSBhbmQga3Byb2JlcyBjb2RlCiAgKi8KLXN0YXRpYyB2b2lkIHNoNF9mbHVzaF9pY2FjaGVfcmFuZ2Uodm9pZCAqYXJncykKK3N0YXRpYyB2b2lkIF9fdXNlc19qdW1wX3RvX3VuY2FjaGVkIHNoNF9mbHVzaF9pY2FjaGVfcmFuZ2Uodm9pZCAqYXJncykKIHsKIAlzdHJ1Y3QgZmx1c2hlcl9kYXRhICpkYXRhID0gYXJnczsKIAl1bnNpZ25lZCBsb25nIHN0YXJ0LCBlbmQ7CkBAIC04OSw4ICs4OSw3IEBACiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfY2FjaGVfNDA5Nih1bnNpZ25lZCBsb25nIHN0YXJ0LAotCQkJCSAgICB1bnNpZ25lZCBsb25nIHBoeXMpCitzdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfY2FjaGVfb25lKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgcGh5cykKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzLCBleGVjX29mZnNldCA9IDA7CiAKQEAgLTEwMyw4ICsxMDIsNyBAQAogCQlleGVjX29mZnNldCA9IDB4MjAwMDAwMDA7CiAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JX19mbHVzaF9jYWNoZV80MDk2KHN0YXJ0IHwgU0hfQ0FDSEVfQVNTT0MsCi0JCQkgICBQMVNFR0FERFIocGh5cyksIGV4ZWNfb2Zmc2V0KTsKKwlfX2ZsdXNoX2NhY2hlX29uZShzdGFydCB8IFNIX0NBQ0hFX0FTU09DLCBQMVNFR0FERFIocGh5cyksIGV4ZWNfb2Zmc2V0KTsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CiAKQEAgLTEyOSw4ICsxMjcsOCBAQAogCiAJCS8qIExvb3AgYWxsIHRoZSBELWNhY2hlICovCiAJCW4gPSBib290X2NwdV9kYXRhLmRjYWNoZS5uX2FsaWFzZXM7Ci0JCWZvciAoaSA9IDA7IGkgPCBuOyBpKyssIGFkZHIgKz0gNDA5NikKLQkJCWZsdXNoX2NhY2hlXzQwOTYoYWRkciwgcGh5cyk7CisJCWZvciAoaSA9IDA7IGkgPCBuOyBpKyssIGFkZHIgKz0gUEFHRV9TSVpFKQorCQkJZmx1c2hfY2FjaGVfb25lKGFkZHIsIHBoeXMpOwogCX0KIAogCXdtYigpOwpAQCAtMzE4LDExICszMTYsMTEgQEAKIAkvKiBXZSBvbmx5IG5lZWQgdG8gZmx1c2ggRC1jYWNoZSB3aGVuIHdlIGhhdmUgYWxpYXMgKi8KIAlpZiAoKGFkZHJlc3NecGh5cykgJiBhbGlhc19tYXNrKSB7CiAJCS8qIExvb3AgNEsgb2YgdGhlIEQtY2FjaGUgKi8KLQkJZmx1c2hfY2FjaGVfNDA5NigKKwkJZmx1c2hfY2FjaGVfb25lKAogCQkJQ0FDSEVfT0NfQUREUkVTU19BUlJBWSB8IChhZGRyZXNzICYgYWxpYXNfbWFzayksCiAJCQlwaHlzKTsKIAkJLyogTG9vcCBhbm90aGVyIDRLIG9mIHRoZSBELWNhY2hlICovCi0JCWZsdXNoX2NhY2hlXzQwOTYoCisJCWZsdXNoX2NhY2hlX29uZSgKIAkJCUNBQ0hFX09DX0FERFJFU1NfQVJSQVkgfCAocGh5cyAmIGFsaWFzX21hc2spLAogCQkJcGh5cyk7CiAJfQpAQCAtMzM3LDcgKzMzNSw3IEBACiAJCSAqIGtlcm5lbCBoYXMgbmV2ZXIgZXhlY3V0ZWQgdGhlIGNvZGUgdGhyb3VnaCBpdHMgaWRlbnRpdHkKIAkJICogdHJhbnNsYXRpb24uCiAJCSAqLwotCQlmbHVzaF9jYWNoZV80MDk2KAorCQlmbHVzaF9jYWNoZV9vbmUoCiAJCQlDQUNIRV9JQ19BRERSRVNTX0FSUkFZIHwgKGFkZHJlc3MgJiBhbGlhc19tYXNrKSwKIAkJCXBoeXMpOwogCX0KQEAgLTM5Myw3ICszOTEsNyBAQAogfQogCiAvKioKLSAqIF9fZmx1c2hfY2FjaGVfNDA5NgorICogX19mbHVzaF9jYWNoZV9vbmUKICAqCiAgKiBAYWRkcjogIGFkZHJlc3MgaW4gbWVtb3J5IG1hcHBlZCBjYWNoZSBhcnJheQogICogQHBoeXM6ICBQMSBhZGRyZXNzIHRvIGZsdXNoIChoYXMgdG8gbWF0Y2ggdGFncyBpZiBhZGRyIGhhcyAnQScgYml0CkBAIC00MDYsNyArNDA0LDcgQEAKICAqIG9wZXJhdGlvbiAocHVyZ2Uvd3JpdGUtYmFjaykgaXMgc2VsZWN0ZWQgYnkgdGhlIGxvd2VyIDIgYml0cyBvZgogICogJ3BoeXMnLgogICovCi1zdGF0aWMgdm9pZCBfX2ZsdXNoX2NhY2hlXzQwOTYodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIHBoeXMsCitzdGF0aWMgdm9pZCBfX2ZsdXNoX2NhY2hlX29uZSh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgcGh5cywKIAkJCSAgICAgICB1bnNpZ25lZCBsb25nIGV4ZWNfb2Zmc2V0KQogewogCWludCB3YXlfY291bnQ7CmRpZmYgLS1naXQgYS9hcmNoL3NoL21tL2NhY2hlLXNoNzcwNS5jIGIvYXJjaC9zaC9tbS9jYWNoZS1zaDc3MDUuYwppbmRleCAyY2FkZWUyLi4yNjAxOTM1IDEwMDY0NAotLS0gYS9hcmNoL3NoL21tL2NhY2hlLXNoNzcwNS5jCisrKyBiL2FyY2gvc2gvbW0vY2FjaGUtc2g3NzA1LmMKQEAgLTc4LDcgKzc4LDcgQEAKIC8qCiAgKiBXcml0ZWJhY2smSW52YWxpZGF0ZSB0aGUgRC1jYWNoZSBvZiB0aGUgcGFnZQogICovCi1zdGF0aWMgdm9pZCBfX2ZsdXNoX2RjYWNoZV9wYWdlKHVuc2lnbmVkIGxvbmcgcGh5cykKK3N0YXRpYyB2b2lkIF9fdXNlc19qdW1wX3RvX3VuY2FjaGVkIF9fZmx1c2hfZGNhY2hlX3BhZ2UodW5zaWduZWQgbG9uZyBwaHlzKQogewogCXVuc2lnbmVkIGxvbmcgd2F5cywgd2F5c2l6ZSwgYWRkcnN0YXJ0OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC0xNDQsNyArMTQ0LDcgQEAKIAkJX19mbHVzaF9kY2FjaGVfcGFnZShQSFlTQUREUihwYWdlX2FkZHJlc3MocGFnZSkpKTsKIH0KIAotc3RhdGljIHZvaWQgc2g3NzA1X2ZsdXNoX2NhY2hlX2FsbCh2b2lkICphcmdzKQorc3RhdGljIHZvaWQgX191c2VzX2p1bXBfdG9fdW5jYWNoZWQgc2g3NzA1X2ZsdXNoX2NhY2hlX2FsbCh2b2lkICphcmdzKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvbW0vY2FjaGUuYyBiL2FyY2gvc2gvbW0vY2FjaGUuYwppbmRleCAzNWMzN2I3Li5hMmRjN2Y5IDEwMDY0NAotLS0gYS9hcmNoL3NoL21tL2NhY2hlLmMKKysrIGIvYXJjaC9zaC9tbS9jYWNoZS5jCkBAIC0xMjgsNyArMTI4LDcgQEAKIAkJcmV0dXJuOwogCiAJcGFnZSA9IHBmbl90b19wYWdlKHBmbik7Ci0JaWYgKHBmbl92YWxpZChwZm4pICYmIHBhZ2VfbWFwcGluZyhwYWdlKSkgeworCWlmIChwZm5fdmFsaWQocGZuKSkgewogCQlpbnQgZGlydHkgPSB0ZXN0X2FuZF9jbGVhcl9iaXQoUEdfZGNhY2hlX2RpcnR5LCAmcGFnZS0+ZmxhZ3MpOwogCQlpZiAoZGlydHkpIHsKIAkJCXVuc2lnbmVkIGxvbmcgYWRkciA9ICh1bnNpZ25lZCBsb25nKXBhZ2VfYWRkcmVzcyhwYWdlKTsKQEAgLTI2NSw2ICsyNjUsOCBAQAogCiB2b2lkIF9faW5pdCBjcHVfY2FjaGVfaW5pdCh2b2lkKQogeworCXVuc2lnbmVkIGludCBjYWNoZV9kaXNhYmxlZCA9ICEoX19yYXdfcmVhZGwoQ0NSKSAmIENDUl9DQUNIRV9FTkFCTEUpOworCiAJY29tcHV0ZV9hbGlhcygmYm9vdF9jcHVfZGF0YS5pY2FjaGUpOwogCWNvbXB1dGVfYWxpYXMoJmJvb3RfY3B1X2RhdGEuZGNhY2hlKTsKIAljb21wdXRlX2FsaWFzKCZib290X2NwdV9kYXRhLnNjYWNoZSk7CkBAIC0yNzMsNiArMjc1LDEzIEBACiAJX19mbHVzaF9wdXJnZV9yZWdpb24JCT0gbm9vcF9fZmx1c2hfcmVnaW9uOwogCV9fZmx1c2hfaW52YWxpZGF0ZV9yZWdpb24JPSBub29wX19mbHVzaF9yZWdpb247CiAKKwkvKgorCSAqIE5vIGZsdXNoaW5nIGlzIG5lY2Vzc2FyeSBpbiB0aGUgZGlzYWJsZWQgY2FjaGUgY2FzZSBzbyB3ZSBjYW4KKwkgKiBqdXN0IGtlZXAgdGhlIG5vb3AgZnVuY3Rpb25zIGluIGxvY2FsX2ZsdXNoXy4uKCkgYW5kIF9fZmx1c2hfLi4oKQorCSAqLworCWlmICh1bmxpa2VseShjYWNoZV9kaXNhYmxlZCkpCisJCWdvdG8gc2tpcDsKKwogCWlmIChib290X2NwdV9kYXRhLmZhbWlseSA9PSBDUFVfRkFNSUxZX1NIMikgewogCQlleHRlcm4gdm9pZCBfX3dlYWsgc2gyX2NhY2hlX2luaXQodm9pZCk7CiAKQEAgLTMxMiw1ICszMjEsNiBAQAogCQlzaDVfY2FjaGVfaW5pdCgpOwogCX0KIAorc2tpcDoKIAllbWl0X2NhY2hlX3BhcmFtcygpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9tbS9pb3JlbWFwXzMyLmMgYi9hcmNoL3NoL21tL2lvcmVtYXBfMzIuYwppbmRleCBjMzI1MDYxLi5hODZlYWE5IDEwMDY0NAotLS0gYS9hcmNoL3NoL21tL2lvcmVtYXBfMzIuYworKysgYi9hcmNoL3NoL21tL2lvcmVtYXBfMzIuYwpAQCAtODMsNyArODMsNyBAQAogCSAqCiAJICogUE1CIGVudHJpZXMgYXJlIGFsbCBwcmUtZmF1bHRlZC4KIAkgKi8KLQlpZiAodW5saWtlbHkoc2l6ZSA+PSAweDEwMDAwMDApKSB7CisJaWYgKHVubGlrZWx5KHBoeXNfYWRkciA+PSBQMVNFRykpIHsKIAkJdW5zaWduZWQgbG9uZyBtYXBwZWQgPSBwbWJfcmVtYXAoYWRkciwgcGh5c19hZGRyLCBzaXplLCBmbGFncyk7CiAKIAkJaWYgKGxpa2VseShtYXBwZWQpKSB7CmRpZmYgLS1naXQgYS9hcmNoL3NoL21tL3BtYi5jIGIvYXJjaC9zaC9tbS9wbWIuYwppbmRleCBiMWE3MTRhLi5hYWRlMzExIDEwMDY0NAotLS0gYS9hcmNoL3NoL21tL3BtYi5jCisrKyBiL2FyY2gvc2gvbW0vcG1iLmMKQEAgLTMzLDYgKzMzLDggQEAKIAogI2RlZmluZSBOUl9QTUJfRU5UUklFUwkxNgogCitzdGF0aWMgdm9pZCBfX3BtYl91bm1hcChzdHJ1Y3QgcG1iX2VudHJ5ICopOworCiBzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKnBtYl9jYWNoZTsKIHN0YXRpYyB1bnNpZ25lZCBsb25nIHBtYl9tYXA7CiAKQEAgLTIxOCw5ICsyMjAsMTAgQEAKIGxvbmcgcG1iX3JlbWFwKHVuc2lnbmVkIGxvbmcgdmFkZHIsIHVuc2lnbmVkIGxvbmcgcGh5cywKIAkgICAgICAgdW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIGZsYWdzKQogewotCXN0cnVjdCBwbWJfZW50cnkgKnBtYnA7CisJc3RydWN0IHBtYl9lbnRyeSAqcG1icCwgKnBtYmU7CiAJdW5zaWduZWQgbG9uZyB3YW50ZWQ7CiAJaW50IHBtYl9mbGFncywgaTsKKwlsb25nIGVycjsKIAogCS8qIENvbnZlcnQgdHlwaWNhbCBwZ3Byb3QgdmFsdWUgdG8gdGhlIFBNQiBlcXVpdmFsZW50ICovCiAJaWYgKGZsYWdzICYgX1BBR0VfQ0FDSEFCTEUpIHsKQEAgLTIzNiwyMCArMjM5LDIyIEBACiAKIGFnYWluOgogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHBtYl9zaXplcyk7IGkrKykgewotCQlzdHJ1Y3QgcG1iX2VudHJ5ICpwbWJlOwogCQlpbnQgcmV0OwogCiAJCWlmIChzaXplIDwgcG1iX3NpemVzW2ldLnNpemUpCiAJCQljb250aW51ZTsKIAogCQlwbWJlID0gcG1iX2FsbG9jKHZhZGRyLCBwaHlzLCBwbWJfZmxhZ3MgfCBwbWJfc2l6ZXNbaV0uZmxhZyk7Ci0JCWlmIChJU19FUlIocG1iZSkpCi0JCQlyZXR1cm4gUFRSX0VSUihwbWJlKTsKKwkJaWYgKElTX0VSUihwbWJlKSkgeworCQkJZXJyID0gUFRSX0VSUihwbWJlKTsKKwkJCWdvdG8gb3V0OworCQl9CiAKIAkJcmV0ID0gc2V0X3BtYl9lbnRyeShwbWJlKTsKIAkJaWYgKHJldCAhPSAwKSB7CiAJCQlwbWJfZnJlZShwbWJlKTsKLQkJCXJldHVybiAtRUJVU1k7CisJCQllcnIgPSAtRUJVU1k7CisJCQlnb3RvIG91dDsKIAkJfQogCiAJCXBoeXMJKz0gcG1iX3NpemVzW2ldLnNpemU7CkBAIC0yNjQsMTIgKzI2OSwyNSBAQAogCQkJcG1icC0+bGluayA9IHBtYmU7CiAKIAkJcG1icCA9IHBtYmU7CisKKwkJLyoKKwkJICogSW5zdGVhZCBvZiB0cnlpbmcgc21hbGxlciBzaXplcyBvbiBldmVyeSBpdGVyYXRpb24KKwkJICogKGV2ZW4gaWYgd2Ugc3VjY2VlZCBpbiBhbGxvY2F0aW5nIHNwYWNlKSwgdHJ5IHVzaW5nCisJCSAqIHBtYl9zaXplc1tpXS5zaXplIGFnYWluLgorCQkgKi8KKwkJaS0tOwogCX0KIAogCWlmIChzaXplID49IDB4MTAwMDAwMCkKIAkJZ290byBhZ2FpbjsKIAogCXJldHVybiB3YW50ZWQgLSBzaXplOworCitvdXQ6CisJaWYgKHBtYnApCisJCV9fcG1iX3VubWFwKHBtYnApOworCisJcmV0dXJuIGVycjsKIH0KIAogdm9pZCBwbWJfdW5tYXAodW5zaWduZWQgbG9uZyBhZGRyKQpAQCAtMjgzLDEyICszMDEsMTkgQEAKIAlpZiAodW5saWtlbHkoIXBtYmUpKQogCQlyZXR1cm47CiAKKwlfX3BtYl91bm1hcChwbWJlKTsKK30KKworc3RhdGljIHZvaWQgX19wbWJfdW5tYXAoc3RydWN0IHBtYl9lbnRyeSAqcG1iZSkKK3sKIAlXQVJOX09OKCF0ZXN0X2JpdChwbWJlLT5lbnRyeSwgJnBtYl9tYXApKTsKIAogCWRvIHsKIAkJc3RydWN0IHBtYl9lbnRyeSAqcG1ibGluayA9IHBtYmU7CiAKLQkJY2xlYXJfcG1iX2VudHJ5KHBtYmUpOworCQlpZiAocG1iZS0+ZW50cnkgIT0gUE1CX05PX0VOVFJZKQorCQkJY2xlYXJfcG1iX2VudHJ5KHBtYmUpOworCiAJCXBtYmUgPSBwbWJsaW5rLT5saW5rOwogCiAJCXBtYl9mcmVlKHBtYmxpbmspOwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9LY29uZmlnIGIvYXJjaC9zcGFyYy9LY29uZmlnCmluZGV4IDk3ZmNhNDYuLjA1ZWY1MzggMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvS2NvbmZpZworKysgYi9hcmNoL3NwYXJjL0tjb25maWcKQEAgLTI2LDYgKzI2LDcgQEAKIAlzZWxlY3QgUlRDX0NMQVNTCiAJc2VsZWN0IFJUQ19EUlZfTTQ4VDU5CiAJc2VsZWN0IEhBVkVfUEVSRl9FVkVOVFMKKwlzZWxlY3QgUEVSRl9VU0VfVk1BTExPQwogCXNlbGVjdCBIQVZFX0RNQV9BVFRSUwogCXNlbGVjdCBIQVZFX0RNQV9BUElfREVCVUcKIApAQCAtNDgsNiArNDksNyBAQAogCXNlbGVjdCBSVENfRFJWX1NVTjRWCiAJc2VsZWN0IFJUQ19EUlZfU1RBUkZJUkUKIAlzZWxlY3QgSEFWRV9QRVJGX0VWRU5UUworCXNlbGVjdCBQRVJGX1VTRV9WTUFMTE9DCiAKIGNvbmZpZyBBUkNIX0RFRkNPTkZJRwogCXN0cmluZwpAQCAtMTAyLDYgKzEwNCw5IEBACiBjb25maWcgTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LCiAJZGVmX2Jvb2wgeSBpZiBTUEFSQzY0CiAKK2NvbmZpZyBORUVEX1BFUl9DUFVfUEFHRV9GSVJTVF9DSFVOSworCWRlZl9ib29sIHkgaWYgU1BBUkM2NAorCiBjb25maWcgR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRCiAJYm9vbAogCWRlZl9ib29sIHkgaWYgU1BBUkM2NApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9oYXJkaXJxXzMyLmggYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2hhcmRpcnFfMzIuaAppbmRleCA0ZjYzZWQ4Li4xNjIwMDc2IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2hhcmRpcnFfMzIuaAorKysgYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2hhcmRpcnFfMzIuaApAQCAtNywxNyArNyw3IEBACiAjaWZuZGVmIF9fU1BBUkNfSEFSRElSUV9ICiAjZGVmaW5lIF9fU1BBUkNfSEFSRElSUV9ICiAKLSNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLSNpbmNsdWRlIDxsaW51eC9jYWNoZS5oPgotCi0vKiBlbnRyeS5TIGlzIHNlbnNpdGl2ZSB0byB0aGUgb2Zmc2V0cyBvZiB0aGVzZSBmaWVsZHMgKi8gLyogWFhYIFAzIElzIGl0PyAqLwotdHlwZWRlZiBzdHJ1Y3QgewotCXVuc2lnbmVkIGludCBfX3NvZnRpcnFfcGVuZGluZzsKLX0gX19fX2NhY2hlbGluZV9hbGlnbmVkIGlycV9jcHVzdGF0X3Q7Ci0KLSNpbmNsdWRlIDxsaW51eC9pcnFfY3B1c3RhdC5oPgkvKiBTdGFuZGFyZCBtYXBwaW5ncyBmb3IgaXJxX2NwdXN0YXRfdCBhYm92ZSAqLwotCiAjZGVmaW5lIEhBUkRJUlFfQklUUyAgICA4CisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvaGFyZGlycS5oPgogCiAjZW5kaWYgLyogX19TUEFSQ19IQVJESVJRX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vaXJxXzMyLmggYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2lycV8zMi5oCmluZGV4IGVhNDMwNTcuLmNiZjQ4MDEgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vaXJxXzMyLmgKKysrIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9pcnFfMzIuaApAQCAtNiwxMCArNiwxMCBAQAogI2lmbmRlZiBfU1BBUkNfSVJRX0gKICNkZWZpbmUgX1NQQVJDX0lSUV9ICiAKLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLQogI2RlZmluZSBOUl9JUlFTICAgIDE2CiAKKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKwogI2RlZmluZSBpcnFfY2Fub25pY2FsaXplKGlycSkJKGlycSkKIAogZXh0ZXJuIHZvaWQgX19pbml0IGluaXRfSVJRKHZvaWQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wZ3RhYmxlXzY0LmggYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BndGFibGVfNjQuaAppbmRleCAwZmY5MmZhLi5mM2NiNzkwIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BndGFibGVfNjQuaAorKysgYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BndGFibGVfNjQuaApAQCAtNDEsOCArNDEsOCBAQAogI2RlZmluZSBMT1dfT0JQX0FERFJFU1MJCV9BQygweDAwMDAwMDAwZjAwMDAwMDAsVUwpCiAjZGVmaW5lIEhJX09CUF9BRERSRVNTCQlfQUMoMHgwMDAwMDAwMTAwMDAwMDAwLFVMKQogI2RlZmluZSBWTUFMTE9DX1NUQVJUCQlfQUMoMHgwMDAwMDAwMTAwMDAwMDAwLFVMKQotI2RlZmluZSBWTUFMTE9DX0VORAkJX0FDKDB4MDAwMDAwMDIwMDAwMDAwMCxVTCkKLSNkZWZpbmUgVk1FTU1BUF9CQVNFCQlfQUMoMHgwMDAwMDAwMjAwMDAwMDAwLFVMKQorI2RlZmluZSBWTUFMTE9DX0VORAkJX0FDKDB4MDAwMDAxMDAwMDAwMDAwMCxVTCkKKyNkZWZpbmUgVk1FTU1BUF9CQVNFCQlfQUMoMHgwMDAwMDEwMDAwMDAwMDAwLFVMKQogCiAjZGVmaW5lIHZtZW1tYXAJCQkoKHN0cnVjdCBwYWdlICopVk1FTU1BUF9CQVNFKQogCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3Zpby5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS92aW8uaAppbmRleCA2Y2RiZjdlLi45ZDgzZDNiIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3Zpby5oCisrKyBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vdmlvLmgKQEAgLTI1OCw4ICsyNTgsNiBAQAogc3RhdGljIGlubGluZSB1MzIgdmlvX2RyaW5nX2F2YWlsKHN0cnVjdCB2aW9fZHJpbmdfc3RhdGUgKmRyLAogCQkJCSAgdW5zaWduZWQgaW50IHJpbmdfc2l6ZSkKIHsKLQlNQVlCRV9CVUlMRF9CVUdfT04oIWlzX3Bvd2VyX29mXzIocmluZ19zaXplKSk7Ci0KIAlyZXR1cm4gKGRyLT5wZW5kaW5nIC0KIAkJKChkci0+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+dXBwZXJfc2hpZnQ7CkBAIC00NzIsNyArOTYyLDcgQEAKIH0KIAogc3RhdGljIGludCBfX2twcm9iZXMgcGVyZl9ldmVudF9ubWlfaGFuZGxlcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnNlbGYsCi0JCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgY21kLCB2b2lkICpfX2FyZ3MpCisJCQkJCSAgICB1bnNpZ25lZCBsb25nIGNtZCwgdm9pZCAqX19hcmdzKQogewogCXN0cnVjdCBkaWVfYXJncyAqYXJncyA9IF9fYXJnczsKIAlzdHJ1Y3QgcGVyZl9zYW1wbGVfZGF0YSBkYXRhOwpAQCAtNTEzLDcgKzEwMDMsNyBAQAogCQkJY29udGludWU7CiAKIAkJaWYgKHBlcmZfZXZlbnRfb3ZlcmZsb3coZXZlbnQsIDEsICZkYXRhLCByZWdzKSkKLQkJCXNwYXJjX3BtdV9kaXNhYmxlX2V2ZW50KGh3YywgaWR4KTsKKwkJCXNwYXJjX3BtdV9kaXNhYmxlX2V2ZW50KGNwdWMsIGh3YywgaWR4KTsKIAl9CiAKIAlyZXR1cm4gTk9USUZZX1NUT1A7CkBAIC01MjUsOCArMTAxNSwxNSBAQAogCiBzdGF0aWMgYm9vbCBfX2luaXQgc3VwcG9ydGVkX3BtdSh2b2lkKQogewotCWlmICghc3RyY21wKHNwYXJjX3BtdV90eXBlLCAidWx0cmEzaSIpKSB7Ci0JCXNwYXJjX3BtdSA9ICZ1bHRyYTNpX3BtdTsKKwlpZiAoIXN0cmNtcChzcGFyY19wbXVfdHlwZSwgInVsdHJhMyIpIHx8CisJICAgICFzdHJjbXAoc3BhcmNfcG11X3R5cGUsICJ1bHRyYTMrIikgfHwKKwkgICAgIXN0cmNtcChzcGFyY19wbXVfdHlwZSwgInVsdHJhM2kiKSB8fAorCSAgICAhc3RyY21wKHNwYXJjX3BtdV90eXBlLCAidWx0cmE0KyIpKSB7CisJCXNwYXJjX3BtdSA9ICZ1bHRyYTNfcG11OworCQlyZXR1cm4gdHJ1ZTsKKwl9CisJaWYgKCFzdHJjbXAoc3BhcmNfcG11X3R5cGUsICJuaWFnYXJhIikpIHsKKwkJc3BhcmNfcG11ID0gJm5pYWdhcmExX3BtdTsKIAkJcmV0dXJuIHRydWU7CiAJfQogCWlmICghc3RyY21wKHNwYXJjX3BtdV90eXBlLCAibmlhZ2FyYTIiKSkgewpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvc21wXzY0LmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9zbXBfNjQuYwppbmRleCBmZjY4MzczLi5hYTM2MjIzIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9zbXBfNjQuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9zbXBfNjQuYwpAQCAtMTQyMCw3ICsxNDIwLDcgQEAKIAlmcmVlX2Jvb3RtZW0oX19wYShwdHIpLCBzaXplKTsKIH0KIAotc3RhdGljIGludCBwY3B1X2NwdV9kaXN0YW5jZSh1bnNpZ25lZCBpbnQgZnJvbSwgdW5zaWduZWQgaW50IHRvKQorc3RhdGljIGludCBfX2luaXQgcGNwdV9jcHVfZGlzdGFuY2UodW5zaWduZWQgaW50IGZyb20sIHVuc2lnbmVkIGludCB0bykKIHsKIAlpZiAoY3B1X3RvX25vZGUoZnJvbSkgPT0gY3B1X3RvX25vZGUodG8pKQogCQlyZXR1cm4gTE9DQUxfRElTVEFOQ0U7CkBAIC0xNDI4LDE4ICsxNDI4LDUzIEBACiAJCXJldHVybiBSRU1PVEVfRElTVEFOQ0U7CiB9CiAKK3N0YXRpYyB2b2lkIF9faW5pdCBwY3B1X3BvcHVsYXRlX3B0ZSh1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJcGdkX3QgKnBnZCA9IHBnZF9vZmZzZXRfayhhZGRyKTsKKwlwdWRfdCAqcHVkOworCXBtZF90ICpwbWQ7CisKKwlwdWQgPSBwdWRfb2Zmc2V0KHBnZCwgYWRkcik7CisJaWYgKHB1ZF9ub25lKCpwdWQpKSB7CisJCXBtZF90ICpuZXc7CisKKwkJbmV3ID0gX19hbGxvY19ib290bWVtKFBBR0VfU0laRSwgUEFHRV9TSVpFLCBQQUdFX1NJWkUpOworCQlwdWRfcG9wdWxhdGUoJmluaXRfbW0sIHB1ZCwgbmV3KTsKKwl9CisKKwlwbWQgPSBwbWRfb2Zmc2V0KHB1ZCwgYWRkcik7CisJaWYgKCFwbWRfcHJlc2VudCgqcG1kKSkgeworCQlwdGVfdCAqbmV3OworCisJCW5ldyA9IF9fYWxsb2NfYm9vdG1lbShQQUdFX1NJWkUsIFBBR0VfU0laRSwgUEFHRV9TSVpFKTsKKwkJcG1kX3BvcHVsYXRlX2tlcm5lbCgmaW5pdF9tbSwgcG1kLCBuZXcpOworCX0KK30KKwogdm9pZCBfX2luaXQgc2V0dXBfcGVyX2NwdV9hcmVhcyh2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgZGVsdGE7CiAJdW5zaWduZWQgaW50IGNwdTsKLQlpbnQgcmM7CisJaW50IHJjID0gLUVJTlZBTDsKIAotCXJjID0gcGNwdV9lbWJlZF9maXJzdF9jaHVuayhQRVJDUFVfTU9EVUxFX1JFU0VSVkUsCi0JCQkJICAgIFBFUkNQVV9EWU5BTUlDX1JFU0VSVkUsIDQgPDwgMjAsCi0JCQkJICAgIHBjcHVfY3B1X2Rpc3RhbmNlLCBwY3B1X2FsbG9jX2Jvb3RtZW0sCi0JCQkJICAgIHBjcHVfZnJlZV9ib290bWVtKTsKLQlpZiAocmMpCi0JCXBhbmljKCJmYWlsZWQgdG8gaW5pdGlhbGl6ZSBmaXJzdCBjaHVuayAoJWQpIiwgcmMpOworCWlmIChwY3B1X2Nob3Nlbl9mYyAhPSBQQ1BVX0ZDX1BBR0UpIHsKKwkJcmMgPSBwY3B1X2VtYmVkX2ZpcnN0X2NodW5rKFBFUkNQVV9NT0RVTEVfUkVTRVJWRSwKKwkJCQkJICAgIFBFUkNQVV9EWU5BTUlDX1JFU0VSVkUsIDQgPDwgMjAsCisJCQkJCSAgICBwY3B1X2NwdV9kaXN0YW5jZSwKKwkJCQkJICAgIHBjcHVfYWxsb2NfYm9vdG1lbSwKKwkJCQkJICAgIHBjcHVfZnJlZV9ib290bWVtKTsKKwkJaWYgKHJjKQorCQkJcHJfd2FybmluZygiUEVSQ1BVOiAlcyBhbGxvY2F0b3IgZmFpbGVkICglZCksICIKKwkJCQkgICAiZmFsbGluZyBiYWNrIHRvIHBhZ2Ugc2l6ZVxuIiwKKwkJCQkgICBwY3B1X2ZjX25hbWVzW3BjcHVfY2hvc2VuX2ZjXSwgcmMpOworCX0KKwlpZiAocmMgPCAwKQorCQlyYyA9IHBjcHVfcGFnZV9maXJzdF9jaHVuayhQRVJDUFVfTU9EVUxFX1JFU0VSVkUsCisJCQkJCSAgIHBjcHVfYWxsb2NfYm9vdG1lbSwKKwkJCQkJICAgcGNwdV9mcmVlX2Jvb3RtZW0sCisJCQkJCSAgIHBjcHVfcG9wdWxhdGVfcHRlKTsKKwlpZiAocmMgPCAwKQorCQlwYW5pYygiY2Fubm90IGluaXRpYWxpemUgcGVyY3B1IGFyZWEgKGVycj0lZCkiLCByYyk7CiAKIAlkZWx0YSA9ICh1bnNpZ25lZCBsb25nKXBjcHVfYmFzZV9hZGRyIC0gKHVuc2lnbmVkIGxvbmcpX19wZXJfY3B1X3N0YXJ0OwogCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL21tL2luaXRfNjQuYyBiL2FyY2gvc3BhcmMvbW0vaW5pdF82NC5jCmluZGV4IGE3MGE1ZTEuLjE4ODZkMzcgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvbW0vaW5pdF82NC5jCisrKyBiL2FyY2gvc3BhcmMvbW0vaW5pdF82NC5jCkBAIC0yNjUsNyArMjY1LDcgQEAKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAogCXBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pOwotCWlmIChwYWdlICYmIHBhZ2VfbWFwcGluZyhwYWdlKSkgeworCWlmIChwYWdlKSB7CiAJCXVuc2lnbmVkIGxvbmcgcGdfZmxhZ3M7CiAKIAkJcGdfZmxhZ3MgPSBwYWdlLT5mbGFnczsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvb3Byb2ZpbGUvaW5pdC5jIGIvYXJjaC9zcGFyYy9vcHJvZmlsZS9pbml0LmMKaW5kZXggZjk3Y2I4Yi4uZjkwMjRiYyAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9vcHJvZmlsZS9pbml0LmMKKysrIGIvYXJjaC9zcGFyYy9vcHJvZmlsZS9pbml0LmMKQEAgLTExLDYgKzExLDcgQEAKICNpbmNsdWRlIDxsaW51eC9vcHJvZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BhcmFtLmg+CS8qIGZvciBIWiAqLwogIAogI2lmZGVmIENPTkZJR19TUEFSQzY0CiAjaW5jbHVkZSA8bGludXgvbm90aWZpZXIuaD4KZGlmZiAtLWdpdCBhL2FyY2gvdW0vZHJpdmVycy9saW5lLmMgYi9hcmNoL3VtL2RyaXZlcnMvbGluZS5jCmluZGV4IDE0YTEwMmUuLmNmOGE5N2YgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vZHJpdmVycy9saW5lLmMKKysrIGIvYXJjaC91bS9kcml2ZXJzL2xpbmUuYwpAQCAtNSw2ICs1LDcgQEAKIAogI2luY2x1ZGUgImxpbnV4L2lycXJldHVybi5oIgogI2luY2x1ZGUgImxpbnV4L2tkLmgiCisjaW5jbHVkZSAibGludXgvc2NoZWQuaCIKICNpbmNsdWRlICJjaGFuX2tlcm4uaCIKICNpbmNsdWRlICJpcnFfa2Vybi5oIgogI2luY2x1ZGUgImlycV91c2VyLmgiCmRpZmYgLS1naXQgYS9hcmNoL3VtL2RyaXZlcnMvcG9ydF9rZXJuLmMgYi9hcmNoL3VtL2RyaXZlcnMvcG9ydF9rZXJuLmMKaW5kZXggMTk5MzAwOC4uNGViYzhhMyAxMDA2NDQKLS0tIGEvYXJjaC91bS9kcml2ZXJzL3BvcnRfa2Vybi5jCisrKyBiL2FyY2gvdW0vZHJpdmVycy9wb3J0X2tlcm4uYwpAQCAtNyw2ICs3LDcgQEAKICNpbmNsdWRlICJsaW51eC9pbnRlcnJ1cHQuaCIKICNpbmNsdWRlICJsaW51eC9saXN0LmgiCiAjaW5jbHVkZSAibGludXgvbXV0ZXguaCIKKyNpbmNsdWRlICJsaW51eC93b3JrcXVldWUuaCIKICNpbmNsdWRlICJhc20vYXRvbWljLmgiCiAjaW5jbHVkZSAiaW5pdC5oIgogI2luY2x1ZGUgImlycV9rZXJuLmgiCmRpZmYgLS1naXQgYS9hcmNoL3VtL2luY2x1ZGUvYXNtL2NvbW1vbi5sZHMuUyBiL2FyY2gvdW0vaW5jbHVkZS9hc20vY29tbW9uLmxkcy5TCmluZGV4IDM3ZWNjNTUuLmFjNTViOWUgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vaW5jbHVkZS9hc20vY29tbW9uLmxkcy5TCisrKyBiL2FyY2gvdW0vaW5jbHVkZS9hc20vY29tbW9uLmxkcy5TCkBAIC0xNiwxMSArMTYsNyBAQAogCiAgIC4gPSBBTElHTig0MDk2KTsKICAgLm5vdGUgOiB7ICooLm5vdGUuKikgfQotICBfX2V4X3RhYmxlIDogewotCV9fc3RhcnRfX19leF90YWJsZSA9IC47Ci0JKihfX2V4X3RhYmxlKQotCV9fc3RvcF9fX2V4X3RhYmxlID0gLjsKLSAgfQorICBFWENFUFRJT05fVEFCTEUoMCkKIAogICBCVUdfVEFCTEUKIApAQCAtNDMsMjggKzM5LDE3IEBACiAgIH0KIAkKICAgLmluaXQuc2V0dXAgOiB7Ci0JX19zZXR1cF9zdGFydCA9IC47Ci0JKiguaW5pdC5zZXR1cCkKLQlfX3NldHVwX2VuZCA9IC47CisJSU5JVF9TRVRVUCgwKQogICB9CiAKLSAgLiA9IEFMSUdOKDMyKTsKLSAgLmRhdGEucGVyY3B1IDogewotCV9fcGVyX2NwdV9zdGFydCA9IC4gOwotCSooLmRhdGEucGVyY3B1KQotCV9fcGVyX2NwdV9lbmQgPSAuIDsKLSAgfQorICBQRVJDUFUoMzIpCiAJCiAgIC5pbml0Y2FsbC5pbml0IDogewotCV9faW5pdGNhbGxfc3RhcnQgPSAuOwotCUlOSVRDQUxMUwotCV9faW5pdGNhbGxfZW5kID0gLjsKKwlJTklUX0NBTExTCiAgIH0KIAogICAuY29uX2luaXRjYWxsLmluaXQgOiB7Ci0JX19jb25faW5pdGNhbGxfc3RhcnQgPSAuOwotCSooLmNvbl9pbml0Y2FsbC5pbml0KQotCV9fY29uX2luaXRjYWxsX2VuZCA9IC47CisJQ09OX0lOSVRDQUxMCiAgIH0KIAogICAudW1sLmluaXRjYWxsLmluaXQgOiB7CkBAIC0xMTgsOCArMTAzLDYgQEAKIAogICAgLiA9IEFMSUdOKDQwOTYpOwogICAuaW5pdC5yYW1mcyA6IHsKLQlfX2luaXRyYW1mc19zdGFydCA9IC47Ci0JKiguaW5pdC5yYW1mcykKLQlfX2luaXRyYW1mc19lbmQgPSAuOworCUlOSVRfUkFNX0ZTCiAgIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC91bS9rZXJuZWwvZHluLmxkcy5TIGIvYXJjaC91bS9rZXJuZWwvZHluLmxkcy5TCmluZGV4IDcxNWExODguLjdmY2FkNTggMTAwNjQ0Ci0tLSBhL2FyY2gvdW0va2VybmVsL2R5bi5sZHMuUworKysgYi9hcmNoL3VtL2tlcm5lbC9keW4ubGRzLlMKQEAgLTE2LDExICsxNiw3IEBACiAgIF90ZXh0ID0gLjsKICAgX3N0ZXh0ID0gLjsKICAgX19pbml0X2JlZ2luID0gLjsKLSAgLmluaXQudGV4dCA6IHsKLQlfc2luaXR0ZXh0ID0gLjsKLQlJTklUX1RFWFQKLQlfZWluaXR0ZXh0ID0gLjsKLSAgfQorICBJTklUX1RFWFRfU0VDVElPTihQQUdFX1NJWkUpCiAKICAgLiA9IEFMSUdOKFBBR0VfU0laRSk7CiAKQEAgLTk2LDggKzkyLDcgQEAKICAgLmluaXRfYXJyYXkgICAgIDogeyAqKC5pbml0X2FycmF5KSB9CiAgIC5maW5pX2FycmF5ICAgICA6IHsgKiguZmluaV9hcnJheSkgfQogICAuZGF0YSAgICAgICAgICAgOiB7Ci0gICAgLiA9IEFMSUdOKEtFUk5FTF9TVEFDS19TSVpFKTsJCS8qIGluaXRfdGFzayAqLwotICAgICooLmRhdGEuaW5pdF90YXNrKQorICAgIElOSVRfVEFTS19EQVRBKEtFUk5FTF9TVEFDS19TSVpFKQogICAgIC4gPSBBTElHTihLRVJORUxfU1RBQ0tfU0laRSk7CiAgICAgKiguZGF0YS5pbml0X2lycXN0YWNrKQogICAgIERBVEFfREFUQQpkaWZmIC0tZ2l0IGEvYXJjaC91bS9rZXJuZWwvaXJxLmMgYi9hcmNoL3VtL2tlcm5lbC9pcnEuYwppbmRleCA0NTRjZGI0Li4wMzkyNzBiIDEwMDY0NAotLS0gYS9hcmNoL3VtL2tlcm5lbC9pcnEuYworKysgYi9hcmNoL3VtL2tlcm5lbC9pcnEuYwpAQCAtMTAsNiArMTAsNyBAQAogI2luY2x1ZGUgImxpbnV4L2ludGVycnVwdC5oIgogI2luY2x1ZGUgImxpbnV4L2tlcm5lbF9zdGF0LmgiCiAjaW5jbHVkZSAibGludXgvbW9kdWxlLmgiCisjaW5jbHVkZSAibGludXgvc2NoZWQuaCIKICNpbmNsdWRlICJsaW51eC9zZXFfZmlsZS5oIgogI2luY2x1ZGUgImFzLWxheW91dC5oIgogI2luY2x1ZGUgImtlcm5fdXRpbC5oIgpkaWZmIC0tZ2l0IGEvYXJjaC91bS9rZXJuZWwvdW1sLmxkcy5TIGIvYXJjaC91bS9rZXJuZWwvdW1sLmxkcy5TCmluZGV4IDJlYmQzOTcuLmU3YTZjY2EgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0va2VybmVsL3VtbC5sZHMuUworKysgYi9hcmNoL3VtL2tlcm5lbC91bWwubGRzLlMKQEAgLTIyLDExICsyMiw3IEBACiAgIF90ZXh0ID0gLjsKICAgX3N0ZXh0ID0gLjsKICAgX19pbml0X2JlZ2luID0gLjsKLSAgLmluaXQudGV4dCA6IHsKLQlfc2luaXR0ZXh0ID0gLjsKLQlJTklUX1RFWFQKLQlfZWluaXR0ZXh0ID0gLjsKLSAgfQorICBJTklUX1RFWFRfU0VDVElPTihQQUdFX1NJWkUpCiAgIC4gPSBBTElHTihQQUdFX1NJWkUpOwogCiAgIC50ZXh0ICAgICAgOgpAQCAtNTIsOCArNDgsNyBAQAogICBpbml0LmRhdGEgOiB7IElOSVRfREFUQSB9CiAgIC5kYXRhICAgIDoKICAgewotICAgIC4gPSBBTElHTihLRVJORUxfU1RBQ0tfU0laRSk7CQkvKiBpbml0X3Rhc2sgKi8KLSAgICAqKC5kYXRhLmluaXRfdGFzaykKKyAgICBJTklUX1RBU0tfREFUQShLRVJORUxfU1RBQ0tfU0laRSkKICAgICAuID0gQUxJR04oS0VSTkVMX1NUQUNLX1NJWkUpOwogICAgICooLmRhdGEuaW5pdF9pcnFzdGFjaykKICAgICBEQVRBX0RBVEEKQEAgLTgxLDE5ICs3NiwxMCBAQAogICBfZWRhdGEgID0gIC47CiAgIFBST1ZJREUgKGVkYXRhID0gLik7CiAgIC4gPSBBTElHTihQQUdFX1NJWkUpOwotICAuc2JzcyAgICAgIDoKLSAgewotICAgX19ic3Nfc3RhcnQgPSAuOwotICAgUFJPVklERShfYnNzX3N0YXJ0ID0gLik7Ci0gICAqKC5zYnNzKQotICAgKiguc2NvbW1vbikKLSAgfQotICAuYnNzICAgICAgIDoKLSAgewotICAgKiguZHluYnNzKQotICAgKiguYnNzKQotICAgKihDT01NT04pCi0gIH0KKyAgX19ic3Nfc3RhcnQgPSAuOworICBQUk9WSURFKF9ic3Nfc3RhcnQgPSAuKTsKKyAgU0JTUygwKQorICBCU1MoMCkKICAgX2VuZCA9IC47CiAgIFBST1ZJREUgKGVuZCA9IC4pOwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9LY29uZmlnIGIvYXJjaC94ODYvS2NvbmZpZwppbmRleCA5MzY5ODc5Li43MmFjZTk1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9LY29uZmlnCisrKyBiL2FyY2gveDg2L0tjb25maWcKQEAgLTg2LDEwICs4Niw2IEBACiBjb25maWcgSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQKIAlkZWZfYm9vbCB5CiAKLWNvbmZpZyBGQVNUX0NNUFhDSEdfTE9DQUwKLQlib29sCi0JZGVmYXVsdCB5Ci0KIGNvbmZpZyBNTVUKIAlkZWZfYm9vbCB5CiAKQEAgLTQzMiw2ICs0MjgsMTcgQEAKIAkgIG9mIEZsYXQgTG9naWNhbC4gIFlvdSB3aWxsIG5lZWQgYSBuZXcgbHlueGVyLmVsZiBmaWxlIHRvIGZsYXNoIHlvdXIKIAkgIGZpcm13YXJlIHdpdGggLSBzZW5kIGVtYWlsIHRvIDxNYXJ0aW4uQmxpZ2hAdXMuaWJtLmNvbT4uCiAKK2NvbmZpZyBYODZfU1VQUE9SVFNfTUVNT1JZX0ZBSUxVUkUKKwlib29sCisJIyBNQ0UgY29kZSBjYWxscyBtZW1vcnlfZmFpbHVyZSgpOgorCWRlcGVuZHMgb24gWDg2X01DRQorCSMgT24gMzItYml0IHRoaXMgYWRkcyB0b28gYmlnIG9mIE5PREVTX1NISUZUIGFuZCB3ZSBydW4gb3V0IG9mIHBhZ2UgZmxhZ3M6CisJZGVwZW5kcyBvbiAhWDg2X05VTUFRCisJIyBPbiAzMi1iaXQgU1BBUlNFTUVNIGFkZHMgdG9vIGJpZyBvZiBTRUNUSU9OU19XSURUSDoKKwlkZXBlbmRzIG9uIFg4Nl82NCB8fCAhU1BBUlNFTUVNCisJc2VsZWN0IEFSQ0hfU1VQUE9SVFNfTUVNT1JZX0ZBSUxVUkUKKwlkZWZhdWx0IHkKKwogY29uZmlnIFg4Nl9WSVNXUwogCWJvb2wgIlNHSSAzMjAvNTQwIChWaXN1YWwgV29ya3N0YXRpb24pIgogCWRlcGVuZHMgb24gWDg2XzMyICYmIFBDSSAmJiBYODZfTVBQQVJTRSAmJiBQQ0lfR09ESVJFQ1QKQEAgLTQ4NCw3ICs0OTEsNyBAQAogc291cmNlICJhcmNoL3g4Ni94ZW4vS2NvbmZpZyIKIAogY29uZmlnIFZNSQotCWJvb2wgIlZNSSBHdWVzdCBzdXBwb3J0IgorCWJvb2wgIlZNSSBHdWVzdCBzdXBwb3J0IChERVBSRUNBVEVEKSIKIAlzZWxlY3QgUEFSQVZJUlQKIAlkZXBlbmRzIG9uIFg4Nl8zMgogCS0tLWhlbHAtLS0KQEAgLTQ5Myw2ICs1MDAsMTUgQEAKIAkgIGF0IHRoZSBtb21lbnQpLCBieSBsaW5raW5nIHRoZSBrZXJuZWwgdG8gYSBHUEwtZWQgUk9NIG1vZHVsZQogCSAgcHJvdmlkZWQgYnkgdGhlIGh5cGVydmlzb3IuCiAKKwkgIEFzIG9mIFNlcHRlbWJlciAyMDA5LCBWTXdhcmUgaGFzIHN0YXJ0ZWQgYSBwaGFzZWQgcmV0aXJlbWVudAorCSAgb2YgdGhpcyBmZWF0dXJlIGZyb20gVk13YXJlJ3MgcHJvZHVjdHMuIFBsZWFzZSBzZWUKKwkgIGZlYXR1cmUtcmVtb3ZhbC1zY2hlZHVsZS50eHQgZm9yIGRldGFpbHMuICBJZiB5b3UgYXJlCisJICBwbGFubmluZyB0byBlbmFibGUgdGhpcyBvcHRpb24sIHBsZWFzZSBub3RlIHRoYXQgeW91IGNhbm5vdAorCSAgbGl2ZSBtaWdyYXRlIGEgVk1JIGVuYWJsZWQgVk0gdG8gYSBmdXR1cmUgVk13YXJlIHByb2R1Y3QsCisJICB3aGljaCBkb2Vzbid0IHN1cHBvcnQgVk1JLiBTbyBpZiB5b3UgZXhwZWN0IHlvdXIga2VybmVsIHRvCisJICBzZWFtbGVzc2x5IG1pZ3JhdGUgdG8gbmV3ZXIgVk13YXJlIHByb2R1Y3RzLCBrZWVwIHRoaXMKKwkgIGRpc2FibGVkLgorCiBjb25maWcgS1ZNX0NMT0NLCiAJYm9vbCAiS1ZNIHBhcmF2aXJ0dWFsaXplZCBjbG9jayIKIAlzZWxlY3QgUEFSQVZJUlQKQEAgLTE0MjcsMTIgKzE0NDMsOCBAQAogCiAJICBJZiB1bnN1cmUsIHNheSBZLiBPbmx5IGVtYmVkZGVkIHNob3VsZCBzYXkgTiBoZXJlLgogCi1jb25maWcgQ0NfU1RBQ0tQUk9URUNUT1JfQUxMCi0JYm9vbAotCiBjb25maWcgQ0NfU1RBQ0tQUk9URUNUT1IKIAlib29sICJFbmFibGUgLWZzdGFjay1wcm90ZWN0b3IgYnVmZmVyIG92ZXJmbG93IGRldGVjdGlvbiAoRVhQRVJJTUVOVEFMKSIKLQlzZWxlY3QgQ0NfU1RBQ0tQUk9URUNUT1JfQUxMCiAJLS0taGVscC0tLQogCSAgVGhpcyBvcHRpb24gdHVybnMgb24gdGhlIC1mc3RhY2stcHJvdGVjdG9yIEdDQyBmZWF0dXJlLiBUaGlzCiAJICBmZWF0dXJlIHB1dHMsIGF0IHRoZSBiZWdpbm5pbmcgb2YgZnVuY3Rpb25zLCBhIGNhbmFyeSB2YWx1ZSBvbgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvS2NvbmZpZy5jcHUgYi9hcmNoL3g4Ni9LY29uZmlnLmNwdQppbmRleCA1Mjc1MTliLi4yNjQ5ODQwIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9LY29uZmlnLmNwdQorKysgYi9hcmNoL3g4Ni9LY29uZmlnLmNwdQpAQCAtNDAwLDcgKzQwMCw3IEBACiAKIGNvbmZpZyBYODZfQ01QWENIRzY0CiAJZGVmX2Jvb2wgeQotCWRlcGVuZHMgb24gWDg2X1BBRSB8fCBYODZfNjQKKwlkZXBlbmRzIG9uICFNMzg2ICYmICFNNDg2CiAKICMgdGhpcyBzaG91bGQgYmUgc2V0IGZvciBhbGwgLW1hcmNoPS4uIG9wdGlvbnMgd2hlcmUgdGhlIGNvbXBpbGVyCiAjIGdlbmVyYXRlcyBjbW92LgpAQCAtNDEyLDYgKzQxMiw3IEBACiAJaW50CiAJZGVmYXVsdCAiNjQiIGlmIFg4Nl82NAogCWRlZmF1bHQgIjYiIGlmIFg4Nl8zMiAmJiBYODZfUDZfTk9QCisJZGVmYXVsdCAiNSIgaWYgWDg2XzMyICYmIFg4Nl9DTVBYQ0hHNjQKIAlkZWZhdWx0ICI0IiBpZiBYODZfMzIgJiYgKFg4Nl9YQUREIHx8IFg4Nl9DTVBYQ0hHIHx8IFg4Nl9CU1dBUCB8fCBYODZfV1BfV09SS1NfT0spCiAJZGVmYXVsdCAiMyIKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvTWFrZWZpbGUgYi9hcmNoL3g4Ni9NYWtlZmlsZQppbmRleCBhMDEyZWU4Li5kMmQyNGM5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9NYWtlZmlsZQorKysgYi9hcmNoL3g4Ni9NYWtlZmlsZQpAQCAtNzYsNyArNzYsNiBAQAogCWNjX2hhc19zcCA6PSAkKHNyY3RyZWUpL3NjcmlwdHMvZ2NjLXg4Nl8kKEJJVFMpLWhhcy1zdGFjay1wcm90ZWN0b3Iuc2gKICAgICAgICAgaWZlcSAoJChzaGVsbCAkKENPTkZJR19TSEVMTCkgJChjY19oYXNfc3ApICQoQ0MpICQoYmlhcmNoKSkseSkKICAgICAgICAgICAgICAgICBzdGFja3AteSA6PSAtZnN0YWNrLXByb3RlY3RvcgotICAgICAgICAgICAgICAgIHN0YWNrcC0kKENPTkZJR19DQ19TVEFDS1BST1RFQ1RPUl9BTEwpICs9IC1mc3RhY2stcHJvdGVjdG9yLWFsbAogICAgICAgICAgICAgICAgIEtCVUlMRF9DRkxBR1MgKz0gJChzdGFja3AteSkKICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICQod2FybmluZyBzdGFjayBwcm90ZWN0b3IgZW5hYmxlZCBidXQgbm8gY29tcGlsZXIgc3VwcG9ydCkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9oZWFkXzMyLlMgYi9hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvaGVhZF8zMi5TCmluZGV4IDc1ZTRmMDAuLmY1NDNiNzAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9oZWFkXzMyLlMKKysrIGIvYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL2hlYWRfMzIuUwpAQCAtMjMsMTMgKzIzLDE0IEBACiAgKi8KIAkudGV4dAogCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KICNpbmNsdWRlIDxhc20vc2VnbWVudC5oPgogI2luY2x1ZGUgPGFzbS9wYWdlX3R5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL2Jvb3QuaD4KICNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KIAotCS5zZWN0aW9uICIudGV4dC5oZWFkIiwiYXgiLEBwcm9nYml0cworCV9fSEVBRAogRU5UUlkoc3RhcnR1cF8zMikKIAljbGQKIAkvKgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL2hlYWRfNjQuUyBiL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9oZWFkXzY0LlMKaW5kZXggZjYyYzI4NC4uMDc3ZTFiNiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL2hlYWRfNjQuUworKysgYi9hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvaGVhZF82NC5TCkBAIC0yNCw2ICsyNCw3IEBACiAJLmNvZGUzMgogCS50ZXh0CiAKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgogI2luY2x1ZGUgPGFzbS9zZWdtZW50Lmg+CiAjaW5jbHVkZSA8YXNtL3BndGFibGVfdHlwZXMuaD4KQEAgLTMzLDcgKzM0LDcgQEAKICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLWZsYWdzLmg+CiAjaW5jbHVkZSA8YXNtL2FzbS1vZmZzZXRzLmg+CiAKLQkuc2VjdGlvbiAiLnRleHQuaGVhZCIKKwlfX0hFQUQKIAkuY29kZTMyCiBFTlRSWShzdGFydHVwXzMyKQogCWNsZApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL3ZtbGludXgubGRzLlMgYi9hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvdm1saW51eC5sZHMuUwppbmRleCBjYzM1M2UxLi5mNDE5M2JiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvdm1saW51eC5sZHMuUworKysgYi9hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvdm1saW51eC5sZHMuUwpAQCAtMSwzICsxLDUgQEAKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy92bWxpbnV4Lmxkcy5oPgorCiBPVVRQVVRfRk9STUFUKENPTkZJR19PVVRQVVRfRk9STUFULCBDT05GSUdfT1VUUFVUX0ZPUk1BVCwgQ09ORklHX09VVFBVVF9GT1JNQVQpCiAKICN1bmRlZiBpMzg2CkBAIC0xOCw5ICsyMCw5IEBACiAJICogYWRkcmVzcyAwLgogCSAqLwogCS4gPSAwOwotCS50ZXh0LmhlYWQgOiB7CisJLmhlYWQudGV4dCA6IHsKIAkJX2hlYWQgPSAuIDsKLQkJKigudGV4dC5oZWFkKQorCQlIRUFEX1RFWFQKIAkJX2VoZWFkID0gLiA7CiAJfQogCS5yb2RhdGEuY29tcHJlc3NlZCA6IHsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2Jvb3Qvc2V0dXAubGQgYi9hcmNoL3g4Ni9ib290L3NldHVwLmxkCmluZGV4IDBmNmVjNDU1Li4wM2MwNjgzIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9ib290L3NldHVwLmxkCisrKyBiL2FyY2gveDg2L2Jvb3Qvc2V0dXAubGQKQEAgLTUzLDYgKzUzLDkgQEAKIAogCS9ESVNDQVJELyA6IHsgKigubm90ZSopIH0KIAorCS8qCisJICogVGhlIEFTU0VSVCgpIHNpbmsgdG8gLiBpcyBpbnRlbnRpb25hbCwgZm9yIGJpbnV0aWxzIDIuMTQgY29tcGF0aWJpbGl0eToKKwkgKi8KIAkuID0gQVNTRVJUKF9lbmQgPD0gMHg4MDAwLCAiU2V0dXAgdG9vIGJpZyEiKTsKIAkuID0gQVNTRVJUKGhkciA9PSAweDFmMSwgIlRoZSBzZXR1cCBoZWFkZXIgaGFzIHRoZSB3cm9uZyBvZmZzZXQhIik7CiAJLyogTmVjZXNzYXJ5IGZvciB0aGUgdmVyeS1vbGQtbG9hZGVyIGNoZWNrIHRvIHdvcmsuLi4gKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2NyeXB0by9hZXNuaS1pbnRlbF9nbHVlLmMgYi9hcmNoL3g4Ni9jcnlwdG8vYWVzbmktaW50ZWxfZ2x1ZS5jCmluZGV4IDU4NWVkZWIuLjQ5YzU1MmMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2NyeXB0by9hZXNuaS1pbnRlbF9nbHVlLmMKKysrIGIvYXJjaC94ODYvY3J5cHRvL2Flc25pLWludGVsX2dsdWUuYwpAQCAtODIsNyArODIsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlpZiAoaXJxX2ZwdV91c2FibGUoKSkKKwlpZiAoIWlycV9mcHVfdXNhYmxlKCkpCiAJCWVyciA9IGNyeXB0b19hZXNfZXhwYW5kX2tleShjdHgsIGluX2tleSwga2V5X2xlbik7CiAJZWxzZSB7CiAJCWtlcm5lbF9mcHVfYmVnaW4oKTsKQEAgLTEwMyw3ICsxMDMsNyBAQAogewogCXN0cnVjdCBjcnlwdG9fYWVzX2N0eCAqY3R4ID0gYWVzX2N0eChjcnlwdG9fdGZtX2N0eCh0Zm0pKTsKIAotCWlmIChpcnFfZnB1X3VzYWJsZSgpKQorCWlmICghaXJxX2ZwdV91c2FibGUoKSkKIAkJY3J5cHRvX2Flc19lbmNyeXB0X3g4NihjdHgsIGRzdCwgc3JjKTsKIAllbHNlIHsKIAkJa2VybmVsX2ZwdV9iZWdpbigpOwpAQCAtMTE2LDcgKzExNiw3IEBACiB7CiAJc3RydWN0IGNyeXB0b19hZXNfY3R4ICpjdHggPSBhZXNfY3R4KGNyeXB0b190Zm1fY3R4KHRmbSkpOwogCi0JaWYgKGlycV9mcHVfdXNhYmxlKCkpCisJaWYgKCFpcnFfZnB1X3VzYWJsZSgpKQogCQljcnlwdG9fYWVzX2RlY3J5cHRfeDg2KGN0eCwgZHN0LCBzcmMpOwogCWVsc2UgewogCQlrZXJuZWxfZnB1X2JlZ2luKCk7CkBAIC0zNDIsNyArMzQyLDcgQEAKIAlzdHJ1Y3QgY3J5cHRvX2FibGtjaXBoZXIgKnRmbSA9IGNyeXB0b19hYmxrY2lwaGVyX3JlcXRmbShyZXEpOwogCXN0cnVjdCBhc3luY19hZXNfY3R4ICpjdHggPSBjcnlwdG9fYWJsa2NpcGhlcl9jdHgodGZtKTsKIAotCWlmIChpcnFfZnB1X3VzYWJsZSgpKSB7CisJaWYgKCFpcnFfZnB1X3VzYWJsZSgpKSB7CiAJCXN0cnVjdCBhYmxrY2lwaGVyX3JlcXVlc3QgKmNyeXB0ZF9yZXEgPQogCQkJYWJsa2NpcGhlcl9yZXF1ZXN0X2N0eChyZXEpOwogCQltZW1jcHkoY3J5cHRkX3JlcSwgcmVxLCBzaXplb2YoKnJlcSkpOwpAQCAtMzYzLDcgKzM2Myw3IEBACiAJc3RydWN0IGNyeXB0b19hYmxrY2lwaGVyICp0Zm0gPSBjcnlwdG9fYWJsa2NpcGhlcl9yZXF0Zm0ocmVxKTsKIAlzdHJ1Y3QgYXN5bmNfYWVzX2N0eCAqY3R4ID0gY3J5cHRvX2FibGtjaXBoZXJfY3R4KHRmbSk7CiAKLQlpZiAoaXJxX2ZwdV91c2FibGUoKSkgeworCWlmICghaXJxX2ZwdV91c2FibGUoKSkgewogCQlzdHJ1Y3QgYWJsa2NpcGhlcl9yZXF1ZXN0ICpjcnlwdGRfcmVxID0KIAkJCWFibGtjaXBoZXJfcmVxdWVzdF9jdHgocmVxKTsKIAkJbWVtY3B5KGNyeXB0ZF9yZXEsIHJlcSwgc2l6ZW9mKCpyZXEpKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2lhMzIvaWEzMmVudHJ5LlMgYi9hcmNoL3g4Ni9pYTMyL2lhMzJlbnRyeS5TCmluZGV4IDc0NjE5YzQuLjU4MWIwNTYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2lhMzIvaWEzMmVudHJ5LlMKKysrIGIvYXJjaC94ODYvaWEzMi9pYTMyZW50cnkuUwpAQCAtMjEsOCArMjEsOCBAQAogI2RlZmluZSBfX0FVRElUX0FSQ0hfTEUJICAgMHg0MDAwMDAwMAogCiAjaWZuZGVmIENPTkZJR19BVURJVFNZU0NBTEwKLSNkZWZpbmUgc3lzZXhpdF9hdWRpdCBpbnRfcmV0X2Zyb21fc3lzX2NhbGwKLSNkZWZpbmUgc3lzcmV0bF9hdWRpdCBpbnRfcmV0X2Zyb21fc3lzX2NhbGwKKyNkZWZpbmUgc3lzZXhpdF9hdWRpdCBpYTMyX3JldF9mcm9tX3N5c19jYWxsCisjZGVmaW5lIHN5c3JldGxfYXVkaXQgaWEzMl9yZXRfZnJvbV9zeXNfY2FsbAogI2VuZGlmCiAKICNkZWZpbmUgSUEzMl9OUl9zeXNjYWxscyAoKGlhMzJfc3lzY2FsbF9lbmQgLSBpYTMyX3N5c19jYWxsX3RhYmxlKS84KQpAQCAtMzksMTIgKzM5LDEyIEBACiAJLmVuZG0gCiAKIAkvKiBjbG9iYmVycyAlZWF4ICovCQotCS5tYWNybyAgQ0xFQVJfUlJFR1MgX3I5PXJheAorCS5tYWNybyAgQ0xFQVJfUlJFR1Mgb2Zmc2V0PTAsIF9yOT1yYXgKIAl4b3JsIAklZWF4LCVlYXgKLQltb3ZxCSVyYXgsUjExKCVyc3ApCi0JbW92cQklcmF4LFIxMCglcnNwKQotCW1vdnEJJVxfcjksUjkoJXJzcCkKLQltb3ZxCSVyYXgsUjgoJXJzcCkKKwltb3ZxCSVyYXgsXG9mZnNldCtSMTEoJXJzcCkKKwltb3ZxCSVyYXgsXG9mZnNldCtSMTAoJXJzcCkKKwltb3ZxCSVcX3I5LFxvZmZzZXQrUjkoJXJzcCkKKwltb3ZxCSVyYXgsXG9mZnNldCtSOCglcnNwKQogCS5lbmRtCiAKIAkvKgpAQCAtMTcyLDYgKzE3MiwxMCBAQAogCW1vdmwJUklQLVIxMSglcnNwKSwlZWR4CQkvKiBVc2VyICVlaXAgKi8KIAlDRklfUkVHSVNURVIgcmlwLHJkeAogCVJFU1RPUkVfQVJHUyAxLDI0LDEsMSwxLDEKKwl4b3JxCSVyOCwlcjgKKwl4b3JxCSVyOSwlcjkKKwl4b3JxCSVyMTAsJXIxMAorCXhvcnEJJXIxMSwlcjExCiAJcG9wZnEKIAlDRklfQURKVVNUX0NGQV9PRkZTRVQgLTgKIAkvKkNGSV9SRVNUT1JFIHJmbGFncyovCkBAIC0yMDAsOSArMjA0LDkgQEAKIAltb3ZsIFJESS1BUkdPRkZTRVQoJXJzcCksJXI4ZAkvKiByZWxvYWQgNXRoIHN5c2NhbGwgYXJnICovCiAJLmVuZG0KIAotCS5tYWNybyBhdWRpdHN5c19leGl0IGV4aXQsZWJwc2F2ZT1SQlAKKwkubWFjcm8gYXVkaXRzeXNfZXhpdCBleGl0CiAJdGVzdGwgJChfVElGX0FMTFdPUktfTUFTSyAmIH5fVElGX1NZU0NBTExfQVVESVQpLFRJX2ZsYWdzKCVyMTApCi0Jam56IGludF9yZXRfZnJvbV9zeXNfY2FsbAorCWpueiBpYTMyX3JldF9mcm9tX3N5c19jYWxsCiAJVFJBQ0VfSVJRU19PTgogCXN0aQogCW1vdmwgJWVheCwlZXNpCQkvKiBzZWNvbmQgYXJnLCBzeXNjYWxsIHJldHVybiB2YWx1ZSAqLwpAQCAtMjEzLDEzICsyMTcsMTMgQEAKIAljYWxsIGF1ZGl0X3N5c2NhbGxfZXhpdAogCUdFVF9USFJFQURfSU5GTyglcjEwKQogCW1vdmwgUkFYLUFSR09GRlNFVCglcnNwKSwlZWF4CS8qIHJlbG9hZCBzeXNjYWxsIHJldHVybiB2YWx1ZSAqLwotCW1vdmwgXGVicHNhdmUtQVJHT0ZGU0VUKCVyc3ApLCVlYnAgLyogcmVsb2FkIHVzZXIgcmVnaXN0ZXIgdmFsdWUgKi8KIAltb3ZsICQoX1RJRl9BTExXT1JLX01BU0sgJiB+X1RJRl9TWVNDQUxMX0FVRElUKSwlZWRpCiAJY2xpCiAJVFJBQ0VfSVJRU19PRkYKIAl0ZXN0bCAlZWRpLFRJX2ZsYWdzKCVyMTApCi0Jam56IGludF93aXRoX2NoZWNrCi0Jam1wIFxleGl0CisJanogXGV4aXQKKwlDTEVBUl9SUkVHUyAtQVJHT0ZGU0VUCisJam1wIGludF93aXRoX2NoZWNrCiAJLmVuZG0KIAogc3lzZW50ZXJfYXVkaXRzeXM6CkBAIC0zMjksNiArMzMzLDkgQEAKIAlDRklfUkVHSVNURVIgcmlwLHJjeAogCW1vdmwgRUZMQUdTLUFSR09GRlNFVCglcnNwKSwlcjExZAkKIAkvKkNGSV9SRUdJU1RFUiByZmxhZ3MscjExKi8KKwl4b3JxCSVyMTAsJXIxMAorCXhvcnEJJXI5LCVyOQorCXhvcnEJJXI4LCVyOAogCVRSQUNFX0lSUVNfT04KIAltb3ZsIFJTUC1BUkdPRkZTRVQoJXJzcCksJWVzcAogCUNGSV9SRVNUT1JFIHJzcApAQCAtMzQzLDcgKzM1MCw3IEBACiAJam1wIGNzdGFyX2Rpc3BhdGNoCiAKIHN5c3JldGxfYXVkaXQ6Ci0JYXVkaXRzeXNfZXhpdCBzeXNyZXRsX2Zyb21fc3lzX2NhbGwsIFJDWCAvKiB1c2VyICVlYnAgaW4gUkNYIHNsb3QgKi8KKwlhdWRpdHN5c19leGl0IHN5c3JldGxfZnJvbV9zeXNfY2FsbAogI2VuZGlmCiAKIGNzdGFyX3RyYWNlc3lzOgpAQCAtMzUzLDcgKzM2MCw3IEBACiAjZW5kaWYKIAl4Y2hnbCAlcjlkLCVlYnAKIAlTQVZFX1JFU1QKLQlDTEVBUl9SUkVHUyByOQorCUNMRUFSX1JSRUdTIDAsIHI5CiAJbW92cSAkLUVOT1NZUyxSQVgoJXJzcCkJLyogcHRyYWNlIGNhbiBjaGFuZ2UgdGhpcyBmb3IgYSBiYWQgc3lzY2FsbCAqLwogCW1vdnEgJXJzcCwlcmRpICAgICAgICAvKiAmcHRfcmVncyAtPiBhcmcxICovCiAJY2FsbCBzeXNjYWxsX3RyYWNlX2VudGVyCkBAIC00MjUsNiArNDMyLDggQEAKIAljYWxsICppYTMyX3N5c19jYWxsX3RhYmxlKCwlcmF4LDgpICMgeHh4OiByaXAgcmVsYXRpdmUKIGlhMzJfc3lzcmV0OgogCW1vdnEgJXJheCxSQVgtQVJHT0ZGU0VUKCVyc3ApCitpYTMyX3JldF9mcm9tX3N5c19jYWxsOgorCUNMRUFSX1JSRUdTIC1BUkdPRkZTRVQKIAlqbXAgaW50X3JldF9mcm9tX3N5c19jYWxsIAogCiBpYTMyX3RyYWNlc3lzOgkJCSAKQEAgLTQ0Miw4ICs0NTEsOCBAQAogCiBpYTMyX2JhZHN5czoKIAltb3ZxICQwLE9SSUdfUkFYLUFSR09GRlNFVCglcnNwKQotCW1vdnEgJC1FTk9TWVMsUkFYLUFSR09GRlNFVCglcnNwKQotCWptcCBpbnRfcmV0X2Zyb21fc3lzX2NhbGwKKwltb3ZxICQtRU5PU1lTLCVyYXgKKwlqbXAgaWEzMl9zeXNyZXQKIAogcXVpZXRfbmlfc3lzY2FsbDoKIAltb3ZxICQtRU5PU1lTLCVyYXgKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NoZWNrc3VtXzMyLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jaGVja3N1bV8zMi5oCmluZGV4IDdjNWVmOGIuLjQ2ZmM0NzQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NoZWNrc3VtXzMyLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vY2hlY2tzdW1fMzIuaApAQCAtMTYxLDcgKzE2MSw4IEBACiAJICAgICJhZGNsICQwLCAlMAk7XG4iCiAJICAgIDogIj0mciIgKHN1bSkKIAkgICAgOiAiciIgKHNhZGRyKSwgInIiIChkYWRkciksCi0JICAgICAgInIiIChodG9ubChsZW4pKSwgInIiIChodG9ubChwcm90bykpLCAiMCIgKHN1bSkpOworCSAgICAgICJyIiAoaHRvbmwobGVuKSksICJyIiAoaHRvbmwocHJvdG8pKSwgIjAiIChzdW0pCisJICAgIDogIm1lbW9yeSIpOwogCiAJcmV0dXJuIGNzdW1fZm9sZChzdW0pOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vY21weGNoZ18zMi5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vY21weGNoZ18zMi5oCmluZGV4IDgyY2ViNzguLmVlMTkzMWIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NtcHhjaGdfMzIuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jbXB4Y2hnXzMyLmgKQEAgLTMxMiwxOSArMzEyLDIzIEBACiAKIGV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgY21weGNoZ180ODZfdTY0KHZvbGF0aWxlIHZvaWQgKiwgdTY0LCB1NjQpOwogCi0jZGVmaW5lIGNtcHhjaGc2NChwdHIsIG8sIG4pCQkJCQkJXAotKHsJCQkJCQkJCQlcCi0JX190eXBlb2ZfXygqKHB0cikpIF9fcmV0OwkJCQkJXAotCWlmIChsaWtlbHkoYm9vdF9jcHVfZGF0YS54ODYgPiA0KSkJCQkJXAotCQlfX3JldCA9IChfX3R5cGVvZl9fKCoocHRyKSkpX19jbXB4Y2hnNjQoKHB0ciksCQlcCi0JCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykobyksCQlcCi0JCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykobikpOwkJXAotCWVsc2UJCQkJCQkJCVwKLQkJX19yZXQgPSAoX190eXBlb2ZfXygqKHB0cikpKWNtcHhjaGdfNDg2X3U2NCgocHRyKSwJXAotCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpKG8pLAkJXAotCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpKG4pKTsJCVwKLQlfX3JldDsJCQkJCQkJCVwKLX0pCisjZGVmaW5lIGNtcHhjaGc2NChwdHIsIG8sIG4pCQkJCQlcCisoewkJCQkJCQkJXAorCV9fdHlwZW9mX18oKihwdHIpKSBfX3JldDsJCQkJXAorCV9fdHlwZW9mX18oKihwdHIpKSBfX29sZCA9IChvKTsJCQkJXAorCV9fdHlwZW9mX18oKihwdHIpKSBfX25ldyA9IChuKTsJCQkJXAorCWFsdGVybmF0aXZlX2lvKCJjYWxsIGNtcHhjaGc4Yl9lbXUiLAkJCVwKKwkJCSJsb2NrOyBjbXB4Y2hnOGIgKCUlZXNpKSIgLAkJXAorCQkgICAgICAgWDg2X0ZFQVRVUkVfQ1g4LAkJCQlcCisJCSAgICAgICAiPUEiIChfX3JldCksCQkJCVwKKwkJICAgICAgICJTIiAoKHB0cikpLCAiMCIgKF9fb2xkKSwJCVwKKwkJICAgICAgICJiIiAoKHVuc2lnbmVkIGludClfX25ldyksCQlcCisJCSAgICAgICAiYyIgKCh1bnNpZ25lZCBpbnQpKF9fbmV3Pj4zMikpCQlcCisJCSAgICAgICA6ICJtZW1vcnkiKTsJCQkJXAorCV9fcmV0OyB9KQorCisKKwogI2RlZmluZSBjbXB4Y2hnNjRfbG9jYWwocHRyLCBvLCBuKQkJCQkJXAogKHsJCQkJCQkJCQlcCiAJX190eXBlb2ZfXygqKHB0cikpIF9fcmV0OwkJCQkJXApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKaW5kZXggM2JlMDAwNC4uZDgzODkyMiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCkBAIC03OTYsNiArNzk2LDcgQEAKICNkZWZpbmUgS1ZNX0FSQ0hfV0FOVF9NTVVfTk9USUZJRVIKIGludCBrdm1fdW5tYXBfaHZhKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBodmEpOwogaW50IGt2bV9hZ2VfaHZhKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBodmEpOwordm9pZCBrdm1fc2V0X3NwdGVfaHZhKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBodmEsIHB0ZV90IHB0ZSk7CiBpbnQgY3B1aWRfbWF4cGh5YWRkcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogaW50IGt2bV9jcHVfaGFzX2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogaW50IGt2bV9hcmNoX2ludGVycnVwdF9hbGxvd2VkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tY2UuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21jZS5oCmluZGV4IGI2MDhhNjQuLmYxMzYzYjcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21jZS5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21jZS5oCkBAIC0xMzMsNiArMTMzLDggQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBlbmFibGVfcDVfbWNlKHZvaWQpIHt9CiAjZW5kaWYKIAorZXh0ZXJuIHZvaWQgKCp4ODZfbWNlX2RlY29kZV9jYWxsYmFjaykoc3RydWN0IG1jZSAqbSk7CisKIHZvaWQgbWNlX3NldHVwKHN0cnVjdCBtY2UgKm0pOwogdm9pZCBtY2VfbG9nKHN0cnVjdCBtY2UgKm0pOwogREVDTEFSRV9QRVJfQ1BVKHN0cnVjdCBzeXNfZGV2aWNlLCBtY2VfZGV2KTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BhcmF2aXJ0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYXJhdmlydC5oCmluZGV4IDhhZWJjYzQuLmVmYjM4OTkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BhcmF2aXJ0LmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGFyYXZpcnQuaApAQCAtODQwLDQyICs4NDAsMjIgQEAKIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIF9fcmF3X2xvY2FsX3NhdmVfZmxhZ3Modm9pZCkKIHsKLQl1bnNpZ25lZCBsb25nIGY7Ci0KLQlhc20gdm9sYXRpbGUocGFyYXZpcnRfYWx0KFBBUkFWSVJUX0NBTEwpCi0JCSAgICAgOiAiPWEiKGYpCi0JCSAgICAgOiBwYXJhdmlydF90eXBlKHB2X2lycV9vcHMuc2F2ZV9mbCksCi0JCSAgICAgICBwYXJhdmlydF9jbG9iYmVyKENMQlJfRUFYKQotCQkgICAgIDogIm1lbW9yeSIsICJjYyIpOwotCXJldHVybiBmOworCXJldHVybiBQVk9QX0NBTExFRTAodW5zaWduZWQgbG9uZywgcHZfaXJxX29wcy5zYXZlX2ZsKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHJhd19sb2NhbF9pcnFfcmVzdG9yZSh1bnNpZ25lZCBsb25nIGYpCiB7Ci0JYXNtIHZvbGF0aWxlKHBhcmF2aXJ0X2FsdChQQVJBVklSVF9DQUxMKQotCQkgICAgIDogIj1hIihmKQotCQkgICAgIDogUFZfRkxBR1NfQVJHKGYpLAotCQkgICAgICAgcGFyYXZpcnRfdHlwZShwdl9pcnFfb3BzLnJlc3RvcmVfZmwpLAotCQkgICAgICAgcGFyYXZpcnRfY2xvYmJlcihDTEJSX0VBWCkKLQkJICAgICA6ICJtZW1vcnkiLCAiY2MiKTsKKwlQVk9QX1ZDQUxMRUUxKHB2X2lycV9vcHMucmVzdG9yZV9mbCwgZik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCByYXdfbG9jYWxfaXJxX2Rpc2FibGUodm9pZCkKIHsKLQlhc20gdm9sYXRpbGUocGFyYXZpcnRfYWx0KFBBUkFWSVJUX0NBTEwpCi0JCSAgICAgOgotCQkgICAgIDogcGFyYXZpcnRfdHlwZShwdl9pcnFfb3BzLmlycV9kaXNhYmxlKSwKLQkJICAgICAgIHBhcmF2aXJ0X2Nsb2JiZXIoQ0xCUl9FQVgpCi0JCSAgICAgOiAibWVtb3J5IiwgImVheCIsICJjYyIpOworCVBWT1BfVkNBTExFRTAocHZfaXJxX29wcy5pcnFfZGlzYWJsZSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCByYXdfbG9jYWxfaXJxX2VuYWJsZSh2b2lkKQogewotCWFzbSB2b2xhdGlsZShwYXJhdmlydF9hbHQoUEFSQVZJUlRfQ0FMTCkKLQkJICAgICA6Ci0JCSAgICAgOiBwYXJhdmlydF90eXBlKHB2X2lycV9vcHMuaXJxX2VuYWJsZSksCi0JCSAgICAgICBwYXJhdmlydF9jbG9iYmVyKENMQlJfRUFYKQotCQkgICAgIDogIm1lbW9yeSIsICJlYXgiLCAiY2MiKTsKKwlQVk9QX1ZDQUxMRUUwKHB2X2lycV9vcHMuaXJxX2VuYWJsZSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBfX3Jhd19sb2NhbF9pcnFfc2F2ZSh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGFyYXZpcnRfdHlwZXMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BhcmF2aXJ0X3R5cGVzLmgKaW5kZXggZGQwZjViMy4uOTM1NzQ3MyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGFyYXZpcnRfdHlwZXMuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYXJhdmlydF90eXBlcy5oCkBAIC00OTQsMTAgKzQ5NCwxMSBAQAogI2RlZmluZSBFWFRSQV9DTE9CQkVSUwogI2RlZmluZSBWRVhUUkFfQ0xPQkJFUlMKICNlbHNlICAvKiBDT05GSUdfWDg2XzY0ICovCisvKiBbcmVdYXggaXNuJ3QgYW4gYXJnLCBidXQgdGhlIHJldHVybiB2YWwgKi8KICNkZWZpbmUgUFZPUF9WQ0FMTF9BUkdTCQkJCQlcCiAJdW5zaWduZWQgbG9uZyBfX2VkaSA9IF9fZWRpLCBfX2VzaSA9IF9fZXNpLAlcCi0JCV9fZWR4ID0gX19lZHgsIF9fZWN4ID0gX19lY3gKLSNkZWZpbmUgUFZPUF9DQUxMX0FSR1MJCVBWT1BfVkNBTExfQVJHUywgX19lYXgKKwkJX19lZHggPSBfX2VkeCwgX19lY3ggPSBfX2VjeCwgX19lYXggPSBfX2VheAorI2RlZmluZSBQVk9QX0NBTExfQVJHUwkJUFZPUF9WQ0FMTF9BUkdTCiAKICNkZWZpbmUgUFZPUF9DQUxMX0FSRzEoeCkJCSJEIiAoKHVuc2lnbmVkIGxvbmcpKHgpKQogI2RlZmluZSBQVk9QX0NBTExfQVJHMih4KQkJIlMiICgodW5zaWduZWQgbG9uZykoeCkpCkBAIC01MDksNiArNTEwLDcgQEAKIAkJCQkiPWMiIChfX2VjeCkKICNkZWZpbmUgUFZPUF9DQUxMX0NMT0JCRVJTCVBWT1BfVkNBTExfQ0xPQkJFUlMsICI9YSIgKF9fZWF4KQogCisvKiB2b2lkIGZ1bmN0aW9ucyBhcmUgc3RpbGwgYWxsb3dlZCBbcmVdYXggZm9yIHNjcmF0Y2ggKi8KICNkZWZpbmUgUFZPUF9WQ0FMTEVFX0NMT0JCRVJTCSI9YSIgKF9fZWF4KQogI2RlZmluZSBQVk9QX0NBTExFRV9DTE9CQkVSUwlQVk9QX1ZDQUxMRUVfQ0xPQkJFUlMKIApAQCAtNTgzLDggKzU4NSw4IEBACiAJCSAgICAgICBWRVhUUkFfQ0xPQkJFUlMsCQkJCQlcCiAJCSAgICAgICBwcmUsIHBvc3QsICMjX19WQV9BUkdTX18pCiAKLSNkZWZpbmUgX19QVk9QX1ZDQUxMRUVTQVZFKHJldHR5cGUsIG9wLCBwcmUsIHBvc3QsIC4uLikJCQlcCi0JX19fX1BWT1BfQ0FMTChyZXR0eXBlLCBvcC5mdW5jLCBDTEJSX1JFVF9SRUcsCQkJXAorI2RlZmluZSBfX1BWT1BfVkNBTExFRVNBVkUob3AsIHByZSwgcG9zdCwgLi4uKQkJCQlcCisJX19fX1BWT1BfVkNBTEwob3AuZnVuYywgQ0xCUl9SRVRfUkVHLAkJCQlcCiAJCSAgICAgIFBWT1BfVkNBTExFRV9DTE9CQkVSUywgLAkJCQlcCiAJCSAgICAgIHByZSwgcG9zdCwgIyNfX1ZBX0FSR1NfXykKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZV90eXBlcy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZV90eXBlcy5oCmluZGV4IDdiNDY3YmYuLmQxZjRhNzYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGVfdHlwZXMuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlX3R5cGVzLmgKQEAgLTI3Nyw2ICsyNzcsNyBAQAogdHlwZWRlZiBzdHJ1Y3QgcGFnZSAqcGd0YWJsZV90OwogCiBleHRlcm4gcHRldmFsX3QgX19zdXBwb3J0ZWRfcHRlX21hc2s7CitleHRlcm4gdm9pZCBzZXRfbngodm9pZCk7CiBleHRlcm4gaW50IG54X2VuYWJsZWQ7CiAKICNkZWZpbmUgcGdwcm90X3dyaXRlY29tYmluZQlwZ3Byb3Rfd3JpdGVjb21iaW5lCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90b3BvbG9neS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdG9wb2xvZ3kuaAppbmRleCA2ZjA2OTVkLi5kODIzYzI0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90b3BvbG9neS5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RvcG9sb2d5LmgKQEAgLTE0Myw2ICsxNDMsNyBAQAogCQkJCXwgMSpTRF9CQUxBTkNFX0ZPUksJCQlcCiAJCQkJfCAwKlNEX0JBTEFOQ0VfV0FLRQkJCVwKIAkJCQl8IDEqU0RfV0FLRV9BRkZJTkUJCQlcCisJCQkJfCAxKlNEX1BSRUZFUl9MT0NBTAkJCVwKIAkJCQl8IDAqU0RfU0hBUkVfQ1BVUE9XRVIJCQlcCiAJCQkJfCAwKlNEX1BPV0VSU0FWSU5HU19CQUxBTkNFCQlcCiAJCQkJfCAwKlNEX1NIQVJFX1BLR19SRVNPVVJDRVMJCVwKQEAgLTE2NSwyMSArMTY2LDExIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGNwdV90b19ub2RlKGludCBjcHUpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgaW50IGVhcmx5X2NwdV90b19ub2RlKGludCBjcHUpCiB7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNwdW1hc2tfb2Zfbm9kZShpbnQgbm9kZSkKLXsKLQlyZXR1cm4gY3B1X29ubGluZV9tYXNrOwotfQotCiBzdGF0aWMgaW5saW5lIHZvaWQgc2V0dXBfbm9kZV90b19jcHVtYXNrX21hcCh2b2lkKSB7IH0KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91di91dl9odWIuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3V2L3V2X2h1Yi5oCmluZGV4IDA0ZWI2YzkuLmQxNDE0YWYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3V2L3V2X2h1Yi5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3V2L3V2X2h1Yi5oCkBAIC0xOSw2ICsxOSw4IEBACiAjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL3BlcmNwdS5oPgogI2luY2x1ZGUgPGFzbS91di91dl9tbXJzLmg+CisjaW5jbHVkZSA8YXNtL2lycV92ZWN0b3JzLmg+CisjaW5jbHVkZSA8YXNtL2lvX2FwaWMuaD4KIAogCiAvKgpAQCAtMTE0LDcgKzExNiw3IEBACiAvKgogICogVGhlIGxhcmdlc3QgcG9zc2libGUgTkFTSUQgb2YgYSBDIG9yIE0gYnJpY2sgKCsgMikKICAqLwotI2RlZmluZSBVVl9NQVhfTkFTSURfVkFMVUUJKFVWX01BWF9OVU1BTElOS19OT0RFUyAqIDIpCisjZGVmaW5lIFVWX01BWF9OQVNJRF9WQUxVRQkoVVZfTUFYX05VTUFMSU5LX0JMQURFUyAqIDIpCiAKIHN0cnVjdCB1dl9zY2lyX3MgewogCXN0cnVjdCB0aW1lcl9saXN0IHRpbWVyOwpAQCAtMjMwLDYgKzIzMiwyMCBAQAogCXJldHVybiB1dl9zb2NfcGh5c19yYW1fdG9fZ3BhKF9fcGEodikpOwogfQogCisvKiBnbm9kZSAtPiBwbm9kZSAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHV2X2dwYV90b19nbm9kZSh1bnNpZ25lZCBsb25nIGdwYSkKK3sKKwlyZXR1cm4gZ3BhID4+IHV2X2h1Yl9pbmZvLT5tX3ZhbDsKK30KKworLyogZ3BhIC0+IHBub2RlICovCitzdGF0aWMgaW5saW5lIGludCB1dl9ncGFfdG9fcG5vZGUodW5zaWduZWQgbG9uZyBncGEpCit7CisJdW5zaWduZWQgbG9uZyBuX21hc2sgPSAoMVVMIDw8IHV2X2h1Yl9pbmZvLT5uX3ZhbCkgLSAxOworCisJcmV0dXJuIHV2X2dwYV90b19nbm9kZShncGEpICYgbl9tYXNrOworfQorCiAvKiBwbm9kZSwgb2Zmc2V0IC0tPiBzb2NrZXQgdmlydHVhbCAqLwogc3RhdGljIGlubGluZSB2b2lkICp1dl9wbm9kZV9vZmZzZXRfdG9fdmFkZHIoaW50IHBub2RlLCB1bnNpZ25lZCBsb25nIG9mZnNldCkKIHsKQEAgLTQyMSw5ICs0MzcsMTQgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCB1dl9odWJfc2VuZF9pcGkoaW50IHBub2RlLCBpbnQgYXBpY2lkLCBpbnQgdmVjdG9yKQogewogCXVuc2lnbmVkIGxvbmcgdmFsOworCXVuc2lnbmVkIGxvbmcgZG1vZGUgPSBkZXN0X0ZpeGVkOworCisJaWYgKHZlY3RvciA9PSBOTUlfVkVDVE9SKQorCQlkbW9kZSA9IGRlc3RfTk1JOwogCiAJdmFsID0gKDFVTCA8PCBVVkhfSVBJX0lOVF9TRU5EX1NIRlQpIHwKIAkJCSgoYXBpY2lkKSA8PCBVVkhfSVBJX0lOVF9BUElDX0lEX1NIRlQpIHwKKwkJCShkbW9kZSA8PCBVVkhfSVBJX0lOVF9ERUxJVkVSWV9NT0RFX1NIRlQpIHwKIAkJCSh2ZWN0b3IgPDwgVVZIX0lQSV9JTlRfVkVDVE9SX1NIRlQpOwogCXV2X3dyaXRlX2dsb2JhbF9tbXI2NChwbm9kZSwgVVZIX0lQSV9JTlQsIHZhbCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYWNwaS9jc3RhdGUuYyBiL2FyY2gveDg2L2tlcm5lbC9hY3BpL2NzdGF0ZS5jCmluZGV4IDhjNDRjMjMuLjU5Y2RmYTQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hY3BpL2NzdGF0ZS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hY3BpL2NzdGF0ZS5jCkBAIC00OCw3ICs0OCw3IEBACiAJICogUDQsIENvcmUgYW5kIGJleW9uZCBDUFVzCiAJICovCiAJaWYgKGMtPng4Nl92ZW5kb3IgPT0gWDg2X1ZFTkRPUl9JTlRFTCAmJgotCSAgICAoYy0+eDg2ID4gMHg2IHx8IChjLT54ODYgPT0gNiAmJiBjLT54ODZfbW9kZWwgPj0gMTQpKSkKKwkgICAgKGMtPng4NiA+IDB4ZiB8fCAoYy0+eDg2ID09IDYgJiYgYy0+eDg2X21vZGVsID49IDE0KSkpCiAJCQlmbGFncy0+Ym1fY29udHJvbCA9IDA7CiB9CiBFWFBPUlRfU1lNQk9MKGFjcGlfcHJvY2Vzc29yX3Bvd2VyX2luaXRfYm1fY2hlY2spOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FjcGkvcmVhbG1vZGUvd2FrZXVwLmxkcy5TIGIvYXJjaC94ODYva2VybmVsL2FjcGkvcmVhbG1vZGUvd2FrZXVwLmxkcy5TCmluZGV4IDdkYTAwYjcuLjA2MGZmZjggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hY3BpL3JlYWxtb2RlL3dha2V1cC5sZHMuUworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYWNwaS9yZWFsbW9kZS93YWtldXAubGRzLlMKQEAgLTU3LDUgKzU3LDggQEAKIAkJKigubm90ZSopCiAJfQogCisJLyoKKwkgKiBUaGUgQVNTRVJUKCkgc2luayB0byAuIGlzIGludGVudGlvbmFsLCBmb3IgYmludXRpbHMgMi4xNCBjb21wYXRpYmlsaXR5OgorCSAqLwogCS4gPSBBU1NFUlQoX2VuZCA8PSBXQUtFVVBfU0laRSwgIldha2V1cCB0b28gYmlnISIpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FwaWMveDJhcGljX3V2X3guYyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL3gyYXBpY191dl94LmMKaW5kZXggZjVmNTg4Ni4uMzI2YzI1NCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FwaWMveDJhcGljX3V2X3guYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy94MmFwaWNfdXZfeC5jCkBAIC0zNTIsMTQgKzM1MiwxNCBAQAogCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocmVkaXJfYWRkcnMpOyBpKyspIHsKIAkJYWxpYXMudiA9IHV2X3JlYWRfbG9jYWxfbW1yKHJlZGlyX2FkZHJzW2ldLmFsaWFzKTsKLQkJaWYgKGFsaWFzLnMuYmFzZSA9PSAwKSB7CisJCWlmIChhbGlhcy5zLmVuYWJsZSAmJiBhbGlhcy5zLmJhc2UgPT0gMCkgewogCQkJKnNpemUgPSAoMVVMIDw8IGFsaWFzLnMubV9hbGlhcyk7CiAJCQlyZWRpcmVjdC52ID0gdXZfcmVhZF9sb2NhbF9tbXIocmVkaXJfYWRkcnNbaV0ucmVkaXJlY3QpOwogCQkJKmJhc2UgPSAodW5zaWduZWQgbG9uZylyZWRpcmVjdC5zLmRlc3RfYmFzZSA8PCBERVNUX1NISUZUOwogCQkJcmV0dXJuOwogCQl9CiAJfQotCUJVRygpOworCSpiYXNlID0gKnNpemUgPSAwOwogfQogCiBlbnVtIG1hcF90eXBlIHttYXBfd2IsIG1hcF91Y307CkBAIC02MTksMTIgKzYxOSwxMiBAQAogCQl1dl9jcHVfaHViX2luZm8oY3B1KS0+bG93bWVtX3JlbWFwX2Jhc2UgPSBsb3dtZW1fcmVkaXJfYmFzZTsKIAkJdXZfY3B1X2h1Yl9pbmZvKGNwdSktPmxvd21lbV9yZW1hcF90b3AgPSBsb3dtZW1fcmVkaXJfc2l6ZTsKIAkJdXZfY3B1X2h1Yl9pbmZvKGNwdSktPm1fdmFsID0gbV92YWw7Ci0JCXV2X2NwdV9odWJfaW5mbyhjcHUpLT5uX3ZhbCA9IG1fdmFsOworCQl1dl9jcHVfaHViX2luZm8oY3B1KS0+bl92YWwgPSBuX3ZhbDsKIAkJdXZfY3B1X2h1Yl9pbmZvKGNwdSktPm51bWFfYmxhZGVfaWQgPSBibGFkZTsKIAkJdXZfY3B1X2h1Yl9pbmZvKGNwdSktPmJsYWRlX3Byb2Nlc3Nvcl9pZCA9IGxjcHU7CiAJCXV2X2NwdV9odWJfaW5mbyhjcHUpLT5wbm9kZSA9IHBub2RlOwogCQl1dl9jcHVfaHViX2luZm8oY3B1KS0+cG5vZGVfbWFzayA9IHBub2RlX21hc2s7Ci0JCXV2X2NwdV9odWJfaW5mbyhjcHUpLT5ncGFfbWFzayA9ICgxIDw8IChtX3ZhbCArIG5fdmFsKSkgLSAxOworCQl1dl9jcHVfaHViX2luZm8oY3B1KS0+Z3BhX21hc2sgPSAoMVVMIDw8IChtX3ZhbCArIG5fdmFsKSkgLSAxOwogCQl1dl9jcHVfaHViX2luZm8oY3B1KS0+Z25vZGVfdXBwZXIgPSBnbm9kZV91cHBlcjsKIAkJdXZfY3B1X2h1Yl9pbmZvKGNwdSktPmdub2RlX2V4dHJhID0gZ25vZGVfZXh0cmE7CiAJCXV2X2NwdV9odWJfaW5mbyhjcHUpLT5nbG9iYWxfbW1yX2Jhc2UgPSBtbXJfYmFzZTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL21jZS1pbmplY3QuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL21jZS1pbmplY3QuYwppbmRleCA3MDI5ZjBlLi40NzI3NjNkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2UtaW5qZWN0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlLWluamVjdC5jCkBAIC05OCw4ICs5OCw5IEBACiB9OwogCiAvKiBJbmplY3QgbWNlIG9uIGN1cnJlbnQgQ1BVICovCi1zdGF0aWMgaW50IHJhaXNlX2xvY2FsKHN0cnVjdCBtY2UgKm0pCitzdGF0aWMgaW50IHJhaXNlX2xvY2FsKHZvaWQpCiB7CisJc3RydWN0IG1jZSAqbSA9ICZfX2dldF9jcHVfdmFyKGluamVjdG0pOwogCWludCBjb250ZXh0ID0gTUNKX0NUWChtLT5pbmplY3RfZmxhZ3MpOwogCWludCByZXQgPSAwOwogCWludCBjcHUgPSBtLT5leHRjcHU7CkBAIC0xNjcsMTIgKzE2OCwxMiBAQAogCQkJfQogCQkJY3B1X3JlbGF4KCk7CiAJCX0KLQkJcmFpc2VfbG9jYWwobSk7CisJCXJhaXNlX2xvY2FsKCk7CiAJCXB1dF9jcHUoKTsKIAkJcHV0X29ubGluZV9jcHVzKCk7CiAJfSBlbHNlCiAjZW5kaWYKLQkJcmFpc2VfbG9jYWwobSk7CisJCXJhaXNlX2xvY2FsKCk7CiB9CiAKIC8qIEVycm9yIGluamVjdGlvbiBpbnRlcmZhY2UgKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL21jZS5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlLmMKaW5kZXggMmY1YWFiMi4uNzIxYTc3YyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlLmMKQEAgLTg1LDYgKzg1LDE4IEBACiBzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IG1jZSwgbWNlc19zZWVuKTsKIHN0YXRpYyBpbnQJCQljcHVfbWlzc2luZzsKIAorc3RhdGljIHZvaWQgZGVmYXVsdF9kZWNvZGVfbWNlKHN0cnVjdCBtY2UgKm0pCit7CisJcHJfZW1lcmcoIk5vIGh1bWFuIHJlYWRhYmxlIE1DRSBkZWNvZGluZyBzdXBwb3J0IG9uIHRoaXMgQ1BVIHR5cGUuXG4iKTsKKwlwcl9lbWVyZygiUnVuIHRoZSBtZXNzYWdlIHRocm91Z2ggJ21jZWxvZyAtLWFzY2lpJyB0byBkZWNvZGUuXG4iKTsKK30KKworLyoKKyAqIENQVS9jaGlwc2V0IHNwZWNpZmljIEVEQUMgY29kZSBjYW4gcmVnaXN0ZXIgYSBjYWxsYmFjayBoZXJlIHRvIHByaW50CisgKiBNQ0UgZXJyb3JzIGluIGEgaHVtYW4tcmVhZGFibGUgZm9ybToKKyAqLwordm9pZCAoKng4Nl9tY2VfZGVjb2RlX2NhbGxiYWNrKShzdHJ1Y3QgbWNlICptKSA9IGRlZmF1bHRfZGVjb2RlX21jZTsKK0VYUE9SVF9TWU1CT0woeDg2X21jZV9kZWNvZGVfY2FsbGJhY2spOwogCiAvKiBNQ0EgYmFua3MgcG9sbGVkIGJ5IHRoZSBwZXJpb2QgcG9sbGluZyB0aW1lciBmb3IgY29ycmVjdGVkIGV2ZW50cyAqLwogREVGSU5FX1BFUl9DUFUobWNlX2JhbmtzX3QsIG1jZV9wb2xsX2JhbmtzKSA9IHsKQEAgLTE2NSw0OSArMTc3LDQ2IEBACiAJc2V0X2JpdCgwLCAmbWNlX25lZWRfbm90aWZ5KTsKIH0KIAotdm9pZCBfX3dlYWsgZGVjb2RlX21jZShzdHJ1Y3QgbWNlICptKQotewotCXJldHVybjsKLX0KLQogc3RhdGljIHZvaWQgcHJpbnRfbWNlKHN0cnVjdCBtY2UgKm0pCiB7Ci0JcHJpbnRrKEtFUk5fRU1FUkcKLQkgICAgICAgIkNQVSAlZDogTWFjaGluZSBDaGVjayBFeGNlcHRpb246ICUxNkx4IEJhbmsgJWQ6ICUwMTZMeFxuIiwKKwlwcl9lbWVyZygiQ1BVICVkOiBNYWNoaW5lIENoZWNrIEV4Y2VwdGlvbjogJTE2THggQmFuayAlZDogJTAxNkx4XG4iLAogCSAgICAgICBtLT5leHRjcHUsIG0tPm1jZ3N0YXR1cywgbS0+YmFuaywgbS0+c3RhdHVzKTsKKwogCWlmIChtLT5pcCkgewotCQlwcmludGsoS0VSTl9FTUVSRyAiUklQJXMgJTAyeDo8JTAxNkx4PiAiLAotCQkgICAgICAgIShtLT5tY2dzdGF0dXMgJiBNQ0dfU1RBVFVTX0VJUFYpID8gIiAhSU5FWEFDVCEiIDogIiIsCi0JCSAgICAgICBtLT5jcywgbS0+aXApOworCQlwcl9lbWVyZygiUklQJXMgJTAyeDo8JTAxNkx4PiAiLAorCQkJIShtLT5tY2dzdGF0dXMgJiBNQ0dfU1RBVFVTX0VJUFYpID8gIiAhSU5FWEFDVCEiIDogIiIsCisJCQkJbS0+Y3MsIG0tPmlwKTsKKwogCQlpZiAobS0+Y3MgPT0gX19LRVJORUxfQ1MpCiAJCQlwcmludF9zeW1ib2woInslc30iLCBtLT5pcCk7Ci0JCXByaW50ayhLRVJOX0NPTlQgIlxuIik7CisJCXByX2NvbnQoIlxuIik7CiAJfQotCXByaW50ayhLRVJOX0VNRVJHICJUU0MgJWxseCAiLCBtLT50c2MpOwotCWlmIChtLT5hZGRyKQotCQlwcmludGsoS0VSTl9DT05UICJBRERSICVsbHggIiwgbS0+YWRkcik7Ci0JaWYgKG0tPm1pc2MpCi0JCXByaW50ayhLRVJOX0NPTlQgIk1JU0MgJWxseCAiLCBtLT5taXNjKTsKLQlwcmludGsoS0VSTl9DT05UICJcbiIpOwotCXByaW50ayhLRVJOX0VNRVJHICJQUk9DRVNTT1IgJXU6JXggVElNRSAlbGx1IFNPQ0tFVCAldSBBUElDICV4XG4iLAotCQkJbS0+Y3B1dmVuZG9yLCBtLT5jcHVpZCwgbS0+dGltZSwgbS0+c29ja2V0aWQsCi0JCQltLT5hcGljaWQpOwogCi0JZGVjb2RlX21jZShtKTsKKwlwcl9lbWVyZygiVFNDICVsbHggIiwgbS0+dHNjKTsKKwlpZiAobS0+YWRkcikKKwkJcHJfY29udCgiQUREUiAlbGx4ICIsIG0tPmFkZHIpOworCWlmIChtLT5taXNjKQorCQlwcl9jb250KCJNSVNDICVsbHggIiwgbS0+bWlzYyk7CisKKwlwcl9jb250KCJcbiIpOworCXByX2VtZXJnKCJQUk9DRVNTT1IgJXU6JXggVElNRSAlbGx1IFNPQ0tFVCAldSBBUElDICV4XG4iLAorCQltLT5jcHV2ZW5kb3IsIG0tPmNwdWlkLCBtLT50aW1lLCBtLT5zb2NrZXRpZCwgbS0+YXBpY2lkKTsKKworCS8qCisJICogUHJpbnQgb3V0IGh1bWFuLXJlYWRhYmxlIGRldGFpbHMgYWJvdXQgdGhlIE1DRSBlcnJvciwKKwkgKiAoaWYgdGhlIENQVSBoYXMgYW4gaW1wbGVtZW50YXRpb24gZm9yIHRoYXQpOgorCSAqLworCXg4Nl9tY2VfZGVjb2RlX2NhbGxiYWNrKG0pOwogfQogCiBzdGF0aWMgdm9pZCBwcmludF9tY2VfaGVhZCh2b2lkKQogewotCXByaW50ayhLRVJOX0VNRVJHICJcbkhBUkRXQVJFIEVSUk9SXG4iKTsKKwlwcl9lbWVyZygiXG5IQVJEV0FSRSBFUlJPUlxuIik7CiB9CiAKIHN0YXRpYyB2b2lkIHByaW50X21jZV90YWlsKHZvaWQpCiB7Ci0JcHJpbnRrKEtFUk5fRU1FUkcgIlRoaXMgaXMgbm90IGEgc29mdHdhcmUgcHJvYmxlbSFcbiIKLSNpZiAoIWRlZmluZWQoQ09ORklHX0VEQUMpIHx8ICFkZWZpbmVkKENPTkZJR19DUFVfU1VQX0FNRCkpCi0JICAgICAgICJSdW4gdGhyb3VnaCBtY2Vsb2cgLS1hc2NpaSB0byBkZWNvZGUgYW5kIGNvbnRhY3QgeW91ciBoYXJkd2FyZSB2ZW5kb3JcbiIKLSNlbmRpZgotCSAgICAgICApOworCXByX2VtZXJnKCJUaGlzIGlzIG5vdCBhIHNvZnR3YXJlIHByb2JsZW0hXG4iKTsKIH0KIAogI2RlZmluZSBQQU5JQ19USU1FT1VUIDUgLyogNSBzZWNvbmRzICovCkBAIC0yMjEsNiArMjMwLDcgQEAKIHN0YXRpYyB2b2lkIHdhaXRfZm9yX3BhbmljKHZvaWQpCiB7CiAJbG9uZyB0aW1lb3V0ID0gUEFOSUNfVElNRU9VVCpVU0VDX1BFUl9TRUM7CisKIAlwcmVlbXB0X2Rpc2FibGUoKTsKIAlsb2NhbF9pcnFfZW5hYmxlKCk7CiAJd2hpbGUgKHRpbWVvdXQtLSA+IDApCkBAIC0yODgsNiArMjk4LDcgQEAKIHN0YXRpYyBpbnQgbXNyX3RvX29mZnNldCh1MzIgbXNyKQogewogCXVuc2lnbmVkIGJhbmsgPSBfX2dldF9jcHVfdmFyKGluamVjdG0uYmFuayk7CisKIAlpZiAobXNyID09IHJpcF9tc3IpCiAJCXJldHVybiBvZmZzZXRvZihzdHJ1Y3QgbWNlLCBpcCk7CiAJaWYgKG1zciA9PSBNU1JfSUEzMl9NQ3hfU1RBVFVTKGJhbmspKQpAQCAtMzA1LDEzICszMTYsMjUgQEAKIHN0YXRpYyB1NjQgbWNlX3JkbXNybCh1MzIgbXNyKQogewogCXU2NCB2OworCiAJaWYgKF9fZ2V0X2NwdV92YXIoaW5qZWN0bSkuZmluaXNoZWQpIHsKIAkJaW50IG9mZnNldCA9IG1zcl90b19vZmZzZXQobXNyKTsKKwogCQlpZiAob2Zmc2V0IDwgMCkKIAkJCXJldHVybiAwOwogCQlyZXR1cm4gKih1NjQgKikoKGNoYXIgKikmX19nZXRfY3B1X3ZhcihpbmplY3RtKSArIG9mZnNldCk7CiAJfQotCXJkbXNybChtc3IsIHYpOworCisJaWYgKHJkbXNybF9zYWZlKG1zciwgJnYpKSB7CisJCVdBUk5fT05DRSgxLCAibWNlOiBVbmFibGUgdG8gcmVhZCBtc3IgJWQhXG4iLCBtc3IpOworCQkvKgorCQkgKiBSZXR1cm4gemVybyBpbiBjYXNlIHRoZSBhY2Nlc3MgZmF1bHRlZC4gVGhpcyBzaG91bGQKKwkJICogbm90IGhhcHBlbiBub3JtYWxseSBidXQgY2FuIGhhcHBlbiBpZiB0aGUgQ1BVIGRvZXMKKwkJICogc29tZXRoaW5nIHdlaXJkLCBvciBpZiB0aGUgY29kZSBpcyBidWdneS4KKwkJICovCisJCXYgPSAwOworCX0KKwogCXJldHVybiB2OwogfQogCkBAIC0zMTksNiArMzQyLDcgQEAKIHsKIAlpZiAoX19nZXRfY3B1X3ZhcihpbmplY3RtKS5maW5pc2hlZCkgewogCQlpbnQgb2Zmc2V0ID0gbXNyX3RvX29mZnNldChtc3IpOworCiAJCWlmIChvZmZzZXQgPj0gMCkKIAkJCSoodTY0ICopKChjaGFyICopJl9fZ2V0X2NwdV92YXIoaW5qZWN0bSkgKyBvZmZzZXQpID0gdjsKIAkJcmV0dXJuOwpAQCAtNDE1LDcgKzQzOSw3IEBACiAJCW0tPmlwID0gbWNlX3JkbXNybChyaXBfbXNyKTsKIH0KIAotI2lmZGVmIENPTkZJR19YODZfTE9DQUxfQVBJQyAKKyNpZmRlZiBDT05GSUdfWDg2X0xPQ0FMX0FQSUMKIC8qCiAgKiBDYWxsZWQgYWZ0ZXIgaW50ZXJydXB0cyBoYXZlIGJlZW4gcmVlbmFibGVkIGFnYWluCiAgKiB3aGVuIGEgTUNFIGhhcHBlbmVkIGR1cmluZyBhbiBpbnRlcnJ1cHRzIG9mZiByZWdpb24KQEAgLTExNzIsNiArMTE5Niw3IEBACiAJCXJldHVybiAtRU5PTUVNOwogCWZvciAoaSA9IDA7IGkgPCBiYW5rczsgaSsrKSB7CiAJCXN0cnVjdCBtY2VfYmFuayAqYiA9ICZtY2VfYmFua3NbaV07CisKIAkJYi0+Y3RsID0gLTFVTEw7CiAJCWItPmluaXQgPSAxOwogCX0KQEAgLTExODksNyArMTIxNCw4IEBACiAJcmRtc3JsKE1TUl9JQTMyX01DR19DQVAsIGNhcCk7CiAKIAliID0gY2FwICYgTUNHX0JBTktDTlRfTUFTSzsKLQlwcmludGsoS0VSTl9JTkZPICJtY2U6IENQVSBzdXBwb3J0cyAlZCBNQ0UgYmFua3NcbiIsIGIpOworCWlmICghYmFua3MpCisJCXByaW50ayhLRVJOX0lORk8gIm1jZTogQ1BVIHN1cHBvcnRzICVkIE1DRSBiYW5rc1xuIiwgYik7CiAKIAlpZiAoYiA+IE1BWF9OUl9CQU5LUykgewogCQlwcmludGsoS0VSTl9XQVJOSU5HCkBAIC0xMjAzLDYgKzEyMjksNyBAQAogCWJhbmtzID0gYjsKIAlpZiAoIW1jZV9iYW5rcykgewogCQlpbnQgZXJyID0gbWNlX2JhbmtzX2luaXQoKTsKKwogCQlpZiAoZXJyKQogCQkJcmV0dXJuIGVycjsKIAl9CkBAIC0xMjM3LDYgKzEyNjQsNyBAQAogCiAJZm9yIChpID0gMDsgaSA8IGJhbmtzOyBpKyspIHsKIAkJc3RydWN0IG1jZV9iYW5rICpiID0gJm1jZV9iYW5rc1tpXTsKKwogCQlpZiAoIWItPmluaXQpCiAJCQljb250aW51ZTsKIAkJd3Jtc3JsKE1TUl9JQTMyX01DeF9DVEwoaSksIGItPmN0bCk7CkBAIC0xNjI2LDYgKzE2NTQsNyBAQAogCiAJZm9yIChpID0gMDsgaSA8IGJhbmtzOyBpKyspIHsKIAkJc3RydWN0IG1jZV9iYW5rICpiID0gJm1jZV9iYW5rc1tpXTsKKwogCQlpZiAoYi0+aW5pdCkKIAkJCXdybXNybChNU1JfSUEzMl9NQ3hfQ1RMKGkpLCAwKTsKIAl9CkBAIC0xOTExLDYgKzE5NDAsNyBAQAogCQljbWNpX2NsZWFyKCk7CiAJZm9yIChpID0gMDsgaSA8IGJhbmtzOyBpKyspIHsKIAkJc3RydWN0IG1jZV9iYW5rICpiID0gJm1jZV9iYW5rc1tpXTsKKwogCQlpZiAoYi0+aW5pdCkKIAkJCXdybXNybChNU1JfSUEzMl9NQ3hfQ1RMKGkpLCAwKTsKIAl9CkBAIC0xOTI4LDYgKzE5NTgsNyBAQAogCQljbWNpX3JlZW5hYmxlKCk7CiAJZm9yIChpID0gMDsgaSA8IGJhbmtzOyBpKyspIHsKIAkJc3RydWN0IG1jZV9iYW5rICpiID0gJm1jZV9iYW5rc1tpXTsKKwogCQlpZiAoYi0+aW5pdCkKIAkJCXdybXNybChNU1JfSUEzMl9NQ3hfQ1RMKGkpLCBiLT5jdGwpOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL21jZV9pbnRlbC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlX2ludGVsLmMKaW5kZXggODg5ZjY2NS4uN2M3ODU2MyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlX2ludGVsLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlX2ludGVsLmMKQEAgLTgsNiArOCw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8YXNtL2FwaWMuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSA8YXNtL21zci5oPgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svdGhlcm1fdGhyb3QuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL3RoZXJtX3Rocm90LmMKaW5kZXggNjNhNTZkMS4uYjNhMWRiYSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svdGhlcm1fdGhyb3QuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay90aGVybV90aHJvdC5jCkBAIC0zNCwyMCArMzQsMzEgQEAKIC8qIEhvdyBsb25nIHRvIHdhaXQgYmV0d2VlbiByZXBvcnRpbmcgdGhlcm1hbCBldmVudHMgKi8KICNkZWZpbmUgQ0hFQ0tfSU5URVJWQUwJCSgzMDAgKiBIWikKIAotc3RhdGljIERFRklORV9QRVJfQ1BVKF9fdTY0LCBuZXh0X2NoZWNrKSA9IElOSVRJQUxfSklGRklFUzsKLXN0YXRpYyBERUZJTkVfUEVSX0NQVSh1bnNpZ25lZCBsb25nLCB0aGVybWFsX3Rocm90dGxlX2NvdW50KTsKLXN0YXRpYyBERUZJTkVfUEVSX0NQVShib29sLCB0aGVybWFsX3Rocm90dGxlX2FjdGl2ZSk7CisvKgorICogQ3VycmVudCB0aGVybWFsIHRocm90dGxpbmcgc3RhdGU6CisgKi8KK3N0cnVjdCB0aGVybWFsX3N0YXRlIHsKKwlib29sCQkJaXNfdGhyb3R0bGVkOwogCi1zdGF0aWMgYXRvbWljX3QgdGhlcm1fdGhyb3RfZW4JCT0gQVRPTUlDX0lOSVQoMCk7CisJdTY0CQkJbmV4dF9jaGVjazsKKwl1bnNpZ25lZCBsb25nCQl0aHJvdHRsZV9jb3VudDsKKwl1bnNpZ25lZCBsb25nCQlsYXN0X3Rocm90dGxlX2NvdW50OworfTsKKworc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCB0aGVybWFsX3N0YXRlLCB0aGVybWFsX3N0YXRlKTsKKworc3RhdGljIGF0b21pY190IHRoZXJtX3Rocm90X2VuCT0gQVRPTUlDX0lOSVQoMCk7CiAKICNpZmRlZiBDT05GSUdfU1lTRlMKICNkZWZpbmUgZGVmaW5lX3RoZXJtX3Rocm90X3N5c2Rldl9vbmVfcm8oX25hbWUpCQkJCVwKIAlzdGF0aWMgU1lTREVWX0FUVFIoX25hbWUsIDA0NDQsIHRoZXJtX3Rocm90X3N5c2Rldl9zaG93XyMjX25hbWUsIE5VTEwpCiAKICNkZWZpbmUgZGVmaW5lX3RoZXJtX3Rocm90X3N5c2Rldl9zaG93X2Z1bmMobmFtZSkJCQlcCi1zdGF0aWMgc3NpemVfdCB0aGVybV90aHJvdF9zeXNkZXZfc2hvd18jI25hbWUoc3RydWN0IHN5c19kZXZpY2UgKmRldiwJXAotCQkJCQlzdHJ1Y3Qgc3lzZGV2X2F0dHJpYnV0ZSAqYXR0ciwJXAotCQkJCQkgICAgICBjaGFyICpidWYpCQlcCisJCQkJCQkJCQlcCitzdGF0aWMgc3NpemVfdCB0aGVybV90aHJvdF9zeXNkZXZfc2hvd18jI25hbWUoCQkJCVwKKwkJCXN0cnVjdCBzeXNfZGV2aWNlICpkZXYsCQkJCVwKKwkJCXN0cnVjdCBzeXNkZXZfYXR0cmlidXRlICphdHRyLAkJCVwKKwkJCWNoYXIgKmJ1ZikJCQkJCVwKIHsJCQkJCQkJCQlcCiAJdW5zaWduZWQgaW50IGNwdSA9IGRldi0+aWQ7CQkJCQlcCiAJc3NpemVfdCByZXQ7CQkJCQkJCVwKQEAgLTU1LDcgKzY2LDcgQEAKIAlwcmVlbXB0X2Rpc2FibGUoKTsJLyogQ1BVIGhvdHBsdWcgKi8JCQlcCiAJaWYgKGNwdV9vbmxpbmUoY3B1KSkJCQkJCQlcCiAJCXJldCA9IHNwcmludGYoYnVmLCAiJWx1XG4iLAkJCQlcCi0JCQkgICAgICBwZXJfY3B1KHRoZXJtYWxfdGhyb3R0bGVfIyNuYW1lLCBjcHUpKTsJXAorCQkJICAgICAgcGVyX2NwdSh0aGVybWFsX3N0YXRlLCBjcHUpLm5hbWUpOwlcCiAJZWxzZQkJCQkJCQkJXAogCQlyZXQgPSAwOwkJCQkJCVwKIAlwcmVlbXB0X2VuYWJsZSgpOwkJCQkJCVwKQEAgLTYzLDExICs3NCwxMSBAQAogCXJldHVybiByZXQ7CQkJCQkJCVwKIH0KIAotZGVmaW5lX3RoZXJtX3Rocm90X3N5c2Rldl9zaG93X2Z1bmMoY291bnQpOwotZGVmaW5lX3RoZXJtX3Rocm90X3N5c2Rldl9vbmVfcm8oY291bnQpOworZGVmaW5lX3RoZXJtX3Rocm90X3N5c2Rldl9zaG93X2Z1bmModGhyb3R0bGVfY291bnQpOworZGVmaW5lX3RoZXJtX3Rocm90X3N5c2Rldl9vbmVfcm8odGhyb3R0bGVfY291bnQpOwogCiBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqdGhlcm1hbF90aHJvdHRsZV9hdHRyc1tdID0gewotCSZhdHRyX2NvdW50LmF0dHIsCisJJmF0dHJfdGhyb3R0bGVfY291bnQuYXR0ciwKIAlOVUxMCiB9OwogCkBAIC05MywzMyArMTA0LDM5IEBACiAgKiAgICAgICAgICAxIDogRXZlbnQgc2hvdWxkIGJlIGxvZ2dlZCBmdXJ0aGVyLCBhbmQgYSBtZXNzYWdlIGhhcyBiZWVuCiAgKiAgICAgICAgICAgICAgcHJpbnRlZCB0byB0aGUgc3lzbG9nLgogICovCi1zdGF0aWMgaW50IHRoZXJtX3Rocm90X3Byb2Nlc3MoaW50IGN1cnIpCitzdGF0aWMgaW50IHRoZXJtX3Rocm90X3Byb2Nlc3MoYm9vbCBpc190aHJvdHRsZWQpCiB7Ci0JdW5zaWduZWQgaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKLQlfX3U2NCB0bXBfamlmZnMgPSBnZXRfamlmZmllc182NCgpOwotCWJvb2wgd2FzX3Rocm90dGxlZCA9IF9fZ2V0X2NwdV92YXIodGhlcm1hbF90aHJvdHRsZV9hY3RpdmUpOwotCWJvb2wgaXNfdGhyb3R0bGVkID0gX19nZXRfY3B1X3Zhcih0aGVybWFsX3Rocm90dGxlX2FjdGl2ZSkgPSBjdXJyOworCXN0cnVjdCB0aGVybWFsX3N0YXRlICpzdGF0ZTsKKwl1bnNpZ25lZCBpbnQgdGhpc19jcHU7CisJYm9vbCB3YXNfdGhyb3R0bGVkOworCXU2NCBub3c7CisKKwl0aGlzX2NwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKwlub3cgPSBnZXRfamlmZmllc182NCgpOworCXN0YXRlID0gJnBlcl9jcHUodGhlcm1hbF9zdGF0ZSwgdGhpc19jcHUpOworCisJd2FzX3Rocm90dGxlZCA9IHN0YXRlLT5pc190aHJvdHRsZWQ7CisJc3RhdGUtPmlzX3Rocm90dGxlZCA9IGlzX3Rocm90dGxlZDsKIAogCWlmIChpc190aHJvdHRsZWQpCi0JCV9fZ2V0X2NwdV92YXIodGhlcm1hbF90aHJvdHRsZV9jb3VudCkrKzsKKwkJc3RhdGUtPnRocm90dGxlX2NvdW50Kys7CiAKLQlpZiAoISh3YXNfdGhyb3R0bGVkIF4gaXNfdGhyb3R0bGVkKSAmJgotCSAgICB0aW1lX2JlZm9yZTY0KHRtcF9qaWZmcywgX19nZXRfY3B1X3ZhcihuZXh0X2NoZWNrKSkpCisJaWYgKHRpbWVfYmVmb3JlNjQobm93LCBzdGF0ZS0+bmV4dF9jaGVjaykgJiYKKwkJCXN0YXRlLT50aHJvdHRsZV9jb3VudCAhPSBzdGF0ZS0+bGFzdF90aHJvdHRsZV9jb3VudCkKIAkJcmV0dXJuIDA7CiAKLQlfX2dldF9jcHVfdmFyKG5leHRfY2hlY2spID0gdG1wX2ppZmZzICsgQ0hFQ0tfSU5URVJWQUw7CisJc3RhdGUtPm5leHRfY2hlY2sgPSBub3cgKyBDSEVDS19JTlRFUlZBTDsKKwlzdGF0ZS0+bGFzdF90aHJvdHRsZV9jb3VudCA9IHN0YXRlLT50aHJvdHRsZV9jb3VudDsKIAogCS8qIGlmIHdlIGp1c3QgZW50ZXJlZCB0aGUgdGhlcm1hbCBldmVudCAqLwogCWlmIChpc190aHJvdHRsZWQpIHsKLQkJcHJpbnRrKEtFUk5fQ1JJVCAiQ1BVJWQ6IFRlbXBlcmF0dXJlIGFib3ZlIHRocmVzaG9sZCwgIgotCQkgICAgICAgImNwdSBjbG9jayB0aHJvdHRsZWQgKHRvdGFsIGV2ZW50cyA9ICVsdSlcbiIsCi0JCSAgICAgICBjcHUsIF9fZ2V0X2NwdV92YXIodGhlcm1hbF90aHJvdHRsZV9jb3VudCkpOworCQlwcmludGsoS0VSTl9DUklUICJDUFUlZDogVGVtcGVyYXR1cmUgYWJvdmUgdGhyZXNob2xkLCBjcHUgY2xvY2sgdGhyb3R0bGVkICh0b3RhbCBldmVudHMgPSAlbHUpXG4iLCB0aGlzX2NwdSwgc3RhdGUtPnRocm90dGxlX2NvdW50KTsKIAogCQlhZGRfdGFpbnQoVEFJTlRfTUFDSElORV9DSEVDSyk7CiAJCXJldHVybiAxOwogCX0KIAlpZiAod2FzX3Rocm90dGxlZCkgewotCQlwcmludGsoS0VSTl9JTkZPICJDUFUlZDogVGVtcGVyYXR1cmUvc3BlZWQgbm9ybWFsXG4iLCBjcHUpOworCQlwcmludGsoS0VSTl9JTkZPICJDUFUlZDogVGVtcGVyYXR1cmUvc3BlZWQgbm9ybWFsXG4iLCB0aGlzX2NwdSk7CiAJCXJldHVybiAxOwogCX0KIApAQCAtMjEzLDcgKzIzMCw3IEBACiAJX191NjQgbXNyX3ZhbDsKIAogCXJkbXNybChNU1JfSUEzMl9USEVSTV9TVEFUVVMsIG1zcl92YWwpOwotCWlmICh0aGVybV90aHJvdF9wcm9jZXNzKG1zcl92YWwgJiBUSEVSTV9TVEFUVVNfUFJPQ0hPVCkpCisJaWYgKHRoZXJtX3Rocm90X3Byb2Nlc3MoKG1zcl92YWwgJiBUSEVSTV9TVEFUVVNfUFJPQ0hPVCkgIT0gMCkpCiAJCW1jZV9sb2dfdGhlcm1fdGhyb3RfZXZlbnQobXNyX3ZhbCk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9pZi5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL2lmLmMKaW5kZXggZjA0ZTcyNS4uM2MxYjEyZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL2lmLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL2lmLmMKQEAgLTk2LDE3ICs5NiwyNCBAQAogCXVuc2lnbmVkIGxvbmcgbG9uZyBiYXNlLCBzaXplOwogCWNoYXIgKnB0cjsKIAljaGFyIGxpbmVbTElORV9TSVpFXTsKKwlpbnQgbGVuZ3RoOwogCXNpemVfdCBsaW5lbGVuOwogCiAJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQogCQlyZXR1cm4gLUVQRVJNOwotCWlmICghbGVuKQotCQlyZXR1cm4gLUVJTlZBTDsKIAogCW1lbXNldChsaW5lLCAwLCBMSU5FX1NJWkUpOwotCWlmIChsZW4gPiBMSU5FX1NJWkUpCi0JCWxlbiA9IExJTkVfU0laRTsKLQlpZiAoY29weV9mcm9tX3VzZXIobGluZSwgYnVmLCBsZW4gLSAxKSkKKworCWxlbmd0aCA9IGxlbjsKKwlsZW5ndGgtLTsKKworCWlmIChsZW5ndGggPiBMSU5FX1NJWkUgLSAxKQorCQlsZW5ndGggPSBMSU5FX1NJWkUgLSAxOworCisJaWYgKGxlbmd0aCA8IDApCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGNvcHlfZnJvbV91c2VyKGxpbmUsIGJ1ZiwgbGVuZ3RoKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKIAlsaW5lbGVuID0gc3RybGVuKGxpbmUpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50LmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnQuYwppbmRleCBhM2M3YWRiLi5iNTgwMWMzIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnQuYwpAQCAtMTc5MCw2ICsxNzkwLDkgQEAKIHZvaWQgc2V0X3BlcmZfZXZlbnRfcGVuZGluZyh2b2lkKQogewogI2lmZGVmIENPTkZJR19YODZfTE9DQUxfQVBJQworCWlmICgheDg2X3BtdS5hcGljIHx8ICF4ODZfcG11X2luaXRpYWxpemVkKCkpCisJCXJldHVybjsKKwogCWFwaWMtPnNlbmRfSVBJX3NlbGYoTE9DQUxfUEVORElOR19WRUNUT1IpOwogI2VuZGlmCiB9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3Jhc2hfZHVtcF8zMi5jIGIvYXJjaC94ODYva2VybmVsL2NyYXNoX2R1bXBfMzIuYwppbmRleCBmN2NkYjNiLi5jZDk3Y2UxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3Jhc2hfZHVtcF8zMi5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcmFzaF9kdW1wXzMyLmMKQEAgLTE2LDYgKzE2LDIyIEBACiAvKiBTdG9yZXMgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgb2YgZWxmIGhlYWRlciBvZiBjcmFzaCBpbWFnZS4gKi8KIHVuc2lnbmVkIGxvbmcgbG9uZyBlbGZjb3JlaGRyX2FkZHIgPSBFTEZDT1JFX0FERFJfTUFYOwogCitzdGF0aWMgaW5saW5lIGJvb2wgaXNfY3Jhc2hlZF9wZm5fdmFsaWQodW5zaWduZWQgbG9uZyBwZm4pCit7CisjaWZuZGVmIENPTkZJR19YODZfUEFFCisJLyoKKwkgKiBub24tUEFFIGtkdW1wIGtlcm5lbCBleGVjdXRlZCBmcm9tIGEgUEFFIG9uZSB3aWxsIGNyb3AgaGlnaCBwdGUKKwkgKiBiaXRzIGFuZCBwb2tlIHVud2FudGVkIHNwYWNlIGNvdW50aW5nIGFnYWluIGZyb20gYWRkcmVzcyAwLCB3ZQorCSAqIGRvbid0IHdhbnQgdGhhdC4gcHRlIG11c3QgZml0IGludG8gdW5zaWduZWQgbG9uZy4gSW4gZmFjdCB0aGUKKwkgKiB0ZXN0IGNoZWNrcyBoaWdoIDEyIGJpdHMgZm9yIGJlaW5nIHplcm8gKHBmbiB3aWxsIGJlIHNoaWZ0ZWQgbGVmdAorCSAqIGJ5IFBBR0VfU0hJRlQpLgorCSAqLworCXJldHVybiBwdGVfcGZuKHBmbl9wdGUocGZuLCBfX3BncHJvdCgwKSkpID09IHBmbjsKKyNlbHNlCisJcmV0dXJuIHRydWU7CisjZW5kaWYKK30KKwogLyoqCiAgKiBjb3B5X29sZG1lbV9wYWdlIC0gY29weSBvbmUgcGFnZSBmcm9tICJvbGRtZW0iCiAgKiBAcGZuOiBwYWdlIGZyYW1lIG51bWJlciB0byBiZSBjb3BpZWQKQEAgLTQxLDYgKzU3LDkgQEAKIAlpZiAoIWNzaXplKQogCQlyZXR1cm4gMDsKIAorCWlmICghaXNfY3Jhc2hlZF9wZm5fdmFsaWQocGZuKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKIAl2YWRkciA9IGttYXBfYXRvbWljX3BmbihwZm4sIEtNX1BURTApOwogCiAJaWYgKCF1c2VyYnVmKSB7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvZTgyMC5jIGIvYXJjaC94ODYva2VybmVsL2U4MjAuYwppbmRleCA4NTQxOWJiLi5kMTdkNDgyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvZTgyMC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9lODIwLmMKQEAgLTEzNzgsOCArMTM3OCw4IEBACiAJaWYgKG1iIDwgMTYpCiAJCXJldHVybiAxMDI0KjEwMjQ7CiAKLQkvKiBUbyAzMk1CIGZvciBhbnl0aGluZyBhYm92ZSB0aGF0ICovCi0JcmV0dXJuIDMyKjEwMjQqMTAyNDsKKwkvKiBUbyA2NE1CIGZvciBhbnl0aGluZyBhYm92ZSB0aGF0ICovCisJcmV0dXJuIDY0KjEwMjQqMTAyNDsKIH0KIAogI2RlZmluZSBNQVhfUkVTT1VSQ0VfU0laRSAoKHJlc291cmNlX3NpemVfdCktMSkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9lYXJseV9wcmludGsuYyBiL2FyY2gveDg2L2tlcm5lbC9lYXJseV9wcmludGsuYwppbmRleCAyYWNmZDNmLi5iOWM4MzBjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvZWFybHlfcHJpbnRrLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2Vhcmx5X3ByaW50ay5jCkBAIC0xNzgsNiArMTc4LDExIEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBlYXJseV9jb25zb2xlX3JlZ2lzdGVyKHN0cnVjdCBjb25zb2xlICpjb24sIGludCBrZWVwX2Vhcmx5KQogeworCWlmIChlYXJseV9jb25zb2xlLT5pbmRleCAhPSAtMSkgeworCQlwcmludGsoS0VSTl9DUklUICJFUlJPUjogZWFybHlwcmludGs9ICVzIGFscmVhZHkgdXNlZFxuIiwKKwkJICAgICAgIGNvbi0+bmFtZSk7CisJCXJldHVybjsKKwl9CiAJZWFybHlfY29uc29sZSA9IGNvbjsKIAlpZiAoa2VlcF9lYXJseSkKIAkJZWFybHlfY29uc29sZS0+ZmxhZ3MgJj0gfkNPTl9CT09UOwpAQCAtMjAxLDggKzIwNiwxMSBAQAogCiAJd2hpbGUgKCpidWYgIT0gJ1wwJykgewogCQlpZiAoIXN0cm5jbXAoYnVmLCAic2VyaWFsIiwgNikpIHsKLQkJCWVhcmx5X3NlcmlhbF9pbml0KGJ1ZiArIDYpOworCQkJYnVmICs9IDY7CisJCQllYXJseV9zZXJpYWxfaW5pdChidWYpOwogCQkJZWFybHlfY29uc29sZV9yZWdpc3RlcigmZWFybHlfc2VyaWFsX2NvbnNvbGUsIGtlZXApOworCQkJaWYgKCFzdHJuY21wKGJ1ZiwgIix0dHlTIiwgNSkpCisJCQkJYnVmICs9IDU7CiAJCX0KIAkJaWYgKCFzdHJuY21wKGJ1ZiwgInR0eVMiLCA0KSkgewogCQkJZWFybHlfc2VyaWFsX2luaXQoYnVmICsgNCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvZWZpLmMgYi9hcmNoL3g4Ni9rZXJuZWwvZWZpLmMKaW5kZXggYWQ1YmQ5OC4uY2RjZmIxMiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2VmaS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9lZmkuYwpAQCAtNDU0LDggKzQ1NCwxMCBAQAogCWlmIChhZGRfZWZpX21lbW1hcCkKIAkJZG9fYWRkX2VmaV9tZW1tYXAoKTsKIAorI2lmZGVmIENPTkZJR19YODZfMzIKIAl4ODZfcGxhdGZvcm0uZ2V0X3dhbGxjbG9jayA9IGVmaV9nZXRfdGltZTsKIAl4ODZfcGxhdGZvcm0uc2V0X3dhbGxjbG9jayA9IGVmaV9zZXRfcnRjX21tc3M7CisjZW5kaWYKIAogCS8qIFNldHVwIGZvciBFRkkgcnVudGltZSBzZXJ2aWNlICovCiAJcmVib290X3R5cGUgPSBCT09UX0VGSTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9oZWFkXzMyLlMgYi9hcmNoL3g4Ni9rZXJuZWwvaGVhZF8zMi5TCmluZGV4IDIxOGFhZDcuLjA1MGMyNzggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9oZWFkXzMyLlMKKysrIGIvYXJjaC94ODYva2VybmVsL2hlYWRfMzIuUwpAQCAtNzksNyArNzksNyBAQAogICogYW55IHBhcnRpY3VsYXIgR0RUIGxheW91dCwgYmVjYXVzZSB3ZSBsb2FkIG91ciBvd24gYXMgc29vbiBhcyB3ZQogICogY2FuLgogICovCi0uc2VjdGlvbiAudGV4dC5oZWFkLCJheCIsQHByb2diaXRzCitfX0hFQUQKIEVOVFJZKHN0YXJ0dXBfMzIpCiAJLyogdGVzdCBLRUVQX1NFR01FTlRTIGZsYWcgdG8gc2VlIGlmIHRoZSBib290bG9hZGVyIGlzIGFza2luZwogCQl1cyB0byBub3QgcmVsb2FkIHNlZ21lbnRzICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvaGVhZF82NC5TIGIvYXJjaC94ODYva2VybmVsL2hlYWRfNjQuUwppbmRleCBkMGJjMGExLi43ODBjZDkyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvaGVhZF82NC5TCisrKyBiL2FyY2gveDg2L2tlcm5lbC9oZWFkXzY0LlMKQEAgLTQwLDcgKzQwLDcgQEAKIEwzX1NUQVJUX0tFUk5FTCA9IHB1ZF9pbmRleChfX1NUQVJUX0tFUk5FTF9tYXApCiAKIAkudGV4dAotCS5zZWN0aW9uIC50ZXh0LmhlYWQKKwlfX0hFQUQKIAkuY29kZTY0CiAJLmdsb2JsIHN0YXJ0dXBfNjQKIHN0YXJ0dXBfNjQ6CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvaTM4Nl9rc3ltc18zMi5jIGIvYXJjaC94ODYva2VybmVsL2kzODZfa3N5bXNfMzIuYwppbmRleCA0M2NlYzZiLi45YzNiZDRhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvaTM4Nl9rc3ltc18zMi5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9pMzg2X2tzeW1zXzMyLmMKQEAgLTEwLDYgKzEwLDE2IEBACiBFWFBPUlRfU1lNQk9MKG1jb3VudCk7CiAjZW5kaWYKIAorLyoKKyAqIE5vdGUsIHRoaXMgaXMgYSBwcm90b3R5cGUgdG8gZ2V0IGF0IHRoZSBzeW1ib2wgZm9yCisgKiB0aGUgZXhwb3J0LCBidXQgZG9udCB1c2UgaXQgZnJvbSBDIGNvZGUsIGl0IGlzIHVzZWQKKyAqIGJ5IGFzc2VtYmx5IGNvZGUgYW5kIGlzIG5vdCB1c2luZyBDIGNhbGxpbmcgY29udmVudGlvbiEKKyAqLworI2lmbmRlZiBDT05GSUdfWDg2X0NNUFhDSEc2NAorZXh0ZXJuIHZvaWQgY21weGNoZzhiX2VtdSh2b2lkKTsKK0VYUE9SVF9TWU1CT0woY21weGNoZzhiX2VtdSk7CisjZW5kaWYKKwogLyogTmV0d29ya2luZyBoZWxwZXIgcm91dGluZXMuICovCiBFWFBPUlRfU1lNQk9MKGNzdW1fcGFydGlhbF9jb3B5X2dlbmVyaWMpOwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvaXJxLmMgYi9hcmNoL3g4Ni9rZXJuZWwvaXJxLmMKaW5kZXggNzQ2NTZkMS4uMDRiYmQ1MiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2lycS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9pcnEuYwpAQCAtNjMsMTAgKzYzLDEwIEBACiAJZm9yX2VhY2hfb25saW5lX2NwdShqKQogCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGlycV9zdGF0cyhqKS0+aXJxX3NwdXJpb3VzX2NvdW50KTsKIAlzZXFfcHJpbnRmKHAsICIgIFNwdXJpb3VzIGludGVycnVwdHNcbiIpOwotCXNlcV9wcmludGYocCwgIiUqczogIiwgcHJlYywgIkNOVCIpOworCXNlcV9wcmludGYocCwgIiUqczogIiwgcHJlYywgIlBNSSIpOwogCWZvcl9lYWNoX29ubGluZV9jcHUoaikKIAkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBpcnFfc3RhdHMoaiktPmFwaWNfcGVyZl9pcnFzKTsKLQlzZXFfcHJpbnRmKHAsICIgIFBlcmZvcm1hbmNlIGNvdW50ZXIgaW50ZXJydXB0c1xuIik7CisJc2VxX3ByaW50ZihwLCAiICBQZXJmb3JtYW5jZSBtb25pdG9yaW5nIGludGVycnVwdHNcbiIpOwogCXNlcV9wcmludGYocCwgIiUqczogIiwgcHJlYywgIlBORCIpOwogCWZvcl9lYWNoX29ubGluZV9jcHUoaikKIAkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBpcnFfc3RhdHMoaiktPmFwaWNfcGVuZGluZ19pcnFzKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9wY2ktZG1hLmMgYi9hcmNoL3g4Ni9rZXJuZWwvcGNpLWRtYS5jCmluZGV4IDY0YjgzOGUuLmIyYTcxZGMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9wY2ktZG1hLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3BjaS1kbWEuYwpAQCAtMzUsNyArMzUsNyBAQAogCiAvKgogICogVGhpcyB2YXJpYWJsZSBiZWNvbWVzIDEgaWYgaW9tbXU9cHQgaXMgcGFzc2VkIG9uIHRoZSBrZXJuZWwgY29tbWFuZCBsaW5lLgotICogSWYgdGhpcyB2YXJpYWJsZSBpcyAxLCBJT01NVSBpbXBsZW1lbnRhdGlvbnMgZG8gbm8gRE1BIHJhbnNsYXRpb24gZm9yCisgKiBJZiB0aGlzIHZhcmlhYmxlIGlzIDEsIElPTU1VIGltcGxlbWVudGF0aW9ucyBkbyBubyBETUEgdHJhbnNsYXRpb24gZm9yCiAgKiBkZXZpY2VzIGFuZCBhbGxvdyBldmVyeSBkZXZpY2UgdG8gYWNjZXNzIHRvIHdob2xlIHBoeXNpY2FsIG1lbW9yeS4gVGhpcyBpcwogICogdXNlZnVsIGlmIGEgdXNlciB3YW50IHRvIHVzZSBhbiBJT01NVSBvbmx5IGZvciBLVk0gZGV2aWNlIGFzc2lnbm1lbnQgdG8KICAqIGd1ZXN0cyBhbmQgbm90IGZvciBkcml2ZXIgZG1hIHRyYW5zbGF0aW9uLgpAQCAtMzExLDcgKzMxMSw3IEBACiAJYW1kX2lvbW11X3NodXRkb3duKCk7CiB9CiAvKiBNdXN0IGV4ZWN1dGUgYWZ0ZXIgUENJIHN1YnN5c3RlbSAqLwotZnNfaW5pdGNhbGwocGNpX2lvbW11X2luaXQpOworcm9vdGZzX2luaXRjYWxsKHBjaV9pb21tdV9pbml0KTsKIAogI2lmZGVmIENPTkZJR19QQ0kKIC8qIE1hbnkgVklBIGJyaWRnZXMgc2VlbSB0byBjb3JydXB0IGRhdGEgZm9yIERBQy4gRGlzYWJsZSBpdCBoZXJlICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvcGNpLWdhcnRfNjQuYyBiL2FyY2gveDg2L2tlcm5lbC9wY2ktZ2FydF82NC5jCmluZGV4IDk4YTgyN2UuLmE3ZjFiNjQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9wY2ktZ2FydF82NC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9wY2ktZ2FydF82NC5jCkBAIC0xNiw2ICsxNiw3IEBACiAjaW5jbHVkZSA8bGludXgvYWdwX2JhY2tlbmQuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvcmVib290LmMgYi9hcmNoL3g4Ni9rZXJuZWwvcmVib290LmMKaW5kZXggMjczNDlmOS4uYTFhM2NkZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3JlYm9vdC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9yZWJvb3QuYwpAQCAtNCw2ICs0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9wbS5oPgogI2luY2x1ZGUgPGxpbnV4L2VmaS5oPgogI2luY2x1ZGUgPGxpbnV4L2RtaS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvdGJvb3QuaD4KICNpbmNsdWRlIDxhY3BpL3JlYm9vdC5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3RpbWUuYyBiL2FyY2gveDg2L2tlcm5lbC90aW1lLmMKaW5kZXggZGNiMDBkMi4uYmUyNTczNCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3RpbWUuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvdGltZS5jCkBAIC0zOCw3ICszOCw4IEBACiAjaWZkZWYgQ09ORklHX0ZSQU1FX1BPSU5URVIKIAkJcmV0dXJuICoodW5zaWduZWQgbG9uZyAqKShyZWdzLT5icCArIHNpemVvZihsb25nKSk7CiAjZWxzZQotCQl1bnNpZ25lZCBsb25nICpzcCA9ICh1bnNpZ25lZCBsb25nICopcmVncy0+c3A7CisJCXVuc2lnbmVkIGxvbmcgKnNwID0KKwkJCSh1bnNpZ25lZCBsb25nICopa2VybmVsX3N0YWNrX3BvaW50ZXIocmVncyk7CiAJCS8qCiAJCSAqIFJldHVybiBhZGRyZXNzIGlzIGVpdGhlciBkaXJlY3RseSBhdCBzdGFjayBwb2ludGVyCiAJCSAqIG9yIGFib3ZlIGEgc2F2ZWQgZmxhZ3MuIEVmbGFncyBoYXMgYml0cyAyMi0zMSB6ZXJvLApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3RsYl91di5jIGIvYXJjaC94ODYva2VybmVsL3RsYl91di5jCmluZGV4IDUwM2MxZjIuLjE3NDBjODUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC90bGJfdXYuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvdGxiX3V2LmMKQEAgLTIzLDggKzIzLDYgQEAKIHN0YXRpYyBzdHJ1Y3QgYmF1X2NvbnRyb2wJKip1dl9iYXVfdGFibGVfYmFzZXMgX19yZWFkX21vc3RseTsKIHN0YXRpYyBpbnQJCQl1dl9iYXVfcmV0cnlfbGltaXQgX19yZWFkX21vc3RseTsKIAotLyogcG9zaXRpb24gb2YgcG5vZGUgKHdoaWNoIGlzIG5hc2lkPj4xKTogKi8KLXN0YXRpYyBpbnQJCQl1dl9uc2hpZnQgX19yZWFkX21vc3RseTsKIC8qIGJhc2UgcG5vZGUgaW4gdGhpcyBwYXJ0aXRpb24gKi8KIHN0YXRpYyBpbnQJCQl1dl9wYXJ0aXRpb25fYmFzZV9wbm9kZSBfX3JlYWRfbW9zdGx5OwogCkBAIC03MjMsNyArNzIxLDcgQEAKIAlCVUdfT04oIWFkcCk7CiAKIAlwYSA9IHV2X2dwYShhZHApOyAvKiBuZWVkIHRoZSByZWFsIG5hc2lkKi8KLQluID0gcGEgPj4gdXZfbnNoaWZ0OworCW4gPSB1dl9ncGFfdG9fcG5vZGUocGEpOwogCW0gPSBwYSAmIHV2X21tYXNrOwogCiAJdXZfd3JpdGVfZ2xvYmFsX21tcjY0KHBub2RlLCBVVkhfTEJfQkFVX1NCX0RFU0NSSVBUT1JfQkFTRSwKQEAgLTc3OCw3ICs3NzYsNyBAQAogCSAqIG5lZWQgdGhlIHBub2RlIG9mIHdoZXJlIHRoZSBtZW1vcnkgd2FzIHJlYWxseSBhbGxvY2F0ZWQKIAkgKi8KIAlwYSA9IHV2X2dwYShwcXApOwotCXBuID0gcGEgPj4gdXZfbnNoaWZ0OworCXBuID0gdXZfZ3BhX3RvX3Bub2RlKHBhKTsKIAl1dl93cml0ZV9nbG9iYWxfbW1yNjQocG5vZGUsCiAJCQkgICAgICBVVkhfTEJfQkFVX0lOVERfUEFZTE9BRF9RVUVVRV9GSVJTVCwKIAkJCSAgICAgICgodW5zaWduZWQgbG9uZylwbiA8PCBVVl9QQVlMT0FEUV9QTk9ERV9TSElGVCkgfApAQCAtODQzLDggKzg0MSw3IEBACiAJCQkJICAgICAgIEdGUF9LRVJORUwsIGNwdV90b19ub2RlKGN1cl9jcHUpKTsKIAogCXV2X2JhdV9yZXRyeV9saW1pdCA9IDE7Ci0JdXZfbnNoaWZ0ID0gdXZfaHViX2luZm8tPm5fdmFsOwotCXV2X21tYXNrID0gKDFVTCA8PCB1dl9odWJfaW5mby0+bl92YWwpIC0gMTsKKwl1dl9tbWFzayA9ICgxVUwgPDwgdXZfaHViX2luZm8tPm1fdmFsKSAtIDE7CiAJbmJsYWRlcyA9IHV2X251bV9wb3NzaWJsZV9ibGFkZXMoKTsKIAogCXV2X2JhdV90YWJsZV9iYXNlcyA9IChzdHJ1Y3QgYmF1X2NvbnRyb2wgKiopCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvdHJhbXBvbGluZS5jIGIvYXJjaC94ODYva2VybmVsL3RyYW1wb2xpbmUuYwppbmRleCA2OTlmN2VlLi5jZDAyMjEyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvdHJhbXBvbGluZS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC90cmFtcG9saW5lLmMKQEAgLTMsOCArMywxNiBAQAogI2luY2x1ZGUgPGFzbS90cmFtcG9saW5lLmg+CiAjaW5jbHVkZSA8YXNtL2U4MjAuaD4KIAorI2lmIGRlZmluZWQoQ09ORklHX1g4Nl82NCkgJiYgZGVmaW5lZChDT05GSUdfQUNQSV9TTEVFUCkKKyNkZWZpbmUgX190cmFtcGluaXQKKyNkZWZpbmUgX190cmFtcGluaXRkYXRhCisjZWxzZQorI2RlZmluZSBfX3RyYW1waW5pdCBfX2NwdWluaXQKKyNkZWZpbmUgX190cmFtcGluaXRkYXRhIF9fY3B1aW5pdGRhdGEKKyNlbmRpZgorCiAvKiByZWFkeSBmb3IgeDg2XzY0IGFuZCB4ODYgKi8KLXVuc2lnbmVkIGNoYXIgKl9fY3B1aW5pdGRhdGEgdHJhbXBvbGluZV9iYXNlID0gX192YShUUkFNUE9MSU5FX0JBU0UpOwordW5zaWduZWQgY2hhciAqX190cmFtcGluaXRkYXRhIHRyYW1wb2xpbmVfYmFzZSA9IF9fdmEoVFJBTVBPTElORV9CQVNFKTsKIAogdm9pZCBfX2luaXQgcmVzZXJ2ZV90cmFtcG9saW5lX21lbW9yeSh2b2lkKQogewpAQCAtMjYsNyArMzQsNyBAQAogICogYm9vdHN0cmFwIGludG8gdGhlIHBhZ2UgY29uY2VybmVkLiBUaGUgY2FsbGVyCiAgKiBoYXMgbWFkZSBzdXJlIGl0J3Mgc3VpdGFibHkgYWxpZ25lZC4KICAqLwotdW5zaWduZWQgbG9uZyBfX2NwdWluaXQgc2V0dXBfdHJhbXBvbGluZSh2b2lkKQordW5zaWduZWQgbG9uZyBfX3RyYW1waW5pdCBzZXR1cF90cmFtcG9saW5lKHZvaWQpCiB7CiAJbWVtY3B5KHRyYW1wb2xpbmVfYmFzZSwgdHJhbXBvbGluZV9kYXRhLCBUUkFNUE9MSU5FX1NJWkUpOwogCXJldHVybiB2aXJ0X3RvX3BoeXModHJhbXBvbGluZV9iYXNlKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC90cmFtcG9saW5lXzY0LlMgYi9hcmNoL3g4Ni9rZXJuZWwvdHJhbXBvbGluZV82NC5TCmluZGV4IDU5NmQ1NGMuLjNhZjJkZmYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC90cmFtcG9saW5lXzY0LlMKKysrIGIvYXJjaC94ODYva2VybmVsL3RyYW1wb2xpbmVfNjQuUwpAQCAtMzIsOCArMzIsMTIgQEAKICNpbmNsdWRlIDxhc20vc2VnbWVudC5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3ItZmxhZ3MuaD4KIAorI2lmZGVmIENPTkZJR19BQ1BJX1NMRUVQCisuc2VjdGlvbiAucm9kYXRhLCAiYSIsIEBwcm9nYml0cworI2Vsc2UKIC8qIFdlIGNhbiBmcmVlIHVwIHRoZSB0cmFtcG9saW5lIGFmdGVyIGJvb3R1cCBpZiBjcHUgaG90cGx1ZyBpcyBub3Qgc3VwcG9ydGVkLiAqLwogX19DUFVJTklUUk9EQVRBCisjZW5kaWYKIC5jb2RlMTYKIAogRU5UUlkodHJhbXBvbGluZV9kYXRhKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3RyYXBzLmMgYi9hcmNoL3g4Ni9rZXJuZWwvdHJhcHMuYwppbmRleCBhNjY1YzcxLi43ZTM3ZGNlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvdHJhcHMuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvdHJhcHMuYwpAQCAtNzIsMTEgKzcyLDkgQEAKIAogLyoKICAqIFRoZSBJRFQgaGFzIHRvIGJlIHBhZ2UtYWxpZ25lZCB0byBzaW1wbGlmeSB0aGUgUGVudGl1bQotICogRjAgMEYgYnVnIHdvcmthcm91bmQuLiBXZSBoYXZlIGEgc3BlY2lhbCBsaW5rIHNlZ21lbnQKLSAqIGZvciB0aGlzLgorICogRjAgMEYgYnVnIHdvcmthcm91bmQuCiAgKi8KLWdhdGVfZGVzYyBpZHRfdGFibGVbTlJfVkVDVE9SU10KLQlfX2F0dHJpYnV0ZV9fKChfX3NlY3Rpb25fXygiLmRhdGEuaWR0IikpKSA9IHsgeyB7IHsgMCwgMCB9IH0gfSwgfTsKK2dhdGVfZGVzYyBpZHRfdGFibGVbTlJfVkVDVE9SU10gX19wYWdlX2FsaWduZWRfZGF0YSA9IHsgeyB7IHsgMCwgMCB9IH0gfSwgfTsKICNlbmRpZgogCiBERUNMQVJFX0JJVE1BUCh1c2VkX3ZlY3RvcnMsIE5SX1ZFQ1RPUlMpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3RzY19zeW5jLmMgYi9hcmNoL3g4Ni9rZXJuZWwvdHNjX3N5bmMuYwppbmRleCAwMjdiNWI0Li5mMzc5MzA5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvdHNjX3N5bmMuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvdHNjX3N5bmMuYwpAQCAtMTE0LDcgKzExNCw3IEBACiAJCXJldHVybjsKIAogCWlmIChib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfVFNDX1JFTElBQkxFKSkgewotCQlwcl9pbmZvKCJTa2lwcGluZyBzeW5jaHJvbml6YXRpb24gY2hlY2tzIGFzIFRTQyBpcyByZWxpYWJsZS5cbiIpOworCQlwcmludGtfb25jZShLRVJOX0lORk8gIlNraXBwaW5nIHN5bmNocm9uaXphdGlvbiBjaGVja3MgYXMgVFNDIGlzIHJlbGlhYmxlLlxuIik7CiAJCXJldHVybjsKIAl9CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC92bWlfMzIuYyBiL2FyY2gveDg2L2tlcm5lbC92bWlfMzIuYwppbmRleCAzMWU2ZjZjLi5kNDMwZTRjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvdm1pXzMyLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3ZtaV8zMi5jCkBAIC02NDgsNyArNjQ4LDcgQEAKIAogCXB2X2luZm8ucGFyYXZpcnRfZW5hYmxlZCA9IDE7CiAJcHZfaW5mby5rZXJuZWxfcnBsID0ga2VybmVsX2NzICYgU0VHTUVOVF9SUExfTUFTSzsKLQlwdl9pbmZvLm5hbWUgPSAidm1pIjsKKwlwdl9pbmZvLm5hbWUgPSAidm1pIFtkZXByZWNhdGVkXSI7CiAKIAlwdl9pbml0X29wcy5wYXRjaCA9IHZtaV9wYXRjaDsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3ZtbGludXgubGRzLlMgYi9hcmNoL3g4Ni9rZXJuZWwvdm1saW51eC5sZHMuUwppbmRleCBhNDZhY2NjLi4zYzY4ZmUyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvdm1saW51eC5sZHMuUworKysgYi9hcmNoL3g4Ni9rZXJuZWwvdm1saW51eC5sZHMuUwpAQCAtNjUsMTcgKzY1LDExIEBACiAjZW5kaWYKIAogCS8qIFRleHQgYW5kIHJlYWQtb25seSBkYXRhICovCi0KLQkvKiBib290c3RyYXBwaW5nIGNvZGUgKi8KLQkudGV4dC5oZWFkIDogQVQoQUREUigudGV4dC5oZWFkKSAtIExPQURfT0ZGU0VUKSB7Ci0JCV90ZXh0ID0gLjsKLQkJKigudGV4dC5oZWFkKQotCX0gOnRleHQgPSAweDkwOTAKLQotCS8qIFRoZSByZXN0IG9mIHRoZSB0ZXh0ICovCiAJLnRleHQgOiAgQVQoQUREUigudGV4dCkgLSBMT0FEX09GRlNFVCkgeworCQlfdGV4dCA9IC47CisJCS8qIGJvb3RzdHJhcHBpbmcgY29kZSAqLworCQlIRUFEX1RFWFQKICNpZmRlZiBDT05GSUdfWDg2XzMyCi0JCS8qIG5vdCByZWFsbHkgbmVlZGVkLCBhbHJlYWR5IHBhZ2UgYWxpZ25lZCAqLwogCQkuID0gQUxJR04oUEFHRV9TSVpFKTsKIAkJKigudGV4dC5wYWdlX2FsaWduZWQpCiAjZW5kaWYKQEAgLTk0LDEzICs4OCw3IEBACiAKIAlOT1RFUyA6dGV4dCA6bm90ZQogCi0JLyogRXhjZXB0aW9uIHRhYmxlICovCi0JLiA9IEFMSUdOKDE2KTsKLQlfX2V4X3RhYmxlIDogQVQoQUREUihfX2V4X3RhYmxlKSAtIExPQURfT0ZGU0VUKSB7Ci0JCV9fc3RhcnRfX19leF90YWJsZSA9IC47Ci0JCSooX19leF90YWJsZSkKLQkJX19zdG9wX19fZXhfdGFibGUgPSAuOwotCX0gOnRleHQgPSAweDkwOTAKKwlFWENFUFRJT05fVEFCTEUoMTYpIDp0ZXh0ID0gMHg5MDkwCiAKIAlST19EQVRBKFBBR0VfU0laRSkKIApAQCAtMTE4LDcgKzEwNiw2IEBACiAjZW5kaWYKIAogCQlQQUdFX0FMSUdORURfREFUQShQQUdFX1NJWkUpCi0JCSooLmRhdGEuaWR0KQogCiAJCUNBQ0hFTElORV9BTElHTkVEX0RBVEEoQ09ORklHX1g4Nl9MMV9DQUNIRV9CWVRFUykKIApAQCAtMTM1LDI0ICsxMjIsMjEgQEAKICNpZmRlZiBDT05GSUdfWDg2XzY0CiAKICNkZWZpbmUgVlNZU0NBTExfQUREUiAoLTEwKjEwMjQqMTAyNCkKLSNkZWZpbmUgVlNZU0NBTExfUEhZU19BRERSICgoTE9BREFERFIoLmRhdGEpICsgU0laRU9GKC5kYXRhKSArIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQUdFX1NJWkUgLSAxKSAmIH4oUEFHRV9TSVpFIC0gMSkpCi0jZGVmaW5lIFZTWVNDQUxMX1ZJUlRfQUREUiAoKEFERFIoLmRhdGEpICsgU0laRU9GKC5kYXRhKSArIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQUdFX1NJWkUgLSAxKSAmIH4oUEFHRV9TSVpFIC0gMSkpCiAKLSNkZWZpbmUgVkxPQURfT0ZGU0VUIChWU1lTQ0FMTF9BRERSIC0gVlNZU0NBTExfUEhZU19BRERSKQorI2RlZmluZSBWTE9BRF9PRkZTRVQgKFZTWVNDQUxMX0FERFIgLSBfX3ZzeXNjYWxsXzAgKyBMT0FEX09GRlNFVCkKICNkZWZpbmUgVkxPQUQoeCkgKEFERFIoeCkgLSBWTE9BRF9PRkZTRVQpCiAKLSNkZWZpbmUgVlZJUlRfT0ZGU0VUIChWU1lTQ0FMTF9BRERSIC0gVlNZU0NBTExfVklSVF9BRERSKQorI2RlZmluZSBWVklSVF9PRkZTRVQgKFZTWVNDQUxMX0FERFIgLSBfX3ZzeXNjYWxsXzApCiAjZGVmaW5lIFZWSVJUKHgpIChBRERSKHgpIC0gVlZJUlRfT0ZGU0VUKQogCisJLiA9IEFMSUdOKDQwOTYpOworCV9fdnN5c2NhbGxfMCA9IC47CisKIAkuID0gVlNZU0NBTExfQUREUjsKLQkudnN5c2NhbGxfMCA6IEFUKFZTWVNDQUxMX1BIWVNfQUREUikgeworCS52c3lzY2FsbF8wIDogQVQoVkxPQUQoLnZzeXNjYWxsXzApKSB7CiAJCSooLnZzeXNjYWxsXzApCiAJfSA6dXNlcgogCi0JX192c3lzY2FsbF8wID0gVlNZU0NBTExfVklSVF9BRERSOwotCiAJLiA9IEFMSUdOKENPTkZJR19YODZfTDFfQ0FDSEVfQllURVMpOwogCS52c3lzY2FsbF9mbiA6IEFUKFZMT0FEKC52c3lzY2FsbF9mbikpIHsKIAkJKigudnN5c2NhbGxfZm4pCkBAIC0xOTIsMTEgKzE3Niw5IEBACiAJCSooLnZzeXNjYWxsXzMpCiAJfQogCi0JLiA9IFZTWVNDQUxMX1ZJUlRfQUREUiArIFBBR0VfU0laRTsKKwkuID0gX192c3lzY2FsbF8wICsgUEFHRV9TSVpFOwogCiAjdW5kZWYgVlNZU0NBTExfQUREUgotI3VuZGVmIFZTWVNDQUxMX1BIWVNfQUREUgotI3VuZGVmIFZTWVNDQUxMX1ZJUlRfQUREUgogI3VuZGVmIFZMT0FEX09GRlNFVAogI3VuZGVmIFZMT0FECiAjdW5kZWYgVlZJUlRfT0ZGU0VUCkBAIC0yMTksMzYgKzIwMSwxMiBAQAogCVBFUkNQVV9WQUREUigwLCA6cGVyY3B1KQogI2VuZGlmCiAKLQkuaW5pdC50ZXh0IDogQVQoQUREUiguaW5pdC50ZXh0KSAtIExPQURfT0ZGU0VUKSB7Ci0JCV9zaW5pdHRleHQgPSAuOwotCQlJTklUX1RFWFQKLQkJX2Vpbml0dGV4dCA9IC47Ci0JfQorCUlOSVRfVEVYVF9TRUNUSU9OKFBBR0VfU0laRSkKICNpZmRlZiBDT05GSUdfWDg2XzY0CiAJOmluaXQKICNlbmRpZgogCi0JLmluaXQuZGF0YSA6IEFUKEFERFIoLmluaXQuZGF0YSkgLSBMT0FEX09GRlNFVCkgewotCQlJTklUX0RBVEEKLQl9Ci0KLQkuID0gQUxJR04oMTYpOwotCS5pbml0LnNldHVwIDogQVQoQUREUiguaW5pdC5zZXR1cCkgLSBMT0FEX09GRlNFVCkgewotCQlfX3NldHVwX3N0YXJ0ID0gLjsKLQkJKiguaW5pdC5zZXR1cCkKLQkJX19zZXR1cF9lbmQgPSAuOwotCX0KLQkuaW5pdGNhbGwuaW5pdCA6IEFUKEFERFIoLmluaXRjYWxsLmluaXQpIC0gTE9BRF9PRkZTRVQpIHsKLQkJX19pbml0Y2FsbF9zdGFydCA9IC47Ci0JCUlOSVRDQUxMUwotCQlfX2luaXRjYWxsX2VuZCA9IC47Ci0JfQotCi0JLmNvbl9pbml0Y2FsbC5pbml0IDogQVQoQUREUiguY29uX2luaXRjYWxsLmluaXQpIC0gTE9BRF9PRkZTRVQpIHsKLQkJX19jb25faW5pdGNhbGxfc3RhcnQgPSAuOwotCQkqKC5jb25faW5pdGNhbGwuaW5pdCkKLQkJX19jb25faW5pdGNhbGxfZW5kID0gLjsKLQl9CisJSU5JVF9EQVRBX1NFQ1RJT04oMTYpCiAKIAkueDg2X2NwdV9kZXYuaW5pdCA6IEFUKEFERFIoLng4Nl9jcHVfZGV2LmluaXQpIC0gTE9BRF9PRkZTRVQpIHsKIAkJX194ODZfY3B1X2Rldl9zdGFydCA9IC47CkBAIC0yNTYsOCArMjE0LDYgQEAKIAkJX194ODZfY3B1X2Rldl9lbmQgPSAuOwogCX0KIAotCVNFQ1VSSVRZX0lOSVQKLQogCS4gPSBBTElHTig4KTsKIAkucGFyYWluc3RydWN0aW9ucyA6IEFUKEFERFIoLnBhcmFpbnN0cnVjdGlvbnMpIC0gTE9BRF9PRkZTRVQpIHsKIAkJX19wYXJhaW5zdHJ1Y3Rpb25zID0gLjsKQEAgLTI4OCwxNSArMjQ0LDYgQEAKIAkJRVhJVF9EQVRBCiAJfQogCi0jaWZkZWYgQ09ORklHX0JMS19ERVZfSU5JVFJECi0JLiA9IEFMSUdOKFBBR0VfU0laRSk7Ci0JLmluaXQucmFtZnMgOiBBVChBRERSKC5pbml0LnJhbWZzKSAtIExPQURfT0ZGU0VUKSB7Ci0JCV9faW5pdHJhbWZzX3N0YXJ0ID0gLjsKLQkJKiguaW5pdC5yYW1mcykKLQkJX19pbml0cmFtZnNfZW5kID0gLjsKLQl9Ci0jZW5kaWYKLQogI2lmICFkZWZpbmVkKENPTkZJR19YODZfNjQpIHx8ICFkZWZpbmVkKENPTkZJR19TTVApCiAJUEVSQ1BVKFBBR0VfU0laRSkKICNlbmRpZgpAQCAtMzU4LDYgKzMwNSw5IEBACiAKIAogI2lmZGVmIENPTkZJR19YODZfMzIKKy8qCisgKiBUaGUgQVNTRVJUKCkgc2luayB0byAuIGlzIGludGVudGlvbmFsLCBmb3IgYmludXRpbHMgMi4xNCBjb21wYXRpYmlsaXR5OgorICovCiAuID0gQVNTRVJUKChfZW5kIC0gTE9BRF9PRkZTRVQgPD0gS0VSTkVMX0lNQUdFX1NJWkUpLAogCSAgICJrZXJuZWwgaW1hZ2UgYmlnZ2VyIHRoYW4gS0VSTkVMX0lNQUdFX1NJWkUiKTsKICNlbHNlCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vaTgyNTQuYyBiL2FyY2gveDg2L2t2bS9pODI1NC5jCmluZGV4IDgyYWQ1MjMuLjE0NGU3ZjYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9pODI1NC5jCisrKyBiL2FyY2gveDg2L2t2bS9pODI1NC5jCkBAIC0xMTYsNyArMTE2LDcgQEAKIAkgKiBpdHNlbGYgd2l0aCB0aGUgaW5pdGlhbCBjb3VudCBhbmQgY29udGludWVzIGNvdW50aW5nCiAJICogZnJvbSB0aGVyZS4KIAkgKi8KLQlyZW1haW5pbmcgPSBocnRpbWVyX2V4cGlyZXNfcmVtYWluaW5nKCZwcy0+cGl0X3RpbWVyLnRpbWVyKTsKKwlyZW1haW5pbmcgPSBocnRpbWVyX2dldF9yZW1haW5pbmcoJnBzLT5waXRfdGltZXIudGltZXIpOwogCWVsYXBzZWQgPSBwcy0+cGl0X3RpbWVyLnBlcmlvZCAtIGt0aW1lX3RvX25zKHJlbWFpbmluZyk7CiAJZWxhcHNlZCA9IG1vZF82NChlbGFwc2VkLCBwcy0+cGl0X3RpbWVyLnBlcmlvZCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9sYXBpYy5jIGIvYXJjaC94ODYva3ZtL2xhcGljLmMKaW5kZXggMWFlNWNlYi4uMjNjMjE3NiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL2xhcGljLmMKKysrIGIvYXJjaC94ODYva3ZtL2xhcGljLmMKQEAgLTUyMSw3ICs1MjEsNyBAQAogCWlmIChhcGljX2dldF9yZWcoYXBpYywgQVBJQ19UTUlDVCkgPT0gMCkKIAkJcmV0dXJuIDA7CiAKLQlyZW1haW5pbmcgPSBocnRpbWVyX2V4cGlyZXNfcmVtYWluaW5nKCZhcGljLT5sYXBpY190aW1lci50aW1lcik7CisJcmVtYWluaW5nID0gaHJ0aW1lcl9nZXRfcmVtYWluaW5nKCZhcGljLT5sYXBpY190aW1lci50aW1lcik7CiAJaWYgKGt0aW1lX3RvX25zKHJlbWFpbmluZykgPCAwKQogCQlyZW1haW5pbmcgPSBrdGltZV9zZXQoMCwgMCk7CiAKQEAgLTY2NCw3ICs2NjQsNyBAQAogewogCWt0aW1lX3Qgbm93ID0gYXBpYy0+bGFwaWNfdGltZXIudGltZXIuYmFzZS0+Z2V0X3RpbWUoKTsKIAotCWFwaWMtPmxhcGljX3RpbWVyLnBlcmlvZCA9IGFwaWNfZ2V0X3JlZyhhcGljLCBBUElDX1RNSUNUKSAqCisJYXBpYy0+bGFwaWNfdGltZXIucGVyaW9kID0gKHU2NClhcGljX2dldF9yZWcoYXBpYywgQVBJQ19UTUlDVCkgKgogCQkgICAgQVBJQ19CVVNfQ1lDTEVfTlMgKiBhcGljLT5kaXZpZGVfY291bnQ7CiAJYXRvbWljX3NldCgmYXBpYy0+bGFwaWNfdGltZXIucGVuZGluZywgMCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9tbXUuYyBiL2FyY2gveDg2L2t2bS9tbXUuYwppbmRleCBlY2E0MWFlLi44MThiOTJhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vbW11LmMKKysrIGIvYXJjaC94ODYva3ZtL21tdS5jCkBAIC0xNTYsNiArMTU2LDggQEAKICNkZWZpbmUgQ1JFQVRFX1RSQUNFX1BPSU5UUwogI2luY2x1ZGUgIm1tdXRyYWNlLmgiCiAKKyNkZWZpbmUgU1BURV9IT1NUX1dSSVRFQUJMRSAoMVVMTCA8PCBQVF9GSVJTVF9BVkFJTF9CSVRTX1NISUZUKQorCiAjZGVmaW5lIFNIQURPV19QVF9JTkRFWChhZGRyLCBsZXZlbCkgUFQ2NF9JTkRFWChhZGRyLCBsZXZlbCkKIAogc3RydWN0IGt2bV9ybWFwX2Rlc2MgewpAQCAtNjM0LDkgKzYzNiw3IEBACiAJaWYgKCpzcHRlICYgc2hhZG93X2FjY2Vzc2VkX21hc2spCiAJCWt2bV9zZXRfcGZuX2FjY2Vzc2VkKHBmbik7CiAJaWYgKGlzX3dyaXRlYmxlX3B0ZSgqc3B0ZSkpCi0JCWt2bV9yZWxlYXNlX3Bmbl9kaXJ0eShwZm4pOwotCWVsc2UKLQkJa3ZtX3JlbGVhc2VfcGZuX2NsZWFuKHBmbik7CisJCWt2bV9zZXRfcGZuX2RpcnR5KHBmbik7CiAJcm1hcHAgPSBnZm5fdG9fcm1hcChrdm0sIHNwLT5nZm5zW3NwdGUgLSBzcC0+c3B0XSwgc3AtPnJvbGUubGV2ZWwpOwogCWlmICghKnJtYXBwKSB7CiAJCXByaW50ayhLRVJOX0VSUiAicm1hcF9yZW1vdmU6ICVwICVsbHggMC0+QlVHXG4iLCBzcHRlLCAqc3B0ZSk7CkBAIC03NDgsNyArNzQ4LDggQEAKIAlyZXR1cm4gd3JpdGVfcHJvdGVjdGVkOwogfQogCi1zdGF0aWMgaW50IGt2bV91bm1hcF9ybWFwcChzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgKnJtYXBwKQorc3RhdGljIGludCBrdm1fdW5tYXBfcm1hcHAoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nICpybWFwcCwKKwkJCSAgIHVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKIAl1NjQgKnNwdGU7CiAJaW50IG5lZWRfdGxiX2ZsdXNoID0gMDsKQEAgLTc2Myw4ICs3NjQsNDcgQEAKIAlyZXR1cm4gbmVlZF90bGJfZmx1c2g7CiB9CiAKK3N0YXRpYyBpbnQga3ZtX3NldF9wdGVfcm1hcHAoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nICpybWFwcCwKKwkJCSAgICAgdW5zaWduZWQgbG9uZyBkYXRhKQoreworCWludCBuZWVkX2ZsdXNoID0gMDsKKwl1NjQgKnNwdGUsIG5ld19zcHRlOworCXB0ZV90ICpwdGVwID0gKHB0ZV90ICopZGF0YTsKKwlwZm5fdCBuZXdfcGZuOworCisJV0FSTl9PTihwdGVfaHVnZSgqcHRlcCkpOworCW5ld19wZm4gPSBwdGVfcGZuKCpwdGVwKTsKKwlzcHRlID0gcm1hcF9uZXh0KGt2bSwgcm1hcHAsIE5VTEwpOworCXdoaWxlIChzcHRlKSB7CisJCUJVR19PTighaXNfc2hhZG93X3ByZXNlbnRfcHRlKCpzcHRlKSk7CisJCXJtYXBfcHJpbnRrKCJrdm1fc2V0X3B0ZV9ybWFwcDogc3B0ZSAlcCAlbGx4XG4iLCBzcHRlLCAqc3B0ZSk7CisJCW5lZWRfZmx1c2ggPSAxOworCQlpZiAocHRlX3dyaXRlKCpwdGVwKSkgeworCQkJcm1hcF9yZW1vdmUoa3ZtLCBzcHRlKTsKKwkJCV9fc2V0X3NwdGUoc3B0ZSwgc2hhZG93X3RyYXBfbm9ucHJlc2VudF9wdGUpOworCQkJc3B0ZSA9IHJtYXBfbmV4dChrdm0sIHJtYXBwLCBOVUxMKTsKKwkJfSBlbHNlIHsKKwkJCW5ld19zcHRlID0gKnNwdGUgJn4gKFBUNjRfQkFTRV9BRERSX01BU0spOworCQkJbmV3X3NwdGUgfD0gKHU2NCluZXdfcGZuIDw8IFBBR0VfU0hJRlQ7CisKKwkJCW5ld19zcHRlICY9IH5QVF9XUklUQUJMRV9NQVNLOworCQkJbmV3X3NwdGUgJj0gflNQVEVfSE9TVF9XUklURUFCTEU7CisJCQlpZiAoaXNfd3JpdGVibGVfcHRlKCpzcHRlKSkKKwkJCQlrdm1fc2V0X3Bmbl9kaXJ0eShzcHRlX3RvX3Bmbigqc3B0ZSkpOworCQkJX19zZXRfc3B0ZShzcHRlLCBuZXdfc3B0ZSk7CisJCQlzcHRlID0gcm1hcF9uZXh0KGt2bSwgcm1hcHAsIHNwdGUpOworCQl9CisJfQorCWlmIChuZWVkX2ZsdXNoKQorCQlrdm1fZmx1c2hfcmVtb3RlX3RsYnMoa3ZtKTsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IGt2bV9oYW5kbGVfaHZhKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBodmEsCi0JCQkgIGludCAoKmhhbmRsZXIpKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyAqcm1hcHApKQorCQkJICB1bnNpZ25lZCBsb25nIGRhdGEsCisJCQkgIGludCAoKmhhbmRsZXIpKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyAqcm1hcHAsCisJCQkJCSB1bnNpZ25lZCBsb25nIGRhdGEpKQogewogCWludCBpLCBqOwogCWludCByZXR2YWwgPSAwOwpAQCAtNzg2LDEzICs4MjYsMTUgQEAKIAkJaWYgKGh2YSA+PSBzdGFydCAmJiBodmEgPCBlbmQpIHsKIAkJCWdmbl90IGdmbl9vZmZzZXQgPSAoaHZhIC0gc3RhcnQpID4+IFBBR0VfU0hJRlQ7CiAKLQkJCXJldHZhbCB8PSBoYW5kbGVyKGt2bSwgJm1lbXNsb3QtPnJtYXBbZ2ZuX29mZnNldF0pOworCQkJcmV0dmFsIHw9IGhhbmRsZXIoa3ZtLCAmbWVtc2xvdC0+cm1hcFtnZm5fb2Zmc2V0XSwKKwkJCQkJICBkYXRhKTsKIAogCQkJZm9yIChqID0gMDsgaiA8IEtWTV9OUl9QQUdFX1NJWkVTIC0gMTsgKytqKSB7CiAJCQkJaW50IGlkeCA9IGdmbl9vZmZzZXQ7CiAJCQkJaWR4IC89IEtWTV9QQUdFU19QRVJfSFBBR0UoUFRfRElSRUNUT1JZX0xFVkVMICsgaik7CiAJCQkJcmV0dmFsIHw9IGhhbmRsZXIoa3ZtLAotCQkJCQkmbWVtc2xvdC0+bHBhZ2VfaW5mb1tqXVtpZHhdLnJtYXBfcGRlKTsKKwkJCQkJJm1lbXNsb3QtPmxwYWdlX2luZm9bal1baWR4XS5ybWFwX3BkZSwKKwkJCQkJZGF0YSk7CiAJCQl9CiAJCX0KIAl9CkBAIC04MDIsMTAgKzg0NCwxNiBAQAogCiBpbnQga3ZtX3VubWFwX2h2YShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgaHZhKQogewotCXJldHVybiBrdm1faGFuZGxlX2h2YShrdm0sIGh2YSwga3ZtX3VubWFwX3JtYXBwKTsKKwlyZXR1cm4ga3ZtX2hhbmRsZV9odmEoa3ZtLCBodmEsIDAsIGt2bV91bm1hcF9ybWFwcCk7CiB9CiAKLXN0YXRpYyBpbnQga3ZtX2FnZV9ybWFwcChzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgKnJtYXBwKQordm9pZCBrdm1fc2V0X3NwdGVfaHZhKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBodmEsIHB0ZV90IHB0ZSkKK3sKKwlrdm1faGFuZGxlX2h2YShrdm0sIGh2YSwgKHVuc2lnbmVkIGxvbmcpJnB0ZSwga3ZtX3NldF9wdGVfcm1hcHApOworfQorCitzdGF0aWMgaW50IGt2bV9hZ2Vfcm1hcHAoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nICpybWFwcCwKKwkJCSB1bnNpZ25lZCBsb25nIGRhdGEpCiB7CiAJdTY0ICpzcHRlOwogCWludCB5b3VuZyA9IDA7CkBAIC04NDEsMTMgKzg4OSwxMyBAQAogCWdmbiA9IHVuYWxpYXNfZ2ZuKHZjcHUtPmt2bSwgZ2ZuKTsKIAlybWFwcCA9IGdmbl90b19ybWFwKHZjcHUtPmt2bSwgZ2ZuLCBzcC0+cm9sZS5sZXZlbCk7CiAKLQlrdm1fdW5tYXBfcm1hcHAodmNwdS0+a3ZtLCBybWFwcCk7CisJa3ZtX3VubWFwX3JtYXBwKHZjcHUtPmt2bSwgcm1hcHAsIDApOwogCWt2bV9mbHVzaF9yZW1vdGVfdGxicyh2Y3B1LT5rdm0pOwogfQogCiBpbnQga3ZtX2FnZV9odmEoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIGh2YSkKIHsKLQlyZXR1cm4ga3ZtX2hhbmRsZV9odmEoa3ZtLCBodmEsIGt2bV9hZ2Vfcm1hcHApOworCXJldHVybiBrdm1faGFuZGxlX2h2YShrdm0sIGh2YSwgMCwga3ZtX2FnZV9ybWFwcCk7CiB9CiAKICNpZmRlZiBNTVVfREVCVUcKQEAgLTE3NTYsNyArMTgwNCw3IEBACiAJCSAgICB1bnNpZ25lZCBwdGVfYWNjZXNzLCBpbnQgdXNlcl9mYXVsdCwKIAkJICAgIGludCB3cml0ZV9mYXVsdCwgaW50IGRpcnR5LCBpbnQgbGV2ZWwsCiAJCSAgICBnZm5fdCBnZm4sIHBmbl90IHBmbiwgYm9vbCBzcGVjdWxhdGl2ZSwKLQkJICAgIGJvb2wgY2FuX3Vuc3luYykKKwkJICAgIGJvb2wgY2FuX3Vuc3luYywgYm9vbCByZXNldF9ob3N0X3Byb3RlY3Rpb24pCiB7CiAJdTY0IHNwdGU7CiAJaW50IHJldCA9IDA7CkBAIC0xNzgzLDYgKzE4MzEsOSBAQAogCQlzcHRlIHw9IGt2bV94ODZfb3BzLT5nZXRfbXRfbWFzayh2Y3B1LCBnZm4sCiAJCQlrdm1faXNfbW1pb19wZm4ocGZuKSk7CiAKKwlpZiAocmVzZXRfaG9zdF9wcm90ZWN0aW9uKQorCQlzcHRlIHw9IFNQVEVfSE9TVF9XUklURUFCTEU7CisKIAlzcHRlIHw9ICh1NjQpcGZuIDw8IFBBR0VfU0hJRlQ7CiAKIAlpZiAoKHB0ZV9hY2Nlc3MgJiBBQ0NfV1JJVEVfTUFTSykKQEAgLTE4MjgsNyArMTg3OSw4IEBACiAJCQkgdW5zaWduZWQgcHRfYWNjZXNzLCB1bnNpZ25lZCBwdGVfYWNjZXNzLAogCQkJIGludCB1c2VyX2ZhdWx0LCBpbnQgd3JpdGVfZmF1bHQsIGludCBkaXJ0eSwKIAkJCSBpbnQgKnB0d3JpdGUsIGludCBsZXZlbCwgZ2ZuX3QgZ2ZuLAotCQkJIHBmbl90IHBmbiwgYm9vbCBzcGVjdWxhdGl2ZSkKKwkJCSBwZm5fdCBwZm4sIGJvb2wgc3BlY3VsYXRpdmUsCisJCQkgYm9vbCByZXNldF9ob3N0X3Byb3RlY3Rpb24pCiB7CiAJaW50IHdhc19ybWFwcGVkID0gMDsKIAlpbnQgd2FzX3dyaXRlYmxlID0gaXNfd3JpdGVibGVfcHRlKCpzcHRlcCk7CkBAIC0xODYwLDcgKzE5MTIsOCBAQAogCX0KIAogCWlmIChzZXRfc3B0ZSh2Y3B1LCBzcHRlcCwgcHRlX2FjY2VzcywgdXNlcl9mYXVsdCwgd3JpdGVfZmF1bHQsCi0JCSAgICAgIGRpcnR5LCBsZXZlbCwgZ2ZuLCBwZm4sIHNwZWN1bGF0aXZlLCB0cnVlKSkgeworCQkgICAgICBkaXJ0eSwgbGV2ZWwsIGdmbiwgcGZuLCBzcGVjdWxhdGl2ZSwgdHJ1ZSwKKwkJICAgICAgcmVzZXRfaG9zdF9wcm90ZWN0aW9uKSkgewogCQlpZiAod3JpdGVfZmF1bHQpCiAJCQkqcHR3cml0ZSA9IDE7CiAJCWt2bV94ODZfb3BzLT50bGJfZmx1c2godmNwdSk7CkBAIC0xODc3LDggKzE5MzAsNyBAQAogCXBhZ2VfaGVhZGVyX3VwZGF0ZV9zbG90KHZjcHUtPmt2bSwgc3B0ZXAsIGdmbik7CiAJaWYgKCF3YXNfcm1hcHBlZCkgewogCQlybWFwX2NvdW50ID0gcm1hcF9hZGQodmNwdSwgc3B0ZXAsIGdmbik7Ci0JCWlmICghaXNfcm1hcF9zcHRlKCpzcHRlcCkpCi0JCQlrdm1fcmVsZWFzZV9wZm5fY2xlYW4ocGZuKTsKKwkJa3ZtX3JlbGVhc2VfcGZuX2NsZWFuKHBmbik7CiAJCWlmIChybWFwX2NvdW50ID4gUk1BUF9SRUNZQ0xFX1RIUkVTSE9MRCkKIAkJCXJtYXBfcmVjeWNsZSh2Y3B1LCBzcHRlcCwgZ2ZuKTsKIAl9IGVsc2UgewpAQCAtMTkwOSw3ICsxOTYxLDcgQEAKIAkJaWYgKGl0ZXJhdG9yLmxldmVsID09IGxldmVsKSB7CiAJCQltbXVfc2V0X3NwdGUodmNwdSwgaXRlcmF0b3Iuc3B0ZXAsIEFDQ19BTEwsIEFDQ19BTEwsCiAJCQkJICAgICAwLCB3cml0ZSwgMSwgJnB0X3dyaXRlLAotCQkJCSAgICAgbGV2ZWwsIGdmbiwgcGZuLCBmYWxzZSk7CisJCQkJICAgICBsZXZlbCwgZ2ZuLCBwZm4sIGZhbHNlLCB0cnVlKTsKIAkJCSsrdmNwdS0+c3RhdC5wZl9maXhlZDsKIAkJCWJyZWFrOwogCQl9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vcGFnaW5nX3RtcGwuaCBiL2FyY2gveDg2L2t2bS9wYWdpbmdfdG1wbC5oCmluZGV4IGQyZmVjOWMuLjcyNTU4ZjggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9wYWdpbmdfdG1wbC5oCisrKyBiL2FyY2gveDg2L2t2bS9wYWdpbmdfdG1wbC5oCkBAIC0yNzMsOSArMjczLDEzIEBACiAJaWYgKG1tdV9ub3RpZmllcl9yZXRyeSh2Y3B1LCB2Y3B1LT5hcmNoLnVwZGF0ZV9wdGUubW11X3NlcSkpCiAJCXJldHVybjsKIAlrdm1fZ2V0X3BmbihwZm4pOworCS8qCisJICogd2UgY2FsbCBtbXVfc2V0X3NwdGUoKSB3aXRoIHJlc2V0X2hvc3RfcHJvdGVjdGlvbiA9IHRydWUgYmVhY3VzZSB0aGF0CisJICogdmNwdS0+YXJjaC51cGRhdGVfcHRlLnBmbiB3YXMgZmV0Y2hlZCBmcm9tIGdldF91c2VyX3BhZ2VzKHdyaXRlID0gMSkuCisJICovCiAJbW11X3NldF9zcHRlKHZjcHUsIHNwdGUsIHBhZ2UtPnJvbGUuYWNjZXNzLCBwdGVfYWNjZXNzLCAwLCAwLAogCQkgICAgIGdwdGUgJiBQVF9ESVJUWV9NQVNLLCBOVUxMLCBQVF9QQUdFX1RBQkxFX0xFVkVMLAotCQkgICAgIGdwdGVfdG9fZ2ZuKGdwdGUpLCBwZm4sIHRydWUpOworCQkgICAgIGdwdGVfdG9fZ2ZuKGdwdGUpLCBwZm4sIHRydWUsIHRydWUpOwogfQogCiAvKgpAQCAtMzA4LDcgKzMxMiw3IEBACiAJCQkJICAgICB1c2VyX2ZhdWx0LCB3cml0ZV9mYXVsdCwKIAkJCQkgICAgIGd3LT5wdGVzW2d3LT5sZXZlbC0xXSAmIFBUX0RJUlRZX01BU0ssCiAJCQkJICAgICBwdHdyaXRlLCBsZXZlbCwKLQkJCQkgICAgIGd3LT5nZm4sIHBmbiwgZmFsc2UpOworCQkJCSAgICAgZ3ctPmdmbiwgcGZuLCBmYWxzZSwgdHJ1ZSk7CiAJCQlicmVhazsKIAkJfQogCkBAIC01NTgsNiArNTYyLDcgQEAKIHN0YXRpYyBpbnQgRk5BTUUoc3luY19wYWdlKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwKQogewogCWludCBpLCBvZmZzZXQsIG5yX3ByZXNlbnQ7CisJYm9vbCByZXNldF9ob3N0X3Byb3RlY3Rpb247CiAKIAlvZmZzZXQgPSBucl9wcmVzZW50ID0gMDsKIApAQCAtNTk1LDkgKzYwMCwxNiBAQAogCiAJCW5yX3ByZXNlbnQrKzsKIAkJcHRlX2FjY2VzcyA9IHNwLT5yb2xlLmFjY2VzcyAmIEZOQU1FKGdwdGVfYWNjZXNzKSh2Y3B1LCBncHRlKTsKKwkJaWYgKCEoc3AtPnNwdFtpXSAmIFNQVEVfSE9TVF9XUklURUFCTEUpKSB7CisJCQlwdGVfYWNjZXNzICY9IH5BQ0NfV1JJVEVfTUFTSzsKKwkJCXJlc2V0X2hvc3RfcHJvdGVjdGlvbiA9IDA7CisJCX0gZWxzZSB7CisJCQlyZXNldF9ob3N0X3Byb3RlY3Rpb24gPSAxOworCQl9CiAJCXNldF9zcHRlKHZjcHUsICZzcC0+c3B0W2ldLCBwdGVfYWNjZXNzLCAwLCAwLAogCQkJIGlzX2RpcnR5X2dwdGUoZ3B0ZSksIFBUX1BBR0VfVEFCTEVfTEVWRUwsIGdmbiwKLQkJCSBzcHRlX3RvX3BmbihzcC0+c3B0W2ldKSwgdHJ1ZSwgZmFsc2UpOworCQkJIHNwdGVfdG9fcGZuKHNwLT5zcHRbaV0pLCB0cnVlLCBmYWxzZSwKKwkJCSByZXNldF9ob3N0X3Byb3RlY3Rpb24pOwogCX0KIAogCXJldHVybiAhbnJfcHJlc2VudDsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0uYyBiL2FyY2gveDg2L2t2bS9zdm0uYwppbmRleCA5NDRjYzljLi5jMTc0MDRhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtLmMKKysrIGIvYXJjaC94ODYva3ZtL3N2bS5jCkBAIC03NjcsNiArNzY3LDggQEAKIAkJcmR0c2NsbCh0c2NfdGhpcyk7CiAJCWRlbHRhID0gdmNwdS0+YXJjaC5ob3N0X3RzYyAtIHRzY190aGlzOwogCQlzdm0tPnZtY2ItPmNvbnRyb2wudHNjX29mZnNldCArPSBkZWx0YTsKKwkJaWYgKGlzX25lc3RlZChzdm0pKQorCQkJc3ZtLT5uZXN0ZWQuaHNhdmUtPmNvbnRyb2wudHNjX29mZnNldCArPSBkZWx0YTsKIAkJdmNwdS0+Y3B1ID0gY3B1OwogCQlrdm1fbWlncmF0ZV90aW1lcnModmNwdSk7CiAJCXN2bS0+YXNpZF9nZW5lcmF0aW9uID0gMDsKQEAgLTIwNTcsMTAgKzIwNTksMTQgQEAKIAogCXN3aXRjaCAoZWN4KSB7CiAJY2FzZSBNU1JfSUEzMl9UU0M6IHsKLQkJdTY0IHRzYzsKKwkJdTY0IHRzY19vZmZzZXQ7CiAKLQkJcmR0c2NsbCh0c2MpOwotCQkqZGF0YSA9IHN2bS0+dm1jYi0+Y29udHJvbC50c2Nfb2Zmc2V0ICsgdHNjOworCQlpZiAoaXNfbmVzdGVkKHN2bSkpCisJCQl0c2Nfb2Zmc2V0ID0gc3ZtLT5uZXN0ZWQuaHNhdmUtPmNvbnRyb2wudHNjX29mZnNldDsKKwkJZWxzZQorCQkJdHNjX29mZnNldCA9IHN2bS0+dm1jYi0+Y29udHJvbC50c2Nfb2Zmc2V0OworCisJCSpkYXRhID0gdHNjX29mZnNldCArIG5hdGl2ZV9yZWFkX3RzYygpOwogCQlicmVhazsKIAl9CiAJY2FzZSBNU1JfSzZfU1RBUjoKQEAgLTIxNDYsMTAgKzIxNTIsMTcgQEAKIAogCXN3aXRjaCAoZWN4KSB7CiAJY2FzZSBNU1JfSUEzMl9UU0M6IHsKLQkJdTY0IHRzYzsKKwkJdTY0IHRzY19vZmZzZXQgPSBkYXRhIC0gbmF0aXZlX3JlYWRfdHNjKCk7CisJCXU2NCBnX3RzY19vZmZzZXQgPSAwOwogCi0JCXJkdHNjbGwodHNjKTsKLQkJc3ZtLT52bWNiLT5jb250cm9sLnRzY19vZmZzZXQgPSBkYXRhIC0gdHNjOworCQlpZiAoaXNfbmVzdGVkKHN2bSkpIHsKKwkJCWdfdHNjX29mZnNldCA9IHN2bS0+dm1jYi0+Y29udHJvbC50c2Nfb2Zmc2V0IC0KKwkJCQkgICAgICAgc3ZtLT5uZXN0ZWQuaHNhdmUtPmNvbnRyb2wudHNjX29mZnNldDsKKwkJCXN2bS0+bmVzdGVkLmhzYXZlLT5jb250cm9sLnRzY19vZmZzZXQgPSB0c2Nfb2Zmc2V0OworCQl9CisKKwkJc3ZtLT52bWNiLT5jb250cm9sLnRzY19vZmZzZXQgPSB0c2Nfb2Zmc2V0ICsgZ190c2Nfb2Zmc2V0OworCiAJCWJyZWFrOwogCX0KIAljYXNlIE1TUl9LNl9TVEFSOgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC5jIGIvYXJjaC94ODYva3ZtL3ZteC5jCmluZGV4IGYzODEyMDEuLmVkNTNiNDIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS92bXguYworKysgYi9hcmNoL3g4Ni9rdm0vdm14LmMKQEAgLTcwOSw3ICs3MDksNyBAQAogCWlmICh2Y3B1LT5jcHUgIT0gY3B1KSB7CiAJCXZjcHVfY2xlYXIodm14KTsKIAkJa3ZtX21pZ3JhdGVfdGltZXJzKHZjcHUpOwotCQl2cGlkX3N5bmNfdmNwdV9hbGwodm14KTsKKwkJc2V0X2JpdChLVk1fUkVRX1RMQl9GTFVTSCwgJnZjcHUtPnJlcXVlc3RzKTsKIAkJbG9jYWxfaXJxX2Rpc2FibGUoKTsKIAkJbGlzdF9hZGQoJnZteC0+bG9jYWxfdmNwdXNfbGluaywKIAkJCSAmcGVyX2NwdSh2Y3B1c19vbl9jcHUsIGNwdSkpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3g4Ni5jIGIvYXJjaC94ODYva3ZtL3g4Ni5jCmluZGV4IGJlNDUxZWUuLjliOTY5NTMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS94ODYuYworKysgYi9hcmNoL3g4Ni9rdm0veDg2LmMKQEAgLTE1OTEsNiArMTU5MSw4IEBACiAKIAlpZiAoY3B1aWQtPm5lbnQgPCAxKQogCQlnb3RvIG91dDsKKwlpZiAoY3B1aWQtPm5lbnQgPiBLVk1fTUFYX0NQVUlEX0VOVFJJRVMpCisJCWNwdWlkLT5uZW50ID0gS1ZNX01BWF9DUFVJRF9FTlRSSUVTOwogCXIgPSAtRU5PTUVNOwogCWNwdWlkX2VudHJpZXMgPSB2bWFsbG9jKHNpemVvZihzdHJ1Y3Qga3ZtX2NwdWlkX2VudHJ5MikgKiBjcHVpZC0+bmVudCk7CiAJaWYgKCFjcHVpZF9lbnRyaWVzKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbGliL01ha2VmaWxlIGIvYXJjaC94ODYvbGliL01ha2VmaWxlCmluZGV4IDllNjA5MjAuLjg1ZjVkYjkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2xpYi9NYWtlZmlsZQorKysgYi9hcmNoL3g4Ni9saWIvTWFrZWZpbGUKQEAgLTE2LDcgKzE2LDkgQEAKICAgICAgICAgbGliLXkgKz0gY2hlY2tzdW1fMzIubwogICAgICAgICBsaWIteSArPSBzdHJzdHJfMzIubwogICAgICAgICBsaWIteSArPSBzZW1hcGhvcmVfMzIubyBzdHJpbmdfMzIubwotCitpZm5lcSAoJChDT05GSUdfWDg2X0NNUFhDSEc2NCkseSkKKyAgICAgICAgbGliLXkgKz0gY21weGNoZzhiX2VtdS5vCitlbmRpZgogICAgICAgICBsaWItJChDT05GSUdfWDg2X1VTRV8zRE5PVykgKz0gbW14XzMyLm8KIGVsc2UKICAgICAgICAgb2JqLXkgKz0gaW9fNjQubyBpb21hcF9jb3B5XzY0Lm8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2xpYi9jbXB4Y2hnOGJfZW11LlMgYi9hcmNoL3g4Ni9saWIvY21weGNoZzhiX2VtdS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyOGNiNzEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9saWIvY21weGNoZzhiX2VtdS5TCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKgltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICoJYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMgorICoJb2YgdGhlIExpY2Vuc2UuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisjaW5jbHVkZSA8YXNtL2FsdGVybmF0aXZlLWFzbS5oPgorI2luY2x1ZGUgPGFzbS9mcmFtZS5oPgorI2luY2x1ZGUgPGFzbS9kd2FyZjIuaD4KKworCisudGV4dAorCisvKgorICogSW5wdXRzOgorICogJWVzaSA6IG1lbW9yeSBsb2NhdGlvbiB0byBjb21wYXJlCisgKiAlZWF4IDogbG93IDMyIGJpdHMgb2Ygb2xkIHZhbHVlCisgKiAlZWR4IDogaGlnaCAzMiBiaXRzIG9mIG9sZCB2YWx1ZQorICogJWVieCA6IGxvdyAzMiBiaXRzIG9mIG5ldyB2YWx1ZQorICogJWVjeCA6IGhpZ2ggMzIgYml0cyBvZiBuZXcgdmFsdWUKKyAqLworRU5UUlkoY21weGNoZzhiX2VtdSkKK0NGSV9TVEFSVFBST0MKKworIworIyBFbXVsYXRlICdjbXB4Y2hnOGIgKCVlc2kpJyBvbiBVUCBleGNlcHQgd2UgZG9uJ3QKKyMgc2V0IHRoZSB3aG9sZSBaRiB0aGluZyAoY2FsbGVyIHdpbGwganVzdCBjb21wYXJlCisjIGVheDplZHggd2l0aCB0aGUgZXhwZWN0ZWQgdmFsdWUpCisjCitjbXB4Y2hnOGJfZW11OgorCXB1c2hmbAorCWNsaQorCisJY21wbCAgKCVlc2kpLCAlZWF4CisJam5lIG5vdF9zYW1lCisJY21wbCA0KCVlc2kpLCAlZWR4CisJam5lIGhhbGZfc2FtZQorCisJbW92bCAlZWJ4LCAgKCVlc2kpCisJbW92bCAlZWN4LCA0KCVlc2kpCisKKwlwb3BmbAorCXJldAorCisgbm90X3NhbWU6CisJbW92bCAgKCVlc2kpLCAlZWF4CisgaGFsZl9zYW1lOgorCW1vdmwgNCglZXNpKSwgJWVkeAorCisJcG9wZmwKKwlyZXQKKworQ0ZJX0VORFBST0MKK0VORFBST0MoY21weGNoZzhiX2VtdSkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL01ha2VmaWxlIGIvYXJjaC94ODYvbW0vTWFrZWZpbGUKaW5kZXggOWI1YTlmNS4uMDY2MzBkMiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vTWFrZWZpbGUKKysrIGIvYXJjaC94ODYvbW0vTWFrZWZpbGUKQEAgLTEsOSArMSwxMCBAQAogb2JqLXkJOj0gIGluaXQubyBpbml0XyQoQklUUykubyBmYXVsdC5vIGlvcmVtYXAubyBleHRhYmxlLm8gcGFnZWF0dHIubyBtbWFwLm8gXAotCSAgICBwYXQubyBwZ3RhYmxlLm8gcGh5c2FkZHIubyBndXAubworCSAgICBwYXQubyBwZ3RhYmxlLm8gcGh5c2FkZHIubyBndXAubyBzZXR1cF9ueC5vCiAKICMgTWFrZSBzdXJlIF9fcGh5c19hZGRyIGhhcyBubyBzdGFja3Byb3RlY3Rvcgogbm9zdGFja3AgOj0gJChjYWxsIGNjLW9wdGlvbiwgLWZuby1zdGFjay1wcm90ZWN0b3IpCiBDRkxBR1NfcGh5c2FkZHIubwkJOj0gJChub3N0YWNrcCkKK0NGTEFHU19zZXR1cF9ueC5vCQk6PSAkKG5vc3RhY2twKQogCiBvYmotJChDT05GSUdfU01QKQkJKz0gdGxiLm8KIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vaW5pdC5jIGIvYXJjaC94ODYvbW0vaW5pdC5jCmluZGV4IDA2MDcxMTkuLjczZmZkNTUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL2luaXQuYworKysgYi9hcmNoL3g4Ni9tbS9pbml0LmMKQEAgLTI4LDY5ICsyOCw2IEBACiAjZW5kaWYKIDsKIAotaW50IG54X2VuYWJsZWQ7Ci0KLSNpZiBkZWZpbmVkKENPTkZJR19YODZfNjQpIHx8IGRlZmluZWQoQ09ORklHX1g4Nl9QQUUpCi1zdGF0aWMgaW50IGRpc2FibGVfbnggX19jcHVpbml0ZGF0YTsKLQotLyoKLSAqIG5vZXhlYyA9IG9ufG9mZgotICoKLSAqIENvbnRyb2wgbm9uLWV4ZWN1dGFibGUgbWFwcGluZ3MgZm9yIHByb2Nlc3Nlcy4KLSAqCi0gKiBvbiAgICAgIEVuYWJsZQotICogb2ZmICAgICBEaXNhYmxlCi0gKi8KLXN0YXRpYyBpbnQgX19pbml0IG5vZXhlY19zZXR1cChjaGFyICpzdHIpCi17Ci0JaWYgKCFzdHIpCi0JCXJldHVybiAtRUlOVkFMOwotCWlmICghc3RybmNtcChzdHIsICJvbiIsIDIpKSB7Ci0JCV9fc3VwcG9ydGVkX3B0ZV9tYXNrIHw9IF9QQUdFX05YOwotCQlkaXNhYmxlX254ID0gMDsKLQl9IGVsc2UgaWYgKCFzdHJuY21wKHN0ciwgIm9mZiIsIDMpKSB7Ci0JCWRpc2FibGVfbnggPSAxOwotCQlfX3N1cHBvcnRlZF9wdGVfbWFzayAmPSB+X1BBR0VfTlg7Ci0JfQotCXJldHVybiAwOwotfQotZWFybHlfcGFyYW0oIm5vZXhlYyIsIG5vZXhlY19zZXR1cCk7Ci0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19YODZfUEFFCi1zdGF0aWMgdm9pZCBfX2luaXQgc2V0X254KHZvaWQpCi17Ci0JdW5zaWduZWQgaW50IHZbNF0sIGwsIGg7Ci0KLQlpZiAoY3B1X2hhc19wYWUgJiYgKGNwdWlkX2VheCgweDgwMDAwMDAwKSA+IDB4ODAwMDAwMDEpKSB7Ci0JCWNwdWlkKDB4ODAwMDAwMDEsICZ2WzBdLCAmdlsxXSwgJnZbMl0sICZ2WzNdKTsKLQotCQlpZiAoKHZbM10gJiAoMSA8PCAyMCkpICYmICFkaXNhYmxlX254KSB7Ci0JCQlyZG1zcihNU1JfRUZFUiwgbCwgaCk7Ci0JCQlsIHw9IEVGRVJfTlg7Ci0JCQl3cm1zcihNU1JfRUZFUiwgbCwgaCk7Ci0JCQlueF9lbmFibGVkID0gMTsKLQkJCV9fc3VwcG9ydGVkX3B0ZV9tYXNrIHw9IF9QQUdFX05YOwotCQl9Ci0JfQotfQotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfbngodm9pZCkKLXsKLX0KLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX1g4Nl82NAotdm9pZCBfX2NwdWluaXQgY2hlY2tfZWZlcih2b2lkKQotewotCXVuc2lnbmVkIGxvbmcgZWZlcjsKLQotCXJkbXNybChNU1JfRUZFUiwgZWZlcik7Ci0JaWYgKCEoZWZlciAmIEVGRVJfTlgpIHx8IGRpc2FibGVfbngpCi0JCV9fc3VwcG9ydGVkX3B0ZV9tYXNrICY9IH5fUEFHRV9OWDsKLX0KLSNlbmRpZgotCiBzdGF0aWMgdm9pZCBfX2luaXQgZmluZF9lYXJseV90YWJsZV9zcGFjZSh1bnNpZ25lZCBsb25nIGVuZCwgaW50IHVzZV9wc2UsCiAJCQkJCSAgaW50IHVzZV9nYnBhZ2VzKQogewpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vcGF0LmMgYi9hcmNoL3g4Ni9tbS9wYXQuYwppbmRleCA3MjU3Y2YzLi5lNzhjZDBlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9wYXQuYworKysgYi9hcmNoL3g4Ni9tbS9wYXQuYwpAQCAtODEsNiArODEsNyBAQAogdm9pZCBwYXRfaW5pdCh2b2lkKQogewogCXU2NCBwYXQ7CisJYm9vbCBib290X2NwdSA9ICFib290X3BhdF9zdGF0ZTsKIAogCWlmICghcGF0X2VuYWJsZWQpCiAJCXJldHVybjsKQEAgLTEyMiw4ICsxMjMsMTAgQEAKIAkJcmRtc3JsKE1TUl9JQTMyX0NSX1BBVCwgYm9vdF9wYXRfc3RhdGUpOwogCiAJd3Jtc3JsKE1TUl9JQTMyX0NSX1BBVCwgcGF0KTsKLQlwcmludGsoS0VSTl9JTkZPICJ4ODYgUEFUIGVuYWJsZWQ6IGNwdSAlZCwgb2xkIDB4JUx4LCBuZXcgMHglTHhcbiIsCi0JICAgICAgIHNtcF9wcm9jZXNzb3JfaWQoKSwgYm9vdF9wYXRfc3RhdGUsIHBhdCk7CisKKwlpZiAoYm9vdF9jcHUpCisJCXByaW50ayhLRVJOX0lORk8gIng4NiBQQVQgZW5hYmxlZDogY3B1ICVkLCBvbGQgMHglTHgsIG5ldyAweCVMeFxuIiwKKwkJICAgICAgIHNtcF9wcm9jZXNzb3JfaWQoKSwgYm9vdF9wYXRfc3RhdGUsIHBhdCk7CiB9CiAKICN1bmRlZiBQQVQKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL3NldHVwX254LmMgYi9hcmNoL3g4Ni9tbS9zZXR1cF9ueC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxM2Q4ZWQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9tbS9zZXR1cF9ueC5jCkBAIC0wLDAgKzEsNjkgQEAKKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorCisjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KKworaW50IG54X2VuYWJsZWQ7CisKKyNpZiBkZWZpbmVkKENPTkZJR19YODZfNjQpIHx8IGRlZmluZWQoQ09ORklHX1g4Nl9QQUUpCitzdGF0aWMgaW50IGRpc2FibGVfbnggX19jcHVpbml0ZGF0YTsKKworLyoKKyAqIG5vZXhlYyA9IG9ufG9mZgorICoKKyAqIENvbnRyb2wgbm9uLWV4ZWN1dGFibGUgbWFwcGluZ3MgZm9yIHByb2Nlc3Nlcy4KKyAqCisgKiBvbiAgICAgIEVuYWJsZQorICogb2ZmICAgICBEaXNhYmxlCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IG5vZXhlY19zZXR1cChjaGFyICpzdHIpCit7CisJaWYgKCFzdHIpCisJCXJldHVybiAtRUlOVkFMOworCWlmICghc3RybmNtcChzdHIsICJvbiIsIDIpKSB7CisJCV9fc3VwcG9ydGVkX3B0ZV9tYXNrIHw9IF9QQUdFX05YOworCQlkaXNhYmxlX254ID0gMDsKKwl9IGVsc2UgaWYgKCFzdHJuY21wKHN0ciwgIm9mZiIsIDMpKSB7CisJCWRpc2FibGVfbnggPSAxOworCQlfX3N1cHBvcnRlZF9wdGVfbWFzayAmPSB+X1BBR0VfTlg7CisJfQorCXJldHVybiAwOworfQorZWFybHlfcGFyYW0oIm5vZXhlYyIsIG5vZXhlY19zZXR1cCk7CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19YODZfUEFFCit2b2lkIF9faW5pdCBzZXRfbngodm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgdls0XSwgbCwgaDsKKworCWlmIChjcHVfaGFzX3BhZSAmJiAoY3B1aWRfZWF4KDB4ODAwMDAwMDApID4gMHg4MDAwMDAwMSkpIHsKKwkJY3B1aWQoMHg4MDAwMDAwMSwgJnZbMF0sICZ2WzFdLCAmdlsyXSwgJnZbM10pOworCisJCWlmICgodlszXSAmICgxIDw8IDIwKSkgJiYgIWRpc2FibGVfbngpIHsKKwkJCXJkbXNyKE1TUl9FRkVSLCBsLCBoKTsKKwkJCWwgfD0gRUZFUl9OWDsKKwkJCXdybXNyKE1TUl9FRkVSLCBsLCBoKTsKKwkJCW54X2VuYWJsZWQgPSAxOworCQkJX19zdXBwb3J0ZWRfcHRlX21hc2sgfD0gX1BBR0VfTlg7CisJCX0KKwl9Cit9CisjZWxzZQordm9pZCBzZXRfbngodm9pZCkKK3sKK30KKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1g4Nl82NAordm9pZCBfX2NwdWluaXQgY2hlY2tfZWZlcih2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgZWZlcjsKKworCXJkbXNybChNU1JfRUZFUiwgZWZlcik7CisJaWYgKCEoZWZlciAmIEVGRVJfTlgpIHx8IGRpc2FibGVfbngpCisJCV9fc3VwcG9ydGVkX3B0ZV9tYXNrICY9IH5fUEFHRV9OWDsKK30KKyNlbmRpZgorCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9wY2kvaTM4Ni5jIGIvYXJjaC94ODYvcGNpL2kzODYuYwppbmRleCA1MmU2MmU1Li5iMjJkMTNiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9wY2kvaTM4Ni5jCisrKyBiL2FyY2gveDg2L3BjaS9pMzg2LmMKQEAgLTI2Niw3ICsyNjYsNyBAQAogCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIFBDSV9MQVRFTkNZX1RJTUVSLCBsYXQpOwogfQogCi1zdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHBjaV9tbWFwX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgcGNpX21tYXBfb3BzID0gewogCS5hY2Nlc3MgPSBnZW5lcmljX2FjY2Vzc19waHlzLAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYveGVuL2RlYnVnZnMuYyBiL2FyY2gveDg2L3hlbi9kZWJ1Z2ZzLmMKaW5kZXggYjUzMjI1ZC4uZTEzM2NlMiAxMDA2NDQKLS0tIGEvYXJjaC94ODYveGVuL2RlYnVnZnMuYworKysgYi9hcmNoL3g4Ni94ZW4vZGVidWdmcy5jCkBAIC0xMDAsNyArMTAwLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdTMyX2FycmF5X2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB1MzJfYXJyYXlfZm9wcyA9IHsKIAkub3duZXIJPSBUSElTX01PRFVMRSwKIAkub3Blbgk9IHUzMl9hcnJheV9vcGVuLAogCS5yZWxlYXNlPSB4ZW5fYXJyYXlfcmVsZWFzZSwKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3hlbi9lbmxpZ2h0ZW4uYyBiL2FyY2gveDg2L3hlbi9lbmxpZ2h0ZW4uYwppbmRleCA1NDRlYjc0OS4uMjNhNGQ4MCAxMDA2NDQKLS0tIGEvYXJjaC94ODYveGVuL2VubGlnaHRlbi5jCisrKyBiL2FyY2gveDg2L3hlbi9lbmxpZ2h0ZW4uYwpAQCAtMTA3NSw2ICsxMDc1LDggQEAKIAkgKiBTZXQgdXAgc29tZSBwYWdldGFibGUgc3RhdGUgYmVmb3JlIHN0YXJ0aW5nIHRvIHNldCBhbnkgcHRlcy4KIAkgKi8KIAorCXhlbl9pbml0X21tdV9vcHMoKTsKKwogCS8qIFByZXZlbnQgdW53YW50ZWQgYml0cyBmcm9tIGJlaW5nIHNldCBpbiBQVEVzLiAqLwogCV9fc3VwcG9ydGVkX3B0ZV9tYXNrICY9IH5fUEFHRV9HTE9CQUw7CiAJaWYgKCF4ZW5faW5pdGlhbF9kb21haW4oKSkKQEAgLTEwODIsNiArMTA4NCwxMSBAQAogCiAJX19zdXBwb3J0ZWRfcHRlX21hc2sgfD0gX1BBR0VfSU9NQVA7CiAKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisJLyogV29yayBvdXQgaWYgd2Ugc3VwcG9ydCBOWCAqLworCWNoZWNrX2VmZXIoKTsKKyNlbmRpZgorCiAJeGVuX3NldHVwX2ZlYXR1cmVzKCk7CiAKIAkvKiBHZXQgbWZuIGxpc3QgKi8KQEAgLTEwOTQsNyArMTEwMSw2IEBACiAJICovCiAJeGVuX3NldHVwX3N0YWNrcHJvdGVjdG9yKCk7CiAKLQl4ZW5faW5pdF9tbXVfb3BzKCk7CiAJeGVuX2luaXRfaXJxX29wcygpOwogCXhlbl9pbml0X2NwdWlkX21hc2soKTsKIApAQCAtMTEyMywxMSArMTEyOSw2IEBACiAKIAlwZ2QgPSAocGdkX3QgKil4ZW5fc3RhcnRfaW5mby0+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+aW5fZmxpZ2h0W0JMS19SV19BU1lOQ10gPiBtYXhfZGVwdGgpCiAJCQlyZXR1cm4gMTsKIAl9CiAKZGlmZiAtLWdpdCBhL2Jsb2NrL2NmcS1pb3NjaGVkLmMgYi9ibG9jay9jZnEtaW9zY2hlZC5jCmluZGV4IDFjYTgxM2IuLjA2OWE2MTAgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2NmcS1pb3NjaGVkLmMKKysrIGIvYmxvY2svY2ZxLWlvc2NoZWQuYwpAQCAtMTczLDYgKzE3Myw3IEBACiAJdW5zaWduZWQgaW50IGNmcV9zbGljZVsyXTsKIAl1bnNpZ25lZCBpbnQgY2ZxX3NsaWNlX2FzeW5jX3JxOwogCXVuc2lnbmVkIGludCBjZnFfc2xpY2VfaWRsZTsKKwl1bnNpZ25lZCBpbnQgY2ZxX2xhdGVuY3k7CiAKIAlzdHJ1Y3QgbGlzdF9oZWFkIGNpY19saXN0OwogCkBAIC0xODAsNiArMTgxLDggQEAKIAkgKiBGYWxsYmFjayBkdW1teSBjZnFxIGZvciBleHRyZW1lIE9PTSBjb25kaXRpb25zCiAJICovCiAJc3RydWN0IGNmcV9xdWV1ZSBvb21fY2ZxcTsKKworCXVuc2lnbmVkIGxvbmcgbGFzdF9lbmRfc3luY19ycTsKIH07CiAKIGVudW0gY2ZxcV9zdGF0ZV9mbGFncyB7CkBAIC0yMjcsNyArMjMwLDcgQEAKIAlibGtfYWRkX3RyYWNlX21zZygoY2ZxZCktPnF1ZXVlLCAiY2ZxICIgZm10LCAjI2FyZ3MpCiAKIHN0YXRpYyB2b2lkIGNmcV9kaXNwYXRjaF9pbnNlcnQoc3RydWN0IHJlcXVlc3RfcXVldWUgKiwgc3RydWN0IHJlcXVlc3QgKik7Ci1zdGF0aWMgc3RydWN0IGNmcV9xdWV1ZSAqY2ZxX2dldF9xdWV1ZShzdHJ1Y3QgY2ZxX2RhdGEgKiwgaW50LAorc3RhdGljIHN0cnVjdCBjZnFfcXVldWUgKmNmcV9nZXRfcXVldWUoc3RydWN0IGNmcV9kYXRhICosIGJvb2wsCiAJCQkJICAgICAgIHN0cnVjdCBpb19jb250ZXh0ICosIGdmcF90KTsKIHN0YXRpYyBzdHJ1Y3QgY2ZxX2lvX2NvbnRleHQgKmNmcV9jaWNfbG9va3VwKHN0cnVjdCBjZnFfZGF0YSAqLAogCQkJCQkJc3RydWN0IGlvX2NvbnRleHQgKik7CkBAIC0yMzgsMjcgKzI0MSwyNCBAQAogfQogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBjZnFfcXVldWUgKmNpY190b19jZnFxKHN0cnVjdCBjZnFfaW9fY29udGV4dCAqY2ljLAotCQkJCQkgICAgaW50IGlzX3N5bmMpCisJCQkJCSAgICBib29sIGlzX3N5bmMpCiB7Ci0JcmV0dXJuIGNpYy0+Y2ZxcVshIWlzX3N5bmNdOworCXJldHVybiBjaWMtPmNmcXFbaXNfc3luY107CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBjaWNfc2V0X2NmcXEoc3RydWN0IGNmcV9pb19jb250ZXh0ICpjaWMsCi0JCQkJc3RydWN0IGNmcV9xdWV1ZSAqY2ZxcSwgaW50IGlzX3N5bmMpCisJCQkJc3RydWN0IGNmcV9xdWV1ZSAqY2ZxcSwgYm9vbCBpc19zeW5jKQogewotCWNpYy0+Y2ZxcVshIWlzX3N5bmNdID0gY2ZxcTsKKwljaWMtPmNmcXFbaXNfc3luY10gPSBjZnFxOwogfQogCiAvKgogICogV2UgcmVnYXJkIGEgcmVxdWVzdCBhcyBTWU5DLCBpZiBpdCdzIGVpdGhlciBhIHJlYWQgb3IgaGFzIHRoZSBTWU5DIGJpdAogICogc2V0IChpbiB3aGljaCBjYXNlIGl0IGNvdWxkIGFsc28gYmUgZGlyZWN0IFdSSVRFKS4KICAqLwotc3RhdGljIGlubGluZSBpbnQgY2ZxX2Jpb19zeW5jKHN0cnVjdCBiaW8gKmJpbykKK3N0YXRpYyBpbmxpbmUgYm9vbCBjZnFfYmlvX3N5bmMoc3RydWN0IGJpbyAqYmlvKQogewotCWlmIChiaW9fZGF0YV9kaXIoYmlvKSA9PSBSRUFEIHx8IGJpb19yd19mbGFnZ2VkKGJpbywgQklPX1JXX1NZTkNJTykpCi0JCXJldHVybiAxOwotCi0JcmV0dXJuIDA7CisJcmV0dXJuIGJpb19kYXRhX2RpcihiaW8pID09IFJFQUQgfHwgYmlvX3J3X2ZsYWdnZWQoYmlvLCBCSU9fUldfU1lOQ0lPKTsKIH0KIAogLyoKQEAgLTI4NSw3ICsyODUsNyBAQAogICogaWYgYSBxdWV1ZSBpcyBtYXJrZWQgc3luYyBhbmQgaGFzIHN5bmMgaW8gcXVldWVkLiBBIHN5bmMgcXVldWUgd2l0aCBhc3luYwogICogaW8gb25seSwgc2hvdWxkIG5vdCBnZXQgZnVsbCBzeW5jIHNsaWNlIGxlbmd0aC4KICAqLwotc3RhdGljIGlubGluZSBpbnQgY2ZxX3ByaW9fc2xpY2Uoc3RydWN0IGNmcV9kYXRhICpjZnFkLCBpbnQgc3luYywKK3N0YXRpYyBpbmxpbmUgaW50IGNmcV9wcmlvX3NsaWNlKHN0cnVjdCBjZnFfZGF0YSAqY2ZxZCwgYm9vbCBzeW5jLAogCQkJCSB1bnNpZ25lZCBzaG9ydCBwcmlvKQogewogCWNvbnN0IGludCBiYXNlX3NsaWNlID0gY2ZxZC0+Y2ZxX3NsaWNlW3N5bmNdOwpAQCAtMzEzLDcgKzMxMyw3IEBACiAgKiBpc24ndCB2YWxpZCB1bnRpbCB0aGUgZmlyc3QgcmVxdWVzdCBmcm9tIHRoZSBkaXNwYXRjaCBpcyBhY3RpdmF0ZWQKICAqIGFuZCB0aGUgc2xpY2UgdGltZSBzZXQuCiAgKi8KLXN0YXRpYyBpbmxpbmUgaW50IGNmcV9zbGljZV91c2VkKHN0cnVjdCBjZnFfcXVldWUgKmNmcXEpCitzdGF0aWMgaW5saW5lIGJvb2wgY2ZxX3NsaWNlX3VzZWQoc3RydWN0IGNmcV9xdWV1ZSAqY2ZxcSkKIHsKIAlpZiAoY2ZxX2NmcXFfc2xpY2VfbmV3KGNmcXEpKQogCQlyZXR1cm4gMDsKQEAgLTQ4OCw3ICs0ODgsNyBAQAogICogd2Ugd2lsbCBzZXJ2aWNlIHRoZSBxdWV1ZXMuCiAgKi8KIHN0YXRpYyB2b2lkIGNmcV9zZXJ2aWNlX3RyZWVfYWRkKHN0cnVjdCBjZnFfZGF0YSAqY2ZxZCwgc3RydWN0IGNmcV9xdWV1ZSAqY2ZxcSwKLQkJCQkgaW50IGFkZF9mcm9udCkKKwkJCQkgYm9vbCBhZGRfZnJvbnQpCiB7CiAJc3RydWN0IHJiX25vZGUgKipwLCAqcGFyZW50OwogCXN0cnVjdCBjZnFfcXVldWUgKl9fY2ZxcTsKQEAgLTUwNCwxMSArNTA0LDIwIEBACiAJCX0gZWxzZQogCQkJcmJfa2V5ICs9IGppZmZpZXM7CiAJfSBlbHNlIGlmICghYWRkX2Zyb250KSB7CisJCS8qCisJCSAqIEdldCBvdXIgcmIga2V5IG9mZnNldC4gU3VidHJhY3QgYW55IHJlc2lkdWFsIHNsaWNlCisJCSAqIHZhbHVlIGNhcnJpZWQgZnJvbSBsYXN0IHNlcnZpY2UuIEEgbmVnYXRpdmUgcmVzaWQKKwkJICogY291bnQgaW5kaWNhdGVzIHNsaWNlIG92ZXJydW4sIGFuZCB0aGlzIHNob3VsZCBwb3NpdGlvbgorCQkgKiB0aGUgbmV4dCBzZXJ2aWNlIHRpbWUgZnVydGhlciBhd2F5IGluIHRoZSB0cmVlLgorCQkgKi8KIAkJcmJfa2V5ID0gY2ZxX3NsaWNlX29mZnNldChjZnFkLCBjZnFxKSArIGppZmZpZXM7Ci0JCXJiX2tleSArPSBjZnFxLT5zbGljZV9yZXNpZDsKKwkJcmJfa2V5IC09IGNmcXEtPnNsaWNlX3Jlc2lkOwogCQljZnFxLT5zbGljZV9yZXNpZCA9IDA7Ci0JfSBlbHNlCi0JCXJiX2tleSA9IDA7CisJfSBlbHNlIHsKKwkJcmJfa2V5ID0gLUhaOworCQlfX2NmcXEgPSBjZnFfcmJfZmlyc3QoJmNmcWQtPnNlcnZpY2VfdHJlZSk7CisJCXJiX2tleSArPSBfX2NmcXEgPyBfX2NmcXEtPnJiX2tleSA6IGppZmZpZXM7CisJfQogCiAJaWYgKCFSQl9FTVBUWV9OT0RFKCZjZnFxLT5yYl9ub2RlKSkgewogCQkvKgpAQCAtNTQyLDcgKzU1MSw3IEBACiAJCQluID0gJigqcCktPnJiX2xlZnQ7CiAJCWVsc2UgaWYgKGNmcV9jbGFzc19pZGxlKGNmcXEpID4gY2ZxX2NsYXNzX2lkbGUoX19jZnFxKSkKIAkJCW4gPSAmKCpwKS0+cmJfcmlnaHQ7Ci0JCWVsc2UgaWYgKHJiX2tleSA8IF9fY2ZxcS0+cmJfa2V5KQorCQllbHNlIGlmICh0aW1lX2JlZm9yZShyYl9rZXksIF9fY2ZxcS0+cmJfa2V5KSkKIAkJCW4gPSAmKCpwKS0+cmJfbGVmdDsKIAkJZWxzZQogCQkJbiA9ICYoKnApLT5yYl9yaWdodDsKQEAgLTgyMiw4ICs4MzEsMTAgQEAKIAkgKiByZXBvc2l0aW9uIGluIGZpZm8gaWYgbmV4dCBpcyBvbGRlciB0aGFuIHJxCiAJICovCiAJaWYgKCFsaXN0X2VtcHR5KCZycS0+cXVldWVsaXN0KSAmJiAhbGlzdF9lbXB0eSgmbmV4dC0+cXVldWVsaXN0KSAmJgotCSAgICB0aW1lX2JlZm9yZShuZXh0LT5zdGFydF90aW1lLCBycS0+c3RhcnRfdGltZSkpCisJICAgIHRpbWVfYmVmb3JlKHJxX2ZpZm9fdGltZShuZXh0KSwgcnFfZmlmb190aW1lKHJxKSkpIHsKIAkJbGlzdF9tb3ZlKCZycS0+cXVldWVsaXN0LCAmbmV4dC0+cXVldWVsaXN0KTsKKwkJcnFfc2V0X2ZpZm9fdGltZShycSwgcnFfZmlmb190aW1lKG5leHQpKTsKKwl9CiAKIAljZnFfcmVtb3ZlX3JlcXVlc3QobmV4dCk7CiB9CkBAIC04MzksNyArODUwLDcgQEAKIAkgKiBEaXNhbGxvdyBtZXJnZSBvZiBhIHN5bmMgYmlvIGludG8gYW4gYXN5bmMgcmVxdWVzdC4KIAkgKi8KIAlpZiAoY2ZxX2Jpb19zeW5jKGJpbykgJiYgIXJxX2lzX3N5bmMocnEpKQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIGZhbHNlOwogCiAJLyoKIAkgKiBMb29rdXAgdGhlIGNmcXEgdGhhdCB0aGlzIGJpbyB3aWxsIGJlIHF1ZXVlZCB3aXRoLiBBbGxvdwpAQCAtODQ3LDEzICs4NTgsMTAgQEAKIAkgKi8KIAljaWMgPSBjZnFfY2ljX2xvb2t1cChjZnFkLCBjdXJyZW50LT5pb19jb250ZXh0KTsKIAlpZiAoIWNpYykKLQkJcmV0dXJuIDA7CisJCXJldHVybiBmYWxzZTsKIAogCWNmcXEgPSBjaWNfdG9fY2ZxcShjaWMsIGNmcV9iaW9fc3luYyhiaW8pKTsKLQlpZiAoY2ZxcSA9PSBSUV9DRlFRKHJxKSkKLQkJcmV0dXJuIDE7Ci0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gY2ZxcSA9PSBSUV9DRlFRKHJxKTsKIH0KIAogc3RhdGljIHZvaWQgX19jZnFfc2V0X2FjdGl2ZV9xdWV1ZShzdHJ1Y3QgY2ZxX2RhdGEgKmNmcWQsCkBAIC04ODEsNyArODg5LDcgQEAKICAqLwogc3RhdGljIHZvaWQKIF9fY2ZxX3NsaWNlX2V4cGlyZWQoc3RydWN0IGNmcV9kYXRhICpjZnFkLCBzdHJ1Y3QgY2ZxX3F1ZXVlICpjZnFxLAotCQkgICAgaW50IHRpbWVkX291dCkKKwkJICAgIGJvb2wgdGltZWRfb3V0KQogewogCWNmcV9sb2dfY2ZxcShjZnFkLCBjZnFxLCAic2xpY2UgZXhwaXJlZCB0PSVkIiwgdGltZWRfb3V0KTsKIApAQCAtOTA5LDcgKzkxNyw3IEBACiAJfQogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgY2ZxX3NsaWNlX2V4cGlyZWQoc3RydWN0IGNmcV9kYXRhICpjZnFkLCBpbnQgdGltZWRfb3V0KQorc3RhdGljIGlubGluZSB2b2lkIGNmcV9zbGljZV9leHBpcmVkKHN0cnVjdCBjZnFfZGF0YSAqY2ZxZCwgYm9vbCB0aW1lZF9vdXQpCiB7CiAJc3RydWN0IGNmcV9xdWV1ZSAqY2ZxcSA9IGNmcWQtPmFjdGl2ZV9xdWV1ZTsKIApAQCAtMTAyMSw3ICsxMDI5LDcgQEAKICAqLwogc3RhdGljIHN0cnVjdCBjZnFfcXVldWUgKmNmcV9jbG9zZV9jb29wZXJhdG9yKHN0cnVjdCBjZnFfZGF0YSAqY2ZxZCwKIAkJCQkJICAgICAgc3RydWN0IGNmcV9xdWV1ZSAqY3VyX2NmcXEsCi0JCQkJCSAgICAgIGludCBwcm9iZSkKKwkJCQkJICAgICAgYm9vbCBwcm9iZSkKIHsKIAlzdHJ1Y3QgY2ZxX3F1ZXVlICpjZnFxOwogCkBAIC0xMDg1LDYgKzEwOTMsMTUgQEAKIAlpZiAoIWNpYyB8fCAhYXRvbWljX3JlYWQoJmNpYy0+aW9jLT5ucl90YXNrcykpCiAJCXJldHVybjsKIAorCS8qCisJICogSWYgb3VyIGF2ZXJhZ2UgdGhpbmsgdGltZSBpcyBsYXJnZXIgdGhhbiB0aGUgcmVtYWluaW5nIHRpbWUKKwkgKiBzbGljZSwgdGhlbiBkb24ndCBpZGxlLiBUaGlzIGF2b2lkcyBvdmVycnVubmluZyB0aGUgYWxsb3R0ZWQKKwkgKiB0aW1lIHNsaWNlLgorCSAqLworCWlmIChzYW1wbGVfdmFsaWQoY2ljLT50dGltZV9zYW1wbGVzKSAmJgorCSAgICAoY2ZxcS0+c2xpY2VfZW5kIC0gamlmZmllcyA8IGNpYy0+dHRpbWVfbWVhbikpCisJCXJldHVybjsKKwogCWNmcV9tYXJrX2NmcXFfd2FpdF9yZXF1ZXN0KGNmcXEpOwogCiAJLyoKQEAgLTExMjQsOSArMTE0MSw3IEBACiAgKi8KIHN0YXRpYyBzdHJ1Y3QgcmVxdWVzdCAqY2ZxX2NoZWNrX2ZpZm8oc3RydWN0IGNmcV9xdWV1ZSAqY2ZxcSkKIHsKLQlzdHJ1Y3QgY2ZxX2RhdGEgKmNmcWQgPSBjZnFxLT5jZnFkOwotCXN0cnVjdCByZXF1ZXN0ICpycTsKLQlpbnQgZmlmbzsKKwlzdHJ1Y3QgcmVxdWVzdCAqcnEgPSBOVUxMOwogCiAJaWYgKGNmcV9jZnFxX2ZpZm9fZXhwaXJlKGNmcXEpKQogCQlyZXR1cm4gTlVMTDsKQEAgLTExMzYsMTMgKzExNTEsMTEgQEAKIAlpZiAobGlzdF9lbXB0eSgmY2ZxcS0+ZmlmbykpCiAJCXJldHVybiBOVUxMOwogCi0JZmlmbyA9IGNmcV9jZnFxX3N5bmMoY2ZxcSk7CiAJcnEgPSBycV9lbnRyeV9maWZvKGNmcXEtPmZpZm8ubmV4dCk7Ci0KLQlpZiAodGltZV9iZWZvcmUoamlmZmllcywgcnEtPnN0YXJ0X3RpbWUgKyBjZnFkLT5jZnFfZmlmb19leHBpcmVbZmlmb10pKQorCWlmICh0aW1lX2JlZm9yZShqaWZmaWVzLCBycV9maWZvX3RpbWUocnEpKSkKIAkJcnEgPSBOVUxMOwogCi0JY2ZxX2xvZ19jZnFxKGNmcWQsIGNmcXEsICJmaWZvPSVwIiwgcnEpOworCWNmcV9sb2dfY2ZxcShjZnFxLT5jZnFkLCBjZnFxLCAiZmlmbz0lcCIsIHJxKTsKIAlyZXR1cm4gcnE7CiB9CiAKQEAgLTEyNDMsMTYgKzEyNTYsODMgQEAKIAlyZXR1cm4gZGlzcGF0Y2hlZDsKIH0KIAorc3RhdGljIGJvb2wgY2ZxX21heV9kaXNwYXRjaChzdHJ1Y3QgY2ZxX2RhdGEgKmNmcWQsIHN0cnVjdCBjZnFfcXVldWUgKmNmcXEpCit7CisJdW5zaWduZWQgaW50IG1heF9kaXNwYXRjaDsKKworCS8qCisJICogRHJhaW4gYXN5bmMgcmVxdWVzdHMgYmVmb3JlIHdlIHN0YXJ0IHN5bmMgSU8KKwkgKi8KKwlpZiAoY2ZxX2NmcXFfaWRsZV93aW5kb3coY2ZxcSkgJiYgY2ZxZC0+cnFfaW5fZHJpdmVyW0JMS19SV19BU1lOQ10pCisJCXJldHVybiBmYWxzZTsKKworCS8qCisJICogSWYgdGhpcyBpcyBhbiBhc3luYyBxdWV1ZSBhbmQgd2UgaGF2ZSBzeW5jIElPIGluIGZsaWdodCwgbGV0IGl0IHdhaXQKKwkgKi8KKwlpZiAoY2ZxZC0+c3luY19mbGlnaHQgJiYgIWNmcV9jZnFxX3N5bmMoY2ZxcSkpCisJCXJldHVybiBmYWxzZTsKKworCW1heF9kaXNwYXRjaCA9IGNmcWQtPmNmcV9xdWFudHVtOworCWlmIChjZnFfY2xhc3NfaWRsZShjZnFxKSkKKwkJbWF4X2Rpc3BhdGNoID0gMTsKKworCS8qCisJICogRG9lcyB0aGlzIGNmcXEgYWxyZWFkeSBoYXZlIHRvbyBtdWNoIElPIGluIGZsaWdodD8KKwkgKi8KKwlpZiAoY2ZxcS0+ZGlzcGF0Y2hlZCA+PSBtYXhfZGlzcGF0Y2gpIHsKKwkJLyoKKwkJICogaWRsZSBxdWV1ZSBtdXN0IGFsd2F5cyBvbmx5IGhhdmUgYSBzaW5nbGUgSU8gaW4gZmxpZ2h0CisJCSAqLworCQlpZiAoY2ZxX2NsYXNzX2lkbGUoY2ZxcSkpCisJCQlyZXR1cm4gZmFsc2U7CisKKwkJLyoKKwkJICogV2UgaGF2ZSBvdGhlciBxdWV1ZXMsIGRvbid0IGFsbG93IG1vcmUgSU8gZnJvbSB0aGlzIG9uZQorCQkgKi8KKwkJaWYgKGNmcWQtPmJ1c3lfcXVldWVzID4gMSkKKwkJCXJldHVybiBmYWxzZTsKKworCQkvKgorCQkgKiBTb2xlIHF1ZXVlIHVzZXIsIGFsbG93IGJpZ2dlciBzbGljZQorCQkgKi8KKwkJbWF4X2Rpc3BhdGNoICo9IDQ7CisJfQorCisJLyoKKwkgKiBBc3luYyBxdWV1ZXMgbXVzdCB3YWl0IGEgYml0IGJlZm9yZSBiZWluZyBhbGxvd2VkIGRpc3BhdGNoLgorCSAqIFdlIGFsc28gcmFtcCB1cCB0aGUgZGlzcGF0Y2ggZGVwdGggZ3JhZHVhbGx5IGZvciBhc3luYyBJTywKKwkgKiBiYXNlZCBvbiB0aGUgbGFzdCBzeW5jIElPIHdlIHNlcnZpY2VkCisJICovCisJaWYgKCFjZnFfY2ZxcV9zeW5jKGNmcXEpICYmIGNmcWQtPmNmcV9sYXRlbmN5KSB7CisJCXVuc2lnbmVkIGxvbmcgbGFzdF9zeW5jID0gamlmZmllcyAtIGNmcWQtPmxhc3RfZW5kX3N5bmNfcnE7CisJCXVuc2lnbmVkIGludCBkZXB0aDsKKworCQlkZXB0aCA9IGxhc3Rfc3luYyAvIGNmcWQtPmNmcV9zbGljZVsxXTsKKwkJaWYgKCFkZXB0aCAmJiAhY2ZxcS0+ZGlzcGF0Y2hlZCkKKwkJCWRlcHRoID0gMTsKKwkJaWYgKGRlcHRoIDwgbWF4X2Rpc3BhdGNoKQorCQkJbWF4X2Rpc3BhdGNoID0gZGVwdGg7CisJfQorCisJLyoKKwkgKiBJZiB3ZSdyZSBiZWxvdyB0aGUgY3VycmVudCBtYXgsIGFsbG93IGEgZGlzcGF0Y2gKKwkgKi8KKwlyZXR1cm4gY2ZxcS0+ZGlzcGF0Y2hlZCA8IG1heF9kaXNwYXRjaDsKK30KKwogLyoKICAqIERpc3BhdGNoIGEgcmVxdWVzdCBmcm9tIGNmcXEsIG1vdmluZyB0aGVtIHRvIHRoZSByZXF1ZXN0IHF1ZXVlCiAgKiBkaXNwYXRjaCBsaXN0LgogICovCi1zdGF0aWMgdm9pZCBjZnFfZGlzcGF0Y2hfcmVxdWVzdChzdHJ1Y3QgY2ZxX2RhdGEgKmNmcWQsIHN0cnVjdCBjZnFfcXVldWUgKmNmcXEpCitzdGF0aWMgYm9vbCBjZnFfZGlzcGF0Y2hfcmVxdWVzdChzdHJ1Y3QgY2ZxX2RhdGEgKmNmcWQsIHN0cnVjdCBjZnFfcXVldWUgKmNmcXEpCiB7CiAJc3RydWN0IHJlcXVlc3QgKnJxOwogCiAJQlVHX09OKFJCX0VNUFRZX1JPT1QoJmNmcXEtPnNvcnRfbGlzdCkpOwogCisJaWYgKCFjZnFfbWF5X2Rpc3BhdGNoKGNmcWQsIGNmcXEpKQorCQlyZXR1cm4gZmFsc2U7CisKIAkvKgogCSAqIGZvbGxvdyBleHBpcmVkIHBhdGgsIGVsc2UgZ2V0IGZpcnN0IG5leHQgYXZhaWxhYmxlCiAJICovCkBAIC0xMjcxLDYgKzEzNTEsOCBAQAogCQlhdG9taWNfbG9uZ19pbmMoJmNpYy0+aW9jLT5yZWZjb3VudCk7CiAJCWNmcWQtPmFjdGl2ZV9jaWMgPSBjaWM7CiAJfQorCisJcmV0dXJuIHRydWU7CiB9CiAKIC8qCkBAIC0xMjgxLDcgKzEzNjMsNiBAQAogewogCXN0cnVjdCBjZnFfZGF0YSAqY2ZxZCA9IHEtPmVsZXZhdG9yLT5lbGV2YXRvcl9kYXRhOwogCXN0cnVjdCBjZnFfcXVldWUgKmNmcXE7Ci0JdW5zaWduZWQgaW50IG1heF9kaXNwYXRjaDsKIAogCWlmICghY2ZxZC0+YnVzeV9xdWV1ZXMpCiAJCXJldHVybiAwOwpAQCAtMTI5NCw0OCArMTM3NSwxMSBAQAogCQlyZXR1cm4gMDsKIAogCS8qCi0JICogRHJhaW4gYXN5bmMgcmVxdWVzdHMgYmVmb3JlIHdlIHN0YXJ0IHN5bmMgSU8KKwkgKiBEaXNwYXRjaCBhIHJlcXVlc3QgZnJvbSB0aGlzIGNmcXEsIGlmIGl0IGlzIGFsbG93ZWQKIAkgKi8KLQlpZiAoY2ZxX2NmcXFfaWRsZV93aW5kb3coY2ZxcSkgJiYgY2ZxZC0+cnFfaW5fZHJpdmVyW0JMS19SV19BU1lOQ10pCisJaWYgKCFjZnFfZGlzcGF0Y2hfcmVxdWVzdChjZnFkLCBjZnFxKSkKIAkJcmV0dXJuIDA7CiAKLQkvKgotCSAqIElmIHRoaXMgaXMgYW4gYXN5bmMgcXVldWUgYW5kIHdlIGhhdmUgc3luYyBJTyBpbiBmbGlnaHQsIGxldCBpdCB3YWl0Ci0JICovCi0JaWYgKGNmcWQtPnN5bmNfZmxpZ2h0ICYmICFjZnFfY2ZxcV9zeW5jKGNmcXEpKQotCQlyZXR1cm4gMDsKLQotCW1heF9kaXNwYXRjaCA9IGNmcWQtPmNmcV9xdWFudHVtOwotCWlmIChjZnFfY2xhc3NfaWRsZShjZnFxKSkKLQkJbWF4X2Rpc3BhdGNoID0gMTsKLQotCS8qCi0JICogRG9lcyB0aGlzIGNmcXEgYWxyZWFkeSBoYXZlIHRvbyBtdWNoIElPIGluIGZsaWdodD8KLQkgKi8KLQlpZiAoY2ZxcS0+ZGlzcGF0Y2hlZCA+PSBtYXhfZGlzcGF0Y2gpIHsKLQkJLyoKLQkJICogaWRsZSBxdWV1ZSBtdXN0IGFsd2F5cyBvbmx5IGhhdmUgYSBzaW5nbGUgSU8gaW4gZmxpZ2h0Ci0JCSAqLwotCQlpZiAoY2ZxX2NsYXNzX2lkbGUoY2ZxcSkpCi0JCQlyZXR1cm4gMDsKLQotCQkvKgotCQkgKiBXZSBoYXZlIG90aGVyIHF1ZXVlcywgZG9uJ3QgYWxsb3cgbW9yZSBJTyBmcm9tIHRoaXMgb25lCi0JCSAqLwotCQlpZiAoY2ZxZC0+YnVzeV9xdWV1ZXMgPiAxKQotCQkJcmV0dXJuIDA7Ci0KLQkJLyoKLQkJICogd2UgYXJlIHRoZSBvbmx5IHF1ZXVlLCBhbGxvdyB1cCB0byA0IHRpbWVzIG9mICdxdWFudHVtJwotCQkgKi8KLQkJaWYgKGNmcXEtPmRpc3BhdGNoZWQgPj0gNCAqIG1heF9kaXNwYXRjaCkKLQkJCXJldHVybiAwOwotCX0KLQotCS8qCi0JICogRGlzcGF0Y2ggYSByZXF1ZXN0IGZyb20gdGhpcyBjZnFxCi0JICovCi0JY2ZxX2Rpc3BhdGNoX3JlcXVlc3QoY2ZxZCwgY2ZxcSk7CiAJY2ZxcS0+c2xpY2VfZGlzcGF0Y2grKzsKIAljZnFfY2xlYXJfY2ZxcV9tdXN0X2Rpc3BhdGNoKGNmcXEpOwogCkBAIC0xNjM1LDcgKzE2NzksNyBAQAogfQogCiBzdGF0aWMgdm9pZCBjZnFfaW5pdF9jZnFxKHN0cnVjdCBjZnFfZGF0YSAqY2ZxZCwgc3RydWN0IGNmcV9xdWV1ZSAqY2ZxcSwKLQkJCSAgcGlkX3QgcGlkLCBpbnQgaXNfc3luYykKKwkJCSAgcGlkX3QgcGlkLCBib29sIGlzX3N5bmMpCiB7CiAJUkJfQ0xFQVJfTk9ERSgmY2ZxcS0+cmJfbm9kZSk7CiAJUkJfQ0xFQVJfTk9ERSgmY2ZxcS0+cF9ub2RlKTsKQEAgLTE2NTUsNyArMTY5OSw3IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgY2ZxX3F1ZXVlICoKLWNmcV9maW5kX2FsbG9jX3F1ZXVlKHN0cnVjdCBjZnFfZGF0YSAqY2ZxZCwgaW50IGlzX3N5bmMsCitjZnFfZmluZF9hbGxvY19xdWV1ZShzdHJ1Y3QgY2ZxX2RhdGEgKmNmcWQsIGJvb2wgaXNfc3luYywKIAkJICAgICBzdHJ1Y3QgaW9fY29udGV4dCAqaW9jLCBnZnBfdCBnZnBfbWFzaykKIHsKIAlzdHJ1Y3QgY2ZxX3F1ZXVlICpjZnFxLCAqbmV3X2NmcXEgPSBOVUxMOwpAQCAtMTcxOSw3ICsxNzYzLDcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBjZnFfcXVldWUgKgotY2ZxX2dldF9xdWV1ZShzdHJ1Y3QgY2ZxX2RhdGEgKmNmcWQsIGludCBpc19zeW5jLCBzdHJ1Y3QgaW9fY29udGV4dCAqaW9jLAorY2ZxX2dldF9xdWV1ZShzdHJ1Y3QgY2ZxX2RhdGEgKmNmcWQsIGJvb2wgaXNfc3luYywgc3RydWN0IGlvX2NvbnRleHQgKmlvYywKIAkgICAgICBnZnBfdCBnZnBfbWFzaykKIHsKIAljb25zdCBpbnQgaW9wcmlvID0gdGFza19pb3ByaW8oaW9jKTsKQEAgLTE5NTEsMTAgKzE5OTUsMTMgQEAKIAllbmFibGVfaWRsZSA9IG9sZF9pZGxlID0gY2ZxX2NmcXFfaWRsZV93aW5kb3coY2ZxcSk7CiAKIAlpZiAoIWF0b21pY19yZWFkKCZjaWMtPmlvYy0+bnJfdGFza3MpIHx8ICFjZnFkLT5jZnFfc2xpY2VfaWRsZSB8fAotCSAgICAoY2ZxZC0+aHdfdGFnICYmIENJQ19TRUVLWShjaWMpKSkKKwkgICAgKCFjZnFkLT5jZnFfbGF0ZW5jeSAmJiBjZnFkLT5od190YWcgJiYgQ0lDX1NFRUtZKGNpYykpKQogCQllbmFibGVfaWRsZSA9IDA7CiAJZWxzZSBpZiAoc2FtcGxlX3ZhbGlkKGNpYy0+dHRpbWVfc2FtcGxlcykpIHsKLQkJaWYgKGNpYy0+dHRpbWVfbWVhbiA+IGNmcWQtPmNmcV9zbGljZV9pZGxlKQorCQl1bnNpZ25lZCBpbnQgc2xpY2VfaWRsZSA9IGNmcWQtPmNmcV9zbGljZV9pZGxlOworCQlpZiAoc2FtcGxlX3ZhbGlkKGNpYy0+c2Vla19zYW1wbGVzKSAmJiBDSUNfU0VFS1koY2ljKSkKKwkJCXNsaWNlX2lkbGUgPSBtc2Vjc190b19qaWZmaWVzKENGUV9NSU5fVFQpOworCQlpZiAoY2ljLT50dGltZV9tZWFuID4gc2xpY2VfaWRsZSkKIAkJCWVuYWJsZV9pZGxlID0gMDsKIAkJZWxzZQogCQkJZW5hYmxlX2lkbGUgPSAxOwpAQCAtMTk3Myw3ICsyMDIwLDcgQEAKICAqIENoZWNrIGlmIG5ld19jZnFxIHNob3VsZCBwcmVlbXB0IHRoZSBjdXJyZW50bHkgYWN0aXZlIHF1ZXVlLiBSZXR1cm4gMCBmb3IKICAqIG5vIG9yIGlmIHdlIGFyZW4ndCBzdXJlLCBhIDEgd2lsbCBjYXVzZSBhIHByZWVtcHQuCiAgKi8KLXN0YXRpYyBpbnQKK3N0YXRpYyBib29sCiBjZnFfc2hvdWxkX3ByZWVtcHQoc3RydWN0IGNmcV9kYXRhICpjZnFkLCBzdHJ1Y3QgY2ZxX3F1ZXVlICpuZXdfY2ZxcSwKIAkJICAgc3RydWN0IHJlcXVlc3QgKnJxKQogewpAQCAtMTk4MSw0OCArMjAyOCw0OCBAQAogCiAJY2ZxcSA9IGNmcWQtPmFjdGl2ZV9xdWV1ZTsKIAlpZiAoIWNmcXEpCi0JCXJldHVybiAwOworCQlyZXR1cm4gZmFsc2U7CiAKIAlpZiAoY2ZxX3NsaWNlX3VzZWQoY2ZxcSkpCi0JCXJldHVybiAxOworCQlyZXR1cm4gdHJ1ZTsKIAogCWlmIChjZnFfY2xhc3NfaWRsZShuZXdfY2ZxcSkpCi0JCXJldHVybiAwOworCQlyZXR1cm4gZmFsc2U7CiAKIAlpZiAoY2ZxX2NsYXNzX2lkbGUoY2ZxcSkpCi0JCXJldHVybiAxOworCQlyZXR1cm4gdHJ1ZTsKIAogCS8qCiAJICogaWYgdGhlIG5ldyByZXF1ZXN0IGlzIHN5bmMsIGJ1dCB0aGUgY3VycmVudGx5IHJ1bm5pbmcgcXVldWUgaXMKIAkgKiBub3QsIGxldCB0aGUgc3luYyByZXF1ZXN0IGhhdmUgcHJpb3JpdHkuCiAJICovCiAJaWYgKHJxX2lzX3N5bmMocnEpICYmICFjZnFfY2ZxcV9zeW5jKGNmcXEpKQotCQlyZXR1cm4gMTsKKwkJcmV0dXJuIHRydWU7CiAKIAkvKgogCSAqIFNvIGJvdGggcXVldWVzIGFyZSBzeW5jLiBMZXQgdGhlIG5ldyByZXF1ZXN0IGdldCBkaXNrIHRpbWUgaWYKIAkgKiBpdCdzIGEgbWV0YWRhdGEgcmVxdWVzdCBhbmQgdGhlIGN1cnJlbnQgcXVldWUgaXMgZG9pbmcgcmVndWxhciBJTy4KIAkgKi8KIAlpZiAocnFfaXNfbWV0YShycSkgJiYgIWNmcXEtPm1ldGFfcGVuZGluZykKLQkJcmV0dXJuIDE7CisJCXJldHVybiBmYWxzZTsKIAogCS8qCiAJICogQWxsb3cgYW4gUlQgcmVxdWVzdCB0byBwcmUtZW1wdCBhbiBvbmdvaW5nIG5vbi1SVCBjZnFxIHRpbWVzbGljZS4KIAkgKi8KIAlpZiAoY2ZxX2NsYXNzX3J0KG5ld19jZnFxKSAmJiAhY2ZxX2NsYXNzX3J0KGNmcXEpKQotCQlyZXR1cm4gMTsKKwkJcmV0dXJuIHRydWU7CiAKIAlpZiAoIWNmcWQtPmFjdGl2ZV9jaWMgfHwgIWNmcV9jZnFxX3dhaXRfcmVxdWVzdChjZnFxKSkKLQkJcmV0dXJuIDA7CisJCXJldHVybiBmYWxzZTsKIAogCS8qCiAJICogaWYgdGhpcyByZXF1ZXN0IGlzIGFzLWdvb2QgYXMgb25lIHdlIHdvdWxkIGV4cGVjdCBmcm9tIHRoZQogCSAqIGN1cnJlbnQgY2ZxcSwgbGV0IGl0IHByZWVtcHQKIAkgKi8KIAlpZiAoY2ZxX3JxX2Nsb3NlKGNmcWQsIHJxKSkKLQkJcmV0dXJuIDE7CisJCXJldHVybiB0cnVlOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIGZhbHNlOwogfQogCiAvKgpAQCAtMjEwNyw2ICsyMTU0LDcgQEAKIAogCWNmcV9hZGRfcnFfcmIocnEpOwogCisJcnFfc2V0X2ZpZm9fdGltZShycSwgamlmZmllcyArIGNmcWQtPmNmcV9maWZvX2V4cGlyZVtycV9pc19zeW5jKHJxKV0pOwogCWxpc3RfYWRkX3RhaWwoJnJxLT5xdWV1ZWxpc3QsICZjZnFxLT5maWZvKTsKIAogCWNmcV9ycV9lbnF1ZXVlZChjZnFkLCBjZnFxLCBycSk7CkBAIC0yMTU3LDggKzIyMDUsMTAgQEAKIAlpZiAoY2ZxX2NmcXFfc3luYyhjZnFxKSkKIAkJY2ZxZC0+c3luY19mbGlnaHQtLTsKIAotCWlmIChzeW5jKQorCWlmIChzeW5jKSB7CiAJCVJRX0NJQyhycSktPmxhc3RfZW5kX3JlcXVlc3QgPSBub3c7CisJCWNmcWQtPmxhc3RfZW5kX3N5bmNfcnEgPSBub3c7CisJfQogCiAJLyoKIAkgKiBJZiB0aGlzIGlzIHRoZSBhY3RpdmUgcXVldWUsIGNoZWNrIGlmIGl0IG5lZWRzIHRvIGJlIGV4cGlyZWQsCkBAIC0yMjg0LDcgKzIzMzQsNyBAQAogCXN0cnVjdCBjZnFfZGF0YSAqY2ZxZCA9IHEtPmVsZXZhdG9yLT5lbGV2YXRvcl9kYXRhOwogCXN0cnVjdCBjZnFfaW9fY29udGV4dCAqY2ljOwogCWNvbnN0IGludCBydyA9IHJxX2RhdGFfZGlyKHJxKTsKLQljb25zdCBpbnQgaXNfc3luYyA9IHJxX2lzX3N5bmMocnEpOworCWNvbnN0IGJvb2wgaXNfc3luYyA9IHJxX2lzX3N5bmMocnEpOwogCXN0cnVjdCBjZnFfcXVldWUgKmNmcXE7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIApAQCAtMjQ4MCw4ICsyNTMwLDkgQEAKIAljZnFkLT5jZnFfc2xpY2VbMV0gPSBjZnFfc2xpY2Vfc3luYzsKIAljZnFkLT5jZnFfc2xpY2VfYXN5bmNfcnEgPSBjZnFfc2xpY2VfYXN5bmNfcnE7CiAJY2ZxZC0+Y2ZxX3NsaWNlX2lkbGUgPSBjZnFfc2xpY2VfaWRsZTsKKwljZnFkLT5jZnFfbGF0ZW5jeSA9IDE7CiAJY2ZxZC0+aHdfdGFnID0gMTsKLQorCWNmcWQtPmxhc3RfZW5kX3N5bmNfcnEgPSBqaWZmaWVzOwogCXJldHVybiBjZnFkOwogfQogCkBAIC0yNTQ5LDYgKzI2MDAsNyBAQAogU0hPV19GVU5DVElPTihjZnFfc2xpY2Vfc3luY19zaG93LCBjZnFkLT5jZnFfc2xpY2VbMV0sIDEpOwogU0hPV19GVU5DVElPTihjZnFfc2xpY2VfYXN5bmNfc2hvdywgY2ZxZC0+Y2ZxX3NsaWNlWzBdLCAxKTsKIFNIT1dfRlVOQ1RJT04oY2ZxX3NsaWNlX2FzeW5jX3JxX3Nob3csIGNmcWQtPmNmcV9zbGljZV9hc3luY19ycSwgMCk7CitTSE9XX0ZVTkNUSU9OKGNmcV9sb3dfbGF0ZW5jeV9zaG93LCBjZnFkLT5jZnFfbGF0ZW5jeSwgMCk7CiAjdW5kZWYgU0hPV19GVU5DVElPTgogCiAjZGVmaW5lIFNUT1JFX0ZVTkNUSU9OKF9fRlVOQywgX19QVFIsIE1JTiwgTUFYLCBfX0NPTlYpCQkJXApAQCAtMjU4MCw2ICsyNjMyLDcgQEAKIFNUT1JFX0ZVTkNUSU9OKGNmcV9zbGljZV9hc3luY19zdG9yZSwgJmNmcWQtPmNmcV9zbGljZVswXSwgMSwgVUlOVF9NQVgsIDEpOwogU1RPUkVfRlVOQ1RJT04oY2ZxX3NsaWNlX2FzeW5jX3JxX3N0b3JlLCAmY2ZxZC0+Y2ZxX3NsaWNlX2FzeW5jX3JxLCAxLAogCQlVSU5UX01BWCwgMCk7CitTVE9SRV9GVU5DVElPTihjZnFfbG93X2xhdGVuY3lfc3RvcmUsICZjZnFkLT5jZnFfbGF0ZW5jeSwgMCwgMSwgMCk7CiAjdW5kZWYgU1RPUkVfRlVOQ1RJT04KIAogI2RlZmluZSBDRlFfQVRUUihuYW1lKSBcCkBAIC0yNTk1LDYgKzI2NDgsNyBAQAogCUNGUV9BVFRSKHNsaWNlX2FzeW5jKSwKIAlDRlFfQVRUUihzbGljZV9hc3luY19ycSksCiAJQ0ZRX0FUVFIoc2xpY2VfaWRsZSksCisJQ0ZRX0FUVFIobG93X2xhdGVuY3kpLAogCV9fQVRUUl9OVUxMCiB9OwogCmRpZmYgLS1naXQgYS9ibG9jay9jb21wYXRfaW9jdGwuYyBiL2Jsb2NrL2NvbXBhdF9pb2N0bC5jCmluZGV4IDc4NjVhMzQuLjliZDA4NmMgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2NvbXBhdF9pb2N0bC5jCisrKyBiL2Jsb2NrL2NvbXBhdF9pb2N0bC5jCkBAIC0yMSw2ICsyMSwxMSBAQAogCXJldHVybiBwdXRfdXNlcih2YWwsIChjb21wYXRfaW50X3QgX191c2VyICopY29tcGF0X3B0cihhcmcpKTsKIH0KIAorc3RhdGljIGludCBjb21wYXRfcHV0X3VpbnQodW5zaWduZWQgbG9uZyBhcmcsIHVuc2lnbmVkIGludCB2YWwpCit7CisJcmV0dXJuIHB1dF91c2VyKHZhbCwgKGNvbXBhdF91aW50X3QgX191c2VyICopY29tcGF0X3B0cihhcmcpKTsKK30KKwogc3RhdGljIGludCBjb21wYXRfcHV0X2xvbmcodW5zaWduZWQgbG9uZyBhcmcsIGxvbmcgdmFsKQogewogCXJldHVybiBwdXRfdXNlcih2YWwsIChjb21wYXRfbG9uZ190IF9fdXNlciAqKWNvbXBhdF9wdHIoYXJnKSk7CkBAIC03MzQsNiArNzM5LDE0IEBACiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIEhESU9fR0VUR0VPOgogCQlyZXR1cm4gY29tcGF0X2hkaW9fZ2V0Z2VvKGRpc2ssIGJkZXYsIGNvbXBhdF9wdHIoYXJnKSk7CisJY2FzZSBCTEtQQlNaR0VUOgorCQlyZXR1cm4gY29tcGF0X3B1dF91aW50KGFyZywgYmRldl9waHlzaWNhbF9ibG9ja19zaXplKGJkZXYpKTsKKwljYXNlIEJMS0lPTUlOOgorCQlyZXR1cm4gY29tcGF0X3B1dF91aW50KGFyZywgYmRldl9pb19taW4oYmRldikpOworCWNhc2UgQkxLSU9PUFQ6CisJCXJldHVybiBjb21wYXRfcHV0X3VpbnQoYXJnLCBiZGV2X2lvX29wdChiZGV2KSk7CisJY2FzZSBCTEtBTElHTk9GRjoKKwkJcmV0dXJuIGNvbXBhdF9wdXRfaW50KGFyZywgYmRldl9hbGlnbm1lbnRfb2Zmc2V0KGJkZXYpKTsKIAljYXNlIEJMS0ZMU0JVRjoKIAljYXNlIEJMS1JPU0VUOgogCWNhc2UgQkxLRElTQ0FSRDoKZGlmZiAtLWdpdCBhL2Jsb2NrL2VsZXZhdG9yLmMgYi9ibG9jay9lbGV2YXRvci5jCmluZGV4IDE5NzViNjEuLmE4NDcwNDYgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2VsZXZhdG9yLmMKKysrIGIvYmxvY2svZWxldmF0b3IuYwpAQCAtMTA1OSw5ICsxMDU5LDcgQEAKIAkJcmV0dXJuIGNvdW50OwogCiAJc3RybGNweShlbGV2YXRvcl9uYW1lLCBuYW1lLCBzaXplb2YoZWxldmF0b3JfbmFtZSkpOwotCXN0cnN0cmlwKGVsZXZhdG9yX25hbWUpOwotCi0JZSA9IGVsZXZhdG9yX2dldChlbGV2YXRvcl9uYW1lKTsKKwllID0gZWxldmF0b3JfZ2V0KHN0cnN0cmlwKGVsZXZhdG9yX25hbWUpKTsKIAlpZiAoIWUpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJlbGV2YXRvcjogdHlwZSAlcyBub3QgZm91bmRcbiIsIGVsZXZhdG9yX25hbWUpOwogCQlyZXR1cm4gLUVJTlZBTDsKZGlmZiAtLWdpdCBhL2Jsb2NrL2lvY3RsLmMgYi9ibG9jay9pb2N0bC5jCmluZGV4IGQzZTZiNTguLjFmNGQxZGUgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2lvY3RsLmMKKysrIGIvYmxvY2svaW9jdGwuYwpAQCAtMTM4LDYgKzEzOCwxMSBAQAogCXJldHVybiBwdXRfdXNlcih2YWwsIChpbnQgX191c2VyICopYXJnKTsKIH0KIAorc3RhdGljIGludCBwdXRfdWludCh1bnNpZ25lZCBsb25nIGFyZywgdW5zaWduZWQgaW50IHZhbCkKK3sKKwlyZXR1cm4gcHV0X3VzZXIodmFsLCAodW5zaWduZWQgaW50IF9fdXNlciAqKWFyZyk7Cit9CisKIHN0YXRpYyBpbnQgcHV0X2xvbmcodW5zaWduZWQgbG9uZyBhcmcsIGxvbmcgdmFsKQogewogCXJldHVybiBwdXRfdXNlcih2YWwsIChsb25nIF9fdXNlciAqKWFyZyk7CkBAIC0yNjMsMTAgKzI2OCwxOCBAQAogCQlyZXR1cm4gcHV0X2xvbmcoYXJnLCAoYmRpLT5yYV9wYWdlcyAqIFBBR0VfQ0FDSEVfU0laRSkgLyA1MTIpOwogCWNhc2UgQkxLUk9HRVQ6CiAJCXJldHVybiBwdXRfaW50KGFyZywgYmRldl9yZWFkX29ubHkoYmRldikgIT0gMCk7Ci0JY2FzZSBCTEtCU1pHRVQ6IC8qIGdldCB0aGUgbG9naWNhbCBibG9jayBzaXplIChjZi4gQkxLU1NaR0VUKSAqLworCWNhc2UgQkxLQlNaR0VUOiAvKiBnZXQgYmxvY2sgZGV2aWNlIHNvZnQgYmxvY2sgc2l6ZSAoY2YuIEJMS1NTWkdFVCkgKi8KIAkJcmV0dXJuIHB1dF9pbnQoYXJnLCBibG9ja19zaXplKGJkZXYpKTsKLQljYXNlIEJMS1NTWkdFVDogLyogZ2V0IGJsb2NrIGRldmljZSBoYXJkd2FyZSBzZWN0b3Igc2l6ZSAqLworCWNhc2UgQkxLU1NaR0VUOiAvKiBnZXQgYmxvY2sgZGV2aWNlIGxvZ2ljYWwgYmxvY2sgc2l6ZSAqLwogCQlyZXR1cm4gcHV0X2ludChhcmcsIGJkZXZfbG9naWNhbF9ibG9ja19zaXplKGJkZXYpKTsKKwljYXNlIEJMS1BCU1pHRVQ6IC8qIGdldCBibG9jayBkZXZpY2UgcGh5c2ljYWwgYmxvY2sgc2l6ZSAqLworCQlyZXR1cm4gcHV0X3VpbnQoYXJnLCBiZGV2X3BoeXNpY2FsX2Jsb2NrX3NpemUoYmRldikpOworCWNhc2UgQkxLSU9NSU46CisJCXJldHVybiBwdXRfdWludChhcmcsIGJkZXZfaW9fbWluKGJkZXYpKTsKKwljYXNlIEJMS0lPT1BUOgorCQlyZXR1cm4gcHV0X3VpbnQoYXJnLCBiZGV2X2lvX29wdChiZGV2KSk7CisJY2FzZSBCTEtBTElHTk9GRjoKKwkJcmV0dXJuIHB1dF9pbnQoYXJnLCBiZGV2X2FsaWdubWVudF9vZmZzZXQoYmRldikpOwogCWNhc2UgQkxLU0VDVEdFVDoKIAkJcmV0dXJuIHB1dF91c2hvcnQoYXJnLCBxdWV1ZV9tYXhfc2VjdG9ycyhiZGV2X2dldF9xdWV1ZShiZGV2KSkpOwogCWNhc2UgQkxLUkFTRVQ6CmRpZmYgLS1naXQgYS9jcnlwdG8vYWVhZC5jIGIvY3J5cHRvL2FlYWQuYwppbmRleCBkOWFhNzMzLi4wYTU1ZGE3IDEwMDY0NAotLS0gYS9jcnlwdG8vYWVhZC5jCisrKyBiL2NyeXB0by9hZWFkLmMKQEAgLTE4LDYgKzE4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9ydG5ldGxpbmsuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogCmRpZmYgLS1naXQgYS9jcnlwdG8vYXN5bmNfdHgvYXN5bmNfcHEuYyBiL2NyeXB0by9hc3luY190eC9hc3luY19wcS5jCmluZGV4IGI4OGRiNmQuLjZiNWNjNGYgMTAwNjQ0Ci0tLSBhL2NyeXB0by9hc3luY190eC9hc3luY19wcS5jCisrKyBiL2NyeXB0by9hc3luY190eC9hc3luY19wcS5jCkBAIC0yNiwxNCArMjYsMTAgQEAKICNpbmNsdWRlIDxsaW51eC9hc3luY190eC5oPgogCiAvKioKLSAqIHNjcmliYmxlIC0gc3BhY2UgdG8gaG9sZCB0aHJvd2F3YXkgUCBidWZmZXIgZm9yIHN5bmNocm9ub3VzIGdlbl9zeW5kcm9tZQorICogcHFfc2NyaWJibGVfcGFnZSAtIHNwYWNlIHRvIGhvbGQgdGhyb3dhd2F5IFAgb3IgUSBidWZmZXIgZm9yCisgKiBzeW5jaHJvbm91cyBnZW5fc3luZHJvbWUKICAqLwotc3RhdGljIHN0cnVjdCBwYWdlICpzY3JpYmJsZTsKLQotc3RhdGljIGJvb2wgaXNfcmFpZDZfemVyb19ibG9jayhzdHJ1Y3QgcGFnZSAqcCkKLXsKLQlyZXR1cm4gcCA9PSAodm9pZCAqKSByYWlkNl9lbXB0eV96ZXJvX3BhZ2U7Ci19CitzdGF0aWMgc3RydWN0IHBhZ2UgKnBxX3NjcmliYmxlX3BhZ2U7CiAKIC8qIHRoZSBzdHJ1Y3QgcGFnZSAqYmxvY2tzW10gcGFyYW1ldGVyIHBhc3NlZCB0byBhc3luY19nZW5fc3luZHJvbWUoKQogICogYW5kIGFzeW5jX3N5bmRyb21lX3ZhbCgpIGNvbnRhaW5zIHRoZSAnUCcgZGVzdGluYXRpb24gYWRkcmVzcyBhdApAQCAtODMsNyArNzksNyBAQAogCSAqIHNvdXJjZXMgYW5kIHVwZGF0ZSB0aGUgY29lZmZpY2llbnRzIGFjY29yZGluZ2x5CiAJICovCiAJZm9yIChpID0gMCwgaWR4ID0gMDsgaSA8IHNyY19jbnQ7IGkrKykgewotCQlpZiAoaXNfcmFpZDZfemVyb19ibG9jayhibG9ja3NbaV0pKQorCQlpZiAoYmxvY2tzW2ldID09IE5VTEwpCiAJCQljb250aW51ZTsKIAkJZG1hX3NyY1tpZHhdID0gZG1hX21hcF9wYWdlKGRtYS0+ZGV2LCBibG9ja3NbaV0sIG9mZnNldCwgbGVuLAogCQkJCQkgICAgRE1BX1RPX0RFVklDRSk7CkBAIC0xNjAsOSArMTU2LDkgQEAKIAkJc3JjcyA9ICh2b2lkICoqKSBibG9ja3M7CiAKIAlmb3IgKGkgPSAwOyBpIDwgZGlza3M7IGkrKykgewotCQlpZiAoaXNfcmFpZDZfemVyb19ibG9jayhibG9ja3NbaV0pKSB7CisJCWlmIChibG9ja3NbaV0gPT0gTlVMTCkgewogCQkJQlVHX09OKGkgPiBkaXNrcyAtIDMpOyAvKiBQIG9yIFEgY2FuJ3QgYmUgemVybyAqLwotCQkJc3Jjc1tpXSA9IGJsb2Nrc1tpXTsKKwkJCXNyY3NbaV0gPSAodm9pZCopcmFpZDZfZW1wdHlfemVyb19wYWdlOwogCQl9IGVsc2UKIAkJCXNyY3NbaV0gPSBwYWdlX2FkZHJlc3MoYmxvY2tzW2ldKSArIG9mZnNldDsKIAl9CkBAIC0xODYsMTAgKzE4MiwxNCBAQAogICogYmxvY2tzW2Rpc2tzLTFdIHRvIE5VTEwuICBXaGVuIFAgb3IgUSBpcyBvbWl0dGVkICdsZW4nIG11c3QgYmUgPD0KICAqIFBBR0VfU0laRSBhcyBhIHRlbXBvcmFyeSBidWZmZXIgb2YgdGhpcyBzaXplIGlzIHVzZWQgaW4gdGhlCiAgKiBzeW5jaHJvbm91cyBwYXRoLiAgJ2Rpc2tzJyBhbHdheXMgYWNjb3VudHMgZm9yIGJvdGggZGVzdGluYXRpb24KLSAqIGJ1ZmZlcnMuCisgKiBidWZmZXJzLiAgSWYgYW55IHNvdXJjZSBidWZmZXJzIChibG9ja3NbaV0gd2hlcmUgaSA8IGRpc2tzIC0gMikgYXJlCisgKiBzZXQgdG8gTlVMTCB0aG9zZSBidWZmZXJzIHdpbGwgYmUgcmVwbGFjZWQgd2l0aCB0aGUgcmFpZDZfemVyb19wYWdlCisgKiBpbiB0aGUgc3luY2hyb25vdXMgcGF0aCBhbmQgb21pdHRlZCBpbiB0aGUgaGFyZHdhcmUtYXN5bmNocm9ub3VzCisgKiBwYXRoLgogICoKICAqICdibG9ja3MnIG5vdGU6IGlmIHN1Ym1pdC0+c2NyaWJibGUgaXMgTlVMTCB0aGVuIHRoZSBjb250ZW50cyBvZgotICogJ2Jsb2NrcycgbWF5IGJlIG92ZXJyaWRkZW4KKyAqICdibG9ja3MnIG1heSBiZSBvdmVyd3JpdHRlbiB0byBwZXJmb3JtIGFkZHJlc3MgY29udmVyc2lvbnMKKyAqIChkbWFfbWFwX3BhZ2UoKSBvciBwYWdlX2FkZHJlc3MoKSkuCiAgKi8KIHN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqCiBhc3luY19nZW5fc3luZHJvbWUoc3RydWN0IHBhZ2UgKipibG9ja3MsIHVuc2lnbmVkIGludCBvZmZzZXQsIGludCBkaXNrcywKQEAgLTIyNywxMSArMjI3LDExIEBACiAJYXN5bmNfdHhfcXVpZXNjZSgmc3VibWl0LT5kZXBlbmRfdHgpOwogCiAJaWYgKCFQKGJsb2NrcywgZGlza3MpKSB7Ci0JCVAoYmxvY2tzLCBkaXNrcykgPSBzY3JpYmJsZTsKKwkJUChibG9ja3MsIGRpc2tzKSA9IHBxX3NjcmliYmxlX3BhZ2U7CiAJCUJVR19PTihsZW4gKyBvZmZzZXQgPiBQQUdFX1NJWkUpOwogCX0KIAlpZiAoIVEoYmxvY2tzLCBkaXNrcykpIHsKLQkJUShibG9ja3MsIGRpc2tzKSA9IHNjcmliYmxlOworCQlRKGJsb2NrcywgZGlza3MpID0gcHFfc2NyaWJibGVfcGFnZTsKIAkJQlVHX09OKGxlbiArIG9mZnNldCA+IFBBR0VfU0laRSk7CiAJfQogCWRvX3N5bmNfZ2VuX3N5bmRyb21lKGJsb2Nrcywgb2Zmc2V0LCBkaXNrcywgbGVuLCBzdWJtaXQpOwpAQCAtMjY1LDggKzI2NSwxMCBAQAogCQkJCQkJICAgICAgbGVuKTsKIAlzdHJ1Y3QgZG1hX2RldmljZSAqZGV2aWNlID0gY2hhbiA/IGNoYW4tPmRldmljZSA6IE5VTEw7CiAJc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICp0eDsKKwl1bnNpZ25lZCBjaGFyIGNvZWZzW2Rpc2tzLTJdOwogCWVudW0gZG1hX2N0cmxfZmxhZ3MgZG1hX2ZsYWdzID0gc3VibWl0LT5jYl9mbiA/IERNQV9QUkVQX0lOVEVSUlVQVCA6IDA7CiAJZG1hX2FkZHJfdCAqZG1hX3NyYyA9IE5VTEw7CisJaW50IHNyY19jbnQgPSAwOwogCiAJQlVHX09OKGRpc2tzIDwgNCk7CiAKQEAgLTI4NSwyMiArMjg3LDMyIEBACiAJCQkgX19mdW5jX18sIGRpc2tzLCBsZW4pOwogCQlpZiAoIVAoYmxvY2tzLCBkaXNrcykpCiAJCQlkbWFfZmxhZ3MgfD0gRE1BX1BSRVBfUFFfRElTQUJMRV9QOworCQllbHNlCisJCQlwcVswXSA9IGRtYV9tYXBfcGFnZShkZXYsIFAoYmxvY2tzLCBkaXNrcyksCisJCQkJCSAgICAgb2Zmc2V0LCBsZW4sCisJCQkJCSAgICAgRE1BX1RPX0RFVklDRSk7CiAJCWlmICghUShibG9ja3MsIGRpc2tzKSkKIAkJCWRtYV9mbGFncyB8PSBETUFfUFJFUF9QUV9ESVNBQkxFX1E7CisJCWVsc2UKKwkJCXBxWzFdID0gZG1hX21hcF9wYWdlKGRldiwgUShibG9ja3MsIGRpc2tzKSwKKwkJCQkJICAgICBvZmZzZXQsIGxlbiwKKwkJCQkJICAgICBETUFfVE9fREVWSUNFKTsKKwogCQlpZiAoc3VibWl0LT5mbGFncyAmIEFTWU5DX1RYX0ZFTkNFKQogCQkJZG1hX2ZsYWdzIHw9IERNQV9QUkVQX0ZFTkNFOwotCQlmb3IgKGkgPSAwOyBpIDwgZGlza3M7IGkrKykKKwkJZm9yIChpID0gMDsgaSA8IGRpc2tzLTI7IGkrKykKIAkJCWlmIChsaWtlbHkoYmxvY2tzW2ldKSkgewotCQkJCUJVR19PTihpc19yYWlkNl96ZXJvX2Jsb2NrKGJsb2Nrc1tpXSkpOwotCQkJCWRtYV9zcmNbaV0gPSBkbWFfbWFwX3BhZ2UoZGV2LCBibG9ja3NbaV0sCi0JCQkJCQkJICBvZmZzZXQsIGxlbiwKLQkJCQkJCQkgIERNQV9UT19ERVZJQ0UpOworCQkJCWRtYV9zcmNbc3JjX2NudF0gPSBkbWFfbWFwX3BhZ2UoZGV2LCBibG9ja3NbaV0sCisJCQkJCQkJCW9mZnNldCwgbGVuLAorCQkJCQkJCQlETUFfVE9fREVWSUNFKTsKKwkJCQljb2Vmc1tzcmNfY250XSA9IHJhaWQ2X2dmZXhwW2ldOworCQkJCXNyY19jbnQrKzsKIAkJCX0KIAogCQlmb3IgKDs7KSB7CiAJCQl0eCA9IGRldmljZS0+ZGV2aWNlX3ByZXBfZG1hX3BxX3ZhbChjaGFuLCBwcSwgZG1hX3NyYywKLQkJCQkJCQkgICAgZGlza3MgLSAyLAotCQkJCQkJCSAgICByYWlkNl9nZmV4cCwKKwkJCQkJCQkgICAgc3JjX2NudCwKKwkJCQkJCQkgICAgY29lZnMsCiAJCQkJCQkJICAgIGxlbiwgcHFyZXMsCiAJCQkJCQkJICAgIGRtYV9mbGFncyk7CiAJCQlpZiAobGlrZWx5KHR4KSkKQEAgLTM3Myw5ICszODUsOSBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBhc3luY19wcV9pbml0KHZvaWQpCiB7Ci0Jc2NyaWJibGUgPSBhbGxvY19wYWdlKEdGUF9LRVJORUwpOworCXBxX3NjcmliYmxlX3BhZ2UgPSBhbGxvY19wYWdlKEdGUF9LRVJORUwpOwogCi0JaWYgKHNjcmliYmxlKQorCWlmIChwcV9zY3JpYmJsZV9wYWdlKQogCQlyZXR1cm4gMDsKIAogCXByX2VycigiJXM6IGZhaWxlZCB0byBhbGxvY2F0ZSByZXF1aXJlZCBzcGFyZSBwYWdlXG4iLCBfX2Z1bmNfXyk7CkBAIC0zODUsNyArMzk3LDcgQEAKIAogc3RhdGljIHZvaWQgX19leGl0IGFzeW5jX3BxX2V4aXQodm9pZCkKIHsKLQlwdXRfcGFnZShzY3JpYmJsZSk7CisJcHV0X3BhZ2UocHFfc2NyaWJibGVfcGFnZSk7CiB9CiAKIG1vZHVsZV9pbml0KGFzeW5jX3BxX2luaXQpOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL2FzeW5jX3R4L2FzeW5jX3JhaWQ2X3JlY292LmMgYi9jcnlwdG8vYXN5bmNfdHgvYXN5bmNfcmFpZDZfcmVjb3YuYwppbmRleCA2ZDczZGRlLi45NDNmMmFiIDEwMDY0NAotLS0gYS9jcnlwdG8vYXN5bmNfdHgvYXN5bmNfcmFpZDZfcmVjb3YuYworKysgYi9jcnlwdG8vYXN5bmNfdHgvYXN5bmNfcmFpZDZfcmVjb3YuYwpAQCAtMTMxLDggKzEzMSw4IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKgotX18yZGF0YV9yZWNvdl80KHNpemVfdCBieXRlcywgaW50IGZhaWxhLCBpbnQgZmFpbGIsIHN0cnVjdCBwYWdlICoqYmxvY2tzLAotCSAgICAgIHN0cnVjdCBhc3luY19zdWJtaXRfY3RsICpzdWJtaXQpCitfXzJkYXRhX3JlY292XzQoaW50IGRpc2tzLCBzaXplX3QgYnl0ZXMsIGludCBmYWlsYSwgaW50IGZhaWxiLAorCQlzdHJ1Y3QgcGFnZSAqKmJsb2Nrcywgc3RydWN0IGFzeW5jX3N1Ym1pdF9jdGwgKnN1Ym1pdCkKIHsKIAlzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKnR4ID0gTlVMTDsKIAlzdHJ1Y3QgcGFnZSAqcCwgKnEsICphLCAqYjsKQEAgLTE0Myw4ICsxNDMsOCBAQAogCXZvaWQgKmNiX3BhcmFtID0gc3VibWl0LT5jYl9wYXJhbTsKIAl2b2lkICpzY3JpYmJsZSA9IHN1Ym1pdC0+c2NyaWJibGU7CiAKLQlwID0gYmxvY2tzWzQtMl07Ci0JcSA9IGJsb2Nrc1s0LTFdOworCXAgPSBibG9ja3NbZGlza3MtMl07CisJcSA9IGJsb2Nrc1tkaXNrcy0xXTsKIAogCWEgPSBibG9ja3NbZmFpbGFdOwogCWIgPSBibG9ja3NbZmFpbGJdOwpAQCAtMTcwLDggKzE3MCw4IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKgotX18yZGF0YV9yZWNvdl81KHNpemVfdCBieXRlcywgaW50IGZhaWxhLCBpbnQgZmFpbGIsIHN0cnVjdCBwYWdlICoqYmxvY2tzLAotCSAgICAgIHN0cnVjdCBhc3luY19zdWJtaXRfY3RsICpzdWJtaXQpCitfXzJkYXRhX3JlY292XzUoaW50IGRpc2tzLCBzaXplX3QgYnl0ZXMsIGludCBmYWlsYSwgaW50IGZhaWxiLAorCQlzdHJ1Y3QgcGFnZSAqKmJsb2Nrcywgc3RydWN0IGFzeW5jX3N1Ym1pdF9jdGwgKnN1Ym1pdCkKIHsKIAlzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKnR4ID0gTlVMTDsKIAlzdHJ1Y3QgcGFnZSAqcCwgKnEsICpnLCAqZHAsICpkcTsKQEAgLTE4MSwyMSArMTgxLDIyIEBACiAJZG1hX2FzeW5jX3R4X2NhbGxiYWNrIGNiX2ZuID0gc3VibWl0LT5jYl9mbjsKIAl2b2lkICpjYl9wYXJhbSA9IHN1Ym1pdC0+Y2JfcGFyYW07CiAJdm9pZCAqc2NyaWJibGUgPSBzdWJtaXQtPnNjcmliYmxlOwotCWludCB1bmluaXRpYWxpemVkX3Zhcihnb29kKTsKLQlpbnQgaTsKKwlpbnQgZ29vZF9zcmNzLCBnb29kLCBpOwogCi0JZm9yIChpID0gMDsgaSA8IDM7IGkrKykgeworCWdvb2Rfc3JjcyA9IDA7CisJZ29vZCA9IC0xOworCWZvciAoaSA9IDA7IGkgPCBkaXNrcy0yOyBpKyspIHsKKwkJaWYgKGJsb2Nrc1tpXSA9PSBOVUxMKQorCQkJY29udGludWU7CiAJCWlmIChpID09IGZhaWxhIHx8IGkgPT0gZmFpbGIpCiAJCQljb250aW51ZTsKLQkJZWxzZSB7Ci0JCQlnb29kID0gaTsKLQkJCWJyZWFrOwotCQl9CisJCWdvb2QgPSBpOworCQlnb29kX3NyY3MrKzsKIAl9Ci0JQlVHX09OKGkgPj0gMyk7CisJQlVHX09OKGdvb2Rfc3JjcyA+IDEpOwogCi0JcCA9IGJsb2Nrc1s1LTJdOwotCXEgPSBibG9ja3NbNS0xXTsKKwlwID0gYmxvY2tzW2Rpc2tzLTJdOworCXEgPSBibG9ja3NbZGlza3MtMV07CiAJZyA9IGJsb2Nrc1tnb29kXTsKIAogCS8qIENvbXB1dGUgc3luZHJvbWUgd2l0aCB6ZXJvIGZvciB0aGUgbWlzc2luZyBkYXRhIHBhZ2VzCkBAIC0yNjMsMTAgKzI2NCwxMCBAQAogCSAqIGRlbHRhIHAgYW5kIGRlbHRhIHEKIAkgKi8KIAlkcCA9IGJsb2Nrc1tmYWlsYV07Ci0JYmxvY2tzW2ZhaWxhXSA9ICh2b2lkICopcmFpZDZfZW1wdHlfemVyb19wYWdlOworCWJsb2Nrc1tmYWlsYV0gPSBOVUxMOwogCWJsb2Nrc1tkaXNrcy0yXSA9IGRwOwogCWRxID0gYmxvY2tzW2ZhaWxiXTsKLQlibG9ja3NbZmFpbGJdID0gKHZvaWQgKilyYWlkNl9lbXB0eV96ZXJvX3BhZ2U7CisJYmxvY2tzW2ZhaWxiXSA9IE5VTEw7CiAJYmxvY2tzW2Rpc2tzLTFdID0gZHE7CiAKIAlpbml0X2FzeW5jX3N1Ym1pdChzdWJtaXQsIEFTWU5DX1RYX0ZFTkNFLCB0eCwgTlVMTCwgTlVMTCwgc2NyaWJibGUpOwpAQCAtMzIzLDYgKzMyNCw4IEBACiBhc3luY19yYWlkNl8yZGF0YV9yZWNvdihpbnQgZGlza3MsIHNpemVfdCBieXRlcywgaW50IGZhaWxhLCBpbnQgZmFpbGIsCiAJCQlzdHJ1Y3QgcGFnZSAqKmJsb2Nrcywgc3RydWN0IGFzeW5jX3N1Ym1pdF9jdGwgKnN1Ym1pdCkKIHsKKwlpbnQgbm9uX3plcm9fc3JjcywgaTsKKwogCUJVR19PTihmYWlsYSA9PSBmYWlsYik7CiAJaWYgKGZhaWxiIDwgZmFpbGEpCiAJCXN3YXAoZmFpbGEsIGZhaWxiKTsKQEAgLTMzNCwxMSArMzM3LDEzIEBACiAJICovCiAJaWYgKCFzdWJtaXQtPnNjcmliYmxlKSB7CiAJCXZvaWQgKipwdHJzID0gKHZvaWQgKiopIGJsb2NrczsKLQkJaW50IGk7CiAKIAkJYXN5bmNfdHhfcXVpZXNjZSgmc3VibWl0LT5kZXBlbmRfdHgpOwogCQlmb3IgKGkgPSAwOyBpIDwgZGlza3M7IGkrKykKLQkJCXB0cnNbaV0gPSBwYWdlX2FkZHJlc3MoYmxvY2tzW2ldKTsKKwkJCWlmIChibG9ja3NbaV0gPT0gTlVMTCkKKwkJCQlwdHJzW2ldID0gKHZvaWQgKikgcmFpZDZfZW1wdHlfemVyb19wYWdlOworCQkJZWxzZQorCQkJCXB0cnNbaV0gPSBwYWdlX2FkZHJlc3MoYmxvY2tzW2ldKTsKIAogCQlyYWlkNl8yZGF0YV9yZWNvdihkaXNrcywgYnl0ZXMsIGZhaWxhLCBmYWlsYiwgcHRycyk7CiAKQEAgLTM0NywxOSArMzUyLDMwIEBACiAJCXJldHVybiBOVUxMOwogCX0KIAotCXN3aXRjaCAoZGlza3MpIHsKLQljYXNlIDQ6CisJbm9uX3plcm9fc3JjcyA9IDA7CisJZm9yIChpID0gMDsgaSA8IGRpc2tzLTIgJiYgbm9uX3plcm9fc3JjcyA8IDQ7IGkrKykKKwkJaWYgKGJsb2Nrc1tpXSkKKwkJCW5vbl96ZXJvX3NyY3MrKzsKKwlzd2l0Y2ggKG5vbl96ZXJvX3NyY3MpIHsKKwljYXNlIDA6CisJY2FzZSAxOgorCQkvKiBUaGVyZSBtdXN0IGJlIGF0IGxlYXN0IDIgc291cmNlcyAtIHRoZSBmYWlsZWQgZGV2aWNlcy4gKi8KKwkJQlVHKCk7CisKKwljYXNlIDI6CiAJCS8qIGRtYSBkZXZpY2VzIGRvIG5vdCB1bmlmb3JtbHkgdW5kZXJzdGFuZCBhIHplcm8gc291cmNlIHBxCiAJCSAqIG9wZXJhdGlvbiAoaW4gY29udHJhc3QgdG8gdGhlIHN5bmNocm9ub3VzIGNhc2UpLCBzbwotCQkgKiBleHBsaWNpdGx5IGhhbmRsZSB0aGUgNCBkaXNrIHNwZWNpYWwgY2FzZQorCQkgKiBleHBsaWNpdGx5IGhhbmRsZSB0aGUgc3BlY2lhbCBjYXNlIG9mIGEgNCBkaXNrIGFycmF5IHdpdGgKKwkJICogYm90aCBkYXRhIGRpc2tzIG1pc3NpbmcuCiAJCSAqLwotCQlyZXR1cm4gX18yZGF0YV9yZWNvdl80KGJ5dGVzLCBmYWlsYSwgZmFpbGIsIGJsb2Nrcywgc3VibWl0KTsKLQljYXNlIDU6CisJCXJldHVybiBfXzJkYXRhX3JlY292XzQoZGlza3MsIGJ5dGVzLCBmYWlsYSwgZmFpbGIsIGJsb2Nrcywgc3VibWl0KTsKKwljYXNlIDM6CiAJCS8qIGRtYSBkZXZpY2VzIGRvIG5vdCB1bmlmb3JtbHkgdW5kZXJzdGFuZCBhIHNpbmdsZQogCQkgKiBzb3VyY2UgcHEgb3BlcmF0aW9uIChpbiBjb250cmFzdCB0byB0aGUgc3luY2hyb25vdXMKLQkJICogY2FzZSksIHNvIGV4cGxpY2l0bHkgaGFuZGxlIHRoZSA1IGRpc2sgc3BlY2lhbCBjYXNlCisJCSAqIGNhc2UpLCBzbyBleHBsaWNpdGx5IGhhbmRsZSB0aGUgc3BlY2lhbCBjYXNlIG9mIGEgNSBkaXNrCisJCSAqIGFycmF5IHdpdGggMiBvZiAzIGRhdGEgZGlza3MgbWlzc2luZy4KIAkJICovCi0JCXJldHVybiBfXzJkYXRhX3JlY292XzUoYnl0ZXMsIGZhaWxhLCBmYWlsYiwgYmxvY2tzLCBzdWJtaXQpOworCQlyZXR1cm4gX18yZGF0YV9yZWNvdl81KGRpc2tzLCBieXRlcywgZmFpbGEsIGZhaWxiLCBibG9ja3MsIHN1Ym1pdCk7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIF9fMmRhdGFfcmVjb3ZfbihkaXNrcywgYnl0ZXMsIGZhaWxhLCBmYWlsYiwgYmxvY2tzLCBzdWJtaXQpOwogCX0KQEAgLTM4NSw2ICs0MDEsNyBAQAogCWRtYV9hc3luY190eF9jYWxsYmFjayBjYl9mbiA9IHN1Ym1pdC0+Y2JfZm47CiAJdm9pZCAqY2JfcGFyYW0gPSBzdWJtaXQtPmNiX3BhcmFtOwogCXZvaWQgKnNjcmliYmxlID0gc3VibWl0LT5zY3JpYmJsZTsKKwlpbnQgZ29vZF9zcmNzLCBnb29kLCBpOwogCXN0cnVjdCBwYWdlICpzcmNzWzJdOwogCiAJcHJfZGVidWcoIiVzOiBkaXNrczogJWQgbGVuOiAlenVcbiIsIF9fZnVuY19fLCBkaXNrcywgYnl0ZXMpOwpAQCAtMzk0LDExICs0MTEsMTMgQEAKIAkgKi8KIAlpZiAoIXNjcmliYmxlKSB7CiAJCXZvaWQgKipwdHJzID0gKHZvaWQgKiopIGJsb2NrczsKLQkJaW50IGk7CiAKIAkJYXN5bmNfdHhfcXVpZXNjZSgmc3VibWl0LT5kZXBlbmRfdHgpOwogCQlmb3IgKGkgPSAwOyBpIDwgZGlza3M7IGkrKykKLQkJCXB0cnNbaV0gPSBwYWdlX2FkZHJlc3MoYmxvY2tzW2ldKTsKKwkJCWlmIChibG9ja3NbaV0gPT0gTlVMTCkKKwkJCQlwdHJzW2ldID0gKHZvaWQqKXJhaWQ2X2VtcHR5X3plcm9fcGFnZTsKKwkJCWVsc2UKKwkJCQlwdHJzW2ldID0gcGFnZV9hZGRyZXNzKGJsb2Nrc1tpXSk7CiAKIAkJcmFpZDZfZGF0YXBfcmVjb3YoZGlza3MsIGJ5dGVzLCBmYWlsYSwgcHRycyk7CiAKQEAgLTQwNyw2ICs0MjYsMjAgQEAKIAkJcmV0dXJuIE5VTEw7CiAJfQogCisJZ29vZF9zcmNzID0gMDsKKwlnb29kID0gLTE7CisJZm9yIChpID0gMDsgaSA8IGRpc2tzLTI7IGkrKykgeworCQlpZiAoaSA9PSBmYWlsYSkKKwkJCWNvbnRpbnVlOworCQlpZiAoYmxvY2tzW2ldKSB7CisJCQlnb29kID0gaTsKKwkJCWdvb2Rfc3JjcysrOworCQkJaWYgKGdvb2Rfc3JjcyA+IDEpCisJCQkJYnJlYWs7CisJCX0KKwl9CisJQlVHX09OKGdvb2Rfc3JjcyA9PSAwKTsKKwogCXAgPSBibG9ja3NbZGlza3MtMl07CiAJcSA9IGJsb2Nrc1tkaXNrcy0xXTsKIApAQCAtNDE0LDE0ICs0NDcsMTMgQEAKIAkgKiBVc2UgdGhlIGRlYWQgZGF0YSBwYWdlIGFzIHRlbXBvcmFyeSBzdG9yYWdlIGZvciBkZWx0YSBxCiAJICovCiAJZHEgPSBibG9ja3NbZmFpbGFdOwotCWJsb2Nrc1tmYWlsYV0gPSAodm9pZCAqKXJhaWQ2X2VtcHR5X3plcm9fcGFnZTsKKwlibG9ja3NbZmFpbGFdID0gTlVMTDsKIAlibG9ja3NbZGlza3MtMV0gPSBkcTsKIAotCS8qIGluIHRoZSA0IGRpc2sgY2FzZSB3ZSBvbmx5IG5lZWQgdG8gcGVyZm9ybSBhIHNpbmdsZSBzb3VyY2UKLQkgKiBtdWx0aXBsaWNhdGlvbgorCS8qIGluIHRoZSA0LWRpc2sgY2FzZSB3ZSBvbmx5IG5lZWQgdG8gcGVyZm9ybSBhIHNpbmdsZSBzb3VyY2UKKwkgKiBtdWx0aXBsaWNhdGlvbiB3aXRoIHRoZSBvbmUgZ29vZCBkYXRhIGJsb2NrLgogCSAqLwotCWlmIChkaXNrcyA9PSA0KSB7Ci0JCWludCBnb29kID0gZmFpbGEgPT0gMCA/IDEgOiAwOworCWlmIChnb29kX3NyY3MgPT0gMSkgewogCQlzdHJ1Y3QgcGFnZSAqZyA9IGJsb2Nrc1tnb29kXTsKIAogCQlpbml0X2FzeW5jX3N1Ym1pdChzdWJtaXQsIEFTWU5DX1RYX0ZFTkNFLCB0eCwgTlVMTCwgTlVMTCwKZGlmZiAtLWdpdCBhL2NyeXB0by9hc3luY190eC9hc3luY194b3IuYyBiL2NyeXB0by9hc3luY190eC9hc3luY194b3IuYwppbmRleCBiNDU5YTkwLi43OTE4MmRjIDEwMDY0NAotLS0gYS9jcnlwdG8vYXN5bmNfdHgvYXN5bmNfeG9yLmMKKysrIGIvY3J5cHRvL2FzeW5jX3R4L2FzeW5jX3hvci5jCkBAIC00NCwyMCArNDQsMjMgQEAKIAl2b2lkICpjYl9wYXJhbV9vcmlnID0gc3VibWl0LT5jYl9wYXJhbTsKIAllbnVtIGFzeW5jX3R4X2ZsYWdzIGZsYWdzX29yaWcgPSBzdWJtaXQtPmZsYWdzOwogCWVudW0gZG1hX2N0cmxfZmxhZ3MgZG1hX2ZsYWdzOwotCWludCB4b3Jfc3JjX2NudDsKKwlpbnQgeG9yX3NyY19jbnQgPSAwOwogCWRtYV9hZGRyX3QgZG1hX2Rlc3Q7CiAKIAkvKiBtYXAgdGhlIGRlc3QgYmlkcmVjdGlvbmFsIGluIGNhc2UgaXQgaXMgcmUtdXNlZCBhcyBhIHNvdXJjZSAqLwogCWRtYV9kZXN0ID0gZG1hX21hcF9wYWdlKGRtYS0+ZGV2LCBkZXN0LCBvZmZzZXQsIGxlbiwgRE1BX0JJRElSRUNUSU9OQUwpOwogCWZvciAoaSA9IDA7IGkgPCBzcmNfY250OyBpKyspIHsKIAkJLyogb25seSBtYXAgdGhlIGRlc3Qgb25jZSAqLworCQlpZiAoIXNyY19saXN0W2ldKQorCQkJY29udGludWU7CiAJCWlmICh1bmxpa2VseShzcmNfbGlzdFtpXSA9PSBkZXN0KSkgewotCQkJZG1hX3NyY1tpXSA9IGRtYV9kZXN0OworCQkJZG1hX3NyY1t4b3Jfc3JjX2NudCsrXSA9IGRtYV9kZXN0OwogCQkJY29udGludWU7CiAJCX0KLQkJZG1hX3NyY1tpXSA9IGRtYV9tYXBfcGFnZShkbWEtPmRldiwgc3JjX2xpc3RbaV0sIG9mZnNldCwKLQkJCQkJICBsZW4sIERNQV9UT19ERVZJQ0UpOworCQlkbWFfc3JjW3hvcl9zcmNfY250KytdID0gZG1hX21hcF9wYWdlKGRtYS0+ZGV2LCBzcmNfbGlzdFtpXSwgb2Zmc2V0LAorCQkJCQkJICAgICAgbGVuLCBETUFfVE9fREVWSUNFKTsKIAl9CisJc3JjX2NudCA9IHhvcl9zcmNfY250OwogCiAJd2hpbGUgKHNyY19jbnQpIHsKIAkJc3VibWl0LT5mbGFncyA9IGZsYWdzX29yaWc7CkBAIC0xMjMsNyArMTI2LDcgQEAKIAkgICAgaW50IHNyY19jbnQsIHNpemVfdCBsZW4sIHN0cnVjdCBhc3luY19zdWJtaXRfY3RsICpzdWJtaXQpCiB7CiAJaW50IGk7Ci0JaW50IHhvcl9zcmNfY250OworCWludCB4b3Jfc3JjX2NudCA9IDA7CiAJaW50IHNyY19vZmYgPSAwOwogCXZvaWQgKmRlc3RfYnVmOwogCXZvaWQgKipzcmNzOwpAQCAtMTM1LDggKzEzOCw5IEBACiAKIAkvKiBjb252ZXJ0IHRvIGJ1ZmZlciBwb2ludGVycyAqLwogCWZvciAoaSA9IDA7IGkgPCBzcmNfY250OyBpKyspCi0JCXNyY3NbaV0gPSBwYWdlX2FkZHJlc3Moc3JjX2xpc3RbaV0pICsgb2Zmc2V0OwotCisJCWlmIChzcmNfbGlzdFtpXSkKKwkJCXNyY3NbeG9yX3NyY19jbnQrK10gPSBwYWdlX2FkZHJlc3Moc3JjX2xpc3RbaV0pICsgb2Zmc2V0OworCXNyY19jbnQgPSB4b3Jfc3JjX2NudDsKIAkvKiBzZXQgZGVzdGluYXRpb24gYWRkcmVzcyAqLwogCWRlc3RfYnVmID0gcGFnZV9hZGRyZXNzKGRlc3QpICsgb2Zmc2V0OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvS2NvbmZpZyBiL2RyaXZlcnMvYWNwaS9LY29uZmlnCmluZGV4IGRkODcyOWQuLjkzZDJjNzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9LY29uZmlnCisrKyBiL2RyaXZlcnMvYWNwaS9LY29uZmlnCkBAIC0yMTEsNiArMjExLDE4IEBACiAJc2VsZWN0IEFDUElfQ09OVEFJTkVSCiAJZGVmYXVsdCB5CiAKK2NvbmZpZyBBQ1BJX1BST0NFU1NPUl9BR0dSRUdBVE9SCisJdHJpc3RhdGUgIlByb2Nlc3NvciBBZ2dyZWdhdG9yIgorCWRlcGVuZHMgb24gQUNQSV9QUk9DRVNTT1IKKwlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTAorCWRlcGVuZHMgb24gWDg2CisJaGVscAorCSAgQUNQSSA0LjAgZGVmaW5lcyBwcm9jZXNzb3IgQWdncmVnYXRvciwgd2hpY2ggZW5hYmxlcyBPUyB0byBwZXJmb3JtCisJICBzcGVjaWZpYyBwcm9jZXNzb3IgY29uZmlndXJhdGlvbiBhbmQgY29udHJvbCB0aGF0IGFwcGxpZXMgdG8gYWxsCisJICBwcm9jZXNzb3JzIGluIHRoZSBwbGF0Zm9ybS4gQ3VycmVudGx5IG9ubHkgbG9naWNhbCBwcm9jZXNzb3IgaWRsaW5nCisJICBpcyBkZWZpbmVkLCB3aGljaCBpcyB0byByZWR1Y2UgcG93ZXIgY29uc3VtcHRpb24uIFRoaXMgZHJpdmVyCisJICBzdXBwb3J0cyB0aGUgbmV3IGRldmljZS4KKwogY29uZmlnIEFDUElfVEhFUk1BTAogCXRyaXN0YXRlICJUaGVybWFsIFpvbmUiCiAJZGVwZW5kcyBvbiBBQ1BJX1BST0NFU1NPUgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL01ha2VmaWxlIGIvZHJpdmVycy9hY3BpL01ha2VmaWxlCmluZGV4IDgyY2Q0OWQuLjc3MDIxMTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2FjcGkvTWFrZWZpbGUKQEAgLTYyLDMgKzYyLDUgQEAKIHByb2Nlc3Nvci15CQkJOj0gcHJvY2Vzc29yX2NvcmUubyBwcm9jZXNzb3JfdGhyb3R0bGluZy5vCiBwcm9jZXNzb3IteQkJCSs9IHByb2Nlc3Nvcl9pZGxlLm8gcHJvY2Vzc29yX3RoZXJtYWwubwogcHJvY2Vzc29yLSQoQ09ORklHX0NQVV9GUkVRKQkrPSBwcm9jZXNzb3JfcGVyZmxpYi5vCisKK29iai0kKENPTkZJR19BQ1BJX1BST0NFU1NPUl9BR0dSRUdBVE9SKSArPSBhY3BpX3BhZC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWMuYyBiL2RyaXZlcnMvYWNwaS9hYy5jCmluZGV4IDk4Yjk2OTAuLmI2ZWQ2MGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hYy5jCisrKyBiL2RyaXZlcnMvYWNwaS9hYy5jCkBAIC0yNDUsNiArMjQ1LDcgQEAKIAkJYWNwaV9idXNfZ2VuZXJhdGVfbmV0bGlua19ldmVudChkZXZpY2UtPnBucC5kZXZpY2VfY2xhc3MsCiAJCQkJCQkgIGRldl9uYW1lKCZkZXZpY2UtPmRldiksIGV2ZW50LAogCQkJCQkJICAodTMyKSBhYy0+c3RhdGUpOworCQlhY3BpX25vdGlmaWVyX2NhbGxfY2hhaW4oZGV2aWNlLCBldmVudCwgKHUzMikgYWMtPnN0YXRlKTsKICNpZmRlZiBDT05GSUdfQUNQSV9TWVNGU19QT1dFUgogCQlrb2JqZWN0X3VldmVudCgmYWMtPmNoYXJnZXIuZGV2LT5rb2JqLCBLT0JKX0NIQU5HRSk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpX3BhZC5jIGIvZHJpdmVycy9hY3BpL2FjcGlfcGFkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQyY2RiOAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpX3BhZC5jCkBAIC0wLDAgKzEsNTE0IEBACisvKgorICogYWNwaV9wYWQuYyBBQ1BJIFByb2Nlc3NvciBBZ2dyZWdhdG9yIERyaXZlcgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwOSwgSW50ZWwgQ29ycG9yYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgKiB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CisjaW5jbHVkZSA8bGludXgvZnJlZXplci5oPgorI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsb2NrY2hpcHMuaD4KKyNpbmNsdWRlIDxhY3BpL2FjcGlfYnVzLmg+CisjaW5jbHVkZSA8YWNwaS9hY3BpX2RyaXZlcnMuaD4KKworI2RlZmluZSBBQ1BJX1BST0NFU1NPUl9BR0dSRUdBVE9SX0NMQVNTCSJwcm9jZXNzb3JfYWdncmVnYXRvciIKKyNkZWZpbmUgQUNQSV9QUk9DRVNTT1JfQUdHUkVHQVRPUl9ERVZJQ0VfTkFNRSAiUHJvY2Vzc29yIEFnZ3JlZ2F0b3IiCisjZGVmaW5lIEFDUElfUFJPQ0VTU09SX0FHR1JFR0FUT1JfTk9USUZZIDB4ODAKK3N0YXRpYyBERUZJTkVfTVVURVgoaXNvbGF0ZWRfY3B1c19sb2NrKTsKKworI2RlZmluZSBNV0FJVF9TVUJTVEFURV9NQVNLCSgweGYpCisjZGVmaW5lIE1XQUlUX0NTVEFURV9NQVNLCSgweGYpCisjZGVmaW5lIE1XQUlUX1NVQlNUQVRFX1NJWkUJKDQpCisjZGVmaW5lIENQVUlEX01XQUlUX0xFQUYgKDUpCisjZGVmaW5lIENQVUlENV9FQ1hfRVhURU5TSU9OU19TVVBQT1JURUQgKDB4MSkKKyNkZWZpbmUgQ1BVSUQ1X0VDWF9JTlRFUlJVUFRfQlJFQUsJKDB4MikKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHBvd2VyX3NhdmluZ19td2FpdF9lYXg7CitzdGF0aWMgdm9pZCBwb3dlcl9zYXZpbmdfbXdhaXRfaW5pdCh2b2lkKQoreworCXVuc2lnbmVkIGludCBlYXgsIGVieCwgZWN4LCBlZHg7CisJdW5zaWduZWQgaW50IGhpZ2hlc3RfY3N0YXRlID0gMDsKKwl1bnNpZ25lZCBpbnQgaGlnaGVzdF9zdWJjc3RhdGUgPSAwOworCWludCBpOworCisJaWYgKCFib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfTVdBSVQpKQorCQlyZXR1cm47CisJaWYgKGJvb3RfY3B1X2RhdGEuY3B1aWRfbGV2ZWwgPCBDUFVJRF9NV0FJVF9MRUFGKQorCQlyZXR1cm47CisKKwljcHVpZChDUFVJRF9NV0FJVF9MRUFGLCAmZWF4LCAmZWJ4LCAmZWN4LCAmZWR4KTsKKworCWlmICghKGVjeCAmIENQVUlENV9FQ1hfRVhURU5TSU9OU19TVVBQT1JURUQpIHx8CisJICAgICEoZWN4ICYgQ1BVSUQ1X0VDWF9JTlRFUlJVUFRfQlJFQUspKQorCQlyZXR1cm47CisKKwllZHggPj49IE1XQUlUX1NVQlNUQVRFX1NJWkU7CisJZm9yIChpID0gMDsgaSA8IDcgJiYgZWR4OyBpKyssIGVkeCA+Pj0gTVdBSVRfU1VCU1RBVEVfU0laRSkgeworCQlpZiAoZWR4ICYgTVdBSVRfU1VCU1RBVEVfTUFTSykgeworCQkJaGlnaGVzdF9jc3RhdGUgPSBpOworCQkJaGlnaGVzdF9zdWJjc3RhdGUgPSBlZHggJiBNV0FJVF9TVUJTVEFURV9NQVNLOworCQl9CisJfQorCXBvd2VyX3NhdmluZ19td2FpdF9lYXggPSAoaGlnaGVzdF9jc3RhdGUgPDwgTVdBSVRfU1VCU1RBVEVfU0laRSkgfAorCQkoaGlnaGVzdF9zdWJjc3RhdGUgLSAxKTsKKworCWZvcl9lYWNoX29ubGluZV9jcHUoaSkKKwkJY2xvY2tldmVudHNfbm90aWZ5KENMT0NLX0VWVF9OT1RJRllfQlJPQURDQVNUX09OLCAmaSk7CisKKyNpZiBkZWZpbmVkKENPTkZJR19HRU5FUklDX1RJTUUpICYmIGRlZmluZWQoQ09ORklHX1g4NikKKwlzd2l0Y2ggKGJvb3RfY3B1X2RhdGEueDg2X3ZlbmRvcikgeworCWNhc2UgWDg2X1ZFTkRPUl9BTUQ6CisJY2FzZSBYODZfVkVORE9SX0lOVEVMOgorCQkvKgorCQkgKiBBTUQgRmFtMTBoIFRTQyB3aWxsIHRpY2sgaW4gYWxsCisJCSAqIEMvUC9TMC9TMSBzdGF0ZXMgd2hlbiB0aGlzIGJpdCBpcyBzZXQuCisJCSAqLworCQlpZiAoYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX05PTlNUT1BfVFNDKSkKKwkJCXJldHVybjsKKworCQkvKkZBTEwgVEhST1VHSCovCisJZGVmYXVsdDoKKwkJLyogVFNDIGNvdWxkIGhhbHQgaW4gaWRsZSwgc28gbm90aWZ5IHVzZXJzICovCisJCW1hcmtfdHNjX3Vuc3RhYmxlKCJUU0MgaGFsdHMgaW4gaWRsZSIpOworCX0KKyNlbmRpZgorfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBjcHVfd2VpZ2h0W05SX0NQVVNdOworc3RhdGljIGludCB0c2tfaW5fY3B1W05SX0NQVVNdID0ge1swIC4uLiBOUl9DUFVTLTFdID0gLTF9Oworc3RhdGljIERFQ0xBUkVfQklUTUFQKHBhZF9idXN5X2NwdXNfYml0cywgTlJfQ1BVUyk7CitzdGF0aWMgdm9pZCByb3VuZF9yb2Jpbl9jcHUodW5zaWduZWQgaW50IHRza19pbmRleCkKK3sKKwlzdHJ1Y3QgY3B1bWFzayAqcGFkX2J1c3lfY3B1cyA9IHRvX2NwdW1hc2socGFkX2J1c3lfY3B1c19iaXRzKTsKKwljcHVtYXNrX3Zhcl90IHRtcDsKKwlpbnQgY3B1OworCXVuc2lnbmVkIGxvbmcgbWluX3dlaWdodCA9IC0xLCBwcmVmZXJyZWRfY3B1OworCisJaWYgKCFhbGxvY19jcHVtYXNrX3ZhcigmdG1wLCBHRlBfS0VSTkVMKSkKKwkJcmV0dXJuOworCisJbXV0ZXhfbG9jaygmaXNvbGF0ZWRfY3B1c19sb2NrKTsKKwljcHVtYXNrX2NsZWFyKHRtcCk7CisJZm9yX2VhY2hfY3B1KGNwdSwgcGFkX2J1c3lfY3B1cykKKwkJY3B1bWFza19vcih0bXAsIHRtcCwgdG9wb2xvZ3lfdGhyZWFkX2NwdW1hc2soY3B1KSk7CisJY3B1bWFza19hbmRub3QodG1wLCBjcHVfb25saW5lX21hc2ssIHRtcCk7CisJLyogYXZvaWQgSFQgc2liaWxpbmdzIGlmIHBvc3NpYmxlICovCisJaWYgKGNwdW1hc2tfZW1wdHkodG1wKSkKKwkJY3B1bWFza19hbmRub3QodG1wLCBjcHVfb25saW5lX21hc2ssIHBhZF9idXN5X2NwdXMpOworCWlmIChjcHVtYXNrX2VtcHR5KHRtcCkpIHsKKwkJbXV0ZXhfdW5sb2NrKCZpc29sYXRlZF9jcHVzX2xvY2spOworCQlyZXR1cm47CisJfQorCWZvcl9lYWNoX2NwdShjcHUsIHRtcCkgeworCQlpZiAoY3B1X3dlaWdodFtjcHVdIDwgbWluX3dlaWdodCkgeworCQkJbWluX3dlaWdodCA9IGNwdV93ZWlnaHRbY3B1XTsKKwkJCXByZWZlcnJlZF9jcHUgPSBjcHU7CisJCX0KKwl9CisKKwlpZiAodHNrX2luX2NwdVt0c2tfaW5kZXhdICE9IC0xKQorCQljcHVtYXNrX2NsZWFyX2NwdSh0c2tfaW5fY3B1W3Rza19pbmRleF0sIHBhZF9idXN5X2NwdXMpOworCXRza19pbl9jcHVbdHNrX2luZGV4XSA9IHByZWZlcnJlZF9jcHU7CisJY3B1bWFza19zZXRfY3B1KHByZWZlcnJlZF9jcHUsIHBhZF9idXN5X2NwdXMpOworCWNwdV93ZWlnaHRbcHJlZmVycmVkX2NwdV0rKzsKKwltdXRleF91bmxvY2soJmlzb2xhdGVkX2NwdXNfbG9jayk7CisKKwlzZXRfY3B1c19hbGxvd2VkX3B0cihjdXJyZW50LCBjcHVtYXNrX29mKHByZWZlcnJlZF9jcHUpKTsKK30KKworc3RhdGljIHZvaWQgZXhpdF9yb3VuZF9yb2Jpbih1bnNpZ25lZCBpbnQgdHNrX2luZGV4KQoreworCXN0cnVjdCBjcHVtYXNrICpwYWRfYnVzeV9jcHVzID0gdG9fY3B1bWFzayhwYWRfYnVzeV9jcHVzX2JpdHMpOworCWNwdW1hc2tfY2xlYXJfY3B1KHRza19pbl9jcHVbdHNrX2luZGV4XSwgcGFkX2J1c3lfY3B1cyk7CisJdHNrX2luX2NwdVt0c2tfaW5kZXhdID0gLTE7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgaWRsZV9wY3QgPSA1OyAvKiBwZXJjZW50YWdlICovCitzdGF0aWMgdW5zaWduZWQgaW50IHJvdW5kX3JvYmluX3RpbWUgPSAxMDsgLyogc2Vjb25kICovCitzdGF0aWMgaW50IHBvd2VyX3NhdmluZ190aHJlYWQodm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3Qgc2NoZWRfcGFyYW0gcGFyYW0gPSB7LnNjaGVkX3ByaW9yaXR5ID0gMX07CisJaW50IGRvX3NsZWVwOworCXVuc2lnbmVkIGludCB0c2tfaW5kZXggPSAodW5zaWduZWQgbG9uZylkYXRhOworCXU2NCBsYXN0X2ppZmZpZXMgPSAwOworCisJc2NoZWRfc2V0c2NoZWR1bGVyKGN1cnJlbnQsIFNDSEVEX1JSLCAmcGFyYW0pOworCisJd2hpbGUgKCFrdGhyZWFkX3Nob3VsZF9zdG9wKCkpIHsKKwkJaW50IGNwdTsKKwkJdTY0IGV4cGlyZV90aW1lOworCisJCXRyeV90b19mcmVlemUoKTsKKworCQkvKiByb3VuZCByb2JpbiB0byBjcHVzICovCisJCWlmIChsYXN0X2ppZmZpZXMgKyByb3VuZF9yb2Jpbl90aW1lICogSFogPCBqaWZmaWVzKSB7CisJCQlsYXN0X2ppZmZpZXMgPSBqaWZmaWVzOworCQkJcm91bmRfcm9iaW5fY3B1KHRza19pbmRleCk7CisJCX0KKworCQlkb19zbGVlcCA9IDA7CisKKwkJY3VycmVudF90aHJlYWRfaW5mbygpLT5zdGF0dXMgJj0gflRTX1BPTExJTkc7CisJCS8qCisJCSAqIFRTX1BPTExJTkctY2xlYXJlZCBzdGF0ZSBtdXN0IGJlIHZpc2libGUgYmVmb3JlIHdlIHRlc3QKKwkJICogTkVFRF9SRVNDSEVEOgorCQkgKi8KKwkJc21wX21iKCk7CisKKwkJZXhwaXJlX3RpbWUgPSBqaWZmaWVzICsgSFogKiAoMTAwIC0gaWRsZV9wY3QpIC8gMTAwOworCisJCXdoaWxlICghbmVlZF9yZXNjaGVkKCkpIHsKKwkJCWxvY2FsX2lycV9kaXNhYmxlKCk7CisJCQljcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisJCQljbG9ja2V2ZW50c19ub3RpZnkoQ0xPQ0tfRVZUX05PVElGWV9CUk9BRENBU1RfRU5URVIsCisJCQkJJmNwdSk7CisJCQlzdG9wX2NyaXRpY2FsX3RpbWluZ3MoKTsKKworCQkJX19tb25pdG9yKCh2b2lkICopJmN1cnJlbnRfdGhyZWFkX2luZm8oKS0+ZmxhZ3MsIDAsIDApOworCQkJc21wX21iKCk7CisJCQlpZiAoIW5lZWRfcmVzY2hlZCgpKQorCQkJCV9fbXdhaXQocG93ZXJfc2F2aW5nX213YWl0X2VheCwgMSk7CisKKwkJCXN0YXJ0X2NyaXRpY2FsX3RpbWluZ3MoKTsKKwkJCWNsb2NrZXZlbnRzX25vdGlmeShDTE9DS19FVlRfTk9USUZZX0JST0FEQ0FTVF9FWElULAorCQkJCSZjcHUpOworCQkJbG9jYWxfaXJxX2VuYWJsZSgpOworCisJCQlpZiAoamlmZmllcyA+IGV4cGlyZV90aW1lKSB7CisJCQkJZG9fc2xlZXAgPSAxOworCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJY3VycmVudF90aHJlYWRfaW5mbygpLT5zdGF0dXMgfD0gVFNfUE9MTElORzsKKworCQkvKgorCQkgKiBjdXJyZW50IHNjaGVkX3J0IGhhcyB0aHJlc2hvbGQgZm9yIHJ0IHRhc2sgcnVubmluZyB0aW1lLgorCQkgKiBXaGVuIGEgcnQgdGFzayB1c2VzIDk1JSBDUFUgdGltZSwgdGhlIHJ0IHRocmVhZCB3aWxsIGJlCisJCSAqIHNjaGVkdWxlZCBvdXQgZm9yIDUlIENQVSB0aW1lIHRvIG5vdCBzdGFydmUgb3RoZXIgdGFza3MuIEJ1dAorCQkgKiB0aGUgbWVjaGFuaXNtIG9ubHkgd29ya3Mgd2hlbiBhbGwgQ1BVcyBoYXZlIFJUIHRhc2sgcnVubmluZywKKwkJICogYXMgaWYgb25lIENQVSBoYXNuJ3QgUlQgdGFzaywgUlQgdGFzayBmcm9tIG90aGVyIENQVXMgd2lsbAorCQkgKiBib3Jyb3cgQ1BVIHRpbWUgZnJvbSB0aGlzIENQVSBhbmQgY2F1c2UgUlQgdGFzayB1c2UgPiA5NSUKKwkJICogQ1BVIHRpbWUuIFRvIG1ha2UgJ2F2b2lkIHN0YXJhdGlvbicgd29yaywgdGFrZXMgYSBuYXAgaGVyZS4KKwkJICovCisJCWlmIChkb19zbGVlcCkKKwkJCXNjaGVkdWxlX3RpbWVvdXRfa2lsbGFibGUoSFogKiBpZGxlX3BjdCAvIDEwMCk7CisJfQorCisJZXhpdF9yb3VuZF9yb2Jpbih0c2tfaW5kZXgpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHRhc2tfc3RydWN0ICpwc190c2tzW05SX0NQVVNdOworc3RhdGljIHVuc2lnbmVkIGludCBwc190c2tfbnVtOworc3RhdGljIGludCBjcmVhdGVfcG93ZXJfc2F2aW5nX3Rhc2sodm9pZCkKK3sKKwlwc190c2tzW3BzX3Rza19udW1dID0ga3RocmVhZF9ydW4ocG93ZXJfc2F2aW5nX3RocmVhZCwKKwkJKHZvaWQgKikodW5zaWduZWQgbG9uZylwc190c2tfbnVtLAorCQkicG93ZXJfc2F2aW5nLyVkIiwgcHNfdHNrX251bSk7CisJaWYgKHBzX3Rza3NbcHNfdHNrX251bV0pIHsKKwkJcHNfdHNrX251bSsrOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyB2b2lkIGRlc3Ryb3lfcG93ZXJfc2F2aW5nX3Rhc2sodm9pZCkKK3sKKwlpZiAocHNfdHNrX251bSA+IDApIHsKKwkJcHNfdHNrX251bS0tOworCQlrdGhyZWFkX3N0b3AocHNfdHNrc1twc190c2tfbnVtXSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBzZXRfcG93ZXJfc2F2aW5nX3Rhc2tfbnVtKHVuc2lnbmVkIGludCBudW0pCit7CisJaWYgKG51bSA+IHBzX3Rza19udW0pIHsKKwkJd2hpbGUgKHBzX3Rza19udW0gPCBudW0pIHsKKwkJCWlmIChjcmVhdGVfcG93ZXJfc2F2aW5nX3Rhc2soKSkKKwkJCQlyZXR1cm47CisJCX0KKwl9IGVsc2UgaWYgKG51bSA8IHBzX3Rza19udW0pIHsKKwkJd2hpbGUgKHBzX3Rza19udW0gPiBudW0pCisJCQlkZXN0cm95X3Bvd2VyX3NhdmluZ190YXNrKCk7CisJfQorfQorCitzdGF0aWMgaW50IGFjcGlfcGFkX2lkbGVfY3B1cyh1bnNpZ25lZCBpbnQgbnVtX2NwdXMpCit7CisJZ2V0X29ubGluZV9jcHVzKCk7CisKKwludW1fY3B1cyA9IG1pbl90KHVuc2lnbmVkIGludCwgbnVtX2NwdXMsIG51bV9vbmxpbmVfY3B1cygpKTsKKwlzZXRfcG93ZXJfc2F2aW5nX3Rhc2tfbnVtKG51bV9jcHVzKTsKKworCXB1dF9vbmxpbmVfY3B1cygpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdWludDMyX3QgYWNwaV9wYWRfaWRsZV9jcHVzX251bSh2b2lkKQoreworCXJldHVybiBwc190c2tfbnVtOworfQorCitzdGF0aWMgc3NpemVfdCBhY3BpX3BhZF9ycnRpbWVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LAorCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwl1bnNpZ25lZCBsb25nIG51bTsKKwlpZiAoc3RyaWN0X3N0cnRvdWwoYnVmLCAwLCAmbnVtKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKG51bSA8IDEgfHwgbnVtID49IDEwMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJbXV0ZXhfbG9jaygmaXNvbGF0ZWRfY3B1c19sb2NrKTsKKwlyb3VuZF9yb2Jpbl90aW1lID0gbnVtOworCW11dGV4X3VubG9jaygmaXNvbGF0ZWRfY3B1c19sb2NrKTsKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGFjcGlfcGFkX3JydGltZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXJldHVybiBzY25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlZCIsIHJvdW5kX3JvYmluX3RpbWUpOworfQorc3RhdGljIERFVklDRV9BVFRSKHJydGltZSwgU19JUlVHT3xTX0lXVVNSLAorCWFjcGlfcGFkX3JydGltZV9zaG93LAorCWFjcGlfcGFkX3JydGltZV9zdG9yZSk7CisKK3N0YXRpYyBzc2l6ZV90IGFjcGlfcGFkX2lkbGVwY3Rfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LAorCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwl1bnNpZ25lZCBsb25nIG51bTsKKwlpZiAoc3RyaWN0X3N0cnRvdWwoYnVmLCAwLCAmbnVtKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKG51bSA8IDEgfHwgbnVtID49IDEwMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJbXV0ZXhfbG9jaygmaXNvbGF0ZWRfY3B1c19sb2NrKTsKKwlpZGxlX3BjdCA9IG51bTsKKwltdXRleF91bmxvY2soJmlzb2xhdGVkX2NwdXNfbG9jayk7CisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgc3NpemVfdCBhY3BpX3BhZF9pZGxlcGN0X3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJcmV0dXJuIHNjbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVkIiwgaWRsZV9wY3QpOworfQorc3RhdGljIERFVklDRV9BVFRSKGlkbGVwY3QsIFNfSVJVR098U19JV1VTUiwKKwlhY3BpX3BhZF9pZGxlcGN0X3Nob3csCisJYWNwaV9wYWRfaWRsZXBjdF9zdG9yZSk7CisKK3N0YXRpYyBzc2l6ZV90IGFjcGlfcGFkX2lkbGVjcHVzX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJdW5zaWduZWQgbG9uZyBudW07CisJaWYgKHN0cmljdF9zdHJ0b3VsKGJ1ZiwgMCwgJm51bSkpCisJCXJldHVybiAtRUlOVkFMOworCW11dGV4X2xvY2soJmlzb2xhdGVkX2NwdXNfbG9jayk7CisJYWNwaV9wYWRfaWRsZV9jcHVzKG51bSk7CisJbXV0ZXhfdW5sb2NrKCZpc29sYXRlZF9jcHVzX2xvY2spOworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIHNzaXplX3QgYWNwaV9wYWRfaWRsZWNwdXNfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlyZXR1cm4gY3B1bWFza19zY25wcmludGYoYnVmLCBQQUdFX1NJWkUsCisJCXRvX2NwdW1hc2socGFkX2J1c3lfY3B1c19iaXRzKSk7Cit9CitzdGF0aWMgREVWSUNFX0FUVFIoaWRsZWNwdXMsIFNfSVJVR098U19JV1VTUiwKKwlhY3BpX3BhZF9pZGxlY3B1c19zaG93LAorCWFjcGlfcGFkX2lkbGVjcHVzX3N0b3JlKTsKKworc3RhdGljIGludCBhY3BpX3BhZF9hZGRfc3lzZnMoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UpCit7CisJaW50IHJlc3VsdDsKKworCXJlc3VsdCA9IGRldmljZV9jcmVhdGVfZmlsZSgmZGV2aWNlLT5kZXYsICZkZXZfYXR0cl9pZGxlY3B1cyk7CisJaWYgKHJlc3VsdCkKKwkJcmV0dXJuIC1FTk9ERVY7CisJcmVzdWx0ID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZkZXZpY2UtPmRldiwgJmRldl9hdHRyX2lkbGVwY3QpOworCWlmIChyZXN1bHQpIHsKKwkJZGV2aWNlX3JlbW92ZV9maWxlKCZkZXZpY2UtPmRldiwgJmRldl9hdHRyX2lkbGVjcHVzKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCXJlc3VsdCA9IGRldmljZV9jcmVhdGVfZmlsZSgmZGV2aWNlLT5kZXYsICZkZXZfYXR0cl9ycnRpbWUpOworCWlmIChyZXN1bHQpIHsKKwkJZGV2aWNlX3JlbW92ZV9maWxlKCZkZXZpY2UtPmRldiwgJmRldl9hdHRyX2lkbGVjcHVzKTsKKwkJZGV2aWNlX3JlbW92ZV9maWxlKCZkZXZpY2UtPmRldiwgJmRldl9hdHRyX2lkbGVwY3QpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGFjcGlfcGFkX3JlbW92ZV9zeXNmcyhzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSkKK3sKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmRldmljZS0+ZGV2LCAmZGV2X2F0dHJfaWRsZWNwdXMpOworCWRldmljZV9yZW1vdmVfZmlsZSgmZGV2aWNlLT5kZXYsICZkZXZfYXR0cl9pZGxlcGN0KTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmRldmljZS0+ZGV2LCAmZGV2X2F0dHJfcnJ0aW1lKTsKK30KKworLyogUXVlcnkgZmlybXdhcmUgaG93IG1hbnkgQ1BVcyBzaG91bGQgYmUgaWRsZSAqLworc3RhdGljIGludCBhY3BpX3BhZF9wdXIoYWNwaV9oYW5kbGUgaGFuZGxlLCBpbnQgKm51bV9jcHVzKQoreworCXN0cnVjdCBhY3BpX2J1ZmZlciBidWZmZXIgPSB7QUNQSV9BTExPQ0FURV9CVUZGRVIsIE5VTEx9OworCWFjcGlfc3RhdHVzIHN0YXR1czsKKwl1bmlvbiBhY3BpX29iamVjdCAqcGFja2FnZTsKKwlpbnQgcmV2LCBudW0sIHJldCA9IC1FSU5WQUw7CisKKwlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX29iamVjdChoYW5kbGUsICJfUFVSIiwgTlVMTCwgJmJ1ZmZlcik7CisJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlwYWNrYWdlID0gYnVmZmVyLnBvaW50ZXI7CisJaWYgKHBhY2thZ2UtPnR5cGUgIT0gQUNQSV9UWVBFX1BBQ0tBR0UgfHwgcGFja2FnZS0+cGFja2FnZS5jb3VudCAhPSAyKQorCQlnb3RvIG91dDsKKwlyZXYgPSBwYWNrYWdlLT5wYWNrYWdlLmVsZW1lbnRzWzBdLmludGVnZXIudmFsdWU7CisJbnVtID0gcGFja2FnZS0+cGFja2FnZS5lbGVtZW50c1sxXS5pbnRlZ2VyLnZhbHVlOworCWlmIChyZXYgIT0gMSkKKwkJZ290byBvdXQ7CisJKm51bV9jcHVzID0gbnVtOworCXJldCA9IDA7CitvdXQ6CisJa2ZyZWUoYnVmZmVyLnBvaW50ZXIpOworCXJldHVybiByZXQ7Cit9CisKKy8qIE5vdGlmeSBmaXJtd2FyZSBob3cgbWFueSBDUFVzIGFyZSBpZGxlICovCitzdGF0aWMgdm9pZCBhY3BpX3BhZF9vc3QoYWNwaV9oYW5kbGUgaGFuZGxlLCBpbnQgc3RhdCwKKwl1aW50MzJfdCBpZGxlX2NwdXMpCit7CisJdW5pb24gYWNwaV9vYmplY3QgcGFyYW1zWzNdID0geworCQl7LnR5cGUgPSBBQ1BJX1RZUEVfSU5URUdFUix9LAorCQl7LnR5cGUgPSBBQ1BJX1RZUEVfSU5URUdFUix9LAorCQl7LnR5cGUgPSBBQ1BJX1RZUEVfQlVGRkVSLH0sCisJfTsKKwlzdHJ1Y3QgYWNwaV9vYmplY3RfbGlzdCBhcmdfbGlzdCA9IHszLCBwYXJhbXN9OworCisJcGFyYW1zWzBdLmludGVnZXIudmFsdWUgPSBBQ1BJX1BST0NFU1NPUl9BR0dSRUdBVE9SX05PVElGWTsKKwlwYXJhbXNbMV0uaW50ZWdlci52YWx1ZSA9ICBzdGF0OworCXBhcmFtc1syXS5idWZmZXIubGVuZ3RoID0gNDsKKwlwYXJhbXNbMl0uYnVmZmVyLnBvaW50ZXIgPSAodm9pZCAqKSZpZGxlX2NwdXM7CisJYWNwaV9ldmFsdWF0ZV9vYmplY3QoaGFuZGxlLCAiX09TVCIsICZhcmdfbGlzdCwgTlVMTCk7Cit9CisKK3N0YXRpYyB2b2lkIGFjcGlfcGFkX2hhbmRsZV9ub3RpZnkoYWNwaV9oYW5kbGUgaGFuZGxlKQoreworCWludCBudW1fY3B1cywgcmV0OworCXVpbnQzMl90IGlkbGVfY3B1czsKKworCW11dGV4X2xvY2soJmlzb2xhdGVkX2NwdXNfbG9jayk7CisJaWYgKGFjcGlfcGFkX3B1cihoYW5kbGUsICZudW1fY3B1cykpIHsKKwkJbXV0ZXhfdW5sb2NrKCZpc29sYXRlZF9jcHVzX2xvY2spOworCQlyZXR1cm47CisJfQorCXJldCA9IGFjcGlfcGFkX2lkbGVfY3B1cyhudW1fY3B1cyk7CisJaWRsZV9jcHVzID0gYWNwaV9wYWRfaWRsZV9jcHVzX251bSgpOworCWlmICghcmV0KQorCQlhY3BpX3BhZF9vc3QoaGFuZGxlLCAwLCBpZGxlX2NwdXMpOworCWVsc2UKKwkJYWNwaV9wYWRfb3N0KGhhbmRsZSwgMSwgMCk7CisJbXV0ZXhfdW5sb2NrKCZpc29sYXRlZF9jcHVzX2xvY2spOworfQorCitzdGF0aWMgdm9pZCBhY3BpX3BhZF9ub3RpZnkoYWNwaV9oYW5kbGUgaGFuZGxlLCB1MzIgZXZlbnQsCisJdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSA9IGRhdGE7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBBQ1BJX1BST0NFU1NPUl9BR0dSRUdBVE9SX05PVElGWToKKwkJYWNwaV9wYWRfaGFuZGxlX25vdGlmeShoYW5kbGUpOworCQlhY3BpX2J1c19nZW5lcmF0ZV9wcm9jX2V2ZW50KGRldmljZSwgZXZlbnQsIDApOworCQlhY3BpX2J1c19nZW5lcmF0ZV9uZXRsaW5rX2V2ZW50KGRldmljZS0+cG5wLmRldmljZV9jbGFzcywKKwkJCWRldl9uYW1lKCZkZXZpY2UtPmRldiksIGV2ZW50LCAwKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fV0FSTklORyJVbnN1cHBvcnRlZCBldmVudCBbMHgleF1cbiIsIGV2ZW50KTsKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgaW50IGFjcGlfcGFkX2FkZChzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSkKK3sKKwlhY3BpX3N0YXR1cyBzdGF0dXM7CisKKwlzdHJjcHkoYWNwaV9kZXZpY2VfbmFtZShkZXZpY2UpLCBBQ1BJX1BST0NFU1NPUl9BR0dSRUdBVE9SX0RFVklDRV9OQU1FKTsKKwlzdHJjcHkoYWNwaV9kZXZpY2VfY2xhc3MoZGV2aWNlKSwgQUNQSV9QUk9DRVNTT1JfQUdHUkVHQVRPUl9DTEFTUyk7CisKKwlpZiAoYWNwaV9wYWRfYWRkX3N5c2ZzKGRldmljZSkpCisJCXJldHVybiAtRU5PREVWOworCisJc3RhdHVzID0gYWNwaV9pbnN0YWxsX25vdGlmeV9oYW5kbGVyKGRldmljZS0+aGFuZGxlLAorCQlBQ1BJX0RFVklDRV9OT1RJRlksIGFjcGlfcGFkX25vdGlmeSwgZGV2aWNlKTsKKwlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKKwkJYWNwaV9wYWRfcmVtb3ZlX3N5c2ZzKGRldmljZSk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFjcGlfcGFkX3JlbW92ZShzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSwKKwlpbnQgdHlwZSkKK3sKKwltdXRleF9sb2NrKCZpc29sYXRlZF9jcHVzX2xvY2spOworCWFjcGlfcGFkX2lkbGVfY3B1cygwKTsKKwltdXRleF91bmxvY2soJmlzb2xhdGVkX2NwdXNfbG9jayk7CisKKwlhY3BpX3JlbW92ZV9ub3RpZnlfaGFuZGxlcihkZXZpY2UtPmhhbmRsZSwKKwkJQUNQSV9ERVZJQ0VfTk9USUZZLCBhY3BpX3BhZF9ub3RpZnkpOworCWFjcGlfcGFkX3JlbW92ZV9zeXNmcyhkZXZpY2UpOworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGFjcGlfZGV2aWNlX2lkIHBhZF9kZXZpY2VfaWRzW10gPSB7CisJeyJBQ1BJMDAwQyIsIDB9LAorCXsiIiwgMH0sCit9OworTU9EVUxFX0RFVklDRV9UQUJMRShhY3BpLCBwYWRfZGV2aWNlX2lkcyk7CisKK3N0YXRpYyBzdHJ1Y3QgYWNwaV9kcml2ZXIgYWNwaV9wYWRfZHJpdmVyID0geworCS5uYW1lID0gInByb2Nlc3Nvcl9hZ2dyZWdhdG9yIiwKKwkuY2xhc3MgPSBBQ1BJX1BST0NFU1NPUl9BR0dSRUdBVE9SX0NMQVNTLAorCS5pZHMgPSBwYWRfZGV2aWNlX2lkcywKKwkub3BzID0geworCQkuYWRkID0gYWNwaV9wYWRfYWRkLAorCQkucmVtb3ZlID0gYWNwaV9wYWRfcmVtb3ZlLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBhY3BpX3BhZF9pbml0KHZvaWQpCit7CisJcG93ZXJfc2F2aW5nX213YWl0X2luaXQoKTsKKwlpZiAocG93ZXJfc2F2aW5nX213YWl0X2VheCA9PSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiBhY3BpX2J1c19yZWdpc3Rlcl9kcml2ZXIoJmFjcGlfcGFkX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBhY3BpX3BhZF9leGl0KHZvaWQpCit7CisJYWNwaV9idXNfdW5yZWdpc3Rlcl9kcml2ZXIoJmFjcGlfcGFkX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KGFjcGlfcGFkX2luaXQpOworbW9kdWxlX2V4aXQoYWNwaV9wYWRfZXhpdCk7CitNT0RVTEVfQVVUSE9SKCJTaGFvaHVhIExpPHNoYW9odWEubGlAaW50ZWwuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJBQ1BJIFByb2Nlc3NvciBBZ2dyZWdhdG9yIERyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2J1cy5jIGIvZHJpdmVycy9hY3BpL2J1cy5jCmluZGV4IDEzNWZiZmUuLjc0MTE5MTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9idXMuYworKysgYi9kcml2ZXJzL2FjcGkvYnVzLmMKQEAgLTk0LDM2ICs5NCwzMyBAQAogCiBFWFBPUlRfU1lNQk9MKGFjcGlfYnVzX2dldF9kZXZpY2UpOwogCithY3BpX3N0YXR1cyBhY3BpX2J1c19nZXRfc3RhdHVzX2hhbmRsZShhY3BpX2hhbmRsZSBoYW5kbGUsCisJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyAqc3RhKQoreworCWFjcGlfc3RhdHVzIHN0YXR1czsKKworCXN0YXR1cyA9IGFjcGlfZXZhbHVhdGVfaW50ZWdlcihoYW5kbGUsICJfU1RBIiwgTlVMTCwgc3RhKTsKKwlpZiAoQUNQSV9TVUNDRVNTKHN0YXR1cykpCisJCXJldHVybiBBRV9PSzsKKworCWlmIChzdGF0dXMgPT0gQUVfTk9UX0ZPVU5EKSB7CisJCSpzdGEgPSBBQ1BJX1NUQV9ERVZJQ0VfUFJFU0VOVCB8IEFDUElfU1RBX0RFVklDRV9FTkFCTEVEIHwKKwkJICAgICAgIEFDUElfU1RBX0RFVklDRV9VSSAgICAgIHwgQUNQSV9TVEFfREVWSUNFX0ZVTkNUSU9OSU5HOworCQlyZXR1cm4gQUVfT0s7CisJfQorCXJldHVybiBzdGF0dXM7Cit9CisKIGludCBhY3BpX2J1c19nZXRfc3RhdHVzKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKQogewotCWFjcGlfc3RhdHVzIHN0YXR1cyA9IEFFX09LOwotCXVuc2lnbmVkIGxvbmcgbG9uZyBzdGEgPSAwOworCWFjcGlfc3RhdHVzIHN0YXR1czsKKwl1bnNpZ25lZCBsb25nIGxvbmcgc3RhOwogCisJc3RhdHVzID0gYWNwaV9idXNfZ2V0X3N0YXR1c19oYW5kbGUoZGV2aWNlLT5oYW5kbGUsICZzdGEpOworCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkKKwkJcmV0dXJuIC1FTk9ERVY7CiAKLQlpZiAoIWRldmljZSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkvKgotCSAqIEV2YWx1YXRlIF9TVEEgaWYgcHJlc2VudC4KLQkgKi8KLQlpZiAoZGV2aWNlLT5mbGFncy5keW5hbWljX3N0YXR1cykgewotCQlzdGF0dXMgPQotCQkgICAgYWNwaV9ldmFsdWF0ZV9pbnRlZ2VyKGRldmljZS0+aGFuZGxlLCAiX1NUQSIsIE5VTEwsICZzdGEpOwotCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCi0JCQlyZXR1cm4gLUVOT0RFVjsKLQkJU1RSVUNUX1RPX0lOVChkZXZpY2UtPnN0YXR1cykgPSAoaW50KXN0YTsKLQl9Ci0KLQkvKgotCSAqIEFjY29yZGluZyB0byBBQ1BJIHNwZWMgc29tZSBkZXZpY2UgY2FuIGJlIHByZXNlbnQgYW5kIGZ1bmN0aW9uYWwKLQkgKiBldmVuIGlmIHRoZSBwYXJlbnQgaXMgbm90IHByZXNlbnQgYnV0IGZ1bmN0aW9uYWwuCi0JICogSW4gc3VjaCBjb25kaXRpb25zIHRoZSBjaGlsZCBkZXZpY2Ugc2hvdWxkIG5vdCBpbmhlcml0IHRoZSBzdGF0dXMKLQkgKiBmcm9tIHRoZSBwYXJlbnQuCi0JICovCi0JZWxzZQotCQlTVFJVQ1RfVE9fSU5UKGRldmljZS0+c3RhdHVzKSA9Ci0JCSAgICBBQ1BJX1NUQV9ERVZJQ0VfUFJFU0VOVCB8IEFDUElfU1RBX0RFVklDRV9FTkFCTEVEIHwKLQkJICAgIEFDUElfU1RBX0RFVklDRV9VSSAgICAgIHwgQUNQSV9TVEFfREVWSUNFX0ZVTkNUSU9OSU5HOworCVNUUlVDVF9UT19JTlQoZGV2aWNlLT5zdGF0dXMpID0gKGludCkgc3RhOwogCiAJaWYgKGRldmljZS0+c3RhdHVzLmZ1bmN0aW9uYWwgJiYgIWRldmljZS0+c3RhdHVzLnByZXNlbnQpIHsKIAkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9JTkZPLCAiRGV2aWNlIFslc10gc3RhdHVzIFslMDh4XTogIgpAQCAtMTM1LDEwICsxMzIsOCBAQAogCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfSU5GTywgIkRldmljZSBbJXNdIHN0YXR1cyBbJTA4eF1cbiIsCiAJCQkgIGRldmljZS0+cG5wLmJ1c19pZCwKIAkJCSAgKHUzMikgU1RSVUNUX1RPX0lOVChkZXZpY2UtPnN0YXR1cykpKTsKLQogCXJldHVybiAwOwogfQotCiBFWFBPUlRfU1lNQk9MKGFjcGlfYnVzX2dldF9zdGF0dXMpOwogCiB2b2lkIGFjcGlfYnVzX3ByaXZhdGVfZGF0YV9oYW5kbGVyKGFjcGlfaGFuZGxlIGhhbmRsZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9idXR0b24uYyBiL2RyaXZlcnMvYWNwaS9idXR0b24uYwppbmRleCA5MzM1Yjg3Li4wYzljNmE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYnV0dG9uLmMKKysrIGIvZHJpdmVycy9hY3BpL2J1dHRvbi5jCkBAIC0yNTEsNiArMjUxLDkgQEAKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAJdW5zaWduZWQgbG9uZyBsb25nIHN0YXRlOwogCisJaWYgKCFsaWRfZGV2aWNlKQorCQlyZXR1cm4gLUVOT0RFVjsKKwogCXN0YXR1cyA9IGFjcGlfZXZhbHVhdGVfaW50ZWdlcihsaWRfZGV2aWNlLT5oYW5kbGUsICJfTElEIiwgTlVMTCwKIAkJCQkgICAgICAgJnN0YXRlKTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvZG9jay5jIGIvZHJpdmVycy9hY3BpL2RvY2suYwppbmRleCAzYTJjZmVmLi43MzM4YjZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvZG9jay5jCisrKyBiL2RyaXZlcnMvYWNwaS9kb2NrLmMKQEAgLTY3LDcgKzY3LDcgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkIGRlcGVuZGVudF9kZXZpY2VzOwogCXN0cnVjdCBsaXN0X2hlYWQgaG90cGx1Z19kZXZpY2VzOwogCi0Jc3RydWN0IGxpc3RfaGVhZCBzaWJpbGluZzsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHNpYmxpbmc7CiAJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZG9ja19kZXZpY2U7CiB9Owogc3RhdGljIExJU1RfSEVBRChkb2NrX3N0YXRpb25zKTsKQEAgLTI3NSw3ICsyNzUsNyBAQAogCiAJaWYgKGlzX2RvY2soaGFuZGxlKSkKIAkJcmV0dXJuIDE7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShkb2NrX3N0YXRpb24sICZkb2NrX3N0YXRpb25zLCBzaWJpbGluZykgeworCWxpc3RfZm9yX2VhY2hfZW50cnkoZG9ja19zdGF0aW9uLCAmZG9ja19zdGF0aW9ucywgc2libGluZykgewogCQlpZiAoZmluZF9kb2NrX2RlcGVuZGVudF9kZXZpY2UoZG9ja19zdGF0aW9uLCBoYW5kbGUpKQogCQkJcmV0dXJuIDE7CiAJfQpAQCAtNjE5LDcgKzYxOSw3IEBACiAJICogbWFrZSBzdXJlIHRoaXMgaGFuZGxlIGlzIGZvciBhIGRldmljZSBkZXBlbmRlbnQgb24gdGhlIGRvY2ssCiAJICogdGhpcyB3b3VsZCBpbmNsdWRlIHRoZSBkb2NrIHN0YXRpb24gaXRzZWxmCiAJICovCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShkb2NrX3N0YXRpb24sICZkb2NrX3N0YXRpb25zLCBzaWJpbGluZykgeworCWxpc3RfZm9yX2VhY2hfZW50cnkoZG9ja19zdGF0aW9uLCAmZG9ja19zdGF0aW9ucywgc2libGluZykgewogCQkvKgogCQkgKiBBbiBBVEEgYmF5IGNhbiBiZSBpbiBhIGRvY2sgYW5kIGl0c2VsZiBjYW4gYmUgZWplY3RlZAogCQkgKiBzZXBlcmF0ZWx5LCBzbyB0aGVyZSBhcmUgdHdvICdkb2NrIHN0YXRpb25zJyB3aGljaCBuZWVkIHRoZQpAQCAtNjUxLDcgKzY1MSw3IEBACiAJaWYgKCFkb2NrX3N0YXRpb25fY291bnQpCiAJCXJldHVybjsKIAotCWxpc3RfZm9yX2VhY2hfZW50cnkoZG9ja19zdGF0aW9uLCAmZG9ja19zdGF0aW9ucywgc2liaWxpbmcpIHsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRvY2tfc3RhdGlvbiwgJmRvY2tfc3RhdGlvbnMsIHNpYmxpbmcpIHsKIAkJZGQgPSBmaW5kX2RvY2tfZGVwZW5kZW50X2RldmljZShkb2NrX3N0YXRpb24sIGhhbmRsZSk7CiAJCWlmIChkZCkKIAkJCWRvY2tfZGVsX2hvdHBsdWdfZGV2aWNlKGRvY2tfc3RhdGlvbiwgZGQpOwpAQCAtNzg3LDcgKzc4Nyw3IEBACiAJaWYgKGV2ZW50ICE9IEFDUElfTk9USUZZX0JVU19DSEVDSyAmJiBldmVudCAhPSBBQ1BJX05PVElGWV9ERVZJQ0VfQ0hFQ0sKIAkgICAmJiBldmVudCAhPSBBQ1BJX05PVElGWV9FSkVDVF9SRVFVRVNUKQogCQlyZXR1cm4gMDsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRvY2tfc3RhdGlvbiwgJmRvY2tfc3RhdGlvbnMsIHNpYmlsaW5nKSB7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShkb2NrX3N0YXRpb24sICZkb2NrX3N0YXRpb25zLCBzaWJsaW5nKSB7CiAJCWlmIChkb2NrX3N0YXRpb24tPmhhbmRsZSA9PSBoYW5kbGUpIHsKIAkJCXN0cnVjdCBkb2NrX2RhdGEgKmRvY2tfZGF0YTsKIApAQCAtOTU4LDcgKzk1OCw3IEBACiAJZG9ja19zdGF0aW9uLT5sYXN0X2RvY2tfdGltZSA9IGppZmZpZXMgLSBIWjsKIAlJTklUX0xJU1RfSEVBRCgmZG9ja19zdGF0aW9uLT5kZXBlbmRlbnRfZGV2aWNlcyk7CiAJSU5JVF9MSVNUX0hFQUQoJmRvY2tfc3RhdGlvbi0+aG90cGx1Z19kZXZpY2VzKTsKLQlJTklUX0xJU1RfSEVBRCgmZG9ja19zdGF0aW9uLT5zaWJpbGluZyk7CisJSU5JVF9MSVNUX0hFQUQoJmRvY2tfc3RhdGlvbi0+c2libGluZyk7CiAJc3Bpbl9sb2NrX2luaXQoJmRvY2tfc3RhdGlvbi0+ZGRfbG9jayk7CiAJbXV0ZXhfaW5pdCgmZG9ja19zdGF0aW9uLT5ocF9sb2NrKTsKIAlBVE9NSUNfSU5JVF9OT1RJRklFUl9IRUFEKCZkb2NrX25vdGlmaWVyX2xpc3QpOwpAQCAtMTA0NCw3ICsxMDQ0LDcgQEAKIAlhZGRfZG9ja19kZXBlbmRlbnRfZGV2aWNlKGRvY2tfc3RhdGlvbiwgZGQpOwogCiAJZG9ja19zdGF0aW9uX2NvdW50Kys7Ci0JbGlzdF9hZGQoJmRvY2tfc3RhdGlvbi0+c2liaWxpbmcsICZkb2NrX3N0YXRpb25zKTsKKwlsaXN0X2FkZCgmZG9ja19zdGF0aW9uLT5zaWJsaW5nLCAmZG9ja19zdGF0aW9ucyk7CiAJcmV0dXJuIDA7CiAKIGRvY2tfYWRkX2Vycl91bnJlZ2lzdGVyOgpAQCAtMTE0OSw3ICsxMTQ5LDcgQEAKIAlzdHJ1Y3QgZG9ja19zdGF0aW9uICp0bXA7CiAKIAl1bnJlZ2lzdGVyX2FjcGlfYnVzX25vdGlmaWVyKCZkb2NrX2FjcGlfbm90aWZpZXIpOwotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShkb2NrX3N0YXRpb24sIHRtcCwgJmRvY2tfc3RhdGlvbnMsIHNpYmlsaW5nKQorCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShkb2NrX3N0YXRpb24sIHRtcCwgJmRvY2tfc3RhdGlvbnMsIHNpYmxpbmcpCiAJCWRvY2tfcmVtb3ZlKGRvY2tfc3RhdGlvbik7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9lYy5jIGIvZHJpdmVycy9hY3BpL2VjLmMKaW5kZXggZjcwNzk2MC4uYmFlZjI4YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2VjLmMKKysrIGIvZHJpdmVycy9hY3BpL2VjLmMKQEAgLTExOSw2ICsxMTksOCBAQAogfSAqYm9vdF9lYywgKmZpcnN0X2VjOwogCiBzdGF0aWMgaW50IEVDX0ZMQUdTX01TSTsgLyogT3V0LW9mLXNwZWMgTVNJIGNvbnRyb2xsZXIgKi8KK3N0YXRpYyBpbnQgRUNfRkxBR1NfVkFMSURBVEVfRUNEVDsgLyogQVNVU3RlYyBFQ0RUcyBuZWVkIHRvIGJlIHZhbGlkYXRlZCAqLworc3RhdGljIGludCBFQ19GTEFHU19TS0lQX0RTRFRfU0NBTjsgLyogTm90IGFsbCBCSU9TIHN1cnZpdmUgZWFybHkgRFNEVCBzY2FuICovCiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zYWN0aW9uIE1hbmFnZW1lbnQKQEAgLTIzMiwxMCArMjM0LDggQEAKIAkJCX0KIAkJCWFkdmFuY2VfdHJhbnNhY3Rpb24oZWMsIGFjcGlfZWNfcmVhZF9zdGF0dXMoZWMpKTsKIAkJfSB3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgZGVsYXkpKTsKLQkJaWYgKCFlYy0+Y3Vyci0+aXJxX2NvdW50IHx8Ci0JCSAgICAoYWNwaV9lY19yZWFkX3N0YXR1cyhlYykgJiBBQ1BJX0VDX0ZMQUdfSUJGKSkKKwkJaWYgKGFjcGlfZWNfcmVhZF9zdGF0dXMoZWMpICYgQUNQSV9FQ19GTEFHX0lCRikKIAkJCWJyZWFrOwotCQkvKiB0cnkgcmVzdGFydCBjb21tYW5kIGlmIHdlIGdldCBhbnkgZmFsc2UgaW50ZXJydXB0cyAqLwogCQlwcl9kZWJ1ZyhQUkVGSVggImNvbnRyb2xsZXIgcmVzZXQsIHJlc3RhcnQgdHJhbnNhY3Rpb25cbiIpOwogCQlzcGluX2xvY2tfaXJxc2F2ZSgmZWMtPmN1cnJfbG9jaywgZmxhZ3MpOwogCQlzdGFydF90cmFuc2FjdGlvbihlYyk7CkBAIC04OTksNiArODk5LDQ0IEBACiAJeyIiLCAwfSwKIH07CiAKKy8qIFNvbWUgQklPUyBkbyBub3Qgc3Vydml2ZSBlYXJseSBEU0RUIHNjYW4sIHNraXAgaXQgKi8KK3N0YXRpYyBpbnQgZWNfc2tpcF9kc2R0X3NjYW4oY29uc3Qgc3RydWN0IGRtaV9zeXN0ZW1faWQgKmlkKQoreworCUVDX0ZMQUdTX1NLSVBfRFNEVF9TQ0FOID0gMTsKKwlyZXR1cm4gMDsKK30KKworLyogQVNVU3RlayBvZnRlbiBzdXBwbGllcyB1cyB3aXRoIGJyb2tlbiBFQ0RULCB2YWxpZGF0ZSBpdCAqLworc3RhdGljIGludCBlY192YWxpZGF0ZV9lY2R0KGNvbnN0IHN0cnVjdCBkbWlfc3lzdGVtX2lkICppZCkKK3sKKwlFQ19GTEFHU19WQUxJREFURV9FQ0RUID0gMTsKKwlyZXR1cm4gMDsKK30KKworLyogTVNJIEVDIG5lZWRzIHNwZWNpYWwgdHJlYXRtZW50LCBlbmFibGUgaXQgKi8KK3N0YXRpYyBpbnQgZWNfZmxhZ19tc2koY29uc3Qgc3RydWN0IGRtaV9zeXN0ZW1faWQgKmlkKQoreworCUVDX0ZMQUdTX01TSSA9IDE7CisJRUNfRkxBR1NfVkFMSURBVEVfRUNEVCA9IDE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCBfX2luaXRkYXRhIGVjX2RtaV90YWJsZVtdID0geworCXsKKwllY19za2lwX2RzZHRfc2NhbiwgIkNvbXBhbCBKRkw5MiIsIHsKKwlETUlfTUFUQ0goRE1JX0JJT1NfVkVORE9SLCAiQ09NUEFMIiksCisJRE1JX01BVENIKERNSV9CT0FSRF9OQU1FLCAiSkZMOTIiKSB9LCBOVUxMfSwKKwl7CisJZWNfZmxhZ19tc2ksICJNU0kgaGFyZHdhcmUiLCB7CisJRE1JX01BVENIKERNSV9CSU9TX1ZFTkRPUiwgIk1pY3JvLVN0YXIiKSwKKwlETUlfTUFUQ0goRE1JX0NIQVNTSVNfVkVORE9SLCAiTUlDUk8tU3RhciIpIH0sIE5VTEx9LAorCXsKKwllY192YWxpZGF0ZV9lY2R0LCAiQVNVUyBoYXJkd2FyZSIsIHsKKwlETUlfTUFUQ0goRE1JX0JJT1NfVkVORE9SLCAiQVNVUyIpIH0sIE5VTEx9LAorCXt9LAorfTsKKworCiBpbnQgX19pbml0IGFjcGlfZWNfZWNkdF9wcm9iZSh2b2lkKQogewogCWFjcGlfc3RhdHVzIHN0YXR1czsKQEAgLTkxMSwxMSArOTQ5LDcgQEAKIAkvKgogCSAqIEdlbmVyYXRlIGEgYm9vdCBlYyBjb250ZXh0CiAJICovCi0JaWYgKGRtaV9uYW1lX2luX3ZlbmRvcnMoIk1pY3JvLVN0YXIiKSB8fAotCSAgICBkbWlfbmFtZV9pbl92ZW5kb3JzKCJOb3RlYm9vayIpKSB7Ci0JCXByX2luZm8oUFJFRklYICJFbmFibGluZyBzcGVjaWFsIHRyZWF0bWVudCBmb3IgRUMgZnJvbSBNU0kuXG4iKTsKLQkJRUNfRkxBR1NfTVNJID0gMTsKLQl9CisJZG1pX2NoZWNrX3N5c3RlbShlY19kbWlfdGFibGUpOwogCXN0YXR1cyA9IGFjcGlfZ2V0X3RhYmxlKEFDUElfU0lHX0VDRFQsIDEsCiAJCQkJKHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAqKikmZWNkdF9wdHIpOwogCWlmIChBQ1BJX1NVQ0NFU1Moc3RhdHVzKSkgewpAQCAtOTI2LDcgKzk2MCw3IEBACiAJCWJvb3RfZWMtPmhhbmRsZSA9IEFDUElfUk9PVF9PQkpFQ1Q7CiAJCWFjcGlfZ2V0X2hhbmRsZShBQ1BJX1JPT1RfT0JKRUNULCBlY2R0X3B0ci0+aWQsICZib290X2VjLT5oYW5kbGUpOwogCQkvKiBEb24ndCB0cnVzdCBFQ0RULCB3aGljaCBjb21lcyBmcm9tIEFTVVNUZWsgKi8KLQkJaWYgKCFkbWlfbmFtZV9pbl92ZW5kb3JzKCJBU1VTIikgJiYgRUNfRkxBR1NfTVNJID09IDApCisJCWlmICghRUNfRkxBR1NfVkFMSURBVEVfRUNEVCkKIAkJCWdvdG8gaW5zdGFsbDsKIAkJc2F2ZWRfZWMgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgYWNwaV9lYyksIEdGUF9LRVJORUwpOwogCQlpZiAoIXNhdmVkX2VjKQpAQCAtOTM0LDYgKzk2OCwxMCBAQAogCQltZW1jcHkoc2F2ZWRfZWMsIGJvb3RfZWMsIHNpemVvZihzdHJ1Y3QgYWNwaV9lYykpOwogCS8qIGZhbGwgdGhyb3VnaCAqLwogCX0KKworCWlmIChFQ19GTEFHU19TS0lQX0RTRFRfU0NBTikKKwkJcmV0dXJuIC1FTk9ERVY7CisKIAkvKiBUaGlzIHdvcmthcm91bmQgaXMgbmVlZGVkIG9ubHkgb24gc29tZSBicm9rZW4gbWFjaGluZXMsCiAJICogd2hpY2ggcmVxdWlyZSBlYXJseSBFQywgYnV0IGZhaWwgdG8gcHJvdmlkZSBFQ0RUICovCiAJcHJpbnRrKEtFUk5fREVCVUcgUFJFRklYICJMb29rIHVwIEVDIGluIERTRFRcbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL29zbC5jIGIvZHJpdmVycy9hY3BpL29zbC5jCmluZGV4IDU2MzNiODYuLjdjMWM1OWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9vc2wuYworKysgYi9kcml2ZXJzL2FjcGkvb3NsLmMKQEAgLTExNjEsNyArMTE2MSwxMyBAQAogCQkJICAgICAgIHJlc19saXN0X2VsZW0tPm5hbWUsCiAJCQkgICAgICAgKGxvbmcgbG9uZykgcmVzX2xpc3RfZWxlbS0+c3RhcnQsCiAJCQkgICAgICAgKGxvbmcgbG9uZykgcmVzX2xpc3RfZWxlbS0+ZW5kKTsKLQkJCXByaW50ayhLRVJOX0lORk8gIkFDUEk6IERldmljZSBuZWVkcyBhbiBBQ1BJIGRyaXZlclxuIik7CisJCQlpZiAoYWNwaV9lbmZvcmNlX3Jlc291cmNlcyA9PSBFTkZPUkNFX1JFU09VUkNFU19MQVgpCisJCQkJcHJpbnRrKEtFUk5fTk9USUNFICJBQ1BJOiBUaGlzIGNvbmZsaWN0IG1heSIKKwkJCQkgICAgICAgIiBjYXVzZSByYW5kb20gcHJvYmxlbXMgYW5kIHN5c3RlbSIKKwkJCQkgICAgICAgIiBpbnN0YWJpbGl0eVxuIik7CisJCQlwcmludGsoS0VSTl9JTkZPICJBQ1BJOiBJZiBhbiBBQ1BJIGRyaXZlciBpcyBhdmFpbGFibGUiCisJCQkgICAgICAgIiBmb3IgdGhpcyBkZXZpY2UsIHlvdSBzaG91bGQgdXNlIGl0IGluc3RlYWQgb2YiCisJCQkgICAgICAgIiB0aGUgbmF0aXZlIGRyaXZlclxuIik7CiAJCX0KIAkJaWYgKGFjcGlfZW5mb3JjZV9yZXNvdXJjZXMgPT0gRU5GT1JDRV9SRVNPVVJDRVNfU1RSSUNUKQogCQkJcmV0dXJuIC1FQlVTWTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9wY2lfcm9vdC5jIGIvZHJpdmVycy9hY3BpL3BjaV9yb290LmMKaW5kZXggMzExMjIyMS4uMWFmODA4MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3BjaV9yb290LmMKKysrIGIvZHJpdmVycy9hY3BpL3BjaV9yb290LmMKQEAgLTM4OSw2ICszODksMTcgQEAKIAogCQlwYnVzID0gcGRldi0+c3Vib3JkaW5hdGU7CiAJCXBjaV9kZXZfcHV0KHBkZXYpOworCisJCS8qCisJCSAqIFRoaXMgZnVuY3Rpb24gbWF5IGJlIGNhbGxlZCBmb3IgYSBub24tUENJIGRldmljZSB0aGF0IGhhcyBhCisJCSAqIFBDSSBwYXJlbnQgKGVnLiBhIGRpc2sgdW5kZXIgYSBQQ0kgU0FUQSBjb250cm9sbGVyKS4gIEluIHRoYXQKKwkJICogY2FzZSBwZGV2LT5zdWJvcmRpbmF0ZSB3aWxsIGJlIE5VTEwgZm9yIHRoZSBwYXJlbnQuCisJCSAqLworCQlpZiAoIXBidXMpIHsKKwkJCWRldl9kYmcoJnBkZXYtPmRldiwgIk5vdCBhIFBDSS10by1QQ0kgYnJpZGdlXG4iKTsKKwkJCXBkZXYgPSBOVUxMOworCQkJYnJlYWs7CisJCX0KIAl9CiBvdXQ6CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG5vZGUsIHRtcCwgJmRldmljZV9saXN0LCBub2RlKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3Byb2MuYyBiL2RyaXZlcnMvYWNwaS9wcm9jLmMKaW5kZXggZDBkNTUwZC4uZjhiNmY1NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3Byb2MuYworKysgYi9kcml2ZXJzL2FjcGkvcHJvYy5jCkBAIC0zOTgsNiArMzk4LDggQEAKIAogCWlmIChsZW4gPiA0KQogCQlsZW4gPSA0OworCWlmIChsZW4gPCAwKQorCQlyZXR1cm4gLUVGQVVMVDsKIAogCWlmIChjb3B5X2Zyb21fdXNlcihzdHJidWYsIGJ1ZmZlciwgbGVuKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX2NvcmUuYyBiL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfY29yZS5jCmluZGV4IGMyZDRkNmUuLmM1NjdiNDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfY29yZS5jCisrKyBiL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfY29yZS5jCkBAIC04NjMsMTMgKzg2Myw2IEBACiAJCWdvdG8gZXJyX3JlbW92ZV9zeXNmczsKIAl9CiAKLQlpZiAocHItPmZsYWdzLnRocm90dGxpbmcpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyBQUkVGSVggIiVzIFslc10gKHN1cHBvcnRzIiwKLQkJICAgICAgIGFjcGlfZGV2aWNlX25hbWUoZGV2aWNlKSwgYWNwaV9kZXZpY2VfYmlkKGRldmljZSkpOwotCQlwcmludGsoIiAlZCB0aHJvdHRsaW5nIHN0YXRlcyIsIHByLT50aHJvdHRsaW5nLnN0YXRlX2NvdW50KTsKLQkJcHJpbnRrKCIpXG4iKTsKLQl9Ci0KIAlyZXR1cm4gMDsKIAogZXJyX3JlbW92ZV9zeXNmczoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfaWRsZS5jIGIvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9pZGxlLmMKaW5kZXggY2M2MWE2Mi4uYmJkMDY2ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9pZGxlLmMKKysrIGIvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9pZGxlLmMKQEAgLTExNjYsNyArMTE2Niw2IEBACiAjaWZkZWYgQ09ORklHX0FDUElfUFJPQ0ZTCiAJc3RydWN0IHByb2NfZGlyX2VudHJ5ICplbnRyeSA9IE5VTEw7CiAjZW5kaWYKLQl1bnNpZ25lZCBpbnQgaTsKIAogCWlmIChib290X29wdGlvbl9pZGxlX292ZXJyaWRlKQogCQlyZXR1cm4gMDsKQEAgLTEyMTQsMTMgKzEyMTMsNiBAQAogCQlhY3BpX3Byb2Nlc3Nvcl9zZXR1cF9jcHVpZGxlKHByKTsKIAkJaWYgKGNwdWlkbGVfcmVnaXN0ZXJfZGV2aWNlKCZwci0+cG93ZXIuZGV2KSkKIAkJCXJldHVybiAtRUlPOwotCi0JCXByaW50ayhLRVJOX0lORk8gUFJFRklYICJDUFUlZCAocG93ZXIgc3RhdGVzOiIsIHByLT5pZCk7Ci0JCWZvciAoaSA9IDE7IGkgPD0gcHItPnBvd2VyLmNvdW50OyBpKyspCi0JCQlpZiAocHItPnBvd2VyLnN0YXRlc1tpXS52YWxpZCkKLQkJCQlwcmludGsoIiBDJWRbQyVkXSIsIGksCi0JCQkJICAgICAgIHByLT5wb3dlci5zdGF0ZXNbaV0udHlwZSk7Ci0JCXByaW50aygiKVxuIik7CiAJfQogI2lmZGVmIENPTkZJR19BQ1BJX1BST0NGUwogCS8qICdwb3dlcicgW1JdICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvc2Nhbi5jIGIvZHJpdmVycy9hY3BpL3NjYW4uYwppbmRleCA0MDhlYmRlLi4xNGE3NDgxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvc2Nhbi5jCisrKyBiL2RyaXZlcnMvYWNwaS9zY2FuLmMKQEAgLTIyLDYgKzIyLDggQEAKICNkZWZpbmUgQUNQSV9CVVNfSElECQkJIkxOWFNZQlVTIgogI2RlZmluZSBBQ1BJX0JVU19ERVZJQ0VfTkFNRQkJIlN5c3RlbSBCdXMiCiAKKyNkZWZpbmUgQUNQSV9JU19ST09UX0RFVklDRShkZXZpY2UpICAgICghKGRldmljZSktPnBhcmVudCkKKwogc3RhdGljIExJU1RfSEVBRChhY3BpX2RldmljZV9saXN0KTsKIHN0YXRpYyBMSVNUX0hFQUQoYWNwaV9idXNfaWRfbGlzdCk7CiBERUZJTkVfTVVURVgoYWNwaV9kZXZpY2VfbG9jayk7CkBAIC00Myw0MCArNDUsMTkgQEAKIHsKIAlpbnQgbGVuOwogCWludCBjb3VudDsKLQotCWlmICghYWNwaV9kZXYtPmZsYWdzLmhhcmR3YXJlX2lkICYmICFhY3BpX2Rldi0+ZmxhZ3MuY29tcGF0aWJsZV9pZHMpCi0JCXJldHVybiAtRU5PREVWOworCXN0cnVjdCBhY3BpX2hhcmR3YXJlX2lkICppZDsKIAogCWxlbiA9IHNucHJpbnRmKG1vZGFsaWFzLCBzaXplLCAiYWNwaToiKTsKIAlzaXplIC09IGxlbjsKIAotCWlmIChhY3BpX2Rldi0+ZmxhZ3MuaGFyZHdhcmVfaWQpIHsKLQkJY291bnQgPSBzbnByaW50ZigmbW9kYWxpYXNbbGVuXSwgc2l6ZSwgIiVzOiIsCi0JCQkJIGFjcGlfZGV2LT5wbnAuaGFyZHdhcmVfaWQpOworCWxpc3RfZm9yX2VhY2hfZW50cnkoaWQsICZhY3BpX2Rldi0+cG5wLmlkcywgbGlzdCkgeworCQljb3VudCA9IHNucHJpbnRmKCZtb2RhbGlhc1tsZW5dLCBzaXplLCAiJXM6IiwgaWQtPmlkKTsKIAkJaWYgKGNvdW50IDwgMCB8fCBjb3VudCA+PSBzaXplKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCWxlbiArPSBjb3VudDsKIAkJc2l6ZSAtPSBjb3VudDsKIAl9CiAKLQlpZiAoYWNwaV9kZXYtPmZsYWdzLmNvbXBhdGlibGVfaWRzKSB7Ci0JCXN0cnVjdCBhY3BpY2FfZGV2aWNlX2lkX2xpc3QgKmNpZF9saXN0OwotCQlpbnQgaTsKLQotCQljaWRfbGlzdCA9IGFjcGlfZGV2LT5wbnAuY2lkX2xpc3Q7Ci0JCWZvciAoaSA9IDA7IGkgPCBjaWRfbGlzdC0+Y291bnQ7IGkrKykgewotCQkJY291bnQgPSBzbnByaW50ZigmbW9kYWxpYXNbbGVuXSwgc2l6ZSwgIiVzOiIsCi0JCQkJCSBjaWRfbGlzdC0+aWRzW2ldLnN0cmluZyk7Ci0JCQlpZiAoY291bnQgPCAwIHx8IGNvdW50ID49IHNpemUpIHsKLQkJCQlwcmludGsoS0VSTl9FUlIgUFJFRklYICIlcyBjaWRbJWldIGV4Y2VlZHMgZXZlbnQgYnVmZmVyIHNpemUiLAotCQkJCSAgICAgICBhY3BpX2Rldi0+cG5wLmRldmljZV9uYW1lLCBpKTsKLQkJCQlicmVhazsKLQkJCX0KLQkJCWxlbiArPSBjb3VudDsKLQkJCXNpemUgLT0gY291bnQ7Ci0JCX0KLQl9Ci0KIAltb2RhbGlhc1tsZW5dID0gJ1wwJzsKIAlyZXR1cm4gbGVuOwogfQpAQCAtMTgzLDcgKzE2NCw3IEBACiBhY3BpX2RldmljZV9oaWRfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpIHsKIAlzdHJ1Y3QgYWNwaV9kZXZpY2UgKmFjcGlfZGV2ID0gdG9fYWNwaV9kZXZpY2UoZGV2KTsKIAotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCBhY3BpX2Rldi0+cG5wLmhhcmR3YXJlX2lkKTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgYWNwaV9kZXZpY2VfaGlkKGFjcGlfZGV2KSk7CiB9CiBzdGF0aWMgREVWSUNFX0FUVFIoaGlkLCAwNDQ0LCBhY3BpX2RldmljZV9oaWRfc2hvdywgTlVMTCk7CiAKQEAgLTIxOSwxNyArMjAwLDEzIEBACiAJCQlnb3RvIGVuZDsKIAl9CiAKLQlpZiAoZGV2LT5mbGFncy5oYXJkd2FyZV9pZCkgewotCQlyZXN1bHQgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJmRldi0+ZGV2LCAmZGV2X2F0dHJfaGlkKTsKLQkJaWYgKHJlc3VsdCkKLQkJCWdvdG8gZW5kOwotCX0KKwlyZXN1bHQgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJmRldi0+ZGV2LCAmZGV2X2F0dHJfaGlkKTsKKwlpZiAocmVzdWx0KQorCQlnb3RvIGVuZDsKIAotCWlmIChkZXYtPmZsYWdzLmhhcmR3YXJlX2lkIHx8IGRldi0+ZmxhZ3MuY29tcGF0aWJsZV9pZHMpIHsKLQkJcmVzdWx0ID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZkZXYtPmRldiwgJmRldl9hdHRyX21vZGFsaWFzKTsKLQkJaWYgKHJlc3VsdCkKLQkJCWdvdG8gZW5kOwotCX0KKwlyZXN1bHQgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJmRldi0+ZGV2LCAmZGV2X2F0dHJfbW9kYWxpYXMpOworCWlmIChyZXN1bHQpCisJCWdvdG8gZW5kOwogCiAgICAgICAgIC8qCiAgICAgICAgICAqIElmIGRldmljZSBoYXMgX0VKMCwgJ2VqZWN0JyBmaWxlIGlzIGNyZWF0ZWQgdGhhdCBpcyB1c2VkIHRvIHRyaWdnZXIKQEAgLTI1NSwxMSArMjMyLDggQEAKIAlpZiAoQUNQSV9TVUNDRVNTKHN0YXR1cykpCiAJCWRldmljZV9yZW1vdmVfZmlsZSgmZGV2LT5kZXYsICZkZXZfYXR0cl9lamVjdCk7CiAKLQlpZiAoZGV2LT5mbGFncy5oYXJkd2FyZV9pZCB8fCBkZXYtPmZsYWdzLmNvbXBhdGlibGVfaWRzKQotCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmRldi0+ZGV2LCAmZGV2X2F0dHJfbW9kYWxpYXMpOwotCi0JaWYgKGRldi0+ZmxhZ3MuaGFyZHdhcmVfaWQpCi0JCWRldmljZV9yZW1vdmVfZmlsZSgmZGV2LT5kZXYsICZkZXZfYXR0cl9oaWQpOworCWRldmljZV9yZW1vdmVfZmlsZSgmZGV2LT5kZXYsICZkZXZfYXR0cl9tb2RhbGlhcyk7CisJZGV2aWNlX3JlbW92ZV9maWxlKCZkZXYtPmRldiwgJmRldl9hdHRyX2hpZCk7CiAJaWYgKGRldi0+aGFuZGxlKQogCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmRldi0+ZGV2LCAmZGV2X2F0dHJfcGF0aCk7CiB9CkBAIC0yNzEsNiArMjQ1LDcgQEAKIAkJCSAgY29uc3Qgc3RydWN0IGFjcGlfZGV2aWNlX2lkICppZHMpCiB7CiAJY29uc3Qgc3RydWN0IGFjcGlfZGV2aWNlX2lkICppZDsKKwlzdHJ1Y3QgYWNwaV9oYXJkd2FyZV9pZCAqaHdpZDsKIAogCS8qCiAJICogSWYgdGhlIGRldmljZSBpcyBub3QgcHJlc2VudCwgaXQgaXMgdW5uZWNlc3NhcnkgdG8gbG9hZCBkZXZpY2UKQEAgLTI3OSw0MCArMjU0LDMwIEBACiAJaWYgKCFkZXZpY2UtPnN0YXR1cy5wcmVzZW50KQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCWlmIChkZXZpY2UtPmZsYWdzLmhhcmR3YXJlX2lkKSB7Ci0JCWZvciAoaWQgPSBpZHM7IGlkLT5pZFswXTsgaWQrKykgewotCQkJaWYgKCFzdHJjbXAoKGNoYXIqKWlkLT5pZCwgZGV2aWNlLT5wbnAuaGFyZHdhcmVfaWQpKQorCWZvciAoaWQgPSBpZHM7IGlkLT5pZFswXTsgaWQrKykKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShod2lkLCAmZGV2aWNlLT5wbnAuaWRzLCBsaXN0KQorCQkJaWYgKCFzdHJjbXAoKGNoYXIgKikgaWQtPmlkLCBod2lkLT5pZCkpCiAJCQkJcmV0dXJuIDA7Ci0JCX0KLQl9Ci0KLQlpZiAoZGV2aWNlLT5mbGFncy5jb21wYXRpYmxlX2lkcykgewotCQlzdHJ1Y3QgYWNwaWNhX2RldmljZV9pZF9saXN0ICpjaWRfbGlzdCA9IGRldmljZS0+cG5wLmNpZF9saXN0OwotCQlpbnQgaTsKLQotCQlmb3IgKGlkID0gaWRzOyBpZC0+aWRbMF07IGlkKyspIHsKLQkJCS8qIGNvbXBhcmUgbXVsdGlwbGUgX0NJRCBlbnRyaWVzIGFnYWluc3QgZHJpdmVyIGlkcyAqLwotCQkJZm9yIChpID0gMDsgaSA8IGNpZF9saXN0LT5jb3VudDsgaSsrKSB7Ci0JCQkJaWYgKCFzdHJjbXAoKGNoYXIqKWlkLT5pZCwKLQkJCQkJICAgIGNpZF9saXN0LT5pZHNbaV0uc3RyaW5nKSkKLQkJCQkJcmV0dXJuIDA7Ci0JCQl9Ci0JCX0KLQl9CiAKIAlyZXR1cm4gLUVOT0VOVDsKIH0KIEVYUE9SVF9TWU1CT0woYWNwaV9tYXRjaF9kZXZpY2VfaWRzKTsKIAorc3RhdGljIHZvaWQgYWNwaV9mcmVlX2lkcyhzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSkKK3sKKwlzdHJ1Y3QgYWNwaV9oYXJkd2FyZV9pZCAqaWQsICp0bXA7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoaWQsIHRtcCwgJmRldmljZS0+cG5wLmlkcywgbGlzdCkgeworCQlrZnJlZShpZC0+aWQpOworCQlrZnJlZShpZCk7CisJfQorfQorCiBzdGF0aWMgdm9pZCBhY3BpX2RldmljZV9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgYWNwaV9kZXZpY2UgKmFjcGlfZGV2ID0gdG9fYWNwaV9kZXZpY2UoZGV2KTsKIAotCWtmcmVlKGFjcGlfZGV2LT5wbnAuY2lkX2xpc3QpOwotCWlmIChhY3BpX2Rldi0+ZmxhZ3MuaGFyZHdhcmVfaWQpCi0JCWtmcmVlKGFjcGlfZGV2LT5wbnAuaGFyZHdhcmVfaWQpOwotCWlmIChhY3BpX2Rldi0+ZmxhZ3MudW5pcXVlX2lkKQotCQlrZnJlZShhY3BpX2Rldi0+cG5wLnVuaXF1ZV9pZCk7CisJYWNwaV9mcmVlX2lkcyhhY3BpX2Rldik7CiAJa2ZyZWUoYWNwaV9kZXYpOwogfQogCkBAIC0zNzgsMTUgKzM0MywxMyBAQAogc3RhdGljIGludCBhY3BpX2RldmljZV9pbnN0YWxsX25vdGlmeV9oYW5kbGVyKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKQogewogCWFjcGlfc3RhdHVzIHN0YXR1czsKLQljaGFyICpoaWQ7CiAKLQloaWQgPSBhY3BpX2RldmljZV9oaWQoZGV2aWNlKTsKLQlpZiAoIXN0cmNtcChoaWQsIEFDUElfQlVUVE9OX0hJRF9QT1dFUkYpKQorCWlmIChkZXZpY2UtPmRldmljZV90eXBlID09IEFDUElfQlVTX1RZUEVfUE9XRVJfQlVUVE9OKQogCQlzdGF0dXMgPQogCQkgICAgYWNwaV9pbnN0YWxsX2ZpeGVkX2V2ZW50X2hhbmRsZXIoQUNQSV9FVkVOVF9QT1dFUl9CVVRUT04sCiAJCQkJCQkgICAgIGFjcGlfZGV2aWNlX25vdGlmeV9maXhlZCwKIAkJCQkJCSAgICAgZGV2aWNlKTsKLQllbHNlIGlmICghc3RyY21wKGhpZCwgQUNQSV9CVVRUT05fSElEX1NMRUVQRikpCisJZWxzZSBpZiAoZGV2aWNlLT5kZXZpY2VfdHlwZSA9PSBBQ1BJX0JVU19UWVBFX1NMRUVQX0JVVFRPTikKIAkJc3RhdHVzID0KIAkJICAgIGFjcGlfaW5zdGFsbF9maXhlZF9ldmVudF9oYW5kbGVyKEFDUElfRVZFTlRfU0xFRVBfQlVUVE9OLAogCQkJCQkJICAgICBhY3BpX2RldmljZV9ub3RpZnlfZml4ZWQsCkBAIC00MDQsMTAgKzM2NywxMCBAQAogCiBzdGF0aWMgdm9pZCBhY3BpX2RldmljZV9yZW1vdmVfbm90aWZ5X2hhbmRsZXIoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UpCiB7Ci0JaWYgKCFzdHJjbXAoYWNwaV9kZXZpY2VfaGlkKGRldmljZSksIEFDUElfQlVUVE9OX0hJRF9QT1dFUkYpKQorCWlmIChkZXZpY2UtPmRldmljZV90eXBlID09IEFDUElfQlVTX1RZUEVfUE9XRVJfQlVUVE9OKQogCQlhY3BpX3JlbW92ZV9maXhlZF9ldmVudF9oYW5kbGVyKEFDUElfRVZFTlRfUE9XRVJfQlVUVE9OLAogCQkJCQkJYWNwaV9kZXZpY2Vfbm90aWZ5X2ZpeGVkKTsKLQllbHNlIGlmICghc3RyY21wKGFjcGlfZGV2aWNlX2hpZChkZXZpY2UpLCBBQ1BJX0JVVFRPTl9ISURfU0xFRVBGKSkKKwllbHNlIGlmIChkZXZpY2UtPmRldmljZV90eXBlID09IEFDUElfQlVTX1RZUEVfU0xFRVBfQlVUVE9OKQogCQlhY3BpX3JlbW92ZV9maXhlZF9ldmVudF9oYW5kbGVyKEFDUElfRVZFTlRfU0xFRVBfQlVUVE9OLAogCQkJCQkJYWNwaV9kZXZpY2Vfbm90aWZ5X2ZpeGVkKTsKIAllbHNlCkBAIC00NzQsMTIgKzQzNywxMiBAQAogCS51ZXZlbnQJCT0gYWNwaV9kZXZpY2VfdWV2ZW50LAogfTsKIAotc3RhdGljIGludCBhY3BpX2RldmljZV9yZWdpc3RlcihzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSwKLQkJCQkgc3RydWN0IGFjcGlfZGV2aWNlICpwYXJlbnQpCitzdGF0aWMgaW50IGFjcGlfZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKQogewogCWludCByZXN1bHQ7CiAJc3RydWN0IGFjcGlfZGV2aWNlX2J1c19pZCAqYWNwaV9kZXZpY2VfYnVzX2lkLCAqbmV3X2J1c19pZDsKIAlpbnQgZm91bmQgPSAwOworCiAJLyoKIAkgKiBMaW5rYWdlCiAJICogLS0tLS0tLQpAQCAtNTAxLDggKzQ2NCw5IEBACiAJICogSWYgZmFpbGVkLCBjcmVhdGUgb25lIGFuZCBsaW5rIGl0IGludG8gYWNwaV9idXNfaWRfbGlzdAogCSAqLwogCWxpc3RfZm9yX2VhY2hfZW50cnkoYWNwaV9kZXZpY2VfYnVzX2lkLCAmYWNwaV9idXNfaWRfbGlzdCwgbm9kZSkgewotCQlpZighc3RyY21wKGFjcGlfZGV2aWNlX2J1c19pZC0+YnVzX2lkLCBkZXZpY2UtPmZsYWdzLmhhcmR3YXJlX2lkPyBkZXZpY2UtPnBucC5oYXJkd2FyZV9pZCA6ICJkZXZpY2UiKSkgewotCQkJYWNwaV9kZXZpY2VfYnVzX2lkLT5pbnN0YW5jZV9ubyArKzsKKwkJaWYgKCFzdHJjbXAoYWNwaV9kZXZpY2VfYnVzX2lkLT5idXNfaWQsCisJCQkgICAgYWNwaV9kZXZpY2VfaGlkKGRldmljZSkpKSB7CisJCQlhY3BpX2RldmljZV9idXNfaWQtPmluc3RhbmNlX25vKys7CiAJCQlmb3VuZCA9IDE7CiAJCQlrZnJlZShuZXdfYnVzX2lkKTsKIAkJCWJyZWFrOwpAQCAtNTEwLDcgKzQ3NCw3IEBACiAJfQogCWlmICghZm91bmQpIHsKIAkJYWNwaV9kZXZpY2VfYnVzX2lkID0gbmV3X2J1c19pZDsKLQkJc3RyY3B5KGFjcGlfZGV2aWNlX2J1c19pZC0+YnVzX2lkLCBkZXZpY2UtPmZsYWdzLmhhcmR3YXJlX2lkID8gZGV2aWNlLT5wbnAuaGFyZHdhcmVfaWQgOiAiZGV2aWNlIik7CisJCXN0cmNweShhY3BpX2RldmljZV9idXNfaWQtPmJ1c19pZCwgYWNwaV9kZXZpY2VfaGlkKGRldmljZSkpOwogCQlhY3BpX2RldmljZV9idXNfaWQtPmluc3RhbmNlX25vID0gMDsKIAkJbGlzdF9hZGRfdGFpbCgmYWNwaV9kZXZpY2VfYnVzX2lkLT5ub2RlLCAmYWNwaV9idXNfaWRfbGlzdCk7CiAJfQpAQCAtNTI0LDcgKzQ4OCw3IEBACiAJbXV0ZXhfdW5sb2NrKCZhY3BpX2RldmljZV9sb2NrKTsKIAogCWlmIChkZXZpY2UtPnBhcmVudCkKLQkJZGV2aWNlLT5kZXYucGFyZW50ID0gJnBhcmVudC0+ZGV2OworCQlkZXZpY2UtPmRldi5wYXJlbnQgPSAmZGV2aWNlLT5wYXJlbnQtPmRldjsKIAlkZXZpY2UtPmRldi5idXMgPSAmYWNwaV9idXNfdHlwZTsKIAlkZXZpY2UtPmRldi5yZWxlYXNlID0gJmFjcGlfZGV2aWNlX3JlbGVhc2U7CiAJcmVzdWx0ID0gZGV2aWNlX3JlZ2lzdGVyKCZkZXZpY2UtPmRldik7CkBAIC02NjQsNiArNjI4LDMzIEBACiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGV2aWNlIEVudW1lcmF0aW9uCiAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworc3RhdGljIHN0cnVjdCBhY3BpX2RldmljZSAqYWNwaV9idXNfZ2V0X3BhcmVudChhY3BpX2hhbmRsZSBoYW5kbGUpCit7CisJYWNwaV9zdGF0dXMgc3RhdHVzOworCWludCByZXQ7CisJc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2U7CisKKwkvKgorCSAqIEZpeGVkIGhhcmR3YXJlIGRldmljZXMgZG8gbm90IGFwcGVhciBpbiB0aGUgbmFtZXNwYWNlIGFuZCBkbyBub3QKKwkgKiBoYXZlIGhhbmRsZXMsIGJ1dCB3ZSBmYWJyaWNhdGUgYWNwaV9kZXZpY2VzIGZvciB0aGVtLCBzbyB3ZSBoYXZlCisJICogdG8gZGVhbCB3aXRoIHRoZW0gc3BlY2lhbGx5LgorCSAqLworCWlmIChoYW5kbGUgPT0gTlVMTCkKKwkJcmV0dXJuIGFjcGlfcm9vdDsKKworCWRvIHsKKwkJc3RhdHVzID0gYWNwaV9nZXRfcGFyZW50KGhhbmRsZSwgJmhhbmRsZSk7CisJCWlmIChzdGF0dXMgPT0gQUVfTlVMTF9FTlRSWSkKKwkJCXJldHVybiBOVUxMOworCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCisJCQlyZXR1cm4gYWNwaV9yb290OworCisJCXJldCA9IGFjcGlfYnVzX2dldF9kZXZpY2UoaGFuZGxlLCAmZGV2aWNlKTsKKwkJaWYgKHJldCA9PSAwKQorCQkJcmV0dXJuIGRldmljZTsKKwl9IHdoaWxlICgxKTsKK30KKwogYWNwaV9zdGF0dXMKIGFjcGlfYnVzX2dldF9lamQoYWNwaV9oYW5kbGUgaGFuZGxlLCBhY3BpX2hhbmRsZSAqZWpkKQogewpAQCAtODc2LDExICs4NjcsNiBAQAogCWlmIChBQ1BJX1NVQ0NFU1Moc3RhdHVzKSkKIAkJZGV2aWNlLT5mbGFncy5keW5hbWljX3N0YXR1cyA9IDE7CiAKLQkvKiBQcmVzZW5jZSBvZiBfQ0lEIGluZGljYXRlcyAnY29tcGF0aWJsZV9pZHMnICovCi0Jc3RhdHVzID0gYWNwaV9nZXRfaGFuZGxlKGRldmljZS0+aGFuZGxlLCAiX0NJRCIsICZ0ZW1wKTsKLQlpZiAoQUNQSV9TVUNDRVNTKHN0YXR1cykpCi0JCWRldmljZS0+ZmxhZ3MuY29tcGF0aWJsZV9pZHMgPSAxOwotCiAJLyogUHJlc2VuY2Ugb2YgX1JNViBpbmRpY2F0ZXMgJ3JlbW92YWJsZScgKi8KIAlzdGF0dXMgPSBhY3BpX2dldF9oYW5kbGUoZGV2aWNlLT5oYW5kbGUsICJfUk1WIiwgJnRlbXApOwogCWlmIChBQ1BJX1NVQ0NFU1Moc3RhdHVzKSkKQEAgLTkxOCw4ICs5MDQsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBhY3BpX2RldmljZV9nZXRfYnVzaWQoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UsCi0JCQkJICBhY3BpX2hhbmRsZSBoYW5kbGUsIGludCB0eXBlKQorc3RhdGljIHZvaWQgYWNwaV9kZXZpY2VfZ2V0X2J1c2lkKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKQogewogCWNoYXIgYnVzX2lkWzVdID0geyAnPycsIDAgfTsKIAlzdHJ1Y3QgYWNwaV9idWZmZXIgYnVmZmVyID0geyBzaXplb2YoYnVzX2lkKSwgYnVzX2lkIH07CkBAIC05MzEsMTAgKzkxNiwxMiBAQAogCSAqIFRoZSBkZXZpY2UncyBCdXMgSUQgaXMgc2ltcGx5IHRoZSBvYmplY3QgbmFtZS4KIAkgKiBUQkQ6IFNob3VsZG4ndCB0aGlzIHZhbHVlIGJlIHVuaXF1ZSAod2l0aGluIHRoZSBBQ1BJIG5hbWVzcGFjZSk/CiAJICovCi0Jc3dpdGNoICh0eXBlKSB7Ci0JY2FzZSBBQ1BJX0JVU19UWVBFX1NZU1RFTToKKwlpZiAoQUNQSV9JU19ST09UX0RFVklDRShkZXZpY2UpKSB7CiAJCXN0cmNweShkZXZpY2UtPnBucC5idXNfaWQsICJBQ1BJIik7Ci0JCWJyZWFrOworCQlyZXR1cm47CisJfQorCisJc3dpdGNoIChkZXZpY2UtPmRldmljZV90eXBlKSB7CiAJY2FzZSBBQ1BJX0JVU19UWVBFX1BPV0VSX0JVVFRPTjoKIAkJc3RyY3B5KGRldmljZS0+cG5wLmJ1c19pZCwgIlBXUkYiKTsKIAkJYnJlYWs7CkBAIC05NDIsNyArOTI5LDcgQEAKIAkJc3RyY3B5KGRldmljZS0+cG5wLmJ1c19pZCwgIlNMUEYiKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJYWNwaV9nZXRfbmFtZShoYW5kbGUsIEFDUElfU0lOR0xFX05BTUUsICZidWZmZXIpOworCQlhY3BpX2dldF9uYW1lKGRldmljZS0+aGFuZGxlLCBBQ1BJX1NJTkdMRV9OQU1FLCAmYnVmZmVyKTsKIAkJLyogQ2xlYW4gdXAgdHJhaWxpbmcgdW5kZXJzY29yZXMgKGlmIGFueSkgKi8KIAkJZm9yIChpID0gMzsgaSA+IDE7IGktLSkgewogCQkJaWYgKGJ1c19pZFtpXSA9PSAnXycpCkBAIC0xMDAwLDIwNCArOTg3LDEzNCBAQAogCXJldHVybiBhY3BpX2dldF9oYW5kbGUoZGV2aWNlLT5oYW5kbGUsICJfRENLIiwgJnRtcCk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgYWNwaWNhX2RldmljZV9pZF9saXN0KgotYWNwaV9hZGRfY2lkKAotCXN0cnVjdCBhY3BpX2RldmljZV9pbmZvICAgICAgICAgKmluZm8sCi0Jc3RydWN0IGFjcGljYV9kZXZpY2VfaWQgICAgICAgICAqbmV3X2NpZCkKK2NoYXIgKmFjcGlfZGV2aWNlX2hpZChzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSkKIHsKLQlzdHJ1Y3QgYWNwaWNhX2RldmljZV9pZF9saXN0ICAgICpjaWQ7Ci0JY2hhciAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmV4dF9pZF9zdHJpbmc7Ci0JYWNwaV9zaXplICAgICAgICAgICAgICAgICAgICAgICBjaWRfbGVuZ3RoOwotCWFjcGlfc2l6ZSAgICAgICAgICAgICAgICAgICAgICAgbmV3X2NpZF9sZW5ndGg7Ci0JdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpOworCXN0cnVjdCBhY3BpX2hhcmR3YXJlX2lkICpoaWQ7CiAKKwloaWQgPSBsaXN0X2ZpcnN0X2VudHJ5KCZkZXZpY2UtPnBucC5pZHMsIHN0cnVjdCBhY3BpX2hhcmR3YXJlX2lkLCBsaXN0KTsKKwlyZXR1cm4gaGlkLT5pZDsKK30KK0VYUE9SVF9TWU1CT0woYWNwaV9kZXZpY2VfaGlkKTsKIAotCS8qIEFsbG9jYXRlIG5ldyBDSUQgbGlzdCB3aXRoIHJvb20gZm9yIHRoZSBuZXcgQ0lEICovCitzdGF0aWMgdm9pZCBhY3BpX2FkZF9pZChzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSwgY29uc3QgY2hhciAqZGV2X2lkKQoreworCXN0cnVjdCBhY3BpX2hhcmR3YXJlX2lkICppZDsKIAotCWlmICghbmV3X2NpZCkKLQkJbmV3X2NpZF9sZW5ndGggPSBpbmZvLT5jb21wYXRpYmxlX2lkX2xpc3QubGlzdF9zaXplOwotCWVsc2UgaWYgKGluZm8tPmNvbXBhdGlibGVfaWRfbGlzdC5saXN0X3NpemUpCi0JCW5ld19jaWRfbGVuZ3RoID0gaW5mby0+Y29tcGF0aWJsZV9pZF9saXN0Lmxpc3Rfc2l6ZSArCi0JCQluZXdfY2lkLT5sZW5ndGggKyBzaXplb2Yoc3RydWN0IGFjcGljYV9kZXZpY2VfaWQpOwotCWVsc2UKLQkJbmV3X2NpZF9sZW5ndGggPSBzaXplb2Yoc3RydWN0IGFjcGljYV9kZXZpY2VfaWRfbGlzdCkgKyBuZXdfY2lkLT5sZW5ndGg7CisJaWQgPSBrbWFsbG9jKHNpemVvZigqaWQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWlkKQorCQlyZXR1cm47CiAKLQljaWQgPSBBQ1BJX0FMTE9DQVRFX1pFUk9FRChuZXdfY2lkX2xlbmd0aCk7Ci0JaWYgKCFjaWQpIHsKLQkJcmV0dXJuIE5VTEw7CisJaWQtPmlkID0ga21hbGxvYyhzdHJsZW4oZGV2X2lkKSArIDEsIEdGUF9LRVJORUwpOworCWlmICghaWQtPmlkKSB7CisJCWtmcmVlKGlkKTsKKwkJcmV0dXJuOwogCX0KIAotCWNpZC0+bGlzdF9zaXplID0gbmV3X2NpZF9sZW5ndGg7Ci0JY2lkLT5jb3VudCA9IGluZm8tPmNvbXBhdGlibGVfaWRfbGlzdC5jb3VudDsKLQlpZiAobmV3X2NpZCkKLQkJY2lkLT5jb3VudCsrOwotCW5leHRfaWRfc3RyaW5nID0gKGNoYXIgKikgY2lkLT5pZHMgKyAoY2lkLT5jb3VudCAqIHNpemVvZihzdHJ1Y3QgYWNwaWNhX2RldmljZV9pZCkpOwotCi0JLyogQ29weSBhbGwgZXhpc3RpbmcgQ0lEcyAqLwotCi0JZm9yIChpID0gMDsgaSA8IGluZm8tPmNvbXBhdGlibGVfaWRfbGlzdC5jb3VudDsgaSsrKSB7Ci0JCWNpZF9sZW5ndGggPSBpbmZvLT5jb21wYXRpYmxlX2lkX2xpc3QuaWRzW2ldLmxlbmd0aDsKLQkJY2lkLT5pZHNbaV0uc3RyaW5nID0gbmV4dF9pZF9zdHJpbmc7Ci0JCWNpZC0+aWRzW2ldLmxlbmd0aCA9IGNpZF9sZW5ndGg7Ci0KLQkJQUNQSV9NRU1DUFkobmV4dF9pZF9zdHJpbmcsIGluZm8tPmNvbXBhdGlibGVfaWRfbGlzdC5pZHNbaV0uc3RyaW5nLAotCQkJY2lkX2xlbmd0aCk7Ci0KLQkJbmV4dF9pZF9zdHJpbmcgKz0gY2lkX2xlbmd0aDsKLQl9Ci0KLQkvKiBBcHBlbmQgdGhlIG5ldyBDSUQgKi8KLQotCWlmIChuZXdfY2lkKSB7Ci0JCWNpZC0+aWRzW2ldLnN0cmluZyA9IG5leHRfaWRfc3RyaW5nOwotCQljaWQtPmlkc1tpXS5sZW5ndGggPSBuZXdfY2lkLT5sZW5ndGg7Ci0KLQkJQUNQSV9NRU1DUFkobmV4dF9pZF9zdHJpbmcsIG5ld19jaWQtPnN0cmluZywgbmV3X2NpZC0+bGVuZ3RoKTsKLQl9Ci0KLQlyZXR1cm4gY2lkOworCXN0cmNweShpZC0+aWQsIGRldl9pZCk7CisJbGlzdF9hZGRfdGFpbCgmaWQtPmxpc3QsICZkZXZpY2UtPnBucC5pZHMpOwogfQogCi1zdGF0aWMgdm9pZCBhY3BpX2RldmljZV9zZXRfaWQoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UsCi0JCQkgICAgICAgc3RydWN0IGFjcGlfZGV2aWNlICpwYXJlbnQsIGFjcGlfaGFuZGxlIGhhbmRsZSwKLQkJCSAgICAgICBpbnQgdHlwZSkKK3N0YXRpYyB2b2lkIGFjcGlfZGV2aWNlX3NldF9pZChzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSkKIHsKLQlzdHJ1Y3QgYWNwaV9kZXZpY2VfaW5mbyAqaW5mbyA9IE5VTEw7Ci0JY2hhciAqaGlkID0gTlVMTDsKLQljaGFyICp1aWQgPSBOVUxMOwotCXN0cnVjdCBhY3BpY2FfZGV2aWNlX2lkX2xpc3QgKmNpZF9saXN0ID0gTlVMTDsKLQljaGFyICpjaWRfYWRkID0gTlVMTDsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CisJc3RydWN0IGFjcGlfZGV2aWNlX2luZm8gKmluZm87CisJc3RydWN0IGFjcGljYV9kZXZpY2VfaWRfbGlzdCAqY2lkX2xpc3Q7CisJaW50IGk7CiAKLQlzd2l0Y2ggKHR5cGUpIHsKKwlzd2l0Y2ggKGRldmljZS0+ZGV2aWNlX3R5cGUpIHsKIAljYXNlIEFDUElfQlVTX1RZUEVfREVWSUNFOgotCQlzdGF0dXMgPSBhY3BpX2dldF9vYmplY3RfaW5mbyhoYW5kbGUsICZpbmZvKTsKKwkJaWYgKEFDUElfSVNfUk9PVF9ERVZJQ0UoZGV2aWNlKSkgeworCQkJYWNwaV9hZGRfaWQoZGV2aWNlLCBBQ1BJX1NZU1RFTV9ISUQpOworCQkJYnJlYWs7CisJCX0gZWxzZSBpZiAoQUNQSV9JU19ST09UX0RFVklDRShkZXZpY2UtPnBhcmVudCkpIHsKKwkJCS8qIFxfU0JfLCB0aGUgb25seSByb290LWxldmVsIG5hbWVzcGFjZSBkZXZpY2UgKi8KKwkJCWFjcGlfYWRkX2lkKGRldmljZSwgQUNQSV9CVVNfSElEKTsKKwkJCXN0cmNweShkZXZpY2UtPnBucC5kZXZpY2VfbmFtZSwgQUNQSV9CVVNfREVWSUNFX05BTUUpOworCQkJc3RyY3B5KGRldmljZS0+cG5wLmRldmljZV9jbGFzcywgQUNQSV9CVVNfQ0xBU1MpOworCQkJYnJlYWs7CisJCX0KKworCQlzdGF0dXMgPSBhY3BpX2dldF9vYmplY3RfaW5mbyhkZXZpY2UtPmhhbmRsZSwgJmluZm8pOwogCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKIAkJCXByaW50ayhLRVJOX0VSUiBQUkVGSVggIiVzOiBFcnJvciByZWFkaW5nIGRldmljZSBpbmZvXG4iLCBfX2Z1bmNfXyk7CiAJCQlyZXR1cm47CiAJCX0KIAogCQlpZiAoaW5mby0+dmFsaWQgJiBBQ1BJX1ZBTElEX0hJRCkKLQkJCWhpZCA9IGluZm8tPmhhcmR3YXJlX2lkLnN0cmluZzsKLQkJaWYgKGluZm8tPnZhbGlkICYgQUNQSV9WQUxJRF9VSUQpCi0JCQl1aWQgPSBpbmZvLT51bmlxdWVfaWQuc3RyaW5nOwotCQlpZiAoaW5mby0+dmFsaWQgJiBBQ1BJX1ZBTElEX0NJRCkKKwkJCWFjcGlfYWRkX2lkKGRldmljZSwgaW5mby0+aGFyZHdhcmVfaWQuc3RyaW5nKTsKKwkJaWYgKGluZm8tPnZhbGlkICYgQUNQSV9WQUxJRF9DSUQpIHsKIAkJCWNpZF9saXN0ID0gJmluZm8tPmNvbXBhdGlibGVfaWRfbGlzdDsKKwkJCWZvciAoaSA9IDA7IGkgPCBjaWRfbGlzdC0+Y291bnQ7IGkrKykKKwkJCQlhY3BpX2FkZF9pZChkZXZpY2UsIGNpZF9saXN0LT5pZHNbaV0uc3RyaW5nKTsKKwkJfQogCQlpZiAoaW5mby0+dmFsaWQgJiBBQ1BJX1ZBTElEX0FEUikgewogCQkJZGV2aWNlLT5wbnAuYnVzX2FkZHJlc3MgPSBpbmZvLT5hZGRyZXNzOwogCQkJZGV2aWNlLT5mbGFncy5idXNfYWRkcmVzcyA9IDE7CiAJCX0KIAotCQkvKiBJZiB3ZSBoYXZlIGEgdmlkZW8vYmF5L2RvY2sgZGV2aWNlLCBhZGQgb3VyIHNlbGZkZWZpbmVkCi0JCSAgIEhJRCB0byB0aGUgQ0lEIGxpc3QuIExpa2UgdGhhdCB0aGUgdmlkZW8vYmF5L2RvY2sgZHJpdmVycwotCQkgICB3aWxsIGdldCBhdXRvbG9hZGVkIGFuZCB0aGUgZGV2aWNlIG1pZ2h0IHN0aWxsIG1hdGNoCi0JCSAgIGFnYWluc3QgYW5vdGhlciBkcml2ZXIuCi0JCSovCisJCWtmcmVlKGluZm8pOworCisJCS8qCisJCSAqIFNvbWUgZGV2aWNlcyBkb24ndCByZWxpYWJseSBoYXZlIF9ISURzICYgX0NJRHMsIHNvIGFkZAorCQkgKiBzeW50aGV0aWMgSElEcyB0byBtYWtlIHN1cmUgZHJpdmVycyBjYW4gZmluZCB0aGVtLgorCQkgKi8KIAkJaWYgKGFjcGlfaXNfdmlkZW9fZGV2aWNlKGRldmljZSkpCi0JCQljaWRfYWRkID0gQUNQSV9WSURFT19ISUQ7CisJCQlhY3BpX2FkZF9pZChkZXZpY2UsIEFDUElfVklERU9fSElEKTsKIAkJZWxzZSBpZiAoQUNQSV9TVUNDRVNTKGFjcGlfYmF5X21hdGNoKGRldmljZSkpKQotCQkJY2lkX2FkZCA9IEFDUElfQkFZX0hJRDsKKwkJCWFjcGlfYWRkX2lkKGRldmljZSwgQUNQSV9CQVlfSElEKTsKIAkJZWxzZSBpZiAoQUNQSV9TVUNDRVNTKGFjcGlfZG9ja19tYXRjaChkZXZpY2UpKSkKLQkJCWNpZF9hZGQgPSBBQ1BJX0RPQ0tfSElEOworCQkJYWNwaV9hZGRfaWQoZGV2aWNlLCBBQ1BJX0RPQ0tfSElEKTsKIAogCQlicmVhazsKIAljYXNlIEFDUElfQlVTX1RZUEVfUE9XRVI6Ci0JCWhpZCA9IEFDUElfUE9XRVJfSElEOworCQlhY3BpX2FkZF9pZChkZXZpY2UsIEFDUElfUE9XRVJfSElEKTsKIAkJYnJlYWs7CiAJY2FzZSBBQ1BJX0JVU19UWVBFX1BST0NFU1NPUjoKLQkJaGlkID0gQUNQSV9QUk9DRVNTT1JfT0JKRUNUX0hJRDsKLQkJYnJlYWs7Ci0JY2FzZSBBQ1BJX0JVU19UWVBFX1NZU1RFTToKLQkJaGlkID0gQUNQSV9TWVNURU1fSElEOworCQlhY3BpX2FkZF9pZChkZXZpY2UsIEFDUElfUFJPQ0VTU09SX09CSkVDVF9ISUQpOwogCQlicmVhazsKIAljYXNlIEFDUElfQlVTX1RZUEVfVEhFUk1BTDoKLQkJaGlkID0gQUNQSV9USEVSTUFMX0hJRDsKKwkJYWNwaV9hZGRfaWQoZGV2aWNlLCBBQ1BJX1RIRVJNQUxfSElEKTsKIAkJYnJlYWs7CiAJY2FzZSBBQ1BJX0JVU19UWVBFX1BPV0VSX0JVVFRPTjoKLQkJaGlkID0gQUNQSV9CVVRUT05fSElEX1BPV0VSRjsKKwkJYWNwaV9hZGRfaWQoZGV2aWNlLCBBQ1BJX0JVVFRPTl9ISURfUE9XRVJGKTsKIAkJYnJlYWs7CiAJY2FzZSBBQ1BJX0JVU19UWVBFX1NMRUVQX0JVVFRPTjoKLQkJaGlkID0gQUNQSV9CVVRUT05fSElEX1NMRUVQRjsKKwkJYWNwaV9hZGRfaWQoZGV2aWNlLCBBQ1BJX0JVVFRPTl9ISURfU0xFRVBGKTsKIAkJYnJlYWs7CiAJfQogCiAJLyoKLQkgKiBcX1NCCi0JICogLS0tLQotCSAqIEZpeCBmb3IgdGhlIHN5c3RlbSByb290IGJ1cyBkZXZpY2UgLS0gdGhlIG9ubHkgcm9vdC1sZXZlbCBkZXZpY2UuCisJICogV2UgYnVpbGQgYWNwaV9kZXZpY2VzIGZvciBzb21lIG9iamVjdHMgdGhhdCBkb24ndCBoYXZlIF9ISUQgb3IgX0NJRCwKKwkgKiBlLmcuLCBQQ0kgYnJpZGdlcyBhbmQgc2xvdHMuICBEcml2ZXJzIGNhbid0IGJpbmQgdG8gdGhlc2Ugb2JqZWN0cywKKwkgKiBidXQgd2UgZG8gdXNlIHRoZW0gaW5kaXJlY3RseSBieSB0cmF2ZXJzaW5nIHRoZSBhY3BpX2RldmljZSB0cmVlLgorCSAqIFRoaXMgZ2VuZXJpYyBJRCBpc24ndCB1c2VmdWwgZm9yIGRyaXZlciBiaW5kaW5nLCBidXQgaXQgcHJvdmlkZXMKKwkgKiB0aGUgdXNlZnVsIHByb3BlcnR5IHRoYXQgImV2ZXJ5IGFjcGlfZGV2aWNlIGhhcyBhbiBJRC4iCiAJICovCi0JaWYgKCgoYWNwaV9oYW5kbGUpcGFyZW50ID09IEFDUElfUk9PVF9PQkpFQ1QpICYmICh0eXBlID09IEFDUElfQlVTX1RZUEVfREVWSUNFKSkgewotCQloaWQgPSBBQ1BJX0JVU19ISUQ7Ci0JCXN0cmNweShkZXZpY2UtPnBucC5kZXZpY2VfbmFtZSwgQUNQSV9CVVNfREVWSUNFX05BTUUpOwotCQlzdHJjcHkoZGV2aWNlLT5wbnAuZGV2aWNlX2NsYXNzLCBBQ1BJX0JVU19DTEFTUyk7Ci0JfQotCi0JaWYgKGhpZCkgewotCQlkZXZpY2UtPnBucC5oYXJkd2FyZV9pZCA9IEFDUElfQUxMT0NBVEVfWkVST0VEKHN0cmxlbiAoaGlkKSArIDEpOwotCQlpZiAoZGV2aWNlLT5wbnAuaGFyZHdhcmVfaWQpIHsKLQkJCXN0cmNweShkZXZpY2UtPnBucC5oYXJkd2FyZV9pZCwgaGlkKTsKLQkJCWRldmljZS0+ZmxhZ3MuaGFyZHdhcmVfaWQgPSAxOwotCQl9Ci0JfQotCWlmICghZGV2aWNlLT5mbGFncy5oYXJkd2FyZV9pZCkKLQkJZGV2aWNlLT5wbnAuaGFyZHdhcmVfaWQgPSAiIjsKLQotCWlmICh1aWQpIHsKLQkJZGV2aWNlLT5wbnAudW5pcXVlX2lkID0gQUNQSV9BTExPQ0FURV9aRVJPRUQoc3RybGVuICh1aWQpICsgMSk7Ci0JCWlmIChkZXZpY2UtPnBucC51bmlxdWVfaWQpIHsKLQkJCXN0cmNweShkZXZpY2UtPnBucC51bmlxdWVfaWQsIHVpZCk7Ci0JCQlkZXZpY2UtPmZsYWdzLnVuaXF1ZV9pZCA9IDE7Ci0JCX0KLQl9Ci0JaWYgKCFkZXZpY2UtPmZsYWdzLnVuaXF1ZV9pZCkKLQkJZGV2aWNlLT5wbnAudW5pcXVlX2lkID0gIiI7Ci0KLQlpZiAoY2lkX2xpc3QgfHwgY2lkX2FkZCkgewotCQlzdHJ1Y3QgYWNwaWNhX2RldmljZV9pZF9saXN0ICpsaXN0OwotCi0JCWlmIChjaWRfYWRkKSB7Ci0JCQlzdHJ1Y3QgYWNwaWNhX2RldmljZV9pZCBjaWQ7Ci0JCQljaWQubGVuZ3RoID0gc3RybGVuIChjaWRfYWRkKSArIDE7Ci0JCQljaWQuc3RyaW5nID0gY2lkX2FkZDsKLQotCQkJbGlzdCA9IGFjcGlfYWRkX2NpZChpbmZvLCAmY2lkKTsKLQkJfSBlbHNlIHsKLQkJCWxpc3QgPSBhY3BpX2FkZF9jaWQoaW5mbywgTlVMTCk7Ci0JCX0KLQotCQlpZiAobGlzdCkgewotCQkJZGV2aWNlLT5wbnAuY2lkX2xpc3QgPSBsaXN0OwotCQkJaWYgKGNpZF9hZGQpCi0JCQkJZGV2aWNlLT5mbGFncy5jb21wYXRpYmxlX2lkcyA9IDE7Ci0JCX0KLQl9Ci0KLQlrZnJlZShpbmZvKTsKKwlpZiAobGlzdF9lbXB0eSgmZGV2aWNlLT5wbnAuaWRzKSkKKwkJYWNwaV9hZGRfaWQoZGV2aWNlLCAiZGV2aWNlIik7CiB9CiAKLXN0YXRpYyBpbnQgYWNwaV9kZXZpY2Vfc2V0X2NvbnRleHQoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UsIGludCB0eXBlKQorc3RhdGljIGludCBhY3BpX2RldmljZV9zZXRfY29udGV4dChzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSkKIHsKLQlhY3BpX3N0YXR1cyBzdGF0dXMgPSBBRV9PSzsKLQlpbnQgcmVzdWx0ID0gMDsKKwlhY3BpX3N0YXR1cyBzdGF0dXM7CisKIAkvKgogCSAqIENvbnRleHQKIAkgKiAtLS0tLS0tCiAJICogQXR0YWNoIHRoaXMgJ3N0cnVjdCBhY3BpX2RldmljZScgdG8gdGhlIEFDUEkgb2JqZWN0LiAgVGhpcyBtYWtlcwotCSAqIHJlc29sdXRpb25zIGZyb20gaGFuZGxlLT5kZXZpY2UgdmVyeSBlZmZpY2llbnQuICBOb3RlIHRoYXQgd2UgbmVlZAotCSAqIHRvIGJlIGNhcmVmdWwgd2l0aCBmaXhlZC1mZWF0dXJlIGRldmljZXMgYXMgdGhleSBhbGwgYXR0YWNoIHRvIHRoZQotCSAqIHJvb3Qgb2JqZWN0LgorCSAqIHJlc29sdXRpb25zIGZyb20gaGFuZGxlLT5kZXZpY2UgdmVyeSBlZmZpY2llbnQuICBGaXhlZCBoYXJkd2FyZQorCSAqIGRldmljZXMgaGF2ZSBubyBoYW5kbGVzLCBzbyB3ZSBza2lwIHRoZW0uCiAJICovCi0JaWYgKHR5cGUgIT0gQUNQSV9CVVNfVFlQRV9QT1dFUl9CVVRUT04gJiYKLQkgICAgdHlwZSAhPSBBQ1BJX0JVU19UWVBFX1NMRUVQX0JVVFRPTikgewotCQlzdGF0dXMgPSBhY3BpX2F0dGFjaF9kYXRhKGRldmljZS0+aGFuZGxlLAotCQkJCQkgIGFjcGlfYnVzX2RhdGFfaGFuZGxlciwgZGV2aWNlKTsKKwlpZiAoIWRldmljZS0+aGFuZGxlKQorCQlyZXR1cm4gMDsKIAotCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJCXByaW50ayhLRVJOX0VSUiBQUkVGSVggIkVycm9yIGF0dGFjaGluZyBkZXZpY2UgZGF0YVxuIik7Ci0JCQlyZXN1bHQgPSAtRU5PREVWOwotCQl9Ci0JfQotCXJldHVybiByZXN1bHQ7CisJc3RhdHVzID0gYWNwaV9hdHRhY2hfZGF0YShkZXZpY2UtPmhhbmRsZSwKKwkJCQkgIGFjcGlfYnVzX2RhdGFfaGFuZGxlciwgZGV2aWNlKTsKKwlpZiAoQUNQSV9TVUNDRVNTKHN0YXR1cykpCisJCXJldHVybiAwOworCisJcHJpbnRrKEtFUk5fRVJSIFBSRUZJWCAiRXJyb3IgYXR0YWNoaW5nIGRldmljZSBkYXRhXG4iKTsKKwlyZXR1cm4gLUVOT0RFVjsKIH0KIAogc3RhdGljIGludCBhY3BpX2J1c19yZW1vdmUoc3RydWN0IGFjcGlfZGV2aWNlICpkZXYsIGludCBybWRldmljZSkKQEAgLTEyMjMsMTcgKzExNDAsMTQgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludAotYWNwaV9hZGRfc2luZ2xlX29iamVjdChzdHJ1Y3QgYWNwaV9kZXZpY2UgKipjaGlsZCwKLQkJICAgICAgIHN0cnVjdCBhY3BpX2RldmljZSAqcGFyZW50LCBhY3BpX2hhbmRsZSBoYW5kbGUsIGludCB0eXBlLAotCQkJc3RydWN0IGFjcGlfYnVzX29wcyAqb3BzKQorc3RhdGljIGludCBhY3BpX2FkZF9zaW5nbGVfb2JqZWN0KHN0cnVjdCBhY3BpX2RldmljZSAqKmNoaWxkLAorCQkJCSAgYWNwaV9oYW5kbGUgaGFuZGxlLCBpbnQgdHlwZSwKKwkJCQkgIHVuc2lnbmVkIGxvbmcgbG9uZyBzdGEsCisJCQkJICBzdHJ1Y3QgYWNwaV9idXNfb3BzICpvcHMpCiB7Ci0JaW50IHJlc3VsdCA9IDA7Ci0Jc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UgPSBOVUxMOwotCi0KLQlpZiAoIWNoaWxkKQotCQlyZXR1cm4gLUVJTlZBTDsKKwlpbnQgcmVzdWx0OworCXN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlOworCXN0cnVjdCBhY3BpX2J1ZmZlciBidWZmZXIgPSB7IEFDUElfQUxMT0NBVEVfQlVGRkVSLCBOVUxMIH07CiAKIAlkZXZpY2UgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYWNwaV9kZXZpY2UpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWRldmljZSkgewpAQCAtMTI0MSw3NSArMTE1NSwzMSBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKKwlJTklUX0xJU1RfSEVBRCgmZGV2aWNlLT5wbnAuaWRzKTsKKwlkZXZpY2UtPmRldmljZV90eXBlID0gdHlwZTsKIAlkZXZpY2UtPmhhbmRsZSA9IGhhbmRsZTsKLQlkZXZpY2UtPnBhcmVudCA9IHBhcmVudDsKKwlkZXZpY2UtPnBhcmVudCA9IGFjcGlfYnVzX2dldF9wYXJlbnQoaGFuZGxlKTsKIAlkZXZpY2UtPmJ1c19vcHMgPSAqb3BzOyAvKiB3b3Jrcm91bmQgZm9yIG5vdCBjYWxsIC5zdGFydCAqLworCVNUUlVDVF9UT19JTlQoZGV2aWNlLT5zdGF0dXMpID0gc3RhOwogCi0KLQlhY3BpX2RldmljZV9nZXRfYnVzaWQoZGV2aWNlLCBoYW5kbGUsIHR5cGUpOworCWFjcGlfZGV2aWNlX2dldF9idXNpZChkZXZpY2UpOwogCiAJLyoKIAkgKiBGbGFncwogCSAqIC0tLS0tCi0JICogR2V0IHByaW9yIHRvIGNhbGxpbmcgYWNwaV9idXNfZ2V0X3N0YXR1cygpIHNvIHdlIGtub3cgd2hldGhlcgotCSAqIG9yIG5vdCBfU1RBIGlzIHByZXNlbnQuICBOb3RlIHRoYXQgd2Ugb25seSBsb29rIGZvciBvYmplY3QKLQkgKiBoYW5kbGVzIC0tIGNhbm5vdCBldmFsdWF0ZSBvYmplY3RzIHVudGlsIHdlIGtub3cgdGhlIGRldmljZSBpcwotCSAqIHByZXNlbnQgYW5kIHByb3Blcmx5IGluaXRpYWxpemVkLgorCSAqIE5vdGUgdGhhdCB3ZSBvbmx5IGxvb2sgZm9yIG9iamVjdCBoYW5kbGVzIC0tIGNhbm5vdCBldmFsdWF0ZSBvYmplY3RzCisJICogdW50aWwgd2Uga25vdyB0aGUgZGV2aWNlIGlzIHByZXNlbnQgYW5kIHByb3Blcmx5IGluaXRpYWxpemVkLgogCSAqLwogCXJlc3VsdCA9IGFjcGlfYnVzX2dldF9mbGFncyhkZXZpY2UpOwogCWlmIChyZXN1bHQpCiAJCWdvdG8gZW5kOwogCiAJLyoKLQkgKiBTdGF0dXMKLQkgKiAtLS0tLS0KLQkgKiBTZWUgaWYgdGhlIGRldmljZSBpcyBwcmVzZW50LiAgV2UgYWx3YXlzIGFzc3VtZSB0aGF0IG5vbi1EZXZpY2UKLQkgKiBhbmQgbm9uLVByb2Nlc3NvciBvYmplY3RzIChlLmcuIHRoZXJtYWwgem9uZXMsIHBvd2VyIHJlc291cmNlcywKLQkgKiBldGMuKSBhcmUgcHJlc2VudCwgZnVuY3Rpb25pbmcsIGV0Yy4gKGF0IGxlYXN0IHdoZW4gcGFyZW50IG9iamVjdAotCSAqIGlzIHByZXNlbnQpLiAgTm90ZSB0aGF0IF9TVEEgaGFzIGEgZGlmZmVyZW50IG1lYW5pbmcgZm9yIHNvbWUKLQkgKiBvYmplY3RzIChlLmcuIHBvd2VyIHJlc291cmNlcykgc28gd2UgbmVlZCB0byBiZSBjYXJlZnVsIGhvdyB3ZSB1c2UKLQkgKiBpdC4KLQkgKi8KLQlzd2l0Y2ggKHR5cGUpIHsKLQljYXNlIEFDUElfQlVTX1RZUEVfUFJPQ0VTU09SOgotCWNhc2UgQUNQSV9CVVNfVFlQRV9ERVZJQ0U6Ci0JCXJlc3VsdCA9IGFjcGlfYnVzX2dldF9zdGF0dXMoZGV2aWNlKTsKLQkJaWYgKEFDUElfRkFJTFVSRShyZXN1bHQpKSB7Ci0JCQlyZXN1bHQgPSAtRU5PREVWOwotCQkJZ290byBlbmQ7Ci0JCX0KLQkJLyoKLQkJICogV2hlbiB0aGUgZGV2aWNlIGlzIG5laXRoZXIgcHJlc2VudCBub3IgZnVuY3Rpb25hbCwgdGhlCi0JCSAqIGRldmljZSBzaG91bGQgbm90IGJlIGFkZGVkIHRvIExpbnV4IEFDUEkgZGV2aWNlIHRyZWUuCi0JCSAqIFdoZW4gdGhlIHN0YXR1cyBvZiB0aGUgZGV2aWNlIGlzIG5vdCBwcmVzZW50IGJ1dCBmdW5jdGluYWwsCi0JCSAqIGl0IHNob3VsZCBiZSBhZGRlZCB0byBMaW51eCBBQ1BJIHRyZWUuIEZvciBleGFtcGxlIDogYmF5Ci0JCSAqIGRldmljZSAsIGRvY2sgZGV2aWNlLgotCQkgKiBJbiBzdWNoIGNvbmRpdGlvbnMgaXQgaXMgdW5uY2Vzc2FyeSB0byBjaGVjayB3aGV0aGVyIGl0IGlzCi0JCSAqIGJheSBkZXZpY2Ugb3IgZG9jayBkZXZpY2UuCi0JCSAqLwotCQlpZiAoIWRldmljZS0+c3RhdHVzLnByZXNlbnQgJiYgIWRldmljZS0+c3RhdHVzLmZ1bmN0aW9uYWwpIHsKLQkJCXJlc3VsdCA9IC1FTk9ERVY7Ci0JCQlnb3RvIGVuZDsKLQkJfQotCQlicmVhazsKLQlkZWZhdWx0OgotCQlTVFJVQ1RfVE9fSU5UKGRldmljZS0+c3RhdHVzKSA9Ci0JCSAgICBBQ1BJX1NUQV9ERVZJQ0VfUFJFU0VOVCB8IEFDUElfU1RBX0RFVklDRV9FTkFCTEVEIHwKLQkJICAgIEFDUElfU1RBX0RFVklDRV9VSSAgICAgIHwgQUNQSV9TVEFfREVWSUNFX0ZVTkNUSU9OSU5HOwotCQlicmVhazsKLQl9Ci0KLQkvKgogCSAqIEluaXRpYWxpemUgRGV2aWNlCiAJICogLS0tLS0tLS0tLS0tLS0tLS0KIAkgKiBUQkQ6IFN5bmNoIHdpdGggQ29yZSdzIGVudW1lcmF0aW9uL2luaXRpYWxpemF0aW9uIHByb2Nlc3MuCiAJICovCi0KLQkvKgotCSAqIEhhcmR3YXJlIElELCBVbmlxdWUgSUQsICYgQnVzIEFkZHJlc3MKLQkgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JICovCi0JYWNwaV9kZXZpY2Vfc2V0X2lkKGRldmljZSwgcGFyZW50LCBoYW5kbGUsIHR5cGUpOworCWFjcGlfZGV2aWNlX3NldF9pZChkZXZpY2UpOwogCiAJLyoKIAkgKiBQb3dlciBNYW5hZ2VtZW50CkBAIC0xMzQxLDEwICsxMjExLDEwIEBACiAJCQlnb3RvIGVuZDsKIAl9CiAKLQlpZiAoKHJlc3VsdCA9IGFjcGlfZGV2aWNlX3NldF9jb250ZXh0KGRldmljZSwgdHlwZSkpKQorCWlmICgocmVzdWx0ID0gYWNwaV9kZXZpY2Vfc2V0X2NvbnRleHQoZGV2aWNlKSkpCiAJCWdvdG8gZW5kOwogCi0JcmVzdWx0ID0gYWNwaV9kZXZpY2VfcmVnaXN0ZXIoZGV2aWNlLCBwYXJlbnQpOworCXJlc3VsdCA9IGFjcGlfZGV2aWNlX3JlZ2lzdGVyKGRldmljZSk7CiAKIAkvKgogCSAqIEJpbmQgX0FEUi1CYXNlZCBEZXZpY2VzIHdoZW4gaG90IGFkZApAQCAtMTM1NSwxNjUgKzEyMjUsMTQzIEBACiAJfQogCiBlbmQ6Ci0JaWYgKCFyZXN1bHQpCisJaWYgKCFyZXN1bHQpIHsKKwkJYWNwaV9nZXRfbmFtZShoYW5kbGUsIEFDUElfRlVMTF9QQVRITkFNRSwgJmJ1ZmZlcik7CisJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfSU5GTywKKwkJCSJBZGRpbmcgJXMgWyVzXSBwYXJlbnQgJXNcbiIsIGRldl9uYW1lKCZkZXZpY2UtPmRldiksCisJCQkgKGNoYXIgKikgYnVmZmVyLnBvaW50ZXIsCisJCQkgZGV2aWNlLT5wYXJlbnQgPyBkZXZfbmFtZSgmZGV2aWNlLT5wYXJlbnQtPmRldikgOgorCQkJCQkgICIobnVsbCkiKSk7CisJCWtmcmVlKGJ1ZmZlci5wb2ludGVyKTsKIAkJKmNoaWxkID0gZGV2aWNlOwotCWVsc2UKKwl9IGVsc2UKIAkJYWNwaV9kZXZpY2VfcmVsZWFzZSgmZGV2aWNlLT5kZXYpOwogCiAJcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIGludCBhY3BpX2J1c19zY2FuKHN0cnVjdCBhY3BpX2RldmljZSAqc3RhcnQsIHN0cnVjdCBhY3BpX2J1c19vcHMgKm9wcykKKyNkZWZpbmUgQUNQSV9TVEFfREVGQVVMVCAoQUNQSV9TVEFfREVWSUNFX1BSRVNFTlQgfCBBQ1BJX1NUQV9ERVZJQ0VfRU5BQkxFRCB8IFwKKwkJCSAgQUNQSV9TVEFfREVWSUNFX1VJICAgICAgfCBBQ1BJX1NUQV9ERVZJQ0VfRlVOQ1RJT05JTkcpCisKK3N0YXRpYyBpbnQgYWNwaV9idXNfdHlwZV9hbmRfc3RhdHVzKGFjcGlfaGFuZGxlIGhhbmRsZSwgaW50ICp0eXBlLAorCQkJCSAgICB1bnNpZ25lZCBsb25nIGxvbmcgKnN0YSkKIHsKLQlhY3BpX3N0YXR1cyBzdGF0dXMgPSBBRV9PSzsKLQlzdHJ1Y3QgYWNwaV9kZXZpY2UgKnBhcmVudCA9IE5VTEw7Ci0Jc3RydWN0IGFjcGlfZGV2aWNlICpjaGlsZCA9IE5VTEw7Ci0JYWNwaV9oYW5kbGUgcGhhbmRsZSA9IE5VTEw7Ci0JYWNwaV9oYW5kbGUgY2hhbmRsZSA9IE5VTEw7Ci0JYWNwaV9vYmplY3RfdHlwZSB0eXBlID0gMDsKLQl1MzIgbGV2ZWwgPSAxOworCWFjcGlfc3RhdHVzIHN0YXR1czsKKwlhY3BpX29iamVjdF90eXBlIGFjcGlfdHlwZTsKIAorCXN0YXR1cyA9IGFjcGlfZ2V0X3R5cGUoaGFuZGxlLCAmYWNwaV90eXBlKTsKKwlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCisJCXJldHVybiAtRU5PREVWOwogCi0JaWYgKCFzdGFydCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlwYXJlbnQgPSBzdGFydDsKLQlwaGFuZGxlID0gc3RhcnQtPmhhbmRsZTsKLQotCS8qCi0JICogUGFyc2UgdGhyb3VnaCB0aGUgQUNQSSBuYW1lc3BhY2UsIGlkZW50aWZ5IGFsbCAnZGV2aWNlcycsIGFuZAotCSAqIGNyZWF0ZSBhIG5ldyAnc3RydWN0IGFjcGlfZGV2aWNlJyBmb3IgZWFjaC4KLQkgKi8KLQl3aGlsZSAoKGxldmVsID4gMCkgJiYgcGFyZW50KSB7Ci0KLQkJc3RhdHVzID0gYWNwaV9nZXRfbmV4dF9vYmplY3QoQUNQSV9UWVBFX0FOWSwgcGhhbmRsZSwKLQkJCQkJICAgICAgY2hhbmRsZSwgJmNoYW5kbGUpOwotCi0JCS8qCi0JCSAqIElmIHRoaXMgc2NvcGUgaXMgZXhoYXVzdGVkIHRoZW4gbW92ZSBvdXIgd2F5IGJhY2sgdXAuCi0JCSAqLwotCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJCWxldmVsLS07Ci0JCQljaGFuZGxlID0gcGhhbmRsZTsKLQkJCWFjcGlfZ2V0X3BhcmVudChwaGFuZGxlLCAmcGhhbmRsZSk7Ci0JCQlpZiAocGFyZW50LT5wYXJlbnQpCi0JCQkJcGFyZW50ID0gcGFyZW50LT5wYXJlbnQ7Ci0JCQljb250aW51ZTsKLQkJfQotCi0JCXN0YXR1cyA9IGFjcGlfZ2V0X3R5cGUoY2hhbmRsZSwgJnR5cGUpOworCXN3aXRjaCAoYWNwaV90eXBlKSB7CisJY2FzZSBBQ1BJX1RZUEVfQU5ZOgkJLyogZm9yIEFDUElfUk9PVF9PQkpFQ1QgKi8KKwljYXNlIEFDUElfVFlQRV9ERVZJQ0U6CisJCSp0eXBlID0gQUNQSV9CVVNfVFlQRV9ERVZJQ0U7CisJCXN0YXR1cyA9IGFjcGlfYnVzX2dldF9zdGF0dXNfaGFuZGxlKGhhbmRsZSwgc3RhKTsKIAkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKQotCQkJY29udGludWU7Ci0KLQkJLyoKLQkJICogSWYgdGhpcyBpcyBhIHNjb3BlIG9iamVjdCB0aGVuIHBhcnNlIGl0IChkZXB0aC1maXJzdCkuCi0JCSAqLwotCQlpZiAodHlwZSA9PSBBQ1BJX1RZUEVfTE9DQUxfU0NPUEUpIHsKLQkJCWxldmVsKys7Ci0JCQlwaGFuZGxlID0gY2hhbmRsZTsKLQkJCWNoYW5kbGUgPSBOVUxMOwotCQkJY29udGludWU7Ci0JCX0KLQotCQkvKgotCQkgKiBXZSdyZSBvbmx5IGludGVyZXN0ZWQgaW4gb2JqZWN0cyB0aGF0IHdlIGNvbnNpZGVyICdkZXZpY2VzJy4KLQkJICovCi0JCXN3aXRjaCAodHlwZSkgewotCQljYXNlIEFDUElfVFlQRV9ERVZJQ0U6Ci0JCQl0eXBlID0gQUNQSV9CVVNfVFlQRV9ERVZJQ0U7Ci0JCQlicmVhazsKLQkJY2FzZSBBQ1BJX1RZUEVfUFJPQ0VTU09SOgotCQkJdHlwZSA9IEFDUElfQlVTX1RZUEVfUFJPQ0VTU09SOwotCQkJYnJlYWs7Ci0JCWNhc2UgQUNQSV9UWVBFX1RIRVJNQUw6Ci0JCQl0eXBlID0gQUNQSV9CVVNfVFlQRV9USEVSTUFMOwotCQkJYnJlYWs7Ci0JCWNhc2UgQUNQSV9UWVBFX1BPV0VSOgotCQkJdHlwZSA9IEFDUElfQlVTX1RZUEVfUE9XRVI7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJaWYgKG9wcy0+YWNwaV9vcF9hZGQpCi0JCQlzdGF0dXMgPSBhY3BpX2FkZF9zaW5nbGVfb2JqZWN0KCZjaGlsZCwgcGFyZW50LAotCQkJCWNoYW5kbGUsIHR5cGUsIG9wcyk7Ci0JCWVsc2UKLQkJCXN0YXR1cyA9IGFjcGlfYnVzX2dldF9kZXZpY2UoY2hhbmRsZSwgJmNoaWxkKTsKLQorCQkJcmV0dXJuIC1FTk9ERVY7CisJCWJyZWFrOworCWNhc2UgQUNQSV9UWVBFX1BST0NFU1NPUjoKKwkJKnR5cGUgPSBBQ1BJX0JVU19UWVBFX1BST0NFU1NPUjsKKwkJc3RhdHVzID0gYWNwaV9idXNfZ2V0X3N0YXR1c19oYW5kbGUoaGFuZGxlLCBzdGEpOwogCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCi0JCQljb250aW51ZTsKLQotCQlpZiAob3BzLT5hY3BpX29wX3N0YXJ0ICYmICEob3BzLT5hY3BpX29wX2FkZCkpIHsKLQkJCXN0YXR1cyA9IGFjcGlfc3RhcnRfc2luZ2xlX29iamVjdChjaGlsZCk7Ci0JCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCi0JCQkJY29udGludWU7Ci0JCX0KLQotCQkvKgotCQkgKiBJZiB0aGUgZGV2aWNlIGlzIHByZXNlbnQsIGVuYWJsZWQsIGFuZCBmdW5jdGlvbmluZyB0aGVuCi0JCSAqIHBhcnNlIGl0cyBzY29wZSAoZGVwdGgtZmlyc3QpLiAgTm90ZSB0aGF0IHdlIG5lZWQgdG8KLQkJICogcmVwcmVzZW50IGFic2VudCBkZXZpY2VzIHRvIGZhY2lsaXRhdGUgUG5QIG5vdGlmaWNhdGlvbnMKLQkJICogLS0gYnV0IG9ubHkgdGhlIHN1YnRyZWUgaGVhZCAobm90IGFsbCBvZiBpdHMgY2hpbGRyZW4sCi0JCSAqIHdoaWNoIHdpbGwgYmUgZW51bWVyYXRlZCB3aGVuIHRoZSBwYXJlbnQgaXMgaW5zZXJ0ZWQpLgotCQkgKgotCQkgKiBUQkQ6IE5lZWQgbm90aWZpY2F0aW9ucyBhbmQgb3RoZXIgZGV0ZWN0aW9uIG1lY2hhbmlzbXMKLQkJICogICAgICBpbiBwbGFjZSBiZWZvcmUgd2UgY2FuIGZ1bGx5IGltcGxlbWVudCB0aGlzLgotCQkgKi8KLQkJIC8qCi0JCSAqIFdoZW4gdGhlIGRldmljZSBpcyBub3QgcHJlc2VudCBidXQgZnVuY3Rpb25hbCwgaXQgaXMgYWxzbwotCQkgKiBuZWNlc3NhcnkgdG8gc2NhbiB0aGUgY2hpbGRyZW4gb2YgdGhpcyBkZXZpY2UuCi0JCSAqLwotCQlpZiAoY2hpbGQtPnN0YXR1cy5wcmVzZW50IHx8ICghY2hpbGQtPnN0YXR1cy5wcmVzZW50ICYmCi0JCQkJCWNoaWxkLT5zdGF0dXMuZnVuY3Rpb25hbCkpIHsKLQkJCXN0YXR1cyA9IGFjcGlfZ2V0X25leHRfb2JqZWN0KEFDUElfVFlQRV9BTlksIGNoYW5kbGUsCi0JCQkJCQkgICAgICBOVUxMLCBOVUxMKTsKLQkJCWlmIChBQ1BJX1NVQ0NFU1Moc3RhdHVzKSkgewotCQkJCWxldmVsKys7Ci0JCQkJcGhhbmRsZSA9IGNoYW5kbGU7Ci0JCQkJY2hhbmRsZSA9IE5VTEw7Ci0JCQkJcGFyZW50ID0gY2hpbGQ7Ci0JCQl9Ci0JCX0KKwkJCXJldHVybiAtRU5PREVWOworCQlicmVhazsKKwljYXNlIEFDUElfVFlQRV9USEVSTUFMOgorCQkqdHlwZSA9IEFDUElfQlVTX1RZUEVfVEhFUk1BTDsKKwkJKnN0YSA9IEFDUElfU1RBX0RFRkFVTFQ7CisJCWJyZWFrOworCWNhc2UgQUNQSV9UWVBFX1BPV0VSOgorCQkqdHlwZSA9IEFDUElfQlVTX1RZUEVfUE9XRVI7CisJCSpzdGEgPSBBQ1BJX1NUQV9ERUZBVUxUOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGFjcGlfc3RhdHVzIGFjcGlfYnVzX2NoZWNrX2FkZChhY3BpX2hhbmRsZSBoYW5kbGUsIHUzMiBsdmwsCisJCQkJICAgICAgdm9pZCAqY29udGV4dCwgdm9pZCAqKnJldHVybl92YWx1ZSkKK3sKKwlzdHJ1Y3QgYWNwaV9idXNfb3BzICpvcHMgPSBjb250ZXh0OworCWludCB0eXBlOworCXVuc2lnbmVkIGxvbmcgbG9uZyBzdGE7CisJc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2U7CisJYWNwaV9zdGF0dXMgc3RhdHVzOworCWludCByZXN1bHQ7CisKKwlyZXN1bHQgPSBhY3BpX2J1c190eXBlX2FuZF9zdGF0dXMoaGFuZGxlLCAmdHlwZSwgJnN0YSk7CisJaWYgKHJlc3VsdCkKKwkJcmV0dXJuIEFFX09LOworCisJaWYgKCEoc3RhICYgQUNQSV9TVEFfREVWSUNFX1BSRVNFTlQpICYmCisJICAgICEoc3RhICYgQUNQSV9TVEFfREVWSUNFX0ZVTkNUSU9OSU5HKSkKKwkJcmV0dXJuIEFFX0NUUkxfREVQVEg7CisKKwkvKgorCSAqIFdlIG1heSBhbHJlYWR5IGhhdmUgYW4gYWNwaV9kZXZpY2UgZnJvbSBhIHByZXZpb3VzIGVudW1lcmF0aW9uLiAgSWYKKwkgKiBzbywgd2UgbmVlZG4ndCBhZGQgaXQgYWdhaW4sIGJ1dCB3ZSBtYXkgc3RpbGwgaGF2ZSB0byBzdGFydCBpdC4KKwkgKi8KKwlkZXZpY2UgPSBOVUxMOworCWFjcGlfYnVzX2dldF9kZXZpY2UoaGFuZGxlLCAmZGV2aWNlKTsKKwlpZiAob3BzLT5hY3BpX29wX2FkZCAmJiAhZGV2aWNlKQorCQlhY3BpX2FkZF9zaW5nbGVfb2JqZWN0KCZkZXZpY2UsIGhhbmRsZSwgdHlwZSwgc3RhLCBvcHMpOworCisJaWYgKCFkZXZpY2UpCisJCXJldHVybiBBRV9DVFJMX0RFUFRIOworCisJaWYgKG9wcy0+YWNwaV9vcF9zdGFydCAmJiAhKG9wcy0+YWNwaV9vcF9hZGQpKSB7CisJCXN0YXR1cyA9IGFjcGlfc3RhcnRfc2luZ2xlX29iamVjdChkZXZpY2UpOworCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCisJCQlyZXR1cm4gQUVfQ1RSTF9ERVBUSDsKKwl9CisKKwlpZiAoISpyZXR1cm5fdmFsdWUpCisJCSpyZXR1cm5fdmFsdWUgPSBkZXZpY2U7CisJcmV0dXJuIEFFX09LOworfQorCitzdGF0aWMgaW50IGFjcGlfYnVzX3NjYW4oYWNwaV9oYW5kbGUgaGFuZGxlLCBzdHJ1Y3QgYWNwaV9idXNfb3BzICpvcHMsCisJCQkgc3RydWN0IGFjcGlfZGV2aWNlICoqY2hpbGQpCit7CisJYWNwaV9zdGF0dXMgc3RhdHVzOworCXZvaWQgKmRldmljZSA9IE5VTEw7CisKKwlzdGF0dXMgPSBhY3BpX2J1c19jaGVja19hZGQoaGFuZGxlLCAwLCBvcHMsICZkZXZpY2UpOworCWlmIChBQ1BJX1NVQ0NFU1Moc3RhdHVzKSkKKwkJYWNwaV93YWxrX25hbWVzcGFjZShBQ1BJX1RZUEVfQU5ZLCBoYW5kbGUsIEFDUElfVUlOVDMyX01BWCwKKwkJCQkgICAgYWNwaV9idXNfY2hlY2tfYWRkLCBvcHMsICZkZXZpY2UpOworCisJaWYgKGNoaWxkKQorCQkqY2hpbGQgPSBkZXZpY2U7CisJcmV0dXJuIDA7Cit9CisKIGludAogYWNwaV9idXNfYWRkKHN0cnVjdCBhY3BpX2RldmljZSAqKmNoaWxkLAogCSAgICAgc3RydWN0IGFjcGlfZGV2aWNlICpwYXJlbnQsIGFjcGlfaGFuZGxlIGhhbmRsZSwgaW50IHR5cGUpCiB7Ci0JaW50IHJlc3VsdDsKIAlzdHJ1Y3QgYWNwaV9idXNfb3BzIG9wczsKIAogCW1lbXNldCgmb3BzLCAwLCBzaXplb2Yob3BzKSk7CiAJb3BzLmFjcGlfb3BfYWRkID0gMTsKIAotCXJlc3VsdCA9IGFjcGlfYWRkX3NpbmdsZV9vYmplY3QoY2hpbGQsIHBhcmVudCwgaGFuZGxlLCB0eXBlLCAmb3BzKTsKLQlpZiAoIXJlc3VsdCkKLQkJcmVzdWx0ID0gYWNwaV9idXNfc2NhbigqY2hpbGQsICZvcHMpOwotCi0JcmV0dXJuIHJlc3VsdDsKKwlhY3BpX2J1c19zY2FuKGhhbmRsZSwgJm9wcywgY2hpbGQpOworCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTChhY3BpX2J1c19hZGQpOwogCiBpbnQgYWNwaV9idXNfc3RhcnQoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UpCiB7Ci0JaW50IHJlc3VsdDsKIAlzdHJ1Y3QgYWNwaV9idXNfb3BzIG9wczsKIAorCW1lbXNldCgmb3BzLCAwLCBzaXplb2Yob3BzKSk7CisJb3BzLmFjcGlfb3Bfc3RhcnQgPSAxOwogCi0JaWYgKCFkZXZpY2UpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JcmVzdWx0ID0gYWNwaV9zdGFydF9zaW5nbGVfb2JqZWN0KGRldmljZSk7Ci0JaWYgKCFyZXN1bHQpIHsKLQkJbWVtc2V0KCZvcHMsIDAsIHNpemVvZihvcHMpKTsKLQkJb3BzLmFjcGlfb3Bfc3RhcnQgPSAxOwotCQlyZXN1bHQgPSBhY3BpX2J1c19zY2FuKGRldmljZSwgJm9wcyk7Ci0JfQotCXJldHVybiByZXN1bHQ7CisJYWNwaV9idXNfc2NhbihkZXZpY2UtPmhhbmRsZSwgJm9wcywgTlVMTCk7CisJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MKGFjcGlfYnVzX3N0YXJ0KTsKIApAQCAtMTU3MiwxNSArMTQyMCwxMiBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoYWNwaV9idXNfdHJpbSk7CiAKLXN0YXRpYyBpbnQgYWNwaV9idXNfc2Nhbl9maXhlZChzdHJ1Y3QgYWNwaV9kZXZpY2UgKnJvb3QpCitzdGF0aWMgaW50IGFjcGlfYnVzX3NjYW5fZml4ZWQodm9pZCkKIHsKIAlpbnQgcmVzdWx0ID0gMDsKIAlzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSA9IE5VTEw7CiAJc3RydWN0IGFjcGlfYnVzX29wcyBvcHM7CiAKLQlpZiAoIXJvb3QpCi0JCXJldHVybiAtRU5PREVWOwotCiAJbWVtc2V0KCZvcHMsIDAsIHNpemVvZihvcHMpKTsKIAlvcHMuYWNwaV9vcF9hZGQgPSAxOwogCW9wcy5hY3BpX29wX3N0YXJ0ID0gMTsKQEAgLTE1ODksMTYgKzE0MzQsMTYgQEAKIAkgKiBFbnVtZXJhdGUgYWxsIGZpeGVkLWZlYXR1cmUgZGV2aWNlcy4KIAkgKi8KIAlpZiAoKGFjcGlfZ2JsX0ZBRFQuZmxhZ3MgJiBBQ1BJX0ZBRFRfUE9XRVJfQlVUVE9OKSA9PSAwKSB7Ci0JCXJlc3VsdCA9IGFjcGlfYWRkX3NpbmdsZV9vYmplY3QoJmRldmljZSwgYWNwaV9yb290LAotCQkJCQkJTlVMTCwKKwkJcmVzdWx0ID0gYWNwaV9hZGRfc2luZ2xlX29iamVjdCgmZGV2aWNlLCBOVUxMLAogCQkJCQkJQUNQSV9CVVNfVFlQRV9QT1dFUl9CVVRUT04sCisJCQkJCQlBQ1BJX1NUQV9ERUZBVUxULAogCQkJCQkJJm9wcyk7CiAJfQogCiAJaWYgKChhY3BpX2dibF9GQURULmZsYWdzICYgQUNQSV9GQURUX1NMRUVQX0JVVFRPTikgPT0gMCkgewotCQlyZXN1bHQgPSBhY3BpX2FkZF9zaW5nbGVfb2JqZWN0KCZkZXZpY2UsIGFjcGlfcm9vdCwKLQkJCQkJCU5VTEwsCisJCXJlc3VsdCA9IGFjcGlfYWRkX3NpbmdsZV9vYmplY3QoJmRldmljZSwgTlVMTCwKIAkJCQkJCUFDUElfQlVTX1RZUEVfU0xFRVBfQlVUVE9OLAorCQkJCQkJQUNQSV9TVEFfREVGQVVMVCwKIAkJCQkJCSZvcHMpOwogCX0KIApAQCAtMTYyMSwyNCArMTQ2NiwxNSBAQAogCX0KIAogCS8qCi0JICogQ3JlYXRlIHRoZSByb290IGRldmljZSBpbiB0aGUgYnVzJ3MgZGV2aWNlIHRyZWUKLQkgKi8KLQlyZXN1bHQgPSBhY3BpX2FkZF9zaW5nbGVfb2JqZWN0KCZhY3BpX3Jvb3QsIE5VTEwsIEFDUElfUk9PVF9PQkpFQ1QsCi0JCQkJCUFDUElfQlVTX1RZUEVfU1lTVEVNLCAmb3BzKTsKLQlpZiAocmVzdWx0KQotCQlnb3RvIERvbmU7Ci0KLQkvKgogCSAqIEVudW1lcmF0ZSBkZXZpY2VzIGluIHRoZSBBQ1BJIG5hbWVzcGFjZS4KIAkgKi8KLQlyZXN1bHQgPSBhY3BpX2J1c19zY2FuX2ZpeGVkKGFjcGlfcm9vdCk7CisJcmVzdWx0ID0gYWNwaV9idXNfc2NhbihBQ1BJX1JPT1RfT0JKRUNULCAmb3BzLCAmYWNwaV9yb290KTsKIAogCWlmICghcmVzdWx0KQotCQlyZXN1bHQgPSBhY3BpX2J1c19zY2FuKGFjcGlfcm9vdCwgJm9wcyk7CisJCXJlc3VsdCA9IGFjcGlfYnVzX3NjYW5fZml4ZWQoKTsKIAogCWlmIChyZXN1bHQpCiAJCWFjcGlfZGV2aWNlX3VucmVnaXN0ZXIoYWNwaV9yb290LCBBQ1BJX0JVU19SRU1PVkFMX05PUk1BTCk7CiAKLURvbmU6CiAJcmV0dXJuIHJlc3VsdDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS92aWRlby5jIGIvZHJpdmVycy9hY3BpL3ZpZGVvLmMKaW5kZXggOTRiMWE0Yy4uNjRlM2M1OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3ZpZGVvLmMKKysrIGIvZHJpdmVycy9hY3BpL3ZpZGVvLmMKQEAgLTI4NSw3ICsyODUsNyBAQAogCQkJCQkJc3RydWN0IGZpbGUgKmZpbGUpOwogc3RhdGljIHNzaXplX3QgYWNwaV92aWRlb19kZXZpY2Vfd3JpdGVfYnJpZ2h0bmVzcyhzdHJ1Y3QgZmlsZSAqZmlsZSwKIAljb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLCBzaXplX3QgY291bnQsIGxvZmZfdCAqZGF0YSk7Ci1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBhY3BpX3ZpZGVvX2RldmljZV9icmlnaHRuZXNzX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBhY3BpX3ZpZGVvX2RldmljZV9icmlnaHRuZXNzX2ZvcHMgPSB7CiAJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLm9wZW4gPSBhY3BpX3ZpZGVvX2RldmljZV9icmlnaHRuZXNzX29wZW5fZnMsCiAJLnJlYWQgPSBzZXFfcmVhZCwKQEAgLTExMDksNyArMTEwOSwxMiBAQAogCSAqLwogCiAJLyogRG9lcyB0aGlzIGRldmljZSBzdXBwb3J0IHZpZGVvIHN3aXRjaGluZz8gKi8KLQlpZiAodmlkZW8tPmNhcC5fRE9TKSB7CisJaWYgKHZpZGVvLT5jYXAuX0RPUyB8fCB2aWRlby0+Y2FwLl9ET0QpIHsKKwkJaWYgKCF2aWRlby0+Y2FwLl9ET1MpIHsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgRldfQlVHCisJCQkJIkFDUEkoJXMpIGRlZmluZXMgX0RPRCBidXQgbm90IF9ET1NcbiIsCisJCQkJYWNwaV9kZXZpY2VfYmlkKHZpZGVvLT5kZXZpY2UpKTsKKwkJfQogCQl2aWRlby0+ZmxhZ3MubXVsdGloZWFkID0gMTsKIAkJc3RhdHVzID0gMDsKIAl9CkBAIC0xOTg2LDYgKzE5OTEsMTAgQEAKIAogCXJlc3VsdCA9IGFjcGlfdmlkZW9fZGV2aWNlX2xjZF9zZXRfbGV2ZWwoZGV2aWNlLCBsZXZlbF9uZXh0KTsKIAorCWlmICghcmVzdWx0KQorCQliYWNrbGlnaHRfZm9yY2VfdXBkYXRlKGRldmljZS0+YmFja2xpZ2h0LAorCQkJCSAgICAgICBCQUNLTElHSFRfVVBEQVRFX0hPVEtFWSk7CisKIG91dDoKIAlpZiAocmVzdWx0KQogCQlwcmludGsoS0VSTl9FUlIgUFJFRklYICJGYWlsZWQgdG8gc3dpdGNoIHRoZSBicmlnaHRuZXNzXG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS92aWRlb19kZXRlY3QuYyBiL2RyaXZlcnMvYWNwaS92aWRlb19kZXRlY3QuYwppbmRleCA3MDMyZjI1Li41NzU1OTNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvdmlkZW9fZGV0ZWN0LmMKKysrIGIvZHJpdmVycy9hY3BpL3ZpZGVvX2RldGVjdC5jCkBAIC04NCw3ICs4NCw3IEBACiAJCXJldHVybiAwOwogCiAJLyogRG9lcyB0aGlzIGRldmljZSBhYmxlIHRvIHN1cHBvcnQgdmlkZW8gc3dpdGNoaW5nID8gKi8KLQlpZiAoQUNQSV9TVUNDRVNTKGFjcGlfZ2V0X2hhbmRsZShkZXZpY2UtPmhhbmRsZSwgIl9ET0QiLCAmaF9kdW1teSkpICYmCisJaWYgKEFDUElfU1VDQ0VTUyhhY3BpX2dldF9oYW5kbGUoZGV2aWNlLT5oYW5kbGUsICJfRE9EIiwgJmhfZHVtbXkpKSB8fAogCSAgICBBQ1BJX1NVQ0NFU1MoYWNwaV9nZXRfaGFuZGxlKGRldmljZS0+aGFuZGxlLCAiX0RPUyIsICZoX2R1bW15KSkpCiAJCXZpZGVvX2NhcHMgfD0gQUNQSV9WSURFT19PVVRQVVRfU1dJVENISU5HOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9haGNpLmMgYi9kcml2ZXJzL2F0YS9haGNpLmMKaW5kZXggYWNkMTE2Mi4uYTA2ZjVkNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvYWhjaS5jCisrKyBiL2RyaXZlcnMvYXRhL2FoY2kuYwpAQCAtMTIyLDYgKzEyMiw3IEBACiAJSE9TVF9WRVJTSU9OCQk9IDB4MTAsIC8qIEFIQ0kgc3BlYy4gdmVyc2lvbiBjb21wbGlhbmN5ICovCiAJSE9TVF9FTV9MT0MJCT0gMHgxYywgLyogRW5jbG9zdXJlIE1hbmFnZW1lbnQgbG9jYXRpb24gKi8KIAlIT1NUX0VNX0NUTAkJPSAweDIwLCAvKiBFbmNsb3N1cmUgTWFuYWdlbWVudCBDb250cm9sICovCisJSE9TVF9DQVAyCQk9IDB4MjQsIC8qIGhvc3QgY2FwYWJpbGl0aWVzLCBleHRlbmRlZCAqLwogCiAJLyogSE9TVF9DVEwgYml0cyAqLwogCUhPU1RfUkVTRVQJCT0gKDEgPDwgMCksICAvKiByZXNldCBjb250cm9sbGVyOyBzZWxmLWNsZWFyICovCkBAIC0xMjksMTYgKzEzMCwyOSBAQAogCUhPU1RfQUhDSV9FTgkJPSAoMSA8PCAzMSksIC8qIEFIQ0kgZW5hYmxlZCAqLwogCiAJLyogSE9TVF9DQVAgYml0cyAqLworCUhPU1RfQ0FQX1NYUwkJPSAoMSA8PCA1KSwgIC8qIFN1cHBvcnRzIEV4dGVybmFsIFNBVEEgKi8KIAlIT1NUX0NBUF9FTVMJCT0gKDEgPDwgNiksICAvKiBFbmNsb3N1cmUgTWFuYWdlbWVudCBzdXBwb3J0ICovCi0JSE9TVF9DQVBfU1NDCQk9ICgxIDw8IDE0KSwgLyogU2x1bWJlciBjYXBhYmxlICovCisJSE9TVF9DQVBfQ0NDCQk9ICgxIDw8IDcpLCAgLyogQ29tbWFuZCBDb21wbGV0aW9uIENvYWxlc2NpbmcgKi8KKwlIT1NUX0NBUF9QQVJUCQk9ICgxIDw8IDEzKSwgLyogUGFydGlhbCBzdGF0ZSBjYXBhYmxlICovCisJSE9TVF9DQVBfU1NDCQk9ICgxIDw8IDE0KSwgLyogU2x1bWJlciBzdGF0ZSBjYXBhYmxlICovCisJSE9TVF9DQVBfUElPX01VTFRJCT0gKDEgPDwgMTUpLCAvKiBQSU8gbXVsdGlwbGUgRFJRIHN1cHBvcnQgKi8KKwlIT1NUX0NBUF9GQlMJCT0gKDEgPDwgMTYpLCAvKiBGSVMtYmFzZWQgc3dpdGNoaW5nIHN1cHBvcnQgKi8KIAlIT1NUX0NBUF9QTVAJCT0gKDEgPDwgMTcpLCAvKiBQb3J0IE11bHRpcGxpZXIgc3VwcG9ydCAqLworCUhPU1RfQ0FQX09OTFkJCT0gKDEgPDwgMTgpLCAvKiBTdXBwb3J0cyBBSENJIG1vZGUgb25seSAqLwogCUhPU1RfQ0FQX0NMTwkJPSAoMSA8PCAyNCksIC8qIENvbW1hbmQgTGlzdCBPdmVycmlkZSBzdXBwb3J0ICovCisJSE9TVF9DQVBfTEVECQk9ICgxIDw8IDI1KSwgLyogU3VwcG9ydHMgYWN0aXZpdHkgTEVEICovCiAJSE9TVF9DQVBfQUxQTQkJPSAoMSA8PCAyNiksIC8qIEFnZ3Jlc3NpdmUgTGluayBQTSBzdXBwb3J0ICovCiAJSE9TVF9DQVBfU1NTCQk9ICgxIDw8IDI3KSwgLyogU3RhZ2dlcmVkIFNwaW4tdXAgKi8KKwlIT1NUX0NBUF9NUFMJCT0gKDEgPDwgMjgpLCAvKiBNZWNoYW5pY2FsIHByZXNlbmNlIHN3aXRjaCAqLwogCUhPU1RfQ0FQX1NOVEYJCT0gKDEgPDwgMjkpLCAvKiBTTm90aWZpY2F0aW9uIHJlZ2lzdGVyICovCiAJSE9TVF9DQVBfTkNRCQk9ICgxIDw8IDMwKSwgLyogTmF0aXZlIENvbW1hbmQgUXVldWVpbmcgKi8KIAlIT1NUX0NBUF82NAkJPSAoMSA8PCAzMSksIC8qIFBDSSBEQUMgKDY0LWJpdCBETUEpIHN1cHBvcnQgKi8KIAorCS8qIEhPU1RfQ0FQMiBiaXRzICovCisJSE9TVF9DQVAyX0JPSAkJPSAoMSA8PCAwKSwgIC8qIEJJT1MvT1MgaGFuZG9mZiBzdXBwb3J0ZWQgKi8KKwlIT1NUX0NBUDJfTlZNSENJCT0gKDEgPDwgMSksICAvKiBOVk1IQ0kgc3VwcG9ydGVkICovCisJSE9TVF9DQVAyX0FQU1QJCT0gKDEgPDwgMiksICAvKiBBdXRvbWF0aWMgcGFydGlhbCB0byBzbHVtYmVyICovCisKIAkvKiByZWdpc3RlcnMgZm9yIGVhY2ggU0FUQSBwb3J0ICovCiAJUE9SVF9MU1RfQUREUgkJPSAweDAwLCAvKiBjb21tYW5kIGxpc3QgRE1BIGFkZHIgKi8KIAlQT1JUX0xTVF9BRERSX0hJCT0gMHgwNCwgLyogY29tbWFuZCBsaXN0IERNQSBhZGRyIGhpICovCkBAIC0yNjcsOCArMjgxLDEwIEBACiBzdHJ1Y3QgYWhjaV9ob3N0X3ByaXYgewogCXVuc2lnbmVkIGludAkJZmxhZ3M7CQkvKiBBSENJX0hGTEFHXyogKi8KIAl1MzIJCQljYXA7CQkvKiBjYXAgdG8gdXNlICovCisJdTMyCQkJY2FwMjsJCS8qIGNhcDIgdG8gdXNlICovCiAJdTMyCQkJcG9ydF9tYXA7CS8qIHBvcnQgbWFwIHRvIHVzZSAqLwogCXUzMgkJCXNhdmVkX2NhcDsJLyogc2F2ZWQgaW5pdGlhbCBjYXAgKi8KKwl1MzIJCQlzYXZlZF9jYXAyOwkvKiBzYXZlZCBpbml0aWFsIGNhcDIgKi8KIAl1MzIJCQlzYXZlZF9wb3J0X21hcDsJLyogc2F2ZWQgaW5pdGlhbCBwb3J0X21hcCAqLwogCXUzMiAJCQllbV9sb2M7IC8qIGVuY2xvc3VyZSBtYW5hZ2VtZW50IGxvY2F0aW9uICovCiB9OwpAQCAtMzMxLDEyICszNDcsMTUgQEAKIAogc3RhdGljIHNzaXplX3QgYWhjaV9zaG93X2hvc3RfY2FwcyhzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCQkJICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1Zik7CitzdGF0aWMgc3NpemVfdCBhaGNpX3Nob3dfaG9zdF9jYXAyKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKTsKIHN0YXRpYyBzc2l6ZV90IGFoY2lfc2hvd19ob3N0X3ZlcnNpb24oc3RydWN0IGRldmljZSAqZGV2LAogCQkJCSAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpOwogc3RhdGljIHNzaXplX3QgYWhjaV9zaG93X3BvcnRfY21kKHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCQkgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpOwogCiBERVZJQ0VfQVRUUihhaGNpX2hvc3RfY2FwcywgU19JUlVHTywgYWhjaV9zaG93X2hvc3RfY2FwcywgTlVMTCk7CitERVZJQ0VfQVRUUihhaGNpX2hvc3RfY2FwMiwgU19JUlVHTywgYWhjaV9zaG93X2hvc3RfY2FwMiwgTlVMTCk7CiBERVZJQ0VfQVRUUihhaGNpX2hvc3RfdmVyc2lvbiwgU19JUlVHTywgYWhjaV9zaG93X2hvc3RfdmVyc2lvbiwgTlVMTCk7CiBERVZJQ0VfQVRUUihhaGNpX3BvcnRfY21kLCBTX0lSVUdPLCBhaGNpX3Nob3dfcG9ydF9jbWQsIE5VTEwpOwogCkBAIC0zNDUsNiArMzY0LDcgQEAKIAkmZGV2X2F0dHJfZW1fbWVzc2FnZV90eXBlLAogCSZkZXZfYXR0cl9lbV9tZXNzYWdlLAogCSZkZXZfYXR0cl9haGNpX2hvc3RfY2FwcywKKwkmZGV2X2F0dHJfYWhjaV9ob3N0X2NhcDIsCiAJJmRldl9hdHRyX2FoY2lfaG9zdF92ZXJzaW9uLAogCSZkZXZfYXR0cl9haGNpX3BvcnRfY21kLAogCU5VTEwKQEAgLTQ0Nyw3ICs0NjcsOCBAQAogCVtib2FyZF9haGNpX3NiNjAwXSA9CiAJewogCQlBSENJX0hGTEFHUwkoQUhDSV9IRkxBR19JR05fU0VSUl9JTlRFUk5BTCB8Ci0JCQkJIEFIQ0lfSEZMQUdfTk9fTVNJIHwgQUhDSV9IRkxBR19TRUNUMjU1KSwKKwkJCQkgQUhDSV9IRkxBR19OT19NU0kgfCBBSENJX0hGTEFHX1NFQ1QyNTUgfAorCQkJCSBBSENJX0hGTEFHXzMyQklUX09OTFkpLAogCQkuZmxhZ3MJCT0gQUhDSV9GTEFHX0NPTU1PTiwKIAkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCiAJCS51ZG1hX21hc2sJPSBBVEFfVURNQTYsCkBAIC01NTQsNyArNTc1LDcgQEAKIAl7IFBDSV9WREVWSUNFKEFUSSwgMHg0Mzk1KSwgYm9hcmRfYWhjaV9zYjcwMCB9LCAvKiBBVEkgU0I3MDAvODAwICovCiAKIAkvKiBBTUQgKi8KLQl7IFBDSV9WREVWSUNFKEFNRCwgMHg3ODAwKSwgYm9hcmRfYWhjaSB9LCAvKiBBTUQgU0I5MDAgKi8KKwl7IFBDSV9WREVWSUNFKEFNRCwgMHg3ODAwKSwgYm9hcmRfYWhjaSB9LCAvKiBBTUQgSHVkc29uLTIgKi8KIAkvKiBBTUQgaXMgdXNpbmcgUkFJRCBjbGFzcyBvbmx5IGZvciBhaGNpIGNvbnRyb2xsZXJzICovCiAJeyBQQ0lfVkVORE9SX0lEX0FNRCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwKIAkgIFBDSV9DTEFTU19TVE9SQUdFX1JBSUQgPDwgOCwgMHhmZmZmZmYsIGJvYXJkX2FoY2kgfSwKQEAgLTU4NCw2ICs2MDUsNyBAQAogCXsgUENJX1ZERVZJQ0UoTlZJRElBLCAweDA1NTkpLCBib2FyZF9haGNpX3llc25jcSB9LAkvKiBNQ1A2NyAqLwogCXsgUENJX1ZERVZJQ0UoTlZJRElBLCAweDA1NWEpLCBib2FyZF9haGNpX3llc25jcSB9LAkvKiBNQ1A2NyAqLwogCXsgUENJX1ZERVZJQ0UoTlZJRElBLCAweDA1NWIpLCBib2FyZF9haGNpX3llc25jcSB9LAkvKiBNQ1A2NyAqLworCXsgUENJX1ZERVZJQ0UoTlZJRElBLCAweDA1ODApLCBib2FyZF9haGNpX3llc25jcSB9LAkvKiBMaW51eCBJRCAqLwogCXsgUENJX1ZERVZJQ0UoTlZJRElBLCAweDA3ZjApLCBib2FyZF9haGNpX3llc25jcSB9LAkvKiBNQ1A3MyAqLwogCXsgUENJX1ZERVZJQ0UoTlZJRElBLCAweDA3ZjEpLCBib2FyZF9haGNpX3llc25jcSB9LAkvKiBNQ1A3MyAqLwogCXsgUENJX1ZERVZJQ0UoTlZJRElBLCAweDA3ZjIpLCBib2FyZF9haGNpX3llc25jcSB9LAkvKiBNQ1A3MyAqLwpAQCAtNzMyLDYgKzc1NCwxNiBAQAogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiV4XG4iLCBocHJpdi0+Y2FwKTsKIH0KIAorc3RhdGljIHNzaXplX3QgYWhjaV9zaG93X2hvc3RfY2FwMihzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGNsYXNzX3RvX3Nob3N0KGRldik7CisJc3RydWN0IGF0YV9wb3J0ICphcCA9IGF0YV9zaG9zdF90b19wb3J0KHNob3N0KTsKKwlzdHJ1Y3QgYWhjaV9ob3N0X3ByaXYgKmhwcml2ID0gYXAtPmhvc3QtPnByaXZhdGVfZGF0YTsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiV4XG4iLCBocHJpdi0+Y2FwMik7Cit9CisKIHN0YXRpYyBzc2l6ZV90IGFoY2lfc2hvd19ob3N0X3ZlcnNpb24oc3RydWN0IGRldmljZSAqZGV2LAogCQkJCSAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7CkBAIC03NzEsNyArODAzLDcgQEAKIAkJCQkgICAgIHN0cnVjdCBhaGNpX2hvc3RfcHJpdiAqaHByaXYpCiB7CiAJdm9pZCBfX2lvbWVtICptbWlvID0gcGNpbV9pb21hcF90YWJsZShwZGV2KVtBSENJX1BDSV9CQVJdOwotCXUzMiBjYXAsIHBvcnRfbWFwOworCXUzMiBjYXAsIGNhcDIsIHZlcnMsIHBvcnRfbWFwOwogCWludCBpOwogCWludCBtdjsKIApAQCAtNzg0LDYgKzgxNiwxNCBAQAogCWhwcml2LT5zYXZlZF9jYXAgPSBjYXAgPSByZWFkbChtbWlvICsgSE9TVF9DQVApOwogCWhwcml2LT5zYXZlZF9wb3J0X21hcCA9IHBvcnRfbWFwID0gcmVhZGwobW1pbyArIEhPU1RfUE9SVFNfSU1QTCk7CiAKKwkvKiBDQVAyIHJlZ2lzdGVyIGlzIG9ubHkgZGVmaW5lZCBmb3IgQUhDSSAxLjIgYW5kIGxhdGVyICovCisJdmVycyA9IHJlYWRsKG1taW8gKyBIT1NUX1ZFUlNJT04pOworCWlmICgodmVycyA+PiAxNikgPiAxIHx8CisJICAgKCh2ZXJzID4+IDE2KSA9PSAxICYmICh2ZXJzICYgMHhGRkZGKSA+PSAweDIwMCkpCisJCWhwcml2LT5zYXZlZF9jYXAyID0gY2FwMiA9IHJlYWRsKG1taW8gKyBIT1NUX0NBUDIpOworCWVsc2UKKwkJaHByaXYtPnNhdmVkX2NhcDIgPSBjYXAyID0gMDsKKwogCS8qIHNvbWUgY2hpcHMgaGF2ZSBlcnJhdGEgcHJldmVudGluZyA2NGJpdCB1c2UgKi8KIAlpZiAoKGNhcCAmIEhPU1RfQ0FQXzY0KSAmJiAoaHByaXYtPmZsYWdzICYgQUhDSV9IRkxBR18zMkJJVF9PTkxZKSkgewogCQlkZXZfcHJpbnRrKEtFUk5fSU5GTywgJnBkZXYtPmRldiwKQEAgLTg2OSw2ICs5MDksNyBAQAogCiAJLyogcmVjb3JkIHZhbHVlcyB0byB1c2UgZHVyaW5nIG9wZXJhdGlvbiAqLwogCWhwcml2LT5jYXAgPSBjYXA7CisJaHByaXYtPmNhcDIgPSBjYXAyOwogCWhwcml2LT5wb3J0X21hcCA9IHBvcnRfbWFwOwogfQogCkBAIC04ODcsNiArOTI4LDggQEAKIAl2b2lkIF9faW9tZW0gKm1taW8gPSBob3N0LT5pb21hcFtBSENJX1BDSV9CQVJdOwogCiAJd3JpdGVsKGhwcml2LT5zYXZlZF9jYXAsIG1taW8gKyBIT1NUX0NBUCk7CisJaWYgKGhwcml2LT5zYXZlZF9jYXAyKQorCQl3cml0ZWwoaHByaXYtPnNhdmVkX2NhcDIsIG1taW8gKyBIT1NUX0NBUDIpOwogCXdyaXRlbChocHJpdi0+c2F2ZWRfcG9ydF9tYXAsIG1taW8gKyBIT1NUX1BPUlRTX0lNUEwpOwogCSh2b2lkKSByZWFkbChtbWlvICsgSE9TVF9QT1JUU19JTVBMKTsJLyogZmx1c2ggKi8KIH0KQEAgLTI1MzQsMTMgKzI1NzcsMTQgQEAKIAlzdHJ1Y3QgYWhjaV9ob3N0X3ByaXYgKmhwcml2ID0gaG9zdC0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2Rldihob3N0LT5kZXYpOwogCXZvaWQgX19pb21lbSAqbW1pbyA9IGhvc3QtPmlvbWFwW0FIQ0lfUENJX0JBUl07Ci0JdTMyIHZlcnMsIGNhcCwgaW1wbCwgc3BlZWQ7CisJdTMyIHZlcnMsIGNhcCwgY2FwMiwgaW1wbCwgc3BlZWQ7CiAJY29uc3QgY2hhciAqc3BlZWRfczsKIAl1MTYgY2M7CiAJY29uc3QgY2hhciAqc2NjX3M7CiAKIAl2ZXJzID0gcmVhZGwobW1pbyArIEhPU1RfVkVSU0lPTik7CiAJY2FwID0gaHByaXYtPmNhcDsKKwljYXAyID0gaHByaXYtPmNhcDI7CiAJaW1wbCA9IGhwcml2LT5wb3J0X21hcDsKIAogCXNwZWVkID0gKGNhcCA+PiAyMCkgJiAweGY7CkBAIC0yNTgzLDI1ICsyNjI3LDI5IEBACiAJCSJmbGFnczogIgogCQkiJXMlcyVzJXMlcyVzJXMiCiAJCSIlcyVzJXMlcyVzJXMlcyIKLQkJIiVzXG4iCisJCSIlcyVzJXMlcyVzJXNcbiIKIAkJLAogCi0JCWNhcCAmICgxIDw8IDMxKSA/ICI2NGJpdCAiIDogIiIsCi0JCWNhcCAmICgxIDw8IDMwKSA/ICJuY3EgIiA6ICIiLAotCQljYXAgJiAoMSA8PCAyOSkgPyAic250ZiAiIDogIiIsCi0JCWNhcCAmICgxIDw8IDI4KSA/ICJpbGNrICIgOiAiIiwKLQkJY2FwICYgKDEgPDwgMjcpID8gInN0YWcgIiA6ICIiLAotCQljYXAgJiAoMSA8PCAyNikgPyAicG0gIiA6ICIiLAotCQljYXAgJiAoMSA8PCAyNSkgPyAibGVkICIgOiAiIiwKLQotCQljYXAgJiAoMSA8PCAyNCkgPyAiY2xvICIgOiAiIiwKLQkJY2FwICYgKDEgPDwgMTkpID8gIm56ICIgOiAiIiwKLQkJY2FwICYgKDEgPDwgMTgpID8gIm9ubHkgIiA6ICIiLAotCQljYXAgJiAoMSA8PCAxNykgPyAicG1wICIgOiAiIiwKLQkJY2FwICYgKDEgPDwgMTUpID8gInBpbyAiIDogIiIsCi0JCWNhcCAmICgxIDw8IDE0KSA/ICJzbHVtICIgOiAiIiwKLQkJY2FwICYgKDEgPDwgMTMpID8gInBhcnQgIiA6ICIiLAotCQljYXAgJiAoMSA8PCA2KSA/ICJlbXMgIjogIiIKKwkJY2FwICYgSE9TVF9DQVBfNjQgPyAiNjRiaXQgIiA6ICIiLAorCQljYXAgJiBIT1NUX0NBUF9OQ1EgPyAibmNxICIgOiAiIiwKKwkJY2FwICYgSE9TVF9DQVBfU05URiA/ICJzbnRmICIgOiAiIiwKKwkJY2FwICYgSE9TVF9DQVBfTVBTID8gImlsY2sgIiA6ICIiLAorCQljYXAgJiBIT1NUX0NBUF9TU1MgPyAic3RhZyAiIDogIiIsCisJCWNhcCAmIEhPU1RfQ0FQX0FMUE0gPyAicG0gIiA6ICIiLAorCQljYXAgJiBIT1NUX0NBUF9MRUQgPyAibGVkICIgOiAiIiwKKwkJY2FwICYgSE9TVF9DQVBfQ0xPID8gImNsbyAiIDogIiIsCisJCWNhcCAmIEhPU1RfQ0FQX09OTFkgPyAib25seSAiIDogIiIsCisJCWNhcCAmIEhPU1RfQ0FQX1BNUCA/ICJwbXAgIiA6ICIiLAorCQljYXAgJiBIT1NUX0NBUF9GQlMgPyAiZmJzICIgOiAiIiwKKwkJY2FwICYgSE9TVF9DQVBfUElPX01VTFRJID8gInBpbyAiIDogIiIsCisJCWNhcCAmIEhPU1RfQ0FQX1NTQyA/ICJzbHVtICIgOiAiIiwKKwkJY2FwICYgSE9TVF9DQVBfUEFSVCA/ICJwYXJ0ICIgOiAiIiwKKwkJY2FwICYgSE9TVF9DQVBfQ0NDID8gImNjYyAiIDogIiIsCisJCWNhcCAmIEhPU1RfQ0FQX0VNUyA/ICJlbXMgIiA6ICIiLAorCQljYXAgJiBIT1NUX0NBUF9TWFMgPyAic3hzICIgOiAiIiwKKwkJY2FwMiAmIEhPU1RfQ0FQMl9BUFNUID8gImFwc3QgIiA6ICIiLAorCQljYXAyICYgSE9TVF9DQVAyX05WTUhDSSA/ICJudm1wICIgOiAiIiwKKwkJY2FwMiAmIEhPU1RfQ0FQMl9CT0ggPyAiYm9oICIgOiAiIgogCQkpOwogfQogCkBAIC0yNjUwLDE3ICsyNjk4LDE1IEBACiAJfQogfQogCi0vKgotICogU0I2MDAgYWhjaSBjb250cm9sbGVyIG9uIGNlcnRhaW4gYm9hcmRzIGNhbid0IGRvIDY0Yml0IERNQSB3aXRoCi0gKiBvbGRlciBCSU9TLgotICovCi1zdGF0aWMgYm9vbCBhaGNpX3NiNjAwXzMyYml0X29ubHkoc3RydWN0IHBjaV9kZXYgKnBkZXYpCisvKiBvbmx5IHNvbWUgU0I2MDAgYWhjaSBjb250cm9sbGVycyBjYW4gZG8gNjRiaXQgRE1BICovCitzdGF0aWMgYm9vbCBhaGNpX3NiNjAwX2VuYWJsZV82NGJpdChzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGRtaV9zeXN0ZW1faWQgc3lzaWRzW10gPSB7CiAJCS8qCiAJCSAqIFRoZSBvbGRlc3QgdmVyc2lvbiBrbm93biB0byBiZSBicm9rZW4gaXMgMDkwMSBhbmQKIAkJICogd29ya2luZyBpcyAxNTAxIHdoaWNoIHdhcyByZWxlYXNlZCBvbiAyMDA3LTEwLTI2LgotCQkgKiBGb3JjZSAzMmJpdCBETUEgb24gYW55dGhpbmcgb2xkZXIgdGhhbiAxNTAxLgorCQkgKiBFbmFibGUgNjRiaXQgRE1BIG9uIDE1MDEgYW5kIGFueXRoaW5nIG5ld2VyLgorCQkgKgogCQkgKiBQbGVhc2UgcmVhZCBia28jOTQxMiBmb3IgbW9yZSBpbmZvLgogCQkgKi8KIAkJewpAQCAtMjY3Miw0OCArMjcxOCwyOSBAQAogCQkJfSwKIAkJCS5kcml2ZXJfZGF0YSA9ICIyMDA3MTAyNiIsCS8qIHl5eXltbWRkICovCiAJCX0sCi0JCS8qCi0JCSAqIEl0J3MgeWV0IHVua25vd24gd2hldGhlciBtb3JlIHJlY2VudCBCSU9TIGZpeGVzIHRoZQotCQkgKiBwcm9ibGVtLiAgQmxhY2tsaXN0IHRoZSB3aG9sZSBib2FyZCBmb3IgdGhlIHRpbWUKLQkJICogYmVpbmcuICBQbGVhc2UgcmVhZCB0aGUgZm9sbG93aW5nIHRocmVhZCBmb3IgbW9yZQotCQkgKiBpbmZvLgotCQkgKgotCQkgKiBodHRwOi8vdGhyZWFkLmdtYW5lLm9yZy9nbWFuZS5saW51eC5pZGUvNDIzMjYKLQkJICovCi0JCXsKLQkJCS5pZGVudCA9ICJHaWdhYnl0ZSBHQS1NQTY5Vk0tUzIiLAotCQkJLm1hdGNoZXMgPSB7Ci0JCQkJRE1JX01BVENIKERNSV9CT0FSRF9WRU5ET1IsCi0JCQkJCSAgIkdpZ2FieXRlIFRlY2hub2xvZ3kgQ28uLCBMdGQuIiksCi0JCQkJRE1JX01BVENIKERNSV9CT0FSRF9OQU1FLCAiR0EtTUE2OVZNLVMyIiksCi0JCQl9LAotCQl9LAogCQl7IH0KIAl9OwogCWNvbnN0IHN0cnVjdCBkbWlfc3lzdGVtX2lkICptYXRjaDsKKwlpbnQgeWVhciwgbW9udGgsIGRhdGU7CisJY2hhciBidWZbOV07CiAKIAltYXRjaCA9IGRtaV9maXJzdF9tYXRjaChzeXNpZHMpOwogCWlmIChwZGV2LT5idXMtPm51bWJlciAhPSAwIHx8IHBkZXYtPmRldmZuICE9IFBDSV9ERVZGTigweDEyLCAwKSB8fAogCSAgICAhbWF0Y2gpCiAJCXJldHVybiBmYWxzZTsKIAotCWlmIChtYXRjaC0+ZHJpdmVyX2RhdGEpIHsKLQkJaW50IHllYXIsIG1vbnRoLCBkYXRlOwotCQljaGFyIGJ1Zls5XTsKKwlkbWlfZ2V0X2RhdGUoRE1JX0JJT1NfREFURSwgJnllYXIsICZtb250aCwgJmRhdGUpOworCXNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlMDRkJTAyZCUwMmQiLCB5ZWFyLCBtb250aCwgZGF0ZSk7CiAKLQkJZG1pX2dldF9kYXRlKERNSV9CSU9TX0RBVEUsICZ5ZWFyLCAmbW9udGgsICZkYXRlKTsKLQkJc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiUwNGQlMDJkJTAyZCIsIHllYXIsIG1vbnRoLCBkYXRlKTsKLQotCQlpZiAoc3RyY21wKGJ1ZiwgbWF0Y2gtPmRyaXZlcl9kYXRhKSA+PSAwKQotCQkJcmV0dXJuIGZhbHNlOwotCisJaWYgKHN0cmNtcChidWYsIG1hdGNoLT5kcml2ZXJfZGF0YSkgPj0gMCkgeworCQlkZXZfcHJpbnRrKEtFUk5fV0FSTklORywgJnBkZXYtPmRldiwgIiVzOiBlbmFibGluZyA2NGJpdCBETUFcbiIsCisJCQkgICBtYXRjaC0+aWRlbnQpOworCQlyZXR1cm4gdHJ1ZTsKKwl9IGVsc2UgewogCQlkZXZfcHJpbnRrKEtFUk5fV0FSTklORywgJnBkZXYtPmRldiwgIiVzOiBCSU9TIHRvbyBvbGQsICIKIAkJCSAgICJmb3JjaW5nIDMyYml0IERNQSwgdXBkYXRlIEJJT1NcbiIsIG1hdGNoLT5pZGVudCk7Ci0JfSBlbHNlCi0JCWRldl9wcmludGsoS0VSTl9XQVJOSU5HLCAmcGRldi0+ZGV2LCAiJXM6IHRoaXMgYm9hcmQgY2FuJ3QgIgotCQkJICAgImRvIDY0Yml0IERNQSwgZm9yY2luZyAzMmJpdFxuIiwgbWF0Y2gtPmlkZW50KTsKLQotCXJldHVybiB0cnVlOworCQlyZXR1cm4gZmFsc2U7CisJfQogfQogCiBzdGF0aWMgYm9vbCBhaGNpX2Jyb2tlbl9zeXN0ZW1fcG93ZXJvZmYoc3RydWN0IHBjaV9kZXYgKnBkZXYpCkBAIC0yODU4LDYgKzI4ODUsNTUgQEAKIAlyZXR1cm4gcGRldi0+YnVzLT5udW1iZXIgPT0gKHZhbCA+PiA4KSAmJiBwZGV2LT5kZXZmbiA9PSAodmFsICYgMHhmZik7CiB9CiAKKyNpZmRlZiBDT05GSUdfQVRBX0FDUEkKK3N0YXRpYyB2b2lkIGFoY2lfZ3RmX2ZpbHRlcl93b3JrYXJvdW5kKHN0cnVjdCBhdGFfaG9zdCAqaG9zdCkKK3sKKwlzdGF0aWMgY29uc3Qgc3RydWN0IGRtaV9zeXN0ZW1faWQgc3lzaWRzW10gPSB7CisJCS8qCisJCSAqIEFzcGlyZSAzODEwVCBpc3N1ZXMgYSBidW5jaCBvZiBTQVRBIGVuYWJsZSBjb21tYW5kcworCQkgKiB2aWEgX0dURiBpbmNsdWRpbmcgYW4gaW52YWxpZCBvbmUgYW5kIG9uZSB3aGljaCBpcworCQkgKiByZWplY3RlZCBieSB0aGUgZGV2aWNlLiAgQW1vbmcgdGhlIHN1Y2Nlc3NmdWwgb25lcworCQkgKiBpcyBGUERNQSBub24temVybyBvZmZzZXQgZW5hYmxlIHdoaWNoIHdoZW4gZW5hYmxlZAorCQkgKiBvbmx5IG9uIHRoZSBkcml2ZSBzaWRlIGxlYWRzIHRvIE5DUSBjb21tYW5kCisJCSAqIGZhaWx1cmVzLiAgRmlsdGVyIGl0IG91dC4KKwkJICovCisJCXsKKwkJCS5pZGVudCA9ICJBc3BpcmUgMzgxMFQiLAorCQkJLm1hdGNoZXMgPSB7CisJCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiQWNlciIpLAorCQkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiQXNwaXJlIDM4MTBUIiksCisJCQl9LAorCQkJLmRyaXZlcl9kYXRhID0gKHZvaWQgKilBVEFfQUNQSV9GSUxURVJfRlBETUFfT0ZGU0VULAorCQl9LAorCQl7IH0KKwl9OworCWNvbnN0IHN0cnVjdCBkbWlfc3lzdGVtX2lkICpkbWkgPSBkbWlfZmlyc3RfbWF0Y2goc3lzaWRzKTsKKwl1bnNpZ25lZCBpbnQgZmlsdGVyOworCWludCBpOworCisJaWYgKCFkbWkpCisJCXJldHVybjsKKworCWZpbHRlciA9ICh1bnNpZ25lZCBsb25nKWRtaS0+ZHJpdmVyX2RhdGE7CisJZGV2X3ByaW50ayhLRVJOX0lORk8sIGhvc3QtPmRldiwKKwkJICAgImFwcGx5aW5nIGV4dHJhIEFDUEkgX0dURiBmaWx0ZXIgMHgleCBmb3IgJXNcbiIsCisJCSAgIGZpbHRlciwgZG1pLT5pZGVudCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgaG9zdC0+bl9wb3J0czsgaSsrKSB7CisJCXN0cnVjdCBhdGFfcG9ydCAqYXAgPSBob3N0LT5wb3J0c1tpXTsKKwkJc3RydWN0IGF0YV9saW5rICpsaW5rOworCQlzdHJ1Y3QgYXRhX2RldmljZSAqZGV2OworCisJCWF0YV9mb3JfZWFjaF9saW5rKGxpbmssIGFwLCBFREdFKQorCQkJYXRhX2Zvcl9lYWNoX2RldihkZXYsIGxpbmssIEFMTCkKKwkJCQlkZXYtPmd0Zl9maWx0ZXIgfD0gZmlsdGVyOworCX0KK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgYWhjaV9ndGZfZmlsdGVyX3dvcmthcm91bmQoc3RydWN0IGF0YV9ob3N0ICpob3N0KQore30KKyNlbmRpZgorCiBzdGF0aWMgaW50IGFoY2lfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCiB7CiAJc3RhdGljIGludCBwcmludGVkX3ZlcnNpb247CkBAIC0yOTI2LDkgKzMwMDIsOSBAQAogCWlmIChib2FyZF9pZCA9PSBib2FyZF9haGNpX3NiNzAwICYmIHBkZXYtPnJldmlzaW9uID49IDB4NDApCiAJCWhwcml2LT5mbGFncyAmPSB+QUhDSV9IRkxBR19JR05fU0VSUl9JTlRFUk5BTDsKIAotCS8qIGFwcGx5IHNiNjAwIDMyYml0IG9ubHkgcXVpcmsgKi8KLQlpZiAoYWhjaV9zYjYwMF8zMmJpdF9vbmx5KHBkZXYpKQotCQlocHJpdi0+ZmxhZ3MgfD0gQUhDSV9IRkxBR18zMkJJVF9PTkxZOworCS8qIG9ubHkgc29tZSBTQjYwMHMgY2FuIGRvIDY0Yml0IERNQSAqLworCWlmIChhaGNpX3NiNjAwX2VuYWJsZV82NGJpdChwZGV2KSkKKwkJaHByaXYtPmZsYWdzICY9IH5BSENJX0hGTEFHXzMyQklUX09OTFk7CiAKIAlpZiAoKGhwcml2LT5mbGFncyAmIEFIQ0lfSEZMQUdfTk9fTVNJKSB8fCBwY2lfZW5hYmxlX21zaShwZGV2KSkKIAkJcGNpX2ludHgocGRldiwgMSk7CkBAIC0zMDIzLDYgKzMwOTksOSBAQAogCS8qIGFwcGx5IHdvcmthcm91bmQgZm9yIEFTVVMgUDVXIERIIERlbHV4ZSBtYWluYm9hcmQgKi8KIAlhaGNpX3A1d2RoX3dvcmthcm91bmQoaG9zdCk7CiAKKwkvKiBhcHBseSBndGYgZmlsdGVyIHF1aXJrICovCisJYWhjaV9ndGZfZmlsdGVyX3dvcmthcm91bmQoaG9zdCk7CisKIAkvKiBpbml0aWFsaXplIGFkYXB0ZXIgKi8KIAlyYyA9IGFoY2lfY29uZmlndXJlX2RtYV9tYXNrcyhwZGV2LCBocHJpdi0+Y2FwICYgSE9TVF9DQVBfNjQpOwogCWlmIChyYykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL2xpYmF0YS1hY3BpLmMgYi9kcml2ZXJzL2F0YS9saWJhdGEtYWNwaS5jCmluZGV4IDAxOTY0YjYuLmIwODgyY2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL2xpYmF0YS1hY3BpLmMKKysrIGIvZHJpdmVycy9hdGEvbGliYXRhLWFjcGkuYwpAQCAtMjAsMTkgKzIwLDkgQEAKIAogI2luY2x1ZGUgPGFjcGkvYWNwaV9idXMuaD4KIAotZW51bSB7Ci0JQVRBX0FDUElfRklMVEVSX1NFVFhGRVIJPSAxIDw8IDAsCi0JQVRBX0FDUElfRklMVEVSX0xPQ0sJPSAxIDw8IDEsCi0JQVRBX0FDUElfRklMVEVSX0RJUE0JPSAxIDw8IDIsCi0KLQlBVEFfQUNQSV9GSUxURVJfREVGQVVMVAk9IEFUQV9BQ1BJX0ZJTFRFUl9TRVRYRkVSIHwKLQkJCQkgIEFUQV9BQ1BJX0ZJTFRFUl9MT0NLIHwKLQkJCQkgIEFUQV9BQ1BJX0ZJTFRFUl9ESVBNLAotfTsKLQotc3RhdGljIHVuc2lnbmVkIGludCBhdGFfYWNwaV9ndGZfZmlsdGVyID0gQVRBX0FDUElfRklMVEVSX0RFRkFVTFQ7Cit1bnNpZ25lZCBpbnQgYXRhX2FjcGlfZ3RmX2ZpbHRlciA9IEFUQV9BQ1BJX0ZJTFRFUl9ERUZBVUxUOwogbW9kdWxlX3BhcmFtX25hbWVkKGFjcGlfZ3RmX2ZpbHRlciwgYXRhX2FjcGlfZ3RmX2ZpbHRlciwgaW50LCAwNjQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MoYWNwaV9ndGZfZmlsdGVyLCAiZmlsdGVyIG1hc2sgZm9yIEFDUEkgX0dURiBjb21tYW5kcywgc2V0IHRvIGZpbHRlciBvdXQgKDB4MT1zZXQgeGZlcm1vZGUsIDB4Mj1sb2NrL2ZyZWV6ZSBsb2NrLCAweDQ9RElQTSkiKTsKK01PRFVMRV9QQVJNX0RFU0MoYWNwaV9ndGZfZmlsdGVyLCAiZmlsdGVyIG1hc2sgZm9yIEFDUEkgX0dURiBjb21tYW5kcywgc2V0IHRvIGZpbHRlciBvdXQgKDB4MT1zZXQgeGZlcm1vZGUsIDB4Mj1sb2NrL2ZyZWV6ZSBsb2NrLCAweDQ9RElQTSwgMHg4PUZQRE1BIG5vbi16ZXJvIG9mZnNldCwgMHgxMD1GUERNQSBETUEgU2V0dXAgRklTIGF1dG8tYWN0aXZhdGUpIik7CiAKICNkZWZpbmUgTk9fUE9SVF9NVUxUCQkweGZmZmYKICNkZWZpbmUgU0FUQV9BRFIocm9vdCwgcG1wKQkoKChyb290KSA8PCAxNikgfCAocG1wKSkKQEAgLTYxMywxMCArNjAzLDExIEBACiAJdGYtPmNvbW1hbmQgPSBndGYtPnRmWzZdOwkvKiAweDFmNyAqLwogfQogCi1zdGF0aWMgaW50IGF0YV9hY3BpX2ZpbHRlcl90Zihjb25zdCBzdHJ1Y3QgYXRhX3Rhc2tmaWxlICp0ZiwKK3N0YXRpYyBpbnQgYXRhX2FjcGlfZmlsdGVyX3RmKHN0cnVjdCBhdGFfZGV2aWNlICpkZXYsCisJCQkgICAgICBjb25zdCBzdHJ1Y3QgYXRhX3Rhc2tmaWxlICp0ZiwKIAkJCSAgICAgIGNvbnN0IHN0cnVjdCBhdGFfdGFza2ZpbGUgKnB0ZikKIHsKLQlpZiAoYXRhX2FjcGlfZ3RmX2ZpbHRlciAmIEFUQV9BQ1BJX0ZJTFRFUl9TRVRYRkVSKSB7CisJaWYgKGRldi0+Z3RmX2ZpbHRlciAmIEFUQV9BQ1BJX0ZJTFRFUl9TRVRYRkVSKSB7CiAJCS8qIGxpYmF0YSBkb2Vzbid0IHVzZSBBQ1BJIHRvIGNvbmZpZ3VyZSB0cmFuc2ZlciBtb2RlLgogCQkgKiBJdCB3aWxsIG9ubHkgY29uZnVzZSBkZXZpY2UgY29uZmlndXJhdGlvbi4gIFNraXAuCiAJCSAqLwpAQCAtNjI1LDcgKzYxNiw3IEBACiAJCQlyZXR1cm4gMTsKIAl9CiAKLQlpZiAoYXRhX2FjcGlfZ3RmX2ZpbHRlciAmIEFUQV9BQ1BJX0ZJTFRFUl9MT0NLKSB7CisJaWYgKGRldi0+Z3RmX2ZpbHRlciAmIEFUQV9BQ1BJX0ZJTFRFUl9MT0NLKSB7CiAJCS8qIEJJT1Mgd3JpdGVycywgc29ycnkgYnV0IHdlIGRvbid0IHdhbm5hIGxvY2sKIAkJICogZmVhdHVyZXMgdW5sZXNzIHRoZSB1c2VyIGV4cGxpY2l0bHkgc2FpZCBzby4KIAkJICovCkBAIC02NDcsMTIgKzYzOCwyMyBAQAogCQkJcmV0dXJuIDE7CiAJfQogCi0JaWYgKGF0YV9hY3BpX2d0Zl9maWx0ZXIgJiBBVEFfQUNQSV9GSUxURVJfRElQTSkgeworCWlmICh0Zi0+Y29tbWFuZCA9PSBBVEFfQ01EX1NFVF9GRUFUVVJFUyAmJgorCSAgICB0Zi0+ZmVhdHVyZSA9PSBTRVRGRUFUVVJFU19TQVRBX0VOQUJMRSkgewogCQkvKiBpbmhpYml0IGVuYWJsaW5nIERJUE0gKi8KLQkJaWYgKHRmLT5jb21tYW5kID09IEFUQV9DTURfU0VUX0ZFQVRVUkVTICYmCi0JCSAgICB0Zi0+ZmVhdHVyZSA9PSBTRVRGRUFUVVJFU19TQVRBX0VOQUJMRSAmJgorCQlpZiAoZGV2LT5ndGZfZmlsdGVyICYgQVRBX0FDUElfRklMVEVSX0RJUE0gJiYKIAkJICAgIHRmLT5uc2VjdCA9PSBTQVRBX0RJUE0pCiAJCQlyZXR1cm4gMTsKKworCQkvKiBpbmhpYml0IEZQRE1BIG5vbi16ZXJvIG9mZnNldCAqLworCQlpZiAoZGV2LT5ndGZfZmlsdGVyICYgQVRBX0FDUElfRklMVEVSX0ZQRE1BX09GRlNFVCAmJgorCQkgICAgKHRmLT5uc2VjdCA9PSBTQVRBX0ZQRE1BX09GRlNFVCB8fAorCQkgICAgIHRmLT5uc2VjdCA9PSBTQVRBX0ZQRE1BX0lOX09SREVSKSkKKwkJCXJldHVybiAxOworCisJCS8qIGluaGliaXQgRlBETUEgYXV0byBhY3RpdmF0aW9uICovCisJCWlmIChkZXYtPmd0Zl9maWx0ZXIgJiBBVEFfQUNQSV9GSUxURVJfRlBETUFfQUEgJiYKKwkJICAgIHRmLT5uc2VjdCA9PSBTQVRBX0ZQRE1BX0FBKQorCQkJcmV0dXJuIDE7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC03MDQsNyArNzA2LDcgQEAKIAkJcHB0ZiA9ICZwdGY7CiAJfQogCi0JaWYgKCFhdGFfYWNwaV9maWx0ZXJfdGYoJnRmLCBwcHRmKSkgeworCWlmICghYXRhX2FjcGlfZmlsdGVyX3RmKGRldiwgJnRmLCBwcHRmKSkgewogCQlydGYgPSB0ZjsKIAkJZXJyX21hc2sgPSBhdGFfZXhlY19pbnRlcm5hbChkZXYsICZydGYsIE5VTEwsCiAJCQkJCSAgICAgRE1BX05PTkUsIE5VTEwsIDAsIDApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvbGliYXRhLWNvcmUuYyBiL2RyaXZlcnMvYXRhL2xpYmF0YS1jb3JlLmMKaW5kZXggMGRkYWY0My4uZDdmMGYxYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvbGliYXRhLWNvcmUuYworKysgYi9kcml2ZXJzL2F0YS9saWJhdGEtY29yZS5jCkBAIC01MDI4LDEyICs1MDI4LDE0IEBACiAJCQlxYy0+ZmxhZ3MgfD0gQVRBX1FDRkxBR19GQUlMRUQ7CiAKIAkJaWYgKHVubGlrZWx5KHFjLT5mbGFncyAmIEFUQV9RQ0ZMQUdfRkFJTEVEKSkgewotCQkJaWYgKCFhdGFfdGFnX2ludGVybmFsKHFjLT50YWcpKSB7Ci0JCQkJLyogYWx3YXlzIGZpbGwgcmVzdWx0IFRGIGZvciBmYWlsZWQgcWMgKi8KLQkJCQlmaWxsX3Jlc3VsdF90ZihxYyk7CisJCQkvKiBhbHdheXMgZmlsbCByZXN1bHQgVEYgZm9yIGZhaWxlZCBxYyAqLworCQkJZmlsbF9yZXN1bHRfdGYocWMpOworCisJCQlpZiAoIWF0YV90YWdfaW50ZXJuYWwocWMtPnRhZykpCiAJCQkJYXRhX3FjX3NjaGVkdWxlX2VoKHFjKTsKLQkJCQlyZXR1cm47Ci0JCQl9CisJCQllbHNlCisJCQkJX19hdGFfcWNfY29tcGxldGUocWMpOworCQkJcmV0dXJuOwogCQl9CiAKIAkJV0FSTl9PTl9PTkNFKGFwLT5wZmxhZ3MgJiBBVEFfUEZMQUdfRlJPWkVOKTsKQEAgLTU1OTEsNiArNTU5Myw5IEBACiAKIAkJZGV2LT5saW5rID0gbGluazsKIAkJZGV2LT5kZXZubyA9IGRldiAtIGxpbmstPmRldmljZTsKKyNpZmRlZiBDT05GSUdfQVRBX0FDUEkKKwkJZGV2LT5ndGZfZmlsdGVyID0gYXRhX2FjcGlfZ3RmX2ZpbHRlcjsKKyNlbmRpZgogCQlhdGFfZGV2X2luaXQoZGV2KTsKIAl9CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9saWJhdGEtZWguYyBiL2RyaXZlcnMvYXRhL2xpYmF0YS1laC5jCmluZGV4IGEwNDQ4OGYuLmJiYTJhZTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL2xpYmF0YS1laC5jCisrKyBiL2RyaXZlcnMvYXRhL2xpYmF0YS1laC5jCkBAIC0yNjY3LDE0ICsyNjY3LDE0IEBACiAJCWRldi0+cGlvX21vZGUgPSBYRkVSX1BJT18wOwogCQlkZXYtPmZsYWdzICY9IH5BVEFfREZMQUdfU0xFRVBJTkc7CiAKLQkJaWYgKCFhdGFfcGh5c19saW5rX29mZmxpbmUoYXRhX2Rldl9waHlzX2xpbmsoZGV2KSkpIHsKLQkJCS8qIGFwcGx5IGNsYXNzIG92ZXJyaWRlICovCi0JCQlpZiAobGZsYWdzICYgQVRBX0xGTEFHX0FTU1VNRV9BVEEpCi0JCQkJY2xhc3Nlc1tkZXYtPmRldm5vXSA9IEFUQV9ERVZfQVRBOwotCQkJZWxzZSBpZiAobGZsYWdzICYgQVRBX0xGTEFHX0FTU1VNRV9TRU1CKQotCQkJCWNsYXNzZXNbZGV2LT5kZXZub10gPSBBVEFfREVWX1NFTUJfVU5TVVA7Ci0JCX0gZWxzZQotCQkJY2xhc3Nlc1tkZXYtPmRldm5vXSA9IEFUQV9ERVZfTk9ORTsKKwkJaWYgKGF0YV9waHlzX2xpbmtfb2ZmbGluZShhdGFfZGV2X3BoeXNfbGluayhkZXYpKSkKKwkJCWNvbnRpbnVlOworCisJCS8qIGFwcGx5IGNsYXNzIG92ZXJyaWRlICovCisJCWlmIChsZmxhZ3MgJiBBVEFfTEZMQUdfQVNTVU1FX0FUQSkKKwkJCWNsYXNzZXNbZGV2LT5kZXZub10gPSBBVEFfREVWX0FUQTsKKwkJZWxzZSBpZiAobGZsYWdzICYgQVRBX0xGTEFHX0FTU1VNRV9TRU1CKQorCQkJY2xhc3Nlc1tkZXYtPmRldm5vXSA9IEFUQV9ERVZfU0VNQl9VTlNVUDsKIAl9CiAKIAkvKiByZWNvcmQgY3VycmVudCBsaW5rIHNwZWVkICovCkBAIC0yNzEzLDM0ICsyNzEzLDQ4IEBACiAJYXAtPnBmbGFncyAmPSB+QVRBX1BGTEFHX0VIX1BFTkRJTkc7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShsaW5rLT5hcC0+bG9jaywgZmxhZ3MpOwogCi0JLyogTWFrZSBzdXJlIG9ubGluZW5lc3MgYW5kIGNsYXNzaWZpY2F0aW9uIHJlc3VsdCBjb3JyZXNwb25kLgorCS8qCisJICogTWFrZSBzdXJlIG9ubGluZW5lc3MgYW5kIGNsYXNzaWZpY2F0aW9uIHJlc3VsdCBjb3JyZXNwb25kLgogCSAqIEhvdHBsdWcgY291bGQgaGF2ZSBoYXBwZW5lZCBkdXJpbmcgcmVzZXQgYW5kIHNvbWUKIAkgKiBjb250cm9sbGVycyBmYWlsIHRvIHdhaXQgd2hpbGUgYSBkcml2ZSBpcyBzcGlubmluZyB1cCBhZnRlcgogCSAqIGJlaW5nIGhvdHBsdWdnZWQgY2F1c2luZyBtaXNkZXRlY3Rpb24uICBCeSBjcm9zcyBjaGVja2luZwotCSAqIGxpbmsgb25saW5lbmVzcyBhbmQgY2xhc3NpZmljYXRpb24gcmVzdWx0LCB0aG9zZSBjb25kaXRpb25zCi0JICogY2FuIGJlIHJlbGlhYmx5IGRldGVjdGVkIGFuZCByZXRyaWVkLgorCSAqIGxpbmsgb24vb2ZmbGluZW5lc3MgYW5kIGNsYXNzaWZpY2F0aW9uIHJlc3VsdCwgdGhvc2UKKwkgKiBjb25kaXRpb25zIGNhbiBiZSByZWxpYWJseSBkZXRlY3RlZCBhbmQgcmV0cmllZC4KIAkgKi8KIAlucl91bmtub3duID0gMDsKIAlhdGFfZm9yX2VhY2hfZGV2KGRldiwgbGluaywgQUxMKSB7Ci0JCS8qIGNvbnZlcnQgYWxsIEFUQV9ERVZfVU5LTk9XTiB0byBBVEFfREVWX05PTkUgKi8KLQkJaWYgKGNsYXNzZXNbZGV2LT5kZXZub10gPT0gQVRBX0RFVl9VTktOT1dOKSB7Ci0JCQljbGFzc2VzW2Rldi0+ZGV2bm9dID0gQVRBX0RFVl9OT05FOwotCQkJaWYgKGF0YV9waHlzX2xpbmtfb25saW5lKGF0YV9kZXZfcGh5c19saW5rKGRldikpKQorCQlpZiAoYXRhX3BoeXNfbGlua19vbmxpbmUoYXRhX2Rldl9waHlzX2xpbmsoZGV2KSkpIHsKKwkJCWlmIChjbGFzc2VzW2Rldi0+ZGV2bm9dID09IEFUQV9ERVZfVU5LTk9XTikgeworCQkJCWF0YV9kZXZfcHJpbnRrKGRldiwgS0VSTl9ERUJVRywgImxpbmsgb25saW5lICIKKwkJCQkJICAgICAgICJidXQgZGV2aWNlIG1pc2NsYXNzaWZlZFxuIik7CisJCQkJY2xhc3Nlc1tkZXYtPmRldm5vXSA9IEFUQV9ERVZfTk9ORTsKIAkJCQlucl91bmtub3duKys7CisJCQl9CisJCX0gZWxzZSBpZiAoYXRhX3BoeXNfbGlua19vZmZsaW5lKGF0YV9kZXZfcGh5c19saW5rKGRldikpKSB7CisJCQlpZiAoYXRhX2NsYXNzX2VuYWJsZWQoY2xhc3Nlc1tkZXYtPmRldm5vXSkpCisJCQkJYXRhX2Rldl9wcmludGsoZGV2LCBLRVJOX0RFQlVHLCAibGluayBvZmZsaW5lLCAiCisJCQkJCSAgICAgICAiY2xlYXJpbmcgY2xhc3MgJWQgdG8gTk9ORVxuIiwKKwkJCQkJICAgICAgIGNsYXNzZXNbZGV2LT5kZXZub10pOworCQkJY2xhc3Nlc1tkZXYtPmRldm5vXSA9IEFUQV9ERVZfTk9ORTsKKwkJfSBlbHNlIGlmIChjbGFzc2VzW2Rldi0+ZGV2bm9dID09IEFUQV9ERVZfVU5LTk9XTikgeworCQkJYXRhX2Rldl9wcmludGsoZGV2LCBLRVJOX0RFQlVHLCAibGluayBzdGF0dXMgdW5rbm93biwgIgorCQkJCSAgICAgICAiY2xlYXJpbmcgVU5LTk9XTiB0byBOT05FXG4iKTsKKwkJCWNsYXNzZXNbZGV2LT5kZXZub10gPSBBVEFfREVWX05PTkU7CiAJCX0KIAl9CiAKIAlpZiAoY2xhc3NpZnkgJiYgbnJfdW5rbm93bikgewogCQlpZiAodHJ5IDwgbWF4X3RyaWVzKSB7CiAJCQlhdGFfbGlua19wcmludGsobGluaywgS0VSTl9XQVJOSU5HLCAibGluayBvbmxpbmUgYnV0ICIKLQkJCQkgICAgICAgImRldmljZSBtaXNjbGFzc2lmaWVkLCByZXRyeWluZ1xuIik7CisJCQkJCSIlZCBkZXZpY2VzIG1pc2NsYXNzaWZpZWQsIHJldHJ5aW5nXG4iLAorCQkJCQlucl91bmtub3duKTsKIAkJCWZhaWxlZF9saW5rID0gbGluazsKIAkJCXJjID0gLUVBR0FJTjsKIAkJCWdvdG8gZmFpbDsKIAkJfQogCQlhdGFfbGlua19wcmludGsobGluaywgS0VSTl9XQVJOSU5HLAotCQkJICAgICAgICJsaW5rIG9ubGluZSBidXQgZGV2aWNlIG1pc2NsYXNzaWZpZWQsICIKLQkJCSAgICAgICAiZGV2aWNlIGRldGVjdGlvbiBtaWdodCBmYWlsXG4iKTsKKwkJCQkibGluayBvbmxpbmUgYnV0ICVkIGRldmljZXMgbWlzY2xhc3NpZmllZCwgIgorCQkJCSJkZXZpY2UgZGV0ZWN0aW9uIG1pZ2h0IGZhaWxcbiIsIG5yX3Vua25vd24pOwogCX0KIAogCS8qIHJlc2V0IHN1Y2Nlc3NmdWwsIHNjaGVkdWxlIHJldmFsaWRhdGlvbiAqLwpAQCAtMjk2NywxMiArMjk4MSwxNCBAQAogCSAqIGRldmljZSBkZXRlY3Rpb24gbWVzc2FnZXMgYmFja3dhcmRzLgogCSAqLwogCWF0YV9mb3JfZWFjaF9kZXYoZGV2LCBsaW5rLCBBTEwpIHsKLQkJaWYgKCEobmV3X21hc2sgJiAoMSA8PCBkZXYtPmRldm5vKSkgfHwKLQkJICAgIGRldi0+Y2xhc3MgPT0gQVRBX0RFVl9QTVApCisJCWlmICghKG5ld19tYXNrICYgKDEgPDwgZGV2LT5kZXZubykpKQogCQkJY29udGludWU7CiAKIAkJZGV2LT5jbGFzcyA9IGVoYy0+Y2xhc3Nlc1tkZXYtPmRldm5vXTsKIAorCQlpZiAoZGV2LT5jbGFzcyA9PSBBVEFfREVWX1BNUCkKKwkJCWNvbnRpbnVlOworCiAJCWVoYy0+aS5mbGFncyB8PSBBVEFfRUhJX1BSSU5USU5GTzsKIAkJcmMgPSBhdGFfZGV2X2NvbmZpZ3VyZShkZXYpOwogCQllaGMtPmkuZmxhZ3MgJj0gfkFUQV9FSElfUFJJTlRJTkZPOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvbGliYXRhLmggYi9kcml2ZXJzL2F0YS9saWJhdGEuaAppbmRleCBiZThlMjYyLi44MjNlNjMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9saWJhdGEuaAorKysgYi9kcml2ZXJzL2F0YS9saWJhdGEuaApAQCAtMTE4LDYgKzExOCw4IEBACiAKIC8qIGxpYmF0YS1hY3BpLmMgKi8KICNpZmRlZiBDT05GSUdfQVRBX0FDUEkKK2V4dGVybiB1bnNpZ25lZCBpbnQgYXRhX2FjcGlfZ3RmX2ZpbHRlcjsKKwogZXh0ZXJuIHZvaWQgYXRhX2FjcGlfYXNzb2NpYXRlX3NhdGFfcG9ydChzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKIGV4dGVybiB2b2lkIGF0YV9hY3BpX2Fzc29jaWF0ZShzdHJ1Y3QgYXRhX2hvc3QgKmhvc3QpOwogZXh0ZXJuIHZvaWQgYXRhX2FjcGlfZGlzc29jaWF0ZShzdHJ1Y3QgYXRhX2hvc3QgKmhvc3QpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9hbGkuYyBiL2RyaXZlcnMvYXRhL3BhdGFfYWxpLmMKaW5kZXggZmM5YzVkNi4uMTQzMmRjOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9hbGkuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX2FsaS5jCkBAIC0yOTAsNyArMjkwLDcgQEAKIAogCWlmIChwcmludF9pbmZvICYmIGFkZXYtPmNsYXNzID09IEFUQV9ERVZfQVRBUEkgJiYgIWFsaV9hdGFwaV9kbWEpIHsKIAkJYXRhX2Rldl9wcmludGsoYWRldiwgS0VSTl9XQVJOSU5HLAotCQkJICAgICAgICJXQVJOSU5HOiBBVEFQSSBETUEgZGlzYWJsZWQgZm9yIHJlbGlhYmxpdHkgaXNzdWVzLiAgSXQgY2FuIGJlIGVuYWJsZWRcbiIpOworCQkJICAgICAgICJXQVJOSU5HOiBBVEFQSSBETUEgZGlzYWJsZWQgZm9yIHJlbGlhYmlsaXR5IGlzc3Vlcy4gIEl0IGNhbiBiZSBlbmFibGVkXG4iKTsKIAkJYXRhX2Rldl9wcmludGsoYWRldiwgS0VSTl9XQVJOSU5HLAogCQkJICAgICAgICJXQVJOSU5HOiB2aWEgcGF0YV9hbGkuYXRhcGlfZG1hIG1vZHBhcmFtIG9yIGNvcnJlc3BvbmRpbmcgc3lzZnMgbm9kZS5cbiIpOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfYXRpaXhwLmMgYi9kcml2ZXJzL2F0YS9wYXRhX2F0aWl4cC5jCmluZGV4IGFhNGIzZjYuLmFlNDQ1NGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfYXRpaXhwLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9hdGlpeHAuYwpAQCAtMjQ2LDcgKzI0Niw3IEBACiAJeyBQQ0lfVkRFVklDRShBVEksIFBDSV9ERVZJQ0VfSURfQVRJX0lYUDQwMF9JREUpLCB9LAogCXsgUENJX1ZERVZJQ0UoQVRJLCBQQ0lfREVWSUNFX0lEX0FUSV9JWFA2MDBfSURFKSwgfSwKIAl7IFBDSV9WREVWSUNFKEFUSSwgUENJX0RFVklDRV9JRF9BVElfSVhQNzAwX0lERSksIH0sCi0JeyBQQ0lfVkRFVklDRShBTUQsIFBDSV9ERVZJQ0VfSURfQU1EX1NCOTAwX0lERSksIH0sCisJeyBQQ0lfVkRFVklDRShBTUQsIFBDSV9ERVZJQ0VfSURfQU1EX0hVRFNPTjJfSURFKSwgfSwKIAogCXsgfSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX2F0cDg2N3guYyBiL2RyaXZlcnMvYXRhL3BhdGFfYXRwODY3eC5jCmluZGV4IDc5OTBkZTkuLjZmZTdkZWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfYXRwODY3eC5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfYXRwODY3eC5jCkBAIC0xMTgsMjAgKzExOCwxMyBAQAogCWludAkJcGNpNjZtaHo7CiB9OwogCi1zdGF0aWMgaW5saW5lIHU4IGF0cDg2N3hfc3BlZWRfdG9fbW9kZSh1OCBzcGVlZCkKLXsKLQlyZXR1cm4gc3BlZWQgLSBYRkVSX1VETUFfMCArIDE7Ci19Ci0KIHN0YXRpYyB2b2lkIGF0cDg2N3hfc2V0X2RtYW1vZGUoc3RydWN0IGF0YV9wb3J0ICphcCwgc3RydWN0IGF0YV9kZXZpY2UgKmFkZXYpCiB7CiAJc3RydWN0IHBjaV9kZXYgKnBkZXYJPSB0b19wY2lfZGV2KGFwLT5ob3N0LT5kZXYpOwogCXN0cnVjdCBhdHA4Njd4X3ByaXYgKmRwID0gYXAtPnByaXZhdGVfZGF0YTsKIAl1OCBzcGVlZCA9IGFkZXYtPmRtYV9tb2RlOwogCXU4IGI7Ci0JdTggbW9kZTsKLQotCW1vZGUgPSBhdHA4Njd4X3NwZWVkX3RvX21vZGUoc3BlZWQpOworCXU4IG1vZGUgPSBzcGVlZCAtIFhGRVJfVURNQV8wICsgMTsKIAogCS8qCiAJICogRG9jIDYuNi45OiBkZWNyZWFzZSB0aGUgdWRtYSBtb2RlIHZhbHVlIGJ5IDEgZm9yIHNhZmVyIFVETUEgc3BlZWQKQEAgLTE1NiwyNSArMTQ5LDM4IEBACiAJaW93cml0ZTgoYiwgZHAtPmRtYV9tb2RlKTsKIH0KIAotc3RhdGljIGludCBhdHA4Njd4X2dldF9hY3RpdmVfY2xvY2tzX3NoaWZ0ZWQodW5zaWduZWQgaW50IGNsaykKK3N0YXRpYyBpbnQgYXRwODY3eF9nZXRfYWN0aXZlX2Nsb2Nrc19zaGlmdGVkKHN0cnVjdCBhdGFfcG9ydCAqYXAsCisJdW5zaWduZWQgaW50IGNsaykKIHsKKwlzdHJ1Y3QgYXRwODY3eF9wcml2ICpkcCA9IGFwLT5wcml2YXRlX2RhdGE7CiAJdW5zaWduZWQgY2hhciBjbG9ja3MgPSBjbGs7CiAKKwkvKgorCSAqIERvYyA2LjYuOTogaW5jcmVhc2UgdGhlIGNsb2NrIHZhbHVlIGJ5IDEgZm9yIHNhZmVyIFBJTyBzcGVlZAorCSAqIG9uIDY2TUh6IGJ1cworCSAqLworCWlmIChkcC0+cGNpNjZtaHopCisJCWNsb2NrcysrOworCiAJc3dpdGNoIChjbG9ja3MpIHsKIAljYXNlIDA6CiAJCWNsb2NrcyA9IDE7CiAJCWJyZWFrOwotCWNhc2UgMSAuLi4gNzoKLQkJYnJlYWs7Ci0JY2FzZSA4IC4uLiAxMjoKLQkJY2xvY2tzID0gNzsKKwljYXNlIDEgLi4uIDY6CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIkFUUDg2N1g6IGFjdGl2ZSAlZGNsayBpcyBpbnZhbGlkLiAiCi0JCQkiVXNpbmcgZGVmYXVsdCA4Y2xrLlxuIiwgY2xrKTsKLQkJY2xvY2tzID0gMDsJLyogOCBjbGsgKi8KKwkJCSJVc2luZyAxMmNsay5cbiIsIGNsayk7CisJY2FzZSA5IC4uLiAxMjoKKwkJY2xvY2tzID0gNzsJLyogMTIgY2xrICovCiAJCWJyZWFrOworCWNhc2UgNzoKKwljYXNlIDg6CS8qIGRlZmF1bHQgOCBjbGsgKi8KKwkJY2xvY2tzID0gMDsKKwkJZ290byBhY3RpdmVfY2xvY2tfc2hpZnRfZG9uZTsKIAl9CisKK2FjdGl2ZV9jbG9ja19zaGlmdF9kb25lOgogCXJldHVybiBjbG9ja3MgPDwgQVRQODY3WF9JT19QSU9TUERfQUNUSVZFX1NISUZUOwogfQogCkBAIC0xODgsMjAgKzE5NCwyMCBAQAogCQlicmVhazsKIAljYXNlIDEgLi4uIDExOgogCQlicmVhazsKLQljYXNlIDEyOgotCQljbG9ja3MgPSAwOwotCQlicmVhazsKLQljYXNlIDEzOiBjYXNlIDE0OgotCQktLWNsb2NrczsKKwljYXNlIDEzOgorCWNhc2UgMTQ6CisJCS0tY2xvY2tzOwkvKiBieSB0aGUgc3BlYyAqLwogCQlicmVhazsKIAljYXNlIDE1OgogCQlicmVhazsKIAlkZWZhdWx0OgogCQlwcmludGsoS0VSTl9XQVJOSU5HICJBVFA4NjdYOiByZWNvdmVyICVkY2xrIGlzIGludmFsaWQuICIKLQkJCSJVc2luZyBkZWZhdWx0IDE1Y2xrLlxuIiwgY2xrKTsKLQkJY2xvY2tzID0gMDsJLyogMTIgY2xrICovCisJCQkiVXNpbmcgZGVmYXVsdCAxMmNsay5cbiIsIGNsayk7CisJY2FzZSAxMjoJLyogZGVmYXVsdCAxMiBjbGsgKi8KKwkJY2xvY2tzID0gMDsKIAkJYnJlYWs7CiAJfQorCiAJcmV0dXJuIGNsb2NrcyA8PCBBVFA4NjdYX0lPX1BJT1NQRF9SRUNPVkVSX1NISUZUOwogfQogCkBAIC0yMzAsMjUgKzIzNiwzOCBAQAogCQliID0gKGIgJiB+QVRQODY3WF9JT19ETUFNT0RFX01TVFJfTUFTSyk7CiAJaW93cml0ZTgoYiwgZHAtPmRtYV9tb2RlKTsKIAotCWIgPSBhdHA4Njd4X2dldF9hY3RpdmVfY2xvY2tzX3NoaWZ0ZWQodC5hY3RpdmUpIHwKLQkJYXRwODY3eF9nZXRfcmVjb3Zlcl9jbG9ja3Nfc2hpZnRlZCh0LnJlY292ZXIpOwotCWlmIChkcC0+cGNpNjZtaHopCi0JCWIgKz0gMHgxMDsKKwliID0gYXRwODY3eF9nZXRfYWN0aXZlX2Nsb2Nrc19zaGlmdGVkKGFwLCB0LmFjdGl2ZSkgfAorCSAgICBhdHA4Njd4X2dldF9yZWNvdmVyX2Nsb2Nrc19zaGlmdGVkKHQucmVjb3Zlcik7CiAKIAlpZiAoYWRldi0+ZGV2bm8gJiAxKQogCQlpb3dyaXRlOChiLCBkcC0+c2xhdmVfcGlvc3BkKTsKIAllbHNlCiAJCWlvd3JpdGU4KGIsIGRwLT5tc3RyX3Bpb3NwZCk7CiAKLQkvKgotCSAqIHVzZSB0aGUgc2FtZSB2YWx1ZSBmb3IgY29tYW5kIHRpbWluZyBhcyBmb3IgUElPIHRpbWltZwotCSAqLworCWIgPSBhdHA4Njd4X2dldF9hY3RpdmVfY2xvY2tzX3NoaWZ0ZWQoYXAsIHQuYWN0OGIpIHwKKwkgICAgYXRwODY3eF9nZXRfcmVjb3Zlcl9jbG9ja3Nfc2hpZnRlZCh0LnJlYzhiKTsKKwogCWlvd3JpdGU4KGIsIGRwLT5laWdodGJfcGlvc3BkKTsKIH0KIAorc3RhdGljIGludCBhdHA4Njd4X2NhYmxlX292ZXJyaWRlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCWlmIChwZGV2LT5zdWJzeXN0ZW1fdmVuZG9yID09IFBDSV9WRU5ET1JfSURfQVJUT1AgJiYKKwkJKHBkZXYtPnN1YnN5c3RlbV9kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9BUlRPUF9BVFA4NjdBIHx8CisJCSBwZGV2LT5zdWJzeXN0ZW1fZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfQVJUT1BfQVRQODY3QikpIHsKKwkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IGF0cDg2N3hfY2FibGVfZGV0ZWN0KHN0cnVjdCBhdGFfcG9ydCAqYXApCiB7Ci0JcmV0dXJuIEFUQV9DQkxfUEFUQTQwX1NIT1JUOworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2RldihhcC0+aG9zdC0+ZGV2KTsKKworCWlmIChhdHA4Njd4X2NhYmxlX292ZXJyaWRlKHBkZXYpKQorCQlyZXR1cm4gQVRBX0NCTF9QQVRBNDBfU0hPUlQ7CisKKwlyZXR1cm4gQVRBX0NCTF9QQVRBX1VOSzsKIH0KIAogc3RhdGljIHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgYXRwODY3eF9zaHQgPSB7CkBAIC00NzEsNyArNDkwLDYgQEAKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mb184Njd4ID0gewogCQkuZmxhZ3MJCT0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKIAkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCi0JCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzayAJPSBBVEFfVURNQTYsCiAJCS5wb3J0X29wcwk9ICZhdHA4Njd4X29wcywKIAl9OwpAQCAtNTE1LDYgKzUzMywyMyBAQAogCXJldHVybiByYzsKIH0KIAorI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludCBhdHA4Njd4X3JlaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJc3RydWN0IGF0YV9ob3N0ICpob3N0ID0gZGV2X2dldF9kcnZkYXRhKCZwZGV2LT5kZXYpOworCWludCByYzsKKworCXJjID0gYXRhX3BjaV9kZXZpY2VfZG9fcmVzdW1lKHBkZXYpOworCWlmIChyYykKKwkJcmV0dXJuIHJjOworCisJYXRwODY3eF9maXh1cChob3N0KTsKKworCWF0YV9ob3N0X3Jlc3VtZShob3N0KTsKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCiBzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgYXRwODY3eF9wY2lfdGJsW10gPSB7CiAJeyBQQ0lfVkRFVklDRShBUlRPUCwgUENJX0RFVklDRV9JRF9BUlRPUF9BVFA4NjdBKSwJMCB9LAogCXsgUENJX1ZERVZJQ0UoQVJUT1AsIFBDSV9ERVZJQ0VfSURfQVJUT1BfQVRQODY3QiksCTAgfSwKQEAgLTUyNiw2ICs1NjEsMTAgQEAKIAkuaWRfdGFibGUgCT0gYXRwODY3eF9wY2lfdGJsLAogCS5wcm9iZSAJCT0gYXRwODY3eF9pbml0X29uZSwKIAkucmVtb3ZlCQk9IGF0YV9wY2lfcmVtb3ZlX29uZSwKKyNpZmRlZiBDT05GSUdfUE0KKwkuc3VzcGVuZAk9IGF0YV9wY2lfZGV2aWNlX3N1c3BlbmQsCisJLnJlc3VtZQkJPSBhdHA4Njd4X3JlaW5pdF9vbmUsCisjZW5kaWYKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IGF0cDg2N3hfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9zYzEyMDAuYyBiL2RyaXZlcnMvYXRhL3BhdGFfc2MxMjAwLmMKaW5kZXggZjQ5ODE0ZC4uM2JiZWQ4MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9zYzEyMDAuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX3NjMTIwMC5jCkBAIC0yMzUsOCArMjM1LDcgQEAKIAkJLnVkbWFfbWFzayA9IEFUQV9VRE1BMiwKIAkJLnBvcnRfb3BzID0gJnNjMTIwMF9wb3J0X29wcwogCX07Ci0JLyogQ2FuJ3QgZW5hYmxlIHBvcnQgMiB5ZXQsIHNlZSB0b3AgY29tbWVudHMgKi8KLQljb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyAqcHBpW10gPSB7ICZpbmZvLCB9OworCWNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvICpwcGlbXSA9IHsgJmluZm8sIE5VTEwgfTsKIAogCXJldHVybiBhdGFfcGNpX3NmZl9pbml0X29uZShkZXYsIHBwaSwgJnNjMTIwMF9zaHQsIE5VTEwpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV92aWEuYyBiL2RyaXZlcnMvYXRhL3BhdGFfdmlhLmMKaW5kZXggNDU2NTdjYS4uODg5ODRiOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV92aWEuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX3ZpYS5jCkBAIC0xMTEsNyArMTExLDcgQEAKIAl7ICJ2dDgyNTEiLAlQQ0lfREVWSUNFX0lEX1ZJQV84MjUxLCAgICAgMHgwMCwgMHgyZiwgVklBX1VETUFfMTMzIHwgVklBX0JBRF9BU1QgfSwKIAl7ICJjeDcwMCIsCVBDSV9ERVZJQ0VfSURfVklBX0NYNzAwLCAgICAweDAwLCAweDJmLCBWSUFfVURNQV8xMzMgfCBWSUFfQkFEX0FTVCB8IFZJQV9TQVRBX1BBVEEgfSwKIAl7ICJ2dDY0MTAiLAlQQ0lfREVWSUNFX0lEX1ZJQV82NDEwLCAgICAgMHgwMCwgMHgyZiwgVklBX1VETUFfMTMzIHwgVklBX0JBRF9BU1QgfCBWSUFfTk9fRU5BQkxFUyB9LAotCXsgInZ0NjQxNSIsCVBDSV9ERVZJQ0VfSURfVklBXzY0MTUsICAgICAweDAwLCAweDJmLCBWSUFfVURNQV8xMzMgfCBWSUFfQkFEX0FTVCB8IFZJQV9OT19FTkFCTEVTIH0sCisJeyAidnQ2NDE1IiwJUENJX0RFVklDRV9JRF9WSUFfNjQxNSwgICAgIDB4MDAsIDB4ZmYsIFZJQV9VRE1BXzEzMyB8IFZJQV9CQURfQVNUIHwgVklBX05PX0VOQUJMRVMgfSwKIAl7ICJ2dDgyMzdhIiwJUENJX0RFVklDRV9JRF9WSUFfODIzN0EsICAgIDB4MDAsIDB4MmYsIFZJQV9VRE1BXzEzMyB8IFZJQV9CQURfQVNUIH0sCiAJeyAidnQ4MjM3IiwJUENJX0RFVklDRV9JRF9WSUFfODIzNywgICAgIDB4MDAsIDB4MmYsIFZJQV9VRE1BXzEzMyB8IFZJQV9CQURfQVNUIH0sCiAJeyAidnQ4MjM1IiwJUENJX0RFVklDRV9JRF9WSUFfODIzNSwgICAgIDB4MDAsIDB4MmYsIFZJQV9VRE1BXzEzMyB8IFZJQV9CQURfQVNUIH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9zYXRhX212LmMgYi9kcml2ZXJzL2F0YS9zYXRhX212LmMKaW5kZXggMTdmOWZmOS4uNmY1MDkzYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvc2F0YV9tdi5jCisrKyBiL2RyaXZlcnMvYXRhL3NhdGFfbXYuYwpAQCAtMTM4Miw2ICsxMzgyLDI1IEBACiAJICovCiAJaWYgKHBwLT5wcF9mbGFncyAmIE1WX1BQX0ZMQUdfREVMQVlFRF9FSCkKIAkJcmV0dXJuIEFUQV9ERUZFUl9QT1JUOworCisJLyogUElPIGNvbW1hbmRzIG5lZWQgZXhjbHVzaXZlIGxpbms6IG5vIG90aGVyIGNvbW1hbmRzIFtETUEgb3IgUElPXQorCSAqIGNhbiBydW4gY29uY3VycmVudGx5LgorCSAqIHNldCBleGNsX2xpbmsgd2hlbiB3ZSB3YW50IHRvIHNlbmQgYSBQSU8gY29tbWFuZCBpbiBETUEgbW9kZQorCSAqIG9yIGEgbm9uLU5DUSBjb21tYW5kIGluIE5DUSBtb2RlLgorCSAqIFdoZW4gd2UgcmVjZWl2ZSBhIGNvbW1hbmQgZnJvbSB0aGF0IGxpbmssIGFuZCB0aGVyZSBhcmUgbm8KKwkgKiBvdXRzdGFuZGluZyBjb21tYW5kcywgbWFyayBhIGZsYWcgdG8gY2xlYXIgZXhjbF9saW5rIGFuZCBsZXQKKwkgKiB0aGUgY29tbWFuZCBnbyB0aHJvdWdoLgorCSAqLworCWlmICh1bmxpa2VseShhcC0+ZXhjbF9saW5rKSkgeworCQlpZiAobGluayA9PSBhcC0+ZXhjbF9saW5rKSB7CisJCQlpZiAoYXAtPm5yX2FjdGl2ZV9saW5rcykKKwkJCQlyZXR1cm4gQVRBX0RFRkVSX1BPUlQ7CisJCQlxYy0+ZmxhZ3MgfD0gQVRBX1FDRkxBR19DTEVBUl9FWENMOworCQkJcmV0dXJuIDA7CisJCX0gZWxzZQorCQkJcmV0dXJuIEFUQV9ERUZFUl9QT1JUOworCX0KKwogCS8qCiAJICogSWYgdGhlIHBvcnQgaXMgY29tcGxldGVseSBpZGxlLCB0aGVuIGFsbG93IHRoZSBuZXcgcWMuCiAJICovCkBAIC0xMzk1LDggKzE0MTQsMTQgQEAKIAkgKiBkb2Vzbid0IGFsbG93IGl0LgogCSAqLwogCWlmICgocHAtPnBwX2ZsYWdzICYgTVZfUFBfRkxBR19FRE1BX0VOKSAmJgotCSAgICAocHAtPnBwX2ZsYWdzICYgTVZfUFBfRkxBR19OQ1FfRU4pICYmIGF0YV9pc19uY3EocWMtPnRmLnByb3RvY29sKSkKLQkJcmV0dXJuIDA7CisJICAgIChwcC0+cHBfZmxhZ3MgJiBNVl9QUF9GTEFHX05DUV9FTikpIHsKKwkJaWYgKGF0YV9pc19uY3EocWMtPnRmLnByb3RvY29sKSkKKwkJCXJldHVybiAwOworCQllbHNlIHsKKwkJCWFwLT5leGNsX2xpbmsgPSBsaW5rOworCQkJcmV0dXJuIEFUQV9ERUZFUl9QT1JUOworCQl9CisJfQogCiAJcmV0dXJuIEFUQV9ERUZFUl9QT1JUOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvc2F0YV9udi5jIGIvZHJpdmVycy9hdGEvc2F0YV9udi5jCmluZGV4IDg2YTQwNTguLjFlYjRlMDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3NhdGFfbnYuYworKysgYi9kcml2ZXJzL2F0YS9zYXRhX252LmMKQEAgLTE1OTQsOSArMTU5NCwyMSBAQAogCSAgICAhYXRhX2Rldl9lbmFibGVkKGxpbmstPmRldmljZSkpCiAJCXNhdGFfbGlua19oYXJkcmVzZXQobGluaywgc2F0YV9kZWJfdGltaW5nX2hvdHBsdWcsIGRlYWRsaW5lLAogCQkJCSAgICBOVUxMLCBOVUxMKTsKLQllbHNlIGlmICghKGVoYy0+aS5mbGFncyAmIEFUQV9FSElfUVVJRVQpKQotCQlhdGFfbGlua19wcmludGsobGluaywgS0VSTl9JTkZPLAotCQkJCSJudjogc2tpcHBpbmcgaGFyZHJlc2V0IG9uIG9jY3VwaWVkIHBvcnRcbiIpOworCWVsc2UgeworCQljb25zdCB1bnNpZ25lZCBsb25nICp0aW1pbmcgPSBzYXRhX2VoY19kZWJfdGltaW5nKGVoYyk7CisJCWludCByYzsKKworCQlpZiAoIShlaGMtPmkuZmxhZ3MgJiBBVEFfRUhJX1FVSUVUKSkKKwkJCWF0YV9saW5rX3ByaW50ayhsaW5rLCBLRVJOX0lORk8sICJudjogc2tpcHBpbmcgIgorCQkJCQkiaGFyZHJlc2V0IG9uIG9jY3VwaWVkIHBvcnRcbiIpOworCisJCS8qIG1ha2Ugc3VyZSB0aGUgbGluayBpcyBvbmxpbmUgKi8KKwkJcmMgPSBzYXRhX2xpbmtfcmVzdW1lKGxpbmssIHRpbWluZywgZGVhZGxpbmUpOworCQkvKiB3aGluZSBhYm91dCBwaHkgcmVzdW1lIGZhaWx1cmUgYnV0IHByb2NlZWQgKi8KKwkJaWYgKHJjICYmIHJjICE9IC1FT1BOT1RTVVBQKQorCQkJYXRhX2xpbmtfcHJpbnRrKGxpbmssIEtFUk5fV0FSTklORywgImZhaWxlZCB0byByZXN1bWUgIgorCQkJCQkibGluayAoZXJybm89JWQpXG4iLCByYyk7CisJfQogCiAJLyogZGV2aWNlIHNpZ25hdHVyZSBhY3F1aXNpdGlvbiBpcyB1bnJlbGlhYmxlICovCiAJcmV0dXJuIC1FQUdBSU47CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvYnVzLmMgYi9kcml2ZXJzL2Jhc2UvYnVzLmMKaW5kZXggOTczYmYyYS4uNjNjMTQzZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL2J1cy5jCisrKyBiL2RyaXZlcnMvYmFzZS9idXMuYwpAQCAtNjg5LDE1ICs2ODksMTkgQEAKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogZHJpdmVyX2FkZF9hdHRycyglcykgZmFpbGVkXG4iLAogCQkJX19mdW5jX18sIGRydi0+bmFtZSk7CiAJfQotCWVycm9yID0gYWRkX2JpbmRfZmlsZXMoZHJ2KTsKLQlpZiAoZXJyb3IpIHsKLQkJLyogRGl0dG8gKi8KLQkJcHJpbnRrKEtFUk5fRVJSICIlczogYWRkX2JpbmRfZmlsZXMoJXMpIGZhaWxlZFxuIiwKLQkJCV9fZnVuY19fLCBkcnYtPm5hbWUpOworCisJaWYgKCFkcnYtPnN1cHByZXNzX2JpbmRfYXR0cnMpIHsKKwkJZXJyb3IgPSBhZGRfYmluZF9maWxlcyhkcnYpOworCQlpZiAoZXJyb3IpIHsKKwkJCS8qIERpdHRvICovCisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBhZGRfYmluZF9maWxlcyglcykgZmFpbGVkXG4iLAorCQkJCV9fZnVuY19fLCBkcnYtPm5hbWUpOworCQl9CiAJfQogCiAJa29iamVjdF91ZXZlbnQoJnByaXYtPmtvYmosIEtPQkpfQUREKTsKIAlyZXR1cm4gMDsKKwogb3V0X3VucmVnaXN0ZXI6CiAJa2ZyZWUoZHJ2LT5wKTsKIAlkcnYtPnAgPSBOVUxMOwpAQCAtNzIwLDcgKzcyNCw4IEBACiAJaWYgKCFkcnYtPmJ1cykKIAkJcmV0dXJuOwogCi0JcmVtb3ZlX2JpbmRfZmlsZXMoZHJ2KTsKKwlpZiAoIWRydi0+c3VwcHJlc3NfYmluZF9hdHRycykKKwkJcmVtb3ZlX2JpbmRfZmlsZXMoZHJ2KTsKIAlkcml2ZXJfcmVtb3ZlX2F0dHJzKGRydi0+YnVzLCBkcnYpOwogCWRyaXZlcl9yZW1vdmVfZmlsZShkcnYsICZkcml2ZXJfYXR0cl91ZXZlbnQpOwogCWtsaXN0X3JlbW92ZSgmZHJ2LT5wLT5rbm9kZV9idXMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL2RyaXZlci5jIGIvZHJpdmVycy9iYXNlL2RyaXZlci5jCmluZGV4IGVkMmViZDMuLmYzNjc4ODUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9kcml2ZXIuYworKysgYi9kcml2ZXJzL2Jhc2UvZHJpdmVyLmMKQEAgLTIzNiw3ICsyMzYsNyBAQAogCQlwdXRfZHJpdmVyKG90aGVyKTsKIAkJcHJpbnRrKEtFUk5fRVJSICJFcnJvcjogRHJpdmVyICclcycgaXMgYWxyZWFkeSByZWdpc3RlcmVkLCAiCiAJCQkiYWJvcnRpbmcuLi5cbiIsIGRydi0+bmFtZSk7Ci0JCXJldHVybiAtRUVYSVNUOworCQlyZXR1cm4gLUVCVVNZOwogCX0KIAogCXJldCA9IGJ1c19hZGRfZHJpdmVyKGRydik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvcGxhdGZvcm0uYyBiL2RyaXZlcnMvYmFzZS9wbGF0Zm9ybS5jCmluZGV4IGVkMTU2YTEzLi40ZmE5NTRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvcGxhdGZvcm0uYworKysgYi9kcml2ZXJzL2Jhc2UvcGxhdGZvcm0uYwpAQCAtNTIxLDExICs1MjEsMTUgQEAKIHsKIAlpbnQgcmV0dmFsLCBjb2RlOwogCisJLyogbWFrZSBzdXJlIGRyaXZlciB3b24ndCBoYXZlIGJpbmQvdW5iaW5kIGF0dHJpYnV0ZXMgKi8KKwlkcnYtPmRyaXZlci5zdXBwcmVzc19iaW5kX2F0dHJzID0gdHJ1ZTsKKwogCS8qIHRlbXBvcmFyeSBzZWN0aW9uIHZpb2xhdGlvbiBkdXJpbmcgcHJvYmUoKSAqLwogCWRydi0+cHJvYmUgPSBwcm9iZTsKIAlyZXR2YWwgPSBjb2RlID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKGRydik7CiAKLQkvKiBGaXh1cCB0aGF0IHNlY3Rpb24gdmlvbGF0aW9uLCBiZWluZyBwYXJhbm9pZCBhYm91dCBjb2RlIHNjYW5uaW5nCisJLyoKKwkgKiBGaXh1cCB0aGF0IHNlY3Rpb24gdmlvbGF0aW9uLCBiZWluZyBwYXJhbm9pZCBhYm91dCBjb2RlIHNjYW5uaW5nCiAJICogdGhlIGxpc3Qgb2YgZHJpdmVycyBpbiBvcmRlciB0byBwcm9iZSBuZXcgZGV2aWNlcy4gIENoZWNrIHRvIHNlZQogCSAqIGlmIHRoZSBwcm9iZSB3YXMgc3VjY2Vzc2Z1bCwgYW5kIG1ha2Ugc3VyZSBhbnkgZm9yY2VkIHByb2JlcyBvZgogCSAqIG5ldyBkZXZpY2VzIGZhaWwuCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL0RBQzk2MC5jIGIvZHJpdmVycy9ibG9jay9EQUM5NjAuYwppbmRleCA2ZmE3YjBmLi5lYjRmYTE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL0RBQzk2MC5jCisrKyBiL2RyaXZlcnMvYmxvY2svREFDOTYwLmMKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+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+cXVldWUtPnF1ZXVlZGF0YSA9IHZibGs7Ci0JcXVldWVfZmxhZ19zZXRfdW5sb2NrZWQoUVVFVUVfRkxBR19WSVJULCB2YmxrLT5kaXNrLT5xdWV1ZSk7CiAKIAlpZiAoaW5kZXggPCAyNikgewogCQlzcHJpbnRmKHZibGstPmRpc2stPmRpc2tfbmFtZSwgInZkJWMiLCAnYScgKyBpbmRleCAlIDI2KTsKQEAgLTQ0NSw3ICs0MTIsNyBAQAogc3RhdGljIHVuc2lnbmVkIGludCBmZWF0dXJlc1tdID0gewogCVZJUlRJT19CTEtfRl9CQVJSSUVSLCBWSVJUSU9fQkxLX0ZfU0VHX01BWCwgVklSVElPX0JMS19GX1NJWkVfTUFYLAogCVZJUlRJT19CTEtfRl9HRU9NRVRSWSwgVklSVElPX0JMS19GX1JPLCBWSVJUSU9fQkxLX0ZfQkxLX1NJWkUsCi0JVklSVElPX0JMS19GX1NDU0ksIFZJUlRJT19CTEtfRl9JREVOVElGWSwgVklSVElPX0JMS19GX0ZMVVNICisJVklSVElPX0JMS19GX1NDU0ksIFZJUlRJT19CTEtfRl9GTFVTSAogfTsKIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9LY29uZmlnIGIvZHJpdmVycy9jaGFyL0tjb25maWcKaW5kZXggMDhhNmY1MC4uNmFhZDk5ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL0tjb25maWcKKysrIGIvZHJpdmVycy9jaGFyL0tjb25maWcKQEAgLTMyMyw3ICszMjMsNyBAQAogCiBjb25maWcgU1gKIAl0cmlzdGF0ZSAiU3BlY2lhbGl4IFNYIChhbmQgU0kpIGNhcmQgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFNFUklBTF9OT05TVEFOREFSRCAmJiAoUENJIHx8IEVJU0EgfHwgSVNBKQorCWRlcGVuZHMgb24gU0VSSUFMX05PTlNUQU5EQVJEICYmIChQQ0kgfHwgRUlTQSB8fCBJU0EpICYmIEJST0tFTgogCWhlbHAKIAkgIFRoaXMgaXMgYSBkcml2ZXIgZm9yIHRoZSBTWCBhbmQgU0kgbXVsdGlwb3J0IHNlcmlhbCBjYXJkcy4KIAkgIFBsZWFzZSByZWFkIHRoZSBmaWxlIDxmaWxlOkRvY3VtZW50YXRpb24vc2VyaWFsL3N4LnR4dD4gZm9yIGRldGFpbHMuCkBAIC0zMzQsNyArMzM0LDcgQEAKIAogY29uZmlnIFJJTwogCXRyaXN0YXRlICJTcGVjaWFsaXggUklPIHN5c3RlbSBzdXBwb3J0IgotCWRlcGVuZHMgb24gU0VSSUFMX05PTlNUQU5EQVJECisJZGVwZW5kcyBvbiBTRVJJQUxfTk9OU1RBTkRBUkQgJiYgQlJPS0VOCiAJaGVscAogCSAgVGhpcyBpcyBhIGRyaXZlciBmb3IgdGhlIFNwZWNpYWxpeCBSSU8sIGEgc21hcnQgc2VyaWFsIGNhcmQgd2hpY2gKIAkgIGRyaXZlcyBhbiBvdXRib2FyZCBib3ggdGhhdCBjYW4gc3VwcG9ydCB1cCB0byAxMjggcG9ydHMuICBQcm9kdWN0CkBAIC0zOTUsNyArMzk1LDcgQEAKIAogY29uZmlnIEEyMjMyCiAJdHJpc3RhdGUgIkNvbW1vZG9yZSBBMjIzMiBzZXJpYWwgc3VwcG9ydCAoRVhQRVJJTUVOVEFMKSIKLQlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTCAmJiBaT1JSTyAmJiBCUk9LRU5fT05fU01QCisJZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwgJiYgWk9SUk8gJiYgQlJPS0VOCiAJLS0taGVscC0tLQogCSAgVGhpcyBvcHRpb24gc3VwcG9ydHMgdGhlIDIyMzIgNy1wb3J0IHNlcmlhbCBjYXJkIHNoaXBwZWQgd2l0aCB0aGUKIAkgIEFtaWdhIDIwMDAgYW5kIG90aGVyIFpvcnJvLWJ1cyBtYWNoaW5lcywgZGF0aW5nIGZyb20gMTk4OS4gIEF0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvYWdwL2FncC5oIGIvZHJpdmVycy9jaGFyL2FncC9hZ3AuaAppbmRleCBkNmYzNmMwLi44NzBmMTJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYWdwL2FncC5oCisrKyBiL2RyaXZlcnMvY2hhci9hZ3AvYWdwLmgKQEAgLTEzMSw3ICsxMzEsNyBAQAogc3RydWN0IGFncF9icmlkZ2VfZGF0YSB7CiAJY29uc3Qgc3RydWN0IGFncF92ZXJzaW9uICp2ZXJzaW9uOwogCWNvbnN0IHN0cnVjdCBhZ3BfYnJpZGdlX2RyaXZlciAqZHJpdmVyOwotCXN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCAqdm1fb3BzOworCWNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCAqdm1fb3BzOwogCXZvaWQgKnByZXZpb3VzX3NpemU7CiAJdm9pZCAqY3VycmVudF9zaXplOwogCXZvaWQgKmRldl9wcml2YXRlX2RhdGE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvYWdwL2FscGhhLWFncC5jIGIvZHJpdmVycy9jaGFyL2FncC9hbHBoYS1hZ3AuYwppbmRleCA1ZWE0ZGE4Li5kZDg0YWY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYWdwL2FscGhhLWFncC5jCisrKyBiL2RyaXZlcnMvY2hhci9hZ3AvYWxwaGEtYWdwLmMKQEAgLTQwLDcgKzQwLDcgQEAKIAl7IDAsIDAsIDAgfSwgLyogZmlsbGVkIGluIGJ5IGFscGhhX2NvcmVfYWdwX3NldHVwICovCiB9OwogCi1zdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgYWxwaGFfY29yZV9hZ3Bfdm1fb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBhbHBoYV9jb3JlX2FncF92bV9vcHMgPSB7CiAJLmZhdWx0ID0gYWxwaGFfY29yZV9hZ3Bfdm1fZmF1bHQsCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvYWdwL3BhcmlzYy1hZ3AuYyBiL2RyaXZlcnMvY2hhci9hZ3AvcGFyaXNjLWFncC5jCmluZGV4IDYwYWI3NTEuLjFjMTI5MjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9hZ3AvcGFyaXNjLWFncC5jCisrKyBiL2RyaXZlcnMvY2hhci9hZ3AvcGFyaXNjLWFncC5jCkBAIC0yMTcsNyArMjE3LDcgQEAKIAkuY29uZmlndXJlCQk9IHBhcmlzY19hZ3BfY29uZmlndXJlLAogCS5mZXRjaF9zaXplCQk9IHBhcmlzY19hZ3BfZmV0Y2hfc2l6ZSwKIAkudGxiX2ZsdXNoCQk9IHBhcmlzY19hZ3BfdGxiZmx1c2gsCi0JLm1hc2tfbWVtb3J5CQk9IHBhcmlzY19hZ3BfcGFnZV9tYXNrX21lbW9yeSwKKwkubWFza19tZW1vcnkJCT0gcGFyaXNjX2FncF9tYXNrX21lbW9yeSwKIAkubWFza3MJCQk9IHBhcmlzY19hZ3BfbWFza3MsCiAJLmFncF9lbmFibGUJCT0gcGFyaXNjX2FncF9lbmFibGUsCiAJLmNhY2hlX2ZsdXNoCQk9IGdsb2JhbF9jYWNoZV9mbHVzaCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hcG0tZW11bGF0aW9uLmMgYi9kcml2ZXJzL2NoYXIvYXBtLWVtdWxhdGlvbi5jCmluZGV4IGFhY2E0MDIuLjRmNTY4Y2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9hcG0tZW11bGF0aW9uLmMKKysrIGIvZHJpdmVycy9jaGFyL2FwbS1lbXVsYXRpb24uYwpAQCAtMzkzLDcgKzM5Myw3IEBACiAJcmV0dXJuIGFzID8gMCA6IC1FTk9NRU07CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGFwbV9iaW9zX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBhcG1fYmlvc19mb3BzID0gewogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkucmVhZAkJPSBhcG1fcmVhZCwKIAkucG9sbAkJPSBhcG1fcG9sbCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hcHBsaWNvbS5jIGIvZHJpdmVycy9jaGFyL2FwcGxpY29tLmMKaW5kZXggNzNhMDc2NS4uZmUyY2IyZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2FwcGxpY29tLmMKKysrIGIvZHJpdmVycy9jaGFyL2FwcGxpY29tLmMKQEAgLTIzLDYgKzIzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L21pc2NkZXZpY2UuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9iZmluLW90cC5jIGIvZHJpdmVycy9jaGFyL2JmaW4tb3RwLmMKaW5kZXggZTNkZDI0Yi4uODM2ZDRmMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2JmaW4tb3RwLmMKKysrIGIvZHJpdmVycy9jaGFyL2JmaW4tb3RwLmMKQEAgLTIxNyw3ICsyMTcsNyBAQAogIyBkZWZpbmUgYmZpbl9vdHBfaW9jdGwgTlVMTAogI2VuZGlmCiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGJmaW5fb3RwX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBiZmluX290cF9mb3BzID0gewogCS5vd25lciAgICAgICAgICA9IFRISVNfTU9EVUxFLAogCS51bmxvY2tlZF9pb2N0bCA9IGJmaW5fb3RwX2lvY3RsLAogCS5yZWFkICAgICAgICAgICA9IGJmaW5fb3RwX3JlYWQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvY3ljbGFkZXMuYyBiL2RyaXZlcnMvY2hhci9jeWNsYWRlcy5jCmluZGV4IGRmNTAzOGIuLjQyNTQ0NTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9jeWNsYWRlcy5jCisrKyBiL2RyaXZlcnMvY2hhci9jeWNsYWRlcy5jCkBAIC0zMzU0LDcgKzMzNTQsNyBAQAogCQkJY29udGludWU7CiAJCX0KICNpZmRlZiBNT0RVTEUKLQkJaWYgKGlzcGFyYW0gJiYgaXJxW2ldKQorCQlpZiAoaXNwYXJhbSAmJiBpIDwgTlJfQ0FSRFMgJiYgaXJxW2ldKQogCQkJY3lfaXNhX2lycSA9IGlycVtpXTsKIAkJZWxzZQogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHRsay5jIGIvZHJpdmVycy9jaGFyL2R0bGsuYwppbmRleCA1MmUwNjU4Li4wNDVjOTMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvZHRsay5jCisrKyBiL2RyaXZlcnMvY2hhci9kdGxrLmMKQEAgLTU2LDYgKzU2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgkvKiBmb3IgLUVCVVNZICovCiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CS8qIGZvciByZXF1ZXN0X3JlZ2lvbiAqLwogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CS8qIGZvciBsb29wc19wZXJfamlmZnkgKi8KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CS8qIGN5Y2xlX2tlcm5lbF9sb2NrKCkgKi8KICNpbmNsdWRlIDxhc20vaW8uaD4JCS8qIGZvciBpbmJfcCwgb3V0Yl9wLCBpbmIsIG91dGIsIGV0Yy4gKi8KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgkvKiBmb3IgZ2V0X3VzZXIsIGV0Yy4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9lcGNhLmMgYi9kcml2ZXJzL2NoYXIvZXBjYS5jCmluZGV4IDlkNTg5ZTMuLmRkZTUxMzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9lcGNhLmMKKysrIGIvZHJpdmVycy9jaGFyL2VwY2EuYwpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc2VyaWFsLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2dlbmVyaWNfc2VyaWFsLmMgYi9kcml2ZXJzL2NoYXIvZ2VuZXJpY19zZXJpYWwuYwppbmRleCA5ZTRlNTY5Li5kNDAwY2JkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvZ2VuZXJpY19zZXJpYWwuYworKysgYi9kcml2ZXJzL2NoYXIvZ2VuZXJpY19zZXJpYWwuYwpAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc2VyaWFsLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9nZW5lcmljX3NlcmlhbC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2dlbnJ0Yy5jIGIvZHJpdmVycy9jaGFyL2dlbnJ0Yy5jCmluZGV4IGFhYzA5ODUuLjMxZTdjOTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9nZW5ydGMuYworKysgYi9kcml2ZXJzL2NoYXIvZ2VucnRjLmMKQEAgLTQzLDYgKzQzLDcgQEAKICNkZWZpbmUgUlRDX1ZFUlNJT04JIjEuMDciCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvbWlzY2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ZjbnRsLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaHZjX2NvbnNvbGUuYyBiL2RyaXZlcnMvY2hhci9odmNfY29uc29sZS5jCmluZGV4IDI1Y2UxNWIuLmE2MzJmMjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9odmNfY29uc29sZS5jCisrKyBiL2RyaXZlcnMvY2hhci9odmNfY29uc29sZS5jCkBAIC02NzgsNyArNjc4LDcgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKGh2Y19wb2xsKTsKIAogLyoqCi0gKiBodmNfcmVzaXplKCkgLSBVcGRhdGUgdGVybWluYWwgd2luZG93IHNpemUgaW5mb3JtYXRpb24uCisgKiBfX2h2Y19yZXNpemUoKSAtIFVwZGF0ZSB0ZXJtaW5hbCB3aW5kb3cgc2l6ZSBpbmZvcm1hdGlvbi4KICAqIEBocDoJCUhWQyBjb25zb2xlIHBvaW50ZXIKICAqIEB3czoJCVRlcm1pbmFsIHdpbmRvdyBzaXplIHN0cnVjdHVyZQogICoKQEAgLTY4NywxMiArNjg3LDEyIEBACiAgKgogICogTG9ja2luZzoJTG9ja2luZyBmcmVlOyB0aGUgZnVuY3Rpb24gTVVTVCBiZSBjYWxsZWQgaG9sZGluZyBocC0+bG9jawogICovCi12b2lkIGh2Y19yZXNpemUoc3RydWN0IGh2Y19zdHJ1Y3QgKmhwLCBzdHJ1Y3Qgd2luc2l6ZSB3cykKK3ZvaWQgX19odmNfcmVzaXplKHN0cnVjdCBodmNfc3RydWN0ICpocCwgc3RydWN0IHdpbnNpemUgd3MpCiB7CiAJaHAtPndzID0gd3M7CiAJc2NoZWR1bGVfd29yaygmaHAtPnR0eV9yZXNpemUpOwogfQotRVhQT1JUX1NZTUJPTF9HUEwoaHZjX3Jlc2l6ZSk7CitFWFBPUlRfU1lNQk9MX0dQTChfX2h2Y19yZXNpemUpOwogCiAvKgogICogVGhpcyBrdGhyZWFkIGlzIGVpdGhlciBwb2xsaW5nIG9yIGludGVycnVwdCBkcml2ZW4uICBUaGlzIGlzIGRldGVybWluZWQgYnkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9odmNfY29uc29sZS5oIGIvZHJpdmVycy9jaGFyL2h2Y19jb25zb2xlLmgKaW5kZXggM2M4NWQ3OC4uMTA5NTBjYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2h2Y19jb25zb2xlLmgKKysrIGIvZHJpdmVycy9jaGFyL2h2Y19jb25zb2xlLmgKQEAgLTI4LDYgKzI4LDcgQEAKICNkZWZpbmUgSFZDX0NPTlNPTEVfSAogI2luY2x1ZGUgPGxpbnV4L2tyZWYuaD4KICNpbmNsdWRlIDxsaW51eC90dHkuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogCiAvKgogICogVGhpcyBpcyB0aGUgbWF4IG51bWJlciBvZiBjb25zb2xlIGFkYXB0ZXJzIHRoYXQgY2FuL3dpbGwgYmUgZm91bmQgYXMKQEAgLTg4LDcgKzg5LDE2IEBACiB2b2lkIGh2Y19raWNrKHZvaWQpOwogCiAvKiBSZXNpemUgaHZjIHR0eSB0ZXJtaW5hbCB3aW5kb3cgKi8KLWV4dGVybiB2b2lkIGh2Y19yZXNpemUoc3RydWN0IGh2Y19zdHJ1Y3QgKmhwLCBzdHJ1Y3Qgd2luc2l6ZSB3cyk7CitleHRlcm4gdm9pZCBfX2h2Y19yZXNpemUoc3RydWN0IGh2Y19zdHJ1Y3QgKmhwLCBzdHJ1Y3Qgd2luc2l6ZSB3cyk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBodmNfcmVzaXplKHN0cnVjdCBodmNfc3RydWN0ICpocCwgc3RydWN0IHdpbnNpemUgd3MpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZocC0+bG9jaywgZmxhZ3MpOworCV9faHZjX3Jlc2l6ZShocCwgd3MpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhwLT5sb2NrLCBmbGFncyk7Cit9CiAKIC8qIGRlZmF1bHQgbm90aWZpZXIgZm9yIGlycSBiYXNlZCBub3RpZmljYXRpb24gKi8KIGV4dGVybiBpbnQgbm90aWZpZXJfYWRkX2lycShzdHJ1Y3QgaHZjX3N0cnVjdCAqaHAsIGludCBkYXRhKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9odmNfaXVjdi5jIGIvZHJpdmVycy9jaGFyL2h2Y19pdWN2LmMKaW5kZXggMGVjYWM3ZS4uYjhhNWQ2NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2h2Y19pdWN2LmMKKysrIGIvZHJpdmVycy9jaGFyL2h2Y19pdWN2LmMKQEAgLTI3Myw3ICsyNzMsOSBAQAogCWNhc2UgTVNHX1RZUEVfV0lOU0laRToKIAkJaWYgKHJiLT5tYnVmLT5kYXRhbGVuICE9IHNpemVvZihzdHJ1Y3Qgd2luc2l6ZSkpCiAJCQlicmVhazsKLQkJaHZjX3Jlc2l6ZShwcml2LT5odmMsICooKHN0cnVjdCB3aW5zaXplICopIHJiLT5tYnVmLT5kYXRhKSk7CisJCS8qIFRoZSBjYWxsZXIgbXVzdCBlbnN1cmUgdGhhdCB0aGUgaHZjIGlzIGxvY2tlZCwgd2hpY2gKKwkJICogaXMgdGhlIGNhc2Ugd2hlbiBjYWxsZWQgZnJvbSBodmNfaXVjdl9nZXRfY2hhcnMoKSAqLworCQlfX2h2Y19yZXNpemUocHJpdi0+aHZjLCAqKChzdHJ1Y3Qgd2luc2l6ZSAqKSByYi0+bWJ1Zi0+ZGF0YSkpOwogCQlicmVhazsKIAogCWNhc2UgTVNHX1RZUEVfRVJST1I6CS8qIGlnbm9yZWQgLi4uICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL29tYXAtcm5nLmMgYi9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL29tYXAtcm5nLmMKaW5kZXggMDBkZDNkZS4uMDZhYWQwOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2h3X3JhbmRvbS9vbWFwLXJuZy5jCisrKyBiL2RyaXZlcnMvY2hhci9od19yYW5kb20vb21hcC1ybmcuYwpAQCAtMTE2LDcgKzExNiw3IEBACiAJaWYgKCFyZXMpCiAJCXJldHVybiAtRU5PRU5UOwogCi0JbWVtID0gcmVxdWVzdF9tZW1fcmVnaW9uKHJlcy0+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+YnVmLndvcmspOwogfQogCiAvKioKQEAgLTc1NiwxMiArNzU2LDkgQEAKIAkgKiBOX1RUWS4KIAkgKi8KIAlpZiAodHR5LT5kcml2ZXItPmZsYWdzICYgVFRZX0RSSVZFUl9SRVNFVF9URVJNSU9TKSB7Ci0JCS8qIE1ha2Ugc3VyZSB0aGUgb2xkIGxkaXNjIGlzIHF1aWVzY2VudCAqLwotCQl0dHlfbGRpc2NfaGFsdCh0dHkpOwotCQlmbHVzaF9zY2hlZHVsZWRfd29yaygpOwotCiAJCS8qIEF2b2lkIHJhY2luZyBzZXRfbGRpc2Mgb3IgdHR5X2xkaXNjX3JlbGVhc2UgKi8KIAkJbXV0ZXhfbG9jaygmdHR5LT5sZGlzY19tdXRleCk7CisJCXR0eV9sZGlzY19oYWx0KHR0eSk7CiAJCWlmICh0dHktPmxkaXNjKSB7CS8qIE5vdCB5ZXQgY2xvc2VkICovCiAJCQkvKiBTd2l0Y2ggYmFjayB0byBOX1RUWSAqLwogCQkJdHR5X2xkaXNjX3JlaW5pdCh0dHkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3ZpcnRpb19jb25zb2xlLmMgYi9kcml2ZXJzL2NoYXIvdmlydGlvX2NvbnNvbGUuYwppbmRleCAwZDMyOGI1Li5hMDM1YWUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvdmlydGlvX2NvbnNvbGUuYworKysgYi9kcml2ZXJzL2NoYXIvdmlydGlvX2NvbnNvbGUuYwpAQCAtMzEsNyArMzEsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC92aXJ0aW8uaD4KLSNpbmNsdWRlIDxsaW51eC92aXJ0aW9faWRzLmg+CiAjaW5jbHVkZSA8bGludXgvdmlydGlvX2NvbnNvbGUuaD4KICNpbmNsdWRlICJodmNfY29uc29sZS5oIgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvdnRfaW9jdGwuYyBiL2RyaXZlcnMvY2hhci92dF9pb2N0bC5jCmluZGV4IDI5YzY1MWEuLmVkODZkM2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci92dF9pb2N0bC5jCisrKyBiL2RyaXZlcnMvY2hhci92dF9pb2N0bC5jCkBAIC05ODEsOCArOTgxLDEwIEBACiAJCQlnb3RvIGVwZXJtOwogCiAJCWlmIChjb3B5X2Zyb21fdXNlcigmdnNhLCAoc3RydWN0IHZ0X3NldGFjdGl2YXRlIF9fdXNlciAqKWFyZywKLQkJCQkJCXNpemVvZihzdHJ1Y3QgdnRfc2V0YWN0aXZhdGUpKSkKLQkJCXJldHVybiAtRUZBVUxUOworCQkJCQlzaXplb2Yoc3RydWN0IHZ0X3NldGFjdGl2YXRlKSkpIHsKKwkJCXJldCA9IC1FRkFVTFQ7CisJCQlnb3RvIG91dDsKKwkJfQogCQlpZiAodnNhLmNvbnNvbGUgPT0gMCB8fCB2c2EuY29uc29sZSA+IE1BWF9OUl9DT05TT0xFUykKIAkJCXJldCA9IC1FTlhJTzsKIAkJZWxzZSB7CkBAIC0xNTMwLDcgKzE1MzIsNyBAQAogCiAJY2FzZSBQSU9fVU5JTUFQOgogCWNhc2UgR0lPX1VOSU1BUDoKLQkJcmV0ID0gZG9fdW5pbWFwX2lvY3RsKGNtZCwgdXAsIHBlcm0sIHZjKTsKKwkJcmV0ID0gY29tcGF0X3VuaW1hcF9pb2N0bChjbWQsIHVwLCBwZXJtLCB2Yyk7CiAJCWJyZWFrOwogCiAJLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci94aWxpbnhfaHdpY2FwL3hpbGlueF9od2ljYXAuYyBiL2RyaXZlcnMvY2hhci94aWxpbnhfaHdpY2FwL3hpbGlueF9od2ljYXAuYwppbmRleCBmNDBhYjY5Li40ODQ2ZDUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIveGlsaW54X2h3aWNhcC94aWxpbnhfaHdpY2FwLmMKKysrIGIvZHJpdmVycy9jaGFyL3hpbGlueF9od2ljYXAveGlsaW54X2h3aWNhcC5jCkBAIC01NTksNyArNTU5LDcgQEAKIAlyZXR1cm4gc3RhdHVzOwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBod2ljYXBfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGh3aWNhcF9mb3BzID0gewogCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS53cml0ZSA9IGh3aWNhcF93cml0ZSwKIAkucmVhZCA9IGh3aWNhcF9yZWFkLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcHVpZGxlL2NwdWlkbGUuYyBiL2RyaXZlcnMvY3B1aWRsZS9jcHVpZGxlLmMKaW5kZXggYWQ0MWYxOS4uMTJmZGQzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcHVpZGxlL2NwdWlkbGUuYworKysgYi9kcml2ZXJzL2NwdWlkbGUvY3B1aWRsZS5jCkBAIC03Niw4ICs3NiwxMSBAQAogI2VuZGlmCiAJLyogYXNrIHRoZSBnb3Zlcm5vciBmb3IgdGhlIG5leHQgc3RhdGUgKi8KIAluZXh0X3N0YXRlID0gY3B1aWRsZV9jdXJyX2dvdmVybm9yLT5zZWxlY3QoZGV2KTsKLQlpZiAobmVlZF9yZXNjaGVkKCkpCisJaWYgKG5lZWRfcmVzY2hlZCgpKSB7CisJCWxvY2FsX2lycV9lbmFibGUoKTsKIAkJcmV0dXJuOworCX0KKwogCXRhcmdldF9zdGF0ZSA9ICZkZXYtPnN0YXRlc1tuZXh0X3N0YXRlXTsKIAogCS8qIGVudGVyIHRoZSBzdGF0ZSBhbmQgdXBkYXRlIHN0YXRzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NyeXB0by9wYWRsb2NrLXNoYS5jIGIvZHJpdmVycy9jcnlwdG8vcGFkbG9jay1zaGEuYwppbmRleCA3NmNiNmIzLi4wYWY4MDU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NyeXB0by9wYWRsb2NrLXNoYS5jCisrKyBiL2RyaXZlcnMvY3J5cHRvL3BhZGxvY2stc2hhLmMKQEAgLTI0LDYgKzI0LDEyIEBACiAjaW5jbHVkZSA8YXNtL2kzODcuaD4KICNpbmNsdWRlICJwYWRsb2NrLmgiCiAKKyNpZmRlZiBDT05GSUdfNjRCSVQKKyNkZWZpbmUgU1RBQ0tfQUxJR04gMTYKKyNlbHNlCisjZGVmaW5lIFNUQUNLX0FMSUdOIDQKKyNlbmRpZgorCiBzdHJ1Y3QgcGFkbG9ja19zaGFfZGVzYyB7CiAJc3RydWN0IHNoYXNoX2Rlc2MgZmFsbGJhY2s7CiB9OwpAQCAtNjQsNyArNzAsOSBAQAogCS8qIFdlIGNhbid0IHN0b3JlIGRpcmVjdGx5IHRvICpvdXQgYXMgaXQgbWF5IGJlIHVuYWxpZ25lZC4gKi8KIAkvKiBCVFcgRG9uJ3QgcmVkdWNlIHRoZSBidWZmZXIgc2l6ZSBiZWxvdyAxMjggQnl0ZXMhCiAJICogICAgIFBhZExvY2sgbWljcm9jb2RlIG5lZWRzIGl0IHRoYXQgYmlnLiAqLwotCWNoYXIgcmVzdWx0WzEyOF0gX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQoUEFETE9DS19BTElHTk1FTlQpKSk7CisJY2hhciBidWZbMTI4ICsgUEFETE9DS19BTElHTk1FTlQgLSBTVEFDS19BTElHTl0gX19hdHRyaWJ1dGVfXworCQkoKGFsaWduZWQoU1RBQ0tfQUxJR04pKSk7CisJY2hhciAqcmVzdWx0ID0gUFRSX0FMSUdOKCZidWZbMF0sIFBBRExPQ0tfQUxJR05NRU5UKTsKIAlzdHJ1Y3QgcGFkbG9ja19zaGFfZGVzYyAqZGN0eCA9IHNoYXNoX2Rlc2NfY3R4KGRlc2MpOwogCXN0cnVjdCBzaGExX3N0YXRlIHN0YXRlOwogCXVuc2lnbmVkIGludCBzcGFjZTsKQEAgLTEyOCw3ICsxMzYsOSBAQAogCS8qIFdlIGNhbid0IHN0b3JlIGRpcmVjdGx5IHRvICpvdXQgYXMgaXQgbWF5IGJlIHVuYWxpZ25lZC4gKi8KIAkvKiBCVFcgRG9uJ3QgcmVkdWNlIHRoZSBidWZmZXIgc2l6ZSBiZWxvdyAxMjggQnl0ZXMhCiAJICogICAgIFBhZExvY2sgbWljcm9jb2RlIG5lZWRzIGl0IHRoYXQgYmlnLiAqLwotCWNoYXIgcmVzdWx0WzEyOF0gX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQoUEFETE9DS19BTElHTk1FTlQpKSk7CisJY2hhciBidWZbMTI4ICsgUEFETE9DS19BTElHTk1FTlQgLSBTVEFDS19BTElHTl0gX19hdHRyaWJ1dGVfXworCQkoKGFsaWduZWQoU1RBQ0tfQUxJR04pKSk7CisJY2hhciAqcmVzdWx0ID0gUFRSX0FMSUdOKCZidWZbMF0sIFBBRExPQ0tfQUxJR05NRU5UKTsKIAlzdHJ1Y3QgcGFkbG9ja19zaGFfZGVzYyAqZGN0eCA9IHNoYXNoX2Rlc2NfY3R4KGRlc2MpOwogCXN0cnVjdCBzaGEyNTZfc3RhdGUgc3RhdGU7CiAJdW5zaWduZWQgaW50IHNwYWNlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9lZGFjL0tjb25maWcgYi9kcml2ZXJzL2VkYWMvS2NvbmZpZwppbmRleCAwMjEyN2U1Li41NWM5YzU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2VkYWMvS2NvbmZpZworKysgYi9kcml2ZXJzL2VkYWMvS2NvbmZpZwpAQCAtNDcsNiArNDcsMTggQEAKIAkgIFNvdXJjZSBmaWxlIG5hbWUgYW5kIGxpbmUgbnVtYmVyIHdoZXJlIGRlYnVnZ2luZyBtZXNzYWdlCiAJICBwcmludGVkIHdpbGwgYmUgYWRkZWQgdG8gZGVidWdnaW5nIG1lc3NhZ2UuCiAKKyBjb25maWcgRURBQ19ERUNPREVfTUNFCisJdHJpc3RhdGUgIkRlY29kZSBNQ0VzIGluIGh1bWFuLXJlYWRhYmxlIGZvcm0gKG9ubHkgb24gQU1EIGZvciBub3cpIgorCWRlcGVuZHMgb24gQ1BVX1NVUF9BTUQgJiYgWDg2X01DRQorCWRlZmF1bHQgeQorCS0tLWhlbHAtLS0KKwkgIEVuYWJsZSB0aGlzIG9wdGlvbiBpZiB5b3Ugd2FudCB0byBkZWNvZGUgTWFjaGluZSBDaGVjayBFeGNlcHRpb25zCisJICBvY2N1cmluZyBvbiB5b3VyIG1hY2hpbmUgaW4gaHVtYW4tcmVhZGFibGUgZm9ybS4KKworCSAgWW91IHNob3VsZCBkZWZpbml0ZWx5IHNheSBZIGhlcmUgaW4gY2FzZSB5b3Ugd2FudCB0byBkZWNvZGUgTUNFcworCSAgd2hpY2ggb2NjdXIgcmVhbGx5IGVhcmx5IHVwb24gYm9vdCwgYmVmb3JlIHRoZSBtb2R1bGUgaW5mcmFzdHJ1Y3R1cmUKKwkgIGhhcyBiZWVuIGluaXRpYWxpemVkLgorCiBjb25maWcgRURBQ19NTV9FREFDCiAJdHJpc3RhdGUgIk1haW4gTWVtb3J5IEVEQUMgKEVycm9yIERldGVjdGlvbiBBbmQgQ29ycmVjdGlvbikgcmVwb3J0aW5nIgogCWhlbHAKQEAgLTU5LDcgKzcxLDcgQEAKIAogY29uZmlnIEVEQUNfQU1ENjQKIAl0cmlzdGF0ZSAiQU1ENjQgKE9wdGVyb24sIEF0aGxvbjY0KSBLOCwgRjEwaCwgRjExaCIKLQlkZXBlbmRzIG9uIEVEQUNfTU1fRURBQyAmJiBLOF9OQiAmJiBYODZfNjQgJiYgUENJICYmIENQVV9TVVBfQU1ECisJZGVwZW5kcyBvbiBFREFDX01NX0VEQUMgJiYgSzhfTkIgJiYgWDg2XzY0ICYmIFBDSSAmJiBFREFDX0RFQ09ERV9NQ0UKIAloZWxwCiAJICBTdXBwb3J0IGZvciBlcnJvciBkZXRlY3Rpb24gYW5kIGNvcnJlY3Rpb24gb24gdGhlIEFNRCA2NAogCSAgRmFtaWxpZXMgb2YgTWVtb3J5IENvbnRyb2xsZXJzIChLOCwgRjEwaCBhbmQgRjExaCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZWRhYy9NYWtlZmlsZSBiL2RyaXZlcnMvZWRhYy9NYWtlZmlsZQppbmRleCA3YTQ3M2JiLi5iYzVkYzIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2VkYWMvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9lZGFjL01ha2VmaWxlCkBAIC02LDcgKzYsNiBAQAogIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KICMKIAotCiBvYmotJChDT05GSUdfRURBQykJCQk6PSBlZGFjX3N0dWIubwogb2JqLSQoQ09ORklHX0VEQUNfTU1fRURBQykJCSs9IGVkYWNfY29yZS5vCiAKQEAgLTE3LDkgKzE2LDcgQEAKIGVkYWNfY29yZS1vYmpzCSs9IGVkYWNfcGNpLm8gZWRhY19wY2lfc3lzZnMubwogZW5kaWYKIAotaWZkZWYgQ09ORklHX0NQVV9TVVBfQU1ECi1lZGFjX2NvcmUtb2JqcyAgKz0gZWRhY19tY2VfYW1kLm8KLWVuZGlmCitvYmotJChDT05GSUdfRURBQ19ERUNPREVfTUNFKQkJKz0gZWRhY19tY2VfYW1kLm8KIAogb2JqLSQoQ09ORklHX0VEQUNfQU1ENzZYKQkJKz0gYW1kNzZ4X2VkYWMubwogb2JqLSQoQ09ORklHX0VEQUNfQ1BDOTI1KQkJKz0gY3BjOTI1X2VkYWMubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9lZGFjL2FtZDY0X2VkYWMuYyBiL2RyaXZlcnMvZWRhYy9hbWQ2NF9lZGFjLmMKaW5kZXggNGU1NTFlNi4uZDQ1NjBkOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9lZGFjL2FtZDY0X2VkYWMuYworKysgYi9kcml2ZXJzL2VkYWMvYW1kNjRfZWRhYy5jCkBAIC0xNSw4ICsxNSw4IEBACiAKIC8qIExvb2t1cCB0YWJsZSBmb3IgYWxsIHBvc3NpYmxlIE1DIGNvbnRyb2wgaW5zdGFuY2VzICovCiBzdHJ1Y3QgYW1kNjRfcHZ0Owotc3RhdGljIHN0cnVjdCBtZW1fY3RsX2luZm8gKm1jaV9sb29rdXBbTUFYX05VTU5PREVTXTsKLXN0YXRpYyBzdHJ1Y3QgYW1kNjRfcHZ0ICpwdnRfbG9va3VwW01BWF9OVU1OT0RFU107CitzdGF0aWMgc3RydWN0IG1lbV9jdGxfaW5mbyAqbWNpX2xvb2t1cFtFREFDX01BWF9OVU1OT0RFU107CitzdGF0aWMgc3RydWN0IGFtZDY0X3B2dCAqcHZ0X2xvb2t1cFtFREFDX01BWF9OVU1OT0RFU107CiAKIC8qCiAgKiBTZWUgRjJ4ODAgZm9yIEs4IGFuZCBGMnhbMSwwXTgwIGZvciBGYW0xMCBhbmQgbGF0ZXIuIFRoZSB0YWJsZSBiZWxvdyBpcyBvbmx5CkBAIC0xODksNyArMTg5LDEwIEBACiAvKiBNYXAgZnJvbSBhIENTUk9XIGVudHJ5IHRvIHRoZSBtYXNrIGVudHJ5IHRoYXQgb3BlcmF0ZXMgb24gaXQgKi8KIHN0YXRpYyBpbmxpbmUgdTMyIGFtZDY0X21hcF90b19kY3NfbWFzayhzdHJ1Y3QgYW1kNjRfcHZ0ICpwdnQsIGludCBjc3JvdykKIHsKLQlyZXR1cm4gY3Nyb3cgPj4gKHB2dC0+bnVtX2Rjc20gPj4gMyk7CisJaWYgKGJvb3RfY3B1X2RhdGEueDg2ID09IDB4ZiAmJiBwdnQtPmV4dF9tb2RlbCA8IE9QVEVST05fQ1BVX1JFVl9GKQorCQlyZXR1cm4gY3Nyb3c7CisJZWxzZQorCQlyZXR1cm4gY3Nyb3cgPj4gMTsKIH0KIAogLyogcmV0dXJuIHRoZSAnYmFzZScgYWRkcmVzcyB0aGUgaSd0aCBDUyBlbnRyeSBvZiB0aGUgJ2RjdCcgRFJBTSBjb250cm9sbGVyICovCkBAIC0yNzksMjkgKzI4MiwyNiBAQAogCWludGx2X2VuID0gcHZ0LT5kcmFtX0ludGx2RW5bMF07CiAKIAlpZiAoaW50bHZfZW4gPT0gMCkgewotCQlmb3IgKG5vZGVfaWQgPSAwOyA7ICkgeworCQlmb3IgKG5vZGVfaWQgPSAwOyBub2RlX2lkIDwgRFJBTV9SRUdfQ09VTlQ7IG5vZGVfaWQrKykgewogCQkJaWYgKGFtZDY0X2Jhc2VfbGltaXRfbWF0Y2gocHZ0LCBzeXNfYWRkciwgbm9kZV9pZCkpCi0JCQkJYnJlYWs7Ci0KLQkJCWlmICgrK25vZGVfaWQgPj0gRFJBTV9SRUdfQ09VTlQpCi0JCQkJZ290byBlcnJfbm9fbWF0Y2g7CisJCQkJZ290byBmb3VuZDsKIAkJfQotCQlnb3RvIGZvdW5kOworCQlnb3RvIGVycl9ub19tYXRjaDsKIAl9CiAKLQlpZiAodW5saWtlbHkoKGludGx2X2VuICE9ICgweDAxIDw8IDgpKSAmJgotCQkgICAgIChpbnRsdl9lbiAhPSAoMHgwMyA8PCA4KSkgJiYKLQkJICAgICAoaW50bHZfZW4gIT0gKDB4MDcgPDwgOCkpKSkgeworCWlmICh1bmxpa2VseSgoaW50bHZfZW4gIT0gMHgwMSkgJiYKKwkJICAgICAoaW50bHZfZW4gIT0gMHgwMykgJiYKKwkJICAgICAoaW50bHZfZW4gIT0gMHgwNykpKSB7CiAJCWFtZDY0X3ByaW50ayhLRVJOX1dBUk5JTkcsICJqdW5rIHZhbHVlIG9mIDB4JXggZXh0cmFjdGVkIGZyb20gIgogCQkJICAgICAiSW50bHZFbiBmaWVsZCBvZiBEUkFNIEJhc2UgUmVnaXN0ZXIgZm9yIG5vZGUgMDogIgotCQkJICAgICAiVGhpcyBwcm9iYWJseSBpbmRpY2F0ZXMgYSBCSU9TIGJ1Zy5cbiIsIGludGx2X2VuKTsKKwkJCSAgICAgInRoaXMgcHJvYmFibHkgaW5kaWNhdGVzIGEgQklPUyBidWcuXG4iLCBpbnRsdl9lbik7CiAJCXJldHVybiBOVUxMOwogCX0KIAogCWJpdHMgPSAoKCh1MzIpIHN5c19hZGRyKSA+PiAxMikgJiBpbnRsdl9lbjsKIAogCWZvciAobm9kZV9pZCA9IDA7IDsgKSB7Ci0JCWlmICgocHZ0LT5kcmFtX2xpbWl0W25vZGVfaWRdICYgaW50bHZfZW4pID09IGJpdHMpCisJCWlmICgocHZ0LT5kcmFtX0ludGx2U2VsW25vZGVfaWRdICYgaW50bHZfZW4pID09IGJpdHMpCiAJCQlicmVhazsJLyogaW50bHZfc2VsIGZpZWxkIG1hdGNoZXMgKi8KIAogCQlpZiAoKytub2RlX2lkID49IERSQU1fUkVHX0NPVU5UKQpAQCAtMzExLDEwICszMTEsMTAgQEAKIAkvKiBzYW5pdHkgdGVzdCBmb3Igc3lzX2FkZHIgKi8KIAlpZiAodW5saWtlbHkoIWFtZDY0X2Jhc2VfbGltaXRfbWF0Y2gocHZ0LCBzeXNfYWRkciwgbm9kZV9pZCkpKSB7CiAJCWFtZDY0X3ByaW50ayhLRVJOX1dBUk5JTkcsCi0JCQkgICIlcygpOiBzeXNfYWRkciAweCVseCBmYWxscyBvdXRzaWRlIGJhc2UvbGltaXQgIgotCQkJICAiYWRkcmVzcyByYW5nZSBmb3Igbm9kZSAlZCB3aXRoIG5vZGUgaW50ZXJsZWF2aW5nICIKLQkJCSAgImVuYWJsZWQuXG4iLCBfX2Z1bmNfXywgKHVuc2lnbmVkIGxvbmcpc3lzX2FkZHIsCi0JCQkgIG5vZGVfaWQpOworCQkJICAgICAiJXMoKTogc3lzX2FkZHIgMHglbGx4IGZhbGxzIG91dHNpZGUgYmFzZS9saW1pdCAiCisJCQkgICAgICJhZGRyZXNzIHJhbmdlIGZvciBub2RlICVkIHdpdGggbm9kZSBpbnRlcmxlYXZpbmcgIgorCQkJICAgICAiZW5hYmxlZC5cbiIsCisJCQkgICAgIF9fZnVuY19fLCBzeXNfYWRkciwgbm9kZV9pZCk7CiAJCXJldHVybiBOVUxMOwogCX0KIApAQCAtMzc3LDcgKzM3Nyw3IEBACiAJICogYmFzZS9tYXNrIHJlZ2lzdGVyIHBhaXIsIHRlc3QgdGhlIGNvbmRpdGlvbiBzaG93biBuZWFyIHRoZSBzdGFydCBvZgogCSAqIHNlY3Rpb24gMy41LjQgKHAuIDg0LCBCS0RHICMyNjA5NCwgSzgsIHJldkEtRSkuCiAJICovCi0JZm9yIChjc3JvdyA9IDA7IGNzcm93IDwgQ0hJUFNFTEVDVF9DT1VOVDsgY3Nyb3crKykgeworCWZvciAoY3Nyb3cgPSAwOyBjc3JvdyA8IHB2dC0+Y3NfY291bnQ7IGNzcm93KyspIHsKIAogCQkvKiBUaGlzIERSQU0gY2hpcCBzZWxlY3QgaXMgZGlzYWJsZWQgb24gdGhpcyBub2RlICovCiAJCWlmICgocHZ0LT5kY3NiMFtjc3Jvd10gJiBLOF9EQ1NCX0NTX0VOQUJMRSkgPT0gMCkKQEAgLTczNCw3ICs3MzQsNyBAQAogCXU2NCBiYXNlLCBtYXNrOwogCiAJcHZ0ID0gbWNpLT5wdnRfaW5mbzsKLQlCVUdfT04oKGNzcm93IDwgMCkgfHwgKGNzcm93ID49IENISVBTRUxFQ1RfQ09VTlQpKTsKKwlCVUdfT04oKGNzcm93IDwgMCkgfHwgKGNzcm93ID49IHB2dC0+Y3NfY291bnQpKTsKIAogCWJhc2UgPSBiYXNlX2Zyb21fZGN0X2Jhc2UocHZ0LCBjc3Jvdyk7CiAJbWFzayA9IG1hc2tfZnJvbV9kY3RfbWFzayhwdnQsIGNzcm93KTsKQEAgLTk2MiwzNSArOTYyLDI3IEBACiAgKi8KIHN0YXRpYyB2b2lkIGFtZDY0X3NldF9kY3RfYmFzZV9hbmRfbWFzayhzdHJ1Y3QgYW1kNjRfcHZ0ICpwdnQpCiB7Ci0JaWYgKHB2dC0+ZXh0X21vZGVsID49IE9QVEVST05fQ1BVX1JFVl9GKSB7CisKKwlpZiAoYm9vdF9jcHVfZGF0YS54ODYgPT0gMHhmICYmIHB2dC0+ZXh0X21vZGVsIDwgT1BURVJPTl9DUFVfUkVWX0YpIHsKKwkJcHZ0LT5kY3NiX2Jhc2UJCT0gUkVWX0VfRENTQl9CQVNFX0JJVFM7CisJCXB2dC0+ZGNzbV9tYXNrCQk9IFJFVl9FX0RDU01fTUFTS19CSVRTOworCQlwdnQtPmRjc19tYXNrX25vdHVzZWQJPSBSRVZfRV9EQ1NfTk9UVVNFRF9CSVRTOworCQlwdnQtPmRjc19zaGlmdAkJPSBSRVZfRV9EQ1NfU0hJRlQ7CisJCXB2dC0+Y3NfY291bnQJCT0gODsKKwkJcHZ0LT5udW1fZGNzbQkJPSA4OworCX0gZWxzZSB7CiAJCXB2dC0+ZGNzYl9iYXNlCQk9IFJFVl9GX0YxWGhfRENTQl9CQVNFX0JJVFM7CiAJCXB2dC0+ZGNzbV9tYXNrCQk9IFJFVl9GX0YxWGhfRENTTV9NQVNLX0JJVFM7CiAJCXB2dC0+ZGNzX21hc2tfbm90dXNlZAk9IFJFVl9GX0YxWGhfRENTX05PVFVTRURfQklUUzsKIAkJcHZ0LT5kY3Nfc2hpZnQJCT0gUkVWX0ZfRjFYaF9EQ1NfU0hJRlQ7CiAKLQkJc3dpdGNoIChib290X2NwdV9kYXRhLng4NikgewotCQljYXNlIDB4ZjoKLQkJCXB2dC0+bnVtX2Rjc20gPSBSRVZfRl9EQ1NNX0NPVU5UOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSAweDEwOgotCQkJcHZ0LT5udW1fZGNzbSA9IEYxMF9EQ1NNX0NPVU5UOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSAweDExOgotCQkJcHZ0LT5udW1fZGNzbSA9IEYxMV9EQ1NNX0NPVU5UOwotCQkJYnJlYWs7Ci0KLQkJZGVmYXVsdDoKLQkJCWFtZDY0X3ByaW50ayhLRVJOX0VSUiwgIlVuc3VwcG9ydGVkIGZhbWlseSFcbiIpOwotCQkJYnJlYWs7CisJCWlmIChib290X2NwdV9kYXRhLng4NiA9PSAweDExKSB7CisJCQlwdnQtPmNzX2NvdW50ID0gNDsKKwkJCXB2dC0+bnVtX2Rjc20gPSAyOworCQl9IGVsc2UgeworCQkJcHZ0LT5jc19jb3VudCA9IDg7CisJCQlwdnQtPm51bV9kY3NtID0gNDsKIAkJfQotCX0gZWxzZSB7Ci0JCXB2dC0+ZGNzYl9iYXNlCQk9IFJFVl9FX0RDU0JfQkFTRV9CSVRTOwotCQlwdnQtPmRjc21fbWFzawkJPSBSRVZfRV9EQ1NNX01BU0tfQklUUzsKLQkJcHZ0LT5kY3NfbWFza19ub3R1c2VkCT0gUkVWX0VfRENTX05PVFVTRURfQklUUzsKLQkJcHZ0LT5kY3Nfc2hpZnQJCT0gUkVWX0VfRENTX1NISUZUOwotCQlwdnQtPm51bV9kY3NtCQk9IFJFVl9FX0RDU01fQ09VTlQ7CiAJfQogfQogCkBAIC0xMDAzLDcgKzk5NSw3IEBACiAKIAlhbWQ2NF9zZXRfZGN0X2Jhc2VfYW5kX21hc2socHZ0KTsKIAotCWZvciAoY3MgPSAwOyBjcyA8IENISVBTRUxFQ1RfQ09VTlQ7IGNzKyspIHsKKwlmb3IgKGNzID0gMDsgY3MgPCBwdnQtPmNzX2NvdW50OyBjcysrKSB7CiAJCXJlZyA9IEs4X0RDU0IwICsgKGNzICogNCk7CiAJCWVyciA9IHBjaV9yZWFkX2NvbmZpZ19kd29yZChwdnQtPmRyYW1fZjJfY3RsLCByZWcsCiAJCQkJCQkmcHZ0LT5kY3NiMFtjc10pOwpAQCAtMTE5Myw3ICsxMTg1LDcgQEAKIAkgKiBkaWZmZXJlbnQgZnJvbSB0aGUgbm9kZSB0aGF0IGRldGVjdGVkIHRoZSBlcnJvci4KIAkgKi8KIAlzcmNfbWNpID0gZmluZF9tY19ieV9zeXNfYWRkcihtY2ksIFN5c3RlbUFkZHJlc3MpOwotCWlmIChzcmNfbWNpKSB7CisJaWYgKCFzcmNfbWNpKSB7CiAJCWFtZDY0X21jX3ByaW50ayhtY2ksIEtFUk5fRVJSLAogCQkJICAgICAiZmFpbGVkIHRvIG1hcCBlcnJvciBhZGRyZXNzIDB4JWx4IHRvIGEgbm9kZVxuIiwKIAkJCSAgICAgKHVuc2lnbmVkIGxvbmcpU3lzdGVtQWRkcmVzcyk7CkBAIC0xMzc2LDggKzEzNjgsOCBAQAogCiAJcHZ0LT5kcmFtX0ludGx2RW5bZHJhbV0gPSAobG93X2Jhc2UgPj4gOCkgJiAweDc7CiAKLQlwdnQtPmRyYW1fYmFzZVtkcmFtXSA9ICgoKCgodTY0KSBoaWdoX2Jhc2UgJiAweDAwMDAwMEZGKSA8PCAzMikgfAotCQkJCSgodTY0KSBsb3dfYmFzZSAmIDB4RkZGRjAwMDApKSkgPDwgODsKKwlwdnQtPmRyYW1fYmFzZVtkcmFtXSA9ICgoKHU2NCloaWdoX2Jhc2UgJiAweDAwMDAwMEZGKSA8PCA0MCkgfAorCQkJICAgICAgICgoKHU2NClsb3dfYmFzZSAgJiAweEZGRkYwMDAwKSA8PCA4KTsKIAogCWxvd19vZmZzZXQgPSBLOF9EUkFNX0xJTUlUX0xPVyArIChkcmFtIDw8IDMpOwogCWhpZ2hfb2Zmc2V0ID0gRjEwX0RSQU1fTElNSVRfSElHSCArIChkcmFtIDw8IDMpOwpAQCAtMTM5OCw5ICsxMzkwLDkgQEAKIAkgKiBFeHRyYWN0IGFkZHJlc3MgdmFsdWVzIGFuZCBmb3JtIGEgTElNSVQgYWRkcmVzcy4gTGltaXQgaXMgdGhlIEhJR0hFU1QKIAkgKiBtZW1vcnkgbG9jYXRpb24gb2YgdGhlIHJlZ2lvbiwgc28gbG93IDI0IGJpdHMgbmVlZCB0byBiZSBhbGwgb25lcy4KIAkgKi8KLQlsb3dfbGltaXQgfD0gMHgwMDAwRkZGRjsKLQlwdnQtPmRyYW1fbGltaXRbZHJhbV0gPQotCQkoKCgodTY0KSBoaWdoX2xpbWl0IDw8IDMyKSArICh1NjQpIGxvd19saW1pdCkgPDwgOCkgfCAoMHhGRik7CisJcHZ0LT5kcmFtX2xpbWl0W2RyYW1dID0gKCgodTY0KWhpZ2hfbGltaXQgJiAweDAwMDAwMEZGKSA8PCA0MCkgfAorCQkJCSgoKHU2NCkgbG93X2xpbWl0ICYgMHhGRkZGMDAwMCkgPDwgOCkgfAorCQkJCTB4MDBGRkZGRkY7CiB9CiAKIHN0YXRpYyB2b2lkIGYxMF9yZWFkX2RyYW1fY3RsX3JlZ2lzdGVyKHN0cnVjdCBhbWQ2NF9wdnQgKnB2dCkKQEAgLTE1NjYsNyArMTU1OCw3IEBACiAKIAlkZWJ1Z2YxKCJJbnB1dEFkZHI9MHgleCAgY2hhbm5lbHNlbGVjdD0lZFxuIiwgaW5fYWRkciwgY3MpOwogCi0JZm9yIChjc3JvdyA9IDA7IGNzcm93IDwgQ0hJUFNFTEVDVF9DT1VOVDsgY3Nyb3crKykgeworCWZvciAoY3Nyb3cgPSAwOyBjc3JvdyA8IHB2dC0+Y3NfY291bnQ7IGNzcm93KyspIHsKIAogCQljc19iYXNlID0gYW1kNjRfZ2V0X2RjdF9iYXNlKHB2dCwgY3MsIGNzcm93KTsKIAkJaWYgKCEoY3NfYmFzZSAmIEs4X0RDU0JfQ1NfRU5BQkxFKSkKQEAgLTI0OTcsNyArMjQ4OSw3IEBACiAgKiBOT1RFOiBDUFUgUmV2aXNpb24gRGVwZW5kZW50IGNvZGUKICAqCiAgKiBJbnB1dDoKLSAqCUBjc3Jvd19uciBDaGlwU2VsZWN0IFJvdyBOdW1iZXIgKDAuLkNISVBTRUxFQ1RfQ09VTlQtMSkKKyAqCUBjc3Jvd19uciBDaGlwU2VsZWN0IFJvdyBOdW1iZXIgKDAuLnB2dC0+Y3NfY291bnQtMSkKICAqCWs4IHByaXZhdGUgcG9pbnRlciB0byAtLT4KICAqCQkJRFJBTSBCYW5rIEFkZHJlc3MgbWFwcGluZyByZWdpc3RlcgogICoJCQlub2RlX2lkCkBAIC0yNTc3LDcgKzI1NjksNyBAQAogCQkocHZ0LT5uYmNmZyAmIEs4X05CQ0ZHX0VDQ19FTkFCTEUpID8gIkVuYWJsZWQiIDogIkRpc2FibGVkIgogCQkpOwogCi0JZm9yIChpID0gMDsgaSA8IENISVBTRUxFQ1RfQ09VTlQ7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBwdnQtPmNzX2NvdW50OyBpKyspIHsKIAkJY3Nyb3cgPSAmbWNpLT5jc3Jvd3NbaV07CiAKIAkJaWYgKChwdnQtPmRjc2IwW2ldICYgSzhfRENTQl9DU19FTkFCTEUpID09IDApIHsKQEAgLTI5ODgsNyArMjk4MCw3IEBACiAJCWdvdG8gZXJyX2V4aXQ7CiAKIAlyZXQgPSAtRU5PTUVNOwotCW1jaSA9IGVkYWNfbWNfYWxsb2MoMCwgQ0hJUFNFTEVDVF9DT1VOVCwgcHZ0LT5jaGFubmVsX2NvdW50LCBub2RlX2lkKTsKKwltY2kgPSBlZGFjX21jX2FsbG9jKDAsIHB2dC0+Y3NfY291bnQsIHB2dC0+Y2hhbm5lbF9jb3VudCwgbm9kZV9pZCk7CiAJaWYgKCFtY2kpCiAJCWdvdG8gZXJyX2V4aXQ7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZWRhYy9hbWQ2NF9lZGFjLmggYi9kcml2ZXJzL2VkYWMvYW1kNjRfZWRhYy5oCmluZGV4IDhlYTA3ZTIuLmM2ZjM1OWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZWRhYy9hbWQ2NF9lZGFjLmgKKysrIGIvZHJpdmVycy9lZGFjL2FtZDY0X2VkYWMuaApAQCAtMTMyLDYgKzEzMiw4IEBACiAjZGVmaW5lIEVEQUNfQU1ENjRfVkVSU0lPTgkJIiBWZXI6IDMuMi4wICIgX19EQVRFX18KICNkZWZpbmUgRURBQ19NT0RfU1RSCQkJImFtZDY0X2VkYWMiCiAKKyNkZWZpbmUgRURBQ19NQVhfTlVNTk9ERVMJCTgKKwogLyogRXh0ZW5kZWQgTW9kZWwgZnJvbSBDUFVJRCwgZm9yIENQVSBSZXZpc2lvbiBudW1iZXJzICovCiAjZGVmaW5lIE9QVEVST05fQ1BVX0xFX1JFVl9DCQkwCiAjZGVmaW5lIE9QVEVST05fQ1BVX1JFVl9ECQkxCkBAIC0xNDIsNyArMTQ0LDcgQEAKICNkZWZpbmUgT1BURVJPTl9DUFVfUkVWX0ZBCQk1CiAKIC8qIEhhcmR3YXJlIGxpbWl0IG9uIENoaXBTZWxlY3Qgcm93cyBwZXIgTUMgYW5kIHByb2Nlc3NvcnMgcGVyIHN5c3RlbSAqLwotI2RlZmluZSBDSElQU0VMRUNUX0NPVU5UCQk4CisjZGVmaW5lIE1BWF9DU19DT1VOVAkJCTgKICNkZWZpbmUgRFJBTV9SRUdfQ09VTlQJCQk4CiAKIApAQCAtMTkzLDcgKzE5NSw2IEBACiAgKi8KICNkZWZpbmUgUkVWX0VfRENTQl9CQVNFX0JJVFMJCSgweEZGRTBGRTAwVUxMKQogI2RlZmluZSBSRVZfRV9EQ1NfU0hJRlQJCQk0Ci0jZGVmaW5lIFJFVl9FX0RDU01fQ09VTlQJCTgKIAogI2RlZmluZSBSRVZfRl9GMVhoX0RDU0JfQkFTRV9CSVRTCSgweDFGRjgzRkUwVUxMKQogI2RlZmluZSBSRVZfRl9GMVhoX0RDU19TSElGVAkJOApAQCAtMjA0LDkgKzIwNSw2IEBACiAgKi8KICNkZWZpbmUgUkVWX0ZfRENTQl9CQVNFX0JJVFMJCSgweDFGRjgzRkUwVUxMKQogI2RlZmluZSBSRVZfRl9EQ1NfU0hJRlQJCQk4Ci0jZGVmaW5lIFJFVl9GX0RDU01fQ09VTlQJCTQKLSNkZWZpbmUgRjEwX0RDU01fQ09VTlQJCQk0Ci0jZGVmaW5lIEYxMV9EQ1NNX0NPVU5UCQkJMgogCiAvKiBEUkFNIENTIE1hc2sgUmVnaXN0ZXJzICovCiAjZGVmaW5lIEs4X0RDU00wCQkJMHg2MApAQCAtMzc0LDEzICszNzIsMTEgQEAKIAogI2RlZmluZSBTRVRfTkJfRFJBTV9JTkpFQ1RJT05fV1JJVEUod29yZCwgYml0cykgIFwKIAkJCQkJKEJJVCgoKHdvcmQpICYgMHhGKSArIDIwKSB8IFwKLQkJCQkJQklUKDE3KSB8ICBcCi0JCQkJCSgoYml0cykgJiAweEYpKQorCQkJCQlCSVQoMTcpIHwgYml0cykKIAogI2RlZmluZSBTRVRfTkJfRFJBTV9JTkpFQ1RJT05fUkVBRCh3b3JkLCBiaXRzKSAgXAogCQkJCQkoQklUKCgod29yZCkgJiAweEYpICsgMjApIHwgXAotCQkJCQlCSVQoMTYpIHwgIFwKLQkJCQkJKChiaXRzKSAmIDB4RikpCisJCQkJCUJJVCgxNikgfCAgYml0cykKIAogI2RlZmluZSBLOF9OQkNBUAkJCTB4RTgKICNkZWZpbmUgSzhfTkJDQVBfQ09SRVMJCQkoQklUKDEyKXxCSVQoMTMpKQpAQCAtNDQ1LDEyICs0NDEsMTIgQEAKIAl1MzIgZGJhbTE7CQkvKiBEUkFNIEJhc2UgQWRkcmVzcyBNYXBwaW5nIHJlZyBmb3IgRENUMSAqLwogCiAJLyogRFJBTSBDUyBCYXNlIEFkZHJlc3MgUmVnaXN0ZXJzIEYyeFsxLDBdWzVDOjQwXSAqLwotCXUzMiBkY3NiMFtDSElQU0VMRUNUX0NPVU5UXTsKLQl1MzIgZGNzYjFbQ0hJUFNFTEVDVF9DT1VOVF07CisJdTMyIGRjc2IwW01BWF9DU19DT1VOVF07CisJdTMyIGRjc2IxW01BWF9DU19DT1VOVF07CiAKIAkvKiBEUkFNIENTIE1hc2sgUmVnaXN0ZXJzIEYyeFsxLDBdWzZDOjYwXSAqLwotCXUzMiBkY3NtMFtDSElQU0VMRUNUX0NPVU5UXTsKLQl1MzIgZGNzbTFbQ0hJUFNFTEVDVF9DT1VOVF07CisJdTMyIGRjc20wW01BWF9DU19DT1VOVF07CisJdTMyIGRjc20xW01BWF9DU19DT1VOVF07CiAKIAkvKgogCSAqIERlY29kZWQgcGFydHMgb2YgRFJBTSBCQVNFIGFuZCBMSU1JVCBSZWdpc3RlcnMKQEAgLTQ3MCw2ICs0NjYsNyBAQAogCSAqLwogCXUzMiBkY3NiX2Jhc2U7CQkvKiBEQ1NCIGJhc2UgYml0cyAqLwogCXUzMiBkY3NtX21hc2s7CQkvKiBEQ1NNIG1hc2sgYml0cyAqLworCXUzMiBjc19jb3VudDsJCS8qIG51bSBjaGlwIHNlbGVjdHMgKD09IG51bSBEQ1NCIHJlZ2lzdGVycykgKi8KIAl1MzIgbnVtX2Rjc207CQkvKiBOdW1iZXIgb2YgRENTTSByZWdpc3RlcnMgKi8KIAl1MzIgZGNzX21hc2tfbm90dXNlZDsJLyogRENTTSBub3R1c2VkIG1hc2sgYml0cyAqLwogCXUzMiBkY3Nfc2hpZnQ7CQkvKiBEQ1NCIGFuZCBEQ1NNIHNoaWZ0IHZhbHVlICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvYW1kNjRfZWRhY19pbmouYyBiL2RyaXZlcnMvZWRhYy9hbWQ2NF9lZGFjX2luai5jCmluZGV4IGQzNjc1YjcuLjI5ZjFmN2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZWRhYy9hbWQ2NF9lZGFjX2luai5jCisrKyBiL2RyaXZlcnMvZWRhYy9hbWQ2NF9lZGFjX2luai5jCkBAIC0xLDUgKzEsMTEgQEAKICNpbmNsdWRlICJhbWQ2NF9lZGFjLmgiCiAKK3N0YXRpYyBzc2l6ZV90IGFtZDY0X2luamVjdF9zZWN0aW9uX3Nob3coc3RydWN0IG1lbV9jdGxfaW5mbyAqbWNpLCBjaGFyICpidWYpCit7CisJc3RydWN0IGFtZDY0X3B2dCAqcHZ0ID0gbWNpLT5wdnRfaW5mbzsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIweCV4XG4iLCBwdnQtPmluamVjdGlvbi5zZWN0aW9uKTsKK30KKwogLyoKICAqIHN0b3JlIGVycm9yIGluamVjdGlvbiBzZWN0aW9uIHZhbHVlIHdoaWNoIHJlZmVycyB0byBvbmUgb2YgNCAxNi1ieXRlIHNlY3Rpb25zCiAgKiB3aXRoaW4gYSA2NC1ieXRlIGNhY2hlbGluZQpAQCAtMTUsMTIgKzIxLDI2IEBACiAKIAlyZXQgPSBzdHJpY3Rfc3RydG91bChkYXRhLCAxMCwgJnZhbHVlKTsKIAlpZiAocmV0ICE9IC1FSU5WQUwpIHsKKworCQlpZiAodmFsdWUgPiAzKSB7CisJCQlhbWQ2NF9wcmludGsoS0VSTl9XQVJOSU5HLAorCQkJCSAgICAgIiVzOiBpbnZhbGlkIHNlY3Rpb24gMHglbHhcbiIsCisJCQkJICAgICBfX2Z1bmNfXywgdmFsdWUpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwogCQlwdnQtPmluamVjdGlvbi5zZWN0aW9uID0gKHUzMikgdmFsdWU7CiAJCXJldHVybiBjb3VudDsKIAl9CiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIHNzaXplX3QgYW1kNjRfaW5qZWN0X3dvcmRfc2hvdyhzdHJ1Y3QgbWVtX2N0bF9pbmZvICptY2ksIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgYW1kNjRfcHZ0ICpwdnQgPSBtY2ktPnB2dF9pbmZvOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIjB4JXhcbiIsIHB2dC0+aW5qZWN0aW9uLndvcmQpOworfQorCiAvKgogICogc3RvcmUgZXJyb3IgaW5qZWN0aW9uIHdvcmQgdmFsdWUgd2hpY2ggcmVmZXJzIHRvIG9uZSBvZiA5IDE2LWJpdCB3b3JkIG9mIHRoZQogICogMTYtYnl0ZSAoMTI4LWJpdCArIEVDQyBiaXRzKSBzZWN0aW9uCkBAIC0zNywxNCArNTcsMjUgQEAKIAlyZXQgPSBzdHJpY3Rfc3RydG91bChkYXRhLCAxMCwgJnZhbHVlKTsKIAlpZiAocmV0ICE9IC1FSU5WQUwpIHsKIAotCQl2YWx1ZSA9ICh2YWx1ZSA8PSA4KSA/IHZhbHVlIDogMDsKLQkJcHZ0LT5pbmplY3Rpb24ud29yZCA9ICh1MzIpIHZhbHVlOworCQlpZiAodmFsdWUgPiA4KSB7CisJCQlhbWQ2NF9wcmludGsoS0VSTl9XQVJOSU5HLAorCQkJCSAgICAgIiVzOiBpbnZhbGlkIHdvcmQgMHglbHhcbiIsCisJCQkJICAgICBfX2Z1bmNfXywgdmFsdWUpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KIAorCQlwdnQtPmluamVjdGlvbi53b3JkID0gKHUzMikgdmFsdWU7CiAJCXJldHVybiBjb3VudDsKIAl9CiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIHNzaXplX3QgYW1kNjRfaW5qZWN0X2VjY192ZWN0b3Jfc2hvdyhzdHJ1Y3QgbWVtX2N0bF9pbmZvICptY2ksIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgYW1kNjRfcHZ0ICpwdnQgPSBtY2ktPnB2dF9pbmZvOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIjB4JXhcbiIsIHB2dC0+aW5qZWN0aW9uLmJpdF9tYXApOworfQorCiAvKgogICogc3RvcmUgMTYgYml0IGVycm9yIGluamVjdGlvbiB2ZWN0b3Igd2hpY2ggZW5hYmxlcyBpbmplY3RpbmcgZXJyb3JzIHRvIHRoZQogICogY29ycmVzcG9uZGluZyBiaXQgd2l0aGluIHRoZSBlcnJvciBpbmplY3Rpb24gd29yZCBhYm92ZS4gV2hlbiB1c2VkIGR1cmluZyBhCkBAIC02MCw4ICs5MSwxNCBAQAogCXJldCA9IHN0cmljdF9zdHJ0b3VsKGRhdGEsIDE2LCAmdmFsdWUpOwogCWlmIChyZXQgIT0gLUVJTlZBTCkgewogCi0JCXB2dC0+aW5qZWN0aW9uLmJpdF9tYXAgPSAodTMyKSB2YWx1ZSAmIDB4RkZGRjsKKwkJaWYgKHZhbHVlICYgMHhGRkZGMDAwMCkgeworCQkJYW1kNjRfcHJpbnRrKEtFUk5fV0FSTklORywKKwkJCQkgICAgICIlczogaW52YWxpZCBFY2NWZWN0b3I6IDB4JWx4XG4iLAorCQkJCSAgICAgX19mdW5jX18sIHZhbHVlKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CiAKKwkJcHZ0LT5pbmplY3Rpb24uYml0X21hcCA9ICh1MzIpIHZhbHVlOwogCQlyZXR1cm4gY291bnQ7CiAJfQogCXJldHVybiByZXQ7CkBAIC0xNDcsNyArMTg0LDcgQEAKIAkJCS5uYW1lID0gImluamVjdF9zZWN0aW9uIiwKIAkJCS5tb2RlID0gKFNfSVJVR08gfCBTX0lXVVNSKQogCQl9LAotCQkuc2hvdyA9IE5VTEwsCisJCS5zaG93ID0gYW1kNjRfaW5qZWN0X3NlY3Rpb25fc2hvdywKIAkJLnN0b3JlID0gYW1kNjRfaW5qZWN0X3NlY3Rpb25fc3RvcmUsCiAJfSwKIAl7CkBAIC0xNTUsNyArMTkyLDcgQEAKIAkJCS5uYW1lID0gImluamVjdF93b3JkIiwKIAkJCS5tb2RlID0gKFNfSVJVR08gfCBTX0lXVVNSKQogCQl9LAotCQkuc2hvdyA9IE5VTEwsCisJCS5zaG93ID0gYW1kNjRfaW5qZWN0X3dvcmRfc2hvdywKIAkJLnN0b3JlID0gYW1kNjRfaW5qZWN0X3dvcmRfc3RvcmUsCiAJfSwKIAl7CkBAIC0xNjMsNyArMjAwLDcgQEAKIAkJCS5uYW1lID0gImluamVjdF9lY2NfdmVjdG9yIiwKIAkJCS5tb2RlID0gKFNfSVJVR08gfCBTX0lXVVNSKQogCQl9LAotCQkuc2hvdyA9IE5VTEwsCisJCS5zaG93ID0gYW1kNjRfaW5qZWN0X2VjY192ZWN0b3Jfc2hvdywKIAkJLnN0b3JlID0gYW1kNjRfaW5qZWN0X2VjY192ZWN0b3Jfc3RvcmUsCiAJfSwKIAl7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvZWRhY19tY2VfYW1kLmMgYi9kcml2ZXJzL2VkYWMvZWRhY19tY2VfYW1kLmMKaW5kZXggMGMyMWMzNy4uNzEzZWQ3ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9lZGFjL2VkYWNfbWNlX2FtZC5jCisrKyBiL2RyaXZlcnMvZWRhYy9lZGFjX21jZV9hbWQuYwpAQCAtMyw2ICszLDcgQEAKIAogc3RhdGljIGJvb2wgcmVwb3J0X2dhcnRfZXJyb3JzOwogc3RhdGljIHZvaWQgKCpuYl9idXNfZGVjb2RlcikoaW50IG5vZGVfaWQsIHN0cnVjdCBlcnJfcmVncyAqcmVncyk7CitzdGF0aWMgdm9pZCAoKm9yaWdfbWNlX2NhbGxiYWNrKShzdHJ1Y3QgbWNlICptKTsKIAogdm9pZCBhbWRfcmVwb3J0X2dhcnRfZXJyb3JzKGJvb2wgdikKIHsKQEAgLTM2Miw3ICszNjMsNyBAQAogCQlwcl93YXJuaW5nKCJIdWg/IFVua25vd24gTUNFIGVycm9yIDB4JXhcbiIsIGVjKTsKIH0KIAotdm9pZCBkZWNvZGVfbWNlKHN0cnVjdCBtY2UgKm0pCitzdGF0aWMgdm9pZCBhbWRfZGVjb2RlX21jZShzdHJ1Y3QgbWNlICptKQogewogCXN0cnVjdCBlcnJfcmVncyByZWdzOwogCWludCBub2RlLCBlY2M7CkBAIC00MjAsMyArNDIxLDMyIEBACiAKIAlhbWRfZGVjb2RlX2Vycl9jb2RlKG0tPnN0YXR1cyAmIDB4ZmZmZik7CiB9CisKK3N0YXRpYyBpbnQgX19pbml0IG1jZV9hbWRfaW5pdCh2b2lkKQoreworCS8qCisJICogV2UgY2FuIGRlY29kZSBNQ0VzIGZvciBPcHRlcm9uIGFuZCBsYXRlciBDUFVzOgorCSAqLworCWlmICgoYm9vdF9jcHVfZGF0YS54ODZfdmVuZG9yID09IFg4Nl9WRU5ET1JfQU1EKSAmJgorCSAgICAoYm9vdF9jcHVfZGF0YS54ODYgPj0gMHhmKSkgeworCQkvKiBzYWZlIHRoZSBkZWZhdWx0IGRlY29kZSBtY2UgY2FsbGJhY2sgKi8KKwkJb3JpZ19tY2VfY2FsbGJhY2sgPSB4ODZfbWNlX2RlY29kZV9jYWxsYmFjazsKKworCQl4ODZfbWNlX2RlY29kZV9jYWxsYmFjayA9IGFtZF9kZWNvZGVfbWNlOworCX0KKworCXJldHVybiAwOworfQorZWFybHlfaW5pdGNhbGwobWNlX2FtZF9pbml0KTsKKworI2lmZGVmIE1PRFVMRQorc3RhdGljIHZvaWQgX19leGl0IG1jZV9hbWRfZXhpdCh2b2lkKQoreworCXg4Nl9tY2VfZGVjb2RlX2NhbGxiYWNrID0gb3JpZ19tY2VfY2FsbGJhY2s7Cit9CisKK01PRFVMRV9ERVNDUklQVElPTigiQU1EIE1DRSBkZWNvZGVyIik7CitNT0RVTEVfQUxJQVMoImVkYWMtbWNlLWFtZCIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworbW9kdWxlX2V4aXQobWNlX2FtZF9leGl0KTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9lZGFjL2k1MDAwX2VkYWMuYyBiL2RyaXZlcnMvZWRhYy9pNTAwMF9lZGFjLmMKaW5kZXggZDMzNTA4Ni4uNzdhOTU3OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9lZGFjL2k1MDAwX2VkYWMuYworKysgYi9kcml2ZXJzL2VkYWMvaTUwMDBfZWRhYy5jCkBAIC0xMTczLDcgKzExNzMsNyBAQAogCQkJcGNpX3JlYWRfY29uZmlnX3dvcmQocHZ0LT5icmFuY2hfMSwgd2hlcmUsCiAJCQkJCSZwdnQtPmIxX210cltzbG90X3Jvd10pOwogCQkJZGVidWdmMigiTVRSJWQgd2hlcmU9MHgleCBCMSB2YWx1ZT0weCV4XG4iLCBzbG90X3JvdywKLQkJCQl3aGVyZSwgcHZ0LT5iMF9tdHJbc2xvdF9yb3ddKTsKKwkJCQl3aGVyZSwgcHZ0LT5iMV9tdHJbc2xvdF9yb3ddKTsKIAkJfSBlbHNlIHsKIAkJCXB2dC0+YjFfbXRyW3Nsb3Rfcm93XSA9IDA7CiAJCX0KQEAgLTEyMzIsNyArMTIzMiw3IEBACiAJc3RydWN0IGNzcm93X2luZm8gKnBfY3Nyb3c7CiAJaW50IGVtcHR5LCBjaGFubmVsX2NvdW50OwogCWludCBtYXhfY3Nyb3dzOwotCWludCBtdHI7CisJaW50IG10ciwgbXRyMTsKIAlpbnQgY3Nyb3dfbWVnczsKIAlpbnQgY2hhbm5lbDsKIAlpbnQgY3Nyb3c7CkBAIC0xMjUxLDkgKzEyNTEsMTAgQEAKIAogCQkvKiB1c2UgYnJhbmNoIDAgZm9yIHRoZSBiYXNpcyAqLwogCQltdHIgPSBwdnQtPmIwX210cltjc3JvdyA+PiAxXTsKKwkJbXRyMSA9IHB2dC0+YjFfbXRyW2Nzcm93ID4+IDFdOwogCiAJCS8qIGlmIG5vIERJTU1TIG9uIHRoaXMgcm93LCBjb250aW51ZSAqLwotCQlpZiAoIU1UUl9ESU1NU19QUkVTRU5UKG10cikpCisJCWlmICghTVRSX0RJTU1TX1BSRVNFTlQobXRyKSAmJiAhTVRSX0RJTU1TX1BSRVNFTlQobXRyMSkpCiAJCQljb250aW51ZTsKIAogCQkvKiBGQUtFIE9VVCBWQUxVRVMsIEZJWE1FICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvaTU0MDBfZWRhYy5jIGIvZHJpdmVycy9lZGFjL2k1NDAwX2VkYWMuYwppbmRleCBiMDhiNmQ4Li5mOTlkMTA2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2VkYWMvaTU0MDBfZWRhYy5jCisrKyBiL2RyaXZlcnMvZWRhYy9pNTQwMF9lZGFjLmMKQEAgLTQ2LDkgKzQ2LDEwIEBACiAvKiBMaW1pdHMgZm9yIGk1NDAwICovCiAjZGVmaW5lIE5VTV9NVFJTX1BFUl9CUkFOQ0gJNAogI2RlZmluZSBDSEFOTkVMU19QRVJfQlJBTkNICTIKKyNkZWZpbmUgTUFYX0RJTU1TX1BFUl9DSEFOTkVMCU5VTV9NVFJTX1BFUl9CUkFOQ0gKICNkZWZpbmUJTUFYX0NIQU5ORUxTCQk0Ci0jZGVmaW5lIE1BWF9ESU1NUwkJKE1BWF9DSEFOTkVMUyAqIDQpCS8qIFVwIHRvIDQgRElNTSdzIHBlciBjaGFubmVsICovCi0jZGVmaW5lIE1BWF9DU1JPV1MJCShNQVhfRElNTVMgKiAyKQkJLyogbWF4IHBvc3NpYmxlIGNzcm93cyBwZXIgY2hhbm5lbCAqLworLyogbWF4IHBvc3NpYmxlIGNzcm93cyBwZXIgY2hhbm5lbCAqLworI2RlZmluZSBNQVhfQ1NST1dTCQkoTUFYX0RJTU1TX1BFUl9DSEFOTkVMKQogCiAvKiBEZXZpY2UgMTYsCiAgKiBGdW5jdGlvbiAwOiBTeXN0ZW0gQWRkcmVzcwpAQCAtMzMxLDcgKzMzMiw2IEBACiAKIHN0cnVjdCBpNTQwMF9kaW1tX2luZm8gewogCWludCBtZWdhYnl0ZXM7CQkvKiBzaXplLCAwIG1lYW5zIG5vdCBwcmVzZW50ICAqLwotCWludCBkdWFsX3Jhbms7CiB9OwogCiAvKiBkcml2ZXIgcHJpdmF0ZSBkYXRhIHN0cnVjdHVyZSAqLwpAQCAtODQ5LDExICs4NDksOSBAQAogCWludCBuOwogCiAJLyogVGhlcmUgaXMgb25lIE1UUiBmb3IgZWFjaCBzbG90IHBhaXIgb2YgRkItRElNTXMsCi0JICAgRWFjaCBzbG90IG1heSBoYXZlIG9uZSBvciB0d28gcmFua3MgKDIgY3Nyb3dzKSwKIAkgICBFYWNoIHNsb3QgcGFpciBtYXkgYmUgYXQgYnJhbmNoIDAgb3IgYnJhbmNoIDEuCi0JICAgU28sIGNzcm93IHNob3VsZCBiZSBkaXZpZGVkIGJ5IGVpZ2h0CiAJICovCi0JbiA9IGNzcm93ID4+IDM7CisJbiA9IGNzcm93OwogCiAJaWYgKG4gPj0gTlVNX01UUlNfUEVSX0JSQU5DSCkgewogCQlkZWJ1Z2YwKCJFUlJPUjogdHJ5aW5nIHRvIGFjY2VzcyBhbiBpbnZhbGlkIGNzcm93OiAlZFxuIiwKQEAgLTkwNSwyNSArOTAzLDIyIEBACiAJCWFtYl9wcmVzZW50X3JlZyA9IGRldGVybWluZV9hbWJfcHJlc2VudF9yZWcocHZ0LCBjaGFubmVsKTsKIAogCQkvKiBEZXRlcm1pbmUgaWYgdGhlcmUgaXMgYSBESU1NIHByZXNlbnQgaW4gdGhpcyBESU1NIHNsb3QgKi8KLQkJaWYgKGFtYl9wcmVzZW50X3JlZyAmICgxIDw8IChjc3JvdyA+PiAxKSkpIHsKLQkJCWRpbmZvLT5kdWFsX3JhbmsgPSBNVFJfRElNTV9SQU5LKG10cik7CisJCWlmIChhbWJfcHJlc2VudF9yZWcgJiAoMSA8PCBjc3JvdykpIHsKKwkJCS8qIFN0YXJ0IHdpdGggdGhlIG51bWJlciBvZiBiaXRzIGZvciBhIEJhbmsKKwkJCSAqIG9uIHRoZSBEUkFNICovCisJCQlhZGRyQml0cyA9IE1UUl9EUkFNX0JBTktTX0FERFJfQklUUyhtdHIpOworCQkJLyogQWRkIHRoZW51bWJlciBvZiBST1cgYml0cyAqLworCQkJYWRkckJpdHMgKz0gTVRSX0RJTU1fUk9XU19BRERSX0JJVFMobXRyKTsKKwkJCS8qIGFkZCB0aGUgbnVtYmVyIG9mIENPTFVNTiBiaXRzICovCisJCQlhZGRyQml0cyArPSBNVFJfRElNTV9DT0xTX0FERFJfQklUUyhtdHIpOworCQkJLyogYWRkIHRoZSBudW1iZXIgb2YgUkFOSyBiaXRzICovCisJCQlhZGRyQml0cyArPSBNVFJfRElNTV9SQU5LKG10cik7CiAKLQkJCWlmICghKChkaW5mby0+ZHVhbF9yYW5rID09IDApICYmCi0JCQkJKChjc3JvdyAmIDB4MSkgPT0gMHgxKSkpIHsKLQkJCQkvKiBTdGFydCB3aXRoIHRoZSBudW1iZXIgb2YgYml0cyBmb3IgYSBCYW5rCi0JCQkJICogb24gdGhlIERSQU0gKi8KLQkJCQlhZGRyQml0cyA9IE1UUl9EUkFNX0JBTktTX0FERFJfQklUUyhtdHIpOwotCQkJCS8qIEFkZCB0aGVudW1iZXIgb2YgUk9XIGJpdHMgKi8KLQkJCQlhZGRyQml0cyArPSBNVFJfRElNTV9ST1dTX0FERFJfQklUUyhtdHIpOwotCQkJCS8qIGFkZCB0aGUgbnVtYmVyIG9mIENPTFVNTiBiaXRzICovCi0JCQkJYWRkckJpdHMgKz0gTVRSX0RJTU1fQ09MU19BRERSX0JJVFMobXRyKTsKKwkJCWFkZHJCaXRzICs9IDY7CS8qIGFkZCA2NCBiaXRzIHBlciBESU1NICovCisJCQlhZGRyQml0cyAtPSAyMDsJLyogZGl2aWRlIGJ5IDJeXjIwICovCisJCQlhZGRyQml0cyAtPSAzOwkvKiA4IGJpdHMgcGVyIGJ5dGVzICovCiAKLQkJCQlhZGRyQml0cyArPSA2OwkvKiBhZGQgNjQgYml0cyBwZXIgRElNTSAqLwotCQkJCWFkZHJCaXRzIC09IDIwOwkvKiBkaXZpZGUgYnkgMl5eMjAgKi8KLQkJCQlhZGRyQml0cyAtPSAzOwkvKiA4IGJpdHMgcGVyIGJ5dGVzICovCi0KLQkJCQlkaW5mby0+bWVnYWJ5dGVzID0gMSA8PCBhZGRyQml0czsKLQkJCX0KKwkJCWRpbmZvLT5tZWdhYnl0ZXMgPSAxIDw8IGFkZHJCaXRzOwogCQl9CiAJfQogfQpAQCAtOTUxLDEyICs5NDYsMTIgQEAKIAkJcmV0dXJuOwogCX0KIAotCS8qIFNjYW4gYWxsIHRoZSBhY3R1YWwgQ1NST1dTICh3aGljaCBpcyAjIG9mIERJTU1TICogMikKKwkvKiBTY2FuIGFsbCB0aGUgYWN0dWFsIENTUk9XUwogCSAqIGFuZCBjYWxjdWxhdGUgdGhlIGluZm9ybWF0aW9uIGZvciBlYWNoIERJTU0KIAkgKiBTdGFydCB3aXRoIHRoZSBoaWdoZXN0IGNzcm93IGZpcnN0LCB0byBkaXNwbGF5IGl0IGZpcnN0CiAJICogYW5kIHdvcmsgdG93YXJkIHRoZSAwdGggY3Nyb3cKIAkgKi8KLQltYXhfY3Nyb3dzID0gcHZ0LT5tYXhkaW1tcGVyY2ggKiAyOworCW1heF9jc3Jvd3MgPSBwdnQtPm1heGRpbW1wZXJjaDsKIAlmb3IgKGNzcm93ID0gbWF4X2Nzcm93cyAtIDE7IGNzcm93ID49IDA7IGNzcm93LS0pIHsKIAogCQkvKiBvbiBhbiBvZGQgY3Nyb3csIGZpcnN0IG91dHB1dCBhICdib3VuZGFyeScgbWFya2VyLApAQCAtMTA2NCw3ICsxMDU5LDcgQEAKIAogCS8qIEdldCB0aGUgc2V0IG9mIE1UUlswLTNdIHJlZ3MgYnkgZWFjaCBicmFuY2ggKi8KIAlmb3IgKHNsb3Rfcm93ID0gMDsgc2xvdF9yb3cgPCBOVU1fTVRSU19QRVJfQlJBTkNIOyBzbG90X3JvdysrKSB7Ci0JCWludCB3aGVyZSA9IE1UUjAgKyAoc2xvdF9yb3cgKiBzaXplb2YodTMyKSk7CisJCWludCB3aGVyZSA9IE1UUjAgKyAoc2xvdF9yb3cgKiBzaXplb2YodTE2KSk7CiAKIAkJLyogQnJhbmNoIDAgc2V0IG9mIE1UUiByZWdpc3RlcnMgKi8KIAkJcGNpX3JlYWRfY29uZmlnX3dvcmQocHZ0LT5icmFuY2hfMCwgd2hlcmUsCkBAIC0xMTQ2LDcgKzExNDEsNyBAQAogCXB2dCA9IG1jaS0+cHZ0X2luZm87CiAKIAljaGFubmVsX2NvdW50ID0gcHZ0LT5tYXhjaDsKLQltYXhfY3Nyb3dzID0gcHZ0LT5tYXhkaW1tcGVyY2ggKiAyOworCW1heF9jc3Jvd3MgPSBwdnQtPm1heGRpbW1wZXJjaDsKIAogCWVtcHR5ID0gMTsJCS8qIEFzc3VtZSBOTyBtZW1vcnkgKi8KIApAQCAtMTIxNSwyOCArMTIxMCw2IEBACiB9CiAKIC8qCi0gKiBpNTQwMF9nZXRfZGltbV9hbmRfY2hhbm5lbF9jb3VudHMocGRldiwgJm51bV9jc3Jvd3MsICZudW1fY2hhbm5lbHMpCi0gKgotICoJYXNrIHRoZSBkZXZpY2UgaG93IG1hbnkgY2hhbm5lbHMgYXJlIHByZXNlbnQgYW5kIGhvdyBtYW55IENTUk9XUwotICoJIGFzIHdlbGwKLSAqLwotc3RhdGljIHZvaWQgaTU0MDBfZ2V0X2RpbW1fYW5kX2NoYW5uZWxfY291bnRzKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAotCQkJCQlpbnQgKm51bV9kaW1tc19wZXJfY2hhbm5lbCwKLQkJCQkJaW50ICpudW1fY2hhbm5lbHMpCi17Ci0JdTggdmFsdWU7Ci0KLQkvKiBOZWVkIHRvIHJldHJpZXZlIGp1c3QgaG93IG1hbnkgY2hhbm5lbHMgYW5kIGRpbW1zIHBlciBjaGFubmVsIGFyZQotCSAqIHN1cHBvcnRlZCBvbiB0aGlzIG1lbW9yeSBjb250cm9sbGVyCi0JICovCi0JcGNpX3JlYWRfY29uZmlnX2J5dGUocGRldiwgTUFYRElNTVBFUkNILCAmdmFsdWUpOwotCSpudW1fZGltbXNfcGVyX2NoYW5uZWwgPSAoaW50KXZhbHVlICogMjsKLQotCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsIE1BWENILCAmdmFsdWUpOwotCSpudW1fY2hhbm5lbHMgPSAoaW50KXZhbHVlOwotfQotCi0vKgogICoJaTU0MDBfcHJvYmUxCVByb2JlIGZvciBPTkUgaW5zdGFuY2Ugb2YgZGV2aWNlIHRvIHNlZSBpZiBpdCBpcwogICoJCQlwcmVzZW50LgogICoJcmV0dXJuOgpAQCAtMTI2MywyMiArMTIzNiwxNiBAQAogCWlmIChQQ0lfRlVOQyhwZGV2LT5kZXZmbikgIT0gMCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQkvKiBBc2sgdGhlIGRldmljZXMgZm9yIHRoZSBudW1iZXIgb2YgQ1NST1dTIGFuZCBDSEFOTkVMUyBzbwotCSAqIHRoYXQgd2UgY2FuIGNhbGN1bGF0ZSB0aGUgbWVtb3J5IHJlc291cmNlcywgZXRjCi0JICoKLQkgKiBUaGUgQ2hpcHNldCB3aWxsIHJlcG9ydCB3aGF0IGl0IGNhbiBoYW5kbGUgd2hpY2ggd2lsbCBiZSBncmVhdGVyCi0JICogb3IgZXF1YWwgdG8gd2hhdCB0aGUgbW90aGVyYm9hcmQgbWFudWZhY3R1cmVyIHdpbGwgaW1wbGVtZW50LgotCSAqCi0JICogQXMgd2UgZG9uJ3QgaGF2ZSBhIG1vdGhlcmJvYXJkIGlkZW50aWZpY2F0aW9uIHJvdXRpbmUgdG8gZGV0ZXJtaW5lCisJLyogQXMgd2UgZG9uJ3QgaGF2ZSBhIG1vdGhlcmJvYXJkIGlkZW50aWZpY2F0aW9uIHJvdXRpbmUgdG8gZGV0ZXJtaW5lCiAJICogYWN0dWFsIG51bWJlciBvZiBzbG90cy9kaW1tcyBwZXIgY2hhbm5lbCwgd2UgdGh1cyB1dGlsaXplIHRoZQogCSAqIHJlc291cmNlIGFzIHNwZWNpZmllZCBieSB0aGUgY2hpcHNldC4gVGh1cywgd2UgbWlnaHQgaGF2ZQogCSAqIGhhdmUgbW9yZSBESU1NcyBwZXIgY2hhbm5lbCB0aGFuIGFjdHVhbGx5IG9uIHRoZSBtb2JvLCBidXQgdGhpcwogCSAqIGFsbG93cyB0aGUgZHJpdmVyIHRvIHN1cHBvcnQgdXB0byB0aGUgY2hpcHNldCBtYXgsIHdpdGhvdXQKIAkgKiBzb21lIGZhbmN5IG1vYm8gZGV0ZXJtaW5hdGlvbi4KIAkgKi8KLQlpNTQwMF9nZXRfZGltbV9hbmRfY2hhbm5lbF9jb3VudHMocGRldiwgJm51bV9kaW1tc19wZXJfY2hhbm5lbCwKLQkJCQkJJm51bV9jaGFubmVscyk7Ci0JbnVtX2Nzcm93cyA9IG51bV9kaW1tc19wZXJfY2hhbm5lbCAqIDI7CisJbnVtX2RpbW1zX3Blcl9jaGFubmVsID0gTUFYX0RJTU1TX1BFUl9DSEFOTkVMOworCW51bV9jaGFubmVscyA9IE1BWF9DSEFOTkVMUzsKKwludW1fY3Nyb3dzID0gbnVtX2RpbW1zX3Blcl9jaGFubmVsOwogCiAJZGVidWdmMCgiTUM6ICVzKCk6IE51bWJlciBvZiAtIENoYW5uZWxzPSAlZCAgRElNTVM9ICVkICBDU1JPV1M9ICVkXG4iLAogCQlfX2Z1bmNfXywgbnVtX2NoYW5uZWxzLCBudW1fZGltbXNfcGVyX2NoYW5uZWwsIG51bV9jc3Jvd3MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9lZGFjL21wYzg1eHhfZWRhYy5jIGIvZHJpdmVycy9lZGFjL21wYzg1eHhfZWRhYy5jCmluZGV4IDE1N2Y2NTAuLmNmMjc0MDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZWRhYy9tcGM4NXh4X2VkYWMuYworKysgYi9kcml2ZXJzL2VkYWMvbXBjODV4eF9lZGFjLmMKQEAgLTI2LDcgKzI2LDkgQEAKICNpbmNsdWRlICJtcGM4NXh4X2VkYWMuaCIKIAogc3RhdGljIGludCBlZGFjX2Rldl9pZHg7CisjaWZkZWYgQ09ORklHX1BDSQogc3RhdGljIGludCBlZGFjX3BjaV9pZHg7CisjZW5kaWYKIHN0YXRpYyBpbnQgZWRhY19tY19pZHg7CiAKIHN0YXRpYyB1MzIgb3JpZ19kZHJfZXJyX2Rpc2FibGU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2ZpcmV3aXJlL2NvcmUtY2Rldi5jIGIvZHJpdmVycy9maXJld2lyZS9jb3JlLWNkZXYuYwppbmRleCBjZWQxODZkLi41MDg5MzMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2ZpcmV3aXJlL2NvcmUtY2Rldi5jCisrKyBiL2RyaXZlcnMvZmlyZXdpcmUvY29yZS1jZGV2LmMKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KICNpbmNsdWRlIDxsaW51eC9wcmVlbXB0Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KICNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2ZpcmV3aXJlL3NicDIuYyBiL2RyaXZlcnMvZmlyZXdpcmUvc2JwMi5jCmluZGV4IDUwZjAxNzYuLjk4ZGJiZGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlyZXdpcmUvc2JwMi5jCisrKyBiL2RyaXZlcnMvZmlyZXdpcmUvc2JwMi5jCkBAIC0xODgsMTQgKzE4OCw3IEBACiAvKiBJbXBvc3NpYmxlIGxvZ2luX2lkLCB0byBkZXRlY3QgbG9nb3V0IGF0dGVtcHQgYmVmb3JlIHN1Y2Nlc3NmdWwgbG9naW4gKi8KICNkZWZpbmUgSU5WQUxJRF9MT0dJTl9JRCAweDEwMDAwCiAKLS8qCi0gKiBQZXIgc2VjdGlvbiA3LjQuOCBvZiB0aGUgU0JQLTIgc3BlYywgYSBtZ3RfT1JCX3RpbWVvdXQgdmFsdWUgY2FuIGJlCi0gKiBwcm92aWRlZCBpbiB0aGUgY29uZmlnIHJvbS4gTW9zdCBkZXZpY2VzIGRvIHByb3ZpZGUgYSB2YWx1ZSwgd2hpY2gKLSAqIHdlJ2xsIHVzZSBmb3IgbG9naW4gbWFuYWdlbWVudCBvcmJzLCBidXQgd2l0aCBzb21lIHNhbmUgbGltaXRzLgotICovCi0jZGVmaW5lIFNCUDJfTUlOX0xPR0lOX09SQl9USU1FT1VUCTUwMDBVCS8qIFRpbWVvdXQgaW4gbXMgKi8KLSNkZWZpbmUgU0JQMl9NQVhfTE9HSU5fT1JCX1RJTUVPVVQJNDAwMDBVCS8qIFRpbWVvdXQgaW4gbXMgKi8KLSNkZWZpbmUgU0JQMl9PUkJfVElNRU9VVAkJMjAwMFUJLyogVGltZW91dCBpbiBtcyAqLworI2RlZmluZSBTQlAyX09SQl9USU1FT1VUCQkyMDAwVQkJLyogVGltZW91dCBpbiBtcyAqLwogI2RlZmluZSBTQlAyX09SQl9OVUxMCQkJMHg4MDAwMDAwMAogI2RlZmluZSBTQlAyX1JFVFJZX0xJTUlUCQkweGYJCS8qIDE1IHJldHJpZXMgKi8KICNkZWZpbmUgU0JQMl9DWUNMRV9MSU1JVAkJKDB4YzggPDwgMTIpCS8qIDIwMCAxMjV1cyBjeWNsZXMgKi8KQEAgLTEwMzQsNyArMTAyNyw2IEBACiB7CiAJc3RydWN0IGZ3X2Nzcl9pdGVyYXRvciBjaTsKIAlpbnQga2V5LCB2YWx1ZTsKLQl1bnNpZ25lZCBpbnQgdGltZW91dDsKIAogCWZ3X2Nzcl9pdGVyYXRvcl9pbml0KCZjaSwgZGlyZWN0b3J5KTsKIAl3aGlsZSAoZndfY3NyX2l0ZXJhdG9yX25leHQoJmNpLCAma2V5LCAmdmFsdWUpKSB7CkBAIC0xMDU5LDE3ICsxMDUxLDcgQEAKIAogCQljYXNlIFNCUDJfQ1NSX1VOSVRfQ0hBUkFDVEVSSVNUSUNTOgogCQkJLyogdGhlIHRpbWVvdXQgdmFsdWUgaXMgc3RvcmVkIGluIDUwMG1zIHVuaXRzICovCi0JCQl0aW1lb3V0ID0gKCh1bnNpZ25lZCBpbnQpIHZhbHVlID4+IDggJiAweGZmKSAqIDUwMDsKLQkJCXRpbWVvdXQgPSBtYXgodGltZW91dCwgU0JQMl9NSU5fTE9HSU5fT1JCX1RJTUVPVVQpOwotCQkJdGd0LT5tZ3Rfb3JiX3RpbWVvdXQgPQotCQkJCSAgbWluKHRpbWVvdXQsIFNCUDJfTUFYX0xPR0lOX09SQl9USU1FT1VUKTsKLQotCQkJaWYgKHRpbWVvdXQgPiB0Z3QtPm1ndF9vcmJfdGltZW91dCkKLQkJCQlmd19ub3RpZnkoIiVzOiBjb25maWcgcm9tIGNvbnRhaW5zICVkcyAiCi0JCQkJCSAgIm1hbmFnZW1lbnQgT1JCIHRpbWVvdXQsIGxpbWl0aW5nICIKLQkJCQkJICAidG8gJWRzXG4iLCB0Z3QtPmJ1c19pZCwKLQkJCQkJICB0aW1lb3V0IC8gMTAwMCwKLQkJCQkJICB0Z3QtPm1ndF9vcmJfdGltZW91dCAvIDEwMDApOworCQkJdGd0LT5tZ3Rfb3JiX3RpbWVvdXQgPSAodmFsdWUgPj4gOCAmIDB4ZmYpICogNTAwOwogCQkJYnJlYWs7CiAKIAkJY2FzZSBTQlAyX0NTUl9MT0dJQ0FMX1VOSVRfTlVNQkVSOgpAQCAtMTA4Nyw2ICsxMDY5LDIyIEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qCisgKiBQZXIgc2VjdGlvbiA3LjQuOCBvZiB0aGUgU0JQLTIgc3BlYywgYSBtZ3RfT1JCX3RpbWVvdXQgdmFsdWUgY2FuIGJlCisgKiBwcm92aWRlZCBpbiB0aGUgY29uZmlnIHJvbS4gTW9zdCBkZXZpY2VzIGRvIHByb3ZpZGUgYSB2YWx1ZSwgd2hpY2gKKyAqIHdlJ2xsIHVzZSBmb3IgbG9naW4gbWFuYWdlbWVudCBvcmJzLCBidXQgd2l0aCBzb21lIHNhbmUgbGltaXRzLgorICovCitzdGF0aWMgdm9pZCBzYnAyX2NsYW1wX21hbmFnZW1lbnRfb3JiX3RpbWVvdXQoc3RydWN0IHNicDJfdGFyZ2V0ICp0Z3QpCit7CisJdW5zaWduZWQgaW50IHRpbWVvdXQgPSB0Z3QtPm1ndF9vcmJfdGltZW91dDsKKworCWlmICh0aW1lb3V0ID4gNDAwMDApCisJCWZ3X25vdGlmeSgiJXM6ICVkcyBtZ3RfT1JCX3RpbWVvdXQgbGltaXRlZCB0byA0MHNcbiIsCisJCQkgIHRndC0+YnVzX2lkLCB0aW1lb3V0IC8gMTAwMCk7CisKKwl0Z3QtPm1ndF9vcmJfdGltZW91dCA9IGNsYW1wX3ZhbCh0aW1lb3V0LCA1MDAwLCA0MDAwMCk7Cit9CisKIHN0YXRpYyB2b2lkIHNicDJfaW5pdF93b3JrYXJvdW5kcyhzdHJ1Y3Qgc2JwMl90YXJnZXQgKnRndCwgdTMyIG1vZGVsLAogCQkJCSAgdTMyIGZpcm13YXJlX3JldmlzaW9uKQogewpAQCAtMTE3MSw2ICsxMTY5LDcgQEAKIAkJCSAgICAgICAmZmlybXdhcmVfcmV2aXNpb24pIDwgMCkKIAkJZ290byBmYWlsX3RndF9wdXQ7CiAKKwlzYnAyX2NsYW1wX21hbmFnZW1lbnRfb3JiX3RpbWVvdXQodGd0KTsKIAlzYnAyX2luaXRfd29ya2Fyb3VuZHModGd0LCBtb2RlbCwgZmlybXdhcmVfcmV2aXNpb24pOwogCiAJLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvaXNjc2lfaWJmdC5jIGIvZHJpdmVycy9maXJtd2FyZS9pc2NzaV9pYmZ0LmMKaW5kZXggNDIwYTk2ZS4uMDUxZDFlYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9maXJtd2FyZS9pc2NzaV9pYmZ0LmMKKysrIGIvZHJpdmVycy9maXJtd2FyZS9pc2NzaV9pYmZ0LmMKQEAgLTkzOSw3ICs5MzksNyBAQAogCiAJaWYgKGliZnRfYWRkcikgewogCQlwcmludGsoS0VSTl9JTkZPICJpQkZUIGRldGVjdGVkIGF0IDB4JWxseC5cbiIsCi0JCSAgICAgICAodTY0KXZpcnRfdG9fcGh5cygodm9pZCAqKWliZnRfYWRkcikpOworCQkgICAgICAgKHU2NClpc2FfdmlydF90b19idXMoaWJmdF9hZGRyKSk7CiAKIAkJcmMgPSBpYmZ0X2NoZWNrX2RldmljZSgpOwogCQlpZiAocmMpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2lzY3NpX2liZnRfZmluZC5jIGIvZHJpdmVycy9maXJtd2FyZS9pc2NzaV9pYmZ0X2ZpbmQuYwppbmRleCBkNTNmYmJmLi5kZmIxNWMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Zpcm13YXJlL2lzY3NpX2liZnRfZmluZC5jCisrKyBiL2RyaXZlcnMvZmlybXdhcmUvaXNjc2lfaWJmdF9maW5kLmMKQEAgLTY1LDEwICs2NSwxMCBAQAogCQkgKiBzbyBza2lwIHRoYXQgYXJlYSAqLwogCQlpZiAocG9zID09IFZHQV9NRU0pCiAJCQlwb3MgKz0gVkdBX1NJWkU7Ci0JCXZpcnQgPSBwaHlzX3RvX3ZpcnQocG9zKTsKKwkJdmlydCA9IGlzYV9idXNfdG9fdmlydChwb3MpOwogCQlpZiAobWVtY21wKHZpcnQsIElCRlRfU0lHTiwgSUJGVF9TSUdOX0xFTikgPT0gMCkgewogCQkJdW5zaWduZWQgbG9uZyAqYWRkciA9Ci0JCQkgICAgKHVuc2lnbmVkIGxvbmcgKilwaHlzX3RvX3ZpcnQocG9zICsgNCk7CisJCQkgICAgKHVuc2lnbmVkIGxvbmcgKilpc2FfYnVzX3RvX3ZpcnQocG9zICsgNCk7CiAJCQlsZW4gPSAqYWRkcjsKIAkJCS8qIGlmIHRoZSBsZW5ndGggb2YgdGhlIHRhYmxlIGV4dGVuZHMgcGFzdCAxTSwKIAkJCSAqIHRoZSB0YWJsZSBjYW5ub3QgYmUgdmFsaWQuICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwaW8vZ3Bpb2xpYi5jIGIvZHJpdmVycy9ncGlvL2dwaW9saWIuYwppbmRleCBiYjExYTQyLi42NjJlZDkyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwaW8vZ3Bpb2xpYi5jCisrKyBiL2RyaXZlcnMvZ3Bpby9ncGlvbGliLmMKQEAgLTE0ODcsNyArMTQ4Nyw3IEBACiAJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIGdwaW9saWJfc2hvdywgTlVMTCk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGdwaW9saWJfb3BlcmF0aW9ucyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGdwaW9saWJfb3BlcmF0aW9ucyA9IHsKIAkub3BlbgkJPSBncGlvbGliX29wZW4sCiAJLnJlYWQJCT0gc2VxX3JlYWQsCiAJLmxsc2VlawkJPSBzZXFfbHNlZWssCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwaW8vdHdsNDAzMC1ncGlvLmMgYi9kcml2ZXJzL2dwaW8vdHdsNDAzMC1ncGlvLmMKaW5kZXggYWZhZDE0Ny4uNDkzODRhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncGlvL3R3bDQwMzAtZ3Bpby5jCisrKyBiL2RyaXZlcnMvZ3Bpby90d2w0MDMwLWdwaW8uYwpAQCAtNDYwLDcgKzQ2MCw4IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBfX2RldmV4aXQgZ3Bpb190d2w0MDMwX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorLyogQ2Fubm90IHVzZSBfX2RldmV4aXQgYXMgZ3Bpb190d2w0MDMwX3Byb2JlKCkgY2FsbHMgdXMgKi8KK3N0YXRpYyBpbnQgZ3Bpb190d2w0MDMwX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCB0d2w0MDMwX2dwaW9fcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAlpbnQgc3RhdHVzOwpAQCAtNDkzLDcgKzQ5NCw3IEBACiAJLmRyaXZlci5uYW1lCT0gInR3bDQwMzBfZ3BpbyIsCiAJLmRyaXZlci5vd25lcgk9IFRISVNfTU9EVUxFLAogCS5wcm9iZQkJPSBncGlvX3R3bDQwMzBfcHJvYmUsCi0JLnJlbW92ZQkJPSBfX2RldmV4aXRfcChncGlvX3R3bDQwMzBfcmVtb3ZlKSwKKwkucmVtb3ZlCQk9IGdwaW9fdHdsNDAzMF9yZW1vdmUsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBncGlvX3R3bDQwMzBfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9jcnRjLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2NydGMuYwppbmRleCBiYTcyOGFkLi41Y2FlMGIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2NydGMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2NydGMuYwpAQCAtNDgyLDYgKzQ4Miw3IEBACiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG1vZGUsIHQsICZjb25uZWN0b3ItPnVzZXJfbW9kZXMsIGhlYWQpCiAJCWRybV9tb2RlX3JlbW92ZShjb25uZWN0b3IsIG1vZGUpOwogCisJa2ZyZWUoY29ubmVjdG9yLT5mYl9oZWxwZXJfcHJpdmF0ZSk7CiAJbXV0ZXhfbG9jaygmZGV2LT5tb2RlX2NvbmZpZy5tdXRleCk7CiAJZHJtX21vZGVfb2JqZWN0X3B1dChkZXYsICZjb25uZWN0b3ItPmJhc2UpOwogCWxpc3RfZGVsKCZjb25uZWN0b3ItPmhlYWQpOwpAQCAtMTU1NSw4ICsxNTU2LDYgQEAKIAlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7CiAJaW50IHJldCA9IDA7CiAKLQlEUk1fREVCVUdfS01TKCJcbiIpOwotCiAJaWYgKCFyZXEtPmZsYWdzKSB7CiAJCURSTV9FUlJPUigibm8gb3BlcmF0aW9uIHNldFxuIik7CiAJCXJldHVybiAtRUlOVkFMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9jcnRjX2hlbHBlci5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9jcnRjX2hlbHBlci5jCmluZGV4IGZlODY5NzQuLjFmZTRlMWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fY3J0Y19oZWxwZXIuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2NydGNfaGVscGVyLmMKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJkcm1QLmgiCiAjaW5jbHVkZSAiZHJtX2NydGMuaCIKICNpbmNsdWRlICJkcm1fY3J0Y19oZWxwZXIuaCIKKyNpbmNsdWRlICJkcm1fZmJfaGVscGVyLmgiCiAKIHN0YXRpYyB2b2lkIGRybV9tb2RlX3ZhbGlkYXRlX2ZsYWcoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKIAkJCQkgICBpbnQgZmxhZ3MpCkBAIC05MCw3ICs5MSwxNSBAQAogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShtb2RlLCB0LCAmY29ubmVjdG9yLT5tb2RlcywgaGVhZCkKIAkJbW9kZS0+c3RhdHVzID0gTU9ERV9VTlZFUklGSUVEOwogCi0JY29ubmVjdG9yLT5zdGF0dXMgPSBjb25uZWN0b3ItPmZ1bmNzLT5kZXRlY3QoY29ubmVjdG9yKTsKKwlpZiAoY29ubmVjdG9yLT5mb3JjZSkgeworCQlpZiAoY29ubmVjdG9yLT5mb3JjZSA9PSBEUk1fRk9SQ0VfT04pCisJCQljb25uZWN0b3ItPnN0YXR1cyA9IGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkOworCQllbHNlCisJCQljb25uZWN0b3ItPnN0YXR1cyA9IGNvbm5lY3Rvcl9zdGF0dXNfZGlzY29ubmVjdGVkOworCQlpZiAoY29ubmVjdG9yLT5mdW5jcy0+Zm9yY2UpCisJCQljb25uZWN0b3ItPmZ1bmNzLT5mb3JjZShjb25uZWN0b3IpOworCX0gZWxzZQorCQljb25uZWN0b3ItPnN0YXR1cyA9IGNvbm5lY3Rvci0+ZnVuY3MtPmRldGVjdChjb25uZWN0b3IpOwogCiAJaWYgKGNvbm5lY3Rvci0+c3RhdHVzID09IGNvbm5lY3Rvcl9zdGF0dXNfZGlzY29ubmVjdGVkKSB7CiAJCURSTV9ERUJVR19LTVMoIiVzIGlzIGRpc2Nvbm5lY3RlZFxuIiwKQEAgLTI2Nyw2ICsyNzYsNjUgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAorc3RhdGljIGJvb2wgZHJtX2hhc19jbWRsaW5lX21vZGUoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKK3sKKwlzdHJ1Y3QgZHJtX2ZiX2hlbHBlcl9jb25uZWN0b3IgKmZiX2hlbHBfY29ubiA9IGNvbm5lY3Rvci0+ZmJfaGVscGVyX3ByaXZhdGU7CisJc3RydWN0IGRybV9mYl9oZWxwZXJfY21kbGluZV9tb2RlICpjbWRsaW5lX21vZGU7CisKKwlpZiAoIWZiX2hlbHBfY29ubikKKwkJcmV0dXJuIGZhbHNlOworCisJY21kbGluZV9tb2RlID0gJmZiX2hlbHBfY29ubi0+Y21kbGluZV9tb2RlOworCXJldHVybiBjbWRsaW5lX21vZGUtPnNwZWNpZmllZDsKK30KKworc3RhdGljIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpkcm1fcGlja19jbWRsaW5lX21vZGUoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQoreworCXN0cnVjdCBkcm1fZmJfaGVscGVyX2Nvbm5lY3RvciAqZmJfaGVscF9jb25uID0gY29ubmVjdG9yLT5mYl9oZWxwZXJfcHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX2ZiX2hlbHBlcl9jbWRsaW5lX21vZGUgKmNtZGxpbmVfbW9kZTsKKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSA9IE5VTEw7CisKKwlpZiAoIWZiX2hlbHBfY29ubikKKwkJcmV0dXJuIG1vZGU7CisKKwljbWRsaW5lX21vZGUgPSAmZmJfaGVscF9jb25uLT5jbWRsaW5lX21vZGU7CisJaWYgKGNtZGxpbmVfbW9kZS0+c3BlY2lmaWVkID09IGZhbHNlKQorCQlyZXR1cm4gbW9kZTsKKworCS8qIGF0dGVtcHQgdG8gZmluZCBhIG1hdGNoaW5nIG1vZGUgaW4gdGhlIGxpc3Qgb2YgbW9kZXMKKwkgKiAgd2UgaGF2ZSBnb3R0ZW4gc28gZmFyLCBpZiBub3QgYWRkIGEgQ1ZUIG1vZGUgdGhhdCBjb25mb3JtcworCSAqLworCWlmIChjbWRsaW5lX21vZGUtPnJiIHx8IGNtZGxpbmVfbW9kZS0+bWFyZ2lucykKKwkJZ290byBjcmVhdGVfbW9kZTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkobW9kZSwgJmNvbm5lY3Rvci0+bW9kZXMsIGhlYWQpIHsKKwkJLyogY2hlY2sgd2lkdGgvaGVpZ2h0ICovCisJCWlmIChtb2RlLT5oZGlzcGxheSAhPSBjbWRsaW5lX21vZGUtPnhyZXMgfHwKKwkJICAgIG1vZGUtPnZkaXNwbGF5ICE9IGNtZGxpbmVfbW9kZS0+eXJlcykKKwkJCWNvbnRpbnVlOworCisJCWlmIChjbWRsaW5lX21vZGUtPnJlZnJlc2hfc3BlY2lmaWVkKSB7CisJCQlpZiAobW9kZS0+dnJlZnJlc2ggIT0gY21kbGluZV9tb2RlLT5yZWZyZXNoKQorCQkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKGNtZGxpbmVfbW9kZS0+aW50ZXJsYWNlKSB7CisJCQlpZiAoIShtb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfSU5URVJMQUNFKSkKKwkJCQljb250aW51ZTsKKwkJfQorCQlyZXR1cm4gbW9kZTsKKwl9CisKK2NyZWF0ZV9tb2RlOgorCW1vZGUgPSBkcm1fY3Z0X21vZGUoY29ubmVjdG9yLT5kZXYsIGNtZGxpbmVfbW9kZS0+eHJlcywKKwkJCSAgICBjbWRsaW5lX21vZGUtPnlyZXMsCisJCQkgICAgY21kbGluZV9tb2RlLT5yZWZyZXNoX3NwZWNpZmllZCA/IGNtZGxpbmVfbW9kZS0+cmVmcmVzaCA6IDYwLAorCQkJICAgIGNtZGxpbmVfbW9kZS0+cmIsIGNtZGxpbmVfbW9kZS0+aW50ZXJsYWNlLAorCQkJICAgIGNtZGxpbmVfbW9kZS0+bWFyZ2lucyk7CisJbGlzdF9hZGQoJm1vZGUtPmhlYWQsICZjb25uZWN0b3ItPm1vZGVzKTsKKwlyZXR1cm4gbW9kZTsKK30KKwogc3RhdGljIGJvb2wgZHJtX2Nvbm5lY3Rvcl9lbmFibGVkKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsIGJvb2wgc3RyaWN0KQogewogCWJvb2wgZW5hYmxlOwpAQCAtMzE3LDEwICszODUsMTYgQEAKIAkJCWNvbnRpbnVlOwogCQl9CiAKLQkJRFJNX0RFQlVHX0tNUygibG9va2luZyBmb3IgcHJlZmVycmVkIG1vZGUgb24gY29ubmVjdG9yICVkXG4iLAotCQkJICBjb25uZWN0b3ItPmJhc2UuaWQpOworCQlEUk1fREVCVUdfS01TKCJsb29raW5nIGZvciBjbWRsaW5lIG1vZGUgb24gY29ubmVjdG9yICVkXG4iLAorCQkJICAgICAgY29ubmVjdG9yLT5iYXNlLmlkKTsKIAotCQltb2Rlc1tpXSA9IGRybV9oYXNfcHJlZmVycmVkX21vZGUoY29ubmVjdG9yLCB3aWR0aCwgaGVpZ2h0KTsKKwkJLyogZ290IGZvciBjb21tYW5kIGxpbmUgbW9kZSBmaXJzdCAqLworCQltb2Rlc1tpXSA9IGRybV9waWNrX2NtZGxpbmVfbW9kZShjb25uZWN0b3IsIHdpZHRoLCBoZWlnaHQpOworCQlpZiAoIW1vZGVzW2ldKSB7CisJCQlEUk1fREVCVUdfS01TKCJsb29raW5nIGZvciBwcmVmZXJyZWQgbW9kZSBvbiBjb25uZWN0b3IgJWRcbiIsCisJCQkJICAgICAgY29ubmVjdG9yLT5iYXNlLmlkKTsKKwkJCW1vZGVzW2ldID0gZHJtX2hhc19wcmVmZXJyZWRfbW9kZShjb25uZWN0b3IsIHdpZHRoLCBoZWlnaHQpOworCQl9CiAJCS8qIE5vIHByZWZlcnJlZCBtb2RlcywgcGljayBvbmUgb2ZmIHRoZSBsaXN0ICovCiAJCWlmICghbW9kZXNbaV0gJiYgIWxpc3RfZW1wdHkoJmNvbm5lY3Rvci0+bW9kZXMpKSB7CiAJCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KG1vZGVzW2ldLCAmY29ubmVjdG9yLT5tb2RlcywgaGVhZCkKQEAgLTM2OSw2ICs0NDMsOCBAQAogCW15X3Njb3JlID0gMTsKIAlpZiAoY29ubmVjdG9yLT5zdGF0dXMgPT0gY29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQpCiAJCW15X3Njb3JlKys7CisJaWYgKGRybV9oYXNfY21kbGluZV9tb2RlKGNvbm5lY3RvcikpCisJCW15X3Njb3JlKys7CiAJaWYgKGRybV9oYXNfcHJlZmVycmVkX21vZGUoY29ubmVjdG9yLCB3aWR0aCwgaGVpZ2h0KSkKIAkJbXlfc2NvcmUrKzsKIApAQCAtOTQzLDYgKzEwMTksOCBAQAogewogCWludCBjb3VudCA9IDA7CiAKKwlkcm1fZmJfaGVscGVyX3BhcnNlX2NvbW1hbmRfbGluZShkZXYpOworCiAJY291bnQgPSBkcm1faGVscGVyX3Byb2JlX2Nvbm5lY3Rvcl9tb2RlcyhkZXYsCiAJCQkJCQkgZGV2LT5tb2RlX2NvbmZpZy5tYXhfd2lkdGgsCiAJCQkJCQkgZGV2LT5tb2RlX2NvbmZpZy5tYXhfaGVpZ2h0KTsKQEAgLTk1MCw3ICsxMDI4LDcgQEAKIAkvKgogCSAqIHdlIHNob3VsZG4ndCBlbmQgdXAgd2l0aCBubyBtb2RlcyBoZXJlLgogCSAqLwotCVdBUk4oIWNvdW50LCAiQ29ubmVjdGVkIGNvbm5lY3RvciB3aXRoIDAgbW9kZXNcbiIpOworCVdBUk4oIWNvdW50LCAiTm8gY29ubmVjdG9ycyByZXBvcnRlZCBjb25uZWN0ZWQgd2l0aCBtb2Rlc1xuIik7CiAKIAlkcm1fc2V0dXBfY3J0Y3MoZGV2KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9lZGlkLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2VkaWQuYwppbmRleCA5MGQ3NmJhLi5jZWE2NjVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2VkaWQuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2VkaWQuYwpAQCAtMTA5LDcgKzEwOSw5IEBACiAKIAogLyogVmFsaWQgRURJRCBoZWFkZXIgaGFzIHRoZXNlIGJ5dGVzICovCi1zdGF0aWMgdTggZWRpZF9oZWFkZXJbXSA9IHsgMHgwMCwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHgwMCB9Oworc3RhdGljIGNvbnN0IHU4IGVkaWRfaGVhZGVyW10gPSB7CisJMHgwMCwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHgwMAorfTsKIAogLyoqCiAgKiBlZGlkX2lzX3ZhbGlkIC0gc2FuaXR5IGNoZWNrIEVESUQgZGF0YQpAQCAtNTAwLDYgKzUwMiwxOSBAQAogCX0KIAlyZXR1cm4gbW9kZTsKIH0KKworLyoKKyAqIDAgaXMgcmVzZXJ2ZWQuICBUaGUgc3BlYyBzYXlzIDB4MDEgZmlsbCBmb3IgdW51c2VkIHRpbWluZ3MuICBTb21lIG9sZAorICogbW9uaXRvcnMgZmlsbCB3aXRoIGFzY2lpIHNwYWNlICgweDIwKSBpbnN0ZWFkLgorICovCitzdGF0aWMgaW50CitiYWRfc3RkX3RpbWluZyh1OCBhLCB1OCBiKQoreworCXJldHVybiAoYSA9PSAweDAwICYmIGIgPT0gMHgwMCkgfHwKKwkgICAgICAgKGEgPT0gMHgwMSAmJiBiID09IDB4MDEpIHx8CisJICAgICAgIChhID09IDB4MjAgJiYgYiA9PSAweDIwKTsKK30KKwogLyoqCiAgKiBkcm1fbW9kZV9zdGQgLSBjb252ZXJ0IHN0YW5kYXJkIG1vZGUgaW5mbyAod2lkdGgsIGhlaWdodCwgcmVmcmVzaCkgaW50byBtb2RlCiAgKiBAdDogc3RhbmRhcmQgdGltaW5nIHBhcmFtcwpAQCAtNTEzLDYgKzUyOCw3IEBACiAgKi8KIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpkcm1fbW9kZV9zdGQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIAkJCQkgICAgICBzdHJ1Y3Qgc3RkX3RpbWluZyAqdCwKKwkJCQkgICAgICBpbnQgcmV2aXNpb24sCiAJCQkJICAgICAgaW50IHRpbWluZ19sZXZlbCkKIHsKIAlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZTsKQEAgLTUyMywxNCArNTM5LDIwIEBACiAJdW5zaWduZWQgdmZyZXEgPSAodC0+dmZyZXFfYXNwZWN0ICYgRURJRF9USU1JTkdfVkZSRVFfTUFTSykKIAkJPj4gRURJRF9USU1JTkdfVkZSRVFfU0hJRlQ7CiAKKwlpZiAoYmFkX3N0ZF90aW1pbmcodC0+aHNpemUsIHQtPnZmcmVxX2FzcGVjdCkpCisJCXJldHVybiBOVUxMOworCiAJLyogQWNjb3JkaW5nIHRvIHRoZSBFRElEIHNwZWMsIHRoZSBoZGlzcGxheSA9IGhzaXplICogOCArIDI0OCAqLwogCWhzaXplID0gdC0+aHNpemUgKiA4ICsgMjQ4OwogCS8qIHZyZWZyZXNoX3JhdGUgPSB2ZnJlcSArIDYwICovCiAJdnJlZnJlc2hfcmF0ZSA9IHZmcmVxICsgNjA7CiAJLyogdGhlIHZkaXNwbGF5IGlzIGNhbGN1bGF0ZWQgYmFzZWQgb24gdGhlIGFzcGVjdCByYXRpbyAqLwotCWlmIChhc3BlY3RfcmF0aW8gPT0gMCkKLQkJdnNpemUgPSAoaHNpemUgKiAxMCkgLyAxNjsKLQllbHNlIGlmIChhc3BlY3RfcmF0aW8gPT0gMSkKKwlpZiAoYXNwZWN0X3JhdGlvID09IDApIHsKKwkJaWYgKHJldmlzaW9uIDwgMykKKwkJCXZzaXplID0gaHNpemU7CisJCWVsc2UKKwkJCXZzaXplID0gKGhzaXplICogMTApIC8gMTY7CisJfSBlbHNlIGlmIChhc3BlY3RfcmF0aW8gPT0gMSkKIAkJdnNpemUgPSAoaHNpemUgKiAzKSAvIDQ7CiAJZWxzZSBpZiAoYXNwZWN0X3JhdGlvID09IDIpCiAJCXZzaXplID0gKGhzaXplICogNCkgLyA1OwpAQCAtNTM4LDcgKzU2MCw4IEBACiAJCXZzaXplID0gKGhzaXplICogOSkgLyAxNjsKIAkvKiBIRFRWIGhhY2sgKi8KIAlpZiAoaHNpemUgPT0gMTM2MCAmJiB2c2l6ZSA9PSA3NjUgJiYgdnJlZnJlc2hfcmF0ZSA9PSA2MCkgewotCQltb2RlID0gZHJtX2N2dF9tb2RlKGRldiwgaHNpemUsIHZzaXplLCB2cmVmcmVzaF9yYXRlLCAwLCAwKTsKKwkJbW9kZSA9IGRybV9jdnRfbW9kZShkZXYsIGhzaXplLCB2c2l6ZSwgdnJlZnJlc2hfcmF0ZSwgMCwgMCwKKwkJCQkgICAgZmFsc2UpOwogCQltb2RlLT5oZGlzcGxheSA9IDEzNjY7CiAJCW1vZGUtPnZzeW5jX3N0YXJ0ID0gbW9kZS0+dnN5bmNfc3RhcnQgLSAxOwogCQltb2RlLT52c3luY19lbmQgPSBtb2RlLT52c3luY19lbmQgLSAxOwpAQCAtNTU3LDcgKzU4MCw4IEBACiAJCW1vZGUgPSBkcm1fZ3RmX21vZGUoZGV2LCBoc2l6ZSwgdnNpemUsIHZyZWZyZXNoX3JhdGUsIDAsIDApOwogCQlicmVhazsKIAljYXNlIExFVkVMX0NWVDoKLQkJbW9kZSA9IGRybV9jdnRfbW9kZShkZXYsIGhzaXplLCB2c2l6ZSwgdnJlZnJlc2hfcmF0ZSwgMCwgMCk7CisJCW1vZGUgPSBkcm1fY3Z0X21vZGUoZGV2LCBoc2l6ZSwgdnNpemUsIHZyZWZyZXNoX3JhdGUsIDAsIDAsCisJCQkJICAgIGZhbHNlKTsKIAkJYnJlYWs7CiAJfQogCXJldHVybiBtb2RlOwpAQCAtNjAyLDYgKzYyNiwxMiBAQAogCQlyZXR1cm4gTlVMTDsKIAl9CiAKKwkvKiBpdCBpcyBpbmNvcnJlY3QgaWYgaHN5bmMvdnN5bmMgd2lkdGggaXMgemVybyAqLworCWlmICghaHN5bmNfcHVsc2Vfd2lkdGggfHwgIXZzeW5jX3B1bHNlX3dpZHRoKSB7CisJCURSTV9ERUJVR19LTVMoIkluY29ycmVjdCBEZXRhaWxlZCB0aW1pbmcuICIKKwkJCQkiV3JvbmcgSHN5bmMvVnN5bmMgcHVsc2Ugd2lkdGhcbiIpOworCQlyZXR1cm4gTlVMTDsKKwl9CiAJbW9kZSA9IGRybV9tb2RlX2NyZWF0ZShkZXYpOwogCWlmICghbW9kZSkKIAkJcmV0dXJuIE5VTEw7CkBAIC02MjMsNiArNjUzLDE1IEBACiAJbW9kZS0+dnN5bmNfZW5kID0gbW9kZS0+dnN5bmNfc3RhcnQgKyB2c3luY19wdWxzZV93aWR0aDsKIAltb2RlLT52dG90YWwgPSBtb2RlLT52ZGlzcGxheSArIHZibGFuazsKIAorCS8qIHBlcmZvcm0gdGhlIGJhc2ljIGNoZWNrIGZvciB0aGUgZGV0YWlsZWQgdGltaW5nICovCisJaWYgKG1vZGUtPmhzeW5jX2VuZCA+IG1vZGUtPmh0b3RhbCB8fAorCQltb2RlLT52c3luY19lbmQgPiBtb2RlLT52dG90YWwpIHsKKwkJZHJtX21vZGVfZGVzdHJveShkZXYsIG1vZGUpOworCQlEUk1fREVCVUdfS01TKCJJbmNvcnJlY3QgZGV0YWlsZWQgdGltaW5nLiAiCisJCQkJIlN5bmMgaXMgYmV5b25kIHRoZSBibGFuay5cbiIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKIAlkcm1fbW9kZV9zZXRfbmFtZShtb2RlKTsKIAogCWlmIChwdC0+bWlzYyAmIERSTV9FRElEX1BUX0lOVEVSTEFDRUQpCkBAIC03NzksNyArODE4LDcgQEAKIAkJCWNvbnRpbnVlOwogCiAJCW5ld21vZGUgPSBkcm1fbW9kZV9zdGQoZGV2LCAmZWRpZC0+c3RhbmRhcmRfdGltaW5nc1tpXSwKLQkJCQkJdGltaW5nX2xldmVsKTsKKwkJCQkgICAgICAgZWRpZC0+cmV2aXNpb24sIHRpbWluZ19sZXZlbCk7CiAJCWlmIChuZXdtb2RlKSB7CiAJCQlkcm1fbW9kZV9wcm9iZWRfYWRkKGNvbm5lY3RvciwgbmV3bW9kZSk7CiAJCQltb2RlcysrOwpAQCAtODI5LDEzICs4NjgsMTMgQEAKIAkJCWNhc2UgRURJRF9ERVRBSUxfTU9OSVRPUl9DUERBVEE6CiAJCQkJYnJlYWs7CiAJCQljYXNlIEVESURfREVUQUlMX1NURF9NT0RFUzoKLQkJCQkvKiBGaXZlIG1vZGVzIHBlciBkZXRhaWxlZCBzZWN0aW9uICovCi0JCQkJZm9yIChqID0gMDsgaiA8IDU7IGkrKykgeworCQkJCWZvciAoaiA9IDA7IGogPCA2OyBpKyspIHsKIAkJCQkJc3RydWN0IHN0ZF90aW1pbmcgKnN0ZDsKIAkJCQkJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm5ld21vZGU7CiAKIAkJCQkJc3RkID0gJmRhdGEtPmRhdGEudGltaW5nc1tqXTsKIAkJCQkJbmV3bW9kZSA9IGRybV9tb2RlX3N0ZChkZXYsIHN0ZCwKKwkJCQkJCQkgICAgICAgZWRpZC0+cmV2aXNpb24sCiAJCQkJCQkJICAgICAgIHRpbWluZ19sZXZlbCk7CiAJCQkJCWlmIChuZXdtb2RlKSB7CiAJCQkJCQlkcm1fbW9kZV9wcm9iZWRfYWRkKGNvbm5lY3RvciwgbmV3bW9kZSk7CkBAIC05NjQsNyArMTAwMyw5IEBACiAJCQkJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm5ld21vZGU7CiAKIAkJCQlzdGQgPSAmZGF0YS0+ZGF0YS50aW1pbmdzW2pdOwotCQkJCW5ld21vZGUgPSBkcm1fbW9kZV9zdGQoZGV2LCBzdGQsIHRpbWluZ19sZXZlbCk7CisJCQkJbmV3bW9kZSA9IGRybV9tb2RlX3N0ZChkZXYsIHN0ZCwKKwkJCQkJCSAgICAgICBlZGlkLT5yZXZpc2lvbiwKKwkJCQkJCSAgICAgICB0aW1pbmdfbGV2ZWwpOwogCQkJCWlmIChuZXdtb2RlKSB7CiAJCQkJCWRybV9tb2RlX3Byb2JlZF9hZGQoY29ubmVjdG9yLCBuZXdtb2RlKTsKIAkJCQkJbW9kZXMrKzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZmJfaGVscGVyLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2ZiX2hlbHBlci5jCmluZGV4IDJjNDY3MTMuLjljOTI0NjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZmJfaGVscGVyLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9mYl9oZWxwZXIuYwpAQCAtNDAsNiArNDAsMTk5IEBACiAKIHN0YXRpYyBMSVNUX0hFQUQoa2VybmVsX2ZiX2hlbHBlcl9saXN0KTsKIAoraW50IGRybV9mYl9oZWxwZXJfYWRkX2Nvbm5lY3RvcihzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQoreworCWNvbm5lY3Rvci0+ZmJfaGVscGVyX3ByaXZhdGUgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZHJtX2ZiX2hlbHBlcl9jb25uZWN0b3IpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNvbm5lY3Rvci0+ZmJfaGVscGVyX3ByaXZhdGUpCisJCXJldHVybiAtRU5PTUVNOworCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKGRybV9mYl9oZWxwZXJfYWRkX2Nvbm5lY3Rvcik7CisKK3N0YXRpYyBpbnQgbXlfYXRvaShjb25zdCBjaGFyICpuYW1lKQoreworCWludCB2YWwgPSAwOworCisJZm9yICg7OyBuYW1lKyspIHsKKwkJc3dpdGNoICgqbmFtZSkgeworCQljYXNlICcwJyAuLi4gJzknOgorCQkJdmFsID0gMTAqdmFsKygqbmFtZS0nMCcpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gdmFsOworCQl9CisJfQorfQorCisvKioKKyAqIGRybV9mYl9oZWxwZXJfY29ubmVjdG9yX3BhcnNlX2NvbW1hbmRfbGluZSAtIHBhcnNlIGNvbW1hbmQgbGluZSBmb3IgY29ubmVjdG9yCisgKiBAY29ubmVjdG9yIC0gY29ubmVjdG9yIHRvIHBhcnNlIGxpbmUgZm9yCisgKiBAbW9kZV9vcHRpb24gLSBwZXIgY29ubmVjdG9yIG1vZGUgb3B0aW9uCisgKgorICogVGhpcyBwYXJzZXMgdGhlIGNvbm5lY3RvciBzcGVjaWZpYyB0aGVuIGdlbmVyaWMgY29tbWFuZCBsaW5lcyBmb3IKKyAqIG1vZGVzIGFuZCBvcHRpb25zIHRvIGNvbmZpZ3VyZSB0aGUgY29ubmVjdG9yLgorICoKKyAqIFRoaXMgdXNlcyB0aGUgc2FtZSBwYXJhbWV0ZXJzIGFzIHRoZSBmYiBtb2RlZGIuYywgZXhjZXB0IGZvciBleHRyYQorICoJPHhyZXM+eDx5cmVzPltNXVtSXVstPGJwcD5dW0A8cmVmcmVzaD5dW2ldW21dW2VEZF0KKyAqCisgKiBlbmFibGUvZW5hYmxlIERpZ2l0YWwvZGlzYWJsZSBiaXQgYXQgdGhlIGVuZAorICovCitzdGF0aWMgYm9vbCBkcm1fZmJfaGVscGVyX2Nvbm5lY3Rvcl9wYXJzZV9jb21tYW5kX2xpbmUoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKKwkJCQkJCSAgICAgICBjb25zdCBjaGFyICptb2RlX29wdGlvbikKK3sKKwljb25zdCBjaGFyICpuYW1lOworCXVuc2lnbmVkIGludCBuYW1lbGVuOworCWludCByZXNfc3BlY2lmaWVkID0gMCwgYnBwX3NwZWNpZmllZCA9IDAsIHJlZnJlc2hfc3BlY2lmaWVkID0gMDsKKwl1bnNpZ25lZCBpbnQgeHJlcyA9IDAsIHlyZXMgPSAwLCBicHAgPSAzMiwgcmVmcmVzaCA9IDA7CisJaW50IHlyZXNfc3BlY2lmaWVkID0gMCwgY3Z0ID0gMCwgcmIgPSAwLCBpbnRlcmxhY2UgPSAwLCBtYXJnaW5zID0gMDsKKwlpbnQgaTsKKwllbnVtIGRybV9jb25uZWN0b3JfZm9yY2UgZm9yY2UgPSBEUk1fRk9SQ0VfVU5TUEVDSUZJRUQ7CisJc3RydWN0IGRybV9mYl9oZWxwZXJfY29ubmVjdG9yICpmYl9oZWxwX2Nvbm4gPSBjb25uZWN0b3ItPmZiX2hlbHBlcl9wcml2YXRlOworCXN0cnVjdCBkcm1fZmJfaGVscGVyX2NtZGxpbmVfbW9kZSAqY21kbGluZV9tb2RlOworCisJaWYgKCFmYl9oZWxwX2Nvbm4pCisJCXJldHVybiBmYWxzZTsKKworCWNtZGxpbmVfbW9kZSA9ICZmYl9oZWxwX2Nvbm4tPmNtZGxpbmVfbW9kZTsKKwlpZiAoIW1vZGVfb3B0aW9uKQorCQltb2RlX29wdGlvbiA9IGZiX21vZGVfb3B0aW9uOworCisJaWYgKCFtb2RlX29wdGlvbikgeworCQljbWRsaW5lX21vZGUtPnNwZWNpZmllZCA9IGZhbHNlOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJbmFtZSA9IG1vZGVfb3B0aW9uOworCW5hbWVsZW4gPSBzdHJsZW4obmFtZSk7CisJZm9yIChpID0gbmFtZWxlbi0xOyBpID49IDA7IGktLSkgeworCQlzd2l0Y2ggKG5hbWVbaV0pIHsKKwkJY2FzZSAnQCc6CisJCQluYW1lbGVuID0gaTsKKwkJCWlmICghcmVmcmVzaF9zcGVjaWZpZWQgJiYgIWJwcF9zcGVjaWZpZWQgJiYKKwkJCSAgICAheXJlc19zcGVjaWZpZWQpIHsKKwkJCQlyZWZyZXNoID0gbXlfYXRvaSgmbmFtZVtpKzFdKTsKKwkJCQlyZWZyZXNoX3NwZWNpZmllZCA9IDE7CisJCQkJaWYgKGN2dCB8fCByYikKKwkJCQkJY3Z0ID0gMDsKKwkJCX0gZWxzZQorCQkJCWdvdG8gZG9uZTsKKwkJCWJyZWFrOworCQljYXNlICctJzoKKwkJCW5hbWVsZW4gPSBpOworCQkJaWYgKCFicHBfc3BlY2lmaWVkICYmICF5cmVzX3NwZWNpZmllZCkgeworCQkJCWJwcCA9IG15X2F0b2koJm5hbWVbaSsxXSk7CisJCQkJYnBwX3NwZWNpZmllZCA9IDE7CisJCQkJaWYgKGN2dCB8fCByYikKKwkJCQkJY3Z0ID0gMDsKKwkJCX0gZWxzZQorCQkJCWdvdG8gZG9uZTsKKwkJCWJyZWFrOworCQljYXNlICd4JzoKKwkJCWlmICgheXJlc19zcGVjaWZpZWQpIHsKKwkJCQl5cmVzID0gbXlfYXRvaSgmbmFtZVtpKzFdKTsKKwkJCQl5cmVzX3NwZWNpZmllZCA9IDE7CisJCQl9IGVsc2UKKwkJCQlnb3RvIGRvbmU7CisJCWNhc2UgJzAnIC4uLiAnOSc6CisJCQlicmVhazsKKwkJY2FzZSAnTSc6CisJCQlpZiAoIXlyZXNfc3BlY2lmaWVkKQorCQkJCWN2dCA9IDE7CisJCQlicmVhazsKKwkJY2FzZSAnUic6CisJCQlpZiAoIWN2dCkKKwkJCQlyYiA9IDE7CisJCQlicmVhazsKKwkJY2FzZSAnbSc6CisJCQlpZiAoIWN2dCkKKwkJCQltYXJnaW5zID0gMTsKKwkJCWJyZWFrOworCQljYXNlICdpJzoKKwkJCWlmICghY3Z0KQorCQkJCWludGVybGFjZSA9IDE7CisJCQlicmVhazsKKwkJY2FzZSAnZSc6CisJCQlmb3JjZSA9IERSTV9GT1JDRV9PTjsKKwkJCWJyZWFrOworCQljYXNlICdEJzoKKwkJCWlmICgoY29ubmVjdG9yLT5jb25uZWN0b3JfdHlwZSAhPSBEUk1fTU9ERV9DT05ORUNUT1JfRFZJSSkgfHwKKwkJCSAgICAoY29ubmVjdG9yLT5jb25uZWN0b3JfdHlwZSAhPSBEUk1fTU9ERV9DT05ORUNUT1JfSERNSUIpKQorCQkJCWZvcmNlID0gRFJNX0ZPUkNFX09OOworCQkJZWxzZQorCQkJCWZvcmNlID0gRFJNX0ZPUkNFX09OX0RJR0lUQUw7CisJCQlicmVhazsKKwkJY2FzZSAnZCc6CisJCQlmb3JjZSA9IERSTV9GT1JDRV9PRkY7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWdvdG8gZG9uZTsKKwkJfQorCX0KKwlpZiAoaSA8IDAgJiYgeXJlc19zcGVjaWZpZWQpIHsKKwkJeHJlcyA9IG15X2F0b2kobmFtZSk7CisJCXJlc19zcGVjaWZpZWQgPSAxOworCX0KK2RvbmU6CisKKwlEUk1fREVCVUdfS01TKCJjbWRsaW5lIG1vZGUgZm9yIGNvbm5lY3RvciAlcyAlZHglZEAlZEh6JXMlcyVzXG4iLAorCQlkcm1fZ2V0X2Nvbm5lY3Rvcl9uYW1lKGNvbm5lY3RvciksIHhyZXMsIHlyZXMsCisJCShyZWZyZXNoKSA/IHJlZnJlc2ggOiA2MCwgKHJiKSA/ICIgcmVkdWNlZCBibGFua2luZyIgOgorCQkiIiwgKG1hcmdpbnMpID8gIiB3aXRoIG1hcmdpbnMiIDogIiIsIChpbnRlcmxhY2UpID8KKwkJIiBpbnRlcmxhY2VkIiA6ICIiKTsKKworCWlmIChmb3JjZSkgeworCQljb25zdCBjaGFyICpzOworCQlzd2l0Y2ggKGZvcmNlKSB7CisJCWNhc2UgRFJNX0ZPUkNFX09GRjogcyA9ICJPRkYiOyBicmVhazsKKwkJY2FzZSBEUk1fRk9SQ0VfT05fRElHSVRBTDogcyA9ICJPTiAtIGRpZyI7IGJyZWFrOworCQlkZWZhdWx0OgorCQljYXNlIERSTV9GT1JDRV9PTjogcyA9ICJPTiI7IGJyZWFrOworCQl9CisKKwkJRFJNX0lORk8oImZvcmNpbmcgJXMgY29ubmVjdG9yICVzXG4iLAorCQkJIGRybV9nZXRfY29ubmVjdG9yX25hbWUoY29ubmVjdG9yKSwgcyk7CisJCWNvbm5lY3Rvci0+Zm9yY2UgPSBmb3JjZTsKKwl9CisKKwlpZiAocmVzX3NwZWNpZmllZCkgeworCQljbWRsaW5lX21vZGUtPnNwZWNpZmllZCA9IHRydWU7CisJCWNtZGxpbmVfbW9kZS0+eHJlcyA9IHhyZXM7CisJCWNtZGxpbmVfbW9kZS0+eXJlcyA9IHlyZXM7CisJfQorCisJaWYgKHJlZnJlc2hfc3BlY2lmaWVkKSB7CisJCWNtZGxpbmVfbW9kZS0+cmVmcmVzaF9zcGVjaWZpZWQgPSB0cnVlOworCQljbWRsaW5lX21vZGUtPnJlZnJlc2ggPSByZWZyZXNoOworCX0KKworCWlmIChicHBfc3BlY2lmaWVkKSB7CisJCWNtZGxpbmVfbW9kZS0+YnBwX3NwZWNpZmllZCA9IHRydWU7CisJCWNtZGxpbmVfbW9kZS0+YnBwID0gYnBwOworCX0KKwljbWRsaW5lX21vZGUtPnJiID0gcmIgPyB0cnVlIDogZmFsc2U7CisJY21kbGluZV9tb2RlLT5jdnQgPSBjdnQgID8gdHJ1ZSA6IGZhbHNlOworCWNtZGxpbmVfbW9kZS0+aW50ZXJsYWNlID0gaW50ZXJsYWNlID8gdHJ1ZSA6IGZhbHNlOworCisJcmV0dXJuIHRydWU7Cit9CisKK2ludCBkcm1fZmJfaGVscGVyX3BhcnNlX2NvbW1hbmRfbGluZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3I7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNvbm5lY3RvciwgJmRldi0+bW9kZV9jb25maWcuY29ubmVjdG9yX2xpc3QsIGhlYWQpIHsKKwkJY2hhciAqb3B0aW9uID0gTlVMTDsKKworCQkvKiBkbyBzb21ldGhpbmcgb24gcmV0dXJuIC0gdHVybiBvZmYgY29ubmVjdG9yIG1heWJlICovCisJCWlmIChmYl9nZXRfb3B0aW9ucyhkcm1fZ2V0X2Nvbm5lY3Rvcl9uYW1lKGNvbm5lY3RvciksICZvcHRpb24pKQorCQkJY29udGludWU7CisKKwkJZHJtX2ZiX2hlbHBlcl9jb25uZWN0b3JfcGFyc2VfY29tbWFuZF9saW5lKGNvbm5lY3Rvciwgb3B0aW9uKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKIGJvb2wgZHJtX2ZiX2hlbHBlcl9mb3JjZV9rZXJuZWxfbW9kZSh2b2lkKQogewogCWludCBpID0gMDsKQEAgLTg3LDYgKzI4MCw3IEBACiB9CiBFWFBPUlRfU1lNQk9MKGRybV9mYl9oZWxwZXJfcmVzdG9yZSk7CiAKKyNpZmRlZiBDT05GSUdfTUFHSUNfU1lTUlEKIHN0YXRpYyB2b2lkIGRybV9mYl9oZWxwZXJfcmVzdG9yZV93b3JrX2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqaWdub3JlZCkKIHsKIAlkcm1fZmJfaGVscGVyX3Jlc3RvcmUoKTsKQEAgLTEwMyw2ICsyOTcsNyBAQAogCS5oZWxwX21zZyA9ICJmb3JjZS1mYihWKSIsCiAJLmFjdGlvbl9tc2cgPSAiUmVzdG9yZSBmcmFtZWJ1ZmZlciBjb25zb2xlIiwKIH07CisjZW5kaWYKIAogc3RhdGljIHZvaWQgZHJtX2ZiX2hlbHBlcl9vbihzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKIHsKQEAgLTI1OSw2ICs0NTQsMTA5IEBACiB9CiBFWFBPUlRfU1lNQk9MKGRybV9mYl9oZWxwZXJfaW5pdF9jcnRjX2NvdW50KTsKIAorc3RhdGljIGludCBzZXRjb2xyZWcoc3RydWN0IGRybV9jcnRjICpjcnRjLCB1MTYgcmVkLCB1MTYgZ3JlZW4sCisJCSAgICAgdTE2IGJsdWUsIHUxNiByZWdubywgc3RydWN0IGZiX2luZm8gKmluZm8pCit7CisJc3RydWN0IGRybV9mYl9oZWxwZXIgKmZiX2hlbHBlciA9IGluZm8tPnBhcjsKKwlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9IGZiX2hlbHBlci0+ZmI7CisJaW50IHBpbmRleDsKKworCWlmIChpbmZvLT5maXgudmlzdWFsID09IEZCX1ZJU1VBTF9UUlVFQ09MT1IpIHsKKwkJdTMyICpwYWxldHRlOworCQl1MzIgdmFsdWU7CisJCS8qIHBsYWNlIGNvbG9yIGluIHBzdWVkb3BhbGV0dGUgKi8KKwkJaWYgKHJlZ25vID4gMTYpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJcGFsZXR0ZSA9ICh1MzIgKilpbmZvLT5wc2V1ZG9fcGFsZXR0ZTsKKwkJcmVkID4+PSAoMTYgLSBpbmZvLT52YXIucmVkLmxlbmd0aCk7CisJCWdyZWVuID4+PSAoMTYgLSBpbmZvLT52YXIuZ3JlZW4ubGVuZ3RoKTsKKwkJYmx1ZSA+Pj0gKDE2IC0gaW5mby0+dmFyLmJsdWUubGVuZ3RoKTsKKwkJdmFsdWUgPSAocmVkIDw8IGluZm8tPnZhci5yZWQub2Zmc2V0KSB8CisJCQkoZ3JlZW4gPDwgaW5mby0+dmFyLmdyZWVuLm9mZnNldCkgfAorCQkJKGJsdWUgPDwgaW5mby0+dmFyLmJsdWUub2Zmc2V0KTsKKwkJcGFsZXR0ZVtyZWdub10gPSB2YWx1ZTsKKwkJcmV0dXJuIDA7CisJfQorCisJcGluZGV4ID0gcmVnbm87CisKKwlpZiAoZmItPmJpdHNfcGVyX3BpeGVsID09IDE2KSB7CisJCXBpbmRleCA9IHJlZ25vIDw8IDM7CisKKwkJaWYgKGZiLT5kZXB0aCA9PSAxNiAmJiByZWdubyA+IDYzKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWlmIChmYi0+ZGVwdGggPT0gMTUgJiYgcmVnbm8gPiAzMSkKKwkJCXJldHVybiAtRUlOVkFMOworCisJCWlmIChmYi0+ZGVwdGggPT0gMTYpIHsKKwkJCXUxNiByLCBnLCBiOworCQkJaW50IGk7CisJCQlpZiAocmVnbm8gPCAzMikgeworCQkJCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspCisJCQkJCWZiX2hlbHBlci0+ZnVuY3MtPmdhbW1hX3NldChjcnRjLCByZWQsCisJCQkJCQlncmVlbiwgYmx1ZSwgcGluZGV4ICsgaSk7CisJCQl9CisKKwkJCWZiX2hlbHBlci0+ZnVuY3MtPmdhbW1hX2dldChjcnRjLCAmciwKKwkJCQkJCSAgICAmZywgJmIsCisJCQkJCQkgICAgcGluZGV4ID4+IDEpOworCisJCQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKQorCQkJCWZiX2hlbHBlci0+ZnVuY3MtPmdhbW1hX3NldChjcnRjLCByLAorCQkJCQkJCSAgICBncmVlbiwgYiwKKwkJCQkJCQkgICAgKHBpbmRleCA+PiAxKSArIGkpOworCQl9CisJfQorCisJaWYgKGZiLT5kZXB0aCAhPSAxNikKKwkJZmJfaGVscGVyLT5mdW5jcy0+Z2FtbWFfc2V0KGNydGMsIHJlZCwgZ3JlZW4sIGJsdWUsIHBpbmRleCk7CisJcmV0dXJuIDA7Cit9CisKK2ludCBkcm1fZmJfaGVscGVyX3NldGNtYXAoc3RydWN0IGZiX2NtYXAgKmNtYXAsIHN0cnVjdCBmYl9pbmZvICppbmZvKQoreworCXN0cnVjdCBkcm1fZmJfaGVscGVyICpmYl9oZWxwZXIgPSBpbmZvLT5wYXI7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGZiX2hlbHBlci0+ZGV2OworCXUxNiAqcmVkLCAqZ3JlZW4sICpibHVlLCAqdHJhbnNwOworCXN0cnVjdCBkcm1fY3J0YyAqY3J0YzsKKwlpbnQgaSwgcmMgPSAwOworCWludCBzdGFydDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoY3J0YywgJmRldi0+bW9kZV9jb25maWcuY3J0Y19saXN0LCBoZWFkKSB7CisJCXN0cnVjdCBkcm1fY3J0Y19oZWxwZXJfZnVuY3MgKmNydGNfZnVuY3MgPSBjcnRjLT5oZWxwZXJfcHJpdmF0ZTsKKwkJZm9yIChpID0gMDsgaSA8IGZiX2hlbHBlci0+Y3J0Y19jb3VudDsgaSsrKSB7CisJCQlpZiAoY3J0Yy0+YmFzZS5pZCA9PSBmYl9oZWxwZXItPmNydGNfaW5mb1tpXS5jcnRjX2lkKQorCQkJCWJyZWFrOworCQl9CisJCWlmIChpID09IGZiX2hlbHBlci0+Y3J0Y19jb3VudCkKKwkJCWNvbnRpbnVlOworCisJCXJlZCA9IGNtYXAtPnJlZDsKKwkJZ3JlZW4gPSBjbWFwLT5ncmVlbjsKKwkJYmx1ZSA9IGNtYXAtPmJsdWU7CisJCXRyYW5zcCA9IGNtYXAtPnRyYW5zcDsKKwkJc3RhcnQgPSBjbWFwLT5zdGFydDsKKworCQlmb3IgKGkgPSAwOyBpIDwgY21hcC0+bGVuOyBpKyspIHsKKwkJCXUxNiBocmVkLCBoZ3JlZW4sIGhibHVlLCBodHJhbnNwID0gMHhmZmZmOworCisJCQlocmVkID0gKnJlZCsrOworCQkJaGdyZWVuID0gKmdyZWVuKys7CisJCQloYmx1ZSA9ICpibHVlKys7CisKKwkJCWlmICh0cmFuc3ApCisJCQkJaHRyYW5zcCA9ICp0cmFuc3ArKzsKKworCQkJcmMgPSBzZXRjb2xyZWcoY3J0YywgaHJlZCwgaGdyZWVuLCBoYmx1ZSwgc3RhcnQrKywgaW5mbyk7CisJCQlpZiAocmMpCisJCQkJcmV0dXJuIHJjOworCQl9CisJCWNydGNfZnVuY3MtPmxvYWRfbHV0KGNydGMpOworCX0KKwlyZXR1cm4gcmM7Cit9CitFWFBPUlRfU1lNQk9MKGRybV9mYl9oZWxwZXJfc2V0Y21hcCk7CisKIGludCBkcm1fZmJfaGVscGVyX3NldGNvbHJlZyh1bnNpZ25lZCByZWdubywKIAkJCSAgICB1bnNpZ25lZCByZWQsCiAJCQkgICAgdW5zaWduZWQgZ3JlZW4sCkBAIC0yNzAsMTAgKzU2OCwxMyBAQAogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBmYl9oZWxwZXItPmRldjsKIAlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7CiAJaW50IGk7CisJaW50IHJldDsKKworCWlmIChyZWdubyA+IDI1NSkKKwkJcmV0dXJuIDE7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNydGMsICZkZXYtPm1vZGVfY29uZmlnLmNydGNfbGlzdCwgaGVhZCkgewotCQlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9IGZiX2hlbHBlci0+ZmI7Ci0KKwkJc3RydWN0IGRybV9jcnRjX2hlbHBlcl9mdW5jcyAqY3J0Y19mdW5jcyA9IGNydGMtPmhlbHBlcl9wcml2YXRlOwogCQlmb3IgKGkgPSAwOyBpIDwgZmJfaGVscGVyLT5jcnRjX2NvdW50OyBpKyspIHsKIAkJCWlmIChjcnRjLT5iYXNlLmlkID09IGZiX2hlbHBlci0+Y3J0Y19pbmZvW2ldLmNydGNfaWQpCiAJCQkJYnJlYWs7CkBAIC0yODEsMzUgKzU4MiwxMSBAQAogCQlpZiAoaSA9PSBmYl9oZWxwZXItPmNydGNfY291bnQpCiAJCQljb250aW51ZTsKIAotCQlpZiAocmVnbm8gPiAyNTUpCi0JCQlyZXR1cm4gMTsKKwkJcmV0ID0gc2V0Y29scmVnKGNydGMsIHJlZCwgZ3JlZW4sIGJsdWUsIHJlZ25vLCBpbmZvKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CiAKLQkJaWYgKGZiLT5kZXB0aCA9PSA4KSB7Ci0JCQlmYl9oZWxwZXItPmZ1bmNzLT5nYW1tYV9zZXQoY3J0YywgcmVkLCBncmVlbiwgYmx1ZSwgcmVnbm8pOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQotCQlpZiAocmVnbm8gPCAxNikgewotCQkJc3dpdGNoIChmYi0+ZGVwdGgpIHsKLQkJCWNhc2UgMTU6Ci0JCQkJZmItPnBzZXVkb19wYWxldHRlW3JlZ25vXSA9ICgocmVkICYgMHhmODAwKSA+PiAxKSB8Ci0JCQkJCSgoZ3JlZW4gJiAweGY4MDApID4+ICA2KSB8Ci0JCQkJCSgoYmx1ZSAmIDB4ZjgwMCkgPj4gMTEpOwotCQkJCWJyZWFrOwotCQkJY2FzZSAxNjoKLQkJCQlmYi0+cHNldWRvX3BhbGV0dGVbcmVnbm9dID0gKHJlZCAmIDB4ZjgwMCkgfAotCQkJCQkoKGdyZWVuICYgMHhmYzAwKSA+PiAgNSkgfAotCQkJCQkoKGJsdWUgICYgMHhmODAwKSA+PiAxMSk7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIDI0OgotCQkJY2FzZSAzMjoKLQkJCQlmYi0+cHNldWRvX3BhbGV0dGVbcmVnbm9dID0KLQkJCQkJKCgocmVkID4+IDgpICYgMHhmZikgPDwgaW5mby0+dmFyLnJlZC5vZmZzZXQpIHwKLQkJCQkJKCgoZ3JlZW4gPj4gOCkgJiAweGZmKSA8PCBpbmZvLT52YXIuZ3JlZW4ub2Zmc2V0KSB8Ci0JCQkJCSgoKGJsdWUgPj4gOCkgJiAweGZmKSA8PCBpbmZvLT52YXIuYmx1ZS5vZmZzZXQpOwotCQkJCWJyZWFrOwotCQkJfQotCQl9CisJCWNydGNfZnVuY3MtPmxvYWRfbHV0KGNydGMpOwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTQ3OSwxMSArNzU2LDE0IEBACiBFWFBPUlRfU1lNQk9MKGRybV9mYl9oZWxwZXJfcGFuX2Rpc3BsYXkpOwogCiBpbnQgZHJtX2ZiX2hlbHBlcl9zaW5nbGVfZmJfcHJvYmUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkgIGludCBwcmVmZXJyZWRfYnBwLAogCQkJCSAgaW50ICgqZmJfY3JlYXRlKShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCQkJCQkJICAgdWludDMyX3QgZmJfd2lkdGgsCiAJCQkJCQkgICB1aW50MzJfdCBmYl9oZWlnaHQsCiAJCQkJCQkgICB1aW50MzJfdCBzdXJmYWNlX3dpZHRoLAogCQkJCQkJICAgdWludDMyX3Qgc3VyZmFjZV9oZWlnaHQsCisJCQkJCQkgICB1aW50MzJfdCBzdXJmYWNlX2RlcHRoLAorCQkJCQkJICAgdWludDMyX3Qgc3VyZmFjZV9icHAsCiAJCQkJCQkgICBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICoqZmJfcHRyKSkKIHsKIAlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7CkBAIC00OTcsOCArNzc3LDQ4IEBACiAJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmI7CiAJc3RydWN0IGRybV9tb2RlX3NldCAqbW9kZXNldCA9IE5VTEw7CiAJc3RydWN0IGRybV9mYl9oZWxwZXIgKmZiX2hlbHBlcjsKKwl1aW50MzJfdCBzdXJmYWNlX2RlcHRoID0gMjQsIHN1cmZhY2VfYnBwID0gMzI7CiAKKwkvKiBpZiBkcml2ZXIgcGlja3MgOCBvciAxNiBieSBkZWZhdWx0IHVzZSB0aGF0CisJICAgZm9yIGJvdGggZGVwdGgvYnBwICovCisJaWYgKHByZWZlcnJlZF9icHAgIT0gc3VyZmFjZV9icHApIHsKKwkJc3VyZmFjZV9kZXB0aCA9IHN1cmZhY2VfYnBwID0gcHJlZmVycmVkX2JwcDsKKwl9CiAJLyogZmlyc3QgdXAgZ2V0IGEgY291bnQgb2YgY3J0Y3Mgbm93IGluIHVzZSBhbmQgbmV3IG1pbi9tYXhlcyB3aWR0aC9oZWlnaHRzICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeShjb25uZWN0b3IsICZkZXYtPm1vZGVfY29uZmlnLmNvbm5lY3Rvcl9saXN0LCBoZWFkKSB7CisJCXN0cnVjdCBkcm1fZmJfaGVscGVyX2Nvbm5lY3RvciAqZmJfaGVscF9jb25uID0gY29ubmVjdG9yLT5mYl9oZWxwZXJfcHJpdmF0ZTsKKworCQlzdHJ1Y3QgZHJtX2ZiX2hlbHBlcl9jbWRsaW5lX21vZGUgKmNtZGxpbmVfbW9kZTsKKworCQlpZiAoIWZiX2hlbHBfY29ubikKKwkJCWNvbnRpbnVlOworCQkKKwkJY21kbGluZV9tb2RlID0gJmZiX2hlbHBfY29ubi0+Y21kbGluZV9tb2RlOworCisJCWlmIChjbWRsaW5lX21vZGUtPmJwcF9zcGVjaWZpZWQpIHsKKwkJCXN3aXRjaCAoY21kbGluZV9tb2RlLT5icHApIHsKKwkJCWNhc2UgODoKKwkJCQlzdXJmYWNlX2RlcHRoID0gc3VyZmFjZV9icHAgPSA4OworCQkJCWJyZWFrOworCQkJY2FzZSAxNToKKwkJCQlzdXJmYWNlX2RlcHRoID0gMTU7CisJCQkJc3VyZmFjZV9icHAgPSAxNjsKKwkJCQlicmVhazsKKwkJCWNhc2UgMTY6CisJCQkJc3VyZmFjZV9kZXB0aCA9IHN1cmZhY2VfYnBwID0gMTY7CisJCQkJYnJlYWs7CisJCQljYXNlIDI0OgorCQkJCXN1cmZhY2VfZGVwdGggPSBzdXJmYWNlX2JwcCA9IDI0OworCQkJCWJyZWFrOworCQkJY2FzZSAzMjoKKwkJCQlzdXJmYWNlX2RlcHRoID0gMjQ7CisJCQkJc3VyZmFjZV9icHAgPSAzMjsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWJyZWFrOworCQl9CisJfQorCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShjcnRjLCAmZGV2LT5tb2RlX2NvbmZpZy5jcnRjX2xpc3QsIGhlYWQpIHsKIAkJaWYgKGRybV9oZWxwZXJfY3J0Y19pbl91c2UoY3J0YykpIHsKIAkJCWlmIChjcnRjLT5kZXNpcmVkX21vZGUpIHsKQEAgLTUyNyw3ICs4NDcsOCBAQAogCS8qIGRvIHdlIGhhdmUgYW4gZmIgYWxyZWFkeT8gKi8KIAlpZiAobGlzdF9lbXB0eSgmZGV2LT5tb2RlX2NvbmZpZy5mYl9rZXJuZWxfbGlzdCkpIHsKIAkJcmV0ID0gKCpmYl9jcmVhdGUpKGRldiwgZmJfd2lkdGgsIGZiX2hlaWdodCwgc3VyZmFjZV93aWR0aCwKLQkJCQkgICBzdXJmYWNlX2hlaWdodCwgJmZiKTsKKwkJCQkgICBzdXJmYWNlX2hlaWdodCwgc3VyZmFjZV9kZXB0aCwgc3VyZmFjZV9icHAsCisJCQkJICAgJmZiKTsKIAkJaWYgKHJldCkKIAkJCXJldHVybiAtRUlOVkFMOwogCQluZXdfZmIgPSAxOwpAQCAtNjE4LDEwICs5MzksMTIgQEAKIH0KIEVYUE9SVF9TWU1CT0woZHJtX2ZiX2hlbHBlcl9mcmVlKTsKIAotdm9pZCBkcm1fZmJfaGVscGVyX2ZpbGxfZml4KHN0cnVjdCBmYl9pbmZvICppbmZvLCB1aW50MzJfdCBwaXRjaCkKK3ZvaWQgZHJtX2ZiX2hlbHBlcl9maWxsX2ZpeChzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgdWludDMyX3QgcGl0Y2gsCisJCQkgICAgdWludDMyX3QgZGVwdGgpCiB7CiAJaW5mby0+Zml4LnR5cGUgPSBGQl9UWVBFX1BBQ0tFRF9QSVhFTFM7Ci0JaW5mby0+Zml4LnZpc3VhbCA9IEZCX1ZJU1VBTF9UUlVFQ09MT1I7CisJaW5mby0+Zml4LnZpc3VhbCA9IGRlcHRoID09IDggPyBGQl9WSVNVQUxfUFNFVURPQ09MT1IgOgorCQlGQl9WSVNVQUxfVFJVRUNPTE9SOwogCWluZm8tPmZpeC50eXBlX2F1eCA9IDA7CiAJaW5mby0+Zml4LnhwYW5zdGVwID0gMTsgLyogZG9pbmcgaXQgaW4gaHcgKi8KIAlpbmZvLT5maXgueXBhbnN0ZXAgPSAxOyAvKiBkb2luZyBpdCBpbiBodyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9tb2Rlcy5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9tb2Rlcy5jCmluZGV4IDQ5NDA0Y2UuLjUxZjY3NzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fbW9kZXMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX21vZGVzLmMKQEAgLTg4LDcgKzg4LDcgQEAKICNkZWZpbmUgSFZfRkFDVE9SCQkJMTAwMAogc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmRybV9jdnRfbW9kZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgaGRpc3BsYXksCiAJCQkJICAgICAgaW50IHZkaXNwbGF5LCBpbnQgdnJlZnJlc2gsCi0JCQkJICAgICAgYm9vbCByZWR1Y2VkLCBib29sIGludGVybGFjZWQpCisJCQkJICAgICAgYm9vbCByZWR1Y2VkLCBib29sIGludGVybGFjZWQsIGJvb2wgbWFyZ2lucykKIHsKIAkvKiAxKSB0b3AvYm90dG9tIG1hcmdpbiBzaXplICglIG9mIGhlaWdodCkgLSBkZWZhdWx0OiAxLjgsICovCiAjZGVmaW5lCUNWVF9NQVJHSU5fUEVSQ0VOVEFHRQkJMTgKQEAgLTEwMSw3ICsxMDEsNiBAQAogCS8qIFBpeGVsIENsb2NrIHN0ZXAgKGtIeikgKi8KICNkZWZpbmUgQ1ZUX0NMT0NLX1NURVAJCQkyNTAKIAlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqZHJtX21vZGU7Ci0JYm9vbCBtYXJnaW5zID0gZmFsc2U7CiAJdW5zaWduZWQgaW50IHZmaWVsZHJhdGUsIGhwZXJpb2Q7CiAJaW50IGhkaXNwbGF5X3JuZCwgaG1hcmdpbiwgdmRpc3BsYXlfcm5kLCB2bWFyZ2luLCB2c3luYzsKIAlpbnQgaW50ZXJsYWNlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV92bS5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV92bS5jCmluZGV4IDdlMWZiZTUuLjRhYzkwMGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fdm0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3ZtLmMKQEAgLTM2OSwyOCArMzY5LDI4IEBACiB9CiAKIC8qKiBBR1AgdmlydHVhbCBtZW1vcnkgb3BlcmF0aW9ucyAqLwotc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBkcm1fdm1fb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBkcm1fdm1fb3BzID0gewogCS5mYXVsdCA9IGRybV92bV9mYXVsdCwKIAkub3BlbiA9IGRybV92bV9vcGVuLAogCS5jbG9zZSA9IGRybV92bV9jbG9zZSwKIH07CiAKIC8qKiBTaGFyZWQgdmlydHVhbCBtZW1vcnkgb3BlcmF0aW9ucyAqLwotc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBkcm1fdm1fc2htX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgZHJtX3ZtX3NobV9vcHMgPSB7CiAJLmZhdWx0ID0gZHJtX3ZtX3NobV9mYXVsdCwKIAkub3BlbiA9IGRybV92bV9vcGVuLAogCS5jbG9zZSA9IGRybV92bV9zaG1fY2xvc2UsCiB9OwogCiAvKiogRE1BIHZpcnR1YWwgbWVtb3J5IG9wZXJhdGlvbnMgKi8KLXN0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgZHJtX3ZtX2RtYV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGRybV92bV9kbWFfb3BzID0gewogCS5mYXVsdCA9IGRybV92bV9kbWFfZmF1bHQsCiAJLm9wZW4gPSBkcm1fdm1fb3BlbiwKIAkuY2xvc2UgPSBkcm1fdm1fY2xvc2UsCiB9OwogCiAvKiogU2NhdHRlci1nYXRoZXIgdmlydHVhbCBtZW1vcnkgb3BlcmF0aW9ucyAqLwotc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBkcm1fdm1fc2dfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBkcm1fdm1fc2dfb3BzID0gewogCS5mYXVsdCA9IGRybV92bV9zZ19mYXVsdCwKIAkub3BlbiA9IGRybV92bV9vcGVuLAogCS5jbG9zZSA9IGRybV92bV9jbG9zZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZG1hLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RtYS5jCmluZGV4IDQ1ZDUwN2UuLjkyYWViOTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZG1hLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kbWEuYwpAQCAtMTQ2OCw2ICsxNDY4LDcgQEAKIAlzcGluX2xvY2tfaW5pdCgmZGV2X3ByaXYtPnVzZXJfaXJxX2xvY2spOwogCXNwaW5fbG9ja19pbml0KCZkZXZfcHJpdi0+ZXJyb3JfbG9jayk7CiAJZGV2X3ByaXYtPnVzZXJfaXJxX3JlZmNvdW50ID0gMDsKKwlkZXZfcHJpdi0+dHJhY2VfaXJxX3NlcW5vID0gMDsKIAogCXJldCA9IGRybV92YmxhbmtfaW5pdChkZXYsIEk5MTVfTlVNX1BJUEUpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYwppbmRleCBiOTM4MTRjLi43ZjQzNmVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMKQEAgLTg5LDcgKzg5LDggQEAKIAkJcGNpX3NldF9wb3dlcl9zdGF0ZShkZXYtPnBkZXYsIFBDSV9EM2hvdCk7CiAJfQogCi0JZGV2X3ByaXYtPnN1c3BlbmRlZCA9IDE7CisJLyogTW9kZXNldCBvbiByZXN1bWUsIG5vdCBsaWQgZXZlbnRzICovCisJZGV2X3ByaXYtPm1vZGVzZXRfb25fbGlkID0gMDsKIAogCXJldHVybiAwOwogfQpAQCAtMTI0LDcgKzEyNSw3IEBACiAJCWRybV9oZWxwZXJfcmVzdW1lX2ZvcmNlX21vZGUoZGV2KTsKIAl9CiAKLQlkZXZfcHJpdi0+c3VzcGVuZGVkID0gMDsKKwlkZXZfcHJpdi0+bW9kZXNldF9vbl9saWQgPSAwOwogCiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCmluZGV4IGIyNGIyZDEuLmM1ZGYyMjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaApAQCAtMjAyLDYgKzIwMiw3IEBACiAJc3BpbmxvY2tfdCB1c2VyX2lycV9sb2NrOwogCS8qKiBSZWZjb3VudCBmb3IgaTkxNV91c2VyX2lycV9nZXQoKSB2ZXJzdXMgaTkxNV91c2VyX2lycV9wdXQoKS4gKi8KIAlpbnQgdXNlcl9pcnFfcmVmY291bnQ7CisJdTMyIHRyYWNlX2lycV9zZXFubzsKIAkvKiogQ2FjaGVkIHZhbHVlIG9mIElNUiB0byBhdm9pZCByZWFkcyBpbiB1cGRhdGluZyB0aGUgYml0ZmllbGQgKi8KIAl1MzIgaXJxX21hc2tfcmVnOwogCXUzMiBwaXBlc3RhdFsyXTsKQEAgLTI3Myw3ICsyNzQsNyBAQAogCXN0cnVjdCBkcm1faTkxNV9kaXNwbGF5X2Z1bmNzIGRpc3BsYXk7CiAKIAkvKiBSZWdpc3RlciBzdGF0ZSAqLwotCWJvb2wgc3VzcGVuZGVkOworCWJvb2wgbW9kZXNldF9vbl9saWQ7CiAJdTggc2F2ZUxCQjsKIAl1MzIgc2F2ZURTUEFDTlRSOwogCXUzMiBzYXZlRFNQQkNOVFI7CkBAIC02NjUsNiArNjY2LDcgQEAKIGV4dGVybiBpbnQgaTkxNV9pcnFfd2FpdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAogCQkJIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKIHZvaWQgaTkxNV91c2VyX2lycV9nZXQoc3RydWN0IGRybV9kZXZpY2UgKmRldik7Cit2b2lkIGk5MTVfdHJhY2VfaXJxX2dldChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1MzIgc2Vxbm8pOwogdm9pZCBpOTE1X3VzZXJfaXJxX3B1dChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIGV4dGVybiB2b2lkIGk5MTVfZW5hYmxlX2ludGVycnVwdCAoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCmluZGV4IDQwNzI3ZDQuLmFiZmMyN2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYwpAQCAtMTc3MCw3ICsxNzcwLDcgQEAKIAlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAl1aW50MzJfdCBzZXFubzsKIAotCWlmICghZGV2X3ByaXYtPmh3X3N0YXR1c19wYWdlKQorCWlmICghZGV2X3ByaXYtPmh3X3N0YXR1c19wYWdlIHx8IGxpc3RfZW1wdHkoJmRldl9wcml2LT5tbS5yZXF1ZXN0X2xpc3QpKQogCQlyZXR1cm47CiAKIAlzZXFubyA9IGk5MTVfZ2V0X2dlbV9zZXFubyhkZXYpOwpAQCAtMTc5NCw2ICsxNzk0LDEyIEBACiAJCX0gZWxzZQogCQkJYnJlYWs7CiAJfQorCisJaWYgKHVubGlrZWx5IChkZXZfcHJpdi0+dHJhY2VfaXJxX3NlcW5vICYmCisJCSAgICAgIGk5MTVfc2Vxbm9fcGFzc2VkKGRldl9wcml2LT50cmFjZV9pcnFfc2Vxbm8sIHNlcW5vKSkpIHsKKwkJaTkxNV91c2VyX2lycV9wdXQoZGV2KTsKKwkJZGV2X3ByaXYtPnRyYWNlX2lycV9zZXFubyA9IDA7CisJfQogfQogCiB2b2lkCkBAIC0zMzUyLDcgKzMzNTgsNyBAQAogCWV4ZWNfc3RhcnQgPSAodWludDMyX3QpIGV4ZWNfb2Zmc2V0ICsgZXhlYy0+YmF0Y2hfc3RhcnRfb2Zmc2V0OwogCWV4ZWNfbGVuID0gKHVpbnQzMl90KSBleGVjLT5iYXRjaF9sZW47CiAKLQl0cmFjZV9pOTE1X2dlbV9yZXF1ZXN0X3N1Ym1pdChkZXYsIGRldl9wcml2LT5tbS5uZXh0X2dlbV9zZXFubyk7CisJdHJhY2VfaTkxNV9nZW1fcmVxdWVzdF9zdWJtaXQoZGV2LCBkZXZfcHJpdi0+bW0ubmV4dF9nZW1fc2Vxbm8gKyAxKTsKIAogCWNvdW50ID0gbmJveCA/IG5ib3ggOiAxOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2lycS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9pcnEuYwppbmRleCA0ZGZlZWM3Li5jM2NlZmZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2lycS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfaXJxLmMKQEAgLTcyNSw2ICs3MjUsMTYgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZfcHJpdi0+dXNlcl9pcnFfbG9jaywgaXJxZmxhZ3MpOwogfQogCit2b2lkIGk5MTVfdHJhY2VfaXJxX2dldChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1MzIgc2Vxbm8pCit7CisJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IChkcm1faTkxNV9wcml2YXRlX3QgKikgZGV2LT5kZXZfcHJpdmF0ZTsKKworCWlmIChkZXZfcHJpdi0+dHJhY2VfaXJxX3NlcW5vID09IDApCisJCWk5MTVfdXNlcl9pcnFfZ2V0KGRldik7CisKKwlkZXZfcHJpdi0+dHJhY2VfaXJxX3NlcW5vID0gc2Vxbm87Cit9CisKIHN0YXRpYyBpbnQgaTkxNV93YWl0X2lycShzdHJ1Y3QgZHJtX2RldmljZSAqIGRldiwgaW50IGlycV9ucikKIHsKIAlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gKGRybV9pOTE1X3ByaXZhdGVfdCAqKSBkZXYtPmRldl9wcml2YXRlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV90cmFjZS5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV90cmFjZS5oCmluZGV4IDU1NjdhNDAuLjAxODQwZDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfdHJhY2UuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3RyYWNlLmgKQEAgLTE1OCwxNiArMTU4LDE3IEBACiAJICAgIFRQX0FSR1MoZGV2LCBzZXFubyksCiAKIAkgICAgVFBfU1RSVUNUX19lbnRyeSgKLQkJCSAgICAgX19maWVsZChzdHJ1Y3QgZHJtX2RldmljZSAqLCBkZXYpCisJCQkgICAgIF9fZmllbGQodTMyLCBkZXYpCiAJCQkgICAgIF9fZmllbGQodTMyLCBzZXFubykKIAkJCSAgICAgKSwKIAogCSAgICBUUF9mYXN0X2Fzc2lnbigKLQkJCSAgIF9fZW50cnktPmRldiA9IGRldjsKKwkJCSAgIF9fZW50cnktPmRldiA9IGRldi0+cHJpbWFyeS0+aW5kZXg7CiAJCQkgICBfX2VudHJ5LT5zZXFubyA9IHNlcW5vOworCQkJICAgaTkxNV90cmFjZV9pcnFfZ2V0KGRldiwgc2Vxbm8pOwogCQkJICAgKSwKIAotCSAgICBUUF9wcmludGsoImRldj0lcCwgc2Vxbm89JXUiLCBfX2VudHJ5LT5kZXYsIF9fZW50cnktPnNlcW5vKQorCSAgICBUUF9wcmludGsoImRldj0ldSwgc2Vxbm89JXUiLCBfX2VudHJ5LT5kZXYsIF9fZW50cnktPnNlcW5vKQogKTsKIAogVFJBQ0VfRVZFTlQoaTkxNV9nZW1fcmVxdWVzdF9mbHVzaCwKQEAgLTE3OCwyMCArMTc5LDIwIEBACiAJICAgIFRQX0FSR1MoZGV2LCBzZXFubywgZmx1c2hfZG9tYWlucywgaW52YWxpZGF0ZV9kb21haW5zKSwKIAogCSAgICBUUF9TVFJVQ1RfX2VudHJ5KAotCQkJICAgICBfX2ZpZWxkKHN0cnVjdCBkcm1fZGV2aWNlICosIGRldikKKwkJCSAgICAgX19maWVsZCh1MzIsIGRldikKIAkJCSAgICAgX19maWVsZCh1MzIsIHNlcW5vKQogCQkJICAgICBfX2ZpZWxkKHUzMiwgZmx1c2hfZG9tYWlucykKIAkJCSAgICAgX19maWVsZCh1MzIsIGludmFsaWRhdGVfZG9tYWlucykKIAkJCSAgICAgKSwKIAogCSAgICBUUF9mYXN0X2Fzc2lnbigKLQkJCSAgIF9fZW50cnktPmRldiA9IGRldjsKKwkJCSAgIF9fZW50cnktPmRldiA9IGRldi0+cHJpbWFyeS0+aW5kZXg7CiAJCQkgICBfX2VudHJ5LT5zZXFubyA9IHNlcW5vOwogCQkJICAgX19lbnRyeS0+Zmx1c2hfZG9tYWlucyA9IGZsdXNoX2RvbWFpbnM7CiAJCQkgICBfX2VudHJ5LT5pbnZhbGlkYXRlX2RvbWFpbnMgPSBpbnZhbGlkYXRlX2RvbWFpbnM7CiAJCQkgICApLAogCi0JICAgIFRQX3ByaW50aygiZGV2PSVwLCBzZXFubz0ldSwgZmx1c2g9JTA0eCwgaW52YWxpZGF0ZT0lMDR4IiwKKwkgICAgVFBfcHJpbnRrKCJkZXY9JXUsIHNlcW5vPSV1LCBmbHVzaD0lMDR4LCBpbnZhbGlkYXRlPSUwNHgiLAogCQkgICAgICBfX2VudHJ5LT5kZXYsIF9fZW50cnktPnNlcW5vLAogCQkgICAgICBfX2VudHJ5LT5mbHVzaF9kb21haW5zLCBfX2VudHJ5LT5pbnZhbGlkYXRlX2RvbWFpbnMpCiApOwpAQCAtMjA0LDE2ICsyMDUsMTYgQEAKIAkgICAgVFBfQVJHUyhkZXYsIHNlcW5vKSwKIAogCSAgICBUUF9TVFJVQ1RfX2VudHJ5KAotCQkJICAgICBfX2ZpZWxkKHN0cnVjdCBkcm1fZGV2aWNlICosIGRldikKKwkJCSAgICAgX19maWVsZCh1MzIsIGRldikKIAkJCSAgICAgX19maWVsZCh1MzIsIHNlcW5vKQogCQkJICAgICApLAogCiAJICAgIFRQX2Zhc3RfYXNzaWduKAotCQkJICAgX19lbnRyeS0+ZGV2ID0gZGV2OworCQkJICAgX19lbnRyeS0+ZGV2ID0gZGV2LT5wcmltYXJ5LT5pbmRleDsKIAkJCSAgIF9fZW50cnktPnNlcW5vID0gc2Vxbm87CiAJCQkgICApLAogCi0JICAgIFRQX3ByaW50aygiZGV2PSVwLCBzZXFubz0ldSIsIF9fZW50cnktPmRldiwgX19lbnRyeS0+c2Vxbm8pCisJICAgIFRQX3ByaW50aygiZGV2PSV1LCBzZXFubz0ldSIsIF9fZW50cnktPmRldiwgX19lbnRyeS0+c2Vxbm8pCiApOwogCiBUUkFDRV9FVkVOVChpOTE1X2dlbV9yZXF1ZXN0X3JldGlyZSwKQEAgLTIyMywxNiArMjI0LDE2IEBACiAJICAgIFRQX0FSR1MoZGV2LCBzZXFubyksCiAKIAkgICAgVFBfU1RSVUNUX19lbnRyeSgKLQkJCSAgICAgX19maWVsZChzdHJ1Y3QgZHJtX2RldmljZSAqLCBkZXYpCisJCQkgICAgIF9fZmllbGQodTMyLCBkZXYpCiAJCQkgICAgIF9fZmllbGQodTMyLCBzZXFubykKIAkJCSAgICAgKSwKIAogCSAgICBUUF9mYXN0X2Fzc2lnbigKLQkJCSAgIF9fZW50cnktPmRldiA9IGRldjsKKwkJCSAgIF9fZW50cnktPmRldiA9IGRldi0+cHJpbWFyeS0+aW5kZXg7CiAJCQkgICBfX2VudHJ5LT5zZXFubyA9IHNlcW5vOwogCQkJICAgKSwKIAotCSAgICBUUF9wcmludGsoImRldj0lcCwgc2Vxbm89JXUiLCBfX2VudHJ5LT5kZXYsIF9fZW50cnktPnNlcW5vKQorCSAgICBUUF9wcmludGsoImRldj0ldSwgc2Vxbm89JXUiLCBfX2VudHJ5LT5kZXYsIF9fZW50cnktPnNlcW5vKQogKTsKIAogVFJBQ0VfRVZFTlQoaTkxNV9nZW1fcmVxdWVzdF93YWl0X2JlZ2luLApAQCAtMjQyLDE2ICsyNDMsMTYgQEAKIAkgICAgVFBfQVJHUyhkZXYsIHNlcW5vKSwKIAogCSAgICBUUF9TVFJVQ1RfX2VudHJ5KAotCQkJICAgICBfX2ZpZWxkKHN0cnVjdCBkcm1fZGV2aWNlICosIGRldikKKwkJCSAgICAgX19maWVsZCh1MzIsIGRldikKIAkJCSAgICAgX19maWVsZCh1MzIsIHNlcW5vKQogCQkJICAgICApLAogCiAJICAgIFRQX2Zhc3RfYXNzaWduKAotCQkJICAgX19lbnRyeS0+ZGV2ID0gZGV2OworCQkJICAgX19lbnRyeS0+ZGV2ID0gZGV2LT5wcmltYXJ5LT5pbmRleDsKIAkJCSAgIF9fZW50cnktPnNlcW5vID0gc2Vxbm87CiAJCQkgICApLAogCi0JICAgIFRQX3ByaW50aygiZGV2PSVwLCBzZXFubz0ldSIsIF9fZW50cnktPmRldiwgX19lbnRyeS0+c2Vxbm8pCisJICAgIFRQX3ByaW50aygiZGV2PSV1LCBzZXFubz0ldSIsIF9fZW50cnktPmRldiwgX19lbnRyeS0+c2Vxbm8pCiApOwogCiBUUkFDRV9FVkVOVChpOTE1X2dlbV9yZXF1ZXN0X3dhaXRfZW5kLApAQCAtMjYxLDE2ICsyNjIsMTYgQEAKIAkgICAgVFBfQVJHUyhkZXYsIHNlcW5vKSwKIAogCSAgICBUUF9TVFJVQ1RfX2VudHJ5KAotCQkJICAgICBfX2ZpZWxkKHN0cnVjdCBkcm1fZGV2aWNlICosIGRldikKKwkJCSAgICAgX19maWVsZCh1MzIsIGRldikKIAkJCSAgICAgX19maWVsZCh1MzIsIHNlcW5vKQogCQkJICAgICApLAogCiAJICAgIFRQX2Zhc3RfYXNzaWduKAotCQkJICAgX19lbnRyeS0+ZGV2ID0gZGV2OworCQkJICAgX19lbnRyeS0+ZGV2ID0gZGV2LT5wcmltYXJ5LT5pbmRleDsKIAkJCSAgIF9fZW50cnktPnNlcW5vID0gc2Vxbm87CiAJCQkgICApLAogCi0JICAgIFRQX3ByaW50aygiZGV2PSVwLCBzZXFubz0ldSIsIF9fZW50cnktPmRldiwgX19lbnRyeS0+c2Vxbm8pCisJICAgIFRQX3ByaW50aygiZGV2PSV1LCBzZXFubz0ldSIsIF9fZW50cnktPmRldiwgX19lbnRyeS0+c2Vxbm8pCiApOwogCiBUUkFDRV9FVkVOVChpOTE1X3Jpbmdfd2FpdF9iZWdpbiwKQEAgLTI4MCwxNCArMjgxLDE0IEBACiAJICAgIFRQX0FSR1MoZGV2KSwKIAogCSAgICBUUF9TVFJVQ1RfX2VudHJ5KAotCQkJICAgICBfX2ZpZWxkKHN0cnVjdCBkcm1fZGV2aWNlICosIGRldikKKwkJCSAgICAgX19maWVsZCh1MzIsIGRldikKIAkJCSAgICAgKSwKIAogCSAgICBUUF9mYXN0X2Fzc2lnbigKLQkJCSAgIF9fZW50cnktPmRldiA9IGRldjsKKwkJCSAgIF9fZW50cnktPmRldiA9IGRldi0+cHJpbWFyeS0+aW5kZXg7CiAJCQkgICApLAogCi0JICAgIFRQX3ByaW50aygiZGV2PSVwIiwgX19lbnRyeS0+ZGV2KQorCSAgICBUUF9wcmludGsoImRldj0ldSIsIF9fZW50cnktPmRldikKICk7CiAKIFRSQUNFX0VWRU5UKGk5MTVfcmluZ193YWl0X2VuZCwKQEAgLTI5NywxNCArMjk4LDE0IEBACiAJICAgIFRQX0FSR1MoZGV2KSwKIAogCSAgICBUUF9TVFJVQ1RfX2VudHJ5KAotCQkJICAgICBfX2ZpZWxkKHN0cnVjdCBkcm1fZGV2aWNlICosIGRldikKKwkJCSAgICAgX19maWVsZCh1MzIsIGRldikKIAkJCSAgICAgKSwKIAogCSAgICBUUF9mYXN0X2Fzc2lnbigKLQkJCSAgIF9fZW50cnktPmRldiA9IGRldjsKKwkJCSAgIF9fZW50cnktPmRldiA9IGRldi0+cHJpbWFyeS0+aW5kZXg7CiAJCQkgICApLAogCi0JICAgIFRQX3ByaW50aygiZGV2PSVwIiwgX19lbnRyeS0+ZGV2KQorCSAgICBUUF9wcmludGsoImRldj0ldSIsIF9fZW50cnktPmRldikKICk7CiAKICNlbmRpZiAvKiBfSTkxNV9UUkFDRV9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jCmluZGV4IDkzZmY2YzAuLjNjMTQyNDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKQEAgLTMwOTUsNyArMzA5NSw2IEBACiAJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpibzsKIAlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXY7CiAJaW50IHBpcGUgPSBpbnRlbF9jcnRjLT5waXBlOwotCWludCBwbGFuZSA9IGludGVsX2NydGMtPnBsYW5lOwogCXVpbnQzMl90IGNvbnRyb2wgPSAocGlwZSA9PSAwKSA/IENVUkFDTlRSIDogQ1VSQkNOVFI7CiAJdWludDMyX3QgYmFzZSA9IChwaXBlID09IDApID8gQ1VSQUJBU0UgOiBDVVJCQkFTRTsKIAl1aW50MzJfdCB0ZW1wID0gSTkxNV9SRUFEKGNvbnRyb2wpOwpAQCAtMzE4Miw5ICszMTgxLDYgQEAKIAkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2UoaW50ZWxfY3J0Yy0+Y3Vyc29yX2JvKTsKIAl9CiAKLQlpZiAoKElTX0k5NjVHKGRldikgfHwgcGxhbmUgPT0gMCkpCi0JCWludGVsX3VwZGF0ZV9mYmMoY3J0YywgJmNydGMtPm1vZGUpOwotCiAJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CiAKIAlpbnRlbF9jcnRjLT5jdXJzb3JfYWRkciA9IGFkZHI7CkBAIC0zMjQ0LDYgKzMyNDAsMTYgQEAKIAlpbnRlbF9jcnRjLT5sdXRfYltyZWdub10gPSBibHVlID4+IDg7CiB9CiAKK3ZvaWQgaW50ZWxfY3J0Y19mYl9nYW1tYV9nZXQoc3RydWN0IGRybV9jcnRjICpjcnRjLCB1MTYgKnJlZCwgdTE2ICpncmVlbiwKKwkJCSAgICAgdTE2ICpibHVlLCBpbnQgcmVnbm8pCit7CisJc3RydWN0IGludGVsX2NydGMgKmludGVsX2NydGMgPSB0b19pbnRlbF9jcnRjKGNydGMpOworCisJKnJlZCA9IGludGVsX2NydGMtPmx1dF9yW3JlZ25vXSA8PCA4OworCSpncmVlbiA9IGludGVsX2NydGMtPmx1dF9nW3JlZ25vXSA8PCA4OworCSpibHVlID0gaW50ZWxfY3J0Yy0+bHV0X2JbcmVnbm9dIDw8IDg7Cit9CisKIHN0YXRpYyB2b2lkIGludGVsX2NydGNfZ2FtbWFfc2V0KHN0cnVjdCBkcm1fY3J0YyAqY3J0YywgdTE2ICpyZWQsIHUxNiAqZ3JlZW4sCiAJCQkJIHUxNiAqYmx1ZSwgdWludDMyX3Qgc2l6ZSkKIHsKQEAgLTM4MzUsNiArMzg0MSw3IEBACiAJLm1vZGVfc2V0X2Jhc2UgPSBpbnRlbF9waXBlX3NldF9iYXNlLAogCS5wcmVwYXJlID0gaW50ZWxfY3J0Y19wcmVwYXJlLAogCS5jb21taXQgPSBpbnRlbF9jcnRjX2NvbW1pdCwKKwkubG9hZF9sdXQgPSBpbnRlbF9jcnRjX2xvYWRfbHV0LAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fY3J0Y19mdW5jcyBpbnRlbF9jcnRjX2Z1bmNzID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaAppbmRleCA4YWE0YjdmLi5lZjYxZmU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaApAQCAtMTc1LDYgKzE3NSw4IEBACiBleHRlcm4gdm9pZCBpbnRlbGZiX3Jlc3RvcmUodm9pZCk7CiBleHRlcm4gdm9pZCBpbnRlbF9jcnRjX2ZiX2dhbW1hX3NldChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsIHUxNiByZWQsIHUxNiBncmVlbiwKIAkJCQkgICAgdTE2IGJsdWUsIGludCByZWdubyk7CitleHRlcm4gdm9pZCBpbnRlbF9jcnRjX2ZiX2dhbW1hX2dldChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsIHUxNiAqcmVkLCB1MTYgKmdyZWVuLAorCQkJCSAgICB1MTYgKmJsdWUsIGludCByZWdubyk7CiAKIGV4dGVybiBpbnQgaW50ZWxfZnJhbWVidWZmZXJfY3JlYXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAJCQkJICAgIHN0cnVjdCBkcm1fbW9kZV9mYl9jbWQgKm1vZGVfY21kLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZmIuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2ZiLmMKaW5kZXggN2JhNGEyMy4uMmIwZmU1NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZmIuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9mYi5jCkBAIC02MCwxMCArNjAsMTIgQEAKIAkuZmJfaW1hZ2VibGl0ID0gY2ZiX2ltYWdlYmxpdCwKIAkuZmJfcGFuX2Rpc3BsYXkgPSBkcm1fZmJfaGVscGVyX3Bhbl9kaXNwbGF5LAogCS5mYl9ibGFuayA9IGRybV9mYl9oZWxwZXJfYmxhbmssCisJLmZiX3NldGNtYXAgPSBkcm1fZmJfaGVscGVyX3NldGNtYXAsCiB9OwogCiBzdGF0aWMgc3RydWN0IGRybV9mYl9oZWxwZXJfZnVuY3MgaW50ZWxfZmJfaGVscGVyX2Z1bmNzID0gewogCS5nYW1tYV9zZXQgPSBpbnRlbF9jcnRjX2ZiX2dhbW1hX3NldCwKKwkuZ2FtbWFfZ2V0ID0gaW50ZWxfY3J0Y19mYl9nYW1tYV9nZXQsCiB9OwogCiAKQEAgLTExMCw2ICsxMTIsNyBAQAogc3RhdGljIGludCBpbnRlbGZiX2NyZWF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1aW50MzJfdCBmYl93aWR0aCwKIAkJCSAgdWludDMyX3QgZmJfaGVpZ2h0LCB1aW50MzJfdCBzdXJmYWNlX3dpZHRoLAogCQkJICB1aW50MzJfdCBzdXJmYWNlX2hlaWdodCwKKwkJCSAgdWludDMyX3Qgc3VyZmFjZV9kZXB0aCwgdWludDMyX3Qgc3VyZmFjZV9icHAsCiAJCQkgIHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKipmYl9wKQogewogCXN0cnVjdCBmYl9pbmZvICppbmZvOwpAQCAtMTIyLDEyICsxMjUsMTYgQEAKIAlzdHJ1Y3QgZGV2aWNlICpkZXZpY2UgPSAmZGV2LT5wZGV2LT5kZXY7CiAJaW50IHNpemUsIHJldCwgbW1pb19iYXIgPSBJU19JOVhYKGRldikgPyAwIDogMTsKIAorCS8qIHdlIGRvbid0IGRvIHBhY2tlZCAyNGJwcCAqLworCWlmIChzdXJmYWNlX2JwcCA9PSAyNCkKKwkJc3VyZmFjZV9icHAgPSAzMjsKKwogCW1vZGVfY21kLndpZHRoID0gc3VyZmFjZV93aWR0aDsKIAltb2RlX2NtZC5oZWlnaHQgPSBzdXJmYWNlX2hlaWdodDsKIAotCW1vZGVfY21kLmJwcCA9IDMyOworCW1vZGVfY21kLmJwcCA9IHN1cmZhY2VfYnBwOwogCW1vZGVfY21kLnBpdGNoID0gQUxJR04obW9kZV9jbWQud2lkdGggKiAoKG1vZGVfY21kLmJwcCArIDEpIC8gOCksIDY0KTsKLQltb2RlX2NtZC5kZXB0aCA9IDI0OworCW1vZGVfY21kLmRlcHRoID0gc3VyZmFjZV9kZXB0aDsKIAogCXNpemUgPSBtb2RlX2NtZC5waXRjaCAqIG1vZGVfY21kLmhlaWdodDsKIAlzaXplID0gQUxJR04oc2l6ZSwgUEFHRV9TSVpFKTsKQEAgLTIwNSw3ICsyMTIsNyBAQAogCiAvLwltZW1zZXQoaW5mby0+c2NyZWVuX2Jhc2UsIDAsIHNpemUpOwogCi0JZHJtX2ZiX2hlbHBlcl9maWxsX2ZpeChpbmZvLCBmYi0+cGl0Y2gpOworCWRybV9mYl9oZWxwZXJfZmlsbF9maXgoaW5mbywgZmItPnBpdGNoLCBmYi0+ZGVwdGgpOwogCWRybV9mYl9oZWxwZXJfZmlsbF92YXIoaW5mbywgZmIsIGZiX3dpZHRoLCBmYl9oZWlnaHQpOwogCiAJLyogRklYTUU6IHdlIHJlYWxseSBzaG91bGRuJ3QgZXhwb3NlIG1taW8gc3BhY2UgYXQgYWxsICovCkBAIC0yNDMsNyArMjUwLDcgQEAKIAlpbnQgcmV0OwogCiAJRFJNX0RFQlVHKCJcbiIpOwotCXJldCA9IGRybV9mYl9oZWxwZXJfc2luZ2xlX2ZiX3Byb2JlKGRldiwgaW50ZWxmYl9jcmVhdGUpOworCXJldCA9IGRybV9mYl9oZWxwZXJfc2luZ2xlX2ZiX3Byb2JlKGRldiwgMzIsIGludGVsZmJfY3JlYXRlKTsKIAlyZXR1cm4gcmV0OwogfQogRVhQT1JUX1NZTUJPTChpbnRlbGZiX3Byb2JlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2hkbWkuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2hkbWkuYwppbmRleCBmYTMwNGUxLi42NjNhYjZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9oZG1pLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfaGRtaS5jCkBAIC0yMjMsNyArMjIzLDcgQEAKIAogCWNvbm5lY3RvciA9ICZpbnRlbF9vdXRwdXQtPmJhc2U7CiAJZHJtX2Nvbm5lY3Rvcl9pbml0KGRldiwgY29ubmVjdG9yLCAmaW50ZWxfaGRtaV9jb25uZWN0b3JfZnVuY3MsCi0JCQkgICBEUk1fTU9ERV9DT05ORUNUT1JfRFZJRCk7CisJCQkgICBEUk1fTU9ERV9DT05ORUNUT1JfSERNSUEpOwogCWRybV9jb25uZWN0b3JfaGVscGVyX2FkZChjb25uZWN0b3IsICZpbnRlbF9oZG1pX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MpOwogCiAJaW50ZWxfb3V0cHV0LT50eXBlID0gSU5URUxfT1VUUFVUX0hETUk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9sdmRzLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9sdmRzLmMKaW5kZXggOThhZTNkNy4uODA4YmJlNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHZkcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2x2ZHMuYwpAQCAtNjU2LDYgKzY1NiwxNSBAQAogCXJldHVybiAwOwogfQogCisvKgorICogTGlkIGV2ZW50cy4gTm90ZSB0aGUgdXNlIG9mICdtb2Rlc2V0X29uX2xpZCc6CisgKiAgLSB3ZSBzZXQgaXQgb24gbGlkIGNsb3NlLCBhbmQgcmVzZXQgaXQgb24gb3BlbgorICogIC0gd2UgdXNlIGl0IGFzIGEgIm9ubHkgb25jZSIgYml0IChpZSB3ZSBpZ25vcmUKKyAqICAgIGR1cGxpY2F0ZSBldmVudHMgd2hlcmUgaXQgd2FzIGFscmVhZHkgcHJvcGVybHkKKyAqICAgIHNldC9yZXNldCkKKyAqICAtIHRoZSBzdXNwZW5kL3Jlc3VtZSBwYXRocyB3aWxsIGFsc28gc2V0IGl0IHRvCisgKiAgICB6ZXJvLCBzaW5jZSB0aGV5IHJlc3RvcmUgdGhlIG1vZGUgKCJsaWQgb3BlbiIpLgorICovCiBzdGF0aWMgaW50IGludGVsX2xpZF9ub3RpZnkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgbG9uZyB2YWwsCiAJCQkgICAgdm9pZCAqdW51c2VkKQogewpAQCAtNjYzLDEzICs2NzIsMTkgQEAKIAkJY29udGFpbmVyX29mKG5iLCBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSwgbGlkX25vdGlmaWVyKTsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZGV2X3ByaXYtPmRldjsKIAotCWlmIChhY3BpX2xpZF9vcGVuKCkgJiYgIWRldl9wcml2LT5zdXNwZW5kZWQpIHsKLQkJbXV0ZXhfbG9jaygmZGV2LT5tb2RlX2NvbmZpZy5tdXRleCk7Ci0JCWRybV9oZWxwZXJfcmVzdW1lX2ZvcmNlX21vZGUoZGV2KTsKLQkJbXV0ZXhfdW5sb2NrKCZkZXYtPm1vZGVfY29uZmlnLm11dGV4KTsKKwlpZiAoIWFjcGlfbGlkX29wZW4oKSkgeworCQlkZXZfcHJpdi0+bW9kZXNldF9vbl9saWQgPSAxOworCQlyZXR1cm4gTk9USUZZX09LOwogCX0KIAotCWRybV9zeXNmc19ob3RwbHVnX2V2ZW50KGRldl9wcml2LT5kZXYpOworCWlmICghZGV2X3ByaXYtPm1vZGVzZXRfb25fbGlkKQorCQlyZXR1cm4gTk9USUZZX09LOworCisJZGV2X3ByaXYtPm1vZGVzZXRfb25fbGlkID0gMDsKKworCW11dGV4X2xvY2soJmRldi0+bW9kZV9jb25maWcubXV0ZXgpOworCWRybV9oZWxwZXJfcmVzdW1lX2ZvcmNlX21vZGUoZGV2KTsKKwltdXRleF91bmxvY2soJmRldi0+bW9kZV9jb25maWcubXV0ZXgpOwogCiAJcmV0dXJuIE5PVElGWV9PSzsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3R2LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF90di5jCmluZGV4IGM2NGVhYjQuLjljYTkxNzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3R2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfdHYuYwpAQCAtMTA4Miw3ICsxMDgyLDggQEAKIAljb25zdCBzdHJ1Y3QgdHZfbW9kZSAqdHZfbW9kZSA9IGludGVsX3R2X21vZGVfZmluZChpbnRlbF9vdXRwdXQpOwogCiAJLyogRW5zdXJlIFRWIHJlZnJlc2ggaXMgY2xvc2UgdG8gZGVzaXJlZCByZWZyZXNoICovCi0JaWYgKHR2X21vZGUgJiYgYWJzKHR2X21vZGUtPnJlZnJlc2ggLSBkcm1fbW9kZV92cmVmcmVzaChtb2RlKSkgPCAxMCkKKwlpZiAodHZfbW9kZSAmJiBhYnModHZfbW9kZS0+cmVmcmVzaCAtIGRybV9tb2RlX3ZyZWZyZXNoKG1vZGUpICogMTAwMCkKKwkJCQk8IDEwMDApCiAJCXJldHVybiBNT0RFX09LOwogCXJldHVybiBNT0RFX0NMT0NLX1JBTkdFOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi8uZ2l0aWdub3JlIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwM2ViM2EKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uLy5naXRpZ25vcmUKQEAgLTAsMCArMSwzIEBACitta3JlZ3RhYmxlCisqX3JlZ19zYWZlLmgKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9hdG9tYmlvc19jcnRjLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2F0b21iaW9zX2NydGMuYwppbmRleCA2YTAxNTkyLi4xNGZhOTcwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2F0b21iaW9zX2NydGMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2F0b21iaW9zX2NydGMuYwpAQCAtNzMzLDYgKzczMyw3IEBACiAJLm1vZGVfc2V0X2Jhc2UgPSBhdG9tYmlvc19jcnRjX3NldF9iYXNlLAogCS5wcmVwYXJlID0gYXRvbWJpb3NfY3J0Y19wcmVwYXJlLAogCS5jb21taXQgPSBhdG9tYmlvc19jcnRjX2NvbW1pdCwKKwkubG9hZF9sdXQgPSByYWRlb25fY3J0Y19sb2FkX2x1dCwKIH07CiAKIHZvaWQgcmFkZW9uX2F0b21iaW9zX2luaXRfY3J0YyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9hdml2b2QuaCBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXZpdm9kLmgKaW5kZXggZTJiOTJjNC4uZDRlNmU2ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9hdml2b2QuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2F2aXZvZC5oCkBAIC01NywxMyArNTcsNCBAQAogI2RlZmluZQlWR0FfUkVOREVSX0NPTlRST0wJCQkJMHgwMzAwCiAjZGVmaW5lCQlWR0FfVlNUQVRVU19DTlRMX01BU0sJCQkJMHgwMDAzMDAwMAogCi0vKiBBVklWTyBkaXNhYmxlIFZHQSByZW5kZXJpbmcgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCByYWRlb25fYXZpdm9fdmdhX3JlbmRlcl9kaXNhYmxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQotewotCXUzMiB2Z2FfcmVuZGVyOwotCXZnYV9yZW5kZXIgPSBSUkVHMzIoVkdBX1JFTkRFUl9DT05UUk9MKTsKLQl2Z2FfcmVuZGVyICY9IH5WR0FfVlNUQVRVU19DTlRMX01BU0s7Ci0JV1JFRzMyKFZHQV9SRU5ERVJfQ09OVFJPTCwgdmdhX3JlbmRlcik7Ci19Ci0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMTAwLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IxMDAuYwppbmRleCBiZTUxYzVmLi4xNjEwOTRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IxMDAuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IxMDAuYwpAQCAtMzIsNiArMzIsOSBAQAogI2luY2x1ZGUgInJhZGVvbl9yZWcuaCIKICNpbmNsdWRlICJyYWRlb24uaCIKICNpbmNsdWRlICJyMTAwZC5oIgorI2luY2x1ZGUgInJzMTAwZC5oIgorI2luY2x1ZGUgInJ2MjAwZC5oIgorI2luY2x1ZGUgInJ2MjUwZC5oIgogCiAjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KQEAgLTYwLDE4ICs2Myw3IEBACiAKIC8qIFRoaXMgZmlsZXMgZ2F0aGVyIGZ1bmN0aW9ucyBzcGVjaWZpY3MgdG86CiAgKiByMTAwLHJ2MTAwLHJzMTAwLHJ2MjAwLHJzMjAwLHIyMDAscnYyNTAscnMzMDAscnYyODAKLSAqCi0gKiBTb21lIG9mIHRoZXNlIGZ1bmN0aW9ucyBtaWdodCBiZSB1c2VkIGJ5IG5ld2VyIEFTSUNzLgogICovCi1pbnQgcjIwMF9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLXZvaWQgcjEwMF9oZHBfcmVzZXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotdm9pZCByMTAwX2dwdV9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLWludCByMTAwX2d1aV93YWl0X2Zvcl9pZGxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLWludCByMTAwX21jX3dhaXRfZm9yX2lkbGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotdm9pZCByMTAwX2dwdV93YWl0X2Zvcl92c3luYyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci12b2lkIHIxMDBfZ3B1X3dhaXRfZm9yX3ZzeW5jMihzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci1pbnQgcjEwMF9kZWJ1Z2ZzX21jX2luZm9faW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci0KIAogLyoKICAqIFBDSSBHQVJUCkBAIC0xNTIsMTM2ICsxNDQsNiBAQAogCXJhZGVvbl9nYXJ0X2ZpbmkocmRldik7CiB9CiAKLQotLyoKLSAqIE1DCi0gKi8KLXZvaWQgcjEwMF9tY19kaXNhYmxlX2NsaWVudHMoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCi17Ci0JdWludDMyX3Qgb3YwX3NjYWxlX2NudGwsIGNydGNfZXh0X2NudGwsIGNydGNfZ2VuX2NudGwsIGNydGMyX2dlbl9jbnRsOwotCi0JLyogRklYTUU6IGlzIHRoaXMgZnVuY3Rpb24gY29ycmVjdCBmb3IgcnMxMDAscnMyMDAscnMzMDAgPyAqLwotCWlmIChyMTAwX2d1aV93YWl0X2Zvcl9pZGxlKHJkZXYpKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIkZhaWxlZCB0byB3YWl0IEdVSSBpZGxlIHdoaWxlICIKLQkJICAgICAgICJwcm9ncmFtbWluZyBwaXBlcy4gQmFkIHRoaW5ncyBtaWdodCBoYXBwZW4uXG4iKTsKLQl9Ci0KLQkvKiBzdG9wIGRpc3BsYXkgYW5kIG1lbW9yeSBhY2Nlc3MgKi8KLQlvdjBfc2NhbGVfY250bCA9IFJSRUczMihSQURFT05fT1YwX1NDQUxFX0NOVEwpOwotCVdSRUczMihSQURFT05fT1YwX1NDQUxFX0NOVEwsIG92MF9zY2FsZV9jbnRsICYgflJBREVPTl9TQ0FMRVJfRU5BQkxFKTsKLQljcnRjX2V4dF9jbnRsID0gUlJFRzMyKFJBREVPTl9DUlRDX0VYVF9DTlRMKTsKLQlXUkVHMzIoUkFERU9OX0NSVENfRVhUX0NOVEwsIGNydGNfZXh0X2NudGwgfCBSQURFT05fQ1JUQ19ESVNQTEFZX0RJUyk7Ci0JY3J0Y19nZW5fY250bCA9IFJSRUczMihSQURFT05fQ1JUQ19HRU5fQ05UTCk7Ci0KLQlyMTAwX2dwdV93YWl0X2Zvcl92c3luYyhyZGV2KTsKLQotCVdSRUczMihSQURFT05fQ1JUQ19HRU5fQ05UTCwKLQkgICAgICAgKGNydGNfZ2VuX2NudGwgJiB+KFJBREVPTl9DUlRDX0NVUl9FTiB8IFJBREVPTl9DUlRDX0lDT05fRU4pKSB8Ci0JICAgICAgIFJBREVPTl9DUlRDX0RJU1BfUkVRX0VOX0IgfCBSQURFT05fQ1JUQ19FWFRfRElTUF9FTik7Ci0KLQlpZiAoIShyZGV2LT5mbGFncyAmIFJBREVPTl9TSU5HTEVfQ1JUQykpIHsKLQkJY3J0YzJfZ2VuX2NudGwgPSBSUkVHMzIoUkFERU9OX0NSVEMyX0dFTl9DTlRMKTsKLQotCQlyMTAwX2dwdV93YWl0X2Zvcl92c3luYzIocmRldik7Ci0JCVdSRUczMihSQURFT05fQ1JUQzJfR0VOX0NOVEwsCi0JCSAgICAgICAoY3J0YzJfZ2VuX2NudGwgJgotCQkgICAgICAgIH4oUkFERU9OX0NSVEMyX0NVUl9FTiB8IFJBREVPTl9DUlRDMl9JQ09OX0VOKSkgfAotCQkgICAgICAgUkFERU9OX0NSVEMyX0RJU1BfUkVRX0VOX0IpOwotCX0KLQotCXVkZWxheSg1MDApOwotfQotCi12b2lkIHIxMDBfbWNfc2V0dXAoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCi17Ci0JdWludDMyX3QgdG1wOwotCWludCByOwotCi0JciA9IHIxMDBfZGVidWdmc19tY19pbmZvX2luaXQocmRldik7Ci0JaWYgKHIpIHsKLQkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gcmVnaXN0ZXIgZGVidWdmcyBmaWxlIGZvciBSMTAwIE1DICFcbiIpOwotCX0KLQkvKiBXcml0ZSBWUkFNIHNpemUgaW4gY2FzZSB3ZSBhcmUgbGltaXRpbmcgaXQgKi8KLQlXUkVHMzIoUkFERU9OX0NPTkZJR19NRU1TSVpFLCByZGV2LT5tYy5yZWFsX3ZyYW1fc2l6ZSk7Ci0JLyogTm92ZWxsIGJ1ZyAyMDQ4ODIgZm9yIFJONTAvTTYvTTcgd2l0aCA4LzE2LzMyTUIgVlJBTSwKLQkgKiBpZiB0aGUgYXBlcnR1cmUgaXMgNjRNQiBidXQgd2UgaGF2ZSAzMk1CIFZSQU0KLQkgKiB3ZSByZXBvcnQgb25seSAzMk1CIFZSQU0gYnV0IHdlIGhhdmUgdG8gc2V0IE1DX0ZCX0xPQ0FUSU9OCi0JICogdG8gNjRNQiwgb3RoZXJ3aXNlIHRoZSBncHUgYWNjaWRlbnRpYWxseSBkaWVzICovCi0JdG1wID0gcmRldi0+bWMudnJhbV9sb2NhdGlvbiArIHJkZXYtPm1jLm1jX3ZyYW1fc2l6ZSAtIDE7Ci0JdG1wID0gUkVHX1NFVChSQURFT05fTUNfRkJfVE9QLCB0bXAgPj4gMTYpOwotCXRtcCB8PSBSRUdfU0VUKFJBREVPTl9NQ19GQl9TVEFSVCwgcmRldi0+bWMudnJhbV9sb2NhdGlvbiA+PiAxNik7Ci0JV1JFRzMyKFJBREVPTl9NQ19GQl9MT0NBVElPTiwgdG1wKTsKLQotCS8qIEVuYWJsZSBidXMgbWFzdGVyaW5nICovCi0JdG1wID0gUlJFRzMyKFJBREVPTl9CVVNfQ05UTCkgJiB+UkFERU9OX0JVU19NQVNURVJfRElTOwotCVdSRUczMihSQURFT05fQlVTX0NOVEwsIHRtcCk7Ci0KLQlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfQUdQKSB7Ci0JCXRtcCA9IHJkZXYtPm1jLmd0dF9sb2NhdGlvbiArIHJkZXYtPm1jLmd0dF9zaXplIC0gMTsKLQkJdG1wID0gUkVHX1NFVChSQURFT05fTUNfQUdQX1RPUCwgdG1wID4+IDE2KTsKLQkJdG1wIHw9IFJFR19TRVQoUkFERU9OX01DX0FHUF9TVEFSVCwgcmRldi0+bWMuZ3R0X2xvY2F0aW9uID4+IDE2KTsKLQkJV1JFRzMyKFJBREVPTl9NQ19BR1BfTE9DQVRJT04sIHRtcCk7Ci0JCVdSRUczMihSQURFT05fQUdQX0JBU0UsIHJkZXYtPm1jLmFncF9iYXNlKTsKLQl9IGVsc2UgewotCQlXUkVHMzIoUkFERU9OX01DX0FHUF9MT0NBVElPTiwgMHgwRkZGRkZGRik7Ci0JCVdSRUczMihSQURFT05fQUdQX0JBU0UsIDApOwotCX0KLQotCXRtcCA9IFJSRUczMihSQURFT05fSE9TVF9QQVRIX0NOVEwpICYgUkFERU9OX0hEUF9BUEVSX0NOVEw7Ci0JdG1wIHw9ICg3IDw8IDI4KTsKLQlXUkVHMzIoUkFERU9OX0hPU1RfUEFUSF9DTlRMLCB0bXAgfCBSQURFT05fSERQX1NPRlRfUkVTRVQgfCBSQURFT05fSERQX1JFQURfQlVGRkVSX0lOVkFMSURBVEUpOwotCSh2b2lkKVJSRUczMihSQURFT05fSE9TVF9QQVRIX0NOVEwpOwotCVdSRUczMihSQURFT05fSE9TVF9QQVRIX0NOVEwsIHRtcCk7Ci0JKHZvaWQpUlJFRzMyKFJBREVPTl9IT1NUX1BBVEhfQ05UTCk7Ci19Ci0KLWludCByMTAwX21jX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCi17Ci0JaW50IHI7Ci0KLQlpZiAocjEwMF9kZWJ1Z2ZzX3JiYm1faW5pdChyZGV2KSkgewotCQlEUk1fRVJST1IoIkZhaWxlZCB0byByZWdpc3RlciBkZWJ1Z2ZzIGZpbGUgZm9yIFJCQk0gIVxuIik7Ci0JfQotCi0JcjEwMF9ncHVfaW5pdChyZGV2KTsKLQkvKiBEaXNhYmxlIGdhcnQgd2hpY2ggYWxzbyBkaXNhYmxlIG91dCBvZiBnYXJ0IGFjY2VzcyAqLwotCXIxMDBfcGNpX2dhcnRfZGlzYWJsZShyZGV2KTsKLQotCS8qIFNldHVwIEdQVSBtZW1vcnkgc3BhY2UgKi8KLQlyZGV2LT5tYy5ndHRfbG9jYXRpb24gPSAweEZGRkZGRkZGVUw7Ci0JaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX0FHUCkgewotCQlyID0gcmFkZW9uX2FncF9pbml0KHJkZXYpOwotCQlpZiAocikgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiW2RybV0gRGlzYWJsaW5nIEFHUFxuIik7Ci0JCQlyZGV2LT5mbGFncyAmPSB+UkFERU9OX0lTX0FHUDsKLQkJCXJkZXYtPm1jLmd0dF9zaXplID0gcmFkZW9uX2dhcnRfc2l6ZSAqIDEwMjQgKiAxMDI0OwotCQl9IGVsc2UgewotCQkJcmRldi0+bWMuZ3R0X2xvY2F0aW9uID0gcmRldi0+bWMuYWdwX2Jhc2U7Ci0JCX0KLQl9Ci0JciA9IHJhZGVvbl9tY19zZXR1cChyZGV2KTsKLQlpZiAocikgewotCQlyZXR1cm4gcjsKLQl9Ci0KLQlyMTAwX21jX2Rpc2FibGVfY2xpZW50cyhyZGV2KTsKLQlpZiAocjEwMF9tY193YWl0X2Zvcl9pZGxlKHJkZXYpKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIkZhaWxlZCB0byB3YWl0IE1DIGlkbGUgd2hpbGUgIgotCQkgICAgICAgInByb2dyYW1taW5nIHBpcGVzLiBCYWQgdGhpbmdzIG1pZ2h0IGhhcHBlbi5cbiIpOwotCX0KLQotCXIxMDBfbWNfc2V0dXAocmRldik7Ci0JcmV0dXJuIDA7Ci19Ci0KLXZvaWQgcjEwMF9tY19maW5pKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQotewotfQotCi0KLS8qCi0gKiBJbnRlcnJ1cHRzCi0gKi8KIGludCByMTAwX2lycV9zZXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7CiAJdWludDMyX3QgdG1wID0gMDsKQEAgLTM1OCwxMCArMjIwLDYgQEAKIAkJcmV0dXJuIFJSRUczMihSQURFT05fQ1JUQzJfQ1JOVF9GUkFNRSk7CiB9CiAKLQotLyoKLSAqIEZlbmNlIGVtaXNzaW9uCi0gKi8KIHZvaWQgcjEwMF9mZW5jZV9yaW5nX2VtaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsCiAJCQkgIHN0cnVjdCByYWRlb25fZmVuY2UgKmZlbmNlKQogewpAQCAtMzc3LDEwICsyMzUsNiBAQAogCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIFJBREVPTl9TV19JTlRfRklSRSk7CiB9CiAKLQotLyoKLSAqIFdyaXRlYmFjawotICovCiBpbnQgcjEwMF93Yl9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewogCWludCByOwpAQCAtNTA0LDEwICszNTgsNiBAQAogCXJldHVybiByOwogfQogCi0KLS8qCi0gKiBDUAotICovCiBzdGF0aWMgaW50IHIxMDBfY3Bfd2FpdF9mb3JfaWRsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKIAl1bnNpZ25lZCBpOwpAQCAtNjEyLDYgKzQ2Miw3IEBACiAJfQogCXJldHVybiBlcnI7CiB9CisKIHN0YXRpYyB2b2lkIHIxMDBfY3BfbG9hZF9taWNyb2NvZGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7CiAJY29uc3QgX19iZTMyICpmd19kYXRhOwpAQCAtODYzLDEzICs3MTQsMTEgQEAKIHZvaWQgcjEwMF9jc19kdW1wX3BhY2tldChzdHJ1Y3QgcmFkZW9uX2NzX3BhcnNlciAqcCwKIAkJCSBzdHJ1Y3QgcmFkZW9uX2NzX3BhY2tldCAqcGt0KQogewotCXN0cnVjdCByYWRlb25fY3NfY2h1bmsgKmliX2NodW5rOwogCXZvbGF0aWxlIHVpbnQzMl90ICppYjsKIAl1bnNpZ25lZCBpOwogCXVuc2lnbmVkIGlkeDsKIAogCWliID0gcC0+aWItPnB0cjsKLQlpYl9jaHVuayA9ICZwLT5jaHVua3NbcC0+Y2h1bmtfaWJfaWR4XTsKIAlpZHggPSBwa3QtPmlkeDsKIAlmb3IgKGkgPSAwOyBpIDw9IChwa3QtPmNvdW50ICsgMSk7IGkrKywgaWR4KyspIHsKIAkJRFJNX0lORk8oImliWyVkXT0weCUwOFhcbiIsIGlkeCwgaWJbaWR4XSk7CkBAIC04OTYsNyArNzQ1LDcgQEAKIAkJCSAgaWR4LCBpYl9jaHVuay0+bGVuZ3RoX2R3KTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCWhlYWRlciA9IGliX2NodW5rLT5rZGF0YVtpZHhdOworCWhlYWRlciA9IHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaWR4KTsKIAlwa3QtPmlkeCA9IGlkeDsKIAlwa3QtPnR5cGUgPSBDUF9QQUNLRVRfR0VUX1RZUEUoaGVhZGVyKTsKIAlwa3QtPmNvdW50ID0gQ1BfUEFDS0VUX0dFVF9DT1VOVChoZWFkZXIpOwpAQCAtOTM5LDcgKzc4OCw2IEBACiAgKi8KIGludCByMTAwX2NzX3BhY2tldF9wYXJzZV92bGluZShzdHJ1Y3QgcmFkZW9uX2NzX3BhcnNlciAqcCkKIHsKLQlzdHJ1Y3QgcmFkZW9uX2NzX2NodW5rICppYl9jaHVuazsKIAlzdHJ1Y3QgZHJtX21vZGVfb2JqZWN0ICpvYmo7CiAJc3RydWN0IGRybV9jcnRjICpjcnRjOwogCXN0cnVjdCByYWRlb25fY3J0YyAqcmFkZW9uX2NydGM7CkBAIC05NDcsOCArNzk1LDkgQEAKIAlpbnQgY3J0Y19pZDsKIAlpbnQgcjsKIAl1aW50MzJfdCBoZWFkZXIsIGhfaWR4LCByZWc7CisJdm9sYXRpbGUgdWludDMyX3QgKmliOwogCi0JaWJfY2h1bmsgPSAmcC0+Y2h1bmtzW3AtPmNodW5rX2liX2lkeF07CisJaWIgPSBwLT5pYi0+cHRyOwogCiAJLyogcGFyc2UgdGhlIHdhaXQgdW50aWwgKi8KIAlyID0gcjEwMF9jc19wYWNrZXRfcGFyc2UocCwgJndhaXRyZWxvYywgcC0+aWR4KTsKQEAgLTk2MywyNCArODEyLDI0IEBACiAJCXJldHVybiByOwogCX0KIAotCWlmIChpYl9jaHVuay0+a2RhdGFbd2FpdHJlbG9jLmlkeCArIDFdICE9IFJBREVPTl9XQUlUX0NSVENfVkxJTkUpIHsKKwlpZiAocmFkZW9uX2dldF9pYl92YWx1ZShwLCB3YWl0cmVsb2MuaWR4ICsgMSkgIT0gUkFERU9OX1dBSVRfQ1JUQ19WTElORSkgewogCQlEUk1fRVJST1IoInZsaW5lIHdhaXQgaGFkIGlsbGVnYWwgd2FpdCB1bnRpbFxuIik7CiAJCXIgPSAtRUlOVkFMOwogCQlyZXR1cm4gcjsKIAl9CiAKIAkvKiBqdW1wIG92ZXIgdGhlIE5PUCAqLwotCXIgPSByMTAwX2NzX3BhY2tldF9wYXJzZShwLCAmcDNyZWxvYywgcC0+aWR4KTsKKwlyID0gcjEwMF9jc19wYWNrZXRfcGFyc2UocCwgJnAzcmVsb2MsIHAtPmlkeCArIHdhaXRyZWxvYy5jb3VudCArIDIpOwogCWlmIChyKQogCQlyZXR1cm4gcjsKIAogCWhfaWR4ID0gcC0+aWR4IC0gMjsKLQlwLT5pZHggKz0gd2FpdHJlbG9jLmNvdW50OwotCXAtPmlkeCArPSBwM3JlbG9jLmNvdW50OworCXAtPmlkeCArPSB3YWl0cmVsb2MuY291bnQgKyAyOworCXAtPmlkeCArPSBwM3JlbG9jLmNvdW50ICsgMjsKIAotCWhlYWRlciA9IGliX2NodW5rLT5rZGF0YVtoX2lkeF07Ci0JY3J0Y19pZCA9IGliX2NodW5rLT5rZGF0YVtoX2lkeCArIDVdOwotCXJlZyA9IGliX2NodW5rLT5rZGF0YVtoX2lkeF0gPj4gMjsKKwloZWFkZXIgPSByYWRlb25fZ2V0X2liX3ZhbHVlKHAsIGhfaWR4KTsKKwljcnRjX2lkID0gcmFkZW9uX2dldF9pYl92YWx1ZShwLCBoX2lkeCArIDUpOworCXJlZyA9IENQX1BBQ0tFVDBfR0VUX1JFRyhoZWFkZXIpOwogCW11dGV4X2xvY2soJnAtPnJkZXYtPmRkZXYtPm1vZGVfY29uZmlnLm11dGV4KTsKIAlvYmogPSBkcm1fbW9kZV9vYmplY3RfZmluZChwLT5yZGV2LT5kZGV2LCBjcnRjX2lkLCBEUk1fTU9ERV9PQkpFQ1RfQ1JUQyk7CiAJaWYgKCFvYmopIHsKQEAgLTk5NCwxNiArODQzLDE2IEBACiAKIAlpZiAoIWNydGMtPmVuYWJsZWQpIHsKIAkJLyogaWYgdGhlIENSVEMgaXNuJ3QgZW5hYmxlZCAtIHdlIG5lZWQgdG8gbm9wIG91dCB0aGUgd2FpdCB1bnRpbCAqLwotCQlpYl9jaHVuay0+a2RhdGFbaF9pZHggKyAyXSA9IFBBQ0tFVDIoMCk7Ci0JCWliX2NodW5rLT5rZGF0YVtoX2lkeCArIDNdID0gUEFDS0VUMigwKTsKKwkJaWJbaF9pZHggKyAyXSA9IFBBQ0tFVDIoMCk7CisJCWliW2hfaWR4ICsgM10gPSBQQUNLRVQyKDApOwogCX0gZWxzZSBpZiAoY3J0Y19pZCA9PSAxKSB7CiAJCXN3aXRjaCAocmVnKSB7CiAJCWNhc2UgQVZJVk9fRDFNT0RFX1ZMSU5FX1NUQVJUX0VORDoKLQkJCWhlYWRlciAmPSBSMzAwX0NQX1BBQ0tFVDBfUkVHX01BU0s7CisJCQloZWFkZXIgJj0gflIzMDBfQ1BfUEFDS0VUMF9SRUdfTUFTSzsKIAkJCWhlYWRlciB8PSBBVklWT19EMk1PREVfVkxJTkVfU1RBUlRfRU5EID4+IDI7CiAJCQlicmVhazsKIAkJY2FzZSBSQURFT05fQ1JUQ19HVUlfVFJJR19WTElORToKLQkJCWhlYWRlciAmPSBSMzAwX0NQX1BBQ0tFVDBfUkVHX01BU0s7CisJCQloZWFkZXIgJj0gflIzMDBfQ1BfUEFDS0VUMF9SRUdfTUFTSzsKIAkJCWhlYWRlciB8PSBSQURFT05fQ1JUQzJfR1VJX1RSSUdfVkxJTkUgPj4gMjsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgpAQCAtMTAxMSw4ICs4NjAsOCBAQAogCQkJciA9IC1FSU5WQUw7CiAJCQlnb3RvIG91dDsKIAkJfQotCQlpYl9jaHVuay0+a2RhdGFbaF9pZHhdID0gaGVhZGVyOwotCQlpYl9jaHVuay0+a2RhdGFbaF9pZHggKyAzXSB8PSBSQURFT05fRU5HX0RJU1BMQVlfU0VMRUNUX0NSVEMxOworCQlpYltoX2lkeF0gPSBoZWFkZXI7CisJCWliW2hfaWR4ICsgM10gfD0gUkFERU9OX0VOR19ESVNQTEFZX1NFTEVDVF9DUlRDMTsKIAl9CiBvdXQ6CiAJbXV0ZXhfdW5sb2NrKCZwLT5yZGV2LT5kZGV2LT5tb2RlX2NvbmZpZy5tdXRleCk7CkBAIC0xMDMzLDcgKzg4Miw2IEBACiBpbnQgcjEwMF9jc19wYWNrZXRfbmV4dF9yZWxvYyhzdHJ1Y3QgcmFkZW9uX2NzX3BhcnNlciAqcCwKIAkJCSAgICAgIHN0cnVjdCByYWRlb25fY3NfcmVsb2MgKipjc19yZWxvYykKIHsKLQlzdHJ1Y3QgcmFkZW9uX2NzX2NodW5rICppYl9jaHVuazsKIAlzdHJ1Y3QgcmFkZW9uX2NzX2NodW5rICpyZWxvY3NfY2h1bms7CiAJc3RydWN0IHJhZGVvbl9jc19wYWNrZXQgcDNyZWxvYzsKIAl1bnNpZ25lZCBpZHg7CkBAIC0xMDQ0LDcgKzg5Miw2IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAkqY3NfcmVsb2MgPSBOVUxMOwotCWliX2NodW5rID0gJnAtPmNodW5rc1twLT5jaHVua19pYl9pZHhdOwogCXJlbG9jc19jaHVuayA9ICZwLT5jaHVua3NbcC0+Y2h1bmtfcmVsb2NzX2lkeF07CiAJciA9IHIxMDBfY3NfcGFja2V0X3BhcnNlKHAsICZwM3JlbG9jLCBwLT5pZHgpOwogCWlmIChyKSB7CkBAIC0xMDU3LDcgKzkwNCw3IEBACiAJCXIxMDBfY3NfZHVtcF9wYWNrZXQocCwgJnAzcmVsb2MpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0JaWR4ID0gaWJfY2h1bmstPmtkYXRhW3AzcmVsb2MuaWR4ICsgMV07CisJaWR4ID0gcmFkZW9uX2dldF9pYl92YWx1ZShwLCBwM3JlbG9jLmlkeCArIDEpOwogCWlmIChpZHggPj0gcmVsb2NzX2NodW5rLT5sZW5ndGhfZHcpIHsKIAkJRFJNX0VSUk9SKCJSZWxvY3MgYXQgJWQgYWZ0ZXIgcmVsb2NhdGlvbnMgY2h1bmsgZW5kICVkICFcbiIsCiAJCQkgIGlkeCwgcmVsb2NzX2NodW5rLT5sZW5ndGhfZHcpOwpAQCAtMTEyNiw3ICs5NzMsNiBAQAogCQkJICAgICAgc3RydWN0IHJhZGVvbl9jc19wYWNrZXQgKnBrdCwKIAkJCSAgICAgIHVuc2lnbmVkIGlkeCwgdW5zaWduZWQgcmVnKQogewotCXN0cnVjdCByYWRlb25fY3NfY2h1bmsgKmliX2NodW5rOwogCXN0cnVjdCByYWRlb25fY3NfcmVsb2MgKnJlbG9jOwogCXN0cnVjdCByMTAwX2NzX3RyYWNrICp0cmFjazsKIAl2b2xhdGlsZSB1aW50MzJfdCAqaWI7CkBAIC0xMTM0LDExICs5ODAsMTMgQEAKIAlpbnQgcjsKIAlpbnQgaSwgZmFjZTsKIAl1MzIgdGlsZV9mbGFncyA9IDA7CisJdTMyIGlkeF92YWx1ZTsKIAogCWliID0gcC0+aWItPnB0cjsKLQlpYl9jaHVuayA9ICZwLT5jaHVua3NbcC0+Y2h1bmtfaWJfaWR4XTsKIAl0cmFjayA9IChzdHJ1Y3QgcjEwMF9jc190cmFjayAqKXAtPnRyYWNrOwogCisJaWR4X3ZhbHVlID0gcmFkZW9uX2dldF9pYl92YWx1ZShwLCBpZHgpOworCiAJc3dpdGNoIChyZWcpIHsKIAljYXNlIFJBREVPTl9DUlRDX0dVSV9UUklHX1ZMSU5FOgogCQlyID0gcjEwMF9jc19wYWNrZXRfcGFyc2VfdmxpbmUocCk7CkBAIC0xMTY2LDggKzEwMTQsOCBAQAogCQkJcmV0dXJuIHI7CiAJCX0KIAkJdHJhY2stPnpiLnJvYmogPSByZWxvYy0+cm9iajsKLQkJdHJhY2stPnpiLm9mZnNldCA9IGliX2NodW5rLT5rZGF0YVtpZHhdOwotCQlpYltpZHhdID0gaWJfY2h1bmstPmtkYXRhW2lkeF0gKyAoKHUzMilyZWxvYy0+bG9iai5ncHVfb2Zmc2V0KTsKKwkJdHJhY2stPnpiLm9mZnNldCA9IGlkeF92YWx1ZTsKKwkJaWJbaWR4XSA9IGlkeF92YWx1ZSArICgodTMyKXJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpOwogCQlicmVhazsKIAljYXNlIFJBREVPTl9SQjNEX0NPTE9ST0ZGU0VUOgogCQlyID0gcjEwMF9jc19wYWNrZXRfbmV4dF9yZWxvYyhwLCAmcmVsb2MpOwpAQCAtMTE3OCw4ICsxMDI2LDggQEAKIAkJCXJldHVybiByOwogCQl9CiAJCXRyYWNrLT5jYlswXS5yb2JqID0gcmVsb2MtPnJvYmo7Ci0JCXRyYWNrLT5jYlswXS5vZmZzZXQgPSBpYl9jaHVuay0+a2RhdGFbaWR4XTsKLQkJaWJbaWR4XSA9IGliX2NodW5rLT5rZGF0YVtpZHhdICsgKCh1MzIpcmVsb2MtPmxvYmouZ3B1X29mZnNldCk7CisJCXRyYWNrLT5jYlswXS5vZmZzZXQgPSBpZHhfdmFsdWU7CisJCWliW2lkeF0gPSBpZHhfdmFsdWUgKyAoKHUzMilyZWxvYy0+bG9iai5ncHVfb2Zmc2V0KTsKIAkJYnJlYWs7CiAJY2FzZSBSQURFT05fUFBfVFhPRkZTRVRfMDoKIAljYXNlIFJBREVPTl9QUF9UWE9GRlNFVF8xOgpAQCAtMTE5Miw3ICsxMDQwLDcgQEAKIAkJCXIxMDBfY3NfZHVtcF9wYWNrZXQocCwgcGt0KTsKIAkJCXJldHVybiByOwogCQl9Ci0JCWliW2lkeF0gPSBpYl9jaHVuay0+a2RhdGFbaWR4XSArICgodTMyKXJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpOworCQlpYltpZHhdID0gaWR4X3ZhbHVlICsgKCh1MzIpcmVsb2MtPmxvYmouZ3B1X29mZnNldCk7CiAJCXRyYWNrLT50ZXh0dXJlc1tpXS5yb2JqID0gcmVsb2MtPnJvYmo7CiAJCWJyZWFrOwogCWNhc2UgUkFERU9OX1BQX0NVQklDX09GRlNFVF9UMF8wOgpAQCAtMTIwOCw4ICsxMDU2LDggQEAKIAkJCXIxMDBfY3NfZHVtcF9wYWNrZXQocCwgcGt0KTsKIAkJCXJldHVybiByOwogCQl9Ci0JCXRyYWNrLT50ZXh0dXJlc1swXS5jdWJlX2luZm9baV0ub2Zmc2V0ID0gaWJfY2h1bmstPmtkYXRhW2lkeF07Ci0JCWliW2lkeF0gPSBpYl9jaHVuay0+a2RhdGFbaWR4XSArICgodTMyKXJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpOworCQl0cmFjay0+dGV4dHVyZXNbMF0uY3ViZV9pbmZvW2ldLm9mZnNldCA9IGlkeF92YWx1ZTsKKwkJaWJbaWR4XSA9IGlkeF92YWx1ZSArICgodTMyKXJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpOwogCQl0cmFjay0+dGV4dHVyZXNbMF0uY3ViZV9pbmZvW2ldLnJvYmogPSByZWxvYy0+cm9iajsKIAkJYnJlYWs7CiAJY2FzZSBSQURFT05fUFBfQ1VCSUNfT0ZGU0VUX1QxXzA6CkBAIC0xMjI1LDggKzEwNzMsOCBAQAogCQkJcjEwMF9jc19kdW1wX3BhY2tldChwLCBwa3QpOwogCQkJcmV0dXJuIHI7CiAJCX0KLQkJdHJhY2stPnRleHR1cmVzWzFdLmN1YmVfaW5mb1tpXS5vZmZzZXQgPSBpYl9jaHVuay0+a2RhdGFbaWR4XTsKLQkJaWJbaWR4XSA9IGliX2NodW5rLT5rZGF0YVtpZHhdICsgKCh1MzIpcmVsb2MtPmxvYmouZ3B1X29mZnNldCk7CisJCXRyYWNrLT50ZXh0dXJlc1sxXS5jdWJlX2luZm9baV0ub2Zmc2V0ID0gaWR4X3ZhbHVlOworCQlpYltpZHhdID0gaWR4X3ZhbHVlICsgKCh1MzIpcmVsb2MtPmxvYmouZ3B1X29mZnNldCk7CiAJCXRyYWNrLT50ZXh0dXJlc1sxXS5jdWJlX2luZm9baV0ucm9iaiA9IHJlbG9jLT5yb2JqOwogCQlicmVhazsKIAljYXNlIFJBREVPTl9QUF9DVUJJQ19PRkZTRVRfVDJfMDoKQEAgLTEyNDIsMTIgKzEwOTAsMTIgQEAKIAkJCXIxMDBfY3NfZHVtcF9wYWNrZXQocCwgcGt0KTsKIAkJCXJldHVybiByOwogCQl9Ci0JCXRyYWNrLT50ZXh0dXJlc1syXS5jdWJlX2luZm9baV0ub2Zmc2V0ID0gaWJfY2h1bmstPmtkYXRhW2lkeF07Ci0JCWliW2lkeF0gPSBpYl9jaHVuay0+a2RhdGFbaWR4XSArICgodTMyKXJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpOworCQl0cmFjay0+dGV4dHVyZXNbMl0uY3ViZV9pbmZvW2ldLm9mZnNldCA9IGlkeF92YWx1ZTsKKwkJaWJbaWR4XSA9IGlkeF92YWx1ZSArICgodTMyKXJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpOwogCQl0cmFjay0+dGV4dHVyZXNbMl0uY3ViZV9pbmZvW2ldLnJvYmogPSByZWxvYy0+cm9iajsKIAkJYnJlYWs7CiAJY2FzZSBSQURFT05fUkVfV0lEVEhfSEVJR0hUOgotCQl0cmFjay0+bWF4eSA9ICgoaWJfY2h1bmstPmtkYXRhW2lkeF0gPj4gMTYpICYgMHg3RkYpOworCQl0cmFjay0+bWF4eSA9ICgoaWR4X3ZhbHVlID4+IDE2KSAmIDB4N0ZGKTsKIAkJYnJlYWs7CiAJY2FzZSBSQURFT05fUkIzRF9DT0xPUlBJVENIOgogCQlyID0gcjEwMF9jc19wYWNrZXRfbmV4dF9yZWxvYyhwLCAmcmVsb2MpOwpAQCAtMTI2MywxNyArMTExMSwxNyBAQAogCQlpZiAocmVsb2MtPmxvYmoudGlsaW5nX2ZsYWdzICYgUkFERU9OX1RJTElOR19NSUNSTykKIAkJCXRpbGVfZmxhZ3MgfD0gUkFERU9OX0NPTE9SX01JQ1JPVElMRV9FTkFCTEU7CiAKLQkJdG1wID0gaWJfY2h1bmstPmtkYXRhW2lkeF0gJiB+KDB4NyA8PCAxNik7CisJCXRtcCA9IGlkeF92YWx1ZSAmIH4oMHg3IDw8IDE2KTsKIAkJdG1wIHw9IHRpbGVfZmxhZ3M7CiAJCWliW2lkeF0gPSB0bXA7CiAKLQkJdHJhY2stPmNiWzBdLnBpdGNoID0gaWJfY2h1bmstPmtkYXRhW2lkeF0gJiBSQURFT05fQ09MT1JQSVRDSF9NQVNLOworCQl0cmFjay0+Y2JbMF0ucGl0Y2ggPSBpZHhfdmFsdWUgJiBSQURFT05fQ09MT1JQSVRDSF9NQVNLOwogCQlicmVhazsKIAljYXNlIFJBREVPTl9SQjNEX0RFUFRIUElUQ0g6Ci0JCXRyYWNrLT56Yi5waXRjaCA9IGliX2NodW5rLT5rZGF0YVtpZHhdICYgUkFERU9OX0RFUFRIUElUQ0hfTUFTSzsKKwkJdHJhY2stPnpiLnBpdGNoID0gaWR4X3ZhbHVlICYgUkFERU9OX0RFUFRIUElUQ0hfTUFTSzsKIAkJYnJlYWs7CiAJY2FzZSBSQURFT05fUkIzRF9DTlRMOgotCQlzd2l0Y2ggKChpYl9jaHVuay0+a2RhdGFbaWR4XSA+PiBSQURFT05fUkIzRF9DT0xPUl9GT1JNQVRfU0hJRlQpICYgMHgxZikgeworCQlzd2l0Y2ggKChpZHhfdmFsdWUgPj4gUkFERU9OX1JCM0RfQ09MT1JfRk9STUFUX1NISUZUKSAmIDB4MWYpIHsKIAkJY2FzZSA3OgogCQljYXNlIDg6CiAJCWNhc2UgOToKQEAgLTEyOTEsMTMgKzExMzksMTMgQEAKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJRFJNX0VSUk9SKCJJbnZhbGlkIGNvbG9yIGJ1ZmZlciBmb3JtYXQgKCVkKSAhXG4iLAotCQkJCSAgKChpYl9jaHVuay0+a2RhdGFbaWR4XSA+PiBSQURFT05fUkIzRF9DT0xPUl9GT1JNQVRfU0hJRlQpICYgMHgxZikpOworCQkJCSAgKChpZHhfdmFsdWUgPj4gUkFERU9OX1JCM0RfQ09MT1JfRk9STUFUX1NISUZUKSAmIDB4MWYpKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9Ci0JCXRyYWNrLT56X2VuYWJsZWQgPSAhIShpYl9jaHVuay0+a2RhdGFbaWR4XSAmIFJBREVPTl9aX0VOQUJMRSk7CisJCXRyYWNrLT56X2VuYWJsZWQgPSAhIShpZHhfdmFsdWUgJiBSQURFT05fWl9FTkFCTEUpOwogCQlicmVhazsKIAljYXNlIFJBREVPTl9SQjNEX1pTVEVOQ0lMQ05UTDoKLQkJc3dpdGNoIChpYl9jaHVuay0+a2RhdGFbaWR4XSAmIDB4ZikgeworCQlzd2l0Y2ggKGlkeF92YWx1ZSAmIDB4ZikgewogCQljYXNlIDA6CiAJCQl0cmFjay0+emIuY3BwID0gMjsKIAkJCWJyZWFrOwpAQCAtMTMyMSw0NCArMTE2OSw0NCBAQAogCQkJcjEwMF9jc19kdW1wX3BhY2tldChwLCBwa3QpOwogCQkJcmV0dXJuIHI7CiAJCX0KLQkJaWJbaWR4XSA9IGliX2NodW5rLT5rZGF0YVtpZHhdICsgKCh1MzIpcmVsb2MtPmxvYmouZ3B1X29mZnNldCk7CisJCWliW2lkeF0gPSBpZHhfdmFsdWUgKyAoKHUzMilyZWxvYy0+bG9iai5ncHVfb2Zmc2V0KTsKIAkJYnJlYWs7CiAJY2FzZSBSQURFT05fUFBfQ05UTDoKIAkJewotCQkJdWludDMyX3QgdGVtcCA9IGliX2NodW5rLT5rZGF0YVtpZHhdID4+IDQ7CisJCQl1aW50MzJfdCB0ZW1wID0gaWR4X3ZhbHVlID4+IDQ7CiAJCQlmb3IgKGkgPSAwOyBpIDwgdHJhY2stPm51bV90ZXh0dXJlOyBpKyspCiAJCQkJdHJhY2stPnRleHR1cmVzW2ldLmVuYWJsZWQgPSAhISh0ZW1wICYgKDEgPDwgaSkpOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgUkFERU9OX1NFX1ZGX0NOVEw6Ci0JCXRyYWNrLT52YXBfdmZfY250bCA9IGliX2NodW5rLT5rZGF0YVtpZHhdOworCQl0cmFjay0+dmFwX3ZmX2NudGwgPSBpZHhfdmFsdWU7CiAJCWJyZWFrOwogCWNhc2UgUkFERU9OX1NFX1ZUWF9GTVQ6Ci0JCXRyYWNrLT52dHhfc2l6ZSA9IHIxMDBfZ2V0X3Z0eF9zaXplKGliX2NodW5rLT5rZGF0YVtpZHhdKTsKKwkJdHJhY2stPnZ0eF9zaXplID0gcjEwMF9nZXRfdnR4X3NpemUoaWR4X3ZhbHVlKTsKIAkJYnJlYWs7CiAJY2FzZSBSQURFT05fUFBfVEVYX1NJWkVfMDoKIAljYXNlIFJBREVPTl9QUF9URVhfU0laRV8xOgogCWNhc2UgUkFERU9OX1BQX1RFWF9TSVpFXzI6CiAJCWkgPSAocmVnIC0gUkFERU9OX1BQX1RFWF9TSVpFXzApIC8gODsKLQkJdHJhY2stPnRleHR1cmVzW2ldLndpZHRoID0gKGliX2NodW5rLT5rZGF0YVtpZHhdICYgUkFERU9OX1RFWF9VU0laRV9NQVNLKSArIDE7Ci0JCXRyYWNrLT50ZXh0dXJlc1tpXS5oZWlnaHQgPSAoKGliX2NodW5rLT5rZGF0YVtpZHhdICYgUkFERU9OX1RFWF9WU0laRV9NQVNLKSA+PiBSQURFT05fVEVYX1ZTSVpFX1NISUZUKSArIDE7CisJCXRyYWNrLT50ZXh0dXJlc1tpXS53aWR0aCA9IChpZHhfdmFsdWUgJiBSQURFT05fVEVYX1VTSVpFX01BU0spICsgMTsKKwkJdHJhY2stPnRleHR1cmVzW2ldLmhlaWdodCA9ICgoaWR4X3ZhbHVlICYgUkFERU9OX1RFWF9WU0laRV9NQVNLKSA+PiBSQURFT05fVEVYX1ZTSVpFX1NISUZUKSArIDE7CiAJCWJyZWFrOwogCWNhc2UgUkFERU9OX1BQX1RFWF9QSVRDSF8wOgogCWNhc2UgUkFERU9OX1BQX1RFWF9QSVRDSF8xOgogCWNhc2UgUkFERU9OX1BQX1RFWF9QSVRDSF8yOgogCQlpID0gKHJlZyAtIFJBREVPTl9QUF9URVhfUElUQ0hfMCkgLyA4OwotCQl0cmFjay0+dGV4dHVyZXNbaV0ucGl0Y2ggPSBpYl9jaHVuay0+a2RhdGFbaWR4XSArIDMyOworCQl0cmFjay0+dGV4dHVyZXNbaV0ucGl0Y2ggPSBpZHhfdmFsdWUgKyAzMjsKIAkJYnJlYWs7CiAJY2FzZSBSQURFT05fUFBfVFhGSUxURVJfMDoKIAljYXNlIFJBREVPTl9QUF9UWEZJTFRFUl8xOgogCWNhc2UgUkFERU9OX1BQX1RYRklMVEVSXzI6CiAJCWkgPSAocmVnIC0gUkFERU9OX1BQX1RYRklMVEVSXzApIC8gMjQ7Ci0JCXRyYWNrLT50ZXh0dXJlc1tpXS5udW1fbGV2ZWxzID0gKChpYl9jaHVuay0+a2RhdGFbaWR4XSAmIFJBREVPTl9NQVhfTUlQX0xFVkVMX01BU0spCisJCXRyYWNrLT50ZXh0dXJlc1tpXS5udW1fbGV2ZWxzID0gKChpZHhfdmFsdWUgJiBSQURFT05fTUFYX01JUF9MRVZFTF9NQVNLKQogCQkJCQkJID4+IFJBREVPTl9NQVhfTUlQX0xFVkVMX1NISUZUKTsKLQkJdG1wID0gKGliX2NodW5rLT5rZGF0YVtpZHhdID4+IDIzKSAmIDB4NzsKKwkJdG1wID0gKGlkeF92YWx1ZSA+PiAyMykgJiAweDc7CiAJCWlmICh0bXAgPT0gMiB8fCB0bXAgPT0gNikKIAkJCXRyYWNrLT50ZXh0dXJlc1tpXS5yb3VuZHVwX3cgPSBmYWxzZTsKLQkJdG1wID0gKGliX2NodW5rLT5rZGF0YVtpZHhdID4+IDI3KSAmIDB4NzsKKwkJdG1wID0gKGlkeF92YWx1ZSA+PiAyNykgJiAweDc7CiAJCWlmICh0bXAgPT0gMiB8fCB0bXAgPT0gNikKIAkJCXRyYWNrLT50ZXh0dXJlc1tpXS5yb3VuZHVwX2ggPSBmYWxzZTsKIAkJYnJlYWs7CkBAIC0xMzY2LDE2ICsxMjE0LDE2IEBACiAJY2FzZSBSQURFT05fUFBfVFhGT1JNQVRfMToKIAljYXNlIFJBREVPTl9QUF9UWEZPUk1BVF8yOgogCQlpID0gKHJlZyAtIFJBREVPTl9QUF9UWEZPUk1BVF8wKSAvIDI0OwotCQlpZiAoaWJfY2h1bmstPmtkYXRhW2lkeF0gJiBSQURFT05fVFhGT1JNQVRfTk9OX1BPV0VSMikgeworCQlpZiAoaWR4X3ZhbHVlICYgUkFERU9OX1RYRk9STUFUX05PTl9QT1dFUjIpIHsKIAkJCXRyYWNrLT50ZXh0dXJlc1tpXS51c2VfcGl0Y2ggPSAxOwogCQl9IGVsc2UgewogCQkJdHJhY2stPnRleHR1cmVzW2ldLnVzZV9waXRjaCA9IDA7Ci0JCQl0cmFjay0+dGV4dHVyZXNbaV0ud2lkdGggPSAxIDw8ICgoaWJfY2h1bmstPmtkYXRhW2lkeF0gPj4gUkFERU9OX1RYRk9STUFUX1dJRFRIX1NISUZUKSAmIFJBREVPTl9UWEZPUk1BVF9XSURUSF9NQVNLKTsKLQkJCXRyYWNrLT50ZXh0dXJlc1tpXS5oZWlnaHQgPSAxIDw8ICgoaWJfY2h1bmstPmtkYXRhW2lkeF0gPj4gUkFERU9OX1RYRk9STUFUX0hFSUdIVF9TSElGVCkgJiBSQURFT05fVFhGT1JNQVRfSEVJR0hUX01BU0spOworCQkJdHJhY2stPnRleHR1cmVzW2ldLndpZHRoID0gMSA8PCAoKGlkeF92YWx1ZSA+PiBSQURFT05fVFhGT1JNQVRfV0lEVEhfU0hJRlQpICYgUkFERU9OX1RYRk9STUFUX1dJRFRIX01BU0spOworCQkJdHJhY2stPnRleHR1cmVzW2ldLmhlaWdodCA9IDEgPDwgKChpZHhfdmFsdWUgPj4gUkFERU9OX1RYRk9STUFUX0hFSUdIVF9TSElGVCkgJiBSQURFT05fVFhGT1JNQVRfSEVJR0hUX01BU0spOwogCQl9Ci0JCWlmIChpYl9jaHVuay0+a2RhdGFbaWR4XSAmIFJBREVPTl9UWEZPUk1BVF9DVUJJQ19NQVBfRU5BQkxFKQorCQlpZiAoaWR4X3ZhbHVlICYgUkFERU9OX1RYRk9STUFUX0NVQklDX01BUF9FTkFCTEUpCiAJCQl0cmFjay0+dGV4dHVyZXNbaV0udGV4X2Nvb3JkX3R5cGUgPSAyOwotCQlzd2l0Y2ggKChpYl9jaHVuay0+a2RhdGFbaWR4XSAmIFJBREVPTl9UWEZPUk1BVF9GT1JNQVRfTUFTSykpIHsKKwkJc3dpdGNoICgoaWR4X3ZhbHVlICYgUkFERU9OX1RYRk9STUFUX0ZPUk1BVF9NQVNLKSkgewogCQljYXNlIFJBREVPTl9UWEZPUk1BVF9JODoKIAkJY2FzZSBSQURFT05fVFhGT1JNQVRfUkdCMzMyOgogCQljYXNlIFJBREVPTl9UWEZPUk1BVF9ZODoKQEAgLTE0MDIsMTMgKzEyNTAsMTMgQEAKIAkJCXRyYWNrLT50ZXh0dXJlc1tpXS5jcHAgPSA0OwogCQkJYnJlYWs7CiAJCX0KLQkJdHJhY2stPnRleHR1cmVzW2ldLmN1YmVfaW5mb1s0XS53aWR0aCA9IDEgPDwgKChpYl9jaHVuay0+a2RhdGFbaWR4XSA+PiAxNikgJiAweGYpOwotCQl0cmFjay0+dGV4dHVyZXNbaV0uY3ViZV9pbmZvWzRdLmhlaWdodCA9IDEgPDwgKChpYl9jaHVuay0+a2RhdGFbaWR4XSA+PiAyMCkgJiAweGYpOworCQl0cmFjay0+dGV4dHVyZXNbaV0uY3ViZV9pbmZvWzRdLndpZHRoID0gMSA8PCAoKGlkeF92YWx1ZSA+PiAxNikgJiAweGYpOworCQl0cmFjay0+dGV4dHVyZXNbaV0uY3ViZV9pbmZvWzRdLmhlaWdodCA9IDEgPDwgKChpZHhfdmFsdWUgPj4gMjApICYgMHhmKTsKIAkJYnJlYWs7CiAJY2FzZSBSQURFT05fUFBfQ1VCSUNfRkFDRVNfMDoKIAljYXNlIFJBREVPTl9QUF9DVUJJQ19GQUNFU18xOgogCWNhc2UgUkFERU9OX1BQX0NVQklDX0ZBQ0VTXzI6Ci0JCXRtcCA9IGliX2NodW5rLT5rZGF0YVtpZHhdOworCQl0bXAgPSBpZHhfdmFsdWU7CiAJCWkgPSAocmVnIC0gUkFERU9OX1BQX0NVQklDX0ZBQ0VTXzApIC8gNDsKIAkJZm9yIChmYWNlID0gMDsgZmFjZSA8IDQ7IGZhY2UrKykgewogCQkJdHJhY2stPnRleHR1cmVzW2ldLmN1YmVfaW5mb1tmYWNlXS53aWR0aCA9IDEgPDwgKCh0bXAgPj4gKGZhY2UgKiA4KSkgJiAweGYpOwpAQCAtMTQyNywxNSArMTI3NSwxNCBAQAogCQkJCQkgc3RydWN0IHJhZGVvbl9jc19wYWNrZXQgKnBrdCwKIAkJCQkJIHN0cnVjdCByYWRlb25fb2JqZWN0ICpyb2JqKQogewotCXN0cnVjdCByYWRlb25fY3NfY2h1bmsgKmliX2NodW5rOwogCXVuc2lnbmVkIGlkeDsKLQotCWliX2NodW5rID0gJnAtPmNodW5rc1twLT5jaHVua19pYl9pZHhdOworCXUzMiB2YWx1ZTsKIAlpZHggPSBwa3QtPmlkeCArIDE7Ci0JaWYgKChpYl9jaHVuay0+a2RhdGFbaWR4KzJdICsgMSkgPiByYWRlb25fb2JqZWN0X3NpemUocm9iaikpIHsKKwl2YWx1ZSA9IHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaWR4ICsgMik7CisJaWYgKCh2YWx1ZSArIDEpID4gcmFkZW9uX29iamVjdF9zaXplKHJvYmopKSB7CiAJCURSTV9FUlJPUigiW2RybV0gQnVmZmVyIHRvbyBzbWFsbCBmb3IgUEFDS0VUMyBJTkRYX0JVRkZFUiAiCiAJCQkgICIobmVlZCAldSBoYXZlICVsdSkgIVxuIiwKLQkJCSAgaWJfY2h1bmstPmtkYXRhW2lkeCsyXSArIDEsCisJCQkgIHZhbHVlICsgMSwKIAkJCSAgcmFkZW9uX29iamVjdF9zaXplKHJvYmopKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtMTQ0NSw1OSArMTI5MiwyMCBAQAogc3RhdGljIGludCByMTAwX3BhY2tldDNfY2hlY2soc3RydWN0IHJhZGVvbl9jc19wYXJzZXIgKnAsCiAJCQkgICAgICBzdHJ1Y3QgcmFkZW9uX2NzX3BhY2tldCAqcGt0KQogewotCXN0cnVjdCByYWRlb25fY3NfY2h1bmsgKmliX2NodW5rOwogCXN0cnVjdCByYWRlb25fY3NfcmVsb2MgKnJlbG9jOwogCXN0cnVjdCByMTAwX2NzX3RyYWNrICp0cmFjazsKIAl1bnNpZ25lZCBpZHg7Ci0JdW5zaWduZWQgaSwgYzsKIAl2b2xhdGlsZSB1aW50MzJfdCAqaWI7CiAJaW50IHI7CiAKIAlpYiA9IHAtPmliLT5wdHI7Ci0JaWJfY2h1bmsgPSAmcC0+Y2h1bmtzW3AtPmNodW5rX2liX2lkeF07CiAJaWR4ID0gcGt0LT5pZHggKyAxOwogCXRyYWNrID0gKHN0cnVjdCByMTAwX2NzX3RyYWNrICopcC0+dHJhY2s7CiAJc3dpdGNoIChwa3QtPm9wY29kZSkgewogCWNhc2UgUEFDS0VUM18zRF9MT0FEX1ZCUE5UUjoKLQkJYyA9IGliX2NodW5rLT5rZGF0YVtpZHgrK107Ci0JCXRyYWNrLT5udW1fYXJyYXlzID0gYzsKLQkJZm9yIChpID0gMDsgaSA8IChjIC0gMSk7IGkgKz0gMiwgaWR4ICs9IDMpIHsKLQkJCXIgPSByMTAwX2NzX3BhY2tldF9uZXh0X3JlbG9jKHAsICZyZWxvYyk7Ci0JCQlpZiAocikgewotCQkJCURSTV9FUlJPUigiTm8gcmVsb2MgZm9yIHBhY2tldDMgJWRcbiIsCi0JCQkJCSAgcGt0LT5vcGNvZGUpOwotCQkJCXIxMDBfY3NfZHVtcF9wYWNrZXQocCwgcGt0KTsKLQkJCQlyZXR1cm4gcjsKLQkJCX0KLQkJCWliW2lkeCsxXSA9IGliX2NodW5rLT5rZGF0YVtpZHgrMV0gKyAoKHUzMilyZWxvYy0+bG9iai5ncHVfb2Zmc2V0KTsKLQkJCXRyYWNrLT5hcnJheXNbaSArIDBdLnJvYmogPSByZWxvYy0+cm9iajsKLQkJCXRyYWNrLT5hcnJheXNbaSArIDBdLmVzaXplID0gaWJfY2h1bmstPmtkYXRhW2lkeF0gPj4gODsKLQkJCXRyYWNrLT5hcnJheXNbaSArIDBdLmVzaXplICY9IDB4N0Y7Ci0JCQlyID0gcjEwMF9jc19wYWNrZXRfbmV4dF9yZWxvYyhwLCAmcmVsb2MpOwotCQkJaWYgKHIpIHsKLQkJCQlEUk1fRVJST1IoIk5vIHJlbG9jIGZvciBwYWNrZXQzICVkXG4iLAotCQkJCQkgIHBrdC0+b3Bjb2RlKTsKLQkJCQlyMTAwX2NzX2R1bXBfcGFja2V0KHAsIHBrdCk7Ci0JCQkJcmV0dXJuIHI7Ci0JCQl9Ci0JCQlpYltpZHgrMl0gPSBpYl9jaHVuay0+a2RhdGFbaWR4KzJdICsgKCh1MzIpcmVsb2MtPmxvYmouZ3B1X29mZnNldCk7Ci0JCQl0cmFjay0+YXJyYXlzW2kgKyAxXS5yb2JqID0gcmVsb2MtPnJvYmo7Ci0JCQl0cmFjay0+YXJyYXlzW2kgKyAxXS5lc2l6ZSA9IGliX2NodW5rLT5rZGF0YVtpZHhdID4+IDI0OwotCQkJdHJhY2stPmFycmF5c1tpICsgMV0uZXNpemUgJj0gMHg3RjsKLQkJfQotCQlpZiAoYyAmIDEpIHsKLQkJCXIgPSByMTAwX2NzX3BhY2tldF9uZXh0X3JlbG9jKHAsICZyZWxvYyk7Ci0JCQlpZiAocikgewotCQkJCURSTV9FUlJPUigiTm8gcmVsb2MgZm9yIHBhY2tldDMgJWRcbiIsCi0JCQkJCSAgcGt0LT5vcGNvZGUpOwotCQkJCXIxMDBfY3NfZHVtcF9wYWNrZXQocCwgcGt0KTsKLQkJCQlyZXR1cm4gcjsKLQkJCX0KLQkJCWliW2lkeCsxXSA9IGliX2NodW5rLT5rZGF0YVtpZHgrMV0gKyAoKHUzMilyZWxvYy0+bG9iai5ncHVfb2Zmc2V0KTsKLQkJCXRyYWNrLT5hcnJheXNbaSArIDBdLnJvYmogPSByZWxvYy0+cm9iajsKLQkJCXRyYWNrLT5hcnJheXNbaSArIDBdLmVzaXplID0gaWJfY2h1bmstPmtkYXRhW2lkeF0gPj4gODsKLQkJCXRyYWNrLT5hcnJheXNbaSArIDBdLmVzaXplICY9IDB4N0Y7Ci0JCX0KKwkJciA9IHIxMDBfcGFja2V0M19sb2FkX3ZicG50cihwLCBwa3QsIGlkeCk7CisJCWlmIChyKQorCQkJcmV0dXJuIHI7CiAJCWJyZWFrOwogCWNhc2UgUEFDS0VUM19JTkRYX0JVRkZFUjoKIAkJciA9IHIxMDBfY3NfcGFja2V0X25leHRfcmVsb2MocCwgJnJlbG9jKTsKQEAgLTE1MDYsNyArMTMxNCw3IEBACiAJCQlyMTAwX2NzX2R1bXBfcGFja2V0KHAsIHBrdCk7CiAJCQlyZXR1cm4gcjsKIAkJfQotCQlpYltpZHgrMV0gPSBpYl9jaHVuay0+a2RhdGFbaWR4KzFdICsgKCh1MzIpcmVsb2MtPmxvYmouZ3B1X29mZnNldCk7CisJCWliW2lkeCsxXSA9IHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaWR4KzEpICsgKCh1MzIpcmVsb2MtPmxvYmouZ3B1X29mZnNldCk7CiAJCXIgPSByMTAwX2NzX3RyYWNrX2NoZWNrX3BrdDNfaW5keF9idWZmZXIocCwgcGt0LCByZWxvYy0+cm9iaik7CiAJCWlmIChyKSB7CiAJCQlyZXR1cm4gcjsKQEAgLTE1MjAsMjcgKzEzMjgsMjcgQEAKIAkJCXIxMDBfY3NfZHVtcF9wYWNrZXQocCwgcGt0KTsKIAkJCXJldHVybiByOwogCQl9Ci0JCWliW2lkeF0gPSBpYl9jaHVuay0+a2RhdGFbaWR4XSArICgodTMyKXJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpOworCQlpYltpZHhdID0gcmFkZW9uX2dldF9pYl92YWx1ZShwLCBpZHgpICsgKCh1MzIpcmVsb2MtPmxvYmouZ3B1X29mZnNldCk7CiAJCXRyYWNrLT5udW1fYXJyYXlzID0gMTsKLQkJdHJhY2stPnZ0eF9zaXplID0gcjEwMF9nZXRfdnR4X3NpemUoaWJfY2h1bmstPmtkYXRhW2lkeCsyXSk7CisJCXRyYWNrLT52dHhfc2l6ZSA9IHIxMDBfZ2V0X3Z0eF9zaXplKHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaWR4ICsgMikpOwogCiAJCXRyYWNrLT5hcnJheXNbMF0ucm9iaiA9IHJlbG9jLT5yb2JqOwogCQl0cmFjay0+YXJyYXlzWzBdLmVzaXplID0gdHJhY2stPnZ0eF9zaXplOwogCi0JCXRyYWNrLT5tYXhfaW5keCA9IGliX2NodW5rLT5rZGF0YVtpZHgrMV07CisJCXRyYWNrLT5tYXhfaW5keCA9IHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaWR4KzEpOwogCi0JCXRyYWNrLT52YXBfdmZfY250bCA9IGliX2NodW5rLT5rZGF0YVtpZHgrM107CisJCXRyYWNrLT52YXBfdmZfY250bCA9IHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaWR4KzMpOwogCQl0cmFjay0+aW1tZF9kd29yZHMgPSBwa3QtPmNvdW50IC0gMTsKIAkJciA9IHIxMDBfY3NfdHJhY2tfY2hlY2socC0+cmRldiwgdHJhY2spOwogCQlpZiAocikKIAkJCXJldHVybiByOwogCQlicmVhazsKIAljYXNlIFBBQ0tFVDNfM0RfRFJBV19JTU1EOgotCQlpZiAoKChpYl9jaHVuay0+a2RhdGFbaWR4KzFdID4+IDQpICYgMHgzKSAhPSAzKSB7CisJCWlmICgoKHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaWR4ICsgMSkgPj4gNCkgJiAweDMpICE9IDMpIHsKIAkJCURSTV9FUlJPUigiUFJJTV9XQUxLIG11c3QgYmUgMyBmb3IgSU1NRCBkcmF3XG4iKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9Ci0JCXRyYWNrLT52YXBfdmZfY250bCA9IGliX2NodW5rLT5rZGF0YVtpZHgrMV07CisJCXRyYWNrLT52YXBfdmZfY250bCA9IHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaWR4ICsgMSk7CiAJCXRyYWNrLT5pbW1kX2R3b3JkcyA9IHBrdC0+Y291bnQgLSAxOwogCQlyID0gcjEwMF9jc190cmFja19jaGVjayhwLT5yZGV2LCB0cmFjayk7CiAJCWlmIChyKQpAQCAtMTU0OCwxMSArMTM1NiwxMSBAQAogCQlicmVhazsKIAkJLyogdHJpZ2dlcnMgZHJhd2luZyB1c2luZyBpbi1wYWNrZXQgdmVydGV4IGRhdGEgKi8KIAljYXNlIFBBQ0tFVDNfM0RfRFJBV19JTU1EXzI6Ci0JCWlmICgoKGliX2NodW5rLT5rZGF0YVtpZHhdID4+IDQpICYgMHgzKSAhPSAzKSB7CisJCWlmICgoKHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaWR4KSA+PiA0KSAmIDB4MykgIT0gMykgewogCQkJRFJNX0VSUk9SKCJQUklNX1dBTEsgbXVzdCBiZSAzIGZvciBJTU1EIGRyYXdcbiIpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KLQkJdHJhY2stPnZhcF92Zl9jbnRsID0gaWJfY2h1bmstPmtkYXRhW2lkeF07CisJCXRyYWNrLT52YXBfdmZfY250bCA9IHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaWR4KTsKIAkJdHJhY2stPmltbWRfZHdvcmRzID0gcGt0LT5jb3VudDsKIAkJciA9IHIxMDBfY3NfdHJhY2tfY2hlY2socC0+cmRldiwgdHJhY2spOwogCQlpZiAocikKQEAgLTE1NjAsMjggKzEzNjgsMjggQEAKIAkJYnJlYWs7CiAJCS8qIHRyaWdnZXJzIGRyYXdpbmcgdXNpbmcgaW4tcGFja2V0IHZlcnRleCBkYXRhICovCiAJY2FzZSBQQUNLRVQzXzNEX0RSQVdfVkJVRl8yOgotCQl0cmFjay0+dmFwX3ZmX2NudGwgPSBpYl9jaHVuay0+a2RhdGFbaWR4XTsKKwkJdHJhY2stPnZhcF92Zl9jbnRsID0gcmFkZW9uX2dldF9pYl92YWx1ZShwLCBpZHgpOwogCQlyID0gcjEwMF9jc190cmFja19jaGVjayhwLT5yZGV2LCB0cmFjayk7CiAJCWlmIChyKQogCQkJcmV0dXJuIHI7CiAJCWJyZWFrOwogCQkvKiB0cmlnZ2VycyBkcmF3aW5nIG9mIHZlcnRleCBidWZmZXJzIHNldHVwIGVsc2V3aGVyZSAqLwogCWNhc2UgUEFDS0VUM18zRF9EUkFXX0lORFhfMjoKLQkJdHJhY2stPnZhcF92Zl9jbnRsID0gaWJfY2h1bmstPmtkYXRhW2lkeF07CisJCXRyYWNrLT52YXBfdmZfY250bCA9IHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaWR4KTsKIAkJciA9IHIxMDBfY3NfdHJhY2tfY2hlY2socC0+cmRldiwgdHJhY2spOwogCQlpZiAocikKIAkJCXJldHVybiByOwogCQlicmVhazsKIAkJLyogdHJpZ2dlcnMgZHJhd2luZyB1c2luZyBpbmRpY2VzIHRvIHZlcnRleCBidWZmZXIgKi8KIAljYXNlIFBBQ0tFVDNfM0RfRFJBV19WQlVGOgotCQl0cmFjay0+dmFwX3ZmX2NudGwgPSBpYl9jaHVuay0+a2RhdGFbaWR4ICsgMV07CisJCXRyYWNrLT52YXBfdmZfY250bCA9IHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaWR4ICsgMSk7CiAJCXIgPSByMTAwX2NzX3RyYWNrX2NoZWNrKHAtPnJkZXYsIHRyYWNrKTsKIAkJaWYgKHIpCiAJCQlyZXR1cm4gcjsKIAkJYnJlYWs7CiAJCS8qIHRyaWdnZXJzIGRyYXdpbmcgb2YgdmVydGV4IGJ1ZmZlcnMgc2V0dXAgZWxzZXdoZXJlICovCiAJY2FzZSBQQUNLRVQzXzNEX0RSQVdfSU5EWDoKLQkJdHJhY2stPnZhcF92Zl9jbnRsID0gaWJfY2h1bmstPmtkYXRhW2lkeCArIDFdOworCQl0cmFjay0+dmFwX3ZmX2NudGwgPSByYWRlb25fZ2V0X2liX3ZhbHVlKHAsIGlkeCArIDEpOwogCQlyID0gcjEwMF9jc190cmFja19jaGVjayhwLT5yZGV2LCB0cmFjayk7CiAJCWlmIChyKQogCQkJcmV0dXJuIHI7CkBAIC0yMDMzLDcgKzE4NDEsNyBAQAogCXIxMDBfcGxsX2VycmF0YV9hZnRlcl9kYXRhKHJkZXYpOwogfQogCi1pbnQgcjEwMF9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQordm9pZCByMTAwX3NldF9zYWZlX3JlZ2lzdGVycyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKIAlpZiAoQVNJQ19JU19STjUwKHJkZXYpKSB7CiAJCXJkZXYtPmNvbmZpZy5yMTAwLnJlZ19zYWZlX2JtID0gcm41MF9yZWdfc2FmZV9ibTsKQEAgLTIwNDIsOSArMTg1MCw4IEBACiAJCXJkZXYtPmNvbmZpZy5yMTAwLnJlZ19zYWZlX2JtID0gcjEwMF9yZWdfc2FmZV9ibTsKIAkJcmRldi0+Y29uZmlnLnIxMDAucmVnX3NhZmVfYm1fc2l6ZSA9IEFSUkFZX1NJWkUocjEwMF9yZWdfc2FmZV9ibSk7CiAJfSBlbHNlIHsKLQkJcmV0dXJuIHIyMDBfaW5pdChyZGV2KTsKKwkJcjIwMF9zZXRfc2FmZV9yZWdpc3RlcnMocmRldik7CiAJfQotCXJldHVybiAwOwogfQogCiAvKgpAQCAtMjM0Miw5ICsyMTQ5LDExIEBACiAJCW1vZGUxID0gJnJkZXYtPm1vZGVfaW5mby5jcnRjc1swXS0+YmFzZS5tb2RlOwogCQlwaXhlbF9ieXRlczEgPSByZGV2LT5tb2RlX2luZm8uY3J0Y3NbMF0tPmJhc2UuZmItPmJpdHNfcGVyX3BpeGVsIC8gODsKIAl9Ci0JaWYgKHJkZXYtPm1vZGVfaW5mby5jcnRjc1sxXS0+YmFzZS5lbmFibGVkKSB7Ci0JCW1vZGUyID0gJnJkZXYtPm1vZGVfaW5mby5jcnRjc1sxXS0+YmFzZS5tb2RlOwotCQlwaXhlbF9ieXRlczIgPSByZGV2LT5tb2RlX2luZm8uY3J0Y3NbMV0tPmJhc2UuZmItPmJpdHNfcGVyX3BpeGVsIC8gODsKKwlpZiAoIShyZGV2LT5mbGFncyAmIFJBREVPTl9TSU5HTEVfQ1JUQykpIHsKKwkJaWYgKHJkZXYtPm1vZGVfaW5mby5jcnRjc1sxXS0+YmFzZS5lbmFibGVkKSB7CisJCQltb2RlMiA9ICZyZGV2LT5tb2RlX2luZm8uY3J0Y3NbMV0tPmJhc2UubW9kZTsKKwkJCXBpeGVsX2J5dGVzMiA9IHJkZXYtPm1vZGVfaW5mby5jcnRjc1sxXS0+YmFzZS5mYi0+Yml0c19wZXJfcGl4ZWwgLyA4OworCQl9CiAJfQogCiAJbWluX21lbV9lZmYuZnVsbCA9IHJmaXhlZF9jb25zdF84KDApOwpAQCAtMzE1Nyw3ICsyOTY2LDcgQEAKIAlXUkVHMzIoUl8wMDA3NDBfQ1BfQ1NRX0NOVEwsIDApOwogCiAJLyogU2F2ZSBmZXcgQ1JUQyByZWdpc3RlcnMgKi8KLQlzYXZlLT5HRU5NT19XVCA9IFJSRUczMihSXzAwMDNDMF9HRU5NT19XVCk7CisJc2F2ZS0+R0VOTU9fV1QgPSBSUkVHOChSXzAwMDNDMl9HRU5NT19XVCk7CiAJc2F2ZS0+Q1JUQ19FWFRfQ05UTCA9IFJSRUczMihSXzAwMDA1NF9DUlRDX0VYVF9DTlRMKTsKIAlzYXZlLT5DUlRDX0dFTl9DTlRMID0gUlJFRzMyKFJfMDAwMDUwX0NSVENfR0VOX0NOVEwpOwogCXNhdmUtPkNVUl9PRkZTRVQgPSBSUkVHMzIoUl8wMDAyNjBfQ1VSX09GRlNFVCk7CkBAIC0zMTY3LDcgKzI5NzYsNyBAQAogCX0KIAogCS8qIERpc2FibGUgVkdBIGFwZXJ0dXJlIGFjY2VzcyAqLwotCVdSRUczMihSXzAwMDNDMF9HRU5NT19XVCwgQ18wMDAzQzBfVkdBX1JBTV9FTiAmIHNhdmUtPkdFTk1PX1dUKTsKKwlXUkVHOChSXzAwMDNDMl9HRU5NT19XVCwgQ18wMDAzQzJfVkdBX1JBTV9FTiAmIHNhdmUtPkdFTk1PX1dUKTsKIAkvKiBEaXNhYmxlIGN1cnNvciwgb3ZlcmxheSwgY3J0YyAqLwogCVdSRUczMihSXzAwMDI2MF9DVVJfT0ZGU0VULCBzYXZlLT5DVVJfT0ZGU0VUIHwgU18wMDAyNjBfQ1VSX0xPQ0soMSkpOwogCVdSRUczMihSXzAwMDA1NF9DUlRDX0VYVF9DTlRMLCBzYXZlLT5DUlRDX0VYVF9DTlRMIHwKQEAgLTMxOTksMTAgKzMwMDgsMjY0IEBACiAJCQkJcmRldi0+bWMudnJhbV9sb2NhdGlvbik7CiAJfQogCS8qIFJlc3RvcmUgQ1JUQyByZWdpc3RlcnMgKi8KLQlXUkVHMzIoUl8wMDAzQzBfR0VOTU9fV1QsIHNhdmUtPkdFTk1PX1dUKTsKKwlXUkVHOChSXzAwMDNDMl9HRU5NT19XVCwgc2F2ZS0+R0VOTU9fV1QpOwogCVdSRUczMihSXzAwMDA1NF9DUlRDX0VYVF9DTlRMLCBzYXZlLT5DUlRDX0VYVF9DTlRMKTsKIAlXUkVHMzIoUl8wMDAwNTBfQ1JUQ19HRU5fQ05UTCwgc2F2ZS0+Q1JUQ19HRU5fQ05UTCk7CiAJaWYgKCEocmRldi0+ZmxhZ3MgJiBSQURFT05fU0lOR0xFX0NSVEMpKSB7CiAJCVdSRUczMihSXzAwMDNGOF9DUlRDMl9HRU5fQ05UTCwgc2F2ZS0+Q1JUQzJfR0VOX0NOVEwpOwogCX0KIH0KKwordm9pZCByMTAwX3ZnYV9yZW5kZXJfZGlzYWJsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwl1MzIgdG1wOworCisJdG1wID0gUlJFRzgoUl8wMDAzQzJfR0VOTU9fV1QpOworCVdSRUc4KFJfMDAwM0MyX0dFTk1PX1dULCBDXzAwMDNDMl9WR0FfUkFNX0VOICYgdG1wKTsKK30KKworc3RhdGljIHZvaWQgcjEwMF9kZWJ1Z2ZzKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCWludCByOworCisJciA9IHIxMDBfZGVidWdmc19tY19pbmZvX2luaXQocmRldik7CisJaWYgKHIpCisJCWRldl93YXJuKHJkZXYtPmRldiwgIkZhaWxlZCB0byBjcmVhdGUgcjEwMF9tYyBkZWJ1Z2ZzIGZpbGUuXG4iKTsKK30KKworc3RhdGljIHZvaWQgcjEwMF9tY19wcm9ncmFtKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCXN0cnVjdCByMTAwX21jX3NhdmUgc2F2ZTsKKworCS8qIFN0b3BzIGFsbCBtYyBjbGllbnRzICovCisJcjEwMF9tY19zdG9wKHJkZXYsICZzYXZlKTsKKwlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfQUdQKSB7CisJCVdSRUczMihSXzAwMDE0Q19NQ19BR1BfTE9DQVRJT04sCisJCQlTXzAwMDE0Q19NQ19BR1BfU1RBUlQocmRldi0+bWMuZ3R0X3N0YXJ0ID4+IDE2KSB8CisJCQlTXzAwMDE0Q19NQ19BR1BfVE9QKHJkZXYtPm1jLmd0dF9lbmQgPj4gMTYpKTsKKwkJV1JFRzMyKFJfMDAwMTcwX0FHUF9CQVNFLCBsb3dlcl8zMl9iaXRzKHJkZXYtPm1jLmFncF9iYXNlKSk7CisJCWlmIChyZGV2LT5mYW1pbHkgPiBDSElQX1JWMjAwKQorCQkJV1JFRzMyKFJfMDAwMTVDX0FHUF9CQVNFXzIsCisJCQkJdXBwZXJfMzJfYml0cyhyZGV2LT5tYy5hZ3BfYmFzZSkgJiAweGZmKTsKKwl9IGVsc2UgeworCQlXUkVHMzIoUl8wMDAxNENfTUNfQUdQX0xPQ0FUSU9OLCAweDBGRkZGRkZGKTsKKwkJV1JFRzMyKFJfMDAwMTcwX0FHUF9CQVNFLCAwKTsKKwkJaWYgKHJkZXYtPmZhbWlseSA+IENISVBfUlYyMDApCisJCQlXUkVHMzIoUl8wMDAxNUNfQUdQX0JBU0VfMiwgMCk7CisJfQorCS8qIFdhaXQgZm9yIG1jIGlkbGUgKi8KKwlpZiAocjEwMF9tY193YWl0X2Zvcl9pZGxlKHJkZXYpKQorCQlkZXZfd2FybihyZGV2LT5kZXYsICJXYWl0IGZvciBNQyBpZGxlIHRpbWVvdXQuXG4iKTsKKwkvKiBQcm9ncmFtIE1DLCBzaG91bGQgYmUgYSAzMmJpdHMgbGltaXRlZCBhZGRyZXNzIHNwYWNlICovCisJV1JFRzMyKFJfMDAwMTQ4X01DX0ZCX0xPQ0FUSU9OLAorCQlTXzAwMDE0OF9NQ19GQl9TVEFSVChyZGV2LT5tYy52cmFtX3N0YXJ0ID4+IDE2KSB8CisJCVNfMDAwMTQ4X01DX0ZCX1RPUChyZGV2LT5tYy52cmFtX2VuZCA+PiAxNikpOworCXIxMDBfbWNfcmVzdW1lKHJkZXYsICZzYXZlKTsKK30KKwordm9pZCByMTAwX2Nsb2NrX3N0YXJ0dXAoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJdTMyIHRtcDsKKworCWlmIChyYWRlb25fZHluY2xrcyAhPSAtMSAmJiByYWRlb25fZHluY2xrcykKKwkJcmFkZW9uX2xlZ2FjeV9zZXRfY2xvY2tfZ2F0aW5nKHJkZXYsIDEpOworCS8qIFdlIG5lZWQgdG8gZm9yY2Ugb24gc29tZSBvZiB0aGUgYmxvY2sgKi8KKwl0bXAgPSBSUkVHMzJfUExMKFJfMDAwMDBEX1NDTEtfQ05UTCk7CisJdG1wIHw9IFNfMDAwMDBEX0ZPUkNFX0NQKDEpIHwgU18wMDAwMERfRk9SQ0VfVklQKDEpOworCWlmICgocmRldi0+ZmFtaWx5ID09IENISVBfUlYyNTApIHx8IChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9SVjI4MCkpCisJCXRtcCB8PSBTXzAwMDAwRF9GT1JDRV9ESVNQMSgxKSB8IFNfMDAwMDBEX0ZPUkNFX0RJU1AyKDEpOworCVdSRUczMl9QTEwoUl8wMDAwMERfU0NMS19DTlRMLCB0bXApOworfQorCitzdGF0aWMgaW50IHIxMDBfc3RhcnR1cChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwlpbnQgcjsKKworCXIxMDBfbWNfcHJvZ3JhbShyZGV2KTsKKwkvKiBSZXN1bWUgY2xvY2sgKi8KKwlyMTAwX2Nsb2NrX3N0YXJ0dXAocmRldik7CisJLyogSW5pdGlhbGl6ZSBHUFUgY29uZmlndXJhdGlvbiAoIyBwaXBlcywgLi4uKSAqLworCXIxMDBfZ3B1X2luaXQocmRldik7CisJLyogSW5pdGlhbGl6ZSBHQVJUIChpbml0aWFsaXplIGFmdGVyIFRUTSBzbyB3ZSBjYW4gYWxsb2NhdGUKKwkgKiBtZW1vcnkgdGhyb3VnaCBUVE0gYnV0IGZpbmFsaXplIGFmdGVyIFRUTSkgKi8KKwlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfUENJKSB7CisJCXIgPSByMTAwX3BjaV9nYXJ0X2VuYWJsZShyZGV2KTsKKwkJaWYgKHIpCisJCQlyZXR1cm4gcjsKKwl9CisJLyogRW5hYmxlIElSUSAqLworCXJkZXYtPmlycS5zd19pbnQgPSB0cnVlOworCXIxMDBfaXJxX3NldChyZGV2KTsKKwkvKiAxTSByaW5nIGJ1ZmZlciAqLworCXIgPSByMTAwX2NwX2luaXQocmRldiwgMTAyNCAqIDEwMjQpOworCWlmIChyKSB7CisJCWRldl9lcnIocmRldi0+ZGV2LCAiZmFpbGxlZCBpbml0aWFsaXppbmcgQ1AgKCVkKS5cbiIsIHIpOworCQlyZXR1cm4gcjsKKwl9CisJciA9IHIxMDBfd2JfaW5pdChyZGV2KTsKKwlpZiAocikKKwkJZGV2X2VycihyZGV2LT5kZXYsICJmYWlsbGVkIGluaXRpYWxpemluZyBXQiAoJWQpLlxuIiwgcik7CisJciA9IHIxMDBfaWJfaW5pdChyZGV2KTsKKwlpZiAocikgeworCQlkZXZfZXJyKHJkZXYtPmRldiwgImZhaWxsZWQgaW5pdGlhbGl6aW5nIElCICglZCkuXG4iLCByKTsKKwkJcmV0dXJuIHI7CisJfQorCXJldHVybiAwOworfQorCitpbnQgcjEwMF9yZXN1bWUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJLyogTWFrZSBzdXIgR0FSVCBhcmUgbm90IHdvcmtpbmcgKi8KKwlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfUENJKQorCQlyMTAwX3BjaV9nYXJ0X2Rpc2FibGUocmRldik7CisJLyogUmVzdW1lIGNsb2NrIGJlZm9yZSBkb2luZyByZXNldCAqLworCXIxMDBfY2xvY2tfc3RhcnR1cChyZGV2KTsKKwkvKiBSZXNldCBncHUgYmVmb3JlIHBvc3Rpbmcgb3RoZXJ3aXNlIEFUT00gd2lsbCBlbnRlciBpbmZpbml0ZSBsb29wICovCisJaWYgKHJhZGVvbl9ncHVfcmVzZXQocmRldikpIHsKKwkJZGV2X3dhcm4ocmRldi0+ZGV2LCAiR1BVIHJlc2V0IGZhaWxlZCAhICgweEU0MD0weCUwOFgsIDB4N0MwPTB4JTA4WClcbiIsCisJCQlSUkVHMzIoUl8wMDBFNDBfUkJCTV9TVEFUVVMpLAorCQkJUlJFRzMyKFJfMDAwN0MwX0NQX1NUQVQpKTsKKwl9CisJLyogcG9zdCAqLworCXJhZGVvbl9jb21iaW9zX2FzaWNfaW5pdChyZGV2LT5kZGV2KTsKKwkvKiBSZXN1bWUgY2xvY2sgYWZ0ZXIgcG9zdGluZyAqLworCXIxMDBfY2xvY2tfc3RhcnR1cChyZGV2KTsKKwlyZXR1cm4gcjEwMF9zdGFydHVwKHJkZXYpOworfQorCitpbnQgcjEwMF9zdXNwZW5kKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCXIxMDBfY3BfZGlzYWJsZShyZGV2KTsKKwlyMTAwX3diX2Rpc2FibGUocmRldik7CisJcjEwMF9pcnFfZGlzYWJsZShyZGV2KTsKKwlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfUENJKQorCQlyMTAwX3BjaV9nYXJ0X2Rpc2FibGUocmRldik7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgcjEwMF9maW5pKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCXIxMDBfc3VzcGVuZChyZGV2KTsKKwlyMTAwX2NwX2ZpbmkocmRldik7CisJcjEwMF93Yl9maW5pKHJkZXYpOworCXIxMDBfaWJfZmluaShyZGV2KTsKKwlyYWRlb25fZ2VtX2ZpbmkocmRldik7CisJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX1BDSSkKKwkJcjEwMF9wY2lfZ2FydF9maW5pKHJkZXYpOworCXJhZGVvbl9pcnFfa21zX2ZpbmkocmRldik7CisJcmFkZW9uX2ZlbmNlX2RyaXZlcl9maW5pKHJkZXYpOworCXJhZGVvbl9vYmplY3RfZmluaShyZGV2KTsKKwlyYWRlb25fYXRvbWJpb3NfZmluaShyZGV2KTsKKwlrZnJlZShyZGV2LT5iaW9zKTsKKwlyZGV2LT5iaW9zID0gTlVMTDsKK30KKworaW50IHIxMDBfbWNfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwlpbnQgcjsKKwl1MzIgdG1wOworCisJLyogU2V0dXAgR1BVIG1lbW9yeSBzcGFjZSAqLworCXJkZXYtPm1jLnZyYW1fbG9jYXRpb24gPSAweEZGRkZGRkZGVUw7CisJcmRldi0+bWMuZ3R0X2xvY2F0aW9uID0gMHhGRkZGRkZGRlVMOworCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19JR1ApIHsKKwkJdG1wID0gR18wMDAxNUNfTUNfRkJfU1RBUlQoUlJFRzMyKFJfMDAwMTVDX05CX1RPTSkpOworCQlyZGV2LT5tYy52cmFtX2xvY2F0aW9uID0gdG1wIDw8IDE2OworCX0KKwlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfQUdQKSB7CisJCXIgPSByYWRlb25fYWdwX2luaXQocmRldik7CisJCWlmIChyKSB7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HICJbZHJtXSBEaXNhYmxpbmcgQUdQXG4iKTsKKwkJCXJkZXYtPmZsYWdzICY9IH5SQURFT05fSVNfQUdQOworCQkJcmRldi0+bWMuZ3R0X3NpemUgPSByYWRlb25fZ2FydF9zaXplICogMTAyNCAqIDEwMjQ7CisJCX0gZWxzZSB7CisJCQlyZGV2LT5tYy5ndHRfbG9jYXRpb24gPSByZGV2LT5tYy5hZ3BfYmFzZTsKKwkJfQorCX0KKwlyID0gcmFkZW9uX21jX3NldHVwKHJkZXYpOworCWlmIChyKQorCQlyZXR1cm4gcjsKKwlyZXR1cm4gMDsKK30KKworaW50IHIxMDBfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwlpbnQgcjsKKworCS8qIFJlZ2lzdGVyIGRlYnVnZnMgZmlsZSBzcGVjaWZpYyB0byB0aGlzIGdyb3VwIG9mIGFzaWNzICovCisJcjEwMF9kZWJ1Z2ZzKHJkZXYpOworCS8qIERpc2FibGUgVkdBICovCisJcjEwMF92Z2FfcmVuZGVyX2Rpc2FibGUocmRldik7CisJLyogSW5pdGlhbGl6ZSBzY3JhdGNoIHJlZ2lzdGVycyAqLworCXJhZGVvbl9zY3JhdGNoX2luaXQocmRldik7CisJLyogSW5pdGlhbGl6ZSBzdXJmYWNlIHJlZ2lzdGVycyAqLworCXJhZGVvbl9zdXJmYWNlX2luaXQocmRldik7CisJLyogVE9ETzogZGlzYWJsZSBWR0EgbmVlZCB0byB1c2UgVkdBIHJlcXVlc3QgKi8KKwkvKiBCSU9TKi8KKwlpZiAoIXJhZGVvbl9nZXRfYmlvcyhyZGV2KSkgeworCQlpZiAoQVNJQ19JU19BVklWTyhyZGV2KSkKKwkJCXJldHVybiAtRUlOVkFMOworCX0KKwlpZiAocmRldi0+aXNfYXRvbV9iaW9zKSB7CisJCWRldl9lcnIocmRldi0+ZGV2LCAiRXhwZWN0aW5nIGNvbWJpb3MgZm9yIFJTNDAwL1JTNDgwIEdQVVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0gZWxzZSB7CisJCXIgPSByYWRlb25fY29tYmlvc19pbml0KHJkZXYpOworCQlpZiAocikKKwkJCXJldHVybiByOworCX0KKwkvKiBSZXNldCBncHUgYmVmb3JlIHBvc3Rpbmcgb3RoZXJ3aXNlIEFUT00gd2lsbCBlbnRlciBpbmZpbml0ZSBsb29wICovCisJaWYgKHJhZGVvbl9ncHVfcmVzZXQocmRldikpIHsKKwkJZGV2X3dhcm4ocmRldi0+ZGV2LAorCQkJIkdQVSByZXNldCBmYWlsZWQgISAoMHhFNDA9MHglMDhYLCAweDdDMD0weCUwOFgpXG4iLAorCQkJUlJFRzMyKFJfMDAwRTQwX1JCQk1fU1RBVFVTKSwKKwkJCVJSRUczMihSXzAwMDdDMF9DUF9TVEFUKSk7CisJfQorCS8qIGNoZWNrIGlmIGNhcmRzIGFyZSBwb3N0ZWQgb3Igbm90ICovCisJaWYgKCFyYWRlb25fY2FyZF9wb3N0ZWQocmRldikgJiYgcmRldi0+YmlvcykgeworCQlEUk1fSU5GTygiR1BVIG5vdCBwb3N0ZWQuIHBvc3Rpbmcgbm93Li4uXG4iKTsKKwkJcmFkZW9uX2NvbWJpb3NfYXNpY19pbml0KHJkZXYtPmRkZXYpOworCX0KKwkvKiBTZXQgYXNpYyBlcnJhdGEgKi8KKwlyMTAwX2VycmF0YShyZGV2KTsKKwkvKiBJbml0aWFsaXplIGNsb2NrcyAqLworCXJhZGVvbl9nZXRfY2xvY2tfaW5mbyhyZGV2LT5kZGV2KTsKKwkvKiBHZXQgdnJhbSBpbmZvcm1hdGlvbnMgKi8KKwlyMTAwX3ZyYW1faW5mbyhyZGV2KTsKKwkvKiBJbml0aWFsaXplIG1lbW9yeSBjb250cm9sbGVyIChhbHNvIHRlc3QgQUdQKSAqLworCXIgPSByMTAwX21jX2luaXQocmRldik7CisJaWYgKHIpCisJCXJldHVybiByOworCS8qIEZlbmNlIGRyaXZlciAqLworCXIgPSByYWRlb25fZmVuY2VfZHJpdmVyX2luaXQocmRldik7CisJaWYgKHIpCisJCXJldHVybiByOworCXIgPSByYWRlb25faXJxX2ttc19pbml0KHJkZXYpOworCWlmIChyKQorCQlyZXR1cm4gcjsKKwkvKiBNZW1vcnkgbWFuYWdlciAqLworCXIgPSByYWRlb25fb2JqZWN0X2luaXQocmRldik7CisJaWYgKHIpCisJCXJldHVybiByOworCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19QQ0kpIHsKKwkJciA9IHIxMDBfcGNpX2dhcnRfaW5pdChyZGV2KTsKKwkJaWYgKHIpCisJCQlyZXR1cm4gcjsKKwl9CisJcjEwMF9zZXRfc2FmZV9yZWdpc3RlcnMocmRldik7CisJcmRldi0+YWNjZWxfd29ya2luZyA9IHRydWU7CisJciA9IHIxMDBfc3RhcnR1cChyZGV2KTsKKwlpZiAocikgeworCQkvKiBTb21ldGhpbmdzIHdhbnQgd3JvbnQgd2l0aCB0aGUgYWNjZWwgaW5pdCBzdG9wIGFjY2VsICovCisJCWRldl9lcnIocmRldi0+ZGV2LCAiRGlzYWJsaW5nIEdQVSBhY2NlbGVyYXRpb25cbiIpOworCQlyMTAwX3N1c3BlbmQocmRldik7CisJCXIxMDBfY3BfZmluaShyZGV2KTsKKwkJcjEwMF93Yl9maW5pKHJkZXYpOworCQlyMTAwX2liX2ZpbmkocmRldik7CisJCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19QQ0kpCisJCQlyMTAwX3BjaV9nYXJ0X2ZpbmkocmRldik7CisJCXJhZGVvbl9pcnFfa21zX2ZpbmkocmRldik7CisJCXJkZXYtPmFjY2VsX3dvcmtpbmcgPSBmYWxzZTsKKwl9CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IxMDBfdHJhY2suaCBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjEwMF90cmFjay5oCmluZGV4IDcwYTgyZWQuLjBkYWYwZDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjEwMF90cmFjay5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjEwMF90cmFjay5oCkBAIC04NCw2ICs4NCw4IEBACiAJCSAgICAgICBzdHJ1Y3QgcmFkZW9uX2NzX3BhY2tldCAqcGt0LAogCQkgICAgICAgdW5zaWduZWQgaWR4LCB1bnNpZ25lZCByZWcpOwogCisKKwogc3RhdGljIGlubGluZSBpbnQgcjEwMF9yZWxvY19waXRjaF9vZmZzZXQoc3RydWN0IHJhZGVvbl9jc19wYXJzZXIgKnAsCiAJCQkJCSAgc3RydWN0IHJhZGVvbl9jc19wYWNrZXQgKnBrdCwKIAkJCQkJICB1bnNpZ25lZCBpZHgsCkBAIC05Myw5ICs5NSw3IEBACiAJdTMyIHRpbGVfZmxhZ3MgPSAwOwogCXUzMiB0bXA7CiAJc3RydWN0IHJhZGVvbl9jc19yZWxvYyAqcmVsb2M7Ci0Jc3RydWN0IHJhZGVvbl9jc19jaHVuayAqaWJfY2h1bms7Ci0KLQlpYl9jaHVuayA9ICZwLT5jaHVua3NbcC0+Y2h1bmtfaWJfaWR4XTsKKwl1MzIgdmFsdWU7CiAKIAlyID0gcjEwMF9jc19wYWNrZXRfbmV4dF9yZWxvYyhwLCAmcmVsb2MpOwogCWlmIChyKSB7CkBAIC0xMDQsNyArMTA0LDggQEAKIAkJcjEwMF9jc19kdW1wX3BhY2tldChwLCBwa3QpOwogCQlyZXR1cm4gcjsKIAl9Ci0JdG1wID0gaWJfY2h1bmstPmtkYXRhW2lkeF0gJiAweDAwM2ZmZmZmOworCXZhbHVlID0gcmFkZW9uX2dldF9pYl92YWx1ZShwLCBpZHgpOworCXRtcCA9IHZhbHVlICYgMHgwMDNmZmZmZjsKIAl0bXAgKz0gKCgodTMyKXJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpID4+IDEwKTsKIAogCWlmIChyZWxvYy0+bG9iai50aWxpbmdfZmxhZ3MgJiBSQURFT05fVElMSU5HX01BQ1JPKQpAQCAtMTE5LDYgKzEyMCw2NCBAQAogCX0KIAogCXRtcCB8PSB0aWxlX2ZsYWdzOwotCXAtPmliLT5wdHJbaWR4XSA9IChpYl9jaHVuay0+a2RhdGFbaWR4XSAmIDB4M2ZjMDAwMDApIHwgdG1wOworCXAtPmliLT5wdHJbaWR4XSA9ICh2YWx1ZSAmIDB4M2ZjMDAwMDApIHwgdG1wOwogCXJldHVybiAwOwogfQorCitzdGF0aWMgaW5saW5lIGludCByMTAwX3BhY2tldDNfbG9hZF92YnBudHIoc3RydWN0IHJhZGVvbl9jc19wYXJzZXIgKnAsCisJCQkJCSAgIHN0cnVjdCByYWRlb25fY3NfcGFja2V0ICpwa3QsCisJCQkJCSAgIGludCBpZHgpCit7CisJdW5zaWduZWQgYywgaTsKKwlzdHJ1Y3QgcmFkZW9uX2NzX3JlbG9jICpyZWxvYzsKKwlzdHJ1Y3QgcjEwMF9jc190cmFjayAqdHJhY2s7CisJaW50IHIgPSAwOworCXZvbGF0aWxlIHVpbnQzMl90ICppYjsKKwl1MzIgaWR4X3ZhbHVlOworCisJaWIgPSBwLT5pYi0+cHRyOworCXRyYWNrID0gKHN0cnVjdCByMTAwX2NzX3RyYWNrICopcC0+dHJhY2s7CisJYyA9IHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaWR4KyspICYgMHgxRjsKKwl0cmFjay0+bnVtX2FycmF5cyA9IGM7CisJZm9yIChpID0gMDsgaSA8IChjIC0gMSk7IGkrPTIsIGlkeCs9MykgeworCQlyID0gcjEwMF9jc19wYWNrZXRfbmV4dF9yZWxvYyhwLCAmcmVsb2MpOworCQlpZiAocikgeworCQkJRFJNX0VSUk9SKCJObyByZWxvYyBmb3IgcGFja2V0MyAlZFxuIiwKKwkJCQkgIHBrdC0+b3Bjb2RlKTsKKwkJCXIxMDBfY3NfZHVtcF9wYWNrZXQocCwgcGt0KTsKKwkJCXJldHVybiByOworCQl9CisJCWlkeF92YWx1ZSA9IHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaWR4KTsKKwkJaWJbaWR4KzFdID0gcmFkZW9uX2dldF9pYl92YWx1ZShwLCBpZHggKyAxKSArICgodTMyKXJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpOworCisJCXRyYWNrLT5hcnJheXNbaSArIDBdLmVzaXplID0gaWR4X3ZhbHVlID4+IDg7CisJCXRyYWNrLT5hcnJheXNbaSArIDBdLnJvYmogPSByZWxvYy0+cm9iajsKKwkJdHJhY2stPmFycmF5c1tpICsgMF0uZXNpemUgJj0gMHg3RjsKKwkJciA9IHIxMDBfY3NfcGFja2V0X25leHRfcmVsb2MocCwgJnJlbG9jKTsKKwkJaWYgKHIpIHsKKwkJCURSTV9FUlJPUigiTm8gcmVsb2MgZm9yIHBhY2tldDMgJWRcbiIsCisJCQkJICBwa3QtPm9wY29kZSk7CisJCQlyMTAwX2NzX2R1bXBfcGFja2V0KHAsIHBrdCk7CisJCQlyZXR1cm4gcjsKKwkJfQorCQlpYltpZHgrMl0gPSByYWRlb25fZ2V0X2liX3ZhbHVlKHAsIGlkeCArIDIpICsgKCh1MzIpcmVsb2MtPmxvYmouZ3B1X29mZnNldCk7CisJCXRyYWNrLT5hcnJheXNbaSArIDFdLnJvYmogPSByZWxvYy0+cm9iajsKKwkJdHJhY2stPmFycmF5c1tpICsgMV0uZXNpemUgPSBpZHhfdmFsdWUgPj4gMjQ7CisJCXRyYWNrLT5hcnJheXNbaSArIDFdLmVzaXplICY9IDB4N0Y7CisJfQorCWlmIChjICYgMSkgeworCQlyID0gcjEwMF9jc19wYWNrZXRfbmV4dF9yZWxvYyhwLCAmcmVsb2MpOworCQlpZiAocikgeworCQkJRFJNX0VSUk9SKCJObyByZWxvYyBmb3IgcGFja2V0MyAlZFxuIiwKKwkJCQkJICBwa3QtPm9wY29kZSk7CisJCQlyMTAwX2NzX2R1bXBfcGFja2V0KHAsIHBrdCk7CisJCQlyZXR1cm4gcjsKKwkJfQorCQlpZHhfdmFsdWUgPSByYWRlb25fZ2V0X2liX3ZhbHVlKHAsIGlkeCk7CisJCWliW2lkeCsxXSA9IHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaWR4ICsgMSkgKyAoKHUzMilyZWxvYy0+bG9iai5ncHVfb2Zmc2V0KTsKKwkJdHJhY2stPmFycmF5c1tpICsgMF0ucm9iaiA9IHJlbG9jLT5yb2JqOworCQl0cmFjay0+YXJyYXlzW2kgKyAwXS5lc2l6ZSA9IGlkeF92YWx1ZSA+PiA4OworCQl0cmFjay0+YXJyYXlzW2kgKyAwXS5lc2l6ZSAmPSAweDdGOworCX0KKwlyZXR1cm4gcjsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjEwMGQuaCBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjEwMGQuaAppbmRleCBjNGIyNTdlLi5kZjI5YTYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IxMDBkLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMTAwZC5oCkBAIC0zODEsNiArMzgxLDI0IEBACiAjZGVmaW5lICAgU18wMDAwNTRfVkNSVENfSURYX01BU1RFUih4KSAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDdGKSA8PCAyNCkKICNkZWZpbmUgICBHXzAwMDA1NF9WQ1JUQ19JRFhfTUFTVEVSKHgpICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNCkgJiAweDdGKQogI2RlZmluZSAgIENfMDAwMDU0X1ZDUlRDX0lEWF9NQVNURVIgICAgICAgICAgICAgICAgICAgIDB4ODBGRkZGRkYKKyNkZWZpbmUgUl8wMDAxNDhfTUNfRkJfTE9DQVRJT04gICAgICAgICAgICAgICAgICAgICAgMHgwMDAxNDgKKyNkZWZpbmUgICBTXzAwMDE0OF9NQ19GQl9TVEFSVCh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RkZGRikgPDwgMCkKKyNkZWZpbmUgICBHXzAwMDE0OF9NQ19GQl9TVEFSVCh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4RkZGRikKKyNkZWZpbmUgICBDXzAwMDE0OF9NQ19GQl9TVEFSVCAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkYwMDAwCisjZGVmaW5lICAgU18wMDAxNDhfTUNfRkJfVE9QKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweEZGRkYpIDw8IDE2KQorI2RlZmluZSAgIEdfMDAwMTQ4X01DX0ZCX1RPUCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDE2KSAmIDB4RkZGRikKKyNkZWZpbmUgICBDXzAwMDE0OF9NQ19GQl9UT1AgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBGRkZGCisjZGVmaW5lIFJfMDAwMTRDX01DX0FHUF9MT0NBVElPTiAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTRDCisjZGVmaW5lICAgU18wMDAxNENfTUNfQUdQX1NUQVJUKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweEZGRkYpIDw8IDApCisjZGVmaW5lICAgR18wMDAxNENfTUNfQUdQX1NUQVJUKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweEZGRkYpCisjZGVmaW5lICAgQ18wMDAxNENfTUNfQUdQX1NUQVJUICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGMDAwMAorI2RlZmluZSAgIFNfMDAwMTRDX01DX0FHUF9UT1AoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhGRkZGKSA8PCAxNikKKyNkZWZpbmUgICBHXzAwMDE0Q19NQ19BR1BfVE9QKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNikgJiAweEZGRkYpCisjZGVmaW5lICAgQ18wMDAxNENfTUNfQUdQX1RPUCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwRkZGRgorI2RlZmluZSBSXzAwMDE3MF9BR1BfQkFTRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDE3MAorI2RlZmluZSAgIFNfMDAwMTcwX0FHUF9CQVNFX0FERFIoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhGRkZGRkZGRikgPDwgMCkKKyNkZWZpbmUgICBHXzAwMDE3MF9BR1BfQkFTRV9BRERSKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4RkZGRkZGRkYpCisjZGVmaW5lICAgQ18wMDAxNzBfQUdQX0JBU0VfQUREUiAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAogI2RlZmluZSBSXzAwMDIzQ19ESVNQTEFZX0JBU0VfQUREUiAgICAgICAgICAgICAgICAgICAweDAwMDIzQwogI2RlZmluZSAgIFNfMDAwMjNDX0RJU1BMQVlfQkFTRV9BRERSKHgpICAgICAgICAgICAgICAgICgoKHgpICYgMHhGRkZGRkZGRikgPDwgMCkKICNkZWZpbmUgICBHXzAwMDIzQ19ESVNQTEFZX0JBU0VfQUREUih4KSAgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4RkZGRkZGRkYpCkBAIC00MDMsMjUgKzQyMSwyNSBAQAogI2RlZmluZSAgIFNfMDAwMzYwX0NVUjJfTE9DSyh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAzMSkKICNkZWZpbmUgICBHXzAwMDM2MF9DVVIyX0xPQ0soeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAzMSkgJiAweDEpCiAjZGVmaW5lICAgQ18wMDAzNjBfQ1VSMl9MT0NLICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg3RkZGRkZGRgotI2RlZmluZSBSXzAwMDNDMF9HRU5NT19XVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDNDMAotI2RlZmluZSAgIFNfMDAwM0MwX0dFTk1PX01PTk9fQUREUkVTU19CKHgpICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAwKQotI2RlZmluZSAgIEdfMDAwM0MwX0dFTk1PX01PTk9fQUREUkVTU19CKHgpICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHgxKQotI2RlZmluZSAgIENfMDAwM0MwX0dFTk1PX01PTk9fQUREUkVTU19CICAgICAgICAgICAgICAgIDB4RkZGRkZGRkUKLSNkZWZpbmUgICBTXzAwMDNDMF9WR0FfUkFNX0VOKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMSkKLSNkZWZpbmUgICBHXzAwMDNDMF9WR0FfUkFNX0VOKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxKSAmIDB4MSkKLSNkZWZpbmUgICBDXzAwMDNDMF9WR0FfUkFNX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZECi0jZGVmaW5lICAgU18wMDAzQzBfVkdBX0NLU0VMKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDMpIDw8IDIpCi0jZGVmaW5lICAgR18wMDAzQzBfVkdBX0NLU0VMKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMikgJiAweDMpCi0jZGVmaW5lICAgQ18wMDAzQzBfVkdBX0NLU0VMICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGMwotI2RlZmluZSAgIFNfMDAwM0MwX09ERF9FVkVOX01EX1BHU0VMKHgpICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCA1KQotI2RlZmluZSAgIEdfMDAwM0MwX09ERF9FVkVOX01EX1BHU0VMKHgpICAgICAgICAgICAgICAgICgoKHgpID4+IDUpICYgMHgxKQotI2RlZmluZSAgIENfMDAwM0MwX09ERF9FVkVOX01EX1BHU0VMICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGREYKLSNkZWZpbmUgICBTXzAwMDNDMF9WR0FfSFNZTkNfUE9MKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgNikKLSNkZWZpbmUgICBHXzAwMDNDMF9WR0FfSFNZTkNfUE9MKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiA2KSAmIDB4MSkKLSNkZWZpbmUgICBDXzAwMDNDMF9WR0FfSFNZTkNfUE9MICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkJGCi0jZGVmaW5lICAgU18wMDAzQzBfVkdBX1ZTWU5DX1BPTCh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDcpCi0jZGVmaW5lICAgR18wMDAzQzBfVkdBX1ZTWU5DX1BPTCh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gNykgJiAweDEpCi0jZGVmaW5lICAgQ18wMDAzQzBfVkdBX1ZTWU5DX1BPTCAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkY3RgorI2RlZmluZSBSXzAwMDNDMl9HRU5NT19XVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDNDMAorI2RlZmluZSAgIFNfMDAwM0MyX0dFTk1PX01PTk9fQUREUkVTU19CKHgpICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAwKQorI2RlZmluZSAgIEdfMDAwM0MyX0dFTk1PX01PTk9fQUREUkVTU19CKHgpICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHgxKQorI2RlZmluZSAgIENfMDAwM0MyX0dFTk1PX01PTk9fQUREUkVTU19CICAgICAgICAgICAgICAgIDB4RkUKKyNkZWZpbmUgICBTXzAwMDNDMl9WR0FfUkFNX0VOKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMSkKKyNkZWZpbmUgICBHXzAwMDNDMl9WR0FfUkFNX0VOKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDNDMl9WR0FfUkFNX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAweEZECisjZGVmaW5lICAgU18wMDAzQzJfVkdBX0NLU0VMKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDMpIDw8IDIpCisjZGVmaW5lICAgR18wMDAzQzJfVkdBX0NLU0VMKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMikgJiAweDMpCisjZGVmaW5lICAgQ18wMDAzQzJfVkdBX0NLU0VMICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGMworI2RlZmluZSAgIFNfMDAwM0MyX09ERF9FVkVOX01EX1BHU0VMKHgpICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCA1KQorI2RlZmluZSAgIEdfMDAwM0MyX09ERF9FVkVOX01EX1BHU0VMKHgpICAgICAgICAgICAgICAgICgoKHgpID4+IDUpICYgMHgxKQorI2RlZmluZSAgIENfMDAwM0MyX09ERF9FVkVOX01EX1BHU0VMICAgICAgICAgICAgICAgICAgIDB4REYKKyNkZWZpbmUgICBTXzAwMDNDMl9WR0FfSFNZTkNfUE9MKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgNikKKyNkZWZpbmUgICBHXzAwMDNDMl9WR0FfSFNZTkNfUE9MKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiA2KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDNDMl9WR0FfSFNZTkNfUE9MICAgICAgICAgICAgICAgICAgICAgICAweEJGCisjZGVmaW5lICAgU18wMDAzQzJfVkdBX1ZTWU5DX1BPTCh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDcpCisjZGVmaW5lICAgR18wMDAzQzJfVkdBX1ZTWU5DX1BPTCh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gNykgJiAweDEpCisjZGVmaW5lICAgQ18wMDAzQzJfVkdBX1ZTWU5DX1BPTCAgICAgICAgICAgICAgICAgICAgICAgMHg3RgogI2RlZmluZSBSXzAwMDNGOF9DUlRDMl9HRU5fQ05UTCAgICAgICAgICAgICAgICAgICAgICAweDAwMDNGOAogI2RlZmluZSAgIFNfMDAwM0Y4X0NSVEMyX0RCTF9TQ0FOX0VOKHgpICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAwKQogI2RlZmluZSAgIEdfMDAwM0Y4X0NSVEMyX0RCTF9TQ0FOX0VOKHgpICAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHgxKQpAQCAtNTQ1LDYgKzU2Myw0NiBAQAogI2RlZmluZSAgIFNfMDAwNzc0X1NDUkFUQ0hfQUREUih4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHg3RkZGRkZGKSA8PCA1KQogI2RlZmluZSAgIEdfMDAwNzc0X1NDUkFUQ0hfQUREUih4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDUpICYgMHg3RkZGRkZGKQogI2RlZmluZSAgIENfMDAwNzc0X1NDUkFUQ0hfQUREUiAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUYKKyNkZWZpbmUgUl8wMDA3QzBfQ1BfU1RBVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA3QzAKKyNkZWZpbmUgICBTXzAwMDdDMF9NUlVfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMCkKKyNkZWZpbmUgICBHXzAwMDdDMF9NUlVfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9NUlVfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZFCisjZGVmaW5lICAgU18wMDA3QzBfTVdVX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDEpCisjZGVmaW5lICAgR18wMDA3QzBfTVdVX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDA3QzBfTVdVX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRAorI2RlZmluZSAgIFNfMDAwN0MwX1JTSVVfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyKQorI2RlZmluZSAgIEdfMDAwN0MwX1JTSVVfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDIpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX1JTSVVfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkIKKyNkZWZpbmUgICBTXzAwMDdDMF9SQ0lVX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMykKKyNkZWZpbmUgICBHXzAwMDdDMF9SQ0lVX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAzKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9SQ0lVX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkY3CisjZGVmaW5lICAgU18wMDA3QzBfQ1NGX1BSSU1BUllfQlVTWSh4KSAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDkpCisjZGVmaW5lICAgR18wMDA3QzBfQ1NGX1BSSU1BUllfQlVTWSh4KSAgICAgICAgICAgICAgICAgKCgoeCkgPj4gOSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDA3QzBfQ1NGX1BSSU1BUllfQlVTWSAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkRGRgorI2RlZmluZSAgIFNfMDAwN0MwX0NTRl9JTkRJUkVDVF9CVVNZKHgpICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxMCkKKyNkZWZpbmUgICBHXzAwMDdDMF9DU0ZfSU5ESVJFQ1RfQlVTWSh4KSAgICAgICAgICAgICAgICAoKCh4KSA+PiAxMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDA3QzBfQ1NGX0lORElSRUNUX0JVU1kgICAgICAgICAgICAgICAgICAgMHhGRkZGRkJGRgorI2RlZmluZSAgIFNfMDAwN0MwX0NTUV9QUklNQVJZX0JVU1koeCkgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxMSkKKyNkZWZpbmUgICBHXzAwMDdDMF9DU1FfUFJJTUFSWV9CVVNZKHgpICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxMSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDA3QzBfQ1NRX1BSSU1BUllfQlVTWSAgICAgICAgICAgICAgICAgICAgMHhGRkZGRjdGRgorI2RlZmluZSAgIFNfMDAwN0MwX0NTUV9JTkRJUkVDVF9CVVNZKHgpICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxMikKKyNkZWZpbmUgICBHXzAwMDdDMF9DU1FfSU5ESVJFQ1RfQlVTWSh4KSAgICAgICAgICAgICAgICAoKCh4KSA+PiAxMikgJiAweDEpCisjZGVmaW5lICAgQ18wMDA3QzBfQ1NRX0lORElSRUNUX0JVU1kgICAgICAgICAgICAgICAgICAgMHhGRkZGRUZGRgorI2RlZmluZSAgIFNfMDAwN0MwX0NTSV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxMykKKyNkZWZpbmUgICBHXzAwMDdDMF9DU0lfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxMykgJiAweDEpCisjZGVmaW5lICAgQ18wMDA3QzBfQ1NJX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGREZGRgorI2RlZmluZSAgIFNfMDAwN0MwX0dVSURNQV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyOCkKKyNkZWZpbmUgICBHXzAwMDdDMF9HVUlETUFfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyOCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDA3QzBfR1VJRE1BX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgMHhFRkZGRkZGRgorI2RlZmluZSAgIFNfMDAwN0MwX1ZJRERNQV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyOSkKKyNkZWZpbmUgICBHXzAwMDdDMF9WSURETUFfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyOSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDA3QzBfVklERE1BX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgMHhERkZGRkZGRgorI2RlZmluZSAgIFNfMDAwN0MwX0NNRFNUUk1fQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAzMCkKKyNkZWZpbmUgICBHXzAwMDdDMF9DTURTVFJNX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAzMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDA3QzBfQ01EU1RSTV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgMHhCRkZGRkZGRgorI2RlZmluZSAgIFNfMDAwN0MwX0NQX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAzMSkKKyNkZWZpbmUgICBHXzAwMDdDMF9DUF9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAzMSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDA3QzBfQ1BfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg3RkZGRkZGRgogI2RlZmluZSBSXzAwMEU0MF9SQkJNX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMEU0MAogI2RlZmluZSAgIFNfMDAwRTQwX0NNREZJRk9fQVZBSUwoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHg3RikgPDwgMCkKICNkZWZpbmUgICBHXzAwMEU0MF9DTURGSUZPX0FWQUlMKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4N0YpCkBAIC02MDQsNCArNjYyLDUzIEBACiAjZGVmaW5lICAgR18wMDBFNDBfR1VJX0FDVElWRSh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMzEpICYgMHgxKQogI2RlZmluZSAgIENfMDAwRTQwX0dVSV9BQ1RJVkUgICAgICAgICAgICAgICAgICAgICAgICAgIDB4N0ZGRkZGRkYKIAorCisjZGVmaW5lIFJfMDAwMDBEX1NDTEtfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBECisjZGVmaW5lICAgU18wMDAwMERfU0NMS19TUkNfU0VMKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDcpIDw8IDApCisjZGVmaW5lICAgR18wMDAwMERfU0NMS19TUkNfU0VMKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweDcpCisjZGVmaW5lICAgQ18wMDAwMERfU0NMS19TUkNfU0VMICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGOAorI2RlZmluZSAgIFNfMDAwMDBEX1RDTEtfU1JDX1NFTCh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHg3KSA8PCA4KQorI2RlZmluZSAgIEdfMDAwMDBEX1RDTEtfU1JDX1NFTCh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDgpICYgMHg3KQorI2RlZmluZSAgIENfMDAwMDBEX1RDTEtfU1JDX1NFTCAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkY4RkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9DUCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTYpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfQ1AoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTYpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX0NQICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRUZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9IRFAoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTcpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfSERQKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTcpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX0hEUCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGREZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9ESVNQKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTgpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfRElTUCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTgpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX0RJU1AgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGQkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9UT1AoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTkpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfVE9QKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTkpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX1RPUCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGN0ZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9FMih4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjApCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfRTIoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjApICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX0UyICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZFRkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9TRSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjEpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfU0UoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX1NFICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZERkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9JRENUKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjIpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfSURDVCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjIpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX0lEQ1QgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZCRkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9WSVAoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjMpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfVklQKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjMpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX1ZJUCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkY3RkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9SRSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjQpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfUkUoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjQpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX1JFICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkVGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9QQih4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjUpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfUEIoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjUpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX1BCICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkRGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9UQU0oeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjYpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfVEFNKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjYpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX1RBTSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkJGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9URE0oeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjcpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfVERNKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjcpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX1RETSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RjdGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9SQih4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjgpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfUkIoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjgpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX1JCICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RUZGRkZGRkYKKworCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjIwMC5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMjAwLmMKaW5kZXggNTY4Yzc0Yi4uZWI3NDBmYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMjAwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMjAwLmMKQEAgLTk2LDcgKzk2LDYgQEAKIAkJICAgICAgIHN0cnVjdCByYWRlb25fY3NfcGFja2V0ICpwa3QsCiAJCSAgICAgICB1bnNpZ25lZCBpZHgsIHVuc2lnbmVkIHJlZykKIHsKLQlzdHJ1Y3QgcmFkZW9uX2NzX2NodW5rICppYl9jaHVuazsKIAlzdHJ1Y3QgcmFkZW9uX2NzX3JlbG9jICpyZWxvYzsKIAlzdHJ1Y3QgcjEwMF9jc190cmFjayAqdHJhY2s7CiAJdm9sYXRpbGUgdWludDMyX3QgKmliOwpAQCAtMTA1LDExICsxMDQsMTEgQEAKIAlpbnQgaTsKIAlpbnQgZmFjZTsKIAl1MzIgdGlsZV9mbGFncyA9IDA7CisJdTMyIGlkeF92YWx1ZTsKIAogCWliID0gcC0+aWItPnB0cjsKLQlpYl9jaHVuayA9ICZwLT5jaHVua3NbcC0+Y2h1bmtfaWJfaWR4XTsKIAl0cmFjayA9IChzdHJ1Y3QgcjEwMF9jc190cmFjayAqKXAtPnRyYWNrOwotCisJaWR4X3ZhbHVlID0gcmFkZW9uX2dldF9pYl92YWx1ZShwLCBpZHgpOwogCXN3aXRjaCAocmVnKSB7CiAJY2FzZSBSQURFT05fQ1JUQ19HVUlfVFJJR19WTElORToKIAkJciA9IHIxMDBfY3NfcGFja2V0X3BhcnNlX3ZsaW5lKHApOwpAQCAtMTM3LDggKzEzNiw4IEBACiAJCQlyZXR1cm4gcjsKIAkJfQogCQl0cmFjay0+emIucm9iaiA9IHJlbG9jLT5yb2JqOwotCQl0cmFjay0+emIub2Zmc2V0ID0gaWJfY2h1bmstPmtkYXRhW2lkeF07Ci0JCWliW2lkeF0gPSBpYl9jaHVuay0+a2RhdGFbaWR4XSArICgodTMyKXJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpOworCQl0cmFjay0+emIub2Zmc2V0ID0gaWR4X3ZhbHVlOworCQlpYltpZHhdID0gaWR4X3ZhbHVlICsgKCh1MzIpcmVsb2MtPmxvYmouZ3B1X29mZnNldCk7CiAJCWJyZWFrOwogCWNhc2UgUkFERU9OX1JCM0RfQ09MT1JPRkZTRVQ6CiAJCXIgPSByMTAwX2NzX3BhY2tldF9uZXh0X3JlbG9jKHAsICZyZWxvYyk7CkBAIC0xNDksOCArMTQ4LDggQEAKIAkJCXJldHVybiByOwogCQl9CiAJCXRyYWNrLT5jYlswXS5yb2JqID0gcmVsb2MtPnJvYmo7Ci0JCXRyYWNrLT5jYlswXS5vZmZzZXQgPSBpYl9jaHVuay0+a2RhdGFbaWR4XTsKLQkJaWJbaWR4XSA9IGliX2NodW5rLT5rZGF0YVtpZHhdICsgKCh1MzIpcmVsb2MtPmxvYmouZ3B1X29mZnNldCk7CisJCXRyYWNrLT5jYlswXS5vZmZzZXQgPSBpZHhfdmFsdWU7CisJCWliW2lkeF0gPSBpZHhfdmFsdWUgKyAoKHUzMilyZWxvYy0+bG9iai5ncHVfb2Zmc2V0KTsKIAkJYnJlYWs7CiAJY2FzZSBSMjAwX1BQX1RYT0ZGU0VUXzA6CiAJY2FzZSBSMjAwX1BQX1RYT0ZGU0VUXzE6CkBAIC0xNjYsNyArMTY1LDcgQEAKIAkJCXIxMDBfY3NfZHVtcF9wYWNrZXQocCwgcGt0KTsKIAkJCXJldHVybiByOwogCQl9Ci0JCWliW2lkeF0gPSBpYl9jaHVuay0+a2RhdGFbaWR4XSArICgodTMyKXJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpOworCQlpYltpZHhdID0gaWR4X3ZhbHVlICsgKCh1MzIpcmVsb2MtPmxvYmouZ3B1X29mZnNldCk7CiAJCXRyYWNrLT50ZXh0dXJlc1tpXS5yb2JqID0gcmVsb2MtPnJvYmo7CiAJCWJyZWFrOwogCWNhc2UgUjIwMF9QUF9DVUJJQ19PRkZTRVRfRjFfMDoKQEAgLTIwOCwxMiArMjA3LDEyIEBACiAJCQlyMTAwX2NzX2R1bXBfcGFja2V0KHAsIHBrdCk7CiAJCQlyZXR1cm4gcjsKIAkJfQotCQl0cmFjay0+dGV4dHVyZXNbaV0uY3ViZV9pbmZvW2ZhY2UgLSAxXS5vZmZzZXQgPSBpYl9jaHVuay0+a2RhdGFbaWR4XTsKLQkJaWJbaWR4XSA9IGliX2NodW5rLT5rZGF0YVtpZHhdICsgKCh1MzIpcmVsb2MtPmxvYmouZ3B1X29mZnNldCk7CisJCXRyYWNrLT50ZXh0dXJlc1tpXS5jdWJlX2luZm9bZmFjZSAtIDFdLm9mZnNldCA9IGlkeF92YWx1ZTsKKwkJaWJbaWR4XSA9IGlkeF92YWx1ZSArICgodTMyKXJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpOwogCQl0cmFjay0+dGV4dHVyZXNbaV0uY3ViZV9pbmZvW2ZhY2UgLSAxXS5yb2JqID0gcmVsb2MtPnJvYmo7CiAJCWJyZWFrOwogCWNhc2UgUkFERU9OX1JFX1dJRFRIX0hFSUdIVDoKLQkJdHJhY2stPm1heHkgPSAoKGliX2NodW5rLT5rZGF0YVtpZHhdID4+IDE2KSAmIDB4N0ZGKTsKKwkJdHJhY2stPm1heHkgPSAoKGlkeF92YWx1ZSA+PiAxNikgJiAweDdGRik7CiAJCWJyZWFrOwogCWNhc2UgUkFERU9OX1JCM0RfQ09MT1JQSVRDSDoKIAkJciA9IHIxMDBfY3NfcGFja2V0X25leHRfcmVsb2MocCwgJnJlbG9jKTsKQEAgLTIyOSwxNyArMjI4LDE3IEBACiAJCWlmIChyZWxvYy0+bG9iai50aWxpbmdfZmxhZ3MgJiBSQURFT05fVElMSU5HX01JQ1JPKQogCQkJdGlsZV9mbGFncyB8PSBSQURFT05fQ09MT1JfTUlDUk9USUxFX0VOQUJMRTsKIAotCQl0bXAgPSBpYl9jaHVuay0+a2RhdGFbaWR4XSAmIH4oMHg3IDw8IDE2KTsKKwkJdG1wID0gaWR4X3ZhbHVlICYgfigweDcgPDwgMTYpOwogCQl0bXAgfD0gdGlsZV9mbGFnczsKIAkJaWJbaWR4XSA9IHRtcDsKIAotCQl0cmFjay0+Y2JbMF0ucGl0Y2ggPSBpYl9jaHVuay0+a2RhdGFbaWR4XSAmIFJBREVPTl9DT0xPUlBJVENIX01BU0s7CisJCXRyYWNrLT5jYlswXS5waXRjaCA9IGlkeF92YWx1ZSAmIFJBREVPTl9DT0xPUlBJVENIX01BU0s7CiAJCWJyZWFrOwogCWNhc2UgUkFERU9OX1JCM0RfREVQVEhQSVRDSDoKLQkJdHJhY2stPnpiLnBpdGNoID0gaWJfY2h1bmstPmtkYXRhW2lkeF0gJiBSQURFT05fREVQVEhQSVRDSF9NQVNLOworCQl0cmFjay0+emIucGl0Y2ggPSBpZHhfdmFsdWUgJiBSQURFT05fREVQVEhQSVRDSF9NQVNLOwogCQlicmVhazsKIAljYXNlIFJBREVPTl9SQjNEX0NOVEw6Ci0JCXN3aXRjaCAoKGliX2NodW5rLT5rZGF0YVtpZHhdID4+IFJBREVPTl9SQjNEX0NPTE9SX0ZPUk1BVF9TSElGVCkgJiAweDFmKSB7CisJCXN3aXRjaCAoKGlkeF92YWx1ZSA+PiBSQURFT05fUkIzRF9DT0xPUl9GT1JNQVRfU0hJRlQpICYgMHgxZikgewogCQljYXNlIDc6CiAJCWNhc2UgODoKIAkJY2FzZSA5OgpAQCAtMjU3LDE4ICsyNTYsMTggQEAKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJRFJNX0VSUk9SKCJJbnZhbGlkIGNvbG9yIGJ1ZmZlciBmb3JtYXQgKCVkKSAhXG4iLAotCQkJCSAgKChpYl9jaHVuay0+a2RhdGFbaWR4XSA+PiBSQURFT05fUkIzRF9DT0xPUl9GT1JNQVRfU0hJRlQpICYgMHgxZikpOworCQkJCSAgKChpZHhfdmFsdWUgPj4gUkFERU9OX1JCM0RfQ09MT1JfRk9STUFUX1NISUZUKSAmIDB4MWYpKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9Ci0JCWlmIChpYl9jaHVuay0+a2RhdGFbaWR4XSAmIFJBREVPTl9ERVBUSFhZX09GRlNFVF9FTkFCTEUpIHsKKwkJaWYgKGlkeF92YWx1ZSAmIFJBREVPTl9ERVBUSFhZX09GRlNFVF9FTkFCTEUpIHsKIAkJCURSTV9FUlJPUigiTm8gc3VwcG9ydCBmb3IgZGVwdGggeHkgb2Zmc2V0IGluIGttc1xuIik7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCi0JCXRyYWNrLT56X2VuYWJsZWQgPSAhIShpYl9jaHVuay0+a2RhdGFbaWR4XSAmIFJBREVPTl9aX0VOQUJMRSk7CisJCXRyYWNrLT56X2VuYWJsZWQgPSAhIShpZHhfdmFsdWUgJiBSQURFT05fWl9FTkFCTEUpOwogCQlicmVhazsKIAljYXNlIFJBREVPTl9SQjNEX1pTVEVOQ0lMQ05UTDoKLQkJc3dpdGNoIChpYl9jaHVuay0+a2RhdGFbaWR4XSAmIDB4ZikgeworCQlzd2l0Y2ggKGlkeF92YWx1ZSAmIDB4ZikgewogCQljYXNlIDA6CiAJCQl0cmFjay0+emIuY3BwID0gMjsKIAkJCWJyZWFrOwpAQCAtMjkyLDI3ICsyOTEsMjcgQEAKIAkJCXIxMDBfY3NfZHVtcF9wYWNrZXQocCwgcGt0KTsKIAkJCXJldHVybiByOwogCQl9Ci0JCWliW2lkeF0gPSBpYl9jaHVuay0+a2RhdGFbaWR4XSArICgodTMyKXJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpOworCQlpYltpZHhdID0gaWR4X3ZhbHVlICsgKCh1MzIpcmVsb2MtPmxvYmouZ3B1X29mZnNldCk7CiAJCWJyZWFrOwogCWNhc2UgUkFERU9OX1BQX0NOVEw6CiAJCXsKLQkJCXVpbnQzMl90IHRlbXAgPSBpYl9jaHVuay0+a2RhdGFbaWR4XSA+PiA0OworCQkJdWludDMyX3QgdGVtcCA9IGlkeF92YWx1ZSA+PiA0OwogCQkJZm9yIChpID0gMDsgaSA8IHRyYWNrLT5udW1fdGV4dHVyZTsgaSsrKQogCQkJCXRyYWNrLT50ZXh0dXJlc1tpXS5lbmFibGVkID0gISEodGVtcCAmICgxIDw8IGkpKTsKIAkJfQogCQlicmVhazsKIAljYXNlIFJBREVPTl9TRV9WRl9DTlRMOgotCQl0cmFjay0+dmFwX3ZmX2NudGwgPSBpYl9jaHVuay0+a2RhdGFbaWR4XTsKKwkJdHJhY2stPnZhcF92Zl9jbnRsID0gaWR4X3ZhbHVlOwogCQlicmVhazsKIAljYXNlIDB4MjEwYzoKIAkJLyogVkFQX1ZGX01BWF9WVFhfSU5EWCAqLwotCQl0cmFjay0+bWF4X2luZHggPSBpYl9jaHVuay0+a2RhdGFbaWR4XSAmIDB4MDBGRkZGRkZVTDsKKwkJdHJhY2stPm1heF9pbmR4ID0gaWR4X3ZhbHVlICYgMHgwMEZGRkZGRlVMOwogCQlicmVhazsKIAljYXNlIFIyMDBfU0VfVlRYX0ZNVF8wOgotCQl0cmFjay0+dnR4X3NpemUgPSByMjAwX2dldF92dHhfc2l6ZV8wKGliX2NodW5rLT5rZGF0YVtpZHhdKTsKKwkJdHJhY2stPnZ0eF9zaXplID0gcjIwMF9nZXRfdnR4X3NpemVfMChpZHhfdmFsdWUpOwogCQlicmVhazsKIAljYXNlIFIyMDBfU0VfVlRYX0ZNVF8xOgotCQl0cmFjay0+dnR4X3NpemUgKz0gcjIwMF9nZXRfdnR4X3NpemVfMShpYl9jaHVuay0+a2RhdGFbaWR4XSk7CisJCXRyYWNrLT52dHhfc2l6ZSArPSByMjAwX2dldF92dHhfc2l6ZV8xKGlkeF92YWx1ZSk7CiAJCWJyZWFrOwogCWNhc2UgUjIwMF9QUF9UWFNJWkVfMDoKIAljYXNlIFIyMDBfUFBfVFhTSVpFXzE6CkBAIC0zMjEsOCArMzIwLDggQEAKIAljYXNlIFIyMDBfUFBfVFhTSVpFXzQ6CiAJY2FzZSBSMjAwX1BQX1RYU0laRV81OgogCQlpID0gKHJlZyAtIFIyMDBfUFBfVFhTSVpFXzApIC8gMzI7Ci0JCXRyYWNrLT50ZXh0dXJlc1tpXS53aWR0aCA9IChpYl9jaHVuay0+a2RhdGFbaWR4XSAmIFJBREVPTl9URVhfVVNJWkVfTUFTSykgKyAxOwotCQl0cmFjay0+dGV4dHVyZXNbaV0uaGVpZ2h0ID0gKChpYl9jaHVuay0+a2RhdGFbaWR4XSAmIFJBREVPTl9URVhfVlNJWkVfTUFTSykgPj4gUkFERU9OX1RFWF9WU0laRV9TSElGVCkgKyAxOworCQl0cmFjay0+dGV4dHVyZXNbaV0ud2lkdGggPSAoaWR4X3ZhbHVlICYgUkFERU9OX1RFWF9VU0laRV9NQVNLKSArIDE7CisJCXRyYWNrLT50ZXh0dXJlc1tpXS5oZWlnaHQgPSAoKGlkeF92YWx1ZSAmIFJBREVPTl9URVhfVlNJWkVfTUFTSykgPj4gUkFERU9OX1RFWF9WU0laRV9TSElGVCkgKyAxOwogCQlicmVhazsKIAljYXNlIFIyMDBfUFBfVFhQSVRDSF8wOgogCWNhc2UgUjIwMF9QUF9UWFBJVENIXzE6CkBAIC0zMzEsNyArMzMwLDcgQEAKIAljYXNlIFIyMDBfUFBfVFhQSVRDSF80OgogCWNhc2UgUjIwMF9QUF9UWFBJVENIXzU6CiAJCWkgPSAocmVnIC0gUjIwMF9QUF9UWFBJVENIXzApIC8gMzI7Ci0JCXRyYWNrLT50ZXh0dXJlc1tpXS5waXRjaCA9IGliX2NodW5rLT5rZGF0YVtpZHhdICsgMzI7CisJCXRyYWNrLT50ZXh0dXJlc1tpXS5waXRjaCA9IGlkeF92YWx1ZSArIDMyOwogCQlicmVhazsKIAljYXNlIFIyMDBfUFBfVFhGSUxURVJfMDoKIAljYXNlIFIyMDBfUFBfVFhGSUxURVJfMToKQEAgLTM0MCwxMiArMzM5LDEyIEBACiAJY2FzZSBSMjAwX1BQX1RYRklMVEVSXzQ6CiAJY2FzZSBSMjAwX1BQX1RYRklMVEVSXzU6CiAJCWkgPSAocmVnIC0gUjIwMF9QUF9UWEZJTFRFUl8wKSAvIDMyOwotCQl0cmFjay0+dGV4dHVyZXNbaV0ubnVtX2xldmVscyA9ICgoaWJfY2h1bmstPmtkYXRhW2lkeF0gJiBSMjAwX01BWF9NSVBfTEVWRUxfTUFTSykKKwkJdHJhY2stPnRleHR1cmVzW2ldLm51bV9sZXZlbHMgPSAoKGlkeF92YWx1ZSAmIFIyMDBfTUFYX01JUF9MRVZFTF9NQVNLKQogCQkJCQkJID4+IFIyMDBfTUFYX01JUF9MRVZFTF9TSElGVCk7Ci0JCXRtcCA9IChpYl9jaHVuay0+a2RhdGFbaWR4XSA+PiAyMykgJiAweDc7CisJCXRtcCA9IChpZHhfdmFsdWUgPj4gMjMpICYgMHg3OwogCQlpZiAodG1wID09IDIgfHwgdG1wID09IDYpCiAJCQl0cmFjay0+dGV4dHVyZXNbaV0ucm91bmR1cF93ID0gZmFsc2U7Ci0JCXRtcCA9IChpYl9jaHVuay0+a2RhdGFbaWR4XSA+PiAyNykgJiAweDc7CisJCXRtcCA9IChpZHhfdmFsdWUgPj4gMjcpICYgMHg3OwogCQlpZiAodG1wID09IDIgfHwgdG1wID09IDYpCiAJCQl0cmFjay0+dGV4dHVyZXNbaV0ucm91bmR1cF9oID0gZmFsc2U7CiAJCWJyZWFrOwpAQCAtMzY0LDggKzM2Myw4IEBACiAJY2FzZSBSMjAwX1BQX1RYRk9STUFUX1hfNDoKIAljYXNlIFIyMDBfUFBfVFhGT1JNQVRfWF81OgogCQlpID0gKHJlZyAtIFIyMDBfUFBfVFhGT1JNQVRfWF8wKSAvIDMyOwotCQl0cmFjay0+dGV4dHVyZXNbaV0udHhkZXB0aCA9IGliX2NodW5rLT5rZGF0YVtpZHhdICYgMHg3OwotCQl0bXAgPSAoaWJfY2h1bmstPmtkYXRhW2lkeF0gPj4gMTYpICYgMHgzOworCQl0cmFjay0+dGV4dHVyZXNbaV0udHhkZXB0aCA9IGlkeF92YWx1ZSAmIDB4NzsKKwkJdG1wID0gKGlkeF92YWx1ZSA+PiAxNikgJiAweDM7CiAJCS8qIDJELCAzRCwgQ1VCRSAqLwogCQlzd2l0Y2ggKHRtcCkgewogCQljYXNlIDA6CkBAIC0zODksMTQgKzM4OCwxNCBAQAogCWNhc2UgUjIwMF9QUF9UWEZPUk1BVF80OgogCWNhc2UgUjIwMF9QUF9UWEZPUk1BVF81OgogCQlpID0gKHJlZyAtIFIyMDBfUFBfVFhGT1JNQVRfMCkgLyAzMjsKLQkJaWYgKGliX2NodW5rLT5rZGF0YVtpZHhdICYgUjIwMF9UWEZPUk1BVF9OT05fUE9XRVIyKSB7CisJCWlmIChpZHhfdmFsdWUgJiBSMjAwX1RYRk9STUFUX05PTl9QT1dFUjIpIHsKIAkJCXRyYWNrLT50ZXh0dXJlc1tpXS51c2VfcGl0Y2ggPSAxOwogCQl9IGVsc2UgewogCQkJdHJhY2stPnRleHR1cmVzW2ldLnVzZV9waXRjaCA9IDA7Ci0JCQl0cmFjay0+dGV4dHVyZXNbaV0ud2lkdGggPSAxIDw8ICgoaWJfY2h1bmstPmtkYXRhW2lkeF0gPj4gUkFERU9OX1RYRk9STUFUX1dJRFRIX1NISUZUKSAmIFJBREVPTl9UWEZPUk1BVF9XSURUSF9NQVNLKTsKLQkJCXRyYWNrLT50ZXh0dXJlc1tpXS5oZWlnaHQgPSAxIDw8ICgoaWJfY2h1bmstPmtkYXRhW2lkeF0gPj4gUkFERU9OX1RYRk9STUFUX0hFSUdIVF9TSElGVCkgJiBSQURFT05fVFhGT1JNQVRfSEVJR0hUX01BU0spOworCQkJdHJhY2stPnRleHR1cmVzW2ldLndpZHRoID0gMSA8PCAoKGlkeF92YWx1ZSA+PiBSQURFT05fVFhGT1JNQVRfV0lEVEhfU0hJRlQpICYgUkFERU9OX1RYRk9STUFUX1dJRFRIX01BU0spOworCQkJdHJhY2stPnRleHR1cmVzW2ldLmhlaWdodCA9IDEgPDwgKChpZHhfdmFsdWUgPj4gUkFERU9OX1RYRk9STUFUX0hFSUdIVF9TSElGVCkgJiBSQURFT05fVFhGT1JNQVRfSEVJR0hUX01BU0spOwogCQl9Ci0JCXN3aXRjaCAoKGliX2NodW5rLT5rZGF0YVtpZHhdICYgUkFERU9OX1RYRk9STUFUX0ZPUk1BVF9NQVNLKSkgeworCQlzd2l0Y2ggKChpZHhfdmFsdWUgJiBSQURFT05fVFhGT1JNQVRfRk9STUFUX01BU0spKSB7CiAJCWNhc2UgUjIwMF9UWEZPUk1BVF9JODoKIAkJY2FzZSBSMjAwX1RYRk9STUFUX1JHQjMzMjoKIAkJY2FzZSBSMjAwX1RYRk9STUFUX1k4OgpAQCAtNDI0LDggKzQyMyw4IEBACiAJCQl0cmFjay0+dGV4dHVyZXNbaV0uY3BwID0gNDsKIAkJCWJyZWFrOwogCQl9Ci0JCXRyYWNrLT50ZXh0dXJlc1tpXS5jdWJlX2luZm9bNF0ud2lkdGggPSAxIDw8ICgoaWJfY2h1bmstPmtkYXRhW2lkeF0gPj4gMTYpICYgMHhmKTsKLQkJdHJhY2stPnRleHR1cmVzW2ldLmN1YmVfaW5mb1s0XS5oZWlnaHQgPSAxIDw8ICgoaWJfY2h1bmstPmtkYXRhW2lkeF0gPj4gMjApICYgMHhmKTsKKwkJdHJhY2stPnRleHR1cmVzW2ldLmN1YmVfaW5mb1s0XS53aWR0aCA9IDEgPDwgKChpZHhfdmFsdWUgPj4gMTYpICYgMHhmKTsKKwkJdHJhY2stPnRleHR1cmVzW2ldLmN1YmVfaW5mb1s0XS5oZWlnaHQgPSAxIDw8ICgoaWR4X3ZhbHVlID4+IDIwKSAmIDB4Zik7CiAJCWJyZWFrOwogCWNhc2UgUjIwMF9QUF9DVUJJQ19GQUNFU18wOgogCWNhc2UgUjIwMF9QUF9DVUJJQ19GQUNFU18xOgpAQCAtNDMzLDcgKzQzMiw3IEBACiAJY2FzZSBSMjAwX1BQX0NVQklDX0ZBQ0VTXzM6CiAJY2FzZSBSMjAwX1BQX0NVQklDX0ZBQ0VTXzQ6CiAJY2FzZSBSMjAwX1BQX0NVQklDX0ZBQ0VTXzU6Ci0JCXRtcCA9IGliX2NodW5rLT5rZGF0YVtpZHhdOworCQl0bXAgPSBpZHhfdmFsdWU7CiAJCWkgPSAocmVnIC0gUjIwMF9QUF9DVUJJQ19GQUNFU18wKSAvIDMyOwogCQlmb3IgKGZhY2UgPSAwOyBmYWNlIDwgNDsgZmFjZSsrKSB7CiAJCQl0cmFjay0+dGV4dHVyZXNbaV0uY3ViZV9pbmZvW2ZhY2VdLndpZHRoID0gMSA8PCAoKHRtcCA+PiAoZmFjZSAqIDgpKSAmIDB4Zik7CkBAIC00NDgsOSArNDQ3LDggQEAKIAlyZXR1cm4gMDsKIH0KIAotaW50IHIyMDBfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3ZvaWQgcjIwMF9zZXRfc2FmZV9yZWdpc3RlcnMoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7CiAJcmRldi0+Y29uZmlnLnIxMDAucmVnX3NhZmVfYm0gPSByMjAwX3JlZ19zYWZlX2JtOwogCXJkZXYtPmNvbmZpZy5yMTAwLnJlZ19zYWZlX2JtX3NpemUgPSBBUlJBWV9TSVpFKHIyMDBfcmVnX3NhZmVfYm0pOwotCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMzAwLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IzMDAuYwppbmRleCBiYjE1MWVjLi5lMDhjNGE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IzMDAuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IzMDAuYwpAQCAtMzMsNDMgKzMzLDE2IEBACiAjaW5jbHVkZSAicmFkZW9uX2RybS5oIgogI2luY2x1ZGUgInIxMDBfdHJhY2suaCIKICNpbmNsdWRlICJyMzAwZC5oIgotCisjaW5jbHVkZSAicnYzNTBkLmgiCiAjaW5jbHVkZSAicjMwMF9yZWdfc2FmZS5oIgogCi0vKiByMzAwLHIzNTAscnYzNTAscnYzNzAscnYzODAgZGVwZW5kcyBvbiA6ICovCi12b2lkIHIxMDBfaGRwX3Jlc2V0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLWludCByMTAwX2NwX3Jlc2V0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLWludCByMTAwX3JiMmRfcmVzZXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotaW50IHIxMDBfY3BfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgdW5zaWduZWQgcmluZ19zaXplKTsKLWludCByMTAwX3BjaV9nYXJ0X2VuYWJsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci12b2lkIHIxMDBfbWNfc2V0dXAoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotdm9pZCByMTAwX21jX2Rpc2FibGVfY2xpZW50cyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci1pbnQgcjEwMF9ndWlfd2FpdF9mb3JfaWRsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci1pbnQgcjEwMF9jc19wYWNrZXRfcGFyc2Uoc3RydWN0IHJhZGVvbl9jc19wYXJzZXIgKnAsCi0JCQkgc3RydWN0IHJhZGVvbl9jc19wYWNrZXQgKnBrdCwKLQkJCSB1bnNpZ25lZCBpZHgpOwotaW50IHIxMDBfY3NfcGFja2V0X3BhcnNlX3ZsaW5lKHN0cnVjdCByYWRlb25fY3NfcGFyc2VyICpwKTsKLWludCByMTAwX2NzX3BhcnNlX3BhY2tldDAoc3RydWN0IHJhZGVvbl9jc19wYXJzZXIgKnAsCi0JCQkgIHN0cnVjdCByYWRlb25fY3NfcGFja2V0ICpwa3QsCi0JCQkgIGNvbnN0IHVuc2lnbmVkICphdXRoLCB1bnNpZ25lZCBuLAotCQkJICByYWRlb25fcGFja2V0MF9jaGVja190IGNoZWNrKTsKLWludCByMTAwX2NzX3RyYWNrX2NoZWNrX3BrdDNfaW5keF9idWZmZXIoc3RydWN0IHJhZGVvbl9jc19wYXJzZXIgKnAsCi0JCQkJCSBzdHJ1Y3QgcmFkZW9uX2NzX3BhY2tldCAqcGt0LAotCQkJCQkgc3RydWN0IHJhZGVvbl9vYmplY3QgKnJvYmopOwotCi0vKiBUaGlzIGZpbGVzIGdhdGhlciBmdW5jdGlvbnMgc3BlY2lmaWNzIHRvOgotICogcjMwMCxyMzUwLHJ2MzUwLHJ2MzcwLHJ2MzgwCi0gKgotICogU29tZSBvZiB0aGVzZSBmdW5jdGlvbnMgbWlnaHQgYmUgdXNlZCBieSBuZXdlciBBU0lDcy4KLSAqLwotdm9pZCByMzAwX2dwdV9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLWludCByMzAwX21jX3dhaXRfZm9yX2lkbGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotaW50IHJ2MzcwX2RlYnVnZnNfcGNpZV9nYXJ0X2luZm9faW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci0KKy8qIFRoaXMgZmlsZXMgZ2F0aGVyIGZ1bmN0aW9ucyBzcGVjaWZpY3MgdG86IHIzMDAscjM1MCxydjM1MCxydjM3MCxydjM4MCAqLwogCiAvKgogICogcnYzNzAscnYzODAgUENJRSBHQVJUCiAgKi8KK3N0YXRpYyBpbnQgcnYzNzBfZGVidWdmc19wY2llX2dhcnRfaW5mb19pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKKwogdm9pZCBydjM3MF9wY2llX2dhcnRfdGxiX2ZsdXNoKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewogCXVpbnQzMl90IHRtcDsKQEAgLTE4Miw1OSArMTU1LDYgQEAKIAlyYWRlb25fZ2FydF9maW5pKHJkZXYpOwogfQogCi0vKgotICogTUMKLSAqLwotaW50IHIzMDBfbWNfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKLXsKLQlpbnQgcjsKLQotCWlmIChyMTAwX2RlYnVnZnNfcmJibV9pbml0KHJkZXYpKSB7Ci0JCURSTV9FUlJPUigiRmFpbGVkIHRvIHJlZ2lzdGVyIGRlYnVnZnMgZmlsZSBmb3IgUkJCTSAhXG4iKTsKLQl9Ci0KLQlyMzAwX2dwdV9pbml0KHJkZXYpOwotCXIxMDBfcGNpX2dhcnRfZGlzYWJsZShyZGV2KTsKLQlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfUENJRSkgewotCQlydjM3MF9wY2llX2dhcnRfZGlzYWJsZShyZGV2KTsKLQl9Ci0KLQkvKiBTZXR1cCBHUFUgbWVtb3J5IHNwYWNlICovCi0JcmRldi0+bWMudnJhbV9sb2NhdGlvbiA9IDB4RkZGRkZGRkZVTDsKLQlyZGV2LT5tYy5ndHRfbG9jYXRpb24gPSAweEZGRkZGRkZGVUw7Ci0JaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX0FHUCkgewotCQlyID0gcmFkZW9uX2FncF9pbml0KHJkZXYpOwotCQlpZiAocikgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiW2RybV0gRGlzYWJsaW5nIEFHUFxuIik7Ci0JCQlyZGV2LT5mbGFncyAmPSB+UkFERU9OX0lTX0FHUDsKLQkJCXJkZXYtPm1jLmd0dF9zaXplID0gcmFkZW9uX2dhcnRfc2l6ZSAqIDEwMjQgKiAxMDI0OwotCQl9IGVsc2UgewotCQkJcmRldi0+bWMuZ3R0X2xvY2F0aW9uID0gcmRldi0+bWMuYWdwX2Jhc2U7Ci0JCX0KLQl9Ci0JciA9IHJhZGVvbl9tY19zZXR1cChyZGV2KTsKLQlpZiAocikgewotCQlyZXR1cm4gcjsKLQl9Ci0KLQkvKiBQcm9ncmFtIEdQVSBtZW1vcnkgc3BhY2UgKi8KLQlyMTAwX21jX2Rpc2FibGVfY2xpZW50cyhyZGV2KTsKLQlpZiAocjMwMF9tY193YWl0X2Zvcl9pZGxlKHJkZXYpKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIkZhaWxlZCB0byB3YWl0IE1DIGlkbGUgd2hpbGUgIgotCQkgICAgICAgInByb2dyYW1taW5nIHBpcGVzLiBCYWQgdGhpbmdzIG1pZ2h0IGhhcHBlbi5cbiIpOwotCX0KLQlyMTAwX21jX3NldHVwKHJkZXYpOwotCXJldHVybiAwOwotfQotCi12b2lkIHIzMDBfbWNfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKLXsKLX0KLQotCi0vKgotICogRmVuY2UgZW1pc3Npb24KLSAqLwogdm9pZCByMzAwX2ZlbmNlX3JpbmdfZW1pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwKIAkJCSAgc3RydWN0IHJhZGVvbl9mZW5jZSAqZmVuY2UpCiB7CkBAIC0yNjAsMTAgKzE4MCw2IEBACiAJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgUkFERU9OX1NXX0lOVF9GSVJFKTsKIH0KIAotCi0vKgotICogR2xvYmFsIEdQVSBmdW5jdGlvbnMKLSAqLwogaW50IHIzMDBfY29weV9kbWEoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsCiAJCSAgdWludDY0X3Qgc3JjX29mZnNldCwKIAkJICB1aW50NjRfdCBkc3Rfb2Zmc2V0LApAQCAtNTgyLDExICs0OTgsNiBAQAogCXIxMDBfdnJhbV9pbml0X3NpemVzKHJkZXYpOwogfQogCi0KLS8qCi0gKiBQQ0lFIExhbmVzCi0gKi8KLQogdm9pZCBydjM3MF9zZXRfcGNpZV9sYW5lcyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgaW50IGxhbmVzKQogewogCXVpbnQzMl90IGxpbmtfd2lkdGhfY250bCwgbWFzazsKQEAgLTY0NiwxMCArNTU3LDYgQEAKIAogfQogCi0KLS8qCi0gKiBEZWJ1Z2ZzIGluZm8KLSAqLwogI2lmIGRlZmluZWQoQ09ORklHX0RFQlVHX0ZTKQogc3RhdGljIGludCBydjM3MF9kZWJ1Z2ZzX3BjaWVfZ2FydF9pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqZGF0YSkKIHsKQEAgLTY4MCw3ICs1ODcsNyBAQAogfTsKICNlbmRpZgogCi1pbnQgcnYzNzBfZGVidWdmc19wY2llX2dhcnRfaW5mb19pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQorc3RhdGljIGludCBydjM3MF9kZWJ1Z2ZzX3BjaWVfZ2FydF9pbmZvX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7CiAjaWYgZGVmaW5lZChDT05GSUdfREVCVUdfRlMpCiAJcmV0dXJuIHJhZGVvbl9kZWJ1Z2ZzX2FkZF9maWxlcyhyZGV2LCBydjM3MF9wY2llX2dhcnRfaW5mb19saXN0LCAxKTsKQEAgLTY4OSwyNSArNTk2LDIyIEBACiAjZW5kaWYKIH0KIAotCi0vKgotICogQ1MgZnVuY3Rpb25zCi0gKi8KIHN0YXRpYyBpbnQgcjMwMF9wYWNrZXQwX2NoZWNrKHN0cnVjdCByYWRlb25fY3NfcGFyc2VyICpwLAogCQlzdHJ1Y3QgcmFkZW9uX2NzX3BhY2tldCAqcGt0LAogCQl1bnNpZ25lZCBpZHgsIHVuc2lnbmVkIHJlZykKIHsKLQlzdHJ1Y3QgcmFkZW9uX2NzX2NodW5rICppYl9jaHVuazsKIAlzdHJ1Y3QgcmFkZW9uX2NzX3JlbG9jICpyZWxvYzsKIAlzdHJ1Y3QgcjEwMF9jc190cmFjayAqdHJhY2s7CiAJdm9sYXRpbGUgdWludDMyX3QgKmliOwogCXVpbnQzMl90IHRtcCwgdGlsZV9mbGFncyA9IDA7CiAJdW5zaWduZWQgaTsKIAlpbnQgcjsKKwl1MzIgaWR4X3ZhbHVlOwogCiAJaWIgPSBwLT5pYi0+cHRyOwotCWliX2NodW5rID0gJnAtPmNodW5rc1twLT5jaHVua19pYl9pZHhdOwogCXRyYWNrID0gKHN0cnVjdCByMTAwX2NzX3RyYWNrICopcC0+dHJhY2s7CisJaWR4X3ZhbHVlID0gcmFkZW9uX2dldF9pYl92YWx1ZShwLCBpZHgpOworCiAJc3dpdGNoKHJlZykgewogCWNhc2UgQVZJVk9fRDFNT0RFX1ZMSU5FX1NUQVJUX0VORDoKIAljYXNlIFJBREVPTl9DUlRDX0dVSV9UUklHX1ZMSU5FOgpAQCAtNzM4LDggKzY0Miw4IEBACiAJCQlyZXR1cm4gcjsKIAkJfQogCQl0cmFjay0+Y2JbaV0ucm9iaiA9IHJlbG9jLT5yb2JqOwotCQl0cmFjay0+Y2JbaV0ub2Zmc2V0ID0gaWJfY2h1bmstPmtkYXRhW2lkeF07Ci0JCWliW2lkeF0gPSBpYl9jaHVuay0+a2RhdGFbaWR4XSArICgodTMyKXJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpOworCQl0cmFjay0+Y2JbaV0ub2Zmc2V0ID0gaWR4X3ZhbHVlOworCQlpYltpZHhdID0gaWR4X3ZhbHVlICsgKCh1MzIpcmVsb2MtPmxvYmouZ3B1X29mZnNldCk7CiAJCWJyZWFrOwogCWNhc2UgUjMwMF9aQl9ERVBUSE9GRlNFVDoKIAkJciA9IHIxMDBfY3NfcGFja2V0X25leHRfcmVsb2MocCwgJnJlbG9jKTsKQEAgLTc1MCw4ICs2NTQsOCBAQAogCQkJcmV0dXJuIHI7CiAJCX0KIAkJdHJhY2stPnpiLnJvYmogPSByZWxvYy0+cm9iajsKLQkJdHJhY2stPnpiLm9mZnNldCA9IGliX2NodW5rLT5rZGF0YVtpZHhdOwotCQlpYltpZHhdID0gaWJfY2h1bmstPmtkYXRhW2lkeF0gKyAoKHUzMilyZWxvYy0+bG9iai5ncHVfb2Zmc2V0KTsKKwkJdHJhY2stPnpiLm9mZnNldCA9IGlkeF92YWx1ZTsKKwkJaWJbaWR4XSA9IGlkeF92YWx1ZSArICgodTMyKXJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpOwogCQlicmVhazsKIAljYXNlIFIzMDBfVFhfT0ZGU0VUXzA6CiAJY2FzZSBSMzAwX1RYX09GRlNFVF8wKzQ6CkBAIC03NzcsMzIgKzY4MSwzMiBAQAogCQkJcjEwMF9jc19kdW1wX3BhY2tldChwLCBwa3QpOwogCQkJcmV0dXJuIHI7CiAJCX0KLQkJaWJbaWR4XSA9IGliX2NodW5rLT5rZGF0YVtpZHhdICsgKCh1MzIpcmVsb2MtPmxvYmouZ3B1X29mZnNldCk7CisJCWliW2lkeF0gPSBpZHhfdmFsdWUgKyAoKHUzMilyZWxvYy0+bG9iai5ncHVfb2Zmc2V0KTsKIAkJdHJhY2stPnRleHR1cmVzW2ldLnJvYmogPSByZWxvYy0+cm9iajsKIAkJYnJlYWs7CiAJLyogVHJhY2tlZCByZWdpc3RlcnMgKi8KIAljYXNlIDB4MjA4NDoKIAkJLyogVkFQX1ZGX0NOVEwgKi8KLQkJdHJhY2stPnZhcF92Zl9jbnRsID0gaWJfY2h1bmstPmtkYXRhW2lkeF07CisJCXRyYWNrLT52YXBfdmZfY250bCA9IGlkeF92YWx1ZTsKIAkJYnJlYWs7CiAJY2FzZSAweDIwQjQ6CiAJCS8qIFZBUF9WVFhfU0laRSAqLwotCQl0cmFjay0+dnR4X3NpemUgPSBpYl9jaHVuay0+a2RhdGFbaWR4XSAmIDB4N0Y7CisJCXRyYWNrLT52dHhfc2l6ZSA9IGlkeF92YWx1ZSAmIDB4N0Y7CiAJCWJyZWFrOwogCWNhc2UgMHgyMTM0OgogCQkvKiBWQVBfVkZfTUFYX1ZUWF9JTkRYICovCi0JCXRyYWNrLT5tYXhfaW5keCA9IGliX2NodW5rLT5rZGF0YVtpZHhdICYgMHgwMEZGRkZGRlVMOworCQl0cmFjay0+bWF4X2luZHggPSBpZHhfdmFsdWUgJiAweDAwRkZGRkZGVUw7CiAJCWJyZWFrOwogCWNhc2UgMHg0M0U0OgogCQkvKiBTQ19TQ0lTU09SMSAqLwotCQl0cmFjay0+bWF4eSA9ICgoaWJfY2h1bmstPmtkYXRhW2lkeF0gPj4gMTMpICYgMHgxRkZGKSArIDE7CisJCXRyYWNrLT5tYXh5ID0gKChpZHhfdmFsdWUgPj4gMTMpICYgMHgxRkZGKSArIDE7CiAJCWlmIChwLT5yZGV2LT5mYW1pbHkgPCBDSElQX1JWNTE1KSB7CiAJCQl0cmFjay0+bWF4eSAtPSAxNDQwOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgMHg0RTAwOgogCQkvKiBSQjNEX0NDVEwgKi8KLQkJdHJhY2stPm51bV9jYiA9ICgoaWJfY2h1bmstPmtkYXRhW2lkeF0gPj4gNSkgJiAweDMpICsgMTsKKwkJdHJhY2stPm51bV9jYiA9ICgoaWR4X3ZhbHVlID4+IDUpICYgMHgzKSArIDE7CiAJCWJyZWFrOwogCWNhc2UgMHg0RTM4OgogCWNhc2UgMHg0RTNDOgpAQCAtODI1LDEzICs3MjksMTMgQEAKIAkJaWYgKHJlbG9jLT5sb2JqLnRpbGluZ19mbGFncyAmIFJBREVPTl9USUxJTkdfTUlDUk8pCiAJCQl0aWxlX2ZsYWdzIHw9IFIzMDBfQ09MT1JfTUlDUk9USUxFX0VOQUJMRTsKIAotCQl0bXAgPSBpYl9jaHVuay0+a2RhdGFbaWR4XSAmIH4oMHg3IDw8IDE2KTsKKwkJdG1wID0gaWR4X3ZhbHVlICYgfigweDcgPDwgMTYpOwogCQl0bXAgfD0gdGlsZV9mbGFnczsKIAkJaWJbaWR4XSA9IHRtcDsKIAogCQlpID0gKHJlZyAtIDB4NEUzOCkgPj4gMjsKLQkJdHJhY2stPmNiW2ldLnBpdGNoID0gaWJfY2h1bmstPmtkYXRhW2lkeF0gJiAweDNGRkU7Ci0JCXN3aXRjaCAoKChpYl9jaHVuay0+a2RhdGFbaWR4XSA+PiAyMSkgJiAweEYpKSB7CisJCXRyYWNrLT5jYltpXS5waXRjaCA9IGlkeF92YWx1ZSAmIDB4M0ZGRTsKKwkJc3dpdGNoICgoKGlkeF92YWx1ZSA+PiAyMSkgJiAweEYpKSB7CiAJCWNhc2UgOToKIAkJY2FzZSAxMToKIAkJY2FzZSAxMjoKQEAgLTg1NCwxMyArNzU4LDEzIEBACiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCURSTV9FUlJPUigiSW52YWxpZCBjb2xvciBidWZmZXIgZm9ybWF0ICglZCkgIVxuIiwKLQkJCQkgICgoaWJfY2h1bmstPmtkYXRhW2lkeF0gPj4gMjEpICYgMHhGKSk7CisJCQkJICAoKGlkeF92YWx1ZSA+PiAyMSkgJiAweEYpKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgMHg0RjAwOgogCQkvKiBaQl9DTlRMICovCi0JCWlmIChpYl9jaHVuay0+a2RhdGFbaWR4XSAmIDIpIHsKKwkJaWYgKGlkeF92YWx1ZSAmIDIpIHsKIAkJCXRyYWNrLT56X2VuYWJsZWQgPSB0cnVlOwogCQl9IGVsc2UgewogCQkJdHJhY2stPnpfZW5hYmxlZCA9IGZhbHNlOwpAQCAtODY4LDcgKzc3Miw3IEBACiAJCWJyZWFrOwogCWNhc2UgMHg0RjEwOgogCQkvKiBaQl9GT1JNQVQgKi8KLQkJc3dpdGNoICgoaWJfY2h1bmstPmtkYXRhW2lkeF0gJiAweEYpKSB7CisJCXN3aXRjaCAoKGlkeF92YWx1ZSAmIDB4RikpIHsKIAkJY2FzZSAwOgogCQljYXNlIDE6CiAJCQl0cmFjay0+emIuY3BwID0gMjsKQEAgLTg3OCw3ICs3ODIsNyBAQAogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlEUk1fRVJST1IoIkludmFsaWQgeiBidWZmZXIgZm9ybWF0ICglZCkgIVxuIiwKLQkJCQkgIChpYl9jaHVuay0+a2RhdGFbaWR4XSAmIDB4RikpOworCQkJCSAgKGlkeF92YWx1ZSAmIDB4RikpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAkJYnJlYWs7CkBAIC04OTcsMTcgKzgwMSwxNyBAQAogCQlpZiAocmVsb2MtPmxvYmoudGlsaW5nX2ZsYWdzICYgUkFERU9OX1RJTElOR19NSUNSTykKIAkJCXRpbGVfZmxhZ3MgfD0gUjMwMF9ERVBUSE1JQ1JPVElMRV9USUxFRDs7CiAKLQkJdG1wID0gaWJfY2h1bmstPmtkYXRhW2lkeF0gJiB+KDB4NyA8PCAxNik7CisJCXRtcCA9IGlkeF92YWx1ZSAmIH4oMHg3IDw8IDE2KTsKIAkJdG1wIHw9IHRpbGVfZmxhZ3M7CiAJCWliW2lkeF0gPSB0bXA7CiAKLQkJdHJhY2stPnpiLnBpdGNoID0gaWJfY2h1bmstPmtkYXRhW2lkeF0gJiAweDNGRkM7CisJCXRyYWNrLT56Yi5waXRjaCA9IGlkeF92YWx1ZSAmIDB4M0ZGQzsKIAkJYnJlYWs7CiAJY2FzZSAweDQxMDQ6CiAJCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7CiAJCQlib29sIGVuYWJsZWQ7CiAKLQkJCWVuYWJsZWQgPSAhIShpYl9jaHVuay0+a2RhdGFbaWR4XSAmICgxIDw8IGkpKTsKKwkJCWVuYWJsZWQgPSAhIShpZHhfdmFsdWUgJiAoMSA8PCBpKSk7CiAJCQl0cmFjay0+dGV4dHVyZXNbaV0uZW5hYmxlZCA9IGVuYWJsZWQ7CiAJCX0KIAkJYnJlYWs7CkBAIC05MjksOSArODMzLDkgQEAKIAljYXNlIDB4NDRGQzoKIAkJLyogVFhfRk9STUFUMV9bMC0xNV0gKi8KIAkJaSA9IChyZWcgLSAweDQ0QzApID4+IDI7Ci0JCXRtcCA9IChpYl9jaHVuay0+a2RhdGFbaWR4XSA+PiAyNSkgJiAweDM7CisJCXRtcCA9IChpZHhfdmFsdWUgPj4gMjUpICYgMHgzOwogCQl0cmFjay0+dGV4dHVyZXNbaV0udGV4X2Nvb3JkX3R5cGUgPSB0bXA7Ci0JCXN3aXRjaCAoKGliX2NodW5rLT5rZGF0YVtpZHhdICYgMHgxRikpIHsKKwkJc3dpdGNoICgoaWR4X3ZhbHVlICYgMHgxRikpIHsKIAkJY2FzZSBSMzAwX1RYX0ZPUk1BVF9YODoKIAkJY2FzZSBSMzAwX1RYX0ZPUk1BVF9ZNFg0OgogCQljYXNlIFIzMDBfVFhfRk9STUFUX1ozWTNYMjoKQEAgLTk3MSw3ICs4NzUsNyBAQAogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlEUk1fRVJST1IoIkludmFsaWQgdGV4dHVyZSBmb3JtYXQgJXVcbiIsCi0JCQkJICAoaWJfY2h1bmstPmtkYXRhW2lkeF0gJiAweDFGKSk7CisJCQkJICAoaWR4X3ZhbHVlICYgMHgxRikpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCQlicmVhazsKIAkJfQpAQCAtOTk0LDExICs4OTgsMTEgQEAKIAljYXNlIDB4NDQzQzoKIAkJLyogVFhfRklMVEVSMF9bMC0xNV0gKi8KIAkJaSA9IChyZWcgLSAweDQ0MDApID4+IDI7Ci0JCXRtcCA9IGliX2NodW5rLT5rZGF0YVtpZHhdICYgMHg3OworCQl0bXAgPSBpZHhfdmFsdWUgJiAweDc7CiAJCWlmICh0bXAgPT0gMiB8fCB0bXAgPT0gNCB8fCB0bXAgPT0gNikgewogCQkJdHJhY2stPnRleHR1cmVzW2ldLnJvdW5kdXBfdyA9IGZhbHNlOwogCQl9Ci0JCXRtcCA9IChpYl9jaHVuay0+a2RhdGFbaWR4XSA+PiAzKSAmIDB4NzsKKwkJdG1wID0gKGlkeF92YWx1ZSA+PiAzKSAmIDB4NzsKIAkJaWYgKHRtcCA9PSAyIHx8IHRtcCA9PSA0IHx8IHRtcCA9PSA2KSB7CiAJCQl0cmFjay0+dGV4dHVyZXNbaV0ucm91bmR1cF9oID0gZmFsc2U7CiAJCX0KQEAgLTEwMjEsMTIgKzkyNSwxMiBAQAogCWNhc2UgMHg0NTNDOgogCQkvKiBUWF9GT1JNQVQyX1swLTE1XSAqLwogCQlpID0gKHJlZyAtIDB4NDUwMCkgPj4gMjsKLQkJdG1wID0gaWJfY2h1bmstPmtkYXRhW2lkeF0gJiAweDNGRkY7CisJCXRtcCA9IGlkeF92YWx1ZSAmIDB4M0ZGRjsKIAkJdHJhY2stPnRleHR1cmVzW2ldLnBpdGNoID0gdG1wICsgMTsKIAkJaWYgKHAtPnJkZXYtPmZhbWlseSA+PSBDSElQX1JWNTE1KSB7Ci0JCQl0bXAgPSAoKGliX2NodW5rLT5rZGF0YVtpZHhdID4+IDE1KSAmIDEpIDw8IDExOworCQkJdG1wID0gKChpZHhfdmFsdWUgPj4gMTUpICYgMSkgPDwgMTE7CiAJCQl0cmFjay0+dGV4dHVyZXNbaV0ud2lkdGhfMTEgPSB0bXA7Ci0JCQl0bXAgPSAoKGliX2NodW5rLT5rZGF0YVtpZHhdID4+IDE2KSAmIDEpIDw8IDExOworCQkJdG1wID0gKChpZHhfdmFsdWUgPj4gMTYpICYgMSkgPDwgMTE7CiAJCQl0cmFjay0+dGV4dHVyZXNbaV0uaGVpZ2h0XzExID0gdG1wOwogCQl9CiAJCWJyZWFrOwpAQCAtMTA0OCwxNSArOTUyLDE1IEBACiAJY2FzZSAweDQ0QkM6CiAJCS8qIFRYX0ZPUk1BVDBfWzAtMTVdICovCiAJCWkgPSAocmVnIC0gMHg0NDgwKSA+PiAyOwotCQl0bXAgPSBpYl9jaHVuay0+a2RhdGFbaWR4XSAmIDB4N0ZGOworCQl0bXAgPSBpZHhfdmFsdWUgJiAweDdGRjsKIAkJdHJhY2stPnRleHR1cmVzW2ldLndpZHRoID0gdG1wICsgMTsKLQkJdG1wID0gKGliX2NodW5rLT5rZGF0YVtpZHhdID4+IDExKSAmIDB4N0ZGOworCQl0bXAgPSAoaWR4X3ZhbHVlID4+IDExKSAmIDB4N0ZGOwogCQl0cmFjay0+dGV4dHVyZXNbaV0uaGVpZ2h0ID0gdG1wICsgMTsKLQkJdG1wID0gKGliX2NodW5rLT5rZGF0YVtpZHhdID4+IDI2KSAmIDB4RjsKKwkJdG1wID0gKGlkeF92YWx1ZSA+PiAyNikgJiAweEY7CiAJCXRyYWNrLT50ZXh0dXJlc1tpXS5udW1fbGV2ZWxzID0gdG1wOwotCQl0bXAgPSBpYl9jaHVuay0+a2RhdGFbaWR4XSAmICgxIDw8IDMxKTsKKwkJdG1wID0gaWR4X3ZhbHVlICYgKDEgPDwgMzEpOwogCQl0cmFjay0+dGV4dHVyZXNbaV0udXNlX3BpdGNoID0gISF0bXA7Ci0JCXRtcCA9IChpYl9jaHVuay0+a2RhdGFbaWR4XSA+PiAyMikgJiAweEY7CisJCXRtcCA9IChpZHhfdmFsdWUgPj4gMjIpICYgMHhGOwogCQl0cmFjay0+dGV4dHVyZXNbaV0udHhkZXB0aCA9IHRtcDsKIAkJYnJlYWs7CiAJY2FzZSBSMzAwX1pCX1pQQVNTX0FERFI6CkBAIC0xMDY3LDcgKzk3MSw3IEBACiAJCQlyMTAwX2NzX2R1bXBfcGFja2V0KHAsIHBrdCk7CiAJCQlyZXR1cm4gcjsKIAkJfQotCQlpYltpZHhdID0gaWJfY2h1bmstPmtkYXRhW2lkeF0gKyAoKHUzMilyZWxvYy0+bG9iai5ncHVfb2Zmc2V0KTsKKwkJaWJbaWR4XSA9IGlkeF92YWx1ZSArICgodTMyKXJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpOwogCQlicmVhazsKIAljYXNlIDB4NGJlODoKIAkJLyogdmFsaWQgcmVnaXN0ZXIgb25seSBvbiBSVjUzMCAqLwpAQCAtMTA4NSw2MCArOTg5LDIwIEBACiBzdGF0aWMgaW50IHIzMDBfcGFja2V0M19jaGVjayhzdHJ1Y3QgcmFkZW9uX2NzX3BhcnNlciAqcCwKIAkJCSAgICAgIHN0cnVjdCByYWRlb25fY3NfcGFja2V0ICpwa3QpCiB7Ci0Jc3RydWN0IHJhZGVvbl9jc19jaHVuayAqaWJfY2h1bms7Ci0KIAlzdHJ1Y3QgcmFkZW9uX2NzX3JlbG9jICpyZWxvYzsKIAlzdHJ1Y3QgcjEwMF9jc190cmFjayAqdHJhY2s7CiAJdm9sYXRpbGUgdWludDMyX3QgKmliOwogCXVuc2lnbmVkIGlkeDsKLQl1bnNpZ25lZCBpLCBjOwogCWludCByOwogCiAJaWIgPSBwLT5pYi0+cHRyOwotCWliX2NodW5rID0gJnAtPmNodW5rc1twLT5jaHVua19pYl9pZHhdOwogCWlkeCA9IHBrdC0+aWR4ICsgMTsKIAl0cmFjayA9IChzdHJ1Y3QgcjEwMF9jc190cmFjayAqKXAtPnRyYWNrOwogCXN3aXRjaChwa3QtPm9wY29kZSkgewogCWNhc2UgUEFDS0VUM18zRF9MT0FEX1ZCUE5UUjoKLQkJYyA9IGliX2NodW5rLT5rZGF0YVtpZHgrK10gJiAweDFGOwotCQl0cmFjay0+bnVtX2FycmF5cyA9IGM7Ci0JCWZvciAoaSA9IDA7IGkgPCAoYyAtIDEpOyBpKz0yLCBpZHgrPTMpIHsKLQkJCXIgPSByMTAwX2NzX3BhY2tldF9uZXh0X3JlbG9jKHAsICZyZWxvYyk7Ci0JCQlpZiAocikgewotCQkJCURSTV9FUlJPUigiTm8gcmVsb2MgZm9yIHBhY2tldDMgJWRcbiIsCi0JCQkJCSAgcGt0LT5vcGNvZGUpOwotCQkJCXIxMDBfY3NfZHVtcF9wYWNrZXQocCwgcGt0KTsKLQkJCQlyZXR1cm4gcjsKLQkJCX0KLQkJCWliW2lkeCsxXSA9IGliX2NodW5rLT5rZGF0YVtpZHgrMV0gKyAoKHUzMilyZWxvYy0+bG9iai5ncHVfb2Zmc2V0KTsKLQkJCXRyYWNrLT5hcnJheXNbaSArIDBdLnJvYmogPSByZWxvYy0+cm9iajsKLQkJCXRyYWNrLT5hcnJheXNbaSArIDBdLmVzaXplID0gaWJfY2h1bmstPmtkYXRhW2lkeF0gPj4gODsKLQkJCXRyYWNrLT5hcnJheXNbaSArIDBdLmVzaXplICY9IDB4N0Y7Ci0JCQlyID0gcjEwMF9jc19wYWNrZXRfbmV4dF9yZWxvYyhwLCAmcmVsb2MpOwotCQkJaWYgKHIpIHsKLQkJCQlEUk1fRVJST1IoIk5vIHJlbG9jIGZvciBwYWNrZXQzICVkXG4iLAotCQkJCQkgIHBrdC0+b3Bjb2RlKTsKLQkJCQlyMTAwX2NzX2R1bXBfcGFja2V0KHAsIHBrdCk7Ci0JCQkJcmV0dXJuIHI7Ci0JCQl9Ci0JCQlpYltpZHgrMl0gPSBpYl9jaHVuay0+a2RhdGFbaWR4KzJdICsgKCh1MzIpcmVsb2MtPmxvYmouZ3B1X29mZnNldCk7Ci0JCQl0cmFjay0+YXJyYXlzW2kgKyAxXS5yb2JqID0gcmVsb2MtPnJvYmo7Ci0JCQl0cmFjay0+YXJyYXlzW2kgKyAxXS5lc2l6ZSA9IGliX2NodW5rLT5rZGF0YVtpZHhdID4+IDI0OwotCQkJdHJhY2stPmFycmF5c1tpICsgMV0uZXNpemUgJj0gMHg3RjsKLQkJfQotCQlpZiAoYyAmIDEpIHsKLQkJCXIgPSByMTAwX2NzX3BhY2tldF9uZXh0X3JlbG9jKHAsICZyZWxvYyk7Ci0JCQlpZiAocikgewotCQkJCURSTV9FUlJPUigiTm8gcmVsb2MgZm9yIHBhY2tldDMgJWRcbiIsCi0JCQkJCSAgcGt0LT5vcGNvZGUpOwotCQkJCXIxMDBfY3NfZHVtcF9wYWNrZXQocCwgcGt0KTsKLQkJCQlyZXR1cm4gcjsKLQkJCX0KLQkJCWliW2lkeCsxXSA9IGliX2NodW5rLT5rZGF0YVtpZHgrMV0gKyAoKHUzMilyZWxvYy0+bG9iai5ncHVfb2Zmc2V0KTsKLQkJCXRyYWNrLT5hcnJheXNbaSArIDBdLnJvYmogPSByZWxvYy0+cm9iajsKLQkJCXRyYWNrLT5hcnJheXNbaSArIDBdLmVzaXplID0gaWJfY2h1bmstPmtkYXRhW2lkeF0gPj4gODsKLQkJCXRyYWNrLT5hcnJheXNbaSArIDBdLmVzaXplICY9IDB4N0Y7Ci0JCX0KKwkJciA9IHIxMDBfcGFja2V0M19sb2FkX3ZicG50cihwLCBwa3QsIGlkeCk7CisJCWlmIChyKQorCQkJcmV0dXJuIHI7CiAJCWJyZWFrOwogCWNhc2UgUEFDS0VUM19JTkRYX0JVRkZFUjoKIAkJciA9IHIxMDBfY3NfcGFja2V0X25leHRfcmVsb2MocCwgJnJlbG9jKTsKQEAgLTExNDcsNyArMTAxMSw3IEBACiAJCQlyMTAwX2NzX2R1bXBfcGFja2V0KHAsIHBrdCk7CiAJCQlyZXR1cm4gcjsKIAkJfQotCQlpYltpZHgrMV0gPSBpYl9jaHVuay0+a2RhdGFbaWR4KzFdICsgKCh1MzIpcmVsb2MtPmxvYmouZ3B1X29mZnNldCk7CisJCWliW2lkeCsxXSA9IHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaWR4ICsgMSkgKyAoKHUzMilyZWxvYy0+bG9iai5ncHVfb2Zmc2V0KTsKIAkJciA9IHIxMDBfY3NfdHJhY2tfY2hlY2tfcGt0M19pbmR4X2J1ZmZlcihwLCBwa3QsIHJlbG9jLT5yb2JqKTsKIAkJaWYgKHIpIHsKIAkJCXJldHVybiByOwpAQCAtMTE1OCwxMSArMTAyMiwxMSBAQAogCQkvKiBOdW1iZXIgb2YgZHdvcmRzIGlzIHZ0eF9zaXplICogKG51bV92ZXJ0aWNlcyAtIDEpCiAJCSAqIFBSSU1fV0FMSyBtdXN0IGJlIGVxdWFsIHRvIDMgdmVydGV4IGRhdGEgaW4gZW1iZWRkZWQKIAkJICogaW4gY21kIHN0cmVhbSAqLwotCQlpZiAoKChpYl9jaHVuay0+a2RhdGFbaWR4KzFdID4+IDQpICYgMHgzKSAhPSAzKSB7CisJCWlmICgoKHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaWR4ICsgMSkgPj4gNCkgJiAweDMpICE9IDMpIHsKIAkJCURSTV9FUlJPUigiUFJJTV9XQUxLIG11c3QgYmUgMyBmb3IgSU1NRCBkcmF3XG4iKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9Ci0JCXRyYWNrLT52YXBfdmZfY250bCA9IGliX2NodW5rLT5rZGF0YVtpZHgrMV07CisJCXRyYWNrLT52YXBfdmZfY250bCA9IHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaWR4ICsgMSk7CiAJCXRyYWNrLT5pbW1kX2R3b3JkcyA9IHBrdC0+Y291bnQgLSAxOwogCQlyID0gcjEwMF9jc190cmFja19jaGVjayhwLT5yZGV2LCB0cmFjayk7CiAJCWlmIChyKSB7CkBAIC0xMTczLDExICsxMDM3LDExIEBACiAJCS8qIE51bWJlciBvZiBkd29yZHMgaXMgdnR4X3NpemUgKiAobnVtX3ZlcnRpY2VzIC0gMSkKIAkJICogUFJJTV9XQUxLIG11c3QgYmUgZXF1YWwgdG8gMyB2ZXJ0ZXggZGF0YSBpbiBlbWJlZGRlZAogCQkgKiBpbiBjbWQgc3RyZWFtICovCi0JCWlmICgoKGliX2NodW5rLT5rZGF0YVtpZHhdID4+IDQpICYgMHgzKSAhPSAzKSB7CisJCWlmICgoKHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaWR4KSA+PiA0KSAmIDB4MykgIT0gMykgewogCQkJRFJNX0VSUk9SKCJQUklNX1dBTEsgbXVzdCBiZSAzIGZvciBJTU1EIGRyYXdcbiIpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KLQkJdHJhY2stPnZhcF92Zl9jbnRsID0gaWJfY2h1bmstPmtkYXRhW2lkeF07CisJCXRyYWNrLT52YXBfdmZfY250bCA9IHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaWR4KTsKIAkJdHJhY2stPmltbWRfZHdvcmRzID0gcGt0LT5jb3VudDsKIAkJciA9IHIxMDBfY3NfdHJhY2tfY2hlY2socC0+cmRldiwgdHJhY2spOwogCQlpZiAocikgewpAQCAtMTE4NSwyOCArMTA0OSwyOCBAQAogCQl9CiAJCWJyZWFrOwogCWNhc2UgUEFDS0VUM18zRF9EUkFXX1ZCVUY6Ci0JCXRyYWNrLT52YXBfdmZfY250bCA9IGliX2NodW5rLT5rZGF0YVtpZHggKyAxXTsKKwkJdHJhY2stPnZhcF92Zl9jbnRsID0gcmFkZW9uX2dldF9pYl92YWx1ZShwLCBpZHggKyAxKTsKIAkJciA9IHIxMDBfY3NfdHJhY2tfY2hlY2socC0+cmRldiwgdHJhY2spOwogCQlpZiAocikgewogCQkJcmV0dXJuIHI7CiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBQQUNLRVQzXzNEX0RSQVdfVkJVRl8yOgotCQl0cmFjay0+dmFwX3ZmX2NudGwgPSBpYl9jaHVuay0+a2RhdGFbaWR4XTsKKwkJdHJhY2stPnZhcF92Zl9jbnRsID0gcmFkZW9uX2dldF9pYl92YWx1ZShwLCBpZHgpOwogCQlyID0gcjEwMF9jc190cmFja19jaGVjayhwLT5yZGV2LCB0cmFjayk7CiAJCWlmIChyKSB7CiAJCQlyZXR1cm4gcjsKIAkJfQogCQlicmVhazsKIAljYXNlIFBBQ0tFVDNfM0RfRFJBV19JTkRYOgotCQl0cmFjay0+dmFwX3ZmX2NudGwgPSBpYl9jaHVuay0+a2RhdGFbaWR4ICsgMV07CisJCXRyYWNrLT52YXBfdmZfY250bCA9IHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaWR4ICsgMSk7CiAJCXIgPSByMTAwX2NzX3RyYWNrX2NoZWNrKHAtPnJkZXYsIHRyYWNrKTsKIAkJaWYgKHIpIHsKIAkJCXJldHVybiByOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgUEFDS0VUM18zRF9EUkFXX0lORFhfMjoKLQkJdHJhY2stPnZhcF92Zl9jbnRsID0gaWJfY2h1bmstPmtkYXRhW2lkeF07CisJCXRyYWNrLT52YXBfdmZfY250bCA9IHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaWR4KTsKIAkJciA9IHIxMDBfY3NfdHJhY2tfY2hlY2socC0+cmRldiwgdHJhY2spOwogCQlpZiAocikgewogCQkJcmV0dXJuIHI7CkBAIC0xMjY1LDEyICsxMTI5LDYgQEAKIAlyZGV2LT5jb25maWcucjMwMC5yZWdfc2FmZV9ibV9zaXplID0gQVJSQVlfU0laRShyMzAwX3JlZ19zYWZlX2JtKTsKIH0KIAotaW50IHIzMDBfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKLXsKLQlyMzAwX3NldF9yZWdfc2FmZShyZGV2KTsKLQlyZXR1cm4gMDsKLX0KLQogdm9pZCByMzAwX21jX3Byb2dyYW0oc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7CiAJc3RydWN0IHIxMDBfbWNfc2F2ZSBzYXZlOwpAQCAtMTMwNCwzICsxMTYyLDE5OCBAQAogCQlTXzAwMDE0OF9NQ19GQl9UT1AocmRldi0+bWMudnJhbV9lbmQgPj4gMTYpKTsKIAlyMTAwX21jX3Jlc3VtZShyZGV2LCAmc2F2ZSk7CiB9CisKK3ZvaWQgcjMwMF9jbG9ja19zdGFydHVwKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCXUzMiB0bXA7CisKKwlpZiAocmFkZW9uX2R5bmNsa3MgIT0gLTEgJiYgcmFkZW9uX2R5bmNsa3MpCisJCXJhZGVvbl9sZWdhY3lfc2V0X2Nsb2NrX2dhdGluZyhyZGV2LCAxKTsKKwkvKiBXZSBuZWVkIHRvIGZvcmNlIG9uIHNvbWUgb2YgdGhlIGJsb2NrICovCisJdG1wID0gUlJFRzMyX1BMTChSXzAwMDAwRF9TQ0xLX0NOVEwpOworCXRtcCB8PSBTXzAwMDAwRF9GT1JDRV9DUCgxKSB8IFNfMDAwMDBEX0ZPUkNFX1ZJUCgxKTsKKwlpZiAoKHJkZXYtPmZhbWlseSA9PSBDSElQX1JWMzUwKSB8fCAocmRldi0+ZmFtaWx5ID09IENISVBfUlYzODApKQorCQl0bXAgfD0gU18wMDAwMERfRk9SQ0VfVkFQKDEpOworCVdSRUczMl9QTEwoUl8wMDAwMERfU0NMS19DTlRMLCB0bXApOworfQorCitzdGF0aWMgaW50IHIzMDBfc3RhcnR1cChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwlpbnQgcjsKKworCXIzMDBfbWNfcHJvZ3JhbShyZGV2KTsKKwkvKiBSZXN1bWUgY2xvY2sgKi8KKwlyMzAwX2Nsb2NrX3N0YXJ0dXAocmRldik7CisJLyogSW5pdGlhbGl6ZSBHUFUgY29uZmlndXJhdGlvbiAoIyBwaXBlcywgLi4uKSAqLworCXIzMDBfZ3B1X2luaXQocmRldik7CisJLyogSW5pdGlhbGl6ZSBHQVJUIChpbml0aWFsaXplIGFmdGVyIFRUTSBzbyB3ZSBjYW4gYWxsb2NhdGUKKwkgKiBtZW1vcnkgdGhyb3VnaCBUVE0gYnV0IGZpbmFsaXplIGFmdGVyIFRUTSkgKi8KKwlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfUENJRSkgeworCQlyID0gcnYzNzBfcGNpZV9nYXJ0X2VuYWJsZShyZGV2KTsKKwkJaWYgKHIpCisJCQlyZXR1cm4gcjsKKwl9CisJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX1BDSSkgeworCQlyID0gcjEwMF9wY2lfZ2FydF9lbmFibGUocmRldik7CisJCWlmIChyKQorCQkJcmV0dXJuIHI7CisJfQorCS8qIEVuYWJsZSBJUlEgKi8KKwlyZGV2LT5pcnEuc3dfaW50ID0gdHJ1ZTsKKwlyMTAwX2lycV9zZXQocmRldik7CisJLyogMU0gcmluZyBidWZmZXIgKi8KKwlyID0gcjEwMF9jcF9pbml0KHJkZXYsIDEwMjQgKiAxMDI0KTsKKwlpZiAocikgeworCQlkZXZfZXJyKHJkZXYtPmRldiwgImZhaWxsZWQgaW5pdGlhbGl6aW5nIENQICglZCkuXG4iLCByKTsKKwkJcmV0dXJuIHI7CisJfQorCXIgPSByMTAwX3diX2luaXQocmRldik7CisJaWYgKHIpCisJCWRldl9lcnIocmRldi0+ZGV2LCAiZmFpbGxlZCBpbml0aWFsaXppbmcgV0IgKCVkKS5cbiIsIHIpOworCXIgPSByMTAwX2liX2luaXQocmRldik7CisJaWYgKHIpIHsKKwkJZGV2X2VycihyZGV2LT5kZXYsICJmYWlsbGVkIGluaXRpYWxpemluZyBJQiAoJWQpLlxuIiwgcik7CisJCXJldHVybiByOworCX0KKwlyZXR1cm4gMDsKK30KKworaW50IHIzMDBfcmVzdW1lKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCS8qIE1ha2Ugc3VyIEdBUlQgYXJlIG5vdCB3b3JraW5nICovCisJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX1BDSUUpCisJCXJ2MzcwX3BjaWVfZ2FydF9kaXNhYmxlKHJkZXYpOworCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19QQ0kpCisJCXIxMDBfcGNpX2dhcnRfZGlzYWJsZShyZGV2KTsKKwkvKiBSZXN1bWUgY2xvY2sgYmVmb3JlIGRvaW5nIHJlc2V0ICovCisJcjMwMF9jbG9ja19zdGFydHVwKHJkZXYpOworCS8qIFJlc2V0IGdwdSBiZWZvcmUgcG9zdGluZyBvdGhlcndpc2UgQVRPTSB3aWxsIGVudGVyIGluZmluaXRlIGxvb3AgKi8KKwlpZiAocmFkZW9uX2dwdV9yZXNldChyZGV2KSkgeworCQlkZXZfd2FybihyZGV2LT5kZXYsICJHUFUgcmVzZXQgZmFpbGVkICEgKDB4RTQwPTB4JTA4WCwgMHg3QzA9MHglMDhYKVxuIiwKKwkJCVJSRUczMihSXzAwMEU0MF9SQkJNX1NUQVRVUyksCisJCQlSUkVHMzIoUl8wMDA3QzBfQ1BfU1RBVCkpOworCX0KKwkvKiBwb3N0ICovCisJcmFkZW9uX2NvbWJpb3NfYXNpY19pbml0KHJkZXYtPmRkZXYpOworCS8qIFJlc3VtZSBjbG9jayBhZnRlciBwb3N0aW5nICovCisJcjMwMF9jbG9ja19zdGFydHVwKHJkZXYpOworCXJldHVybiByMzAwX3N0YXJ0dXAocmRldik7Cit9CisKK2ludCByMzAwX3N1c3BlbmQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJcjEwMF9jcF9kaXNhYmxlKHJkZXYpOworCXIxMDBfd2JfZGlzYWJsZShyZGV2KTsKKwlyMTAwX2lycV9kaXNhYmxlKHJkZXYpOworCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19QQ0lFKQorCQlydjM3MF9wY2llX2dhcnRfZGlzYWJsZShyZGV2KTsKKwlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfUENJKQorCQlyMTAwX3BjaV9nYXJ0X2Rpc2FibGUocmRldik7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgcjMwMF9maW5pKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCXIzMDBfc3VzcGVuZChyZGV2KTsKKwlyMTAwX2NwX2ZpbmkocmRldik7CisJcjEwMF93Yl9maW5pKHJkZXYpOworCXIxMDBfaWJfZmluaShyZGV2KTsKKwlyYWRlb25fZ2VtX2ZpbmkocmRldik7CisJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX1BDSUUpCisJCXJ2MzcwX3BjaWVfZ2FydF9maW5pKHJkZXYpOworCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19QQ0kpCisJCXIxMDBfcGNpX2dhcnRfZmluaShyZGV2KTsKKwlyYWRlb25faXJxX2ttc19maW5pKHJkZXYpOworCXJhZGVvbl9mZW5jZV9kcml2ZXJfZmluaShyZGV2KTsKKwlyYWRlb25fb2JqZWN0X2ZpbmkocmRldik7CisJcmFkZW9uX2F0b21iaW9zX2ZpbmkocmRldik7CisJa2ZyZWUocmRldi0+Ymlvcyk7CisJcmRldi0+YmlvcyA9IE5VTEw7Cit9CisKK2ludCByMzAwX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJaW50IHI7CisKKwkvKiBEaXNhYmxlIFZHQSAqLworCXIxMDBfdmdhX3JlbmRlcl9kaXNhYmxlKHJkZXYpOworCS8qIEluaXRpYWxpemUgc2NyYXRjaCByZWdpc3RlcnMgKi8KKwlyYWRlb25fc2NyYXRjaF9pbml0KHJkZXYpOworCS8qIEluaXRpYWxpemUgc3VyZmFjZSByZWdpc3RlcnMgKi8KKwlyYWRlb25fc3VyZmFjZV9pbml0KHJkZXYpOworCS8qIFRPRE86IGRpc2FibGUgVkdBIG5lZWQgdG8gdXNlIFZHQSByZXF1ZXN0ICovCisJLyogQklPUyovCisJaWYgKCFyYWRlb25fZ2V0X2Jpb3MocmRldikpIHsKKwkJaWYgKEFTSUNfSVNfQVZJVk8ocmRldikpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJaWYgKHJkZXYtPmlzX2F0b21fYmlvcykgeworCQlkZXZfZXJyKHJkZXYtPmRldiwgIkV4cGVjdGluZyBjb21iaW9zIGZvciBSUzQwMC9SUzQ4MCBHUFVcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9IGVsc2UgeworCQlyID0gcmFkZW9uX2NvbWJpb3NfaW5pdChyZGV2KTsKKwkJaWYgKHIpCisJCQlyZXR1cm4gcjsKKwl9CisJLyogUmVzZXQgZ3B1IGJlZm9yZSBwb3N0aW5nIG90aGVyd2lzZSBBVE9NIHdpbGwgZW50ZXIgaW5maW5pdGUgbG9vcCAqLworCWlmIChyYWRlb25fZ3B1X3Jlc2V0KHJkZXYpKSB7CisJCWRldl93YXJuKHJkZXYtPmRldiwKKwkJCSJHUFUgcmVzZXQgZmFpbGVkICEgKDB4RTQwPTB4JTA4WCwgMHg3QzA9MHglMDhYKVxuIiwKKwkJCVJSRUczMihSXzAwMEU0MF9SQkJNX1NUQVRVUyksCisJCQlSUkVHMzIoUl8wMDA3QzBfQ1BfU1RBVCkpOworCX0KKwkvKiBjaGVjayBpZiBjYXJkcyBhcmUgcG9zdGVkIG9yIG5vdCAqLworCWlmICghcmFkZW9uX2NhcmRfcG9zdGVkKHJkZXYpICYmIHJkZXYtPmJpb3MpIHsKKwkJRFJNX0lORk8oIkdQVSBub3QgcG9zdGVkLiBwb3N0aW5nIG5vdy4uLlxuIik7CisJCXJhZGVvbl9jb21iaW9zX2FzaWNfaW5pdChyZGV2LT5kZGV2KTsKKwl9CisJLyogU2V0IGFzaWMgZXJyYXRhICovCisJcjMwMF9lcnJhdGEocmRldik7CisJLyogSW5pdGlhbGl6ZSBjbG9ja3MgKi8KKwlyYWRlb25fZ2V0X2Nsb2NrX2luZm8ocmRldi0+ZGRldik7CisJLyogR2V0IHZyYW0gaW5mb3JtYXRpb25zICovCisJcjMwMF92cmFtX2luZm8ocmRldik7CisJLyogSW5pdGlhbGl6ZSBtZW1vcnkgY29udHJvbGxlciAoYWxzbyB0ZXN0IEFHUCkgKi8KKwlyID0gcjQyMF9tY19pbml0KHJkZXYpOworCWlmIChyKQorCQlyZXR1cm4gcjsKKwkvKiBGZW5jZSBkcml2ZXIgKi8KKwlyID0gcmFkZW9uX2ZlbmNlX2RyaXZlcl9pbml0KHJkZXYpOworCWlmIChyKQorCQlyZXR1cm4gcjsKKwlyID0gcmFkZW9uX2lycV9rbXNfaW5pdChyZGV2KTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisJLyogTWVtb3J5IG1hbmFnZXIgKi8KKwlyID0gcmFkZW9uX29iamVjdF9pbml0KHJkZXYpOworCWlmIChyKQorCQlyZXR1cm4gcjsKKwlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfUENJRSkgeworCQlyID0gcnYzNzBfcGNpZV9nYXJ0X2luaXQocmRldik7CisJCWlmIChyKQorCQkJcmV0dXJuIHI7CisJfQorCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19QQ0kpIHsKKwkJciA9IHIxMDBfcGNpX2dhcnRfaW5pdChyZGV2KTsKKwkJaWYgKHIpCisJCQlyZXR1cm4gcjsKKwl9CisJcjMwMF9zZXRfcmVnX3NhZmUocmRldik7CisJcmRldi0+YWNjZWxfd29ya2luZyA9IHRydWU7CisJciA9IHIzMDBfc3RhcnR1cChyZGV2KTsKKwlpZiAocikgeworCQkvKiBTb21ldGhpbmdzIHdhbnQgd3JvbnQgd2l0aCB0aGUgYWNjZWwgaW5pdCBzdG9wIGFjY2VsICovCisJCWRldl9lcnIocmRldi0+ZGV2LCAiRGlzYWJsaW5nIEdQVSBhY2NlbGVyYXRpb25cbiIpOworCQlyMzAwX3N1c3BlbmQocmRldik7CisJCXIxMDBfY3BfZmluaShyZGV2KTsKKwkJcjEwMF93Yl9maW5pKHJkZXYpOworCQlyMTAwX2liX2ZpbmkocmRldik7CisJCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19QQ0lFKQorCQkJcnYzNzBfcGNpZV9nYXJ0X2ZpbmkocmRldik7CisJCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19QQ0kpCisJCQlyMTAwX3BjaV9nYXJ0X2ZpbmkocmRldik7CisJCXJhZGVvbl9pcnFfa21zX2ZpbmkocmRldik7CisJCXJkZXYtPmFjY2VsX3dvcmtpbmcgPSBmYWxzZTsKKwl9CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IzMDBkLmggYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IzMDBkLmgKaW5kZXggZDRmYTNlYi4uNGM3MzExNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMzAwZC5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjMwMGQuaApAQCAtOTYsNiArOTYsMjExIEBACiAjZGVmaW5lICAgU18wMDAxNzBfQUdQX0JBU0VfQUREUih4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweEZGRkZGRkZGKSA8PCAwKQogI2RlZmluZSAgIEdfMDAwMTcwX0FHUF9CQVNFX0FERFIoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHhGRkZGRkZGRikKICNkZWZpbmUgICBDXzAwMDE3MF9BR1BfQkFTRV9BRERSICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIFJfMDAwN0MwX0NQX1NUQVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwN0MwCisjZGVmaW5lICAgU18wMDA3QzBfTVJVX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDApCisjZGVmaW5lICAgR18wMDA3QzBfTVJVX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDA3QzBfTVJVX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRQorI2RlZmluZSAgIFNfMDAwN0MwX01XVV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxKQorI2RlZmluZSAgIEdfMDAwN0MwX01XVV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX01XVV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkQKKyNkZWZpbmUgICBTXzAwMDdDMF9SU0lVX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMikKKyNkZWZpbmUgICBHXzAwMDdDMF9SU0lVX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9SU0lVX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZCCisjZGVmaW5lICAgU18wMDA3QzBfUkNJVV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDMpCisjZGVmaW5lICAgR18wMDA3QzBfUkNJVV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMykgJiAweDEpCisjZGVmaW5lICAgQ18wMDA3QzBfUkNJVV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGNworI2RlZmluZSAgIFNfMDAwN0MwX0NTRl9QUklNQVJZX0JVU1koeCkgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCA5KQorI2RlZmluZSAgIEdfMDAwN0MwX0NTRl9QUklNQVJZX0JVU1koeCkgICAgICAgICAgICAgICAgICgoKHgpID4+IDkpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NTRl9QUklNQVJZX0JVU1kgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZERkYKKyNkZWZpbmUgICBTXzAwMDdDMF9DU0ZfSU5ESVJFQ1RfQlVTWSh4KSAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTApCisjZGVmaW5lICAgR18wMDA3QzBfQ1NGX0lORElSRUNUX0JVU1koeCkgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTApICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NTRl9JTkRJUkVDVF9CVVNZICAgICAgICAgICAgICAgICAgIDB4RkZGRkZCRkYKKyNkZWZpbmUgICBTXzAwMDdDMF9DU1FfUFJJTUFSWV9CVVNZKHgpICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTEpCisjZGVmaW5lICAgR18wMDA3QzBfQ1NRX1BSSU1BUllfQlVTWSh4KSAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NTUV9QUklNQVJZX0JVU1kgICAgICAgICAgICAgICAgICAgIDB4RkZGRkY3RkYKKyNkZWZpbmUgICBTXzAwMDdDMF9DU1FfSU5ESVJFQ1RfQlVTWSh4KSAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTIpCisjZGVmaW5lICAgR18wMDA3QzBfQ1NRX0lORElSRUNUX0JVU1koeCkgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTIpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NTUV9JTkRJUkVDVF9CVVNZICAgICAgICAgICAgICAgICAgIDB4RkZGRkVGRkYKKyNkZWZpbmUgICBTXzAwMDdDMF9DU0lfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTMpCisjZGVmaW5lICAgR18wMDA3QzBfQ1NJX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTMpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NTSV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkRGRkYKKyNkZWZpbmUgICBTXzAwMDdDMF9DU0ZfSU5ESVJFQ1QyX0JVU1koeCkgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTQpCisjZGVmaW5lICAgR18wMDA3QzBfQ1NGX0lORElSRUNUMl9CVVNZKHgpICAgICAgICAgICAgICAgKCgoeCkgPj4gMTQpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NTRl9JTkRJUkVDVDJfQlVTWSAgICAgICAgICAgICAgICAgIDB4RkZGRkJGRkYKKyNkZWZpbmUgICBTXzAwMDdDMF9DU1FfSU5ESVJFQ1QyX0JVU1koeCkgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTUpCisjZGVmaW5lICAgR18wMDA3QzBfQ1NRX0lORElSRUNUMl9CVVNZKHgpICAgICAgICAgICAgICAgKCgoeCkgPj4gMTUpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NTUV9JTkRJUkVDVDJfQlVTWSAgICAgICAgICAgICAgICAgIDB4RkZGRjdGRkYKKyNkZWZpbmUgICBTXzAwMDdDMF9HVUlETUFfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjgpCisjZGVmaW5lICAgR18wMDA3QzBfR1VJRE1BX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjgpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0dVSURNQV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgIDB4RUZGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDdDMF9WSURETUFfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjkpCisjZGVmaW5lICAgR18wMDA3QzBfVklERE1BX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjkpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX1ZJRERNQV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgIDB4REZGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDdDMF9DTURTVFJNX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMzApCisjZGVmaW5lICAgR18wMDA3QzBfQ01EU1RSTV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMzApICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NNRFNUUk1fQlVTWSAgICAgICAgICAgICAgICAgICAgICAgIDB4QkZGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDdDMF9DUF9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMzEpCisjZGVmaW5lICAgR18wMDA3QzBfQ1BfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMzEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NQX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4N0ZGRkZGRkYKKyNkZWZpbmUgUl8wMDBFNDBfUkJCTV9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDBFNDAKKyNkZWZpbmUgICBTXzAwMEU0MF9DTURGSUZPX0FWQUlMKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4N0YpIDw8IDApCisjZGVmaW5lICAgR18wMDBFNDBfQ01ERklGT19BVkFJTCh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweDdGKQorI2RlZmluZSAgIENfMDAwRTQwX0NNREZJRk9fQVZBSUwgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGODAKKyNkZWZpbmUgICBTXzAwMEU0MF9ISVJRX09OX1JCQih4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgOCkKKyNkZWZpbmUgICBHXzAwMEU0MF9ISVJRX09OX1JCQih4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiA4KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMEU0MF9ISVJRX09OX1JCQiAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRUZGCisjZGVmaW5lICAgU18wMDBFNDBfQ1BSUV9PTl9SQkIoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDkpCisjZGVmaW5lICAgR18wMDBFNDBfQ1BSUV9PTl9SQkIoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gOSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfQ1BSUV9PTl9SQkIgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkRGRgorI2RlZmluZSAgIFNfMDAwRTQwX0NGUlFfT05fUkJCKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxMCkKKyNkZWZpbmUgICBHXzAwMEU0MF9DRlJRX09OX1JCQih4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfQ0ZSUV9PTl9SQkIgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkJGRgorI2RlZmluZSAgIFNfMDAwRTQwX0hJUlFfSU5fUlRCVUYoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxMSkKKyNkZWZpbmUgICBHXzAwMEU0MF9ISVJRX0lOX1JUQlVGKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxMSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfSElSUV9JTl9SVEJVRiAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRjdGRgorI2RlZmluZSAgIFNfMDAwRTQwX0NQUlFfSU5fUlRCVUYoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxMikKKyNkZWZpbmUgICBHXzAwMEU0MF9DUFJRX0lOX1JUQlVGKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxMikgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfQ1BSUV9JTl9SVEJVRiAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRUZGRgorI2RlZmluZSAgIFNfMDAwRTQwX0NGUlFfSU5fUlRCVUYoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxMykKKyNkZWZpbmUgICBHXzAwMEU0MF9DRlJRX0lOX1JUQlVGKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxMykgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfQ0ZSUV9JTl9SVEJVRiAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGREZGRgorI2RlZmluZSAgIFNfMDAwRTQwX0NGX1BJUEVfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxNCkKKyNkZWZpbmUgICBHXzAwMEU0MF9DRl9QSVBFX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfQ0ZfUElQRV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGQkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX0VOR19FVl9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxNSkKKyNkZWZpbmUgICBHXzAwMEU0MF9FTkdfRVZfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfRU5HX0VWX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGN0ZGRgorI2RlZmluZSAgIFNfMDAwRTQwX0NQX0NNRFNUUk1fQlVTWSh4KSAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxNikKKyNkZWZpbmUgICBHXzAwMEU0MF9DUF9DTURTVFJNX0JVU1koeCkgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNikgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfQ1BfQ01EU1RSTV9CVVNZICAgICAgICAgICAgICAgICAgICAgMHhGRkZFRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX0UyX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxNykKKyNkZWZpbmUgICBHXzAwMEU0MF9FMl9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNykgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfRTJfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZERkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1JCMkRfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxOCkKKyNkZWZpbmUgICBHXzAwMEU0MF9SQjJEX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxOCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfUkIyRF9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZCRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1JCM0RfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxOSkKKyNkZWZpbmUgICBHXzAwMEU0MF9SQjNEX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxOSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfUkIzRF9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkY3RkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1ZBUF9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyMCkKKyNkZWZpbmUgICBHXzAwMEU0MF9WQVBfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfVkFQX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkVGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1JFX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyMSkKKyNkZWZpbmUgICBHXzAwMEU0MF9SRV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyMSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfUkVfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkRGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1RBTV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyMikKKyNkZWZpbmUgICBHXzAwMEU0MF9UQU1fQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyMikgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfVEFNX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkJGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1RETV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyMykKKyNkZWZpbmUgICBHXzAwMEU0MF9URE1fQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyMykgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfVERNX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRjdGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1BCX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNCkKKyNkZWZpbmUgICBHXzAwMEU0MF9QQl9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfUEJfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRUZGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1RJTV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNSkKKyNkZWZpbmUgICBHXzAwMEU0MF9USU1fQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfVElNX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGREZGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX0dBX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNikKKyNkZWZpbmUgICBHXzAwMEU0MF9HQV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNikgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfR0FfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGQkZGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX0NCQTJEX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNykKKyNkZWZpbmUgICBHXzAwMEU0MF9DQkEyRF9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNykgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfQ0JBMkRfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGN0ZGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX0dVSV9BQ1RJVkUoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAzMSkKKyNkZWZpbmUgICBHXzAwMEU0MF9HVUlfQUNUSVZFKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAzMSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfR1VJX0FDVElWRSAgICAgICAgICAgICAgICAgICAgICAgICAgMHg3RkZGRkZGRgogCiAKKyNkZWZpbmUgUl8wMDAwMERfU0NMS19DTlRMICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEQKKyNkZWZpbmUgICBTXzAwMDAwRF9TQ0xLX1NSQ19TRUwoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4NykgPDwgMCkKKyNkZWZpbmUgICBHXzAwMDAwRF9TQ0xLX1NSQ19TRUwoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4NykKKyNkZWZpbmUgICBDXzAwMDAwRF9TQ0xLX1NSQ19TRUwgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkY4CisjZGVmaW5lICAgU18wMDAwMERfQ1BfTUFYX0RZTl9TVE9QX0xBVCh4KSAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDMpCisjZGVmaW5lICAgR18wMDAwMERfQ1BfTUFYX0RZTl9TVE9QX0xBVCh4KSAgICAgICAgICAgICAgKCgoeCkgPj4gMykgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfQ1BfTUFYX0RZTl9TVE9QX0xBVCAgICAgICAgICAgICAgICAgMHhGRkZGRkZGNworI2RlZmluZSAgIFNfMDAwMDBEX0hEUF9NQVhfRFlOX1NUT1BfTEFUKHgpICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCA0KQorI2RlZmluZSAgIEdfMDAwMDBEX0hEUF9NQVhfRFlOX1NUT1BfTEFUKHgpICAgICAgICAgICAgICgoKHgpID4+IDQpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0hEUF9NQVhfRFlOX1NUT1BfTEFUICAgICAgICAgICAgICAgIDB4RkZGRkZGRUYKKyNkZWZpbmUgICBTXzAwMDAwRF9UVl9NQVhfRFlOX1NUT1BfTEFUKHgpICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgNSkKKyNkZWZpbmUgICBHXzAwMDAwRF9UVl9NQVhfRFlOX1NUT1BfTEFUKHgpICAgICAgICAgICAgICAoKCh4KSA+PiA1KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDAwRF9UVl9NQVhfRFlOX1NUT1BfTEFUICAgICAgICAgICAgICAgICAweEZGRkZGRkRGCisjZGVmaW5lICAgU18wMDAwMERfRTJfTUFYX0RZTl9TVE9QX0xBVCh4KSAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDYpCisjZGVmaW5lICAgR18wMDAwMERfRTJfTUFYX0RZTl9TVE9QX0xBVCh4KSAgICAgICAgICAgICAgKCgoeCkgPj4gNikgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfRTJfTUFYX0RZTl9TVE9QX0xBVCAgICAgICAgICAgICAgICAgMHhGRkZGRkZCRgorI2RlZmluZSAgIFNfMDAwMDBEX1NFX01BWF9EWU5fU1RPUF9MQVQoeCkgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCA3KQorI2RlZmluZSAgIEdfMDAwMDBEX1NFX01BWF9EWU5fU1RPUF9MQVQoeCkgICAgICAgICAgICAgICgoKHgpID4+IDcpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX1NFX01BWF9EWU5fU1RPUF9MQVQgICAgICAgICAgICAgICAgIDB4RkZGRkZGN0YKKyNkZWZpbmUgICBTXzAwMDAwRF9JRENUX01BWF9EWU5fU1RPUF9MQVQoeCkgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgOCkKKyNkZWZpbmUgICBHXzAwMDAwRF9JRENUX01BWF9EWU5fU1RPUF9MQVQoeCkgICAgICAgICAgICAoKCh4KSA+PiA4KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDAwRF9JRENUX01BWF9EWU5fU1RPUF9MQVQgICAgICAgICAgICAgICAweEZGRkZGRUZGCisjZGVmaW5lICAgU18wMDAwMERfVklQX01BWF9EWU5fU1RPUF9MQVQoeCkgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDkpCisjZGVmaW5lICAgR18wMDAwMERfVklQX01BWF9EWU5fU1RPUF9MQVQoeCkgICAgICAgICAgICAgKCgoeCkgPj4gOSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfVklQX01BWF9EWU5fU1RPUF9MQVQgICAgICAgICAgICAgICAgMHhGRkZGRkRGRgorI2RlZmluZSAgIFNfMDAwMDBEX1JFX01BWF9EWU5fU1RPUF9MQVQoeCkgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxMCkKKyNkZWZpbmUgICBHXzAwMDAwRF9SRV9NQVhfRFlOX1NUT1BfTEFUKHgpICAgICAgICAgICAgICAoKCh4KSA+PiAxMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfUkVfTUFYX0RZTl9TVE9QX0xBVCAgICAgICAgICAgICAgICAgMHhGRkZGRkJGRgorI2RlZmluZSAgIFNfMDAwMDBEX1BCX01BWF9EWU5fU1RPUF9MQVQoeCkgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxMSkKKyNkZWZpbmUgICBHXzAwMDAwRF9QQl9NQVhfRFlOX1NUT1BfTEFUKHgpICAgICAgICAgICAgICAoKCh4KSA+PiAxMSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfUEJfTUFYX0RZTl9TVE9QX0xBVCAgICAgICAgICAgICAgICAgMHhGRkZGRjdGRgorI2RlZmluZSAgIFNfMDAwMDBEX1RBTV9NQVhfRFlOX1NUT1BfTEFUKHgpICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxMikKKyNkZWZpbmUgICBHXzAwMDAwRF9UQU1fTUFYX0RZTl9TVE9QX0xBVCh4KSAgICAgICAgICAgICAoKCh4KSA+PiAxMikgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfVEFNX01BWF9EWU5fU1RPUF9MQVQgICAgICAgICAgICAgICAgMHhGRkZGRUZGRgorI2RlZmluZSAgIFNfMDAwMDBEX1RETV9NQVhfRFlOX1NUT1BfTEFUKHgpICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxMykKKyNkZWZpbmUgICBHXzAwMDAwRF9URE1fTUFYX0RZTl9TVE9QX0xBVCh4KSAgICAgICAgICAgICAoKCh4KSA+PiAxMykgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfVERNX01BWF9EWU5fU1RPUF9MQVQgICAgICAgICAgICAgICAgMHhGRkZGREZGRgorI2RlZmluZSAgIFNfMDAwMDBEX1JCX01BWF9EWU5fU1RPUF9MQVQoeCkgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxNCkKKyNkZWZpbmUgICBHXzAwMDAwRF9SQl9NQVhfRFlOX1NUT1BfTEFUKHgpICAgICAgICAgICAgICAoKCh4KSA+PiAxNCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfUkJfTUFYX0RZTl9TVE9QX0xBVCAgICAgICAgICAgICAgICAgMHhGRkZGQkZGRgorI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX0RJU1AyKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxNSkKKyNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9ESVNQMih4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfRElTUDIgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGN0ZGRgorI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX0NQKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxNikKKyNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9DUCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNikgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfQ1AgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZFRkZGRgorI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX0hEUCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxNykKKyNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9IRFAoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNykgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfSERQICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZERkZGRgorI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX0RJU1AxKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxOCkKKyNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9ESVNQMSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxOCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfRElTUDEgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZCRkZGRgorI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX1RPUCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxOSkKKyNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9UT1AoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxOSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfVE9QICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkY3RkZGRgorI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX0UyKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyMCkKKyNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9FMih4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfRTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkVGRkZGRgorI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX1NFKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyMSkKKyNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9TRSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyMSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkRGRkZGRgorI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX0lEQ1QoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyMikKKyNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9JRENUKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyMikgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfSURDVCAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkJGRkZGRgorI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX1ZJUCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyMykKKyNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9WSVAoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyMykgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfVklQICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRjdGRkZGRgorI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX1JFKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNCkKKyNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9SRSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfUkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRUZGRkZGRgorI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX1BCKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNSkKKyNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9QQih4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfUEIgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGREZGRkZGRgorI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX1RBTSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNikKKyNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9UQU0oeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNikgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfVEFNICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGQkZGRkZGRgorI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX1RETSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNykKKyNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9URE0oeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNykgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfVERNICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGN0ZGRkZGRgorI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX1JCKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyOCkKKyNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9SQih4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyOCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfUkIgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhFRkZGRkZGRgorI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX1RWX1NDTEsoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyOSkKKyNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9UVl9TQ0xLKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyOSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfVFZfU0NMSyAgICAgICAgICAgICAgICAgICAgICAgMHhERkZGRkZGRgorI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX1NVQlBJQyh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAzMCkKKyNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9TVUJQSUMoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAzMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfU1VCUElDICAgICAgICAgICAgICAgICAgICAgICAgMHhCRkZGRkZGRgorI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX09WMCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAzMSkKKyNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9PVjAoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAzMSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfT1YwICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg3RkZGRkZGRgorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjQyMC5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNDIwLmMKaW5kZXggNDlhMmZkYy4uNWM3ZmU1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNDIwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNDIwLmMKQEAgLTE1NSw2ICsxNTUsOSBAQAogc3RhdGljIHZvaWQgcjQyMF9jbG9ja19yZXN1bWUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7CiAJdTMyIHNjbGtfY250bDsKKworCWlmIChyYWRlb25fZHluY2xrcyAhPSAtMSAmJiByYWRlb25fZHluY2xrcykKKwkJcmFkZW9uX2F0b21fc2V0X2Nsb2NrX2dhdGluZyhyZGV2LCAxKTsKIAlzY2xrX2NudGwgPSBSUkVHMzJfUExMKFJfMDAwMDBEX1NDTEtfQ05UTCk7CiAJc2Nsa19jbnRsIHw9IFNfMDAwMDBEX0ZPUkNFX0NQKDEpIHwgU18wMDAwMERfRk9SQ0VfVklQKDEpOwogCWlmIChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9SNDIwKQpAQCAtMTY3LDYgKzE3MCw4IEBACiAJaW50IHI7CiAKIAlyMzAwX21jX3Byb2dyYW0ocmRldik7CisJLyogUmVzdW1lIGNsb2NrICovCisJcjQyMF9jbG9ja19yZXN1bWUocmRldik7CiAJLyogSW5pdGlhbGl6ZSBHQVJUIChpbml0aWFsaXplIGFmdGVyIFRUTSBzbyB3ZSBjYW4gYWxsb2NhdGUKIAkgKiBtZW1vcnkgdGhyb3VnaCBUVE0gYnV0IGZpbmFsaXplIGFmdGVyIFRUTSkgKi8KIAlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfUENJRSkgewpAQCAtMjY3LDcgKzI3Miw2IEBACiB7CiAJaW50IHI7CiAKLQlyZGV2LT5uZXdfaW5pdF9wYXRoID0gdHJ1ZTsKIAkvKiBJbml0aWFsaXplIHNjcmF0Y2ggcmVnaXN0ZXJzICovCiAJcmFkZW9uX3NjcmF0Y2hfaW5pdChyZGV2KTsKIAkvKiBJbml0aWFsaXplIHN1cmZhY2UgcmVnaXN0ZXJzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I0MjBkLmggYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I0MjBkLmgKaW5kZXggYTQ4YTdkYi4uZmM3OGQzMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNDIwZC5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjQyMGQuaApAQCAtMjEyLDkgKzIxMiw5IEBACiAjZGVmaW5lICAgU18wMDAwMERfRk9SQ0VfRTIoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDIwKQogI2RlZmluZSAgIEdfMDAwMDBEX0ZPUkNFX0UyKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDIwKSAmIDB4MSkKICNkZWZpbmUgICBDXzAwMDAwRF9GT1JDRV9FMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRUZGRkZGCi0jZGVmaW5lICAgU18wMDAwMERfRk9SQ0VfU0UoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDIxKQotI2RlZmluZSAgIEdfMDAwMDBEX0ZPUkNFX1NFKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDIxKSAmIDB4MSkKLSNkZWZpbmUgICBDXzAwMDAwRF9GT1JDRV9TRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGREZGRkZGCisjZGVmaW5lICAgU18wMDAwMERfRk9SQ0VfVkFQKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDIxKQorI2RlZmluZSAgIEdfMDAwMDBEX0ZPUkNFX1ZBUCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDIxKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDAwRF9GT1JDRV9WQVAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGREZGRkZGCiAjZGVmaW5lICAgU18wMDAwMERfRk9SQ0VfSURDVCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDIyKQogI2RlZmluZSAgIEdfMDAwMDBEX0ZPUkNFX0lEQ1QoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDIyKSAmIDB4MSkKICNkZWZpbmUgICBDXzAwMDAwRF9GT1JDRV9JRENUICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGQkZGRkZGCkBAIC0yMjQsMjQgKzIyNCwyNCBAQAogI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX1JFKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNCkKICNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9SRSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNCkgJiAweDEpCiAjZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfUkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRUZGRkZGRgotI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX1BCKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNSkKLSNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9QQih4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNSkgJiAweDEpCi0jZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfUEIgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGREZGRkZGRgorI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX1NSKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNSkKKyNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9TUih4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfU1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGREZGRkZGRgogI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX1BYKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNikKICNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9QWCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNikgJiAweDEpCiAjZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfUFggICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGQkZGRkZGRgogI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX1RYKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNykKICNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9UWCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNykgJiAweDEpCiAjZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfVFggICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGN0ZGRkZGRgotI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX1JCKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyOCkKLSNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9SQih4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyOCkgJiAweDEpCi0jZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfUkIgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhFRkZGRkZGRgorI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX1VTKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyOCkKKyNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9VUyh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyOCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfVVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhFRkZGRkZGRgogI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX1RWX1NDTEsoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyOSkKICNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9UVl9TQ0xLKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyOSkgJiAweDEpCiAjZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfVFZfU0NMSyAgICAgICAgICAgICAgICAgICAgICAgMHhERkZGRkZGRgotI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX1NVQlBJQyh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAzMCkKLSNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9TVUJQSUMoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAzMCkgJiAweDEpCi0jZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfU1VCUElDICAgICAgICAgICAgICAgICAgICAgICAgMHhCRkZGRkZGRgorI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX1NVKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAzMCkKKyNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9TVSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAzMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfU1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhCRkZGRkZGRgogI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX09WMCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAzMSkKICNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9PVjAoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAzMSkgJiAweDEpCiAjZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfT1YwICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg3RkZGRkZGRgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNTAwX3JlZy5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNTAwX3JlZy5oCmluZGV4IGUxZDVlMDMuLjg2OGFkZDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjUwMF9yZWcuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I1MDBfcmVnLmgKQEAgLTQ0NSw2ICs0NDUsOCBAQAogI2RlZmluZSBBVklWT19EMU1PREVfVkJMQU5LX1NUQVRVUyAgICAgICAgICAgICAgMHg2NTM0CiAjICAgICAgIGRlZmluZSBBVklWT19WQkxBTktfQUNLICAgICAgICAgICAgICAgICAoMSA8PCA0KQogI2RlZmluZSBBVklWT19EMU1PREVfVkxJTkVfU1RBUlRfRU5EICAgICAgICAgICAgMHg2NTM4CisjZGVmaW5lIEFWSVZPX0QxTU9ERV9WTElORV9TVEFUVVMgICAgICAgICAgICAgICAweDY1M2MKKyMgICAgICAgZGVmaW5lIEFWSVZPX0QxTU9ERV9WTElORV9TVEFUICAgICAgICAgICgxIDw8IDEyKQogI2RlZmluZSBBVklWT19EeE1PREVfSU5UX01BU0sgICAgICAgICAgICAgICAgICAgMHg2NTQwCiAjICAgICAgIGRlZmluZSBBVklWT19EMU1PREVfSU5UX01BU0sgICAgICAgICAgICAoMSA8PCAwKQogIyAgICAgICBkZWZpbmUgQVZJVk9fRDJNT0RFX0lOVF9NQVNLICAgICAgICAgICAgKDEgPDwgOCkKQEAgLTUwMiw2ICs1MDQsNyBAQAogCiAjZGVmaW5lIEFWSVZPX0QyTU9ERV9WQkxBTktfU1RBVFVTICAgICAgICAgICAgICAweDZkMzQKICNkZWZpbmUgQVZJVk9fRDJNT0RFX1ZMSU5FX1NUQVJUX0VORCAgICAgICAgICAgIDB4NmQzOAorI2RlZmluZSBBVklWT19EMk1PREVfVkxJTkVfU1RBVFVTICAgICAgICAgICAgICAgMHg2ZDNjCiAjZGVmaW5lIEFWSVZPX0QyTU9ERV9WSUVXUE9SVF9TVEFSVCAgICAgICAgICAgICAweDZkODAKICNkZWZpbmUgQVZJVk9fRDJNT0RFX1ZJRVdQT1JUX1NJWkUgICAgICAgICAgICAgIDB4NmQ4NAogI2RlZmluZSBBVklWT19EMk1PREVfRVhUX09WRVJTQ0FOX0xFRlRfUklHSFQgICAgMHg2ZDg4CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I1MjAuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjUyMC5jCmluZGV4IGQ0YjBiOWQuLmE1NTViN2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjUyMC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjUyMC5jCkBAIC0yNiwxMDggKzI2LDEzIEBACiAgKiAgICAgICAgICBKZXJvbWUgR2xpc3NlCiAgKi8KICNpbmNsdWRlICJkcm1QLmgiCi0jaW5jbHVkZSAicmFkZW9uX3JlZy5oIgogI2luY2x1ZGUgInJhZGVvbi5oIgorI2luY2x1ZGUgImF0b20uaCIKKyNpbmNsdWRlICJyNTIwZC5oIgogCi0vKiByNTIwLHJ2NTMwLHJ2NTYwLHJ2NTcwLHI1ODAgZGVwZW5kcyBvbiA6ICovCi12b2lkIHIxMDBfaGRwX3Jlc2V0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLXZvaWQgcjQyMF9waXBlc19pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLXZvaWQgcnM2MDBfbWNfZGlzYWJsZV9jbGllbnRzKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLXZvaWQgcnM2MDBfZGlzYWJsZV92Z2Eoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotaW50IHJ2NTE1X2RlYnVnZnNfcGlwZXNfaW5mb19pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLWludCBydjUxNV9kZWJ1Z2ZzX2dhX2luZm9faW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CisvKiBUaGlzIGZpbGVzIGdhdGhlciBmdW5jdGlvbnMgc3BlY2lmaWNzIHRvOiByNTIwLHJ2NTMwLHJ2NTYwLHJ2NTcwLHI1ODAgKi8KIAotLyogVGhpcyBmaWxlcyBnYXRoZXIgZnVuY3Rpb25zIHNwZWNpZmljcyB0bzoKLSAqIHI1MjAscnY1MzAscnY1NjAscnY1NzAscjU4MAotICoKLSAqIFNvbWUgb2YgdGhlc2UgZnVuY3Rpb25zIG1pZ2h0IGJlIHVzZWQgYnkgbmV3ZXIgQVNJQ3MuCi0gKi8KLXZvaWQgcjUyMF9ncHVfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci1pbnQgcjUyMF9tY193YWl0X2Zvcl9pZGxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLQotCi0vKgotICogTUMKLSAqLwotaW50IHI1MjBfbWNfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKLXsKLQl1aW50MzJfdCB0bXA7Ci0JaW50IHI7Ci0KLQlpZiAocjEwMF9kZWJ1Z2ZzX3JiYm1faW5pdChyZGV2KSkgewotCQlEUk1fRVJST1IoIkZhaWxlZCB0byByZWdpc3RlciBkZWJ1Z2ZzIGZpbGUgZm9yIFJCQk0gIVxuIik7Ci0JfQotCWlmIChydjUxNV9kZWJ1Z2ZzX3BpcGVzX2luZm9faW5pdChyZGV2KSkgewotCQlEUk1fRVJST1IoIkZhaWxlZCB0byByZWdpc3RlciBkZWJ1Z2ZzIGZpbGUgZm9yIHBpcGVzICFcbiIpOwotCX0KLQlpZiAocnY1MTVfZGVidWdmc19nYV9pbmZvX2luaXQocmRldikpIHsKLQkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gcmVnaXN0ZXIgZGVidWdmcyBmaWxlIGZvciBwaXBlcyAhXG4iKTsKLQl9Ci0KLQlyNTIwX2dwdV9pbml0KHJkZXYpOwotCXJ2MzcwX3BjaWVfZ2FydF9kaXNhYmxlKHJkZXYpOwotCi0JLyogU2V0dXAgR1BVIG1lbW9yeSBzcGFjZSAqLwotCXJkZXYtPm1jLnZyYW1fbG9jYXRpb24gPSAweEZGRkZGRkZGVUw7Ci0JcmRldi0+bWMuZ3R0X2xvY2F0aW9uID0gMHhGRkZGRkZGRlVMOwotCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19BR1ApIHsKLQkJciA9IHJhZGVvbl9hZ3BfaW5pdChyZGV2KTsKLQkJaWYgKHIpIHsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIltkcm1dIERpc2FibGluZyBBR1BcbiIpOwotCQkJcmRldi0+ZmxhZ3MgJj0gflJBREVPTl9JU19BR1A7Ci0JCQlyZGV2LT5tYy5ndHRfc2l6ZSA9IHJhZGVvbl9nYXJ0X3NpemUgKiAxMDI0ICogMTAyNDsKLQkJfSBlbHNlIHsKLQkJCXJkZXYtPm1jLmd0dF9sb2NhdGlvbiA9IHJkZXYtPm1jLmFncF9iYXNlOwotCQl9Ci0JfQotCXIgPSByYWRlb25fbWNfc2V0dXAocmRldik7Ci0JaWYgKHIpIHsKLQkJcmV0dXJuIHI7Ci0JfQotCi0JLyogUHJvZ3JhbSBHUFUgbWVtb3J5IHNwYWNlICovCi0JcnM2MDBfbWNfZGlzYWJsZV9jbGllbnRzKHJkZXYpOwotCWlmIChyNTIwX21jX3dhaXRfZm9yX2lkbGUocmRldikpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiRmFpbGVkIHRvIHdhaXQgTUMgaWRsZSB3aGlsZSAiCi0JCSAgICAgICAicHJvZ3JhbW1pbmcgcGlwZXMuIEJhZCB0aGluZ3MgbWlnaHQgaGFwcGVuLlxuIik7Ci0JfQotCS8qIFdyaXRlIFZSQU0gc2l6ZSBpbiBjYXNlIHdlIGFyZSBsaW1pdGluZyBpdCAqLwotCVdSRUczMihSQURFT05fQ09ORklHX01FTVNJWkUsIHJkZXYtPm1jLnJlYWxfdnJhbV9zaXplKTsKLQl0bXAgPSByZGV2LT5tYy52cmFtX2xvY2F0aW9uICsgcmRldi0+bWMubWNfdnJhbV9zaXplIC0gMTsKLQl0bXAgPSBSRUdfU0VUKFI1MjBfTUNfRkJfVE9QLCB0bXAgPj4gMTYpOwotCXRtcCB8PSBSRUdfU0VUKFI1MjBfTUNfRkJfU1RBUlQsIHJkZXYtPm1jLnZyYW1fbG9jYXRpb24gPj4gMTYpOwotCVdSRUczMl9NQyhSNTIwX01DX0ZCX0xPQ0FUSU9OLCB0bXApOwotCVdSRUczMihSUzY5MF9IRFBfRkJfTE9DQVRJT04sIHJkZXYtPm1jLnZyYW1fbG9jYXRpb24gPj4gMTYpOwotCVdSRUczMigweDMxMCwgcmRldi0+bWMudnJhbV9sb2NhdGlvbik7Ci0JaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX0FHUCkgewotCQl0bXAgPSByZGV2LT5tYy5ndHRfbG9jYXRpb24gKyByZGV2LT5tYy5ndHRfc2l6ZSAtIDE7Ci0JCXRtcCA9IFJFR19TRVQoUjUyMF9NQ19BR1BfVE9QLCB0bXAgPj4gMTYpOwotCQl0bXAgfD0gUkVHX1NFVChSNTIwX01DX0FHUF9TVEFSVCwgcmRldi0+bWMuZ3R0X2xvY2F0aW9uID4+IDE2KTsKLQkJV1JFRzMyX01DKFI1MjBfTUNfQUdQX0xPQ0FUSU9OLCB0bXApOwotCQlXUkVHMzJfTUMoUjUyMF9NQ19BR1BfQkFTRSwgcmRldi0+bWMuYWdwX2Jhc2UpOwotCQlXUkVHMzJfTUMoUjUyMF9NQ19BR1BfQkFTRV8yLCAwKTsKLQl9IGVsc2UgewotCQlXUkVHMzJfTUMoUjUyMF9NQ19BR1BfTE9DQVRJT04sIDB4MEZGRkZGRkYpOwotCQlXUkVHMzJfTUMoUjUyMF9NQ19BR1BfQkFTRSwgMCk7Ci0JCVdSRUczMl9NQyhSNTIwX01DX0FHUF9CQVNFXzIsIDApOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotdm9pZCByNTIwX21jX2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCi17Ci19Ci0KLQotLyoKLSAqIEdsb2JhbCBHUFUgZnVuY3Rpb25zCi0gKi8KLXZvaWQgcjUyMF9lcnJhdGEoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCi17Ci0JcmRldi0+cGxsX2VycmF0YSA9IDA7Ci19Ci0KLWludCByNTIwX21jX3dhaXRfZm9yX2lkbGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCitzdGF0aWMgaW50IHI1MjBfbWNfd2FpdF9mb3JfaWRsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKIAl1bnNpZ25lZCBpOwogCXVpbnQzMl90IHRtcDsKQEAgLTE0MywxMiArNDgsMTIgQEAKIAlyZXR1cm4gLTE7CiB9CiAKLXZvaWQgcjUyMF9ncHVfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3N0YXRpYyB2b2lkIHI1MjBfZ3B1X2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7CiAJdW5zaWduZWQgcGlwZV9zZWxlY3RfY3VycmVudCwgZ2JfcGlwZV9zZWxlY3QsIHRtcDsKIAogCXIxMDBfaGRwX3Jlc2V0KHJkZXYpOwotCXJzNjAwX2Rpc2FibGVfdmdhKHJkZXYpOworCXJ2NTE1X3ZnYV9yZW5kZXJfZGlzYWJsZShyZGV2KTsKIAkvKgogCSAqIERTVF9QSVBFX0NPTkZJRwkJMHgxNzBDCiAJICogR0JfVElMRV9DT05GSUcJCTB4NDAxOApAQCAtMTg2LDEwICs5MSw2IEBACiAJfQogfQogCi0KLS8qCi0gKiBWUkFNIGluZm8KLSAqLwogc3RhdGljIHZvaWQgcjUyMF92cmFtX2dldF90eXBlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewogCXVpbnQzMl90IHRtcDsKQEAgLTIzMyw3ICsxMzQsMTY3IEBACiAJcmRldi0+cG0uc2Nsay5mdWxsID0gcmZpeGVkX2RpdihyZGV2LT5wbS5zY2xrLCBhKTsKIH0KIAotdm9pZCByNTIwX2JhbmR3aWR0aF91cGRhdGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit2b2lkIHI1MjBfbWNfcHJvZ3JhbShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKLQlydjUxNV9iYW5kd2lkdGhfYXZpdm9fdXBkYXRlKHJkZXYpOworCXN0cnVjdCBydjUxNV9tY19zYXZlIHNhdmU7CisKKwkvKiBTdG9wcyBhbGwgbWMgY2xpZW50cyAqLworCXJ2NTE1X21jX3N0b3AocmRldiwgJnNhdmUpOworCisJLyogV2FpdCBmb3IgbWMgaWRsZSAqLworCWlmIChyNTIwX21jX3dhaXRfZm9yX2lkbGUocmRldikpCisJCWRldl93YXJuKHJkZXYtPmRldiwgIldhaXQgTUMgaWRsZSB0aW1lb3V0IGJlZm9yZSB1cGRhdGluZyBNQy5cbiIpOworCS8qIFdyaXRlIFZSQU0gc2l6ZSBpbiBjYXNlIHdlIGFyZSBsaW1pdGluZyBpdCAqLworCVdSRUczMihSXzAwMDBGOF9DT05GSUdfTUVNU0laRSwgcmRldi0+bWMucmVhbF92cmFtX3NpemUpOworCS8qIFByb2dyYW0gTUMsIHNob3VsZCBiZSBhIDMyYml0cyBsaW1pdGVkIGFkZHJlc3Mgc3BhY2UgKi8KKwlXUkVHMzJfTUMoUl8wMDAwMDRfTUNfRkJfTE9DQVRJT04sCisJCQlTXzAwMDAwNF9NQ19GQl9TVEFSVChyZGV2LT5tYy52cmFtX3N0YXJ0ID4+IDE2KSB8CisJCQlTXzAwMDAwNF9NQ19GQl9UT1AocmRldi0+bWMudnJhbV9lbmQgPj4gMTYpKTsKKwlXUkVHMzIoUl8wMDAxMzRfSERQX0ZCX0xPQ0FUSU9OLAorCQlTXzAwMDEzNF9IRFBfRkJfU1RBUlQocmRldi0+bWMudnJhbV9zdGFydCA+PiAxNikpOworCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19BR1ApIHsKKwkJV1JFRzMyX01DKFJfMDAwMDA1X01DX0FHUF9MT0NBVElPTiwKKwkJCVNfMDAwMDA1X01DX0FHUF9TVEFSVChyZGV2LT5tYy5ndHRfc3RhcnQgPj4gMTYpIHwKKwkJCVNfMDAwMDA1X01DX0FHUF9UT1AocmRldi0+bWMuZ3R0X2VuZCA+PiAxNikpOworCQlXUkVHMzJfTUMoUl8wMDAwMDZfQUdQX0JBU0UsIGxvd2VyXzMyX2JpdHMocmRldi0+bWMuYWdwX2Jhc2UpKTsKKwkJV1JFRzMyX01DKFJfMDAwMDA3X0FHUF9CQVNFXzIsCisJCQlTXzAwMDAwN19BR1BfQkFTRV9BRERSXzIodXBwZXJfMzJfYml0cyhyZGV2LT5tYy5hZ3BfYmFzZSkpKTsKKwl9IGVsc2UgeworCQlXUkVHMzJfTUMoUl8wMDAwMDVfTUNfQUdQX0xPQ0FUSU9OLCAweEZGRkZGRkZGKTsKKwkJV1JFRzMyX01DKFJfMDAwMDA2X0FHUF9CQVNFLCAwKTsKKwkJV1JFRzMyX01DKFJfMDAwMDA3X0FHUF9CQVNFXzIsIDApOworCX0KKworCXJ2NTE1X21jX3Jlc3VtZShyZGV2LCAmc2F2ZSk7Cit9CisKK3N0YXRpYyBpbnQgcjUyMF9zdGFydHVwKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCWludCByOworCisJcjUyMF9tY19wcm9ncmFtKHJkZXYpOworCS8qIFJlc3VtZSBjbG9jayAqLworCXJ2NTE1X2Nsb2NrX3N0YXJ0dXAocmRldik7CisJLyogSW5pdGlhbGl6ZSBHUFUgY29uZmlndXJhdGlvbiAoIyBwaXBlcywgLi4uKSAqLworCXI1MjBfZ3B1X2luaXQocmRldik7CisJLyogSW5pdGlhbGl6ZSBHQVJUIChpbml0aWFsaXplIGFmdGVyIFRUTSBzbyB3ZSBjYW4gYWxsb2NhdGUKKwkgKiBtZW1vcnkgdGhyb3VnaCBUVE0gYnV0IGZpbmFsaXplIGFmdGVyIFRUTSkgKi8KKwlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfUENJRSkgeworCQlyID0gcnYzNzBfcGNpZV9nYXJ0X2VuYWJsZShyZGV2KTsKKwkJaWYgKHIpCisJCQlyZXR1cm4gcjsKKwl9CisJLyogRW5hYmxlIElSUSAqLworCXJkZXYtPmlycS5zd19pbnQgPSB0cnVlOworCXJzNjAwX2lycV9zZXQocmRldik7CisJLyogMU0gcmluZyBidWZmZXIgKi8KKwlyID0gcjEwMF9jcF9pbml0KHJkZXYsIDEwMjQgKiAxMDI0KTsKKwlpZiAocikgeworCQlkZXZfZXJyKHJkZXYtPmRldiwgImZhaWxsZWQgaW5pdGlhbGl6aW5nIENQICglZCkuXG4iLCByKTsKKwkJcmV0dXJuIHI7CisJfQorCXIgPSByMTAwX3diX2luaXQocmRldik7CisJaWYgKHIpCisJCWRldl9lcnIocmRldi0+ZGV2LCAiZmFpbGxlZCBpbml0aWFsaXppbmcgV0IgKCVkKS5cbiIsIHIpOworCXIgPSByMTAwX2liX2luaXQocmRldik7CisJaWYgKHIpIHsKKwkJZGV2X2VycihyZGV2LT5kZXYsICJmYWlsbGVkIGluaXRpYWxpemluZyBJQiAoJWQpLlxuIiwgcik7CisJCXJldHVybiByOworCX0KKwlyZXR1cm4gMDsKK30KKworaW50IHI1MjBfcmVzdW1lKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCS8qIE1ha2Ugc3VyIEdBUlQgYXJlIG5vdCB3b3JraW5nICovCisJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX1BDSUUpCisJCXJ2MzcwX3BjaWVfZ2FydF9kaXNhYmxlKHJkZXYpOworCS8qIFJlc3VtZSBjbG9jayBiZWZvcmUgZG9pbmcgcmVzZXQgKi8KKwlydjUxNV9jbG9ja19zdGFydHVwKHJkZXYpOworCS8qIFJlc2V0IGdwdSBiZWZvcmUgcG9zdGluZyBvdGhlcndpc2UgQVRPTSB3aWxsIGVudGVyIGluZmluaXRlIGxvb3AgKi8KKwlpZiAocmFkZW9uX2dwdV9yZXNldChyZGV2KSkgeworCQlkZXZfd2FybihyZGV2LT5kZXYsICJHUFUgcmVzZXQgZmFpbGVkICEgKDB4RTQwPTB4JTA4WCwgMHg3QzA9MHglMDhYKVxuIiwKKwkJCVJSRUczMihSXzAwMEU0MF9SQkJNX1NUQVRVUyksCisJCQlSUkVHMzIoUl8wMDA3QzBfQ1BfU1RBVCkpOworCX0KKwkvKiBwb3N0ICovCisJYXRvbV9hc2ljX2luaXQocmRldi0+bW9kZV9pbmZvLmF0b21fY29udGV4dCk7CisJLyogUmVzdW1lIGNsb2NrIGFmdGVyIHBvc3RpbmcgKi8KKwlydjUxNV9jbG9ja19zdGFydHVwKHJkZXYpOworCXJldHVybiByNTIwX3N0YXJ0dXAocmRldik7Cit9CisKK2ludCByNTIwX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJaW50IHI7CisKKwkvKiBJbml0aWFsaXplIHNjcmF0Y2ggcmVnaXN0ZXJzICovCisJcmFkZW9uX3NjcmF0Y2hfaW5pdChyZGV2KTsKKwkvKiBJbml0aWFsaXplIHN1cmZhY2UgcmVnaXN0ZXJzICovCisJcmFkZW9uX3N1cmZhY2VfaW5pdChyZGV2KTsKKwkvKiBUT0RPOiBkaXNhYmxlIFZHQSBuZWVkIHRvIHVzZSBWR0EgcmVxdWVzdCAqLworCS8qIEJJT1MqLworCWlmICghcmFkZW9uX2dldF9iaW9zKHJkZXYpKSB7CisJCWlmIChBU0lDX0lTX0FWSVZPKHJkZXYpKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWlmIChyZGV2LT5pc19hdG9tX2Jpb3MpIHsKKwkJciA9IHJhZGVvbl9hdG9tYmlvc19pbml0KHJkZXYpOworCQlpZiAocikKKwkJCXJldHVybiByOworCX0gZWxzZSB7CisJCWRldl9lcnIocmRldi0+ZGV2LCAiRXhwZWN0aW5nIGF0b21iaW9zIGZvciBSVjUxNSBHUFVcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJLyogUmVzZXQgZ3B1IGJlZm9yZSBwb3N0aW5nIG90aGVyd2lzZSBBVE9NIHdpbGwgZW50ZXIgaW5maW5pdGUgbG9vcCAqLworCWlmIChyYWRlb25fZ3B1X3Jlc2V0KHJkZXYpKSB7CisJCWRldl93YXJuKHJkZXYtPmRldiwKKwkJCSJHUFUgcmVzZXQgZmFpbGVkICEgKDB4RTQwPTB4JTA4WCwgMHg3QzA9MHglMDhYKVxuIiwKKwkJCVJSRUczMihSXzAwMEU0MF9SQkJNX1NUQVRVUyksCisJCQlSUkVHMzIoUl8wMDA3QzBfQ1BfU1RBVCkpOworCX0KKwkvKiBjaGVjayBpZiBjYXJkcyBhcmUgcG9zdGVkIG9yIG5vdCAqLworCWlmICghcmFkZW9uX2NhcmRfcG9zdGVkKHJkZXYpICYmIHJkZXYtPmJpb3MpIHsKKwkJRFJNX0lORk8oIkdQVSBub3QgcG9zdGVkLiBwb3N0aW5nIG5vdy4uLlxuIik7CisJCWF0b21fYXNpY19pbml0KHJkZXYtPm1vZGVfaW5mby5hdG9tX2NvbnRleHQpOworCX0KKwkvKiBJbml0aWFsaXplIGNsb2NrcyAqLworCXJhZGVvbl9nZXRfY2xvY2tfaW5mbyhyZGV2LT5kZGV2KTsKKwkvKiBHZXQgdnJhbSBpbmZvcm1hdGlvbnMgKi8KKwlyNTIwX3ZyYW1faW5mbyhyZGV2KTsKKwkvKiBJbml0aWFsaXplIG1lbW9yeSBjb250cm9sbGVyIChhbHNvIHRlc3QgQUdQKSAqLworCXIgPSByNDIwX21jX2luaXQocmRldik7CisJaWYgKHIpCisJCXJldHVybiByOworCXJ2NTE1X2RlYnVnZnMocmRldik7CisJLyogRmVuY2UgZHJpdmVyICovCisJciA9IHJhZGVvbl9mZW5jZV9kcml2ZXJfaW5pdChyZGV2KTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisJciA9IHJhZGVvbl9pcnFfa21zX2luaXQocmRldik7CisJaWYgKHIpCisJCXJldHVybiByOworCS8qIE1lbW9yeSBtYW5hZ2VyICovCisJciA9IHJhZGVvbl9vYmplY3RfaW5pdChyZGV2KTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisJciA9IHJ2MzcwX3BjaWVfZ2FydF9pbml0KHJkZXYpOworCWlmIChyKQorCQlyZXR1cm4gcjsKKwlydjUxNV9zZXRfc2FmZV9yZWdpc3RlcnMocmRldik7CisJcmRldi0+YWNjZWxfd29ya2luZyA9IHRydWU7CisJciA9IHI1MjBfc3RhcnR1cChyZGV2KTsKKwlpZiAocikgeworCQkvKiBTb21ldGhpbmdzIHdhbnQgd3JvbnQgd2l0aCB0aGUgYWNjZWwgaW5pdCBzdG9wIGFjY2VsICovCisJCWRldl9lcnIocmRldi0+ZGV2LCAiRGlzYWJsaW5nIEdQVSBhY2NlbGVyYXRpb25cbiIpOworCQlydjUxNV9zdXNwZW5kKHJkZXYpOworCQlyMTAwX2NwX2ZpbmkocmRldik7CisJCXIxMDBfd2JfZmluaShyZGV2KTsKKwkJcjEwMF9pYl9maW5pKHJkZXYpOworCQlydjM3MF9wY2llX2dhcnRfZmluaShyZGV2KTsKKwkJcmFkZW9uX2FncF9maW5pKHJkZXYpOworCQlyYWRlb25faXJxX2ttc19maW5pKHJkZXYpOworCQlyZGV2LT5hY2NlbF93b3JraW5nID0gZmFsc2U7CisJfQorCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNTIwZC5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNTIwZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxYWY2MWYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I1MjBkLmgKQEAgLTAsMCArMSwxODcgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwOCBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAwOCBSZWQgSGF0IEluYy4KKyAqIENvcHlyaWdodCAyMDA5IEplcm9tZSBHbGlzc2UuCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQ09QWVJJR0hUIEhPTERFUihTKSBPUiBBVVRIT1IoUykgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IKKyAqIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAorICogQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCisgKiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKgorICogQXV0aG9yczogRGF2ZSBBaXJsaWUKKyAqICAgICAgICAgIEFsZXggRGV1Y2hlcgorICogICAgICAgICAgSmVyb21lIEdsaXNzZQorICovCisjaWZuZGVmIF9fUjUyMERfSF9fCisjZGVmaW5lIF9fUjUyMERfSF9fCisKKy8qIFJlZ2lzdGVycyAqLworI2RlZmluZSBSXzAwMDBGOF9DT05GSUdfTUVNU0laRSAgICAgICAgICAgICAgICAgICAgICAweDAwMDBGOAorI2RlZmluZSAgIFNfMDAwMEY4X0NPTkZJR19NRU1TSVpFKHgpICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhGRkZGRkZGRikgPDwgMCkKKyNkZWZpbmUgICBHXzAwMDBGOF9DT05GSUdfTUVNU0laRSh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4RkZGRkZGRkYpCisjZGVmaW5lICAgQ18wMDAwRjhfQ09ORklHX01FTVNJWkUgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBSXzAwMDEzNF9IRFBfRkJfTE9DQVRJT04gICAgICAgICAgICAgICAgICAgICAweDAwMDEzNAorI2RlZmluZSAgIFNfMDAwMTM0X0hEUF9GQl9TVEFSVCh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhGRkZGKSA8PCAwKQorI2RlZmluZSAgIEdfMDAwMTM0X0hEUF9GQl9TVEFSVCh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHhGRkZGKQorI2RlZmluZSAgIENfMDAwMTM0X0hEUF9GQl9TVEFSVCAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRjAwMDAKKyNkZWZpbmUgUl8wMDA3QzBfQ1BfU1RBVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA3QzAKKyNkZWZpbmUgICBTXzAwMDdDMF9NUlVfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMCkKKyNkZWZpbmUgICBHXzAwMDdDMF9NUlVfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9NUlVfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZFCisjZGVmaW5lICAgU18wMDA3QzBfTVdVX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDEpCisjZGVmaW5lICAgR18wMDA3QzBfTVdVX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDA3QzBfTVdVX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRAorI2RlZmluZSAgIFNfMDAwN0MwX1JTSVVfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyKQorI2RlZmluZSAgIEdfMDAwN0MwX1JTSVVfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDIpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX1JTSVVfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkIKKyNkZWZpbmUgICBTXzAwMDdDMF9SQ0lVX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMykKKyNkZWZpbmUgICBHXzAwMDdDMF9SQ0lVX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAzKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9SQ0lVX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkY3CisjZGVmaW5lICAgU18wMDA3QzBfQ1NGX1BSSU1BUllfQlVTWSh4KSAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDkpCisjZGVmaW5lICAgR18wMDA3QzBfQ1NGX1BSSU1BUllfQlVTWSh4KSAgICAgICAgICAgICAgICAgKCgoeCkgPj4gOSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDA3QzBfQ1NGX1BSSU1BUllfQlVTWSAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkRGRgorI2RlZmluZSAgIFNfMDAwN0MwX0NTRl9JTkRJUkVDVF9CVVNZKHgpICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxMCkKKyNkZWZpbmUgICBHXzAwMDdDMF9DU0ZfSU5ESVJFQ1RfQlVTWSh4KSAgICAgICAgICAgICAgICAoKCh4KSA+PiAxMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDA3QzBfQ1NGX0lORElSRUNUX0JVU1kgICAgICAgICAgICAgICAgICAgMHhGRkZGRkJGRgorI2RlZmluZSAgIFNfMDAwN0MwX0NTUV9QUklNQVJZX0JVU1koeCkgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxMSkKKyNkZWZpbmUgICBHXzAwMDdDMF9DU1FfUFJJTUFSWV9CVVNZKHgpICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxMSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDA3QzBfQ1NRX1BSSU1BUllfQlVTWSAgICAgICAgICAgICAgICAgICAgMHhGRkZGRjdGRgorI2RlZmluZSAgIFNfMDAwN0MwX0NTUV9JTkRJUkVDVF9CVVNZKHgpICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxMikKKyNkZWZpbmUgICBHXzAwMDdDMF9DU1FfSU5ESVJFQ1RfQlVTWSh4KSAgICAgICAgICAgICAgICAoKCh4KSA+PiAxMikgJiAweDEpCisjZGVmaW5lICAgQ18wMDA3QzBfQ1NRX0lORElSRUNUX0JVU1kgICAgICAgICAgICAgICAgICAgMHhGRkZGRUZGRgorI2RlZmluZSAgIFNfMDAwN0MwX0NTSV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxMykKKyNkZWZpbmUgICBHXzAwMDdDMF9DU0lfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxMykgJiAweDEpCisjZGVmaW5lICAgQ18wMDA3QzBfQ1NJX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGREZGRgorI2RlZmluZSAgIFNfMDAwN0MwX0NTRl9JTkRJUkVDVDJfQlVTWSh4KSAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxNCkKKyNkZWZpbmUgICBHXzAwMDdDMF9DU0ZfSU5ESVJFQ1QyX0JVU1koeCkgICAgICAgICAgICAgICAoKCh4KSA+PiAxNCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDA3QzBfQ1NGX0lORElSRUNUMl9CVVNZICAgICAgICAgICAgICAgICAgMHhGRkZGQkZGRgorI2RlZmluZSAgIFNfMDAwN0MwX0NTUV9JTkRJUkVDVDJfQlVTWSh4KSAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxNSkKKyNkZWZpbmUgICBHXzAwMDdDMF9DU1FfSU5ESVJFQ1QyX0JVU1koeCkgICAgICAgICAgICAgICAoKCh4KSA+PiAxNSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDA3QzBfQ1NRX0lORElSRUNUMl9CVVNZICAgICAgICAgICAgICAgICAgMHhGRkZGN0ZGRgorI2RlZmluZSAgIFNfMDAwN0MwX0dVSURNQV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyOCkKKyNkZWZpbmUgICBHXzAwMDdDMF9HVUlETUFfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyOCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDA3QzBfR1VJRE1BX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgMHhFRkZGRkZGRgorI2RlZmluZSAgIFNfMDAwN0MwX1ZJRERNQV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyOSkKKyNkZWZpbmUgICBHXzAwMDdDMF9WSURETUFfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyOSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDA3QzBfVklERE1BX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgMHhERkZGRkZGRgorI2RlZmluZSAgIFNfMDAwN0MwX0NNRFNUUk1fQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAzMCkKKyNkZWZpbmUgICBHXzAwMDdDMF9DTURTVFJNX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAzMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDA3QzBfQ01EU1RSTV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgMHhCRkZGRkZGRgorI2RlZmluZSAgIFNfMDAwN0MwX0NQX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAzMSkKKyNkZWZpbmUgICBHXzAwMDdDMF9DUF9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAzMSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDA3QzBfQ1BfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg3RkZGRkZGRgorI2RlZmluZSBSXzAwMEU0MF9SQkJNX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMEU0MAorI2RlZmluZSAgIFNfMDAwRTQwX0NNREZJRk9fQVZBSUwoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHg3RikgPDwgMCkKKyNkZWZpbmUgICBHXzAwMEU0MF9DTURGSUZPX0FWQUlMKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4N0YpCisjZGVmaW5lICAgQ18wMDBFNDBfQ01ERklGT19BVkFJTCAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkY4MAorI2RlZmluZSAgIFNfMDAwRTQwX0hJUlFfT05fUkJCKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCA4KQorI2RlZmluZSAgIEdfMDAwRTQwX0hJUlFfT05fUkJCKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDgpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX0hJUlFfT05fUkJCICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZFRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9DUFJRX09OX1JCQih4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgOSkKKyNkZWZpbmUgICBHXzAwMEU0MF9DUFJRX09OX1JCQih4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiA5KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMEU0MF9DUFJRX09OX1JCQiAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGREZGCisjZGVmaW5lICAgU18wMDBFNDBfQ0ZSUV9PTl9SQkIoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDEwKQorI2RlZmluZSAgIEdfMDAwRTQwX0NGUlFfT05fUkJCKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDEwKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMEU0MF9DRlJRX09OX1JCQiAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGQkZGCisjZGVmaW5lICAgU18wMDBFNDBfSElSUV9JTl9SVEJVRih4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDExKQorI2RlZmluZSAgIEdfMDAwRTQwX0hJUlFfSU5fUlRCVUYoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDExKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMEU0MF9ISVJRX0lOX1JUQlVGICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGN0ZGCisjZGVmaW5lICAgU18wMDBFNDBfQ1BSUV9JTl9SVEJVRih4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDEyKQorI2RlZmluZSAgIEdfMDAwRTQwX0NQUlFfSU5fUlRCVUYoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDEyKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMEU0MF9DUFJRX0lOX1JUQlVGICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZFRkZGCisjZGVmaW5lICAgU18wMDBFNDBfQ0ZSUV9JTl9SVEJVRih4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDEzKQorI2RlZmluZSAgIEdfMDAwRTQwX0NGUlFfSU5fUlRCVUYoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDEzKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMEU0MF9DRlJRX0lOX1JUQlVGICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZERkZGCisjZGVmaW5lICAgU18wMDBFNDBfQ0ZfUElQRV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDE0KQorI2RlZmluZSAgIEdfMDAwRTQwX0NGX1BJUEVfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDE0KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMEU0MF9DRl9QSVBFX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZCRkZGCisjZGVmaW5lICAgU18wMDBFNDBfRU5HX0VWX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDE1KQorI2RlZmluZSAgIEdfMDAwRTQwX0VOR19FVl9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDE1KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMEU0MF9FTkdfRVZfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkY3RkZGCisjZGVmaW5lICAgU18wMDBFNDBfQ1BfQ01EU1RSTV9CVVNZKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDE2KQorI2RlZmluZSAgIEdfMDAwRTQwX0NQX0NNRFNUUk1fQlVTWSh4KSAgICAgICAgICAgICAgICAgICgoKHgpID4+IDE2KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMEU0MF9DUF9DTURTVFJNX0JVU1kgICAgICAgICAgICAgICAgICAgICAweEZGRkVGRkZGCisjZGVmaW5lICAgU18wMDBFNDBfRTJfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDE3KQorI2RlZmluZSAgIEdfMDAwRTQwX0UyX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDE3KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMEU0MF9FMl9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkRGRkZGCisjZGVmaW5lICAgU18wMDBFNDBfUkIyRF9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDE4KQorI2RlZmluZSAgIEdfMDAwRTQwX1JCMkRfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDE4KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMEU0MF9SQjJEX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkJGRkZGCisjZGVmaW5lICAgU18wMDBFNDBfUkIzRF9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDE5KQorI2RlZmluZSAgIEdfMDAwRTQwX1JCM0RfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDE5KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMEU0MF9SQjNEX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRjdGRkZGCisjZGVmaW5lICAgU18wMDBFNDBfVkFQX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDIwKQorI2RlZmluZSAgIEdfMDAwRTQwX1ZBUF9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDIwKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMEU0MF9WQVBfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRUZGRkZGCisjZGVmaW5lICAgU18wMDBFNDBfUkVfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDIxKQorI2RlZmluZSAgIEdfMDAwRTQwX1JFX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDIxKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMEU0MF9SRV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGREZGRkZGCisjZGVmaW5lICAgU18wMDBFNDBfVEFNX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDIyKQorI2RlZmluZSAgIEdfMDAwRTQwX1RBTV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDIyKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMEU0MF9UQU1fQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGQkZGRkZGCisjZGVmaW5lICAgU18wMDBFNDBfVERNX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDIzKQorI2RlZmluZSAgIEdfMDAwRTQwX1RETV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDIzKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMEU0MF9URE1fQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGN0ZGRkZGCisjZGVmaW5lICAgU18wMDBFNDBfUEJfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDI0KQorI2RlZmluZSAgIEdfMDAwRTQwX1BCX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDI0KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMEU0MF9QQl9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZFRkZGRkZGCisjZGVmaW5lICAgU18wMDBFNDBfVElNX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDI1KQorI2RlZmluZSAgIEdfMDAwRTQwX1RJTV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDI1KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMEU0MF9USU1fQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZERkZGRkZGCisjZGVmaW5lICAgU18wMDBFNDBfR0FfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDI2KQorI2RlZmluZSAgIEdfMDAwRTQwX0dBX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDI2KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMEU0MF9HQV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZCRkZGRkZGCisjZGVmaW5lICAgU18wMDBFNDBfQ0JBMkRfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDI3KQorI2RlZmluZSAgIEdfMDAwRTQwX0NCQTJEX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDI3KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMEU0MF9DQkEyRF9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAweEY3RkZGRkZGCisjZGVmaW5lICAgU18wMDBFNDBfUkJCTV9ISUJVU1koeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDI4KQorI2RlZmluZSAgIEdfMDAwRTQwX1JCQk1fSElCVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDI4KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMEU0MF9SQkJNX0hJQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAweEVGRkZGRkZGCisjZGVmaW5lICAgU18wMDBFNDBfU0tJRF9DRkJVU1koeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDI5KQorI2RlZmluZSAgIEdfMDAwRTQwX1NLSURfQ0ZCVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDI5KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMEU0MF9TS0lEX0NGQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAweERGRkZGRkZGCisjZGVmaW5lICAgU18wMDBFNDBfVkFQX1ZGX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDMwKQorI2RlZmluZSAgIEdfMDAwRTQwX1ZBUF9WRl9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDMwKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMEU0MF9WQVBfVkZfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAweEJGRkZGRkZGCisjZGVmaW5lICAgU18wMDBFNDBfR1VJX0FDVElWRSh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDMxKQorI2RlZmluZSAgIEdfMDAwRTQwX0dVSV9BQ1RJVkUoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDMxKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMEU0MF9HVUlfQUNUSVZFICAgICAgICAgICAgICAgICAgICAgICAgICAweDdGRkZGRkZGCisKKworI2RlZmluZSBSXzAwMDAwNF9NQ19GQl9MT0NBVElPTiAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNAorI2RlZmluZSAgIFNfMDAwMDA0X01DX0ZCX1NUQVJUKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhGRkZGKSA8PCAwKQorI2RlZmluZSAgIEdfMDAwMDA0X01DX0ZCX1NUQVJUKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHhGRkZGKQorI2RlZmluZSAgIENfMDAwMDA0X01DX0ZCX1NUQVJUICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRjAwMDAKKyNkZWZpbmUgICBTXzAwMDAwNF9NQ19GQl9UT1AoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RkZGRikgPDwgMTYpCisjZGVmaW5lICAgR18wMDAwMDRfTUNfRkJfVE9QKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTYpICYgMHhGRkZGKQorI2RlZmluZSAgIENfMDAwMDA0X01DX0ZCX1RPUCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEZGRkYKKyNkZWZpbmUgUl8wMDAwMDVfTUNfQUdQX0xPQ0FUSU9OICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDUKKyNkZWZpbmUgICBTXzAwMDAwNV9NQ19BR1BfU1RBUlQoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RkZGRikgPDwgMCkKKyNkZWZpbmUgICBHXzAwMDAwNV9NQ19BR1BfU1RBUlQoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4RkZGRikKKyNkZWZpbmUgICBDXzAwMDAwNV9NQ19BR1BfU1RBUlQgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkYwMDAwCisjZGVmaW5lICAgU18wMDAwMDVfTUNfQUdQX1RPUCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweEZGRkYpIDw8IDE2KQorI2RlZmluZSAgIEdfMDAwMDA1X01DX0FHUF9UT1AoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDE2KSAmIDB4RkZGRikKKyNkZWZpbmUgICBDXzAwMDAwNV9NQ19BR1BfVE9QICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBGRkZGCisjZGVmaW5lIFJfMDAwMDA2X0FHUF9CQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA2CisjZGVmaW5lICAgU18wMDAwMDZfQUdQX0JBU0VfQUREUih4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweEZGRkZGRkZGKSA8PCAwKQorI2RlZmluZSAgIEdfMDAwMDA2X0FHUF9CQVNFX0FERFIoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHhGRkZGRkZGRikKKyNkZWZpbmUgICBDXzAwMDAwNl9BR1BfQkFTRV9BRERSICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIFJfMDAwMDA3X0FHUF9CQVNFXzIgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA3CisjZGVmaW5lICAgU18wMDAwMDdfQUdQX0JBU0VfQUREUl8yKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweEYpIDw8IDApCisjZGVmaW5lICAgR18wMDAwMDdfQUdQX0JBU0VfQUREUl8yKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweEYpCisjZGVmaW5lICAgQ18wMDAwMDdfQUdQX0JBU0VfQUREUl8yICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGMAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMC5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwLmMKaW5kZXggZWFiMzFjMS4uNjA5NzE5NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwLmMKQEAgLTMzLDggKzMzLDggQEAKICNpbmNsdWRlICJyYWRlb24uaCIKICNpbmNsdWRlICJyYWRlb25fbW9kZS5oIgogI2luY2x1ZGUgInI2MDBkLmgiCi0jaW5jbHVkZSAiYXZpdm9kLmgiCiAjaW5jbHVkZSAiYXRvbS5oIgorI2luY2x1ZGUgImF2aXZvZC5oIgogCiAjZGVmaW5lIFBGUF9VQ09ERV9TSVpFIDU3NgogI2RlZmluZSBQTTRfVUNPREVfU0laRSAxNzkyCkBAIC02NSwxNiArNjUsMTEgQEAKIAogaW50IHI2MDBfZGVidWdmc19tY19pbmZvX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogCi0vKiBUaGlzIGZpbGVzIGdhdGhlciBmdW5jdGlvbnMgc3BlY2lmaWNzIHRvOgotICogcjYwMCxydjYxMCxydjYzMCxydjYyMCxydjYzNSxydjY3MAotICoKLSAqIFNvbWUgb2YgdGhlc2UgZnVuY3Rpb25zIG1pZ2h0IGJlIHVzZWQgYnkgbmV3ZXIgQVNJQ3MuCi0gKi8KKy8qIHI2MDAscnY2MTAscnY2MzAscnY2MjAscnY2MzUscnY2NzAgKi8KIGludCByNjAwX21jX3dhaXRfZm9yX2lkbGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogdm9pZCByNjAwX2dwdV9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIHZvaWQgcjYwMF9maW5pKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIAotCiAvKgogICogUjYwMCBQQ0lFIEdBUlQKICAqLwpAQCAtMTY4LDcgKzE2Myw3IEBACiAJV1JFRzMyKE1DX1ZNX0wxX1RMQl9NQ0JfUkRfU0VNX0NOVEwsIHRtcCB8IEVOQUJMRV9TRU1BUEhPUkVfTU9ERSk7CiAJV1JFRzMyKE1DX1ZNX0wxX1RMQl9NQ0JfV1JfU0VNX0NOVEwsIHRtcCB8IEVOQUJMRV9TRU1BUEhPUkVfTU9ERSk7CiAJV1JFRzMyKFZNX0NPTlRFWFQwX1BBR0VfVEFCTEVfU1RBUlRfQUREUiwgcmRldi0+bWMuZ3R0X3N0YXJ0ID4+IDEyKTsKLQlXUkVHMzIoVk1fQ09OVEVYVDBfUEFHRV9UQUJMRV9FTkRfQUREUiwgKHJkZXYtPm1jLmd0dF9lbmQgLSAxKSA+PiAxMik7CisJV1JFRzMyKFZNX0NPTlRFWFQwX1BBR0VfVEFCTEVfRU5EX0FERFIsIHJkZXYtPm1jLmd0dF9lbmQgPj4gMTIpOwogCVdSRUczMihWTV9DT05URVhUMF9QQUdFX1RBQkxFX0JBU0VfQUREUiwgcmRldi0+Z2FydC50YWJsZV9hZGRyID4+IDEyKTsKIAlXUkVHMzIoVk1fQ09OVEVYVDBfQ05UTCwgRU5BQkxFX0NPTlRFWFQgfCBQQUdFX1RBQkxFX0RFUFRIKDApIHwKIAkJCQlSQU5HRV9QUk9URUNUSU9OX0ZBVUxUX0VOQUJMRV9ERUZBVUxUKTsKQEAgLTIyNSw2ICsyMjAsNDAgQEAKIAlyYWRlb25fZ2FydF9maW5pKHJkZXYpOwogfQogCit2b2lkIHI2MDBfYWdwX2VuYWJsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwl1MzIgdG1wOworCWludCBpOworCisJLyogU2V0dXAgTDIgY2FjaGUgKi8KKwlXUkVHMzIoVk1fTDJfQ05UTCwgRU5BQkxFX0wyX0NBQ0hFIHwgRU5BQkxFX0wyX0ZSQUdNRU5UX1BST0NFU1NJTkcgfAorCQkJCUVOQUJMRV9MMl9QVEVfQ0FDSEVfTFJVX1VQREFURV9CWV9XUklURSB8CisJCQkJRUZGRUNUSVZFX0wyX1FVRVVFX1NJWkUoNykpOworCVdSRUczMihWTV9MMl9DTlRMMiwgMCk7CisJV1JFRzMyKFZNX0wyX0NOVEwzLCBCQU5LX1NFTEVDVF8wKDApIHwgQkFOS19TRUxFQ1RfMSgxKSk7CisJLyogU2V0dXAgVExCIGNvbnRyb2wgKi8KKwl0bXAgPSBFTkFCTEVfTDFfVExCIHwgRU5BQkxFX0wxX0ZSQUdNRU5UX1BST0NFU1NJTkcgfAorCQlTWVNURU1fQUNDRVNTX01PREVfTk9UX0lOX1NZUyB8CisJCUVGRkVDVElWRV9MMV9UTEJfU0laRSg1KSB8IEVGRkVDVElWRV9MMV9RVUVVRV9TSVpFKDUpIHwKKwkJRU5BQkxFX1dBSVRfTDJfUVVFUlk7CisJV1JFRzMyKE1DX1ZNX0wxX1RMQl9NQ0JfUkRfU1lTX0NOVEwsIHRtcCk7CisJV1JFRzMyKE1DX1ZNX0wxX1RMQl9NQ0JfV1JfU1lTX0NOVEwsIHRtcCk7CisJV1JFRzMyKE1DX1ZNX0wxX1RMQl9NQ0JfUkRfSERQX0NOVEwsIHRtcCB8IEVOQUJMRV9MMV9TVFJJQ1RfT1JERVJJTkcpOworCVdSRUczMihNQ19WTV9MMV9UTEJfTUNCX1dSX0hEUF9DTlRMLCB0bXApOworCVdSRUczMihNQ19WTV9MMV9UTEJfTUNEX1JEX0FfQ05UTCwgdG1wKTsKKwlXUkVHMzIoTUNfVk1fTDFfVExCX01DRF9XUl9BX0NOVEwsIHRtcCk7CisJV1JFRzMyKE1DX1ZNX0wxX1RMQl9NQ0RfUkRfQl9DTlRMLCB0bXApOworCVdSRUczMihNQ19WTV9MMV9UTEJfTUNEX1dSX0JfQ05UTCwgdG1wKTsKKwlXUkVHMzIoTUNfVk1fTDFfVExCX01DQl9SRF9HRlhfQ05UTCwgdG1wKTsKKwlXUkVHMzIoTUNfVk1fTDFfVExCX01DQl9XUl9HRlhfQ05UTCwgdG1wKTsKKwlXUkVHMzIoTUNfVk1fTDFfVExCX01DQl9SRF9QRE1BX0NOVEwsIHRtcCk7CisJV1JFRzMyKE1DX1ZNX0wxX1RMQl9NQ0JfV1JfUERNQV9DTlRMLCB0bXApOworCVdSRUczMihNQ19WTV9MMV9UTEJfTUNCX1JEX1NFTV9DTlRMLCB0bXAgfCBFTkFCTEVfU0VNQVBIT1JFX01PREUpOworCVdSRUczMihNQ19WTV9MMV9UTEJfTUNCX1dSX1NFTV9DTlRMLCB0bXAgfCBFTkFCTEVfU0VNQVBIT1JFX01PREUpOworCWZvciAoaSA9IDA7IGkgPCA3OyBpKyspCisJCVdSRUczMihWTV9DT05URVhUMF9DTlRMICsgKGkgKiA0KSwgMCk7Cit9CisKIGludCByNjAwX21jX3dhaXRfZm9yX2lkbGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7CiAJdW5zaWduZWQgaTsKQEAgLTI0MCwxNCArMjY5LDkgQEAKIAlyZXR1cm4gLTE7CiB9CiAKLXN0YXRpYyB2b2lkIHI2MDBfbWNfcmVzdW1lKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQorc3RhdGljIHZvaWQgcjYwMF9tY19wcm9ncmFtKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewotCXUzMiBkMXZnYV9jb250cm9sLCBkMnZnYV9jb250cm9sOwotCXUzMiB2Z2FfcmVuZGVyX2NvbnRyb2wsIHZnYV9oZHBfY29udHJvbDsKLQl1MzIgZDFjcnRjX2NvbnRyb2wsIGQyY3J0Y19jb250cm9sOwotCXUzMiBuZXdfZDFncnBoX3ByaW1hcnksIG5ld19kMWdycGhfc2Vjb25kYXJ5OwotCXUzMiBuZXdfZDJncnBoX3ByaW1hcnksIG5ld19kMmdycGhfc2Vjb25kYXJ5OwotCXU2NCBvbGRfdnJhbV9zdGFydDsKKwlzdHJ1Y3QgcnY1MTVfbWNfc2F2ZSBzYXZlOwogCXUzMiB0bXA7CiAJaW50IGksIGo7CiAKQEAgLTI2MSw4OCArMjg1LDU0IEBACiAJfQogCVdSRUczMihIRFBfUkVHX0NPSEVSRU5DWV9GTFVTSF9DTlRMLCAwKTsKIAotCWQxdmdhX2NvbnRyb2wgPSBSUkVHMzIoRDFWR0FfQ09OVFJPTCk7Ci0JZDJ2Z2FfY29udHJvbCA9IFJSRUczMihEMlZHQV9DT05UUk9MKTsKLQl2Z2FfcmVuZGVyX2NvbnRyb2wgPSBSUkVHMzIoVkdBX1JFTkRFUl9DT05UUk9MKTsKLQl2Z2FfaGRwX2NvbnRyb2wgPSBSUkVHMzIoVkdBX0hEUF9DT05UUk9MKTsKLQlkMWNydGNfY29udHJvbCA9IFJSRUczMihEMUNSVENfQ09OVFJPTCk7Ci0JZDJjcnRjX2NvbnRyb2wgPSBSUkVHMzIoRDJDUlRDX0NPTlRST0wpOwotCW9sZF92cmFtX3N0YXJ0ID0gKHU2NCkoUlJFRzMyKE1DX1ZNX0ZCX0xPQ0FUSU9OKSAmIDB4RkZGRikgPDwgMjQ7Ci0JbmV3X2QxZ3JwaF9wcmltYXJ5ID0gUlJFRzMyKEQxR1JQSF9QUklNQVJZX1NVUkZBQ0VfQUREUkVTUyk7Ci0JbmV3X2QxZ3JwaF9zZWNvbmRhcnkgPSBSUkVHMzIoRDFHUlBIX1NFQ09OREFSWV9TVVJGQUNFX0FERFJFU1MpOwotCW5ld19kMWdycGhfcHJpbWFyeSArPSByZGV2LT5tYy52cmFtX3N0YXJ0IC0gb2xkX3ZyYW1fc3RhcnQ7Ci0JbmV3X2QxZ3JwaF9zZWNvbmRhcnkgKz0gcmRldi0+bWMudnJhbV9zdGFydCAtIG9sZF92cmFtX3N0YXJ0OwotCW5ld19kMmdycGhfcHJpbWFyeSA9IFJSRUczMihEMkdSUEhfUFJJTUFSWV9TVVJGQUNFX0FERFJFU1MpOwotCW5ld19kMmdycGhfc2Vjb25kYXJ5ID0gUlJFRzMyKEQyR1JQSF9TRUNPTkRBUllfU1VSRkFDRV9BRERSRVNTKTsKLQluZXdfZDJncnBoX3ByaW1hcnkgKz0gcmRldi0+bWMudnJhbV9zdGFydCAtIG9sZF92cmFtX3N0YXJ0OwotCW5ld19kMmdycGhfc2Vjb25kYXJ5ICs9IHJkZXYtPm1jLnZyYW1fc3RhcnQgLSBvbGRfdnJhbV9zdGFydDsKLQotCS8qIFN0b3AgYWxsIHZpZGVvICovCi0JV1JFRzMyKEQxVkdBX0NPTlRST0wsIDApOwotCVdSRUczMihEMlZHQV9DT05UUk9MLCAwKTsKLQlXUkVHMzIoVkdBX1JFTkRFUl9DT05UUk9MLCAwKTsKLQlXUkVHMzIoRDFDUlRDX1VQREFURV9MT0NLLCAxKTsKLQlXUkVHMzIoRDJDUlRDX1VQREFURV9MT0NLLCAxKTsKLQlXUkVHMzIoRDFDUlRDX0NPTlRST0wsIDApOwotCVdSRUczMihEMkNSVENfQ09OVFJPTCwgMCk7Ci0JV1JFRzMyKEQxQ1JUQ19VUERBVEVfTE9DSywgMCk7Ci0JV1JFRzMyKEQyQ1JUQ19VUERBVEVfTE9DSywgMCk7Ci0KLQltZGVsYXkoMSk7CisJcnY1MTVfbWNfc3RvcChyZGV2LCAmc2F2ZSk7CiAJaWYgKHI2MDBfbWNfd2FpdF9mb3JfaWRsZShyZGV2KSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJbZHJtXSBNQyBub3QgaWRsZSAhXG4iKTsKKwkJZGV2X3dhcm4ocmRldi0+ZGV2LCAiV2FpdCBmb3IgTUMgaWRsZSB0aW1lZG91dCAhXG4iKTsKIAl9Ci0KLQkvKiBMb2Nrb3V0IGFjY2VzcyB0aHJvdWdoIFZHQSBhcGVydHVyZSovCisJLyogTG9ja291dCBhY2Nlc3MgdGhyb3VnaCBWR0EgYXBlcnR1cmUgKGRvZXNuJ3QgZXhpc3QgYmVmb3JlIFI2MDApICovCiAJV1JFRzMyKFZHQV9IRFBfQ09OVFJPTCwgVkdBX01FTU9SWV9ESVNBQkxFKTsKLQogCS8qIFVwZGF0ZSBjb25maWd1cmF0aW9uICovCi0JV1JFRzMyKE1DX1ZNX1NZU1RFTV9BUEVSVFVSRV9MT1dfQUREUiwgcmRldi0+bWMudnJhbV9zdGFydCA+PiAxMik7Ci0JV1JFRzMyKE1DX1ZNX1NZU1RFTV9BUEVSVFVSRV9ISUdIX0FERFIsIChyZGV2LT5tYy52cmFtX2VuZCAtIDEpID4+IDEyKTsKKwlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfQUdQKSB7CisJCWlmIChyZGV2LT5tYy52cmFtX3N0YXJ0IDwgcmRldi0+bWMuZ3R0X3N0YXJ0KSB7CisJCQkvKiBWUkFNIGJlZm9yZSBBR1AgKi8KKwkJCVdSRUczMihNQ19WTV9TWVNURU1fQVBFUlRVUkVfTE9XX0FERFIsCisJCQkJcmRldi0+bWMudnJhbV9zdGFydCA+PiAxMik7CisJCQlXUkVHMzIoTUNfVk1fU1lTVEVNX0FQRVJUVVJFX0hJR0hfQUREUiwKKwkJCQlyZGV2LT5tYy5ndHRfZW5kID4+IDEyKTsKKwkJfSBlbHNlIHsKKwkJCS8qIFZSQU0gYWZ0ZXIgQUdQICovCisJCQlXUkVHMzIoTUNfVk1fU1lTVEVNX0FQRVJUVVJFX0xPV19BRERSLAorCQkJCXJkZXYtPm1jLmd0dF9zdGFydCA+PiAxMik7CisJCQlXUkVHMzIoTUNfVk1fU1lTVEVNX0FQRVJUVVJFX0hJR0hfQUREUiwKKwkJCQlyZGV2LT5tYy52cmFtX2VuZCA+PiAxMik7CisJCX0KKwl9IGVsc2UgeworCQlXUkVHMzIoTUNfVk1fU1lTVEVNX0FQRVJUVVJFX0xPV19BRERSLCByZGV2LT5tYy52cmFtX3N0YXJ0ID4+IDEyKTsKKwkJV1JFRzMyKE1DX1ZNX1NZU1RFTV9BUEVSVFVSRV9ISUdIX0FERFIsIHJkZXYtPm1jLnZyYW1fZW5kID4+IDEyKTsKKwl9CiAJV1JFRzMyKE1DX1ZNX1NZU1RFTV9BUEVSVFVSRV9ERUZBVUxUX0FERFIsIDApOwotCXRtcCA9ICgoKHJkZXYtPm1jLnZyYW1fZW5kIC0gMSkgPj4gMjQpICYgMHhGRkZGKSA8PCAxNjsKKwl0bXAgPSAoKHJkZXYtPm1jLnZyYW1fZW5kID4+IDI0KSAmIDB4RkZGRikgPDwgMTY7CiAJdG1wIHw9ICgocmRldi0+bWMudnJhbV9zdGFydCA+PiAyNCkgJiAweEZGRkYpOwogCVdSRUczMihNQ19WTV9GQl9MT0NBVElPTiwgdG1wKTsKIAlXUkVHMzIoSERQX05PTlNVUkZBQ0VfQkFTRSwgKHJkZXYtPm1jLnZyYW1fc3RhcnQgPj4gOCkpOwogCVdSRUczMihIRFBfTk9OU1VSRkFDRV9JTkZPLCAoMiA8PCA3KSk7Ci0JV1JFRzMyKEhEUF9OT05TVVJGQUNFX1NJWkUsIChyZGV2LT5tYy5tY192cmFtX3NpemUgLSAxKSB8IDB4M0ZGKTsKKwlXUkVHMzIoSERQX05PTlNVUkZBQ0VfU0laRSwgcmRldi0+bWMubWNfdnJhbV9zaXplIHwgMHgzRkYpOwogCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19BR1ApIHsKLQkJV1JFRzMyKE1DX1ZNX0FHUF9UT1AsIChyZGV2LT5tYy5ndHRfZW5kIC0gMSkgPj4gMTYpOwotCQlXUkVHMzIoTUNfVk1fQUdQX0JPVCwgcmRldi0+bWMuZ3R0X3N0YXJ0ID4+IDE2KTsKKwkJV1JFRzMyKE1DX1ZNX0FHUF9UT1AsIHJkZXYtPm1jLmd0dF9lbmQgPj4gMjIpOworCQlXUkVHMzIoTUNfVk1fQUdQX0JPVCwgcmRldi0+bWMuZ3R0X3N0YXJ0ID4+IDIyKTsKIAkJV1JFRzMyKE1DX1ZNX0FHUF9CQVNFLCByZGV2LT5tYy5hZ3BfYmFzZSA+PiAyMik7CiAJfSBlbHNlIHsKIAkJV1JFRzMyKE1DX1ZNX0FHUF9CQVNFLCAwKTsKIAkJV1JFRzMyKE1DX1ZNX0FHUF9UT1AsIDB4MEZGRkZGRkYpOwogCQlXUkVHMzIoTUNfVk1fQUdQX0JPVCwgMHgwRkZGRkZGRik7CiAJfQotCVdSRUczMihEMUdSUEhfUFJJTUFSWV9TVVJGQUNFX0FERFJFU1MsIG5ld19kMWdycGhfcHJpbWFyeSk7Ci0JV1JFRzMyKEQxR1JQSF9TRUNPTkRBUllfU1VSRkFDRV9BRERSRVNTLCBuZXdfZDFncnBoX3NlY29uZGFyeSk7Ci0JV1JFRzMyKEQyR1JQSF9QUklNQVJZX1NVUkZBQ0VfQUREUkVTUywgbmV3X2QyZ3JwaF9wcmltYXJ5KTsKLQlXUkVHMzIoRDJHUlBIX1NFQ09OREFSWV9TVVJGQUNFX0FERFJFU1MsIG5ld19kMmdycGhfc2Vjb25kYXJ5KTsKLQlXUkVHMzIoVkdBX01FTU9SWV9CQVNFX0FERFJFU1MsIHJkZXYtPm1jLnZyYW1fc3RhcnQpOwotCi0JLyogVW5sb2NrIGhvc3QgYWNjZXNzICovCi0JV1JFRzMyKFZHQV9IRFBfQ09OVFJPTCwgdmdhX2hkcF9jb250cm9sKTsKLQotCW1kZWxheSgxKTsKIAlpZiAocjYwMF9tY193YWl0X2Zvcl9pZGxlKHJkZXYpKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIltkcm1dIE1DIG5vdCBpZGxlICFcbiIpOworCQlkZXZfd2FybihyZGV2LT5kZXYsICJXYWl0IGZvciBNQyBpZGxlIHRpbWVkb3V0ICFcbiIpOwogCX0KLQotCS8qIFJlc3RvcmUgdmlkZW8gc3RhdGUgKi8KLQlXUkVHMzIoRDFDUlRDX1VQREFURV9MT0NLLCAxKTsKLQlXUkVHMzIoRDJDUlRDX1VQREFURV9MT0NLLCAxKTsKLQlXUkVHMzIoRDFDUlRDX0NPTlRST0wsIGQxY3J0Y19jb250cm9sKTsKLQlXUkVHMzIoRDJDUlRDX0NPTlRST0wsIGQyY3J0Y19jb250cm9sKTsKLQlXUkVHMzIoRDFDUlRDX1VQREFURV9MT0NLLCAwKTsKLQlXUkVHMzIoRDJDUlRDX1VQREFURV9MT0NLLCAwKTsKLQlXUkVHMzIoRDFWR0FfQ09OVFJPTCwgZDF2Z2FfY29udHJvbCk7Ci0JV1JFRzMyKEQyVkdBX0NPTlRST0wsIGQydmdhX2NvbnRyb2wpOwotCVdSRUczMihWR0FfUkVOREVSX0NPTlRST0wsIHZnYV9yZW5kZXJfY29udHJvbCk7Ci0KKwlydjUxNV9tY19yZXN1bWUocmRldiwgJnNhdmUpOwogCS8qIHdlIG5lZWQgdG8gb3duIFZSQU0sIHNvIHR1cm4gb2ZmIHRoZSBWR0EgcmVuZGVyZXIgaGVyZQogCSAqIHRvIHN0b3AgaXQgb3ZlcndyaXRpbmcgb3VyIG9iamVjdHMgKi8KLQlyYWRlb25fYXZpdm9fdmdhX3JlbmRlcl9kaXNhYmxlKHJkZXYpOworCXJ2NTE1X3ZnYV9yZW5kZXJfZGlzYWJsZShyZGV2KTsKIH0KIAogaW50IHI2MDBfbWNfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKQEAgLTM4MCw2ICszNzAsMTMgQEAKIAkvKiBTZXR1cCBHUFUgbWVtb3J5IHNwYWNlICovCiAJcmRldi0+bWMubWNfdnJhbV9zaXplID0gUlJFRzMyKENPTkZJR19NRU1TSVpFKTsKIAlyZGV2LT5tYy5yZWFsX3ZyYW1fc2l6ZSA9IFJSRUczMihDT05GSUdfTUVNU0laRSk7CisKKwlpZiAocmRldi0+bWMubWNfdnJhbV9zaXplID4gcmRldi0+bWMuYXBlcl9zaXplKQorCQlyZGV2LT5tYy5tY192cmFtX3NpemUgPSByZGV2LT5tYy5hcGVyX3NpemU7CisKKwlpZiAocmRldi0+bWMucmVhbF92cmFtX3NpemUgPiByZGV2LT5tYy5hcGVyX3NpemUpCisJCXJkZXYtPm1jLnJlYWxfdnJhbV9zaXplID0gcmRldi0+bWMuYXBlcl9zaXplOworCiAJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX0FHUCkgewogCQlyID0gcmFkZW9uX2FncF9pbml0KHJkZXYpOwogCQlpZiAocikKQEAgLTQzOCw5ICs0MzUsOSBAQAogCQl9CiAJfQogCXJkZXYtPm1jLnZyYW1fc3RhcnQgPSByZGV2LT5tYy52cmFtX2xvY2F0aW9uOwotCXJkZXYtPm1jLnZyYW1fZW5kID0gcmRldi0+bWMudnJhbV9sb2NhdGlvbiArIHJkZXYtPm1jLm1jX3ZyYW1fc2l6ZTsKKwlyZGV2LT5tYy52cmFtX2VuZCA9IHJkZXYtPm1jLnZyYW1fbG9jYXRpb24gKyByZGV2LT5tYy5tY192cmFtX3NpemUgLSAxOwogCXJkZXYtPm1jLmd0dF9zdGFydCA9IHJkZXYtPm1jLmd0dF9sb2NhdGlvbjsKLQlyZGV2LT5tYy5ndHRfZW5kID0gcmRldi0+bWMuZ3R0X2xvY2F0aW9uICsgcmRldi0+bWMuZ3R0X3NpemU7CisJcmRldi0+bWMuZ3R0X2VuZCA9IHJkZXYtPm1jLmd0dF9sb2NhdGlvbiArIHJkZXYtPm1jLmd0dF9zaXplIC0gMTsKIAkvKiBGSVhNRTogd2Ugc2hvdWxkIGVuZm9yY2UgZGVmYXVsdCBjbG9jayBpbiBjYXNlIEdQVSBpcyBub3QgaW4KIAkgKiBkZWZhdWx0IHNldHVwCiAJICovCkBAIC00NTYsNiArNDUzLDcgQEAKICAqLwogaW50IHI2MDBfZ3B1X3NvZnRfcmVzZXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7CisJc3RydWN0IHJ2NTE1X21jX3NhdmUgc2F2ZTsKIAl1MzIgZ3JibV9idXN5X21hc2sgPSBTXzAwODAxMF9WQ19CVVNZKDEpIHwgU18wMDgwMTBfVkdUX0JVU1lfTk9fRE1BKDEpIHwKIAkJCQlTXzAwODAxMF9WR1RfQlVTWSgxKSB8IFNfMDA4MDEwX1RBMDNfQlVTWSgxKSB8CiAJCQkJU18wMDgwMTBfVENfQlVTWSgxKSB8IFNfMDA4MDEwX1NYX0JVU1koMSkgfApAQCAtNDczLDEzICs0NzEsMjUgQEAKIAkJCVNfMDA4MDE0X0NCMF9CVVNZKDEpIHwgU18wMDgwMTRfQ0IxX0JVU1koMSkgfAogCQkJU18wMDgwMTRfQ0IyX0JVU1koMSkgfCBTXzAwODAxNF9DQjNfQlVTWSgxKTsKIAl1MzIgc3JibV9yZXNldCA9IDA7CisJdTMyIHRtcDsKIAorCWRldl9pbmZvKHJkZXYtPmRldiwgIkdQVSBzb2Z0cmVzZXQgXG4iKTsKKwlkZXZfaW5mbyhyZGV2LT5kZXYsICIgIFJfMDA4MDEwX0dSQk1fU1RBVFVTPTB4JTA4WFxuIiwKKwkJUlJFRzMyKFJfMDA4MDEwX0dSQk1fU1RBVFVTKSk7CisJZGV2X2luZm8ocmRldi0+ZGV2LCAiICBSXzAwODAxNF9HUkJNX1NUQVRVUzI9MHglMDhYXG4iLAorCQlSUkVHMzIoUl8wMDgwMTRfR1JCTV9TVEFUVVMyKSk7CisJZGV2X2luZm8ocmRldi0+ZGV2LCAiICBSXzAwMEU1MF9TUkJNX1NUQVRVUz0weCUwOFhcbiIsCisJCVJSRUczMihSXzAwMEU1MF9TUkJNX1NUQVRVUykpOworCXJ2NTE1X21jX3N0b3AocmRldiwgJnNhdmUpOworCWlmIChyNjAwX21jX3dhaXRfZm9yX2lkbGUocmRldikpIHsKKwkJZGV2X3dhcm4ocmRldi0+ZGV2LCAiV2FpdCBmb3IgTUMgaWRsZSB0aW1lZG91dCAhXG4iKTsKKwl9CiAJLyogRGlzYWJsZSBDUCBwYXJzaW5nL3ByZWZldGNoaW5nICovCiAJV1JFRzMyKFJfMDA4NkQ4X0NQX01FX0NOVEwsIFNfMDA4NkQ4X0NQX01FX0hBTFQoMHhmZikpOwogCS8qIENoZWNrIGlmIGFueSBvZiB0aGUgcmVuZGVyaW5nIGJsb2NrIGlzIGJ1c3kgYW5kIHJlc2V0IGl0ICovCiAJaWYgKChSUkVHMzIoUl8wMDgwMTBfR1JCTV9TVEFUVVMpICYgZ3JibV9idXN5X21hc2spIHx8CiAJICAgIChSUkVHMzIoUl8wMDgwMTRfR1JCTV9TVEFUVVMyKSAmIGdyYm0yX2J1c3lfbWFzaykpIHsKLQkJV1JFRzMyKFJfMDA4MDIwX0dSQk1fU09GVF9SRVNFVCwgU18wMDgwMjBfU09GVF9SRVNFVF9DUigxKSB8CisJCXRtcCA9IFNfMDA4MDIwX1NPRlRfUkVTRVRfQ1IoMSkgfAogCQkJU18wMDgwMjBfU09GVF9SRVNFVF9EQigxKSB8CiAJCQlTXzAwODAyMF9TT0ZUX1JFU0VUX0NCKDEpIHwKIAkJCVNfMDA4MDIwX1NPRlRfUkVTRVRfUEEoMSkgfApAQCAtNDkxLDE0ICs1MDEsMTggQEAKIAkJCVNfMDA4MDIwX1NPRlRfUkVTRVRfVEMoMSkgfAogCQkJU18wMDgwMjBfU09GVF9SRVNFVF9UQSgxKSB8CiAJCQlTXzAwODAyMF9TT0ZUX1JFU0VUX1ZDKDEpIHwKLQkJCVNfMDA4MDIwX1NPRlRfUkVTRVRfVkdUKDEpKTsKKwkJCVNfMDA4MDIwX1NPRlRfUkVTRVRfVkdUKDEpOworCQlkZXZfaW5mbyhyZGV2LT5kZXYsICIgIFJfMDA4MDIwX0dSQk1fU09GVF9SRVNFVD0weCUwOFhcbiIsIHRtcCk7CisJCVdSRUczMihSXzAwODAyMF9HUkJNX1NPRlRfUkVTRVQsIHRtcCk7CiAJCSh2b2lkKVJSRUczMihSXzAwODAyMF9HUkJNX1NPRlRfUkVTRVQpOwogCQl1ZGVsYXkoNTApOwogCQlXUkVHMzIoUl8wMDgwMjBfR1JCTV9TT0ZUX1JFU0VULCAwKTsKIAkJKHZvaWQpUlJFRzMyKFJfMDA4MDIwX0dSQk1fU09GVF9SRVNFVCk7CiAJfQogCS8qIFJlc2V0IENQICh3ZSBhbHdheXMgcmVzZXQgQ1ApICovCi0JV1JFRzMyKFJfMDA4MDIwX0dSQk1fU09GVF9SRVNFVCwgU18wMDgwMjBfU09GVF9SRVNFVF9DUCgxKSk7CisJdG1wID0gU18wMDgwMjBfU09GVF9SRVNFVF9DUCgxKTsKKwlkZXZfaW5mbyhyZGV2LT5kZXYsICJSXzAwODAyMF9HUkJNX1NPRlRfUkVTRVQ9MHglMDhYXG4iLCB0bXApOworCVdSRUczMihSXzAwODAyMF9HUkJNX1NPRlRfUkVTRVQsIHRtcCk7CiAJKHZvaWQpUlJFRzMyKFJfMDA4MDIwX0dSQk1fU09GVF9SRVNFVCk7CiAJdWRlbGF5KDUwKTsKIAlXUkVHMzIoUl8wMDgwMjBfR1JCTV9TT0ZUX1JFU0VULCAwKTsKQEAgLTUyNiw2ICs1NDAsMTQgQEAKIAkJc3JibV9yZXNldCB8PSBTXzAwMEU2MF9TT0ZUX1JFU0VUX1JMQygxKTsKIAlpZiAoR18wMDBFNTBfU0VNX0JVU1koUlJFRzMyKFJfMDAwRTUwX1NSQk1fU1RBVFVTKSkpCiAJCXNyYm1fcmVzZXQgfD0gU18wMDBFNjBfU09GVF9SRVNFVF9TRU0oMSk7CisJaWYgKEdfMDAwRTUwX0JJRl9CVVNZKFJSRUczMihSXzAwMEU1MF9TUkJNX1NUQVRVUykpKQorCQlzcmJtX3Jlc2V0IHw9IFNfMDAwRTYwX1NPRlRfUkVTRVRfQklGKDEpOworCWRldl9pbmZvKHJkZXYtPmRldiwgIiAgUl8wMDBFNjBfU1JCTV9TT0ZUX1JFU0VUPTB4JTA4WFxuIiwgc3JibV9yZXNldCk7CisJV1JFRzMyKFJfMDAwRTYwX1NSQk1fU09GVF9SRVNFVCwgc3JibV9yZXNldCk7CisJKHZvaWQpUlJFRzMyKFJfMDAwRTYwX1NSQk1fU09GVF9SRVNFVCk7CisJdWRlbGF5KDUwKTsKKwlXUkVHMzIoUl8wMDBFNjBfU1JCTV9TT0ZUX1JFU0VULCAwKTsKKwkodm9pZClSUkVHMzIoUl8wMDBFNjBfU1JCTV9TT0ZUX1JFU0VUKTsKIAlXUkVHMzIoUl8wMDBFNjBfU1JCTV9TT0ZUX1JFU0VULCBzcmJtX3Jlc2V0KTsKIAkodm9pZClSUkVHMzIoUl8wMDBFNjBfU1JCTV9TT0ZUX1JFU0VUKTsKIAl1ZGVsYXkoNTApOwpAQCAtNTMzLDYgKzU1NSwxNyBAQAogCSh2b2lkKVJSRUczMihSXzAwMEU2MF9TUkJNX1NPRlRfUkVTRVQpOwogCS8qIFdhaXQgYSBsaXR0bGUgZm9yIHRoaW5ncyB0byBzZXR0bGUgZG93biAqLwogCXVkZWxheSg1MCk7CisJZGV2X2luZm8ocmRldi0+ZGV2LCAiICBSXzAwODAxMF9HUkJNX1NUQVRVUz0weCUwOFhcbiIsCisJCVJSRUczMihSXzAwODAxMF9HUkJNX1NUQVRVUykpOworCWRldl9pbmZvKHJkZXYtPmRldiwgIiAgUl8wMDgwMTRfR1JCTV9TVEFUVVMyPTB4JTA4WFxuIiwKKwkJUlJFRzMyKFJfMDA4MDE0X0dSQk1fU1RBVFVTMikpOworCWRldl9pbmZvKHJkZXYtPmRldiwgIiAgUl8wMDBFNTBfU1JCTV9TVEFUVVM9MHglMDhYXG4iLAorCQlSUkVHMzIoUl8wMDBFNTBfU1JCTV9TVEFUVVMpKTsKKwkvKiBBZnRlciByZXNldCB3ZSBuZWVkIHRvIHJlaW5pdCB0aGUgYXNpYyBhcyBHUFUgb2Z0ZW4gZW5kdXAgaW4gYW4KKwkgKiBpbmNvaGVyZW50IHN0YXRlLgorCSAqLworCWF0b21fYXNpY19pbml0KHJkZXYtPm1vZGVfaW5mby5hdG9tX2NvbnRleHQpOworCXJ2NTE1X21jX3Jlc3VtZShyZGV2LCAmc2F2ZSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEzNDMsMzIgKzEzNzYsNDcgQEAKIAlyZXR1cm4gcjsKIH0KIAotLyoKLSAqIFdyaXRlYmFjawotICovCi1pbnQgcjYwMF93Yl9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQordm9pZCByNjAwX3diX2Rpc2FibGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJV1JFRzMyKFNDUkFUQ0hfVU1TSywgMCk7CisJaWYgKHJkZXYtPndiLndiX29iaikgeworCQlyYWRlb25fb2JqZWN0X2t1bm1hcChyZGV2LT53Yi53Yl9vYmopOworCQlyYWRlb25fb2JqZWN0X3VucGluKHJkZXYtPndiLndiX29iaik7CisJfQorfQorCit2b2lkIHI2MDBfd2JfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwlyNjAwX3diX2Rpc2FibGUocmRldik7CisJaWYgKHJkZXYtPndiLndiX29iaikgeworCQlyYWRlb25fb2JqZWN0X3VucmVmKCZyZGV2LT53Yi53Yl9vYmopOworCQlyZGV2LT53Yi53YiA9IE5VTEw7CisJCXJkZXYtPndiLndiX29iaiA9IE5VTEw7CisJfQorfQorCitpbnQgcjYwMF93Yl9lbmFibGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7CiAJaW50IHI7CiAKIAlpZiAocmRldi0+d2Iud2Jfb2JqID09IE5VTEwpIHsKLQkJciA9IHJhZGVvbl9vYmplY3RfY3JlYXRlKHJkZXYsIE5VTEwsIDQwOTYsCi0JCQkJCSB0cnVlLAotCQkJCQkgUkFERU9OX0dFTV9ET01BSU5fR1RULAotCQkJCQkgZmFsc2UsICZyZGV2LT53Yi53Yl9vYmopOworCQlyID0gcmFkZW9uX29iamVjdF9jcmVhdGUocmRldiwgTlVMTCwgNDA5NiwgdHJ1ZSwKKwkJCQlSQURFT05fR0VNX0RPTUFJTl9HVFQsIGZhbHNlLCAmcmRldi0+d2Iud2Jfb2JqKTsKIAkJaWYgKHIpIHsKLQkJCURSTV9FUlJPUigicmFkZW9uOiBmYWlsZWQgdG8gY3JlYXRlIFdCIGJ1ZmZlciAoJWQpLlxuIiwgcik7CisJCQlkZXZfd2FybihyZGV2LT5kZXYsICJmYWlsZWQgdG8gY3JlYXRlIFdCIGJ1ZmZlciAoJWQpLlxuIiwgcik7CiAJCQlyZXR1cm4gcjsKIAkJfQotCQlyID0gcmFkZW9uX29iamVjdF9waW4ocmRldi0+d2Iud2Jfb2JqLAotCQkJCSAgICAgIFJBREVPTl9HRU1fRE9NQUlOX0dUVCwKLQkJCQkgICAgICAmcmRldi0+d2IuZ3B1X2FkZHIpOworCQlyID0gcmFkZW9uX29iamVjdF9waW4ocmRldi0+d2Iud2Jfb2JqLCBSQURFT05fR0VNX0RPTUFJTl9HVFQsCisJCQkJJnJkZXYtPndiLmdwdV9hZGRyKTsKIAkJaWYgKHIpIHsKLQkJCURSTV9FUlJPUigicmFkZW9uOiBmYWlsZWQgdG8gcGluIFdCIGJ1ZmZlciAoJWQpLlxuIiwgcik7CisJCQlkZXZfd2FybihyZGV2LT5kZXYsICJmYWlsZWQgdG8gcGluIFdCIGJ1ZmZlciAoJWQpLlxuIiwgcik7CisJCQlyNjAwX3diX2ZpbmkocmRldik7CiAJCQlyZXR1cm4gcjsKIAkJfQogCQlyID0gcmFkZW9uX29iamVjdF9rbWFwKHJkZXYtPndiLndiX29iaiwgKHZvaWQgKiopJnJkZXYtPndiLndiKTsKIAkJaWYgKHIpIHsKLQkJCURSTV9FUlJPUigicmFkZW9uOiBmYWlsZWQgdG8gbWFwIFdCIGJ1ZmZlciAoJWQpLlxuIiwgcik7CisJCQlkZXZfd2FybihyZGV2LT5kZXYsICJmYWlsZWQgdG8gbWFwIFdCIGJ1ZmZlciAoJWQpLlxuIiwgcik7CisJCQlyNjAwX3diX2ZpbmkocmRldik7CiAJCQlyZXR1cm4gcjsKIAkJfQogCX0KQEAgLTEzNzksMjEgKzE0MjcsNiBAQAogCXJldHVybiAwOwogfQogCi12b2lkIHI2MDBfd2JfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKLXsKLQlpZiAocmRldi0+d2Iud2Jfb2JqKSB7Ci0JCXJhZGVvbl9vYmplY3Rfa3VubWFwKHJkZXYtPndiLndiX29iaik7Ci0JCXJhZGVvbl9vYmplY3RfdW5waW4ocmRldi0+d2Iud2Jfb2JqKTsKLQkJcmFkZW9uX29iamVjdF91bnJlZigmcmRldi0+d2Iud2Jfb2JqKTsKLQkJcmRldi0+d2Iud2IgPSBOVUxMOwotCQlyZGV2LT53Yi53Yl9vYmogPSBOVUxMOwotCX0KLX0KLQotCi0vKgotICogQ1MKLSAqLwogdm9pZCByNjAwX2ZlbmNlX3JpbmdfZW1pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwKIAkJCSAgc3RydWN0IHJhZGVvbl9mZW5jZSAqZmVuY2UpCiB7CkBAIC0xNDcwLDExICsxNTAzLDE0IEBACiB7CiAJaW50IHI7CiAKLQlyNjAwX2dwdV9yZXNldChyZGV2KTsKLQlyNjAwX21jX3Jlc3VtZShyZGV2KTsKLQlyID0gcjYwMF9wY2llX2dhcnRfZW5hYmxlKHJkZXYpOwotCWlmIChyKQotCQlyZXR1cm4gcjsKKwlyNjAwX21jX3Byb2dyYW0ocmRldik7CisJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX0FHUCkgeworCQlyNjAwX2FncF9lbmFibGUocmRldik7CisJfSBlbHNlIHsKKwkJciA9IHI2MDBfcGNpZV9nYXJ0X2VuYWJsZShyZGV2KTsKKwkJaWYgKHIpCisJCQlyZXR1cm4gcjsKKwl9CiAJcjYwMF9ncHVfaW5pdChyZGV2KTsKIAogCXIgPSByYWRlb25fb2JqZWN0X3BpbihyZGV2LT5yNjAwX2JsaXQuc2hhZGVyX29iaiwgUkFERU9OX0dFTV9ET01BSU5fVlJBTSwKQEAgLTE0OTMsOSArMTUyOSw4IEBACiAJciA9IHI2MDBfY3BfcmVzdW1lKHJkZXYpOwogCWlmIChyKQogCQlyZXR1cm4gcjsKLQlyID0gcjYwMF93Yl9pbml0KHJkZXYpOwotCWlmIChyKQotCQlyZXR1cm4gcjsKKwkvKiB3cml0ZSBiYWNrIGJ1ZmZlciBhcmUgbm90IHZpdGFsIHNvIGRvbid0IHdvcnJ5IGFib3V0IGZhaWx1cmUgKi8KKwlyNjAwX3diX2VuYWJsZShyZGV2KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTUxNywxNSArMTU1MiwxMiBAQAogewogCWludCByOwogCi0JaWYgKHJhZGVvbl9ncHVfcmVzZXQocmRldikpIHsKLQkJLyogRklYTUU6IHdoYXQgZG8gd2Ugd2FudCB0byBkbyBoZXJlID8gKi8KLQl9CisJLyogRG8gbm90IHJlc2V0IEdQVSBiZWZvcmUgcG9zdGluZywgb24gcjYwMCBodyB1bmxpa2Ugb24gcjUwMCBodywKKwkgKiBwb3N0aW5nIHdpbGwgcGVyZm9ybSBuZWNlc3NhcnkgdGFzayB0byBicmluZyBiYWNrIEdQVSBpbnRvIGdvb2QKKwkgKiBzaGFwZS4KKwkgKi8KIAkvKiBwb3N0IGNhcmQgKi8KLQlpZiAocmRldi0+aXNfYXRvbV9iaW9zKSB7Ci0JCWF0b21fYXNpY19pbml0KHJkZXYtPm1vZGVfaW5mby5hdG9tX2NvbnRleHQpOwotCX0gZWxzZSB7Ci0JCXJhZGVvbl9jb21iaW9zX2FzaWNfaW5pdChyZGV2LT5kZGV2KTsKLQl9CisJYXRvbV9hc2ljX2luaXQocmRldi0+bW9kZV9pbmZvLmF0b21fY29udGV4dCk7CiAJLyogSW5pdGlhbGl6ZSBjbG9ja3MgKi8KIAlyID0gcmFkZW9uX2Nsb2Nrc19pbml0KHJkZXYpOwogCWlmIChyKSB7CkBAIC0xNTM4LDcgKzE1NzAsNyBAQAogCQlyZXR1cm4gcjsKIAl9CiAKLQlyID0gcmFkZW9uX2liX3Rlc3QocmRldik7CisJciA9IHI2MDBfaWJfdGVzdChyZGV2KTsKIAlpZiAocikgewogCQlEUk1fRVJST1IoInJhZGVvbjogZmFpbGxlZCB0ZXN0aW5nIElCICglZCkuXG4iLCByKTsKIAkJcmV0dXJuIHI7CkBAIC0xNTQ2LDEzICsxNTc4LDEyIEBACiAJcmV0dXJuIHI7CiB9CiAKLQogaW50IHI2MDBfc3VzcGVuZChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKIAkvKiBGSVhNRTogd2Ugc2hvdWxkIHdhaXQgZm9yIHJpbmcgdG8gYmUgZW1wdHkgKi8KIAlyNjAwX2NwX3N0b3AocmRldik7CiAJcmRldi0+Y3AucmVhZHkgPSBmYWxzZTsKLQorCXI2MDBfd2JfZGlzYWJsZShyZGV2KTsKIAlyNjAwX3BjaWVfZ2FydF9kaXNhYmxlKHJkZXYpOwogCS8qIHVucGluIHNoYWRlcnMgYm8gKi8KIAlyYWRlb25fb2JqZWN0X3VucGluKHJkZXYtPnI2MDBfYmxpdC5zaGFkZXJfb2JqKTsKQEAgLTE1NjksNyArMTYwMCw2IEBACiB7CiAJaW50IHI7CiAKLQlyZGV2LT5uZXdfaW5pdF9wYXRoID0gdHJ1ZTsKIAlyID0gcmFkZW9uX2R1bW15X3BhZ2VfaW5pdChyZGV2KTsKIAlpZiAocikKIAkJcmV0dXJuIHI7CkBAIC0xNTg2LDggKzE2MTYsMTAgQEAKIAkJCXJldHVybiAtRUlOVkFMOwogCX0KIAkvKiBNdXN0IGJlIGFuIEFUT01CSU9TICovCi0JaWYgKCFyZGV2LT5pc19hdG9tX2Jpb3MpCisJaWYgKCFyZGV2LT5pc19hdG9tX2Jpb3MpIHsKKwkJZGV2X2VycihyZGV2LT5kZXYsICJFeHBlY3RpbmcgYXRvbWJpb3MgZm9yIFI2MDAgR1BVXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CisJfQogCXIgPSByYWRlb25fYXRvbWJpb3NfaW5pdChyZGV2KTsKIAlpZiAocikKIAkJcmV0dXJuIHI7CkBAIC0xNjA5LDE1ICsxNjQxLDggQEAKIAlpZiAocikKIAkJcmV0dXJuIHI7CiAJciA9IHI2MDBfbWNfaW5pdChyZGV2KTsKLQlpZiAocikgewotCQlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfQUdQKSB7Ci0JCQkvKiBSZXRyeSB3aXRoIGRpc2FibGluZyBBR1AgKi8KLQkJCXI2MDBfZmluaShyZGV2KTsKLQkJCXJkZXYtPmZsYWdzICY9IH5SQURFT05fSVNfQUdQOwotCQkJcmV0dXJuIHI2MDBfaW5pdChyZGV2KTsKLQkJfQorCWlmIChyKQogCQlyZXR1cm4gcjsKLQl9CiAJLyogTWVtb3J5IG1hbmFnZXIgKi8KIAlyID0gcmFkZW9uX29iamVjdF9pbml0KHJkZXYpOwogCWlmIChyKQpAQCAtMTY0NiwxMiArMTY3MSwxMCBAQAogCiAJciA9IHI2MDBfc3RhcnR1cChyZGV2KTsKIAlpZiAocikgewotCQlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfQUdQKSB7Ci0JCQkvKiBSZXRyeSB3aXRoIGRpc2FibGluZyBBR1AgKi8KLQkJCXI2MDBfZmluaShyZGV2KTsKLQkJCXJkZXYtPmZsYWdzICY9IH5SQURFT05fSVNfQUdQOwotCQkJcmV0dXJuIHI2MDBfaW5pdChyZGV2KTsKLQkJfQorCQlyNjAwX3N1c3BlbmQocmRldik7CisJCXI2MDBfd2JfZmluaShyZGV2KTsKKwkJcmFkZW9uX3JpbmdfZmluaShyZGV2KTsKKwkJcjYwMF9wY2llX2dhcnRfZmluaShyZGV2KTsKIAkJcmRldi0+YWNjZWxfd29ya2luZyA9IGZhbHNlOwogCX0KIAlpZiAocmRldi0+YWNjZWxfd29ya2luZykgewpAQCAtMTY2MCw3ICsxNjgzLDcgQEAKIAkJCURSTV9FUlJPUigicmFkZW9uOiBmYWlsbGVkIGluaXRpYWxpemluZyBJQiBwb29sICglZCkuXG4iLCByKTsKIAkJCXJkZXYtPmFjY2VsX3dvcmtpbmcgPSBmYWxzZTsKIAkJfQotCQlyID0gcmFkZW9uX2liX3Rlc3QocmRldik7CisJCXIgPSByNjAwX2liX3Rlc3QocmRldik7CiAJCWlmIChyKSB7CiAJCQlEUk1fRVJST1IoInJhZGVvbjogZmFpbGxlZCB0ZXN0aW5nIElCICglZCkuXG4iLCByKTsKIAkJCXJkZXYtPmFjY2VsX3dvcmtpbmcgPSBmYWxzZTsKQEAgLTE2NzYsMTkgKzE2OTksMTUgQEAKIAogCXI2MDBfYmxpdF9maW5pKHJkZXYpOwogCXJhZGVvbl9yaW5nX2ZpbmkocmRldik7CisJcjYwMF93Yl9maW5pKHJkZXYpOwogCXI2MDBfcGNpZV9nYXJ0X2ZpbmkocmRldik7CiAJcmFkZW9uX2dlbV9maW5pKHJkZXYpOwogCXJhZGVvbl9mZW5jZV9kcml2ZXJfZmluaShyZGV2KTsKIAlyYWRlb25fY2xvY2tzX2ZpbmkocmRldik7Ci0jaWYgX19PU19IQVNfQUdQCiAJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX0FHUCkKIAkJcmFkZW9uX2FncF9maW5pKHJkZXYpOwotI2VuZGlmCiAJcmFkZW9uX29iamVjdF9maW5pKHJkZXYpOwotCWlmIChyZGV2LT5pc19hdG9tX2Jpb3MpCi0JCXJhZGVvbl9hdG9tYmlvc19maW5pKHJkZXYpOwotCWVsc2UKLQkJcmFkZW9uX2NvbWJpb3NfZmluaShyZGV2KTsKKwlyYWRlb25fYXRvbWJpb3NfZmluaShyZGV2KTsKIAlrZnJlZShyZGV2LT5iaW9zKTsKIAlyZGV2LT5iaW9zID0gTlVMTDsKIAlyYWRlb25fZHVtbXlfcGFnZV9maW5pKHJkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX2JsaXQuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9ibGl0LmMKaW5kZXggZDk4OGVlYy4uZGVjNTAxMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX2JsaXQuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfYmxpdC5jCkBAIC01ODIsOCArNTgyLDYgQEAKIAl1NjQgdmJfYWRkcjsKIAl1MzIgKnZiOwogCi0JdmIgPSByNjAwX25vbW1fZ2V0X3ZiX3B0cihkZXYpOwotCiAJaWYgKChzaXplX2J5dGVzICYgMykgfHwgKHNyY19ncHVfYWRkciAmIDMpIHx8IChkc3RfZ3B1X2FkZHIgJiAzKSkgewogCQltYXhfYnl0ZXMgPSA4MTkyOwogCkBAIC02MTksOCArNjE3LDggQEAKIAkJCQlpZiAoIWRldl9wcml2LT5ibGl0X3ZiKQogCQkJCQlyZXR1cm47CiAJCQkJc2V0X3NoYWRlcnMoZGV2KTsKLQkJCQl2YiA9IHI2MDBfbm9tbV9nZXRfdmJfcHRyKGRldik7CiAJCQl9CisJCQl2YiA9IHI2MDBfbm9tbV9nZXRfdmJfcHRyKGRldik7CiAKIAkJCXZiWzBdID0gaTJmKGRzdF94KTsKIAkJCXZiWzFdID0gMDsKQEAgLTcwOCw4ICs3MDYsOCBAQAogCQkJCQlyZXR1cm47CiAKIAkJCQlzZXRfc2hhZGVycyhkZXYpOwotCQkJCXZiID0gcjYwMF9ub21tX2dldF92Yl9wdHIoZGV2KTsKIAkJCX0KKwkJCXZiID0gcjYwMF9ub21tX2dldF92Yl9wdHIoZGV2KTsKIAogCQkJdmJbMF0gPSBpMmYoZHN0X3ggLyA0KTsKIAkJCXZiWzFdID0gMDsKQEAgLTc3Nyw4ICs3NzUsNiBAQAogCXU2NCB2Yl9hZGRyOwogCXUzMiAqdmI7CiAKLQl2YiA9IHI2MDBfbm9tbV9nZXRfdmJfcHRyKGRldik7Ci0KIAlpZiAoKGRldl9wcml2LT5ibGl0X3ZiLT51c2VkICsgNDgpID4gZGV2X3ByaXYtPmJsaXRfdmItPnRvdGFsKSB7CiAKIAkJcjYwMF9ub21tX3B1dF92YihkZXYpOwpAQCAtNzg3LDggKzc4Myw4IEBACiAJCQlyZXR1cm47CiAKIAkJc2V0X3NoYWRlcnMoZGV2KTsKLQkJdmIgPSByNjAwX25vbW1fZ2V0X3ZiX3B0cihkZXYpOwogCX0KKwl2YiA9IHI2MDBfbm9tbV9nZXRfdmJfcHRyKGRldik7CiAKIAlpZiAoY3BwID09IDQpIHsKIAkJY2JfZm9ybWF0ID0gQ09MT1JfOF84XzhfODsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9ibGl0X2ttcy5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX2JsaXRfa21zLmMKaW5kZXggYWNhZTMzZS4uOTMxMDhiYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX2JsaXRfa21zLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX2JsaXRfa21zLmMKQEAgLTYxMCw3ICs2MTAsNiBAQAogCiAJRFJNX0RFQlVHKCJlbWl0dGluZyBjb3B5ICUxNmxseCAlMTZsbHggJWQgJWRcbiIsIHNyY19ncHVfYWRkciwgZHN0X2dwdV9hZGRyLAogCQkgIHNpemVfYnl0ZXMsIHJkZXYtPnI2MDBfYmxpdC52Yl91c2VkKTsKLQl2YiA9ICh1MzIgKikocmRldi0+cjYwMF9ibGl0LnZiX2liLT5wdHIgKyByZGV2LT5yNjAwX2JsaXQudmJfdXNlZCk7CiAJaWYgKChzaXplX2J5dGVzICYgMykgfHwgKHNyY19ncHVfYWRkciAmIDMpIHx8IChkc3RfZ3B1X2FkZHIgJiAzKSkgewogCQltYXhfYnl0ZXMgPSA4MTkyOwogCkBAIC02NTMsNiArNjUyLDcgQEAKIAkJCQl2YiA9IHI2MDBfbm9tbV9nZXRfdmJfcHRyKGRldik7CiAjZW5kaWYKIAkJCX0KKwkJCXZiID0gKHUzMiAqKShyZGV2LT5yNjAwX2JsaXQudmJfaWItPnB0ciArIHJkZXYtPnI2MDBfYmxpdC52Yl91c2VkKTsKIAogCQkJdmJbMF0gPSBpMmYoZHN0X3gpOwogCQkJdmJbMV0gPSAwOwpAQCAtNzQ3LDYgKzc0Nyw3IEBACiAJCQkJdmIgPSByNjAwX25vbW1fZ2V0X3ZiX3B0cihkZXYpOwogCQkJfQogI2VuZGlmCisJCQl2YiA9ICh1MzIgKikocmRldi0+cjYwMF9ibGl0LnZiX2liLT5wdHIgKyByZGV2LT5yNjAwX2JsaXQudmJfdXNlZCk7CiAKIAkJCXZiWzBdID0gaTJmKGRzdF94IC8gNCk7CiAJCQl2YlsxXSA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfY3MuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9jcy5jCmluZGV4IDMzYjg5Y2QuLjE3ZTQyMTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9jcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9jcy5jCkBAIC0yOCw3ICsyOCw2IEBACiAjaW5jbHVkZSAiZHJtUC5oIgogI2luY2x1ZGUgInJhZGVvbi5oIgogI2luY2x1ZGUgInI2MDBkLmgiCi0jaW5jbHVkZSAiYXZpdm9kLmgiCiAKIHN0YXRpYyBpbnQgcjYwMF9jc19wYWNrZXRfbmV4dF9yZWxvY19tbShzdHJ1Y3QgcmFkZW9uX2NzX3BhcnNlciAqcCwKIAkJCQkJc3RydWN0IHJhZGVvbl9jc19yZWxvYyAqKmNzX3JlbG9jKTsKQEAgLTU3LDcgKzU2LDcgQEAKIAkJCSAgaWR4LCBpYl9jaHVuay0+bGVuZ3RoX2R3KTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCWhlYWRlciA9IGliX2NodW5rLT5rZGF0YVtpZHhdOworCWhlYWRlciA9IHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaWR4KTsKIAlwa3QtPmlkeCA9IGlkeDsKIAlwa3QtPnR5cGUgPSBDUF9QQUNLRVRfR0VUX1RZUEUoaGVhZGVyKTsKIAlwa3QtPmNvdW50ID0gQ1BfUEFDS0VUX0dFVF9DT1VOVChoZWFkZXIpOwpAQCAtOTgsNyArOTcsNiBAQAogc3RhdGljIGludCByNjAwX2NzX3BhY2tldF9uZXh0X3JlbG9jX21tKHN0cnVjdCByYWRlb25fY3NfcGFyc2VyICpwLAogCQkJCQlzdHJ1Y3QgcmFkZW9uX2NzX3JlbG9jICoqY3NfcmVsb2MpCiB7Ci0Jc3RydWN0IHJhZGVvbl9jc19jaHVuayAqaWJfY2h1bms7CiAJc3RydWN0IHJhZGVvbl9jc19jaHVuayAqcmVsb2NzX2NodW5rOwogCXN0cnVjdCByYWRlb25fY3NfcGFja2V0IHAzcmVsb2M7CiAJdW5zaWduZWQgaWR4OwpAQCAtMTA5LDcgKzEwNyw2IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAkqY3NfcmVsb2MgPSBOVUxMOwotCWliX2NodW5rID0gJnAtPmNodW5rc1twLT5jaHVua19pYl9pZHhdOwogCXJlbG9jc19jaHVuayA9ICZwLT5jaHVua3NbcC0+Y2h1bmtfcmVsb2NzX2lkeF07CiAJciA9IHI2MDBfY3NfcGFja2V0X3BhcnNlKHAsICZwM3JlbG9jLCBwLT5pZHgpOwogCWlmIChyKSB7CkBAIC0xMjEsNyArMTE4LDcgQEAKIAkJCSAgcDNyZWxvYy5pZHgpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0JaWR4ID0gaWJfY2h1bmstPmtkYXRhW3AzcmVsb2MuaWR4ICsgMV07CisJaWR4ID0gcmFkZW9uX2dldF9pYl92YWx1ZShwLCBwM3JlbG9jLmlkeCArIDEpOwogCWlmIChpZHggPj0gcmVsb2NzX2NodW5rLT5sZW5ndGhfZHcpIHsKIAkJRFJNX0VSUk9SKCJSZWxvY3MgYXQgJWQgYWZ0ZXIgcmVsb2NhdGlvbnMgY2h1bmsgZW5kICVkICFcbiIsCiAJCQkgIGlkeCwgcmVsb2NzX2NodW5rLT5sZW5ndGhfZHcpOwpAQCAtMTQ2LDcgKzE0Myw2IEBACiBzdGF0aWMgaW50IHI2MDBfY3NfcGFja2V0X25leHRfcmVsb2Nfbm9tbShzdHJ1Y3QgcmFkZW9uX2NzX3BhcnNlciAqcCwKIAkJCQkJc3RydWN0IHJhZGVvbl9jc19yZWxvYyAqKmNzX3JlbG9jKQogewotCXN0cnVjdCByYWRlb25fY3NfY2h1bmsgKmliX2NodW5rOwogCXN0cnVjdCByYWRlb25fY3NfY2h1bmsgKnJlbG9jc19jaHVuazsKIAlzdHJ1Y3QgcmFkZW9uX2NzX3BhY2tldCBwM3JlbG9jOwogCXVuc2lnbmVkIGlkeDsKQEAgLTE1Nyw3ICsxNTMsNiBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJKmNzX3JlbG9jID0gTlVMTDsKLQlpYl9jaHVuayA9ICZwLT5jaHVua3NbcC0+Y2h1bmtfaWJfaWR4XTsKIAlyZWxvY3NfY2h1bmsgPSAmcC0+Y2h1bmtzW3AtPmNodW5rX3JlbG9jc19pZHhdOwogCXIgPSByNjAwX2NzX3BhY2tldF9wYXJzZShwLCAmcDNyZWxvYywgcC0+aWR4KTsKIAlpZiAocikgewpAQCAtMTY5LDcgKzE2NCw3IEBACiAJCQkgIHAzcmVsb2MuaWR4KTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCWlkeCA9IGliX2NodW5rLT5rZGF0YVtwM3JlbG9jLmlkeCArIDFdOworCWlkeCA9IHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgcDNyZWxvYy5pZHggKyAxKTsKIAlpZiAoaWR4ID49IHJlbG9jc19jaHVuay0+bGVuZ3RoX2R3KSB7CiAJCURSTV9FUlJPUigiUmVsb2NzIGF0ICVkIGFmdGVyIHJlbG9jYXRpb25zIGNodW5rIGVuZCAlZCAhXG4iLAogCQkJICBpZHgsIHJlbG9jc19jaHVuay0+bGVuZ3RoX2R3KTsKQEAgLTE4MSwxMyArMTc2LDEzNiBAQAogCXJldHVybiAwOwogfQogCisvKioKKyAqIHI2MDBfY3NfcGFja2V0X25leHRfdmxpbmUoKSAtIHBhcnNlIHVzZXJzcGFjZSBWTElORSBwYWNrZXQKKyAqIEBwYXJzZXI6CQlwYXJzZXIgc3RydWN0dXJlIGhvbGRpbmcgcGFyc2luZyBjb250ZXh0LgorICoKKyAqIFVzZXJzcGFjZSBzZW5kcyBhIHNwZWNpYWwgc2VxdWVuY2UgZm9yIFZMSU5FIHdhaXRzLgorICogUEFDS0VUMCAtIFZMSU5FX1NUQVJUX0VORCArIHZhbHVlCisgKiBQQUNLRVQzIC0gV0FJVF9SRUdfTUVNIHBvbGwgdmxpbmUgc3RhdHVzIHJlZworICogUkVMT0MgKFAzKSAtIGNydGNfaWQgaW4gcmVsb2MuCisgKgorICogVGhpcyBmdW5jdGlvbiBwYXJzZXMgdGhpcyBhbmQgcmVsb2NhdGVzIHRoZSBWTElORSBTVEFSVCBFTkQKKyAqIGFuZCBXQUlUX1JFR19NRU0gcGFja2V0cyB0byB0aGUgY29ycmVjdCBjcnRjLgorICogSXQgYWxzbyBkZXRlY3RzIGEgc3dpdGNoZWQgb2ZmIGNydGMgYW5kIG51bGxzIG91dCB0aGUKKyAqIHdhaXQgaW4gdGhhdCBjYXNlLgorICovCitzdGF0aWMgaW50IHI2MDBfY3NfcGFja2V0X3BhcnNlX3ZsaW5lKHN0cnVjdCByYWRlb25fY3NfcGFyc2VyICpwKQoreworCXN0cnVjdCBkcm1fbW9kZV9vYmplY3QgKm9iajsKKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7CisJc3RydWN0IHJhZGVvbl9jcnRjICpyYWRlb25fY3J0YzsKKwlzdHJ1Y3QgcmFkZW9uX2NzX3BhY2tldCBwM3JlbG9jLCB3YWl0X3JlZ19tZW07CisJaW50IGNydGNfaWQ7CisJaW50IHI7CisJdWludDMyX3QgaGVhZGVyLCBoX2lkeCwgcmVnLCB3YWl0X3JlZ19tZW1faW5mbzsKKwl2b2xhdGlsZSB1aW50MzJfdCAqaWI7CisKKwlpYiA9IHAtPmliLT5wdHI7CisKKwkvKiBwYXJzZSB0aGUgV0FJVF9SRUdfTUVNICovCisJciA9IHI2MDBfY3NfcGFja2V0X3BhcnNlKHAsICZ3YWl0X3JlZ19tZW0sIHAtPmlkeCk7CisJaWYgKHIpCisJCXJldHVybiByOworCisJLyogY2hlY2sgaXRzIGEgV0FJVF9SRUdfTUVNICovCisJaWYgKHdhaXRfcmVnX21lbS50eXBlICE9IFBBQ0tFVF9UWVBFMyB8fAorCSAgICB3YWl0X3JlZ19tZW0ub3Bjb2RlICE9IFBBQ0tFVDNfV0FJVF9SRUdfTUVNKSB7CisJCURSTV9FUlJPUigidmxpbmUgd2FpdCBtaXNzaW5nIFdBSVRfUkVHX01FTSBzZWdtZW50XG4iKTsKKwkJciA9IC1FSU5WQUw7CisJCXJldHVybiByOworCX0KKworCXdhaXRfcmVnX21lbV9pbmZvID0gcmFkZW9uX2dldF9pYl92YWx1ZShwLCB3YWl0X3JlZ19tZW0uaWR4ICsgMSk7CisJLyogYml0IDQgaXMgcmVnICgwKSBvciBtZW0gKDEpICovCisJaWYgKHdhaXRfcmVnX21lbV9pbmZvICYgMHgxMCkgeworCQlEUk1fRVJST1IoInZsaW5lIFdBSVRfUkVHX01FTSB3YWl0aW5nIG9uIE1FTSByYXRoZXIgdGhhbiBSRUdcbiIpOworCQlyID0gLUVJTlZBTDsKKwkJcmV0dXJuIHI7CisJfQorCS8qIHdhaXRpbmcgZm9yIHZhbHVlIHRvIGJlIGVxdWFsICovCisJaWYgKCh3YWl0X3JlZ19tZW1faW5mbyAmIDB4NykgIT0gMHgzKSB7CisJCURSTV9FUlJPUigidmxpbmUgV0FJVF9SRUdfTUVNIGZ1bmN0aW9uIG5vdCBlcXVhbFxuIik7CisJCXIgPSAtRUlOVkFMOworCQlyZXR1cm4gcjsKKwl9CisJaWYgKChyYWRlb25fZ2V0X2liX3ZhbHVlKHAsIHdhaXRfcmVnX21lbS5pZHggKyAyKSA8PCAyKSAhPSBBVklWT19EMU1PREVfVkxJTkVfU1RBVFVTKSB7CisJCURSTV9FUlJPUigidmxpbmUgV0FJVF9SRUdfTUVNIGJhZCByZWdcbiIpOworCQlyID0gLUVJTlZBTDsKKwkJcmV0dXJuIHI7CisJfQorCisJaWYgKHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgd2FpdF9yZWdfbWVtLmlkeCArIDUpICE9IEFWSVZPX0QxTU9ERV9WTElORV9TVEFUKSB7CisJCURSTV9FUlJPUigidmxpbmUgV0FJVF9SRUdfTUVNIGJhZCBiaXQgbWFza1xuIik7CisJCXIgPSAtRUlOVkFMOworCQlyZXR1cm4gcjsKKwl9CisKKwkvKiBqdW1wIG92ZXIgdGhlIE5PUCAqLworCXIgPSByNjAwX2NzX3BhY2tldF9wYXJzZShwLCAmcDNyZWxvYywgcC0+aWR4ICsgd2FpdF9yZWdfbWVtLmNvdW50ICsgMik7CisJaWYgKHIpCisJCXJldHVybiByOworCisJaF9pZHggPSBwLT5pZHggLSAyOworCXAtPmlkeCArPSB3YWl0X3JlZ19tZW0uY291bnQgKyAyOworCXAtPmlkeCArPSBwM3JlbG9jLmNvdW50ICsgMjsKKworCWhlYWRlciA9IHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaF9pZHgpOworCWNydGNfaWQgPSByYWRlb25fZ2V0X2liX3ZhbHVlKHAsIGhfaWR4ICsgMiArIDcgKyAxKTsKKwlyZWcgPSBDUF9QQUNLRVQwX0dFVF9SRUcoaGVhZGVyKTsKKwltdXRleF9sb2NrKCZwLT5yZGV2LT5kZGV2LT5tb2RlX2NvbmZpZy5tdXRleCk7CisJb2JqID0gZHJtX21vZGVfb2JqZWN0X2ZpbmQocC0+cmRldi0+ZGRldiwgY3J0Y19pZCwgRFJNX01PREVfT0JKRUNUX0NSVEMpOworCWlmICghb2JqKSB7CisJCURSTV9FUlJPUigiY2Fubm90IGZpbmQgY3J0YyAlZFxuIiwgY3J0Y19pZCk7CisJCXIgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisJY3J0YyA9IG9ial90b19jcnRjKG9iaik7CisJcmFkZW9uX2NydGMgPSB0b19yYWRlb25fY3J0YyhjcnRjKTsKKwljcnRjX2lkID0gcmFkZW9uX2NydGMtPmNydGNfaWQ7CisKKwlpZiAoIWNydGMtPmVuYWJsZWQpIHsKKwkJLyogaWYgdGhlIENSVEMgaXNuJ3QgZW5hYmxlZCAtIHdlIG5lZWQgdG8gbm9wIG91dCB0aGUgV0FJVF9SRUdfTUVNICovCisJCWliW2hfaWR4ICsgMl0gPSBQQUNLRVQyKDApOworCQlpYltoX2lkeCArIDNdID0gUEFDS0VUMigwKTsKKwkJaWJbaF9pZHggKyA0XSA9IFBBQ0tFVDIoMCk7CisJCWliW2hfaWR4ICsgNV0gPSBQQUNLRVQyKDApOworCQlpYltoX2lkeCArIDZdID0gUEFDS0VUMigwKTsKKwkJaWJbaF9pZHggKyA3XSA9IFBBQ0tFVDIoMCk7CisJCWliW2hfaWR4ICsgOF0gPSBQQUNLRVQyKDApOworCX0gZWxzZSBpZiAoY3J0Y19pZCA9PSAxKSB7CisJCXN3aXRjaCAocmVnKSB7CisJCWNhc2UgQVZJVk9fRDFNT0RFX1ZMSU5FX1NUQVJUX0VORDoKKwkJCWhlYWRlciAmPSB+UjYwMF9DUF9QQUNLRVQwX1JFR19NQVNLOworCQkJaGVhZGVyIHw9IEFWSVZPX0QyTU9ERV9WTElORV9TVEFSVF9FTkQgPj4gMjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJRFJNX0VSUk9SKCJ1bmtub3duIGNydGMgcmVsb2NcbiIpOworCQkJciA9IC1FSU5WQUw7CisJCQlnb3RvIG91dDsKKwkJfQorCQlpYltoX2lkeF0gPSBoZWFkZXI7CisJCWliW2hfaWR4ICsgNF0gPSBBVklWT19EMk1PREVfVkxJTkVfU1RBVFVTID4+IDI7CisJfQorb3V0OgorCW11dGV4X3VubG9jaygmcC0+cmRldi0+ZGRldi0+bW9kZV9jb25maWcubXV0ZXgpOworCXJldHVybiByOworfQorCiBzdGF0aWMgaW50IHI2MDBfcGFja2V0MF9jaGVjayhzdHJ1Y3QgcmFkZW9uX2NzX3BhcnNlciAqcCwKIAkJCQlzdHJ1Y3QgcmFkZW9uX2NzX3BhY2tldCAqcGt0LAogCQkJCXVuc2lnbmVkIGlkeCwgdW5zaWduZWQgcmVnKQogeworCWludCByOworCiAJc3dpdGNoIChyZWcpIHsKIAljYXNlIEFWSVZPX0QxTU9ERV9WTElORV9TVEFSVF9FTkQ6Ci0JY2FzZSBBVklWT19EMk1PREVfVkxJTkVfU1RBUlRfRU5EOgorCQlyID0gcjYwMF9jc19wYWNrZXRfcGFyc2VfdmxpbmUocCk7CisJCWlmIChyKSB7CisJCQlEUk1fRVJST1IoIk5vIHJlbG9jIGZvciBpYlslZF09MHglMDRYXG4iLAorCQkJCQlpZHgsIHJlZyk7CisJCQlyZXR1cm4gcjsKKwkJfQogCQlicmVhazsKIAlkZWZhdWx0OgogCQlwcmludGsoS0VSTl9FUlIgIkZvcmJpZGRlbiByZWdpc3RlciAweCUwNFggaW4gY3MgYXQgJWRcbiIsCkBAIC0yMTgsMTcgKzMzNiwxOCBAQAogc3RhdGljIGludCByNjAwX3BhY2tldDNfY2hlY2soc3RydWN0IHJhZGVvbl9jc19wYXJzZXIgKnAsCiAJCQkJc3RydWN0IHJhZGVvbl9jc19wYWNrZXQgKnBrdCkKIHsKLQlzdHJ1Y3QgcmFkZW9uX2NzX2NodW5rICppYl9jaHVuazsKIAlzdHJ1Y3QgcmFkZW9uX2NzX3JlbG9jICpyZWxvYzsKIAl2b2xhdGlsZSB1MzIgKmliOwogCXVuc2lnbmVkIGlkeDsKIAl1bnNpZ25lZCBpOwogCXVuc2lnbmVkIHN0YXJ0X3JlZywgZW5kX3JlZywgcmVnOwogCWludCByOworCXUzMiBpZHhfdmFsdWU7CiAKIAlpYiA9IHAtPmliLT5wdHI7Ci0JaWJfY2h1bmsgPSAmcC0+Y2h1bmtzW3AtPmNodW5rX2liX2lkeF07CiAJaWR4ID0gcGt0LT5pZHggKyAxOworCWlkeF92YWx1ZSA9IHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaWR4KTsKKwogCXN3aXRjaCAocGt0LT5vcGNvZGUpIHsKIAljYXNlIFBBQ0tFVDNfU1RBUlRfM0RfQ01EQlVGOgogCQlpZiAocC0+ZmFtaWx5ID49IENISVBfUlY3NzAgfHwgcGt0LT5jb3VudCkgewpAQCAtMjU5LDggKzM3OCw4IEBACiAJCQlEUk1fRVJST1IoImJhZCBEUkFXX0lOREVYXG4iKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9Ci0JCWliW2lkeCswXSArPSAodTMyKShyZWxvYy0+bG9iai5ncHVfb2Zmc2V0ICYgMHhmZmZmZmZmZik7Ci0JCWliW2lkeCsxXSA9IHVwcGVyXzMyX2JpdHMocmVsb2MtPmxvYmouZ3B1X29mZnNldCkgJiAweGZmOworCQlpYltpZHgrMF0gPSBpZHhfdmFsdWUgKyAodTMyKShyZWxvYy0+bG9iai5ncHVfb2Zmc2V0ICYgMHhmZmZmZmZmZik7CisJCWliW2lkeCsxXSArPSB1cHBlcl8zMl9iaXRzKHJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpICYgMHhmZjsKIAkJYnJlYWs7CiAJY2FzZSBQQUNLRVQzX0RSQVdfSU5ERVhfQVVUTzoKIAkJaWYgKHBrdC0+Y291bnQgIT0gMSkgewpAQCAtMjgxLDE0ICs0MDAsMTQgQEAKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJCS8qIGJpdCA0IGlzIHJlZyAoMCkgb3IgbWVtICgxKSAqLwotCQlpZiAoaWJfY2h1bmstPmtkYXRhW2lkeCswXSAmIDB4MTApIHsKKwkJaWYgKGlkeF92YWx1ZSAmIDB4MTApIHsKIAkJCXIgPSByNjAwX2NzX3BhY2tldF9uZXh0X3JlbG9jKHAsICZyZWxvYyk7CiAJCQlpZiAocikgewogCQkJCURSTV9FUlJPUigiYmFkIFdBSVRfUkVHX01FTVxuIik7CiAJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCQl9CiAJCQlpYltpZHgrMV0gKz0gKHUzMikocmVsb2MtPmxvYmouZ3B1X29mZnNldCAmIDB4ZmZmZmZmZmYpOwotCQkJaWJbaWR4KzJdID0gdXBwZXJfMzJfYml0cyhyZWxvYy0+bG9iai5ncHVfb2Zmc2V0KSAmIDB4ZmY7CisJCQlpYltpZHgrMl0gKz0gdXBwZXJfMzJfYml0cyhyZWxvYy0+bG9iai5ncHVfb2Zmc2V0KSAmIDB4ZmY7CiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBQQUNLRVQzX1NVUkZBQ0VfU1lOQzoKQEAgLTI5Nyw4ICs0MTYsOCBAQAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAkJLyogMHhmZmZmZmZmZi8weDAgaXMgZmx1c2ggYWxsIGNhY2hlIGZsYWcgKi8KLQkJaWYgKGliX2NodW5rLT5rZGF0YVtpZHgrMV0gIT0gMHhmZmZmZmZmZiB8fAotCQkgICAgaWJfY2h1bmstPmtkYXRhW2lkeCsyXSAhPSAwKSB7CisJCWlmIChyYWRlb25fZ2V0X2liX3ZhbHVlKHAsIGlkeCArIDEpICE9IDB4ZmZmZmZmZmYgfHwKKwkJICAgIHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaWR4ICsgMikgIT0gMCkgewogCQkJciA9IHI2MDBfY3NfcGFja2V0X25leHRfcmVsb2MocCwgJnJlbG9jKTsKIAkJCWlmIChyKSB7CiAJCQkJRFJNX0VSUk9SKCJiYWQgU1VSRkFDRV9TWU5DXG4iKTsKQEAgLTMxOSw3ICs0MzgsNyBAQAogCQkJCXJldHVybiAtRUlOVkFMOwogCQkJfQogCQkJaWJbaWR4KzFdICs9ICh1MzIpKHJlbG9jLT5sb2JqLmdwdV9vZmZzZXQgJiAweGZmZmZmZmZmKTsKLQkJCWliW2lkeCsyXSB8PSB1cHBlcl8zMl9iaXRzKHJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpICYgMHhmZjsKKwkJCWliW2lkeCsyXSArPSB1cHBlcl8zMl9iaXRzKHJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpICYgMHhmZjsKIAkJfQogCQlicmVhazsKIAljYXNlIFBBQ0tFVDNfRVZFTlRfV1JJVEVfRU9QOgpAQCAtMzMzLDEwICs0NTIsMTAgQEAKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJCWliW2lkeCsxXSArPSAodTMyKShyZWxvYy0+bG9iai5ncHVfb2Zmc2V0ICYgMHhmZmZmZmZmZik7Ci0JCWliW2lkeCsyXSB8PSB1cHBlcl8zMl9iaXRzKHJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpICYgMHhmZjsKKwkJaWJbaWR4KzJdICs9IHVwcGVyXzMyX2JpdHMocmVsb2MtPmxvYmouZ3B1X29mZnNldCkgJiAweGZmOwogCQlicmVhazsKIAljYXNlIFBBQ0tFVDNfU0VUX0NPTkZJR19SRUc6Ci0JCXN0YXJ0X3JlZyA9IChpYltpZHgrMF0gPDwgMikgKyBQQUNLRVQzX1NFVF9DT05GSUdfUkVHX09GRlNFVDsKKwkJc3RhcnRfcmVnID0gKGlkeF92YWx1ZSA8PCAyKSArIFBBQ0tFVDNfU0VUX0NPTkZJR19SRUdfT0ZGU0VUOwogCQllbmRfcmVnID0gNCAqIHBrdC0+Y291bnQgKyBzdGFydF9yZWcgLSA0OwogCQlpZiAoKHN0YXJ0X3JlZyA8IFBBQ0tFVDNfU0VUX0NPTkZJR19SRUdfT0ZGU0VUKSB8fAogCQkgICAgKHN0YXJ0X3JlZyA+PSBQQUNLRVQzX1NFVF9DT05GSUdfUkVHX0VORCkgfHwKQEAgLTM1Niw3ICs0NzUsNyBAQAogCQl9CiAJCWJyZWFrOwogCWNhc2UgUEFDS0VUM19TRVRfQ09OVEVYVF9SRUc6Ci0JCXN0YXJ0X3JlZyA9IChpYltpZHgrMF0gPDwgMikgKyBQQUNLRVQzX1NFVF9DT05URVhUX1JFR19PRkZTRVQ7CisJCXN0YXJ0X3JlZyA9IChpZHhfdmFsdWUgPDwgMikgKyBQQUNLRVQzX1NFVF9DT05URVhUX1JFR19PRkZTRVQ7CiAJCWVuZF9yZWcgPSA0ICogcGt0LT5jb3VudCArIHN0YXJ0X3JlZyAtIDQ7CiAJCWlmICgoc3RhcnRfcmVnIDwgUEFDS0VUM19TRVRfQ09OVEVYVF9SRUdfT0ZGU0VUKSB8fAogCQkgICAgKHN0YXJ0X3JlZyA+PSBQQUNLRVQzX1NFVF9DT05URVhUX1JFR19FTkQpIHx8CkBAIC00MjEsNyArNTQwLDcgQEAKIAkJCURSTV9FUlJPUigiYmFkIFNFVF9SRVNPVVJDRVxuIik7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQotCQlzdGFydF9yZWcgPSAoaWJbaWR4KzBdIDw8IDIpICsgUEFDS0VUM19TRVRfUkVTT1VSQ0VfT0ZGU0VUOworCQlzdGFydF9yZWcgPSAoaWR4X3ZhbHVlIDw8IDIpICsgUEFDS0VUM19TRVRfUkVTT1VSQ0VfT0ZGU0VUOwogCQllbmRfcmVnID0gNCAqIHBrdC0+Y291bnQgKyBzdGFydF9yZWcgLSA0OwogCQlpZiAoKHN0YXJ0X3JlZyA8IFBBQ0tFVDNfU0VUX1JFU09VUkNFX09GRlNFVCkgfHwKIAkJICAgIChzdGFydF9yZWcgPj0gUEFDS0VUM19TRVRfUkVTT1VSQ0VfRU5EKSB8fApAQCAtNDMwLDcgKzU0OSw3IEBACiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCQlmb3IgKGkgPSAwOyBpIDwgKHBrdC0+Y291bnQgLyA3KTsgaSsrKSB7Ci0JCQlzd2l0Y2ggKEdfX1NRX1ZUWF9DT05TVEFOVF9UWVBFKGliW2lkeCsoaSo3KSs2KzFdKSkgeworCQkJc3dpdGNoIChHX19TUV9WVFhfQ09OU1RBTlRfVFlQRShyYWRlb25fZ2V0X2liX3ZhbHVlKHAsIGlkeCsoaSo3KSs2KzEpKSkgewogCQkJY2FzZSBTUV9URVhfVlRYX1ZBTElEX1RFWFRVUkU6CiAJCQkJLyogdGV4IGJhc2UgKi8KIAkJCQlyID0gcjYwMF9jc19wYWNrZXRfbmV4dF9yZWxvYyhwLCAmcmVsb2MpOwpAQCAtNDU1LDcgKzU3NCw3IEBACiAJCQkJCXJldHVybiAtRUlOVkFMOwogCQkJCX0KIAkJCQlpYltpZHgrMSsoaSo3KSswXSArPSAodTMyKSgocmVsb2MtPmxvYmouZ3B1X29mZnNldCkgJiAweGZmZmZmZmZmKTsKLQkJCQlpYltpZHgrMSsoaSo3KSsyXSB8PSB1cHBlcl8zMl9iaXRzKHJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpICYgMHhmZjsKKwkJCQlpYltpZHgrMSsoaSo3KSsyXSArPSB1cHBlcl8zMl9iaXRzKHJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpICYgMHhmZjsKIAkJCQlicmVhazsKIAkJCWNhc2UgU1FfVEVYX1ZUWF9JTlZBTElEX1RFWFRVUkU6CiAJCQljYXNlIFNRX1RFWF9WVFhfSU5WQUxJRF9CVUZGRVI6CkBAIC00NjYsNyArNTg1LDcgQEAKIAkJfQogCQlicmVhazsKIAljYXNlIFBBQ0tFVDNfU0VUX0FMVV9DT05TVDoKLQkJc3RhcnRfcmVnID0gKGliW2lkeCswXSA8PCAyKSArIFBBQ0tFVDNfU0VUX0FMVV9DT05TVF9PRkZTRVQ7CisJCXN0YXJ0X3JlZyA9IChpZHhfdmFsdWUgPDwgMikgKyBQQUNLRVQzX1NFVF9BTFVfQ09OU1RfT0ZGU0VUOwogCQllbmRfcmVnID0gNCAqIHBrdC0+Y291bnQgKyBzdGFydF9yZWcgLSA0OwogCQlpZiAoKHN0YXJ0X3JlZyA8IFBBQ0tFVDNfU0VUX0FMVV9DT05TVF9PRkZTRVQpIHx8CiAJCSAgICAoc3RhcnRfcmVnID49IFBBQ0tFVDNfU0VUX0FMVV9DT05TVF9FTkQpIHx8CkBAIC00NzYsNyArNTk1LDcgQEAKIAkJfQogCQlicmVhazsKIAljYXNlIFBBQ0tFVDNfU0VUX0JPT0xfQ09OU1Q6Ci0JCXN0YXJ0X3JlZyA9IChpYltpZHgrMF0gPDwgMikgKyBQQUNLRVQzX1NFVF9CT09MX0NPTlNUX09GRlNFVDsKKwkJc3RhcnRfcmVnID0gKGlkeF92YWx1ZSA8PCAyKSArIFBBQ0tFVDNfU0VUX0JPT0xfQ09OU1RfT0ZGU0VUOwogCQllbmRfcmVnID0gNCAqIHBrdC0+Y291bnQgKyBzdGFydF9yZWcgLSA0OwogCQlpZiAoKHN0YXJ0X3JlZyA8IFBBQ0tFVDNfU0VUX0JPT0xfQ09OU1RfT0ZGU0VUKSB8fAogCQkgICAgKHN0YXJ0X3JlZyA+PSBQQUNLRVQzX1NFVF9CT09MX0NPTlNUX0VORCkgfHwKQEAgLTQ4Niw3ICs2MDUsNyBAQAogCQl9CiAJCWJyZWFrOwogCWNhc2UgUEFDS0VUM19TRVRfTE9PUF9DT05TVDoKLQkJc3RhcnRfcmVnID0gKGliW2lkeCswXSA8PCAyKSArIFBBQ0tFVDNfU0VUX0xPT1BfQ09OU1RfT0ZGU0VUOworCQlzdGFydF9yZWcgPSAoaWR4X3ZhbHVlIDw8IDIpICsgUEFDS0VUM19TRVRfTE9PUF9DT05TVF9PRkZTRVQ7CiAJCWVuZF9yZWcgPSA0ICogcGt0LT5jb3VudCArIHN0YXJ0X3JlZyAtIDQ7CiAJCWlmICgoc3RhcnRfcmVnIDwgUEFDS0VUM19TRVRfTE9PUF9DT05TVF9PRkZTRVQpIHx8CiAJCSAgICAoc3RhcnRfcmVnID49IFBBQ0tFVDNfU0VUX0xPT1BfQ09OU1RfRU5EKSB8fApAQCAtNDk2LDcgKzYxNSw3IEBACiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBQQUNLRVQzX1NFVF9DVExfQ09OU1Q6Ci0JCXN0YXJ0X3JlZyA9IChpYltpZHgrMF0gPDwgMikgKyBQQUNLRVQzX1NFVF9DVExfQ09OU1RfT0ZGU0VUOworCQlzdGFydF9yZWcgPSAoaWR4X3ZhbHVlIDw8IDIpICsgUEFDS0VUM19TRVRfQ1RMX0NPTlNUX09GRlNFVDsKIAkJZW5kX3JlZyA9IDQgKiBwa3QtPmNvdW50ICsgc3RhcnRfcmVnIC0gNDsKIAkJaWYgKChzdGFydF9yZWcgPCBQQUNLRVQzX1NFVF9DVExfQ09OU1RfT0ZGU0VUKSB8fAogCQkgICAgKHN0YXJ0X3JlZyA+PSBQQUNLRVQzX1NFVF9DVExfQ09OU1RfRU5EKSB8fApAQCAtNTEwLDcgKzYyOSw3IEBACiAJCQlEUk1fRVJST1IoImJhZCBTRVRfU0FNUExFUlxuIik7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQotCQlzdGFydF9yZWcgPSAoaWJbaWR4KzBdIDw8IDIpICsgUEFDS0VUM19TRVRfU0FNUExFUl9PRkZTRVQ7CisJCXN0YXJ0X3JlZyA9IChpZHhfdmFsdWUgPDwgMikgKyBQQUNLRVQzX1NFVF9TQU1QTEVSX09GRlNFVDsKIAkJZW5kX3JlZyA9IDQgKiBwa3QtPmNvdW50ICsgc3RhcnRfcmVnIC0gNDsKIAkJaWYgKChzdGFydF9yZWcgPCBQQUNLRVQzX1NFVF9TQU1QTEVSX09GRlNFVCkgfHwKIAkJICAgIChzdGFydF9yZWcgPj0gUEFDS0VUM19TRVRfU0FNUExFUl9FTkQpIHx8CkBAIC02MDIsNiArNzIxLDggQEAKIAlrZnJlZShwYXJzZXItPnJlbG9jcyk7CiAJZm9yIChpID0gMDsgaSA8IHBhcnNlci0+bmNodW5rczsgaSsrKSB7CiAJCWtmcmVlKHBhcnNlci0+Y2h1bmtzW2ldLmtkYXRhKTsKKwkJa2ZyZWUocGFyc2VyLT5jaHVua3NbaV0ua3BhZ2VbMF0pOworCQlrZnJlZShwYXJzZXItPmNodW5rc1tpXS5rcGFnZVsxXSk7CiAJfQogCWtmcmVlKHBhcnNlci0+Y2h1bmtzKTsKIAlrZnJlZShwYXJzZXItPmNodW5rc19hcnJheSk7CkBAIC02MzksNyArNzYwLDYgQEAKIAkgKiB1bmNhY2hlZCkuICovCiAJaWJfY2h1bmsgPSAmcGFyc2VyLmNodW5rc1twYXJzZXIuY2h1bmtfaWJfaWR4XTsKIAlwYXJzZXIuaWItPmxlbmd0aF9kdyA9IGliX2NodW5rLT5sZW5ndGhfZHc7Ci0JbWVtY3B5KCh2b2lkICopcGFyc2VyLmliLT5wdHIsIGliX2NodW5rLT5rZGF0YSwgaWJfY2h1bmstPmxlbmd0aF9kdyo0KTsKIAkqbCA9IHBhcnNlci5pYi0+bGVuZ3RoX2R3OwogCXIgPSByNjAwX2NzX3BhcnNlKCZwYXJzZXIpOwogCWlmIChyKSB7CkBAIC02NDcsNiArNzY3LDEyIEBACiAJCXI2MDBfY3NfcGFyc2VyX2ZpbmkoJnBhcnNlciwgcik7CiAJCXJldHVybiByOwogCX0KKwlyID0gcmFkZW9uX2NzX2ZpbmlzaF9wYWdlcygmcGFyc2VyKTsKKwlpZiAocikgeworCQlEUk1fRVJST1IoIkludmFsaWQgY29tbWFuZCBzdHJlYW0gIVxuIik7CisJCXI2MDBfY3NfcGFyc2VyX2ZpbmkoJnBhcnNlciwgcik7CisJCXJldHVybiByOworCX0KIAlyNjAwX2NzX3BhcnNlcl9maW5pKCZwYXJzZXIsIHIpOwogCXJldHVybiByOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwZC5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwZC5oCmluZGV4IDRhOTAyOGEuLjliNjRkNDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMGQuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBkLmgKQEAgLTY0Myw2ICs2NDMsNyBAQAogI2RlZmluZQkJR18wMDBFNTBfTUNEV19CVVNZKHgpCQkJKCgoeCkgPj4gMTMpICYgMSkKICNkZWZpbmUJCUdfMDAwRTUwX1NFTV9CVVNZKHgpCQkJKCgoeCkgPj4gMTQpICYgMSkKICNkZWZpbmUJCUdfMDAwRTUwX1JMQ19CVVNZKHgpCQkJKCgoeCkgPj4gMTUpICYgMSkKKyNkZWZpbmUJCUdfMDAwRTUwX0JJRl9CVVNZKHgpCQkJKCgoeCkgPj4gMjkpICYgMSkKICNkZWZpbmUJUl8wMDBFNjBfU1JCTV9TT0ZUX1JFU0VUCQkJMHgwRTYwCiAjZGVmaW5lCQlTXzAwMEU2MF9TT0ZUX1JFU0VUX0JJRih4KQkJKCgoeCkgJiAxKSA8PCAxKQogI2RlZmluZQkJU18wMDBFNjBfU09GVF9SRVNFVF9DRyh4KQkJKCgoeCkgJiAxKSA8PCAyKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb24uaCBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uLmgKaW5kZXggNjMxMWIxMy4uNWFiMzViOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb24uaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbi5oCkBAIC00NCw2ICs0NCwyNCBAQAogICoJLSBURVNUSU5HLCBURVNUSU5HLCBURVNUSU5HCiAgKi8KIAorLyogSW5pdGlhbGl6YXRpb24gcGF0aDoKKyAqICBXZSBleHBlY3QgdGhhdCBhY2NlbGVyYXRpb24gaW5pdGlhbGl6YXRpb24gbWlnaHQgZmFpbCBmb3IgdmFyaW91cworICogIHJlYXNvbnMgZXZlbiB0aG91Z2h0IHdlIHdvcmsgaGFyZCB0byBtYWtlIGl0IHdvcmtzIG9uIG1vc3QKKyAqICBjb25maWd1cmF0aW9ucy4gSW4gb3JkZXIgdG8gc3RpbGwgaGF2ZSBhIHdvcmtpbmcgdXNlcnNwYWNlIGluIHN1Y2gKKyAqICBzaXR1YXRpb24gdGhlIGluaXQgcGF0aCBtdXN0IHN1Y2NlZWQgdXAgdG8gdGhlIG1lbW9yeSBjb250cm9sbGVyCisgKiAgaW5pdGlhbGl6YXRpb24gcG9pbnQuIEZhaWx1cmUgYmVmb3JlIHRoaXMgcG9pbnQgYXJlIGNvbnNpZGVyZWQgYXMKKyAqICBmYXRhbCBlcnJvci4gSGVyZSBpcyB0aGUgaW5pdCBjYWxsY2hhaW4gOgorICogICAgICByYWRlb25fZGV2aWNlX2luaXQgIHBlcmZvcm0gY29tbW9uIHN0cnVjdHVyZSwgbXV0ZXggaW5pdGlhbGl6YXRpb24KKyAqICAgICAgYXNpY19pbml0ICAgICAgICAgICBzZXR1cCB0aGUgR1BVIG1lbW9yeSBsYXlvdXQgYW5kIHBlcmZvcm0gYWxsCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgb25lIHRpbWUgaW5pdGlhbGl6YXRpb24gKGZhaWx1cmUgaW4gdGhpcworICogICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGFyZSBjb25zaWRlcmVkIGZhdGFsKQorICogICAgICBhc2ljX3N0YXJ0dXAgICAgICAgIHNldHVwIHRoZSBHUFUgYWNjZWxlcmF0aW9uLCBpbiBvcmRlciB0bworICogICAgICAgICAgICAgICAgICAgICAgICAgIGZvbGxvdyBndWlkZWxpbmUgdGhlIGZpcnN0IHRoaW5nIHRoaXMKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBzaG91bGQgZG8gaXMgc2V0dGluZyB0aGUgR1BVCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgbWVtb3J5IGNvbnRyb2xsZXIgKG9ubHkgTUMgc2V0dXAgZmFpbHVyZQorICogICAgICAgICAgICAgICAgICAgICAgICAgIGFyZSBjb25zaWRlcmVkIGFzIGZhdGFsKQorICovCisKICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAjaW5jbHVkZSA8bGludXgvd2FpdC5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KQEAgLTM0Miw3ICszNjAsNyBAQAogCXVuc2lnbmVkIGxvbmcJCWlkeDsKIAl1aW50NjRfdAkJZ3B1X2FkZHI7CiAJc3RydWN0IHJhZGVvbl9mZW5jZQkqZmVuY2U7Ci0Jdm9sYXRpbGUgdWludDMyX3QJKnB0cjsKKwl1aW50MzJfdAkqcHRyOwogCXVpbnQzMl90CQlsZW5ndGhfZHc7CiB9OwogCkBAIC00MTUsNyArNDMzLDEyIEBACiBzdHJ1Y3QgcmFkZW9uX2NzX2NodW5rIHsKIAl1aW50MzJfdAkJY2h1bmtfaWQ7CiAJdWludDMyX3QJCWxlbmd0aF9kdzsKKwlpbnQga3BhZ2VfaWR4WzJdOworCXVpbnQzMl90ICAgICAgICAgICAgICAgICprcGFnZVsyXTsKIAl1aW50MzJfdAkJKmtkYXRhOworCXZvaWQgX191c2VyICp1c2VyX3B0cjsKKwlpbnQgbGFzdF9jb3BpZWRfcGFnZTsKKwlpbnQgbGFzdF9wYWdlX2luZGV4OwogfTsKIAogc3RydWN0IHJhZGVvbl9jc19wYXJzZXIgewpAQCAtNDM4LDggKzQ2MSwzOCBAQAogCXN0cnVjdCByYWRlb25faWIJKmliOwogCXZvaWQJCQkqdHJhY2s7CiAJdW5zaWduZWQJCWZhbWlseTsKKwlpbnQgcGFyc2VyX2Vycm9yOwogfTsKIAorZXh0ZXJuIGludCByYWRlb25fY3NfdXBkYXRlX3BhZ2VzKHN0cnVjdCByYWRlb25fY3NfcGFyc2VyICpwLCBpbnQgcGdfaWR4KTsKK2V4dGVybiBpbnQgcmFkZW9uX2NzX2ZpbmlzaF9wYWdlcyhzdHJ1Y3QgcmFkZW9uX2NzX3BhcnNlciAqcCk7CisKKworc3RhdGljIGlubGluZSB1MzIgcmFkZW9uX2dldF9pYl92YWx1ZShzdHJ1Y3QgcmFkZW9uX2NzX3BhcnNlciAqcCwgaW50IGlkeCkKK3sKKwlzdHJ1Y3QgcmFkZW9uX2NzX2NodW5rICppYmMgPSAmcC0+Y2h1bmtzW3AtPmNodW5rX2liX2lkeF07CisJdTMyIHBnX2lkeCwgcGdfb2Zmc2V0OworCXUzMiBpZHhfdmFsdWUgPSAwOworCWludCBuZXdfcGFnZTsKKworCXBnX2lkeCA9IChpZHggKiA0KSAvIFBBR0VfU0laRTsKKwlwZ19vZmZzZXQgPSAoaWR4ICogNCkgJSBQQUdFX1NJWkU7CisKKwlpZiAoaWJjLT5rcGFnZV9pZHhbMF0gPT0gcGdfaWR4KQorCQlyZXR1cm4gaWJjLT5rcGFnZVswXVtwZ19vZmZzZXQvNF07CisJaWYgKGliYy0+a3BhZ2VfaWR4WzFdID09IHBnX2lkeCkKKwkJcmV0dXJuIGliYy0+a3BhZ2VbMV1bcGdfb2Zmc2V0LzRdOworCisJbmV3X3BhZ2UgPSByYWRlb25fY3NfdXBkYXRlX3BhZ2VzKHAsIHBnX2lkeCk7CisJaWYgKG5ld19wYWdlIDwgMCkgeworCQlwLT5wYXJzZXJfZXJyb3IgPSBuZXdfcGFnZTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWR4X3ZhbHVlID0gaWJjLT5rcGFnZVtuZXdfcGFnZV1bcGdfb2Zmc2V0LzRdOworCXJldHVybiBpZHhfdmFsdWU7Cit9CisKIHN0cnVjdCByYWRlb25fY3NfcGFja2V0IHsKIAl1bnNpZ25lZAlpZHg7CiAJdW5zaWduZWQJdHlwZTsKQEAgLTUzNywxOCArNTkwLDggQEAKIAl2b2lkICgqZmluaSkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogCWludCAoKnJlc3VtZSkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogCWludCAoKnN1c3BlbmQpKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLQl2b2lkICgqZXJyYXRhKShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci0Jdm9pZCAoKnZyYW1faW5mbykoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogCXZvaWQgKCp2Z2Ffc2V0X3N0YXRlKShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgYm9vbCBzdGF0ZSk7CiAJaW50ICgqZ3B1X3Jlc2V0KShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci0JaW50ICgqbWNfaW5pdCkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotCXZvaWQgKCptY19maW5pKShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci0JaW50ICgqd2JfaW5pdCkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotCXZvaWQgKCp3Yl9maW5pKShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci0JaW50ICgqZ2FydF9pbml0KShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci0Jdm9pZCAoKmdhcnRfZmluaSkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotCWludCAoKmdhcnRfZW5hYmxlKShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci0Jdm9pZCAoKmdhcnRfZGlzYWJsZSkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogCXZvaWQgKCpnYXJ0X3RsYl9mbHVzaCkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogCWludCAoKmdhcnRfc2V0X3BhZ2UpKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBpbnQgaSwgdWludDY0X3QgYWRkcik7CiAJaW50ICgqY3BfaW5pdCkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHVuc2lnbmVkIHJpbmdfc2l6ZSk7CkBAIC01NTgsNyArNjAxLDYgQEAKIAl2b2lkICgqcmluZ19zdGFydCkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogCWludCAoKnJpbmdfdGVzdCkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogCXZvaWQgKCpyaW5nX2liX2V4ZWN1dGUpKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBzdHJ1Y3QgcmFkZW9uX2liICppYik7Ci0JaW50ICgqaWJfdGVzdCkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogCWludCAoKmlycV9zZXQpKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIAlpbnQgKCppcnFfcHJvY2Vzcykoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogCXUzMiAoKmdldF92YmxhbmtfY291bnRlcikoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIGludCBjcnRjKTsKQEAgLTczNiw3ICs3NzgsNiBAQAogCWJvb2wJCQkJc2h1dGRvd247CiAJYm9vbAkJCQlzdXNwZW5kOwogCWJvb2wJCQkJbmVlZF9kbWEzMjsKLQlib29sCQkJCW5ld19pbml0X3BhdGg7CiAJYm9vbAkJCQlhY2NlbF93b3JraW5nOwogCXN0cnVjdCByYWRlb25fc3VyZmFjZV9yZWcgc3VyZmFjZV9yZWdzW1JBREVPTl9HRU1fTUFYX1NVUkZBQ0VTXTsKIAljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKm1lX2Z3OwkvKiBhbGwgZmFtaWx5IE1FIGZpcm13YXJlICovCkBAIC04OTYsMjggKzkzNywxNCBAQAogI2RlZmluZSByYWRlb25fcmVzdW1lKHJkZXYpIChyZGV2KS0+YXNpYy0+cmVzdW1lKChyZGV2KSkKICNkZWZpbmUgcmFkZW9uX3N1c3BlbmQocmRldikgKHJkZXYpLT5hc2ljLT5zdXNwZW5kKChyZGV2KSkKICNkZWZpbmUgcmFkZW9uX2NzX3BhcnNlKHApIHJkZXYtPmFzaWMtPmNzX3BhcnNlKChwKSkKLSNkZWZpbmUgcmFkZW9uX2VycmF0YShyZGV2KSAocmRldiktPmFzaWMtPmVycmF0YSgocmRldikpCi0jZGVmaW5lIHJhZGVvbl92cmFtX2luZm8ocmRldikgKHJkZXYpLT5hc2ljLT52cmFtX2luZm8oKHJkZXYpKQogI2RlZmluZSByYWRlb25fdmdhX3NldF9zdGF0ZShyZGV2LCBzdGF0ZSkgKHJkZXYpLT5hc2ljLT52Z2Ffc2V0X3N0YXRlKChyZGV2KSwgKHN0YXRlKSkKICNkZWZpbmUgcmFkZW9uX2dwdV9yZXNldChyZGV2KSAocmRldiktPmFzaWMtPmdwdV9yZXNldCgocmRldikpCi0jZGVmaW5lIHJhZGVvbl9tY19pbml0KHJkZXYpIChyZGV2KS0+YXNpYy0+bWNfaW5pdCgocmRldikpCi0jZGVmaW5lIHJhZGVvbl9tY19maW5pKHJkZXYpIChyZGV2KS0+YXNpYy0+bWNfZmluaSgocmRldikpCi0jZGVmaW5lIHJhZGVvbl93Yl9pbml0KHJkZXYpIChyZGV2KS0+YXNpYy0+d2JfaW5pdCgocmRldikpCi0jZGVmaW5lIHJhZGVvbl93Yl9maW5pKHJkZXYpIChyZGV2KS0+YXNpYy0+d2JfZmluaSgocmRldikpCi0jZGVmaW5lIHJhZGVvbl9ncHVfZ2FydF9pbml0KHJkZXYpIChyZGV2KS0+YXNpYy0+Z2FydF9pbml0KChyZGV2KSkKLSNkZWZpbmUgcmFkZW9uX2dwdV9nYXJ0X2ZpbmkocmRldikgKHJkZXYpLT5hc2ljLT5nYXJ0X2ZpbmkoKHJkZXYpKQotI2RlZmluZSByYWRlb25fZ2FydF9lbmFibGUocmRldikgKHJkZXYpLT5hc2ljLT5nYXJ0X2VuYWJsZSgocmRldikpCi0jZGVmaW5lIHJhZGVvbl9nYXJ0X2Rpc2FibGUocmRldikgKHJkZXYpLT5hc2ljLT5nYXJ0X2Rpc2FibGUoKHJkZXYpKQogI2RlZmluZSByYWRlb25fZ2FydF90bGJfZmx1c2gocmRldikgKHJkZXYpLT5hc2ljLT5nYXJ0X3RsYl9mbHVzaCgocmRldikpCiAjZGVmaW5lIHJhZGVvbl9nYXJ0X3NldF9wYWdlKHJkZXYsIGksIHApIChyZGV2KS0+YXNpYy0+Z2FydF9zZXRfcGFnZSgocmRldiksIChpKSwgKHApKQotI2RlZmluZSByYWRlb25fY3BfaW5pdChyZGV2LHJzaXplKSAocmRldiktPmFzaWMtPmNwX2luaXQoKHJkZXYpLCAocnNpemUpKQotI2RlZmluZSByYWRlb25fY3BfZmluaShyZGV2KSAocmRldiktPmFzaWMtPmNwX2ZpbmkoKHJkZXYpKQotI2RlZmluZSByYWRlb25fY3BfZGlzYWJsZShyZGV2KSAocmRldiktPmFzaWMtPmNwX2Rpc2FibGUoKHJkZXYpKQogI2RlZmluZSByYWRlb25fY3BfY29tbWl0KHJkZXYpIChyZGV2KS0+YXNpYy0+Y3BfY29tbWl0KChyZGV2KSkKICNkZWZpbmUgcmFkZW9uX3Jpbmdfc3RhcnQocmRldikgKHJkZXYpLT5hc2ljLT5yaW5nX3N0YXJ0KChyZGV2KSkKICNkZWZpbmUgcmFkZW9uX3JpbmdfdGVzdChyZGV2KSAocmRldiktPmFzaWMtPnJpbmdfdGVzdCgocmRldikpCiAjZGVmaW5lIHJhZGVvbl9yaW5nX2liX2V4ZWN1dGUocmRldiwgaWIpIChyZGV2KS0+YXNpYy0+cmluZ19pYl9leGVjdXRlKChyZGV2KSwgKGliKSkKLSNkZWZpbmUgcmFkZW9uX2liX3Rlc3QocmRldikgKHJkZXYpLT5hc2ljLT5pYl90ZXN0KChyZGV2KSkKICNkZWZpbmUgcmFkZW9uX2lycV9zZXQocmRldikgKHJkZXYpLT5hc2ljLT5pcnFfc2V0KChyZGV2KSkKICNkZWZpbmUgcmFkZW9uX2lycV9wcm9jZXNzKHJkZXYpIChyZGV2KS0+YXNpYy0+aXJxX3Byb2Nlc3MoKHJkZXYpKQogI2RlZmluZSByYWRlb25fZ2V0X3ZibGFua19jb3VudGVyKHJkZXYsIGNydGMpIChyZGV2KS0+YXNpYy0+Z2V0X3ZibGFua19jb3VudGVyKChyZGV2KSwgKGNydGMpKQpAQCAtOTQzLDYgKzk3MCw4IEBACiBleHRlcm4gdm9pZCByYWRlb25fc2NyYXRjaF9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIGV4dGVybiB2b2lkIHJhZGVvbl9zdXJmYWNlX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogZXh0ZXJuIGludCByYWRlb25fY3NfcGFyc2VyX2luaXQoc3RydWN0IHJhZGVvbl9jc19wYXJzZXIgKnAsIHZvaWQgKmRhdGEpOworZXh0ZXJuIHZvaWQgcmFkZW9uX2xlZ2FjeV9zZXRfY2xvY2tfZ2F0aW5nKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBpbnQgZW5hYmxlKTsKK2V4dGVybiB2b2lkIHJhZGVvbl9hdG9tX3NldF9jbG9ja19nYXRpbmcoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIGludCBlbmFibGUpOwogCiAvKiByMTAwLHJ2MTAwLHJzMTAwLHJ2MjAwLHJzMjAwLHIyMDAscnYyNTAscnMzMDAscnYyODAgKi8KIHN0cnVjdCByMTAwX21jX3NhdmUgewpAQCAtOTc0LDIzICsxMDAzLDcxIEBACiBleHRlcm4gdm9pZCByMTAwX3diX2Rpc2FibGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogZXh0ZXJuIHZvaWQgcjEwMF93Yl9maW5pKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIGV4dGVybiBpbnQgcjEwMF93Yl9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2V4dGVybiB2b2lkIHIxMDBfaGRwX3Jlc2V0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2V4dGVybiBpbnQgcjEwMF9yYjJkX3Jlc2V0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2V4dGVybiBpbnQgcjEwMF9jcF9yZXNldChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitleHRlcm4gdm9pZCByMTAwX3ZnYV9yZW5kZXJfZGlzYWJsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitleHRlcm4gaW50IHIxMDBfY3NfdHJhY2tfY2hlY2tfcGt0M19pbmR4X2J1ZmZlcihzdHJ1Y3QgcmFkZW9uX2NzX3BhcnNlciAqcCwKKwkJCQkJCXN0cnVjdCByYWRlb25fY3NfcGFja2V0ICpwa3QsCisJCQkJCQlzdHJ1Y3QgcmFkZW9uX29iamVjdCAqcm9iaik7CitleHRlcm4gaW50IHIxMDBfY3NfcGFyc2VfcGFja2V0MChzdHJ1Y3QgcmFkZW9uX2NzX3BhcnNlciAqcCwKKwkJCQlzdHJ1Y3QgcmFkZW9uX2NzX3BhY2tldCAqcGt0LAorCQkJCWNvbnN0IHVuc2lnbmVkICphdXRoLCB1bnNpZ25lZCBuLAorCQkJCXJhZGVvbl9wYWNrZXQwX2NoZWNrX3QgY2hlY2spOworZXh0ZXJuIGludCByMTAwX2NzX3BhY2tldF9wYXJzZShzdHJ1Y3QgcmFkZW9uX2NzX3BhcnNlciAqcCwKKwkJCQlzdHJ1Y3QgcmFkZW9uX2NzX3BhY2tldCAqcGt0LAorCQkJCXVuc2lnbmVkIGlkeCk7CisKKy8qIHJ2MjAwLHJ2MjUwLHJ2MjgwICovCitleHRlcm4gdm9pZCByMjAwX3NldF9zYWZlX3JlZ2lzdGVycyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiAKIC8qIHIzMDAscjM1MCxydjM1MCxydjM3MCxydjM4MCAqLwogZXh0ZXJuIHZvaWQgcjMwMF9zZXRfcmVnX3NhZmUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogZXh0ZXJuIHZvaWQgcjMwMF9tY19wcm9ncmFtKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIGV4dGVybiB2b2lkIHIzMDBfdnJhbV9pbmZvKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2V4dGVybiB2b2lkIHIzMDBfY2xvY2tfc3RhcnR1cChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitleHRlcm4gaW50IHIzMDBfbWNfd2FpdF9mb3JfaWRsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiBleHRlcm4gaW50IHJ2MzcwX3BjaWVfZ2FydF9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIGV4dGVybiB2b2lkIHJ2MzcwX3BjaWVfZ2FydF9maW5pKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIGV4dGVybiBpbnQgcnYzNzBfcGNpZV9nYXJ0X2VuYWJsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiBleHRlcm4gdm9pZCBydjM3MF9wY2llX2dhcnRfZGlzYWJsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiAKIC8qIHI0MjAscjQyMyxydjQxMCAqLworZXh0ZXJuIGludCByNDIwX21jX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogZXh0ZXJuIHUzMiByNDIwX21jX3JyZWcoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHUzMiByZWcpOwogZXh0ZXJuIHZvaWQgcjQyMF9tY193cmVnKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCB1MzIgcmVnLCB1MzIgdik7CiBleHRlcm4gaW50IHI0MjBfZGVidWdmc19waXBlc19pbmZvX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIHZvaWQgcjQyMF9waXBlc19pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIAogLyogcnY1MTUgKi8KK3N0cnVjdCBydjUxNV9tY19zYXZlIHsKKwl1MzIgZDF2Z2FfY29udHJvbDsKKwl1MzIgZDJ2Z2FfY29udHJvbDsKKwl1MzIgdmdhX3JlbmRlcl9jb250cm9sOworCXUzMiB2Z2FfaGRwX2NvbnRyb2w7CisJdTMyIGQxY3J0Y19jb250cm9sOworCXUzMiBkMmNydGNfY29udHJvbDsKK307CiBleHRlcm4gdm9pZCBydjUxNV9iYW5kd2lkdGhfYXZpdm9fdXBkYXRlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2V4dGVybiB2b2lkIHJ2NTE1X3ZnYV9yZW5kZXJfZGlzYWJsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitleHRlcm4gdm9pZCBydjUxNV9zZXRfc2FmZV9yZWdpc3RlcnMoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIHZvaWQgcnY1MTVfbWNfc3RvcChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgc3RydWN0IHJ2NTE1X21jX3NhdmUgKnNhdmUpOworZXh0ZXJuIHZvaWQgcnY1MTVfbWNfcmVzdW1lKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBzdHJ1Y3QgcnY1MTVfbWNfc2F2ZSAqc2F2ZSk7CitleHRlcm4gdm9pZCBydjUxNV9jbG9ja19zdGFydHVwKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2V4dGVybiB2b2lkIHJ2NTE1X2RlYnVnZnMoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIGludCBydjUxNV9zdXNwZW5kKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKKworLyogcnM0MDAgKi8KK2V4dGVybiBpbnQgcnM0MDBfZ2FydF9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2V4dGVybiBpbnQgcnM0MDBfZ2FydF9lbmFibGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIHZvaWQgcnM0MDBfZ2FydF9hZGp1c3Rfc2l6ZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitleHRlcm4gdm9pZCByczQwMF9nYXJ0X2Rpc2FibGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIHZvaWQgcnM0MDBfZ2FydF9maW5pKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKKworLyogcnM2MDAgKi8KK2V4dGVybiB2b2lkIHJzNjAwX3NldF9zYWZlX3JlZ2lzdGVycyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitleHRlcm4gaW50IHJzNjAwX2lycV9zZXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIHZvaWQgcnM2MDBfaXJxX2Rpc2FibGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogCiAvKiByczY5MCwgcnM3NDAgKi8KIGV4dGVybiB2b2lkIHJzNjkwX2xpbmVfYnVmZmVyX2FkanVzdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwKQEAgLTEwMDksOCArMTA4Niw5IEBACiBleHRlcm4gdm9pZCByNjAwX3BjaWVfZ2FydF90bGJfZmx1c2goc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogZXh0ZXJuIGludCByNjAwX2liX3Rlc3Qoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogZXh0ZXJuIGludCByNjAwX3JpbmdfdGVzdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci1leHRlcm4gaW50IHI2MDBfd2JfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiBleHRlcm4gdm9pZCByNjAwX3diX2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIGludCByNjAwX3diX2VuYWJsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitleHRlcm4gdm9pZCByNjAwX3diX2Rpc2FibGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogZXh0ZXJuIHZvaWQgcjYwMF9zY3JhdGNoX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogZXh0ZXJuIGludCByNjAwX2JsaXRfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiBleHRlcm4gdm9pZCByNjAwX2JsaXRfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9hc2ljLmggYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9hc2ljLmgKaW5kZXggODk2OGY3OC4uYzM1MzJjNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYXNpYy5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2FzaWMuaApAQCAtNDEsMjggKzQxLDE3IEBACiAvKgogICogcjEwMCxydjEwMCxyczEwMCxydjIwMCxyczIwMCxyMjAwLHJ2MjUwLHJzMzAwLHJ2MjgwCiAgKi8KLWludCByMTAwX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotaW50IHIyMDBfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitleHRlcm4gaW50IHIxMDBfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitleHRlcm4gdm9pZCByMTAwX2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIGludCByMTAwX3N1c3BlbmQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIGludCByMTAwX3Jlc3VtZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiB1aW50MzJfdCByMTAwX21tX3JyZWcoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHVpbnQzMl90IHJlZyk7CiB2b2lkIHIxMDBfbW1fd3JlZyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgdWludDMyX3QgcmVnLCB1aW50MzJfdCB2KTsKLXZvaWQgcjEwMF9lcnJhdGEoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotdm9pZCByMTAwX3ZyYW1faW5mbyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiB2b2lkIHIxMDBfdmdhX3NldF9zdGF0ZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgYm9vbCBzdGF0ZSk7CiBpbnQgcjEwMF9ncHVfcmVzZXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotaW50IHIxMDBfbWNfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci12b2lkIHIxMDBfbWNfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiB1MzIgcjEwMF9nZXRfdmJsYW5rX2NvdW50ZXIoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIGludCBjcnRjKTsKLWludCByMTAwX3diX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotdm9pZCByMTAwX3diX2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotaW50IHIxMDBfcGNpX2dhcnRfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci12b2lkIHIxMDBfcGNpX2dhcnRfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci1pbnQgcjEwMF9wY2lfZ2FydF9lbmFibGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotdm9pZCByMTAwX3BjaV9nYXJ0X2Rpc2FibGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogdm9pZCByMTAwX3BjaV9nYXJ0X3RsYl9mbHVzaChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiBpbnQgcjEwMF9wY2lfZ2FydF9zZXRfcGFnZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgaW50IGksIHVpbnQ2NF90IGFkZHIpOwotaW50IHIxMDBfY3BfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgdW5zaWduZWQgcmluZ19zaXplKTsKLXZvaWQgcjEwMF9jcF9maW5pKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLXZvaWQgcjEwMF9jcF9kaXNhYmxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIHZvaWQgcjEwMF9jcF9jb21taXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogdm9pZCByMTAwX3Jpbmdfc3RhcnQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogaW50IHIxMDBfaXJxX3NldChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CkBAIC04MywzMyArNzIsMjEgQEAKIGludCByMTAwX2NsZWFyX3N1cmZhY2VfcmVnKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBpbnQgcmVnKTsKIHZvaWQgcjEwMF9iYW5kd2lkdGhfdXBkYXRlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIHZvaWQgcjEwMF9yaW5nX2liX2V4ZWN1dGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHN0cnVjdCByYWRlb25faWIgKmliKTsKLWludCByMTAwX2liX3Rlc3Qoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogaW50IHIxMDBfcmluZ190ZXN0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIAogc3RhdGljIHN0cnVjdCByYWRlb25fYXNpYyByMTAwX2FzaWMgPSB7CiAJLmluaXQgPSAmcjEwMF9pbml0LAotCS5lcnJhdGEgPSAmcjEwMF9lcnJhdGEsCi0JLnZyYW1faW5mbyA9ICZyMTAwX3ZyYW1faW5mbywKKwkuZmluaSA9ICZyMTAwX2ZpbmksCisJLnN1c3BlbmQgPSAmcjEwMF9zdXNwZW5kLAorCS5yZXN1bWUgPSAmcjEwMF9yZXN1bWUsCiAJLnZnYV9zZXRfc3RhdGUgPSAmcjEwMF92Z2Ffc2V0X3N0YXRlLAogCS5ncHVfcmVzZXQgPSAmcjEwMF9ncHVfcmVzZXQsCi0JLm1jX2luaXQgPSAmcjEwMF9tY19pbml0LAotCS5tY19maW5pID0gJnIxMDBfbWNfZmluaSwKLQkud2JfaW5pdCA9ICZyMTAwX3diX2luaXQsCi0JLndiX2ZpbmkgPSAmcjEwMF93Yl9maW5pLAotCS5nYXJ0X2luaXQgPSAmcjEwMF9wY2lfZ2FydF9pbml0LAotCS5nYXJ0X2ZpbmkgPSAmcjEwMF9wY2lfZ2FydF9maW5pLAotCS5nYXJ0X2VuYWJsZSA9ICZyMTAwX3BjaV9nYXJ0X2VuYWJsZSwKLQkuZ2FydF9kaXNhYmxlID0gJnIxMDBfcGNpX2dhcnRfZGlzYWJsZSwKIAkuZ2FydF90bGJfZmx1c2ggPSAmcjEwMF9wY2lfZ2FydF90bGJfZmx1c2gsCiAJLmdhcnRfc2V0X3BhZ2UgPSAmcjEwMF9wY2lfZ2FydF9zZXRfcGFnZSwKLQkuY3BfaW5pdCA9ICZyMTAwX2NwX2luaXQsCi0JLmNwX2ZpbmkgPSAmcjEwMF9jcF9maW5pLAotCS5jcF9kaXNhYmxlID0gJnIxMDBfY3BfZGlzYWJsZSwKIAkuY3BfY29tbWl0ID0gJnIxMDBfY3BfY29tbWl0LAogCS5yaW5nX3N0YXJ0ID0gJnIxMDBfcmluZ19zdGFydCwKIAkucmluZ190ZXN0ID0gJnIxMDBfcmluZ190ZXN0LAogCS5yaW5nX2liX2V4ZWN1dGUgPSAmcjEwMF9yaW5nX2liX2V4ZWN1dGUsCi0JLmliX3Rlc3QgPSAmcjEwMF9pYl90ZXN0LAogCS5pcnFfc2V0ID0gJnIxMDBfaXJxX3NldCwKIAkuaXJxX3Byb2Nlc3MgPSAmcjEwMF9pcnFfcHJvY2VzcywKIAkuZ2V0X3ZibGFua19jb3VudGVyID0gJnIxMDBfZ2V0X3ZibGFua19jb3VudGVyLApAQCAtMTMxLDU1ICsxMDgsMzggQEAKIC8qCiAgKiByMzAwLHIzNTAscnYzNTAscnYzODAKICAqLwotaW50IHIzMDBfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci12b2lkIHIzMDBfZXJyYXRhKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLXZvaWQgcjMwMF92cmFtX2luZm8oc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotaW50IHIzMDBfZ3B1X3Jlc2V0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLWludCByMzAwX21jX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotdm9pZCByMzAwX21jX2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotdm9pZCByMzAwX3Jpbmdfc3RhcnQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotdm9pZCByMzAwX2ZlbmNlX3JpbmdfZW1pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwKLQkJCSAgc3RydWN0IHJhZGVvbl9mZW5jZSAqZmVuY2UpOwotaW50IHIzMDBfY3NfcGFyc2Uoc3RydWN0IHJhZGVvbl9jc19wYXJzZXIgKnApOwotaW50IHJ2MzcwX3BjaWVfZ2FydF9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLXZvaWQgcnYzNzBfcGNpZV9nYXJ0X2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotaW50IHJ2MzcwX3BjaWVfZ2FydF9lbmFibGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotdm9pZCBydjM3MF9wY2llX2dhcnRfZGlzYWJsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci12b2lkIHJ2MzcwX3BjaWVfZ2FydF90bGJfZmx1c2goc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotaW50IHJ2MzcwX3BjaWVfZ2FydF9zZXRfcGFnZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgaW50IGksIHVpbnQ2NF90IGFkZHIpOwotdWludDMyX3QgcnYzNzBfcGNpZV9ycmVnKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCB1aW50MzJfdCByZWcpOwotdm9pZCBydjM3MF9wY2llX3dyZWcoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHVpbnQzMl90IHJlZywgdWludDMyX3Qgdik7Ci12b2lkIHJ2MzcwX3NldF9wY2llX2xhbmVzKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBpbnQgbGFuZXMpOwotaW50IHIzMDBfY29weV9kbWEoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsCi0JCSAgdWludDY0X3Qgc3JjX29mZnNldCwKLQkJICB1aW50NjRfdCBkc3Rfb2Zmc2V0LAotCQkgIHVuc2lnbmVkIG51bV9wYWdlcywKLQkJICBzdHJ1Y3QgcmFkZW9uX2ZlbmNlICpmZW5jZSk7Ci0KK2V4dGVybiBpbnQgcjMwMF9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2V4dGVybiB2b2lkIHIzMDBfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitleHRlcm4gaW50IHIzMDBfc3VzcGVuZChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitleHRlcm4gaW50IHIzMDBfcmVzdW1lKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2V4dGVybiBpbnQgcjMwMF9ncHVfcmVzZXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIHZvaWQgcjMwMF9yaW5nX3N0YXJ0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2V4dGVybiB2b2lkIHIzMDBfZmVuY2VfcmluZ19lbWl0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LAorCQkJCXN0cnVjdCByYWRlb25fZmVuY2UgKmZlbmNlKTsKK2V4dGVybiBpbnQgcjMwMF9jc19wYXJzZShzdHJ1Y3QgcmFkZW9uX2NzX3BhcnNlciAqcCk7CitleHRlcm4gdm9pZCBydjM3MF9wY2llX2dhcnRfdGxiX2ZsdXNoKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2V4dGVybiBpbnQgcnYzNzBfcGNpZV9nYXJ0X3NldF9wYWdlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBpbnQgaSwgdWludDY0X3QgYWRkcik7CitleHRlcm4gdWludDMyX3QgcnYzNzBfcGNpZV9ycmVnKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCB1aW50MzJfdCByZWcpOworZXh0ZXJuIHZvaWQgcnYzNzBfcGNpZV93cmVnKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCB1aW50MzJfdCByZWcsIHVpbnQzMl90IHYpOworZXh0ZXJuIHZvaWQgcnYzNzBfc2V0X3BjaWVfbGFuZXMoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIGludCBsYW5lcyk7CitleHRlcm4gaW50IHIzMDBfY29weV9kbWEoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsCisJCQl1aW50NjRfdCBzcmNfb2Zmc2V0LAorCQkJdWludDY0X3QgZHN0X29mZnNldCwKKwkJCXVuc2lnbmVkIG51bV9wYWdlcywKKwkJCXN0cnVjdCByYWRlb25fZmVuY2UgKmZlbmNlKTsKIHN0YXRpYyBzdHJ1Y3QgcmFkZW9uX2FzaWMgcjMwMF9hc2ljID0gewogCS5pbml0ID0gJnIzMDBfaW5pdCwKLQkuZXJyYXRhID0gJnIzMDBfZXJyYXRhLAotCS52cmFtX2luZm8gPSAmcjMwMF92cmFtX2luZm8sCisJLmZpbmkgPSAmcjMwMF9maW5pLAorCS5zdXNwZW5kID0gJnIzMDBfc3VzcGVuZCwKKwkucmVzdW1lID0gJnIzMDBfcmVzdW1lLAogCS52Z2Ffc2V0X3N0YXRlID0gJnIxMDBfdmdhX3NldF9zdGF0ZSwKIAkuZ3B1X3Jlc2V0ID0gJnIzMDBfZ3B1X3Jlc2V0LAotCS5tY19pbml0ID0gJnIzMDBfbWNfaW5pdCwKLQkubWNfZmluaSA9ICZyMzAwX21jX2ZpbmksCi0JLndiX2luaXQgPSAmcjEwMF93Yl9pbml0LAotCS53Yl9maW5pID0gJnIxMDBfd2JfZmluaSwKLQkuZ2FydF9pbml0ID0gJnIxMDBfcGNpX2dhcnRfaW5pdCwKLQkuZ2FydF9maW5pID0gJnIxMDBfcGNpX2dhcnRfZmluaSwKLQkuZ2FydF9lbmFibGUgPSAmcjEwMF9wY2lfZ2FydF9lbmFibGUsCi0JLmdhcnRfZGlzYWJsZSA9ICZyMTAwX3BjaV9nYXJ0X2Rpc2FibGUsCiAJLmdhcnRfdGxiX2ZsdXNoID0gJnIxMDBfcGNpX2dhcnRfdGxiX2ZsdXNoLAogCS5nYXJ0X3NldF9wYWdlID0gJnIxMDBfcGNpX2dhcnRfc2V0X3BhZ2UsCi0JLmNwX2luaXQgPSAmcjEwMF9jcF9pbml0LAotCS5jcF9maW5pID0gJnIxMDBfY3BfZmluaSwKLQkuY3BfZGlzYWJsZSA9ICZyMTAwX2NwX2Rpc2FibGUsCiAJLmNwX2NvbW1pdCA9ICZyMTAwX2NwX2NvbW1pdCwKIAkucmluZ19zdGFydCA9ICZyMzAwX3Jpbmdfc3RhcnQsCiAJLnJpbmdfdGVzdCA9ICZyMTAwX3JpbmdfdGVzdCwKIAkucmluZ19pYl9leGVjdXRlID0gJnIxMDBfcmluZ19pYl9leGVjdXRlLAotCS5pYl90ZXN0ID0gJnIxMDBfaWJfdGVzdCwKIAkuaXJxX3NldCA9ICZyMTAwX2lycV9zZXQsCiAJLmlycV9wcm9jZXNzID0gJnIxMDBfaXJxX3Byb2Nlc3MsCiAJLmdldF92YmxhbmtfY291bnRlciA9ICZyMTAwX2dldF92YmxhbmtfY291bnRlciwKQEAgLTIwOSwyNiArMTY5LDE0IEBACiAJLmZpbmkgPSAmcjQyMF9maW5pLAogCS5zdXNwZW5kID0gJnI0MjBfc3VzcGVuZCwKIAkucmVzdW1lID0gJnI0MjBfcmVzdW1lLAotCS5lcnJhdGEgPSBOVUxMLAotCS52cmFtX2luZm8gPSBOVUxMLAogCS52Z2Ffc2V0X3N0YXRlID0gJnIxMDBfdmdhX3NldF9zdGF0ZSwKIAkuZ3B1X3Jlc2V0ID0gJnIzMDBfZ3B1X3Jlc2V0LAotCS5tY19pbml0ID0gTlVMTCwKLQkubWNfZmluaSA9IE5VTEwsCi0JLndiX2luaXQgPSBOVUxMLAotCS53Yl9maW5pID0gTlVMTCwKLQkuZ2FydF9lbmFibGUgPSBOVUxMLAotCS5nYXJ0X2Rpc2FibGUgPSBOVUxMLAogCS5nYXJ0X3RsYl9mbHVzaCA9ICZydjM3MF9wY2llX2dhcnRfdGxiX2ZsdXNoLAogCS5nYXJ0X3NldF9wYWdlID0gJnJ2MzcwX3BjaWVfZ2FydF9zZXRfcGFnZSwKLQkuY3BfaW5pdCA9IE5VTEwsCi0JLmNwX2ZpbmkgPSBOVUxMLAotCS5jcF9kaXNhYmxlID0gTlVMTCwKIAkuY3BfY29tbWl0ID0gJnIxMDBfY3BfY29tbWl0LAogCS5yaW5nX3N0YXJ0ID0gJnIzMDBfcmluZ19zdGFydCwKIAkucmluZ190ZXN0ID0gJnIxMDBfcmluZ190ZXN0LAogCS5yaW5nX2liX2V4ZWN1dGUgPSAmcjEwMF9yaW5nX2liX2V4ZWN1dGUsCi0JLmliX3Rlc3QgPSBOVUxMLAogCS5pcnFfc2V0ID0gJnIxMDBfaXJxX3NldCwKIAkuaXJxX3Byb2Nlc3MgPSAmcjEwMF9pcnFfcHJvY2VzcywKIAkuZ2V0X3ZibGFua19jb3VudGVyID0gJnIxMDBfZ2V0X3ZibGFua19jb3VudGVyLApAQCAtMjUwLDQyICsxOTgsMjcgQEAKIC8qCiAgKiByczQwMCxyczQ4MAogICovCi12b2lkIHJzNDAwX2VycmF0YShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci12b2lkIHJzNDAwX3ZyYW1faW5mbyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci1pbnQgcnM0MDBfbWNfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci12b2lkIHJzNDAwX21jX2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotaW50IHJzNDAwX2dhcnRfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci12b2lkIHJzNDAwX2dhcnRfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci1pbnQgcnM0MDBfZ2FydF9lbmFibGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotdm9pZCByczQwMF9nYXJ0X2Rpc2FibGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIGludCByczQwMF9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2V4dGVybiB2b2lkIHJzNDAwX2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIGludCByczQwMF9zdXNwZW5kKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2V4dGVybiBpbnQgcnM0MDBfcmVzdW1lKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIHZvaWQgcnM0MDBfZ2FydF90bGJfZmx1c2goc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogaW50IHJzNDAwX2dhcnRfc2V0X3BhZ2Uoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIGludCBpLCB1aW50NjRfdCBhZGRyKTsKIHVpbnQzMl90IHJzNDAwX21jX3JyZWcoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHVpbnQzMl90IHJlZyk7CiB2b2lkIHJzNDAwX21jX3dyZWcoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHVpbnQzMl90IHJlZywgdWludDMyX3Qgdik7CiBzdGF0aWMgc3RydWN0IHJhZGVvbl9hc2ljIHJzNDAwX2FzaWMgPSB7Ci0JLmluaXQgPSAmcjMwMF9pbml0LAotCS5lcnJhdGEgPSAmcnM0MDBfZXJyYXRhLAotCS52cmFtX2luZm8gPSAmcnM0MDBfdnJhbV9pbmZvLAorCS5pbml0ID0gJnJzNDAwX2luaXQsCisJLmZpbmkgPSAmcnM0MDBfZmluaSwKKwkuc3VzcGVuZCA9ICZyczQwMF9zdXNwZW5kLAorCS5yZXN1bWUgPSAmcnM0MDBfcmVzdW1lLAogCS52Z2Ffc2V0X3N0YXRlID0gJnIxMDBfdmdhX3NldF9zdGF0ZSwKIAkuZ3B1X3Jlc2V0ID0gJnIzMDBfZ3B1X3Jlc2V0LAotCS5tY19pbml0ID0gJnJzNDAwX21jX2luaXQsCi0JLm1jX2ZpbmkgPSAmcnM0MDBfbWNfZmluaSwKLQkud2JfaW5pdCA9ICZyMTAwX3diX2luaXQsCi0JLndiX2ZpbmkgPSAmcjEwMF93Yl9maW5pLAotCS5nYXJ0X2luaXQgPSAmcnM0MDBfZ2FydF9pbml0LAotCS5nYXJ0X2ZpbmkgPSAmcnM0MDBfZ2FydF9maW5pLAotCS5nYXJ0X2VuYWJsZSA9ICZyczQwMF9nYXJ0X2VuYWJsZSwKLQkuZ2FydF9kaXNhYmxlID0gJnJzNDAwX2dhcnRfZGlzYWJsZSwKIAkuZ2FydF90bGJfZmx1c2ggPSAmcnM0MDBfZ2FydF90bGJfZmx1c2gsCiAJLmdhcnRfc2V0X3BhZ2UgPSAmcnM0MDBfZ2FydF9zZXRfcGFnZSwKLQkuY3BfaW5pdCA9ICZyMTAwX2NwX2luaXQsCi0JLmNwX2ZpbmkgPSAmcjEwMF9jcF9maW5pLAotCS5jcF9kaXNhYmxlID0gJnIxMDBfY3BfZGlzYWJsZSwKIAkuY3BfY29tbWl0ID0gJnIxMDBfY3BfY29tbWl0LAogCS5yaW5nX3N0YXJ0ID0gJnIzMDBfcmluZ19zdGFydCwKIAkucmluZ190ZXN0ID0gJnIxMDBfcmluZ190ZXN0LAogCS5yaW5nX2liX2V4ZWN1dGUgPSAmcjEwMF9yaW5nX2liX2V4ZWN1dGUsCi0JLmliX3Rlc3QgPSAmcjEwMF9pYl90ZXN0LAogCS5pcnFfc2V0ID0gJnIxMDBfaXJxX3NldCwKIAkuaXJxX3Byb2Nlc3MgPSAmcjEwMF9pcnFfcHJvY2VzcywKIAkuZ2V0X3ZibGFua19jb3VudGVyID0gJnIxMDBfZ2V0X3ZibGFua19jb3VudGVyLApAQCAtMzA3LDE4ICsyNDAsMTMgQEAKIC8qCiAgKiByczYwMC4KICAqLwotaW50IHJzNjAwX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotdm9pZCByczYwMF9lcnJhdGEoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotdm9pZCByczYwMF92cmFtX2luZm8oc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotaW50IHJzNjAwX21jX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotdm9pZCByczYwMF9tY19maW5pKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2V4dGVybiBpbnQgcnM2MDBfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitleHRlcm4gdm9pZCByczYwMF9maW5pKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2V4dGVybiBpbnQgcnM2MDBfc3VzcGVuZChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitleHRlcm4gaW50IHJzNjAwX3Jlc3VtZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiBpbnQgcnM2MDBfaXJxX3NldChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiBpbnQgcnM2MDBfaXJxX3Byb2Nlc3Moc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogdTMyIHJzNjAwX2dldF92YmxhbmtfY291bnRlcihzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgaW50IGNydGMpOwotaW50IHJzNjAwX2dhcnRfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci12b2lkIHJzNjAwX2dhcnRfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci1pbnQgcnM2MDBfZ2FydF9lbmFibGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotdm9pZCByczYwMF9nYXJ0X2Rpc2FibGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogdm9pZCByczYwMF9nYXJ0X3RsYl9mbHVzaChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiBpbnQgcnM2MDBfZ2FydF9zZXRfcGFnZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgaW50IGksIHVpbnQ2NF90IGFkZHIpOwogdWludDMyX3QgcnM2MDBfbWNfcnJlZyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgdWludDMyX3QgcmVnKTsKQEAgLTMyNiwyOCArMjU0LDE3IEBACiB2b2lkIHJzNjAwX2JhbmR3aWR0aF91cGRhdGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogc3RhdGljIHN0cnVjdCByYWRlb25fYXNpYyByczYwMF9hc2ljID0gewogCS5pbml0ID0gJnJzNjAwX2luaXQsCi0JLmVycmF0YSA9ICZyczYwMF9lcnJhdGEsCi0JLnZyYW1faW5mbyA9ICZyczYwMF92cmFtX2luZm8sCisJLmZpbmkgPSAmcnM2MDBfZmluaSwKKwkuc3VzcGVuZCA9ICZyczYwMF9zdXNwZW5kLAorCS5yZXN1bWUgPSAmcnM2MDBfcmVzdW1lLAogCS52Z2Ffc2V0X3N0YXRlID0gJnIxMDBfdmdhX3NldF9zdGF0ZSwKIAkuZ3B1X3Jlc2V0ID0gJnIzMDBfZ3B1X3Jlc2V0LAotCS5tY19pbml0ID0gJnJzNjAwX21jX2luaXQsCi0JLm1jX2ZpbmkgPSAmcnM2MDBfbWNfZmluaSwKLQkud2JfaW5pdCA9ICZyMTAwX3diX2luaXQsCi0JLndiX2ZpbmkgPSAmcjEwMF93Yl9maW5pLAotCS5nYXJ0X2luaXQgPSAmcnM2MDBfZ2FydF9pbml0LAotCS5nYXJ0X2ZpbmkgPSAmcnM2MDBfZ2FydF9maW5pLAotCS5nYXJ0X2VuYWJsZSA9ICZyczYwMF9nYXJ0X2VuYWJsZSwKLQkuZ2FydF9kaXNhYmxlID0gJnJzNjAwX2dhcnRfZGlzYWJsZSwKIAkuZ2FydF90bGJfZmx1c2ggPSAmcnM2MDBfZ2FydF90bGJfZmx1c2gsCiAJLmdhcnRfc2V0X3BhZ2UgPSAmcnM2MDBfZ2FydF9zZXRfcGFnZSwKLQkuY3BfaW5pdCA9ICZyMTAwX2NwX2luaXQsCi0JLmNwX2ZpbmkgPSAmcjEwMF9jcF9maW5pLAotCS5jcF9kaXNhYmxlID0gJnIxMDBfY3BfZGlzYWJsZSwKIAkuY3BfY29tbWl0ID0gJnIxMDBfY3BfY29tbWl0LAogCS5yaW5nX3N0YXJ0ID0gJnIzMDBfcmluZ19zdGFydCwKIAkucmluZ190ZXN0ID0gJnIxMDBfcmluZ190ZXN0LAogCS5yaW5nX2liX2V4ZWN1dGUgPSAmcjEwMF9yaW5nX2liX2V4ZWN1dGUsCi0JLmliX3Rlc3QgPSAmcjEwMF9pYl90ZXN0LAogCS5pcnFfc2V0ID0gJnJzNjAwX2lycV9zZXQsCiAJLmlycV9wcm9jZXNzID0gJnJzNjAwX2lycV9wcm9jZXNzLAogCS5nZXRfdmJsYW5rX2NvdW50ZXIgPSAmcnM2MDBfZ2V0X3ZibGFua19jb3VudGVyLApAQCAtMzY3LDM3ICsyODQsMjYgQEAKIC8qCiAgKiByczY5MCxyczc0MAogICovCi12b2lkIHJzNjkwX2VycmF0YShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci12b2lkIHJzNjkwX3ZyYW1faW5mbyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci1pbnQgcnM2OTBfbWNfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci12b2lkIHJzNjkwX21jX2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworaW50IHJzNjkwX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwordm9pZCByczY5MF9maW5pKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2ludCByczY5MF9yZXN1bWUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworaW50IHJzNjkwX3N1c3BlbmQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogdWludDMyX3QgcnM2OTBfbWNfcnJlZyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgdWludDMyX3QgcmVnKTsKIHZvaWQgcnM2OTBfbWNfd3JlZyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgdWludDMyX3QgcmVnLCB1aW50MzJfdCB2KTsKIHZvaWQgcnM2OTBfYmFuZHdpZHRoX3VwZGF0ZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiBzdGF0aWMgc3RydWN0IHJhZGVvbl9hc2ljIHJzNjkwX2FzaWMgPSB7Ci0JLmluaXQgPSAmcnM2MDBfaW5pdCwKLQkuZXJyYXRhID0gJnJzNjkwX2VycmF0YSwKLQkudnJhbV9pbmZvID0gJnJzNjkwX3ZyYW1faW5mbywKKwkuaW5pdCA9ICZyczY5MF9pbml0LAorCS5maW5pID0gJnJzNjkwX2ZpbmksCisJLnN1c3BlbmQgPSAmcnM2OTBfc3VzcGVuZCwKKwkucmVzdW1lID0gJnJzNjkwX3Jlc3VtZSwKIAkudmdhX3NldF9zdGF0ZSA9ICZyMTAwX3ZnYV9zZXRfc3RhdGUsCiAJLmdwdV9yZXNldCA9ICZyMzAwX2dwdV9yZXNldCwKLQkubWNfaW5pdCA9ICZyczY5MF9tY19pbml0LAotCS5tY19maW5pID0gJnJzNjkwX21jX2ZpbmksCi0JLndiX2luaXQgPSAmcjEwMF93Yl9pbml0LAotCS53Yl9maW5pID0gJnIxMDBfd2JfZmluaSwKLQkuZ2FydF9pbml0ID0gJnJzNDAwX2dhcnRfaW5pdCwKLQkuZ2FydF9maW5pID0gJnJzNDAwX2dhcnRfZmluaSwKLQkuZ2FydF9lbmFibGUgPSAmcnM0MDBfZ2FydF9lbmFibGUsCi0JLmdhcnRfZGlzYWJsZSA9ICZyczQwMF9nYXJ0X2Rpc2FibGUsCiAJLmdhcnRfdGxiX2ZsdXNoID0gJnJzNDAwX2dhcnRfdGxiX2ZsdXNoLAogCS5nYXJ0X3NldF9wYWdlID0gJnJzNDAwX2dhcnRfc2V0X3BhZ2UsCi0JLmNwX2luaXQgPSAmcjEwMF9jcF9pbml0LAotCS5jcF9maW5pID0gJnIxMDBfY3BfZmluaSwKLQkuY3BfZGlzYWJsZSA9ICZyMTAwX2NwX2Rpc2FibGUsCiAJLmNwX2NvbW1pdCA9ICZyMTAwX2NwX2NvbW1pdCwKIAkucmluZ19zdGFydCA9ICZyMzAwX3Jpbmdfc3RhcnQsCiAJLnJpbmdfdGVzdCA9ICZyMTAwX3JpbmdfdGVzdCwKIAkucmluZ19pYl9leGVjdXRlID0gJnIxMDBfcmluZ19pYl9leGVjdXRlLAotCS5pYl90ZXN0ID0gJnIxMDBfaWJfdGVzdCwKIAkuaXJxX3NldCA9ICZyczYwMF9pcnFfc2V0LAogCS5pcnFfcHJvY2VzcyA9ICZyczYwMF9pcnFfcHJvY2VzcywKIAkuZ2V0X3ZibGFua19jb3VudGVyID0gJnJzNjAwX2dldF92YmxhbmtfY291bnRlciwKQEAgLTQyMCw0MSArMzI2LDI5IEBACiAgKiBydjUxNQogICovCiBpbnQgcnY1MTVfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci12b2lkIHJ2NTE1X2VycmF0YShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci12b2lkIHJ2NTE1X3ZyYW1faW5mbyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Cit2b2lkIHJ2NTE1X2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogaW50IHJ2NTE1X2dwdV9yZXNldChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci1pbnQgcnY1MTVfbWNfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci12b2lkIHJ2NTE1X21jX2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogdWludDMyX3QgcnY1MTVfbWNfcnJlZyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgdWludDMyX3QgcmVnKTsKIHZvaWQgcnY1MTVfbWNfd3JlZyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgdWludDMyX3QgcmVnLCB1aW50MzJfdCB2KTsKIHZvaWQgcnY1MTVfcmluZ19zdGFydChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiB1aW50MzJfdCBydjUxNV9wY2llX3JyZWcoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHVpbnQzMl90IHJlZyk7CiB2b2lkIHJ2NTE1X3BjaWVfd3JlZyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgdWludDMyX3QgcmVnLCB1aW50MzJfdCB2KTsKIHZvaWQgcnY1MTVfYmFuZHdpZHRoX3VwZGF0ZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitpbnQgcnY1MTVfcmVzdW1lKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2ludCBydjUxNV9zdXNwZW5kKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIHN0YXRpYyBzdHJ1Y3QgcmFkZW9uX2FzaWMgcnY1MTVfYXNpYyA9IHsKIAkuaW5pdCA9ICZydjUxNV9pbml0LAotCS5lcnJhdGEgPSAmcnY1MTVfZXJyYXRhLAotCS52cmFtX2luZm8gPSAmcnY1MTVfdnJhbV9pbmZvLAorCS5maW5pID0gJnJ2NTE1X2ZpbmksCisJLnN1c3BlbmQgPSAmcnY1MTVfc3VzcGVuZCwKKwkucmVzdW1lID0gJnJ2NTE1X3Jlc3VtZSwKIAkudmdhX3NldF9zdGF0ZSA9ICZyMTAwX3ZnYV9zZXRfc3RhdGUsCiAJLmdwdV9yZXNldCA9ICZydjUxNV9ncHVfcmVzZXQsCi0JLm1jX2luaXQgPSAmcnY1MTVfbWNfaW5pdCwKLQkubWNfZmluaSA9ICZydjUxNV9tY19maW5pLAotCS53Yl9pbml0ID0gJnIxMDBfd2JfaW5pdCwKLQkud2JfZmluaSA9ICZyMTAwX3diX2ZpbmksCi0JLmdhcnRfaW5pdCA9ICZydjM3MF9wY2llX2dhcnRfaW5pdCwKLQkuZ2FydF9maW5pID0gJnJ2MzcwX3BjaWVfZ2FydF9maW5pLAotCS5nYXJ0X2VuYWJsZSA9ICZydjM3MF9wY2llX2dhcnRfZW5hYmxlLAotCS5nYXJ0X2Rpc2FibGUgPSAmcnYzNzBfcGNpZV9nYXJ0X2Rpc2FibGUsCiAJLmdhcnRfdGxiX2ZsdXNoID0gJnJ2MzcwX3BjaWVfZ2FydF90bGJfZmx1c2gsCiAJLmdhcnRfc2V0X3BhZ2UgPSAmcnYzNzBfcGNpZV9nYXJ0X3NldF9wYWdlLAotCS5jcF9pbml0ID0gJnIxMDBfY3BfaW5pdCwKLQkuY3BfZmluaSA9ICZyMTAwX2NwX2ZpbmksCi0JLmNwX2Rpc2FibGUgPSAmcjEwMF9jcF9kaXNhYmxlLAogCS5jcF9jb21taXQgPSAmcjEwMF9jcF9jb21taXQsCiAJLnJpbmdfc3RhcnQgPSAmcnY1MTVfcmluZ19zdGFydCwKIAkucmluZ190ZXN0ID0gJnIxMDBfcmluZ190ZXN0LAogCS5yaW5nX2liX2V4ZWN1dGUgPSAmcjEwMF9yaW5nX2liX2V4ZWN1dGUsCi0JLmliX3Rlc3QgPSAmcjEwMF9pYl90ZXN0LAogCS5pcnFfc2V0ID0gJnJzNjAwX2lycV9zZXQsCiAJLmlycV9wcm9jZXNzID0gJnJzNjAwX2lycV9wcm9jZXNzLAogCS5nZXRfdmJsYW5rX2NvdW50ZXIgPSAmcnM2MDBfZ2V0X3ZibGFua19jb3VudGVyLApAQCAtNDc2LDM1ICszNzAsMjEgQEAKIC8qCiAgKiByNTIwLHJ2NTMwLHJ2NTYwLHJ2NTcwLHI1ODAKICAqLwotdm9pZCByNTIwX2VycmF0YShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci12b2lkIHI1MjBfdnJhbV9pbmZvKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLWludCByNTIwX21jX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotdm9pZCByNTIwX21jX2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotdm9pZCByNTIwX2JhbmR3aWR0aF91cGRhdGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworaW50IHI1MjBfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitpbnQgcjUyMF9yZXN1bWUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogc3RhdGljIHN0cnVjdCByYWRlb25fYXNpYyByNTIwX2FzaWMgPSB7Ci0JLmluaXQgPSAmcnY1MTVfaW5pdCwKLQkuZXJyYXRhID0gJnI1MjBfZXJyYXRhLAotCS52cmFtX2luZm8gPSAmcjUyMF92cmFtX2luZm8sCisJLmluaXQgPSAmcjUyMF9pbml0LAorCS5maW5pID0gJnJ2NTE1X2ZpbmksCisJLnN1c3BlbmQgPSAmcnY1MTVfc3VzcGVuZCwKKwkucmVzdW1lID0gJnI1MjBfcmVzdW1lLAogCS52Z2Ffc2V0X3N0YXRlID0gJnIxMDBfdmdhX3NldF9zdGF0ZSwKIAkuZ3B1X3Jlc2V0ID0gJnJ2NTE1X2dwdV9yZXNldCwKLQkubWNfaW5pdCA9ICZyNTIwX21jX2luaXQsCi0JLm1jX2ZpbmkgPSAmcjUyMF9tY19maW5pLAotCS53Yl9pbml0ID0gJnIxMDBfd2JfaW5pdCwKLQkud2JfZmluaSA9ICZyMTAwX3diX2ZpbmksCi0JLmdhcnRfaW5pdCA9ICZydjM3MF9wY2llX2dhcnRfaW5pdCwKLQkuZ2FydF9maW5pID0gJnJ2MzcwX3BjaWVfZ2FydF9maW5pLAotCS5nYXJ0X2VuYWJsZSA9ICZydjM3MF9wY2llX2dhcnRfZW5hYmxlLAotCS5nYXJ0X2Rpc2FibGUgPSAmcnYzNzBfcGNpZV9nYXJ0X2Rpc2FibGUsCiAJLmdhcnRfdGxiX2ZsdXNoID0gJnJ2MzcwX3BjaWVfZ2FydF90bGJfZmx1c2gsCiAJLmdhcnRfc2V0X3BhZ2UgPSAmcnYzNzBfcGNpZV9nYXJ0X3NldF9wYWdlLAotCS5jcF9pbml0ID0gJnIxMDBfY3BfaW5pdCwKLQkuY3BfZmluaSA9ICZyMTAwX2NwX2ZpbmksCi0JLmNwX2Rpc2FibGUgPSAmcjEwMF9jcF9kaXNhYmxlLAogCS5jcF9jb21taXQgPSAmcjEwMF9jcF9jb21taXQsCiAJLnJpbmdfc3RhcnQgPSAmcnY1MTVfcmluZ19zdGFydCwKIAkucmluZ190ZXN0ID0gJnIxMDBfcmluZ190ZXN0LAogCS5yaW5nX2liX2V4ZWN1dGUgPSAmcjEwMF9yaW5nX2liX2V4ZWN1dGUsCi0JLmliX3Rlc3QgPSAmcjEwMF9pYl90ZXN0LAogCS5pcnFfc2V0ID0gJnJzNjAwX2lycV9zZXQsCiAJLmlycV9wcm9jZXNzID0gJnJzNjAwX2lycV9wcm9jZXNzLAogCS5nZXRfdmJsYW5rX2NvdW50ZXIgPSAmcnM2MDBfZ2V0X3ZibGFua19jb3VudGVyLApAQCAtNTE5LDcgKzM5OSw3IEBACiAJLnNldF9jbG9ja19nYXRpbmcgPSAmcmFkZW9uX2F0b21fc2V0X2Nsb2NrX2dhdGluZywKIAkuc2V0X3N1cmZhY2VfcmVnID0gcjEwMF9zZXRfc3VyZmFjZV9yZWcsCiAJLmNsZWFyX3N1cmZhY2VfcmVnID0gcjEwMF9jbGVhcl9zdXJmYWNlX3JlZywKLQkuYmFuZHdpZHRoX3VwZGF0ZSA9ICZyNTIwX2JhbmR3aWR0aF91cGRhdGUsCisJLmJhbmR3aWR0aF91cGRhdGUgPSAmcnY1MTVfYmFuZHdpZHRoX3VwZGF0ZSwKIH07CiAKIC8qCkBAIC01NTIsMzcgKzQzMiwyMyBAQAogCQkJIHVpbnQzMl90IG9mZnNldCwgdWludDMyX3Qgb2JqX3NpemUpOwogaW50IHI2MDBfY2xlYXJfc3VyZmFjZV9yZWcoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIGludCByZWcpOwogdm9pZCByNjAwX3JpbmdfaWJfZXhlY3V0ZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgc3RydWN0IHJhZGVvbl9pYiAqaWIpOwotaW50IHI2MDBfaWJfdGVzdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiBpbnQgcjYwMF9yaW5nX3Rlc3Qoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogaW50IHI2MDBfY29weV9ibGl0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LAogCQkgICB1aW50NjRfdCBzcmNfb2Zmc2V0LCB1aW50NjRfdCBkc3Rfb2Zmc2V0LAogCQkgICB1bnNpZ25lZCBudW1fcGFnZXMsIHN0cnVjdCByYWRlb25fZmVuY2UgKmZlbmNlKTsKIAogc3RhdGljIHN0cnVjdCByYWRlb25fYXNpYyByNjAwX2FzaWMgPSB7Ci0JLmVycmF0YSA9IE5VTEwsCiAJLmluaXQgPSAmcjYwMF9pbml0LAogCS5maW5pID0gJnI2MDBfZmluaSwKIAkuc3VzcGVuZCA9ICZyNjAwX3N1c3BlbmQsCiAJLnJlc3VtZSA9ICZyNjAwX3Jlc3VtZSwKIAkuY3BfY29tbWl0ID0gJnI2MDBfY3BfY29tbWl0LAotCS52cmFtX2luZm8gPSBOVUxMLAogCS52Z2Ffc2V0X3N0YXRlID0gJnI2MDBfdmdhX3NldF9zdGF0ZSwKIAkuZ3B1X3Jlc2V0ID0gJnI2MDBfZ3B1X3Jlc2V0LAotCS5tY19pbml0ID0gTlVMTCwKLQkubWNfZmluaSA9IE5VTEwsCi0JLndiX2luaXQgPSAmcjYwMF93Yl9pbml0LAotCS53Yl9maW5pID0gJnI2MDBfd2JfZmluaSwKLQkuZ2FydF9lbmFibGUgPSBOVUxMLAotCS5nYXJ0X2Rpc2FibGUgPSBOVUxMLAogCS5nYXJ0X3RsYl9mbHVzaCA9ICZyNjAwX3BjaWVfZ2FydF90bGJfZmx1c2gsCiAJLmdhcnRfc2V0X3BhZ2UgPSAmcnM2MDBfZ2FydF9zZXRfcGFnZSwKLQkuY3BfaW5pdCA9IE5VTEwsCi0JLmNwX2ZpbmkgPSBOVUxMLAotCS5jcF9kaXNhYmxlID0gTlVMTCwKLQkucmluZ19zdGFydCA9IE5VTEwsCiAJLnJpbmdfdGVzdCA9ICZyNjAwX3JpbmdfdGVzdCwKIAkucmluZ19pYl9leGVjdXRlID0gJnI2MDBfcmluZ19pYl9leGVjdXRlLAotCS5pYl90ZXN0ID0gJnI2MDBfaWJfdGVzdCwKIAkuaXJxX3NldCA9ICZyNjAwX2lycV9zZXQsCiAJLmlycV9wcm9jZXNzID0gJnI2MDBfaXJxX3Byb2Nlc3MsCiAJLmZlbmNlX3JpbmdfZW1pdCA9ICZyNjAwX2ZlbmNlX3JpbmdfZW1pdCwKQEAgLTU5Niw3ICs0NjIsNyBAQAogCS5zZXRfY2xvY2tfZ2F0aW5nID0gJnJhZGVvbl9hdG9tX3NldF9jbG9ja19nYXRpbmcsCiAJLnNldF9zdXJmYWNlX3JlZyA9IHI2MDBfc2V0X3N1cmZhY2VfcmVnLAogCS5jbGVhcl9zdXJmYWNlX3JlZyA9IHI2MDBfY2xlYXJfc3VyZmFjZV9yZWcsCi0JLmJhbmR3aWR0aF91cGRhdGUgPSAmcjUyMF9iYW5kd2lkdGhfdXBkYXRlLAorCS5iYW5kd2lkdGhfdXBkYXRlID0gJnJ2NTE1X2JhbmR3aWR0aF91cGRhdGUsCiB9OwogCiAvKgpAQCAtNjA5LDMwICs0NzUsMTcgQEAKIGludCBydjc3MF9ncHVfcmVzZXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogCiBzdGF0aWMgc3RydWN0IHJhZGVvbl9hc2ljIHJ2NzcwX2FzaWMgPSB7Ci0JLmVycmF0YSA9IE5VTEwsCiAJLmluaXQgPSAmcnY3NzBfaW5pdCwKIAkuZmluaSA9ICZydjc3MF9maW5pLAogCS5zdXNwZW5kID0gJnJ2NzcwX3N1c3BlbmQsCiAJLnJlc3VtZSA9ICZydjc3MF9yZXN1bWUsCiAJLmNwX2NvbW1pdCA9ICZyNjAwX2NwX2NvbW1pdCwKLQkudnJhbV9pbmZvID0gTlVMTCwKIAkuZ3B1X3Jlc2V0ID0gJnJ2NzcwX2dwdV9yZXNldCwKIAkudmdhX3NldF9zdGF0ZSA9ICZyNjAwX3ZnYV9zZXRfc3RhdGUsCi0JLm1jX2luaXQgPSBOVUxMLAotCS5tY19maW5pID0gTlVMTCwKLQkud2JfaW5pdCA9ICZyNjAwX3diX2luaXQsCi0JLndiX2ZpbmkgPSAmcjYwMF93Yl9maW5pLAotCS5nYXJ0X2VuYWJsZSA9IE5VTEwsCi0JLmdhcnRfZGlzYWJsZSA9IE5VTEwsCiAJLmdhcnRfdGxiX2ZsdXNoID0gJnI2MDBfcGNpZV9nYXJ0X3RsYl9mbHVzaCwKIAkuZ2FydF9zZXRfcGFnZSA9ICZyczYwMF9nYXJ0X3NldF9wYWdlLAotCS5jcF9pbml0ID0gTlVMTCwKLQkuY3BfZmluaSA9IE5VTEwsCi0JLmNwX2Rpc2FibGUgPSBOVUxMLAotCS5yaW5nX3N0YXJ0ID0gTlVMTCwKIAkucmluZ190ZXN0ID0gJnI2MDBfcmluZ190ZXN0LAogCS5yaW5nX2liX2V4ZWN1dGUgPSAmcjYwMF9yaW5nX2liX2V4ZWN1dGUsCi0JLmliX3Rlc3QgPSAmcjYwMF9pYl90ZXN0LAogCS5pcnFfc2V0ID0gJnI2MDBfaXJxX3NldCwKIAkuaXJxX3Byb2Nlc3MgPSAmcjYwMF9pcnFfcHJvY2VzcywKIAkuZmVuY2VfcmluZ19lbWl0ID0gJnI2MDBfZmVuY2VfcmluZ19lbWl0LApAQCAtNjQ2LDcgKzQ5OSw3IEBACiAJLnNldF9jbG9ja19nYXRpbmcgPSAmcmFkZW9uX2F0b21fc2V0X2Nsb2NrX2dhdGluZywKIAkuc2V0X3N1cmZhY2VfcmVnID0gcjYwMF9zZXRfc3VyZmFjZV9yZWcsCiAJLmNsZWFyX3N1cmZhY2VfcmVnID0gcjYwMF9jbGVhcl9zdXJmYWNlX3JlZywKLQkuYmFuZHdpZHRoX3VwZGF0ZSA9ICZyNTIwX2JhbmR3aWR0aF91cGRhdGUsCisJLmJhbmR3aWR0aF91cGRhdGUgPSAmcnY1MTVfYmFuZHdpZHRoX3VwZGF0ZSwKIH07CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYXRvbWJpb3MuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2F0b21iaW9zLmMKaW5kZXggNzQzNzQyMS4uNWI2YzA4YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYXRvbWJpb3MuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9hdG9tYmlvcy5jCkBAIC0yNzIsMTIgKzI3Miw5IEBACiAJCQkgICAgKGxlMTZfdG9fY3B1KHBhdGgtPnVzQ29ubk9iamVjdElkKSAmCiAJCQkgICAgIE9CSkVDVF9UWVBFX01BU0spID4+IE9CSkVDVF9UWVBFX1NISUZUOwogCi0JCQlpZiAoKGxlMTZfdG9fY3B1KHBhdGgtPnVzRGV2aWNlVGFnKSA9PQotCQkJICAgICBBVE9NX0RFVklDRV9UVjFfU1VQUE9SVCkKLQkJCSAgICB8fCAobGUxNl90b19jcHUocGF0aC0+dXNEZXZpY2VUYWcpID09Ci0JCQkJQVRPTV9ERVZJQ0VfVFYyX1NVUFBPUlQpCi0JCQkgICAgfHwgKGxlMTZfdG9fY3B1KHBhdGgtPnVzRGV2aWNlVGFnKSA9PQotCQkJCUFUT01fREVWSUNFX0NWX1NVUFBPUlQpKQorCQkJLyogVE9ETyBDViBzdXBwb3J0ICovCisJCQlpZiAobGUxNl90b19jcHUocGF0aC0+dXNEZXZpY2VUYWcpID09CisJCQkJQVRPTV9ERVZJQ0VfQ1ZfU1VQUE9SVCkKIAkJCQljb250aW51ZTsKIAogCQkJaWYgKChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9SUzc4MCkgJiYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Jpb3MuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Jpb3MuYwppbmRleCA5NmUzN2E2Li4zNGE5YjkxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9iaW9zLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYmlvcy5jCkBAIC0zMywxMiArMzMsNTAgQEAKIC8qCiAgKiBCSU9TLgogICovCisKKy8qIElmIHlvdSBib290IGFuIElHUCBib2FyZCB3aXRoIGEgZGlzY3JldGUgY2FyZCBhcyB0aGUgcHJpbWFyeSwKKyAqIHRoZSBJR1Agcm9tIGlzIG5vdCBhY2Nlc3NpYmxlIHZpYSB0aGUgcm9tIGJhciBhcyB0aGUgSUdQIHJvbSBpcworICogcGFydCBvZiB0aGUgc3lzdGVtIGJpb3MuICBPbiBib290LCB0aGUgc3lzdGVtIGJpb3MgcHV0cyBhCisgKiBjb3B5IG9mIHRoZSBpZ3Agcm9tIGF0IHRoZSBzdGFydCBvZiB2cmFtIGlmIGEgZGlzY3JldGUgY2FyZCBpcworICogcHJlc2VudC4KKyAqLworc3RhdGljIGJvb2wgaWdwX3JlYWRfYmlvc19mcm9tX3ZyYW0oc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJdWludDhfdCBfX2lvbWVtICpiaW9zOworCXJlc291cmNlX3NpemVfdCB2cmFtX2Jhc2U7CisJcmVzb3VyY2Vfc2l6ZV90IHNpemUgPSAyNTYgKiAxMDI0OyAvKiA/Pz8gKi8KKworCXJkZXYtPmJpb3MgPSBOVUxMOworCXZyYW1fYmFzZSA9IGRybV9nZXRfcmVzb3VyY2Vfc3RhcnQocmRldi0+ZGRldiwgMCk7CisJYmlvcyA9IGlvcmVtYXAodnJhbV9iYXNlLCBzaXplKTsKKwlpZiAoIWJpb3MpIHsKKwkJRFJNX0VSUk9SKCJVbmFibGUgdG8gbW1hcCB2cmFtXG4iKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCWlmIChzaXplID09IDAgfHwgYmlvc1swXSAhPSAweDU1IHx8IGJpb3NbMV0gIT0gMHhhYSkgeworCQlpb3VubWFwKGJpb3MpOworCQlEUk1fRVJST1IoImJhZCByb20gc2lnbmF0dXJlXG4iKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKwlyZGV2LT5iaW9zID0ga21hbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAocmRldi0+YmlvcyA9PSBOVUxMKSB7CisJCWlvdW5tYXAoYmlvcyk7CisJCURSTV9FUlJPUigia21hbGxvYyBmYWlsZWRcbiIpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCW1lbWNweShyZGV2LT5iaW9zLCBiaW9zLCBzaXplKTsKKwlpb3VubWFwKGJpb3MpOworCXJldHVybiB0cnVlOworfQorCiBzdGF0aWMgYm9vbCByYWRlb25fcmVhZF9iaW9zKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewogCXVpbnQ4X3QgX19pb21lbSAqYmlvczsKIAlzaXplX3Qgc2l6ZTsKIAogCXJkZXYtPmJpb3MgPSBOVUxMOworCS8qIFhYWDogc29tZSBjYXJkcyBtYXkgcmV0dXJuIDAgZm9yIHJvbSBzaXplPyBkZHggaGFzIGEgd29ya2Fyb3VuZCAqLwogCWJpb3MgPSBwY2lfbWFwX3JvbShyZGV2LT5wZGV2LCAmc2l6ZSk7CiAJaWYgKCFiaW9zKSB7CiAJCXJldHVybiBmYWxzZTsKQEAgLTM0MSw3ICszNzksOSBAQAogCiBzdGF0aWMgYm9vbCByYWRlb25fcmVhZF9kaXNhYmxlZF9iaW9zKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewotCWlmIChyZGV2LT5mYW1pbHkgPj0gQ0hJUF9SVjc3MCkKKwlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfSUdQKQorCQlyZXR1cm4gaWdwX3JlYWRfYmlvc19mcm9tX3ZyYW0ocmRldik7CisJZWxzZSBpZiAocmRldi0+ZmFtaWx5ID49IENISVBfUlY3NzApCiAJCXJldHVybiByNzAwX3JlYWRfZGlzYWJsZWRfYmlvcyhyZGV2KTsKIAllbHNlIGlmIChyZGV2LT5mYW1pbHkgPj0gQ0hJUF9SNjAwKQogCQlyZXR1cm4gcjYwMF9yZWFkX2Rpc2FibGVkX2Jpb3MocmRldik7CkBAIC0zNTYsNyArMzk2LDEyIEBACiAJYm9vbCByOwogCXVpbnQxNl90IHRtcDsKIAotCXIgPSByYWRlb25fcmVhZF9iaW9zKHJkZXYpOworCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19JR1ApIHsKKwkJciA9IGlncF9yZWFkX2Jpb3NfZnJvbV92cmFtKHJkZXYpOworCQlpZiAociA9PSBmYWxzZSkKKwkJCXIgPSByYWRlb25fcmVhZF9iaW9zKHJkZXYpOworCX0gZWxzZQorCQlyID0gcmFkZW9uX3JlYWRfYmlvcyhyZGV2KTsKIAlpZiAociA9PSBmYWxzZSkgewogCQlyID0gcmFkZW9uX3JlYWRfZGlzYWJsZWRfYmlvcyhyZGV2KTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jbG9ja3MuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Nsb2Nrcy5jCmluZGV4IDE1MmVlZjEuLmY1YzMyYTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Nsb2Nrcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Nsb2Nrcy5jCkBAIC00MTEsNyArNDExLDcgQEAKIAkJCQkJUjMwMF9QSVhDTEtfVFJBTlNfQUxXQVlTX09OYiB8CiAJCQkJCVIzMDBfUElYQ0xLX1RWT19BTFdBWVNfT05iIHwKIAkJCQkJUjMwMF9QMkcyQ0xLX0FMV0FZU19PTmIgfAotCQkJCQlSMzAwX1AyRzJDTEtfQUxXQVlTX09OYik7CisJCQkJCVIzMDBfUDJHMkNMS19EQUNfQUxXQVlTX09OYik7CiAJCQkJV1JFRzMyX1BMTChSQURFT05fUElYQ0xLU19DTlRMLCB0bXApOwogCQkJfSBlbHNlIGlmIChyZGV2LT5mYW1pbHkgPj0gQ0hJUF9SVjM1MCkgewogCQkJCXRtcCA9IFJSRUczMl9QTEwoUjMwMF9TQ0xLX0NOVEwyKTsKQEAgLTQ2NCw3ICs0NjQsNyBAQAogCQkJCQlSMzAwX1BJWENMS19UUkFOU19BTFdBWVNfT05iIHwKIAkJCQkJUjMwMF9QSVhDTEtfVFZPX0FMV0FZU19PTmIgfAogCQkJCQlSMzAwX1AyRzJDTEtfQUxXQVlTX09OYiB8Ci0JCQkJCVIzMDBfUDJHMkNMS19BTFdBWVNfT05iKTsKKwkJCQkJUjMwMF9QMkcyQ0xLX0RBQ19BTFdBWVNfT05iKTsKIAkJCQlXUkVHMzJfUExMKFJBREVPTl9QSVhDTEtTX0NOVEwsIHRtcCk7CiAKIAkJCQl0bXAgPSBSUkVHMzJfUExMKFJBREVPTl9NQ0xLX01JU0MpOwpAQCAtNjU0LDcgKzY1NCw3IEBACiAJCQkJIFIzMDBfUElYQ0xLX1RSQU5TX0FMV0FZU19PTmIgfAogCQkJCSBSMzAwX1BJWENMS19UVk9fQUxXQVlTX09OYiB8CiAJCQkJIFIzMDBfUDJHMkNMS19BTFdBWVNfT05iIHwKLQkJCQkgUjMwMF9QMkcyQ0xLX0FMV0FZU19PTmIgfAorCQkJCSBSMzAwX1AyRzJDTEtfREFDX0FMV0FZU19PTmIgfAogCQkJCSBSMzAwX0RJU1BfREFDX1BJWENMS19EQUMyX0JMQU5LX09GRik7CiAJCQlXUkVHMzJfUExMKFJBREVPTl9QSVhDTEtTX0NOVEwsIHRtcCk7CiAJCX0gZWxzZSBpZiAocmRldi0+ZmFtaWx5ID49IENISVBfUlYzNTApIHsKQEAgLTcwNSw3ICs3MDUsNyBAQAogCQkJCSBSMzAwX1BJWENMS19UUkFOU19BTFdBWVNfT05iIHwKIAkJCQkgUjMwMF9QSVhDTEtfVFZPX0FMV0FZU19PTmIgfAogCQkJCSBSMzAwX1AyRzJDTEtfQUxXQVlTX09OYiB8Ci0JCQkJIFIzMDBfUDJHMkNMS19BTFdBWVNfT05iIHwKKwkJCQkgUjMwMF9QMkcyQ0xLX0RBQ19BTFdBWVNfT05iIHwKIAkJCQkgUjMwMF9ESVNQX0RBQ19QSVhDTEtfREFDMl9CTEFOS19PRkYpOwogCQkJV1JFRzMyX1BMTChSQURFT05fUElYQ0xLU19DTlRMLCB0bXApOwogCQl9IGVsc2UgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY29ubmVjdG9ycy5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY29ubmVjdG9ycy5jCmluZGV4IGFmMWQ1NTEuLmUzNzZiZTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Nvbm5lY3RvcnMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jb25uZWN0b3JzLmMKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJkcm1QLmgiCiAjaW5jbHVkZSAiZHJtX2VkaWQuaCIKICNpbmNsdWRlICJkcm1fY3J0Y19oZWxwZXIuaCIKKyNpbmNsdWRlICJkcm1fZmJfaGVscGVyLmgiCiAjaW5jbHVkZSAicmFkZW9uX2RybS5oIgogI2luY2x1ZGUgInJhZGVvbi5oIgogI2luY2x1ZGUgImF0b20uaCIKQEAgLTI0NSw3ICsyNDYsNyBAQAogCQlpZiAoY29tbW9uX21vZGVzW2ldLncgPCAzMjAgfHwgY29tbW9uX21vZGVzW2ldLmggPCAyMDApCiAJCQljb250aW51ZTsKIAotCQltb2RlID0gZHJtX2N2dF9tb2RlKGRldiwgY29tbW9uX21vZGVzW2ldLncsIGNvbW1vbl9tb2Rlc1tpXS5oLCA2MCwgZmFsc2UsIGZhbHNlKTsKKwkJbW9kZSA9IGRybV9jdnRfbW9kZShkZXYsIGNvbW1vbl9tb2Rlc1tpXS53LCBjb21tb25fbW9kZXNbaV0uaCwgNjAsIGZhbHNlLCBmYWxzZSwgZmFsc2UpOwogCQlkcm1fbW9kZV9wcm9iZWRfYWRkKGNvbm5lY3RvciwgbW9kZSk7CiAJfQogfQpAQCAtNTU5LDcgKzU2MCw3IEBACiAJCXJhZGVvbl9hZGRfY29tbW9uX21vZGVzKGVuY29kZXIsIGNvbm5lY3Rvcik7CiAJZWxzZSB7CiAJCS8qIG9ubHkgODAweDYwMCBpcyBzdXBwb3J0ZWQgcmlnaHQgbm93IG9uIHByZS1hdml2byBjaGlwcyAqLwotCQl0dl9tb2RlID0gZHJtX2N2dF9tb2RlKGRldiwgODAwLCA2MDAsIDYwLCBmYWxzZSwgZmFsc2UpOworCQl0dl9tb2RlID0gZHJtX2N2dF9tb2RlKGRldiwgODAwLCA2MDAsIDYwLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTsKIAkJdHZfbW9kZS0+dHlwZSA9IERSTV9NT0RFX1RZUEVfRFJJVkVSIHwgRFJNX01PREVfVFlQRV9QUkVGRVJSRUQ7CiAJCWRybV9tb2RlX3Byb2JlZF9hZGQoY29ubmVjdG9yLCB0dl9tb2RlKTsKIAl9CkBAIC03NDMsNiArNzQ0LDE1IEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKK3N0YXRpYyB2b2lkIHJhZGVvbl9kdmlfZm9yY2Uoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKK3sKKwlzdHJ1Y3QgcmFkZW9uX2Nvbm5lY3RvciAqcmFkZW9uX2Nvbm5lY3RvciA9IHRvX3JhZGVvbl9jb25uZWN0b3IoY29ubmVjdG9yKTsKKwlpZiAoY29ubmVjdG9yLT5mb3JjZSA9PSBEUk1fRk9SQ0VfT04pCisJCXJhZGVvbl9jb25uZWN0b3ItPnVzZV9kaWdpdGFsID0gZmFsc2U7CisJaWYgKGNvbm5lY3Rvci0+Zm9yY2UgPT0gRFJNX0ZPUkNFX09OX0RJR0lUQUwpCisJCXJhZGVvbl9jb25uZWN0b3ItPnVzZV9kaWdpdGFsID0gdHJ1ZTsKK30KKwogc3RydWN0IGRybV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzIHJhZGVvbl9kdmlfY29ubmVjdG9yX2hlbHBlcl9mdW5jcyA9IHsKIAkuZ2V0X21vZGVzID0gcmFkZW9uX2R2aV9nZXRfbW9kZXMsCiAJLm1vZGVfdmFsaWQgPSByYWRlb25fdmdhX21vZGVfdmFsaWQsCkBAIC03NTUsNiArNzY1LDcgQEAKIAkuZmlsbF9tb2RlcyA9IGRybV9oZWxwZXJfcHJvYmVfc2luZ2xlX2Nvbm5lY3Rvcl9tb2RlcywKIAkuc2V0X3Byb3BlcnR5ID0gcmFkZW9uX2Nvbm5lY3Rvcl9zZXRfcHJvcGVydHksCiAJLmRlc3Ryb3kgPSByYWRlb25fY29ubmVjdG9yX2Rlc3Ryb3ksCisJLmZvcmNlID0gcmFkZW9uX2R2aV9mb3JjZSwKIH07CiAKIHZvaWQKQEAgLTc3MSw2ICs3ODIsNyBAQAogCXN0cnVjdCByYWRlb25fY29ubmVjdG9yICpyYWRlb25fY29ubmVjdG9yOwogCXN0cnVjdCByYWRlb25fY29ubmVjdG9yX2F0b21fZGlnICpyYWRlb25fZGlnX2Nvbm5lY3RvcjsKIAl1aW50MzJfdCBzdWJwaXhlbF9vcmRlciA9IFN1YlBpeGVsTm9uZTsKKwlpbnQgcmV0OwogCiAJLyogZml4bWUgLSB0di9jdi9kaW4gKi8KIAlpZiAoY29ubmVjdG9yX3R5cGUgPT0gRFJNX01PREVfQ09OTkVDVE9SX1Vua25vd24pCkBAIC03OTYsMjQgKzgwOCwzMCBAQAogCXN3aXRjaCAoY29ubmVjdG9yX3R5cGUpIHsKIAljYXNlIERSTV9NT0RFX0NPTk5FQ1RPUl9WR0E6CiAJCWRybV9jb25uZWN0b3JfaW5pdChkZXYsICZyYWRlb25fY29ubmVjdG9yLT5iYXNlLCAmcmFkZW9uX3ZnYV9jb25uZWN0b3JfZnVuY3MsIGNvbm5lY3Rvcl90eXBlKTsKLQkJZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfYWRkKCZyYWRlb25fY29ubmVjdG9yLT5iYXNlLCAmcmFkZW9uX3ZnYV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzKTsKKwkJcmV0ID0gZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfYWRkKCZyYWRlb25fY29ubmVjdG9yLT5iYXNlLCAmcmFkZW9uX3ZnYV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZmFpbGVkOwogCQlpZiAoaTJjX2J1cy0+dmFsaWQpIHsKIAkJCXJhZGVvbl9jb25uZWN0b3ItPmRkY19idXMgPSByYWRlb25faTJjX2NyZWF0ZShkZXYsIGkyY19idXMsICJWR0EiKTsKIAkJCWlmICghcmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cykKIAkJCQlnb3RvIGZhaWxlZDsKIAkJfQorCQlyYWRlb25fY29ubmVjdG9yLT5kYWNfbG9hZF9kZXRlY3QgPSB0cnVlOwogCQlkcm1fY29ubmVjdG9yX2F0dGFjaF9wcm9wZXJ0eSgmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwKIAkJCQkJICAgICAgcmRldi0+bW9kZV9pbmZvLmxvYWRfZGV0ZWN0X3Byb3BlcnR5LAogCQkJCQkgICAgICAxKTsKIAkJYnJlYWs7CiAJY2FzZSBEUk1fTU9ERV9DT05ORUNUT1JfRFZJQToKIAkJZHJtX2Nvbm5lY3Rvcl9pbml0KGRldiwgJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsICZyYWRlb25fdmdhX2Nvbm5lY3Rvcl9mdW5jcywgY29ubmVjdG9yX3R5cGUpOwotCQlkcm1fY29ubmVjdG9yX2hlbHBlcl9hZGQoJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsICZyYWRlb25fdmdhX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MpOworCQlyZXQgPSBkcm1fY29ubmVjdG9yX2hlbHBlcl9hZGQoJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsICZyYWRlb25fdmdhX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MpOworCQlpZiAocmV0KQorCQkJZ290byBmYWlsZWQ7CiAJCWlmIChpMmNfYnVzLT52YWxpZCkgewogCQkJcmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cyA9IHJhZGVvbl9pMmNfY3JlYXRlKGRldiwgaTJjX2J1cywgIkRWSSIpOwogCQkJaWYgKCFyYWRlb25fY29ubmVjdG9yLT5kZGNfYnVzKQogCQkJCWdvdG8gZmFpbGVkOwogCQl9CisJCXJhZGVvbl9jb25uZWN0b3ItPmRhY19sb2FkX2RldGVjdCA9IHRydWU7CiAJCWRybV9jb25uZWN0b3JfYXR0YWNoX3Byb3BlcnR5KCZyYWRlb25fY29ubmVjdG9yLT5iYXNlLAogCQkJCQkgICAgICByZGV2LT5tb2RlX2luZm8ubG9hZF9kZXRlY3RfcHJvcGVydHksCiAJCQkJCSAgICAgIDEpOwpAQCAtODI3LDcgKzg0NSw5IEBACiAJCXJhZGVvbl9kaWdfY29ubmVjdG9yLT5pZ3BfbGFuZV9pbmZvID0gaWdwX2xhbmVfaW5mbzsKIAkJcmFkZW9uX2Nvbm5lY3Rvci0+Y29uX3ByaXYgPSByYWRlb25fZGlnX2Nvbm5lY3RvcjsKIAkJZHJtX2Nvbm5lY3Rvcl9pbml0KGRldiwgJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsICZyYWRlb25fZHZpX2Nvbm5lY3Rvcl9mdW5jcywgY29ubmVjdG9yX3R5cGUpOwotCQlkcm1fY29ubmVjdG9yX2hlbHBlcl9hZGQoJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsICZyYWRlb25fZHZpX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MpOworCQlyZXQgPSBkcm1fY29ubmVjdG9yX2hlbHBlcl9hZGQoJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsICZyYWRlb25fZHZpX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MpOworCQlpZiAocmV0KQorCQkJZ290byBmYWlsZWQ7CiAJCWlmIChpMmNfYnVzLT52YWxpZCkgewogCQkJcmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cyA9IHJhZGVvbl9pMmNfY3JlYXRlKGRldiwgaTJjX2J1cywgIkRWSSIpOwogCQkJaWYgKCFyYWRlb25fY29ubmVjdG9yLT5kZGNfYnVzKQpAQCAtODM3LDYgKzg1Nyw3IEBACiAJCWRybV9jb25uZWN0b3JfYXR0YWNoX3Byb3BlcnR5KCZyYWRlb25fY29ubmVjdG9yLT5iYXNlLAogCQkJCQkgICAgICByZGV2LT5tb2RlX2luZm8uY29oZXJlbnRfbW9kZV9wcm9wZXJ0eSwKIAkJCQkJICAgICAgMSk7CisJCXJhZGVvbl9jb25uZWN0b3ItPmRhY19sb2FkX2RldGVjdCA9IHRydWU7CiAJCWRybV9jb25uZWN0b3JfYXR0YWNoX3Byb3BlcnR5KCZyYWRlb25fY29ubmVjdG9yLT5iYXNlLAogCQkJCQkgICAgICByZGV2LT5tb2RlX2luZm8ubG9hZF9kZXRlY3RfcHJvcGVydHksCiAJCQkJCSAgICAgIDEpOwpAQCAtODUwLDcgKzg3MSw5IEBACiAJCXJhZGVvbl9kaWdfY29ubmVjdG9yLT5pZ3BfbGFuZV9pbmZvID0gaWdwX2xhbmVfaW5mbzsKIAkJcmFkZW9uX2Nvbm5lY3Rvci0+Y29uX3ByaXYgPSByYWRlb25fZGlnX2Nvbm5lY3RvcjsKIAkJZHJtX2Nvbm5lY3Rvcl9pbml0KGRldiwgJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsICZyYWRlb25fZHZpX2Nvbm5lY3Rvcl9mdW5jcywgY29ubmVjdG9yX3R5cGUpOwotCQlkcm1fY29ubmVjdG9yX2hlbHBlcl9hZGQoJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsICZyYWRlb25fZHZpX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MpOworCQlyZXQgPSBkcm1fY29ubmVjdG9yX2hlbHBlcl9hZGQoJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsICZyYWRlb25fZHZpX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MpOworCQlpZiAocmV0KQorCQkJZ290byBmYWlsZWQ7CiAJCWlmIChpMmNfYnVzLT52YWxpZCkgewogCQkJcmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cyA9IHJhZGVvbl9pMmNfY3JlYXRlKGRldiwgaTJjX2J1cywgIkhETUkiKTsKIAkJCWlmICghcmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cykKQEAgLTg2OSw3ICs4OTIsOSBAQAogCQlyYWRlb25fZGlnX2Nvbm5lY3Rvci0+aWdwX2xhbmVfaW5mbyA9IGlncF9sYW5lX2luZm87CiAJCXJhZGVvbl9jb25uZWN0b3ItPmNvbl9wcml2ID0gcmFkZW9uX2RpZ19jb25uZWN0b3I7CiAJCWRybV9jb25uZWN0b3JfaW5pdChkZXYsICZyYWRlb25fY29ubmVjdG9yLT5iYXNlLCAmcmFkZW9uX2R2aV9jb25uZWN0b3JfZnVuY3MsIGNvbm5lY3Rvcl90eXBlKTsKLQkJZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfYWRkKCZyYWRlb25fY29ubmVjdG9yLT5iYXNlLCAmcmFkZW9uX2R2aV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzKTsKKwkJcmV0ID0gZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfYWRkKCZyYWRlb25fY29ubmVjdG9yLT5iYXNlLCAmcmFkZW9uX2R2aV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZmFpbGVkOwogCQlpZiAoaTJjX2J1cy0+dmFsaWQpIHsKIAkJCXJhZGVvbl9jb25uZWN0b3ItPmRkY19idXMgPSByYWRlb25faTJjX2NyZWF0ZShkZXYsIGkyY19idXMsICJEUCIpOwogCQkJaWYgKCFyYWRlb25fY29ubmVjdG9yLT5kZGNfYnVzKQpAQCAtODgyLDExICs5MDcsMTQgQEAKIAljYXNlIERSTV9NT0RFX0NPTk5FQ1RPUl85UGluRElOOgogCQlpZiAocmFkZW9uX3R2ID09IDEpIHsKIAkJCWRybV9jb25uZWN0b3JfaW5pdChkZXYsICZyYWRlb25fY29ubmVjdG9yLT5iYXNlLCAmcmFkZW9uX3R2X2Nvbm5lY3Rvcl9mdW5jcywgY29ubmVjdG9yX3R5cGUpOwotCQkJZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfYWRkKCZyYWRlb25fY29ubmVjdG9yLT5iYXNlLCAmcmFkZW9uX3R2X2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MpOworCQkJcmV0ID0gZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfYWRkKCZyYWRlb25fY29ubmVjdG9yLT5iYXNlLCAmcmFkZW9uX3R2X2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MpOworCQkJaWYgKHJldCkKKwkJCQlnb3RvIGZhaWxlZDsKKwkJCXJhZGVvbl9jb25uZWN0b3ItPmRhY19sb2FkX2RldGVjdCA9IHRydWU7CisJCQlkcm1fY29ubmVjdG9yX2F0dGFjaF9wcm9wZXJ0eSgmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwKKwkJCQkJCSAgICAgIHJkZXYtPm1vZGVfaW5mby5sb2FkX2RldGVjdF9wcm9wZXJ0eSwKKwkJCQkJCSAgICAgIDEpOwogCQl9Ci0JCWRybV9jb25uZWN0b3JfYXR0YWNoX3Byb3BlcnR5KCZyYWRlb25fY29ubmVjdG9yLT5iYXNlLAotCQkJCQkgICAgICByZGV2LT5tb2RlX2luZm8ubG9hZF9kZXRlY3RfcHJvcGVydHksCi0JCQkJCSAgICAgIDEpOwogCQlicmVhazsKIAljYXNlIERSTV9NT0RFX0NPTk5FQ1RPUl9MVkRTOgogCQlyYWRlb25fZGlnX2Nvbm5lY3RvciA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCByYWRlb25fY29ubmVjdG9yX2F0b21fZGlnKSwgR0ZQX0tFUk5FTCk7CkBAIC04OTYsNyArOTI0LDkgQEAKIAkJcmFkZW9uX2RpZ19jb25uZWN0b3ItPmlncF9sYW5lX2luZm8gPSBpZ3BfbGFuZV9pbmZvOwogCQlyYWRlb25fY29ubmVjdG9yLT5jb25fcHJpdiA9IHJhZGVvbl9kaWdfY29ubmVjdG9yOwogCQlkcm1fY29ubmVjdG9yX2luaXQoZGV2LCAmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwgJnJhZGVvbl9sdmRzX2Nvbm5lY3Rvcl9mdW5jcywgY29ubmVjdG9yX3R5cGUpOwotCQlkcm1fY29ubmVjdG9yX2hlbHBlcl9hZGQoJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsICZyYWRlb25fbHZkc19jb25uZWN0b3JfaGVscGVyX2Z1bmNzKTsKKwkJcmV0ID0gZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfYWRkKCZyYWRlb25fY29ubmVjdG9yLT5iYXNlLCAmcmFkZW9uX2x2ZHNfY29ubmVjdG9yX2hlbHBlcl9mdW5jcyk7CisJCWlmIChyZXQpCisJCQlnb3RvIGZhaWxlZDsKIAkJaWYgKGkyY19idXMtPnZhbGlkKSB7CiAJCQlyYWRlb25fY29ubmVjdG9yLT5kZGNfYnVzID0gcmFkZW9uX2kyY19jcmVhdGUoZGV2LCBpMmNfYnVzLCAiTFZEUyIpOwogCQkJaWYgKCFyYWRlb25fY29ubmVjdG9yLT5kZGNfYnVzKQpAQCAtOTMyLDYgKzk2Miw3IEBACiAJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcjsKIAlzdHJ1Y3QgcmFkZW9uX2Nvbm5lY3RvciAqcmFkZW9uX2Nvbm5lY3RvcjsKIAl1aW50MzJfdCBzdWJwaXhlbF9vcmRlciA9IFN1YlBpeGVsTm9uZTsKKwlpbnQgcmV0OwogCiAJLyogZml4bWUgLSB0di9jdi9kaW4gKi8KIAlpZiAoY29ubmVjdG9yX3R5cGUgPT0gRFJNX01PREVfQ09OTkVDVE9SX1Vua25vd24pCkBAIC05NTcsMjQgKzk4OCwzMCBAQAogCXN3aXRjaCAoY29ubmVjdG9yX3R5cGUpIHsKIAljYXNlIERSTV9NT0RFX0NPTk5FQ1RPUl9WR0E6CiAJCWRybV9jb25uZWN0b3JfaW5pdChkZXYsICZyYWRlb25fY29ubmVjdG9yLT5iYXNlLCAmcmFkZW9uX3ZnYV9jb25uZWN0b3JfZnVuY3MsIGNvbm5lY3Rvcl90eXBlKTsKLQkJZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfYWRkKCZyYWRlb25fY29ubmVjdG9yLT5iYXNlLCAmcmFkZW9uX3ZnYV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzKTsKKwkJcmV0ID0gZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfYWRkKCZyYWRlb25fY29ubmVjdG9yLT5iYXNlLCAmcmFkZW9uX3ZnYV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZmFpbGVkOwogCQlpZiAoaTJjX2J1cy0+dmFsaWQpIHsKIAkJCXJhZGVvbl9jb25uZWN0b3ItPmRkY19idXMgPSByYWRlb25faTJjX2NyZWF0ZShkZXYsIGkyY19idXMsICJWR0EiKTsKIAkJCWlmICghcmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cykKIAkJCQlnb3RvIGZhaWxlZDsKIAkJfQorCQlyYWRlb25fY29ubmVjdG9yLT5kYWNfbG9hZF9kZXRlY3QgPSB0cnVlOwogCQlkcm1fY29ubmVjdG9yX2F0dGFjaF9wcm9wZXJ0eSgmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwKIAkJCQkJICAgICAgcmRldi0+bW9kZV9pbmZvLmxvYWRfZGV0ZWN0X3Byb3BlcnR5LAogCQkJCQkgICAgICAxKTsKIAkJYnJlYWs7CiAJY2FzZSBEUk1fTU9ERV9DT05ORUNUT1JfRFZJQToKIAkJZHJtX2Nvbm5lY3Rvcl9pbml0KGRldiwgJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsICZyYWRlb25fdmdhX2Nvbm5lY3Rvcl9mdW5jcywgY29ubmVjdG9yX3R5cGUpOwotCQlkcm1fY29ubmVjdG9yX2hlbHBlcl9hZGQoJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsICZyYWRlb25fdmdhX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MpOworCQlyZXQgPSBkcm1fY29ubmVjdG9yX2hlbHBlcl9hZGQoJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsICZyYWRlb25fdmdhX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MpOworCQlpZiAocmV0KQorCQkJZ290byBmYWlsZWQ7CiAJCWlmIChpMmNfYnVzLT52YWxpZCkgewogCQkJcmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cyA9IHJhZGVvbl9pMmNfY3JlYXRlKGRldiwgaTJjX2J1cywgIkRWSSIpOwogCQkJaWYgKCFyYWRlb25fY29ubmVjdG9yLT5kZGNfYnVzKQogCQkJCWdvdG8gZmFpbGVkOwogCQl9CisJCXJhZGVvbl9jb25uZWN0b3ItPmRhY19sb2FkX2RldGVjdCA9IHRydWU7CiAJCWRybV9jb25uZWN0b3JfYXR0YWNoX3Byb3BlcnR5KCZyYWRlb25fY29ubmVjdG9yLT5iYXNlLAogCQkJCQkgICAgICByZGV2LT5tb2RlX2luZm8ubG9hZF9kZXRlY3RfcHJvcGVydHksCiAJCQkJCSAgICAgIDEpOwpAQCAtOTgyLDExICsxMDE5LDE0IEBACiAJY2FzZSBEUk1fTU9ERV9DT05ORUNUT1JfRFZJSToKIAljYXNlIERSTV9NT0RFX0NPTk5FQ1RPUl9EVklEOgogCQlkcm1fY29ubmVjdG9yX2luaXQoZGV2LCAmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwgJnJhZGVvbl9kdmlfY29ubmVjdG9yX2Z1bmNzLCBjb25uZWN0b3JfdHlwZSk7Ci0JCWRybV9jb25uZWN0b3JfaGVscGVyX2FkZCgmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwgJnJhZGVvbl9kdmlfY29ubmVjdG9yX2hlbHBlcl9mdW5jcyk7CisJCXJldCA9IGRybV9jb25uZWN0b3JfaGVscGVyX2FkZCgmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwgJnJhZGVvbl9kdmlfY29ubmVjdG9yX2hlbHBlcl9mdW5jcyk7CisJCWlmIChyZXQpCisJCQlnb3RvIGZhaWxlZDsKIAkJaWYgKGkyY19idXMtPnZhbGlkKSB7CiAJCQlyYWRlb25fY29ubmVjdG9yLT5kZGNfYnVzID0gcmFkZW9uX2kyY19jcmVhdGUoZGV2LCBpMmNfYnVzLCAiRFZJIik7CiAJCQlpZiAoIXJhZGVvbl9jb25uZWN0b3ItPmRkY19idXMpCiAJCQkJZ290byBmYWlsZWQ7CisJCQlyYWRlb25fY29ubmVjdG9yLT5kYWNfbG9hZF9kZXRlY3QgPSB0cnVlOwogCQkJZHJtX2Nvbm5lY3Rvcl9hdHRhY2hfcHJvcGVydHkoJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsCiAJCQkJCQkgICAgICByZGV2LT5tb2RlX2luZm8ubG9hZF9kZXRlY3RfcHJvcGVydHksCiAJCQkJCQkgICAgICAxKTsKQEAgLTk5OCw3ICsxMDM4LDEwIEBACiAJY2FzZSBEUk1fTU9ERV9DT05ORUNUT1JfOVBpbkRJTjoKIAkJaWYgKHJhZGVvbl90diA9PSAxKSB7CiAJCQlkcm1fY29ubmVjdG9yX2luaXQoZGV2LCAmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwgJnJhZGVvbl90dl9jb25uZWN0b3JfZnVuY3MsIGNvbm5lY3Rvcl90eXBlKTsKLQkJCWRybV9jb25uZWN0b3JfaGVscGVyX2FkZCgmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwgJnJhZGVvbl90dl9jb25uZWN0b3JfaGVscGVyX2Z1bmNzKTsKKwkJCXJldCA9IGRybV9jb25uZWN0b3JfaGVscGVyX2FkZCgmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwgJnJhZGVvbl90dl9jb25uZWN0b3JfaGVscGVyX2Z1bmNzKTsKKwkJCWlmIChyZXQpCisJCQkJZ290byBmYWlsZWQ7CisJCQlyYWRlb25fY29ubmVjdG9yLT5kYWNfbG9hZF9kZXRlY3QgPSB0cnVlOwogCQkJZHJtX2Nvbm5lY3Rvcl9hdHRhY2hfcHJvcGVydHkoJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsCiAJCQkJCQkgICAgICByZGV2LT5tb2RlX2luZm8ubG9hZF9kZXRlY3RfcHJvcGVydHksCiAJCQkJCQkgICAgICAxKTsKQEAgLTEwMDYsNyArMTA0OSw5IEBACiAJCWJyZWFrOwogCWNhc2UgRFJNX01PREVfQ09OTkVDVE9SX0xWRFM6CiAJCWRybV9jb25uZWN0b3JfaW5pdChkZXYsICZyYWRlb25fY29ubmVjdG9yLT5iYXNlLCAmcmFkZW9uX2x2ZHNfY29ubmVjdG9yX2Z1bmNzLCBjb25uZWN0b3JfdHlwZSk7Ci0JCWRybV9jb25uZWN0b3JfaGVscGVyX2FkZCgmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwgJnJhZGVvbl9sdmRzX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MpOworCQlyZXQgPSBkcm1fY29ubmVjdG9yX2hlbHBlcl9hZGQoJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsICZyYWRlb25fbHZkc19jb25uZWN0b3JfaGVscGVyX2Z1bmNzKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZmFpbGVkOwogCQlpZiAoaTJjX2J1cy0+dmFsaWQpIHsKIAkJCXJhZGVvbl9jb25uZWN0b3ItPmRkY19idXMgPSByYWRlb25faTJjX2NyZWF0ZShkZXYsIGkyY19idXMsICJMVkRTIik7CiAJCQlpZiAoIXJhZGVvbl9jb25uZWN0b3ItPmRkY19idXMpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jcy5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY3MuYwppbmRleCAxMmY1OTkwLi41YWIyY2Y5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2NzLmMKQEAgLTE0MiwxNSArMTQyLDMxIEBACiAJCX0KIAogCQlwLT5jaHVua3NbaV0ubGVuZ3RoX2R3ID0gdXNlcl9jaHVuay5sZW5ndGhfZHc7Ci0JCWNkYXRhID0gKHVpbnQzMl90ICopKHVuc2lnbmVkIGxvbmcpdXNlcl9jaHVuay5jaHVua19kYXRhOworCQlwLT5jaHVua3NbaV0udXNlcl9wdHIgPSAodm9pZCBfX3VzZXIgKikodW5zaWduZWQgbG9uZyl1c2VyX2NodW5rLmNodW5rX2RhdGE7CiAKLQkJc2l6ZSA9IHAtPmNodW5rc1tpXS5sZW5ndGhfZHcgKiBzaXplb2YodWludDMyX3QpOwotCQlwLT5jaHVua3NbaV0ua2RhdGEgPSBrbWFsbG9jKHNpemUsIEdGUF9LRVJORUwpOwotCQlpZiAocC0+Y2h1bmtzW2ldLmtkYXRhID09IE5VTEwpIHsKLQkJCXJldHVybiAtRU5PTUVNOwotCQl9Ci0JCWlmIChEUk1fQ09QWV9GUk9NX1VTRVIocC0+Y2h1bmtzW2ldLmtkYXRhLCBjZGF0YSwgc2l6ZSkpIHsKLQkJCXJldHVybiAtRUZBVUxUOworCQljZGF0YSA9ICh1aW50MzJfdCAqKSh1bnNpZ25lZCBsb25nKXVzZXJfY2h1bmsuY2h1bmtfZGF0YTsKKwkJaWYgKHAtPmNodW5rc1tpXS5jaHVua19pZCAhPSBSQURFT05fQ0hVTktfSURfSUIpIHsKKwkJCXNpemUgPSBwLT5jaHVua3NbaV0ubGVuZ3RoX2R3ICogc2l6ZW9mKHVpbnQzMl90KTsKKwkJCXAtPmNodW5rc1tpXS5rZGF0YSA9IGttYWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CisJCQlpZiAocC0+Y2h1bmtzW2ldLmtkYXRhID09IE5VTEwpIHsKKwkJCQlyZXR1cm4gLUVOT01FTTsKKwkJCX0KKwkJCWlmIChEUk1fQ09QWV9GUk9NX1VTRVIocC0+Y2h1bmtzW2ldLmtkYXRhLAorCQkJCQkgICAgICAgcC0+Y2h1bmtzW2ldLnVzZXJfcHRyLCBzaXplKSkgeworCQkJCXJldHVybiAtRUZBVUxUOworCQkJfQorCQl9IGVsc2UgeworCQkJcC0+Y2h1bmtzW2ldLmtwYWdlWzBdID0ga21hbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwpOworCQkJcC0+Y2h1bmtzW2ldLmtwYWdlWzFdID0ga21hbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwpOworCQkJaWYgKHAtPmNodW5rc1tpXS5rcGFnZVswXSA9PSBOVUxMIHx8IHAtPmNodW5rc1tpXS5rcGFnZVsxXSA9PSBOVUxMKSB7CisJCQkJa2ZyZWUocC0+Y2h1bmtzW2ldLmtwYWdlWzBdKTsKKwkJCQlrZnJlZShwLT5jaHVua3NbaV0ua3BhZ2VbMV0pOworCQkJCXJldHVybiAtRU5PTUVNOworCQkJfQorCQkJcC0+Y2h1bmtzW2ldLmtwYWdlX2lkeFswXSA9IC0xOworCQkJcC0+Y2h1bmtzW2ldLmtwYWdlX2lkeFsxXSA9IC0xOworCQkJcC0+Y2h1bmtzW2ldLmxhc3RfY29waWVkX3BhZ2UgPSAtMTsKKwkJCXAtPmNodW5rc1tpXS5sYXN0X3BhZ2VfaW5kZXggPSAoKHAtPmNodW5rc1tpXS5sZW5ndGhfZHcgKiA0KSAtIDEpIC8gUEFHRV9TSVpFOwogCQl9CiAJfQogCWlmIChwLT5jaHVua3NbcC0+Y2h1bmtfaWJfaWR4XS5sZW5ndGhfZHcgPiAoMTYgKiAxMDI0KSkgewpAQCAtMTkwLDYgKzIwNiw4IEBACiAJa2ZyZWUocGFyc2VyLT5yZWxvY3NfcHRyKTsKIAlmb3IgKGkgPSAwOyBpIDwgcGFyc2VyLT5uY2h1bmtzOyBpKyspIHsKIAkJa2ZyZWUocGFyc2VyLT5jaHVua3NbaV0ua2RhdGEpOworCQlrZnJlZShwYXJzZXItPmNodW5rc1tpXS5rcGFnZVswXSk7CisJCWtmcmVlKHBhcnNlci0+Y2h1bmtzW2ldLmtwYWdlWzFdKTsKIAl9CiAJa2ZyZWUocGFyc2VyLT5jaHVua3MpOwogCWtmcmVlKHBhcnNlci0+Y2h1bmtzX2FycmF5KTsKQEAgLTIzOCw4ICsyNTYsMTQgQEAKIAkgKiB1bmNhY2hlZCkuICovCiAJaWJfY2h1bmsgPSAmcGFyc2VyLmNodW5rc1twYXJzZXIuY2h1bmtfaWJfaWR4XTsKIAlwYXJzZXIuaWItPmxlbmd0aF9kdyA9IGliX2NodW5rLT5sZW5ndGhfZHc7Ci0JbWVtY3B5KCh2b2lkICopcGFyc2VyLmliLT5wdHIsIGliX2NodW5rLT5rZGF0YSwgaWJfY2h1bmstPmxlbmd0aF9kdyo0KTsKIAlyID0gcmFkZW9uX2NzX3BhcnNlKCZwYXJzZXIpOworCWlmIChyIHx8IHBhcnNlci5wYXJzZXJfZXJyb3IpIHsKKwkJRFJNX0VSUk9SKCJJbnZhbGlkIGNvbW1hbmQgc3RyZWFtICFcbiIpOworCQlyYWRlb25fY3NfcGFyc2VyX2ZpbmkoJnBhcnNlciwgcik7CisJCW11dGV4X3VubG9jaygmcmRldi0+Y3NfbXV0ZXgpOworCQlyZXR1cm4gcjsKKwl9CisJciA9IHJhZGVvbl9jc19maW5pc2hfcGFnZXMoJnBhcnNlcik7CiAJaWYgKHIpIHsKIAkJRFJNX0VSUk9SKCJJbnZhbGlkIGNvbW1hbmQgc3RyZWFtICFcbiIpOwogCQlyYWRlb25fY3NfcGFyc2VyX2ZpbmkoJnBhcnNlciwgcik7CkBAIC0yNTQsMyArMjc4LDY0IEBACiAJbXV0ZXhfdW5sb2NrKCZyZGV2LT5jc19tdXRleCk7CiAJcmV0dXJuIHI7CiB9CisKK2ludCByYWRlb25fY3NfZmluaXNoX3BhZ2VzKHN0cnVjdCByYWRlb25fY3NfcGFyc2VyICpwKQoreworCXN0cnVjdCByYWRlb25fY3NfY2h1bmsgKmliYyA9ICZwLT5jaHVua3NbcC0+Y2h1bmtfaWJfaWR4XTsKKwlpbnQgaTsKKwlpbnQgc2l6ZSA9IFBBR0VfU0laRTsKKworCWZvciAoaSA9IGliYy0+bGFzdF9jb3BpZWRfcGFnZSArIDE7IGkgPD0gaWJjLT5sYXN0X3BhZ2VfaW5kZXg7IGkrKykgeworCQlpZiAoaSA9PSBpYmMtPmxhc3RfcGFnZV9pbmRleCkgeworCQkJc2l6ZSA9IChpYmMtPmxlbmd0aF9kdyAqIDQpICUgUEFHRV9TSVpFOworCQkJaWYgKHNpemUgPT0gMCkKKwkJCQlzaXplID0gUEFHRV9TSVpFOworCQl9CisJCQorCQlpZiAoRFJNX0NPUFlfRlJPTV9VU0VSKHAtPmliLT5wdHIgKyAoaSAqIChQQUdFX1NJWkUvNCkpLAorCQkJCSAgICAgICBpYmMtPnVzZXJfcHRyICsgKGkgKiBQQUdFX1NJWkUpLAorCQkJCSAgICAgICBzaXplKSkKKwkJCXJldHVybiAtRUZBVUxUOworCX0KKwlyZXR1cm4gMDsKK30KKworaW50IHJhZGVvbl9jc191cGRhdGVfcGFnZXMoc3RydWN0IHJhZGVvbl9jc19wYXJzZXIgKnAsIGludCBwZ19pZHgpCit7CisJaW50IG5ld19wYWdlOworCXN0cnVjdCByYWRlb25fY3NfY2h1bmsgKmliYyA9ICZwLT5jaHVua3NbcC0+Y2h1bmtfaWJfaWR4XTsKKwlpbnQgaTsKKwlpbnQgc2l6ZSA9IFBBR0VfU0laRTsKKworCWZvciAoaSA9IGliYy0+bGFzdF9jb3BpZWRfcGFnZSArIDE7IGkgPCBwZ19pZHg7IGkrKykgeworCQlpZiAoRFJNX0NPUFlfRlJPTV9VU0VSKHAtPmliLT5wdHIgKyAoaSAqIChQQUdFX1NJWkUvNCkpLAorCQkJCSAgICAgICBpYmMtPnVzZXJfcHRyICsgKGkgKiBQQUdFX1NJWkUpLAorCQkJCSAgICAgICBQQUdFX1NJWkUpKSB7CisJCQlwLT5wYXJzZXJfZXJyb3IgPSAtRUZBVUxUOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwluZXdfcGFnZSA9IGliYy0+a3BhZ2VfaWR4WzBdIDwgaWJjLT5rcGFnZV9pZHhbMV0gPyAwIDogMTsKKworCWlmIChwZ19pZHggPT0gaWJjLT5sYXN0X3BhZ2VfaW5kZXgpIHsKKwkJc2l6ZSA9IChpYmMtPmxlbmd0aF9kdyAqIDQpICUgUEFHRV9TSVpFOworCQkJaWYgKHNpemUgPT0gMCkKKwkJCQlzaXplID0gUEFHRV9TSVpFOworCX0KKworCWlmIChEUk1fQ09QWV9GUk9NX1VTRVIoaWJjLT5rcGFnZVtuZXdfcGFnZV0sCisJCQkgICAgICAgaWJjLT51c2VyX3B0ciArIChwZ19pZHggKiBQQUdFX1NJWkUpLAorCQkJICAgICAgIHNpemUpKSB7CisJCXAtPnBhcnNlcl9lcnJvciA9IC1FRkFVTFQ7CisJCXJldHVybiAwOworCX0KKworCS8qIGNvcHkgdG8gSUIgaGVyZSAqLworCW1lbWNweSgodm9pZCAqKShwLT5pYi0+cHRyKyhwZ19pZHgqKFBBR0VfU0laRS80KSkpLCBpYmMtPmtwYWdlW25ld19wYWdlXSwgc2l6ZSk7CisKKwlpYmMtPmxhc3RfY29waWVkX3BhZ2UgPSBwZ19pZHg7CisJaWJjLT5rcGFnZV9pZHhbbmV3X3BhZ2VdID0gcGdfaWR4OworCisJcmV0dXJuIG5ld19wYWdlOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZGV2aWNlLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kZXZpY2UuYwppbmRleCBkYWY1ZGI3Li5kZjk4ODE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kZXZpY2UuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kZXZpY2UuYwpAQCAtMzIyLDEwICszMjIsNiBAQAogCWNhc2UgQ0hJUF9SVjM4MDoKIAkJcmRldi0+YXNpYyA9ICZyMzAwX2FzaWM7CiAJCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19QQ0lFKSB7Ci0JCQlyZGV2LT5hc2ljLT5nYXJ0X2luaXQgPSAmcnYzNzBfcGNpZV9nYXJ0X2luaXQ7Ci0JCQlyZGV2LT5hc2ljLT5nYXJ0X2ZpbmkgPSAmcnYzNzBfcGNpZV9nYXJ0X2Zpbmk7Ci0JCQlyZGV2LT5hc2ljLT5nYXJ0X2VuYWJsZSA9ICZydjM3MF9wY2llX2dhcnRfZW5hYmxlOwotCQkJcmRldi0+YXNpYy0+Z2FydF9kaXNhYmxlID0gJnJ2MzcwX3BjaWVfZ2FydF9kaXNhYmxlOwogCQkJcmRldi0+YXNpYy0+Z2FydF90bGJfZmx1c2ggPSAmcnYzNzBfcGNpZV9nYXJ0X3RsYl9mbHVzaDsKIAkJCXJkZXYtPmFzaWMtPmdhcnRfc2V0X3BhZ2UgPSAmcnYzNzBfcGNpZV9nYXJ0X3NldF9wYWdlOwogCQl9CkBAIC00ODUsNyArNDgxLDYgQEAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgcmFkZW9uX3ZnYV9zZXRfZGVjb2RlKHZvaWQgKmNvb2tpZSwgYm9vbCBzdGF0ZSkKIHsKIAlzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiA9IGNvb2tpZTsKLQogCXJhZGVvbl92Z2Ffc2V0X3N0YXRlKHJkZXYsIHN0YXRlKTsKIAlpZiAoc3RhdGUpCiAJCXJldHVybiBWR0FfUlNSQ19MRUdBQ1lfSU8gfCBWR0FfUlNSQ19MRUdBQ1lfTUVNIHwKQEAgLTQ5Myw2ICs0ODgsMjkgQEAKIAllbHNlCiAJCXJldHVybiBWR0FfUlNSQ19OT1JNQUxfSU8gfCBWR0FfUlNSQ19OT1JNQUxfTUVNOwogfQorCit2b2lkIHJhZGVvbl9hZ3BfZGlzYWJsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwlyZGV2LT5mbGFncyAmPSB+UkFERU9OX0lTX0FHUDsKKwlpZiAocmRldi0+ZmFtaWx5ID49IENISVBfUjYwMCkgeworCQlEUk1fSU5GTygiRm9yY2luZyBBR1AgdG8gUENJRSBtb2RlXG4iKTsKKwkJcmRldi0+ZmxhZ3MgfD0gUkFERU9OX0lTX1BDSUU7CisJfSBlbHNlIGlmIChyZGV2LT5mYW1pbHkgPj0gQ0hJUF9SVjUxNSB8fAorCQkJcmRldi0+ZmFtaWx5ID09IENISVBfUlYzODAgfHwKKwkJCXJkZXYtPmZhbWlseSA9PSBDSElQX1JWNDEwIHx8CisJCQlyZGV2LT5mYW1pbHkgPT0gQ0hJUF9SNDIzKSB7CisJCURSTV9JTkZPKCJGb3JjaW5nIEFHUCB0byBQQ0lFIG1vZGVcbiIpOworCQlyZGV2LT5mbGFncyB8PSBSQURFT05fSVNfUENJRTsKKwkJcmRldi0+YXNpYy0+Z2FydF90bGJfZmx1c2ggPSAmcnYzNzBfcGNpZV9nYXJ0X3RsYl9mbHVzaDsKKwkJcmRldi0+YXNpYy0+Z2FydF9zZXRfcGFnZSA9ICZydjM3MF9wY2llX2dhcnRfc2V0X3BhZ2U7CisJfSBlbHNlIHsKKwkJRFJNX0lORk8oIkZvcmNpbmcgQUdQIHRvIFBDSSBtb2RlXG4iKTsKKwkJcmRldi0+ZmxhZ3MgfD0gUkFERU9OX0lTX1BDSTsKKwkJcmRldi0+YXNpYy0+Z2FydF90bGJfZmx1c2ggPSAmcjEwMF9wY2lfZ2FydF90bGJfZmx1c2g7CisJCXJkZXYtPmFzaWMtPmdhcnRfc2V0X3BhZ2UgPSAmcjEwMF9wY2lfZ2FydF9zZXRfcGFnZTsKKwl9Cit9CisKIC8qCiAgKiBSYWRlb24gZGV2aWNlLgogICovCkBAIC01MzEsMjkgKzU0OSw3IEBACiAJfQogCiAJaWYgKHJhZGVvbl9hZ3Btb2RlID09IC0xKSB7Ci0JCXJkZXYtPmZsYWdzICY9IH5SQURFT05fSVNfQUdQOwotCQlpZiAocmRldi0+ZmFtaWx5ID49IENISVBfUlY1MTUgfHwKLQkJICAgIHJkZXYtPmZhbWlseSA9PSBDSElQX1JWMzgwIHx8Ci0JCSAgICByZGV2LT5mYW1pbHkgPT0gQ0hJUF9SVjQxMCB8fAotCQkgICAgcmRldi0+ZmFtaWx5ID09IENISVBfUjQyMykgewotCQkJRFJNX0lORk8oIkZvcmNpbmcgQUdQIHRvIFBDSUUgbW9kZVxuIik7Ci0JCQlyZGV2LT5mbGFncyB8PSBSQURFT05fSVNfUENJRTsKLQkJCXJkZXYtPmFzaWMtPmdhcnRfaW5pdCA9ICZydjM3MF9wY2llX2dhcnRfaW5pdDsKLQkJCXJkZXYtPmFzaWMtPmdhcnRfZmluaSA9ICZydjM3MF9wY2llX2dhcnRfZmluaTsKLQkJCXJkZXYtPmFzaWMtPmdhcnRfZW5hYmxlID0gJnJ2MzcwX3BjaWVfZ2FydF9lbmFibGU7Ci0JCQlyZGV2LT5hc2ljLT5nYXJ0X2Rpc2FibGUgPSAmcnYzNzBfcGNpZV9nYXJ0X2Rpc2FibGU7Ci0JCQlyZGV2LT5hc2ljLT5nYXJ0X3RsYl9mbHVzaCA9ICZydjM3MF9wY2llX2dhcnRfdGxiX2ZsdXNoOwotCQkJcmRldi0+YXNpYy0+Z2FydF9zZXRfcGFnZSA9ICZydjM3MF9wY2llX2dhcnRfc2V0X3BhZ2U7Ci0JCX0gZWxzZSB7Ci0JCQlEUk1fSU5GTygiRm9yY2luZyBBR1AgdG8gUENJIG1vZGVcbiIpOwotCQkJcmRldi0+ZmxhZ3MgfD0gUkFERU9OX0lTX1BDSTsKLQkJCXJkZXYtPmFzaWMtPmdhcnRfaW5pdCA9ICZyMTAwX3BjaV9nYXJ0X2luaXQ7Ci0JCQlyZGV2LT5hc2ljLT5nYXJ0X2ZpbmkgPSAmcjEwMF9wY2lfZ2FydF9maW5pOwotCQkJcmRldi0+YXNpYy0+Z2FydF9lbmFibGUgPSAmcjEwMF9wY2lfZ2FydF9lbmFibGU7Ci0JCQlyZGV2LT5hc2ljLT5nYXJ0X2Rpc2FibGUgPSAmcjEwMF9wY2lfZ2FydF9kaXNhYmxlOwotCQkJcmRldi0+YXNpYy0+Z2FydF90bGJfZmx1c2ggPSAmcjEwMF9wY2lfZ2FydF90bGJfZmx1c2g7Ci0JCQlyZGV2LT5hc2ljLT5nYXJ0X3NldF9wYWdlID0gJnIxMDBfcGNpX2dhcnRfc2V0X3BhZ2U7Ci0JCX0KKwkJcmFkZW9uX2FncF9kaXNhYmxlKHJkZXYpOwogCX0KIAogCS8qIHNldCBETUEgbWFzayArIG5lZWRfZG1hMzIgZmxhZ3MuCkBAIC01ODUsMTExICs1ODEsMjYgQEAKIAlEUk1fSU5GTygicmVnaXN0ZXIgbW1pbyBiYXNlOiAweCUwOFhcbiIsICh1aW50MzJfdClyZGV2LT5ybW1pb19iYXNlKTsKIAlEUk1fSU5GTygicmVnaXN0ZXIgbW1pbyBzaXplOiAldVxuIiwgKHVuc2lnbmVkKXJkZXYtPnJtbWlvX3NpemUpOwogCi0JcmRldi0+bmV3X2luaXRfcGF0aCA9IGZhbHNlOwotCXIgPSByYWRlb25faW5pdChyZGV2KTsKLQlpZiAocikgewotCQlyZXR1cm4gcjsKLQl9Ci0KIAkvKiBpZiB3ZSBoYXZlID4gMSBWR0EgY2FyZHMsIHRoZW4gZGlzYWJsZSB0aGUgcmFkZW9uIFZHQSByZXNvdXJjZXMgKi8KLQlyID0gdmdhX2NsaWVudF9yZWdpc3RlcihyZGV2LT5wZGV2LCByZGV2LCBOVUxMLCByYWRlb25fdmdhX3NldF9kZWNvZGUpOwotCWlmIChyKSB7Ci0JCXJldHVybiAtRUlOVkFMOworCS8qIHRoaXMgd2lsbCBmYWlsIGZvciBjYXJkcyB0aGF0IGFyZW4ndCBWR0EgY2xhc3MgZGV2aWNlcywganVzdAorCSAqIGlnbm9yZSBpdCAqLworCXZnYV9jbGllbnRfcmVnaXN0ZXIocmRldi0+cGRldiwgcmRldiwgTlVMTCwgcmFkZW9uX3ZnYV9zZXRfZGVjb2RlKTsKKworCXIgPSByYWRlb25faW5pdChyZGV2KTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisKKwlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfQUdQICYmICFyZGV2LT5hY2NlbF93b3JraW5nKSB7CisJCS8qIEFjY2VsZXJhdGlvbiBub3Qgd29ya2luZyBvbiBBR1AgY2FyZCB0cnkgYWdhaW4KKwkJICogd2l0aCBmYWxsYmFjayB0byBQQ0kgb3IgUENJRSBHQVJUCisJCSAqLworCQlyYWRlb25fZ3B1X3Jlc2V0KHJkZXYpOworCQlyYWRlb25fZmluaShyZGV2KTsKKwkJcmFkZW9uX2FncF9kaXNhYmxlKHJkZXYpOworCQlyID0gcmFkZW9uX2luaXQocmRldik7CisJCWlmIChyKQorCQkJcmV0dXJuIHI7CiAJfQotCi0JaWYgKCFyZGV2LT5uZXdfaW5pdF9wYXRoKSB7Ci0JCS8qIFNldHVwIGVycmF0YSBmbGFncyAqLwotCQlyYWRlb25fZXJyYXRhKHJkZXYpOwotCQkvKiBJbml0aWFsaXplIHNjcmF0Y2ggcmVnaXN0ZXJzICovCi0JCXJhZGVvbl9zY3JhdGNoX2luaXQocmRldik7Ci0JCS8qIEluaXRpYWxpemUgc3VyZmFjZSByZWdpc3RlcnMgKi8KLQkJcmFkZW9uX3N1cmZhY2VfaW5pdChyZGV2KTsKLQotCQkvKiBCSU9TKi8KLQkJaWYgKCFyYWRlb25fZ2V0X2Jpb3MocmRldikpIHsKLQkJCWlmIChBU0lDX0lTX0FWSVZPKHJkZXYpKQotCQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JCWlmIChyZGV2LT5pc19hdG9tX2Jpb3MpIHsKLQkJCXIgPSByYWRlb25fYXRvbWJpb3NfaW5pdChyZGV2KTsKLQkJCWlmIChyKSB7Ci0JCQkJcmV0dXJuIHI7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQlyID0gcmFkZW9uX2NvbWJpb3NfaW5pdChyZGV2KTsKLQkJCWlmIChyKSB7Ci0JCQkJcmV0dXJuIHI7Ci0JCQl9Ci0JCX0KLQkJLyogUmVzZXQgZ3B1IGJlZm9yZSBwb3N0aW5nIG90aGVyd2lzZSBBVE9NIHdpbGwgZW50ZXIgaW5maW5pdGUgbG9vcCAqLwotCQlpZiAocmFkZW9uX2dwdV9yZXNldChyZGV2KSkgewotCQkJLyogRklYTUU6IHdoYXQgZG8gd2Ugd2FudCB0byBkbyBoZXJlID8gKi8KLQkJfQotCQkvKiBjaGVjayBpZiBjYXJkcyBhcmUgcG9zdGVkIG9yIG5vdCAqLwotCQlpZiAoIXJhZGVvbl9jYXJkX3Bvc3RlZChyZGV2KSAmJiByZGV2LT5iaW9zKSB7Ci0JCQlEUk1fSU5GTygiR1BVIG5vdCBwb3N0ZWQuIHBvc3Rpbmcgbm93Li4uXG4iKTsKLQkJCWlmIChyZGV2LT5pc19hdG9tX2Jpb3MpIHsKLQkJCQlhdG9tX2FzaWNfaW5pdChyZGV2LT5tb2RlX2luZm8uYXRvbV9jb250ZXh0KTsKLQkJCX0gZWxzZSB7Ci0JCQkJcmFkZW9uX2NvbWJpb3NfYXNpY19pbml0KHJkZXYtPmRkZXYpOwotCQkJfQotCQl9Ci0JCS8qIEdldCBjbG9jayAmIHZyYW0gaW5mb3JtYXRpb24gKi8KLQkJcmFkZW9uX2dldF9jbG9ja19pbmZvKHJkZXYtPmRkZXYpOwotCQlyYWRlb25fdnJhbV9pbmZvKHJkZXYpOwotCQkvKiBJbml0aWFsaXplIGNsb2NrcyAqLwotCQlyID0gcmFkZW9uX2Nsb2Nrc19pbml0KHJkZXYpOwotCQlpZiAocikgewotCQkJcmV0dXJuIHI7Ci0JCX0KLQotCQkvKiBJbml0aWFsaXplIG1lbW9yeSBjb250cm9sbGVyIChhbHNvIHRlc3QgQUdQKSAqLwotCQlyID0gcmFkZW9uX21jX2luaXQocmRldik7Ci0JCWlmIChyKSB7Ci0JCQlyZXR1cm4gcjsKLQkJfQotCQkvKiBGZW5jZSBkcml2ZXIgKi8KLQkJciA9IHJhZGVvbl9mZW5jZV9kcml2ZXJfaW5pdChyZGV2KTsKLQkJaWYgKHIpIHsKLQkJCXJldHVybiByOwotCQl9Ci0JCXIgPSByYWRlb25faXJxX2ttc19pbml0KHJkZXYpOwotCQlpZiAocikgewotCQkJcmV0dXJuIHI7Ci0JCX0KLQkJLyogTWVtb3J5IG1hbmFnZXIgKi8KLQkJciA9IHJhZGVvbl9vYmplY3RfaW5pdChyZGV2KTsKLQkJaWYgKHIpIHsKLQkJCXJldHVybiByOwotCQl9Ci0JCXIgPSByYWRlb25fZ3B1X2dhcnRfaW5pdChyZGV2KTsKLQkJaWYgKHIpCi0JCQlyZXR1cm4gcjsKLQkJLyogSW5pdGlhbGl6ZSBHQVJUIChpbml0aWFsaXplIGFmdGVyIFRUTSBzbyB3ZSBjYW4gYWxsb2NhdGUKLQkJICogbWVtb3J5IHRocm91Z2ggVFRNIGJ1dCBmaW5hbGl6ZSBhZnRlciBUVE0pICovCi0JCXIgPSByYWRlb25fZ2FydF9lbmFibGUocmRldik7Ci0JCWlmIChyKQotCQkJcmV0dXJuIDA7Ci0JCQlyID0gcmFkZW9uX2dlbV9pbml0KHJkZXYpOwotCQlpZiAocikKLQkJCXJldHVybiAwOwotCi0JCS8qIDFNIHJpbmcgYnVmZmVyICovCi0JCXIgPSByYWRlb25fY3BfaW5pdChyZGV2LCAxMDI0ICogMTAyNCk7Ci0JCWlmIChyKQotCQkJcmV0dXJuIDA7Ci0JCXIgPSByYWRlb25fd2JfaW5pdChyZGV2KTsKLQkJaWYgKHIpCi0JCQlEUk1fRVJST1IoInJhZGVvbjogZmFpbGxlZCBpbml0aWFsaXppbmcgV0IgKCVkKS5cbiIsIHIpOwotCQlyID0gcmFkZW9uX2liX3Bvb2xfaW5pdChyZGV2KTsKLQkJaWYgKHIpCi0JCQlyZXR1cm4gMDsKLQkJciA9IHJhZGVvbl9pYl90ZXN0KHJkZXYpOwotCQlpZiAocikKLQkJCXJldHVybiAwOwotCQlyZGV2LT5hY2NlbF93b3JraW5nID0gdHJ1ZTsKLQl9Ci0JRFJNX0lORk8oInJhZGVvbjoga2VybmVsIG1vZGVzZXR0aW5nIHN1Y2Nlc3NmdWxseSBpbml0aWFsaXplZC5cbiIpOwogCWlmIChyYWRlb25fdGVzdGluZykgewogCQlyYWRlb25fdGVzdF9tb3ZlcyhyZGV2KTsKIAl9CkBAIC03MDMsMzIgKzYxNCw4IEBACiB7CiAJRFJNX0lORk8oInJhZGVvbjogZmluaXNoaW5nIGRldmljZS5cbiIpOwogCXJkZXYtPnNodXRkb3duID0gdHJ1ZTsKLQkvKiBPcmRlciBtYXR0ZXIgc28gYmVjYXJlZnVsbCBpZiB5b3UgcmVhcnJhbmdlIGFueXRoaW5ncyAqLwotCWlmICghcmRldi0+bmV3X2luaXRfcGF0aCkgewotCQlyYWRlb25faWJfcG9vbF9maW5pKHJkZXYpOwotCQlyYWRlb25fY3BfZmluaShyZGV2KTsKLQkJcmFkZW9uX3diX2ZpbmkocmRldik7Ci0JCXJhZGVvbl9ncHVfZ2FydF9maW5pKHJkZXYpOwotCQlyYWRlb25fZ2VtX2ZpbmkocmRldik7Ci0JCXJhZGVvbl9tY19maW5pKHJkZXYpOwotI2lmIF9fT1NfSEFTX0FHUAotCQlyYWRlb25fYWdwX2ZpbmkocmRldik7Ci0jZW5kaWYKLQkJcmFkZW9uX2lycV9rbXNfZmluaShyZGV2KTsKLQkJdmdhX2NsaWVudF9yZWdpc3RlcihyZGV2LT5wZGV2LCBOVUxMLCBOVUxMLCBOVUxMKTsKLQkJcmFkZW9uX2ZlbmNlX2RyaXZlcl9maW5pKHJkZXYpOwotCQlyYWRlb25fY2xvY2tzX2ZpbmkocmRldik7Ci0JCXJhZGVvbl9vYmplY3RfZmluaShyZGV2KTsKLQkJaWYgKHJkZXYtPmlzX2F0b21fYmlvcykgewotCQkJcmFkZW9uX2F0b21iaW9zX2ZpbmkocmRldik7Ci0JCX0gZWxzZSB7Ci0JCQlyYWRlb25fY29tYmlvc19maW5pKHJkZXYpOwotCQl9Ci0JCWtmcmVlKHJkZXYtPmJpb3MpOwotCQlyZGV2LT5iaW9zID0gTlVMTDsKLQl9IGVsc2UgewotCQlyYWRlb25fZmluaShyZGV2KTsKLQl9CisJcmFkZW9uX2ZpbmkocmRldik7CisJdmdhX2NsaWVudF9yZWdpc3RlcihyZGV2LT5wZGV2LCBOVUxMLCBOVUxMLCBOVUxMKTsKIAlpb3VubWFwKHJkZXYtPnJtbWlvKTsKIAlyZGV2LT5ybW1pbyA9IE5VTEw7CiB9CkBAIC03NjgsMTQgKzY1NSw3IEBACiAKIAlyYWRlb25fc2F2ZV9iaW9zX3NjcmF0Y2hfcmVncyhyZGV2KTsKIAotCWlmICghcmRldi0+bmV3X2luaXRfcGF0aCkgewotCQlyYWRlb25fY3BfZGlzYWJsZShyZGV2KTsKLQkJcmFkZW9uX2dhcnRfZGlzYWJsZShyZGV2KTsKLQkJcmRldi0+aXJxLnN3X2ludCA9IGZhbHNlOwotCQlyYWRlb25faXJxX3NldChyZGV2KTsKLQl9IGVsc2UgewotCQlyYWRlb25fc3VzcGVuZChyZGV2KTsKLQl9CisJcmFkZW9uX3N1c3BlbmQocmRldik7CiAJLyogZXZpY3QgcmVtYWluaW5nIHZyYW0gbWVtb3J5ICovCiAJcmFkZW9uX29iamVjdF9ldmljdF92cmFtKHJkZXYpOwogCkBAIC03OTQsNyArNjc0LDYgQEAKIGludCByYWRlb25fcmVzdW1lX2ttcyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewogCXN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQlpbnQgcjsKIAogCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKIAlwY2lfc2V0X3Bvd2VyX3N0YXRlKGRldi0+cGRldiwgUENJX0QwKTsKQEAgLTgwNCw0MyArNjgzLDcgQEAKIAkJcmV0dXJuIC0xOwogCX0KIAlwY2lfc2V0X21hc3RlcihkZXYtPnBkZXYpOwotCS8qIFJlc2V0IGdwdSBiZWZvcmUgcG9zdGluZyBvdGhlcndpc2UgQVRPTSB3aWxsIGVudGVyIGluZmluaXRlIGxvb3AgKi8KLQlpZiAoIXJkZXYtPm5ld19pbml0X3BhdGgpIHsKLQkJaWYgKHJhZGVvbl9ncHVfcmVzZXQocmRldikpIHsKLQkJCS8qIEZJWE1FOiB3aGF0IGRvIHdlIHdhbnQgdG8gZG8gaGVyZSA/ICovCi0JCX0KLQkJLyogcG9zdCBjYXJkICovCi0JCWlmIChyZGV2LT5pc19hdG9tX2Jpb3MpIHsKLQkJCWF0b21fYXNpY19pbml0KHJkZXYtPm1vZGVfaW5mby5hdG9tX2NvbnRleHQpOwotCQl9IGVsc2UgewotCQkJcmFkZW9uX2NvbWJpb3NfYXNpY19pbml0KHJkZXYtPmRkZXYpOwotCQl9Ci0JCS8qIEluaXRpYWxpemUgY2xvY2tzICovCi0JCXIgPSByYWRlb25fY2xvY2tzX2luaXQocmRldik7Ci0JCWlmIChyKSB7Ci0JCQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7Ci0JCQlyZXR1cm4gcjsKLQkJfQotCQkvKiBFbmFibGUgSVJRICovCi0JCXJkZXYtPmlycS5zd19pbnQgPSB0cnVlOwotCQlyYWRlb25faXJxX3NldChyZGV2KTsKLQkJLyogSW5pdGlhbGl6ZSBHUFUgTWVtb3J5IENvbnRyb2xsZXIgKi8KLQkJciA9IHJhZGVvbl9tY19pbml0KHJkZXYpOwotCQlpZiAocikgewotCQkJZ290byBvdXQ7Ci0JCX0KLQkJciA9IHJhZGVvbl9nYXJ0X2VuYWJsZShyZGV2KTsKLQkJaWYgKHIpIHsKLQkJCWdvdG8gb3V0OwotCQl9Ci0JCXIgPSByYWRlb25fY3BfaW5pdChyZGV2LCByZGV2LT5jcC5yaW5nX3NpemUpOwotCQlpZiAocikgewotCQkJZ290byBvdXQ7Ci0JCX0KLQl9IGVsc2UgewotCQlyYWRlb25fcmVzdW1lKHJkZXYpOwotCX0KLW91dDoKKwlyYWRlb25fcmVzdW1lKHJkZXYpOwogCXJhZGVvbl9yZXN0b3JlX2Jpb3Nfc2NyYXRjaF9yZWdzKHJkZXYpOwogCWZiX3NldF9zdXNwZW5kKHJkZXYtPmZiZGV2X2luZm8sIDApOwogCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Rpc3BsYXkuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Rpc3BsYXkuYwppbmRleCA1ZDgxNDFiLi4zNjU1ZDkxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kaXNwbGF5LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZGlzcGxheS5jCkBAIC0xMDYsMjQgKzEwNiwzMyBAQAogCQlsZWdhY3lfY3J0Y19sb2FkX2x1dChjcnRjKTsKIH0KIAotLyoqIFNldHMgdGhlIGNvbG9yIHJhbXBzIG9uIGJlaGFsZiBvZiBSYW5kUiAqLworLyoqIFNldHMgdGhlIGNvbG9yIHJhbXBzIG9uIGJlaGFsZiBvZiBmYmNvbiAqLwogdm9pZCByYWRlb25fY3J0Y19mYl9nYW1tYV9zZXQoc3RydWN0IGRybV9jcnRjICpjcnRjLCB1MTYgcmVkLCB1MTYgZ3JlZW4sCiAJCQkgICAgICB1MTYgYmx1ZSwgaW50IHJlZ25vKQogewogCXN0cnVjdCByYWRlb25fY3J0YyAqcmFkZW9uX2NydGMgPSB0b19yYWRlb25fY3J0YyhjcnRjKTsKIAotCWlmIChyZWdubyA9PSAwKQotCQlEUk1fREVCVUcoImdhbW1hIHNldCAlZFxuIiwgcmFkZW9uX2NydGMtPmNydGNfaWQpOwogCXJhZGVvbl9jcnRjLT5sdXRfcltyZWdub10gPSByZWQgPj4gNjsKIAlyYWRlb25fY3J0Yy0+bHV0X2dbcmVnbm9dID0gZ3JlZW4gPj4gNjsKIAlyYWRlb25fY3J0Yy0+bHV0X2JbcmVnbm9dID0gYmx1ZSA+PiA2OwogfQogCisvKiogR2V0cyB0aGUgY29sb3IgcmFtcHMgb24gYmVoYWxmIG9mIGZiY29uICovCit2b2lkIHJhZGVvbl9jcnRjX2ZiX2dhbW1hX2dldChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsIHUxNiAqcmVkLCB1MTYgKmdyZWVuLAorCQkJICAgICAgdTE2ICpibHVlLCBpbnQgcmVnbm8pCit7CisJc3RydWN0IHJhZGVvbl9jcnRjICpyYWRlb25fY3J0YyA9IHRvX3JhZGVvbl9jcnRjKGNydGMpOworCisJKnJlZCA9IHJhZGVvbl9jcnRjLT5sdXRfcltyZWdub10gPDwgNjsKKwkqZ3JlZW4gPSByYWRlb25fY3J0Yy0+bHV0X2dbcmVnbm9dIDw8IDY7CisJKmJsdWUgPSByYWRlb25fY3J0Yy0+bHV0X2JbcmVnbm9dIDw8IDY7Cit9CisKIHN0YXRpYyB2b2lkIHJhZGVvbl9jcnRjX2dhbW1hX3NldChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsIHUxNiAqcmVkLCB1MTYgKmdyZWVuLAogCQkJCSAgdTE2ICpibHVlLCB1aW50MzJfdCBzaXplKQogewogCXN0cnVjdCByYWRlb25fY3J0YyAqcmFkZW9uX2NydGMgPSB0b19yYWRlb25fY3J0YyhjcnRjKTsKLQlpbnQgaSwgajsKKwlpbnQgaTsKIAogCWlmIChzaXplICE9IDI1NikgewogCQlyZXR1cm47CkBAIC0xMzIsMjMgKzE0MSwxMSBAQAogCQlyZXR1cm47CiAJfQogCi0JaWYgKGNydGMtPmZiLT5kZXB0aCA9PSAxNikgewotCQlmb3IgKGkgPSAwOyBpIDwgNjQ7IGkrKykgewotCQkJaWYgKGkgPD0gMzEpIHsKLQkJCQlmb3IgKGogPSAwOyBqIDwgODsgaisrKSB7Ci0JCQkJCXJhZGVvbl9jcnRjLT5sdXRfcltpICogOCArIGpdID0gcmVkW2ldID4+IDY7Ci0JCQkJCXJhZGVvbl9jcnRjLT5sdXRfYltpICogOCArIGpdID0gYmx1ZVtpXSA+PiA2OwotCQkJCX0KLQkJCX0KLQkJCWZvciAoaiA9IDA7IGogPCA0OyBqKyspCi0JCQkJcmFkZW9uX2NydGMtPmx1dF9nW2kgKiA0ICsgal0gPSBncmVlbltpXSA+PiA2OwotCQl9Ci0JfSBlbHNlIHsKLQkJZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKSB7Ci0JCQlyYWRlb25fY3J0Yy0+bHV0X3JbaV0gPSByZWRbaV0gPj4gNjsKLQkJCXJhZGVvbl9jcnRjLT5sdXRfZ1tpXSA9IGdyZWVuW2ldID4+IDY7Ci0JCQlyYWRlb25fY3J0Yy0+bHV0X2JbaV0gPSBibHVlW2ldID4+IDY7Ci0JCX0KKwkvKiB1c2Vyc3BhY2UgcGFsZXR0ZXMgYXJlIGFsd2F5cyBjb3JyZWN0IGFzIGlzICovCisJZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKSB7CisJCXJhZGVvbl9jcnRjLT5sdXRfcltpXSA9IHJlZFtpXSA+PiA2OworCQlyYWRlb25fY3J0Yy0+bHV0X2dbaV0gPSBncmVlbltpXSA+PiA2OworCQlyYWRlb25fY3J0Yy0+bHV0X2JbaV0gPSBibHVlW2ldID4+IDY7CiAJfQogCiAJcmFkZW9uX2NydGNfbG9hZF9sdXQoY3J0Yyk7CkBAIC03MjQsNyArNzIxLDExIEBACiAJaWYgKHJldCkgewogCQlyZXR1cm4gcmV0OwogCX0KLQkvKiBhbGxvY2F0ZSBjcnRjcyAtIFRPRE8gc2luZ2xlIGNydGMgKi8KKworCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9TSU5HTEVfQ1JUQykKKwkJbnVtX2NydGMgPSAxOworCisJLyogYWxsb2NhdGUgY3J0Y3MgKi8KIAlmb3IgKGkgPSAwOyBpIDwgbnVtX2NydGM7IGkrKykgewogCQlyYWRlb25fY3J0Y19pbml0KHJkZXYtPmRkZXYsIGkpOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZHJ2LmMKaW5kZXggNTBmY2U0OS4uN2Y1MGZiOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZHJ2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZHJ2LmMKQEAgLTYyLDkgKzYyLDYgQEAKIGludCByYWRlb25fZHJpdmVyX2lycV9wb3N0aW5zdGFsbF9rbXMoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiB2b2lkIHJhZGVvbl9kcml2ZXJfaXJxX3VuaW5zdGFsbF9rbXMoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiBpcnFyZXR1cm5fdCByYWRlb25fZHJpdmVyX2lycV9oYW5kbGVyX2ttcyhEUk1fSVJRX0FSR1MpOwotaW50IHJhZGVvbl9tYXN0ZXJfY3JlYXRlX2ttcyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX21hc3RlciAqbWFzdGVyKTsKLXZvaWQgcmFkZW9uX21hc3Rlcl9kZXN0cm95X2ttcyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAotCQkJICAgICAgIHN0cnVjdCBkcm1fbWFzdGVyICptYXN0ZXIpOwogaW50IHJhZGVvbl9kbWFfaW9jdGxfa21zKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCiAJCQkgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOwogaW50IHJhZGVvbl9nZW1fb2JqZWN0X2luaXQoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopOwpAQCAtMjYwLDggKzI1Nyw2IEBACiAJLmdldF92YmxhbmtfY291bnRlciA9IHJhZGVvbl9nZXRfdmJsYW5rX2NvdW50ZXJfa21zLAogCS5lbmFibGVfdmJsYW5rID0gcmFkZW9uX2VuYWJsZV92Ymxhbmtfa21zLAogCS5kaXNhYmxlX3ZibGFuayA9IHJhZGVvbl9kaXNhYmxlX3ZibGFua19rbXMsCi0JLm1hc3Rlcl9jcmVhdGUgPSByYWRlb25fbWFzdGVyX2NyZWF0ZV9rbXMsCi0JLm1hc3Rlcl9kZXN0cm95ID0gcmFkZW9uX21hc3Rlcl9kZXN0cm95X2ttcywKICNpZiBkZWZpbmVkKENPTkZJR19ERUJVR19GUykKIAkuZGVidWdmc19pbml0ID0gcmFkZW9uX2RlYnVnZnNfaW5pdCwKIAkuZGVidWdmc19jbGVhbnVwID0gcmFkZW9uX2RlYnVnZnNfY2xlYW51cCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2VuY29kZXJzLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9lbmNvZGVycy5jCmluZGV4IDYyMTY0NjcuLmE2NWFiMWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2VuY29kZXJzLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZW5jb2RlcnMuYwpAQCAtMTM0NSw2ICsxMzQ1LDcgQEAKIHZvaWQKIHJhZGVvbl9hZGRfYXRvbV9lbmNvZGVyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVpbnQzMl90IGVuY29kZXJfaWQsIHVpbnQzMl90IHN1cHBvcnRlZF9kZXZpY2UpCiB7CisJc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYgPSBkZXYtPmRldl9wcml2YXRlOwogCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcjsKIAlzdHJ1Y3QgcmFkZW9uX2VuY29kZXIgKnJhZGVvbl9lbmNvZGVyOwogCkBAIC0xMzY0LDcgKzEzNjUsMTAgQEAKIAkJcmV0dXJuOwogCiAJZW5jb2RlciA9ICZyYWRlb25fZW5jb2Rlci0+YmFzZTsKLQllbmNvZGVyLT5wb3NzaWJsZV9jcnRjcyA9IDB4MzsKKwlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fU0lOR0xFX0NSVEMpCisJCWVuY29kZXItPnBvc3NpYmxlX2NydGNzID0gMHgxOworCWVsc2UKKwkJZW5jb2Rlci0+cG9zc2libGVfY3J0Y3MgPSAweDM7CiAJZW5jb2Rlci0+cG9zc2libGVfY2xvbmVzID0gMDsKIAogCXJhZGVvbl9lbmNvZGVyLT5lbmNfcHJpdiA9IE5VTEw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9mYi5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZmIuYwppbmRleCA5NDRlNGZhLi5iMzhjNGM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9mYi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2ZiLmMKQEAgLTU1LDYgKzU1LDcgQEAKIAkuZmJfaW1hZ2VibGl0ID0gY2ZiX2ltYWdlYmxpdCwKIAkuZmJfcGFuX2Rpc3BsYXkgPSBkcm1fZmJfaGVscGVyX3Bhbl9kaXNwbGF5LAogCS5mYl9ibGFuayA9IGRybV9mYl9oZWxwZXJfYmxhbmssCisJLmZiX3NldGNtYXAgPSBkcm1fZmJfaGVscGVyX3NldGNtYXAsCiB9OwogCiAvKioKQEAgLTEyMywxMSArMTI0LDEzIEBACiAKIHN0YXRpYyBzdHJ1Y3QgZHJtX2ZiX2hlbHBlcl9mdW5jcyByYWRlb25fZmJfaGVscGVyX2Z1bmNzID0gewogCS5nYW1tYV9zZXQgPSByYWRlb25fY3J0Y19mYl9nYW1tYV9zZXQsCisJLmdhbW1hX2dldCA9IHJhZGVvbl9jcnRjX2ZiX2dhbW1hX2dldCwKIH07CiAKIGludCByYWRlb25mYl9jcmVhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIAkJICAgIHVpbnQzMl90IGZiX3dpZHRoLCB1aW50MzJfdCBmYl9oZWlnaHQsCiAJCSAgICB1aW50MzJfdCBzdXJmYWNlX3dpZHRoLCB1aW50MzJfdCBzdXJmYWNlX2hlaWdodCwKKwkJICAgIHVpbnQzMl90IHN1cmZhY2VfZGVwdGgsIHVpbnQzMl90IHN1cmZhY2VfYnBwLAogCQkgICAgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqKmZiX3ApCiB7CiAJc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYgPSBkZXYtPmRldl9wcml2YXRlOwpAQCAtMTQ1LDEzICsxNDgsMTkgQEAKIAl1bnNpZ25lZCBsb25nIHRtcDsKIAlib29sIGZiX3RpbGVkID0gZmFsc2U7IC8qIHVzZWZ1bCBmb3IgdGVzdGluZyAqLwogCXUzMiB0aWxpbmdfZmxhZ3MgPSAwOworCWludCBjcnRjX2NvdW50OwogCiAJbW9kZV9jbWQud2lkdGggPSBzdXJmYWNlX3dpZHRoOwogCW1vZGVfY21kLmhlaWdodCA9IHN1cmZhY2VfaGVpZ2h0OwotCW1vZGVfY21kLmJwcCA9IDMyOworCisJLyogYXZpdm8gY2FuJ3Qgc2Nhbm91dCByZWFsIDI0YnBwICovCisJaWYgKChzdXJmYWNlX2JwcCA9PSAyNCkgJiYgQVNJQ19JU19BVklWTyhyZGV2KSkKKwkJc3VyZmFjZV9icHAgPSAzMjsKKworCW1vZGVfY21kLmJwcCA9IHN1cmZhY2VfYnBwOwogCS8qIG5lZWQgdG8gYWxpZ24gcGl0Y2ggd2l0aCBjcnRjIGxpbWl0cyAqLwogCW1vZGVfY21kLnBpdGNoID0gcmFkZW9uX2FsaWduX3BpdGNoKHJkZXYsIG1vZGVfY21kLndpZHRoLCBtb2RlX2NtZC5icHAsIGZiX3RpbGVkKSAqICgobW9kZV9jbWQuYnBwICsgMSkgLyA4KTsKLQltb2RlX2NtZC5kZXB0aCA9IDI0OworCW1vZGVfY21kLmRlcHRoID0gc3VyZmFjZV9kZXB0aDsKIAogCXNpemUgPSBtb2RlX2NtZC5waXRjaCAqIG1vZGVfY21kLmhlaWdodDsKIAlhbGlnbmVkX3NpemUgPSBBTElHTihzaXplLCBQQUdFX1NJWkUpOwpAQCAtMjE2LDcgKzIyNSwxMSBAQAogCXJmYmRldiA9IGluZm8tPnBhcjsKIAlyZmJkZXYtPmhlbHBlci5mdW5jcyA9ICZyYWRlb25fZmJfaGVscGVyX2Z1bmNzOwogCXJmYmRldi0+aGVscGVyLmRldiA9IGRldjsKLQlyZXQgPSBkcm1fZmJfaGVscGVyX2luaXRfY3J0Y19jb3VudCgmcmZiZGV2LT5oZWxwZXIsIDIsCisJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX1NJTkdMRV9DUlRDKQorCQljcnRjX2NvdW50ID0gMTsKKwllbHNlCisJCWNydGNfY291bnQgPSAyOworCXJldCA9IGRybV9mYl9oZWxwZXJfaW5pdF9jcnRjX2NvdW50KCZyZmJkZXYtPmhlbHBlciwgY3J0Y19jb3VudCwKIAkJCQkJICAgIFJBREVPTkZCX0NPTk5fTElNSVQpOwogCWlmIChyZXQpCiAJCWdvdG8gb3V0X3VucmVmOwpAQCAtMjMzLDcgKzI0Niw3IEBACiAKIAlzdHJjcHkoaW5mby0+Zml4LmlkLCAicmFkZW9uZHJtZmIiKTsKIAotCWRybV9mYl9oZWxwZXJfZmlsbF9maXgoaW5mbywgZmItPnBpdGNoKTsKKwlkcm1fZmJfaGVscGVyX2ZpbGxfZml4KGluZm8sIGZiLT5waXRjaCwgZmItPmRlcHRoKTsKIAogCWluZm8tPmZsYWdzID0gRkJJTkZPX0RFRkFVTFQ7CiAJaW5mby0+ZmJvcHMgPSAmcmFkZW9uZmJfb3BzOwpAQCAtMjkwLDEzICszMDMsMjYgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgY2hhciAqbW9kZV9vcHRpb247CitpbnQgcmFkZW9uX3BhcnNlX29wdGlvbnMoY2hhciAqb3B0aW9ucykKK3sKKwljaGFyICp0aGlzX29wdDsKKworCWlmICghb3B0aW9ucyB8fCAhKm9wdGlvbnMpCisJCXJldHVybiAwOworCisJd2hpbGUgKCh0aGlzX29wdCA9IHN0cnNlcCgmb3B0aW9ucywgIiwiKSkgIT0gTlVMTCkgeworCQlpZiAoISp0aGlzX29wdCkKKwkJCWNvbnRpbnVlOworCQltb2RlX29wdGlvbiA9IHRoaXNfb3B0OworCX0KKwlyZXR1cm4gMDsKK30KKwogaW50IHJhZGVvbmZiX3Byb2JlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7Ci0JaW50IHJldDsKLQlyZXQgPSBkcm1fZmJfaGVscGVyX3NpbmdsZV9mYl9wcm9iZShkZXYsICZyYWRlb25mYl9jcmVhdGUpOwotCXJldHVybiByZXQ7CisJcmV0dXJuIGRybV9mYl9oZWxwZXJfc2luZ2xlX2ZiX3Byb2JlKGRldiwgMzIsICZyYWRlb25mYl9jcmVhdGUpOwogfQotRVhQT1JUX1NZTUJPTChyYWRlb25mYl9wcm9iZSk7CiAKIGludCByYWRlb25mYl9yZW1vdmUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9pcnFfa21zLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9pcnFfa21zLmMKaW5kZXggMTg0MTE0NS4uOGUwYTg3NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25faXJxX2ttcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2lycV9rbXMuYwpAQCAtODMsOCArODMsMTIgQEAKIGludCByYWRlb25faXJxX2ttc19pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewogCWludCByID0gMDsKKwlpbnQgbnVtX2NydGMgPSAyOwogCi0JciA9IGRybV92YmxhbmtfaW5pdChyZGV2LT5kZGV2LCAyKTsKKwlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fU0lOR0xFX0NSVEMpCisJCW51bV9jcnRjID0gMTsKKworCXIgPSBkcm1fdmJsYW5rX2luaXQocmRldi0+ZGRldiwgbnVtX2NydGMpOwogCWlmIChyKSB7CiAJCXJldHVybiByOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2ttcy5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fa21zLmMKaW5kZXggNzA5YmQ4OS4uYmExMjg2MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fa21zLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fa21zLmMKQEAgLTIwMSw1NSArMjAxLDYgQEAKIAogCiAvKgotICogRm9yIG11bHRpcGxlIG1hc3RlciAobGlrZSBtdWx0aXBsZSBYKS4KLSAqLwotc3RydWN0IGRybV9yYWRlb25fbWFzdGVyX3ByaXZhdGUgewotCWRybV9sb2NhbF9tYXBfdCAqc2FyZWE7Ci0JZHJtX3JhZGVvbl9zYXJlYV90ICpzYXJlYV9wcml2OwotfTsKLQotaW50IHJhZGVvbl9tYXN0ZXJfY3JlYXRlX2ttcyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX21hc3RlciAqbWFzdGVyKQotewotCXN0cnVjdCBkcm1fcmFkZW9uX21hc3Rlcl9wcml2YXRlICptYXN0ZXJfcHJpdjsKLQl1bnNpZ25lZCBsb25nIHNhcmVhcGFnZTsKLQlpbnQgcmV0OwotCi0JbWFzdGVyX3ByaXYgPSBremFsbG9jKHNpemVvZigqbWFzdGVyX3ByaXYpLCBHRlBfS0VSTkVMKTsKLQlpZiAobWFzdGVyX3ByaXYgPT0gTlVMTCkgewotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0JLyogcHJlYnVpbGQgdGhlIFNBUkVBICovCi0Jc2FyZWFwYWdlID0gbWF4X3QodW5zaWduZWQgbG9uZywgU0FSRUFfTUFYLCBQQUdFX1NJWkUpOwotCXJldCA9IGRybV9hZGRtYXAoZGV2LCAwLCBzYXJlYXBhZ2UsIF9EUk1fU0hNLAotCQkJIF9EUk1fQ09OVEFJTlNfTE9DSywKLQkJCSAmbWFzdGVyX3ByaXYtPnNhcmVhKTsKLQlpZiAocmV0KSB7Ci0JCURSTV9FUlJPUigiU0FSRUEgc2V0dXAgZmFpbGVkXG4iKTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0JbWFzdGVyX3ByaXYtPnNhcmVhX3ByaXYgPSBtYXN0ZXJfcHJpdi0+c2FyZWEtPmhhbmRsZSArIHNpemVvZihzdHJ1Y3QgZHJtX3NhcmVhKTsKLQltYXN0ZXJfcHJpdi0+c2FyZWFfcHJpdi0+cGZDdXJyZW50UGFnZSA9IDA7Ci0JbWFzdGVyLT5kcml2ZXJfcHJpdiA9IG1hc3Rlcl9wcml2OwotCXJldHVybiAwOwotfQotCi12b2lkIHJhZGVvbl9tYXN0ZXJfZGVzdHJveV9rbXMoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKLQkJCSAgICAgICBzdHJ1Y3QgZHJtX21hc3RlciAqbWFzdGVyKQotewotCXN0cnVjdCBkcm1fcmFkZW9uX21hc3Rlcl9wcml2YXRlICptYXN0ZXJfcHJpdiA9IG1hc3Rlci0+ZHJpdmVyX3ByaXY7Ci0KLQlpZiAobWFzdGVyX3ByaXYgPT0gTlVMTCkgewotCQlyZXR1cm47Ci0JfQotCWlmIChtYXN0ZXJfcHJpdi0+c2FyZWEpIHsKLQkJZHJtX3JtbWFwX2xvY2tlZChkZXYsIG1hc3Rlcl9wcml2LT5zYXJlYSk7Ci0JfQotCWtmcmVlKG1hc3Rlcl9wcml2KTsKLQltYXN0ZXItPmRyaXZlcl9wcml2ID0gTlVMTDsKLX0KLQotCi0vKgogICogSU9DVEwuCiAgKi8KIGludCByYWRlb25fZG1hX2lvY3RsX2ttcyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fbGVnYWN5X2NydGMuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2xlZ2FjeV9jcnRjLmMKaW5kZXggMmI5OTdhMS4uMzY0MTBmOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fbGVnYWN5X2NydGMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9sZWdhY3lfY3J0Yy5jCkBAIC0xMDUzLDYgKzEwNTMsNyBAQAogCS5tb2RlX3NldF9iYXNlID0gcmFkZW9uX2NydGNfc2V0X2Jhc2UsCiAJLnByZXBhcmUgPSByYWRlb25fY3J0Y19wcmVwYXJlLAogCS5jb21taXQgPSByYWRlb25fY3J0Y19jb21taXQsCisJLmxvYWRfbHV0ID0gcmFkZW9uX2NydGNfbG9hZF9sdXQsCiB9OwogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2xlZ2FjeV9lbmNvZGVycy5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fbGVnYWN5X2VuY29kZXJzLmMKaW5kZXggYjE1NDdmNy4uNmNlYjk1OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fbGVnYWN5X2VuY29kZXJzLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fbGVnYWN5X2VuY29kZXJzLmMKQEAgLTg4MSw3ICs4ODEsNyBAQAogCQkJCQlSNDIwX1RWX0RBQ19EQUNBREpfTUFTSyB8CiAJCQkJCVI0MjBfVFZfREFDX1JEQUNQRCB8CiAJCQkJCVI0MjBfVFZfREFDX0dEQUNQRCB8Ci0JCQkJCVI0MjBfVFZfREFDX0dEQUNQRCB8CisJCQkJCVI0MjBfVFZfREFDX0JEQUNQRCB8CiAJCQkJCVI0MjBfVFZfREFDX1RWRU5BQkxFKTsKIAkJfSBlbHNlIHsKIAkJCXR2X2RhY19jbnRsICY9IH4oUkFERU9OX1RWX0RBQ19TVERfTUFTSyB8CkBAIC04ODksNyArODg5LDcgQEAKIAkJCQkJUkFERU9OX1RWX0RBQ19EQUNBREpfTUFTSyB8CiAJCQkJCVJBREVPTl9UVl9EQUNfUkRBQ1BEIHwKIAkJCQkJUkFERU9OX1RWX0RBQ19HREFDUEQgfAotCQkJCQlSQURFT05fVFZfREFDX0dEQUNQRCk7CisJCQkJCVJBREVPTl9UVl9EQUNfQkRBQ1BEKTsKIAkJfQogCiAJCS8qICBGSVhNRSBUViAqLwpAQCAtMTMxOCw3ICsxMzE4LDEwIEBACiAJCXJldHVybjsKIAogCWVuY29kZXIgPSAmcmFkZW9uX2VuY29kZXItPmJhc2U7Ci0JZW5jb2Rlci0+cG9zc2libGVfY3J0Y3MgPSAweDM7CisJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX1NJTkdMRV9DUlRDKQorCQllbmNvZGVyLT5wb3NzaWJsZV9jcnRjcyA9IDB4MTsKKwllbHNlCisJCWVuY29kZXItPnBvc3NpYmxlX2NydGNzID0gMHgzOwogCWVuY29kZXItPnBvc3NpYmxlX2Nsb25lcyA9IDA7CiAKIAlyYWRlb25fZW5jb2Rlci0+ZW5jX3ByaXYgPSBOVUxMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fbW9kZS5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fbW9kZS5oCmluZGV4IDU3MGE1ODcuLmU2MTIyNjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX21vZGUuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9tb2RlLmgKQEAgLTQwNyw2ICs0MDcsOCBAQAogcmFkZW9uX2NvbWJpb3NfZW5jb2Rlcl9kcG1zX3NjcmF0Y2hfcmVncyhzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIsIGJvb2wgb24pOwogZXh0ZXJuIHZvaWQgcmFkZW9uX2NydGNfZmJfZ2FtbWFfc2V0KHN0cnVjdCBkcm1fY3J0YyAqY3J0YywgdTE2IHJlZCwgdTE2IGdyZWVuLAogCQkJCSAgICAgdTE2IGJsdWUsIGludCByZWdubyk7CitleHRlcm4gdm9pZCByYWRlb25fY3J0Y19mYl9nYW1tYV9nZXQoc3RydWN0IGRybV9jcnRjICpjcnRjLCB1MTYgKnJlZCwgdTE2ICpncmVlbiwKKwkJCQkgICAgIHUxNiAqYmx1ZSwgaW50IHJlZ25vKTsKIHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKnJhZGVvbl9mcmFtZWJ1ZmZlcl9jcmVhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIAkJCQkJCSAgc3RydWN0IGRybV9tb2RlX2ZiX2NtZCAqbW9kZV9jbWQsCiAJCQkJCQkgIHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX29iamVjdC5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fb2JqZWN0LmMKaW5kZXggNzNhZjQ2My4uMWYwNTZkYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fb2JqZWN0LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fb2JqZWN0LmMKQEAgLTQwMCwxMSArNDAwLDkgQEAKIGludCByYWRlb25fb2JqZWN0X2xpc3RfcmVzZXJ2ZShzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKQogewogCXN0cnVjdCByYWRlb25fb2JqZWN0X2xpc3QgKmxvYmo7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqaTsKIAlpbnQgcjsKIAotCWxpc3RfZm9yX2VhY2goaSwgaGVhZCkgewotCQlsb2JqID0gbGlzdF9lbnRyeShpLCBzdHJ1Y3QgcmFkZW9uX29iamVjdF9saXN0LCBsaXN0KTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGxvYmosIGhlYWQsIGxpc3QpewogCQlpZiAoIWxvYmotPnJvYmotPnBpbl9jb3VudCkgewogCQkJciA9IHJhZGVvbl9vYmplY3RfcmVzZXJ2ZShsb2JqLT5yb2JqLCB0cnVlKTsKIAkJCWlmICh1bmxpa2VseShyICE9IDApKSB7CkBAIC00MjAsMTMgKzQxOCwxMCBAQAogdm9pZCByYWRlb25fb2JqZWN0X2xpc3RfdW5yZXNlcnZlKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCiB7CiAJc3RydWN0IHJhZGVvbl9vYmplY3RfbGlzdCAqbG9iajsKLQlzdHJ1Y3QgbGlzdF9oZWFkICppOwogCi0JbGlzdF9mb3JfZWFjaChpLCBoZWFkKSB7Ci0JCWxvYmogPSBsaXN0X2VudHJ5KGksIHN0cnVjdCByYWRlb25fb2JqZWN0X2xpc3QsIGxpc3QpOworCWxpc3RfZm9yX2VhY2hfZW50cnkobG9iaiwgaGVhZCwgbGlzdCkgewogCQlpZiAoIWxvYmotPnJvYmotPnBpbl9jb3VudCkgewogCQkJcmFkZW9uX29iamVjdF91bnJlc2VydmUobG9iai0+cm9iaik7Ci0JCX0gZWxzZSB7CiAJCX0KIAl9CiB9CkBAIC00MzYsNyArNDMxLDYgQEAKIAlzdHJ1Y3QgcmFkZW9uX29iamVjdF9saXN0ICpsb2JqOwogCXN0cnVjdCByYWRlb25fb2JqZWN0ICpyb2JqOwogCXN0cnVjdCByYWRlb25fZmVuY2UgKm9sZF9mZW5jZSA9IE5VTEw7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqaTsKIAlpbnQgcjsKIAogCXIgPSByYWRlb25fb2JqZWN0X2xpc3RfcmVzZXJ2ZShoZWFkKTsKQEAgLTQ0NCw4ICs0MzgsNyBAQAogCQlyYWRlb25fb2JqZWN0X2xpc3RfdW5yZXNlcnZlKGhlYWQpOwogCQlyZXR1cm4gcjsKIAl9Ci0JbGlzdF9mb3JfZWFjaChpLCBoZWFkKSB7Ci0JCWxvYmogPSBsaXN0X2VudHJ5KGksIHN0cnVjdCByYWRlb25fb2JqZWN0X2xpc3QsIGxpc3QpOworCWxpc3RfZm9yX2VhY2hfZW50cnkobG9iaiwgaGVhZCwgbGlzdCkgewogCQlyb2JqID0gbG9iai0+cm9iajsKIAkJaWYgKCFyb2JqLT5waW5fY291bnQpIHsKIAkJCWlmIChsb2JqLT53ZG9tYWluKSB7CkBAIC00ODIsMTAgKzQ3NSw4IEBACiB7CiAJc3RydWN0IHJhZGVvbl9vYmplY3RfbGlzdCAqbG9iajsKIAlzdHJ1Y3QgcmFkZW9uX2ZlbmNlICpvbGRfZmVuY2UgPSBOVUxMOwotCXN0cnVjdCBsaXN0X2hlYWQgKmk7CiAKLQlsaXN0X2Zvcl9lYWNoKGksIGhlYWQpIHsKLQkJbG9iaiA9IGxpc3RfZW50cnkoaSwgc3RydWN0IHJhZGVvbl9vYmplY3RfbGlzdCwgbGlzdCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShsb2JqLCBoZWFkLCBsaXN0KSB7CiAJCW9sZF9mZW5jZSA9IChzdHJ1Y3QgcmFkZW9uX2ZlbmNlICopbG9iai0+cm9iai0+dG9iai5zeW5jX29iajsKIAkJbG9iai0+cm9iai0+dG9iai5zeW5jX29iaiA9IE5VTEw7CiAJCWlmIChvbGRfZmVuY2UpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3JlZy5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fcmVnLmgKaW5kZXggMjFkYTg3MS4uYmZhMWFiOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fcmVnLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fcmVnLmgKQEAgLTMzMzMsNiArMzMzMyw3IEBACiAjICAgICAgIGRlZmluZSBSQURFT05fQ1BfUEFDS0VUX01BWF9EV09SRFMgICAgICAgICAgKDEgPDwgMTIpCiAjICAgICAgIGRlZmluZSBSQURFT05fQ1BfUEFDS0VUMF9SRUdfTUFTSyAgICAgICAgICAgMHgwMDAwMDdmZgogIyAgICAgICBkZWZpbmUgUjMwMF9DUF9QQUNLRVQwX1JFR19NQVNLICAgICAgICAgICAgIDB4MDAwMDFmZmYKKyMgICAgICAgZGVmaW5lIFI2MDBfQ1BfUEFDS0VUMF9SRUdfTUFTSyAgICAgICAgICAgICAweDAwMDBmZmZmCiAjICAgICAgIGRlZmluZSBSQURFT05fQ1BfUEFDS0VUMV9SRUcwX01BU0sgICAgICAgICAgMHgwMDAwMDdmZgogIyAgICAgICBkZWZpbmUgUkFERU9OX0NQX1BBQ0tFVDFfUkVHMV9NQVNLICAgICAgICAgIDB4MDAzZmY4MDAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fdHRtLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl90dG0uYwppbmRleCBhY2Q4ODljLi43NjViZDE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl90dG0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl90dG0uYwpAQCAtNTMwLDcgKzUzMCw3IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgcmFkZW9uX3R0bV92bV9vcHM7Ci1zdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0ICp0dG1fdm1fb3BzID0gTlVMTDsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgKnR0bV92bV9vcHMgPSBOVUxMOwogCiBzdGF0aWMgaW50IHJhZGVvbl90dG1fZmF1bHQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCB2bV9mYXVsdCAqdm1mKQogewpAQCAtNjg5LDkgKzY4OSw2IEBACiAKICNkZWZpbmUgUkFERU9OX0RFQlVHRlNfTUVNX1RZUEVTIDIKIAotc3RhdGljIHN0cnVjdCBkcm1faW5mb19saXN0IHJhZGVvbl9tZW1fdHlwZXNfbGlzdFtSQURFT05fREVCVUdGU19NRU1fVFlQRVNdOwotc3RhdGljIGNoYXIgcmFkZW9uX21lbV90eXBlc19uYW1lc1tSQURFT05fREVCVUdGU19NRU1fVFlQRVNdWzMyXTsKLQogI2lmIGRlZmluZWQoQ09ORklHX0RFQlVHX0ZTKQogc3RhdGljIGludCByYWRlb25fbW1fZHVtcF90YWJsZShzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKmRhdGEpCiB7CkBAIC03MTEsOSArNzA4LDExIEBACiAKIHN0YXRpYyBpbnQgcmFkZW9uX3R0bV9kZWJ1Z2ZzX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7CisjaWYgZGVmaW5lZChDT05GSUdfREVCVUdfRlMpCisJc3RhdGljIHN0cnVjdCBkcm1faW5mb19saXN0IHJhZGVvbl9tZW1fdHlwZXNfbGlzdFtSQURFT05fREVCVUdGU19NRU1fVFlQRVNdOworCXN0YXRpYyBjaGFyIHJhZGVvbl9tZW1fdHlwZXNfbmFtZXNbUkFERU9OX0RFQlVHRlNfTUVNX1RZUEVTXVszMl07CiAJdW5zaWduZWQgaTsKIAotI2lmIGRlZmluZWQoQ09ORklHX0RFQlVHX0ZTKQogCWZvciAoaSA9IDA7IGkgPCBSQURFT05fREVCVUdGU19NRU1fVFlQRVM7IGkrKykgewogCQlpZiAoaSA9PSAwKQogCQkJc3ByaW50ZihyYWRlb25fbWVtX3R5cGVzX25hbWVzW2ldLCAicmFkZW9uX3ZyYW1fbW0iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnMxMDBkLmggYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JzMTAwZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4YTkxM2EKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JzMTAwZC5oCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwOCBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAwOCBSZWQgSGF0IEluYy4KKyAqIENvcHlyaWdodCAyMDA5IEplcm9tZSBHbGlzc2UuCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQ09QWVJJR0hUIEhPTERFUihTKSBPUiBBVVRIT1IoUykgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IKKyAqIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAorICogQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCisgKiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKgorICogQXV0aG9yczogRGF2ZSBBaXJsaWUKKyAqICAgICAgICAgIEFsZXggRGV1Y2hlcgorICogICAgICAgICAgSmVyb21lIEdsaXNzZQorICovCisjaWZuZGVmIF9fUlMxMDBEX0hfXworI2RlZmluZSBfX1JTMTAwRF9IX18KKworLyogUmVnaXN0ZXJzICovCisjZGVmaW5lIFJfMDAwMTVDX05CX1RPTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTVDCisjZGVmaW5lICAgU18wMDAxNUNfTUNfRkJfU1RBUlQoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweEZGRkYpIDw8IDApCisjZGVmaW5lICAgR18wMDAxNUNfTUNfRkJfU1RBUlQoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweEZGRkYpCisjZGVmaW5lICAgQ18wMDAxNUNfTUNfRkJfU1RBUlQgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGMDAwMAorI2RlZmluZSAgIFNfMDAwMTVDX01DX0ZCX1RPUCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhGRkZGKSA8PCAxNikKKyNkZWZpbmUgICBHXzAwMDE1Q19NQ19GQl9UT1AoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNikgJiAweEZGRkYpCisjZGVmaW5lICAgQ18wMDAxNUNfTUNfRkJfVE9QICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwRkZGRgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnM0MDAuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnM0MDAuYwppbmRleCBhM2ZiZGFkLi5hNzY5YzI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JzNDAwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yczQwMC5jCkBAIC0yNywyNyArMjcsMTIgQEAKICAqLwogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8ZHJtL2RybVAuaD4KLSNpbmNsdWRlICJyYWRlb25fcmVnLmgiCiAjaW5jbHVkZSAicmFkZW9uLmgiCisjaW5jbHVkZSAicnM0MDBkLmgiCiAKLS8qIHJzNDAwLHJzNDgwIGRlcGVuZHMgb24gOiAqLwotdm9pZCByMTAwX2hkcF9yZXNldChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci12b2lkIHIxMDBfbWNfZGlzYWJsZV9jbGllbnRzKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLWludCByMzAwX21jX3dhaXRfZm9yX2lkbGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotdm9pZCByNDIwX3BpcGVzX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworLyogVGhpcyBmaWxlcyBnYXRoZXIgZnVuY3Rpb25zIHNwZWNpZmljcyB0byA6IHJzNDAwLHJzNDgwICovCitzdGF0aWMgaW50IHJzNDAwX2RlYnVnZnNfcGNpZV9nYXJ0X2luZm9faW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiAKLS8qIFRoaXMgZmlsZXMgZ2F0aGVyIGZ1bmN0aW9ucyBzcGVjaWZpY3MgdG8gOgotICogcnM0MDAscnM0ODAKLSAqCi0gKiBTb21lIG9mIHRoZXNlIGZ1bmN0aW9ucyBtaWdodCBiZSB1c2VkIGJ5IG5ld2VyIEFTSUNzLgotICovCi12b2lkIHJzNDAwX2dwdV9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLWludCByczQwMF9kZWJ1Z2ZzX3BjaWVfZ2FydF9pbmZvX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotCi0KLS8qCi0gKiBHQVJUIGZ1bmN0aW9ucy4KLSAqLwogdm9pZCByczQwMF9nYXJ0X2FkanVzdF9zaXplKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewogCS8qIENoZWNrIGdhcnQgc2l6ZSAqLwpAQCAtMjM4LDYxICsyMjMsNiBAQAogCXJldHVybiAwOwogfQogCi0KLS8qCi0gKiBNQyBmdW5jdGlvbnMuCi0gKi8KLWludCByczQwMF9tY19pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQotewotCXVpbnQzMl90IHRtcDsKLQlpbnQgcjsKLQotCWlmIChyMTAwX2RlYnVnZnNfcmJibV9pbml0KHJkZXYpKSB7Ci0JCURSTV9FUlJPUigiRmFpbGVkIHRvIHJlZ2lzdGVyIGRlYnVnZnMgZmlsZSBmb3IgUkJCTSAhXG4iKTsKLQl9Ci0KLQlyczQwMF9ncHVfaW5pdChyZGV2KTsKLQlyczQwMF9nYXJ0X2Rpc2FibGUocmRldik7Ci0JcmRldi0+bWMuZ3R0X2xvY2F0aW9uID0gcmRldi0+bWMubWNfdnJhbV9zaXplOwotCXJkZXYtPm1jLmd0dF9sb2NhdGlvbiArPSAocmRldi0+bWMuZ3R0X3NpemUgLSAxKTsKLQlyZGV2LT5tYy5ndHRfbG9jYXRpb24gJj0gfihyZGV2LT5tYy5ndHRfc2l6ZSAtIDEpOwotCXIgPSByYWRlb25fbWNfc2V0dXAocmRldik7Ci0JaWYgKHIpIHsKLQkJcmV0dXJuIHI7Ci0JfQotCi0JcjEwMF9tY19kaXNhYmxlX2NsaWVudHMocmRldik7Ci0JaWYgKHIzMDBfbWNfd2FpdF9mb3JfaWRsZShyZGV2KSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJGYWlsZWQgdG8gd2FpdCBNQyBpZGxlIHdoaWxlICIKLQkJICAgICAgICJwcm9ncmFtbWluZyBwaXBlcy4gQmFkIHRoaW5ncyBtaWdodCBoYXBwZW4uXG4iKTsKLQl9Ci0KLQl0bXAgPSByZGV2LT5tYy52cmFtX2xvY2F0aW9uICsgcmRldi0+bWMubWNfdnJhbV9zaXplIC0gMTsKLQl0bXAgPSBSRUdfU0VUKFJBREVPTl9NQ19GQl9UT1AsIHRtcCA+PiAxNik7Ci0JdG1wIHw9IFJFR19TRVQoUkFERU9OX01DX0ZCX1NUQVJULCByZGV2LT5tYy52cmFtX2xvY2F0aW9uID4+IDE2KTsKLQlXUkVHMzIoUkFERU9OX01DX0ZCX0xPQ0FUSU9OLCB0bXApOwotCXRtcCA9IFJSRUczMihSQURFT05fSE9TVF9QQVRIX0NOVEwpIHwgUkFERU9OX0hQX0xJTl9SRF9DQUNIRV9ESVM7Ci0JV1JFRzMyKFJBREVPTl9IT1NUX1BBVEhfQ05UTCwgdG1wIHwgUkFERU9OX0hEUF9TT0ZUX1JFU0VUIHwgUkFERU9OX0hEUF9SRUFEX0JVRkZFUl9JTlZBTElEQVRFKTsKLQkodm9pZClSUkVHMzIoUkFERU9OX0hPU1RfUEFUSF9DTlRMKTsKLQlXUkVHMzIoUkFERU9OX0hPU1RfUEFUSF9DTlRMLCB0bXApOwotCSh2b2lkKVJSRUczMihSQURFT05fSE9TVF9QQVRIX0NOVEwpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXZvaWQgcnM0MDBfbWNfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKLXsKLX0KLQotCi0vKgotICogR2xvYmFsIEdQVSBmdW5jdGlvbnMKLSAqLwotdm9pZCByczQwMF9lcnJhdGEoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCi17Ci0JcmRldi0+cGxsX2VycmF0YSA9IDA7Ci19Ci0KIHZvaWQgcnM0MDBfZ3B1X2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7CiAJLyogRklYTUU6IEhEUCBzYW1lIHBsYWNlIG9uIHJzNDAwID8gKi8KQEAgLTMwNSwxMCArMjM1LDYgQEAKIAl9CiB9CiAKLQotLyoKLSAqIFZSQU0gaW5mby4KLSAqLwogdm9pZCByczQwMF92cmFtX2luZm8oc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7CiAJcnM0MDBfZ2FydF9hZGp1c3Rfc2l6ZShyZGV2KTsKQEAgLTMxOSwxMCArMjQ1LDYgQEAKIAlyMTAwX3ZyYW1faW5pdF9zaXplcyhyZGV2KTsKIH0KIAotCi0vKgotICogSW5kaXJlY3QgcmVnaXN0ZXJzIGFjY2Vzc29yCi0gKi8KIHVpbnQzMl90IHJzNDAwX21jX3JyZWcoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHVpbnQzMl90IHJlZykKIHsKIAl1aW50MzJfdCByOwpAQCAtMzQwLDEwICsyNjIsNiBAQAogCVdSRUczMihSUzQ4MF9OQl9NQ19JTkRFWCwgMHhmZik7CiB9CiAKLQotLyoKLSAqIERlYnVnZnMgaW5mbwotICovCiAjaWYgZGVmaW5lZChDT05GSUdfREVCVUdfRlMpCiBzdGF0aWMgaW50IHJzNDAwX2RlYnVnZnNfZ2FydF9pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqZGF0YSkKIHsKQEAgLTQxOSw3ICszMzcsNyBAQAogfTsKICNlbmRpZgogCi1pbnQgcnM0MDBfZGVidWdmc19wY2llX2dhcnRfaW5mb19pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQorc3RhdGljIGludCByczQwMF9kZWJ1Z2ZzX3BjaWVfZ2FydF9pbmZvX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7CiAjaWYgZGVmaW5lZChDT05GSUdfREVCVUdfRlMpCiAJcmV0dXJuIHJhZGVvbl9kZWJ1Z2ZzX2FkZF9maWxlcyhyZGV2LCByczQwMF9nYXJ0X2luZm9fbGlzdCwgMSk7CkBAIC00MjcsMyArMzQ1LDE4OCBAQAogCXJldHVybiAwOwogI2VuZGlmCiB9CisKK3N0YXRpYyBpbnQgcnM0MDBfbWNfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwlpbnQgcjsKKwl1MzIgdG1wOworCisJLyogU2V0dXAgR1BVIG1lbW9yeSBzcGFjZSAqLworCXRtcCA9IEdfMDAwMTVDX01DX0ZCX1NUQVJUKFJSRUczMihSXzAwMDE1Q19OQl9UT00pKTsKKwlyZGV2LT5tYy52cmFtX2xvY2F0aW9uID0gR18wMDAxNUNfTUNfRkJfU1RBUlQodG1wKSA8PCAxNjsKKwlyZGV2LT5tYy5ndHRfbG9jYXRpb24gPSAweEZGRkZGRkZGVUw7CisJciA9IHJhZGVvbl9tY19zZXR1cChyZGV2KTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgcnM0MDBfbWNfcHJvZ3JhbShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwlzdHJ1Y3QgcjEwMF9tY19zYXZlIHNhdmU7CisKKwkvKiBTdG9wcyBhbGwgbWMgY2xpZW50cyAqLworCXIxMDBfbWNfc3RvcChyZGV2LCAmc2F2ZSk7CisKKwkvKiBXYWl0IGZvciBtYyBpZGxlICovCisJaWYgKHIzMDBfbWNfd2FpdF9mb3JfaWRsZShyZGV2KSkKKwkJZGV2X3dhcm4ocmRldi0+ZGV2LCAiV2FpdCBNQyBpZGxlIHRpbWVvdXQgYmVmb3JlIHVwZGF0aW5nIE1DLlxuIik7CisJV1JFRzMyKFJfMDAwMTQ4X01DX0ZCX0xPQ0FUSU9OLAorCQlTXzAwMDE0OF9NQ19GQl9TVEFSVChyZGV2LT5tYy52cmFtX3N0YXJ0ID4+IDE2KSB8CisJCVNfMDAwMTQ4X01DX0ZCX1RPUChyZGV2LT5tYy52cmFtX2VuZCA+PiAxNikpOworCisJcjEwMF9tY19yZXN1bWUocmRldiwgJnNhdmUpOworfQorCitzdGF0aWMgaW50IHJzNDAwX3N0YXJ0dXAoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJaW50IHI7CisKKwlyczQwMF9tY19wcm9ncmFtKHJkZXYpOworCS8qIFJlc3VtZSBjbG9jayAqLworCXIzMDBfY2xvY2tfc3RhcnR1cChyZGV2KTsKKwkvKiBJbml0aWFsaXplIEdQVSBjb25maWd1cmF0aW9uICgjIHBpcGVzLCAuLi4pICovCisJcnM0MDBfZ3B1X2luaXQocmRldik7CisJLyogSW5pdGlhbGl6ZSBHQVJUIChpbml0aWFsaXplIGFmdGVyIFRUTSBzbyB3ZSBjYW4gYWxsb2NhdGUKKwkgKiBtZW1vcnkgdGhyb3VnaCBUVE0gYnV0IGZpbmFsaXplIGFmdGVyIFRUTSkgKi8KKwlyID0gcnM0MDBfZ2FydF9lbmFibGUocmRldik7CisJaWYgKHIpCisJCXJldHVybiByOworCS8qIEVuYWJsZSBJUlEgKi8KKwlyZGV2LT5pcnEuc3dfaW50ID0gdHJ1ZTsKKwlyMTAwX2lycV9zZXQocmRldik7CisJLyogMU0gcmluZyBidWZmZXIgKi8KKwlyID0gcjEwMF9jcF9pbml0KHJkZXYsIDEwMjQgKiAxMDI0KTsKKwlpZiAocikgeworCQlkZXZfZXJyKHJkZXYtPmRldiwgImZhaWxsZWQgaW5pdGlhbGl6aW5nIENQICglZCkuXG4iLCByKTsKKwkJcmV0dXJuIHI7CisJfQorCXIgPSByMTAwX3diX2luaXQocmRldik7CisJaWYgKHIpCisJCWRldl9lcnIocmRldi0+ZGV2LCAiZmFpbGxlZCBpbml0aWFsaXppbmcgV0IgKCVkKS5cbiIsIHIpOworCXIgPSByMTAwX2liX2luaXQocmRldik7CisJaWYgKHIpIHsKKwkJZGV2X2VycihyZGV2LT5kZXYsICJmYWlsbGVkIGluaXRpYWxpemluZyBJQiAoJWQpLlxuIiwgcik7CisJCXJldHVybiByOworCX0KKwlyZXR1cm4gMDsKK30KKworaW50IHJzNDAwX3Jlc3VtZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwkvKiBNYWtlIHN1ciBHQVJUIGFyZSBub3Qgd29ya2luZyAqLworCXJzNDAwX2dhcnRfZGlzYWJsZShyZGV2KTsKKwkvKiBSZXN1bWUgY2xvY2sgYmVmb3JlIGRvaW5nIHJlc2V0ICovCisJcjMwMF9jbG9ja19zdGFydHVwKHJkZXYpOworCS8qIFJlc2V0IGdwdSBiZWZvcmUgcG9zdGluZyBvdGhlcndpc2UgQVRPTSB3aWxsIGVudGVyIGluZmluaXRlIGxvb3AgKi8KKwlpZiAocmFkZW9uX2dwdV9yZXNldChyZGV2KSkgeworCQlkZXZfd2FybihyZGV2LT5kZXYsICJHUFUgcmVzZXQgZmFpbGVkICEgKDB4RTQwPTB4JTA4WCwgMHg3QzA9MHglMDhYKVxuIiwKKwkJCVJSRUczMihSXzAwMEU0MF9SQkJNX1NUQVRVUyksCisJCQlSUkVHMzIoUl8wMDA3QzBfQ1BfU1RBVCkpOworCX0KKwkvKiBwb3N0ICovCisJcmFkZW9uX2NvbWJpb3NfYXNpY19pbml0KHJkZXYtPmRkZXYpOworCS8qIFJlc3VtZSBjbG9jayBhZnRlciBwb3N0aW5nICovCisJcjMwMF9jbG9ja19zdGFydHVwKHJkZXYpOworCXJldHVybiByczQwMF9zdGFydHVwKHJkZXYpOworfQorCitpbnQgcnM0MDBfc3VzcGVuZChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwlyMTAwX2NwX2Rpc2FibGUocmRldik7CisJcjEwMF93Yl9kaXNhYmxlKHJkZXYpOworCXIxMDBfaXJxX2Rpc2FibGUocmRldik7CisJcnM0MDBfZ2FydF9kaXNhYmxlKHJkZXYpOworCXJldHVybiAwOworfQorCit2b2lkIHJzNDAwX2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJcnM0MDBfc3VzcGVuZChyZGV2KTsKKwlyMTAwX2NwX2ZpbmkocmRldik7CisJcjEwMF93Yl9maW5pKHJkZXYpOworCXIxMDBfaWJfZmluaShyZGV2KTsKKwlyYWRlb25fZ2VtX2ZpbmkocmRldik7CisJcnM0MDBfZ2FydF9maW5pKHJkZXYpOworCXJhZGVvbl9pcnFfa21zX2ZpbmkocmRldik7CisJcmFkZW9uX2ZlbmNlX2RyaXZlcl9maW5pKHJkZXYpOworCXJhZGVvbl9vYmplY3RfZmluaShyZGV2KTsKKwlyYWRlb25fYXRvbWJpb3NfZmluaShyZGV2KTsKKwlrZnJlZShyZGV2LT5iaW9zKTsKKwlyZGV2LT5iaW9zID0gTlVMTDsKK30KKworaW50IHJzNDAwX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJaW50IHI7CisKKwkvKiBEaXNhYmxlIFZHQSAqLworCXIxMDBfdmdhX3JlbmRlcl9kaXNhYmxlKHJkZXYpOworCS8qIEluaXRpYWxpemUgc2NyYXRjaCByZWdpc3RlcnMgKi8KKwlyYWRlb25fc2NyYXRjaF9pbml0KHJkZXYpOworCS8qIEluaXRpYWxpemUgc3VyZmFjZSByZWdpc3RlcnMgKi8KKwlyYWRlb25fc3VyZmFjZV9pbml0KHJkZXYpOworCS8qIFRPRE86IGRpc2FibGUgVkdBIG5lZWQgdG8gdXNlIFZHQSByZXF1ZXN0ICovCisJLyogQklPUyovCisJaWYgKCFyYWRlb25fZ2V0X2Jpb3MocmRldikpIHsKKwkJaWYgKEFTSUNfSVNfQVZJVk8ocmRldikpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJaWYgKHJkZXYtPmlzX2F0b21fYmlvcykgeworCQlkZXZfZXJyKHJkZXYtPmRldiwgIkV4cGVjdGluZyBjb21iaW9zIGZvciBSUzQwMC9SUzQ4MCBHUFVcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9IGVsc2UgeworCQlyID0gcmFkZW9uX2NvbWJpb3NfaW5pdChyZGV2KTsKKwkJaWYgKHIpCisJCQlyZXR1cm4gcjsKKwl9CisJLyogUmVzZXQgZ3B1IGJlZm9yZSBwb3N0aW5nIG90aGVyd2lzZSBBVE9NIHdpbGwgZW50ZXIgaW5maW5pdGUgbG9vcCAqLworCWlmIChyYWRlb25fZ3B1X3Jlc2V0KHJkZXYpKSB7CisJCWRldl93YXJuKHJkZXYtPmRldiwKKwkJCSJHUFUgcmVzZXQgZmFpbGVkICEgKDB4RTQwPTB4JTA4WCwgMHg3QzA9MHglMDhYKVxuIiwKKwkJCVJSRUczMihSXzAwMEU0MF9SQkJNX1NUQVRVUyksCisJCQlSUkVHMzIoUl8wMDA3QzBfQ1BfU1RBVCkpOworCX0KKwkvKiBjaGVjayBpZiBjYXJkcyBhcmUgcG9zdGVkIG9yIG5vdCAqLworCWlmICghcmFkZW9uX2NhcmRfcG9zdGVkKHJkZXYpICYmIHJkZXYtPmJpb3MpIHsKKwkJRFJNX0lORk8oIkdQVSBub3QgcG9zdGVkLiBwb3N0aW5nIG5vdy4uLlxuIik7CisJCXJhZGVvbl9jb21iaW9zX2FzaWNfaW5pdChyZGV2LT5kZGV2KTsKKwl9CisJLyogSW5pdGlhbGl6ZSBjbG9ja3MgKi8KKwlyYWRlb25fZ2V0X2Nsb2NrX2luZm8ocmRldi0+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+PiAzMSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfR1VJX0FDVElWRSAgICAgICAgICAgICAgICAgICAgICAgICAgMHg3RkZGRkZGRgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnM2MDAuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnM2MDAuYwppbmRleCAwZTc5MWUyNi4uMTBkZmE3OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yczYwMC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnM2MDAuYwpAQCAtMjUsMjggKzI1LDI1IEBACiAgKiAgICAgICAgICBBbGV4IERldWNoZXIKICAqICAgICAgICAgIEplcm9tZSBHbGlzc2UKICAqLworLyogUlM2MDAgLyBSYWRlb24gWDEyNTAvWDEyNzAgaW50ZWdyYXRlZCBHUFUKKyAqCisgKiBUaGlzIGZpbGUgZ2F0aGVyIGZ1bmN0aW9uIHNwZWNpZmljIHRvIFJTNjAwIHdoaWNoIGlzIHRoZSBJR1Agb2YKKyAqIHRoZSBYMTI1MC9YMTI3MCBmYW1pbHkgc3VwcG9ydGluZyBpbnRlbCBDUFUgKHdoaWxlIFJTNjkwL1JTNzQwCisgKiBpcyB0aGUgWDEyNTAvWDEyNzAgc3VwcG9ydGluZyBBTUQgQ1BVKS4gVGhlIGRpc3BsYXkgZW5naW5lIGFyZQorICogdGhlIGF2aXZvIG9uZSwgYmlvcyBpcyBhbiBhdG9tYmlvcywgM0QgYmxvY2sgYXJlIHRoZSBvbmUgb2YgdGhlCisgKiBSNFhYIGZhbWlseS4gVGhlIEdBUlQgaXMgZGlmZmVyZW50IGZyb20gdGhlIFJTNDAwIG9uZSBhbmQgaXMgdmVyeQorICogY2xvc2UgdG8gdGhlIG9uZSBvZiB0aGUgUjYwMCBmYW1pbHkgKFI2MDAgbGlrZWx5IGJlaW5nIGFuIGV2b2x1dGlvbgorICogb2YgdGhlIFJTNjAwIEdBUlQgYmxvY2spLgorICovCiAjaW5jbHVkZSAiZHJtUC5oIgotI2luY2x1ZGUgInJhZGVvbl9yZWcuaCIKICNpbmNsdWRlICJyYWRlb24uaCIKLSNpbmNsdWRlICJhdml2b2QuaCIKKyNpbmNsdWRlICJhdG9tLmgiCisjaW5jbHVkZSAicnM2MDBkLmgiCiAKICNpbmNsdWRlICJyczYwMF9yZWdfc2FmZS5oIgogCi0vKiByczYwMCBkZXBlbmRzIG9uIDogKi8KLXZvaWQgcjEwMF9oZHBfcmVzZXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotaW50IHIxMDBfZ3VpX3dhaXRfZm9yX2lkbGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotaW50IHIzMDBfbWNfd2FpdF9mb3JfaWRsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci12b2lkIHI0MjBfcGlwZXNfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci0KLS8qIFRoaXMgZmlsZXMgZ2F0aGVyIGZ1bmN0aW9ucyBzcGVjaWZpY3MgdG8gOgotICogcnM2MDAKLSAqCi0gKiBTb21lIG9mIHRoZXNlIGZ1bmN0aW9ucyBtaWdodCBiZSB1c2VkIGJ5IG5ld2VyIEFTSUNzLgotICovCiB2b2lkIHJzNjAwX2dwdV9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIGludCByczYwMF9tY193YWl0X2Zvcl9pZGxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLXZvaWQgcnM2MDBfZGlzYWJsZV92Z2Eoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotCiAKIC8qCiAgKiBHQVJULgpAQCAtNTUsMTggKzUyLDE4IEBACiB7CiAJdWludDMyX3QgdG1wOwogCi0JdG1wID0gUlJFRzMyX01DKFJTNjAwX01DX1BUMF9DTlRMKTsKLQl0bXAgJj0gfihSUzYwMF9JTlZBTElEQVRFX0FMTF9MMV9UTEJTIHwgUlM2MDBfSU5WQUxJREFURV9MMl9DQUNIRSk7Ci0JV1JFRzMyX01DKFJTNjAwX01DX1BUMF9DTlRMLCB0bXApOworCXRtcCA9IFJSRUczMl9NQyhSXzAwMDEwMF9NQ19QVDBfQ05UTCk7CisJdG1wICY9IENfMDAwMTAwX0lOVkFMSURBVEVfQUxMX0wxX1RMQlMgJiBDXzAwMDEwMF9JTlZBTElEQVRFX0wyX0NBQ0hFOworCVdSRUczMl9NQyhSXzAwMDEwMF9NQ19QVDBfQ05UTCwgdG1wKTsKIAotCXRtcCA9IFJSRUczMl9NQyhSUzYwMF9NQ19QVDBfQ05UTCk7Ci0JdG1wIHw9IFJTNjAwX0lOVkFMSURBVEVfQUxMX0wxX1RMQlMgfCBSUzYwMF9JTlZBTElEQVRFX0wyX0NBQ0hFOwotCVdSRUczMl9NQyhSUzYwMF9NQ19QVDBfQ05UTCwgdG1wKTsKKwl0bXAgPSBSUkVHMzJfTUMoUl8wMDAxMDBfTUNfUFQwX0NOVEwpOworCXRtcCB8PSBTXzAwMDEwMF9JTlZBTElEQVRFX0FMTF9MMV9UTEJTKDEpICYgU18wMDAxMDBfSU5WQUxJREFURV9MMl9DQUNIRSgxKTsKKwlXUkVHMzJfTUMoUl8wMDAxMDBfTUNfUFQwX0NOVEwsIHRtcCk7CiAKLQl0bXAgPSBSUkVHMzJfTUMoUlM2MDBfTUNfUFQwX0NOVEwpOwotCXRtcCAmPSB+KFJTNjAwX0lOVkFMSURBVEVfQUxMX0wxX1RMQlMgfCBSUzYwMF9JTlZBTElEQVRFX0wyX0NBQ0hFKTsKLQlXUkVHMzJfTUMoUlM2MDBfTUNfUFQwX0NOVEwsIHRtcCk7Ci0JdG1wID0gUlJFRzMyX01DKFJTNjAwX01DX1BUMF9DTlRMKTsKKwl0bXAgPSBSUkVHMzJfTUMoUl8wMDAxMDBfTUNfUFQwX0NOVEwpOworCXRtcCAmPSBDXzAwMDEwMF9JTlZBTElEQVRFX0FMTF9MMV9UTEJTICYgQ18wMDAxMDBfSU5WQUxJREFURV9MMl9DQUNIRTsKKwlXUkVHMzJfTUMoUl8wMDAxMDBfTUNfUFQwX0NOVEwsIHRtcCk7CisJdG1wID0gUlJFRzMyX01DKFJfMDAwMTAwX01DX1BUMF9DTlRMKTsKIH0KIAogaW50IHJzNjAwX2dhcnRfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKQEAgLTg4LDcgKzg1LDcgQEAKIAogaW50IHJzNjAwX2dhcnRfZW5hYmxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewotCXVpbnQzMl90IHRtcDsKKwl1MzIgdG1wOwogCWludCByLCBpOwogCiAJaWYgKHJkZXYtPmdhcnQudGFibGUudnJhbS5yb2JqID09IE5VTEwpIHsKQEAgLTk4LDQ2ICs5NSw1MCBAQAogCXIgPSByYWRlb25fZ2FydF90YWJsZV92cmFtX3BpbihyZGV2KTsKIAlpZiAocikKIAkJcmV0dXJuIHI7CisJLyogRW5hYmxlIGJ1cyBtYXN0ZXIgKi8KKwl0bXAgPSBSUkVHMzIoUl8wMDAwNENfQlVTX0NOVEwpICYgQ18wMDAwNENfQlVTX01BU1RFUl9ESVM7CisJV1JFRzMyKFJfMDAwMDRDX0JVU19DTlRMLCB0bXApOwogCS8qIEZJWE1FOiBzZXR1cCBkZWZhdWx0IHBhZ2UgKi8KLQlXUkVHMzJfTUMoUlM2MDBfTUNfUFQwX0NOVEwsCi0JCSAoUlM2MDBfRUZGRUNUSVZFX0wyX0NBQ0hFX1NJWkUoNikgfAotCQkgIFJTNjAwX0VGRkVDVElWRV9MMl9RVUVVRV9TSVpFKDYpKSk7CisJV1JFRzMyX01DKFJfMDAwMTAwX01DX1BUMF9DTlRMLAorCQkgKFNfMDAwMTAwX0VGRkVDVElWRV9MMl9DQUNIRV9TSVpFKDYpIHwKKwkJICBTXzAwMDEwMF9FRkZFQ1RJVkVfTDJfUVVFVUVfU0laRSg2KSkpOwogCWZvciAoaSA9IDA7IGkgPCAxOTsgaSsrKSB7Ci0JCVdSRUczMl9NQyhSUzYwMF9NQ19QVDBfQ0xJRU5UMF9DTlRMICsgaSwKLQkJCSAoUlM2MDBfRU5BQkxFX1RSQU5TTEFUSU9OX01PREVfT1ZFUlJJREUgfAotCQkJICBSUzYwMF9TWVNURU1fQUNDRVNTX01PREVfSU5fU1lTIHwKLQkJCSAgUlM2MDBfU1lTVEVNX0FQRVJUVVJFX1VOTUFQUEVEX0FDQ0VTU19ERUZBVUxUX1BBR0UgfAotCQkJICBSUzYwMF9FRkZFQ1RJVkVfTDFfQ0FDSEVfU0laRSgzKSB8Ci0JCQkgIFJTNjAwX0VOQUJMRV9GUkFHTUVOVF9QUk9DRVNTSU5HIHwKLQkJCSAgUlM2MDBfRUZGRUNUSVZFX0wxX1FVRVVFX1NJWkUoMykpKTsKKwkJV1JFRzMyX01DKFJfMDAwMTZDX01DX1BUMF9DTElFTlQwX0NOVEwgKyBpLAorCQkJU18wMDAxNkNfRU5BQkxFX1RSQU5TTEFUSU9OX01PREVfT1ZFUlJJREUoMSkgfAorCQkJU18wMDAxNkNfU1lTVEVNX0FDQ0VTU19NT0RFX01BU0soCisJCQkJVl8wMDAxNkNfU1lTVEVNX0FDQ0VTU19NT0RFX0lOX1NZUykgfAorCQkJU18wMDAxNkNfU1lTVEVNX0FQRVJUVVJFX1VOTUFQUEVEX0FDQ0VTUygKKwkJCQlWXzAwMDE2Q19TWVNURU1fQVBFUlRVUkVfVU5NQVBQRURfREVGQVVMVF9QQUdFKSB8CisJCQlTXzAwMDE2Q19FRkZFQ1RJVkVfTDFfQ0FDSEVfU0laRSgxKSB8CisJCQlTXzAwMDE2Q19FTkFCTEVfRlJBR01FTlRfUFJPQ0VTU0lORygxKSB8CisJCQlTXzAwMDE2Q19FRkZFQ1RJVkVfTDFfUVVFVUVfU0laRSgxKSk7CiAJfQogCiAJLyogU3lzdGVtIGNvbnRleHQgbWFwIHRvIEdBUlQgc3BhY2UgKi8KLQlXUkVHMzJfTUMoUlM2MDBfTUNfUFQwX1NZU1RFTV9BUEVSVFVSRV9MT1dfQUREUiwgcmRldi0+bWMuZ3R0X2xvY2F0aW9uKTsKLQl0bXAgPSByZGV2LT5tYy5ndHRfbG9jYXRpb24gKyByZGV2LT5tYy5ndHRfc2l6ZSAtIDE7Ci0JV1JFRzMyX01DKFJTNjAwX01DX1BUMF9TWVNURU1fQVBFUlRVUkVfSElHSF9BRERSLCB0bXApOworCVdSRUczMl9NQyhSXzAwMDExMl9NQ19QVDBfU1lTVEVNX0FQRVJUVVJFX0xPV19BRERSLCByZGV2LT5tYy5ndHRfc3RhcnQpOworCVdSRUczMl9NQyhSXzAwMDExNF9NQ19QVDBfU1lTVEVNX0FQRVJUVVJFX0hJR0hfQUREUiwgcmRldi0+bWMuZ3R0X2VuZCk7CiAKIAkvKiBlbmFibGUgZmlyc3QgY29udGV4dCAqLwotCVdSRUczMl9NQyhSUzYwMF9NQ19QVDBfQ09OVEVYVDBfRkxBVF9TVEFSVF9BRERSLCByZGV2LT5tYy5ndHRfbG9jYXRpb24pOwotCXRtcCA9IHJkZXYtPm1jLmd0dF9sb2NhdGlvbiArIHJkZXYtPm1jLmd0dF9zaXplIC0gMTsKLQlXUkVHMzJfTUMoUlM2MDBfTUNfUFQwX0NPTlRFWFQwX0ZMQVRfRU5EX0FERFIsIHRtcCk7Ci0JV1JFRzMyX01DKFJTNjAwX01DX1BUMF9DT05URVhUMF9DTlRMLAotCQkgKFJTNjAwX0VOQUJMRV9QQUdFX1RBQkxFIHwgUlM2MDBfUEFHRV9UQUJMRV9UWVBFX0ZMQVQpKTsKKwlXUkVHMzJfTUMoUl8wMDAxM0NfTUNfUFQwX0NPTlRFWFQwX0ZMQVRfU1RBUlRfQUREUiwgcmRldi0+bWMuZ3R0X3N0YXJ0KTsKKwlXUkVHMzJfTUMoUl8wMDAxNENfTUNfUFQwX0NPTlRFWFQwX0ZMQVRfRU5EX0FERFIsIHJkZXYtPm1jLmd0dF9lbmQpOworCVdSRUczMl9NQyhSXzAwMDEwMl9NQ19QVDBfQ09OVEVYVDBfQ05UTCwKKwkJCVNfMDAwMTAyX0VOQUJMRV9QQUdFX1RBQkxFKDEpIHwKKwkJCVNfMDAwMTAyX1BBR0VfVEFCTEVfREVQVEgoVl8wMDAxMDJfUEFHRV9UQUJMRV9GTEFUKSk7CiAJLyogZGlzYWJsZSBhbGwgb3RoZXIgY29udGV4dHMgKi8KIAlmb3IgKGkgPSAxOyBpIDwgODsgaSsrKSB7Ci0JCVdSRUczMl9NQyhSUzYwMF9NQ19QVDBfQ09OVEVYVDBfQ05UTCArIGksIDApOworCQlXUkVHMzJfTUMoUl8wMDAxMDJfTUNfUFQwX0NPTlRFWFQwX0NOVEwgKyBpLCAwKTsKIAl9CiAKIAkvKiBzZXR1cCB0aGUgcGFnZSB0YWJsZSAqLwotCVdSRUczMl9NQyhSUzYwMF9NQ19QVDBfQ09OVEVYVDBfRkxBVF9CQVNFX0FERFIsCi0JCSByZGV2LT5nYXJ0LnRhYmxlX2FkZHIpOwotCVdSRUczMl9NQyhSUzYwMF9NQ19QVDBfQ09OVEVYVDBfREVGQVVMVF9SRUFEX0FERFIsIDApOworCVdSRUczMl9NQyhSXzAwMDEyQ19NQ19QVDBfQ09OVEVYVDBfRkxBVF9CQVNFX0FERFIsCisJCQlyZGV2LT5nYXJ0LnRhYmxlX2FkZHIpOworCVdSRUczMl9NQyhSXzAwMDExQ19NQ19QVDBfQ09OVEVYVDBfREVGQVVMVF9SRUFEX0FERFIsIDApOwogCiAJLyogZW5hYmxlIHBhZ2UgdGFibGVzICovCi0JdG1wID0gUlJFRzMyX01DKFJTNjAwX01DX1BUMF9DTlRMKTsKLQlXUkVHMzJfTUMoUlM2MDBfTUNfUFQwX0NOVEwsICh0bXAgfCBSUzYwMF9FTkFCTEVfUFQpKTsKLQl0bXAgPSBSUkVHMzJfTUMoUlM2MDBfTUNfQ05UTDEpOwotCVdSRUczMl9NQyhSUzYwMF9NQ19DTlRMMSwgKHRtcCB8IFJTNjAwX0VOQUJMRV9QQUdFX1RBQkxFUykpOworCXRtcCA9IFJSRUczMl9NQyhSXzAwMDEwMF9NQ19QVDBfQ05UTCk7CisJV1JFRzMyX01DKFJfMDAwMTAwX01DX1BUMF9DTlRMLCAodG1wIHwgU18wMDAxMDBfRU5BQkxFX1BUKDEpKSk7CisJdG1wID0gUlJFRzMyX01DKFJfMDAwMDA5X01DX0NOVEwxKTsKKwlXUkVHMzJfTUMoUl8wMDAwMDlfTUNfQ05UTDEsICh0bXAgfCBTXzAwMDAwOV9FTkFCTEVfUEFHRV9UQUJMRVMoMSkpKTsKIAlyczYwMF9nYXJ0X3RsYl9mbHVzaChyZGV2KTsKIAlyZGV2LT5nYXJ0LnJlYWR5ID0gdHJ1ZTsKIAlyZXR1cm4gMDsKQEAgLTE0OCwxMCArMTQ5LDkgQEAKIAl1aW50MzJfdCB0bXA7CiAKIAkvKiBGSVhNRTogZGlzYWJsZSBvdXQgb2YgZ2FydCBhY2Nlc3MgKi8KLQlXUkVHMzJfTUMoUlM2MDBfTUNfUFQwX0NOVEwsIDApOwotCXRtcCA9IFJSRUczMl9NQyhSUzYwMF9NQ19DTlRMMSk7Ci0JdG1wICY9IH5SUzYwMF9FTkFCTEVfUEFHRV9UQUJMRVM7Ci0JV1JFRzMyX01DKFJTNjAwX01DX0NOVEwxLCB0bXApOworCVdSRUczMl9NQyhSXzAwMDEwMF9NQ19QVDBfQ05UTCwgMCk7CisJdG1wID0gUlJFRzMyX01DKFJfMDAwMDA5X01DX0NOVEwxKTsKKwlXUkVHMzJfTUMoUl8wMDAwMDlfTUNfQ05UTDEsIHRtcCAmIENfMDAwMDA5X0VOQUJMRV9QQUdFX1RBQkxFUyk7CiAJaWYgKHJkZXYtPmdhcnQudGFibGUudnJhbS5yb2JqKSB7CiAJCXJhZGVvbl9vYmplY3Rfa3VubWFwKHJkZXYtPmdhcnQudGFibGUudnJhbS5yb2JqKTsKIAkJcmFkZW9uX29iamVjdF91bnBpbihyZGV2LT5nYXJ0LnRhYmxlLnZyYW0ucm9iaik7CkBAIC0xODUsMTI5ICsxODUsNjEgQEAKIAlyZXR1cm4gMDsKIH0KIAotCi0vKgotICogTUMuCi0gKi8KLXZvaWQgcnM2MDBfbWNfZGlzYWJsZV9jbGllbnRzKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQotewotCXVuc2lnbmVkIHRtcDsKLQotCWlmIChyMTAwX2d1aV93YWl0X2Zvcl9pZGxlKHJkZXYpKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIkZhaWxlZCB0byB3YWl0IEdVSSBpZGxlIHdoaWxlICIKLQkJICAgICAgICJwcm9ncmFtbWluZyBwaXBlcy4gQmFkIHRoaW5ncyBtaWdodCBoYXBwZW4uXG4iKTsKLQl9Ci0KLQlyYWRlb25fYXZpdm9fdmdhX3JlbmRlcl9kaXNhYmxlKHJkZXYpOwotCi0JdG1wID0gUlJFRzMyKEFWSVZPX0QxVkdBX0NPTlRST0wpOwotCVdSRUczMihBVklWT19EMVZHQV9DT05UUk9MLCB0bXAgJiB+QVZJVk9fRFZHQV9DT05UUk9MX01PREVfRU5BQkxFKTsKLQl0bXAgPSBSUkVHMzIoQVZJVk9fRDJWR0FfQ09OVFJPTCk7Ci0JV1JFRzMyKEFWSVZPX0QyVkdBX0NPTlRST0wsIHRtcCAmIH5BVklWT19EVkdBX0NPTlRST0xfTU9ERV9FTkFCTEUpOwotCi0JdG1wID0gUlJFRzMyKEFWSVZPX0QxQ1JUQ19DT05UUk9MKTsKLQlXUkVHMzIoQVZJVk9fRDFDUlRDX0NPTlRST0wsIHRtcCAmIH5BVklWT19DUlRDX0VOKTsKLQl0bXAgPSBSUkVHMzIoQVZJVk9fRDJDUlRDX0NPTlRST0wpOwotCVdSRUczMihBVklWT19EMkNSVENfQ09OVFJPTCwgdG1wICYgfkFWSVZPX0NSVENfRU4pOwotCi0JLyogbWFrZSBzdXJlIGFsbCBwcmV2aW91cyB3cml0ZSBnb3QgdGhyb3VnaCAqLwotCXRtcCA9IFJSRUczMihBVklWT19EMkNSVENfQ09OVFJPTCk7Ci0KLQltZGVsYXkoMSk7Ci19Ci0KLWludCByczYwMF9tY19pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQotewotCXVpbnQzMl90IHRtcDsKLQlpbnQgcjsKLQotCWlmIChyMTAwX2RlYnVnZnNfcmJibV9pbml0KHJkZXYpKSB7Ci0JCURSTV9FUlJPUigiRmFpbGVkIHRvIHJlZ2lzdGVyIGRlYnVnZnMgZmlsZSBmb3IgUkJCTSAhXG4iKTsKLQl9Ci0KLQlyczYwMF9ncHVfaW5pdChyZGV2KTsKLQlyczYwMF9nYXJ0X2Rpc2FibGUocmRldik7Ci0KLQkvKiBTZXR1cCBHUFUgbWVtb3J5IHNwYWNlICovCi0JcmRldi0+bWMudnJhbV9sb2NhdGlvbiA9IDB4RkZGRkZGRkZVTDsKLQlyZGV2LT5tYy5ndHRfbG9jYXRpb24gPSAweEZGRkZGRkZGVUw7Ci0JciA9IHJhZGVvbl9tY19zZXR1cChyZGV2KTsKLQlpZiAocikgewotCQlyZXR1cm4gcjsKLQl9Ci0KLQkvKiBQcm9ncmFtIEdQVSBtZW1vcnkgc3BhY2UgKi8KLQkvKiBFbmFibGUgYnVzIG1hc3RlciAqLwotCXRtcCA9IFJSRUczMihSQURFT05fQlVTX0NOVEwpICYgflJTNjAwX0JVU19NQVNURVJfRElTOwotCVdSRUczMihSQURFT05fQlVTX0NOVEwsIHRtcCk7Ci0JLyogRklYTUU6IFdoYXQgZG9lcyBBR1AgbWVhbnMgZm9yIHN1Y2ggY2hpcHNldCA/ICovCi0JV1JFRzMyX01DKFJTNjAwX01DX0FHUF9MT0NBVElPTiwgMHgwRkZGRkZGRik7Ci0JLyogRklYTUU6IGFyZSB0aGlzIEFHUCByZWcgaW4gaW5kaXJlY3QgTUMgcmFuZ2UgPyAqLwotCVdSRUczMl9NQyhSUzYwMF9NQ19BR1BfQkFTRSwgMCk7Ci0JV1JFRzMyX01DKFJTNjAwX01DX0FHUF9CQVNFXzIsIDApOwotCXJzNjAwX21jX2Rpc2FibGVfY2xpZW50cyhyZGV2KTsKLQlpZiAocnM2MDBfbWNfd2FpdF9mb3JfaWRsZShyZGV2KSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJGYWlsZWQgdG8gd2FpdCBNQyBpZGxlIHdoaWxlICIKLQkJICAgICAgICJwcm9ncmFtbWluZyBwaXBlcy4gQmFkIHRoaW5ncyBtaWdodCBoYXBwZW4uXG4iKTsKLQl9Ci0JdG1wID0gcmRldi0+bWMudnJhbV9sb2NhdGlvbiArIHJkZXYtPm1jLm1jX3ZyYW1fc2l6ZSAtIDE7Ci0JdG1wID0gUkVHX1NFVChSUzYwMF9NQ19GQl9UT1AsIHRtcCA+PiAxNik7Ci0JdG1wIHw9IFJFR19TRVQoUlM2MDBfTUNfRkJfU1RBUlQsIHJkZXYtPm1jLnZyYW1fbG9jYXRpb24gPj4gMTYpOwotCVdSRUczMl9NQyhSUzYwMF9NQ19GQl9MT0NBVElPTiwgdG1wKTsKLQlXUkVHMzIoUlM2OTBfSERQX0ZCX0xPQ0FUSU9OLCByZGV2LT5tYy52cmFtX2xvY2F0aW9uID4+IDE2KTsKLQlyZXR1cm4gMDsKLX0KLQotdm9pZCByczYwMF9tY19maW5pKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQotewotfQotCi0KLS8qCi0gKiBJbnRlcnJ1cHRzCi0gKi8KIGludCByczYwMF9pcnFfc2V0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewogCXVpbnQzMl90IHRtcCA9IDA7CiAJdWludDMyX3QgbW9kZV9pbnQgPSAwOwogCiAJaWYgKHJkZXYtPmlycS5zd19pbnQpIHsKLQkJdG1wIHw9IFJBREVPTl9TV19JTlRfRU5BQkxFOworCQl0bXAgfD0gU18wMDAwNDBfU1dfSU5UX0VOKDEpOwogCX0KIAlpZiAocmRldi0+aXJxLmNydGNfdmJsYW5rX2ludFswXSkgewotCQltb2RlX2ludCB8PSBBVklWT19EMU1PREVfSU5UX01BU0s7CisJCW1vZGVfaW50IHw9IFNfMDA2NTQwX0QxTU9ERV9WQkxBTktfSU5UX01BU0soMSk7CiAJfQogCWlmIChyZGV2LT5pcnEuY3J0Y192YmxhbmtfaW50WzFdKSB7Ci0JCW1vZGVfaW50IHw9IEFWSVZPX0QyTU9ERV9JTlRfTUFTSzsKKwkJbW9kZV9pbnQgfD0gU18wMDY1NDBfRDJNT0RFX1ZCTEFOS19JTlRfTUFTSygxKTsKIAl9Ci0JV1JFRzMyKFJBREVPTl9HRU5fSU5UX0NOVEwsIHRtcCk7Ci0JV1JFRzMyKEFWSVZPX0R4TU9ERV9JTlRfTUFTSywgbW9kZV9pbnQpOworCVdSRUczMihSXzAwMDA0MF9HRU5fSU5UX0NOVEwsIHRtcCk7CisJV1JFRzMyKFJfMDA2NTQwX0R4TU9ERV9JTlRfTUFTSywgbW9kZV9pbnQpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW5saW5lIHVpbnQzMl90IHJzNjAwX2lycV9hY2soc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHUzMiAqcjUwMF9kaXNwX2ludCkKIHsKLQl1aW50MzJfdCBpcnFzID0gUlJFRzMyKFJBREVPTl9HRU5fSU5UX1NUQVRVUyk7Ci0JdWludDMyX3QgaXJxX21hc2sgPSBSQURFT05fU1dfSU5UX1RFU1Q7CisJdWludDMyX3QgaXJxcyA9IFJSRUczMihSXzAwMDA0NF9HRU5fSU5UX1NUQVRVUyk7CisJdWludDMyX3QgaXJxX21hc2sgPSB+Q18wMDAwNDRfU1dfSU5UOwogCi0JaWYgKGlycXMgJiBBVklWT19ESVNQTEFZX0lOVF9TVEFUVVMpIHsKLQkJKnI1MDBfZGlzcF9pbnQgPSBSUkVHMzIoQVZJVk9fRElTUF9JTlRFUlJVUFRfU1RBVFVTKTsKLQkJaWYgKCpyNTAwX2Rpc3BfaW50ICYgQVZJVk9fRDFfVkJMQU5LX0lOVEVSUlVQVCkgewotCQkJV1JFRzMyKEFWSVZPX0QxTU9ERV9WQkxBTktfU1RBVFVTLCBBVklWT19WQkxBTktfQUNLKTsKKwlpZiAoR18wMDAwNDRfRElTUExBWV9JTlRfU1RBVChpcnFzKSkgeworCQkqcjUwMF9kaXNwX2ludCA9IFJSRUczMihSXzAwN0VEQ19ESVNQX0lOVEVSUlVQVF9TVEFUVVMpOworCQlpZiAoR18wMDdFRENfTEJfRDFfVkJMQU5LX0lOVEVSUlVQVCgqcjUwMF9kaXNwX2ludCkpIHsKKwkJCVdSRUczMihSXzAwNjUzNF9EMU1PREVfVkJMQU5LX1NUQVRVUywKKwkJCQlTXzAwNjUzNF9EMU1PREVfVkJMQU5LX0FDSygxKSk7CiAJCX0KLQkJaWYgKCpyNTAwX2Rpc3BfaW50ICYgQVZJVk9fRDJfVkJMQU5LX0lOVEVSUlVQVCkgewotCQkJV1JFRzMyKEFWSVZPX0QyTU9ERV9WQkxBTktfU1RBVFVTLCBBVklWT19WQkxBTktfQUNLKTsKKwkJaWYgKEdfMDA3RURDX0xCX0QyX1ZCTEFOS19JTlRFUlJVUFQoKnI1MDBfZGlzcF9pbnQpKSB7CisJCQlXUkVHMzIoUl8wMDZEMzRfRDJNT0RFX1ZCTEFOS19TVEFUVVMsCisJCQkJU18wMDZEMzRfRDJNT0RFX1ZCTEFOS19BQ0soMSkpOwogCQl9CiAJfSBlbHNlIHsKIAkJKnI1MDBfZGlzcF9pbnQgPSAwOwogCX0KIAogCWlmIChpcnFzKSB7Ci0JCVdSRUczMihSQURFT05fR0VOX0lOVF9TVEFUVVMsIGlycXMpOworCQlXUkVHMzIoUl8wMDAwNDRfR0VOX0lOVF9TVEFUVVMsIGlycXMpOwogCX0KIAlyZXR1cm4gaXJxcyAmIGlycV9tYXNrOwogfQogCit2b2lkIHJzNjAwX2lycV9kaXNhYmxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCXUzMiB0bXA7CisKKwlXUkVHMzIoUl8wMDAwNDBfR0VOX0lOVF9DTlRMLCAwKTsKKwlXUkVHMzIoUl8wMDY1NDBfRHhNT0RFX0lOVF9NQVNLLCAwKTsKKwkvKiBXYWl0IGFuZCBhY2tub3dsZWRnZSBpcnEgKi8KKwltZGVsYXkoMSk7CisJcnM2MDBfaXJxX2FjayhyZGV2LCAmdG1wKTsKK30KKwogaW50IHJzNjAwX2lycV9wcm9jZXNzKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewogCXVpbnQzMl90IHN0YXR1czsKQEAgLTMxOSwxNiArMjUxLDEzIEBACiAJfQogCXdoaWxlIChzdGF0dXMgfHwgcjUwMF9kaXNwX2ludCkgewogCQkvKiBTVyBpbnRlcnJ1cHQgKi8KLQkJaWYgKHN0YXR1cyAmIFJBREVPTl9TV19JTlRfVEVTVCkgeworCQlpZiAoR18wMDAwNDBfU1dfSU5UX0VOKHN0YXR1cykpCiAJCQlyYWRlb25fZmVuY2VfcHJvY2VzcyhyZGV2KTsKLQkJfQogCQkvKiBWZXJ0aWNhbCBibGFuayBpbnRlcnJ1cHRzICovCi0JCWlmIChyNTAwX2Rpc3BfaW50ICYgQVZJVk9fRDFfVkJMQU5LX0lOVEVSUlVQVCkgeworCQlpZiAoR18wMDdFRENfTEJfRDFfVkJMQU5LX0lOVEVSUlVQVChyNTAwX2Rpc3BfaW50KSkKIAkJCWRybV9oYW5kbGVfdmJsYW5rKHJkZXYtPmRkZXYsIDApOwotCQl9Ci0JCWlmIChyNTAwX2Rpc3BfaW50ICYgQVZJVk9fRDJfVkJMQU5LX0lOVEVSUlVQVCkgeworCQlpZiAoR18wMDdFRENfTEJfRDJfVkJMQU5LX0lOVEVSUlVQVChyNTAwX2Rpc3BfaW50KSkKIAkJCWRybV9oYW5kbGVfdmJsYW5rKHJkZXYtPmRkZXYsIDEpOwotCQl9CiAJCXN0YXR1cyA9IHJzNjAwX2lycV9hY2socmRldiwgJnI1MDBfZGlzcF9pbnQpOwogCX0KIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CkBAIC0zMzcsNjcgKzI2NiwzNCBAQAogdTMyIHJzNjAwX2dldF92YmxhbmtfY291bnRlcihzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgaW50IGNydGMpCiB7CiAJaWYgKGNydGMgPT0gMCkKLQkJcmV0dXJuIFJSRUczMihBVklWT19EMUNSVENfRlJBTUVfQ09VTlQpOworCQlyZXR1cm4gUlJFRzMyKFJfMDA2MEE0X0QxQ1JUQ19TVEFUVVNfRlJBTUVfQ09VTlQpOwogCWVsc2UKLQkJcmV0dXJuIFJSRUczMihBVklWT19EMkNSVENfRlJBTUVfQ09VTlQpOwotfQotCi0KLS8qCi0gKiBHbG9iYWwgR1BVIGZ1bmN0aW9ucwotICovCi12b2lkIHJzNjAwX2Rpc2FibGVfdmdhKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQotewotCXVuc2lnbmVkIHRtcDsKLQotCVdSRUczMigweDMzMCwgMCk7Ci0JV1JFRzMyKDB4MzM4LCAwKTsKLQl0bXAgPSBSUkVHMzIoMHgzMDApOwotCXRtcCAmPSB+KDMgPDwgMTYpOwotCVdSRUczMigweDMwMCwgdG1wKTsKLQlXUkVHMzIoMHgzMDgsICgxIDw8IDgpKTsKLQlXUkVHMzIoMHgzMTAsIHJkZXYtPm1jLnZyYW1fbG9jYXRpb24pOwotCVdSRUczMigweDU5NCwgMCk7CisJCXJldHVybiBSUkVHMzIoUl8wMDY4QTRfRDJDUlRDX1NUQVRVU19GUkFNRV9DT1VOVCk7CiB9CiAKIGludCByczYwMF9tY193YWl0X2Zvcl9pZGxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewogCXVuc2lnbmVkIGk7Ci0JdWludDMyX3QgdG1wOwogCiAJZm9yIChpID0gMDsgaSA8IHJkZXYtPnVzZWNfdGltZW91dDsgaSsrKSB7Ci0JCS8qIHJlYWQgTUNfU1RBVFVTICovCi0JCXRtcCA9IFJSRUczMl9NQyhSUzYwMF9NQ19TVEFUVVMpOwotCQlpZiAodG1wICYgUlM2MDBfTUNfU1RBVFVTX0lETEUpIHsKKwkJaWYgKEdfMDAwMDAwX01DX0lETEUoUlJFRzMyX01DKFJfMDAwMDAwX01DX1NUQVRVUykpKQogCQkJcmV0dXJuIDA7Ci0JCX0KLQkJRFJNX1VERUxBWSgxKTsKKwkJdWRlbGF5KDEpOwogCX0KIAlyZXR1cm4gLTE7CiB9CiAKLXZvaWQgcnM2MDBfZXJyYXRhKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQotewotCXJkZXYtPnBsbF9lcnJhdGEgPSAwOwotfQotCiB2b2lkIHJzNjAwX2dwdV9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewogCS8qIEZJWE1FOiBIRFAgc2FtZSBwbGFjZSBvbiByczYwMCA/ICovCiAJcjEwMF9oZHBfcmVzZXQocmRldik7Ci0JcnM2MDBfZGlzYWJsZV92Z2EocmRldik7CiAJLyogRklYTUU6IGlzIHRoaXMgY29ycmVjdCA/ICovCiAJcjQyMF9waXBlc19pbml0KHJkZXYpOwotCWlmIChyczYwMF9tY193YWl0X2Zvcl9pZGxlKHJkZXYpKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIkZhaWxlZCB0byB3YWl0IE1DIGlkbGUgd2hpbGUgIgotCQkgICAgICAgInByb2dyYW1taW5nIHBpcGVzLiBCYWQgdGhpbmdzIG1pZ2h0IGhhcHBlbi5cbiIpOwotCX0KKwkvKiBXYWl0IGZvciBtYyBpZGxlICovCisJaWYgKHJzNjAwX21jX3dhaXRfZm9yX2lkbGUocmRldikpCisJCWRldl93YXJuKHJkZXYtPmRldiwgIldhaXQgTUMgaWRsZSB0aW1lb3V0IGJlZm9yZSB1cGRhdGluZyBNQy5cbiIpOwogfQogCi0KLS8qCi0gKiBWUkFNIGluZm8uCi0gKi8KIHZvaWQgcnM2MDBfdnJhbV9pbmZvKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewogCS8qIEZJWE1FOiB0byBkbyBvciBpcyB0aGVzZSB2YWx1ZXMgc2FuZSA/ICovCkBAIC00MTAsMzEgKzMwNiwyMDYgQEAKIAkvKiBGSVhNRTogaW1wbGVtZW50LCBzaG91bGQgdGhpcyBiZSBsaWtlIHJzNjkwID8gKi8KIH0KIAotCi0vKgotICogSW5kaXJlY3QgcmVnaXN0ZXJzIGFjY2Vzc29yCi0gKi8KIHVpbnQzMl90IHJzNjAwX21jX3JyZWcoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHVpbnQzMl90IHJlZykKIHsKLQl1aW50MzJfdCByOwotCi0JV1JFRzMyKFJTNjAwX01DX0lOREVYLAotCSAgICAgICAoKHJlZyAmIFJTNjAwX01DX0FERFJfTUFTSykgfCBSUzYwMF9NQ19JTkRfQ0lURl9BUkIwKSk7Ci0JciA9IFJSRUczMihSUzYwMF9NQ19EQVRBKTsKLQlyZXR1cm4gcjsKKwlXUkVHMzIoUl8wMDAwNzBfTUNfSU5EX0lOREVYLCBTXzAwMDA3MF9NQ19JTkRfQUREUihyZWcpIHwKKwkJU18wMDAwNzBfTUNfSU5EX0NJVEZfQVJCMCgxKSk7CisJcmV0dXJuIFJSRUczMihSXzAwMDA3NF9NQ19JTkRfREFUQSk7CiB9CiAKIHZvaWQgcnM2MDBfbWNfd3JlZyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgdWludDMyX3QgcmVnLCB1aW50MzJfdCB2KQogewotCVdSRUczMihSUzYwMF9NQ19JTkRFWCwKLQkJUlM2MDBfTUNfSU5EX1dSX0VOIHwgUlM2MDBfTUNfSU5EX0NJVEZfQVJCMCB8Ci0JCSgocmVnKSAmIFJTNjAwX01DX0FERFJfTUFTSykpOwotCVdSRUczMihSUzYwMF9NQ19EQVRBLCB2KTsKKwlXUkVHMzIoUl8wMDAwNzBfTUNfSU5EX0lOREVYLCBTXzAwMDA3MF9NQ19JTkRfQUREUihyZWcpIHwKKwkJU18wMDAwNzBfTUNfSU5EX0NJVEZfQVJCMCgxKSB8IFNfMDAwMDcwX01DX0lORF9XUl9FTigxKSk7CisJV1JFRzMyKFJfMDAwMDc0X01DX0lORF9EQVRBLCB2KTsKK30KKwordm9pZCByczYwMF9kZWJ1Z2ZzKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCWlmIChyMTAwX2RlYnVnZnNfcmJibV9pbml0KHJkZXYpKQorCQlEUk1fRVJST1IoIkZhaWxlZCB0byByZWdpc3RlciBkZWJ1Z2ZzIGZpbGUgZm9yIFJCQk0gIVxuIik7Cit9CisKK3ZvaWQgcnM2MDBfc2V0X3NhZmVfcmVnaXN0ZXJzKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCXJkZXYtPmNvbmZpZy5yMzAwLnJlZ19zYWZlX2JtID0gcnM2MDBfcmVnX3NhZmVfYm07CisJcmRldi0+Y29uZmlnLnIzMDAucmVnX3NhZmVfYm1fc2l6ZSA9IEFSUkFZX1NJWkUocnM2MDBfcmVnX3NhZmVfYm0pOworfQorCitzdGF0aWMgdm9pZCByczYwMF9tY19wcm9ncmFtKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCXN0cnVjdCBydjUxNV9tY19zYXZlIHNhdmU7CisKKwkvKiBTdG9wcyBhbGwgbWMgY2xpZW50cyAqLworCXJ2NTE1X21jX3N0b3AocmRldiwgJnNhdmUpOworCisJLyogV2FpdCBmb3IgbWMgaWRsZSAqLworCWlmIChyczYwMF9tY193YWl0X2Zvcl9pZGxlKHJkZXYpKQorCQlkZXZfd2FybihyZGV2LT5kZXYsICJXYWl0IE1DIGlkbGUgdGltZW91dCBiZWZvcmUgdXBkYXRpbmcgTUMuXG4iKTsKKworCS8qIEZJWE1FOiBXaGF0IGRvZXMgQUdQIG1lYW5zIGZvciBzdWNoIGNoaXBzZXQgPyAqLworCVdSRUczMl9NQyhSXzAwMDAwNV9NQ19BR1BfTE9DQVRJT04sIDB4MEZGRkZGRkYpOworCVdSRUczMl9NQyhSXzAwMDAwNl9BR1BfQkFTRSwgMCk7CisJV1JFRzMyX01DKFJfMDAwMDA3X0FHUF9CQVNFXzIsIDApOworCS8qIFByb2dyYW0gTUMgKi8KKwlXUkVHMzJfTUMoUl8wMDAwMDRfTUNfRkJfTE9DQVRJT04sCisJCQlTXzAwMDAwNF9NQ19GQl9TVEFSVChyZGV2LT5tYy52cmFtX3N0YXJ0ID4+IDE2KSB8CisJCQlTXzAwMDAwNF9NQ19GQl9UT1AocmRldi0+bWMudnJhbV9lbmQgPj4gMTYpKTsKKwlXUkVHMzIoUl8wMDAxMzRfSERQX0ZCX0xPQ0FUSU9OLAorCQlTXzAwMDEzNF9IRFBfRkJfU1RBUlQocmRldi0+bWMudnJhbV9zdGFydCA+PiAxNikpOworCisJcnY1MTVfbWNfcmVzdW1lKHJkZXYsICZzYXZlKTsKK30KKworc3RhdGljIGludCByczYwMF9zdGFydHVwKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCWludCByOworCisJcnM2MDBfbWNfcHJvZ3JhbShyZGV2KTsKKwkvKiBSZXN1bWUgY2xvY2sgKi8KKwlydjUxNV9jbG9ja19zdGFydHVwKHJkZXYpOworCS8qIEluaXRpYWxpemUgR1BVIGNvbmZpZ3VyYXRpb24gKCMgcGlwZXMsIC4uLikgKi8KKwlyczYwMF9ncHVfaW5pdChyZGV2KTsKKwkvKiBJbml0aWFsaXplIEdBUlQgKGluaXRpYWxpemUgYWZ0ZXIgVFRNIHNvIHdlIGNhbiBhbGxvY2F0ZQorCSAqIG1lbW9yeSB0aHJvdWdoIFRUTSBidXQgZmluYWxpemUgYWZ0ZXIgVFRNKSAqLworCXIgPSByczYwMF9nYXJ0X2VuYWJsZShyZGV2KTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisJLyogRW5hYmxlIElSUSAqLworCXJkZXYtPmlycS5zd19pbnQgPSB0cnVlOworCXJzNjAwX2lycV9zZXQocmRldik7CisJLyogMU0gcmluZyBidWZmZXIgKi8KKwlyID0gcjEwMF9jcF9pbml0KHJkZXYsIDEwMjQgKiAxMDI0KTsKKwlpZiAocikgeworCQlkZXZfZXJyKHJkZXYtPmRldiwgImZhaWxsZWQgaW5pdGlhbGl6aW5nIENQICglZCkuXG4iLCByKTsKKwkJcmV0dXJuIHI7CisJfQorCXIgPSByMTAwX3diX2luaXQocmRldik7CisJaWYgKHIpCisJCWRldl9lcnIocmRldi0+ZGV2LCAiZmFpbGxlZCBpbml0aWFsaXppbmcgV0IgKCVkKS5cbiIsIHIpOworCXIgPSByMTAwX2liX2luaXQocmRldik7CisJaWYgKHIpIHsKKwkJZGV2X2VycihyZGV2LT5kZXYsICJmYWlsbGVkIGluaXRpYWxpemluZyBJQiAoJWQpLlxuIiwgcik7CisJCXJldHVybiByOworCX0KKwlyZXR1cm4gMDsKK30KKworaW50IHJzNjAwX3Jlc3VtZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwkvKiBNYWtlIHN1ciBHQVJUIGFyZSBub3Qgd29ya2luZyAqLworCXJzNjAwX2dhcnRfZGlzYWJsZShyZGV2KTsKKwkvKiBSZXN1bWUgY2xvY2sgYmVmb3JlIGRvaW5nIHJlc2V0ICovCisJcnY1MTVfY2xvY2tfc3RhcnR1cChyZGV2KTsKKwkvKiBSZXNldCBncHUgYmVmb3JlIHBvc3Rpbmcgb3RoZXJ3aXNlIEFUT00gd2lsbCBlbnRlciBpbmZpbml0ZSBsb29wICovCisJaWYgKHJhZGVvbl9ncHVfcmVzZXQocmRldikpIHsKKwkJZGV2X3dhcm4ocmRldi0+ZGV2LCAiR1BVIHJlc2V0IGZhaWxlZCAhICgweEU0MD0weCUwOFgsIDB4N0MwPTB4JTA4WClcbiIsCisJCQlSUkVHMzIoUl8wMDBFNDBfUkJCTV9TVEFUVVMpLAorCQkJUlJFRzMyKFJfMDAwN0MwX0NQX1NUQVQpKTsKKwl9CisJLyogcG9zdCAqLworCWF0b21fYXNpY19pbml0KHJkZXYtPm1vZGVfaW5mby5hdG9tX2NvbnRleHQpOworCS8qIFJlc3VtZSBjbG9jayBhZnRlciBwb3N0aW5nICovCisJcnY1MTVfY2xvY2tfc3RhcnR1cChyZGV2KTsKKwlyZXR1cm4gcnM2MDBfc3RhcnR1cChyZGV2KTsKK30KKworaW50IHJzNjAwX3N1c3BlbmQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJcjEwMF9jcF9kaXNhYmxlKHJkZXYpOworCXIxMDBfd2JfZGlzYWJsZShyZGV2KTsKKwlyczYwMF9pcnFfZGlzYWJsZShyZGV2KTsKKwlyczYwMF9nYXJ0X2Rpc2FibGUocmRldik7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgcnM2MDBfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwlyczYwMF9zdXNwZW5kKHJkZXYpOworCXIxMDBfY3BfZmluaShyZGV2KTsKKwlyMTAwX3diX2ZpbmkocmRldik7CisJcjEwMF9pYl9maW5pKHJkZXYpOworCXJhZGVvbl9nZW1fZmluaShyZGV2KTsKKwlyczYwMF9nYXJ0X2ZpbmkocmRldik7CisJcmFkZW9uX2lycV9rbXNfZmluaShyZGV2KTsKKwlyYWRlb25fZmVuY2VfZHJpdmVyX2ZpbmkocmRldik7CisJcmFkZW9uX29iamVjdF9maW5pKHJkZXYpOworCXJhZGVvbl9hdG9tYmlvc19maW5pKHJkZXYpOworCWtmcmVlKHJkZXYtPmJpb3MpOworCXJkZXYtPmJpb3MgPSBOVUxMOwogfQogCiBpbnQgcnM2MDBfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKLQlyZGV2LT5jb25maWcucjMwMC5yZWdfc2FmZV9ibSA9IHJzNjAwX3JlZ19zYWZlX2JtOwotCXJkZXYtPmNvbmZpZy5yMzAwLnJlZ19zYWZlX2JtX3NpemUgPSBBUlJBWV9TSVpFKHJzNjAwX3JlZ19zYWZlX2JtKTsKKwlpbnQgcjsKKworCS8qIERpc2FibGUgVkdBICovCisJcnY1MTVfdmdhX3JlbmRlcl9kaXNhYmxlKHJkZXYpOworCS8qIEluaXRpYWxpemUgc2NyYXRjaCByZWdpc3RlcnMgKi8KKwlyYWRlb25fc2NyYXRjaF9pbml0KHJkZXYpOworCS8qIEluaXRpYWxpemUgc3VyZmFjZSByZWdpc3RlcnMgKi8KKwlyYWRlb25fc3VyZmFjZV9pbml0KHJkZXYpOworCS8qIEJJT1MgKi8KKwlpZiAoIXJhZGVvbl9nZXRfYmlvcyhyZGV2KSkgeworCQlpZiAoQVNJQ19JU19BVklWTyhyZGV2KSkKKwkJCXJldHVybiAtRUlOVkFMOworCX0KKwlpZiAocmRldi0+aXNfYXRvbV9iaW9zKSB7CisJCXIgPSByYWRlb25fYXRvbWJpb3NfaW5pdChyZGV2KTsKKwkJaWYgKHIpCisJCQlyZXR1cm4gcjsKKwl9IGVsc2UgeworCQlkZXZfZXJyKHJkZXYtPmRldiwgIkV4cGVjdGluZyBhdG9tYmlvcyBmb3IgUlM2MDAgR1BVXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCS8qIFJlc2V0IGdwdSBiZWZvcmUgcG9zdGluZyBvdGhlcndpc2UgQVRPTSB3aWxsIGVudGVyIGluZmluaXRlIGxvb3AgKi8KKwlpZiAocmFkZW9uX2dwdV9yZXNldChyZGV2KSkgeworCQlkZXZfd2FybihyZGV2LT5kZXYsCisJCQkiR1BVIHJlc2V0IGZhaWxlZCAhICgweEU0MD0weCUwOFgsIDB4N0MwPTB4JTA4WClcbiIsCisJCQlSUkVHMzIoUl8wMDBFNDBfUkJCTV9TVEFUVVMpLAorCQkJUlJFRzMyKFJfMDAwN0MwX0NQX1NUQVQpKTsKKwl9CisJLyogY2hlY2sgaWYgY2FyZHMgYXJlIHBvc3RlZCBvciBub3QgKi8KKwlpZiAoIXJhZGVvbl9jYXJkX3Bvc3RlZChyZGV2KSAmJiByZGV2LT5iaW9zKSB7CisJCURSTV9JTkZPKCJHUFUgbm90IHBvc3RlZC4gcG9zdGluZyBub3cuLi5cbiIpOworCQlhdG9tX2FzaWNfaW5pdChyZGV2LT5tb2RlX2luZm8uYXRvbV9jb250ZXh0KTsKKwl9CisJLyogSW5pdGlhbGl6ZSBjbG9ja3MgKi8KKwlyYWRlb25fZ2V0X2Nsb2NrX2luZm8ocmRldi0+ZGRldik7CisJLyogR2V0IHZyYW0gaW5mb3JtYXRpb25zICovCisJcnM2MDBfdnJhbV9pbmZvKHJkZXYpOworCS8qIEluaXRpYWxpemUgbWVtb3J5IGNvbnRyb2xsZXIgKGFsc28gdGVzdCBBR1ApICovCisJciA9IHI0MjBfbWNfaW5pdChyZGV2KTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisJcnM2MDBfZGVidWdmcyhyZGV2KTsKKwkvKiBGZW5jZSBkcml2ZXIgKi8KKwlyID0gcmFkZW9uX2ZlbmNlX2RyaXZlcl9pbml0KHJkZXYpOworCWlmIChyKQorCQlyZXR1cm4gcjsKKwlyID0gcmFkZW9uX2lycV9rbXNfaW5pdChyZGV2KTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisJLyogTWVtb3J5IG1hbmFnZXIgKi8KKwlyID0gcmFkZW9uX29iamVjdF9pbml0KHJkZXYpOworCWlmIChyKQorCQlyZXR1cm4gcjsKKwlyID0gcnM2MDBfZ2FydF9pbml0KHJkZXYpOworCWlmIChyKQorCQlyZXR1cm4gcjsKKwlyczYwMF9zZXRfc2FmZV9yZWdpc3RlcnMocmRldik7CisJcmRldi0+YWNjZWxfd29ya2luZyA9IHRydWU7CisJciA9IHJzNjAwX3N0YXJ0dXAocmRldik7CisJaWYgKHIpIHsKKwkJLyogU29tZXRoaW5ncyB3YW50IHdyb250IHdpdGggdGhlIGFjY2VsIGluaXQgc3RvcCBhY2NlbCAqLworCQlkZXZfZXJyKHJkZXYtPmRldiwgIkRpc2FibGluZyBHUFUgYWNjZWxlcmF0aW9uXG4iKTsKKwkJcnM2MDBfc3VzcGVuZChyZGV2KTsKKwkJcjEwMF9jcF9maW5pKHJkZXYpOworCQlyMTAwX3diX2ZpbmkocmRldik7CisJCXIxMDBfaWJfZmluaShyZGV2KTsKKwkJcnM2MDBfZ2FydF9maW5pKHJkZXYpOworCQlyYWRlb25faXJxX2ttc19maW5pKHJkZXYpOworCQlyZGV2LT5hY2NlbF93b3JraW5nID0gZmFsc2U7CisJfQogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yczYwMGQuaCBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnM2MDBkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODEzMDg5MgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnM2MDBkLmgKQEAgLTAsMCArMSw0NzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwOCBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAwOCBSZWQgSGF0IEluYy4KKyAqIENvcHlyaWdodCAyMDA5IEplcm9tZSBHbGlzc2UuCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQ09QWVJJR0hUIEhPTERFUihTKSBPUiBBVVRIT1IoUykgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IKKyAqIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAorICogQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCisgKiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKgorICogQXV0aG9yczogRGF2ZSBBaXJsaWUKKyAqICAgICAgICAgIEFsZXggRGV1Y2hlcgorICogICAgICAgICAgSmVyb21lIEdsaXNzZQorICovCisjaWZuZGVmIF9fUlM2MDBEX0hfXworI2RlZmluZSBfX1JTNjAwRF9IX18KKworLyogUmVnaXN0ZXJzICovCisjZGVmaW5lIFJfMDAwMDQwX0dFTl9JTlRfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDQwCisjZGVmaW5lICAgU18wMDAwNDBfRElTUExBWV9JTlRfU1RBVFVTKHgpICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDApCisjZGVmaW5lICAgR18wMDAwNDBfRElTUExBWV9JTlRfU1RBVFVTKHgpICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwNDBfRElTUExBWV9JTlRfU1RBVFVTICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRQorI2RlZmluZSAgIFNfMDAwMDQwX0RNQV9WSVBIMF9JTlRfRU4oeCkgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxMikKKyNkZWZpbmUgICBHXzAwMDA0MF9ETUFfVklQSDBfSU5UX0VOKHgpICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxMikgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwNDBfRE1BX1ZJUEgwX0lOVF9FTiAgICAgICAgICAgICAgICAgICAgMHhGRkZGRUZGRgorI2RlZmluZSAgIFNfMDAwMDQwX0NSVEMyX1ZTWU5DKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCA2KQorI2RlZmluZSAgIEdfMDAwMDQwX0NSVEMyX1ZTWU5DKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDYpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQwX0NSVEMyX1ZTWU5DICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGQkYKKyNkZWZpbmUgICBTXzAwMDA0MF9TTkFQU0hPVDIoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgNykKKyNkZWZpbmUgICBHXzAwMDA0MF9TTkFQU0hPVDIoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiA3KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDA0MF9TTkFQU0hPVDIgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRjdGCisjZGVmaW5lICAgU18wMDAwNDBfQ1JUQzJfVkJMQU5LKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDkpCisjZGVmaW5lICAgR18wMDAwNDBfQ1JUQzJfVkJMQU5LKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gOSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwNDBfQ1JUQzJfVkJMQU5LICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkRGRgorI2RlZmluZSAgIFNfMDAwMDQwX0ZQMl9ERVRFQ1QoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxMCkKKyNkZWZpbmUgICBHXzAwMDA0MF9GUDJfREVURUNUKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwNDBfRlAyX0RFVEVDVCAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkJGRgorI2RlZmluZSAgIFNfMDAwMDQwX1ZTWU5DX0RJRkZfT1ZFUl9MSU1JVCh4KSAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxMSkKKyNkZWZpbmUgICBHXzAwMDA0MF9WU1lOQ19ESUZGX09WRVJfTElNSVQoeCkgICAgICAgICAgICAoKCh4KSA+PiAxMSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwNDBfVlNZTkNfRElGRl9PVkVSX0xJTUlUICAgICAgICAgICAgICAgMHhGRkZGRjdGRgorI2RlZmluZSAgIFNfMDAwMDQwX0RNQV9WSVBIMV9JTlRfRU4oeCkgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxMykKKyNkZWZpbmUgICBHXzAwMDA0MF9ETUFfVklQSDFfSU5UX0VOKHgpICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxMykgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwNDBfRE1BX1ZJUEgxX0lOVF9FTiAgICAgICAgICAgICAgICAgICAgMHhGRkZGREZGRgorI2RlZmluZSAgIFNfMDAwMDQwX0RNQV9WSVBIMl9JTlRfRU4oeCkgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxNCkKKyNkZWZpbmUgICBHXzAwMDA0MF9ETUFfVklQSDJfSU5UX0VOKHgpICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwNDBfRE1BX1ZJUEgyX0lOVF9FTiAgICAgICAgICAgICAgICAgICAgMHhGRkZGQkZGRgorI2RlZmluZSAgIFNfMDAwMDQwX0RNQV9WSVBIM19JTlRfRU4oeCkgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxNSkKKyNkZWZpbmUgICBHXzAwMDA0MF9ETUFfVklQSDNfSU5UX0VOKHgpICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwNDBfRE1BX1ZJUEgzX0lOVF9FTiAgICAgICAgICAgICAgICAgICAgMHhGRkZGN0ZGRgorI2RlZmluZSAgIFNfMDAwMDQwX0kyQ19JTlRfRU4oeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxNykKKyNkZWZpbmUgICBHXzAwMDA0MF9JMkNfSU5UX0VOKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNykgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwNDBfSTJDX0lOVF9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZERkZGRgorI2RlZmluZSAgIFNfMDAwMDQwX0dVSV9JRExFKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxOSkKKyNkZWZpbmUgICBHXzAwMDA0MF9HVUlfSURMRSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxOSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwNDBfR1VJX0lETEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkY3RkZGRgorI2RlZmluZSAgIFNfMDAwMDQwX1ZJUEhfSU5UX0VOKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNCkKKyNkZWZpbmUgICBHXzAwMDA0MF9WSVBIX0lOVF9FTih4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwNDBfVklQSF9JTlRfRU4gICAgICAgICAgICAgICAgICAgICAgICAgMHhGRUZGRkZGRgorI2RlZmluZSAgIFNfMDAwMDQwX1NXX0lOVF9FTih4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNSkKKyNkZWZpbmUgICBHXzAwMDA0MF9TV19JTlRfRU4oeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwNDBfU1dfSU5UX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGREZGRkZGRgorI2RlZmluZSAgIFNfMDAwMDQwX0dFWVNFUlZJTExFKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNykKKyNkZWZpbmUgICBHXzAwMDA0MF9HRVlTRVJWSUxMRSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNykgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwNDBfR0VZU0VSVklMTEUgICAgICAgICAgICAgICAgICAgICAgICAgMHhGN0ZGRkZGRgorI2RlZmluZSAgIFNfMDAwMDQwX0hEQ1BfQVVUSE9SSVpFRF9JTlQoeCkgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyOCkKKyNkZWZpbmUgICBHXzAwMDA0MF9IRENQX0FVVEhPUklaRURfSU5UKHgpICAgICAgICAgICAgICAoKCh4KSA+PiAyOCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwNDBfSERDUF9BVVRIT1JJWkVEX0lOVCAgICAgICAgICAgICAgICAgMHhFRkZGRkZGRgorI2RlZmluZSAgIFNfMDAwMDQwX0RWSV9JMkNfSU5UKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyOSkKKyNkZWZpbmUgICBHXzAwMDA0MF9EVklfSTJDX0lOVCh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyOSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwNDBfRFZJX0kyQ19JTlQgICAgICAgICAgICAgICAgICAgICAgICAgMHhERkZGRkZGRgorI2RlZmluZSAgIFNfMDAwMDQwX0dVSURNQSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAzMCkKKyNkZWZpbmUgICBHXzAwMDA0MF9HVUlETUEoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAzMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwNDBfR1VJRE1BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhCRkZGRkZGRgorI2RlZmluZSAgIFNfMDAwMDQwX1ZJRERNQSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAzMSkKKyNkZWZpbmUgICBHXzAwMDA0MF9WSURETUEoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAzMSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwNDBfVklERE1BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg3RkZGRkZGRgorI2RlZmluZSBSXzAwMDA0NF9HRU5fSU5UX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICAweDAwMDA0NAorI2RlZmluZSAgIFNfMDAwMDQ0X0RJU1BMQVlfSU5UX1NUQVQoeCkgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAwKQorI2RlZmluZSAgIEdfMDAwMDQ0X0RJU1BMQVlfSU5UX1NUQVQoeCkgICAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQ0X0RJU1BMQVlfSU5UX1NUQVQgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkUKKyNkZWZpbmUgICBTXzAwMDA0NF9WR0FfSU5UX1NUQVQoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMSkKKyNkZWZpbmUgICBHXzAwMDA0NF9WR0FfSU5UX1NUQVQoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDA0NF9WR0FfSU5UX1NUQVQgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZECisjZGVmaW5lICAgU18wMDAwNDRfQ0FQMF9JTlRfQUNUSVZFKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDgpCisjZGVmaW5lICAgR18wMDAwNDRfQ0FQMF9JTlRfQUNUSVZFKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gOCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwNDRfQ0FQMF9JTlRfQUNUSVZFICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkVGRgorI2RlZmluZSAgIFNfMDAwMDQ0X0RNQV9WSVBIMF9JTlQoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxMikKKyNkZWZpbmUgICBHXzAwMDA0NF9ETUFfVklQSDBfSU5UKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxMikgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwNDRfRE1BX1ZJUEgwX0lOVCAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRUZGRgorI2RlZmluZSAgIFNfMDAwMDQ0X0RNQV9WSVBIMV9JTlQoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxMykKKyNkZWZpbmUgICBHXzAwMDA0NF9ETUFfVklQSDFfSU5UKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxMykgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwNDRfRE1BX1ZJUEgxX0lOVCAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGREZGRgorI2RlZmluZSAgIFNfMDAwMDQ0X0RNQV9WSVBIMl9JTlQoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxNCkKKyNkZWZpbmUgICBHXzAwMDA0NF9ETUFfVklQSDJfSU5UKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwNDRfRE1BX1ZJUEgyX0lOVCAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGQkZGRgorI2RlZmluZSAgIFNfMDAwMDQ0X0RNQV9WSVBIM19JTlQoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxNSkKKyNkZWZpbmUgICBHXzAwMDA0NF9ETUFfVklQSDNfSU5UKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwNDRfRE1BX1ZJUEgzX0lOVCAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGN0ZGRgorI2RlZmluZSAgIFNfMDAwMDQ0X01DX1BST0JFX0ZBVUxUX1NUQVQoeCkgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxNikKKyNkZWZpbmUgICBHXzAwMDA0NF9NQ19QUk9CRV9GQVVMVF9TVEFUKHgpICAgICAgICAgICAgICAoKCh4KSA+PiAxNikgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwNDRfTUNfUFJPQkVfRkFVTFRfU1RBVCAgICAgICAgICAgICAgICAgMHhGRkZFRkZGRgorI2RlZmluZSAgIFNfMDAwMDQ0X0kyQ19JTlQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxNykKKyNkZWZpbmUgICBHXzAwMDA0NF9JMkNfSU5UKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNykgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwNDRfSTJDX0lOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZERkZGRgorI2RlZmluZSAgIFNfMDAwMDQ0X1NDUkFUQ0hfSU5UX1NUQVQoeCkgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxOCkKKyNkZWZpbmUgICBHXzAwMDA0NF9TQ1JBVENIX0lOVF9TVEFUKHgpICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxOCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwNDRfU0NSQVRDSF9JTlRfU1RBVCAgICAgICAgICAgICAgICAgICAgMHhGRkZCRkZGRgorI2RlZmluZSAgIFNfMDAwMDQ0X0dVSV9JRExFX1NUQVQoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxOSkKKyNkZWZpbmUgICBHXzAwMDA0NF9HVUlfSURMRV9TVEFUKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxOSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwNDRfR1VJX0lETEVfU1RBVCAgICAgICAgICAgICAgICAgICAgICAgMHhGRkY3RkZGRgorI2RlZmluZSAgIFNfMDAwMDQ0X0FUSV9PVkVSRFJJVkVfSU5UX1NUQVQoeCkgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyMCkKKyNkZWZpbmUgICBHXzAwMDA0NF9BVElfT1ZFUkRSSVZFX0lOVF9TVEFUKHgpICAgICAgICAgICAoKCh4KSA+PiAyMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwNDRfQVRJX09WRVJEUklWRV9JTlRfU1RBVCAgICAgICAgICAgICAgMHhGRkVGRkZGRgorI2RlZmluZSAgIFNfMDAwMDQ0X01DX1BST1RFQ1RJT05fRkFVTFRfU1RBVCh4KSAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyMSkKKyNkZWZpbmUgICBHXzAwMDA0NF9NQ19QUk9URUNUSU9OX0ZBVUxUX1NUQVQoeCkgICAgICAgICAoKCh4KSA+PiAyMSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwNDRfTUNfUFJPVEVDVElPTl9GQVVMVF9TVEFUICAgICAgICAgICAgMHhGRkRGRkZGRgorI2RlZmluZSAgIFNfMDAwMDQ0X1JCQk1fUkVBRF9JTlRfU1RBVCh4KSAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyMikKKyNkZWZpbmUgICBHXzAwMDA0NF9SQkJNX1JFQURfSU5UX1NUQVQoeCkgICAgICAgICAgICAgICAoKCh4KSA+PiAyMikgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwNDRfUkJCTV9SRUFEX0lOVF9TVEFUICAgICAgICAgICAgICAgICAgMHhGRkJGRkZGRgorI2RlZmluZSAgIFNfMDAwMDQ0X0NCX0NPTlRFWFRfU1dJVENIX1NUQVQoeCkgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyMykKKyNkZWZpbmUgICBHXzAwMDA0NF9DQl9DT05URVhUX1NXSVRDSF9TVEFUKHgpICAgICAgICAgICAoKCh4KSA+PiAyMykgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwNDRfQ0JfQ09OVEVYVF9TV0lUQ0hfU1RBVCAgICAgICAgICAgICAgMHhGRjdGRkZGRgorI2RlZmluZSAgIFNfMDAwMDQ0X1ZJUEhfSU5UKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNCkKKyNkZWZpbmUgICBHXzAwMDA0NF9WSVBIX0lOVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwNDRfVklQSF9JTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRUZGRkZGRgorI2RlZmluZSAgIFNfMDAwMDQ0X1NXX0lOVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNSkKKyNkZWZpbmUgICBHXzAwMDA0NF9TV19JTlQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwNDRfU1dfSU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGREZGRkZGRgorI2RlZmluZSAgIFNfMDAwMDQ0X1NXX0lOVF9TRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNikKKyNkZWZpbmUgICBHXzAwMDA0NF9TV19JTlRfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNikgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwNDRfU1dfSU5UX1NFVCAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGQkZGRkZGRgorI2RlZmluZSAgIFNfMDAwMDQ0X0lEQ1RfSU5UX1NUQVQoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNykKKyNkZWZpbmUgICBHXzAwMDA0NF9JRENUX0lOVF9TVEFUKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNykgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwNDRfSURDVF9JTlRfU1RBVCAgICAgICAgICAgICAgICAgICAgICAgMHhGN0ZGRkZGRgorI2RlZmluZSAgIFNfMDAwMDQ0X0dVSURNQV9TVEFUKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAzMCkKKyNkZWZpbmUgICBHXzAwMDA0NF9HVUlETUFfU1RBVCh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAzMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwNDRfR1VJRE1BX1NUQVQgICAgICAgICAgICAgICAgICAgICAgICAgMHhCRkZGRkZGRgorI2RlZmluZSAgIFNfMDAwMDQ0X1ZJRERNQV9TVEFUKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAzMSkKKyNkZWZpbmUgICBHXzAwMDA0NF9WSURETUFfU1RBVCh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAzMSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwNDRfVklERE1BX1NUQVQgICAgICAgICAgICAgICAgICAgICAgICAgMHg3RkZGRkZGRgorI2RlZmluZSBSXzAwMDA0Q19CVVNfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA0QworI2RlZmluZSAgIFNfMDAwMDRDX0JVU19NQVNURVJfRElTKHgpICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxNCkKKyNkZWZpbmUgICBHXzAwMDA0Q19CVVNfTUFTVEVSX0RJUyh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwNENfQlVTX01BU1RFUl9ESVMgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGQkZGRgorI2RlZmluZSAgIFNfMDAwMDRDX0JVU19NU0lfUkVBUk0oeCkgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyMCkKKyNkZWZpbmUgICBHXzAwMDA0Q19CVVNfTVNJX1JFQVJNKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwNENfQlVTX01TSV9SRUFSTSAgICAgICAgICAgICAgICAgICAgICAgMHhGRkVGRkZGRgorI2RlZmluZSBSXzAwMDA3MF9NQ19JTkRfSU5ERVggICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA3MAorI2RlZmluZSAgIFNfMDAwMDcwX01DX0lORF9BRERSKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhGRkZGKSA8PCAwKQorI2RlZmluZSAgIEdfMDAwMDcwX01DX0lORF9BRERSKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHhGRkZGKQorI2RlZmluZSAgIENfMDAwMDcwX01DX0lORF9BRERSICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRjAwMDAKKyNkZWZpbmUgICBTXzAwMDA3MF9NQ19JTkRfU0VRX1JCU18wKHgpICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTYpCisjZGVmaW5lICAgR18wMDAwNzBfTUNfSU5EX1NFUV9SQlNfMCh4KSAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTYpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDcwX01DX0lORF9TRVFfUkJTXzAgICAgICAgICAgICAgICAgICAgIDB4RkZGRUZGRkYKKyNkZWZpbmUgICBTXzAwMDA3MF9NQ19JTkRfU0VRX1JCU18xKHgpICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTcpCisjZGVmaW5lICAgR18wMDAwNzBfTUNfSU5EX1NFUV9SQlNfMSh4KSAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTcpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDcwX01DX0lORF9TRVFfUkJTXzEgICAgICAgICAgICAgICAgICAgIDB4RkZGREZGRkYKKyNkZWZpbmUgICBTXzAwMDA3MF9NQ19JTkRfU0VRX1JCU18yKHgpICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTgpCisjZGVmaW5lICAgR18wMDAwNzBfTUNfSU5EX1NFUV9SQlNfMih4KSAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTgpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDcwX01DX0lORF9TRVFfUkJTXzIgICAgICAgICAgICAgICAgICAgIDB4RkZGQkZGRkYKKyNkZWZpbmUgICBTXzAwMDA3MF9NQ19JTkRfU0VRX1JCU18zKHgpICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTkpCisjZGVmaW5lICAgR18wMDAwNzBfTUNfSU5EX1NFUV9SQlNfMyh4KSAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTkpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDcwX01DX0lORF9TRVFfUkJTXzMgICAgICAgICAgICAgICAgICAgIDB4RkZGN0ZGRkYKKyNkZWZpbmUgICBTXzAwMDA3MF9NQ19JTkRfQUlDX1JCUyh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjApCisjZGVmaW5lICAgR18wMDAwNzBfTUNfSU5EX0FJQ19SQlMoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjApICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDcwX01DX0lORF9BSUNfUkJTICAgICAgICAgICAgICAgICAgICAgIDB4RkZFRkZGRkYKKyNkZWZpbmUgICBTXzAwMDA3MF9NQ19JTkRfQ0lURl9BUkIwKHgpICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjEpCisjZGVmaW5lICAgR18wMDAwNzBfTUNfSU5EX0NJVEZfQVJCMCh4KSAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDcwX01DX0lORF9DSVRGX0FSQjAgICAgICAgICAgICAgICAgICAgIDB4RkZERkZGRkYKKyNkZWZpbmUgICBTXzAwMDA3MF9NQ19JTkRfQ0lURl9BUkIxKHgpICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjIpCisjZGVmaW5lICAgR18wMDAwNzBfTUNfSU5EX0NJVEZfQVJCMSh4KSAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjIpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDcwX01DX0lORF9DSVRGX0FSQjEgICAgICAgICAgICAgICAgICAgIDB4RkZCRkZGRkYKKyNkZWZpbmUgICBTXzAwMDA3MF9NQ19JTkRfV1JfRU4oeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjMpCisjZGVmaW5lICAgR18wMDAwNzBfTUNfSU5EX1dSX0VOKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjMpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDcwX01DX0lORF9XUl9FTiAgICAgICAgICAgICAgICAgICAgICAgIDB4RkY3RkZGRkYKKyNkZWZpbmUgICBTXzAwMDA3MF9NQ19JTkRfUkRfSU5WKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjQpCisjZGVmaW5lICAgR18wMDAwNzBfTUNfSU5EX1JEX0lOVih4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjQpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDcwX01DX0lORF9SRF9JTlYgICAgICAgICAgICAgICAgICAgICAgIDB4RkVGRkZGRkYKKyNkZWZpbmUgUl8wMDAwNzRfTUNfSU5EX0RBVEEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNzQKKyNkZWZpbmUgICBTXzAwMDA3NF9NQ19JTkRfREFUQSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RkZGRkZGRkYpIDw8IDApCisjZGVmaW5lICAgR18wMDAwNzRfTUNfSU5EX0RBVEEoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweEZGRkZGRkZGKQorI2RlZmluZSAgIENfMDAwMDc0X01DX0lORF9EQVRBICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgUl8wMDAxMzRfSERQX0ZCX0xPQ0FUSU9OICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMzQKKyNkZWZpbmUgICBTXzAwMDEzNF9IRFBfRkJfU1RBUlQoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RkZGRikgPDwgMCkKKyNkZWZpbmUgICBHXzAwMDEzNF9IRFBfRkJfU1RBUlQoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4RkZGRikKKyNkZWZpbmUgICBDXzAwMDEzNF9IRFBfRkJfU1RBUlQgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkYwMDAwCisjZGVmaW5lIFJfMDAwN0MwX0NQX1NUQVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwN0MwCisjZGVmaW5lICAgU18wMDA3QzBfTVJVX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDApCisjZGVmaW5lICAgR18wMDA3QzBfTVJVX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDA3QzBfTVJVX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRQorI2RlZmluZSAgIFNfMDAwN0MwX01XVV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxKQorI2RlZmluZSAgIEdfMDAwN0MwX01XVV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX01XVV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkQKKyNkZWZpbmUgICBTXzAwMDdDMF9SU0lVX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMikKKyNkZWZpbmUgICBHXzAwMDdDMF9SU0lVX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9SU0lVX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZCCisjZGVmaW5lICAgU18wMDA3QzBfUkNJVV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDMpCisjZGVmaW5lICAgR18wMDA3QzBfUkNJVV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMykgJiAweDEpCisjZGVmaW5lICAgQ18wMDA3QzBfUkNJVV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGNworI2RlZmluZSAgIFNfMDAwN0MwX0NTRl9QUklNQVJZX0JVU1koeCkgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCA5KQorI2RlZmluZSAgIEdfMDAwN0MwX0NTRl9QUklNQVJZX0JVU1koeCkgICAgICAgICAgICAgICAgICgoKHgpID4+IDkpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NTRl9QUklNQVJZX0JVU1kgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZERkYKKyNkZWZpbmUgICBTXzAwMDdDMF9DU0ZfSU5ESVJFQ1RfQlVTWSh4KSAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTApCisjZGVmaW5lICAgR18wMDA3QzBfQ1NGX0lORElSRUNUX0JVU1koeCkgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTApICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NTRl9JTkRJUkVDVF9CVVNZICAgICAgICAgICAgICAgICAgIDB4RkZGRkZCRkYKKyNkZWZpbmUgICBTXzAwMDdDMF9DU1FfUFJJTUFSWV9CVVNZKHgpICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTEpCisjZGVmaW5lICAgR18wMDA3QzBfQ1NRX1BSSU1BUllfQlVTWSh4KSAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NTUV9QUklNQVJZX0JVU1kgICAgICAgICAgICAgICAgICAgIDB4RkZGRkY3RkYKKyNkZWZpbmUgICBTXzAwMDdDMF9DU1FfSU5ESVJFQ1RfQlVTWSh4KSAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTIpCisjZGVmaW5lICAgR18wMDA3QzBfQ1NRX0lORElSRUNUX0JVU1koeCkgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTIpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NTUV9JTkRJUkVDVF9CVVNZICAgICAgICAgICAgICAgICAgIDB4RkZGRkVGRkYKKyNkZWZpbmUgICBTXzAwMDdDMF9DU0lfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTMpCisjZGVmaW5lICAgR18wMDA3QzBfQ1NJX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTMpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NTSV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkRGRkYKKyNkZWZpbmUgICBTXzAwMDdDMF9DU0ZfSU5ESVJFQ1QyX0JVU1koeCkgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTQpCisjZGVmaW5lICAgR18wMDA3QzBfQ1NGX0lORElSRUNUMl9CVVNZKHgpICAgICAgICAgICAgICAgKCgoeCkgPj4gMTQpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NTRl9JTkRJUkVDVDJfQlVTWSAgICAgICAgICAgICAgICAgIDB4RkZGRkJGRkYKKyNkZWZpbmUgICBTXzAwMDdDMF9DU1FfSU5ESVJFQ1QyX0JVU1koeCkgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTUpCisjZGVmaW5lICAgR18wMDA3QzBfQ1NRX0lORElSRUNUMl9CVVNZKHgpICAgICAgICAgICAgICAgKCgoeCkgPj4gMTUpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NTUV9JTkRJUkVDVDJfQlVTWSAgICAgICAgICAgICAgICAgIDB4RkZGRjdGRkYKKyNkZWZpbmUgICBTXzAwMDdDMF9HVUlETUFfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjgpCisjZGVmaW5lICAgR18wMDA3QzBfR1VJRE1BX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjgpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0dVSURNQV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgIDB4RUZGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDdDMF9WSURETUFfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjkpCisjZGVmaW5lICAgR18wMDA3QzBfVklERE1BX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjkpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX1ZJRERNQV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgIDB4REZGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDdDMF9DTURTVFJNX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMzApCisjZGVmaW5lICAgR18wMDA3QzBfQ01EU1RSTV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMzApICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NNRFNUUk1fQlVTWSAgICAgICAgICAgICAgICAgICAgICAgIDB4QkZGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDdDMF9DUF9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMzEpCisjZGVmaW5lICAgR18wMDA3QzBfQ1BfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMzEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NQX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4N0ZGRkZGRkYKKyNkZWZpbmUgUl8wMDBFNDBfUkJCTV9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDBFNDAKKyNkZWZpbmUgICBTXzAwMEU0MF9DTURGSUZPX0FWQUlMKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4N0YpIDw8IDApCisjZGVmaW5lICAgR18wMDBFNDBfQ01ERklGT19BVkFJTCh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweDdGKQorI2RlZmluZSAgIENfMDAwRTQwX0NNREZJRk9fQVZBSUwgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGODAKKyNkZWZpbmUgICBTXzAwMEU0MF9ISVJRX09OX1JCQih4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgOCkKKyNkZWZpbmUgICBHXzAwMEU0MF9ISVJRX09OX1JCQih4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiA4KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMEU0MF9ISVJRX09OX1JCQiAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRUZGCisjZGVmaW5lICAgU18wMDBFNDBfQ1BSUV9PTl9SQkIoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDkpCisjZGVmaW5lICAgR18wMDBFNDBfQ1BSUV9PTl9SQkIoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gOSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfQ1BSUV9PTl9SQkIgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkRGRgorI2RlZmluZSAgIFNfMDAwRTQwX0NGUlFfT05fUkJCKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxMCkKKyNkZWZpbmUgICBHXzAwMEU0MF9DRlJRX09OX1JCQih4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfQ0ZSUV9PTl9SQkIgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkJGRgorI2RlZmluZSAgIFNfMDAwRTQwX0hJUlFfSU5fUlRCVUYoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxMSkKKyNkZWZpbmUgICBHXzAwMEU0MF9ISVJRX0lOX1JUQlVGKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxMSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfSElSUV9JTl9SVEJVRiAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRjdGRgorI2RlZmluZSAgIFNfMDAwRTQwX0NQUlFfSU5fUlRCVUYoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxMikKKyNkZWZpbmUgICBHXzAwMEU0MF9DUFJRX0lOX1JUQlVGKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxMikgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfQ1BSUV9JTl9SVEJVRiAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRUZGRgorI2RlZmluZSAgIFNfMDAwRTQwX0NGUlFfSU5fUlRCVUYoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxMykKKyNkZWZpbmUgICBHXzAwMEU0MF9DRlJRX0lOX1JUQlVGKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxMykgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfQ0ZSUV9JTl9SVEJVRiAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGREZGRgorI2RlZmluZSAgIFNfMDAwRTQwX0NGX1BJUEVfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxNCkKKyNkZWZpbmUgICBHXzAwMEU0MF9DRl9QSVBFX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfQ0ZfUElQRV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGQkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX0VOR19FVl9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxNSkKKyNkZWZpbmUgICBHXzAwMEU0MF9FTkdfRVZfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfRU5HX0VWX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGN0ZGRgorI2RlZmluZSAgIFNfMDAwRTQwX0NQX0NNRFNUUk1fQlVTWSh4KSAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxNikKKyNkZWZpbmUgICBHXzAwMEU0MF9DUF9DTURTVFJNX0JVU1koeCkgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNikgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfQ1BfQ01EU1RSTV9CVVNZICAgICAgICAgICAgICAgICAgICAgMHhGRkZFRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX0UyX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxNykKKyNkZWZpbmUgICBHXzAwMEU0MF9FMl9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNykgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfRTJfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZERkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1JCMkRfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxOCkKKyNkZWZpbmUgICBHXzAwMEU0MF9SQjJEX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxOCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfUkIyRF9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZCRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1JCM0RfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxOSkKKyNkZWZpbmUgICBHXzAwMEU0MF9SQjNEX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxOSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfUkIzRF9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkY3RkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1ZBUF9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyMCkKKyNkZWZpbmUgICBHXzAwMEU0MF9WQVBfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfVkFQX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkVGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1JFX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyMSkKKyNkZWZpbmUgICBHXzAwMEU0MF9SRV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyMSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfUkVfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkRGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1RBTV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyMikKKyNkZWZpbmUgICBHXzAwMEU0MF9UQU1fQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyMikgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfVEFNX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkJGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1RETV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyMykKKyNkZWZpbmUgICBHXzAwMEU0MF9URE1fQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyMykgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfVERNX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRjdGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1BCX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNCkKKyNkZWZpbmUgICBHXzAwMEU0MF9QQl9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfUEJfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRUZGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1RJTV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNSkKKyNkZWZpbmUgICBHXzAwMEU0MF9USU1fQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfVElNX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGREZGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX0dBX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNikKKyNkZWZpbmUgICBHXzAwMEU0MF9HQV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNikgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfR0FfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGQkZGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX0NCQTJEX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNykKKyNkZWZpbmUgICBHXzAwMEU0MF9DQkEyRF9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNykgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfQ0JBMkRfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGN0ZGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX0dVSV9BQ1RJVkUoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAzMSkKKyNkZWZpbmUgICBHXzAwMEU0MF9HVUlfQUNUSVZFKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAzMSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfR1VJX0FDVElWRSAgICAgICAgICAgICAgICAgICAgICAgICAgMHg3RkZGRkZGRgorI2RlZmluZSBSXzAwNjBBNF9EMUNSVENfU1RBVFVTX0ZSQU1FX0NPVU5UICAgICAgICAgICAweDAwNjBBNAorI2RlZmluZSAgIFNfMDA2MEE0X0QxQ1JUQ19GUkFNRV9DT1VOVCh4KSAgICAgICAgICAgICAgICgoKHgpICYgMHhGRkZGRkYpIDw8IDApCisjZGVmaW5lICAgR18wMDYwQTRfRDFDUlRDX0ZSQU1FX0NPVU5UKHgpICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweEZGRkZGRikKKyNkZWZpbmUgICBDXzAwNjBBNF9EMUNSVENfRlJBTUVfQ09VTlQgICAgICAgICAgICAgICAgICAweEZGMDAwMDAwCisjZGVmaW5lIFJfMDA2NTM0X0QxTU9ERV9WQkxBTktfU1RBVFVTICAgICAgICAgICAgICAgIDB4MDA2NTM0CisjZGVmaW5lICAgU18wMDY1MzRfRDFNT0RFX1ZCTEFOS19PQ0NVUlJFRCh4KSAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDApCisjZGVmaW5lICAgR18wMDY1MzRfRDFNT0RFX1ZCTEFOS19PQ0NVUlJFRCh4KSAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDY1MzRfRDFNT0RFX1ZCTEFOS19PQ0NVUlJFRCAgICAgICAgICAgICAgMHhGRkZGRkZGRQorI2RlZmluZSAgIFNfMDA2NTM0X0QxTU9ERV9WQkxBTktfQUNLKHgpICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCA0KQorI2RlZmluZSAgIEdfMDA2NTM0X0QxTU9ERV9WQkxBTktfQUNLKHgpICAgICAgICAgICAgICAgICgoKHgpID4+IDQpICYgMHgxKQorI2RlZmluZSAgIENfMDA2NTM0X0QxTU9ERV9WQkxBTktfQUNLICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRUYKKyNkZWZpbmUgICBTXzAwNjUzNF9EMU1PREVfVkJMQU5LX1NUQVQoeCkgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTIpCisjZGVmaW5lICAgR18wMDY1MzRfRDFNT0RFX1ZCTEFOS19TVEFUKHgpICAgICAgICAgICAgICAgKCgoeCkgPj4gMTIpICYgMHgxKQorI2RlZmluZSAgIENfMDA2NTM0X0QxTU9ERV9WQkxBTktfU1RBVCAgICAgICAgICAgICAgICAgIDB4RkZGRkVGRkYKKyNkZWZpbmUgICBTXzAwNjUzNF9EMU1PREVfVkJMQU5LX0lOVEVSUlVQVCh4KSAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTYpCisjZGVmaW5lICAgR18wMDY1MzRfRDFNT0RFX1ZCTEFOS19JTlRFUlJVUFQoeCkgICAgICAgICAgKCgoeCkgPj4gMTYpICYgMHgxKQorI2RlZmluZSAgIENfMDA2NTM0X0QxTU9ERV9WQkxBTktfSU5URVJSVVBUICAgICAgICAgICAgIDB4RkZGRUZGRkYKKyNkZWZpbmUgUl8wMDY1NDBfRHhNT0RFX0lOVF9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMDY1NDAKKyNkZWZpbmUgICBTXzAwNjU0MF9EMU1PREVfVkJMQU5LX0lOVF9NQVNLKHgpICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMCkKKyNkZWZpbmUgICBHXzAwNjU0MF9EMU1PREVfVkJMQU5LX0lOVF9NQVNLKHgpICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwNjU0MF9EMU1PREVfVkJMQU5LX0lOVF9NQVNLICAgICAgICAgICAgICAweEZGRkZGRkZFCisjZGVmaW5lICAgU18wMDY1NDBfRDFNT0RFX1ZMSU5FX0lOVF9NQVNLKHgpICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDQpCisjZGVmaW5lICAgR18wMDY1NDBfRDFNT0RFX1ZMSU5FX0lOVF9NQVNLKHgpICAgICAgICAgICAgKCgoeCkgPj4gNCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDY1NDBfRDFNT0RFX1ZMSU5FX0lOVF9NQVNLICAgICAgICAgICAgICAgMHhGRkZGRkZFRgorI2RlZmluZSAgIFNfMDA2NTQwX0QyTU9ERV9WQkxBTktfSU5UX01BU0soeCkgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCA4KQorI2RlZmluZSAgIEdfMDA2NTQwX0QyTU9ERV9WQkxBTktfSU5UX01BU0soeCkgICAgICAgICAgICgoKHgpID4+IDgpICYgMHgxKQorI2RlZmluZSAgIENfMDA2NTQwX0QyTU9ERV9WQkxBTktfSU5UX01BU0sgICAgICAgICAgICAgIDB4RkZGRkZFRkYKKyNkZWZpbmUgICBTXzAwNjU0MF9EMk1PREVfVkxJTkVfSU5UX01BU0soeCkgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTIpCisjZGVmaW5lICAgR18wMDY1NDBfRDJNT0RFX1ZMSU5FX0lOVF9NQVNLKHgpICAgICAgICAgICAgKCgoeCkgPj4gMTIpICYgMHgxKQorI2RlZmluZSAgIENfMDA2NTQwX0QyTU9ERV9WTElORV9JTlRfTUFTSyAgICAgICAgICAgICAgIDB4RkZGRkVGRkYKKyNkZWZpbmUgICBTXzAwNjU0MF9EMU1PREVfVkJMQU5LX0NQX1NFTCh4KSAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMzApCisjZGVmaW5lICAgR18wMDY1NDBfRDFNT0RFX1ZCTEFOS19DUF9TRUwoeCkgICAgICAgICAgICAgKCgoeCkgPj4gMzApICYgMHgxKQorI2RlZmluZSAgIENfMDA2NTQwX0QxTU9ERV9WQkxBTktfQ1BfU0VMICAgICAgICAgICAgICAgIDB4QkZGRkZGRkYKKyNkZWZpbmUgICBTXzAwNjU0MF9EMk1PREVfVkJMQU5LX0NQX1NFTCh4KSAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMzEpCisjZGVmaW5lICAgR18wMDY1NDBfRDJNT0RFX1ZCTEFOS19DUF9TRUwoeCkgICAgICAgICAgICAgKCgoeCkgPj4gMzEpICYgMHgxKQorI2RlZmluZSAgIENfMDA2NTQwX0QyTU9ERV9WQkxBTktfQ1BfU0VMICAgICAgICAgICAgICAgIDB4N0ZGRkZGRkYKKyNkZWZpbmUgUl8wMDY4QTRfRDJDUlRDX1NUQVRVU19GUkFNRV9DT1VOVCAgICAgICAgICAgMHgwMDY4QTQKKyNkZWZpbmUgICBTXzAwNjhBNF9EMkNSVENfRlJBTUVfQ09VTlQoeCkgICAgICAgICAgICAgICAoKCh4KSAmIDB4RkZGRkZGKSA8PCAwKQorI2RlZmluZSAgIEdfMDA2OEE0X0QyQ1JUQ19GUkFNRV9DT1VOVCh4KSAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHhGRkZGRkYpCisjZGVmaW5lICAgQ18wMDY4QTRfRDJDUlRDX0ZSQU1FX0NPVU5UICAgICAgICAgICAgICAgICAgMHhGRjAwMDAwMAorI2RlZmluZSBSXzAwNkQzNF9EMk1PREVfVkJMQU5LX1NUQVRVUyAgICAgICAgICAgICAgICAweDAwNkQzNAorI2RlZmluZSAgIFNfMDA2RDM0X0QyTU9ERV9WQkxBTktfT0NDVVJSRUQoeCkgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAwKQorI2RlZmluZSAgIEdfMDA2RDM0X0QyTU9ERV9WQkxBTktfT0NDVVJSRUQoeCkgICAgICAgICAgICgoKHgpID4+IDApICYgMHgxKQorI2RlZmluZSAgIENfMDA2RDM0X0QyTU9ERV9WQkxBTktfT0NDVVJSRUQgICAgICAgICAgICAgIDB4RkZGRkZGRkUKKyNkZWZpbmUgICBTXzAwNkQzNF9EMk1PREVfVkJMQU5LX0FDSyh4KSAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgNCkKKyNkZWZpbmUgICBHXzAwNkQzNF9EMk1PREVfVkJMQU5LX0FDSyh4KSAgICAgICAgICAgICAgICAoKCh4KSA+PiA0KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwNkQzNF9EMk1PREVfVkJMQU5LX0FDSyAgICAgICAgICAgICAgICAgICAweEZGRkZGRkVGCisjZGVmaW5lICAgU18wMDZEMzRfRDJNT0RFX1ZCTEFOS19TVEFUKHgpICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDEyKQorI2RlZmluZSAgIEdfMDA2RDM0X0QyTU9ERV9WQkxBTktfU1RBVCh4KSAgICAgICAgICAgICAgICgoKHgpID4+IDEyKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwNkQzNF9EMk1PREVfVkJMQU5LX1NUQVQgICAgICAgICAgICAgICAgICAweEZGRkZFRkZGCisjZGVmaW5lICAgU18wMDZEMzRfRDJNT0RFX1ZCTEFOS19JTlRFUlJVUFQoeCkgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDE2KQorI2RlZmluZSAgIEdfMDA2RDM0X0QyTU9ERV9WQkxBTktfSU5URVJSVVBUKHgpICAgICAgICAgICgoKHgpID4+IDE2KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwNkQzNF9EMk1PREVfVkJMQU5LX0lOVEVSUlVQVCAgICAgICAgICAgICAweEZGRkVGRkZGCisjZGVmaW5lIFJfMDA3RURDX0RJU1BfSU5URVJSVVBUX1NUQVRVUyAgICAgICAgICAgICAgIDB4MDA3RURDCisjZGVmaW5lICAgU18wMDdFRENfTEJfRDFfVkJMQU5LX0lOVEVSUlVQVCh4KSAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDQpCisjZGVmaW5lICAgR18wMDdFRENfTEJfRDFfVkJMQU5LX0lOVEVSUlVQVCh4KSAgICAgICAgICAgKCgoeCkgPj4gNCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDdFRENfTEJfRDFfVkJMQU5LX0lOVEVSUlVQVCAgICAgICAgICAgICAgMHhGRkZGRkZFRgorI2RlZmluZSAgIFNfMDA3RURDX0xCX0QyX1ZCTEFOS19JTlRFUlJVUFQoeCkgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCA1KQorI2RlZmluZSAgIEdfMDA3RURDX0xCX0QyX1ZCTEFOS19JTlRFUlJVUFQoeCkgICAgICAgICAgICgoKHgpID4+IDUpICYgMHgxKQorI2RlZmluZSAgIENfMDA3RURDX0xCX0QyX1ZCTEFOS19JTlRFUlJVUFQgICAgICAgICAgICAgIDB4RkZGRkZGREYKKworCisvKiBNQyByZWdpc3RlcnMgKi8KKyNkZWZpbmUgUl8wMDAwMDBfTUNfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAKKyNkZWZpbmUgICBTXzAwMDAwMF9NQ19JRExFKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMCkKKyNkZWZpbmUgICBHXzAwMDAwMF9NQ19JRExFKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDAwMF9NQ19JRExFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZFCisjZGVmaW5lIFJfMDAwMDA0X01DX0ZCX0xPQ0FUSU9OICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0CisjZGVmaW5lICAgU18wMDAwMDRfTUNfRkJfU1RBUlQoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweEZGRkYpIDw8IDApCisjZGVmaW5lICAgR18wMDAwMDRfTUNfRkJfU1RBUlQoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweEZGRkYpCisjZGVmaW5lICAgQ18wMDAwMDRfTUNfRkJfU1RBUlQgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGMDAwMAorI2RlZmluZSAgIFNfMDAwMDA0X01DX0ZCX1RPUCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhGRkZGKSA8PCAxNikKKyNkZWZpbmUgICBHXzAwMDAwNF9NQ19GQl9UT1AoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNikgJiAweEZGRkYpCisjZGVmaW5lICAgQ18wMDAwMDRfTUNfRkJfVE9QICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwRkZGRgorI2RlZmluZSBSXzAwMDAwNV9NQ19BR1BfTE9DQVRJT04gICAgICAgICAgICAgICAgICAgICAweDAwMDAwNQorI2RlZmluZSAgIFNfMDAwMDA1X01DX0FHUF9TVEFSVCh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhGRkZGKSA8PCAwKQorI2RlZmluZSAgIEdfMDAwMDA1X01DX0FHUF9TVEFSVCh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHhGRkZGKQorI2RlZmluZSAgIENfMDAwMDA1X01DX0FHUF9TVEFSVCAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRjAwMDAKKyNkZWZpbmUgICBTXzAwMDAwNV9NQ19BR1BfVE9QKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RkZGRikgPDwgMTYpCisjZGVmaW5lICAgR18wMDAwMDVfTUNfQUdQX1RPUCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTYpICYgMHhGRkZGKQorI2RlZmluZSAgIENfMDAwMDA1X01DX0FHUF9UT1AgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEZGRkYKKyNkZWZpbmUgUl8wMDAwMDZfQUdQX0JBU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDYKKyNkZWZpbmUgICBTXzAwMDAwNl9BR1BfQkFTRV9BRERSKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RkZGRkZGRkYpIDw8IDApCisjZGVmaW5lICAgR18wMDAwMDZfQUdQX0JBU0VfQUREUih4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweEZGRkZGRkZGKQorI2RlZmluZSAgIENfMDAwMDA2X0FHUF9CQVNFX0FERFIgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgUl8wMDAwMDdfQUdQX0JBU0VfMiAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDcKKyNkZWZpbmUgICBTXzAwMDAwN19BR1BfQkFTRV9BRERSXzIoeCkgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RikgPDwgMCkKKyNkZWZpbmUgICBHXzAwMDAwN19BR1BfQkFTRV9BRERSXzIoeCkgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4RikKKyNkZWZpbmUgICBDXzAwMDAwN19BR1BfQkFTRV9BRERSXzIgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkYwCisjZGVmaW5lIFJfMDAwMDA5X01DX0NOVEwxICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA5CisjZGVmaW5lICAgU18wMDAwMDlfRU5BQkxFX1BBR0VfVEFCTEVTKHgpICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDI2KQorI2RlZmluZSAgIEdfMDAwMDA5X0VOQUJMRV9QQUdFX1RBQkxFUyh4KSAgICAgICAgICAgICAgICgoKHgpID4+IDI2KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDAwOV9FTkFCTEVfUEFHRV9UQUJMRVMgICAgICAgICAgICAgICAgICAweEZCRkZGRkZGCisvKiBGSVhNRSBkb24ndCBrbm93IHRoZSB2YXJpb3VzIGZpZWxkIHNpemUgbmVlZCBmZWVkYmFjayBmcm9tIEFNRCAqLworI2RlZmluZSBSXzAwMDEwMF9NQ19QVDBfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMAorI2RlZmluZSAgIFNfMDAwMTAwX0VOQUJMRV9QVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAwKQorI2RlZmluZSAgIEdfMDAwMTAwX0VOQUJMRV9QVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHgxKQorI2RlZmluZSAgIENfMDAwMTAwX0VOQUJMRV9QVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkUKKyNkZWZpbmUgICBTXzAwMDEwMF9FRkZFQ1RJVkVfTDJfQ0FDSEVfU0laRSh4KSAgICAgICAgICAoKCh4KSAmIDB4NykgPDwgMTUpCisjZGVmaW5lICAgR18wMDAxMDBfRUZGRUNUSVZFX0wyX0NBQ0hFX1NJWkUoeCkgICAgICAgICAgKCgoeCkgPj4gMTUpICYgMHg3KQorI2RlZmluZSAgIENfMDAwMTAwX0VGRkVDVElWRV9MMl9DQUNIRV9TSVpFICAgICAgICAgICAgIDB4RkZGQzdGRkYKKyNkZWZpbmUgICBTXzAwMDEwMF9FRkZFQ1RJVkVfTDJfUVVFVUVfU0laRSh4KSAgICAgICAgICAoKCh4KSAmIDB4NykgPDwgMjEpCisjZGVmaW5lICAgR18wMDAxMDBfRUZGRUNUSVZFX0wyX1FVRVVFX1NJWkUoeCkgICAgICAgICAgKCgoeCkgPj4gMjEpICYgMHg3KQorI2RlZmluZSAgIENfMDAwMTAwX0VGRkVDVElWRV9MMl9RVUVVRV9TSVpFICAgICAgICAgICAgIDB4RkYxRkZGRkYKKyNkZWZpbmUgICBTXzAwMDEwMF9JTlZBTElEQVRFX0FMTF9MMV9UTEJTKHgpICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjgpCisjZGVmaW5lICAgR18wMDAxMDBfSU5WQUxJREFURV9BTExfTDFfVExCUyh4KSAgICAgICAgICAgKCgoeCkgPj4gMjgpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMTAwX0lOVkFMSURBVEVfQUxMX0wxX1RMQlMgICAgICAgICAgICAgIDB4RUZGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDEwMF9JTlZBTElEQVRFX0wyX0NBQ0hFKHgpICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjkpCisjZGVmaW5lICAgR18wMDAxMDBfSU5WQUxJREFURV9MMl9DQUNIRSh4KSAgICAgICAgICAgICAgKCgoeCkgPj4gMjkpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMTAwX0lOVkFMSURBVEVfTDJfQ0FDSEUgICAgICAgICAgICAgICAgIDB4REZGRkZGRkYKKyNkZWZpbmUgUl8wMDAxMDJfTUNfUFQwX0NPTlRFWFQwX0NOVEwgICAgICAgICAgICAgICAgMHgwMDAxMDIKKyNkZWZpbmUgICBTXzAwMDEwMl9FTkFCTEVfUEFHRV9UQUJMRSh4KSAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMCkKKyNkZWZpbmUgICBHXzAwMDEwMl9FTkFCTEVfUEFHRV9UQUJMRSh4KSAgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDEwMl9FTkFCTEVfUEFHRV9UQUJMRSAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZFCisjZGVmaW5lICAgU18wMDAxMDJfUEFHRV9UQUJMRV9ERVBUSCh4KSAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDMpIDw8IDEpCisjZGVmaW5lICAgR18wMDAxMDJfUEFHRV9UQUJMRV9ERVBUSCh4KSAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMSkgJiAweDMpCisjZGVmaW5lICAgQ18wMDAxMDJfUEFHRV9UQUJMRV9ERVBUSCAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGOQorI2RlZmluZSAgIFZfMDAwMTAyX1BBR0VfVEFCTEVfRkxBVCAgICAgICAgICAgICAgICAgICAgIDAKKy8qIFI2MDAgZG9jdW1lbnRhdGlvbiBzdWdnZXN0IHRoYXQgdGhpcyBzaG91bGQgYmUgYSBudW1iZXIgb2YgcGFnZXMgKi8KKyNkZWZpbmUgUl8wMDAxMTJfTUNfUFQwX1NZU1RFTV9BUEVSVFVSRV9MT1dfQUREUiAgICAgMHgwMDAxMTIKKyNkZWZpbmUgUl8wMDAxMTRfTUNfUFQwX1NZU1RFTV9BUEVSVFVSRV9ISUdIX0FERFIgICAgMHgwMDAxMTQKKyNkZWZpbmUgUl8wMDAxMUNfTUNfUFQwX0NPTlRFWFQwX0RFRkFVTFRfUkVBRF9BRERSICAgMHgwMDAxMUMKKyNkZWZpbmUgUl8wMDAxMkNfTUNfUFQwX0NPTlRFWFQwX0ZMQVRfQkFTRV9BRERSICAgICAgMHgwMDAxMkMKKyNkZWZpbmUgUl8wMDAxM0NfTUNfUFQwX0NPTlRFWFQwX0ZMQVRfU1RBUlRfQUREUiAgICAgMHgwMDAxM0MKKyNkZWZpbmUgUl8wMDAxNENfTUNfUFQwX0NPTlRFWFQwX0ZMQVRfRU5EX0FERFIgICAgICAgMHgwMDAxNEMKKyNkZWZpbmUgUl8wMDAxNkNfTUNfUFQwX0NMSUVOVDBfQ05UTCAgICAgICAgICAgICAgICAgMHgwMDAxNkMKKyNkZWZpbmUgICBTXzAwMDE2Q19FTkFCTEVfVFJBTlNMQVRJT05fTU9ERV9PVkVSUklERSh4KSAoKCh4KSAmIDB4MSkgPDwgMCkKKyNkZWZpbmUgICBHXzAwMDE2Q19FTkFCTEVfVFJBTlNMQVRJT05fTU9ERV9PVkVSUklERSh4KSAoKCh4KSA+PiAwKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDE2Q19FTkFCTEVfVFJBTlNMQVRJT05fTU9ERV9PVkVSUklERSAgICAweEZGRkZGRkZFCisjZGVmaW5lICAgU18wMDAxNkNfVFJBTlNMQVRJT05fTU9ERV9PVkVSUklERSh4KSAgICAgICAgKCgoeCkgJiAweDEpIDw8IDEpCisjZGVmaW5lICAgR18wMDAxNkNfVFJBTlNMQVRJT05fTU9ERV9PVkVSUklERSh4KSAgICAgICAgKCgoeCkgPj4gMSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAxNkNfVFJBTlNMQVRJT05fTU9ERV9PVkVSUklERSAgICAgICAgICAgMHhGRkZGRkZGRAorI2RlZmluZSAgIFNfMDAwMTZDX1NZU1RFTV9BQ0NFU1NfTU9ERV9NQVNLKHgpICAgICAgICAgICgoKHgpICYgMHgzKSA8PCA4KQorI2RlZmluZSAgIEdfMDAwMTZDX1NZU1RFTV9BQ0NFU1NfTU9ERV9NQVNLKHgpICAgICAgICAgICgoKHgpID4+IDgpICYgMHgzKQorI2RlZmluZSAgIENfMDAwMTZDX1NZU1RFTV9BQ0NFU1NfTU9ERV9NQVNLICAgICAgICAgICAgIDB4RkZGRkZDRkYKKyNkZWZpbmUgICBWXzAwMDE2Q19TWVNURU1fQUNDRVNTX01PREVfUEFfT05MWSAgICAgICAgICAwCisjZGVmaW5lICAgVl8wMDAxNkNfU1lTVEVNX0FDQ0VTU19NT0RFX1VTRV9TWVNfTUFQICAgICAgMQorI2RlZmluZSAgIFZfMDAwMTZDX1NZU1RFTV9BQ0NFU1NfTU9ERV9JTl9TWVMgICAgICAgICAgIDIKKyNkZWZpbmUgICBWXzAwMDE2Q19TWVNURU1fQUNDRVNTX01PREVfTk9UX0lOX1NZUyAgICAgICAzCisjZGVmaW5lICAgU18wMDAxNkNfU1lTVEVNX0FQRVJUVVJFX1VOTUFQUEVEX0FDQ0VTUyh4KSAgKCgoeCkgJiAweDEpIDw8IDEwKQorI2RlZmluZSAgIEdfMDAwMTZDX1NZU1RFTV9BUEVSVFVSRV9VTk1BUFBFRF9BQ0NFU1MoeCkgICgoKHgpID4+IDEwKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDE2Q19TWVNURU1fQVBFUlRVUkVfVU5NQVBQRURfQUNDRVNTICAgICAweEZGRkZGQkZGCisjZGVmaW5lICAgVl8wMDAxNkNfU1lTVEVNX0FQRVJUVVJFX1VOTUFQUEVEX1BBU1NUSFJPVUdIICAwCisjZGVmaW5lICAgVl8wMDAxNkNfU1lTVEVNX0FQRVJUVVJFX1VOTUFQUEVEX0RFRkFVTFRfUEFHRSAxCisjZGVmaW5lICAgU18wMDAxNkNfRUZGRUNUSVZFX0wxX0NBQ0hFX1NJWkUoeCkgICAgICAgICAgKCgoeCkgJiAweDcpIDw8IDExKQorI2RlZmluZSAgIEdfMDAwMTZDX0VGRkVDVElWRV9MMV9DQUNIRV9TSVpFKHgpICAgICAgICAgICgoKHgpID4+IDExKSAmIDB4NykKKyNkZWZpbmUgICBDXzAwMDE2Q19FRkZFQ1RJVkVfTDFfQ0FDSEVfU0laRSAgICAgICAgICAgICAweEZGRkZDN0ZGCisjZGVmaW5lICAgU18wMDAxNkNfRU5BQkxFX0ZSQUdNRU5UX1BST0NFU1NJTkcoeCkgICAgICAgKCgoeCkgJiAweDEpIDw8IDE0KQorI2RlZmluZSAgIEdfMDAwMTZDX0VOQUJMRV9GUkFHTUVOVF9QUk9DRVNTSU5HKHgpICAgICAgICgoKHgpID4+IDE0KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDE2Q19FTkFCTEVfRlJBR01FTlRfUFJPQ0VTU0lORyAgICAgICAgICAweEZGRkZCRkZGCisjZGVmaW5lICAgU18wMDAxNkNfRUZGRUNUSVZFX0wxX1FVRVVFX1NJWkUoeCkgICAgICAgICAgKCgoeCkgJiAweDcpIDw8IDE1KQorI2RlZmluZSAgIEdfMDAwMTZDX0VGRkVDVElWRV9MMV9RVUVVRV9TSVpFKHgpICAgICAgICAgICgoKHgpID4+IDE1KSAmIDB4NykKKyNkZWZpbmUgICBDXzAwMDE2Q19FRkZFQ1RJVkVfTDFfUVVFVUVfU0laRSAgICAgICAgICAgICAweEZGRkM3RkZGCisjZGVmaW5lICAgU18wMDAxNkNfSU5WQUxJREFURV9MMV9UTEIoeCkgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDIwKQorI2RlZmluZSAgIEdfMDAwMTZDX0lOVkFMSURBVEVfTDFfVExCKHgpICAgICAgICAgICAgICAgICgoKHgpID4+IDIwKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDE2Q19JTlZBTElEQVRFX0wxX1RMQiAgICAgICAgICAgICAgICAgICAweEZGRUZGRkZGCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yczY5MC5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yczY5MC5jCmluZGV4IDBmNTg1Y2EuLjAyNWUzMjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnM2OTAuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JzNjkwLmMKQEAgLTI2LDEwNiArMjYsMjkgQEAKICAqICAgICAgICAgIEplcm9tZSBHbGlzc2UKICAqLwogI2luY2x1ZGUgImRybVAuaCIKLSNpbmNsdWRlICJyYWRlb25fcmVnLmgiCiAjaW5jbHVkZSAicmFkZW9uLmgiCi0jaW5jbHVkZSAicnM2OTByLmgiCiAjaW5jbHVkZSAiYXRvbS5oIgotI2luY2x1ZGUgImF0b20tYml0cy5oIgorI2luY2x1ZGUgInJzNjkwZC5oIgogCi0vKiByczY5MCxyczc0MCBkZXBlbmRzIG9uIDogKi8KLXZvaWQgcjEwMF9oZHBfcmVzZXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotaW50IHIzMDBfbWNfd2FpdF9mb3JfaWRsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci12b2lkIHI0MjBfcGlwZXNfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci12b2lkIHJzNDAwX2dhcnRfZGlzYWJsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci1pbnQgcnM0MDBfZ2FydF9lbmFibGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotdm9pZCByczQwMF9nYXJ0X2FkanVzdF9zaXplKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLXZvaWQgcnM2MDBfbWNfZGlzYWJsZV9jbGllbnRzKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLXZvaWQgcnM2MDBfZGlzYWJsZV92Z2Eoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotCi0vKiBUaGlzIGZpbGVzIGdhdGhlciBmdW5jdGlvbnMgc3BlY2lmaWNzIHRvIDoKLSAqIHJzNjkwLHJzNzQwCi0gKgotICogU29tZSBvZiB0aGVzZSBmdW5jdGlvbnMgbWlnaHQgYmUgdXNlZCBieSBuZXdlciBBU0lDcy4KLSAqLwotdm9pZCByczY5MF9ncHVfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci1pbnQgcnM2OTBfbWNfd2FpdF9mb3JfaWRsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci0KLQotLyoKLSAqIE1DIGZ1bmN0aW9ucy4KLSAqLwotaW50IHJzNjkwX21jX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCi17Ci0JdWludDMyX3QgdG1wOwotCWludCByOwotCi0JaWYgKHIxMDBfZGVidWdmc19yYmJtX2luaXQocmRldikpIHsKLQkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gcmVnaXN0ZXIgZGVidWdmcyBmaWxlIGZvciBSQkJNICFcbiIpOwotCX0KLQotCXJzNjkwX2dwdV9pbml0KHJkZXYpOwotCXJzNDAwX2dhcnRfZGlzYWJsZShyZGV2KTsKLQotCS8qIFNldHVwIEdQVSBtZW1vcnkgc3BhY2UgKi8KLQlyZGV2LT5tYy5ndHRfbG9jYXRpb24gPSByZGV2LT5tYy5tY192cmFtX3NpemU7Ci0JcmRldi0+bWMuZ3R0X2xvY2F0aW9uICs9IChyZGV2LT5tYy5ndHRfc2l6ZSAtIDEpOwotCXJkZXYtPm1jLmd0dF9sb2NhdGlvbiAmPSB+KHJkZXYtPm1jLmd0dF9zaXplIC0gMSk7Ci0JcmRldi0+bWMudnJhbV9sb2NhdGlvbiA9IDB4RkZGRkZGRkZVTDsKLQlyID0gcmFkZW9uX21jX3NldHVwKHJkZXYpOwotCWlmIChyKSB7Ci0JCXJldHVybiByOwotCX0KLQotCS8qIFByb2dyYW0gR1BVIG1lbW9yeSBzcGFjZSAqLwotCXJzNjAwX21jX2Rpc2FibGVfY2xpZW50cyhyZGV2KTsKLQlpZiAocnM2OTBfbWNfd2FpdF9mb3JfaWRsZShyZGV2KSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJGYWlsZWQgdG8gd2FpdCBNQyBpZGxlIHdoaWxlICIKLQkJICAgICAgICJwcm9ncmFtbWluZyBwaXBlcy4gQmFkIHRoaW5ncyBtaWdodCBoYXBwZW4uXG4iKTsKLQl9Ci0JdG1wID0gcmRldi0+bWMudnJhbV9sb2NhdGlvbiArIHJkZXYtPm1jLm1jX3ZyYW1fc2l6ZSAtIDE7Ci0JdG1wID0gUkVHX1NFVChSUzY5MF9NQ19GQl9UT1AsIHRtcCA+PiAxNik7Ci0JdG1wIHw9IFJFR19TRVQoUlM2OTBfTUNfRkJfU1RBUlQsIHJkZXYtPm1jLnZyYW1fbG9jYXRpb24gPj4gMTYpOwotCVdSRUczMl9NQyhSUzY5MF9NQ0NGR19GQl9MT0NBVElPTiwgdG1wKTsKLQkvKiBGSVhNRTogRG9lcyB0aGlzIHJlZyBleGlzdCBvbiBSUzQ4MCxSUzc0MCA/ICovCi0JV1JFRzMyKDB4MzEwLCByZGV2LT5tYy52cmFtX2xvY2F0aW9uKTsKLQlXUkVHMzIoUlM2OTBfSERQX0ZCX0xPQ0FUSU9OLCByZGV2LT5tYy52cmFtX2xvY2F0aW9uID4+IDE2KTsKLQlyZXR1cm4gMDsKLX0KLQotdm9pZCByczY5MF9tY19maW5pKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQotewotfQotCi0KLS8qCi0gKiBHbG9iYWwgR1BVIGZ1bmN0aW9ucwotICovCi1pbnQgcnM2OTBfbWNfd2FpdF9mb3JfaWRsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3N0YXRpYyBpbnQgcnM2OTBfbWNfd2FpdF9mb3JfaWRsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKIAl1bnNpZ25lZCBpOwogCXVpbnQzMl90IHRtcDsKIAogCWZvciAoaSA9IDA7IGkgPCByZGV2LT51c2VjX3RpbWVvdXQ7IGkrKykgewogCQkvKiByZWFkIE1DX1NUQVRVUyAqLwotCQl0bXAgPSBSUkVHMzJfTUMoUlM2OTBfTUNfU1RBVFVTKTsKLQkJaWYgKHRtcCAmIFJTNjkwX01DX1NUQVRVU19JRExFKSB7CisJCXRtcCA9IFJSRUczMl9NQyhSXzAwMDA5MF9NQ19TWVNURU1fU1RBVFVTKTsKKwkJaWYgKEdfMDAwMDkwX01DX1NZU1RFTV9JRExFKHRtcCkpCiAJCQlyZXR1cm4gMDsKLQkJfQotCQlEUk1fVURFTEFZKDEpOworCQl1ZGVsYXkoMSk7CiAJfQogCXJldHVybiAtMTsKIH0KIAotdm9pZCByczY5MF9lcnJhdGEoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCi17Ci0JcmRldi0+cGxsX2VycmF0YSA9IDA7Ci19Ci0KLXZvaWQgcnM2OTBfZ3B1X2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCitzdGF0aWMgdm9pZCByczY5MF9ncHVfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKIAkvKiBGSVhNRTogSERQIHNhbWUgcGxhY2Ugb24gcnM2OTAgPyAqLwogCXIxMDBfaGRwX3Jlc2V0KHJkZXYpOwotCXJzNjAwX2Rpc2FibGVfdmdhKHJkZXYpOwogCS8qIEZJWE1FOiBpcyB0aGlzIGNvcnJlY3QgPyAqLwogCXI0MjBfcGlwZXNfaW5pdChyZGV2KTsKIAlpZiAocnM2OTBfbWNfd2FpdF9mb3JfaWRsZShyZGV2KSkgewpAQCAtMTM0LDEwICs1Nyw2IEBACiAJfQogfQogCi0KLS8qCi0gKiBWUkFNIGluZm8uCi0gKi8KIHZvaWQgcnM2OTBfcG1faW5mbyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKIAlpbnQgaW5kZXggPSBHZXRJbmRleEludG9NYXN0ZXJUYWJsZShEQVRBLCBJbnRlZ3JhdGVkU3lzdGVtSW5mbyk7CkBAIC0yNTEsMzkgKzE3MCwzOSBAQAogCS8qCiAJICogTGluZSBCdWZmZXIgU2V0dXAKIAkgKiBUaGVyZSBpcyBhIHNpbmdsZSBsaW5lIGJ1ZmZlciBzaGFyZWQgYnkgYm90aCBkaXNwbGF5IGNvbnRyb2xsZXJzLgotCSAqIERDX0xCX01FTU9SWV9TUExJVCBjb250cm9scyBob3cgdGhhdCBsaW5lIGJ1ZmZlciBpcyBzaGFyZWQgYmV0d2VlbgorCSAqIFJfMDA2NTIwX0RDX0xCX01FTU9SWV9TUExJVCBjb250cm9scyBob3cgdGhhdCBsaW5lIGJ1ZmZlciBpcyBzaGFyZWQgYmV0d2VlbgogCSAqIHRoZSBkaXNwbGF5IGNvbnRyb2xsZXJzLiAgVGhlIHBhcml0aW9uaW5nIGNhbiBlaXRoZXIgYmUgZG9uZQogCSAqIG1hbnVhbGx5IG9yIHZpYSBvbmUgb2YgZm91ciBwcmVzZXQgYWxsb2NhdGlvbnMgc3BlY2lmaWVkIGluIGJpdHMgMTowOgogCSAqICAwIC0gbGluZSBidWZmZXIgaXMgZGl2aWRlZCBpbiBoYWxmIGFuZCBzaGFyZWQgYmV0d2VlbiBjcnRjCiAJICogIDEgLSBEMSBnZXRzIDMvNCBvZiB0aGUgbGluZSBidWZmZXIsIEQyIGdldHMgMS80CiAJICogIDIgLSBEMSBnZXRzIHRoZSB3aG9sZSBidWZmZXIKIAkgKiAgMyAtIEQxIGdldHMgMS80IG9mIHRoZSBsaW5lIGJ1ZmZlciwgRDIgZ2V0cyAzLzQKLQkgKiBTZXR0aW5nIGJpdCAyIG9mIERDX0xCX01FTU9SWV9TUExJVCBjb250cm9scyBzd2l0Y2hlcyB0byBtYW51YWwKKwkgKiBTZXR0aW5nIGJpdCAyIG9mIFJfMDA2NTIwX0RDX0xCX01FTU9SWV9TUExJVCBjb250cm9scyBzd2l0Y2hlcyB0byBtYW51YWwKIAkgKiBhbGxvY2F0aW9uIG1vZGUuIEluIG1hbnVhbCBhbGxvY2F0aW9uIG1vZGUsIEQxIGFsd2F5cyBzdGFydHMgYXQgMCwKIAkgKiBEMSBlbmQvMiBpcyBzcGVjaWZpZWQgaW4gYml0cyAxNDo0OyBEMiBhbGxvY2F0aW9uIGZvbGxvd3MgRDEuCiAJICovCi0JdG1wID0gUlJFRzMyKERDX0xCX01FTU9SWV9TUExJVCkgJiB+RENfTEJfTUVNT1JZX1NQTElUX01BU0s7Ci0JdG1wICY9IH5EQ19MQl9NRU1PUllfU1BMSVRfU0hJRlRfTU9ERTsKKwl0bXAgPSBSUkVHMzIoUl8wMDY1MjBfRENfTEJfTUVNT1JZX1NQTElUKSAmIENfMDA2NTIwX0RDX0xCX01FTU9SWV9TUExJVDsKKwl0bXAgJj0gfkNfMDA2NTIwX0RDX0xCX01FTU9SWV9TUExJVF9NT0RFOwogCS8qIGF1dG8gKi8KIAlpZiAobW9kZTEgJiYgbW9kZTIpIHsKIAkJaWYgKG1vZGUxLT5oZGlzcGxheSA+IG1vZGUyLT5oZGlzcGxheSkgewogCQkJaWYgKG1vZGUxLT5oZGlzcGxheSA+IDI1NjApCi0JCQkJdG1wIHw9IERDX0xCX01FTU9SWV9TUExJVF9EMV8zUV9EMl8xUTsKKwkJCQl0bXAgfD0gVl8wMDY1MjBfRENfTEJfTUVNT1JZX1NQTElUX0QxXzNRX0QyXzFROwogCQkJZWxzZQotCQkJCXRtcCB8PSBEQ19MQl9NRU1PUllfU1BMSVRfRDFIQUxGX0QySEFMRjsKKwkJCQl0bXAgfD0gVl8wMDY1MjBfRENfTEJfTUVNT1JZX1NQTElUX0QxSEFMRl9EMkhBTEY7CiAJCX0gZWxzZSBpZiAobW9kZTItPmhkaXNwbGF5ID4gbW9kZTEtPmhkaXNwbGF5KSB7CiAJCQlpZiAobW9kZTItPmhkaXNwbGF5ID4gMjU2MCkKLQkJCQl0bXAgfD0gRENfTEJfTUVNT1JZX1NQTElUX0QxXzFRX0QyXzNROworCQkJCXRtcCB8PSBWXzAwNjUyMF9EQ19MQl9NRU1PUllfU1BMSVRfRDFfMVFfRDJfM1E7CiAJCQllbHNlCi0JCQkJdG1wIHw9IERDX0xCX01FTU9SWV9TUExJVF9EMUhBTEZfRDJIQUxGOworCQkJCXRtcCB8PSBWXzAwNjUyMF9EQ19MQl9NRU1PUllfU1BMSVRfRDFIQUxGX0QySEFMRjsKIAkJfSBlbHNlCi0JCQl0bXAgfD0gQVZJVk9fRENfTEJfTUVNT1JZX1NQTElUX0QxSEFMRl9EMkhBTEY7CisJCQl0bXAgfD0gVl8wMDY1MjBfRENfTEJfTUVNT1JZX1NQTElUX0QxSEFMRl9EMkhBTEY7CiAJfSBlbHNlIGlmIChtb2RlMSkgewotCQl0bXAgfD0gRENfTEJfTUVNT1JZX1NQTElUX0QxX09OTFk7CisJCXRtcCB8PSBWXzAwNjUyMF9EQ19MQl9NRU1PUllfU1BMSVRfRDFfT05MWTsKIAl9IGVsc2UgaWYgKG1vZGUyKSB7Ci0JCXRtcCB8PSBEQ19MQl9NRU1PUllfU1BMSVRfRDFfMVFfRDJfM1E7CisJCXRtcCB8PSBWXzAwNjUyMF9EQ19MQl9NRU1PUllfU1BMSVRfRDFfMVFfRDJfM1E7CiAJfQotCVdSRUczMihEQ19MQl9NRU1PUllfU1BMSVQsIHRtcCk7CisJV1JFRzMyKFJfMDA2NTIwX0RDX0xCX01FTU9SWV9TUExJVCwgdG1wKTsKIH0KIAogc3RydWN0IHJzNjkwX3dhdGVybWFyayB7CkBAIC00ODgsMjggKzQwNywyOCBAQAogCSAqIG9wdGlvbi4KIAkgKi8KIAlpZiAocmRldi0+ZGlzcF9wcmlvcml0eSA9PSAyKSB7Ci0JCXRtcCA9IFJSRUczMl9NQyhNQ19JTklUX01JU0NfTEFUX1RJTUVSKTsKLQkJdG1wICY9IH5NQ19ESVNQMVJfSU5JVF9MQVRfTUFTSzsKLQkJdG1wICY9IH5NQ19ESVNQMFJfSU5JVF9MQVRfTUFTSzsKLQkJaWYgKG1vZGUxKQotCQkJdG1wIHw9ICgxIDw8IE1DX0RJU1AxUl9JTklUX0xBVF9TSElGVCk7CisJCXRtcCA9IFJSRUczMl9NQyhSXzAwMDEwNF9NQ19JTklUX01JU0NfTEFUX1RJTUVSKTsKKwkJdG1wICY9IENfMDAwMTA0X01DX0RJU1AwUl9JTklUX0xBVDsKKwkJdG1wICY9IENfMDAwMTA0X01DX0RJU1AxUl9JTklUX0xBVDsKIAkJaWYgKG1vZGUwKQotCQkJdG1wIHw9ICgxIDw8IE1DX0RJU1AwUl9JTklUX0xBVF9TSElGVCk7Ci0JCVdSRUczMl9NQyhNQ19JTklUX01JU0NfTEFUX1RJTUVSLCB0bXApOworCQkJdG1wIHw9IFNfMDAwMTA0X01DX0RJU1AwUl9JTklUX0xBVCgxKTsKKwkJaWYgKG1vZGUxKQorCQkJdG1wIHw9IFNfMDAwMTA0X01DX0RJU1AxUl9JTklUX0xBVCgxKTsKKwkJV1JFRzMyX01DKFJfMDAwMTA0X01DX0lOSVRfTUlTQ19MQVRfVElNRVIsIHRtcCk7CiAJfQogCXJzNjkwX2xpbmVfYnVmZmVyX2FkanVzdChyZGV2LCBtb2RlMCwgbW9kZTEpOwogCiAJaWYgKChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9SUzY5MCkgfHwgKHJkZXYtPmZhbWlseSA9PSBDSElQX1JTNzQwKSkKLQkJV1JFRzMyKERDUF9DT05UUk9MLCAwKTsKKwkJV1JFRzMyKFJfMDA2QzlDX0RDUF9DT05UUk9MLCAwKTsKIAlpZiAoKHJkZXYtPmZhbWlseSA9PSBDSElQX1JTNzgwKSB8fCAocmRldi0+ZmFtaWx5ID09IENISVBfUlM4ODApKQotCQlXUkVHMzIoRENQX0NPTlRST0wsIDIpOworCQlXUkVHMzIoUl8wMDZDOUNfRENQX0NPTlRST0wsIDIpOwogCiAJcnM2OTBfY3J0Y19iYW5kd2lkdGhfY29tcHV0ZShyZGV2LCByZGV2LT5tb2RlX2luZm8uY3J0Y3NbMF0sICZ3bTApOwogCXJzNjkwX2NydGNfYmFuZHdpZHRoX2NvbXB1dGUocmRldiwgcmRldi0+bW9kZV9pbmZvLmNydGNzWzFdLCAmd20xKTsKIAogCXRtcCA9ICh3bTAubGJfcmVxdWVzdF9maWZvX2RlcHRoIC0gMSk7CiAJdG1wIHw9ICh3bTEubGJfcmVxdWVzdF9maWZvX2RlcHRoIC0gMSkgPDwgMTY7Ci0JV1JFRzMyKExCX01BWF9SRVFfT1VUU1RBTkRJTkcsIHRtcCk7CisJV1JFRzMyKFJfMDA2RDU4X0xCX01BWF9SRVFfT1VUU1RBTkRJTkcsIHRtcCk7CiAKIAlpZiAobW9kZTAgJiYgbW9kZTEpIHsKIAkJaWYgKHJmaXhlZF90cnVuYyh3bTAuZGJwcCkgPiA2NCkKQEAgLTU2MiwxMCArNDgxLDEwIEBACiAJCQlwcmlvcml0eV9tYXJrMTIuZnVsbCA9IDA7CiAJCWlmICh3bTEucHJpb3JpdHlfbWFya19tYXguZnVsbCA+IHByaW9yaXR5X21hcmsxMi5mdWxsKQogCQkJcHJpb3JpdHlfbWFyazEyLmZ1bGwgPSB3bTEucHJpb3JpdHlfbWFya19tYXguZnVsbDsKLQkJV1JFRzMyKEQxTU9ERV9QUklPUklUWV9BX0NOVCwgcmZpeGVkX3RydW5jKHByaW9yaXR5X21hcmswMikpOwotCQlXUkVHMzIoRDFNT0RFX1BSSU9SSVRZX0JfQ05ULCByZml4ZWRfdHJ1bmMocHJpb3JpdHlfbWFyazAyKSk7Ci0JCVdSRUczMihEMk1PREVfUFJJT1JJVFlfQV9DTlQsIHJmaXhlZF90cnVuYyhwcmlvcml0eV9tYXJrMTIpKTsKLQkJV1JFRzMyKEQyTU9ERV9QUklPUklUWV9CX0NOVCwgcmZpeGVkX3RydW5jKHByaW9yaXR5X21hcmsxMikpOworCQlXUkVHMzIoUl8wMDY1NDhfRDFNT0RFX1BSSU9SSVRZX0FfQ05ULCByZml4ZWRfdHJ1bmMocHJpb3JpdHlfbWFyazAyKSk7CisJCVdSRUczMihSXzAwNjU0Q19EMU1PREVfUFJJT1JJVFlfQl9DTlQsIHJmaXhlZF90cnVuYyhwcmlvcml0eV9tYXJrMDIpKTsKKwkJV1JFRzMyKFJfMDA2RDQ4X0QyTU9ERV9QUklPUklUWV9BX0NOVCwgcmZpeGVkX3RydW5jKHByaW9yaXR5X21hcmsxMikpOworCQlXUkVHMzIoUl8wMDZENENfRDJNT0RFX1BSSU9SSVRZX0JfQ05ULCByZml4ZWRfdHJ1bmMocHJpb3JpdHlfbWFyazEyKSk7CiAJfSBlbHNlIGlmIChtb2RlMCkgewogCQlpZiAocmZpeGVkX3RydW5jKHdtMC5kYnBwKSA+IDY0KQogCQkJYS5mdWxsID0gcmZpeGVkX211bCh3bTAuZGJwcCwgd20wLm51bV9saW5lX3BhaXIpOwpAQCAtNTkyLDEwICs1MTEsMTIgQEAKIAkJCXByaW9yaXR5X21hcmswMi5mdWxsID0gMDsKIAkJaWYgKHdtMC5wcmlvcml0eV9tYXJrX21heC5mdWxsID4gcHJpb3JpdHlfbWFyazAyLmZ1bGwpCiAJCQlwcmlvcml0eV9tYXJrMDIuZnVsbCA9IHdtMC5wcmlvcml0eV9tYXJrX21heC5mdWxsOwotCQlXUkVHMzIoRDFNT0RFX1BSSU9SSVRZX0FfQ05ULCByZml4ZWRfdHJ1bmMocHJpb3JpdHlfbWFyazAyKSk7Ci0JCVdSRUczMihEMU1PREVfUFJJT1JJVFlfQl9DTlQsIHJmaXhlZF90cnVuYyhwcmlvcml0eV9tYXJrMDIpKTsKLQkJV1JFRzMyKEQyTU9ERV9QUklPUklUWV9BX0NOVCwgTU9ERV9QUklPUklUWV9PRkYpOwotCQlXUkVHMzIoRDJNT0RFX1BSSU9SSVRZX0JfQ05ULCBNT0RFX1BSSU9SSVRZX09GRik7CisJCVdSRUczMihSXzAwNjU0OF9EMU1PREVfUFJJT1JJVFlfQV9DTlQsIHJmaXhlZF90cnVuYyhwcmlvcml0eV9tYXJrMDIpKTsKKwkJV1JFRzMyKFJfMDA2NTRDX0QxTU9ERV9QUklPUklUWV9CX0NOVCwgcmZpeGVkX3RydW5jKHByaW9yaXR5X21hcmswMikpOworCQlXUkVHMzIoUl8wMDZENDhfRDJNT0RFX1BSSU9SSVRZX0FfQ05ULAorCQkJU18wMDZENDhfRDJNT0RFX1BSSU9SSVRZX0FfT0ZGKDEpKTsKKwkJV1JFRzMyKFJfMDA2RDRDX0QyTU9ERV9QUklPUklUWV9CX0NOVCwKKwkJCVNfMDA2RDRDX0QyTU9ERV9QUklPUklUWV9CX09GRigxKSk7CiAJfSBlbHNlIHsKIAkJaWYgKHJmaXhlZF90cnVuYyh3bTEuZGJwcCkgPiA2NCkKIAkJCWEuZnVsbCA9IHJmaXhlZF9tdWwod20xLmRicHAsIHdtMS5udW1fbGluZV9wYWlyKTsKQEAgLTYyMiwzMCArNTQzLDIwMyBAQAogCQkJcHJpb3JpdHlfbWFyazEyLmZ1bGwgPSAwOwogCQlpZiAod20xLnByaW9yaXR5X21hcmtfbWF4LmZ1bGwgPiBwcmlvcml0eV9tYXJrMTIuZnVsbCkKIAkJCXByaW9yaXR5X21hcmsxMi5mdWxsID0gd20xLnByaW9yaXR5X21hcmtfbWF4LmZ1bGw7Ci0JCVdSRUczMihEMU1PREVfUFJJT1JJVFlfQV9DTlQsIE1PREVfUFJJT1JJVFlfT0ZGKTsKLQkJV1JFRzMyKEQxTU9ERV9QUklPUklUWV9CX0NOVCwgTU9ERV9QUklPUklUWV9PRkYpOwotCQlXUkVHMzIoRDJNT0RFX1BSSU9SSVRZX0FfQ05ULCByZml4ZWRfdHJ1bmMocHJpb3JpdHlfbWFyazEyKSk7Ci0JCVdSRUczMihEMk1PREVfUFJJT1JJVFlfQl9DTlQsIHJmaXhlZF90cnVuYyhwcmlvcml0eV9tYXJrMTIpKTsKKwkJV1JFRzMyKFJfMDA2NTQ4X0QxTU9ERV9QUklPUklUWV9BX0NOVCwKKwkJCVNfMDA2NTQ4X0QxTU9ERV9QUklPUklUWV9BX09GRigxKSk7CisJCVdSRUczMihSXzAwNjU0Q19EMU1PREVfUFJJT1JJVFlfQl9DTlQsCisJCQlTXzAwNjU0Q19EMU1PREVfUFJJT1JJVFlfQl9PRkYoMSkpOworCQlXUkVHMzIoUl8wMDZENDhfRDJNT0RFX1BSSU9SSVRZX0FfQ05ULCByZml4ZWRfdHJ1bmMocHJpb3JpdHlfbWFyazEyKSk7CisJCVdSRUczMihSXzAwNkQ0Q19EMk1PREVfUFJJT1JJVFlfQl9DTlQsIHJmaXhlZF90cnVuYyhwcmlvcml0eV9tYXJrMTIpKTsKIAl9CiB9CiAKLS8qCi0gKiBJbmRpcmVjdCByZWdpc3RlcnMgYWNjZXNzb3IKLSAqLwogdWludDMyX3QgcnM2OTBfbWNfcnJlZyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgdWludDMyX3QgcmVnKQogewogCXVpbnQzMl90IHI7CiAKLQlXUkVHMzIoUlM2OTBfTUNfSU5ERVgsIChyZWcgJiBSUzY5MF9NQ19JTkRFWF9NQVNLKSk7Ci0JciA9IFJSRUczMihSUzY5MF9NQ19EQVRBKTsKLQlXUkVHMzIoUlM2OTBfTUNfSU5ERVgsIFJTNjkwX01DX0lOREVYX01BU0spOworCVdSRUczMihSXzAwMDA3OF9NQ19JTkRFWCwgU18wMDAwNzhfTUNfSU5EX0FERFIocmVnKSk7CisJciA9IFJSRUczMihSXzAwMDA3Q19NQ19EQVRBKTsKKwlXUkVHMzIoUl8wMDAwNzhfTUNfSU5ERVgsIH5DXzAwMDA3OF9NQ19JTkRfQUREUik7CiAJcmV0dXJuIHI7CiB9CiAKIHZvaWQgcnM2OTBfbWNfd3JlZyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgdWludDMyX3QgcmVnLCB1aW50MzJfdCB2KQogewotCVdSRUczMihSUzY5MF9NQ19JTkRFWCwKLQkgICAgICAgUlM2OTBfTUNfSU5ERVhfV1JfRU4gfCAoKHJlZykgJiBSUzY5MF9NQ19JTkRFWF9NQVNLKSk7Ci0JV1JFRzMyKFJTNjkwX01DX0RBVEEsIHYpOwotCVdSRUczMihSUzY5MF9NQ19JTkRFWCwgUlM2OTBfTUNfSU5ERVhfV1JfQUNLKTsKKwlXUkVHMzIoUl8wMDAwNzhfTUNfSU5ERVgsIFNfMDAwMDc4X01DX0lORF9BRERSKHJlZykgfAorCQlTXzAwMDA3OF9NQ19JTkRfV1JfRU4oMSkpOworCVdSRUczMihSXzAwMDA3Q19NQ19EQVRBLCB2KTsKKwlXUkVHMzIoUl8wMDAwNzhfTUNfSU5ERVgsIDB4N0YpOworfQorCit2b2lkIHJzNjkwX21jX3Byb2dyYW0oc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJc3RydWN0IHJ2NTE1X21jX3NhdmUgc2F2ZTsKKworCS8qIFN0b3BzIGFsbCBtYyBjbGllbnRzICovCisJcnY1MTVfbWNfc3RvcChyZGV2LCAmc2F2ZSk7CisKKwkvKiBXYWl0IGZvciBtYyBpZGxlICovCisJaWYgKHJzNjkwX21jX3dhaXRfZm9yX2lkbGUocmRldikpCisJCWRldl93YXJuKHJkZXYtPmRldiwgIldhaXQgTUMgaWRsZSB0aW1lb3V0IGJlZm9yZSB1cGRhdGluZyBNQy5cbiIpOworCS8qIFByb2dyYW0gTUMsIHNob3VsZCBiZSBhIDMyYml0cyBsaW1pdGVkIGFkZHJlc3Mgc3BhY2UgKi8KKwlXUkVHMzJfTUMoUl8wMDAxMDBfTUNDRkdfRkJfTE9DQVRJT04sCisJCQlTXzAwMDEwMF9NQ19GQl9TVEFSVChyZGV2LT5tYy52cmFtX3N0YXJ0ID4+IDE2KSB8CisJCQlTXzAwMDEwMF9NQ19GQl9UT1AocmRldi0+bWMudnJhbV9lbmQgPj4gMTYpKTsKKwlXUkVHMzIoUl8wMDAxMzRfSERQX0ZCX0xPQ0FUSU9OLAorCQlTXzAwMDEzNF9IRFBfRkJfU1RBUlQocmRldi0+bWMudnJhbV9zdGFydCA+PiAxNikpOworCisJcnY1MTVfbWNfcmVzdW1lKHJkZXYsICZzYXZlKTsKK30KKworc3RhdGljIGludCByczY5MF9zdGFydHVwKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCWludCByOworCisJcnM2OTBfbWNfcHJvZ3JhbShyZGV2KTsKKwkvKiBSZXN1bWUgY2xvY2sgKi8KKwlydjUxNV9jbG9ja19zdGFydHVwKHJkZXYpOworCS8qIEluaXRpYWxpemUgR1BVIGNvbmZpZ3VyYXRpb24gKCMgcGlwZXMsIC4uLikgKi8KKwlyczY5MF9ncHVfaW5pdChyZGV2KTsKKwkvKiBJbml0aWFsaXplIEdBUlQgKGluaXRpYWxpemUgYWZ0ZXIgVFRNIHNvIHdlIGNhbiBhbGxvY2F0ZQorCSAqIG1lbW9yeSB0aHJvdWdoIFRUTSBidXQgZmluYWxpemUgYWZ0ZXIgVFRNKSAqLworCXIgPSByczQwMF9nYXJ0X2VuYWJsZShyZGV2KTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisJLyogRW5hYmxlIElSUSAqLworCXJkZXYtPmlycS5zd19pbnQgPSB0cnVlOworCXJzNjAwX2lycV9zZXQocmRldik7CisJLyogMU0gcmluZyBidWZmZXIgKi8KKwlyID0gcjEwMF9jcF9pbml0KHJkZXYsIDEwMjQgKiAxMDI0KTsKKwlpZiAocikgeworCQlkZXZfZXJyKHJkZXYtPmRldiwgImZhaWxsZWQgaW5pdGlhbGl6aW5nIENQICglZCkuXG4iLCByKTsKKwkJcmV0dXJuIHI7CisJfQorCXIgPSByMTAwX3diX2luaXQocmRldik7CisJaWYgKHIpCisJCWRldl9lcnIocmRldi0+ZGV2LCAiZmFpbGxlZCBpbml0aWFsaXppbmcgV0IgKCVkKS5cbiIsIHIpOworCXIgPSByMTAwX2liX2luaXQocmRldik7CisJaWYgKHIpIHsKKwkJZGV2X2VycihyZGV2LT5kZXYsICJmYWlsbGVkIGluaXRpYWxpemluZyBJQiAoJWQpLlxuIiwgcik7CisJCXJldHVybiByOworCX0KKwlyZXR1cm4gMDsKK30KKworaW50IHJzNjkwX3Jlc3VtZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwkvKiBNYWtlIHN1ciBHQVJUIGFyZSBub3Qgd29ya2luZyAqLworCXJzNDAwX2dhcnRfZGlzYWJsZShyZGV2KTsKKwkvKiBSZXN1bWUgY2xvY2sgYmVmb3JlIGRvaW5nIHJlc2V0ICovCisJcnY1MTVfY2xvY2tfc3RhcnR1cChyZGV2KTsKKwkvKiBSZXNldCBncHUgYmVmb3JlIHBvc3Rpbmcgb3RoZXJ3aXNlIEFUT00gd2lsbCBlbnRlciBpbmZpbml0ZSBsb29wICovCisJaWYgKHJhZGVvbl9ncHVfcmVzZXQocmRldikpIHsKKwkJZGV2X3dhcm4ocmRldi0+ZGV2LCAiR1BVIHJlc2V0IGZhaWxlZCAhICgweEU0MD0weCUwOFgsIDB4N0MwPTB4JTA4WClcbiIsCisJCQlSUkVHMzIoUl8wMDBFNDBfUkJCTV9TVEFUVVMpLAorCQkJUlJFRzMyKFJfMDAwN0MwX0NQX1NUQVQpKTsKKwl9CisJLyogcG9zdCAqLworCWF0b21fYXNpY19pbml0KHJkZXYtPm1vZGVfaW5mby5hdG9tX2NvbnRleHQpOworCS8qIFJlc3VtZSBjbG9jayBhZnRlciBwb3N0aW5nICovCisJcnY1MTVfY2xvY2tfc3RhcnR1cChyZGV2KTsKKwlyZXR1cm4gcnM2OTBfc3RhcnR1cChyZGV2KTsKK30KKworaW50IHJzNjkwX3N1c3BlbmQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJcjEwMF9jcF9kaXNhYmxlKHJkZXYpOworCXIxMDBfd2JfZGlzYWJsZShyZGV2KTsKKwlyczYwMF9pcnFfZGlzYWJsZShyZGV2KTsKKwlyczQwMF9nYXJ0X2Rpc2FibGUocmRldik7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgcnM2OTBfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwlyczY5MF9zdXNwZW5kKHJkZXYpOworCXIxMDBfY3BfZmluaShyZGV2KTsKKwlyMTAwX3diX2ZpbmkocmRldik7CisJcjEwMF9pYl9maW5pKHJkZXYpOworCXJhZGVvbl9nZW1fZmluaShyZGV2KTsKKwlyczQwMF9nYXJ0X2ZpbmkocmRldik7CisJcmFkZW9uX2lycV9rbXNfZmluaShyZGV2KTsKKwlyYWRlb25fZmVuY2VfZHJpdmVyX2ZpbmkocmRldik7CisJcmFkZW9uX29iamVjdF9maW5pKHJkZXYpOworCXJhZGVvbl9hdG9tYmlvc19maW5pKHJkZXYpOworCWtmcmVlKHJkZXYtPmJpb3MpOworCXJkZXYtPmJpb3MgPSBOVUxMOworfQorCitpbnQgcnM2OTBfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwlpbnQgcjsKKworCS8qIERpc2FibGUgVkdBICovCisJcnY1MTVfdmdhX3JlbmRlcl9kaXNhYmxlKHJkZXYpOworCS8qIEluaXRpYWxpemUgc2NyYXRjaCByZWdpc3RlcnMgKi8KKwlyYWRlb25fc2NyYXRjaF9pbml0KHJkZXYpOworCS8qIEluaXRpYWxpemUgc3VyZmFjZSByZWdpc3RlcnMgKi8KKwlyYWRlb25fc3VyZmFjZV9pbml0KHJkZXYpOworCS8qIFRPRE86IGRpc2FibGUgVkdBIG5lZWQgdG8gdXNlIFZHQSByZXF1ZXN0ICovCisJLyogQklPUyovCisJaWYgKCFyYWRlb25fZ2V0X2Jpb3MocmRldikpIHsKKwkJaWYgKEFTSUNfSVNfQVZJVk8ocmRldikpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJaWYgKHJkZXYtPmlzX2F0b21fYmlvcykgeworCQlyID0gcmFkZW9uX2F0b21iaW9zX2luaXQocmRldik7CisJCWlmIChyKQorCQkJcmV0dXJuIHI7CisJfSBlbHNlIHsKKwkJZGV2X2VycihyZGV2LT5kZXYsICJFeHBlY3RpbmcgYXRvbWJpb3MgZm9yIFJWNTE1IEdQVVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwkvKiBSZXNldCBncHUgYmVmb3JlIHBvc3Rpbmcgb3RoZXJ3aXNlIEFUT00gd2lsbCBlbnRlciBpbmZpbml0ZSBsb29wICovCisJaWYgKHJhZGVvbl9ncHVfcmVzZXQocmRldikpIHsKKwkJZGV2X3dhcm4ocmRldi0+ZGV2LAorCQkJIkdQVSByZXNldCBmYWlsZWQgISAoMHhFNDA9MHglMDhYLCAweDdDMD0weCUwOFgpXG4iLAorCQkJUlJFRzMyKFJfMDAwRTQwX1JCQk1fU1RBVFVTKSwKKwkJCVJSRUczMihSXzAwMDdDMF9DUF9TVEFUKSk7CisJfQorCS8qIGNoZWNrIGlmIGNhcmRzIGFyZSBwb3N0ZWQgb3Igbm90ICovCisJaWYgKCFyYWRlb25fY2FyZF9wb3N0ZWQocmRldikgJiYgcmRldi0+YmlvcykgeworCQlEUk1fSU5GTygiR1BVIG5vdCBwb3N0ZWQuIHBvc3Rpbmcgbm93Li4uXG4iKTsKKwkJYXRvbV9hc2ljX2luaXQocmRldi0+bW9kZV9pbmZvLmF0b21fY29udGV4dCk7CisJfQorCS8qIEluaXRpYWxpemUgY2xvY2tzICovCisJcmFkZW9uX2dldF9jbG9ja19pbmZvKHJkZXYtPmRkZXYpOworCS8qIEdldCB2cmFtIGluZm9ybWF0aW9ucyAqLworCXJzNjkwX3ZyYW1faW5mbyhyZGV2KTsKKwkvKiBJbml0aWFsaXplIG1lbW9yeSBjb250cm9sbGVyIChhbHNvIHRlc3QgQUdQKSAqLworCXIgPSByNDIwX21jX2luaXQocmRldik7CisJaWYgKHIpCisJCXJldHVybiByOworCXJ2NTE1X2RlYnVnZnMocmRldik7CisJLyogRmVuY2UgZHJpdmVyICovCisJciA9IHJhZGVvbl9mZW5jZV9kcml2ZXJfaW5pdChyZGV2KTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisJciA9IHJhZGVvbl9pcnFfa21zX2luaXQocmRldik7CisJaWYgKHIpCisJCXJldHVybiByOworCS8qIE1lbW9yeSBtYW5hZ2VyICovCisJciA9IHJhZGVvbl9vYmplY3RfaW5pdChyZGV2KTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisJciA9IHJzNDAwX2dhcnRfaW5pdChyZGV2KTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisJcnM2MDBfc2V0X3NhZmVfcmVnaXN0ZXJzKHJkZXYpOworCXJkZXYtPmFjY2VsX3dvcmtpbmcgPSB0cnVlOworCXIgPSByczY5MF9zdGFydHVwKHJkZXYpOworCWlmIChyKSB7CisJCS8qIFNvbWV0aGluZ3Mgd2FudCB3cm9udCB3aXRoIHRoZSBhY2NlbCBpbml0IHN0b3AgYWNjZWwgKi8KKwkJZGV2X2VycihyZGV2LT5kZXYsICJEaXNhYmxpbmcgR1BVIGFjY2VsZXJhdGlvblxuIik7CisJCXJzNjkwX3N1c3BlbmQocmRldik7CisJCXIxMDBfY3BfZmluaShyZGV2KTsKKwkJcjEwMF93Yl9maW5pKHJkZXYpOworCQlyMTAwX2liX2ZpbmkocmRldik7CisJCXJzNDAwX2dhcnRfZmluaShyZGV2KTsKKwkJcmFkZW9uX2lycV9rbXNfZmluaShyZGV2KTsKKwkJcmRldi0+YWNjZWxfd29ya2luZyA9IGZhbHNlOworCX0KKwlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnM2OTBkLmggYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JzNjkwZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyZDMxZTcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JzNjkwZC5oCkBAIC0wLDAgKzEsMzA3IEBACisvKgorICogQ29weXJpZ2h0IDIwMDggQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLgorICogQ29weXJpZ2h0IDIwMDggUmVkIEhhdCBJbmMuCisgKiBDb3B5cmlnaHQgMjAwOSBKZXJvbWUgR2xpc3NlLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIENPUFlSSUdIVCBIT0xERVIoUykgT1IgQVVUSE9SKFMpIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCisgKiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKKyAqIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgorICogT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqIEF1dGhvcnM6IERhdmUgQWlybGllCisgKiAgICAgICAgICBBbGV4IERldWNoZXIKKyAqICAgICAgICAgIEplcm9tZSBHbGlzc2UKKyAqLworI2lmbmRlZiBfX1JTNjkwRF9IX18KKyNkZWZpbmUgX19SUzY5MERfSF9fCisKKy8qIFJlZ2lzdGVycyAqLworI2RlZmluZSBSXzAwMDA3OF9NQ19JTkRFWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA3OAorI2RlZmluZSAgIFNfMDAwMDc4X01DX0lORF9BRERSKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxRkYpIDw8IDApCisjZGVmaW5lICAgR18wMDAwNzhfTUNfSU5EX0FERFIoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweDFGRikKKyNkZWZpbmUgICBDXzAwMDA3OF9NQ19JTkRfQUREUiAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRTAwCisjZGVmaW5lICAgU18wMDAwNzhfTUNfSU5EX1dSX0VOKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDkpCisjZGVmaW5lICAgR18wMDAwNzhfTUNfSU5EX1dSX0VOKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gOSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwNzhfTUNfSU5EX1dSX0VOICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkRGRgorI2RlZmluZSBSXzAwMDA3Q19NQ19EQVRBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA3QworI2RlZmluZSAgIFNfMDAwMDdDX01DX0RBVEEoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhGRkZGRkZGRikgPDwgMCkKKyNkZWZpbmUgICBHXzAwMDA3Q19NQ19EQVRBKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4RkZGRkZGRkYpCisjZGVmaW5lICAgQ18wMDAwN0NfTUNfREFUQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBSXzAwMDBGOF9DT05GSUdfTUVNU0laRSAgICAgICAgICAgICAgICAgICAgICAweDAwMDBGOAorI2RlZmluZSAgIFNfMDAwMEY4X0NPTkZJR19NRU1TSVpFKHgpICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhGRkZGRkZGRikgPDwgMCkKKyNkZWZpbmUgICBHXzAwMDBGOF9DT05GSUdfTUVNU0laRSh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4RkZGRkZGRkYpCisjZGVmaW5lICAgQ18wMDAwRjhfQ09ORklHX01FTVNJWkUgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBSXzAwMDEzNF9IRFBfRkJfTE9DQVRJT04gICAgICAgICAgICAgICAgICAgICAweDAwMDEzNAorI2RlZmluZSAgIFNfMDAwMTM0X0hEUF9GQl9TVEFSVCh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhGRkZGKSA8PCAwKQorI2RlZmluZSAgIEdfMDAwMTM0X0hEUF9GQl9TVEFSVCh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHhGRkZGKQorI2RlZmluZSAgIENfMDAwMTM0X0hEUF9GQl9TVEFSVCAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRjAwMDAKKyNkZWZpbmUgUl8wMDA3QzBfQ1BfU1RBVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA3QzAKKyNkZWZpbmUgICBTXzAwMDdDMF9NUlVfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMCkKKyNkZWZpbmUgICBHXzAwMDdDMF9NUlVfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9NUlVfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZFCisjZGVmaW5lICAgU18wMDA3QzBfTVdVX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDEpCisjZGVmaW5lICAgR18wMDA3QzBfTVdVX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDA3QzBfTVdVX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRAorI2RlZmluZSAgIFNfMDAwN0MwX1JTSVVfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyKQorI2RlZmluZSAgIEdfMDAwN0MwX1JTSVVfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDIpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX1JTSVVfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkIKKyNkZWZpbmUgICBTXzAwMDdDMF9SQ0lVX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMykKKyNkZWZpbmUgICBHXzAwMDdDMF9SQ0lVX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAzKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9SQ0lVX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkY3CisjZGVmaW5lICAgU18wMDA3QzBfQ1NGX1BSSU1BUllfQlVTWSh4KSAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDkpCisjZGVmaW5lICAgR18wMDA3QzBfQ1NGX1BSSU1BUllfQlVTWSh4KSAgICAgICAgICAgICAgICAgKCgoeCkgPj4gOSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDA3QzBfQ1NGX1BSSU1BUllfQlVTWSAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkRGRgorI2RlZmluZSAgIFNfMDAwN0MwX0NTRl9JTkRJUkVDVF9CVVNZKHgpICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxMCkKKyNkZWZpbmUgICBHXzAwMDdDMF9DU0ZfSU5ESVJFQ1RfQlVTWSh4KSAgICAgICAgICAgICAgICAoKCh4KSA+PiAxMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDA3QzBfQ1NGX0lORElSRUNUX0JVU1kgICAgICAgICAgICAgICAgICAgMHhGRkZGRkJGRgorI2RlZmluZSAgIFNfMDAwN0MwX0NTUV9QUklNQVJZX0JVU1koeCkgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxMSkKKyNkZWZpbmUgICBHXzAwMDdDMF9DU1FfUFJJTUFSWV9CVVNZKHgpICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxMSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDA3QzBfQ1NRX1BSSU1BUllfQlVTWSAgICAgICAgICAgICAgICAgICAgMHhGRkZGRjdGRgorI2RlZmluZSAgIFNfMDAwN0MwX0NTUV9JTkRJUkVDVF9CVVNZKHgpICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxMikKKyNkZWZpbmUgICBHXzAwMDdDMF9DU1FfSU5ESVJFQ1RfQlVTWSh4KSAgICAgICAgICAgICAgICAoKCh4KSA+PiAxMikgJiAweDEpCisjZGVmaW5lICAgQ18wMDA3QzBfQ1NRX0lORElSRUNUX0JVU1kgICAgICAgICAgICAgICAgICAgMHhGRkZGRUZGRgorI2RlZmluZSAgIFNfMDAwN0MwX0NTSV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxMykKKyNkZWZpbmUgICBHXzAwMDdDMF9DU0lfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxMykgJiAweDEpCisjZGVmaW5lICAgQ18wMDA3QzBfQ1NJX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGREZGRgorI2RlZmluZSAgIFNfMDAwN0MwX0NTRl9JTkRJUkVDVDJfQlVTWSh4KSAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxNCkKKyNkZWZpbmUgICBHXzAwMDdDMF9DU0ZfSU5ESVJFQ1QyX0JVU1koeCkgICAgICAgICAgICAgICAoKCh4KSA+PiAxNCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDA3QzBfQ1NGX0lORElSRUNUMl9CVVNZICAgICAgICAgICAgICAgICAgMHhGRkZGQkZGRgorI2RlZmluZSAgIFNfMDAwN0MwX0NTUV9JTkRJUkVDVDJfQlVTWSh4KSAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxNSkKKyNkZWZpbmUgICBHXzAwMDdDMF9DU1FfSU5ESVJFQ1QyX0JVU1koeCkgICAgICAgICAgICAgICAoKCh4KSA+PiAxNSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDA3QzBfQ1NRX0lORElSRUNUMl9CVVNZICAgICAgICAgICAgICAgICAgMHhGRkZGN0ZGRgorI2RlZmluZSAgIFNfMDAwN0MwX0dVSURNQV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyOCkKKyNkZWZpbmUgICBHXzAwMDdDMF9HVUlETUFfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyOCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDA3QzBfR1VJRE1BX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgMHhFRkZGRkZGRgorI2RlZmluZSAgIFNfMDAwN0MwX1ZJRERNQV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyOSkKKyNkZWZpbmUgICBHXzAwMDdDMF9WSURETUFfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyOSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDA3QzBfVklERE1BX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgMHhERkZGRkZGRgorI2RlZmluZSAgIFNfMDAwN0MwX0NNRFNUUk1fQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAzMCkKKyNkZWZpbmUgICBHXzAwMDdDMF9DTURTVFJNX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAzMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDA3QzBfQ01EU1RSTV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgMHhCRkZGRkZGRgorI2RlZmluZSAgIFNfMDAwN0MwX0NQX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAzMSkKKyNkZWZpbmUgICBHXzAwMDdDMF9DUF9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAzMSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDA3QzBfQ1BfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg3RkZGRkZGRgorI2RlZmluZSBSXzAwMEU0MF9SQkJNX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMEU0MAorI2RlZmluZSAgIFNfMDAwRTQwX0NNREZJRk9fQVZBSUwoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHg3RikgPDwgMCkKKyNkZWZpbmUgICBHXzAwMEU0MF9DTURGSUZPX0FWQUlMKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4N0YpCisjZGVmaW5lICAgQ18wMDBFNDBfQ01ERklGT19BVkFJTCAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkY4MAorI2RlZmluZSAgIFNfMDAwRTQwX0hJUlFfT05fUkJCKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCA4KQorI2RlZmluZSAgIEdfMDAwRTQwX0hJUlFfT05fUkJCKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDgpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX0hJUlFfT05fUkJCICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZFRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9DUFJRX09OX1JCQih4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgOSkKKyNkZWZpbmUgICBHXzAwMEU0MF9DUFJRX09OX1JCQih4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiA5KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMEU0MF9DUFJRX09OX1JCQiAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGREZGCisjZGVmaW5lICAgU18wMDBFNDBfQ0ZSUV9PTl9SQkIoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDEwKQorI2RlZmluZSAgIEdfMDAwRTQwX0NGUlFfT05fUkJCKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDEwKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMEU0MF9DRlJRX09OX1JCQiAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGQkZGCisjZGVmaW5lICAgU18wMDBFNDBfSElSUV9JTl9SVEJVRih4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDExKQorI2RlZmluZSAgIEdfMDAwRTQwX0hJUlFfSU5fUlRCVUYoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDExKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMEU0MF9ISVJRX0lOX1JUQlVGICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGN0ZGCisjZGVmaW5lICAgU18wMDBFNDBfQ1BSUV9JTl9SVEJVRih4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDEyKQorI2RlZmluZSAgIEdfMDAwRTQwX0NQUlFfSU5fUlRCVUYoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDEyKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMEU0MF9DUFJRX0lOX1JUQlVGICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZFRkZGCisjZGVmaW5lICAgU18wMDBFNDBfQ0ZSUV9JTl9SVEJVRih4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDEzKQorI2RlZmluZSAgIEdfMDAwRTQwX0NGUlFfSU5fUlRCVUYoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDEzKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMEU0MF9DRlJRX0lOX1JUQlVGICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZERkZGCisjZGVmaW5lICAgU18wMDBFNDBfQ0ZfUElQRV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDE0KQorI2RlZmluZSAgIEdfMDAwRTQwX0NGX1BJUEVfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDE0KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMEU0MF9DRl9QSVBFX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZCRkZGCisjZGVmaW5lICAgU18wMDBFNDBfRU5HX0VWX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDE1KQorI2RlZmluZSAgIEdfMDAwRTQwX0VOR19FVl9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDE1KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMEU0MF9FTkdfRVZfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkY3RkZGCisjZGVmaW5lICAgU18wMDBFNDBfQ1BfQ01EU1RSTV9CVVNZKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDE2KQorI2RlZmluZSAgIEdfMDAwRTQwX0NQX0NNRFNUUk1fQlVTWSh4KSAgICAgICAgICAgICAgICAgICgoKHgpID4+IDE2KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMEU0MF9DUF9DTURTVFJNX0JVU1kgICAgICAgICAgICAgICAgICAgICAweEZGRkVGRkZGCisjZGVmaW5lICAgU18wMDBFNDBfRTJfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDE3KQorI2RlZmluZSAgIEdfMDAwRTQwX0UyX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDE3KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMEU0MF9FMl9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkRGRkZGCisjZGVmaW5lICAgU18wMDBFNDBfUkIyRF9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDE4KQorI2RlZmluZSAgIEdfMDAwRTQwX1JCMkRfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDE4KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMEU0MF9SQjJEX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkJGRkZGCisjZGVmaW5lICAgU18wMDBFNDBfUkIzRF9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDE5KQorI2RlZmluZSAgIEdfMDAwRTQwX1JCM0RfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDE5KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMEU0MF9SQjNEX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRjdGRkZGCisjZGVmaW5lICAgU18wMDBFNDBfVkFQX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDIwKQorI2RlZmluZSAgIEdfMDAwRTQwX1ZBUF9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDIwKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMEU0MF9WQVBfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRUZGRkZGCisjZGVmaW5lICAgU18wMDBFNDBfUkVfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDIxKQorI2RlZmluZSAgIEdfMDAwRTQwX1JFX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDIxKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMEU0MF9SRV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGREZGRkZGCisjZGVmaW5lICAgU18wMDBFNDBfVEFNX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDIyKQorI2RlZmluZSAgIEdfMDAwRTQwX1RBTV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDIyKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMEU0MF9UQU1fQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGQkZGRkZGCisjZGVmaW5lICAgU18wMDBFNDBfVERNX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDIzKQorI2RlZmluZSAgIEdfMDAwRTQwX1RETV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDIzKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMEU0MF9URE1fQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGN0ZGRkZGCisjZGVmaW5lICAgU18wMDBFNDBfUEJfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDI0KQorI2RlZmluZSAgIEdfMDAwRTQwX1BCX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDI0KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMEU0MF9QQl9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZFRkZGRkZGCisjZGVmaW5lICAgU18wMDBFNDBfVElNX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDI1KQorI2RlZmluZSAgIEdfMDAwRTQwX1RJTV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDI1KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMEU0MF9USU1fQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZERkZGRkZGCisjZGVmaW5lICAgU18wMDBFNDBfR0FfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDI2KQorI2RlZmluZSAgIEdfMDAwRTQwX0dBX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDI2KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMEU0MF9HQV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZCRkZGRkZGCisjZGVmaW5lICAgU18wMDBFNDBfQ0JBMkRfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDI3KQorI2RlZmluZSAgIEdfMDAwRTQwX0NCQTJEX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDI3KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMEU0MF9DQkEyRF9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAweEY3RkZGRkZGCisjZGVmaW5lICAgU18wMDBFNDBfR1VJX0FDVElWRSh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDMxKQorI2RlZmluZSAgIEdfMDAwRTQwX0dVSV9BQ1RJVkUoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDMxKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMEU0MF9HVUlfQUNUSVZFICAgICAgICAgICAgICAgICAgICAgICAgICAweDdGRkZGRkZGCisjZGVmaW5lIFJfMDA2NTIwX0RDX0xCX01FTU9SWV9TUExJVCAgICAgICAgICAgICAgICAgIDB4MDA2NTIwCisjZGVmaW5lICAgU18wMDY1MjBfRENfTEJfTUVNT1JZX1NQTElUKHgpICAgICAgICAgICAgICAgKCgoeCkgJiAweDMpIDw8IDApCisjZGVmaW5lICAgR18wMDY1MjBfRENfTEJfTUVNT1JZX1NQTElUKHgpICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweDMpCisjZGVmaW5lICAgQ18wMDY1MjBfRENfTEJfTUVNT1JZX1NQTElUICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGQworI2RlZmluZSAgIFNfMDA2NTIwX0RDX0xCX01FTU9SWV9TUExJVF9NT0RFKHgpICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyKQorI2RlZmluZSAgIEdfMDA2NTIwX0RDX0xCX01FTU9SWV9TUExJVF9NT0RFKHgpICAgICAgICAgICgoKHgpID4+IDIpICYgMHgxKQorI2RlZmluZSAgIENfMDA2NTIwX0RDX0xCX01FTU9SWV9TUExJVF9NT0RFICAgICAgICAgICAgIDB4RkZGRkZGRkIKKyNkZWZpbmUgICBWXzAwNjUyMF9EQ19MQl9NRU1PUllfU1BMSVRfRDFIQUxGX0QySEFMRiAgICAwCisjZGVmaW5lICAgVl8wMDY1MjBfRENfTEJfTUVNT1JZX1NQTElUX0QxXzNRX0QyXzFRICAgICAgMQorI2RlZmluZSAgIFZfMDA2NTIwX0RDX0xCX01FTU9SWV9TUExJVF9EMV9PTkxZICAgICAgICAgIDIKKyNkZWZpbmUgICBWXzAwNjUyMF9EQ19MQl9NRU1PUllfU1BMSVRfRDFfMVFfRDJfM1EgICAgICAzCisjZGVmaW5lICAgU18wMDY1MjBfRENfTEJfRElTUDFfRU5EX0FEUih4KSAgICAgICAgICAgICAgKCgoeCkgJiAweDdGRikgPDwgNCkKKyNkZWZpbmUgICBHXzAwNjUyMF9EQ19MQl9ESVNQMV9FTkRfQURSKHgpICAgICAgICAgICAgICAoKCh4KSA+PiA0KSAmIDB4N0ZGKQorI2RlZmluZSAgIENfMDA2NTIwX0RDX0xCX0RJU1AxX0VORF9BRFIgICAgICAgICAgICAgICAgIDB4RkZGRjgwMEYKKyNkZWZpbmUgUl8wMDY1NDhfRDFNT0RFX1BSSU9SSVRZX0FfQ05UICAgICAgICAgICAgICAgMHgwMDY1NDgKKyNkZWZpbmUgICBTXzAwNjU0OF9EMU1PREVfUFJJT1JJVFlfTUFSS19BKHgpICAgICAgICAgICAoKCh4KSAmIDB4N0ZGRikgPDwgMCkKKyNkZWZpbmUgICBHXzAwNjU0OF9EMU1PREVfUFJJT1JJVFlfTUFSS19BKHgpICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4N0ZGRikKKyNkZWZpbmUgICBDXzAwNjU0OF9EMU1PREVfUFJJT1JJVFlfTUFSS19BICAgICAgICAgICAgICAweEZGRkY4MDAwCisjZGVmaW5lICAgU18wMDY1NDhfRDFNT0RFX1BSSU9SSVRZX0FfT0ZGKHgpICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDE2KQorI2RlZmluZSAgIEdfMDA2NTQ4X0QxTU9ERV9QUklPUklUWV9BX09GRih4KSAgICAgICAgICAgICgoKHgpID4+IDE2KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwNjU0OF9EMU1PREVfUFJJT1JJVFlfQV9PRkYgICAgICAgICAgICAgICAweEZGRkVGRkZGCisjZGVmaW5lICAgU18wMDY1NDhfRDFNT0RFX1BSSU9SSVRZX0FfRk9SQ0VfTUFTSyh4KSAgICAgKCgoeCkgJiAweDEpIDw8IDI0KQorI2RlZmluZSAgIEdfMDA2NTQ4X0QxTU9ERV9QUklPUklUWV9BX0ZPUkNFX01BU0soeCkgICAgICgoKHgpID4+IDI0KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwNjU0OF9EMU1PREVfUFJJT1JJVFlfQV9GT1JDRV9NQVNLICAgICAgICAweEZFRkZGRkZGCisjZGVmaW5lIFJfMDA2NTRDX0QxTU9ERV9QUklPUklUWV9CX0NOVCAgICAgICAgICAgICAgIDB4MDA2NTRDCisjZGVmaW5lICAgU18wMDY1NENfRDFNT0RFX1BSSU9SSVRZX01BUktfQih4KSAgICAgICAgICAgKCgoeCkgJiAweDdGRkYpIDw8IDApCisjZGVmaW5lICAgR18wMDY1NENfRDFNT0RFX1BSSU9SSVRZX01BUktfQih4KSAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweDdGRkYpCisjZGVmaW5lICAgQ18wMDY1NENfRDFNT0RFX1BSSU9SSVRZX01BUktfQiAgICAgICAgICAgICAgMHhGRkZGODAwMAorI2RlZmluZSAgIFNfMDA2NTRDX0QxTU9ERV9QUklPUklUWV9CX09GRih4KSAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxNikKKyNkZWZpbmUgICBHXzAwNjU0Q19EMU1PREVfUFJJT1JJVFlfQl9PRkYoeCkgICAgICAgICAgICAoKCh4KSA+PiAxNikgJiAweDEpCisjZGVmaW5lICAgQ18wMDY1NENfRDFNT0RFX1BSSU9SSVRZX0JfT0ZGICAgICAgICAgICAgICAgMHhGRkZFRkZGRgorI2RlZmluZSAgIFNfMDA2NTRDX0QxTU9ERV9QUklPUklUWV9CX0FMV0FZU19PTih4KSAgICAgICgoKHgpICYgMHgxKSA8PCAyMCkKKyNkZWZpbmUgICBHXzAwNjU0Q19EMU1PREVfUFJJT1JJVFlfQl9BTFdBWVNfT04oeCkgICAgICAoKCh4KSA+PiAyMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDY1NENfRDFNT0RFX1BSSU9SSVRZX0JfQUxXQVlTX09OICAgICAgICAgMHhGRkVGRkZGRgorI2RlZmluZSAgIFNfMDA2NTRDX0QxTU9ERV9QUklPUklUWV9CX0ZPUkNFX01BU0soeCkgICAgICgoKHgpICYgMHgxKSA8PCAyNCkKKyNkZWZpbmUgICBHXzAwNjU0Q19EMU1PREVfUFJJT1JJVFlfQl9GT1JDRV9NQVNLKHgpICAgICAoKCh4KSA+PiAyNCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDY1NENfRDFNT0RFX1BSSU9SSVRZX0JfRk9SQ0VfTUFTSyAgICAgICAgMHhGRUZGRkZGRgorI2RlZmluZSBSXzAwNkM5Q19EQ1BfQ09OVFJPTCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNkM5QworI2RlZmluZSBSXzAwNkQ0OF9EMk1PREVfUFJJT1JJVFlfQV9DTlQgICAgICAgICAgICAgICAweDAwNkQ0OAorI2RlZmluZSAgIFNfMDA2RDQ4X0QyTU9ERV9QUklPUklUWV9NQVJLX0EoeCkgICAgICAgICAgICgoKHgpICYgMHg3RkZGKSA8PCAwKQorI2RlZmluZSAgIEdfMDA2RDQ4X0QyTU9ERV9QUklPUklUWV9NQVJLX0EoeCkgICAgICAgICAgICgoKHgpID4+IDApICYgMHg3RkZGKQorI2RlZmluZSAgIENfMDA2RDQ4X0QyTU9ERV9QUklPUklUWV9NQVJLX0EgICAgICAgICAgICAgIDB4RkZGRjgwMDAKKyNkZWZpbmUgICBTXzAwNkQ0OF9EMk1PREVfUFJJT1JJVFlfQV9PRkYoeCkgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTYpCisjZGVmaW5lICAgR18wMDZENDhfRDJNT0RFX1BSSU9SSVRZX0FfT0ZGKHgpICAgICAgICAgICAgKCgoeCkgPj4gMTYpICYgMHgxKQorI2RlZmluZSAgIENfMDA2RDQ4X0QyTU9ERV9QUklPUklUWV9BX09GRiAgICAgICAgICAgICAgIDB4RkZGRUZGRkYKKyNkZWZpbmUgICBTXzAwNkQ0OF9EMk1PREVfUFJJT1JJVFlfQV9BTFdBWVNfT04oeCkgICAgICAoKCh4KSAmIDB4MSkgPDwgMjApCisjZGVmaW5lICAgR18wMDZENDhfRDJNT0RFX1BSSU9SSVRZX0FfQUxXQVlTX09OKHgpICAgICAgKCgoeCkgPj4gMjApICYgMHgxKQorI2RlZmluZSAgIENfMDA2RDQ4X0QyTU9ERV9QUklPUklUWV9BX0FMV0FZU19PTiAgICAgICAgIDB4RkZFRkZGRkYKKyNkZWZpbmUgICBTXzAwNkQ0OF9EMk1PREVfUFJJT1JJVFlfQV9GT1JDRV9NQVNLKHgpICAgICAoKCh4KSAmIDB4MSkgPDwgMjQpCisjZGVmaW5lICAgR18wMDZENDhfRDJNT0RFX1BSSU9SSVRZX0FfRk9SQ0VfTUFTSyh4KSAgICAgKCgoeCkgPj4gMjQpICYgMHgxKQorI2RlZmluZSAgIENfMDA2RDQ4X0QyTU9ERV9QUklPUklUWV9BX0ZPUkNFX01BU0sgICAgICAgIDB4RkVGRkZGRkYKKyNkZWZpbmUgUl8wMDZENENfRDJNT0RFX1BSSU9SSVRZX0JfQ05UICAgICAgICAgICAgICAgMHgwMDZENEMKKyNkZWZpbmUgICBTXzAwNkQ0Q19EMk1PREVfUFJJT1JJVFlfTUFSS19CKHgpICAgICAgICAgICAoKCh4KSAmIDB4N0ZGRikgPDwgMCkKKyNkZWZpbmUgICBHXzAwNkQ0Q19EMk1PREVfUFJJT1JJVFlfTUFSS19CKHgpICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4N0ZGRikKKyNkZWZpbmUgICBDXzAwNkQ0Q19EMk1PREVfUFJJT1JJVFlfTUFSS19CICAgICAgICAgICAgICAweEZGRkY4MDAwCisjZGVmaW5lICAgU18wMDZENENfRDJNT0RFX1BSSU9SSVRZX0JfT0ZGKHgpICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDE2KQorI2RlZmluZSAgIEdfMDA2RDRDX0QyTU9ERV9QUklPUklUWV9CX09GRih4KSAgICAgICAgICAgICgoKHgpID4+IDE2KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwNkQ0Q19EMk1PREVfUFJJT1JJVFlfQl9PRkYgICAgICAgICAgICAgICAweEZGRkVGRkZGCisjZGVmaW5lICAgU18wMDZENENfRDJNT0RFX1BSSU9SSVRZX0JfQUxXQVlTX09OKHgpICAgICAgKCgoeCkgJiAweDEpIDw8IDIwKQorI2RlZmluZSAgIEdfMDA2RDRDX0QyTU9ERV9QUklPUklUWV9CX0FMV0FZU19PTih4KSAgICAgICgoKHgpID4+IDIwKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwNkQ0Q19EMk1PREVfUFJJT1JJVFlfQl9BTFdBWVNfT04gICAgICAgICAweEZGRUZGRkZGCisjZGVmaW5lICAgU18wMDZENENfRDJNT0RFX1BSSU9SSVRZX0JfRk9SQ0VfTUFTSyh4KSAgICAgKCgoeCkgJiAweDEpIDw8IDI0KQorI2RlZmluZSAgIEdfMDA2RDRDX0QyTU9ERV9QUklPUklUWV9CX0ZPUkNFX01BU0soeCkgICAgICgoKHgpID4+IDI0KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwNkQ0Q19EMk1PREVfUFJJT1JJVFlfQl9GT1JDRV9NQVNLICAgICAgICAweEZFRkZGRkZGCisjZGVmaW5lIFJfMDA2RDU4X0xCX01BWF9SRVFfT1VUU1RBTkRJTkcgICAgICAgICAgICAgIDB4MDA2RDU4CisjZGVmaW5lICAgU18wMDZENThfTEJfRDFfTUFYX1JFUV9PVVRTVEFORElORyh4KSAgICAgICAgKCgoeCkgJiAweEYpIDw8IDApCisjZGVmaW5lICAgR18wMDZENThfTEJfRDFfTUFYX1JFUV9PVVRTVEFORElORyh4KSAgICAgICAgKCgoeCkgPj4gMCkgJiAweEYpCisjZGVmaW5lICAgQ18wMDZENThfTEJfRDFfTUFYX1JFUV9PVVRTVEFORElORyAgICAgICAgICAgMHhGRkZGRkZGMAorI2RlZmluZSAgIFNfMDA2RDU4X0xCX0QyX01BWF9SRVFfT1VUU1RBTkRJTkcoeCkgICAgICAgICgoKHgpICYgMHhGKSA8PCAxNikKKyNkZWZpbmUgICBHXzAwNkQ1OF9MQl9EMl9NQVhfUkVRX09VVFNUQU5ESU5HKHgpICAgICAgICAoKCh4KSA+PiAxNikgJiAweEYpCisjZGVmaW5lICAgQ18wMDZENThfTEJfRDJfTUFYX1JFUV9PVVRTVEFORElORyAgICAgICAgICAgMHhGRkYwRkZGRgorCisKKyNkZWZpbmUgUl8wMDAwOTBfTUNfU1lTVEVNX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgMHgwMDAwOTAKKyNkZWZpbmUgICBTXzAwMDA5MF9NQ19TWVNURU1fSURMRSh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMCkKKyNkZWZpbmUgICBHXzAwMDA5MF9NQ19TWVNURU1fSURMRSh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDA5MF9NQ19TWVNURU1fSURMRSAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZFCisjZGVmaW5lICAgU18wMDAwOTBfTUNfU0VRVUVOQ0VSX0lETEUoeCkgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDEpCisjZGVmaW5lICAgR18wMDAwOTBfTUNfU0VRVUVOQ0VSX0lETEUoeCkgICAgICAgICAgICAgICAgKCgoeCkgPj4gMSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwOTBfTUNfU0VRVUVOQ0VSX0lETEUgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRAorI2RlZmluZSAgIFNfMDAwMDkwX01DX0FSQklURVJfSURMRSh4KSAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyKQorI2RlZmluZSAgIEdfMDAwMDkwX01DX0FSQklURVJfSURMRSh4KSAgICAgICAgICAgICAgICAgICgoKHgpID4+IDIpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDkwX01DX0FSQklURVJfSURMRSAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkIKKyNkZWZpbmUgICBTXzAwMDA5MF9NQ19TRUxFQ1RfUE0oeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMykKKyNkZWZpbmUgICBHXzAwMDA5MF9NQ19TRUxFQ1RfUE0oeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAzKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDA5MF9NQ19TRUxFQ1RfUE0gICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkY3CisjZGVmaW5lICAgU18wMDAwOTBfUkVTRVJWRUQ0KHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweEYpIDw8IDQpCisjZGVmaW5lICAgR18wMDAwOTBfUkVTRVJWRUQ0KHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gNCkgJiAweEYpCisjZGVmaW5lICAgQ18wMDAwOTBfUkVTRVJWRUQ0ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkYwRgorI2RlZmluZSAgIFNfMDAwMDkwX1JFU0VSVkVEOCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhGKSA8PCA4KQorI2RlZmluZSAgIEdfMDAwMDkwX1JFU0VSVkVEOCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDgpICYgMHhGKQorI2RlZmluZSAgIENfMDAwMDkwX1JFU0VSVkVEOCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkYwRkYKKyNkZWZpbmUgICBTXzAwMDA5MF9SRVNFUlZFRDEyKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RikgPDwgMTIpCisjZGVmaW5lICAgR18wMDAwOTBfUkVTRVJWRUQxMih4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTIpICYgMHhGKQorI2RlZmluZSAgIENfMDAwMDkwX1JFU0VSVkVEMTIgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRjBGRkYKKyNkZWZpbmUgICBTXzAwMDA5MF9NQ0FfSU5JVF9FWEVDVVRFRCh4KSAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTYpCisjZGVmaW5lICAgR18wMDAwOTBfTUNBX0lOSVRfRVhFQ1VURUQoeCkgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTYpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDkwX01DQV9JTklUX0VYRUNVVEVEICAgICAgICAgICAgICAgICAgIDB4RkZGRUZGRkYKKyNkZWZpbmUgICBTXzAwMDA5MF9NQ0FfSURMRSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTcpCisjZGVmaW5lICAgR18wMDAwOTBfTUNBX0lETEUoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTcpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDkwX01DQV9JRExFICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGREZGRkYKKyNkZWZpbmUgICBTXzAwMDA5MF9NQ0FfU0VRX0lETEUoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTgpCisjZGVmaW5lICAgR18wMDAwOTBfTUNBX1NFUV9JRExFKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTgpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDkwX01DQV9TRVFfSURMRSAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGQkZGRkYKKyNkZWZpbmUgICBTXzAwMDA5MF9NQ0FfQVJCX0lETEUoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTkpCisjZGVmaW5lICAgR18wMDAwOTBfTUNBX0FSQl9JRExFKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTkpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDkwX01DQV9BUkJfSURMRSAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGN0ZGRkYKKyNkZWZpbmUgICBTXzAwMDA5MF9SRVNFUlZFRDIwKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RkZGKSA8PCAyMCkKKyNkZWZpbmUgICBHXzAwMDA5MF9SRVNFUlZFRDIwKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyMCkgJiAweEZGRikKKyNkZWZpbmUgICBDXzAwMDA5MF9SRVNFUlZFRDIwICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMEZGRkZGCisjZGVmaW5lIFJfMDAwMTAwX01DQ0ZHX0ZCX0xPQ0FUSU9OICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwCisjZGVmaW5lICAgU18wMDAxMDBfTUNfRkJfU1RBUlQoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweEZGRkYpIDw8IDApCisjZGVmaW5lICAgR18wMDAxMDBfTUNfRkJfU1RBUlQoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweEZGRkYpCisjZGVmaW5lICAgQ18wMDAxMDBfTUNfRkJfU1RBUlQgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGMDAwMAorI2RlZmluZSAgIFNfMDAwMTAwX01DX0ZCX1RPUCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhGRkZGKSA8PCAxNikKKyNkZWZpbmUgICBHXzAwMDEwMF9NQ19GQl9UT1AoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNikgJiAweEZGRkYpCisjZGVmaW5lICAgQ18wMDAxMDBfTUNfRkJfVE9QICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwRkZGRgorI2RlZmluZSBSXzAwMDEwNF9NQ19JTklUX01JU0NfTEFUX1RJTUVSICAgICAgICAgICAgICAweDAwMDEwNAorI2RlZmluZSAgIFNfMDAwMTA0X01DX0NQUl9JTklUX0xBVCh4KSAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhGKSA8PCAwKQorI2RlZmluZSAgIEdfMDAwMTA0X01DX0NQUl9JTklUX0xBVCh4KSAgICAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHhGKQorI2RlZmluZSAgIENfMDAwMTA0X01DX0NQUl9JTklUX0xBVCAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRjAKKyNkZWZpbmUgICBTXzAwMDEwNF9NQ19WRl9JTklUX0xBVCh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RikgPDwgNCkKKyNkZWZpbmUgICBHXzAwMDEwNF9NQ19WRl9JTklUX0xBVCh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiA0KSAmIDB4RikKKyNkZWZpbmUgICBDXzAwMDEwNF9NQ19WRl9JTklUX0xBVCAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRjBGCisjZGVmaW5lICAgU18wMDAxMDRfTUNfRElTUDBSX0lOSVRfTEFUKHgpICAgICAgICAgICAgICAgKCgoeCkgJiAweEYpIDw8IDgpCisjZGVmaW5lICAgR18wMDAxMDRfTUNfRElTUDBSX0lOSVRfTEFUKHgpICAgICAgICAgICAgICAgKCgoeCkgPj4gOCkgJiAweEYpCisjZGVmaW5lICAgQ18wMDAxMDRfTUNfRElTUDBSX0lOSVRfTEFUICAgICAgICAgICAgICAgICAgMHhGRkZGRjBGRgorI2RlZmluZSAgIFNfMDAwMTA0X01DX0RJU1AxUl9JTklUX0xBVCh4KSAgICAgICAgICAgICAgICgoKHgpICYgMHhGKSA8PCAxMikKKyNkZWZpbmUgICBHXzAwMDEwNF9NQ19ESVNQMVJfSU5JVF9MQVQoeCkgICAgICAgICAgICAgICAoKCh4KSA+PiAxMikgJiAweEYpCisjZGVmaW5lICAgQ18wMDAxMDRfTUNfRElTUDFSX0lOSVRfTEFUICAgICAgICAgICAgICAgICAgMHhGRkZGMEZGRgorI2RlZmluZSAgIFNfMDAwMTA0X01DX0ZJWEVEX0lOSVRfTEFUKHgpICAgICAgICAgICAgICAgICgoKHgpICYgMHhGKSA8PCAxNikKKyNkZWZpbmUgICBHXzAwMDEwNF9NQ19GSVhFRF9JTklUX0xBVCh4KSAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNikgJiAweEYpCisjZGVmaW5lICAgQ18wMDAxMDRfTUNfRklYRURfSU5JVF9MQVQgICAgICAgICAgICAgICAgICAgMHhGRkYwRkZGRgorI2RlZmluZSAgIFNfMDAwMTA0X01DX0UyUl9JTklUX0xBVCh4KSAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhGKSA8PCAyMCkKKyNkZWZpbmUgICBHXzAwMDEwNF9NQ19FMlJfSU5JVF9MQVQoeCkgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyMCkgJiAweEYpCisjZGVmaW5lICAgQ18wMDAxMDRfTUNfRTJSX0lOSVRfTEFUICAgICAgICAgICAgICAgICAgICAgMHhGRjBGRkZGRgorI2RlZmluZSAgIFNfMDAwMTA0X1NBTUVfUEFHRV9QUklPKHgpICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhGKSA8PCAyNCkKKyNkZWZpbmUgICBHXzAwMDEwNF9TQU1FX1BBR0VfUFJJTyh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNCkgJiAweEYpCisjZGVmaW5lICAgQ18wMDAxMDRfU0FNRV9QQUdFX1BSSU8gICAgICAgICAgICAgICAgICAgICAgMHhGMEZGRkZGRgorI2RlZmluZSAgIFNfMDAwMTA0X01DX0dMT0JXX0lOSVRfTEFUKHgpICAgICAgICAgICAgICAgICgoKHgpICYgMHhGKSA8PCAyOCkKKyNkZWZpbmUgICBHXzAwMDEwNF9NQ19HTE9CV19JTklUX0xBVCh4KSAgICAgICAgICAgICAgICAoKCh4KSA+PiAyOCkgJiAweEYpCisjZGVmaW5lICAgQ18wMDAxMDRfTUNfR0xPQldfSU5JVF9MQVQgICAgICAgICAgICAgICAgICAgMHgwRkZGRkZGRgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnM2OTByLmggYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JzNjkwci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMGQ5ZmFhLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnM2OTByLmgKKysrIC9kZXYvbnVsbApAQCAtMSw5OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMDggQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLgotICogQ29weXJpZ2h0IDIwMDggUmVkIEhhdCBJbmMuCi0gKiBDb3B5cmlnaHQgMjAwOSBKZXJvbWUgR2xpc3NlLgotICoKLSAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCi0gKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAotICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgotICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCi0gKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKLSAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Ci0gKgotICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KLSAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgotICoKLSAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCi0gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKLSAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAotICogVEhFIENPUFlSSUdIVCBIT0xERVIoUykgT1IgQVVUSE9SKFMpIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCi0gKiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKLSAqIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgotICogT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgotICoKLSAqIEF1dGhvcnM6IERhdmUgQWlybGllCi0gKiAgICAgICAgICBBbGV4IERldWNoZXIKLSAqICAgICAgICAgIEplcm9tZSBHbGlzc2UKLSAqLwotI2lmbmRlZiBSUzY5MFJfSAotI2RlZmluZSBSUzY5MFJfSAotCi0vKiBSUzY5MC9SUzc0MCByZWdpc3RlcnMgKi8KLSNkZWZpbmUgTUNfSU5ERVgJCQkweDAwNzgKLSMJZGVmaW5lIE1DX0lOREVYX01BU0sJCQkweDFGRgotIwlkZWZpbmUgTUNfSU5ERVhfV1JfRU4JCQkoMSA8PCA5KQotIwlkZWZpbmUgTUNfSU5ERVhfV1JfQUNLCQkJMHg3RgotI2RlZmluZSBNQ19EQVRBCQkJCTB4MDA3QwotI2RlZmluZSBIRFBfRkJfTE9DQVRJT04JCQkweDAxMzQKLSNkZWZpbmUgRENfTEJfTUVNT1JZX1NQTElUCQkweDY1MjAKLSNkZWZpbmUJCURDX0xCX01FTU9SWV9TUExJVF9NQVNLCQkJMHgwMDAwMDAwMwotI2RlZmluZQkJRENfTEJfTUVNT1JZX1NQTElUX1NISUZUCQkwCi0jZGVmaW5lCQlEQ19MQl9NRU1PUllfU1BMSVRfRDFIQUxGX0QySEFMRgkwCi0jZGVmaW5lCQlEQ19MQl9NRU1PUllfU1BMSVRfRDFfM1FfRDJfMVEJCTEKLSNkZWZpbmUJCURDX0xCX01FTU9SWV9TUExJVF9EMV9PTkxZCQkyCi0jZGVmaW5lCQlEQ19MQl9NRU1PUllfU1BMSVRfRDFfMVFfRDJfM1EJCTMKLSNkZWZpbmUJCURDX0xCX01FTU9SWV9TUExJVF9TSElGVF9NT0RFCQkoMSA8PCAyKQotI2RlZmluZQkJRENfTEJfRElTUDFfRU5EX0FEUl9TSElGVAkJNAotI2RlZmluZQkJRENfTEJfRElTUDFfRU5EX0FEUl9NQVNLCQkweDAwMDA3RkYwCi0jZGVmaW5lIEQxTU9ERV9QUklPUklUWV9BX0NOVAkJMHg2NTQ4Ci0jZGVmaW5lCQlNT0RFX1BSSU9SSVRZX01BUktfTUFTSwkJCTB4MDAwMDdGRkYKLSNkZWZpbmUJCU1PREVfUFJJT1JJVFlfT0ZGCQkJKDEgPDwgMTYpCi0jZGVmaW5lCQlNT0RFX1BSSU9SSVRZX0FMV0FZU19PTgkJCSgxIDw8IDIwKQotI2RlZmluZQkJTU9ERV9QUklPUklUWV9GT1JDRV9NQVNLCQkoMSA8PCAyNCkKLSNkZWZpbmUgRDFNT0RFX1BSSU9SSVRZX0JfQ05UCQkweDY1NEMKLSNkZWZpbmUgTEJfTUFYX1JFUV9PVVRTVEFORElORwkJMHg2RDU4Ci0jZGVmaW5lCQlMQl9EMV9NQVhfUkVRX09VVFNUQU5ESU5HX01BU0sJCTB4MDAwMDAwMEYKLSNkZWZpbmUJCUxCX0QxX01BWF9SRVFfT1VUU1RBTkRJTkdfU0hJRlQJCTAKLSNkZWZpbmUJCUxCX0QyX01BWF9SRVFfT1VUU1RBTkRJTkdfTUFTSwkJMHgwMDBGMDAwMAotI2RlZmluZQkJTEJfRDJfTUFYX1JFUV9PVVRTVEFORElOR19TSElGVAkJMTYKLSNkZWZpbmUgRENQX0NPTlRST0wJCQkweDZDOUMKLSNkZWZpbmUgRDJNT0RFX1BSSU9SSVRZX0FfQ05UCQkweDZENDgKLSNkZWZpbmUgRDJNT0RFX1BSSU9SSVRZX0JfQ05UCQkweDZENEMKLQotLyogTUMgaW5kaXJlY3QgcmVnaXN0ZXJzICovCi0jZGVmaW5lIE1DX1NUQVRVU19JRExFCQkJCSgxIDw8IDApCi0jZGVmaW5lIE1DX01JU0NfQ05UTAkJCTB4MTgKLSNkZWZpbmUJCURJU0FCTEVfR1RXCQkJKDEgPDwgMSkKLSNkZWZpbmUJCUdBUlRfSU5ERVhfUkVHX0VOCQkoMSA8PCAxMikKLSNkZWZpbmUJCUJMT0NLX0dGWF9EM19FTgkJCSgxIDw8IDE0KQotI2RlZmluZSBHQVJUX0ZFQVRVUkVfSUQJCQkweDJCCi0jZGVmaW5lCQlIQU5HX0VOCQkJCSgxIDw8IDExKQotI2RlZmluZQkJVExCX0VOQUJMRQkJCSgxIDw8IDE4KQotI2RlZmluZQkJUDJQX0VOQUJMRQkJCSgxIDw8IDE5KQotI2RlZmluZQkJR1RXX0xBQ19FTgkJCSgxIDw8IDI1KQotI2RlZmluZQkJTEVWRUwyX0dBUlQJCQkoMCA8PCAzMCkKLSNkZWZpbmUJCUxFVkVMMV9HQVJUCQkJKDEgPDwgMzApCi0jZGVmaW5lCQlQRENfRU4JCQkJKDEgPDwgMzEpCi0jZGVmaW5lIEdBUlRfQkFTRQkJCTB4MkMKLSNkZWZpbmUgR0FSVF9DQUNIRV9DTlRSTAkJMHgyRQotIwlkZWZpbmUgR0FSVF9DQUNIRV9JTlZBTElEQVRFCQkoMSA8PCAwKQotI2RlZmluZSBNQ19TVEFUVVMJCQkweDkwCi0jZGVmaW5lIE1DQ0ZHX0ZCX0xPQ0FUSU9OCQkweDEwMAotI2RlZmluZQkJTUNfRkJfU1RBUlRfTUFTSwkJMHgwMDAwRkZGRgotI2RlZmluZQkJTUNfRkJfU1RBUlRfU0hJRlQJCTAKLSNkZWZpbmUJCU1DX0ZCX1RPUF9NQVNLCQkJMHhGRkZGMDAwMAotI2RlZmluZQkJTUNfRkJfVE9QX1NISUZUCQkJMTYKLSNkZWZpbmUgTUNDRkdfQUdQX0xPQ0FUSU9OCQkweDEwMQotI2RlZmluZQkJTUNfQUdQX1NUQVJUX01BU0sJCTB4MDAwMEZGRkYKLSNkZWZpbmUJCU1DX0FHUF9TVEFSVF9TSElGVAkJMAotI2RlZmluZQkJTUNfQUdQX1RPUF9NQVNLCQkJMHhGRkZGMDAwMAotI2RlZmluZQkJTUNfQUdQX1RPUF9TSElGVAkJMTYKLSNkZWZpbmUgTUNDRkdfQUdQX0JBU0UJCQkweDEwMgotI2RlZmluZSBNQ0NGR19BR1BfQkFTRV8yCQkweDEwMwotI2RlZmluZSBNQ19JTklUX01JU0NfTEFUX1RJTUVSCQkweDEwNAotI2RlZmluZQkJTUNfRElTUDBSX0lOSVRfTEFUX1NISUZUCTgKLSNkZWZpbmUJCU1DX0RJU1AwUl9JTklUX0xBVF9NQVNLCQkweDAwMDAwRjAwCi0jZGVmaW5lCQlNQ19ESVNQMVJfSU5JVF9MQVRfU0hJRlQJMTIKLSNkZWZpbmUJCU1DX0RJU1AxUl9JTklUX0xBVF9NQVNLCQkweDAwMDBGMDAwCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ydjIwMGQuaCBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnYyMDBkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzViMzk4MwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnYyMDBkLmgKQEAgLTAsMCArMSwzNiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA4IEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4KKyAqIENvcHlyaWdodCAyMDA4IFJlZCBIYXQgSW5jLgorICogQ29weXJpZ2h0IDIwMDkgSmVyb21lIEdsaXNzZS4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIE9SIEFVVEhPUihTKSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUgorICogT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCisgKiBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKKyAqIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKiBBdXRob3JzOiBEYXZlIEFpcmxpZQorICogICAgICAgICAgQWxleCBEZXVjaGVyCisgKiAgICAgICAgICBKZXJvbWUgR2xpc3NlCisgKi8KKyNpZm5kZWYgX19SVjIwMERfSF9fCisjZGVmaW5lIF9fUlYyMDBEX0hfXworCisjZGVmaW5lIFJfMDAwMTVDX0FHUF9CQVNFXzIgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTVDCisjZGVmaW5lICAgU18wMDAxNUNfQUdQX0JBU0VfQUREUl8yKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweEYpIDw8IDApCisjZGVmaW5lICAgR18wMDAxNUNfQUdQX0JBU0VfQUREUl8yKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweEYpCisjZGVmaW5lICAgQ18wMDAxNUNfQUdQX0JBU0VfQUREUl8yICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGMAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnYyNTBkLmggYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3J2MjUwZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1YTcwYjAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3J2MjUwZC5oCkBAIC0wLDAgKzEsMTIzIEBACisvKgorICogQ29weXJpZ2h0IDIwMDggQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLgorICogQ29weXJpZ2h0IDIwMDggUmVkIEhhdCBJbmMuCisgKiBDb3B5cmlnaHQgMjAwOSBKZXJvbWUgR2xpc3NlLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIENPUFlSSUdIVCBIT0xERVIoUykgT1IgQVVUSE9SKFMpIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCisgKiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKKyAqIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgorICogT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqIEF1dGhvcnM6IERhdmUgQWlybGllCisgKiAgICAgICAgICBBbGV4IERldWNoZXIKKyAqICAgICAgICAgIEplcm9tZSBHbGlzc2UKKyAqLworI2lmbmRlZiBfX1JWMjUwRF9IX18KKyNkZWZpbmUgX19SVjI1MERfSF9fCisKKyNkZWZpbmUgUl8wMDAwMERfU0NMS19DTlRMX002ICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEQKKyNkZWZpbmUgICBTXzAwMDAwRF9TQ0xLX1NSQ19TRUwoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4NykgPDwgMCkKKyNkZWZpbmUgICBHXzAwMDAwRF9TQ0xLX1NSQ19TRUwoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4NykKKyNkZWZpbmUgICBDXzAwMDAwRF9TQ0xLX1NSQ19TRUwgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkY4CisjZGVmaW5lICAgU18wMDAwMERfQ1BfTUFYX0RZTl9TVE9QX0xBVCh4KSAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDMpCisjZGVmaW5lICAgR18wMDAwMERfQ1BfTUFYX0RZTl9TVE9QX0xBVCh4KSAgICAgICAgICAgICAgKCgoeCkgPj4gMykgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfQ1BfTUFYX0RZTl9TVE9QX0xBVCAgICAgICAgICAgICAgICAgMHhGRkZGRkZGNworI2RlZmluZSAgIFNfMDAwMDBEX0hEUF9NQVhfRFlOX1NUT1BfTEFUKHgpICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCA0KQorI2RlZmluZSAgIEdfMDAwMDBEX0hEUF9NQVhfRFlOX1NUT1BfTEFUKHgpICAgICAgICAgICAgICgoKHgpID4+IDQpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0hEUF9NQVhfRFlOX1NUT1BfTEFUICAgICAgICAgICAgICAgIDB4RkZGRkZGRUYKKyNkZWZpbmUgICBTXzAwMDAwRF9UVl9NQVhfRFlOX1NUT1BfTEFUKHgpICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgNSkKKyNkZWZpbmUgICBHXzAwMDAwRF9UVl9NQVhfRFlOX1NUT1BfTEFUKHgpICAgICAgICAgICAgICAoKCh4KSA+PiA1KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDAwRF9UVl9NQVhfRFlOX1NUT1BfTEFUICAgICAgICAgICAgICAgICAweEZGRkZGRkRGCisjZGVmaW5lICAgU18wMDAwMERfRTJfTUFYX0RZTl9TVE9QX0xBVCh4KSAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDYpCisjZGVmaW5lICAgR18wMDAwMERfRTJfTUFYX0RZTl9TVE9QX0xBVCh4KSAgICAgICAgICAgICAgKCgoeCkgPj4gNikgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfRTJfTUFYX0RZTl9TVE9QX0xBVCAgICAgICAgICAgICAgICAgMHhGRkZGRkZCRgorI2RlZmluZSAgIFNfMDAwMDBEX1NFX01BWF9EWU5fU1RPUF9MQVQoeCkgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCA3KQorI2RlZmluZSAgIEdfMDAwMDBEX1NFX01BWF9EWU5fU1RPUF9MQVQoeCkgICAgICAgICAgICAgICgoKHgpID4+IDcpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX1NFX01BWF9EWU5fU1RPUF9MQVQgICAgICAgICAgICAgICAgIDB4RkZGRkZGN0YKKyNkZWZpbmUgICBTXzAwMDAwRF9JRENUX01BWF9EWU5fU1RPUF9MQVQoeCkgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgOCkKKyNkZWZpbmUgICBHXzAwMDAwRF9JRENUX01BWF9EWU5fU1RPUF9MQVQoeCkgICAgICAgICAgICAoKCh4KSA+PiA4KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDAwRF9JRENUX01BWF9EWU5fU1RPUF9MQVQgICAgICAgICAgICAgICAweEZGRkZGRUZGCisjZGVmaW5lICAgU18wMDAwMERfVklQX01BWF9EWU5fU1RPUF9MQVQoeCkgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDkpCisjZGVmaW5lICAgR18wMDAwMERfVklQX01BWF9EWU5fU1RPUF9MQVQoeCkgICAgICAgICAgICAgKCgoeCkgPj4gOSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfVklQX01BWF9EWU5fU1RPUF9MQVQgICAgICAgICAgICAgICAgMHhGRkZGRkRGRgorI2RlZmluZSAgIFNfMDAwMDBEX1JFX01BWF9EWU5fU1RPUF9MQVQoeCkgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxMCkKKyNkZWZpbmUgICBHXzAwMDAwRF9SRV9NQVhfRFlOX1NUT1BfTEFUKHgpICAgICAgICAgICAgICAoKCh4KSA+PiAxMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfUkVfTUFYX0RZTl9TVE9QX0xBVCAgICAgICAgICAgICAgICAgMHhGRkZGRkJGRgorI2RlZmluZSAgIFNfMDAwMDBEX1BCX01BWF9EWU5fU1RPUF9MQVQoeCkgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxMSkKKyNkZWZpbmUgICBHXzAwMDAwRF9QQl9NQVhfRFlOX1NUT1BfTEFUKHgpICAgICAgICAgICAgICAoKCh4KSA+PiAxMSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfUEJfTUFYX0RZTl9TVE9QX0xBVCAgICAgICAgICAgICAgICAgMHhGRkZGRjdGRgorI2RlZmluZSAgIFNfMDAwMDBEX1RBTV9NQVhfRFlOX1NUT1BfTEFUKHgpICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxMikKKyNkZWZpbmUgICBHXzAwMDAwRF9UQU1fTUFYX0RZTl9TVE9QX0xBVCh4KSAgICAgICAgICAgICAoKCh4KSA+PiAxMikgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfVEFNX01BWF9EWU5fU1RPUF9MQVQgICAgICAgICAgICAgICAgMHhGRkZGRUZGRgorI2RlZmluZSAgIFNfMDAwMDBEX1RETV9NQVhfRFlOX1NUT1BfTEFUKHgpICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxMykKKyNkZWZpbmUgICBHXzAwMDAwRF9URE1fTUFYX0RZTl9TVE9QX0xBVCh4KSAgICAgICAgICAgICAoKCh4KSA+PiAxMykgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfVERNX01BWF9EWU5fU1RPUF9MQVQgICAgICAgICAgICAgICAgMHhGRkZGREZGRgorI2RlZmluZSAgIFNfMDAwMDBEX1JCX01BWF9EWU5fU1RPUF9MQVQoeCkgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxNCkKKyNkZWZpbmUgICBHXzAwMDAwRF9SQl9NQVhfRFlOX1NUT1BfTEFUKHgpICAgICAgICAgICAgICAoKCh4KSA+PiAxNCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfUkJfTUFYX0RZTl9TVE9QX0xBVCAgICAgICAgICAgICAgICAgMHhGRkZGQkZGRgorI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX0RJU1AyKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxNSkKKyNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9ESVNQMih4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfRElTUDIgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGN0ZGRgorI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX0NQKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxNikKKyNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9DUCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNikgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfQ1AgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZFRkZGRgorI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX0hEUCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxNykKKyNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9IRFAoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNykgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfSERQICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZERkZGRgorI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX0RJU1AxKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxOCkKKyNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9ESVNQMSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxOCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfRElTUDEgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZCRkZGRgorI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX1RPUCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxOSkKKyNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9UT1AoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxOSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfVE9QICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkY3RkZGRgorI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX0UyKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyMCkKKyNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9FMih4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfRTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkVGRkZGRgorI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX1NFKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyMSkKKyNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9TRSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyMSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkRGRkZGRgorI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX0lEQ1QoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyMikKKyNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9JRENUKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyMikgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfSURDVCAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkJGRkZGRgorI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX1ZJUCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyMykKKyNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9WSVAoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyMykgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfVklQICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRjdGRkZGRgorI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX1JFKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNCkKKyNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9SRSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfUkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRUZGRkZGRgorI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX1BCKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNSkKKyNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9QQih4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfUEIgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGREZGRkZGRgorI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX1RBTSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNikKKyNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9UQU0oeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNikgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfVEFNICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGQkZGRkZGRgorI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX1RETSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNykKKyNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9URE0oeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNykgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfVERNICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGN0ZGRkZGRgorI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX1JCKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyOCkKKyNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9SQih4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyOCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfUkIgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhFRkZGRkZGRgorI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX1RWX1NDTEsoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyOSkKKyNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9UVl9TQ0xLKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyOSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfVFZfU0NMSyAgICAgICAgICAgICAgICAgICAgICAgMHhERkZGRkZGRgorI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX1NVQlBJQyh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAzMCkKKyNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9TVUJQSUMoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAzMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfU1VCUElDICAgICAgICAgICAgICAgICAgICAgICAgMHhCRkZGRkZGRgorI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX09WMCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAzMSkKKyNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9PVjAoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAzMSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfT1YwICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg3RkZGRkZGRgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnYzNTBkLmggYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3J2MzUwZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3NWM1ZWQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3J2MzUwZC5oCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwOCBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAwOCBSZWQgSGF0IEluYy4KKyAqIENvcHlyaWdodCAyMDA5IEplcm9tZSBHbGlzc2UuCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQ09QWVJJR0hUIEhPTERFUihTKSBPUiBBVVRIT1IoUykgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IKKyAqIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAorICogQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCisgKiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKgorICogQXV0aG9yczogRGF2ZSBBaXJsaWUKKyAqICAgICAgICAgIEFsZXggRGV1Y2hlcgorICogICAgICAgICAgSmVyb21lIEdsaXNzZQorICovCisjaWZuZGVmIF9fUlYzNTBEX0hfXworI2RlZmluZSBfX1JWMzUwRF9IX18KKworLyogUlYzNTAsIFJWMzgwIHJlZ2lzdGVycyAqLworLyogI2RlZmluZSBSXzAwMDAwRF9TQ0xLX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwRCAqLworI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX1ZBUCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyMSkKKyNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9WQVAoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyMSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfVkFQICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkRGRkZGRgorI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX1NSKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNSkKKyNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9TUih4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfU1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGREZGRkZGRgorI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX1BYKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNikKKyNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9QWCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNikgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfUFggICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGQkZGRkZGRgorI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX1RYKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNykKKyNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9UWCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNykgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfVFggICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGN0ZGRkZGRgorI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX1VTKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyOCkKKyNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9VUyh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyOCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfVVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhFRkZGRkZGRgorI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX1NVKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAzMCkKKyNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9TVSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAzMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfU1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhCRkZGRkZGRgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnY1MTUuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnY1MTUuYwppbmRleCBmZDc5OTc0Li40MWEzNGMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3J2NTE1LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ydjUxNS5jCkBAIC0yOSwzNyArMjksMTcgQEAKICNpbmNsdWRlICJkcm1QLmgiCiAjaW5jbHVkZSAicnY1MTVkLmgiCiAjaW5jbHVkZSAicmFkZW9uLmgiCi0KKyNpbmNsdWRlICJhdG9tLmgiCiAjaW5jbHVkZSAicnY1MTVfcmVnX3NhZmUuaCIKLS8qIHJ2NTE1IGRlcGVuZHMgb24gOiAqLwotdm9pZCByMTAwX2hkcF9yZXNldChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci1pbnQgcjEwMF9jcF9yZXNldChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci1pbnQgcjEwMF9yYjJkX3Jlc2V0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLWludCByMTAwX2d1aV93YWl0X2Zvcl9pZGxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLWludCByMTAwX2NwX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHVuc2lnbmVkIHJpbmdfc2l6ZSk7Ci12b2lkIHI0MjBfcGlwZXNfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci12b2lkIHJzNjAwX21jX2Rpc2FibGVfY2xpZW50cyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci12b2lkIHJzNjAwX2Rpc2FibGVfdmdhKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIAotLyogVGhpcyBmaWxlcyBnYXRoZXIgZnVuY3Rpb25zIHNwZWNpZmljcyB0bzoKLSAqIHJ2NTE1Ci0gKgotICogU29tZSBvZiB0aGVzZSBmdW5jdGlvbnMgbWlnaHQgYmUgdXNlZCBieSBuZXdlciBBU0lDcy4KLSAqLworLyogVGhpcyBmaWxlcyBnYXRoZXIgZnVuY3Rpb25zIHNwZWNpZmljcyB0bzogcnY1MTUgKi8KIGludCBydjUxNV9kZWJ1Z2ZzX3BpcGVzX2luZm9faW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiBpbnQgcnY1MTVfZGVidWdmc19nYV9pbmZvX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogdm9pZCBydjUxNV9ncHVfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiBpbnQgcnY1MTVfbWNfd2FpdF9mb3JfaWRsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiAKLQotLyoKLSAqIE1DCi0gKi8KLWludCBydjUxNV9tY19pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQordm9pZCBydjUxNV9kZWJ1Z2ZzKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewotCXVpbnQzMl90IHRtcDsKLQlpbnQgcjsKLQogCWlmIChyMTAwX2RlYnVnZnNfcmJibV9pbml0KHJkZXYpKSB7CiAJCURSTV9FUlJPUigiRmFpbGVkIHRvIHJlZ2lzdGVyIGRlYnVnZnMgZmlsZSBmb3IgUkJCTSAhXG4iKTsKIAl9CkBAIC02OSw2NyArNDksOCBAQAogCWlmIChydjUxNV9kZWJ1Z2ZzX2dhX2luZm9faW5pdChyZGV2KSkgewogCQlEUk1fRVJST1IoIkZhaWxlZCB0byByZWdpc3RlciBkZWJ1Z2ZzIGZpbGUgZm9yIHBpcGVzICFcbiIpOwogCX0KLQotCXJ2NTE1X2dwdV9pbml0KHJkZXYpOwotCXJ2MzcwX3BjaWVfZ2FydF9kaXNhYmxlKHJkZXYpOwotCi0JLyogU2V0dXAgR1BVIG1lbW9yeSBzcGFjZSAqLwotCXJkZXYtPm1jLnZyYW1fbG9jYXRpb24gPSAweEZGRkZGRkZGVUw7Ci0JcmRldi0+bWMuZ3R0X2xvY2F0aW9uID0gMHhGRkZGRkZGRlVMOwotCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19BR1ApIHsKLQkJciA9IHJhZGVvbl9hZ3BfaW5pdChyZGV2KTsKLQkJaWYgKHIpIHsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIltkcm1dIERpc2FibGluZyBBR1BcbiIpOwotCQkJcmRldi0+ZmxhZ3MgJj0gflJBREVPTl9JU19BR1A7Ci0JCQlyZGV2LT5tYy5ndHRfc2l6ZSA9IHJhZGVvbl9nYXJ0X3NpemUgKiAxMDI0ICogMTAyNDsKLQkJfSBlbHNlIHsKLQkJCXJkZXYtPm1jLmd0dF9sb2NhdGlvbiA9IHJkZXYtPm1jLmFncF9iYXNlOwotCQl9Ci0JfQotCXIgPSByYWRlb25fbWNfc2V0dXAocmRldik7Ci0JaWYgKHIpIHsKLQkJcmV0dXJuIHI7Ci0JfQotCi0JLyogUHJvZ3JhbSBHUFUgbWVtb3J5IHNwYWNlICovCi0JcnM2MDBfbWNfZGlzYWJsZV9jbGllbnRzKHJkZXYpOwotCWlmIChydjUxNV9tY193YWl0X2Zvcl9pZGxlKHJkZXYpKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIkZhaWxlZCB0byB3YWl0IE1DIGlkbGUgd2hpbGUgIgotCQkgICAgICAgInByb2dyYW1taW5nIHBpcGVzLiBCYWQgdGhpbmdzIG1pZ2h0IGhhcHBlbi5cbiIpOwotCX0KLQkvKiBXcml0ZSBWUkFNIHNpemUgaW4gY2FzZSB3ZSBhcmUgbGltaXRpbmcgaXQgKi8KLQlXUkVHMzIoUkFERU9OX0NPTkZJR19NRU1TSVpFLCByZGV2LT5tYy5yZWFsX3ZyYW1fc2l6ZSk7Ci0JdG1wID0gUkVHX1NFVChNQ19GQl9TVEFSVCwgcmRldi0+bWMudnJhbV9sb2NhdGlvbiA+PiAxNik7Ci0JV1JFRzMyKDB4MTM0LCB0bXApOwotCXRtcCA9IHJkZXYtPm1jLnZyYW1fbG9jYXRpb24gKyByZGV2LT5tYy5tY192cmFtX3NpemUgLSAxOwotCXRtcCA9IFJFR19TRVQoTUNfRkJfVE9QLCB0bXAgPj4gMTYpOwotCXRtcCB8PSBSRUdfU0VUKE1DX0ZCX1NUQVJULCByZGV2LT5tYy52cmFtX2xvY2F0aW9uID4+IDE2KTsKLQlXUkVHMzJfTUMoTUNfRkJfTE9DQVRJT04sIHRtcCk7Ci0JV1JFRzMyKEhEUF9GQl9MT0NBVElPTiwgcmRldi0+bWMudnJhbV9sb2NhdGlvbiA+PiAxNik7Ci0JV1JFRzMyKDB4MzEwLCByZGV2LT5tYy52cmFtX2xvY2F0aW9uKTsKLQlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfQUdQKSB7Ci0JCXRtcCA9IHJkZXYtPm1jLmd0dF9sb2NhdGlvbiArIHJkZXYtPm1jLmd0dF9zaXplIC0gMTsKLQkJdG1wID0gUkVHX1NFVChNQ19BR1BfVE9QLCB0bXAgPj4gMTYpOwotCQl0bXAgfD0gUkVHX1NFVChNQ19BR1BfU1RBUlQsIHJkZXYtPm1jLmd0dF9sb2NhdGlvbiA+PiAxNik7Ci0JCVdSRUczMl9NQyhNQ19BR1BfTE9DQVRJT04sIHRtcCk7Ci0JCVdSRUczMl9NQyhNQ19BR1BfQkFTRSwgcmRldi0+bWMuYWdwX2Jhc2UpOwotCQlXUkVHMzJfTUMoTUNfQUdQX0JBU0VfMiwgMCk7Ci0JfSBlbHNlIHsKLQkJV1JFRzMyX01DKE1DX0FHUF9MT0NBVElPTiwgMHgwRkZGRkZGRik7Ci0JCVdSRUczMl9NQyhNQ19BR1BfQkFTRSwgMCk7Ci0JCVdSRUczMl9NQyhNQ19BR1BfQkFTRV8yLCAwKTsKLQl9Ci0JcmV0dXJuIDA7CiB9CiAKLXZvaWQgcnY1MTVfbWNfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKLXsKLX0KLQotCi0vKgotICogR2xvYmFsIEdQVSBmdW5jdGlvbnMKLSAqLwogdm9pZCBydjUxNV9yaW5nX3N0YXJ0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewogCWludCByOwpAQCAtMTk4LDExICsxMTksNiBAQAogCXJhZGVvbl9yaW5nX3VubG9ja19jb21taXQocmRldik7CiB9CiAKLXZvaWQgcnY1MTVfZXJyYXRhKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQotewotCXJkZXYtPnBsbF9lcnJhdGEgPSAwOwotfQotCiBpbnQgcnY1MTVfbWNfd2FpdF9mb3JfaWRsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKIAl1bnNpZ25lZCBpOwpAQCAtMjE5LDYgKzEzNSwxMiBAQAogCXJldHVybiAtMTsKIH0KIAordm9pZCBydjUxNV92Z2FfcmVuZGVyX2Rpc2FibGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJV1JFRzMyKFJfMDAwMzAwX1ZHQV9SRU5ERVJfQ09OVFJPTCwKKwkJUlJFRzMyKFJfMDAwMzAwX1ZHQV9SRU5ERVJfQ09OVFJPTCkgJiBDXzAwMDMwMF9WR0FfVlNUQVRVU19DTlRMKTsKK30KKwogdm9pZCBydjUxNV9ncHVfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKIAl1bnNpZ25lZCBwaXBlX3NlbGVjdF9jdXJyZW50LCBnYl9waXBlX3NlbGVjdCwgdG1wOwpAQCAtMjMxLDcgKzE1Myw3IEBACiAJCSAgICAgICAicmVzZXRpbmcgR1BVLiBCYWQgdGhpbmdzIG1pZ2h0IGhhcHBlbi5cbiIpOwogCX0KIAotCXJzNjAwX2Rpc2FibGVfdmdhKHJkZXYpOworCXJ2NTE1X3ZnYV9yZW5kZXJfZGlzYWJsZShyZGV2KTsKIAogCXI0MjBfcGlwZXNfaW5pdChyZGV2KTsKIAlnYl9waXBlX3NlbGVjdCA9IFJSRUczMigweDQwMkMpOwpAQCAtMzM1LDEwICsyNTcsNiBAQAogCXJldHVybiAwOwogfQogCi0KLS8qCi0gKiBWUkFNIGluZm8KLSAqLwogc3RhdGljIHZvaWQgcnY1MTVfdnJhbV9nZXRfdHlwZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKIAl1aW50MzJfdCB0bXA7CkBAIC0zNzQsMTAgKzI5Miw2IEBACiAJcmRldi0+cG0uc2Nsay5mdWxsID0gcmZpeGVkX2RpdihyZGV2LT5wbS5zY2xrLCBhKTsKIH0KIAotCi0vKgotICogSW5kaXJlY3QgcmVnaXN0ZXJzIGFjY2Vzc29yCi0gKi8KIHVpbnQzMl90IHJ2NTE1X21jX3JyZWcoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHVpbnQzMl90IHJlZykKIHsKIAl1aW50MzJfdCByOwpAQCAtMzk1LDkgKzMwOSw2IEBACiAJV1JFRzMyKE1DX0lORF9JTkRFWCwgMCk7CiB9CiAKLS8qCi0gKiBEZWJ1Z2ZzIGluZm8KLSAqLwogI2lmIGRlZmluZWQoQ09ORklHX0RFQlVHX0ZTKQogc3RhdGljIGludCBydjUxNV9kZWJ1Z2ZzX3BpcGVzX2luZm8oc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpkYXRhKQogewpAQCAtNDU5LDEzICszNzAsMjU3IEBACiAjZW5kaWYKIH0KIAotLyoKLSAqIEFzaWMgaW5pdGlhbGl6YXRpb24KLSAqLwotaW50IHJ2NTE1X2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit2b2lkIHJ2NTE1X21jX3N0b3Aoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHN0cnVjdCBydjUxNV9tY19zYXZlICpzYXZlKQoreworCXNhdmUtPmQxdmdhX2NvbnRyb2wgPSBSUkVHMzIoUl8wMDAzMzBfRDFWR0FfQ09OVFJPTCk7CisJc2F2ZS0+ZDJ2Z2FfY29udHJvbCA9IFJSRUczMihSXzAwMDMzOF9EMlZHQV9DT05UUk9MKTsKKwlzYXZlLT52Z2FfcmVuZGVyX2NvbnRyb2wgPSBSUkVHMzIoUl8wMDAzMDBfVkdBX1JFTkRFUl9DT05UUk9MKTsKKwlzYXZlLT52Z2FfaGRwX2NvbnRyb2wgPSBSUkVHMzIoUl8wMDAzMjhfVkdBX0hEUF9DT05UUk9MKTsKKwlzYXZlLT5kMWNydGNfY29udHJvbCA9IFJSRUczMihSXzAwNjA4MF9EMUNSVENfQ09OVFJPTCk7CisJc2F2ZS0+ZDJjcnRjX2NvbnRyb2wgPSBSUkVHMzIoUl8wMDY4ODBfRDJDUlRDX0NPTlRST0wpOworCisJLyogU3RvcCBhbGwgdmlkZW8gKi8KKwlXUkVHMzIoUl8wMDAzMzBfRDFWR0FfQ09OVFJPTCwgMCk7CisJV1JFRzMyKFJfMDA2OEU4X0QyQ1JUQ19VUERBVEVfTE9DSywgMCk7CisJV1JFRzMyKFJfMDAwMzAwX1ZHQV9SRU5ERVJfQ09OVFJPTCwgMCk7CisJV1JFRzMyKFJfMDA2MEU4X0QxQ1JUQ19VUERBVEVfTE9DSywgMSk7CisJV1JFRzMyKFJfMDA2OEU4X0QyQ1JUQ19VUERBVEVfTE9DSywgMSk7CisJV1JFRzMyKFJfMDA2MDgwX0QxQ1JUQ19DT05UUk9MLCAwKTsKKwlXUkVHMzIoUl8wMDY4ODBfRDJDUlRDX0NPTlRST0wsIDApOworCVdSRUczMihSXzAwNjBFOF9EMUNSVENfVVBEQVRFX0xPQ0ssIDApOworCVdSRUczMihSXzAwNjhFOF9EMkNSVENfVVBEQVRFX0xPQ0ssIDApOworfQorCit2b2lkIHJ2NTE1X21jX3Jlc3VtZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgc3RydWN0IHJ2NTE1X21jX3NhdmUgKnNhdmUpCit7CisJV1JFRzMyKFJfMDA2MTEwX0QxR1JQSF9QUklNQVJZX1NVUkZBQ0VfQUREUkVTUywgcmRldi0+bWMudnJhbV9zdGFydCk7CisJV1JFRzMyKFJfMDA2MTE4X0QxR1JQSF9TRUNPTkRBUllfU1VSRkFDRV9BRERSRVNTLCByZGV2LT5tYy52cmFtX3N0YXJ0KTsKKwlXUkVHMzIoUl8wMDY5MTBfRDJHUlBIX1BSSU1BUllfU1VSRkFDRV9BRERSRVNTLCByZGV2LT5tYy52cmFtX3N0YXJ0KTsKKwlXUkVHMzIoUl8wMDY5MThfRDJHUlBIX1NFQ09OREFSWV9TVVJGQUNFX0FERFJFU1MsIHJkZXYtPm1jLnZyYW1fc3RhcnQpOworCVdSRUczMihSXzAwMDMxMF9WR0FfTUVNT1JZX0JBU0VfQUREUkVTUywgcmRldi0+bWMudnJhbV9zdGFydCk7CisJLyogVW5sb2NrIGhvc3QgYWNjZXNzICovCisJV1JFRzMyKFJfMDAwMzI4X1ZHQV9IRFBfQ09OVFJPTCwgc2F2ZS0+dmdhX2hkcF9jb250cm9sKTsKKwltZGVsYXkoMSk7CisJLyogUmVzdG9yZSB2aWRlbyBzdGF0ZSAqLworCVdSRUczMihSXzAwNjBFOF9EMUNSVENfVVBEQVRFX0xPQ0ssIDEpOworCVdSRUczMihSXzAwNjhFOF9EMkNSVENfVVBEQVRFX0xPQ0ssIDEpOworCVdSRUczMihSXzAwNjA4MF9EMUNSVENfQ09OVFJPTCwgc2F2ZS0+ZDFjcnRjX2NvbnRyb2wpOworCVdSRUczMihSXzAwNjg4MF9EMkNSVENfQ09OVFJPTCwgc2F2ZS0+ZDJjcnRjX2NvbnRyb2wpOworCVdSRUczMihSXzAwNjBFOF9EMUNSVENfVVBEQVRFX0xPQ0ssIDApOworCVdSRUczMihSXzAwNjhFOF9EMkNSVENfVVBEQVRFX0xPQ0ssIDApOworCVdSRUczMihSXzAwMDMzMF9EMVZHQV9DT05UUk9MLCBzYXZlLT5kMXZnYV9jb250cm9sKTsKKwlXUkVHMzIoUl8wMDAzMzhfRDJWR0FfQ09OVFJPTCwgc2F2ZS0+ZDJ2Z2FfY29udHJvbCk7CisJV1JFRzMyKFJfMDAwMzAwX1ZHQV9SRU5ERVJfQ09OVFJPTCwgc2F2ZS0+dmdhX3JlbmRlcl9jb250cm9sKTsKK30KKwordm9pZCBydjUxNV9tY19wcm9ncmFtKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCXN0cnVjdCBydjUxNV9tY19zYXZlIHNhdmU7CisKKwkvKiBTdG9wcyBhbGwgbWMgY2xpZW50cyAqLworCXJ2NTE1X21jX3N0b3AocmRldiwgJnNhdmUpOworCisJLyogV2FpdCBmb3IgbWMgaWRsZSAqLworCWlmIChydjUxNV9tY193YWl0X2Zvcl9pZGxlKHJkZXYpKQorCQlkZXZfd2FybihyZGV2LT5kZXYsICJXYWl0IE1DIGlkbGUgdGltZW91dCBiZWZvcmUgdXBkYXRpbmcgTUMuXG4iKTsKKwkvKiBXcml0ZSBWUkFNIHNpemUgaW4gY2FzZSB3ZSBhcmUgbGltaXRpbmcgaXQgKi8KKwlXUkVHMzIoUl8wMDAwRjhfQ09ORklHX01FTVNJWkUsIHJkZXYtPm1jLnJlYWxfdnJhbV9zaXplKTsKKwkvKiBQcm9ncmFtIE1DLCBzaG91bGQgYmUgYSAzMmJpdHMgbGltaXRlZCBhZGRyZXNzIHNwYWNlICovCisJV1JFRzMyX01DKFJfMDAwMDAxX01DX0ZCX0xPQ0FUSU9OLAorCQkJU18wMDAwMDFfTUNfRkJfU1RBUlQocmRldi0+bWMudnJhbV9zdGFydCA+PiAxNikgfAorCQkJU18wMDAwMDFfTUNfRkJfVE9QKHJkZXYtPm1jLnZyYW1fZW5kID4+IDE2KSk7CisJV1JFRzMyKFJfMDAwMTM0X0hEUF9GQl9MT0NBVElPTiwKKwkJU18wMDAxMzRfSERQX0ZCX1NUQVJUKHJkZXYtPm1jLnZyYW1fc3RhcnQgPj4gMTYpKTsKKwlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfQUdQKSB7CisJCVdSRUczMl9NQyhSXzAwMDAwMl9NQ19BR1BfTE9DQVRJT04sCisJCQlTXzAwMDAwMl9NQ19BR1BfU1RBUlQocmRldi0+bWMuZ3R0X3N0YXJ0ID4+IDE2KSB8CisJCQlTXzAwMDAwMl9NQ19BR1BfVE9QKHJkZXYtPm1jLmd0dF9lbmQgPj4gMTYpKTsKKwkJV1JFRzMyX01DKFJfMDAwMDAzX01DX0FHUF9CQVNFLCBsb3dlcl8zMl9iaXRzKHJkZXYtPm1jLmFncF9iYXNlKSk7CisJCVdSRUczMl9NQyhSXzAwMDAwNF9NQ19BR1BfQkFTRV8yLAorCQkJU18wMDAwMDRfQUdQX0JBU0VfQUREUl8yKHVwcGVyXzMyX2JpdHMocmRldi0+bWMuYWdwX2Jhc2UpKSk7CisJfSBlbHNlIHsKKwkJV1JFRzMyX01DKFJfMDAwMDAyX01DX0FHUF9MT0NBVElPTiwgMHhGRkZGRkZGRik7CisJCVdSRUczMl9NQyhSXzAwMDAwM19NQ19BR1BfQkFTRSwgMCk7CisJCVdSRUczMl9NQyhSXzAwMDAwNF9NQ19BR1BfQkFTRV8yLCAwKTsKKwl9CisKKwlydjUxNV9tY19yZXN1bWUocmRldiwgJnNhdmUpOworfQorCit2b2lkIHJ2NTE1X2Nsb2NrX3N0YXJ0dXAoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJaWYgKHJhZGVvbl9keW5jbGtzICE9IC0xICYmIHJhZGVvbl9keW5jbGtzKQorCQlyYWRlb25fYXRvbV9zZXRfY2xvY2tfZ2F0aW5nKHJkZXYsIDEpOworCS8qIFdlIG5lZWQgdG8gZm9yY2Ugb24gc29tZSBvZiB0aGUgYmxvY2sgKi8KKwlXUkVHMzJfUExMKFJfMDAwMDBGX0NQX0RZTl9DTlRMLAorCQlSUkVHMzJfUExMKFJfMDAwMDBGX0NQX0RZTl9DTlRMKSB8IFNfMDAwMDBGX0NQX0ZPUkNFT04oMSkpOworCVdSRUczMl9QTEwoUl8wMDAwMTFfRTJfRFlOX0NOVEwsCisJCVJSRUczMl9QTEwoUl8wMDAwMTFfRTJfRFlOX0NOVEwpIHwgU18wMDAwMTFfRTJfRk9SQ0VPTigxKSk7CisJV1JFRzMyX1BMTChSXzAwMDAxM19JRENUX0RZTl9DTlRMLAorCQlSUkVHMzJfUExMKFJfMDAwMDEzX0lEQ1RfRFlOX0NOVEwpIHwgU18wMDAwMTNfSURDVF9GT1JDRU9OKDEpKTsKK30KKworc3RhdGljIGludCBydjUxNV9zdGFydHVwKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCWludCByOworCisJcnY1MTVfbWNfcHJvZ3JhbShyZGV2KTsKKwkvKiBSZXN1bWUgY2xvY2sgKi8KKwlydjUxNV9jbG9ja19zdGFydHVwKHJkZXYpOworCS8qIEluaXRpYWxpemUgR1BVIGNvbmZpZ3VyYXRpb24gKCMgcGlwZXMsIC4uLikgKi8KKwlydjUxNV9ncHVfaW5pdChyZGV2KTsKKwkvKiBJbml0aWFsaXplIEdBUlQgKGluaXRpYWxpemUgYWZ0ZXIgVFRNIHNvIHdlIGNhbiBhbGxvY2F0ZQorCSAqIG1lbW9yeSB0aHJvdWdoIFRUTSBidXQgZmluYWxpemUgYWZ0ZXIgVFRNKSAqLworCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19QQ0lFKSB7CisJCXIgPSBydjM3MF9wY2llX2dhcnRfZW5hYmxlKHJkZXYpOworCQlpZiAocikKKwkJCXJldHVybiByOworCX0KKwkvKiBFbmFibGUgSVJRICovCisJcmRldi0+aXJxLnN3X2ludCA9IHRydWU7CisJcnM2MDBfaXJxX3NldChyZGV2KTsKKwkvKiAxTSByaW5nIGJ1ZmZlciAqLworCXIgPSByMTAwX2NwX2luaXQocmRldiwgMTAyNCAqIDEwMjQpOworCWlmIChyKSB7CisJCWRldl9lcnIocmRldi0+ZGV2LCAiZmFpbGxlZCBpbml0aWFsaXppbmcgQ1AgKCVkKS5cbiIsIHIpOworCQlyZXR1cm4gcjsKKwl9CisJciA9IHIxMDBfd2JfaW5pdChyZGV2KTsKKwlpZiAocikKKwkJZGV2X2VycihyZGV2LT5kZXYsICJmYWlsbGVkIGluaXRpYWxpemluZyBXQiAoJWQpLlxuIiwgcik7CisJciA9IHIxMDBfaWJfaW5pdChyZGV2KTsKKwlpZiAocikgeworCQlkZXZfZXJyKHJkZXYtPmRldiwgImZhaWxsZWQgaW5pdGlhbGl6aW5nIElCICglZCkuXG4iLCByKTsKKwkJcmV0dXJuIHI7CisJfQorCXJldHVybiAwOworfQorCitpbnQgcnY1MTVfcmVzdW1lKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCS8qIE1ha2Ugc3VyIEdBUlQgYXJlIG5vdCB3b3JraW5nICovCisJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX1BDSUUpCisJCXJ2MzcwX3BjaWVfZ2FydF9kaXNhYmxlKHJkZXYpOworCS8qIFJlc3VtZSBjbG9jayBiZWZvcmUgZG9pbmcgcmVzZXQgKi8KKwlydjUxNV9jbG9ja19zdGFydHVwKHJkZXYpOworCS8qIFJlc2V0IGdwdSBiZWZvcmUgcG9zdGluZyBvdGhlcndpc2UgQVRPTSB3aWxsIGVudGVyIGluZmluaXRlIGxvb3AgKi8KKwlpZiAocmFkZW9uX2dwdV9yZXNldChyZGV2KSkgeworCQlkZXZfd2FybihyZGV2LT5kZXYsICJHUFUgcmVzZXQgZmFpbGVkICEgKDB4RTQwPTB4JTA4WCwgMHg3QzA9MHglMDhYKVxuIiwKKwkJCVJSRUczMihSXzAwMEU0MF9SQkJNX1NUQVRVUyksCisJCQlSUkVHMzIoUl8wMDA3QzBfQ1BfU1RBVCkpOworCX0KKwkvKiBwb3N0ICovCisJYXRvbV9hc2ljX2luaXQocmRldi0+bW9kZV9pbmZvLmF0b21fY29udGV4dCk7CisJLyogUmVzdW1lIGNsb2NrIGFmdGVyIHBvc3RpbmcgKi8KKwlydjUxNV9jbG9ja19zdGFydHVwKHJkZXYpOworCXJldHVybiBydjUxNV9zdGFydHVwKHJkZXYpOworfQorCitpbnQgcnY1MTVfc3VzcGVuZChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwlyMTAwX2NwX2Rpc2FibGUocmRldik7CisJcjEwMF93Yl9kaXNhYmxlKHJkZXYpOworCXJzNjAwX2lycV9kaXNhYmxlKHJkZXYpOworCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19QQ0lFKQorCQlydjM3MF9wY2llX2dhcnRfZGlzYWJsZShyZGV2KTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCBydjUxNV9zZXRfc2FmZV9yZWdpc3RlcnMoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7CiAJcmRldi0+Y29uZmlnLnIzMDAucmVnX3NhZmVfYm0gPSBydjUxNV9yZWdfc2FmZV9ibTsKIAlyZGV2LT5jb25maWcucjMwMC5yZWdfc2FmZV9ibV9zaXplID0gQVJSQVlfU0laRShydjUxNV9yZWdfc2FmZV9ibSk7Cit9CisKK3ZvaWQgcnY1MTVfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwlydjUxNV9zdXNwZW5kKHJkZXYpOworCXIxMDBfY3BfZmluaShyZGV2KTsKKwlyMTAwX3diX2ZpbmkocmRldik7CisJcjEwMF9pYl9maW5pKHJkZXYpOworCXJhZGVvbl9nZW1fZmluaShyZGV2KTsKKyAgICBydjM3MF9wY2llX2dhcnRfZmluaShyZGV2KTsKKwlyYWRlb25fYWdwX2ZpbmkocmRldik7CisJcmFkZW9uX2lycV9rbXNfZmluaShyZGV2KTsKKwlyYWRlb25fZmVuY2VfZHJpdmVyX2ZpbmkocmRldik7CisJcmFkZW9uX29iamVjdF9maW5pKHJkZXYpOworCXJhZGVvbl9hdG9tYmlvc19maW5pKHJkZXYpOworCWtmcmVlKHJkZXYtPmJpb3MpOworCXJkZXYtPmJpb3MgPSBOVUxMOworfQorCitpbnQgcnY1MTVfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwlpbnQgcjsKKworCS8qIEluaXRpYWxpemUgc2NyYXRjaCByZWdpc3RlcnMgKi8KKwlyYWRlb25fc2NyYXRjaF9pbml0KHJkZXYpOworCS8qIEluaXRpYWxpemUgc3VyZmFjZSByZWdpc3RlcnMgKi8KKwlyYWRlb25fc3VyZmFjZV9pbml0KHJkZXYpOworCS8qIFRPRE86IGRpc2FibGUgVkdBIG5lZWQgdG8gdXNlIFZHQSByZXF1ZXN0ICovCisJLyogQklPUyovCisJaWYgKCFyYWRlb25fZ2V0X2Jpb3MocmRldikpIHsKKwkJaWYgKEFTSUNfSVNfQVZJVk8ocmRldikpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJaWYgKHJkZXYtPmlzX2F0b21fYmlvcykgeworCQlyID0gcmFkZW9uX2F0b21iaW9zX2luaXQocmRldik7CisJCWlmIChyKQorCQkJcmV0dXJuIHI7CisJfSBlbHNlIHsKKwkJZGV2X2VycihyZGV2LT5kZXYsICJFeHBlY3RpbmcgYXRvbWJpb3MgZm9yIFJWNTE1IEdQVVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwkvKiBSZXNldCBncHUgYmVmb3JlIHBvc3Rpbmcgb3RoZXJ3aXNlIEFUT00gd2lsbCBlbnRlciBpbmZpbml0ZSBsb29wICovCisJaWYgKHJhZGVvbl9ncHVfcmVzZXQocmRldikpIHsKKwkJZGV2X3dhcm4ocmRldi0+ZGV2LAorCQkJIkdQVSByZXNldCBmYWlsZWQgISAoMHhFNDA9MHglMDhYLCAweDdDMD0weCUwOFgpXG4iLAorCQkJUlJFRzMyKFJfMDAwRTQwX1JCQk1fU1RBVFVTKSwKKwkJCVJSRUczMihSXzAwMDdDMF9DUF9TVEFUKSk7CisJfQorCS8qIGNoZWNrIGlmIGNhcmRzIGFyZSBwb3N0ZWQgb3Igbm90ICovCisJaWYgKCFyYWRlb25fY2FyZF9wb3N0ZWQocmRldikgJiYgcmRldi0+YmlvcykgeworCQlEUk1fSU5GTygiR1BVIG5vdCBwb3N0ZWQuIHBvc3Rpbmcgbm93Li4uXG4iKTsKKwkJYXRvbV9hc2ljX2luaXQocmRldi0+bW9kZV9pbmZvLmF0b21fY29udGV4dCk7CisJfQorCS8qIEluaXRpYWxpemUgY2xvY2tzICovCisJcmFkZW9uX2dldF9jbG9ja19pbmZvKHJkZXYtPmRkZXYpOworCS8qIEdldCB2cmFtIGluZm9ybWF0aW9ucyAqLworCXJ2NTE1X3ZyYW1faW5mbyhyZGV2KTsKKwkvKiBJbml0aWFsaXplIG1lbW9yeSBjb250cm9sbGVyIChhbHNvIHRlc3QgQUdQKSAqLworCXIgPSByNDIwX21jX2luaXQocmRldik7CisJaWYgKHIpCisJCXJldHVybiByOworCXJ2NTE1X2RlYnVnZnMocmRldik7CisJLyogRmVuY2UgZHJpdmVyICovCisJciA9IHJhZGVvbl9mZW5jZV9kcml2ZXJfaW5pdChyZGV2KTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisJciA9IHJhZGVvbl9pcnFfa21zX2luaXQocmRldik7CisJaWYgKHIpCisJCXJldHVybiByOworCS8qIE1lbW9yeSBtYW5hZ2VyICovCisJciA9IHJhZGVvbl9vYmplY3RfaW5pdChyZGV2KTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisJciA9IHJ2MzcwX3BjaWVfZ2FydF9pbml0KHJkZXYpOworCWlmIChyKQorCQlyZXR1cm4gcjsKKwlydjUxNV9zZXRfc2FmZV9yZWdpc3RlcnMocmRldik7CisJcmRldi0+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+PiAyNCkgJiAweEZGKQorI2RlZmluZSAgIENfMDAwMDEzX0lEQ1RfTk9STUFMX1BPV0VSX0JVU1kgICAgICAgICAgICAgIDB4MDBGRkZGRkYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3J2NzcwLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3J2NzcwLmMKaW5kZXggYjU3NGM3My4uNTk1YWM2MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ydjc3MC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnY3NzAuYwpAQCAtMzEsOCArMzEsOCBAQAogI2luY2x1ZGUgInJhZGVvbi5oIgogI2luY2x1ZGUgInJhZGVvbl9kcm0uaCIKICNpbmNsdWRlICJydjc3MGQuaCIKLSNpbmNsdWRlICJhdml2b2QuaCIKICNpbmNsdWRlICJhdG9tLmgiCisjaW5jbHVkZSAiYXZpdm9kLmgiCiAKICNkZWZpbmUgUjcwMF9QRlBfVUNPREVfU0laRSA4NDgKICNkZWZpbmUgUjcwMF9QTTRfVUNPREVfU0laRSAxMzYwCkBAIC03NSw3ICs3NSw3IEBACiAJV1JFRzMyKE1DX1ZNX01CX0wxX1RMQjJfQ05UTCwgdG1wKTsKIAlXUkVHMzIoTUNfVk1fTUJfTDFfVExCM19DTlRMLCB0bXApOwogCVdSRUczMihWTV9DT05URVhUMF9QQUdFX1RBQkxFX1NUQVJUX0FERFIsIHJkZXYtPm1jLmd0dF9zdGFydCA+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+IDIyKTsKIAl9IGVsc2UgewpAQCAtMjA0LDM0ICsyMTIsMTMgQEAKIAkJV1JFRzMyKE1DX1ZNX0FHUF9UT1AsIDB4MEZGRkZGRkYpOwogCQlXUkVHMzIoTUNfVk1fQUdQX0JPVCwgMHgwRkZGRkZGRik7CiAJfQotCVdSRUczMihEMUdSUEhfUFJJTUFSWV9TVVJGQUNFX0FERFJFU1MsIG5ld19kMWdycGhfcHJpbWFyeSk7Ci0JV1JFRzMyKEQxR1JQSF9TRUNPTkRBUllfU1VSRkFDRV9BRERSRVNTLCBuZXdfZDFncnBoX3NlY29uZGFyeSk7Ci0JV1JFRzMyKEQyR1JQSF9QUklNQVJZX1NVUkZBQ0VfQUREUkVTUywgbmV3X2QyZ3JwaF9wcmltYXJ5KTsKLQlXUkVHMzIoRDJHUlBIX1NFQ09OREFSWV9TVVJGQUNFX0FERFJFU1MsIG5ld19kMmdycGhfc2Vjb25kYXJ5KTsKLQlXUkVHMzIoVkdBX01FTU9SWV9CQVNFX0FERFJFU1MsIHJkZXYtPm1jLnZyYW1fc3RhcnQpOwotCi0JLyogVW5sb2NrIGhvc3QgYWNjZXNzICovCi0JV1JFRzMyKFZHQV9IRFBfQ09OVFJPTCwgdmdhX2hkcF9jb250cm9sKTsKLQotCW1kZWxheSgxKTsKIAlpZiAocjYwMF9tY193YWl0X2Zvcl9pZGxlKHJkZXYpKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIltkcm1dIE1DIG5vdCBpZGxlICFcbiIpOworCQlkZXZfd2FybihyZGV2LT5kZXYsICJXYWl0IGZvciBNQyBpZGxlIHRpbWVkb3V0ICFcbiIpOwogCX0KLQotCS8qIFJlc3RvcmUgdmlkZW8gc3RhdGUgKi8KLQlXUkVHMzIoRDFDUlRDX1VQREFURV9MT0NLLCAxKTsKLQlXUkVHMzIoRDJDUlRDX1VQREFURV9MT0NLLCAxKTsKLQlXUkVHMzIoRDFDUlRDX0NPTlRST0wsIGQxY3J0Y19jb250cm9sKTsKLQlXUkVHMzIoRDJDUlRDX0NPTlRST0wsIGQyY3J0Y19jb250cm9sKTsKLQlXUkVHMzIoRDFDUlRDX1VQREFURV9MT0NLLCAwKTsKLQlXUkVHMzIoRDJDUlRDX1VQREFURV9MT0NLLCAwKTsKLQlXUkVHMzIoRDFWR0FfQ09OVFJPTCwgZDF2Z2FfY29udHJvbCk7Ci0JV1JFRzMyKEQyVkdBX0NPTlRST0wsIGQydmdhX2NvbnRyb2wpOwotCVdSRUczMihWR0FfUkVOREVSX0NPTlRST0wsIHZnYV9yZW5kZXJfY29udHJvbCk7Ci0KKwlydjUxNV9tY19yZXN1bWUocmRldiwgJnNhdmUpOwogCS8qIHdlIG5lZWQgdG8gb3duIFZSQU0sIHNvIHR1cm4gb2ZmIHRoZSBWR0EgcmVuZGVyZXIgaGVyZQogCSAqIHRvIHN0b3AgaXQgb3ZlcndyaXRpbmcgb3VyIG9iamVjdHMgKi8KLQlyYWRlb25fYXZpdm9fdmdhX3JlbmRlcl9kaXNhYmxlKHJkZXYpOworCXJ2NTE1X3ZnYV9yZW5kZXJfZGlzYWJsZShyZGV2KTsKIH0KIAogCkBAIC04MDEsNiArNzg4LDEzIEBACiAJLyogU2V0dXAgR1BVIG1lbW9yeSBzcGFjZSAqLwogCXJkZXYtPm1jLm1jX3ZyYW1fc2l6ZSA9IFJSRUczMihDT05GSUdfTUVNU0laRSk7CiAJcmRldi0+bWMucmVhbF92cmFtX3NpemUgPSBSUkVHMzIoQ09ORklHX01FTVNJWkUpOworCisJaWYgKHJkZXYtPm1jLm1jX3ZyYW1fc2l6ZSA+IHJkZXYtPm1jLmFwZXJfc2l6ZSkKKwkJcmRldi0+bWMubWNfdnJhbV9zaXplID0gcmRldi0+bWMuYXBlcl9zaXplOworCisJaWYgKHJkZXYtPm1jLnJlYWxfdnJhbV9zaXplID4gcmRldi0+bWMuYXBlcl9zaXplKQorCQlyZGV2LT5tYy5yZWFsX3ZyYW1fc2l6ZSA9IHJkZXYtPm1jLmFwZXJfc2l6ZTsKKwogCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19BR1ApIHsKIAkJciA9IHJhZGVvbl9hZ3BfaW5pdChyZGV2KTsKIAkJaWYgKHIpCkBAIC04MzMsOSArODI3LDkgQEAKIAkJcmRldi0+bWMuZ3R0X3NpemUgPSByYWRlb25fZ2FydF9zaXplICogMTAyNCAqIDEwMjQ7CiAJfQogCXJkZXYtPm1jLnZyYW1fc3RhcnQgPSByZGV2LT5tYy52cmFtX2xvY2F0aW9uOwotCXJkZXYtPm1jLnZyYW1fZW5kID0gcmRldi0+bWMudnJhbV9sb2NhdGlvbiArIHJkZXYtPm1jLm1jX3ZyYW1fc2l6ZTsKKwlyZGV2LT5tYy52cmFtX2VuZCA9IHJkZXYtPm1jLnZyYW1fbG9jYXRpb24gKyByZGV2LT5tYy5tY192cmFtX3NpemUgLSAxOwogCXJkZXYtPm1jLmd0dF9zdGFydCA9IHJkZXYtPm1jLmd0dF9sb2NhdGlvbjsKLQlyZGV2LT5tYy5ndHRfZW5kID0gcmRldi0+bWMuZ3R0X2xvY2F0aW9uICsgcmRldi0+bWMuZ3R0X3NpemU7CisJcmRldi0+bWMuZ3R0X2VuZCA9IHJkZXYtPm1jLmd0dF9sb2NhdGlvbiArIHJkZXYtPm1jLmd0dF9zaXplIC0gMTsKIAkvKiBGSVhNRTogd2Ugc2hvdWxkIGVuZm9yY2UgZGVmYXVsdCBjbG9jayBpbiBjYXNlIEdQVSBpcyBub3QgaW4KIAkgKiBkZWZhdWx0IHNldHVwCiAJICovCkBAIC04NTQsMTEgKzg0OCwxNCBAQAogewogCWludCByOwogCi0JcmFkZW9uX2dwdV9yZXNldChyZGV2KTsKLQlydjc3MF9tY19yZXN1bWUocmRldik7Ci0JciA9IHJ2NzcwX3BjaWVfZ2FydF9lbmFibGUocmRldik7Ci0JaWYgKHIpCi0JCXJldHVybiByOworCXJ2NzcwX21jX3Byb2dyYW0ocmRldik7CisJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX0FHUCkgeworCQlydjc3MF9hZ3BfZW5hYmxlKHJkZXYpOworCX0gZWxzZSB7CisJCXIgPSBydjc3MF9wY2llX2dhcnRfZW5hYmxlKHJkZXYpOworCQlpZiAocikKKwkJCXJldHVybiByOworCX0KIAlydjc3MF9ncHVfaW5pdChyZGV2KTsKIAogCXIgPSByYWRlb25fb2JqZWN0X3BpbihyZGV2LT5yNjAwX2JsaXQuc2hhZGVyX29iaiwgUkFERU9OX0dFTV9ET01BSU5fVlJBTSwKQEAgLTg3Nyw5ICs4NzQsOCBAQAogCXIgPSByNjAwX2NwX3Jlc3VtZShyZGV2KTsKIAlpZiAocikKIAkJcmV0dXJuIHI7Ci0JciA9IHI2MDBfd2JfaW5pdChyZGV2KTsKLQlpZiAocikKLQkJcmV0dXJuIHI7CisJLyogd3JpdGUgYmFjayBidWZmZXIgYXJlIG5vdCB2aXRhbCBzbyBkb24ndCB3b3JyeSBhYm91dCBmYWlsdXJlICovCisJcjYwMF93Yl9lbmFibGUocmRldik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTg4NywxNSArODgzLDEyIEBACiB7CiAJaW50IHI7CiAKLQlpZiAocmFkZW9uX2dwdV9yZXNldChyZGV2KSkgewotCQkvKiBGSVhNRTogd2hhdCBkbyB3ZSB3YW50IHRvIGRvIGhlcmUgPyAqLwotCX0KKwkvKiBEbyBub3QgcmVzZXQgR1BVIGJlZm9yZSBwb3N0aW5nLCBvbiBydjc3MCBodyB1bmxpa2Ugb24gcjUwMCBodywKKwkgKiBwb3N0aW5nIHdpbGwgcGVyZm9ybSBuZWNlc3NhcnkgdGFzayB0byBicmluZyBiYWNrIEdQVSBpbnRvIGdvb2QKKwkgKiBzaGFwZS4KKwkgKi8KIAkvKiBwb3N0IGNhcmQgKi8KLQlpZiAocmRldi0+aXNfYXRvbV9iaW9zKSB7Ci0JCWF0b21fYXNpY19pbml0KHJkZXYtPm1vZGVfaW5mby5hdG9tX2NvbnRleHQpOwotCX0gZWxzZSB7Ci0JCXJhZGVvbl9jb21iaW9zX2FzaWNfaW5pdChyZGV2LT5kZGV2KTsKLQl9CisJYXRvbV9hc2ljX2luaXQocmRldi0+bW9kZV9pbmZvLmF0b21fY29udGV4dCk7CiAJLyogSW5pdGlhbGl6ZSBjbG9ja3MgKi8KIAlyID0gcmFkZW9uX2Nsb2Nrc19pbml0KHJkZXYpOwogCWlmIChyKSB7CkBAIC05MDgsNyArOTAxLDcgQEAKIAkJcmV0dXJuIHI7CiAJfQogCi0JciA9IHJhZGVvbl9pYl90ZXN0KHJkZXYpOworCXIgPSByNjAwX2liX3Rlc3QocmRldik7CiAJaWYgKHIpIHsKIAkJRFJNX0VSUk9SKCJyYWRlb246IGZhaWxsZWQgdGVzdGluZyBJQiAoJWQpLlxuIiwgcik7CiAJCXJldHVybiByOwpAQCAtOTIyLDggKzkxNSw4IEBACiAJLyogRklYTUU6IHdlIHNob3VsZCB3YWl0IGZvciByaW5nIHRvIGJlIGVtcHR5ICovCiAJcjcwMF9jcF9zdG9wKHJkZXYpOwogCXJkZXYtPmNwLnJlYWR5ID0gZmFsc2U7CisJcjYwMF93Yl9kaXNhYmxlKHJkZXYpOwogCXJ2NzcwX3BjaWVfZ2FydF9kaXNhYmxlKHJkZXYpOwotCiAJLyogdW5waW4gc2hhZGVycyBibyAqLwogICAgICAgICByYWRlb25fb2JqZWN0X3VucGluKHJkZXYtPnI2MDBfYmxpdC5zaGFkZXJfb2JqKTsKIAlyZXR1cm4gMDsKQEAgLTkzOSw3ICs5MzIsNiBAQAogewogCWludCByOwogCi0JcmRldi0+bmV3X2luaXRfcGF0aCA9IHRydWU7CiAJciA9IHJhZGVvbl9kdW1teV9wYWdlX2luaXQocmRldik7CiAJaWYgKHIpCiAJCXJldHVybiByOwpAQCAtOTUzLDggKzk0NSwxMCBAQAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCS8qIE11c3QgYmUgYW4gQVRPTUJJT1MgKi8KLQlpZiAoIXJkZXYtPmlzX2F0b21fYmlvcykKKwlpZiAoIXJkZXYtPmlzX2F0b21fYmlvcykgeworCQlkZXZfZXJyKHJkZXYtPmRldiwgIkV4cGVjdGluZyBhdG9tYmlvcyBmb3IgUjYwMCBHUFVcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKKwl9CiAJciA9IHJhZGVvbl9hdG9tYmlvc19pbml0KHJkZXYpOwogCWlmIChyKQogCQlyZXR1cm4gcjsKQEAgLTk3NiwxNSArOTcwLDggQEAKIAlpZiAocikKIAkJcmV0dXJuIHI7CiAJciA9IHJ2NzcwX21jX2luaXQocmRldik7Ci0JaWYgKHIpIHsKLQkJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX0FHUCkgewotCQkJLyogUmV0cnkgd2l0aCBkaXNhYmxpbmcgQUdQICovCi0JCQlydjc3MF9maW5pKHJkZXYpOwotCQkJcmRldi0+ZmxhZ3MgJj0gflJBREVPTl9JU19BR1A7Ci0JCQlyZXR1cm4gcnY3NzBfaW5pdChyZGV2KTsKLQkJfQorCWlmIChyKQogCQlyZXR1cm4gcjsKLQl9CiAJLyogTWVtb3J5IG1hbmFnZXIgKi8KIAlyID0gcmFkZW9uX29iamVjdF9pbml0KHJkZXYpOwogCWlmIChyKQpAQCAtMTAxMywxMiArMTAwMCwxMCBAQAogCiAJciA9IHJ2NzcwX3N0YXJ0dXAocmRldik7CiAJaWYgKHIpIHsKLQkJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX0FHUCkgewotCQkJLyogUmV0cnkgd2l0aCBkaXNhYmxpbmcgQUdQICovCi0JCQlydjc3MF9maW5pKHJkZXYpOwotCQkJcmRldi0+ZmxhZ3MgJj0gflJBREVPTl9JU19BR1A7Ci0JCQlyZXR1cm4gcnY3NzBfaW5pdChyZGV2KTsKLQkJfQorCQlydjc3MF9zdXNwZW5kKHJkZXYpOworCQlyNjAwX3diX2ZpbmkocmRldik7CisJCXJhZGVvbl9yaW5nX2ZpbmkocmRldik7CisJCXJ2NzcwX3BjaWVfZ2FydF9maW5pKHJkZXYpOwogCQlyZGV2LT5hY2NlbF93b3JraW5nID0gZmFsc2U7CiAJfQogCWlmIChyZGV2LT5hY2NlbF93b3JraW5nKSB7CkBAIC0xMDI3LDcgKzEwMTIsNyBAQAogCQkJRFJNX0VSUk9SKCJyYWRlb246IGZhaWxsZWQgaW5pdGlhbGl6aW5nIElCIHBvb2wgKCVkKS5cbiIsIHIpOwogCQkJcmRldi0+YWNjZWxfd29ya2luZyA9IGZhbHNlOwogCQl9Ci0JCXIgPSByYWRlb25faWJfdGVzdChyZGV2KTsKKwkJciA9IHI2MDBfaWJfdGVzdChyZGV2KTsKIAkJaWYgKHIpIHsKIAkJCURSTV9FUlJPUigicmFkZW9uOiBmYWlsbGVkIHRlc3RpbmcgSUIgKCVkKS5cbiIsIHIpOwogCQkJcmRldi0+YWNjZWxfd29ya2luZyA9IGZhbHNlOwpAQCAtMTA0MiwyMCArMTAyNywxNSBAQAogCiAJcjYwMF9ibGl0X2ZpbmkocmRldik7CiAJcmFkZW9uX3JpbmdfZmluaShyZGV2KTsKKwlyNjAwX3diX2ZpbmkocmRldik7CiAJcnY3NzBfcGNpZV9nYXJ0X2ZpbmkocmRldik7CiAJcmFkZW9uX2dlbV9maW5pKHJkZXYpOwogCXJhZGVvbl9mZW5jZV9kcml2ZXJfZmluaShyZGV2KTsKIAlyYWRlb25fY2xvY2tzX2ZpbmkocmRldik7Ci0jaWYgX19PU19IQVNfQUdQCiAJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX0FHUCkKIAkJcmFkZW9uX2FncF9maW5pKHJkZXYpOwotI2VuZGlmCiAJcmFkZW9uX29iamVjdF9maW5pKHJkZXYpOwotCWlmIChyZGV2LT5pc19hdG9tX2Jpb3MpIHsKLQkJcmFkZW9uX2F0b21iaW9zX2ZpbmkocmRldik7Ci0JfSBlbHNlIHsKLQkJcmFkZW9uX2NvbWJpb3NfZmluaShyZGV2KTsKLQl9CisJcmFkZW9uX2F0b21iaW9zX2ZpbmkocmRldik7CiAJa2ZyZWUocmRldi0+Ymlvcyk7CiAJcmRldi0+YmlvcyA9IE5VTEw7CiAJcmFkZW9uX2R1bW15X3BhZ2VfZmluaShyZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS90dG0vdHRtX2JvX3ZtLmMgYi9kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV9ib192bS5jCmluZGV4IDMzZGU3NjMuLjFjMDQwZDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS90dG0vdHRtX2JvX3ZtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3R0bS90dG1fYm9fdm0uYwpAQCAtMjI4LDcgKzIyOCw3IEBACiAJdm1hLT52bV9wcml2YXRlX2RhdGEgPSBOVUxMOwogfQogCi1zdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHR0bV9ib192bV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHR0bV9ib192bV9vcHMgPSB7CiAJLmZhdWx0ID0gdHRtX2JvX3ZtX2ZhdWx0LAogCS5vcGVuID0gdHRtX2JvX3ZtX29wZW4sCiAJLmNsb3NlID0gdHRtX2JvX3ZtX2Nsb3NlCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV9nbG9iYWwuYyBiL2RyaXZlcnMvZ3B1L2RybS90dG0vdHRtX2dsb2JhbC5jCmluZGV4IDU0MTc0NGQuLmIxNzAwNzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS90dG0vdHRtX2dsb2JhbC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS90dG0vdHRtX2dsb2JhbC5jCkBAIC04Miw4ICs4Miw4IEBACiAJCWlmICh1bmxpa2VseShyZXQgIT0gMCkpCiAJCQlnb3RvIG91dF9lcnI7CiAKLQkJKytpdGVtLT5yZWZjb3VudDsKIAl9CisJKytpdGVtLT5yZWZjb3VudDsKIAlyZWYtPm9iamVjdCA9IGl0ZW0tPm9iamVjdDsKIAlvYmplY3QgPSBpdGVtLT5vYmplY3Q7CiAJbXV0ZXhfdW5sb2NrKCZpdGVtLT5tdXRleCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtY29yZS5jIGIvZHJpdmVycy9oaWQvaGlkLWNvcmUuYwppbmRleCBiZTM0ZDMyLi43ZDA1YzRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtY29yZS5jCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1jb3JlLmMKQEAgLTEwNjYsNyArMTA2Niw3IEBACiAgKiBAdHlwZTogSElEIHJlcG9ydCB0eXBlIChISURfKl9SRVBPUlQpCiAgKiBAZGF0YTogcmVwb3J0IGNvbnRlbnRzCiAgKiBAc2l6ZTogc2l6ZSBvZiBkYXRhIHBhcmFtZXRlcgotICogQGludGVycnVwdDogY2FsbGVkIGZyb20gYXRvbWljPworICogQGludGVycnVwdDogZGlzdGluZ3Vpc2ggYmV0d2VlbiBpbnRlcnJ1cHQgYW5kIGNvbnRyb2wgdHJhbnNmZXJzCiAgKgogICogVGhpcyBpcyBkYXRhIGVudHJ5IGZvciBsb3dlciBsYXllcnMuCiAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC10d2luaGFuLmMgYi9kcml2ZXJzL2hpZC9oaWQtdHdpbmhhbi5jCmluZGV4IGIwNWY2MDIuLmM0MGFmYzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZC10d2luaGFuLmMKKysrIGIvZHJpdmVycy9oaWQvaGlkLXR3aW5oYW4uYwpAQCAtMTMyLDEyICsxMzIsMTIgQEAKIAkuaW5wdXRfbWFwcGluZyA9IHR3aW5oYW5faW5wdXRfbWFwcGluZywKIH07CiAKLXN0YXRpYyBpbnQgdHdpbmhhbl9pbml0KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCB0d2luaGFuX2luaXQodm9pZCkKIHsKIAlyZXR1cm4gaGlkX3JlZ2lzdGVyX2RyaXZlcigmdHdpbmhhbl9kcml2ZXIpOwogfQogCi1zdGF0aWMgdm9pZCB0d2luaGFuX2V4aXQodm9pZCkKK3N0YXRpYyB2b2lkIF9fZXhpdCB0d2luaGFuX2V4aXQodm9pZCkKIHsKIAloaWRfdW5yZWdpc3Rlcl9kcml2ZXIoJnR3aW5oYW5fZHJpdmVyKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZHJhdy5jIGIvZHJpdmVycy9oaWQvaGlkcmF3LmMKaW5kZXggMGM2NjM5ZS4uY2RkMTM2OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvaGlkcmF3LmMKKysrIGIvZHJpdmVycy9oaWQvaGlkcmF3LmMKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9tYWpvci5oPgogI2luY2x1ZGUgPGxpbnV4L2hpZC5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogCiAjaW5jbHVkZSA8bGludXgvaGlkcmF3Lmg+CkBAIC00NywxMCArNDgsOSBAQAogCWNoYXIgKnJlcG9ydDsKIAlERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCBjdXJyZW50KTsKIAorCW11dGV4X2xvY2soJmxpc3QtPnJlYWRfbXV0ZXgpOworCiAJd2hpbGUgKHJldCA9PSAwKSB7Ci0KLQkJbXV0ZXhfbG9jaygmbGlzdC0+cmVhZF9tdXRleCk7Ci0KIAkJaWYgKGxpc3QtPmhlYWQgPT0gbGlzdC0+dGFpbCkgewogCQkJYWRkX3dhaXRfcXVldWUoJmxpc3QtPmhpZHJhdy0+d2FpdCwgJndhaXQpOwogCQkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vS2NvbmZpZyBiL2RyaXZlcnMvaHdtb24vS2NvbmZpZwppbmRleCA2ODU3NTYwLi43MDBlOTNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL0tjb25maWcKKysrIGIvZHJpdmVycy9od21vbi9LY29uZmlnCkBAIC02NzUsNyArNjc1LDcgQEAKIAogY29uZmlnIFNFTlNPUlNfUzNDCiAJdHJpc3RhdGUgIlMzQzI0WFgvUzNDNjRYWCBJbmJ1aWx0IEFEQyIKLQlkZXBlbmRzIG9uIEFSQ0hfUzNDMjQxMCB8fCBBUkNIX1MzQzY0WFgKKwlkZXBlbmRzIG9uIEFSQ0hfUzNDMjQxMAogCWhlbHAKIAkgIElmIHlvdSBzYXkgeWVzIGhlcmUgeW91IGdldCBzdXBwb3J0IGZvciB0aGUgb24tYm9hcmQgQURDcyBvZgogCSAgdGhlIFNhbXN1bmcgUzNDMjRYWCBvciBTM0M2NFhYIHNlcmllcyBvZiBTb0MKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vYXN1c19hdGswMTEwLmMgYi9kcml2ZXJzL2h3bW9uL2FzdXNfYXRrMDExMC5jCmluZGV4IGZlNGZhMjkuLjVhM2VlMDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vYXN1c19hdGswMTEwLmMKKysrIGIvZHJpdmVycy9od21vbi9hc3VzX2F0azAxMTAuYwpAQCAtMzUsMTggKzM1LDIyIEBACiAjZGVmaW5lIE1FVEhPRF9PTERfRU5VTV9GQU4JIkZTSUYiCiAKICNkZWZpbmUgQVRLX01VWF9IV01PTgkJMHgwMDAwMDAwNlVMTAorI2RlZmluZSBBVEtfTVVYX01HTVQJCTB4MDAwMDAwMTFVTEwKIAogI2RlZmluZSBBVEtfQ0xBU1NfTUFTSwkJMHhmZjAwMDAwMFVMTAogI2RlZmluZSBBVEtfQ0xBU1NfRlJFUV9DVEwJMHgwMzAwMDAwMFVMTAogI2RlZmluZSBBVEtfQ0xBU1NfRkFOX0NUTAkweDA0MDAwMDAwVUxMCiAjZGVmaW5lIEFUS19DTEFTU19IV01PTgkJMHgwNjAwMDAwMFVMTAorI2RlZmluZSBBVEtfQ0xBU1NfTUdNVAkJMHgxMTAwMDAwMFVMTAogCiAjZGVmaW5lIEFUS19UWVBFX01BU0sJCTB4MDBmZjAwMDBVTEwKICNkZWZpbmUgSFdNT05fVFlQRV9WT0xUCQkweDAwMDIwMDAwVUxMCiAjZGVmaW5lIEhXTU9OX1RZUEVfVEVNUAkJMHgwMDAzMDAwMFVMTAogI2RlZmluZSBIV01PTl9UWVBFX0ZBTgkJMHgwMDA0MDAwMFVMTAogCi0jZGVmaW5lIEhXTU9OX1NFTlNPUl9JRF9NQVNLCTB4MDAwMGZmZmZVTEwKKyNkZWZpbmUgQVRLX0VMRU1FTlRfSURfTUFTSwkweDAwMDBmZmZmVUxMCisKKyNkZWZpbmUgQVRLX0VDX0lECQkweDExMDYwMDA0VUxMCiAKIGVudW0gYXRrX3BhY2tfbWVtYmVyIHsKIAlIV01PTl9QQUNLX0ZMQUdTLApAQCAtODksNiArOTMsOSBAQAogCS8qIG5ldyBpbnRlZmFjZSAqLwogCWFjcGlfaGFuZGxlIGVudW1lcmF0ZV9oYW5kbGU7CiAJYWNwaV9oYW5kbGUgcmVhZF9oYW5kbGU7CisJYWNwaV9oYW5kbGUgd3JpdGVfaGFuZGxlOworCisJYm9vbCBkaXNhYmxlX2VjOwogCiAJaW50IHZvbHRhZ2VfY291bnQ7CiAJaW50IHRlbXBlcmF0dXJlX2NvdW50OwpAQCAtMTI5LDkgKzEzNiwyMiBAQAogCWNoYXIgY29uc3QgKmFjcGlfbmFtZTsKIH07CiAKLXN0cnVjdCBhdGtfYWNwaV9idWZmZXJfdTY0IHsKLQl1bmlvbiBhY3BpX29iamVjdCBidWY7Ci0JdTY0IHZhbHVlOworLyogUmV0dXJuIGJ1ZmZlciBmb3JtYXQ6CisgKiBbMC0zXSAidmFsdWUiIGlzIHZhbGlkIGZsYWcKKyAqIFs0LTddIHZhbHVlCisgKiBbOC0gXSB1bmtub3duIHN0dWZmIG9uIG5ld2VyIG1vYm9zCisgKi8KK3N0cnVjdCBhdGtfYWNwaV9yZXRfYnVmZmVyIHsKKwl1MzIgZmxhZ3M7CisJdTMyIHZhbHVlOworCXU4IGRhdGFbXTsKK307CisKKy8qIElucHV0IGJ1ZmZlciB1c2VkIGZvciBHSVRNIGFuZCBTSVRNIG1ldGhvZHMgKi8KK3N0cnVjdCBhdGtfYWNwaV9pbnB1dF9idWYgeworCXUzMiBpZDsKKwl1MzIgcGFyYW0xOworCXUzMiBwYXJhbTI7CiB9OwogCiBzdGF0aWMgaW50IGF0a19hZGQoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UpOwpAQCAtNDM5LDUyICs0NTksMTQ3IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB1bmlvbiBhY3BpX29iamVjdCAqYXRrX2dncnAoc3RydWN0IGF0a19kYXRhICpkYXRhLCB1MTYgbXV4KQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZkYXRhLT5hY3BpX2Rldi0+ZGV2OworCXN0cnVjdCBhY3BpX2J1ZmZlciBidWY7CisJYWNwaV9zdGF0dXMgcmV0OworCXN0cnVjdCBhY3BpX29iamVjdF9saXN0IHBhcmFtczsKKwl1bmlvbiBhY3BpX29iamVjdCBpZDsKKwl1bmlvbiBhY3BpX29iamVjdCAqcGFjazsKKworCWlkLnR5cGUgPSBBQ1BJX1RZUEVfSU5URUdFUjsKKwlpZC5pbnRlZ2VyLnZhbHVlID0gbXV4OworCXBhcmFtcy5jb3VudCA9IDE7CisJcGFyYW1zLnBvaW50ZXIgPSAmaWQ7CisKKwlidWYubGVuZ3RoID0gQUNQSV9BTExPQ0FURV9CVUZGRVI7CisJcmV0ID0gYWNwaV9ldmFsdWF0ZV9vYmplY3QoZGF0YS0+ZW51bWVyYXRlX2hhbmRsZSwgTlVMTCwgJnBhcmFtcywgJmJ1Zik7CisJaWYgKHJldCAhPSBBRV9PSykgeworCQlkZXZfZXJyKGRldiwgIkdHUlBbJSN4XSBBQ1BJIGV4Y2VwdGlvbjogJXNcbiIsIG11eCwKKwkJCQlhY3BpX2Zvcm1hdF9leGNlcHRpb24ocmV0KSk7CisJCXJldHVybiBFUlJfUFRSKC1FSU8pOworCX0KKwlwYWNrID0gYnVmLnBvaW50ZXI7CisJaWYgKHBhY2stPnR5cGUgIT0gQUNQSV9UWVBFX1BBQ0tBR0UpIHsKKwkJLyogRXhlY3V0aW9uIHdhcyBzdWNjZXNzZnVsLCBidXQgdGhlIGlkIHdhcyBub3QgZm91bmQgKi8KKwkJQUNQSV9GUkVFKHBhY2spOworCQlyZXR1cm4gRVJSX1BUUigtRU5PRU5UKTsKKwl9CisKKwlpZiAocGFjay0+cGFja2FnZS5jb3VudCA8IDEpIHsKKwkJZGV2X2VycihkZXYsICJHR1JQWyUjeF0gcGFja2FnZSBpcyB0b28gc21hbGxcbiIsIG11eCk7CisJCUFDUElfRlJFRShwYWNrKTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTyk7CisJfQorCXJldHVybiBwYWNrOworfQorCitzdGF0aWMgdW5pb24gYWNwaV9vYmplY3QgKmF0a19naXRtKHN0cnVjdCBhdGtfZGF0YSAqZGF0YSwgdTY0IGlkKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZkYXRhLT5hY3BpX2Rldi0+ZGV2OworCXN0cnVjdCBhdGtfYWNwaV9pbnB1dF9idWYgYnVmOworCXVuaW9uIGFjcGlfb2JqZWN0IHRtcDsKKwlzdHJ1Y3QgYWNwaV9vYmplY3RfbGlzdCBwYXJhbXM7CisJc3RydWN0IGFjcGlfYnVmZmVyIHJldDsKKwl1bmlvbiBhY3BpX29iamVjdCAqb2JqOworCWFjcGlfc3RhdHVzIHN0YXR1czsKKworCWJ1Zi5pZCA9IGlkOworCWJ1Zi5wYXJhbTEgPSAwOworCWJ1Zi5wYXJhbTIgPSAwOworCisJdG1wLnR5cGUgPSBBQ1BJX1RZUEVfQlVGRkVSOworCXRtcC5idWZmZXIucG9pbnRlciA9ICh1OCAqKSZidWY7CisJdG1wLmJ1ZmZlci5sZW5ndGggPSBzaXplb2YoYnVmKTsKKworCXBhcmFtcy5jb3VudCA9IDE7CisJcGFyYW1zLnBvaW50ZXIgPSAodm9pZCAqKSZ0bXA7CisKKwlyZXQubGVuZ3RoID0gQUNQSV9BTExPQ0FURV9CVUZGRVI7CisJc3RhdHVzID0gYWNwaV9ldmFsdWF0ZV9vYmplY3RfdHlwZWQoZGF0YS0+cmVhZF9oYW5kbGUsIE5VTEwsICZwYXJhbXMsCisJCQkmcmV0LCBBQ1BJX1RZUEVfQlVGRkVSKTsKKwlpZiAoc3RhdHVzICE9IEFFX09LKSB7CisJCWRldl93YXJuKGRldiwgIkdJVE1bJSNsbHhdIEFDUEkgZXhjZXB0aW9uOiAlc1xuIiwgaWQsCisJCQkJYWNwaV9mb3JtYXRfZXhjZXB0aW9uKHN0YXR1cykpOworCQlyZXR1cm4gRVJSX1BUUigtRUlPKTsKKwl9CisJb2JqID0gcmV0LnBvaW50ZXI7CisKKwkvKiBTYW5pdHkgY2hlY2sgKi8KKwlpZiAob2JqLT5idWZmZXIubGVuZ3RoIDwgOCkgeworCQlkZXZfd2FybihkZXYsICJVbmV4cGVjdGVkIEFTQkYgbGVuZ3RoOiAldVxuIiwKKwkJCQlvYmotPmJ1ZmZlci5sZW5ndGgpOworCQlBQ1BJX0ZSRUUob2JqKTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTyk7CisJfQorCXJldHVybiBvYmo7Cit9CisKK3N0YXRpYyB1bmlvbiBhY3BpX29iamVjdCAqYXRrX3NpdG0oc3RydWN0IGF0a19kYXRhICpkYXRhLAorCQlzdHJ1Y3QgYXRrX2FjcGlfaW5wdXRfYnVmICpidWYpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJmRhdGEtPmFjcGlfZGV2LT5kZXY7CisJc3RydWN0IGFjcGlfb2JqZWN0X2xpc3QgcGFyYW1zOworCXVuaW9uIGFjcGlfb2JqZWN0IHRtcDsKKwlzdHJ1Y3QgYWNwaV9idWZmZXIgcmV0OworCXVuaW9uIGFjcGlfb2JqZWN0ICpvYmo7CisJYWNwaV9zdGF0dXMgc3RhdHVzOworCisJdG1wLnR5cGUgPSBBQ1BJX1RZUEVfQlVGRkVSOworCXRtcC5idWZmZXIucG9pbnRlciA9ICh1OCAqKWJ1ZjsKKwl0bXAuYnVmZmVyLmxlbmd0aCA9IHNpemVvZigqYnVmKTsKKworCXBhcmFtcy5jb3VudCA9IDE7CisJcGFyYW1zLnBvaW50ZXIgPSAmdG1wOworCisJcmV0Lmxlbmd0aCA9IEFDUElfQUxMT0NBVEVfQlVGRkVSOworCXN0YXR1cyA9IGFjcGlfZXZhbHVhdGVfb2JqZWN0X3R5cGVkKGRhdGEtPndyaXRlX2hhbmRsZSwgTlVMTCwgJnBhcmFtcywKKwkJCSZyZXQsIEFDUElfVFlQRV9CVUZGRVIpOworCWlmIChzdGF0dXMgIT0gQUVfT0spIHsKKwkJZGV2X3dhcm4oZGV2LCAiU0lUTVslI3hdIEFDUEkgZXhjZXB0aW9uOiAlc1xuIiwgYnVmLT5pZCwKKwkJCQlhY3BpX2Zvcm1hdF9leGNlcHRpb24oc3RhdHVzKSk7CisJCXJldHVybiBFUlJfUFRSKC1FSU8pOworCX0KKwlvYmogPSByZXQucG9pbnRlcjsKKworCS8qIFNhbml0eSBjaGVjayAqLworCWlmIChvYmotPmJ1ZmZlci5sZW5ndGggPCA4KSB7CisJCWRldl93YXJuKGRldiwgIlVuZXhwZWN0ZWQgQVNCRiBsZW5ndGg6ICV1XG4iLAorCQkJCW9iai0+YnVmZmVyLmxlbmd0aCk7CisJCUFDUElfRlJFRShvYmopOworCQlyZXR1cm4gRVJSX1BUUigtRUlPKTsKKwl9CisJcmV0dXJuIG9iajsKK30KKwogc3RhdGljIGludCBhdGtfcmVhZF92YWx1ZV9uZXcoc3RydWN0IGF0a19zZW5zb3JfZGF0YSAqc2Vuc29yLCB1NjQgKnZhbHVlKQogewogCXN0cnVjdCBhdGtfZGF0YSAqZGF0YSA9IHNlbnNvci0+ZGF0YTsKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmZGF0YS0+YWNwaV9kZXYtPmRldjsKLQlzdHJ1Y3QgYWNwaV9vYmplY3RfbGlzdCBwYXJhbXM7Ci0Jc3RydWN0IGFjcGlfYnVmZmVyIHJldDsKLQl1bmlvbiBhY3BpX29iamVjdCBpZDsKLQlzdHJ1Y3QgYXRrX2FjcGlfYnVmZmVyX3U2NCB0bXA7Ci0JYWNwaV9zdGF0dXMgc3RhdHVzOworCXVuaW9uIGFjcGlfb2JqZWN0ICpvYmo7CisJc3RydWN0IGF0a19hY3BpX3JldF9idWZmZXIgKmJ1ZjsKKwlpbnQgZXJyID0gMDsKIAotCWlkLnR5cGUgPSBBQ1BJX1RZUEVfSU5URUdFUjsKLQlpZC5pbnRlZ2VyLnZhbHVlID0gc2Vuc29yLT5pZDsKKwlvYmogPSBhdGtfZ2l0bShkYXRhLCBzZW5zb3ItPmlkKTsKKwlpZiAoSVNfRVJSKG9iaikpCisJCXJldHVybiBQVFJfRVJSKG9iaik7CiAKLQlwYXJhbXMuY291bnQgPSAxOwotCXBhcmFtcy5wb2ludGVyID0gJmlkOwotCi0JdG1wLmJ1Zi50eXBlID0gQUNQSV9UWVBFX0JVRkZFUjsKLQl0bXAuYnVmLmJ1ZmZlci5wb2ludGVyID0gKHU4ICopJnRtcC52YWx1ZTsKLQl0bXAuYnVmLmJ1ZmZlci5sZW5ndGggPSBzaXplb2YodTY0KTsKLQlyZXQubGVuZ3RoID0gc2l6ZW9mKHRtcCk7Ci0JcmV0LnBvaW50ZXIgPSAmdG1wOwotCi0Jc3RhdHVzID0gYWNwaV9ldmFsdWF0ZV9vYmplY3RfdHlwZWQoZGF0YS0+cmVhZF9oYW5kbGUsIE5VTEwsICZwYXJhbXMsCi0JCQkmcmV0LCBBQ1BJX1RZUEVfQlVGRkVSKTsKLQlpZiAoc3RhdHVzICE9IEFFX09LKSB7Ci0JCWRldl93YXJuKGRldiwgIiVzOiBBQ1BJIGV4Y2VwdGlvbjogJXNcbiIsIF9fZnVuY19fLAotCQkJCWFjcGlfZm9ybWF0X2V4Y2VwdGlvbihzdGF0dXMpKTsKLQkJcmV0dXJuIC1FSU87Ci0JfQotCi0JLyogUmV0dXJuIGJ1ZmZlciBmb3JtYXQ6Ci0JICogWzAtM10gInZhbHVlIiBpcyB2YWxpZCBmbGFnCi0JICogWzQtN10gdmFsdWUKLQkgKi8KLQlpZiAoISh0bXAudmFsdWUgJiAweGZmZmZmZmZmKSkgeworCWJ1ZiA9IChzdHJ1Y3QgYXRrX2FjcGlfcmV0X2J1ZmZlciAqKW9iai0+YnVmZmVyLnBvaW50ZXI7CisJaWYgKGJ1Zi0+ZmxhZ3MgPT0gMCkgewogCQkvKiBUaGUgcmVhZGluZyBpcyBub3QgdmFsaWQsIHBvc3NpYmxlIGNhdXNlczoKIAkJICogLSBzZW5zb3IgZmFpbHVyZQogCQkgKiAtIGVudW1lcmF0aW9uIHdhcyBGVUJBUiAoYW5kIHdlIGRpZG4ndCBub3RpY2UpCiAJCSAqLwotCQlkZXZfaW5mbyhkZXYsICJGYWlsdXJlOiAlI2xseFxuIiwgdG1wLnZhbHVlKTsKLQkJcmV0dXJuIC1FSU87CisJCWRldl93YXJuKGRldiwgIlJlYWQgZmFpbGVkLCBzZW5zb3IgPSAlI2xseFxuIiwgc2Vuc29yLT5pZCk7CisJCWVyciA9IC1FSU87CisJCWdvdG8gb3V0OwogCX0KIAotCSp2YWx1ZSA9ICh0bXAudmFsdWUgJiAweGZmZmZmZmZmMDAwMDAwMDBVTEwpID4+IDMyOwotCi0JcmV0dXJuIDA7CisJKnZhbHVlID0gYnVmLT52YWx1ZTsKK291dDoKKwlBQ1BJX0ZSRUUob2JqKTsKKwlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgaW50IGF0a19yZWFkX3ZhbHVlKHN0cnVjdCBhdGtfc2Vuc29yX2RhdGEgKnNlbnNvciwgdTY0ICp2YWx1ZSkKQEAgLTcxMyw0MiArODI4LDE0MCBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBpbnQgYXRrX2VjX3ByZXNlbnQoc3RydWN0IGF0a19kYXRhICpkYXRhKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZkYXRhLT5hY3BpX2Rldi0+ZGV2OworCXVuaW9uIGFjcGlfb2JqZWN0ICpwYWNrOworCXVuaW9uIGFjcGlfb2JqZWN0ICplYzsKKwlpbnQgcmV0OworCWludCBpOworCisJcGFjayA9IGF0a19nZ3JwKGRhdGEsIEFUS19NVVhfTUdNVCk7CisJaWYgKElTX0VSUihwYWNrKSkgeworCQlpZiAoUFRSX0VSUihwYWNrKSA9PSAtRU5PRU5UKSB7CisJCQkvKiBUaGUgTUdNVCBjbGFzcyBkb2VzIG5vdCBleGlzdHMgLSB0aGF0J3Mgb2sgKi8KKwkJCWRldl9kYmcoZGV2LCAiQ2xhc3MgJSNsbHggbm90IGZvdW5kXG4iLCBBVEtfTVVYX01HTVQpOworCQkJcmV0dXJuIDA7CisJCX0KKwkJcmV0dXJuIFBUUl9FUlIocGFjayk7CisJfQorCisJLyogU2VhcmNoIHRoZSBFQyAqLworCWVjID0gTlVMTDsKKwlmb3IgKGkgPSAwOyBpIDwgcGFjay0+cGFja2FnZS5jb3VudDsgaSsrKSB7CisJCXVuaW9uIGFjcGlfb2JqZWN0ICpvYmogPSAmcGFjay0+cGFja2FnZS5lbGVtZW50c1tpXTsKKwkJdW5pb24gYWNwaV9vYmplY3QgKmlkOworCisJCWlmIChvYmotPnR5cGUgIT0gQUNQSV9UWVBFX1BBQ0tBR0UpCisJCQljb250aW51ZTsKKworCQlpZCA9ICZvYmotPnBhY2thZ2UuZWxlbWVudHNbMF07CisJCWlmIChpZC0+dHlwZSAhPSBBQ1BJX1RZUEVfSU5URUdFUikKKwkJCWNvbnRpbnVlOworCisJCWlmIChpZC0+aW50ZWdlci52YWx1ZSA9PSBBVEtfRUNfSUQpIHsKKwkJCWVjID0gb2JqOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlyZXQgPSAoZWMgIT0gTlVMTCk7CisJaWYgKCFyZXQpCisJCS8qIFRoZSBzeXN0ZW0gaGFzIG5vIEVDICovCisJCWRldl9kYmcoZGV2LCAiRUMgbm90IGZvdW5kXG4iKTsKKworCUFDUElfRlJFRShwYWNrKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGF0a19lY19lbmFibGVkKHN0cnVjdCBhdGtfZGF0YSAqZGF0YSkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmZGF0YS0+YWNwaV9kZXYtPmRldjsKKwl1bmlvbiBhY3BpX29iamVjdCAqb2JqOworCXN0cnVjdCBhdGtfYWNwaV9yZXRfYnVmZmVyICpidWY7CisJaW50IGVycjsKKworCW9iaiA9IGF0a19naXRtKGRhdGEsIEFUS19FQ19JRCk7CisJaWYgKElTX0VSUihvYmopKSB7CisJCWRldl9lcnIoZGV2LCAiVW5hYmxlIHRvIHF1ZXJ5IEVDIHN0YXR1c1xuIik7CisJCXJldHVybiBQVFJfRVJSKG9iaik7CisJfQorCWJ1ZiA9IChzdHJ1Y3QgYXRrX2FjcGlfcmV0X2J1ZmZlciAqKW9iai0+YnVmZmVyLnBvaW50ZXI7CisKKwlpZiAoYnVmLT5mbGFncyA9PSAwKSB7CisJCWRldl9lcnIoZGV2LCAiVW5hYmxlIHRvIHF1ZXJ5IEVDIHN0YXR1c1xuIik7CisJCWVyciA9IC1FSU87CisJfSBlbHNlIHsKKwkJZXJyID0gKGJ1Zi0+dmFsdWUgIT0gMCk7CisJCWRldl9kYmcoZGV2LCAiRUMgaXMgJXNhYmxlZFxuIiwKKwkJCQllcnIgPyAiZW4iIDogImRpcyIpOworCX0KKworCUFDUElfRlJFRShvYmopOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgYXRrX2VjX2N0bChzdHJ1Y3QgYXRrX2RhdGEgKmRhdGEsIGludCBlbmFibGUpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJmRhdGEtPmFjcGlfZGV2LT5kZXY7CisJdW5pb24gYWNwaV9vYmplY3QgKm9iajsKKwlzdHJ1Y3QgYXRrX2FjcGlfaW5wdXRfYnVmIHNpdG07CisJc3RydWN0IGF0a19hY3BpX3JldF9idWZmZXIgKmVjX3JldDsKKwlpbnQgZXJyID0gMDsKKworCXNpdG0uaWQgPSBBVEtfRUNfSUQ7CisJc2l0bS5wYXJhbTEgPSBlbmFibGU7CisJc2l0bS5wYXJhbTIgPSAwOworCisJb2JqID0gYXRrX3NpdG0oZGF0YSwgJnNpdG0pOworCWlmIChJU19FUlIob2JqKSkgeworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byAlc2FibGUgdGhlIEVDXG4iLAorCQkJCWVuYWJsZSA/ICJlbiIgOiAiZGlzIik7CisJCXJldHVybiBQVFJfRVJSKG9iaik7CisJfQorCWVjX3JldCA9IChzdHJ1Y3QgYXRrX2FjcGlfcmV0X2J1ZmZlciAqKW9iai0+YnVmZmVyLnBvaW50ZXI7CisJaWYgKGVjX3JldC0+ZmxhZ3MgPT0gMCkgeworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byAlc2FibGUgdGhlIEVDXG4iLAorCQkJCWVuYWJsZSA/ICJlbiIgOiAiZGlzIik7CisJCWVyciA9IC1FSU87CisJfSBlbHNlIHsKKwkJZGV2X2luZm8oZGV2LCAiRUMgJXNhYmxlZFxuIiwKKwkJCQllbmFibGUgPyAiZW4iIDogImRpcyIpOworCX0KKworCUFDUElfRlJFRShvYmopOworCXJldHVybiBlcnI7Cit9CisKIHN0YXRpYyBpbnQgYXRrX2VudW1lcmF0ZV9uZXdfaHdtb24oc3RydWN0IGF0a19kYXRhICpkYXRhKQogewogCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZkYXRhLT5hY3BpX2Rldi0+ZGV2OwotCXN0cnVjdCBhY3BpX2J1ZmZlciBidWY7Ci0JYWNwaV9zdGF0dXMgcmV0OwotCXN0cnVjdCBhY3BpX29iamVjdF9saXN0IHBhcmFtczsKLQl1bmlvbiBhY3BpX29iamVjdCBpZDsKIAl1bmlvbiBhY3BpX29iamVjdCAqcGFjazsKIAlpbnQgZXJyOwogCWludCBpOwogCisJZXJyID0gYXRrX2VjX3ByZXNlbnQoZGF0YSk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisJaWYgKGVycikgeworCQllcnIgPSBhdGtfZWNfZW5hYmxlZChkYXRhKTsKKwkJaWYgKGVyciA8IDApCisJCQlyZXR1cm4gZXJyOworCQkvKiBJZiB0aGUgRUMgd2FzIGRpc2FibGVkIHdlIHdpbGwgZGlzYWJsZSBpdCBhZ2FpbiBvbiB1bmxvYWQgKi8KKwkJZGF0YS0+ZGlzYWJsZV9lYyA9IGVycjsKKworCQllcnIgPSBhdGtfZWNfY3RsKGRhdGEsIDEpOworCQlpZiAoZXJyKSB7CisJCQlkYXRhLT5kaXNhYmxlX2VjID0gZmFsc2U7CisJCQlyZXR1cm4gZXJyOworCQl9CisJfQorCiAJZGV2X2RiZyhkZXYsICJFbnVtZXJhdGluZyBod21vbiBzZW5zb3JzXG4iKTsKIAotCWlkLnR5cGUgPSBBQ1BJX1RZUEVfSU5URUdFUjsKLQlpZC5pbnRlZ2VyLnZhbHVlID0gQVRLX01VWF9IV01PTjsKLQlwYXJhbXMuY291bnQgPSAxOwotCXBhcmFtcy5wb2ludGVyID0gJmlkOwotCi0JYnVmLmxlbmd0aCA9IEFDUElfQUxMT0NBVEVfQlVGRkVSOwotCXJldCA9IGFjcGlfZXZhbHVhdGVfb2JqZWN0X3R5cGVkKGRhdGEtPmVudW1lcmF0ZV9oYW5kbGUsIE5VTEwsICZwYXJhbXMsCi0JCQkmYnVmLCBBQ1BJX1RZUEVfUEFDS0FHRSk7Ci0JaWYgKHJldCAhPSBBRV9PSykgewotCQlkZXZfd2FybihkZXYsIE1FVEhPRF9FTlVNRVJBVEUgIjogQUNQSSBleGNlcHRpb246ICVzXG4iLAotCQkJCWFjcGlfZm9ybWF0X2V4Y2VwdGlvbihyZXQpKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCi0JLyogUmVzdWx0IG11c3QgYmUgYSBwYWNrYWdlICovCi0JcGFjayA9IGJ1Zi5wb2ludGVyOwotCi0JaWYgKHBhY2stPnBhY2thZ2UuY291bnQgPCAxKSB7Ci0JCWRldl9kYmcoZGV2LCAiJXM6IGh3bW9uIHBhY2thZ2UgaXMgdG9vIHNtYWxsOiAlZFxuIiwgX19mdW5jX18sCi0JCQkJcGFjay0+cGFja2FnZS5jb3VudCk7Ci0JCWVyciA9IC1FSU5WQUw7Ci0JCWdvdG8gb3V0OwotCX0KKwlwYWNrID0gYXRrX2dncnAoZGF0YSwgQVRLX01VWF9IV01PTik7CisJaWYgKElTX0VSUihwYWNrKSkKKwkJcmV0dXJuIFBUUl9FUlIocGFjayk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgcGFjay0+cGFja2FnZS5jb3VudDsgaSsrKSB7CiAJCXVuaW9uIGFjcGlfb2JqZWN0ICpvYmogPSAmcGFjay0+cGFja2FnZS5lbGVtZW50c1tpXTsKQEAgLTc1OCw4ICs5NzEsNyBAQAogCiAJZXJyID0gZGF0YS0+dm9sdGFnZV9jb3VudCArIGRhdGEtPnRlbXBlcmF0dXJlX2NvdW50ICsgZGF0YS0+ZmFuX2NvdW50OwogCi1vdXQ6Ci0JQUNQSV9GUkVFKGJ1Zi5wb2ludGVyKTsKKwlBQ1BJX0ZSRUUocGFjayk7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtODk1LDYgKzExMDcsMTUgQEAKIAl9CiAJZGF0YS0+cmVhZF9oYW5kbGUgPSByZXQ7CiAKKwkvKiBEZS1tdWx0aXBsZXhlciAod3JpdGUpICovCisJc3RhdHVzID0gYWNwaV9nZXRfaGFuZGxlKGRhdGEtPmF0a19oYW5kbGUsIE1FVEhPRF9XUklURSwgJnJldCk7CisJaWYgKHN0YXR1cyAhPSBBRV9PSykgeworCQlkZXZfZGJnKGRldiwgIm1ldGhvZCAiIE1FVEhPRF9SRUFEICIgbm90IGZvdW5kOiAlc1xuIiwKKwkJCQkgYWNwaV9mb3JtYXRfZXhjZXB0aW9uKHN0YXR1cykpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJZGF0YS0+d3JpdGVfaGFuZGxlID0gcmV0OworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTkxNSw2ICsxMTM2LDcgQEAKIAlkYXRhLT5hY3BpX2RldiA9IGRldmljZTsKIAlkYXRhLT5hdGtfaGFuZGxlID0gZGV2aWNlLT5oYW5kbGU7CiAJSU5JVF9MSVNUX0hFQUQoJmRhdGEtPnNlbnNvcl9saXN0KTsKKwlkYXRhLT5kaXNhYmxlX2VjID0gZmFsc2U7CiAKIAlidWYubGVuZ3RoID0gQUNQSV9BTExPQ0FURV9CVUZGRVI7CiAJcmV0ID0gYWNwaV9ldmFsdWF0ZV9vYmplY3RfdHlwZWQoZGF0YS0+YXRrX2hhbmRsZSwgQk9BUkRfSUQsIE5VTEwsCkBAIC05NzMsNiArMTE5NSw4IEBACiBjbGVhbnVwOgogCWF0a19mcmVlX3NlbnNvcnMoZGF0YSk7CiBvdXQ6CisJaWYgKGRhdGEtPmRpc2FibGVfZWMpCisJCWF0a19lY19jdGwoZGF0YSwgMCk7CiAJa2ZyZWUoZGF0YSk7CiAJcmV0dXJuIGVycjsKIH0KQEAgLTk4OCw2ICsxMjEyLDExIEBACiAJYXRrX2ZyZWVfc2Vuc29ycyhkYXRhKTsKIAlod21vbl9kZXZpY2VfdW5yZWdpc3RlcihkYXRhLT5od21vbl9kZXYpOwogCisJaWYgKGRhdGEtPmRpc2FibGVfZWMpIHsKKwkJaWYgKGF0a19lY19jdGwoZGF0YSwgMCkpCisJCQlkZXZfZXJyKCZkZXZpY2UtPmRldiwgIkZhaWxlZCB0byBkaXNhYmxlIEVDXG4iKTsKKwl9CisKIAlrZnJlZShkYXRhKTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9kbWUxNzM3LmMgYi9kcml2ZXJzL2h3bW9uL2RtZTE3MzcuYwppbmRleCAyYzJjYjFlLi4yN2Q2MjU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2RtZTE3MzcuYworKysgYi9kcml2ZXJzL2h3bW9uL2RtZTE3MzcuYwpAQCAtNTcyLDcgKzU3Miw3IEBACiAKIAkvKiBTYW1wbGUgcmVnaXN0ZXIgY29udGVudHMgZXZlcnkgMSBzZWMgKi8KIAlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBkYXRhLT5sYXN0X3VwZGF0ZSArIEhaKSB8fCAhZGF0YS0+dmFsaWQpIHsKLQkJaWYgKGRhdGEtPnR5cGUgIT0gc2NoNTAyNykgeworCQlpZiAoZGF0YS0+dHlwZSA9PSBkbWUxNzM3KSB7CiAJCQlkYXRhLT52aWQgPSBkbWUxNzM3X3JlYWQoZGF0YSwgRE1FMTczN19SRUdfVklEKSAmCiAJCQkJMHgzZjsKIAkJfQpAQCAtMTYyMSw5ICsxNjIxLDYgQEAKIAkmc2Vuc29yX2Rldl9hdHRyX3pvbmUxX2F1dG9fcG9pbnQxX3RlbXBfaHlzdC5kZXZfYXR0ci5hdHRyLAogCSZzZW5zb3JfZGV2X2F0dHJfem9uZTJfYXV0b19wb2ludDFfdGVtcF9oeXN0LmRldl9hdHRyLmF0dHIsCiAJJnNlbnNvcl9kZXZfYXR0cl96b25lM19hdXRvX3BvaW50MV90ZW1wX2h5c3QuZGV2X2F0dHIuYXR0ciwKLQkvKiBNaXNjICovCi0JJmRldl9hdHRyX3ZybS5hdHRyLAotCSZkZXZfYXR0cl9jcHUwX3ZpZC5hdHRyLAogCU5VTEwKIH07CiAKQEAgLTE2MzEsNiArMTYyOCwxOCBAQAogCS5hdHRycyA9IGRtZTE3MzdfbWlzY19hdHRyLAogfTsKIAorLyogVGhlIGZvbGxvd2luZyBzdHJ1Y3QgaG9sZHMgVklELXJlbGF0ZWQgYXR0cmlidXRlcy4gVGhlaXIgY3JlYXRpb24KKyAgIGRlcGVuZHMgb24gdGhlIGNoaXAgdHlwZSB3aGljaCBpcyBkZXRlcm1pbmVkIGR1cmluZyBtb2R1bGUgbG9hZC4gKi8KK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpkbWUxNzM3X3ZpZF9hdHRyW10gPSB7CisJJmRldl9hdHRyX3ZybS5hdHRyLAorCSZkZXZfYXR0cl9jcHUwX3ZpZC5hdHRyLAorCU5VTEwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGRtZTE3MzdfdmlkX2dyb3VwID0geworCS5hdHRycyA9IGRtZTE3MzdfdmlkX2F0dHIsCit9OworCiAvKiBUaGUgZm9sbG93aW5nIHN0cnVjdHMgaG9sZCB0aGUgUFdNIGF0dHJpYnV0ZXMsIHNvbWUgb2Ygd2hpY2ggYXJlIG9wdGlvbmFsLgogICogVGhlaXIgY3JlYXRpb24gZGVwZW5kcyBvbiB0aGUgY2hpcCBjb25maWd1cmF0aW9uIHdoaWNoIGlzIGRldGVybWluZWQgZHVyaW5nCiAgKiBtb2R1bGUgbG9hZC4gKi8KQEAgLTE5MDIsNiArMTkxMSw5IEBACiAJaWYgKGRhdGEtPnR5cGUgIT0gc2NoNTAyNykgewogCQlzeXNmc19yZW1vdmVfZ3JvdXAoJmRldi0+a29iaiwgJmRtZTE3MzdfbWlzY19ncm91cCk7CiAJfQorCWlmIChkYXRhLT50eXBlID09IGRtZTE3MzcpIHsKKwkJc3lzZnNfcmVtb3ZlX2dyb3VwKCZkZXYtPmtvYmosICZkbWUxNzM3X3ZpZF9ncm91cCk7CisJfQogCiAJc3lzZnNfcmVtb3ZlX2dyb3VwKCZkZXYtPmtvYmosICZkbWUxNzM3X2dyb3VwKTsKIApAQCAtMTkzMyw2ICsxOTQ1LDEzIEBACiAJCWdvdG8gZXhpdF9yZW1vdmU7CiAJfQogCisJLyogQ3JlYXRlIFZJRC1yZWxhdGVkIHN5c2ZzIGF0dHJpYnV0ZXMgKi8KKwlpZiAoKGRhdGEtPnR5cGUgPT0gZG1lMTczNykgJiYKKwkgICAgKGVyciA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmZGV2LT5rb2JqLAorCQkJCSAgICAgICZkbWUxNzM3X3ZpZF9ncm91cCkpKSB7CisJCWdvdG8gZXhpdF9yZW1vdmU7CisJfQorCiAJLyogQ3JlYXRlIGZhbiBzeXNmcyBhdHRyaWJ1dGVzICovCiAJZm9yIChpeCA9IDA7IGl4IDwgQVJSQVlfU0laRShkbWUxNzM3X2Zhbl9ncm91cCk7IGl4KyspIHsKIAkJaWYgKGRhdGEtPmhhc19mYW4gJiAoMSA8PCBpeCkpIHsKQEAgLTIxMjcsNyArMjE0Niw3IEBACiAJZGF0YS0+cHdtX2FjelsyXSA9IDQ7CS8qIHB3bTMgLT4gem9uZTMgKi8KIAogCS8qIFNldCBWUk0gKi8KLQlpZiAoZGF0YS0+dHlwZSAhPSBzY2g1MDI3KSB7CisJaWYgKGRhdGEtPnR5cGUgPT0gZG1lMTczNykgewogCQlkYXRhLT52cm0gPSB2aWRfd2hpY2hfdnJtKCk7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2ZzY2htZC5jIGIvZHJpdmVycy9od21vbi9mc2NobWQuYwppbmRleCBlYTk1NWVkLi5kYTFiMWY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2ZzY2htZC5jCisrKyBiL2RyaXZlcnMvaHdtb24vZnNjaG1kLmMKQEAgLTgxOSw3ICs4MTksNyBAQAogc3RhdGljIHNzaXplX3Qgd2F0Y2hkb2dfd3JpdGUoc3RydWN0IGZpbGUgKmZpbHAsIGNvbnN0IGNoYXIgX191c2VyICpidWYsCiAJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKm9mZnNldCkKIHsKLQlzaXplX3QgcmV0OworCWludCByZXQ7CiAJc3RydWN0IGZzY2htZF9kYXRhICpkYXRhID0gZmlscC0+cHJpdmF0ZV9kYXRhOwogCiAJaWYgKGNvdW50KSB7CkBAIC05MTUsNyArOTE1LDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB3YXRjaGRvZ19mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgd2F0Y2hkb2dfZm9wcyA9IHsKIAkub3duZXIgPSBUSElTX01PRFVMRSwKIAkubGxzZWVrID0gbm9fbGxzZWVrLAogCS5vcGVuID0gd2F0Y2hkb2dfb3BlbiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vaHBfYWNjZWwuYyBiL2RyaXZlcnMvaHdtb24vaHBfYWNjZWwuYwppbmRleCA2Njc5ODU0Li5iZTQ3NWU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2hwX2FjY2VsLmMKKysrIGIvZHJpdmVycy9od21vbi9ocF9hY2NlbC5jCkBAIC0xOTcsMTEgKzE5NywxMyBAQAogCUFYSVNfRE1JX01BVENIKCJIUDIxMzMiLCAiSFAgMjEzMyIsIHh5X3JvdGF0ZWRfbGVmdCksCiAJQVhJU19ETUlfTUFUQ0goIkhQMjE0MCIsICJIUCAyMTQwIiwgeHlfc3dhcF9pbnZlcnRlZCksCiAJQVhJU19ETUlfTUFUQ0goIk5DNjUzeCIsICJIUCBDb21wYXEgNjUzIiwgeHlfcm90YXRlZF9sZWZ0X3VzZCksCi0JQVhJU19ETUlfTUFUQ0goIk5DNjczeCIsICJIUCBDb21wYXEgNjczIiwgeHlfcm90YXRlZF9sZWZ0X3VzZCksCisJQVhJU19ETUlfTUFUQ0goIk5DNjczMGIiLCAiSFAgQ29tcGFxIDY3MzBiIiwgeHlfcm90YXRlZF9sZWZ0X3VzZCksCisJQVhJU19ETUlfTUFUQ0goIk5DNjczMHMiLCAiSFAgQ29tcGFxIDY3MzBzIiwgeHlfc3dhcCksCiAJQVhJU19ETUlfTUFUQ0goIk5DNjUxeHgiLCAiSFAgQ29tcGFxIDY1MSIsIHh5X3JvdGF0ZWRfcmlnaHQpLAogCUFYSVNfRE1JX01BVENIKCJOQzY3MTB4IiwgIkhQIENvbXBhcSA2NzEwIiwgeHlfc3dhcF95el9pbnZlcnRlZCksCiAJQVhJU19ETUlfTUFUQ0goIk5DNjcxNXgiLCAiSFAgQ29tcGFxIDY3MTUiLCB5X2ludmVydGVkKSwKIAlBWElTX0RNSV9NQVRDSCgiTkM2OTN4eCIsICJIUCBFbGl0ZUJvb2sgNjkzIiwgeHlfcm90YXRlZF9yaWdodCksCisJQVhJU19ETUlfTUFUQ0goIk5DNjkzeHgiLCAiSFAgRWxpdGVCb29rIDg1MyIsIHh5X3N3YXApLAogCS8qIEludGVsLWJhc2VkIEhQIFBhdmlsaW9uIGR2NSAqLwogCUFYSVNfRE1JX01BVENIMigiSFBEVjVfSSIsCiAJCQlQUk9EVUNUX05BTUUsICJIUCBQYXZpbGlvbiBkdjUiLApAQCAtMjE0LDYgKzIxNiw3IEBACiAJCQl5X2ludmVydGVkKSwKIAlBWElTX0RNSV9NQVRDSCgiRFY3IiwgIkhQIFBhdmlsaW9uIGR2NyIsIHhfaW52ZXJ0ZWQpLAogCUFYSVNfRE1JX01BVENIKCJIUDg3MTAiLCAiSFAgQ29tcGFxIDg3MTAiLCB5X2ludmVydGVkKSwKKwlBWElTX0RNSV9NQVRDSCgiSERYMTgiLCAiSFAgSERYIDE4IiwgeF9pbnZlcnRlZCksCiAJeyBOVUxMLCB9CiAvKiBMYXB0b3AgbW9kZWxzIHdpdGhvdXQgYXhpcyBpbmZvICh5ZXQpOgogICogIk5DNjkxMCIgIkhQIENvbXBhcSA2OTEwIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9pdDg3LmMgYi9kcml2ZXJzL2h3bW9uL2l0ODcuYwppbmRleCBmZmViMmExLi5hMzc0OWNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2l0ODcuYworKysgYi9kcml2ZXJzL2h3bW9uL2l0ODcuYwpAQCAtMTAyOCwxMiArMTAyOCwxMSBAQAogCQljaGlwX3R5cGUsICphZGRyZXNzLCBzaW9fZGF0YS0+cmV2aXNpb24pOwogCiAJLyogUmVhZCBHUElPIGNvbmZpZyBhbmQgVklEIHZhbHVlIGZyb20gTEROIDcgKEdQSU8pICovCi0JaWYgKGNoaXBfdHlwZSAhPSBJVDg3MDVGX0RFVklEKSB7CisJaWYgKHNpb19kYXRhLT50eXBlICE9IGl0ODcpIHsKIAkJaW50IHJlZzsKIAogCQlzdXBlcmlvX3NlbGVjdChHUElPKTsKLQkJaWYgKChjaGlwX3R5cGUgPT0gaXQ4NzE4KSB8fAotCQkgICAgKGNoaXBfdHlwZSA9PSBpdDg3MjApKQorCQlpZiAoc2lvX2RhdGEtPnR5cGUgPT0gaXQ4NzE4IHx8IHNpb19kYXRhLT50eXBlID09IGl0ODcyMCkKIAkJCXNpb19kYXRhLT52aWRfdmFsdWUgPSBzdXBlcmlvX2luYihJVDg3X1NJT19WSURfUkVHKTsKIAogCQlyZWcgPSBzdXBlcmlvX2luYihJVDg3X1NJT19QSU5YMl9SRUcpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9saXMzbHYwMmRfc3BpLmMgYi9kcml2ZXJzL2h3bW9uL2xpczNsdjAyZF9zcGkuYwppbmRleCBlY2Q3Mzk1Li44MmIxNjgwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2xpczNsdjAyZF9zcGkuYworKysgYi9kcml2ZXJzL2h3bW9uL2xpczNsdjAyZF9zcGkuYwpAQCAtODMsNyArODMsOCBAQAogCXN0cnVjdCBsaXMzbHYwMmQgKmxpczMgPSBzcGlfZ2V0X2RydmRhdGEoc3BpKTsKIAlsaXMzbHYwMmRfam95c3RpY2tfZGlzYWJsZSgpOwogCWxpczNsdjAyZF9wb3dlcm9mZihsaXMzKTsKLQlyZXR1cm4gMDsKKworCXJldHVybiBsaXMzbHYwMmRfcmVtb3ZlX2ZzKCZsaXMzX2Rldik7CiB9CiAKICNpZmRlZiBDT05GSUdfUE0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vbHRjNDIxNS5jIGIvZHJpdmVycy9od21vbi9sdGM0MjE1LmMKaW5kZXggNmM5YTA0MS4uMDBkOTc1ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9sdGM0MjE1LmMKKysrIGIvZHJpdmVycy9od21vbi9sdGM0MjE1LmMKQEAgLTIwLDExICsyMCw2IEBACiAjaW5jbHVkZSA8bGludXgvaHdtb24uaD4KICNpbmNsdWRlIDxsaW51eC9od21vbi1zeXNmcy5oPgogCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geyBJMkNfQ0xJRU5UX0VORCB9OwotCi0vKiBJbnNtb2QgcGFyYW1ldGVycyAqLwotSTJDX0NMSUVOVF9JTlNNT0RfMShsdGM0MjE1KTsKLQogLyogSGVyZSBhcmUgbmFtZXMgb2YgdGhlIGNoaXAncyByZWdpc3RlcnMgKGEuay5hLiBjb21tYW5kcykgKi8KIGVudW0gbHRjNDIxNV9jbWQgewogCUxUQzQyMTVfQ09OVFJPTAkJCT0gMHgwMCwgLyogcncgKi8KQEAgLTI0Niw5ICsyNDEsMTMgQEAKIHN0YXRpYyBpbnQgbHRjNDIxNV9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAogCQkJIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKIHsKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIgPSBjbGllbnQtPmFkYXB0ZXI7CiAJc3RydWN0IGx0YzQyMTVfZGF0YSAqZGF0YTsKIAlpbnQgcmV0OwogCisJaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShhZGFwdGVyLCBJMkNfRlVOQ19TTUJVU19CWVRFX0RBVEEpKQorCQlyZXR1cm4gLUVOT0RFVjsKKwogCWRhdGEgPSBremFsbG9jKHNpemVvZigqZGF0YSksIEdGUF9LRVJORUwpOwogCWlmICghZGF0YSkgewogCQlyZXQgPSAtRU5PTUVNOwpAQCAtMjk0LDU2ICsyOTMsMjAgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBsdGM0MjE1X2RldGVjdChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAotCQkJICBpbnQga2luZCwKLQkJCSAgc3RydWN0IGkyY19ib2FyZF9pbmZvICppbmZvKQotewotCXN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciA9IGNsaWVudC0+YWRhcHRlcjsKLQotCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoYWRhcHRlciwgSTJDX0ZVTkNfU01CVVNfQllURV9EQVRBKSkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQlpZiAoa2luZCA8IDApIHsJCS8qIHByb2JlZCBkZXRlY3Rpb24gLSBjaGVjayB0aGUgY2hpcCB0eXBlICovCi0JCXMzMiB2OwkJLyogOCBiaXRzIGZyb20gdGhlIGNoaXAsIG9yIC1FUlJOTyAqLwotCi0JCS8qCi0JCSAqIFJlZ2lzdGVyIDB4MDEgYml0IGI3IGlzIHJlc2VydmVkLCBleHBlY3QgMAotCQkgKiBSZWdpc3RlciAweDAzIGJpdCBiNiBhbmQgYjcgYXJlIHJlc2VydmVkLCBleHBlY3QgMAotCQkgKi8KLQkJdiA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIExUQzQyMTVfQUxFUlQpOwotCQlpZiAodiA8IDAgfHwgKHYgJiAoMSA8PCA3KSkgIT0gMCkKLQkJCXJldHVybiAtRU5PREVWOwotCi0JCXYgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCBMVEM0MjE1X0ZBVUxUKTsKLQkJaWYgKHYgPCAwIHx8ICh2ICYgKCgxIDw8IDYpIHwgKDEgPDwgNykpKSAhPSAwKQotCQkJCXJldHVybiAtRU5PREVWOwotCX0KLQotCXN0cmxjcHkoaW5mby0+dHlwZSwgImx0YzQyMTUiLCBJMkNfTkFNRV9TSVpFKTsKLQlkZXZfaW5mbygmYWRhcHRlci0+ZGV2LCAibHRjNDIxNSAlcyBhdCBhZGRyZXNzIDB4JTAyeFxuIiwKLQkJCWtpbmQgPCAwID8gInByb2JlZCIgOiAiZm9yY2VkIiwKLQkJCWNsaWVudC0+YWRkcik7Ci0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIGx0YzQyMTVfaWRbXSA9IHsKLQl7ICJsdGM0MjE1IiwgbHRjNDIxNSB9LAorCXsgImx0YzQyMTUiLCAwIH0sCiAJeyB9CiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIGx0YzQyMTVfaWQpOwogCiAvKiBUaGlzIGlzIHRoZSBkcml2ZXIgdGhhdCB3aWxsIGJlIGluc2VydGVkICovCiBzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgbHRjNDIxNV9kcml2ZXIgPSB7Ci0JLmNsYXNzCQk9IEkyQ19DTEFTU19IV01PTiwKIAkuZHJpdmVyID0gewogCQkubmFtZQk9ICJsdGM0MjE1IiwKIAl9LAogCS5wcm9iZQkJPSBsdGM0MjE1X3Byb2JlLAogCS5yZW1vdmUJCT0gbHRjNDIxNV9yZW1vdmUsCiAJLmlkX3RhYmxlCT0gbHRjNDIxNV9pZCwKLQkuZGV0ZWN0CQk9IGx0YzQyMTVfZGV0ZWN0LAotCS5hZGRyZXNzX2RhdGEJPSAmYWRkcl9kYXRhLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgbHRjNDIxNV9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2x0YzQyNDUuYyBiL2RyaXZlcnMvaHdtb24vbHRjNDI0NS5jCmluZGV4IGUzODk2NDMuLjY1YzIzMmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vbHRjNDI0NS5jCisrKyBiL2RyaXZlcnMvaHdtb24vbHRjNDI0NS5jCkBAIC0yMiwxNSArMjIsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2h3bW9uLmg+CiAjaW5jbHVkZSA8bGludXgvaHdtb24tc3lzZnMuaD4KIAotLyogVmFsaWQgYWRkcmVzc2VzIGFyZSAweDIwIC0gMHgzZgotICoKLSAqIEZvciBub3csIHdlIGRvIG5vdCBwcm9iZSwgc2luY2Ugc29tZSBvZiB0aGVzZSBhZGRyZXNzZXMKLSAqIGFyZSBrbm93biB0byBiZSB1bmZyaWVuZGx5IHRvIHByb2JpbmcgKi8KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7IEkyQ19DTElFTlRfRU5EIH07Ci0KLS8qIEluc21vZCBwYXJhbWV0ZXJzICovCi1JMkNfQ0xJRU5UX0lOU01PRF8xKGx0YzQyNDUpOwotCiAvKiBIZXJlIGFyZSBuYW1lcyBvZiB0aGUgY2hpcCdzIHJlZ2lzdGVycyAoYS5rLmEuIGNvbW1hbmRzKSAqLwogZW51bSBsdGM0MjQ1X2NtZCB7CiAJTFRDNDI0NV9TVEFUVVMJCQk9IDB4MDAsIC8qIHJlYWRvbmx5ICovCkBAIC0zNjksOSArMzYwLDEzIEBACiBzdGF0aWMgaW50IGx0YzQyNDVfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKIAkJCSBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCiB7CisJc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyID0gY2xpZW50LT5hZGFwdGVyOwogCXN0cnVjdCBsdGM0MjQ1X2RhdGEgKmRhdGE7CiAJaW50IHJldDsKIAorCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoYWRhcHRlciwgSTJDX0ZVTkNfU01CVVNfQllURV9EQVRBKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKIAlkYXRhID0ga3phbGxvYyhzaXplb2YoKmRhdGEpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWRhdGEpIHsKIAkJcmV0ID0gLUVOT01FTTsKQEAgLTQxOCwxMzYgKzQxMywyMCBAQAogCXJldHVybiAwOwogfQogCi0vKiBDaGVjayB0aGF0IHNvbWUgYml0cyBpbiBhIGNvbnRyb2wgcmVnaXN0ZXIgYXBwZWFyIGF0IGFsbCBwb3NzaWJsZQotICogbG9jYXRpb25zIHdpdGhvdXQgY2hhbmdpbmcgdmFsdWUKLSAqCi0gKiBAY2xpZW50OiB0aGUgaTJjIGNsaWVudCB0byB1c2UKLSAqIEByZWc6IHRoZSByZWdpc3RlciB0byByZWFkCi0gKiBAYml0czogdGhlIGJpdHMgdG8gY2hlY2sgKDB4ZmYgY2hlY2tzIGFsbCBiaXRzLAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAweDAzIGNoZWNrcyBvbmx5IHRoZSBsYXN0IHR3byBiaXRzKQotICoKLSAqIHJldHVybiAtRVJSTk8gaWYgdGhlIHJlZ2lzdGVyIHJlYWQgZmFpbGVkCi0gKiByZXR1cm4gLUVOT0RFViBpZiB0aGUgcmVnaXN0ZXIgdmFsdWUgZG9lc24ndCBzdGF5IGNvbnN0YW50IGF0IGFsbAotICogcG9zc2libGUgYWRkcmVzc2VzCi0gKgotICogcmV0dXJuIDAgZm9yIHN1Y2Nlc3MKLSAqLwotc3RhdGljIGludCBsdGM0MjQ1X2NoZWNrX2NvbnRyb2xfcmVnKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHJlZywgdTggYml0cykKLXsKLQlpbnQgaTsKLQlzMzIgdiwgdm9mZjEsIHZvZmYyOwotCi0JLyogUmVhZCByZWdpc3RlciBhbmQgY2hlY2sgZm9yIGVycm9yICovCi0JdiA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIHJlZyk7Ci0JaWYgKHYgPCAwKQotCQlyZXR1cm4gdjsKLQotCXYgJj0gYml0czsKLQotCWZvciAoaSA9IDB4MDA7IGkgPCAweGZmOyBpICs9IDB4MjApIHsKLQotCQl2b2ZmMSA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIHJlZyArIGkpOwotCQlpZiAodm9mZjEgPCAwKQotCQkJcmV0dXJuIHZvZmYxOwotCi0JCXZvZmYyID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgcmVnICsgaSArIDB4MDgpOwotCQlpZiAodm9mZjIgPCAwKQotCQkJcmV0dXJuIHZvZmYyOwotCi0JCXZvZmYxICY9IGJpdHM7Ci0JCXZvZmYyICY9IGJpdHM7Ci0KLQkJaWYgKHYgIT0gdm9mZjEgfHwgdiAhPSB2b2ZmMikKLQkJCXJldHVybiAtRU5PREVWOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGx0YzQyNDVfZGV0ZWN0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCi0JCQkgIGludCBraW5kLAotCQkJICBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gKmluZm8pCi17Ci0Jc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyID0gY2xpZW50LT5hZGFwdGVyOwotCi0JaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShhZGFwdGVyLCBJMkNfRlVOQ19TTUJVU19CWVRFX0RBVEEpKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCWlmIChraW5kIDwgMCkgewkJLyogcHJvYmVkIGRldGVjdGlvbiAtIGNoZWNrIHRoZSBjaGlwIHR5cGUgKi8KLQkJczMyIHY7CQkvKiA4IGJpdHMgZnJvbSB0aGUgY2hpcCwgb3IgLUVSUk5PICovCi0KLQkJLyogQ2hpcCByZWdpc3RlcnMgMHgwMC0weDA3IGFyZSBjb250cm9sIHJlZ2lzdGVycwotCQkgKiBDaGlwIHJlZ2lzdGVycyAweDEwLTB4MWYgYXJlIGRhdGEgcmVnaXN0ZXJzCi0JCSAqCi0JCSAqIEFkZHJlc3MgYml0cyBiNy1iNSBhcmUgaWdub3JlZC4gVGhpcyBtYWtlcyB0aGUgY2hpcCAicmVwZWF0IgotCQkgKiBpbiBzdGVwcyBvZiAweDIwLiBBbnkgY29udHJvbCByZWdpc3RlcnMgc2hvdWxkIGFwcGVhciB3aXRoCi0JCSAqIHRoZSBzYW1lIHZhbHVlcyBhY3Jvc3MgYWxsIGR1cGxpY2F0ZWQgYWRkcmVzc2VzLgotCQkgKgotCQkgKiBSZWdpc3RlciAweDAyIGJpdCBiMiBpcyByZXNlcnZlZCwgZXhwZWN0IDAKLQkJICogUmVnaXN0ZXIgMHgwNyBiaXRzIGI3IHRvIGI0IGFyZSByZXNlcnZlZCwgZXhwZWN0IDAKLQkJICoKLQkJICogUmVnaXN0ZXJzIDB4MDEsIDB4MDIgYXJlIGNvbnRyb2wgcmVnaXN0ZXJzIGFuZCBzaG91bGQgbm90Ci0JCSAqIGNoYW5nZSBvbiB0aGVpciBvd24uCi0JCSAqCi0JCSAqIFJlZ2lzdGVyIDB4MDYgYml0cyBiNiBhbmQgYjcgYXJlIGNvbnRyb2wgYml0cywgYW5kIHNob3VsZAotCQkgKiBub3QgY2hhbmdlIG9uIHRoZWlyIG93bi4KLQkJICoKLQkJICogUmVnaXN0ZXIgMHgwNyBiaXRzIGIzIHRvIGIwIGFyZSBjb250cm9sIGJpdHMsIGFuZCBzaG91bGQKLQkJICogbm90IGNoYW5nZSBvbiB0aGVpciBvd24uCi0JCSAqLwotCi0JCS8qIHJlYWQgcmVnaXN0ZXIgMHgwMiByZXNlcnZlZCBiaXQsIGV4cGVjdCAwICovCi0JCXYgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCBMVEM0MjQ1X0NPTlRST0wpOwotCQlpZiAodiA8IDAgfHwgKHYgJiAweDA0KSAhPSAwKQotCQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQkJLyogcmVhZCByZWdpc3RlciAweDA3IHJlc2VydmVkIGJpdHMsIGV4cGVjdCAwICovCi0JCXYgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCBMVEM0MjQ1X0FEQ0FEUik7Ci0JCWlmICh2IDwgMCB8fCAodiAmIDB4ZjApICE9IDApCi0JCQlyZXR1cm4gLUVOT0RFVjsKLQotCQkvKiBjaGVjayB0aGF0IHRoZSBhbGVydCByZWdpc3RlciBhcHBlYXJzIGF0IGFsbCBsb2NhdGlvbnMgKi8KLQkJaWYgKGx0YzQyNDVfY2hlY2tfY29udHJvbF9yZWcoY2xpZW50LCBMVEM0MjQ1X0FMRVJULCAweGZmKSkKLQkJCXJldHVybiAtRU5PREVWOwotCi0JCS8qIGNoZWNrIHRoYXQgdGhlIGNvbnRyb2wgcmVnaXN0ZXIgYXBwZWFycyBhdCBhbGwgbG9jYXRpb25zICovCi0JCWlmIChsdGM0MjQ1X2NoZWNrX2NvbnRyb2xfcmVnKGNsaWVudCwgTFRDNDI0NV9DT05UUk9MLCAweGZmKSkKLQkJCXJldHVybiAtRU5PREVWOwotCi0JCS8qIGNoZWNrIHRoYXQgcmVnaXN0ZXIgMHgwNiBiaXRzIGI2IGFuZCBiNyBzdGF5IGNvbnN0YW50ICovCi0JCWlmIChsdGM0MjQ1X2NoZWNrX2NvbnRyb2xfcmVnKGNsaWVudCwgTFRDNDI0NV9HUElPLCAweGMwKSkKLQkJCXJldHVybiAtRU5PREVWOwotCi0JCS8qIGNoZWNrIHRoYXQgcmVnaXN0ZXIgMHgwNyBiaXRzIGIzLWIwIHN0YXkgY29uc3RhbnQgKi8KLQkJaWYgKGx0YzQyNDVfY2hlY2tfY29udHJvbF9yZWcoY2xpZW50LCBMVEM0MjQ1X0FEQ0FEUiwgMHgwZikpCi0JCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0KLQlzdHJsY3B5KGluZm8tPnR5cGUsICJsdGM0MjQ1IiwgSTJDX05BTUVfU0laRSk7Ci0JZGV2X2luZm8oJmFkYXB0ZXItPmRldiwgImx0YzQyNDUgJXMgYXQgYWRkcmVzcyAweCUwMnhcbiIsCi0JCQlraW5kIDwgMCA/ICJwcm9iZWQiIDogImZvcmNlZCIsCi0JCQljbGllbnQtPmFkZHIpOwotCi0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBsdGM0MjQ1X2lkW10gPSB7Ci0JeyAibHRjNDI0NSIsIGx0YzQyNDUgfSwKKwl7ICJsdGM0MjQ1IiwgMCB9LAogCXsgfQogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBsdGM0MjQ1X2lkKTsKIAogLyogVGhpcyBpcyB0aGUgZHJpdmVyIHRoYXQgd2lsbCBiZSBpbnNlcnRlZCAqLwogc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGx0YzQyNDVfZHJpdmVyID0gewotCS5jbGFzcwkJPSBJMkNfQ0xBU1NfSFdNT04sCiAJLmRyaXZlciA9IHsKIAkJLm5hbWUJPSAibHRjNDI0NSIsCiAJfSwKIAkucHJvYmUJCT0gbHRjNDI0NV9wcm9iZSwKIAkucmVtb3ZlCQk9IGx0YzQyNDVfcmVtb3ZlLAogCS5pZF90YWJsZQk9IGx0YzQyNDVfaWQsCi0JLmRldGVjdAkJPSBsdGM0MjQ1X2RldGVjdCwKLQkuYWRkcmVzc19kYXRhCT0gJmFkZHJfZGF0YSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IGx0YzQyNDVfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9zaHQxNS5jIGIvZHJpdmVycy9od21vbi9zaHQxNS5jCmluZGV4IDMwM2MwMjYuLmViZTM4YjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vc2h0MTUuYworKysgYi9kcml2ZXJzL2h3bW9uL3NodDE1LmMKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9od21vbi1zeXNmcy5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KQEAgLTYyMiw3ICs2MjMsMTIgQEAKIH0KIAogCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzaHRfZHJpdmVyc1tdID0geworLyoKKyAqIHNodF9kcml2ZXJzIHNpbXVsdGFuZW91c2x5IHJlZmVycyB0byBfX2RldmluaXQgYW5kIF9fZGV2ZXhpdCBmdW5jdGlvbgorICogd2hpY2ggY2F1c2VzIHNwdXJpb3VzIHNlY3Rpb24gbWlzbWF0Y2ggd2FybmluZy4gU28gdXNlIF9fcmVmZGF0YSB0bworICogZ2V0IHJpZCBmcm9tIHRoaXMuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIF9fcmVmZGF0YSBzaHRfZHJpdmVyc1tdID0gewogCXsKIAkJLmRyaXZlciA9IHsKIAkJCS5uYW1lID0gInNodDEwIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9LY29uZmlnIGIvZHJpdmVycy9pMmMvYnVzc2VzL0tjb25maWcKaW5kZXggNmJlZGQyZi4uNzM3MzM1ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL0tjb25maWcKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL0tjb25maWcKQEAgLTQ3Nyw4ICs0NzcsOCBAQAogCSAgd2lsbCBiZSBjYWxsZWQgaTJjLXBueC4KIAogY29uZmlnIEkyQ19QWEEKLQl0cmlzdGF0ZSAiSW50ZWwgUFhBMlhYIEkyQyBhZGFwdGVyIChFWFBFUklNRU5UQUwpIgotCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMICYmIEFSQ0hfUFhBCisJdHJpc3RhdGUgIkludGVsIFBYQTJYWCBJMkMgYWRhcHRlciIKKwlkZXBlbmRzIG9uIEFSQ0hfUFhBIHx8IEFSQ0hfTU1QCiAJaGVscAogCSAgSWYgeW91IGhhdmUgZGV2aWNlcyBpbiB0aGUgUFhBIEkyQyBidXMsIHNheSB5ZXMgdG8gdGhpcyBvcHRpb24uCiAJICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gIElmIHNvLCB0aGUgbW9kdWxlCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWFtZDc1Ni5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1hbWQ3NTYuYwppbmRleCBmN2Q2ZmU5Li44ZjBiOTBlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWFtZDc1Ni5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtYW1kNzU2LmMKQEAgLTM2NCw3ICszNjQsNyBAQAogCWVycm9yID0gYWNwaV9jaGVja19yZWdpb24oYW1kNzU2X2lvcG9ydCwgU01CX0lPU0laRSwKIAkJCQkgIGFtZDc1Nl9kcml2ZXIubmFtZSk7CiAJaWYgKGVycm9yKQotCQlyZXR1cm4gZXJyb3I7CisJCXJldHVybiAtRU5PREVWOwogCiAJaWYgKCFyZXF1ZXN0X3JlZ2lvbihhbWQ3NTZfaW9wb3J0LCBTTUJfSU9TSVpFLCBhbWQ3NTZfZHJpdmVyLm5hbWUpKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgIlNNQiByZWdpb24gMHgleCBhbHJlYWR5IGluIHVzZSFcbiIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWFtZDgxMTEuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtYW1kODExMS5jCmluZGV4IGE3YzU5OTAuLjViNGFkODYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtYW1kODExMS5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtYW1kODExMS5jCkBAIC0zNzYsOCArMzc2LDEwIEBACiAJc21idXMtPnNpemUgPSBwY2lfcmVzb3VyY2VfbGVuKGRldiwgMCk7CiAKIAllcnJvciA9IGFjcGlfY2hlY2tfcmVzb3VyY2VfY29uZmxpY3QoJmRldi0+cmVzb3VyY2VbMF0pOwotCWlmIChlcnJvcikKKwlpZiAoZXJyb3IpIHsKKwkJZXJyb3IgPSAtRU5PREVWOwogCQlnb3RvIG91dF9rZnJlZTsKKwl9CiAKIAlpZiAoIXJlcXVlc3RfcmVnaW9uKHNtYnVzLT5iYXNlLCBzbWJ1cy0+c2l6ZSwgYW1kODExMV9kcml2ZXIubmFtZSkpIHsKIAkJZXJyb3IgPSAtRUJVU1k7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWk4MDEuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaTgwMS5jCmluZGV4IDlkMmM1YWQuLjU1ZWRjZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaTgwMS5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaTgwMS5jCkBAIC03MzIsOCArNzMyLDEwIEBACiAJfQogCiAJZXJyID0gYWNwaV9jaGVja19yZXNvdXJjZV9jb25mbGljdCgmZGV2LT5yZXNvdXJjZVtTTUJCQVJdKTsKLQlpZiAoZXJyKQorCWlmIChlcnIpIHsKKwkJZXJyID0gLUVOT0RFVjsKIAkJZ290byBleGl0OworCX0KIAogCWVyciA9IHBjaV9yZXF1ZXN0X3JlZ2lvbihkZXYsIFNNQkJBUiwgaTgwMV9kcml2ZXIubmFtZSk7CiAJaWYgKGVycikgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pc2NoLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWlzY2guYwppbmRleCA5ZjZiOGUwLi5kYmE2ZWIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWlzY2guYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWlzY2guYwpAQCAtMjgxLDcgKzI4MSw3IEBACiAJCXJldHVybiAtRU5PREVWOwogCX0KIAlpZiAoYWNwaV9jaGVja19yZWdpb24oc2NoX3NtYmEsIFNNQklPU0laRSwgc2NoX2RyaXZlci5uYW1lKSkKLQkJcmV0dXJuIC1FQlVTWTsKKwkJcmV0dXJuIC1FTk9ERVY7CiAJaWYgKCFyZXF1ZXN0X3JlZ2lvbihzY2hfc21iYSwgU01CSU9TSVpFLCBzY2hfZHJpdmVyLm5hbWUpKSB7CiAJCWRldl9lcnIoJmRldi0+ZGV2LCAiU01CdXMgcmVnaW9uIDB4JXggYWxyZWFkeSBpbiB1c2UhXG4iLAogCQkJc2NoX3NtYmEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1waWl4NC5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1waWl4NC5jCmluZGV4IGE3ODJjN2EuLmQyNmE5NzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcGlpeDQuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXBpaXg0LmMKQEAgLTE2OSw3ICsxNjksNyBAQAogCX0KIAogCWlmIChhY3BpX2NoZWNrX3JlZ2lvbihwaWl4NF9zbWJhLCBTTUJJT1NJWkUsIHBpaXg0X2RyaXZlci5uYW1lKSkKLQkJcmV0dXJuIC1FQlVTWTsKKwkJcmV0dXJuIC1FTk9ERVY7CiAKIAlpZiAoIXJlcXVlc3RfcmVnaW9uKHBpaXg0X3NtYmEsIFNNQklPU0laRSwgcGlpeDRfZHJpdmVyLm5hbWUpKSB7CiAJCWRldl9lcnIoJlBJSVg0X2Rldi0+ZGV2LCAiU01CdXMgcmVnaW9uIDB4JXggYWxyZWFkeSBpbiB1c2UhXG4iLApAQCAtMjYwLDcgKzI2MCw3IEBACiAKIAlwaWl4NF9zbWJhID0gKChzbWJhX2VuX2hpIDw8IDgpIHwgc21iYV9lbl9sbykgJiAweGZmZTA7CiAJaWYgKGFjcGlfY2hlY2tfcmVnaW9uKHBpaXg0X3NtYmEsIFNNQklPU0laRSwgcGlpeDRfZHJpdmVyLm5hbWUpKQotCQlyZXR1cm4gLUVCVVNZOworCQlyZXR1cm4gLUVOT0RFVjsKIAogCWlmICghcmVxdWVzdF9yZWdpb24ocGlpeDRfc21iYSwgU01CSU9TSVpFLCBwaWl4NF9kcml2ZXIubmFtZSkpIHsKIAkJZGV2X2VycigmUElJWDRfZGV2LT5kZXYsICJTTUJ1cyByZWdpb24gMHgleCBhbHJlYWR5IGluIHVzZSFcbiIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXNjbWkuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtc2NtaS5jCmluZGV4IDI3NmEwNDYuLmI0YTU1ZDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtc2NtaS5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtc2NtaS5jCkBAIC0zNjksOSArMzY5LDggQEAKIAkJZ290byBlcnI7CiAKIAlzbnByaW50ZihzbWJ1c19jbWktPmFkYXB0ZXIubmFtZSwgc2l6ZW9mKHNtYnVzX2NtaS0+YWRhcHRlci5uYW1lKSwKLQkJIlNNQnVzIENNSSBhZGFwdGVyICVzICglcykiLAotCQlhY3BpX2RldmljZV9uYW1lKGRldmljZSksCi0JCWFjcGlfZGV2aWNlX3VpZChkZXZpY2UpKTsKKwkJIlNNQnVzIENNSSBhZGFwdGVyICVzIiwKKwkJYWNwaV9kZXZpY2VfbmFtZShkZXZpY2UpKTsKIAlzbWJ1c19jbWktPmFkYXB0ZXIub3duZXIgPSBUSElTX01PRFVMRTsKIAlzbWJ1c19jbWktPmFkYXB0ZXIuYWxnbyA9ICZhY3BpX3NtYnVzX2NtaV9hbGdvcml0aG07CiAJc21idXNfY21pLT5hZGFwdGVyLmFsZ29fZGF0YSA9IHNtYnVzX2NtaTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtc2lzOTZ4LmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXNpczk2eC5jCmluZGV4IDgyOTU4ODUuLjE2NDk5NjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtc2lzOTZ4LmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1zaXM5NnguYwpAQCAtMjgwLDcgKzI4MCw3IEBACiAKIAlyZXR2YWwgPSBhY3BpX2NoZWNrX3Jlc291cmNlX2NvbmZsaWN0KCZkZXYtPnJlc291cmNlW1NJUzk2eF9CQVJdKTsKIAlpZiAocmV0dmFsKQotCQlyZXR1cm4gcmV0dmFsOworCQlyZXR1cm4gLUVOT0RFVjsKIAogCS8qIEV2ZXJ5dGhpbmcgaXMgaGFwcHksIGxldCdzIGdyYWIgdGhlIG1lbW9yeSBhbmQgc2V0IHRoaW5ncyB1cC4gKi8KIAlpZiAoIXJlcXVlc3RfcmVnaW9uKHNpczk2eF9zbWJ1c19iYXNlLCBTTUJfSU9TSVpFLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy12aWFwcm8uYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtdmlhcHJvLmMKaW5kZXggNTRkODEwYS4uZTRiMTU0MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy12aWFwcm8uYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXZpYXByby5jCkBAIC0zNjUsNyArMzY1LDcgQEAKIGZvdW5kOgogCWVycm9yID0gYWNwaV9jaGVja19yZWdpb24odnQ1OTZfc21iYSwgOCwgdnQ1OTZfZHJpdmVyLm5hbWUpOwogCWlmIChlcnJvcikKLQkJcmV0dXJuIGVycm9yOworCQlyZXR1cm4gLUVOT0RFVjsKIAogCWlmICghcmVxdWVzdF9yZWdpb24odnQ1OTZfc21iYSwgOCwgdnQ1OTZfZHJpdmVyLm5hbWUpKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgIlNNQnVzIHJlZ2lvbiAweCV4IGFscmVhZHkgaW4gdXNlIVxuIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2F0aWl4cC5jIGIvZHJpdmVycy9pZGUvYXRpaXhwLmMKaW5kZXggNjM5NmMzYS4uODM3MzIyYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvYXRpaXhwLmMKKysrIGIvZHJpdmVycy9pZGUvYXRpaXhwLmMKQEAgLTE3Nyw3ICsxNzcsNyBAQAogCXsgUENJX1ZERVZJQ0UoQVRJLCBQQ0lfREVWSUNFX0lEX0FUSV9JWFA0MDBfSURFKSwgMCB9LAogCXsgUENJX1ZERVZJQ0UoQVRJLCBQQ0lfREVWSUNFX0lEX0FUSV9JWFA2MDBfSURFKSwgMSB9LAogCXsgUENJX1ZERVZJQ0UoQVRJLCBQQ0lfREVWSUNFX0lEX0FUSV9JWFA3MDBfSURFKSwgMCB9LAotCXsgUENJX1ZERVZJQ0UoQU1ELCBQQ0lfREVWSUNFX0lEX0FNRF9TQjkwMF9JREUpLCAwIH0sCisJeyBQQ0lfVkRFVklDRShBTUQsIFBDSV9ERVZJQ0VfSURfQU1EX0hVRFNPTjJfSURFKSwgMCB9LAogCXsgMCwgfSwKIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgYXRpaXhwX3BjaV90YmwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvY21kNjR4LmMgYi9kcml2ZXJzL2lkZS9jbWQ2NHguYwppbmRleCA2ODBlNTk3Li5jYTBjNDZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9jbWQ2NHguYworKysgYi9kcml2ZXJzL2lkZS9jbWQ2NHguYwpAQCAtMzc5LDcgKzM3OSw4IEBACiAJCS5lbmFibGViaXRzCT0ge3sweDAwLDB4MDAsMHgwMH0sIHsweDUxLDB4MDgsMHgwOH19LAogCQkucG9ydF9vcHMJPSAmY21kNjR4X3BvcnRfb3BzLAogCQkuaG9zdF9mbGFncwk9IElERV9IRkxBR19DTEVBUl9TSU1QTEVYIHwKLQkJCQkgIElERV9IRkxBR19BQlVTRV9QUkVGRVRDSCwKKwkJCQkgIElERV9IRkxBR19BQlVTRV9QUkVGRVRDSCB8CisJCQkJICBJREVfSEZMQUdfU0VSSUFMSVpFLAogCQkucGlvX21hc2sJPSBBVEFfUElPNSwKIAkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrCT0gMHgwMCwgLyogbm8gdWRtYSAqLwpAQCAtMzg5LDcgKzM5MCw4IEBACiAJCS5pbml0X2NoaXBzZXQJPSBpbml0X2NoaXBzZXRfY21kNjR4LAogCQkuZW5hYmxlYml0cwk9IHt7MHg1MSwweDA0LDB4MDR9LCB7MHg1MSwweDA4LDB4MDh9fSwKIAkJLnBvcnRfb3BzCT0gJmNtZDY0OF9wb3J0X29wcywKLQkJLmhvc3RfZmxhZ3MJPSBJREVfSEZMQUdfQUJVU0VfUFJFRkVUQ0gsCisJCS5ob3N0X2ZsYWdzCT0gSURFX0hGTEFHX0FCVVNFX1BSRUZFVENIIHwKKwkJCQkgIElERV9IRkxBR19TRVJJQUxJWkUsCiAJCS5waW9fbWFzawk9IEFUQV9QSU81LAogCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sJPSBBVEFfVURNQTIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtcHJvYy5jIGIvZHJpdmVycy9pZGUvaWRlLXByb2MuYwppbmRleCAyOGQwOWE1Li4wMTdjMDk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtcHJvYy5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1wcm9jLmMKQEAgLTI3MywxNCArMjczLDggQEAKIAogc3RhdGljIHZvaWQgcHJvY19pZGVfc2V0dGluZ3Nfd2Fybih2b2lkKQogewotCXN0YXRpYyBpbnQgd2FybmVkOwotCi0JaWYgKHdhcm5lZCkKLQkJcmV0dXJuOwotCi0JcHJpbnRrKEtFUk5fV0FSTklORyAiV2FybmluZzogL3Byb2MvaWRlL2hkPy9zZXR0aW5ncyBpbnRlcmZhY2UgaXMgIgorCXByaW50a19vbmNlKEtFUk5fV0FSTklORyAiV2FybmluZzogL3Byb2MvaWRlL2hkPy9zZXR0aW5ncyBpbnRlcmZhY2UgaXMgIgogCQkJICAgICJvYnNvbGV0ZSwgYW5kIHdpbGwgYmUgcmVtb3ZlZCBzb29uIVxuIik7Ci0Jd2FybmVkID0gMTsKIH0KIAogc3RhdGljIGludCBpZGVfc2V0dGluZ3NfcHJvY19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3NpczU1MTMuYyBiL2RyaXZlcnMvaWRlL3NpczU1MTMuYwppbmRleCBhZmNhMjJiLi4zYjg4ZWJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9zaXM1NTEzLmMKKysrIGIvZHJpdmVycy9pZGUvc2lzNTUxMy5jCkBAIC0yLDcgKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAJQW5kcmUgSGVkcmljayA8YW5kcmVAbGludXgtaWRlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwMgkJTGlvbmVsIEJvdXRvbiA8TGlvbmVsLkJvdXRvbkBpbmV0Ni5mcj4sIE1haW50YWluZXIKICAqIENvcHlyaWdodCAoQykgMjAwMwkJVm9qdGVjaCBQYXZsaWsgPHZvanRlY2hAc3VzZS5jej4KLSAqIENvcHlyaWdodCAoQykgMjAwNwkJQmFydGxvbWllaiBab2xuaWVya2lld2ljegorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDkJQmFydGxvbWllaiBab2xuaWVya2lld2ljegogICoKICAqIE1heSBiZSBjb3BpZWQgb3IgbW9kaWZpZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogICoKQEAgLTI4MSwxMSArMjgxLDEzIEBACiAKIAlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIDB4NGIsICZyZWc0YmgpOwogCi0JaWYgKGRyaXZlLT5tZWRpYSA9PSBpZGVfZGlzaykKLQkJcndfcHJlZmV0Y2ggPSAweDExIDw8IGRyaXZlLT5kbjsKKwlyd19wcmVmZXRjaCA9IHJlZzRiaCAmIH4oMHgxMSA8PCBkcml2ZS0+ZG4pOwogCi0JaWYgKChyZWc0YmggJiAoMHgxMSA8PCBkcml2ZS0+ZG4pKSAhPSByd19wcmVmZXRjaCkKLQkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgMHg0YiwgcmVnNGJofHJ3X3ByZWZldGNoKTsKKwlpZiAoZHJpdmUtPm1lZGlhID09IGlkZV9kaXNrKQorCQlyd19wcmVmZXRjaCB8PSAweDExIDw8IGRyaXZlLT5kbjsKKworCWlmIChyZWc0YmggIT0gcndfcHJlZmV0Y2gpCisJCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIDB4NGIsIHJ3X3ByZWZldGNoKTsKIH0KIAogc3RhdGljIHZvaWQgc2lzX3NldF9waW9fbW9kZShpZGVfZHJpdmVfdCAqZHJpdmUsIGNvbnN0IHU4IHBpbykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWVlZTEzOTQvZG1hLmMgYi9kcml2ZXJzL2llZWUxMzk0L2RtYS5jCmluZGV4IDFhYmE4YzEuLjhlN2UzMzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWVlZTEzOTQvZG1hLmMKKysrIGIvZHJpdmVycy9pZWVlMTM5NC9kbWEuYwpAQCAtMjQ3LDcgKzI0Nyw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgZG1hX3JlZ2lvbl92bV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGRtYV9yZWdpb25fdm1fb3BzID0gewogCS5mYXVsdCA9IGRtYV9yZWdpb25fcGFnZWZhdWx0LAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZWVlMTM5NC9yYXcxMzk0LmMgYi9kcml2ZXJzL2llZWUxMzk0L3JhdzEzOTQuYwppbmRleCAwYmMzZDc4Li44YWE1NmFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2llZWUxMzk0L3JhdzEzOTQuYworKysgYi9kcml2ZXJzL2llZWUxMzk0L3JhdzEzOTQuYwpAQCAtMjksNiArMjksNyBAQAogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2llZWUxMzk0L3ZpZGVvMTM5NC5jIGIvZHJpdmVycy9pZWVlMTM5NC92aWRlbzEzOTQuYwppbmRleCBkMjg3YmE3Li45NDkwNjRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2llZWUxMzk0L3ZpZGVvMTM5NC5jCisrKyBiL2RyaXZlcnMvaWVlZTEzOTQvdmlkZW8xMzk0LmMKQEAgLTMwLDYgKzMwLDcgQEAKICAqLwogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9hZGRyLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9hZGRyLmMKaW5kZXggNWJlMWJkNC4uYmQwNzgwMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvYWRkci5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2FkZHIuYwpAQCAtMzkzLDcgKzM5Myw3IEBACiAKIAkJZm9yX2VhY2hfbmV0ZGV2KCZpbml0X25ldCwgZGV2KQogCQkJaWYgKGlwdjZfY2hrX2FkZHIoJmluaXRfbmV0LAotCQkJCQkgICYoKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikgYWRkciktPnNpbjZfYWRkciwKKwkJCQkJICAmKChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopIGRzdF9pbiktPnNpbjZfYWRkciwKIAkJCQkJICBkZXYsIDEpKQogCQkJCWJyZWFrOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9pd2NtLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9pd2NtLmMKaW5kZXggNTVkMDkzYS4uMGY4OTkwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvaXdjbS5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2l3Y20uYwpAQCAtNDAsNiArNDAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2lkci5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3JidHJlZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KICNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+CkBAIC0zNjIsNyArMzYzLDkgQEAKIAkJICogSW4gZWl0aGVyIGNhc2UsIG11c3QgdGVsbCB0aGUgcHJvdmlkZXIgdG8gcmVqZWN0LgogCQkgKi8KIAkJY21faWRfcHJpdi0+c3RhdGUgPSBJV19DTV9TVEFURV9ERVNUUk9ZSU5HOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbV9pZF9wcml2LT5sb2NrLCBmbGFncyk7CiAJCWNtX2lkLT5kZXZpY2UtPml3Y20tPnJlamVjdChjbV9pZCwgTlVMTCwgMCk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZjbV9pZF9wcml2LT5sb2NrLCBmbGFncyk7CiAJCWJyZWFrOwogCWNhc2UgSVdfQ01fU1RBVEVfQ09OTl9TRU5UOgogCWNhc2UgSVdfQ01fU1RBVEVfREVTVFJPWUlORzoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL21hZF9ybXBwLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9tYWRfcm1wcC5jCmluZGV4IDU3YTNjNmYuLjRlMGYyODIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL21hZF9ybXBwLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbWFkX3JtcHAuYwpAQCAtMzcsNyArMzcsOCBAQAogZW51bSBybXBwX3N0YXRlIHsKIAlSTVBQX1NUQVRFX0FDVElWRSwKIAlSTVBQX1NUQVRFX1RJTUVPVVQsCi0JUk1QUF9TVEFURV9DT01QTEVURQorCVJNUFBfU1RBVEVfQ09NUExFVEUsCisJUk1QUF9TVEFURV9DQU5DRUxJTkcKIH07CiAKIHN0cnVjdCBtYWRfcm1wcF9yZWN2IHsKQEAgLTg3LDE4ICs4OCwyMiBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmFnZW50LT5sb2NrLCBmbGFncyk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShybXBwX3JlY3YsICZhZ2VudC0+cm1wcF9saXN0LCBsaXN0KSB7CisJCWlmIChybXBwX3JlY3YtPnN0YXRlICE9IFJNUFBfU1RBVEVfQ09NUExFVEUpCisJCQlpYl9mcmVlX3JlY3ZfbWFkKHJtcHBfcmVjdi0+cm1wcF93Yyk7CisJCXJtcHBfcmVjdi0+c3RhdGUgPSBSTVBQX1NUQVRFX0NBTkNFTElORzsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWdlbnQtPmxvY2ssIGZsYWdzKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkocm1wcF9yZWN2LCAmYWdlbnQtPnJtcHBfbGlzdCwgbGlzdCkgewogCQljYW5jZWxfZGVsYXllZF93b3JrKCZybXBwX3JlY3YtPnRpbWVvdXRfd29yayk7CiAJCWNhbmNlbF9kZWxheWVkX3dvcmsoJnJtcHBfcmVjdi0+Y2xlYW51cF93b3JrKTsKIAl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWdlbnQtPmxvY2ssIGZsYWdzKTsKIAogCWZsdXNoX3dvcmtxdWV1ZShhZ2VudC0+cXBfaW5mby0+cG9ydF9wcml2LT53cSk7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocm1wcF9yZWN2LCB0ZW1wX3JtcHBfcmVjdiwKIAkJCQkgJmFnZW50LT5ybXBwX2xpc3QsIGxpc3QpIHsKIAkJbGlzdF9kZWwoJnJtcHBfcmVjdi0+bGlzdCk7Ci0JCWlmIChybXBwX3JlY3YtPnN0YXRlICE9IFJNUFBfU1RBVEVfQ09NUExFVEUpCi0JCQlpYl9mcmVlX3JlY3ZfbWFkKHJtcHBfcmVjdi0+cm1wcF93Yyk7CiAJCWRlc3Ryb3lfcm1wcF9yZWN2KHJtcHBfcmVjdik7CiAJfQogfQpAQCAtMjYwLDYgKzI2NSwxMCBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcm1wcF9yZWN2LT5hZ2VudC0+bG9jaywgZmxhZ3MpOworCWlmIChybXBwX3JlY3YtPnN0YXRlID09IFJNUFBfU1RBVEVfQ0FOQ0VMSU5HKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJtcHBfcmVjdi0+YWdlbnQtPmxvY2ssIGZsYWdzKTsKKwkJcmV0dXJuOworCX0KIAlsaXN0X2RlbCgmcm1wcF9yZWN2LT5saXN0KTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZybXBwX3JlY3YtPmFnZW50LT5sb2NrLCBmbGFncyk7CiAJZGVzdHJveV9ybXBwX3JlY3Yocm1wcF9yZWN2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VjbS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdWNtLmMKaW5kZXggNTFiZDk2Ni4uZjUwNGM5YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdWNtLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdWNtLmMKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbW91bnQuaD4KICNpbmNsdWRlIDxsaW51eC9jZGV2Lmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91Y21hLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91Y21hLmMKaW5kZXggNDM0NmEyNC4uYmI5NmQzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdWNtYS5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VjbWEuYwpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2lkci5oPgogI2luY2x1ZGUgPGxpbnV4L2luLmg+CiAjaW5jbHVkZSA8bGludXgvaW42Lmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91c2VyX21hZC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdXNlcl9tYWQuYwppbmRleCA4YzQ2ZjIyLi43ZGUwMjk2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91c2VyX21hZC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VzZXJfbWFkLmMKQEAgLTQ0LDYgKzQ0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L2tyZWYuaD4KICNpbmNsdWRlIDxsaW51eC9jb21wYXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NlbWFwaG9yZS5oPgogCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3V2ZXJic19tYWluLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91dmVyYnNfbWFpbi5jCmluZGV4IGQzZmZmOWUuLmFlYzBmYmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3V2ZXJic19tYWluLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdXZlcmJzX21haW4uYwpAQCAtNDAsNiArNDAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvcG9sbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L21vdW50Lmg+CiAjaW5jbHVkZSA8bGludXgvY2Rldi5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2l3Y2hfcHJvdmlkZXIuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9pd2NoX3Byb3ZpZGVyLmMKaW5kZXggNjg5NTUyMzc3Li5lZDcxNzU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvaXdjaF9wcm92aWRlci5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9pd2NoX3Byb3ZpZGVyLmMKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+CiAjaW5jbHVkZSA8bGludXgvcnRuZXRsaW5rLmg+CkBAIC0xMTk5LDExICsxMjAwLDE0IEBACiAJCXByb3BzLT5zdGF0ZSA9IElCX1BPUlRfRE9XTjsKIAllbHNlIHsKIAkJaW5ldGRldiA9IGluX2Rldl9nZXQobmV0ZGV2KTsKLQkJaWYgKGluZXRkZXYtPmlmYV9saXN0KQotCQkJcHJvcHMtPnN0YXRlID0gSUJfUE9SVF9BQ1RJVkU7Ci0JCWVsc2UKKwkJaWYgKGluZXRkZXYpIHsKKwkJCWlmIChpbmV0ZGV2LT5pZmFfbGlzdCkKKwkJCQlwcm9wcy0+c3RhdGUgPSBJQl9QT1JUX0FDVElWRTsKKwkJCWVsc2UKKwkJCQlwcm9wcy0+c3RhdGUgPSBJQl9QT1JUX0lOSVQ7CisJCQlpbl9kZXZfcHV0KGluZXRkZXYpOworCQl9IGVsc2UKIAkJCXByb3BzLT5zdGF0ZSA9IElCX1BPUlRfSU5JVDsKLQkJaW5fZGV2X3B1dChpbmV0ZGV2KTsKIAl9CiAKIAlwcm9wcy0+cG9ydF9jYXBfZmxhZ3MgPQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2l3Y2hfcXAuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9pd2NoX3FwLmMKaW5kZXggNmU4NjUzNC4uMWNlY2Y5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2l3Y2hfcXAuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvaXdjaF9xcC5jCkBAIC0yOSw2ICsyOSw3IEBACiAgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCiAgKiBTT0ZUV0FSRS4KICAqLworI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSAiaXdjaF9wcm92aWRlci5oIgogI2luY2x1ZGUgIml3Y2guaCIKICNpbmNsdWRlICJpd2NoX2NtLmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9laGNhX3V2ZXJicy5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvZWhjYV91dmVyYnMuYwppbmRleCAzY2I2ODhkLi5mMTU2NWNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9laGNhX3V2ZXJicy5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2VoY2FfdXZlcmJzLmMKQEAgLTk1LDcgKzk1LDcgQEAKIAkJICAgICB2bWEtPnZtX3N0YXJ0LCB2bWEtPnZtX2VuZCwgKmNvdW50KTsKIH0KIAotc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCB2bV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHZtX29wcyA9IHsKIAkub3BlbiA9CWVoY2FfbW1fb3BlbiwKIAkuY2xvc2UgPSBlaGNhX21tX2Nsb3NlLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9kcml2ZXIuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9kcml2ZXIuYwppbmRleCAwNGU4OGI2Li4wMTNkMTM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfZHJpdmVyLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2RyaXZlci5jCkBAIC0zMSw2ICszMSw3IEBACiAgKiBTT0ZUV0FSRS4KICAqLwogCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2lkci5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2ZpbGVfb3BzLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfZmlsZV9vcHMuYwppbmRleCAzOGEyODcwLi40MGRiZTU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfZmlsZV9vcHMuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfZmlsZV9vcHMuYwpAQCAtMTE1MSw3ICsxMTUxLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBpcGF0aF9maWxlX3ZtX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgaXBhdGhfZmlsZV92bV9vcHMgPSB7CiAJLmZhdWx0ID0gaXBhdGhfZmlsZV92bWFfZmF1bHQsCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfaWJhNzIyMC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2liYTcyMjAuYwppbmRleCBiMmE5ZDRjLi5hODA1NDAyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfaWJhNzIyMC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9pYmE3MjIwLmMKQEAgLTM3LDYgKzM3LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPHJkbWEvaWJfdmVyYnMuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9pbnRyLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfaW50ci5jCmluZGV4IDZjMjFiNGIuLmMwYTAzYWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9pbnRyLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2ludHIuYwpAQCAtMzMsNiArMzMsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogCiAjaW5jbHVkZSAiaXBhdGhfa2VybmVsLmgiCiAjaW5jbHVkZSAiaXBhdGhfdmVyYnMuaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9tbWFwLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfbW1hcC5jCmluZGV4IGZhODMwZTIuLmIyODg2NWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9tbWFwLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX21tYXAuYwpAQCAtNzQsNyArNzQsNyBAQAogCWtyZWZfcHV0KCZpcC0+cmVmLCBpcGF0aF9yZWxlYXNlX21tYXBfaW5mbyk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgaXBhdGhfdm1fb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBpcGF0aF92bV9vcHMgPSB7CiAJLm9wZW4gPSAgICAgaXBhdGhfdm1hX29wZW4sCiAJLmNsb3NlID0gICAgaXBhdGhfdm1hX2Nsb3NlLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9xcC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3FwLmMKaW5kZXggM2E1YTg5Yi4uY2IyZDNlZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3FwLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3FwLmMKQEAgLTMyLDYgKzMyLDcgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CiAKICNpbmNsdWRlICJpcGF0aF92ZXJicy5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3J1Yy5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3J1Yy5jCmluZGV4IDIyOTY4MzIuLjFmOTViYmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9ydWMuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfcnVjLmMKQEAgLTMxLDYgKzMxLDcgQEAKICAqIFNPRlRXQVJFLgogICovCiAKKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAKICNpbmNsdWRlICJpcGF0aF92ZXJicy5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3VkLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdWQuYwppbmRleCA2MDc2Y2I2Li43NDIwNzE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdWQuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdWQuYwpAQCAtMzEsNiArMzEsNyBAQAogICogU09GVFdBUkUuCiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8cmRtYS9pYl9zbWkuaD4KIAogI2luY2x1ZGUgImlwYXRoX3ZlcmJzLmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdXNlcl9wYWdlcy5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3VzZXJfcGFnZXMuYwppbmRleCA4NTU5MTFlLi44Mjg3OGUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdXNlcl9wYWdlcy5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF91c2VyX3BhZ2VzLmMKQEAgLTMzLDYgKzMzLDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KIAogI2luY2x1ZGUgImlwYXRoX2tlcm5lbC5oIgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdXNlcl9zZG1hLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdXNlcl9zZG1hLmMKaW5kZXggN2JmZjRiOS4uYmU3OGY2NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3VzZXJfc2RtYS5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF91c2VyX3NkbWEuYwpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZG1hcG9vbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdmVyYnNfbWNhc3QuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF92ZXJic19tY2FzdC5jCmluZGV4IGQ3M2UzMjIuLjY5MjNlMWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF92ZXJic19tY2FzdC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF92ZXJic19tY2FzdC5jCkBAIC0zMiw2ICszMiw3IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L3JjdWxpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogCiAjaW5jbHVkZSAiaXBhdGhfdmVyYnMuaCIKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX2NhdGFzLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfY2F0YXMuYwppbmRleCAwNTZiMmE0Li4wYWEwMTEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfY2F0YXMuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfY2F0YXMuYwpAQCAtNjgsMTEgKzY4LDE2IEBACiAJc3Bpbl91bmxvY2tfaXJxKCZjYXRhc19sb2NrKTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShkZXYsIHRtcGRldiwgJnRsaXN0LCBjYXRhc19lcnIubGlzdCkgeworCQlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGRldi0+cGRldjsKIAkJcmV0ID0gX19tdGhjYV9yZXN0YXJ0X29uZShkZXYtPnBkZXYpOworCQkvKiAnZGV2JyBub3cgaXMgbm90IHZhbGlkICovCiAJCWlmIChyZXQpCi0JCQltdGhjYV9lcnIoZGV2LCAiUmVzZXQgZmFpbGVkICglZClcbiIsIHJldCk7Ci0JCWVsc2UKLQkJCW10aGNhX2RiZyhkZXYsICJSZXNldCBzdWNjZWVkZWRcbiIpOworCQkJcHJpbnRrKEtFUk5fRVJSICJtdGhjYSAlczogUmVzZXQgZmFpbGVkICglZClcbiIsCisJCQkgICAgICAgcGNpX25hbWUocGRldiksIHJldCk7CisJCWVsc2UgeworCQkJc3RydWN0IG10aGNhX2RldiAqZCA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwkJCW10aGNhX2RiZyhkLCAiUmVzZXQgc3VjY2VlZGVkXG4iKTsKKwkJfQogCX0KIAogCW11dGV4X3VubG9jaygmbXRoY2FfZGV2aWNlX211dGV4KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX25pYy5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfbmljLmMKaW5kZXggNTM4ZTQwOS4uZTU5M2FmMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfbmljLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfbmljLmMKQEAgLTE1NjYsNyArMTU2Niw2IEBACiAJLm5kb19zZXRfbWFjX2FkZHJlc3MJPSBuZXNfbmV0ZGV2X3NldF9tYWNfYWRkcmVzcywKIAkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IG5lc19uZXRkZXZfc2V0X211bHRpY2FzdF9saXN0LAogCS5uZG9fY2hhbmdlX210dQkJPSBuZXNfbmV0ZGV2X2NoYW5nZV9tdHUsCi0JLm5kb19zZXRfbWFjX2FkZHJlc3MgCT0gZXRoX21hY19hZGRyLAogCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAogCS5uZG9fdmxhbl9yeF9yZWdpc3RlciAJPSBuZXNfbmV0ZGV2X3ZsYW5fcnhfcmVnaXN0ZXIsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tdWx0aWNhc3QuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbXVsdGljYXN0LmMKaW5kZXggMjU4NzRmYy4uODc2M2MxZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tdWx0aWNhc3QuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX211bHRpY2FzdC5jCkBAIC0zNjIsMTIgKzM2MiwxOSBAQAogewogCXN0cnVjdCBpcG9pYl9kZXZfcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaXBvaWJfZGV2X3ByaXYsCiAJCQkJCQkgICBjYXJyaWVyX29uX3Rhc2spOworCXN0cnVjdCBpYl9wb3J0X2F0dHIgYXR0cjsKIAogCS8qCiAJICogVGFrZSBydG5sX2xvY2sgdG8gYXZvaWQgcmFjaW5nIHdpdGggaXBvaWJfc3RvcCgpIGFuZAogCSAqIHR1cm5pbmcgdGhlIGNhcnJpZXIgYmFjayBvbiB3aGlsZSBhIGRldmljZSBpcyBiZWluZwogCSAqIHJlbW92ZWQuCiAJICovCisJaWYgKGliX3F1ZXJ5X3BvcnQocHJpdi0+Y2EsIHByaXYtPnBvcnQsICZhdHRyKSB8fAorCSAgICBhdHRyLnN0YXRlICE9IElCX1BPUlRfQUNUSVZFKSB7CisJCWlwb2liX2RiZyhwcml2LCAiS2VlcGluZyBjYXJyaWVyIG9mZiB1bnRpbCBJQiBwb3J0IGlzIGFjdGl2ZVxuIik7CisJCXJldHVybjsKKwl9CisKIAlydG5sX2xvY2soKTsKIAluZXRpZl9jYXJyaWVyX29uKHByaXYtPmRldik7CiAJcnRubF91bmxvY2soKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXNlci9pc2NzaV9pc2VyLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lzZXIvaXNjc2lfaXNlci5jCmluZGV4IDBiYTZlYzguLmFkZDkxODggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXNlci9pc2NzaV9pc2VyLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pc2VyL2lzY3NpX2lzZXIuYwpAQCAtNDI2LDcgKzQyNiw3IEBACiAJICogYmVjYXVzZSB3ZSBwcmVhbGxvY2F0ZSBzbyBtYW55IHJlc291cmNlcwogCSAqLwogCWNsc19zZXNzaW9uID0gaXNjc2lfc2Vzc2lvbl9zZXR1cCgmaXNjc2lfaXNlcl90cmFuc3BvcnQsIHNob3N0LAotCQkJCQkgIElTQ1NJX0RFRl9YTUlUX0NNRFNfTUFYLAorCQkJCQkgIElTQ1NJX0RFRl9YTUlUX0NNRFNfTUFYLCAwLAogCQkJCQkgIHNpemVvZihzdHJ1Y3QgaXNjc2lfaXNlcl90YXNrKSwKIAkJCQkJICBpbml0aWFsX2NtZHNuLCAwKTsKIAlpZiAoIWNsc19zZXNzaW9uKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9ldmRldi5jIGIvZHJpdmVycy9pbnB1dC9ldmRldi5jCmluZGV4IDExNDgxNDAuLmRlZTY3MDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvZXZkZXYuYworKysgYi9kcml2ZXJzL2lucHV0L2V2ZGV2LmMKQEAgLTEzLDYgKzEzLDcgQEAKICNkZWZpbmUgRVZERVZfQlVGRkVSX1NJWkUJNjQKIAogI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2lucHV0LmMgYi9kcml2ZXJzL2lucHV0L2lucHV0LmMKaW5kZXggZTgyOGFhYi4uY2M3NjNjOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9pbnB1dC5jCisrKyBiL2RyaXZlcnMvaW5wdXQvaW5wdXQuYwpAQCAtMTcsNiArMTcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3JhbmRvbS5oPgogI2luY2x1ZGUgPGxpbnV4L21ham9yLmg+CiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CkBAIC03ODEsMTAgKzc4MiwyOSBAQAogCXJldHVybiAwOwogfQogCit1bmlvbiBpbnB1dF9zZXFfc3RhdGUgeworCXN0cnVjdCB7CisJCXVuc2lnbmVkIHNob3J0IHBvczsKKwkJYm9vbCBtdXRleF9hY3F1aXJlZDsKKwl9OworCXZvaWQgKnA7Cit9OworCiBzdGF0aWMgdm9pZCAqaW5wdXRfZGV2aWNlc19zZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCAqcG9zKQogewotCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmlucHV0X211dGV4KSkKLQkJcmV0dXJuIE5VTEw7CisJdW5pb24gaW5wdXRfc2VxX3N0YXRlICpzdGF0ZSA9ICh1bmlvbiBpbnB1dF9zZXFfc3RhdGUgKikmc2VxLT5wcml2YXRlOworCWludCBlcnJvcjsKKworCS8qIFdlIG5lZWQgdG8gZml0IGludG8gc2VxLT5wcml2YXRlIHBvaW50ZXIgKi8KKwlCVUlMRF9CVUdfT04oc2l6ZW9mKHVuaW9uIGlucHV0X3NlcV9zdGF0ZSkgIT0gc2l6ZW9mKHNlcS0+cHJpdmF0ZSkpOworCisJZXJyb3IgPSBtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmlucHV0X211dGV4KTsKKwlpZiAoZXJyb3IpIHsKKwkJc3RhdGUtPm11dGV4X2FjcXVpcmVkID0gZmFsc2U7CisJCXJldHVybiBFUlJfUFRSKGVycm9yKTsKKwl9CisKKwlzdGF0ZS0+bXV0ZXhfYWNxdWlyZWQgPSB0cnVlOwogCiAJcmV0dXJuIHNlcV9saXN0X3N0YXJ0KCZpbnB1dF9kZXZfbGlzdCwgKnBvcyk7CiB9CkBAIC03OTQsOSArODE0LDEyIEBACiAJcmV0dXJuIHNlcV9saXN0X25leHQodiwgJmlucHV0X2Rldl9saXN0LCBwb3MpOwogfQogCi1zdGF0aWMgdm9pZCBpbnB1dF9kZXZpY2VzX3NlcV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQorc3RhdGljIHZvaWQgaW5wdXRfc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCiB7Ci0JbXV0ZXhfdW5sb2NrKCZpbnB1dF9tdXRleCk7CisJdW5pb24gaW5wdXRfc2VxX3N0YXRlICpzdGF0ZSA9ICh1bmlvbiBpbnB1dF9zZXFfc3RhdGUgKikmc2VxLT5wcml2YXRlOworCisJaWYgKHN0YXRlLT5tdXRleF9hY3F1aXJlZCkKKwkJbXV0ZXhfdW5sb2NrKCZpbnB1dF9tdXRleCk7CiB9CiAKIHN0YXRpYyB2b2lkIGlucHV0X3NlcV9wcmludF9iaXRtYXAoc3RydWN0IHNlcV9maWxlICpzZXEsIGNvbnN0IGNoYXIgKm5hbWUsCkBAIC04NjAsNyArODgzLDcgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgaW5wdXRfZGV2aWNlc19zZXFfb3BzID0gewogCS5zdGFydAk9IGlucHV0X2RldmljZXNfc2VxX3N0YXJ0LAogCS5uZXh0CT0gaW5wdXRfZGV2aWNlc19zZXFfbmV4dCwKLQkuc3RvcAk9IGlucHV0X2RldmljZXNfc2VxX3N0b3AsCisJLnN0b3AJPSBpbnB1dF9zZXFfc3RvcCwKIAkuc2hvdwk9IGlucHV0X2RldmljZXNfc2VxX3Nob3csCiB9OwogCkBAIC04ODAsNDAgKzkwMyw0OSBAQAogCiBzdGF0aWMgdm9pZCAqaW5wdXRfaGFuZGxlcnNfc2VxX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgKnBvcykKIHsKLQlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZpbnB1dF9tdXRleCkpCi0JCXJldHVybiBOVUxMOworCXVuaW9uIGlucHV0X3NlcV9zdGF0ZSAqc3RhdGUgPSAodW5pb24gaW5wdXRfc2VxX3N0YXRlICopJnNlcS0+cHJpdmF0ZTsKKwlpbnQgZXJyb3I7CiAKLQlzZXEtPnByaXZhdGUgPSAodm9pZCAqKSh1bnNpZ25lZCBsb25nKSpwb3M7CisJLyogV2UgbmVlZCB0byBmaXQgaW50byBzZXEtPnByaXZhdGUgcG9pbnRlciAqLworCUJVSUxEX0JVR19PTihzaXplb2YodW5pb24gaW5wdXRfc2VxX3N0YXRlKSAhPSBzaXplb2Yoc2VxLT5wcml2YXRlKSk7CisKKwllcnJvciA9IG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmaW5wdXRfbXV0ZXgpOworCWlmIChlcnJvcikgeworCQlzdGF0ZS0+bXV0ZXhfYWNxdWlyZWQgPSBmYWxzZTsKKwkJcmV0dXJuIEVSUl9QVFIoZXJyb3IpOworCX0KKworCXN0YXRlLT5tdXRleF9hY3F1aXJlZCA9IHRydWU7CisJc3RhdGUtPnBvcyA9ICpwb3M7CisKIAlyZXR1cm4gc2VxX2xpc3Rfc3RhcnQoJmlucHV0X2hhbmRsZXJfbGlzdCwgKnBvcyk7CiB9CiAKIHN0YXRpYyB2b2lkICppbnB1dF9oYW5kbGVyc19zZXFfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdiwgbG9mZl90ICpwb3MpCiB7Ci0Jc2VxLT5wcml2YXRlID0gKHZvaWQgKikodW5zaWduZWQgbG9uZykoKnBvcyArIDEpOwotCXJldHVybiBzZXFfbGlzdF9uZXh0KHYsICZpbnB1dF9oYW5kbGVyX2xpc3QsIHBvcyk7Ci19CisJdW5pb24gaW5wdXRfc2VxX3N0YXRlICpzdGF0ZSA9ICh1bmlvbiBpbnB1dF9zZXFfc3RhdGUgKikmc2VxLT5wcml2YXRlOwogCi1zdGF0aWMgdm9pZCBpbnB1dF9oYW5kbGVyc19zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKLXsKLQltdXRleF91bmxvY2soJmlucHV0X211dGV4KTsKKwlzdGF0ZS0+cG9zID0gKnBvcyArIDE7CisJcmV0dXJuIHNlcV9saXN0X25leHQodiwgJmlucHV0X2hhbmRsZXJfbGlzdCwgcG9zKTsKIH0KIAogc3RhdGljIGludCBpbnB1dF9oYW5kbGVyc19zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKIHsKIAlzdHJ1Y3QgaW5wdXRfaGFuZGxlciAqaGFuZGxlciA9IGNvbnRhaW5lcl9vZih2LCBzdHJ1Y3QgaW5wdXRfaGFuZGxlciwgbm9kZSk7CisJdW5pb24gaW5wdXRfc2VxX3N0YXRlICpzdGF0ZSA9ICh1bmlvbiBpbnB1dF9zZXFfc3RhdGUgKikmc2VxLT5wcml2YXRlOwogCi0Jc2VxX3ByaW50ZihzZXEsICJOOiBOdW1iZXI9JWxkIE5hbWU9JXMiLAotCQkgICAodW5zaWduZWQgbG9uZylzZXEtPnByaXZhdGUsIGhhbmRsZXItPm5hbWUpOworCXNlcV9wcmludGYoc2VxLCAiTjogTnVtYmVyPSV1IE5hbWU9JXMiLCBzdGF0ZS0+cG9zLCBoYW5kbGVyLT5uYW1lKTsKIAlpZiAoaGFuZGxlci0+Zm9wcykKIAkJc2VxX3ByaW50ZihzZXEsICIgTWlub3I9JWQiLCBoYW5kbGVyLT5taW5vcik7CiAJc2VxX3B1dGMoc2VxLCAnXG4nKTsKIAogCXJldHVybiAwOwogfQorCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIGlucHV0X2hhbmRsZXJzX3NlcV9vcHMgPSB7CiAJLnN0YXJ0CT0gaW5wdXRfaGFuZGxlcnNfc2VxX3N0YXJ0LAogCS5uZXh0CT0gaW5wdXRfaGFuZGxlcnNfc2VxX25leHQsCi0JLnN0b3AJPSBpbnB1dF9oYW5kbGVyc19zZXFfc3RvcCwKKwkuc3RvcAk9IGlucHV0X3NlcV9zdG9wLAogCS5zaG93CT0gaW5wdXRfaGFuZGxlcnNfc2VxX3Nob3csCiB9OwogCkBAIC0xMjczLDYgKzEzMDUsNyBAQAogCQl9CQkJCQkJXAogCX0gd2hpbGUgKDApCiAKKyNpZmRlZiBDT05GSUdfUE0KIHN0YXRpYyB2b2lkIGlucHV0X2Rldl9yZXNldChzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYsIGJvb2wgYWN0aXZhdGUpCiB7CiAJaWYgKCFkZXYtPmV2ZW50KQpAQCAtMTI4Nyw3ICsxMzIwLDYgQEAKIAl9CiB9CiAKLSNpZmRlZiBDT05GSUdfUE0KIHN0YXRpYyBpbnQgaW5wdXRfZGV2X3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQogewogCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2RldiA9IHRvX2lucHV0X2RldihkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9qb3lkZXYuYyBiL2RyaXZlcnMvaW5wdXQvam95ZGV2LmMKaW5kZXggOTAxYjI1Mi4uYjFiZDZkZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9qb3lkZXYuYworKysgYi9kcml2ZXJzL2lucHV0L2pveWRldi5jCkBAIC0xOCw2ICsxOCw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tYWpvci5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvbWlzY2RldmljZS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay94cGFkLmMgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL3hwYWQuYwppbmRleCAyMzg4Y2Y1Li43OWUzZWRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL3hwYWQuYworKysgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL3hwYWQuYwpAQCAtMTQzLDYgKzE0Myw3IEBACiAJeyAweDEyYWIsIDB4ODgwOSwgIlhib3ggRERSIGRhbmNlcGFkIiwgTUFQX0RQQURfVE9fQlVUVE9OUywgWFRZUEVfWEJPWCB9LAogCXsgMHgxNDMwLCAweDQ3NDgsICJSZWRPY3RhbmUgR3VpdGFyIEhlcm8gWC1wbG9yZXIiLCBNQVBfRFBBRF9UT19BWEVTLCBYVFlQRV9YQk9YMzYwIH0sCiAJeyAweDE0MzAsIDB4ODg4OCwgIlRYNjUwMCsgRGFuY2UgUGFkIChmaXJzdCBnZW5lcmF0aW9uKSIsIE1BUF9EUEFEX1RPX0JVVFRPTlMsIFhUWVBFX1hCT1ggfSwKKwl7IDB4MTQ2YiwgMHgwNjAxLCAiQmlnQmVuIEludGVyYWN0aXZlIFhCT1ggMzYwIENvbnRyb2xsZXIiLCBNQVBfRFBBRF9UT19BWEVTLCBYVFlQRV9YQk9YMzYwIH0sCiAJeyAweDA0NWUsIDB4MDI4ZSwgIk1pY3Jvc29mdCBYLUJveCAzNjAgcGFkIiwgTUFQX0RQQURfVE9fQVhFUywgWFRZUEVfWEJPWDM2MCB9LAogCXsgMHgxYmFkLCAweDAwMDMsICJIYXJtb25peCBSb2NrIEJhbmQgRHJ1bWtpdCIsIE1BUF9EUEFEX1RPX0JVVFRPTlMsIFhUWVBFX1hCT1gzNjAgfSwKIAl7IDB4ZmZmZiwgMHhmZmZmLCAiQ2hpbmVzZS1tYWRlIFhib3ggQ29udHJvbGxlciIsIE1BUF9EUEFEX1RPX0FYRVMsIFhUWVBFX1hCT1ggfSwKQEAgLTIwOSw2ICsyMTAsNyBAQAogCVhQQURfWEJPWDM2MF9WRU5ET1IoMHgwNzM4KSwJCS8qIE1hZCBDYXR6IFgtQm94IDM2MCBjb250cm9sbGVycyAqLwogCVhQQURfWEJPWDM2MF9WRU5ET1IoMHgwZTZmKSwJCS8qIDB4MGU2ZiBYLUJveCAzNjAgY29udHJvbGxlcnMgKi8KIAlYUEFEX1hCT1gzNjBfVkVORE9SKDB4MTQzMCksCQkvKiBSZWRPY3RhbmUgWC1Cb3ggMzYwIGNvbnRyb2xsZXJzICovCisJWFBBRF9YQk9YMzYwX1ZFTkRPUigweDE0NmIpLAkJLyogQmlnQmVuIEludGVyYWN0aXZlIENvbnRyb2xsZXJzICovCiAJWFBBRF9YQk9YMzYwX1ZFTkRPUigweDFiYWQpLAkJLyogUm9jayBCYW5kIERydW1zICovCiAJeyB9CiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9hdGtiZC5jIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9hdGtiZC5jCmluZGV4IDQ3MDllMTUuLmE2NTEyMzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvYXRrYmQuYworKysgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2F0a2JkLmMKQEAgLTU3NCwxMSArNTc0LDIyIEBACiAKIAltdXRleF9sb2NrKCZhdGtiZC0+ZXZlbnRfbXV0ZXgpOwogCi0JaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChBVEtCRF9MRURfRVZFTlRfQklULCAmYXRrYmQtPmV2ZW50X21hc2spKQotCQlhdGtiZF9zZXRfbGVkcyhhdGtiZCk7CisJaWYgKCFhdGtiZC0+ZW5hYmxlZCkgeworCQkvKgorCQkgKiBTZXJpbyBwb3J0cyBhcmUgcmVzdW1lZCBhc3luY2hyb25vdXNseSBzbyB3aGlsZSBkcml2ZXIgY29yZQorCQkgKiB0aGlua3MgdGhhdCBkZXZpY2UgaXMgYWxyZWFkeSBmdWxseSBvcGVyYXRpb25hbCBpbiByZWFsaXR5CisJCSAqIGl0IG1heSBub3QgYmUgcmVhZHkgeWV0LiBJbiB0aGlzIGNhc2Ugd2UgbmVlZCB0byBrZWVwCisJCSAqIHJlc2NoZWR1bGluZyB0aWxsIHJlY29ubmVjdCBjb21wbGV0ZXMuCisJCSAqLworCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmF0a2JkLT5ldmVudF93b3JrLAorCQkJCQltc2Vjc190b19qaWZmaWVzKDEwMCkpOworCX0gZWxzZSB7CisJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoQVRLQkRfTEVEX0VWRU5UX0JJVCwgJmF0a2JkLT5ldmVudF9tYXNrKSkKKwkJCWF0a2JkX3NldF9sZWRzKGF0a2JkKTsKIAotCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoQVRLQkRfUkVQX0VWRU5UX0JJVCwgJmF0a2JkLT5ldmVudF9tYXNrKSkKLQkJYXRrYmRfc2V0X3JlcGVhdF9yYXRlKGF0a2JkKTsKKwkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChBVEtCRF9SRVBfRVZFTlRfQklULCAmYXRrYmQtPmV2ZW50X21hc2spKQorCQkJYXRrYmRfc2V0X3JlcGVhdF9yYXRlKGF0a2JkKTsKKwl9CiAKIAltdXRleF91bmxvY2soJmF0a2JkLT5ldmVudF9tdXRleCk7CiB9CkBAIC03NzAsNiArNzgxLDMwIEBACiAJcmV0dXJuIDM7CiB9CiAKK3N0YXRpYyBpbnQgYXRrYmRfcmVzZXRfc3RhdGUoc3RydWN0IGF0a2JkICphdGtiZCkKK3sKKyAgICAgICAgc3RydWN0IHBzMmRldiAqcHMyZGV2ID0gJmF0a2JkLT5wczJkZXY7CisJdW5zaWduZWQgY2hhciBwYXJhbVsxXTsKKworLyoKKyAqIFNldCB0aGUgTEVEcyB0byBhIHByZWRlZmluZWQgc3RhdGUgKGFsbCBvZmYpLgorICovCisKKwlwYXJhbVswXSA9IDA7CisJaWYgKHBzMl9jb21tYW5kKHBzMmRldiwgcGFyYW0sIEFUS0JEX0NNRF9TRVRMRURTKSkKKwkJcmV0dXJuIC0xOworCisvKgorICogU2V0IGF1dG9yZXBlYXQgdG8gZmFzdGVzdCBwb3NzaWJsZS4KKyAqLworCisJcGFyYW1bMF0gPSAwOworCWlmIChwczJfY29tbWFuZChwczJkZXYsIHBhcmFtLCBBVEtCRF9DTURfU0VUUkVQKSkKKwkJcmV0dXJuIC0xOworCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgYXRrYmRfYWN0aXZhdGUoc3RydWN0IGF0a2JkICphdGtiZCkKIHsKIAlzdHJ1Y3QgcHMyZGV2ICpwczJkZXYgPSAmYXRrYmQtPnBzMmRldjsKQEAgLTg1MiwyOSArODg3LDYgQEAKIH07CiAKIC8qCi0gKiBJbnZlbnRlYyBzeXN0ZW0gd2l0aCBicm9rZW4ga2V5IHJlbGVhc2Ugb24gdm9sdW1lIGtleXMKLSAqLwotc3RhdGljIHVuc2lnbmVkIGludCBhdGtiZF9pbnZlbnRlY19mb3JjZWRfcmVsZWFzZV9rZXlzW10gPSB7Ci0JMHhhZSwgMHhiMCwgLTFVCi19OwotCi0vKgotICogUGVyZm9ybSBmaXh1cCBmb3IgSFAgUGF2aWxpb24gWlY2MTAwIGxhcHRvcCB0aGF0IGRvZXNuJ3QgZ2VuZXJhdGUgcmVsZWFzZQotICogZm9yIGl0cyB2b2x1bWUgYnV0dG9ucwotICovCi1zdGF0aWMgdW5zaWduZWQgaW50IGF0a2JkX2hwX3p2NjEwMF9mb3JjZWRfcmVsZWFzZV9rZXlzW10gPSB7Ci0JMHhhZSwgMHhiMCwgLTFVCi19OwotCi0vKgotICogUGVyZm9ybSBmaXh1cCBmb3IgSFAgKENvbXBhcSkgUHJlc2FyaW8gUjQwMDAgUjQxMDAgUjQyMDAgdGhhdCBkb24ndCBnZW5lcmF0ZQotICogcmVsZWFzZSBmb3IgdGhlaXIgdm9sdW1lIGJ1dHRvbnMKLSAqLwotc3RhdGljIHVuc2lnbmVkIGludCBhdGtiZF9ocF9yNDAwMF9mb3JjZWRfcmVsZWFzZV9rZXlzW10gPSB7Ci0JMHhhZSwgMHhiMCwgLTFVCi19OwotCi0vKgogICogU2Ftc3VuZyBOQzEwLE5DMjAgd2l0aCBGbitGPyBrZXkgcmVsZWFzZSBub3Qgd29ya2luZwogICovCiBzdGF0aWMgdW5zaWduZWQgaW50IGF0a2JkX3NhbXN1bmdfZm9yY2VkX3JlbGVhc2Vfa2V5c1tdID0gewpAQCAtODgyLDE0ICs4OTQsNiBAQAogfTsKIAogLyoKLSAqIFRoZSB2b2x1bWUgdXAgYW5kIHZvbHVtZSBkb3duIHNwZWNpYWwga2V5cyBvbiBhIEZ1aml0c3UgQW1pbG8gUEEgMTUxMCBsYXB0b3AKLSAqIGRvIG5vdCBnZW5lcmF0ZSByZWxlYXNlIGV2ZW50cyBzbyB3ZSBoYXZlIHRvIGRvIGl0IG91cnNlbHZlcy4KLSAqLwotc3RhdGljIHVuc2lnbmVkIGludCBhdGtiZF9hbWlsb19wYTE1MTBfZm9yY2VkX3JlbGVhc2Vfa2V5c1tdID0gewotCTB4YjAsIDB4YWUsIC0xVQotfTsKLQotLyoKICAqIEFtaWxvIFBpIDM1MjUga2V5IHJlbGVhc2UgZm9yIEZuK1ZvbHVtZSBrZXlzIG5vdCB3b3JraW5nCiAgKi8KIHN0YXRpYyB1bnNpZ25lZCBpbnQgYXRrYmRfYW1pbG9fcGkzNTI1X2ZvcmNlZF9yZWxlYXNlX2tleXNbXSA9IHsKQEAgLTkxMSw2ICs5MTUsMTQgQEAKIH07CiAKIC8qCisgKiBNYW55IG5vdGVib29rcyBkb24ndCBzZW5kIGtleSByZWxlYXNlIGV2ZW50IGZvciB2b2x1bWUgdXAvZG93bgorICoga2V5cywgd2l0aCBrZXkgbGlzdCBiZWxvdyBjb21tb24gYW1vbmcgdGhlbQorICovCitzdGF0aWMgdW5zaWduZWQgaW50IGF0a2JkX3ZvbHVtZV9mb3JjZWRfcmVsZWFzZV9rZXlzW10gPSB7CisJMHhhZSwgMHhiMCwgLTFVCit9OworCisvKgogICogYXRrYmRfc2V0X2tleWNvZGVfdGFibGUoKSBpbml0aWFsaXplcyBrZXlib2FyZCdzIGtleWNvZGUgdGFibGUKICAqIGFjY29yZGluZyB0byB0aGUgc2VsZWN0ZWQgc2NhbmNvZGUgc2V0CiAgKi8KQEAgLTEwODcsNiArMTA5OSw3IEBACiAJCX0KIAogCQlhdGtiZC0+c2V0ID0gYXRrYmRfc2VsZWN0X3NldChhdGtiZCwgYXRrYmRfc2V0LCBhdGtiZF9leHRyYSk7CisJCWF0a2JkX3Jlc2V0X3N0YXRlKGF0a2JkKTsKIAkJYXRrYmRfYWN0aXZhdGUoYXRrYmQpOwogCiAJfSBlbHNlIHsKQEAgLTEyNjcsNiArMTI4MCw3IEBACiAKIAkJYXRrYmQtPmRldiA9IG5ld19kZXY7CiAJCWF0a2JkLT5zZXQgPSBhdGtiZF9zZWxlY3Rfc2V0KGF0a2JkLCBhdGtiZC0+c2V0LCB2YWx1ZSk7CisJCWF0a2JkX3Jlc2V0X3N0YXRlKGF0a2JkKTsKIAkJYXRrYmRfYWN0aXZhdGUoYXRrYmQpOwogCQlhdGtiZF9zZXRfa2V5Y29kZV90YWJsZShhdGtiZCk7CiAJCWF0a2JkX3NldF9kZXZpY2VfYXR0cnMoYXRrYmQpOwpAQCAtMTU0OCw3ICsxNTYyLDcgQEAKIAkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiUGF2aWxpb24gWlY2MTAwIiksCiAJCX0sCiAJCS5jYWxsYmFjayA9IGF0a2JkX3NldHVwX2ZvcmNlZF9yZWxlYXNlLAotCQkuZHJpdmVyX2RhdGEgPSBhdGtiZF9ocF96djYxMDBfZm9yY2VkX3JlbGVhc2Vfa2V5cywKKwkJLmRyaXZlcl9kYXRhID0gYXRrYmRfdm9sdW1lX2ZvcmNlZF9yZWxlYXNlX2tleXMsCiAJfSwKIAl7CiAJCS5pZGVudCA9ICJIUCBQcmVzYXJpbyBSNDAwMCIsCkBAIC0xNTU3LDcgKzE1NzEsNyBAQAogCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJQcmVzYXJpbyBSNDAwMCIpLAogCQl9LAogCQkuY2FsbGJhY2sgPSBhdGtiZF9zZXR1cF9mb3JjZWRfcmVsZWFzZSwKLQkJLmRyaXZlcl9kYXRhID0gYXRrYmRfaHBfcjQwMDBfZm9yY2VkX3JlbGVhc2Vfa2V5cywKKwkJLmRyaXZlcl9kYXRhID0gYXRrYmRfdm9sdW1lX2ZvcmNlZF9yZWxlYXNlX2tleXMsCiAJfSwKIAl7CiAJCS5pZGVudCA9ICJIUCBQcmVzYXJpbyBSNDEwMCIsCkBAIC0xNTY2LDcgKzE1ODAsNyBAQAogCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJQcmVzYXJpbyBSNDEwMCIpLAogCQl9LAogCQkuY2FsbGJhY2sgPSBhdGtiZF9zZXR1cF9mb3JjZWRfcmVsZWFzZSwKLQkJLmRyaXZlcl9kYXRhID0gYXRrYmRfaHBfcjQwMDBfZm9yY2VkX3JlbGVhc2Vfa2V5cywKKwkJLmRyaXZlcl9kYXRhID0gYXRrYmRfdm9sdW1lX2ZvcmNlZF9yZWxlYXNlX2tleXMsCiAJfSwKIAl7CiAJCS5pZGVudCA9ICJIUCBQcmVzYXJpbyBSNDIwMCIsCkBAIC0xNTc1LDcgKzE1ODksNyBAQAogCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJQcmVzYXJpbyBSNDIwMCIpLAogCQl9LAogCQkuY2FsbGJhY2sgPSBhdGtiZF9zZXR1cF9mb3JjZWRfcmVsZWFzZSwKLQkJLmRyaXZlcl9kYXRhID0gYXRrYmRfaHBfcjQwMDBfZm9yY2VkX3JlbGVhc2Vfa2V5cywKKwkJLmRyaXZlcl9kYXRhID0gYXRrYmRfdm9sdW1lX2ZvcmNlZF9yZWxlYXNlX2tleXMsCiAJfSwKIAl7CiAJCS5pZGVudCA9ICJJbnZlbnRlYyBTeW1waG9ueSIsCkBAIC0xNTg0LDcgKzE1OTgsNyBAQAogCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJTWU1QSE9OWSA2LjAvNy4wIiksCiAJCX0sCiAJCS5jYWxsYmFjayA9IGF0a2JkX3NldHVwX2ZvcmNlZF9yZWxlYXNlLAotCQkuZHJpdmVyX2RhdGEgPSBhdGtiZF9pbnZlbnRlY19mb3JjZWRfcmVsZWFzZV9rZXlzLAorCQkuZHJpdmVyX2RhdGEgPSBhdGtiZF92b2x1bWVfZm9yY2VkX3JlbGVhc2Vfa2V5cywKIAl9LAogCXsKIAkJLmlkZW50ID0gIlNhbXN1bmcgTkMxMCIsCkBAIC0xNjIwLDcgKzE2MzQsNyBAQAogCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJBTUlMTyBQYSAxNTEwIiksCiAJCX0sCiAJCS5jYWxsYmFjayA9IGF0a2JkX3NldHVwX2ZvcmNlZF9yZWxlYXNlLAotCQkuZHJpdmVyX2RhdGEgPSBhdGtiZF9hbWlsb19wYTE1MTBfZm9yY2VkX3JlbGVhc2Vfa2V5cywKKwkJLmRyaXZlcl9kYXRhID0gYXRrYmRfdm9sdW1lX2ZvcmNlZF9yZWxlYXNlX2tleXMsCiAJfSwKIAl7CiAJCS5pZGVudCA9ICJGdWppdHN1IEFtaWxvIFBpIDM1MjUiLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9oaWxrYmQuYyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvaGlsa2JkLmMKaW5kZXggZTlkNjM5ZS4uNWY3MjQ0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9oaWxrYmQuYworKysgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2hpbGtiZC5jCkBAIC0yNCw2ICsyNCw3IEBACiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvaGlsLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2lmZGVmIENPTkZJR19IUDMwMApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9zdW5rYmQuYyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvc3Vua2JkLmMKaW5kZXggNDcyYjU2Ni4uYTk5YTA0YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9zdW5rYmQuYworKysgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL3N1bmtiZC5jCkBAIC0yNyw2ICsyNyw3IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21pc2MvaHBfc2RjX3J0Yy5jIGIvZHJpdmVycy9pbnB1dC9taXNjL2hwX3NkY19ydGMuYwppbmRleCAyMTZhNTU5Li5lYTgyMWI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21pc2MvaHBfc2RjX3J0Yy5jCisrKyBiL2RyaXZlcnMvaW5wdXQvbWlzYy9ocF9zZGNfcnRjLmMKQEAgLTIwOSw3ICsyMDksNyBAQAogCiAvKiBSZWFkIHRoZSBpODA0MiBmYXN0IGhhbmRzaGFrZSB0aW1lciAqLwogc3RhdGljIGlubGluZSBpbnQgaHBfc2RjX3J0Y19yZWFkX2ZocyhzdHJ1Y3QgdGltZXZhbCAqcmVzKSB7Ci0JdWludDY0X3QgcmF3OworCWludDY0X3QgcmF3OwogCXVuc2lnbmVkIGludCB0ZW5tczsKIAogCXJhdyA9IGhwX3NkY19ydGNfcmVhZF9pODA0MnRpbWVyKEhQX1NEQ19DTURfTE9BRF9GSFMsIDIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9taXNjL3JvdGFyeV9lbmNvZGVyLmMgYi9kcml2ZXJzL2lucHV0L21pc2Mvcm90YXJ5X2VuY29kZXIuYwppbmRleCBjODA2ZmJmLi4zYjlmNTg4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21pc2Mvcm90YXJ5X2VuY29kZXIuYworKysgYi9kcml2ZXJzL2lucHV0L21pc2Mvcm90YXJ5X2VuY29kZXIuYwpAQCAtMTA2LDggKzEwNiw4IEBACiAJc3RydWN0IGlucHV0X2RldiAqaW5wdXQ7CiAJaW50IGVycjsKIAotCWlmICghcGRhdGEgfHwgIXBkYXRhLT5zdGVwcykgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJpbnZhbGlkIHBsYXRmb3JtIGRhdGFcbiIpOworCWlmICghcGRhdGEpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAibWlzc2luZyBwbGF0Zm9ybSBkYXRhXG4iKTsKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21pc2Mvc3BhcmNzcGtyLmMgYi9kcml2ZXJzL2lucHV0L21pc2Mvc3BhcmNzcGtyLmMKaW5kZXggYzRmNDIzMS4uYjA2NDQxOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9taXNjL3NwYXJjc3Brci5jCisrKyBiL2RyaXZlcnMvaW5wdXQvbWlzYy9zcGFyY3Nwa3IuYwpAQCAtMjMwLDcgKzIzMCw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBiYmNfcmVtb3ZlKHN0cnVjdCBvZl9kZXZpY2UgKm9wKQorc3RhdGljIGludCBfX2RldmV4aXQgYmJjX3JlbW92ZShzdHJ1Y3Qgb2ZfZGV2aWNlICpvcCkKIHsKIAlzdHJ1Y3Qgc3BhcmNzcGtyX3N0YXRlICpzdGF0ZSA9IGRldl9nZXRfZHJ2ZGF0YSgmb3AtPmRldik7CiAJc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2ID0gc3RhdGUtPmlucHV0X2RldjsKQEAgLTMwOCw3ICszMDgsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgZ3JvdmVyX3JlbW92ZShzdHJ1Y3Qgb2ZfZGV2aWNlICpvcCkKK3N0YXRpYyBpbnQgX19kZXZleGl0IGdyb3Zlcl9yZW1vdmUoc3RydWN0IG9mX2RldmljZSAqb3ApCiB7CiAJc3RydWN0IHNwYXJjc3Brcl9zdGF0ZSAqc3RhdGUgPSBkZXZfZ2V0X2RydmRhdGEoJm9wLT5kZXYpOwogCXN0cnVjdCBncm92ZXJfYmVlcF9pbmZvICppbmZvID0gJnN0YXRlLT51Lmdyb3ZlcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbWlzYy91aW5wdXQuYyBiL2RyaXZlcnMvaW5wdXQvbWlzYy91aW5wdXQuYwppbmRleCBjNWE0OWFiLi5kM2Y1NzI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21pc2MvdWlucHV0LmMKKysrIGIvZHJpdmVycy9pbnB1dC9taXNjL3VpbnB1dC5jCkBAIC0zMCw2ICszMCw3IEBACiAgKgkJLSBmaXJzdCBwdWJsaWMgdmVyc2lvbgogICovCiAjaW5jbHVkZSA8bGludXgvcG9sbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbWlzYy93aXN0cm9uX2J0bnMuYyBiL2RyaXZlcnMvaW5wdXQvbWlzYy93aXN0cm9uX2J0bnMuYwppbmRleCAxMWZkMDM4Li5hOTMyMTc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21pc2Mvd2lzdHJvbl9idG5zLmMKKysrIGIvZHJpdmVycy9pbnB1dC9taXNjL3dpc3Ryb25fYnRucy5jCkBAIC05MzYsNiArOTM2LDE1IEBACiAJfSwKIAl7CiAJCS5jYWxsYmFjayA9IGRtaV9tYXRjaGVkLAorCQkuaWRlbnQgPSAiTWVkaW9uIE1EIDQyMjAwIiwKKwkJLm1hdGNoZXMgPSB7CisJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJNZWRpb24iKSwKKwkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiV0lNIDIwMzAiKSwKKwkJfSwKKwkJLmRyaXZlcl9kYXRhID0ga2V5bWFwX2ZzX2FtaWxvX3Byb192MjAwMAorCX0sCisJeworCQkuY2FsbGJhY2sgPSBkbWlfbWF0Y2hlZCwKIAkJLmlkZW50ID0gIk1lZGlvbiBNRCA5NjUwMCIsCiAJCS5tYXRjaGVzID0gewogCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiTUVESU9OUEMiKSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbW91c2UvbG9naXBzMnBwLmMgYi9kcml2ZXJzL2lucHV0L21vdXNlL2xvZ2lwczJwcC5jCmluZGV4IGRlNzQ1ZDcuLmFiNWRjNWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvbW91c2UvbG9naXBzMnBwLmMKKysrIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9sb2dpcHMycHAuYwpAQCAtMjE5LDcgKzIxOSw3IEBACiAJCQkJUFMyUFBfV0hFRUwgfCBQUzJQUF9TSURFX0JUTiB8IFBTMlBQX1RBU0tfQlROIHwKIAkJCQlQUzJQUF9FWFRSQV9CVE4gfCBQUzJQUF9OQVZfQlROIHwgUFMyUFBfSFdIRUVMIH0sCiAJCXsgNzIsCVBTMlBQX0tJTkRfVFJBQ0tNQU4sCTAgfSwJCQkvKiBULUNIMTE6IFRyYWNrTWFuIE1hcmJsZSAqLwotCQl7IDczLAkwLAkJCVBTMlBQX1NJREVfQlROIH0sCisJCXsgNzMsCVBTMlBQX0tJTkRfVFJBQ0tNQU4sCVBTMlBQX1NJREVfQlROIH0sCS8qIFRyYWNrTWFuIEZYICovCiAJCXsgNzUsCVBTMlBQX0tJTkRfV0hFRUwsCVBTMlBQX1dIRUVMIH0sCiAJCXsgNzYsCVBTMlBQX0tJTkRfV0hFRUwsCVBTMlBQX1dIRUVMIH0sCiAJCXsgNzksCVBTMlBQX0tJTkRfVFJBQ0tNQU4sCVBTMlBQX1dIRUVMIH0sCQkvKiBUcmFja01hbiB3aXRoIHdoZWVsICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21vdXNlL3N5bmFwdGljcy5jIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9zeW5hcHRpY3MuYwppbmRleCBiNjZmZjFhLi5mNGE2MTI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21vdXNlL3N5bmFwdGljcy5jCisrKyBiL2RyaXZlcnMvaW5wdXQvbW91c2Uvc3luYXB0aWNzLmMKQEAgLTY1Miw2ICs2NTIsMTYgQEAKIAkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIlRPU0hJQkEiKSwKIAkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiUE9SVEVHRSBNMzAwIiksCiAJCX0sCisKKwl9LAorCXsKKwkJLmlkZW50ID0gIlRvc2hpYmEgUG9ydGVnZSBNMzAwIiwKKwkJLm1hdGNoZXMgPSB7CisJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJUT1NISUJBIiksCisJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIlBvcnRhYmxlIFBDIiksCisJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfVkVSU0lPTiwgIlZlcnNpb24gMS4wIiksCisJCX0sCisKIAl9LAogCXsgfQogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbW91c2VkZXYuYyBiL2RyaXZlcnMvaW5wdXQvbW91c2VkZXYuYwppbmRleCA5NjZiODg2Li5hMTNkODBmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21vdXNlZGV2LmMKKysrIGIvZHJpdmVycy9pbnB1dC9tb3VzZWRldi5jCkBAIC0xMyw2ICsxMyw3IEBACiAjZGVmaW5lIE1PVVNFREVWX01JTk9SUwkJMzIKICNkZWZpbmUgTU9VU0VERVZfTUlYCQkzMQogCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWcgYi9kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWcKaW5kZXggYzRiM2ZiZC4uYWE1MzNjZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnCisrKyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZwpAQCAtNCw3ICs0LDcgQEAKIGNvbmZpZyBTRVJJTwogCXRyaXN0YXRlICJTZXJpYWwgSS9PIHN1cHBvcnQiIGlmIEVNQkVEREVEIHx8ICFYODYKIAlkZWZhdWx0IHkKLQktLS1oZWxwLS0tCisJaGVscAogCSAgU2F5IFllcyBoZXJlIGlmIHlvdSBoYXZlIGFueSBpbnB1dCBkZXZpY2UgdGhhdCB1c2VzIHNlcmlhbCBJL08gdG8KIAkgIGNvbW11bmljYXRlIHdpdGggdGhlIHN5c3RlbS4gVGhpcyBpbmNsdWRlcyB0aGUKIAkgIAkJKiBzdGFuZGFyZCBBVCBrZXlib2FyZCBhbmQgUFMvMiBtb3VzZSAqCkBAIC0yMiw3ICsyMiw3IEBACiAJdHJpc3RhdGUgImk4MDQyIFBDIEtleWJvYXJkIGNvbnRyb2xsZXIiIGlmIEVNQkVEREVEIHx8ICFYODYKIAlkZWZhdWx0IHkKIAlkZXBlbmRzIG9uICFQQVJJU0MgJiYgKCFBUk0gfHwgQVJDSF9TSEFSSyB8fCBGT09UQlJJREdFX0hPU1QpICYmICFNNjhLICYmICFCTEFDS0ZJTgotCS0tLWhlbHAtLS0KKwloZWxwCiAJICBpODA0MiBpcyB0aGUgY2hpcCBvdmVyIHdoaWNoIHRoZSBzdGFuZGFyZCBBVCBrZXlib2FyZCBhbmQgUFMvMgogCSAgbW91c2UgYXJlIGNvbm5lY3RlZCB0byB0aGUgY29tcHV0ZXIuIElmIHlvdSB1c2UgdGhlc2UgZGV2aWNlcywKIAkgIHlvdSdsbCBuZWVkIHRvIHNheSBZIGhlcmUuCkBAIC0zNSw3ICszNSw3IEBACiBjb25maWcgU0VSSU9fU0VSUE9SVAogCXRyaXN0YXRlICJTZXJpYWwgcG9ydCBsaW5lIGRpc2NpcGxpbmUiCiAJZGVmYXVsdCB5Ci0JLS0taGVscC0tLQorCWhlbHAKIAkgIFNheSBZIGhlcmUgaWYgeW91IHBsYW4gdG8gdXNlIGFuIGlucHV0IGRldmljZSAobW91c2UsIGpveXN0aWNrLAogCSAgdGFibGV0LCA2ZG9mKSB0aGF0IGNvbW11bmljYXRlcyBvdmVyIHRoZSBSUzIzMiBzZXJpYWwgKENPTSkgcG9ydC4KIApAQCAtNDksNyArNDksNyBAQAogY29uZmlnIFNFUklPX0NUODJDNzEwCiAJdHJpc3RhdGUgImN0ODJjNzEwIEF1eCBwb3J0IGNvbnRyb2xsZXIiCiAJZGVwZW5kcyBvbiBYODYKLQktLS1oZWxwLS0tCisJaGVscAogCSAgU2F5IFkgaGVyZSBpZiB5b3UgaGF2ZSBhIFRleGFzIEluc3RydW1lbnRzIFRyYXZlbE1hdGUgbm90ZWJvb2sKIAkgIGVxdWlwcGVkIHdpdGggdGhlIGN0ODJjNzEwIGNoaXAgYW5kIHdhbnQgdG8gdXNlIGEgbW91c2UgY29ubmVjdGVkCiAJICB0byB0aGUgIlF1aWNrUG9ydCIuCkBAIC02Niw3ICs2Niw3IEBACiBjb25maWcgU0VSSU9fUEFSS0JECiAJdHJpc3RhdGUgIlBhcmFsbGVsIHBvcnQga2V5Ym9hcmQgYWRhcHRlciIKIAlkZXBlbmRzIG9uIFBBUlBPUlQKLQktLS1oZWxwLS0tCisJaGVscAogCSAgU2F5IFkgaGVyZSBpZiB5b3UgYnVpbHQgYSBzaW1wbGUgcGFyYWxsZWwgcG9ydCBhZGFwdGVyIHRvIGF0dGFjaAogCSAgYW4gYWRkaXRpb25hbCBBVCBrZXlib2FyZCwgWFQga2V5Ym9hcmQgb3IgUFMvMiBtb3VzZS4KIApAQCAtMTI0LDcgKzEyNCw3IEBACiAJdHJpc3RhdGUgIkhQIFN5c3RlbSBEZXZpY2UgQ29udHJvbGxlciBpODA0MiBTdXBwb3J0IgogCWRlcGVuZHMgb24gKEdTQyB8fCBIUDMwMCkgJiYgU0VSSU8KIAlkZWZhdWx0IHkKLQktLS1oZWxwLS0tCisJaGVscAogCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgIlN5c3RlbSBEZXZpY2UKIAkgIENvbnRyb2xsZXIiLCBhbiBpODA0MiBjYXJyeWluZyBtaWNyb2NvZGUgdG8gbWFuYWdlIGEKIAkgIGZldyBtaXNjZWxsYW5lb3VzIGRldmljZXMgb24gc29tZSBIZXdsZXR0IFBhY2thcmQgc3lzdGVtcy4KQEAgLTE2OCw2ICsxNjgsNyBAQAogCiBjb25maWcgU0VSSU9fTElCUFMyCiAJdHJpc3RhdGUgIlBTLzIgZHJpdmVyIGxpYnJhcnkiIGlmIEVNQkVEREVECisJZGVwZW5kcyBvbiBTRVJJT19JODA0MiB8fCBTRVJJT19JODA0Mj1uCiAJaGVscAogCSAgU2F5IFkgaGVyZSBpZiB5b3UgYXJlIHVzaW5nIGEgZHJpdmVyIGZvciBkZXZpY2UgY29ubmVjdGVkCiAJICB0byBhIFBTLzIgcG9ydCwgc3VjaCBhcyBQUy8yIG1vdXNlIG9yIHN0YW5kYXJkIEFUIGtleWJvYXJkLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9zZXJpby9pODA0Mi14ODZpYTY0aW8uaCBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vaTgwNDIteDg2aWE2NGlvLmgKaW5kZXggYTM5YmM0ZS4uYTUzNzkyNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9zZXJpby9pODA0Mi14ODZpYTY0aW8uaAorKysgYi9kcml2ZXJzL2lucHV0L3NlcmlvL2k4MDQyLXg4NmlhNjRpby5oCkBAIC0zMjcsNiArMzI3LDE3IEBACiAJCX0sCiAJfSwKIAl7CisJCS8qCisJCSAqIFJlc2V0IGFuZCBHRVQgSUQgY29tbWFuZHMgaXNzdWVkIHZpYSBLQkQgcG9ydCBhcmUKKwkJICogc29tZXRpbWVzIGJlaW5nIGRlbGl2ZXJlZCB0byBBVVgzLgorCQkgKi8KKwkJLmlkZW50ID0gIlNvbnkgVmFpbyBGWi0yNDBFIiwKKwkJLm1hdGNoZXMgPSB7CisJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJTb255IENvcnBvcmF0aW9uIiksCisJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIlZHTi1GWjI0MEUiKSwKKwkJfSwKKwl9LAorCXsKIAkJLmlkZW50ID0gIkFtb2kgTTYzNi9BNzM3IiwKIAkJLm1hdGNoZXMgPSB7CiAJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJBbW9pIEVsZWN0cm9uaWNzIENPLixMVEQuIiksCkBAIC02NjEsNyArNjcyLDcgQEAKIHN0YXRpYyBpbnQgX19pbml0IGk4MDQyX3BucF9pbml0KHZvaWQpCiB7CiAJY2hhciBrYmRfaXJxX3N0cls0XSA9IHsgMCB9LCBhdXhfaXJxX3N0cls0XSA9IHsgMCB9OwotCWludCBwbnBfZGF0YV9idXN0ZWQgPSBmYWxzZTsKKwlib29sIHBucF9kYXRhX2J1c3RlZCA9IGZhbHNlOwogCWludCBlcnI7CiAKICNpZmRlZiBDT05GSUdfWDg2CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3NlcmlvL2k4MDQyLmMgYi9kcml2ZXJzL2lucHV0L3NlcmlvL2k4MDQyLmMKaW5kZXggYmM1NmU1Mi4uYTMxNTc4MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9zZXJpby9pODA0Mi5jCisrKyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vaTgwNDIuYwpAQCAtNjA5LDYgKzYwOSw4IEBACiAJc3RyID0gaTgwNDJfcmVhZF9zdGF0dXMoKTsKIAlpZiAoc3RyICYgSTgwNDJfU1RSX09CRikgewogCQlkYXRhID0gaTgwNDJfcmVhZF9kYXRhKCk7CisJCWRiZygiJTAyeCA8LSBpODA0MiAoYXV4X3Rlc3RfaXJxLCAlcykiLAorCQkJZGF0YSwgc3RyICYgSTgwNDJfU1RSX0FVWERBVEEgPyAiYXV4IiA6ICJrYmQiKTsKIAkJaWYgKGk4MDQyX2lycV9iZWluZ190ZXN0ZWQgJiYKIAkJICAgIGRhdGEgPT0gMHhhNSAmJiAoc3RyICYgSTgwNDJfU1RSX0FVWERBVEEpKQogCQkJY29tcGxldGUoJmk4MDQyX2F1eF9pcnFfZGVsaXZlcmVkKTsKQEAgLTc1MCw2ICs3NTIsNyBAQAogICogQVVYIElSUSB3YXMgbmV2ZXIgZGVsaXZlcmVkIHNvIHdlIG5lZWQgdG8gZmx1c2ggdGhlIGNvbnRyb2xsZXIgdG8KICAqIGdldCByaWQgb2YgdGhlIGJ5dGUgd2UgcHV0IHRoZXJlOyBvdGhlcndpc2Uga2V5Ym9hcmQgbWF5IG5vdCB3b3JrLgogICovCisJCWRiZygiICAgICAtLSBpODA0MiAoYXV4IGlycSB0ZXN0IHRpbWVvdXQpIik7CiAJCWk4MDQyX2ZsdXNoKCk7CiAJCXJldHZhbCA9IC0xOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvc2VyaW8vbGlicHMyLmMgYi9kcml2ZXJzL2lucHV0L3NlcmlvL2xpYnBzMi5jCmluZGV4IDc2OWJhNjUuLmYzODc2YWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvc2VyaW8vbGlicHMyLmMKKysrIGIvZHJpdmVycy9pbnB1dC9zZXJpby9saWJwczIuYwpAQCAtMTMsNiArMTMsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpb19yYXcuYyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW9fcmF3LmMKaW5kZXggYjAzMDA5Yi4uMjdmZGFhZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpb19yYXcuYworKysgYi9kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvX3Jhdy5jCkBAIC05LDYgKzksNyBAQAogICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqLwogCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3NlcmlvL3NlcnBvcnQuYyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vc2VycG9ydC5jCmluZGV4IGI5Njk0YjYuLjZkMzQ1MTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvc2VyaW8vc2VycG9ydC5jCisrKyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vc2VycG9ydC5jCkBAIC0xNSw2ICsxNSw3IEBACiAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vYWQ3ODc5LmMgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2FkNzg3OS5jCmluZGV4IGYwNjMzMmMuLmMyMWU2ZDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vYWQ3ODc5LmMKKysrIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9hZDc4NzkuYwpAQCAtNjQ1LDcgKzY0NSw3IEBACiAJCWtmcmVlKHRzKTsKIAl9CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gZXJyb3I7CiB9CiAKIHN0YXRpYyBpbnQgX19kZXZleGl0IGFkNzg3OV9yZW1vdmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKQEAgLTczMiw3ICs3MzIsNyBAQAogCQlrZnJlZSh0cyk7CiAJfQogCi0JcmV0dXJuIDA7CisJcmV0dXJuIGVycm9yOwogfQogCiBzdGF0aWMgaW50IF9fZGV2ZXhpdCBhZDc4NzlfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vY2FwaS9rY2FwaS5jIGIvZHJpdmVycy9pc2RuL2NhcGkva2NhcGkuYwppbmRleCA1N2QyNjM2Li5kYzUwNmFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vY2FwaS9rY2FwaS5jCisrKyBiL2RyaXZlcnMvaXNkbi9jYXBpL2tjYXBpLmMKQEAgLTE4LDYgKzE4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2RpdmVydC9kaXZlcnRfcHJvY2ZzLmMgYi9kcml2ZXJzL2lzZG4vZGl2ZXJ0L2RpdmVydF9wcm9jZnMuYwppbmRleCA4YjI1NmE2Li4zNjk3YzQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vZGl2ZXJ0L2RpdmVydF9wcm9jZnMuYworKysgYi9kcml2ZXJzL2lzZG4vZGl2ZXJ0L2RpdmVydF9wcm9jZnMuYwpAQCAtMTYsNiArMTYsNyBAQAogI2Vsc2UKICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2VuZGlmCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9pc2RuaWYuaD4KICNpbmNsdWRlIDxuZXQvbmV0X25hbWVzcGFjZS5oPgogI2luY2x1ZGUgImlzZG5fZGl2ZXJ0LmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvYXJjb2ZpLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvYXJjb2ZpLmMKaW5kZXggZDMwY2U1Yi4uODVhOGZkOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L2FyY29maS5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9hcmNvZmkuYwpAQCAtMTAsNiArMTAsNyBAQAogICoKICAqLwogIAorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSAiaGlzYXguaCIKICNpbmNsdWRlICJpc2RubDEuaCIKICNpbmNsdWRlICJpc2FjLmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvaGZjXzJiZHMwLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvaGZjXzJiZHMwLmMKaW5kZXggNWM0NmE3MS4uOGQyMmY1MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L2hmY18yYmRzMC5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9oZmNfMmJkczAuYwpAQCAtMTEsNiArMTEsNyBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlICJoaXNheC5oIgogI2luY2x1ZGUgImhmY18yYmRzMC5oIgogI2luY2x1ZGUgImlzZG5sMS5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L2hmY19wY2kuYyBiL2RyaXZlcnMvaXNkbi9oaXNheC9oZmNfcGNpLmMKaW5kZXggZDExMGE3Ny4uMTA5MTQ3MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L2hmY19wY2kuYworKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvaGZjX3BjaS5jCkBAIC0yMCw2ICsyMCw3IEBACiAjaW5jbHVkZSAiaGZjX3BjaS5oIgogI2luY2x1ZGUgImlzZG5sMS5oIgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAKIHN0YXRpYyBjb25zdCBjaGFyICpoZmNwY2lfcmV2aXNpb24gPSAiJFJldmlzaW9uOiAxLjQ4LjIuNCAkIjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oeXNkbi9oeXNkbl9wcm9jY29uZi5jIGIvZHJpdmVycy9pc2RuL2h5c2RuL2h5c2RuX3Byb2Njb25mLmMKaW5kZXggOGY5ZjQ5MS4uOTBiMzVlMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2h5c2RuL2h5c2RuX3Byb2Njb25mLmMKKysrIGIvZHJpdmVycy9pc2RuL2h5c2RuL2h5c2RuX3Byb2Njb25mLmMKQEAgLTExLDYgKzExLDcgQEAKICAqCiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L2NyZWQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2h5c2RuL2h5c2RuX3Byb2Nsb2cuYyBiL2RyaXZlcnMvaXNkbi9oeXNkbi9oeXNkbl9wcm9jbG9nLmMKaW5kZXggODk5MWQyYy4uOGJjYWUyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2h5c2RuL2h5c2RuX3Byb2Nsb2cuYworKysgYi9kcml2ZXJzL2lzZG4vaHlzZG4vaHlzZG5fcHJvY2xvZy5jCkBAIC0xMyw2ICsxMyw3IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvcG9sbC5oPgogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAKICNpbmNsdWRlICJoeXNkbl9kZWZzLmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vcGNiaXQvZHJ2LmMgYi9kcml2ZXJzL2lzZG4vcGNiaXQvZHJ2LmMKaW5kZXggOGM2NmJjYi4uMTIzYzFkNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL3BjYml0L2Rydi5jCisrKyBiL2RyaXZlcnMvaXNkbi9wY2JpdC9kcnYuYwpAQCAtMjMsNiArMjMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL3BjYml0L2xheWVyMi5jIGIvZHJpdmVycy9pc2RuL3BjYml0L2xheWVyMi5jCmluZGV4IGUwNzVlOGQuLjMwZjBmNDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9wY2JpdC9sYXllcjIuYworKysgYi9kcml2ZXJzL2lzZG4vcGNiaXQvbGF5ZXIyLmMKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL3NjL2luaXQuYyBiL2RyaXZlcnMvaXNkbi9zYy9pbml0LmMKaW5kZXggZGQwYWNkMC4uNWEwNzc0OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL3NjL2luaXQuYworKysgYi9kcml2ZXJzL2lzZG4vc2MvaW5pdC5jCkBAIC04LDYgKzgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSAiaW5jbHVkZXMuaCIKICNpbmNsdWRlICJoYXJkd2FyZS5oIgogI2luY2x1ZGUgImNhcmQuaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGVkcy9LY29uZmlnIGIvZHJpdmVycy9sZWRzL0tjb25maWcKaW5kZXggN2M4ZTcxMi4uZTRmNTk5ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9sZWRzL0tjb25maWcKKysrIGIvZHJpdmVycy9sZWRzL0tjb25maWcKQEAgLTE1MCw5ICsxNTAsOSBAQAogCXRyaXN0YXRlICJMRUQgU3VwcG9ydCBmb3IgTi5TLiBMUDM5NDQgKEZ1biBMaWdodCkgSTJDIGNoaXAiCiAJZGVwZW5kcyBvbiBMRURTX0NMQVNTICYmIEkyQwogCWhlbHAKLSAgICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIExFRHMgY29ubmVjdGVkIHRvIHRoZSBOYXRpb25hbAotICAgIFNlbWljb25kdWN0b3IgTFAzOTQ0IExpZ2h0aW5nIE1hbmFnZW1lbnQgVW5pdCAoTE1VKSBhbHNvIGtub3duIGFzCi0gICAgRnVuIExpZ2h0IENoaXAuCisJICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIExFRHMgY29ubmVjdGVkIHRvIHRoZSBOYXRpb25hbAorCSAgU2VtaWNvbmR1Y3RvciBMUDM5NDQgTGlnaHRpbmcgTWFuYWdlbWVudCBVbml0IChMTVUpIGFsc28ga25vd24gYXMKKwkgIEZ1biBMaWdodCBDaGlwLgogCiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBsZWRzLWxwMzk0NC4KQEAgLTE5NSw2ICsxOTUsMTMgQEAKIAkgIExFRCBkcml2ZXIgY2hpcHMgYWNjZXNzZWQgdmlhIHRoZSBJMkMgYnVzLiAgU3VwcG9ydGVkCiAJICBkZXZpY2VzIGluY2x1ZGUgUENBOTU1MCwgUENBOTU1MSwgUENBOTU1MiwgYW5kIFBDQTk1NTMuCiAKK2NvbmZpZyBMRURTX1dNODMxWF9TVEFUVVMKKwl0cmlzdGF0ZSAiTEVEIHN1cHBvcnQgZm9yIHN0YXR1cyBMRURzIG9uIFdNODMxeCBQTUlDcyIKKwlkZXBlbmRzIG9uIExFRFNfQ0xBU1MgJiYgTUZEX1dNODMxWAorCWhlbHAKKwkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIHN0YXR1cyBMRURzIG9mIHRoZSBXTTgzMXgKKyAgICAgICAgICBzZXJpZXMgb2YgUE1JQ3MuCisKIGNvbmZpZyBMRURTX1dNODM1MAogCXRyaXN0YXRlICJMRUQgU3VwcG9ydCBmb3IgV004MzUwIEF1ZGlvUGx1cyBQTUlDIgogCWRlcGVuZHMgb24gTEVEU19DTEFTUyAmJiBNRkRfV004MzUwCmRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvTWFrZWZpbGUgYi9kcml2ZXJzL2xlZHMvTWFrZWZpbGUKaW5kZXggZThjZGNmNy4uNDZkNzI3MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9sZWRzL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbGVkcy9NYWtlZmlsZQpAQCAtMjYsNiArMjYsNyBAQAogb2JqLSQoQ09ORklHX0xFRFNfRlNHKQkJCSs9IGxlZHMtZnNnLm8KIG9iai0kKENPTkZJR19MRURTX1BDQTk1NVgpCQkrPSBsZWRzLXBjYTk1NXgubwogb2JqLSQoQ09ORklHX0xFRFNfREE5MDNYKQkJKz0gbGVkcy1kYTkwM3gubworb2JqLSQoQ09ORklHX0xFRFNfV004MzFYX1NUQVRVUykJKz0gbGVkcy13bTgzMXgtc3RhdHVzLm8KIG9iai0kKENPTkZJR19MRURTX1dNODM1MCkJCSs9IGxlZHMtd204MzUwLm8KIG9iai0kKENPTkZJR19MRURTX1BXTSkJCQkrPSBsZWRzLXB3bS5vCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGVkcy9sZWRzLWNsZXZvLW1haWwuYyBiL2RyaXZlcnMvbGVkcy9sZWRzLWNsZXZvLW1haWwuYwppbmRleCBmMjI0MmRiLi5hNDk4MTM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2xlZHMvbGVkcy1jbGV2by1tYWlsLmMKKysrIGIvZHJpdmVycy9sZWRzL2xlZHMtY2xldm8tbWFpbC5jCkBAIC0xNTMsNyArMTUzLDcgQEAKIAkuZmxhZ3MJCQk9IExFRF9DT1JFX1NVU1BFTkRSRVNVTUUsCiB9OwogCi1zdGF0aWMgaW50IF9faW5pdCBjbGV2b19tYWlsX2xlZF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorc3RhdGljIGludCBfX2RldmluaXQgY2xldm9fbWFpbF9sZWRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlyZXR1cm4gbGVkX2NsYXNzZGV2X3JlZ2lzdGVyKCZwZGV2LT5kZXYsICZjbGV2b19tYWlsX2xlZCk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvbGVkcy1jb2JhbHQtcXViZS5jIGIvZHJpdmVycy9sZWRzL2xlZHMtY29iYWx0LXF1YmUuYwppbmRleCAwNTlhYTI5Li44ODE2ODA2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2xlZHMvbGVkcy1jb2JhbHQtcXViZS5jCisrKyBiL2RyaXZlcnMvbGVkcy9sZWRzLWNvYmFsdC1xdWJlLmMKQEAgLTI4LDcgKzI4LDcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBsZWRfY2xhc3NkZXYgcXViZV9mcm9udF9sZWQgPSB7Ci0JLm5hbWUJCQk9ICJxdWJlLWZyb250IiwKKwkubmFtZQkJCT0gInF1YmU6OmZyb250IiwKIAkuYnJpZ2h0bmVzcwkJPSBMRURfRlVMTCwKIAkuYnJpZ2h0bmVzc19zZXQJCT0gcXViZV9mcm9udF9sZWRfc2V0LAogCS5kZWZhdWx0X3RyaWdnZXIJPSAiaWRlLWRpc2siLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9sZWRzL2xlZHMtY29iYWx0LXJhcS5jIGIvZHJpdmVycy9sZWRzL2xlZHMtY29iYWx0LXJhcS5jCmluZGV4IDVmMWNlODEuLmRlZmMyMTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbGVkcy9sZWRzLWNvYmFsdC1yYXEuYworKysgYi9kcml2ZXJzL2xlZHMvbGVkcy1jb2JhbHQtcmFxLmMKQEAgLTQ5LDcgKzQ5LDcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBsZWRfY2xhc3NkZXYgcmFxX3dlYl9sZWQgPSB7Ci0JLm5hbWUJCT0gInJhcS13ZWIiLAorCS5uYW1lCQk9ICJyYXE6OndlYiIsCiAJLmJyaWdodG5lc3Nfc2V0CT0gcmFxX3dlYl9sZWRfc2V0LAogfTsKIApAQCAtNzAsNyArNzAsNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IGxlZF9jbGFzc2RldiByYXFfcG93ZXJfb2ZmX2xlZCA9IHsKLQkubmFtZQkJCT0gInJhcS1wb3dlci1vZmYiLAorCS5uYW1lCQkJPSAicmFxOjpwb3dlci1vZmYiLAogCS5icmlnaHRuZXNzX3NldAkJPSByYXFfcG93ZXJfb2ZmX2xlZF9zZXQsCiAJLmRlZmF1bHRfdHJpZ2dlcgk9ICJwb3dlci1vZmYiLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGVkcy9sZWRzLWdwaW8uYyBiL2RyaXZlcnMvbGVkcy9sZWRzLWdwaW8uYwppbmRleCA2YjA2NjM4Li43NDY3OTgwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2xlZHMvbGVkcy1ncGlvLmMKKysrIGIvZHJpdmVycy9sZWRzL2xlZHMtZ3Bpby5jCkBAIC04MCw3ICs4MCw3IEBACiAKIAkvKiBza2lwIGxlZHMgdGhhdCBhcmVuJ3QgYXZhaWxhYmxlICovCiAJaWYgKCFncGlvX2lzX3ZhbGlkKHRlbXBsYXRlLT5ncGlvKSkgewotCQlwcmludGsoS0VSTl9JTkZPICJTa2lwcGluZyB1bmF2aWxhYmxlIExFRCBncGlvICVkICglcylcbiIsIAorCQlwcmludGsoS0VSTl9JTkZPICJTa2lwcGluZyB1bmF2YWlsYWJsZSBMRUQgZ3BpbyAlZCAoJXMpXG4iLAogCQkJCXRlbXBsYXRlLT5ncGlvLCB0ZW1wbGF0ZS0+bmFtZSk7CiAJCXJldHVybiAwOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGVkcy9sZWRzLXBjYTk1MzIuYyBiL2RyaXZlcnMvbGVkcy9sZWRzLXBjYTk1MzIuYwppbmRleCBkYmE4OTIxLi5hZGM1NjFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2xlZHMvbGVkcy1wY2E5NTMyLmMKKysrIGIvZHJpdmVycy9sZWRzL2xlZHMtcGNhOTUzMi5jCkBAIC0xOSw5ICsxOSw2IEBACiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAjaW5jbHVkZSA8bGludXgvbGVkcy1wY2E5NTMyLmg+CiAKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7IC8qMHg2MCwqLyBJMkNfQ0xJRU5UX0VORH07Ci1JMkNfQ0xJRU5UX0lOU01PRF8xKHBjYTk1MzIpOwotCiAjZGVmaW5lIFBDQTk1MzJfUkVHX1BTQyhpKSAoMHgyKyhpKSoyKQogI2RlZmluZSBQQ0E5NTMyX1JFR19QV00oaSkgKDB4MysoaSkqMikKICNkZWZpbmUgUENBOTUzMl9SRUdfTFMwICAweDYKQEAgLTM0LDcgKzMxLDcgQEAKIAlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OwogCXN0cnVjdCBwY2E5NTMyX2xlZCBsZWRzWzE2XTsKIAlzdHJ1Y3QgbXV0ZXggdXBkYXRlX2xvY2s7Ci0Jc3RydWN0IGlucHV0X2RldiAgICAqaWRldjsKKwlzdHJ1Y3QgaW5wdXRfZGV2ICppZGV2OwogCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOwogCXU4IHB3bVsyXTsKIAl1OCBwc2NbMl07CkBAIC01Myw5ICs1MCw5IEBACiAKIHN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBwY2E5NTMyX2RyaXZlciA9IHsKIAkuZHJpdmVyID0gewotCQkubmFtZSAgID0gInBjYTk1MzIiLAorCQkubmFtZSA9ICJwY2E5NTMyIiwKIAl9LAotCS5wcm9iZSAgPSBwY2E5NTMyX3Byb2JlLAorCS5wcm9iZSA9IHBjYTk1MzJfcHJvYmUsCiAJLnJlbW92ZSA9IHBjYTk1MzJfcmVtb3ZlLAogCS5pZF90YWJsZSA9IHBjYTk1MzJfaWQsCiB9OwpAQCAtMTQ5LDcgKzE0Niw3IEBACiAKIAlpZiAoKmRlbGF5X29uID09IDAgJiYgKmRlbGF5X29mZiA9PSAwKSB7CiAJLyogbGVkIHN1YnN5c3RlbSBhc2sgdXMgZm9yIGEgYmxpbmsgcmF0ZSAqLwotCQkqZGVsYXlfb24gID0gMTAwMDsKKwkJKmRlbGF5X29uID0gMTAwMDsKIAkJKmRlbGF5X29mZiA9IDEwMDA7CiAJfQogCWlmICgqZGVsYXlfb24gIT0gKmRlbGF5X29mZiB8fCAqZGVsYXlfb24gPiAxNjkwIHx8ICpkZWxheV9vbiA8IDYpCkBAIC0yMjcsNyArMjI0LDcgQEAKIAkJCWJyZWFrOwogCQljYXNlIFBDQTk1MzJfVFlQRV9MRUQ6CiAJCQlsZWQtPnN0YXRlID0gcGxlZC0+c3RhdGU7Ci0JCQlsZWQtPm5hbWUgPSAgcGxlZC0+bmFtZTsKKwkJCWxlZC0+bmFtZSA9IHBsZWQtPm5hbWU7CiAJCQlsZWQtPmxkZXYubmFtZSA9IGxlZC0+bmFtZTsKIAkJCWxlZC0+bGRldi5icmlnaHRuZXNzID0gTEVEX09GRjsKIAkJCWxlZC0+bGRldi5icmlnaHRuZXNzX3NldCA9IHBjYTk1MzJfc2V0X2JyaWdodG5lc3M7CkBAIC0yNTQsNyArMjUxLDcgQEAKIAkJCWRhdGEtPmlkZXYtPm5hbWUgPSBwbGVkLT5uYW1lOwogCQkJZGF0YS0+aWRldi0+cGh5cyA9ICJpMmMvcGNhOTUzMiI7CiAJCQlkYXRhLT5pZGV2LT5pZC5idXN0eXBlID0gQlVTX0hPU1Q7Ci0JCQlkYXRhLT5pZGV2LT5pZC52ZW5kb3IgID0gMHgwMDFmOworCQkJZGF0YS0+aWRldi0+aWQudmVuZG9yID0gMHgwMDFmOwogCQkJZGF0YS0+aWRldi0+aWQucHJvZHVjdCA9IDB4MDAwMTsKIAkJCWRhdGEtPmlkZXYtPmlkLnZlcnNpb24gPSAweDAxMDA7CiAJCQlkYXRhLT5pZGV2LT5ldmJpdFswXSA9IEJJVF9NQVNLKEVWX1NORCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvbGVkcy13bTgzMXgtc3RhdHVzLmMgYi9kcml2ZXJzL2xlZHMvbGVkcy13bTgzMXgtc3RhdHVzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzU4NmQwNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbGVkcy9sZWRzLXdtODMxeC1zdGF0dXMuYwpAQCAtMCwwICsxLDM0MSBAQAorLyoKKyAqIExFRCBkcml2ZXIgZm9yIFdNODMxeCBzdGF0dXMgTEVEcworICoKKyAqIENvcHlyaWdodChDKSAyMDA5IFdvbGZzb24gTWljcm9lbGVjdHJvbmljcyBQTEMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9sZWRzLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvbWZkL3dtODMxeC9jb3JlLmg+CisjaW5jbHVkZSA8bGludXgvbWZkL3dtODMxeC9wZGF0YS5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC93bTgzMXgvc3RhdHVzLmg+CisKKworc3RydWN0IHdtODMxeF9zdGF0dXMgeworCXN0cnVjdCBsZWRfY2xhc3NkZXYgY2RldjsKKwlzdHJ1Y3Qgd204MzF4ICp3bTgzMXg7CisJc3RydWN0IHdvcmtfc3RydWN0IHdvcms7CisJc3RydWN0IG11dGV4IG11dGV4OworCisJc3BpbmxvY2tfdCB2YWx1ZV9sb2NrOworCWludCByZWc7ICAgICAvKiBDb250cm9sIHJlZ2lzdGVyICovCisJaW50IHJlZ192YWw7IC8qIENvbnRyb2wgcmVnaXN0ZXIgdmFsdWUgKi8KKworCWludCBibGluazsKKwlpbnQgYmxpbmtfdGltZTsKKwlpbnQgYmxpbmtfY3ljOworCWludCBzcmM7CisJZW51bSBsZWRfYnJpZ2h0bmVzcyBicmlnaHRuZXNzOworfTsKKworI2RlZmluZSB0b193bTgzMXhfc3RhdHVzKGxlZF9jZGV2KSBcCisJY29udGFpbmVyX29mKGxlZF9jZGV2LCBzdHJ1Y3Qgd204MzF4X3N0YXR1cywgY2RldikKKworc3RhdGljIHZvaWQgd204MzF4X3N0YXR1c193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3Qgd204MzF4X3N0YXR1cyAqbGVkID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB3bTgzMXhfc3RhdHVzLAorCQkJCQkJIHdvcmspOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwltdXRleF9sb2NrKCZsZWQtPm11dGV4KTsKKworCWxlZC0+cmVnX3ZhbCAmPSB+KFdNODMxWF9MRURfU1JDX01BU0sgfCBXTTgzMVhfTEVEX01PREVfTUFTSyB8CisJCQkgIFdNODMxWF9MRURfRFVUWV9DWUNfTUFTSyB8IFdNODMxWF9MRURfRFVSX01BU0spOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmxlZC0+dmFsdWVfbG9jaywgZmxhZ3MpOworCisJbGVkLT5yZWdfdmFsIHw9IGxlZC0+c3JjIDw8IFdNODMxWF9MRURfU1JDX1NISUZUOworCWlmIChsZWQtPmJsaW5rKSB7CisJCWxlZC0+cmVnX3ZhbCB8PSAyIDw8IFdNODMxWF9MRURfTU9ERV9TSElGVDsKKwkJbGVkLT5yZWdfdmFsIHw9IGxlZC0+YmxpbmtfdGltZSA8PCBXTTgzMVhfTEVEX0RVUl9TSElGVDsKKwkJbGVkLT5yZWdfdmFsIHw9IGxlZC0+YmxpbmtfY3ljOworCX0gZWxzZSB7CisJCWlmIChsZWQtPmJyaWdodG5lc3MgIT0gTEVEX09GRikKKwkJCWxlZC0+cmVnX3ZhbCB8PSAxIDw8IFdNODMxWF9MRURfTU9ERV9TSElGVDsKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsZWQtPnZhbHVlX2xvY2ssIGZsYWdzKTsKKworCXdtODMxeF9yZWdfd3JpdGUobGVkLT53bTgzMXgsIGxlZC0+cmVnLCBsZWQtPnJlZ192YWwpOworCisJbXV0ZXhfdW5sb2NrKCZsZWQtPm11dGV4KTsKK30KKworc3RhdGljIHZvaWQgd204MzF4X3N0YXR1c19zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsCisJCQkgICBlbnVtIGxlZF9icmlnaHRuZXNzIHZhbHVlKQoreworCXN0cnVjdCB3bTgzMXhfc3RhdHVzICpsZWQgPSB0b193bTgzMXhfc3RhdHVzKGxlZF9jZGV2KTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmxlZC0+dmFsdWVfbG9jaywgZmxhZ3MpOworCWxlZC0+YnJpZ2h0bmVzcyA9IHZhbHVlOworCWlmICh2YWx1ZSA9PSBMRURfT0ZGKQorCQlsZWQtPmJsaW5rID0gMDsKKwlzY2hlZHVsZV93b3JrKCZsZWQtPndvcmspOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxlZC0+dmFsdWVfbG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgaW50IHdtODMxeF9zdGF0dXNfYmxpbmtfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LAorCQkJCSAgIHVuc2lnbmVkIGxvbmcgKmRlbGF5X29uLAorCQkJCSAgIHVuc2lnbmVkIGxvbmcgKmRlbGF5X29mZikKK3sKKwlzdHJ1Y3Qgd204MzF4X3N0YXR1cyAqbGVkID0gdG9fd204MzF4X3N0YXR1cyhsZWRfY2Rldik7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0ID0gMDsKKworCS8qIFBpY2sgc29tZSBkZWZhdWx0cyBpZiB3ZSd2ZSBub3QgYmVlbiBnaXZlbiB0aW1lcyAqLworCWlmICgqZGVsYXlfb24gPT0gMCAmJiAqZGVsYXlfb2ZmID09IDApIHsKKwkJKmRlbGF5X29uID0gMjUwOworCQkqZGVsYXlfb2ZmID0gMjUwOworCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZsZWQtPnZhbHVlX2xvY2ssIGZsYWdzKTsKKworCS8qIFdlIG9ubHkgaGF2ZSBhIGxpbWl0ZWQgc2VsZWN0aW9uIG9mIHNldHRpbmdzLCBzZWUgaWYgd2UgY2FuCisJICogc3VwcG9ydCB0aGUgY29uZmlndXJhdGlvbiB3ZSdyZSBiZWluZyBnaXZlbiAqLworCXN3aXRjaCAoKmRlbGF5X29uKSB7CisJY2FzZSAxMDAwOgorCQlsZWQtPmJsaW5rX3RpbWUgPSAwOworCQlicmVhazsKKwljYXNlIDI1MDoKKwkJbGVkLT5ibGlua190aW1lID0gMTsKKwkJYnJlYWs7CisJY2FzZSAxMjU6CisJCWxlZC0+YmxpbmtfdGltZSA9IDI7CisJCWJyZWFrOworCWNhc2UgNjI6CisJY2FzZSA2MzoKKwkJLyogQWN0dWFsbHkgNjIuNW1zICovCisJCWxlZC0+YmxpbmtfdGltZSA9IDM7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldCA9IC1FSU5WQUw7CisJCWJyZWFrOworCX0KKworCWlmIChyZXQgPT0gMCkgeworCQlzd2l0Y2ggKCpkZWxheV9vZmYgLyAqZGVsYXlfb24pIHsKKwkJY2FzZSAxOgorCQkJbGVkLT5ibGlua19jeWMgPSAwOworCQkJYnJlYWs7CisJCWNhc2UgMzoKKwkJCWxlZC0+YmxpbmtfY3ljID0gMTsKKwkJCWJyZWFrOworCQljYXNlIDQ6CisJCQlsZWQtPmJsaW5rX2N5YyA9IDI7CisJCQlicmVhazsKKwkJY2FzZSA4OgorCQkJbGVkLT5ibGlua19jeWMgPSAzOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXQgPSAtRUlOVkFMOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAocmV0ID09IDApCisJCWxlZC0+YmxpbmsgPSAxOworCWVsc2UKKwkJbGVkLT5ibGluayA9IDA7CisKKwkvKiBBbHdheXMgdXBkYXRlOyBpZiB3ZSBmYWlsIHR1cm4gb2ZmIGJsaW5raW5nIHNpbmNlIHdlIGV4cGVjdAorCSAqIGEgc29mdHdhcmUgZmFsbGJhY2suICovCisJc2NoZWR1bGVfd29yaygmbGVkLT53b3JrKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxlZC0+dmFsdWVfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKmxlZF9zcmNfdGV4dHNbXSA9IHsKKwkib3RwIiwKKwkicG93ZXIiLAorCSJjaGFyZ2VyIiwKKwkic29mdCIsCit9OworCitzdGF0aWMgc3NpemVfdCB3bTgzMXhfc3RhdHVzX3NyY19zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHdtODMxeF9zdGF0dXMgKmxlZCA9IHRvX3dtODMxeF9zdGF0dXMobGVkX2NkZXYpOworCWludCBpOworCXNzaXplX3QgcmV0ID0gMDsKKworCW11dGV4X2xvY2soJmxlZC0+bXV0ZXgpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobGVkX3NyY190ZXh0cyk7IGkrKykKKwkJaWYgKGkgPT0gbGVkLT5zcmMpCisJCQlyZXQgKz0gc3ByaW50ZigmYnVmW3JldF0sICJbJXNdICIsIGxlZF9zcmNfdGV4dHNbaV0pOworCQllbHNlCisJCQlyZXQgKz0gc3ByaW50ZigmYnVmW3JldF0sICIlcyAiLCBsZWRfc3JjX3RleHRzW2ldKTsKKworCW11dGV4X3VubG9jaygmbGVkLT5tdXRleCk7CisKKwlyZXQgKz0gc3ByaW50ZigmYnVmW3JldF0sICJcbiIpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHNzaXplX3Qgd204MzF4X3N0YXR1c19zcmNfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkgICAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSkKK3sKKwlzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCB3bTgzMXhfc3RhdHVzICpsZWQgPSB0b193bTgzMXhfc3RhdHVzKGxlZF9jZGV2KTsKKwljaGFyIG5hbWVbMjBdOworCWludCBpOworCXNpemVfdCBsZW47CisKKwluYW1lW3NpemVvZihuYW1lKSAtIDFdID0gJ1wwJzsKKwlzdHJuY3B5KG5hbWUsIGJ1Ziwgc2l6ZW9mKG5hbWUpIC0gMSk7CisJbGVuID0gc3RybGVuKG5hbWUpOworCisJaWYgKGxlbiAmJiBuYW1lW2xlbiAtIDFdID09ICdcbicpCisJCW5hbWVbbGVuIC0gMV0gPSAnXDAnOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobGVkX3NyY190ZXh0cyk7IGkrKykgeworCQlpZiAoIXN0cmNtcChuYW1lLCBsZWRfc3JjX3RleHRzW2ldKSkgeworCQkJbXV0ZXhfbG9jaygmbGVkLT5tdXRleCk7CisKKwkJCWxlZC0+c3JjID0gaTsKKwkJCXNjaGVkdWxlX3dvcmsoJmxlZC0+d29yayk7CisKKwkJCW11dGV4X3VubG9jaygmbGVkLT5tdXRleCk7CisJCX0KKwl9CisKKwlyZXR1cm4gc2l6ZTsKK30KKworc3RhdGljIERFVklDRV9BVFRSKHNyYywgMDY0NCwgd204MzF4X3N0YXR1c19zcmNfc2hvdywgd204MzF4X3N0YXR1c19zcmNfc3RvcmUpOworCitzdGF0aWMgaW50IHdtODMxeF9zdGF0dXNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgd204MzF4ICp3bTgzMXggPSBkZXZfZ2V0X2RydmRhdGEocGRldi0+ZGV2LnBhcmVudCk7CisJc3RydWN0IHdtODMxeF9wZGF0YSAqY2hpcF9wZGF0YTsKKwlzdHJ1Y3Qgd204MzF4X3N0YXR1c19wZGF0YSBwZGF0YTsKKwlzdHJ1Y3Qgd204MzF4X3N0YXR1cyAqZHJ2ZGF0YTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwlpbnQgaWQgPSBwZGV2LT5pZCAlIEFSUkFZX1NJWkUoY2hpcF9wZGF0YS0+c3RhdHVzKTsKKwlpbnQgcmV0OworCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfSU8sIDApOworCWlmIChyZXMgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJObyBJL08gcmVzb3VyY2VcbiIpOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGVycjsKKwl9CisKKwlkcnZkYXRhID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHdtODMxeF9zdGF0dXMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRydmRhdGEpCisJCXJldHVybiAtRU5PTUVNOworCWRldl9zZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2LCBkcnZkYXRhKTsKKworCWRydmRhdGEtPndtODMxeCA9IHdtODMxeDsKKwlkcnZkYXRhLT5yZWcgPSByZXMtPnN0YXJ0OworCisJaWYgKHdtODMxeC0+ZGV2LT5wbGF0Zm9ybV9kYXRhKQorCQljaGlwX3BkYXRhID0gd204MzF4LT5kZXYtPnBsYXRmb3JtX2RhdGE7CisJZWxzZQorCQljaGlwX3BkYXRhID0gTlVMTDsKKworCW1lbXNldCgmcGRhdGEsIDAsIHNpemVvZihwZGF0YSkpOworCWlmIChjaGlwX3BkYXRhICYmIGNoaXBfcGRhdGEtPnN0YXR1c1tpZF0pCisJCW1lbWNweSgmcGRhdGEsIGNoaXBfcGRhdGEtPnN0YXR1c1tpZF0sIHNpemVvZihwZGF0YSkpOworCWVsc2UKKwkJcGRhdGEubmFtZSA9IGRldl9uYW1lKCZwZGV2LT5kZXYpOworCisJbXV0ZXhfaW5pdCgmZHJ2ZGF0YS0+bXV0ZXgpOworCUlOSVRfV09SSygmZHJ2ZGF0YS0+d29yaywgd204MzF4X3N0YXR1c193b3JrKTsKKwlzcGluX2xvY2tfaW5pdCgmZHJ2ZGF0YS0+dmFsdWVfbG9jayk7CisKKwkvKiBXZSBjYWNoZSB0aGUgY29uZmlndXJhdGlvbiByZWdpc3RlciBhbmQgcmVhZCBzdGFydHVwIHZhbHVlcworCSAqIGZyb20gaXQuICovCisJZHJ2ZGF0YS0+cmVnX3ZhbCA9IHdtODMxeF9yZWdfcmVhZCh3bTgzMXgsIGRydmRhdGEtPnJlZyk7CisKKwlpZiAoZHJ2ZGF0YS0+cmVnX3ZhbCAmIFdNODMxWF9MRURfTU9ERV9NQVNLKQorCQlkcnZkYXRhLT5icmlnaHRuZXNzID0gTEVEX0ZVTEw7CisJZWxzZQorCQlkcnZkYXRhLT5icmlnaHRuZXNzID0gTEVEX09GRjsKKworCS8qIFNldCBhIGRlZmF1bHQgc291cmNlIGlmIGNvbmZpZ3VyZWQsIG90aGVyd2lzZSBsZWF2ZSB0aGUKKwkgKiBjdXJyZW50IGhhcmR3YXJlIHNldHRpbmcuCisJICovCisJaWYgKHBkYXRhLmRlZmF1bHRfc3JjID09IFdNODMxWF9TVEFUVVNfUFJFU0VSVkUpIHsKKwkJZHJ2ZGF0YS0+c3JjID0gZHJ2ZGF0YS0+cmVnX3ZhbDsKKwkJZHJ2ZGF0YS0+c3JjICY9IFdNODMxWF9MRURfU1JDX01BU0s7CisJCWRydmRhdGEtPnNyYyA+Pj0gV004MzFYX0xFRF9TUkNfU0hJRlQ7CisJfSBlbHNlIHsKKwkJZHJ2ZGF0YS0+c3JjID0gcGRhdGEuZGVmYXVsdF9zcmMgLSAxOworCX0KKworCWRydmRhdGEtPmNkZXYubmFtZSA9IHBkYXRhLm5hbWU7CisJZHJ2ZGF0YS0+Y2Rldi5kZWZhdWx0X3RyaWdnZXIgPSBwZGF0YS5kZWZhdWx0X3RyaWdnZXI7CisJZHJ2ZGF0YS0+Y2Rldi5icmlnaHRuZXNzX3NldCA9IHdtODMxeF9zdGF0dXNfc2V0OworCWRydmRhdGEtPmNkZXYuYmxpbmtfc2V0ID0gd204MzF4X3N0YXR1c19ibGlua19zZXQ7CisKKwlyZXQgPSBsZWRfY2xhc3NkZXZfcmVnaXN0ZXIod204MzF4LT5kZXYsICZkcnZkYXRhLT5jZGV2KTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgTEVEOiAlZFxuIiwgcmV0KTsKKwkJZ290byBlcnJfbGVkOworCX0KKworCXJldCA9IGRldmljZV9jcmVhdGVfZmlsZShkcnZkYXRhLT5jZGV2LmRldiwgJmRldl9hdHRyX3NyYyk7CisJaWYgKHJldCAhPSAwKQorCQlkZXZfZXJyKCZwZGV2LT5kZXYsCisJCQkiTm8gc291cmNlIGNvbnRyb2wgZm9yIExFRDogJWRcbiIsIHJldCk7CisKKwlyZXR1cm4gMDsKKworZXJyX2xlZDoKKwlsZWRfY2xhc3NkZXZfdW5yZWdpc3RlcigmZHJ2ZGF0YS0+Y2Rldik7CisJa2ZyZWUoZHJ2ZGF0YSk7CitlcnI6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCB3bTgzMXhfc3RhdHVzX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCB3bTgzMXhfc3RhdHVzICpkcnZkYXRhID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZHJ2ZGF0YS0+Y2Rldi5kZXYsICZkZXZfYXR0cl9zcmMpOworCWxlZF9jbGFzc2Rldl91bnJlZ2lzdGVyKCZkcnZkYXRhLT5jZGV2KTsKKwlrZnJlZShkcnZkYXRhKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB3bTgzMXhfc3RhdHVzX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkgICAubmFtZSA9ICJ3bTgzMXgtc3RhdHVzIiwKKwkJICAgLm93bmVyID0gVEhJU19NT0RVTEUsCisJCSAgIH0sCisJLnByb2JlID0gd204MzF4X3N0YXR1c19wcm9iZSwKKwkucmVtb3ZlID0gd204MzF4X3N0YXR1c19yZW1vdmUsCit9OworCitzdGF0aWMgaW50IF9fZGV2aW5pdCB3bTgzMXhfc3RhdHVzX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZ3bTgzMXhfc3RhdHVzX2RyaXZlcik7Cit9Cittb2R1bGVfaW5pdCh3bTgzMXhfc3RhdHVzX2luaXQpOworCitzdGF0aWMgdm9pZCB3bTgzMXhfc3RhdHVzX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigmd204MzF4X3N0YXR1c19kcml2ZXIpOworfQorbW9kdWxlX2V4aXQod204MzF4X3N0YXR1c19leGl0KTsKKworTU9EVUxFX0FVVEhPUigiTWFyayBCcm93biA8YnJvb25pZUBvcGVuc291cmNlLndvbGZzb25taWNyby5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIldNODMxeCBzdGF0dXMgTEVEIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTp3bTgzMXgtc3RhdHVzIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvbGVkdHJpZy1ncGlvLmMgYi9kcml2ZXJzL2xlZHMvbGVkdHJpZy1ncGlvLmMKaW5kZXggMWJjNWRiNC4uZjU5MTMzNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9sZWRzL2xlZHRyaWctZ3Bpby5jCisrKyBiL2RyaXZlcnMvbGVkcy9sZWR0cmlnLWdwaW8uYwpAQCAtNDQsMjIgKzQ0LDIyIEBACiAJCQlzdHJ1Y3QgZ3Bpb190cmlnX2RhdGEsIHdvcmspOwogCWludCB0bXA7CiAKLSAgICAgICBpZiAoIWdwaW9fZGF0YS0+Z3BpbykKLQkgICAgICAgcmV0dXJuOworCWlmICghZ3Bpb19kYXRhLT5ncGlvKQorCQlyZXR1cm47CiAKLSAgICAgICB0bXAgPSBncGlvX2dldF92YWx1ZShncGlvX2RhdGEtPmdwaW8pOwotICAgICAgIGlmIChncGlvX2RhdGEtPmludmVydGVkKQotCSAgICAgICB0bXAgPSAhdG1wOworCXRtcCA9IGdwaW9fZ2V0X3ZhbHVlKGdwaW9fZGF0YS0+Z3Bpbyk7CisJaWYgKGdwaW9fZGF0YS0+aW52ZXJ0ZWQpCisJCXRtcCA9ICF0bXA7CiAKLSAgICAgICBpZiAodG1wKSB7Ci0gICAgICAgICAgICAgICBpZiAoZ3Bpb19kYXRhLT5kZXNpcmVkX2JyaWdodG5lc3MpCi0gICAgICAgICAgICAgICAgICAgICAgIGxlZF9zZXRfYnJpZ2h0bmVzcyhncGlvX2RhdGEtPmxlZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwaW9fZGF0YS0+ZGVzaXJlZF9icmlnaHRuZXNzKTsKLSAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgbGVkX3NldF9icmlnaHRuZXNzKGdwaW9fZGF0YS0+bGVkLCBMRURfRlVMTCk7Ci0gICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgIGxlZF9zZXRfYnJpZ2h0bmVzcyhncGlvX2RhdGEtPmxlZCwgTEVEX09GRik7Ci0gICAgICAgfQorCWlmICh0bXApIHsKKwkJaWYgKGdwaW9fZGF0YS0+ZGVzaXJlZF9icmlnaHRuZXNzKQorCQkJbGVkX3NldF9icmlnaHRuZXNzKGdwaW9fZGF0YS0+bGVkLAorCQkJCQkgICBncGlvX2RhdGEtPmRlc2lyZWRfYnJpZ2h0bmVzcyk7CisJCWVsc2UKKwkJCWxlZF9zZXRfYnJpZ2h0bmVzcyhncGlvX2RhdGEtPmxlZCwgTEVEX0ZVTEwpOworCX0gZWxzZSB7CisJCWxlZF9zZXRfYnJpZ2h0bmVzcyhncGlvX2RhdGEtPmxlZCwgTEVEX09GRik7CisJfQogfQogCiBzdGF0aWMgc3NpemVfdCBncGlvX3RyaWdfYnJpZ2h0bmVzc19zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGd1ZXN0L2ludGVycnVwdHNfYW5kX3RyYXBzLmMgYi9kcml2ZXJzL2xndWVzdC9pbnRlcnJ1cHRzX2FuZF90cmFwcy5jCmluZGV4IDE4NjQ4MTguLmRhYWY4NjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbGd1ZXN0L2ludGVycnVwdHNfYW5kX3RyYXBzLmMKKysrIGIvZHJpdmVycy9sZ3Vlc3QvaW50ZXJydXB0c19hbmRfdHJhcHMuYwpAQCAtMTYsNiArMTYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgImxnLmgiCiAKIC8qIEFsbG93IEd1ZXN0cyB0byB1c2UgYSBub24tMTI4IChpZS4gbm9uLUxpbnV4KSBzeXNjYWxsIHRyYXAuICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2xndWVzdC9sZ3Vlc3RfdXNlci5jIGIvZHJpdmVycy9sZ3Vlc3QvbGd1ZXN0X3VzZXIuYwppbmRleCBiNGQzZjdjLi5iZDE2MzIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2xndWVzdC9sZ3Vlc3RfdXNlci5jCisrKyBiL2RyaXZlcnMvbGd1ZXN0L2xndWVzdF91c2VyLmMKQEAgLTUwOCw3ICs1MDgsNyBAQAogICogdXNlczogcmVhZGluZyBhbmQgd3JpdGluZyBhIGNoYXJhY3RlciBkZXZpY2UgY2FsbGVkIC9kZXYvbGd1ZXN0LiAgQWxsIHRoZQogICogd29yayBoYXBwZW5zIGluIHRoZSByZWFkKCksIHdyaXRlKCkgYW5kIGNsb3NlKCkgcm91dGluZXM6CiAgKi8KLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGxndWVzdF9mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbGd1ZXN0X2ZvcHMgPSB7CiAJLm93bmVyCSA9IFRISVNfTU9EVUxFLAogCS5yZWxlYXNlID0gY2xvc2UsCiAJLndyaXRlCSA9IHdyaXRlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tYWNpbnRvc2gvdGhlcm1fYWR0NzQ2eC5jIGIvZHJpdmVycy9tYWNpbnRvc2gvdGhlcm1fYWR0NzQ2eC5jCmluZGV4IGZkZTM3N2MuLjU1NmYwZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWFjaW50b3NoL3RoZXJtX2FkdDc0NnguYworKysgYi9kcml2ZXJzL21hY2ludG9zaC90aGVybV9hZHQ3NDZ4LmMKQEAgLTEyNCw2ICsxMjQsOCBAQAogCXJldHVybiBkYXRhOwogfQogCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgdGhlcm1vc3RhdF9kcml2ZXI7CisKIHN0YXRpYyBpbnQKIGF0dGFjaF90aGVybW9zdGF0KHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcikKIHsKQEAgLTE0OCw3ICsxNTAsNyBAQAogCSAqIExldCBpMmMtY29yZSBkZWxldGUgdGhhdCBkZXZpY2Ugb24gZHJpdmVyIHJlbW92YWwuCiAJICogVGhpcyBpcyBzYWZlIGJlY2F1c2UgaTJjLWNvcmUgaG9sZHMgdGhlIGNvcmVfbG9jayBtdXRleCBmb3IgdXMuCiAJICovCi0JbGlzdF9hZGRfdGFpbCgmY2xpZW50LT5kZXRlY3RlZCwgJmNsaWVudC0+ZHJpdmVyLT5jbGllbnRzKTsKKwlsaXN0X2FkZF90YWlsKCZjbGllbnQtPmRldGVjdGVkLCAmdGhlcm1vc3RhdF9kcml2ZXIuY2xpZW50cyk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWFjaW50b3NoL3RoZXJtX3BtNzIuYyBiL2RyaXZlcnMvbWFjaW50b3NoL3RoZXJtX3BtNzIuYwppbmRleCBhMDI4NTk4Li5lYTMyYzdlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21hY2ludG9zaC90aGVybV9wbTcyLmMKKysrIGIvZHJpdmVycy9tYWNpbnRvc2gvdGhlcm1fcG03Mi5jCkBAIC0yODYsNiArMjg2LDggQEAKIAl9LAogfTsKIAorc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHRoZXJtX3BtNzJfZHJpdmVyOworCiAvKgogICogVXRpbGl0eSBmdW5jdGlvbiB0byBjcmVhdGUgYW4gaTJjX2NsaWVudCBzdHJ1Y3R1cmUgYW5kCiAgKiBhdHRhY2ggaXQgdG8gb25lIG9mIHUzIGFkYXB0ZXJzCkBAIC0zMTgsNyArMzIwLDcgQEAKIAkgKiBMZXQgaTJjLWNvcmUgZGVsZXRlIHRoYXQgZGV2aWNlIG9uIGRyaXZlciByZW1vdmFsLgogCSAqIFRoaXMgaXMgc2FmZSBiZWNhdXNlIGkyYy1jb3JlIGhvbGRzIHRoZSBjb3JlX2xvY2sgbXV0ZXggZm9yIHVzLgogCSAqLwotCWxpc3RfYWRkX3RhaWwoJmNsdC0+ZGV0ZWN0ZWQsICZjbHQtPmRyaXZlci0+Y2xpZW50cyk7CisJbGlzdF9hZGRfdGFpbCgmY2x0LT5kZXRlY3RlZCwgJnRoZXJtX3BtNzJfZHJpdmVyLmNsaWVudHMpOwogCXJldHVybiBjbHQ7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWFjaW50b3NoL3ZpYS1wbXUtbGVkLmMgYi9kcml2ZXJzL21hY2ludG9zaC92aWEtcG11LWxlZC5jCmluZGV4IDU1YWQ5NTYuLmQyNDI5NzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWFjaW50b3NoL3ZpYS1wbXUtbGVkLmMKKysrIGIvZHJpdmVycy9tYWNpbnRvc2gvdmlhLXBtdS1sZWQuYwpAQCAtNzIsNyArNzIsNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IGxlZF9jbGFzc2RldiBwbXVfbGVkID0gewotCS5uYW1lID0gInBtdS1mcm9udC1sZWQiLAorCS5uYW1lID0gInBtdS1sZWQ6OmZyb250IiwKICNpZmRlZiBDT05GSUdfQURCX1BNVV9MRURfSURFCiAJLmRlZmF1bHRfdHJpZ2dlciA9ICJpZGUtZGlzayIsCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWFjaW50b3NoL3ZpYS1wbXUuYyBiL2RyaXZlcnMvbWFjaW50b3NoL3ZpYS1wbXUuYwppbmRleCBiNDBmYjliLi42ZjMwOGE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21hY2ludG9zaC92aWEtcG11LmMKKysrIGIvZHJpdmVycy9tYWNpbnRvc2gvdmlhLXBtdS5jCkBAIC00MDUsNyArNDA1LDExIEBACiAJCXByaW50ayhLRVJOX0VSUiAidmlhLXBtdTogY2FuJ3QgbWFwIGludGVycnVwdFxuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KLQlpZiAocmVxdWVzdF9pcnEoaXJxLCB2aWFfcG11X2ludGVycnVwdCwgMCwgIlZJQS1QTVUiLCAodm9pZCAqKTApKSB7CisJLyogV2Ugc2V0IElSUUZfVElNRVIgYmVjYXVzZSB3ZSBkb24ndCB3YW50IHRoZSBpbnRlcnJ1cHQgdG8gYmUgZGlzYWJsZWQKKwkgKiBiZXR3ZWVuIHRoZSAyIHBhc3NlcyBvZiBkcml2ZXIgc3VzcGVuZCwgd2UgY29udHJvbCBvdXIgb3duIGRpc2FibGluZworCSAqIGZvciB0aGF0IG9uZQorCSAqLworCWlmIChyZXF1ZXN0X2lycShpcnEsIHZpYV9wbXVfaW50ZXJydXB0LCBJUlFGX1RJTUVSLCAiVklBLVBNVSIsICh2b2lkICopMCkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJ2aWEtcG11OiBjYW4ndCByZXF1ZXN0IGlycSAlZFxuIiwgaXJxKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQpAQCAtNDE5LDcgKzQyMyw3IEBACiAJCQlncGlvX2lycSA9IGlycV9vZl9wYXJzZV9hbmRfbWFwKGdwaW9fbm9kZSwgMCk7CiAKIAkJaWYgKGdwaW9faXJxICE9IE5PX0lSUSkgewotCQkJaWYgKHJlcXVlc3RfaXJxKGdwaW9faXJxLCBncGlvMV9pbnRlcnJ1cHQsIDAsCisJCQlpZiAocmVxdWVzdF9pcnEoZ3Bpb19pcnEsIGdwaW8xX2ludGVycnVwdCwgSVJRRl9USU1FUiwKIAkJCQkJIkdQSU8xIEFEQiIsICh2b2lkICopMCkpCiAJCQkJcHJpbnRrKEtFUk5fRVJSICJwbXU6IGNhbid0IGdldCBpcnEgJWQiCiAJCQkJICAgICAgICIgKEdQSU8xKVxuIiwgZ3Bpb19pcnEpOwpAQCAtOTI1LDggKzkyOSw3IEBACiAKICNpZmRlZiBDT05GSUdfQURCCiAvKiBTZW5kIGFuIEFEQiBjb21tYW5kICovCi1zdGF0aWMgaW50Ci1wbXVfc2VuZF9yZXF1ZXN0KHN0cnVjdCBhZGJfcmVxdWVzdCAqcmVxLCBpbnQgc3luYykKK3N0YXRpYyBpbnQgcG11X3NlbmRfcmVxdWVzdChzdHJ1Y3QgYWRiX3JlcXVlc3QgKnJlcSwgaW50IHN5bmMpCiB7CiAJaW50IGksIHJldDsKIApAQCAtMTAwNSwxNiArMTAwOCwxMSBAQAogfQogCiAvKiBFbmFibGUvZGlzYWJsZSBhdXRvcG9sbGluZyAqLwotc3RhdGljIGludAotcG11X2FkYl9hdXRvcG9sbChpbnQgZGV2cykKK3N0YXRpYyBpbnQgX19wbXVfYWRiX2F1dG9wb2xsKGludCBkZXZzKQogewogCXN0cnVjdCBhZGJfcmVxdWVzdCByZXE7CiAKLQlpZiAoKHZpYXMgPT0gTlVMTCkgfHwgKCFwbXVfZnVsbHlfaW5pdGVkKSB8fCAhcG11X2hhc19hZGIpCi0JCXJldHVybiAtRU5YSU87Ci0KIAlpZiAoZGV2cykgewotCQlhZGJfZGV2X21hcCA9IGRldnM7CiAJCXBtdV9yZXF1ZXN0KCZyZXEsIE5VTEwsIDUsIFBNVV9BREJfQ01ELCAwLCAweDg2LAogCQkJICAgIGFkYl9kZXZfbWFwID4+IDgsIGFkYl9kZXZfbWFwKTsKIAkJcG11X2FkYl9mbGFncyA9IDI7CkBAIC0xMDI3LDkgKzEwMjUsMTcgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBwbXVfYWRiX2F1dG9wb2xsKGludCBkZXZzKQoreworCWlmICgodmlhcyA9PSBOVUxMKSB8fCAoIXBtdV9mdWxseV9pbml0ZWQpIHx8ICFwbXVfaGFzX2FkYikKKwkJcmV0dXJuIC1FTlhJTzsKKworCWFkYl9kZXZfbWFwID0gZGV2czsKKwlyZXR1cm4gX19wbXVfYWRiX2F1dG9wb2xsKGRldnMpOworfQorCiAvKiBSZXNldCB0aGUgQURCIGJ1cyAqLwotc3RhdGljIGludAotcG11X2FkYl9yZXNldF9idXModm9pZCkKK3N0YXRpYyBpbnQgcG11X2FkYl9yZXNldF9idXModm9pZCkKIHsKIAlzdHJ1Y3QgYWRiX3JlcXVlc3QgcmVxOwogCWludCBzYXZlX2F1dG9wb2xsID0gYWRiX2Rldl9tYXA7CkBAIC0xMDM4LDEzICsxMDQ0LDEzIEBACiAJCXJldHVybiAtRU5YSU87CiAKIAkvKiBhbnlvbmUgZ290IGEgYmV0dGVyIGlkZWE/PyAqLwotCXBtdV9hZGJfYXV0b3BvbGwoMCk7CisJX19wbXVfYWRiX2F1dG9wb2xsKDApOwogCi0JcmVxLm5ieXRlcyA9IDU7CisJcmVxLm5ieXRlcyA9IDQ7CiAJcmVxLmRvbmUgPSBOVUxMOwogCXJlcS5kYXRhWzBdID0gUE1VX0FEQl9DTUQ7Ci0JcmVxLmRhdGFbMV0gPSAwOwotCXJlcS5kYXRhWzJdID0gQURCX0JVU1JFU0VUOworCXJlcS5kYXRhWzFdID0gQURCX0JVU1JFU0VUOworCXJlcS5kYXRhWzJdID0gMDsKIAlyZXEuZGF0YVszXSA9IDA7CiAJcmVxLmRhdGFbNF0gPSAwOwogCXJlcS5yZXBseV9sZW4gPSAwOwpAQCAtMTA1Niw3ICsxMDYyLDcgQEAKIAlwbXVfd2FpdF9jb21wbGV0ZSgmcmVxKTsKIAogCWlmIChzYXZlX2F1dG9wb2xsICE9IDApCi0JCXBtdV9hZGJfYXV0b3BvbGwoc2F2ZV9hdXRvcG9sbCk7CisJCV9fcG11X2FkYl9hdXRvcG9sbChzYXZlX2F1dG9wb2xsKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tYWNpbnRvc2gvd2luZGZhcm1fbG03NV9zZW5zb3IuYyBiL2RyaXZlcnMvbWFjaW50b3NoL3dpbmRmYXJtX2xtNzVfc2Vuc29yLmMKaW5kZXggNTI5ODg2Yy4uZWQ2NDI2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tYWNpbnRvc2gvd2luZGZhcm1fbG03NV9zZW5zb3IuYworKysgYi9kcml2ZXJzL21hY2ludG9zaC93aW5kZmFybV9sbTc1X3NlbnNvci5jCkBAIC0xMTUsNiArMTE1LDggQEAKIAlyZXR1cm4gcmM7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciB3Zl9sbTc1X2RyaXZlcjsKKwogc3RhdGljIHN0cnVjdCBpMmNfY2xpZW50ICp3Zl9sbTc1X2NyZWF0ZShzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsCiAJCQkJCSAgICAgdTggYWRkciwgaW50IGRzMTc3NSwKIAkJCQkJICAgICBjb25zdCBjaGFyICpsb2MpCkBAIC0xNTcsNyArMTU5LDcgQEAKIAkgKiBMZXQgaTJjLWNvcmUgZGVsZXRlIHRoYXQgZGV2aWNlIG9uIGRyaXZlciByZW1vdmFsLgogCSAqIFRoaXMgaXMgc2FmZSBiZWNhdXNlIGkyYy1jb3JlIGhvbGRzIHRoZSBjb3JlX2xvY2sgbXV0ZXggZm9yIHVzLgogCSAqLwotCWxpc3RfYWRkX3RhaWwoJmNsaWVudC0+ZGV0ZWN0ZWQsICZjbGllbnQtPmRyaXZlci0+Y2xpZW50cyk7CisJbGlzdF9hZGRfdGFpbCgmY2xpZW50LT5kZXRlY3RlZCwgJndmX2xtNzVfZHJpdmVyLmNsaWVudHMpOwogCXJldHVybiBjbGllbnQ7CiAgZmFpbDoKIAlyZXR1cm4gTlVMTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWFjaW50b3NoL3dpbmRmYXJtX21heDY2OTBfc2Vuc29yLmMgYi9kcml2ZXJzL21hY2ludG9zaC93aW5kZmFybV9tYXg2NjkwX3NlbnNvci5jCmluZGV4IGUyYTU1ZWMuLmE2N2IzNDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWFjaW50b3NoL3dpbmRmYXJtX21heDY2OTBfc2Vuc29yLmMKKysrIGIvZHJpdmVycy9tYWNpbnRvc2gvd2luZGZhcm1fbWF4NjY5MF9zZW5zb3IuYwpAQCAtODgsNiArODgsOCBAQAogCXJldHVybiByYzsKIH0KIAorc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHdmX21heDY2OTBfZHJpdmVyOworCiBzdGF0aWMgc3RydWN0IGkyY19jbGllbnQgKndmX21heDY2OTBfY3JlYXRlKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciwKIAkJCQkJICAgIHU4IGFkZHIsIGNvbnN0IGNoYXIgKmxvYykKIHsKQEAgLTExOSw3ICsxMjEsNyBAQAogCSAqIExldCBpMmMtY29yZSBkZWxldGUgdGhhdCBkZXZpY2Ugb24gZHJpdmVyIHJlbW92YWwuCiAJICogVGhpcyBpcyBzYWZlIGJlY2F1c2UgaTJjLWNvcmUgaG9sZHMgdGhlIGNvcmVfbG9jayBtdXRleCBmb3IgdXMuCiAJICovCi0JbGlzdF9hZGRfdGFpbCgmY2xpZW50LT5kZXRlY3RlZCwgJmNsaWVudC0+ZHJpdmVyLT5jbGllbnRzKTsKKwlsaXN0X2FkZF90YWlsKCZjbGllbnQtPmRldGVjdGVkLCAmd2ZfbWF4NjY5MF9kcml2ZXIuY2xpZW50cyk7CiAJcmV0dXJuIGNsaWVudDsKIAogIGZhaWw6CmRpZmYgLS1naXQgYS9kcml2ZXJzL21hY2ludG9zaC93aW5kZmFybV9zbXVfc2F0LmMgYi9kcml2ZXJzL21hY2ludG9zaC93aW5kZmFybV9zbXVfc2F0LmMKaW5kZXggNWRhNzI5ZS4uZTIwMzMwYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tYWNpbnRvc2gvd2luZGZhcm1fc211X3NhdC5jCisrKyBiL2RyaXZlcnMvbWFjaW50b3NoL3dpbmRmYXJtX3NtdV9zYXQuYwpAQCAtMTk0LDYgKzE5NCw4IEBACiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogfTsKIAorc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHdmX3NhdF9kcml2ZXI7CisKIHN0YXRpYyB2b2lkIHdmX3NhdF9jcmVhdGUoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKmRldikKIHsKIAlzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gaW5mbzsKQEAgLTIyMiw3ICsyMjQsNyBAQAogCSAqIExldCBpMmMtY29yZSBkZWxldGUgdGhhdCBkZXZpY2Ugb24gZHJpdmVyIHJlbW92YWwuCiAJICogVGhpcyBpcyBzYWZlIGJlY2F1c2UgaTJjLWNvcmUgaG9sZHMgdGhlIGNvcmVfbG9jayBtdXRleCBmb3IgdXMuCiAJICovCi0JbGlzdF9hZGRfdGFpbCgmY2xpZW50LT5kZXRlY3RlZCwgJmNsaWVudC0+ZHJpdmVyLT5jbGllbnRzKTsKKwlsaXN0X2FkZF90YWlsKCZjbGllbnQtPmRldGVjdGVkLCAmd2Zfc2F0X2RyaXZlci5jbGllbnRzKTsKIH0KIAogc3RhdGljIGludCB3Zl9zYXRfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvTWFrZWZpbGUgYi9kcml2ZXJzL21kL01ha2VmaWxlCmluZGV4IDFkYzQxODUuLmUzNTVlN2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tZC9NYWtlZmlsZQpAQCAtNDYsNyArNDYsNyBAQAogb2JqLSQoQ09ORklHX0RNX1pFUk8pCQkrPSBkbS16ZXJvLm8KIAogcXVpZXRfY21kX3Vucm9sbCA9IFVOUk9MTCAgJEAKLSAgICAgIGNtZF91bnJvbGwgPSAkKFBFUkwpICQoc3JjdHJlZSkvJChzcmMpL3Vucm9sbC5wbCAkKFVOUk9MTCkgXAorICAgICAgY21kX3Vucm9sbCA9ICQoQVdLKSAtZiQoc3JjdHJlZSkvJChzcmMpL3Vucm9sbC5hd2sgLXZOPSQoVU5ST0xMKSBcCiAgICAgICAgICAgICAgICAgICAgPCAkPCA+ICRAIHx8ICggcm0gLWYgJEAgJiYgZXhpdCAxICkKIAogaWZlcSAoJChDT05GSUdfQUxUSVZFQykseSkKQEAgLTU5LDU2ICs1OSw1NiBAQAogCiB0YXJnZXRzICs9IHJhaWQ2aW50MS5jCiAkKG9iaikvcmFpZDZpbnQxLmM6ICAgVU5ST0xMIDo9IDEKLSQob2JqKS9yYWlkNmludDEuYzogICAkKHNyYykvcmFpZDZpbnQudWMgJChzcmMpL3Vucm9sbC5wbCBGT1JDRQorJChvYmopL3JhaWQ2aW50MS5jOiAgICQoc3JjKS9yYWlkNmludC51YyAkKHNyYykvdW5yb2xsLmF3ayBGT1JDRQogCSQoY2FsbCBpZl9jaGFuZ2VkLHVucm9sbCkKIAogdGFyZ2V0cyArPSByYWlkNmludDIuYwogJChvYmopL3JhaWQ2aW50Mi5jOiAgIFVOUk9MTCA6PSAyCi0kKG9iaikvcmFpZDZpbnQyLmM6ICAgJChzcmMpL3JhaWQ2aW50LnVjICQoc3JjKS91bnJvbGwucGwgRk9SQ0UKKyQob2JqKS9yYWlkNmludDIuYzogICAkKHNyYykvcmFpZDZpbnQudWMgJChzcmMpL3Vucm9sbC5hd2sgRk9SQ0UKIAkkKGNhbGwgaWZfY2hhbmdlZCx1bnJvbGwpCiAKIHRhcmdldHMgKz0gcmFpZDZpbnQ0LmMKICQob2JqKS9yYWlkNmludDQuYzogICBVTlJPTEwgOj0gNAotJChvYmopL3JhaWQ2aW50NC5jOiAgICQoc3JjKS9yYWlkNmludC51YyAkKHNyYykvdW5yb2xsLnBsIEZPUkNFCiskKG9iaikvcmFpZDZpbnQ0LmM6ICAgJChzcmMpL3JhaWQ2aW50LnVjICQoc3JjKS91bnJvbGwuYXdrIEZPUkNFCiAJJChjYWxsIGlmX2NoYW5nZWQsdW5yb2xsKQogCiB0YXJnZXRzICs9IHJhaWQ2aW50OC5jCiAkKG9iaikvcmFpZDZpbnQ4LmM6ICAgVU5ST0xMIDo9IDgKLSQob2JqKS9yYWlkNmludDguYzogICAkKHNyYykvcmFpZDZpbnQudWMgJChzcmMpL3Vucm9sbC5wbCBGT1JDRQorJChvYmopL3JhaWQ2aW50OC5jOiAgICQoc3JjKS9yYWlkNmludC51YyAkKHNyYykvdW5yb2xsLmF3ayBGT1JDRQogCSQoY2FsbCBpZl9jaGFuZ2VkLHVucm9sbCkKIAogdGFyZ2V0cyArPSByYWlkNmludDE2LmMKICQob2JqKS9yYWlkNmludDE2LmM6ICBVTlJPTEwgOj0gMTYKLSQob2JqKS9yYWlkNmludDE2LmM6ICAkKHNyYykvcmFpZDZpbnQudWMgJChzcmMpL3Vucm9sbC5wbCBGT1JDRQorJChvYmopL3JhaWQ2aW50MTYuYzogICQoc3JjKS9yYWlkNmludC51YyAkKHNyYykvdW5yb2xsLmF3ayBGT1JDRQogCSQoY2FsbCBpZl9jaGFuZ2VkLHVucm9sbCkKIAogdGFyZ2V0cyArPSByYWlkNmludDMyLmMKICQob2JqKS9yYWlkNmludDMyLmM6ICBVTlJPTEwgOj0gMzIKLSQob2JqKS9yYWlkNmludDMyLmM6ICAkKHNyYykvcmFpZDZpbnQudWMgJChzcmMpL3Vucm9sbC5wbCBGT1JDRQorJChvYmopL3JhaWQ2aW50MzIuYzogICQoc3JjKS9yYWlkNmludC51YyAkKHNyYykvdW5yb2xsLmF3ayBGT1JDRQogCSQoY2FsbCBpZl9jaGFuZ2VkLHVucm9sbCkKIAogQ0ZMQUdTX3JhaWQ2YWx0aXZlYzEubyArPSAkKGFsdGl2ZWNfZmxhZ3MpCiB0YXJnZXRzICs9IHJhaWQ2YWx0aXZlYzEuYwogJChvYmopL3JhaWQ2YWx0aXZlYzEuYzogICBVTlJPTEwgOj0gMQotJChvYmopL3JhaWQ2YWx0aXZlYzEuYzogICAkKHNyYykvcmFpZDZhbHRpdmVjLnVjICQoc3JjKS91bnJvbGwucGwgRk9SQ0UKKyQob2JqKS9yYWlkNmFsdGl2ZWMxLmM6ICAgJChzcmMpL3JhaWQ2YWx0aXZlYy51YyAkKHNyYykvdW5yb2xsLmF3ayBGT1JDRQogCSQoY2FsbCBpZl9jaGFuZ2VkLHVucm9sbCkKIAogQ0ZMQUdTX3JhaWQ2YWx0aXZlYzIubyArPSAkKGFsdGl2ZWNfZmxhZ3MpCiB0YXJnZXRzICs9IHJhaWQ2YWx0aXZlYzIuYwogJChvYmopL3JhaWQ2YWx0aXZlYzIuYzogICBVTlJPTEwgOj0gMgotJChvYmopL3JhaWQ2YWx0aXZlYzIuYzogICAkKHNyYykvcmFpZDZhbHRpdmVjLnVjICQoc3JjKS91bnJvbGwucGwgRk9SQ0UKKyQob2JqKS9yYWlkNmFsdGl2ZWMyLmM6ICAgJChzcmMpL3JhaWQ2YWx0aXZlYy51YyAkKHNyYykvdW5yb2xsLmF3ayBGT1JDRQogCSQoY2FsbCBpZl9jaGFuZ2VkLHVucm9sbCkKIAogQ0ZMQUdTX3JhaWQ2YWx0aXZlYzQubyArPSAkKGFsdGl2ZWNfZmxhZ3MpCiB0YXJnZXRzICs9IHJhaWQ2YWx0aXZlYzQuYwogJChvYmopL3JhaWQ2YWx0aXZlYzQuYzogICBVTlJPTEwgOj0gNAotJChvYmopL3JhaWQ2YWx0aXZlYzQuYzogICAkKHNyYykvcmFpZDZhbHRpdmVjLnVjICQoc3JjKS91bnJvbGwucGwgRk9SQ0UKKyQob2JqKS9yYWlkNmFsdGl2ZWM0LmM6ICAgJChzcmMpL3JhaWQ2YWx0aXZlYy51YyAkKHNyYykvdW5yb2xsLmF3ayBGT1JDRQogCSQoY2FsbCBpZl9jaGFuZ2VkLHVucm9sbCkKIAogQ0ZMQUdTX3JhaWQ2YWx0aXZlYzgubyArPSAkKGFsdGl2ZWNfZmxhZ3MpCiB0YXJnZXRzICs9IHJhaWQ2YWx0aXZlYzguYwogJChvYmopL3JhaWQ2YWx0aXZlYzguYzogICBVTlJPTEwgOj0gOAotJChvYmopL3JhaWQ2YWx0aXZlYzguYzogICAkKHNyYykvcmFpZDZhbHRpdmVjLnVjICQoc3JjKS91bnJvbGwucGwgRk9SQ0UKKyQob2JqKS9yYWlkNmFsdGl2ZWM4LmM6ICAgJChzcmMpL3JhaWQ2YWx0aXZlYy51YyAkKHNyYykvdW5yb2xsLmF3ayBGT1JDRQogCSQoY2FsbCBpZl9jaGFuZ2VkLHVucm9sbCkKIAogcXVpZXRfY21kX21rdGFibGUgPSBUQUJMRSAgICRACmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2JpdG1hcC5jIGIvZHJpdmVycy9tZC9iaXRtYXAuYwppbmRleCA2OTg2YjAwLi42MGUyYjMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2JpdG1hcC5jCisrKyBiL2RyaXZlcnMvbWQvYml0bWFwLmMKQEAgLTE2MjQsMTAgKzE2MjQsMTEgQEAKIAliaXRtYXAtPm9mZnNldCA9IG1kZGV2LT5iaXRtYXBfb2Zmc2V0OwogCWlmIChmaWxlKSB7CiAJCWdldF9maWxlKGZpbGUpOwotCQlkb19zeW5jX21hcHBpbmdfcmFuZ2UoZmlsZS0+Zl9tYXBwaW5nLCAwLCBMTE9OR19NQVgsCi0JCQkJICAgICAgU1lOQ19GSUxFX1JBTkdFX1dBSVRfQkVGT1JFIHwKLQkJCQkgICAgICBTWU5DX0ZJTEVfUkFOR0VfV1JJVEUgfAotCQkJCSAgICAgIFNZTkNfRklMRV9SQU5HRV9XQUlUX0FGVEVSKTsKKwkJLyogQXMgZnV0dXJlIGFjY2Vzc2VzIHRvIHRoaXMgZmlsZSB3aWxsIHVzZSBibWFwLAorCQkgKiBhbmQgYnlwYXNzIHRoZSBwYWdlIGNhY2hlLCB3ZSBtdXN0IHN5bmMgdGhlIGZpbGUKKwkJICogZmlyc3QuCisJCSAqLworCQl2ZnNfZnN5bmMoZmlsZSwgZmlsZS0+Zl9kZW50cnksIDEpOwogCX0KIAkvKiByZWFkIHN1cGVyYmxvY2sgZnJvbSBiaXRtYXAgZmlsZSAodGhpcyBzZXRzIGJpdG1hcC0+Y2h1bmtzaXplKSAqLwogCWVyciA9IGJpdG1hcF9yZWFkX3NiKGJpdG1hcCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2RtLWV4Y2VwdGlvbi1zdG9yZS5jIGIvZHJpdmVycy9tZC9kbS1leGNlcHRpb24tc3RvcmUuYwppbmRleCA1NTZhY2ZmLi43ZGJlNjUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLWV4Y2VwdGlvbi1zdG9yZS5jCisrKyBiL2RyaXZlcnMvbWQvZG0tZXhjZXB0aW9uLXN0b3JlLmMKQEAgLTEzOCwxNiArMTM4LDYgQEAKIH0KIEVYUE9SVF9TWU1CT0woZG1fZXhjZXB0aW9uX3N0b3JlX3R5cGVfdW5yZWdpc3Rlcik7CiAKLS8qCi0gKiBSb3VuZCBhIG51bWJlciB1cCB0byB0aGUgbmVhcmVzdCAnc2l6ZScgYm91bmRhcnkuICBzaXplIG11c3QKLSAqIGJlIGEgcG93ZXIgb2YgMi4KLSAqLwotc3RhdGljIHVsb25nIHJvdW5kX3VwKHVsb25nIG4sIHVsb25nIHNpemUpCi17Ci0Jc2l6ZS0tOwotCXJldHVybiAobiArIHNpemUpICYgfnNpemU7Ci19Ci0KIHN0YXRpYyBpbnQgc2V0X2NodW5rX3NpemUoc3RydWN0IGRtX2V4Y2VwdGlvbl9zdG9yZSAqc3RvcmUsCiAJCQkgIGNvbnN0IGNoYXIgKmNodW5rX3NpemVfYXJnLCBjaGFyICoqZXJyb3IpCiB7CkBAIC0xNTUsNyArMTQ1LDggQEAKIAljaGFyICp2YWx1ZTsKIAogCWNodW5rX3NpemVfdWxvbmcgPSBzaW1wbGVfc3RydG91bChjaHVua19zaXplX2FyZywgJnZhbHVlLCAxMCk7Ci0JaWYgKCpjaHVua19zaXplX2FyZyA9PSAnXDAnIHx8ICp2YWx1ZSAhPSAnXDAnKSB7CisJaWYgKCpjaHVua19zaXplX2FyZyA9PSAnXDAnIHx8ICp2YWx1ZSAhPSAnXDAnIHx8CisJICAgIGNodW5rX3NpemVfdWxvbmcgPiBVSU5UX01BWCkgewogCQkqZXJyb3IgPSAiSW52YWxpZCBjaHVuayBzaXplIjsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtMTY1LDQwICsxNTYsMzUgQEAKIAkJcmV0dXJuIDA7CiAJfQogCi0JLyoKLQkgKiBDaHVuayBzaXplIG11c3QgYmUgbXVsdGlwbGUgb2YgcGFnZSBzaXplLiAgU2lsZW50bHkKLQkgKiByb3VuZCB1cCBpZiBpdCdzIG5vdC4KLQkgKi8KLQljaHVua19zaXplX3Vsb25nID0gcm91bmRfdXAoY2h1bmtfc2l6ZV91bG9uZywgUEFHRV9TSVpFID4+IDkpOwotCi0JcmV0dXJuIGRtX2V4Y2VwdGlvbl9zdG9yZV9zZXRfY2h1bmtfc2l6ZShzdG9yZSwgY2h1bmtfc2l6ZV91bG9uZywKKwlyZXR1cm4gZG1fZXhjZXB0aW9uX3N0b3JlX3NldF9jaHVua19zaXplKHN0b3JlLAorCQkJCQkJICh1bnNpZ25lZCkgY2h1bmtfc2l6ZV91bG9uZywKIAkJCQkJCSBlcnJvcik7CiB9CiAKIGludCBkbV9leGNlcHRpb25fc3RvcmVfc2V0X2NodW5rX3NpemUoc3RydWN0IGRtX2V4Y2VwdGlvbl9zdG9yZSAqc3RvcmUsCi0JCQkJICAgICAgdW5zaWduZWQgbG9uZyBjaHVua19zaXplX3Vsb25nLAorCQkJCSAgICAgIHVuc2lnbmVkIGNodW5rX3NpemUsCiAJCQkJICAgICAgY2hhciAqKmVycm9yKQogewogCS8qIENoZWNrIGNodW5rX3NpemUgaXMgYSBwb3dlciBvZiAyICovCi0JaWYgKCFpc19wb3dlcl9vZl8yKGNodW5rX3NpemVfdWxvbmcpKSB7CisJaWYgKCFpc19wb3dlcl9vZl8yKGNodW5rX3NpemUpKSB7CiAJCSplcnJvciA9ICJDaHVuayBzaXplIGlzIG5vdCBhIHBvd2VyIG9mIDIiOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAkvKiBWYWxpZGF0ZSB0aGUgY2h1bmsgc2l6ZSBhZ2FpbnN0IHRoZSBkZXZpY2UgYmxvY2sgc2l6ZSAqLwotCWlmIChjaHVua19zaXplX3Vsb25nICUgKGJkZXZfbG9naWNhbF9ibG9ja19zaXplKHN0b3JlLT5jb3ctPmJkZXYpID4+IDkpKSB7CisJaWYgKGNodW5rX3NpemUgJSAoYmRldl9sb2dpY2FsX2Jsb2NrX3NpemUoc3RvcmUtPmNvdy0+YmRldikgPj4gOSkpIHsKIAkJKmVycm9yID0gIkNodW5rIHNpemUgaXMgbm90IGEgbXVsdGlwbGUgb2YgZGV2aWNlIGJsb2Nrc2l6ZSI7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWlmIChjaHVua19zaXplX3Vsb25nID4gSU5UX01BWCA+PiBTRUNUT1JfU0hJRlQpIHsKKwlpZiAoY2h1bmtfc2l6ZSA+IElOVF9NQVggPj4gU0VDVE9SX1NISUZUKSB7CiAJCSplcnJvciA9ICJDaHVuayBzaXplIGlzIHRvbyBoaWdoIjsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0Jc3RvcmUtPmNodW5rX3NpemUgPSBjaHVua19zaXplX3Vsb25nOwotCXN0b3JlLT5jaHVua19tYXNrID0gY2h1bmtfc2l6ZV91bG9uZyAtIDE7Ci0Jc3RvcmUtPmNodW5rX3NoaWZ0ID0gZmZzKGNodW5rX3NpemVfdWxvbmcpIC0gMTsKKwlzdG9yZS0+Y2h1bmtfc2l6ZSA9IGNodW5rX3NpemU7CisJc3RvcmUtPmNodW5rX21hc2sgPSBjaHVua19zaXplIC0gMTsKKwlzdG9yZS0+Y2h1bmtfc2hpZnQgPSBmZnMoY2h1bmtfc2l6ZSkgLSAxOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yNTEsNyArMjM3LDcgQEAKIAogCXIgPSBzZXRfY2h1bmtfc2l6ZSh0bXBfc3RvcmUsIGFyZ3ZbMl0sICZ0aS0+ZXJyb3IpOwogCWlmIChyKQotCQlnb3RvIGJhZF9jb3c7CisJCWdvdG8gYmFkX2N0cjsKIAogCXIgPSB0eXBlLT5jdHIodG1wX3N0b3JlLCAwLCBOVUxMKTsKIAlpZiAocikgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS1leGNlcHRpb24tc3RvcmUuaCBiL2RyaXZlcnMvbWQvZG0tZXhjZXB0aW9uLXN0b3JlLmgKaW5kZXggODEyYzcxOC4uOGEyMjNhNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9kbS1leGNlcHRpb24tc3RvcmUuaAorKysgYi9kcml2ZXJzL21kL2RtLWV4Y2VwdGlvbi1zdG9yZS5oCkBAIC0xMDEsOSArMTAxLDkgQEAKIAlzdHJ1Y3QgZG1fZGV2ICpjb3c7CiAKIAkvKiBTaXplIG9mIGRhdGEgYmxvY2tzIHNhdmVkIC0gbXVzdCBiZSBhIHBvd2VyIG9mIDIgKi8KLQljaHVua190IGNodW5rX3NpemU7Ci0JY2h1bmtfdCBjaHVua19tYXNrOwotCWNodW5rX3QgY2h1bmtfc2hpZnQ7CisJdW5zaWduZWQgY2h1bmtfc2l6ZTsKKwl1bnNpZ25lZCBjaHVua19tYXNrOworCXVuc2lnbmVkIGNodW5rX3NoaWZ0OwogCiAJdm9pZCAqY29udGV4dDsKIH07CkBAIC0xNjksNyArMTY5LDcgQEAKIGludCBkbV9leGNlcHRpb25fc3RvcmVfdHlwZV91bnJlZ2lzdGVyKHN0cnVjdCBkbV9leGNlcHRpb25fc3RvcmVfdHlwZSAqdHlwZSk7CiAKIGludCBkbV9leGNlcHRpb25fc3RvcmVfc2V0X2NodW5rX3NpemUoc3RydWN0IGRtX2V4Y2VwdGlvbl9zdG9yZSAqc3RvcmUsCi0JCQkJICAgICAgdW5zaWduZWQgbG9uZyBjaHVua19zaXplX3Vsb25nLAorCQkJCSAgICAgIHVuc2lnbmVkIGNodW5rX3NpemUsCiAJCQkJICAgICAgY2hhciAqKmVycm9yKTsKIAogaW50IGRtX2V4Y2VwdGlvbl9zdG9yZV9jcmVhdGUoc3RydWN0IGRtX3RhcmdldCAqdGksIGludCBhcmdjLCBjaGFyICoqYXJndiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0tbG9nLXVzZXJzcGFjZS1iYXNlLmMgYi9kcml2ZXJzL21kL2RtLWxvZy11c2Vyc3BhY2UtYmFzZS5jCmluZGV4IDY1MmJkMzMuLjdhYzJjMTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZG0tbG9nLXVzZXJzcGFjZS1iYXNlLmMKKysrIGIvZHJpdmVycy9tZC9kbS1sb2ctdXNlcnNwYWNlLWJhc2UuYwpAQCAtMTU2LDcgKzE1Niw3IEBACiAJfQogCiAJLyogVGhlIHB0ciB2YWx1ZSBpcyBzdWZmaWNpZW50IGZvciBsb2NhbCB1bmlxdWUgaWQgKi8KLQlsYy0+bHVpZCA9ICh1aW50NjRfdClsYzsKKwlsYy0+bHVpZCA9ICh1bnNpZ25lZCBsb25nKWxjOwogCiAJbGMtPnRpID0gdGk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0tc25hcC1wZXJzaXN0ZW50LmMgYi9kcml2ZXJzL21kL2RtLXNuYXAtcGVyc2lzdGVudC5jCmluZGV4IGQ1YjJlMDguLjBjNzQ2NDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZG0tc25hcC1wZXJzaXN0ZW50LmMKKysrIGIvZHJpdmVycy9tZC9kbS1zbmFwLXBlcnNpc3RlbnQuYwpAQCAtMjg0LDEyICsyODQsMTMgQEAKIHsKIAlpbnQgcjsKIAlzdHJ1Y3QgZGlza19oZWFkZXIgKmRoOwotCWNodW5rX3QgY2h1bmtfc2l6ZTsKKwl1bnNpZ25lZCBjaHVua19zaXplOwogCWludCBjaHVua19zaXplX3N1cHBsaWVkID0gMTsKIAljaGFyICpjaHVua19lcnI7CiAKIAkvKgotCSAqIFVzZSBkZWZhdWx0IGNodW5rIHNpemUgKG9yIGhhcmRzZWN0X3NpemUsIGlmIGxhcmdlcikgaWYgbm9uZSBzdXBwbGllZAorCSAqIFVzZSBkZWZhdWx0IGNodW5rIHNpemUgKG9yIGxvZ2ljYWxfYmxvY2tfc2l6ZSwgaWYgbGFyZ2VyKQorCSAqIGlmIG5vbmUgc3VwcGxpZWQKIAkgKi8KIAlpZiAoIXBzLT5zdG9yZS0+Y2h1bmtfc2l6ZSkgewogCQlwcy0+c3RvcmUtPmNodW5rX3NpemUgPSBtYXgoRE1fQ0hVTktfU0laRV9ERUZBVUxUX1NFQ1RPUlMsCkBAIC0zMzQsMTAgKzMzNSw5IEBACiAJCXJldHVybiAwOwogCiAJaWYgKGNodW5rX3NpemVfc3VwcGxpZWQpCi0JCURNV0FSTigiY2h1bmsgc2l6ZSAlbGx1IGluIGRldmljZSBtZXRhZGF0YSBvdmVycmlkZXMgIgotCQkgICAgICAgInRhYmxlIGNodW5rIHNpemUgb2YgJWxsdS4iLAotCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZyljaHVua19zaXplLAotCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylwcy0+c3RvcmUtPmNodW5rX3NpemUpOworCQlETVdBUk4oImNodW5rIHNpemUgJXUgaW4gZGV2aWNlIG1ldGFkYXRhIG92ZXJyaWRlcyAiCisJCSAgICAgICAidGFibGUgY2h1bmsgc2l6ZSBvZiAldS4iLAorCQkgICAgICAgY2h1bmtfc2l6ZSwgcHMtPnN0b3JlLT5jaHVua19zaXplKTsKIAogCS8qIFdlIGhhZCBhIGJvZ3VzIGNodW5rX3NpemUuIEZpeCBzdHVmZiB1cC4gKi8KIAlmcmVlX2FyZWEocHMpOwpAQCAtMzQ1LDggKzM0NSw4IEBACiAJciA9IGRtX2V4Y2VwdGlvbl9zdG9yZV9zZXRfY2h1bmtfc2l6ZShwcy0+c3RvcmUsIGNodW5rX3NpemUsCiAJCQkJCSAgICAgICZjaHVua19lcnIpOwogCWlmIChyKSB7Ci0JCURNRVJSKCJpbnZhbGlkIG9uLWRpc2sgY2h1bmsgc2l6ZSAlbGx1OiAlcy4iLAotCQkgICAgICAodW5zaWduZWQgbG9uZyBsb25nKWNodW5rX3NpemUsIGNodW5rX2Vycik7CisJCURNRVJSKCJpbnZhbGlkIG9uLWRpc2sgY2h1bmsgc2l6ZSAldTogJXMuIiwKKwkJICAgICAgY2h1bmtfc2l6ZSwgY2h1bmtfZXJyKTsKIAkJcmV0dXJuIHI7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2RtLXNuYXAuYyBiL2RyaXZlcnMvbWQvZG0tc25hcC5jCmluZGV4IDU3ZjFiZjcuLjNhM2JhNDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZG0tc25hcC5jCisrKyBiL2RyaXZlcnMvbWQvZG0tc25hcC5jCkBAIC0yOTYsNiArMjk2LDcgQEAKICAqLwogc3RhdGljIGludCByZWdpc3Rlcl9zbmFwc2hvdChzdHJ1Y3QgZG1fc25hcHNob3QgKnNuYXApCiB7CisJc3RydWN0IGRtX3NuYXBzaG90ICpsOwogCXN0cnVjdCBvcmlnaW4gKm8sICpuZXdfbzsKIAlzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2ID0gc25hcC0+b3JpZ2luLT5iZGV2OwogCkBAIC0zMTksNyArMzIwLDExIEBACiAJCV9faW5zZXJ0X29yaWdpbihvKTsKIAl9CiAKLQlsaXN0X2FkZF90YWlsKCZzbmFwLT5saXN0LCAmby0+c25hcHNob3RzKTsKKwkvKiBTb3J0IHRoZSBsaXN0IGFjY29yZGluZyB0byBjaHVuayBzaXplLCBsYXJnZXN0LWZpcnN0IHNtYWxsZXN0LWxhc3QgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGwsICZvLT5zbmFwc2hvdHMsIGxpc3QpCisJCWlmIChsLT5zdG9yZS0+Y2h1bmtfc2l6ZSA8IHNuYXAtPnN0b3JlLT5jaHVua19zaXplKQorCQkJYnJlYWs7CisJbGlzdF9hZGRfdGFpbCgmc25hcC0+bGlzdCwgJmwtPmxpc3QpOwogCiAJdXBfd3JpdGUoJl9vcmlnaW5zX2xvY2spOwogCXJldHVybiAwOwpAQCAtNjY4LDYgKzY3MywxMSBAQAogCWJpb19saXN0X2luaXQoJnMtPnF1ZXVlZF9iaW9zKTsKIAlJTklUX1dPUksoJnMtPnF1ZXVlZF9iaW9zX3dvcmssIGZsdXNoX3F1ZXVlZF9iaW9zKTsKIAorCWlmICghcy0+c3RvcmUtPmNodW5rX3NpemUpIHsKKwkJdGktPmVycm9yID0gIkNodW5rIHNpemUgbm90IHNldCI7CisJCWdvdG8gYmFkX2xvYWRfYW5kX3JlZ2lzdGVyOworCX0KKwogCS8qIEFkZCBzbmFwc2hvdCB0byB0aGUgbGlzdCBvZiBzbmFwc2hvdHMgZm9yIHRoaXMgb3JpZ2luICovCiAJLyogRXhjZXB0aW9ucyBhcmVuJ3QgdHJpZ2dlcmVkIHRpbGwgc25hcHNob3RfcmVzdW1lKCkgaXMgY2FsbGVkICovCiAJaWYgKHJlZ2lzdGVyX3NuYXBzaG90KHMpKSB7CkBAIC05NTEsNyArOTYxLDcgQEAKIAogCXNyYy5iZGV2ID0gYmRldjsKIAlzcmMuc2VjdG9yID0gY2h1bmtfdG9fc2VjdG9yKHMtPnN0b3JlLCBwZS0+ZS5vbGRfY2h1bmspOwotCXNyYy5jb3VudCA9IG1pbihzLT5zdG9yZS0+Y2h1bmtfc2l6ZSwgZGV2X3NpemUgLSBzcmMuc2VjdG9yKTsKKwlzcmMuY291bnQgPSBtaW4oKHNlY3Rvcl90KXMtPnN0b3JlLT5jaHVua19zaXplLCBkZXZfc2l6ZSAtIHNyYy5zZWN0b3IpOwogCiAJZGVzdC5iZGV2ID0gcy0+c3RvcmUtPmNvdy0+YmRldjsKIAlkZXN0LnNlY3RvciA9IGNodW5rX3RvX3NlY3RvcihzLT5zdG9yZSwgcGUtPmUubmV3X2NodW5rKTsKQEAgLTExNDIsNiArMTE1Miw4IEBACiAJdW5zaWduZWQgc3ogPSAwOwogCXN0cnVjdCBkbV9zbmFwc2hvdCAqc25hcCA9IHRpLT5wcml2YXRlOwogCisJZG93bl93cml0ZSgmc25hcC0+bG9jayk7CisKIAlzd2l0Y2ggKHR5cGUpIHsKIAljYXNlIFNUQVRVU1RZUEVfSU5GTzoKIAkJaWYgKCFzbmFwLT52YWxpZCkKQEAgLTExNzMsNiArMTE4NSw4IEBACiAJCWJyZWFrOwogCX0KIAorCXVwX3dyaXRlKCZzbmFwLT5sb2NrKTsKKwogCXJldHVybiAwOwogfQogCkBAIC0xMzg4LDcgKzE0MDIsNyBAQAogCXN0cnVjdCBkbV9kZXYgKmRldiA9IHRpLT5wcml2YXRlOwogCXN0cnVjdCBkbV9zbmFwc2hvdCAqc25hcDsKIAlzdHJ1Y3Qgb3JpZ2luICpvOwotCWNodW5rX3QgY2h1bmtfc2l6ZSA9IDA7CisJdW5zaWduZWQgY2h1bmtfc2l6ZSA9IDA7CiAKIAlkb3duX3JlYWQoJl9vcmlnaW5zX2xvY2spOwogCW8gPSBfX2xvb2t1cF9vcmlnaW4oZGV2LT5iZGV2KTsKQEAgLTE0NjUsNyArMTQ3OSw3IEBACiAJciA9IGRtX3JlZ2lzdGVyX3RhcmdldCgmc25hcHNob3RfdGFyZ2V0KTsKIAlpZiAocikgewogCQlETUVSUigic25hcHNob3QgdGFyZ2V0IHJlZ2lzdGVyIGZhaWxlZCAlZCIsIHIpOwotCQlyZXR1cm4gcjsKKwkJZ290byBiYWRfcmVnaXN0ZXJfc25hcHNob3RfdGFyZ2V0OwogCX0KIAogCXIgPSBkbV9yZWdpc3Rlcl90YXJnZXQoJm9yaWdpbl90YXJnZXQpOwpAQCAtMTUyMiw2ICsxNTM2LDkgQEAKIAlkbV91bnJlZ2lzdGVyX3RhcmdldCgmb3JpZ2luX3RhcmdldCk7CiBiYWQxOgogCWRtX3VucmVnaXN0ZXJfdGFyZ2V0KCZzbmFwc2hvdF90YXJnZXQpOworCitiYWRfcmVnaXN0ZXJfc25hcHNob3RfdGFyZ2V0OgorCWRtX2V4Y2VwdGlvbl9zdG9yZV9leGl0KCk7CiAJcmV0dXJuIHI7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0uYyBiL2RyaXZlcnMvbWQvZG0uYwppbmRleCAzNzZmMWFiLi43MjRlZmM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLmMKKysrIGIvZHJpdmVycy9tZC9kbS5jCkBAIC00Nyw2ICs0Nyw3IEBACiAJYXRvbWljX3QgaW9fY291bnQ7CiAJc3RydWN0IGJpbyAqYmlvOwogCXVuc2lnbmVkIGxvbmcgc3RhcnRfdGltZTsKKwlzcGlubG9ja190IGVuZGlvX2xvY2s7CiB9OwogCiAvKgpAQCAtNTc4LDggKzU3OSwxMiBAQAogCXN0cnVjdCBtYXBwZWRfZGV2aWNlICptZCA9IGlvLT5tZDsKIAogCS8qIFB1c2gtYmFjayBzdXBlcnNlZGVzIGFueSBJL08gZXJyb3JzICovCi0JaWYgKGVycm9yICYmICEoaW8tPmVycm9yID4gMCAmJiBfX25vZmx1c2hfc3VzcGVuZGluZyhtZCkpKQotCQlpby0+ZXJyb3IgPSBlcnJvcjsKKwlpZiAodW5saWtlbHkoZXJyb3IpKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZpby0+ZW5kaW9fbG9jaywgZmxhZ3MpOworCQlpZiAoIShpby0+ZXJyb3IgPiAwICYmIF9fbm9mbHVzaF9zdXNwZW5kaW5nKG1kKSkpCisJCQlpby0+ZXJyb3IgPSBlcnJvcjsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW8tPmVuZGlvX2xvY2ssIGZsYWdzKTsKKwl9CiAKIAlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmaW8tPmlvX2NvdW50KSkgewogCQlpZiAoaW8tPmVycm9yID09IERNX0VORElPX1JFUVVFVUUpIHsKQEAgLTEyMjYsNiArMTIzMSw3IEBACiAJYXRvbWljX3NldCgmY2kuaW8tPmlvX2NvdW50LCAxKTsKIAljaS5pby0+YmlvID0gYmlvOwogCWNpLmlvLT5tZCA9IG1kOworCXNwaW5fbG9ja19pbml0KCZjaS5pby0+ZW5kaW9fbG9jayk7CiAJY2kuc2VjdG9yID0gYmlvLT5iaV9zZWN0b3I7CiAJY2kuc2VjdG9yX2NvdW50ID0gYmlvX3NlY3RvcnMoYmlvKTsKIAlpZiAodW5saWtlbHkoYmlvX2VtcHR5X2JhcnJpZXIoYmlvKSkpCkBAIC0xODIyLDYgKzE4MjgsNyBAQAogYmFkX2JkZXY6CiAJZGVzdHJveV93b3JrcXVldWUobWQtPndxKTsKIGJhZF90aHJlYWQ6CisJZGVsX2dlbmRpc2sobWQtPmRpc2spOwogCXB1dF9kaXNrKG1kLT5kaXNrKTsKIGJhZF9kaXNrOgogCWJsa19jbGVhbnVwX3F1ZXVlKG1kLT5xdWV1ZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL21kLmMgYi9kcml2ZXJzL21kL21kLmMKaW5kZXggMjZiYTQyYS4uMTBlYjFmYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9tZC5jCisrKyBiL2RyaXZlcnMvbWQvbWQuYwpAQCAtMjYzMSw3ICsyNjMxLDcgQEAKIAkJCXJkZXYtPmRlc2NfbnIgPSBpKys7CiAJCQlyZGV2LT5yYWlkX2Rpc2sgPSByZGV2LT5kZXNjX25yOwogCQkJc2V0X2JpdChJbl9zeW5jLCAmcmRldi0+ZmxhZ3MpOwotCQl9IGVsc2UgaWYgKHJkZXYtPnJhaWRfZGlzayA+PSBtZGRldi0+cmFpZF9kaXNrcykgeworCQl9IGVsc2UgaWYgKHJkZXYtPnJhaWRfZGlzayA+PSAobWRkZXYtPnJhaWRfZGlza3MgLSBtaW4oMCwgbWRkZXYtPmRlbHRhX2Rpc2tzKSkpIHsKIAkJCXJkZXYtPnJhaWRfZGlzayA9IC0xOwogCQkJY2xlYXJfYml0KEluX3N5bmMsICZyZGV2LT5mbGFncyk7CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvcmFpZDEuYyBiL2RyaXZlcnMvbWQvcmFpZDEuYwppbmRleCBkMWI5YmQ1Li5hMDUzNDIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL3JhaWQxLmMKKysrIGIvZHJpdmVycy9tZC9yYWlkMS5jCkBAIC02NCw3ICs2NCw3IEBACiAKIAkvKiBhbGxvY2F0ZSBhIHIxYmlvIHdpdGggcm9vbSBmb3IgcmFpZF9kaXNrcyBlbnRyaWVzIGluIHRoZSBiaW9zIGFycmF5ICovCiAJcjFfYmlvID0ga3phbGxvYyhzaXplLCBnZnBfZmxhZ3MpOwotCWlmICghcjFfYmlvKQorCWlmICghcjFfYmlvICYmIHBpLT5tZGRldikKIAkJdW5wbHVnX3NsYXZlcyhwaS0+bWRkZXYpOwogCiAJcmV0dXJuIHIxX2JpbzsKQEAgLTE2ODMsNiArMTY4Myw3IEBACiAJCQkJZ2VuZXJpY19tYWtlX3JlcXVlc3QoYmlvKTsKIAkJCX0KIAkJfQorCQljb25kX3Jlc2NoZWQoKTsKIAl9CiAJaWYgKHVucGx1ZykKIAkJdW5wbHVnX3NsYXZlcyhtZGRldik7CkBAIC0xOTc4LDEzICsxOTc5LDE0IEBACiAJY29uZi0+cG9vbGluZm8gPSBrbWFsbG9jKHNpemVvZigqY29uZi0+cG9vbGluZm8pLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWNvbmYtPnBvb2xpbmZvKQogCQlnb3RvIG91dF9ub19tZW07Ci0JY29uZi0+cG9vbGluZm8tPm1kZGV2ID0gbWRkZXY7CisJY29uZi0+cG9vbGluZm8tPm1kZGV2ID0gTlVMTDsKIAljb25mLT5wb29saW5mby0+cmFpZF9kaXNrcyA9IG1kZGV2LT5yYWlkX2Rpc2tzOwogCWNvbmYtPnIxYmlvX3Bvb2wgPSBtZW1wb29sX2NyZWF0ZShOUl9SQUlEMV9CSU9TLCByMWJpb19wb29sX2FsbG9jLAogCQkJCQkgIHIxYmlvX3Bvb2xfZnJlZSwKIAkJCQkJICBjb25mLT5wb29saW5mbyk7CiAJaWYgKCFjb25mLT5yMWJpb19wb29sKQogCQlnb3RvIG91dF9ub19tZW07CisJY29uZi0+cG9vbGluZm8tPm1kZGV2ID0gbWRkZXY7CiAKIAlzcGluX2xvY2tfaW5pdCgmY29uZi0+ZGV2aWNlX2xvY2spOwogCW1kZGV2LT5xdWV1ZS0+cXVldWVfbG9jayA9ICZjb25mLT5kZXZpY2VfbG9jazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvcmFpZDEwLmMgYi9kcml2ZXJzL21kL3JhaWQxMC5jCmluZGV4IDUxYzRjNWMuLmMyY2I3YjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvcmFpZDEwLmMKKysrIGIvZHJpdmVycy9tZC9yYWlkMTAuYwpAQCAtNjgsNyArNjgsNyBAQAogCiAJLyogYWxsb2NhdGUgYSByMTBiaW8gd2l0aCByb29tIGZvciByYWlkX2Rpc2tzIGVudHJpZXMgaW4gdGhlIGJpb3MgYXJyYXkgKi8KIAlyMTBfYmlvID0ga3phbGxvYyhzaXplLCBnZnBfZmxhZ3MpOwotCWlmICghcjEwX2JpbykKKwlpZiAoIXIxMF9iaW8gJiYgY29uZi0+bWRkZXYpCiAJCXVucGx1Z19zbGF2ZXMoY29uZi0+bWRkZXYpOwogCiAJcmV0dXJuIHIxMF9iaW87CkBAIC0xNjMyLDYgKzE2MzIsNyBAQAogCQkJCWdlbmVyaWNfbWFrZV9yZXF1ZXN0KGJpbyk7CiAJCQl9CiAJCX0KKwkJY29uZF9yZXNjaGVkKCk7CiAJfQogCWlmICh1bnBsdWcpCiAJCXVucGx1Z19zbGF2ZXMobWRkZXYpOwpAQCAtMjA5NSw3ICsyMDk2LDYgQEAKIAlpZiAoIWNvbmYtPnRtcHBhZ2UpCiAJCWdvdG8gb3V0X2ZyZWVfY29uZjsKIAotCWNvbmYtPm1kZGV2ID0gbWRkZXY7CiAJY29uZi0+cmFpZF9kaXNrcyA9IG1kZGV2LT5yYWlkX2Rpc2tzOwogCWNvbmYtPm5lYXJfY29waWVzID0gbmM7CiAJY29uZi0+ZmFyX2NvcGllcyA9IGZjOwpAQCAtMjEzMiw2ICsyMTMyLDcgQEAKIAkJZ290byBvdXRfZnJlZV9jb25mOwogCX0KIAorCWNvbmYtPm1kZGV2ID0gbWRkZXY7CiAJc3Bpbl9sb2NrX2luaXQoJmNvbmYtPmRldmljZV9sb2NrKTsKIAltZGRldi0+cXVldWUtPnF1ZXVlX2xvY2sgPSAmY29uZi0+ZGV2aWNlX2xvY2s7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvcmFpZDUuYyBiL2RyaXZlcnMvbWQvcmFpZDUuYwppbmRleCA5NDgyOTgwLi44MWFiZWZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL3JhaWQ1LmMKKysrIGIvZHJpdmVycy9tZC9yYWlkNS5jCkBAIC0xNTYsMTMgKzE1NiwxNiBAQAogc3RhdGljIGludCByYWlkNl9pZHhfdG9fc2xvdChpbnQgaWR4LCBzdHJ1Y3Qgc3RyaXBlX2hlYWQgKnNoLAogCQkJICAgICBpbnQgKmNvdW50LCBpbnQgc3luZHJvbWVfZGlza3MpCiB7Ci0JaW50IHNsb3Q7CisJaW50IHNsb3QgPSAqY291bnQ7CiAKKwlpZiAoc2gtPmRkZl9sYXlvdXQpCisJCSgqY291bnQpKys7CiAJaWYgKGlkeCA9PSBzaC0+cGRfaWR4KQogCQlyZXR1cm4gc3luZHJvbWVfZGlza3M7CiAJaWYgKGlkeCA9PSBzaC0+cWRfaWR4KQogCQlyZXR1cm4gc3luZHJvbWVfZGlza3MgKyAxOwotCXNsb3QgPSAoKmNvdW50KSsrOworCWlmICghc2gtPmRkZl9sYXlvdXQpCisJCSgqY291bnQpKys7CiAJcmV0dXJuIHNsb3Q7CiB9CiAKQEAgLTcxNyw3ICs3MjAsNyBAQAogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IGRpc2tzOyBpKyspCi0JCXNyY3NbaV0gPSAodm9pZCAqKXJhaWQ2X2VtcHR5X3plcm9fcGFnZTsKKwkJc3Jjc1tpXSA9IE5VTEw7CiAKIAljb3VudCA9IDA7CiAJaSA9IGQwX2lkeDsKQEAgLTcyNyw5ICs3MzAsOCBAQAogCQlzcmNzW3Nsb3RdID0gc2gtPmRldltpXS5wYWdlOwogCQlpID0gcmFpZDZfbmV4dF9kaXNrKGksIGRpc2tzKTsKIAl9IHdoaWxlIChpICE9IGQwX2lkeCk7Ci0JQlVHX09OKGNvdW50ICE9IHN5bmRyb21lX2Rpc2tzKTsKIAotCXJldHVybiBjb3VudDsKKwlyZXR1cm4gc3luZHJvbWVfZGlza3M7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKgpAQCAtODE0LDcgKzgxNiw3IEBACiAJICogc2xvdCBudW1iZXIgY29udmVyc2lvbiBmb3IgJ2ZhaWxhJyBhbmQgJ2ZhaWxiJwogCSAqLwogCWZvciAoaSA9IDA7IGkgPCBkaXNrcyA7IGkrKykKLQkJYmxvY2tzW2ldID0gKHZvaWQgKilyYWlkNl9lbXB0eV96ZXJvX3BhZ2U7CisJCWJsb2Nrc1tpXSA9IE5VTEw7CiAJY291bnQgPSAwOwogCWkgPSBkMF9pZHg7CiAJZG8gewpAQCAtODI4LDcgKzgzMCw2IEBACiAJCQlmYWlsYiA9IHNsb3Q7CiAJCWkgPSByYWlkNl9uZXh0X2Rpc2soaSwgZGlza3MpOwogCX0gd2hpbGUgKGkgIT0gZDBfaWR4KTsKLQlCVUdfT04oY291bnQgIT0gc3luZHJvbWVfZGlza3MpOwogCiAJQlVHX09OKGZhaWxhID09IGZhaWxiKTsKIAlpZiAoZmFpbGIgPCBmYWlsYSkKQEAgLTg0NSw3ICs4NDYsNyBAQAogCQkJaW5pdF9hc3luY19zdWJtaXQoJnN1Ym1pdCwgQVNZTkNfVFhfRkVOQ0UsIE5VTEwsCiAJCQkJCSAgb3BzX2NvbXBsZXRlX2NvbXB1dGUsIHNoLAogCQkJCQkgIHRvX2FkZHJfY29udihzaCwgcGVyY3B1KSk7Ci0JCQlyZXR1cm4gYXN5bmNfZ2VuX3N5bmRyb21lKGJsb2NrcywgMCwgY291bnQrMiwKKwkJCXJldHVybiBhc3luY19nZW5fc3luZHJvbWUoYmxvY2tzLCAwLCBzeW5kcm9tZV9kaXNrcysyLAogCQkJCQkJICBTVFJJUEVfU0laRSwgJnN1Ym1pdCk7CiAJCX0gZWxzZSB7CiAJCQlzdHJ1Y3QgcGFnZSAqZGVzdDsKQEAgLTExMzksNyArMTE0MCw3IEBACiAJCQkgICAmc2gtPm9wcy56ZXJvX3N1bV9yZXN1bHQsIHBlcmNwdS0+c3BhcmVfcGFnZSwgJnN1Ym1pdCk7CiB9CiAKLXN0YXRpYyB2b2lkIHJhaWRfcnVuX29wcyhzdHJ1Y3Qgc3RyaXBlX2hlYWQgKnNoLCB1bnNpZ25lZCBsb25nIG9wc19yZXF1ZXN0KQorc3RhdGljIHZvaWQgX19yYWlkX3J1bl9vcHMoc3RydWN0IHN0cmlwZV9oZWFkICpzaCwgdW5zaWduZWQgbG9uZyBvcHNfcmVxdWVzdCkKIHsKIAlpbnQgb3ZlcmxhcF9jbGVhciA9IDAsIGksIGRpc2tzID0gc2gtPmRpc2tzOwogCXN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqdHggPSBOVUxMOwpAQCAtMTIwNCwyMiArMTIwNSw1NSBAQAogCXB1dF9jcHUoKTsKIH0KIAorI2lmZGVmIENPTkZJR19NVUxUSUNPUkVfUkFJRDQ1Ngorc3RhdGljIHZvaWQgYXN5bmNfcnVuX29wcyh2b2lkICpwYXJhbSwgYXN5bmNfY29va2llX3QgY29va2llKQoreworCXN0cnVjdCBzdHJpcGVfaGVhZCAqc2ggPSBwYXJhbTsKKwl1bnNpZ25lZCBsb25nIG9wc19yZXF1ZXN0ID0gc2gtPm9wcy5yZXF1ZXN0OworCisJY2xlYXJfYml0X3VubG9jayhTVFJJUEVfT1BTX1JFUV9QRU5ESU5HLCAmc2gtPnN0YXRlKTsKKwl3YWtlX3VwKCZzaC0+b3BzLndhaXRfZm9yX29wcyk7CisKKwlfX3JhaWRfcnVuX29wcyhzaCwgb3BzX3JlcXVlc3QpOworCXJlbGVhc2Vfc3RyaXBlKHNoKTsKK30KKworc3RhdGljIHZvaWQgcmFpZF9ydW5fb3BzKHN0cnVjdCBzdHJpcGVfaGVhZCAqc2gsIHVuc2lnbmVkIGxvbmcgb3BzX3JlcXVlc3QpCit7CisJLyogc2luY2UgaGFuZGxlX3N0cmlwZSBjYW4gYmUgY2FsbGVkIG91dHNpZGUgb2YgcmFpZDVkIGNvbnRleHQKKwkgKiB3ZSBuZWVkIHRvIGVuc3VyZSBzaC0+b3BzLnJlcXVlc3QgaXMgZGUtc3RhZ2VkIGJlZm9yZSBhbm90aGVyCisJICogcmVxdWVzdCBhcnJpdmVzCisJICovCisJd2FpdF9ldmVudChzaC0+b3BzLndhaXRfZm9yX29wcywKKwkJICAgIXRlc3RfYW5kX3NldF9iaXRfbG9jayhTVFJJUEVfT1BTX1JFUV9QRU5ESU5HLCAmc2gtPnN0YXRlKSk7CisJc2gtPm9wcy5yZXF1ZXN0ID0gb3BzX3JlcXVlc3Q7CisKKwlhdG9taWNfaW5jKCZzaC0+Y291bnQpOworCWFzeW5jX3NjaGVkdWxlKGFzeW5jX3J1bl9vcHMsIHNoKTsKK30KKyNlbHNlCisjZGVmaW5lIHJhaWRfcnVuX29wcyBfX3JhaWRfcnVuX29wcworI2VuZGlmCisKIHN0YXRpYyBpbnQgZ3Jvd19vbmVfc3RyaXBlKHJhaWQ1X2NvbmZfdCAqY29uZikKIHsKIAlzdHJ1Y3Qgc3RyaXBlX2hlYWQgKnNoOworCWludCBkaXNrcyA9IG1heChjb25mLT5yYWlkX2Rpc2tzLCBjb25mLT5wcmV2aW91c19yYWlkX2Rpc2tzKTsKIAlzaCA9IGttZW1fY2FjaGVfYWxsb2MoY29uZi0+c2xhYl9jYWNoZSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFzaCkKIAkJcmV0dXJuIDA7Ci0JbWVtc2V0KHNoLCAwLCBzaXplb2YoKnNoKSArIChjb25mLT5yYWlkX2Rpc2tzLTEpKnNpemVvZihzdHJ1Y3QgcjVkZXYpKTsKKwltZW1zZXQoc2gsIDAsIHNpemVvZigqc2gpICsgKGRpc2tzLTEpKnNpemVvZihzdHJ1Y3QgcjVkZXYpKTsKIAlzaC0+cmFpZF9jb25mID0gY29uZjsKIAlzcGluX2xvY2tfaW5pdCgmc2gtPmxvY2spOworCSNpZmRlZiBDT05GSUdfTVVMVElDT1JFX1JBSUQ0NTYKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZzaC0+b3BzLndhaXRfZm9yX29wcyk7CisJI2VuZGlmCiAKLQlpZiAoZ3Jvd19idWZmZXJzKHNoLCBjb25mLT5yYWlkX2Rpc2tzKSkgewotCQlzaHJpbmtfYnVmZmVycyhzaCwgY29uZi0+cmFpZF9kaXNrcyk7CisJaWYgKGdyb3dfYnVmZmVycyhzaCwgZGlza3MpKSB7CisJCXNocmlua19idWZmZXJzKHNoLCBkaXNrcyk7CiAJCWttZW1fY2FjaGVfZnJlZShjb25mLT5zbGFiX2NhY2hlLCBzaCk7CiAJCXJldHVybiAwOwogCX0KLQlzaC0+ZGlza3MgPSBjb25mLT5yYWlkX2Rpc2tzOwogCS8qIHdlIGp1c3QgY3JlYXRlZCBhbiBhY3RpdmUgc3RyaXBlIHNvLi4uICovCiAJYXRvbWljX3NldCgmc2gtPmNvdW50LCAxKTsKIAlhdG9taWNfaW5jKCZjb25mLT5hY3RpdmVfc3RyaXBlcyk7CkBAIC0xMjMxLDcgKzEyNjUsNyBAQAogc3RhdGljIGludCBncm93X3N0cmlwZXMocmFpZDVfY29uZl90ICpjb25mLCBpbnQgbnVtKQogewogCXN0cnVjdCBrbWVtX2NhY2hlICpzYzsKLQlpbnQgZGV2cyA9IGNvbmYtPnJhaWRfZGlza3M7CisJaW50IGRldnMgPSBtYXgoY29uZi0+cmFpZF9kaXNrcywgY29uZi0+cHJldmlvdXNfcmFpZF9kaXNrcyk7CiAKIAlzcHJpbnRmKGNvbmYtPmNhY2hlX25hbWVbMF0sCiAJCSJyYWlkJWQtJXMiLCBjb25mLT5sZXZlbCwgbWRuYW1lKGNvbmYtPm1kZGV2KSk7CkBAIC0xMzI5LDYgKzEzNjMsOSBAQAogCiAJCW5zaC0+cmFpZF9jb25mID0gY29uZjsKIAkJc3Bpbl9sb2NrX2luaXQoJm5zaC0+bG9jayk7CisJCSNpZmRlZiBDT05GSUdfTVVMVElDT1JFX1JBSUQ0NTYKKwkJaW5pdF93YWl0cXVldWVfaGVhZCgmbnNoLT5vcHMud2FpdF9mb3Jfb3BzKTsKKwkJI2VuZGlmCiAKIAkJbGlzdF9hZGQoJm5zaC0+bHJ1LCAmbmV3c3RyaXBlcyk7CiAJfQpAQCAtMTg5OSwxMCArMTkzNiwxNSBAQAogCQljYXNlIEFMR09SSVRITV9QQVJJVFlfTjoKIAkJCWJyZWFrOwogCQljYXNlIEFMR09SSVRITV9ST1RBVElOR19OX0NPTlRJTlVFOgorCQkJLyogTGlrZSBsZWZ0X3N5bW1ldHJpYywgYnV0IFAgaXMgYmVmb3JlIFEgKi8KIAkJCWlmIChzaC0+cGRfaWR4ID09IDApCiAJCQkJaS0tOwkvKiBQIEQgRCBEIFEgKi8KLQkJCWVsc2UgaWYgKGkgPiBzaC0+cGRfaWR4KQotCQkJCWkgLT0gMjsgLyogRCBEIFEgUCBEICovCisJCQllbHNlIHsKKwkJCQkvKiBEIEQgUSBQIEQgKi8KKwkJCQlpZiAoaSA8IHNoLT5wZF9pZHgpCisJCQkJCWkgKz0gcmFpZF9kaXNrczsKKwkJCQlpIC09IChzaC0+cGRfaWR4ICsgMSk7CisJCQl9CiAJCQlicmVhazsKIAkJY2FzZSBBTEdPUklUSE1fTEVGVF9BU1lNTUVUUklDXzY6CiAJCWNhc2UgQUxHT1JJVEhNX1JJR0hUX0FTWU1NRVRSSUNfNjoKQEAgLTI4OTYsNyArMjkzOCw3IEBACiAgKgogICovCiAKLXN0YXRpYyBib29sIGhhbmRsZV9zdHJpcGU1KHN0cnVjdCBzdHJpcGVfaGVhZCAqc2gpCitzdGF0aWMgdm9pZCBoYW5kbGVfc3RyaXBlNShzdHJ1Y3Qgc3RyaXBlX2hlYWQgKnNoKQogewogCXJhaWQ1X2NvbmZfdCAqY29uZiA9IHNoLT5yYWlkX2NvbmY7CiAJaW50IGRpc2tzID0gc2gtPmRpc2tzLCBpOwpAQCAtMzE2NywxMSArMzIwOSw5IEBACiAJb3BzX3J1bl9pbyhzaCwgJnMpOwogCiAJcmV0dXJuX2lvKHJldHVybl9iaSk7Ci0KLQlyZXR1cm4gYmxvY2tlZF9yZGV2ID09IE5VTEw7CiB9CiAKLXN0YXRpYyBib29sIGhhbmRsZV9zdHJpcGU2KHN0cnVjdCBzdHJpcGVfaGVhZCAqc2gpCitzdGF0aWMgdm9pZCBoYW5kbGVfc3RyaXBlNihzdHJ1Y3Qgc3RyaXBlX2hlYWQgKnNoKQogewogCXJhaWQ1X2NvbmZfdCAqY29uZiA9IHNoLT5yYWlkX2NvbmY7CiAJaW50IGRpc2tzID0gc2gtPmRpc2tzOwpAQCAtMzQ1NSwxNyArMzQ5NSwxNCBAQAogCW9wc19ydW5faW8oc2gsICZzKTsKIAogCXJldHVybl9pbyhyZXR1cm5fYmkpOwotCi0JcmV0dXJuIGJsb2NrZWRfcmRldiA9PSBOVUxMOwogfQogCi0vKiByZXR1cm5zIHRydWUgaWYgdGhlIHN0cmlwZSB3YXMgaGFuZGxlZCAqLwotc3RhdGljIGJvb2wgaGFuZGxlX3N0cmlwZShzdHJ1Y3Qgc3RyaXBlX2hlYWQgKnNoKQorc3RhdGljIHZvaWQgaGFuZGxlX3N0cmlwZShzdHJ1Y3Qgc3RyaXBlX2hlYWQgKnNoKQogewogCWlmIChzaC0+cmFpZF9jb25mLT5sZXZlbCA9PSA2KQotCQlyZXR1cm4gaGFuZGxlX3N0cmlwZTYoc2gpOworCQloYW5kbGVfc3RyaXBlNihzaCk7CiAJZWxzZQotCQlyZXR1cm4gaGFuZGxlX3N0cmlwZTUoc2gpOworCQloYW5kbGVfc3RyaXBlNShzaCk7CiB9CiAKIHN0YXRpYyB2b2lkIHJhaWQ1X2FjdGl2YXRlX2RlbGF5ZWQocmFpZDVfY29uZl90ICpjb25mKQpAQCAtMzUwMyw5ICszNTQwLDEwIEBACiB7CiAJcmFpZDVfY29uZl90ICpjb25mID0gbWRkZXYtPnByaXZhdGU7CiAJaW50IGk7CisJaW50IGRldnMgPSBtYXgoY29uZi0+cmFpZF9kaXNrcywgY29uZi0+cHJldmlvdXNfcmFpZF9kaXNrcyk7CiAKIAlyY3VfcmVhZF9sb2NrKCk7Ci0JZm9yIChpID0gMDsgaSA8IGNvbmYtPnJhaWRfZGlza3M7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBkZXZzOyBpKyspIHsKIAkJbWRrX3JkZXZfdCAqcmRldiA9IHJjdV9kZXJlZmVyZW5jZShjb25mLT5kaXNrc1tpXS5yZGV2KTsKIAkJaWYgKHJkZXYgJiYgIXRlc3RfYml0KEZhdWx0eSwgJnJkZXYtPmZsYWdzKSAmJiBhdG9taWNfcmVhZCgmcmRldi0+bnJfcGVuZGluZykpIHsKIAkJCXN0cnVjdCByZXF1ZXN0X3F1ZXVlICpyX3F1ZXVlID0gYmRldl9nZXRfcXVldWUocmRldi0+YmRldik7CkBAIC00Mjc3LDkgKzQzMTUsNyBAQAogCWNsZWFyX2JpdChTVFJJUEVfSU5TWU5DLCAmc2gtPnN0YXRlKTsKIAlzcGluX3VubG9jaygmc2gtPmxvY2spOwogCi0JLyogd2FpdCBmb3IgYW55IGJsb2NrZWQgZGV2aWNlIHRvIGJlIGhhbmRsZWQgKi8KLQl3aGlsZSAodW5saWtlbHkoIWhhbmRsZV9zdHJpcGUoc2gpKSkKLQkJOworCWhhbmRsZV9zdHJpcGUoc2gpOwogCXJlbGVhc2Vfc3RyaXBlKHNoKTsKIAogCXJldHVybiBTVFJJUEVfU0VDVE9SUzsKQEAgLTQzNDksMzcgKzQzODUsNiBAQAogCXJldHVybiBoYW5kbGVkOwogfQogCi0jaWZkZWYgQ09ORklHX01VTFRJQ09SRV9SQUlENDU2Ci1zdGF0aWMgdm9pZCBfX3Byb2Nlc3Nfc3RyaXBlKHZvaWQgKnBhcmFtLCBhc3luY19jb29raWVfdCBjb29raWUpCi17Ci0Jc3RydWN0IHN0cmlwZV9oZWFkICpzaCA9IHBhcmFtOwotCi0JaGFuZGxlX3N0cmlwZShzaCk7Ci0JcmVsZWFzZV9zdHJpcGUoc2gpOwotfQotCi1zdGF0aWMgdm9pZCBwcm9jZXNzX3N0cmlwZShzdHJ1Y3Qgc3RyaXBlX2hlYWQgKnNoLCBzdHJ1Y3QgbGlzdF9oZWFkICpkb21haW4pCi17Ci0JYXN5bmNfc2NoZWR1bGVfZG9tYWluKF9fcHJvY2Vzc19zdHJpcGUsIHNoLCBkb21haW4pOwotfQotCi1zdGF0aWMgdm9pZCBzeW5jaHJvbml6ZV9zdHJpcGVfcHJvY2Vzc2luZyhzdHJ1Y3QgbGlzdF9oZWFkICpkb21haW4pCi17Ci0JYXN5bmNfc3luY2hyb25pemVfZnVsbF9kb21haW4oZG9tYWluKTsKLX0KLSNlbHNlCi1zdGF0aWMgdm9pZCBwcm9jZXNzX3N0cmlwZShzdHJ1Y3Qgc3RyaXBlX2hlYWQgKnNoLCBzdHJ1Y3QgbGlzdF9oZWFkICpkb21haW4pCi17Ci0JaGFuZGxlX3N0cmlwZShzaCk7Ci0JcmVsZWFzZV9zdHJpcGUoc2gpOwotCWNvbmRfcmVzY2hlZCgpOwotfQotCi1zdGF0aWMgdm9pZCBzeW5jaHJvbml6ZV9zdHJpcGVfcHJvY2Vzc2luZyhzdHJ1Y3QgbGlzdF9oZWFkICpkb21haW4pCi17Ci19Ci0jZW5kaWYKLQogCiAvKgogICogVGhpcyBpcyBvdXIgcmFpZDUga2VybmVsIHRocmVhZC4KQEAgLTQzOTMsNyArNDM5OCw2IEBACiAJc3RydWN0IHN0cmlwZV9oZWFkICpzaDsKIAlyYWlkNV9jb25mX3QgKmNvbmYgPSBtZGRldi0+cHJpdmF0ZTsKIAlpbnQgaGFuZGxlZDsKLQlMSVNUX0hFQUQocmFpZF9kb21haW4pOwogCiAJcHJfZGVidWcoIisrKyByYWlkNWQgYWN0aXZlXG4iKTsKIApAQCAtNDQzMCw3ICs0NDM0LDkgQEAKIAkJc3Bpbl91bmxvY2tfaXJxKCZjb25mLT5kZXZpY2VfbG9jayk7CiAJCQogCQloYW5kbGVkKys7Ci0JCXByb2Nlc3Nfc3RyaXBlKHNoLCAmcmFpZF9kb21haW4pOworCQloYW5kbGVfc3RyaXBlKHNoKTsKKwkJcmVsZWFzZV9zdHJpcGUoc2gpOworCQljb25kX3Jlc2NoZWQoKTsKIAogCQlzcGluX2xvY2tfaXJxKCZjb25mLT5kZXZpY2VfbG9jayk7CiAJfQpAQCAtNDQzOCw3ICs0NDQ0LDYgQEAKIAogCXNwaW5fdW5sb2NrX2lycSgmY29uZi0+ZGV2aWNlX2xvY2spOwogCi0Jc3luY2hyb25pemVfc3RyaXBlX3Byb2Nlc3NpbmcoJnJhaWRfZG9tYWluKTsKIAlhc3luY190eF9pc3N1ZV9wZW5kaW5nX2FsbCgpOwogCXVucGx1Z19zbGF2ZXMobWRkZXYpOwogCkBAIC00NTU4LDEzICs0NTYzLDkgQEAKIAogCWlmICghc2VjdG9ycykKIAkJc2VjdG9ycyA9IG1kZGV2LT5kZXZfc2VjdG9yczsKLQlpZiAoIXJhaWRfZGlza3MpIHsKKwlpZiAoIXJhaWRfZGlza3MpCiAJCS8qIHNpemUgaXMgZGVmaW5lZCBieSB0aGUgc21hbGxlc3Qgb2YgcHJldmlvdXMgYW5kIG5ldyBzaXplICovCi0JCWlmIChjb25mLT5yYWlkX2Rpc2tzIDwgY29uZi0+cHJldmlvdXNfcmFpZF9kaXNrcykKLQkJCXJhaWRfZGlza3MgPSBjb25mLT5yYWlkX2Rpc2tzOwotCQllbHNlCi0JCQlyYWlkX2Rpc2tzID0gY29uZi0+cHJldmlvdXNfcmFpZF9kaXNrczsKLQl9CisJCXJhaWRfZGlza3MgPSBtaW4oY29uZi0+cmFpZF9kaXNrcywgY29uZi0+cHJldmlvdXNfcmFpZF9kaXNrcyk7CiAKIAlzZWN0b3JzICY9IH4oKHNlY3Rvcl90KW1kZGV2LT5jaHVua19zZWN0b3JzIC0gMSk7CiAJc2VjdG9ycyAmPSB+KChzZWN0b3JfdCltZGRldi0+bmV3X2NodW5rX3NlY3RvcnMgLSAxKTsKQEAgLTQ2NjUsNyArNDY2Niw3IEBACiAJCQl9CiAJCQlwZXJfY3B1X3B0cihjb25mLT5wZXJjcHUsIGNwdSktPnNwYXJlX3BhZ2UgPSBzcGFyZV9wYWdlOwogCQl9Ci0JCXNjcmliYmxlID0ga21hbGxvYyhzY3JpYmJsZV9sZW4oY29uZi0+cmFpZF9kaXNrcyksIEdGUF9LRVJORUwpOworCQlzY3JpYmJsZSA9IGttYWxsb2MoY29uZi0+c2NyaWJibGVfbGVuLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCFzY3JpYmJsZSkgewogCQkJZXJyID0gLUVOT01FTTsKIAkJCWJyZWFrOwpAQCAtNDY4Niw3ICs0Njg3LDcgQEAKIHN0YXRpYyByYWlkNV9jb25mX3QgKnNldHVwX2NvbmYobWRkZXZfdCAqbWRkZXYpCiB7CiAJcmFpZDVfY29uZl90ICpjb25mOwotCWludCByYWlkX2Rpc2ssIG1lbW9yeTsKKwlpbnQgcmFpZF9kaXNrLCBtZW1vcnksIG1heF9kaXNrczsKIAltZGtfcmRldl90ICpyZGV2OwogCXN0cnVjdCBkaXNrX2luZm8gKmRpc2s7CiAKQEAgLTQ3MjIsMjggKzQ3MjMsNiBAQAogCWNvbmYgPSBremFsbG9jKHNpemVvZihyYWlkNV9jb25mX3QpLCBHRlBfS0VSTkVMKTsKIAlpZiAoY29uZiA9PSBOVUxMKQogCQlnb3RvIGFib3J0OwotCi0JY29uZi0+cmFpZF9kaXNrcyA9IG1kZGV2LT5yYWlkX2Rpc2tzOwotCWNvbmYtPnNjcmliYmxlX2xlbiA9IHNjcmliYmxlX2xlbihjb25mLT5yYWlkX2Rpc2tzKTsKLQlpZiAobWRkZXYtPnJlc2hhcGVfcG9zaXRpb24gPT0gTWF4U2VjdG9yKQotCQljb25mLT5wcmV2aW91c19yYWlkX2Rpc2tzID0gbWRkZXYtPnJhaWRfZGlza3M7Ci0JZWxzZQotCQljb25mLT5wcmV2aW91c19yYWlkX2Rpc2tzID0gbWRkZXYtPnJhaWRfZGlza3MgLSBtZGRldi0+ZGVsdGFfZGlza3M7Ci0KLQljb25mLT5kaXNrcyA9IGt6YWxsb2MoY29uZi0+cmFpZF9kaXNrcyAqIHNpemVvZihzdHJ1Y3QgZGlza19pbmZvKSwKLQkJCSAgICAgIEdGUF9LRVJORUwpOwotCWlmICghY29uZi0+ZGlza3MpCi0JCWdvdG8gYWJvcnQ7Ci0KLQljb25mLT5tZGRldiA9IG1kZGV2OwotCi0JaWYgKChjb25mLT5zdHJpcGVfaGFzaHRibCA9IGt6YWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKSkgPT0gTlVMTCkKLQkJZ290byBhYm9ydDsKLQotCWNvbmYtPmxldmVsID0gbWRkZXYtPm5ld19sZXZlbDsKLQlpZiAocmFpZDVfYWxsb2NfcGVyY3B1KGNvbmYpICE9IDApCi0JCWdvdG8gYWJvcnQ7Ci0KIAlzcGluX2xvY2tfaW5pdCgmY29uZi0+ZGV2aWNlX2xvY2spOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmNvbmYtPndhaXRfZm9yX3N0cmlwZSk7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmY29uZi0+d2FpdF9mb3Jfb3ZlcmxhcCk7CkBAIC00NzU3LDExICs0NzM2LDMzIEBACiAJYXRvbWljX3NldCgmY29uZi0+YWN0aXZlX2FsaWduZWRfcmVhZHMsIDApOwogCWNvbmYtPmJ5cGFzc190aHJlc2hvbGQgPSBCWVBBU1NfVEhSRVNIT0xEOwogCisJY29uZi0+cmFpZF9kaXNrcyA9IG1kZGV2LT5yYWlkX2Rpc2tzOworCWlmIChtZGRldi0+cmVzaGFwZV9wb3NpdGlvbiA9PSBNYXhTZWN0b3IpCisJCWNvbmYtPnByZXZpb3VzX3JhaWRfZGlza3MgPSBtZGRldi0+cmFpZF9kaXNrczsKKwllbHNlCisJCWNvbmYtPnByZXZpb3VzX3JhaWRfZGlza3MgPSBtZGRldi0+cmFpZF9kaXNrcyAtIG1kZGV2LT5kZWx0YV9kaXNrczsKKwltYXhfZGlza3MgPSBtYXgoY29uZi0+cmFpZF9kaXNrcywgY29uZi0+cHJldmlvdXNfcmFpZF9kaXNrcyk7CisJY29uZi0+c2NyaWJibGVfbGVuID0gc2NyaWJibGVfbGVuKG1heF9kaXNrcyk7CisKKwljb25mLT5kaXNrcyA9IGt6YWxsb2MobWF4X2Rpc2tzICogc2l6ZW9mKHN0cnVjdCBkaXNrX2luZm8pLAorCQkJICAgICAgR0ZQX0tFUk5FTCk7CisJaWYgKCFjb25mLT5kaXNrcykKKwkJZ290byBhYm9ydDsKKworCWNvbmYtPm1kZGV2ID0gbWRkZXY7CisKKwlpZiAoKGNvbmYtPnN0cmlwZV9oYXNodGJsID0ga3phbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwpKSA9PSBOVUxMKQorCQlnb3RvIGFib3J0OworCisJY29uZi0+bGV2ZWwgPSBtZGRldi0+bmV3X2xldmVsOworCWlmIChyYWlkNV9hbGxvY19wZXJjcHUoY29uZikgIT0gMCkKKwkJZ290byBhYm9ydDsKKwogCXByX2RlYnVnKCJyYWlkNTogcnVuKCVzKSBjYWxsZWQuXG4iLCBtZG5hbWUobWRkZXYpKTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkocmRldiwgJm1kZGV2LT5kaXNrcywgc2FtZV9zZXQpIHsKIAkJcmFpZF9kaXNrID0gcmRldi0+cmFpZF9kaXNrOwotCQlpZiAocmFpZF9kaXNrID49IGNvbmYtPnJhaWRfZGlza3MKKwkJaWYgKHJhaWRfZGlzayA+PSBtYXhfZGlza3MKIAkJICAgIHx8IHJhaWRfZGlzayA8IDApCiAJCQljb250aW51ZTsKIAkJZGlzayA9IGNvbmYtPmRpc2tzICsgcmFpZF9kaXNrOwpAQCAtNDc5Myw3ICs0Nzk0LDcgQEAKIAl9CiAKIAltZW1vcnkgPSBjb25mLT5tYXhfbnJfc3RyaXBlcyAqIChzaXplb2Yoc3RydWN0IHN0cmlwZV9oZWFkKSArCi0JCSBjb25mLT5yYWlkX2Rpc2tzICogKChzaXplb2Yoc3RydWN0IGJpbykgKyBQQUdFX1NJWkUpKSkgLyAxMDI0OworCQkgbWF4X2Rpc2tzICogKChzaXplb2Yoc3RydWN0IGJpbykgKyBQQUdFX1NJWkUpKSkgLyAxMDI0OwogCWlmIChncm93X3N0cmlwZXMoY29uZiwgY29uZi0+bWF4X25yX3N0cmlwZXMpKSB7CiAJCXByaW50ayhLRVJOX0VSUgogCQkJInJhaWQ1OiBjb3VsZG4ndCBhbGxvY2F0ZSAlZGtCIGZvciBidWZmZXJzXG4iLCBtZW1vcnkpOwpAQCAtNDkxOCw3ICs0OTE5LDggQEAKIAkJICAgIHRlc3RfYml0KEluX3N5bmMsICZyZGV2LT5mbGFncykpCiAJCQl3b3JraW5nX2Rpc2tzKys7CiAKLQltZGRldi0+ZGVncmFkZWQgPSBjb25mLT5yYWlkX2Rpc2tzIC0gd29ya2luZ19kaXNrczsKKwltZGRldi0+ZGVncmFkZWQgPSAobWF4KGNvbmYtPnJhaWRfZGlza3MsIGNvbmYtPnByZXZpb3VzX3JhaWRfZGlza3MpCisJCQkgICAtIHdvcmtpbmdfZGlza3MpOwogCiAJaWYgKG1kZGV2LT5kZWdyYWRlZCA+IGNvbmYtPm1heF9kZWdyYWRlZCkgewogCQlwcmludGsoS0VSTl9FUlIgInJhaWQ1OiBub3QgZW5vdWdoIG9wZXJhdGlvbmFsIGRldmljZXMgZm9yICVzIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9yYWlkNS5oIGIvZHJpdmVycy9tZC9yYWlkNS5oCmluZGV4IDIzOTBlMGUuLmRkNzA4MzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvcmFpZDUuaAorKysgYi9kcml2ZXJzL21kL3JhaWQ1LmgKQEAgLTIxNCwxMiArMjE0LDIwIEBACiAJaW50CQkJZGlza3M7CQkvKiBkaXNrcyBpbiBzdHJpcGUgKi8KIAllbnVtIGNoZWNrX3N0YXRlcwljaGVja19zdGF0ZTsKIAllbnVtIHJlY29uc3RydWN0X3N0YXRlcyByZWNvbnN0cnVjdF9zdGF0ZTsKLQkvKiBzdHJpcGVfb3BlcmF0aW9ucworCS8qKgorCSAqIHN0cnVjdCBzdHJpcGVfb3BlcmF0aW9ucwogCSAqIEB0YXJnZXQgLSBTVFJJUEVfT1BfQ09NUFVURV9CTEsgdGFyZ2V0CisJICogQHRhcmdldDIgLSAybmQgY29tcHV0ZSB0YXJnZXQgaW4gdGhlIHJhaWQ2IGNhc2UKKwkgKiBAemVyb19zdW1fcmVzdWx0IC0gUCBhbmQgUSB2ZXJpZmljYXRpb24gZmxhZ3MKKwkgKiBAcmVxdWVzdCAtIGFzeW5jIHNlcnZpY2UgcmVxdWVzdCBmbGFncyBmb3IgcmFpZF9ydW5fb3BzCiAJICovCiAJc3RydWN0IHN0cmlwZV9vcGVyYXRpb25zIHsKIAkJaW50IAkJICAgICB0YXJnZXQsIHRhcmdldDI7CiAJCWVudW0gc3VtX2NoZWNrX2ZsYWdzIHplcm9fc3VtX3Jlc3VsdDsKKwkJI2lmZGVmIENPTkZJR19NVUxUSUNPUkVfUkFJRDQ1NgorCQl1bnNpZ25lZCBsb25nCSAgICAgcmVxdWVzdDsKKwkJd2FpdF9xdWV1ZV9oZWFkX3QgICAgd2FpdF9mb3Jfb3BzOworCQkjZW5kaWYKIAl9IG9wczsKIAlzdHJ1Y3QgcjVkZXYgewogCQlzdHJ1Y3QgYmlvCXJlcTsKQEAgLTI5NCw2ICszMDIsOCBAQAogI2RlZmluZQlTVFJJUEVfRlVMTF9XUklURQkxMyAvKiBhbGwgYmxvY2tzIGFyZSBzZXQgdG8gYmUgb3ZlcndyaXR0ZW4gKi8KICNkZWZpbmUJU1RSSVBFX0JJT0ZJTExfUlVOCTE0CiAjZGVmaW5lCVNUUklQRV9DT01QVVRFX1JVTgkxNQorI2RlZmluZQlTVFJJUEVfT1BTX1JFUV9QRU5ESU5HCTE2CisKIC8qCiAgKiBPcGVyYXRpb24gcmVxdWVzdCBmbGFncwogICovCkBAIC00NzgsNyArNDg4LDcgQEAKIHsKIAlyZXR1cm4gKGxheW91dCA+PSAwICYmIGxheW91dCA8PSA1KQogCQl8fAotCQkobGF5b3V0ID09IDggfHwgbGF5b3V0ID09IDEwKQorCQkobGF5b3V0ID49IDggJiYgbGF5b3V0IDw9IDEwKQogCQl8fAogCQkobGF5b3V0ID49IDE2ICYmIGxheW91dCA8PSAyMCk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL3JhaWQ2YWx0aXZlYy51YyBiL2RyaXZlcnMvbWQvcmFpZDZhbHRpdmVjLnVjCmluZGV4IDY5OWRmZWUuLjI2NTRkNWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvcmFpZDZhbHRpdmVjLnVjCisrKyBiL2RyaXZlcnMvbWQvcmFpZDZhbHRpdmVjLnVjCkBAIC0xNSw3ICsxNSw3IEBACiAgKgogICogJCMtd2F5IHVucm9sbGVkIHBvcnRhYmxlIGludGVnZXIgbWF0aCBSQUlELTYgaW5zdHJ1Y3Rpb24gc2V0CiAgKgotICogVGhpcyBmaWxlIGlzIHBvc3Rwcm9jZXNzZWQgdXNpbmcgdW5yb2xsLnBsCisgKiBUaGlzIGZpbGUgaXMgcG9zdHByb2Nlc3NlZCB1c2luZyB1bnJvbGwuYXdrCiAgKgogICogPGJlbmg+IGhwYTogaW4gcHJvY2VzcywKICAqIHlvdSBjYW4ganVzdCAic3RlYWwiIHRoZSB2ZWMgdW5pdCB3aXRoIGVuYWJsZV9rZXJuZWxfYWx0aXZlYygpIChidXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvcmFpZDZpbnQudWMgYi9kcml2ZXJzL21kL3JhaWQ2aW50LnVjCmluZGV4IGY5YmY5Y2IuLmQxZTI3NmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvcmFpZDZpbnQudWMKKysrIGIvZHJpdmVycy9tZC9yYWlkNmludC51YwpAQCAtMTUsNyArMTUsNyBAQAogICoKICAqICQjLXdheSB1bnJvbGxlZCBwb3J0YWJsZSBpbnRlZ2VyIG1hdGggUkFJRC02IGluc3RydWN0aW9uIHNldAogICoKLSAqIFRoaXMgZmlsZSBpcyBwb3N0cHJvY2Vzc2VkIHVzaW5nIHVucm9sbC5wbAorICogVGhpcyBmaWxlIGlzIHBvc3Rwcm9jZXNzZWQgdXNpbmcgdW5yb2xsLmF3awogICovCiAKICNpbmNsdWRlIDxsaW51eC9yYWlkL3BxLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL3JhaWQ2dGVzdC9NYWtlZmlsZSBiL2RyaXZlcnMvbWQvcmFpZDZ0ZXN0L01ha2VmaWxlCmluZGV4IDU4ZmZkZjQuLjI4NzRjYmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvcmFpZDZ0ZXN0L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbWQvcmFpZDZ0ZXN0L01ha2VmaWxlCkBAIC03LDcgKzcsNyBAQAogT1BURkxBR1MgPSAtTzIJCQkjIEFkanVzdCBhcyBkZXNpcmVkCiBDRkxBR1MJID0gLUkuLiAtSSAuLi8uLi8uLi9pbmNsdWRlIC1nICQoT1BURkxBR1MpCiBMRAkgPSBsZAotUEVSTAkgPSBwZXJsCitBV0sJID0gYXdrCiBBUgkgPSBhcgogUkFOTElCCSA9IHJhbmxpYgogCkBAIC0zNSwzNSArMzUsMzUgQEAKIHJhaWQ2dGVzdDogdGVzdC5jIHJhaWQ2LmEKIAkkKENDKSAkKENGTEFHUykgLW8gcmFpZDZ0ZXN0ICReCiAKLXJhaWQ2YWx0aXZlYzEuYzogcmFpZDZhbHRpdmVjLnVjIC4uL3Vucm9sbC5wbAotCSQoUEVSTCkgLi4vdW5yb2xsLnBsIDEgPCByYWlkNmFsdGl2ZWMudWMgPiAkQAorcmFpZDZhbHRpdmVjMS5jOiByYWlkNmFsdGl2ZWMudWMgLi4vdW5yb2xsLmF3aworCSQoQVdLKSAuLi91bnJvbGwuYXdrIC12Tj0xIDwgcmFpZDZhbHRpdmVjLnVjID4gJEAKIAotcmFpZDZhbHRpdmVjMi5jOiByYWlkNmFsdGl2ZWMudWMgLi4vdW5yb2xsLnBsCi0JJChQRVJMKSAuLi91bnJvbGwucGwgMiA8IHJhaWQ2YWx0aXZlYy51YyA+ICRACityYWlkNmFsdGl2ZWMyLmM6IHJhaWQ2YWx0aXZlYy51YyAuLi91bnJvbGwuYXdrCisJJChBV0spIC4uL3Vucm9sbC5hd2sgLXZOPTIgPCByYWlkNmFsdGl2ZWMudWMgPiAkQAogCi1yYWlkNmFsdGl2ZWM0LmM6IHJhaWQ2YWx0aXZlYy51YyAuLi91bnJvbGwucGwKLQkkKFBFUkwpIC4uL3Vucm9sbC5wbCA0IDwgcmFpZDZhbHRpdmVjLnVjID4gJEAKK3JhaWQ2YWx0aXZlYzQuYzogcmFpZDZhbHRpdmVjLnVjIC4uL3Vucm9sbC5hd2sKKwkkKEFXSykgLi4vdW5yb2xsLmF3ayAtdk49NCA8IHJhaWQ2YWx0aXZlYy51YyA+ICRACiAKLXJhaWQ2YWx0aXZlYzguYzogcmFpZDZhbHRpdmVjLnVjIC4uL3Vucm9sbC5wbAotCSQoUEVSTCkgLi4vdW5yb2xsLnBsIDggPCByYWlkNmFsdGl2ZWMudWMgPiAkQAorcmFpZDZhbHRpdmVjOC5jOiByYWlkNmFsdGl2ZWMudWMgLi4vdW5yb2xsLmF3aworCSQoQVdLKSAuLi91bnJvbGwuYXdrIC12Tj04IDwgcmFpZDZhbHRpdmVjLnVjID4gJEAKIAotcmFpZDZpbnQxLmM6IHJhaWQ2aW50LnVjIC4uL3Vucm9sbC5wbAotCSQoUEVSTCkgLi4vdW5yb2xsLnBsIDEgPCByYWlkNmludC51YyA+ICRACityYWlkNmludDEuYzogcmFpZDZpbnQudWMgLi4vdW5yb2xsLmF3aworCSQoQVdLKSAuLi91bnJvbGwuYXdrIC12Tj0xIDwgcmFpZDZpbnQudWMgPiAkQAogCi1yYWlkNmludDIuYzogcmFpZDZpbnQudWMgLi4vdW5yb2xsLnBsCi0JJChQRVJMKSAuLi91bnJvbGwucGwgMiA8IHJhaWQ2aW50LnVjID4gJEAKK3JhaWQ2aW50Mi5jOiByYWlkNmludC51YyAuLi91bnJvbGwuYXdrCisJJChBV0spIC4uL3Vucm9sbC5hd2sgLXZOPTIgPCByYWlkNmludC51YyA+ICRACiAKLXJhaWQ2aW50NC5jOiByYWlkNmludC51YyAuLi91bnJvbGwucGwKLQkkKFBFUkwpIC4uL3Vucm9sbC5wbCA0IDwgcmFpZDZpbnQudWMgPiAkQAorcmFpZDZpbnQ0LmM6IHJhaWQ2aW50LnVjIC4uL3Vucm9sbC5hd2sKKwkkKEFXSykgLi4vdW5yb2xsLmF3ayAtdk49NCA8IHJhaWQ2aW50LnVjID4gJEAKIAotcmFpZDZpbnQ4LmM6IHJhaWQ2aW50LnVjIC4uL3Vucm9sbC5wbAotCSQoUEVSTCkgLi4vdW5yb2xsLnBsIDggPCByYWlkNmludC51YyA+ICRACityYWlkNmludDguYzogcmFpZDZpbnQudWMgLi4vdW5yb2xsLmF3aworCSQoQVdLKSAuLi91bnJvbGwuYXdrIC12Tj04IDwgcmFpZDZpbnQudWMgPiAkQAogCi1yYWlkNmludDE2LmM6IHJhaWQ2aW50LnVjIC4uL3Vucm9sbC5wbAotCSQoUEVSTCkgLi4vdW5yb2xsLnBsIDE2IDwgcmFpZDZpbnQudWMgPiAkQAorcmFpZDZpbnQxNi5jOiByYWlkNmludC51YyAuLi91bnJvbGwuYXdrCisJJChBV0spIC4uL3Vucm9sbC5hd2sgLXZOPTE2IDwgcmFpZDZpbnQudWMgPiAkQAogCi1yYWlkNmludDMyLmM6IHJhaWQ2aW50LnVjIC4uL3Vucm9sbC5wbAotCSQoUEVSTCkgLi4vdW5yb2xsLnBsIDMyIDwgcmFpZDZpbnQudWMgPiAkQAorcmFpZDZpbnQzMi5jOiByYWlkNmludC51YyAuLi91bnJvbGwuYXdrCisJJChBV0spIC4uL3Vucm9sbC5hd2sgLXZOPTMyIDwgcmFpZDZpbnQudWMgPiAkQAogCiByYWlkNnRhYmxlcy5jOiBta3RhYmxlcwogCS4vbWt0YWJsZXMgPiByYWlkNnRhYmxlcy5jCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL3Vucm9sbC5hd2sgYi9kcml2ZXJzL21kL3Vucm9sbC5hd2sKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzZhYTAzNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWQvdW5yb2xsLmF3awpAQCAtMCwwICsxLDIwIEBACisKKyMgVGhpcyBmaWx0ZXIgcmVxdWlyZXMgb25lIGNvbW1hbmQgbGluZSBvcHRpb24gb2YgZm9ybSAtdk49bgorIyB3aGVyZSBuIG11c3QgYmUgYSBkZWNpbWFsIG51bWJlci4KKyMKKyMgUmVwZWF0IGVhY2ggaW5wdXQgbGluZSBjb250YWluaW5nICQkIG4gdGltZXMsIHJlcGxhY2luZyAkJCB3aXRoIDAuLi5uLTEuCisjIFJlcGxhY2UgZWFjaCAkIyB3aXRoIG4sIGFuZCBlYWNoICQqIHdpdGggYSBzaW5nbGUgJC4KKworQkVHSU4geworCW4gPSBOICsgMAorfQoreworCWlmICgvXCRcJC8pIHsgcmVwID0gbiB9IGVsc2UgeyByZXAgPSAxIH0KKwlmb3IgKGkgPSAwOyBpIDwgcmVwOyArK2kpIHsKKwkJdG1wID0gJDAKKwkJZ3N1YigvXCRcJC8sIGksIHRtcCkKKwkJZ3N1YigvXCRcIy8sIG4sIHRtcCkKKwkJZ3N1YigvXCRcKi8sICIkIiwgdG1wKQorCQlwcmludCB0bXAKKwl9Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL3Vucm9sbC5wbCBiL2RyaXZlcnMvbWQvdW5yb2xsLnBsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYWNjNzEwLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbWQvdW5yb2xsLnBsCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotIyEvdXNyL2Jpbi9wZXJsCi0jCi0jIFRha2UgYSBwaWVjZSBvZiBDIGNvZGUgYW5kIGZvciBlYWNoIGxpbmUgd2hpY2ggY29udGFpbnMgdGhlIHNlcXVlbmNlICQkCi0jIHJlcGVhdCBuIHRpbWVzIHdpdGggJCByZXBsYWNlZCBieSAwLi4ubi0xOyB0aGUgc2VxdWVuY2UgJCMgaXMgcmVwbGFjZWQKLSMgYnkgdGhlIHVucm9sbGluZyBmYWN0b3IsIGFuZCAkKiB3aXRoIGEgc2luZ2xlICQKLSMKLQotKCRuKSA9IEBBUkdWOwotJG4gKz0gMDsKLQotd2hpbGUgKCBkZWZpbmVkKCRsaW5lID0gPFNURElOPikgKSB7Ci0gICAgaWYgKCAkbGluZSA9fiAvXCRcJC8gKSB7Ci0JJHJlcCA9ICRuOwotICAgIH0gZWxzZSB7Ci0JJHJlcCA9IDE7Ci0gICAgfQotICAgIGZvciAoICRpID0gMCA7ICRpIDwgJHJlcCA7ICRpKysgKSB7Ci0JJHRtcCA9ICRsaW5lOwotCSR0bXAgPX4gcy9cJFwkLyRpL2c7Ci0JJHRtcCA9fiBzL1wkXCMvJG4vZzsKLQkkdG1wID1+IHMvXCRcKi9cJC9nOwotCXByaW50ICR0bXA7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZG14ZGV2LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kbXhkZXYuYwppbmRleCAzNzUwZmY0Li5jMzc3OTBhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kbXhkZXYuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kbXhkZXYuYwpAQCAtMjAsNiArMjAsNyBAQAogICoKICAqLwogCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CkBAIC0xMjAzLDcgKzEyMDQsNyBAQAogCXJldHVybiBtYXNrOwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkdmJfZHZyX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkdmJfZHZyX2ZvcHMgPSB7CiAJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLnJlYWQgPSBkdmJfZHZyX3JlYWQsCiAJLndyaXRlID0gZHZiX2R2cl93cml0ZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9kZW11eC5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX2RlbXV4LmMKaW5kZXggZWVmNmQzNi4uOTFjNTM3YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX2RlbXV4LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX2RlbXV4LmMKQEAgLTIxLDYgKzIxLDcgQEAKICAqCiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX25ldC5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX25ldC5jCmluZGV4IDhjOWFlMGEuLjAyNDFhN2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9uZXQuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfbmV0LmMKQEAgLTYzLDYgKzYzLDcgQEAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogCiAjaW5jbHVkZSAiZHZiX2RlbXV4LmgiCiAjaW5jbHVkZSAiZHZiX25ldC5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZmlyZXdpcmUvZmlyZWR0di1jaS5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZmlyZXdpcmUvZmlyZWR0di1jaS5jCmluZGV4IGVlYjgwZDAuLjg1M2UwNGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2ZpcmV3aXJlL2ZpcmVkdHYtY2kuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9maXJld2lyZS9maXJlZHR2LWNpLmMKQEAgLTIxNSw3ICsyMTUsNyBAQAogCXJldHVybiBQT0xMSU47CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGZkdHZfY2FfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGZkdHZfY2FfZm9wcyA9IHsKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLmlvY3RsCQk9IGR2Yl9nZW5lcmljX2lvY3RsLAogCS5vcGVuCQk9IGR2Yl9nZW5lcmljX29wZW4sCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLWNhZGV0LmMgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLWNhZGV0LmMKaW5kZXggOGIxNDQwMS4uNDgyZDBmMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1jYWRldC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tY2FkZXQuYwpAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgkvKiBWNEwyIEFQSSBkZWZzCQkqLwogI2luY2x1ZGUgPGxpbnV4L3BhcmFtLmg+CiAjaW5jbHVkZSA8bGludXgvcG5wLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgkJLyogb3V0Yiwgb3V0Yl9wCQkJKi8KICNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItaW9jdGwuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY2FmZV9jY2ljLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2NhZmVfY2NpYy5jCmluZGV4IDY1N2M0ODEuLjEwMjMwY2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY2FmZV9jY2ljLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jYWZlX2NjaWMuYwpAQCAtMTMyNSw3ICsxMzI1LDcgQEAKIAltdXRleF91bmxvY2soJnNidWYtPmNhbS0+c19tdXRleCk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgY2FmZV92NGxfdm1fb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBjYWZlX3Y0bF92bV9vcHMgPSB7CiAJLm9wZW4gPSBjYWZlX3Y0bF92bV9vcGVuLAogCS5jbG9zZSA9IGNhZmVfdjRsX3ZtX2Nsb3NlCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jcGlhLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2NwaWEuYwppbmRleCA0M2FiMGFkLi4yMzc3MzEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2NwaWEuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2NwaWEuYwpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZXQ2MXgyNTEvZXQ2MXgyNTFfY29yZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9ldDYxeDI1MS9ldDYxeDI1MV9jb3JlLmMKaW5kZXggNzQwOTJmNC4uODg5ODdhNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9ldDYxeDI1MS9ldDYxeDI1MV9jb3JlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9ldDYxeDI1MS9ldDYxeDI1MV9jb3JlLmMKQEAgLTE0OTYsNyArMTQ5Niw3IEBACiB9CiAKIAotc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBldDYxeDI1MV92bV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGV0NjF4MjUxX3ZtX29wcyA9IHsKIAkub3BlbiA9IGV0NjF4MjUxX3ZtX29wZW4sCiAJLmNsb3NlID0gZXQ2MXgyNTFfdm1fY2xvc2UsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9nc3BjYS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9nc3BjYS5jCmluZGV4IGNmNjU0MGQuLjIzZDNmYjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvZ3NwY2EuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2dzcGNhLmMKQEAgLTk5LDcgKzk5LDcgQEAKIAkJZnJhbWUtPnY0bDJfYnVmLmZsYWdzICY9IH5WNEwyX0JVRl9GTEFHX01BUFBFRDsKIH0KIAotc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBnc3BjYV92bV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGdzcGNhX3ZtX29wcyA9IHsKIAkub3BlbgkJPSBnc3BjYV92bV9vcGVuLAogCS5jbG9zZQkJPSBnc3BjYV92bV9jbG9zZSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL21leWUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vbWV5ZS5jCmluZGV4IGQwNzY1YmUuLjAxZTFlZWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vbWV5ZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vbWV5ZS5jCkBAIC0yOCw2ICsyOCw3IEBACiAgKi8KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CkBAIC0xNTg5LDcgKzE1OTAsNyBAQAogCW1leWUudm1hX3VzZV9jb3VudFtpZHhdLS07CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgbWV5ZV92bV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IG1leWVfdm1fb3BzID0gewogCS5vcGVuCQk9IG1leWVfdm1fb3BlbiwKIAkuY2xvc2UJCT0gbWV5ZV92bV9jbG9zZSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NoX21vYmlsZV9jZXVfY2FtZXJhLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NoX21vYmlsZV9jZXVfY2FtZXJhLmMKaW5kZXggNWFiN2M1YS4uNjVhYzQ3NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zaF9tb2JpbGVfY2V1X2NhbWVyYS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2hfbW9iaWxlX2NldV9jYW1lcmEuYwpAQCAtNDA0LDcgKzQwNCw3IEBACiAJCSAiU3VwZXJIIE1vYmlsZSBDRVUgZHJpdmVyIGF0dGFjaGVkIHRvIGNhbWVyYSAlZFxuIiwKIAkJIGljZC0+ZGV2bnVtKTsKIAotCWNsa19lbmFibGUocGNkZXYtPmNsayk7CisJcG1fcnVudGltZV9nZXRfc3luYyhpY2ktPnY0bDJfZGV2LmRldik7CiAKIAljZXVfd3JpdGUocGNkZXYsIENBUFNSLCAxIDw8IDE2KTsgLyogcmVzZXQgKi8KIAl3aGlsZSAoY2V1X3JlYWQocGNkZXYsIENTVFNSKSAmIDEpCkBAIC00MzgsNyArNDM4LDcgQEAKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGNkZXYtPmxvY2ssIGZsYWdzKTsKIAotCWNsa19kaXNhYmxlKHBjZGV2LT5jbGspOworCXBtX3J1bnRpbWVfcHV0X3N5bmMoaWNpLT52NGwyX2Rldi5kZXYpOwogCiAJZGV2X2luZm8oaWNkLT5kZXYucGFyZW50LAogCQkgIlN1cGVySCBNb2JpbGUgQ0VVIGRyaXZlciBkZXRhY2hlZCBmcm9tIGNhbWVyYSAlZFxuIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyX2NvcmUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyX2NvcmUuYwppbmRleCA5ZDg0Yzk0Li40YTc3MTFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvc245YzEwMl9jb3JlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL3NuOWMxMDJfY29yZS5jCkBAIC0yMDc3LDcgKzIwNzcsNyBAQAogfQogCiAKLXN0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3Qgc245YzEwMl92bV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHNuOWMxMDJfdm1fb3BzID0gewogCS5vcGVuID0gc245YzEwMl92bV9vcGVuLAogCS5jbG9zZSA9IHNuOWMxMDJfdm1fY2xvc2UsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zdGstd2ViY2FtLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3N0ay13ZWJjYW0uYwppbmRleCAwYjk5NmVhLi42YjQxODY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3N0ay13ZWJjYW0uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3N0ay13ZWJjYW0uYwpAQCAtNzkwLDcgKzc5MCw3IEBACiAJaWYgKHNidWYtPm1hcGNvdW50ID09IDApCiAJCXNidWYtPnY0bGJ1Zi5mbGFncyAmPSB+VjRMMl9CVUZfRkxBR19NQVBQRUQ7CiB9Ci1zdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHN0a192NGxfdm1fb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBzdGtfdjRsX3ZtX29wcyA9IHsKIAkub3BlbiA9IHN0a192NGxfdm1fb3BlbiwKIAkuY2xvc2UgPSBzdGtfdjRsX3ZtX2Nsb3NlCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX3Y0bDIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y192NGwyLmMKaW5kZXggOWU3MzUxNS4uYTJiZGQ4MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX3Y0bDIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmNfdjRsMi5jCkBAIC0xMDY5LDcgKzEwNjksNyBAQAogCWJ1ZmZlci0+dm1hX3VzZV9jb3VudC0tOwogfQogCi1zdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHV2Y192bV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHV2Y192bV9vcHMgPSB7CiAJLm9wZW4JCT0gdXZjX3ZtX29wZW4sCiAJLmNsb3NlCQk9IHV2Y192bV9jbG9zZSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpZGVvYnVmLWNvcmUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmlkZW9idWYtY29yZS5jCmluZGV4IGYxY2NmOTguLjhlOTNjNmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmlkZW9idWYtY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmlkZW9idWYtY29yZS5jCkBAIC0xNyw2ICsxNyw3IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpZGVvYnVmLWRtYS1jb250aWcuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmlkZW9idWYtZG1hLWNvbnRpZy5jCmluZGV4IGQwOWNlODMuLjYzNWZmYzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmlkZW9idWYtZG1hLWNvbnRpZy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmlkZW9idWYtZG1hLWNvbnRpZy5jCkBAIC0xMDUsNyArMTA1LDcgQEAKIAl9CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgdmlkZW9idWZfdm1fb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCB2aWRlb2J1Zl92bV9vcHMgPSB7CiAJLm9wZW4gICAgID0gdmlkZW9idWZfdm1fb3BlbiwKIAkuY2xvc2UgICAgPSB2aWRlb2J1Zl92bV9jbG9zZSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpZGVvYnVmLWRtYS1zZy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby92aWRlb2J1Zi1kbWEtc2cuYwppbmRleCBhOGRkMjJhLi4wMzJlYmFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpZGVvYnVmLWRtYS1zZy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmlkZW9idWYtZG1hLXNnLmMKQEAgLTIxLDYgKzIxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KIApAQCAtMzk0LDcgKzM5NSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgdmlkZW9idWZfdm1fb3BzID0KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgdmlkZW9idWZfdm1fb3BzID0KIHsKIAkub3BlbiAgICAgPSB2aWRlb2J1Zl92bV9vcGVuLAogCS5jbG9zZSAgICA9IHZpZGVvYnVmX3ZtX2Nsb3NlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby92aWRlb2J1Zi12bWFsbG9jLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpZGVvYnVmLXZtYWxsb2MuYwppbmRleCAzMGFlMzBmLi4zNWYzOTAwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpZGVvYnVmLXZtYWxsb2MuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpZGVvYnVmLXZtYWxsb2MuYwpAQCAtMTE2LDcgKzExNiw3IEBACiAJcmV0dXJuOwogfQogCi1zdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHZpZGVvYnVmX3ZtX29wcyA9CitzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHZpZGVvYnVmX3ZtX29wcyA9CiB7CiAJLm9wZW4gICAgID0gdmlkZW9idWZfdm1fb3BlbiwKIAkuY2xvc2UgICAgPSB2aWRlb2J1Zl92bV9jbG9zZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmluby5jIGIvZHJpdmVycy9tZWRpYS92aWRlby92aW5vLmMKaW5kZXggY2Q2YTM0NC4uYjAzNGE4MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby92aW5vLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby92aW5vLmMKQEAgLTM4NTcsNyArMzg1Nyw3IEBACiAJZHByaW50aygidmlub192bV9jbG9zZSgpOiBjb3VudCA9ICVkXG4iLCBmYi0+bWFwX2NvdW50KTsKIH0KIAotc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCB2aW5vX3ZtX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3Qgdmlub192bV9vcHMgPSB7CiAJLm9wZW4JPSB2aW5vX3ZtX29wZW4sCiAJLmNsb3NlCT0gdmlub192bV9jbG9zZSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pjMDMwMS96YzAzMDFfY29yZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby96YzAzMDEvemMwMzAxX2NvcmUuYwppbmRleCBiM2M2NDM2Li4zMTJhNzEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pjMDMwMS96YzAzMDFfY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vemMwMzAxL3pjMDMwMV9jb3JlLmMKQEAgLTkzNSw3ICs5MzUsNyBAQAogfQogCiAKLXN0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgemMwMzAxX3ZtX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgemMwMzAxX3ZtX29wcyA9IHsKIAkub3BlbiA9IHpjMDMwMV92bV9vcGVuLAogCS5jbG9zZSA9IHpjMDMwMV92bV9jbG9zZSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3pvcmFuX2RyaXZlci5jIGIvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96b3Jhbl9kcml2ZXIuYwppbmRleCBiY2RlZmIxLi40NzEzN2RlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3pvcmFuX2RyaXZlci5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4vem9yYW5fZHJpdmVyLmMKQEAgLTMxNzIsNyArMzE3Miw3IEBACiAJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3Qgem9yYW5fdm1fb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCB6b3Jhbl92bV9vcHMgPSB7CiAJLm9wZW4gPSB6b3Jhbl92bV9vcGVuLAogCS5jbG9zZSA9IHpvcmFuX3ZtX2Nsb3NlLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0bGFuLmMgYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGxhbi5jCmluZGV4IGJjMmVjMjEuLjM0ZjNmMzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0bGFuLmMKKysrIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRsYW4uYwpAQCAtNTYsNiArNTYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAKICNkZWZpbmUgbXlfVkVSU0lPTglNUFRfTElOVVhfVkVSU0lPTl9DT01NT04KICNkZWZpbmUgTVlOQU0JCSJtcHRsYW4iCmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC9hYjMxMDAtY29yZS5jIGIvZHJpdmVycy9tZmQvYWIzMTAwLWNvcmUuYwppbmRleCA1NDQ3ZGExLi42MTM0ODEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC9hYjMxMDAtY29yZS5jCisrKyBiL2RyaXZlcnMvbWZkL2FiMzEwMC1jb3JlLmMKQEAgLTU3LDggKzU3LDYgQEAKICAqIFRoZSBBQjMxMDAgaXMgdXN1YWxseSBhc3NpZ25lZCBhZGRyZXNzIDB4NDggKDctYml0KQogICogVGhlIGNoaXAgaXMgZGVmaW5lZCBpbiB0aGUgcGxhdGZvcm0gaTJjX2JvYXJkX2RhdGEgc2VjdGlvbi4KICAqLwotc3RhdGljIHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsgMHg0OCwgSTJDX0NMSUVOVF9FTkQgfTsKLUkyQ19DTElFTlRfSU5TTU9EXzEoYWIzMTAwKTsKIAogdTggYWIzMTAwX2dldF9jaGlwX3R5cGUoc3RydWN0IGFiMzEwMCAqYWIzMTAwKQogewpAQCAtOTY2LDcgKzk2NCw3IEBACiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBhYjMxMDBfaWRbXSA9IHsKLQl7ICJhYjMxMDAiLCBhYjMxMDAgfSwKKwl7ICJhYjMxMDAiLCAwIH0sCiAJeyB9CiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIGFiMzEwMF9pZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC90d2w0MDMwLWNvcmUuYyBiL2RyaXZlcnMvbWZkL3R3bDQwMzAtY29yZS5jCmluZGV4IGU0MjRjZjYuLmExYzQ3ZWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL3R3bDQwMzAtY29yZS5jCisrKyBiL2RyaXZlcnMvbWZkL3R3bDQwMzAtY29yZS5jCkBAIC00ODAsNyArNDgwLDYgQEAKIGFkZF9jaGlsZHJlbihzdHJ1Y3QgdHdsNDAzMF9wbGF0Zm9ybV9kYXRhICpwZGF0YSwgdW5zaWduZWQgbG9uZyBmZWF0dXJlcykKIHsKIAlzdHJ1Y3QgZGV2aWNlCSpjaGlsZDsKLQlzdHJ1Y3QgZGV2aWNlCSp1c2JfdHJhbnNjZWl2ZXIgPSBOVUxMOwogCiAJaWYgKHR3bF9oYXNfYmNpKCkgJiYgcGRhdGEtPmJjaSAmJiAhKGZlYXR1cmVzICYgVFBTX1NVQlNFVCkpIHsKIAkJY2hpbGQgPSBhZGRfY2hpbGQoMywgInR3bDQwMzBfYmNpIiwKQEAgLTUzMiwxNiArNTMxLDYxIEBACiAJfQogCiAJaWYgKHR3bF9oYXNfdXNiKCkgJiYgcGRhdGEtPnVzYikgeworCisJCXN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSB1c2IxdjUgPSB7CisJCQkuc3VwcGx5ID0JInVzYjF2NSIsCisJCX07CisJCXN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSB1c2IxdjggPSB7CisJCQkuc3VwcGx5ID0JInVzYjF2OCIsCisJCX07CisJCXN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSB1c2IzdjEgPSB7CisJCQkuc3VwcGx5ID0JInVzYjN2MSIsCisJCX07CisKKwkvKiBGaXJzdCBhZGQgdGhlIHJlZ3VsYXRvcnMgc28gdGhhdCB0aGV5IGNhbiBiZSB1c2VkIGJ5IHRyYW5zY2VpdmVyICovCisJCWlmICh0d2xfaGFzX3JlZ3VsYXRvcigpKSB7CisJCQkvKiB0aGlzIGlzIGEgdGVtcGxhdGUgdGhhdCBnZXRzIGNvcGllZCAqLworCQkJc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgdXNiX2ZpeGVkID0geworCQkJCS5jb25zdHJhaW50cy52YWxpZF9tb2Rlc19tYXNrID0KKwkJCQkJUkVHVUxBVE9SX01PREVfTk9STUFMCisJCQkJCXwgUkVHVUxBVE9SX01PREVfU1RBTkRCWSwKKwkJCQkuY29uc3RyYWludHMudmFsaWRfb3BzX21hc2sgPQorCQkJCQlSRUdVTEFUT1JfQ0hBTkdFX01PREUKKwkJCQkJfCBSRUdVTEFUT1JfQ0hBTkdFX1NUQVRVUywKKwkJCX07CisKKwkJCWNoaWxkID0gYWRkX3JlZ3VsYXRvcl9saW5rZWQoVFdMNDAzMF9SRUdfVlVTQjFWNSwKKwkJCQkJCSAgICAgICZ1c2JfZml4ZWQsICZ1c2IxdjUsIDEpOworCQkJaWYgKElTX0VSUihjaGlsZCkpCisJCQkJcmV0dXJuIFBUUl9FUlIoY2hpbGQpOworCisJCQljaGlsZCA9IGFkZF9yZWd1bGF0b3JfbGlua2VkKFRXTDQwMzBfUkVHX1ZVU0IxVjgsCisJCQkJCQkgICAgICAmdXNiX2ZpeGVkLCAmdXNiMXY4LCAxKTsKKwkJCWlmIChJU19FUlIoY2hpbGQpKQorCQkJCXJldHVybiBQVFJfRVJSKGNoaWxkKTsKKworCQkJY2hpbGQgPSBhZGRfcmVndWxhdG9yX2xpbmtlZChUV0w0MDMwX1JFR19WVVNCM1YxLAorCQkJCQkJICAgICAgJnVzYl9maXhlZCwgJnVzYjN2MSwgMSk7CisJCQlpZiAoSVNfRVJSKGNoaWxkKSkKKwkJCQlyZXR1cm4gUFRSX0VSUihjaGlsZCk7CisKKwkJfQorCiAJCWNoaWxkID0gYWRkX2NoaWxkKDAsICJ0d2w0MDMwX3VzYiIsCiAJCQkJcGRhdGEtPnVzYiwgc2l6ZW9mKCpwZGF0YS0+dXNiKSwKIAkJCQl0cnVlLAogCQkJCS8qIGlycTAgPSBVU0JfUFJFUywgaXJxMSA9IFVTQiAqLwogCQkJCXBkYXRhLT5pcnFfYmFzZSArIDggKyAyLCBwZGF0YS0+aXJxX2Jhc2UgKyA0KTsKKwogCQlpZiAoSVNfRVJSKGNoaWxkKSkKIAkJCXJldHVybiBQVFJfRVJSKGNoaWxkKTsKIAogCQkvKiB3ZSBuZWVkIHRvIGNvbm5lY3QgcmVndWxhdG9ycyB0byB0aGlzIHRyYW5zY2VpdmVyICovCi0JCXVzYl90cmFuc2NlaXZlciA9IGNoaWxkOworCQlpZiAodHdsX2hhc19yZWd1bGF0b3IoKSAmJiBjaGlsZCkgeworCQkJdXNiMXY1LmRldiA9IGNoaWxkOworCQkJdXNiMXY4LmRldiA9IGNoaWxkOworCQkJdXNiM3YxLmRldiA9IGNoaWxkOworCQl9CiAJfQogCiAJaWYgKHR3bF9oYXNfd2F0Y2hkb2coKSkgewpAQCAtNTgwLDQ3ICs2MjQsNiBAQAogCQkJcmV0dXJuIFBUUl9FUlIoY2hpbGQpOwogCX0KIAotCWlmICh0d2xfaGFzX3JlZ3VsYXRvcigpICYmIHVzYl90cmFuc2NlaXZlcikgewotCQlzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgdXNiMXY1ID0gewotCQkJLnN1cHBseSA9CSJ1c2IxdjUiLAotCQl9OwotCQlzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgdXNiMXY4ID0gewotCQkJLnN1cHBseSA9CSJ1c2IxdjgiLAotCQl9OwotCQlzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgdXNiM3YxID0gewotCQkJLnN1cHBseSA9CSJ1c2IzdjEiLAotCQl9OwotCi0JCS8qIHRoaXMgaXMgYSB0ZW1wbGF0ZSB0aGF0IGdldHMgY29waWVkICovCi0JCXN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIHVzYl9maXhlZCA9IHsKLQkJCS5jb25zdHJhaW50cy52YWxpZF9tb2Rlc19tYXNrID0KLQkJCQkgIFJFR1VMQVRPUl9NT0RFX05PUk1BTAotCQkJCXwgUkVHVUxBVE9SX01PREVfU1RBTkRCWSwKLQkJCS5jb25zdHJhaW50cy52YWxpZF9vcHNfbWFzayA9Ci0JCQkJICBSRUdVTEFUT1JfQ0hBTkdFX01PREUKLQkJCQl8IFJFR1VMQVRPUl9DSEFOR0VfU1RBVFVTLAotCQl9OwotCi0JCXVzYjF2NS5kZXYgPSB1c2JfdHJhbnNjZWl2ZXI7Ci0JCXVzYjF2OC5kZXYgPSB1c2JfdHJhbnNjZWl2ZXI7Ci0JCXVzYjN2MS5kZXYgPSB1c2JfdHJhbnNjZWl2ZXI7Ci0KLQkJY2hpbGQgPSBhZGRfcmVndWxhdG9yX2xpbmtlZChUV0w0MDMwX1JFR19WVVNCMVY1LCAmdXNiX2ZpeGVkLAotCQkJCSZ1c2IxdjUsIDEpOwotCQlpZiAoSVNfRVJSKGNoaWxkKSkKLQkJCXJldHVybiBQVFJfRVJSKGNoaWxkKTsKLQotCQljaGlsZCA9IGFkZF9yZWd1bGF0b3JfbGlua2VkKFRXTDQwMzBfUkVHX1ZVU0IxVjgsICZ1c2JfZml4ZWQsCi0JCQkJJnVzYjF2OCwgMSk7Ci0JCWlmIChJU19FUlIoY2hpbGQpKQotCQkJcmV0dXJuIFBUUl9FUlIoY2hpbGQpOwotCi0JCWNoaWxkID0gYWRkX3JlZ3VsYXRvcl9saW5rZWQoVFdMNDAzMF9SRUdfVlVTQjNWMSwgJnVzYl9maXhlZCwKLQkJCQkmdXNiM3YxLCAxKTsKLQkJaWYgKElTX0VSUihjaGlsZCkpCi0JCQlyZXR1cm4gUFRSX0VSUihjaGlsZCk7Ci0JfQotCiAJLyogbWF5YmUgYWRkIExET3MgdGhhdCBhcmUgb21pdHRlZCBvbiBjb3N0LXJlZHVjZWQgcGFydHMgKi8KIAlpZiAodHdsX2hhc19yZWd1bGF0b3IoKSAmJiAhKGZlYXR1cmVzICYgVFBTX1NVQlNFVCkpIHsKIAkJY2hpbGQgPSBhZGRfcmVndWxhdG9yKFRXTDQwMzBfUkVHX1ZQTEwyLCBwZGF0YS0+dnBsbDIpOwpAQCAtNzkyLDcgKzc5NSw3IEBACiAJCQl0d2wtPmNsaWVudCA9IGkyY19uZXdfZHVtbXkoY2xpZW50LT5hZGFwdGVyLAogCQkJCQl0d2wtPmFkZHJlc3MpOwogCQkJaWYgKCF0d2wtPmNsaWVudCkgewotCQkJCWRldl9lcnIoJnR3bC0+Y2xpZW50LT5kZXYsCisJCQkJZGV2X2VycigmY2xpZW50LT5kZXYsCiAJCQkJCSJjYW4ndCBhdHRhY2ggY2xpZW50ICVkXG4iLCBpKTsKIAkJCQlzdGF0dXMgPSAtRU5PTUVNOwogCQkJCWdvdG8gZmFpbDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL3VjYjE0MDBfY29yZS5jIGIvZHJpdmVycy9tZmQvdWNiMTQwMF9jb3JlLmMKaW5kZXggMmFmYzA4MC4uZmEyOTRiNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZmQvdWNiMTQwMF9jb3JlLmMKKysrIGIvZHJpdmVycy9tZmQvdWNiMTQwMF9jb3JlLmMKQEAgLTIxLDYgKzIxLDcgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC91Y2IxNDAwLmg+CiAKIHVuc2lnbmVkIGludCB1Y2IxNDAwX2FkY19yZWFkKHN0cnVjdCBzbmRfYWM5NyAqYWM5NywgdTE2IGFkY19jaGFubmVsLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvdWNiMXgwMC1jb3JlLmMgYi9kcml2ZXJzL21mZC91Y2IxeDAwLWNvcmUuYwppbmRleCBmZWE5MDg1Li42MGMzOTg4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC91Y2IxeDAwLWNvcmUuYworKysgYi9kcml2ZXJzL21mZC91Y2IxeDAwLWNvcmUuYwpAQCAtMTgsNiArMTgsNyBAQAogICovCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC93bTgzMXgtaXJxLmMgYi9kcml2ZXJzL21mZC93bTgzMXgtaXJxLmMKaW5kZXggZDMwMTVkZi4uYWMwNTZlYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZmQvd204MzF4LWlycS5jCisrKyBiL2RyaXZlcnMvbWZkL3dtODMxeC1pcnEuYwpAQCAtNTA3LDYgKzUwNyw4IEBACiB7CiAJaW50IGksIHJldDsKIAorCW11dGV4X2luaXQoJndtODMxeC0+aXJxX2xvY2spOworCiAJaWYgKCFpcnEpIHsKIAkJZGV2X3dhcm4od204MzF4LT5kZXYsCiAJCQkgIk5vIGludGVycnVwdCBzcGVjaWZpZWQgLSBmdW5jdGlvbmFsaXR5IGxpbWl0ZWRcbiIpOwpAQCAtNTIxLDcgKzUyMyw2IEBACiAJfQogCiAJd204MzF4LT5pcnEgPSBpcnE7Ci0JbXV0ZXhfaW5pdCgmd204MzF4LT5pcnFfbG9jayk7CiAJSU5JVF9XT1JLKCZ3bTgzMXgtPmlycV93b3JrLCB3bTgzMXhfaXJxX3dvcmtlcik7CiAKIAkvKiBNYXNrIHRoZSBpbmRpdmlkdWFsIGludGVycnVwdCBzb3VyY2VzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2MvZWVwcm9tL21heDY4NzUuYyBiL2RyaXZlcnMvbWlzYy9lZXByb20vbWF4Njg3NS5jCmluZGV4IDNjMGM1OGUuLjVhNmIyYmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9lZXByb20vbWF4Njg3NS5jCisrKyBiL2RyaXZlcnMvbWlzYy9lZXByb20vbWF4Njg3NS5jCkBAIC0zMywxMiArMzMsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAKLS8qIERvIG5vdCBzY2FuIC0gdGhlIE1BWDY4NzUgYWNjZXNzIG1ldGhvZCB3aWxsIHdyaXRlIHRvIHNvbWUgRUVQUk9NIGNoaXBzICovCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geyBJMkNfQ0xJRU5UX0VORCB9OwotCi0vKiBJbnNtb2QgcGFyYW1ldGVycyAqLwotSTJDX0NMSUVOVF9JTlNNT0RfMShtYXg2ODc1KTsKLQogLyogVGhlIE1BWDY4NzUgY2FuIG9ubHkgcmVhZC93cml0ZSAxNiBieXRlcyBhdCBhIHRpbWUgKi8KICNkZWZpbmUgU0xJQ0VfU0laRQkJCTE2CiAjZGVmaW5lIFNMSUNFX0JJVFMJCQk0CkBAIC0xNDYsMzEgKzE0MCwyMSBAQAogCS5yZWFkID0gbWF4Njg3NV9yZWFkLAogfTsKIAotLyogUmV0dXJuIDAgaWYgZGV0ZWN0aW9uIGlzIHN1Y2Nlc3NmdWwsIC1FTk9ERVYgb3RoZXJ3aXNlICovCi1zdGF0aWMgaW50IG1heDY4NzVfZGV0ZWN0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCBraW5kLAotCQkJICBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gKmluZm8pCitzdGF0aWMgaW50IG1heDY4NzVfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJCSBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCiB7CiAJc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyID0gY2xpZW50LT5hZGFwdGVyOworCXN0cnVjdCBtYXg2ODc1X2RhdGEgKmRhdGE7CisJaW50IGVycjsKIAogCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoYWRhcHRlciwgSTJDX0ZVTkNfU01CVVNfV1JJVEVfQllURV9EQVRBCiAJCQkJICAgICB8IEkyQ19GVU5DX1NNQlVTX1JFQURfQllURSkpCiAJCXJldHVybiAtRU5PREVWOwogCi0JLyogT25seSBjaGVjayBldmVuIGFkZHJlc3NlcyAqLworCS8qIE9ubHkgYmluZCB0byBldmVuIGFkZHJlc3NlcyAqLwogCWlmIChjbGllbnQtPmFkZHIgJiAxKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCXN0cmxjcHkoaW5mby0+dHlwZSwgIm1heDY4NzUiLCBJMkNfTkFNRV9TSVpFKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IG1heDY4NzVfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKLQkJCSBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCi17Ci0Jc3RydWN0IG1heDY4NzVfZGF0YSAqZGF0YTsKLQlpbnQgZXJyOwotCiAJaWYgKCEoZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBtYXg2ODc1X2RhdGEpLCBHRlBfS0VSTkVMKSkpCiAJCXJldHVybiAtRU5PTUVNOwogCkBAIC0yMjIsOSArMjA2LDYgQEAKIAkucHJvYmUJCT0gbWF4Njg3NV9wcm9iZSwKIAkucmVtb3ZlCQk9IG1heDY4NzVfcmVtb3ZlLAogCS5pZF90YWJsZQk9IG1heDY4NzVfaWQsCi0KLQkuZGV0ZWN0CQk9IG1heDY4NzVfZGV0ZWN0LAotCS5hZGRyZXNzX2RhdGEJPSAmYWRkcl9kYXRhLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgbWF4Njg3NV9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2MvaHBpbG8uYyBiL2RyaXZlcnMvbWlzYy9ocGlsby5jCmluZGV4IDFhZDI3YzYuLmE5MmEzYTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9ocGlsby5jCisrKyBiL2RyaXZlcnMvbWlzYy9ocGlsby5jCkBAIC0xOCw2ICsxOCw3IEBACiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2NkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2MvaWJtYXNtL2NvbW1hbmQuYyBiL2RyaXZlcnMvbWlzYy9pYm1hc20vY29tbWFuZC5jCmluZGV4IDI3NmQzZmIuLmUyMDMxNzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9pYm1hc20vY29tbWFuZC5jCisrKyBiL2RyaXZlcnMvbWlzYy9pYm1hc20vY29tbWFuZC5jCkBAIC0yMiw2ICsyMiw3IEBACiAgKgogICovCiAKKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgImlibWFzbS5oIgogI2luY2x1ZGUgImxvd2xldmVsLmgiCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9pYm1hc20vZXZlbnQuYyBiL2RyaXZlcnMvbWlzYy9pYm1hc20vZXZlbnQuYwppbmRleCA2OGEwYTViLi41NzJkNDFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2MvaWJtYXNtL2V2ZW50LmMKKysrIGIvZHJpdmVycy9taXNjL2libWFzbS9ldmVudC5jCkBAIC0yMiw2ICsyMiw3IEBACiAgKgogICovCiAKKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgImlibWFzbS5oIgogI2luY2x1ZGUgImxvd2xldmVsLmgiCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9pYm1hc20vcl9oZWFydGJlYXQuYyBiL2RyaXZlcnMvbWlzYy9pYm1hc20vcl9oZWFydGJlYXQuYwppbmRleCBiZWM5ZTJjLi4yZGU0ODdhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2MvaWJtYXNtL3JfaGVhcnRiZWF0LmMKKysrIGIvZHJpdmVycy9taXNjL2libWFzbS9yX2hlYXJ0YmVhdC5jCkBAIC0yMCw2ICsyMCw3IEBACiAgKgogICovCiAKKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgImlibWFzbS5oIgogI2luY2x1ZGUgImRvdF9jb21tYW5kLmgiCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9waGFudG9tLmMgYi9kcml2ZXJzL21pc2MvcGhhbnRvbS5jCmluZGV4IGZhNTdiNjcuLjA0YzI3MjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9waGFudG9tLmMKKysrIGIvZHJpdmVycy9taXNjL3BoYW50b20uYwpAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2NkZXYuaD4KICNpbmNsdWRlIDxsaW51eC9waGFudG9tLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogCiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgpAQCAtMjcxLDcgKzI3Miw3IEBACiAJcmV0dXJuIG1hc2s7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHBoYW50b21fZmlsZV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwaGFudG9tX2ZpbGVfb3BzID0gewogCS5vcGVuID0gcGhhbnRvbV9vcGVuLAogCS5yZWxlYXNlID0gcGhhbnRvbV9yZWxlYXNlLAogCS51bmxvY2tlZF9pb2N0bCA9IHBoYW50b21faW9jdGwsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2Mvc2dpLWdydS9ncnVmaWxlLmMgYi9kcml2ZXJzL21pc2Mvc2dpLWdydS9ncnVmaWxlLmMKaW5kZXggYWVkNjA5OC4uNDFjOGZlMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL3NnaS1ncnUvZ3J1ZmlsZS5jCisrKyBiL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydWZpbGUuYwpAQCAtNTMsNyArNTMsNiBAQAogLyogR3VhcmFudGVlZCB1c2VyIGF2YWlsYWJsZSByZXNvdXJjZXMgb24gZWFjaCBub2RlICovCiBzdGF0aWMgaW50IG1heF91c2VyX2NicnMsIG1heF91c2VyX2Rzcl9ieXRlczsKIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZ3J1X2ZvcHM7CiBzdGF0aWMgc3RydWN0IG1pc2NkZXZpY2UgZ3J1X21pc2NkZXY7CiAKIApAQCAtNDI2LDcgKzQyNSw3IEBACiAJZ3J1X3Byb2NfZXhpdCgpOwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBncnVfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGdydV9mb3BzID0gewogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkudW5sb2NrZWRfaW9jdGwJPSBncnVfZmlsZV91bmxvY2tlZF9pb2N0bCwKIAkubW1hcAkJPSBncnVfZmlsZV9tbWFwLApAQCAtNDM4LDcgKzQzNyw3IEBACiAJLmZvcHMJCT0gJmdydV9mb3BzLAogfTsKIAotc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGdydV92bV9vcHMgPSB7Citjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgZ3J1X3ZtX29wcyA9IHsKIAkuY2xvc2UJCT0gZ3J1X3ZtYV9jbG9zZSwKIAkuZmF1bHQJCT0gZ3J1X2ZhdWx0LAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydXRhYmxlcy5oIGIvZHJpdmVycy9taXNjL3NnaS1ncnUvZ3J1dGFibGVzLmgKaW5kZXggMzRhYjNkNC4uNDY5OTBiYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL3NnaS1ncnUvZ3J1dGFibGVzLmgKKysrIGIvZHJpdmVycy9taXNjL3NnaS1ncnUvZ3J1dGFibGVzLmgKQEAgLTYyNCw3ICs2MjQsNyBAQAogICovCiBzdHJ1Y3QgZ3J1X3VubG9hZF9jb250ZXh0X3JlcTsKIAotZXh0ZXJuIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBncnVfdm1fb3BzOworZXh0ZXJuIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBncnVfdm1fb3BzOwogZXh0ZXJuIHN0cnVjdCBkZXZpY2UgKmdydWRldjsKIAogZXh0ZXJuIHN0cnVjdCBncnVfdm1hX2RhdGEgKmdydV9hbGxvY192bWFfZGF0YShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2NvcmUvZGVidWdmcy5jIGIvZHJpdmVycy9tbWMvY29yZS9kZWJ1Z2ZzLmMKaW5kZXggNjEwZGJkMS4uOTZkMTBmNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvY29yZS9kZWJ1Z2ZzLmMKKysrIGIvZHJpdmVycy9tbWMvY29yZS9kZWJ1Z2ZzLmMKQEAgLTI0MCw3ICsyNDAsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtbWNfZGJnX2V4dF9jc2RfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1tY19kYmdfZXh0X2NzZF9mb3BzID0gewogCS5vcGVuCQk9IG1tY19leHRfY3NkX29wZW4sCiAJLnJlYWQJCT0gbW1jX2V4dF9jc2RfcmVhZCwKIAkucmVsZWFzZQk9IG1tY19leHRfY3NkX3JlbGVhc2UsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9jb3JlL3NkaW9fY2lzLmMgYi9kcml2ZXJzL21tYy9jb3JlL3NkaW9fY2lzLmMKaW5kZXggNjYzNjM1NC4uZjg1ZGNkNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvY29yZS9zZGlvX2Npcy5jCisrKyBiL2RyaXZlcnMvbW1jL2NvcmUvc2Rpb19jaXMuYwpAQCAtMjksNiArMjksOCBAQAogCXVuc2lnbmVkIGksIG5yX3N0cmluZ3M7CiAJY2hhciAqKmJ1ZmZlciwgKnN0cmluZzsKIAorCS8qIEZpbmQgYWxsIG51bGwtdGVybWluYXRlZCAoaW5jbHVkaW5nIHplcm8gbGVuZ3RoKSBzdHJpbmdzIGluCisJICAgdGhlIFRQTExWMV9JTkZPIGZpZWxkLiBUcmFpbGluZyBnYXJiYWdlIGlzIGlnbm9yZWQuICovCiAJYnVmICs9IDI7CiAJc2l6ZSAtPSAyOwogCkBAIC0zOSwxMSArNDEsOCBAQAogCQlpZiAoYnVmW2ldID09IDApCiAJCQlucl9zdHJpbmdzKys7CiAJfQotCi0JaWYgKG5yX3N0cmluZ3MgPCA0KSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIlNESU86IGlnbm9yaW5nIGJyb2tlbiBDSVNUUExfVkVSU18xXG4iKTsKKwlpZiAobnJfc3RyaW5ncyA9PSAwKQogCQlyZXR1cm4gMDsKLQl9CiAKIAlzaXplID0gaTsKIApAQCAtOTgsNiArOTcsMjIgQEAKIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgc3BlZWRfdW5pdFs4XSA9CiAJeyAxMDAwMCwgMTAwMDAwLCAxMDAwMDAwLCAxMDAwMDAwMCwgMCwgMCwgMCwgMCB9OwogCisvKiBGVU5DRSB0dXBsZXMgd2l0aCB0aGVzZSB0eXBlcyBnZXQgcGFzc2VkIHRvIFNESU8gZHJpdmVycyAqLworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZnVuY2VfdHlwZV93aGl0ZWxpc3RbXSA9IHsKKwk0IC8qIENJU1RQTF9GVU5DRV9MQU5fTk9ERV9JRCB1c2VkIGluIEJyb2FkY29tIGNhcmRzICovCit9OworCitzdGF0aWMgaW50IGNpc3RwbF9mdW5jZV93aGl0ZWxpc3RlZCh1bnNpZ25lZCBjaGFyIHR5cGUpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShmdW5jZV90eXBlX3doaXRlbGlzdCk7IGkrKykgeworCQlpZiAoZnVuY2VfdHlwZV93aGl0ZWxpc3RbaV0gPT0gdHlwZSkKKwkJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBjaXN0cGxfZnVuY2VfY29tbW9uKHN0cnVjdCBtbWNfY2FyZCAqY2FyZCwKIAkJCSAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIHVuc2lnbmVkIHNpemUpCiB7CkBAIC0xMjAsNiArMTM1LDEwIEBACiAJdW5zaWduZWQgdnNuOwogCXVuc2lnbmVkIG1pbl9zaXplOwogCisJLyogbGV0IFNESU8gZHJpdmVycyB0YWtlIGNhcmUgb2Ygd2hpdGVsaXN0ZWQgRlVOQ0UgdHVwbGVzICovCisJaWYgKGNpc3RwbF9mdW5jZV93aGl0ZWxpc3RlZChidWZbMF0pKQorCQlyZXR1cm4gLUVJTFNFUTsKKwogCXZzbiA9IGZ1bmMtPmNhcmQtPmNjY3Iuc2Rpb192c247CiAJbWluX3NpemUgPSAodnNuID09IFNESU9fU0RJT19SRVZfMV8wMCkgPyAyOCA6IDQyOwogCkBAIC0xNTQsMTMgKzE3MywxMiBAQAogCWVsc2UKIAkJcmV0ID0gY2lzdHBsX2Z1bmNlX2NvbW1vbihjYXJkLCBidWYsIHNpemUpOwogCi0JaWYgKHJldCkgeworCWlmIChyZXQgJiYgcmV0ICE9IC1FSUxTRVEpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogYmFkIENJU1RQTF9GVU5DRSBzaXplICV1ICIKIAkJICAgICAgICJ0eXBlICV1XG4iLCBtbWNfaG9zdG5hbWUoY2FyZC0+aG9zdCksIHNpemUsIGJ1ZlswXSk7Ci0JCXJldHVybiByZXQ7CiAJfQogCi0JcmV0dXJuIDA7CisJcmV0dXJuIHJldDsKIH0KIAogdHlwZWRlZiBpbnQgKHRwbF9wYXJzZV90KShzdHJ1Y3QgbW1jX2NhcmQgKiwgc3RydWN0IHNkaW9fZnVuYyAqLApAQCAtMjUzLDggKzI3MSwzMyBAQAogCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjaXNfdHBsX2xpc3QpOyBpKyspCiAJCQlpZiAoY2lzX3RwbF9saXN0W2ldLmNvZGUgPT0gdHBsX2NvZGUpCiAJCQkJYnJlYWs7Ci0JCWlmIChpID49IEFSUkFZX1NJWkUoY2lzX3RwbF9saXN0KSkgewotCQkJLyogdGhpcyB0dXBsZSBpcyB1bmtub3duIHRvIHRoZSBjb3JlICovCisJCWlmIChpIDwgQVJSQVlfU0laRShjaXNfdHBsX2xpc3QpKSB7CisJCQljb25zdCBzdHJ1Y3QgY2lzX3RwbCAqdHBsID0gY2lzX3RwbF9saXN0ICsgaTsKKwkJCWlmICh0cGxfbGluayA8IHRwbC0+bWluX3NpemUpIHsKKwkJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkgICAgICAgIiVzOiBiYWQgQ0lTIHR1cGxlIDB4JTAyeCIKKwkJCQkgICAgICAgIiAobGVuZ3RoID0gJXUsIGV4cGVjdGVkID49ICV1KVxuIiwKKwkJCQkgICAgICAgbW1jX2hvc3RuYW1lKGNhcmQtPmhvc3QpLAorCQkJCSAgICAgICB0cGxfY29kZSwgdHBsX2xpbmssIHRwbC0+bWluX3NpemUpOworCQkJCXJldCA9IC1FSU5WQUw7CisJCQl9IGVsc2UgaWYgKHRwbC0+cGFyc2UpIHsKKwkJCQlyZXQgPSB0cGwtPnBhcnNlKGNhcmQsIGZ1bmMsCisJCQkJCQkgdGhpcy0+ZGF0YSwgdHBsX2xpbmspOworCQkJfQorCQkJLyoKKwkJCSAqIFdlIGRvbid0IG5lZWQgdGhlIHR1cGxlIGFueW1vcmUgaWYgaXQgd2FzCisJCQkgKiBzdWNjZXNzZnVsbHkgcGFyc2VkIGJ5IHRoZSBTRElPIGNvcmUgb3IgaWYgaXQgaXMKKwkJCSAqIG5vdCBnb2luZyB0byBiZSBwYXJzZWQgYnkgU0RJTyBkcml2ZXJzLgorCQkJICovCisJCQlpZiAoIXJldCB8fCByZXQgIT0gLUVJTFNFUSkKKwkJCQlrZnJlZSh0aGlzKTsKKwkJfSBlbHNlIHsKKwkJCS8qIHVua25vd24gdHVwbGUgKi8KKwkJCXJldCA9IC1FSUxTRVE7CisJCX0KKworCQlpZiAocmV0ID09IC1FSUxTRVEpIHsKKwkJCS8qIHRoaXMgdHVwbGUgaXMgdW5rbm93biB0byB0aGUgY29yZSBvciB3aGl0ZWxpc3RlZCAqLwogCQkJdGhpcy0+bmV4dCA9IE5VTEw7CiAJCQl0aGlzLT5jb2RlID0gdHBsX2NvZGU7CiAJCQl0aGlzLT5zaXplID0gdHBsX2xpbms7CkBAIC0yNjMsMTkgKzMwNiw4IEBACiAJCQlwcmludGsoS0VSTl9ERUJVRwogCQkJICAgICAgICIlczogcXVldWluZyBDSVMgdHVwbGUgMHglMDJ4IGxlbmd0aCAldVxuIiwKIAkJCSAgICAgICBtbWNfaG9zdG5hbWUoY2FyZC0+aG9zdCksIHRwbF9jb2RlLCB0cGxfbGluayk7Ci0JCX0gZWxzZSB7Ci0JCQljb25zdCBzdHJ1Y3QgY2lzX3RwbCAqdHBsID0gY2lzX3RwbF9saXN0ICsgaTsKLQkJCWlmICh0cGxfbGluayA8IHRwbC0+bWluX3NpemUpIHsKLQkJCQlwcmludGsoS0VSTl9FUlIKLQkJCQkgICAgICAgIiVzOiBiYWQgQ0lTIHR1cGxlIDB4JTAyeCAobGVuZ3RoID0gJXUsIGV4cGVjdGVkID49ICV1KVxuIiwKLQkJCQkgICAgICAgbW1jX2hvc3RuYW1lKGNhcmQtPmhvc3QpLAotCQkJCSAgICAgICB0cGxfY29kZSwgdHBsX2xpbmssIHRwbC0+bWluX3NpemUpOwotCQkJCXJldCA9IC1FSU5WQUw7Ci0JCQl9IGVsc2UgaWYgKHRwbC0+cGFyc2UpIHsKLQkJCQlyZXQgPSB0cGwtPnBhcnNlKGNhcmQsIGZ1bmMsCi0JCQkJCQkgdGhpcy0+ZGF0YSwgdHBsX2xpbmspOwotCQkJfQotCQkJa2ZyZWUodGhpcyk7CisJCQkvKiBrZWVwIG9uIGFuYWx5emluZyB0dXBsZXMgKi8KKwkJCXJldCA9IDA7CiAJCX0KIAogCQlwdHIgKz0gdHBsX2xpbms7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L0tjb25maWcgYi9kcml2ZXJzL21tYy9ob3N0L0tjb25maWcKaW5kZXggN2NiMDU3Zi4uNDMyYWU4MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9LY29uZmlnCisrKyBiL2RyaXZlcnMvbW1jL2hvc3QvS2NvbmZpZwpAQCAtMjc2LDYgKzI3Niw0NyBAQAogCiAJICBJZiB1bnN1cmUsIHNheSBOLgogCitjb25maWcgTU1DX1MzQ19IV19TRElPX0lSUQorICAgICAgIGJvb2wgIkhhcmR3YXJlIHN1cHBvcnQgZm9yIFNESU8gSVJRIgorICAgICAgIGRlcGVuZHMgb24gTU1DX1MzQworICAgICAgIGhlbHAKKyAgICAgICAgIEVuYWJsZSB0aGUgaGFyZHdhcmUgc3VwcG9ydCBmb3IgU0RJTyBpbnRlcnJ1cHRzIGluc3RlYWQgb2YgdXNpbmcKKwkgdGhlIGdlbmVyaWMgcG9sbGluZyBjb2RlLgorCitjaG9pY2UKKwlwcm9tcHQgIlNhbXN1bmcgUzNDIFNEL01NQyB0cmFuc2ZlciBjb2RlIgorCWRlcGVuZHMgb24gTU1DX1MzQworCitjb25maWcgTU1DX1MzQ19QSU8KKwlib29sICJVc2UgUElPIHRyYW5zZmVycyBvbmx5IgorCWhlbHAKKwkgIFVzZSBQSU8gdG8gdHJhbnNmZXIgZGF0YSBiZXR3ZWVuIG1lbW9yeSBhbmQgdGhlIGhhcmR3YXJlLgorCisJICBQSU8gaXMgc2xvd2VyIHRoYW4gRE1BIGFzIGl0IHJlcXVpcmVzIENQVSBpbnN0cnVjdGlvbnMgdG8KKwkgIG1vdmUgdGhlIGRhdGEuIFRoaXMgaGFzIGJlZW4gdGhlIHRyYWRpdGlvbmFsIGRlZmF1bHQgZm9yCisJICB0aGUgUzNDIE1DSSBkcml2ZXIuCisKK2NvbmZpZyBNTUNfUzNDX0RNQQorCWJvb2wgIlVzZSBETUEgdHJhbnNmZXJzIG9ubHkgKEVYUEVSSU1FTlRBTCkiCisJZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwKKwloZWxwCisJICBVc2UgRE1BIHRvIHRyYW5zZmVyIGRhdGEgYmV0d2VlbiBtZW1vcnkgYW5kIHRoZSBoYXJkYXJlLgorCisJICBDdXJyZW50bHksIHRoZSBETUEgc3VwcG9ydCBpbiB0aGlzIGRyaXZlciBzZWVtcyB0byBub3QgYmUKKwkgIHdvcmtpbmcgcHJvcGVybHkgYW5kIG5lZWRzIHRvIGJlIGRlYnVnZ2VkIGJlZm9yZSB0aGlzCisJICBvcHRpb24gaXMgdXNlZnVsLgorCitjb25maWcgTU1DX1MzQ19QSU9ETUEKKwlib29sICJTdXBwb3J0IGZvciBib3RoIFBJTyBhbmQgRE1BIChFWFBFUklNRU5UQUwpIgorCWhlbHAKKwkgIENvbXBpbGUgYm90aCB0aGUgUElPIGFuZCBETUEgdHJhbnNmZXIgcm91dGluZXMgaW50byB0aGUKKwkgIGRyaXZlciBhbmQgbGV0IHRoZSBwbGF0Zm9ybSBzZWxlY3QgYXQgcnVuLXRpbWUgd2hpY2ggb25lCisJICBpcyBiZXN0LgorCisJICBTZWUgbm90ZXMgZm9yIHRoZSBETUEgb3B0aW9uLgorCitlbmRjaG9pY2UKKwogY29uZmlnIE1NQ19TRFJJQ09IX0NTCiAJdHJpc3RhdGUgIk1NQy9TRCBkcml2ZXIgZm9yIFJpY29oIEJheTFDb250cm9sbGVycyAoRVhQRVJJTUVOVEFMKSIKIAlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTCAmJiBQQ0kgJiYgUENNQ0lBCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L2F0OTFfbWNpLmMgYi9kcml2ZXJzL21tYy9ob3N0L2F0OTFfbWNpLmMKaW5kZXggZTU1NmQ0Mi4uNjM5MjRlMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9hdDkxX21jaS5jCisrKyBiL2RyaXZlcnMvbW1jL2hvc3QvYXQ5MV9tY2kuYwpAQCAtNzIsNyArNzIsNiBAQAogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vZ3Bpby5oPgogCi0jaW5jbHVkZSA8YXNtL21hY2gvbW1jLmg+CiAjaW5jbHVkZSA8bWFjaC9ib2FyZC5oPgogI2luY2x1ZGUgPG1hY2gvY3B1Lmg+CiAjaW5jbHVkZSA8bWFjaC9hdDkxX21jaS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMgYi9kcml2ZXJzL21tYy9ob3N0L21tY2kuYwppbmRleCA4NzQxZDBmLi43MDVhNTg5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L21tY2kuYworKysgYi9kcml2ZXJzL21tYy9ob3N0L21tY2kuYwpAQCAtMjIsMTIgKzIyLDEzIEBACiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvc2NhdHRlcmxpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvYW1iYS9tbWNpLmg+CisjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmg+CiAKICNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgogI2luY2x1ZGUgPGFzbS9kaXY2NC5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9zaXplcy5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL21tYy5oPgogCiAjaW5jbHVkZSAibW1jaS5oIgogCkBAIC0zOCw2ICszOSwzNiBAQAogCiBzdGF0aWMgdW5zaWduZWQgaW50IGZtYXggPSA1MTU2MzM7CiAKKy8qCisgKiBUaGlzIG11c3QgYmUgY2FsbGVkIHdpdGggaG9zdC0+bG9jayBoZWxkCisgKi8KK3N0YXRpYyB2b2lkIG1tY2lfc2V0X2Nsa3JlZyhzdHJ1Y3QgbW1jaV9ob3N0ICpob3N0LCB1bnNpZ25lZCBpbnQgZGVzaXJlZCkKK3sKKwl1MzIgY2xrID0gMDsKKworCWlmIChkZXNpcmVkKSB7CisJCWlmIChkZXNpcmVkID49IGhvc3QtPm1jbGspIHsKKwkJCWNsayA9IE1DSV9DTEtfQllQQVNTOworCQkJaG9zdC0+Y2NsayA9IGhvc3QtPm1jbGs7CisJCX0gZWxzZSB7CisJCQljbGsgPSBob3N0LT5tY2xrIC8gKDIgKiBkZXNpcmVkKSAtIDE7CisJCQlpZiAoY2xrID49IDI1NikKKwkJCQljbGsgPSAyNTU7CisJCQlob3N0LT5jY2xrID0gaG9zdC0+bWNsayAvICgyICogKGNsayArIDEpKTsKKwkJfQorCQlpZiAoaG9zdC0+aHdfZGVzaWduZXIgPT0gMHg4MCkKKwkJCWNsayB8PSBNQ0lfRkNFTjsgLyogQnVnIGZpeCBpbiBTVCBJUCBibG9jayAqLworCQljbGsgfD0gTUNJX0NMS19FTkFCTEU7CisJCS8qIFRoaXMgaGFzbid0IHByb3ZlbiB0byBiZSB3b3J0aHdoaWxlICovCisJCS8qIGNsayB8PSBNQ0lfQ0xLX1BXUlNBVkU7ICovCisJfQorCisJaWYgKGhvc3QtPm1tYy0+aW9zLmJ1c193aWR0aCA9PSBNTUNfQlVTX1dJRFRIXzQpCisJCWNsayB8PSBNQ0lfV0lERV9CVVM7CisKKwl3cml0ZWwoY2xrLCBob3N0LT5iYXNlICsgTU1DSUNMT0NLKTsKK30KKwogc3RhdGljIHZvaWQKIG1tY2lfcmVxdWVzdF9lbmQoc3RydWN0IG1tY2lfaG9zdCAqaG9zdCwgc3RydWN0IG1tY19yZXF1ZXN0ICptcnEpCiB7CkBAIC00MTksMzAgKzQ1MCwzMSBAQAogc3RhdGljIHZvaWQgbW1jaV9zZXRfaW9zKHN0cnVjdCBtbWNfaG9zdCAqbW1jLCBzdHJ1Y3QgbW1jX2lvcyAqaW9zKQogewogCXN0cnVjdCBtbWNpX2hvc3QgKmhvc3QgPSBtbWNfcHJpdihtbWMpOwotCXUzMiBjbGsgPSAwLCBwd3IgPSAwOwotCi0JaWYgKGlvcy0+Y2xvY2spIHsKLQkJaWYgKGlvcy0+Y2xvY2sgPj0gaG9zdC0+bWNsaykgewotCQkJY2xrID0gTUNJX0NMS19CWVBBU1M7Ci0JCQlob3N0LT5jY2xrID0gaG9zdC0+bWNsazsKLQkJfSBlbHNlIHsKLQkJCWNsayA9IGhvc3QtPm1jbGsgLyAoMiAqIGlvcy0+Y2xvY2spIC0gMTsKLQkJCWlmIChjbGsgPj0gMjU2KQotCQkJCWNsayA9IDI1NTsKLQkJCWhvc3QtPmNjbGsgPSBob3N0LT5tY2xrIC8gKDIgKiAoY2xrICsgMSkpOwotCQl9Ci0JCWlmIChob3N0LT5od19kZXNpZ25lciA9PSBBTUJBX1ZFTkRPUl9TVCkKLQkJCWNsayB8PSBNQ0lfRkNFTjsgLyogQnVnIGZpeCBpbiBTVCBJUCBibG9jayAqLwotCQljbGsgfD0gTUNJX0NMS19FTkFCTEU7Ci0JfQotCi0JaWYgKGhvc3QtPnBsYXQtPnRyYW5zbGF0ZV92ZGQpCi0JCXB3ciB8PSBob3N0LT5wbGF0LT50cmFuc2xhdGVfdmRkKG1tY19kZXYobW1jKSwgaW9zLT52ZGQpOworCXUzMiBwd3IgPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzd2l0Y2ggKGlvcy0+cG93ZXJfbW9kZSkgewogCWNhc2UgTU1DX1BPV0VSX09GRjoKKwkJaWYoaG9zdC0+dmNjICYmCisJCSAgIHJlZ3VsYXRvcl9pc19lbmFibGVkKGhvc3QtPnZjYykpCisJCQlyZWd1bGF0b3JfZGlzYWJsZShob3N0LT52Y2MpOwogCQlicmVhazsKIAljYXNlIE1NQ19QT1dFUl9VUDoKKyNpZmRlZiBDT05GSUdfUkVHVUxBVE9SCisJCWlmIChob3N0LT52Y2MpCisJCQkvKiBUaGlzIGltcGxpY2l0bHkgZW5hYmxlcyB0aGUgcmVndWxhdG9yICovCisJCQltbWNfcmVndWxhdG9yX3NldF9vY3IoaG9zdC0+dmNjLCBpb3MtPnZkZCk7CisjZW5kaWYKKwkJLyoKKwkJICogVGhlIHRyYW5zbGF0ZV92ZGQgZnVuY3Rpb24gaXMgbm90IHVzZWQgaWYgeW91IGhhdmUKKwkJICogYW4gZXh0ZXJuYWwgcmVndWxhdG9yLCBvciB5b3VyIGRlc2lnbiBpcyByZWFsbHkgd2VpcmQuCisJCSAqIFVzaW5nIGl0IHdvdWxkIG1lYW4gc2VuZGluZyBpbiBwb3dlciBjb250cm9sIEJPVEggdXNpbmcKKwkJICogYSByZWd1bGF0b3IgQU5EIHRoZSA0IE1NQ0lQV1IgYml0cy4gSWYgd2UgZG9uJ3QgaGF2ZQorCQkgKiBhIHJlZ3VsYXRvciwgd2UgbWlnaHQgaGF2ZSBzb21lIG90aGVyIHBsYXRmb3JtIHNwZWNpZmljCisJCSAqIHBvd2VyIGNvbnRyb2wgYmVoaW5kIHRoaXMgdHJhbnNsYXRlIGZ1bmN0aW9uLgorCQkgKi8KKwkJaWYgKCFob3N0LT52Y2MgJiYgaG9zdC0+cGxhdC0+dHJhbnNsYXRlX3ZkZCkKKwkJCXB3ciB8PSBob3N0LT5wbGF0LT50cmFuc2xhdGVfdmRkKG1tY19kZXYobW1jKSwgaW9zLT52ZGQpOwogCQkvKiBUaGUgU1QgdmVyc2lvbiBkb2VzIG5vdCBoYXZlIHRoaXMsIGZhbGwgdGhyb3VnaCB0byBQT1dFUl9PTiAqLwogCQlpZiAoaG9zdC0+aHdfZGVzaWduZXIgIT0gQU1CQV9WRU5ET1JfU1QpIHsKIAkJCXB3ciB8PSBNQ0lfUFdSX1VQOwpAQCAtNDY1LDEyICs0OTcsMTYgQEAKIAkJfQogCX0KIAotCXdyaXRlbChjbGssIGhvc3QtPmJhc2UgKyBNTUNJQ0xPQ0spOworCXNwaW5fbG9ja19pcnFzYXZlKCZob3N0LT5sb2NrLCBmbGFncyk7CisKKwltbWNpX3NldF9jbGtyZWcoaG9zdCwgaW9zLT5jbG9jayk7CiAKIAlpZiAoaG9zdC0+cHdyICE9IHB3cikgewogCQlob3N0LT5wd3IgPSBwd3I7CiAJCXdyaXRlbChwd3IsIGhvc3QtPmJhc2UgKyBNTUNJUE9XRVIpOwogCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhvc3QtPmxvY2ssIGZsYWdzKTsKIH0KIAogc3RhdGljIGludCBtbWNpX2dldF9ybyhzdHJ1Y3QgbW1jX2hvc3QgKm1tYykKQEAgLTUxNyw3ICs1NTMsNyBAQAogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBtbWNpX3Byb2JlKHN0cnVjdCBhbWJhX2RldmljZSAqZGV2LCBzdHJ1Y3QgYW1iYV9pZCAqaWQpCiB7Ci0Jc3RydWN0IG1tY19wbGF0Zm9ybV9kYXRhICpwbGF0ID0gZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3QgbW1jaV9wbGF0Zm9ybV9kYXRhICpwbGF0ID0gZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAlzdHJ1Y3QgbW1jaV9ob3N0ICpob3N0OwogCXN0cnVjdCBtbWNfaG9zdCAqbW1jOwogCWludCByZXQ7CkBAIC01ODMsNyArNjE5LDMwIEBACiAJbW1jLT5vcHMgPSAmbW1jaV9vcHM7CiAJbW1jLT5mX21pbiA9IChob3N0LT5tY2xrICsgNTExKSAvIDUxMjsKIAltbWMtPmZfbWF4ID0gbWluKGhvc3QtPm1jbGssIGZtYXgpOwotCW1tYy0+b2NyX2F2YWlsID0gcGxhdC0+b2NyX21hc2s7CisjaWZkZWYgQ09ORklHX1JFR1VMQVRPUgorCS8qIElmIHdlJ3JlIHVzaW5nIHRoZSByZWd1bGF0b3IgZnJhbWV3b3JrLCB0cnkgdG8gZmV0Y2ggYSByZWd1bGF0b3IgKi8KKwlob3N0LT52Y2MgPSByZWd1bGF0b3JfZ2V0KCZkZXYtPmRldiwgInZtbWMiKTsKKwlpZiAoSVNfRVJSKGhvc3QtPnZjYykpCisJCWhvc3QtPnZjYyA9IE5VTEw7CisJZWxzZSB7CisJCWludCBtYXNrID0gbW1jX3JlZ3VsYXRvcl9nZXRfb2NybWFzayhob3N0LT52Y2MpOworCisJCWlmIChtYXNrIDwgMCkKKwkJCWRldl9lcnIoJmRldi0+ZGV2LCAiZXJyb3IgZ2V0dGluZyBPQ1IgbWFzayAoJWQpXG4iLAorCQkJCW1hc2spOworCQllbHNlIHsKKwkJCWhvc3QtPm1tYy0+b2NyX2F2YWlsID0gKHUzMikgbWFzazsKKwkJCWlmIChwbGF0LT5vY3JfbWFzaykKKwkJCQlkZXZfd2FybigmZGV2LT5kZXYsCisJCQkJICJQcm92aWRlZCBvY3JfbWFzay9zZXRwb3dlciB3aWxsIG5vdCBiZSB1c2VkICIKKwkJCQkgIih1c2luZyByZWd1bGF0b3IgaW5zdGVhZClcbiIpOworCQl9CisJfQorI2VuZGlmCisJLyogRmFsbCBiYWNrIHRvIHBsYXRmb3JtIGRhdGEgaWYgbm8gcmVndWxhdG9yIGlzIGZvdW5kICovCisJaWYgKGhvc3QtPnZjYyA9PSBOVUxMKQorCQltbWMtPm9jcl9hdmFpbCA9IHBsYXQtPm9jcl9tYXNrOworCW1tYy0+Y2FwcyA9IHBsYXQtPmNhcGFiaWxpdGllczsKIAogCS8qCiAJICogV2UgY2FuIGRvIFNHSU8KQEAgLTYxOSw3ICs2NzgsNiBAQAogCXdyaXRlbCgwLCBob3N0LT5iYXNlICsgTU1DSU1BU0sxKTsKIAl3cml0ZWwoMHhmZmYsIGhvc3QtPmJhc2UgKyBNTUNJQ0xFQVIpOwogCi0jaWZkZWYgQ09ORklHX0dQSU9MSUIKIAlpZiAoZ3Bpb19pc192YWxpZChwbGF0LT5ncGlvX2NkKSkgewogCQlyZXQgPSBncGlvX3JlcXVlc3QocGxhdC0+Z3Bpb19jZCwgRFJJVkVSX05BTUUgIiAoY2QpIik7CiAJCWlmIChyZXQgPT0gMCkKQEAgLTYzOCw3ICs2OTYsNiBAQAogCQllbHNlIGlmIChyZXQgIT0gLUVOT1NZUykKIAkJCWdvdG8gZXJyX2dwaW9fd3A7CiAJfQotI2VuZGlmCiAKIAlyZXQgPSByZXF1ZXN0X2lycShkZXYtPmlycVswXSwgbW1jaV9pcnEsIElSUUZfU0hBUkVELCBEUklWRVJfTkFNRSAiIChjbWQpIiwgaG9zdCk7CiAJaWYgKHJldCkKQEAgLTcyMCw2ICs3NzcsMTAgQEAKIAkJY2xrX2Rpc2FibGUoaG9zdC0+Y2xrKTsKIAkJY2xrX3B1dChob3N0LT5jbGspOwogCisJCWlmIChyZWd1bGF0b3JfaXNfZW5hYmxlZChob3N0LT52Y2MpKQorCQkJcmVndWxhdG9yX2Rpc2FibGUoaG9zdC0+dmNjKTsKKwkJcmVndWxhdG9yX3B1dChob3N0LT52Y2MpOworCiAJCW1tY19mcmVlX2hvc3QobW1jKTsKIAogCQlhbWJhX3JlbGVhc2VfcmVnaW9ucyhkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9tbWNpLmggYi9kcml2ZXJzL21tYy9ob3N0L21tY2kuaAppbmRleCA4MzlmMjY0Li4xY2ViOWE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L21tY2kuaAorKysgYi9kcml2ZXJzL21tYy9ob3N0L21tY2kuaApAQCAtMTYxLDcgKzE2MSw3IEBACiAJdW5zaWduZWQgaW50CQltY2xrOwogCXVuc2lnbmVkIGludAkJY2NsazsKIAl1MzIJCQlwd3I7Ci0Jc3RydWN0IG1tY19wbGF0Zm9ybV9kYXRhICpwbGF0OworCXN0cnVjdCBtbWNpX3BsYXRmb3JtX2RhdGEgKnBsYXQ7CiAKIAl1OAkJCWh3X2Rlc2lnbmVyOwogCXU4CQkJaHdfcmV2aXNpb246NDsKQEAgLTE3NSw2ICsxNzUsNyBAQAogCXN0cnVjdCBzY2F0dGVybGlzdAkqc2dfcHRyOwogCXVuc2lnbmVkIGludAkJc2dfb2ZmOwogCXVuc2lnbmVkIGludAkJc2l6ZTsKKwlzdHJ1Y3QgcmVndWxhdG9yCSp2Y2M7CiB9OwogCiBzdGF0aWMgaW5saW5lIHZvaWQgbW1jaV9pbml0X3NnKHN0cnVjdCBtbWNpX2hvc3QgKmhvc3QsIHN0cnVjdCBtbWNfZGF0YSAqZGF0YSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3Qvb21hcF9oc21tYy5jIGIvZHJpdmVycy9tbWMvaG9zdC9vbWFwX2hzbW1jLmMKaW5kZXggNDQ4N2NjMC4uMGFlY2FhZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9vbWFwX2hzbW1jLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9vbWFwX2hzbW1jLmMKQEAgLTIwMTMsNyArMjAxMyw3IEBACiBzdGF0aWMgaW50IF9faW5pdCBvbWFwX2hzbW1jX2luaXQodm9pZCkKIHsKIAkvKiBSZWdpc3RlciB0aGUgTU1DIGRyaXZlciAqLwotCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJm9tYXBfaHNtbWNfZHJpdmVyKTsKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3Byb2JlKCZvbWFwX2hzbW1jX2RyaXZlciwgb21hcF9oc21tY19wcm9iZSk7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBvbWFwX2hzbW1jX2NsZWFudXAodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3QvcHhhbWNpLmMgYi9kcml2ZXJzL21tYy9ob3N0L3B4YW1jaS5jCmluZGV4IGU1NWFjNzkuLmIwMGQ2NzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3QvcHhhbWNpLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9weGFtY2kuYwpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21tYy9ob3N0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAKICNpbmNsdWRlIDxhc20vc2l6ZXMuaD4KIApAQCAtOTYsMTAgKzk3LDE4IEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBweGFtY2lfc2V0X3Bvd2VyKHN0cnVjdCBweGFtY2lfaG9zdCAqaG9zdCwgdW5zaWduZWQgaW50IHZkZCkKIHsKKwlpbnQgb247CisKICNpZmRlZiBDT05GSUdfUkVHVUxBVE9SCiAJaWYgKGhvc3QtPnZjYykKIAkJbW1jX3JlZ3VsYXRvcl9zZXRfb2NyKGhvc3QtPnZjYywgdmRkKTsKICNlbmRpZgorCWlmICghaG9zdC0+dmNjICYmIGhvc3QtPnBkYXRhICYmCisJICAgIGdwaW9faXNfdmFsaWQoaG9zdC0+cGRhdGEtPmdwaW9fcG93ZXIpKSB7CisJCW9uID0gKCgxIDw8IHZkZCkgJiBob3N0LT5wZGF0YS0+b2NyX21hc2spOworCQlncGlvX3NldF92YWx1ZShob3N0LT5wZGF0YS0+Z3Bpb19wb3dlciwKKwkJCSAgICAgICAhIW9uIF4gaG9zdC0+cGRhdGEtPmdwaW9fcG93ZXJfaW52ZXJ0KTsKKwl9CiAJaWYgKCFob3N0LT52Y2MgJiYgaG9zdC0+cGRhdGEgJiYgaG9zdC0+cGRhdGEtPnNldHBvd2VyKQogCQlob3N0LT5wZGF0YS0+c2V0cG93ZXIobW1jX2Rldihob3N0LT5tbWMpLCB2ZGQpOwogfQpAQCAtNDIxLDYgKzQzMCwxMiBAQAogewogCXN0cnVjdCBweGFtY2lfaG9zdCAqaG9zdCA9IG1tY19wcml2KG1tYyk7CiAKKwlpZiAoaG9zdC0+cGRhdGEgJiYgZ3Bpb19pc192YWxpZChob3N0LT5wZGF0YS0+Z3Bpb19jYXJkX3JvKSkgeworCQlpZiAoaG9zdC0+cGRhdGEtPmdwaW9fY2FyZF9yb19pbnZlcnQpCisJCQlyZXR1cm4gIWdwaW9fZ2V0X3ZhbHVlKGhvc3QtPnBkYXRhLT5ncGlvX2NhcmRfcm8pOworCQllbHNlCisJCQlyZXR1cm4gZ3Bpb19nZXRfdmFsdWUoaG9zdC0+cGRhdGEtPmdwaW9fY2FyZF9ybyk7CisJfQogCWlmIChob3N0LT5wZGF0YSAmJiBob3N0LT5wZGF0YS0+Z2V0X3JvKQogCQlyZXR1cm4gISFob3N0LT5wZGF0YS0+Z2V0X3JvKG1tY19kZXYobW1jKSk7CiAJLyoKQEAgLTUzNCw3ICs1NDksNyBAQAogCXN0cnVjdCBtbWNfaG9zdCAqbW1jOwogCXN0cnVjdCBweGFtY2lfaG9zdCAqaG9zdCA9IE5VTEw7CiAJc3RydWN0IHJlc291cmNlICpyLCAqZG1hcngsICpkbWF0eDsKLQlpbnQgcmV0LCBpcnE7CisJaW50IHJldCwgaXJxLCBncGlvX2NkID0gLTEsIGdwaW9fcm8gPSAtMSwgZ3Bpb19wb3dlciA9IC0xOwogCiAJciA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CiAJaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKQEAgLTY2MSwxMyArNjc2LDYzIEBACiAJfQogCWhvc3QtPmRtYV9kcmNtcnR4ID0gZG1hdHgtPnN0YXJ0OwogCisJaWYgKGhvc3QtPnBkYXRhKSB7CisJCWdwaW9fY2QgPSBob3N0LT5wZGF0YS0+Z3Bpb19jYXJkX2RldGVjdDsKKwkJZ3Bpb19ybyA9IGhvc3QtPnBkYXRhLT5ncGlvX2NhcmRfcm87CisJCWdwaW9fcG93ZXIgPSBob3N0LT5wZGF0YS0+Z3Bpb19wb3dlcjsKKwl9CisJaWYgKGdwaW9faXNfdmFsaWQoZ3Bpb19wb3dlcikpIHsKKwkJcmV0ID0gZ3Bpb19yZXF1ZXN0KGdwaW9fcG93ZXIsICJtbWMgY2FyZCBwb3dlciIpOworCQlpZiAocmV0KSB7CisJCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgcmVxdWVzdGluZyBncGlvX3Bvd2VyICVkXG4iLCBncGlvX3Bvd2VyKTsKKwkJCWdvdG8gb3V0OworCQl9CisJCWdwaW9fZGlyZWN0aW9uX291dHB1dChncGlvX3Bvd2VyLAorCQkJCSAgICAgIGhvc3QtPnBkYXRhLT5ncGlvX3Bvd2VyX2ludmVydCk7CisJfQorCWlmIChncGlvX2lzX3ZhbGlkKGdwaW9fcm8pKSB7CisJCXJldCA9IGdwaW9fcmVxdWVzdChncGlvX3JvLCAibW1jIGNhcmQgcmVhZCBvbmx5Iik7CisJCWlmIChyZXQpIHsKKwkJCWRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWxlZCByZXF1ZXN0aW5nIGdwaW9fcm8gJWRcbiIsIGdwaW9fcm8pOworCQkJZ290byBlcnJfZ3Bpb19ybzsKKwkJfQorCQlncGlvX2RpcmVjdGlvbl9pbnB1dChncGlvX3JvKTsKKwl9CisJaWYgKGdwaW9faXNfdmFsaWQoZ3Bpb19jZCkpIHsKKwkJcmV0ID0gZ3Bpb19yZXF1ZXN0KGdwaW9fY2QsICJtbWMgY2FyZCBkZXRlY3QiKTsKKwkJaWYgKHJldCkgeworCQkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIHJlcXVlc3RpbmcgZ3Bpb19jZCAlZFxuIiwgZ3Bpb19jZCk7CisJCQlnb3RvIGVycl9ncGlvX2NkOworCQl9CisJCWdwaW9fZGlyZWN0aW9uX2lucHV0KGdwaW9fY2QpOworCisJCXJldCA9IHJlcXVlc3RfaXJxKGdwaW9fdG9faXJxKGdwaW9fY2QpLCBweGFtY2lfZGV0ZWN0X2lycSwKKwkJCQkgIElSUUZfVFJJR0dFUl9SSVNJTkcgfCBJUlFGX1RSSUdHRVJfRkFMTElORywKKwkJCQkgICJtbWMgY2FyZCBkZXRlY3QiLCBtbWMpOworCQlpZiAocmV0KSB7CisJCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gcmVxdWVzdCBjYXJkIGRldGVjdCBJUlFcbiIpOworCQkJZ290byBlcnJfcmVxdWVzdF9pcnE7CisJCX0KKwl9CisKIAlpZiAoaG9zdC0+cGRhdGEgJiYgaG9zdC0+cGRhdGEtPmluaXQpCiAJCWhvc3QtPnBkYXRhLT5pbml0KCZwZGV2LT5kZXYsIHB4YW1jaV9kZXRlY3RfaXJxLCBtbWMpOwogCisJaWYgKGdwaW9faXNfdmFsaWQoZ3Bpb19wb3dlcikgJiYgaG9zdC0+cGRhdGEtPnNldHBvd2VyKQorCQlkZXZfd2FybigmcGRldi0+ZGV2LCAiZ3Bpb19wb3dlciBhbmQgc2V0cG93ZXIoKSBib3RoIGRlZmluZWRcbiIpOworCWlmIChncGlvX2lzX3ZhbGlkKGdwaW9fcm8pICYmIGhvc3QtPnBkYXRhLT5nZXRfcm8pCisJCWRldl93YXJuKCZwZGV2LT5kZXYsICJncGlvX3JvIGFuZCBnZXRfcm8oKSBib3RoIGRlZmluZWRcbiIpOworCiAJbW1jX2FkZF9ob3N0KG1tYyk7CiAKIAlyZXR1cm4gMDsKIAorZXJyX3JlcXVlc3RfaXJxOgorCWdwaW9fZnJlZShncGlvX2NkKTsKK2Vycl9ncGlvX2NkOgorCWdwaW9fZnJlZShncGlvX3JvKTsKK2Vycl9ncGlvX3JvOgorCWdwaW9fZnJlZShncGlvX3Bvd2VyKTsKICBvdXQ6CiAJaWYgKGhvc3QpIHsKIAkJaWYgKGhvc3QtPmRtYSA+PSAwKQpAQCAtNjg4LDEyICs3NTMsMjYgQEAKIHN0YXRpYyBpbnQgcHhhbWNpX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBtbWNfaG9zdCAqbW1jID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJaW50IGdwaW9fY2QgPSAtMSwgZ3Bpb19ybyA9IC0xLCBncGlvX3Bvd2VyID0gLTE7CiAKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKIAogCWlmIChtbWMpIHsKIAkJc3RydWN0IHB4YW1jaV9ob3N0ICpob3N0ID0gbW1jX3ByaXYobW1jKTsKIAorCQlpZiAoaG9zdC0+cGRhdGEpIHsKKwkJCWdwaW9fY2QgPSBob3N0LT5wZGF0YS0+Z3Bpb19jYXJkX2RldGVjdDsKKwkJCWdwaW9fcm8gPSBob3N0LT5wZGF0YS0+Z3Bpb19jYXJkX3JvOworCQkJZ3Bpb19wb3dlciA9IGhvc3QtPnBkYXRhLT5ncGlvX3Bvd2VyOworCQl9CisJCWlmIChncGlvX2lzX3ZhbGlkKGdwaW9fY2QpKSB7CisJCQlmcmVlX2lycShncGlvX3RvX2lycShncGlvX2NkKSwgbW1jKTsKKwkJCWdwaW9fZnJlZShncGlvX2NkKTsKKwkJfQorCQlpZiAoZ3Bpb19pc192YWxpZChncGlvX3JvKSkKKwkJCWdwaW9fZnJlZShncGlvX3JvKTsKKwkJaWYgKGdwaW9faXNfdmFsaWQoZ3Bpb19wb3dlcikpCisJCQlncGlvX2ZyZWUoZ3Bpb19wb3dlcik7CiAJCWlmIChob3N0LT52Y2MpCiAJCQlyZWd1bGF0b3JfcHV0KGhvc3QtPnZjYyk7CiAKQEAgLTcyNSwyMCArODA0LDIwIEBACiB9CiAKICNpZmRlZiBDT05GSUdfUE0KLXN0YXRpYyBpbnQgcHhhbWNpX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitzdGF0aWMgaW50IHB4YW1jaV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgbW1jX2hvc3QgKm1tYyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IG1tY19ob3N0ICptbWMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAlpbnQgcmV0ID0gMDsKIAogCWlmIChtbWMpCi0JCXJldCA9IG1tY19zdXNwZW5kX2hvc3QobW1jLCBzdGF0ZSk7CisJCXJldCA9IG1tY19zdXNwZW5kX2hvc3QobW1jLCBQTVNHX1NVU1BFTkQpOwogCiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBweGFtY2lfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgcHhhbWNpX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IG1tY19ob3N0ICptbWMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBtbWNfaG9zdCAqbW1jID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAJaW50IHJldCA9IDA7CiAKIAlpZiAobW1jKQpAQCAtNzQ2LDE5ICs4MjUsMjIgQEAKIAogCXJldHVybiByZXQ7CiB9Ci0jZWxzZQotI2RlZmluZSBweGFtY2lfc3VzcGVuZAlOVUxMCi0jZGVmaW5lIHB4YW1jaV9yZXN1bWUJTlVMTAorCitzdGF0aWMgc3RydWN0IGRldl9wbV9vcHMgcHhhbWNpX3BtX29wcyA9IHsKKwkuc3VzcGVuZAk9IHB4YW1jaV9zdXNwZW5kLAorCS5yZXN1bWUJCT0gcHhhbWNpX3Jlc3VtZSwKK307CiAjZW5kaWYKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgcHhhbWNpX2RyaXZlciA9IHsKIAkucHJvYmUJCT0gcHhhbWNpX3Byb2JlLAogCS5yZW1vdmUJCT0gcHhhbWNpX3JlbW92ZSwKLQkuc3VzcGVuZAk9IHB4YW1jaV9zdXNwZW5kLAotCS5yZXN1bWUJCT0gcHhhbWNpX3Jlc3VtZSwKIAkuZHJpdmVyCQk9IHsKIAkJLm5hbWUJPSBEUklWRVJfTkFNRSwKIAkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisjaWZkZWYgQ09ORklHX1BNCisJCS5wbQk9ICZweGFtY2lfcG1fb3BzLAorI2VuZGlmCiAJfSwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3QvczNjbWNpLmMgYi9kcml2ZXJzL21tYy9ob3N0L3MzY21jaS5jCmluZGV4IDhjMDhjZDcuLjk5Yjc0YTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3QvczNjbWNpLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9zM2NtY2kuYwpAQCAtMTcsNiArMTcsOCBAQAogI2luY2x1ZGUgPGxpbnV4L21tYy9ob3N0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvY3B1ZnJlcS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgpAQCAtNTgsOCArNjAsNiBAQAogCQlkZXZfZGJnKCZob3N0LT5wZGV2LT5kZXYsIGFyZ3MpOyAgXAogCX0gd2hpbGUgKDApCiAKLSNkZWZpbmUgUkVTU0laRShyZXNzb3VyY2UpICgoKHJlc3NvdXJjZSktPmVuZCAtIChyZXNzb3VyY2UpLT5zdGFydCkrMSkKLQogc3RhdGljIHN0cnVjdCBzM2MyNDEwX2RtYV9jbGllbnQgczNjbWNpX2RtYV9jbGllbnQgPSB7CiAJLm5hbWUJCT0gInMzYy1tY2kiLAogfTsKQEAgLTE2NCw2ICsxNjQsNDAgQEAKIAogI2VuZGlmIC8qIENPTkZJR19NTUNfREVCVUcgKi8KIAorLyoqCisgKiBzM2NtY2lfaG9zdF91c2VkbWEgLSByZXR1cm4gd2hldGhlciB0aGUgaG9zdCBpcyB1c2luZyBkbWEgb3IgcGlvCisgKiBAaG9zdDogVGhlIGhvc3Qgc3RhdGUKKyAqCisgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgaG9zdCBpcyB1c2luZyBETUEgdG8gdHJhbnNmZXIgZGF0YSwgZWxzZSBmYWxzZQorICogdG8gdXNlIFBJTyBtb2RlLiBXaWxsIHJldHVybiBzdGF0aWMgZGF0YSBkZXBlbmRpbmcgb24gdGhlIGRyaXZlcgorICogY29uZmlndXJhdGlvbi4KKyAqLworc3RhdGljIGlubGluZSBib29sIHMzY21jaV9ob3N0X3VzZWRtYShzdHJ1Y3QgczNjbWNpX2hvc3QgKmhvc3QpCit7CisjaWZkZWYgQ09ORklHX01NQ19TM0NfUElPCisJcmV0dXJuIGZhbHNlOworI2VsaWYgZGVmaW5lZChDT05GSUdfTU1DX1MzQ19ETUEpCisJcmV0dXJuIHRydWU7CisjZWxzZQorCXJldHVybiBob3N0LT5kb2RtYTsKKyNlbmRpZgorfQorCisvKioKKyAqIHMzY21jaV9ob3N0X2NhbnBpbyAtIHJldHVybiB0cnVlIGlmIGhvc3QgaGFzIHBpbyBjb2RlIGF2YWlsYWJsZQorICoKKyAqIFJldHVybiB0cnVlIGlmIHRoZSBkcml2ZXIgaGFzIGJlZW4gY29tcGlsZWQgd2l0aCB0aGUgUElPIHN1cHBvcnQgY29kZQorICogYXZhaWxhYmxlLgorICovCitzdGF0aWMgaW5saW5lIGJvb2wgczNjbWNpX2hvc3RfY2FucGlvKHZvaWQpCit7CisjaWZkZWYgQ09ORklHX01NQ19TM0NfUElPCisJcmV0dXJuIHRydWU7CisjZWxzZQorCXJldHVybiBmYWxzZTsKKyNlbmRpZgorfQorCiBzdGF0aWMgaW5saW5lIHUzMiBlbmFibGVfaW1hc2soc3RydWN0IHMzY21jaV9ob3N0ICpob3N0LCB1MzIgaW1hc2spCiB7CiAJdTMyIG5ld21hc2s7CkBAIC0xOTAsNyArMjI0LDMzIEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcl9pbWFzayhzdHJ1Y3QgczNjbWNpX2hvc3QgKmhvc3QpCiB7Ci0Jd3JpdGVsKDAsIGhvc3QtPmJhc2UgKyBob3N0LT5zZGlpbXNrKTsKKwl1MzIgbWFzayA9IHJlYWRsKGhvc3QtPmJhc2UgKyBob3N0LT5zZGlpbXNrKTsKKworCS8qIHByZXNlcnZlIHRoZSBTRElPIElSUSBtYXNrIHN0YXRlICovCisJbWFzayAmPSBTM0MyNDEwX1NESUlNU0tfU0RJT0lSUTsKKwl3cml0ZWwobWFzaywgaG9zdC0+YmFzZSArIGhvc3QtPnNkaWltc2spOworfQorCisvKioKKyAqIHMzY21jaV9jaGVja19zZGlvX2lycSAtIHRlc3Qgd2hldGhlciB0aGUgU0RJTyBJUlEgaXMgYmVpbmcgc2lnbmFsbGVkCisgKiBAaG9zdDogVGhlIGhvc3QgdG8gY2hlY2suCisgKgorICogVGVzdCB0byBzZWUgaWYgdGhlIFNESU8gaW50ZXJydXB0IGlzIGJlaW5nIHNpZ25hbGxlZCBpbiBjYXNlIHRoZQorICogY29udHJvbGxlciBoYXMgZmFpbGVkIHRvIHJlLWRldGVjdCBhIGNhcmQgaW50ZXJydXB0LiBSZWFkIEdQRTggYW5kCisgKiBzZWUgaWYgaXQgaXMgbG93IGFuZCBpZiBzbywgc2lnbmFsIGEgU0RJTyBpbnRlcnJ1cHQuCisgKgorICogVGhpcyBpcyBjdXJyZW50bHkgY2FsbGVkIGlmIGEgcmVxdWVzdCBpcyBmaW5pc2hlZCAod2UgYXNzdW1lIHRoYXQgdGhlCisgKiBidXMgaXMgbm93IGlkbGUpIGFuZCB3aGVuIHRoZSBTRElPIElSUSBpcyBlbmFibGVkIGluIGNhc2UgdGhlIElSUSBpcworICogYWxyZWFkeSBiZWluZyBpbmRpY2F0ZWQuCisqLworc3RhdGljIHZvaWQgczNjbWNpX2NoZWNrX3NkaW9faXJxKHN0cnVjdCBzM2NtY2lfaG9zdCAqaG9zdCkKK3sKKwlpZiAoaG9zdC0+c2Rpb19pcnFlbikgeworCQlpZiAoZ3Bpb19nZXRfdmFsdWUoUzNDMjQxMF9HUEUoOCkpID09IDApIHsKKwkJCXByaW50ayhLRVJOX0RFQlVHICIlczogc2lnbmFsbGluZyBpcnFcbiIsIF9fZnVuY19fKTsKKwkJCW1tY19zaWduYWxfc2Rpb19pcnEoaG9zdC0+bW1jKTsKKwkJfQorCX0KIH0KIAogc3RhdGljIGlubGluZSBpbnQgZ2V0X2RhdGFfYnVmZmVyKHN0cnVjdCBzM2NtY2lfaG9zdCAqaG9zdCwKQEAgLTIzOCw2ICsyOTgsNjQgQEAKIAlyZXR1cm4gNjMgLSBmaWZvc3RhdDsKIH0KIAorLyoqCisgKiBzM2NtY2lfZW5hYmxlX2lycSAtIGVuYWJsZSBJUlEsIGFmdGVyIGhhdmluZyBkaXNhYmxlZCBpdC4KKyAqIEBob3N0OiBUaGUgZGV2aWNlIHN0YXRlLgorICogQG1vcmU6IFRydWUgaWYgbW9yZSBJUlFzIGFyZSBleHBlY3RlZCBmcm9tIHRyYW5zZmVyLgorICoKKyAqIEVuYWJsZSB0aGUgbWFpbiBJUlEgaWYgbmVlZGVkIGFmdGVyIGl0IGhhcyBiZWVuIGRpc2FibGVkLgorICoKKyAqIFRoZSBJUlEgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHN0YXRlczoKKyAqCS0gZGlzYWJsZWQgZHVyaW5nIElETEUKKyAqCS0gZGlzYWJsZWQgd2hpbHN0IHByb2Nlc3NpbmcgZGF0YQorICoJLSBlbmFibGVkIGR1cmluZyB0cmFuc2ZlcgorICoJLSBlbmFibGVkIHdoaWxzdCBhd2FpdGluZyBTRElPIGludGVycnVwdCBkZXRlY3Rpb24KKyAqLworc3RhdGljIHZvaWQgczNjbWNpX2VuYWJsZV9pcnEoc3RydWN0IHMzY21jaV9ob3N0ICpob3N0LCBib29sIG1vcmUpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlib29sIGVuYWJsZSA9IGZhbHNlOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCisJaG9zdC0+aXJxX2VuYWJsZWQgPSBtb3JlOworCWhvc3QtPmlycV9kaXNhYmxlZCA9IGZhbHNlOworCisJZW5hYmxlID0gbW9yZSB8IGhvc3QtPnNkaW9faXJxZW47CisKKwlpZiAoaG9zdC0+aXJxX3N0YXRlICE9IGVuYWJsZSkgeworCQlob3N0LT5pcnFfc3RhdGUgPSBlbmFibGU7CisKKwkJaWYgKGVuYWJsZSkKKwkJCWVuYWJsZV9pcnEoaG9zdC0+aXJxKTsKKwkJZWxzZQorCQkJZGlzYWJsZV9pcnEoaG9zdC0+aXJxKTsKKwl9CisKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKKy8qKgorICoKKyAqLworc3RhdGljIHZvaWQgczNjbWNpX2Rpc2FibGVfaXJxKHN0cnVjdCBzM2NtY2lfaG9zdCAqaG9zdCwgYm9vbCB0cmFuc2ZlcikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCisJLy9wcmludGsoS0VSTl9ERUJVRyAiJXM6IHRyYW5zZmVyICVkXG4iLCBfX2Z1bmNfXywgdHJhbnNmZXIpOworCisJaG9zdC0+aXJxX2Rpc2FibGVkID0gdHJhbnNmZXI7CisKKwlpZiAodHJhbnNmZXIgJiYgaG9zdC0+aXJxX3N0YXRlKSB7CisJCWhvc3QtPmlycV9zdGF0ZSA9IGZhbHNlOworCQlkaXNhYmxlX2lycShob3N0LT5pcnEpOworCX0KKworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KKwogc3RhdGljIHZvaWQgZG9fcGlvX3JlYWQoc3RydWN0IHMzY21jaV9ob3N0ICpob3N0KQogewogCWludCByZXM7CkBAIC0zNzQsOCArNDkyLDcgQEAKIHsKIAlzdHJ1Y3QgczNjbWNpX2hvc3QgKmhvc3QgPSAoc3RydWN0IHMzY21jaV9ob3N0ICopIGRhdGE7CiAKLQotCWRpc2FibGVfaXJxKGhvc3QtPmlycSk7CisJczNjbWNpX2Rpc2FibGVfaXJxKGhvc3QsIHRydWUpOwogCiAJaWYgKGhvc3QtPnBpb19hY3RpdmUgPT0gWEZFUl9XUklURSkKIAkJZG9fcGlvX3dyaXRlKGhvc3QpOwpAQCAtMzk1LDkgKzUxMiwxMCBAQAogCQkJCWhvc3QtPm1ycS0+ZGF0YS0+ZXJyb3IgPSAtRUlOVkFMOwogCQl9CiAKKwkJczNjbWNpX2VuYWJsZV9pcnEoaG9zdCwgZmFsc2UpOwogCQlmaW5hbGl6ZV9yZXF1ZXN0KGhvc3QpOwogCX0gZWxzZQotCQllbmFibGVfaXJxKGhvc3QtPmlycSk7CisJCXMzY21jaV9lbmFibGVfaXJxKGhvc3QsIHRydWUpOwogfQogCiAvKgpAQCAtNDMyLDE3ICs1NTAsMjcgQEAKIAlzdHJ1Y3QgczNjbWNpX2hvc3QgKmhvc3QgPSBkZXZfaWQ7CiAJc3RydWN0IG1tY19jb21tYW5kICpjbWQ7CiAJdTMyIG1jaV9jc3RhLCBtY2lfZHN0YSwgbWNpX2ZzdGEsIG1jaV9kY250LCBtY2lfaW1zazsKLQl1MzIgbWNpX2NjbGVhciwgbWNpX2RjbGVhcjsKKwl1MzIgbWNpX2NjbGVhciA9IDAsIG1jaV9kY2xlYXI7CiAJdW5zaWduZWQgbG9uZyBpZmxhZ3M7CiAKKwltY2lfZHN0YSA9IHJlYWRsKGhvc3QtPmJhc2UgKyBTM0MyNDEwX1NESURTVEEpOworCW1jaV9pbXNrID0gcmVhZGwoaG9zdC0+YmFzZSArIGhvc3QtPnNkaWltc2spOworCisJaWYgKG1jaV9kc3RhICYgUzNDMjQxMF9TRElEU1RBX1NESU9JUlFERVRFQ1QpIHsKKwkJaWYgKG1jaV9pbXNrICYgUzNDMjQxMF9TRElJTVNLX1NESU9JUlEpIHsKKwkJCW1jaV9kY2xlYXIgPSBTM0MyNDEwX1NESURTVEFfU0RJT0lSUURFVEVDVDsKKwkJCXdyaXRlbChtY2lfZGNsZWFyLCBob3N0LT5iYXNlICsgUzNDMjQxMF9TRElEU1RBKTsKKworCQkJbW1jX3NpZ25hbF9zZGlvX2lycShob3N0LT5tbWMpOworCQkJcmV0dXJuIElSUV9IQU5ETEVEOworCQl9CisJfQorCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmhvc3QtPmNvbXBsZXRlX2xvY2ssIGlmbGFncyk7CiAKIAltY2lfY3N0YSA9IHJlYWRsKGhvc3QtPmJhc2UgKyBTM0MyNDEwX1NESUNNRFNUQVQpOwotCW1jaV9kc3RhID0gcmVhZGwoaG9zdC0+YmFzZSArIFMzQzI0MTBfU0RJRFNUQSk7CiAJbWNpX2RjbnQgPSByZWFkbChob3N0LT5iYXNlICsgUzNDMjQxMF9TRElEQ05UKTsKIAltY2lfZnN0YSA9IHJlYWRsKGhvc3QtPmJhc2UgKyBTM0MyNDEwX1NESUZTVEEpOwotCW1jaV9pbXNrID0gcmVhZGwoaG9zdC0+YmFzZSArIGhvc3QtPnNkaWltc2spOwotCW1jaV9jY2xlYXIgPSAwOwogCW1jaV9kY2xlYXIgPSAwOwogCiAJaWYgKChob3N0LT5jb21wbGV0ZV93aGF0ID09IENPTVBMRVRJT05fTk9ORSkgfHwKQEAgLTQ2Niw3ICs1OTQsNyBAQAogCQlnb3RvIGlycV9vdXQ7CiAJfQogCi0JaWYgKCFob3N0LT5kb2RtYSkgeworCWlmICghczNjbWNpX2hvc3RfdXNlZG1hKGhvc3QpKSB7CiAJCWlmICgoaG9zdC0+cGlvX2FjdGl2ZSA9PSBYRkVSX1dSSVRFKSAmJgogCQkgICAgKG1jaV9mc3RhICYgUzNDMjQxMF9TRElGU1RBX1RGREVUKSkgewogCkBAIC02NzMsNiArODAxLDcgQEAKIAlkYmcoaG9zdCwgZGJnX2RtYSwgIkRNQSBGSU5JU0hFRCBTaXplOiVpIERTVEE6JTA4eCBEQ05UOiUwOHhcbiIsCiAJCXNpemUsIG1jaV9kc3RhLCBtY2lfZGNudCk7CiAKKwlob3N0LT5kbWFfY29tcGxldGUgPSAxOwogCWhvc3QtPmNvbXBsZXRlX3doYXQgPSBDT01QTEVUSU9OX0ZJTkFMSVpFOwogCiBvdXQ6CkBAIC02ODMsOSArODEyLDkgQEAKIGZhaWxfcmVxdWVzdDoKIAlob3N0LT5tcnEtPmRhdGEtPmVycm9yID0gLUVJTlZBTDsKIAlob3N0LT5jb21wbGV0ZV93aGF0ID0gQ09NUExFVElPTl9GSU5BTElaRTsKLQl3cml0ZWwoMCwgaG9zdC0+YmFzZSArIGhvc3QtPnNkaWltc2spOwotCWdvdG8gb3V0OworCWNsZWFyX2ltYXNrKGhvc3QpOwogCisJZ290byBvdXQ7CiB9CiAKIHN0YXRpYyB2b2lkIGZpbmFsaXplX3JlcXVlc3Qoc3RydWN0IHMzY21jaV9ob3N0ICpob3N0KQpAQCAtNzAyLDggKzgzMSw5IEBACiAKIAlpZiAoY21kLT5kYXRhICYmIChjbWQtPmVycm9yID09IDApICYmCiAJICAgIChjbWQtPmRhdGEtPmVycm9yID09IDApKSB7Ci0JCWlmIChob3N0LT5kb2RtYSAmJiAoIWhvc3QtPmRtYV9jb21wbGV0ZSkpIHsKLQkJCWRiZyhob3N0LCBkYmdfZG1hLCAiRE1BIE1pc3NpbmchXG4iKTsKKwkJaWYgKHMzY21jaV9ob3N0X3VzZWRtYShob3N0KSAmJiAoIWhvc3QtPmRtYV9jb21wbGV0ZSkpIHsKKwkJCWRiZyhob3N0LCBkYmdfZG1hLCAiRE1BIE1pc3NpbmcgKCVkKSFcbiIsCisJCQkgICAgaG9zdC0+ZG1hX2NvbXBsZXRlKTsKIAkJCXJldHVybjsKIAkJfQogCX0KQEAgLTcyOCw3ICs4NTgsNyBAQAogCXdyaXRlbCgwLCBob3N0LT5iYXNlICsgUzNDMjQxMF9TRElDTURBUkcpOwogCXdyaXRlbChTM0MyNDEwX1NESURDT05fU1RPUCwgaG9zdC0+YmFzZSArIFMzQzI0MTBfU0RJRENPTik7CiAJd3JpdGVsKDAsIGhvc3QtPmJhc2UgKyBTM0MyNDEwX1NESUNNRENPTik7Ci0Jd3JpdGVsKDAsIGhvc3QtPmJhc2UgKyBob3N0LT5zZGlpbXNrKTsKKwljbGVhcl9pbWFzayhob3N0KTsKIAogCWlmIChjbWQtPmRhdGEgJiYgY21kLT5lcnJvcikKIAkJY21kLT5kYXRhLT5lcnJvciA9IGNtZC0+ZXJyb3I7CkBAIC03NTQsNyArODg0LDcgQEAKIAkvKiBJZiB3ZSBoYWQgYW4gZXJyb3Igd2hpbGUgdHJhbnNmZXJpbmcgZGF0YSB3ZSBmbHVzaCB0aGUKIAkgKiBETUEgY2hhbm5lbCBhbmQgdGhlIGZpZm8gdG8gY2xlYXIgb3V0IGFueSBnYXJiYWdlLiAqLwogCWlmIChtcnEtPmRhdGEtPmVycm9yICE9IDApIHsKLQkJaWYgKGhvc3QtPmRvZG1hKQorCQlpZiAoczNjbWNpX2hvc3RfdXNlZG1hKGhvc3QpKQogCQkJczNjMjQxMF9kbWFfY3RybChob3N0LT5kbWEsIFMzQzI0MTBfRE1BT1BfRkxVU0gpOwogCiAJCWlmIChob3N0LT5pczI0NDApIHsKQEAgLTc3Niw2ICs5MDYsOCBAQAogcmVxdWVzdF9kb25lOgogCWhvc3QtPmNvbXBsZXRlX3doYXQgPSBDT01QTEVUSU9OX05PTkU7CiAJaG9zdC0+bXJxID0gTlVMTDsKKworCXMzY21jaV9jaGVja19zZGlvX2lycShob3N0KTsKIAltbWNfcmVxdWVzdF9kb25lKGhvc3QtPm1tYywgbXJxKTsKIH0KIApAQCAtODcyLDcgKzEwMDQsNyBAQAogCiAJZGNvbiAgPSBkYXRhLT5ibG9ja3MgJiBTM0MyNDEwX1NESURDT05fQkxLTlVNX01BU0s7CiAKLQlpZiAoaG9zdC0+ZG9kbWEpCisJaWYgKHMzY21jaV9ob3N0X3VzZWRtYShob3N0KSkKIAkJZGNvbiB8PSBTM0MyNDEwX1NESURDT05fRE1BRU47CiAKIAlpZiAoaG9zdC0+YnVzX3dpZHRoID09IE1NQ19CVVNfV0lEVEhfNCkKQEAgLTk1MCw3ICsxMDgyLDcgQEAKIHN0YXRpYyBpbnQgczNjbWNpX3ByZXBhcmVfZG1hKHN0cnVjdCBzM2NtY2lfaG9zdCAqaG9zdCwgc3RydWN0IG1tY19kYXRhICpkYXRhKQogewogCWludCBkbWFfbGVuLCBpOwotCWludCBydyA9IChkYXRhLT5mbGFncyAmIE1NQ19EQVRBX1dSSVRFKSA/IDEgOiAwOworCWludCBydyA9IGRhdGEtPmZsYWdzICYgTU1DX0RBVEFfV1JJVEU7CiAKIAlCVUdfT04oKGRhdGEtPmZsYWdzICYgQk9USF9ESVIpID09IEJPVEhfRElSKTsKIApAQCAtOTU4LDcgKzEwOTAsNyBAQAogCXMzYzI0MTBfZG1hX2N0cmwoaG9zdC0+ZG1hLCBTM0MyNDEwX0RNQU9QX0ZMVVNIKTsKIAogCWRtYV9sZW4gPSBkbWFfbWFwX3NnKG1tY19kZXYoaG9zdC0+bW1jKSwgZGF0YS0+c2csIGRhdGEtPnNnX2xlbiwKLQkJCSAgICAgKHJ3KSA/IERNQV9UT19ERVZJQ0UgOiBETUFfRlJPTV9ERVZJQ0UpOworCQkJICAgICBydyA/IERNQV9UT19ERVZJQ0UgOiBETUFfRlJPTV9ERVZJQ0UpOwogCiAJaWYgKGRtYV9sZW4gPT0gMCkKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC05NjksMTEgKzExMDEsMTEgQEAKIAlmb3IgKGkgPSAwOyBpIDwgZG1hX2xlbjsgaSsrKSB7CiAJCWludCByZXM7CiAKLQkJZGJnKGhvc3QsIGRiZ19kbWEsICJlbnF1ZXVlICVpOiV1QCV1XG4iLCBpLAotCQkJc2dfZG1hX2FkZHJlc3MoJmRhdGEtPnNnW2ldKSwKLQkJCXNnX2RtYV9sZW4oJmRhdGEtPnNnW2ldKSk7CisJCWRiZyhob3N0LCBkYmdfZG1hLCAiZW5xdWV1ZSAlaTogJTA4eEAldVxuIiwgaSwKKwkJICAgIHNnX2RtYV9hZGRyZXNzKCZkYXRhLT5zZ1tpXSksCisJCSAgICBzZ19kbWFfbGVuKCZkYXRhLT5zZ1tpXSkpOwogCi0JCXJlcyA9IHMzYzI0MTBfZG1hX2VucXVldWUoaG9zdC0+ZG1hLCAodm9pZCAqKSBob3N0LAorCQlyZXMgPSBzM2MyNDEwX2RtYV9lbnF1ZXVlKGhvc3QtPmRtYSwgaG9zdCwKIAkJCQkJICBzZ19kbWFfYWRkcmVzcygmZGF0YS0+c2dbaV0pLAogCQkJCQkgIHNnX2RtYV9sZW4oJmRhdGEtPnNnW2ldKSk7CiAKQEAgLTEwMTgsNyArMTE1MCw3IEBACiAJCQlyZXR1cm47CiAJCX0KIAotCQlpZiAoaG9zdC0+ZG9kbWEpCisJCWlmIChzM2NtY2lfaG9zdF91c2VkbWEoaG9zdCkpCiAJCQlyZXMgPSBzM2NtY2lfcHJlcGFyZV9kbWEoaG9zdCwgY21kLT5kYXRhKTsKIAkJZWxzZQogCQkJcmVzID0gczNjbWNpX3ByZXBhcmVfcGlvKGhvc3QsIGNtZC0+ZGF0YSk7CkBAIC0xMDM3LDcgKzExNjksNyBAQAogCXMzY21jaV9zZW5kX2NvbW1hbmQoaG9zdCwgY21kKTsKIAogCS8qIEVuYWJsZSBJbnRlcnJ1cHQgKi8KLQllbmFibGVfaXJxKGhvc3QtPmlycSk7CisJczNjbWNpX2VuYWJsZV9pcnEoaG9zdCwgdHJ1ZSk7CiB9CiAKIHN0YXRpYyBpbnQgczNjbWNpX2NhcmRfcHJlc2VudChzdHJ1Y3QgbW1jX2hvc3QgKm1tYykKQEAgLTEwNDksNyArMTE4MSw3IEBACiAJaWYgKHBkYXRhLT5ncGlvX2RldGVjdCA9PSAwKQogCQlyZXR1cm4gLUVOT1NZUzsKIAotCXJldCA9IHMzYzI0MTBfZ3Bpb19nZXRwaW4ocGRhdGEtPmdwaW9fZGV0ZWN0KSA/IDAgOiAxOworCXJldCA9IGdwaW9fZ2V0X3ZhbHVlKHBkYXRhLT5ncGlvX2RldGVjdCkgPyAwIDogMTsKIAlyZXR1cm4gcmV0IF4gcGRhdGEtPmRldGVjdF9pbnZlcnQ7CiB9CiAKQEAgLTExMDQsMTIgKzEyMzYsMTIgQEAKIAlzd2l0Y2ggKGlvcy0+cG93ZXJfbW9kZSkgewogCWNhc2UgTU1DX1BPV0VSX09OOgogCWNhc2UgTU1DX1BPV0VSX1VQOgotCQlzM2MyNDEwX2dwaW9fY2ZncGluKFMzQzI0MTBfR1BFNSwgUzNDMjQxMF9HUEU1X1NEQ0xLKTsKLQkJczNjMjQxMF9ncGlvX2NmZ3BpbihTM0MyNDEwX0dQRTYsIFMzQzI0MTBfR1BFNl9TRENNRCk7Ci0JCXMzYzI0MTBfZ3Bpb19jZmdwaW4oUzNDMjQxMF9HUEU3LCBTM0MyNDEwX0dQRTdfU0REQVQwKTsKLQkJczNjMjQxMF9ncGlvX2NmZ3BpbihTM0MyNDEwX0dQRTgsIFMzQzI0MTBfR1BFOF9TRERBVDEpOwotCQlzM2MyNDEwX2dwaW9fY2ZncGluKFMzQzI0MTBfR1BFOSwgUzNDMjQxMF9HUEU5X1NEREFUMik7Ci0JCXMzYzI0MTBfZ3Bpb19jZmdwaW4oUzNDMjQxMF9HUEUxMCwgUzNDMjQxMF9HUEUxMF9TRERBVDMpOworCQlzM2MyNDEwX2dwaW9fY2ZncGluKFMzQzI0MTBfR1BFKDUpLCBTM0MyNDEwX0dQRTVfU0RDTEspOworCQlzM2MyNDEwX2dwaW9fY2ZncGluKFMzQzI0MTBfR1BFKDYpLCBTM0MyNDEwX0dQRTZfU0RDTUQpOworCQlzM2MyNDEwX2dwaW9fY2ZncGluKFMzQzI0MTBfR1BFKDcpLCBTM0MyNDEwX0dQRTdfU0REQVQwKTsKKwkJczNjMjQxMF9ncGlvX2NmZ3BpbihTM0MyNDEwX0dQRSg4KSwgUzNDMjQxMF9HUEU4X1NEREFUMSk7CisJCXMzYzI0MTBfZ3Bpb19jZmdwaW4oUzNDMjQxMF9HUEUoOSksIFMzQzI0MTBfR1BFOV9TRERBVDIpOworCQlzM2MyNDEwX2dwaW9fY2ZncGluKFMzQzI0MTBfR1BFKDEwKSwgUzNDMjQxMF9HUEUxMF9TRERBVDMpOwogCiAJCWlmIChob3N0LT5wZGF0YS0+c2V0X3Bvd2VyKQogCQkJaG9zdC0+cGRhdGEtPnNldF9wb3dlcihpb3MtPnBvd2VyX21vZGUsIGlvcy0+dmRkKTsKQEAgLTExMjEsOCArMTI1Myw3IEBACiAKIAljYXNlIE1NQ19QT1dFUl9PRkY6CiAJZGVmYXVsdDoKLQkJczNjMjQxMF9ncGlvX3NldHBpbihTM0MyNDEwX0dQRTUsIDApOwotCQlzM2MyNDEwX2dwaW9fY2ZncGluKFMzQzI0MTBfR1BFNSwgUzNDMjQxMF9HUElPX09VVFBVVCk7CisJCWdwaW9fZGlyZWN0aW9uX291dHB1dChTM0MyNDEwX0dQRSg1KSwgMCk7CiAKIAkJaWYgKGhvc3QtPmlzMjQ0MCkKIAkJCW1jaV9jb24gfD0gUzNDMjQ0MF9TRElDT05fU0RSRVNFVDsKQEAgLTExNjgsNyArMTI5OSw3IEBACiAJc3RydWN0IHMzYzI0eHhfbWNpX3BkYXRhICpwZGF0YSA9IGhvc3QtPnBkYXRhOwogCWludCByZXQ7CiAKLQlpZiAocGRhdGEtPmdwaW9fd3Byb3RlY3QgPT0gMCkKKwlpZiAocGRhdGEtPm5vX3dwcm90ZWN0KQogCQlyZXR1cm4gMDsKIAogCXJldCA9IHMzYzI0MTBfZ3Bpb19nZXRwaW4ocGRhdGEtPmdwaW9fd3Byb3RlY3QpOwpAQCAtMTE3OSwxMSArMTMxMCw1MiBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyB2b2lkIHMzY21jaV9lbmFibGVfc2Rpb19pcnEoc3RydWN0IG1tY19ob3N0ICptbWMsIGludCBlbmFibGUpCit7CisJc3RydWN0IHMzY21jaV9ob3N0ICpob3N0ID0gbW1jX3ByaXYobW1jKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUzMiBjb247CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKKwljb24gPSByZWFkbChob3N0LT5iYXNlICsgUzNDMjQxMF9TRElDT04pOworCWhvc3QtPnNkaW9faXJxZW4gPSBlbmFibGU7CisKKwlpZiAoZW5hYmxlID09IGhvc3QtPnNkaW9faXJxZW4pCisJCWdvdG8gc2FtZV9zdGF0ZTsKKworCWlmIChlbmFibGUpIHsKKwkJY29uIHw9IFMzQzI0MTBfU0RJQ09OX1NESU9JUlE7CisJCWVuYWJsZV9pbWFzayhob3N0LCBTM0MyNDEwX1NESUlNU0tfU0RJT0lSUSk7CisKKwkJaWYgKCFob3N0LT5pcnFfc3RhdGUgJiYgIWhvc3QtPmlycV9kaXNhYmxlZCkgeworCQkJaG9zdC0+aXJxX3N0YXRlID0gdHJ1ZTsKKwkJCWVuYWJsZV9pcnEoaG9zdC0+aXJxKTsKKwkJfQorCX0gZWxzZSB7CisJCWRpc2FibGVfaW1hc2soaG9zdCwgUzNDMjQxMF9TRElJTVNLX1NESU9JUlEpOworCQljb24gJj0gflMzQzI0MTBfU0RJQ09OX1NESU9JUlE7CisKKwkJaWYgKCFob3N0LT5pcnFfZW5hYmxlZCAmJiBob3N0LT5pcnFfc3RhdGUpIHsKKwkJCWRpc2FibGVfaXJxX25vc3luYyhob3N0LT5pcnEpOworCQkJaG9zdC0+aXJxX3N0YXRlID0gZmFsc2U7CisJCX0KKwl9CisKKwl3cml0ZWwoY29uLCBob3N0LT5iYXNlICsgUzNDMjQxMF9TRElDT04pOworCisgc2FtZV9zdGF0ZToKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisKKwlzM2NtY2lfY2hlY2tfc2Rpb19pcnEoaG9zdCk7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgbW1jX2hvc3Rfb3BzIHMzY21jaV9vcHMgPSB7CiAJLnJlcXVlc3QJPSBzM2NtY2lfcmVxdWVzdCwKIAkuc2V0X2lvcwk9IHMzY21jaV9zZXRfaW9zLAogCS5nZXRfcm8JCT0gczNjbWNpX2dldF9ybywKIAkuZ2V0X2NkCQk9IHMzY21jaV9jYXJkX3ByZXNlbnQsCisJLmVuYWJsZV9zZGlvX2lycSA9IHMzY21jaV9lbmFibGVfc2Rpb19pcnEsCiB9OwogCiBzdGF0aWMgc3RydWN0IHMzYzI0eHhfbWNpX3BkYXRhIHMzY21jaV9kZWZfcGRhdGEgPSB7CkBAIC0xMjQ2LDExICsxNDE4LDE0MCBAQAogfQogI2VuZGlmCiAKLXN0YXRpYyBpbnQgX19kZXZpbml0IHMzY21jaV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBpbnQgaXMyNDQwKQorCisjaWZkZWYgQ09ORklHX0RFQlVHX0ZTCisKK3N0YXRpYyBpbnQgczNjbWNpX3N0YXRlX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCit7CisJc3RydWN0IHMzY21jaV9ob3N0ICpob3N0ID0gc2VxLT5wcml2YXRlOworCisJc2VxX3ByaW50ZihzZXEsICJSZWdpc3RlciBiYXNlID0gMHglMDh4XG4iLCAodTMyKWhvc3QtPmJhc2UpOworCXNlcV9wcmludGYoc2VxLCAiQ2xvY2sgcmF0ZSA9ICVsZFxuIiwgaG9zdC0+Y2xrX3JhdGUpOworCXNlcV9wcmludGYoc2VxLCAiUHJlc2NhbGUgPSAlZFxuIiwgaG9zdC0+cHJlc2NhbGVyKTsKKwlzZXFfcHJpbnRmKHNlcSwgImlzMjQ0MCA9ICVkXG4iLCBob3N0LT5pczI0NDApOworCXNlcV9wcmludGYoc2VxLCAiSVJRID0gJWRcbiIsIGhvc3QtPmlycSk7CisJc2VxX3ByaW50ZihzZXEsICJJUlEgZW5hYmxlZCA9ICVkXG4iLCBob3N0LT5pcnFfZW5hYmxlZCk7CisJc2VxX3ByaW50ZihzZXEsICJJUlEgZGlzYWJsZWQgPSAlZFxuIiwgaG9zdC0+aXJxX2Rpc2FibGVkKTsKKwlzZXFfcHJpbnRmKHNlcSwgIklSUSBzdGF0ZSA9ICVkXG4iLCBob3N0LT5pcnFfc3RhdGUpOworCXNlcV9wcmludGYoc2VxLCAiQ0QgSVJRID0gJWRcbiIsIGhvc3QtPmlycV9jZCk7CisJc2VxX3ByaW50ZihzZXEsICJEbyBETUEgPSAlZFxuIiwgczNjbWNpX2hvc3RfdXNlZG1hKGhvc3QpKTsKKwlzZXFfcHJpbnRmKHNlcSwgIlNESUlNU0sgYXQgJWRcbiIsIGhvc3QtPnNkaWltc2spOworCXNlcV9wcmludGYoc2VxLCAiU0RJREFUQSBhdCAlZFxuIiwgaG9zdC0+c2RpZGF0YSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzM2NtY2lfc3RhdGVfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgczNjbWNpX3N0YXRlX3Nob3csIGlub2RlLT5pX3ByaXZhdGUpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzM2NtY2lfZm9wc19zdGF0ZSA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCT0gczNjbWNpX3N0YXRlX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKK307CisKKyNkZWZpbmUgREJHX1JFRyhfcikgeyAuYWRkciA9IFMzQzI0MTBfU0RJIyNfciwgLm5hbWUgPSAjX3IgfQorCitzdHJ1Y3QgczNjbWNpX3JlZyB7CisJdW5zaWduZWQgc2hvcnQJYWRkcjsKKwl1bnNpZ25lZCBjaGFyCSpuYW1lOworfSBkZWJ1Z19yZWdzW10gPSB7CisJREJHX1JFRyhDT04pLAorCURCR19SRUcoUFJFKSwKKwlEQkdfUkVHKENNREFSRyksCisJREJHX1JFRyhDTURDT04pLAorCURCR19SRUcoQ01EU1RBVCksCisJREJHX1JFRyhSU1AwKSwKKwlEQkdfUkVHKFJTUDEpLAorCURCR19SRUcoUlNQMiksCisJREJHX1JFRyhSU1AzKSwKKwlEQkdfUkVHKFRJTUVSKSwKKwlEQkdfUkVHKEJTSVpFKSwKKwlEQkdfUkVHKERDT04pLAorCURCR19SRUcoRENOVCksCisJREJHX1JFRyhEU1RBKSwKKwlEQkdfUkVHKEZTVEEpLAorCXt9Cit9OworCitzdGF0aWMgaW50IHMzY21jaV9yZWdzX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCit7CisJc3RydWN0IHMzY21jaV9ob3N0ICpob3N0ID0gc2VxLT5wcml2YXRlOworCXN0cnVjdCBzM2NtY2lfcmVnICpycHRyID0gZGVidWdfcmVnczsKKworCWZvciAoOyBycHRyLT5uYW1lOyBycHRyKyspCisJCXNlcV9wcmludGYoc2VxLCAiU0RJJXNcdD0weCUwOHhcbiIsIHJwdHItPm5hbWUsCisJCQkgICByZWFkbChob3N0LT5iYXNlICsgcnB0ci0+YWRkcikpOworCisJc2VxX3ByaW50ZihzZXEsICJTRElJTVNLXHQ9MHglMDh4XG4iLCByZWFkbChob3N0LT5iYXNlICsgaG9zdC0+c2RpaW1zaykpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgczNjbWNpX3JlZ3Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgczNjbWNpX3JlZ3Nfc2hvdywgaW5vZGUtPmlfcHJpdmF0ZSk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHMzY21jaV9mb3BzX3JlZ3MgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5vcGVuCQk9IHMzY21jaV9yZWdzX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKK307CisKK3N0YXRpYyB2b2lkIHMzY21jaV9kZWJ1Z2ZzX2F0dGFjaChzdHJ1Y3QgczNjbWNpX2hvc3QgKmhvc3QpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJmhvc3QtPnBkZXYtPmRldjsKKworCWhvc3QtPmRlYnVnX3Jvb3QgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoZGV2X25hbWUoZGV2KSwgTlVMTCk7CisJaWYgKElTX0VSUihob3N0LT5kZWJ1Z19yb290KSkgeworCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBjcmVhdGUgZGVidWdmcyByb290XG4iKTsKKwkJcmV0dXJuOworCX0KKworCWhvc3QtPmRlYnVnX3N0YXRlID0gZGVidWdmc19jcmVhdGVfZmlsZSgic3RhdGUiLCAwNDQ0LAorCQkJCQkJaG9zdC0+ZGVidWdfcm9vdCwgaG9zdCwKKwkJCQkJCSZzM2NtY2lfZm9wc19zdGF0ZSk7CisKKwlpZiAoSVNfRVJSKGhvc3QtPmRlYnVnX3N0YXRlKSkKKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gY3JlYXRlIGRlYnVnIHN0YXRlIGZpbGVcbiIpOworCisJaG9zdC0+ZGVidWdfcmVncyA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoInJlZ3MiLCAwNDQ0LAorCQkJCQkgICAgICAgaG9zdC0+ZGVidWdfcm9vdCwgaG9zdCwKKwkJCQkJICAgICAgICZzM2NtY2lfZm9wc19yZWdzKTsKKworCWlmIChJU19FUlIoaG9zdC0+ZGVidWdfcmVncykpCisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGNyZWF0ZSBkZWJ1ZyByZWdzIGZpbGVcbiIpOworfQorCitzdGF0aWMgdm9pZCBzM2NtY2lfZGVidWdmc19yZW1vdmUoc3RydWN0IHMzY21jaV9ob3N0ICpob3N0KQoreworCWRlYnVnZnNfcmVtb3ZlKGhvc3QtPmRlYnVnX3JlZ3MpOworCWRlYnVnZnNfcmVtb3ZlKGhvc3QtPmRlYnVnX3N0YXRlKTsKKwlkZWJ1Z2ZzX3JlbW92ZShob3N0LT5kZWJ1Z19yb290KTsKK30KKworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBzM2NtY2lfZGVidWdmc19hdHRhY2goc3RydWN0IHMzY21jaV9ob3N0ICpob3N0KSB7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBzM2NtY2lfZGVidWdmc19yZW1vdmUoc3RydWN0IHMzY21jaV9ob3N0ICpob3N0KSB7IH0KKworI2VuZGlmIC8qIENPTkZJR19ERUJVR19GUyAqLworCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzM2NtY2lfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3QgczNjbWNpX2hvc3QgKmhvc3Q7CiAJc3RydWN0IG1tY19ob3N0CSptbWM7CiAJaW50IHJldDsKKwlpbnQgaXMyNDQwOworCWludCBpOworCisJaXMyNDQwID0gcGxhdGZvcm1fZ2V0X2RldmljZV9pZChwZGV2KS0+ZHJpdmVyX2RhdGE7CiAKIAltbWMgPSBtbWNfYWxsb2NfaG9zdChzaXplb2Yoc3RydWN0IHMzY21jaV9ob3N0KSwgJnBkZXYtPmRldik7CiAJaWYgKCFtbWMpIHsKQEAgLTEyNTgsNiArMTU1OSwxOCBAQAogCQlnb3RvIHByb2JlX291dDsKIAl9CiAKKwlmb3IgKGkgPSBTM0MyNDEwX0dQRSg1KTsgaSA8PSBTM0MyNDEwX0dQRSgxMCk7IGkrKykgeworCQlyZXQgPSBncGlvX3JlcXVlc3QoaSwgZGV2X25hbWUoJnBkZXYtPmRldikpOworCQlpZiAocmV0KSB7CisJCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gZ2V0IGdwaW8gJWRcbiIsIGkpOworCisJCQlmb3IgKGktLTsgaSA+PSBTM0MyNDEwX0dQRSg1KTsgaS0tKQorCQkJCWdwaW9fZnJlZShpKTsKKworCQkJZ290byBwcm9iZV9mcmVlX2hvc3Q7CisJCX0KKwl9CisKIAlob3N0ID0gbW1jX3ByaXYobW1jKTsKIAlob3N0LT5tbWMgCT0gbW1jOwogCWhvc3QtPnBkZXYJPSBwZGV2OwpAQCAtMTI4MiwxMSArMTU5NSwxMiBAQAogCQlob3N0LT5jbGtfZGl2CT0gMjsKIAl9CiAKLQlob3N0LT5kb2RtYQkJPSAwOwogCWhvc3QtPmNvbXBsZXRlX3doYXQgCT0gQ09NUExFVElPTl9OT05FOwogCWhvc3QtPnBpb19hY3RpdmUgCT0gWEZFUl9OT05FOwogCi0JaG9zdC0+ZG1hCQk9IFMzQ01DSV9ETUE7CisjaWZkZWYgQ09ORklHX01NQ19TM0NfUElPRE1BCisJaG9zdC0+ZG9kbWEJCT0gaG9zdC0+cGRhdGEtPmRtYTsKKyNlbmRpZgogCiAJaG9zdC0+bWVtID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKIAlpZiAoIWhvc3QtPm1lbSkgewpAQCAtMTI5NCwxOSArMTYwOCwxOSBAQAogCQkJImZhaWxlZCB0byBnZXQgaW8gbWVtb3J5IHJlZ2lvbiByZXNvdWNlLlxuIik7CiAKIAkJcmV0ID0gLUVOT0VOVDsKLQkJZ290byBwcm9iZV9mcmVlX2hvc3Q7CisJCWdvdG8gcHJvYmVfZnJlZV9ncGlvOwogCX0KIAogCWhvc3QtPm1lbSA9IHJlcXVlc3RfbWVtX3JlZ2lvbihob3N0LT5tZW0tPnN0YXJ0LAotCQkJCSAgICAgICBSRVNTSVpFKGhvc3QtPm1lbSksIHBkZXYtPm5hbWUpOworCQkJCSAgICAgICByZXNvdXJjZV9zaXplKGhvc3QtPm1lbSksIHBkZXYtPm5hbWUpOwogCiAJaWYgKCFob3N0LT5tZW0pIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIHJlcXVlc3QgaW8gbWVtb3J5IHJlZ2lvbi5cbiIpOwogCQlyZXQgPSAtRU5PRU5UOwotCQlnb3RvIHByb2JlX2ZyZWVfaG9zdDsKKwkJZ290byBwcm9iZV9mcmVlX2dwaW87CiAJfQogCi0JaG9zdC0+YmFzZSA9IGlvcmVtYXAoaG9zdC0+bWVtLT5zdGFydCwgUkVTU0laRShob3N0LT5tZW0pKTsKKwlob3N0LT5iYXNlID0gaW9yZW1hcChob3N0LT5tZW0tPnN0YXJ0LCByZXNvdXJjZV9zaXplKGhvc3QtPm1lbSkpOwogCWlmICghaG9zdC0+YmFzZSkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gaW9yZW1hcCgpIGlvIG1lbW9yeSByZWdpb24uXG4iKTsKIAkJcmV0ID0gLUVJTlZBTDsKQEAgLTEzMzEsMzEgKzE2NDUsNjAgQEAKIAkgKiBlbnN1cmUgd2UgZG9uJ3QgbG9jayB0aGUgc3lzdGVtIHdpdGggdW4tc2VydmljZWFibGUgcmVxdWVzdHMuICovCiAKIAlkaXNhYmxlX2lycShob3N0LT5pcnEpOworCWhvc3QtPmlycV9zdGF0ZSA9IGZhbHNlOwogCi0JaG9zdC0+aXJxX2NkID0gczNjMjQxMF9ncGlvX2dldGlycShob3N0LT5wZGF0YS0+Z3Bpb19kZXRlY3QpOwotCi0JaWYgKGhvc3QtPmlycV9jZCA+PSAwKSB7Ci0JCWlmIChyZXF1ZXN0X2lycShob3N0LT5pcnFfY2QsIHMzY21jaV9pcnFfY2QsCi0JCQkJSVJRRl9UUklHR0VSX1JJU0lORyB8IElSUUZfVFJJR0dFUl9GQUxMSU5HLAotCQkJCURSSVZFUl9OQU1FLCBob3N0KSkgewotCQkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2FuJ3QgZ2V0IGNhcmQgZGV0ZWN0IGlycS5cbiIpOwotCQkJcmV0ID0gLUVOT0VOVDsKKwlpZiAoIWhvc3QtPnBkYXRhLT5ub19kZXRlY3QpIHsKKwkJcmV0ID0gZ3Bpb19yZXF1ZXN0KGhvc3QtPnBkYXRhLT5ncGlvX2RldGVjdCwgInMzY21jaSBkZXRlY3QiKTsKKwkJaWYgKHJldCkgeworCQkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGdldCBkZXRlY3QgZ3Bpb1xuIik7CiAJCQlnb3RvIHByb2JlX2ZyZWVfaXJxOwogCQl9Ci0JfSBlbHNlIHsKLQkJZGV2X3dhcm4oJnBkZXYtPmRldiwgImhvc3QgZGV0ZWN0IGhhcyBubyBpcnEgYXZhaWxhYmxlXG4iKTsKLQkJczNjMjQxMF9ncGlvX2NmZ3Bpbihob3N0LT5wZGF0YS0+Z3Bpb19kZXRlY3QsCi0JCQkJICAgIFMzQzI0MTBfR1BJT19JTlBVVCk7CisKKwkJaG9zdC0+aXJxX2NkID0gczNjMjQxMF9ncGlvX2dldGlycShob3N0LT5wZGF0YS0+Z3Bpb19kZXRlY3QpOworCisJCWlmIChob3N0LT5pcnFfY2QgPj0gMCkgeworCQkJaWYgKHJlcXVlc3RfaXJxKGhvc3QtPmlycV9jZCwgczNjbWNpX2lycV9jZCwKKwkJCQkJSVJRRl9UUklHR0VSX1JJU0lORyB8CisJCQkJCUlSUUZfVFJJR0dFUl9GQUxMSU5HLAorCQkJCQlEUklWRVJfTkFNRSwgaG9zdCkpIHsKKwkJCQlkZXZfZXJyKCZwZGV2LT5kZXYsCisJCQkJCSJjYW4ndCBnZXQgY2FyZCBkZXRlY3QgaXJxLlxuIik7CisJCQkJcmV0ID0gLUVOT0VOVDsKKwkJCQlnb3RvIHByb2JlX2ZyZWVfZ3Bpb19jZDsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWRldl93YXJuKCZwZGV2LT5kZXYsCisJCQkJICJob3N0IGRldGVjdCBoYXMgbm8gaXJxIGF2YWlsYWJsZVxuIik7CisJCQlncGlvX2RpcmVjdGlvbl9pbnB1dChob3N0LT5wZGF0YS0+Z3Bpb19kZXRlY3QpOworCQl9CisJfSBlbHNlCisJCWhvc3QtPmlycV9jZCA9IC0xOworCisJaWYgKCFob3N0LT5wZGF0YS0+bm9fd3Byb3RlY3QpIHsKKwkJcmV0ID0gZ3Bpb19yZXF1ZXN0KGhvc3QtPnBkYXRhLT5ncGlvX3dwcm90ZWN0LCAiczNjbWNpIHdwIik7CisJCWlmIChyZXQpIHsKKwkJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBnZXQgd3JpdGVwcm90ZWN0XG4iKTsKKwkJCWdvdG8gcHJvYmVfZnJlZV9pcnFfY2Q7CisJCX0KKworCQlncGlvX2RpcmVjdGlvbl9pbnB1dChob3N0LT5wZGF0YS0+Z3Bpb193cHJvdGVjdCk7CiAJfQogCi0JaWYgKGhvc3QtPnBkYXRhLT5ncGlvX3dwcm90ZWN0KQotCQlzM2MyNDEwX2dwaW9fY2ZncGluKGhvc3QtPnBkYXRhLT5ncGlvX3dwcm90ZWN0LAotCQkJCSAgICBTM0MyNDEwX0dQSU9fSU5QVVQpOworCS8qIGRlcGVuZGluZyBvbiB0aGUgZG1hIHN0YXRlLCBnZXQgYSBkbWEgY2hhbm5lbCB0byB1c2UuICovCiAKLQlpZiAoczNjMjQxMF9kbWFfcmVxdWVzdChTM0NNQ0lfRE1BLCAmczNjbWNpX2RtYV9jbGllbnQsIE5VTEwpIDwgMCkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJ1bmFibGUgdG8gZ2V0IERNQSBjaGFubmVsLlxuIik7Ci0JCXJldCA9IC1FQlVTWTsKLQkJZ290byBwcm9iZV9mcmVlX2lycV9jZDsKKwlpZiAoczNjbWNpX2hvc3RfdXNlZG1hKGhvc3QpKSB7CisJCWhvc3QtPmRtYSA9IHMzYzI0MTBfZG1hX3JlcXVlc3QoRE1BQ0hfU0RJLCAmczNjbWNpX2RtYV9jbGllbnQsCisJCQkJCQlob3N0KTsKKwkJaWYgKGhvc3QtPmRtYSA8IDApIHsKKwkJCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbm5vdCBnZXQgRE1BIGNoYW5uZWwuXG4iKTsKKwkJCWlmICghczNjbWNpX2hvc3RfY2FucGlvKCkpIHsKKwkJCQlyZXQgPSAtRUJVU1k7CisJCQkJZ290byBwcm9iZV9mcmVlX2dwaW9fd3A7CisJCQl9IGVsc2UgeworCQkJCWRldl93YXJuKCZwZGV2LT5kZXYsICJmYWxsaW5nIGJhY2sgdG8gUElPLlxuIik7CisJCQkJaG9zdC0+ZG9kbWEgPSAwOworCQkJfQorCQl9CiAJfQogCiAJaG9zdC0+Y2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAic2RpIik7CkBAIC0xMzYzLDcgKzE3MDYsNyBAQAogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gZmluZCBjbG9jayBzb3VyY2UuXG4iKTsKIAkJcmV0ID0gUFRSX0VSUihob3N0LT5jbGspOwogCQlob3N0LT5jbGsgPSBOVUxMOwotCQlnb3RvIHByb2JlX2ZyZWVfaG9zdDsKKwkJZ290byBwcm9iZV9mcmVlX2RtYTsKIAl9CiAKIAlyZXQgPSBjbGtfZW5hYmxlKGhvc3QtPmNsayk7CkBAIC0xMzc2LDcgKzE3MTksMTEgQEAKIAogCW1tYy0+b3BzIAk9ICZzM2NtY2lfb3BzOwogCW1tYy0+b2NyX2F2YWlsCT0gTU1DX1ZERF8zMl8zMyB8IE1NQ19WRERfMzNfMzQ7CisjaWZkZWYgQ09ORklHX01NQ19TM0NfSFdfU0RJT19JUlEKKwltbWMtPmNhcHMJPSBNTUNfQ0FQXzRfQklUX0RBVEEgfCBNTUNfQ0FQX1NESU9fSVJROworI2Vsc2UKIAltbWMtPmNhcHMJPSBNTUNfQ0FQXzRfQklUX0RBVEE7CisjZW5kaWYKIAltbWMtPmZfbWluIAk9IGhvc3QtPmNsa19yYXRlIC8gKGhvc3QtPmNsa19kaXYgKiAyNTYpOwogCW1tYy0+Zl9tYXggCT0gaG9zdC0+Y2xrX3JhdGUgLyBob3N0LT5jbGtfZGl2OwogCkBAIC0xNDA4LDggKzE3NTUsMTIgQEAKIAkJZ290byBmcmVlX2NwdWZyZXE7CiAJfQogCisJczNjbWNpX2RlYnVnZnNfYXR0YWNoKGhvc3QpOworCiAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgbW1jKTsKLQlkZXZfaW5mbygmcGRldi0+ZGV2LCAiaW5pdGlhbGlzYXRpb24gZG9uZS5cbiIpOworCWRldl9pbmZvKCZwZGV2LT5kZXYsICIlcyAtIHVzaW5nICVzLCAlcyBTRElPIElSUVxuIiwgbW1jX2hvc3RuYW1lKG1tYyksCisJCSBzM2NtY2lfaG9zdF91c2VkbWEoaG9zdCkgPyAiZG1hIiA6ICJwaW8iLAorCQkgbW1jLT5jYXBzICYgTU1DX0NBUF9TRElPX0lSUSA/ICJodyIgOiAic3ciKTsKIAogCXJldHVybiAwOwogCkBAIC0xNDIyLDYgKzE3NzMsMTggQEAKICBjbGtfZnJlZToKIAljbGtfcHV0KGhvc3QtPmNsayk7CiAKKyBwcm9iZV9mcmVlX2RtYToKKwlpZiAoczNjbWNpX2hvc3RfdXNlZG1hKGhvc3QpKQorCQlzM2MyNDEwX2RtYV9mcmVlKGhvc3QtPmRtYSwgJnMzY21jaV9kbWFfY2xpZW50KTsKKworIHByb2JlX2ZyZWVfZ3Bpb193cDoKKwlpZiAoIWhvc3QtPnBkYXRhLT5ub193cHJvdGVjdCkKKwkJZ3Bpb19mcmVlKGhvc3QtPnBkYXRhLT5ncGlvX3dwcm90ZWN0KTsKKworIHByb2JlX2ZyZWVfZ3Bpb19jZDoKKwlpZiAoIWhvc3QtPnBkYXRhLT5ub19kZXRlY3QpCisJCWdwaW9fZnJlZShob3N0LT5wZGF0YS0+Z3Bpb19kZXRlY3QpOworCiAgcHJvYmVfZnJlZV9pcnFfY2Q6CiAJaWYgKGhvc3QtPmlycV9jZCA+PSAwKQogCQlmcmVlX2lycShob3N0LT5pcnFfY2QsIGhvc3QpOwpAQCAtMTQzMywxMCArMTc5NiwxNSBAQAogCWlvdW5tYXAoaG9zdC0+YmFzZSk7CiAKICBwcm9iZV9mcmVlX21lbV9yZWdpb246Ci0JcmVsZWFzZV9tZW1fcmVnaW9uKGhvc3QtPm1lbS0+c3RhcnQsIFJFU1NJWkUoaG9zdC0+bWVtKSk7CisJcmVsZWFzZV9tZW1fcmVnaW9uKGhvc3QtPm1lbS0+c3RhcnQsIHJlc291cmNlX3NpemUoaG9zdC0+bWVtKSk7CisKKyBwcm9iZV9mcmVlX2dwaW86CisJZm9yIChpID0gUzNDMjQxMF9HUEUoNSk7IGkgPD0gUzNDMjQxMF9HUEUoMTApOyBpKyspCisJCWdwaW9fZnJlZShpKTsKIAogIHByb2JlX2ZyZWVfaG9zdDoKIAltbWNfZnJlZV9ob3N0KG1tYyk7CisKICBwcm9iZV9vdXQ6CiAJcmV0dXJuIHJldDsKIH0KQEAgLTE0NDksNiArMTgxNyw3IEBACiAJaWYgKGhvc3QtPmlycV9jZCA+PSAwKQogCQlmcmVlX2lycShob3N0LT5pcnFfY2QsIGhvc3QpOwogCisJczNjbWNpX2RlYnVnZnNfcmVtb3ZlKGhvc3QpOwogCXMzY21jaV9jcHVmcmVxX2RlcmVnaXN0ZXIoaG9zdCk7CiAJbW1jX3JlbW92ZV9ob3N0KG1tYyk7CiAJY2xrX2Rpc2FibGUoaG9zdC0+Y2xrKTsKQEAgLTE0NTgsMTA0ICsxODI3LDEwMiBAQAogewogCXN0cnVjdCBtbWNfaG9zdAkJKm1tYyAgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlzdHJ1Y3QgczNjbWNpX2hvc3QJKmhvc3QgPSBtbWNfcHJpdihtbWMpOworCXN0cnVjdCBzM2MyNHh4X21jaV9wZGF0YSAqcGQgPSBob3N0LT5wZGF0YTsKKwlpbnQgaTsKIAogCXMzY21jaV9zaHV0ZG93bihwZGV2KTsKIAogCWNsa19wdXQoaG9zdC0+Y2xrKTsKIAogCXRhc2tsZXRfZGlzYWJsZSgmaG9zdC0+cGlvX3Rhc2tsZXQpOwotCXMzYzI0MTBfZG1hX2ZyZWUoUzNDTUNJX0RNQSwgJnMzY21jaV9kbWFfY2xpZW50KTsKKworCWlmIChzM2NtY2lfaG9zdF91c2VkbWEoaG9zdCkpCisJCXMzYzI0MTBfZG1hX2ZyZWUoaG9zdC0+ZG1hLCAmczNjbWNpX2RtYV9jbGllbnQpOwogCiAJZnJlZV9pcnEoaG9zdC0+aXJxLCBob3N0KTsKIAorCWlmICghcGQtPm5vX3dwcm90ZWN0KQorCQlncGlvX2ZyZWUocGQtPmdwaW9fd3Byb3RlY3QpOworCisJaWYgKCFwZC0+bm9fZGV0ZWN0KQorCQlncGlvX2ZyZWUocGQtPmdwaW9fZGV0ZWN0KTsKKworCWZvciAoaSA9IFMzQzI0MTBfR1BFKDUpOyBpIDw9IFMzQzI0MTBfR1BFKDEwKTsgaSsrKQorCQlncGlvX2ZyZWUoaSk7CisKKwogCWlvdW5tYXAoaG9zdC0+YmFzZSk7Ci0JcmVsZWFzZV9tZW1fcmVnaW9uKGhvc3QtPm1lbS0+c3RhcnQsIFJFU1NJWkUoaG9zdC0+bWVtKSk7CisJcmVsZWFzZV9tZW1fcmVnaW9uKGhvc3QtPm1lbS0+c3RhcnQsIHJlc291cmNlX3NpemUoaG9zdC0+bWVtKSk7CiAKIAltbWNfZnJlZV9ob3N0KG1tYyk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgX19kZXZpbml0IHMzY21jaV8yNDEwX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKLXsKLQlyZXR1cm4gczNjbWNpX3Byb2JlKGRldiwgMCk7Ci19CitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZV9pZCBzM2NtY2lfZHJpdmVyX2lkc1tdID0geworCXsKKwkJLm5hbWUJPSAiczNjMjQxMC1zZGkiLAorCQkuZHJpdmVyX2RhdGEJPSAwLAorCX0sIHsKKwkJLm5hbWUJPSAiczNjMjQxMi1zZGkiLAorCQkuZHJpdmVyX2RhdGEJPSAxLAorCX0sIHsKKwkJLm5hbWUJPSAiczNjMjQ0MC1zZGkiLAorCQkuZHJpdmVyX2RhdGEJPSAxLAorCX0sCisJeyB9Cit9OwogCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBzM2NtY2lfMjQxMl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCi17Ci0JcmV0dXJuIHMzY21jaV9wcm9iZShkZXYsIDEpOwotfQorTU9EVUxFX0RFVklDRV9UQUJMRShwbGF0Zm9ybSwgczNjbWNpX2RyaXZlcl9pZHMpOwogCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBzM2NtY2lfMjQ0MF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCi17Ci0JcmV0dXJuIHMzY21jaV9wcm9iZShkZXYsIDEpOwotfQogCiAjaWZkZWYgQ09ORklHX1BNCiAKLXN0YXRpYyBpbnQgczNjbWNpX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitzdGF0aWMgaW50IHMzY21jaV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgbW1jX2hvc3QgKm1tYyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IG1tY19ob3N0ICptbWMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YSh0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KSk7CisJc3RydWN0IHBtX21lc3NhZ2UgZXZlbnQgPSB7IFBNX0VWRU5UX1NVU1BFTkQgfTsKIAotCXJldHVybiAgbW1jX3N1c3BlbmRfaG9zdChtbWMsIHN0YXRlKTsKKwlyZXR1cm4gbW1jX3N1c3BlbmRfaG9zdChtbWMsIGV2ZW50KTsKIH0KIAotc3RhdGljIGludCBzM2NtY2lfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgczNjbWNpX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IG1tY19ob3N0ICptbWMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBtbWNfaG9zdCAqbW1jID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEodG9fcGxhdGZvcm1fZGV2aWNlKGRldikpOwogCiAJcmV0dXJuIG1tY19yZXN1bWVfaG9zdChtbWMpOwogfQogCitzdGF0aWMgc3RydWN0IGRldl9wbV9vcHMgczNjbWNpX3BtID0geworCS5zdXNwZW5kCT0gczNjbWNpX3N1c3BlbmQsCisJLnJlc3VtZQkJPSBzM2NtY2lfcmVzdW1lLAorfTsKKworI2RlZmluZSBzM2NtY2lfcG1fb3BzICZzM2NtY2lfcG0KICNlbHNlIC8qIENPTkZJR19QTSAqLwotI2RlZmluZSBzM2NtY2lfc3VzcGVuZCBOVUxMCi0jZGVmaW5lIHMzY21jaV9yZXN1bWUgTlVMTAorI2RlZmluZSBzM2NtY2lfcG1fb3BzIE5VTEwKICNlbmRpZiAvKiBDT05GSUdfUE0gKi8KIAogCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzM2NtY2lfMjQxMF9kcml2ZXIgPSB7Ci0JLmRyaXZlci5uYW1lCT0gInMzYzI0MTAtc2RpIiwKLQkuZHJpdmVyLm93bmVyCT0gVEhJU19NT0RVTEUsCi0JLnByb2JlCQk9IHMzY21jaV8yNDEwX3Byb2JlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgczNjbWNpX2RyaXZlciA9IHsKKwkuZHJpdmVyCT0geworCQkubmFtZQk9ICJzM2Mtc2RpIiwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJCS5wbQk9IHMzY21jaV9wbV9vcHMsCisJfSwKKwkuaWRfdGFibGUJPSBzM2NtY2lfZHJpdmVyX2lkcywKKwkucHJvYmUJCT0gczNjbWNpX3Byb2JlLAogCS5yZW1vdmUJCT0gX19kZXZleGl0X3AoczNjbWNpX3JlbW92ZSksCiAJLnNodXRkb3duCT0gczNjbWNpX3NodXRkb3duLAotCS5zdXNwZW5kCT0gczNjbWNpX3N1c3BlbmQsCi0JLnJlc3VtZQkJPSBzM2NtY2lfcmVzdW1lLAogfTsKIAotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgczNjbWNpXzI0MTJfZHJpdmVyID0gewotCS5kcml2ZXIubmFtZQk9ICJzM2MyNDEyLXNkaSIsCi0JLmRyaXZlci5vd25lcgk9IFRISVNfTU9EVUxFLAotCS5wcm9iZQkJPSBzM2NtY2lfMjQxMl9wcm9iZSwKLQkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHMzY21jaV9yZW1vdmUpLAotCS5zaHV0ZG93bgk9IHMzY21jaV9zaHV0ZG93biwKLQkuc3VzcGVuZAk9IHMzY21jaV9zdXNwZW5kLAotCS5yZXN1bWUJCT0gczNjbWNpX3Jlc3VtZSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHMzY21jaV8yNDQwX2RyaXZlciA9IHsKLQkuZHJpdmVyLm5hbWUJPSAiczNjMjQ0MC1zZGkiLAotCS5kcml2ZXIub3duZXIJPSBUSElTX01PRFVMRSwKLQkucHJvYmUJCT0gczNjbWNpXzI0NDBfcHJvYmUsCi0JLnJlbW92ZQkJPSBfX2RldmV4aXRfcChzM2NtY2lfcmVtb3ZlKSwKLQkuc2h1dGRvd24JPSBzM2NtY2lfc2h1dGRvd24sCi0JLnN1c3BlbmQJPSBzM2NtY2lfc3VzcGVuZCwKLQkucmVzdW1lCQk9IHMzY21jaV9yZXN1bWUsCi19OwotCi0KIHN0YXRpYyBpbnQgX19pbml0IHMzY21jaV9pbml0KHZvaWQpCiB7Ci0JcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZzM2NtY2lfMjQxMF9kcml2ZXIpOwotCXBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmczNjbWNpXzI0MTJfZHJpdmVyKTsKLQlwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnMzY21jaV8yNDQwX2RyaXZlcik7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmczNjbWNpX2RyaXZlcik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBzM2NtY2lfZXhpdCh2b2lkKQogewotCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZzM2NtY2lfMjQxMF9kcml2ZXIpOwotCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZzM2NtY2lfMjQxMl9kcml2ZXIpOwotCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZzM2NtY2lfMjQ0MF9kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZzM2NtY2lfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQoczNjbWNpX2luaXQpOwpAQCAtMTU2NCw2ICsxOTMxLDMgQEAKIE1PRFVMRV9ERVNDUklQVElPTigiU2Ftc3VuZyBTM0MgTU1DL1NEIENhcmQgSW50ZXJmYWNlIGRyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwogTU9EVUxFX0FVVEhPUigiVGhvbWFzIEtsZWZmZWwgPHRrQG1haW50ZWNoLmRlPiwgQmVuIERvb2tzIDxiZW4tbGludXhAZmx1ZmYub3JnPiIpOwotTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTpzM2MyNDEwLXNkaSIpOwotTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTpzM2MyNDEyLXNkaSIpOwotTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTpzM2MyNDQwLXNkaSIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9zM2NtY2kuaCBiL2RyaXZlcnMvbW1jL2hvc3QvczNjbWNpLmgKaW5kZXggY2ExYmEzZC4uYzc2YjUzZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9zM2NtY2kuaAorKysgYi9kcml2ZXJzL21tYy9ob3N0L3MzY21jaS5oCkBAIC04LDkgKzgsNiBAQAogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKi8KIAotLyogRklYTUU6IERNQSBSZXNvdXJjZSBtYW5hZ2VtZW50ID8hICovCi0jZGVmaW5lIFMzQ01DSV9ETUEgMAotCiBlbnVtIHMzY21jaV93YWl0Zm9yIHsKIAlDT01QTEVUSU9OX05PTkUsCiAJQ09NUExFVElPTl9GSU5BTElaRSwKQEAgLTQyLDYgKzM5LDExIEBACiAJaW50CQkJZG9kbWE7CiAJaW50CQkJZG1hdG9nbzsKIAorCWJvb2wJCQlpcnFfZGlzYWJsZWQ7CisJYm9vbAkJCWlycV9lbmFibGVkOworCWJvb2wJCQlpcnFfc3RhdGU7CisJaW50CQkJc2Rpb19pcnFlbjsKKwogCXN0cnVjdCBtbWNfcmVxdWVzdAkqbXJxOwogCWludAkJCWNtZF9pc19zdG9wOwogCkBAIC02OCw2ICs3MCwxMiBAQAogCXVuc2lnbmVkIGludAkJY2NudCwgZGNudDsKIAlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QJcGlvX3Rhc2tsZXQ7CiAKKyNpZmRlZiBDT05GSUdfREVCVUdfRlMKKwlzdHJ1Y3QgZGVudHJ5CQkqZGVidWdfcm9vdDsKKwlzdHJ1Y3QgZGVudHJ5CQkqZGVidWdfc3RhdGU7CisJc3RydWN0IGRlbnRyeQkJKmRlYnVnX3JlZ3M7CisjZW5kaWYKKwogI2lmZGVmIENPTkZJR19DUFVfRlJFUQogCXN0cnVjdCBub3RpZmllcl9ibG9jawlmcmVxX3RyYW5zaXRpb247CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL2RldmljZXMvbTI1cDgwLmMgYi9kcml2ZXJzL210ZC9kZXZpY2VzL20yNXA4MC5jCmluZGV4IDM3OWMzMTYuLjRjMTkyNjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL2RldmljZXMvbTI1cDgwLmMKKysrIGIvZHJpdmVycy9tdGQvZGV2aWNlcy9tMjVwODAuYwpAQCAtMjEsNiArMjEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvbWF0aDY0Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KIAogI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvZGV2aWNlcy9zc3QyNWwuYyBiL2RyaXZlcnMvbXRkL2RldmljZXMvc3N0MjVsLmMKaW5kZXggYzJiYWYzMy4uMGExMTcyMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvZGV2aWNlcy9zc3QyNWwuYworKysgYi9kcml2ZXJzL210ZC9kZXZpY2VzL3NzdDI1bC5jCkBAIC0yMCw2ICsyMCw3IEBACiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogCiAjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tdGRfYmxrZGV2cy5jIGIvZHJpdmVycy9tdGQvbXRkX2Jsa2RldnMuYwppbmRleCAwYWNiZjRmLi44Y2ExN2EzIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tdGRfYmxrZGV2cy5jCisrKyBiL2RyaXZlcnMvbXRkL210ZF9ibGtkZXZzLmMKQEAgLTMyLDE0ICszMiw2IEBACiAJc3BpbmxvY2tfdCBxdWV1ZV9sb2NrOwogfTsKIAotc3RhdGljIGludCBibGt0cmFuc19kaXNjYXJkX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsCi0JCQkJICAgIHN0cnVjdCByZXF1ZXN0ICpyZXEpCi17Ci0JcmVxLT5jbWRfdHlwZSA9IFJFUV9UWVBFX0xJTlVYX0JMT0NLOwotCXJlcS0+Y21kWzBdID0gUkVRX0xCX09QX0RJU0NBUkQ7Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbnQgZG9fYmxrdHJhbnNfcmVxdWVzdChzdHJ1Y3QgbXRkX2Jsa3RyYW5zX29wcyAqdHIsCiAJCQkgICAgICAgc3RydWN0IG10ZF9ibGt0cmFuc19kZXYgKmRldiwKIAkJCSAgICAgICBzdHJ1Y3QgcmVxdWVzdCAqcmVxKQpAQCAtNTIsMTAgKzQ0LDYgQEAKIAogCWJ1ZiA9IHJlcS0+YnVmZmVyOwogCi0JaWYgKHJlcS0+Y21kX3R5cGUgPT0gUkVRX1RZUEVfTElOVVhfQkxPQ0sgJiYKLQkgICAgcmVxLT5jbWRbMF0gPT0gUkVRX0xCX09QX0RJU0NBUkQpCi0JCXJldHVybiB0ci0+ZGlzY2FyZChkZXYsIGJsb2NrLCBuc2VjdCk7Ci0KIAlpZiAoIWJsa19mc19yZXF1ZXN0KHJlcSkpCiAJCXJldHVybiAtRUlPOwogCkBAIC02Myw2ICs1MSw5IEBACiAJICAgIGdldF9jYXBhY2l0eShyZXEtPnJxX2Rpc2spKQogCQlyZXR1cm4gLUVJTzsKIAorCWlmIChibGtfZGlzY2FyZF9ycShyZXEpKQorCQlyZXR1cm4gdHItPmRpc2NhcmQoZGV2LCBibG9jaywgbnNlY3QpOworCiAJc3dpdGNoKHJxX2RhdGFfZGlyKHJlcSkpIHsKIAljYXNlIFJFQUQ6CiAJCWZvciAoOyBuc2VjdCA+IDA7IG5zZWN0LS0sIGJsb2NrKyssIGJ1ZiArPSB0ci0+Ymxrc2l6ZSkKQEAgLTM4MCw4ICszNzEsOCBAQAogCXRyLT5ibGtjb3JlX3ByaXYtPnJxLT5xdWV1ZWRhdGEgPSB0cjsKIAlibGtfcXVldWVfbG9naWNhbF9ibG9ja19zaXplKHRyLT5ibGtjb3JlX3ByaXYtPnJxLCB0ci0+Ymxrc2l6ZSk7CiAJaWYgKHRyLT5kaXNjYXJkKQotCQlibGtfcXVldWVfc2V0X2Rpc2NhcmQodHItPmJsa2NvcmVfcHJpdi0+cnEsCi0JCQkJICAgICAgYmxrdHJhbnNfZGlzY2FyZF9yZXF1ZXN0KTsKKwkJcXVldWVfZmxhZ19zZXRfdW5sb2NrZWQoUVVFVUVfRkxBR19ESVNDQVJELAorCQkJCQl0ci0+YmxrY29yZV9wcml2LT5ycSk7CiAKIAl0ci0+Ymxrc2hpZnQgPSBmZnModHItPmJsa3NpemUpIC0gMTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvdWJpL2J1aWxkLmMgYi9kcml2ZXJzL210ZC91YmkvYnVpbGQuYwppbmRleCBlMWY3ZDBhLi4xNGNlYzA0IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC91YmkvYnVpbGQuYworKysgYi9kcml2ZXJzL210ZC91YmkvYnVpbGQuYwpAQCAtNDIsNiArNDIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2xvZzIuaD4KICNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CiAjaW5jbHVkZSA8bGludXgvcmVib290Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSAidWJpLmgiCiAKIC8qIE1heGltdW0gbGVuZ3RoIG9mIHRoZSAnbXRkPScgcGFyYW1ldGVyICovCkBAIC0xMjU3LDcgKzEyNTgsNyBAQAogCXVuc2lnbmVkIGxvbmcgcmVzdWx0OwogCiAJcmVzdWx0ID0gc2ltcGxlX3N0cnRvdWwoc3RyLCAmZW5kcCwgMCk7Ci0JaWYgKHN0ciA9PSBlbmRwIHx8IHJlc3VsdCA8IDApIHsKKwlpZiAoc3RyID09IGVuZHAgfHwgcmVzdWx0ID49IElOVF9NQVgpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJVQkkgZXJyb3I6IGluY29ycmVjdCBieXRlcyBjb3VudDogXCIlc1wiXG4iLAogCQkgICAgICAgc3RyKTsKIAkJcmV0dXJuIC1FSU5WQUw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC91Ymkvc2Nhbi5jIGIvZHJpdmVycy9tdGQvdWJpL3NjYW4uYwppbmRleCBlNzE2MWFkLi45MGFmNjFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC91Ymkvc2Nhbi5jCisrKyBiL2RyaXZlcnMvbXRkL3ViaS9zY2FuLmMKQEAgLTc5NCwxNiArNzk0LDE1IEBACiAJCSAqIG51bWJlci4KIAkJICovCiAJCWltYWdlX3NlcSA9IGJlMzJfdG9fY3B1KGVjaC0+aW1hZ2Vfc2VxKTsKLQkJaWYgKCFzaS0+aW1hZ2Vfc2VxX3NldCkgeworCQlpZiAoIXViaS0+aW1hZ2Vfc2VxICYmIGltYWdlX3NlcSkKIAkJCXViaS0+aW1hZ2Vfc2VxID0gaW1hZ2Vfc2VxOwotCQkJc2ktPmltYWdlX3NlcV9zZXQgPSAxOwotCQl9IGVsc2UgaWYgKHViaS0+aW1hZ2Vfc2VxICYmIHViaS0+aW1hZ2Vfc2VxICE9IGltYWdlX3NlcSkgeworCQlpZiAodWJpLT5pbWFnZV9zZXEgJiYgaW1hZ2Vfc2VxICYmCisJCSAgICB1YmktPmltYWdlX3NlcSAhPSBpbWFnZV9zZXEpIHsKIAkJCXViaV9lcnIoImJhZCBpbWFnZSBzZXF1ZW5jZSBudW1iZXIgJWQgaW4gUEVCICVkLCAiCiAJCQkJImV4cGVjdGVkICVkIiwgaW1hZ2Vfc2VxLCBwbnVtLCB1YmktPmltYWdlX3NlcSk7CiAJCQl1YmlfZGJnX2R1bXBfZWNfaGRyKGVjaCk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQotCiAJfQogCiAJLyogT0ssIHdlJ3ZlIGRvbmUgd2l0aCB0aGUgRUMgaGVhZGVyLCBsZXQncyBsb29rIGF0IHRoZSBWSUQgaGVhZGVyICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC91Ymkvc2Nhbi5oIGIvZHJpdmVycy9tdGQvdWJpL3NjYW4uaAppbmRleCBiYWIzMTY5Li5mZjE3OWFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC91Ymkvc2Nhbi5oCisrKyBiL2RyaXZlcnMvbXRkL3ViaS9zY2FuLmgKQEAgLTEwMyw3ICsxMDMsNiBAQAogICogQGVjX3N1bTogYSB0ZW1wb3JhcnkgdmFyaWFibGUgdXNlZCB3aGVuIGNhbGN1bGF0aW5nIEBtZWFuX2VjCiAgKiBAZWNfY291bnQ6IGEgdGVtcG9yYXJ5IHZhcmlhYmxlIHVzZWQgd2hlbiBjYWxjdWxhdGluZyBAbWVhbl9lYwogICogQGNvcnJfY291bnQ6IGNvdW50IG9mIGNvcnJ1cHRlZCBQRUJzCi0gKiBAaW1hZ2Vfc2VxX3NldDogaW5kaWNhdGVzIEB1YmktPmltYWdlX3NlcSBpcyBrbm93bgogICoKICAqIFRoaXMgZGF0YSBzdHJ1Y3R1cmUgY29udGFpbnMgdGhlIHJlc3VsdCBvZiBzY2FubmluZyBhbmQgbWF5IGJlIHVzZWQgYnkgb3RoZXIKICAqIFVCSSBzdWItc3lzdGVtcyB0byBidWlsZCBmaW5hbCBVQkkgZGF0YSBzdHJ1Y3R1cmVzLCBmdXJ0aGVyIGVycm9yLXJlY292ZXJ5CkBAIC0xMjcsNyArMTI2LDYgQEAKIAl1aW50NjRfdCBlY19zdW07CiAJaW50IGVjX2NvdW50OwogCWludCBjb3JyX2NvdW50OwotCWludCBpbWFnZV9zZXFfc2V0OwogfTsKIAogc3RydWN0IHViaV9kZXZpY2U7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfc3lzZnMuYyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9zeXNmcy5jCmluZGV4IGZmNDQ5ZGUuLjg3NjJhMjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9zeXNmcy5jCisrKyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9zeXNmcy5jCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jcmlzL2V0aF92MTAuYyBiL2RyaXZlcnMvbmV0L2NyaXMvZXRoX3YxMC5jCmluZGV4IDE1YzAxOTUuLmEyNGJlMzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2NyaXMvZXRoX3YxMC5jCisrKyBiL2RyaXZlcnMvbmV0L2NyaXMvZXRoX3YxMC5jCkBAIC03NjgsMTAgKzc2OCwyNCBAQAogCiAJZTEwMF9zZXRfbWRpb19yZWcoZGV2LCBucC0+bWlpX2lmLnBoeV9pZCwgTUlJX0FEVkVSVElTRSwgZGF0YSk7CiAKLQkvKiBSZW5lZ290aWF0ZSB3aXRoIGxpbmsgcGFydG5lciAqLworCWRhdGEgPSBlMTAwX2dldF9tZGlvX3JlZyhkZXYsIG5wLT5taWlfaWYucGh5X2lkLCBNSUlfQk1DUik7CiAJaWYgKGF1dG9uZWdfbm9ybWFsKSB7Ci0JICBkYXRhID0gZTEwMF9nZXRfbWRpb19yZWcoZGV2LCBucC0+bWlpX2lmLnBoeV9pZCwgTUlJX0JNQ1IpOwotCWRhdGEgfD0gQk1DUl9BTkVOQUJMRSB8IEJNQ1JfQU5SRVNUQVJUOworCQkvKiBSZW5lZ290aWF0ZSB3aXRoIGxpbmsgcGFydG5lciAqLworCQlkYXRhIHw9IEJNQ1JfQU5FTkFCTEUgfCBCTUNSX0FOUkVTVEFSVDsKKwl9IGVsc2UgeworCQkvKiBEb24ndCBuZWdvdGlhdGUgc3BlZWQgb3IgZHVwbGV4ICovCisJCWRhdGEgJj0gfihCTUNSX0FORU5BQkxFIHwgQk1DUl9BTlJFU1RBUlQpOworCisJCS8qIFNldCBzcGVlZCBhbmQgZHVwbGV4IHN0YXRpYyAqLworCQlpZiAoY3VycmVudF9zcGVlZF9zZWxlY3Rpb24gPT0gMTApCisJCQlkYXRhICY9IH5CTUNSX1NQRUVEMTAwOworCQllbHNlCisJCQlkYXRhIHw9IEJNQ1JfU1BFRUQxMDA7CisKKwkJaWYgKGN1cnJlbnRfZHVwbGV4ICE9IGZ1bGwpCisJCQlkYXRhICY9IH5CTUNSX0ZVTExEUExYOworCQllbHNlCisJCQlkYXRhIHw9IEJNQ1JfRlVMTERQTFg7CiAJfQogCWUxMDBfc2V0X21kaW9fcmVnKGRldiwgbnAtPm1paV9pZi5waHlfaWQsIE1JSV9CTUNSLCBkYXRhKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RlcGNhLmMgYi9kcml2ZXJzL25ldC9kZXBjYS5jCmluZGV4IDk2ODZjMWYuLjdhM2JkYWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2RlcGNhLmMKKysrIGIvZHJpdmVycy9uZXQvZGVwY2EuYwpAQCAtMjM3LDYgKzIzNyw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lMTAwLmMgYi9kcml2ZXJzL25ldC9lMTAwLmMKaW5kZXggZDE5YjA4NC4uM2MyOWEyMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZTEwMC5jCisrKyBiL2RyaXZlcnMvbmV0L2UxMDAuYwpAQCAtMTUxLDYgKzE1MSw3IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXFsLmMgYi9kcml2ZXJzL25ldC9lcWwuYwppbmRleCBkNGQ5YTNlLi5mNWI5NmNhZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXFsLmMKKysrIGIvZHJpdmVycy9uZXQvZXFsLmMKQEAgLTExMSw2ICsxMTEsNyBAQAogICogU29ycnksIEkgaGFkIHRvIHJld3JpdGUgbW9zdCBvZiB0aGlzIGZvciAyLjUueCAtRGF2ZU0KICAqLwogCisjaW5jbHVkZSA8bGludXgvY2FwYWJpbGl0eS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aG9jLmMgYi9kcml2ZXJzL25ldC9ldGhvYy5jCmluZGV4IDU5MDQ3M2EuLmY3ZDlhYzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aG9jLmMKKysrIGIvZHJpdmVycy9uZXQvZXRob2MuYwpAQCAtMTcsNiArMTcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21paS5oPgogI2luY2x1ZGUgPGxpbnV4L3BoeS5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bmV0L2V0aG9jLmg+CiAKIHN0YXRpYyBpbnQgYnVmZmVyX3NpemUgPSAweDgwMDA7IC8qIDMyIEtCeXRlcyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXdyazMuYyBiL2RyaXZlcnMvbmV0L2V3cmszLmMKaW5kZXggYjJhNWVjOC4uZGQ0YmEwMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXdyazMuYworKysgYi9kcml2ZXJzL25ldC9ld3JrMy5jCkBAIC0xNDUsNiArMTQ1LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2ZvcmNlZGV0aC5jIGIvZHJpdmVycy9uZXQvZm9yY2VkZXRoLmMKaW5kZXggMGExYzJiYi4uZTFkYTQ2NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZm9yY2VkZXRoLmMKKysrIGIvZHJpdmVycy9uZXQvZm9yY2VkZXRoLmMKQEAgLTQ5LDYgKzQ5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lci5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaGFtYWNoaS5jIGIvZHJpdmVycy9uZXQvaGFtYWNoaS5jCmluZGV4IDFkNTA2NGEuLmY3NTE5YTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2hhbWFjaGkuYworKysgYi9kcml2ZXJzL25ldC9oYW1hY2hpLmMKQEAgLTE0NSw2ICsxNDUsNyBAQAogLyogVGltZSBpbiBqaWZmaWVzIGJlZm9yZSBjb25jbHVkaW5nIHRoZSB0cmFuc21pdHRlciBpcyBodW5nLiAqLwogI2RlZmluZSBUWF9USU1FT1VUICAoNSpIWikKIAorI2luY2x1ZGUgPGxpbnV4L2NhcGFiaWxpdHkuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2hhbXJhZGlvL2JheWNvbV9lcHAuYyBiL2RyaXZlcnMvbmV0L2hhbXJhZGlvL2JheWNvbV9lcHAuYwppbmRleCA3YmNhZjdjLi5lMzQ0Yzg0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9oYW1yYWRpby9iYXljb21fZXBwLmMKKysrIGIvZHJpdmVycy9uZXQvaGFtcmFkaW8vYmF5Y29tX2VwcC5jCkBAIC00NCw2ICs0NCw3IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2hhbXJhZGlvL2JheWNvbV9zZXJfZmR4LmMgYi9kcml2ZXJzL25ldC9oYW1yYWRpby9iYXljb21fc2VyX2ZkeC5jCmluZGV4IGFhNDQ4OGUuLmVkNjBmZDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2hhbXJhZGlvL2JheWNvbV9zZXJfZmR4LmMKKysrIGIvZHJpdmVycy9uZXQvaGFtcmFkaW8vYmF5Y29tX3Nlcl9mZHguYwpAQCAtNzEsNiArNzEsNyBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKKyNpbmNsdWRlIDxsaW51eC9jYXBhYmlsaXR5Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9oYW1yYWRpby9iYXljb21fc2VyX2hkeC5jIGIvZHJpdmVycy9uZXQvaGFtcmFkaW8vYmF5Y29tX3Nlcl9oZHguYwppbmRleCA4OGM1OTM1Li4xNjg2ZjZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9oYW1yYWRpby9iYXljb21fc2VyX2hkeC5jCisrKyBiL2RyaXZlcnMvbmV0L2hhbXJhZGlvL2JheWNvbV9zZXJfaGR4LmMKQEAgLTYxLDYgKzYxLDcgQEAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCisjaW5jbHVkZSA8bGludXgvY2FwYWJpbGl0eS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaGFtcmFkaW8vaGRsY2Rydi5jIGIvZHJpdmVycy9uZXQvaGFtcmFkaW8vaGRsY2Rydi5jCmluZGV4IDAwMTNjNDAuLjkxYzU3OTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2hhbXJhZGlvL2hkbGNkcnYuYworKysgYi9kcml2ZXJzL25ldC9oYW1yYWRpby9oZGxjZHJ2LmMKQEAgLTQyLDYgKzQyLDcgQEAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCisjaW5jbHVkZSA8bGludXgvY2FwYWJpbGl0eS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0Lmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ocDEwMC5jIGIvZHJpdmVycy9uZXQvaHAxMDAuYwppbmRleCBhOWExYTk5Li5kZDg2NjUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ocDEwMC5jCisrKyBiL2RyaXZlcnMvbmV0L2hwMTAwLmMKQEAgLTk4LDYgKzk4LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lnYi9pZ2JfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvaWdiL2lnYl9ldGh0b29sLmMKaW5kZXggYWFiM2Q5Ny4uYjI0M2VkMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaWdiL2lnYl9ldGh0b29sLmMKKysrIGIvZHJpdmVycy9uZXQvaWdiL2lnYl9ldGh0b29sLmMKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9pZl9ldGhlci5oPgogI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogCiAjaW5jbHVkZSAiaWdiLmgiCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lyZGEva2luZ3N1bi1zaXIuYyBiL2RyaXZlcnMvbmV0L2lyZGEva2luZ3N1bi1zaXIuYwppbmRleCAyZmMzMGI0Li5jYjkwZDY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pcmRhL2tpbmdzdW4tc2lyLmMKKysrIGIvZHJpdmVycy9uZXQvaXJkYS9raW5nc3VuLXNpci5jCkBAIC02Niw3ICs2Niw2IEBACiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L2tyZWYuaD4KICNpbmNsdWRlIDxsaW51eC91c2IuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS9rczk1OS1zaXIuYyBiL2RyaXZlcnMvbmV0L2lyZGEva3M5NTktc2lyLmMKaW5kZXggZjRkMTNmYy4uYjU0ZDNiNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXJkYS9rczk1OS1zaXIuYworKysgYi9kcml2ZXJzL25ldC9pcmRhL2tzOTU5LXNpci5jCkBAIC0xMTgsNyArMTE4LDYgQEAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgva3JlZi5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcmRhL2tzZGF6emxlLXNpci5jIGIvZHJpdmVycy9uZXQvaXJkYS9rc2RhenpsZS1zaXIuYwppbmRleCA1ZjlkNzMzLi44ZDcxM2ViIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pcmRhL2tzZGF6emxlLXNpci5jCisrKyBiL2RyaXZlcnMvbmV0L2lyZGEva3NkYXp6bGUtc2lyLmMKQEAgLTgyLDcgKzgyLDYgQEAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgva3JlZi5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcmRhL21jczc3ODAuYyBiL2RyaXZlcnMvbmV0L2lyZGEvbWNzNzc4MC5jCmluZGV4IGIzZDMwYmMuLmMwZTBiYjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEvbWNzNzc4MC5jCisrKyBiL2RyaXZlcnMvbmV0L2lyZGEvbWNzNzc4MC5jCkBAIC01MCw3ICs1MCw2IEBACiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L2tyZWYuaD4KICNpbmNsdWRlIDxsaW51eC91c2IuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS9weGFmaWNwX2lyLmMgYi9kcml2ZXJzL25ldC9pcmRhL3B4YWZpY3BfaXIuYwppbmRleCAxNDQ1ZTU4Li44NGRiMTQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pcmRhL3B4YWZpY3BfaXIuYworKysgYi9kcml2ZXJzL25ldC9pcmRhL3B4YWZpY3BfaXIuYwpAQCAtMTcsNiArMTcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogCiAjaW5jbHVkZSA8bmV0L2lyZGEvaXJkYS5oPgogI2luY2x1ZGUgPG5ldC9pcmRhL2lybW9kLmg+CkBAIC0xNjMsNiArMTY0LDIyIEBACiB9CiAKIC8qCisgKiBTZXQgdGhlIElyREEgY29tbXVuaWNhdGlvbnMgbW9kZS4KKyAqLworc3RhdGljIHZvaWQgcHhhX2lyZGFfc2V0X21vZGUoc3RydWN0IHB4YV9pcmRhICpzaSwgaW50IG1vZGUpCit7CisJaWYgKHNpLT5wZGF0YS0+dHJhbnNjZWl2ZXJfbW9kZSkKKwkJc2ktPnBkYXRhLT50cmFuc2NlaXZlcl9tb2RlKHNpLT5kZXYsIG1vZGUpOworCWVsc2UgeworCQlpZiAoZ3Bpb19pc192YWxpZChzaS0+cGRhdGEtPmdwaW9fcHdkb3duKSkKKwkJCWdwaW9fc2V0X3ZhbHVlKHNpLT5wZGF0YS0+Z3Bpb19wd2Rvd24sCisJCQkJCSEobW9kZSAmIElSX09GRikgXgorCQkJCQkhc2ktPnBkYXRhLT5ncGlvX3B3ZG93bl9pbnZlcnRlZCk7CisJCXB4YTJ4eF90cmFuc2NlaXZlcl9tb2RlKHNpLT5kZXYsIG1vZGUpOworCX0KK30KKworLyoKICAqIFNldCB0aGUgSXJEQSBjb21tdW5pY2F0aW9ucyBzcGVlZC4KICAqLwogc3RhdGljIGludCBweGFfaXJkYV9zZXRfc3BlZWQoc3RydWN0IHB4YV9pcmRhICpzaSwgaW50IHNwZWVkKQpAQCAtMTg4LDcgKzIwNSw3IEBACiAJCQlweGFfaXJkYV9kaXNhYmxlX2NsayhzaSk7CiAKIAkJCS8qIHNldCBib2FyZCB0cmFuc2NlaXZlciB0byBTSVIgbW9kZSAqLwotCQkJc2ktPnBkYXRhLT50cmFuc2NlaXZlcl9tb2RlKHNpLT5kZXYsIElSX1NJUk1PREUpOworCQkJcHhhX2lyZGFfc2V0X21vZGUoc2ksIElSX1NJUk1PREUpOwogCiAJCQkvKiBlbmFibGUgdGhlIFNUVUFSVCBjbG9jayAqLwogCQkJcHhhX2lyZGFfZW5hYmxlX3NpcmNsayhzaSk7CkBAIC0yMjIsNyArMjM5LDcgQEAKIAkJSUNDUjAgPSAwOwogCiAJCS8qIHNldCBib2FyZCB0cmFuc2NlaXZlciB0byBGSVIgbW9kZSAqLwotCQlzaS0+cGRhdGEtPnRyYW5zY2VpdmVyX21vZGUoc2ktPmRldiwgSVJfRklSTU9ERSk7CisJCXB4YV9pcmRhX3NldF9tb2RlKHNpLCBJUl9GSVJNT0RFKTsKIAogCQkvKiBlbmFibGUgdGhlIEZJQ1AgY2xvY2sgKi8KIAkJcHhhX2lyZGFfZW5hYmxlX2ZpcmNsayhzaSk7CkBAIC02NDEsNyArNjU4LDcgQEAKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAKIAkvKiBwb3dlciBvZmYgYm9hcmQgdHJhbnNjZWl2ZXIgKi8KLQlzaS0+cGRhdGEtPnRyYW5zY2VpdmVyX21vZGUoc2ktPmRldiwgSVJfT0ZGKTsKKwlweGFfaXJkYV9zZXRfbW9kZShzaSwgSVJfT0ZGKTsKIAogCXByaW50ayhLRVJOX0RFQlVHICJweGFfaXI6IGlyZGEgc2h1dGRvd25cbiIpOwogfQpAQCAtODQ5LDEwICs4NjYsMjYgQEAKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9tZW1fNTsKIAotCWlmIChzaS0+cGRhdGEtPnN0YXJ0dXApCisJaWYgKGdwaW9faXNfdmFsaWQoc2ktPnBkYXRhLT5ncGlvX3B3ZG93bikpIHsKKwkJZXJyID0gZ3Bpb19yZXF1ZXN0KHNpLT5wZGF0YS0+Z3Bpb19wd2Rvd24sICJJckRBIHN3aXRjaCIpOworCQlpZiAoZXJyKQorCQkJZ290byBlcnJfc3RhcnR1cDsKKwkJZXJyID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KHNpLT5wZGF0YS0+Z3Bpb19wd2Rvd24sCisJCQkJCSFzaS0+cGRhdGEtPmdwaW9fcHdkb3duX2ludmVydGVkKTsKKwkJaWYgKGVycikgeworCQkJZ3Bpb19mcmVlKHNpLT5wZGF0YS0+Z3Bpb19wd2Rvd24pOworCQkJZ290byBlcnJfc3RhcnR1cDsKKwkJfQorCX0KKworCWlmIChzaS0+cGRhdGEtPnN0YXJ0dXApIHsKIAkJZXJyID0gc2ktPnBkYXRhLT5zdGFydHVwKHNpLT5kZXYpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyX3N0YXJ0dXA7CisJCWlmIChlcnIpCisJCQlnb3RvIGVycl9zdGFydHVwOworCX0KKworCWlmIChncGlvX2lzX3ZhbGlkKHNpLT5wZGF0YS0+Z3Bpb19wd2Rvd24pICYmIHNpLT5wZGF0YS0+c3RhcnR1cCkKKwkJZGV2X3dhcm4oc2ktPmRldiwgImdwaW9fcHdkb3duIGFuZCBzdGFydHVwKCkgYm90aCBkZWZpbmVkIVxuIik7CiAKIAlkZXYtPm5ldGRldl9vcHMgPSAmcHhhX2lyZGFfbmV0ZGV2X29wczsKIApAQCAtOTAzLDYgKzkzNiw4IEBACiAJaWYgKGRldikgewogCQlzdHJ1Y3QgcHhhX2lyZGEgKnNpID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAkJdW5yZWdpc3Rlcl9uZXRkZXYoZGV2KTsKKwkJaWYgKGdwaW9faXNfdmFsaWQoc2ktPnBkYXRhLT5ncGlvX3B3ZG93bikpCisJCQlncGlvX2ZyZWUoc2ktPnBkYXRhLT5ncGlvX3B3ZG93bik7CiAJCWlmIChzaS0+cGRhdGEtPnNodXRkb3duKQogCQkJc2ktPnBkYXRhLT5zaHV0ZG93bihzaS0+ZGV2KTsKIAkJa2ZyZWUoc2ktPnR4X2J1ZmYuaGVhZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcmRhL3RvaW0zMjMyLXNpci5jIGIvZHJpdmVycy9uZXQvaXJkYS90b2ltMzIzMi1zaXIuYwppbmRleCBmY2YyODdiLi45OWUxZWMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pcmRhL3RvaW0zMjMyLXNpci5jCisrKyBiL2RyaXZlcnMvbmV0L2lyZGEvdG9pbTMyMzItc2lyLmMKQEAgLTEyMCw2ICsxMjAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAKICNpbmNsdWRlIDxuZXQvaXJkYS9pcmRhLmg+CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21seDQvZncuYyBiL2RyaXZlcnMvbmV0L21seDQvZncuYwppbmRleCBjZWUxOTljLi4zYzE2NjAyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9tbHg0L2Z3LmMKKysrIGIvZHJpdmVycy9uZXQvbWx4NC9mdy5jCkBAIC0zMyw2ICszMyw3IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L21seDQvY21kLmg+CisjaW5jbHVkZSA8bGludXgvY2FjaGUuaD4KIAogI2luY2x1ZGUgImZ3LmgiCiAjaW5jbHVkZSAiaWNtLmgiCkBAIC02OTgsNiArNjk5LDcgQEAKICNkZWZpbmUgSU5JVF9IQ0FfSU5fU0laRQkJIDB4MjAwCiAjZGVmaW5lIElOSVRfSENBX1ZFUlNJT05fT0ZGU0VUCQkgMHgwMDAKICNkZWZpbmUJIElOSVRfSENBX1ZFUlNJT04JCSAyCisjZGVmaW5lIElOSVRfSENBX0NBQ0hFTElORV9TWl9PRkZTRVQJIDB4MGUKICNkZWZpbmUgSU5JVF9IQ0FfRkxBR1NfT0ZGU0VUCQkgMHgwMTQKICNkZWZpbmUgSU5JVF9IQ0FfUVBDX09GRlNFVAkJIDB4MDIwCiAjZGVmaW5lCSBJTklUX0hDQV9RUENfQkFTRV9PRkZTRVQJIChJTklUX0hDQV9RUENfT0ZGU0VUICsgMHgxMCkKQEAgLTczNSw2ICs3MzcsOSBAQAogCiAJKigodTggKikgbWFpbGJveC0+YnVmICsgSU5JVF9IQ0FfVkVSU0lPTl9PRkZTRVQpID0gSU5JVF9IQ0FfVkVSU0lPTjsKIAorCSooKHU4ICopIG1haWxib3gtPmJ1ZiArIElOSVRfSENBX0NBQ0hFTElORV9TWl9PRkZTRVQpID0KKwkJKGlsb2cyKGNhY2hlX2xpbmVfc2l6ZSgpKSAtIDQpIDw8IDU7CisKICNpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTikKIAkqKGluYm94ICsgSU5JVF9IQ0FfRkxBR1NfT0ZGU0VUIC8gNCkgJj0gfmNwdV90b19iZTMyKDEgPDwgMSk7CiAjZWxpZiBkZWZpbmVkKF9fQklHX0VORElBTikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21seDQvbWFpbi5jIGIvZHJpdmVycy9uZXQvbWx4NC9tYWluLmMKaW5kZXggM2RkNDgxZS4uMjkxYTUwNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbWx4NC9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvbWx4NC9tYWluLmMKQEAgLTEyODIsNiArMTI4Miw4IEBACiAJeyBQQ0lfVkRFVklDRShNRUxMQU5PWCwgMHg2MzcyKSB9LCAvKiBNVDI1NDU4IENvbm5lY3RYIEVOIDEwR0JBU0UtVCAxMEdpZ0UgKi8KIAl7IFBDSV9WREVWSUNFKE1FTExBTk9YLCAweDY3NWEpIH0sIC8qIE1UMjU0NTggQ29ubmVjdFggRU4gMTBHQkFTRS1UK0dlbjIgMTBHaWdFICovCiAJeyBQQ0lfVkRFVklDRShNRUxMQU5PWCwgMHg2NzY0KSB9LCAvKiBNVDI2NDY4IENvbm5lY3RYIEVOIDEwR2lnRSBQQ0llIGdlbjIqLworCXsgUENJX1ZERVZJQ0UoTUVMTEFOT1gsIDB4Njc0NikgfSwgLyogTVQyNjQzOCBDb25uZWN0WCBFTiA0MEdpZ0UgUENJZSBnZW4yIDVHVC9zICovCisJeyBQQ0lfVkRFVklDRShNRUxMQU5PWCwgMHg2NzZlKSB9LCAvKiBNVDI2NDc4IENvbm5lY3RYMiA0MEdpZ0UgUENJZSBnZW4yICovCiAJeyAwLCB9CiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uczgzODIwLmMgYi9kcml2ZXJzL25ldC9uczgzODIwLmMKaW5kZXggYzU5NGUxOS4uNTdmZDQ4MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbnM4MzgyMC5jCisrKyBiL2RyaXZlcnMvbmV0L25zODM4MjAuYwpAQCAtMTExLDYgKzExMSw3IEBACiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNpbmNsdWRlIDxsaW51eC9wcmVmZXRjaC5oPgogI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CiAjaW5jbHVkZSA8bGludXgvaWZfdmxhbi5oPgogI2luY2x1ZGUgPGxpbnV4L3J0bmV0bGluay5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGNuZXQzMi5jIGIvZHJpdmVycy9uZXQvcGNuZXQzMi5jCmluZGV4IDZkMjhiMTguLmMxYjNmMDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BjbmV0MzIuYworKysgYi9kcml2ZXJzL25ldC9wY25ldDMyLmMKQEAgLTMxLDYgKzMxLDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NiMTAwMC5jIGIvZHJpdmVycy9uZXQvc2IxMDAwLmMKaW5kZXggZWUzNjZjNS4uYzljNzBhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2IxMDAwLmMKKysrIGIvZHJpdmVycy9uZXQvc2IxMDAwLmMKQEAgLTM2LDYgKzM2LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NpczkwMC5jIGIvZHJpdmVycy9uZXQvc2lzOTAwLmMKaW5kZXggOTc5NDlkMC4uYzA3MmY3ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2lzOTAwLmMKKysrIGIvZHJpdmVycy9uZXQvc2lzOTAwLmMKQEAgLTUyLDYgKzUyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2tmcC9za2ZkZGkuYyBiL2RyaXZlcnMvbmV0L3NrZnAvc2tmZGRpLmMKaW5kZXggMzhhNTA4Yi4uYjI3MTU2ZWFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9za2ZwL3NrZmRkaS5jCisrKyBiL2RyaXZlcnMvbmV0L3NrZnAvc2tmZGRpLmMKQEAgLTczLDYgKzczLDcgQEAKIAogLyogSW5jbHVkZSBmaWxlcyAqLwogCisjaW5jbHVkZSA8bGludXgvY2FwYWJpbGl0eS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9za2dlLmMgYi9kcml2ZXJzL25ldC9za2dlLmMKaW5kZXggMDFmNjgxMS4uOGY1NDE0MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2tnZS5jCisrKyBiL2RyaXZlcnMvbmV0L3NrZ2UuYwpAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L21paS5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NsaXAuYyBiL2RyaXZlcnMvbmV0L3NsaXAuYwppbmRleCBlMTdjNTM1Li5mZTNjZWJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zbGlwLmMKKysrIGIvZHJpdmVycy9uZXQvc2xpcC5jCkBAIC02Nyw2ICs2Nyw3IEBACiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc3VuZ2VtLmMgYi9kcml2ZXJzL25ldC9zdW5nZW0uYwppbmRleCAzMDVlYzNkLi43MDE5YTBkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zdW5nZW0uYworKysgYi9kcml2ZXJzL25ldC9zdW5nZW0uYwpAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L2luLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Rva2VucmluZy9pYm10ci5jIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nL2libXRyLmMKaW5kZXggNmEzYzc1MS4uNzVmYTMyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdG9rZW5yaW5nL2libXRyLmMKKysrIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nL2libXRyLmMKQEAgLTEwOCw2ICsxMDgsNyBAQAogI2RlZmluZSBJQk1UUl9ERUJVR19NRVNTQUdFUyAwCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogCiAjaWZkZWYgUENNQ0lBCQkvKiByZXF1aXJlZCBmb3IgaWJtdHJfY3MuYyB0byBidWlsZCAqLwogI3VuZGVmIE1PRFVMRQkJLyogeWVzLCByZWFsbHkgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3R5cGhvb24uYyBiL2RyaXZlcnMvbmV0L3R5cGhvb24uYwppbmRleCBkNmQzNDUyLi41OTIxZjViIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90eXBob29uLmMKKysrIGIvZHJpdmVycy9uZXQvdHlwaG9vbi5jCkBAIC0xMDgsNiArMTA4LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL3JuZGlzX2hvc3QuYyBiL2RyaXZlcnMvbmV0L3VzYi9ybmRpc19ob3N0LmMKaW5kZXggMGNhYTgwMC4uZjU2ZGVjNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdXNiL3JuZGlzX2hvc3QuYworKysgYi9kcml2ZXJzL25ldC91c2Ivcm5kaXNfaG9zdC5jCkBAIC0zNjIsMTIgKzM2MiwxMiBAQAogCQkJcmV0dmFsID0gLUVJTlZBTDsKIAkJCWdvdG8gaGFsdF9mYWlsX2FuZF9yZWxlYXNlOwogCQl9Ci0JCWRldi0+aGFyZF9tdHUgPSB0bXA7Ci0JCW5ldC0+bXR1ID0gZGV2LT5oYXJkX210dSAtIG5ldC0+aGFyZF9oZWFkZXJfbGVuOwogCQlkZXZfd2FybigmaW50Zi0+ZGV2LAogCQkJICJkZXYgY2FuJ3QgdGFrZSAldSBieXRlIHBhY2tldHMgKG1heCAldSksICIKIAkJCSAiYWRqdXN0aW5nIE1UVSB0byAldVxuIiwKLQkJCSBkZXYtPmhhcmRfbXR1LCB0bXAsIG5ldC0+bXR1KTsKKwkJCSBkZXYtPmhhcmRfbXR1LCB0bXAsIHRtcCAtIG5ldC0+aGFyZF9oZWFkZXJfbGVuKTsKKwkJZGV2LT5oYXJkX210dSA9IHRtcDsKKwkJbmV0LT5tdHUgPSBkZXYtPmhhcmRfbXR1IC0gbmV0LT5oYXJkX2hlYWRlcl9sZW47CiAJfQogCiAJLyogUkVWSVNJVDogIHBlcmlwaGVyYWwgImFsaWdubWVudCIgcmVxdWVzdCBpcyBpZ25vcmVkIC4uLiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdmlydGlvX25ldC5jIGIvZHJpdmVycy9uZXQvdmlydGlvX25ldC5jCmluZGV4IGQ5ZWJhYzguLjA1NjMwZjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3ZpcnRpb19uZXQuYworKysgYi9kcml2ZXJzL25ldC92aXJ0aW9fbmV0LmMKQEAgLTIyLDcgKzIyLDYgQEAKICNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvdmlydGlvLmg+Ci0jaW5jbHVkZSA8bGludXgvdmlydGlvX2lkcy5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb19uZXQuaD4KICNpbmNsdWRlIDxsaW51eC9zY2F0dGVybGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lmX3ZsYW4uaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9jMTAxLmMgYi9kcml2ZXJzL25ldC93YW4vYzEwMS5jCmluZGV4IDk2OTNiMGYuLjBiZDg5OGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi9jMTAxLmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL2MxMDEuYwpAQCAtMTYsNiArMTYsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvY2FwYWJpbGl0eS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL2Nvc2EuYyBiL2RyaXZlcnMvbmV0L3dhbi9jb3NhLmMKaW5kZXggNjYzNjBhMi4uZTJjMzNjMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL2Nvc2EuYworKysgYi9kcml2ZXJzL25ldC93YW4vY29zYS5jCkBAIC03Niw2ICs3Niw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9jeWN4X3gyNS5jIGIvZHJpdmVycy9uZXQvd2FuL2N5Y3hfeDI1LmMKaW5kZXggMjU3M2MxOC4uY2Q4Y2I5NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL2N5Y3hfeDI1LmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL2N5Y3hfeDI1LmMKQEAgLTg0LDYgKzg0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4JLyogcHJpbnRrKCksIGFuZCBvdGhlciB1c2VmdWwgc3R1ZmYgKi8KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4JLyogaW5saW5lIG1lbXNldCgpLCBldGMuICovCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CQkvKiBrbWFsbG9jKCksIGtmcmVlKCkgKi8KICNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4JLyogb2Zmc2V0b2YoKSwgZXRjLiAqLwogI2luY2x1ZGUgPGxpbnV4L3dhbnJvdXRlci5oPgkvKiBXQU4gcm91dGVyIGRlZmluaXRpb25zICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vZHNjYzQuYyBiL2RyaXZlcnMvbmV0L3dhbi9kc2NjNC5jCmluZGV4IDgxYzhhZWMuLjA3ZDAwYjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi9kc2NjNC5jCisrKyBiL2RyaXZlcnMvbmV0L3dhbi9kc2NjNC5jCkBAIC04MSw2ICs4MSw3IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9mYXJzeW5jLmMgYi9kcml2ZXJzL25ldC93YW4vZmFyc3luYy5jCmluZGV4IDNlOTBlYjguLmJlZGEzODcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi9mYXJzeW5jLmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL2ZhcnN5bmMuYwpAQCAtMTksNiArMTksNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9pZi5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL24yLmMgYi9kcml2ZXJzL25ldC93YW4vbjIuYwppbmRleCA4M2RhNTk2Li41OGM2NjgxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93YW4vbjIuYworKysgYi9kcml2ZXJzL25ldC93YW4vbjIuYwpAQCAtMTgsNiArMTgsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvY2FwYWJpbGl0eS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2ZjbnRsLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vcGNpMjAwc3luLmMgYi9kcml2ZXJzL25ldC93YW4vcGNpMjAwc3luLmMKaW5kZXggYTUyZjI5Yy4uZjEzNDBmYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL3BjaTIwMHN5bi5jCisrKyBiL2RyaXZlcnMvbmV0L3dhbi9wY2kyMDBzeW4uYwpAQCAtMTYsNiArMTYsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvY2FwYWJpbGl0eS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2ZjbnRsLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGlvLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGlvLmMKaW5kZXggZGJiZjBkMS4uOWI5MDQ0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3Bpby5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9waW8uYwpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgInhtaXQuaCIKIAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KIAogCiBzdGF0aWMgdTE2IGdlbmVyYXRlX2Nvb2tpZShzdHJ1Y3QgYjQzX3Bpb190eHF1ZXVlICpxLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzbGVnYWN5L21haW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0M2xlZ2FjeS9tYWluLmMKaW5kZXggMWQ5MjIzYi4uNGI2MDE0OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzbGVnYWN5L21haW4uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDNsZWdhY3kvbWFpbi5jCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KICNpbmNsdWRlIDxsaW51eC93aXJlbGVzcy5oPgogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KICNpbmNsdWRlIDxuZXQvZHN0Lmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDNsZWdhY3kvcGh5LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDNsZWdhY3kvcGh5LmMKaW5kZXggMTEzMTllYy4uYWFmMjI3MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzbGVnYWN5L3BoeS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0M2xlZ2FjeS9waHkuYwpAQCAtMzEsNiArMzEsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKICNpbmNsdWRlICJiNDNsZWdhY3kuaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfaW5mby5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9pbmZvLmMKaW5kZXggNmZhMTRhNC4uNGRmYjQwYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9pbmZvLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9pbmZvLmMKQEAgLTEsNiArMSw3IEBACiAvKiBIb3N0IEFQIGRyaXZlciBJbmZvIEZyYW1lIHByb2Nlc3NpbmcgKHBhcnQgb2YgaG9zdGFwLm8gbW9kdWxlKSAqLwogCiAjaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlICJob3N0YXBfd2xhbi5oIgogI2luY2x1ZGUgImhvc3RhcC5oIgogI2luY2x1ZGUgImhvc3RhcF9hcC5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9pb2N0bC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9pb2N0bC5jCmluZGV4IDNmMmJkYTguLjk0MTljZWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfaW9jdGwuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX2lvY3RsLmMKQEAgLTEsNiArMSw3IEBACiAvKiBpb2N0bCgpIChtb3N0bHkgTGludXggV2lyZWxlc3MgRXh0ZW5zaW9ucykgcm91dGluZXMgZm9yIEhvc3QgQVAgZHJpdmVyICovCiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgogI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgogI2luY2x1ZGUgPG5ldC9saWI4MDIxMS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9pcHcyMjAwLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2lwdzIyMDAuYwppbmRleCAwNDM0MWEyLi45YjBmMmMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2lwdzIyMDAuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2lwdzIyMDAuYwpAQCAtMzAsNiArMzAsNyBAQAogCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgImlwdzIyMDAuaCIKIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LmMKaW5kZXggMjMxYzgzMy4uZjA1OWI0OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUuYwpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3dpcmVsZXNzLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC00OTY1LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC00OTY1LmMKaW5kZXggYTIyYTA1MC4uNmY3MDNhMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNDk2NS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTQ5NjUuYwpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3dpcmVsZXNzLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC01MDAwLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC01MDAwLmMKaW5kZXggNTI0ZTdlNC4uNmU2ZjUxNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNTAwMC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTUwMDAuYwpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3dpcmVsZXNzLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi5jCmluZGV4IDliNWVhOGIuLmVhYWZhZTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi5jCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvd2lyZWxlc3MuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNvcmUuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNvcmUuYwppbmRleCA0ODRkNWMxLi4yZGM5Mjg3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jb3JlLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY29yZS5jCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5oPgogCiAjaW5jbHVkZSAiaXdsLWVlcHJvbS5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtaGNtZC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtaGNtZC5jCmluZGV4IDUzMmM4ZDYuLmE2ODU2ZGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWhjbWQuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1oY21kLmMKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bmV0L21hYzgwMjExLmg+CiAKICNpbmNsdWRlICJpd2wtZGV2LmgiIC8qIEZJWE1FOiByZW1vdmUgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXR4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC10eC5jCmluZGV4IGMxODkwNzUuLmZiOWJjZmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXR4LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtdHguYwpAQCAtMjgsNiArMjgsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5oPgogI2luY2x1ZGUgIml3bC1lZXByb20uaCIKICNpbmNsdWRlICJpd2wtZGV2LmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bDM5NDUtYmFzZS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wzOTQ1LWJhc2UuYwppbmRleCA4MzdhMTkzLi5kMDBhODAzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bDM5NDUtYmFzZS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsMzk0NS1iYXNlLmMKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC93aXJlbGVzcy5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdtYzMyMDB3aWZpL2NmZzgwMjExLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd21jMzIwMHdpZmkvY2ZnODAyMTEuYwppbmRleCBhNTZhMmIwLi5mM2M1NTY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd21jMzIwMHdpZmkvY2ZnODAyMTEuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd21jMzIwMHdpZmkvY2ZnODAyMTEuYwpAQCAtMjMsNiArMjMsNyBAQAogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3dpcmVsZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvaWVlZTgwMjExLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd21jMzIwMHdpZmkvY29tbWFuZHMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bWMzMjAwd2lmaS9jb21tYW5kcy5jCmluZGV4IDIzYjUyZmEuLjg0MTU4YjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bWMzMjAwd2lmaS9jb21tYW5kcy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bWMzMjAwd2lmaS9jb21tYW5kcy5jCkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVkZSA8bGludXgvd2lyZWxlc3MuaD4KICNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2llZWU4MDIxMS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAKICNpbmNsdWRlICJpd20uaCIKICNpbmNsdWRlICJidXMuaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bWMzMjAwd2lmaS9tYWluLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd21jMzIwMHdpZmkvbWFpbi5jCmluZGV4IGQ2NjhlNDcuLjIyMmViMmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bWMzMjAwd2lmaS9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdtYzMyMDB3aWZpL21haW4uYwpAQCAtMzgsNiArMzgsNyBAQAogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9pZWVlODAyMTEuaD4KICNpbmNsdWRlIDxsaW51eC93aXJlbGVzcy5oPgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd21jMzIwMHdpZmkvcnguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bWMzMjAwd2lmaS9yeC5jCmluZGV4IDQwZGJjYmMuLjc3MWEzMDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bWMzMjAwd2lmaS9yeC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bWMzMjAwd2lmaS9yeC5jCkBAIC0zOCw2ICszOCw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvd2lyZWxlc3MuaD4KICNpbmNsdWRlIDxsaW51eC9pZWVlODAyMTEuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2NtZC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvY21kLmMKaW5kZXggNjg1MDk4MS4uMGEzMjRkYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvY21kLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvY21kLmMKQEAgLTYsNiArNiw3IEBACiAjaW5jbHVkZSA8bmV0L2l3X2hhbmRsZXIuaD4KICNpbmNsdWRlIDxuZXQvbGliODAyMTEuaD4KICNpbmNsdWRlIDxsaW51eC9rZmlmby5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSAiaG9zdC5oIgogI2luY2x1ZGUgImhvc3RjbWQuaCIKICNpbmNsdWRlICJkZWNsLmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy90eC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvdHguYwppbmRleCA0YzAxOGY3Li44YzM3NjZhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvdHguYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy90eC5jCkBAIC0zLDYgKzMsNyBAQAogICAqLwogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KIAogI2luY2x1ZGUgImhvc3RjbWQuaCIKICNpbmNsdWRlICJyYWRpb3RhcC5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xfaW9jdGwuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNsX2lvY3RsLmMKaW5kZXggNGM5N2M2YS4uYmMwODQ2NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xfaW9jdGwuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L2lzbF9pb2N0bC5jCkBAIC0xOSw2ICsxOSw3IEBACiAgKgogICovCiAKKyNpbmNsdWRlIDxsaW51eC9jYXBhYmlsaXR5Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L2lzbHBjaV9kZXYuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNscGNpX2Rldi5jCmluZGV4IGUyNmQ3YjMuLjI1MDViZTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNscGNpX2Rldi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNscGNpX2Rldi5jCkBAIC0yMyw2ICsyMyw3IEBACiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xwY2lfbWd0LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L2lzbHBjaV9tZ3QuYwppbmRleCBmN2M2NzdlLi42OWQyZjg4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L2lzbHBjaV9tZ3QuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L2lzbHBjaV9tZ3QuYwpAQCAtMjAsNiArMjAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAKICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yYXlfY3MuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JheV9jcy5jCmluZGV4IDg4Y2Q1OGUuLjFjODhjMmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JheV9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JheV9jcy5jCkBAIC0yODc5LDcgKzI4NzksNyBAQAogCQkgICAgICAgdW5zaWduZWQgbG9uZyBjb3VudCwgdm9pZCAqZGF0YSkKIHsKIAlzdGF0aWMgY2hhciBwcm9jX2Vzc2lkWzMzXTsKLQlpbnQgbGVuID0gY291bnQ7CisJdW5zaWduZWQgaW50IGxlbiA9IGNvdW50OwogCiAJaWYgKGxlbiA+IDMyKQogCQlsZW4gPSAzMjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBkZWJ1Zy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGRlYnVnLmMKaW5kZXggN2IzZWU4Yy4uNjhiYzliYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGRlYnVnLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGRlYnVnLmMKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CiAKICNpbmNsdWRlICJydDJ4MDAuaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvb2Yvb2ZfbWRpby5jIGIvZHJpdmVycy9vZi9vZl9tZGlvLmMKaW5kZXggYmFjYWE1My4uNGIyMmJhNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9vZi9vZl9tZGlvLmMKKysrIGIvZHJpdmVycy9vZi9vZl9tZGlvLmMKQEAgLTk3LDYgKzk3LDEyIEBACiB9CiBFWFBPUlRfU1lNQk9MKG9mX21kaW9idXNfcmVnaXN0ZXIpOwogCisvKiBIZWxwZXIgZnVuY3Rpb24gZm9yIG9mX3BoeV9maW5kX2RldmljZSAqLworc3RhdGljIGludCBvZl9waHlfbWF0Y2goc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpwaHlfbnApCit7CisJcmV0dXJuIGRldl9hcmNoZGF0YV9nZXRfbm9kZSgmZGV2LT5hcmNoZGF0YSkgPT0gcGh5X25wOworfQorCiAvKioKICAqIG9mX3BoeV9maW5kX2RldmljZSAtIEdpdmUgYSBQSFkgbm9kZSwgZmluZCB0aGUgcGh5X2RldmljZQogICogQHBoeV9ucDogUG9pbnRlciB0byB0aGUgcGh5J3MgZGV2aWNlIHRyZWUgbm9kZQpAQCAtMTA2LDE1ICsxMTIsMTAgQEAKIHN0cnVjdCBwaHlfZGV2aWNlICpvZl9waHlfZmluZF9kZXZpY2Uoc3RydWN0IGRldmljZV9ub2RlICpwaHlfbnApCiB7CiAJc3RydWN0IGRldmljZSAqZDsKLQlpbnQgbWF0Y2goc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpwaHlfbnApCi0JewotCQlyZXR1cm4gZGV2X2FyY2hkYXRhX2dldF9ub2RlKCZkZXYtPmFyY2hkYXRhKSA9PSBwaHlfbnA7Ci0JfQotCiAJaWYgKCFwaHlfbnApCiAJCXJldHVybiBOVUxMOwogCi0JZCA9IGJ1c19maW5kX2RldmljZSgmbWRpb19idXNfdHlwZSwgTlVMTCwgcGh5X25wLCBtYXRjaCk7CisJZCA9IGJ1c19maW5kX2RldmljZSgmbWRpb19idXNfdHlwZSwgTlVMTCwgcGh5X25wLCBvZl9waHlfbWF0Y2gpOwogCXJldHVybiBkID8gdG9fcGh5X2RldmljZShkKSA6IE5VTEw7CiB9CiBFWFBPUlRfU1lNQk9MKG9mX3BoeV9maW5kX2RldmljZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL29wcm9maWxlL2V2ZW50X2J1ZmZlci5jIGIvZHJpdmVycy9vcHJvZmlsZS9ldmVudF9idWZmZXIuYwppbmRleCAyYjdhZTM2Li41ZGY2MGE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL29wcm9maWxlL2V2ZW50X2J1ZmZlci5jCisrKyBiL2RyaXZlcnMvb3Byb2ZpbGUvZXZlbnRfYnVmZmVyLmMKQEAgLTM1LDEyICszNSwyMyBAQAogLyogYXRvbWljX3QgYmVjYXVzZSB3YWl0X2V2ZW50IGNoZWNrcyBpdCBvdXRzaWRlIG9mIGJ1ZmZlcl9tdXRleCAqLwogc3RhdGljIGF0b21pY190IGJ1ZmZlcl9yZWFkeSA9IEFUT01JQ19JTklUKDApOwogCi0vKiBBZGQgYW4gZW50cnkgdG8gdGhlIGV2ZW50IGJ1ZmZlci4gV2hlbiB3ZQotICogZ2V0IG5lYXIgdG8gdGhlIGVuZCB3ZSB3YWtlIHVwIHRoZSBwcm9jZXNzCi0gKiBzbGVlcGluZyBvbiB0aGUgcmVhZCgpIG9mIHRoZSBmaWxlLgorLyoKKyAqIEFkZCBhbiBlbnRyeSB0byB0aGUgZXZlbnQgYnVmZmVyLiBXaGVuIHdlIGdldCBuZWFyIHRvIHRoZSBlbmQgd2UKKyAqIHdha2UgdXAgdGhlIHByb2Nlc3Mgc2xlZXBpbmcgb24gdGhlIHJlYWQoKSBvZiB0aGUgZmlsZS4gVG8gcHJvdGVjdAorICogdGhlIGV2ZW50X2J1ZmZlciB0aGlzIGZ1bmN0aW9uIG1heSBvbmx5IGJlIGNhbGxlZCB3aGVuIGJ1ZmZlcl9tdXRleAorICogaXMgc2V0LgogICovCiB2b2lkIGFkZF9ldmVudF9lbnRyeSh1bnNpZ25lZCBsb25nIHZhbHVlKQogeworCS8qCisJICogVGhpcyBzaG91bGRuJ3QgaGFwcGVuIHNpbmNlIGFsbCB3b3JrcXVldWVzIG9yIGhhbmRsZXJzIGFyZQorCSAqIGNhbmNlbGVkIG9yIGZsdXNoZWQgYmVmb3JlIHRoZSBldmVudCBidWZmZXIgaXMgZnJlZWQuCisJICovCisJaWYgKCFldmVudF9idWZmZXIpIHsKKwkJV0FSTl9PTl9PTkNFKDEpOworCQlyZXR1cm47CisJfQorCiAJaWYgKGJ1ZmZlcl9wb3MgPT0gYnVmZmVyX3NpemUpIHsKIAkJYXRvbWljX2luYygmb3Byb2ZpbGVfc3RhdHMuZXZlbnRfbG9zdF9vdmVyZmxvdyk7CiAJCXJldHVybjsKQEAgLTY5LDcgKzgwLDYgQEAKIAogaW50IGFsbG9jX2V2ZW50X2J1ZmZlcih2b2lkKQogewotCWludCBlcnIgPSAtRU5PTUVNOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmb3Byb2ZpbGVmc19sb2NrLCBmbGFncyk7CkBAIC04MCwyMSArOTAsMjIgQEAKIAlpZiAoYnVmZmVyX3dhdGVyc2hlZCA+PSBidWZmZXJfc2l6ZSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKKwlidWZmZXJfcG9zID0gMDsKIAlldmVudF9idWZmZXIgPSB2bWFsbG9jKHNpemVvZih1bnNpZ25lZCBsb25nKSAqIGJ1ZmZlcl9zaXplKTsKIAlpZiAoIWV2ZW50X2J1ZmZlcikKLQkJZ290byBvdXQ7CisJCXJldHVybiAtRU5PTUVNOwogCi0JZXJyID0gMDsKLW91dDoKLQlyZXR1cm4gZXJyOworCXJldHVybiAwOwogfQogCiAKIHZvaWQgZnJlZV9ldmVudF9idWZmZXIodm9pZCkKIHsKKwltdXRleF9sb2NrKCZidWZmZXJfbXV0ZXgpOwogCXZmcmVlKGV2ZW50X2J1ZmZlcik7Ci0KKwlidWZmZXJfcG9zID0gMDsKIAlldmVudF9idWZmZXIgPSBOVUxMOworCW11dGV4X3VubG9jaygmYnVmZmVyX211dGV4KTsKIH0KIAogCkBAIC0xNjcsNiArMTc4LDEyIEBACiAKIAltdXRleF9sb2NrKCZidWZmZXJfbXV0ZXgpOwogCisJLyogTWF5IGhhcHBlbiBpZiB0aGUgYnVmZmVyIGlzIGZyZWVkIGR1cmluZyBwZW5kaW5nIHJlYWRzLiAqLworCWlmICghZXZlbnRfYnVmZmVyKSB7CisJCXJldHZhbCA9IC1FSU5UUjsKKwkJZ290byBvdXQ7CisJfQorCiAJYXRvbWljX3NldCgmYnVmZmVyX3JlYWR5LCAwKTsKIAogCXJldHZhbCA9IC1FRkFVTFQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9kbWFyLmMgYi9kcml2ZXJzL3BjaS9kbWFyLmMKaW5kZXggMTRiYmFhMS4uMjJiMDJjNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvZG1hci5jCisrKyBiL2RyaXZlcnMvcGNpL2RtYXIuYwpAQCAtMzU0LDYgKzM1NCw3IEBACiAJc3RydWN0IGFjcGlfZG1hcl9oYXJkd2FyZV91bml0ICpkcmhkOwogCXN0cnVjdCBhY3BpX2RtYXJfcmVzZXJ2ZWRfbWVtb3J5ICpybXJyOwogCXN0cnVjdCBhY3BpX2RtYXJfYXRzciAqYXRzcjsKKwlzdHJ1Y3QgYWNwaV9kbWFyX3Joc2EgKnJoc2E7CiAKIAlzd2l0Y2ggKGhlYWRlci0+dHlwZSkgewogCWNhc2UgQUNQSV9ETUFSX1RZUEVfSEFSRFdBUkVfVU5JVDoKQEAgLTM3NSw2ICszNzYsMTIgQEAKIAkJYXRzciA9IGNvbnRhaW5lcl9vZihoZWFkZXIsIHN0cnVjdCBhY3BpX2RtYXJfYXRzciwgaGVhZGVyKTsKIAkJcHJpbnRrKEtFUk5fSU5GTyBQUkVGSVggIkFUU1IgZmxhZ3M6ICUjeFxuIiwgYXRzci0+ZmxhZ3MpOwogCQlicmVhazsKKwljYXNlIEFDUElfRE1BUl9IQVJEV0FSRV9BRkZJTklUWToKKwkJcmhzYSA9IGNvbnRhaW5lcl9vZihoZWFkZXIsIHN0cnVjdCBhY3BpX2RtYXJfcmhzYSwgaGVhZGVyKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyBQUkVGSVggIlJIU0EgYmFzZTogJSMwMTZMeCBwcm94aW1pdHkgZG9tYWluOiAlI3hcbiIsCisJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKXJoc2EtPmJhc2VfYWRkcmVzcywKKwkJICAgICAgIHJoc2EtPnByb3hpbWl0eV9kb21haW4pOworCQlicmVhazsKIAl9CiB9CiAKQEAgLTQ1OSw5ICs0NjYsMTMgQEAKIAkJCXJldCA9IGRtYXJfcGFyc2Vfb25lX2F0c3IoZW50cnlfaGVhZGVyKTsKICNlbmRpZgogCQkJYnJlYWs7CisJCWNhc2UgQUNQSV9ETUFSX0hBUkRXQVJFX0FGRklOSVRZOgorCQkJLyogV2UgZG9uJ3QgZG8gYW55dGhpbmcgd2l0aCBSSFNBICh5ZXQ/KSAqLworCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlwcmludGsoS0VSTl9XQVJOSU5HIFBSRUZJWAotCQkJCSJVbmtub3duIERNQVIgc3RydWN0dXJlIHR5cGVcbiIpOworCQkJCSJVbmtub3duIERNQVIgc3RydWN0dXJlIHR5cGUgJWRcbiIsCisJCQkJZW50cnlfaGVhZGVyLT50eXBlKTsKIAkJCXJldCA9IDA7IC8qIGZvciBmb3J3YXJkIGNvbXBhdGliaWxpdHkgKi8KIAkJCWJyZWFrOwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL2FjcGlwaHBfaWJtLmMgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL2FjcGlwaHBfaWJtLmMKaW5kZXggYTlkOTI2Yi4uZTdiZTY2ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy9hY3BpcGhwX2libS5jCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvYWNwaXBocF9pYm0uYwpAQCAtNDA2LDcgKzQwNiw2IEBACiAJCQlfX2Z1bmNfXywgc3RhdHVzKTsKIAkJcmV0dXJuIHJldHZhbDsKIAl9Ci0JaW5mby0+aGFyZHdhcmVfaWQuc3RyaW5nW3NpemVvZihpbmZvLT5oYXJkd2FyZV9pZC5sZW5ndGgpIC0gMV0gPSAnXDAnOwogCiAJaWYgKGluZm8tPmN1cnJlbnRfc3RhdHVzICYmIChpbmZvLT52YWxpZCAmIEFDUElfVkFMSURfSElEKSAmJgogCQkJKCFzdHJjbXAoaW5mby0+aGFyZHdhcmVfaWQuc3RyaW5nLCBJQk1fSEFSRFdBUkVfSUQxKSB8fApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9jcHFwaHAuaCBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvY3BxcGhwLmgKaW5kZXggNTM4MzYwMC4uOWM2YTlmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy9jcHFwaHAuaAorKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL2NwcXBocC5oCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSA8YXNtL2lvLmg+CQkvKiBmb3IgcmVhZD8gYW5kIHdyaXRlPyBmdW5jdGlvbnMgKi8KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgkvKiBmb3IgZGVsYXlzICovCiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgkvKiBmb3Igc2lnbmFsX3BlbmRpbmcoKSAqLwogCiAjZGVmaW5lIE1ZX05BTUUJImNwcXBocCIKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaW50ZWwtaW9tbXUuYyBiL2RyaXZlcnMvcGNpL2ludGVsLWlvbW11LmMKaW5kZXggODU1ZGQ3Yy4uYjFlOTdlNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaW50ZWwtaW9tbXUuYworKysgYi9kcml2ZXJzL3BjaS9pbnRlbC1pb21tdS5jCkBAIC00OCw2ICs0OCw3IEBACiAKICNkZWZpbmUgSVNfR0ZYX0RFVklDRShwZGV2KSAoKHBkZXYtPmNsYXNzID4+IDE2KSA9PSBQQ0lfQkFTRV9DTEFTU19ESVNQTEFZKQogI2RlZmluZSBJU19JU0FfREVWSUNFKHBkZXYpICgocGRldi0+Y2xhc3MgPj4gOCkgPT0gUENJX0NMQVNTX0JSSURHRV9JU0EpCisjZGVmaW5lIElTX0FaQUxJQShwZGV2KSAoKHBkZXYpLT52ZW5kb3IgPT0gMHg4MDg2ICYmIChwZGV2KS0+ZGV2aWNlID09IDB4M2EzZSkKIAogI2RlZmluZSBJT0FQSUNfUkFOR0VfU1RBUlQJKDB4ZmVlMDAwMDApCiAjZGVmaW5lIElPQVBJQ19SQU5HRV9FTkQJKDB4ZmVlZmZmZmYpCkBAIC05NCw2ICs5NSw3IEBACiAvKiBnbG9iYWwgaW9tbXUgbGlzdCwgc2V0IE5VTEwgZm9yIGlnbm9yZWQgRE1BUiB1bml0cyAqLwogc3RhdGljIHN0cnVjdCBpbnRlbF9pb21tdSAqKmdfaW9tbXVzOwogCitzdGF0aWMgdm9pZCBfX2luaXQgY2hlY2tfdHlsZXJzYnVyZ19pc29jaCh2b2lkKTsKIHN0YXRpYyBpbnQgcndiZl9xdWlyazsKIAogLyoKQEAgLTE5MzQsNiArMTkzNiw5IEBACiB9CiAKIHN0YXRpYyBpbnQgaW9tbXVfaWRlbnRpdHlfbWFwcGluZzsKKyNkZWZpbmUgSURFTlRNQVBfQUxMCQkxCisjZGVmaW5lIElERU5UTUFQX0dGWAkJMgorI2RlZmluZSBJREVOVE1BUF9BWkFMSUEJCTQKIAogc3RhdGljIGludCBpb21tdV9kb21haW5faWRlbnRpdHlfbWFwKHN0cnVjdCBkbWFyX2RvbWFpbiAqZG9tYWluLAogCQkJCSAgICAgdW5zaWduZWQgbG9uZyBsb25nIHN0YXJ0LApAQCAtMjE1MSw4ICsyMTU2LDE0IEBACiAKIHN0YXRpYyBpbnQgaW9tbXVfc2hvdWxkX2lkZW50aXR5X21hcChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IHN0YXJ0dXApCiB7Ci0JaWYgKGlvbW11X2lkZW50aXR5X21hcHBpbmcgPT0gMikKLQkJcmV0dXJuIElTX0dGWF9ERVZJQ0UocGRldik7CisJaWYgKChpb21tdV9pZGVudGl0eV9tYXBwaW5nICYgSURFTlRNQVBfQVpBTElBKSAmJiBJU19BWkFMSUEocGRldikpCisJCXJldHVybiAxOworCisJaWYgKChpb21tdV9pZGVudGl0eV9tYXBwaW5nICYgSURFTlRNQVBfR0ZYKSAmJiBJU19HRlhfREVWSUNFKHBkZXYpKQorCQlyZXR1cm4gMTsKKworCWlmICghKGlvbW11X2lkZW50aXR5X21hcHBpbmcgJiBJREVOVE1BUF9BTEwpKQorCQlyZXR1cm4gMDsKIAogCS8qCiAJICogV2Ugd2FudCB0byBzdGFydCBvZmYgd2l0aCBhbGwgZGV2aWNlcyBpbiB0aGUgMToxIGRvbWFpbiwgYW5kCkBAIC0yMzMyLDExICsyMzQzLDE0IEBACiAJfQogCiAJaWYgKGlvbW11X3Bhc3NfdGhyb3VnaCkKLQkJaW9tbXVfaWRlbnRpdHlfbWFwcGluZyA9IDE7CisJCWlvbW11X2lkZW50aXR5X21hcHBpbmcgfD0gSURFTlRNQVBfQUxMOworCiAjaWZkZWYgQ09ORklHX0RNQVJfQlJPS0VOX0dGWF9XQQotCWVsc2UKLQkJaW9tbXVfaWRlbnRpdHlfbWFwcGluZyA9IDI7CisJaW9tbXVfaWRlbnRpdHlfbWFwcGluZyB8PSBJREVOVE1BUF9HRlg7CiAjZW5kaWYKKworCWNoZWNrX3R5bGVyc2J1cmdfaXNvY2goKTsKKwogCS8qCiAJICogSWYgcGFzcyB0aHJvdWdoIGlzIG5vdCBzZXQgb3Igbm90IGVuYWJsZWQsIHNldHVwIGNvbnRleHQgZW50cmllcyBmb3IKIAkgKiBpZGVudGl0eSBtYXBwaW5ncyBmb3Igcm1yciwgZ2Z4LCBhbmQgaXNhIGFuZCBtYXkgZmFsbCBiYWNrIHRvIHN0YXRpYwpAQCAtMzY3MCwzICszNjg0LDYxIEBACiB9CiAKIERFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUihQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDJhNDAsIHF1aXJrX2lvbW11X3J3YmYpOworCisvKiBPbiBUeWxlcnNidXJnIGNoaXBzZXRzLCBzb21lIEJJT1NlcyBoYXZlIGJlZW4ga25vd24gdG8gZW5hYmxlIHRoZQorICAgSVNPQ0ggRE1BUiB1bml0IGZvciB0aGUgQXphbGlhIHNvdW5kIGRldmljZSwgYnV0IG5vdCBnaXZlIGl0IGFueQorICAgVExCIGVudHJpZXMsIHdoaWNoIGNhdXNlcyBpdCB0byBkZWFkbG9jay4gQ2hlY2sgZm9yIHRoYXQuICBXZSBkbworICAgdGhpcyBpbiBhIGZ1bmN0aW9uIGNhbGxlZCBmcm9tIGluaXRfZG1hcnMoKSwgaW5zdGVhZCBvZiBpbiBhIFBDSQorICAgcXVpcmssIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0byBwcmludCB0aGUgb2Jub3hpb3VzICJCSU9TIGJyb2tlbiIKKyAgIG1lc3NhZ2UgaWYgVlQtZCBpcyBhY3R1YWxseSBkaXNhYmxlZC4KKyovCitzdGF0aWMgdm9pZCBfX2luaXQgY2hlY2tfdHlsZXJzYnVyZ19pc29jaCh2b2lkKQoreworCXN0cnVjdCBwY2lfZGV2ICpwZGV2OworCXVpbnQzMl90IHZ0aXNvY2hjdHJsOworCisJLyogSWYgdGhlcmUncyBubyBBemFsaWEgaW4gdGhlIHN5c3RlbSBhbnl3YXksIGZvcmdldCBpdC4gKi8KKwlwZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgzYTNlLCBOVUxMKTsKKwlpZiAoIXBkZXYpCisJCXJldHVybjsKKwlwY2lfZGV2X3B1dChwZGV2KTsKKworCS8qIFN5c3RlbSBNYW5hZ2VtZW50IFJlZ2lzdGVycy4gTWlnaHQgYmUgaGlkZGVuLCBpbiB3aGljaCBjYXNlCisJICAgd2UgY2FuJ3QgZG8gdGhlIHNhbml0eSBjaGVjay4gQnV0IHRoYXQncyBPSywgYmVjYXVzZSB0aGUKKwkgICBrbm93bi1icm9rZW4gQklPU2VzIF9kb24ndF8gYWN0dWFsbHkgaGlkZSBpdCwgc28gZmFyLiAqLworCXBkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDM0MmUsIE5VTEwpOworCWlmICghcGRldikKKwkJcmV0dXJuOworCisJaWYgKHBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LCAweDE4OCwgJnZ0aXNvY2hjdHJsKSkgeworCQlwY2lfZGV2X3B1dChwZGV2KTsKKwkJcmV0dXJuOworCX0KKworCXBjaV9kZXZfcHV0KHBkZXYpOworCisJLyogSWYgQXphbGlhIERNQSBpcyByb3V0ZWQgdG8gdGhlIG5vbi1pc29jaCBETUFSIHVuaXQsIGZpbmUuICovCisJaWYgKHZ0aXNvY2hjdHJsICYgMSkKKwkJcmV0dXJuOworCisJLyogRHJvcCBhbGwgYml0cyBvdGhlciB0aGFuIHRoZSBudW1iZXIgb2YgVExCIGVudHJpZXMgKi8KKwl2dGlzb2NoY3RybCAmPSAweDFjOworCisJLyogSWYgd2UgaGF2ZSB0aGUgcmVjb21tZW5kZWQgbnVtYmVyIG9mIFRMQiBlbnRyaWVzICgxNiksIGZpbmUuICovCisJaWYgKHZ0aXNvY2hjdHJsID09IDB4MTApCisJCXJldHVybjsKKworCS8qIFplcm8gVExCIGVudHJpZXM/IFlvdSBnZXQgdG8gcmlkZSB0aGUgc2hvcnQgYnVzIHRvIHNjaG9vbC4gKi8KKwlpZiAoIXZ0aXNvY2hjdHJsKSB7CisJCVdBUk4oMSwgIllvdXIgQklPUyBpcyBicm9rZW47IERNQSByb3V0ZWQgdG8gSVNPQ0ggRE1BUiB1bml0IGJ1dCBubyBUTEIgc3BhY2UuXG4iCisJCSAgICAgIkJJT1MgdmVuZG9yOiAlczsgVmVyOiAlczsgUHJvZHVjdCBWZXJzaW9uOiAlc1xuIiwKKwkJICAgICBkbWlfZ2V0X3N5c3RlbV9pbmZvKERNSV9CSU9TX1ZFTkRPUiksCisJCSAgICAgZG1pX2dldF9zeXN0ZW1faW5mbyhETUlfQklPU19WRVJTSU9OKSwKKwkJICAgICBkbWlfZ2V0X3N5c3RlbV9pbmZvKERNSV9QUk9EVUNUX1ZFUlNJT04pKTsKKwkJaW9tbXVfaWRlbnRpdHlfbWFwcGluZyB8PSBJREVOVE1BUF9BWkFMSUE7CisJCXJldHVybjsKKwl9CisJCisJcHJpbnRrKEtFUk5fV0FSTklORyAiRE1BUjogUmVjb21tZW5kZWQgVExCIGVudHJpZXMgZm9yIElTT0NIIHVuaXQgaXMgMTY7IHlvdXIgQklPUyBzZXQgJWRcbiIsCisJICAgICAgIHZ0aXNvY2hjdHJsKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaS5jIGIvZHJpdmVycy9wY2kvcGNpLmMKaW5kZXggNmVkZWNmZi4uNGU0YzI5NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcGNpLmMKKysrIGIvZHJpdmVycy9wY2kvcGNpLmMKQEAgLTUxMyw3ICs1MTMsMTEgQEAKIAllbHNlIGlmIChzdGF0ZSA9PSBQQ0lfRDIgfHwgZGV2LT5jdXJyZW50X3N0YXRlID09IFBDSV9EMikKIAkJdWRlbGF5KFBDSV9QTV9EMl9ERUxBWSk7CiAKLQlkZXYtPmN1cnJlbnRfc3RhdGUgPSBzdGF0ZTsKKwlwY2lfcmVhZF9jb25maWdfd29yZChkZXYsIGRldi0+cG1fY2FwICsgUENJX1BNX0NUUkwsICZwbWNzcik7CisJZGV2LT5jdXJyZW50X3N0YXRlID0gKHBtY3NyICYgUENJX1BNX0NUUkxfU1RBVEVfTUFTSyk7CisJaWYgKGRldi0+Y3VycmVudF9zdGF0ZSAhPSBzdGF0ZSAmJiBwcmludGtfcmF0ZWxpbWl0KCkpCisJCWRldl9pbmZvKCZkZXYtPmRldiwgIlJlZnVzZWQgdG8gY2hhbmdlIHBvd2VyIHN0YXRlLCAiCisJCQkiY3VycmVudGx5IGluIEQlZFxuIiwgZGV2LT5jdXJyZW50X3N0YXRlKTsKIAogCS8qIEFjY29yZGluZyB0byBzZWN0aW9uIDUuNC4xIG9mIHRoZSAiUENJIEJVUyBQT1dFUiBNQU5BR0VNRU5UCiAJICogSU5URVJGQUNFIFNQRUNJRklDQVRJT04sIFJFVi4gMS4yIiwgYSBkZXZpY2UgdHJhbnNpdGlvbmluZwpAQCAtMjU0MiwxMCArMjU0NiwxMCBAQAogCiAvKioKICAqIHBjaV9zZXRfdmdhX3N0YXRlIC0gc2V0IFZHQSBkZWNvZGUgc3RhdGUgb24gZGV2aWNlIGFuZCBwYXJlbnRzIGlmIHJlcXVlc3RlZAotICogQGRldiB0aGUgUENJIGRldmljZQotICogQGRlY29kZSAtIHRydWUgPSBlbmFibGUgZGVjb2RpbmcsIGZhbHNlID0gZGlzYWJsZSBkZWNvZGluZwotICogQGNvbW1hbmRfYml0cyBQQ0lfQ09NTUFORF9JTyBhbmQvb3IgUENJX0NPTU1BTkRfTUVNT1JZCi0gKiBAY2hhbmdlX2JyaWRnZSAtIHRyYXZlcnNlIGFuY2VzdG9ycyBhbmQgY2hhbmdlIGJyaWRnZXMKKyAqIEBkZXY6IHRoZSBQQ0kgZGV2aWNlCisgKiBAZGVjb2RlOiB0cnVlID0gZW5hYmxlIGRlY29kaW5nLCBmYWxzZSA9IGRpc2FibGUgZGVjb2RpbmcKKyAqIEBjb21tYW5kX2JpdHM6IFBDSV9DT01NQU5EX0lPIGFuZC9vciBQQ0lfQ09NTUFORF9NRU1PUlkKKyAqIEBjaGFuZ2VfYnJpZGdlOiB0cmF2ZXJzZSBhbmNlc3RvcnMgYW5kIGNoYW5nZSBicmlkZ2VzCiAgKi8KIGludCBwY2lfc2V0X3ZnYV9zdGF0ZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBib29sIGRlY29kZSwKIAkJICAgICAgdW5zaWduZWQgaW50IGNvbW1hbmRfYml0cywgYm9vbCBjaGFuZ2VfYnJpZGdlKQpAQCAtMjcxOSwxNyArMjcyMyw2IEBACiAJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyBpbnQgX19kZXZpbml0IHBjaV9pbml0KHZvaWQpCi17Ci0Jc3RydWN0IHBjaV9kZXYgKmRldiA9IE5VTEw7Ci0KLQl3aGlsZSAoKGRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIGRldikpICE9IE5VTEwpIHsKLQkJcGNpX2ZpeHVwX2RldmljZShwY2lfZml4dXBfZmluYWwsIGRldik7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbnQgX19pbml0IHBjaV9zZXR1cChjaGFyICpzdHIpCiB7CiAJd2hpbGUgKHN0cikgewpAQCAtMjc2Nyw4ICsyNzYwLDYgQEAKIH0KIGVhcmx5X3BhcmFtKCJwY2kiLCBwY2lfc2V0dXApOwogCi1kZXZpY2VfaW5pdGNhbGwocGNpX2luaXQpOwotCiBFWFBPUlRfU1lNQk9MKHBjaV9yZWVuYWJsZV9kZXZpY2UpOwogRVhQT1JUX1NZTUJPTChwY2lfZW5hYmxlX2RldmljZV9pbyk7CiBFWFBPUlRfU1lNQk9MKHBjaV9lbmFibGVfZGV2aWNlX21lbSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wY2llL2Flci9hZXJkcnYuYyBiL2RyaXZlcnMvcGNpL3BjaWUvYWVyL2FlcmRydi5jCmluZGV4IDJjZThmOWMuLjQwYzNjYzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3BjaWUvYWVyL2FlcmRydi5jCisrKyBiL2RyaXZlcnMvcGNpL3BjaWUvYWVyL2FlcmRydi5jCkBAIC0xNyw2ICsxNyw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvcG0uaD4KQEAgLTUyLDcgKzUzLDcgQEAKIAogc3RhdGljIHN0cnVjdCBwY2llX3BvcnRfc2VydmljZV9kcml2ZXIgYWVyZHJpdmVyID0gewogCS5uYW1lCQk9ICJhZXIiLAotCS5wb3J0X3R5cGUJPSBQQ0lFX0FOWV9QT1JULAorCS5wb3J0X3R5cGUJPSBQQ0lFX1JDX1BPUlQsCiAJLnNlcnZpY2UJPSBQQ0lFX1BPUlRfU0VSVklDRV9BRVIsCiAKIAkucHJvYmUJCT0gYWVyX3Byb2JlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpZS9wb3J0ZHJ2X3BjaS5jIGIvZHJpdmVycy9wY2kvcGNpZS9wb3J0ZHJ2X3BjaS5jCmluZGV4IDZkZjVjOTguLmY2MzVlNDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3BjaWUvcG9ydGRydl9wY2kuYworKysgYi9kcml2ZXJzL3BjaS9wY2llL3BvcnRkcnZfcGNpLmMKQEAgLTMwLDcgKzMwLDYgQEAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAogLyogZ2xvYmFsIGRhdGEgKi8KLXN0YXRpYyBjb25zdCBjaGFyIGRldmljZV9uYW1lW10gPSAicGNpZXBvcnQtZHJpdmVyIjsKIAogc3RhdGljIGludCBwY2llX3BvcnRkcnZfcmVzdG9yZV9jb25maWcoc3RydWN0IHBjaV9kZXYgKmRldikKIHsKQEAgLTI2Miw3ICsyNjEsNyBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHBjaWVfcG9ydGRyaXZlciA9IHsKLQkubmFtZQkJPSAoY2hhciAqKWRldmljZV9uYW1lLAorCS5uYW1lCQk9ICJwY2llcG9ydCIsCiAJLmlkX3RhYmxlCT0gJnBvcnRfcGNpX2lkc1swXSwKIAogCS5wcm9iZQkJPSBwY2llX3BvcnRkcnZfcHJvYmUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9xdWlya3MuYyBiL2RyaXZlcnMvcGNpL3F1aXJrcy5jCmluZGV4IDYwOTlmYWMuLjI0NWQyY2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3F1aXJrcy5jCisrKyBiL2RyaXZlcnMvcGNpL3F1aXJrcy5jCkBAIC02NzAsNiArNjcwLDI1IEBACiB9CiBERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoUENJX1ZFTkRPUl9JRF9WSUEsCVBDSV9ERVZJQ0VfSURfVklBXzgyMzUsCXF1aXJrX3Z0ODIzNV9hY3BpKTsKIAorLyoKKyAqIFRJIFhJTzIwMDBhIFBDSWUtUENJIEJyaWRnZSBlcnJvbmVvdXNseSByZXBvcnRzIGl0IHN1cHBvcnRzIGZhc3QgYmFjay10by1iYWNrOgorICoJRGlzYWJsZSBmYXN0IGJhY2stdG8tYmFjayBvbiB0aGUgc2Vjb25kYXJ5IGJ1cyBzZWdtZW50CisgKi8KK3N0YXRpYyB2b2lkIF9fZGV2aW5pdCBxdWlya194aW8yMDAwYShzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCXN0cnVjdCBwY2lfZGV2ICpwZGV2OworCXUxNiBjb21tYW5kOworCisJZGV2X3dhcm4oJmRldi0+ZGV2LCAiVEkgWElPMjAwMGEgcXVpcmsgZGV0ZWN0ZWQ7ICIKKwkJInNlY29uZGFyeSBidXMgZmFzdCBiYWNrLXRvLWJhY2sgdHJhbnNmZXJzIGRpc2FibGVkXG4iKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBkZXYsICZkZXYtPnN1Ym9yZGluYXRlLT5kZXZpY2VzLCBidXNfbGlzdCkgeworCQlwY2lfcmVhZF9jb25maWdfd29yZChwZGV2LCBQQ0lfQ09NTUFORCwgJmNvbW1hbmQpOworCQlpZiAoY29tbWFuZCAmIFBDSV9DT01NQU5EX0ZBU1RfQkFDSykKKwkJCXBjaV93cml0ZV9jb25maWdfd29yZChwZGV2LCBQQ0lfQ09NTUFORCwgY29tbWFuZCAmIH5QQ0lfQ09NTUFORF9GQVNUX0JBQ0spOworCX0KK30KK0RFQ0xBUkVfUENJX0ZJWFVQX0ZJTkFMKFBDSV9WRU5ET1JfSURfVEksIFBDSV9ERVZJQ0VfSURfVElfWElPMjAwMEEsCisJCQlxdWlya194aW8yMDAwYSk7CiAKICNpZmRlZiBDT05GSUdfWDg2X0lPX0FQSUMgCiAKQEAgLTk5MCw3ICsxMDA5LDcgQEAKIAogc3RhdGljIHZvaWQgX19kZXZpbml0IHF1aXJrX2FtZF9pZGVfbW9kZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKLQkvKiBzZXQgU0JYMDAgU0FUQSBpbiBJREUgbW9kZSB0byBBSENJIG1vZGUgKi8KKwkvKiBzZXQgU0JYMDAvSHVkc29uLTIgU0FUQSBpbiBJREUgbW9kZSB0byBBSENJIG1vZGUgKi8KIAl1OCB0bXA7CiAKIAlwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LCBQQ0lfQ0xBU1NfREVWSUNFLCAmdG1wKTsKQEAgLTEwMDksOCArMTAyOCw4IEBACiBERUNMQVJFX1BDSV9GSVhVUF9SRVNVTUVfRUFSTFkoUENJX1ZFTkRPUl9JRF9BVEksIFBDSV9ERVZJQ0VfSURfQVRJX0lYUDYwMF9TQVRBLCBxdWlya19hbWRfaWRlX21vZGUpOwogREVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKFBDSV9WRU5ET1JfSURfQVRJLCBQQ0lfREVWSUNFX0lEX0FUSV9JWFA3MDBfU0FUQSwgcXVpcmtfYW1kX2lkZV9tb2RlKTsKIERFQ0xBUkVfUENJX0ZJWFVQX1JFU1VNRV9FQVJMWShQQ0lfVkVORE9SX0lEX0FUSSwgUENJX0RFVklDRV9JRF9BVElfSVhQNzAwX1NBVEEsIHF1aXJrX2FtZF9pZGVfbW9kZSk7Ci1ERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoUENJX1ZFTkRPUl9JRF9BTUQsIFBDSV9ERVZJQ0VfSURfQU1EX1NCOTAwX1NBVEFfSURFLCBxdWlya19hbWRfaWRlX21vZGUpOwotREVDTEFSRV9QQ0lfRklYVVBfUkVTVU1FX0VBUkxZKFBDSV9WRU5ET1JfSURfQU1ELCBQQ0lfREVWSUNFX0lEX0FNRF9TQjkwMF9TQVRBX0lERSwgcXVpcmtfYW1kX2lkZV9tb2RlKTsKK0RFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUihQQ0lfVkVORE9SX0lEX0FNRCwgUENJX0RFVklDRV9JRF9BTURfSFVEU09OMl9TQVRBX0lERSwgcXVpcmtfYW1kX2lkZV9tb2RlKTsKK0RFQ0xBUkVfUENJX0ZJWFVQX1JFU1VNRV9FQVJMWShQQ0lfVkVORE9SX0lEX0FNRCwgUENJX0RFVklDRV9JRF9BTURfSFVEU09OMl9TQVRBX0lERSwgcXVpcmtfYW1kX2lkZV9tb2RlKTsKIAogLyoKICAqCVNlcnZlcndvcmtzIENTQjUgSURFIGRvZXMgbm90IGZ1bGx5IHN1cHBvcnQgbmF0aXZlIG1vZGUKQEAgLTI1NzIsNiArMjU5MSwxOSBAQAogCX0KIAlwY2lfZG9fZml4dXBzKGRldiwgc3RhcnQsIGVuZCk7CiB9CisKK3N0YXRpYyBpbnQgX19pbml0IHBjaV9hcHBseV9maW5hbF9xdWlya3Modm9pZCkKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gTlVMTDsKKworCXdoaWxlICgoZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgZGV2KSkgIT0gTlVMTCkgeworCQlwY2lfZml4dXBfZGV2aWNlKHBjaV9maXh1cF9maW5hbCwgZGV2KTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworZnNfaW5pdGNhbGxfc3luYyhwY2lfYXBwbHlfZmluYWxfcXVpcmtzKTsKICNlbHNlCiB2b2lkIHBjaV9maXh1cF9kZXZpY2UoZW51bSBwY2lfZml4dXBfcGFzcyBwYXNzLCBzdHJ1Y3QgcGNpX2RldiAqZGV2KSB7fQogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9zZXR1cC1yZXMuYyBiL2RyaXZlcnMvcGNpL3NldHVwLXJlcy5jCmluZGV4IDcwNmY4MmQuLmM1NDUyNmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3NldHVwLXJlcy5jCisrKyBiL2RyaXZlcnMvcGNpL3NldHVwLXJlcy5jCkBAIC0yMDUsNDMgKzIwNSw2IEBACiAJcmV0dXJuIHJldDsKIH0KIAotI2lmIDAKLWludCBwY2lfYXNzaWduX3Jlc291cmNlX2ZpeGVkKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCByZXNubykKLXsKLQlzdHJ1Y3QgcGNpX2J1cyAqYnVzID0gZGV2LT5idXM7Ci0Jc3RydWN0IHJlc291cmNlICpyZXMgPSBkZXYtPnJlc291cmNlICsgcmVzbm87Ci0JdW5zaWduZWQgaW50IHR5cGVfbWFzazsKLQlpbnQgaSwgcmV0ID0gLUVCVVNZOwotCi0JdHlwZV9tYXNrID0gSU9SRVNPVVJDRV9JTyB8IElPUkVTT1VSQ0VfTUVNIHwgSU9SRVNPVVJDRV9QUkVGRVRDSDsKLQotCWZvciAoaSA9IDA7IGkgPCBQQ0lfQlVTX05VTV9SRVNPVVJDRVM7IGkrKykgewotCQlzdHJ1Y3QgcmVzb3VyY2UgKnIgPSBidXMtPnJlc291cmNlW2ldOwotCQlpZiAoIXIpCi0JCQljb250aW51ZTsKLQotCQkvKiB0eXBlX21hc2sgbXVzdCBtYXRjaCAqLwotCQlpZiAoKHJlcy0+ZmxhZ3MgXiByLT5mbGFncykgJiB0eXBlX21hc2spCi0JCQljb250aW51ZTsKLQotCQlyZXQgPSByZXF1ZXN0X3Jlc291cmNlKHIsIHJlcyk7Ci0KLQkJaWYgKHJldCA9PSAwKQotCQkJYnJlYWs7Ci0JfQotCi0JaWYgKHJldCkgewotCQlkZXZfZXJyKCZkZXYtPmRldiwgIkJBUiAlZDogY2FuJ3QgYWxsb2NhdGUgJXMgcmVzb3VyY2UgJXBSXG4iLAotCQkJcmVzbm8sIHJlcy0+ZmxhZ3MgJiBJT1JFU09VUkNFX0lPID8gIkkvTyIgOiAibWVtIiwgcmVzKTsKLQl9IGVsc2UgaWYgKHJlc25vIDwgUENJX0JSSURHRV9SRVNPVVJDRVMpIHsKLQkJcGNpX3VwZGF0ZV9yZXNvdXJjZShkZXYsIHJlc25vKTsKLQl9Ci0KLQlyZXR1cm4gcmV0OwotfQotRVhQT1JUX1NZTUJPTF9HUEwocGNpX2Fzc2lnbl9yZXNvdXJjZV9maXhlZCk7Ci0jZW5kaWYKLQogLyogU29ydCByZXNvdXJjZXMgYnkgYWxpZ25tZW50ICovCiB2b2lkIHBkZXZfc29ydF9yZXNvdXJjZXMoc3RydWN0IHBjaV9kZXYgKmRldiwgc3RydWN0IHJlc291cmNlX2xpc3QgKmhlYWQpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9LY29uZmlnIGIvZHJpdmVycy9wY21jaWEvS2NvbmZpZwppbmRleCBmYmY5NjViLi4xN2YzOGE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9LY29uZmlnCisrKyBiL2RyaXZlcnMvcGNtY2lhL0tjb25maWcKQEAgLTE5Miw2ICsxOTIsMTAgQEAKIAl0cmlzdGF0ZSAiQXUxeDAwIHBjbWNpYSBzdXBwb3J0IgogCWRlcGVuZHMgb24gU09DX0FVMVgwMCAmJiBQQ01DSUEKIAorY29uZmlnIFBDTUNJQV9CQ002M1hYCisJdHJpc3RhdGUgImJjbTYzeHggcGNtY2lhIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBCQ002M1hYICYmIFBDTUNJQQorCiBjb25maWcgUENNQ0lBX1NBMTEwMAogCXRyaXN0YXRlICJTQTExMDAgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIEFSTSAmJiBBUkNIX1NBMTEwMCAmJiBQQ01DSUEKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL01ha2VmaWxlIGIvZHJpdmVycy9wY21jaWEvTWFrZWZpbGUKaW5kZXggMDQ3Mzk0ZC4uYTAzYTM4YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9wY21jaWEvTWFrZWZpbGUKQEAgLTI3LDYgKzI3LDcgQEAKIG9iai0kKENPTkZJR19NMzJSX1BDQykJCQkJKz0gbTMycl9wY2Mubwogb2JqLSQoQ09ORklHX00zMlJfQ0ZDKQkJCQkrPSBtMzJyX2NmYy5vCiBvYmotJChDT05GSUdfUENNQ0lBX0FVMVgwMCkJCQkrPSBhdTF4MDBfc3Mubworb2JqLSQoQ09ORklHX1BDTUNJQV9CQ002M1hYKQkJCSs9IGJjbTYzeHhfcGNtY2lhLm8KIG9iai0kKENPTkZJR19QQ01DSUFfVlJDNDE3MSkJCQkrPSB2cmM0MTcxX2NhcmQubwogb2JqLSQoQ09ORklHX1BDTUNJQV9WUkM0MTczKQkJCSs9IHZyYzQxNzNfY2FyZHUubwogb2JqLSQoQ09ORklHX09NQVBfQ0YpCQkJCSs9IG9tYXBfY2YubwpAQCAtNzEsNiArNzIsNyBAQAogcHhhMnh4LW9iai0kKENPTkZJR19BUkNIX1ZJUEVSKQkJCSs9IHB4YTJ4eF92aXBlci5vCiBweGEyeHgtb2JqLSQoQ09ORklHX1RSSVpFUFNfUENNQ0lBKQkJKz0gcHhhMnh4X3RyaXplcHM0Lm8KIHB4YTJ4eC1vYmotJChDT05GSUdfTUFDSF9QQUxNVFgpCQkrPSBweGEyeHhfcGFsbXR4Lm8KK3B4YTJ4eC1vYmotJChDT05GSUdfTUFDSF9QQUxNVEMpCQkrPSBweGEyeHhfcGFsbXRjLm8KIHB4YTJ4eC1vYmotJChDT05GSUdfTUFDSF9QQUxNTEQpCQkrPSBweGEyeHhfcGFsbWxkLm8KIHB4YTJ4eC1vYmotJChDT05GSUdfTUFDSF9FNzQwKQkJCSs9IHB4YTJ4eF9lNzQwLm8KIHB4YTJ4eC1vYmotJChDT05GSUdfTUFDSF9TVEFSR0FURTIpCQkrPSBweGEyeHhfc3RhcmdhdGUyLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL2F0OTFfY2YuYyBiL2RyaXZlcnMvcGNtY2lhL2F0OTFfY2YuYwppbmRleCA5ZTExNDBmLi5lMWRjY2VkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9hdDkxX2NmLmMKKysrIGIvZHJpdmVycy9wY21jaWEvYXQ5MV9jZi5jCkBAIC0zNjMsNyArMzYzLDcgQEAKIAlzdHJ1Y3QgYXQ5MV9jZl9zb2NrZXQJKmNmID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IGF0OTFfY2ZfZGF0YQkqYm9hcmQgPSBjZi0+Ym9hcmQ7CiAKLQlwY21jaWFfc29ja2V0X2Rldl9zdXNwZW5kKCZwZGV2LT5kZXYsIG1lc2cpOworCXBjbWNpYV9zb2NrZXRfZGV2X3N1c3BlbmQoJnBkZXYtPmRldik7CiAJaWYgKGRldmljZV9tYXlfd2FrZXVwKCZwZGV2LT5kZXYpKSB7CiAJCWVuYWJsZV9pcnFfd2FrZShib2FyZC0+ZGV0X3Bpbik7CiAJCWlmIChib2FyZC0+aXJxX3BpbikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL2F1MTAwMF9nZW5lcmljLmMgYi9kcml2ZXJzL3BjbWNpYS9hdTEwMDBfZ2VuZXJpYy5jCmluZGV4IDkwMDEzMzQuLjAyMDg4NzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL2F1MTAwMF9nZW5lcmljLmMKKysrIGIvZHJpdmVycy9wY21jaWEvYXUxMDAwX2dlbmVyaWMuYwpAQCAtNTE1LDcgKzUxNSw3IEBACiBzdGF0aWMgaW50IGF1MXgwMF9kcnZfcGNtY2lhX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LAogCQkJCSAgICAgcG1fbWVzc2FnZV90IHN0YXRlKQogewotCXJldHVybiBwY21jaWFfc29ja2V0X2Rldl9zdXNwZW5kKCZkZXYtPmRldiwgc3RhdGUpOworCXJldHVybiBwY21jaWFfc29ja2V0X2Rldl9zdXNwZW5kKCZkZXYtPmRldik7CiB9CiAKIHN0YXRpYyBpbnQgYXUxeDAwX2Rydl9wY21jaWFfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL2JjbTYzeHhfcGNtY2lhLmMgYi9kcml2ZXJzL3BjbWNpYS9iY202M3h4X3BjbWNpYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjODhhM2IKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3BjbWNpYS9iY202M3h4X3BjbWNpYS5jCkBAIC0wLDAgKzEsNTM2IEBACisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IE1heGltZSBCaXpvbiA8bWJpem9uQGZyZWVib3guZnI+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisKKyNpbmNsdWRlIDxiY202M3h4X3JlZ3MuaD4KKyNpbmNsdWRlIDxiY202M3h4X2lvLmg+CisjaW5jbHVkZSAiYmNtNjN4eF9wY21jaWEuaCIKKworI2RlZmluZSBQRlgJImJjbTYzeHhfcGNtY2lhOiAiCisKKyNpZmRlZiBDT05GSUdfQ0FSREJVUworLyogaWYgY2FyZGJ1cyBpcyB1c2VkLCBwbGF0Zm9ybSBkZXZpY2UgbmVlZHMgcmVmZXJlbmNlIHRvIGFjdHVhbCBwY2kKKyAqIGRldmljZSAqLworc3RhdGljIHN0cnVjdCBwY2lfZGV2ICpiY202M3h4X2NiX2RldjsKKyNlbmRpZgorCisvKgorICogcmVhZC93cml0ZSBoZWxwZXIgZm9yIHBjbWNpYSByZWdzCisgKi8KK3N0YXRpYyBpbmxpbmUgdTMyIHBjbWNpYV9yZWFkbChzdHJ1Y3QgYmNtNjN4eF9wY21jaWFfc29ja2V0ICpza3QsIHUzMiBvZmYpCit7CisJcmV0dXJuIGJjbV9yZWFkbChza3QtPmJhc2UgKyBvZmYpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcGNtY2lhX3dyaXRlbChzdHJ1Y3QgYmNtNjN4eF9wY21jaWFfc29ja2V0ICpza3QsCisJCQkJIHUzMiB2YWwsIHUzMiBvZmYpCit7CisJYmNtX3dyaXRlbCh2YWwsIHNrdC0+YmFzZSArIG9mZik7Cit9CisKKy8qCisgKiBUaGlzIGNhbGxiYWNrIHNob3VsZCAocmUtKWluaXRpYWxpc2UgdGhlIHNvY2tldCwgdHVybiBvbiBzdGF0dXMKKyAqIGludGVycnVwdHMgYW5kIFBDTUNJQSBidXMsIGFuZCB3YWl0IGZvciBwb3dlciB0byBzdGFiaWxpc2Ugc28gdGhhdAorICogdGhlIGNhcmQgc3RhdHVzIHNpZ25hbHMgcmVwb3J0IGNvcnJlY3RseS4KKyAqCisgKiBIYXJkd2FyZSBjYW5ub3QgZG8gdGhhdC4KKyAqLworc3RhdGljIGludCBiY202M3h4X3BjbWNpYV9zb2NrX2luaXQoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNvY2spCit7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGlzIGNhbGxiYWNrIHNob3VsZCByZW1vdmUgcG93ZXIgb24gdGhlIHNvY2tldCwgZGlzYWJsZSBJUlFzIGZyb20KKyAqIHRoZSBjYXJkLCB0dXJuIG9mZiBzdGF0dXMgaW50ZXJydXB0cywgYW5kIGRpc2FibGUgdGhlIFBDTUNJQSBidXMuCisgKgorICogSGFyZHdhcmUgY2Fubm90IGRvIHRoYXQuCisgKi8KK3N0YXRpYyBpbnQgYmNtNjN4eF9wY21jaWFfc3VzcGVuZChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc29jaykKK3sKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEltcGxlbWVudHMgdGhlIHNldF9zb2NrZXQoKSBvcGVyYXRpb24gZm9yIHRoZSBpbi1rZXJuZWwgUENNQ0lBCisgKiBzZXJ2aWNlIChmb3JtZXJseSBTU19TZXRTb2NrZXQgaW4gQ2FyZCBTZXJ2aWNlcykuIFdlIG1vcmUgb3IKKyAqIGxlc3MgcHVudCBhbGwgb2YgdGhpcyB3b3JrIGFuZCBsZXQgdGhlIGtlcm5lbCBoYW5kbGUgdGhlIGRldGFpbHMKKyAqIG9mIHBvd2VyIGNvbmZpZ3VyYXRpb24sIHJlc2V0LCAmYy4gV2UgYWxzbyByZWNvcmQgdGhlIHZhbHVlIG9mCisgKiBgc3RhdGUnIGluIG9yZGVyIHRvIHJlZ3VyZ2l0YXRlIGl0IHRvIHRoZSBQQ01DSUEgY29yZSBsYXRlci4KKyAqLworc3RhdGljIGludCBiY202M3h4X3BjbWNpYV9zZXRfc29ja2V0KHN0cnVjdCBwY21jaWFfc29ja2V0ICpzb2NrLAorCQkJCSAgICAgc29ja2V0X3N0YXRlX3QgKnN0YXRlKQoreworCXN0cnVjdCBiY202M3h4X3BjbWNpYV9zb2NrZXQgKnNrdDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUzMiB2YWw7CisKKwlza3QgPSBzb2NrLT5kcml2ZXJfZGF0YTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZza3QtPmxvY2ssIGZsYWdzKTsKKworCS8qIG5vdGU6IGhhcmR3YXJlIGNhbm5vdCBjb250cm9sIHNvY2tldCBwb3dlciwgc28gd2Ugd2lsbAorCSAqIGFsd2F5cyByZXBvcnQgU1NfUE9XRVJPTiAqLworCisJLyogYXBwbHkgc29ja2V0IHJlc2V0ICovCisJdmFsID0gcGNtY2lhX3JlYWRsKHNrdCwgUENNQ0lBX0MxX1JFRyk7CisJaWYgKHN0YXRlLT5mbGFncyAmIFNTX1JFU0VUKQorCQl2YWwgfD0gUENNQ0lBX0MxX1JFU0VUX01BU0s7CisJZWxzZQorCQl2YWwgJj0gflBDTUNJQV9DMV9SRVNFVF9NQVNLOworCisJLyogcmV2ZXJzZSByZXNldCBsb2dpYyBmb3IgY2FyZGJ1cyBjYXJkICovCisJaWYgKHNrdC0+Y2FyZF9kZXRlY3RlZCAmJiAoc2t0LT5jYXJkX3R5cGUgJiBDQVJEX0NBUkRCVVMpKQorCQl2YWwgXj0gUENNQ0lBX0MxX1JFU0VUX01BU0s7CisKKwlwY21jaWFfd3JpdGVsKHNrdCwgdmFsLCBQQ01DSUFfQzFfUkVHKTsKKworCS8qIGtlZXAgcmVxdWVzdGVkIHN0YXRlIGZvciBldmVudCByZXBvcnRpbmcgKi8KKwlza3QtPnJlcXVlc3RlZF9zdGF0ZSA9ICpzdGF0ZTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNrdC0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBpZGVudGl0eSBjYXJkdHlwZSBmcm9tIFZTWzEyXSBpbnB1dCwgQ0RbMTJdIGlucHV0IHdoaWxlIG9ubHkgVlMyIGlzCisgKiBmbG9hdGluZywgYW5kIENEWzEyXSBpbnB1dCB3aGlsZSBvbmx5IFZTMSBpcyBmbG9hdGluZworICovCitlbnVtIHsKKwlJTl9WUzEgPSAoMSA8PCAwKSwKKwlJTl9WUzIgPSAoMSA8PCAxKSwKKwlJTl9DRDFfVlMySCA9ICgxIDw8IDIpLAorCUlOX0NEMl9WUzJIID0gKDEgPDwgMyksCisJSU5fQ0QxX1ZTMUggPSAoMSA8PCA0KSwKKwlJTl9DRDJfVlMxSCA9ICgxIDw8IDUpLAorfTsKKworc3RhdGljIGNvbnN0IHU4IHZzY2RfdG9fY2FyZHR5cGVbXSA9IHsKKworCS8qIFZTMSBmbG9hdCwgVlMyIGZsb2F0ICovCisJW0lOX1ZTMSB8IElOX1ZTMl0gPSAoQ0FSRF9QQ0NBUkQgfCBDQVJEXzVWKSwKKworCS8qIFZTMSBncm91bmRlZCwgVlMyIGZsb2F0ICovCisJW0lOX1ZTMl0gPSAoQ0FSRF9QQ0NBUkQgfCBDQVJEXzVWIHwgQ0FSRF8zViksCisKKwkvKiBWUzEgZ3JvdW5kZWQsIFZTMiBncm91bmRlZCAqLworCVswXSA9IChDQVJEX1BDQ0FSRCB8IENBUkRfNVYgfCBDQVJEXzNWIHwgQ0FSRF9YViksCisKKwkvKiBWUzEgdGllZCB0byBDRDEsIFZTMiBmbG9hdCAqLworCVtJTl9WUzEgfCBJTl9WUzIgfCBJTl9DRDFfVlMxSF0gPSAoQ0FSRF9DQVJEQlVTIHwgQ0FSRF8zViksCisKKwkvKiBWUzEgZ3JvdW5kZWQsIFZTMiB0aWVkIHRvIENEMiAqLworCVtJTl9WUzIgfCBJTl9DRDJfVlMySF0gPSAoQ0FSRF9DQVJEQlVTIHwgQ0FSRF8zViB8IENBUkRfWFYpLAorCisJLyogVlMxIHRpZWQgdG8gQ0QyLCBWUzIgZ3JvdW5kZWQgKi8KKwlbSU5fVlMxIHwgSU5fQ0QyX1ZTMUhdID0gKENBUkRfQ0FSREJVUyB8IENBUkRfM1YgfCBDQVJEX1hWIHwgQ0FSRF9ZViksCisKKwkvKiBWUzEgZmxvYXQsIFZTMiBncm91bmRlZCAqLworCVtJTl9WUzFdID0gKENBUkRfUENDQVJEIHwgQ0FSRF9YViksCisKKwkvKiBWUzEgZmxvYXQsIFZTMiB0aWVkIHRvIENEMiAqLworCVtJTl9WUzEgfCBJTl9WUzIgfCBJTl9DRDJfVlMySF0gPSAoQ0FSRF9DQVJEQlVTIHwgQ0FSRF8zViksCisKKwkvKiBWUzEgZmxvYXQsIFZTMiB0aWVkIHRvIENEMSAqLworCVtJTl9WUzEgfCBJTl9WUzIgfCBJTl9DRDFfVlMySF0gPSAoQ0FSRF9DQVJEQlVTIHwgQ0FSRF9YViB8IENBUkRfWVYpLAorCisJLyogVlMxIHRpZWQgdG8gQ0QyLCBWUzIgZmxvYXQgKi8KKwlbSU5fVlMxIHwgSU5fVlMyIHwgSU5fQ0QyX1ZTMUhdID0gKENBUkRfQ0FSREJVUyB8IENBUkRfWVYpLAorCisJLyogVlMyIGdyb3VuZGVkLCBWUzEgaXMgdGllZCB0byBDRDEsIENEMiBpcyBncm91bmRlZCAqLworCVtJTl9WUzEgfCBJTl9DRDFfVlMxSF0gPSAwLCAvKiBpZ25vcmUgY2FyZGJheSAqLworfTsKKworLyoKKyAqIHBvbGwgaGFyZHdhcmUgdG8gY2hlY2sgY2FyZCBpbnNlcnRpb24gc3RhdHVzCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgX19nZXRfc29ja2V0X3N0YXR1cyhzdHJ1Y3QgYmNtNjN4eF9wY21jaWFfc29ja2V0ICpza3QpCit7CisJdW5zaWduZWQgaW50IHN0YXQ7CisJdTMyIHZhbDsKKworCXN0YXQgPSAwOworCisJLyogY2hlY2sgQ0QgZm9yIGNhcmQgcHJlc2VuY2UgKi8KKwl2YWwgPSBwY21jaWFfcmVhZGwoc2t0LCBQQ01DSUFfQzFfUkVHKTsKKworCWlmICghKHZhbCAmIFBDTUNJQV9DMV9DRDFfTUFTSykgJiYgISh2YWwgJiBQQ01DSUFfQzFfQ0QyX01BU0spKQorCQlzdGF0IHw9IFNTX0RFVEVDVDsKKworCS8qIGlmIG5ldyBpbnNlcnRpb24sIGRldGVjdCBjYXJkdHlwZSAqLworCWlmICgoc3RhdCAmIFNTX0RFVEVDVCkgJiYgIXNrdC0+Y2FyZF9kZXRlY3RlZCkgeworCQl1bnNpZ25lZCBpbnQgc3RhdCA9IDA7CisKKwkJLyogZmxvYXQgVlMxLCBmbG9hdCBWUzIgKi8KKwkJdmFsIHw9IFBDTUNJQV9DMV9WUzFPRV9NQVNLOworCQl2YWwgfD0gUENNQ0lBX0MxX1ZTMk9FX01BU0s7CisJCXBjbWNpYV93cml0ZWwoc2t0LCB2YWwsIFBDTUNJQV9DMV9SRUcpOworCisJCS8qIHdhaXQgZm9yIG91dHB1dCB0byBzdGFiaWxpemUgYW5kIHJlYWQgVlNbMTJdICovCisJCXVkZWxheSgxMCk7CisJCXZhbCA9IHBjbWNpYV9yZWFkbChza3QsIFBDTUNJQV9DMV9SRUcpOworCQlzdGF0IHw9ICh2YWwgJiBQQ01DSUFfQzFfVlMxX01BU0spID8gSU5fVlMxIDogMDsKKwkJc3RhdCB8PSAodmFsICYgUENNQ0lBX0MxX1ZTMl9NQVNLKSA/IElOX1ZTMiA6IDA7CisKKwkJLyogZHJpdmUgVlMxIGxvdywgZmxvYXQgVlMyICovCisJCXZhbCAmPSB+UENNQ0lBX0MxX1ZTMU9FX01BU0s7CisJCXZhbCB8PSBQQ01DSUFfQzFfVlMyT0VfTUFTSzsKKwkJcGNtY2lhX3dyaXRlbChza3QsIHZhbCwgUENNQ0lBX0MxX1JFRyk7CisKKwkJLyogd2FpdCBmb3Igb3V0cHV0IHRvIHN0YWJpbGl6ZSBhbmQgcmVhZCBDRFsxMl0gKi8KKwkJdWRlbGF5KDEwKTsKKwkJdmFsID0gcGNtY2lhX3JlYWRsKHNrdCwgUENNQ0lBX0MxX1JFRyk7CisJCXN0YXQgfD0gKHZhbCAmIFBDTUNJQV9DMV9DRDFfTUFTSykgPyBJTl9DRDFfVlMySCA6IDA7CisJCXN0YXQgfD0gKHZhbCAmIFBDTUNJQV9DMV9DRDJfTUFTSykgPyBJTl9DRDJfVlMySCA6IDA7CisKKwkJLyogZmxvYXQgVlMxLCBkcml2ZSBWUzIgbG93ICovCisJCXZhbCB8PSBQQ01DSUFfQzFfVlMxT0VfTUFTSzsKKwkJdmFsICY9IH5QQ01DSUFfQzFfVlMyT0VfTUFTSzsKKwkJcGNtY2lhX3dyaXRlbChza3QsIHZhbCwgUENNQ0lBX0MxX1JFRyk7CisKKwkJLyogd2FpdCBmb3Igb3V0cHV0IHRvIHN0YWJpbGl6ZSBhbmQgcmVhZCBDRFsxMl0gKi8KKwkJdWRlbGF5KDEwKTsKKwkJdmFsID0gcGNtY2lhX3JlYWRsKHNrdCwgUENNQ0lBX0MxX1JFRyk7CisJCXN0YXQgfD0gKHZhbCAmIFBDTUNJQV9DMV9DRDFfTUFTSykgPyBJTl9DRDFfVlMxSCA6IDA7CisJCXN0YXQgfD0gKHZhbCAmIFBDTUNJQV9DMV9DRDJfTUFTSykgPyBJTl9DRDJfVlMxSCA6IDA7CisKKwkJLyogZ3Vlc3MgY2FyZHR5cGUgZnJvbSBhbGwgdGhpcyAqLworCQlza3QtPmNhcmRfdHlwZSA9IHZzY2RfdG9fY2FyZHR5cGVbc3RhdF07CisJCWlmICghc2t0LT5jYXJkX3R5cGUpCisJCQlkZXZfZXJyKCZza3QtPnNvY2tldC5kZXYsICJ1bnN1cHBvcnRlZCBjYXJkIHR5cGVcbiIpOworCisJCS8qIGRyaXZlIGJvdGggVlMgcGluIHRvIDAgYWdhaW4gKi8KKwkJdmFsICY9IH4oUENNQ0lBX0MxX1ZTMU9FX01BU0sgfCBQQ01DSUFfQzFfVlMyT0VfTUFTSyk7CisKKwkJLyogZW5hYmxlIGNvcnJlY3QgbG9naWMgKi8KKwkJdmFsICY9IH4oUENNQ0lBX0MxX0VOX1BDTUNJQV9NQVNLIHwgUENNQ0lBX0MxX0VOX0NBUkRCVVNfTUFTSyk7CisJCWlmIChza3QtPmNhcmRfdHlwZSAmIENBUkRfUENDQVJEKQorCQkJdmFsIHw9IFBDTUNJQV9DMV9FTl9QQ01DSUFfTUFTSzsKKwkJZWxzZQorCQkJdmFsIHw9IFBDTUNJQV9DMV9FTl9DQVJEQlVTX01BU0s7CisKKwkJcGNtY2lhX3dyaXRlbChza3QsIHZhbCwgUENNQ0lBX0MxX1JFRyk7CisJfQorCXNrdC0+Y2FyZF9kZXRlY3RlZCA9IChzdGF0ICYgU1NfREVURUNUKSA/IDEgOiAwOworCisJLyogcmVwb3J0IGNhcmQgdHlwZS92b2x0YWdlICovCisJaWYgKHNrdC0+Y2FyZF90eXBlICYgQ0FSRF9DQVJEQlVTKQorCQlzdGF0IHw9IFNTX0NBUkRCVVM7CisJaWYgKHNrdC0+Y2FyZF90eXBlICYgQ0FSRF8zVikKKwkJc3RhdCB8PSBTU18zVkNBUkQ7CisJaWYgKHNrdC0+Y2FyZF90eXBlICYgQ0FSRF9YVikKKwkJc3RhdCB8PSBTU19YVkNBUkQ7CisJc3RhdCB8PSBTU19QT1dFUk9OOworCisJaWYgKGdwaW9fZ2V0X3ZhbHVlKHNrdC0+cGQtPnJlYWR5X2dwaW8pKQorCQlzdGF0IHw9IFNTX1JFQURZOworCisJcmV0dXJuIHN0YXQ7Cit9CisKKy8qCisgKiBjb3JlIHJlcXVlc3QgdG8gZ2V0IGN1cnJlbnQgc29ja2V0IHN0YXR1cworICovCitzdGF0aWMgaW50IGJjbTYzeHhfcGNtY2lhX2dldF9zdGF0dXMoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNvY2ssCisJCQkJICAgICB1bnNpZ25lZCBpbnQgKnN0YXR1cykKK3sKKwlzdHJ1Y3QgYmNtNjN4eF9wY21jaWFfc29ja2V0ICpza3Q7CisKKwlza3QgPSBzb2NrLT5kcml2ZXJfZGF0YTsKKworCXNwaW5fbG9ja19iaCgmc2t0LT5sb2NrKTsKKwkqc3RhdHVzID0gX19nZXRfc29ja2V0X3N0YXR1cyhza3QpOworCXNwaW5fdW5sb2NrX2JoKCZza3QtPmxvY2spOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBzb2NrZXQgcG9sbGluZyB0aW1lciBjYWxsYmFjaworICovCitzdGF0aWMgdm9pZCBiY202M3h4X3BjbWNpYV9wb2xsKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3QgYmNtNjN4eF9wY21jaWFfc29ja2V0ICpza3Q7CisJdW5zaWduZWQgaW50IHN0YXQsIGV2ZW50czsKKworCXNrdCA9IChzdHJ1Y3QgYmNtNjN4eF9wY21jaWFfc29ja2V0ICopZGF0YTsKKworCXNwaW5fbG9ja19iaCgmc2t0LT5sb2NrKTsKKworCXN0YXQgPSBfX2dldF9zb2NrZXRfc3RhdHVzKHNrdCk7CisKKwkvKiBrZWVwIG9ubHkgY2hhbmdlZCBiaXRzLCBhbmQgbWFzayB3aXRoIHJlcXVpcmVkIG9uZSBmcm9tIHRoZQorCSAqIGNvcmUgKi8KKwlldmVudHMgPSAoc3RhdCBeIHNrdC0+b2xkX3N0YXR1cykgJiBza3QtPnJlcXVlc3RlZF9zdGF0ZS5jc2NfbWFzazsKKwlza3QtPm9sZF9zdGF0dXMgPSBzdGF0OworCXNwaW5fdW5sb2NrX2JoKCZza3QtPmxvY2spOworCisJaWYgKGV2ZW50cykKKwkJcGNtY2lhX3BhcnNlX2V2ZW50cygmc2t0LT5zb2NrZXQsIGV2ZW50cyk7CisKKwltb2RfdGltZXIoJnNrdC0+dGltZXIsCisJCSAgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoQkNNNjNYWF9QQ01DSUFfUE9MTF9SQVRFKSk7Cit9CisKK3N0YXRpYyBpbnQgYmNtNjN4eF9wY21jaWFfc2V0X2lvX21hcChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc29jaywKKwkJCQkgICAgIHN0cnVjdCBwY2NhcmRfaW9fbWFwICptYXApCit7CisJLyogdGhpcyBkb2Vzbid0IHNlZW0gdG8gYmUgY2FsbGVkIGJ5IHBjbWNpYSBsYXllciBpZiBzdGF0aWMKKwkgKiBtYXBwaW5nIGlzIHVzZWQgKi8KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBiY202M3h4X3BjbWNpYV9zZXRfbWVtX21hcChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc29jaywKKwkJCQkgICAgICBzdHJ1Y3QgcGNjYXJkX21lbV9tYXAgKm1hcCkKK3sKKwlzdHJ1Y3QgYmNtNjN4eF9wY21jaWFfc29ja2V0ICpza3Q7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisKKwlza3QgPSBzb2NrLT5kcml2ZXJfZGF0YTsKKwlpZiAobWFwLT5mbGFncyAmIE1BUF9BVFRSSUIpCisJCXJlcyA9IHNrdC0+YXR0cl9yZXM7CisJZWxzZQorCQlyZXMgPSBza3QtPmNvbW1vbl9yZXM7CisKKwltYXAtPnN0YXRpY19zdGFydCA9IHJlcy0+c3RhcnQgKyBtYXAtPmNhcmRfc3RhcnQ7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGNjYXJkX29wZXJhdGlvbnMgYmNtNjN4eF9wY21jaWFfb3BlcmF0aW9ucyA9IHsKKwkuaW5pdAkJCT0gYmNtNjN4eF9wY21jaWFfc29ja19pbml0LAorCS5zdXNwZW5kCQk9IGJjbTYzeHhfcGNtY2lhX3N1c3BlbmQsCisJLmdldF9zdGF0dXMJCT0gYmNtNjN4eF9wY21jaWFfZ2V0X3N0YXR1cywKKwkuc2V0X3NvY2tldAkJPSBiY202M3h4X3BjbWNpYV9zZXRfc29ja2V0LAorCS5zZXRfaW9fbWFwCQk9IGJjbTYzeHhfcGNtY2lhX3NldF9pb19tYXAsCisJLnNldF9tZW1fbWFwCQk9IGJjbTYzeHhfcGNtY2lhX3NldF9tZW1fbWFwLAorfTsKKworLyoKKyAqIHJlZ2lzdGVyIHBjbWNpYSBzb2NrZXQgdG8gY29yZQorICovCitzdGF0aWMgaW50IF9fZGV2aW5pdCBiY202M3h4X2Rydl9wY21jaWFfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgYmNtNjN4eF9wY21jaWFfc29ja2V0ICpza3Q7CisJc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNvY2s7CisJc3RydWN0IHJlc291cmNlICpyZXMsICppcnFfcmVzOworCXVuc2lnbmVkIGludCByZWdtZW1fc2l6ZSA9IDAsIGlvbWVtX3NpemUgPSAwOworCXUzMiB2YWw7CisJaW50IHJldDsKKworCXNrdCA9IGt6YWxsb2Moc2l6ZW9mKCpza3QpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXNrdCkKKwkJcmV0dXJuIC1FTk9NRU07CisJc3Bpbl9sb2NrX2luaXQoJnNrdC0+bG9jayk7CisJc29jayA9ICZza3QtPnNvY2tldDsKKwlzb2NrLT5kcml2ZXJfZGF0YSA9IHNrdDsKKworCS8qIG1ha2Ugc3VyZSB3ZSBoYXZlIGFsbCByZXNvdXJjZXMgd2UgbmVlZCAqLworCXNrdC0+Y29tbW9uX3JlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMSk7CisJc2t0LT5hdHRyX3JlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMik7CisJaXJxX3JlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0lSUSwgMCk7CisJc2t0LT5wZCA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCWlmICghc2t0LT5jb21tb25fcmVzIHx8ICFza3QtPmF0dHJfcmVzIHx8ICFpcnFfcmVzIHx8ICFza3QtPnBkKSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gZXJyOworCX0KKworCS8qIHJlbWFwIHBjbWNpYSByZWdpc3RlcnMgKi8KKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCXJlZ21lbV9zaXplID0gcmVzb3VyY2Vfc2l6ZShyZXMpOworCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlZ21lbV9zaXplLCAiYmNtNjN4eF9wY21jaWEiKSkgeworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGVycjsKKwl9CisJc2t0LT5yZWdfcmVzID0gcmVzOworCisJc2t0LT5iYXNlID0gaW9yZW1hcChyZXMtPnN0YXJ0LCByZWdtZW1fc2l6ZSk7CisJaWYgKCFza3QtPmJhc2UpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnI7CisJfQorCisJLyogcmVtYXAgaW8gcmVnaXN0ZXJzICovCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAzKTsKKwlpb21lbV9zaXplID0gcmVzb3VyY2Vfc2l6ZShyZXMpOworCXNrdC0+aW9fYmFzZSA9IGlvcmVtYXAocmVzLT5zdGFydCwgaW9tZW1fc2l6ZSk7CisJaWYgKCFza3QtPmlvX2Jhc2UpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnI7CisJfQorCisJLyogcmVzb3VyY2VzIGFyZSBzdGF0aWMgKi8KKwlzb2NrLT5yZXNvdXJjZV9vcHMgPSAmcGNjYXJkX3N0YXRpY19vcHM7CisJc29jay0+b3BzID0gJmJjbTYzeHhfcGNtY2lhX29wZXJhdGlvbnM7CisJc29jay0+b3duZXIgPSBUSElTX01PRFVMRTsKKwlzb2NrLT5kZXYucGFyZW50ID0gJnBkZXYtPmRldjsKKwlzb2NrLT5mZWF0dXJlcyA9IFNTX0NBUF9TVEFUSUNfTUFQIHwgU1NfQ0FQX1BDQ0FSRDsKKwlzb2NrLT5pb19vZmZzZXQgPSAodW5zaWduZWQgbG9uZylza3QtPmlvX2Jhc2U7CisJc29jay0+cGNpX2lycSA9IGlycV9yZXMtPnN0YXJ0OworCisjaWZkZWYgQ09ORklHX0NBUkRCVVMKKwlzb2NrLT5jYl9kZXYgPSBiY202M3h4X2NiX2RldjsKKwlpZiAoYmNtNjN4eF9jYl9kZXYpCisJCXNvY2stPmZlYXR1cmVzIHw9IFNTX0NBUF9DQVJEQlVTOworI2VuZGlmCisKKwkvKiBhc3N1bWUgY29tbW9uICYgYXR0cmlidXRlIG1lbW9yeSBoYXZlIHRoZSBzYW1lIHNpemUgKi8KKwlzb2NrLT5tYXBfc2l6ZSA9IHJlc291cmNlX3NpemUoc2t0LT5jb21tb25fcmVzKTsKKworCS8qIGluaXRpYWxpemUgcG9sbGluZyB0aW1lciAqLworCXNldHVwX3RpbWVyKCZza3QtPnRpbWVyLCBiY202M3h4X3BjbWNpYV9wb2xsLCAodW5zaWduZWQgbG9uZylza3QpOworCisJLyogaW5pdGlhbGl6ZSAgcGNtY2lhICBjb250cm9sIHJlZ2lzdGVyLCAgZHJpdmUgIFZTWzEyXSB0byAgMCwKKwkgKiBsZWF2ZSBDQiBJRFNFTCB0byB0aGUgb2xkICB2YWx1ZSBzaW5jZSBpdCBpcyBzZXQgYnkgdGhlIFBDSQorCSAqIGxheWVyICovCisJdmFsID0gcGNtY2lhX3JlYWRsKHNrdCwgUENNQ0lBX0MxX1JFRyk7CisJdmFsICY9IFBDTUNJQV9DMV9DQklEU0VMX01BU0s7CisJdmFsIHw9IFBDTUNJQV9DMV9FTl9QQ01DSUFfR1BJT19NQVNLOworCXBjbWNpYV93cml0ZWwoc2t0LCB2YWwsIFBDTUNJQV9DMV9SRUcpOworCisJLyoKKwkgKiBIYXJkd2FyZSBoYXMgb25seSBvbmUgc2V0IG9mIHRpbWluZ3MgcmVnaXN0ZXJzLCBub3Qgb25lIGZvcgorCSAqIGVhY2ggbWVtb3J5IGFjY2VzcyB0eXBlLCBzbyB3ZSBjb25maWd1cmUgdGhlbSBmb3IgdGhlCisJICogc2xvd2VzdCBvbmU6IGF0dHJpYnV0ZSBtZW1vcnkuCisJICovCisJdmFsID0gUENNQ0lBX0MyX0RBVEExNl9NQVNLOworCXZhbCB8PSAxMCA8PCBQQ01DSUFfQzJfUldDT1VOVF9TSElGVDsKKwl2YWwgfD0gNiA8PCBQQ01DSUFfQzJfSU5BQ1RJVkVfU0hJRlQ7CisJdmFsIHw9IDMgPDwgUENNQ0lBX0MyX1NFVFVQX1NISUZUOworCXZhbCB8PSAzIDw8IFBDTUNJQV9DMl9IT0xEX1NISUZUOworCXBjbWNpYV93cml0ZWwoc2t0LCB2YWwsIFBDTUNJQV9DMl9SRUcpOworCisJcmV0ID0gcGNtY2lhX3JlZ2lzdGVyX3NvY2tldChzb2NrKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycjsKKworCS8qIHN0YXJ0IHBvbGxpbmcgc29ja2V0ICovCisJbW9kX3RpbWVyKCZza3QtPnRpbWVyLAorCQkgIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKEJDTTYzWFhfUENNQ0lBX1BPTExfUkFURSkpOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgc2t0KTsKKwlyZXR1cm4gMDsKKworZXJyOgorCWlmIChza3QtPmlvX2Jhc2UpCisJCWlvdW5tYXAoc2t0LT5pb19iYXNlKTsKKwlpZiAoc2t0LT5iYXNlKQorCQlpb3VubWFwKHNrdC0+YmFzZSk7CisJaWYgKHNrdC0+cmVnX3JlcykKKwkJcmVsZWFzZV9tZW1fcmVnaW9uKHNrdC0+cmVnX3Jlcy0+c3RhcnQsIHJlZ21lbV9zaXplKTsKKwlrZnJlZShza3QpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IGJjbTYzeHhfZHJ2X3BjbWNpYV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgYmNtNjN4eF9wY21jaWFfc29ja2V0ICpza3Q7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisKKwlza3QgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlkZWxfdGltZXJfc3luYygmc2t0LT50aW1lcik7CisJaW91bm1hcChza3QtPmJhc2UpOworCWlvdW5tYXAoc2t0LT5pb19iYXNlKTsKKwlyZXMgPSBza3QtPnJlZ19yZXM7CisJcmVsZWFzZV9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CisJa2ZyZWUoc2t0KTsKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IHBsYXRmb3JtX2RyaXZlciBiY202M3h4X3BjbWNpYV9kcml2ZXIgPSB7CisJLnByb2JlCT0gYmNtNjN4eF9kcnZfcGNtY2lhX3Byb2JlLAorCS5yZW1vdmUJPSBfX2RldmV4aXRfcChiY202M3h4X2Rydl9wY21jaWFfcmVtb3ZlKSwKKwkuZHJpdmVyCT0geworCQkubmFtZQk9ICJiY202M3h4X3BjbWNpYSIsCisJCS5vd25lciAgPSBUSElTX01PRFVMRSwKKwl9LAorfTsKKworI2lmZGVmIENPTkZJR19DQVJEQlVTCitzdGF0aWMgaW50IF9fZGV2aW5pdCBiY202M3h4X2NiX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpkZXYsCisJCQkJICAgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQoreworCS8qIGtlZXAgcGNpIGRldmljZSAqLworCWJjbTYzeHhfY2JfZGV2ID0gZGV2OworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmJjbTYzeHhfcGNtY2lhX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCBiY202M3h4X2NiX2V4aXQoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmYmNtNjN4eF9wY21jaWFfZHJpdmVyKTsKKwliY202M3h4X2NiX2RldiA9IE5VTEw7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBiY202M3h4X2NiX3RhYmxlW10gPSB7CisJeworCQkudmVuZG9yCQk9IFBDSV9WRU5ET1JfSURfQlJPQURDT00sCisJCS5kZXZpY2UJCT0gQkNNNjM0OF9DUFVfSUQsCisJCS5zdWJ2ZW5kb3IJPSBQQ0lfVkVORE9SX0lEX0JST0FEQ09NLAorCQkuc3ViZGV2aWNlCT0gUENJX0FOWV9JRCwKKwkJLmNsYXNzCQk9IFBDSV9DTEFTU19CUklER0VfQ0FSREJVUyA8PCA4LAorCQkuY2xhc3NfbWFzawk9IH4wLAorCX0sCisKKwl7CisJCS52ZW5kb3IJCT0gUENJX1ZFTkRPUl9JRF9CUk9BRENPTSwKKwkJLmRldmljZQkJPSBCQ002MzU4X0NQVV9JRCwKKwkJLnN1YnZlbmRvcgk9IFBDSV9WRU5ET1JfSURfQlJPQURDT00sCisJCS5zdWJkZXZpY2UJPSBQQ0lfQU5ZX0lELAorCQkuY2xhc3MJCT0gUENJX0NMQVNTX0JSSURHRV9DQVJEQlVTIDw8IDgsCisJCS5jbGFzc19tYXNrCT0gfjAsCisJfSwKKworCXsgfSwKK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBiY202M3h4X2NiX3RhYmxlKTsKKworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGJjbTYzeHhfY2FyZGJ1c19kcml2ZXIgPSB7CisJLm5hbWUJCT0gImJjbTYzeHhfY2FyZGJ1cyIsCisJLmlkX3RhYmxlCT0gYmNtNjN4eF9jYl90YWJsZSwKKwkucHJvYmUJCT0gYmNtNjN4eF9jYl9wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKGJjbTYzeHhfY2JfZXhpdCksCit9OworI2VuZGlmCisKKy8qCisgKiBpZiBjYXJkYnVzIHN1cHBvcnQgaXMgZW5hYmxlZCwgcmVnaXN0ZXIgb3VyIHBsYXRmb3JtIGRldmljZSBhZnRlcgorICogb3VyIGZha2UgY2FyZGJ1cyBicmlkZ2UgaGFzIGJlZW4gcmVnaXN0ZXJlZAorICovCitzdGF0aWMgaW50IF9faW5pdCBiY202M3h4X3BjbWNpYV9pbml0KHZvaWQpCit7CisjaWZkZWYgQ09ORklHX0NBUkRCVVMKKwlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmYmNtNjN4eF9jYXJkYnVzX2RyaXZlcik7CisjZWxzZQorCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmJjbTYzeHhfcGNtY2lhX2RyaXZlcik7CisjZW5kaWYKK30KKworc3RhdGljIHZvaWQgX19leGl0IGJjbTYzeHhfcGNtY2lhX2V4aXQodm9pZCkKK3sKKyNpZmRlZiBDT05GSUdfQ0FSREJVUworCXJldHVybiBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmJjbTYzeHhfY2FyZGJ1c19kcml2ZXIpOworI2Vsc2UKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmYmNtNjN4eF9wY21jaWFfZHJpdmVyKTsKKyNlbmRpZgorfQorCittb2R1bGVfaW5pdChiY202M3h4X3BjbWNpYV9pbml0KTsKK21vZHVsZV9leGl0KGJjbTYzeHhfcGNtY2lhX2V4aXQpOworCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJNYXhpbWUgQml6b24gPG1iaXpvbkBmcmVlYm94LmZyPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJMaW51eCBQQ01DSUEgQ2FyZCBTZXJ2aWNlczogYmNtNjN4eCBTb2NrZXQgQ29udHJvbGxlciIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvYmNtNjN4eF9wY21jaWEuaCBiL2RyaXZlcnMvcGNtY2lhL2JjbTYzeHhfcGNtY2lhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQ5NTczOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvcGNtY2lhL2JjbTYzeHhfcGNtY2lhLmgKQEAgLTAsMCArMSw2MCBAQAorI2lmbmRlZiBCQ002M1hYX1BDTUNJQV9IXworI2RlZmluZSBCQ002M1hYX1BDTUNJQV9IXworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPHBjbWNpYS9zcy5oPgorI2luY2x1ZGUgPGJjbTYzeHhfZGV2X3BjbWNpYS5oPgorCisvKiBzb2NrZXQgcG9sbGluZyByYXRlIGluIG1zICovCisjZGVmaW5lIEJDTTYzWFhfUENNQ0lBX1BPTExfUkFURQk1MDAKKworZW51bSB7CisJQ0FSRF9DQVJEQlVTID0gKDEgPDwgMCksCisJQ0FSRF9QQ0NBUkQgPSAoMSA8PCAxKSwKKwlDQVJEXzVWID0gKDEgPDwgMiksCisJQ0FSRF8zViA9ICgxIDw8IDMpLAorCUNBUkRfWFYgPSAoMSA8PCA0KSwKKwlDQVJEX1lWID0gKDEgPDwgNSksCit9OworCitzdHJ1Y3QgYmNtNjN4eF9wY21jaWFfc29ja2V0IHsKKwlzdHJ1Y3QgcGNtY2lhX3NvY2tldCBzb2NrZXQ7CisKKwkvKiBwbGF0Zm9ybSBzcGVjaWZpYyBkYXRhICovCisJc3RydWN0IGJjbTYzeHhfcGNtY2lhX3BsYXRmb3JtX2RhdGEgKnBkOworCisJLyogYWxsIHJlZ3MgYWNjZXNzIGFyZSBwcm90ZWN0ZWQgYnkgdGhpcyBzcGlubG9jayAqLworCXNwaW5sb2NrX3QgbG9jazsKKworCS8qIHBjbWNpYSByZWdpc3RlcnMgcmVzb3VyY2UgKi8KKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlZ19yZXM7CisKKwkvKiBiYXNlIHJlbWFwcGVkIGFkZHJlc3Mgb2YgcmVnaXN0ZXJzICovCisJdm9pZCBfX2lvbWVtICpiYXNlOworCisJLyogd2hldGhlciBhIGNhcmQgaXMgZGV0ZWN0ZWQgYXQgdGhlIG1vbWVudCAqLworCWludCBjYXJkX2RldGVjdGVkOworCisJLyogdHlwZSBvZiBkZXRlY3RlZCBjYXJkIChtYXNrIG9mIGFib3ZlIGVudW0pICovCisJdTggY2FyZF90eXBlOworCisJLyoga2VlcCBsYXN0IHNvY2tldCBzdGF0dXMgdG8gaW1wbGVtZW50IGV2ZW50IHJlcG9ydGluZyAqLworCXVuc2lnbmVkIGludCBvbGRfc3RhdHVzOworCisJLyogYmFja3VwIG9mIHJlcXVlc3RlZCBzb2NrZXQgc3RhdGUgKi8KKwlzb2NrZXRfc3RhdGVfdCByZXF1ZXN0ZWRfc3RhdGU7CisKKwkvKiB0aW1lciB1c2VkIGZvciBzb2NrZXQgc3RhdHVzIHBvbGxpbmcgKi8KKwlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjsKKworCS8qIGF0dHJpYnV0ZS9jb21tb24gbWVtb3J5IHJlc291cmNlcyAqLworCXN0cnVjdCByZXNvdXJjZSAqYXR0cl9yZXM7CisJc3RydWN0IHJlc291cmNlICpjb21tb25fcmVzOworCXN0cnVjdCByZXNvdXJjZSAqaW9fcmVzOworCisJLyogYmFzZSBhZGRyZXNzIG9mIGlvIG1lbW9yeSAqLworCXZvaWQgX19pb21lbSAqaW9fYmFzZTsKK307CisKKyNlbmRpZiAvKiBCQ002M1hYX1BDTUNJQV9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvYmZpbl9jZl9wY21jaWEuYyBiL2RyaXZlcnMvcGNtY2lhL2JmaW5fY2ZfcGNtY2lhLmMKaW5kZXggYjU5ZDQxMS4uMzAwYjM2OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvYmZpbl9jZl9wY21jaWEuYworKysgYi9kcml2ZXJzL3BjbWNpYS9iZmluX2NmX3BjbWNpYS5jCkBAIC0zMDIsNyArMzAyLDcgQEAKIAogc3RhdGljIGludCBiZmluX2NmX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgcG1fbWVzc2FnZV90IG1lc2cpCiB7Ci0JcmV0dXJuIHBjbWNpYV9zb2NrZXRfZGV2X3N1c3BlbmQoJnBkZXYtPmRldiwgbWVzZyk7CisJcmV0dXJuIHBjbWNpYV9zb2NrZXRfZGV2X3N1c3BlbmQoJnBkZXYtPmRldik7CiB9CiAKIHN0YXRpYyBpbnQgYmZpbl9jZl9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL2Npc3RwbC5jIGIvZHJpdmVycy9wY21jaWEvY2lzdHBsLmMKaW5kZXggNGExMTBiNy4uNmM0YTRmYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvY2lzdHBsLmMKKysrIGIvZHJpdmVycy9wY21jaWEvY2lzdHBsLmMKQEAgLTE0NjMsNyArMTQ2Myw5IEBACiAJICAgIHJldHVybiAtRU5PTUVNOwogICAgIH0KICAgICB0dXBsZS5EZXNpcmVkVHVwbGUgPSBjb2RlOwotICAgIHR1cGxlLkF0dHJpYnV0ZXMgPSBUVVBMRV9SRVRVUk5fQ09NTU9OOworICAgIHR1cGxlLkF0dHJpYnV0ZXMgPSAwOworICAgIGlmIChmdW5jdGlvbiA9PSBCSU5EX0ZOX0FMTCkKKwkgICAgdHVwbGUuQXR0cmlidXRlcyA9IFRVUExFX1JFVFVSTl9DT01NT047CiAgICAgcmV0ID0gcGNjYXJkX2dldF9maXJzdF90dXBsZShzLCBmdW5jdGlvbiwgJnR1cGxlKTsKICAgICBpZiAocmV0ICE9IDApCiAJICAgIGdvdG8gZG9uZTsKQEAgLTE0OTAsNyArMTQ5Miw3IEBACiAgICAgCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAotaW50IHBjY2FyZF92YWxpZGF0ZV9jaXMoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIHVuc2lnbmVkIGludCBmdW5jdGlvbiwgdW5zaWduZWQgaW50ICppbmZvKQoraW50IHBjY2FyZF92YWxpZGF0ZV9jaXMoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIHVuc2lnbmVkIGludCAqaW5mbykKIHsKICAgICB0dXBsZV90ICp0dXBsZTsKICAgICBjaXNwYXJzZV90ICpwOwpAQCAtMTUxNSwzMCArMTUxNywzMCBAQAogICAgIGNvdW50ID0gcmVzZXJ2ZWQgPSAwOwogICAgIHR1cGxlLT5EZXNpcmVkVHVwbGUgPSBSRVRVUk5fRklSU1RfVFVQTEU7CiAgICAgdHVwbGUtPkF0dHJpYnV0ZXMgPSBUVVBMRV9SRVRVUk5fQ09NTU9OOwotICAgIHJldCA9IHBjY2FyZF9nZXRfZmlyc3RfdHVwbGUocywgZnVuY3Rpb24sIHR1cGxlKTsKKyAgICByZXQgPSBwY2NhcmRfZ2V0X2ZpcnN0X3R1cGxlKHMsIEJJTkRfRk5fQUxMLCB0dXBsZSk7CiAgICAgaWYgKHJldCAhPSAwKQogCWdvdG8gZG9uZTsKIAogICAgIC8qIEZpcnN0IHR1cGxlIHNob3VsZCBiZSBERVZJQ0U7IHdlIHNob3VsZCByZWFsbHkgaGF2ZSBlaXRoZXIgdGhhdAogICAgICAgIG9yIGEgQ0ZUQUJMRV9FTlRSWSBvZiBzb21lIHNvcnQgKi8KICAgICBpZiAoKHR1cGxlLT5UdXBsZUNvZGUgPT0gQ0lTVFBMX0RFVklDRSkgfHwKLQkocGNjYXJkX3JlYWRfdHVwbGUocywgZnVuY3Rpb24sIENJU1RQTF9DRlRBQkxFX0VOVFJZLCBwKSA9PSAwKSB8fAotCShwY2NhcmRfcmVhZF90dXBsZShzLCBmdW5jdGlvbiwgQ0lTVFBMX0NGVEFCTEVfRU5UUllfQ0IsIHApID09IDApKQorCShwY2NhcmRfcmVhZF90dXBsZShzLCBCSU5EX0ZOX0FMTCwgQ0lTVFBMX0NGVEFCTEVfRU5UUlksIHApID09IDApIHx8CisJKHBjY2FyZF9yZWFkX3R1cGxlKHMsIEJJTkRfRk5fQUxMLCBDSVNUUExfQ0ZUQUJMRV9FTlRSWV9DQiwgcCkgPT0gMCkpCiAJZGV2X29rKys7CiAKICAgICAvKiBBbGwgY2FyZHMgc2hvdWxkIGhhdmUgYSBNQU5GSUQgdHVwbGUsIGFuZC9vciBhIFZFUlNfMSBvciBWRVJTXzIKICAgICAgICB0dXBsZSwgZm9yIGNhcmQgaWRlbnRpZmljYXRpb24uICBDZXJ0YWluIG9sZCBELUxpbmsgYW5kIExpbmtzeXMKICAgICAgICBjYXJkcyBoYXZlIG9ubHkgYSBicm9rZW4gVkVSU18yIHR1cGxlOyBoZW5jZSB0aGUgYm9ndXMgdGVzdC4gKi8KLSAgICBpZiAoKHBjY2FyZF9yZWFkX3R1cGxlKHMsIGZ1bmN0aW9uLCBDSVNUUExfTUFORklELCBwKSA9PSAwKSB8fAotCShwY2NhcmRfcmVhZF90dXBsZShzLCBmdW5jdGlvbiwgQ0lTVFBMX1ZFUlNfMSwgcCkgPT0gMCkgfHwKLQkocGNjYXJkX3JlYWRfdHVwbGUocywgZnVuY3Rpb24sIENJU1RQTF9WRVJTXzIsIHApICE9IC1FTk9TUEMpKQorICAgIGlmICgocGNjYXJkX3JlYWRfdHVwbGUocywgQklORF9GTl9BTEwsIENJU1RQTF9NQU5GSUQsIHApID09IDApIHx8CisJKHBjY2FyZF9yZWFkX3R1cGxlKHMsIEJJTkRfRk5fQUxMLCBDSVNUUExfVkVSU18xLCBwKSA9PSAwKSB8fAorCShwY2NhcmRfcmVhZF90dXBsZShzLCBCSU5EX0ZOX0FMTCwgQ0lTVFBMX1ZFUlNfMiwgcCkgIT0gLUVOT1NQQykpCiAJaWRlbnRfb2srKzsKIAogICAgIGlmICghZGV2X29rICYmICFpZGVudF9vaykKIAlnb3RvIGRvbmU7CiAKICAgICBmb3IgKGNvdW50ID0gMTsgY291bnQgPCBNQVhfVFVQTEVTOyBjb3VudCsrKSB7Ci0JcmV0ID0gcGNjYXJkX2dldF9uZXh0X3R1cGxlKHMsIGZ1bmN0aW9uLCB0dXBsZSk7CisJcmV0ID0gcGNjYXJkX2dldF9uZXh0X3R1cGxlKHMsIEJJTkRfRk5fQUxMLCB0dXBsZSk7CiAJaWYgKHJldCAhPSAwKQogCQlicmVhazsKIAlpZiAoKCh0dXBsZS0+VHVwbGVDb2RlID4gMHgyMykgJiYgKHR1cGxlLT5UdXBsZUNvZGUgPCAweDQwKSkgfHwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL2NzLmMgYi9kcml2ZXJzL3BjbWNpYS9jcy5jCmluZGV4IDA2NjBhZDEuLjkzNGQ0YmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL2NzLmMKKysrIGIvZHJpdmVycy9wY21jaWEvY3MuYwpAQCAtMTAxLDcgKzEwMSw3IEBACiBzdGF0aWMgaW50IHNvY2tldF9yZXN1bWUoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNrdCk7CiBzdGF0aWMgaW50IHNvY2tldF9zdXNwZW5kKHN0cnVjdCBwY21jaWFfc29ja2V0ICpza3QpOwogCi1pbnQgcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK2ludCBwY21jaWFfc29ja2V0X2Rldl9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc29ja2V0OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9jc19pbnRlcm5hbC5oIGIvZHJpdmVycy9wY21jaWEvY3NfaW50ZXJuYWwuaAppbmRleCA3OTYxNWU2Li4xZjQwOThmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9jc19pbnRlcm5hbC5oCisrKyBiL2RyaXZlcnMvcGNtY2lhL2NzX2ludGVybmFsLmgKQEAgLTE5Nyw4ICsxOTcsNyBAQAogCQkgICAgICBjaXNkYXRhX3QgY29kZSwgdm9pZCAqcGFyc2UpOwogaW50IHBjbWNpYV9yZXBsYWNlX2NpcyhzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywKIAkJICAgICAgIGNvbnN0IHU4ICpkYXRhLCBjb25zdCBzaXplX3QgbGVuKTsKLWludCBwY2NhcmRfdmFsaWRhdGVfY2lzKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCB1bnNpZ25lZCBpbnQgZnVuY3Rpb24sCi0JCQl1bnNpZ25lZCBpbnQgKmNvdW50KTsKK2ludCBwY2NhcmRfdmFsaWRhdGVfY2lzKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCB1bnNpZ25lZCBpbnQgKmNvdW50KTsKIAogLyogcnNyY19tZ3IuYyAqLwogaW50IHBjbWNpYV92YWxpZGF0ZV9tZW0oc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvZHMuYyBiL2RyaXZlcnMvcGNtY2lhL2RzLmMKaW5kZXggOWYzMDBkMy4uZjViNzA3OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvZHMuYworKysgYi9kcml2ZXJzL3BjbWNpYS9kcy5jCkBAIC01NDcsNyArNTQ3LDcgQEAKIAlpZiAoIXZlcnMxKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWlmICghcGNjYXJkX3JlYWRfdHVwbGUocF9kZXYtPnNvY2tldCwgcF9kZXYtPmZ1bmMsCisJaWYgKCFwY2NhcmRfcmVhZF90dXBsZShwX2Rldi0+c29ja2V0LCBCSU5EX0ZOX0FMTCwKIAkJCSAgICAgICBDSVNUUExfTUFORklELCAmbWFuZl9pZCkpIHsKIAkJcF9kZXYtPm1hbmZfaWQgPSBtYW5mX2lkLm1hbmY7CiAJCXBfZGV2LT5jYXJkX2lkID0gbWFuZl9pZC5jYXJkOwpAQCAtNTgxLDkgKzU4MSw5IEBACiAJCWtmcmVlKGRldmdlbyk7CiAJfQogCi0JaWYgKCFwY2NhcmRfcmVhZF90dXBsZShwX2Rldi0+c29ja2V0LCBwX2Rldi0+ZnVuYywgQ0lTVFBMX1ZFUlNfMSwKKwlpZiAoIXBjY2FyZF9yZWFkX3R1cGxlKHBfZGV2LT5zb2NrZXQsIEJJTkRfRk5fQUxMLCBDSVNUUExfVkVSU18xLAogCQkJICAgICAgIHZlcnMxKSkgewotCQlmb3IgKGk9MDsgaSA8IHZlcnMxLT5uczsgaSsrKSB7CisJCWZvciAoaSA9IDA7IGkgPCBtaW5fdCh1bnNpZ25lZCBpbnQsIDQsIHZlcnMxLT5ucyk7IGkrKykgewogCQkJY2hhciAqdG1wOwogCQkJdW5zaWduZWQgaW50IGxlbmd0aDsKIApAQCAtNzMzLDcgKzczMyw3IEBACiAJCXJldHVybiAtRUFHQUlOOyAvKiB0cnkgYWdhaW4sIGJ1dCBsYXRlci4uLiAqLwogCX0KIAotCXJldCA9IHBjY2FyZF92YWxpZGF0ZV9jaXMocywgQklORF9GTl9BTEwsICZub19jaGFpbnMpOworCXJldCA9IHBjY2FyZF92YWxpZGF0ZV9jaXMocywgJm5vX2NoYWlucyk7CiAJaWYgKHJldCB8fCAhbm9fY2hhaW5zKSB7CiAJCWRzX2Rldl9kYmcoMCwgJnMtPmRldiwgImludmFsaWQgQ0lTIG9yIGludmFsaWQgcmVzb3VyY2VzXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9pODIwOTIuYyBiL2RyaXZlcnMvcGNtY2lhL2k4MjA5Mi5jCmluZGV4IDQ2NTYxZmEuLmEwNGYyMWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL2k4MjA5Mi5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL2k4MjA5Mi5jCkBAIC00Miw3ICs0Miw3IEBACiAjaWZkZWYgQ09ORklHX1BNCiBzdGF0aWMgaW50IGk4MjA5MmFhX3NvY2tldF9zdXNwZW5kIChzdHJ1Y3QgcGNpX2RldiAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7Ci0JcmV0dXJuIHBjbWNpYV9zb2NrZXRfZGV2X3N1c3BlbmQoJmRldi0+ZGV2LCBzdGF0ZSk7CisJcmV0dXJuIHBjbWNpYV9zb2NrZXRfZGV2X3N1c3BlbmQoJmRldi0+ZGV2KTsKIH0KIAogc3RhdGljIGludCBpODIwOTJhYV9zb2NrZXRfcmVzdW1lIChzdHJ1Y3QgcGNpX2RldiAqZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvaTgyMzY1LmMgYi9kcml2ZXJzL3BjbWNpYS9pODIzNjUuYwppbmRleCA0MGQ0OTUzLi5hNGFhY2I4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9pODIzNjUuYworKysgYi9kcml2ZXJzL3BjbWNpYS9pODIzNjUuYwpAQCAtMTA1Myw4ICsxMDUzLDggQEAKICAgICB1X2NoYXIgbWFwLCBpb2N0bDsKICAgICAKICAgICBkZWJ1ZygxLCAiU2V0SU9NYXAoJWQsICVkLCAlIzIuMngsICVkIG5zLCAiCi0JICAiJSN4LSUjeClcbiIsIHNvY2ssIGlvLT5tYXAsIGlvLT5mbGFncywKLQkgIGlvLT5zcGVlZCwgaW8tPnN0YXJ0LCBpby0+c3RvcCk7CisJICAiJSNsbHgtJSNsbHgpXG4iLCBzb2NrLCBpby0+bWFwLCBpby0+ZmxhZ3MsIGlvLT5zcGVlZCwKKwkgICh1bnNpZ25lZCBsb25nIGxvbmcpaW8tPnN0YXJ0LCAodW5zaWduZWQgbG9uZyBsb25nKWlvLT5zdG9wKTsKICAgICBtYXAgPSBpby0+bWFwOwogICAgIGlmICgobWFwID4gMSkgfHwgKGlvLT5zdGFydCA+IDB4ZmZmZikgfHwgKGlvLT5zdG9wID4gMHhmZmZmKSB8fAogCShpby0+c3RvcCA8IGlvLT5zdGFydCkpIHJldHVybiAtRUlOVkFMOwpAQCAtMTI0MSw3ICsxMjQxLDcgQEAKIHN0YXRpYyBpbnQgaTgyMzY1X2Rydl9wY21jaWFfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsCiAJCQkJICAgICBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7Ci0JcmV0dXJuIHBjbWNpYV9zb2NrZXRfZGV2X3N1c3BlbmQoJmRldi0+ZGV2LCBzdGF0ZSk7CisJcmV0dXJuIHBjbWNpYV9zb2NrZXRfZGV2X3N1c3BlbmQoJmRldi0+ZGV2KTsKIH0KIAogc3RhdGljIGludCBpODIzNjVfZHJ2X3BjbWNpYV9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvbTMycl9jZmMuYyBiL2RyaXZlcnMvcGNtY2lhL20zMnJfY2ZjLmMKaW5kZXggNjJiNGVjYy4uN2RmYmVlMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvbTMycl9jZmMuYworKysgYi9kcml2ZXJzL3BjbWNpYS9tMzJyX2NmYy5jCkBAIC01MzcsOCArNTM3LDkgQEAKIAl1X2NoYXIgbWFwOwogCiAJZGVidWcoMywgIm0zMnJfY2ZjOiBTZXRJT01hcCglZCwgJWQsICUjMi4yeCwgJWQgbnMsICIKLQkJICAiJSNseC0lI2x4KVxuIiwgc29jaywgaW8tPm1hcCwgaW8tPmZsYWdzLAotCQkgIGlvLT5zcGVlZCwgaW8tPnN0YXJ0LCBpby0+c3RvcCk7CisJCSAgIiUjbGx4LSUjbGx4KVxuIiwgc29jaywgaW8tPm1hcCwgaW8tPmZsYWdzLAorCQkgIGlvLT5zcGVlZCwgKHVuc2lnbmVkIGxvbmcgbG9uZylpby0+c3RhcnQsCisJCSAgKHVuc2lnbmVkIGxvbmcgbG9uZylpby0+c3RvcCk7CiAJbWFwID0gaW8tPm1hcDsKIAogCXJldHVybiAwOwpAQCAtNTU0LDggKzU1NSw5IEBACiAJcGNjX3NvY2tldF90ICp0ID0gJnNvY2tldFtzb2NrXTsKIAogCWRlYnVnKDMsICJtMzJyX2NmYzogU2V0TWVtTWFwKCVkLCAlZCwgJSMyLjJ4LCAlZCBucywgIgotCQkgIiUjbHgsICUjeClcbiIsIHNvY2ssIG1hcCwgbWVtLT5mbGFncywKLQkJIG1lbS0+c3BlZWQsIG1lbS0+c3RhdGljX3N0YXJ0LCBtZW0tPmNhcmRfc3RhcnQpOworCQkgIiUjbGx4LCAlI3gpXG4iLCBzb2NrLCBtYXAsIG1lbS0+ZmxhZ3MsCisJCSBtZW0tPnNwZWVkLCAodW5zaWduZWQgbG9uZyBsb25nKW1lbS0+c3RhdGljX3N0YXJ0LAorCQkgbWVtLT5jYXJkX3N0YXJ0KTsKIAogCS8qCiAJICogc2FuaXR5IGNoZWNrCkBAIC02OTksNyArNzAxLDcgQEAKIHN0YXRpYyBpbnQgY2ZjX2Rydl9wY21jaWFfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsCiAJCQkJICAgICBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7Ci0JcmV0dXJuIHBjbWNpYV9zb2NrZXRfZGV2X3N1c3BlbmQoJmRldi0+ZGV2LCBzdGF0ZSk7CisJcmV0dXJuIHBjbWNpYV9zb2NrZXRfZGV2X3N1c3BlbmQoJmRldi0+ZGV2KTsKIH0KIAogc3RhdGljIGludCBjZmNfZHJ2X3BjbWNpYV9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvbTMycl9wY2MuYyBiL2RyaXZlcnMvcGNtY2lhL20zMnJfcGNjLmMKaW5kZXggMTIwMzRiNC4uYzY1MjRmOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvbTMycl9wY2MuYworKysgYi9kcml2ZXJzL3BjbWNpYS9tMzJyX3BjYy5jCkBAIC00OTIsOCArNDkyLDkgQEAKIAl1X2NoYXIgbWFwOwogCiAJZGVidWcoMywgIm0zMnItcGNjOiBTZXRJT01hcCglZCwgJWQsICUjMi4yeCwgJWQgbnMsICIKLQkJICAiJSN4LSUjeClcbiIsIHNvY2ssIGlvLT5tYXAsIGlvLT5mbGFncywKLQkJICBpby0+c3BlZWQsIGlvLT5zdGFydCwgaW8tPnN0b3ApOworCQkgICIlI2xseC0lI2xseClcbiIsIHNvY2ssIGlvLT5tYXAsIGlvLT5mbGFncywKKwkJICBpby0+c3BlZWQsICh1bnNpZ25lZCBsb25nIGxvbmcpaW8tPnN0YXJ0LAorCQkgICh1bnNpZ25lZCBsb25nIGxvbmcpaW8tPnN0b3ApOwogCW1hcCA9IGlvLT5tYXA7CiAKIAlyZXR1cm4gMDsKQEAgLTUxNSw4ICs1MTYsOSBAQAogI2VuZGlmCiAKIAlkZWJ1ZygzLCAibTMyci1wY2M6IFNldE1lbU1hcCglZCwgJWQsICUjMi4yeCwgJWQgbnMsICIKLQkJICIlI2x4LCAgJSN4KVxuIiwgc29jaywgbWFwLCBtZW0tPmZsYWdzLAotCQkgbWVtLT5zcGVlZCwgbWVtLT5zdGF0aWNfc3RhcnQsIG1lbS0+Y2FyZF9zdGFydCk7CisJCSAiJSNsbHgsICAlI3gpXG4iLCBzb2NrLCBtYXAsIG1lbS0+ZmxhZ3MsCisJCSBtZW0tPnNwZWVkLCAodW5zaWduZWQgbG9uZyBsb25nKW1lbS0+c3RhdGljX3N0YXJ0LAorCQkgbWVtLT5jYXJkX3N0YXJ0KTsKIAogCS8qCiAJICogc2FuaXR5IGNoZWNrCkBAIC02NzUsNyArNjc3LDcgQEAKIHN0YXRpYyBpbnQgcGNjX2Rydl9wY21jaWFfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsCiAJCQkJICAgICBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7Ci0JcmV0dXJuIHBjbWNpYV9zb2NrZXRfZGV2X3N1c3BlbmQoJmRldi0+ZGV2LCBzdGF0ZSk7CisJcmV0dXJuIHBjbWNpYV9zb2NrZXRfZGV2X3N1c3BlbmQoJmRldi0+ZGV2KTsKIH0KIAogc3RhdGljIGludCBwY2NfZHJ2X3BjbWNpYV9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvbTh4eF9wY21jaWEuYyBiL2RyaXZlcnMvcGNtY2lhL204eHhfcGNtY2lhLmMKaW5kZXggZDFhZDA5Ni4uNDAzNTU5YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvbTh4eF9wY21jaWEuYworKysgYi9kcml2ZXJzL3BjbWNpYS9tOHh4X3BjbWNpYS5jCkBAIC05NzUsOCArOTc1LDkgQEAKICNkZWZpbmUgTThYWF9CQVNFIChQQ01DSUFfSU9fV0lOX0JBU0UgKyBpby0+c3RhcnQpCiAKIAlkcHJpbnRrKCJTZXRJT01hcCglZCwgJWQsICUjMi4yeCwgJWQgbnMsICIKLQkJIiUjNC40eC0lIzQuNHgpXG4iLCBsc29jaywgaW8tPm1hcCwgaW8tPmZsYWdzLAotCQlpby0+c3BlZWQsIGlvLT5zdGFydCwgaW8tPnN0b3ApOworCQkiJSM0LjRsbHgtJSM0LjRsbHgpXG4iLCBsc29jaywgaW8tPm1hcCwgaW8tPmZsYWdzLAorCQlpby0+c3BlZWQsICh1bnNpZ25lZCBsb25nIGxvbmcpaW8tPnN0YXJ0LAorCQkodW5zaWduZWQgbG9uZyBsb25nKWlvLT5zdG9wKTsKIAogCWlmICgoaW8tPm1hcCA+PSBQQ01DSUFfSU9fV0lOX05PKSB8fCAoaW8tPnN0YXJ0ID4gMHhmZmZmKQogCSAgICB8fCAoaW8tPnN0b3AgPiAweGZmZmYpIHx8IChpby0+c3RvcCA8IGlvLT5zdGFydCkpCkBAIC0xMDU1LDggKzEwNTYsOSBAQAogCXBjbWNvbmY4eHhfdCAqcGNtY2lhID0gcy0+cGNtY2lhOwogCiAJZHByaW50aygiU2V0TWVtTWFwKCVkLCAlZCwgJSMyLjJ4LCAlZCBucywgIgotCQkiJSM1LjVseCwgJSM1LjV4KVxuIiwgbHNvY2ssIG1lbS0+bWFwLCBtZW0tPmZsYWdzLAotCQltZW0tPnNwZWVkLCBtZW0tPnN0YXRpY19zdGFydCwgbWVtLT5jYXJkX3N0YXJ0KTsKKwkJIiUjNS41bGx4LCAlIzUuNXgpXG4iLCBsc29jaywgbWVtLT5tYXAsIG1lbS0+ZmxhZ3MsCisJCW1lbS0+c3BlZWQsICh1bnNpZ25lZCBsb25nIGxvbmcpbWVtLT5zdGF0aWNfc3RhcnQsCisJCW1lbS0+Y2FyZF9zdGFydCk7CiAKIAlpZiAoKG1lbS0+bWFwID49IFBDTUNJQV9NRU1fV0lOX05PKQogLy8gICAgICAgICAgfHwgKChtZW0tPnMpID49IFBDTUNJQV9NRU1fV0lOX1NJWkUpCkBAIC0xMTA3LDggKzExMDksOSBAQAogCX0KIAogCWRwcmludGsoIlNldE1lbU1hcCglZCwgJWQsICUjMi4yeCwgJWQgbnMsICIKLQkJIiUjNS41bHgsICUjNS41eClcbiIsIGxzb2NrLCBtZW0tPm1hcCwgbWVtLT5mbGFncywKLQkJbWVtLT5zcGVlZCwgbWVtLT5zdGF0aWNfc3RhcnQsIG1lbS0+Y2FyZF9zdGFydCk7CisJCSIlIzUuNWxseCwgJSM1LjV4KVxuIiwgbHNvY2ssIG1lbS0+bWFwLCBtZW0tPmZsYWdzLAorCQltZW0tPnNwZWVkLCAodW5zaWduZWQgbG9uZyBsb25nKW1lbS0+c3RhdGljX3N0YXJ0LAorCQltZW0tPmNhcmRfc3RhcnQpOwogCiAJLyogY29weSB0aGUgc3RydWN0IGFuZCBtb2RpZnkgdGhlIGNvcHkgKi8KIApAQCAtMTI5Niw3ICsxMjk5LDcgQEAKICNpZmRlZiBDT05GSUdfUE0KIHN0YXRpYyBpbnQgbTh4eF9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKLQlyZXR1cm4gcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZCgmcGRldi0+ZGV2LCBzdGF0ZSk7CisJcmV0dXJuIHBjbWNpYV9zb2NrZXRfZGV2X3N1c3BlbmQoJnBkZXYtPmRldik7CiB9CiAKIHN0YXRpYyBpbnQgbTh4eF9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL29tYXBfY2YuYyBiL2RyaXZlcnMvcGNtY2lhL29tYXBfY2YuYwppbmRleCBmMzczNjM5Li42ODU3MGJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9vbWFwX2NmLmMKKysrIGIvZHJpdmVycy9wY21jaWEvb21hcF9jZi5jCkBAIC0zMzQsNyArMzM0LDcgQEAKIAogc3RhdGljIGludCBvbWFwX2NmX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgcG1fbWVzc2FnZV90IG1lc2cpCiB7Ci0JcmV0dXJuIHBjbWNpYV9zb2NrZXRfZGV2X3N1c3BlbmQoJnBkZXYtPmRldiwgbWVzZyk7CisJcmV0dXJuIHBjbWNpYV9zb2NrZXRfZGV2X3N1c3BlbmQoJnBkZXYtPmRldik7CiB9CiAKIHN0YXRpYyBpbnQgb21hcF9jZl9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3BjbWNpYV9pb2N0bC5jIGIvZHJpdmVycy9wY21jaWEvcGNtY2lhX2lvY3RsLmMKaW5kZXggMzJjNDQwNC4uMzBjZjcxZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvcGNtY2lhX2lvY3RsLmMKKysrIGIvZHJpdmVycy9wY21jaWEvcGNtY2lhX2lvY3RsLmMKQEAgLTg4MSw3ICs4ODEsNyBAQAogCW11dGV4X2xvY2soJnMtPnNrdF9tdXRleCk7CiAJcGNtY2lhX3ZhbGlkYXRlX21lbShzKTsKIAltdXRleF91bmxvY2soJnMtPnNrdF9tdXRleCk7Ci0JcmV0ID0gcGNjYXJkX3ZhbGlkYXRlX2NpcyhzLCBCSU5EX0ZOX0FMTCwgJmJ1Zi0+Y2lzaW5mby5DaGFpbnMpOworCXJldCA9IHBjY2FyZF92YWxpZGF0ZV9jaXMocywgJmJ1Zi0+Y2lzaW5mby5DaGFpbnMpOwogCWJyZWFrOwogICAgIGNhc2UgRFNfU1VTUEVORF9DQVJEOgogCXJldCA9IHBjbWNpYV9zdXNwZW5kX2NhcmQocyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9wZDY3MjkuYyBiL2RyaXZlcnMvcGNtY2lhL3BkNjcyOS5jCmluZGV4IDhiZWQxZGEuLjcwYTMzNDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL3BkNjcyOS5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL3BkNjcyOS5jCkBAIC02NDEsNiArNjQxLDEyIEBACiAJaWYgKChyZXQgPSBwY2lfZW5hYmxlX2RldmljZShkZXYpKSkKIAkJZ290byBlcnJfb3V0X2ZyZWVfbWVtOwogCisJaWYgKCFwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LCAwKSkgeworCQlwcmludGsoS0VSTl9JTkZPICJwZDY3Mjk6IHJlZnVzaW5nIHRvIGxvYWQgdGhlIGRyaXZlciAiCisJCQkJICJhcyB0aGUgaW9fYmFzZSBpcyAwLlxuIik7CisJCWdvdG8gZXJyX291dF9mcmVlX21lbTsKKwl9CisKIAlwcmludGsoS0VSTl9JTkZPICJwZDY3Mjk6IENpcnJ1cyBQRDY3MjkgUENJIHRvIFBDTUNJQSBCcmlkZ2UgIgogCQkiYXQgMHglbGx4IG9uIGlycSAlZFxuIiwKIAkJKHVuc2lnbmVkIGxvbmcgbG9uZylwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LCAwKSwgZGV2LT5pcnEpOwpAQCAtNzU4LDcgKzc2NCw3IEBACiAjaWZkZWYgQ09ORklHX1BNCiBzdGF0aWMgaW50IHBkNjcyOV9zb2NrZXRfc3VzcGVuZChzdHJ1Y3QgcGNpX2RldiAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7Ci0JcmV0dXJuIHBjbWNpYV9zb2NrZXRfZGV2X3N1c3BlbmQoJmRldi0+ZGV2LCBzdGF0ZSk7CisJcmV0dXJuIHBjbWNpYV9zb2NrZXRfZGV2X3N1c3BlbmQoJmRldi0+ZGV2KTsKIH0KIAogc3RhdGljIGludCBwZDY3Mjlfc29ja2V0X3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvcHhhMnh4X2Jhc2UuYyBiL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF9iYXNlLmMKaW5kZXggYzQ5YTcyNi4uMGUzNWFjYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvcHhhMnh4X2Jhc2UuYworKysgYi9kcml2ZXJzL3BjbWNpYS9weGEyeHhfYmFzZS5jCkBAIC0zMDAsMjUgKzMwMCwyOSBAQAogCXJldHVybiBzb2NfY29tbW9uX2Rydl9wY21jaWFfcmVtb3ZlKCZkZXYtPmRldik7CiB9CiAKLXN0YXRpYyBpbnQgcHhhMnh4X2Rydl9wY21jaWFfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3N0YXRpYyBpbnQgcHhhMnh4X2Rydl9wY21jaWFfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0JcmV0dXJuIHBjbWNpYV9zb2NrZXRfZGV2X3N1c3BlbmQoJmRldi0+ZGV2LCBzdGF0ZSk7CisJcmV0dXJuIHBjbWNpYV9zb2NrZXRfZGV2X3N1c3BlbmQoZGV2KTsKIH0KIAotc3RhdGljIGludCBweGEyeHhfZHJ2X3BjbWNpYV9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQorc3RhdGljIGludCBweGEyeHhfZHJ2X3BjbWNpYV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQogewotCXB4YTJ4eF9jb25maWd1cmVfc29ja2V0cygmZGV2LT5kZXYpOwotCXJldHVybiBwY21jaWFfc29ja2V0X2Rldl9yZXN1bWUoJmRldi0+ZGV2KTsKKwlweGEyeHhfY29uZmlndXJlX3NvY2tldHMoZGV2KTsKKwlyZXR1cm4gcGNtY2lhX3NvY2tldF9kZXZfcmVzdW1lKGRldik7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgZGV2X3BtX29wcyAgcHhhMnh4X2Rydl9wY21jaWFfcG1fb3BzID0geworCS5zdXNwZW5kCT0gcHhhMnh4X2Rydl9wY21jaWFfc3VzcGVuZCwKKwkucmVzdW1lCQk9IHB4YTJ4eF9kcnZfcGNtY2lhX3Jlc3VtZSwKK307CisKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHB4YTJ4eF9wY21jaWFfZHJpdmVyID0gewogCS5wcm9iZQkJPSBweGEyeHhfZHJ2X3BjbWNpYV9wcm9iZSwKIAkucmVtb3ZlCQk9IHB4YTJ4eF9kcnZfcGNtY2lhX3JlbW92ZSwKLQkuc3VzcGVuZCAJPSBweGEyeHhfZHJ2X3BjbWNpYV9zdXNwZW5kLAotCS5yZXN1bWUgCT0gcHhhMnh4X2Rydl9wY21jaWFfcmVzdW1lLAogCS5kcml2ZXIJCT0gewogCQkubmFtZQk9ICJweGEyeHgtcGNtY2lhIiwKIAkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJCS5wbQk9ICZweGEyeHhfZHJ2X3BjbWNpYV9wbV9vcHMsCiAJfSwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF9wYWxtdGMuYyBiL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF9wYWxtdGMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTg5OTNlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9wY21jaWEvcHhhMnh4X3BhbG10Yy5jCkBAIC0wLDAgKzEsMjMwIEBACisvKgorICogbGludXgvZHJpdmVycy9wY21jaWEvcHhhMnh4X3BhbG10Yy5jCisgKgorICogRHJpdmVyIGZvciBQYWxtIFR1bmdzdGVufEMgUENNQ0lBCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFsZXggT3Nib3JuZSA8YXRvQG1lc2h5Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBNYXJlayBWYXN1dCA8bWFyZWsudmFzdXRAZ21haWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8bWFjaC9wYWxtdGMuaD4KKyNpbmNsdWRlICJzb2NfY29tbW9uLmgiCisKK3N0YXRpYyBpbnQgcGFsbXRjX3BjbWNpYV9od19pbml0KHN0cnVjdCBzb2NfcGNtY2lhX3NvY2tldCAqc2t0KQoreworCWludCByZXQ7CisKKwlyZXQgPSBncGlvX3JlcXVlc3QoR1BJT19OUl9QQUxNVENfUENNQ0lBX1BPV0VSMSwgIlBDTUNJQSBQV1IxIik7CisJaWYgKHJldCkKKwkJZ290byBlcnIxOworCXJldCA9IGdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX05SX1BBTE1UQ19QQ01DSUFfUE9XRVIxLCAwKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycjI7CisKKwlyZXQgPSBncGlvX3JlcXVlc3QoR1BJT19OUl9QQUxNVENfUENNQ0lBX1BPV0VSMiwgIlBDTUNJQSBQV1IyIik7CisJaWYgKHJldCkKKwkJZ290byBlcnIyOworCXJldCA9IGdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX05SX1BBTE1UQ19QQ01DSUFfUE9XRVIyLCAwKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycjM7CisKKwlyZXQgPSBncGlvX3JlcXVlc3QoR1BJT19OUl9QQUxNVENfUENNQ0lBX1BPV0VSMywgIlBDTUNJQSBQV1IzIik7CisJaWYgKHJldCkKKwkJZ290byBlcnIzOworCXJldCA9IGdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX05SX1BBTE1UQ19QQ01DSUFfUE9XRVIzLCAwKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycjQ7CisKKwlyZXQgPSBncGlvX3JlcXVlc3QoR1BJT19OUl9QQUxNVENfUENNQ0lBX1JFU0VULCAiUENNQ0lBIFJTVCIpOworCWlmIChyZXQpCisJCWdvdG8gZXJyNDsKKwlyZXQgPSBncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19OUl9QQUxNVENfUENNQ0lBX1JFU0VULCAxKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycjU7CisKKwlyZXQgPSBncGlvX3JlcXVlc3QoR1BJT19OUl9QQUxNVENfUENNQ0lBX1JFQURZLCAiUENNQ0lBIFJEWSIpOworCWlmIChyZXQpCisJCWdvdG8gZXJyNTsKKwlyZXQgPSBncGlvX2RpcmVjdGlvbl9pbnB1dChHUElPX05SX1BBTE1UQ19QQ01DSUFfUkVBRFkpOworCWlmIChyZXQpCisJCWdvdG8gZXJyNjsKKworCXJldCA9IGdwaW9fcmVxdWVzdChHUElPX05SX1BBTE1UQ19QQ01DSUFfUFdSUkVBRFksICJQQ01DSUEgUFdSUkRZIik7CisJaWYgKHJldCkKKwkJZ290byBlcnI2OworCXJldCA9IGdwaW9fZGlyZWN0aW9uX2lucHV0KEdQSU9fTlJfUEFMTVRDX1BDTUNJQV9QV1JSRUFEWSk7CisJaWYgKHJldCkKKwkJZ290byBlcnI3OworCisJc2t0LT5pcnEgPSBJUlFfR1BJTyhHUElPX05SX1BBTE1UQ19QQ01DSUFfUkVBRFkpOworCXJldHVybiAwOworCitlcnI3OgorCWdwaW9fZnJlZShHUElPX05SX1BBTE1UQ19QQ01DSUFfUFdSUkVBRFkpOworZXJyNjoKKwlncGlvX2ZyZWUoR1BJT19OUl9QQUxNVENfUENNQ0lBX1JFQURZKTsKK2VycjU6CisJZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTVRDX1BDTUNJQV9SRVNFVCk7CitlcnI0OgorCWdwaW9fZnJlZShHUElPX05SX1BBTE1UQ19QQ01DSUFfUE9XRVIzKTsKK2VycjM6CisJZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTVRDX1BDTUNJQV9QT1dFUjIpOworZXJyMjoKKwlncGlvX2ZyZWUoR1BJT19OUl9QQUxNVENfUENNQ0lBX1BPV0VSMSk7CitlcnIxOgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHBhbG10Y19wY21jaWFfaHdfc2h1dGRvd24oc3RydWN0IHNvY19wY21jaWFfc29ja2V0ICpza3QpCit7CisJZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTVRDX1BDTUNJQV9QV1JSRUFEWSk7CisJZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTVRDX1BDTUNJQV9SRUFEWSk7CisJZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTVRDX1BDTUNJQV9SRVNFVCk7CisJZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTVRDX1BDTUNJQV9QT1dFUjMpOworCWdwaW9fZnJlZShHUElPX05SX1BBTE1UQ19QQ01DSUFfUE9XRVIyKTsKKwlncGlvX2ZyZWUoR1BJT19OUl9QQUxNVENfUENNQ0lBX1BPV0VSMSk7Cit9CisKK3N0YXRpYyB2b2lkIHBhbG10Y19wY21jaWFfc29ja2V0X3N0YXRlKHN0cnVjdCBzb2NfcGNtY2lhX3NvY2tldCAqc2t0LAorCQkJCQlzdHJ1Y3QgcGNtY2lhX3N0YXRlICpzdGF0ZSkKK3sKKwlzdGF0ZS0+ZGV0ZWN0ID0gMTsgLyogYWx3YXlzIGluc2VydGVkICovCisJc3RhdGUtPnJlYWR5ICA9ICEhZ3Bpb19nZXRfdmFsdWUoR1BJT19OUl9QQUxNVENfUENNQ0lBX1JFQURZKTsKKwlzdGF0ZS0+YnZkMSAgID0gMTsKKwlzdGF0ZS0+YnZkMiAgID0gMTsKKwlzdGF0ZS0+d3Jwcm90ID0gMDsKKwlzdGF0ZS0+dnNfM3YgID0gMTsKKwlzdGF0ZS0+dnNfWHYgID0gMDsKK30KKworc3RhdGljIGludCBwYWxtdGNfd2lmaV9wb3dlcmRvd24odm9pZCkKK3sKKwlncGlvX3NldF92YWx1ZShHUElPX05SX1BBTE1UQ19QQ01DSUFfUkVTRVQsIDEpOworCWdwaW9fc2V0X3ZhbHVlKEdQSU9fTlJfUEFMTVRDX1BDTUNJQV9QT1dFUjIsIDApOworCW1kZWxheSg0MCk7CisJZ3Bpb19zZXRfdmFsdWUoR1BJT19OUl9QQUxNVENfUENNQ0lBX1BPV0VSMSwgMCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGFsbXRjX3dpZmlfcG93ZXJ1cCh2b2lkKQoreworCWludCB0aW1lb3V0ID0gNTA7CisKKwlncGlvX3NldF92YWx1ZShHUElPX05SX1BBTE1UQ19QQ01DSUFfUE9XRVIzLCAxKTsKKwltZGVsYXkoNTApOworCisJLyogUG93ZXIgdXAgdGhlIGNhcmQsIDEuOFYgZmlyc3QsIGFmdGVyIGEgd2hpbGUgMy4zViAqLworCWdwaW9fc2V0X3ZhbHVlKEdQSU9fTlJfUEFMTVRDX1BDTUNJQV9QT1dFUjEsIDEpOworCW1kZWxheSgxMDApOworCWdwaW9fc2V0X3ZhbHVlKEdQSU9fTlJfUEFMTVRDX1BDTUNJQV9QT1dFUjIsIDEpOworCisJLyogV2FpdCB0aWxsIHRoZSBjYXJkIGlzIHJlYWR5ICovCisJd2hpbGUgKCFncGlvX2dldF92YWx1ZShHUElPX05SX1BBTE1UQ19QQ01DSUFfUFdSUkVBRFkpICYmCisJCXRpbWVvdXQpIHsKKwkJbWRlbGF5KDEpOworCQl0aW1lb3V0LS07CisJfQorCisJLyogUG93ZXIgZG93biB0aGUgV2lGaSBpbiBjYXNlIG9mIGVycm9yICovCisJaWYgKCF0aW1lb3V0KSB7CisJCXBhbG10Y193aWZpX3Bvd2VyZG93bigpOworCQlyZXR1cm4gMTsKKwl9CisKKwkvKiBSZXNldCB0aGUgY2FyZCAqLworCWdwaW9fc2V0X3ZhbHVlKEdQSU9fTlJfUEFMTVRDX1BDTUNJQV9SRVNFVCwgMSk7CisJbWRlbGF5KDIwKTsKKwlncGlvX3NldF92YWx1ZShHUElPX05SX1BBTE1UQ19QQ01DSUFfUkVTRVQsIDApOworCW1kZWxheSgyNSk7CisKKwlncGlvX3NldF92YWx1ZShHUElPX05SX1BBTE1UQ19QQ01DSUFfUE9XRVIzLCAwKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBhbG10Y19wY21jaWFfY29uZmlndXJlX3NvY2tldChzdHJ1Y3Qgc29jX3BjbWNpYV9zb2NrZXQgKnNrdCwKKwkJCQkJY29uc3Qgc29ja2V0X3N0YXRlX3QgKnN0YXRlKQoreworCWludCByZXQgPSAxOworCisJaWYgKHN0YXRlLT5WY2MgPT0gMCkKKwkJcmV0ID0gcGFsbXRjX3dpZmlfcG93ZXJkb3duKCk7CisJZWxzZSBpZiAoc3RhdGUtPlZjYyA9PSAzMykKKwkJcmV0ID0gcGFsbXRjX3dpZmlfcG93ZXJ1cCgpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgcGFsbXRjX3BjbWNpYV9zb2NrZXRfaW5pdChzdHJ1Y3Qgc29jX3BjbWNpYV9zb2NrZXQgKnNrdCkKK3sKK30KKworc3RhdGljIHZvaWQgcGFsbXRjX3BjbWNpYV9zb2NrZXRfc3VzcGVuZChzdHJ1Y3Qgc29jX3BjbWNpYV9zb2NrZXQgKnNrdCkKK3sKK30KKworc3RhdGljIHN0cnVjdCBwY21jaWFfbG93X2xldmVsIHBhbG10Y19wY21jaWFfb3BzID0geworCS5vd25lcgkJCT0gVEhJU19NT0RVTEUsCisKKwkuZmlyc3QJCQk9IDAsCisJLm5yCQkJPSAxLAorCisJLmh3X2luaXQJCT0gcGFsbXRjX3BjbWNpYV9od19pbml0LAorCS5od19zaHV0ZG93bgkJPSBwYWxtdGNfcGNtY2lhX2h3X3NodXRkb3duLAorCisJLnNvY2tldF9zdGF0ZQkJPSBwYWxtdGNfcGNtY2lhX3NvY2tldF9zdGF0ZSwKKwkuY29uZmlndXJlX3NvY2tldAk9IHBhbG10Y19wY21jaWFfY29uZmlndXJlX3NvY2tldCwKKworCS5zb2NrZXRfaW5pdAkJPSBwYWxtdGNfcGNtY2lhX3NvY2tldF9pbml0LAorCS5zb2NrZXRfc3VzcGVuZAkJPSBwYWxtdGNfcGNtY2lhX3NvY2tldF9zdXNwZW5kLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBhbG10Y19wY21jaWFfZGV2aWNlOworCitzdGF0aWMgaW50IF9faW5pdCBwYWxtdGNfcGNtY2lhX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJaWYgKCFtYWNoaW5lX2lzX3BhbG10YygpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXBhbG10Y19wY21jaWFfZGV2aWNlID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKCJweGEyeHgtcGNtY2lhIiwgLTEpOworCWlmICghcGFsbXRjX3BjbWNpYV9kZXZpY2UpCisJCXJldHVybiAtRU5PTUVNOworCisJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX2FkZF9kYXRhKHBhbG10Y19wY21jaWFfZGV2aWNlLCAmcGFsbXRjX3BjbWNpYV9vcHMsCisJCQkJCXNpemVvZihwYWxtdGNfcGNtY2lhX29wcykpOworCisJaWYgKCFyZXQpCisJCXJldCA9IHBsYXRmb3JtX2RldmljZV9hZGQocGFsbXRjX3BjbWNpYV9kZXZpY2UpOworCisJaWYgKHJldCkKKwkJcGxhdGZvcm1fZGV2aWNlX3B1dChwYWxtdGNfcGNtY2lhX2RldmljZSk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgcGFsbXRjX3BjbWNpYV9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIocGFsbXRjX3BjbWNpYV9kZXZpY2UpOworfQorCittb2R1bGVfaW5pdChwYWxtdGNfcGNtY2lhX2luaXQpOworbW9kdWxlX2V4aXQocGFsbXRjX3BjbWNpYV9leGl0KTsKKworTU9EVUxFX0FVVEhPUigiQWxleCBPc2Jvcm5lIDxhdG9AbWVzaHkub3JnPiwiCisJICAgICIgTWFyZWsgVmFzdXQgPG1hcmVrLnZhc3V0QGdtYWlsLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiUENNQ0lBIHN1cHBvcnQgZm9yIFBhbG0gVHVuZ3N0ZW58QyIpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTpweGEyeHgtcGNtY2lhIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9yc3JjX25vbnN0YXRpYy5jIGIvZHJpdmVycy9wY21jaWEvcnNyY19ub25zdGF0aWMuYwppbmRleCA5Y2EyMmM3Li43MDM5ZjNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9yc3JjX25vbnN0YXRpYy5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL3JzcmNfbm9uc3RhdGljLmMKQEAgLTIwNiw2ICsyMDYsNyBAQAogICAgIC8qIEZpcnN0LCB3aGF0IGRvZXMgYSBmbG9hdGluZyBwb3J0IGxvb2sgbGlrZT8gKi8KICAgICBiID0ga3phbGxvYygyNTYsIEdGUF9LRVJORUwpOwogICAgIGlmICghYikgeworCSAgICBwcmludGsoIlxuIik7CiAJICAgIGRldl9wcmludGsoS0VSTl9FUlIsICZzLT5kZXYsCiAJCSAgICJkb19pb19wcm9iZTogdW5hYmxlIHRvIGttYWxsb2MgMjU2IGJ5dGVzIik7CiAgICAgICAgICAgICByZXR1cm47CkBAIC0yNzUsNyArMjc2LDcgQEAKIAlzLT5jaXNfbWVtLnJlcyA9IHJlczsKIAlzLT5jaXNfdmlydCA9IGlvcmVtYXAocmVzLT5zdGFydCwgcy0+bWFwX3NpemUpOwogCWlmIChzLT5jaXNfdmlydCkgewotCQlyZXQgPSBwY2NhcmRfdmFsaWRhdGVfY2lzKHMsIEJJTkRfRk5fQUxMLCBjb3VudCk7CisJCXJldCA9IHBjY2FyZF92YWxpZGF0ZV9jaXMocywgY291bnQpOwogCQkvKiBpbnZhbGlkYXRlIG1hcHBpbmcgYW5kIENJUyBjYWNoZSAqLwogCQlpb3VubWFwKHMtPmNpc192aXJ0KTsKIAkJcy0+Y2lzX3ZpcnQgPSBOVUxMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvc2ExMTAwX2Fzc2FiZXQuYyBiL2RyaXZlcnMvcGNtY2lhL3NhMTEwMF9hc3NhYmV0LmMKaW5kZXggZjQyNDE0Ni4uYWM4YWEwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvc2ExMTAwX2Fzc2FiZXQuYworKysgYi9kcml2ZXJzL3BjbWNpYS9zYTExMDBfYXNzYWJldC5jCkBAIC0xMzAsNyArMTMwLDcgQEAKIAkuc29ja2V0X3N1c3BlbmQJCT0gYXNzYWJldF9wY21jaWFfc29ja2V0X3N1c3BlbmQsCiB9OwogCi1pbnQgX19pbml0IHBjbWNpYV9hc3NhYmV0X2luaXQoc3RydWN0IGRldmljZSAqZGV2KQoraW50IHBjbWNpYV9hc3NhYmV0X2luaXQoc3RydWN0IGRldmljZSAqZGV2KQogewogCWludCByZXQgPSAtRU5PREVWOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9zYTExMDBfZ2VuZXJpYy5jIGIvZHJpdmVycy9wY21jaWEvc2ExMTAwX2dlbmVyaWMuYwppbmRleCBkOGRhNWFjLi4yZDBlOTk3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9zYTExMDBfZ2VuZXJpYy5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL3NhMTEwMF9nZW5lcmljLmMKQEAgLTg5LDcgKzg5LDcgQEAKIHN0YXRpYyBpbnQgc2ExMXgwX2Rydl9wY21jaWFfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsCiAJCQkJICAgICBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7Ci0JcmV0dXJuIHBjbWNpYV9zb2NrZXRfZGV2X3N1c3BlbmQoJmRldi0+ZGV2LCBzdGF0ZSk7CisJcmV0dXJuIHBjbWNpYV9zb2NrZXRfZGV2X3N1c3BlbmQoJmRldi0+ZGV2KTsKIH0KIAogc3RhdGljIGludCBzYTExeDBfZHJ2X3BjbWNpYV9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvc2ExMTAwX25lcG9uc2V0LmMgYi9kcml2ZXJzL3BjbWNpYS9zYTExMDBfbmVwb25zZXQuYwppbmRleCA0YzQxZTg2Li4wYzc2ZDMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9zYTExMDBfbmVwb25zZXQuYworKysgYi9kcml2ZXJzL3BjbWNpYS9zYTExMDBfbmVwb25zZXQuYwpAQCAtMTIzLDcgKzEyMyw3IEBACiAJLnNvY2tldF9zdXNwZW5kIAk9IHNhMTExMV9wY21jaWFfc29ja2V0X3N1c3BlbmQsCiB9OwogCi1pbnQgX19pbml0IHBjbWNpYV9uZXBvbnNldF9pbml0KHN0cnVjdCBzYTExMTFfZGV2ICpzYWRldikKK2ludCBwY21jaWFfbmVwb25zZXRfaW5pdChzdHJ1Y3Qgc2ExMTExX2RldiAqc2FkZXYpCiB7CiAJaW50IHJldCA9IC1FTk9ERVY7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3NhMTExMV9nZW5lcmljLmMgYi9kcml2ZXJzL3BjbWNpYS9zYTExMTFfZ2VuZXJpYy5jCmluZGV4IDQwMTA1MmEuLjRiZTRlMTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL3NhMTExMV9nZW5lcmljLmMKKysrIGIvZHJpdmVycy9wY21jaWEvc2ExMTExX2dlbmVyaWMuYwpAQCAtMTU5LDcgKzE1OSw3IEBACiAKIHN0YXRpYyBpbnQgcGNtY2lhX3N1c3BlbmQoc3RydWN0IHNhMTExMV9kZXYgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewotCXJldHVybiBwY21jaWFfc29ja2V0X2Rldl9zdXNwZW5kKCZkZXYtPmRldiwgc3RhdGUpOworCXJldHVybiBwY21jaWFfc29ja2V0X2Rldl9zdXNwZW5kKCZkZXYtPmRldik7CiB9CiAKIHN0YXRpYyBpbnQgcGNtY2lhX3Jlc3VtZShzdHJ1Y3Qgc2ExMTExX2RldiAqZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvc29jX2NvbW1vbi5jIGIvZHJpdmVycy9wY21jaWEvc29jX2NvbW1vbi5jCmluZGV4IDE2M2NmOTguLmVmN2U5ZTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL3NvY19jb21tb24uYworKysgYi9kcml2ZXJzL3BjbWNpYS9zb2NfY29tbW9uLmMKQEAgLTMzNiw4ICszMzYsOSBAQAogCXN0cnVjdCBzb2NfcGNtY2lhX3NvY2tldCAqc2t0ID0gdG9fc29jX3BjbWNpYV9zb2NrZXQoc29jayk7CiAJdW5zaWduZWQgc2hvcnQgc3BlZWQgPSBtYXAtPnNwZWVkOwogCi0JZGVidWcoc2t0LCAyLCAibWFwICV1ICBzcGVlZCAldSBzdGFydCAweCUwOHggc3RvcCAweCUwOHhcbiIsCi0JCW1hcC0+bWFwLCBtYXAtPnNwZWVkLCBtYXAtPnN0YXJ0LCBtYXAtPnN0b3ApOworCWRlYnVnKHNrdCwgMiwgIm1hcCAldSAgc3BlZWQgJXUgc3RhcnQgMHglMDhsbHggc3RvcCAweCUwOGxseFxuIiwKKwkJbWFwLT5tYXAsIG1hcC0+c3BlZWQsICh1bnNpZ25lZCBsb25nIGxvbmcpbWFwLT5zdGFydCwKKwkJKHVuc2lnbmVkIGxvbmcgbG9uZyltYXAtPnN0b3ApOwogCWRlYnVnKHNrdCwgMiwgImZsYWdzOiAlcyVzJXMlcyVzJXMlcyVzXG4iLAogCQkobWFwLT5mbGFncz09MCk/IjxOT05FPiI6IiIsCiAJCShtYXAtPmZsYWdzJk1BUF9BQ1RJVkUpPyJBQ1RJVkUgIjoiIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3NvY2tldF9zeXNmcy5jIGIvZHJpdmVycy9wY21jaWEvc29ja2V0X3N5c2ZzLmMKaW5kZXggZmY5YTNiYi4uNzhkNWFhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvc29ja2V0X3N5c2ZzLmMKKysrIGIvZHJpdmVycy9wY21jaWEvc29ja2V0X3N5c2ZzLmMKQEAgLTMwMCw3ICszMDAsNyBAQAogCiAJCWlmICghKHMtPnN0YXRlICYgU09DS0VUX1BSRVNFTlQpKQogCQkJcmV0dXJuIC1FTk9ERVY7Ci0JCWlmIChwY2NhcmRfdmFsaWRhdGVfY2lzKHMsIEJJTkRfRk5fQUxMLCAmY2hhaW5zKSkKKwkJaWYgKHBjY2FyZF92YWxpZGF0ZV9jaXMocywgJmNoYWlucykpCiAJCQlyZXR1cm4gLUVJTzsKIAkJaWYgKCFjaGFpbnMpCiAJCQlyZXR1cm4gLUVOT0RBVEE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS90Y2ljLmMgYi9kcml2ZXJzL3BjbWNpYS90Y2ljLmMKaW5kZXggOGViMDQyMy4uNjkxODg0OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvdGNpYy5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL3RjaWMuYwpAQCAtMzY2LDcgKzM2Niw3IEBACiBzdGF0aWMgaW50IHRjaWNfZHJ2X3BjbWNpYV9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwKIAkJCQkgICAgIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKLQlyZXR1cm4gcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZCgmZGV2LT5kZXYsIHN0YXRlKTsKKwlyZXR1cm4gcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZCgmZGV2LT5kZXYpOwogfQogCiBzdGF0aWMgaW50IHRjaWNfZHJ2X3BjbWNpYV9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQpAQCAtNzMyLDggKzczMiw4IEBACiAgICAgdV9zaG9ydCBiYXNlLCBsZW4sIGlvY3RsOwogICAgIAogICAgIGRlYnVnKDEsICJTZXRJT01hcCglZCwgJWQsICUjMi4yeCwgJWQgbnMsICIKLQkgICIlI3gtJSN4KVxuIiwgcHNvY2ssIGlvLT5tYXAsIGlvLT5mbGFncywKLQkgIGlvLT5zcGVlZCwgaW8tPnN0YXJ0LCBpby0+c3RvcCk7CisJICAiJSNsbHgtJSNsbHgpXG4iLCBwc29jaywgaW8tPm1hcCwgaW8tPmZsYWdzLCBpby0+c3BlZWQsCisJICAodW5zaWduZWQgbG9uZyBsb25nKWlvLT5zdGFydCwgKHVuc2lnbmVkIGxvbmcgbG9uZylpby0+c3RvcCk7CiAgICAgaWYgKChpby0+bWFwID4gMSkgfHwgKGlvLT5zdGFydCA+IDB4ZmZmZikgfHwgKGlvLT5zdG9wID4gMHhmZmZmKSB8fAogCShpby0+c3RvcCA8IGlvLT5zdGFydCkpIHJldHVybiAtRUlOVkFMOwogICAgIHRjaWNfc2V0dyhUQ0lDX0FERFIrMiwgVENJQ19BRFIyX0lORFJFRyB8IChwc29jayA8PCBUQ0lDX1NTX1NIRlQpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3ZyYzQxNzFfY2FyZC5jIGIvZHJpdmVycy9wY21jaWEvdnJjNDE3MV9jYXJkLmMKaW5kZXggZDRhZDUwZC4uYzlmY2JkYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvdnJjNDE3MV9jYXJkLmMKKysrIGIvZHJpdmVycy9wY21jaWEvdnJjNDE3MV9jYXJkLmMKQEAgLTcwNyw3ICs3MDcsNyBAQAogc3RhdGljIGludCB2cmM0MTcxX2NhcmRfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsCiAJCQkJICAgICBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7Ci0JcmV0dXJuIHBjbWNpYV9zb2NrZXRfZGV2X3N1c3BlbmQoJmRldi0+ZGV2LCBzdGF0ZSk7CisJcmV0dXJuIHBjbWNpYV9zb2NrZXRfZGV2X3N1c3BlbmQoJmRldi0+ZGV2KTsKIH0KIAogc3RhdGljIGludCB2cmM0MTcxX2NhcmRfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3llbnRhX3NvY2tldC5jIGIvZHJpdmVycy9wY21jaWEveWVudGFfc29ja2V0LmMKaW5kZXggYjQ1OWU4Ny4uYWJlMGU0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEveWVudGFfc29ja2V0LmMKKysrIGIvZHJpdmVycy9wY21jaWEveWVudGFfc29ja2V0LmMKQEAgLTEyMjUsNjAgKzEyMjUsNzEgQEAKIH0KIAogI2lmZGVmIENPTkZJR19QTQotc3RhdGljIGludCB5ZW50YV9kZXZfc3VzcGVuZCAoc3RydWN0IHBjaV9kZXYgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQorc3RhdGljIGludCB5ZW50YV9kZXZfc3VzcGVuZF9ub2lycShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHllbnRhX3NvY2tldCAqc29ja2V0ID0gcGNpX2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KGRldik7CisJc3RydWN0IHllbnRhX3NvY2tldCAqc29ja2V0ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwogCWludCByZXQ7CiAKLQlyZXQgPSBwY21jaWFfc29ja2V0X2Rldl9zdXNwZW5kKCZkZXYtPmRldiwgc3RhdGUpOworCXJldCA9IHBjbWNpYV9zb2NrZXRfZGV2X3N1c3BlbmQoZGV2KTsKIAotCWlmIChzb2NrZXQpIHsKLQkJaWYgKHNvY2tldC0+dHlwZSAmJiBzb2NrZXQtPnR5cGUtPnNhdmVfc3RhdGUpCi0JCQlzb2NrZXQtPnR5cGUtPnNhdmVfc3RhdGUoc29ja2V0KTsKKwlpZiAoIXNvY2tldCkKKwkJcmV0dXJuIHJldDsKIAotCQkvKiBGSVhNRTogcGNpX3NhdmVfc3RhdGUgbmVlZHMgdG8gaGF2ZSBhIGJldHRlciBpbnRlcmZhY2UgKi8KLQkJcGNpX3NhdmVfc3RhdGUoZGV2KTsKLQkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgMTYqNCwgJnNvY2tldC0+c2F2ZWRfc3RhdGVbMF0pOwotCQlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LCAxNyo0LCAmc29ja2V0LT5zYXZlZF9zdGF0ZVsxXSk7Ci0JCXBjaV9kaXNhYmxlX2RldmljZShkZXYpOworCWlmIChzb2NrZXQtPnR5cGUgJiYgc29ja2V0LT50eXBlLT5zYXZlX3N0YXRlKQorCQlzb2NrZXQtPnR5cGUtPnNhdmVfc3RhdGUoc29ja2V0KTsKIAotCQkvKgotCQkgKiBTb21lIGxhcHRvcHMgKElCTSBUMjIpIGRvIG5vdCBsaWtlIHVzIHB1dHRpbmcgdGhlIENhcmRidXMKLQkJICogYnJpZGdlIGludG8gRDMuICBBdCBhIGd1ZXNzLCBzb21lIG90aGVyIGxhcHRvcCB3aWxsCi0JCSAqIHByb2JhYmx5IHJlcXVpcmUgdGhpcywgc28gbGVhdmUgaXQgY29tbWVudGVkIG91dCBmb3Igbm93LgotCQkgKi8KLQkJLyogcGNpX3NldF9wb3dlcl9zdGF0ZShkZXYsIDMpOyAqLwotCX0KKwlwY2lfc2F2ZV9zdGF0ZShwZGV2KTsKKwlwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgMTYqNCwgJnNvY2tldC0+c2F2ZWRfc3RhdGVbMF0pOworCXBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LCAxNyo0LCAmc29ja2V0LT5zYXZlZF9zdGF0ZVsxXSk7CisJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOworCisJLyoKKwkgKiBTb21lIGxhcHRvcHMgKElCTSBUMjIpIGRvIG5vdCBsaWtlIHVzIHB1dHRpbmcgdGhlIENhcmRidXMKKwkgKiBicmlkZ2UgaW50byBEMy4gIEF0IGEgZ3Vlc3MsIHNvbWUgb3RoZXIgbGFwdG9wIHdpbGwKKwkgKiBwcm9iYWJseSByZXF1aXJlIHRoaXMsIHNvIGxlYXZlIGl0IGNvbW1lbnRlZCBvdXQgZm9yIG5vdy4KKwkgKi8KKwkvKiBwY2lfc2V0X3Bvd2VyX3N0YXRlKGRldiwgMyk7ICovCiAKIAlyZXR1cm4gcmV0OwogfQogCi0KLXN0YXRpYyBpbnQgeWVudGFfZGV2X3Jlc3VtZSAoc3RydWN0IHBjaV9kZXYgKmRldikKK3N0YXRpYyBpbnQgeWVudGFfZGV2X3Jlc3VtZV9ub2lycShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHllbnRhX3NvY2tldCAqc29ja2V0ID0gcGNpX2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KGRldik7CisJc3RydWN0IHllbnRhX3NvY2tldCAqc29ja2V0ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCWludCByZXQ7CiAKLQlpZiAoc29ja2V0KSB7Ci0JCWludCByYzsKKwlpZiAoIXNvY2tldCkKKwkJcmV0dXJuIDA7CiAKLQkJcGNpX3NldF9wb3dlcl9zdGF0ZShkZXYsIDApOwotCQkvKiBGSVhNRTogcGNpX3Jlc3RvcmVfc3RhdGUgbmVlZHMgdG8gaGF2ZSBhIGJldHRlciBpbnRlcmZhY2UgKi8KLQkJcGNpX3Jlc3RvcmVfc3RhdGUoZGV2KTsKLQkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsIDE2KjQsIHNvY2tldC0+c2F2ZWRfc3RhdGVbMF0pOwotCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldiwgMTcqNCwgc29ja2V0LT5zYXZlZF9zdGF0ZVsxXSk7CisJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwZGV2LCAxNio0LCBzb2NrZXQtPnNhdmVkX3N0YXRlWzBdKTsKKwlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHBkZXYsIDE3KjQsIHNvY2tldC0+c2F2ZWRfc3RhdGVbMV0pOwogCi0JCXJjID0gcGNpX2VuYWJsZV9kZXZpY2UoZGV2KTsKLQkJaWYgKHJjKQotCQkJcmV0dXJuIHJjOworCXJldCA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CiAKLQkJcGNpX3NldF9tYXN0ZXIoZGV2KTsKKwlwY2lfc2V0X21hc3RlcihwZGV2KTsKIAotCQlpZiAoc29ja2V0LT50eXBlICYmIHNvY2tldC0+dHlwZS0+cmVzdG9yZV9zdGF0ZSkKLQkJCXNvY2tldC0+dHlwZS0+cmVzdG9yZV9zdGF0ZShzb2NrZXQpOwotCX0KKwlpZiAoc29ja2V0LT50eXBlICYmIHNvY2tldC0+dHlwZS0+cmVzdG9yZV9zdGF0ZSkKKwkJc29ja2V0LT50eXBlLT5yZXN0b3JlX3N0YXRlKHNvY2tldCk7CiAKLQlyZXR1cm4gcGNtY2lhX3NvY2tldF9kZXZfcmVzdW1lKCZkZXYtPmRldik7CisJcmV0dXJuIHBjbWNpYV9zb2NrZXRfZGV2X3Jlc3VtZShkZXYpOwogfQorCitzdGF0aWMgc3RydWN0IGRldl9wbV9vcHMgeWVudGFfcG1fb3BzID0geworCS5zdXNwZW5kX25vaXJxID0geWVudGFfZGV2X3N1c3BlbmRfbm9pcnEsCisJLnJlc3VtZV9ub2lycSA9IHllbnRhX2Rldl9yZXN1bWVfbm9pcnEsCisJLmZyZWV6ZV9ub2lycSA9IHllbnRhX2Rldl9zdXNwZW5kX25vaXJxLAorCS50aGF3X25vaXJxID0geWVudGFfZGV2X3Jlc3VtZV9ub2lycSwKKwkucG93ZXJvZmZfbm9pcnEgPSB5ZW50YV9kZXZfc3VzcGVuZF9ub2lycSwKKwkucmVzdG9yZV9ub2lycSA9IHllbnRhX2Rldl9yZXN1bWVfbm9pcnEsCit9OworCisjZGVmaW5lIFlFTlRBX1BNX09QUwkoJnllbnRhX3BtX29wcykKKyNlbHNlCisjZGVmaW5lIFlFTlRBX1BNX09QUwlOVUxMCiAjZW5kaWYKIAogI2RlZmluZSBDQl9JRCh2ZW5kLGRldix0eXBlKQkJCQlcCkBAIC0xMzc2LDEwICsxMzg3LDcgQEAKIAkuaWRfdGFibGUJPSB5ZW50YV90YWJsZSwKIAkucHJvYmUJCT0geWVudGFfcHJvYmUsCiAJLnJlbW92ZQkJPSBfX2RldmV4aXRfcCh5ZW50YV9jbG9zZSksCi0jaWZkZWYgQ09ORklHX1BNCi0JLnN1c3BlbmQJPSB5ZW50YV9kZXZfc3VzcGVuZCwKLQkucmVzdW1lCQk9IHllbnRhX2Rldl9yZXN1bWUsCi0jZW5kaWYKKwkuZHJpdmVyLnBtCT0gWUVOVEFfUE1fT1BTLAogfTsKIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9lZWVwYy1sYXB0b3AuYyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2VlZXBjLWxhcHRvcC5jCmluZGV4IGRhM2MwOGIuLmQzNzllNzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2VlZXBjLWxhcHRvcC5jCisrKyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2VlZXBjLWxhcHRvcC5jCkBAIC0xNTAsNiArMTUwLDggQEAKIC8qIFRoZSBhY3R1YWwgZGV2aWNlIHRoZSBkcml2ZXIgYmluZHMgdG8gKi8KIHN0YXRpYyBzdHJ1Y3QgZWVlcGNfaG90ayAqZWhvdGs7CiAKK3N0YXRpYyB2b2lkIGVlZXBjX3Jma2lsbF9ob3RwbHVnKGJvb2wgcmVhbCk7CisKIC8qIFBsYXRmb3JtIGRldmljZS9kcml2ZXIgKi8KIHN0YXRpYyBpbnQgZWVlcGNfaG90a190aGF3KHN0cnVjdCBkZXZpY2UgKmRldmljZSk7CiBzdGF0aWMgaW50IGVlZXBjX2hvdGtfcmVzdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpOwpAQCAtMzQzLDE0ICszNDUsMjMgQEAKIHN0YXRpYyBpbnQgZWVlcGNfcmZraWxsX3NldCh2b2lkICpkYXRhLCBib29sIGJsb2NrZWQpCiB7CiAJdW5zaWduZWQgbG9uZyBhc2wgPSAodW5zaWduZWQgbG9uZylkYXRhOwotCXJldHVybiBzZXRfYWNwaShhc2wsICFibG9ja2VkKTsKKwlpbnQgcmV0OworCisJaWYgKGFzbCAhPSBDTV9BU0xfV0xBTikKKwkJcmV0dXJuIHNldF9hY3BpKGFzbCwgIWJsb2NrZWQpOworCisJLyogaGFjayB0byBhdm9pZCBwYW5pYyB3aXRoIHJ0Mjg2MHN0YSAqLworCWlmIChibG9ja2VkKQorCQllZWVwY19yZmtpbGxfaG90cGx1ZyhmYWxzZSk7CisJcmV0ID0gc2V0X2FjcGkoYXNsLCAhYmxvY2tlZCk7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCByZmtpbGxfb3BzIGVlZXBjX3Jma2lsbF9vcHMgPSB7CiAJLnNldF9ibG9jayA9IGVlZXBjX3Jma2lsbF9zZXQsCiB9OwogCi1zdGF0aWMgdm9pZCBfX2luaXQgZWVlcGNfZW5hYmxlX2NhbWVyYSh2b2lkKQorc3RhdGljIHZvaWQgX19kZXZpbml0IGVlZXBjX2VuYWJsZV9jYW1lcmEodm9pZCkKIHsKIAkvKgogCSAqIElmIHRoZSBmb2xsb3dpbmcgY2FsbCB0byBzZXRfYWNwaSgpIGZhaWxzLCBpdCdzIGJlY2F1c2UgdGhlcmUncyBubwpAQCAtNjI0LDcgKzYzNSw3IEBACiAJc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJkID0gZWVlcGNfYmFja2xpZ2h0X2RldmljZTsKIAlpZiAoYmQpIHsKIAkJaW50IG9sZCA9IGJkLT5wcm9wcy5icmlnaHRuZXNzOwotCQliZC0+cHJvcHMuYnJpZ2h0bmVzcyA9IHJlYWRfYnJpZ2h0bmVzcyhiZCk7CisJCWJhY2tsaWdodF9mb3JjZV91cGRhdGUoYmQsIEJBQ0tMSUdIVF9VUERBVEVfSE9US0VZKTsKIAkJcmV0dXJuIG9sZDsKIAl9CiAJcmV0dXJuIC0xOwpAQCAtNjQzLDEzICs2NTQsMTMgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgZWVlcGNfcmZraWxsX2hvdHBsdWcodm9pZCkKK3N0YXRpYyB2b2lkIGVlZXBjX3Jma2lsbF9ob3RwbHVnKGJvb2wgcmVhbCkKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2OwogCXN0cnVjdCBwY2lfYnVzICpidXM7Ci0JYm9vbCBibG9ja2VkID0gZWVlcGNfd2xhbl9yZmtpbGxfYmxvY2tlZCgpOworCWJvb2wgYmxvY2tlZCA9IHJlYWwgPyBlZWVwY193bGFuX3Jma2lsbF9ibG9ja2VkKCkgOiB0cnVlOwogCi0JaWYgKGVob3RrLT53bGFuX3Jma2lsbCkKKwlpZiAocmVhbCAmJiBlaG90ay0+d2xhbl9yZmtpbGwpCiAJCXJma2lsbF9zZXRfc3dfc3RhdGUoZWhvdGstPndsYW5fcmZraWxsLCBibG9ja2VkKTsKIAogCW11dGV4X2xvY2soJmVob3RrLT5ob3RwbHVnX2xvY2spOwpAQCAtNjkyLDcgKzcwMyw3IEBACiAJaWYgKGV2ZW50ICE9IEFDUElfTk9USUZZX0JVU19DSEVDSykKIAkJcmV0dXJuOwogCi0JZWVlcGNfcmZraWxsX2hvdHBsdWcoKTsKKwllZWVwY19yZmtpbGxfaG90cGx1Zyh0cnVlKTsKIH0KIAogc3RhdGljIHZvaWQgZWVlcGNfaG90a19ub3RpZnkoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UsIHUzMiBldmVudCkKQEAgLTg1MCw3ICs4NjEsNyBAQAogewogCS8qIFJlZnJlc2ggYm90aCB3bGFuIHJma2lsbCBzdGF0ZSBhbmQgcGNpIGhvdHBsdWcgKi8KIAlpZiAoZWhvdGstPndsYW5fcmZraWxsKQotCQllZWVwY19yZmtpbGxfaG90cGx1ZygpOworCQllZWVwY19yZmtpbGxfaG90cGx1Zyh0cnVlKTsKIAogCWlmIChlaG90ay0+Ymx1ZXRvb3RoX3Jma2lsbCkKIAkJcmZraWxsX3NldF9zd19zdGF0ZShlaG90ay0+Ymx1ZXRvb3RoX3Jma2lsbCwKQEAgLTk5Myw3ICsxMDA0LDcgQEAKIAkgKiBSZWZyZXNoIHBjaSBob3RwbHVnIGluIGNhc2UgdGhlIHJma2lsbCBzdGF0ZSB3YXMgY2hhbmdlZCBhZnRlcgogCSAqIGVlZXBjX3VucmVnaXN0ZXJfcmZraWxsX25vdGlmaWVyKCkKIAkgKi8KLQllZWVwY19yZmtpbGxfaG90cGx1ZygpOworCWVlZXBjX3Jma2lsbF9ob3RwbHVnKHRydWUpOwogCWlmIChlaG90ay0+aG90cGx1Z19zbG90KQogCQlwY2lfaHBfZGVyZWdpc3RlcihlaG90ay0+aG90cGx1Z19zbG90KTsKIApAQCAtMTEwOSw3ICsxMTIwLDcgQEAKIAkgKiBSZWZyZXNoIHBjaSBob3RwbHVnIGluIGNhc2UgdGhlIHJma2lsbCBzdGF0ZSB3YXMgY2hhbmdlZCBkdXJpbmcKIAkgKiBzZXR1cC4KIAkgKi8KLQllZWVwY19yZmtpbGxfaG90cGx1ZygpOworCWVlZXBjX3Jma2lsbF9ob3RwbHVnKHRydWUpOwogCiBleGl0OgogCWlmIChyZXN1bHQgJiYgcmVzdWx0ICE9IC1FTk9ERVYpCkBAIC0xMTg5LDcgKzEyMDAsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGVlZXBjX2hvdGtfYWRkKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKQorc3RhdGljIGludCBfX2RldmluaXQgZWVlcGNfaG90a19hZGQoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UpCiB7CiAJc3RydWN0IGRldmljZSAqZGV2OwogCWludCByZXN1bHQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9mdWppdHN1LWxhcHRvcC5jIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvZnVqaXRzdS1sYXB0b3AuYwppbmRleCBmMzVhZWU1Li5iY2Q0YmE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9mdWppdHN1LWxhcHRvcC5jCisrKyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2Z1aml0c3UtbGFwdG9wLmMKQEAgLTk0NCw3ICs5NDQsNyBAQAogCXN0cnVjdCBmdWppdHN1X2hvdGtleV90ICpmdWppdHN1X2hvdGtleSA9IGFjcGlfZHJpdmVyX2RhdGEoZGV2aWNlKTsKIAlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dCA9IGZ1aml0c3VfaG90a2V5LT5pbnB1dDsKIAotI2lmZGVmIENPTkZJR19MRURTX0NMQVNTCisjaWYgZGVmaW5lZChDT05GSUdfTEVEU19DTEFTUykgfHwgZGVmaW5lZChDT05GSUdfTEVEU19DTEFTU19NT0RVTEUpCiAJaWYgKGZ1aml0c3VfaG90a2V5LT5sb2dvbGFtcF9yZWdpc3RlcmVkKQogCQlsZWRfY2xhc3NkZXZfdW5yZWdpc3RlcigmbG9nb2xhbXBfbGVkKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvc29ueS1sYXB0b3AuYyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L3NvbnktbGFwdG9wLmMKaW5kZXggYWZkYmRhYS4uYTJhNzQyYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvc29ueS1sYXB0b3AuYworKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9zb255LWxhcHRvcC5jCkBAIC0xMjExLDE1ICsxMjExLDYgQEAKIAkJfQogCX0KIAotCS8qIHRyeSB0byBfSU5JIHRoZSBkZXZpY2UgaWYgc3VjaCBtZXRob2QgZXhpc3RzIChBQ1BJIHNwZWMgMy4wLTYuNS4xCi0JICogc2hvdWxkIGJlIHJlc3BlY3RlZCBhcyB3ZSBhbHJlYWR5IGNoZWNrZWQgZm9yIHRoZSBkZXZpY2UgcHJlc2VuY2UgYWJvdmUgKi8KLQlpZiAoQUNQSV9TVUNDRVNTKGFjcGlfZ2V0X2hhbmRsZShzb255X25jX2FjcGlfaGFuZGxlLCBNRVRIT0RfTkFNRV9fSU5JLCAmaGFuZGxlKSkpIHsKLQkJZHByaW50aygiSW52b2tpbmcgX0lOSVxuIik7Ci0JCWlmIChBQ1BJX0ZBSUxVUkUoYWNwaV9ldmFsdWF0ZV9vYmplY3Qoc29ueV9uY19hY3BpX2hhbmRsZSwgTUVUSE9EX05BTUVfX0lOSSwKLQkJCQkJCU5VTEwsIE5VTEwpKSkKLQkJCWRwcmludGsoIl9JTkkgTWV0aG9kIGZhaWxlZFxuIik7Ci0JfQotCiAJaWYgKEFDUElfU1VDQ0VTUyhhY3BpX2dldF9oYW5kbGUoc29ueV9uY19hY3BpX2hhbmRsZSwgIkVDT04iLAogCQkJCQkgJmhhbmRsZSkpKSB7CiAJCWlmIChhY3BpX2NhbGxzZXRmdW5jKHNvbnlfbmNfYWNwaV9oYW5kbGUsICJFQ09OIiwgMSwgTlVMTCkpCkBAIC0xMzk5LDI3ICsxMzkwLDIwIEBACiAJc3RydWN0IHNvbnlwaV9ldmVudAkqZXZlbnRzOwogfTsKIAotc3RydWN0IGRldmljZV9jdHJsIHsKLQlpbnQJCQkJbW9kZWw7Ci0JaW50CQkJCSgqaGFuZGxlX2lycSkoY29uc3QgdTgsIGNvbnN0IHU4KTsKLQl1MTYJCQkJZXZwb3J0X29mZnNldDsKLQl1OAkJCQloYXNfY2FtZXJhOwotCXU4CQkJCWhhc19ibHVldG9vdGg7Ci0JdTgJCQkJaGFzX3d3YW47Ci0Jc3RydWN0IHNvbnlwaV9ldmVudHR5cGVzCSpldmVudF90eXBlczsKLX07Ci0KIHN0cnVjdCBzb255X3BpY19kZXYgewotCXN0cnVjdCBkZXZpY2VfY3RybAkqY29udHJvbDsKLQlzdHJ1Y3QgYWNwaV9kZXZpY2UJKmFjcGlfZGV2OwotCXN0cnVjdCBzb255X3BpY19pcnEJKmN1cl9pcnE7Ci0Jc3RydWN0IHNvbnlfcGljX2lvcG9ydAkqY3VyX2lvcG9ydDsKLQlzdHJ1Y3QgbGlzdF9oZWFkCWludGVycnVwdHM7Ci0Jc3RydWN0IGxpc3RfaGVhZAlpb3BvcnRzOwotCXN0cnVjdCBtdXRleAkJbG9jazsKLQl1OAkJCWNhbWVyYV9wb3dlcjsKLQl1OAkJCWJsdWV0b290aF9wb3dlcjsKLQl1OAkJCXd3YW5fcG93ZXI7CisJc3RydWN0IGFjcGlfZGV2aWNlCQkqYWNwaV9kZXY7CisJc3RydWN0IHNvbnlfcGljX2lycQkJKmN1cl9pcnE7CisJc3RydWN0IHNvbnlfcGljX2lvcG9ydAkJKmN1cl9pb3BvcnQ7CisJc3RydWN0IGxpc3RfaGVhZAkJaW50ZXJydXB0czsKKwlzdHJ1Y3QgbGlzdF9oZWFkCQlpb3BvcnRzOworCXN0cnVjdCBtdXRleAkJCWxvY2s7CisJc3RydWN0IHNvbnlwaV9ldmVudHR5cGVzCSpldmVudF90eXBlczsKKwlpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqaGFuZGxlX2lycSkoY29uc3QgdTgsIGNvbnN0IHU4KTsKKwlpbnQJCQkJbW9kZWw7CisJdTE2CQkJCWV2cG9ydF9vZmZzZXQ7CisJdTgJCQkJY2FtZXJhX3Bvd2VyOworCXU4CQkJCWJsdWV0b290aF9wb3dlcjsKKwl1OAkJCQl3d2FuX3Bvd2VyOwogfTsKIAogc3RhdGljIHN0cnVjdCBzb255X3BpY19kZXYgc3BpY19kZXYgPSB7CkBAIC0xNDI3LDYgKzE0MTEsOCBAQAogCS5pb3BvcnRzCT0gTElTVF9IRUFEX0lOSVQoc3BpY19kZXYuaW9wb3J0cyksCiB9OwogCitzdGF0aWMgaW50IHNwaWNfZHJ2X3JlZ2lzdGVyZWQ7CisKIC8qIEV2ZW50IG1hc2tzICovCiAjZGVmaW5lIFNPTllQSV9KT0dHRVJfTUFTSwkJCTB4MDAwMDAwMDEKICNkZWZpbmUgU09OWVBJX0NBUFRVUkVfTUFTSwkJCTB4MDAwMDAwMDIKQEAgLTE3MjQsMjcgKzE3MTAsNiBAQAogCXJldHVybiAxOwogfQogCi1zdGF0aWMgc3RydWN0IGRldmljZV9jdHJsIHNwaWNfdHlwZXNbXSA9IHsKLQl7Ci0JCS5tb2RlbCA9IFNPTllQSV9ERVZJQ0VfVFlQRTEsCi0JCS5oYW5kbGVfaXJxID0gTlVMTCwKLQkJLmV2cG9ydF9vZmZzZXQgPSBTT05ZUElfVFlQRTFfT0ZGU0VULAotCQkuZXZlbnRfdHlwZXMgPSB0eXBlMV9ldmVudHMsCi0JfSwKLQl7Ci0JCS5tb2RlbCA9IFNPTllQSV9ERVZJQ0VfVFlQRTIsCi0JCS5oYW5kbGVfaXJxID0gTlVMTCwKLQkJLmV2cG9ydF9vZmZzZXQgPSBTT05ZUElfVFlQRTJfT0ZGU0VULAotCQkuZXZlbnRfdHlwZXMgPSB0eXBlMl9ldmVudHMsCi0JfSwKLQl7Ci0JCS5tb2RlbCA9IFNPTllQSV9ERVZJQ0VfVFlQRTMsCi0JCS5oYW5kbGVfaXJxID0gdHlwZTNfaGFuZGxlX2lycSwKLQkJLmV2cG9ydF9vZmZzZXQgPSBTT05ZUElfVFlQRTNfT0ZGU0VULAotCQkuZXZlbnRfdHlwZXMgPSB0eXBlM19ldmVudHMsCi0JfSwKLX07Ci0KIHN0YXRpYyB2b2lkIHNvbnlfcGljX2RldGVjdF9kZXZpY2VfdHlwZShzdHJ1Y3Qgc29ueV9waWNfZGV2ICpkZXYpCiB7CiAJc3RydWN0IHBjaV9kZXYgKnBjaWRldjsKQEAgLTE3NTIsNDggKzE3MTcsNjMgQEAKIAlwY2lkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfVkVORE9SX0lEX0lOVEVMLAogCQkJUENJX0RFVklDRV9JRF9JTlRFTF84MjM3MUFCXzMsIE5VTEwpOwogCWlmIChwY2lkZXYpIHsKLQkJZGV2LT5jb250cm9sID0gJnNwaWNfdHlwZXNbMF07CisJCWRldi0+bW9kZWwgPSBTT05ZUElfREVWSUNFX1RZUEUxOworCQlkZXYtPmV2cG9ydF9vZmZzZXQgPSBTT05ZUElfVFlQRTFfT0ZGU0VUOworCQlkZXYtPmV2ZW50X3R5cGVzID0gdHlwZTFfZXZlbnRzOwogCQlnb3RvIG91dDsKIAl9CiAKIAlwY2lkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfVkVORE9SX0lEX0lOVEVMLAogCQkJUENJX0RFVklDRV9JRF9JTlRFTF9JQ0g2XzEsIE5VTEwpOwogCWlmIChwY2lkZXYpIHsKLQkJZGV2LT5jb250cm9sID0gJnNwaWNfdHlwZXNbMl07CisJCWRldi0+bW9kZWwgPSBTT05ZUElfREVWSUNFX1RZUEUyOworCQlkZXYtPmV2cG9ydF9vZmZzZXQgPSBTT05ZUElfVFlQRTJfT0ZGU0VUOworCQlkZXYtPmV2ZW50X3R5cGVzID0gdHlwZTJfZXZlbnRzOwogCQlnb3RvIG91dDsKIAl9CiAKIAlwY2lkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfVkVORE9SX0lEX0lOVEVMLAogCQkJUENJX0RFVklDRV9JRF9JTlRFTF9JQ0g3XzEsIE5VTEwpOwogCWlmIChwY2lkZXYpIHsKLQkJZGV2LT5jb250cm9sID0gJnNwaWNfdHlwZXNbMl07CisJCWRldi0+bW9kZWwgPSBTT05ZUElfREVWSUNFX1RZUEUzOworCQlkZXYtPmhhbmRsZV9pcnEgPSB0eXBlM19oYW5kbGVfaXJxOworCQlkZXYtPmV2cG9ydF9vZmZzZXQgPSBTT05ZUElfVFlQRTNfT0ZGU0VUOworCQlkZXYtPmV2ZW50X3R5cGVzID0gdHlwZTNfZXZlbnRzOwogCQlnb3RvIG91dDsKIAl9CiAKIAlwY2lkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfVkVORE9SX0lEX0lOVEVMLAogCQkJUENJX0RFVklDRV9JRF9JTlRFTF9JQ0g4XzQsIE5VTEwpOwogCWlmIChwY2lkZXYpIHsKLQkJZGV2LT5jb250cm9sID0gJnNwaWNfdHlwZXNbMl07CisJCWRldi0+bW9kZWwgPSBTT05ZUElfREVWSUNFX1RZUEUzOworCQlkZXYtPmhhbmRsZV9pcnEgPSB0eXBlM19oYW5kbGVfaXJxOworCQlkZXYtPmV2cG9ydF9vZmZzZXQgPSBTT05ZUElfVFlQRTNfT0ZGU0VUOworCQlkZXYtPmV2ZW50X3R5cGVzID0gdHlwZTNfZXZlbnRzOwogCQlnb3RvIG91dDsKIAl9CiAKIAlwY2lkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfVkVORE9SX0lEX0lOVEVMLAogCQkJUENJX0RFVklDRV9JRF9JTlRFTF9JQ0g5XzEsIE5VTEwpOwogCWlmIChwY2lkZXYpIHsKLQkJZGV2LT5jb250cm9sID0gJnNwaWNfdHlwZXNbMl07CisJCWRldi0+bW9kZWwgPSBTT05ZUElfREVWSUNFX1RZUEUzOworCQlkZXYtPmhhbmRsZV9pcnEgPSB0eXBlM19oYW5kbGVfaXJxOworCQlkZXYtPmV2cG9ydF9vZmZzZXQgPSBTT05ZUElfVFlQRTNfT0ZGU0VUOworCQlkZXYtPmV2ZW50X3R5cGVzID0gdHlwZTNfZXZlbnRzOwogCQlnb3RvIG91dDsKIAl9CiAKIAkvKiBkZWZhdWx0ICovCi0JZGV2LT5jb250cm9sID0gJnNwaWNfdHlwZXNbMV07CisJZGV2LT5tb2RlbCA9IFNPTllQSV9ERVZJQ0VfVFlQRTI7CisJZGV2LT5ldnBvcnRfb2Zmc2V0ID0gU09OWVBJX1RZUEUyX09GRlNFVDsKKwlkZXYtPmV2ZW50X3R5cGVzID0gdHlwZTJfZXZlbnRzOwogCiBvdXQ6CiAJaWYgKHBjaWRldikKIAkJcGNpX2Rldl9wdXQocGNpZGV2KTsKIAogCXByaW50ayhLRVJOX0lORk8gRFJWX1BGWCAiZGV0ZWN0ZWQgVHlwZSVkIG1vZGVsXG4iLAotCQkJZGV2LT5jb250cm9sLT5tb2RlbCA9PSBTT05ZUElfREVWSUNFX1RZUEUxID8gMSA6Ci0JCQlkZXYtPmNvbnRyb2wtPm1vZGVsID09IFNPTllQSV9ERVZJQ0VfVFlQRTIgPyAyIDogMyk7CisJCQlkZXYtPm1vZGVsID09IFNPTllQSV9ERVZJQ0VfVFlQRTEgPyAxIDoKKwkJCWRldi0+bW9kZWwgPT0gU09OWVBJX0RFVklDRV9UWVBFMiA/IDIgOiAzKTsKIH0KIAogLyogY2FtZXJhIHRlc3RzIGFuZCBwb3dlcm9uL3Bvd2Vyb2ZmICovCkBAIC0yNTY2LDcgKzI1NDYsNyBAQAogCWJ1ZmZlci5wb2ludGVyID0gcmVzb3VyY2U7CiAKIAkvKiBzZXR1cCBUeXBlIDEgcmVzb3VyY2VzICovCi0JaWYgKHNwaWNfZGV2LmNvbnRyb2wtPm1vZGVsID09IFNPTllQSV9ERVZJQ0VfVFlQRTEpIHsKKwlpZiAoc3BpY19kZXYubW9kZWwgPT0gU09OWVBJX0RFVklDRV9UWVBFMSkgewogCiAJCS8qIHNldHVwIGlvIHJlc291cmNlcyAqLwogCQlyZXNvdXJjZS0+cmVzMS50eXBlID0gQUNQSV9SRVNPVVJDRV9UWVBFX0lPOwpAQCAtMjY0OSwyOSArMjYyOSwyOCBAQAogCQlkYXRhX21hc2sgPSBpbmJfcChkZXYtPmN1cl9pb3BvcnQtPmlvMi5taW5pbXVtKTsKIAllbHNlCiAJCWRhdGFfbWFzayA9IGluYl9wKGRldi0+Y3VyX2lvcG9ydC0+aW8xLm1pbmltdW0gKwotCQkJCWRldi0+Y29udHJvbC0+ZXZwb3J0X29mZnNldCk7CisJCQkJZGV2LT5ldnBvcnRfb2Zmc2V0KTsKIAogCWRwcmludGsoImV2ZW50IChbJS4yeF0gWyUuMnhdKSBhdCBwb3J0IDB4JS40eCgrMHglLjJ4KVxuIiwKIAkJCWV2LCBkYXRhX21hc2ssIGRldi0+Y3VyX2lvcG9ydC0+aW8xLm1pbmltdW0sCi0JCQlkZXYtPmNvbnRyb2wtPmV2cG9ydF9vZmZzZXQpOworCQkJZGV2LT5ldnBvcnRfb2Zmc2V0KTsKIAogCWlmIChldiA9PSAweDAwIHx8IGV2ID09IDB4ZmYpCiAJCXJldHVybiBJUlFfSEFORExFRDsKIAotCWZvciAoaSA9IDA7IGRldi0+Y29udHJvbC0+ZXZlbnRfdHlwZXNbaV0ubWFzazsgaSsrKSB7CisJZm9yIChpID0gMDsgZGV2LT5ldmVudF90eXBlc1tpXS5tYXNrOyBpKyspIHsKIAotCQlpZiAoKGRhdGFfbWFzayAmIGRldi0+Y29udHJvbC0+ZXZlbnRfdHlwZXNbaV0uZGF0YSkgIT0KLQkJICAgIGRldi0+Y29udHJvbC0+ZXZlbnRfdHlwZXNbaV0uZGF0YSkKKwkJaWYgKChkYXRhX21hc2sgJiBkZXYtPmV2ZW50X3R5cGVzW2ldLmRhdGEpICE9CisJCSAgICBkZXYtPmV2ZW50X3R5cGVzW2ldLmRhdGEpCiAJCQljb250aW51ZTsKIAotCQlpZiAoIShtYXNrICYgZGV2LT5jb250cm9sLT5ldmVudF90eXBlc1tpXS5tYXNrKSkKKwkJaWYgKCEobWFzayAmIGRldi0+ZXZlbnRfdHlwZXNbaV0ubWFzaykpCiAJCQljb250aW51ZTsKIAotCQlmb3IgKGogPSAwOyBkZXYtPmNvbnRyb2wtPmV2ZW50X3R5cGVzW2ldLmV2ZW50c1tqXS5ldmVudDsgaisrKSB7Ci0JCQlpZiAoZXYgPT0gZGV2LT5jb250cm9sLT5ldmVudF90eXBlc1tpXS5ldmVudHNbal0uZGF0YSkgeworCQlmb3IgKGogPSAwOyBkZXYtPmV2ZW50X3R5cGVzW2ldLmV2ZW50c1tqXS5ldmVudDsgaisrKSB7CisJCQlpZiAoZXYgPT0gZGV2LT5ldmVudF90eXBlc1tpXS5ldmVudHNbal0uZGF0YSkgewogCQkJCWRldmljZV9ldmVudCA9Ci0JCQkJCWRldi0+Y29udHJvbC0+Ci0JCQkJCQlldmVudF90eXBlc1tpXS5ldmVudHNbal0uZXZlbnQ7CisJCQkJCWRldi0+ZXZlbnRfdHlwZXNbaV0uZXZlbnRzW2pdLmV2ZW50OwogCQkJCWdvdG8gZm91bmQ7CiAJCQl9CiAJCX0KQEAgLTI2NzksMTMgKzI2NTgsMTIgQEAKIAkvKiBTdGlsbCBub3QgYWJsZSB0byBkZWNvZGUgdGhlIGV2ZW50IHRyeSB0byBwYXNzCiAJICogaXQgb3ZlciB0byB0aGUgbWluaWRyaXZlcgogCSAqLwotCWlmIChkZXYtPmNvbnRyb2wtPmhhbmRsZV9pcnEgJiYKLQkJCWRldi0+Y29udHJvbC0+aGFuZGxlX2lycShkYXRhX21hc2ssIGV2KSA9PSAwKQorCWlmIChkZXYtPmhhbmRsZV9pcnEgJiYgZGV2LT5oYW5kbGVfaXJxKGRhdGFfbWFzaywgZXYpID09IDApCiAJCXJldHVybiBJUlFfSEFORExFRDsKIAogCWRwcmludGsoInVua25vd24gZXZlbnQgKFslLjJ4XSBbJS4yeF0pIGF0IHBvcnQgMHglLjR4KCsweCUuMngpXG4iLAogCQkJZXYsIGRhdGFfbWFzaywgZGV2LT5jdXJfaW9wb3J0LT5pbzEubWluaW11bSwKLQkJCWRldi0+Y29udHJvbC0+ZXZwb3J0X29mZnNldCk7CisJCQlkZXYtPmV2cG9ydF9vZmZzZXQpOwogCXJldHVybiBJUlFfSEFORExFRDsKIAogZm91bmQ6CkBAIC0yODE2LDcgKzI3OTQsNyBAQAogCS8qIHJlcXVlc3QgSVJRICovCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9yZXZlcnNlKGlycSwgJnNwaWNfZGV2LmludGVycnVwdHMsIGxpc3QpIHsKIAkJaWYgKCFyZXF1ZXN0X2lycShpcnEtPmlycS5pbnRlcnJ1cHRzWzBdLCBzb255X3BpY19pcnEsCi0JCQkJCUlSUUZfU0hBUkVELCAic29ueS1sYXB0b3AiLCAmc3BpY19kZXYpKSB7CisJCQkJCUlSUUZfRElTQUJMRUQsICJzb255LWxhcHRvcCIsICZzcGljX2RldikpIHsKIAkJCWRwcmludGsoIklSUTogJWQgLSB0cmlnZ2VyaW5nOiAlZCAtICIKIAkJCQkJInBvbGFyaXR5OiAlZCAtIHNocjogJWRcbiIsCiAJCQkJCWlycS0+aXJxLmludGVycnVwdHNbMF0sCkBAIC0yOTQ5LDYgKzI5MjcsNyBAQAogCQkJCQkiVW5hYmxlIHRvIHJlZ2lzdGVyIFNQSUMgZHJpdmVyLiIpOwogCQkJZ290byBvdXQ7CiAJCX0KKwkJc3BpY19kcnZfcmVnaXN0ZXJlZCA9IDE7CiAJfQogCiAJcmVzdWx0ID0gYWNwaV9idXNfcmVnaXN0ZXJfZHJpdmVyKCZzb255X25jX2RyaXZlcik7CkBAIC0yOTYwLDcgKzI5MzksNyBAQAogCXJldHVybiAwOwogCiBvdXRfdW5yZWdpc3Rlcl9waWM6Ci0JaWYgKCFub19zcGljKQorCWlmIChzcGljX2Rydl9yZWdpc3RlcmVkKQogCQlhY3BpX2J1c191bnJlZ2lzdGVyX2RyaXZlcigmc29ueV9waWNfZHJpdmVyKTsKIG91dDoKIAlyZXR1cm4gcmVzdWx0OwpAQCAtMjk2OSw3ICsyOTQ4LDcgQEAKIHN0YXRpYyB2b2lkIF9fZXhpdCBzb255X2xhcHRvcF9leGl0KHZvaWQpCiB7CiAJYWNwaV9idXNfdW5yZWdpc3Rlcl9kcml2ZXIoJnNvbnlfbmNfZHJpdmVyKTsKLQlpZiAoIW5vX3NwaWMpCisJaWYgKHNwaWNfZHJ2X3JlZ2lzdGVyZWQpCiAJCWFjcGlfYnVzX3VucmVnaXN0ZXJfZHJpdmVyKCZzb255X3BpY19kcml2ZXIpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni90aGlua3BhZF9hY3BpLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni90aGlua3BhZF9hY3BpLmMKaW5kZXggZjc4ZDI3NS4uZDkzMTA4ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvdGhpbmtwYWRfYWNwaS5jCisrKyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L3RoaW5rcGFkX2FjcGkuYwpAQCAtMjIsNyArMjIsNyBAQAogICovCiAKICNkZWZpbmUgVFBBQ1BJX1ZFUlNJT04gIjAuMjMiCi0jZGVmaW5lIFRQQUNQSV9TWVNGU19WRVJTSU9OIDB4MDIwNDAwCisjZGVmaW5lIFRQQUNQSV9TWVNGU19WRVJTSU9OIDB4MDIwNTAwCiAKIC8qCiAgKiAgQ2hhbmdlbG9nOgpAQCAtMTQ1LDYgKzE0NSw1MSBAQAogCVRQX0FDUElfV0dTVl9TVEFURV9VV0JQV1IJPSAweDAwMjAsIC8qIFVXQiByYWRpbyBlbmFibGVkICovCiB9OwogCisvKiBIS0VZIGV2ZW50cyAqLworZW51bSB0cGFjcGlfaGtleV9ldmVudF90IHsKKwkvKiBIb3RrZXktcmVsYXRlZCAqLworCVRQX0hLRVlfRVZfSE9US0VZX0JBU0UJCT0gMHgxMDAxLCAvKiBmaXJzdCBob3RrZXkgKEZOK0YxKSAqLworCVRQX0hLRVlfRVZfQlJHSFRfVVAJCT0gMHgxMDEwLCAvKiBCcmlnaHRuZXNzIHVwICovCisJVFBfSEtFWV9FVl9CUkdIVF9ET1dOCQk9IDB4MTAxMSwgLyogQnJpZ2h0bmVzcyBkb3duICovCisJVFBfSEtFWV9FVl9WT0xfVVAJCT0gMHgxMDE1LCAvKiBWb2x1bWUgdXAgb3IgdW5tdXRlICovCisJVFBfSEtFWV9FVl9WT0xfRE9XTgkJPSAweDEwMTYsIC8qIFZvbHVtZSBkb3duIG9yIHVubXV0ZSAqLworCVRQX0hLRVlfRVZfVk9MX01VVEUJCT0gMHgxMDE3LCAvKiBNaXhlciBvdXRwdXQgbXV0ZSAqLworCisJLyogUmVhc29ucyBmb3Igd2FraW5nIHVwIGZyb20gUzMvUzQgKi8KKwlUUF9IS0VZX0VWX1dLVVBfUzNfVU5ET0NLCT0gMHgyMzA0LCAvKiB1bmRvY2sgcmVxdWVzdGVkLCBTMyAqLworCVRQX0hLRVlfRVZfV0tVUF9TNF9VTkRPQ0sJPSAweDI0MDQsIC8qIHVuZG9jayByZXF1ZXN0ZWQsIFM0ICovCisJVFBfSEtFWV9FVl9XS1VQX1MzX0JBWUVKCT0gMHgyMzA1LCAvKiBiYXkgZWplY3Rpb24gcmVxLCBTMyAqLworCVRQX0hLRVlfRVZfV0tVUF9TNF9CQVlFSgk9IDB4MjQwNSwgLyogYmF5IGVqZWN0aW9uIHJlcSwgUzQgKi8KKwlUUF9IS0VZX0VWX1dLVVBfUzNfQkFUTE9XCT0gMHgyMzEzLCAvKiBiYXR0ZXJ5IGVtcHR5LCBTMyAqLworCVRQX0hLRVlfRVZfV0tVUF9TNF9CQVRMT1cJPSAweDI0MTMsIC8qIGJhdHRlcnkgZW1wdHksIFM0ICovCisKKwkvKiBBdXRvLXNsZWVwIGFmdGVyIGVqZWN0IHJlcXVlc3QgKi8KKwlUUF9IS0VZX0VWX0JBWUVKX0FDSwkJPSAweDMwMDMsIC8qIGJheSBlamVjdGlvbiBjb21wbGV0ZSAqLworCVRQX0hLRVlfRVZfVU5ET0NLX0FDSwkJPSAweDQwMDMsIC8qIHVuZG9jayBjb21wbGV0ZSAqLworCisJLyogTWlzYyBiYXkgZXZlbnRzICovCisJVFBfSEtFWV9FVl9PUFREUlZfRUoJCT0gMHgzMDA2LCAvKiBvcHQuIGRyaXZlIHRyYXkgZWplY3RlZCAqLworCisJLyogVXNlci1pbnRlcmZhY2UgZXZlbnRzICovCisJVFBfSEtFWV9FVl9MSURfQ0xPU0UJCT0gMHg1MDAxLCAvKiBsYXB0b3AgbGlkIGNsb3NlZCAqLworCVRQX0hLRVlfRVZfTElEX09QRU4JCT0gMHg1MDAyLCAvKiBsYXB0b3AgbGlkIG9wZW5lZCAqLworCVRQX0hLRVlfRVZfVEFCTEVUX1RBQkxFVAk9IDB4NTAwOSwgLyogdGFibGV0IHN3aXZlbCB1cCAqLworCVRQX0hLRVlfRVZfVEFCTEVUX05PVEVCT09LCT0gMHg1MDBhLCAvKiB0YWJsZXQgc3dpdmVsIGRvd24gKi8KKwlUUF9IS0VZX0VWX1BFTl9JTlNFUlRFRAkJPSAweDUwMGIsIC8qIHRhYmxldCBwZW4gaW5zZXJ0ZWQgKi8KKwlUUF9IS0VZX0VWX1BFTl9SRU1PVkVECQk9IDB4NTAwYywgLyogdGFibGV0IHBlbiByZW1vdmVkICovCisJVFBfSEtFWV9FVl9CUkdIVF9DSEFOR0VECT0gMHg1MDEwLCAvKiBiYWNrbGlnaHQgY29udHJvbCBldmVudCAqLworCisJLyogVGhlcm1hbCBldmVudHMgKi8KKwlUUF9IS0VZX0VWX0FMQVJNX0JBVF9IT1QJPSAweDYwMTEsIC8qIGJhdHRlcnkgdG9vIGhvdCAqLworCVRQX0hLRVlfRVZfQUxBUk1fQkFUX1hIT1QJPSAweDYwMTIsIC8qIGJhdHRlcnkgY3JpdGljYWxseSBob3QgKi8KKwlUUF9IS0VZX0VWX0FMQVJNX1NFTlNPUl9IT1QJPSAweDYwMjEsIC8qIHNlbnNvciB0b28gaG90ICovCisJVFBfSEtFWV9FVl9BTEFSTV9TRU5TT1JfWEhPVAk9IDB4NjAyMiwgLyogc2Vuc29yIGNyaXRpY2FsbHkgaG90ICovCisJVFBfSEtFWV9FVl9USE1fVEFCTEVfQ0hBTkdFRAk9IDB4NjAzMCwgLyogdGhlcm1hbCB0YWJsZSBjaGFuZ2VkICovCisKKwkvKiBNaXNjICovCisJVFBfSEtFWV9FVl9SRktJTExfQ0hBTkdFRAk9IDB4NzAwMCwgLyogcmZraWxsIHN3aXRjaCBjaGFuZ2VkICovCit9OworCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogTWFpbiBkcml2ZXIKICAqLwpAQCAtMTg0OCw2ICsxODkzLDI3IEBACiAgKiBIb3RrZXkgc3ViZHJpdmVyCiAgKi8KIAorLyoKKyAqIFRoaW5rUGFkIGZpcm13YXJlIGV2ZW50IG1vZGVsCisgKgorICogVGhlIFRoaW5rUGFkIGZpcm13YXJlIGhhcyB0d28gbWFpbiBldmVudCBpbnRlcmZhY2VzOiBub3JtYWwgQUNQSQorICogbm90aWZpY2F0aW9ucyAod2hpY2ggZm9sbG93IHRoZSBBQ1BJIHN0YW5kYXJkKSwgYW5kIGEgcHJpdmF0ZSBldmVudAorICogaW50ZXJmYWNlLgorICoKKyAqIFRoZSBwcml2YXRlIGV2ZW50IGludGVyZmFjZSBhbHNvIGlzc3VlcyBldmVudHMgZm9yIHRoZSBob3RrZXlzLiAgQXMKKyAqIHRoZSBkcml2ZXIgZ2FpbmVkIGZlYXR1cmVzLCB0aGUgZXZlbnQgaGFuZGxpbmcgY29kZSBlbmRlZCB1cCBiZWluZworICogYnVpbHQgYXJvdW5kIHRoZSBob3RrZXkgc3ViZHJpdmVyLiAgVGhpcyB3aWxsIG5lZWQgdG8gYmUgcmVmYWN0b3JlZAorICogdG8gYSBtb3JlIGZvcm1hbCBldmVudCBBUEkgZXZlbnR1YWxseS4KKyAqCisgKiBTb21lICJob3RrZXlzIiBhcmUgYWN0dWFsbHkgc3VwcG9zZWQgdG8gYmUgdXNlZCBhcyBldmVudCByZXBvcnRzLAorICogc3VjaCBhcyAiYnJpZ2h0bmVzcyBoYXMgY2hhbmdlZCIsICJ2b2x1bWUgaGFzIGNoYW5nZWQiLCBkZXBlbmRpbmcgb24KKyAqIHRoZSBUaGlua1BhZCBtb2RlbCBhbmQgaG93IHRoZSBmaXJtd2FyZSBpcyBvcGVyYXRpbmcuCisgKgorICogVW5saWtlIG90aGVyIGNsYXNzZXMsIGhvdGtleS1jbGFzcyBldmVudHMgaGF2ZSBtYXNrL3VubWFzayBjb250cm9sIG9uCisgKiBub24tYW5jaWVudCBmaXJtd2FyZS4gIEhvd2V2ZXIsIGhvdyBpdCBiZWhhdmVzIGNoYW5nZXMgYSBsb3Qgd2l0aCB0aGUKKyAqIGZpcm13YXJlIG1vZGVsIGFuZCB2ZXJzaW9uLgorICovCisKIGVudW0gewkvKiBob3Qga2V5IHNjYW4gY29kZXMgKGRlcml2ZWQgZnJvbSBBQ1BJIERTRFQpICovCiAJVFBfQUNQSV9IT1RLRVlTQ0FOX0ZORjEJCT0gMCwKIAlUUF9BQ1BJX0hPVEtFWVNDQU5fRk5GMiwKQEAgLTE4NzUsNyArMTk0MSw3IEBACiAJVFBfQUNQSV9IT1RLRVlTQ0FOX1RISU5LUEFELAogfTsKIAotZW51bSB7CS8qIEtleXMgYXZhaWxhYmxlIHRocm91Z2ggTlZSQU0gcG9sbGluZyAqLworZW51bSB7CS8qIEtleXMvZXZlbnRzIGF2YWlsYWJsZSB0aHJvdWdoIE5WUkFNIHBvbGxpbmcgKi8KIAlUUEFDUElfSEtFWV9OVlJBTV9LTk9XTl9NQVNLID0gMHgwMGZiODhjMFUsCiAJVFBBQ1BJX0hLRVlfTlZSQU1fR09PRF9NQVNLICA9IDB4MDBmYjgwMDBVLAogfTsKQEAgLTE5MzAsOCArMTk5NiwxMSBAQAogc3RhdGljIHN0cnVjdCBtdXRleCBob3RrZXlfdGhyZWFkX211dGV4OwogCiAvKgotICogQWNxdWlyZSBtdXRleCB0byB3cml0ZSBwb2xsZXIgY29udHJvbCB2YXJpYWJsZXMuCi0gKiBJbmNyZW1lbnQgaG90a2V5X2NvbmZpZ19jaGFuZ2Ugd2hlbiBjaGFuZ2luZyB0aGVtLgorICogQWNxdWlyZSBtdXRleCB0byB3cml0ZSBwb2xsZXIgY29udHJvbCB2YXJpYWJsZXMgYXMgYW4KKyAqIGF0b21pYyBibG9jay4KKyAqCisgKiBJbmNyZW1lbnQgaG90a2V5X2NvbmZpZ19jaGFuZ2Ugd2hlbiBjaGFuZ2luZyB0aGVtIGlmIHlvdQorICogd2FudCB0aGUga3RocmVhZCB0byBmb3JnZXQgb2xkIHN0YXRlLgogICoKICAqIFNlZSBIT1RLRVlfQ09ORklHX0NSSVRJQ0FMX1NUQVJUL0hPVEtFWV9DT05GSUdfQ1JJVElDQUxfRU5ECiAgKi8KQEAgLTE5NDIsNiArMjAxMSwxMSBAQAogICogaG90a2V5IHBvbGxlciBjb250cm9sIHZhcmlhYmxlcwogICoKICAqIE11c3QgYmUgYXRvbWljIG9yIHJlYWRlcnMgd2lsbCBhbHNvIG5lZWQgdG8gYWNxdWlyZSBtdXRleAorICoKKyAqIEhPVEtFWV9DT05GSUdfQ1JJVElDQUxfU1RBUlQvSE9US0VZX0NPTkZJR19DUklUSUNBTF9FTkQKKyAqIHNob3VsZCBiZSB1c2VkIG9ubHkgd2hlbiB0aGUgY2hhbmdlcyBuZWVkIHRvIGJlIHRha2VuIGFzCisgKiBhIGJsb2NrLCBPUiB3aGVuIG9uZSBuZWVkcyB0byBmb3JjZSB0aGUga3RocmVhZCB0byBmb3JnZXQKKyAqIG9sZCBzdGF0ZS4KICAqLwogc3RhdGljIHUzMiBob3RrZXlfc291cmNlX21hc2s7CQkvKiBiaXQgbWFzayAwPUFDUEksMT1OVlJBTSAqLwogc3RhdGljIHVuc2lnbmVkIGludCBob3RrZXlfcG9sbF9mcmVxID0gMTA7IC8qIEh6ICovCkBAIC0xOTcyLDEwICsyMDQ2LDEyIEBACiAKIHN0YXRpYyBpbnQgaG90a2V5X2F1dG9zbGVlcF9hY2s7CiAKLXN0YXRpYyB1MzIgaG90a2V5X29yaWdfbWFzazsKLXN0YXRpYyB1MzIgaG90a2V5X2FsbF9tYXNrOwotc3RhdGljIHUzMiBob3RrZXlfcmVzZXJ2ZWRfbWFzazsKLXN0YXRpYyB1MzIgaG90a2V5X21hc2s7CitzdGF0aWMgdTMyIGhvdGtleV9vcmlnX21hc2s7CQkvKiBldmVudHMgdGhlIEJJT1MgaGFkIGVuYWJsZWQgKi8KK3N0YXRpYyB1MzIgaG90a2V5X2FsbF9tYXNrOwkJLyogYWxsIGV2ZW50cyBzdXBwb3J0ZWQgaW4gZncgKi8KK3N0YXRpYyB1MzIgaG90a2V5X3Jlc2VydmVkX21hc2s7CS8qIGV2ZW50cyBiZXR0ZXIgbGVmdCBkaXNhYmxlZCAqLworc3RhdGljIHUzMiBob3RrZXlfZHJpdmVyX21hc2s7CQkvKiBldmVudHMgbmVlZGVkIGJ5IHRoZSBkcml2ZXIgKi8KK3N0YXRpYyB1MzIgaG90a2V5X3VzZXJfbWFzazsJCS8qIGV2ZW50cyB2aXNpYmxlIHRvIHVzZXJzcGFjZSAqLworc3RhdGljIHUzMiBob3RrZXlfYWNwaV9tYXNrOwkJLyogZXZlbnRzIGVuYWJsZWQgaW4gZmlybXdhcmUgKi8KIAogc3RhdGljIHVuc2lnbmVkIGludCBob3RrZXlfcmVwb3J0X21vZGU7CiAKQEAgLTE5ODMsNiArMjA1OSw5IEBACiAKIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlX3NldCAqaG90a2V5X2Rldl9hdHRyaWJ1dGVzOwogCitzdGF0aWMgdm9pZCB0cGFjcGlfZHJpdmVyX2V2ZW50KGNvbnN0IHVuc2lnbmVkIGludCBoa2V5X2V2ZW50KTsKK3N0YXRpYyB2b2lkIGhvdGtleV9kcml2ZXJfZXZlbnQoY29uc3QgdW5zaWduZWQgaW50IHNjYW5jb2RlKTsKKwogLyogSEtFWS5NSEtHKCkgcmV0dXJuIGJpdHMgKi8KICNkZWZpbmUgVFBfSE9US0VZX1RBQkxFVF9NQVNLICgxIDw8IDMpCiAKQEAgLTIwMTcsMjQgKzIwOTYsNTMgQEAKIH0KIAogLyoKKyAqIFJlYWRzIGN1cnJlbnQgZXZlbnQgbWFzayBmcm9tIGZpcm13YXJlLCBhbmQgdXBkYXRlcworICogaG90a2V5X2FjcGlfbWFzayBhY2NvcmRpbmdseS4gIEFsc28gcmVzZXRzIGFueSBiaXRzCisgKiBmcm9tIGhvdGtleV91c2VyX21hc2sgdGhhdCBhcmUgdW5hdmFpbGFibGUgdG8gYmUKKyAqIGRlbGl2ZXJlZCAoc2hhZG93IHJlcXVpcmVtZW50IG9mIHRoZSB1c2Vyc3BhY2UgQUJJKS4KKyAqCiAgKiBDYWxsIHdpdGggaG90a2V5X211dGV4IGhlbGQKICAqLwogc3RhdGljIGludCBob3RrZXlfbWFza19nZXQodm9pZCkKIHsKLQl1MzIgbSA9IDA7Ci0KIAlpZiAodHBfZmVhdHVyZXMuaG90a2V5X21hc2spIHsKKwkJdTMyIG0gPSAwOworCiAJCWlmICghYWNwaV9ldmFsZihoa2V5X2hhbmRsZSwgJm0sICJESEtOIiwgImQiKSkKIAkJCXJldHVybiAtRUlPOworCisJCWhvdGtleV9hY3BpX21hc2sgPSBtOworCX0gZWxzZSB7CisJCS8qIG5vIG1hc2sgc3VwcG9ydCBkb2Vzbid0IG1lYW4gbm8gZXZlbnQgc3VwcG9ydC4uLiAqLworCQlob3RrZXlfYWNwaV9tYXNrID0gaG90a2V5X2FsbF9tYXNrOwogCX0KLQlIT1RLRVlfQ09ORklHX0NSSVRJQ0FMX1NUQVJUCi0JaG90a2V5X21hc2sgPSBtIHwgKGhvdGtleV9zb3VyY2VfbWFzayAmIGhvdGtleV9tYXNrKTsKLQlIT1RLRVlfQ09ORklHX0NSSVRJQ0FMX0VORAorCisJLyogc3luYyB1c2Vyc3BhY2UtdmlzaWJsZSBtYXNrICovCisJaG90a2V5X3VzZXJfbWFzayAmPSAoaG90a2V5X2FjcGlfbWFzayB8IGhvdGtleV9zb3VyY2VfbWFzayk7CiAKIAlyZXR1cm4gMDsKIH0KIAordm9pZCBzdGF0aWMgaG90a2V5X21hc2tfd2Fybl9pbmNvbXBsZXRlX21hc2sodm9pZCkKK3sKKwkvKiBsb2cgb25seSB3aGF0IHRoZSB1c2VyIGNhbiBmaXguLi4gKi8KKwljb25zdCB1MzIgd2FudGVkbWFzayA9IGhvdGtleV9kcml2ZXJfbWFzayAmCisJCX4oaG90a2V5X2FjcGlfbWFzayB8IGhvdGtleV9zb3VyY2VfbWFzaykgJgorCQkoaG90a2V5X2FsbF9tYXNrIHwgVFBBQ1BJX0hLRVlfTlZSQU1fS05PV05fTUFTSyk7CisKKwlpZiAod2FudGVkbWFzaykKKwkJcHJpbnRrKFRQQUNQSV9OT1RJQ0UKKwkJCSJyZXF1aXJlZCBldmVudHMgMHglMDh4IG5vdCBlbmFibGVkIVxuIiwKKwkJCXdhbnRlZG1hc2spOworfQorCiAvKgorICogU2V0IHRoZSBmaXJtd2FyZSBtYXNrIHdoZW4gc3VwcG9ydGVkCisgKgorICogQWxzbyBjYWxscyBob3RrZXlfbWFza19nZXQgdG8gdXBkYXRlIGhvdGtleV9hY3BpX21hc2suCisgKgorICogTk9URTogZG9lcyBub3Qgc2V0IGJpdHMgaW4gaG90a2V5X3VzZXJfbWFzaywgYnV0IG1heSByZXNldCB0aGVtLgorICoKICAqIENhbGwgd2l0aCBob3RrZXlfbXV0ZXggaGVsZAogICovCiBzdGF0aWMgaW50IGhvdGtleV9tYXNrX3NldCh1MzIgbWFzaykKQEAgLTIwNDIsNjYgKzIxNTAsMTAwIEBACiAJaW50IGk7CiAJaW50IHJjID0gMDsKIAotCWlmICh0cF9mZWF0dXJlcy5ob3RrZXlfbWFzaykgewotCQlpZiAoIXRwX3dhcm5lZC5ob3RrZXlfbWFza19mZiAmJgotCQkgICAgKG1hc2sgPT0gMHhmZmZmIHx8IG1hc2sgPT0gMHhmZmZmZmYgfHwKLQkJICAgICBtYXNrID09IDB4ZmZmZmZmZmYpKSB7Ci0JCQl0cF93YXJuZWQuaG90a2V5X21hc2tfZmYgPSAxOwotCQkJcHJpbnRrKFRQQUNQSV9OT1RJQ0UKLQkJCSAgICAgICAic2V0dGluZyB0aGUgaG90a2V5IG1hc2sgdG8gMHglMDh4IGlzIGxpa2VseSAiCi0JCQkgICAgICAgIm5vdCB0aGUgYmVzdCB3YXkgdG8gZ28gYWJvdXQgaXRcbiIsIG1hc2spOwotCQkJcHJpbnRrKFRQQUNQSV9OT1RJQ0UKLQkJCSAgICAgICAicGxlYXNlIGNvbnNpZGVyIHVzaW5nIHRoZSBkcml2ZXIgZGVmYXVsdHMsICIKLQkJCSAgICAgICAiYW5kIHJlZmVyIHRvIHVwLXRvLWRhdGUgdGhpbmtwYWQtYWNwaSAiCi0JCQkgICAgICAgImRvY3VtZW50YXRpb25cbiIpOwotCQl9CisJY29uc3QgdTMyIGZ3bWFzayA9IG1hc2sgJiB+aG90a2V5X3NvdXJjZV9tYXNrOwogCi0JCUhPVEtFWV9DT05GSUdfQ1JJVElDQUxfU1RBUlQKKwlpZiAodHBfZmVhdHVyZXMuaG90a2V5X21hc2spIHsKIAkJZm9yIChpID0gMDsgaSA8IDMyOyBpKyspIHsKLQkJCXUzMiBtID0gMSA8PCBpOwotCQkJLyogZW5hYmxlIGluIGZpcm13YXJlIG1hc2sgb25seSBrZXlzIG5vdCBpbiBOVlJBTQotCQkJICogbW9kZSwgYnV0IGVuYWJsZSB0aGUga2V5IGluIHRoZSBjYWNoZWQgaG90a2V5X21hc2sKLQkJCSAqIHJlZ2FyZGxlc3Mgb2YgbW9kZSwgb3IgdGhlIGtleSB3aWxsIGVuZCB1cAotCQkJICogZGlzYWJsZWQgYnkgaG90a2V5X21hc2tfZ2V0KCkgKi8KIAkJCWlmICghYWNwaV9ldmFsZihoa2V5X2hhbmRsZSwKIAkJCQkJTlVMTCwgIk1IS00iLCAidmRkIiwgaSArIDEsCi0JCQkJCSEhKChtYXNrICYgfmhvdGtleV9zb3VyY2VfbWFzaykgJiBtKSkpIHsKKwkJCQkJISEobWFzayAmICgxIDw8IGkpKSkpIHsKIAkJCQlyYyA9IC1FSU87CiAJCQkJYnJlYWs7Ci0JCQl9IGVsc2UgewotCQkJCWhvdGtleV9tYXNrID0gKGhvdGtleV9tYXNrICYgfm0pIHwgKG1hc2sgJiBtKTsKIAkJCX0KIAkJfQotCQlIT1RLRVlfQ09ORklHX0NSSVRJQ0FMX0VORAotCi0JCS8qIGhvdGtleV9tYXNrX2dldCBtdXN0IGJlIGNhbGxlZCB1bmNvbmRpdGlvbmFsbHkgYmVsb3cgKi8KLQkJaWYgKCFob3RrZXlfbWFza19nZXQoKSAmJiAhcmMgJiYKLQkJICAgIChob3RrZXlfbWFzayAmIH5ob3RrZXlfc291cmNlX21hc2spICE9Ci0JCSAgICAgKG1hc2sgJiB+aG90a2V5X3NvdXJjZV9tYXNrKSkgewotCQkJcHJpbnRrKFRQQUNQSV9OT1RJQ0UKLQkJCSAgICAgICAicmVxdWVzdGVkIGhvdCBrZXkgbWFzayAweCUwOHgsIGJ1dCAiCi0JCQkgICAgICAgImZpcm13YXJlIGZvcmNlZCBpdCB0byAweCUwOHhcbiIsCi0JCQkgICAgICAgbWFzaywgaG90a2V5X21hc2spOwotCQl9Ci0JfSBlbHNlIHsKLSNpZmRlZiBDT05GSUdfVEhJTktQQURfQUNQSV9IT1RLRVlfUE9MTAotCQlIT1RLRVlfQ09ORklHX0NSSVRJQ0FMX1NUQVJUCi0JCWhvdGtleV9tYXNrID0gbWFzayAmIGhvdGtleV9zb3VyY2VfbWFzazsKLQkJSE9US0VZX0NPTkZJR19DUklUSUNBTF9FTkQKLQkJaG90a2V5X21hc2tfZ2V0KCk7Ci0JCWlmIChob3RrZXlfbWFzayAhPSBtYXNrKSB7Ci0JCQlwcmludGsoVFBBQ1BJX05PVElDRQotCQkJICAgICAgICJyZXF1ZXN0ZWQgaG90IGtleSBtYXNrIDB4JTA4eCwgIgotCQkJICAgICAgICJmb3JjZWQgdG8gMHglMDh4IChOVlJBTSBwb2xsIG1hc2sgaXMgIgotCQkJICAgICAgICIweCUwOHgpOiBubyBmaXJtd2FyZSBtYXNrIHN1cHBvcnRcbiIsCi0JCQkgICAgICAgbWFzaywgaG90a2V5X21hc2ssIGhvdGtleV9zb3VyY2VfbWFzayk7Ci0JCX0KLSNlbHNlCi0JCWhvdGtleV9tYXNrX2dldCgpOwotCQlyYyA9IC1FTlhJTzsKLSNlbmRpZiAvKiBDT05GSUdfVEhJTktQQURfQUNQSV9IT1RLRVlfUE9MTCAqLwogCX0KIAorCS8qCisJICogV2UgKm11c3QqIG1ha2UgYW4gaW5jb25kaXRpb25hbCBjYWxsIHRvIGhvdGtleV9tYXNrX2dldCB0bworCSAqIHJlZnJlc2ggaG90a2V5X2FjcGlfbWFzayBhbmQgdXBkYXRlIGhvdGtleV91c2VyX21hc2sKKwkgKgorCSAqIFRha2UgdGhlIG9wcG9ydHVuaXR5IHRvIGFsc28gbG9nIHdoZW4gd2UgY2Fubm90IF9lbmFibGVfCisJICogYSBnaXZlbiBldmVudC4KKwkgKi8KKwlpZiAoIWhvdGtleV9tYXNrX2dldCgpICYmICFyYyAmJiAoZndtYXNrICYgfmhvdGtleV9hY3BpX21hc2spKSB7CisJCXByaW50ayhUUEFDUElfTk9USUNFCisJCSAgICAgICAiYXNrZWQgZm9yIGhvdGtleSBtYXNrIDB4JTA4eCwgYnV0ICIKKwkJICAgICAgICJmaXJtd2FyZSBmb3JjZWQgaXQgdG8gMHglMDh4XG4iLAorCQkgICAgICAgZndtYXNrLCBob3RrZXlfYWNwaV9tYXNrKTsKKwl9CisKKwlob3RrZXlfbWFza193YXJuX2luY29tcGxldGVfbWFzaygpOworCisJcmV0dXJuIHJjOworfQorCisvKgorICogU2V0cyBob3RrZXlfdXNlcl9tYXNrIGFuZCB0cmllcyB0byBzZXQgdGhlIGZpcm13YXJlIG1hc2sKKyAqCisgKiBDYWxsIHdpdGggaG90a2V5X211dGV4IGhlbGQKKyAqLworc3RhdGljIGludCBob3RrZXlfdXNlcl9tYXNrX3NldChjb25zdCB1MzIgbWFzaykKK3sKKwlpbnQgcmM7CisKKwkvKiBHaXZlIHBlb3BsZSBhIGNoYW5jZSB0byBub3RpY2UgdGhleSBhcmUgZG9pbmcgc29tZXRoaW5nIHRoYXQKKwkgKiBpcyBib3VuZCB0byBnbyBib29tIG9uIHRoZWlyIHVzZXJzIHNvb25lciBvciBsYXRlciAqLworCWlmICghdHBfd2FybmVkLmhvdGtleV9tYXNrX2ZmICYmCisJICAgIChtYXNrID09IDB4ZmZmZiB8fCBtYXNrID09IDB4ZmZmZmZmIHx8CisJICAgICBtYXNrID09IDB4ZmZmZmZmZmYpKSB7CisJCXRwX3dhcm5lZC5ob3RrZXlfbWFza19mZiA9IDE7CisJCXByaW50ayhUUEFDUElfTk9USUNFCisJCSAgICAgICAic2V0dGluZyB0aGUgaG90a2V5IG1hc2sgdG8gMHglMDh4IGlzIGxpa2VseSAiCisJCSAgICAgICAibm90IHRoZSBiZXN0IHdheSB0byBnbyBhYm91dCBpdFxuIiwgbWFzayk7CisJCXByaW50ayhUUEFDUElfTk9USUNFCisJCSAgICAgICAicGxlYXNlIGNvbnNpZGVyIHVzaW5nIHRoZSBkcml2ZXIgZGVmYXVsdHMsICIKKwkJICAgICAgICJhbmQgcmVmZXIgdG8gdXAtdG8tZGF0ZSB0aGlua3BhZC1hY3BpICIKKwkJICAgICAgICJkb2N1bWVudGF0aW9uXG4iKTsKKwl9CisKKwkvKiBUcnkgdG8gZW5hYmxlIHdoYXQgdGhlIHVzZXIgYXNrZWQgZm9yLCBwbHVzIHdoYXRldmVyIHdlIG5lZWQuCisJICogdGhpcyBzeW5jcyBldmVyeXRoaW5nIGJ1dCB3b24ndCBlbmFibGUgYml0cyBpbiBob3RrZXlfdXNlcl9tYXNrICovCisJcmMgPSBob3RrZXlfbWFza19zZXQoKG1hc2sgfCBob3RrZXlfZHJpdmVyX21hc2spICYgfmhvdGtleV9zb3VyY2VfbWFzayk7CisKKwkvKiBFbmFibGUgdGhlIGF2YWlsYWJsZSBiaXRzIGluIGhvdGtleV91c2VyX21hc2sgKi8KKwlob3RrZXlfdXNlcl9tYXNrID0gbWFzayAmIChob3RrZXlfYWNwaV9tYXNrIHwgaG90a2V5X3NvdXJjZV9tYXNrKTsKKworCXJldHVybiByYzsKK30KKworLyoKKyAqIFNldHMgdGhlIGRyaXZlciBob3RrZXkgbWFzay4KKyAqCisgKiBDYW4gYmUgY2FsbGVkIGV2ZW4gaWYgdGhlIGhvdGtleSBzdWJkcml2ZXIgaXMgaW5hY3RpdmUKKyAqLworc3RhdGljIGludCB0cGFjcGlfaG90a2V5X2RyaXZlcl9tYXNrX3NldChjb25zdCB1MzIgbWFzaykKK3sKKwlpbnQgcmM7CisKKwkvKiBEbyB0aGUgcmlnaHQgdGhpbmcgaWYgaG90a2V5X2luaXQgaGFzIG5vdCBiZWVuIGNhbGxlZCB5ZXQgKi8KKwlpZiAoIXRwX2ZlYXR1cmVzLmhvdGtleSkgeworCQlob3RrZXlfZHJpdmVyX21hc2sgPSBtYXNrOworCQlyZXR1cm4gMDsKKwl9CisKKwltdXRleF9sb2NrKCZob3RrZXlfbXV0ZXgpOworCisJSE9US0VZX0NPTkZJR19DUklUSUNBTF9TVEFSVAorCWhvdGtleV9kcml2ZXJfbWFzayA9IG1hc2s7CisjaWZkZWYgQ09ORklHX1RISU5LUEFEX0FDUElfSE9US0VZX1BPTEwKKwlob3RrZXlfc291cmNlX21hc2sgfD0gKG1hc2sgJiB+aG90a2V5X2FsbF9tYXNrKTsKKyNlbmRpZgorCUhPVEtFWV9DT05GSUdfQ1JJVElDQUxfRU5ECisKKwlyYyA9IGhvdGtleV9tYXNrX3NldCgoaG90a2V5X2FjcGlfbWFzayB8IGhvdGtleV9kcml2ZXJfbWFzaykgJgorCQkJCQkJCX5ob3RrZXlfc291cmNlX21hc2spOworCW11dGV4X3VubG9jaygmaG90a2V5X211dGV4KTsKKwogCXJldHVybiByYzsKIH0KIApAQCAtMjEzNywxMSArMjI3OSwxMCBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgdHBhY3BpX2lucHV0X3NlbmRfa2V5KHVuc2lnbmVkIGludCBzY2FuY29kZSkKKy8qIERvIE5PVCBjYWxsIHdpdGhvdXQgdmFsaWRhdGluZyBzY2FuY29kZSBmaXJzdCAqLworc3RhdGljIHZvaWQgdHBhY3BpX2lucHV0X3NlbmRfa2V5KGNvbnN0IHVuc2lnbmVkIGludCBzY2FuY29kZSkKIHsKLQl1bnNpZ25lZCBpbnQga2V5Y29kZTsKLQotCWtleWNvZGUgPSBob3RrZXlfa2V5Y29kZV9tYXBbc2NhbmNvZGVdOworCWNvbnN0IHVuc2lnbmVkIGludCBrZXljb2RlID0gaG90a2V5X2tleWNvZGVfbWFwW3NjYW5jb2RlXTsKIAogCWlmIChrZXljb2RlICE9IEtFWV9SRVNFUlZFRCkgewogCQltdXRleF9sb2NrKCZ0cGFjcGlfaW5wdXRkZXZfc2VuZF9tdXRleCk7CkBAIC0yMTYyLDE5ICsyMzAzLDI4IEBACiAJfQogfQogCisvKiBEbyBOT1QgY2FsbCB3aXRob3V0IHZhbGlkYXRpbmcgc2NhbmNvZGUgZmlyc3QgKi8KK3N0YXRpYyB2b2lkIHRwYWNwaV9pbnB1dF9zZW5kX2tleV9tYXNrZWQoY29uc3QgdW5zaWduZWQgaW50IHNjYW5jb2RlKQoreworCWhvdGtleV9kcml2ZXJfZXZlbnQoc2NhbmNvZGUpOworCWlmIChob3RrZXlfdXNlcl9tYXNrICYgKDEgPDwgc2NhbmNvZGUpKQorCQl0cGFjcGlfaW5wdXRfc2VuZF9rZXkoc2NhbmNvZGUpOworfQorCiAjaWZkZWYgQ09ORklHX1RISU5LUEFEX0FDUElfSE9US0VZX1BPTEwKIHN0YXRpYyBzdHJ1Y3QgdHBfYWNwaV9kcnZfc3RydWN0IGlibV9ob3RrZXlfYWNwaWRyaXZlcjsKIAorLyogRG8gTk9UIGNhbGwgd2l0aG91dCB2YWxpZGF0aW5nIHNjYW5jb2RlIGZpcnN0ICovCiBzdGF0aWMgdm9pZCB0cGFjcGlfaG90a2V5X3NlbmRfa2V5KHVuc2lnbmVkIGludCBzY2FuY29kZSkKIHsKLQl0cGFjcGlfaW5wdXRfc2VuZF9rZXkoc2NhbmNvZGUpOworCXRwYWNwaV9pbnB1dF9zZW5kX2tleV9tYXNrZWQoc2NhbmNvZGUpOwogCWlmIChob3RrZXlfcmVwb3J0X21vZGUgPCAyKSB7CiAJCWFjcGlfYnVzX2dlbmVyYXRlX3Byb2NfZXZlbnQoaWJtX2hvdGtleV9hY3BpZHJpdmVyLmRldmljZSwKLQkJCQkJCTB4ODAsIDB4MTAwMSArIHNjYW5jb2RlKTsKKwkJCQkweDgwLCBUUF9IS0VZX0VWX0hPVEtFWV9CQVNFICsgc2NhbmNvZGUpOwogCX0KIH0KIAotc3RhdGljIHZvaWQgaG90a2V5X3JlYWRfbnZyYW0oc3RydWN0IHRwX252cmFtX3N0YXRlICpuLCB1MzIgbSkKK3N0YXRpYyB2b2lkIGhvdGtleV9yZWFkX252cmFtKHN0cnVjdCB0cF9udnJhbV9zdGF0ZSAqbiwgY29uc3QgdTMyIG0pCiB7CiAJdTggZDsKIApAQCAtMjIxMCwyMSArMjM2MCwyNCBAQAogCX0KIH0KIAorc3RhdGljIHZvaWQgaG90a2V5X2NvbXBhcmVfYW5kX2lzc3VlX2V2ZW50KHN0cnVjdCB0cF9udnJhbV9zdGF0ZSAqb2xkbiwKKwkJCQkJICAgc3RydWN0IHRwX252cmFtX3N0YXRlICpuZXduLAorCQkJCQkgICBjb25zdCB1MzIgZXZlbnRfbWFzaykKK3sKKwogI2RlZmluZSBUUEFDUElfQ09NUEFSRV9LRVkoX19zY2FuY29kZSwgX19tZW1iZXIpIFwKIAlkbyB7IFwKLQkJaWYgKChtYXNrICYgKDEgPDwgX19zY2FuY29kZSkpICYmIFwKKwkJaWYgKChldmVudF9tYXNrICYgKDEgPDwgX19zY2FuY29kZSkpICYmIFwKIAkJICAgIG9sZG4tPl9fbWVtYmVyICE9IG5ld24tPl9fbWVtYmVyKSBcCi0JCXRwYWNwaV9ob3RrZXlfc2VuZF9rZXkoX19zY2FuY29kZSk7IFwKKwkJCXRwYWNwaV9ob3RrZXlfc2VuZF9rZXkoX19zY2FuY29kZSk7IFwKIAl9IHdoaWxlICgwKQogCiAjZGVmaW5lIFRQQUNQSV9NQVlfU0VORF9LRVkoX19zY2FuY29kZSkgXAotCWRvIHsgaWYgKG1hc2sgJiAoMSA8PCBfX3NjYW5jb2RlKSkgXAotCQl0cGFjcGlfaG90a2V5X3NlbmRfa2V5KF9fc2NhbmNvZGUpOyB9IHdoaWxlICgwKQorCWRvIHsgXAorCQlpZiAoZXZlbnRfbWFzayAmICgxIDw8IF9fc2NhbmNvZGUpKSBcCisJCQl0cGFjcGlfaG90a2V5X3NlbmRfa2V5KF9fc2NhbmNvZGUpOyBcCisJfSB3aGlsZSAoMCkKIAotc3RhdGljIHZvaWQgaG90a2V5X2NvbXBhcmVfYW5kX2lzc3VlX2V2ZW50KHN0cnVjdCB0cF9udnJhbV9zdGF0ZSAqb2xkbiwKLQkJCQkJICAgc3RydWN0IHRwX252cmFtX3N0YXRlICpuZXduLAotCQkJCQkgICB1MzIgbWFzaykKLXsKIAlUUEFDUElfQ09NUEFSRV9LRVkoVFBfQUNQSV9IT1RLRVlTQ0FOX1RISU5LUEFELCB0aGlua3BhZF90b2dnbGUpOwogCVRQQUNQSV9DT01QQVJFX0tFWShUUF9BQ1BJX0hPVEtFWVNDQU5fRk5TUEFDRSwgem9vbV90b2dnbGUpOwogCVRQQUNQSV9DT01QQVJFX0tFWShUUF9BQ1BJX0hPVEtFWVNDQU5fRk5GNywgZGlzcGxheV90b2dnbGUpOwpAQCAtMjI3MCwxNSArMjQyMywyMiBAQAogCQkJfQogCQl9CiAJfQotfQogCiAjdW5kZWYgVFBBQ1BJX0NPTVBBUkVfS0VZCiAjdW5kZWYgVFBBQ1BJX01BWV9TRU5EX0tFWQorfQogCisvKgorICogUG9sbGluZyBkcml2ZXIKKyAqCisgKiBXZSB0cmFjayBhbGwgZXZlbnRzIGluIGhvdGtleV9zb3VyY2VfbWFzayBhbGwgdGhlIHRpbWUsIHNpbmNlCisgKiBtb3N0IG9mIHRoZW0gYXJlIGVkZ2UtYmFzZWQuICBXZSBvbmx5IGlzc3VlIHRob3NlIHJlcXVlc3RlZCBieQorICogaG90a2V5X3VzZXJfbWFzayBvciBob3RrZXlfZHJpdmVyX21hc2ssIHRob3VnaC4KKyAqLwogc3RhdGljIGludCBob3RrZXlfa3RocmVhZCh2b2lkICpkYXRhKQogewogCXN0cnVjdCB0cF9udnJhbV9zdGF0ZSBzWzJdOwotCXUzMiBtYXNrOworCXUzMiBwb2xsX21hc2ssIGV2ZW50X21hc2s7CiAJdW5zaWduZWQgaW50IHNpLCBzbzsKIAl1bnNpZ25lZCBsb25nIHQ7CiAJdW5zaWduZWQgaW50IGNoYW5nZV9kZXRlY3RvciwgbXVzdF9yZXNldDsKQEAgLTIyOTgsMTAgKzI0NTgsMTIgQEAKIAkvKiBJbml0aWFsIHN0YXRlIGZvciBjb21wYXJlcyAqLwogCW11dGV4X2xvY2soJmhvdGtleV90aHJlYWRfZGF0YV9tdXRleCk7CiAJY2hhbmdlX2RldGVjdG9yID0gaG90a2V5X2NvbmZpZ19jaGFuZ2U7Ci0JbWFzayA9IGhvdGtleV9zb3VyY2VfbWFzayAmIGhvdGtleV9tYXNrOworCXBvbGxfbWFzayA9IGhvdGtleV9zb3VyY2VfbWFzazsKKwlldmVudF9tYXNrID0gaG90a2V5X3NvdXJjZV9tYXNrICYKKwkJCShob3RrZXlfZHJpdmVyX21hc2sgfCBob3RrZXlfdXNlcl9tYXNrKTsKIAlwb2xsX2ZyZXEgPSBob3RrZXlfcG9sbF9mcmVxOwogCW11dGV4X3VubG9jaygmaG90a2V5X3RocmVhZF9kYXRhX211dGV4KTsKLQlob3RrZXlfcmVhZF9udnJhbSgmc1tzb10sIG1hc2spOworCWhvdGtleV9yZWFkX252cmFtKCZzW3NvXSwgcG9sbF9tYXNrKTsKIAogCXdoaWxlICgha3RocmVhZF9zaG91bGRfc3RvcCgpKSB7CiAJCWlmICh0ID09IDApIHsKQEAgLTIzMjQsMTUgKzI0ODYsMTcgQEAKIAkJCXQgPSAwOwogCQkJY2hhbmdlX2RldGVjdG9yID0gaG90a2V5X2NvbmZpZ19jaGFuZ2U7CiAJCX0KLQkJbWFzayA9IGhvdGtleV9zb3VyY2VfbWFzayAmIGhvdGtleV9tYXNrOworCQlwb2xsX21hc2sgPSBob3RrZXlfc291cmNlX21hc2s7CisJCWV2ZW50X21hc2sgPSBob3RrZXlfc291cmNlX21hc2sgJgorCQkJCShob3RrZXlfZHJpdmVyX21hc2sgfCBob3RrZXlfdXNlcl9tYXNrKTsKIAkJcG9sbF9mcmVxID0gaG90a2V5X3BvbGxfZnJlcTsKIAkJbXV0ZXhfdW5sb2NrKCZob3RrZXlfdGhyZWFkX2RhdGFfbXV0ZXgpOwogCi0JCWlmIChsaWtlbHkobWFzaykpIHsKLQkJCWhvdGtleV9yZWFkX252cmFtKCZzW3NpXSwgbWFzayk7CisJCWlmIChsaWtlbHkocG9sbF9tYXNrKSkgeworCQkJaG90a2V5X3JlYWRfbnZyYW0oJnNbc2ldLCBwb2xsX21hc2spOwogCQkJaWYgKGxpa2VseShzaSAhPSBzbykpIHsKIAkJCQlob3RrZXlfY29tcGFyZV9hbmRfaXNzdWVfZXZlbnQoJnNbc29dLCAmc1tzaV0sCi0JCQkJCQkJCW1hc2spOworCQkJCQkJCQlldmVudF9tYXNrKTsKIAkJCX0KIAkJfQogCkBAIC0yMzY0LDEwICsyNTI4LDEyIEBACiAvKiBjYWxsIHdpdGggaG90a2V5X211dGV4IGhlbGQgKi8KIHN0YXRpYyB2b2lkIGhvdGtleV9wb2xsX3NldHVwKGJvb2wgbWF5X3dhcm4pCiB7Ci0JdTMyIGhvdGtleXNfdG9fcG9sbCA9IGhvdGtleV9zb3VyY2VfbWFzayAmIGhvdGtleV9tYXNrOworCWNvbnN0IHUzMiBwb2xsX2RyaXZlcl9tYXNrID0gaG90a2V5X2RyaXZlcl9tYXNrICYgaG90a2V5X3NvdXJjZV9tYXNrOworCWNvbnN0IHUzMiBwb2xsX3VzZXJfbWFzayA9IGhvdGtleV91c2VyX21hc2sgJiBob3RrZXlfc291cmNlX21hc2s7CiAKLQlpZiAoaG90a2V5c190b19wb2xsICE9IDAgJiYgaG90a2V5X3BvbGxfZnJlcSA+IDAgJiYKLQkgICAgKHRwYWNwaV9pbnB1dGRldi0+dXNlcnMgPiAwIHx8IGhvdGtleV9yZXBvcnRfbW9kZSA8IDIpKSB7CisJaWYgKGhvdGtleV9wb2xsX2ZyZXEgPiAwICYmCisJICAgIChwb2xsX2RyaXZlcl9tYXNrIHx8CisJICAgICAocG9sbF91c2VyX21hc2sgJiYgdHBhY3BpX2lucHV0ZGV2LT51c2VycyA+IDApKSkgewogCQlpZiAoIXRwYWNwaV9ob3RrZXlfdGFzaykgewogCQkJdHBhY3BpX2hvdGtleV90YXNrID0ga3RocmVhZF9ydW4oaG90a2V5X2t0aHJlYWQsCiAJCQkJCU5VTEwsIFRQQUNQSV9OVlJBTV9LVEhSRUFEX05BTUUpOwpAQCAtMjM4MCwxMiArMjU0NiwxMyBAQAogCQl9CiAJfSBlbHNlIHsKIAkJaG90a2V5X3BvbGxfc3RvcF9zeW5jKCk7Ci0JCWlmIChtYXlfd2FybiAmJiBob3RrZXlzX3RvX3BvbGwgIT0gMCAmJgorCQlpZiAobWF5X3dhcm4gJiYgKHBvbGxfZHJpdmVyX21hc2sgfHwgcG9sbF91c2VyX21hc2spICYmCiAJCSAgICBob3RrZXlfcG9sbF9mcmVxID09IDApIHsKIAkJCXByaW50ayhUUEFDUElfTk9USUNFCi0JCQkJImhvdCBrZXlzIDB4JTA4eCByZXF1aXJlIHBvbGxpbmcsICIKLQkJCQkid2hpY2ggaXMgY3VycmVudGx5IGRpc2FibGVkXG4iLAotCQkJCWhvdGtleXNfdG9fcG9sbCk7CisJCQkJImhvdCBrZXlzIDB4JTA4eCBhbmQvb3IgZXZlbnRzIDB4JTA4eCAiCisJCQkJInJlcXVpcmUgcG9sbGluZywgd2hpY2ggaXMgY3VycmVudGx5ICIKKwkJCQkiZGlzYWJsZWRcbiIsCisJCQkJcG9sbF91c2VyX21hc2ssIHBvbGxfZHJpdmVyX21hc2spOwogCQl9CiAJfQogfQpAQCAtMjQwMyw5ICsyNTcwLDcgQEAKIAlpZiAoIWZyZXEpCiAJCWhvdGtleV9wb2xsX3N0b3Bfc3luYygpOwogCi0JSE9US0VZX0NPTkZJR19DUklUSUNBTF9TVEFSVAogCWhvdGtleV9wb2xsX2ZyZXEgPSBmcmVxOwotCUhPVEtFWV9DT05GSUdfQ1JJVElDQUxfRU5ECiB9CiAKICNlbHNlIC8qIENPTkZJR19USElOS1BBRF9BQ1BJX0hPVEtFWV9QT0xMICovCkBAIC0yNDQwLDcgKzI2MDUsOCBAQAogc3RhdGljIHZvaWQgaG90a2V5X2lucHV0ZGV2X2Nsb3NlKHN0cnVjdCBpbnB1dF9kZXYgKmRldikKIHsKIAkvKiBkaXNhYmxlIGhvdGtleSBwb2xsaW5nIHdoZW4gcG9zc2libGUgKi8KLQlpZiAodHBhY3BpX2xpZmVjeWNsZSA9PSBUUEFDUElfTElGRV9SVU5OSU5HKQorCWlmICh0cGFjcGlfbGlmZWN5Y2xlID09IFRQQUNQSV9MSUZFX1JVTk5JTkcgJiYKKwkgICAgIShob3RrZXlfc291cmNlX21hc2sgJiBob3RrZXlfZHJpdmVyX21hc2spKQogCQlob3RrZXlfcG9sbF9zZXR1cF9zYWZlKGZhbHNlKTsKIH0KIApAQCAtMjQ4OCwxNSArMjY1NCw3IEBACiAJCQkgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJCSAgIGNoYXIgKmJ1ZikKIHsKLQlpbnQgcmVzOwotCi0JaWYgKG11dGV4X2xvY2tfa2lsbGFibGUoJmhvdGtleV9tdXRleCkpCi0JCXJldHVybiAtRVJFU1RBUlRTWVM7Ci0JcmVzID0gaG90a2V5X21hc2tfZ2V0KCk7Ci0JbXV0ZXhfdW5sb2NrKCZob3RrZXlfbXV0ZXgpOwotCi0JcmV0dXJuIChyZXMpPwotCQlyZXMgOiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIjB4JTA4eFxuIiwgaG90a2V5X21hc2spOworCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIjB4JTA4eFxuIiwgaG90a2V5X3VzZXJfbWFzayk7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IGhvdGtleV9tYXNrX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKQEAgLTI1MTIsNyArMjY3MCw3IEBACiAJaWYgKG11dGV4X2xvY2tfa2lsbGFibGUoJmhvdGtleV9tdXRleCkpCiAJCXJldHVybiAtRVJFU1RBUlRTWVM7CiAKLQlyZXMgPSBob3RrZXlfbWFza19zZXQodCk7CisJcmVzID0gaG90a2V5X3VzZXJfbWFza19zZXQodCk7CiAKICNpZmRlZiBDT05GSUdfVEhJTktQQURfQUNQSV9IT1RLRVlfUE9MTAogCWhvdGtleV9wb2xsX3NldHVwKHRydWUpOwpAQCAtMjU5NCw2ICsyNzUyLDggQEAKIAkJCSAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKIAl1bnNpZ25lZCBsb25nIHQ7CisJdTMyIHJfZXY7CisJaW50IHJjOwogCiAJaWYgKHBhcnNlX3N0cnRvdWwoYnVmLCAweGZmZmZmZmZmVUwsICZ0KSB8fAogCQkoKHQgJiB+VFBBQ1BJX0hLRVlfTlZSQU1fS05PV05fTUFTSykgIT0gMCkpCkBAIC0yNjA2LDE0ICsyNzY2LDI4IEBACiAJaG90a2V5X3NvdXJjZV9tYXNrID0gdDsKIAlIT1RLRVlfQ09ORklHX0NSSVRJQ0FMX0VORAogCisJcmMgPSBob3RrZXlfbWFza19zZXQoKGhvdGtleV91c2VyX21hc2sgfCBob3RrZXlfZHJpdmVyX21hc2spICYKKwkJCX5ob3RrZXlfc291cmNlX21hc2spOwogCWhvdGtleV9wb2xsX3NldHVwKHRydWUpOwotCWhvdGtleV9tYXNrX3NldChob3RrZXlfbWFzayk7CisKKwkvKiBjaGVjayBpZiBldmVudHMgbmVlZGVkIGJ5IHRoZSBkcml2ZXIgZ290IGRpc2FibGVkICovCisJcl9ldiA9IGhvdGtleV9kcml2ZXJfbWFzayAmIH4oaG90a2V5X2FjcGlfbWFzayAmIGhvdGtleV9hbGxfbWFzaykKKwkJJiB+aG90a2V5X3NvdXJjZV9tYXNrICYgVFBBQ1BJX0hLRVlfTlZSQU1fS05PV05fTUFTSzsKIAogCW11dGV4X3VubG9jaygmaG90a2V5X211dGV4KTsKIAorCWlmIChyYyA8IDApCisJCXByaW50ayhUUEFDUElfRVJSICJob3RrZXlfc291cmNlX21hc2s6IGZhaWxlZCB0byB1cGRhdGUgdGhlIgorCQkJImZpcm13YXJlIGV2ZW50IG1hc2shXG4iKTsKKworCWlmIChyX2V2KQorCQlwcmludGsoVFBBQ1BJX05PVElDRSAiaG90a2V5X3NvdXJjZV9tYXNrOiAiCisJCQkic29tZSBpbXBvcnRhbnQgZXZlbnRzIHdlcmUgZGlzYWJsZWQ6ICIKKwkJCSIweCUwNHhcbiIsIHJfZXYpOworCiAJdHBhY3BpX2Rpc2Nsb3NlX3VzZXJ0YXNrKCJob3RrZXlfc291cmNlX21hc2siLCAic2V0IHRvIDB4JTA4bHhcbiIsIHQpOwogCi0JcmV0dXJuIGNvdW50OworCXJldHVybiAocmMgPCAwKSA/IHJjIDogY291bnQ7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBkZXZfYXR0cl9ob3RrZXlfc291cmNlX21hc2sgPQpAQCAtMjczMSw5ICsyOTA1LDggQEAKIAogc3RhdGljIHZvaWQgaG90a2V5X3dha2V1cF9yZWFzb25fbm90aWZ5X2NoYW5nZSh2b2lkKQogewotCWlmICh0cF9mZWF0dXJlcy5ob3RrZXlfbWFzaykKLQkJc3lzZnNfbm90aWZ5KCZ0cGFjcGlfcGRldi0+ZGV2LmtvYmosIE5VTEwsCi0JCQkgICAgICJ3YWtldXBfcmVhc29uIik7CisJc3lzZnNfbm90aWZ5KCZ0cGFjcGlfcGRldi0+ZGV2LmtvYmosIE5VTEwsCisJCSAgICAgIndha2V1cF9yZWFzb24iKTsKIH0KIAogLyogc3lzZnMgd2FrZXVwIGhvdHVucGx1Z19jb21wbGV0ZSAocG9sbGFibGUpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkBAIC0yNzUwLDkgKzI5MjMsOCBAQAogCiBzdGF0aWMgdm9pZCBob3RrZXlfd2FrZXVwX2hvdHVucGx1Z19jb21wbGV0ZV9ub3RpZnlfY2hhbmdlKHZvaWQpCiB7Ci0JaWYgKHRwX2ZlYXR1cmVzLmhvdGtleV9tYXNrKQotCQlzeXNmc19ub3RpZnkoJnRwYWNwaV9wZGV2LT5kZXYua29iaiwgTlVMTCwKLQkJCSAgICAgIndha2V1cF9ob3R1bnBsdWdfY29tcGxldGUiKTsKKwlzeXNmc19ub3RpZnkoJnRwYWNwaV9wZGV2LT5kZXYua29iaiwgTlVMTCwKKwkJICAgICAid2FrZXVwX2hvdHVucGx1Z19jb21wbGV0ZSIpOwogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KQEAgLTI3NjAsMjcgKzI5MzIsMTkgQEAKIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpob3RrZXlfYXR0cmlidXRlc1tdIF9faW5pdGRhdGEgPSB7CiAJJmRldl9hdHRyX2hvdGtleV9lbmFibGUuYXR0ciwKIAkmZGV2X2F0dHJfaG90a2V5X2Jpb3NfZW5hYmxlZC5hdHRyLAorCSZkZXZfYXR0cl9ob3RrZXlfYmlvc19tYXNrLmF0dHIsCiAJJmRldl9hdHRyX2hvdGtleV9yZXBvcnRfbW9kZS5hdHRyLAotI2lmZGVmIENPTkZJR19USElOS1BBRF9BQ1BJX0hPVEtFWV9QT0xMCisJJmRldl9hdHRyX2hvdGtleV93YWtldXBfcmVhc29uLmF0dHIsCisJJmRldl9hdHRyX2hvdGtleV93YWtldXBfaG90dW5wbHVnX2NvbXBsZXRlLmF0dHIsCiAJJmRldl9hdHRyX2hvdGtleV9tYXNrLmF0dHIsCiAJJmRldl9hdHRyX2hvdGtleV9hbGxfbWFzay5hdHRyLAogCSZkZXZfYXR0cl9ob3RrZXlfcmVjb21tZW5kZWRfbWFzay5hdHRyLAorI2lmZGVmIENPTkZJR19USElOS1BBRF9BQ1BJX0hPVEtFWV9QT0xMCiAJJmRldl9hdHRyX2hvdGtleV9zb3VyY2VfbWFzay5hdHRyLAogCSZkZXZfYXR0cl9ob3RrZXlfcG9sbF9mcmVxLmF0dHIsCiAjZW5kaWYKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpob3RrZXlfbWFza19hdHRyaWJ1dGVzW10gX19pbml0ZGF0YSA9IHsKLQkmZGV2X2F0dHJfaG90a2V5X2Jpb3NfbWFzay5hdHRyLAotI2lmbmRlZiBDT05GSUdfVEhJTktQQURfQUNQSV9IT1RLRVlfUE9MTAotCSZkZXZfYXR0cl9ob3RrZXlfbWFzay5hdHRyLAotCSZkZXZfYXR0cl9ob3RrZXlfYWxsX21hc2suYXR0ciwKLQkmZGV2X2F0dHJfaG90a2V5X3JlY29tbWVuZGVkX21hc2suYXR0ciwKLSNlbmRpZgotCSZkZXZfYXR0cl9ob3RrZXlfd2FrZXVwX3JlYXNvbi5hdHRyLAotCSZkZXZfYXR0cl9ob3RrZXlfd2FrZXVwX2hvdHVucGx1Z19jb21wbGV0ZS5hdHRyLAotfTsKLQogLyoKICAqIFN5bmMgYm90aCB0aGUgaHcgYW5kIHN3IGJsb2NraW5nIHN0YXRlIG9mIGFsbCBzd2l0Y2hlcwogICovCkBAIC0yODQzLDE2ICszMDA3LDE2IEBACiAKIAlrZnJlZShob3RrZXlfa2V5Y29kZV9tYXApOwogCi0JaWYgKHRwX2ZlYXR1cmVzLmhvdGtleSkgewotCQlkYmdfcHJpbnRrKFRQQUNQSV9EQkdfRVhJVCB8IFRQQUNQSV9EQkdfSEtFWSwKLQkJCSAgICJyZXN0b3Jpbmcgb3JpZ2luYWwgaG90IGtleSBtYXNrXG4iKTsKLQkJLyogbm8gc2hvcnQtY2lyY3VpdCBib29sZWFuIG9wZXJhdG9yIGJlbG93ISAqLwotCQlpZiAoKGhvdGtleV9tYXNrX3NldChob3RrZXlfb3JpZ19tYXNrKSB8Ci0JCSAgICAgaG90a2V5X3N0YXR1c19zZXQoZmFsc2UpKSAhPSAwKQotCQkJcHJpbnRrKFRQQUNQSV9FUlIKLQkJCSAgICAgICAiZmFpbGVkIHRvIHJlc3RvcmUgaG90IGtleSBtYXNrICIKLQkJCSAgICAgICAidG8gQklPUyBkZWZhdWx0c1xuIik7Ci0JfQorCWRiZ19wcmludGsoVFBBQ1BJX0RCR19FWElUIHwgVFBBQ1BJX0RCR19IS0VZLAorCQkgICAicmVzdG9yaW5nIG9yaWdpbmFsIEhLRVkgc3RhdHVzIGFuZCBtYXNrXG4iKTsKKwkvKiB5ZXMsIHRoZXJlIGlzIGEgYml0d2lzZSBvciBiZWxvdywgd2Ugd2FudCB0aGUKKwkgKiBmdW5jdGlvbnMgdG8gYmUgY2FsbGVkIGV2ZW4gaWYgb25lIG9mIHRoZW0gZmFpbCAqLworCWlmICgoKHRwX2ZlYXR1cmVzLmhvdGtleV9tYXNrICYmCisJICAgICAgaG90a2V5X21hc2tfc2V0KGhvdGtleV9vcmlnX21hc2spKSB8CisJICAgICBob3RrZXlfc3RhdHVzX3NldChmYWxzZSkpICE9IDApCisJCXByaW50ayhUUEFDUElfRVJSCisJCSAgICAgICAiZmFpbGVkIHRvIHJlc3RvcmUgaG90IGtleSBtYXNrICIKKwkJICAgICAgICJ0byBCSU9TIGRlZmF1bHRzXG4iKTsKIH0KIAogc3RhdGljIHZvaWQgX19pbml0IGhvdGtleV91bm1hcChjb25zdCB1bnNpZ25lZCBpbnQgc2NhbmNvZGUpCkBAIC0yODY0LDYgKzMwMjgsMzUgQEAKIAl9CiB9CiAKKy8qCisgKiBIS0VZIHF1aXJrczoKKyAqICAgVFBBQ1BJX0hLX1FfSU5JTUFTSzoJU3VwcG9ydHMgRk4rRjMsRk4rRjQsRk4rRjEyCisgKi8KKworI2RlZmluZQlUUEFDUElfSEtfUV9JTklNQVNLCTB4MDAwMQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHRwYWNwaV9xdWlyayB0cGFjcGlfaG90a2V5X3F0YWJsZVtdIF9faW5pdGNvbnN0ID0geworCVRQQUNQSV9RX0lCTSgnSScsICdIJywgVFBBQ1BJX0hLX1FfSU5JTUFTSyksIC8qIDYwMEUgKi8KKwlUUEFDUElfUV9JQk0oJ0knLCAnTicsIFRQQUNQSV9IS19RX0lOSU1BU0spLCAvKiA2MDBFICovCisJVFBBQ1BJX1FfSUJNKCdJJywgJ0QnLCBUUEFDUElfSEtfUV9JTklNQVNLKSwgLyogNzcwLCA3NzBFLCA3NzBFRCAqLworCVRQQUNQSV9RX0lCTSgnSScsICdXJywgVFBBQ1BJX0hLX1FfSU5JTUFTSyksIC8qIEEyMG0gKi8KKwlUUEFDUElfUV9JQk0oJ0knLCAnVicsIFRQQUNQSV9IS19RX0lOSU1BU0spLCAvKiBBMjBwICovCisJVFBBQ1BJX1FfSUJNKCcxJywgJzAnLCBUUEFDUElfSEtfUV9JTklNQVNLKSwgLyogQTIxZSwgQTIyZSAqLworCVRQQUNQSV9RX0lCTSgnSycsICdVJywgVFBBQ1BJX0hLX1FfSU5JTUFTSyksIC8qIEEyMWUgKi8KKwlUUEFDUElfUV9JQk0oJ0snLCAnWCcsIFRQQUNQSV9IS19RX0lOSU1BU0spLCAvKiBBMjFtLCBBMjJtICovCisJVFBBQ1BJX1FfSUJNKCdLJywgJ1knLCBUUEFDUElfSEtfUV9JTklNQVNLKSwgLyogQTIxcCwgQTIycCAqLworCVRQQUNQSV9RX0lCTSgnMScsICdCJywgVFBBQ1BJX0hLX1FfSU5JTUFTSyksIC8qIEEyMmUgKi8KKwlUUEFDUElfUV9JQk0oJzEnLCAnMycsIFRQQUNQSV9IS19RX0lOSU1BU0spLCAvKiBBMjJtICovCisJVFBBQ1BJX1FfSUJNKCcxJywgJ0UnLCBUUEFDUElfSEtfUV9JTklNQVNLKSwgLyogQTMwL3AgKDApICovCisJVFBBQ1BJX1FfSUJNKCcxJywgJ0MnLCBUUEFDUElfSEtfUV9JTklNQVNLKSwgLyogUjMwICovCisJVFBBQ1BJX1FfSUJNKCcxJywgJ0YnLCBUUEFDUElfSEtfUV9JTklNQVNLKSwgLyogUjMxICovCisJVFBBQ1BJX1FfSUJNKCdJJywgJ1knLCBUUEFDUElfSEtfUV9JTklNQVNLKSwgLyogVDIwICovCisJVFBBQ1BJX1FfSUJNKCdLJywgJ1onLCBUUEFDUElfSEtfUV9JTklNQVNLKSwgLyogVDIxICovCisJVFBBQ1BJX1FfSUJNKCcxJywgJzYnLCBUUEFDUElfSEtfUV9JTklNQVNLKSwgLyogVDIyICovCisJVFBBQ1BJX1FfSUJNKCdJJywgJ1onLCBUUEFDUElfSEtfUV9JTklNQVNLKSwgLyogWDIwLCBYMjEgKi8KKwlUUEFDUElfUV9JQk0oJzEnLCAnRCcsIFRQQUNQSV9IS19RX0lOSU1BU0spLCAvKiBYMjIsIFgyMywgWDI0ICovCit9OworCiBzdGF0aWMgaW50IF9faW5pdCBob3RrZXlfaW5pdChzdHJ1Y3QgaWJtX2luaXRfc3RydWN0ICppaWJtKQogewogCS8qIFJlcXVpcmVtZW50cyBmb3IgY2hhbmdpbmcgdGhlIGRlZmF1bHQga2V5bWFwczoKQEAgLTI5MDYsOSArMzA5OSw3IEBACiAJCUtFWV9VTktOT1dOLAkvKiAweDBEOiBGTitJTlNFUlQgKi8KIAkJS0VZX1VOS05PV04sCS8qIDB4MEU6IEZOK0RFTEVURSAqLwogCi0JCS8qIGJyaWdodG5lc3M6IGZpcm13YXJlIGFsd2F5cyByZWFjdHMgdG8gdGhlbSwgdW5sZXNzCi0JCSAqIFgub3JnIGRpZCBzb21lIHRyaWNrcyBpbiB0aGUgcmFkZW9uIEJJT1Mgc2NyYXRjaAotCQkgKiByZWdpc3RlcnMgb2YgKnNvbWUqIG1vZGVscyAqLworCQkvKiBicmlnaHRuZXNzOiBmaXJtd2FyZSBhbHdheXMgcmVhY3RzIHRvIHRoZW0gKi8KIAkJS0VZX1JFU0VSVkVELAkvKiAweDBGOiBGTitIT01FIChicmlnaHRuZXNzIHVwKSAqLwogCQlLRVlfUkVTRVJWRUQsCS8qIDB4MTA6IEZOK0VORCAoYnJpZ2h0bmVzcyBkb3duKSAqLwogCkBAIC0yOTgzLDYgKzMxNzQsOCBAQAogCWludCBzdGF0dXM7CiAJaW50IGhrZXl2OwogCisJdW5zaWduZWQgbG9uZyBxdWlya3M7CisKIAl2ZGJnX3ByaW50ayhUUEFDUElfREJHX0lOSVQgfCBUUEFDUElfREJHX0hLRVksCiAJCQkiaW5pdGlhbGl6aW5nIGhvdGtleSBzdWJkcml2ZXJcbiIpOwogCkBAIC0zMDA4LDkgKzMyMDEsMTYgQEAKIAlpZiAoIXRwX2ZlYXR1cmVzLmhvdGtleSkKIAkJcmV0dXJuIDE7CiAKKwlxdWlya3MgPSB0cGFjcGlfY2hlY2tfcXVpcmtzKHRwYWNwaV9ob3RrZXlfcXRhYmxlLAorCQkJCSAgICAgQVJSQVlfU0laRSh0cGFjcGlfaG90a2V5X3F0YWJsZSkpOworCiAJdHBhY3BpX2Rpc2FibGVfYnJpZ2h0bmVzc19kZWxheSgpOwogCi0JaG90a2V5X2Rldl9hdHRyaWJ1dGVzID0gY3JlYXRlX2F0dHJfc2V0KDEzLCBOVUxMKTsKKwkvKiBNVVNUIGhhdmUgZW5vdWdoIHNwYWNlIGZvciBhbGwgYXR0cmlidXRlcyB0byBiZSBhZGRlZCB0bworCSAqIGhvdGtleV9kZXZfYXR0cmlidXRlcyAqLworCWhvdGtleV9kZXZfYXR0cmlidXRlcyA9IGNyZWF0ZV9hdHRyX3NldCgKKwkJCQkJQVJSQVlfU0laRShob3RrZXlfYXR0cmlidXRlcykgKyAyLAorCQkJCQlOVUxMKTsKIAlpZiAoIWhvdGtleV9kZXZfYXR0cmlidXRlcykKIAkJcmV0dXJuIC1FTk9NRU07CiAJcmVzID0gYWRkX21hbnlfdG9fYXR0cl9zZXQoaG90a2V5X2Rldl9hdHRyaWJ1dGVzLApAQCAtMzAxOSw3ICszMjE5LDcgQEAKIAlpZiAocmVzKQogCQlnb3RvIGVycl9leGl0OwogCi0JLyogbWFzayBub3Qgc3VwcG9ydGVkIG9uIDU3MCwgNjAwZS94LCA3NzBlLCA3NzB4LCBBMjFlLCBBMnhtL3AsCisJLyogbWFzayBub3Qgc3VwcG9ydGVkIG9uIDYwMGUveCwgNzcwZSwgNzcweCwgQTIxZSwgQTJ4bS9wLAogCSAgIEEzMCwgUjMwLCBSMzEsIFQyMC0yMiwgWDIwLTIxLCBYMjItMjQuICBEZXRlY3RlZCBieSBjaGVja2luZwogCSAgIGZvciBIS0VZIGludGVyZmFjZSB2ZXJzaW9uIDB4MTAwICovCiAJaWYgKGFjcGlfZXZhbGYoaGtleV9oYW5kbGUsICZoa2V5diwgIk1IS1YiLCAicWQiKSkgewpAQCAtMzAzMywxMCArMzIzMywyMiBAQAogCQkJICogTUhLViAweDEwMCBpbiBBMzEsIFI0MCwgUjQwZSwKIAkJCSAqIFQ0eCwgWDMxLCBhbmQgbGF0ZXIKIAkJCSAqLwotCQkJdHBfZmVhdHVyZXMuaG90a2V5X21hc2sgPSAxOwogCQkJdmRiZ19wcmludGsoVFBBQ1BJX0RCR19JTklUIHwgVFBBQ1BJX0RCR19IS0VZLAogCQkJCSJmaXJtd2FyZSBIS0VZIGludGVyZmFjZSB2ZXJzaW9uOiAweCV4XG4iLAogCQkJCWhrZXl2KTsKKworCQkJLyogUGFyYW5vaWEgY2hlY2sgQU5EIGluaXQgaG90a2V5X2FsbF9tYXNrICovCisJCQlpZiAoIWFjcGlfZXZhbGYoaGtleV9oYW5kbGUsICZob3RrZXlfYWxsX21hc2ssCisJCQkJCSJNSEtBIiwgInFkIikpIHsKKwkJCQlwcmludGsoVFBBQ1BJX0VSUgorCQkJCSAgICAgICAibWlzc2luZyBNSEtBIGhhbmRsZXIsICIKKwkJCQkgICAgICAgInBsZWFzZSByZXBvcnQgdGhpcyB0byAlc1xuIiwKKwkJCQkgICAgICAgVFBBQ1BJX01BSUwpOworCQkJCS8qIEZhbGxiYWNrOiBwcmUtaW5pdCBmb3IgRk4rRjMsRjQsRjEyICovCisJCQkJaG90a2V5X2FsbF9tYXNrID0gMHgwODBjVTsKKwkJCX0gZWxzZSB7CisJCQkJdHBfZmVhdHVyZXMuaG90a2V5X21hc2sgPSAxOworCQkJfQogCQl9CiAJfQogCkBAIC0zMDQ0LDMyICszMjU2LDIzIEBACiAJCSJob3RrZXkgbWFza3MgYXJlICVzXG4iLAogCQlzdHJfc3VwcG9ydGVkKHRwX2ZlYXR1cmVzLmhvdGtleV9tYXNrKSk7CiAKLQlpZiAodHBfZmVhdHVyZXMuaG90a2V5X21hc2spIHsKLQkJaWYgKCFhY3BpX2V2YWxmKGhrZXlfaGFuZGxlLCAmaG90a2V5X2FsbF9tYXNrLAotCQkJCSJNSEtBIiwgInFkIikpIHsKLQkJCXByaW50ayhUUEFDUElfRVJSCi0JCQkgICAgICAgIm1pc3NpbmcgTUhLQSBoYW5kbGVyLCAiCi0JCQkgICAgICAgInBsZWFzZSByZXBvcnQgdGhpcyB0byAlc1xuIiwKLQkJCSAgICAgICBUUEFDUElfTUFJTCk7Ci0JCQkvKiBGTitGMTIsIEZOK0Y0LCBGTitGMyAqLwotCQkJaG90a2V5X2FsbF9tYXNrID0gMHgwODBjVTsKLQkJfQotCX0KKwkvKiBJbml0IGhvdGtleV9hbGxfbWFzayBpZiBub3QgaW5pdGlhbGl6ZWQgeWV0ICovCisJaWYgKCF0cF9mZWF0dXJlcy5ob3RrZXlfbWFzayAmJiAhaG90a2V5X2FsbF9tYXNrICYmCisJICAgIChxdWlya3MgJiBUUEFDUElfSEtfUV9JTklNQVNLKSkKKwkJaG90a2V5X2FsbF9tYXNrID0gMHgwODBjVTsgIC8qIEZOK0YxMiwgRk4rRjQsIEZOK0YzICovCiAKLQkvKiBob3RrZXlfc291cmNlX21hc2sgKm11c3QqIGJlIHplcm8gZm9yCi0JICogdGhlIGZpcnN0IGhvdGtleV9tYXNrX2dldCAqLworCS8qIEluaXQgaG90a2V5X2FjcGlfbWFzayBhbmQgaG90a2V5X29yaWdfbWFzayAqLwogCWlmICh0cF9mZWF0dXJlcy5ob3RrZXlfbWFzaykgeworCQkvKiBob3RrZXlfc291cmNlX21hc2sgKm11c3QqIGJlIHplcm8gZm9yCisJCSAqIHRoZSBmaXJzdCBob3RrZXlfbWFza19nZXQgdG8gcmV0dXJuIGhvdGtleV9vcmlnX21hc2sgKi8KIAkJcmVzID0gaG90a2V5X21hc2tfZ2V0KCk7CiAJCWlmIChyZXMpCiAJCQlnb3RvIGVycl9leGl0OwogCi0JCWhvdGtleV9vcmlnX21hc2sgPSBob3RrZXlfbWFzazsKLQkJcmVzID0gYWRkX21hbnlfdG9fYXR0cl9zZXQoCi0JCQkJaG90a2V5X2Rldl9hdHRyaWJ1dGVzLAotCQkJCWhvdGtleV9tYXNrX2F0dHJpYnV0ZXMsCi0JCQkJQVJSQVlfU0laRShob3RrZXlfbWFza19hdHRyaWJ1dGVzKSk7Ci0JCWlmIChyZXMpCi0JCQlnb3RvIGVycl9leGl0OworCQlob3RrZXlfb3JpZ19tYXNrID0gaG90a2V5X2FjcGlfbWFzazsKKwl9IGVsc2UgeworCQlob3RrZXlfb3JpZ19tYXNrID0gaG90a2V5X2FsbF9tYXNrOworCQlob3RrZXlfYWNwaV9tYXNrID0gaG90a2V5X2FsbF9tYXNrOwogCX0KIAogI2lmZGVmIENPTkZJR19USElOS1BBRF9BQ1BJX0RFQlVHRkFDSUxJVElFUwpAQCAtMzE4MywxNCArMzM4Niw5IEBACiAJfQogCiAjaWZkZWYgQ09ORklHX1RISU5LUEFEX0FDUElfSE9US0VZX1BPTEwKLQlpZiAodHBfZmVhdHVyZXMuaG90a2V5X21hc2spIHsKLQkJaG90a2V5X3NvdXJjZV9tYXNrID0gVFBBQ1BJX0hLRVlfTlZSQU1fR09PRF9NQVNLCi0JCQkJCSYgfmhvdGtleV9hbGxfbWFzawotCQkJCQkmIH5ob3RrZXlfcmVzZXJ2ZWRfbWFzazsKLQl9IGVsc2UgewotCQlob3RrZXlfc291cmNlX21hc2sgPSBUUEFDUElfSEtFWV9OVlJBTV9HT09EX01BU0sKLQkJCQkJJiB+aG90a2V5X3Jlc2VydmVkX21hc2s7Ci0JfQorCWhvdGtleV9zb3VyY2VfbWFzayA9IFRQQUNQSV9IS0VZX05WUkFNX0dPT0RfTUFTSworCQkJCSYgfmhvdGtleV9hbGxfbWFzaworCQkJCSYgfmhvdGtleV9yZXNlcnZlZF9tYXNrOwogCiAJdmRiZ19wcmludGsoVFBBQ1BJX0RCR19JTklUIHwgVFBBQ1BJX0RCR19IS0VZLAogCQkgICAgImhvdGtleSBzb3VyY2UgbWFzayAweCUwOHgsIHBvbGxpbmcgZnJlcSAldVxuIiwKQEAgLTMyMDQsMTMgKzM0MDIsMTggQEAKIAkJaG90a2V5X2V4aXQoKTsKIAkJcmV0dXJuIHJlczsKIAl9Ci0JcmVzID0gaG90a2V5X21hc2tfc2V0KCgoaG90a2V5X2FsbF9tYXNrIHwgaG90a2V5X3NvdXJjZV9tYXNrKQotCQkJCSYgfmhvdGtleV9yZXNlcnZlZF9tYXNrKQotCQkJCXwgaG90a2V5X29yaWdfbWFzayk7CisJcmVzID0gaG90a2V5X21hc2tfc2V0KCgoaG90a2V5X2FsbF9tYXNrICYgfmhvdGtleV9yZXNlcnZlZF9tYXNrKQorCQkJICAgICAgIHwgaG90a2V5X2RyaXZlcl9tYXNrKQorCQkJICAgICAgJiB+aG90a2V5X3NvdXJjZV9tYXNrKTsKIAlpZiAocmVzIDwgMCAmJiByZXMgIT0gLUVOWElPKSB7CiAJCWhvdGtleV9leGl0KCk7CiAJCXJldHVybiByZXM7CiAJfQorCWhvdGtleV91c2VyX21hc2sgPSAoaG90a2V5X2FjcGlfbWFzayB8IGhvdGtleV9zb3VyY2VfbWFzaykKKwkJCQkmIH5ob3RrZXlfcmVzZXJ2ZWRfbWFzazsKKwl2ZGJnX3ByaW50ayhUUEFDUElfREJHX0lOSVQgfCBUUEFDUElfREJHX0hLRVksCisJCSJpbml0aWFsIG1hc2tzOiB1c2VyPTB4JTA4eCwgZnc9MHglMDh4LCBwb2xsPTB4JTA4eFxuIiwKKwkJaG90a2V5X3VzZXJfbWFzaywgaG90a2V5X2FjcGlfbWFzaywgaG90a2V5X3NvdXJjZV9tYXNrKTsKIAogCWRiZ19wcmludGsoVFBBQ1BJX0RCR19JTklUIHwgVFBBQ1BJX0RCR19IS0VZLAogCQkJImxlZ2FjeSBpYm0vaG90a2V5IGV2ZW50IHJlcG9ydGluZyBvdmVyIHByb2NmcyAlc1xuIiwKQEAgLTMyNDUsNyArMzQ0OCw3IEBACiAJaWYgKHNjYW5jb2RlID4gMCAmJiBzY2FuY29kZSA8IDB4MjEpIHsKIAkJc2NhbmNvZGUtLTsKIAkJaWYgKCEoaG90a2V5X3NvdXJjZV9tYXNrICYgKDEgPDwgc2NhbmNvZGUpKSkgewotCQkJdHBhY3BpX2lucHV0X3NlbmRfa2V5KHNjYW5jb2RlKTsKKwkJCXRwYWNwaV9pbnB1dF9zZW5kX2tleV9tYXNrZWQoc2NhbmNvZGUpOwogCQkJKnNlbmRfYWNwaV9ldiA9IGZhbHNlOwogCQl9IGVsc2UgewogCQkJKmlnbm9yZV9hY3BpX2V2ID0gdHJ1ZTsKQEAgLTMyNjQsMjAgKzM0NjcsMjAgQEAKIAkqaWdub3JlX2FjcGlfZXYgPSBmYWxzZTsKIAogCXN3aXRjaCAoaGtleSkgewotCWNhc2UgMHgyMzA0OiAvKiBzdXNwZW5kLCB1bmRvY2sgKi8KLQljYXNlIDB4MjQwNDogLyogaGliZXJuYXRpb24sIHVuZG9jayAqLworCWNhc2UgVFBfSEtFWV9FVl9XS1VQX1MzX1VORE9DSzogLyogc3VzcGVuZCwgdW5kb2NrICovCisJY2FzZSBUUF9IS0VZX0VWX1dLVVBfUzRfVU5ET0NLOiAvKiBoaWJlcm5hdGlvbiwgdW5kb2NrICovCiAJCWhvdGtleV93YWtldXBfcmVhc29uID0gVFBfQUNQSV9XQUtFVVBfVU5ET0NLOwogCQkqaWdub3JlX2FjcGlfZXYgPSB0cnVlOwogCQlicmVhazsKIAotCWNhc2UgMHgyMzA1OiAvKiBzdXNwZW5kLCBiYXkgZWplY3QgKi8KLQljYXNlIDB4MjQwNTogLyogaGliZXJuYXRpb24sIGJheSBlamVjdCAqLworCWNhc2UgVFBfSEtFWV9FVl9XS1VQX1MzX0JBWUVKOiAvKiBzdXNwZW5kLCBiYXkgZWplY3QgKi8KKwljYXNlIFRQX0hLRVlfRVZfV0tVUF9TNF9CQVlFSjogLyogaGliZXJuYXRpb24sIGJheSBlamVjdCAqLwogCQlob3RrZXlfd2FrZXVwX3JlYXNvbiA9IFRQX0FDUElfV0FLRVVQX0JBWUVKOwogCQkqaWdub3JlX2FjcGlfZXYgPSB0cnVlOwogCQlicmVhazsKIAotCWNhc2UgMHgyMzEzOiAvKiBCYXR0ZXJ5IG9uIGNyaXRpY2FsIGxvdyBsZXZlbCAoUzMpICovCi0JY2FzZSAweDI0MTM6IC8qIEJhdHRlcnkgb24gY3JpdGljYWwgbG93IGxldmVsIChTNCkgKi8KKwljYXNlIFRQX0hLRVlfRVZfV0tVUF9TM19CQVRMT1c6IC8qIEJhdHRlcnkgb24gY3JpdGljYWwgbG93IGxldmVsL1MzICovCisJY2FzZSBUUF9IS0VZX0VWX1dLVVBfUzRfQkFUTE9XOiAvKiBCYXR0ZXJ5IG9uIGNyaXRpY2FsIGxvdyBsZXZlbC9TNCAqLwogCQlwcmludGsoVFBBQ1BJX0FMRVJUCiAJCQkiRU1FUkdFTkNZIFdBS0VVUDogYmF0dGVyeSBhbG1vc3QgZW1wdHlcbiIpOwogCQkvKiBob3cgdG8gYXV0by1oZWFsOiAqLwpAQCAtMzMwNywyMSArMzUxMCwyMSBAQAogCSppZ25vcmVfYWNwaV9ldiA9IGZhbHNlOwogCiAJc3dpdGNoIChoa2V5KSB7Ci0JY2FzZSAweDUwMTA6IC8qIExlbm92byBuZXcgQklPUzogYnJpZ2h0bmVzcyBjaGFuZ2VkICovCi0JY2FzZSAweDUwMGI6IC8qIFg2MXQ6IHRhYmxldCBwZW4gaW5zZXJ0ZWQgaW50byBiYXkgKi8KLQljYXNlIDB4NTAwYzogLyogWDYxdDogdGFibGV0IHBlbiByZW1vdmVkIGZyb20gYmF5ICovCisJY2FzZSBUUF9IS0VZX0VWX1BFTl9JTlNFUlRFRDogIC8qIFg2MXQ6IHRhYmxldCBwZW4gaW5zZXJ0ZWQgaW50byBiYXkgKi8KKwljYXNlIFRQX0hLRVlfRVZfUEVOX1JFTU9WRUQ6ICAgLyogWDYxdDogdGFibGV0IHBlbiByZW1vdmVkIGZyb20gYmF5ICovCiAJCXJldHVybiB0cnVlOwogCi0JY2FzZSAweDUwMDk6IC8qIFg0MXQtWDYxdDogc3dpdmVsIHVwICh0YWJsZXQgbW9kZSkgKi8KLQljYXNlIDB4NTAwYTogLyogWDQxdC1YNjF0OiBzd2l2ZWwgZG93biAobm9ybWFsIG1vZGUpICovCisJY2FzZSBUUF9IS0VZX0VWX1RBQkxFVF9UQUJMRVQ6ICAgLyogWDQxdC1YNjF0OiB0YWJsZXQgbW9kZSAqLworCWNhc2UgVFBfSEtFWV9FVl9UQUJMRVRfTk9URUJPT0s6IC8qIFg0MXQtWDYxdDogbm9ybWFsIG1vZGUgKi8KIAkJdHBhY3BpX2lucHV0X3NlbmRfdGFibGV0c3coKTsKIAkJaG90a2V5X3RhYmxldF9tb2RlX25vdGlmeV9jaGFuZ2UoKTsKIAkJKnNlbmRfYWNwaV9ldiA9IGZhbHNlOwogCQlyZXR1cm4gdHJ1ZTsKIAotCWNhc2UgMHg1MDAxOgotCWNhc2UgMHg1MDAyOgotCQkvKiBMSUQgc3dpdGNoIGV2ZW50cy4gIERvIG5vdCBwcm9wYWdhdGUgKi8KKwljYXNlIFRQX0hLRVlfRVZfTElEX0NMT1NFOgkvKiBMaWQgY2xvc2VkICovCisJY2FzZSBUUF9IS0VZX0VWX0xJRF9PUEVOOgkvKiBMaWQgb3BlbmVkICovCisJY2FzZSBUUF9IS0VZX0VWX0JSR0hUX0NIQU5HRUQ6CS8qIGJyaWdodG5lc3MgY2hhbmdlZCAqLworCQkvKiBkbyBub3QgcHJvcGFnYXRlIHRoZXNlIGV2ZW50cyAqLwogCQkqaWdub3JlX2FjcGlfZXYgPSB0cnVlOwogCQlyZXR1cm4gdHJ1ZTsKIApAQCAtMzMzOSwzMCArMzU0MiwzMCBAQAogCSppZ25vcmVfYWNwaV9ldiA9IGZhbHNlOwogCiAJc3dpdGNoIChoa2V5KSB7Ci0JY2FzZSAweDYwMTE6CisJY2FzZSBUUF9IS0VZX0VWX0FMQVJNX0JBVF9IT1Q6CiAJCXByaW50ayhUUEFDUElfQ1JJVAogCQkJIlRIRVJNQUwgQUxBUk06IGJhdHRlcnkgaXMgdG9vIGhvdCFcbiIpOwogCQkvKiByZWNvbW1lbmRlZCBhY3Rpb246IHdhcm4gdXNlciB0aHJvdWdoIGd1aSAqLwogCQlyZXR1cm4gdHJ1ZTsKLQljYXNlIDB4NjAxMjoKKwljYXNlIFRQX0hLRVlfRVZfQUxBUk1fQkFUX1hIT1Q6CiAJCXByaW50ayhUUEFDUElfQUxFUlQKIAkJCSJUSEVSTUFMIEVNRVJHRU5DWTogYmF0dGVyeSBpcyBleHRyZW1lbHkgaG90IVxuIik7CiAJCS8qIHJlY29tbWVuZGVkIGFjdGlvbjogaW1tZWRpYXRlIHNsZWVwL2hpYmVybmF0ZSAqLwogCQlyZXR1cm4gdHJ1ZTsKLQljYXNlIDB4NjAyMToKKwljYXNlIFRQX0hLRVlfRVZfQUxBUk1fU0VOU09SX0hPVDoKIAkJcHJpbnRrKFRQQUNQSV9DUklUCiAJCQkiVEhFUk1BTCBBTEFSTTogIgogCQkJImEgc2Vuc29yIHJlcG9ydHMgc29tZXRoaW5nIGlzIHRvbyBob3QhXG4iKTsKIAkJLyogcmVjb21tZW5kZWQgYWN0aW9uOiB3YXJuIHVzZXIgdGhyb3VnaCBndWksIHRoYXQgKi8KIAkJLyogc29tZSBpbnRlcm5hbCBjb21wb25lbnQgaXMgdG9vIGhvdCAqLwogCQlyZXR1cm4gdHJ1ZTsKLQljYXNlIDB4NjAyMjoKKwljYXNlIFRQX0hLRVlfRVZfQUxBUk1fU0VOU09SX1hIT1Q6CiAJCXByaW50ayhUUEFDUElfQUxFUlQKIAkJCSJUSEVSTUFMIEVNRVJHRU5DWTogIgogCQkJImEgc2Vuc29yIHJlcG9ydHMgc29tZXRoaW5nIGlzIGV4dHJlbWVseSBob3QhXG4iKTsKIAkJLyogcmVjb21tZW5kZWQgYWN0aW9uOiBpbW1lZGlhdGUgc2xlZXAvaGliZXJuYXRlICovCiAJCXJldHVybiB0cnVlOwotCWNhc2UgMHg2MDMwOgorCWNhc2UgVFBfSEtFWV9FVl9USE1fVEFCTEVfQ0hBTkdFRDoKIAkJcHJpbnRrKFRQQUNQSV9JTkZPCiAJCQkiRUMgcmVwb3J0cyB0aGF0IFRoZXJtYWwgVGFibGUgaGFzIGNoYW5nZWRcbiIpOwogCQkvKiByZWNvbW1lbmRlZCBhY3Rpb246IGRvIG5vdGhpbmcsIHdlIGRvbid0IGhhdmUKQEAgLTM0MjAsNyArMzYyMyw3IEBACiAJCQlicmVhazsKIAkJY2FzZSAzOgogCQkJLyogMHgzMDAwLTB4M0ZGRjogYmF5LXJlbGF0ZWQgd2FrZXVwcyAqLwotCQkJaWYgKGhrZXkgPT0gMHgzMDAzKSB7CisJCQlpZiAoaGtleSA9PSBUUF9IS0VZX0VWX0JBWUVKX0FDSykgewogCQkJCWhvdGtleV9hdXRvc2xlZXBfYWNrID0gMTsKIAkJCQlwcmludGsoVFBBQ1BJX0lORk8KIAkJCQkgICAgICAgImJheSBlamVjdGVkXG4iKTsKQEAgLTM0MzIsNyArMzYzNSw3IEBACiAJCQlicmVhazsKIAkJY2FzZSA0OgogCQkJLyogMHg0MDAwLTB4NEZGRjogZG9jay1yZWxhdGVkIHdha2V1cHMgKi8KLQkJCWlmIChoa2V5ID09IDB4NDAwMykgeworCQkJaWYgKGhrZXkgPT0gVFBfSEtFWV9FVl9VTkRPQ0tfQUNLKSB7CiAJCQkJaG90a2V5X2F1dG9zbGVlcF9hY2sgPSAxOwogCQkJCXByaW50ayhUUEFDUElfSU5GTwogCQkJCSAgICAgICAidW5kb2NrZWRcbiIpOwpAQCAtMzQ1NCw3ICszNjU3LDggQEAKIAkJCWJyZWFrOwogCQljYXNlIDc6CiAJCQkvKiAweDcwMDAtMHg3RkZGOiBtaXNjICovCi0JCQlpZiAodHBfZmVhdHVyZXMuaG90a2V5X3dsc3cgJiYgaGtleSA9PSAweDcwMDApIHsKKwkJCWlmICh0cF9mZWF0dXJlcy5ob3RrZXlfd2xzdyAmJgorCQkJCQloa2V5ID09IFRQX0hLRVlfRVZfUkZLSUxMX0NIQU5HRUQpIHsKIAkJCQl0cGFjcGlfc2VuZF9yYWRpb3N3X3VwZGF0ZSgpOwogCQkJCXNlbmRfYWNwaV9ldiA9IDA7CiAJCQkJa25vd25fZXYgPSB0cnVlOwpAQCAtMzUwMCwxMCArMzcwNCwxMiBAQAogewogCXRwYWNwaV9kaXNhYmxlX2JyaWdodG5lc3NfZGVsYXkoKTsKIAotCWlmIChob3RrZXlfbWFza19nZXQoKSkKKwlpZiAoaG90a2V5X3N0YXR1c19zZXQodHJ1ZSkgPCAwIHx8CisJICAgIGhvdGtleV9tYXNrX3NldChob3RrZXlfYWNwaV9tYXNrKSA8IDApCiAJCXByaW50ayhUUEFDUElfRVJSCi0JCSAgICAgICAiZXJyb3Igd2hpbGUgdHJ5aW5nIHRvIHJlYWQgaG90IGtleSBtYXNrICIKLQkJICAgICAgICJmcm9tIGZpcm13YXJlXG4iKTsKKwkJICAgICAgICJlcnJvciB3aGlsZSBhdHRlbXB0aW5nIHRvIHJlc2V0IHRoZSBldmVudCAiCisJCSAgICAgICAiZmlybXdhcmUgaW50ZXJmYWNlXG4iKTsKKwogCXRwYWNwaV9zZW5kX3JhZGlvc3dfdXBkYXRlKCk7CiAJaG90a2V5X3RhYmxldF9tb2RlX25vdGlmeV9jaGFuZ2UoKTsKIAlob3RrZXlfd2FrZXVwX3JlYXNvbl9ub3RpZnlfY2hhbmdlKCk7CkBAIC0zNTMyLDggKzM3MzgsOCBAQAogCQlyZXR1cm4gcmVzOwogCiAJbGVuICs9IHNwcmludGYocCArIGxlbiwgInN0YXR1czpcdFx0JXNcbiIsIGVuYWJsZWQoc3RhdHVzLCAwKSk7Ci0JaWYgKHRwX2ZlYXR1cmVzLmhvdGtleV9tYXNrKSB7Ci0JCWxlbiArPSBzcHJpbnRmKHAgKyBsZW4sICJtYXNrOlx0XHQweCUwOHhcbiIsIGhvdGtleV9tYXNrKTsKKwlpZiAoaG90a2V5X2FsbF9tYXNrKSB7CisJCWxlbiArPSBzcHJpbnRmKHAgKyBsZW4sICJtYXNrOlx0XHQweCUwOHhcbiIsIGhvdGtleV91c2VyX21hc2spOwogCQlsZW4gKz0gc3ByaW50ZihwICsgbGVuLAogCQkJICAgICAgICJjb21tYW5kczpcdGVuYWJsZSwgZGlzYWJsZSwgcmVzZXQsIDxtYXNrPlxuIik7CiAJfSBlbHNlIHsKQEAgLTM1NzAsNyArMzc3Niw3IEBACiAJaWYgKG11dGV4X2xvY2tfa2lsbGFibGUoJmhvdGtleV9tdXRleCkpCiAJCXJldHVybiAtRVJFU1RBUlRTWVM7CiAKLQltYXNrID0gaG90a2V5X21hc2s7CisJbWFzayA9IGhvdGtleV91c2VyX21hc2s7CiAKIAlyZXMgPSAwOwogCXdoaWxlICgoY21kID0gbmV4dF9jbWQoJmJ1ZikpKSB7CkBAIC0zNTkyLDEyICszNzk4LDExIEBACiAJCX0KIAl9CiAKLQlpZiAoIXJlcykKKwlpZiAoIXJlcykgewogCQl0cGFjcGlfZGlzY2xvc2VfdXNlcnRhc2soInByb2NmcyBob3RrZXkiLAogCQkJInNldCBtYXNrIHRvIDB4JTA4eFxuIiwgbWFzayk7Ci0KLQlpZiAoIXJlcyAmJiBtYXNrICE9IGhvdGtleV9tYXNrKQotCQlyZXMgPSBob3RrZXlfbWFza19zZXQobWFzayk7CisJCXJlcyA9IGhvdGtleV91c2VyX21hc2tfc2V0KG1hc2spOworCX0KIAogZXJyZXhpdDoKIAltdXRleF91bmxvY2soJmhvdGtleV9tdXRleCk7CkBAIC02MDEwLDggKzYyMTUsMTAgQEAKIAkJCQkJVFBBQ1BJX0JBQ0tMSUdIVF9ERVZfTkFNRSwgTlVMTCwgTlVMTCwKIAkJCQkJJmlibV9iYWNrbGlnaHRfZGF0YSk7CiAJaWYgKElTX0VSUihpYm1fYmFja2xpZ2h0X2RldmljZSkpIHsKKwkJaW50IHJjID0gUFRSX0VSUihpYm1fYmFja2xpZ2h0X2RldmljZSk7CisJCWlibV9iYWNrbGlnaHRfZGV2aWNlID0gTlVMTDsKIAkJcHJpbnRrKFRQQUNQSV9FUlIgIkNvdWxkIG5vdCByZWdpc3RlciBiYWNrbGlnaHQgZGV2aWNlXG4iKTsKLQkJcmV0dXJuIFBUUl9FUlIoaWJtX2JhY2tsaWdodF9kZXZpY2UpOworCQlyZXR1cm4gcmM7CiAJfQogCXZkYmdfcHJpbnRrKFRQQUNQSV9EQkdfSU5JVCB8IFRQQUNQSV9EQkdfQlJHSFQsCiAJCQkiYnJpZ2h0bmVzcyBpcyBzdXBwb3J0ZWRcbiIpOwpAQCAtNzQ5OSw2ICs3NzA2LDIxIEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKKy8qCisgKiBIS0VZIGV2ZW50IGNhbGxvdXQgZm9yIG90aGVyIHN1YmRyaXZlcnMgZ28gaGVyZQorICogKHllcywgaXQgaXMgdWdseSwgYnV0IGl0IGlzIHF1aWNrLCBzYWZlLCBhbmQgZ2V0cyB0aGUgam9iIGRvbmUKKyAqLworc3RhdGljIHZvaWQgdHBhY3BpX2RyaXZlcl9ldmVudChjb25zdCB1bnNpZ25lZCBpbnQgaGtleV9ldmVudCkKK3sKK30KKworCisKK3N0YXRpYyB2b2lkIGhvdGtleV9kcml2ZXJfZXZlbnQoY29uc3QgdW5zaWduZWQgaW50IHNjYW5jb2RlKQoreworCXRwYWNwaV9kcml2ZXJfZXZlbnQoVFBfSEtFWV9FVl9IT1RLRVlfQkFTRSArIHNjYW5jb2RlKTsKK30KKwogLyogc3lzZnMgbmFtZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiBzdGF0aWMgc3NpemVfdCB0aGlua3BhZF9hY3BpX3BkZXZfbmFtZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCSAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbnAvcG5wYWNwaS9jb3JlLmMgYi9kcml2ZXJzL3BucC9wbnBhY3BpL2NvcmUuYwppbmRleCBjMDdmZGI5Li44M2I4YjVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BucC9wbnBhY3BpL2NvcmUuYworKysgYi9kcml2ZXJzL3BucC9wbnBhY3BpL2NvcmUuYwpAQCAtMTUzLDYgKzE1Myw3IEBACiAJYWNwaV9oYW5kbGUgdGVtcCA9IE5VTEw7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCXN0cnVjdCBwbnBfZGV2ICpkZXY7CisJc3RydWN0IGFjcGlfaGFyZHdhcmVfaWQgKmlkOwogCiAJLyoKIAkgKiBJZiBhIFBuUGFjcGkgZGV2aWNlIGlzIG5vdCBwcmVzZW50ICwgdGhlIGRldmljZQpAQCAtMTkzLDE1ICsxOTQsMTIgQEAKIAlpZiAoZGV2LT5jYXBhYmlsaXRpZXMgJiBQTlBfQ09ORklHVVJBQkxFKQogCQlwbnBhY3BpX3BhcnNlX3Jlc291cmNlX29wdGlvbl9kYXRhKGRldik7CiAKLQlpZiAoZGV2aWNlLT5mbGFncy5jb21wYXRpYmxlX2lkcykgewotCQlzdHJ1Y3QgYWNwaWNhX2RldmljZV9pZF9saXN0ICpjaWRfbGlzdCA9IGRldmljZS0+cG5wLmNpZF9saXN0OwotCQlpbnQgaTsKLQotCQlmb3IgKGkgPSAwOyBpIDwgY2lkX2xpc3QtPmNvdW50OyBpKyspIHsKLQkJCWlmICghaXNwbnBpZGFjcGkoY2lkX2xpc3QtPmlkc1tpXS5zdHJpbmcpKQotCQkJCWNvbnRpbnVlOwotCQkJcG5wX2FkZF9pZChkZXYsIGNpZF9saXN0LT5pZHNbaV0uc3RyaW5nKTsKLQkJfQorCWxpc3RfZm9yX2VhY2hfZW50cnkoaWQsICZkZXZpY2UtPnBucC5pZHMsIGxpc3QpIHsKKwkJaWYgKCFzdHJjbXAoaWQtPmlkLCBhY3BpX2RldmljZV9oaWQoZGV2aWNlKSkpCisJCQljb250aW51ZTsKKwkJaWYgKCFpc3BucGlkYWNwaShpZC0+aWQpKQorCQkJY29udGludWU7CisJCXBucF9hZGRfaWQoZGV2LCBpZC0+aWQpOwogCX0KIAogCS8qIGNsZWFyIG91dCB0aGUgZGFtYWdlZCBmbGFncyAqLwpAQCAtMjMyLDkgKzIzMCw4IEBACiAJc3RydWN0IHBucF9kZXYgKnBucCA9IF9wbnA7CiAKIAkvKiB0cnVlIG1lYW5zIGl0IG1hdGNoZWQgKi8KLQlyZXR1cm4gYWNwaS0+ZmxhZ3MuaGFyZHdhcmVfaWQKLQkgICAgJiYgIWFjcGlfZ2V0X3BoeXNpY2FsX2RldmljZShhY3BpLT5oYW5kbGUpCi0JICAgICYmIGNvbXBhcmVfcG5wX2lkKHBucC0+aWQsIGFjcGktPnBucC5oYXJkd2FyZV9pZCk7CisJcmV0dXJuICFhY3BpX2dldF9waHlzaWNhbF9kZXZpY2UoYWNwaS0+aGFuZGxlKQorCSAgICAmJiBjb21wYXJlX3BucF9pZChwbnAtPmlkLCBhY3BpX2RldmljZV9oaWQoYWNwaSkpOwogfQogCiBzdGF0aWMgaW50IF9faW5pdCBhY3BpX3BucF9maW5kX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGFjcGlfaGFuZGxlICogaGFuZGxlKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvaW50ZXJmYWNlLmMgYi9kcml2ZXJzL3J0Yy9pbnRlcmZhY2UuYwppbmRleCA0Y2RiMzFhLi5hMGM4MTYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9pbnRlcmZhY2UuYworKysgYi9kcml2ZXJzL3J0Yy9pbnRlcmZhY2UuYwpAQCAtMTIsNiArMTIsNyBAQAogKi8KIAogI2luY2x1ZGUgPGxpbnV4L3J0Yy5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvbG9nMi5oPgogCiBpbnQgcnRjX3JlYWRfdGltZShzdHJ1Y3QgcnRjX2RldmljZSAqcnRjLCBzdHJ1Y3QgcnRjX3RpbWUgKnRtKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLWRldi5jIGIvZHJpdmVycy9ydGMvcnRjLWRldi5jCmluZGV4IDhhMTFkZTkuLjYyMjI3Y2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1kZXYuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtZGV2LmMKQEAgLTEzLDYgKzEzLDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3J0Yy5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSAicnRjLWNvcmUuaCIKIAogc3RhdGljIGRldl90IHJ0Y19kZXZ0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLXB4YS5jIGIvZHJpdmVycy9ydGMvcnRjLXB4YS5jCmluZGV4IGJiOGNjMDUuLjc0N2NhMTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1weGEuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtcHhhLmMKQEAgLTQzOCwzNCArNDM4LDM3IEBACiB9CiAKICNpZmRlZiBDT05GSUdfUE0KLXN0YXRpYyBpbnQgcHhhX3J0Y19zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3N0YXRpYyBpbnQgcHhhX3J0Y19zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgcHhhX3J0YyAqcHhhX3J0YyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBweGFfcnRjICpweGFfcnRjID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAKLQlpZiAoZGV2aWNlX21heV93YWtldXAoJnBkZXYtPmRldikpCisJaWYgKGRldmljZV9tYXlfd2FrZXVwKGRldikpCiAJCWVuYWJsZV9pcnFfd2FrZShweGFfcnRjLT5pcnFfQWxybSk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgcHhhX3J0Y19yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3N0YXRpYyBpbnQgcHhhX3J0Y19yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQogewotCXN0cnVjdCBweGFfcnRjICpweGFfcnRjID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHB4YV9ydGMgKnB4YV9ydGMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAotCWlmIChkZXZpY2VfbWF5X3dha2V1cCgmcGRldi0+ZGV2KSkKKwlpZiAoZGV2aWNlX21heV93YWtldXAoZGV2KSkKIAkJZGlzYWJsZV9pcnFfd2FrZShweGFfcnRjLT5pcnFfQWxybSk7CiAJcmV0dXJuIDA7CiB9Ci0jZWxzZQotI2RlZmluZSBweGFfcnRjX3N1c3BlbmQJTlVMTAotI2RlZmluZSBweGFfcnRjX3Jlc3VtZQlOVUxMCisKK3N0YXRpYyBzdHJ1Y3QgZGV2X3BtX29wcyBweGFfcnRjX3BtX29wcyA9IHsKKwkuc3VzcGVuZAk9IHB4YV9ydGNfc3VzcGVuZCwKKwkucmVzdW1lCQk9IHB4YV9ydGNfcmVzdW1lLAorfTsKICNlbmRpZgogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBweGFfcnRjX2RyaXZlciA9IHsKIAkucmVtb3ZlCQk9IF9fZXhpdF9wKHB4YV9ydGNfcmVtb3ZlKSwKLQkuc3VzcGVuZAk9IHB4YV9ydGNfc3VzcGVuZCwKLQkucmVzdW1lCQk9IHB4YV9ydGNfcmVzdW1lLAogCS5kcml2ZXIJCT0gewotCQkubmFtZQkJPSAicHhhLXJ0YyIsCisJCS5uYW1lCT0gInB4YS1ydGMiLAorI2lmZGVmIENPTkZJR19QTQorCQkucG0JPSAmcHhhX3J0Y19wbV9vcHMsCisjZW5kaWYKIAl9LAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLXNhMTEwMC5jIGIvZHJpdmVycy9ydGMvcnRjLXNhMTEwMC5jCmluZGV4IDAyMWIyOTIuLjI5Zjk4YTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1zYTExMDAuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtc2ExMTAwLmMKQEAgLTM5MywzMSArMzkzLDM0IEBACiB9CiAKICNpZmRlZiBDT05GSUdfUE0KLXN0YXRpYyBpbnQgc2ExMTAwX3J0Y19zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3N0YXRpYyBpbnQgc2ExMTAwX3J0Y19zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlpZiAoZGV2aWNlX21heV93YWtldXAoJnBkZXYtPmRldikpCisJaWYgKGRldmljZV9tYXlfd2FrZXVwKGRldikpCiAJCWVuYWJsZV9pcnFfd2FrZShJUlFfUlRDQWxybSk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc2ExMTAwX3J0Y19yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3N0YXRpYyBpbnQgc2ExMTAwX3J0Y19yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQogewotCWlmIChkZXZpY2VfbWF5X3dha2V1cCgmcGRldi0+ZGV2KSkKKwlpZiAoZGV2aWNlX21heV93YWtldXAoZGV2KSkKIAkJZGlzYWJsZV9pcnFfd2FrZShJUlFfUlRDQWxybSk7CiAJcmV0dXJuIDA7CiB9Ci0jZWxzZQotI2RlZmluZSBzYTExMDBfcnRjX3N1c3BlbmQJTlVMTAotI2RlZmluZSBzYTExMDBfcnRjX3Jlc3VtZQlOVUxMCisKK3N0YXRpYyBzdHJ1Y3QgZGV2X3BtX29wcyBzYTExMDBfcnRjX3BtX29wcyA9IHsKKwkuc3VzcGVuZAk9IHNhMTEwMF9ydGNfc3VzcGVuZCwKKwkucmVzdW1lCQk9IHNhMTEwMF9ydGNfcmVzdW1lLAorfTsKICNlbmRpZgogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzYTExMDBfcnRjX2RyaXZlciA9IHsKIAkucHJvYmUJCT0gc2ExMTAwX3J0Y19wcm9iZSwKIAkucmVtb3ZlCQk9IHNhMTEwMF9ydGNfcmVtb3ZlLAotCS5zdXNwZW5kCT0gc2ExMTAwX3J0Y19zdXNwZW5kLAotCS5yZXN1bWUJCT0gc2ExMTAwX3J0Y19yZXN1bWUsCiAJLmRyaXZlcgkJPSB7Ci0JCS5uYW1lCQk9ICJzYTExMDAtcnRjIiwKKwkJLm5hbWUJPSAic2ExMTAwLXJ0YyIsCisjaWZkZWYgQ09ORklHX1BNCisJCS5wbQk9ICZzYTExMDBfcnRjX3BtX29wcywKKyNlbmRpZgogCX0sCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZC5jIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2QuYwppbmRleCBkYWQwNDQ5Li5hYWNjYzhlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZC5jCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkLmMKQEAgLTI1MDgsOCArMjUwOCw2IEBACiAJZGV2aWNlLT5zdG9wcGVkICY9IH5EQVNEX1VOUkVTVU1FRF9QTTsKIAogCWRhc2Rfc2NoZWR1bGVfZGV2aWNlX2JoKGRldmljZSk7Ci0JaWYgKGRldmljZS0+YmxvY2spCi0JCWRhc2Rfc2NoZWR1bGVfYmxvY2tfYmgoZGV2aWNlLT5ibG9jayk7CiAKIAlpZiAoZGV2aWNlLT5kaXNjaXBsaW5lLT5yZXN0b3JlKQogCQlyYyA9IGRldmljZS0+ZGlzY2lwbGluZS0+cmVzdG9yZShkZXZpY2UpOwpAQCAtMjUyMCw2ICsyNTE4LDkgQEAKIAkJICovCiAJCWRldmljZS0+c3RvcHBlZCB8PSBEQVNEX1VOUkVTVU1FRF9QTTsKIAorCWlmIChkZXZpY2UtPmJsb2NrKQorCQlkYXNkX3NjaGVkdWxlX2Jsb2NrX2JoKGRldmljZS0+YmxvY2spOworCiAJZGFzZF9wdXRfZGV2aWNlKGRldmljZSk7CiAJcmV0dXJuIDA7CiB9CkBAIC0yNTMyLDYgKzI1MzMsNyBAQAogewogCXN0cnVjdCBkYXNkX2Njd19yZXEgKmNxcjsKIAlzdHJ1Y3QgY2N3MSAqY2N3OworCXVuc2lnbmVkIGxvbmcgKmlkYXc7CiAKIAljcXIgPSBkYXNkX3NtYWxsb2NfcmVxdWVzdChtYWdpYywgMSAvKiBSREMgKi8sIHJkY19idWZmZXJfc2l6ZSwgZGV2aWNlKTsKIApAQCAtMjU0NSw5ICsyNTQ3LDE3IEBACiAKIAljY3cgPSBjcXItPmNwYWRkcjsKIAljY3ctPmNtZF9jb2RlID0gQ0NXX0NNRF9SREM7Ci0JY2N3LT5jZGEgPSAoX191MzIpKGFkZHJfdClyZGNfYnVmZmVyOwotCWNjdy0+Y291bnQgPSByZGNfYnVmZmVyX3NpemU7CisJaWYgKGlkYWxfaXNfbmVlZGVkKHJkY19idWZmZXIsIHJkY19idWZmZXJfc2l6ZSkpIHsKKwkJaWRhdyA9ICh1bnNpZ25lZCBsb25nICopIChjcXItPmRhdGEpOworCQljY3ctPmNkYSA9IChfX3UzMikoYWRkcl90KSBpZGF3OworCQljY3ctPmZsYWdzID0gQ0NXX0ZMQUdfSURBOworCQlpZGF3ID0gaWRhbF9jcmVhdGVfd29yZHMoaWRhdywgcmRjX2J1ZmZlciwgcmRjX2J1ZmZlcl9zaXplKTsKKwl9IGVsc2UgeworCQljY3ctPmNkYSA9IChfX3UzMikoYWRkcl90KSByZGNfYnVmZmVyOworCQljY3ctPmZsYWdzID0gMDsKKwl9CiAKKwljY3ctPmNvdW50ID0gcmRjX2J1ZmZlcl9zaXplOwogCWNxci0+c3RhcnRkZXYgPSBkZXZpY2U7CiAJY3FyLT5tZW1kZXYgPSBkZXZpY2U7CiAJY3FyLT5leHBpcmVzID0gMTAqSFo7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9lY2tkLmMgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9lY2tkLmMKaW5kZXggYWIzNTIxNy4uNDE3Yjk3YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZWNrZC5jCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Vja2QuYwpAQCAtMjMzOCw2ICsyMzM4LDggQEAKIAkvKiBDYWxjdWxhdGUgbnVtYmVyIG9mIGJsb2Nrcy9yZWNvcmRzIHBlciB0cmFjay4gKi8KIAlibGtzaXplID0gYmxvY2stPmJwX2Jsb2NrOwogCWJsa19wZXJfdHJrID0gcmVjc19wZXJfdHJhY2soJnByaXZhdGUtPnJkY19kYXRhLCAwLCBibGtzaXplKTsKKwlpZiAoYmxrX3Blcl90cmsgPT0gMCkKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CiAJLyogQ2FsY3VsYXRlIHJlY29yZCBpZCBvZiBmaXJzdCBhbmQgbGFzdCBibG9jay4gKi8KIAlmaXJzdF9yZWMgPSBmaXJzdF90cmsgPSBibGtfcnFfcG9zKHJlcSkgPj4gYmxvY2stPnMyYl9zaGlmdDsKIAlmaXJzdF9vZmZzID0gc2VjdG9yX2RpdihmaXJzdF90cmssIGJsa19wZXJfdHJrKTsKQEAgLTMyMTEsOCArMzIxMywxMCBAQAogaW50IGRhc2RfZWNrZF9yZXN0b3JlX2RldmljZShzdHJ1Y3QgZGFzZF9kZXZpY2UgKmRldmljZSkKIHsKIAlzdHJ1Y3QgZGFzZF9lY2tkX3ByaXZhdGUgKnByaXZhdGU7CisJc3RydWN0IGRhc2RfZWNrZF9jaGFyYWN0ZXJpc3RpY3MgdGVtcF9yZGNfZGF0YTsKIAlpbnQgaXNfa25vd24sIHJjOwogCXN0cnVjdCBkYXNkX3VpZCB0ZW1wX3VpZDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJcHJpdmF0ZSA9IChzdHJ1Y3QgZGFzZF9lY2tkX3ByaXZhdGUgKikgZGV2aWNlLT5wcml2YXRlOwogCkBAIC0zMjI1LDcgKzMyMjksOCBAQAogCXJjID0gZGFzZF9lY2tkX2dlbmVyYXRlX3VpZChkZXZpY2UsICZwcml2YXRlLT51aWQpOwogCWRhc2RfZ2V0X3VpZChkZXZpY2UtPmNkZXYsICZ0ZW1wX3VpZCk7CiAJaWYgKG1lbWNtcCgmcHJpdmF0ZS0+dWlkLCAmdGVtcF91aWQsIHNpemVvZihzdHJ1Y3QgZGFzZF91aWQpKSAhPSAwKQotCQlkZXZfZXJyKCZkZXZpY2UtPmNkZXYtPmRldiwgIlRoZSBVSUQgb2YgdGhlIERBU0QgaGFzIGNoYW5nZWRcbiIpOworCQlkZXZfZXJyKCZkZXZpY2UtPmNkZXYtPmRldiwgIlRoZSBVSUQgb2YgdGhlIERBU0QgaGFzICIKKwkJCSJjaGFuZ2VkXG4iKTsKIAlpZiAocmMpCiAJCWdvdG8gb3V0X2VycjsKIAlkYXNkX3NldF91aWQoZGV2aWNlLT5jZGV2LCAmcHJpdmF0ZS0+dWlkKTsKQEAgLTMyNDUsMTUgKzMyNTAsMTcgQEAKIAlkYXNkX2Vja2RfcmVhZF9mZWF0dXJlcyhkZXZpY2UpOwogCiAJLyogUmVhZCBEZXZpY2UgQ2hhcmFjdGVyaXN0aWNzICovCi0JbWVtc2V0KCZwcml2YXRlLT5yZGNfZGF0YSwgMCwgc2l6ZW9mKHByaXZhdGUtPnJkY19kYXRhKSk7CiAJcmMgPSBkYXNkX2dlbmVyaWNfcmVhZF9kZXZfY2hhcnMoZGV2aWNlLCBEQVNEX0VDS0RfTUFHSUMsCi0JCQkJCSAmcHJpdmF0ZS0+cmRjX2RhdGEsIDY0KTsKKwkJCQkJICZ0ZW1wX3JkY19kYXRhLCA2NCk7CiAJaWYgKHJjKSB7CiAJCURCRl9FVkVOVChEQkZfV0FSTklORywKIAkJCSAgIlJlYWQgZGV2aWNlIGNoYXJhY3RlcmlzdGljcyBmYWlsZWQsIHJjPSVkIGZvciAiCiAJCQkgICJkZXZpY2U6ICVzIiwgcmMsIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldikpOwogCQlnb3RvIG91dF9lcnI7CiAJfQorCXNwaW5fbG9ja19pcnFzYXZlKGdldF9jY3dkZXZfbG9jayhkZXZpY2UtPmNkZXYpLCBmbGFncyk7CisJbWVtY3B5KCZwcml2YXRlLT5yZGNfZGF0YSwgJnRlbXBfcmRjX2RhdGEsIHNpemVvZih0ZW1wX3JkY19kYXRhKSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShnZXRfY2N3ZGV2X2xvY2soZGV2aWNlLT5jZGV2KSwgZmxhZ3MpOwogCiAJLyogYWRkIGRldmljZSB0byBhbGlhcyBtYW5hZ2VtZW50ICovCiAJZGFzZF9hbGlhc19hZGRfZGV2aWNlKGRldmljZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2hhci9yYXczMjcwLmMgYi9kcml2ZXJzL3MzOTAvY2hhci9yYXczMjcwLmMKaW5kZXggZDZhMDIyZi4uNjJkZGY1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIvcmF3MzI3MC5jCisrKyBiL2RyaXZlcnMvczM5MC9jaGFyL3JhdzMyNzAuYwpAQCAtMTM2MSwxMSArMTM2MSwxMyBAQAogCiB2b2lkIHJhdzMyNzBfcG1fdW5mcmVlemUoc3RydWN0IHJhdzMyNzBfdmlldyAqdmlldykKIHsKKyNpZmRlZiBDT05GSUdfVE4zMjcwX0NPTlNPTEUKIAlzdHJ1Y3QgcmF3MzI3MCAqcnA7CiAKIAlycCA9IHZpZXctPmRldjsKIAlpZiAocnAgJiYgdGVzdF9iaXQoUkFXMzI3MF9GTEFHU19GUk9aRU4sICZycC0+ZmxhZ3MpKQogCQljY3dfZGV2aWNlX2ZvcmNlX2NvbnNvbGUoKTsKKyNlbmRpZgogfQogCiBzdGF0aWMgc3RydWN0IGNjd19kZXZpY2VfaWQgcmF3MzI3MF9pZFtdID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NoYXIvc2NscF9hc3luYy5jIGIvZHJpdmVycy9zMzkwL2NoYXIvc2NscF9hc3luYy5jCmluZGV4IGRhYWVjMTguLmI0NDQ2MmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaGFyL3NjbHBfYXN5bmMuYworKysgYi9kcml2ZXJzL3MzOTAvY2hhci9zY2xwX2FzeW5jLmMKQEAgLTI2LDcgKzI2LDYgQEAKIHN0YXRpYyBpbnQgc2NscF9hc3luY19zZW5kX3dhaXQoY2hhciAqbWVzc2FnZSk7CiBzdGF0aWMgc3RydWN0IGN0bF90YWJsZV9oZWFkZXIgKmNhbGxob21lX3N5c2N0bF9oZWFkZXI7CiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHNjbHBfYXN5bmNfbG9jayk7Ci1zdGF0aWMgY2hhciBub2RlbmFtZVs2NF07CiAjZGVmaW5lIFNDTFBfTk9STUFMX1dSSVRFCTB4MDAKIAogc3RydWN0IGFzeW5jX2V2YnVmIHsKQEAgLTUyLDkgKzUxLDEwIEBACiBzdGF0aWMgaW50IGNhbGxfaG9tZV9vbl9wYW5pYyhzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnNlbGYsCiAJCQkgICAgICB1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICpkYXRhKQogewotCQlzdHJuY2F0KGRhdGEsIG5vZGVuYW1lLCBzdHJsZW4obm9kZW5hbWUpKTsKLQkJc2NscF9hc3luY19zZW5kX3dhaXQoZGF0YSk7Ci0JCXJldHVybiBOT1RJRllfRE9ORTsKKwlzdHJuY2F0KGRhdGEsIGluaXRfdXRzbmFtZSgpLT5ub2RlbmFtZSwKKwkJc2l6ZW9mKGluaXRfdXRzbmFtZSgpLT5ub2RlbmFtZSkpOworCXNjbHBfYXN5bmNfc2VuZF93YWl0KGRhdGEpOworCXJldHVybiBOT1RJRllfRE9ORTsKIH0KIAogc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBjYWxsX2hvbWVfcGFuaWNfbmIgPSB7CkBAIC02MiwyMSArNjIsMjAgQEAKIAkucHJpb3JpdHkgPSBJTlRfTUFYLAogfTsKIAotc3RhdGljIGludCBwcm9jX2hhbmRsZXJfY2FsbGhvbWUoY3RsX3RhYmxlICpjdGwsIGludCB3cml0ZSwgc3RydWN0IGZpbGUgKmZpbHAsCitzdGF0aWMgaW50IHByb2NfaGFuZGxlcl9jYWxsaG9tZShzdHJ1Y3QgY3RsX3RhYmxlICpjdGwsIGludCB3cml0ZSwKIAkJCQkgdm9pZCBfX3VzZXIgKmJ1ZmZlciwgc2l6ZV90ICpjb3VudCwKIAkJCQkgbG9mZl90ICpwcG9zKQogewogCXVuc2lnbmVkIGxvbmcgdmFsOwogCWludCBsZW4sIHJjOwotCWNoYXIgYnVmWzJdOworCWNoYXIgYnVmWzNdOwogCi0JaWYgKCEqY291bnQgfCAoKnBwb3MgJiYgIXdyaXRlKSkgeworCWlmICghKmNvdW50IHx8ICgqcHBvcyAmJiAhd3JpdGUpKSB7CiAJCSpjb3VudCA9IDA7CiAJCXJldHVybiAwOwogCX0KIAlpZiAoIXdyaXRlKSB7Ci0JCWxlbiA9ICBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBjYWxsaG9tZV9lbmFibGVkKTsKLQkJYnVmW2xlbl0gPSAnXDAnOworCQlsZW4gPSBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJWRcbiIsIGNhbGxob21lX2VuYWJsZWQpOwogCQlyYyA9IGNvcHlfdG9fdXNlcihidWZmZXIsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOwogCQlpZiAocmMgIT0gMCkKIAkJCXJldHVybiAtRUZBVUxUOwpAQCAtMTAwLDcgKzk5LDcgQEAKIAl7CiAJCS5wcm9jbmFtZQk9ICJjYWxsaG9tZSIsCiAJCS5tb2RlCQk9IDA2NDQsCi0JCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19oYW5kbGVyX2NhbGxob21lLAorCQkucHJvY19oYW5kbGVyCT0gcHJvY19oYW5kbGVyX2NhbGxob21lLAogCX0sCiAJeyAuY3RsX25hbWUgPSAwIH0KIH07CkBAIC0xNzEsMzkgKzE3MCwyOSBAQAogCXJjID0gc2NscF9yZWdpc3Rlcigmc2NscF9hc3luY19yZWdpc3Rlcik7CiAJaWYgKHJjKQogCQlyZXR1cm4gcmM7Ci0JY2FsbGhvbWVfc3lzY3RsX2hlYWRlciA9IHJlZ2lzdGVyX3N5c2N0bF90YWJsZShrZXJuX2Rpcl90YWJsZSk7Ci0JaWYgKCFjYWxsaG9tZV9zeXNjdGxfaGVhZGVyKSB7Ci0JCXJjID0gLUVOT01FTTsKKwlyYyA9IC1FT1BOT1RTVVBQOworCWlmICghKHNjbHBfYXN5bmNfcmVnaXN0ZXIuc2NscF9yZWNlaXZlX21hc2sgJiBFVlRZUF9BU1lOQ19NQVNLKSkKIAkJZ290byBvdXRfc2NscDsKLQl9Ci0JaWYgKCEoc2NscF9hc3luY19yZWdpc3Rlci5zY2xwX3JlY2VpdmVfbWFzayAmIEVWVFlQX0FTWU5DX01BU0spKSB7Ci0JCXJjID0gLUVPUE5PVFNVUFA7Ci0JCWdvdG8gb3V0X3NjbHA7Ci0JfQogCXJjID0gLUVOT01FTTsKKwljYWxsaG9tZV9zeXNjdGxfaGVhZGVyID0gcmVnaXN0ZXJfc3lzY3RsX3RhYmxlKGtlcm5fZGlyX3RhYmxlKTsKKwlpZiAoIWNhbGxob21lX3N5c2N0bF9oZWFkZXIpCisJCWdvdG8gb3V0X3NjbHA7CiAJcmVxdWVzdCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzY2xwX3JlcSksIEdGUF9LRVJORUwpOwotCWlmICghcmVxdWVzdCkKLQkJZ290byBvdXRfc3lzOwogCXNjY2IgPSAoc3RydWN0IHNjbHBfYXN5bmNfc2NjYiAqKSBnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCB8IEdGUF9ETUEpOwotCWlmICghc2NjYikKKwlpZiAoIXJlcXVlc3QgfHwgIXNjY2IpCiAJCWdvdG8gb3V0X21lbTsKLQlyYyA9ICBhdG9taWNfbm90aWZpZXJfY2hhaW5fcmVnaXN0ZXIoJnBhbmljX25vdGlmaWVyX2xpc3QsCi0JCQkJCSAgICAgJmNhbGxfaG9tZV9wYW5pY19uYik7Ci0JaWYgKHJjKQotCQlnb3RvIG91dF9tZW07Ci0KLQlzdHJuY3B5KG5vZGVuYW1lLCBpbml0X3V0c25hbWUoKS0+bm9kZW5hbWUsIDY0KTsKLQlyZXR1cm4gMDsKLQorCXJjID0gYXRvbWljX25vdGlmaWVyX2NoYWluX3JlZ2lzdGVyKCZwYW5pY19ub3RpZmllcl9saXN0LAorCQkJCQkgICAgJmNhbGxfaG9tZV9wYW5pY19uYik7CisJaWYgKCFyYykKKwkJZ290byBvdXQ7CiBvdXRfbWVtOgogCWtmcmVlKHJlcXVlc3QpOwogCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykgc2NjYik7Ci1vdXRfc3lzOgogCXVucmVnaXN0ZXJfc3lzY3RsX3RhYmxlKGNhbGxob21lX3N5c2N0bF9oZWFkZXIpOwogb3V0X3NjbHA6CiAJc2NscF91bnJlZ2lzdGVyKCZzY2xwX2FzeW5jX3JlZ2lzdGVyKTsKK291dDoKIAlyZXR1cm4gcmM7Ci0KIH0KIG1vZHVsZV9pbml0KHNjbHBfYXN5bmNfaW5pdCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaGFyL3NjbHBfdnQyMjAuYyBiL2RyaXZlcnMvczM5MC9jaGFyL3NjbHBfdnQyMjAuYwppbmRleCAxNzg3MjRmLi5iOWQyYTAwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2hhci9zY2xwX3Z0MjIwLmMKKysrIGIvZHJpdmVycy9zMzkwL2NoYXIvc2NscF92dDIyMC5jCkBAIC03MDUsMjEgKzcwNSw2IEBACiB9CiBfX2luaXRjYWxsKHNjbHBfdnQyMjBfdHR5X2luaXQpOwogCi0jaWZkZWYgQ09ORklHX1NDTFBfVlQyMjBfQ09OU09MRQotCi1zdGF0aWMgdm9pZAotc2NscF92dDIyMF9jb25fd3JpdGUoc3RydWN0IGNvbnNvbGUgKmNvbiwgY29uc3QgY2hhciAqYnVmLCB1bnNpZ25lZCBpbnQgY291bnQpCi17Ci0JX19zY2xwX3Z0MjIwX3dyaXRlKChjb25zdCB1bnNpZ25lZCBjaGFyICopIGJ1ZiwgY291bnQsIDEsIDEsIDApOwotfQotCi1zdGF0aWMgc3RydWN0IHR0eV9kcml2ZXIgKgotc2NscF92dDIyMF9jb25fZGV2aWNlKHN0cnVjdCBjb25zb2xlICpjLCBpbnQgKmluZGV4KQotewotCSppbmRleCA9IDA7Ci0JcmV0dXJuIHNjbHBfdnQyMjBfZHJpdmVyOwotfQotCiBzdGF0aWMgdm9pZCBfX3NjbHBfdnQyMjBfZmx1c2hfYnVmZmVyKHZvaWQpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTc3Niw2ICs3NjEsMjEgQEAKIAl9CiB9CiAKKyNpZmRlZiBDT05GSUdfU0NMUF9WVDIyMF9DT05TT0xFCisKK3N0YXRpYyB2b2lkCitzY2xwX3Z0MjIwX2Nvbl93cml0ZShzdHJ1Y3QgY29uc29sZSAqY29uLCBjb25zdCBjaGFyICpidWYsIHVuc2lnbmVkIGludCBjb3VudCkKK3sKKwlfX3NjbHBfdnQyMjBfd3JpdGUoKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgYnVmLCBjb3VudCwgMSwgMSwgMCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdHR5X2RyaXZlciAqCitzY2xwX3Z0MjIwX2Nvbl9kZXZpY2Uoc3RydWN0IGNvbnNvbGUgKmMsIGludCAqaW5kZXgpCit7CisJKmluZGV4ID0gMDsKKwlyZXR1cm4gc2NscF92dDIyMF9kcml2ZXI7Cit9CisKIHN0YXRpYyBpbnQKIHNjbHBfdnQyMjBfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqc2VsZiwKIAkJCSAgdW5zaWduZWQgbG9uZyBldmVudCwgdm9pZCAqZGF0YSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfYmxvY2suYyBiL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfYmxvY2suYwppbmRleCA2NGY1N2VmLi4wYzA3MDViIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2hhci90YXBlX2Jsb2NrLmMKKysrIGIvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9ibG9jay5jCkBAIC0xNjIsOSArMTYyLDEwIEBACiAJc3Bpbl9sb2NrX2lycSgmZGV2aWNlLT5ibGtfZGF0YS5yZXF1ZXN0X3F1ZXVlX2xvY2spOwogCXdoaWxlICgKIAkJIWJsa19xdWV1ZV9wbHVnZ2VkKHF1ZXVlKSAmJgotCQkocmVxID0gYmxrX2ZldGNoX3JlcXVlc3QocXVldWUpKSAmJgorCQlibGtfcGVla19yZXF1ZXN0KHF1ZXVlKSAmJgogCQlucl9xdWV1ZWQgPCBUQVBFQkxPQ0tfTUlOX1JFUVVFVUUKIAkpIHsKKwkJcmVxID0gYmxrX2ZldGNoX3JlcXVlc3QocXVldWUpOwogCQlpZiAocnFfZGF0YV9kaXIocmVxKSA9PSBXUklURSkgewogCQkJREJGX0VWRU5UKDEsICJUQkxPQ0s6IFJlamVjdGluZyB3cml0ZSByZXF1ZXN0XG4iKTsKIAkJCXNwaW5fdW5sb2NrX2lycSgmZGV2aWNlLT5ibGtfZGF0YS5yZXF1ZXN0X3F1ZXVlX2xvY2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9ibGFja2xpc3QuYyBiL2RyaXZlcnMvczM5MC9jaW8vYmxhY2tsaXN0LmMKaW5kZXggNjU2NWYwMi4uN2VhYjlhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9ibGFja2xpc3QuYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL2JsYWNrbGlzdC5jCkBAIC0yNjUsMTMgKzI2NSwxMSBAQAogc3RhdGljIHZvaWQgKgogY2lvX2lnbm9yZV9wcm9jX3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIGxvZmZfdCAqb2Zmc2V0KQogewotCXN0cnVjdCBjY3dkZXZfaXRlciAqaXRlcjsKKwlzdHJ1Y3QgY2N3ZGV2X2l0ZXIgKml0ZXIgPSBzLT5wcml2YXRlOwogCiAJaWYgKCpvZmZzZXQgPj0gKF9fTUFYX1NVQkNIQU5ORUwgKyAxKSAqIChfX01BWF9TU0lEICsgMSkpCiAJCXJldHVybiBOVUxMOwotCWl0ZXIgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgY2N3ZGV2X2l0ZXIpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWl0ZXIpCi0JCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCW1lbXNldChpdGVyLCAwLCBzaXplb2YoKml0ZXIpKTsKIAlpdGVyLT5zc2lkID0gKm9mZnNldCAvIChfX01BWF9TVUJDSEFOTkVMICsgMSk7CiAJaXRlci0+ZGV2bm8gPSAqb2Zmc2V0ICUgKF9fTUFYX1NVQkNIQU5ORUwgKyAxKTsKIAlyZXR1cm4gaXRlcjsKQEAgLTI4MCw4ICsyNzgsNiBAQAogc3RhdGljIHZvaWQKIGNpb19pZ25vcmVfcHJvY19zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKml0KQogewotCWlmICghSVNfRVJSKGl0KSkKLQkJa2ZyZWUoaXQpOwogfQogCiBzdGF0aWMgdm9pZCAqCkBAIC0zNzgsMTQgKzM3NCwxNSBAQAogc3RhdGljIGludAogY2lvX2lnbm9yZV9wcm9jX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0JcmV0dXJuIHNlcV9vcGVuKGZpbGUsICZjaW9faWdub3JlX3Byb2Nfc2VxX29wcyk7CisJcmV0dXJuIHNlcV9vcGVuX3ByaXZhdGUoZmlsZSwgJmNpb19pZ25vcmVfcHJvY19zZXFfb3BzLAorCQkJCXNpemVvZihzdHJ1Y3QgY2N3ZGV2X2l0ZXIpKTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgY2lvX2lnbm9yZV9wcm9jX2ZvcHMgPSB7CiAJLm9wZW4gICAgPSBjaW9faWdub3JlX3Byb2Nfb3BlbiwKIAkucmVhZCAgICA9IHNlcV9yZWFkLAogCS5sbHNlZWsgID0gc2VxX2xzZWVrLAotCS5yZWxlYXNlID0gc2VxX3JlbGVhc2UsCisJLnJlbGVhc2UgPSBzZXFfcmVsZWFzZV9wcml2YXRlLAogCS53cml0ZSAgID0gY2lvX2lnbm9yZV93cml0ZSwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vY2hwLmMgYi9kcml2ZXJzL3MzOTAvY2lvL2NocC5jCmluZGV4IDQwMDAyODMuLjhhYjUxNjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vY2hwLmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9jaHAuYwpAQCAtMzkzLDcgKzM5Myw2IEBACiAJY2hwLT5zdGF0ZSA9IDE7CiAJY2hwLT5kZXYucGFyZW50ID0gJmNoYW5uZWxfc3Vic3lzdGVtc1tjaHBpZC5jc3NpZF0tPmRldmljZTsKIAljaHAtPmRldi5yZWxlYXNlID0gY2hwX3JlbGVhc2U7Ci0JZGV2X3NldF9uYW1lKCZjaHAtPmRldiwgImNocCV4LiUwMngiLCBjaHBpZC5jc3NpZCwgY2hwaWQuaWQpOwogCiAJLyogT2J0YWluIGNoYW5uZWwgcGF0aCBkZXNjcmlwdGlvbiBhbmQgZmlsbCBpdCBpbi4gKi8KIAlyZXQgPSBjaHNjX2RldGVybWluZV9iYXNlX2NoYW5uZWxfcGF0aF9kZXNjKGNocGlkLCAmY2hwLT5kZXNjKTsKQEAgLTQxMSw2ICs0MTAsNyBAQAogCX0gZWxzZSB7CiAJCWNocC0+Y21nID0gLTE7CiAJfQorCWRldl9zZXRfbmFtZSgmY2hwLT5kZXYsICJjaHAleC4lMDJ4IiwgY2hwaWQuY3NzaWQsIGNocGlkLmlkKTsKIAogCS8qIG1ha2UgaXQga25vd24gdG8gdGhlIHN5c3RlbSAqLwogCXJldCA9IGRldmljZV9yZWdpc3RlcigmY2hwLT5kZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9kZXZpY2UuYyBiL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlLmMKaW5kZXggZjc4MGJkZC4uMjQ5MGI3NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9kZXZpY2UuYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL2RldmljZS5jCkBAIC0xMjUwLDggKzEyNTAsNyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IGNjd19kZXZfaWQgZGV2X2lkOwogCi0JY2RldiA9IHNjaF9nZXRfY2RldihzY2gpOwotCWlmIChjZGV2KSB7CisJaWYgKGNpb19pc19jb25zb2xlKHNjaC0+c2NoaWQpKSB7CiAJCXJjID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZzY2gtPmRldi5rb2JqLAogCQkJCQkmaW9fc3ViY2hhbm5lbF9hdHRyX2dyb3VwKTsKIAkJaWYgKHJjKQpAQCAtMTI2MCwxMyArMTI1OSwxMyBAQAogCQkJCSAgICAgICIwLiV4LiUwNHggKHJjPSVkKVxuIiwKIAkJCQkgICAgICBzY2gtPnNjaGlkLnNzaWQsIHNjaC0+c2NoaWQuc2NoX25vLCByYyk7CiAJCS8qCi0JCSAqIFRoaXMgc3ViY2hhbm5lbCBhbHJlYWR5IGhhcyBhbiBhc3NvY2lhdGVkIGNjd19kZXZpY2UuCisJCSAqIFRoZSBjb25zb2xlIHN1YmNoYW5uZWwgYWxyZWFkeSBoYXMgYW4gYXNzb2NpYXRlZCBjY3dfZGV2aWNlLgogCQkgKiBUaHJvdyB0aGUgZGVsYXllZCB1ZXZlbnQgZm9yIHRoZSBzdWJjaGFubmVsLCByZWdpc3RlcgotCQkgKiB0aGUgY2N3X2RldmljZSBhbmQgZXhpdC4gVGhpcyBoYXBwZW5zIGZvciBhbGwgZWFybHkKLQkJICogZGV2aWNlcywgZS5nLiB0aGUgY29uc29sZS4KKwkJICogdGhlIGNjd19kZXZpY2UgYW5kIGV4aXQuCiAJCSAqLwogCQlkZXZfc2V0X3VldmVudF9zdXBwcmVzcygmc2NoLT5kZXYsIDApOwogCQlrb2JqZWN0X3VldmVudCgmc2NoLT5kZXYua29iaiwgS09CSl9BREQpOworCQljZGV2ID0gc2NoX2dldF9jZGV2KHNjaCk7CiAJCWNkZXYtPmRldi5ncm91cHMgPSBjY3dkZXZfYXR0cl9ncm91cHM7CiAJCWRldmljZV9pbml0aWFsaXplKCZjZGV2LT5kZXYpOwogCQljY3dfZGV2aWNlX3JlZ2lzdGVyKGNkZXYpOwpAQCAtMTYwOSw3ICsxNjA4LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgZGV2aWNlX3NldF9kaXNjb25uZWN0ZWQoc3RydWN0IGNjd19kZXZpY2UgKmNkZXYpCit2b2lkIGNjd19kZXZpY2Vfc2V0X2Rpc2Nvbm5lY3RlZChzdHJ1Y3QgY2N3X2RldmljZSAqY2RldikKIHsKIAlpZiAoIWNkZXYpCiAJCXJldHVybjsKQEAgLTE3MDUsNyArMTcwNCw3IEBACiAJCWNjd19kZXZpY2VfdHJpZ2dlcl9yZXByb2JlKGNkZXYpOwogCQlicmVhazsKIAljYXNlIERJU0M6Ci0JCWRldmljZV9zZXRfZGlzY29ubmVjdGVkKGNkZXYpOworCQljY3dfZGV2aWNlX3NldF9kaXNjb25uZWN0ZWQoY2Rldik7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9kZXZpY2UuaCBiL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlLmgKaW5kZXggZWQzOWEyYy4uMjQ2YzY0OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9kZXZpY2UuaAorKysgYi9kcml2ZXJzL3MzOTAvY2lvL2RldmljZS5oCkBAIC0xMjUsNiArMTI1LDcgQEAKIHZvaWQgY2N3X2RldmljZV90cmlnZ2VyX3JlcHJvYmUoc3RydWN0IGNjd19kZXZpY2UgKik7CiB2b2lkIGNjd19kZXZpY2Vfa2lsbF9pbyhzdHJ1Y3QgY2N3X2RldmljZSAqKTsKIGludCBjY3dfZGV2aWNlX25vdGlmeShzdHJ1Y3QgY2N3X2RldmljZSAqLCBpbnQpOwordm9pZCBjY3dfZGV2aWNlX3NldF9kaXNjb25uZWN0ZWQoc3RydWN0IGNjd19kZXZpY2UgKmNkZXYpOwogdm9pZCBjY3dfZGV2aWNlX3NldF9ub3RvcGVyKHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2KTsKIAogLyogcWRpbyBuZWVkcyB0aGlzLiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9kZXZpY2VfZnNtLmMgYi9kcml2ZXJzL3MzOTAvY2lvL2RldmljZV9mc20uYwppbmRleCBlNzI4Y2U0Li5iOTYxM2Q3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL2RldmljZV9mc20uYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL2RldmljZV9mc20uYwpAQCAtMzg3LDE5ICszODcsMzUgQEAKIAogCWNkZXYtPnByaXZhdGUtPnN0YXRlID0gc3RhdGU7CiAKLQlpZiAoc3RhdGUgPT0gREVWX1NUQVRFX0JPWEVEKSB7CisJc3dpdGNoIChzdGF0ZSkgeworCWNhc2UgREVWX1NUQVRFX0JPWEVEOgogCQlDSU9fTVNHX0VWRU5UKDAsICJCb3hlZCBkZXZpY2UgJTA0eCBvbiBzdWJjaGFubmVsICUwNHhcbiIsCiAJCQkgICAgICBjZGV2LT5wcml2YXRlLT5kZXZfaWQuZGV2bm8sIHNjaC0+c2NoaWQuc2NoX25vKTsKIAkJaWYgKGNkZXYtPm9ubGluZSAmJiAhY2N3X2RldmljZV9ub3RpZnkoY2RldiwgQ0lPX0JPWEVEKSkKIAkJCWNjd19kZXZpY2Vfc2NoZWR1bGVfc2NoX3VucmVnaXN0ZXIoY2Rldik7CiAJCWNkZXYtPnByaXZhdGUtPmZsYWdzLmRvbm90aWZ5ID0gMDsKLQl9Ci0JaWYgKHN0YXRlID09IERFVl9TVEFURV9OT1RfT1BFUikgeworCQlicmVhazsKKwljYXNlIERFVl9TVEFURV9OT1RfT1BFUjoKIAkJQ0lPX01TR19FVkVOVCgwLCAiRGV2aWNlICUwNHggZ29uZSBvbiBzdWJjaGFubmVsICUwNHhcbiIsCiAJCQkgICAgICBjZGV2LT5wcml2YXRlLT5kZXZfaWQuZGV2bm8sIHNjaC0+c2NoaWQuc2NoX25vKTsKIAkJaWYgKCFjY3dfZGV2aWNlX25vdGlmeShjZGV2LCBDSU9fR09ORSkpCiAJCQljY3dfZGV2aWNlX3NjaGVkdWxlX3NjaF91bnJlZ2lzdGVyKGNkZXYpOworCQllbHNlCisJCQljY3dfZGV2aWNlX3NldF9kaXNjb25uZWN0ZWQoY2Rldik7CiAJCWNkZXYtPnByaXZhdGUtPmZsYWdzLmRvbm90aWZ5ID0gMDsKKwkJYnJlYWs7CisJY2FzZSBERVZfU1RBVEVfRElTQ09OTkVDVEVEOgorCQlDSU9fTVNHX0VWRU5UKDAsICJEaXNjb25uZWN0ZWQgZGV2aWNlICUwNHggb24gc3ViY2hhbm5lbCAiCisJCQkgICAgICAiJTA0eFxuIiwgY2Rldi0+cHJpdmF0ZS0+ZGV2X2lkLmRldm5vLAorCQkJICAgICAgc2NoLT5zY2hpZC5zY2hfbm8pOworCQlpZiAoIWNjd19kZXZpY2Vfbm90aWZ5KGNkZXYsIENJT19OT19QQVRIKSkKKwkJCWNjd19kZXZpY2Vfc2NoZWR1bGVfc2NoX3VucmVnaXN0ZXIoY2Rldik7CisJCWVsc2UKKwkJCWNjd19kZXZpY2Vfc2V0X2Rpc2Nvbm5lY3RlZChjZGV2KTsKKwkJY2Rldi0+cHJpdmF0ZS0+ZmxhZ3MuZG9ub3RpZnkgPSAwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKIAl9CiAKIAlpZiAoY2Rldi0+cHJpdmF0ZS0+ZmxhZ3MuZG9ub3RpZnkpIHsKQEAgLTY3MSw2ICs2ODcsMTAgQEAKIAkJY2N3X2RldmljZV9kb25lKGNkZXYsIERFVl9TVEFURV9OT1RfT1BFUik7CiAJCXJldHVybiAwOwogCX0KKwlpZiAoY2Rldi0+cHJpdmF0ZS0+c3RhdGUgPT0gREVWX1NUQVRFX0JPWEVEKSB7CisJCWNjd19kZXZpY2VfZG9uZShjZGV2LCBERVZfU1RBVEVfQk9YRUQpOworCQlyZXR1cm4gMDsKKwl9CiAJaWYgKGNjd19kZXZpY2VfaXNfb3JwaGFuKGNkZXYpKSB7CiAJCWNjd19kZXZpY2VfZG9uZShjZGV2LCBERVZfU1RBVEVfT0ZGTElORSk7CiAJCXJldHVybiAwOwpAQCAtNzMwLDExICs3NTAsMTAgQEAKIHN0YXRpYyB2b2lkIGNjd19kZXZpY2VfZ2VuZXJpY19ub3RvcGVyKHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2LAogCQkJCSAgICAgICBlbnVtIGRldl9ldmVudCBkZXZfZXZlbnQpCiB7Ci0Jc3RydWN0IHN1YmNoYW5uZWwgKnNjaDsKLQotCWNjd19kZXZpY2Vfc2V0X25vdG9wZXIoY2Rldik7Ci0Jc2NoID0gdG9fc3ViY2hhbm5lbChjZGV2LT5kZXYucGFyZW50KTsKLQljc3Nfc2NoZWR1bGVfZXZhbChzY2gtPnNjaGlkKTsKKwlpZiAoIWNjd19kZXZpY2Vfbm90aWZ5KGNkZXYsIENJT19HT05FKSkKKwkJY2N3X2RldmljZV9zY2hlZHVsZV9zY2hfdW5yZWdpc3RlcihjZGV2KTsKKwllbHNlCisJCWNjd19kZXZpY2Vfc2V0X2Rpc2Nvbm5lY3RlZChjZGV2KTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vcWRpb19kZWJ1Zy5jIGIvZHJpdmVycy9zMzkwL2Npby9xZGlvX2RlYnVnLmMKaW5kZXggMWI3OGY2My4uNzY3Njk5NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9xZGlvX2RlYnVnLmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9xZGlvX2RlYnVnLmMKQEAgLTEyNSw3ICsxMjUsNyBAQAogCQkJICAgZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZS0+aV9wcml2YXRlKTsKIH0KIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZGVidWdmc19mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZGVidWdmc19mb3BzID0gewogCS5vd25lcgkgPSBUSElTX01PRFVMRSwKIAkub3BlbgkgPSBxc3RhdF9zZXFfb3BlbiwKIAkucmVhZAkgPSBzZXFfcmVhZCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vcWRpb19wZXJmLmMgYi9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fcGVyZi5jCmluZGV4IGVmZjk0MzkuLjk2OGUzYzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vcWRpb19wZXJmLmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9xZGlvX3BlcmYuYwpAQCAtODQsNyArODQsNyBAQAogCXJldHVybiBzaW5nbGVfb3BlbihmaWxwLCBxZGlvX3BlcmZfcHJvY19zaG93LCBOVUxMKTsKIH0KIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcWRpb19wZXJmX3Byb2NfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHFkaW9fcGVyZl9wcm9jX2ZvcHMgPSB7CiAJLm93bmVyCSA9IFRISVNfTU9EVUxFLAogCS5vcGVuCSA9IHFkaW9fcGVyZl9zZXFfb3BlbiwKIAkucmVhZAkgPSBzZXFfcmVhZCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jcnlwdG8vemNyeXB0X3BjaXhjYy5jIGIvZHJpdmVycy9zMzkwL2NyeXB0by96Y3J5cHRfcGNpeGNjLmMKaW5kZXggYzIwZDQ3OS4uNTY3N2I0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NyeXB0by96Y3J5cHRfcGNpeGNjLmMKKysrIGIvZHJpdmVycy9zMzkwL2NyeXB0by96Y3J5cHRfcGNpeGNjLmMKQEAgLTM2MSw3ICszNjEsNyBAQAogCQkuVG9DYXJkTGVuMQk9IHNpemVvZiAqbXNnIC0gc2l6ZW9mKG1zZy0+aGRyKSwKIAkJLkZyb21DYXJkTGVuMQk9IHNpemVvZiAqbXNnIC0gc2l6ZW9mKG1zZy0+aGRyKSwKIAl9OwotCXN0YXRpYyBzdHJ1Y3QgQ1BSQlggc3RhdGljX2NwcmJ4ID0geworCXN0YXRpYyBzdHJ1Y3QgQ1BSQlggbG9jYWxfY3ByYnggPSB7CiAJCS5jcHJiX2xlbgk9IDB4MDBkYywKIAkJLmNwcmJfdmVyX2lkCT0gMHgwMiwKIAkJLmZ1bmNfaWQJPSB7MHg1NCwgMHgzMn0sCkBAIC0zNzIsNyArMzcyLDcgQEAKIAogCW1zZy0+aGRyID0gc3RhdGljX3R5cGU2X2hkclg7CiAJbXNnLT5oZHIuRnJvbUNhcmRMZW4yID0gcmFuZG9tX251bWJlcl9sZW5ndGgsCi0JbXNnLT5jcHJieCA9IHN0YXRpY19jcHJieDsKKwltc2ctPmNwcmJ4ID0gbG9jYWxfY3ByYng7CiAJbXNnLT5jcHJieC5ycGxfZGF0YWwgPSByYW5kb21fbnVtYmVyX2xlbmd0aCwKIAltc2ctPmNwcmJ4LmRvbWFpbiA9IEFQX1FJRF9RVUVVRShhcF9kZXYtPnFpZCk7CiAJbWVtY3B5KG1zZy0+ZnVuY3Rpb25fY29kZSwgbXNnLT5oZHIuZnVuY3Rpb25fY29kZSwgMHgwMik7CkBAIC01NjEsNyArNTYxLDggQEAKIAkJaWYgKG1zZy0+Y3ByYnguY3ByYl92ZXJfaWQgPT0gMHgwMikKIAkJCXJldHVybiBjb252ZXJ0X3R5cGU4Nl9pY2EoemRldiwgcmVwbHksCiAJCQkJCQkgIG91dHB1dGRhdGEsIG91dHB1dGRhdGFsZW5ndGgpOwotCQkvKiBubyBicmVhaywgaW5jb3JyZWN0IGNwcmIgdmVyc2lvbiBpcyBhbiB1bmtub3duIHJlc3BvbnNlICovCisJCS8qIEZhbGwgdGhyb3VnaCwgbm8gYnJlYWssIGluY29ycmVjdCBjcHJiIHZlcnNpb24gaXMgYW4gdW5rbm93bgorCQkgKiByZXNwb25zZSAqLwogCWRlZmF1bHQ6IC8qIFVua25vd24gcmVzcG9uc2UgdHlwZSwgdGhpcyBzaG91bGQgTkVWRVIgRVZFUiBoYXBwZW4gKi8KIAkJemRldi0+b25saW5lID0gMDsKIAkJcmV0dXJuIC1FQUdBSU47CS8qIHJlcGVhdCB0aGUgcmVxdWVzdCBvbiBhIGRpZmZlcmVudCBkZXZpY2UuICovCkBAIC01ODcsNyArNTg4LDggQEAKIAkJfQogCQlpZiAobXNnLT5jcHJieC5jcHJiX3Zlcl9pZCA9PSAweDAyKQogCQkJcmV0dXJuIGNvbnZlcnRfdHlwZTg2X3hjcmIoemRldiwgcmVwbHksIHhjUkIpOwotCQkvKiBubyBicmVhaywgaW5jb3JyZWN0IGNwcmIgdmVyc2lvbiBpcyBhbiB1bmtub3duIHJlc3BvbnNlICovCisJCS8qIEZhbGwgdGhyb3VnaCwgbm8gYnJlYWssIGluY29ycmVjdCBjcHJiIHZlcnNpb24gaXMgYW4gdW5rbm93bgorCQkgKiByZXNwb25zZSAqLwogCWRlZmF1bHQ6IC8qIFVua25vd24gcmVzcG9uc2UgdHlwZSwgdGhpcyBzaG91bGQgTkVWRVIgRVZFUiBoYXBwZW4gKi8KIAkJeGNSQi0+c3RhdHVzID0gMHgwMDA4MDQ0REw7IC8qIEhERF9JbnZhbGlkUGFybSAqLwogCQl6ZGV2LT5vbmxpbmUgPSAwOwpAQCAtNjEwLDcgKzYxMiw4IEBACiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJaWYgKG1zZy0+Y3ByYnguY3ByYl92ZXJfaWQgPT0gMHgwMikKIAkJCXJldHVybiBjb252ZXJ0X3R5cGU4Nl9ybmcoemRldiwgcmVwbHksIGRhdGEpOwotCQkvKiBubyBicmVhaywgaW5jb3JyZWN0IGNwcmIgdmVyc2lvbiBpcyBhbiB1bmtub3duIHJlc3BvbnNlICovCisJCS8qIEZhbGwgdGhyb3VnaCwgbm8gYnJlYWssIGluY29ycmVjdCBjcHJiIHZlcnNpb24gaXMgYW4gdW5rbm93bgorCQkgKiByZXNwb25zZSAqLwogCWRlZmF1bHQ6IC8qIFVua25vd24gcmVzcG9uc2UgdHlwZSwgdGhpcyBzaG91bGQgTkVWRVIgRVZFUiBoYXBwZW4gKi8KIAkJemRldi0+b25saW5lID0gMDsKIAkJcmV0dXJuIC1FQUdBSU47CS8qIHJlcGVhdCB0aGUgcmVxdWVzdCBvbiBhIGRpZmZlcmVudCBkZXZpY2UuICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L3Ntc2dpdWN2LmMgYi9kcml2ZXJzL3MzOTAvbmV0L3Ntc2dpdWN2LmMKaW5kZXggMTAyMDAwZC4uMzAxMjM1NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9zbXNnaXVjdi5jCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvc21zZ2l1Y3YuYwpAQCAtMTU4LDcgKzE1OCwxMiBAQAogCQlzbXNnX3BhdGgtPmZsYWdzID0gMDsKIAkJcmMgPSBpdWN2X3BhdGhfY29ubmVjdChzbXNnX3BhdGgsICZzbXNnX2hhbmRsZXIsICIqTVNHICAgICIsCiAJCQkJICAgICAgIE5VTEwsIE5VTEwsIE5VTEwpOwotCQlwcmludGsoS0VSTl9FUlIgIml1Y3ZfcGF0aF9jb25uZWN0IHJldHVybmVkIHdpdGggcmMgJWlcbiIsIHJjKTsKKyNpZmRlZiBDT05GSUdfUE1fREVCVUcKKwkJaWYgKHJjKQorCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkgICAgICAgIml1Y3ZfcGF0aF9jb25uZWN0IHJldHVybmVkIHdpdGggcmMgJWlcbiIsIHJjKTsKKyNlbmRpZgorCQljcGNtZCgiU0VUIFNNU0cgSVVDViIsIE5VTEwsIDAsIE5VTEwpOwogCX0KIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfYXV4LmMgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2F1eC5jCmluZGV4IDFiZTZiZjcuLjI4ODllNWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfYXV4LmMKKysrIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9hdXguYwpAQCAtODAsMjggKzgwLDM1IEBACiAKIHN0YXRpYyB2b2lkIF9faW5pdCB6ZmNwX2luaXRfZGV2aWNlX2NvbmZpZ3VyZShjaGFyICpidXNpZCwgdTY0IHd3cG4sIHU2NCBsdW4pCiB7CisJc3RydWN0IGNjd19kZXZpY2UgKmNjd2RldjsKIAlzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyOwogCXN0cnVjdCB6ZmNwX3BvcnQgKnBvcnQ7CiAJc3RydWN0IHpmY3BfdW5pdCAqdW5pdDsKIAotCW11dGV4X2xvY2soJnpmY3BfZGF0YS5jb25maWdfbXV0ZXgpOwotCXJlYWRfbG9ja19pcnEoJnpmY3BfZGF0YS5jb25maWdfbG9jayk7Ci0JYWRhcHRlciA9IHpmY3BfZ2V0X2FkYXB0ZXJfYnlfYnVzaWQoYnVzaWQpOwotCWlmIChhZGFwdGVyKQotCQl6ZmNwX2FkYXB0ZXJfZ2V0KGFkYXB0ZXIpOwotCXJlYWRfdW5sb2NrX2lycSgmemZjcF9kYXRhLmNvbmZpZ19sb2NrKTsKKwljY3dkZXYgPSBnZXRfY2N3ZGV2X2J5X2J1c2lkKCZ6ZmNwX2Njd19kcml2ZXIsIGJ1c2lkKTsKKwlpZiAoIWNjd2RldikKKwkJcmV0dXJuOwogCisJaWYgKGNjd19kZXZpY2Vfc2V0X29ubGluZShjY3dkZXYpKQorCQlnb3RvIG91dF9jY3dkZXY7CisKKwltdXRleF9sb2NrKCZ6ZmNwX2RhdGEuY29uZmlnX211dGV4KTsKKwlhZGFwdGVyID0gZGV2X2dldF9kcnZkYXRhKCZjY3dkZXYtPmRldik7CiAJaWYgKCFhZGFwdGVyKQotCQlnb3RvIG91dF9hZGFwdGVyOwotCXBvcnQgPSB6ZmNwX3BvcnRfZW5xdWV1ZShhZGFwdGVyLCB3d3BuLCAwLCAwKTsKLQlpZiAoSVNfRVJSKHBvcnQpKQorCQlnb3RvIG91dF91bmxvY2s7CisJemZjcF9hZGFwdGVyX2dldChhZGFwdGVyKTsKKworCXBvcnQgPSB6ZmNwX2dldF9wb3J0X2J5X3d3cG4oYWRhcHRlciwgd3dwbik7CisJaWYgKCFwb3J0KQogCQlnb3RvIG91dF9wb3J0OworCisJemZjcF9wb3J0X2dldChwb3J0KTsKIAl1bml0ID0gemZjcF91bml0X2VucXVldWUocG9ydCwgbHVuKTsKIAlpZiAoSVNfRVJSKHVuaXQpKQogCQlnb3RvIG91dF91bml0OwogCW11dGV4X3VubG9jaygmemZjcF9kYXRhLmNvbmZpZ19tdXRleCk7Ci0JY2N3X2RldmljZV9zZXRfb25saW5lKGFkYXB0ZXItPmNjd19kZXZpY2UpOwogCisJemZjcF9lcnBfdW5pdF9yZW9wZW4odW5pdCwgMCwgImF1aWRjXzEiLCBOVUxMKTsKIAl6ZmNwX2VycF93YWl0KGFkYXB0ZXIpOwogCWZsdXNoX3dvcmsoJnVuaXQtPnNjc2lfd29yayk7CiAKQEAgLTExMSwyMCArMTE4LDIzIEBACiAJemZjcF9wb3J0X3B1dChwb3J0KTsKIG91dF9wb3J0OgogCXpmY3BfYWRhcHRlcl9wdXQoYWRhcHRlcik7Ci1vdXRfYWRhcHRlcjoKK291dF91bmxvY2s6CiAJbXV0ZXhfdW5sb2NrKCZ6ZmNwX2RhdGEuY29uZmlnX211dGV4KTsKK291dF9jY3dkZXY6CisJcHV0X2RldmljZSgmY2N3ZGV2LT5kZXYpOwogCXJldHVybjsKIH0KIAogc3RhdGljIHZvaWQgX19pbml0IHpmY3BfaW5pdF9kZXZpY2Vfc2V0dXAoY2hhciAqZGV2c3RyKQogewogCWNoYXIgKnRva2VuOwotCWNoYXIgKnN0cjsKKwljaGFyICpzdHIsICpzdHJfc2F2ZWQ7CiAJY2hhciBidXNpZFtaRkNQX0JVU19JRF9TSVpFXTsKIAl1NjQgd3dwbiwgbHVuOwogCiAJLyogZHVwbGljYXRlIGRldnN0ciBhbmQga2VlcCB0aGUgb3JpZ2luYWwgZm9yIHN5c2ZzIHByZXNlbnRhdGlvbiovCi0Jc3RyID0ga21hbGxvYyhzdHJsZW4oZGV2c3RyKSArIDEsIEdGUF9LRVJORUwpOworCXN0cl9zYXZlZCA9IGttYWxsb2Moc3RybGVuKGRldnN0cikgKyAxLCBHRlBfS0VSTkVMKTsKKwlzdHIgPSBzdHJfc2F2ZWQ7CiAJaWYgKCFzdHIpCiAJCXJldHVybjsKIApAQCAtMTQzLDEyICsxNTMsMTIgQEAKIAlpZiAoIXRva2VuIHx8IHN0cmljdF9zdHJ0b3VsbCh0b2tlbiwgMCwgKHVuc2lnbmVkIGxvbmcgbG9uZyAqKSAmbHVuKSkKIAkJZ290byBlcnJfb3V0OwogCi0Ja2ZyZWUoc3RyKTsKKwlrZnJlZShzdHJfc2F2ZWQpOwogCXpmY3BfaW5pdF9kZXZpY2VfY29uZmlndXJlKGJ1c2lkLCB3d3BuLCBsdW4pOwogCXJldHVybjsKIAotIGVycl9vdXQ6Ci0Ja2ZyZWUoc3RyKTsKK2Vycl9vdXQ6CisJa2ZyZWUoc3RyX3NhdmVkKTsKIAlwcl9lcnIoIiVzIGlzIG5vdCBhIHZhbGlkIFNDU0kgZGV2aWNlXG4iLCBkZXZzdHIpOwogfQogCkBAIC01OTMsMTAgKzYwMyw4IEBACiAJaW50IHJldHZhbCA9IDA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWNhbmNlbF93b3JrX3N5bmMoJmFkYXB0ZXItPnNjYW5fd29yayk7CiAJY2FuY2VsX3dvcmtfc3luYygmYWRhcHRlci0+c3RhdF93b3JrKTsKIAl6ZmNwX2ZjX3drYV9wb3J0c19mb3JjZV9vZmZsaW5lKGFkYXB0ZXItPmdzKTsKLQl6ZmNwX2FkYXB0ZXJfc2NzaV91bnJlZ2lzdGVyKGFkYXB0ZXIpOwogCXN5c2ZzX3JlbW92ZV9ncm91cCgmYWRhcHRlci0+Y2N3X2RldmljZS0+ZGV2LmtvYmosCiAJCQkgICAmemZjcF9zeXNmc19hZGFwdGVyX2F0dHJzKTsKIAlkZXZfc2V0X2RydmRhdGEoJmFkYXB0ZXItPmNjd19kZXZpY2UtPmRldiwgTlVMTCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2Njdy5jIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9jY3cuYwppbmRleCAwYzkwZjhlLi5lMDgzMzk0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2Njdy5jCisrKyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfY2N3LmMKQEAgLTEwMiw2ICsxMDIsMTQgQEAKIAlhZGFwdGVyID0gZGV2X2dldF9kcnZkYXRhKCZjY3dfZGV2aWNlLT5kZXYpOwogCWlmICghYWRhcHRlcikKIAkJZ290byBvdXQ7CisJbXV0ZXhfdW5sb2NrKCZ6ZmNwX2RhdGEuY29uZmlnX211dGV4KTsKKworCWNhbmNlbF93b3JrX3N5bmMoJmFkYXB0ZXItPnNjYW5fd29yayk7CisKKwltdXRleF9sb2NrKCZ6ZmNwX2RhdGEuY29uZmlnX211dGV4KTsKKworCS8qIHRoaXMgYWxzbyByZW1vdmVzIHRoZSBzY3NpIGRldmljZXMsIHNvIGNhbGwgaXQgZmlyc3QgKi8KKwl6ZmNwX2FkYXB0ZXJfc2NzaV91bnJlZ2lzdGVyKGFkYXB0ZXIpOwogCiAJd3JpdGVfbG9ja19pcnEoJnpmY3BfZGF0YS5jb25maWdfbG9jayk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBvcnQsIHAsICZhZGFwdGVyLT5wb3J0X2xpc3RfaGVhZCwgbGlzdCkgewpAQCAtMTE3LDExICsxMjUsOCBAQAogCXdyaXRlX3VubG9ja19pcnEoJnpmY3BfZGF0YS5jb25maWdfbG9jayk7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocG9ydCwgcCwgJnBvcnRfcmVtb3ZlX2xoLCBsaXN0KSB7Ci0JCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh1bml0LCB1LCAmdW5pdF9yZW1vdmVfbGgsIGxpc3QpIHsKLQkJCWlmICh1bml0LT5kZXZpY2UpCi0JCQkJc2NzaV9yZW1vdmVfZGV2aWNlKHVuaXQtPmRldmljZSk7CisJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh1bml0LCB1LCAmdW5pdF9yZW1vdmVfbGgsIGxpc3QpCiAJCQl6ZmNwX3VuaXRfZGVxdWV1ZSh1bml0KTsKLQkJfQogCQl6ZmNwX3BvcnRfZGVxdWV1ZShwb3J0KTsKIAl9CiAJd2FpdF9ldmVudChhZGFwdGVyLT5yZW1vdmVfd3EsIGF0b21pY19yZWFkKCZhZGFwdGVyLT5yZWZjb3VudCkgPT0gMCk7CkBAIC0xOTIsMTMgKzE5Nyw5IEBACiAKIAltdXRleF9sb2NrKCZ6ZmNwX2RhdGEuY29uZmlnX211dGV4KTsKIAlhZGFwdGVyID0gZGV2X2dldF9kcnZkYXRhKCZjY3dfZGV2aWNlLT5kZXYpOwotCWlmICghYWRhcHRlcikKLQkJZ290byBvdXQ7Ci0KIAl6ZmNwX2VycF9hZGFwdGVyX3NodXRkb3duKGFkYXB0ZXIsIDAsICJjY3NvZmYxIiwgTlVMTCk7CiAJemZjcF9lcnBfd2FpdChhZGFwdGVyKTsKIAltdXRleF91bmxvY2soJnpmY3BfZGF0YS5jb25maWdfbXV0ZXgpOwotb3V0OgogCXJldHVybiAwOwogfQogCkBAIC0yNTMsMTMgKzI1NCwxNyBAQAogCiAJbXV0ZXhfbG9jaygmemZjcF9kYXRhLmNvbmZpZ19tdXRleCk7CiAJYWRhcHRlciA9IGRldl9nZXRfZHJ2ZGF0YSgmY2Rldi0+ZGV2KTsKKwlpZiAoIWFkYXB0ZXIpCisJCWdvdG8gb3V0OworCiAJemZjcF9lcnBfYWRhcHRlcl9zaHV0ZG93bihhZGFwdGVyLCAwLCAiY2NzaHV0MSIsIE5VTEwpOwogCXpmY3BfZXJwX3dhaXQoYWRhcHRlcik7CiAJemZjcF9lcnBfdGhyZWFkX2tpbGwoYWRhcHRlcik7CitvdXQ6CiAJbXV0ZXhfdW5sb2NrKCZ6ZmNwX2RhdGEuY29uZmlnX211dGV4KTsKIH0KIAotc3RhdGljIHN0cnVjdCBjY3dfZHJpdmVyIHpmY3BfY2N3X2RyaXZlciA9IHsKK3N0cnVjdCBjY3dfZHJpdmVyIHpmY3BfY2N3X2RyaXZlciA9IHsKIAkub3duZXIgICAgICAgPSBUSElTX01PRFVMRSwKIAkubmFtZSAgICAgICAgPSAiemZjcCIsCiAJLmlkcyAgICAgICAgID0gemZjcF9jY3dfZGV2aWNlX2lkLApAQCAtMjg0LDIwICsyODksMyBAQAogewogCXJldHVybiBjY3dfZHJpdmVyX3JlZ2lzdGVyKCZ6ZmNwX2Njd19kcml2ZXIpOwogfQotCi0vKioKLSAqIHpmY3BfZ2V0X2FkYXB0ZXJfYnlfYnVzaWQgLSBmaW5kIHpmY3BfYWRhcHRlciBzdHJ1Y3QKLSAqIEBidXNpZDogYnVzIGlkIHN0cmluZyBvZiB6ZmNwIGFkYXB0ZXIgdG8gZmluZAotICovCi1zdHJ1Y3QgemZjcF9hZGFwdGVyICp6ZmNwX2dldF9hZGFwdGVyX2J5X2J1c2lkKGNoYXIgKmJ1c2lkKQotewotCXN0cnVjdCBjY3dfZGV2aWNlICpjY3dfZGV2aWNlOwotCXN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIgPSBOVUxMOwotCi0JY2N3X2RldmljZSA9IGdldF9jY3dkZXZfYnlfYnVzaWQoJnpmY3BfY2N3X2RyaXZlciwgYnVzaWQpOwotCWlmIChjY3dfZGV2aWNlKSB7Ci0JCWFkYXB0ZXIgPSBkZXZfZ2V0X2RydmRhdGEoJmNjd19kZXZpY2UtPmRldik7Ci0JCXB1dF9kZXZpY2UoJmNjd19kZXZpY2UtPmRldik7Ci0JfQotCXJldHVybiBhZGFwdGVyOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9jZmRjLmMgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2NmZGMuYwppbmRleCA4MzA1Yzg3Li5lZjY4MWRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2NmZGMuYworKysgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2NmZGMuYwpAQCAtODYsOCArODYsMjMgQEAKIHN0YXRpYyBzdHJ1Y3QgemZjcF9hZGFwdGVyICp6ZmNwX2NmZGNfZ2V0X2FkYXB0ZXIodTMyIGRldm5vKQogewogCWNoYXIgYnVzaWRbOV07CisJc3RydWN0IGNjd19kZXZpY2UgKmNjd2RldjsKKwlzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyID0gTlVMTDsKKwogCXNucHJpbnRmKGJ1c2lkLCBzaXplb2YoYnVzaWQpLCAiMC4wLiUwNHgiLCBkZXZubyk7Ci0JcmV0dXJuIHpmY3BfZ2V0X2FkYXB0ZXJfYnlfYnVzaWQoYnVzaWQpOworCWNjd2RldiA9IGdldF9jY3dkZXZfYnlfYnVzaWQoJnpmY3BfY2N3X2RyaXZlciwgYnVzaWQpOworCWlmICghY2N3ZGV2KQorCQlnb3RvIG91dDsKKworCWFkYXB0ZXIgPSBkZXZfZ2V0X2RydmRhdGEoJmNjd2Rldi0+ZGV2KTsKKwlpZiAoIWFkYXB0ZXIpCisJCWdvdG8gb3V0X3B1dDsKKworCXpmY3BfYWRhcHRlcl9nZXQoYWRhcHRlcik7CitvdXRfcHV0OgorCXB1dF9kZXZpY2UoJmNjd2Rldi0+ZGV2KTsKK291dDoKKwlyZXR1cm4gYWRhcHRlcjsKIH0KIAogc3RhdGljIGludCB6ZmNwX2NmZGNfc2V0X2ZzZihzdHJ1Y3QgemZjcF9mc2ZfY2ZkYyAqZnNmX2NmZGMsIGludCBjb21tYW5kKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9lcnAuYyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZXJwLmMKaW5kZXggNzNkMzY2Yi4uZjczZTIxOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9lcnAuYworKysgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2VycC5jCkBAIC04NTgsMTAgKzg1OCw3IEBACiAJCWlmIChmY19ob3N0X3BvcnRfdHlwZShhZGFwdGVyLT5zY3NpX2hvc3QpID09IEZDX1BPUlRUWVBFX1BUUCkKIAkJCXJldHVybiB6ZmNwX2VycF9vcGVuX3B0cF9wb3J0KGFjdCk7CiAJCWlmICghcG9ydC0+ZF9pZCkgewotCQkJemZjcF9wb3J0X2dldChwb3J0KTsKLQkJCWlmICghcXVldWVfd29yayhhZGFwdGVyLT53b3JrX3F1ZXVlLAotCQkJCQkmcG9ydC0+Z2lkX3BuX3dvcmspKQotCQkJCXpmY3BfcG9ydF9wdXQocG9ydCk7CisJCQl6ZmNwX2ZjX3RyaWdnZXJfZGlkX2xvb2t1cChwb3J0KTsKIAkJCXJldHVybiBaRkNQX0VSUF9FWElUOwogCQl9CiAJCXJldHVybiB6ZmNwX2VycF9wb3J0X3N0cmF0ZWd5X29wZW5fcG9ydChhY3QpOwpAQCAtODY5LDEyICs4NjYsMTEgQEAKIAljYXNlIFpGQ1BfRVJQX1NURVBfUE9SVF9PUEVOSU5HOgogCQkvKiBEX0lEIG1pZ2h0IGhhdmUgY2hhbmdlZCBkdXJpbmcgb3BlbiAqLwogCQlpZiAocF9zdGF0dXMgJiBaRkNQX1NUQVRVU19DT01NT05fT1BFTikgewotCQkJaWYgKHBvcnQtPmRfaWQpCi0JCQkJcmV0dXJuIFpGQ1BfRVJQX1NVQ0NFRURFRDsKLQkJCWVsc2UgewotCQkJCWFjdC0+c3RlcCA9IFpGQ1BfRVJQX1NURVBfUE9SVF9DTE9TSU5HOwotCQkJCXJldHVybiBaRkNQX0VSUF9DT05USU5VRVM7CisJCQlpZiAoIXBvcnQtPmRfaWQpIHsKKwkJCQl6ZmNwX2ZjX3RyaWdnZXJfZGlkX2xvb2t1cChwb3J0KTsKKwkJCQlyZXR1cm4gWkZDUF9FUlBfRVhJVDsKIAkJCX0KKwkJCXJldHVybiBaRkNQX0VSUF9TVUNDRUVERUQ7CiAJCX0KIAkJaWYgKHBvcnQtPmRfaWQgJiYgIShwX3N0YXR1cyAmIFpGQ1BfU1RBVFVTX0NPTU1PTl9OT0VTQykpIHsKIAkJCXBvcnQtPmRfaWQgPSAwOwpAQCAtODg5LDE5ICs4ODUsMjEgQEAKIHN0YXRpYyBpbnQgemZjcF9lcnBfcG9ydF9zdHJhdGVneShzdHJ1Y3QgemZjcF9lcnBfYWN0aW9uICplcnBfYWN0aW9uKQogewogCXN0cnVjdCB6ZmNwX3BvcnQgKnBvcnQgPSBlcnBfYWN0aW9uLT5wb3J0OworCWludCBwX3N0YXR1cyA9IGF0b21pY19yZWFkKCZwb3J0LT5zdGF0dXMpOwogCi0JaWYgKGF0b21pY19yZWFkKCZwb3J0LT5zdGF0dXMpICYgWkZDUF9TVEFUVVNfQ09NTU9OX05PRVNDKQorCWlmICgocF9zdGF0dXMgJiBaRkNQX1NUQVRVU19DT01NT05fTk9FU0MpICYmCisJICAgICEocF9zdGF0dXMgJiBaRkNQX1NUQVRVU19DT01NT05fT1BFTikpCiAJCWdvdG8gY2xvc2VfaW5pdF9kb25lOwogCiAJc3dpdGNoIChlcnBfYWN0aW9uLT5zdGVwKSB7CiAJY2FzZSBaRkNQX0VSUF9TVEVQX1VOSU5JVElBTElaRUQ6CiAJCXpmY3BfZXJwX3BvcnRfc3RyYXRlZ3lfY2xlYXJzdGF0aShwb3J0KTsKLQkJaWYgKGF0b21pY19yZWFkKCZwb3J0LT5zdGF0dXMpICYgWkZDUF9TVEFUVVNfQ09NTU9OX09QRU4pCisJCWlmIChwX3N0YXR1cyAmIFpGQ1BfU1RBVFVTX0NPTU1PTl9PUEVOKQogCQkJcmV0dXJuIHpmY3BfZXJwX3BvcnRfc3RyYXRlZ3lfY2xvc2UoZXJwX2FjdGlvbik7CiAJCWJyZWFrOwogCiAJY2FzZSBaRkNQX0VSUF9TVEVQX1BPUlRfQ0xPU0lORzoKLQkJaWYgKGF0b21pY19yZWFkKCZwb3J0LT5zdGF0dXMpICYgWkZDUF9TVEFUVVNfQ09NTU9OX09QRU4pCisJCWlmIChwX3N0YXR1cyAmIFpGQ1BfU1RBVFVTX0NPTU1PTl9PUEVOKQogCQkJcmV0dXJuIFpGQ1BfRVJQX0ZBSUxFRDsKIAkJYnJlYWs7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9leHQuaCBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZXh0LmgKaW5kZXggMzY5MzViYy4uYjNmMjhkZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9leHQuaAorKysgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2V4dC5oCkBAIC0yOCw3ICsyOCw3IEBACiAvKiB6ZmNwX2Njdy5jICovCiBleHRlcm4gaW50IHpmY3BfY2N3X3JlZ2lzdGVyKHZvaWQpOwogZXh0ZXJuIGludCB6ZmNwX2Njd19wcml2X3NjaChzdHJ1Y3QgemZjcF9hZGFwdGVyICopOwotZXh0ZXJuIHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKnpmY3BfZ2V0X2FkYXB0ZXJfYnlfYnVzaWQoY2hhciAqKTsKK2V4dGVybiBzdHJ1Y3QgY2N3X2RyaXZlciB6ZmNwX2Njd19kcml2ZXI7CiAKIC8qIHpmY3BfY2ZkYy5jICovCiBleHRlcm4gc3RydWN0IG1pc2NkZXZpY2UgemZjcF9jZmRjX21pc2M7CkBAIC05Niw2ICs5Niw3IEBACiBleHRlcm4gdm9pZCBfemZjcF9mY19zY2FuX3BvcnRzX2xhdGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqKTsKIGV4dGVybiB2b2lkIHpmY3BfZmNfaW5jb21pbmdfZWxzKHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKik7CiBleHRlcm4gdm9pZCB6ZmNwX2ZjX3BvcnRfZGlkX2xvb2t1cChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKik7CitleHRlcm4gdm9pZCB6ZmNwX2ZjX3RyaWdnZXJfZGlkX2xvb2t1cChzdHJ1Y3QgemZjcF9wb3J0ICopOwogZXh0ZXJuIHZvaWQgemZjcF9mY19wbG9naV9ldmFsdWF0ZShzdHJ1Y3QgemZjcF9wb3J0ICosIHN0cnVjdCBmc2ZfcGxvZ2kgKik7CiBleHRlcm4gdm9pZCB6ZmNwX2ZjX3Rlc3RfbGluayhzdHJ1Y3QgemZjcF9wb3J0ICopOwogZXh0ZXJuIHZvaWQgemZjcF9mY19saW5rX3Rlc3Rfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2ZjLmMgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2ZjLmMKaW5kZXggNzIyZjIyZC4uZGYyM2JjZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9mYy5jCisrKyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZmMuYwpAQCAtMzYxLDYgKzM2MSwxNyBAQAogfQogCiAvKioKKyAqIHpmY3BfZmNfdHJpZ2dlcl9kaWRfbG9va3VwIC0gdHJpZ2dlciB0aGUgZF9pZCBsb29rdXAgdXNpbmcgYSBHSURfUE4gcmVxdWVzdAorICogQHBvcnQ6IFRoZSB6ZmNwX3BvcnQgdG8gbG9va3VwIHRoZSBkX2lkIGZvci4KKyAqLwordm9pZCB6ZmNwX2ZjX3RyaWdnZXJfZGlkX2xvb2t1cChzdHJ1Y3QgemZjcF9wb3J0ICpwb3J0KQoreworCXpmY3BfcG9ydF9nZXQocG9ydCk7CisJaWYgKCFxdWV1ZV93b3JrKHBvcnQtPmFkYXB0ZXItPndvcmtfcXVldWUsICZwb3J0LT5naWRfcG5fd29yaykpCisJCXpmY3BfcG9ydF9wdXQocG9ydCk7Cit9CisKKy8qKgogICogemZjcF9mY19wbG9naV9ldmFsdWF0ZSAtIGV2YWx1YXRlIFBMT0dJIHBsYXlsb2FkCiAgKiBAcG9ydDogemZjcF9wb3J0IHN0cnVjdHVyZQogICogQHBsb2dpOiBwbG9naSBwYXlsb2FkCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2ZzZi5jIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9mc2YuYwppbmRleCBmMDljODYzLi40ZTQxYmFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2ZzZi5jCisrKyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZnNmLmMKQEAgLTEwNTgsMTQgKzEwNTgsMjggQEAKIAlieXRlcyA9IHpmY3BfcWRpb19zYmFsc19mcm9tX3NnKGFkYXB0ZXItPnFkaW8sICZyZXEtPnF1ZXVlX3JlcSwKIAkJCQkJU0JBTF9GTEFHUzBfVFlQRV9XUklURV9SRUFELAogCQkJCQlzZ19yZXNwLCBtYXhfc2JhbHMpOworCXJlcS0+cXRjYi0+Ym90dG9tLnN1cHBvcnQucmVzcF9idWZfbGVuZ3RoID0gYnl0ZXM7CiAJaWYgKGJ5dGVzIDw9IDApCiAJCXJldHVybiAtRUlPOwogCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgemZjcF9mc2Zfc2V0dXBfY3RfZWxzKHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKnJlcSwKKwkJCQkgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ19yZXEsCisJCQkJIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dfcmVzcCwKKwkJCQkgaW50IG1heF9zYmFscykKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gemZjcF9mc2Zfc2V0dXBfY3RfZWxzX3NiYWxzKHJlcSwgc2dfcmVxLCBzZ19yZXNwLCBtYXhfc2JhbHMpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKIAkvKiBjb21tb24gc2V0dGluZ3MgZm9yIGN0L2dzIGFuZCBlbHMgcmVxdWVzdHMgKi8KLQlyZXEtPnF0Y2ItPmJvdHRvbS5zdXBwb3J0LnJlc3BfYnVmX2xlbmd0aCA9IGJ5dGVzOwogCXJlcS0+cXRjYi0+Ym90dG9tLnN1cHBvcnQuc2VydmljZV9jbGFzcyA9IEZTRl9DTEFTU18zOwogCXJlcS0+cXRjYi0+Ym90dG9tLnN1cHBvcnQudGltZW91dCA9IDIgKiBSX0FfVE9WOwotCXpmY3BfZnNmX3N0YXJ0X3RpbWVyKHJlcSwgMiAqIFJfQV9UT1YgKyAxMCk7CisJemZjcF9mc2Zfc3RhcnRfdGltZXIocmVxLCAoMiAqIFJfQV9UT1YgKyAxMCkgKiBIWik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTEwOTQsOCArMTEwOCw4IEBACiAJfQogCiAJcmVxLT5zdGF0dXMgfD0gWkZDUF9TVEFUVVNfRlNGUkVRX0NMRUFOVVA7Ci0JcmV0ID0gemZjcF9mc2Zfc2V0dXBfY3RfZWxzX3NiYWxzKHJlcSwgY3QtPnJlcSwgY3QtPnJlc3AsCi0JCQkJCSAgRlNGX01BWF9TQkFMU19QRVJfUkVRKTsKKwlyZXQgPSB6ZmNwX2ZzZl9zZXR1cF9jdF9lbHMocmVxLCBjdC0+cmVxLCBjdC0+cmVzcCwKKwkJCQkgICAgRlNGX01BWF9TQkFMU19QRVJfUkVRKTsKIAlpZiAocmV0KQogCQlnb3RvIGZhaWxlZF9zZW5kOwogCkBAIC0xMTkyLDcgKzEyMDYsNyBAQAogCX0KIAogCXJlcS0+c3RhdHVzIHw9IFpGQ1BfU1RBVFVTX0ZTRlJFUV9DTEVBTlVQOwotCXJldCA9IHpmY3BfZnNmX3NldHVwX2N0X2Vsc19zYmFscyhyZXEsIGVscy0+cmVxLCBlbHMtPnJlc3AsIDIpOworCXJldCA9IHpmY3BfZnNmX3NldHVwX2N0X2VscyhyZXEsIGVscy0+cmVxLCBlbHMtPnJlc3AsIDIpOwogCiAJaWYgKHJldCkKIAkJZ290byBmYWlsZWRfc2VuZDsKQEAgLTE0NjEsOSArMTQ3NSwxNiBAQAogCQlwbG9naSA9IChzdHJ1Y3QgZnNmX3Bsb2dpICopIHJlcS0+cXRjYi0+Ym90dG9tLnN1cHBvcnQuZWxzOwogCQlpZiAocmVxLT5xdGNiLT5ib3R0b20uc3VwcG9ydC5lbHMxX2xlbmd0aCA+PQogCQkgICAgRlNGX1BMT0dJX01JTl9MRU4pIHsKLQkJCWlmIChwbG9naS0+c2Vydl9wYXJhbS53d3BuICE9IHBvcnQtPnd3cG4pCisJCQlpZiAocGxvZ2ktPnNlcnZfcGFyYW0ud3dwbiAhPSBwb3J0LT53d3BuKSB7CiAJCQkJcG9ydC0+ZF9pZCA9IDA7Ci0JCQllbHNlIHsKKwkJCQlkZXZfd2FybigmcG9ydC0+YWRhcHRlci0+Y2N3X2RldmljZS0+ZGV2LAorCQkJCQkgIkEgcG9ydCBvcGVuZWQgd2l0aCBXV1BOIDB4JTAxNkx4ICIKKwkJCQkJICJyZXR1cm5lZCBkYXRhIHRoYXQgaWRlbnRpZmllcyBpdCBhcyAiCisJCQkJCSAiV1dQTiAweCUwMTZMeFxuIiwKKwkJCQkJICh1bnNpZ25lZCBsb25nIGxvbmcpIHBvcnQtPnd3cG4sCisJCQkJCSAodW5zaWduZWQgbG9uZyBsb25nKQorCQkJCQkgIHBsb2dpLT5zZXJ2X3BhcmFtLnd3cG4pOworCQkJfSBlbHNlIHsKIAkJCQlwb3J0LT53d25uID0gcGxvZ2ktPnNlcnZfcGFyYW0ud3dubjsKIAkJCQl6ZmNwX2ZjX3Bsb2dpX2V2YWx1YXRlKHBvcnQsIHBsb2dpKTsKIAkJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3Bfc3lzZnMuYyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3Bfc3lzZnMuYwppbmRleCAwNzlhOGNmLi5kMzEwMDA4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX3N5c2ZzLmMKKysrIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9zeXNmcy5jCkBAIC0yMjQsNiArMjI0LDcgQEAKIAogCXpmY3BfZXJwX3VuaXRfcmVvcGVuKHVuaXQsIDAsICJzeXVhc18xIiwgTlVMTCk7CiAJemZjcF9lcnBfd2FpdCh1bml0LT5wb3J0LT5hZGFwdGVyKTsKKwlmbHVzaF93b3JrKCZ1bml0LT5zY3NpX3dvcmspOwogCXpmY3BfdW5pdF9wdXQodW5pdCk7CiBvdXQ6CiAJbXV0ZXhfdW5sb2NrKCZ6ZmNwX2RhdGEuY29uZmlnX211dGV4KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9LY29uZmlnIGIvZHJpdmVycy9zY3NpL0tjb25maWcKaW5kZXggODJiYjNiMi4uZTExY2NhNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL0tjb25maWcKKysrIGIvZHJpdmVycy9zY3NpL0tjb25maWcKQEAgLTM2Niw2ICszNjYsNyBAQAogCiBzb3VyY2UgImRyaXZlcnMvc2NzaS9jeGdiM2kvS2NvbmZpZyIKIHNvdXJjZSAiZHJpdmVycy9zY3NpL2JueDJpL0tjb25maWciCitzb3VyY2UgImRyaXZlcnMvc2NzaS9iZTJpc2NzaS9LY29uZmlnIgogCiBjb25maWcgU0dJV0Q5M19TQ1NJCiAJdHJpc3RhdGUgIlNHSSBXRDkzQzkzIFNDU0kgRHJpdmVyIgpAQCAtMTgyNyw2ICsxODI4LDE2IEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBsaWJzcnAuCiAKK2NvbmZpZyBTQ1NJX0JGQV9GQworCXRyaXN0YXRlICJCcm9jYWRlIEJGQSBGaWJyZSBDaGFubmVsIFN1cHBvcnQiCisJZGVwZW5kcyBvbiBQQ0kgJiYgU0NTSQorCXNlbGVjdCBTQ1NJX0ZDX0FUVFJTCisJaGVscAorCSAgVGhpcyBiZmEgZHJpdmVyIHN1cHBvcnRzIGFsbCBCcm9jYWRlIFBDSWUgRkMvRkNPRSBob3N0IGFkYXB0ZXJzLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBUaGUgbW9kdWxlIHdpbGwKKwkgIGJlIGNhbGxlZCBiZmEuCisKIGVuZGlmICMgU0NTSV9MT1dMRVZFTAogCiBzb3VyY2UgImRyaXZlcnMvc2NzaS9wY21jaWEvS2NvbmZpZyIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9NYWtlZmlsZSBiL2RyaXZlcnMvc2NzaS9NYWtlZmlsZQppbmRleCA2MWE5NGFmLi4zYWQ2MWRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9zY3NpL01ha2VmaWxlCkBAIC04Niw2ICs4Niw3IEBACiBvYmotJChDT05GSUdfU0NTSV9RTEFfRkMpCSs9IHFsYTJ4eHgvCiBvYmotJChDT05GSUdfU0NTSV9RTEFfSVNDU0kpCSs9IHFsYTR4eHgvCiBvYmotJChDT05GSUdfU0NTSV9MUEZDKQkJKz0gbHBmYy8KK29iai0kKENPTkZJR19TQ1NJX0JGQV9GQykJKz0gYmZhLwogb2JqLSQoQ09ORklHX1NDU0lfUEFTMTYpCSs9IHBhczE2Lm8KIG9iai0kKENPTkZJR19TQ1NJX1QxMjgpCQkrPSB0MTI4Lm8KIG9iai0kKENPTkZJR19TQ1NJX0RNWDMxOTFEKQkrPSBkbXgzMTkxZC5vCkBAIC0xMzAsNiArMTMxLDcgQEAKIG9iai0kKENPTkZJR19QUzNfUk9NKQkJKz0gcHMzcm9tLm8KIG9iai0kKENPTkZJR19TQ1NJX0NYR0IzX0lTQ1NJKQkrPSBsaWJpc2NzaS5vIGxpYmlzY3NpX3RjcC5vIGN4Z2IzaS8KIG9iai0kKENPTkZJR19TQ1NJX0JOWDJfSVNDU0kpCSs9IGxpYmlzY3NpLm8gYm54MmkvCitvYmotJChDT05GSUdfQkUySVNDU0kpCQkrPSBsaWJpc2NzaS5vIGJlMmlzY3NpLwogb2JqLSQoQ09ORklHX1NDU0lfUE1DUkFJRCkJKz0gcG1jcmFpZC5vCiAKIG9iai0kKENPTkZJR19BUk0pCQkrPSBhcm0vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvS2NvbmZpZyBiL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5NTJmY2QKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvS2NvbmZpZwpAQCAtMCwwICsxLDggQEAKK2NvbmZpZyBCRTJJU0NTSQorCXRyaXN0YXRlICJTZXJ2ZXJFbmdpbmVzJyAxMEdicHMgaVNDU0kgLSBCbGFkZUVuZ2luZSAyIgorCWRlcGVuZHMgb24gUENJICYmIFNDU0kKKwlzZWxlY3QgU0NTSV9JU0NTSV9BVFRSUworCisJaGVscAorCVRoaXMgZHJpdmVyIGltcGxlbWVudHMgdGhlIGlTQ1NJIGZ1bmN0aW9uYWxpdHkgZm9yIFNlcnZlckVuZ2luZXMnCisJMTBHYnBzIFN0b3JhZ2UgYWRhcHRlciAtIEJsYWRlRW5naW5lIDIuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvTWFrZWZpbGUgYi9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzExZjQ0MwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9NYWtlZmlsZQpAQCAtMCwwICsxLDggQEAKKyMKKyMgTWFrZWZpbGUgdG8gYnVpbGQgdGhlIGlTQ1NJIGRyaXZlciBmb3IgU2VydmVyRW5naW5lJ3MgQmxhZGVFbmdpbmUuCisjCisjCisKK29iai0kKENPTkZJR19CRTJJU0NTSSkgKz0gYmUyaXNjc2kubworCitiZTJpc2NzaS15IDo9IGJlX2lzY3NpLm8gYmVfbWFpbi5vIGJlX21nbXQubyBiZV9jbWRzLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZS5oIGIvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjM2MDIwZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZS5oCkBAIC0wLDAgKzEsMTgzIEBACisvKioKKyAqIENvcHlyaWdodCAoQykgMjAwNSAtIDIwMDkgU2VydmVyRW5naW5lcworICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgVGhlIGZ1bGwgR05VIEdlbmVyYWwKKyAqIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluIHRoZSBmaWxlIGNhbGxlZCBDT1BZSU5HLgorICoKKyAqIENvbnRhY3QgSW5mb3JtYXRpb246CisgKiBsaW51eC1kcml2ZXJzQHNlcnZlcmVuZ2luZXMuY29tCisgKgorICogU2VydmVyRW5naW5lcworICogMjA5IE4uIEZhaXIgT2FrcyBBdmUKKyAqIFN1bm55dmFsZSwgQ0EgOTQwODUKKyAqLworCisjaWZuZGVmIEJFSVNDU0lfSAorI2RlZmluZSBCRUlTQ1NJX0gKKworI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX3ZsYW4uaD4KKworI2RlZmluZSBGV19WRVJfTEVOIDMyCisKK3N0cnVjdCBiZV9kbWFfbWVtIHsKKwl2b2lkICp2YTsKKwlkbWFfYWRkcl90IGRtYTsKKwl1MzIgc2l6ZTsKK307CisKK3N0cnVjdCBiZV9xdWV1ZV9pbmZvIHsKKwlzdHJ1Y3QgYmVfZG1hX21lbSBkbWFfbWVtOworCXUxNiBsZW47CisJdTE2IGVudHJ5X3NpemU7CQkvKiBTaXplIG9mIGFuIGVsZW1lbnQgaW4gdGhlIHF1ZXVlICovCisJdTE2IGlkOworCXUxNiB0YWlsLCBoZWFkOworCWJvb2wgY3JlYXRlZDsKKwlhdG9taWNfdCB1c2VkOwkJLyogTnVtYmVyIG9mIHZhbGlkIGVsZW1lbnRzIGluIHRoZSBxdWV1ZSAqLworfTsKKworc3RhdGljIGlubGluZSB1MzIgTU9EVUxPKHUxNiB2YWwsIHUxNiBsaW1pdCkKK3sKKwlXQVJOX09OKGxpbWl0ICYgKGxpbWl0IC0gMSkpOworCXJldHVybiB2YWwgJiAobGltaXQgLSAxKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGluZGV4X2luYyh1MTYgKmluZGV4LCB1MTYgbGltaXQpCit7CisJKmluZGV4ID0gTU9EVUxPKCgqaW5kZXggKyAxKSwgbGltaXQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgKnF1ZXVlX2hlYWRfbm9kZShzdHJ1Y3QgYmVfcXVldWVfaW5mbyAqcSkKK3sKKwlyZXR1cm4gcS0+ZG1hX21lbS52YSArIHEtPmhlYWQgKiBxLT5lbnRyeV9zaXplOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgKnF1ZXVlX3RhaWxfbm9kZShzdHJ1Y3QgYmVfcXVldWVfaW5mbyAqcSkKK3sKKwlyZXR1cm4gcS0+ZG1hX21lbS52YSArIHEtPnRhaWwgKiBxLT5lbnRyeV9zaXplOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcXVldWVfaGVhZF9pbmMoc3RydWN0IGJlX3F1ZXVlX2luZm8gKnEpCit7CisJaW5kZXhfaW5jKCZxLT5oZWFkLCBxLT5sZW4pOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcXVldWVfdGFpbF9pbmMoc3RydWN0IGJlX3F1ZXVlX2luZm8gKnEpCit7CisJaW5kZXhfaW5jKCZxLT50YWlsLCBxLT5sZW4pOworfQorCisvKklTQ1NJICovCisKK3N0cnVjdCBiZV9lcV9vYmogeworCXN0cnVjdCBiZV9xdWV1ZV9pbmZvIHE7CisJY2hhciBkZXNjWzMyXTsKKworCS8qIEFkYXB0aXZlIGludGVycnVwdCBjb2FsZXNjaW5nIChBSUMpIGluZm8gKi8KKwlib29sIGVuYWJsZV9haWM7CisJdTE2IG1pbl9lcWQ7CQkvKiBpbiB1c2VjcyAqLworCXUxNiBtYXhfZXFkOwkJLyogaW4gdXNlY3MgKi8KKwl1MTYgY3VyX2VxZDsJCS8qIGluIHVzZWNzICovCit9OworCitzdHJ1Y3QgYmVfbWNjX29iaiB7CisJc3RydWN0IGJlX3F1ZXVlX2luZm8gKnE7CisJc3RydWN0IGJlX3F1ZXVlX2luZm8gKmNxOworfTsKKworc3RydWN0IGJlX2N0cmxfaW5mbyB7CisJdTggX19pb21lbSAqY3NyOworCXU4IF9faW9tZW0gKmRiOwkJLyogRG9vciBCZWxsICovCisJdTggX19pb21lbSAqcGNpY2ZnOwkvKiBQQ0kgY29uZmlnIHNwYWNlICovCisJc3RydWN0IHBjaV9kZXYgKnBkZXY7CisKKwkvKiBNYm94IHVzZWQgZm9yIGNtZCByZXF1ZXN0L3Jlc3BvbnNlICovCisJc3BpbmxvY2tfdCBtYm94X2xvY2s7CS8qIEZvciBzZXJpYWxpemluZyBtYm94IGNtZHMgdG8gQkUgY2FyZCAqLworCXN0cnVjdCBiZV9kbWFfbWVtIG1ib3hfbWVtOworCS8qIE1ib3ggbWVtIGlzIGFkanVzdGVkIHRvIGFsaWduIHRvIDE2IGJ5dGVzLiBUaGUgYWxsb2NhdGVkIGFkZHIKKwkgKiBpcyBzdG9yZWQgZm9yIGZyZWVpbmcgcHVycG9zZSAqLworCXN0cnVjdCBiZV9kbWFfbWVtIG1ib3hfbWVtX2FsbG9jZWQ7CisKKwkvKiBNQ0MgUmluZ3MgKi8KKwlzdHJ1Y3QgYmVfbWNjX29iaiBtY2Nfb2JqOworCXNwaW5sb2NrX3QgbWNjX2xvY2s7CS8qIEZvciBzZXJpYWxpemluZyBtY2MgY21kcyB0byBCRSBjYXJkICovCisJc3BpbmxvY2tfdCBtY2NfY3FfbG9jazsKKworCS8qIE1DQyBBc3luYyBjYWxsYmFjayAqLworCXZvaWQgKCphc3luY19jYikgKHZvaWQgKmFkYXB0ZXIsIGJvb2wgbGlua191cCk7CisJdm9pZCAqYWRhcHRlcl9jdHh0OworfTsKKworI2luY2x1ZGUgImJlX2NtZHMuaCIKKworI2RlZmluZSBQQUdFX1NISUZUXzRLIDEyCisjZGVmaW5lIFBBR0VfU0laRV80SyAoMSA8PCBQQUdFX1NISUZUXzRLKQorCisvKiBSZXR1cm5zIG51bWJlciBvZiBwYWdlcyBzcGFubmVkIGJ5IHRoZSBkYXRhIHN0YXJ0aW5nIGF0IHRoZSBnaXZlbiBhZGRyICovCisjZGVmaW5lIFBBR0VTXzRLX1NQQU5ORUQoX2FkZHJlc3MsIHNpemUpIAkJCQlcCisJCSgodTMyKSgoKChzaXplX3QpKF9hZGRyZXNzKSAmIChQQUdFX1NJWkVfNEsgLSAxKSkgKyAJXAorCQkJKHNpemUpICsgKFBBR0VfU0laRV80SyAtIDEpKSA+PiBQQUdFX1NISUZUXzRLKSkKKworLyogQnl0ZSBvZmZzZXQgaW50byB0aGUgcGFnZSBjb3JyZXNwb25kaW5nIHRvIGdpdmVuIGFkZHJlc3MgKi8KKyNkZWZpbmUgT0ZGU0VUX0lOX1BBR0UoYWRkcikJCQkJCQlcCisJCSgoc2l6ZV90KShhZGRyKSAmIChQQUdFX1NJWkVfNEstMSkpCisKKy8qIFJldHVybnMgYml0IG9mZnNldCB3aXRoaW4gYSBEV09SRCBvZiBhIGJpdGZpZWxkICovCisjZGVmaW5lIEFNQVBfQklUX09GRlNFVChfc3RydWN0LCBmaWVsZCkgIAkJCQlcCisJCSgoKHNpemVfdCkmKCgoX3N0cnVjdCAqKTApLT5maWVsZCkpJTMyKQorCisvKiBSZXR1cm5zIHRoZSBiaXQgbWFzayBvZiB0aGUgZmllbGQgdGhhdCBpcyBOT1Qgc2hpZnRlZCBpbnRvIGxvY2F0aW9uLiAqLworc3RhdGljIGlubGluZSB1MzIgYW1hcF9tYXNrKHUzMiBiaXRzaXplKQoreworCXJldHVybiAoYml0c2l6ZSA9PSAzMiA/IDB4RkZGRkZGRkYgOiAoMSA8PCBiaXRzaXplKSAtIDEpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYW1hcF9zZXQodm9pZCAqcHRyLCB1MzIgZHdfb2Zmc2V0LCB1MzIgbWFzaywKKwkJCQkJdTMyIG9mZnNldCwgdTMyIHZhbHVlKQoreworCXUzMiAqZHcgPSAodTMyICopIHB0ciArIGR3X29mZnNldDsKKwkqZHcgJj0gfihtYXNrIDw8IG9mZnNldCk7CisJKmR3IHw9IChtYXNrICYgdmFsdWUpIDw8IG9mZnNldDsKK30KKworI2RlZmluZSBBTUFQX1NFVF9CSVRTKF9zdHJ1Y3QsIGZpZWxkLCBwdHIsIHZhbCkJCQkJXAorCQlhbWFwX3NldChwdHIsCQkJCQkJXAorCQkJb2Zmc2V0b2YoX3N0cnVjdCwgZmllbGQpLzMyLAkJCVwKKwkJCWFtYXBfbWFzayhzaXplb2YoKChfc3RydWN0ICopMCktPmZpZWxkKSksCVwKKwkJCUFNQVBfQklUX09GRlNFVChfc3RydWN0LCBmaWVsZCksCQlcCisJCQl2YWwpCisKK3N0YXRpYyBpbmxpbmUgdTMyIGFtYXBfZ2V0KHZvaWQgKnB0ciwgdTMyIGR3X29mZnNldCwgdTMyIG1hc2ssIHUzMiBvZmZzZXQpCit7CisJdTMyICpkdyA9IHB0cjsKKwlyZXR1cm4gbWFzayAmICgqKGR3ICsgZHdfb2Zmc2V0KSA+PiBvZmZzZXQpOworfQorCisjZGVmaW5lIEFNQVBfR0VUX0JJVFMoX3N0cnVjdCwgZmllbGQsIHB0cikJCQkJXAorCQlhbWFwX2dldChwdHIsCQkJCQkJXAorCQkJb2Zmc2V0b2YoX3N0cnVjdCwgZmllbGQpLzMyLAkJCVwKKwkJCWFtYXBfbWFzayhzaXplb2YoKChfc3RydWN0ICopMCktPmZpZWxkKSksCVwKKwkJCUFNQVBfQklUX09GRlNFVChfc3RydWN0LCBmaWVsZCkpCisKKyNkZWZpbmUgYmVfZHdzX2NwdV90b19sZSh3cmIsIGxlbikgc3dhcF9kd3Mod3JiLCBsZW4pCisjZGVmaW5lIGJlX2R3c19sZV90b19jcHUod3JiLCBsZW4pIHN3YXBfZHdzKHdyYiwgbGVuKQorc3RhdGljIGlubGluZSB2b2lkIHN3YXBfZHdzKHZvaWQgKndyYiwgaW50IGxlbikKK3sKKyNpZmRlZiBfX0JJR19FTkRJQU4KKwl1MzIgKmR3ID0gd3JiOworCVdBUk5fT04obGVuICUgNCk7CisJZG8geworCQkqZHcgPSBjcHVfdG9fbGUzMigqZHcpOworCQlkdysrOworCQlsZW4gLT0gNDsKKwl9IHdoaWxlIChsZW4pOworI2VuZGlmIC8qIF9fQklHX0VORElBTiAqLworfQorCitleHRlcm4gdm9pZCBiZWlzY3NpX2NxX25vdGlmeShzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsLCB1MTYgcWlkLCBib29sIGFybSwKKwkJCSAgICAgIHUxNiBudW1fcG9wcGVkKTsKKworI2VuZGlmIC8qIEJFSVNDU0lfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX2NtZHMuYyBiL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9jbWRzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDgwMDdiNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9jbWRzLmMKQEAgLTAsMCArMSw1MjMgQEAKKy8qKgorICogQ29weXJpZ2h0IChDKSAyMDA1IC0gMjAwOSBTZXJ2ZXJFbmdpbmVzCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMgorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBUaGUgZnVsbCBHTlUgR2VuZXJhbAorICogUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlIGZpbGUgY2FsbGVkIENPUFlJTkcuCisgKgorICogQ29udGFjdCBJbmZvcm1hdGlvbjoKKyAqIGxpbnV4LWRyaXZlcnNAc2VydmVyZW5naW5lcy5jb20KKyAqCisgKiBTZXJ2ZXJFbmdpbmVzCisgKiAyMDkgTi4gRmFpciBPYWtzIEF2ZQorICogU3Vubnl2YWxlLCBDQSA5NDA4NQorICovCisKKyNpbmNsdWRlICJiZS5oIgorI2luY2x1ZGUgImJlX21nbXQuaCIKKyNpbmNsdWRlICJiZV9tYWluLmgiCisKK3N0YXRpYyBpbmxpbmUgYm9vbCBiZV9tY2NfY29tcGxfaXNfbmV3KHN0cnVjdCBiZV9tY2NfY29tcGwgKmNvbXBsKQoreworCWlmIChjb21wbC0+ZmxhZ3MgIT0gMCkgeworCQljb21wbC0+ZmxhZ3MgPSBsZTMyX3RvX2NwdShjb21wbC0+ZmxhZ3MpOworCQlXQVJOX09OKChjb21wbC0+ZmxhZ3MgJiBDUUVfRkxBR1NfVkFMSURfTUFTSykgPT0gMCk7CisJCXJldHVybiB0cnVlOworCX0gZWxzZQorCQlyZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBiZV9tY2NfY29tcGxfdXNlKHN0cnVjdCBiZV9tY2NfY29tcGwgKmNvbXBsKQoreworCWNvbXBsLT5mbGFncyA9IDA7Cit9CisKK3N0YXRpYyBpbnQgYmVfbWNjX2NvbXBsX3Byb2Nlc3Moc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCwKKwkJCQlzdHJ1Y3QgYmVfbWNjX2NvbXBsICpjb21wbCkKK3sKKwl1MTYgY29tcGxfc3RhdHVzLCBleHRkX3N0YXR1czsKKworCWJlX2R3c19sZV90b19jcHUoY29tcGwsIDQpOworCisJY29tcGxfc3RhdHVzID0gKGNvbXBsLT5zdGF0dXMgPj4gQ1FFX1NUQVRVU19DT01QTF9TSElGVCkgJgorCQkJCQlDUUVfU1RBVFVTX0NPTVBMX01BU0s7CisJaWYgKGNvbXBsX3N0YXR1cyAhPSBNQ0NfU1RBVFVTX1NVQ0NFU1MpIHsKKwkJZXh0ZF9zdGF0dXMgPSAoY29tcGwtPnN0YXR1cyA+PiBDUUVfU1RBVFVTX0VYVERfU0hJRlQpICYKKwkJCQkJCUNRRV9TVEFUVVNfRVhURF9NQVNLOworCQlkZXZfZXJyKCZjdHJsLT5wZGV2LT5kZXYsCisJCQkiZXJyb3IgaW4gY21kIGNvbXBsZXRpb246IHN0YXR1cyhjb21wbC9leHRkKT0lZC8lZFxuIiwKKwkJCWNvbXBsX3N0YXR1cywgZXh0ZF9zdGF0dXMpOworCQlyZXR1cm4gLTE7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgaXNfbGlua19zdGF0ZV9ldnQodTMyIHRyYWlsZXIpCit7CisJcmV0dXJuICgoKHRyYWlsZXIgPj4gQVNZTkNfVFJBSUxFUl9FVkVOVF9DT0RFX1NISUZUKSAmCisJCUFTWU5DX1RSQUlMRVJfRVZFTlRfQ09ERV9NQVNLKSA9PSBBU1lOQ19FVkVOVF9DT0RFX0xJTktfU1RBVEUpOworfQorCit2b2lkIGJlaXNjc2lfY3Ffbm90aWZ5KHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwsIHUxNiBxaWQsIGJvb2wgYXJtLAorCQkgICAgICAgdTE2IG51bV9wb3BwZWQpCit7CisJdTMyIHZhbCA9IDA7CisJdmFsIHw9IHFpZCAmIERCX0NRX1JJTkdfSURfTUFTSzsKKwlpZiAoYXJtKQorCQl2YWwgfD0gMSA8PCBEQl9DUV9SRUFSTV9TSElGVDsKKwl2YWwgfD0gbnVtX3BvcHBlZCA8PCBEQl9DUV9OVU1fUE9QUEVEX1NISUZUOworCWlvd3JpdGUzMih2YWwsIGN0cmwtPmRiICsgREJfQ1FfT0ZGU0VUKTsKK30KKworc3RhdGljIGludCBiZV9tYm94X2RiX3JlYWR5X3dhaXQoc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCkKK3sKKyNkZWZpbmUgbG9uZ19kZWxheSAyMDAwCisJdm9pZCBfX2lvbWVtICpkYiA9IGN0cmwtPmRiICsgTVBVX01BSUxCT1hfREJfT0ZGU0VUOworCWludCBjbnQgPSAwLCB3YWl0ID0gNTsJLyogaW4gdXNlY3MgKi8KKwl1MzIgcmVhZHk7CisKKwlkbyB7CisJCXJlYWR5ID0gaW9yZWFkMzIoZGIpICYgTVBVX01BSUxCT1hfREJfUkRZX01BU0s7CisJCWlmIChyZWFkeSkKKwkJCWJyZWFrOworCisJCWlmIChjbnQgPiA2MDAwMDAwKSB7CisJCQlkZXZfZXJyKCZjdHJsLT5wZGV2LT5kZXYsICJtYm94X2RiIHBvbGwgdGltZWQgb3V0XG4iKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCisJCWlmIChjbnQgPiA1MCkgeworCQkJd2FpdCA9IGxvbmdfZGVsYXk7CisJCQltZGVsYXkobG9uZ19kZWxheSAvIDEwMDApOworCQl9IGVsc2UKKwkJCXVkZWxheSh3YWl0KTsKKwkJY250ICs9IHdhaXQ7CisJfSB3aGlsZSAodHJ1ZSk7CisJcmV0dXJuIDA7Cit9CisKK2ludCBiZV9tYm94X25vdGlmeShzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsKQoreworCWludCBzdGF0dXM7CisJdTMyIHZhbCA9IDA7CisJdm9pZCBfX2lvbWVtICpkYiA9IGN0cmwtPmRiICsgTVBVX01BSUxCT1hfREJfT0ZGU0VUOworCXN0cnVjdCBiZV9kbWFfbWVtICptYm94X21lbSA9ICZjdHJsLT5tYm94X21lbTsKKwlzdHJ1Y3QgYmVfbWNjX21haWxib3ggKm1ib3ggPSBtYm94X21lbS0+dmE7CisJc3RydWN0IGJlX21jY19jb21wbCAqY29tcGwgPSAmbWJveC0+Y29tcGw7CisKKwl2YWwgJj0gfk1QVV9NQUlMQk9YX0RCX1JEWV9NQVNLOworCXZhbCB8PSBNUFVfTUFJTEJPWF9EQl9ISV9NQVNLOworCXZhbCB8PSAodXBwZXJfMzJfYml0cyhtYm94X21lbS0+ZG1hKSA+PiAyKSA8PCAyOworCWlvd3JpdGUzMih2YWwsIGRiKTsKKworCXN0YXR1cyA9IGJlX21ib3hfZGJfcmVhZHlfd2FpdChjdHJsKTsKKwlpZiAoc3RhdHVzICE9IDApIHsKKwkJU0VfREVCVUcoREJHX0xWTF8xLCAiIGJlX21ib3hfZGJfcmVhZHlfd2FpdCBmYWlsZWQgMVxuIik7CisJCXJldHVybiBzdGF0dXM7CisJfQorCXZhbCA9IDA7CisJdmFsICY9IH5NUFVfTUFJTEJPWF9EQl9SRFlfTUFTSzsKKwl2YWwgJj0gfk1QVV9NQUlMQk9YX0RCX0hJX01BU0s7CisJdmFsIHw9ICh1MzIpIChtYm94X21lbS0+ZG1hID4+IDQpIDw8IDI7CisJaW93cml0ZTMyKHZhbCwgZGIpOworCisJc3RhdHVzID0gYmVfbWJveF9kYl9yZWFkeV93YWl0KGN0cmwpOworCWlmIChzdGF0dXMgIT0gMCkgeworCQlTRV9ERUJVRyhEQkdfTFZMXzEsICIgYmVfbWJveF9kYl9yZWFkeV93YWl0IGZhaWxlZCAyXG4iKTsKKwkJcmV0dXJuIHN0YXR1czsKKwl9CisJaWYgKGJlX21jY19jb21wbF9pc19uZXcoY29tcGwpKSB7CisJCXN0YXR1cyA9IGJlX21jY19jb21wbF9wcm9jZXNzKGN0cmwsICZtYm94LT5jb21wbCk7CisJCWJlX21jY19jb21wbF91c2UoY29tcGwpOworCQlpZiAoc3RhdHVzKSB7CisJCQlTRV9ERUJVRyhEQkdfTFZMXzEsICJBZnRlciBiZV9tY2NfY29tcGxfcHJvY2VzcyBcbiIpOworCQkJcmV0dXJuIHN0YXR1czsKKwkJfQorCX0gZWxzZSB7CisJCWRldl9lcnIoJmN0cmwtPnBkZXYtPmRldiwgImludmFsaWQgbWFpbGJveCBjb21wbGV0aW9uXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKwlyZXR1cm4gMDsKK30KKwordm9pZCBiZV93cmJfaGRyX3ByZXBhcmUoc3RydWN0IGJlX21jY193cmIgKndyYiwgaW50IHBheWxvYWRfbGVuLAorCQkJCWJvb2wgZW1iZWRkZWQsIHU4IHNnZV9jbnQpCit7CisJaWYgKGVtYmVkZGVkKQorCQl3cmItPmVtYmVkZGVkIHw9IE1DQ19XUkJfRU1CRURERURfTUFTSzsKKwllbHNlCisJCXdyYi0+ZW1iZWRkZWQgfD0gKHNnZV9jbnQgJiBNQ0NfV1JCX1NHRV9DTlRfTUFTSykgPDwKKwkJCQkJCU1DQ19XUkJfU0dFX0NOVF9TSElGVDsKKwl3cmItPnBheWxvYWRfbGVuZ3RoID0gcGF5bG9hZF9sZW47CisJYmVfZHdzX2NwdV90b19sZSh3cmIsIDgpOworfQorCit2b2lkIGJlX2NtZF9oZHJfcHJlcGFyZShzdHJ1Y3QgYmVfY21kX3JlcV9oZHIgKnJlcV9oZHIsCisJCQl1OCBzdWJzeXN0ZW0sIHU4IG9wY29kZSwgaW50IGNtZF9sZW4pCit7CisJcmVxX2hkci0+b3Bjb2RlID0gb3Bjb2RlOworCXJlcV9oZHItPnN1YnN5c3RlbSA9IHN1YnN5c3RlbTsKKwlyZXFfaGRyLT5yZXF1ZXN0X2xlbmd0aCA9IGNwdV90b19sZTMyKGNtZF9sZW4gLSBzaXplb2YoKnJlcV9oZHIpKTsKK30KKworc3RhdGljIHZvaWQgYmVfY21kX3BhZ2VfYWRkcnNfcHJlcGFyZShzdHJ1Y3QgcGh5c19hZGRyICpwYWdlcywgdTMyIG1heF9wYWdlcywKKwkJCQkJCQlzdHJ1Y3QgYmVfZG1hX21lbSAqbWVtKQoreworCWludCBpLCBidWZfcGFnZXM7CisJdTY0IGRtYSA9ICh1NjQpIG1lbS0+ZG1hOworCisJYnVmX3BhZ2VzID0gbWluKFBBR0VTXzRLX1NQQU5ORUQobWVtLT52YSwgbWVtLT5zaXplKSwgbWF4X3BhZ2VzKTsKKwlmb3IgKGkgPSAwOyBpIDwgYnVmX3BhZ2VzOyBpKyspIHsKKwkJcGFnZXNbaV0ubG8gPSBjcHVfdG9fbGUzMihkbWEgJiAweEZGRkZGRkZGKTsKKwkJcGFnZXNbaV0uaGkgPSBjcHVfdG9fbGUzMih1cHBlcl8zMl9iaXRzKGRtYSkpOworCQlkbWEgKz0gUEFHRV9TSVpFXzRLOworCX0KK30KKworc3RhdGljIHUzMiBlcV9kZWxheV90b19tdWx0KHUzMiB1c2VjX2RlbGF5KQoreworI2RlZmluZSBNQVhfSU5UUl9SQVRFIDY1MTA0MgorCWNvbnN0IHUzMiByb3VuZCA9IDEwOworCXUzMiBtdWx0aXBsaWVyOworCisJaWYgKHVzZWNfZGVsYXkgPT0gMCkKKwkJbXVsdGlwbGllciA9IDA7CisJZWxzZSB7CisJCXUzMiBpbnRlcnJ1cHRfcmF0ZSA9IDEwMDAwMDAgLyB1c2VjX2RlbGF5OworCQlpZiAoaW50ZXJydXB0X3JhdGUgPT0gMCkKKwkJCW11bHRpcGxpZXIgPSAxMDIzOworCQllbHNlIHsKKwkJCW11bHRpcGxpZXIgPSAoTUFYX0lOVFJfUkFURSAtIGludGVycnVwdF9yYXRlKSAqIHJvdW5kOworCQkJbXVsdGlwbGllciAvPSBpbnRlcnJ1cHRfcmF0ZTsKKwkJCW11bHRpcGxpZXIgPSAobXVsdGlwbGllciArIHJvdW5kIC8gMikgLyByb3VuZDsKKwkJCW11bHRpcGxpZXIgPSBtaW4obXVsdGlwbGllciwgKHUzMikgMTAyMyk7CisJCX0KKwl9CisJcmV0dXJuIG11bHRpcGxpZXI7Cit9CisKK3N0cnVjdCBiZV9tY2Nfd3JiICp3cmJfZnJvbV9tYm94KHN0cnVjdCBiZV9kbWFfbWVtICptYm94X21lbSkKK3sKKwlyZXR1cm4gJigoc3RydWN0IGJlX21jY19tYWlsYm94ICopKG1ib3hfbWVtLT52YSkpLT53cmI7Cit9CisKK2ludCBiZWlzY3NpX2NtZF9lcV9jcmVhdGUoc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCwKKwkJCSAgc3RydWN0IGJlX3F1ZXVlX2luZm8gKmVxLCBpbnQgZXFfZGVsYXkpCit7CisJc3RydWN0IGJlX21jY193cmIgKndyYiA9IHdyYl9mcm9tX21ib3goJmN0cmwtPm1ib3hfbWVtKTsKKwlzdHJ1Y3QgYmVfY21kX3JlcV9lcV9jcmVhdGUgKnJlcSA9IGVtYmVkZGVkX3BheWxvYWQod3JiKTsKKwlzdHJ1Y3QgYmVfY21kX3Jlc3BfZXFfY3JlYXRlICpyZXNwID0gZW1iZWRkZWRfcGF5bG9hZCh3cmIpOworCXN0cnVjdCBiZV9kbWFfbWVtICpxX21lbSA9ICZlcS0+ZG1hX21lbTsKKwlpbnQgc3RhdHVzOworCisJc3Bpbl9sb2NrKCZjdHJsLT5tYm94X2xvY2spOworCW1lbXNldCh3cmIsIDAsIHNpemVvZigqd3JiKSk7CisKKwliZV93cmJfaGRyX3ByZXBhcmUod3JiLCBzaXplb2YoKnJlcSksIHRydWUsIDApOworCisJYmVfY21kX2hkcl9wcmVwYXJlKCZyZXEtPmhkciwgQ01EX1NVQlNZU1RFTV9DT01NT04sCisJCQlPUENPREVfQ09NTU9OX0VRX0NSRUFURSwgc2l6ZW9mKCpyZXEpKTsKKworCXJlcS0+bnVtX3BhZ2VzID0gY3B1X3RvX2xlMTYoUEFHRVNfNEtfU1BBTk5FRChxX21lbS0+dmEsIHFfbWVtLT5zaXplKSk7CisKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2VxX2NvbnRleHQsIGZ1bmMsIHJlcS0+Y29udGV4dCwKKwkJCQkJCVBDSV9GVU5DKGN0cmwtPnBkZXYtPmRldmZuKSk7CisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9lcV9jb250ZXh0LCB2YWxpZCwgcmVxLT5jb250ZXh0LCAxKTsKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2VxX2NvbnRleHQsIHNpemUsIHJlcS0+Y29udGV4dCwgMCk7CisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9lcV9jb250ZXh0LCBjb3VudCwgcmVxLT5jb250ZXh0LAorCQkJCQlfX2lsb2cyX3UzMihlcS0+bGVuIC8gMjU2KSk7CisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9lcV9jb250ZXh0LCBkZWxheW11bHQsIHJlcS0+Y29udGV4dCwKKwkJCQkJZXFfZGVsYXlfdG9fbXVsdChlcV9kZWxheSkpOworCWJlX2R3c19jcHVfdG9fbGUocmVxLT5jb250ZXh0LCBzaXplb2YocmVxLT5jb250ZXh0KSk7CisKKwliZV9jbWRfcGFnZV9hZGRyc19wcmVwYXJlKHJlcS0+cGFnZXMsIEFSUkFZX1NJWkUocmVxLT5wYWdlcyksIHFfbWVtKTsKKworCXN0YXR1cyA9IGJlX21ib3hfbm90aWZ5KGN0cmwpOworCWlmICghc3RhdHVzKSB7CisJCWVxLT5pZCA9IGxlMTZfdG9fY3B1KHJlc3AtPmVxX2lkKTsKKwkJZXEtPmNyZWF0ZWQgPSB0cnVlOworCX0KKwlzcGluX3VubG9jaygmY3RybC0+bWJveF9sb2NrKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCitpbnQgYmVfY21kX2Z3X2luaXRpYWxpemUoc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCkKK3sKKwlzdHJ1Y3QgYmVfbWNjX3dyYiAqd3JiID0gd3JiX2Zyb21fbWJveCgmY3RybC0+bWJveF9tZW0pOworCWludCBzdGF0dXM7CisJdTggKmVuZGlhbl9jaGVjazsKKworCXNwaW5fbG9jaygmY3RybC0+bWJveF9sb2NrKTsKKwltZW1zZXQod3JiLCAwLCBzaXplb2YoKndyYikpOworCisJZW5kaWFuX2NoZWNrID0gKHU4ICopIHdyYjsKKwkqZW5kaWFuX2NoZWNrKysgPSAweEZGOworCSplbmRpYW5fY2hlY2srKyA9IDB4MTI7CisJKmVuZGlhbl9jaGVjaysrID0gMHgzNDsKKwkqZW5kaWFuX2NoZWNrKysgPSAweEZGOworCSplbmRpYW5fY2hlY2srKyA9IDB4RkY7CisJKmVuZGlhbl9jaGVjaysrID0gMHg1NjsKKwkqZW5kaWFuX2NoZWNrKysgPSAweDc4OworCSplbmRpYW5fY2hlY2srKyA9IDB4RkY7CisJYmVfZHdzX2NwdV90b19sZSh3cmIsIHNpemVvZigqd3JiKSk7CisKKwlzdGF0dXMgPSBiZV9tYm94X25vdGlmeShjdHJsKTsKKwlpZiAoc3RhdHVzKQorCQlTRV9ERUJVRyhEQkdfTFZMXzEsICJiZV9jbWRfZndfaW5pdGlhbGl6ZSBGYWlsZWQgXG4iKTsKKworCXNwaW5fdW5sb2NrKCZjdHJsLT5tYm94X2xvY2spOworCXJldHVybiBzdGF0dXM7Cit9CisKK2ludCBiZWlzY3NpX2NtZF9jcV9jcmVhdGUoc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCwKKwkJCSAgc3RydWN0IGJlX3F1ZXVlX2luZm8gKmNxLCBzdHJ1Y3QgYmVfcXVldWVfaW5mbyAqZXEsCisJCQkgIGJvb2wgc29sX2V2dHMsIGJvb2wgbm9fZGVsYXksIGludCBjb2FsZXNjZV93bSkKK3sKKwlzdHJ1Y3QgYmVfbWNjX3dyYiAqd3JiID0gd3JiX2Zyb21fbWJveCgmY3RybC0+bWJveF9tZW0pOworCXN0cnVjdCBiZV9jbWRfcmVxX2NxX2NyZWF0ZSAqcmVxID0gZW1iZWRkZWRfcGF5bG9hZCh3cmIpOworCXN0cnVjdCBiZV9jbWRfcmVzcF9jcV9jcmVhdGUgKnJlc3AgPSBlbWJlZGRlZF9wYXlsb2FkKHdyYik7CisJc3RydWN0IGJlX2RtYV9tZW0gKnFfbWVtID0gJmNxLT5kbWFfbWVtOworCXZvaWQgKmN0eHQgPSAmcmVxLT5jb250ZXh0OworCWludCBzdGF0dXM7CisKKwlzcGluX2xvY2soJmN0cmwtPm1ib3hfbG9jayk7CisJbWVtc2V0KHdyYiwgMCwgc2l6ZW9mKCp3cmIpKTsKKworCWJlX3dyYl9oZHJfcHJlcGFyZSh3cmIsIHNpemVvZigqcmVxKSwgdHJ1ZSwgMCk7CisKKwliZV9jbWRfaGRyX3ByZXBhcmUoJnJlcS0+aGRyLCBDTURfU1VCU1lTVEVNX0NPTU1PTiwKKwkJCU9QQ09ERV9DT01NT05fQ1FfQ1JFQVRFLCBzaXplb2YoKnJlcSkpOworCisJaWYgKCFxX21lbS0+dmEpCisJCVNFX0RFQlVHKERCR19MVkxfMSwgInVuaW5pdGlhbGl6ZWQgcV9tZW0tPnZhXG4iKTsKKworCXJlcS0+bnVtX3BhZ2VzID0gY3B1X3RvX2xlMTYoUEFHRVNfNEtfU1BBTk5FRChxX21lbS0+dmEsIHFfbWVtLT5zaXplKSk7CisKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2NxX2NvbnRleHQsIGNvYWxlc2N3bSwgY3R4dCwgY29hbGVzY2Vfd20pOworCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfY3FfY29udGV4dCwgbm9kZWxheSwgY3R4dCwgbm9fZGVsYXkpOworCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfY3FfY29udGV4dCwgY291bnQsIGN0eHQsCisJCSAgICAgIF9faWxvZzJfdTMyKGNxLT5sZW4gLyAyNTYpKTsKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2NxX2NvbnRleHQsIHZhbGlkLCBjdHh0LCAxKTsKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2NxX2NvbnRleHQsIHNvbGV2ZW50LCBjdHh0LCBzb2xfZXZ0cyk7CisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9jcV9jb250ZXh0LCBldmVudGFibGUsIGN0eHQsIDEpOworCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfY3FfY29udGV4dCwgZXFpZCwgY3R4dCwgZXEtPmlkKTsKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2NxX2NvbnRleHQsIGFybWVkLCBjdHh0LCAxKTsKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2NxX2NvbnRleHQsIGZ1bmMsIGN0eHQsCisJCSAgICAgIFBDSV9GVU5DKGN0cmwtPnBkZXYtPmRldmZuKSk7CisJYmVfZHdzX2NwdV90b19sZShjdHh0LCBzaXplb2YocmVxLT5jb250ZXh0KSk7CisKKwliZV9jbWRfcGFnZV9hZGRyc19wcmVwYXJlKHJlcS0+cGFnZXMsIEFSUkFZX1NJWkUocmVxLT5wYWdlcyksIHFfbWVtKTsKKworCXN0YXR1cyA9IGJlX21ib3hfbm90aWZ5KGN0cmwpOworCWlmICghc3RhdHVzKSB7CisJCWNxLT5pZCA9IGxlMTZfdG9fY3B1KHJlc3AtPmNxX2lkKTsKKwkJY3EtPmNyZWF0ZWQgPSB0cnVlOworCX0gZWxzZQorCQlTRV9ERUJVRyhEQkdfTFZMXzEsICJJbiBiZV9jbWRfY3FfY3JlYXRlLCBzdGF0dXM9b3glMDh4IFxuIiwKKwkJCXN0YXR1cyk7CisJc3Bpbl91bmxvY2soJmN0cmwtPm1ib3hfbG9jayk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgdTMyIGJlX2VuY29kZWRfcV9sZW4oaW50IHFfbGVuKQoreworCXUzMiBsZW5fZW5jb2RlZCA9IGZscyhxX2xlbik7CS8qIGxvZzIobGVuKSArIDEgKi8KKwlpZiAobGVuX2VuY29kZWQgPT0gMTYpCisJCWxlbl9lbmNvZGVkID0gMDsKKwlyZXR1cm4gbGVuX2VuY29kZWQ7Cit9CitpbnQgYmVpc2NzaV9jbWRfcV9kZXN0cm95KHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwsIHN0cnVjdCBiZV9xdWV1ZV9pbmZvICpxLAorCQkJICBpbnQgcXVldWVfdHlwZSkKK3sKKwlzdHJ1Y3QgYmVfbWNjX3dyYiAqd3JiID0gd3JiX2Zyb21fbWJveCgmY3RybC0+bWJveF9tZW0pOworCXN0cnVjdCBiZV9jbWRfcmVxX3FfZGVzdHJveSAqcmVxID0gZW1iZWRkZWRfcGF5bG9hZCh3cmIpOworCXU4IHN1YnN5cyA9IDAsIG9wY29kZSA9IDA7CisJaW50IHN0YXR1czsKKworCXNwaW5fbG9jaygmY3RybC0+bWJveF9sb2NrKTsKKwltZW1zZXQod3JiLCAwLCBzaXplb2YoKndyYikpOworCWJlX3dyYl9oZHJfcHJlcGFyZSh3cmIsIHNpemVvZigqcmVxKSwgdHJ1ZSwgMCk7CisKKwlzd2l0Y2ggKHF1ZXVlX3R5cGUpIHsKKwljYXNlIFFUWVBFX0VROgorCQlzdWJzeXMgPSBDTURfU1VCU1lTVEVNX0NPTU1PTjsKKwkJb3Bjb2RlID0gT1BDT0RFX0NPTU1PTl9FUV9ERVNUUk9ZOworCQlicmVhazsKKwljYXNlIFFUWVBFX0NROgorCQlzdWJzeXMgPSBDTURfU1VCU1lTVEVNX0NPTU1PTjsKKwkJb3Bjb2RlID0gT1BDT0RFX0NPTU1PTl9DUV9ERVNUUk9ZOworCQlicmVhazsKKwljYXNlIFFUWVBFX1dSQlE6CisJCXN1YnN5cyA9IENNRF9TVUJTWVNURU1fSVNDU0k7CisJCW9wY29kZSA9IE9QQ09ERV9DT01NT05fSVNDU0lfV1JCUV9ERVNUUk9ZOworCQlicmVhazsKKwljYXNlIFFUWVBFX0RQRFVROgorCQlzdWJzeXMgPSBDTURfU1VCU1lTVEVNX0lTQ1NJOworCQlvcGNvZGUgPSBPUENPREVfQ09NTU9OX0lTQ1NJX0RFRlFfREVTVFJPWTsKKwkJYnJlYWs7CisJY2FzZSBRVFlQRV9TR0w6CisJCXN1YnN5cyA9IENNRF9TVUJTWVNURU1fSVNDU0k7CisJCW9wY29kZSA9IE9QQ09ERV9DT01NT05fSVNDU0lfQ0ZHX1JFTU9WRV9TR0xfUEFHRVM7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXNwaW5fdW5sb2NrKCZjdHJsLT5tYm94X2xvY2spOworCQlCVUcoKTsKKwkJcmV0dXJuIC0xOworCX0KKwliZV9jbWRfaGRyX3ByZXBhcmUoJnJlcS0+aGRyLCBzdWJzeXMsIG9wY29kZSwgc2l6ZW9mKCpyZXEpKTsKKwlpZiAocXVldWVfdHlwZSAhPSBRVFlQRV9TR0wpCisJCXJlcS0+aWQgPSBjcHVfdG9fbGUxNihxLT5pZCk7CisKKwlzdGF0dXMgPSBiZV9tYm94X25vdGlmeShjdHJsKTsKKworCXNwaW5fdW5sb2NrKCZjdHJsLT5tYm94X2xvY2spOworCXJldHVybiBzdGF0dXM7Cit9CisKK2ludCBiZV9jbWRfZ2V0X21hY19hZGRyKHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwsIHU4ICptYWNfYWRkcikKK3sKKwlzdHJ1Y3QgYmVfbWNjX3dyYiAqd3JiID0gd3JiX2Zyb21fbWJveCgmY3RybC0+bWJveF9tZW0pOworCXN0cnVjdCBiZV9jbWRfcmVxX2dldF9tYWNfYWRkciAqcmVxID0gZW1iZWRkZWRfcGF5bG9hZCh3cmIpOworCWludCBzdGF0dXM7CisKKwlzcGluX2xvY2soJmN0cmwtPm1ib3hfbG9jayk7CisJbWVtc2V0KHdyYiwgMCwgc2l6ZW9mKCp3cmIpKTsKKwliZV93cmJfaGRyX3ByZXBhcmUod3JiLCBzaXplb2YoKnJlcSksIHRydWUsIDApOworCWJlX2NtZF9oZHJfcHJlcGFyZSgmcmVxLT5oZHIsIENNRF9TVUJTWVNURU1fSVNDU0ksCisJCQkgICBPUENPREVfQ09NTU9OX0lTQ1NJX05UV0tfR0VUX05JQ19DT05GSUcsCisJCQkgICBzaXplb2YoKnJlcSkpOworCisJc3RhdHVzID0gYmVfbWJveF9ub3RpZnkoY3RybCk7CisJaWYgKCFzdGF0dXMpIHsKKwkJc3RydWN0IGJlX2NtZF9yZXNwX2dldF9tYWNfYWRkciAqcmVzcCA9IGVtYmVkZGVkX3BheWxvYWQod3JiKTsKKworCQltZW1jcHkobWFjX2FkZHIsIHJlc3AtPm1hY19hZGRyZXNzLCBFVEhfQUxFTik7CisJfQorCisJc3Bpbl91bmxvY2soJmN0cmwtPm1ib3hfbG9jayk7CisJcmV0dXJuIHN0YXR1czsKK30KKworaW50IGJlX2NtZF9jcmVhdGVfZGVmYXVsdF9wZHVfcXVldWUoc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCwKKwkJCQkgICAgc3RydWN0IGJlX3F1ZXVlX2luZm8gKmNxLAorCQkJCSAgICBzdHJ1Y3QgYmVfcXVldWVfaW5mbyAqZHEsIGludCBsZW5ndGgsCisJCQkJICAgIGludCBlbnRyeV9zaXplKQoreworCXN0cnVjdCBiZV9tY2Nfd3JiICp3cmIgPSB3cmJfZnJvbV9tYm94KCZjdHJsLT5tYm94X21lbSk7CisJc3RydWN0IGJlX2RlZnFfY3JlYXRlX3JlcSAqcmVxID0gZW1iZWRkZWRfcGF5bG9hZCh3cmIpOworCXN0cnVjdCBiZV9kbWFfbWVtICpxX21lbSA9ICZkcS0+ZG1hX21lbTsKKwl2b2lkICpjdHh0ID0gJnJlcS0+Y29udGV4dDsKKwlpbnQgc3RhdHVzOworCisJc3Bpbl9sb2NrKCZjdHJsLT5tYm94X2xvY2spOworCW1lbXNldCh3cmIsIDAsIHNpemVvZigqd3JiKSk7CisKKwliZV93cmJfaGRyX3ByZXBhcmUod3JiLCBzaXplb2YoKnJlcSksIHRydWUsIDApOworCisJYmVfY21kX2hkcl9wcmVwYXJlKCZyZXEtPmhkciwgQ01EX1NVQlNZU1RFTV9JU0NTSSwKKwkJCSAgIE9QQ09ERV9DT01NT05fSVNDU0lfREVGUV9DUkVBVEUsIHNpemVvZigqcmVxKSk7CisKKwlyZXEtPm51bV9wYWdlcyA9IFBBR0VTXzRLX1NQQU5ORUQocV9tZW0tPnZhLCBxX21lbS0+c2l6ZSk7CisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9iZV9kZWZhdWx0X3BkdV9jb250ZXh0LCByeF9wZGlkLCBjdHh0LCAwKTsKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2JlX2RlZmF1bHRfcGR1X2NvbnRleHQsIHJ4X3BkaWRfdmFsaWQsIGN0eHQsCisJCSAgICAgIDEpOworCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfYmVfZGVmYXVsdF9wZHVfY29udGV4dCwgcGNpX2Z1bmNfaWQsIGN0eHQsCisJCSAgICAgIFBDSV9GVU5DKGN0cmwtPnBkZXYtPmRldmZuKSk7CisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9iZV9kZWZhdWx0X3BkdV9jb250ZXh0LCByaW5nX3NpemUsIGN0eHQsCisJCSAgICAgIGJlX2VuY29kZWRfcV9sZW4obGVuZ3RoIC8gc2l6ZW9mKHN0cnVjdCBwaHlzX2FkZHIpKSk7CisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9iZV9kZWZhdWx0X3BkdV9jb250ZXh0LCBkZWZhdWx0X2J1ZmZlcl9zaXplLAorCQkgICAgICBjdHh0LCBlbnRyeV9zaXplKTsKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2JlX2RlZmF1bHRfcGR1X2NvbnRleHQsIGNxX2lkX3JlY3YsIGN0eHQsCisJCSAgICAgIGNxLT5pZCk7CisKKwliZV9kd3NfY3B1X3RvX2xlKGN0eHQsIHNpemVvZihyZXEtPmNvbnRleHQpKTsKKworCWJlX2NtZF9wYWdlX2FkZHJzX3ByZXBhcmUocmVxLT5wYWdlcywgQVJSQVlfU0laRShyZXEtPnBhZ2VzKSwgcV9tZW0pOworCisJc3RhdHVzID0gYmVfbWJveF9ub3RpZnkoY3RybCk7CisJaWYgKCFzdGF0dXMpIHsKKwkJc3RydWN0IGJlX2RlZnFfY3JlYXRlX3Jlc3AgKnJlc3AgPSBlbWJlZGRlZF9wYXlsb2FkKHdyYik7CisKKwkJZHEtPmlkID0gbGUxNl90b19jcHUocmVzcC0+aWQpOworCQlkcS0+Y3JlYXRlZCA9IHRydWU7CisJfQorCXNwaW5fdW5sb2NrKCZjdHJsLT5tYm94X2xvY2spOworCisJcmV0dXJuIHN0YXR1czsKK30KKworaW50IGJlX2NtZF93cmJxX2NyZWF0ZShzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsLCBzdHJ1Y3QgYmVfZG1hX21lbSAqcV9tZW0sCisJCSAgICAgICBzdHJ1Y3QgYmVfcXVldWVfaW5mbyAqd3JicSkKK3sKKwlzdHJ1Y3QgYmVfbWNjX3dyYiAqd3JiID0gd3JiX2Zyb21fbWJveCgmY3RybC0+bWJveF9tZW0pOworCXN0cnVjdCBiZV93cmJxX2NyZWF0ZV9yZXEgKnJlcSA9IGVtYmVkZGVkX3BheWxvYWQod3JiKTsKKwlzdHJ1Y3QgYmVfd3JicV9jcmVhdGVfcmVzcCAqcmVzcCA9IGVtYmVkZGVkX3BheWxvYWQod3JiKTsKKwlpbnQgc3RhdHVzOworCisJc3Bpbl9sb2NrKCZjdHJsLT5tYm94X2xvY2spOworCW1lbXNldCh3cmIsIDAsIHNpemVvZigqd3JiKSk7CisKKwliZV93cmJfaGRyX3ByZXBhcmUod3JiLCBzaXplb2YoKnJlcSksIHRydWUsIDApOworCisJYmVfY21kX2hkcl9wcmVwYXJlKCZyZXEtPmhkciwgQ01EX1NVQlNZU1RFTV9JU0NTSSwKKwkJT1BDT0RFX0NPTU1PTl9JU0NTSV9XUkJRX0NSRUFURSwgc2l6ZW9mKCpyZXEpKTsKKwlyZXEtPm51bV9wYWdlcyA9IFBBR0VTXzRLX1NQQU5ORUQocV9tZW0tPnZhLCBxX21lbS0+c2l6ZSk7CisJYmVfY21kX3BhZ2VfYWRkcnNfcHJlcGFyZShyZXEtPnBhZ2VzLCBBUlJBWV9TSVpFKHJlcS0+cGFnZXMpLCBxX21lbSk7CisKKwlzdGF0dXMgPSBiZV9tYm94X25vdGlmeShjdHJsKTsKKwlpZiAoIXN0YXR1cykKKwkJd3JicS0+aWQgPSBsZTE2X3RvX2NwdShyZXNwLT5jaWQpOworCXNwaW5fdW5sb2NrKCZjdHJsLT5tYm94X2xvY2spOworCXJldHVybiBzdGF0dXM7Cit9CisKK2ludCBiZV9jbWRfaXNjc2lfcG9zdF9zZ2xfcGFnZXMoc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCwKKwkJCQlzdHJ1Y3QgYmVfZG1hX21lbSAqcV9tZW0sCisJCQkJdTMyIHBhZ2Vfb2Zmc2V0LCB1MzIgbnVtX3BhZ2VzKQoreworCXN0cnVjdCBiZV9tY2Nfd3JiICp3cmIgPSB3cmJfZnJvbV9tYm94KCZjdHJsLT5tYm94X21lbSk7CisJc3RydWN0IGJlX3Bvc3Rfc2dsX3BhZ2VzX3JlcSAqcmVxID0gZW1iZWRkZWRfcGF5bG9hZCh3cmIpOworCWludCBzdGF0dXM7CisJdW5zaWduZWQgaW50IGN1cnJfcGFnZXM7CisJdTMyIGludGVybmFsX3BhZ2Vfb2Zmc2V0ID0gMDsKKwl1MzIgdGVtcF9udW1fcGFnZXMgPSBudW1fcGFnZXM7CisKKwlpZiAobnVtX3BhZ2VzID09IDB4ZmYpCisJCW51bV9wYWdlcyA9IDE7CisKKwlzcGluX2xvY2soJmN0cmwtPm1ib3hfbG9jayk7CisJZG8geworCQltZW1zZXQod3JiLCAwLCBzaXplb2YoKndyYikpOworCQliZV93cmJfaGRyX3ByZXBhcmUod3JiLCBzaXplb2YoKnJlcSksIHRydWUsIDApOworCQliZV9jbWRfaGRyX3ByZXBhcmUoJnJlcS0+aGRyLCBDTURfU1VCU1lTVEVNX0lTQ1NJLAorCQkJCSAgIE9QQ09ERV9DT01NT05fSVNDU0lfQ0ZHX1BPU1RfU0dMX1BBR0VTLAorCQkJCSAgIHNpemVvZigqcmVxKSk7CisJCWN1cnJfcGFnZXMgPSBCRV9OVU1CRVJfT0ZfRklFTEQoc3RydWN0IGJlX3Bvc3Rfc2dsX3BhZ2VzX3JlcSwKKwkJCQkJCXBhZ2VzKTsKKwkJcmVxLT5udW1fcGFnZXMgPSBtaW4obnVtX3BhZ2VzLCBjdXJyX3BhZ2VzKTsKKwkJcmVxLT5wYWdlX29mZnNldCA9IHBhZ2Vfb2Zmc2V0OworCQliZV9jbWRfcGFnZV9hZGRyc19wcmVwYXJlKHJlcS0+cGFnZXMsIHJlcS0+bnVtX3BhZ2VzLCBxX21lbSk7CisJCXFfbWVtLT5kbWEgPSBxX21lbS0+ZG1hICsgKHJlcS0+bnVtX3BhZ2VzICogUEFHRV9TSVpFKTsKKwkJaW50ZXJuYWxfcGFnZV9vZmZzZXQgKz0gcmVxLT5udW1fcGFnZXM7CisJCXBhZ2Vfb2Zmc2V0ICs9IHJlcS0+bnVtX3BhZ2VzOworCQludW1fcGFnZXMgLT0gcmVxLT5udW1fcGFnZXM7CisKKwkJaWYgKHRlbXBfbnVtX3BhZ2VzID09IDB4ZmYpCisJCQlyZXEtPm51bV9wYWdlcyA9IHRlbXBfbnVtX3BhZ2VzOworCisJCXN0YXR1cyA9IGJlX21ib3hfbm90aWZ5KGN0cmwpOworCQlpZiAoc3RhdHVzKSB7CisJCQlTRV9ERUJVRyhEQkdfTFZMXzEsCisJCQkJICJGVyBDTUQgdG8gbWFwIGlzY3NpIGZyYWdzIGZhaWxlZC5cbiIpOworCQkJZ290byBlcnJvcjsKKwkJfQorCX0gd2hpbGUgKG51bV9wYWdlcyA+IDApOworZXJyb3I6CisJc3Bpbl91bmxvY2soJmN0cmwtPm1ib3hfbG9jayk7CisJaWYgKHN0YXR1cyAhPSAwKQorCQliZWlzY3NpX2NtZF9xX2Rlc3Ryb3koY3RybCwgTlVMTCwgUVRZUEVfU0dMKTsKKwlyZXR1cm4gc3RhdHVzOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX2NtZHMuaCBiL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9jbWRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzIwZDY4NgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9jbWRzLmgKQEAgLTAsMCArMSw4NzcgQEAKKy8qKgorICogQ29weXJpZ2h0IChDKSAyMDA1IC0gMjAwOSBTZXJ2ZXJFbmdpbmVzCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMgorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBUaGUgZnVsbCBHTlUgR2VuZXJhbAorICogUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlIGZpbGUgY2FsbGVkIENPUFlJTkcuCisgKgorICogQ29udGFjdCBJbmZvcm1hdGlvbjoKKyAqIGxpbnV4LWRyaXZlcnNAc2VydmVyZW5naW5lcy5jb20KKyAqCisgKiBTZXJ2ZXJFbmdpbmVzCisgKiAyMDkgTi4gRmFpciBPYWtzIEF2ZQorICogU3Vubnl2YWxlLCBDQSA5NDA4NQorICovCisKKyNpZm5kZWYgQkVJU0NTSV9DTURTX0gKKyNkZWZpbmUgQkVJU0NTSV9DTURTX0gKKworLyoqCisgKiBUaGUgZHJpdmVyIHNlbmRzIGNvbmZpZ3VyYXRpb24gYW5kIG1hbmFnZW1lbnRzIGNvbW1hbmQgcmVxdWVzdHMgdG8gdGhlCisgKiBmaXJtd2FyZSBpbiB0aGUgQkUuIFRoZXNlIHJlcXVlc3RzIGFyZSBjb21tdW5pY2F0ZWQgdG8gdGhlIHByb2Nlc3NvcgorICogdXNpbmcgV29yayBSZXF1ZXN0IEJsb2NrcyAoV1JCcykgc3VibWl0dGVkIHRvIHRoZSBNQ0MtV1JCIHJpbmcgb3IgdmlhIG9uZQorICogV1JCIGluc2lkZSBhIE1BSUxCT1guCisgKiBUaGUgY29tbWFuZHMgYXJlIHNlcnZpY2VkIGJ5IHRoZSBBUk0gcHJvY2Vzc29yIGluIHRoZSBCbGFkZUVuZ2luZSdzIE1QVS4KKyAqLworc3RydWN0IGJlX3NnZSB7CisJdTMyIHBhX2xvOworCXUzMiBwYV9oaTsKKwl1MzIgbGVuOworfTsKKworI2RlZmluZSBNQ0NfV1JCX1NHRV9DTlRfU0hJRlQgMwkvKiBiaXRzIDMgLSA3IG9mIGR3b3JkIDAgKi8KKyNkZWZpbmUgTUNDX1dSQl9TR0VfQ05UX01BU0sgMHgxRgkvKiBiaXRzIDMgLSA3IG9mIGR3b3JkIDAgKi8KK3N0cnVjdCBiZV9tY2Nfd3JiIHsKKwl1MzIgZW1iZWRkZWQ7CQkvKiBkd29yZCAwICovCisJdTMyIHBheWxvYWRfbGVuZ3RoOwkvKiBkd29yZCAxICovCisJdTMyIHRhZzA7CQkvKiBkd29yZCAyICovCisJdTMyIHRhZzE7CQkvKiBkd29yZCAzICovCisJdTMyIHJzdmQ7CQkvKiBkd29yZCA0ICovCisJdW5pb24geworCQl1OCBlbWJlZGRlZF9wYXlsb2FkWzIzNl07CS8qIHVzZWQgYnkgZW1iZWRkZWQgY21kcyAqLworCQlzdHJ1Y3QgYmVfc2dlIHNnbFsxOV07CS8qIHVzZWQgYnkgbm9uLWVtYmVkZGVkIGNtZHMgKi8KKwl9IHBheWxvYWQ7Cit9OworCisjZGVmaW5lIENRRV9GTEFHU19WQUxJRF9NQVNLICgxIDw8IDMxKQorI2RlZmluZSBDUUVfRkxBR1NfQVNZTkNfTUFTSyAoMSA8PCAzMCkKKworLyogQ29tcGxldGlvbiBTdGF0dXMgKi8KKyNkZWZpbmUgTUNDX1NUQVRVU19TVUNDRVNTIDB4MAorCisjZGVmaW5lIENRRV9TVEFUVVNfQ09NUExfTUFTSyAweEZGRkYKKyNkZWZpbmUgQ1FFX1NUQVRVU19DT01QTF9TSElGVCAwCS8qIGJpdHMgMCAtIDE1ICovCisjZGVmaW5lIENRRV9TVEFUVVNfRVhURF9NQVNLIDB4RkZGRgorI2RlZmluZSBDUUVfU1RBVFVTX0VYVERfU0hJRlQgMAkJLyogYml0cyAwIC0gMTUgKi8KKworc3RydWN0IGJlX21jY19jb21wbCB7CisJdTMyIHN0YXR1czsJCS8qIGR3b3JkIDAgKi8KKwl1MzIgdGFnMDsJCS8qIGR3b3JkIDEgKi8KKwl1MzIgdGFnMTsJCS8qIGR3b3JkIDIgKi8KKwl1MzIgZmxhZ3M7CQkvKiBkd29yZCAzICovCit9OworCisvKioqKioqKioqIE1haWxib3ggZG9vciBiZWxsICoqKioqKioqKioqKiovCisvKioKKyAqIFVzZWQgZm9yIGRyaXZlciBjb21tdW5pY2F0aW9uIHdpdGggdGhlIEZXLgorICogVGhlIHNvZnR3YXJlIG11c3Qgd3JpdGUgdGhpcyByZWdpc3RlciB0d2ljZSB0byBwb3N0IGFueSBjb21tYW5kLiBGaXJzdCwKKyAqIGl0IHdyaXRlcyB0aGUgcmVnaXN0ZXIgd2l0aCBoaT0xIGFuZCB0aGUgdXBwZXIgYml0cyBvZiB0aGUgcGh5c2ljYWwgYWRkcmVzcworICogZm9yIHRoZSBNQUlMQk9YIHN0cnVjdHVyZS4gU29mdHdhcmUgbXVzdCBwb2xsIHRoZSByZWFkeSBiaXQgdW50aWwgdGhpcworICogaXMgYWNrbm93bGVkZ2VkLiBUaGVuLCBzb3R3YXJlIHdyaXRlcyB0aGUgcmVnaXN0ZXIgd2l0aCBoaT0wIHdpdGggdGhlIGxvd2VyCisgKiBiaXRzIGluIHRoZSBhZGRyZXNzLiBJdCBtdXN0IHBvbGwgdGhlIHJlYWR5IGJpdCB1bnRpbCB0aGUgY29tbWFuZCBpcworICogY29tcGxldGUuIFVwb24gY29tcGxldGlvbiwgdGhlIE1BSUxCT1ggd2lsbCBjb250YWluIGEgdmFsaWQgY29tcGxldGlvbgorICogcXVldWUgZW50cnkuCisgKi8KKyNkZWZpbmUgTVBVX01BSUxCT1hfREJfT0ZGU0VUCTB4MTYwCisjZGVmaW5lIE1QVV9NQUlMQk9YX0RCX1JEWV9NQVNLCTB4MQkvKiBiaXQgMCAqLworI2RlZmluZSBNUFVfTUFJTEJPWF9EQl9ISV9NQVNLCTB4MgkvKiBiaXQgMSAqLworCisvKioqKioqKioqKiBNUFUgc2VtcGhvcmUgKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBNUFVfRVBfU0VNQVBIT1JFX09GRlNFVCAweGFjCisjZGVmaW5lIEVQX1NFTUFQSE9SRV9QT1NUX1NUQUdFX01BU0sgMHgwMDAwRkZGRgorI2RlZmluZSBFUF9TRU1BUEhPUkVfUE9TVF9FUlJfTUFTSyAweDEKKyNkZWZpbmUgRVBfU0VNQVBIT1JFX1BPU1RfRVJSX1NISUZUIDMxCisKKy8qKioqKioqKioqIE1DQyBkb29yIGJlbGwgKioqKioqKioqKioqLworI2RlZmluZSBEQl9NQ0NRX09GRlNFVCAweDE0MAorI2RlZmluZSBEQl9NQ0NRX1JJTkdfSURfTUFTSyAweDdGRgkJLyogYml0cyAwIC0gMTAgKi8KKy8qIE51bWJlciBvZiBlbnRyaWVzIHBvc3RlZCAqLworI2RlZmluZSBEQl9NQ0NRX05VTV9QT1NURURfU0hJRlQgMTYJCS8qIGJpdHMgMTYgLSAyOSAqLworCisvKiBNUFUgc2VtcGhvcmUgUE9TVCBzdGFnZSB2YWx1ZXMgKi8KKyNkZWZpbmUgUE9TVF9TVEFHRV9BUk1GV19SRFkJCTB4YzAwMAkvKiBGVyBpcyBkb25lIHdpdGggUE9TVCAqLworCisvKioKKyAqIFdoZW4gdGhlIGFzeW5jIGJpdCBvZiBtY2NfY29tcGwgaXMgc2V0LCB0aGUgbGFzdCA0IGJ5dGVzIG9mCisgKiBtY2NfY29tcGwgaXMgaW50ZXJwcmV0ZWQgYXMgZm9sbG93czoKKyAqLworI2RlZmluZSBBU1lOQ19UUkFJTEVSX0VWRU5UX0NPREVfU0hJRlQJOAkvKiBiaXRzIDggLSAxNSAqLworI2RlZmluZSBBU1lOQ19UUkFJTEVSX0VWRU5UX0NPREVfTUFTSwkweEZGCisjZGVmaW5lIEFTWU5DX0VWRU5UX0NPREVfTElOS19TVEFURQkweDEKK3N0cnVjdCBiZV9hc3luY19ldmVudF90cmFpbGVyIHsKKwl1MzIgY29kZTsKK307CisKK2VudW0geworCUFTWU5DX0VWRU5UX0xJTktfRE9XTiA9IDB4MCwKKwlBU1lOQ19FVkVOVF9MSU5LX1VQID0gMHgxCit9OworCisvKioKKyAqIFdoZW4gdGhlIGV2ZW50IGNvZGUgb2YgYW4gYXN5bmMgdHJhaWxlciBpcyBsaW5rLXN0YXRlLCB0aGUgbWNjX2NvbXBsCisgKiBtdXN0IGJlIGludGVycHJldGVkIGFzIGZvbGxvd3MKKyAqLworc3RydWN0IGJlX2FzeW5jX2V2ZW50X2xpbmtfc3RhdGUgeworCXU4IHBoeXNpY2FsX3BvcnQ7CisJdTggcG9ydF9saW5rX3N0YXR1czsKKwl1OCBwb3J0X2R1cGxleDsKKwl1OCBwb3J0X3NwZWVkOworCXU4IHBvcnRfZmF1bHQ7CisJdTggcnN2ZDBbN107CisJc3RydWN0IGJlX2FzeW5jX2V2ZW50X3RyYWlsZXIgdHJhaWxlcjsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBiZV9tY2NfbWFpbGJveCB7CisJc3RydWN0IGJlX21jY193cmIgd3JiOworCXN0cnVjdCBiZV9tY2NfY29tcGwgY29tcGw7Cit9OworCisvKiBUeXBlIG9mIHN1YnN5c3RlbXMgc3VwcG9ydGVkIGJ5IEZXICovCisjZGVmaW5lIENNRF9TVUJTWVNURU1fQ09NTU9OICAgIDB4MQorI2RlZmluZSBDTURfU1VCU1lTVEVNX0lTQ1NJICAgICAweDIKKyNkZWZpbmUgQ01EX1NVQlNZU1RFTV9FVEggICAgICAgMHgzCisjZGVmaW5lIENNRF9TVUJTWVNURU1fSVNDU0lfSU5JIDB4NgorI2RlZmluZSBDTURfQ09NTU9OX1RDUF9VUExPQUQgICAweDEKKworLyoqCisgKiBMaXN0IG9mIGNvbW1vbiBvcGNvZGVzIHN1YnN5c3RlbSAgQ01EX1NVQlNZU1RFTV9DT01NT04KKyAqIFRoZXNlIG9wY29kZXMgYXJlIHVuaXF1ZSBmb3IgZWFjaCBzdWJzeXN0ZW0gZGVmaW5lZCBhYm92ZQorICovCisjZGVmaW5lIE9QQ09ERV9DT01NT05fQ1FfQ1JFQVRFCQkJCTEyCisjZGVmaW5lIE9QQ09ERV9DT01NT05fRVFfQ1JFQVRFCQkJCTEzCisjZGVmaW5lIE9QQ09ERV9DT01NT05fTUNDX0NSRUFURSAgICAgICAgCQkyMQorI2RlZmluZSBPUENPREVfQ09NTU9OX0dFVF9DTlRMX0FUVFJJQlVURVMgICAgICAgICAgICAgICAzMgorI2RlZmluZSBPUENPREVfQ09NTU9OX0dFVF9GV19WRVJTSU9OCQkJMzUKKyNkZWZpbmUgT1BDT0RFX0NPTU1PTl9NT0RJRllfRVFfREVMQVkJCQk0MQorI2RlZmluZSBPUENPREVfQ09NTU9OX0ZJUk1XQVJFX0NPTkZJRwkJCTQyCisjZGVmaW5lIE9QQ09ERV9DT01NT05fTUNDX0RFU1RST1kgICAgICAgIAkJNTMKKyNkZWZpbmUgT1BDT0RFX0NPTU1PTl9DUV9ERVNUUk9ZICAgICAgICAJCTU0CisjZGVmaW5lIE9QQ09ERV9DT01NT05fRVFfREVTVFJPWSAgICAgICAgCQk1NQorI2RlZmluZSBPUENPREVfQ09NTU9OX1FVRVJZX0ZJUk1XQVJFX0NPTkZJRwkJNTgKKyNkZWZpbmUgT1BDT0RFX0NPTU1PTl9GVU5DVElPTl9SRVNFVAkJCTYxCisKKy8qKgorICogTElTVCBvZiBvcGNvZGVzIHRoYXQgYXJlIGNvbW1vbiBiZXR3ZWVuIEluaXRpYXRvciBhbmQgVGFyZ2V0CisgKiB1c2VkIGJ5IENNRF9TVUJTWVNURU1fSVNDU0kKKyAqIFRoZXNlIG9wY29kZXMgYXJlIHVuaXF1ZSBmb3IgZWFjaCBzdWJzeXN0ZW0gZGVmaW5lZCBhYm92ZQorICovCisjZGVmaW5lIE9QQ09ERV9DT01NT05fSVNDU0lfQ0ZHX1BPU1RfU0dMX1BBR0VTCQkyCisjZGVmaW5lIE9QQ09ERV9DT01NT05fSVNDU0lfQ0ZHX1JFTU9WRV9TR0xfUEFHRVMgICAgICAgIDMKKyNkZWZpbmUgT1BDT0RFX0NPTU1PTl9JU0NTSV9OVFdLX0dFVF9OSUNfQ09ORklHCQk3CisjZGVmaW5lIE9QQ09ERV9DT01NT05fSVNDU0lfU0VUX0ZSQUdOVU1fQklUU19GT1JfU0dMX0NSQSA2MQorI2RlZmluZSBPUENPREVfQ09NTU9OX0lTQ1NJX0RFRlFfQ1JFQVRFICAgICAgICAgICAgICAgICA2NAorI2RlZmluZSBPUENPREVfQ09NTU9OX0lTQ1NJX0RFRlFfREVTVFJPWSAJCTY1CisjZGVmaW5lIE9QQ09ERV9DT01NT05fSVNDU0lfV1JCUV9DUkVBVEUJCQk2NgorI2RlZmluZSBPUENPREVfQ09NTU9OX0lTQ1NJX1dSQlFfREVTVFJPWSAJCTY3CisKK3N0cnVjdCBiZV9jbWRfcmVxX2hkciB7CisJdTggb3Bjb2RlOwkJLyogZHdvcmQgMCAqLworCXU4IHN1YnN5c3RlbTsJCS8qIGR3b3JkIDAgKi8KKwl1OCBwb3J0X251bWJlcjsJCS8qIGR3b3JkIDAgKi8KKwl1OCBkb21haW47CQkvKiBkd29yZCAwICovCisJdTMyIHRpbWVvdXQ7CQkvKiBkd29yZCAxICovCisJdTMyIHJlcXVlc3RfbGVuZ3RoOwkvKiBkd29yZCAyICovCisJdTMyIHJzdmQ7CQkvKiBkd29yZCAzICovCit9OworCitzdHJ1Y3QgYmVfY21kX3Jlc3BfaGRyIHsKKwl1MzIgaW5mbzsJCS8qIGR3b3JkIDAgKi8KKwl1MzIgc3RhdHVzOwkJLyogZHdvcmQgMSAqLworCXUzMiByZXNwb25zZV9sZW5ndGg7CS8qIGR3b3JkIDIgKi8KKwl1MzIgYWN0dWFsX3Jlc3BfbGVuOwkvKiBkd29yZCAzICovCit9OworCitzdHJ1Y3QgcGh5c19hZGRyIHsKKwl1MzIgbG87CisJdTMyIGhpOworfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBCRSBDb21tYW5kIGRlZmluaXRpb25zICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqCisgKiBQc2V1ZG8gYW1hcCBkZWZpbml0aW9uIGluIHdoaWNoIGVhY2ggYml0IG9mIHRoZSBhY3R1YWwgc3RydWN0dXJlIGlzIGRlZmluZWQKKyAqIGFzIGEgYnl0ZSAtIHVzZWQgdG8gY2FsY3VsYXRlIG9mZnNldC9zaGlmdC9tYXNrIG9mIGVhY2ggZmllbGQKKyAqLworc3RydWN0IGFtYXBfZXFfY29udGV4dCB7CisJdTggY2lkeFsxM107CQkvKiBkd29yZCAwICovCisJdTggcnN2ZDBbM107CQkvKiBkd29yZCAwICovCisJdTggZXBpZHhbMTNdOwkJLyogZHdvcmQgMCAqLworCXU4IHZhbGlkOwkJLyogZHdvcmQgMCAqLworCXU4IHJzdmQxOwkJLyogZHdvcmQgMCAqLworCXU4IHNpemU7CQkvKiBkd29yZCAwICovCisJdTggcGlkeFsxM107CQkvKiBkd29yZCAxICovCisJdTggcnN2ZDJbM107CQkvKiBkd29yZCAxICovCisJdTggcGRbMTBdOwkJLyogZHdvcmQgMSAqLworCXU4IGNvdW50WzNdOwkJLyogZHdvcmQgMSAqLworCXU4IHNvbGV2ZW50OwkJLyogZHdvcmQgMSAqLworCXU4IHN0YWxsZWQ7CQkvKiBkd29yZCAxICovCisJdTggYXJtZWQ7CQkvKiBkd29yZCAxICovCisJdTggcnN2ZDNbNF07CQkvKiBkd29yZCAyICovCisJdTggZnVuY1s4XTsJCS8qIGR3b3JkIDIgKi8KKwl1OCByc3ZkNDsJCS8qIGR3b3JkIDIgKi8KKwl1OCBkZWxheW11bHRbMTBdOwkvKiBkd29yZCAyICovCisJdTggcnN2ZDVbMl07CQkvKiBkd29yZCAyICovCisJdTggcGhhc2VbMl07CQkvKiBkd29yZCAyICovCisJdTggbm9kZWxheTsJCS8qIGR3b3JkIDIgKi8KKwl1OCByc3ZkNls0XTsJCS8qIGR3b3JkIDIgKi8KKwl1OCByc3ZkN1szMl07CQkvKiBkd29yZCAzICovCit9IF9fcGFja2VkOworCitzdHJ1Y3QgYmVfY21kX3JlcV9lcV9jcmVhdGUgeworCXN0cnVjdCBiZV9jbWRfcmVxX2hkciBoZHI7CS8qIGR3WzRdICovCisJdTE2IG51bV9wYWdlczsJCS8qIHN3b3JkICovCisJdTE2IHJzdmQwOwkJLyogc3dvcmQgKi8KKwl1OCBjb250ZXh0W3NpemVvZihzdHJ1Y3QgYW1hcF9lcV9jb250ZXh0KSAvIDhdOwkvKiBkd1s0XSAqLworCXN0cnVjdCBwaHlzX2FkZHIgcGFnZXNbOF07Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgYmVfY21kX3Jlc3BfZXFfY3JlYXRlIHsKKwlzdHJ1Y3QgYmVfY21kX3Jlc3BfaGRyIHJlc3BfaGRyOworCXUxNiBlcV9pZDsJCS8qIHN3b3JkICovCisJdTE2IHJzdmQwOwkJLyogc3dvcmQgKi8KK30gX19wYWNrZWQ7CisKK3N0cnVjdCBtYWNfYWRkciB7CisJdTE2IHNpemVfb2Zfc3RydWN0OworCXU4IGFkZHJbRVRIX0FMRU5dOworfSBfX3BhY2tlZDsKKworc3RydWN0IGJlX2NtZF9yZXFfbWFjX3F1ZXJ5IHsKKwlzdHJ1Y3QgYmVfY21kX3JlcV9oZHIgaGRyOworCXU4IHR5cGU7CisJdTggcGVybWFuZW50OworCXUxNiBpZl9pZDsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBiZV9jbWRfcmVzcF9tYWNfcXVlcnkgeworCXN0cnVjdCBiZV9jbWRfcmVzcF9oZHIgaGRyOworCXN0cnVjdCBtYWNfYWRkciBtYWM7Cit9OworCisvKioqKioqKioqKioqKioqKioqKiogQ3JlYXRlIENRICoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorICogUHNldWRvIGFtYXAgZGVmaW5pdGlvbiBpbiB3aGljaCBlYWNoIGJpdCBvZiB0aGUgYWN0dWFsIHN0cnVjdHVyZSBpcyBkZWZpbmVkCisgKiBhcyBhIGJ5dGUgLSB1c2VkIHRvIGNhbGN1bGF0ZSBvZmZzZXQvc2hpZnQvbWFzayBvZiBlYWNoIGZpZWxkCisgKi8KK3N0cnVjdCBhbWFwX2NxX2NvbnRleHQgeworCXU4IGNpZHhbMTFdOwkJLyogZHdvcmQgMCAqLworCXU4IHJzdmQwOwkJLyogZHdvcmQgMCAqLworCXU4IGNvYWxlc2N3bVsyXTsJLyogZHdvcmQgMCAqLworCXU4IG5vZGVsYXk7CQkvKiBkd29yZCAwICovCisJdTggZXBpZHhbMTFdOwkJLyogZHdvcmQgMCAqLworCXU4IHJzdmQxOwkJLyogZHdvcmQgMCAqLworCXU4IGNvdW50WzJdOwkJLyogZHdvcmQgMCAqLworCXU4IHZhbGlkOwkJLyogZHdvcmQgMCAqLworCXU4IHNvbGV2ZW50OwkJLyogZHdvcmQgMCAqLworCXU4IGV2ZW50YWJsZTsJCS8qIGR3b3JkIDAgKi8KKwl1OCBwaWR4WzExXTsJCS8qIGR3b3JkIDEgKi8KKwl1OCByc3ZkMjsJCS8qIGR3b3JkIDEgKi8KKwl1OCBwZFsxMF07CQkvKiBkd29yZCAxICovCisJdTggZXFpZFs4XTsJCS8qIGR3b3JkIDEgKi8KKwl1OCBzdGFsbGVkOwkJLyogZHdvcmQgMSAqLworCXU4IGFybWVkOwkJLyogZHdvcmQgMSAqLworCXU4IHJzdmQzWzRdOwkJLyogZHdvcmQgMiAqLworCXU4IGZ1bmNbOF07CQkvKiBkd29yZCAyICovCisJdTggcnN2ZDRbMjBdOwkJLyogZHdvcmQgMiAqLworCXU4IHJzdmQ1WzMyXTsJCS8qIGR3b3JkIDMgKi8KK30gX19wYWNrZWQ7CisKK3N0cnVjdCBiZV9jbWRfcmVxX2NxX2NyZWF0ZSB7CisJc3RydWN0IGJlX2NtZF9yZXFfaGRyIGhkcjsKKwl1MTYgbnVtX3BhZ2VzOworCXUxNiByc3ZkMDsKKwl1OCBjb250ZXh0W3NpemVvZihzdHJ1Y3QgYW1hcF9jcV9jb250ZXh0KSAvIDhdOworCXN0cnVjdCBwaHlzX2FkZHIgcGFnZXNbNF07Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgYmVfY21kX3Jlc3BfY3FfY3JlYXRlIHsKKwlzdHJ1Y3QgYmVfY21kX3Jlc3BfaGRyIGhkcjsKKwl1MTYgY3FfaWQ7CisJdTE2IHJzdmQwOworfSBfX3BhY2tlZDsKKworLyoqKioqKioqKioqKioqKioqKioqIENyZWF0ZSBNQ0NRICoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorICogUHNldWRvIGFtYXAgZGVmaW5pdGlvbiBpbiB3aGljaCBlYWNoIGJpdCBvZiB0aGUgYWN0dWFsIHN0cnVjdHVyZSBpcyBkZWZpbmVkCisgKiBhcyBhIGJ5dGUgLSB1c2VkIHRvIGNhbGN1bGF0ZSBvZmZzZXQvc2hpZnQvbWFzayBvZiBlYWNoIGZpZWxkCisgKi8KK3N0cnVjdCBhbWFwX21jY19jb250ZXh0IHsKKwl1OCBjb25faW5kZXhbMTRdOworCXU4IHJzdmQwWzJdOworCXU4IHJpbmdfc2l6ZVs0XTsKKwl1OCBmZXRjaF93cmI7CisJdTggZmV0Y2hfcjJ0OworCXU4IGNxX2lkWzEwXTsKKwl1OCBwcm9kX2luZGV4WzE0XTsKKwl1OCBmaWRbOF07CisJdTggcGRpZFs5XTsKKwl1OCB2YWxpZDsKKwl1OCByc3ZkMVszMl07CisJdTggcnN2ZDJbMzJdOworfSBfX3BhY2tlZDsKKworc3RydWN0IGJlX2NtZF9yZXFfbWNjX2NyZWF0ZSB7CisJc3RydWN0IGJlX2NtZF9yZXFfaGRyIGhkcjsKKwl1MTYgbnVtX3BhZ2VzOworCXUxNiByc3ZkMDsKKwl1OCBjb250ZXh0W3NpemVvZihzdHJ1Y3QgYW1hcF9tY2NfY29udGV4dCkgLyA4XTsKKwlzdHJ1Y3QgcGh5c19hZGRyIHBhZ2VzWzhdOworfSBfX3BhY2tlZDsKKworc3RydWN0IGJlX2NtZF9yZXNwX21jY19jcmVhdGUgeworCXN0cnVjdCBiZV9jbWRfcmVzcF9oZHIgaGRyOworCXUxNiBpZDsKKwl1MTYgcnN2ZDA7Cit9IF9fcGFja2VkOworCisvKioqKioqKioqKioqKioqKioqKiogUSBEZXN0cm95ICAqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBUeXBlIG9mIFF1ZXVlIHRvIGJlIGRlc3Ryb3llZCAqLworZW51bSB7CisJUVRZUEVfRVEgPSAxLAorCVFUWVBFX0NRLAorCVFUWVBFX01DQ1EsCisJUVRZUEVfV1JCUSwKKwlRVFlQRV9EUERVUSwKKwlRVFlQRV9TR0wKK307CisKK3N0cnVjdCBiZV9jbWRfcmVxX3FfZGVzdHJveSB7CisJc3RydWN0IGJlX2NtZF9yZXFfaGRyIGhkcjsKKwl1MTYgaWQ7CisJdTE2IGJ5cGFzc19mbHVzaDsJLyogdmFsaWQgb25seSBmb3IgcnggcSBkZXN0cm95ICovCit9IF9fcGFja2VkOworCitzdHJ1Y3QgbWFjYWRkciB7CisJdTggYnl0ZVtFVEhfQUxFTl07Cit9OworCitzdHJ1Y3QgYmVfY21kX3JlcV9tY2FzdF9tYWNfY29uZmlnIHsKKwlzdHJ1Y3QgYmVfY21kX3JlcV9oZHIgaGRyOworCXUxNiBudW1fbWFjOworCXU4IHByb21pc2N1b3VzOworCXU4IGludGVyZmFjZV9pZDsKKwlzdHJ1Y3QgbWFjYWRkciBtYWNbMzJdOworfSBfX3BhY2tlZDsKKworc3RhdGljIGlubGluZSB2b2lkICplbWJlZGRlZF9wYXlsb2FkKHN0cnVjdCBiZV9tY2Nfd3JiICp3cmIpCit7CisJcmV0dXJuIHdyYi0+cGF5bG9hZC5lbWJlZGRlZF9wYXlsb2FkOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBiZV9zZ2UgKm5vbmVtYmVkZGVkX3NnbChzdHJ1Y3QgYmVfbWNjX3dyYiAqd3JiKQoreworCXJldHVybiAmd3JiLT5wYXlsb2FkLnNnbFswXTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqIE1vZGlmeSBFUSBEZWxheSAqKioqKioqKioqKioqKioqKioqLworc3RydWN0IGJlX2NtZF9yZXFfbW9kaWZ5X2VxX2RlbGF5IHsKKwlzdHJ1Y3QgYmVfY21kX3JlcV9oZHIgaGRyOworCXUzMiBudW1fZXE7CisJc3RydWN0IHsKKwkJdTMyIGVxX2lkOworCQl1MzIgcGhhc2U7CisJCXUzMiBkZWxheV9tdWx0aXBsaWVyOworCX0gZGVsYXlbOF07Cit9IF9fcGFja2VkOworCisvKioqKioqKioqKioqKioqKioqKiogR2V0IE1BQyBBRERSICoqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgRVRIX0FMRU4JNgorCisKK3N0cnVjdCBiZV9jbWRfcmVxX2dldF9tYWNfYWRkciB7CisJc3RydWN0IGJlX2NtZF9yZXFfaGRyIGhkcjsKKwl1MzIgbmljX3BvcnRfY291bnQ7CisJdTMyIHNwZWVkOworCXUzMiBtYXhfc3BlZWQ7CisJdTMyIGxpbmtfc3RhdGU7CisJdTMyIG1heF9mcmFtZV9zaXplOworCXUxNiBzaXplX29mX3N0cnVjdHVyZTsKKwl1OCBtYWNfYWRkcmVzc1tFVEhfQUxFTl07CisJdTMyIHJzdmRbMjNdOworfTsKKworc3RydWN0IGJlX2NtZF9yZXNwX2dldF9tYWNfYWRkciB7CisJc3RydWN0IGJlX2NtZF9yZXNwX2hkciBoZHI7CisJdTMyIG5pY19wb3J0X2NvdW50OworCXUzMiBzcGVlZDsKKwl1MzIgbWF4X3NwZWVkOworCXUzMiBsaW5rX3N0YXRlOworCXUzMiBtYXhfZnJhbWVfc2l6ZTsKKwl1MTYgc2l6ZV9vZl9zdHJ1Y3R1cmU7CisJdTggbWFjX2FkZHJlc3NbNl07CisJdTMyIHJzdmRbMjNdOworfTsKKworaW50IGJlaXNjc2lfY21kX2VxX2NyZWF0ZShzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsLAorCQkJICBzdHJ1Y3QgYmVfcXVldWVfaW5mbyAqZXEsIGludCBlcV9kZWxheSk7CisKK2ludCBiZWlzY3NpX2NtZF9jcV9jcmVhdGUoc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCwKKwkJCSAgc3RydWN0IGJlX3F1ZXVlX2luZm8gKmNxLCBzdHJ1Y3QgYmVfcXVldWVfaW5mbyAqZXEsCisJCQkgIGJvb2wgc29sX2V2dHMsIGJvb2wgbm9fZGVsYXksCisJCQkgIGludCBudW1fY3FlX2RtYV9jb2FsZXNjZSk7CisKK2ludCBiZWlzY3NpX2NtZF9xX2Rlc3Ryb3koc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCwgc3RydWN0IGJlX3F1ZXVlX2luZm8gKnEsCisJCQkgIGludCB0eXBlKTsKK2ludCBiZV9wb2xsX21jYyhzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsKTsKK3Vuc2lnbmVkIGNoYXIgbWdtdF9jaGVja19zdXBwb3J0ZWRfZncoc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCk7CitpbnQgYmVfY21kX2dldF9tYWNfYWRkcihzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsLCB1OCAqbWFjX2FkZHIpOworCisvKklTQ1NJIEZ1bmN0dWlvbnMgKi8KK2ludCBiZV9jbWRfZndfaW5pdGlhbGl6ZShzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsKTsKKworc3RydWN0IGJlX21jY193cmIgKndyYl9mcm9tX21ib3goc3RydWN0IGJlX2RtYV9tZW0gKm1ib3hfbWVtKTsKKworaW50IGJlX21ib3hfbm90aWZ5KHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwpOworCitpbnQgYmVfY21kX2NyZWF0ZV9kZWZhdWx0X3BkdV9xdWV1ZShzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsLAorCQkJCSAgICBzdHJ1Y3QgYmVfcXVldWVfaW5mbyAqY3EsCisJCQkJICAgIHN0cnVjdCBiZV9xdWV1ZV9pbmZvICpkcSwgaW50IGxlbmd0aCwKKwkJCQkgICAgaW50IGVudHJ5X3NpemUpOworCitpbnQgYmVfY21kX2lzY3NpX3Bvc3Rfc2dsX3BhZ2VzKHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwsCisJCQkJc3RydWN0IGJlX2RtYV9tZW0gKnFfbWVtLCB1MzIgcGFnZV9vZmZzZXQsCisJCQkJdTMyIG51bV9wYWdlcyk7CisKK2ludCBiZV9jbWRfd3JicV9jcmVhdGUoc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCwgc3RydWN0IGJlX2RtYV9tZW0gKnFfbWVtLAorCQkgICAgICAgc3RydWN0IGJlX3F1ZXVlX2luZm8gKndyYnEpOworCitzdHJ1Y3QgYmVfZGVmYXVsdF9wZHVfY29udGV4dCB7CisJdTMyIGR3WzRdOworfSBfX3BhY2tlZDsKKworc3RydWN0IGFtYXBfYmVfZGVmYXVsdF9wZHVfY29udGV4dCB7CisJdTggZGJ1Zl9jaW5kZXhbMTNdOwkvKiBkd29yZCAwICovCisJdTggcnN2ZDBbM107CQkvKiBkd29yZCAwICovCisJdTggcmluZ19zaXplWzRdOwkvKiBkd29yZCAwICovCisJdTggcmluZ19zdGF0ZVs0XTsJLyogZHdvcmQgMCAqLworCXU4IHJzdmQxWzhdOwkJLyogZHdvcmQgMCAqLworCXU4IGRidWZfcGluZGV4WzEzXTsJLyogZHdvcmQgMSAqLworCXU4IHJzdmQyOwkJLyogZHdvcmQgMSAqLworCXU4IHBjaV9mdW5jX2lkWzhdOwkvKiBkd29yZCAxICovCisJdTggcnhfcGRpZFs5XTsJCS8qIGR3b3JkIDEgKi8KKwl1OCByeF9wZGlkX3ZhbGlkOwkvKiBkd29yZCAxICovCisJdTggZGVmYXVsdF9idWZmZXJfc2l6ZVsxNl07CS8qIGR3b3JkIDIgKi8KKwl1OCBjcV9pZF9yZWN2WzEwXTsJLyogZHdvcmQgMiAqLworCXU4IHJ4X3BkaWRfbm90X3ZhbGlkOwkvKiBkd29yZCAyICovCisJdTggcnN2ZDNbNV07CQkvKiBkd29yZCAyICovCisJdTggcnN2ZDRbMzJdOwkJLyogZHdvcmQgMyAqLworfSBfX3BhY2tlZDsKKworc3RydWN0IGJlX2RlZnFfY3JlYXRlX3JlcSB7CisJc3RydWN0IGJlX2NtZF9yZXFfaGRyIGhkcjsKKwl1MTYgbnVtX3BhZ2VzOworCXU4IHVscF9udW07CisJdTggcnN2ZDA7CisJc3RydWN0IGJlX2RlZmF1bHRfcGR1X2NvbnRleHQgY29udGV4dDsKKwlzdHJ1Y3QgcGh5c19hZGRyIHBhZ2VzWzhdOworfSBfX3BhY2tlZDsKKworc3RydWN0IGJlX2RlZnFfY3JlYXRlX3Jlc3AgeworCXN0cnVjdCBiZV9jbWRfcmVxX2hkciBoZHI7CisJdTE2IGlkOworCXUxNiByc3ZkMDsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBiZV9wb3N0X3NnbF9wYWdlc19yZXEgeworCXN0cnVjdCBiZV9jbWRfcmVxX2hkciBoZHI7CisJdTE2IG51bV9wYWdlczsKKwl1MTYgcGFnZV9vZmZzZXQ7CisJdTMyIHJzdmQwOworCXN0cnVjdCBwaHlzX2FkZHIgcGFnZXNbMjZdOworCXUzMiByc3ZkMTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBiZV93cmJxX2NyZWF0ZV9yZXEgeworCXN0cnVjdCBiZV9jbWRfcmVxX2hkciBoZHI7CisJdTE2IG51bV9wYWdlczsKKwl1OCB1bHBfbnVtOworCXU4IHJzdmQwOworCXN0cnVjdCBwaHlzX2FkZHIgcGFnZXNbOF07Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgYmVfd3JicV9jcmVhdGVfcmVzcCB7CisJc3RydWN0IGJlX2NtZF9yZXNwX2hkciByZXNwX2hkcjsKKwl1MTYgY2lkOworCXUxNiByc3ZkMDsKK30gX19wYWNrZWQ7CisKKyNkZWZpbmUgU09MX0NJRF9NQVNLCQkweDAwMDBGRkMwCisjZGVmaW5lIFNPTF9DT0RFX01BU0sJCTB4MDAwMDAwM0YKKyNkZWZpbmUgU09MX1dSQl9JTkRFWF9NQVNLCTB4MDBGRjAwMDAKKyNkZWZpbmUgU09MX0NNRF9XTkRfTUFTSwkweEZGMDAwMDAwCisjZGVmaW5lIFNPTF9SRVNfQ05UX01BU0sJMHg3RkZGRkZGRgorI2RlZmluZSBTT0xfRVhQX0NNRF9TTl9NQVNLCTB4RkZGRkZGRkYKKyNkZWZpbmUgU09MX0hXX1NUU19NQVNLCQkweDAwMDAwMEZGCisjZGVmaW5lIFNPTF9TVFNfTUFTSwkJMHgwMDAwRkYwMAorI2RlZmluZSBTT0xfUkVTUF9NQVNLCQkweDAwRkYwMDAwCisjZGVmaW5lIFNPTF9GTEFHU19NQVNLCQkweDdGMDAwMDAwCisjZGVmaW5lIFNPTF9TX01BU0sJCTB4ODAwMDAwMDAKKworc3RydWN0IHNvbF9jcWUgeworCXUzMiBkd1s0XTsKK307CisKK3N0cnVjdCBhbWFwX3NvbF9jcWUgeworCXU4IGh3X3N0c1s4XTsJCS8qIGR3b3JkIDAgKi8KKwl1OCBpX3N0c1s4XTsJCS8qIGR3b3JkIDAgKi8KKwl1OCBpX3Jlc3BbOF07CQkvKiBkd29yZCAwICovCisJdTggaV9mbGFnc1s3XTsJCS8qIGR3b3JkIDAgKi8KKwl1OCBzOwkJCS8qIGR3b3JkIDAgKi8KKwl1OCBpX2V4cF9jbWRfc25bMzJdOwkvKiBkd29yZCAxICovCisJdTggY29kZVs2XTsJCS8qIGR3b3JkIDIgKi8KKwl1OCBjaWRbMTBdOwkJLyogZHdvcmQgMiAqLworCXU4IHdyYl9pbmRleFs4XTsJLyogZHdvcmQgMiAqLworCXU4IGlfY21kX3duZFs4XTsJLyogZHdvcmQgMiAqLworCXU4IGlfcmVzX2NudFszMV07CS8qIGR3b3JkIDMgKi8KKwl1OCB2YWxpZDsJCS8qIGR3b3JkIDMgKi8KK30gX19wYWNrZWQ7CisKKworLyoqCisgKiBQb3N0IFdSQiBRdWV1ZSBEb29yYmVsbCBSZWdpc3RlciB1c2VkIGJ5IHRoZSBob3N0IFN0b3JhZ2UKKyAqIHN0YWNrIHRvIG5vdGlmeSB0aGUKKyAqIGNvbnRyb2xsZXIgb2YgYSBwb3N0ZWQgV29yayBSZXF1ZXN0IEJsb2NrCisgKi8KKyNkZWZpbmUgREJfV1JCX1BPU1RfQ0lEX01BU0sJCTB4M0ZGCS8qIGJpdHMgMCAtIDkgKi8KKyNkZWZpbmUgREJfREVGX1BEVV9XUkJfSU5ERVhfTUFTSwkweEZGCS8qIGJpdHMgMCAtIDkgKi8KKworI2RlZmluZSBEQl9ERUZfUERVX1dSQl9JTkRFWF9TSElGVAkxNgorI2RlZmluZSBEQl9ERUZfUERVX05VTV9QT1NURURfU0hJRlQJMjQKKworc3RydWN0IGZyYWdudW1fYml0c19mb3Jfc2dsX2NyYV9pbiB7CisJc3RydWN0IGJlX2NtZF9yZXFfaGRyIGhkcjsKKwl1MzIgbnVtX2JpdHM7Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgaXNjc2lfY2xlYW51cF9yZXEgeworCXN0cnVjdCBiZV9jbWRfcmVxX2hkciBoZHI7CisJdTE2IGNodXRlOworCXU4IGhkcl9yaW5nX2lkOworCXU4IGRhdGFfcmluZ19pZDsKKworfSBfX3BhY2tlZDsKKworc3RydWN0IGVxX2RlbGF5IHsKKwl1MzIgZXFfaWQ7CisJdTMyIHBoYXNlOworCXUzMiBkZWxheV9tdWx0aXBsaWVyOworfSBfX3BhY2tlZDsKKworc3RydWN0IGJlX2VxX2RlbGF5X3BhcmFtc19pbiB7CisJc3RydWN0IGJlX2NtZF9yZXFfaGRyIGhkcjsKKwl1MzIgbnVtX2VxOworCXN0cnVjdCBlcV9kZWxheSBkZWxheVs4XTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBpcF9hZGRyZXNzX2Zvcm1hdCB7CisJdTE2IHNpemVfb2Zfc3RydWN0dXJlOworCXU4IHJlc2VydmVkOworCXU4IGlwX3R5cGU7CisJdTggaXBfYWRkcmVzc1sxNl07CisJdTMyIHJzdmQwOworfSBfX3BhY2tlZDsKKworc3RydWN0IHRjcF9jb25uZWN0X2FuZF9vZmZsb2FkX2luIHsKKwlzdHJ1Y3QgYmVfY21kX3JlcV9oZHIgaGRyOworCXN0cnVjdCBpcF9hZGRyZXNzX2Zvcm1hdCBpcF9hZGRyZXNzOworCXUxNiB0Y3BfcG9ydDsKKwl1MTYgY2lkOworCXUxNiBjcV9pZDsKKwl1MTYgZGVmcV9pZDsKKwlzdHJ1Y3QgcGh5c19hZGRyIGRhdGFvdXRfdGVtcGxhdGVfcGE7CisJdTE2IGhkcl9yaW5nX2lkOworCXUxNiBkYXRhX3JpbmdfaWQ7CisJdTggZG9fb2ZmbG9hZDsKKwl1OCByc3ZkMFszXTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCB0Y3BfY29ubmVjdF9hbmRfb2ZmbG9hZF9vdXQgeworCXN0cnVjdCBiZV9jbWRfcmVzcF9oZHIgaGRyOworCXUzMiBjb25uZWN0aW9uX2hhbmRsZTsKKwl1MTYgY2lkOworCXUxNiByc3ZkMDsKKworfSBfX3BhY2tlZDsKKworc3RydWN0IGJlX21jY193cmJfY29udGV4dCB7CisJc3RydWN0IE1DQ19XUkIgKndyYjsKKwlpbnQgKnVzZXJzX2ZpbmFsX3N0YXR1czsKK30gX19wYWNrZWQ7CisKKyNkZWZpbmUgREJfREVGX1BEVV9SSU5HX0lEX01BU0sJCTB4M0ZGCS8qIGJpdHMgMCAtIDkgKi8KKyNkZWZpbmUgREJfREVGX1BEVV9DUVBST0NfTUFTSwkJMHgzRkZGCS8qIGJpdHMgMCAtIDkgKi8KKyNkZWZpbmUgREJfREVGX1BEVV9SRUFSTV9TSElGVAkJMTQKKyNkZWZpbmUgREJfREVGX1BEVV9FVkVOVF9TSElGVAkJMTUKKyNkZWZpbmUgREJfREVGX1BEVV9DUVBST0NfU0hJRlQJCTE2CisKK3N0cnVjdCBkbXNnX2NxZSB7CisJdTMyIGR3WzRdOworfSBfX3BhY2tlZDsKKworc3RydWN0IHRjcF91cGxvYWRfcGFyYW1zX2luIHsKKwlzdHJ1Y3QgYmVfY21kX3JlcV9oZHIgaGRyOworCXUxNiBpZDsKKwl1MTYgdXBsb2FkX3R5cGU7CisJdTMyIHJlc2V0X3NlcTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCB0Y3BfdXBsb2FkX3BhcmFtc19vdXQgeworCXUzMiBkd1szMl07Cit9IF9fcGFja2VkOworCit1bmlvbiB0Y3BfdXBsb2FkX3BhcmFtcyB7CisJc3RydWN0IHRjcF91cGxvYWRfcGFyYW1zX2luIHJlcXVlc3Q7CisJc3RydWN0IHRjcF91cGxvYWRfcGFyYW1zX291dCByZXNwb25zZTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBiZV91bHBfZndfY2ZnIHsKKwl1MzIgdWxwX21vZGU7CisJdTMyIGV0eF9iYXNlOworCXUzMiBldHhfY291bnQ7CisJdTMyIHNxX2Jhc2U7CisJdTMyIHNxX2NvdW50OworCXUzMiBycV9iYXNlOworCXUzMiBycV9jb3VudDsKKwl1MzIgZHFfYmFzZTsKKwl1MzIgZHFfY291bnQ7CisJdTMyIGxyb19iYXNlOworCXUzMiBscm9fY291bnQ7CisJdTMyIGljZF9iYXNlOworCXUzMiBpY2RfY291bnQ7Cit9OworCitzdHJ1Y3QgYmVfZndfY2ZnIHsKKwlzdHJ1Y3QgYmVfY21kX3JlcV9oZHIgaGRyOworCXUzMiBiZV9jb25maWdfbnVtYmVyOworCXUzMiBhc2ljX3JldmlzaW9uOworCXUzMiBwaHlzX3BvcnQ7CisJdTMyIGZ1bmN0aW9uX21vZGU7CisJc3RydWN0IGJlX3VscF9md19jZmcgdWxwWzJdOworCXUzMiBmdW5jdGlvbl9jYXBzOworfSBfX3BhY2tlZDsKKworI2RlZmluZSBDTURfSVNDU0lfQ09NTUFORF9JTlZBTElEQVRFICAxCisjZGVmaW5lIElTQ1NJX09QQ09ERV9TQ1NJX0RBVEFfT1VUICAgICAgNQorI2RlZmluZSBPUENPREVfQ09NTU9OX0lTQ1NJX1RDUF9DT05ORUNUX0FORF9PRkZMT0FEIDcwCisjZGVmaW5lIE9QQ09ERV9JU0NTSV9JTklfRFJJVkVSX09GRkxPQURfU0VTU0lPTiA0MQorI2RlZmluZSBPUENPREVfQ09NTU9OX01PRElGWV9FUV9ERUxBWQk0MQorI2RlZmluZSBPUENPREVfQ09NTU9OX0lTQ1NJX0NMRUFOVVAJNTkKKyNkZWZpbmUJT1BDT0RFX0NPTU1PTl9UQ1BfVVBMT0FECTU2CisjZGVmaW5lIE9QQ09ERV9DT01NT05fSVNDU0lfRVJST1JfUkVDT1ZFUllfSU5WQUxJREFURV9DT01NQU5EUyAxCisvKiAtLS0gQ01EX0lTQ1NJX0lOVkFMSURBVEVfQ09OTkVDVElPTl9UWVBFIC0tLSAqLworI2RlZmluZSBDTURfSVNDU0lfQ09OTkVDVElPTl9JTlZBTElEQVRFIDEKKyNkZWZpbmUgQ01EX0lTQ1NJX0NPTk5FQ1RJT05fSVNTVUVfVENQX1JTVCAyCisjZGVmaW5lIE9QQ09ERV9JU0NTSV9JTklfRFJJVkVSX0lOVkFMSURBVEVfQ09OTkVDVElPTiA0MgorCisjZGVmaW5lIElOSV9XUl9DTUQJCQkxCS8qIEluaXRpYXRvciB3cml0ZSBjb21tYW5kICovCisjZGVmaW5lIElOSV9UTUZfQ01ECQkJMgkvKiBJbml0aWF0b3IgVE1GIGNvbW1hbmQgKi8KKyNkZWZpbmUgSU5JX05PUE9VVF9DTUQJCQkzCS8qIEluaXRpYXRvcjsgU2VuZCBhIE5PUC1PVVQgKi8KKyNkZWZpbmUgSU5JX1JEX0NNRAkJCTUJLyogSW5pdGlhdG9yIHJlcXVlc3RpbmcgdG8gc2VuZAorCQkJCQkJICogYSByZWFkIGNvbW1hbmQKKwkJCQkJCSAqLworI2RlZmluZSBUR1RfQ1RYX1VQRFRfQ01ECQk3CS8qIFRhcmdldCBjb250ZXh0IHVwZGF0ZSAqLworI2RlZmluZSBUR1RfU1RTX0NNRAkJCTgJLyogVGFyZ2V0IFIyVCBhbmQgb3RoZXIgQkhTCisJCQkJCQkgKiB3aGVyZSBvbmx5IHRoZSBzdGF0dXMgbnVtYmVyCisJCQkJCQkgKiBuZWVkIHRvIGJlIHVwZGF0ZWQKKwkJCQkJCSAqLworI2RlZmluZSBUR1RfREFUQUlOX0NNRAkJCTkJLyogVGFyZ2V0IERhdGEtSW5zIGluIHJlc3BvbnNlCisJCQkJCQkgKiB0byByZWFkIGNvbW1hbmQKKwkJCQkJCSAqLworI2RlZmluZSBUR1RfU09TX1BEVQkJCTEwCS8qIFRhcmdldDpzdGFuZGFsb25lIHN0YXR1cworCQkJCQkJICogcmVzcG9uc2UKKwkJCQkJCSAqLworI2RlZmluZSBUR1RfRE1fQ01ECQkJMTEJLyogSW5kaWNhdGVzIHRoYXQgdGhlIGJocworCQkJCQkJICogIHByZXBhcmVkYnkKKwkJCQkJCSAqIGRyaXZlciBzaG91bGQgbm90IGJlIHRvdWNoZWQKKwkJCQkJCSAqLworLyogLS0tIENNRF9DSFVURV9UWVBFIC0tLSAqLworI2RlZmluZSBDTURfQ09OTkVDVElPTl9DSFVURV8wCQkxCisjZGVmaW5lIENNRF9DT05ORUNUSU9OX0NIVVRFXzEJCTIKKyNkZWZpbmUgQ01EX0NPTk5FQ1RJT05fQ0hVVEVfMgkJMworCisjZGVmaW5lIEVRX01BSk9SX0NPREVfQ09NUExFVElPTgkwCisKKyNkZWZpbmUgQ01EX0lTQ1NJX1NFU1NJT05fREVMX0NGR19GUk9NX0ZMQVNIIDAKKyNkZWZpbmUgQ01EX0lTQ1NJX1NFU1NJT05fU0FWRV9DRkdfT05fRkxBU0ggMQorCisvKiAtLS0gQ09OTkVDVElPTl9VUExPQURfUEFSQU1TIC0tLSAqLworLyogVGhlc2UgcGFyYW1ldGVycyBhcmUgdXNlZCB0byBkZWZpbmUgdGhlIHR5cGUgb2YgdXBsb2FkIGRlc2lyZWQuICAqLworI2RlZmluZSBDT05ORUNUSU9OX1VQTE9BRF9HUkFDRUZVTCAgICAgIDEJLyogR3JhY2VmdWwgdXBsb2FkICAqLworI2RlZmluZSBDT05ORUNUSU9OX1VQTE9BRF9BQk9SVF9SRVNFVCAgIDIJLyogQWJvcnRpdmUgdXBsb2FkIHdpdGgKKwkJCQkJCSAqIHJlc2V0CisJCQkJCQkgKi8KKyNkZWZpbmUgQ09OTkVDVElPTl9VUExPQURfQUJPUlQJCTMJLyogQWJvcnRpdmUgdXBsb2FkIHdpdGhvdXQKKwkJCQkJCSAqIHJlc2V0CisJCQkJCQkgKi8KKyNkZWZpbmUgQ09OTkVDVElPTl9VUExPQURfQUJPUlRfV0lUSF9TRVEgNAkvKiBBYm9ydGl2ZSB1cGxvYWQgd2l0aCByZXNldCwKKwkJCQkJCSAqIHNlcXVlbmNlIG51bWJlciBieSBkcml2ZXIgICovCisKKy8qIFJldHVybnMgYnl0ZSBzaXplIG9mIGdpdmVuIGZpZWxkIHdpdGggYSBzdHJ1Y3R1cmUuICovCisKKy8qIFJldHVybnMgdGhlIG51bWJlciBvZiBpdGVtcyBpbiB0aGUgZmllbGQgYXJyYXkuICovCisjZGVmaW5lIEJFX05VTUJFUl9PRl9GSUVMRChfdHlwZV8sIF9maWVsZF8pCVwKKwkoRklFTERfU0laRU9GKF90eXBlXywgX2ZpZWxkXykvc2l6ZW9mKCgoKF90eXBlXyAqKTApLT5fZmllbGRfWzBdKSkpXAorCisvKioKKyAqIERpZmZlcmVudCB0eXBlcyBvZiBpU0NTSSBjb21wbGV0aW9ucyB0byBob3N0IGRyaXZlciBmb3IgYm90aCBpbml0aWF0b3IKKyAqIGFuZCB0YWdldCBtb2RlCisgKiBvZiBvcGVyYXRpb24uCisgKi8KKyNkZWZpbmUgU09MX0NNRF9DT01QTEVURQkJMQkvKiBTb2xpY2l0ZWQgY29tbWFuZCBjb21wbGV0ZWQKKwkJCQkJCSAqIG5vcm1hbGx5CisJCQkJCQkgKi8KKyNkZWZpbmUgU09MX0NNRF9LSUxMRURfREFUQV9ESUdFU1RfRVJSICAyCS8qIFNvbGljaXRlZCBjb21tYW5kIGdvdAorCQkJCQkJICogaW52YWxpZGF0ZWQgaW50ZXJuYWxseSBkdWUKKwkJCQkJCSAqIHRvIERhdGEgRGlnZXN0IGVycm9yCisJCQkJCQkgKi8KKyNkZWZpbmUgQ1hOX0tJTExFRF9QRFVfU0laRV9FWENFRURTX0RTTCAzCS8qIENvbm5lY3Rpb24gZ290IGludmFsaWRhdGVkCisJCQkJCQkgKiBpbnRlcm5hbGx5CisJCQkJCQkgKiBkdWUgdG8gYSByZWNpZXZlZCBQRFUKKwkJCQkJCSAqIHNpemUgPiBEU0wKKwkJCQkJCSAqLworI2RlZmluZSBDWE5fS0lMTEVEX0JVUlNUX0xFTl9NSVNNQVRDSCAgIDQJLyogQ29ubmVjdGlvbiBnb3QgaW52YWxpZGF0ZWQKKwkJCQkJCSAqIGludGVybmFsbHkgZHVlIHRpIHJlY2VpdmVkCisJCQkJCQkgKiBQRFUgc2VxdWVuY2Ugc2l6ZSA+CisJCQkJCQkgKiBGQkwvTUJMLgorCQkJCQkJICovCisjZGVmaW5lIENYTl9LSUxMRURfQUhTX1JDVkQJCTUJLyogQ29ubmVjdGlvbiBnb3QgaW52YWxpZGF0ZWQKKwkJCQkJCSAqIGludGVybmFsbHkgZHVlIHRvIGEgcmVjaWV2ZWQKKwkJCQkJCSAqIFBEVSBIZHIgdGhhdCBoYXMKKwkJCQkJCSAqIEFIUyAqLworI2RlZmluZSBDWE5fS0lMTEVEX0hEUl9ESUdFU1RfRVJSCTYJLyogQ29ubmVjdGlvbiBnb3QgaW52YWxpZGF0ZWQKKwkJCQkJCSAqIGludGVybmFsbHkgZHVlIHRvIEhkciBEaWdlc3QKKwkJCQkJCSAqIGVycm9yCisJCQkJCQkgKi8KKyNkZWZpbmUgQ1hOX0tJTExFRF9VTktOT1dOX0hEUgkJNwkvKiBDb25uZWN0aW9uIGdvdCBpbnZhbGlkYXRlZAorCQkJCQkJICogIGludGVybmFsbHkKKwkJCQkJCSAqIGR1ZSB0byBhIGJhZCBvcGNvZGUgaW4gdGhlCisJCQkJCQkgKiBwZHUgaGRyCisJCQkJCQkgKi8KKyNkZWZpbmUgQ1hOX0tJTExFRF9TVEFMRV9JVFRfVFRUX1JDVkQJOAkvKiBDb25uZWN0aW9uIGdvdCBpbnZhbGlkYXRlZAorCQkJCQkJICogaW50ZXJuYWxseSBkdWUgdG8gYSByZWNpZXZlZAorCQkJCQkJICogSVRUL1RUVCB0aGF0IGRvZXMgbm90IGJlbG9uZworCQkJCQkJICogdG8gdGhpcyBDb25uZWN0aW9uCisJCQkJCQkgKi8KKyNkZWZpbmUgQ1hOX0tJTExFRF9JTlZBTElEX0lUVF9UVFRfUkNWRCA5CS8qIENvbm5lY3Rpb24gZ290IGludmFsaWRhdGVkCisJCQkJCQkgKiBpbnRlcm5hbGx5IGR1ZSB0byByZWNpZXZlZAorCQkJCQkJICogSVRUL1RUVCB2YWx1ZSA+IE1heAorCQkJCQkJICogU3VwcG9ydGVkIElUVHMvVFRUcworCQkJCQkJICovCisjZGVmaW5lIENYTl9LSUxMRURfUlNUX1JDVkQJCTEwCS8qIENvbm5lY3Rpb24gZ290IGludmFsaWRhdGVkCisJCQkJCQkgKiBpbnRlcm5hbGx5IGR1ZSB0byBhbgorCQkJCQkJICogaW5jb21pbmcgVENQIFJTVAorCQkJCQkJICovCisjZGVmaW5lIENYTl9LSUxMRURfVElNRURfT1VUCQkxMQkvKiBDb25uZWN0aW9uIGdvdCBpbnZhbGlkYXRlZAorCQkJCQkJICogaW50ZXJuYWxseSBkdWUgdG8gdGltZW91dCBvbgorCQkJCQkJICogdGNwIHNlZ21lbnQgMTIgcmV0cmFuc21pdAorCQkJCQkJICogYXR0ZW1wdHMgZmFpbGVkCisJCQkJCQkgKi8KKyNkZWZpbmUgQ1hOX0tJTExFRF9SU1RfU0VOVAkJMTIJLyogQ29ubmVjdGlvbiBnb3QgaW52YWxpZGF0ZWQKKwkJCQkJCSAqIGludGVybmFsbHkgZHVlIHRvIFRDUCBSU1QKKwkJCQkJCSAqIHNlbnQgYnkgdGhlIFR4IHNpZGUKKwkJCQkJCSAqLworI2RlZmluZSBDWE5fS0lMTEVEX0ZJTl9SQ1ZECQkxMwkvKiBDb25uZWN0aW9uIGdvdCBpbnZhbGlkYXRlZAorCQkJCQkJICogaW50ZXJuYWxseSBkdWUgdG8gYW4KKwkJCQkJCSAqIGluY29taW5nIFRDUCBGSU4uCisJCQkJCQkgKi8KKyNkZWZpbmUgQ1hOX0tJTExFRF9CQURfVU5TT0xfUERVX1JDVkQJMTQJLyogQ29ubmVjdGlvbiBnb3QgaW52YWxpZGF0ZWQKKwkJCQkJCSAqIGludGVybmFsbHkgZHVlIHRvIGJhZAorCQkJCQkJICogdW5zb2xpY2l0ZWQgUERVIFVuc29saWNpdGVkCisJCQkJCQkgKiBQRFVzIGFyZSBQRFVzIHdpdGgKKwkJCQkJCSAqIElUVD0weGZmZmZmZmZmCisJCQkJCQkgKi8KKyNkZWZpbmUgQ1hOX0tJTExFRF9CQURfV1JCX0lOREVYX0VSUk9SCTE1CS8qIENvbm5lY3Rpb24gZ290IGludmFsaWRhdGVkCisJCQkJCQkgKiBpbnRlcm5hbGx5IGR1ZSB0byBiYWQgV1JCCisJCQkJCQkgKiBpbmRleC4KKwkJCQkJCSAqLworI2RlZmluZSBDWE5fS0lMTEVEX09WRVJfUlVOX1JFU0lEVUFMCTE2CS8qIENvbW1hbmQgZ290IGludmFsaWRhdGVkCisJCQkJCQkgKiBpbnRlcm5hbGx5IGR1ZSB0byByZWNpdmVkCisJCQkJCQkgKiBjb21tYW5kIGhhcyByZXNpZHVhbAorCQkJCQkJICogb3ZlciBydW4gYnl0ZXMuCisJCQkJCQkgKi8KKyNkZWZpbmUgQ1hOX0tJTExFRF9VTkRFUl9SVU5fUkVTSURVQUwJMTcJLyogQ29tbWFuZCBnb3QgaW52YWxpZGF0ZWQKKwkJCQkJCSAqIGludGVybmFsbHkgZHVlIHRvIHJlY2l2ZWQKKwkJCQkJCSAqIGNvbW1hbmQgaGFzIHJlc2lkdWFsIHVuZGVyCisJCQkJCQkgKiBydW4gYnl0ZXMuCisJCQkJCQkgKi8KKyNkZWZpbmUgQ01EX0tJTExFRF9JTlZBTElEX1NUQVRTTl9SQ1ZECTE4CS8qIENvbW1hbmQgZ290IGludmFsaWRhdGVkCisJCQkJCQkgKiBpbnRlcm5hbGx5IGR1ZSB0byBhIHJlY2lldmVkCisJCQkJCQkgKiBQRFUgaGFzIGFuIGludmFsaWQgU3RhdHVzU04KKwkJCQkJCSAqLworI2RlZmluZSBDTURfS0lMTEVEX0lOVkFMSURfUjJUX1JDVkQJMTkJLyogQ29tbWFuZCBnb3QgaW52YWxpZGF0ZWQKKwkJCQkJCSAqIGludGVybmFsbHkgZHVlIHRvIGEgcmVjaWV2ZWQKKwkJCQkJCSAqIGFuIFIyVCB3aXRoIHNvbWUgaW52YWxpZAorCQkJCQkJICogZmllbGRzIGluIGl0CisJCQkJCQkgKi8KKyNkZWZpbmUgQ01EX0NYTl9LSUxMRURfTFVOX0lOVkFMSUQJMjAJLyogQ29tbWFuZCBnb3QgaW52YWxpZGF0ZWQKKwkJCQkJCSAqIGludGVybmFsbHkgZHVlIHRvIHJlY2VpdmVkCisJCQkJCQkgKiBQRFUgaGFzIGFuIGludmFsaWQgTFVOLgorCQkJCQkJICovCisjZGVmaW5lIENNRF9DWE5fS0lMTEVEX0lDRF9JTlZBTElECTIxCS8qIENvbW1hbmQgZ290IGludmFsaWRhdGVkCisJCQkJCQkgKiBpbnRlcm5hbGx5IGR1ZSB0byB0aGUKKwkJCQkJCSAqIGNvcnJlc3BvbmRpbmcgSUNEIG5vdCBpbiBhCisJCQkJCQkgKiB2YWxpZCBzdGF0ZQorCQkJCQkJICovCisjZGVmaW5lIENNRF9DWE5fS0lMTEVEX0lUVF9JTlZBTElECTIyCS8qIENvbW1hbmQgZ290IGludmFsaWRhdGVkIGR1ZQorCQkJCQkJICogIHRvIHJlY2VpdmVkIFBEVSBoYXMgYW4KKwkJCQkJCSAqICBpbnZhbGlkIElUVC4KKwkJCQkJCSAqLworI2RlZmluZSBDTURfQ1hOX0tJTExFRF9TRVFfT1VUT0ZPUkRFUgkyMwkvKiBDb21tYW5kIGdvdCBpbnZhbGlkYXRlZCBkdWUKKwkJCQkJCSAqIHRvIHJlY2VpdmVkIHNlcXVlbmNlIGJ1ZmZlcgorCQkJCQkJICogb2Zmc2V0IGlzIG91dCBvZiBvcmRlci4KKwkJCQkJCSAqLworI2RlZmluZSBDTURfQ1hOX0tJTExFRF9JTlZBTElEX0RBVEFTTl9SQ1ZEIDI0CS8qIENvbW1hbmQgZ290IGludmFsaWRhdGVkCisJCQkJCQkgKiBpbnRlcm5hbGx5IGR1ZSB0byBhCisJCQkJCQkgKiByZWNpZXZlZCBQRFUgaGFzIGFuIGludmFsaWQKKwkJCQkJCSAqIERhdGFTTgorCQkJCQkJICovCisjZGVmaW5lIENYTl9JTlZBTElEQVRFX05PVElGWQkJMjUJLyogQ29ubmVjdGlvbiBpbnZhbGlkYXRpb24KKwkJCQkJCSAqIGNvbXBsZXRpb24gbm90aWZ5LgorCQkJCQkJICovCisjZGVmaW5lIENYTl9JTlZBTElEQVRFX0lOREVYX05PVElGWQkyNgkvKiBDb25uZWN0aW9uIGludmFsaWRhdGlvbgorCQkJCQkJICogY29tcGxldGlvbgorCQkJCQkJICogd2l0aCBkYXRhIFBEVSBpbmRleC4KKwkJCQkJCSAqLworI2RlZmluZSBDTURfSU5WQUxJREFURURfTk9USUZZCQkyNwkvKiBDb21tYW5kIGludmFsaWRhdGlvbgorCQkJCQkJICogY29tcGxldGlvbm5vdGlmaWZ5LgorCQkJCQkJICovCisjZGVmaW5lIFVOU09MX0hEUl9OT1RJRlkJCTI4CS8qIFVuc29saWNpdGVkIGhlYWRlciBub3RpZnkuKi8KKyNkZWZpbmUgVU5TT0xfREFUQV9OT1RJRlkJCTI5CS8qIFVuc29saWNpdGVkIGRhdGEgbm90aWZ5LiovCisjZGVmaW5lIFVOU09MX0RBVEFfRElHRVNUX0VSUk9SX05PVElGWSAJMzAJLyogVW5zb2xpY2l0ZWQgZGF0YSBkaWdlc3QKKwkJCQkJCSAqIGVycm9yIG5vdGlmeS4KKwkJCQkJCSAqLworI2RlZmluZSBEUklWRVJNU0dfTk9USUZZCQkzMQkvKiBUQ1AgYWNrbm93bGVkZ2UgYmFzZWQKKwkJCQkJCSAqIG5vdGlmaWNhdGlvbi4KKwkJCQkJCSAqLworI2RlZmluZSBDWE5fS0lMTEVEX0NNTkRfREFUQV9OT1RfT05fU0FNRV9DT05OIDMyIC8qIENvbm5lY3Rpb24gZ290IGludmFsaWRhdGVkCisJCQkJCQkgICogaW50ZXJuYWxseSBkdWUgdG8gY29tbWFuZAorCQkJCQkJICAqIGFuZCBkYXRhIGFyZSBub3Qgb24gc2FtZQorCQkJCQkJICAqIGNvbm5lY3Rpb24uCisJCQkJCQkgICovCisjZGVmaW5lIFNPTF9DTURfS0lMTEVEX0RJRl9FUlIJCTMzCS8qIFNvbGljaXRlZCBjb21tYW5kIGdvdAorCQkJCQkJICogIGludmFsaWRhdGVkIGludGVybmFsbHkgZHVlCisJCQkJCQkgKiAgdG8gRElGIGVycm9yCisJCQkJCQkgKi8KKyNkZWZpbmUgQ1hOX0tJTExFRF9TWU5fUkNWRAkJMzQJLyogQ29ubmVjdGlvbiBnb3QgaW52YWxpZGF0ZWQKKwkJCQkJCSAqIGludGVybmFsbHkgZHVlIHRvIGluY29taW5nCisJCQkJCQkgKiBUQ1AgU1lOCisJCQkJCQkgKi8KKyNkZWZpbmUgQ1hOX0tJTExFRF9JTU1fREFUQV9SQ1ZECTM1CS8qIENvbm5lY3Rpb24gZ290IGludmFsaWRhdGVkCisJCQkJCQkgKiBpbnRlcm5hbGx5IGR1ZSB0byBhbgorCQkJCQkJICogaW5jb21pbmcgVW5zb2xpY2l0ZWQgUERVCisJCQkJCQkgKiB0aGF0IGhhcyBpbW1lZGlhdGUgZGF0YSBvbgorCQkJCQkJICogdGhlIGN4bgorCQkJCQkJICovCisKK3ZvaWQgYmVfd3JiX2hkcl9wcmVwYXJlKHN0cnVjdCBiZV9tY2Nfd3JiICp3cmIsIGludCBwYXlsb2FkX2xlbiwKKwkJCWJvb2wgZW1iZWRkZWQsIHU4IHNnZV9jbnQpOworCit2b2lkIGJlX2NtZF9oZHJfcHJlcGFyZShzdHJ1Y3QgYmVfY21kX3JlcV9oZHIgKnJlcV9oZHIsCisJCQl1OCBzdWJzeXN0ZW0sIHU4IG9wY29kZSwgaW50IGNtZF9sZW4pOworCisjZW5kaWYgLyogIUJFSVNDU0lfQ01EU19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfaXNjc2kuYyBiL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9pc2NzaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmZDI1NDQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfaXNjc2kuYwpAQCAtMCwwICsxLDYzOCBAQAorLyoqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgLSAyMDA5IFNlcnZlckVuZ2luZXMKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gIFRoZSBmdWxsIEdOVSBHZW5lcmFsCisgKiBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUgZmlsZSBjYWxsZWQgQ09QWUlORy4KKyAqCisgKiBXcml0dGVuIGJ5OiBKYXlhbW9oYW4gS2FsbGlja2FsIChqYXlhbW9oYW5rQHNlcnZlcmVuZ2luZXMuY29tKQorICoKKyAqIENvbnRhY3QgSW5mb3JtYXRpb246CisgKiBsaW51eC1kcml2ZXJzQHNlcnZlcmVuZ2luZXMuY29tCisgKgorICogU2VydmVyRW5naW5lcworICogMjA5IE4uIEZhaXIgT2FrcyBBdmUKKyAqIFN1bm55dmFsZSwgQ0EgOTQwODUKKyAqCisgKi8KKworI2luY2x1ZGUgPHNjc2kvbGliaXNjc2kuaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2lfdHJhbnNwb3J0X2lzY3NpLmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpX3RyYW5zcG9ydC5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV9jbW5kLmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpX2RldmljZS5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV9ob3N0Lmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpLmg+CisKKyNpbmNsdWRlICJiZV9pc2NzaS5oIgorCitleHRlcm4gc3RydWN0IGlzY3NpX3RyYW5zcG9ydCBiZWlzY3NpX2lzY3NpX3RyYW5zcG9ydDsKKworLyoqCisgKiBiZWlzY3NpX3Nlc3Npb25fY3JlYXRlIC0gY3JlYXRlcyBhIG5ldyBpc2NzaSBzZXNzaW9uCisgKiBAY21kc19tYXg6IG1heCBjb21tYW5kcyBzdXBwb3J0ZWQKKyAqIEBxZGVwdGg6IG1heCBxdWV1ZSBkZXB0aCBzdXBwb3J0ZWQKKyAqIEBpbml0aWFsX2NtZHNuOiBpbml0aWFsIGlzY3NpIENNRFNOCisgKi8KK3N0cnVjdCBpc2NzaV9jbHNfc2Vzc2lvbiAqYmVpc2NzaV9zZXNzaW9uX2NyZWF0ZShzdHJ1Y3QgaXNjc2lfZW5kcG9pbnQgKmVwLAorCQkJCQkJIHUxNiBjbWRzX21heCwKKwkJCQkJCSB1MTYgcWRlcHRoLAorCQkJCQkJIHUzMiBpbml0aWFsX2NtZHNuKQoreworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0OworCXN0cnVjdCBiZWlzY3NpX2VuZHBvaW50ICpiZWlzY3NpX2VwOworCXN0cnVjdCBpc2NzaV9jbHNfc2Vzc2lvbiAqY2xzX3Nlc3Npb247CisJc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhOworCXN0cnVjdCBpc2NzaV9zZXNzaW9uICpzZXNzOworCXN0cnVjdCBiZWlzY3NpX3Nlc3Npb24gKmJlaXNjc2lfc2VzczsKKwlzdHJ1Y3QgYmVpc2NzaV9pb190YXNrICppb190YXNrOworCisJU0VfREVCVUcoREJHX0xWTF84LCAiSW4gYmVpc2NzaV9zZXNzaW9uX2NyZWF0ZVxuIik7CisKKwlpZiAoIWVwKSB7CisJCVNFX0RFQlVHKERCR19MVkxfMSwgImJlaXNjc2lfc2Vzc2lvbl9jcmVhdGU6IGludmFsaWQgZXAgXG4iKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCWJlaXNjc2lfZXAgPSBlcC0+ZGRfZGF0YTsKKwlwaGJhID0gYmVpc2NzaV9lcC0+cGhiYTsKKwlzaG9zdCA9IHBoYmEtPnNob3N0OworCWlmIChjbWRzX21heCA+IGJlaXNjc2lfZXAtPnBoYmEtPnBhcmFtcy53cmJzX3Blcl9jeG4pIHsKKwkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCBzaG9zdCwgIkNhbm5vdCBoYW5kbGUgJWQgY21kcy4iCisJCQkgICAgICJNYXggY21kcyBwZXIgc2Vzc2lvbiBzdXBwb3J0ZWQgaXMgJWQuIFVzaW5nICVkLiAiCisJCQkgICAgICJcbiIsIGNtZHNfbWF4LAorCQkJICAgICAgYmVpc2NzaV9lcC0+cGhiYS0+cGFyYW1zLndyYnNfcGVyX2N4biwKKwkJCSAgICAgIGJlaXNjc2lfZXAtPnBoYmEtPnBhcmFtcy53cmJzX3Blcl9jeG4pOworCQljbWRzX21heCA9IGJlaXNjc2lfZXAtPnBoYmEtPnBhcmFtcy53cmJzX3Blcl9jeG47CisJfQorCisJIGNsc19zZXNzaW9uID0gaXNjc2lfc2Vzc2lvbl9zZXR1cCgmYmVpc2NzaV9pc2NzaV90cmFuc3BvcnQsCisJCQkJCSAgIHNob3N0LCBjbWRzX21heCwKKwkJCQkJICAgc2l6ZW9mKCpiZWlzY3NpX3Nlc3MpLAorCQkJCQkgICBzaXplb2YoKmlvX3Rhc2spLAorCQkJCQkgICBpbml0aWFsX2NtZHNuLCBJU0NTSV9NQVhfVEFSR0VUKTsKKwlpZiAoIWNsc19zZXNzaW9uKQorCQlyZXR1cm4gTlVMTDsKKwlzZXNzID0gY2xzX3Nlc3Npb24tPmRkX2RhdGE7CisJYmVpc2NzaV9zZXNzID0gc2Vzcy0+ZGRfZGF0YTsKKwliZWlzY3NpX3Nlc3MtPmJoc19wb29sID0gIHBjaV9wb29sX2NyZWF0ZSgiYmVpc2NzaV9iaHNfcG9vbCIsCisJCQkJCQkgICBwaGJhLT5wY2lkZXYsCisJCQkJCQkgICBzaXplb2Yoc3RydWN0IGJlX2NtZF9iaHMpLAorCQkJCQkJICAgNjQsIDApOworCWlmICghYmVpc2NzaV9zZXNzLT5iaHNfcG9vbCkKKwkJZ290byBkZXN0cm95X3Nlc3M7CisKKwlyZXR1cm4gY2xzX3Nlc3Npb247CitkZXN0cm95X3Nlc3M6CisJaXNjc2lfc2Vzc2lvbl90ZWFyZG93bihjbHNfc2Vzc2lvbik7CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qKgorICogYmVpc2NzaV9zZXNzaW9uX2Rlc3Ryb3kgLSBkZXN0cm95cyBpc2NzaSBzZXNzaW9uCisgKiBAY2xzX3Nlc3Npb246CXBvaW50ZXIgdG8gaXNjc2kgY2xzIHNlc3Npb24KKyAqCisgKiBEZXN0cm95cyBpU0NTSSBzZXNzaW9uIGluc3RhbmNlIGFuZCByZWxlYXNlcworICogcmVzb3VyY2VzIGFsbG9jYXRlZCBmb3IgaXQuCisgKi8KK3ZvaWQgYmVpc2NzaV9zZXNzaW9uX2Rlc3Ryb3koc3RydWN0IGlzY3NpX2Nsc19zZXNzaW9uICpjbHNfc2Vzc2lvbikKK3sKKwlzdHJ1Y3QgaXNjc2lfc2Vzc2lvbiAqc2VzcyA9IGNsc19zZXNzaW9uLT5kZF9kYXRhOworCXN0cnVjdCBiZWlzY3NpX3Nlc3Npb24gKmJlaXNjc2lfc2VzcyA9IHNlc3MtPmRkX2RhdGE7CisKKwlwY2lfcG9vbF9kZXN0cm95KGJlaXNjc2lfc2Vzcy0+YmhzX3Bvb2wpOworCWlzY3NpX3Nlc3Npb25fdGVhcmRvd24oY2xzX3Nlc3Npb24pOworfQorCisvKioKKyAqIGJlaXNjc2lfY29ubl9jcmVhdGUgLSBjcmVhdGUgYW4gaW5zdGFuY2Ugb2YgaXNjc2kgY29ubmVjdGlvbgorICogQGNsc19zZXNzaW9uOiBwdHIgdG8gaXNjc2lfY2xzX3Nlc3Npb24KKyAqIEBjaWQ6IGlzY3NpIGNpZAorICovCitzdHJ1Y3QgaXNjc2lfY2xzX2Nvbm4gKgorYmVpc2NzaV9jb25uX2NyZWF0ZShzdHJ1Y3QgaXNjc2lfY2xzX3Nlc3Npb24gKmNsc19zZXNzaW9uLCB1MzIgY2lkKQoreworCXN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYTsKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdDsKKwlzdHJ1Y3QgaXNjc2lfY2xzX2Nvbm4gKmNsc19jb25uOworCXN0cnVjdCBiZWlzY3NpX2Nvbm4gKmJlaXNjc2lfY29ubjsKKwlzdHJ1Y3QgaXNjc2lfY29ubiAqY29ubjsKKwlzdHJ1Y3QgaXNjc2lfc2Vzc2lvbiAqc2VzczsKKwlzdHJ1Y3QgYmVpc2NzaV9zZXNzaW9uICpiZWlzY3NpX3Nlc3M7CisKKwlTRV9ERUJVRyhEQkdfTFZMXzgsICJJbiBiZWlzY3NpX2Nvbm5fY3JlYXRlICxjaWQiCisJCSAiZnJvbSBpc2NzaSBsYXllcj0lZFxuIiwgY2lkKTsKKwlzaG9zdCA9IGlzY3NpX3Nlc3Npb25fdG9fc2hvc3QoY2xzX3Nlc3Npb24pOworCXBoYmEgPSBpc2NzaV9ob3N0X3ByaXYoc2hvc3QpOworCisJY2xzX2Nvbm4gPSBpc2NzaV9jb25uX3NldHVwKGNsc19zZXNzaW9uLCBzaXplb2YoKmJlaXNjc2lfY29ubiksIGNpZCk7CisJaWYgKCFjbHNfY29ubikKKwkJcmV0dXJuIE5VTEw7CisKKwljb25uID0gY2xzX2Nvbm4tPmRkX2RhdGE7CisJYmVpc2NzaV9jb25uID0gY29ubi0+ZGRfZGF0YTsKKwliZWlzY3NpX2Nvbm4tPmVwID0gTlVMTDsKKwliZWlzY3NpX2Nvbm4tPnBoYmEgPSBwaGJhOworCWJlaXNjc2lfY29ubi0+Y29ubiA9IGNvbm47CisJc2VzcyA9IGNsc19zZXNzaW9uLT5kZF9kYXRhOworCWJlaXNjc2lfc2VzcyA9IHNlc3MtPmRkX2RhdGE7CisJYmVpc2NzaV9jb25uLT5iZWlzY3NpX3Nlc3MgPSBiZWlzY3NpX3Nlc3M7CisJcmV0dXJuIGNsc19jb25uOworfQorCisvKioKKyAqIGJlaXNjc2lfYmluZGNvbm5fY2lkIC0gQmluZCB0aGUgYmVpc2NzaV9jb25uIHdpdGggcGhiYSBjb25uZWN0aW9uIHRhYmxlCisgKiBAYmVpc2NzaV9jb25uOiBUaGUgcG9pbnRlciB0byAgYmVpc2NzaV9jb25uIHN0cnVjdHVyZQorICogQHBoYmE6IFRoZSBwaGJhIGluc3RhbmNlCisgKiBAY2lkOiBUaGUgY2lkIHRvIGZyZWUKKyAqLworc3RhdGljIGludCBiZWlzY3NpX2JpbmRjb25uX2NpZChzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEsCisJCQkJc3RydWN0IGJlaXNjc2lfY29ubiAqYmVpc2NzaV9jb25uLAorCQkJCXVuc2lnbmVkIGludCBjaWQpCit7CisJaWYgKHBoYmEtPmNvbm5fdGFibGVbY2lkXSkgeworCQlTRV9ERUJVRyhEQkdfTFZMXzEsCisJCQkgIkNvbm5lY3Rpb24gdGFibGUgYWxyZWFkeSBvY2N1cGllZC4gRGV0ZWN0ZWQgY2xhc2hcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9IGVsc2UgeworCQlTRV9ERUJVRyhEQkdfTFZMXzgsICJwaGJhLT5jb25uX3RhYmxlWyVkXT0lcChiZWlzY3NpX2Nvbm4pIFxuIiwKKwkJCSBjaWQsIGJlaXNjc2lfY29ubik7CisJCXBoYmEtPmNvbm5fdGFibGVbY2lkXSA9IGJlaXNjc2lfY29ubjsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogYmVpc2NzaV9jb25uX2JpbmQgLSBCaW5kcyBpc2NzaSBzZXNzaW9uL2Nvbm5lY3Rpb24gd2l0aCBUQ1AgY29ubmVjdGlvbgorICogQGNsc19zZXNzaW9uOiBwb2ludGVyIHRvIGlzY3NpIGNscyBzZXNzaW9uCisgKiBAY2xzX2Nvbm46IHBvaW50ZXIgdG8gaXNjc2kgY2xzIGNvbm4KKyAqIEB0cmFuc3BvcnRfZmQ6IEVQIGhhbmRsZSg2NCBiaXQpCisgKgorICogVGhpcyBmdW5jdGlvbiBiaW5kcyB0aGUgVENQIENvbm4gd2l0aCBpU0NTSSBDb25uZWN0aW9uIGFuZCBTZXNzaW9uLgorICovCitpbnQgYmVpc2NzaV9jb25uX2JpbmQoc3RydWN0IGlzY3NpX2Nsc19zZXNzaW9uICpjbHNfc2Vzc2lvbiwKKwkJICAgICAgc3RydWN0IGlzY3NpX2Nsc19jb25uICpjbHNfY29ubiwKKwkJICAgICAgdTY0IHRyYW5zcG9ydF9mZCwgaW50IGlzX2xlYWRpbmcpCit7CisJc3RydWN0IGlzY3NpX2Nvbm4gKmNvbm4gPSBjbHNfY29ubi0+ZGRfZGF0YTsKKwlzdHJ1Y3QgYmVpc2NzaV9jb25uICpiZWlzY3NpX2Nvbm4gPSBjb25uLT5kZF9kYXRhOworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0KKwkJKHN0cnVjdCBTY3NpX0hvc3QgKilpc2NzaV9zZXNzaW9uX3RvX3Nob3N0KGNsc19zZXNzaW9uKTsKKwlzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEgPSAoc3RydWN0IGJlaXNjc2lfaGJhICopaXNjc2lfaG9zdF9wcml2KHNob3N0KTsKKwlzdHJ1Y3QgYmVpc2NzaV9lbmRwb2ludCAqYmVpc2NzaV9lcDsKKwlzdHJ1Y3QgaXNjc2lfZW5kcG9pbnQgKmVwOworCisJU0VfREVCVUcoREJHX0xWTF84LCAiSW4gYmVpc2NzaV9jb25uX2JpbmRcbiIpOworCWVwID0gaXNjc2lfbG9va3VwX2VuZHBvaW50KHRyYW5zcG9ydF9mZCk7CisJaWYgKCFlcCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwliZWlzY3NpX2VwID0gZXAtPmRkX2RhdGE7CisKKwlpZiAoaXNjc2lfY29ubl9iaW5kKGNsc19zZXNzaW9uLCBjbHNfY29ubiwgaXNfbGVhZGluZykpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGJlaXNjc2lfZXAtPnBoYmEgIT0gcGhiYSkgeworCQlTRV9ERUJVRyhEQkdfTFZMXzgsCisJCQkgImJlaXNjc2lfZXAtPmhiYT0lcCBub3QgZXF1YWwgdG8gcGhiYT0lcCBcbiIsCisJCQkgYmVpc2NzaV9lcC0+cGhiYSwgcGhiYSk7CisJCXJldHVybiAtRUVYSVNUOworCX0KKworCWJlaXNjc2lfY29ubi0+YmVpc2NzaV9jb25uX2NpZCA9IGJlaXNjc2lfZXAtPmVwX2NpZDsKKwliZWlzY3NpX2Nvbm4tPmVwID0gYmVpc2NzaV9lcDsKKwliZWlzY3NpX2VwLT5jb25uID0gYmVpc2NzaV9jb25uOworCVNFX0RFQlVHKERCR19MVkxfOCwgImJlaXNjc2lfY29ubj0lcCBjb25uPSVwIGVwX2NpZD0lZCBcbiIsCisJCSBiZWlzY3NpX2Nvbm4sIGNvbm4sIGJlaXNjc2lfZXAtPmVwX2NpZCk7CisJcmV0dXJuIGJlaXNjc2lfYmluZGNvbm5fY2lkKHBoYmEsIGJlaXNjc2lfY29ubiwgYmVpc2NzaV9lcC0+ZXBfY2lkKTsKK30KKworLyoqCisgKiBiZWlzY3NpX2Nvbm5fZ2V0X3BhcmFtIC0gZ2V0IHRoZSBpc2NzaSBwYXJhbWV0ZXIKKyAqIEBjbHNfY29ubjogcG9pbnRlciB0byBpc2NzaSBjbHMgY29ubgorICogQHBhcmFtOiBwYXJhbWV0ZXIgdHlwZSBpZGVudGlmaWVyCisgKiBAYnVmOiBidWZmZXIgcG9pbnRlcgorICoKKyAqIHJldHVybnMgaXNjc2kgcGFyYW1ldGVyCisgKi8KK2ludCBiZWlzY3NpX2Nvbm5fZ2V0X3BhcmFtKHN0cnVjdCBpc2NzaV9jbHNfY29ubiAqY2xzX2Nvbm4sCisJCQkgICBlbnVtIGlzY3NpX3BhcmFtIHBhcmFtLCBjaGFyICpidWYpCit7CisJc3RydWN0IGJlaXNjc2lfZW5kcG9pbnQgKmJlaXNjc2lfZXA7CisJc3RydWN0IGlzY3NpX2Nvbm4gKmNvbm4gPSBjbHNfY29ubi0+ZGRfZGF0YTsKKwlzdHJ1Y3QgYmVpc2NzaV9jb25uICpiZWlzY3NpX2Nvbm4gPSBjb25uLT5kZF9kYXRhOworCWludCBsZW4gPSAwOworCisJYmVpc2NzaV9lcCA9IGJlaXNjc2lfY29ubi0+ZXA7CisJaWYgKCFiZWlzY3NpX2VwKSB7CisJCVNFX0RFQlVHKERCR19MVkxfMSwKKwkJCSAiSW4gYmVpc2NzaV9jb25uX2dldF9wYXJhbSAsIG5vIGJlaXNjc2lfZXBcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCisJc3dpdGNoIChwYXJhbSkgeworCWNhc2UgSVNDU0lfUEFSQU1fQ09OTl9QT1JUOgorCQlsZW4gPSBzcHJpbnRmKGJ1ZiwgIiVodVxuIiwgYmVpc2NzaV9lcC0+ZHN0X3RjcHBvcnQpOworCQlicmVhazsKKwljYXNlIElTQ1NJX1BBUkFNX0NPTk5fQUREUkVTUzoKKwkJaWYgKGJlaXNjc2lfZXAtPmlwX3R5cGUgPT0gQkUyX0lQVjQpCisJCQlsZW4gPSBzcHJpbnRmKGJ1ZiwgIiVwSTRcbiIsICZiZWlzY3NpX2VwLT5kc3RfYWRkcik7CisJCWVsc2UKKwkJCWxlbiA9IHNwcmludGYoYnVmLCAiJXBJNlxuIiwgJmJlaXNjc2lfZXAtPmRzdDZfYWRkcik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiBpc2NzaV9jb25uX2dldF9wYXJhbShjbHNfY29ubiwgcGFyYW0sIGJ1Zik7CisJfQorCXJldHVybiBsZW47Cit9CisKK2ludCBiZWlzY3NpX3NldF9wYXJhbShzdHJ1Y3QgaXNjc2lfY2xzX2Nvbm4gKmNsc19jb25uLAorCQkgICAgICBlbnVtIGlzY3NpX3BhcmFtIHBhcmFtLCBjaGFyICpidWYsIGludCBidWZsZW4pCit7CisJc3RydWN0IGlzY3NpX2Nvbm4gKmNvbm4gPSBjbHNfY29ubi0+ZGRfZGF0YTsKKwlzdHJ1Y3QgaXNjc2lfc2Vzc2lvbiAqc2Vzc2lvbiA9IGNvbm4tPnNlc3Npb247CisJaW50IHJldDsKKworCXJldCA9IGlzY3NpX3NldF9wYXJhbShjbHNfY29ubiwgcGFyYW0sIGJ1ZiwgYnVmbGVuKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCS8qCisJICogSWYgdXNlcnNwYWNlIHRyaWVkIHRvIHNldCB0aGUgdmFsdWUgdG8gaGlnaGVyIHRoYW4gd2UgY2FuCisJICogc3VwcG9ydCBvdmVycmlkZSBoZXJlLgorCSAqLworCXN3aXRjaCAocGFyYW0pIHsKKwljYXNlIElTQ1NJX1BBUkFNX0ZJUlNUX0JVUlNUOgorCQlpZiAoc2Vzc2lvbi0+Zmlyc3RfYnVyc3QgPiA4MTkyKQorCQkJc2Vzc2lvbi0+Zmlyc3RfYnVyc3QgPSA4MTkyOworCQlicmVhazsKKwljYXNlIElTQ1NJX1BBUkFNX01BWF9SRUNWX0RMRU5HVEg6CisJCWlmIChjb25uLT5tYXhfcmVjdl9kbGVuZ3RoID4gNjU1MzYpCisJCQljb25uLT5tYXhfcmVjdl9kbGVuZ3RoID0gNjU1MzY7CisJCWJyZWFrOworCWNhc2UgSVNDU0lfUEFSQU1fTUFYX0JVUlNUOgorCQlpZiAoc2Vzc2lvbi0+Zmlyc3RfYnVyc3QgPiAyNjIxNDQpCisJCQlzZXNzaW9uLT5maXJzdF9idXJzdCA9IDI2MjE0NDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogYmVpc2NzaV9nZXRfaG9zdF9wYXJhbSAtIGdldCB0aGUgaXNjc2kgcGFyYW1ldGVyCisgKiBAc2hvc3Q6IHBvaW50ZXIgdG8gc2NzaV9ob3N0IHN0cnVjdHVyZQorICogQHBhcmFtOiBwYXJhbWV0ZXIgdHlwZSBpZGVudGlmaWVyCisgKiBAYnVmOiBidWZmZXIgcG9pbnRlcgorICoKKyAqIHJldHVybnMgaG9zdCBwYXJhbWV0ZXIKKyAqLworaW50IGJlaXNjc2lfZ2V0X2hvc3RfcGFyYW0oc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QsCisJCQkgICBlbnVtIGlzY3NpX2hvc3RfcGFyYW0gcGFyYW0sIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEgPSAoc3RydWN0IGJlaXNjc2lfaGJhICopaXNjc2lfaG9zdF9wcml2KHNob3N0KTsKKwlpbnQgbGVuID0gMDsKKworCXN3aXRjaCAocGFyYW0pIHsKKwljYXNlIElTQ1NJX0hPU1RfUEFSQU1fSFdBRERSRVNTOgorCQliZV9jbWRfZ2V0X21hY19hZGRyKCZwaGJhLT5jdHJsLCBwaGJhLT5tYWNfYWRkcmVzcyk7CisJCWxlbiA9IHN5c2ZzX2Zvcm1hdF9tYWMoYnVmLCBwaGJhLT5tYWNfYWRkcmVzcywgRVRIX0FMRU4pOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gaXNjc2lfaG9zdF9nZXRfcGFyYW0oc2hvc3QsIHBhcmFtLCBidWYpOworCX0KKwlyZXR1cm4gbGVuOworfQorCisvKioKKyAqIGJlaXNjc2lfY29ubl9nZXRfc3RhdHMgLSBnZXQgdGhlIGlzY3NpIHN0YXRzCisgKiBAY2xzX2Nvbm46IHBvaW50ZXIgdG8gaXNjc2kgY2xzIGNvbm4KKyAqIEBzdGF0czogcG9pbnRlciB0byBpc2NzaV9zdGF0cyBzdHJ1Y3R1cmUKKyAqCisgKiByZXR1cm5zIGlzY3NpIHN0YXRzCisgKi8KK3ZvaWQgYmVpc2NzaV9jb25uX2dldF9zdGF0cyhzdHJ1Y3QgaXNjc2lfY2xzX2Nvbm4gKmNsc19jb25uLAorCQkJICAgIHN0cnVjdCBpc2NzaV9zdGF0cyAqc3RhdHMpCit7CisJc3RydWN0IGlzY3NpX2Nvbm4gKmNvbm4gPSBjbHNfY29ubi0+ZGRfZGF0YTsKKworCVNFX0RFQlVHKERCR19MVkxfOCwgIkluIGJlaXNjc2lfY29ubl9nZXRfc3RhdHNcbiIpOworCXN0YXRzLT50eGRhdGFfb2N0ZXRzID0gY29ubi0+dHhkYXRhX29jdGV0czsKKwlzdGF0cy0+cnhkYXRhX29jdGV0cyA9IGNvbm4tPnJ4ZGF0YV9vY3RldHM7CisJc3RhdHMtPmRhdGFvdXRfcGR1cyA9IGNvbm4tPmRhdGFvdXRfcGR1c19jbnQ7CisJc3RhdHMtPnNjc2lyc3BfcGR1cyA9IGNvbm4tPnNjc2lyc3BfcGR1c19jbnQ7CisJc3RhdHMtPnNjc2ljbWRfcGR1cyA9IGNvbm4tPnNjc2ljbWRfcGR1c19jbnQ7CisJc3RhdHMtPmRhdGFpbl9wZHVzID0gY29ubi0+ZGF0YWluX3BkdXNfY250OworCXN0YXRzLT50bWZyc3BfcGR1cyA9IGNvbm4tPnRtZnJzcF9wZHVzX2NudDsKKwlzdGF0cy0+dG1mY21kX3BkdXMgPSBjb25uLT50bWZjbWRfcGR1c19jbnQ7CisJc3RhdHMtPnIydF9wZHVzID0gY29ubi0+cjJ0X3BkdXNfY250OworCXN0YXRzLT5kaWdlc3RfZXJyID0gMDsKKwlzdGF0cy0+dGltZW91dF9lcnIgPSAwOworCXN0YXRzLT5jdXN0b21fbGVuZ3RoID0gMDsKKwlzdHJjcHkoc3RhdHMtPmN1c3RvbVswXS5kZXNjLCAiZWhfYWJvcnRfY250Iik7CisJc3RhdHMtPmN1c3RvbVswXS52YWx1ZSA9IGNvbm4tPmVoX2Fib3J0X2NudDsKK30KKworLyoqCisgKiBiZWlzY3NpX3NldF9wYXJhbXNfZm9yX29mZmxkIC0gZ2V0IHRoZSBwYXJhbWV0ZXJzIGZvciBvZmZsb2FkCisgKiBAYmVpc2NzaV9jb25uOiBwb2ludGVyIHRvIGJlaXNjc2lfY29ubgorICogQHBhcmFtczogcG9pbnRlciB0byBvZmZsb2FkX3BhcmFtcyBzdHJ1Y3R1cmUKKyAqLworc3RhdGljIHZvaWQgIGJlaXNjc2lfc2V0X3BhcmFtc19mb3Jfb2ZmbGQoc3RydWN0IGJlaXNjc2lfY29ubiAqYmVpc2NzaV9jb25uLAorCQkJCQkgIHN0cnVjdCBiZWlzY3NpX29mZmxvYWRfcGFyYW1zICpwYXJhbXMpCit7CisJc3RydWN0IGlzY3NpX2Nvbm4gKmNvbm4gPSBiZWlzY3NpX2Nvbm4tPmNvbm47CisJc3RydWN0IGlzY3NpX3Nlc3Npb24gKnNlc3Npb24gPSBjb25uLT5zZXNzaW9uOworCisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9iZWlzY3NpX29mZmxvYWRfcGFyYW1zLCBtYXhfYnVyc3RfbGVuZ3RoLAorCQkgICAgICBwYXJhbXMsIHNlc3Npb24tPm1heF9idXJzdCk7CisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9iZWlzY3NpX29mZmxvYWRfcGFyYW1zLAorCQkgICAgICBtYXhfc2VuZF9kYXRhX3NlZ21lbnRfbGVuZ3RoLCBwYXJhbXMsCisJCSAgICAgIGNvbm4tPm1heF94bWl0X2RsZW5ndGgpOworCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfYmVpc2NzaV9vZmZsb2FkX3BhcmFtcywgZmlyc3RfYnVyc3RfbGVuZ3RoLAorCQkgICAgICBwYXJhbXMsIHNlc3Npb24tPmZpcnN0X2J1cnN0KTsKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2JlaXNjc2lfb2ZmbG9hZF9wYXJhbXMsIGVybCwgcGFyYW1zLAorCQkgICAgICBzZXNzaW9uLT5lcmwpOworCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfYmVpc2NzaV9vZmZsb2FkX3BhcmFtcywgZGRlLCBwYXJhbXMsCisJCSAgICAgIGNvbm4tPmRhdGFkZ3N0X2VuKTsKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2JlaXNjc2lfb2ZmbG9hZF9wYXJhbXMsIGhkZSwgcGFyYW1zLAorCQkgICAgICBjb25uLT5oZHJkZ3N0X2VuKTsKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2JlaXNjc2lfb2ZmbG9hZF9wYXJhbXMsIGlyMnQsIHBhcmFtcywKKwkJICAgICAgc2Vzc2lvbi0+aW5pdGlhbF9yMnRfZW4pOworCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfYmVpc2NzaV9vZmZsb2FkX3BhcmFtcywgaW1kLCBwYXJhbXMsCisJCSAgICAgIHNlc3Npb24tPmltbV9kYXRhX2VuKTsKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2JlaXNjc2lfb2ZmbG9hZF9wYXJhbXMsIGV4cF9zdGF0c24sIHBhcmFtcywKKwkJICAgICAgKGNvbm4tPmV4cF9zdGF0c24gLSAxKSk7Cit9CisKKy8qKgorICogYmVpc2NzaV9jb25uX3N0YXJ0IC0gb2ZmbG9hZCBvZiBzZXNzaW9uIHRvIGNoaXAKKyAqIEBjbHNfY29ubjogcG9pbnRlciB0byBiZWlzY3NpX2Nvbm4KKyAqLworaW50IGJlaXNjc2lfY29ubl9zdGFydChzdHJ1Y3QgaXNjc2lfY2xzX2Nvbm4gKmNsc19jb25uKQoreworCXN0cnVjdCBpc2NzaV9jb25uICpjb25uID0gY2xzX2Nvbm4tPmRkX2RhdGE7CisJc3RydWN0IGJlaXNjc2lfY29ubiAqYmVpc2NzaV9jb25uID0gY29ubi0+ZGRfZGF0YTsKKwlzdHJ1Y3QgYmVpc2NzaV9lbmRwb2ludCAqYmVpc2NzaV9lcDsKKwlzdHJ1Y3QgYmVpc2NzaV9vZmZsb2FkX3BhcmFtcyBwYXJhbXM7CisJc3RydWN0IGlzY3NpX3Nlc3Npb24gKnNlc3Npb24gPSBjb25uLT5zZXNzaW9uOworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gaXNjc2lfc2Vzc2lvbl90b19zaG9zdChzZXNzaW9uLT5jbHNfc2Vzc2lvbik7CisJc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhID0gaXNjc2lfaG9zdF9wcml2KHNob3N0KTsKKworCW1lbXNldCgmcGFyYW1zLCAwLCBzaXplb2Yoc3RydWN0IGJlaXNjc2lfb2ZmbG9hZF9wYXJhbXMpKTsKKwliZWlzY3NpX2VwID0gYmVpc2NzaV9jb25uLT5lcDsKKwlpZiAoIWJlaXNjc2lfZXApCisJCVNFX0RFQlVHKERCR19MVkxfMSwgIkluIGJlaXNjc2lfY29ubl9zdGFydCAsIG5vIGJlaXNjc2lfZXBcbiIpOworCisJZnJlZV9tZ210X3NnbF9oYW5kbGUocGhiYSwgYmVpc2NzaV9jb25uLT5wbG9naW5fc2dsX2hhbmRsZSk7CisJYmVpc2NzaV9jb25uLT5sb2dpbl9pbl9wcm9ncmVzcyA9IDA7CisJYmVpc2NzaV9zZXRfcGFyYW1zX2Zvcl9vZmZsZChiZWlzY3NpX2Nvbm4sICZwYXJhbXMpOworCWJlaXNjc2lfb2ZmbG9hZF9jb25uZWN0aW9uKGJlaXNjc2lfY29ubiwgJnBhcmFtcyk7CisJaXNjc2lfY29ubl9zdGFydChjbHNfY29ubik7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogYmVpc2NzaV9nZXRfY2lkIC0gQWxsb2NhdGUgYSBjaWQKKyAqIEBwaGJhOiBUaGUgcGhiYSBpbnN0YW5jZQorICovCitzdGF0aWMgaW50IGJlaXNjc2lfZ2V0X2NpZChzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEpCit7CisJdW5zaWduZWQgc2hvcnQgY2lkID0gMHhGRkZGOworCisJaWYgKCFwaGJhLT5hdmxibF9jaWRzKQorCQlyZXR1cm4gY2lkOworCisJY2lkID0gcGhiYS0+Y2lkX2FycmF5W3BoYmEtPmNpZF9hbGxvYysrXTsKKwlpZiAocGhiYS0+Y2lkX2FsbG9jID09IHBoYmEtPnBhcmFtcy5jeG5zX3Blcl9jdHJsKQorCQlwaGJhLT5jaWRfYWxsb2MgPSAwOworCXBoYmEtPmF2bGJsX2NpZHMtLTsKKwlyZXR1cm4gY2lkOworfQorCisvKioKKyAqIGJlaXNjc2lfb3Blbl9jb25uIC0gQXNrIEZXIHRvIG9wZW4gYSBUQ1AgY29ubmVjdGlvbgorICogQGVwOgllbmRwb2ludCB0byBiZSB1c2VkCisgKiBAc3JjX2FkZHI6IFRoZSBzb3VyY2UgSVAgYWRkcmVzcworICogQGRzdF9hZGRyOiBUaGUgRGVzdGluYXRpb24gIElQIGFkZHJlc3MKKyAqCisgKiBBc2tzIHRoZSBGVyB0byBvcGVuIGEgVENQIGNvbm5lY3Rpb24KKyAqLworc3RhdGljIGludCBiZWlzY3NpX29wZW5fY29ubihzdHJ1Y3QgaXNjc2lfZW5kcG9pbnQgKmVwLAorCQkJICAgICBzdHJ1Y3Qgc29ja2FkZHIgKnNyY19hZGRyLAorCQkJICAgICBzdHJ1Y3Qgc29ja2FkZHIgKmRzdF9hZGRyLCBpbnQgbm9uX2Jsb2NraW5nKQoreworCXN0cnVjdCBiZWlzY3NpX2VuZHBvaW50ICpiZWlzY3NpX2VwID0gZXAtPmRkX2RhdGE7CisJc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhID0gYmVpc2NzaV9lcC0+cGhiYTsKKwlpbnQgcmV0ID0gLTE7CisKKwliZWlzY3NpX2VwLT5lcF9jaWQgPSBiZWlzY3NpX2dldF9jaWQocGhiYSk7CisJaWYgKGJlaXNjc2lfZXAtPmVwX2NpZCA9PSAweEZGRkYpIHsKKwkJU0VfREVCVUcoREJHX0xWTF8xLCAiTm8gZnJlZSBjaWQgYXZhaWxhYmxlXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJU0VfREVCVUcoREJHX0xWTF84LCAiSW4gYmVpc2NzaV9vcGVuX2Nvbm4sIGVwX2NpZD0lZCAiLAorCQkgYmVpc2NzaV9lcC0+ZXBfY2lkKTsKKwlwaGJhLT5lcF9hcnJheVtiZWlzY3NpX2VwLT5lcF9jaWRdID0gZXA7CisJaWYgKGJlaXNjc2lfZXAtPmVwX2NpZCA+CisJICAgIChwaGJhLT5md19jb25maWcuaXNjc2lfY2lkX3N0YXJ0ICsgcGhiYS0+cGFyYW1zLmN4bnNfcGVyX2N0cmwpKSB7CisJCVNFX0RFQlVHKERCR19MVkxfMSwgIkZhaWxlZCBpbiBhbGxvY2F0ZSBpc2NzaSBjaWRcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCWJlaXNjc2lfZXAtPmNpZF92bGQgPSAwOworCXJldHVybiBtZ210X29wZW5fY29ubmVjdGlvbihwaGJhLCBkc3RfYWRkciwgYmVpc2NzaV9lcCk7Cit9CisKKy8qKgorICogYmVpc2NzaV9wdXRfY2lkIC0gRnJlZSB0aGUgY2lkCisgKiBAcGhiYTogVGhlIHBoYmEgZm9yIHdoaWNoIHRoZSBjaWQgaXMgYmVpbmcgZnJlZWQKKyAqIEBjaWQ6IFRoZSBjaWQgdG8gZnJlZQorICovCitzdGF0aWMgdm9pZCBiZWlzY3NpX3B1dF9jaWQoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhLCB1bnNpZ25lZCBzaG9ydCBjaWQpCit7CisJcGhiYS0+YXZsYmxfY2lkcysrOworCXBoYmEtPmNpZF9hcnJheVtwaGJhLT5jaWRfZnJlZSsrXSA9IGNpZDsKKwlpZiAocGhiYS0+Y2lkX2ZyZWUgPT0gcGhiYS0+cGFyYW1zLmN4bnNfcGVyX2N0cmwpCisJCXBoYmEtPmNpZF9mcmVlID0gMDsKK30KKworLyoqCisgKiBiZWlzY3NpX2ZyZWVfZXAgLSBmcmVlIGVuZHBvaW50CisgKiBAZXA6CXBvaW50ZXIgdG8gaXNjc2kgZW5kcG9pbnQgc3RydWN0dXJlCisgKi8KK3N0YXRpYyB2b2lkIGJlaXNjc2lfZnJlZV9lcChzdHJ1Y3QgaXNjc2lfZW5kcG9pbnQgKmVwKQoreworCXN0cnVjdCBiZWlzY3NpX2VuZHBvaW50ICpiZWlzY3NpX2VwID0gZXAtPmRkX2RhdGE7CisJc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhID0gYmVpc2NzaV9lcC0+cGhiYTsKKworCWJlaXNjc2lfcHV0X2NpZChwaGJhLCBiZWlzY3NpX2VwLT5lcF9jaWQpOworCWJlaXNjc2lfZXAtPnBoYmEgPSBOVUxMOworCWlzY3NpX2Rlc3Ryb3lfZW5kcG9pbnQoZXApOworfQorCisvKioKKyAqIGJlaXNjc2lfZXBfY29ubmVjdCAtIEFzayBjaGlwIHRvIGNyZWF0ZSBUQ1AgQ29ubgorICogQHNjc2lfaG9zdDogUG9pbnRlciB0byBzY3NpX2hvc3Qgc3RydWN0dXJlCisgKiBAZHN0X2FkZHI6IFRoZSBJUCBhZGRyZXNzIG9mIFRhcmdldAorICogQG5vbl9ibG9ja2luZzogYmxvY2tpbmcgb3Igbm9uLWJsb2NraW5nIGNhbGwKKyAqCisgKiBUaGlzIHJvdXRpbmVzIGZpcnN0IGFza3MgY2hpcCB0byBjcmVhdGUgYSBjb25uZWN0aW9uIGFuZCB0aGVuIGFsbG9jYXRlcyBhbiBFUAorICovCitzdHJ1Y3QgaXNjc2lfZW5kcG9pbnQgKgorYmVpc2NzaV9lcF9jb25uZWN0KHN0cnVjdCBTY3NpX0hvc3QgKnNob3N0LCBzdHJ1Y3Qgc29ja2FkZHIgKmRzdF9hZGRyLAorCQkgICBpbnQgbm9uX2Jsb2NraW5nKQoreworCXN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYTsKKwlzdHJ1Y3QgYmVpc2NzaV9lbmRwb2ludCAqYmVpc2NzaV9lcDsKKwlzdHJ1Y3QgaXNjc2lfZW5kcG9pbnQgKmVwOworCWludCByZXQ7CisKKwlTRV9ERUJVRyhEQkdfTFZMXzgsICJJbiBiZWlzY3NpX2VwX2Nvbm5lY3QgXG4iKTsKKwlpZiAoc2hvc3QpCisJCXBoYmEgPSBpc2NzaV9ob3N0X3ByaXYoc2hvc3QpOworCWVsc2UgeworCQlyZXQgPSAtRU5YSU87CisJCVNFX0RFQlVHKERCR19MVkxfMSwgInNob3N0IGlzIE5VTEwgXG4iKTsKKwkJcmV0dXJuIEVSUl9QVFIocmV0KTsKKwl9CisJZXAgPSBpc2NzaV9jcmVhdGVfZW5kcG9pbnQoc2l6ZW9mKHN0cnVjdCBiZWlzY3NpX2VuZHBvaW50KSk7CisJaWYgKCFlcCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlyZXR1cm4gRVJSX1BUUihyZXQpOworCX0KKworCWJlaXNjc2lfZXAgPSBlcC0+ZGRfZGF0YTsKKwliZWlzY3NpX2VwLT5waGJhID0gcGhiYTsKKworCWlmIChiZWlzY3NpX29wZW5fY29ubihlcCwgTlVMTCwgZHN0X2FkZHIsIG5vbl9ibG9ja2luZykpIHsKKwkJU0VfREVCVUcoREJHX0xWTF8xLCAiRmFpbGVkIGluIGFsbG9jYXRlIGlzY3NpIGNpZFxuIik7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZnJlZV9lcDsKKwl9CisKKwlyZXR1cm4gZXA7CisKK2ZyZWVfZXA6CisJYmVpc2NzaV9mcmVlX2VwKGVwKTsKKwlyZXR1cm4gRVJSX1BUUihyZXQpOworfQorCisvKioKKyAqIGJlaXNjc2lfZXBfcG9sbCAtIFBvbGwgdG8gc2VlIGlmIGNvbm5lY3Rpb24gaXMgZXN0YWJsaXNoZWQKKyAqIEBlcDoJZW5kcG9pbnQgdG8gYmUgdXNlZAorICogQHRpbWVvdXRfbXM6IHRpbWVvdXQgc3BlY2lmaWVkIGluIG1pbGxpc2VjcworICoKKyAqIFBvbGwgdG8gc2VlIGlmIFRDUCBjb25uZWN0aW9uIGVzdGFibGlzaGVkCisgKi8KK2ludCBiZWlzY3NpX2VwX3BvbGwoc3RydWN0IGlzY3NpX2VuZHBvaW50ICplcCwgaW50IHRpbWVvdXRfbXMpCit7CisJc3RydWN0IGJlaXNjc2lfZW5kcG9pbnQgKmJlaXNjc2lfZXAgPSBlcC0+ZGRfZGF0YTsKKworCVNFX0RFQlVHKERCR19MVkxfOCwgIkluICBiZWlzY3NpX2VwX3BvbGxcbiIpOworCWlmIChiZWlzY3NpX2VwLT5jaWRfdmxkID09IDEpCisJCXJldHVybiAxOworCWVsc2UKKwkJcmV0dXJuIDA7Cit9CisKKy8qKgorICogYmVpc2NzaV9jbG9zZV9jb25uIC0gVXBsb2FkIHRoZSAgY29ubmVjdGlvbgorICogQGVwOiBUaGUgaXNjc2kgZW5kcG9pbnQKKyAqIEBmbGFnOiBUaGUgdHlwZSBvZiBjb25uZWN0aW9uIGNsb3N1cmUKKyAqLworc3RhdGljIGludCBiZWlzY3NpX2Nsb3NlX2Nvbm4oc3RydWN0IGlzY3NpX2VuZHBvaW50ICplcCwgaW50IGZsYWcpCit7CisJaW50IHJldCA9IDA7CisJc3RydWN0IGJlaXNjc2lfZW5kcG9pbnQgKmJlaXNjc2lfZXAgPSBlcC0+ZGRfZGF0YTsKKwlzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEgPSBiZWlzY3NpX2VwLT5waGJhOworCisJaWYgKE1HTVRfU1RBVFVTX1NVQ0NFU1MgIT0KKwkgICAgbWdtdF91cGxvYWRfY29ubmVjdGlvbihwaGJhLCBiZWlzY3NpX2VwLT5lcF9jaWQsCisJCUNPTk5FQ1RJT05fVVBMT0FEX0dSQUNFRlVMKSkgeworCQlTRV9ERUJVRyhEQkdfTFZMXzgsICJ1cGxvYWQgZmFpbGVkIGZvciBjaWQgMHgleCIsCisJCQkgYmVpc2NzaV9lcC0+ZXBfY2lkKTsKKwkJcmV0ID0gLTE7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBiZWlzY3NpX2VwX2Rpc2Nvbm5lY3QgLSBUZWFycyBkb3duIHRoZSBUQ1AgY29ubmVjdGlvbgorICogQGVwOgllbmRwb2ludCB0byBiZSB1c2VkCisgKgorICogVGVhcnMgZG93biB0aGUgVENQIGNvbm5lY3Rpb24KKyAqLwordm9pZCBiZWlzY3NpX2VwX2Rpc2Nvbm5lY3Qoc3RydWN0IGlzY3NpX2VuZHBvaW50ICplcCkKK3sKKwlzdHJ1Y3QgYmVpc2NzaV9jb25uICpiZWlzY3NpX2Nvbm47CisJc3RydWN0IGJlaXNjc2lfZW5kcG9pbnQgKmJlaXNjc2lfZXA7CisJc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhOworCWludCBmbGFnID0gMDsKKworCWJlaXNjc2lfZXAgPSBlcC0+ZGRfZGF0YTsKKwlwaGJhID0gYmVpc2NzaV9lcC0+cGhiYTsKKwlTRV9ERUJVRyhEQkdfTFZMXzgsICJJbiBiZWlzY3NpX2VwX2Rpc2Nvbm5lY3RcbiIpOworCisJaWYgKGJlaXNjc2lfZXAtPmNvbm4pIHsKKwkJYmVpc2NzaV9jb25uID0gYmVpc2NzaV9lcC0+Y29ubjsKKwkJaXNjc2lfc3VzcGVuZF9xdWV1ZShiZWlzY3NpX2Nvbm4tPmNvbm4pOworCQliZWlzY3NpX2Nsb3NlX2Nvbm4oZXAsIGZsYWcpOworCX0KKworCWJlaXNjc2lfZnJlZV9lcChlcCk7Cit9CisKKy8qKgorICogYmVpc2NzaV91bmJpbmRfY29ubl90b19jaWQgLSBVbmJpbmQgdGhlIGJlaXNjc2lfY29ubiBmcm9tIHBoYmEgY29ubiB0YWJsZQorICogQHBoYmE6IFRoZSBwaGJhIGluc3RhbmNlCisgKiBAY2lkOiBUaGUgY2lkIHRvIGZyZWUKKyAqLworc3RhdGljIGludCBiZWlzY3NpX3VuYmluZF9jb25uX3RvX2NpZChzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEsCisJCQkJICAgICAgdW5zaWduZWQgaW50IGNpZCkKK3sKKwlpZiAocGhiYS0+Y29ubl90YWJsZVtjaWRdKQorCQlwaGJhLT5jb25uX3RhYmxlW2NpZF0gPSBOVUxMOworCWVsc2UgeworCQlTRV9ERUJVRyhEQkdfTFZMXzgsICJDb25uZWN0aW9uIHRhYmxlIE5vdCBvY2N1cGllZC4gXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiAwOworfQorCisvKioKKyAqIGJlaXNjc2lfY29ubl9zdG9wIC0gSW52YWxpZGF0ZSBhbmQgc3RvcCB0aGUgY29ubmVjdGlvbgorICogQGNsc19jb25uOiBwb2ludGVyIHRvIGdldCBpc2NzaV9jb25uCisgKiBAZmxhZzogVGhlIHR5cGUgb2YgY29ubmVjdGlvbiBjbG9zdXJlCisgKi8KK3ZvaWQgYmVpc2NzaV9jb25uX3N0b3Aoc3RydWN0IGlzY3NpX2Nsc19jb25uICpjbHNfY29ubiwgaW50IGZsYWcpCit7CisJc3RydWN0IGlzY3NpX2Nvbm4gKmNvbm4gPSBjbHNfY29ubi0+ZGRfZGF0YTsKKwlzdHJ1Y3QgYmVpc2NzaV9jb25uICpiZWlzY3NpX2Nvbm4gPSBjb25uLT5kZF9kYXRhOworCXN0cnVjdCBiZWlzY3NpX2VuZHBvaW50ICpiZWlzY3NpX2VwOworCXN0cnVjdCBpc2NzaV9zZXNzaW9uICpzZXNzaW9uID0gY29ubi0+c2Vzc2lvbjsKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGlzY3NpX3Nlc3Npb25fdG9fc2hvc3Qoc2Vzc2lvbi0+Y2xzX3Nlc3Npb24pOworCXN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSA9IGlzY3NpX2hvc3RfcHJpdihzaG9zdCk7CisJdW5zaWduZWQgaW50IHN0YXR1czsKKwl1bnNpZ25lZCBzaG9ydCBzYXZlY2ZnX2ZsYWcgPSBDTURfSVNDU0lfU0VTU0lPTl9TQVZFX0NGR19PTl9GTEFTSDsKKworCVNFX0RFQlVHKERCR19MVkxfOCwgIkluIGJlaXNjc2lfY29ubl9zdG9wXG4iKTsKKwliZWlzY3NpX2VwID0gYmVpc2NzaV9jb25uLT5lcDsKKwlpZiAoIWJlaXNjc2lfZXApIHsKKwkJU0VfREVCVUcoREJHX0xWTF84LCAiSW4gYmVpc2NzaV9jb25uX3N0b3AgLCBubyBiZWlzY3NpX2VwXG4iKTsKKwkJcmV0dXJuOworCX0KKwlzdGF0dXMgPSBtZ210X2ludmFsaWRhdGVfY29ubmVjdGlvbihwaGJhLCBiZWlzY3NpX2VwLAorCQkJCQkgICAgYmVpc2NzaV9lcC0+ZXBfY2lkLCAxLAorCQkJCQkgICAgc2F2ZWNmZ19mbGFnKTsKKwlpZiAoc3RhdHVzICE9IE1HTVRfU1RBVFVTX1NVQ0NFU1MpIHsKKwkJU0VfREVCVUcoREJHX0xWTF8xLAorCQkJICJtZ210X2ludmFsaWRhdGVfY29ubmVjdGlvbiBGYWlsZWQgZm9yIGNpZD0lZCBcbiIsCisJCQkgYmVpc2NzaV9lcC0+ZXBfY2lkKTsKKwl9CisJYmVpc2NzaV91bmJpbmRfY29ubl90b19jaWQocGhiYSwgYmVpc2NzaV9lcC0+ZXBfY2lkKTsKKwlpc2NzaV9jb25uX3N0b3AoY2xzX2Nvbm4sIGZsYWcpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX2lzY3NpLmggYi9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfaXNjc2kuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOTJmZmM1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX2lzY3NpLmgKQEAgLTAsMCArMSw3NSBAQAorLyoqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgLSAyMDA5IFNlcnZlckVuZ2luZXMKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gIFRoZSBmdWxsIEdOVSBHZW5lcmFsCisgKiBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUgZmlsZSBjYWxsZWQgQ09QWUlORy4KKyAqCisgKiBXcml0dGVuIGJ5OiBKYXlhbW9oYW4gS2FsbGlja2FsIChqYXlhbW9oYW5rQHNlcnZlcmVuZ2luZXMuY29tKQorICoKKyAqIENvbnRhY3QgSW5mb3JtYXRpb246CisgKiBsaW51eC1kcml2ZXJzQHNlcnZlcmVuZ2luZXMuY29tCisgKgorICogU2VydmVyRW5naW5lcworICogMjA5IE4uIEZhaXIgT2FrcyBBdmUKKyAqIFN1bm55dmFsZSwgQ0EgOTQwODUKKyAqCisgKi8KKworI2lmbmRlZiBfQkVfSVNDU0lfCisjZGVmaW5lIF9CRV9JU0NTSV8KKworI2luY2x1ZGUgImJlX21haW4uaCIKKyNpbmNsdWRlICJiZV9tZ210LmgiCisKKyNkZWZpbmUgQkUyX0lQVjQgIDB4MQorI2RlZmluZSBCRTJfSVBWNiAgMHgxMAorCit2b2lkIGJlaXNjc2lfb2ZmbG9hZF9jb25uZWN0aW9uKHN0cnVjdCBiZWlzY3NpX2Nvbm4gKmJlaXNjc2lfY29ubiwKKwkJCQlzdHJ1Y3QgYmVpc2NzaV9vZmZsb2FkX3BhcmFtcyAqcGFyYW1zKTsKKwordm9pZCBiZWlzY3NpX29mZmxvYWRfaXNjc2koc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhLCBzdHJ1Y3QgaXNjc2lfY29ubiAqY29ubiwKKwkJCSAgIHN0cnVjdCBiZWlzY3NpX2Nvbm4gKmJlaXNjc2lfY29ubiwKKwkJCSAgIHVuc2lnbmVkIGludCBmd19oYW5kbGUpOworCitzdHJ1Y3QgaXNjc2lfY2xzX3Nlc3Npb24gKmJlaXNjc2lfc2Vzc2lvbl9jcmVhdGUoc3RydWN0IGlzY3NpX2VuZHBvaW50ICplcCwKKwkJCQkJCSB1aW50MTZfdCBjbWRzX21heCwKKwkJCQkJCSB1aW50MTZfdCBxZGVwdGgsCisJCQkJCQkgdWludDMyX3QgaW5pdGlhbF9jbWRzbik7CisKK3ZvaWQgYmVpc2NzaV9zZXNzaW9uX2Rlc3Ryb3koc3RydWN0IGlzY3NpX2Nsc19zZXNzaW9uICpjbHNfc2Vzc2lvbik7CisKK3N0cnVjdCBpc2NzaV9jbHNfY29ubiAqYmVpc2NzaV9jb25uX2NyZWF0ZShzdHJ1Y3QgaXNjc2lfY2xzX3Nlc3Npb24KKwkJCQkJICAgKmNsc19zZXNzaW9uLCB1aW50MzJfdCBjaWQpOworCitpbnQgYmVpc2NzaV9jb25uX2JpbmQoc3RydWN0IGlzY3NpX2Nsc19zZXNzaW9uICpjbHNfc2Vzc2lvbiwKKwkJICAgICAgc3RydWN0IGlzY3NpX2Nsc19jb25uICpjbHNfY29ubiwKKwkJICAgICAgdWludDY0X3QgdHJhbnNwb3J0X2ZkLCBpbnQgaXNfbGVhZGluZyk7CisKK2ludCBiZWlzY3NpX2Nvbm5fZ2V0X3BhcmFtKHN0cnVjdCBpc2NzaV9jbHNfY29ubiAqY2xzX2Nvbm4sCisJCQkgICBlbnVtIGlzY3NpX3BhcmFtIHBhcmFtLCBjaGFyICpidWYpOworCitpbnQgYmVpc2NzaV9nZXRfaG9zdF9wYXJhbShzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCwKKwkJCSAgIGVudW0gaXNjc2lfaG9zdF9wYXJhbSBwYXJhbSwgY2hhciAqYnVmKTsKKworaW50IGJlaXNjc2lfc2V0X3BhcmFtKHN0cnVjdCBpc2NzaV9jbHNfY29ubiAqY2xzX2Nvbm4sCisJCSAgICAgIGVudW0gaXNjc2lfcGFyYW0gcGFyYW0sIGNoYXIgKmJ1ZiwgaW50IGJ1Zmxlbik7CisKK2ludCBiZWlzY3NpX2Nvbm5fc3RhcnQoc3RydWN0IGlzY3NpX2Nsc19jb25uICpjbHNfY29ubik7CisKK3ZvaWQgYmVpc2NzaV9jb25uX3N0b3Aoc3RydWN0IGlzY3NpX2Nsc19jb25uICpjbHNfY29ubiwgaW50IGZsYWcpOworCitzdHJ1Y3QgaXNjc2lfZW5kcG9pbnQgKmJlaXNjc2lfZXBfY29ubmVjdChzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCwKKwkJCQkJICBzdHJ1Y3Qgc29ja2FkZHIgKmRzdF9hZGRyLAorCQkJCQkgIGludCBub25fYmxvY2tpbmcpOworCitpbnQgYmVpc2NzaV9lcF9wb2xsKHN0cnVjdCBpc2NzaV9lbmRwb2ludCAqZXAsIGludCB0aW1lb3V0X21zKTsKKwordm9pZCBiZWlzY3NpX2VwX2Rpc2Nvbm5lY3Qoc3RydWN0IGlzY3NpX2VuZHBvaW50ICplcCk7CisKK3ZvaWQgYmVpc2NzaV9jb25uX2dldF9zdGF0cyhzdHJ1Y3QgaXNjc2lfY2xzX2Nvbm4gKmNsc19jb25uLAorCQkJICAgIHN0cnVjdCBpc2NzaV9zdGF0cyAqc3RhdHMpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9tYWluLmMgYi9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfbWFpbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmMWFjYTMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfbWFpbi5jCkBAIC0wLDAgKzEsMzM5MCBAQAorLyoqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgLSAyMDA5IFNlcnZlckVuZ2luZXMKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gIFRoZSBmdWxsIEdOVSBHZW5lcmFsCisgKiBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUgZmlsZSBjYWxsZWQgQ09QWUlORy4KKyAqCisgKiBXcml0dGVuIGJ5OiBKYXlhbW9oYW4gS2FsbGlja2FsIChqYXlhbW9oYW5rQHNlcnZlcmVuZ2luZXMuY29tKQorICoKKyAqIENvbnRhY3QgSW5mb3JtYXRpb246CisgKiBsaW51eC1kcml2ZXJzQHNlcnZlcmVuZ2luZXMuY29tCisgKgorICogIFNlcnZlckVuZ2luZXMKKyAqIDIwOSBOLiBGYWlyIE9ha3MgQXZlCisgKiBTdW5ueXZhbGUsIENBIDk0MDg1CisgKgorICovCisjaW5jbHVkZSA8bGludXgvcmVib290Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zZW1hcGhvcmUuaD4KKworI2luY2x1ZGUgPHNjc2kvbGliaXNjc2kuaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2lfdHJhbnNwb3J0X2lzY3NpLmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpX3RyYW5zcG9ydC5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV9jbW5kLmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpX2RldmljZS5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV9ob3N0Lmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpLmg+CisjaW5jbHVkZSAiYmVfbWFpbi5oIgorI2luY2x1ZGUgImJlX2lzY3NpLmgiCisjaW5jbHVkZSAiYmVfbWdtdC5oIgorCitzdGF0aWMgdW5zaWduZWQgaW50IGJlX2lvcG9sbF9idWRnZXQgPSAxMDsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgYmVfbWF4X3BoeXNfc2l6ZSA9IDY0Oworc3RhdGljIHVuc2lnbmVkIGludCBlbmFibGVfbXNpeDsKKworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGJlaXNjc2lfcGNpX2lkX3RhYmxlKTsKK01PRFVMRV9ERVNDUklQVElPTihEUlZfREVTQyAiICIgQlVJTERfU1RSKTsKK01PRFVMRV9BVVRIT1IoIlNlcnZlckVuZ2luZXMgQ29ycG9yYXRpb24iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK21vZHVsZV9wYXJhbShiZV9pb3BvbGxfYnVkZ2V0LCBpbnQsIDApOworbW9kdWxlX3BhcmFtKGVuYWJsZV9tc2l4LCBpbnQsIDApOworbW9kdWxlX3BhcmFtKGJlX21heF9waHlzX3NpemUsIHVpbnQsIFNfSVJVR08pOworTU9EVUxFX1BBUk1fREVTQyhiZV9tYXhfcGh5c19zaXplLCAiTWF4aW11bSBTaXplIChJbiBLaWxvYnl0ZXMpIG9mIHBoeXNpY2FsbHkiCisJCQkJICAgImNvbnRpZ3VvdXMgbWVtb3J5IHRoYXQgY2FuIGJlIGFsbG9jYXRlZC4iCisJCQkJICAgIlJhbmdlIGlzIDE2IC0gMTI4Iik7CisKK3N0YXRpYyBpbnQgYmVpc2NzaV9zbGF2ZV9jb25maWd1cmUoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KQoreworCWJsa19xdWV1ZV9tYXhfc2VnbWVudF9zaXplKHNkZXYtPnJlcXVlc3RfcXVldWUsIDY1NTM2KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgYmVpc2NzaV9zaHQgPSB7CisJLm1vZHVsZSA9IFRISVNfTU9EVUxFLAorCS5uYW1lID0gIlNlcnZlckVuZ2luZXMgMTBHYmUgb3Blbi1pc2NzaSBJbml0aWF0b3IgRHJpdmVyIiwKKwkucHJvY19uYW1lID0gRFJWX05BTUUsCisJLnF1ZXVlY29tbWFuZCA9IGlzY3NpX3F1ZXVlY29tbWFuZCwKKwkuZWhfYWJvcnRfaGFuZGxlciA9IGlzY3NpX2VoX2Fib3J0LAorCS5jaGFuZ2VfcXVldWVfZGVwdGggPSBpc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgsCisJLnNsYXZlX2NvbmZpZ3VyZSA9IGJlaXNjc2lfc2xhdmVfY29uZmlndXJlLAorCS50YXJnZXRfYWxsb2MgPSBpc2NzaV90YXJnZXRfYWxsb2MsCisJLmVoX2RldmljZV9yZXNldF9oYW5kbGVyID0gaXNjc2lfZWhfZGV2aWNlX3Jlc2V0LAorCS5laF90YXJnZXRfcmVzZXRfaGFuZGxlciA9IGlzY3NpX2VoX3RhcmdldF9yZXNldCwKKwkuc2dfdGFibGVzaXplID0gQkVJU0NTSV9TR0xJU1RfRUxFTUVOVFMsCisJLmNhbl9xdWV1ZSA9IEJFMl9JT19ERVBUSCwKKwkudGhpc19pZCA9IC0xLAorCS5tYXhfc2VjdG9ycyA9IEJFSVNDU0lfTUFYX1NFQ1RPUlMsCisJLmNtZF9wZXJfbHVuID0gQkVJU0NTSV9DTURfUEVSX0xVTiwKKwkudXNlX2NsdXN0ZXJpbmcgPSBFTkFCTEVfQ0xVU1RFUklORywKK307CitzdGF0aWMgc3RydWN0IHNjc2lfdHJhbnNwb3J0X3RlbXBsYXRlICpiZWlzY3NpX3Njc2lfdHJhbnNwb3J0OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0gUENJIERyaXZlciBvcGVyYXRpb25zIGFuZCBkYXRhIC0tLS0tLS0tLS0tLS0tLS0tICovCitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoYmVpc2NzaV9wY2lfaWRfdGFibGUpID0geworCXsgUENJX0RFVklDRShCRV9WRU5ET1JfSUQsIEJFX0RFVklDRV9JRDEpIH0sCisJeyBQQ0lfREVWSUNFKEJFX1ZFTkRPUl9JRCwgT0NfREVWSUNFX0lEMSkgfSwKKwl7IFBDSV9ERVZJQ0UoQkVfVkVORE9SX0lELCBPQ19ERVZJQ0VfSUQyKSB9LAorCXsgMCB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGJlaXNjc2lfcGNpX2lkX3RhYmxlKTsKKworc3RhdGljIHN0cnVjdCBiZWlzY3NpX2hiYSAqYmVpc2NzaV9oYmFfYWxsb2Moc3RydWN0IHBjaV9kZXYgKnBjaWRldikKK3sKKwlzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmE7CisJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3Q7CisKKwlzaG9zdCA9IGlzY3NpX2hvc3RfYWxsb2MoJmJlaXNjc2lfc2h0LCBzaXplb2YoKnBoYmEpLCAwKTsKKwlpZiAoIXNob3N0KSB7CisJCWRldl9lcnIoJnBjaWRldi0+ZGV2LCAiYmVpc2NzaV9oYmFfYWxsb2MgLSIKKwkJCSJpc2NzaV9ob3N0X2FsbG9jIGZhaWxlZCBcbiIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisJc2hvc3QtPmRtYV9ib3VuZGFyeSA9IHBjaWRldi0+ZG1hX21hc2s7CisJc2hvc3QtPm1heF9pZCA9IEJFMl9NQVhfU0VTU0lPTlM7CisJc2hvc3QtPm1heF9jaGFubmVsID0gMDsKKwlzaG9zdC0+bWF4X2NtZF9sZW4gPSBCRUlTQ1NJX01BWF9DTURfTEVOOworCXNob3N0LT5tYXhfbHVuID0gQkVJU0NTSV9OVU1fTUFYX0xVTjsKKwlzaG9zdC0+dHJhbnNwb3J0dCA9IGJlaXNjc2lfc2NzaV90cmFuc3BvcnQ7CisKKwlwaGJhID0gaXNjc2lfaG9zdF9wcml2KHNob3N0KTsKKwltZW1zZXQocGhiYSwgMCwgc2l6ZW9mKCpwaGJhKSk7CisJcGhiYS0+c2hvc3QgPSBzaG9zdDsKKwlwaGJhLT5wY2lkZXYgPSBwY2lfZGV2X2dldChwY2lkZXYpOworCisJaWYgKGlzY3NpX2hvc3RfYWRkKHNob3N0LCAmcGhiYS0+cGNpZGV2LT5kZXYpKQorCQlnb3RvIGZyZWVfZGV2aWNlczsKKwlyZXR1cm4gcGhiYTsKKworZnJlZV9kZXZpY2VzOgorCXBjaV9kZXZfcHV0KHBoYmEtPnBjaWRldik7CisJaXNjc2lfaG9zdF9mcmVlKHBoYmEtPnNob3N0KTsKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHZvaWQgYmVpc2NzaV91bm1hcF9wY2lfZnVuY3Rpb24oc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhKQoreworCWlmIChwaGJhLT5jc3JfdmEpIHsKKwkJaW91bm1hcChwaGJhLT5jc3JfdmEpOworCQlwaGJhLT5jc3JfdmEgPSBOVUxMOworCX0KKwlpZiAocGhiYS0+ZGJfdmEpIHsKKwkJaW91bm1hcChwaGJhLT5kYl92YSk7CisJCXBoYmEtPmRiX3ZhID0gTlVMTDsKKwl9CisJaWYgKHBoYmEtPnBjaV92YSkgeworCQlpb3VubWFwKHBoYmEtPnBjaV92YSk7CisJCXBoYmEtPnBjaV92YSA9IE5VTEw7CisJfQorfQorCitzdGF0aWMgaW50IGJlaXNjc2lfbWFwX3BjaV9iYXJzKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSwKKwkJCQlzdHJ1Y3QgcGNpX2RldiAqcGNpZGV2KQoreworCXU4IF9faW9tZW0gKmFkZHI7CisKKwlhZGRyID0gaW9yZW1hcF9ub2NhY2hlKHBjaV9yZXNvdXJjZV9zdGFydChwY2lkZXYsIDIpLAorCQkJICAgICAgIHBjaV9yZXNvdXJjZV9sZW4ocGNpZGV2LCAyKSk7CisJaWYgKGFkZHIgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisJcGhiYS0+Y3RybC5jc3IgPSBhZGRyOworCXBoYmEtPmNzcl92YSA9IGFkZHI7CisJcGhiYS0+Y3NyX3BhLnUuYTY0LmFkZHJlc3MgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGNpZGV2LCAyKTsKKworCWFkZHIgPSBpb3JlbWFwX25vY2FjaGUocGNpX3Jlc291cmNlX3N0YXJ0KHBjaWRldiwgNCksIDEyOCAqIDEwMjQpOworCWlmIChhZGRyID09IE5VTEwpCisJCWdvdG8gcGNpX21hcF9lcnI7CisJcGhiYS0+Y3RybC5kYiA9IGFkZHI7CisJcGhiYS0+ZGJfdmEgPSBhZGRyOworCXBoYmEtPmRiX3BhLnUuYTY0LmFkZHJlc3MgPSAgcGNpX3Jlc291cmNlX3N0YXJ0KHBjaWRldiwgNCk7CisKKwlhZGRyID0gaW9yZW1hcF9ub2NhY2hlKHBjaV9yZXNvdXJjZV9zdGFydChwY2lkZXYsIDEpLAorCQkJICAgICAgIHBjaV9yZXNvdXJjZV9sZW4ocGNpZGV2LCAxKSk7CisJaWYgKGFkZHIgPT0gTlVMTCkKKwkJZ290byBwY2lfbWFwX2VycjsKKwlwaGJhLT5jdHJsLnBjaWNmZyA9IGFkZHI7CisJcGhiYS0+cGNpX3ZhID0gYWRkcjsKKwlwaGJhLT5wY2lfcGEudS5hNjQuYWRkcmVzcyA9IHBjaV9yZXNvdXJjZV9zdGFydChwY2lkZXYsIDEpOworCXJldHVybiAwOworCitwY2lfbWFwX2VycjoKKwliZWlzY3NpX3VubWFwX3BjaV9mdW5jdGlvbihwaGJhKTsKKwlyZXR1cm4gLUVOT01FTTsKK30KKworc3RhdGljIGludCBiZWlzY3NpX2VuYWJsZV9wY2koc3RydWN0IHBjaV9kZXYgKnBjaWRldikKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gcGNpX2VuYWJsZV9kZXZpY2UocGNpZGV2KTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJnBjaWRldi0+ZGV2LCAiYmVpc2NzaV9lbmFibGVfcGNpIC0gZW5hYmxlIGRldmljZSAiCisJCQkiZmFpbGVkLiBSZXR1cm5pbmcgLUVOT0RFVlxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJaWYgKHBjaV9zZXRfY29uc2lzdGVudF9kbWFfbWFzayhwY2lkZXYsIERNQV9CSVRfTUFTSyg2NCkpKSB7CisJCXJldCA9IHBjaV9zZXRfY29uc2lzdGVudF9kbWFfbWFzayhwY2lkZXYsIERNQV9CSVRfTUFTSygzMikpOworCQlpZiAocmV0KSB7CisJCQlkZXZfZXJyKCZwY2lkZXYtPmRldiwgIkNvdWxkIG5vdCBzZXQgUENJIERNQSBNYXNrXG4iKTsKKwkJCXBjaV9kaXNhYmxlX2RldmljZShwY2lkZXYpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBiZV9jdHJsX2luaXQoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhLCBzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsID0gJnBoYmEtPmN0cmw7CisJc3RydWN0IGJlX2RtYV9tZW0gKm1ib3hfbWVtX2FsbG9jID0gJmN0cmwtPm1ib3hfbWVtX2FsbG9jZWQ7CisJc3RydWN0IGJlX2RtYV9tZW0gKm1ib3hfbWVtX2FsaWduID0gJmN0cmwtPm1ib3hfbWVtOworCWludCBzdGF0dXMgPSAwOworCisJY3RybC0+cGRldiA9IHBkZXY7CisJc3RhdHVzID0gYmVpc2NzaV9tYXBfcGNpX2JhcnMocGhiYSwgcGRldik7CisJaWYgKHN0YXR1cykKKwkJcmV0dXJuIHN0YXR1czsKKworCW1ib3hfbWVtX2FsbG9jLT5zaXplID0gc2l6ZW9mKHN0cnVjdCBiZV9tY2NfbWFpbGJveCkgKyAxNjsKKwltYm94X21lbV9hbGxvYy0+dmEgPSBwY2lfYWxsb2NfY29uc2lzdGVudChwZGV2LAorCQkJCQkJICBtYm94X21lbV9hbGxvYy0+c2l6ZSwKKwkJCQkJCSAgJm1ib3hfbWVtX2FsbG9jLT5kbWEpOworCWlmICghbWJveF9tZW1fYWxsb2MtPnZhKSB7CisJCWJlaXNjc2lfdW5tYXBfcGNpX2Z1bmN0aW9uKHBoYmEpOworCQlzdGF0dXMgPSAtRU5PTUVNOworCQlyZXR1cm4gc3RhdHVzOworCX0KKworCW1ib3hfbWVtX2FsaWduLT5zaXplID0gc2l6ZW9mKHN0cnVjdCBiZV9tY2NfbWFpbGJveCk7CisJbWJveF9tZW1fYWxpZ24tPnZhID0gUFRSX0FMSUdOKG1ib3hfbWVtX2FsbG9jLT52YSwgMTYpOworCW1ib3hfbWVtX2FsaWduLT5kbWEgPSBQVFJfQUxJR04obWJveF9tZW1fYWxsb2MtPmRtYSwgMTYpOworCW1lbXNldChtYm94X21lbV9hbGlnbi0+dmEsIDAsIHNpemVvZihzdHJ1Y3QgYmVfbWNjX21haWxib3gpKTsKKwlzcGluX2xvY2tfaW5pdCgmY3RybC0+bWJveF9sb2NrKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgdm9pZCBiZWlzY3NpX2dldF9wYXJhbXMoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhKQoreworCXBoYmEtPnBhcmFtcy5pb3NfcGVyX2N0cmwgPSBCRTJfSU9fREVQVEg7CisJcGhiYS0+cGFyYW1zLmN4bnNfcGVyX2N0cmwgPSBCRTJfTUFYX1NFU1NJT05TOworCXBoYmEtPnBhcmFtcy5hc3luY3BkdXNfcGVyX2N0cmwgPSBCRTJfQVNZTkNQRFVTOworCXBoYmEtPnBhcmFtcy5pY2RzX3Blcl9jdHJsID0gQkUyX01BWF9JQ0RTIC8gMjsKKwlwaGJhLT5wYXJhbXMubnVtX3NnZV9wZXJfaW8gPSBCRTJfU0dFOworCXBoYmEtPnBhcmFtcy5kZWZwZHVfaGRyX3N6ID0gQkUyX0RFRlBEVV9IRFJfU1o7CisJcGhiYS0+cGFyYW1zLmRlZnBkdV9kYXRhX3N6ID0gQkUyX0RFRlBEVV9EQVRBX1NaOworCXBoYmEtPnBhcmFtcy5lcV90aW1lciA9IDY0OworCXBoYmEtPnBhcmFtcy5udW1fZXFfZW50cmllcyA9CisJICAgICgoKEJFMl9DTURTX1BFUl9DWE4gKiAyICsgQkUyX0xPR09VVFMgKyBCRTJfVE1GUyArIEJFMl9BU1lOQ1BEVVMpIC8KKwkJCQkJCQkJNTEyKSArIDEpICogNTEyOworCXBoYmEtPnBhcmFtcy5udW1fZXFfZW50cmllcyA9IChwaGJhLT5wYXJhbXMubnVtX2VxX2VudHJpZXMgPCAxMDI0KQorCQkJCT8gMTAyNCA6IHBoYmEtPnBhcmFtcy5udW1fZXFfZW50cmllczsKKwlTRV9ERUJVRyhEQkdfTFZMXzgsICJwaGJhLT5wYXJhbXMubnVtX2VxX2VudHJpZXM9JWQgXG4iLAorCQkgcGhiYS0+cGFyYW1zLm51bV9lcV9lbnRyaWVzKTsKKwlwaGJhLT5wYXJhbXMubnVtX2NxX2VudHJpZXMgPQorCSAgICAoKChCRTJfQ01EU19QRVJfQ1hOICogMiArIEJFMl9MT0dPVVRTICsgQkUyX1RNRlMgKyBCRTJfQVNZTkNQRFVTKSAvCisJCQkJCQkJCTUxMikgKyAxKSAqIDUxMjsKKwlTRV9ERUJVRyhEQkdfTFZMXzgsCisJCSJwaGJhLT5wYXJhbXMubnVtX2NxX2VudHJpZXM9JWQgQkUyX0NNRFNfUEVSX0NYTj0lZCIKKwkJIkJFMl9MT0dPVVRTPSVkIEJFMl9UTUZTPSVkIEJFMl9BU1lOQ1BEVVM9JWQgXG4iLAorCQlwaGJhLT5wYXJhbXMubnVtX2NxX2VudHJpZXMsIEJFMl9DTURTX1BFUl9DWE4sCisJCUJFMl9MT0dPVVRTLCBCRTJfVE1GUywgQkUyX0FTWU5DUERVUyk7CisJcGhiYS0+cGFyYW1zLndyYnNfcGVyX2N4biA9IDI1NjsKK30KKworc3RhdGljIHZvaWQgaHdpX3JpbmdfZXFfZGIoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhLAorCQkJICAgdW5zaWduZWQgaW50IGlkLCB1bnNpZ25lZCBpbnQgY2xyX2ludGVycnVwdCwKKwkJCSAgIHVuc2lnbmVkIGludCBudW1fcHJvY2Vzc2VkLAorCQkJICAgdW5zaWduZWQgY2hhciByZWFybSwgdW5zaWduZWQgY2hhciBldmVudCkKK3sKKwl1MzIgdmFsID0gMDsKKwl2YWwgfD0gaWQgJiBEQl9FUV9SSU5HX0lEX01BU0s7CisJaWYgKHJlYXJtKQorCQl2YWwgfD0gMSA8PCBEQl9FUV9SRUFSTV9TSElGVDsKKwlpZiAoY2xyX2ludGVycnVwdCkKKwkJdmFsIHw9IDEgPDwgREJfRVFfQ0xSX1NISUZUOworCWlmIChldmVudCkKKwkJdmFsIHw9IDEgPDwgREJfRVFfRVZOVF9TSElGVDsKKwl2YWwgfD0gbnVtX3Byb2Nlc3NlZCA8PCBEQl9FUV9OVU1fUE9QUEVEX1NISUZUOworCWlvd3JpdGUzMih2YWwsIHBoYmEtPmRiX3ZhICsgREJfRVFfT0ZGU0VUKTsKK30KKworLyoqCisgKiBiZV9pc3IgLSBUaGUgaXNyIHJvdXRpbmUgb2YgdGhlIGRyaXZlci4KKyAqIEBpcnE6IE5vdCB1c2VkCisgKiBAZGV2X2lkOiBQb2ludGVyIHRvIGhvc3QgYWRhcHRlciBzdHJ1Y3R1cmUKKyAqLworc3RhdGljIGlycXJldHVybl90IGJlX2lzcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhOworCXN0cnVjdCBod2lfY29udHJvbGxlciAqcGh3aV9jdHJscjsKKwlzdHJ1Y3QgaHdpX2NvbnRleHRfbWVtb3J5ICpwaHdpX2NvbnRleHQ7CisJc3RydWN0IGJlX2VxX2VudHJ5ICplcWUgPSBOVUxMOworCXN0cnVjdCBiZV9xdWV1ZV9pbmZvICplcTsKKwlzdHJ1Y3QgYmVfcXVldWVfaW5mbyAqY3E7CisJdW5zaWduZWQgbG9uZyBmbGFncywgaW5kZXg7CisJdW5zaWduZWQgaW50IG51bV9lcV9wcm9jZXNzZWQ7CisJc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybDsKKwlpbnQgaXNyOworCisJcGhiYSA9IGRldl9pZDsKKwlpZiAoIWVuYWJsZV9tc2l4KSB7CisJCWN0cmwgPSAmcGhiYS0+Y3RybDs7CisJCWlzciA9IGlvcmVhZDMyKGN0cmwtPmNzciArIENFVl9JU1IwX09GRlNFVCArCisJCQkgICAgICAgKFBDSV9GVU5DKGN0cmwtPnBkZXYtPmRldmZuKSAqIENFVl9JU1JfU0laRSkpOworCQlpZiAoIWlzcikKKwkJCXJldHVybiBJUlFfTk9ORTsKKwl9CisKKwlwaHdpX2N0cmxyID0gcGhiYS0+cGh3aV9jdHJscjsKKwlwaHdpX2NvbnRleHQgPSBwaHdpX2N0cmxyLT5waHdpX2N0eHQ7CisJZXEgPSAmcGh3aV9jb250ZXh0LT5iZV9lcS5xOworCWNxID0gJnBod2lfY29udGV4dC0+YmVfY3E7CisJaW5kZXggPSAwOworCWVxZSA9IHF1ZXVlX3RhaWxfbm9kZShlcSk7CisJaWYgKCFlcWUpCisJCVNFX0RFQlVHKERCR19MVkxfMSwgImVxZSBpcyBOVUxMXG4iKTsKKworCW51bV9lcV9wcm9jZXNzZWQgPSAwOworCWlmIChibGtfaW9wb2xsX2VuYWJsZWQpIHsKKwkJd2hpbGUgKGVxZS0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfZXFfZW50cnksIHZhbGlkKSAvIDMyXQorCQkJCQkmIEVRRV9WQUxJRF9NQVNLKSB7CisJCQlpZiAoIWJsa19pb3BvbGxfc2NoZWRfcHJlcCgmcGhiYS0+aW9wb2xsKSkKKwkJCQlibGtfaW9wb2xsX3NjaGVkKCZwaGJhLT5pb3BvbGwpOworCisJCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2VxX2VudHJ5LCB2YWxpZCwgZXFlLCAwKTsKKwkJCXF1ZXVlX3RhaWxfaW5jKGVxKTsKKwkJCWVxZSA9IHF1ZXVlX3RhaWxfbm9kZShlcSk7CisJCQludW1fZXFfcHJvY2Vzc2VkKys7CisJCQlTRV9ERUJVRyhEQkdfTFZMXzgsICJWYWxpZCBFUUVcbiIpOworCQl9CisJCWlmIChudW1fZXFfcHJvY2Vzc2VkKSB7CisJCQlod2lfcmluZ19lcV9kYihwaGJhLCBlcS0+aWQsIDAsCW51bV9lcV9wcm9jZXNzZWQsIDAsIDEpOworCQkJcmV0dXJuIElSUV9IQU5ETEVEOworCQl9IGVsc2UKKwkJCXJldHVybiBJUlFfTk9ORTsKKwl9IGVsc2UgeworCQl3aGlsZSAoZXFlLT5kd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9lcV9lbnRyeSwgdmFsaWQpIC8gMzJdCisJCQkJCQkmIEVRRV9WQUxJRF9NQVNLKSB7CisKKwkJCWlmICgoKGVxZS0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfZXFfZW50cnksCisJCQkgICAgIHJlc291cmNlX2lkKSAvIDMyXSAmCisJCQkgICAgIEVRRV9SRVNJRF9NQVNLKSA+PiAxNikgIT0gY3EtPmlkKSB7CisJCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnBoYmEtPmlzcl9sb2NrLCBmbGFncyk7CisJCQkJcGhiYS0+dG9kb19tY2NfY3EgPSAxOworCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmlzcl9sb2NrLCBmbGFncyk7CisJCQl9IGVsc2UgeworCQkJCXNwaW5fbG9ja19pcnFzYXZlKCZwaGJhLT5pc3JfbG9jaywgZmxhZ3MpOworCQkJCXBoYmEtPnRvZG9fY3EgPSAxOworCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmlzcl9sb2NrLCBmbGFncyk7CisJCQl9CisJCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2VxX2VudHJ5LCB2YWxpZCwgZXFlLCAwKTsKKwkJCXF1ZXVlX3RhaWxfaW5jKGVxKTsKKwkJCWVxZSA9IHF1ZXVlX3RhaWxfbm9kZShlcSk7CisJCQludW1fZXFfcHJvY2Vzc2VkKys7CisJCX0KKwkJaWYgKHBoYmEtPnRvZG9fY3EgfHwgcGhiYS0+dG9kb19tY2NfY3EpCisJCQlxdWV1ZV93b3JrKHBoYmEtPndxLCAmcGhiYS0+d29ya19jcXMpOworCisJCWlmIChudW1fZXFfcHJvY2Vzc2VkKSB7CisJCQlod2lfcmluZ19lcV9kYihwaGJhLCBlcS0+aWQsIDAsIG51bV9lcV9wcm9jZXNzZWQsIDEsIDEpOworCQkJcmV0dXJuIElSUV9IQU5ETEVEOworCQl9IGVsc2UKKwkJCXJldHVybiBJUlFfTk9ORTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgYmVpc2NzaV9pbml0X2lycXMoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhKQoreworCXN0cnVjdCBwY2lfZGV2ICpwY2lkZXYgPSBwaGJhLT5wY2lkZXY7CisJaW50IHJldDsKKworCXJldCA9IHJlcXVlc3RfaXJxKHBjaWRldi0+aXJxLCBiZV9pc3IsIElSUUZfU0hBUkVELCAiYmVpc2NzaSIsIHBoYmEpOworCWlmIChyZXQpIHsKKwkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCBwaGJhLT5zaG9zdCwgImJlaXNjc2lfaW5pdF9pcnFzLSIKKwkJCSAgICAgIkZhaWxlZCB0byByZWdpc3RlciBpcnFcXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGh3aV9yaW5nX2NxX2RiKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSwKKwkJCSAgIHVuc2lnbmVkIGludCBpZCwgdW5zaWduZWQgaW50IG51bV9wcm9jZXNzZWQsCisJCQkgICB1bnNpZ25lZCBjaGFyIHJlYXJtLCB1bnNpZ25lZCBjaGFyIGV2ZW50KQoreworCXUzMiB2YWwgPSAwOworCXZhbCB8PSBpZCAmIERCX0NRX1JJTkdfSURfTUFTSzsKKwlpZiAocmVhcm0pCisJCXZhbCB8PSAxIDw8IERCX0NRX1JFQVJNX1NISUZUOworCXZhbCB8PSBudW1fcHJvY2Vzc2VkIDw8IERCX0NRX05VTV9QT1BQRURfU0hJRlQ7CisJaW93cml0ZTMyKHZhbCwgcGhiYS0+ZGJfdmEgKyBEQl9DUV9PRkZTRVQpOworfQorCisvKgorICogYXN5bmMgcGR1cyBpbmNsdWRlCisgKiBhLiB1bnNvbGljaXRlZCBOT1AtSW4gKHRhcmdldCBpbml0aWF0ZWQgTk9QLUluKQorICogYi4gQXN5bmMgTWVzc2FnZXMKKyAqIGMuIFJlamVjdCBQRFUKKyAqIGQuIExvZ2luIHJlc3BvbnNlCisgKiBUaGVzZSBoZWFkZXJzIGFycml2ZSB1bnByb2Nlc3NlZCBieSB0aGUgRVAgZmlybXdhcmUgYW5kIGlTQ1NJIGxheWVyCisgKiBwcm9jZXNzIHRoZW0KKyAqLworc3RhdGljIHVuc2lnbmVkIGludAorYmVpc2NzaV9wcm9jZXNzX2FzeW5jX3BkdShzdHJ1Y3QgYmVpc2NzaV9jb25uICpiZWlzY3NpX2Nvbm4sCisJCQkgIHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSwKKwkJCSAgdW5zaWduZWQgc2hvcnQgY2lkLAorCQkJICBzdHJ1Y3QgcGR1X2Jhc2UgKnBwZHUsCisJCQkgIHVuc2lnbmVkIGxvbmcgcGR1X2xlbiwKKwkJCSAgdm9pZCAqcGJ1ZmZlciwgdW5zaWduZWQgbG9uZyBidWZfbGVuKQoreworCXN0cnVjdCBpc2NzaV9jb25uICpjb25uID0gYmVpc2NzaV9jb25uLT5jb25uOworCXN0cnVjdCBpc2NzaV9zZXNzaW9uICpzZXNzaW9uID0gY29ubi0+c2Vzc2lvbjsKKworCXN3aXRjaCAocHBkdS0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfcGR1X2Jhc2UsIG9wY29kZSkgLyAzMl0gJgorCQkJCQkJUERVQkFTRV9PUENPREVfTUFTSykgeworCWNhc2UgSVNDU0lfT1BfTk9PUF9JTjoKKwkJcGJ1ZmZlciA9IE5VTEw7CisJCWJ1Zl9sZW4gPSAwOworCQlicmVhazsKKwljYXNlIElTQ1NJX09QX0FTWU5DX0VWRU5UOgorCQlicmVhazsKKwljYXNlIElTQ1NJX09QX1JFSkVDVDoKKwkJV0FSTl9PTighcGJ1ZmZlcik7CisJCVdBUk5fT04oIShidWZfbGVuID09IDQ4KSk7CisJCVNFX0RFQlVHKERCR19MVkxfMSwgIkluIElTQ1NJX09QX1JFSkVDVFxuIik7CisJCWJyZWFrOworCWNhc2UgSVNDU0lfT1BfTE9HSU5fUlNQOgorCQlicmVhazsKKwlkZWZhdWx0OgorCQlzaG9zdF9wcmludGsoS0VSTl9XQVJOSU5HLCBwaGJhLT5zaG9zdCwKKwkJCSAgICAgIlVucmVjb2duaXplZCBvcGNvZGUgMHgleCBpbiBhc3luYyBtc2cgXG4iLAorCQkJICAgICAocHBkdS0+CisJCQkgICAgIGR3W29mZnNldG9mKHN0cnVjdCBhbWFwX3BkdV9iYXNlLCBvcGNvZGUpIC8gMzJdCisJCQkJCQkmIFBEVUJBU0VfT1BDT0RFX01BU0spKTsKKwkJcmV0dXJuIDE7CisJfQorCisJc3Bpbl9sb2NrX2JoKCZzZXNzaW9uLT5sb2NrKTsKKwlfX2lzY3NpX2NvbXBsZXRlX3BkdShjb25uLCAoc3RydWN0IGlzY3NpX2hkciAqKXBwZHUsIHBidWZmZXIsIGJ1Zl9sZW4pOworCXNwaW5fdW5sb2NrX2JoKCZzZXNzaW9uLT5sb2NrKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzZ2xfaGFuZGxlICphbGxvY19pb19zZ2xfaGFuZGxlKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSkKK3sKKwlzdHJ1Y3Qgc2dsX2hhbmRsZSAqcHNnbF9oYW5kbGU7CisKKwlpZiAocGhiYS0+aW9fc2dsX2huZGxfYXZibCkgeworCQlTRV9ERUJVRyhEQkdfTFZMXzgsCisJCQkgIkluIGFsbG9jX2lvX3NnbF9oYW5kbGUsaW9fc2dsX2FsbG9jX2luZGV4PSVkIFxuIiwKKwkJCSBwaGJhLT5pb19zZ2xfYWxsb2NfaW5kZXgpOworCQlwc2dsX2hhbmRsZSA9IHBoYmEtPmlvX3NnbF9obmRsX2Jhc2VbcGhiYS0+CisJCQkJCQlpb19zZ2xfYWxsb2NfaW5kZXhdOworCQlwaGJhLT5pb19zZ2xfaG5kbF9iYXNlW3BoYmEtPmlvX3NnbF9hbGxvY19pbmRleF0gPSBOVUxMOworCQlwaGJhLT5pb19zZ2xfaG5kbF9hdmJsLS07CisJCWlmIChwaGJhLT5pb19zZ2xfYWxsb2NfaW5kZXggPT0gKHBoYmEtPnBhcmFtcy5pb3NfcGVyX2N0cmwgLSAxKSkKKwkJCXBoYmEtPmlvX3NnbF9hbGxvY19pbmRleCA9IDA7CisJCWVsc2UKKwkJCXBoYmEtPmlvX3NnbF9hbGxvY19pbmRleCsrOworCX0gZWxzZQorCQlwc2dsX2hhbmRsZSA9IE5VTEw7CisJcmV0dXJuIHBzZ2xfaGFuZGxlOworfQorCitzdGF0aWMgdm9pZAorZnJlZV9pb19zZ2xfaGFuZGxlKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSwgc3RydWN0IHNnbF9oYW5kbGUgKnBzZ2xfaGFuZGxlKQoreworCVNFX0RFQlVHKERCR19MVkxfOCwgIkluIGZyZWVfLGlvX3NnbF9mcmVlX2luZGV4PSVkIFxuIiwKKwkJIHBoYmEtPmlvX3NnbF9mcmVlX2luZGV4KTsKKwlpZiAocGhiYS0+aW9fc2dsX2huZGxfYmFzZVtwaGJhLT5pb19zZ2xfZnJlZV9pbmRleF0pIHsKKwkJLyoKKwkJICogdGhpcyBjYW4gaGFwcGVuIGlmIGNsZWFuX3Rhc2sgaXMgY2FsbGVkIG9uIGEgdGFzayB0aGF0CisJCSAqIGZhaWxlZCBpbiB4bWl0X3Rhc2sgb3IgYWxsb2NfcGR1LgorCQkgKi8KKwkJIFNFX0RFQlVHKERCR19MVkxfOCwKKwkJCSAiRG91YmxlIEZyZWUgaW4gSU8gU0dMIGlvX3NnbF9mcmVlX2luZGV4PSVkLCIKKwkJCSAidmFsdWUgdGhlcmU9JXAgXG4iLCBwaGJhLT5pb19zZ2xfZnJlZV9pbmRleCwKKwkJCSBwaGJhLT5pb19zZ2xfaG5kbF9iYXNlW3BoYmEtPmlvX3NnbF9mcmVlX2luZGV4XSk7CisJCXJldHVybjsKKwl9CisJcGhiYS0+aW9fc2dsX2huZGxfYmFzZVtwaGJhLT5pb19zZ2xfZnJlZV9pbmRleF0gPSBwc2dsX2hhbmRsZTsKKwlwaGJhLT5pb19zZ2xfaG5kbF9hdmJsKys7CisJaWYgKHBoYmEtPmlvX3NnbF9mcmVlX2luZGV4ID09IChwaGJhLT5wYXJhbXMuaW9zX3Blcl9jdHJsIC0gMSkpCisJCXBoYmEtPmlvX3NnbF9mcmVlX2luZGV4ID0gMDsKKwllbHNlCisJCXBoYmEtPmlvX3NnbF9mcmVlX2luZGV4Kys7Cit9CisKKy8qKgorICogYWxsb2Nfd3JiX2hhbmRsZSAtIFRvIGFsbG9jYXRlIGEgd3JiIGhhbmRsZQorICogQHBoYmE6IFRoZSBoYmEgcG9pbnRlcgorICogQGNpZDogVGhlIGNpZCB0byB1c2UgZm9yIGFsbG9jYXRpb24KKyAqIEBpbmRleDogaW5kZXggYWxsb2NhdGlvbiBhbmQgd3JiIGluZGV4CisgKgorICogVGhpcyBoYXBwZW5zIHVuZGVyIHNlc3Npb25fbG9jayB1bnRpbCBzdWJtaXNzaW9uIHRvIGNoaXAKKyAqLworc3RydWN0IHdyYl9oYW5kbGUgKmFsbG9jX3dyYl9oYW5kbGUoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhLCB1bnNpZ25lZCBpbnQgY2lkLAorCQkJCSAgICBpbnQgaW5kZXgpCit7CisJc3RydWN0IGh3aV93cmJfY29udGV4dCAqcHdyYl9jb250ZXh0OworCXN0cnVjdCBod2lfY29udHJvbGxlciAqcGh3aV9jdHJscjsKKwlzdHJ1Y3Qgd3JiX2hhbmRsZSAqcHdyYl9oYW5kbGU7CisKKwlwaHdpX2N0cmxyID0gcGhiYS0+cGh3aV9jdHJscjsKKwlwd3JiX2NvbnRleHQgPSAmcGh3aV9jdHJsci0+d3JiX2NvbnRleHRbY2lkXTsKKwlwd3JiX2hhbmRsZSA9IHB3cmJfY29udGV4dC0+cHdyYl9oYW5kbGVfYmFzZVtpbmRleF07CisJcHdyYl9oYW5kbGUtPndyYl9pbmRleCA9IGluZGV4OworCXB3cmJfaGFuZGxlLT5ueHRfd3JiX2luZGV4ID0gaW5kZXg7CisJcmV0dXJuIHB3cmJfaGFuZGxlOworfQorCisvKioKKyAqIGZyZWVfd3JiX2hhbmRsZSAtIFRvIGZyZWUgdGhlIHdyYiBoYW5kbGUgYmFjayB0byBwb29sCisgKiBAcGhiYTogVGhlIGhiYSBwb2ludGVyCisgKiBAcHdyYl9jb250ZXh0OiBUaGUgY29udGV4dCB0byBmcmVlIGZyb20KKyAqIEBwd3JiX2hhbmRsZTogVGhlIHdyYl9oYW5kbGUgdG8gZnJlZQorICoKKyAqIFRoaXMgaGFwcGVucyB1bmRlciBzZXNzaW9uX2xvY2sgdW50aWwgc3VibWlzc2lvbiB0byBjaGlwCisgKi8KK3N0YXRpYyB2b2lkCitmcmVlX3dyYl9oYW5kbGUoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhLCBzdHJ1Y3QgaHdpX3dyYl9jb250ZXh0ICpwd3JiX2NvbnRleHQsCisJCXN0cnVjdCB3cmJfaGFuZGxlICpwd3JiX2hhbmRsZSkKK3sKKwlTRV9ERUJVRyhEQkdfTFZMXzgsCisJCSAiRlJFRSBXUkI6IHB3cmJfaGFuZGxlPSVwIGZyZWVfaW5kZXg9JWQ9MHgleCIKKwkJICJ3cmJfaGFuZGxlc19hdmFpbGFibGU9JWQgXG4iLAorCQkgcHdyYl9oYW5kbGUsIHB3cmJfY29udGV4dC0+ZnJlZV9pbmRleCwKKwkJIHB3cmJfY29udGV4dC0+ZnJlZV9pbmRleCwgcHdyYl9jb250ZXh0LT53cmJfaGFuZGxlc19hdmFpbGFibGUpOworfQorCitzdGF0aWMgc3RydWN0IHNnbF9oYW5kbGUgKmFsbG9jX21nbXRfc2dsX2hhbmRsZShzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEpCit7CisJc3RydWN0IHNnbF9oYW5kbGUgKnBzZ2xfaGFuZGxlOworCisJaWYgKHBoYmEtPmVoX3NnbF9obmRsX2F2YmwpIHsKKwkJcHNnbF9oYW5kbGUgPSBwaGJhLT5laF9zZ2xfaG5kbF9iYXNlW3BoYmEtPmVoX3NnbF9hbGxvY19pbmRleF07CisJCXBoYmEtPmVoX3NnbF9obmRsX2Jhc2VbcGhiYS0+ZWhfc2dsX2FsbG9jX2luZGV4XSA9IE5VTEw7CisJCVNFX0RFQlVHKERCR19MVkxfOCwgIm1nbXRfc2dsX2FsbG9jX2luZGV4PSVkPTB4JXggXG4iLAorCQkJIHBoYmEtPmVoX3NnbF9hbGxvY19pbmRleCwgcGhiYS0+ZWhfc2dsX2FsbG9jX2luZGV4KTsKKwkJcGhiYS0+ZWhfc2dsX2huZGxfYXZibC0tOworCQlpZiAocGhiYS0+ZWhfc2dsX2FsbG9jX2luZGV4ID09CisJCSAgICAocGhiYS0+cGFyYW1zLmljZHNfcGVyX2N0cmwgLSBwaGJhLT5wYXJhbXMuaW9zX3Blcl9jdHJsIC0KKwkJICAgICAxKSkKKwkJCXBoYmEtPmVoX3NnbF9hbGxvY19pbmRleCA9IDA7CisJCWVsc2UKKwkJCXBoYmEtPmVoX3NnbF9hbGxvY19pbmRleCsrOworCX0gZWxzZQorCQlwc2dsX2hhbmRsZSA9IE5VTEw7CisJcmV0dXJuIHBzZ2xfaGFuZGxlOworfQorCit2b2lkCitmcmVlX21nbXRfc2dsX2hhbmRsZShzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEsIHN0cnVjdCBzZ2xfaGFuZGxlICpwc2dsX2hhbmRsZSkKK3sKKworCWlmIChwaGJhLT5laF9zZ2xfaG5kbF9iYXNlW3BoYmEtPmVoX3NnbF9mcmVlX2luZGV4XSkgeworCQkvKgorCQkgKiB0aGlzIGNhbiBoYXBwZW4gaWYgY2xlYW5fdGFzayBpcyBjYWxsZWQgb24gYSB0YXNrIHRoYXQKKwkJICogZmFpbGVkIGluIHhtaXRfdGFzayBvciBhbGxvY19wZHUuCisJCSAqLworCQlTRV9ERUJVRyhEQkdfTFZMXzgsCisJCQkgIkRvdWJsZSBGcmVlIGluIGVoIFNHTCAsZWhfc2dsX2ZyZWVfaW5kZXg9JWQgXG4iLAorCQkJIHBoYmEtPmVoX3NnbF9mcmVlX2luZGV4KTsKKwkJcmV0dXJuOworCX0KKwlwaGJhLT5laF9zZ2xfaG5kbF9iYXNlW3BoYmEtPmVoX3NnbF9mcmVlX2luZGV4XSA9IHBzZ2xfaGFuZGxlOworCXBoYmEtPmVoX3NnbF9obmRsX2F2YmwrKzsKKwlpZiAocGhiYS0+ZWhfc2dsX2ZyZWVfaW5kZXggPT0KKwkgICAgKHBoYmEtPnBhcmFtcy5pY2RzX3Blcl9jdHJsIC0gcGhiYS0+cGFyYW1zLmlvc19wZXJfY3RybCAtIDEpKQorCQlwaGJhLT5laF9zZ2xfZnJlZV9pbmRleCA9IDA7CisJZWxzZQorCQlwaGJhLT5laF9zZ2xfZnJlZV9pbmRleCsrOworfQorCitzdGF0aWMgdm9pZAorYmVfY29tcGxldGVfaW8oc3RydWN0IGJlaXNjc2lfY29ubiAqYmVpc2NzaV9jb25uLAorCSAgICAgICBzdHJ1Y3QgaXNjc2lfdGFzayAqdGFzaywgc3RydWN0IHNvbF9jcWUgKnBzb2wpCit7CisJc3RydWN0IGJlaXNjc2lfaW9fdGFzayAqaW9fdGFzayA9IHRhc2stPmRkX2RhdGE7CisJc3RydWN0IGJlX3N0YXR1c19iaHMgKnN0c19iaHMgPQorCQkJCShzdHJ1Y3QgYmVfc3RhdHVzX2JocyAqKWlvX3Rhc2stPmNtZF9iaHM7CisJc3RydWN0IGlzY3NpX2Nvbm4gKmNvbm4gPSBiZWlzY3NpX2Nvbm4tPmNvbm47CisJdW5zaWduZWQgaW50IHNlbnNlX2xlbjsKKwl1bnNpZ25lZCBjaGFyICpzZW5zZTsKKwl1MzIgcmVzaWQgPSAwLCBleHBfY21kc24sIG1heF9jbWRzbjsKKwl1OCByc3AsIHN0YXR1cywgZmxhZ3M7CisKKwlleHBfY21kc24gPSBiZTMyX3RvX2NwdShwc29sLT4KKwkJCWR3W29mZnNldG9mKHN0cnVjdCBhbWFwX3NvbF9jcWUsIGlfZXhwX2NtZF9zbikgLyAzMl0KKwkJCSYgU09MX0VYUF9DTURfU05fTUFTSyk7CisJbWF4X2NtZHNuID0gYmUzMl90b19jcHUoKHBzb2wtPgorCQkJZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfc29sX2NxZSwgaV9leHBfY21kX3NuKSAvIDMyXQorCQkJJiBTT0xfRVhQX0NNRF9TTl9NQVNLKSArCisJCQkoKHBzb2wtPmR3W29mZnNldG9mKHN0cnVjdCBhbWFwX3NvbF9jcWUsIGlfY21kX3duZCkKKwkJCQkvIDMyXSAmIFNPTF9DTURfV05EX01BU0spID4+IDI0KSAtIDEpOworCXJzcCA9ICgocHNvbC0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfc29sX2NxZSwgaV9yZXNwKSAvIDMyXQorCQkJCQkJJiBTT0xfUkVTUF9NQVNLKSA+PiAxNik7CisJc3RhdHVzID0gKChwc29sLT5kd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9zb2xfY3FlLCBpX3N0cykgLyAzMl0KKwkJCQkJCSYgU09MX1NUU19NQVNLKSA+PiA4KTsKKwlmbGFncyA9ICgocHNvbC0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfc29sX2NxZSwgaV9mbGFncykgLyAzMl0KKwkJCQkJJiBTT0xfRkxBR1NfTUFTSykgPj4gMjQpIHwgMHg4MDsKKworCXRhc2stPnNjLT5yZXN1bHQgPSAoRElEX09LIDw8IDE2KSB8IHN0YXR1czsKKwlpZiAocnNwICE9IElTQ1NJX1NUQVRVU19DTURfQ09NUExFVEVEKSB7CisJCXRhc2stPnNjLT5yZXN1bHQgPSBESURfRVJST1IgPDwgMTY7CisJCWdvdG8gdW5tYXA7CisJfQorCisJLyogYmlkaSBub3QgaW5pdGlhbGx5IHN1cHBvcnRlZCAqLworCWlmIChmbGFncyAmIChJU0NTSV9GTEFHX0NNRF9VTkRFUkZMT1cgfCBJU0NTSV9GTEFHX0NNRF9PVkVSRkxPVykpIHsKKwkJcmVzaWQgPSAocHNvbC0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfc29sX2NxZSwgaV9yZXNfY250KSAvCisJCQkJMzJdICYgU09MX1JFU19DTlRfTUFTSyk7CisKKwkJaWYgKCFzdGF0dXMgJiYgKGZsYWdzICYgSVNDU0lfRkxBR19DTURfT1ZFUkZMT1cpKQorCQkJdGFzay0+c2MtPnJlc3VsdCA9IERJRF9FUlJPUiA8PCAxNjsKKworCQlpZiAoZmxhZ3MgJiBJU0NTSV9GTEFHX0NNRF9VTkRFUkZMT1cpIHsKKwkJCXNjc2lfc2V0X3Jlc2lkKHRhc2stPnNjLCByZXNpZCk7CisJCQlpZiAoIXN0YXR1cyAmJiAoc2NzaV9idWZmbGVuKHRhc2stPnNjKSAtIHJlc2lkIDwKKwkJCSAgICB0YXNrLT5zYy0+dW5kZXJmbG93KSkKKwkJCQl0YXNrLT5zYy0+cmVzdWx0ID0gRElEX0VSUk9SIDw8IDE2OworCQl9CisJfQorCisJaWYgKHN0YXR1cyA9PSBTQU1fU1RBVF9DSEVDS19DT05ESVRJT04pIHsKKwkJc2Vuc2UgPSBzdHNfYmhzLT5zZW5zZV9pbmZvICsgc2l6ZW9mKHVuc2lnbmVkIHNob3J0KTsKKwkJc2Vuc2VfbGVuID0KKwkJICAgIGNwdV90b19iZTE2KCh1bnNpZ25lZCBzaG9ydCkoc3RzX2Jocy0+c2Vuc2VfaW5mb1swXSkpOworCQltZW1jcHkodGFzay0+c2MtPnNlbnNlX2J1ZmZlciwgc2Vuc2UsCisJCSAgICAgICBtaW5fdCh1MTYsIHNlbnNlX2xlbiwgU0NTSV9TRU5TRV9CVUZGRVJTSVpFKSk7CisJfQorCWlmIChpb190YXNrLT5jbWRfYmhzLT5pc2NzaV9oZHIuZmxhZ3MgJiBJU0NTSV9GTEFHX0NNRF9SRUFEKSB7CisJCWlmIChwc29sLT5kd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9zb2xfY3FlLCBpX3Jlc19jbnQpIC8gMzJdCisJCQkJCQkJJiBTT0xfUkVTX0NOVF9NQVNLKQorCQkJIGNvbm4tPnJ4ZGF0YV9vY3RldHMgKz0gKHBzb2wtPgorCQkJICAgICAgZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfc29sX2NxZSwgaV9yZXNfY250KSAvIDMyXQorCQkJCQkJCSYgU09MX1JFU19DTlRfTUFTSyk7CisJfQordW5tYXA6CisJc2NzaV9kbWFfdW5tYXAoaW9fdGFzay0+c2NzaV9jbW5kKTsKKwlpc2NzaV9jb21wbGV0ZV9zY3NpX3Rhc2sodGFzaywgZXhwX2NtZHNuLCBtYXhfY21kc24pOworfQorCitzdGF0aWMgdm9pZAorYmVfY29tcGxldGVfbG9nb3V0KHN0cnVjdCBiZWlzY3NpX2Nvbm4gKmJlaXNjc2lfY29ubiwKKwkJICAgc3RydWN0IGlzY3NpX3Rhc2sgKnRhc2ssIHN0cnVjdCBzb2xfY3FlICpwc29sKQoreworCXN0cnVjdCBpc2NzaV9sb2dvdXRfcnNwICpoZHI7CisJc3RydWN0IGlzY3NpX2Nvbm4gKmNvbm4gPSBiZWlzY3NpX2Nvbm4tPmNvbm47CisKKwloZHIgPSAoc3RydWN0IGlzY3NpX2xvZ291dF9yc3AgKil0YXNrLT5oZHI7CisJaGRyLT50MndhaXQgPSA1OworCWhkci0+dDJyZXRhaW4gPSAwOworCWhkci0+ZmxhZ3MgPSAoKHBzb2wtPmR3W29mZnNldG9mKHN0cnVjdCBhbWFwX3NvbF9jcWUsIGlfZmxhZ3MpIC8gMzJdCisJCQkJCSYgU09MX0ZMQUdTX01BU0spID4+IDI0KSB8IDB4ODA7CisJaGRyLT5yZXNwb25zZSA9IChwc29sLT5kd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9zb2xfY3FlLCBpX3Jlc3ApIC8KKwkJCQkJMzJdICYgU09MX1JFU1BfTUFTSyk7CisJaGRyLT5leHBfY21kc24gPSBjcHVfdG9fYmUzMihwc29sLT4KKwkJCWR3W29mZnNldG9mKHN0cnVjdCBhbWFwX3NvbF9jcWUsIGlfZXhwX2NtZF9zbikgLyAzMl0KKwkJCQkJJiBTT0xfRVhQX0NNRF9TTl9NQVNLKTsKKwloZHItPm1heF9jbWRzbiA9IGJlMzJfdG9fY3B1KChwc29sLT4KKwkJCSBkd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9zb2xfY3FlLCBpX2V4cF9jbWRfc24pIC8gMzJdCisJCQkJCSYgU09MX0VYUF9DTURfU05fTUFTSykgKworCQkJKChwc29sLT5kd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9zb2xfY3FlLCBpX2NtZF93bmQpCisJCQkJCS8gMzJdICYgU09MX0NNRF9XTkRfTUFTSykgPj4gMjQpIC0gMSk7CisJaGRyLT5obGVuZ3RoID0gMDsKKworCV9faXNjc2lfY29tcGxldGVfcGR1KGNvbm4sIChzdHJ1Y3QgaXNjc2lfaGRyICopaGRyLCBOVUxMLCAwKTsKK30KKworc3RhdGljIHZvaWQKK2JlX2NvbXBsZXRlX3RtZihzdHJ1Y3QgYmVpc2NzaV9jb25uICpiZWlzY3NpX2Nvbm4sCisJCXN0cnVjdCBpc2NzaV90YXNrICp0YXNrLCBzdHJ1Y3Qgc29sX2NxZSAqcHNvbCkKK3sKKwlzdHJ1Y3QgaXNjc2lfdG1fcnNwICpoZHI7CisJc3RydWN0IGlzY3NpX2Nvbm4gKmNvbm4gPSBiZWlzY3NpX2Nvbm4tPmNvbm47CisKKwloZHIgPSAoc3RydWN0IGlzY3NpX3RtX3JzcCAqKXRhc2stPmhkcjsKKwloZHItPmZsYWdzID0gKChwc29sLT5kd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9zb2xfY3FlLCBpX2ZsYWdzKSAvIDMyXQorCQkJCQkmIFNPTF9GTEFHU19NQVNLKSA+PiAyNCkgfCAweDgwOworCWhkci0+cmVzcG9uc2UgPSAocHNvbC0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfc29sX2NxZSwgaV9yZXNwKSAvCisJCQkJCTMyXSAmIFNPTF9SRVNQX01BU0spOworCWhkci0+ZXhwX2NtZHNuID0gY3B1X3RvX2JlMzIocHNvbC0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfc29sX2NxZSwKKwkJCQkgICAgIGlfZXhwX2NtZF9zbikgLyAzMl0gJiBTT0xfRVhQX0NNRF9TTl9NQVNLKTsKKwloZHItPm1heF9jbWRzbiA9IGJlMzJfdG9fY3B1KChwc29sLT5kd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9zb2xfY3FlLAorCQkJaV9leHBfY21kX3NuKSAvIDMyXSAmIFNPTF9FWFBfQ01EX1NOX01BU0spICsKKwkJCSgocHNvbC0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfc29sX2NxZSwgaV9jbWRfd25kKQorCQkJLyAzMl0gJiBTT0xfQ01EX1dORF9NQVNLKSA+PiAyNCkgLSAxKTsKKwlfX2lzY3NpX2NvbXBsZXRlX3BkdShjb25uLCAoc3RydWN0IGlzY3NpX2hkciAqKWhkciwgTlVMTCwgMCk7Cit9CisKK3N0YXRpYyB2b2lkCitod2lfY29tcGxldGVfZHJ2cl9tc2dzKHN0cnVjdCBiZWlzY3NpX2Nvbm4gKmJlaXNjc2lfY29ubiwKKwkJICAgICAgIHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSwgc3RydWN0IHNvbF9jcWUgKnBzb2wpCit7CisJc3RydWN0IGh3aV93cmJfY29udGV4dCAqcHdyYl9jb250ZXh0OworCXN0cnVjdCB3cmJfaGFuZGxlICpwd3JiX2hhbmRsZTsKKwlzdHJ1Y3QgaHdpX2NvbnRyb2xsZXIgKnBod2lfY3RybHI7CisJc3RydWN0IGlzY3NpX2Nvbm4gKmNvbm4gPSBiZWlzY3NpX2Nvbm4tPmNvbm47CisJc3RydWN0IGlzY3NpX3Nlc3Npb24gKnNlc3Npb24gPSBjb25uLT5zZXNzaW9uOworCisJcGh3aV9jdHJsciA9IHBoYmEtPnBod2lfY3RybHI7CisJcHdyYl9jb250ZXh0ID0gJnBod2lfY3RybHItPndyYl9jb250ZXh0WygocHNvbC0+CisJCQkJZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfc29sX2NxZSwgY2lkKSAvIDMyXSAmCisJCQkJU09MX0NJRF9NQVNLKSA+PiA2KV07CisJcHdyYl9oYW5kbGUgPSBwd3JiX2NvbnRleHQtPnB3cmJfaGFuZGxlX2Jhc2VzdGRbKChwc29sLT4KKwkJCQlkd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9zb2xfY3FlLCB3cmJfaW5kZXgpIC8KKwkJCQkzMl0gJiBTT0xfV1JCX0lOREVYX01BU0spID4+IDE2KV07CisJc3Bpbl9sb2NrX2JoKCZzZXNzaW9uLT5sb2NrKTsKKwlmcmVlX3dyYl9oYW5kbGUocGhiYSwgcHdyYl9jb250ZXh0LCBwd3JiX2hhbmRsZSk7CisJc3Bpbl91bmxvY2tfYmgoJnNlc3Npb24tPmxvY2spOworfQorCitzdGF0aWMgdm9pZAorYmVfY29tcGxldGVfbm9waW5fcmVzcChzdHJ1Y3QgYmVpc2NzaV9jb25uICpiZWlzY3NpX2Nvbm4sCisJCSAgICAgICBzdHJ1Y3QgaXNjc2lfdGFzayAqdGFzaywgc3RydWN0IHNvbF9jcWUgKnBzb2wpCit7CisJc3RydWN0IGlzY3NpX25vcGluICpoZHI7CisJc3RydWN0IGlzY3NpX2Nvbm4gKmNvbm4gPSBiZWlzY3NpX2Nvbm4tPmNvbm47CisKKwloZHIgPSAoc3RydWN0IGlzY3NpX25vcGluICopdGFzay0+aGRyOworCWhkci0+ZmxhZ3MgPSAoKHBzb2wtPmR3W29mZnNldG9mKHN0cnVjdCBhbWFwX3NvbF9jcWUsIGlfZmxhZ3MpIC8gMzJdCisJCQkmIFNPTF9GTEFHU19NQVNLKSA+PiAyNCkgfCAweDgwOworCWhkci0+ZXhwX2NtZHNuID0gY3B1X3RvX2JlMzIocHNvbC0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfc29sX2NxZSwKKwkJCQkgICAgIGlfZXhwX2NtZF9zbikgLyAzMl0gJiBTT0xfRVhQX0NNRF9TTl9NQVNLKTsKKwloZHItPm1heF9jbWRzbiA9IGJlMzJfdG9fY3B1KChwc29sLT5kd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9zb2xfY3FlLAorCQkJaV9leHBfY21kX3NuKSAvIDMyXSAmIFNPTF9FWFBfQ01EX1NOX01BU0spICsKKwkJCSgocHNvbC0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfc29sX2NxZSwgaV9jbWRfd25kKQorCQkJLyAzMl0gJiBTT0xfQ01EX1dORF9NQVNLKSA+PiAyNCkgLSAxKTsKKwloZHItPm9wY29kZSA9IElTQ1NJX09QX05PT1BfSU47CisJX19pc2NzaV9jb21wbGV0ZV9wZHUoY29ubiwgKHN0cnVjdCBpc2NzaV9oZHIgKiloZHIsIE5VTEwsIDApOworfQorCitzdGF0aWMgdm9pZCBod2lfY29tcGxldGVfY21kKHN0cnVjdCBiZWlzY3NpX2Nvbm4gKmJlaXNjc2lfY29ubiwKKwkJCSAgICAgc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhLCBzdHJ1Y3Qgc29sX2NxZSAqcHNvbCkKK3sKKwlzdHJ1Y3QgaHdpX3dyYl9jb250ZXh0ICpwd3JiX2NvbnRleHQ7CisJc3RydWN0IHdyYl9oYW5kbGUgKnB3cmJfaGFuZGxlOworCXN0cnVjdCBpc2NzaV93cmIgKnB3cmIgPSBOVUxMOworCXN0cnVjdCBod2lfY29udHJvbGxlciAqcGh3aV9jdHJscjsKKwlzdHJ1Y3QgaXNjc2lfdGFzayAqdGFzazsKKwlzdHJ1Y3QgYmVpc2NzaV9pb190YXNrICppb190YXNrOworCXN0cnVjdCBpc2NzaV9jb25uICpjb25uID0gYmVpc2NzaV9jb25uLT5jb25uOworCXN0cnVjdCBpc2NzaV9zZXNzaW9uICpzZXNzaW9uID0gY29ubi0+c2Vzc2lvbjsKKworCXBod2lfY3RybHIgPSBwaGJhLT5waHdpX2N0cmxyOworCisJcHdyYl9jb250ZXh0ID0gJnBod2lfY3RybHItPgorCQl3cmJfY29udGV4dFsoKHBzb2wtPmR3W29mZnNldG9mKHN0cnVjdCBhbWFwX3NvbF9jcWUsIGNpZCkgLyAzMl0KKwkJJiBTT0xfQ0lEX01BU0spID4+IDYpXTsKKwlwd3JiX2hhbmRsZSA9IHB3cmJfY29udGV4dC0+cHdyYl9oYW5kbGVfYmFzZXN0ZFsoKHBzb2wtPgorCQkJCWR3W29mZnNldG9mKHN0cnVjdCBhbWFwX3NvbF9jcWUsIHdyYl9pbmRleCkgLworCQkJCTMyXSAmIFNPTF9XUkJfSU5ERVhfTUFTSykgPj4gMTYpXTsKKworCXRhc2sgPSBwd3JiX2hhbmRsZS0+cGlvX2hhbmRsZTsKKwlpb190YXNrID0gdGFzay0+ZGRfZGF0YTsKKwlzcGluX2xvY2tfYmgoJnNlc3Npb24tPmxvY2spOworCXB3cmIgPSBwd3JiX2hhbmRsZS0+cHdyYjsKKwlzd2l0Y2ggKChwd3JiLT5kd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIHR5cGUpIC8gMzJdICYKKwkJIFdSQl9UWVBFX01BU0spID4+IDI4KSB7CisJY2FzZSBIV0hfVFlQRV9JTzoKKwljYXNlIEhXSF9UWVBFX0lPX1JEOgorCQlpZiAoKHRhc2stPmhkci0+b3Bjb2RlICYgSVNDU0lfT1BDT0RFX01BU0spID09CisJCSAgICBJU0NTSV9PUF9OT09QX09VVCkgeworCQkJYmVfY29tcGxldGVfbm9waW5fcmVzcChiZWlzY3NpX2Nvbm4sIHRhc2ssIHBzb2wpOworCQl9IGVsc2UKKwkJCWJlX2NvbXBsZXRlX2lvKGJlaXNjc2lfY29ubiwgdGFzaywgcHNvbCk7CisJCWJyZWFrOworCisJY2FzZSBIV0hfVFlQRV9MT0dPVVQ6CisJCWJlX2NvbXBsZXRlX2xvZ291dChiZWlzY3NpX2Nvbm4sIHRhc2ssIHBzb2wpOworCQlicmVhazsKKworCWNhc2UgSFdIX1RZUEVfTE9HSU46CisJCVNFX0RFQlVHKERCR19MVkxfMSwKKwkJCSAiXHRcdCBObyBIV0hfVFlQRV9MT0dJTiBFeHBlY3RlZCBpbiBod2lfY29tcGxldGVfY21kIgorCQkJICItIFNvbGljaXRlZCBwYXRoIFxuIik7CisJCWJyZWFrOworCisJY2FzZSBIV0hfVFlQRV9UTUY6CisJCWJlX2NvbXBsZXRlX3RtZihiZWlzY3NpX2Nvbm4sIHRhc2ssIHBzb2wpOworCQlicmVhazsKKworCWNhc2UgSFdIX1RZUEVfTk9QOgorCQliZV9jb21wbGV0ZV9ub3Bpbl9yZXNwKGJlaXNjc2lfY29ubiwgdGFzaywgcHNvbCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJc2hvc3RfcHJpbnRrKEtFUk5fV0FSTklORywgcGhiYS0+c2hvc3QsCisJCQkgICAgIndyYl9pbmRleCAweCV4IENJRCAweCV4XG4iLAorCQkJICAgICgocHNvbC0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCB0eXBlKSAvCisJCQkJCTMyXSAmIFNPTF9XUkJfSU5ERVhfTUFTSykgPj4gMTYpLAorCQkJICAgICgocHNvbC0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfc29sX2NxZSwgY2lkKSAvIDMyXQorCQkJCQkmIFNPTF9DSURfTUFTSykgPj4gNikpOworCQlicmVhazsKKwl9CisKKwlzcGluX3VubG9ja19iaCgmc2Vzc2lvbi0+bG9jayk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbGlzdF9oZWFkICpod2lfZ2V0X2FzeW5jX2J1c3lfbGlzdChzdHJ1Y3QgaHdpX2FzeW5jX3BkdV9jb250ZXh0CisJCQkJCSAgKnBhc3luY19jdHgsIHVuc2lnbmVkIGludCBpc19oZWFkZXIsCisJCQkJCSAgdW5zaWduZWQgaW50IGhvc3Rfd3JpdGVfcHRyKQoreworCWlmIChpc19oZWFkZXIpCisJCXJldHVybiAmcGFzeW5jX2N0eC0+YXN5bmNfZW50cnlbaG9zdF93cml0ZV9wdHJdLgorCQkgICAgaGVhZGVyX2J1c3lfbGlzdDsKKwllbHNlCisJCXJldHVybiAmcGFzeW5jX2N0eC0+YXN5bmNfZW50cnlbaG9zdF93cml0ZV9wdHJdLmRhdGFfYnVzeV9saXN0OworfQorCitzdGF0aWMgc3RydWN0IGFzeW5jX3BkdV9oYW5kbGUgKgoraHdpX2dldF9hc3luY19oYW5kbGUoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhLAorCQkgICAgIHN0cnVjdCBiZWlzY3NpX2Nvbm4gKmJlaXNjc2lfY29ubiwKKwkJICAgICBzdHJ1Y3QgaHdpX2FzeW5jX3BkdV9jb250ZXh0ICpwYXN5bmNfY3R4LAorCQkgICAgIHN0cnVjdCBpX3RfZHBkdV9jcWUgKnBkcGR1X2NxZSwgdW5zaWduZWQgaW50ICpwY3FfaW5kZXgpCit7CisJc3RydWN0IGJlX2J1c19hZGRyZXNzIHBoeXNfYWRkcjsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpwYnVzeV9saXN0OworCXN0cnVjdCBhc3luY19wZHVfaGFuZGxlICpwYXN5bmNfaGFuZGxlID0gTlVMTDsKKwlpbnQgYnVmZmVyX2xlbiA9IDA7CisJdW5zaWduZWQgY2hhciBidWZmZXJfaW5kZXggPSAtMTsKKwl1bnNpZ25lZCBjaGFyIGlzX2hlYWRlciA9IDA7CisKKwlwaHlzX2FkZHIudS5hMzIuYWRkcmVzc19sbyA9CisJICAgIHBkcGR1X2NxZS0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfaV90X2RwZHVfY3FlLCBkYl9hZGRyX2xvKSAvIDMyXSAtCisJICAgICgocGRwZHVfY3FlLT5kd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9pX3RfZHBkdV9jcWUsIGRwbCkgLyAzMl0KKwkJCQkJCSYgUERVQ1FFX0RQTF9NQVNLKSA+PiAxNik7CisJcGh5c19hZGRyLnUuYTMyLmFkZHJlc3NfaGkgPQorCSAgICBwZHBkdV9jcWUtPmR3W29mZnNldG9mKHN0cnVjdCBhbWFwX2lfdF9kcGR1X2NxZSwgZGJfYWRkcl9oaSkgLyAzMl07CisKKwlwaHlzX2FkZHIudS5hNjQuYWRkcmVzcyA9CisJCQkqKCh1bnNpZ25lZCBsb25nIGxvbmcgKikoJnBoeXNfYWRkci51LmE2NC5hZGRyZXNzKSk7CisKKwlzd2l0Y2ggKHBkcGR1X2NxZS0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfaV90X2RwZHVfY3FlLCBjb2RlKSAvIDMyXQorCQkJJiBQRFVDUUVfQ09ERV9NQVNLKSB7CisJY2FzZSBVTlNPTF9IRFJfTk9USUZZOgorCQlpc19oZWFkZXIgPSAxOworCisJCXBidXN5X2xpc3QgPSBod2lfZ2V0X2FzeW5jX2J1c3lfbGlzdChwYXN5bmNfY3R4LCAxLAorCQkJKHBkcGR1X2NxZS0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfaV90X2RwZHVfY3FlLAorCQkJaW5kZXgpIC8gMzJdICYgUERVQ1FFX0lOREVYX01BU0spKTsKKworCQlidWZmZXJfbGVuID0gKHVuc2lnbmVkIGludCkocGh5c19hZGRyLnUuYTY0LmFkZHJlc3MgLQorCQkJCXBhc3luY19jdHgtPmFzeW5jX2hlYWRlci5wYV9iYXNlLnUuYTY0LmFkZHJlc3MpOworCisJCWJ1ZmZlcl9pbmRleCA9IGJ1ZmZlcl9sZW4gLworCQkJCXBhc3luY19jdHgtPmFzeW5jX2hlYWRlci5idWZmZXJfc2l6ZTsKKworCQlicmVhazsKKwljYXNlIFVOU09MX0RBVEFfTk9USUZZOgorCQlwYnVzeV9saXN0ID0gaHdpX2dldF9hc3luY19idXN5X2xpc3QocGFzeW5jX2N0eCwgMCwgKHBkcGR1X2NxZS0+CisJCQkJCWR3W29mZnNldG9mKHN0cnVjdCBhbWFwX2lfdF9kcGR1X2NxZSwKKwkJCQkJaW5kZXgpIC8gMzJdICYgUERVQ1FFX0lOREVYX01BU0spKTsKKwkJYnVmZmVyX2xlbiA9ICh1bnNpZ25lZCBsb25nKShwaHlzX2FkZHIudS5hNjQuYWRkcmVzcyAtCisJCQkJCXBhc3luY19jdHgtPmFzeW5jX2RhdGEucGFfYmFzZS51LgorCQkJCQlhNjQuYWRkcmVzcyk7CisJCWJ1ZmZlcl9pbmRleCA9IGJ1ZmZlcl9sZW4gLyBwYXN5bmNfY3R4LT5hc3luY19kYXRhLmJ1ZmZlcl9zaXplOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwYnVzeV9saXN0ID0gTlVMTDsKKwkJc2hvc3RfcHJpbnRrKEtFUk5fV0FSTklORywgcGhiYS0+c2hvc3QsCisJCQkiVW5leHBlY3RlZCBjb2RlPSVkIFxuIiwKKwkJCSBwZHBkdV9jcWUtPmR3W29mZnNldG9mKHN0cnVjdCBhbWFwX2lfdF9kcGR1X2NxZSwKKwkJCQkJY29kZSkgLyAzMl0gJiBQRFVDUUVfQ09ERV9NQVNLKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJV0FSTl9PTighKGJ1ZmZlcl9pbmRleCA8PSBwYXN5bmNfY3R4LT5hc3luY19kYXRhLm51bV9lbnRyaWVzKSk7CisJV0FSTl9PTihsaXN0X2VtcHR5KHBidXN5X2xpc3QpKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBhc3luY19oYW5kbGUsIHBidXN5X2xpc3QsIGxpbmspIHsKKwkJV0FSTl9PTihwYXN5bmNfaGFuZGxlLT5jb25zdW1lZCk7CisJCWlmIChwYXN5bmNfaGFuZGxlLT5pbmRleCA9PSBidWZmZXJfaW5kZXgpCisJCQlicmVhazsKKwl9CisKKwlXQVJOX09OKCFwYXN5bmNfaGFuZGxlKTsKKworCXBhc3luY19oYW5kbGUtPmNyaSA9ICh1bnNpZ25lZCBzaG9ydCliZWlzY3NpX2Nvbm4tPmJlaXNjc2lfY29ubl9jaWQ7CisJcGFzeW5jX2hhbmRsZS0+aXNfaGVhZGVyID0gaXNfaGVhZGVyOworCXBhc3luY19oYW5kbGUtPmJ1ZmZlcl9sZW4gPSAoKHBkcGR1X2NxZS0+CisJCQlkd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9pX3RfZHBkdV9jcWUsIGRwbCkgLyAzMl0KKwkJCSYgUERVQ1FFX0RQTF9NQVNLKSA+PiAxNik7CisKKwkqcGNxX2luZGV4ID0gKHBkcGR1X2NxZS0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfaV90X2RwZHVfY3FlLAorCQkJaW5kZXgpIC8gMzJdICYgUERVQ1FFX0lOREVYX01BU0spOworCXJldHVybiBwYXN5bmNfaGFuZGxlOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50Citod2lfdXBkYXRlX2FzeW5jX3dyaXRhYmxlcyhzdHJ1Y3QgaHdpX2FzeW5jX3BkdV9jb250ZXh0ICpwYXN5bmNfY3R4LAorCQkJICAgdW5zaWduZWQgaW50IGlzX2hlYWRlciwgdW5zaWduZWQgaW50IGNxX2luZGV4KQoreworCXN0cnVjdCBsaXN0X2hlYWQgKnBidXN5X2xpc3Q7CisJc3RydWN0IGFzeW5jX3BkdV9oYW5kbGUgKnBhc3luY19oYW5kbGU7CisJdW5zaWduZWQgaW50IG51bV9lbnRyaWVzLCB3cml0YWJsZXMgPSAwOworCXVuc2lnbmVkIGludCAqcGVwX3JlYWRfcHRyLCAqcHdyaXRhYmxlczsKKworCisJaWYgKGlzX2hlYWRlcikgeworCQlwZXBfcmVhZF9wdHIgPSAmcGFzeW5jX2N0eC0+YXN5bmNfaGVhZGVyLmVwX3JlYWRfcHRyOworCQlwd3JpdGFibGVzID0gJnBhc3luY19jdHgtPmFzeW5jX2hlYWRlci53cml0YWJsZXM7CisJCW51bV9lbnRyaWVzID0gcGFzeW5jX2N0eC0+YXN5bmNfaGVhZGVyLm51bV9lbnRyaWVzOworCX0gZWxzZSB7CisJCXBlcF9yZWFkX3B0ciA9ICZwYXN5bmNfY3R4LT5hc3luY19kYXRhLmVwX3JlYWRfcHRyOworCQlwd3JpdGFibGVzID0gJnBhc3luY19jdHgtPmFzeW5jX2RhdGEud3JpdGFibGVzOworCQludW1fZW50cmllcyA9IHBhc3luY19jdHgtPmFzeW5jX2RhdGEubnVtX2VudHJpZXM7CisJfQorCisJd2hpbGUgKCgqcGVwX3JlYWRfcHRyKSAhPSBjcV9pbmRleCkgeworCQkoKnBlcF9yZWFkX3B0cikrKzsKKwkJKnBlcF9yZWFkX3B0ciA9ICgqcGVwX3JlYWRfcHRyKSAlIG51bV9lbnRyaWVzOworCisJCXBidXN5X2xpc3QgPSBod2lfZ2V0X2FzeW5jX2J1c3lfbGlzdChwYXN5bmNfY3R4LCBpc19oZWFkZXIsCisJCQkJCQkgICAgICpwZXBfcmVhZF9wdHIpOworCQlpZiAod3JpdGFibGVzID09IDApCisJCQlXQVJOX09OKGxpc3RfZW1wdHkocGJ1c3lfbGlzdCkpOworCisJCWlmICghbGlzdF9lbXB0eShwYnVzeV9saXN0KSkgeworCQkJcGFzeW5jX2hhbmRsZSA9IGxpc3RfZW50cnkocGJ1c3lfbGlzdC0+bmV4dCwKKwkJCQkJCSAgIHN0cnVjdCBhc3luY19wZHVfaGFuZGxlLAorCQkJCQkJICAgbGluayk7CisJCQlXQVJOX09OKCFwYXN5bmNfaGFuZGxlKTsKKwkJCXBhc3luY19oYW5kbGUtPmNvbnN1bWVkID0gMTsKKwkJfQorCisJCXdyaXRhYmxlcysrOworCX0KKworCWlmICghd3JpdGFibGVzKSB7CisJCVNFX0RFQlVHKERCR19MVkxfMSwKKwkJCSAiRHVwbGljYXRlIG5vdGlmaWNhdGlvbiByZWNlaXZlZCAtIGluZGV4IDB4JXghIVxuIiwKKwkJCSBjcV9pbmRleCk7CisJCVdBUk5fT04oMSk7CisJfQorCisJKnB3cml0YWJsZXMgPSAqcHdyaXRhYmxlcyArIHdyaXRhYmxlczsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBod2lfZnJlZV9hc3luY19tc2coc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhLAorCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgY3JpKQoreworCXN0cnVjdCBod2lfY29udHJvbGxlciAqcGh3aV9jdHJscjsKKwlzdHJ1Y3QgaHdpX2FzeW5jX3BkdV9jb250ZXh0ICpwYXN5bmNfY3R4OworCXN0cnVjdCBhc3luY19wZHVfaGFuZGxlICpwYXN5bmNfaGFuZGxlLCAqdG1wX2hhbmRsZTsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpwbGlzdDsKKwl1bnNpZ25lZCBpbnQgaSA9IDA7CisKKwlwaHdpX2N0cmxyID0gcGhiYS0+cGh3aV9jdHJscjsKKwlwYXN5bmNfY3R4ID0gSFdJX0dFVF9BU1lOQ19QRFVfQ1RYKHBod2lfY3RybHIpOworCisJcGxpc3QgID0gJnBhc3luY19jdHgtPmFzeW5jX2VudHJ5W2NyaV0ud2FpdF9xdWV1ZS5saXN0OworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBhc3luY19oYW5kbGUsIHRtcF9oYW5kbGUsIHBsaXN0LCBsaW5rKSB7CisJCWxpc3RfZGVsKCZwYXN5bmNfaGFuZGxlLT5saW5rKTsKKworCQlpZiAoaSA9PSAwKSB7CisJCQlsaXN0X2FkZF90YWlsKCZwYXN5bmNfaGFuZGxlLT5saW5rLAorCQkJCSAgICAgICZwYXN5bmNfY3R4LT5hc3luY19oZWFkZXIuZnJlZV9saXN0KTsKKwkJCXBhc3luY19jdHgtPmFzeW5jX2hlYWRlci5mcmVlX2VudHJpZXMrKzsKKwkJCWkrKzsKKwkJfSBlbHNlIHsKKwkJCWxpc3RfYWRkX3RhaWwoJnBhc3luY19oYW5kbGUtPmxpbmssCisJCQkJICAgICAgJnBhc3luY19jdHgtPmFzeW5jX2RhdGEuZnJlZV9saXN0KTsKKwkJCXBhc3luY19jdHgtPmFzeW5jX2RhdGEuZnJlZV9lbnRyaWVzKys7CisJCQlpKys7CisJCX0KKwl9CisKKwlJTklUX0xJU1RfSEVBRCgmcGFzeW5jX2N0eC0+YXN5bmNfZW50cnlbY3JpXS53YWl0X3F1ZXVlLmxpc3QpOworCXBhc3luY19jdHgtPmFzeW5jX2VudHJ5W2NyaV0ud2FpdF9xdWV1ZS5oZHJfcmVjZWl2ZWQgPSAwOworCXBhc3luY19jdHgtPmFzeW5jX2VudHJ5W2NyaV0ud2FpdF9xdWV1ZS5ieXRlc19yZWNlaXZlZCA9IDA7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGh5c19hZGRyICoKK2h3aV9nZXRfcmluZ19hZGRyZXNzKHN0cnVjdCBod2lfYXN5bmNfcGR1X2NvbnRleHQgKnBhc3luY19jdHgsCisJCSAgICAgdW5zaWduZWQgaW50IGlzX2hlYWRlciwgdW5zaWduZWQgaW50IGhvc3Rfd3JpdGVfcHRyKQoreworCXN0cnVjdCBwaHlzX2FkZHIgKnBhc3luY19zZ2UgPSBOVUxMOworCisJaWYgKGlzX2hlYWRlcikKKwkJcGFzeW5jX3NnZSA9IHBhc3luY19jdHgtPmFzeW5jX2hlYWRlci5yaW5nX2Jhc2U7CisJZWxzZQorCQlwYXN5bmNfc2dlID0gcGFzeW5jX2N0eC0+YXN5bmNfZGF0YS5yaW5nX2Jhc2U7CisKKwlyZXR1cm4gcGFzeW5jX3NnZSArIGhvc3Rfd3JpdGVfcHRyOworfQorCitzdGF0aWMgdm9pZCBod2lfcG9zdF9hc3luY19idWZmZXJzKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSwKKwkJCQkgICB1bnNpZ25lZCBpbnQgaXNfaGVhZGVyKQoreworCXN0cnVjdCBod2lfY29udHJvbGxlciAqcGh3aV9jdHJscjsKKwlzdHJ1Y3QgaHdpX2FzeW5jX3BkdV9jb250ZXh0ICpwYXN5bmNfY3R4OworCXN0cnVjdCBhc3luY19wZHVfaGFuZGxlICpwYXN5bmNfaGFuZGxlOworCXN0cnVjdCBsaXN0X2hlYWQgKnBmcmVlX2xpbmssICpwYnVzeV9saXN0OworCXN0cnVjdCBwaHlzX2FkZHIgKnBhc3luY19zZ2U7CisJdW5zaWduZWQgaW50IHJpbmdfaWQsIG51bV9lbnRyaWVzOworCXVuc2lnbmVkIGludCBob3N0X3dyaXRlX251bTsKKwl1bnNpZ25lZCBpbnQgd3JpdGFibGVzOworCXVuc2lnbmVkIGludCBpID0gMDsKKwl1MzIgZG9vcmJlbGwgPSAwOworCisJcGh3aV9jdHJsciA9IHBoYmEtPnBod2lfY3RybHI7CisJcGFzeW5jX2N0eCA9IEhXSV9HRVRfQVNZTkNfUERVX0NUWChwaHdpX2N0cmxyKTsKKworCWlmIChpc19oZWFkZXIpIHsKKwkJbnVtX2VudHJpZXMgPSBwYXN5bmNfY3R4LT5hc3luY19oZWFkZXIubnVtX2VudHJpZXM7CisJCXdyaXRhYmxlcyA9IG1pbihwYXN5bmNfY3R4LT5hc3luY19oZWFkZXIud3JpdGFibGVzLAorCQkJCXBhc3luY19jdHgtPmFzeW5jX2hlYWRlci5mcmVlX2VudHJpZXMpOworCQlwZnJlZV9saW5rID0gcGFzeW5jX2N0eC0+YXN5bmNfaGVhZGVyLmZyZWVfbGlzdC5uZXh0OworCQlob3N0X3dyaXRlX251bSA9IHBhc3luY19jdHgtPmFzeW5jX2hlYWRlci5ob3N0X3dyaXRlX3B0cjsKKwkJcmluZ19pZCA9IHBod2lfY3RybHItPmRlZmF1bHRfcGR1X2hkci5pZDsKKwl9IGVsc2UgeworCQludW1fZW50cmllcyA9IHBhc3luY19jdHgtPmFzeW5jX2RhdGEubnVtX2VudHJpZXM7CisJCXdyaXRhYmxlcyA9IG1pbihwYXN5bmNfY3R4LT5hc3luY19kYXRhLndyaXRhYmxlcywKKwkJCQlwYXN5bmNfY3R4LT5hc3luY19kYXRhLmZyZWVfZW50cmllcyk7CisJCXBmcmVlX2xpbmsgPSBwYXN5bmNfY3R4LT5hc3luY19kYXRhLmZyZWVfbGlzdC5uZXh0OworCQlob3N0X3dyaXRlX251bSA9IHBhc3luY19jdHgtPmFzeW5jX2RhdGEuaG9zdF93cml0ZV9wdHI7CisJCXJpbmdfaWQgPSBwaHdpX2N0cmxyLT5kZWZhdWx0X3BkdV9kYXRhLmlkOworCX0KKworCXdyaXRhYmxlcyA9ICh3cml0YWJsZXMgLyA4KSAqIDg7CisJaWYgKHdyaXRhYmxlcykgeworCQlmb3IgKGkgPSAwOyBpIDwgd3JpdGFibGVzOyBpKyspIHsKKwkJCXBidXN5X2xpc3QgPQorCQkJICAgIGh3aV9nZXRfYXN5bmNfYnVzeV9saXN0KHBhc3luY19jdHgsIGlzX2hlYWRlciwKKwkJCQkJCSAgICBob3N0X3dyaXRlX251bSk7CisJCQlwYXN5bmNfaGFuZGxlID0KKwkJCSAgICBsaXN0X2VudHJ5KHBmcmVlX2xpbmssIHN0cnVjdCBhc3luY19wZHVfaGFuZGxlLAorCQkJCQkJCQlsaW5rKTsKKwkJCVdBUk5fT04oIXBhc3luY19oYW5kbGUpOworCQkJcGFzeW5jX2hhbmRsZS0+Y29uc3VtZWQgPSAwOworCisJCQlwZnJlZV9saW5rID0gcGZyZWVfbGluay0+bmV4dDsKKworCQkJcGFzeW5jX3NnZSA9IGh3aV9nZXRfcmluZ19hZGRyZXNzKHBhc3luY19jdHgsCisJCQkJCQlpc19oZWFkZXIsIGhvc3Rfd3JpdGVfbnVtKTsKKworCQkJcGFzeW5jX3NnZS0+aGkgPSBwYXN5bmNfaGFuZGxlLT5wYS51LmEzMi5hZGRyZXNzX2xvOworCQkJcGFzeW5jX3NnZS0+bG8gPSBwYXN5bmNfaGFuZGxlLT5wYS51LmEzMi5hZGRyZXNzX2hpOworCisJCQlsaXN0X21vdmUoJnBhc3luY19oYW5kbGUtPmxpbmssIHBidXN5X2xpc3QpOworCisJCQlob3N0X3dyaXRlX251bSsrOworCQkJaG9zdF93cml0ZV9udW0gPSBob3N0X3dyaXRlX251bSAlIG51bV9lbnRyaWVzOworCQl9CisKKwkJaWYgKGlzX2hlYWRlcikgeworCQkJcGFzeW5jX2N0eC0+YXN5bmNfaGVhZGVyLmhvc3Rfd3JpdGVfcHRyID0KKwkJCQkJCQlob3N0X3dyaXRlX251bTsKKwkJCXBhc3luY19jdHgtPmFzeW5jX2hlYWRlci5mcmVlX2VudHJpZXMgLT0gd3JpdGFibGVzOworCQkJcGFzeW5jX2N0eC0+YXN5bmNfaGVhZGVyLndyaXRhYmxlcyAtPSB3cml0YWJsZXM7CisJCQlwYXN5bmNfY3R4LT5hc3luY19oZWFkZXIuYnVzeV9lbnRyaWVzICs9IHdyaXRhYmxlczsKKwkJfSBlbHNlIHsKKwkJCXBhc3luY19jdHgtPmFzeW5jX2RhdGEuaG9zdF93cml0ZV9wdHIgPSBob3N0X3dyaXRlX251bTsKKwkJCXBhc3luY19jdHgtPmFzeW5jX2RhdGEuZnJlZV9lbnRyaWVzIC09IHdyaXRhYmxlczsKKwkJCXBhc3luY19jdHgtPmFzeW5jX2RhdGEud3JpdGFibGVzIC09IHdyaXRhYmxlczsKKwkJCXBhc3luY19jdHgtPmFzeW5jX2RhdGEuYnVzeV9lbnRyaWVzICs9IHdyaXRhYmxlczsKKwkJfQorCisJCWRvb3JiZWxsIHw9IHJpbmdfaWQgJiBEQl9ERUZfUERVX1JJTkdfSURfTUFTSzsKKwkJZG9vcmJlbGwgfD0gMSA8PCBEQl9ERUZfUERVX1JFQVJNX1NISUZUOworCQlkb29yYmVsbCB8PSAwIDw8IERCX0RFRl9QRFVfRVZFTlRfU0hJRlQ7CisJCWRvb3JiZWxsIHw9ICh3cml0YWJsZXMgJiBEQl9ERUZfUERVX0NRUFJPQ19NQVNLKQorCQkJCQk8PCBEQl9ERUZfUERVX0NRUFJPQ19TSElGVDsKKworCQlpb3dyaXRlMzIoZG9vcmJlbGwsIHBoYmEtPmRiX3ZhICsgREJfUlhVTFAwX09GRlNFVCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBod2lfZmx1c2hfZGVmYXVsdF9wZHVfYnVmZmVyKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSwKKwkJCQkJIHN0cnVjdCBiZWlzY3NpX2Nvbm4gKmJlaXNjc2lfY29ubiwKKwkJCQkJIHN0cnVjdCBpX3RfZHBkdV9jcWUgKnBkcGR1X2NxZSkKK3sKKwlzdHJ1Y3QgaHdpX2NvbnRyb2xsZXIgKnBod2lfY3RybHI7CisJc3RydWN0IGh3aV9hc3luY19wZHVfY29udGV4dCAqcGFzeW5jX2N0eDsKKwlzdHJ1Y3QgYXN5bmNfcGR1X2hhbmRsZSAqcGFzeW5jX2hhbmRsZSA9IE5VTEw7CisJdW5zaWduZWQgaW50IGNxX2luZGV4ID0gLTE7CisKKwlwaHdpX2N0cmxyID0gcGhiYS0+cGh3aV9jdHJscjsKKwlwYXN5bmNfY3R4ID0gSFdJX0dFVF9BU1lOQ19QRFVfQ1RYKHBod2lfY3RybHIpOworCisJcGFzeW5jX2hhbmRsZSA9IGh3aV9nZXRfYXN5bmNfaGFuZGxlKHBoYmEsIGJlaXNjc2lfY29ubiwgcGFzeW5jX2N0eCwKKwkJCQkJICAgICBwZHBkdV9jcWUsICZjcV9pbmRleCk7CisJQlVHX09OKHBhc3luY19oYW5kbGUtPmlzX2hlYWRlciAhPSAwKTsKKwlpZiAocGFzeW5jX2hhbmRsZS0+Y29uc3VtZWQgPT0gMCkKKwkJaHdpX3VwZGF0ZV9hc3luY193cml0YWJsZXMocGFzeW5jX2N0eCwgcGFzeW5jX2hhbmRsZS0+aXNfaGVhZGVyLAorCQkJCQkgICBjcV9pbmRleCk7CisKKwlod2lfZnJlZV9hc3luY19tc2cocGhiYSwgcGFzeW5jX2hhbmRsZS0+Y3JpKTsKKwlod2lfcG9zdF9hc3luY19idWZmZXJzKHBoYmEsIHBhc3luY19oYW5kbGUtPmlzX2hlYWRlcik7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQKK2h3aV9md2RfYXN5bmNfbXNnKHN0cnVjdCBiZWlzY3NpX2Nvbm4gKmJlaXNjc2lfY29ubiwKKwkJICBzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEsCisJCSAgc3RydWN0IGh3aV9hc3luY19wZHVfY29udGV4dCAqcGFzeW5jX2N0eCwgdW5zaWduZWQgc2hvcnQgY3JpKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKnBsaXN0OworCXN0cnVjdCBhc3luY19wZHVfaGFuZGxlICpwYXN5bmNfaGFuZGxlOworCXZvaWQgKnBoZHIgPSBOVUxMOworCXVuc2lnbmVkIGludCBoZHJfbGVuID0gMCwgYnVmX2xlbiA9IDA7CisJdW5zaWduZWQgaW50IHN0YXR1cywgaW5kZXggPSAwLCBvZmZzZXQgPSAwOworCXZvaWQgKnBmaXJzdF9idWZmZXIgPSBOVUxMOworCXVuc2lnbmVkIGludCBudW1fYnVmID0gMDsKKworCXBsaXN0ID0gJnBhc3luY19jdHgtPmFzeW5jX2VudHJ5W2NyaV0ud2FpdF9xdWV1ZS5saXN0OworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShwYXN5bmNfaGFuZGxlLCBwbGlzdCwgbGluaykgeworCQlpZiAoaW5kZXggPT0gMCkgeworCQkJcGhkciA9IHBhc3luY19oYW5kbGUtPnBidWZmZXI7CisJCQloZHJfbGVuID0gcGFzeW5jX2hhbmRsZS0+YnVmZmVyX2xlbjsKKwkJfSBlbHNlIHsKKwkJCWJ1Zl9sZW4gPSBwYXN5bmNfaGFuZGxlLT5idWZmZXJfbGVuOworCQkJaWYgKCFudW1fYnVmKSB7CisJCQkJcGZpcnN0X2J1ZmZlciA9IHBhc3luY19oYW5kbGUtPnBidWZmZXI7CisJCQkJbnVtX2J1ZisrOworCQkJfQorCQkJbWVtY3B5KHBmaXJzdF9idWZmZXIgKyBvZmZzZXQsCisJCQkgICAgICAgcGFzeW5jX2hhbmRsZS0+cGJ1ZmZlciwgYnVmX2xlbik7CisJCQlvZmZzZXQgPSBidWZfbGVuOworCQl9CisJCWluZGV4Kys7CisJfQorCisJc3RhdHVzID0gYmVpc2NzaV9wcm9jZXNzX2FzeW5jX3BkdShiZWlzY3NpX2Nvbm4sIHBoYmEsCisJCQkJCSAgIGJlaXNjc2lfY29ubi0+YmVpc2NzaV9jb25uX2NpZCwKKwkJCQkJICAgcGhkciwgaGRyX2xlbiwgcGZpcnN0X2J1ZmZlciwKKwkJCQkJICAgYnVmX2xlbik7CisKKwlpZiAoc3RhdHVzID09IDApCisJCWh3aV9mcmVlX2FzeW5jX21zZyhwaGJhLCBjcmkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50Citod2lfZ2F0aGVyX2FzeW5jX3BkdShzdHJ1Y3QgYmVpc2NzaV9jb25uICpiZWlzY3NpX2Nvbm4sCisJCSAgICAgc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhLAorCQkgICAgIHN0cnVjdCBhc3luY19wZHVfaGFuZGxlICpwYXN5bmNfaGFuZGxlKQoreworCXN0cnVjdCBod2lfYXN5bmNfcGR1X2NvbnRleHQgKnBhc3luY19jdHg7CisJc3RydWN0IGh3aV9jb250cm9sbGVyICpwaHdpX2N0cmxyOworCXVuc2lnbmVkIGludCBieXRlc19uZWVkZWQgPSAwLCBzdGF0dXMgPSAwOworCXVuc2lnbmVkIHNob3J0IGNyaSA9IHBhc3luY19oYW5kbGUtPmNyaTsKKwlzdHJ1Y3QgcGR1X2Jhc2UgKnBwZHU7CisKKwlwaHdpX2N0cmxyID0gcGhiYS0+cGh3aV9jdHJscjsKKwlwYXN5bmNfY3R4ID0gSFdJX0dFVF9BU1lOQ19QRFVfQ1RYKHBod2lfY3RybHIpOworCisJbGlzdF9kZWwoJnBhc3luY19oYW5kbGUtPmxpbmspOworCWlmIChwYXN5bmNfaGFuZGxlLT5pc19oZWFkZXIpIHsKKwkJcGFzeW5jX2N0eC0+YXN5bmNfaGVhZGVyLmJ1c3lfZW50cmllcy0tOworCQlpZiAocGFzeW5jX2N0eC0+YXN5bmNfZW50cnlbY3JpXS53YWl0X3F1ZXVlLmhkcl9yZWNlaXZlZCkgeworCQkJaHdpX2ZyZWVfYXN5bmNfbXNnKHBoYmEsIGNyaSk7CisJCQlCVUcoKTsKKwkJfQorCisJCXBhc3luY19jdHgtPmFzeW5jX2VudHJ5W2NyaV0ud2FpdF9xdWV1ZS5ieXRlc19yZWNlaXZlZCA9IDA7CisJCXBhc3luY19jdHgtPmFzeW5jX2VudHJ5W2NyaV0ud2FpdF9xdWV1ZS5oZHJfcmVjZWl2ZWQgPSAxOworCQlwYXN5bmNfY3R4LT5hc3luY19lbnRyeVtjcmldLndhaXRfcXVldWUuaGRyX2xlbiA9CisJCQkJKHVuc2lnbmVkIHNob3J0KXBhc3luY19oYW5kbGUtPmJ1ZmZlcl9sZW47CisJCWxpc3RfYWRkX3RhaWwoJnBhc3luY19oYW5kbGUtPmxpbmssCisJCQkgICAgICAmcGFzeW5jX2N0eC0+YXN5bmNfZW50cnlbY3JpXS53YWl0X3F1ZXVlLmxpc3QpOworCisJCXBwZHUgPSBwYXN5bmNfaGFuZGxlLT5wYnVmZmVyOworCQlieXRlc19uZWVkZWQgPSAoKCgocHBkdS0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfcGR1X2Jhc2UsCisJCQlkYXRhX2xlbl9oaSkgLyAzMl0gJiBQRFVCQVNFX0RBVEFMRU5ISV9NQVNLKSA8PCA4KSAmCisJCQkweEZGRkYwMDAwKSB8ICgoYmUxNl90b19jcHUoKHBwZHUtPgorCQkJZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfcGR1X2Jhc2UsIGRhdGFfbGVuX2xvKSAvIDMyXQorCQkJJiBQRFVCQVNFX0RBVEFMRU5MT19NQVNLKSA+PiAxNikpICYgMHgwMDAwRkZGRikpOworCisJCWlmIChzdGF0dXMgPT0gMCkgeworCQkJcGFzeW5jX2N0eC0+YXN5bmNfZW50cnlbY3JpXS53YWl0X3F1ZXVlLmJ5dGVzX25lZWRlZCA9CisJCQkgICAgYnl0ZXNfbmVlZGVkOworCisJCQlpZiAoYnl0ZXNfbmVlZGVkID09IDApCisJCQkJc3RhdHVzID0gaHdpX2Z3ZF9hc3luY19tc2coYmVpc2NzaV9jb25uLCBwaGJhLAorCQkJCQkJCSAgIHBhc3luY19jdHgsIGNyaSk7CisJCX0KKwl9IGVsc2UgeworCQlwYXN5bmNfY3R4LT5hc3luY19kYXRhLmJ1c3lfZW50cmllcy0tOworCQlpZiAocGFzeW5jX2N0eC0+YXN5bmNfZW50cnlbY3JpXS53YWl0X3F1ZXVlLmhkcl9yZWNlaXZlZCkgeworCQkJbGlzdF9hZGRfdGFpbCgmcGFzeW5jX2hhbmRsZS0+bGluaywKKwkJCQkgICAgICAmcGFzeW5jX2N0eC0+YXN5bmNfZW50cnlbY3JpXS53YWl0X3F1ZXVlLgorCQkJCSAgICAgIGxpc3QpOworCQkJcGFzeW5jX2N0eC0+YXN5bmNfZW50cnlbY3JpXS53YWl0X3F1ZXVlLgorCQkJCWJ5dGVzX3JlY2VpdmVkICs9CisJCQkJKHVuc2lnbmVkIHNob3J0KXBhc3luY19oYW5kbGUtPmJ1ZmZlcl9sZW47CisKKwkJCWlmIChwYXN5bmNfY3R4LT5hc3luY19lbnRyeVtjcmldLndhaXRfcXVldWUuCisJCQkgICAgYnl0ZXNfcmVjZWl2ZWQgPj0KKwkJCSAgICBwYXN5bmNfY3R4LT5hc3luY19lbnRyeVtjcmldLndhaXRfcXVldWUuCisJCQkgICAgYnl0ZXNfbmVlZGVkKQorCQkJCXN0YXR1cyA9IGh3aV9md2RfYXN5bmNfbXNnKGJlaXNjc2lfY29ubiwgcGhiYSwKKwkJCQkJCQkgICBwYXN5bmNfY3R4LCBjcmkpOworCQl9CisJfQorCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyB2b2lkIGh3aV9wcm9jZXNzX2RlZmF1bHRfcGR1X3Jpbmcoc3RydWN0IGJlaXNjc2lfY29ubiAqYmVpc2NzaV9jb25uLAorCQkJCQkgc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhLAorCQkJCQkgc3RydWN0IGlfdF9kcGR1X2NxZSAqcGRwZHVfY3FlKQoreworCXN0cnVjdCBod2lfY29udHJvbGxlciAqcGh3aV9jdHJscjsKKwlzdHJ1Y3QgaHdpX2FzeW5jX3BkdV9jb250ZXh0ICpwYXN5bmNfY3R4OworCXN0cnVjdCBhc3luY19wZHVfaGFuZGxlICpwYXN5bmNfaGFuZGxlID0gTlVMTDsKKwl1bnNpZ25lZCBpbnQgY3FfaW5kZXggPSAtMTsKKworCXBod2lfY3RybHIgPSBwaGJhLT5waHdpX2N0cmxyOworCXBhc3luY19jdHggPSBIV0lfR0VUX0FTWU5DX1BEVV9DVFgocGh3aV9jdHJscik7CisJcGFzeW5jX2hhbmRsZSA9IGh3aV9nZXRfYXN5bmNfaGFuZGxlKHBoYmEsIGJlaXNjc2lfY29ubiwgcGFzeW5jX2N0eCwKKwkJCQkJICAgICBwZHBkdV9jcWUsICZjcV9pbmRleCk7CisKKwlpZiAocGFzeW5jX2hhbmRsZS0+Y29uc3VtZWQgPT0gMCkKKwkJaHdpX3VwZGF0ZV9hc3luY193cml0YWJsZXMocGFzeW5jX2N0eCwgcGFzeW5jX2hhbmRsZS0+aXNfaGVhZGVyLAorCQkJCQkgICBjcV9pbmRleCk7CisJaHdpX2dhdGhlcl9hc3luY19wZHUoYmVpc2NzaV9jb25uLCBwaGJhLCBwYXN5bmNfaGFuZGxlKTsKKwlod2lfcG9zdF9hc3luY19idWZmZXJzKHBoYmEsIHBhc3luY19oYW5kbGUtPmlzX2hlYWRlcik7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgYmVpc2NzaV9wcm9jZXNzX2NxKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSkKK3sKKwlzdHJ1Y3QgaHdpX2NvbnRyb2xsZXIgKnBod2lfY3RybHI7CisJc3RydWN0IGh3aV9jb250ZXh0X21lbW9yeSAqcGh3aV9jb250ZXh0OworCXN0cnVjdCBiZV9xdWV1ZV9pbmZvICpjcTsKKwlzdHJ1Y3Qgc29sX2NxZSAqc29sOworCXN0cnVjdCBkbXNnX2NxZSAqZG1zZzsKKwl1bnNpZ25lZCBpbnQgbnVtX3Byb2Nlc3NlZCA9IDA7CisJdW5zaWduZWQgaW50IHRvdF9udW1wID0gMDsKKwlzdHJ1Y3QgYmVpc2NzaV9jb25uICpiZWlzY3NpX2Nvbm47CisKKwlwaHdpX2N0cmxyID0gcGhiYS0+cGh3aV9jdHJscjsKKwlwaHdpX2NvbnRleHQgPSBwaHdpX2N0cmxyLT5waHdpX2N0eHQ7CisJY3EgPSAmcGh3aV9jb250ZXh0LT5iZV9jcTsKKwlzb2wgPSBxdWV1ZV90YWlsX25vZGUoY3EpOworCisJd2hpbGUgKHNvbC0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfc29sX2NxZSwgdmFsaWQpIC8gMzJdICYKKwkgICAgICAgQ1FFX1ZBTElEX01BU0spIHsKKwkJYmVfZHdzX2xlX3RvX2NwdShzb2wsIHNpemVvZihzdHJ1Y3Qgc29sX2NxZSkpOworCisJCWJlaXNjc2lfY29ubiA9IHBoYmEtPmNvbm5fdGFibGVbKHUzMikgKHNvbC0+CisJCQkJIGR3W29mZnNldG9mKHN0cnVjdCBhbWFwX3NvbF9jcWUsIGNpZCkgLyAzMl0gJgorCQkJCSBTT0xfQ0lEX01BU0spID4+IDZdOworCisJCWlmICghYmVpc2NzaV9jb25uIHx8ICFiZWlzY3NpX2Nvbm4tPmVwKSB7CisJCQlzaG9zdF9wcmludGsoS0VSTl9XQVJOSU5HLCBwaGJhLT5zaG9zdCwKKwkJCQkgICAgICJDb25uZWN0aW9uIHRhYmxlIGVtcHR5IGZvciBjaWQgPSAlZFxuIiwKKwkJCQkgICAgICh1MzIpKHNvbC0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfc29sX2NxZSwKKwkJCQkgICAgIGNpZCkgLyAzMl0gJiBTT0xfQ0lEX01BU0spID4+IDYpOworCQkJcmV0dXJuIDA7CisJCX0KKworCQlpZiAobnVtX3Byb2Nlc3NlZCA+PSAzMikgeworCQkJaHdpX3JpbmdfY3FfZGIocGhiYSwgcGh3aV9jb250ZXh0LT5iZV9jcS5pZCwKKwkJCQkJbnVtX3Byb2Nlc3NlZCwgMCwgMCk7CisJCQl0b3RfbnVtcCArPSBudW1fcHJvY2Vzc2VkOworCQkJbnVtX3Byb2Nlc3NlZCA9IDA7CisJCX0KKworCQlzd2l0Y2ggKCh1MzIpIHNvbC0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfc29sX2NxZSwgY29kZSkgLworCQkJMzJdICYgQ1FFX0NPREVfTUFTSykgeworCQljYXNlIFNPTF9DTURfQ09NUExFVEU6CisJCQlod2lfY29tcGxldGVfY21kKGJlaXNjc2lfY29ubiwgcGhiYSwgc29sKTsKKwkJCWJyZWFrOworCQljYXNlIERSSVZFUk1TR19OT1RJRlk6CisJCQlTRV9ERUJVRyhEQkdfTFZMXzgsICJSZWNlaXZlZCBEUklWRVJNU0dfTk9USUZZIFxuIik7CisJCQlkbXNnID0gKHN0cnVjdCBkbXNnX2NxZSAqKXNvbDsKKwkJCWh3aV9jb21wbGV0ZV9kcnZyX21zZ3MoYmVpc2NzaV9jb25uLCBwaGJhLCBzb2wpOworCQkJYnJlYWs7CisJCWNhc2UgVU5TT0xfSERSX05PVElGWToKKwkJY2FzZSBVTlNPTF9EQVRBX05PVElGWToKKwkJCVNFX0RFQlVHKERCR19MVkxfOCwgIlJlY2VpdmVkIFVOU09MX0hEUi9EQVRBX05PVElGWVxuIik7CisJCQlod2lfcHJvY2Vzc19kZWZhdWx0X3BkdV9yaW5nKGJlaXNjc2lfY29ubiwgcGhiYSwKKwkJCQkJICAgICAoc3RydWN0IGlfdF9kcGR1X2NxZSAqKXNvbCk7CisJCQlicmVhazsKKwkJY2FzZSBDWE5fSU5WQUxJREFURV9JTkRFWF9OT1RJRlk6CisJCWNhc2UgQ01EX0lOVkFMSURBVEVEX05PVElGWToKKwkJY2FzZSBDWE5fSU5WQUxJREFURV9OT1RJRlk6CisJCQlTRV9ERUJVRyhEQkdfTFZMXzEsCisJCQkJICJJZ25vcmluZyBDUSBFcnJvciBub3RpZmljYXRpb24gZm9yIGNtZC9jeG4iCisJCQkJICJpbnZhbGlkYXRlXG4iKTsKKwkJCWJyZWFrOworCQljYXNlIFNPTF9DTURfS0lMTEVEX0RBVEFfRElHRVNUX0VSUjoKKwkJY2FzZSBDTURfS0lMTEVEX0lOVkFMSURfU1RBVFNOX1JDVkQ6CisJCWNhc2UgQ01EX0tJTExFRF9JTlZBTElEX1IyVF9SQ1ZEOgorCQljYXNlIENNRF9DWE5fS0lMTEVEX0xVTl9JTlZBTElEOgorCQljYXNlIENNRF9DWE5fS0lMTEVEX0lDRF9JTlZBTElEOgorCQljYXNlIENNRF9DWE5fS0lMTEVEX0lUVF9JTlZBTElEOgorCQljYXNlIENNRF9DWE5fS0lMTEVEX1NFUV9PVVRPRk9SREVSOgorCQljYXNlIENNRF9DWE5fS0lMTEVEX0lOVkFMSURfREFUQVNOX1JDVkQ6CisJCQlTRV9ERUJVRyhEQkdfTFZMXzEsCisJCQkJICJDUSBFcnJvciBub3RpZmljYXRpb24gZm9yIGNtZC4uICIKKwkJCQkgImNvZGUgJWQgY2lkIDB4JXhcbiIsCisJCQkJIHNvbC0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfc29sX2NxZSwgY29kZSkgLworCQkJCSAzMl0gJiBDUUVfQ09ERV9NQVNLLAorCQkJCSAoc29sLT5kd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9zb2xfY3FlLCBjaWQpIC8KKwkJCQkgMzJdICYgU09MX0NJRF9NQVNLKSk7CisJCQlicmVhazsKKwkJY2FzZSBVTlNPTF9EQVRBX0RJR0VTVF9FUlJPUl9OT1RJRlk6CisJCQlTRV9ERUJVRyhEQkdfTFZMXzEsCisJCQkJICJEaWdlc3QgZXJyb3Igb24gZGVmIHBkdSByaW5nLCBkcm9wcGluZy4uXG4iKTsKKwkJCWh3aV9mbHVzaF9kZWZhdWx0X3BkdV9idWZmZXIocGhiYSwgYmVpc2NzaV9jb25uLAorCQkJCQkgICAgIChzdHJ1Y3QgaV90X2RwZHVfY3FlICopIHNvbCk7CisJCQlicmVhazsKKwkJY2FzZSBDWE5fS0lMTEVEX1BEVV9TSVpFX0VYQ0VFRFNfRFNMOgorCQljYXNlIENYTl9LSUxMRURfQlVSU1RfTEVOX01JU01BVENIOgorCQljYXNlIENYTl9LSUxMRURfQUhTX1JDVkQ6CisJCWNhc2UgQ1hOX0tJTExFRF9IRFJfRElHRVNUX0VSUjoKKwkJY2FzZSBDWE5fS0lMTEVEX1VOS05PV05fSERSOgorCQljYXNlIENYTl9LSUxMRURfU1RBTEVfSVRUX1RUVF9SQ1ZEOgorCQljYXNlIENYTl9LSUxMRURfSU5WQUxJRF9JVFRfVFRUX1JDVkQ6CisJCWNhc2UgQ1hOX0tJTExFRF9USU1FRF9PVVQ6CisJCWNhc2UgQ1hOX0tJTExFRF9GSU5fUkNWRDoKKwkJY2FzZSBDWE5fS0lMTEVEX0JBRF9VTlNPTF9QRFVfUkNWRDoKKwkJY2FzZSBDWE5fS0lMTEVEX0JBRF9XUkJfSU5ERVhfRVJST1I6CisJCWNhc2UgQ1hOX0tJTExFRF9PVkVSX1JVTl9SRVNJRFVBTDoKKwkJY2FzZSBDWE5fS0lMTEVEX1VOREVSX1JVTl9SRVNJRFVBTDoKKwkJY2FzZSBDWE5fS0lMTEVEX0NNTkRfREFUQV9OT1RfT05fU0FNRV9DT05OOgorCQkJU0VfREVCVUcoREJHX0xWTF8xLCAiQ1EgRXJyb3IgJWQsIHJlc2V0dGluZyBDSUQgIgorCQkJCSAiMHgleC4uLlxuIiwKKwkJCQkgc29sLT5kd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9zb2xfY3FlLCBjb2RlKSAvCisJCQkJIDMyXSAmIENRRV9DT0RFX01BU0ssCisJCQkJIHNvbC0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfc29sX2NxZSwgY2lkKSAvCisJCQkJIDMyXSAmIENRRV9DSURfTUFTSyk7CisJCQlpc2NzaV9jb25uX2ZhaWx1cmUoYmVpc2NzaV9jb25uLT5jb25uLAorCQkJCQkgICBJU0NTSV9FUlJfQ09OTl9GQUlMRUQpOworCQkJYnJlYWs7CisJCWNhc2UgQ1hOX0tJTExFRF9SU1RfU0VOVDoKKwkJY2FzZSBDWE5fS0lMTEVEX1JTVF9SQ1ZEOgorCQkJU0VfREVCVUcoREJHX0xWTF8xLCAiQ1EgRXJyb3IgJWQsIHJlc2V0IHJlY2VpdmVkL3NlbnQgIgorCQkJCSAib24gQ0lEIDB4JXguLi5cbiIsCisJCQkJIHNvbC0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfc29sX2NxZSwgY29kZSkgLworCQkJCSAzMl0gJiBDUUVfQ09ERV9NQVNLLAorCQkJCSBzb2wtPmR3W29mZnNldG9mKHN0cnVjdCBhbWFwX3NvbF9jcWUsIGNpZCkgLworCQkJCSAzMl0gJiBDUUVfQ0lEX01BU0spOworCQkJaXNjc2lfY29ubl9mYWlsdXJlKGJlaXNjc2lfY29ubi0+Y29ubiwKKwkJCQkJICAgSVNDU0lfRVJSX0NPTk5fRkFJTEVEKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJU0VfREVCVUcoREJHX0xWTF8xLCAiQ1EgRXJyb3IgSW52YWxpZCBjb2RlPSAlZCAiCisJCQkJICJyZWNlaXZlZCBvbiBDSUQgMHgleC4uLlxuIiwKKwkJCQkgc29sLT5kd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9zb2xfY3FlLCBjb2RlKSAvCisJCQkJIDMyXSAmIENRRV9DT0RFX01BU0ssCisJCQkJIHNvbC0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfc29sX2NxZSwgY2lkKSAvCisJCQkJIDMyXSAmIENRRV9DSURfTUFTSyk7CisJCQlicmVhazsKKwkJfQorCisJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfc29sX2NxZSwgdmFsaWQsIHNvbCwgMCk7CisJCXF1ZXVlX3RhaWxfaW5jKGNxKTsKKwkJc29sID0gcXVldWVfdGFpbF9ub2RlKGNxKTsKKwkJbnVtX3Byb2Nlc3NlZCsrOworCX0KKworCWlmIChudW1fcHJvY2Vzc2VkID4gMCkgeworCQl0b3RfbnVtcCArPSBudW1fcHJvY2Vzc2VkOworCQlod2lfcmluZ19jcV9kYihwaGJhLCBwaHdpX2NvbnRleHQtPmJlX2NxLmlkLCBudW1fcHJvY2Vzc2VkLAorCQkJICAgICAgIDEsIDApOworCX0KKwlyZXR1cm4gdG90X251bXA7Cit9CisKK3N0YXRpYyB2b2lkIGJlaXNjc2lfcHJvY2Vzc19hbGxfY3FzKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSA9CisJICAgIGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYmVpc2NzaV9oYmEsIHdvcmtfY3FzKTsKKworCWlmIChwaGJhLT50b2RvX21jY19jcSkgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmcGhiYS0+aXNyX2xvY2ssIGZsYWdzKTsKKwkJcGhiYS0+dG9kb19tY2NfY3EgPSAwOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaGJhLT5pc3JfbG9jaywgZmxhZ3MpOworCQlTRV9ERUJVRyhEQkdfTFZMXzEsICJNQ0MgSW50ZXJydXB0IE5vdCBleHBlY3RlZCBcbiIpOworCX0KKworCWlmIChwaGJhLT50b2RvX2NxKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZwaGJhLT5pc3JfbG9jaywgZmxhZ3MpOworCQlwaGJhLT50b2RvX2NxID0gMDsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGhiYS0+aXNyX2xvY2ssIGZsYWdzKTsKKwkJYmVpc2NzaV9wcm9jZXNzX2NxKHBoYmEpOworCX0KK30KKworc3RhdGljIGludCBiZV9pb3BvbGwoc3RydWN0IGJsa19pb3BvbGwgKmlvcCwgaW50IGJ1ZGdldCkKK3sKKwlzdGF0aWMgdW5zaWduZWQgaW50IHJldDsKKwlzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmE7CisKKwlwaGJhID0gY29udGFpbmVyX29mKGlvcCwgc3RydWN0IGJlaXNjc2lfaGJhLCBpb3BvbGwpOworCisJcmV0ID0gYmVpc2NzaV9wcm9jZXNzX2NxKHBoYmEpOworCWlmIChyZXQgPCBidWRnZXQpIHsKKwkJc3RydWN0IGh3aV9jb250cm9sbGVyICpwaHdpX2N0cmxyOworCQlzdHJ1Y3QgaHdpX2NvbnRleHRfbWVtb3J5ICpwaHdpX2NvbnRleHQ7CisKKwkJcGh3aV9jdHJsciA9IHBoYmEtPnBod2lfY3RybHI7CisJCXBod2lfY29udGV4dCA9IHBod2lfY3RybHItPnBod2lfY3R4dDsKKwkJYmxrX2lvcG9sbF9jb21wbGV0ZShpb3ApOworCQlod2lfcmluZ19lcV9kYihwaGJhLCBwaHdpX2NvbnRleHQtPmJlX2VxLnEuaWQsIDAsCisJCQkJCQkJMCwgMSwgMSk7CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkCitod2lfd3JpdGVfc2dsKHN0cnVjdCBpc2NzaV93cmIgKnB3cmIsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csCisJICAgICAgdW5zaWduZWQgaW50IG51bV9zZywgc3RydWN0IGJlaXNjc2lfaW9fdGFzayAqaW9fdGFzaykKK3sKKwlzdHJ1Y3QgaXNjc2lfc2dlICpwc2dsOworCXVuc2lnbmVkIHNob3J0IHNnX2xlbiwgaW5kZXg7CisJdW5zaWduZWQgaW50IHNnZV9sZW4gPSAwOworCXVuc2lnbmVkIGxvbmcgbG9uZyBhZGRyOworCXN0cnVjdCBzY2F0dGVybGlzdCAqbF9zZzsKKwl1bnNpZ25lZCBpbnQgb2Zmc2V0OworCisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIGlzY3NpX2Joc19hZGRyX2xvLCBwd3JiLAorCQkJCSAgICAgIGlvX3Rhc2stPmJoc19wYS51LmEzMi5hZGRyZXNzX2xvKTsKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgaXNjc2lfYmhzX2FkZHJfaGksIHB3cmIsCisJCQkJICAgICAgaW9fdGFzay0+YmhzX3BhLnUuYTMyLmFkZHJlc3NfaGkpOworCisJbF9zZyA9IHNnOworCWZvciAoaW5kZXggPSAwOyAoaW5kZXggPCBudW1fc2cpICYmIChpbmRleCA8IDIpOyBpbmRleCsrLCBzZ19uZXh0KHNnKSkgeworCQlpZiAoaW5kZXggPT0gMCkgeworCQkJc2dfbGVuID0gc2dfZG1hX2xlbihzZyk7CisJCQlhZGRyID0gKHU2NCkgc2dfZG1hX2FkZHJlc3Moc2cpOworCQkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIHNnZTBfYWRkcl9sbywgcHdyYiwKKwkJCQkJCQkoYWRkciAmIDB4RkZGRkZGRkYpKTsKKwkJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCBzZ2UwX2FkZHJfaGksIHB3cmIsCisJCQkJCQkJKGFkZHIgPj4gMzIpKTsKKwkJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCBzZ2UwX2xlbiwgcHdyYiwKKwkJCQkJCQlzZ19sZW4pOworCQkJc2dlX2xlbiA9IHNnX2xlbjsKKwkJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCBzZ2UwX2xhc3QsIHB3cmIsCisJCQkJCQkJMSk7CisJCX0gZWxzZSB7CisJCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgc2dlMF9sYXN0LCBwd3JiLAorCQkJCQkJCTApOworCQkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIHNnZTFfcjJ0X29mZnNldCwKKwkJCQkJCQlwd3JiLCBzZ2VfbGVuKTsKKwkJCXNnX2xlbiA9IHNnX2RtYV9sZW4oc2cpOworCQkJYWRkciA9ICh1NjQpIHNnX2RtYV9hZGRyZXNzKHNnKTsKKwkJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCBzZ2UxX2FkZHJfbG8sIHB3cmIsCisJCQkJCQkJKGFkZHIgJiAweEZGRkZGRkZGKSk7CisJCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgc2dlMV9hZGRyX2hpLCBwd3JiLAorCQkJCQkJCShhZGRyID4+IDMyKSk7CisJCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgc2dlMV9sZW4sIHB3cmIsCisJCQkJCQkJc2dfbGVuKTsKKwkJfQorCX0KKwlwc2dsID0gKHN0cnVjdCBpc2NzaV9zZ2UgKilpb190YXNrLT5wc2dsX2hhbmRsZS0+cGZyYWc7CisJbWVtc2V0KHBzZ2wsIDAsIHNpemVvZigqcHNnbCkgKiBCRTJfU0dFKTsKKworCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfc2dlLCBsZW4sIHBzZ2wsIGlvX3Rhc2stPmJoc19sZW4gLSAyKTsKKworCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfc2dlLCBhZGRyX2hpLCBwc2dsLAorCQkJaW9fdGFzay0+YmhzX3BhLnUuYTMyLmFkZHJlc3NfaGkpOworCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfc2dlLCBhZGRyX2xvLCBwc2dsLAorCQkJaW9fdGFzay0+YmhzX3BhLnUuYTMyLmFkZHJlc3NfbG8pOworCisJaWYgKG51bV9zZyA9PSAyKQorCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgc2dlMV9sYXN0LCBwd3JiLCAxKTsKKwlzZyA9IGxfc2c7CisJcHNnbCsrOworCXBzZ2wrKzsKKwlvZmZzZXQgPSAwOworCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IG51bV9zZzsgaW5kZXgrKywgc2dfbmV4dChzZyksIHBzZ2wrKykgeworCQlzZ19sZW4gPSBzZ19kbWFfbGVuKHNnKTsKKwkJYWRkciA9ICh1NjQpIHNnX2RtYV9hZGRyZXNzKHNnKTsKKwkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV9zZ2UsIGFkZHJfbG8sIHBzZ2wsCisJCQkJCQkoYWRkciAmIDB4RkZGRkZGRkYpKTsKKwkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV9zZ2UsIGFkZHJfaGksIHBzZ2wsCisJCQkJCQkoYWRkciA+PiAzMikpOworCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3NnZSwgbGVuLCBwc2dsLCBzZ19sZW4pOworCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3NnZSwgc2dlX29mZnNldCwgcHNnbCwgb2Zmc2V0KTsKKwkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV9zZ2UsIGxhc3Rfc2dlLCBwc2dsLCAwKTsKKwkJb2Zmc2V0ICs9IHNnX2xlbjsKKwl9CisJcHNnbC0tOworCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfc2dlLCBsYXN0X3NnZSwgcHNnbCwgMSk7Cit9CisKK3N0YXRpYyB2b2lkIGh3aV93cml0ZV9idWZmZXIoc3RydWN0IGlzY3NpX3dyYiAqcHdyYiwgc3RydWN0IGlzY3NpX3Rhc2sgKnRhc2spCit7CisJc3RydWN0IGlzY3NpX3NnZSAqcHNnbDsKKwl1bnNpZ25lZCBsb25nIGxvbmcgYWRkcjsKKwlzdHJ1Y3QgYmVpc2NzaV9pb190YXNrICppb190YXNrID0gdGFzay0+ZGRfZGF0YTsKKwlzdHJ1Y3QgYmVpc2NzaV9jb25uICpiZWlzY3NpX2Nvbm4gPSBpb190YXNrLT5jb25uOworCXN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSA9IGJlaXNjc2lfY29ubi0+cGhiYTsKKworCWlvX3Rhc2stPmJoc19sZW4gPSBzaXplb2Yoc3RydWN0IGJlX25vbmlvX2JocykgLSAyOworCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCBpc2NzaV9iaHNfYWRkcl9sbywgcHdyYiwKKwkJCQlpb190YXNrLT5iaHNfcGEudS5hMzIuYWRkcmVzc19sbyk7CisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIGlzY3NpX2Joc19hZGRyX2hpLCBwd3JiLAorCQkJCWlvX3Rhc2stPmJoc19wYS51LmEzMi5hZGRyZXNzX2hpKTsKKworCWlmICh0YXNrLT5kYXRhKSB7CisJCWlmICh0YXNrLT5kYXRhX2NvdW50KSB7CisJCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgZHNwLCBwd3JiLCAxKTsKKwkJCWFkZHIgPSAodTY0KSBwY2lfbWFwX3NpbmdsZShwaGJhLT5wY2lkZXYsCisJCQkJCQkgICAgdGFzay0+ZGF0YSwKKwkJCQkJCSAgICB0YXNrLT5kYXRhX2NvdW50LCAxKTsKKwkJfSBlbHNlIHsKKwkJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCBkc3AsIHB3cmIsIDApOworCQkJYWRkciA9IDA7CisJCX0KKwkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIHNnZTBfYWRkcl9sbywgcHdyYiwKKwkJCQkJCShhZGRyICYgMHhGRkZGRkZGRikpOworCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgc2dlMF9hZGRyX2hpLCBwd3JiLAorCQkJCQkJKGFkZHIgPj4gMzIpKTsKKwkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIHNnZTBfbGVuLCBwd3JiLAorCQkJCQkJdGFzay0+ZGF0YV9jb3VudCk7CisKKwkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIHNnZTBfbGFzdCwgcHdyYiwgMSk7CisJfSBlbHNlIHsKKwkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIGRzcCwgcHdyYiwgMCk7CisJCWFkZHIgPSAwOworCX0KKworCXBzZ2wgPSAoc3RydWN0IGlzY3NpX3NnZSAqKWlvX3Rhc2stPnBzZ2xfaGFuZGxlLT5wZnJhZzsKKworCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfc2dlLCBsZW4sIHBzZ2wsIGlvX3Rhc2stPmJoc19sZW4pOworCisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV9zZ2UsIGFkZHJfaGksIHBzZ2wsCisJCSAgICAgIGlvX3Rhc2stPmJoc19wYS51LmEzMi5hZGRyZXNzX2hpKTsKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3NnZSwgYWRkcl9sbywgcHNnbCwKKwkJICAgICAgaW9fdGFzay0+YmhzX3BhLnUuYTMyLmFkZHJlc3NfbG8pOworCWlmICh0YXNrLT5kYXRhKSB7CisJCXBzZ2wrKzsKKwkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV9zZ2UsIGFkZHJfaGksIHBzZ2wsIDApOworCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3NnZSwgYWRkcl9sbywgcHNnbCwgMCk7CisJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfc2dlLCBsZW4sIHBzZ2wsIDApOworCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3NnZSwgc2dlX29mZnNldCwgcHNnbCwgMCk7CisJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfc2dlLCByc3ZkMCwgcHNnbCwgMCk7CisJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfc2dlLCBsYXN0X3NnZSwgcHNnbCwgMCk7CisKKwkJcHNnbCsrOworCQlpZiAodGFzay0+ZGF0YSkgeworCQkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV9zZ2UsIGFkZHJfbG8sIHBzZ2wsCisJCQkJCQkoYWRkciAmIDB4RkZGRkZGRkYpKTsKKwkJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfc2dlLCBhZGRyX2hpLCBwc2dsLAorCQkJCQkJKGFkZHIgPj4gMzIpKTsKKwkJfQorCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3NnZSwgbGVuLCBwc2dsLCAweDEwNik7CisJfQorCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfc2dlLCBsYXN0X3NnZSwgcHNnbCwgMSk7Cit9CisKK3N0YXRpYyB2b2lkIGJlaXNjc2lfZmluZF9tZW1fcmVxKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSkKK3sKKwl1bnNpZ25lZCBpbnQgbnVtX2NxX3BhZ2VzLCBudW1fZXFfcGFnZXMsIG51bV9hc3luY19wZHVfYnVmX3BhZ2VzOworCXVuc2lnbmVkIGludCBudW1fYXN5bmNfcGR1X2RhdGFfcGFnZXMsIHdyYl9zel9wZXJfY3huOworCXVuc2lnbmVkIGludCBudW1fYXN5bmNfcGR1X2J1Zl9zZ2xfcGFnZXMsIG51bV9hc3luY19wZHVfZGF0YV9zZ2xfcGFnZXM7CisKKwludW1fY3FfcGFnZXMgPSBQQUdFU19SRVFVSVJFRChwaGJhLT5wYXJhbXMubnVtX2NxX2VudHJpZXMgKiBcCisJCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBzb2xfY3FlKSk7CisJbnVtX2VxX3BhZ2VzID0gUEFHRVNfUkVRVUlSRUQocGhiYS0+cGFyYW1zLm51bV9lcV9lbnRyaWVzICogXAorCQkJCSAgICAgIHNpemVvZihzdHJ1Y3QgYmVfZXFfZW50cnkpKTsKKwludW1fYXN5bmNfcGR1X2J1Zl9wYWdlcyA9CisJCQlQQUdFU19SRVFVSVJFRChwaGJhLT5wYXJhbXMuYXN5bmNwZHVzX3Blcl9jdHJsICogXAorCQkJCSAgICAgICBwaGJhLT5wYXJhbXMuZGVmcGR1X2hkcl9zeik7CisJbnVtX2FzeW5jX3BkdV9idWZfc2dsX3BhZ2VzID0KKwkJCVBBR0VTX1JFUVVJUkVEKHBoYmEtPnBhcmFtcy5hc3luY3BkdXNfcGVyX2N0cmwgKiBcCisJCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgcGh5c19hZGRyKSk7CisJbnVtX2FzeW5jX3BkdV9kYXRhX3BhZ2VzID0KKwkJCVBBR0VTX1JFUVVJUkVEKHBoYmEtPnBhcmFtcy5hc3luY3BkdXNfcGVyX2N0cmwgKiBcCisJCQkJICAgICAgIHBoYmEtPnBhcmFtcy5kZWZwZHVfZGF0YV9zeik7CisJbnVtX2FzeW5jX3BkdV9kYXRhX3NnbF9wYWdlcyA9CisJCQlQQUdFU19SRVFVSVJFRChwaGJhLT5wYXJhbXMuYXN5bmNwZHVzX3Blcl9jdHJsICogXAorCQkJCSAgICAgICBzaXplb2Yoc3RydWN0IHBoeXNfYWRkcikpOworCisJcGhiYS0+cGFyYW1zLmh3aV93c19zeiA9IHNpemVvZihzdHJ1Y3QgaHdpX2NvbnRyb2xsZXIpOworCisJcGhiYS0+bWVtX3JlcVtJU0NTSV9NRU1fR0xPQkFMX0hFQURFUl0gPSAyICoKKwkJCQkJCSBCRV9JU0NTSV9QRFVfSEVBREVSX1NJWkU7CisJcGhiYS0+bWVtX3JlcVtIV0lfTUVNX0FERE5fQ09OVEVYVF0gPQorCQkJCQkgICAgc2l6ZW9mKHN0cnVjdCBod2lfY29udGV4dF9tZW1vcnkpOworCisJcGhiYS0+bWVtX3JlcVtIV0lfTUVNX0NRXSA9IG51bV9jcV9wYWdlcyAqIFBBR0VfU0laRTsKKwlwaGJhLT5tZW1fcmVxW0hXSV9NRU1fRVFdID0gbnVtX2VxX3BhZ2VzICogUEFHRV9TSVpFOworCisJcGhiYS0+bWVtX3JlcVtIV0lfTUVNX1dSQl0gPSBzaXplb2Yoc3RydWN0IGlzY3NpX3dyYikKKwkgICAgKiAocGhiYS0+cGFyYW1zLndyYnNfcGVyX2N4bikKKwkgICAgKiBwaGJhLT5wYXJhbXMuY3huc19wZXJfY3RybDsKKwl3cmJfc3pfcGVyX2N4biA9ICBzaXplb2Yoc3RydWN0IHdyYl9oYW5kbGUpICoKKwkJCQkgKHBoYmEtPnBhcmFtcy53cmJzX3Blcl9jeG4pOworCXBoYmEtPm1lbV9yZXFbSFdJX01FTV9XUkJIXSA9IHJvdW5kdXBfcG93X29mX3R3bygod3JiX3N6X3Blcl9jeG4pICoKKwkJCQlwaGJhLT5wYXJhbXMuY3huc19wZXJfY3RybCk7CisKKwlwaGJhLT5tZW1fcmVxW0hXSV9NRU1fU0dMSF0gPSBzaXplb2Yoc3RydWN0IHNnbF9oYW5kbGUpICoKKwkJcGhiYS0+cGFyYW1zLmljZHNfcGVyX2N0cmw7CisJcGhiYS0+bWVtX3JlcVtIV0lfTUVNX1NHRV0gPSBzaXplb2Yoc3RydWN0IGlzY3NpX3NnZSkgKgorCQlwaGJhLT5wYXJhbXMubnVtX3NnZV9wZXJfaW8gKiBwaGJhLT5wYXJhbXMuaWNkc19wZXJfY3RybDsKKworCXBoYmEtPm1lbV9yZXFbSFdJX01FTV9BU1lOQ19IRUFERVJfQlVGXSA9CisJCW51bV9hc3luY19wZHVfYnVmX3BhZ2VzICogUEFHRV9TSVpFOworCXBoYmEtPm1lbV9yZXFbSFdJX01FTV9BU1lOQ19EQVRBX0JVRl0gPQorCQludW1fYXN5bmNfcGR1X2RhdGFfcGFnZXMgKiBQQUdFX1NJWkU7CisJcGhiYS0+bWVtX3JlcVtIV0lfTUVNX0FTWU5DX0hFQURFUl9SSU5HXSA9CisJCW51bV9hc3luY19wZHVfYnVmX3NnbF9wYWdlcyAqIFBBR0VfU0laRTsKKwlwaGJhLT5tZW1fcmVxW0hXSV9NRU1fQVNZTkNfREFUQV9SSU5HXSA9CisJCW51bV9hc3luY19wZHVfZGF0YV9zZ2xfcGFnZXMgKiBQQUdFX1NJWkU7CisJcGhiYS0+bWVtX3JlcVtIV0lfTUVNX0FTWU5DX0hFQURFUl9IQU5ETEVdID0KKwkJcGhiYS0+cGFyYW1zLmFzeW5jcGR1c19wZXJfY3RybCAqCisJCXNpemVvZihzdHJ1Y3QgYXN5bmNfcGR1X2hhbmRsZSk7CisJcGhiYS0+bWVtX3JlcVtIV0lfTUVNX0FTWU5DX0RBVEFfSEFORExFXSA9CisJCXBoYmEtPnBhcmFtcy5hc3luY3BkdXNfcGVyX2N0cmwgKgorCQlzaXplb2Yoc3RydWN0IGFzeW5jX3BkdV9oYW5kbGUpOworCXBoYmEtPm1lbV9yZXFbSFdJX01FTV9BU1lOQ19QRFVfQ09OVEVYVF0gPQorCQlzaXplb2Yoc3RydWN0IGh3aV9hc3luY19wZHVfY29udGV4dCkgKworCQkocGhiYS0+cGFyYW1zLmN4bnNfcGVyX2N0cmwgKiBzaXplb2Yoc3RydWN0IGh3aV9hc3luY19lbnRyeSkpOworfQorCitzdGF0aWMgaW50IGJlaXNjc2lfYWxsb2NfbWVtKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSkKK3sKKwlzdHJ1Y3QgYmVfbWVtX2Rlc2NyaXB0b3IgKm1lbV9kZXNjcjsKKwlkbWFfYWRkcl90IGJ1c19hZGQ7CisJc3RydWN0IG1lbV9hcnJheSAqbWVtX2FyciwgKm1lbV9hcnJfb3JpZzsKKwl1bnNpZ25lZCBpbnQgaSwgaiwgYWxsb2Nfc2l6ZSwgY3Vycl9hbGxvY19zaXplOworCisJcGhiYS0+cGh3aV9jdHJsciA9IGttYWxsb2MocGhiYS0+cGFyYW1zLmh3aV93c19zeiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwaGJhLT5waHdpX2N0cmxyKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXBoYmEtPmluaXRfbWVtID0ga2NhbGxvYyhTRV9NRU1fTUFYLCBzaXplb2YoKm1lbV9kZXNjciksCisJCQkJIEdGUF9LRVJORUwpOworCWlmICghcGhiYS0+aW5pdF9tZW0pIHsKKwkJa2ZyZWUocGhiYS0+cGh3aV9jdHJscik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCW1lbV9hcnJfb3JpZyA9IGttYWxsb2Moc2l6ZW9mKCptZW1fYXJyX29yaWcpICogQkVJU0NTSV9NQVhfRlJBR1NfSU5JVCwKKwkJCSAgICAgICBHRlBfS0VSTkVMKTsKKwlpZiAoIW1lbV9hcnJfb3JpZykgeworCQlrZnJlZShwaGJhLT5pbml0X21lbSk7CisJCWtmcmVlKHBoYmEtPnBod2lfY3RybHIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwltZW1fZGVzY3IgPSBwaGJhLT5pbml0X21lbTsKKwlmb3IgKGkgPSAwOyBpIDwgU0VfTUVNX01BWDsgaSsrKSB7CisJCWogPSAwOworCQltZW1fYXJyID0gbWVtX2Fycl9vcmlnOworCQlhbGxvY19zaXplID0gcGhiYS0+bWVtX3JlcVtpXTsKKwkJbWVtc2V0KG1lbV9hcnIsIDAsIHNpemVvZihzdHJ1Y3QgbWVtX2FycmF5KSAqCisJCSAgICAgICBCRUlTQ1NJX01BWF9GUkFHU19JTklUKTsKKwkJY3Vycl9hbGxvY19zaXplID0gbWluKGJlX21heF9waHlzX3NpemUgKiAxMDI0LCBhbGxvY19zaXplKTsKKwkJZG8geworCQkJbWVtX2Fyci0+dmlydHVhbF9hZGRyZXNzID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoCisJCQkJCQkJcGhiYS0+cGNpZGV2LAorCQkJCQkJCWN1cnJfYWxsb2Nfc2l6ZSwKKwkJCQkJCQkmYnVzX2FkZCk7CisJCQlpZiAoIW1lbV9hcnItPnZpcnR1YWxfYWRkcmVzcykgeworCQkJCWlmIChjdXJyX2FsbG9jX3NpemUgPD0gQkVfTUlOX01FTV9TSVpFKQorCQkJCQlnb3RvIGZyZWVfbWVtOworCQkJCWlmIChjdXJyX2FsbG9jX3NpemUgLQorCQkJCQlyb3VuZGRvd25fcG93X29mX3R3byhjdXJyX2FsbG9jX3NpemUpKQorCQkJCQljdXJyX2FsbG9jX3NpemUgPSByb3VuZGRvd25fcG93X29mX3R3bworCQkJCQkJCSAgICAgKGN1cnJfYWxsb2Nfc2l6ZSk7CisJCQkJZWxzZQorCQkJCQljdXJyX2FsbG9jX3NpemUgPSBjdXJyX2FsbG9jX3NpemUgLyAyOworCQkJfSBlbHNlIHsKKwkJCQltZW1fYXJyLT5idXNfYWRkcmVzcy51LgorCQkJCSAgICBhNjQuYWRkcmVzcyA9IChfX3U2NCkgYnVzX2FkZDsKKwkJCQltZW1fYXJyLT5zaXplID0gY3Vycl9hbGxvY19zaXplOworCQkJCWFsbG9jX3NpemUgLT0gY3Vycl9hbGxvY19zaXplOworCQkJCWN1cnJfYWxsb2Nfc2l6ZSA9IG1pbihiZV9tYXhfcGh5c19zaXplICoKKwkJCQkJCSAgICAgIDEwMjQsIGFsbG9jX3NpemUpOworCQkJCWorKzsKKwkJCQltZW1fYXJyKys7CisJCQl9CisJCX0gd2hpbGUgKGFsbG9jX3NpemUpOworCQltZW1fZGVzY3ItPm51bV9lbGVtZW50cyA9IGo7CisJCW1lbV9kZXNjci0+c2l6ZV9pbl9ieXRlcyA9IHBoYmEtPm1lbV9yZXFbaV07CisJCW1lbV9kZXNjci0+bWVtX2FycmF5ID0ga21hbGxvYyhzaXplb2YoKm1lbV9hcnIpICogaiwKKwkJCQkJICAgICAgIEdGUF9LRVJORUwpOworCQlpZiAoIW1lbV9kZXNjci0+bWVtX2FycmF5KQorCQkJZ290byBmcmVlX21lbTsKKworCQltZW1jcHkobWVtX2Rlc2NyLT5tZW1fYXJyYXksIG1lbV9hcnJfb3JpZywKKwkJICAgICAgIHNpemVvZihzdHJ1Y3QgbWVtX2FycmF5KSAqIGopOworCQltZW1fZGVzY3IrKzsKKwl9CisJa2ZyZWUobWVtX2Fycl9vcmlnKTsKKwlyZXR1cm4gMDsKK2ZyZWVfbWVtOgorCW1lbV9kZXNjci0+bnVtX2VsZW1lbnRzID0gajsKKwl3aGlsZSAoKGkpIHx8IChqKSkgeworCQlmb3IgKGogPSBtZW1fZGVzY3ItPm51bV9lbGVtZW50czsgaiA+IDA7IGotLSkgeworCQkJcGNpX2ZyZWVfY29uc2lzdGVudChwaGJhLT5wY2lkZXYsCisJCQkJCSAgICBtZW1fZGVzY3ItPm1lbV9hcnJheVtqIC0gMV0uc2l6ZSwKKwkJCQkJICAgIG1lbV9kZXNjci0+bWVtX2FycmF5W2ogLSAxXS4KKwkJCQkJICAgIHZpcnR1YWxfYWRkcmVzcywKKwkJCQkJICAgIG1lbV9kZXNjci0+bWVtX2FycmF5W2ogLSAxXS4KKwkJCQkJICAgIGJ1c19hZGRyZXNzLnUuYTY0LmFkZHJlc3MpOworCQl9CisJCWlmIChpKSB7CisJCQlpLS07CisJCQlrZnJlZShtZW1fZGVzY3ItPm1lbV9hcnJheSk7CisJCQltZW1fZGVzY3ItLTsKKwkJfQorCX0KKwlrZnJlZShtZW1fYXJyX29yaWcpOworCWtmcmVlKHBoYmEtPmluaXRfbWVtKTsKKwlrZnJlZShwaGJhLT5waHdpX2N0cmxyKTsKKwlyZXR1cm4gLUVOT01FTTsKK30KKworc3RhdGljIGludCBiZWlzY3NpX2dldF9tZW1vcnkoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhKQoreworCWJlaXNjc2lfZmluZF9tZW1fcmVxKHBoYmEpOworCXJldHVybiBiZWlzY3NpX2FsbG9jX21lbShwaGJhKTsKK30KKworc3RhdGljIHZvaWQgaXNjc2lfaW5pdF9nbG9iYWxfdGVtcGxhdGVzKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSkKK3sKKwlzdHJ1Y3QgcGR1X2RhdGFfb3V0ICpwZGF0YV9vdXQ7CisJc3RydWN0IHBkdV9ub3Bfb3V0ICpwbm9wX291dDsKKwlzdHJ1Y3QgYmVfbWVtX2Rlc2NyaXB0b3IgKm1lbV9kZXNjcjsKKworCW1lbV9kZXNjciA9IHBoYmEtPmluaXRfbWVtOworCW1lbV9kZXNjciArPSBJU0NTSV9NRU1fR0xPQkFMX0hFQURFUjsKKwlwZGF0YV9vdXQgPQorCSAgICAoc3RydWN0IHBkdV9kYXRhX291dCAqKW1lbV9kZXNjci0+bWVtX2FycmF5WzBdLnZpcnR1YWxfYWRkcmVzczsKKwltZW1zZXQocGRhdGFfb3V0LCAwLCBCRV9JU0NTSV9QRFVfSEVBREVSX1NJWkUpOworCisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9wZHVfZGF0YV9vdXQsIG9wY29kZSwgcGRhdGFfb3V0LAorCQkgICAgICBJSU9DX1NDU0lfREFUQSk7CisKKwlwbm9wX291dCA9CisJICAgIChzdHJ1Y3QgcGR1X25vcF9vdXQgKikoKHVuc2lnbmVkIGNoYXIgKiltZW1fZGVzY3ItPm1lbV9hcnJheVswXS4KKwkJCQkgICB2aXJ0dWFsX2FkZHJlc3MgKyBCRV9JU0NTSV9QRFVfSEVBREVSX1NJWkUpOworCisJbWVtc2V0KHBub3Bfb3V0LCAwLCBCRV9JU0NTSV9QRFVfSEVBREVSX1NJWkUpOworCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfcGR1X25vcF9vdXQsIHR0dCwgcG5vcF9vdXQsIDB4RkZGRkZGRkYpOworCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfcGR1X25vcF9vdXQsIGZfYml0LCBwbm9wX291dCwgMSk7CisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9wZHVfbm9wX291dCwgaV9iaXQsIHBub3Bfb3V0LCAwKTsKK30KKworc3RhdGljIHZvaWQgYmVpc2NzaV9pbml0X3dyYl9oYW5kbGUoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhKQoreworCXN0cnVjdCBiZV9tZW1fZGVzY3JpcHRvciAqbWVtX2Rlc2NyX3dyYmgsICptZW1fZGVzY3Jfd3JiOworCXN0cnVjdCB3cmJfaGFuZGxlICpwd3JiX2hhbmRsZTsKKwlzdHJ1Y3QgaHdpX2NvbnRyb2xsZXIgKnBod2lfY3RybHI7CisJc3RydWN0IGh3aV93cmJfY29udGV4dCAqcHdyYl9jb250ZXh0OworCXN0cnVjdCBpc2NzaV93cmIgKnB3cmI7CisJdW5zaWduZWQgaW50IG51bV9jeG5fd3JiaDsKKwl1bnNpZ25lZCBpbnQgbnVtX2N4bl93cmIsIGosIGlkeCwgaW5kZXg7CisKKwltZW1fZGVzY3Jfd3JiaCA9IHBoYmEtPmluaXRfbWVtOworCW1lbV9kZXNjcl93cmJoICs9IEhXSV9NRU1fV1JCSDsKKworCW1lbV9kZXNjcl93cmIgPSBwaGJhLT5pbml0X21lbTsKKwltZW1fZGVzY3Jfd3JiICs9IEhXSV9NRU1fV1JCOworCisJaWR4ID0gMDsKKwlwd3JiX2hhbmRsZSA9IG1lbV9kZXNjcl93cmJoLT5tZW1fYXJyYXlbaWR4XS52aXJ0dWFsX2FkZHJlc3M7CisJbnVtX2N4bl93cmJoID0gKChtZW1fZGVzY3Jfd3JiaC0+bWVtX2FycmF5W2lkeF0uc2l6ZSkgLworCQkJKChzaXplb2Yoc3RydWN0IHdyYl9oYW5kbGUpKSAqCisJCQkgcGhiYS0+cGFyYW1zLndyYnNfcGVyX2N4bikpOworCXBod2lfY3RybHIgPSBwaGJhLT5waHdpX2N0cmxyOworCisJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgcGhiYS0+cGFyYW1zLmN4bnNfcGVyX2N0cmwgKiAyOyBpbmRleCArPSAyKSB7CisJCXB3cmJfY29udGV4dCA9ICZwaHdpX2N0cmxyLT53cmJfY29udGV4dFtpbmRleF07CisJCVNFX0RFQlVHKERCR19MVkxfOCwgImNpZD0lZCBwd3JiX2NvbnRleHQ9JXAgXG4iLCBpbmRleCwKKwkJCQkJCXB3cmJfY29udGV4dCk7CisJCXB3cmJfY29udGV4dC0+cHdyYl9oYW5kbGVfYmFzZSA9CisJCQkJa3phbGxvYyhzaXplb2Yoc3RydWN0IHdyYl9oYW5kbGUgKikgKgorCQkJCQlwaGJhLT5wYXJhbXMud3Jic19wZXJfY3huLCBHRlBfS0VSTkVMKTsKKwkJcHdyYl9jb250ZXh0LT5wd3JiX2hhbmRsZV9iYXNlc3RkID0KKwkJCQlremFsbG9jKHNpemVvZihzdHJ1Y3Qgd3JiX2hhbmRsZSAqKSAqCisJCQkJCXBoYmEtPnBhcmFtcy53cmJzX3Blcl9jeG4sIEdGUF9LRVJORUwpOworCQlpZiAobnVtX2N4bl93cmJoKSB7CisJCQlwd3JiX2NvbnRleHQtPmFsbG9jX2luZGV4ID0gMDsKKwkJCXB3cmJfY29udGV4dC0+d3JiX2hhbmRsZXNfYXZhaWxhYmxlID0gMDsKKwkJCWZvciAoaiA9IDA7IGogPCBwaGJhLT5wYXJhbXMud3Jic19wZXJfY3huOyBqKyspIHsKKwkJCQlwd3JiX2NvbnRleHQtPnB3cmJfaGFuZGxlX2Jhc2Vbal0gPSBwd3JiX2hhbmRsZTsKKwkJCQlwd3JiX2NvbnRleHQtPnB3cmJfaGFuZGxlX2Jhc2VzdGRbal0gPQorCQkJCQkJCQlwd3JiX2hhbmRsZTsKKwkJCQlwd3JiX2NvbnRleHQtPndyYl9oYW5kbGVzX2F2YWlsYWJsZSsrOworCQkJCXB3cmJfaGFuZGxlKys7CisJCQl9CisJCQlwd3JiX2NvbnRleHQtPmZyZWVfaW5kZXggPSAwOworCQkJbnVtX2N4bl93cmJoLS07CisJCX0gZWxzZSB7CisJCQlpZHgrKzsKKwkJCXB3cmJfaGFuZGxlID0KKwkJCSAgICBtZW1fZGVzY3Jfd3JiaC0+bWVtX2FycmF5W2lkeF0udmlydHVhbF9hZGRyZXNzOworCQkJbnVtX2N4bl93cmJoID0KKwkJCSAgICAoKG1lbV9kZXNjcl93cmJoLT5tZW1fYXJyYXlbaWR4XS5zaXplKSAvCisJCQkgICAgICgoc2l6ZW9mKHN0cnVjdCB3cmJfaGFuZGxlKSkgKgorCQkJICAgICAgcGhiYS0+cGFyYW1zLndyYnNfcGVyX2N4bikpOworCQkJcHdyYl9jb250ZXh0LT5hbGxvY19pbmRleCA9IDA7CisJCQlmb3IgKGogPSAwOyBqIDwgcGhiYS0+cGFyYW1zLndyYnNfcGVyX2N4bjsgaisrKSB7CisJCQkJcHdyYl9jb250ZXh0LT5wd3JiX2hhbmRsZV9iYXNlW2pdID0gcHdyYl9oYW5kbGU7CisJCQkJcHdyYl9jb250ZXh0LT5wd3JiX2hhbmRsZV9iYXNlc3RkW2pdID0KKwkJCQkgICAgcHdyYl9oYW5kbGU7CisJCQkJcHdyYl9jb250ZXh0LT53cmJfaGFuZGxlc19hdmFpbGFibGUrKzsKKwkJCQlwd3JiX2hhbmRsZSsrOworCQkJfQorCQkJcHdyYl9jb250ZXh0LT5mcmVlX2luZGV4ID0gMDsKKwkJCW51bV9jeG5fd3JiaC0tOworCQl9CisJfQorCWlkeCA9IDA7CisJcHdyYiA9IG1lbV9kZXNjcl93cmItPm1lbV9hcnJheVtpZHhdLnZpcnR1YWxfYWRkcmVzczsKKwludW1fY3huX3dyYiA9CisJICAgICgobWVtX2Rlc2NyX3dyYi0+bWVtX2FycmF5W2lkeF0uc2l6ZSkgLyAoc2l6ZW9mKHN0cnVjdCBpc2NzaV93cmIpKSAqCisJICAgICBwaGJhLT5wYXJhbXMud3Jic19wZXJfY3huKTsKKworCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IHBoYmEtPnBhcmFtcy5jeG5zX3Blcl9jdHJsOyBpbmRleCArPSAyKSB7CisJCXB3cmJfY29udGV4dCA9ICZwaHdpX2N0cmxyLT53cmJfY29udGV4dFtpbmRleF07CisJCWlmIChudW1fY3huX3dyYikgeworCQkJZm9yIChqID0gMDsgaiA8IHBoYmEtPnBhcmFtcy53cmJzX3Blcl9jeG47IGorKykgeworCQkJCXB3cmJfaGFuZGxlID0gcHdyYl9jb250ZXh0LT5wd3JiX2hhbmRsZV9iYXNlW2pdOworCQkJCXB3cmJfaGFuZGxlLT5wd3JiID0gcHdyYjsKKwkJCQlwd3JiKys7CisJCQl9CisJCQludW1fY3huX3dyYi0tOworCQl9IGVsc2UgeworCQkJaWR4Kys7CisJCQlwd3JiID0gbWVtX2Rlc2NyX3dyYi0+bWVtX2FycmF5W2lkeF0udmlydHVhbF9hZGRyZXNzOworCQkJbnVtX2N4bl93cmIgPSAoKG1lbV9kZXNjcl93cmItPm1lbV9hcnJheVtpZHhdLnNpemUpIC8KKwkJCQkJKHNpemVvZihzdHJ1Y3QgaXNjc2lfd3JiKSkgKgorCQkJCQlwaGJhLT5wYXJhbXMud3Jic19wZXJfY3huKTsKKwkJCWZvciAoaiA9IDA7IGogPCBwaGJhLT5wYXJhbXMud3Jic19wZXJfY3huOyBqKyspIHsKKwkJCQlwd3JiX2hhbmRsZSA9IHB3cmJfY29udGV4dC0+cHdyYl9oYW5kbGVfYmFzZVtqXTsKKwkJCQlwd3JiX2hhbmRsZS0+cHdyYiA9IHB3cmI7CisJCQkJcHdyYisrOworCQkJfQorCQkJbnVtX2N4bl93cmItLTsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgaHdpX2luaXRfYXN5bmNfcGR1X2N0eChzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEpCit7CisJc3RydWN0IGh3aV9jb250cm9sbGVyICpwaHdpX2N0cmxyOworCXN0cnVjdCBoYmFfcGFyYW1ldGVycyAqcCA9ICZwaGJhLT5wYXJhbXM7CisJc3RydWN0IGh3aV9hc3luY19wZHVfY29udGV4dCAqcGFzeW5jX2N0eDsKKwlzdHJ1Y3QgYXN5bmNfcGR1X2hhbmRsZSAqcGFzeW5jX2hlYWRlcl9oLCAqcGFzeW5jX2RhdGFfaDsKKwl1bnNpZ25lZCBpbnQgaW5kZXg7CisJc3RydWN0IGJlX21lbV9kZXNjcmlwdG9yICptZW1fZGVzY3I7CisKKwltZW1fZGVzY3IgPSAoc3RydWN0IGJlX21lbV9kZXNjcmlwdG9yICopcGhiYS0+aW5pdF9tZW07CisJbWVtX2Rlc2NyICs9IEhXSV9NRU1fQVNZTkNfUERVX0NPTlRFWFQ7CisKKwlwaHdpX2N0cmxyID0gcGhiYS0+cGh3aV9jdHJscjsKKwlwaHdpX2N0cmxyLT5waHdpX2N0eHQtPnBhc3luY19jdHggPSAoc3RydWN0IGh3aV9hc3luY19wZHVfY29udGV4dCAqKQorCQkJCW1lbV9kZXNjci0+bWVtX2FycmF5WzBdLnZpcnR1YWxfYWRkcmVzczsKKwlwYXN5bmNfY3R4ID0gcGh3aV9jdHJsci0+cGh3aV9jdHh0LT5wYXN5bmNfY3R4OworCW1lbXNldChwYXN5bmNfY3R4LCAwLCBzaXplb2YoKnBhc3luY19jdHgpKTsKKworCXBhc3luY19jdHgtPmFzeW5jX2hlYWRlci5udW1fZW50cmllcyA9IHAtPmFzeW5jcGR1c19wZXJfY3RybDsKKwlwYXN5bmNfY3R4LT5hc3luY19oZWFkZXIuYnVmZmVyX3NpemUgPSBwLT5kZWZwZHVfaGRyX3N6OworCXBhc3luY19jdHgtPmFzeW5jX2RhdGEuYnVmZmVyX3NpemUgPSBwLT5kZWZwZHVfZGF0YV9zejsKKwlwYXN5bmNfY3R4LT5hc3luY19kYXRhLm51bV9lbnRyaWVzID0gcC0+YXN5bmNwZHVzX3Blcl9jdHJsOworCisJbWVtX2Rlc2NyID0gKHN0cnVjdCBiZV9tZW1fZGVzY3JpcHRvciAqKXBoYmEtPmluaXRfbWVtOworCW1lbV9kZXNjciArPSBIV0lfTUVNX0FTWU5DX0hFQURFUl9CVUY7CisJaWYgKG1lbV9kZXNjci0+bWVtX2FycmF5WzBdLnZpcnR1YWxfYWRkcmVzcykgeworCQlTRV9ERUJVRyhEQkdfTFZMXzgsCisJCQkgImh3aV9pbml0X2FzeW5jX3BkdV9jdHggSFdJX01FTV9BU1lOQ19IRUFERVJfQlVGIgorCQkJICJ2YT0lcCBcbiIsIG1lbV9kZXNjci0+bWVtX2FycmF5WzBdLnZpcnR1YWxfYWRkcmVzcyk7CisJfSBlbHNlCisJCXNob3N0X3ByaW50ayhLRVJOX1dBUk5JTkcsIHBoYmEtPnNob3N0LAorCQkJICAgICAiTm8gVmlydHVhbCBhZGRyZXNzIFxuIik7CisKKwlwYXN5bmNfY3R4LT5hc3luY19oZWFkZXIudmFfYmFzZSA9CisJCQltZW1fZGVzY3ItPm1lbV9hcnJheVswXS52aXJ0dWFsX2FkZHJlc3M7CisKKwlwYXN5bmNfY3R4LT5hc3luY19oZWFkZXIucGFfYmFzZS51LmE2NC5hZGRyZXNzID0KKwkJCW1lbV9kZXNjci0+bWVtX2FycmF5WzBdLmJ1c19hZGRyZXNzLnUuYTY0LmFkZHJlc3M7CisKKwltZW1fZGVzY3IgPSAoc3RydWN0IGJlX21lbV9kZXNjcmlwdG9yICopcGhiYS0+aW5pdF9tZW07CisJbWVtX2Rlc2NyICs9IEhXSV9NRU1fQVNZTkNfSEVBREVSX1JJTkc7CisJaWYgKG1lbV9kZXNjci0+bWVtX2FycmF5WzBdLnZpcnR1YWxfYWRkcmVzcykgeworCQlTRV9ERUJVRyhEQkdfTFZMXzgsCisJCQkgImh3aV9pbml0X2FzeW5jX3BkdV9jdHggSFdJX01FTV9BU1lOQ19IRUFERVJfUklORyIKKwkJCSAidmE9JXAgXG4iLCBtZW1fZGVzY3ItPm1lbV9hcnJheVswXS52aXJ0dWFsX2FkZHJlc3MpOworCX0gZWxzZQorCQlzaG9zdF9wcmludGsoS0VSTl9XQVJOSU5HLCBwaGJhLT5zaG9zdCwKKwkJCSAgICAiTm8gVmlydHVhbCBhZGRyZXNzIFxuIik7CisJcGFzeW5jX2N0eC0+YXN5bmNfaGVhZGVyLnJpbmdfYmFzZSA9CisJCQltZW1fZGVzY3ItPm1lbV9hcnJheVswXS52aXJ0dWFsX2FkZHJlc3M7CisKKwltZW1fZGVzY3IgPSAoc3RydWN0IGJlX21lbV9kZXNjcmlwdG9yICopcGhiYS0+aW5pdF9tZW07CisJbWVtX2Rlc2NyICs9IEhXSV9NRU1fQVNZTkNfSEVBREVSX0hBTkRMRTsKKwlpZiAobWVtX2Rlc2NyLT5tZW1fYXJyYXlbMF0udmlydHVhbF9hZGRyZXNzKSB7CisJCVNFX0RFQlVHKERCR19MVkxfOCwKKwkJCSAiaHdpX2luaXRfYXN5bmNfcGR1X2N0eCBIV0lfTUVNX0FTWU5DX0hFQURFUl9IQU5ETEUiCisJCQkgInZhPSVwIFxuIiwgbWVtX2Rlc2NyLT5tZW1fYXJyYXlbMF0udmlydHVhbF9hZGRyZXNzKTsKKwl9IGVsc2UKKwkJc2hvc3RfcHJpbnRrKEtFUk5fV0FSTklORywgcGhiYS0+c2hvc3QsCisJCQkgICAgIk5vIFZpcnR1YWwgYWRkcmVzcyBcbiIpOworCisJcGFzeW5jX2N0eC0+YXN5bmNfaGVhZGVyLmhhbmRsZV9iYXNlID0KKwkJCW1lbV9kZXNjci0+bWVtX2FycmF5WzBdLnZpcnR1YWxfYWRkcmVzczsKKwlwYXN5bmNfY3R4LT5hc3luY19oZWFkZXIud3JpdGFibGVzID0gMDsKKwlJTklUX0xJU1RfSEVBRCgmcGFzeW5jX2N0eC0+YXN5bmNfaGVhZGVyLmZyZWVfbGlzdCk7CisKKwltZW1fZGVzY3IgPSAoc3RydWN0IGJlX21lbV9kZXNjcmlwdG9yICopcGhiYS0+aW5pdF9tZW07CisJbWVtX2Rlc2NyICs9IEhXSV9NRU1fQVNZTkNfREFUQV9CVUY7CisJaWYgKG1lbV9kZXNjci0+bWVtX2FycmF5WzBdLnZpcnR1YWxfYWRkcmVzcykgeworCQlTRV9ERUJVRyhEQkdfTFZMXzgsCisJCQkgImh3aV9pbml0X2FzeW5jX3BkdV9jdHggSFdJX01FTV9BU1lOQ19EQVRBX0JVRiIKKwkJCSAidmE9JXAgXG4iLCBtZW1fZGVzY3ItPm1lbV9hcnJheVswXS52aXJ0dWFsX2FkZHJlc3MpOworCX0gZWxzZQorCQlzaG9zdF9wcmludGsoS0VSTl9XQVJOSU5HLCBwaGJhLT5zaG9zdCwKKwkJCSAgICAiTm8gVmlydHVhbCBhZGRyZXNzIFxuIik7CisJcGFzeW5jX2N0eC0+YXN5bmNfZGF0YS52YV9iYXNlID0KKwkJCW1lbV9kZXNjci0+bWVtX2FycmF5WzBdLnZpcnR1YWxfYWRkcmVzczsKKwlwYXN5bmNfY3R4LT5hc3luY19kYXRhLnBhX2Jhc2UudS5hNjQuYWRkcmVzcyA9CisJCQltZW1fZGVzY3ItPm1lbV9hcnJheVswXS5idXNfYWRkcmVzcy51LmE2NC5hZGRyZXNzOworCisJbWVtX2Rlc2NyID0gKHN0cnVjdCBiZV9tZW1fZGVzY3JpcHRvciAqKXBoYmEtPmluaXRfbWVtOworCW1lbV9kZXNjciArPSBIV0lfTUVNX0FTWU5DX0RBVEFfUklORzsKKwlpZiAobWVtX2Rlc2NyLT5tZW1fYXJyYXlbMF0udmlydHVhbF9hZGRyZXNzKSB7CisJCVNFX0RFQlVHKERCR19MVkxfOCwKKwkJCSAiaHdpX2luaXRfYXN5bmNfcGR1X2N0eCBIV0lfTUVNX0FTWU5DX0RBVEFfUklORyIKKwkJCSAidmE9JXAgXG4iLCBtZW1fZGVzY3ItPm1lbV9hcnJheVswXS52aXJ0dWFsX2FkZHJlc3MpOworCX0gZWxzZQorCQlzaG9zdF9wcmludGsoS0VSTl9XQVJOSU5HLCBwaGJhLT5zaG9zdCwKKwkJCSAgICAgIk5vIFZpcnR1YWwgYWRkcmVzcyBcbiIpOworCisJcGFzeW5jX2N0eC0+YXN5bmNfZGF0YS5yaW5nX2Jhc2UgPQorCQkJbWVtX2Rlc2NyLT5tZW1fYXJyYXlbMF0udmlydHVhbF9hZGRyZXNzOworCisJbWVtX2Rlc2NyID0gKHN0cnVjdCBiZV9tZW1fZGVzY3JpcHRvciAqKXBoYmEtPmluaXRfbWVtOworCW1lbV9kZXNjciArPSBIV0lfTUVNX0FTWU5DX0RBVEFfSEFORExFOworCWlmICghbWVtX2Rlc2NyLT5tZW1fYXJyYXlbMF0udmlydHVhbF9hZGRyZXNzKQorCQlzaG9zdF9wcmludGsoS0VSTl9XQVJOSU5HLCBwaGJhLT5zaG9zdCwKKwkJCSAgICAiTm8gVmlydHVhbCBhZGRyZXNzIFxuIik7CisKKwlwYXN5bmNfY3R4LT5hc3luY19kYXRhLmhhbmRsZV9iYXNlID0KKwkJCW1lbV9kZXNjci0+bWVtX2FycmF5WzBdLnZpcnR1YWxfYWRkcmVzczsKKwlwYXN5bmNfY3R4LT5hc3luY19kYXRhLndyaXRhYmxlcyA9IDA7CisJSU5JVF9MSVNUX0hFQUQoJnBhc3luY19jdHgtPmFzeW5jX2RhdGEuZnJlZV9saXN0KTsKKworCXBhc3luY19oZWFkZXJfaCA9CisJCShzdHJ1Y3QgYXN5bmNfcGR1X2hhbmRsZSAqKXBhc3luY19jdHgtPmFzeW5jX2hlYWRlci5oYW5kbGVfYmFzZTsKKwlwYXN5bmNfZGF0YV9oID0KKwkJKHN0cnVjdCBhc3luY19wZHVfaGFuZGxlICopcGFzeW5jX2N0eC0+YXN5bmNfZGF0YS5oYW5kbGVfYmFzZTsKKworCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IHAtPmFzeW5jcGR1c19wZXJfY3RybDsgaW5kZXgrKykgeworCQlwYXN5bmNfaGVhZGVyX2gtPmNyaSA9IC0xOworCQlwYXN5bmNfaGVhZGVyX2gtPmluZGV4ID0gKGNoYXIpaW5kZXg7CisJCUlOSVRfTElTVF9IRUFEKCZwYXN5bmNfaGVhZGVyX2gtPmxpbmspOworCQlwYXN5bmNfaGVhZGVyX2gtPnBidWZmZXIgPQorCQkJKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpCisJCQkocGFzeW5jX2N0eC0+YXN5bmNfaGVhZGVyLnZhX2Jhc2UpICsKKwkJCShwLT5kZWZwZHVfaGRyX3N6ICogaW5kZXgpKTsKKworCQlwYXN5bmNfaGVhZGVyX2gtPnBhLnUuYTY0LmFkZHJlc3MgPQorCQkJcGFzeW5jX2N0eC0+YXN5bmNfaGVhZGVyLnBhX2Jhc2UudS5hNjQuYWRkcmVzcyArCisJCQkocC0+ZGVmcGR1X2hkcl9zeiAqIGluZGV4KTsKKworCQlsaXN0X2FkZF90YWlsKCZwYXN5bmNfaGVhZGVyX2gtPmxpbmssCisJCQkJJnBhc3luY19jdHgtPmFzeW5jX2hlYWRlci5mcmVlX2xpc3QpOworCQlwYXN5bmNfaGVhZGVyX2grKzsKKwkJcGFzeW5jX2N0eC0+YXN5bmNfaGVhZGVyLmZyZWVfZW50cmllcysrOworCQlwYXN5bmNfY3R4LT5hc3luY19oZWFkZXIud3JpdGFibGVzKys7CisKKwkJSU5JVF9MSVNUX0hFQUQoJnBhc3luY19jdHgtPmFzeW5jX2VudHJ5W2luZGV4XS53YWl0X3F1ZXVlLmxpc3QpOworCQlJTklUX0xJU1RfSEVBRCgmcGFzeW5jX2N0eC0+YXN5bmNfZW50cnlbaW5kZXhdLgorCQkJICAgICAgIGhlYWRlcl9idXN5X2xpc3QpOworCQlwYXN5bmNfZGF0YV9oLT5jcmkgPSAtMTsKKwkJcGFzeW5jX2RhdGFfaC0+aW5kZXggPSAoY2hhcilpbmRleDsKKwkJSU5JVF9MSVNUX0hFQUQoJnBhc3luY19kYXRhX2gtPmxpbmspOworCQlwYXN5bmNfZGF0YV9oLT5wYnVmZmVyID0KKwkJCSh2b2lkICopKCh1bnNpZ25lZCBsb25nKQorCQkJKHBhc3luY19jdHgtPmFzeW5jX2RhdGEudmFfYmFzZSkgKworCQkJKHAtPmRlZnBkdV9kYXRhX3N6ICogaW5kZXgpKTsKKworCQlwYXN5bmNfZGF0YV9oLT5wYS51LmE2NC5hZGRyZXNzID0KKwkJICAgIHBhc3luY19jdHgtPmFzeW5jX2RhdGEucGFfYmFzZS51LmE2NC5hZGRyZXNzICsKKwkJICAgIChwLT5kZWZwZHVfZGF0YV9zeiAqIGluZGV4KTsKKworCQlsaXN0X2FkZF90YWlsKCZwYXN5bmNfZGF0YV9oLT5saW5rLAorCQkJICAgICAgJnBhc3luY19jdHgtPmFzeW5jX2RhdGEuZnJlZV9saXN0KTsKKwkJcGFzeW5jX2RhdGFfaCsrOworCQlwYXN5bmNfY3R4LT5hc3luY19kYXRhLmZyZWVfZW50cmllcysrOworCQlwYXN5bmNfY3R4LT5hc3luY19kYXRhLndyaXRhYmxlcysrOworCisJCUlOSVRfTElTVF9IRUFEKCZwYXN5bmNfY3R4LT5hc3luY19lbnRyeVtpbmRleF0uZGF0YV9idXN5X2xpc3QpOworCX0KKworCXBhc3luY19jdHgtPmFzeW5jX2hlYWRlci5ob3N0X3dyaXRlX3B0ciA9IDA7CisJcGFzeW5jX2N0eC0+YXN5bmNfaGVhZGVyLmVwX3JlYWRfcHRyID0gLTE7CisJcGFzeW5jX2N0eC0+YXN5bmNfZGF0YS5ob3N0X3dyaXRlX3B0ciA9IDA7CisJcGFzeW5jX2N0eC0+YXN5bmNfZGF0YS5lcF9yZWFkX3B0ciA9IC0xOworfQorCitzdGF0aWMgaW50CitiZV9zZ2xfY3JlYXRlX2NvbnRpZ3VvdXModm9pZCAqdmlydHVhbF9hZGRyZXNzLAorCQkJIHU2NCBwaHlzaWNhbF9hZGRyZXNzLCB1MzIgbGVuZ3RoLAorCQkJIHN0cnVjdCBiZV9kbWFfbWVtICpzZ2wpCit7CisJV0FSTl9PTighdmlydHVhbF9hZGRyZXNzKTsKKwlXQVJOX09OKCFwaHlzaWNhbF9hZGRyZXNzKTsKKwlXQVJOX09OKCFsZW5ndGggPiAwKTsKKwlXQVJOX09OKCFzZ2wpOworCisJc2dsLT52YSA9IHZpcnR1YWxfYWRkcmVzczsKKwlzZ2wtPmRtYSA9IHBoeXNpY2FsX2FkZHJlc3M7CisJc2dsLT5zaXplID0gbGVuZ3RoOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGJlX3NnbF9kZXN0cm95X2NvbnRpZ3VvdXMoc3RydWN0IGJlX2RtYV9tZW0gKnNnbCkKK3sKKwltZW1zZXQoc2dsLCAwLCBzaXplb2YoKnNnbCkpOworfQorCitzdGF0aWMgdm9pZAoraHdpX2J1aWxkX2JlX3NnbF9hcnIoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhLAorCQkgICAgIHN0cnVjdCBtZW1fYXJyYXkgKnBtZW0sIHN0cnVjdCBiZV9kbWFfbWVtICpzZ2wpCit7CisJaWYgKHNnbC0+dmEpCisJCWJlX3NnbF9kZXN0cm95X2NvbnRpZ3VvdXMoc2dsKTsKKworCWJlX3NnbF9jcmVhdGVfY29udGlndW91cyhwbWVtLT52aXJ0dWFsX2FkZHJlc3MsCisJCQkJIHBtZW0tPmJ1c19hZGRyZXNzLnUuYTY0LmFkZHJlc3MsCisJCQkJIHBtZW0tPnNpemUsIHNnbCk7Cit9CisKK3N0YXRpYyB2b2lkCitod2lfYnVpbGRfYmVfc2dsX2J5X29mZnNldChzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEsCisJCQkgICBzdHJ1Y3QgbWVtX2FycmF5ICpwbWVtLCBzdHJ1Y3QgYmVfZG1hX21lbSAqc2dsKQoreworCWlmIChzZ2wtPnZhKQorCQliZV9zZ2xfZGVzdHJveV9jb250aWd1b3VzKHNnbCk7CisKKwliZV9zZ2xfY3JlYXRlX2NvbnRpZ3VvdXMoKHVuc2lnbmVkIGNoYXIgKilwbWVtLT52aXJ0dWFsX2FkZHJlc3MsCisJCQkJIHBtZW0tPmJ1c19hZGRyZXNzLnUuYTY0LmFkZHJlc3MsCisJCQkJIHBtZW0tPnNpemUsIHNnbCk7Cit9CisKK3N0YXRpYyBpbnQgYmVfZmlsbF9xdWV1ZShzdHJ1Y3QgYmVfcXVldWVfaW5mbyAqcSwKKwkJdTE2IGxlbiwgdTE2IGVudHJ5X3NpemUsIHZvaWQgKnZhZGRyZXNzKQoreworCXN0cnVjdCBiZV9kbWFfbWVtICptZW0gPSAmcS0+ZG1hX21lbTsKKworCW1lbXNldChxLCAwLCBzaXplb2YoKnEpKTsKKwlxLT5sZW4gPSBsZW47CisJcS0+ZW50cnlfc2l6ZSA9IGVudHJ5X3NpemU7CisJbWVtLT5zaXplID0gbGVuICogZW50cnlfc2l6ZTsKKwltZW0tPnZhID0gdmFkZHJlc3M7CisJaWYgKCFtZW0tPnZhKQorCQlyZXR1cm4gLUVOT01FTTsKKwltZW1zZXQobWVtLT52YSwgMCwgbWVtLT5zaXplKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBiZWlzY3NpX2NyZWF0ZV9lcShzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEsCisJCQkgICAgIHN0cnVjdCBod2lfY29udGV4dF9tZW1vcnkgKnBod2lfY29udGV4dCkKK3sKKwl1bnNpZ25lZCBpbnQgaWR4OworCWludCByZXQ7CisJc3RydWN0IGJlX3F1ZXVlX2luZm8gKmVxOworCXN0cnVjdCBiZV9kbWFfbWVtICptZW07CisJc3RydWN0IGJlX21lbV9kZXNjcmlwdG9yICptZW1fZGVzY3I7CisJdm9pZCAqZXFfdmFkZHJlc3M7CisKKwlpZHggPSAwOworCWVxID0gJnBod2lfY29udGV4dC0+YmVfZXEucTsKKwltZW0gPSAmZXEtPmRtYV9tZW07CisJbWVtX2Rlc2NyID0gcGhiYS0+aW5pdF9tZW07CisJbWVtX2Rlc2NyICs9IEhXSV9NRU1fRVE7CisJZXFfdmFkZHJlc3MgPSBtZW1fZGVzY3ItPm1lbV9hcnJheVtpZHhdLnZpcnR1YWxfYWRkcmVzczsKKworCXJldCA9IGJlX2ZpbGxfcXVldWUoZXEsIHBoYmEtPnBhcmFtcy5udW1fZXFfZW50cmllcywKKwkJCSAgICBzaXplb2Yoc3RydWN0IGJlX2VxX2VudHJ5KSwgZXFfdmFkZHJlc3MpOworCWlmIChyZXQpIHsKKwkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCBwaGJhLT5zaG9zdCwKKwkJCSAgICAgImJlX2ZpbGxfcXVldWUgRmFpbGVkIGZvciBFUSBcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCW1lbS0+ZG1hID0gbWVtX2Rlc2NyLT5tZW1fYXJyYXlbaWR4XS5idXNfYWRkcmVzcy51LmE2NC5hZGRyZXNzOworCisJcmV0ID0gYmVpc2NzaV9jbWRfZXFfY3JlYXRlKCZwaGJhLT5jdHJsLCBlcSwKKwkJCQkgICAgcGh3aV9jb250ZXh0LT5iZV9lcS5jdXJfZXFkKTsKKwlpZiAocmV0KSB7CisJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgcGhiYS0+c2hvc3QsICJiZWlzY3NpX2NtZF9lcV9jcmVhdGUiCisJCQkgICAgICJGYWlsZWRmb3IgRVEgXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJU0VfREVCVUcoREJHX0xWTF84LCAiZXEgaWQgaXMgJWRcbiIsIHBod2lfY29udGV4dC0+YmVfZXEucS5pZCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYmVpc2NzaV9jcmVhdGVfY3Eoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhLAorCQkJICAgICBzdHJ1Y3QgaHdpX2NvbnRleHRfbWVtb3J5ICpwaHdpX2NvbnRleHQpCit7CisJdW5zaWduZWQgaW50IGlkeDsKKwlpbnQgcmV0OworCXN0cnVjdCBiZV9xdWV1ZV9pbmZvICpjcSwgKmVxOworCXN0cnVjdCBiZV9kbWFfbWVtICptZW07CisJc3RydWN0IGJlX21lbV9kZXNjcmlwdG9yICptZW1fZGVzY3I7CisJdm9pZCAqY3FfdmFkZHJlc3M7CisKKwlpZHggPSAwOworCWNxID0gJnBod2lfY29udGV4dC0+YmVfY3E7CisJZXEgPSAmcGh3aV9jb250ZXh0LT5iZV9lcS5xOworCW1lbSA9ICZjcS0+ZG1hX21lbTsKKwltZW1fZGVzY3IgPSBwaGJhLT5pbml0X21lbTsKKwltZW1fZGVzY3IgKz0gSFdJX01FTV9DUTsKKwljcV92YWRkcmVzcyA9IG1lbV9kZXNjci0+bWVtX2FycmF5W2lkeF0udmlydHVhbF9hZGRyZXNzOworCXJldCA9IGJlX2ZpbGxfcXVldWUoY3EsIHBoYmEtPnBhcmFtcy5pY2RzX3Blcl9jdHJsIC8gMiwKKwkJCSAgICBzaXplb2Yoc3RydWN0IHNvbF9jcWUpLCBjcV92YWRkcmVzcyk7CisJaWYgKHJldCkgeworCQlzaG9zdF9wcmludGsoS0VSTl9FUlIsIHBoYmEtPnNob3N0LAorCQkJICAgICAiYmVfZmlsbF9xdWV1ZSBGYWlsZWQgZm9yIElTQ1NJIENRIFxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJbWVtLT5kbWEgPSBtZW1fZGVzY3ItPm1lbV9hcnJheVtpZHhdLmJ1c19hZGRyZXNzLnUuYTY0LmFkZHJlc3M7CisJcmV0ID0gYmVpc2NzaV9jbWRfY3FfY3JlYXRlKCZwaGJhLT5jdHJsLCBjcSwgZXEsIGZhbHNlLCBmYWxzZSwgMCk7CisJaWYgKHJldCkgeworCQlzaG9zdF9wcmludGsoS0VSTl9FUlIsIHBoYmEtPnNob3N0LAorCQkJICAgICAiYmVpc2NzaV9jbWRfZXFfY3JlYXRlIEZhaWxlZCBmb3IgSVNDU0kgQ1EgXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJU0VfREVCVUcoREJHX0xWTF84LCAiaXNjc2kgY3EgaWQgaXMgJWRcbiIsIHBod2lfY29udGV4dC0+YmVfY3EuaWQpOworCVNFX0RFQlVHKERCR19MVkxfOCwgIklTQ1NJIENRIENSRUFURURcbiIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CitiZWlzY3NpX2NyZWF0ZV9kZWZfaGRyKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSwKKwkJICAgICAgIHN0cnVjdCBod2lfY29udGV4dF9tZW1vcnkgKnBod2lfY29udGV4dCwKKwkJICAgICAgIHN0cnVjdCBod2lfY29udHJvbGxlciAqcGh3aV9jdHJsciwKKwkJICAgICAgIHVuc2lnbmVkIGludCBkZWZfcGR1X3Jpbmdfc3opCit7CisJdW5zaWduZWQgaW50IGlkeDsKKwlpbnQgcmV0OworCXN0cnVjdCBiZV9xdWV1ZV9pbmZvICpkcSwgKmNxOworCXN0cnVjdCBiZV9kbWFfbWVtICptZW07CisJc3RydWN0IGJlX21lbV9kZXNjcmlwdG9yICptZW1fZGVzY3I7CisJdm9pZCAqZHFfdmFkZHJlc3M7CisKKwlpZHggPSAwOworCWRxID0gJnBod2lfY29udGV4dC0+YmVfZGVmX2hkcnE7CisJY3EgPSAmcGh3aV9jb250ZXh0LT5iZV9jcTsKKwltZW0gPSAmZHEtPmRtYV9tZW07CisJbWVtX2Rlc2NyID0gcGhiYS0+aW5pdF9tZW07CisJbWVtX2Rlc2NyICs9IEhXSV9NRU1fQVNZTkNfSEVBREVSX1JJTkc7CisJZHFfdmFkZHJlc3MgPSBtZW1fZGVzY3ItPm1lbV9hcnJheVtpZHhdLnZpcnR1YWxfYWRkcmVzczsKKwlyZXQgPSBiZV9maWxsX3F1ZXVlKGRxLCBtZW1fZGVzY3ItPm1lbV9hcnJheVswXS5zaXplIC8KKwkJCSAgICBzaXplb2Yoc3RydWN0IHBoeXNfYWRkciksCisJCQkgICAgc2l6ZW9mKHN0cnVjdCBwaHlzX2FkZHIpLCBkcV92YWRkcmVzcyk7CisJaWYgKHJldCkgeworCQlzaG9zdF9wcmludGsoS0VSTl9FUlIsIHBoYmEtPnNob3N0LAorCQkJICAgICAiYmVfZmlsbF9xdWV1ZSBGYWlsZWQgZm9yIERFRiBQRFUgSERSXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJbWVtLT5kbWEgPSBtZW1fZGVzY3ItPm1lbV9hcnJheVtpZHhdLmJ1c19hZGRyZXNzLnUuYTY0LmFkZHJlc3M7CisJcmV0ID0gYmVfY21kX2NyZWF0ZV9kZWZhdWx0X3BkdV9xdWV1ZSgmcGhiYS0+Y3RybCwgY3EsIGRxLAorCQkJCQkgICAgICBkZWZfcGR1X3Jpbmdfc3osCisJCQkJCSAgICAgIHBoYmEtPnBhcmFtcy5kZWZwZHVfaGRyX3N6KTsKKwlpZiAocmV0KSB7CisJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgcGhiYS0+c2hvc3QsCisJCQkgICAgICJiZV9jbWRfY3JlYXRlX2RlZmF1bHRfcGR1X3F1ZXVlIEZhaWxlZCBERUZIRFJcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKwlwaHdpX2N0cmxyLT5kZWZhdWx0X3BkdV9oZHIuaWQgPSBwaHdpX2NvbnRleHQtPmJlX2RlZl9oZHJxLmlkOworCVNFX0RFQlVHKERCR19MVkxfOCwgImlzY3NpIGRlZiBwZHUgaWQgaXMgJWRcbiIsCisJCSBwaHdpX2NvbnRleHQtPmJlX2RlZl9oZHJxLmlkKTsKKwlod2lfcG9zdF9hc3luY19idWZmZXJzKHBoYmEsIDEpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CitiZWlzY3NpX2NyZWF0ZV9kZWZfZGF0YShzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEsCisJCQlzdHJ1Y3QgaHdpX2NvbnRleHRfbWVtb3J5ICpwaHdpX2NvbnRleHQsCisJCQlzdHJ1Y3QgaHdpX2NvbnRyb2xsZXIgKnBod2lfY3RybHIsCisJCQl1bnNpZ25lZCBpbnQgZGVmX3BkdV9yaW5nX3N6KQoreworCXVuc2lnbmVkIGludCBpZHg7CisJaW50IHJldDsKKwlzdHJ1Y3QgYmVfcXVldWVfaW5mbyAqZGF0YXEsICpjcTsKKwlzdHJ1Y3QgYmVfZG1hX21lbSAqbWVtOworCXN0cnVjdCBiZV9tZW1fZGVzY3JpcHRvciAqbWVtX2Rlc2NyOworCXZvaWQgKmRxX3ZhZGRyZXNzOworCisJaWR4ID0gMDsKKwlkYXRhcSA9ICZwaHdpX2NvbnRleHQtPmJlX2RlZl9kYXRhcTsKKwljcSA9ICZwaHdpX2NvbnRleHQtPmJlX2NxOworCW1lbSA9ICZkYXRhcS0+ZG1hX21lbTsKKwltZW1fZGVzY3IgPSBwaGJhLT5pbml0X21lbTsKKwltZW1fZGVzY3IgKz0gSFdJX01FTV9BU1lOQ19EQVRBX1JJTkc7CisJZHFfdmFkZHJlc3MgPSBtZW1fZGVzY3ItPm1lbV9hcnJheVtpZHhdLnZpcnR1YWxfYWRkcmVzczsKKwlyZXQgPSBiZV9maWxsX3F1ZXVlKGRhdGFxLCBtZW1fZGVzY3ItPm1lbV9hcnJheVswXS5zaXplIC8KKwkJCSAgICBzaXplb2Yoc3RydWN0IHBoeXNfYWRkciksCisJCQkgICAgc2l6ZW9mKHN0cnVjdCBwaHlzX2FkZHIpLCBkcV92YWRkcmVzcyk7CisJaWYgKHJldCkgeworCQlzaG9zdF9wcmludGsoS0VSTl9FUlIsIHBoYmEtPnNob3N0LAorCQkJICAgICAiYmVfZmlsbF9xdWV1ZSBGYWlsZWQgZm9yIERFRiBQRFUgREFUQVxuIik7CisJCXJldHVybiByZXQ7CisJfQorCW1lbS0+ZG1hID0gbWVtX2Rlc2NyLT5tZW1fYXJyYXlbaWR4XS5idXNfYWRkcmVzcy51LmE2NC5hZGRyZXNzOworCXJldCA9IGJlX2NtZF9jcmVhdGVfZGVmYXVsdF9wZHVfcXVldWUoJnBoYmEtPmN0cmwsIGNxLCBkYXRhcSwKKwkJCQkJICAgICAgZGVmX3BkdV9yaW5nX3N6LAorCQkJCQkgICAgICBwaGJhLT5wYXJhbXMuZGVmcGR1X2RhdGFfc3opOworCWlmIChyZXQpIHsKKwkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCBwaGJhLT5zaG9zdCwKKwkJCSAgICAgImJlX2NtZF9jcmVhdGVfZGVmYXVsdF9wZHVfcXVldWUgRmFpbGVkIgorCQkJICAgICAiIGZvciBERUYgUERVIERBVEFcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKwlwaHdpX2N0cmxyLT5kZWZhdWx0X3BkdV9kYXRhLmlkID0gcGh3aV9jb250ZXh0LT5iZV9kZWZfZGF0YXEuaWQ7CisJU0VfREVCVUcoREJHX0xWTF84LCAiaXNjc2kgZGVmIGRhdGEgaWQgaXMgJWRcbiIsCisJCSBwaHdpX2NvbnRleHQtPmJlX2RlZl9kYXRhcS5pZCk7CisJaHdpX3Bvc3RfYXN5bmNfYnVmZmVycyhwaGJhLCAwKTsKKwlTRV9ERUJVRyhEQkdfTFZMXzgsICJERUZBVUxUIFBEVSBEQVRBIFJJTkcgQ1JFQVRFRCBcbiIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CitiZWlzY3NpX3Bvc3RfcGFnZXMoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhKQoreworCXN0cnVjdCBiZV9tZW1fZGVzY3JpcHRvciAqbWVtX2Rlc2NyOworCXN0cnVjdCBtZW1fYXJyYXkgKnBtX2FycjsKKwl1bnNpZ25lZCBpbnQgcGFnZV9vZmZzZXQsIGk7CisJc3RydWN0IGJlX2RtYV9tZW0gc2dsOworCWludCBzdGF0dXM7CisKKwltZW1fZGVzY3IgPSBwaGJhLT5pbml0X21lbTsKKwltZW1fZGVzY3IgKz0gSFdJX01FTV9TR0U7CisJcG1fYXJyID0gbWVtX2Rlc2NyLT5tZW1fYXJyYXk7CisKKwlwYWdlX29mZnNldCA9IChzaXplb2Yoc3RydWN0IGlzY3NpX3NnZSkgKiBwaGJhLT5wYXJhbXMubnVtX3NnZV9wZXJfaW8gKgorCQkJcGhiYS0+ZndfY29uZmlnLmlzY3NpX2ljZF9zdGFydCkgLyBQQUdFX1NJWkU7CisJZm9yIChpID0gMDsgaSA8IG1lbV9kZXNjci0+bnVtX2VsZW1lbnRzOyBpKyspIHsKKwkJaHdpX2J1aWxkX2JlX3NnbF9hcnIocGhiYSwgcG1fYXJyLCAmc2dsKTsKKwkJc3RhdHVzID0gYmVfY21kX2lzY3NpX3Bvc3Rfc2dsX3BhZ2VzKCZwaGJhLT5jdHJsLCAmc2dsLAorCQkJCQkJcGFnZV9vZmZzZXQsCisJCQkJCQkocG1fYXJyLT5zaXplIC8gUEFHRV9TSVpFKSk7CisJCXBhZ2Vfb2Zmc2V0ICs9IHBtX2Fyci0+c2l6ZSAvIFBBR0VfU0laRTsKKwkJaWYgKHN0YXR1cyAhPSAwKSB7CisJCQlzaG9zdF9wcmludGsoS0VSTl9FUlIsIHBoYmEtPnNob3N0LAorCQkJCSAgICAgInBvc3Qgc2dsIGZhaWxlZC5cbiIpOworCQkJcmV0dXJuIHN0YXR1czsKKwkJfQorCQlwbV9hcnIrKzsKKwl9CisJU0VfREVCVUcoREJHX0xWTF84LCAiUE9TVEVEIFBBR0VTIFxuIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2JlaXNjc2lfY3JlYXRlX3dyYl9yaW5ncyhzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEsCisJCQkgc3RydWN0IGh3aV9jb250ZXh0X21lbW9yeSAqcGh3aV9jb250ZXh0LAorCQkJIHN0cnVjdCBod2lfY29udHJvbGxlciAqcGh3aV9jdHJscikKK3sKKwl1bnNpZ25lZCBpbnQgd3JiX21lbV9pbmRleCwgb2Zmc2V0LCBzaXplLCBudW1fd3JiX3JpbmdzOworCXU2NCBwYV9hZGRyX2xvOworCXVuc2lnbmVkIGludCBpZHgsIG51bSwgaTsKKwlzdHJ1Y3QgbWVtX2FycmF5ICpwd3JiX2FycjsKKwl2b2lkICp3cmJfdmFkZHI7CisJc3RydWN0IGJlX2RtYV9tZW0gc2dsOworCXN0cnVjdCBiZV9tZW1fZGVzY3JpcHRvciAqbWVtX2Rlc2NyOworCWludCBzdGF0dXM7CisKKwlpZHggPSAwOworCW1lbV9kZXNjciA9IHBoYmEtPmluaXRfbWVtOworCW1lbV9kZXNjciArPSBIV0lfTUVNX1dSQjsKKwlwd3JiX2FyciA9IGttYWxsb2Moc2l6ZW9mKCpwd3JiX2FycikgKiBwaGJhLT5wYXJhbXMuY3huc19wZXJfY3RybCwKKwkJCSAgIEdGUF9LRVJORUwpOworCWlmICghcHdyYl9hcnIpIHsKKwkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCBwaGJhLT5zaG9zdCwKKwkJCSAgICAgIk1lbW9yeSBhbGxvYyBmYWlsZWQgaW4gY3JlYXRlIHdyYiByaW5nLlxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwl3cmJfdmFkZHIgPSBtZW1fZGVzY3ItPm1lbV9hcnJheVtpZHhdLnZpcnR1YWxfYWRkcmVzczsKKwlwYV9hZGRyX2xvID0gbWVtX2Rlc2NyLT5tZW1fYXJyYXlbaWR4XS5idXNfYWRkcmVzcy51LmE2NC5hZGRyZXNzOworCW51bV93cmJfcmluZ3MgPSBtZW1fZGVzY3ItPm1lbV9hcnJheVtpZHhdLnNpemUgLworCQkocGhiYS0+cGFyYW1zLndyYnNfcGVyX2N4biAqIHNpemVvZihzdHJ1Y3QgaXNjc2lfd3JiKSk7CisKKwlmb3IgKG51bSA9IDA7IG51bSA8IHBoYmEtPnBhcmFtcy5jeG5zX3Blcl9jdHJsOyBudW0rKykgeworCQlpZiAobnVtX3dyYl9yaW5ncykgeworCQkJcHdyYl9hcnJbbnVtXS52aXJ0dWFsX2FkZHJlc3MgPSB3cmJfdmFkZHI7CisJCQlwd3JiX2FycltudW1dLmJ1c19hZGRyZXNzLnUuYTY0LmFkZHJlc3MJPSBwYV9hZGRyX2xvOworCQkJcHdyYl9hcnJbbnVtXS5zaXplID0gcGhiYS0+cGFyYW1zLndyYnNfcGVyX2N4biAqCisJCQkJCSAgICBzaXplb2Yoc3RydWN0IGlzY3NpX3dyYik7CisJCQl3cmJfdmFkZHIgKz0gcHdyYl9hcnJbbnVtXS5zaXplOworCQkJcGFfYWRkcl9sbyArPSBwd3JiX2FycltudW1dLnNpemU7CisJCQludW1fd3JiX3JpbmdzLS07CisJCX0gZWxzZSB7CisJCQlpZHgrKzsKKwkJCXdyYl92YWRkciA9IG1lbV9kZXNjci0+bWVtX2FycmF5W2lkeF0udmlydHVhbF9hZGRyZXNzOworCQkJcGFfYWRkcl9sbyA9IG1lbV9kZXNjci0+bWVtX2FycmF5W2lkeF0uXAorCQkJCQlidXNfYWRkcmVzcy51LmE2NC5hZGRyZXNzOworCQkJbnVtX3dyYl9yaW5ncyA9IG1lbV9kZXNjci0+bWVtX2FycmF5W2lkeF0uc2l6ZSAvCisJCQkJCShwaGJhLT5wYXJhbXMud3Jic19wZXJfY3huICoKKwkJCQkJc2l6ZW9mKHN0cnVjdCBpc2NzaV93cmIpKTsKKwkJCXB3cmJfYXJyW251bV0udmlydHVhbF9hZGRyZXNzID0gd3JiX3ZhZGRyOworCQkJcHdyYl9hcnJbbnVtXS5idXNfYWRkcmVzcy51LmE2NC5hZGRyZXNzXAorCQkJCQkJPSBwYV9hZGRyX2xvOworCQkJcHdyYl9hcnJbbnVtXS5zaXplID0gcGhiYS0+cGFyYW1zLndyYnNfcGVyX2N4biAqCisJCQkJCQkgc2l6ZW9mKHN0cnVjdCBpc2NzaV93cmIpOworCQkJd3JiX3ZhZGRyICs9IHB3cmJfYXJyW251bV0uc2l6ZTsKKwkJCXBhX2FkZHJfbG8gICArPSBwd3JiX2FycltudW1dLnNpemU7CisJCQludW1fd3JiX3JpbmdzLS07CisJCX0KKwl9CisJZm9yIChpID0gMDsgaSA8IHBoYmEtPnBhcmFtcy5jeG5zX3Blcl9jdHJsOyBpKyspIHsKKwkJd3JiX21lbV9pbmRleCA9IDA7CisJCW9mZnNldCA9IDA7CisJCXNpemUgPSAwOworCisJCWh3aV9idWlsZF9iZV9zZ2xfYnlfb2Zmc2V0KHBoYmEsICZwd3JiX2FycltpXSwgJnNnbCk7CisJCXN0YXR1cyA9IGJlX2NtZF93cmJxX2NyZWF0ZSgmcGhiYS0+Y3RybCwgJnNnbCwKKwkJCQkJICAgICZwaHdpX2NvbnRleHQtPmJlX3dyYnFbaV0pOworCQlpZiAoc3RhdHVzICE9IDApIHsKKwkJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgcGhiYS0+c2hvc3QsCisJCQkJICAgICAid3JicSBjcmVhdGUgZmFpbGVkLiIpOworCQkJcmV0dXJuIHN0YXR1czsKKwkJfQorCQlwaHdpX2N0cmxyLT53cmJfY29udGV4dFtpXS5jaWQgPSBwaHdpX2NvbnRleHQtPmJlX3dyYnFbaV0uaWQ7CisJfQorCWtmcmVlKHB3cmJfYXJyKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZnJlZV93cmJfaGFuZGxlcyhzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEpCit7CisJdW5zaWduZWQgaW50IGluZGV4OworCXN0cnVjdCBod2lfY29udHJvbGxlciAqcGh3aV9jdHJscjsKKwlzdHJ1Y3QgaHdpX3dyYl9jb250ZXh0ICpwd3JiX2NvbnRleHQ7CisKKwlwaHdpX2N0cmxyID0gcGhiYS0+cGh3aV9jdHJscjsKKwlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBwaGJhLT5wYXJhbXMuY3huc19wZXJfY3RybCAqIDI7IGluZGV4ICs9IDIpIHsKKwkJcHdyYl9jb250ZXh0ID0gJnBod2lfY3RybHItPndyYl9jb250ZXh0W2luZGV4XTsKKwkJa2ZyZWUocHdyYl9jb250ZXh0LT5wd3JiX2hhbmRsZV9iYXNlKTsKKwkJa2ZyZWUocHdyYl9jb250ZXh0LT5wd3JiX2hhbmRsZV9iYXNlc3RkKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGh3aV9jbGVhbnVwKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSkKK3sKKwlzdHJ1Y3QgYmVfcXVldWVfaW5mbyAqcTsKKwlzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsID0gJnBoYmEtPmN0cmw7CisJc3RydWN0IGh3aV9jb250cm9sbGVyICpwaHdpX2N0cmxyOworCXN0cnVjdCBod2lfY29udGV4dF9tZW1vcnkgKnBod2lfY29udGV4dDsKKwlpbnQgaTsKKworCXBod2lfY3RybHIgPSBwaGJhLT5waHdpX2N0cmxyOworCXBod2lfY29udGV4dCA9IHBod2lfY3RybHItPnBod2lfY3R4dDsKKwlmb3IgKGkgPSAwOyBpIDwgcGhiYS0+cGFyYW1zLmN4bnNfcGVyX2N0cmw7IGkrKykgeworCQlxID0gJnBod2lfY29udGV4dC0+YmVfd3JicVtpXTsKKwkJaWYgKHEtPmNyZWF0ZWQpCisJCQliZWlzY3NpX2NtZF9xX2Rlc3Ryb3koY3RybCwgcSwgUVRZUEVfV1JCUSk7CisJfQorCisJZnJlZV93cmJfaGFuZGxlcyhwaGJhKTsKKworCXEgPSAmcGh3aV9jb250ZXh0LT5iZV9kZWZfaGRycTsKKwlpZiAocS0+Y3JlYXRlZCkKKwkJYmVpc2NzaV9jbWRfcV9kZXN0cm95KGN0cmwsIHEsIFFUWVBFX0RQRFVRKTsKKworCXEgPSAmcGh3aV9jb250ZXh0LT5iZV9kZWZfZGF0YXE7CisJaWYgKHEtPmNyZWF0ZWQpCisJCWJlaXNjc2lfY21kX3FfZGVzdHJveShjdHJsLCBxLCBRVFlQRV9EUERVUSk7CisKKwliZWlzY3NpX2NtZF9xX2Rlc3Ryb3koY3RybCwgTlVMTCwgUVRZUEVfU0dMKTsKKworCXEgPSAmcGh3aV9jb250ZXh0LT5iZV9jcTsKKwlpZiAocS0+Y3JlYXRlZCkKKwkJYmVpc2NzaV9jbWRfcV9kZXN0cm95KGN0cmwsIHEsIFFUWVBFX0NRKTsKKworCXEgPSAmcGh3aV9jb250ZXh0LT5iZV9lcS5xOworCWlmIChxLT5jcmVhdGVkKQorCQliZWlzY3NpX2NtZF9xX2Rlc3Ryb3koY3RybCwgcSwgUVRZUEVfRVEpOworfQorCitzdGF0aWMgaW50IGh3aV9pbml0X3BvcnQoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhKQoreworCXN0cnVjdCBod2lfY29udHJvbGxlciAqcGh3aV9jdHJscjsKKwlzdHJ1Y3QgaHdpX2NvbnRleHRfbWVtb3J5ICpwaHdpX2NvbnRleHQ7CisJdW5zaWduZWQgaW50IGRlZl9wZHVfcmluZ19zejsKKwlzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsID0gJnBoYmEtPmN0cmw7CisJaW50IHN0YXR1czsKKworCWRlZl9wZHVfcmluZ19zeiA9CisJCXBoYmEtPnBhcmFtcy5hc3luY3BkdXNfcGVyX2N0cmwgKiBzaXplb2Yoc3RydWN0IHBoeXNfYWRkcik7CisJcGh3aV9jdHJsciA9IHBoYmEtPnBod2lfY3RybHI7CisKKwlwaHdpX2NvbnRleHQgPSBwaHdpX2N0cmxyLT5waHdpX2N0eHQ7CisJcGh3aV9jb250ZXh0LT5iZV9lcS5tYXhfZXFkID0gMDsKKwlwaHdpX2NvbnRleHQtPmJlX2VxLm1pbl9lcWQgPSAwOworCXBod2lfY29udGV4dC0+YmVfZXEuY3VyX2VxZCA9IDY0OworCXBod2lfY29udGV4dC0+YmVfZXEuZW5hYmxlX2FpYyA9IGZhbHNlOworCWJlX2NtZF9md19pbml0aWFsaXplKCZwaGJhLT5jdHJsKTsKKwlzdGF0dXMgPSBiZWlzY3NpX2NyZWF0ZV9lcShwaGJhLCBwaHdpX2NvbnRleHQpOworCWlmIChzdGF0dXMgIT0gMCkgeworCQlzaG9zdF9wcmludGsoS0VSTl9FUlIsIHBoYmEtPnNob3N0LCAiRVEgbm90IGNyZWF0ZWQgXG4iKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlzdGF0dXMgPSBtZ210X2NoZWNrX3N1cHBvcnRlZF9mdyhjdHJsKTsKKwlpZiAoc3RhdHVzICE9IDApIHsKKwkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCBwaGJhLT5zaG9zdCwKKwkJCSAgICAgIlVuc3VwcG9ydGVkIGZ3IHZlcnNpb24gXG4iKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlzdGF0dXMgPSBtZ210X2dldF9md19jb25maWcoY3RybCwgcGhiYSk7CisJaWYgKHN0YXR1cyAhPSAwKSB7CisJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgcGhiYS0+c2hvc3QsCisJCQkgICAgICJFcnJvciBnZXR0aW5nIGZ3IGNvbmZpZ1xuIik7CisJCWdvdG8gZXJyb3I7CisJfQorCisJc3RhdHVzID0gYmVpc2NzaV9jcmVhdGVfY3EocGhiYSwgcGh3aV9jb250ZXh0KTsKKwlpZiAoc3RhdHVzICE9IDApIHsKKwkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCBwaGJhLT5zaG9zdCwgIkNRIG5vdCBjcmVhdGVkXG4iKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlzdGF0dXMgPSBiZWlzY3NpX2NyZWF0ZV9kZWZfaGRyKHBoYmEsIHBod2lfY29udGV4dCwgcGh3aV9jdHJsciwKKwkJCQkJZGVmX3BkdV9yaW5nX3N6KTsKKwlpZiAoc3RhdHVzICE9IDApIHsKKwkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCBwaGJhLT5zaG9zdCwKKwkJCSAgICAgIkRlZmF1bHQgSGVhZGVyIG5vdCBjcmVhdGVkXG4iKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlzdGF0dXMgPSBiZWlzY3NpX2NyZWF0ZV9kZWZfZGF0YShwaGJhLCBwaHdpX2NvbnRleHQsCisJCQkJCSBwaHdpX2N0cmxyLCBkZWZfcGR1X3Jpbmdfc3opOworCWlmIChzdGF0dXMgIT0gMCkgeworCQlzaG9zdF9wcmludGsoS0VSTl9FUlIsIHBoYmEtPnNob3N0LAorCQkJICAgICAiRGVmYXVsdCBEYXRhIG5vdCBjcmVhdGVkXG4iKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlzdGF0dXMgPSBiZWlzY3NpX3Bvc3RfcGFnZXMocGhiYSk7CisJaWYgKHN0YXR1cyAhPSAwKSB7CisJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgcGhiYS0+c2hvc3QsICJQb3N0IFNHTCBQYWdlcyBGYWlsZWRcbiIpOworCQlnb3RvIGVycm9yOworCX0KKworCXN0YXR1cyA9IGJlaXNjc2lfY3JlYXRlX3dyYl9yaW5ncyhwaGJhLAlwaHdpX2NvbnRleHQsIHBod2lfY3RybHIpOworCWlmIChzdGF0dXMgIT0gMCkgeworCQlzaG9zdF9wcmludGsoS0VSTl9FUlIsIHBoYmEtPnNob3N0LAorCQkJICAgICAiV1JCIFJpbmdzIG5vdCBjcmVhdGVkXG4iKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlTRV9ERUJVRyhEQkdfTFZMXzgsICJod2lfaW5pdF9wb3J0IHN1Y2Nlc3NcbiIpOworCXJldHVybiAwOworCitlcnJvcjoKKwlzaG9zdF9wcmludGsoS0VSTl9FUlIsIHBoYmEtPnNob3N0LCAiaHdpX2luaXRfcG9ydCBmYWlsZWQiKTsKKwlod2lfY2xlYW51cChwaGJhKTsKKwlyZXR1cm4gLUVOT01FTTsKK30KKworCitzdGF0aWMgaW50IGh3aV9pbml0X2NvbnRyb2xsZXIoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhKQoreworCXN0cnVjdCBod2lfY29udHJvbGxlciAqcGh3aV9jdHJscjsKKworCXBod2lfY3RybHIgPSBwaGJhLT5waHdpX2N0cmxyOworCWlmICgxID09IHBoYmEtPmluaXRfbWVtW0hXSV9NRU1fQURETl9DT05URVhUXS5udW1fZWxlbWVudHMpIHsKKwkJcGh3aV9jdHJsci0+cGh3aV9jdHh0ID0gKHN0cnVjdCBod2lfY29udGV4dF9tZW1vcnkgKilwaGJhLT4KKwkJICAgIGluaXRfbWVtW0hXSV9NRU1fQURETl9DT05URVhUXS5tZW1fYXJyYXlbMF0udmlydHVhbF9hZGRyZXNzOworCQlTRV9ERUJVRyhEQkdfTFZMXzgsICIgcGh3aV9jdHJsci0+cGh3aV9jdHh0PSVwIFxuIiwKKwkJCSBwaHdpX2N0cmxyLT5waHdpX2N0eHQpOworCX0gZWxzZSB7CisJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgcGhiYS0+c2hvc3QsCisJCQkgICAgICJIV0lfTUVNX0FERE5fQ09OVEVYVCBpcyBtb3JlIHRoYW4gb25lIGVsZW1lbnQuIgorCQkJICAgICAiRmFpbGluZyB0byBsb2FkXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJaXNjc2lfaW5pdF9nbG9iYWxfdGVtcGxhdGVzKHBoYmEpOworCWJlaXNjc2lfaW5pdF93cmJfaGFuZGxlKHBoYmEpOworCWh3aV9pbml0X2FzeW5jX3BkdV9jdHgocGhiYSk7CisJaWYgKGh3aV9pbml0X3BvcnQocGhiYSkgIT0gMCkgeworCQlzaG9zdF9wcmludGsoS0VSTl9FUlIsIHBoYmEtPnNob3N0LAorCQkJICAgICAiaHdpX2luaXRfY29udHJvbGxlciBmYWlsZWRcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGJlaXNjc2lfZnJlZV9tZW0oc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhKQoreworCXN0cnVjdCBiZV9tZW1fZGVzY3JpcHRvciAqbWVtX2Rlc2NyOworCWludCBpLCBqOworCisJbWVtX2Rlc2NyID0gcGhiYS0+aW5pdF9tZW07CisJaSA9IDA7CisJaiA9IDA7CisJZm9yIChpID0gMDsgaSA8IFNFX01FTV9NQVg7IGkrKykgeworCQlmb3IgKGogPSBtZW1fZGVzY3ItPm51bV9lbGVtZW50czsgaiA+IDA7IGotLSkgeworCQkJcGNpX2ZyZWVfY29uc2lzdGVudChwaGJhLT5wY2lkZXYsCisJCQkgIG1lbV9kZXNjci0+bWVtX2FycmF5W2ogLSAxXS5zaXplLAorCQkJICBtZW1fZGVzY3ItPm1lbV9hcnJheVtqIC0gMV0udmlydHVhbF9hZGRyZXNzLAorCQkJICBtZW1fZGVzY3ItPm1lbV9hcnJheVtqIC0gMV0uYnVzX2FkZHJlc3MuCisJCQkJdS5hNjQuYWRkcmVzcyk7CisJCX0KKwkJa2ZyZWUobWVtX2Rlc2NyLT5tZW1fYXJyYXkpOworCQltZW1fZGVzY3IrKzsKKwl9CisJa2ZyZWUocGhiYS0+aW5pdF9tZW0pOworCWtmcmVlKHBoYmEtPnBod2lfY3RybHIpOworfQorCitzdGF0aWMgaW50IGJlaXNjc2lfaW5pdF9jb250cm9sbGVyKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSkKK3sKKwlpbnQgcmV0ID0gLUVOT01FTTsKKworCXJldCA9IGJlaXNjc2lfZ2V0X21lbW9yeShwaGJhKTsKKwlpZiAocmV0IDwgMCkgeworCQlzaG9zdF9wcmludGsoS0VSTl9FUlIsIHBoYmEtPnNob3N0LCAiYmVpc2NzaV9kZXZfcHJvYmUgLSIKKwkJCSAgICAgIkZhaWxlZCBpbiBiZWlzY3NpX2FsbG9jX21lbW9yeSBcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IGh3aV9pbml0X2NvbnRyb2xsZXIocGhiYSk7CisJaWYgKHJldCkKKwkJZ290byBmcmVlX2luaXQ7CisJU0VfREVCVUcoREJHX0xWTF84LCAiUmV0dXJuIHN1Y2Nlc3MgZnJvbSBiZWlzY3NpX2luaXRfY29udHJvbGxlciIpOworCXJldHVybiAwOworCitmcmVlX2luaXQ6CisJYmVpc2NzaV9mcmVlX21lbShwaGJhKTsKKwlyZXR1cm4gLUVOT01FTTsKK30KKworc3RhdGljIGludCBiZWlzY3NpX2luaXRfc2dsX2hhbmRsZShzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEpCit7CisJc3RydWN0IGJlX21lbV9kZXNjcmlwdG9yICptZW1fZGVzY3Jfc2dsaCwgKm1lbV9kZXNjcl9zZzsKKwlzdHJ1Y3Qgc2dsX2hhbmRsZSAqcHNnbF9oYW5kbGU7CisJc3RydWN0IGlzY3NpX3NnZSAqcGZyYWc7CisJdW5zaWduZWQgaW50IGFycl9pbmRleCwgaSwgaWR4OworCisJcGhiYS0+aW9fc2dsX2huZGxfYXZibCA9IDA7CisJcGhiYS0+ZWhfc2dsX2huZGxfYXZibCA9IDA7CisJbWVtX2Rlc2NyX3NnbGggPSBwaGJhLT5pbml0X21lbTsKKwltZW1fZGVzY3Jfc2dsaCArPSBIV0lfTUVNX1NHTEg7CisJaWYgKDEgPT0gbWVtX2Rlc2NyX3NnbGgtPm51bV9lbGVtZW50cykgeworCQlwaGJhLT5pb19zZ2xfaG5kbF9iYXNlID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHNnbF9oYW5kbGUgKikgKgorCQkJCQkJIHBoYmEtPnBhcmFtcy5pb3NfcGVyX2N0cmwsCisJCQkJCQkgR0ZQX0tFUk5FTCk7CisJCWlmICghcGhiYS0+aW9fc2dsX2huZGxfYmFzZSkgeworCQkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCBwaGJhLT5zaG9zdCwKKwkJCQkgICAgICJNZW0gQWxsb2MgRmFpbGVkLiBGYWlsaW5nIHRvIGxvYWRcbiIpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwkJcGhiYS0+ZWhfc2dsX2huZGxfYmFzZSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzZ2xfaGFuZGxlICopICoKKwkJCQkJCSAocGhiYS0+cGFyYW1zLmljZHNfcGVyX2N0cmwgLQorCQkJCQkJIHBoYmEtPnBhcmFtcy5pb3NfcGVyX2N0cmwpLAorCQkJCQkJIEdGUF9LRVJORUwpOworCQlpZiAoIXBoYmEtPmVoX3NnbF9obmRsX2Jhc2UpIHsKKwkJCWtmcmVlKHBoYmEtPmlvX3NnbF9obmRsX2Jhc2UpOworCQkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCBwaGJhLT5zaG9zdCwKKwkJCQkgICAgICJNZW0gQWxsb2MgRmFpbGVkLiBGYWlsaW5nIHRvIGxvYWRcbiIpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwl9IGVsc2UgeworCQlzaG9zdF9wcmludGsoS0VSTl9FUlIsIHBoYmEtPnNob3N0LAorCQkJICAgICAiSFdJX01FTV9TR0xIIGlzIG1vcmUgdGhhbiBvbmUgZWxlbWVudC4iCisJCQkgICAgICJGYWlsaW5nIHRvIGxvYWRcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlhcnJfaW5kZXggPSAwOworCWlkeCA9IDA7CisJd2hpbGUgKGlkeCA8IG1lbV9kZXNjcl9zZ2xoLT5udW1fZWxlbWVudHMpIHsKKwkJcHNnbF9oYW5kbGUgPSBtZW1fZGVzY3Jfc2dsaC0+bWVtX2FycmF5W2lkeF0udmlydHVhbF9hZGRyZXNzOworCisJCWZvciAoaSA9IDA7IGkgPCAobWVtX2Rlc2NyX3NnbGgtPm1lbV9hcnJheVtpZHhdLnNpemUgLworCQkgICAgICBzaXplb2Yoc3RydWN0IHNnbF9oYW5kbGUpKTsgaSsrKSB7CisJCQlpZiAoYXJyX2luZGV4IDwgcGhiYS0+cGFyYW1zLmlvc19wZXJfY3RybCkgeworCQkJCXBoYmEtPmlvX3NnbF9obmRsX2Jhc2VbYXJyX2luZGV4XSA9IHBzZ2xfaGFuZGxlOworCQkJCXBoYmEtPmlvX3NnbF9obmRsX2F2YmwrKzsKKwkJCQlhcnJfaW5kZXgrKzsKKwkJCX0gZWxzZSB7CisJCQkJcGhiYS0+ZWhfc2dsX2huZGxfYmFzZVthcnJfaW5kZXggLQorCQkJCQlwaGJhLT5wYXJhbXMuaW9zX3Blcl9jdHJsXSA9CisJCQkJCQkJCXBzZ2xfaGFuZGxlOworCQkJCWFycl9pbmRleCsrOworCQkJCXBoYmEtPmVoX3NnbF9obmRsX2F2YmwrKzsKKwkJCX0KKwkJCXBzZ2xfaGFuZGxlKys7CisJCX0KKwkJaWR4Kys7CisJfQorCVNFX0RFQlVHKERCR19MVkxfOCwKKwkJICJwaGJhLT5pb19zZ2xfaG5kbF9hdmJsPSVkIgorCQkgInBoYmEtPmVoX3NnbF9obmRsX2F2Ymw9JWQgXG4iLAorCQkgcGhiYS0+aW9fc2dsX2huZGxfYXZibCwKKwkJIHBoYmEtPmVoX3NnbF9obmRsX2F2YmwpOworCW1lbV9kZXNjcl9zZyA9IHBoYmEtPmluaXRfbWVtOworCW1lbV9kZXNjcl9zZyArPSBIV0lfTUVNX1NHRTsKKwlTRV9ERUJVRyhEQkdfTFZMXzgsICJcbiBtZW1fZGVzY3Jfc2ctPm51bV9lbGVtZW50cz0lZCBcbiIsCisJCSBtZW1fZGVzY3Jfc2ctPm51bV9lbGVtZW50cyk7CisJYXJyX2luZGV4ID0gMDsKKwlpZHggPSAwOworCXdoaWxlIChpZHggPCBtZW1fZGVzY3Jfc2ctPm51bV9lbGVtZW50cykgeworCQlwZnJhZyA9IG1lbV9kZXNjcl9zZy0+bWVtX2FycmF5W2lkeF0udmlydHVhbF9hZGRyZXNzOworCisJCWZvciAoaSA9IDA7CisJCSAgICAgaSA8IChtZW1fZGVzY3Jfc2ctPm1lbV9hcnJheVtpZHhdLnNpemUpIC8KKwkJICAgICAoc2l6ZW9mKHN0cnVjdCBpc2NzaV9zZ2UpICogcGhiYS0+cGFyYW1zLm51bV9zZ2VfcGVyX2lvKTsKKwkJICAgICBpKyspIHsKKwkJCWlmIChhcnJfaW5kZXggPCBwaGJhLT5wYXJhbXMuaW9zX3Blcl9jdHJsKQorCQkJCXBzZ2xfaGFuZGxlID0gcGhiYS0+aW9fc2dsX2huZGxfYmFzZVthcnJfaW5kZXhdOworCQkJZWxzZQorCQkJCXBzZ2xfaGFuZGxlID0gcGhiYS0+ZWhfc2dsX2huZGxfYmFzZVthcnJfaW5kZXggLQorCQkJCQkJcGhiYS0+cGFyYW1zLmlvc19wZXJfY3RybF07CisJCQlwc2dsX2hhbmRsZS0+cGZyYWcgPSBwZnJhZzsKKwkJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfc2dlLCBhZGRyX2hpLCBwZnJhZywgMCk7CisJCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3NnZSwgYWRkcl9sbywgcGZyYWcsIDApOworCQkJcGZyYWcgKz0gcGhiYS0+cGFyYW1zLm51bV9zZ2VfcGVyX2lvOworCQkJcHNnbF9oYW5kbGUtPnNnbF9pbmRleCA9CisJCQkJcGhiYS0+ZndfY29uZmlnLmlzY3NpX2NpZF9zdGFydCArIGFycl9pbmRleCsrOworCQl9CisJCWlkeCsrOworCX0KKwlwaGJhLT5pb19zZ2xfZnJlZV9pbmRleCA9IDA7CisJcGhiYS0+aW9fc2dsX2FsbG9jX2luZGV4ID0gMDsKKwlwaGJhLT5laF9zZ2xfZnJlZV9pbmRleCA9IDA7CisJcGhiYS0+ZWhfc2dsX2FsbG9jX2luZGV4ID0gMDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBoYmFfc2V0dXBfY2lkX3RibHMoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhKQoreworCWludCBpLCBuZXdfY2lkOworCisJcGhiYS0+Y2lkX2FycmF5ID0ga21hbGxvYyhzaXplb2Yodm9pZCAqKSAqIHBoYmEtPnBhcmFtcy5jeG5zX3Blcl9jdHJsLAorCQkJCSAgR0ZQX0tFUk5FTCk7CisJaWYgKCFwaGJhLT5jaWRfYXJyYXkpIHsKKwkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCBwaGJhLT5zaG9zdCwKKwkJCSAgICAgIkZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkgaW4gIgorCQkJICAgICAiaGJhX3NldHVwX2NpZF90YmxzXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCXBoYmEtPmVwX2FycmF5ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGlzY3NpX2VuZHBvaW50ICopICoKKwkJCQkgcGhiYS0+cGFyYW1zLmN4bnNfcGVyX2N0cmwgKiAyLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBoYmEtPmVwX2FycmF5KSB7CisJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgcGhiYS0+c2hvc3QsCisJCQkgICAgICJGYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5IGluICIKKwkJCSAgICAgImhiYV9zZXR1cF9jaWRfdGJscyBcbiIpOworCQlrZnJlZShwaGJhLT5jaWRfYXJyYXkpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJbmV3X2NpZCA9IHBoYmEtPmZ3X2NvbmZpZy5pc2NzaV9pY2Rfc3RhcnQ7CisJZm9yIChpID0gMDsgaSA8IHBoYmEtPnBhcmFtcy5jeG5zX3Blcl9jdHJsOyBpKyspIHsKKwkJcGhiYS0+Y2lkX2FycmF5W2ldID0gbmV3X2NpZDsKKwkJbmV3X2NpZCArPSAyOworCX0KKwlwaGJhLT5hdmxibF9jaWRzID0gcGhiYS0+cGFyYW1zLmN4bnNfcGVyX2N0cmw7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGh3aV9lbmFibGVfaW50cihzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEpCit7CisJc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCA9ICZwaGJhLT5jdHJsOworCXN0cnVjdCBod2lfY29udHJvbGxlciAqcGh3aV9jdHJscjsKKwlzdHJ1Y3QgaHdpX2NvbnRleHRfbWVtb3J5ICpwaHdpX2NvbnRleHQ7CisJc3RydWN0IGJlX3F1ZXVlX2luZm8gKmVxOworCXU4IF9faW9tZW0gKmFkZHI7CisJdTMyIHJlZzsKKwl1MzIgZW5hYmxlZDsKKworCXBod2lfY3RybHIgPSBwaGJhLT5waHdpX2N0cmxyOworCXBod2lfY29udGV4dCA9IHBod2lfY3RybHItPnBod2lfY3R4dDsKKworCWVxID0gJnBod2lfY29udGV4dC0+YmVfZXEucTsKKwlhZGRyID0gKHU4IF9faW9tZW0gKikgKCh1OCBfX2lvbWVtICopIGN0cmwtPnBjaWNmZyArCisJCQlQQ0lDRkdfTUVNQkFSX0NUUkxfSU5UX0NUUkxfT0ZGU0VUKTsKKwlyZWcgPSBpb3JlYWQzMihhZGRyKTsKKwlTRV9ERUJVRyhEQkdfTFZMXzgsICJyZWcgPXglMDh4IFxuIiwgcmVnKTsKKworCWVuYWJsZWQgPSByZWcgJiBNRU1CQVJfQ1RSTF9JTlRfQ1RSTF9IT1NUSU5UUl9NQVNLOworCWlmICghZW5hYmxlZCkgeworCQlyZWcgfD0gTUVNQkFSX0NUUkxfSU5UX0NUUkxfSE9TVElOVFJfTUFTSzsKKwkJU0VfREVCVUcoREJHX0xWTF84LCAicmVnID14JTA4eCBhZGRyPSVwIFxuIiwgcmVnLCBhZGRyKTsKKwkJaW93cml0ZTMyKHJlZywgYWRkcik7CisJCVNFX0RFQlVHKERCR19MVkxfOCwgImVxLT5pZD0lZCBcbiIsIGVxLT5pZCk7CisKKwkJaHdpX3JpbmdfZXFfZGIocGhiYSwgZXEtPmlkLCAwLCAwLCAxLCAxKTsKKwl9IGVsc2UKKwkJc2hvc3RfcHJpbnRrKEtFUk5fV0FSTklORywgcGhiYS0+c2hvc3QsCisJCQkgICAgICJJbiBod2lfZW5hYmxlX2ludHIsIE5vdCBFbmFibGVkIFxuIik7CisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyB2b2lkIGh3aV9kaXNhYmxlX2ludHIoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhKQoreworCXN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwgPSAmcGhiYS0+Y3RybDsKKworCXU4IF9faW9tZW0gKmFkZHIgPSBjdHJsLT5wY2ljZmcgKyBQQ0lDRkdfTUVNQkFSX0NUUkxfSU5UX0NUUkxfT0ZGU0VUOworCXUzMiByZWcgPSBpb3JlYWQzMihhZGRyKTsKKworCXUzMiBlbmFibGVkID0gcmVnICYgTUVNQkFSX0NUUkxfSU5UX0NUUkxfSE9TVElOVFJfTUFTSzsKKwlpZiAoZW5hYmxlZCkgeworCQlyZWcgJj0gfk1FTUJBUl9DVFJMX0lOVF9DVFJMX0hPU1RJTlRSX01BU0s7CisJCWlvd3JpdGUzMihyZWcsIGFkZHIpOworCX0gZWxzZQorCQlzaG9zdF9wcmludGsoS0VSTl9XQVJOSU5HLCBwaGJhLT5zaG9zdCwKKwkJCSAgICAgIkluIGh3aV9kaXNhYmxlX2ludHIsIEFscmVhZHkgRGlzYWJsZWQgXG4iKTsKK30KKworc3RhdGljIGludCBiZWlzY3NpX2luaXRfcG9ydChzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEpCit7CisJaW50IHJldDsKKworCXJldCA9IGJlaXNjc2lfaW5pdF9jb250cm9sbGVyKHBoYmEpOworCWlmIChyZXQgPCAwKSB7CisJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgcGhiYS0+c2hvc3QsCisJCQkgICAgICJiZWlzY3NpX2Rldl9wcm9iZSAtIEZhaWxlZCBpbiIKKwkJCSAgICAgImJlaXNjc2lfaW5pdF9jb250cm9sbGVyIFxuIik7CisJCXJldHVybiByZXQ7CisJfQorCXJldCA9IGJlaXNjc2lfaW5pdF9zZ2xfaGFuZGxlKHBoYmEpOworCWlmIChyZXQgPCAwKSB7CisJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgcGhiYS0+c2hvc3QsCisJCQkgICAgICJiZWlzY3NpX2Rldl9wcm9iZSAtIEZhaWxlZCBpbiIKKwkJCSAgICAgImJlaXNjc2lfaW5pdF9zZ2xfaGFuZGxlIFxuIik7CisJCWdvdG8gZG9fY2xlYW51cF9jdHJscjsKKwl9CisKKwlpZiAoaGJhX3NldHVwX2NpZF90YmxzKHBoYmEpKSB7CisJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgcGhiYS0+c2hvc3QsCisJCQkgICAgICJGYWlsZWQgaW4gaGJhX3NldHVwX2NpZF90YmxzXG4iKTsKKwkJa2ZyZWUocGhiYS0+aW9fc2dsX2huZGxfYmFzZSk7CisJCWtmcmVlKHBoYmEtPmVoX3NnbF9obmRsX2Jhc2UpOworCQlnb3RvIGRvX2NsZWFudXBfY3RybHI7CisJfQorCisJcmV0dXJuIHJldDsKKworZG9fY2xlYW51cF9jdHJscjoKKwlod2lfY2xlYW51cChwaGJhKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBod2lfcHVyZ2VfZXEoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhKQoreworCXN0cnVjdCBod2lfY29udHJvbGxlciAqcGh3aV9jdHJscjsKKwlzdHJ1Y3QgaHdpX2NvbnRleHRfbWVtb3J5ICpwaHdpX2NvbnRleHQ7CisJc3RydWN0IGJlX3F1ZXVlX2luZm8gKmVxOworCXN0cnVjdCBiZV9lcV9lbnRyeSAqZXFlID0gTlVMTDsKKworCXBod2lfY3RybHIgPSBwaGJhLT5waHdpX2N0cmxyOworCXBod2lfY29udGV4dCA9IHBod2lfY3RybHItPnBod2lfY3R4dDsKKwllcSA9ICZwaHdpX2NvbnRleHQtPmJlX2VxLnE7CisJZXFlID0gcXVldWVfdGFpbF9ub2RlKGVxKTsKKworCXdoaWxlIChlcWUtPmR3W29mZnNldG9mKHN0cnVjdCBhbWFwX2VxX2VudHJ5LCB2YWxpZCkgLyAzMl0KKwkJCQkJCSYgRVFFX1ZBTElEX01BU0spIHsKKwkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9lcV9lbnRyeSwgdmFsaWQsIGVxZSwgMCk7CisJCXF1ZXVlX3RhaWxfaW5jKGVxKTsKKwkJZXFlID0gcXVldWVfdGFpbF9ub2RlKGVxKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGJlaXNjc2lfY2xlYW5fcG9ydChzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEpCit7CisJdW5zaWduZWQgY2hhciBtZ210X3N0YXR1czsKKworCW1nbXRfc3RhdHVzID0gbWdtdF9lcGZ3X2NsZWFudXAocGhiYSwgQ01EX0NPTk5FQ1RJT05fQ0hVVEVfMCk7CisJaWYgKG1nbXRfc3RhdHVzKQorCQlzaG9zdF9wcmludGsoS0VSTl9XQVJOSU5HLCBwaGJhLT5zaG9zdCwKKwkJCSAgICAgIm1nbXRfZXBmd19jbGVhbnVwIEZBSUxFRCBcbiIpOworCWh3aV9jbGVhbnVwKHBoYmEpOworCWh3aV9wdXJnZV9lcShwaGJhKTsKKwlrZnJlZShwaGJhLT5pb19zZ2xfaG5kbF9iYXNlKTsKKwlrZnJlZShwaGJhLT5laF9zZ2xfaG5kbF9iYXNlKTsKKwlrZnJlZShwaGJhLT5jaWRfYXJyYXkpOworCWtmcmVlKHBoYmEtPmVwX2FycmF5KTsKK30KKwordm9pZAorYmVpc2NzaV9vZmZsb2FkX2Nvbm5lY3Rpb24oc3RydWN0IGJlaXNjc2lfY29ubiAqYmVpc2NzaV9jb25uLAorCQkJICAgc3RydWN0IGJlaXNjc2lfb2ZmbG9hZF9wYXJhbXMgKnBhcmFtcykKK3sKKwlzdHJ1Y3Qgd3JiX2hhbmRsZSAqcHdyYl9oYW5kbGU7CisJc3RydWN0IGlzY3NpX3RhcmdldF9jb250ZXh0X3VwZGF0ZV93cmIgKnB3cmIgPSBOVUxMOworCXN0cnVjdCBiZV9tZW1fZGVzY3JpcHRvciAqbWVtX2Rlc2NyOworCXN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSA9IGJlaXNjc2lfY29ubi0+cGhiYTsKKwl1MzIgZG9vcmJlbGwgPSAwOworCisJLyoKKwkgKiBXZSBjYW4gYWx3YXlzIHVzZSAwIGhlcmUgYmVjYXVzZSBpdCBpcyByZXNlcnZlZCBieSBsaWJpc2NzaSBmb3IKKwkgKiBsb2dpbi9zdGFydHVwIHJlbGF0ZWQgdGFza3MuCisJICovCisJcHdyYl9oYW5kbGUgPSBhbGxvY193cmJfaGFuZGxlKHBoYmEsIGJlaXNjc2lfY29ubi0+YmVpc2NzaV9jb25uX2NpZCwgMCk7CisJcHdyYiA9IChzdHJ1Y3QgaXNjc2lfdGFyZ2V0X2NvbnRleHRfdXBkYXRlX3dyYiAqKXB3cmJfaGFuZGxlLT5wd3JiOworCW1lbXNldChwd3JiLCAwLCBzaXplb2YoKnB3cmIpKTsKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3RhcmdldF9jb250ZXh0X3VwZGF0ZV93cmIsCisJCSAgICAgIG1heF9idXJzdF9sZW5ndGgsIHB3cmIsIHBhcmFtcy0+ZHdbb2Zmc2V0b2YKKwkJICAgICAgKHN0cnVjdCBhbWFwX2JlaXNjc2lfb2ZmbG9hZF9wYXJhbXMsCisJCSAgICAgIG1heF9idXJzdF9sZW5ndGgpIC8gMzJdKTsKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3RhcmdldF9jb250ZXh0X3VwZGF0ZV93cmIsCisJCSAgICAgIG1heF9zZW5kX2RhdGFfc2VnbWVudF9sZW5ndGgsIHB3cmIsCisJCSAgICAgIHBhcmFtcy0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfYmVpc2NzaV9vZmZsb2FkX3BhcmFtcywKKwkJICAgICAgbWF4X3NlbmRfZGF0YV9zZWdtZW50X2xlbmd0aCkgLyAzMl0pOworCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfdGFyZ2V0X2NvbnRleHRfdXBkYXRlX3dyYiwKKwkJICAgICAgZmlyc3RfYnVyc3RfbGVuZ3RoLAorCQkgICAgICBwd3JiLAorCQkgICAgICBwYXJhbXMtPmR3W29mZnNldG9mKHN0cnVjdCBhbWFwX2JlaXNjc2lfb2ZmbG9hZF9wYXJhbXMsCisJCSAgICAgIGZpcnN0X2J1cnN0X2xlbmd0aCkgLyAzMl0pOworCisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV90YXJnZXRfY29udGV4dF91cGRhdGVfd3JiLCBlcmwsIHB3cmIsCisJCSAgICAgIChwYXJhbXMtPmR3W29mZnNldG9mKHN0cnVjdCBhbWFwX2JlaXNjc2lfb2ZmbG9hZF9wYXJhbXMsCisJCSAgICAgIGVybCkgLyAzMl0gJiBPRkZMRF9QQVJBTVNfRVJMKSk7CisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV90YXJnZXRfY29udGV4dF91cGRhdGVfd3JiLCBkZGUsIHB3cmIsCisJCSAgICAgIChwYXJhbXMtPmR3W29mZnNldG9mKHN0cnVjdCBhbWFwX2JlaXNjc2lfb2ZmbG9hZF9wYXJhbXMsCisJCSAgICAgIGRkZSkgLyAzMl0gJiBPRkZMRF9QQVJBTVNfRERFKSA+PiAyKTsKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3RhcmdldF9jb250ZXh0X3VwZGF0ZV93cmIsIGhkZSwgcHdyYiwKKwkJICAgICAgKHBhcmFtcy0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfYmVpc2NzaV9vZmZsb2FkX3BhcmFtcywKKwkJICAgICAgaGRlKSAvIDMyXSAmIE9GRkxEX1BBUkFNU19IREUpID4+IDMpOworCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfdGFyZ2V0X2NvbnRleHRfdXBkYXRlX3dyYiwgaXIydCwgcHdyYiwKKwkJICAgICAgKHBhcmFtcy0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfYmVpc2NzaV9vZmZsb2FkX3BhcmFtcywKKwkJICAgICAgaXIydCkgLyAzMl0gJiBPRkZMRF9QQVJBTVNfSVIyVCkgPj4gNCk7CisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV90YXJnZXRfY29udGV4dF91cGRhdGVfd3JiLCBpbWQsIHB3cmIsCisJCSAgICAgIChwYXJhbXMtPmR3W29mZnNldG9mKHN0cnVjdCBhbWFwX2JlaXNjc2lfb2ZmbG9hZF9wYXJhbXMsCisJCSAgICAgICBpbWQpIC8gMzJdICYgT0ZGTERfUEFSQU1TX0lNRCkgPj4gNSk7CisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV90YXJnZXRfY29udGV4dF91cGRhdGVfd3JiLCBzdGF0X3NuLAorCQkgICAgICBwd3JiLAorCQkgICAgICAocGFyYW1zLT5kd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9iZWlzY3NpX29mZmxvYWRfcGFyYW1zLAorCQkgICAgICBleHBfc3RhdHNuKSAvIDMyXSArIDEpKTsKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3RhcmdldF9jb250ZXh0X3VwZGF0ZV93cmIsIHR5cGUsIHB3cmIsCisJCSAgICAgIDB4Nyk7CisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV90YXJnZXRfY29udGV4dF91cGRhdGVfd3JiLCB3cmJfaWR4LAorCQkgICAgICBwd3JiLCBwd3JiX2hhbmRsZS0+d3JiX2luZGV4KTsKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3RhcmdldF9jb250ZXh0X3VwZGF0ZV93cmIsIHB0cjJuZXh0d3JiLAorCQkgICAgICBwd3JiLCBwd3JiX2hhbmRsZS0+bnh0X3dyYl9pbmRleCk7CisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV90YXJnZXRfY29udGV4dF91cGRhdGVfd3JiLAorCQkJc2Vzc2lvbl9zdGF0ZSwgcHdyYiwgMCk7CisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV90YXJnZXRfY29udGV4dF91cGRhdGVfd3JiLCBjb21wbHRvbmFjaywKKwkJICAgICAgcHdyYiwgMSk7CisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV90YXJnZXRfY29udGV4dF91cGRhdGVfd3JiLCBub3RwcmVkYmxxLAorCQkgICAgICBwd3JiLCAwKTsKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3RhcmdldF9jb250ZXh0X3VwZGF0ZV93cmIsIG1vZGUsIHB3cmIsCisJCSAgICAgIDApOworCisJbWVtX2Rlc2NyID0gcGhiYS0+aW5pdF9tZW07CisJbWVtX2Rlc2NyICs9IElTQ1NJX01FTV9HTE9CQUxfSEVBREVSOworCisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV90YXJnZXRfY29udGV4dF91cGRhdGVfd3JiLAorCQkJcGFkX2J1ZmZlcl9hZGRyX2hpLCBwd3JiLAorCQkgICAgICBtZW1fZGVzY3ItPm1lbV9hcnJheVswXS5idXNfYWRkcmVzcy51LmEzMi5hZGRyZXNzX2hpKTsKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3RhcmdldF9jb250ZXh0X3VwZGF0ZV93cmIsCisJCQlwYWRfYnVmZmVyX2FkZHJfbG8sIHB3cmIsCisJCSAgICAgIG1lbV9kZXNjci0+bWVtX2FycmF5WzBdLmJ1c19hZGRyZXNzLnUuYTMyLmFkZHJlc3NfbG8pOworCisJYmVfZHdzX2xlX3RvX2NwdShwd3JiLCBzaXplb2Yoc3RydWN0IGlzY3NpX3RhcmdldF9jb250ZXh0X3VwZGF0ZV93cmIpKTsKKworCWRvb3JiZWxsIHw9IGJlaXNjc2lfY29ubi0+YmVpc2NzaV9jb25uX2NpZCAmIERCX1dSQl9QT1NUX0NJRF9NQVNLOworCWRvb3JiZWxsIHw9IChwd3JiX2hhbmRsZS0+d3JiX2luZGV4ICYgREJfREVGX1BEVV9XUkJfSU5ERVhfTUFTSykgPDwKKwkJCQkJREJfREVGX1BEVV9XUkJfSU5ERVhfU0hJRlQ7CisJZG9vcmJlbGwgfD0gMSA8PCBEQl9ERUZfUERVX05VTV9QT1NURURfU0hJRlQ7CisKKwlpb3dyaXRlMzIoZG9vcmJlbGwsIHBoYmEtPmRiX3ZhICsgREJfVFhVTFAwX09GRlNFVCk7Cit9CisKK3N0YXRpYyB2b2lkIGJlaXNjc2lfcGFyc2VfcGR1KHN0cnVjdCBpc2NzaV9jb25uICpjb25uLCBpdHRfdCBpdHQsCisJCQkgICAgICBpbnQgKmluZGV4LCBpbnQgKmFnZSkKK3sKKwkqaW5kZXggPSBiZTMyX3RvX2NwdShpdHQpID4+IDE2OworCWlmIChhZ2UpCisJCSphZ2UgPSBjb25uLT5zZXNzaW9uLT5hZ2U7Cit9CisKKy8qKgorICogYmVpc2NzaV9hbGxvY19wZHUgLSBhbGxvY2F0ZXMgcGR1IGFuZCByZWxhdGVkIHJlc291cmNlcworICogQHRhc2s6IGxpYmlzY3NpIHRhc2sKKyAqIEBvcGNvZGU6IG9wY29kZSBvZiBwZHUgZm9yIHRhc2sKKyAqCisgKiBUaGlzIGlzIGNhbGxlZCB3aXRoIHRoZSBzZXNzaW9uIGxvY2sgaGVsZC4gSXQgd2lsbCBhbGxvY2F0ZQorICogdGhlIHdyYiBhbmQgc2dsIGlmIG5lZWRlZCBmb3IgdGhlIGNvbW1hbmQuIEFuZCBpdCB3aWxsIHByZXAKKyAqIHRoZSBwZHUncyBpdHQuIGJlaXNjc2lfcGFyc2VfcGR1IHdpbGwgbGF0ZXIgdHJhbnNsYXRlCisgKiB0aGUgcGR1IGl0dCB0byB0aGUgbGliaXNjc2kgdGFzayBpdHQuCisgKi8KK3N0YXRpYyBpbnQgYmVpc2NzaV9hbGxvY19wZHUoc3RydWN0IGlzY3NpX3Rhc2sgKnRhc2ssIHVpbnQ4X3Qgb3Bjb2RlKQoreworCXN0cnVjdCBiZWlzY3NpX2lvX3Rhc2sgKmlvX3Rhc2sgPSB0YXNrLT5kZF9kYXRhOworCXN0cnVjdCBpc2NzaV9jb25uICpjb25uID0gdGFzay0+Y29ubjsKKwlzdHJ1Y3QgYmVpc2NzaV9jb25uICpiZWlzY3NpX2Nvbm4gPSBjb25uLT5kZF9kYXRhOworCXN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSA9IGJlaXNjc2lfY29ubi0+cGhiYTsKKwlzdHJ1Y3QgaHdpX3dyYl9jb250ZXh0ICpwd3JiX2NvbnRleHQ7CisJc3RydWN0IGh3aV9jb250cm9sbGVyICpwaHdpX2N0cmxyOworCWl0dF90IGl0dDsKKwlzdHJ1Y3QgYmVpc2NzaV9zZXNzaW9uICpiZWlzY3NpX3Nlc3MgPSBiZWlzY3NpX2Nvbm4tPmJlaXNjc2lfc2VzczsKKwlkbWFfYWRkcl90IHBhZGRyOworCisJaW9fdGFzay0+Y21kX2JocyA9IHBjaV9wb29sX2FsbG9jKGJlaXNjc2lfc2Vzcy0+YmhzX3Bvb2wsCisJCQkJCSAgR0ZQX0tFUk5FTCwgJnBhZGRyKTsKKworCWlmICghaW9fdGFzay0+Y21kX2JocykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpb190YXNrLT5iaHNfcGEudS5hNjQuYWRkcmVzcyA9IHBhZGRyOworCWlvX3Rhc2stPnB3cmJfaGFuZGxlID0gYWxsb2Nfd3JiX2hhbmRsZShwaGJhLAorCQkJCQkJYmVpc2NzaV9jb25uLT5iZWlzY3NpX2Nvbm5fY2lkLAorCQkJCQkJdGFzay0+aXR0KTsKKwlpb190YXNrLT5wd3JiX2hhbmRsZS0+cGlvX2hhbmRsZSA9IHRhc2s7CisJaW9fdGFzay0+Y29ubiA9IGJlaXNjc2lfY29ubjsKKworCXRhc2stPmhkciA9IChzdHJ1Y3QgaXNjc2lfaGRyICopJmlvX3Rhc2stPmNtZF9iaHMtPmlzY3NpX2hkcjsKKwl0YXNrLT5oZHJfbWF4ID0gc2l6ZW9mKHN0cnVjdCBiZV9jbWRfYmhzKTsKKworCWlmICh0YXNrLT5zYykgeworCQlzcGluX2xvY2soJnBoYmEtPmlvX3NnbF9sb2NrKTsKKwkJaW9fdGFzay0+cHNnbF9oYW5kbGUgPSBhbGxvY19pb19zZ2xfaGFuZGxlKHBoYmEpOworCQlzcGluX3VubG9jaygmcGhiYS0+aW9fc2dsX2xvY2spOworCQlpZiAoIWlvX3Rhc2stPnBzZ2xfaGFuZGxlKQorCQkJZ290byBmcmVlX2huZGxzOworCisJfSBlbHNlIHsKKwkJaW9fdGFzay0+c2NzaV9jbW5kID0gTlVMTDsKKwkJaWYgKCh0YXNrLT5oZHItPm9wY29kZSAmIElTQ1NJX09QQ09ERV9NQVNLKSA9PSBJU0NTSV9PUF9MT0dJTikgeworCQkJaWYgKCFiZWlzY3NpX2Nvbm4tPmxvZ2luX2luX3Byb2dyZXNzKSB7CisJCQkJc3Bpbl9sb2NrKCZwaGJhLT5tZ210X3NnbF9sb2NrKTsKKwkJCQlpb190YXNrLT5wc2dsX2hhbmRsZSA9IChzdHJ1Y3Qgc2dsX2hhbmRsZSAqKQorCQkJCQkJYWxsb2NfbWdtdF9zZ2xfaGFuZGxlKHBoYmEpOworCQkJCXNwaW5fdW5sb2NrKCZwaGJhLT5tZ210X3NnbF9sb2NrKTsKKwkJCQlpZiAoIWlvX3Rhc2stPnBzZ2xfaGFuZGxlKQorCQkJCQlnb3RvIGZyZWVfaG5kbHM7CisKKwkJCQliZWlzY3NpX2Nvbm4tPmxvZ2luX2luX3Byb2dyZXNzID0gMTsKKwkJCQliZWlzY3NpX2Nvbm4tPnBsb2dpbl9zZ2xfaGFuZGxlID0KKwkJCQkJCQlpb190YXNrLT5wc2dsX2hhbmRsZTsKKwkJCX0gZWxzZSB7CisJCQkJaW9fdGFzay0+cHNnbF9oYW5kbGUgPQorCQkJCQkJYmVpc2NzaV9jb25uLT5wbG9naW5fc2dsX2hhbmRsZTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCXNwaW5fbG9jaygmcGhiYS0+bWdtdF9zZ2xfbG9jayk7CisJCQlpb190YXNrLT5wc2dsX2hhbmRsZSA9IGFsbG9jX21nbXRfc2dsX2hhbmRsZShwaGJhKTsKKwkJCXNwaW5fdW5sb2NrKCZwaGJhLT5tZ210X3NnbF9sb2NrKTsKKwkJCWlmICghaW9fdGFzay0+cHNnbF9oYW5kbGUpCisJCQkJZ290byBmcmVlX2huZGxzOworCQl9CisJfQorCWl0dCA9IChpdHRfdCkgY3B1X3RvX2JlMzIoKCh1bnNpZ25lZCBpbnQpdGFzay0+aXR0IDw8IDE2KSB8CisJCQkodW5zaWduZWQgaW50KShpb190YXNrLT5wc2dsX2hhbmRsZS0+c2dsX2luZGV4KSk7CisJaW9fdGFzay0+Y21kX2Jocy0+aXNjc2lfaGRyLml0dCA9IGl0dDsKKwlyZXR1cm4gMDsKKworZnJlZV9obmRsczoKKwlwaHdpX2N0cmxyID0gcGhiYS0+cGh3aV9jdHJscjsKKwlwd3JiX2NvbnRleHQgPSAmcGh3aV9jdHJsci0+d3JiX2NvbnRleHRbYmVpc2NzaV9jb25uLT5iZWlzY3NpX2Nvbm5fY2lkXTsKKwlmcmVlX3dyYl9oYW5kbGUocGhiYSwgcHdyYl9jb250ZXh0LCBpb190YXNrLT5wd3JiX2hhbmRsZSk7CisJaW9fdGFzay0+cHdyYl9oYW5kbGUgPSBOVUxMOworCXBjaV9wb29sX2ZyZWUoYmVpc2NzaV9zZXNzLT5iaHNfcG9vbCwgaW9fdGFzay0+Y21kX2JocywKKwkJICAgICAgaW9fdGFzay0+YmhzX3BhLnUuYTY0LmFkZHJlc3MpOworCVNFX0RFQlVHKERCR19MVkxfMSwgIkFsbG9jIG9mIFNHTF9JQ0QgRmFpbGVkIFxuIik7CisJcmV0dXJuIC1FTk9NRU07Cit9CisKK3N0YXRpYyB2b2lkIGJlaXNjc2lfY2xlYW51cF90YXNrKHN0cnVjdCBpc2NzaV90YXNrICp0YXNrKQoreworCXN0cnVjdCBiZWlzY3NpX2lvX3Rhc2sgKmlvX3Rhc2sgPSB0YXNrLT5kZF9kYXRhOworCXN0cnVjdCBpc2NzaV9jb25uICpjb25uID0gdGFzay0+Y29ubjsKKwlzdHJ1Y3QgYmVpc2NzaV9jb25uICpiZWlzY3NpX2Nvbm4gPSBjb25uLT5kZF9kYXRhOworCXN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSA9IGJlaXNjc2lfY29ubi0+cGhiYTsKKwlzdHJ1Y3QgYmVpc2NzaV9zZXNzaW9uICpiZWlzY3NpX3Nlc3MgPSBiZWlzY3NpX2Nvbm4tPmJlaXNjc2lfc2VzczsKKwlzdHJ1Y3QgaHdpX3dyYl9jb250ZXh0ICpwd3JiX2NvbnRleHQ7CisJc3RydWN0IGh3aV9jb250cm9sbGVyICpwaHdpX2N0cmxyOworCisJcGh3aV9jdHJsciA9IHBoYmEtPnBod2lfY3RybHI7CisJcHdyYl9jb250ZXh0ID0gJnBod2lfY3RybHItPndyYl9jb250ZXh0W2JlaXNjc2lfY29ubi0+YmVpc2NzaV9jb25uX2NpZF07CisJaWYgKGlvX3Rhc2stPnB3cmJfaGFuZGxlKSB7CisJCWZyZWVfd3JiX2hhbmRsZShwaGJhLCBwd3JiX2NvbnRleHQsIGlvX3Rhc2stPnB3cmJfaGFuZGxlKTsKKwkJaW9fdGFzay0+cHdyYl9oYW5kbGUgPSBOVUxMOworCX0KKworCWlmIChpb190YXNrLT5jbWRfYmhzKSB7CisJCXBjaV9wb29sX2ZyZWUoYmVpc2NzaV9zZXNzLT5iaHNfcG9vbCwgaW9fdGFzay0+Y21kX2JocywKKwkJCSAgICAgIGlvX3Rhc2stPmJoc19wYS51LmE2NC5hZGRyZXNzKTsKKwl9CisKKwlpZiAodGFzay0+c2MpIHsKKwkJaWYgKGlvX3Rhc2stPnBzZ2xfaGFuZGxlKSB7CisJCQlzcGluX2xvY2soJnBoYmEtPmlvX3NnbF9sb2NrKTsKKwkJCWZyZWVfaW9fc2dsX2hhbmRsZShwaGJhLCBpb190YXNrLT5wc2dsX2hhbmRsZSk7CisJCQlzcGluX3VubG9jaygmcGhiYS0+aW9fc2dsX2xvY2spOworCQkJaW9fdGFzay0+cHNnbF9oYW5kbGUgPSBOVUxMOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKCh0YXNrLT5oZHItPm9wY29kZSAmIElTQ1NJX09QQ09ERV9NQVNLKSA9PSBJU0NTSV9PUF9MT0dJTikKKwkJCXJldHVybjsKKwkJaWYgKGlvX3Rhc2stPnBzZ2xfaGFuZGxlKSB7CisJCQlzcGluX2xvY2soJnBoYmEtPm1nbXRfc2dsX2xvY2spOworCQkJZnJlZV9tZ210X3NnbF9oYW5kbGUocGhiYSwgaW9fdGFzay0+cHNnbF9oYW5kbGUpOworCQkJc3Bpbl91bmxvY2soJnBoYmEtPm1nbXRfc2dsX2xvY2spOworCQkJaW9fdGFzay0+cHNnbF9oYW5kbGUgPSBOVUxMOworCQl9CisJfQorfQorCitzdGF0aWMgaW50IGJlaXNjc2lfaW90YXNrKHN0cnVjdCBpc2NzaV90YXNrICp0YXNrLCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLAorCQkJICB1bnNpZ25lZCBpbnQgbnVtX3NnLCB1bnNpZ25lZCBpbnQgeGZlcmxlbiwKKwkJCSAgdW5zaWduZWQgaW50IHdyaXRlZGlyKQoreworCisJc3RydWN0IGJlaXNjc2lfaW9fdGFzayAqaW9fdGFzayA9IHRhc2stPmRkX2RhdGE7CisJc3RydWN0IGlzY3NpX2Nvbm4gKmNvbm4gPSB0YXNrLT5jb25uOworCXN0cnVjdCBiZWlzY3NpX2Nvbm4gKmJlaXNjc2lfY29ubiA9IGNvbm4tPmRkX2RhdGE7CisJc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhID0gYmVpc2NzaV9jb25uLT5waGJhOworCXN0cnVjdCBpc2NzaV93cmIgKnB3cmIgPSBOVUxMOworCXVuc2lnbmVkIGludCBkb29yYmVsbCA9IDA7CisKKwlwd3JiID0gaW9fdGFzay0+cHdyYl9oYW5kbGUtPnB3cmI7CisJaW9fdGFzay0+Y21kX2Jocy0+aXNjc2lfaGRyLmV4cF9zdGF0c24gPSAwOworCWlvX3Rhc2stPmJoc19sZW4gPSBzaXplb2Yoc3RydWN0IGJlX2NtZF9iaHMpOworCisJaWYgKHdyaXRlZGlyKSB7CisJCVNFX0RFQlVHKERCR19MVkxfNCwgIiBXUklURSBDb21tYW5kIFx0Iik7CisJCW1lbXNldCgmaW9fdGFzay0+Y21kX2Jocy0+aXNjc2lfZGF0YV9wZHUsIDAsIDQ4KTsKKwkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9wZHVfZGF0YV9vdXQsIGl0dCwKKwkJCSAgICAgICZpb190YXNrLT5jbWRfYmhzLT5pc2NzaV9kYXRhX3BkdSwKKwkJCSAgICAgICh1bnNpZ25lZCBpbnQpaW9fdGFzay0+Y21kX2Jocy0+aXNjc2lfaGRyLml0dCk7CisJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfcGR1X2RhdGFfb3V0LCBvcGNvZGUsCisJCQkgICAgICAmaW9fdGFzay0+Y21kX2Jocy0+aXNjc2lfZGF0YV9wZHUsCisJCQkgICAgICBJU0NTSV9PUENPREVfU0NTSV9EQVRBX09VVCk7CisJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfcGR1X2RhdGFfb3V0LCBmaW5hbF9iaXQsCisJCQkgICAgICAmaW9fdGFzay0+Y21kX2Jocy0+aXNjc2lfZGF0YV9wZHUsIDEpOworCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgdHlwZSwgcHdyYiwgSU5JX1dSX0NNRCk7CisJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCBkc3AsIHB3cmIsIDEpOworCX0gZWxzZSB7CisJCVNFX0RFQlVHKERCR19MVkxfNCwgIlJFQUQgQ29tbWFuZCBcdCIpOworCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgdHlwZSwgcHdyYiwgSU5JX1JEX0NNRCk7CisJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCBkc3AsIHB3cmIsIDApOworCX0KKwltZW1jcHkoJmlvX3Rhc2stPmNtZF9iaHMtPmlzY3NpX2RhdGFfcGR1LgorCSAgICAgICBkd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9wZHVfZGF0YV9vdXQsIGx1bikgLyAzMl0sCisJICAgICAgIGlvX3Rhc2stPmNtZF9iaHMtPmlzY3NpX2hkci5sdW4sIHNpemVvZihzdHJ1Y3Qgc2NzaV9sdW4pKTsKKworCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCBsdW4sIHB3cmIsCisJCSAgICAgIGNwdV90b19iZTE2KCh1bnNpZ25lZCBzaG9ydClpb190YXNrLT5jbWRfYmhzLT5pc2NzaV9oZHIuCisJCQkJICBsdW5bMF0pKTsKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgcjJ0X2V4cF9kdGwsIHB3cmIsIHhmZXJsZW4pOworCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCB3cmJfaWR4LCBwd3JiLAorCQkgICAgICBpb190YXNrLT5wd3JiX2hhbmRsZS0+d3JiX2luZGV4KTsKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgY21kc25faXR0LCBwd3JiLAorCQkgICAgICBiZTMyX3RvX2NwdSh0YXNrLT5jbWRzbikpOworCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCBzZ2xfaWNkX2lkeCwgcHdyYiwKKwkJICAgICAgaW9fdGFzay0+cHNnbF9oYW5kbGUtPnNnbF9pbmRleCk7CisKKwlod2lfd3JpdGVfc2dsKHB3cmIsIHNnLCBudW1fc2csIGlvX3Rhc2spOworCisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIHB0cjJuZXh0d3JiLCBwd3JiLAorCQkgICAgICBpb190YXNrLT5wd3JiX2hhbmRsZS0+bnh0X3dyYl9pbmRleCk7CisJYmVfZHdzX2xlX3RvX2NwdShwd3JiLCBzaXplb2Yoc3RydWN0IGlzY3NpX3dyYikpOworCisJZG9vcmJlbGwgfD0gYmVpc2NzaV9jb25uLT5iZWlzY3NpX2Nvbm5fY2lkICYgREJfV1JCX1BPU1RfQ0lEX01BU0s7CisJZG9vcmJlbGwgfD0gKGlvX3Rhc2stPnB3cmJfaGFuZGxlLT53cmJfaW5kZXggJgorCQkgICAgIERCX0RFRl9QRFVfV1JCX0lOREVYX01BU0spIDw8IERCX0RFRl9QRFVfV1JCX0lOREVYX1NISUZUOworCWRvb3JiZWxsIHw9IDEgPDwgREJfREVGX1BEVV9OVU1fUE9TVEVEX1NISUZUOworCisJaW93cml0ZTMyKGRvb3JiZWxsLCBwaGJhLT5kYl92YSArIERCX1RYVUxQMF9PRkZTRVQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGJlaXNjc2lfbXRhc2soc3RydWN0IGlzY3NpX3Rhc2sgKnRhc2spCit7CisJc3RydWN0IGJlaXNjc2lfaW9fdGFzayAqYWJvcnRlZF9pb190YXNrLCAqaW9fdGFzayA9IHRhc2stPmRkX2RhdGE7CisJc3RydWN0IGlzY3NpX2Nvbm4gKmNvbm4gPSB0YXNrLT5jb25uOworCXN0cnVjdCBiZWlzY3NpX2Nvbm4gKmJlaXNjc2lfY29ubiA9IGNvbm4tPmRkX2RhdGE7CisJc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhID0gYmVpc2NzaV9jb25uLT5waGJhOworCXN0cnVjdCBpc2NzaV93cmIgKnB3cmIgPSBOVUxMOworCXVuc2lnbmVkIGludCBkb29yYmVsbCA9IDA7CisJc3RydWN0IGlzY3NpX3Rhc2sgKmFib3J0ZWRfdGFzazsKKworCXB3cmIgPSBpb190YXNrLT5wd3JiX2hhbmRsZS0+cHdyYjsKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgY21kc25faXR0LCBwd3JiLAorCQkgICAgICBiZTMyX3RvX2NwdSh0YXNrLT5jbWRzbikpOworCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCB3cmJfaWR4LCBwd3JiLAorCQkgICAgICBpb190YXNrLT5wd3JiX2hhbmRsZS0+d3JiX2luZGV4KTsKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgc2dsX2ljZF9pZHgsIHB3cmIsCisJCSAgICAgIGlvX3Rhc2stPnBzZ2xfaGFuZGxlLT5zZ2xfaW5kZXgpOworCisJc3dpdGNoICh0YXNrLT5oZHItPm9wY29kZSAmIElTQ1NJX09QQ09ERV9NQVNLKSB7CisJY2FzZSBJU0NTSV9PUF9MT0dJTjoKKwkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIHR5cGUsIHB3cmIsIFRHVF9ETV9DTUQpOworCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgZG1zZywgcHdyYiwgMCk7CisJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCBjbWRzbl9pdHQsIHB3cmIsIDEpOworCQlod2lfd3JpdGVfYnVmZmVyKHB3cmIsIHRhc2spOworCQlicmVhazsKKwljYXNlIElTQ1NJX09QX05PT1BfT1VUOgorCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgdHlwZSwgcHdyYiwgSU5JX1JEX0NNRCk7CisJCWh3aV93cml0ZV9idWZmZXIocHdyYiwgdGFzayk7CisJCWJyZWFrOworCWNhc2UgSVNDU0lfT1BfVEVYVDoKKwkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIHR5cGUsIHB3cmIsIElOSV9XUl9DTUQpOworCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgZHNwLCBwd3JiLCAxKTsKKwkJaHdpX3dyaXRlX2J1ZmZlcihwd3JiLCB0YXNrKTsKKwkJYnJlYWs7CisJY2FzZSBJU0NTSV9PUF9TQ1NJX1RNRlVOQzoKKwkJYWJvcnRlZF90YXNrID0gaXNjc2lfaXR0X3RvX3Rhc2soY29ubiwKKwkJCQkJKChzdHJ1Y3QgaXNjc2lfdG0gKil0YXNrLT5oZHIpLT5ydHQpOworCQkgaWYgKCFhYm9ydGVkX3Rhc2spCisJCQlyZXR1cm4gMDsKKwkJYWJvcnRlZF9pb190YXNrID0gYWJvcnRlZF90YXNrLT5kZF9kYXRhOworCQlpZiAoIWFib3J0ZWRfaW9fdGFzay0+c2NzaV9jbW5kKQorCQkJcmV0dXJuIDA7CisKKwkJbWdtdF9pbnZhbGlkYXRlX2ljZHMocGhiYSwKKwkJCQkgICAgIGFib3J0ZWRfaW9fdGFzay0+cHNnbF9oYW5kbGUtPnNnbF9pbmRleCwKKwkJCQkgICAgIGJlaXNjc2lfY29ubi0+YmVpc2NzaV9jb25uX2NpZCk7CisJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCB0eXBlLCBwd3JiLCBJTklfVE1GX0NNRCk7CisJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCBkbXNnLCBwd3JiLCAwKTsKKwkJaHdpX3dyaXRlX2J1ZmZlcihwd3JiLCB0YXNrKTsKKwkJYnJlYWs7CisJY2FzZSBJU0NTSV9PUF9MT0dPVVQ6CisJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCBkbXNnLCBwd3JiLCAwKTsKKwkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIHR5cGUsIHB3cmIsCisJCQkJSFdIX1RZUEVfTE9HT1VUKTsKKwkJaHdpX3dyaXRlX2J1ZmZlcihwd3JiLCB0YXNrKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlTRV9ERUJVRyhEQkdfTFZMXzEsICJvcGNvZGUgPSVkIE5vdCBzdXBwb3J0ZWQgXG4iLAorCQkJIHRhc2stPmhkci0+b3Bjb2RlICYgSVNDU0lfT1BDT0RFX01BU0spOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgcjJ0X2V4cF9kdGwsIHB3cmIsCisJCSAgICAgIGJlMzJfdG9fY3B1KHRhc2stPmRhdGFfY291bnQpKTsKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgcHRyMm5leHR3cmIsIHB3cmIsCisJCSAgICAgIGlvX3Rhc2stPnB3cmJfaGFuZGxlLT5ueHRfd3JiX2luZGV4KTsKKwliZV9kd3NfbGVfdG9fY3B1KHB3cmIsIHNpemVvZihzdHJ1Y3QgaXNjc2lfd3JiKSk7CisKKwlkb29yYmVsbCB8PSBiZWlzY3NpX2Nvbm4tPmJlaXNjc2lfY29ubl9jaWQgJiBEQl9XUkJfUE9TVF9DSURfTUFTSzsKKwlkb29yYmVsbCB8PSAoaW9fdGFzay0+cHdyYl9oYW5kbGUtPndyYl9pbmRleCAmCisJCSAgICAgREJfREVGX1BEVV9XUkJfSU5ERVhfTUFTSykgPDwgREJfREVGX1BEVV9XUkJfSU5ERVhfU0hJRlQ7CisJZG9vcmJlbGwgfD0gMSA8PCBEQl9ERUZfUERVX05VTV9QT1NURURfU0hJRlQ7CisJaW93cml0ZTMyKGRvb3JiZWxsLCBwaGJhLT5kYl92YSArIERCX1RYVUxQMF9PRkZTRVQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGJlaXNjc2lfdGFza194bWl0KHN0cnVjdCBpc2NzaV90YXNrICp0YXNrKQoreworCXN0cnVjdCBpc2NzaV9jb25uICpjb25uID0gdGFzay0+Y29ubjsKKwlzdHJ1Y3QgYmVpc2NzaV9pb190YXNrICppb190YXNrID0gdGFzay0+ZGRfZGF0YTsKKwlzdHJ1Y3Qgc2NzaV9jbW5kICpzYyA9IHRhc2stPnNjOworCXN0cnVjdCBiZWlzY3NpX2Nvbm4gKmJlaXNjc2lfY29ubiA9IGNvbm4tPmRkX2RhdGE7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKKwlpbnQgbnVtX3NnOworCXVuc2lnbmVkIGludCAgd3JpdGVkaXIgPSAwLCB4ZmVybGVuID0gMDsKKworCVNFX0RFQlVHKERCR19MVkxfNCwgIlxuIGNpZD0lZCBJbiBiZWlzY3NpX3Rhc2tfeG1pdCB0YXNrPSVwIGNvbm49JXAgXHQiCisJCSAiYmVpc2NzaV9jb25uPSVwIFxuIiwgYmVpc2NzaV9jb25uLT5iZWlzY3NpX2Nvbm5fY2lkLAorCQkgdGFzaywgY29ubiwgYmVpc2NzaV9jb25uKTsKKwlpZiAoIXNjKQorCQlyZXR1cm4gYmVpc2NzaV9tdGFzayh0YXNrKTsKKworCWlvX3Rhc2stPnNjc2lfY21uZCA9IHNjOworCW51bV9zZyA9IHNjc2lfZG1hX21hcChzYyk7CisJaWYgKG51bV9zZyA8IDApIHsKKwkJU0VfREVCVUcoREJHX0xWTF8xLCAiIHNjc2lfZG1hX21hcCBGYWlsZWRcbiIpCisJCXJldHVybiBudW1fc2c7CisJfQorCVNFX0RFQlVHKERCR19MVkxfNCwgInhmZXJsZW49MHglMDh4IHNjbWQ9JXAgbnVtX3NnPSVkIHNlcm51bT0lbHVcbiIsCisJCSAgKHNjc2lfYnVmZmxlbihzYykpLCBzYywgbnVtX3NnLCBzYy0+c2VyaWFsX251bWJlcik7CisJeGZlcmxlbiA9IHNjc2lfYnVmZmxlbihzYyk7CisJc2cgPSBzY3NpX3NnbGlzdChzYyk7CisJaWYgKHNjLT5zY19kYXRhX2RpcmVjdGlvbiA9PSBETUFfVE9fREVWSUNFKSB7CisJCXdyaXRlZGlyID0gMTsKKwkJU0VfREVCVUcoREJHX0xWTF80LCAidGFzay0+aW1tX2NvdW50PTB4JTA4eCBcbiIsCisJCQkgdGFzay0+aW1tX2NvdW50KTsKKwl9IGVsc2UKKwkJd3JpdGVkaXIgPSAwOworCXJldHVybiBiZWlzY3NpX2lvdGFzayh0YXNrLCBzZywgbnVtX3NnLCB4ZmVybGVuLCB3cml0ZWRpcik7Cit9CisKK3N0YXRpYyB2b2lkIGJlaXNjc2lfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwY2lkZXYpCit7CisJc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhID0gTlVMTDsKKworCXBoYmEgPSAoc3RydWN0IGJlaXNjc2lfaGJhICopcGNpX2dldF9kcnZkYXRhKHBjaWRldik7CisJaWYgKCFwaGJhKSB7CisJCWRldl9lcnIoJnBjaWRldi0+ZGV2LCAiYmVpc2NzaV9yZW1vdmUgY2FsbGVkIHdpdGggbm8gcGhiYSBcbiIpOworCQlyZXR1cm47CisJfQorCisJaHdpX2Rpc2FibGVfaW50cihwaGJhKTsKKwlpZiAocGhiYS0+cGNpZGV2LT5pcnEpCisJCWZyZWVfaXJxKHBoYmEtPnBjaWRldi0+aXJxLCBwaGJhKTsKKwlkZXN0cm95X3dvcmtxdWV1ZShwaGJhLT53cSk7CisJaWYgKGJsa19pb3BvbGxfZW5hYmxlZCkKKwkJYmxrX2lvcG9sbF9kaXNhYmxlKCZwaGJhLT5pb3BvbGwpOworCisJYmVpc2NzaV9jbGVhbl9wb3J0KHBoYmEpOworCWJlaXNjc2lfZnJlZV9tZW0ocGhiYSk7CisJYmVpc2NzaV91bm1hcF9wY2lfZnVuY3Rpb24ocGhiYSk7CisJcGNpX2ZyZWVfY29uc2lzdGVudChwaGJhLT5wY2lkZXYsCisJCQkgICAgcGhiYS0+Y3RybC5tYm94X21lbV9hbGxvY2VkLnNpemUsCisJCQkgICAgcGhiYS0+Y3RybC5tYm94X21lbV9hbGxvY2VkLnZhLAorCQkJICAgIHBoYmEtPmN0cmwubWJveF9tZW1fYWxsb2NlZC5kbWEpOworCWlzY3NpX2hvc3RfcmVtb3ZlKHBoYmEtPnNob3N0KTsKKwlwY2lfZGV2X3B1dChwaGJhLT5wY2lkZXYpOworCWlzY3NpX2hvc3RfZnJlZShwaGJhLT5zaG9zdCk7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IGJlaXNjc2lfZGV2X3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2lkZXYsCisJCQkJY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSA9IE5VTEw7CisJaW50IHJldDsKKworCXJldCA9IGJlaXNjc2lfZW5hYmxlX3BjaShwY2lkZXYpOworCWlmIChyZXQgPCAwKSB7CisJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgcGhiYS0+c2hvc3QsICJiZWlzY3NpX2Rldl9wcm9iZS0iCisJCQkgICAgICJGYWlsZWQgdG8gZW5hYmxlIHBjaSBkZXZpY2UgXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlwaGJhID0gYmVpc2NzaV9oYmFfYWxsb2MocGNpZGV2KTsKKwlpZiAoIXBoYmEpIHsKKwkJZGV2X2VycigmcGNpZGV2LT5kZXYsICJiZWlzY3NpX2Rldl9wcm9iZS0iCisJCQkiIEZhaWxlZCBpbiBiZWlzY3NpX2hiYV9hbGxvYyBcbiIpOworCQlnb3RvIGRpc2FibGVfcGNpOworCX0KKworCXBjaV9zZXRfZHJ2ZGF0YShwY2lkZXYsIHBoYmEpOworCXJldCA9IGJlX2N0cmxfaW5pdChwaGJhLCBwY2lkZXYpOworCWlmIChyZXQpIHsKKwkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCBwaGJhLT5zaG9zdCwgImJlaXNjc2lfZGV2X3Byb2JlLSIKKwkJCQkiRmFpbGVkIGluIGJlX2N0cmxfaW5pdFxuIik7CisJCWdvdG8gaGJhX2ZyZWU7CisJfQorCisJc3Bpbl9sb2NrX2luaXQoJnBoYmEtPmlvX3NnbF9sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmcGhiYS0+bWdtdF9zZ2xfbG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJnBoYmEtPmlzcl9sb2NrKTsKKwliZWlzY3NpX2dldF9wYXJhbXMocGhiYSk7CisJcmV0ID0gYmVpc2NzaV9pbml0X3BvcnQocGhiYSk7CisJaWYgKHJldCA8IDApIHsKKwkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCBwaGJhLT5zaG9zdCwgImJlaXNjc2lfZGV2X3Byb2JlLSIKKwkJCSAgICAgIkZhaWxlZCBpbiBiZWlzY3NpX2luaXRfcG9ydFxuIik7CisJCWdvdG8gZnJlZV9wb3J0OworCX0KKworCXNucHJpbnRmKHBoYmEtPndxX25hbWUsIHNpemVvZihwaGJhLT53cV9uYW1lKSwgImJlaXNjc2lfcV9pcnEldSIsCisJCSBwaGJhLT5zaG9zdC0+aG9zdF9ubyk7CisJcGhiYS0+d3EgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZShwaGJhLT53cV9uYW1lKTsKKwlpZiAoIXBoYmEtPndxKSB7CisJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgcGhiYS0+c2hvc3QsICJiZWlzY3NpX2Rldl9wcm9iZS0iCisJCQkJIkZhaWxlZCB0byBhbGxvY2F0ZSB3b3JrIHF1ZXVlXG4iKTsKKwkJZ290byBmcmVlX3R3cTsKKwl9CisKKwlJTklUX1dPUksoJnBoYmEtPndvcmtfY3FzLCBiZWlzY3NpX3Byb2Nlc3NfYWxsX2Nxcyk7CisKKwlpZiAoYmxrX2lvcG9sbF9lbmFibGVkKSB7CisJCWJsa19pb3BvbGxfaW5pdCgmcGhiYS0+aW9wb2xsLCBiZV9pb3BvbGxfYnVkZ2V0LCBiZV9pb3BvbGwpOworCQlibGtfaW9wb2xsX2VuYWJsZSgmcGhiYS0+aW9wb2xsKTsKKwl9CisKKwlyZXQgPSBiZWlzY3NpX2luaXRfaXJxcyhwaGJhKTsKKwlpZiAocmV0IDwgMCkgeworCQlzaG9zdF9wcmludGsoS0VSTl9FUlIsIHBoYmEtPnNob3N0LCAiYmVpc2NzaV9kZXZfcHJvYmUtIgorCQkJICAgICAiRmFpbGVkIHRvIGJlaXNjc2lfaW5pdF9pcnFzXG4iKTsKKwkJZ290byBmcmVlX2Jsa2VuYmxkOworCX0KKwlyZXQgPSBod2lfZW5hYmxlX2ludHIocGhiYSk7CisJaWYgKHJldCA8IDApIHsKKwkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCBwaGJhLT5zaG9zdCwgImJlaXNjc2lfZGV2X3Byb2JlLSIKKwkJCSAgICAgIkZhaWxlZCB0byBod2lfZW5hYmxlX2ludHJcbiIpOworCQlnb3RvIGZyZWVfY3RybHI7CisJfQorCisJU0VfREVCVUcoREJHX0xWTF84LCAiXG5cblxuIFNVQ0NFU1MgLSBEUklWRVIgTE9BREVEIFxuXG5cbiIpOworCXJldHVybiAwOworCitmcmVlX2N0cmxyOgorCWlmIChwaGJhLT5wY2lkZXYtPmlycSkKKwkJZnJlZV9pcnEocGhiYS0+cGNpZGV2LT5pcnEsIHBoYmEpOworZnJlZV9ibGtlbmJsZDoKKwlkZXN0cm95X3dvcmtxdWV1ZShwaGJhLT53cSk7CisJaWYgKGJsa19pb3BvbGxfZW5hYmxlZCkKKwkJYmxrX2lvcG9sbF9kaXNhYmxlKCZwaGJhLT5pb3BvbGwpOworZnJlZV90d3E6CisJYmVpc2NzaV9jbGVhbl9wb3J0KHBoYmEpOworCWJlaXNjc2lfZnJlZV9tZW0ocGhiYSk7CitmcmVlX3BvcnQ6CisJcGNpX2ZyZWVfY29uc2lzdGVudChwaGJhLT5wY2lkZXYsCisJCQkgICAgcGhiYS0+Y3RybC5tYm94X21lbV9hbGxvY2VkLnNpemUsCisJCQkgICAgcGhiYS0+Y3RybC5tYm94X21lbV9hbGxvY2VkLnZhLAorCQkJICAgcGhiYS0+Y3RybC5tYm94X21lbV9hbGxvY2VkLmRtYSk7CisJYmVpc2NzaV91bm1hcF9wY2lfZnVuY3Rpb24ocGhiYSk7CitoYmFfZnJlZToKKwlpc2NzaV9ob3N0X3JlbW92ZShwaGJhLT5zaG9zdCk7CisJcGNpX2Rldl9wdXQocGhiYS0+cGNpZGV2KTsKKwlpc2NzaV9ob3N0X2ZyZWUocGhiYS0+c2hvc3QpOworZGlzYWJsZV9wY2k6CisJcGNpX2Rpc2FibGVfZGV2aWNlKHBjaWRldik7CisJcmV0dXJuIHJldDsKK30KKworc3RydWN0IGlzY3NpX3RyYW5zcG9ydCBiZWlzY3NpX2lzY3NpX3RyYW5zcG9ydCA9IHsKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkubmFtZSA9IERSVl9OQU1FLAorCS5jYXBzID0gQ0FQX1JFQ09WRVJZX0wwIHwgQ0FQX0hEUkRHU1QgfAorCQlDQVBfTVVMVElfUjJUIHwgQ0FQX0RBVEFER1NUIHwgQ0FQX0RBVEFfUEFUSF9PRkZMT0FELAorCS5wYXJhbV9tYXNrID0gSVNDU0lfTUFYX1JFQ1ZfRExFTkdUSCB8CisJCUlTQ1NJX01BWF9YTUlUX0RMRU5HVEggfAorCQlJU0NTSV9IRFJER1NUX0VOIHwKKwkJSVNDU0lfREFUQURHU1RfRU4gfAorCQlJU0NTSV9JTklUSUFMX1IyVF9FTiB8CisJCUlTQ1NJX01BWF9SMlQgfAorCQlJU0NTSV9JTU1fREFUQV9FTiB8CisJCUlTQ1NJX0ZJUlNUX0JVUlNUIHwKKwkJSVNDU0lfTUFYX0JVUlNUIHwKKwkJSVNDU0lfUERVX0lOT1JERVJfRU4gfAorCQlJU0NTSV9EQVRBU0VRX0lOT1JERVJfRU4gfAorCQlJU0NTSV9FUkwgfAorCQlJU0NTSV9DT05OX1BPUlQgfAorCQlJU0NTSV9DT05OX0FERFJFU1MgfAorCQlJU0NTSV9FWFBfU1RBVFNOIHwKKwkJSVNDU0lfUEVSU0lTVEVOVF9QT1JUIHwKKwkJSVNDU0lfUEVSU0lTVEVOVF9BRERSRVNTIHwKKwkJSVNDU0lfVEFSR0VUX05BTUUgfCBJU0NTSV9UUEdUIHwKKwkJSVNDU0lfVVNFUk5BTUUgfCBJU0NTSV9QQVNTV09SRCB8CisJCUlTQ1NJX1VTRVJOQU1FX0lOIHwgSVNDU0lfUEFTU1dPUkRfSU4gfAorCQlJU0NTSV9GQVNUX0FCT1JUIHwgSVNDU0lfQUJPUlRfVE1PIHwKKwkJSVNDU0lfTFVfUkVTRVRfVE1PIHwKKwkJSVNDU0lfUElOR19UTU8gfCBJU0NTSV9SRUNWX1RNTyB8CisJCUlTQ1NJX0lGQUNFX05BTUUgfCBJU0NTSV9JTklUSUFUT1JfTkFNRSwKKwkuaG9zdF9wYXJhbV9tYXNrID0gSVNDU0lfSE9TVF9IV0FERFJFU1MgfCBJU0NTSV9IT1NUX0lQQUREUkVTUyB8CisJCQkJSVNDU0lfSE9TVF9JTklUSUFUT1JfTkFNRSwKKwkuY3JlYXRlX3Nlc3Npb24gPSBiZWlzY3NpX3Nlc3Npb25fY3JlYXRlLAorCS5kZXN0cm95X3Nlc3Npb24gPSBiZWlzY3NpX3Nlc3Npb25fZGVzdHJveSwKKwkuY3JlYXRlX2Nvbm4gPSBiZWlzY3NpX2Nvbm5fY3JlYXRlLAorCS5iaW5kX2Nvbm4gPSBiZWlzY3NpX2Nvbm5fYmluZCwKKwkuZGVzdHJveV9jb25uID0gaXNjc2lfY29ubl90ZWFyZG93biwKKwkuc2V0X3BhcmFtID0gYmVpc2NzaV9zZXRfcGFyYW0sCisJLmdldF9jb25uX3BhcmFtID0gYmVpc2NzaV9jb25uX2dldF9wYXJhbSwKKwkuZ2V0X3Nlc3Npb25fcGFyYW0gPSBpc2NzaV9zZXNzaW9uX2dldF9wYXJhbSwKKwkuZ2V0X2hvc3RfcGFyYW0gPSBiZWlzY3NpX2dldF9ob3N0X3BhcmFtLAorCS5zdGFydF9jb25uID0gYmVpc2NzaV9jb25uX3N0YXJ0LAorCS5zdG9wX2Nvbm4gPSBiZWlzY3NpX2Nvbm5fc3RvcCwKKwkuc2VuZF9wZHUgPSBpc2NzaV9jb25uX3NlbmRfcGR1LAorCS54bWl0X3Rhc2sgPSBiZWlzY3NpX3Rhc2tfeG1pdCwKKwkuY2xlYW51cF90YXNrID0gYmVpc2NzaV9jbGVhbnVwX3Rhc2ssCisJLmFsbG9jX3BkdSA9IGJlaXNjc2lfYWxsb2NfcGR1LAorCS5wYXJzZV9wZHVfaXR0ID0gYmVpc2NzaV9wYXJzZV9wZHUsCisJLmdldF9zdGF0cyA9IGJlaXNjc2lfY29ubl9nZXRfc3RhdHMsCisJLmVwX2Nvbm5lY3QgPSBiZWlzY3NpX2VwX2Nvbm5lY3QsCisJLmVwX3BvbGwgPSBiZWlzY3NpX2VwX3BvbGwsCisJLmVwX2Rpc2Nvbm5lY3QgPSBiZWlzY3NpX2VwX2Rpc2Nvbm5lY3QsCisJLnNlc3Npb25fcmVjb3ZlcnlfdGltZWRvdXQgPSBpc2NzaV9zZXNzaW9uX3JlY292ZXJ5X3RpbWVkb3V0LAorfTsKKworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGJlaXNjc2lfcGNpX2RyaXZlciA9IHsKKwkubmFtZSA9IERSVl9OQU1FLAorCS5wcm9iZSA9IGJlaXNjc2lfZGV2X3Byb2JlLAorCS5yZW1vdmUgPSBiZWlzY3NpX3JlbW92ZSwKKwkuaWRfdGFibGUgPSBiZWlzY3NpX3BjaV9pZF90YWJsZQorfTsKKworc3RhdGljIGludCBfX2luaXQgYmVpc2NzaV9tb2R1bGVfaW5pdCh2b2lkKQoreworCWludCByZXQ7CisKKwliZWlzY3NpX3Njc2lfdHJhbnNwb3J0ID0KKwkJCWlzY3NpX3JlZ2lzdGVyX3RyYW5zcG9ydCgmYmVpc2NzaV9pc2NzaV90cmFuc3BvcnQpOworCWlmICghYmVpc2NzaV9zY3NpX3RyYW5zcG9ydCkgeworCQlTRV9ERUJVRyhEQkdfTFZMXzEsCisJCQkgImJlaXNjc2lfbW9kdWxlX2luaXQgLSBVbmFibGUgdG8gIHJlZ2lzdGVyIGJlaXNjc2kiCisJCQkgInRyYW5zcG9ydC5cbiIpOworCQlyZXQgPSAtRU5PTUVNOworCX0KKwlTRV9ERUJVRyhEQkdfTFZMXzgsICJJbiBiZWlzY3NpX21vZHVsZV9pbml0LCB0dD0lcCBcbiIsCisJCSAmYmVpc2NzaV9pc2NzaV90cmFuc3BvcnQpOworCisJcmV0ID0gcGNpX3JlZ2lzdGVyX2RyaXZlcigmYmVpc2NzaV9wY2lfZHJpdmVyKTsKKwlpZiAocmV0KSB7CisJCVNFX0RFQlVHKERCR19MVkxfMSwKKwkJCSAiYmVpc2NzaV9tb2R1bGVfaW5pdCAtIFVuYWJsZSB0byAgcmVnaXN0ZXIiCisJCQkgImJlaXNjc2kgcGNpIGRyaXZlci5cbiIpOworCQlnb3RvIHVucmVnaXN0ZXJfaXNjc2lfdHJhbnNwb3J0OworCX0KKwlyZXR1cm4gMDsKKwordW5yZWdpc3Rlcl9pc2NzaV90cmFuc3BvcnQ6CisJaXNjc2lfdW5yZWdpc3Rlcl90cmFuc3BvcnQoJmJlaXNjc2lfaXNjc2lfdHJhbnNwb3J0KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgYmVpc2NzaV9tb2R1bGVfZXhpdCh2b2lkKQoreworCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmYmVpc2NzaV9wY2lfZHJpdmVyKTsKKwlpc2NzaV91bnJlZ2lzdGVyX3RyYW5zcG9ydCgmYmVpc2NzaV9pc2NzaV90cmFuc3BvcnQpOworfQorCittb2R1bGVfaW5pdChiZWlzY3NpX21vZHVsZV9pbml0KTsKK21vZHVsZV9leGl0KGJlaXNjc2lfbW9kdWxlX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX21haW4uaCBiL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9tYWluLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTNjOWI3MAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9tYWluLmgKQEAgLTAsMCArMSw4MzcgQEAKKy8qKgorICogQ29weXJpZ2h0IChDKSAyMDA1IC0gMjAwOSBTZXJ2ZXJFbmdpbmVzCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMgorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBUaGUgZnVsbCBHTlUgR2VuZXJhbAorICogUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlIGZpbGUgY2FsbGVkIENPUFlJTkcuCisgKgorICogV3JpdHRlbiBieTogSmF5YW1vaGFuIEthbGxpY2thbCAoamF5YW1vaGFua0BzZXJ2ZXJlbmdpbmVzLmNvbSkKKyAqCisgKiBDb250YWN0IEluZm9ybWF0aW9uOgorICogbGludXgtZHJpdmVyc0BzZXJ2ZXJlbmdpbmVzLmNvbQorICoKKyAqIFNlcnZlckVuZ2luZXMKKyAqIDIwOSBOLiBGYWlyIE9ha3MgQXZlCisgKiBTdW5ueXZhbGUsIENBIDk0MDg1CisgKgorICovCisKKyNpZm5kZWYgX0JFSVNDU0lfTUFJTl8KKyNkZWZpbmUgX0JFSVNDU0lfTUFJTl8KKworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvaW4uaD4KKyNpbmNsdWRlIDxsaW51eC9ibGstaW9wb2xsLmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpLmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpX2NtbmQuaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2lfZGV2aWNlLmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpX2hvc3QuaD4KKyNpbmNsdWRlIDxzY3NpL2lzY3NpX3Byb3RvLmg+CisjaW5jbHVkZSA8c2NzaS9saWJpc2NzaS5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV90cmFuc3BvcnRfaXNjc2kuaD4KKworI2luY2x1ZGUgImJlLmgiCisKKworCisjZGVmaW5lIERSVl9OQU1FCQkiYmUyaXNjc2kiCisjZGVmaW5lIEJVSUxEX1NUUgkJIjIuMC41MjcuMCIKKworI2RlZmluZSBCRV9OQU1FCQkJIlNlcnZlckVuZ2luZXMgQmxhZGVFbmdpbmUyIiBcCisJCQkJIkxpbnV4IGlTQ1NJIERyaXZlciB2ZXJzaW9uIiBCVUlMRF9TVFIKKyNkZWZpbmUgRFJWX0RFU0MJCUJFX05BTUUgIiAiICJEcml2ZXIiCisKKyNkZWZpbmUgQkVfVkVORE9SX0lEIAkJMHgxOUEyCisjZGVmaW5lIEJFX0RFVklDRV9JRDEJCTB4MjEyCisjZGVmaW5lIE9DX0RFVklDRV9JRDEJCTB4NzAyCisjZGVmaW5lIE9DX0RFVklDRV9JRDIJCTB4NzAzCisKKyNkZWZpbmUgQkUyX01BWF9TRVNTSU9OUwk2NAorI2RlZmluZSBCRTJfQ01EU19QRVJfQ1hOCTEyOAorI2RlZmluZSBCRTJfTE9HT1VUUwkJQkUyX01BWF9TRVNTSU9OUworI2RlZmluZSBCRTJfVE1GUwkJMTYKKyNkZWZpbmUgQkUyX05PUE9VVF9SRVEJCTE2CisjZGVmaW5lIEJFMl9BU1lOQ1BEVVMJCUJFMl9NQVhfU0VTU0lPTlMKKyNkZWZpbmUgQkUyX01BWF9JQ0RTCQkyMDQ4CisjZGVmaW5lIEJFMl9TR0UJCQkzMgorI2RlZmluZSBCRTJfREVGUERVX0hEUl9TWgk2NAorI2RlZmluZSBCRTJfREVGUERVX0RBVEFfU1oJODE5MgorI2RlZmluZSBCRTJfSU9fREVQVEggXAorCShCRTJfTUFYX0lDRFMgLyAyIC0gKEJFMl9MT0dPVVRTICsgQkUyX1RNRlMgKyBCRTJfTk9QT1VUX1JFUSkpCisKKyNkZWZpbmUgQkVJU0NTSV9TR0xJU1RfRUxFTUVOVFMJQkUyX1NHRQorCisjZGVmaW5lIEJFSVNDU0lfTUFYX0NNTkRTCTEwMjQJLyogTWF4IElPJ3MgcGVyIEN0cmxyIHNodC0+Y2FuX3F1ZXVlICovCisjZGVmaW5lIEJFSVNDU0lfQ01EX1BFUl9MVU4JMTI4CS8qIHNjc2lfaG9zdC0+Y21kX3Blcl9sdW4gKi8KKyNkZWZpbmUgQkVJU0NTSV9NQVhfU0VDVE9SUwkyMDQ4CS8qIHNjc2lfaG9zdC0+bWF4X3NlY3RvcnMgKi8KKworI2RlZmluZSBCRUlTQ1NJX01BWF9DTURfTEVOCTE2CS8qIHNjc2lfaG9zdC0+bWF4X2NtZF9sZW4gKi8KKyNkZWZpbmUgQkVJU0NTSV9OVU1fTUFYX0xVTgkyNTYJLyogc2NzaV9ob3N0LT5tYXhfbHVuICovCisjZGVmaW5lIEJFSVNDU0lfTlVNX0RFVklDRVNfU1VQUE9SVEVECTB4MDEKKyNkZWZpbmUgQkVJU0NTSV9NQVhfRlJBR1NfSU5JVAkxOTIKKyNkZWZpbmUgQkVfTlVNX01TSVhfRU5UUklFUyAJMQorI2RlZmluZSBNUFVfRVBfU0VNQVBIT1JFIAkweGFjCisKKyNkZWZpbmUgQkVfU0VOU0VfSU5GT19TSVpFCQkyNTgKKyNkZWZpbmUgQkVfSVNDU0lfUERVX0hFQURFUl9TSVpFCTY0CisjZGVmaW5lIEJFX01JTl9NRU1fU0laRQkJCTE2Mzg0CisKKyNkZWZpbmUgSUlPQ19TQ1NJX0RBVEEgICAgICAgICAgICAgICAgICAweDA1CS8qIFdyaXRlIE9wZXJhdGlvbiAqLworCisjZGVmaW5lIERCR19MVkwJCQkJMHgwMDAwMDAwMQorI2RlZmluZSBEQkdfTFZMXzEJCQkweDAwMDAwMDAxCisjZGVmaW5lIERCR19MVkxfMgkJCTB4MDAwMDAwMDIKKyNkZWZpbmUgREJHX0xWTF8zCQkJMHgwMDAwMDAwNAorI2RlZmluZSBEQkdfTFZMXzQJCQkweDAwMDAwMDA4CisjZGVmaW5lIERCR19MVkxfNQkJCTB4MDAwMDAwMTAKKyNkZWZpbmUgREJHX0xWTF82CQkJMHgwMDAwMDAyMAorI2RlZmluZSBEQkdfTFZMXzcJCQkweDAwMDAwMDQwCisjZGVmaW5lIERCR19MVkxfOAkJCTB4MDAwMDAwODAKKworI2RlZmluZSBTRV9ERUJVRyhkZWJ1Z19tYXNrLCBmbXQsIGFyZ3MuLi4pCQlcCitkbyB7CQkJCQkJCVwKKwlpZiAoZGVidWdfbWFzayAmIERCR19MVkwpIHsJCQlcCisJCXByaW50ayhLRVJOX0VSUiAiKCVzKCk6JWQpOiIsIF9fZnVuY19fLCBfX0xJTkVfXyk7XAorCQlwcmludGsoZm10LCAjI2FyZ3MpOwkJCVwKKwl9CQkJCQkJXAorfSB3aGlsZSAoMCk7CisKKy8qKgorICogaGFyZHdhcmUgbmVlZHMgdGhlIGFzeW5jIFBEVSBidWZmZXJzIHRvIGJlIHBvc3RlZCBpbiBtdWx0aXBsZXMgb2YgOAorICogU28gaGF2ZSBhdGxlYXN0IDggb2YgdGhlbSBieSBkZWZhdWx0CisgKi8KKworI2RlZmluZSBIV0lfR0VUX0FTWU5DX1BEVV9DVFgocGh3aSkJKHBod2ktPnBod2lfY3R4dC0+cGFzeW5jX2N0eCkKKworLyoqKioqKioqKiBNZW1vcnkgQkFSIHJlZ2lzdGVyICoqKioqKioqKioqKi8KKyNkZWZpbmUgUENJQ0ZHX01FTUJBUl9DVFJMX0lOVF9DVFJMX09GRlNFVCAJMHhmYworLyoqCisgKiBIb3N0IEludGVycnVwdCBFbmFibGUsIGlmIHNldCBpbnRlcnJ1cHRzIGFyZSBlbmFibGVkIGFsdGhvdWdoICJQQ0kgSW50ZXJydXB0CisgKiBEaXNhYmxlIiBtYXkgc3RpbGwgZ2xvYmFsbHkgYmxvY2sgaW50ZXJydXB0cyBpbiBhZGRpdGlvbiB0byBpbmRpdmlkdWFsCisgKiBpbnRlcnJ1cHQgbWFza3M7IGEgbWVjaGFuaXNtIGZvciB0aGUgZGV2aWNlIGRyaXZlciB0byBibG9jayBhbGwgaW50ZXJydXB0cworICogYXRvbWljYWxseSB3aXRob3V0IGhhdmluZyB0byBhcmJpdHJhdGUgZm9yIHRoZSBQQ0kgSW50ZXJydXB0IERpc2FibGUgYml0CisgKiB3aXRoIHRoZSBPUy4KKyAqLworI2RlZmluZSBNRU1CQVJfQ1RSTF9JTlRfQ1RSTF9IT1NUSU5UUl9NQVNLCSgxIDw8IDI5KQkvKiBiaXQgMjkgKi8KKworLyoqKioqKioqKiBJU1IwIFJlZ2lzdGVyIG9mZnNldCAqKioqKioqKioqLworI2RlZmluZSBDRVZfSVNSMF9PRkZTRVQgCQkJMHhDMTgKKyNkZWZpbmUgQ0VWX0lTUl9TSVpFCQkJCTQKKworLyoqCisgKiBNYWNyb3MgZm9yIHJlYWRpbmcvd3JpdGluZyBhIHByb3RlY3Rpb24gZG9tYWluIG9yIENTUiByZWdpc3RlcnMKKyAqIGluIEJsYWRlRW5naW5lLgorICovCisKKyNkZWZpbmUgREJfVFhVTFAwX09GRlNFVCAweDQwCisjZGVmaW5lIERCX1JYVUxQMF9PRkZTRVQgMHhBMAorLyoqKioqKioqKiBFdmVudCBRIGRvb3IgYmVsbCAqKioqKioqKioqKioqLworI2RlZmluZSBEQl9FUV9PRkZTRVQJCQlEQl9DUV9PRkZTRVQKKyNkZWZpbmUgREJfRVFfUklOR19JRF9NQVNLCQkweDFGRgkvKiBiaXRzIDAgLSA4ICovCisvKiBDbGVhciB0aGUgaW50ZXJydXB0IGZvciB0aGlzIGVxICovCisjZGVmaW5lIERCX0VRX0NMUl9TSElGVAkJCSg5KQkvKiBiaXQgOSAqLworLyogTXVzdCBiZSAxICovCisjZGVmaW5lIERCX0VRX0VWTlRfU0hJRlQJCSgxMCkJLyogYml0IDEwICovCisvKiBOdW1iZXIgb2YgZXZlbnQgZW50cmllcyBwcm9jZXNzZWQgKi8KKyNkZWZpbmUgREJfRVFfTlVNX1BPUFBFRF9TSElGVAkJKDE2KQkvKiBiaXRzIDE2IC0gMjggKi8KKy8qIFJlYXJtIGJpdCAqLworI2RlZmluZSBEQl9FUV9SRUFSTV9TSElGVAkJKDI5KQkvKiBiaXQgMjkgKi8KKworLyoqKioqKioqKiBDb21wbCBRIGRvb3IgYmVsbCAqKioqKioqKioqKioqLworI2RlZmluZSBEQl9DUV9PRkZTRVQgCQkJMHgxMjAKKyNkZWZpbmUgREJfQ1FfUklOR19JRF9NQVNLCQkweDNGRgkvKiBiaXRzIDAgLSA5ICovCisvKiBOdW1iZXIgb2YgZXZlbnQgZW50cmllcyBwcm9jZXNzZWQgKi8KKyNkZWZpbmUgREJfQ1FfTlVNX1BPUFBFRF9TSElGVAkJKDE2KSAJLyogYml0cyAxNiAtIDI4ICovCisvKiBSZWFybSBiaXQgKi8KKyNkZWZpbmUgREJfQ1FfUkVBUk1fU0hJRlQJCSgyOSkgCS8qIGJpdCAyOSAqLworCisjZGVmaW5lIEdFVF9IV0lfQ09OVFJPTExFUl9XUyhwYykJKHBjLT5waHdpX2N0cmxyKQorI2RlZmluZSBIV0lfR0VUX0RFRl9CVUZRX0lEKHBjKSAoKChzdHJ1Y3QgaHdpX2NvbnRyb2xsZXIgKilcCisJCShHRVRfSFdJX0NPTlRST0xMRVJfV1MocGMpKSktPmRlZmF1bHRfcGR1X2RhdGEuaWQpCisjZGVmaW5lIEhXSV9HRVRfREVGX0hEUlFfSUQocGMpICgoKHN0cnVjdCBod2lfY29udHJvbGxlciAqKVwKKwkJKEdFVF9IV0lfQ09OVFJPTExFUl9XUyhwYykpKS0+ZGVmYXVsdF9wZHVfaGRyLmlkKQorCisjZGVmaW5lIFBBR0VTX1JFUVVJUkVEKHgpIFwKKwkoKHggPCBQQUdFX1NJWkUpID8gMSA6ICAoKHggKyBQQUdFX1NJWkUgLSAxKSAvIFBBR0VfU0laRSkpCisKK2VudW0gYmVfbWVtX2VudW0geworCUhXSV9NRU1fQURETl9DT05URVhULAorCUhXSV9NRU1fQ1EsCisJSFdJX01FTV9FUSwKKwlIV0lfTUVNX1dSQiwKKwlIV0lfTUVNX1dSQkgsCisJSFdJX01FTV9TR0xILAkvKiA1ICovCisJSFdJX01FTV9TR0UsCisJSFdJX01FTV9BU1lOQ19IRUFERVJfQlVGLAorCUhXSV9NRU1fQVNZTkNfREFUQV9CVUYsCisJSFdJX01FTV9BU1lOQ19IRUFERVJfUklORywKKwlIV0lfTUVNX0FTWU5DX0RBVEFfUklORywJLyogMTAgKi8KKwlIV0lfTUVNX0FTWU5DX0hFQURFUl9IQU5ETEUsCisJSFdJX01FTV9BU1lOQ19EQVRBX0hBTkRMRSwKKwlIV0lfTUVNX0FTWU5DX1BEVV9DT05URVhULAorCUlTQ1NJX01FTV9HTE9CQUxfSEVBREVSLAorCVNFX01FTV9NQVggIAkvKiAxNSAqLworfTsKKworc3RydWN0IGJlX2J1c19hZGRyZXNzMzIgeworCXVuc2lnbmVkIGludCBhZGRyZXNzX2xvOworCXVuc2lnbmVkIGludCBhZGRyZXNzX2hpOworfTsKKworc3RydWN0IGJlX2J1c19hZGRyZXNzNjQgeworCXVuc2lnbmVkIGxvbmcgbG9uZyBhZGRyZXNzOworfTsKKworc3RydWN0IGJlX2J1c19hZGRyZXNzIHsKKwl1bmlvbiB7CisJCXN0cnVjdCBiZV9idXNfYWRkcmVzczMyIGEzMjsKKwkJc3RydWN0IGJlX2J1c19hZGRyZXNzNjQgYTY0OworCX0gdTsKK307CisKK3N0cnVjdCBtZW1fYXJyYXkgeworCXN0cnVjdCBiZV9idXNfYWRkcmVzcyBidXNfYWRkcmVzczsJLyogQnVzIGFkZHJlc3Mgb2YgbG9jYXRpb24gKi8KKwl2b2lkICp2aXJ0dWFsX2FkZHJlc3M7CQkvKiB2aXJ0dWFsIGFkZHJlc3MgdG8gdGhlIGxvY2F0aW9uICovCisJdW5zaWduZWQgaW50IHNpemU7CQkvKiBTaXplIHJlcXVpcmVkIGJ5IG1lbW9yeSBibG9jayAqLworfTsKKworc3RydWN0IGJlX21lbV9kZXNjcmlwdG9yIHsKKwl1bnNpZ25lZCBpbnQgaW5kZXg7CS8qIEluZGV4IG9mIHRoaXMgbWVtb3J5IHBhcmFtZXRlciAqLworCXVuc2lnbmVkIGludCBjYXRlZ29yeTsJLyogdHlwZSBpbmRpY2F0ZXMgY2FjaGVkL25vbi1jYWNoZWQgKi8KKwl1bnNpZ25lZCBpbnQgbnVtX2VsZW1lbnRzOwkvKiBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhpcworCQkJCQkgKiBkZXNjcmlwdG9yCisJCQkJCSAqLworCXVuc2lnbmVkIGludCBhbGlnbm1lbnRfbWFzazsJLyogQWxpZ25tZW50IG1hc2sgZm9yIHRoaXMgYmxvY2sgKi8KKwl1bnNpZ25lZCBpbnQgc2l6ZV9pbl9ieXRlczsJLyogU2l6ZSByZXF1aXJlZCBieSBtZW1vcnkgYmxvY2sgKi8KKwlzdHJ1Y3QgbWVtX2FycmF5ICptZW1fYXJyYXk7Cit9OworCitzdHJ1Y3Qgc2dsX2hhbmRsZSB7CisJdW5zaWduZWQgaW50IHNnbF9pbmRleDsKKwlzdHJ1Y3QgaXNjc2lfc2dlICpwZnJhZzsKK307CisKK3N0cnVjdCBoYmFfcGFyYW1ldGVycyB7CisJdW5zaWduZWQgaW50IGlvc19wZXJfY3RybDsKKwl1bnNpZ25lZCBpbnQgY3huc19wZXJfY3RybDsKKwl1bnNpZ25lZCBpbnQgYXN5bmNwZHVzX3Blcl9jdHJsOworCXVuc2lnbmVkIGludCBpY2RzX3Blcl9jdHJsOworCXVuc2lnbmVkIGludCBudW1fc2dlX3Blcl9pbzsKKwl1bnNpZ25lZCBpbnQgZGVmcGR1X2hkcl9zejsKKwl1bnNpZ25lZCBpbnQgZGVmcGR1X2RhdGFfc3o7CisJdW5zaWduZWQgaW50IG51bV9jcV9lbnRyaWVzOworCXVuc2lnbmVkIGludCBudW1fZXFfZW50cmllczsKKwl1bnNpZ25lZCBpbnQgd3Jic19wZXJfY3huOworCXVuc2lnbmVkIGludCBjcmFzaG1vZGU7CisJdW5zaWduZWQgaW50IGhiYV9udW07CisKKwl1bnNpZ25lZCBpbnQgbWdtdF93c19zejsKKwl1bnNpZ25lZCBpbnQgaHdpX3dzX3N6OworCisJdW5zaWduZWQgaW50IGV0bzsKKwl1bnNpZ25lZCBpbnQgbGR0bzsKKworCXVuc2lnbmVkIGludCBkYmdfZmxhZ3M7CisJdW5zaWduZWQgaW50IG51bV9jeG47CisKKwl1bnNpZ25lZCBpbnQgZXFfdGltZXI7CisJLyoqCisJICogVGhlc2UgYXJlIGNhbGN1bGF0ZWQgZnJvbSBvdGhlciBwYXJhbXMuIFRoZXkncmUgaGVyZQorCSAqIGZvciBkZWJ1ZyBwdXJwb3NlcworCSAqLworCXVuc2lnbmVkIGludCBudW1fbWNjX3BhZ2VzOworCXVuc2lnbmVkIGludCBudW1fbWNjX2NxX3BhZ2VzOworCXVuc2lnbmVkIGludCBudW1fY3FfcGFnZXM7CisJdW5zaWduZWQgaW50IG51bV9lcV9wYWdlczsKKworCXVuc2lnbmVkIGludCBudW1fYXN5bmNfcGR1X2J1Zl9wYWdlczsKKwl1bnNpZ25lZCBpbnQgbnVtX2FzeW5jX3BkdV9idWZfc2dsX3BhZ2VzOworCXVuc2lnbmVkIGludCBudW1fYXN5bmNfcGR1X2J1Zl9jcV9wYWdlczsKKworCXVuc2lnbmVkIGludCBudW1fYXN5bmNfcGR1X2hkcl9wYWdlczsKKwl1bnNpZ25lZCBpbnQgbnVtX2FzeW5jX3BkdV9oZHJfc2dsX3BhZ2VzOworCXVuc2lnbmVkIGludCBudW1fYXN5bmNfcGR1X2hkcl9jcV9wYWdlczsKKworCXVuc2lnbmVkIGludCBudW1fc2dlOworfTsKKworc3RydWN0IGJlaXNjc2lfaGJhIHsKKwlzdHJ1Y3QgaGJhX3BhcmFtZXRlcnMgcGFyYW1zOworCXN0cnVjdCBod2lfY29udHJvbGxlciAqcGh3aV9jdHJscjsKKwl1bnNpZ25lZCBpbnQgbWVtX3JlcVtTRV9NRU1fTUFYXTsKKwkvKiBQQ0kgQkFSIG1hcHBlZCBhZGRyZXNzZXMgKi8KKwl1OCBfX2lvbWVtICpjc3JfdmE7CS8qIENTUiAqLworCXU4IF9faW9tZW0gKmRiX3ZhOwkvKiBEb29yICBCZWxsICAqLworCXU4IF9faW9tZW0gKnBjaV92YTsJLyogUENJIENvbmZpZyAqLworCXN0cnVjdCBiZV9idXNfYWRkcmVzcyBjc3JfcGE7CS8qIENTUiAqLworCXN0cnVjdCBiZV9idXNfYWRkcmVzcyBkYl9wYTsJLyogQ1NSICovCisJc3RydWN0IGJlX2J1c19hZGRyZXNzIHBjaV9wYTsJLyogQ1NSICovCisJLyogUENJIHJlcHJlc2VudGF0aW9uIG9mIG91ciBIQkEgKi8KKwlzdHJ1Y3QgcGNpX2RldiAqcGNpZGV2OworCXVuc2lnbmVkIGludCBzdGF0ZTsKKwl1bnNpZ25lZCBzaG9ydCBhc2ljX3JldmlzaW9uOworCXN0cnVjdCBibGtfaW9wb2xsCWlvcG9sbDsKKwlzdHJ1Y3QgYmVfbWVtX2Rlc2NyaXB0b3IgKmluaXRfbWVtOworCisJdW5zaWduZWQgc2hvcnQgaW9fc2dsX2FsbG9jX2luZGV4OworCXVuc2lnbmVkIHNob3J0IGlvX3NnbF9mcmVlX2luZGV4OworCXVuc2lnbmVkIHNob3J0IGlvX3NnbF9obmRsX2F2Ymw7CisJc3RydWN0IHNnbF9oYW5kbGUgKippb19zZ2xfaG5kbF9iYXNlOworCisJdW5zaWduZWQgc2hvcnQgZWhfc2dsX2FsbG9jX2luZGV4OworCXVuc2lnbmVkIHNob3J0IGVoX3NnbF9mcmVlX2luZGV4OworCXVuc2lnbmVkIHNob3J0IGVoX3NnbF9obmRsX2F2Ymw7CisJc3RydWN0IHNnbF9oYW5kbGUgKiplaF9zZ2xfaG5kbF9iYXNlOworCXNwaW5sb2NrX3QgaW9fc2dsX2xvY2s7CisJc3BpbmxvY2tfdCBtZ210X3NnbF9sb2NrOworCXNwaW5sb2NrX3QgaXNyX2xvY2s7CisJdW5zaWduZWQgaW50IGFnZTsKKwl1bnNpZ25lZCBzaG9ydCBhdmxibF9jaWRzOworCXVuc2lnbmVkIHNob3J0IGNpZF9hbGxvYzsKKwl1bnNpZ25lZCBzaG9ydCBjaWRfZnJlZTsKKwlzdHJ1Y3QgYmVpc2NzaV9jb25uICpjb25uX3RhYmxlW0JFMl9NQVhfU0VTU0lPTlMgKiAyXTsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGhiYV9xdWV1ZTsKKwl1bnNpZ25lZCBzaG9ydCAqY2lkX2FycmF5OworCXN0cnVjdCBpc2NzaV9lbmRwb2ludCAqKmVwX2FycmF5OworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0OworCXN0cnVjdCB7CisJCS8qKgorCQkgKiBncm91cCB0b2dldGhlciBzaW5jZSB0aGV5IGFyZSB1c2VkIG1vc3QgZnJlcXVlbnRseQorCQkgKiBmb3IgY2lkIHRvIGNyaSBjb252ZXJzaW9uCisJCSAqLworCQl1bnNpZ25lZCBpbnQgaXNjc2lfY2lkX3N0YXJ0OworCQl1bnNpZ25lZCBpbnQgcGh5c19wb3J0OworCisJCXVuc2lnbmVkIGludCBpc3Jfb2Zmc2V0OworCQl1bnNpZ25lZCBpbnQgaXNjc2lfaWNkX3N0YXJ0OworCQl1bnNpZ25lZCBpbnQgaXNjc2lfY2lkX2NvdW50OworCQl1bnNpZ25lZCBpbnQgaXNjc2lfaWNkX2NvdW50OworCQl1bnNpZ25lZCBpbnQgcGNpX2Z1bmN0aW9uOworCisJCXVuc2lnbmVkIHNob3J0IGNpZF9hbGxvYzsKKwkJdW5zaWduZWQgc2hvcnQgY2lkX2ZyZWU7CisJCXVuc2lnbmVkIHNob3J0IGF2bGJsX2NpZHM7CisJCXNwaW5sb2NrX3QgY2lkX2xvY2s7CisJfSBmd19jb25maWc7CisKKwl1OCBtYWNfYWRkcmVzc1tFVEhfQUxFTl07CisJdW5zaWduZWQgc2hvcnQgdG9kb19jcTsKKwl1bnNpZ25lZCBzaG9ydCB0b2RvX21jY19jcTsKKwljaGFyIHdxX25hbWVbMjBdOworCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp3cTsJLyogVGhlIGFjdHVhayB3b3JrIHF1ZXVlICovCisJc3RydWN0IHdvcmtfc3RydWN0IHdvcmtfY3FzOwkvKiBUaGUgd29yayBiZWluZyBxdWV1ZWQgKi8KKwlzdHJ1Y3QgYmVfY3RybF9pbmZvIGN0cmw7Cit9OworCitzdHJ1Y3QgYmVpc2NzaV9zZXNzaW9uIHsKKwlzdHJ1Y3QgcGNpX3Bvb2wgKmJoc19wb29sOworfTsKKworLyoqCisgKiBzdHJ1Y3QgYmVpc2NzaV9jb25uIC0gaXNjc2kgY29ubmVjdGlvbiBzdHJ1Y3R1cmUKKyAqLworc3RydWN0IGJlaXNjc2lfY29ubiB7CisJc3RydWN0IGlzY3NpX2Nvbm4gKmNvbm47CisJc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhOworCXUzMiBleHBfc3RhdHNuOworCXUzMiBiZWlzY3NpX2Nvbm5fY2lkOworCXN0cnVjdCBiZWlzY3NpX2VuZHBvaW50ICplcDsKKwl1bnNpZ25lZCBzaG9ydCBsb2dpbl9pbl9wcm9ncmVzczsKKwlzdHJ1Y3Qgc2dsX2hhbmRsZSAqcGxvZ2luX3NnbF9oYW5kbGU7CisJc3RydWN0IGJlaXNjc2lfc2Vzc2lvbiAqYmVpc2NzaV9zZXNzOworfTsKKworLyogVGhpcyBzdHJ1Y3R1cmUgaXMgdXNlZCBieSB0aGUgY2hpcCAqLworc3RydWN0IHBkdV9kYXRhX291dCB7CisJdTMyIGR3WzEyXTsKK307CisvKioKKyAqIFBzZXVkbyBhbWFwIGRlZmluaXRpb24gaW4gd2hpY2ggZWFjaCBiaXQgb2YgdGhlIGFjdHVhbCBzdHJ1Y3R1cmUgaXMgZGVmaW5lZAorICogYXMgYSBieXRlOiB1c2VkIHRvIGNhbGN1bGF0ZSBvZmZzZXQvc2hpZnQvbWFzayBvZiBlYWNoIGZpZWxkCisgKi8KK3N0cnVjdCBhbWFwX3BkdV9kYXRhX291dCB7CisJdTggb3Bjb2RlWzZdOwkJLyogb3Bjb2RlICovCisJdTggcnN2ZDBbMl07CQkvKiBzaG91bGQgYmUgMCAqLworCXU4IHJzdmQxWzddOworCXU4IGZpbmFsX2JpdDsJCS8qIEYgYml0ICovCisJdTggcnN2ZDJbMTZdOworCXU4IGFoc19sZW5ndGhbOF07CS8qIG5vIEFIUyAqLworCXU4IGRhdGFfbGVuX2hpWzhdOworCXU4IGRhdGFfbGVuX2xvWzE2XTsJLyogRGF0YVNlZ21lbnRMZW5ndGggKi8KKwl1OCBsdW5bNjRdOworCXU4IGl0dFszMl07CQkvKiBJVFQ7IGluaXRpYXRvciB0YXNrIHRhZyAqLworCXU4IHR0dFszMl07CQkvKiBUVFQ7IHZhbGlkIGZvciBSMlQgb3IgMHhmZmZmZmZmZiAqLworCXU4IHJzdmQzWzMyXTsKKwl1OCBleHBfc3RhdF9zblszMl07CisJdTggcnN2ZDRbMzJdOworCXU4IGRhdGFfc25bMzJdOworCXU4IGJ1ZmZlcl9vZmZzZXRbMzJdOworCXU4IHJzdmQ1WzMyXTsKK307CisKK3N0cnVjdCBiZV9jbWRfYmhzIHsKKwlzdHJ1Y3QgaXNjc2lfY21kIGlzY3NpX2hkcjsKKwl1bnNpZ25lZCBjaGFyIHBhZDFbMTZdOworCXN0cnVjdCBwZHVfZGF0YV9vdXQgaXNjc2lfZGF0YV9wZHU7CisJdW5zaWduZWQgY2hhciBwYWQyW0JFX1NFTlNFX0lORk9fU0laRSAtCisJCQlzaXplb2Yoc3RydWN0IHBkdV9kYXRhX291dCldOworfTsKKworc3RydWN0IGJlaXNjc2lfaW9fdGFzayB7CisJc3RydWN0IHdyYl9oYW5kbGUgKnB3cmJfaGFuZGxlOworCXN0cnVjdCBzZ2xfaGFuZGxlICpwc2dsX2hhbmRsZTsKKwlzdHJ1Y3QgYmVpc2NzaV9jb25uICpjb25uOworCXN0cnVjdCBzY3NpX2NtbmQgKnNjc2lfY21uZDsKKwl1bnNpZ25lZCBpbnQgY21kX3NuOworCXVuc2lnbmVkIGludCBmbGFnczsKKwl1bnNpZ25lZCBzaG9ydCBjaWQ7CisJdW5zaWduZWQgc2hvcnQgaGVhZGVyX2xlbjsKKworCXN0cnVjdCBiZV9jbWRfYmhzICpjbWRfYmhzOworCXN0cnVjdCBiZV9idXNfYWRkcmVzcyBiaHNfcGE7CisJdW5zaWduZWQgc2hvcnQgYmhzX2xlbjsKK307CisKK3N0cnVjdCBiZV9ub25pb19iaHMgeworCXN0cnVjdCBpc2NzaV9oZHIgaXNjc2lfaGRyOworCXVuc2lnbmVkIGNoYXIgcGFkMVsxNl07CisJc3RydWN0IHBkdV9kYXRhX291dCBpc2NzaV9kYXRhX3BkdTsKKwl1bnNpZ25lZCBjaGFyIHBhZDJbQkVfU0VOU0VfSU5GT19TSVpFIC0KKwkJCXNpemVvZihzdHJ1Y3QgcGR1X2RhdGFfb3V0KV07Cit9OworCitzdHJ1Y3QgYmVfc3RhdHVzX2JocyB7CisJc3RydWN0IGlzY3NpX2NtZCBpc2NzaV9oZHI7CisJdW5zaWduZWQgY2hhciBwYWQxWzE2XTsKKwkvKioKKwkgKiBUaGUgcGx1cyAyIGJlbG93IGlzIHRvIGhvbGQgdGhlIHNlbnNlIGluZm8gbGVuZ3RoIHRoYXQgZ2V0cworCSAqIERNQSdlZCBieSBSeFVMUAorCSAqLworCXVuc2lnbmVkIGNoYXIgc2Vuc2VfaW5mb1tCRV9TRU5TRV9JTkZPX1NJWkVdOworfTsKKworc3RydWN0IGlzY3NpX3NnZSB7CisJdTMyIGR3WzRdOworfTsKKworLyoqCisgKiBQc2V1ZG8gYW1hcCBkZWZpbml0aW9uIGluIHdoaWNoIGVhY2ggYml0IG9mIHRoZSBhY3R1YWwgc3RydWN0dXJlIGlzIGRlZmluZWQKKyAqIGFzIGEgYnl0ZTogdXNlZCB0byBjYWxjdWxhdGUgb2Zmc2V0L3NoaWZ0L21hc2sgb2YgZWFjaCBmaWVsZAorICovCitzdHJ1Y3QgYW1hcF9pc2NzaV9zZ2UgeworCXU4IGFkZHJfaGlbMzJdOworCXU4IGFkZHJfbG9bMzJdOworCXU4IHNnZV9vZmZzZXRbMjJdOwkvKiBEV09SRCAyICovCisJdTggcnN2ZDBbOV07CQkvKiBEV09SRCAyICovCisJdTggbGFzdF9zZ2U7CQkvKiBEV09SRCAyICovCisJdTggbGVuWzE3XTsJCS8qIERXT1JEIDMgKi8KKwl1OCByc3ZkMVsxNV07CQkvKiBEV09SRCAzICovCit9OworCitzdHJ1Y3QgYmVpc2NzaV9vZmZsb2FkX3BhcmFtcyB7CisJdTMyIGR3WzVdOworfTsKKworI2RlZmluZSBPRkZMRF9QQVJBTVNfRVJMCTB4MDAwMDAwMDMKKyNkZWZpbmUgT0ZGTERfUEFSQU1TX0RERQkweDAwMDAwMDA0CisjZGVmaW5lIE9GRkxEX1BBUkFNU19IREUJMHgwMDAwMDAwOAorI2RlZmluZSBPRkZMRF9QQVJBTVNfSVIyVAkweDAwMDAwMDEwCisjZGVmaW5lIE9GRkxEX1BBUkFNU19JTUQJMHgwMDAwMDAyMAorCisvKioKKyAqIFBzZXVkbyBhbWFwIGRlZmluaXRpb24gaW4gd2hpY2ggZWFjaCBiaXQgb2YgdGhlIGFjdHVhbCBzdHJ1Y3R1cmUgaXMgZGVmaW5lZAorICogYXMgYSBieXRlOiB1c2VkIHRvIGNhbGN1bGF0ZSBvZmZzZXQvc2hpZnQvbWFzayBvZiBlYWNoIGZpZWxkCisgKi8KK3N0cnVjdCBhbWFwX2JlaXNjc2lfb2ZmbG9hZF9wYXJhbXMgeworCXU4IG1heF9idXJzdF9sZW5ndGhbMzJdOworCXU4IG1heF9zZW5kX2RhdGFfc2VnbWVudF9sZW5ndGhbMzJdOworCXU4IGZpcnN0X2J1cnN0X2xlbmd0aFszMl07CisJdTggZXJsWzJdOworCXU4IGRkZVsxXTsKKwl1OCBoZGVbMV07CisJdTggaXIydFsxXTsKKwl1OCBpbWRbMV07CisJdTggcGFkWzI2XTsKKwl1OCBleHBfc3RhdHNuWzMyXTsKK307CisKKy8qIHZvaWQgaHdpX2NvbXBsZXRlX2RydnJfbXNncyhzdHJ1Y3QgYmVpc2NzaV9jb25uICpiZWlzY3NpX2Nvbm4sCisJCXN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSwgc3RydWN0IHNvbF9jcWUgKnBzb2wpOyovCisKK3N0cnVjdCBhc3luY19wZHVfaGFuZGxlIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpbms7CisJc3RydWN0IGJlX2J1c19hZGRyZXNzIHBhOworCXZvaWQgKnBidWZmZXI7CisJdW5zaWduZWQgaW50IGNvbnN1bWVkOworCXVuc2lnbmVkIGNoYXIgaW5kZXg7CisJdW5zaWduZWQgY2hhciBpc19oZWFkZXI7CisJdW5zaWduZWQgc2hvcnQgY3JpOworCXVuc2lnbmVkIGxvbmcgYnVmZmVyX2xlbjsKK307CisKK3N0cnVjdCBod2lfYXN5bmNfZW50cnkgeworCXN0cnVjdCB7CisJCXVuc2lnbmVkIGNoYXIgaGRyX3JlY2VpdmVkOworCQl1bnNpZ25lZCBjaGFyIGhkcl9sZW47CisJCXVuc2lnbmVkIHNob3J0IGJ5dGVzX3JlY2VpdmVkOworCQl1bnNpZ25lZCBpbnQgYnl0ZXNfbmVlZGVkOworCQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJfSB3YWl0X3F1ZXVlOworCisJc3RydWN0IGxpc3RfaGVhZCBoZWFkZXJfYnVzeV9saXN0OworCXN0cnVjdCBsaXN0X2hlYWQgZGF0YV9idXN5X2xpc3Q7Cit9OworCisjZGVmaW5lIEJFX01JTl9BU1lOQ19FTlRSSUVTIDEyOAorCitzdHJ1Y3QgaHdpX2FzeW5jX3BkdV9jb250ZXh0IHsKKwlzdHJ1Y3QgeworCQlzdHJ1Y3QgYmVfYnVzX2FkZHJlc3MgcGFfYmFzZTsKKwkJdm9pZCAqdmFfYmFzZTsKKwkJdm9pZCAqcmluZ19iYXNlOworCQlzdHJ1Y3QgYXN5bmNfcGR1X2hhbmRsZSAqaGFuZGxlX2Jhc2U7CisKKwkJdW5zaWduZWQgaW50IGhvc3Rfd3JpdGVfcHRyOworCQl1bnNpZ25lZCBpbnQgZXBfcmVhZF9wdHI7CisJCXVuc2lnbmVkIGludCB3cml0YWJsZXM7CisKKwkJdW5zaWduZWQgaW50IGZyZWVfZW50cmllczsKKwkJdW5zaWduZWQgaW50IGJ1c3lfZW50cmllczsKKwkJdW5zaWduZWQgaW50IGJ1ZmZlcl9zaXplOworCQl1bnNpZ25lZCBpbnQgbnVtX2VudHJpZXM7CisKKwkJc3RydWN0IGxpc3RfaGVhZCBmcmVlX2xpc3Q7CisJfSBhc3luY19oZWFkZXI7CisKKwlzdHJ1Y3QgeworCQlzdHJ1Y3QgYmVfYnVzX2FkZHJlc3MgcGFfYmFzZTsKKwkJdm9pZCAqdmFfYmFzZTsKKwkJdm9pZCAqcmluZ19iYXNlOworCQlzdHJ1Y3QgYXN5bmNfcGR1X2hhbmRsZSAqaGFuZGxlX2Jhc2U7CisKKwkJdW5zaWduZWQgaW50IGhvc3Rfd3JpdGVfcHRyOworCQl1bnNpZ25lZCBpbnQgZXBfcmVhZF9wdHI7CisJCXVuc2lnbmVkIGludCB3cml0YWJsZXM7CisKKwkJdW5zaWduZWQgaW50IGZyZWVfZW50cmllczsKKwkJdW5zaWduZWQgaW50IGJ1c3lfZW50cmllczsKKwkJdW5zaWduZWQgaW50IGJ1ZmZlcl9zaXplOworCQlzdHJ1Y3QgbGlzdF9oZWFkIGZyZWVfbGlzdDsKKwkJdW5zaWduZWQgaW50IG51bV9lbnRyaWVzOworCX0gYXN5bmNfZGF0YTsKKworCS8qKgorCSAqIFRoaXMgaXMgYSB2YXJ5aW5nIHNpemUgbGlzdCEgRG8gbm90IGFkZCBhbnl0aGluZworCSAqIGFmdGVyIHRoaXMgZW50cnkhIQorCSAqLworCXN0cnVjdCBod2lfYXN5bmNfZW50cnkgYXN5bmNfZW50cnlbQkVfTUlOX0FTWU5DX0VOVFJJRVNdOworfTsKKworI2RlZmluZSBQRFVDUUVfQ09ERV9NQVNLCTB4MDAwMDAwM0YKKyNkZWZpbmUgUERVQ1FFX0RQTF9NQVNLCQkweEZGRkYwMDAwCisjZGVmaW5lIFBEVUNRRV9JTkRFWF9NQVNLCTB4MDAwMEZGRkYKKworc3RydWN0IGlfdF9kcGR1X2NxZSB7CisJdTMyIGR3WzRdOworfSBfX3BhY2tlZDsKKworLyoqCisgKiBQc2V1ZG8gYW1hcCBkZWZpbml0aW9uIGluIHdoaWNoIGVhY2ggYml0IG9mIHRoZSBhY3R1YWwgc3RydWN0dXJlIGlzIGRlZmluZWQKKyAqIGFzIGEgYnl0ZTogdXNlZCB0byBjYWxjdWxhdGUgb2Zmc2V0L3NoaWZ0L21hc2sgb2YgZWFjaCBmaWVsZAorICovCitzdHJ1Y3QgYW1hcF9pX3RfZHBkdV9jcWUgeworCXU4IGRiX2FkZHJfaGlbMzJdOworCXU4IGRiX2FkZHJfbG9bMzJdOworCXU4IGNvZGVbNl07CisJdTggY2lkWzEwXTsKKwl1OCBkcGxbMTZdOworCXU4IGluZGV4WzE2XTsKKwl1OCBudW1fY29uc1sxMF07CisJdTggcnN2ZDBbNF07CisJdTggZmluYWw7CisJdTggdmFsaWQ7Cit9IF9fcGFja2VkOworCisjZGVmaW5lIENRRV9WQUxJRF9NQVNLCTB4ODAwMDAwMDAKKyNkZWZpbmUgQ1FFX0NPREVfTUFTSwkweDAwMDAwMDNGCisjZGVmaW5lIENRRV9DSURfTUFTSwkweDAwMDBGRkMwCisKKyNkZWZpbmUgRVFFX1ZBTElEX01BU0sJCTB4MDAwMDAwMDEKKyNkZWZpbmUgRVFFX01BSk9SQ09ERV9NQVNLCTB4MDAwMDAwMEUKKyNkZWZpbmUgRVFFX1JFU0lEX01BU0sJCTB4RkZGRjAwMDAKKworc3RydWN0IGJlX2VxX2VudHJ5IHsKKwl1MzIgZHdbMV07Cit9IF9fcGFja2VkOworCisvKioKKyAqIFBzZXVkbyBhbWFwIGRlZmluaXRpb24gaW4gd2hpY2ggZWFjaCBiaXQgb2YgdGhlIGFjdHVhbCBzdHJ1Y3R1cmUgaXMgZGVmaW5lZAorICogYXMgYSBieXRlOiB1c2VkIHRvIGNhbGN1bGF0ZSBvZmZzZXQvc2hpZnQvbWFzayBvZiBlYWNoIGZpZWxkCisgKi8KK3N0cnVjdCBhbWFwX2VxX2VudHJ5IHsKKwl1OCB2YWxpZDsJCS8qIERXT1JEIDAgKi8KKwl1OCBtYWpvcl9jb2RlWzNdOwkvKiBEV09SRCAwICovCisJdTggbWlub3JfY29kZVsxMl07CS8qIERXT1JEIDAgKi8KKwl1OCByZXNvdXJjZV9pZFsxNl07CS8qIERXT1JEIDAgKi8KKworfSBfX3BhY2tlZDsKKworc3RydWN0IGNxX2RiIHsKKwl1MzIgZHdbMV07Cit9IF9fcGFja2VkOworCisvKioKKyAqIFBzZXVkbyBhbWFwIGRlZmluaXRpb24gaW4gd2hpY2ggZWFjaCBiaXQgb2YgdGhlIGFjdHVhbCBzdHJ1Y3R1cmUgaXMgZGVmaW5lZAorICogYXMgYSBieXRlOiB1c2VkIHRvIGNhbGN1bGF0ZSBvZmZzZXQvc2hpZnQvbWFzayBvZiBlYWNoIGZpZWxkCisgKi8KK3N0cnVjdCBhbWFwX2NxX2RiIHsKKwl1OCBxaWRbMTBdOworCXU4IGV2ZW50WzFdOworCXU4IHJzdmQwWzVdOworCXU4IG51bV9wb3BwZWRbMTNdOworCXU4IHJlYXJtWzFdOworCXU4IHJzdmQxWzJdOworfSBfX3BhY2tlZDsKKwordm9pZCBiZWlzY3NpX3Byb2Nlc3NfZXEoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhKTsKKworCitzdHJ1Y3QgaXNjc2lfd3JiIHsKKwl1MzIgZHdbMTZdOworfSBfX3BhY2tlZDsKKworI2RlZmluZSBXUkJfVFlQRV9NQVNLIDB4RjAwMDAwMDAKKworLyoqCisgKiBQc2V1ZG8gYW1hcCBkZWZpbml0aW9uIGluIHdoaWNoIGVhY2ggYml0IG9mIHRoZSBhY3R1YWwgc3RydWN0dXJlIGlzIGRlZmluZWQKKyAqIGFzIGEgYnl0ZTogdXNlZCB0byBjYWxjdWxhdGUgb2Zmc2V0L3NoaWZ0L21hc2sgb2YgZWFjaCBmaWVsZAorICovCitzdHJ1Y3QgYW1hcF9pc2NzaV93cmIgeworCXU4IGx1blsxNF07CQkvKiBEV09SRCAwICovCisJdTggbHQ7CQkJLyogRFdPUkQgMCAqLworCXU4IGludmxkOwkJLyogRFdPUkQgMCAqLworCXU4IHdyYl9pZHhbOF07CQkvKiBEV09SRCAwICovCisJdTggZHNwOwkJCS8qIERXT1JEIDAgKi8KKwl1OCBkbXNnOwkJLyogRFdPUkQgMCAqLworCXU4IHVuZHJfcnVuOwkJLyogRFdPUkQgMCAqLworCXU4IG92ZXJfcnVuOwkJLyogRFdPUkQgMCAqLworCXU4IHR5cGVbNF07CQkvKiBEV09SRCAwICovCisJdTggcHRyMm5leHR3cmJbOF07CS8qIERXT1JEIDEgKi8KKwl1OCByMnRfZXhwX2R0bFsyNF07CS8qIERXT1JEIDEgKi8KKwl1OCBzZ2xfaWNkX2lkeFsxMl07CS8qIERXT1JEIDIgKi8KKwl1OCByc3ZkMFsyMF07CQkvKiBEV09SRCAyICovCisJdTggZXhwX2RhdGFfc25bMzJdOwkvKiBEV09SRCAzICovCisJdTggaXNjc2lfYmhzX2FkZHJfaGlbMzJdOwkvKiBEV09SRCA0ICovCisJdTggaXNjc2lfYmhzX2FkZHJfbG9bMzJdOwkvKiBEV09SRCA1ICovCisJdTggY21kc25faXR0WzMyXTsJLyogRFdPUkQgNiAqLworCXU4IGRpZl9yZWZfdGFnWzMyXTsJLyogRFdPUkQgNyAqLworCXU4IHNnZTBfYWRkcl9oaVszMl07CS8qIERXT1JEIDggKi8KKwl1OCBzZ2UwX2FkZHJfbG9bMzJdOwkvKiBEV09SRCA5ICAqLworCXU4IHNnZTBfb2Zmc2V0WzIyXTsJLyogRFdPUkQgMTAgKi8KKwl1OCBwYnM7CQkJLyogRFdPUkQgMTAgKi8KKwl1OCBkaWZfbW9kZVsyXTsJCS8qIERXT1JEIDEwICovCisJdTggcnN2ZDFbNl07CQkvKiBEV09SRCAxMCAqLworCXU4IHNnZTBfbGFzdDsJCS8qIERXT1JEIDEwICovCisJdTggc2dlMF9sZW5bMTddOwkvKiBEV09SRCAxMSAqLworCXU4IGRpZl9tZXRhX3RhZ1sxNF07CS8qIERXT1JEIDExICovCisJdTggc2dlMF9pbl9kZHI7CQkvKiBEV09SRCAxMSAqLworCXU4IHNnZTFfYWRkcl9oaVszMl07CS8qIERXT1JEIDEyICovCisJdTggc2dlMV9hZGRyX2xvWzMyXTsJLyogRFdPUkQgMTMgKi8KKwl1OCBzZ2UxX3IydF9vZmZzZXRbMjJdOwkvKiBEV09SRCAxNCAqLworCXU4IHJzdmQyWzldOwkJLyogRFdPUkQgMTQgKi8KKwl1OCBzZ2UxX2xhc3Q7CQkvKiBEV09SRCAxNCAqLworCXU4IHNnZTFfbGVuWzE3XTsJLyogRFdPUkQgMTUgKi8KKwl1OCByZWZfc2dsX2ljZF9pZHhbMTJdOwkvKiBEV09SRCAxNSAqLworCXU4IHJzdmQzWzJdOwkJLyogRFdPUkQgMTUgKi8KKwl1OCBzZ2UxX2luX2RkcjsJCS8qIERXT1JEIDE1ICovCisKK30gX19wYWNrZWQ7CisKK3N0cnVjdCB3cmJfaGFuZGxlICphbGxvY193cmJfaGFuZGxlKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSwgdW5zaWduZWQgaW50IGNpZCwKKwkJCQkgICAgaW50IGluZGV4KTsKK3ZvaWQKK2ZyZWVfbWdtdF9zZ2xfaGFuZGxlKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSwgc3RydWN0IHNnbF9oYW5kbGUgKnBzZ2xfaGFuZGxlKTsKKworc3RydWN0IHBkdV9ub3Bfb3V0IHsKKwl1MzIgZHdbMTJdOworfTsKKworLyoqCisgKiBQc2V1ZG8gYW1hcCBkZWZpbml0aW9uIGluIHdoaWNoIGVhY2ggYml0IG9mIHRoZSBhY3R1YWwgc3RydWN0dXJlIGlzIGRlZmluZWQKKyAqIGFzIGEgYnl0ZTogdXNlZCB0byBjYWxjdWxhdGUgb2Zmc2V0L3NoaWZ0L21hc2sgb2YgZWFjaCBmaWVsZAorICovCitzdHJ1Y3QgYW1hcF9wZHVfbm9wX291dCB7CisJdTggb3Bjb2RlWzZdOwkJLyogb3Bjb2RlIDB4MDAgKi8KKwl1OCBpX2JpdDsJCS8qIEkgQml0ICovCisJdTggeF9iaXQ7CQkvKiByZXNlcnZlZDsgc2hvdWxkIGJlIDAgKi8KKwl1OCBmcF9iaXRfZmlsbGVyMVs3XTsKKwl1OCBmX2JpdDsJCS8qIGFsd2F5cyAxICovCisJdTggcmVzZXJ2ZWQxWzE2XTsKKwl1OCBhaHNfbGVuZ3RoWzhdOwkvKiBubyBBSFMgKi8KKwl1OCBkYXRhX2xlbl9oaVs4XTsKKwl1OCBkYXRhX2xlbl9sb1sxNl07CS8qIERhdGFTZWdtZW50TGVuZ3RoICovCisJdTggbHVuWzY0XTsKKwl1OCBpdHRbMzJdOwkJLyogaW5pdGlhdG9yIGlkIGZvciBwaW5nIG9yIDB4ZmZmZmZmZmYgKi8KKwl1OCB0dHRbMzJdOwkJLyogdGFyZ2V0IGlkIGZvciBwaW5nIG9yIDB4ZmZmZmZmZmYgKi8KKwl1OCBjbWRfc25bMzJdOworCXU4IGV4cF9zdGF0X3NuWzMyXTsKKwl1OCByZXNlcnZlZDVbMTI4XTsKK307CisKKyNkZWZpbmUgUERVQkFTRV9PUENPREVfTUFTSwkweDAwMDAwMDNGCisjZGVmaW5lIFBEVUJBU0VfREFUQUxFTkhJX01BU0sJMHgwMDAwRkYwMAorI2RlZmluZSBQRFVCQVNFX0RBVEFMRU5MT19NQVNLCTB4RkZGRjAwMDAKKworc3RydWN0IHBkdV9iYXNlIHsKKwl1MzIgZHdbMTZdOworfSBfX3BhY2tlZDsKKworLyoqCisgKiBQc2V1ZG8gYW1hcCBkZWZpbml0aW9uIGluIHdoaWNoIGVhY2ggYml0IG9mIHRoZSBhY3R1YWwgc3RydWN0dXJlIGlzIGRlZmluZWQKKyAqIGFzIGEgYnl0ZTogdXNlZCB0byBjYWxjdWxhdGUgb2Zmc2V0L3NoaWZ0L21hc2sgb2YgZWFjaCBmaWVsZAorICovCitzdHJ1Y3QgYW1hcF9wZHVfYmFzZSB7CisJdTggb3Bjb2RlWzZdOworCXU4IGlfYml0OwkJLyogaW1tZWRpYXRlIGJpdCAqLworCXU4IHhfYml0OwkJLyogcmVzZXJ2ZWQsIGFsd2F5cyAwICovCisJdTggcmVzZXJ2ZWQxWzI0XTsJLyogb3Bjb2RlLXNwZWNpZmljIGZpZWxkcyAqLworCXU4IGFoc19sZW5ndGhbOF07CS8qIGxlbmd0aCB1bml0cyBpcyA0IGJ5dGUgd29yZHMgKi8KKwl1OCBkYXRhX2xlbl9oaVs4XTsKKwl1OCBkYXRhX2xlbl9sb1sxNl07CS8qIERhdGFzZWdtZW50TGVuZ3RoICovCisJdTggbHVuWzY0XTsJCS8qIGx1biBvciBvcGNvZGUtc3BlY2lmaWMgZmllbGRzICovCisJdTggaXR0WzMyXTsJCS8qIGluaXRpYXRvciB0YXNrIHRhZyAqLworCXU4IHJlc2VydmVkNFsyMjRdOworfTsKKworc3RydWN0IGlzY3NpX3RhcmdldF9jb250ZXh0X3VwZGF0ZV93cmIgeworCXUzMiBkd1sxNl07Cit9IF9fcGFja2VkOworCisvKioKKyAqIFBzZXVkbyBhbWFwIGRlZmluaXRpb24gaW4gd2hpY2ggZWFjaCBiaXQgb2YgdGhlIGFjdHVhbCBzdHJ1Y3R1cmUgaXMgZGVmaW5lZAorICogYXMgYSBieXRlOiB1c2VkIHRvIGNhbGN1bGF0ZSBvZmZzZXQvc2hpZnQvbWFzayBvZiBlYWNoIGZpZWxkCisgKi8KK3N0cnVjdCBhbWFwX2lzY3NpX3RhcmdldF9jb250ZXh0X3VwZGF0ZV93cmIgeworCXU4IGx1blsxNF07CQkvKiBEV09SRCAwICovCisJdTggbHQ7CQkJLyogRFdPUkQgMCAqLworCXU4IGludmxkOwkJLyogRFdPUkQgMCAqLworCXU4IHdyYl9pZHhbOF07CQkvKiBEV09SRCAwICovCisJdTggZHNwOwkJCS8qIERXT1JEIDAgKi8KKwl1OCBkbXNnOwkJLyogRFdPUkQgMCAqLworCXU4IHVuZHJfcnVuOwkJLyogRFdPUkQgMCAqLworCXU4IG92ZXJfcnVuOwkJLyogRFdPUkQgMCAqLworCXU4IHR5cGVbNF07CQkvKiBEV09SRCAwICovCisJdTggcHRyMm5leHR3cmJbOF07CS8qIERXT1JEIDEgKi8KKwl1OCBtYXhfYnVyc3RfbGVuZ3RoWzE5XTsJLyogRFdPUkQgMSAqLworCXU4IHJzdmQwWzVdOwkJLyogRFdPUkQgMSAqLworCXU4IHJzdmQxWzE1XTsJCS8qIERXT1JEIDIgKi8KKwl1OCBtYXhfc2VuZF9kYXRhX3NlZ21lbnRfbGVuZ3RoWzE3XTsJLyogRFdPUkQgMiAqLworCXU4IGZpcnN0X2J1cnN0X2xlbmd0aFsxNF07CS8qIERXT1JEIDMgKi8KKwl1OCByc3ZkMlsyXTsJCS8qIERXT1JEIDMgKi8KKwl1OCB0eF93cmJpbmRleF9kcnZfbXNnWzhdOwkvKiBEV09SRCAzICovCisJdTggcnN2ZDNbNV07CQkvKiBEV09SRCAzICovCisJdTggc2Vzc2lvbl9zdGF0ZVszXTsJLyogRFdPUkQgMyAqLworCXU4IHJzdmQ0WzE2XTsJCS8qIERXT1JEIDQgKi8KKwl1OCB0eF9qdW1ibzsJCS8qIERXT1JEIDQgKi8KKwl1OCBoZGU7CQkJLyogRFdPUkQgNCAqLworCXU4IGRkZTsJCQkvKiBEV09SRCA0ICovCisJdTggZXJsWzJdOwkJLyogRFdPUkQgNCAqLworCXU4IGRvbWFpbl9pZFs1XTsJCS8qIERXT1JEIDQgKi8KKwl1OCBtb2RlOwkJLyogRFdPUkQgNCAqLworCXU4IGltZDsJCQkvKiBEV09SRCA0ICovCisJdTggaXIydDsJCS8qIERXT1JEIDQgKi8KKwl1OCBub3RwcmVkYmxxWzJdOwkvKiBEV09SRCA0ICovCisJdTggY29tcGx0b25hY2s7CQkvKiBEV09SRCA0ICovCisJdTggc3RhdF9zblszMl07CQkvKiBEV09SRCA1ICovCisJdTggcGFkX2J1ZmZlcl9hZGRyX2hpWzMyXTsJLyogRFdPUkQgNiAqLworCXU4IHBhZF9idWZmZXJfYWRkcl9sb1szMl07CS8qIERXT1JEIDcgKi8KKwl1OCBwYWRfYWRkcl9oaVszMl07CS8qIERXT1JEIDggKi8KKwl1OCBwYWRfYWRkcl9sb1szMl07CS8qIERXT1JEIDkgKi8KKwl1OCByc3ZkNVszMl07CQkvKiBEV09SRCAxMCAqLworCXU4IHJzdmQ2WzMyXTsJCS8qIERXT1JEIDExICovCisJdTggcnN2ZDdbMzJdOwkJLyogRFdPUkQgMTIgKi8KKwl1OCByc3ZkOFszMl07CQkvKiBEV09SRCAxMyAqLworCXU4IHJzdmQ5WzMyXTsJCS8qIERXT1JEIDE0ICovCisJdTggcnN2ZDEwWzMyXTsJCS8qIERXT1JEIDE1ICovCisKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBiZV9yaW5nIHsKKwl1MzIgcGFnZXM7CQkvKiBxdWV1ZSBzaXplIGluIHBhZ2VzICovCisJdTMyIGlkOwkJCS8qIHF1ZXVlIGlkIGFzc2lnbmVkIGJ5IGJla2xpYiAqLworCXUzMiBudW07CQkvKiBudW1iZXIgb2YgZWxlbWVudHMgaW4gcXVldWUgKi8KKwl1MzIgY2lkeDsJCS8qIGNvbnN1bWVyIGluZGV4ICovCisJdTMyIHBpZHg7CQkvKiBwcm9kdWNlciBpbmRleCAtLSBub3QgdXNlZCBieSBtb3N0IHJpbmdzICovCisJdTMyIGl0ZW1fc2l6ZTsJCS8qIHNpemUgaW4gYnl0ZXMgb2Ygb25lIG9iamVjdCAqLworCisJdm9pZCAqdmE7CQkvKiBUaGUgdmlydHVhbCBhZGRyZXNzIG9mIHRoZSByaW5nLiAgVGhpcworCQkJCSAqIHNob3VsZCBiZSBsYXN0IHRvIGFsbG93IDMyICYgNjQgYml0IGRlYnVnZ2VyCisJCQkJICogZXh0ZW5zaW9ucyB0byB3b3JrLgorCQkJCSAqLworfTsKKworc3RydWN0IGh3aV93cmJfY29udGV4dCB7CisJc3RydWN0IGxpc3RfaGVhZCB3cmJfaGFuZGxlX2xpc3Q7CisJc3RydWN0IGxpc3RfaGVhZCB3cmJfaGFuZGxlX2RydnJfbGlzdDsKKwlzdHJ1Y3Qgd3JiX2hhbmRsZSAqKnB3cmJfaGFuZGxlX2Jhc2U7CisJc3RydWN0IHdyYl9oYW5kbGUgKipwd3JiX2hhbmRsZV9iYXNlc3RkOworCXN0cnVjdCBpc2NzaV93cmIgKnBsYXN0X3dyYjsKKwl1bnNpZ25lZCBzaG9ydCBhbGxvY19pbmRleDsKKwl1bnNpZ25lZCBzaG9ydCBmcmVlX2luZGV4OworCXVuc2lnbmVkIHNob3J0IHdyYl9oYW5kbGVzX2F2YWlsYWJsZTsKKwl1bnNpZ25lZCBzaG9ydCBjaWQ7Cit9OworCitzdHJ1Y3QgaHdpX2NvbnRyb2xsZXIgeworCXN0cnVjdCBsaXN0X2hlYWQgaW9fc2dsX2xpc3Q7CisJc3RydWN0IGxpc3RfaGVhZCBlaF9zZ2xfbGlzdDsKKwlzdHJ1Y3Qgc2dsX2hhbmRsZSAqcHNnbF9oYW5kbGVfYmFzZTsKKwl1bnNpZ25lZCBpbnQgd3JiX21lbV9pbmRleDsKKworCXN0cnVjdCBod2lfd3JiX2NvbnRleHQgd3JiX2NvbnRleHRbQkUyX01BWF9TRVNTSU9OUyAqIDJdOworCXN0cnVjdCBtY2Nfd3JiICpwbWNjX3dyYl9iYXNlOworCXN0cnVjdCBiZV9yaW5nIGRlZmF1bHRfcGR1X2hkcjsKKwlzdHJ1Y3QgYmVfcmluZyBkZWZhdWx0X3BkdV9kYXRhOworCXN0cnVjdCBod2lfY29udGV4dF9tZW1vcnkgKnBod2lfY3R4dDsKKwl1bnNpZ25lZCBzaG9ydCBjcV9lcnJvcnNbQ1hOX0tJTExFRF9DTU5EX0RBVEFfTk9UX09OX1NBTUVfQ09OTl07Cit9OworCitlbnVtIGh3aF90eXBlX2VudW0geworCUhXSF9UWVBFX0lPID0gMSwKKwlIV0hfVFlQRV9MT0dPVVQgPSAyLAorCUhXSF9UWVBFX1RNRiA9IDMsCisJSFdIX1RZUEVfTk9QID0gNCwKKwlIV0hfVFlQRV9JT19SRCA9IDUsCisJSFdIX1RZUEVfTE9HSU4gPSAxMSwKKwlIV0hfVFlQRV9JTlZBTElEID0gMHhGRkZGRkZGRgorfTsKKworc3RydWN0IHdyYl9oYW5kbGUgeworCWVudW0gaHdoX3R5cGVfZW51bSB0eXBlOworCXVuc2lnbmVkIHNob3J0IHdyYl9pbmRleDsKKwl1bnNpZ25lZCBzaG9ydCBueHRfd3JiX2luZGV4OworCisJc3RydWN0IGlzY3NpX3Rhc2sgKnBpb19oYW5kbGU7CisJc3RydWN0IGlzY3NpX3dyYiAqcHdyYjsKK307CisKK3N0cnVjdCBod2lfY29udGV4dF9tZW1vcnkgeworCXN0cnVjdCBiZV9lcV9vYmogYmVfZXE7CisJc3RydWN0IGJlX3F1ZXVlX2luZm8gYmVfY3E7CisJc3RydWN0IGJlX3F1ZXVlX2luZm8gYmVfbWNjX2NxOworCXN0cnVjdCBiZV9xdWV1ZV9pbmZvIGJlX21jYzsKKworCXN0cnVjdCBiZV9xdWV1ZV9pbmZvIGJlX2RlZl9oZHJxOworCXN0cnVjdCBiZV9xdWV1ZV9pbmZvIGJlX2RlZl9kYXRhcTsKKworCXN0cnVjdCBiZV9xdWV1ZV9pbmZvIGJlX3dyYnFbQkUyX01BWF9TRVNTSU9OU107CisJc3RydWN0IGJlX21jY193cmJfY29udGV4dCAqcGJlX21jY19jb250ZXh0OworCisJc3RydWN0IGh3aV9hc3luY19wZHVfY29udGV4dCAqcGFzeW5jX2N0eDsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX21nbXQuYyBiL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9tZ210LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTJlNjQ0ZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9tZ210LmMKQEAgLTAsMCArMSwzMjEgQEAKKy8qKgorICogQ29weXJpZ2h0IChDKSAyMDA1IC0gMjAwOSBTZXJ2ZXJFbmdpbmVzCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMgorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBUaGUgZnVsbCBHTlUgR2VuZXJhbAorICogUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlIGZpbGUgY2FsbGVkIENPUFlJTkcuCisgKgorICogV3JpdHRlbiBieTogSmF5YW1vaGFuIEthbGxpY2thbCAoamF5YW1vaGFua0BzZXJ2ZXJlbmdpbmVzLmNvbSkKKyAqCisgKiBDb250YWN0IEluZm9ybWF0aW9uOgorICogbGludXgtZHJpdmVyc0BzZXJ2ZXJlbmdpbmVzLmNvbQorICoKKyAqIFNlcnZlckVuZ2luZXMKKyAqIDIwOSBOLiBGYWlyIE9ha3MgQXZlCisgKiBTdW5ueXZhbGUsIENBIDk0MDg1CisgKgorICovCisKKyNpbmNsdWRlICJiZV9tZ210LmgiCisjaW5jbHVkZSAiYmVfaXNjc2kuaCIKKwordW5zaWduZWQgY2hhciBtZ210X2dldF9md19jb25maWcoc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCwKKwkJCQlzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEpCit7CisJc3RydWN0IGJlX21jY193cmIgKndyYiA9IHdyYl9mcm9tX21ib3goJmN0cmwtPm1ib3hfbWVtKTsKKwlzdHJ1Y3QgYmVfZndfY2ZnICpyZXEgPSBlbWJlZGRlZF9wYXlsb2FkKHdyYik7CisJaW50IHN0YXR1cyA9IDA7CisKKwlzcGluX2xvY2soJmN0cmwtPm1ib3hfbG9jayk7CisJbWVtc2V0KHdyYiwgMCwgc2l6ZW9mKCp3cmIpKTsKKworCWJlX3dyYl9oZHJfcHJlcGFyZSh3cmIsIHNpemVvZigqcmVxKSwgdHJ1ZSwgMCk7CisKKwliZV9jbWRfaGRyX3ByZXBhcmUoJnJlcS0+aGRyLCBDTURfU1VCU1lTVEVNX0NPTU1PTiwKKwkJCSAgIE9QQ09ERV9DT01NT05fUVVFUllfRklSTVdBUkVfQ09ORklHLCBzaXplb2YoKnJlcSkpOworCisJc3RhdHVzID0gYmVfbWJveF9ub3RpZnkoY3RybCk7CisJaWYgKCFzdGF0dXMpIHsKKwkJc3RydWN0IGJlX2Z3X2NmZyAqcGZ3X2NmZzsKKwkJcGZ3X2NmZyA9IHJlcTsKKwkJcGhiYS0+ZndfY29uZmlnLnBoeXNfcG9ydCA9IHBmd19jZmctPnBoeXNfcG9ydDsKKwkJcGhiYS0+ZndfY29uZmlnLmlzY3NpX2ljZF9zdGFydCA9CisJCQkJCXBmd19jZmctPnVscFswXS5pY2RfYmFzZTsKKwkJcGhiYS0+ZndfY29uZmlnLmlzY3NpX2ljZF9jb3VudCA9CisJCQkJCXBmd19jZmctPnVscFswXS5pY2RfY291bnQ7CisJCXBoYmEtPmZ3X2NvbmZpZy5pc2NzaV9jaWRfc3RhcnQgPQorCQkJCQlwZndfY2ZnLT51bHBbMF0uc3FfYmFzZTsKKwkJcGhiYS0+ZndfY29uZmlnLmlzY3NpX2NpZF9jb3VudCA9CisJCQkJCXBmd19jZmctPnVscFswXS5zcV9jb3VudDsKKwl9IGVsc2UgeworCQlzaG9zdF9wcmludGsoS0VSTl9XQVJOSU5HLCBwaGJhLT5zaG9zdCwKKwkJCSAgICAgIkZhaWxlZCBpbiBtZ210X2dldF9md19jb25maWcgXG4iKTsKKwl9CisKKwlzcGluX3VubG9jaygmY3RybC0+bWJveF9sb2NrKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCit1bnNpZ25lZCBjaGFyIG1nbXRfY2hlY2tfc3VwcG9ydGVkX2Z3KHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwpCit7CisJc3RydWN0IGJlX2RtYV9tZW0gbm9uZW1iX2NtZDsKKwlzdHJ1Y3QgYmVfbWNjX3dyYiAqd3JiID0gd3JiX2Zyb21fbWJveCgmY3RybC0+bWJveF9tZW0pOworCXN0cnVjdCBiZV9tZ210X2NvbnRyb2xsZXJfYXR0cmlidXRlcyAqcmVxOworCXN0cnVjdCBiZV9zZ2UgKnNnZSA9IG5vbmVtYmVkZGVkX3NnbCh3cmIpOworCWludCBzdGF0dXMgPSAwOworCisJbm9uZW1iX2NtZC52YSA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGN0cmwtPnBkZXYsCisJCQkJc2l6ZW9mKHN0cnVjdCBiZV9tZ210X2NvbnRyb2xsZXJfYXR0cmlidXRlcyksCisJCQkJJm5vbmVtYl9jbWQuZG1hKTsKKwlpZiAobm9uZW1iX2NtZC52YSA9PSBOVUxMKSB7CisJCVNFX0RFQlVHKERCR19MVkxfMSwKKwkJCSAiRmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgbWdtdF9jaGVja19zdXBwb3J0ZWRfZnciCisJCQkgIlxuIik7CisJCXJldHVybiAtMTsKKwl9CisJbm9uZW1iX2NtZC5zaXplID0gc2l6ZW9mKHN0cnVjdCBiZV9tZ210X2NvbnRyb2xsZXJfYXR0cmlidXRlcyk7CisJcmVxID0gbm9uZW1iX2NtZC52YTsKKwlzcGluX2xvY2soJmN0cmwtPm1ib3hfbG9jayk7CisJbWVtc2V0KHdyYiwgMCwgc2l6ZW9mKCp3cmIpKTsKKwliZV93cmJfaGRyX3ByZXBhcmUod3JiLCBzaXplb2YoKnJlcSksIGZhbHNlLCAxKTsKKwliZV9jbWRfaGRyX3ByZXBhcmUoJnJlcS0+aGRyLCBDTURfU1VCU1lTVEVNX0NPTU1PTiwKKwkJCSAgIE9QQ09ERV9DT01NT05fR0VUX0NOVExfQVRUUklCVVRFUywgc2l6ZW9mKCpyZXEpKTsKKwlzZ2UtPnBhX2hpID0gY3B1X3RvX2xlMzIodXBwZXJfMzJfYml0cyhub25lbWJfY21kLmRtYSkpOworCXNnZS0+cGFfbG8gPSBjcHVfdG9fbGUzMihub25lbWJfY21kLmRtYSAmIDB4RkZGRkZGRkYpOworCXNnZS0+bGVuID0gY3B1X3RvX2xlMzIobm9uZW1iX2NtZC5zaXplKTsKKworCXN0YXR1cyA9IGJlX21ib3hfbm90aWZ5KGN0cmwpOworCWlmICghc3RhdHVzKSB7CisJCXN0cnVjdCBiZV9tZ210X2NvbnRyb2xsZXJfYXR0cmlidXRlc19yZXNwICpyZXNwID0gbm9uZW1iX2NtZC52YTsKKwkJU0VfREVCVUcoREJHX0xWTF84LCAiRmlybXdhcmUgdmVyc2lvbiBvZiBDTUQ6ICVzXG4iLAorCQkJcmVzcC0+cGFyYW1zLmhiYV9hdHRyaWJzLmZsYXNocm9tX3ZlcnNpb25fc3RyaW5nKTsKKwkJU0VfREVCVUcoREJHX0xWTF84LCAiRmlybXdhcmUgdmVyc2lvbiBpcyA6ICVzXG4iLAorCQkJcmVzcC0+cGFyYW1zLmhiYV9hdHRyaWJzLmZpcm13YXJlX3ZlcnNpb25fc3RyaW5nKTsKKwkJU0VfREVCVUcoREJHX0xWTF84LAorCQkJIkRldmVsb3BlciBCdWlsZCwgbm90IHBlcmZvcm1pbmcgdmVyc2lvbiBjaGVjay4uLlxuIik7CisKKwl9IGVsc2UKKwkJU0VfREVCVUcoREJHX0xWTF8xLCAiIEZhaWxlZCBpbiBtZ210X2NoZWNrX3N1cHBvcnRlZF9md1xuIik7CisJaWYgKG5vbmVtYl9jbWQudmEpCisJCXBjaV9mcmVlX2NvbnNpc3RlbnQoY3RybC0+cGRldiwgbm9uZW1iX2NtZC5zaXplLAorCQkJCSAgICBub25lbWJfY21kLnZhLCBub25lbWJfY21kLmRtYSk7CisKKwlzcGluX3VubG9jaygmY3RybC0+bWJveF9sb2NrKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCit1bnNpZ25lZCBjaGFyIG1nbXRfZXBmd19jbGVhbnVwKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSwgdW5zaWduZWQgc2hvcnQgY2h1dGUpCit7CisJc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCA9ICZwaGJhLT5jdHJsOworCXN0cnVjdCBiZV9tY2Nfd3JiICp3cmIgPSB3cmJfZnJvbV9tYm94KCZjdHJsLT5tYm94X21lbSk7CisJc3RydWN0IGlzY3NpX2NsZWFudXBfcmVxICpyZXEgPSBlbWJlZGRlZF9wYXlsb2FkKHdyYik7CisJaW50IHN0YXR1cyA9IDA7CisKKwlzcGluX2xvY2soJmN0cmwtPm1ib3hfbG9jayk7CisJbWVtc2V0KHdyYiwgMCwgc2l6ZW9mKCp3cmIpKTsKKworCWJlX3dyYl9oZHJfcHJlcGFyZSh3cmIsIHNpemVvZigqcmVxKSwgdHJ1ZSwgMCk7CisJYmVfY21kX2hkcl9wcmVwYXJlKCZyZXEtPmhkciwgQ01EX1NVQlNZU1RFTV9JU0NTSSwKKwkJCSAgIE9QQ09ERV9DT01NT05fSVNDU0lfQ0xFQU5VUCwgc2l6ZW9mKCpyZXEpKTsKKworCXJlcS0+Y2h1dGUgPSBjaHV0ZTsKKwlyZXEtPmhkcl9yaW5nX2lkID0gMDsKKwlyZXEtPmRhdGFfcmluZ19pZCA9IDA7CisKKwlzdGF0dXMgPSBiZV9tYm94X25vdGlmeShjdHJsKTsKKwlpZiAoc3RhdHVzKQorCQlzaG9zdF9wcmludGsoS0VSTl9XQVJOSU5HLCBwaGJhLT5zaG9zdCwKKwkJCSAgICAgIiBtZ210X2VwZndfY2xlYW51cCAsIEZBSUxFRFxuIik7CisJc3Bpbl91bmxvY2soJmN0cmwtPm1ib3hfbG9jayk7CisJcmV0dXJuIHN0YXR1czsKK30KKwordW5zaWduZWQgY2hhciBtZ210X2ludmFsaWRhdGVfaWNkcyhzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEsCisJCQkJICAgdW5zaWduZWQgaW50IGljZCwgdW5zaWduZWQgaW50IGNpZCkKK3sKKwlzdHJ1Y3QgYmVfZG1hX21lbSBub25lbWJfY21kOworCXN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwgPSAmcGhiYS0+Y3RybDsKKwlzdHJ1Y3QgYmVfbWNjX3dyYiAqd3JiID0gd3JiX2Zyb21fbWJveCgmY3RybC0+bWJveF9tZW0pOworCXN0cnVjdCBiZV9zZ2UgKnNnZSA9IG5vbmVtYmVkZGVkX3NnbCh3cmIpOworCXN0cnVjdCBpbnZhbGlkYXRlX2NvbW1hbmRzX3BhcmFtc19pbiAqcmVxOworCWludCBzdGF0dXMgPSAwOworCisJbm9uZW1iX2NtZC52YSA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGN0cmwtPnBkZXYsCisJCQkJc2l6ZW9mKHN0cnVjdCBpbnZhbGlkYXRlX2NvbW1hbmRzX3BhcmFtc19pbiksCisJCQkJJm5vbmVtYl9jbWQuZG1hKTsKKwlpZiAobm9uZW1iX2NtZC52YSA9PSBOVUxMKSB7CisJCVNFX0RFQlVHKERCR19MVkxfMSwKKwkJCSAiRmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IiCisJCQkgIm1nbXRfaW52YWxpZGF0ZV9pY2RzIFxuIik7CisJCXJldHVybiAtMTsKKwl9CisJbm9uZW1iX2NtZC5zaXplID0gc2l6ZW9mKHN0cnVjdCBpbnZhbGlkYXRlX2NvbW1hbmRzX3BhcmFtc19pbik7CisJcmVxID0gbm9uZW1iX2NtZC52YTsKKwlzcGluX2xvY2soJmN0cmwtPm1ib3hfbG9jayk7CisJbWVtc2V0KHdyYiwgMCwgc2l6ZW9mKCp3cmIpKTsKKworCWJlX3dyYl9oZHJfcHJlcGFyZSh3cmIsIHNpemVvZigqcmVxKSwgZmFsc2UsIDEpOworCWJlX2NtZF9oZHJfcHJlcGFyZSgmcmVxLT5oZHIsIENNRF9TVUJTWVNURU1fSVNDU0ksCisJCQlPUENPREVfQ09NTU9OX0lTQ1NJX0VSUk9SX1JFQ09WRVJZX0lOVkFMSURBVEVfQ09NTUFORFMsCisJCQlzaXplb2YoKnJlcSkpOworCXJlcS0+cmVmX2hhbmRsZSA9IDA7CisJcmVxLT5jbGVhbnVwX3R5cGUgPSBDTURfSVNDU0lfQ09NTUFORF9JTlZBTElEQVRFOworCXJlcS0+aWNkX2NvdW50ID0gMDsKKwlyZXEtPnRhYmxlW3JlcS0+aWNkX2NvdW50XS5pY2QgPSBpY2Q7CisJcmVxLT50YWJsZVtyZXEtPmljZF9jb3VudF0uY2lkID0gY2lkOworCXNnZS0+cGFfaGkgPSBjcHVfdG9fbGUzMih1cHBlcl8zMl9iaXRzKG5vbmVtYl9jbWQuZG1hKSk7CisJc2dlLT5wYV9sbyA9IGNwdV90b19sZTMyKG5vbmVtYl9jbWQuZG1hICYgMHhGRkZGRkZGRik7CisJc2dlLT5sZW4gPSBjcHVfdG9fbGUzMihub25lbWJfY21kLnNpemUpOworCisJc3RhdHVzID0gYmVfbWJveF9ub3RpZnkoY3RybCk7CisJaWYgKHN0YXR1cykKKwkJU0VfREVCVUcoREJHX0xWTF8xLCAiSUNEUyBJbnZhbGlkYXRpb24gRmFpbGVkXG4iKTsKKwlzcGluX3VubG9jaygmY3RybC0+bWJveF9sb2NrKTsKKwlpZiAobm9uZW1iX2NtZC52YSkKKwkJcGNpX2ZyZWVfY29uc2lzdGVudChjdHJsLT5wZGV2LCBub25lbWJfY21kLnNpemUsCisJCQkJICAgIG5vbmVtYl9jbWQudmEsIG5vbmVtYl9jbWQuZG1hKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCit1bnNpZ25lZCBjaGFyIG1nbXRfaW52YWxpZGF0ZV9jb25uZWN0aW9uKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSwKKwkJCQkJIHN0cnVjdCBiZWlzY3NpX2VuZHBvaW50ICpiZWlzY3NpX2VwLAorCQkJCQkgdW5zaWduZWQgc2hvcnQgY2lkLAorCQkJCQkgdW5zaWduZWQgc2hvcnQgaXNzdWVfcmVzZXQsCisJCQkJCSB1bnNpZ25lZCBzaG9ydCBzYXZlY2ZnX2ZsYWcpCit7CisJc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCA9ICZwaGJhLT5jdHJsOworCXN0cnVjdCBiZV9tY2Nfd3JiICp3cmIgPSB3cmJfZnJvbV9tYm94KCZjdHJsLT5tYm94X21lbSk7CisJc3RydWN0IGlzY3NpX2ludmFsaWRhdGVfY29ubmVjdGlvbl9wYXJhbXNfaW4gKnJlcSA9CisJCQkJCQllbWJlZGRlZF9wYXlsb2FkKHdyYik7CisJaW50IHN0YXR1cyA9IDA7CisKKwlzcGluX2xvY2soJmN0cmwtPm1ib3hfbG9jayk7CisJbWVtc2V0KHdyYiwgMCwgc2l6ZW9mKCp3cmIpKTsKKworCWJlX3dyYl9oZHJfcHJlcGFyZSh3cmIsIHNpemVvZigqcmVxKSwgdHJ1ZSwgMCk7CisJYmVfY21kX2hkcl9wcmVwYXJlKCZyZXEtPmhkciwgQ01EX1NVQlNZU1RFTV9JU0NTSV9JTkksCisJCQkgICBPUENPREVfSVNDU0lfSU5JX0RSSVZFUl9JTlZBTElEQVRFX0NPTk5FQ1RJT04sCisJCQkgICBzaXplb2YoKnJlcSkpOworCXJlcS0+c2Vzc2lvbl9oYW5kbGUgPSBiZWlzY3NpX2VwLT5md19oYW5kbGU7CisJcmVxLT5jaWQgPSBjaWQ7CisJaWYgKGlzc3VlX3Jlc2V0KQorCQlyZXEtPmNsZWFudXBfdHlwZSA9IENNRF9JU0NTSV9DT05ORUNUSU9OX0lTU1VFX1RDUF9SU1Q7CisJZWxzZQorCQlyZXEtPmNsZWFudXBfdHlwZSA9IENNRF9JU0NTSV9DT05ORUNUSU9OX0lOVkFMSURBVEU7CisJcmVxLT5zYXZlX2NmZyA9IHNhdmVjZmdfZmxhZzsKKwlzdGF0dXMgPSBiZV9tYm94X25vdGlmeShjdHJsKTsKKwlpZiAoc3RhdHVzKQorCQlTRV9ERUJVRyhEQkdfTFZMXzEsICJJbnZhbGlkYXRpb24gRmFpbGVkXG4iKTsKKworCXNwaW5fdW5sb2NrKCZjdHJsLT5tYm94X2xvY2spOworCXJldHVybiBzdGF0dXM7Cit9CisKK3Vuc2lnbmVkIGNoYXIgbWdtdF91cGxvYWRfY29ubmVjdGlvbihzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEsCisJCQkJdW5zaWduZWQgc2hvcnQgY2lkLCB1bnNpZ25lZCBpbnQgdXBsb2FkX2ZsYWcpCit7CisJc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCA9ICZwaGJhLT5jdHJsOworCXN0cnVjdCBiZV9tY2Nfd3JiICp3cmIgPSB3cmJfZnJvbV9tYm94KCZjdHJsLT5tYm94X21lbSk7CisJc3RydWN0IHRjcF91cGxvYWRfcGFyYW1zX2luICpyZXEgPSBlbWJlZGRlZF9wYXlsb2FkKHdyYik7CisJaW50IHN0YXR1cyA9IDA7CisKKwlzcGluX2xvY2soJmN0cmwtPm1ib3hfbG9jayk7CisJbWVtc2V0KHdyYiwgMCwgc2l6ZW9mKCp3cmIpKTsKKworCWJlX3dyYl9oZHJfcHJlcGFyZSh3cmIsIHNpemVvZigqcmVxKSwgdHJ1ZSwgMCk7CisJYmVfY21kX2hkcl9wcmVwYXJlKCZyZXEtPmhkciwgQ01EX0NPTU1PTl9UQ1BfVVBMT0FELAorCQkJICAgT1BDT0RFX0NPTU1PTl9UQ1BfVVBMT0FELCBzaXplb2YoKnJlcSkpOworCXJlcS0+aWQgPSAodW5zaWduZWQgc2hvcnQpY2lkOworCXJlcS0+dXBsb2FkX3R5cGUgPSAodW5zaWduZWQgY2hhcil1cGxvYWRfZmxhZzsKKwlzdGF0dXMgPSBiZV9tYm94X25vdGlmeShjdHJsKTsKKwlpZiAoc3RhdHVzKQorCQlTRV9ERUJVRyhEQkdfTFZMXzEsICJtZ210X3VwbG9hZF9jb25uZWN0aW9uIEZhaWxlZFxuIik7CisJc3Bpbl91bmxvY2soJmN0cmwtPm1ib3hfbG9jayk7CisJcmV0dXJuIHN0YXR1czsKK30KKworaW50IG1nbXRfb3Blbl9jb25uZWN0aW9uKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSwKKwkJCSBzdHJ1Y3Qgc29ja2FkZHIgKmRzdF9hZGRyLAorCQkJIHN0cnVjdCBiZWlzY3NpX2VuZHBvaW50ICpiZWlzY3NpX2VwKQoreworCXN0cnVjdCBod2lfY29udHJvbGxlciAqcGh3aV9jdHJscjsKKwlzdHJ1Y3QgaHdpX2NvbnRleHRfbWVtb3J5ICpwaHdpX2NvbnRleHQ7CisJc3RydWN0IHNvY2thZGRyX2luICpkYWRkcl9pbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilkc3RfYWRkcjsKKwlzdHJ1Y3Qgc29ja2FkZHJfaW42ICpkYWRkcl9pbjYgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKWRzdF9hZGRyOworCXN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwgPSAmcGhiYS0+Y3RybDsKKwlzdHJ1Y3QgYmVfbWNjX3dyYiAqd3JiID0gd3JiX2Zyb21fbWJveCgmY3RybC0+bWJveF9tZW0pOworCXN0cnVjdCB0Y3BfY29ubmVjdF9hbmRfb2ZmbG9hZF9pbiAqcmVxID0gZW1iZWRkZWRfcGF5bG9hZCh3cmIpOworCXVuc2lnbmVkIHNob3J0IGRlZl9oZHJfaWQ7CisJdW5zaWduZWQgc2hvcnQgZGVmX2RhdGFfaWQ7CisJc3RydWN0IHBoeXNfYWRkciB0ZW1wbGF0ZV9hZGRyZXNzID0geyAwLCAwIH07CisJc3RydWN0IHBoeXNfYWRkciAqcHRlbXBsYXRlX2FkZHJlc3M7CisJaW50IHN0YXR1cyA9IDA7CisJdW5zaWduZWQgc2hvcnQgY2lkID0gYmVpc2NzaV9lcC0+ZXBfY2lkOworCisJcGh3aV9jdHJsciA9IHBoYmEtPnBod2lfY3RybHI7CisJcGh3aV9jb250ZXh0ID0gcGh3aV9jdHJsci0+cGh3aV9jdHh0OworCWRlZl9oZHJfaWQgPSAodW5zaWduZWQgc2hvcnQpSFdJX0dFVF9ERUZfSERSUV9JRChwaGJhKTsKKwlkZWZfZGF0YV9pZCA9ICh1bnNpZ25lZCBzaG9ydClIV0lfR0VUX0RFRl9CVUZRX0lEKHBoYmEpOworCisJcHRlbXBsYXRlX2FkZHJlc3MgPSAmdGVtcGxhdGVfYWRkcmVzczsKKwlJU0NTSV9HRVRfUERVX1RFTVBMQVRFX0FERFJFU1MocGhiYSwgcHRlbXBsYXRlX2FkZHJlc3MpOworCXNwaW5fbG9jaygmY3RybC0+bWJveF9sb2NrKTsKKwltZW1zZXQod3JiLCAwLCBzaXplb2YoKndyYikpOworCisJYmVfd3JiX2hkcl9wcmVwYXJlKHdyYiwgc2l6ZW9mKCpyZXEpLCB0cnVlLCAwKTsKKwliZV9jbWRfaGRyX3ByZXBhcmUoJnJlcS0+aGRyLCBDTURfU1VCU1lTVEVNX0lTQ1NJLAorCQkJICAgT1BDT0RFX0NPTU1PTl9JU0NTSV9UQ1BfQ09OTkVDVF9BTkRfT0ZGTE9BRCwKKwkJCSAgIHNpemVvZigqcmVxKSk7CisJaWYgKGRzdF9hZGRyLT5zYV9mYW1pbHkgPT0gUEZfSU5FVCkgeworCQlfX2JlMzIgc19hZGRyID0gZGFkZHJfaW4tPnNpbl9hZGRyLnNfYWRkcjsKKwkJcmVxLT5pcF9hZGRyZXNzLmlwX3R5cGUgPSBCRTJfSVBWNDsKKwkJcmVxLT5pcF9hZGRyZXNzLmlwX2FkZHJlc3NbMF0gPSBzX2FkZHIgJiAweDAwMDAwMGZmOworCQlyZXEtPmlwX2FkZHJlc3MuaXBfYWRkcmVzc1sxXSA9IChzX2FkZHIgJiAweDAwMDBmZjAwKSA+PiA4OworCQlyZXEtPmlwX2FkZHJlc3MuaXBfYWRkcmVzc1syXSA9IChzX2FkZHIgJiAweDAwZmYwMDAwKSA+PiAxNjsKKwkJcmVxLT5pcF9hZGRyZXNzLmlwX2FkZHJlc3NbM10gPSAoc19hZGRyICYgMHhmZjAwMDAwMCkgPj4gMjQ7CisJCXJlcS0+dGNwX3BvcnQgPSBudG9ocyhkYWRkcl9pbi0+c2luX3BvcnQpOworCQliZWlzY3NpX2VwLT5kc3RfYWRkciA9IGRhZGRyX2luLT5zaW5fYWRkci5zX2FkZHI7CisJCWJlaXNjc2lfZXAtPmRzdF90Y3Bwb3J0ID0gbnRvaHMoZGFkZHJfaW4tPnNpbl9wb3J0KTsKKwkJYmVpc2NzaV9lcC0+aXBfdHlwZSA9IEJFMl9JUFY0OworCX0gZWxzZSBpZiAoZHN0X2FkZHItPnNhX2ZhbWlseSA9PSBQRl9JTkVUNikgeworCQlyZXEtPmlwX2FkZHJlc3MuaXBfdHlwZSA9IEJFMl9JUFY2OworCQltZW1jcHkoJnJlcS0+aXBfYWRkcmVzcy5pcF9hZGRyZXNzLAorCQkgICAgICAgJmRhZGRyX2luNi0+c2luNl9hZGRyLmluNl91LnU2X2FkZHI4LCAxNik7CisJCXJlcS0+dGNwX3BvcnQgPSBudG9ocyhkYWRkcl9pbjYtPnNpbjZfcG9ydCk7CisJCWJlaXNjc2lfZXAtPmRzdF90Y3Bwb3J0ID0gbnRvaHMoZGFkZHJfaW42LT5zaW42X3BvcnQpOworCQltZW1jcHkoJmJlaXNjc2lfZXAtPmRzdDZfYWRkciwKKwkJICAgICAgICZkYWRkcl9pbjYtPnNpbjZfYWRkci5pbjZfdS51Nl9hZGRyOCwgMTYpOworCQliZWlzY3NpX2VwLT5pcF90eXBlID0gQkUyX0lQVjY7CisJfSBlbHNleworCQlzaG9zdF9wcmludGsoS0VSTl9FUlIsIHBoYmEtPnNob3N0LCAidW5rbm93biBhZGRyIGZhbWlseSAlZFxuIiwKKwkJCSAgICAgZHN0X2FkZHItPnNhX2ZhbWlseSk7CisJCXNwaW5fdW5sb2NrKCZjdHJsLT5tYm94X2xvY2spOworCQlyZXR1cm4gLUVJTlZBTDsKKworCX0KKwlyZXEtPmNpZCA9IGNpZDsKKwlyZXEtPmNxX2lkID0gcGh3aV9jb250ZXh0LT5iZV9jcS5pZDsKKwlyZXEtPmRlZnFfaWQgPSBkZWZfaGRyX2lkOworCXJlcS0+aGRyX3JpbmdfaWQgPSBkZWZfaGRyX2lkOworCXJlcS0+ZGF0YV9yaW5nX2lkID0gZGVmX2RhdGFfaWQ7CisJcmVxLT5kb19vZmZsb2FkID0gMTsKKwlyZXEtPmRhdGFvdXRfdGVtcGxhdGVfcGEubG8gPSBwdGVtcGxhdGVfYWRkcmVzcy0+bG87CisJcmVxLT5kYXRhb3V0X3RlbXBsYXRlX3BhLmhpID0gcHRlbXBsYXRlX2FkZHJlc3MtPmhpOworCXN0YXR1cyA9IGJlX21ib3hfbm90aWZ5KGN0cmwpOworCWlmICghc3RhdHVzKSB7CisJCXN0cnVjdCBpc2NzaV9lbmRwb2ludCAqZXA7CisJCXN0cnVjdCB0Y3BfY29ubmVjdF9hbmRfb2ZmbG9hZF9vdXQgKnB0Y3BjbmN0X291dCA9CisJCQkJCQkJZW1iZWRkZWRfcGF5bG9hZCh3cmIpOworCisJCWVwID0gcGhiYS0+ZXBfYXJyYXlbcHRjcGNuY3Rfb3V0LT5jaWRdOworCQliZWlzY3NpX2VwID0gZXAtPmRkX2RhdGE7CisJCWJlaXNjc2lfZXAtPmZ3X2hhbmRsZSA9IDA7CisJCWJlaXNjc2lfZXAtPmNpZF92bGQgPSAxOworCQlTRV9ERUJVRyhEQkdfTFZMXzgsICJtZ210X29wZW5fY29ubmVjdGlvbiBTdWNjZXNzXG4iKTsKKwl9IGVsc2UKKwkJU0VfREVCVUcoREJHX0xWTF8xLCAibWdtdF9vcGVuX2Nvbm5lY3Rpb24gRmFpbGVkXG4iKTsKKwlzcGluX3VubG9jaygmY3RybC0+bWJveF9sb2NrKTsKKwlyZXR1cm4gc3RhdHVzOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX21nbXQuaCBiL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9tZ210LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDBlODE2ZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9tZ210LmgKQEAgLTAsMCArMSwyNDkgQEAKKy8qKgorICogQ29weXJpZ2h0IChDKSAyMDA1IC0gMjAwOSBTZXJ2ZXJFbmdpbmVzCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMgorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBUaGUgZnVsbCBHTlUgR2VuZXJhbAorICogUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlIGZpbGUgY2FsbGVkIENPUFlJTkcuCisgKgorICogV3JpdHRlbiBieTogSmF5YW1vaGFuIEthbGxpY2thbCAoamF5YW1vaGFua0BzZXJ2ZXJlbmdpbmVzLmNvbSkKKyAqCisgKiBDb250YWN0IEluZm9ybWF0aW9uOgorICogbGludXgtZHJpdmVyc0BzZXJ2ZXJlbmdpbmVzLmNvbQorICoKKyAqIFNlcnZlckVuZ2luZXMKKyAqIDIwOSBOLiBGYWlyIE9ha3MgQXZlCisgKiBTdW5ueXZhbGUsIENBIDk0MDg1CisgKgorICovCisKKyNpZm5kZWYgX0JFSVNDU0lfTUdNVF8KKyNkZWZpbmUgX0JFSVNDU0lfTUdNVF8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgImJlX2lzY3NpLmgiCisjaW5jbHVkZSAiYmVfbWFpbi5oIgorCisvKioKKyAqIFBzZXVkbyBhbWFwIGRlZmluaXRpb24gaW4gd2hpY2ggZWFjaCBiaXQgb2YgdGhlIGFjdHVhbCBzdHJ1Y3R1cmUgaXMgZGVmaW5lZAorICogYXMgYSBieXRlOiB1c2VkIHRvIGNhbGN1bGF0ZSBvZmZzZXQvc2hpZnQvbWFzayBvZiBlYWNoIGZpZWxkCisgKi8KK3N0cnVjdCBhbWFwX21jY19zZ2UgeworCXU4IHBhX2xvWzMyXTsJCS8qIGR3b3JkIDAgKi8KKwl1OCBwYV9oaVszMl07CQkvKiBkd29yZCAxICovCisJdTggbGVuZ3RoWzMyXTsJCS8qIERXT1JEIDIgKi8KK30gX19wYWNrZWQ7CisKKy8qKgorICogUHNldWRvIGFtYXAgZGVmaW5pdGlvbiBpbiB3aGljaCBlYWNoIGJpdCBvZiB0aGUgYWN0dWFsIHN0cnVjdHVyZSBpcyBkZWZpbmVkCisgKiBhcyBhIGJ5dGU6IHVzZWQgdG8gY2FsY3VsYXRlIG9mZnNldC9zaGlmdC9tYXNrIG9mIGVhY2ggZmllbGQKKyAqLworc3RydWN0IGFtYXBfbWNjX3dyYl9wYXlsb2FkIHsKKwl1bmlvbiB7CisJCXN0cnVjdCBhbWFwX21jY19zZ2Ugc2dsWzE5XTsKKwkJdTggZW1iZWRkZWRbNTkgKiAzMl07CS8qIERXT1JEUyA1NyB0byAxMTUgKi8KKwl9IHU7Cit9IF9fcGFja2VkOworCisvKioKKyAqIFBzZXVkbyBhbWFwIGRlZmluaXRpb24gaW4gd2hpY2ggZWFjaCBiaXQgb2YgdGhlIGFjdHVhbCBzdHJ1Y3R1cmUgaXMgZGVmaW5lZAorICogYXMgYSBieXRlOiB1c2VkIHRvIGNhbGN1bGF0ZSBvZmZzZXQvc2hpZnQvbWFzayBvZiBlYWNoIGZpZWxkCisgKi8KK3N0cnVjdCBhbWFwX21jY193cmIgeworCXU4IGVtYmVkZGVkOwkJLyogRFdPUkQgMCAqLworCXU4IHJzdmQwWzJdOwkJLyogRFdPUkQgMCAqLworCXU4IHNnZV9jb3VudFs1XTsJLyogRFdPUkQgMCAqLworCXU4IHJzdmQxWzE2XTsJCS8qIERXT1JEIDAgKi8KKwl1OCBzcGVjaWFsWzhdOwkJLyogRFdPUkQgMCAqLworCXU4IHBheWxvYWRfbGVuZ3RoWzMyXTsKKwl1OCB0YWdbNjRdOwkJLyogRFdPUkQgMiAqLworCXU4IHJzdmQyWzMyXTsJCS8qIERXT1JEIDQgKi8KKwlzdHJ1Y3QgYW1hcF9tY2Nfd3JiX3BheWxvYWQgcGF5bG9hZDsKK307CisKK3N0cnVjdCBtY2Nfc2dlIHsKKwl1MzIgcGFfbG87CQkvKiBkd29yZCAwICovCisJdTMyIHBhX2hpOwkJLyogZHdvcmQgMSAqLworCXUzMiBsZW5ndGg7CQkvKiBEV09SRCAyICovCit9IF9fcGFja2VkOworCitzdHJ1Y3QgbWNjX3dyYl9wYXlsb2FkIHsKKwl1bmlvbiB7CisJCXN0cnVjdCBtY2Nfc2dlIHNnbFsxOV07CisJCXUzMiBlbWJlZGRlZFs1OV07CS8qIERXT1JEUyA1NyB0byAxMTUgKi8KKwl9IHU7Cit9IF9fcGFja2VkOworCisjZGVmaW5lIE1DQ19XUkJfRU1CRURERURfTUFTSyAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisKK3N0cnVjdCBtY2Nfd3JiIHsKKwl1MzIgZHdbMF07CQkvKiBEV09SRCAwICovCisJdTMyIHBheWxvYWRfbGVuZ3RoOworCXUzMiB0YWdbMl07CQkvKiBEV09SRCAyICovCisJdTMyIHJzdmQyWzFdOwkJLyogRFdPUkQgNCAqLworCXN0cnVjdCBtY2Nfd3JiX3BheWxvYWQgcGF5bG9hZDsKK307CisKK3Vuc2lnbmVkIGNoYXIgbWdtdF9lcGZ3X2NsZWFudXAoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhLCB1bnNpZ25lZCBzaG9ydCBjaHV0ZSk7CitpbnQgbWdtdF9vcGVuX2Nvbm5lY3Rpb24oc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhLCBzdHJ1Y3Qgc29ja2FkZHIgKmRzdF9hZGRyLAorCQkJIHN0cnVjdCBiZWlzY3NpX2VuZHBvaW50ICpiZWlzY3NpX2VwKTsKKwordW5zaWduZWQgY2hhciBtZ210X3VwbG9hZF9jb25uZWN0aW9uKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSwKKwkJCQkgICAgIHVuc2lnbmVkIHNob3J0IGNpZCwKKwkJCQkgICAgIHVuc2lnbmVkIGludCB1cGxvYWRfZmxhZyk7Cit1bnNpZ25lZCBjaGFyIG1nbXRfaW52YWxpZGF0ZV9pY2RzKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSwKKwkJCQkgICB1bnNpZ25lZCBpbnQgaWNkLCB1bnNpZ25lZCBpbnQgY2lkKTsKKworc3RydWN0IGlzY3NpX2ludmFsaWRhdGVfY29ubmVjdGlvbl9wYXJhbXNfaW4geworCXN0cnVjdCBiZV9jbWRfcmVxX2hkciBoZHI7CisJdW5zaWduZWQgaW50IHNlc3Npb25faGFuZGxlOworCXVuc2lnbmVkIHNob3J0IGNpZDsKKwl1bnNpZ25lZCBzaG9ydCB1bnVzZWQ7CisJdW5zaWduZWQgc2hvcnQgY2xlYW51cF90eXBlOworCXVuc2lnbmVkIHNob3J0IHNhdmVfY2ZnOworfSBfX3BhY2tlZDsKKworc3RydWN0IGlzY3NpX2ludmFsaWRhdGVfY29ubmVjdGlvbl9wYXJhbXNfb3V0IHsKKwl1bnNpZ25lZCBpbnQgc2Vzc2lvbl9oYW5kbGU7CisJdW5zaWduZWQgc2hvcnQgY2lkOworCXVuc2lnbmVkIHNob3J0IHVudXNlZDsKK30gX19wYWNrZWQ7CisKK3VuaW9uIGlzY3NpX2ludmFsaWRhdGVfY29ubmVjdGlvbl9wYXJhbXMgeworCXN0cnVjdCBpc2NzaV9pbnZhbGlkYXRlX2Nvbm5lY3Rpb25fcGFyYW1zX2luIHJlcXVlc3Q7CisJc3RydWN0IGlzY3NpX2ludmFsaWRhdGVfY29ubmVjdGlvbl9wYXJhbXNfb3V0IHJlc3BvbnNlOworfSBfX3BhY2tlZDsKKworc3RydWN0IGludmFsaWRhdGVfY29tbWFuZF90YWJsZSB7CisJdW5zaWduZWQgc2hvcnQgaWNkOworCXVuc2lnbmVkIHNob3J0IGNpZDsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBpbnZhbGlkYXRlX2NvbW1hbmRzX3BhcmFtc19pbiB7CisJc3RydWN0IGJlX2NtZF9yZXFfaGRyIGhkcjsKKwl1bnNpZ25lZCBpbnQgcmVmX2hhbmRsZTsKKwl1bnNpZ25lZCBpbnQgaWNkX2NvdW50OworCXN0cnVjdCBpbnZhbGlkYXRlX2NvbW1hbmRfdGFibGUgdGFibGVbMTI4XTsKKwl1bnNpZ25lZCBzaG9ydCBjbGVhbnVwX3R5cGU7CisJdW5zaWduZWQgc2hvcnQgdW51c2VkOworfSBfX3BhY2tlZDsKKworc3RydWN0IGludmFsaWRhdGVfY29tbWFuZHNfcGFyYW1zX291dCB7CisJdW5zaWduZWQgaW50IHJlZl9oYW5kbGU7CisJdW5zaWduZWQgaW50IGljZF9jb3VudDsKKwl1bnNpZ25lZCBpbnQgaWNkX3N0YXR1c1sxMjhdOworfSBfX3BhY2tlZDsKKwordW5pb24gaW52YWxpZGF0ZV9jb21tYW5kc19wYXJhbXMgeworCXN0cnVjdCBpbnZhbGlkYXRlX2NvbW1hbmRzX3BhcmFtc19pbiByZXF1ZXN0OworCXN0cnVjdCBpbnZhbGlkYXRlX2NvbW1hbmRzX3BhcmFtc19vdXQgcmVzcG9uc2U7Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgbWdtdF9oYmFfYXR0cmlidXRlcyB7CisJdTggZmxhc2hyb21fdmVyc2lvbl9zdHJpbmdbMzJdOworCXU4IG1hbnVmYWN0dXJlcl9uYW1lWzMyXTsKKwl1MzIgc3VwcG9ydGVkX21vZGVzOworCXU4IHNlZXByb21fdmVyc2lvbl9sbzsKKwl1OCBzZWVwcm9tX3ZlcnNpb25faGk7CisJdTggcnN2ZDBbMl07CisJdTMyIGZ3X2NtZF9kYXRhX3N0cnVjdF92ZXJzaW9uOworCXUzMiBlcF9md19kYXRhX3N0cnVjdF92ZXJzaW9uOworCXUzMiBmdXR1cmVfcmVzZXJ2ZWRbMTJdOworCXUzMiBkZWZhdWx0X2V4dGVuZGVkX3RpbWVvdXQ7CisJdTggY29udHJvbGxlcl9tb2RlbF9udW1iZXJbMzJdOworCXU4IGNvbnRyb2xsZXJfZGVzY3JpcHRpb25bNjRdOworCXU4IGNvbnRyb2xsZXJfc2VyaWFsX251bWJlclszMl07CisJdTggaXBfdmVyc2lvbl9zdHJpbmdbMzJdOworCXU4IGZpcm13YXJlX3ZlcnNpb25fc3RyaW5nWzMyXTsKKwl1OCBiaW9zX3ZlcnNpb25fc3RyaW5nWzMyXTsKKwl1OCByZWRib290X3ZlcnNpb25fc3RyaW5nWzMyXTsKKwl1OCBkcml2ZXJfdmVyc2lvbl9zdHJpbmdbMzJdOworCXU4IGZ3X29uX2ZsYXNoX3ZlcnNpb25fc3RyaW5nWzMyXTsKKwl1MzIgZnVuY3Rpb25hbGl0aWVzX3N1cHBvcnRlZDsKKwl1MTYgbWF4X2NkYmxlbmd0aDsKKwl1OCBhc2ljX3JldmlzaW9uOworCXU4IGdlbmVyYXRpb25hbF9ndWlkWzE2XTsKKwl1OCBoYmFfcG9ydF9jb3VudDsKKwl1MTYgZGVmYXVsdF9saW5rX2Rvd25fdGltZW91dDsKKwl1OCBpc2NzaV92ZXJfbWluX21heDsKKwl1OCBtdWx0aWZ1bmN0aW9uX2RldmljZTsKKwl1OCBjYWNoZV92YWxpZDsKKwl1OCBoYmFfc3RhdHVzOworCXU4IG1heF9kb21haW5zX3N1cHBvcnRlZDsKKwl1OCBwaHlfcG9ydDsKKwl1MzIgZmlybXdhcmVfcG9zdF9zdGF0dXM7CisJdTMyIGhiYV9tdHVbOF07CisJdTMyIGZ1dHVyZV91MzJbNF07Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgbWdtdF9jb250cm9sbGVyX2F0dHJpYnV0ZXMgeworCXN0cnVjdCBtZ210X2hiYV9hdHRyaWJ1dGVzIGhiYV9hdHRyaWJzOworCXUxNiBwY2lfdmVuZG9yX2lkOworCXUxNiBwY2lfZGV2aWNlX2lkOworCXUxNiBwY2lfc3ViX3ZlbmRvcl9pZDsKKwl1MTYgcGNpX3N1Yl9zeXN0ZW1faWQ7CisJdTggcGNpX2J1c19udW1iZXI7CisJdTggcGNpX2RldmljZV9udW1iZXI7CisJdTggcGNpX2Z1bmN0aW9uX251bWJlcjsKKwl1OCBpbnRlcmZhY2VfdHlwZTsKKwl1NjQgdW5pcXVlX2lkZW50aWZpZXI7CisJdTggbmV0ZmlsdGVyczsKKwl1OCByc3ZkMFszXTsKKwl1OCBmdXR1cmVfdTMyWzRdOworfSBfX3BhY2tlZDsKKworc3RydWN0IGJlX21nbXRfY29udHJvbGxlcl9hdHRyaWJ1dGVzIHsKKwlzdHJ1Y3QgYmVfY21kX3JlcV9oZHIgaGRyOworCXN0cnVjdCBtZ210X2NvbnRyb2xsZXJfYXR0cmlidXRlcyBwYXJhbXM7Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgYmVfbWdtdF9jb250cm9sbGVyX2F0dHJpYnV0ZXNfcmVzcCB7CisJc3RydWN0IGJlX2NtZF9yZXNwX2hkciBoZHI7CisJc3RydWN0IG1nbXRfY29udHJvbGxlcl9hdHRyaWJ1dGVzIHBhcmFtczsKK30gX19wYWNrZWQ7CisKKy8qIGNvbmZpZ3VyYXRpb24gbWFuYWdlbWVudCAqLworCisjZGVmaW5lIEdFVF9NR01UX0NPTlRST0xMRVJfV1MocGhiYSkgICAgKHBoYmEtPnBtZ210X3dzKQorCisvKiBNR01UIENNRCBmbGFncyAqLworCisjZGVmaW5lIE1HTVRfQ01ESF9GUkVFICAgICAgICAgICAgICAgICgxPDwwKQorCisvKiAgLS0tIE1HTVRfRVJST1JfQ09ERVMgLS0tICovCisvKiAgRXJyb3IgQ29kZXMgcmV0dXJuZWQgaW4gdGhlIHN0YXR1cyBmaWVsZCBvZiB0aGUgQ01EIHJlc3BvbnNlIGhlYWRlciAqLworI2RlZmluZSBNR01UX1NUQVRVU19TVUNDRVNTIDAJLyogVGhlIENNRCBjb21wbGV0ZWQgd2l0aG91dCBlcnJvcnMgKi8KKyNkZWZpbmUgTUdNVF9TVEFUVVNfRkFJTEVEIDEJLyogRXJyb3Igc3RhdHVzIGluIHRoZSBTdGF0dXMgZmllbGQgb2YgKi8KKwkJCQkvKiB0aGUgQ01EX1JFU1BPTlNFX0hFQURFUiAgKi8KKworI2RlZmluZSBJU0NTSV9HRVRfUERVX1RFTVBMQVRFX0FERFJFU1MocGMsIHBhKSB7XAorICAgIHBhLT5sbyA9IHBoYmEtPmluaXRfbWVtW0lTQ1NJX01FTV9HTE9CQUxfSEVBREVSXS5tZW1fYXJyYXlbMF0uXAorCQkJCQlidXNfYWRkcmVzcy51LmEzMi5hZGRyZXNzX2xvOyAgXAorICAgIHBhLT5oaSA9IHBoYmEtPmluaXRfbWVtW0lTQ1NJX01FTV9HTE9CQUxfSEVBREVSXS5tZW1fYXJyYXlbMF0uXAorCQkJCQlidXNfYWRkcmVzcy51LmEzMi5hZGRyZXNzX2hpOyAgXAorfQorCitzdHJ1Y3QgYmVpc2NzaV9lbmRwb2ludCB7CisJc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhOworCXN0cnVjdCBiZWlzY3NpX3Nlc3MgKnNlc3M7CisJc3RydWN0IGJlaXNjc2lfY29ubiAqY29ubjsKKwl1bnNpZ25lZCBzaG9ydCBpcF90eXBlOworCWNoYXIgZHN0Nl9hZGRyW0lTQ1NJX0FERFJFU1NfQlVGX0xFTl07CisJdW5zaWduZWQgbG9uZyBkc3RfYWRkcjsKKwl1bnNpZ25lZCBzaG9ydCBlcF9jaWQ7CisJdW5zaWduZWQgaW50IGZ3X2hhbmRsZTsKKwl1MTYgZHN0X3RjcHBvcnQ7CisJdTE2IGNpZF92bGQ7Cit9OworCit1bnNpZ25lZCBjaGFyIG1nbXRfZ2V0X2Z3X2NvbmZpZyhzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsLAorCQkJCSBzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEpOworCit1bnNpZ25lZCBjaGFyIG1nbXRfaW52YWxpZGF0ZV9jb25uZWN0aW9uKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSwKKwkJCQkJIHN0cnVjdCBiZWlzY3NpX2VuZHBvaW50ICpiZWlzY3NpX2VwLAorCQkJCQkgdW5zaWduZWQgc2hvcnQgY2lkLAorCQkJCQkgdW5zaWduZWQgc2hvcnQgaXNzdWVfcmVzZXQsCisJCQkJCSB1bnNpZ25lZCBzaG9ydCBzYXZlY2ZnX2ZsYWcpOworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL01ha2VmaWxlIGIvZHJpdmVycy9zY3NpL2JmYS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDYwMDk0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9NYWtlZmlsZQpAQCAtMCwwICsxLDE1IEBACitvYmotJChDT05GSUdfU0NTSV9CRkFfRkMpIDo9IGJmYS5vCisKK2JmYS15IDo9IGJmYWQubyBiZmFkX2ludHIubyBiZmFkX29zLm8gYmZhZF9pbS5vIGJmYWRfYXR0ci5vIGJmYWRfZndpbWcubworCitiZmEteSArPSBiZmFfY29yZS5vIGJmYV9pb2MubyBiZmFfaW9jZmMubyBiZmFfZmN4cC5vIGJmYV9scHMubworYmZhLXkgKz0gYmZhX2h3X2NiLm8gYmZhX2h3X2N0Lm8gYmZhX2ludHIubyBiZmFfdGltZXIubyBiZmFfcnBvcnQubyAKK2JmYS15ICs9IGJmYV9mY3BvcnQubyBiZmFfcG9ydC5vIGJmYV91Zi5vIGJmYV9zZ3BnLm8gYmZhX21vZHVsZS5vIGJmYV9pb2ltLm8KK2JmYS15ICs9IGJmYV9pdG5pbS5vIGJmYV9mY3BpbS5vIGJmYV90c2tpbS5vIGJmYV9sb2cubyBiZmFfbG9nX21vZHVsZS5vCitiZmEteSArPSBiZmFfY3NkZWJ1Zy5vIGJmYV9zbS5vIHBsb2cubworCitiZmEteSArPSBmY2J1aWxkLm8gZmFicmljLm8gZmNwaW0ubyB2ZmFwaS5vIGZjcHRtLm8gYmZhX2Zjcy5vIGJmYV9mY3NfcG9ydC5vIAorYmZhLXkgKz0gYmZhX2Zjc191Zi5vIGJmYV9mY3NfbHBvcnQubyBmYWIubyBmZG1pLm8gbXMubyBucy5vIHNjbi5vIGxvb3AubworYmZhLXkgKz0gbHBvcnRfYXBpLm8gbjJuLm8gcnBvcnQubyBycG9ydF9hcGkubyBycG9ydF9mdHJzLm8gdnBvcnQubworCitjY2ZsYWdzLXkgOj0gLUkkKG9iaikgLUkkKG9iaikvaW5jbHVkZSAtSSQob2JqKS9pbmNsdWRlL2NuYQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfY2FsbGJhY2tfcHJpdi5oIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfY2FsbGJhY2tfcHJpdi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlMzI2NWMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9jYWxsYmFja19wcml2LmgKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9fQkZBX0NBTExCQUNLX1BSSVZfSF9fCisjZGVmaW5lIF9fQkZBX0NBTExCQUNLX1BSSVZfSF9fCisKKyNpbmNsdWRlIDxjcy9iZmFfcS5oPgorCit0eXBlZGVmIHZvaWQgICAgKCpiZmFfY2JfY2Jmbl90KSAodm9pZCAqY2JhcmcsIGJmYV9ib29sZWFuX3QgY29tcGxldGUpOworCisvKioKKyAqIEdlbmVyaWMgQkZBIGNhbGxiYWNrIGVsZW1lbnQuCisgKi8KK3N0cnVjdCBiZmFfY2JfcWVfcyB7CisJc3RydWN0IGxpc3RfaGVhZCAgICAgICAgIHFlOworCWJmYV9jYl9jYmZuX3QgIGNiZm47CisJYmZhX2Jvb2xlYW5fdCAgIG9uY2U7CisJdTMyCQlyc3ZkOworCXZvaWQgICAgICAgICAgICpjYmFyZzsKK307CisKKyNkZWZpbmUgYmZhX2NiX3F1ZXVlKF9fYmZhLCBfX2hjYl9xZSwgX19jYmZuLCBfX2NiYXJnKSBkbyB7CQlcCisJKF9faGNiX3FlKS0+Y2JmbiAgPSAoX19jYmZuKTsgICAgICBcCisJKF9faGNiX3FlKS0+Y2JhcmcgPSAoX19jYmFyZyk7ICAgICAgXAorCWxpc3RfYWRkX3RhaWwoJihfX2hjYl9xZSktPnFlLCAmKF9fYmZhKS0+Y29tcF9xKTsgICAgICBcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIGJmYV9jYl9kZXF1ZXVlKF9faGNiX3FlKQlsaXN0X2RlbCgmKF9faGNiX3FlKS0+cWUpCisKKyNkZWZpbmUgYmZhX2NiX3F1ZXVlX29uY2UoX19iZmEsIF9faGNiX3FlLCBfX2NiZm4sIF9fY2JhcmcpIGRvIHsJXAorCShfX2hjYl9xZSktPmNiZm4gID0gKF9fY2Jmbik7ICAgICAgXAorCShfX2hjYl9xZSktPmNiYXJnID0gKF9fY2JhcmcpOyAgICAgIFwKKwlpZiAoIShfX2hjYl9xZSktPm9uY2UpIHsgICAgICBcCisJCWxpc3RfYWRkX3RhaWwoKF9faGNiX3FlKSwgJihfX2JmYSktPmNvbXBfcSk7ICAgICAgXAorCQkoX19oY2JfcWUpLT5vbmNlID0gQkZBX1RSVUU7CQkJCVwKKwl9CQkJCQkJCQlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIGJmYV9jYl9xdWV1ZV9kb25lKF9faGNiX3FlKSBkbyB7CQkJCVwKKwkoX19oY2JfcWUpLT5vbmNlID0gQkZBX0ZBTFNFOwkJCQkJXAorfSB3aGlsZSAoMCkKKworI2VuZGlmIC8qIF9fQkZBX0NBTExCQUNLX1BSSVZfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2JmYV9jYl9pb2ltX21hY3Jvcy5oIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfY2JfaW9pbV9tYWNyb3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDUwYzgzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfY2JfaW9pbV9tYWNyb3MuaApAQCAtMCwwICsxLDIwNSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisvKioKKyAqICBiZmFfY2JfaW9pbV9tYWNyb3MuaCBCRkEgSU9JTSBkcml2ZXIgaW50ZXJmYWNlIG1hY3Jvcy4KKyAqLworCisjaWZuZGVmIF9fQkZBX0hDQl9JT0lNX01BQ1JPU19IX18KKyNkZWZpbmUgX19CRkFfSENCX0lPSU1fTUFDUk9TX0hfXworCisjaW5jbHVkZSA8YmZhX29zX2luYy5oPgorLyoKKyAqICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorICoKKyAqICNpbmNsdWRlIDxzY3NpL3Njc2kuaD4gI2luY2x1ZGUgPHNjc2kvc2NzaV9jbW5kLmg+ICNpbmNsdWRlCisgKiA8c2NzaS9zY3NpX2RldmljZS5oPiAjaW5jbHVkZSA8c2NzaS9zY3NpX2hvc3QuaD4KKyAqLworI2luY2x1ZGUgImJmYWRfaW1fY29tcGF0LmgiCisKKy8qCisgKiB0YXNrIGF0dHJpYnV0ZSB2YWx1ZXMgaW4gRkNQLTIgRkNQX0NNTkQgSVUKKyAqLworI2RlZmluZSBTSU1QTEVfUSAgICAwCisjZGVmaW5lIEhFQURfT0ZfUSAgIDEKKyNkZWZpbmUgT1JERVJFRF9RICAgMgorI2RlZmluZSBBQ0FfUSAgICAgICA0CisjZGVmaW5lIFVOVEFHR0VEICAgIDUKKworc3RhdGljIGlubGluZSBsdW5fdAorYmZhZF9pbnRfdG9fbHVuKHUzMiBsdW5vKQoreworCXVuaW9uIHsKKwkJdTE2ICAgICAgICBzY3NpX2x1bls0XTsKKwkJbHVuX3QgICAgICAgICAgIGJmYV9sdW47CisJfSBsdW47CisKKwlsdW4uYmZhX2x1biAgICAgPSAwOworCWx1bi5zY3NpX2x1blswXSA9IGJmYV9vc19odG9ucyhsdW5vKTsKKworCXJldHVybiAobHVuLmJmYV9sdW4pOworfQorCisvKioKKyAqIEdldCBMVU4gZm9yIHRoZSBJL08gcmVxdWVzdAorICovCisjZGVmaW5lIGJmYV9jYl9pb2ltX2dldF9sdW4oX19kaW8pCVwKKwliZmFkX2ludF90b19sdW4oKChzdHJ1Y3Qgc2NzaV9jbW5kICopX19kaW8pLT5kZXZpY2UtPmx1bikKKworLyoqCisgKiBHZXQgQ0RCIGZvciB0aGUgSS9PIHJlcXVlc3QKKyAqLworc3RhdGljIGlubGluZSB1OCAqCitiZmFfY2JfaW9pbV9nZXRfY2RiKHN0cnVjdCBiZmFkX2lvaW1fcyAqZGlvKQoreworCXN0cnVjdCBzY3NpX2NtbmQgKmNtbmQgPSAoc3RydWN0IHNjc2lfY21uZCAqKWRpbzsKKworCXJldHVybiAoKHU4ICopIGNtbmQtPmNtbmQpOworfQorCisvKioKKyAqIEdldCBJL08gZGlyZWN0aW9uIChyZWFkL3dyaXRlKSBmb3IgdGhlIEkvTyByZXF1ZXN0CisgKi8KK3N0YXRpYyBpbmxpbmUgZW51bSBmY3BfaW9kaXIKK2JmYV9jYl9pb2ltX2dldF9pb2RpcihzdHJ1Y3QgYmZhZF9pb2ltX3MgKmRpbykKK3sKKwlzdHJ1Y3Qgc2NzaV9jbW5kICpjbW5kID0gKHN0cnVjdCBzY3NpX2NtbmQgKilkaW87CisJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZG1hZGlyOworCisJZG1hZGlyID0gY21uZC0+c2NfZGF0YV9kaXJlY3Rpb247CisJaWYgKGRtYWRpciA9PSBETUFfVE9fREVWSUNFKQorCQlyZXR1cm4gRkNQX0lPRElSX1dSSVRFOworCWVsc2UgaWYgKGRtYWRpciA9PSBETUFfRlJPTV9ERVZJQ0UpCisJCXJldHVybiBGQ1BfSU9ESVJfUkVBRDsKKwllbHNlCisJCXJldHVybiBGQ1BfSU9ESVJfTk9ORTsKK30KKworLyoqCisgKiBHZXQgSU8gc2l6ZSBpbiBieXRlcyBmb3IgdGhlIEkvTyByZXF1ZXN0CisgKi8KK3N0YXRpYyBpbmxpbmUgdTMyCitiZmFfY2JfaW9pbV9nZXRfc2l6ZShzdHJ1Y3QgYmZhZF9pb2ltX3MgKmRpbykKK3sKKwlzdHJ1Y3Qgc2NzaV9jbW5kICpjbW5kID0gKHN0cnVjdCBzY3NpX2NtbmQgKilkaW87CisKKwlyZXR1cm4gKHNjc2lfYnVmZmxlbihjbW5kKSk7Cit9CisKKy8qKgorICogR2V0IHRpbWVvdXQgZm9yIHRoZSBJL08gcmVxdWVzdAorICovCitzdGF0aWMgaW5saW5lIHU4CitiZmFfY2JfaW9pbV9nZXRfdGltZW91dChzdHJ1Y3QgYmZhZF9pb2ltX3MgKmRpbykKK3sKKwlzdHJ1Y3Qgc2NzaV9jbW5kICpjbW5kID0gKHN0cnVjdCBzY3NpX2NtbmQgKilkaW87CisJLyoKKwkgKiBUQkQ6IG5lZWQgYSB0aW1lb3V0IGZvciBzY3NpIHBhc3N0aHJ1CisJICovCisJaWYgKGNtbmQtPmRldmljZS0+aG9zdCA9PSBOVUxMKQorCQlyZXR1cm4gNDsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIEdldCBTRyBlbGVtZW50IGZvciB0aGUgSS9PIHJlcXVlc3QgZ2l2ZW4gdGhlIFNHIGVsZW1lbnQgaW5kZXgKKyAqLworc3RhdGljIGlubGluZSB1bmlvbiBiZmlfYWRkcl91CitiZmFfY2JfaW9pbV9nZXRfc2dhZGRyKHN0cnVjdCBiZmFkX2lvaW1fcyAqZGlvLCBpbnQgc2dlaWQpCit7CisJc3RydWN0IHNjc2lfY21uZCAqY21uZCA9IChzdHJ1Y3Qgc2NzaV9jbW5kICopZGlvOworCXN0cnVjdCBzY2F0dGVybGlzdCAqc2dlOworCXU2NCAgICAgICAgYWRkcjsKKworCXNnZSA9IChzdHJ1Y3Qgc2NhdHRlcmxpc3QgKilzY3NpX3NnbGlzdChjbW5kKSArIHNnZWlkOworCWFkZHIgPSAodTY0KSBzZ19kbWFfYWRkcmVzcyhzZ2UpOworCisJcmV0dXJuICgqKHVuaW9uIGJmaV9hZGRyX3UgKikgJmFkZHIpOworfQorCitzdGF0aWMgaW5saW5lIHUzMgorYmZhX2NiX2lvaW1fZ2V0X3NnbGVuKHN0cnVjdCBiZmFkX2lvaW1fcyAqZGlvLCBpbnQgc2dlaWQpCit7CisJc3RydWN0IHNjc2lfY21uZCAqY21uZCA9IChzdHJ1Y3Qgc2NzaV9jbW5kICopZGlvOworCXN0cnVjdCBzY2F0dGVybGlzdCAqc2dlOworCXUzMiAgICAgICAgbGVuOworCisJc2dlID0gKHN0cnVjdCBzY2F0dGVybGlzdCAqKXNjc2lfc2dsaXN0KGNtbmQpICsgc2dlaWQ7CisJbGVuID0gc2dfZG1hX2xlbihzZ2UpOworCisJcmV0dXJuIGxlbjsKK30KKworLyoqCisgKiBHZXQgQ29tbWFuZCBSZWZlcmVuY2UgTnVtYmVyIGZvciB0aGUgSS9PIHJlcXVlc3QuIDAgaWYgbm9uZS4KKyAqLworc3RhdGljIGlubGluZSB1OAorYmZhX2NiX2lvaW1fZ2V0X2NybihzdHJ1Y3QgYmZhZF9pb2ltX3MgKmRpbykKK3sKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBHZXQgU0FNLTMgcHJpb3JpdHkgZm9yIHRoZSBJL08gcmVxdWVzdC4gMCBpcyBkZWZhdWx0LgorICovCitzdGF0aWMgaW5saW5lIHU4CitiZmFfY2JfaW9pbV9nZXRfcHJpb3JpdHkoc3RydWN0IGJmYWRfaW9pbV9zICpkaW8pCit7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogR2V0IHRhc2sgYXR0cmlidXRlcyBmb3IgdGhlIEkvTyByZXF1ZXN0LiBEZWZhdWx0IGlzIEZDUF9UQVNLX0FUVFJfU0lNUExFKDApLgorICovCitzdGF0aWMgaW5saW5lIHU4CitiZmFfY2JfaW9pbV9nZXRfdGFza2F0dHIoc3RydWN0IGJmYWRfaW9pbV9zICpkaW8pCit7CisJc3RydWN0IHNjc2lfY21uZCAqY21uZCA9IChzdHJ1Y3Qgc2NzaV9jbW5kICopZGlvOworCXU4ICAgICAgICAgdGFza19hdHRyID0gVU5UQUdHRUQ7CisKKwlpZiAoY21uZC0+ZGV2aWNlLT50YWdnZWRfc3VwcG9ydGVkKSB7CisJCXN3aXRjaCAoY21uZC0+dGFnKSB7CisJCWNhc2UgSEVBRF9PRl9RVUVVRV9UQUc6CisJCQl0YXNrX2F0dHIgPSBIRUFEX09GX1E7CisJCQlicmVhazsKKwkJY2FzZSBPUkRFUkVEX1FVRVVFX1RBRzoKKwkJCXRhc2tfYXR0ciA9IE9SREVSRURfUTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJdGFza19hdHRyID0gU0lNUExFX1E7CisJCQlicmVhazsKKwkJfQorCX0KKworCXJldHVybiB0YXNrX2F0dHI7Cit9CisKKy8qKgorICogR2V0IENEQiBsZW5ndGggaW4gYnl0ZXMgZm9yIHRoZSBJL08gcmVxdWVzdC4gRGVmYXVsdCBpcyBGQ1BfQ01ORF9DREJfTEVOKDE2KS4KKyAqLworc3RhdGljIGlubGluZSB1OAorYmZhX2NiX2lvaW1fZ2V0X2NkYmxlbihzdHJ1Y3QgYmZhZF9pb2ltX3MgKmRpbykKK3sKKwlzdHJ1Y3Qgc2NzaV9jbW5kICpjbW5kID0gKHN0cnVjdCBzY3NpX2NtbmQgKilkaW87CisKKwlyZXR1cm4gKGNtbmQtPmNtZF9sZW4pOworfQorCisKKworI2VuZGlmIC8qIF9fQkZBX0hDQl9JT0lNX01BQ1JPU19IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2NlZS5jIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfY2VlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2E5NTljMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2NlZS5jCkBAIC0wLDAgKzEsNDkyIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX2NlZS5oPgorI2luY2x1ZGUgPGNzL2JmYV90cmMuaD4KKyNpbmNsdWRlIDxjcy9iZmFfbG9nLmg+CisjaW5jbHVkZSA8Y3MvYmZhX2RlYnVnLmg+CisjaW5jbHVkZSA8Y2VlL2JmYV9jZWUuaD4KKyNpbmNsdWRlIDxiZmkvYmZpX2NlZS5oPgorI2luY2x1ZGUgPGJmaS9iZmkuaD4KKyNpbmNsdWRlIDxiZmFfaW9jLmg+CisjaW5jbHVkZSA8Y25hL2JmYV9jbmFfdHJjbW9kLmg+CisKK0JGQV9UUkNfRklMRShDTkEsIENFRSk7CisKKyNkZWZpbmUgYmZhX2lvY19wb3J0aWQoX19pb2MpICgoX19pb2MpLT5wb3J0X2lkKQorI2RlZmluZSBiZmFfbHB1aWQoX19hcmcpIGJmYV9pb2NfcG9ydGlkKCYoX19hcmcpLT5pb2MpCisKK3N0YXRpYyB2b2lkICAgICBiZmFfY2VlX2Zvcm1hdF9sbGRwX2NmZyhzdHJ1Y3QgYmZhX2NlZV9sbGRwX2NmZ19zICpsbGRwX2NmZyk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2NlZV9mb3JtYXRfZGNiY3hfc3RhdHMoc3RydWN0IGJmYV9jZWVfZGNieF9zdGF0c19zCisJCQkJCSAgICpkY2JjeF9zdGF0cyk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2NlZV9mb3JtYXRfbGxkcF9zdGF0cyhzdHJ1Y3QgYmZhX2NlZV9sbGRwX3N0YXRzX3MKKwkJCQkJICAqbGxkcF9zdGF0cyk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2NlZV9mb3JtYXRfY2ZnX3N0YXRzKHN0cnVjdCBiZmFfY2VlX2NmZ19zdGF0c19zICpjZmdfc3RhdHMpOworc3RhdGljIHZvaWQgICAgIGJmYV9jZWVfZm9ybWF0X2NlZV9jZmcodm9pZCAqYnVmZmVyKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfY2VlX2Zvcm1hdF9jZWVfc3RhdHModm9pZCAqYnVmZmVyKTsKKworc3RhdGljIHZvaWQKK2JmYV9jZWVfZm9ybWF0X2NlZV9zdGF0cyh2b2lkICpidWZmZXIpCit7CisJc3RydWN0IGJmYV9jZWVfc3RhdHNfcyAqY2VlX3N0YXRzID0gYnVmZmVyOworCWJmYV9jZWVfZm9ybWF0X2RjYmN4X3N0YXRzKCZjZWVfc3RhdHMtPmRjYnhfc3RhdHMpOworCWJmYV9jZWVfZm9ybWF0X2xsZHBfc3RhdHMoJmNlZV9zdGF0cy0+bGxkcF9zdGF0cyk7CisJYmZhX2NlZV9mb3JtYXRfY2ZnX3N0YXRzKCZjZWVfc3RhdHMtPmNmZ19zdGF0cyk7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfY2VlX2Zvcm1hdF9jZWVfY2ZnKHZvaWQgKmJ1ZmZlcikKK3sKKwlzdHJ1Y3QgYmZhX2NlZV9hdHRyX3MgKmNlZV9jZmcgPSBidWZmZXI7CisJYmZhX2NlZV9mb3JtYXRfbGxkcF9jZmcoJmNlZV9jZmctPmxsZHBfcmVtb3RlKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9jZWVfZm9ybWF0X2RjYmN4X3N0YXRzKHN0cnVjdCBiZmFfY2VlX2RjYnhfc3RhdHNfcyAqZGNiY3hfc3RhdHMpCit7CisJZGNiY3hfc3RhdHMtPnN1YnRsdnNfdW5yZWNvZ25pemVkID0KKwkJYmZhX29zX250b2hsKGRjYmN4X3N0YXRzLT5zdWJ0bHZzX3VucmVjb2duaXplZCk7CisJZGNiY3hfc3RhdHMtPm5lZ290aWF0aW9uX2ZhaWxlZCA9CisJCWJmYV9vc19udG9obChkY2JjeF9zdGF0cy0+bmVnb3RpYXRpb25fZmFpbGVkKTsKKwlkY2JjeF9zdGF0cy0+cmVtb3RlX2NmZ19jaGFuZ2VkID0KKwkJYmZhX29zX250b2hsKGRjYmN4X3N0YXRzLT5yZW1vdGVfY2ZnX2NoYW5nZWQpOworCWRjYmN4X3N0YXRzLT50bHZzX3JlY2VpdmVkID0gYmZhX29zX250b2hsKGRjYmN4X3N0YXRzLT50bHZzX3JlY2VpdmVkKTsKKwlkY2JjeF9zdGF0cy0+dGx2c19pbnZhbGlkID0gYmZhX29zX250b2hsKGRjYmN4X3N0YXRzLT50bHZzX2ludmFsaWQpOworCWRjYmN4X3N0YXRzLT5zZXFubyA9IGJmYV9vc19udG9obChkY2JjeF9zdGF0cy0+c2Vxbm8pOworCWRjYmN4X3N0YXRzLT5hY2tubyA9IGJmYV9vc19udG9obChkY2JjeF9zdGF0cy0+YWNrbm8pOworCWRjYmN4X3N0YXRzLT5yZWN2ZF9zZXFubyA9IGJmYV9vc19udG9obChkY2JjeF9zdGF0cy0+cmVjdmRfc2Vxbm8pOworCWRjYmN4X3N0YXRzLT5yZWN2ZF9hY2tubyA9IGJmYV9vc19udG9obChkY2JjeF9zdGF0cy0+cmVjdmRfYWNrbm8pOworfQorCitzdGF0aWMgdm9pZAorYmZhX2NlZV9mb3JtYXRfbGxkcF9zdGF0cyhzdHJ1Y3QgYmZhX2NlZV9sbGRwX3N0YXRzX3MgKmxsZHBfc3RhdHMpCit7CisJbGxkcF9zdGF0cy0+ZnJhbWVzX3RyYW5zbWl0dGVkID0KKwkJYmZhX29zX250b2hsKGxsZHBfc3RhdHMtPmZyYW1lc190cmFuc21pdHRlZCk7CisJbGxkcF9zdGF0cy0+ZnJhbWVzX2FnZWRfb3V0ID0gYmZhX29zX250b2hsKGxsZHBfc3RhdHMtPmZyYW1lc19hZ2VkX291dCk7CisJbGxkcF9zdGF0cy0+ZnJhbWVzX2Rpc2NhcmRlZCA9CisJCWJmYV9vc19udG9obChsbGRwX3N0YXRzLT5mcmFtZXNfZGlzY2FyZGVkKTsKKwlsbGRwX3N0YXRzLT5mcmFtZXNfaW5fZXJyb3IgPSBiZmFfb3NfbnRvaGwobGxkcF9zdGF0cy0+ZnJhbWVzX2luX2Vycm9yKTsKKwlsbGRwX3N0YXRzLT5mcmFtZXNfcmN2ZCA9IGJmYV9vc19udG9obChsbGRwX3N0YXRzLT5mcmFtZXNfcmN2ZCk7CisJbGxkcF9zdGF0cy0+dGx2c19kaXNjYXJkZWQgPSBiZmFfb3NfbnRvaGwobGxkcF9zdGF0cy0+dGx2c19kaXNjYXJkZWQpOworCWxsZHBfc3RhdHMtPnRsdnNfdW5yZWNvZ25pemVkID0KKwkJYmZhX29zX250b2hsKGxsZHBfc3RhdHMtPnRsdnNfdW5yZWNvZ25pemVkKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9jZWVfZm9ybWF0X2NmZ19zdGF0cyhzdHJ1Y3QgYmZhX2NlZV9jZmdfc3RhdHNfcyAqY2ZnX3N0YXRzKQoreworCWNmZ19zdGF0cy0+Y2VlX3N0YXR1c19kb3duID0gYmZhX29zX250b2hsKGNmZ19zdGF0cy0+Y2VlX3N0YXR1c19kb3duKTsKKwljZmdfc3RhdHMtPmNlZV9zdGF0dXNfdXAgPSBiZmFfb3NfbnRvaGwoY2ZnX3N0YXRzLT5jZWVfc3RhdHVzX3VwKTsKKwljZmdfc3RhdHMtPmNlZV9od19jZmdfY2hhbmdlZCA9CisJCWJmYV9vc19udG9obChjZmdfc3RhdHMtPmNlZV9od19jZmdfY2hhbmdlZCk7CisJY2ZnX3N0YXRzLT5yZWN2ZF9pbnZhbGlkX2NmZyA9CisJCWJmYV9vc19udG9obChjZmdfc3RhdHMtPnJlY3ZkX2ludmFsaWRfY2ZnKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9jZWVfZm9ybWF0X2xsZHBfY2ZnKHN0cnVjdCBiZmFfY2VlX2xsZHBfY2ZnX3MgKmxsZHBfY2ZnKQoreworCWxsZHBfY2ZnLT50aW1lX3RvX2ludGVydmFsID0gYmZhX29zX250b2hzKGxsZHBfY2ZnLT50aW1lX3RvX2ludGVydmFsKTsKKwlsbGRwX2NmZy0+ZW5hYmxlZF9zeXN0ZW1fY2FwID0KKwkJYmZhX29zX250b2hzKGxsZHBfY2ZnLT5lbmFibGVkX3N5c3RlbV9jYXApOworfQorCisvKioKKyAqIGJmYV9jZWVfYXR0cl9tZW1pbmZvKCkKKyAqCisgKgorICogQHBhcmFtW2luXSB2b2lkCisgKgorICogQHJldHVybiBTaXplIG9mIERNQSByZWdpb24KKyAqLworc3RhdGljICAgICAgICAgIHUzMgorYmZhX2NlZV9hdHRyX21lbWluZm8odm9pZCkKK3sKKwlyZXR1cm4gQkZBX1JPVU5EVVAoc2l6ZW9mKHN0cnVjdCBiZmFfY2VlX2F0dHJfcyksIEJGQV9ETUFfQUxJR05fU1opOworfQorCisvKioKKyAqIGJmYV9jZWVfc3RhdHNfbWVtaW5mbygpCisgKgorICoKKyAqIEBwYXJhbVtpbl0gdm9pZAorICoKKyAqIEByZXR1cm4gU2l6ZSBvZiBETUEgcmVnaW9uCisgKi8KK3N0YXRpYyAgICAgICAgICB1MzIKK2JmYV9jZWVfc3RhdHNfbWVtaW5mbyh2b2lkKQoreworCXJldHVybiBCRkFfUk9VTkRVUChzaXplb2Yoc3RydWN0IGJmYV9jZWVfc3RhdHNfcyksIEJGQV9ETUFfQUxJR05fU1opOworfQorCisvKioKKyAqIGJmYV9jZWVfZ2V0X2F0dHJfaXNyKCkKKyAqCisgKgorICogQHBhcmFtW2luXSBjZWUgLSBQb2ludGVyIHRvIHRoZSBDRUUgbW9kdWxlCisgKiAgICAgICAgICAgIHN0YXR1cyAtIFJldHVybiBzdGF0dXMgZnJvbSB0aGUgZi93CisgKgorICogQHJldHVybiB2b2lkCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfY2VlX2dldF9hdHRyX2lzcihzdHJ1Y3QgYmZhX2NlZV9zICpjZWUsIGJmYV9zdGF0dXNfdCBzdGF0dXMpCit7CisJY2VlLT5nZXRfYXR0cl9zdGF0dXMgPSBzdGF0dXM7CisJYmZhX3RyYyhjZWUsIDApOworCWlmIChzdGF0dXMgPT0gQkZBX1NUQVRVU19PSykgeworCQliZmFfdHJjKGNlZSwgMCk7CisJCS8qCisJCSAqIFRoZSByZXF1ZXN0ZWQgZGF0YSBoYXMgYmVlbiBjb3BpZWQgdG8gdGhlIERNQSBhcmVhLCAqcHJvY2VzcworCQkgKiBpdC4KKwkJICovCisJCW1lbWNweShjZWUtPmF0dHIsIGNlZS0+YXR0cl9kbWEua3ZhLAorCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBiZmFfY2VlX2F0dHJfcykpOworCQliZmFfY2VlX2Zvcm1hdF9jZWVfY2ZnKGNlZS0+YXR0cik7CisJfQorCWNlZS0+Z2V0X2F0dHJfcGVuZGluZyA9IEJGQV9GQUxTRTsKKwlpZiAoY2VlLT5jYmZuLmdldF9hdHRyX2NiZm4pIHsKKwkJYmZhX3RyYyhjZWUsIDApOworCQljZWUtPmNiZm4uZ2V0X2F0dHJfY2JmbihjZWUtPmNiZm4uZ2V0X2F0dHJfY2JhcmcsIHN0YXR1cyk7CisJfQorCWJmYV90cmMoY2VlLCAwKTsKK30KKworLyoqCisgKiBiZmFfY2VlX2dldF9hdHRyX2lzcigpCisgKgorICoKKyAqIEBwYXJhbVtpbl0gY2VlIC0gUG9pbnRlciB0byB0aGUgQ0VFIG1vZHVsZQorICogICAgICAgICAgICBzdGF0dXMgLSBSZXR1cm4gc3RhdHVzIGZyb20gdGhlIGYvdworICoKKyAqIEByZXR1cm4gdm9pZAorICovCitzdGF0aWMgdm9pZAorYmZhX2NlZV9nZXRfc3RhdHNfaXNyKHN0cnVjdCBiZmFfY2VlX3MgKmNlZSwgYmZhX3N0YXR1c190IHN0YXR1cykKK3sKKwljZWUtPmdldF9zdGF0c19zdGF0dXMgPSBzdGF0dXM7CisJYmZhX3RyYyhjZWUsIDApOworCWlmIChzdGF0dXMgPT0gQkZBX1NUQVRVU19PSykgeworCQliZmFfdHJjKGNlZSwgMCk7CisJCS8qCisJCSAqIFRoZSByZXF1ZXN0ZWQgZGF0YSBoYXMgYmVlbiBjb3BpZWQgdG8gdGhlIERNQSBhcmVhLCBwcm9jZXNzCisJCSAqIGl0LgorCQkgKi8KKwkJbWVtY3B5KGNlZS0+c3RhdHMsIGNlZS0+c3RhdHNfZG1hLmt2YSwKKwkJICAgICAgIHNpemVvZihzdHJ1Y3QgYmZhX2NlZV9zdGF0c19zKSk7CisJCWJmYV9jZWVfZm9ybWF0X2NlZV9zdGF0cyhjZWUtPnN0YXRzKTsKKwl9CisJY2VlLT5nZXRfc3RhdHNfcGVuZGluZyA9IEJGQV9GQUxTRTsKKwliZmFfdHJjKGNlZSwgMCk7CisJaWYgKGNlZS0+Y2Jmbi5nZXRfc3RhdHNfY2JmbikgeworCQliZmFfdHJjKGNlZSwgMCk7CisJCWNlZS0+Y2Jmbi5nZXRfc3RhdHNfY2JmbihjZWUtPmNiZm4uZ2V0X3N0YXRzX2NiYXJnLCBzdGF0dXMpOworCX0KKwliZmFfdHJjKGNlZSwgMCk7Cit9CisKKy8qKgorICogYmZhX2NlZV9nZXRfYXR0cl9pc3IoKQorICoKKyAqCisgKiBAcGFyYW1baW5dIGNlZSAtIFBvaW50ZXIgdG8gdGhlIENFRSBtb2R1bGUKKyAqICAgICAgICAgICAgc3RhdHVzIC0gUmV0dXJuIHN0YXR1cyBmcm9tIHRoZSBmL3cKKyAqCisgKiBAcmV0dXJuIHZvaWQKKyAqLworc3RhdGljIHZvaWQKK2JmYV9jZWVfcmVzZXRfc3RhdHNfaXNyKHN0cnVjdCBiZmFfY2VlX3MgKmNlZSwgYmZhX3N0YXR1c190IHN0YXR1cykKK3sKKwljZWUtPnJlc2V0X3N0YXRzX3N0YXR1cyA9IHN0YXR1czsKKwljZWUtPnJlc2V0X3N0YXRzX3BlbmRpbmcgPSBCRkFfRkFMU0U7CisJaWYgKGNlZS0+Y2Jmbi5yZXNldF9zdGF0c19jYmZuKQorCQljZWUtPmNiZm4ucmVzZXRfc3RhdHNfY2JmbihjZWUtPmNiZm4ucmVzZXRfc3RhdHNfY2JhcmcsIHN0YXR1cyk7Cit9CisKKy8qKgorICogYmZhX2NlZV9tZW1pbmZvKCkKKyAqCisgKgorICogQHBhcmFtW2luXSB2b2lkCisgKgorICogQHJldHVybiBTaXplIG9mIERNQSByZWdpb24KKyAqLwordTMyCitiZmFfY2VlX21lbWluZm8odm9pZCkKK3sKKwlyZXR1cm4gKGJmYV9jZWVfYXR0cl9tZW1pbmZvKCkgKyBiZmFfY2VlX3N0YXRzX21lbWluZm8oKSk7Cit9CisKKy8qKgorICogYmZhX2NlZV9tZW1fY2xhaW0oKQorICoKKyAqCisgKiBAcGFyYW1baW5dIGNlZSBDRUUgbW9kdWxlIHBvaW50ZXIKKyAqIAkgICAgICBkbWFfa3ZhIEtlcm5lbCBWaXJ0dWFsIEFkZHJlc3Mgb2YgQ0VFIERNQSBNZW1vcnkKKyAqIAkgICAgICBkbWFfcGEgIFBoeXNpY2FsIEFkZHJlc3Mgb2YgQ0VFIERNQSBNZW1vcnkKKyAqCisgKiBAcmV0dXJuIHZvaWQKKyAqLwordm9pZAorYmZhX2NlZV9tZW1fY2xhaW0oc3RydWN0IGJmYV9jZWVfcyAqY2VlLCB1OCAqZG1hX2t2YSwgdTY0IGRtYV9wYSkKK3sKKwljZWUtPmF0dHJfZG1hLmt2YSA9IGRtYV9rdmE7CisJY2VlLT5hdHRyX2RtYS5wYSA9IGRtYV9wYTsKKwljZWUtPnN0YXRzX2RtYS5rdmEgPSBkbWFfa3ZhICsgYmZhX2NlZV9hdHRyX21lbWluZm8oKTsKKwljZWUtPnN0YXRzX2RtYS5wYSA9IGRtYV9wYSArIGJmYV9jZWVfYXR0cl9tZW1pbmZvKCk7CisJY2VlLT5hdHRyID0gKHN0cnVjdCBiZmFfY2VlX2F0dHJfcyAqKWRtYV9rdmE7CisJY2VlLT5zdGF0cyA9CisJCShzdHJ1Y3QgYmZhX2NlZV9zdGF0c19zICopKGRtYV9rdmEgKyBiZmFfY2VlX2F0dHJfbWVtaW5mbygpKTsKK30KKworLyoqCisgKiBiZmFfY2VlX2dldF9hdHRyKCkKKyAqCisgKiAgIFNlbmQgdGhlIHJlcXVlc3QgdG8gdGhlIGYvdyB0byBmZXRjaCBDRUUgYXR0cmlidXRlcy4KKyAqCisgKiBAcGFyYW1baW5dIFBvaW50ZXIgdG8gdGhlIENFRSBtb2R1bGUgZGF0YSBzdHJ1Y3R1cmUuCisgKgorICogQHJldHVybiBTdGF0dXMKKyAqLworCitiZmFfc3RhdHVzX3QKK2JmYV9jZWVfZ2V0X2F0dHIoc3RydWN0IGJmYV9jZWVfcyAqY2VlLCBzdHJ1Y3QgYmZhX2NlZV9hdHRyX3MgKmF0dHIsCisJCSBiZmFfY2VlX2dldF9hdHRyX2NiZm5fdCBjYmZuLCB2b2lkICpjYmFyZykKK3sKKwlzdHJ1Y3QgYmZpX2NlZV9nZXRfcmVxX3MgKmNtZDsKKworCWJmYV9hc3NlcnQoKGNlZSAhPSBOVUxMKSAmJiAoY2VlLT5pb2MgIT0gTlVMTCkpOworCWJmYV90cmMoY2VlLCAwKTsKKwlpZiAoIWJmYV9pb2NfaXNfb3BlcmF0aW9uYWwoY2VlLT5pb2MpKSB7CisJCWJmYV90cmMoY2VlLCAwKTsKKwkJcmV0dXJuIEJGQV9TVEFUVVNfSU9DX0ZBSUxVUkU7CisJfQorCWlmIChjZWUtPmdldF9hdHRyX3BlbmRpbmcgPT0gQkZBX1RSVUUpIHsKKwkJYmZhX3RyYyhjZWUsIDApOworCQlyZXR1cm4gQkZBX1NUQVRVU19ERVZCVVNZOworCX0KKwljZWUtPmdldF9hdHRyX3BlbmRpbmcgPSBCRkFfVFJVRTsKKwljbWQgPSAoc3RydWN0IGJmaV9jZWVfZ2V0X3JlcV9zICopY2VlLT5nZXRfY2ZnX21iLm1zZzsKKwljZWUtPmF0dHIgPSBhdHRyOworCWNlZS0+Y2Jmbi5nZXRfYXR0cl9jYmZuID0gY2JmbjsKKwljZWUtPmNiZm4uZ2V0X2F0dHJfY2JhcmcgPSBjYmFyZzsKKwliZmlfaDJpX3NldChjbWQtPm1oLCBCRklfTUNfQ0VFLCBCRklfQ0VFX0gySV9HRVRfQ0ZHX1JFUSwKKwkJICAgIGJmYV9pb2NfcG9ydGlkKGNlZS0+aW9jKSk7CisJYmZhX2RtYV9iZV9hZGRyX3NldChjbWQtPmRtYV9hZGRyLCBjZWUtPmF0dHJfZG1hLnBhKTsKKwliZmFfaW9jX21ib3hfcXVldWUoY2VlLT5pb2MsICZjZWUtPmdldF9jZmdfbWIpOworCWJmYV90cmMoY2VlLCAwKTsKKworCXJldHVybiBCRkFfU1RBVFVTX09LOworfQorCisvKioKKyAqIGJmYV9jZWVfZ2V0X3N0YXRzKCkKKyAqCisgKiAgIFNlbmQgdGhlIHJlcXVlc3QgdG8gdGhlIGYvdyB0byBmZXRjaCBDRUUgc3RhdGlzdGljcy4KKyAqCisgKiBAcGFyYW1baW5dIFBvaW50ZXIgdG8gdGhlIENFRSBtb2R1bGUgZGF0YSBzdHJ1Y3R1cmUuCisgKgorICogQHJldHVybiBTdGF0dXMKKyAqLworCitiZmFfc3RhdHVzX3QKK2JmYV9jZWVfZ2V0X3N0YXRzKHN0cnVjdCBiZmFfY2VlX3MgKmNlZSwgc3RydWN0IGJmYV9jZWVfc3RhdHNfcyAqc3RhdHMsCisJCSAgYmZhX2NlZV9nZXRfc3RhdHNfY2Jmbl90IGNiZm4sIHZvaWQgKmNiYXJnKQoreworCXN0cnVjdCBiZmlfY2VlX2dldF9yZXFfcyAqY21kOworCisJYmZhX2Fzc2VydCgoY2VlICE9IE5VTEwpICYmIChjZWUtPmlvYyAhPSBOVUxMKSk7CisKKwlpZiAoIWJmYV9pb2NfaXNfb3BlcmF0aW9uYWwoY2VlLT5pb2MpKSB7CisJCWJmYV90cmMoY2VlLCAwKTsKKwkJcmV0dXJuIEJGQV9TVEFUVVNfSU9DX0ZBSUxVUkU7CisJfQorCWlmIChjZWUtPmdldF9zdGF0c19wZW5kaW5nID09IEJGQV9UUlVFKSB7CisJCWJmYV90cmMoY2VlLCAwKTsKKwkJcmV0dXJuIEJGQV9TVEFUVVNfREVWQlVTWTsKKwl9CisJY2VlLT5nZXRfc3RhdHNfcGVuZGluZyA9IEJGQV9UUlVFOworCWNtZCA9IChzdHJ1Y3QgYmZpX2NlZV9nZXRfcmVxX3MgKiljZWUtPmdldF9zdGF0c19tYi5tc2c7CisJY2VlLT5zdGF0cyA9IHN0YXRzOworCWNlZS0+Y2Jmbi5nZXRfc3RhdHNfY2JmbiA9IGNiZm47CisJY2VlLT5jYmZuLmdldF9zdGF0c19jYmFyZyA9IGNiYXJnOworCWJmaV9oMmlfc2V0KGNtZC0+bWgsIEJGSV9NQ19DRUUsIEJGSV9DRUVfSDJJX0dFVF9TVEFUU19SRVEsCisJCSAgICBiZmFfaW9jX3BvcnRpZChjZWUtPmlvYykpOworCWJmYV9kbWFfYmVfYWRkcl9zZXQoY21kLT5kbWFfYWRkciwgY2VlLT5zdGF0c19kbWEucGEpOworCWJmYV9pb2NfbWJveF9xdWV1ZShjZWUtPmlvYywgJmNlZS0+Z2V0X3N0YXRzX21iKTsKKwliZmFfdHJjKGNlZSwgMCk7CisKKwlyZXR1cm4gQkZBX1NUQVRVU19PSzsKK30KKworLyoqCisgKiBiZmFfY2VlX3Jlc2V0X3N0YXRzKCkKKyAqCisgKgorICogQHBhcmFtW2luXSBQb2ludGVyIHRvIHRoZSBDRUUgbW9kdWxlIGRhdGEgc3RydWN0dXJlLgorICoKKyAqIEByZXR1cm4gU3RhdHVzCisgKi8KKworYmZhX3N0YXR1c190CitiZmFfY2VlX3Jlc2V0X3N0YXRzKHN0cnVjdCBiZmFfY2VlX3MgKmNlZSwgYmZhX2NlZV9yZXNldF9zdGF0c19jYmZuX3QgY2JmbiwKKwkJICAgIHZvaWQgKmNiYXJnKQoreworCXN0cnVjdCBiZmlfY2VlX3Jlc2V0X3N0YXRzX3MgKmNtZDsKKworCWJmYV9hc3NlcnQoKGNlZSAhPSBOVUxMKSAmJiAoY2VlLT5pb2MgIT0gTlVMTCkpOworCWlmICghYmZhX2lvY19pc19vcGVyYXRpb25hbChjZWUtPmlvYykpIHsKKwkJYmZhX3RyYyhjZWUsIDApOworCQlyZXR1cm4gQkZBX1NUQVRVU19JT0NfRkFJTFVSRTsKKwl9CisJaWYgKGNlZS0+cmVzZXRfc3RhdHNfcGVuZGluZyA9PSBCRkFfVFJVRSkgeworCQliZmFfdHJjKGNlZSwgMCk7CisJCXJldHVybiBCRkFfU1RBVFVTX0RFVkJVU1k7CisJfQorCWNlZS0+cmVzZXRfc3RhdHNfcGVuZGluZyA9IEJGQV9UUlVFOworCWNtZCA9IChzdHJ1Y3QgYmZpX2NlZV9yZXNldF9zdGF0c19zICopY2VlLT5yZXNldF9zdGF0c19tYi5tc2c7CisJY2VlLT5jYmZuLnJlc2V0X3N0YXRzX2NiZm4gPSBjYmZuOworCWNlZS0+Y2Jmbi5yZXNldF9zdGF0c19jYmFyZyA9IGNiYXJnOworCWJmaV9oMmlfc2V0KGNtZC0+bWgsIEJGSV9NQ19DRUUsIEJGSV9DRUVfSDJJX1JFU0VUX1NUQVRTLAorCQkgICAgYmZhX2lvY19wb3J0aWQoY2VlLT5pb2MpKTsKKwliZmFfaW9jX21ib3hfcXVldWUoY2VlLT5pb2MsICZjZWUtPnJlc2V0X3N0YXRzX21iKTsKKwliZmFfdHJjKGNlZSwgMCk7CisJcmV0dXJuIEJGQV9TVEFUVVNfT0s7Cit9CisKKy8qKgorICogYmZhX2NlZV9pc3JzKCkKKyAqCisgKgorICogQHBhcmFtW2luXSBQb2ludGVyIHRvIHRoZSBDRUUgbW9kdWxlIGRhdGEgc3RydWN0dXJlLgorICoKKyAqIEByZXR1cm4gdm9pZAorICovCisKK3ZvaWQKK2JmYV9jZWVfaXNyKHZvaWQgKmNiYXJnLCBzdHJ1Y3QgYmZpX21ibXNnX3MgKm0pCit7CisJdW5pb24gYmZpX2NlZV9pMmhfbXNnX3UgKm1zZzsKKwlzdHJ1Y3QgYmZpX2NlZV9nZXRfcnNwX3MgKmdldF9yc3A7CisJc3RydWN0IGJmYV9jZWVfcyAqY2VlID0gKHN0cnVjdCBiZmFfY2VlX3MgKiljYmFyZzsKKwltc2cgPSAodW5pb24gYmZpX2NlZV9pMmhfbXNnX3UgKiltOworCWdldF9yc3AgPSAoc3RydWN0IGJmaV9jZWVfZ2V0X3JzcF9zICopbTsKKwliZmFfdHJjKGNlZSwgbXNnLT5taC5tc2dfaWQpOworCXN3aXRjaCAobXNnLT5taC5tc2dfaWQpIHsKKwljYXNlIEJGSV9DRUVfSTJIX0dFVF9DRkdfUlNQOgorCQliZmFfdHJjKGNlZSwgZ2V0X3JzcC0+Y21kX3N0YXR1cyk7CisJCWJmYV9jZWVfZ2V0X2F0dHJfaXNyKGNlZSwgZ2V0X3JzcC0+Y21kX3N0YXR1cyk7CisJCWJyZWFrOworCWNhc2UgQkZJX0NFRV9JMkhfR0VUX1NUQVRTX1JTUDoKKwkJYmZhX2NlZV9nZXRfc3RhdHNfaXNyKGNlZSwgZ2V0X3JzcC0+Y21kX3N0YXR1cyk7CisJCWJyZWFrOworCWNhc2UgQkZJX0NFRV9JMkhfUkVTRVRfU1RBVFNfUlNQOgorCQliZmFfY2VlX3Jlc2V0X3N0YXRzX2lzcihjZWUsIGdldF9yc3AtPmNtZF9zdGF0dXMpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworLyoqCisgKiBiZmFfY2VlX2hiZmFpbCgpCisgKgorICoKKyAqIEBwYXJhbVtpbl0gUG9pbnRlciB0byB0aGUgQ0VFIG1vZHVsZSBkYXRhIHN0cnVjdHVyZS4KKyAqCisgKiBAcmV0dXJuIHZvaWQKKyAqLworCit2b2lkCitiZmFfY2VlX2hiZmFpbCh2b2lkICphcmcpCit7CisJc3RydWN0IGJmYV9jZWVfcyAqY2VlOworCWNlZSA9IChzdHJ1Y3QgYmZhX2NlZV9zICopYXJnOworCisJaWYgKGNlZS0+Z2V0X2F0dHJfcGVuZGluZyA9PSBCRkFfVFJVRSkgeworCQljZWUtPmdldF9hdHRyX3N0YXR1cyA9IEJGQV9TVEFUVVNfRkFJTEVEOworCQljZWUtPmdldF9hdHRyX3BlbmRpbmcgPSBCRkFfRkFMU0U7CisJCWlmIChjZWUtPmNiZm4uZ2V0X2F0dHJfY2JmbikgeworCQkJY2VlLT5jYmZuLmdldF9hdHRyX2NiZm4oY2VlLT5jYmZuLmdldF9hdHRyX2NiYXJnLAorCQkJCQkJQkZBX1NUQVRVU19GQUlMRUQpOworCQl9CisJfQorCWlmIChjZWUtPmdldF9zdGF0c19wZW5kaW5nID09IEJGQV9UUlVFKSB7CisJCWNlZS0+Z2V0X3N0YXRzX3N0YXR1cyA9IEJGQV9TVEFUVVNfRkFJTEVEOworCQljZWUtPmdldF9zdGF0c19wZW5kaW5nID0gQkZBX0ZBTFNFOworCQlpZiAoY2VlLT5jYmZuLmdldF9zdGF0c19jYmZuKSB7CisJCQljZWUtPmNiZm4uZ2V0X3N0YXRzX2NiZm4oY2VlLT5jYmZuLmdldF9zdGF0c19jYmFyZywKKwkJCQkJCSBCRkFfU1RBVFVTX0ZBSUxFRCk7CisJCX0KKwl9CisJaWYgKGNlZS0+cmVzZXRfc3RhdHNfcGVuZGluZyA9PSBCRkFfVFJVRSkgeworCQljZWUtPnJlc2V0X3N0YXRzX3N0YXR1cyA9IEJGQV9TVEFUVVNfRkFJTEVEOworCQljZWUtPnJlc2V0X3N0YXRzX3BlbmRpbmcgPSBCRkFfRkFMU0U7CisJCWlmIChjZWUtPmNiZm4ucmVzZXRfc3RhdHNfY2JmbikgeworCQkJY2VlLT5jYmZuLnJlc2V0X3N0YXRzX2NiZm4oY2VlLT5jYmZuLnJlc2V0X3N0YXRzX2NiYXJnLAorCQkJCQkJICAgQkZBX1NUQVRVU19GQUlMRUQpOworCQl9CisJfQorfQorCisvKioKKyAqIGJmYV9jZWVfYXR0YWNoKCkKKyAqCisgKgorICogQHBhcmFtW2luXSBjZWUgLSBQb2ludGVyIHRvIHRoZSBDRUUgbW9kdWxlIGRhdGEgc3RydWN0dXJlCisgKiAgICAgICAgICAgIGlvYyAtIFBvaW50ZXIgdG8gdGhlIGlvYyBtb2R1bGUgZGF0YSBzdHJ1Y3R1cmUKKyAqICAgICAgICAgICAgZGV2IC0gUG9pbnRlciB0byB0aGUgZGV2aWNlIGRyaXZlciBtb2R1bGUgZGF0YSBzdHJ1Y3R1cmUKKyAqICAgICAgICAgICAgICAgICAgVGhlIGRldmljZSBkcml2ZXIgc3BlY2lmaWMgbWJveCBJU1IgZnVuY3Rpb25zIGhhdmUKKyAqICAgICAgICAgICAgICAgICAgdGhpcyBwb2ludGVyIGFzIG9uZSBvZiB0aGUgcGFyYW1ldGVycy4KKyAqICAgICAgICAgICAgdHJjbW9kIC0KKyAqICAgICAgICAgICAgbG9nbW9kIC0KKyAqCisgKiBAcmV0dXJuIHZvaWQKKyAqLwordm9pZAorYmZhX2NlZV9hdHRhY2goc3RydWN0IGJmYV9jZWVfcyAqY2VlLCBzdHJ1Y3QgYmZhX2lvY19zICppb2MsIHZvaWQgKmRldiwKKwkgICAgICAgc3RydWN0IGJmYV90cmNfbW9kX3MgKnRyY21vZCwgc3RydWN0IGJmYV9sb2dfbW9kX3MgKmxvZ21vZCkKK3sKKwliZmFfYXNzZXJ0KGNlZSAhPSBOVUxMKTsKKwljZWUtPmRldiA9IGRldjsKKwljZWUtPnRyY21vZCA9IHRyY21vZDsKKwljZWUtPmxvZ21vZCA9IGxvZ21vZDsKKwljZWUtPmlvYyA9IGlvYzsKKworCWJmYV9pb2NfbWJveF9yZWdpc3IoY2VlLT5pb2MsIEJGSV9NQ19DRUUsIGJmYV9jZWVfaXNyLCBjZWUpOworCWJmYV9pb2NfaGJmYWlsX2luaXQoJmNlZS0+aGJmYWlsLCBiZmFfY2VlX2hiZmFpbCwgY2VlKTsKKwliZmFfaW9jX2hiZmFpbF9yZWdpc3RlcihjZWUtPmlvYywgJmNlZS0+aGJmYWlsKTsKKwliZmFfdHJjKGNlZSwgMCk7Cit9CisKKy8qKgorICogYmZhX2NlZV9kZXRhY2goKQorICoKKyAqCisgKiBAcGFyYW1baW5dIGNlZSAtIFBvaW50ZXIgdG8gdGhlIENFRSBtb2R1bGUgZGF0YSBzdHJ1Y3R1cmUKKyAqCisgKiBAcmV0dXJuIHZvaWQKKyAqLwordm9pZAorYmZhX2NlZV9kZXRhY2goc3RydWN0IGJmYV9jZWVfcyAqY2VlKQoreworCS8qCisJICogRm9yIG5vdywganVzdCBjaGVjayBpZiB0aGVyZSBpcyBzb21lIGlvY3RsIHBlbmRpbmcgYW5kIG1hcmsgdGhhdCBhcworCSAqIGZhaWxlZD8KKwkgKi8KKwkvKiBiZmFfY2VlX2hiZmFpbChjZWUpOyAqLworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfY29yZS5jIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfY29yZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0ZTJkMTEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9jb3JlLmMKQEAgLTAsMCArMSw0MDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGJmYS5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfcGNpLmg+CisjaW5jbHVkZSA8Y3MvYmZhX2RlYnVnLmg+CisjaW5jbHVkZSA8YmZhX2lvY2ZjLmg+CisKKyNkZWZpbmUgREVGX0NGR19OVU1fRkFCUklDUyAgICAgICAgIDEKKyNkZWZpbmUgREVGX0NGR19OVU1fTFBPUlRTICAgICAgICAgIDI1NgorI2RlZmluZSBERUZfQ0ZHX05VTV9DUVMgICAgICAgICAgICAgNAorI2RlZmluZSBERUZfQ0ZHX05VTV9JT0lNX1JFUVMgICAgICAgKEJGQV9JT0lNX01BWCkKKyNkZWZpbmUgREVGX0NGR19OVU1fVFNLSU1fUkVRUyAgICAgIDEyOAorI2RlZmluZSBERUZfQ0ZHX05VTV9GQ1hQX1JFUVMgICAgICAgNjQKKyNkZWZpbmUgREVGX0NGR19OVU1fVUZfQlVGUyAgICAgICAgIDY0CisjZGVmaW5lIERFRl9DRkdfTlVNX1JQT1JUUyAgICAgICAgICAxMDI0CisjZGVmaW5lIERFRl9DRkdfTlVNX0lUTklNUyAgICAgICAgICAoREVGX0NGR19OVU1fUlBPUlRTKQorI2RlZmluZSBERUZfQ0ZHX05VTV9USU5TICAgICAgICAgICAgMjU2CisKKyNkZWZpbmUgREVGX0NGR19OVU1fU0dQR1MgICAgICAgICAgIDIwNDgKKyNkZWZpbmUgREVGX0NGR19OVU1fUkVRUV9FTEVNUyAgICAgIDI1NgorI2RlZmluZSBERUZfQ0ZHX05VTV9SU1BRX0VMRU1TICAgICAgNjQKKyNkZWZpbmUgREVGX0NGR19OVU1fU0JPT1RfVEdUUyAgICAgIDE2CisjZGVmaW5lIERFRl9DRkdfTlVNX1NCT09UX0xVTlMgICAgICAxNgorCisvKioKKyAqIFVzZSB0aGlzIGZ1bmN0aW9uIHF1ZXJ5IHRoZSBtZW1vcnkgcmVxdWlyZW1lbnQgb2YgdGhlIEJGQSBsaWJyYXJ5LgorICogVGhpcyBmdW5jdGlvbiBuZWVkcyB0byBiZSBjYWxsZWQgYmVmb3JlIGJmYV9hdHRhY2goKSB0byBnZXQgdGhlCisgKiBtZW1vcnkgcmVxdWlyZWQgb2YgdGhlIEJGQSBsYXllciBmb3IgYSBnaXZlbiBkcml2ZXIgY29uZmlndXJhdGlvbi4KKyAqCisgKiBUaGlzIGNhbGwgd2lsbCBmYWlsLCBpZiB0aGUgY2FwIGlzIG91dCBvZiByYW5nZSBjb21wYXJlZCB0byBwcmUtZGVmaW5lZAorICogdmFsdWVzIHdpdGhpbiB0aGUgQkZBIGxpYnJhcnkKKyAqCisgKiBAcGFyYW1baW5dIGNmZyAtIAlwb2ludGVyIHRvIGJmYV9pb2NfY2ZnX3QuIERyaXZlciBsYXllciBzaG91bGQgaW5kaWNhdGUKKyAqIAkJCWl0cyBjb25maWd1cmF0aW9uIGluIHRoaXMgc3RydWN0dXJlLgorICoJCQlUaGUgZGVmYXVsdCB2YWx1ZXMgZm9yIHN0cnVjdCBiZmFfaW9jZmNfY2ZnX3MgY2FuIGJlCisgKgkJCWZldGNoZWQgdXNpbmcgYmZhX2NmZ19nZXRfZGVmYXVsdCgpIEFQSS4KKyAqCisgKiAJCQlJZiBjYXAncyBib3VuZGFyeSBjaGVjayBmYWlscywgdGhlIGxpYnJhcnkgd2lsbCB1c2UKKyAqCQkJdGhlIGRlZmF1bHQgYmZhX2NhcF90IHZhbHVlcyAoYW5kIGxvZyBhIHdhcm5pbmcgbXNnKS4KKyAqCisgKiBAcGFyYW1bb3V0XSBtZW1pbmZvIC0gcG9pbnRlciB0byBiZmFfbWVtaW5mb190LiBUaGlzIGNvbnRlbnQKKyAqIAkJCWluZGljYXRlcyB0aGUgbWVtb3J5IHR5cGUgKHNlZSBiZmFfbWVtX3R5cGVfdCkgYW5kCisgKgkJCWFtb3VudCBvZiBtZW1vcnkgcmVxdWlyZWQuCisgKgorICoJCQlEcml2ZXIgc2hvdWxkIGFsbG9jYXRlIHRoZSBtZW1vcnksIHBvcHVsYXRlIHRoZQorICoJCQlzdGFydGluZyBhZGRyZXNzIGZvciBlYWNoIGJsb2NrIGFuZCBwcm92aWRlIHRoZSBzYW1lCisgKgkJCXN0cnVjdHVyZSBhcyBpbnB1dCBwYXJhbWV0ZXIgdG8gYmZhX2F0dGFjaCgpIGNhbGwuCisgKgorICogQHJldHVybiB2b2lkCisgKgorICogU3BlY2lhbCBDb25zaWRlcmF0aW9uczogQG5vdGUKKyAqLwordm9pZAorYmZhX2NmZ19nZXRfbWVtaW5mbyhzdHJ1Y3QgYmZhX2lvY2ZjX2NmZ19zICpjZmcsIHN0cnVjdCBiZmFfbWVtaW5mb19zICptZW1pbmZvKQoreworCWludCAgICAgICAgICAgICBpOworCXUzMiAgICAgICAga21fbGVuID0gMCwgZG1fbGVuID0gMDsKKworCWJmYV9hc3NlcnQoKGNmZyAhPSBOVUxMKSAmJiAobWVtaW5mbyAhPSBOVUxMKSk7CisKKwliZmFfb3NfbWVtc2V0KCh2b2lkICopbWVtaW5mbywgMCwgc2l6ZW9mKHN0cnVjdCBiZmFfbWVtaW5mb19zKSk7CisJbWVtaW5mby0+bWVtaW5mb1tCRkFfTUVNX1RZUEVfS1ZBIC0gMV0ubWVtX3R5cGUgPQorCQlCRkFfTUVNX1RZUEVfS1ZBOworCW1lbWluZm8tPm1lbWluZm9bQkZBX01FTV9UWVBFX0RNQSAtIDFdLm1lbV90eXBlID0KKwkJQkZBX01FTV9UWVBFX0RNQTsKKworCWJmYV9pb2NmY19tZW1pbmZvKGNmZywgJmttX2xlbiwgJmRtX2xlbik7CisKKwlmb3IgKGkgPSAwOyBoYWxfbW9kc1tpXTsgaSsrKQorCQloYWxfbW9kc1tpXS0+bWVtaW5mbyhjZmcsICZrbV9sZW4sICZkbV9sZW4pOworCisKKwltZW1pbmZvLT5tZW1pbmZvW0JGQV9NRU1fVFlQRV9LVkEgLSAxXS5tZW1fbGVuID0ga21fbGVuOworCW1lbWluZm8tPm1lbWluZm9bQkZBX01FTV9UWVBFX0RNQSAtIDFdLm1lbV9sZW4gPSBkbV9sZW47Cit9CisKKy8qKgorICogVXNlIHRoaXMgZnVuY3Rpb24gdG8gZG8gYXR0YWNoIHRoZSBkcml2ZXIgaW5zdGFuY2Ugd2l0aCB0aGUgQkZBCisgKiBsaWJyYXJ5LiBUaGlzIGZ1bmN0aW9uIHdpbGwgbm90IHRyaWdnZXIgYW55IEhXIGluaXRpYWxpemF0aW9uCisgKiBwcm9jZXNzICh3aGljaCB3aWxsIGJlIGRvbmUgaW4gYmZhX2luaXQoKSBjYWxsKQorICoKKyAqIFRoaXMgY2FsbCB3aWxsIGZhaWwsIGlmIHRoZSBjYXAgaXMgb3V0IG9mIHJhbmdlIGNvbXBhcmVkIHRvCisgKiBwcmUtZGVmaW5lZCB2YWx1ZXMgd2l0aGluIHRoZSBCRkEgbGlicmFyeQorICoKKyAqIEBwYXJhbVtvdXRdCWJmYQlQb2ludGVyIHRvIGJmYV90LgorICogQHBhcmFtW2luXQliZmFkIAlPcGFxdWUgaGFuZGxlIGJhY2sgdG8gdGhlIGRyaXZlcidzIElPQyBzdHJ1Y3R1cmUKKyAqIEBwYXJhbVtpbl0JY2ZnCVBvaW50ZXIgdG8gYmZhX2lvY19jZmdfdC4gU2hvdWxkIGJlIHNhbWUgc3RydWN0dXJlCisgKiAJCQl0aGF0IHdhcyB1c2VkIGluIGJmYV9jZmdfZ2V0X21lbWluZm8oKS4KKyAqIEBwYXJhbVtpbl0gCW1lbWluZm8gUG9pbnRlciB0byBiZmFfbWVtaW5mb190LiBUaGUgZHJpdmVyIHNob3VsZAorICogCQkJdXNlIHRoZSBiZmFfY2ZnX2dldF9tZW1pbmZvKCkgY2FsbCB0bworICogCQkJZmluZCB0aGUgbWVtb3J5IGJsb2NrcyByZXF1aXJlZCwgYWxsb2NhdGUgdGhlCisgKiAJCQlyZXF1aXJlZCBtZW1vcnkgYW5kIHByb3ZpZGUgdGhlIHN0YXJ0aW5nIGFkZHJlc3Nlcy4KKyAqIEBwYXJhbVtpbl0gCXBjaWRldglwb2ludGVyIHRvIHN0cnVjdCBiZmFfcGNpZGV2X3MKKyAqCisgKiBAcmV0dXJuCisgKiB2b2lkCisgKgorICogU3BlY2lhbCBDb25zaWRlcmF0aW9uczoKKyAqCisgKiBAbm90ZQorICoKKyAqLwordm9pZAorYmZhX2F0dGFjaChzdHJ1Y3QgYmZhX3MgKmJmYSwgdm9pZCAqYmZhZCwgc3RydWN0IGJmYV9pb2NmY19jZmdfcyAqY2ZnLAorCSAgICAgICBzdHJ1Y3QgYmZhX21lbWluZm9fcyAqbWVtaW5mbywgc3RydWN0IGJmYV9wY2lkZXZfcyAqcGNpZGV2KQoreworCWludCAgICAgICAgICAgICBpOworCXN0cnVjdCBiZmFfbWVtX2VsZW1fcyAqbWVsZW07CisKKwliZmEtPmZjcyA9IEJGQV9GQUxTRTsKKworCWJmYV9hc3NlcnQoKGNmZyAhPSBOVUxMKSAmJiAobWVtaW5mbyAhPSBOVUxMKSk7CisKKwkvKioKKwkgKiBpbml0aWFsaXplIGFsbCBtZW1vcnkgcG9pbnRlcnMgZm9yIGl0ZXJhdGl2ZSBhbGxvY2F0aW9uCisJICovCisJZm9yIChpID0gMDsgaSA8IEJGQV9NRU1fVFlQRV9NQVg7IGkrKykgeworCQltZWxlbSA9IG1lbWluZm8tPm1lbWluZm8gKyBpOworCQltZWxlbS0+a3ZhX2N1cnAgPSBtZWxlbS0+a3ZhOworCQltZWxlbS0+ZG1hX2N1cnAgPSBtZWxlbS0+ZG1hOworCX0KKworCWJmYV9pb2NmY19hdHRhY2goYmZhLCBiZmFkLCBjZmcsIG1lbWluZm8sIHBjaWRldik7CisKKwlmb3IgKGkgPSAwOyBoYWxfbW9kc1tpXTsgaSsrKQorCQloYWxfbW9kc1tpXS0+YXR0YWNoKGJmYSwgYmZhZCwgY2ZnLCBtZW1pbmZvLCBwY2lkZXYpOworCit9CisKKy8qKgorICogVXNlIHRoaXMgZnVuY3Rpb24gdG8gZGVsZXRlIGEgQkZBIElPQy4gSU9DIHNob3VsZCBiZSBzdG9wcGVkIChieQorICogY2FsbGluZyBiZmFfc3RvcCgpKSBiZWZvcmUgdGhpcyBmdW5jdGlvbiBjYWxsLgorICoKKyAqIEBwYXJhbVtpbl0gYmZhIC0gcG9pbnRlciB0byBiZmFfdC4KKyAqCisgKiBAcmV0dXJuCisgKiB2b2lkCisgKgorICogU3BlY2lhbCBDb25zaWRlcmF0aW9uczoKKyAqCisgKiBAbm90ZQorICovCit2b2lkCitiZmFfZGV0YWNoKHN0cnVjdCBiZmFfcyAqYmZhKQoreworCWludAlpOworCisJZm9yIChpID0gMDsgaGFsX21vZHNbaV07IGkrKykKKwkJaGFsX21vZHNbaV0tPmRldGFjaChiZmEpOworCisJYmZhX2lvY2ZjX2RldGFjaChiZmEpOworfQorCisKK3ZvaWQKK2JmYV9pbml0X3RyYyhzdHJ1Y3QgYmZhX3MgKmJmYSwgc3RydWN0IGJmYV90cmNfbW9kX3MgKnRyY21vZCkKK3sKKwliZmEtPnRyY21vZCA9IHRyY21vZDsKK30KKworCit2b2lkCitiZmFfaW5pdF9sb2coc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBiZmFfbG9nX21vZF9zICpsb2dtb2QpCit7CisJYmZhLT5sb2dtID0gbG9nbW9kOworfQorCisKK3ZvaWQKK2JmYV9pbml0X2FlbihzdHJ1Y3QgYmZhX3MgKmJmYSwgc3RydWN0IGJmYV9hZW5fcyAqYWVuKQoreworCWJmYS0+YWVuID0gYWVuOworfQorCit2b2lkCitiZmFfaW5pdF9wbG9nKHN0cnVjdCBiZmFfcyAqYmZhLCBzdHJ1Y3QgYmZhX3Bsb2dfcyAqcGxvZykKK3sKKwliZmEtPnBsb2cgPSBwbG9nOworfQorCisvKioKKyAqIEluaXRpYWxpemUgSU9DLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gaW1tZWRpYXRlbHksIHdoZW4gdGhlIElPQyBpbml0aWFsaXphdGlvbiBpcworICogY29tcGxldGVkLCB0aGUgYmZhX2NiX2luaXQoKSB3aWxsIGJlIGNhbGxlZC4KKyAqCisgKiBAcGFyYW1baW5dCWJmYQlpbnN0YW5jZQorICoKKyAqIEByZXR1cm4gdm9pZAorICoKKyAqIFNwZWNpYWwgQ29uc2lkZXJhdGlvbnM6CisgKgorICogQG5vdGUKKyAqIFdoZW4gdGhpcyBmdW5jdGlvbiByZXR1cm5zLCB0aGUgZHJpdmVyIHNob3VsZCByZWdpc3RlciB0aGUgaW50ZXJydXB0IHNlcnZpY2UKKyAqIHJvdXRpbmUocykgYW5kIGVuYWJsZSB0aGUgZGV2aWNlIGludGVycnVwdHMuIElmIHRoaXMgaXMgbm90IGRvbmUsCisgKiBiZmFfY2JfaW5pdCgpIHdpbGwgbmV2ZXIgZ2V0IGNhbGxlZAorICovCit2b2lkCitiZmFfaW5pdChzdHJ1Y3QgYmZhX3MgKmJmYSkKK3sKKwliZmFfaW9jZmNfaW5pdChiZmEpOworfQorCisvKioKKyAqIFVzZSB0aGlzIGZ1bmN0aW9uIGluaXRpYXRlIHRoZSBJT0MgY29uZmlndXJhdGlvbiBzZXR1cC4gVGhpcyBmdW5jdGlvbgorICogd2lsbCByZXR1cm4gaW1tZWRpYXRlbHkuCisgKgorICogQHBhcmFtW2luXQliZmEJaW5zdGFuY2UKKyAqCisgKiBAcmV0dXJuIE5vbmUKKyAqLwordm9pZAorYmZhX3N0YXJ0KHN0cnVjdCBiZmFfcyAqYmZhKQoreworCWJmYV9pb2NmY19zdGFydChiZmEpOworfQorCisvKioKKyAqIFVzZSB0aGlzIGZ1bmN0aW9uIHF1aWVzZSB0aGUgSU9DLiBUaGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIGltbWVkaWF0ZWx5LAorICogd2hlbiB0aGUgSU9DIGlzIGFjdHVhbGx5IHN0b3BwZWQsIHRoZSBiZmFfY2Jfc3RvcCgpIHdpbGwgYmUgY2FsbGVkLgorICoKKyAqIEBwYXJhbVtpbl0gCWJmYSAtIHBvaW50ZXIgdG8gYmZhX3QuCisgKgorICogQHJldHVybiBOb25lCisgKgorICogU3BlY2lhbCBDb25zaWRlcmF0aW9uczoKKyAqIGJmYV9jYl9zdG9wKCkgY291bGQgYmUgY2FsbGVkIGJlZm9yZSBvciBhZnRlciBiZmFfc3RvcCgpIHJldHVybnMuCisgKgorICogQG5vdGUKKyAqIEluIGNhc2Ugb2YgYW55IGZhaWx1cmUsIHdlIGNvdWxkIGhhbmRsZSBpdCBhdXRvbWF0aWNhbGx5IGJ5IGRvaW5nIGEKKyAqIHJlc2V0IGFuZCB0aGVuIHN1Y2NlZWQgdGhlIGJmYV9zdG9wKCkgY2FsbC4KKyAqLwordm9pZAorYmZhX3N0b3Aoc3RydWN0IGJmYV9zICpiZmEpCit7CisJYmZhX2lvY2ZjX3N0b3AoYmZhKTsKK30KKwordm9pZAorYmZhX2NvbXBfZGVxKHN0cnVjdCBiZmFfcyAqYmZhLCBzdHJ1Y3QgbGlzdF9oZWFkICpjb21wX3EpCit7CisJSU5JVF9MSVNUX0hFQUQoY29tcF9xKTsKKwlsaXN0X3NwbGljZV90YWlsX2luaXQoJmJmYS0+Y29tcF9xLCBjb21wX3EpOworfQorCit2b2lkCitiZmFfY29tcF9wcm9jZXNzKHN0cnVjdCBiZmFfcyAqYmZhLCBzdHJ1Y3QgbGlzdF9oZWFkICpjb21wX3EpCit7CisJc3RydWN0IGxpc3RfaGVhZCAgICAgICAgKnFlOworCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgICpxZW47CisJc3RydWN0IGJmYV9jYl9xZV9zICAgKmhjYl9xZTsKKworCWxpc3RfZm9yX2VhY2hfc2FmZShxZSwgcWVuLCBjb21wX3EpIHsKKwkJaGNiX3FlID0gKHN0cnVjdCBiZmFfY2JfcWVfcyAqKSBxZTsKKwkJaGNiX3FlLT5jYmZuKGhjYl9xZS0+Y2JhcmcsIEJGQV9UUlVFKTsKKwl9Cit9CisKK3ZvaWQKK2JmYV9jb21wX2ZyZWUoc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBsaXN0X2hlYWQgKmNvbXBfcSkKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICAqcWU7CisJc3RydWN0IGJmYV9jYl9xZV9zICAgKmhjYl9xZTsKKworCXdoaWxlICghbGlzdF9lbXB0eShjb21wX3EpKSB7CisJCWJmYV9xX2RlcShjb21wX3EsICZxZSk7CisJCWhjYl9xZSA9IChzdHJ1Y3QgYmZhX2NiX3FlX3MgKikgcWU7CisJCWhjYl9xZS0+Y2JmbihoY2JfcWUtPmNiYXJnLCBCRkFfRkFMU0UpOworCX0KK30KKwordm9pZAorYmZhX2F0dGFjaF9mY3Moc3RydWN0IGJmYV9zICpiZmEpCit7CisJYmZhLT5mY3MgPSBCRkFfVFJVRTsKK30KKworLyoqCisgKiBQZXJpb2RpYyB0aW1lciBoZWFydCBiZWF0IGZyb20gZHJpdmVyCisgKi8KK3ZvaWQKK2JmYV90aW1lcl90aWNrKHN0cnVjdCBiZmFfcyAqYmZhKQoreworCWJmYV90aW1lcl9iZWF0KCZiZmEtPnRpbWVyX21vZCk7Cit9CisKKyNpZm5kZWYgQkZBX0JJT1NfQlVJTEQKKy8qKgorICogUmV0dXJuIHRoZSBsaXN0IG9mIFBDSSB2ZW5kb3IvZGV2aWNlIGlkIGxpc3RzIHN1cHBvcnRlZCBieSB0aGlzCisgKiBCRkEgaW5zdGFuY2UuCisgKi8KK3ZvaWQKK2JmYV9nZXRfcGNpaWRzKHN0cnVjdCBiZmFfcGNpaWRfcyAqKnBjaWlkcywgaW50ICpucGNpaWRzKQoreworCXN0YXRpYyBzdHJ1Y3QgYmZhX3BjaWlkX3MgX19wY2lpZHNbXSA9IHsKKwkJe0JGQV9QQ0lfVkVORE9SX0lEX0JST0NBREUsIEJGQV9QQ0lfREVWSUNFX0lEX0ZDXzhHMlB9LAorCQl7QkZBX1BDSV9WRU5ET1JfSURfQlJPQ0FERSwgQkZBX1BDSV9ERVZJQ0VfSURfRkNfOEcxUH0sCisJCXtCRkFfUENJX1ZFTkRPUl9JRF9CUk9DQURFLCBCRkFfUENJX0RFVklDRV9JRF9DVH0sCisJfTsKKworCSpucGNpaWRzID0gc2l6ZW9mKF9fcGNpaWRzKSAvIHNpemVvZihfX3BjaWlkc1swXSk7CisJKnBjaWlkcyA9IF9fcGNpaWRzOworfQorCisvKioKKyAqIFVzZSB0aGlzIGZ1bmN0aW9uIHF1ZXJ5IHRoZSBkZWZhdWx0IHN0cnVjdCBiZmFfaW9jZmNfY2ZnX3MgdmFsdWUgKGNvbXBpbGVkCisgKiBpbnRvIEJGQSBsYXllcikuIFRoZSBPUyBkcml2ZXIgY2FuIHRoZW4gdHVybiBiYWNrIGFuZCBvdmVyd3JpdGUgZW50cmllcyB0aGF0CisgKiBoYXZlIGJlZW4gY29uZmlndXJlZCBieSB0aGUgdXNlci4KKyAqCisgKiBAcGFyYW1baW5dIGNmZyAtIHBvaW50ZXIgdG8gYmZhX2lvY19jZmdfdAorICoKKyAqIEByZXR1cm4KKyAqCXZvaWQKKyAqCisgKiBTcGVjaWFsIENvbnNpZGVyYXRpb25zOgorICogCW5vdGUKKyAqLwordm9pZAorYmZhX2NmZ19nZXRfZGVmYXVsdChzdHJ1Y3QgYmZhX2lvY2ZjX2NmZ19zICpjZmcpCit7CisJY2ZnLT5md2NmZy5udW1fZmFicmljcyA9IERFRl9DRkdfTlVNX0ZBQlJJQ1M7CisJY2ZnLT5md2NmZy5udW1fbHBvcnRzID0gREVGX0NGR19OVU1fTFBPUlRTOworCWNmZy0+ZndjZmcubnVtX3Jwb3J0cyA9IERFRl9DRkdfTlVNX1JQT1JUUzsKKwljZmctPmZ3Y2ZnLm51bV9pb2ltX3JlcXMgPSBERUZfQ0ZHX05VTV9JT0lNX1JFUVM7CisJY2ZnLT5md2NmZy5udW1fdHNraW1fcmVxcyA9IERFRl9DRkdfTlVNX1RTS0lNX1JFUVM7CisJY2ZnLT5md2NmZy5udW1fZmN4cF9yZXFzID0gREVGX0NGR19OVU1fRkNYUF9SRVFTOworCWNmZy0+ZndjZmcubnVtX3VmX2J1ZnMgPSBERUZfQ0ZHX05VTV9VRl9CVUZTOworCWNmZy0+ZndjZmcubnVtX2NxcyA9IERFRl9DRkdfTlVNX0NRUzsKKworCWNmZy0+ZHJ2Y2ZnLm51bV9yZXFxX2VsZW1zID0gREVGX0NGR19OVU1fUkVRUV9FTEVNUzsKKwljZmctPmRydmNmZy5udW1fcnNwcV9lbGVtcyA9IERFRl9DRkdfTlVNX1JTUFFfRUxFTVM7CisJY2ZnLT5kcnZjZmcubnVtX3NncGdzID0gREVGX0NGR19OVU1fU0dQR1M7CisJY2ZnLT5kcnZjZmcubnVtX3Nib290X3RndHMgPSBERUZfQ0ZHX05VTV9TQk9PVF9UR1RTOworCWNmZy0+ZHJ2Y2ZnLm51bV9zYm9vdF9sdW5zID0gREVGX0NGR19OVU1fU0JPT1RfTFVOUzsKKwljZmctPmRydmNmZy5wYXRoX3RvdiA9IEJGQV9GQ1BJTV9QQVRIVE9WX0RFRjsKKwljZmctPmRydmNmZy5pb2NfcmVjb3ZlciA9IEJGQV9GQUxTRTsKKwljZmctPmRydmNmZy5kZWxheV9jb21wID0gQkZBX0ZBTFNFOworCit9CisKK3ZvaWQKK2JmYV9jZmdfZ2V0X21pbihzdHJ1Y3QgYmZhX2lvY2ZjX2NmZ19zICpjZmcpCit7CisJYmZhX2NmZ19nZXRfZGVmYXVsdChjZmcpOworCWNmZy0+ZndjZmcubnVtX2lvaW1fcmVxcyAgID0gQkZBX0lPSU1fTUlOOworCWNmZy0+ZndjZmcubnVtX3Rza2ltX3JlcXMgID0gQkZBX1RTS0lNX01JTjsKKwljZmctPmZ3Y2ZnLm51bV9mY3hwX3JlcXMgICA9IEJGQV9GQ1hQX01JTjsKKwljZmctPmZ3Y2ZnLm51bV91Zl9idWZzICAgICA9IEJGQV9VRl9NSU47CisJY2ZnLT5md2NmZy5udW1fcnBvcnRzICAgICAgPSBCRkFfUlBPUlRfTUlOOworCisJY2ZnLT5kcnZjZmcubnVtX3NncGdzICAgICAgPSBCRkFfU0dQR19NSU47CisJY2ZnLT5kcnZjZmcubnVtX3JlcXFfZWxlbXMgPSBCRkFfUkVRUV9ORUxFTVNfTUlOOworCWNmZy0+ZHJ2Y2ZnLm51bV9yc3BxX2VsZW1zID0gQkZBX1JTUFFfTkVMRU1TX01JTjsKKwljZmctPmRydmNmZy5taW5fY2ZnICAgICAgICA9IEJGQV9UUlVFOworfQorCit2b2lkCitiZmFfZ2V0X2F0dHIoc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBiZmFfaW9jX2F0dHJfcyAqaW9jX2F0dHIpCit7CisJYmZhX2lvY19nZXRfYXR0cigmYmZhLT5pb2MsIGlvY19hdHRyKTsKK30KKworLyoqCisgKiBSZXRyaWV2ZSBmaXJtd2FyZSB0cmFjZSBpbmZvcm1hdGlvbiBvbiBJT0MgZmFpbHVyZS4KKyAqLworYmZhX3N0YXR1c190CitiZmFfZGVidWdfZndzYXZlKHN0cnVjdCBiZmFfcyAqYmZhLCB2b2lkICp0cmNkYXRhLCBpbnQgKnRyY2xlbikKK3sKKwlyZXR1cm4gYmZhX2lvY19kZWJ1Z19md3NhdmUoJmJmYS0+aW9jLCB0cmNkYXRhLCB0cmNsZW4pOworfQorCisvKioKKyAqIAkJRmV0Y2ggZmlybXdhcmUgdHJhY2UgZGF0YS4KKyAqCisgKiBAcGFyYW1baW5dCQliZmEJCQlCRkEgaW5zdGFuY2UKKyAqIEBwYXJhbVtvdXRdCQl0cmNkYXRhCQlGaXJtd2FyZSB0cmFjZSBidWZmZXIKKyAqIEBwYXJhbVtpbixvdXRdCXRyY2xlbgkJRmlybXdhcmUgdHJhY2UgYnVmZmVyIGxlbgorICoKKyAqIEByZXR2YWwgQkZBX1NUQVRVU19PSwkJCUZpcm13YXJlIHRyYWNlIGlzIGZldGNoZWQuCisgKiBAcmV0dmFsIEJGQV9TVEFUVVNfSU5QUk9HUkVTUwlGaXJtd2FyZSB0cmFjZSBmZXRjaCBpcyBpbiBwcm9ncmVzcy4KKyAqLworYmZhX3N0YXR1c190CitiZmFfZGVidWdfZnd0cmMoc3RydWN0IGJmYV9zICpiZmEsIHZvaWQgKnRyY2RhdGEsIGludCAqdHJjbGVuKQoreworCXJldHVybiBiZmFfaW9jX2RlYnVnX2Z3dHJjKCZiZmEtPmlvYywgdHJjZGF0YSwgdHJjbGVuKTsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfY3NkZWJ1Zy5jIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfY3NkZWJ1Zy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiNzFkMzQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9jc2RlYnVnLmMKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8Y3MvYmZhX2RlYnVnLmg+CisjaW5jbHVkZSA8YmZhX29zX2luYy5oPgorI2luY2x1ZGUgPGNzL2JmYV9xLmg+CisjaW5jbHVkZSA8bG9nL2JmYV9sb2dfaGFsLmg+CisKKy8qKgorICogIGNzX2RlYnVnX2FwaQorICovCisKKwordm9pZAorYmZhX3BhbmljKGludCBsaW5lLCBjaGFyICpmaWxlLCBjaGFyICpwYW5pY3N0cikKK3sKKwliZmFfbG9nKE5VTEwsIEJGQV9MT0dfSEFMX0FTU0VSVCwgZmlsZSwgbGluZSwgcGFuaWNzdHIpOworCWJmYV9vc19wYW5pYygpOworfQorCit2b2lkCitiZmFfc21fcGFuaWMoc3RydWN0IGJmYV9sb2dfbW9kX3MgKmxvZ20sIGludCBsaW5lLCBjaGFyICpmaWxlLCBpbnQgZXZlbnQpCit7CisJYmZhX2xvZyhsb2dtLCBCRkFfTE9HX0hBTF9TTV9BU1NFUlQsIGZpbGUsIGxpbmUsIGV2ZW50KTsKKwliZmFfb3NfcGFuaWMoKTsKK30KKworaW50CitiZmFfcV9pc19vbl9xX2Z1bmMoc3RydWN0IGxpc3RfaGVhZCAqcSwgc3RydWN0IGxpc3RfaGVhZCAqcWUpCit7CisJc3RydWN0IGxpc3RfaGVhZCAgICAgICAgKnRxZTsKKworCXRxZSA9IGJmYV9xX25leHQocSk7CisJd2hpbGUgKHRxZSAhPSBxKSB7CisJCWlmICh0cWUgPT0gcWUpCisJCQlyZXR1cm4gKDEpOworCQl0cWUgPSBiZmFfcV9uZXh0KHRxZSk7CisJCWlmICh0cWUgPT0gTlVMTCkKKwkJCWJyZWFrOworCX0KKwlyZXR1cm4gKDApOworfQorCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2ZjcGltLmMgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9mY3BpbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwMWJhYmUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9mY3BpbS5jCkBAIC0wLDAgKzEsMTc1IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxiZmEuaD4KKyNpbmNsdWRlIDxsb2cvYmZhX2xvZ19oYWwuaD4KKworQkZBX1RSQ19GSUxFKEhBTCwgRkNQSU0pOworQkZBX01PRFVMRShmY3BpbSk7CisKKy8qKgorICogIGhhbF9mY3BpbV9tb2QgQkZBIEZDUCBJbml0aWF0b3IgTW9kZSBtb2R1bGUKKyAqLworCisvKioKKyAqIAkJQ29tcHV0ZSBhbmQgcmV0dXJuIG1lbW9yeSBuZWVkZWQgYnkgRkNQKGltKSBtb2R1bGUuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNwaW1fbWVtaW5mbyhzdHJ1Y3QgYmZhX2lvY2ZjX2NmZ19zICpjZmcsIHUzMiAqa21fbGVuLAorCQl1MzIgKmRtX2xlbikKK3sKKwliZmFfaXRuaW1fbWVtaW5mbyhjZmcsIGttX2xlbiwgZG1fbGVuKTsKKworCS8qKgorCSAqIElPIG1lbW9yeQorCSAqLworCWlmIChjZmctPmZ3Y2ZnLm51bV9pb2ltX3JlcXMgPCBCRkFfSU9JTV9NSU4pCisJCWNmZy0+ZndjZmcubnVtX2lvaW1fcmVxcyA9IEJGQV9JT0lNX01JTjsKKwllbHNlIGlmIChjZmctPmZ3Y2ZnLm51bV9pb2ltX3JlcXMgPiBCRkFfSU9JTV9NQVgpCisJCWNmZy0+ZndjZmcubnVtX2lvaW1fcmVxcyA9IEJGQV9JT0lNX01BWDsKKworCSprbV9sZW4gKz0gY2ZnLT5md2NmZy5udW1faW9pbV9yZXFzICoKKwkgIChzaXplb2Yoc3RydWN0IGJmYV9pb2ltX3MpICsgc2l6ZW9mKHN0cnVjdCBiZmFfaW9pbV9zcF9zKSk7CisKKwkqZG1fbGVuICs9IGNmZy0+ZndjZmcubnVtX2lvaW1fcmVxcyAqIEJGSV9JT0lNX1NOU0xFTjsKKworCS8qKgorCSAqIHRhc2sgbWFuYWdlbWVudCBjb21tYW5kIG1lbW9yeQorCSAqLworCWlmIChjZmctPmZ3Y2ZnLm51bV90c2tpbV9yZXFzIDwgQkZBX1RTS0lNX01JTikKKwkJY2ZnLT5md2NmZy5udW1fdHNraW1fcmVxcyA9IEJGQV9UU0tJTV9NSU47CisJKmttX2xlbiArPSBjZmctPmZ3Y2ZnLm51bV90c2tpbV9yZXFzICogc2l6ZW9mKHN0cnVjdCBiZmFfdHNraW1fcyk7Cit9CisKKworc3RhdGljIHZvaWQKK2JmYV9mY3BpbV9hdHRhY2goc3RydWN0IGJmYV9zICpiZmEsIHZvaWQgKmJmYWQsIHN0cnVjdCBiZmFfaW9jZmNfY2ZnX3MgKmNmZywKKwkJICAgICBzdHJ1Y3QgYmZhX21lbWluZm9fcyAqbWVtaW5mbywgc3RydWN0IGJmYV9wY2lkZXZfcyAqcGNpZGV2KQoreworCXN0cnVjdCBiZmFfZmNwaW1fbW9kX3MgKmZjcGltID0gQkZBX0ZDUElNX01PRChiZmEpOworCisJYmZhX3RyYyhiZmEsIGNmZy0+ZHJ2Y2ZnLnBhdGhfdG92KTsKKwliZmFfdHJjKGJmYSwgY2ZnLT5md2NmZy5udW1fcnBvcnRzKTsKKwliZmFfdHJjKGJmYSwgY2ZnLT5md2NmZy5udW1faW9pbV9yZXFzKTsKKwliZmFfdHJjKGJmYSwgY2ZnLT5md2NmZy5udW1fdHNraW1fcmVxcyk7CisKKwlmY3BpbS0+YmZhICAgICAgICAgICAgPSBiZmE7CisJZmNwaW0tPm51bV9pdG5pbXMgICAgID0gY2ZnLT5md2NmZy5udW1fcnBvcnRzOworCWZjcGltLT5udW1faW9pbV9yZXFzICA9IGNmZy0+ZndjZmcubnVtX2lvaW1fcmVxczsKKwlmY3BpbS0+bnVtX3Rza2ltX3JlcXMgPSBjZmctPmZ3Y2ZnLm51bV90c2tpbV9yZXFzOworCWZjcGltLT5wYXRoX3RvdiAgICAgICA9IGNmZy0+ZHJ2Y2ZnLnBhdGhfdG92OworCWZjcGltLT5kZWxheV9jb21wCSAgPSBjZmctPmRydmNmZy5kZWxheV9jb21wOworCisJYmZhX2l0bmltX2F0dGFjaChmY3BpbSwgbWVtaW5mbyk7CisJYmZhX3Rza2ltX2F0dGFjaChmY3BpbSwgbWVtaW5mbyk7CisJYmZhX2lvaW1fYXR0YWNoKGZjcGltLCBtZW1pbmZvKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3BpbV9pbml0ZG9uZShzdHJ1Y3QgYmZhX3MgKmJmYSkKK3sKK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3BpbV9kZXRhY2goc3RydWN0IGJmYV9zICpiZmEpCit7CisJc3RydWN0IGJmYV9mY3BpbV9tb2RfcyAqZmNwaW0gPSBCRkFfRkNQSU1fTU9EKGJmYSk7CisKKwliZmFfaW9pbV9kZXRhY2goZmNwaW0pOworCWJmYV90c2tpbV9kZXRhY2goZmNwaW0pOworfQorCitzdGF0aWMgdm9pZAorYmZhX2ZjcGltX3N0YXJ0KHN0cnVjdCBiZmFfcyAqYmZhKQoreworfQorCitzdGF0aWMgdm9pZAorYmZhX2ZjcGltX3N0b3Aoc3RydWN0IGJmYV9zICpiZmEpCit7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNwaW1faW9jZGlzYWJsZShzdHJ1Y3QgYmZhX3MgKmJmYSkKK3sKKwlzdHJ1Y3QgYmZhX2ZjcGltX21vZF9zICpmY3BpbSA9IEJGQV9GQ1BJTV9NT0QoYmZhKTsKKwlzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltOworCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgICpxZSwgKnFlbjsKKworCWxpc3RfZm9yX2VhY2hfc2FmZShxZSwgcWVuLCAmZmNwaW0tPml0bmltX3EpIHsKKwkJaXRuaW0gPSAoc3RydWN0IGJmYV9pdG5pbV9zICopIHFlOworCQliZmFfaXRuaW1faW9jZGlzYWJsZShpdG5pbSk7CisJfQorfQorCit2b2lkCitiZmFfZmNwaW1fcGF0aF90b3Zfc2V0KHN0cnVjdCBiZmFfcyAqYmZhLCB1MTYgcGF0aF90b3YpCit7CisJc3RydWN0IGJmYV9mY3BpbV9tb2RfcyAqZmNwaW0gPSBCRkFfRkNQSU1fTU9EKGJmYSk7CisKKwlmY3BpbS0+cGF0aF90b3YgPSBwYXRoX3RvdiAqIDEwMDA7CisJaWYgKGZjcGltLT5wYXRoX3RvdiA+IEJGQV9GQ1BJTV9QQVRIVE9WX01BWCkKKwkJZmNwaW0tPnBhdGhfdG92ID0gQkZBX0ZDUElNX1BBVEhUT1ZfTUFYOworfQorCit1MTYKK2JmYV9mY3BpbV9wYXRoX3Rvdl9nZXQoc3RydWN0IGJmYV9zICpiZmEpCit7CisJc3RydWN0IGJmYV9mY3BpbV9tb2RfcyAqZmNwaW0gPSBCRkFfRkNQSU1fTU9EKGJmYSk7CisKKwlyZXR1cm4gKGZjcGltLT5wYXRoX3RvdiAvIDEwMDApOworfQorCitiZmFfc3RhdHVzX3QKK2JmYV9mY3BpbV9nZXRfbW9kc3RhdHMoc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBiZmFfZmNwaW1fc3RhdHNfcyAqbW9kc3RhdHMpCit7CisJc3RydWN0IGJmYV9mY3BpbV9tb2RfcyAqZmNwaW0gPSBCRkFfRkNQSU1fTU9EKGJmYSk7CisKKwkqbW9kc3RhdHMgPSBmY3BpbS0+c3RhdHM7CisKKwlyZXR1cm4gQkZBX1NUQVRVU19PSzsKK30KKworYmZhX3N0YXR1c190CitiZmFfZmNwaW1fY2xyX21vZHN0YXRzKHN0cnVjdCBiZmFfcyAqYmZhKQoreworCXN0cnVjdCBiZmFfZmNwaW1fbW9kX3MgKmZjcGltID0gQkZBX0ZDUElNX01PRChiZmEpOworCisJbWVtc2V0KCZmY3BpbS0+c3RhdHMsIDAsIHNpemVvZihzdHJ1Y3QgYmZhX2ZjcGltX3N0YXRzX3MpKTsKKworCXJldHVybiBCRkFfU1RBVFVTX09LOworfQorCit2b2lkCitiZmFfZmNwaW1fcWRlcHRoX3NldChzdHJ1Y3QgYmZhX3MgKmJmYSwgdTE2IHFfZGVwdGgpCit7CisJc3RydWN0IGJmYV9mY3BpbV9tb2RfcyAqZmNwaW0gPSBCRkFfRkNQSU1fTU9EKGJmYSk7CisKKwliZmFfYXNzZXJ0KHFfZGVwdGggPD0gQkZBX0lPQ0ZDX1FERVBUSF9NQVgpOworCisJZmNwaW0tPnFfZGVwdGggPSBxX2RlcHRoOworfQorCit1MTYKK2JmYV9mY3BpbV9xZGVwdGhfZ2V0KHN0cnVjdCBiZmFfcyAqYmZhKQoreworCXN0cnVjdCBiZmFfZmNwaW1fbW9kX3MgKmZjcGltID0gQkZBX0ZDUElNX01PRChiZmEpOworCisJcmV0dXJuIChmY3BpbS0+cV9kZXB0aCk7Cit9CisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfZmNwaW1fcHJpdi5oIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfZmNwaW1fcHJpdi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1MzIwNmMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9mY3BpbV9wcml2LmgKQEAgLTAsMCArMSwxODggQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0JGQV9GQ1BJTV9QUklWX0hfXworI2RlZmluZSBfX0JGQV9GQ1BJTV9QUklWX0hfXworCisjaW5jbHVkZSA8YmZhX2ZjcGltLmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc19mY3BpbS5oPgorI2luY2x1ZGUgPGNzL2JmYV93Yy5oPgorI2luY2x1ZGUgImJmYV9zZ3BnX3ByaXYuaCIKKworI2RlZmluZSBCRkFfSVROSU1fTUlOICAgMzIKKyNkZWZpbmUgQkZBX0lUTklNX01BWCAgIDEwMjQKKworI2RlZmluZSBCRkFfSU9JTV9NSU4gICAgOAorI2RlZmluZSBCRkFfSU9JTV9NQVggICAgMjAwMAorCisjZGVmaW5lIEJGQV9UU0tJTV9NSU4gICA0CisjZGVmaW5lIEJGQV9UU0tJTV9NQVggICA1MTIKKyNkZWZpbmUgQkZBX0ZDUElNX1BBVEhUT1ZfREVGCSgzMCAqIDEwMDApCS8qIGluIG1pbGxpc2VjcyAqLworI2RlZmluZSBCRkFfRkNQSU1fUEFUSFRPVl9NQVgJKDkwICogMTAwMCkJLyogaW4gbWlsbGlzZWNzICovCisKKyNkZWZpbmUgYmZhX2ZjcGltX3N0YXRzKF9fZmNwaW0sIF9fc3RhdHMpICAgXAorICAgIChfX2ZjcGltKS0+c3RhdHMuX19zdGF0cyArKworCitzdHJ1Y3QgYmZhX2ZjcGltX21vZF9zIHsKKwlzdHJ1Y3QgYmZhX3MgCSpiZmE7CisJc3RydWN0IGJmYV9pdG5pbV9zIAkqaXRuaW1fYXJyOworCXN0cnVjdCBiZmFfaW9pbV9zIAkqaW9pbV9hcnI7CisJc3RydWN0IGJmYV9pb2ltX3NwX3MgKmlvaW1fc3BfYXJyOworCXN0cnVjdCBiZmFfdHNraW1fcyAJKnRza2ltX2FycjsKKwlzdHJ1Y3QgYmZhX2RtYV9zCXNuc2Jhc2U7CisJaW50CQkJbnVtX2l0bmltczsKKwlpbnQJCQludW1faW9pbV9yZXFzOworCWludAkJCW51bV90c2tpbV9yZXFzOworCXUzMgkJcGF0aF90b3Y7CisJdTE2CQlxX2RlcHRoOworCXUxNgkJcnN2ZDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIAlpdG5pbV9xOyAgICAgICAgLyogIHF1ZXVlIG9mIGFjdGl2ZSBpdG5pbSAgICAqLworCXN0cnVjdCBsaXN0X2hlYWQgCWlvaW1fZnJlZV9xOyAgICAvKiAgZnJlZSBJTyByZXNvdXJjZXMgICAgICAgICovCisJc3RydWN0IGxpc3RfaGVhZCAJaW9pbV9yZXNmcmVlX3E7IC8qICBJT3Mgd2FpdGluZyBmb3IgZi93ICAgICAgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIAlpb2ltX2NvbXBfcTsgICAgLyogIElPIGdsb2JhbCBjb21wIFEgICAgICAgICAqLworCXN0cnVjdCBsaXN0X2hlYWQgCXRza2ltX2ZyZWVfcTsKKwl1MzIJaW9zX2FjdGl2ZTsJLyogIGN1cnJlbnQgYWN0aXZlIElPcwkgICAgICAqLworCXUzMglkZWxheV9jb21wOworCXN0cnVjdCBiZmFfZmNwaW1fc3RhdHNfcyBzdGF0czsKK307CisKK3N0cnVjdCBiZmFfaW9pbV9zOworc3RydWN0IGJmYV90c2tpbV9zOworCisvKioKKyAqIEJGQSBJTyAoaW5pdGlhdG9yIG1vZGUpCisgKi8KK3N0cnVjdCBiZmFfaW9pbV9zIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHFlOwkJLyogIHF1ZXVlIGVsZW1lbXQgICAgICAgICAgICAqLworCWJmYV9zbV90CQlzbTsgCS8qICBCRkEgaW9pbSBzdGF0ZSBtYWNoaW5lICAgKi8KKwlzdHJ1Y3QgYmZhX3MgCSAgICAgICAgKmJmYTsJLyogIEJGQSBtb2R1bGUgICAgICAgICAgICAgICAqLworCXN0cnVjdCBiZmFfZmNwaW1fbW9kX3MJKmZjcGltOwkvKiAgcGFyZW50IGZjcGltIG1vZHVsZSAgICAgICovCisJc3RydWN0IGJmYV9pdG5pbV9zIAkqaXRuaW07CS8qICBpLXQtbiBuZXh1cyBmb3IgdGhpcyBJTyAgKi8KKwlzdHJ1Y3QgYmZhZF9pb2ltX3MgCSpkaW87CS8qICBkcml2ZXIgSU8gaGFuZGxlICAgICAgICAgKi8KKwl1MTYJaW90YWc7CQkvKiAgRldJIElPIHRhZyAgICAgICAgICAgICAgICovCisJdTE2CWFib3J0X3RhZzsJLyogIHVucWl1ZSBhYm9ydCByZXF1ZXN0IHRhZyAqLworCXUxNgluc2dlczsJCS8qICBudW1iZXIgb2YgU0cgZWxlbWVudHMgICAgKi8KKwl1MTYJbnNncGdzOwkJLyogIG51bWJlciBvZiBTRyBwYWdlcyAgICAgICAqLworCXN0cnVjdCBiZmFfc2dwZ19zICpzZ3BnOwkvKiAgZmlyc3QgU0cgcGFnZSAgICAgICAgICAgICovCisJc3RydWN0IGxpc3RfaGVhZCBzZ3BnX3E7CQkvKiAgYWxsb2NhdGVkIFNHIHBhZ2VzICAgICAgICovCisJc3RydWN0IGJmYV9jYl9xZV9zIGhjYl9xZTsJLyogIGJmYSBjYWxsYmFjayBxZWxlbSAgICAgICAqLworCWJmYV9jYl9jYmZuX3QgaW9fY2JmbjsJCS8qICBJTyBjb21wbGV0aW9uIGhhbmRsZXIgICAgKi8KKwlzdHJ1Y3QgYmZhX2lvaW1fc3BfcyAqaW9zcDsJLyogIHNsb3ctcGF0aCBJTyBoYW5kbGluZyAgICAqLworfTsKKworc3RydWN0IGJmYV9pb2ltX3NwX3MgeworCXN0cnVjdCBiZmlfbXNnX3MgCWNvbXBfcnNwbXNnOwkvKiAgSU8gY29tcCBmL3cgcmVzcG9uc2UgICAgICovCisJdTgJCQkqc25zaW5mbzsJLyogIHNlbnNlIGluZm8gZm9yIHRoaXMgSU8gICAqLworCXN0cnVjdCBiZmFfc2dwZ193cWVfcyBzZ3BnX3dxZTsJLyogIHdhaXRxIGVsZW0gZm9yIHNncGcgICAgICAqLworCXN0cnVjdCBiZmFfcmVxcV93YWl0X3MgcmVxcV93YWl0OwkvKiAgdG8gd2FpdCBmb3Igcm9vbSBpbiByZXFxICovCisJYmZhX2Jvb2xlYW5fdAkJYWJvcnRfZXhwbGljaXQ7CS8qICBhYm9ydGVkIGJ5IE9TICAgICAgICAgICAgKi8KKwlzdHJ1Y3QgYmZhX3Rza2ltX3MJKnRza2ltOwkJLyogIFJlbGV2YW50IFRNIGNtZCAgICAgICAgICAqLworfTsKKworLyoqCisgKiBCRkEgVGFzayBtYW5hZ2VtZW50IGNvbW1hbmQgKGluaXRpYXRvciBtb2RlKQorICovCitzdHJ1Y3QgYmZhX3Rza2ltX3MgeworCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgICAgcWU7CisJYmZhX3NtX3QJCXNtOworCXN0cnVjdCBiZmFfcyAgICAgICAgICAgICpiZmE7ICAgICAgICAvKiAgQkZBIG1vZHVsZSAgKi8KKwlzdHJ1Y3QgYmZhX2ZjcGltX21vZF9zICAqZmNwaW07ICAgICAgLyogIHBhcmVudCBmY3BpbSBtb2R1bGUgICAgICAqLworCXN0cnVjdCBiZmFfaXRuaW1fcyAgICAgICppdG5pbTsgICAgICAvKiAgaS10LW4gbmV4dXMgZm9yIHRoaXMgSU8gICovCisJc3RydWN0IGJmYWRfdHNraW1fcyAgICAgICAgICpkdHNrOyAgIC8qICBkcml2ZXIgdGFzayBtZ210IGNtbmQgICAgKi8KKwliZmFfYm9vbGVhbl90ICAgICAgICBub3RpZnk7ICAgICAgICAgLyogIG5vdGlmeSBpdG5pbSBvbiBUTSBjb21wICAqLworCWx1bl90ICAgICAgICAgICAgICAgIGx1bjsgICAgICAgICAgICAvKiAgbHVuIGlmIGFwcGxpY2FibGUgICAgICAgICovCisJZW51bSBmY3BfdG1fY21uZCAgICAgICAgdG1fY21uZDsgICAgIC8qICB0YXNrIG1hbmFnZW1lbnQgY29tbWFuZCAgKi8KKwl1MTYgICAgICAgICAgICAgdHNrX3RhZzsgICAgICAgIC8qICBGV0kgSU8gdGFnICAgICAgICAgICAgICAgKi8KKwl1OCAgICAgICAgICAgICAgdHNlY3M7ICAgICAgICAgIC8qICB0aW1lb3V0IGluIHNlY29uZHMgICAgICAgKi8KKwlzdHJ1Y3QgYmZhX3JlcXFfd2FpdF9zICByZXFxX3dhaXQ7ICAgLyogIHRvIHdhaXQgZm9yIHJvb20gaW4gcmVxcSAqLworCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgICAgICAgIGlvX3E7ICAgIC8qICBxdWV1ZSBvZiBhZmZlY3RlZCBJT3MgICAgKi8KKwlzdHJ1Y3QgYmZhX3djX3MgICAgICAgICAgICAgd2M7ICAgICAgLyogIHdhaXRpbmcgY291bnRlciAgICAgICAgICAqLworCXN0cnVjdCBiZmFfY2JfcWVfcwloY2JfcWU7ICAgICAgLyogIGJmYSBjYWxsYmFjayBxZWxlbSAgICAgICAqLworCWVudW0gYmZpX3Rza2ltX3N0YXR1cyAgIHRza19zdGF0dXM7ICAvKiAgVE0gc3RhdHVzICAgICAgICAgICAgICAgICovCit9OworCisvKioKKyAqIEJGQSBpLXQtbiAoaW5pdGlhdG9yIG1vZGUpCisgKi8KK3N0cnVjdCBiZmFfaXRuaW1fcyB7CisJc3RydWN0IGxpc3RfaGVhZCAgICBxZTsJCS8qICBxdWV1ZSBlbGVtZW50ICAgICAgICAgICAgICAgKi8KKwliZmFfc21fdAkgIHNtOwkJLyogIGktdC1uIGltIEJGQSBzdGF0ZSBtYWNoaW5lICAqLworCXN0cnVjdCBiZmFfcyAgICAgICpiZmE7CQkvKiAgYmZhIGluc3RhbmNlICAgICAgICAgICAgICAgICovCisJc3RydWN0IGJmYV9ycG9ydF9zICpycG9ydDsJLyogIGJmYSBycG9ydCAgICAgICAgICAgICAgICAgICAqLworCXZvaWQgICAgICAgICAgICpkaXRuOwkJLyogIGRyaXZlciBpLXQtbiBzdHJ1Y3R1cmUgICAgICAqLworCXN0cnVjdCBiZmlfbWhkcl9zICAgICAgbWhkcjsJLyogIHByZS1idWlsdCBtaGRyICAgICAgICAgICAgICAqLworCXU4ICAgICAgICAgbXNnX25vOwkJLyogIGl0bmltL3Jwb3J0IGZpcm13YXJlIGhhbmRsZSAqLworCXU4ICAgICAgICAgcmVxcTsJCS8qICBDUSBmb3IgcmVxdWVzdHMgICAgICAgICAgICAgKi8KKwlzdHJ1Y3QgYmZhX2NiX3FlX3MgICAgaGNiX3FlOwkvKiAgYmZhIGNhbGxiYWNrIHFlbGVtICAgICAgICAgICovCisJc3RydWN0IGxpc3RfaGVhZCBwZW5kaW5nX3E7CS8qICBxdWV1ZSBvZiBwZW5kaW5nIElPIHJlcXVlc3RzKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIGlvX3E7CQkvKiAgcXVldWUgb2YgYWN0aXZlIElPIHJlcXVlc3RzICovCisJc3RydWN0IGxpc3RfaGVhZCBpb19jbGVhbnVwX3E7CS8qICBJTyBiZWluZyBjbGVhbmVkIHVwICAgICAgICAgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIHRza19xOwkJLyogIHF1ZXVlIG9mIGFjdGl2ZSBUTSBjb21tYW5kcyAqLworCXN0cnVjdCBsaXN0X2hlYWQgIGRlbGF5X2NvbXBfcTsvKiAgcXVldWUgb2YgZmFpbGVkIGluZmxpZ2h0IGNtZHMgKi8KKwliZmFfYm9vbGVhbl90ICAgc2VxX3JlYzsJLyogIFNRRVIgc3VwcG9ydGVkICAgICAgICAgICAgICAqLworCWJmYV9ib29sZWFuX3QgICBpc19vbmxpbmU7CS8qICBpdG5pbSBpcyBPTkxJTkUgZm9yIElPICAgICAgKi8KKwliZmFfYm9vbGVhbl90ICAgaW90b3ZfYWN0aXZlOwkvKiAgSU8gVE9WIHRpbWVyIGlzIGFjdGl2ZQkgKi8KKwlzdHJ1Y3QgYmZhX3djX3MgICAgICAgIHdjOwkvKiAgd2FpdGluZyBjb3VudGVyICAgICAgICAgICAgICovCisJc3RydWN0IGJmYV90aW1lcl9zIHRpbWVyOwkvKiAgcGVuZGluZyBJTyBUT1YJCSAqLworCXN0cnVjdCBiZmFfcmVxcV93YWl0X3MgcmVxcV93YWl0OyAvKiAgdG8gd2FpdCBmb3Igcm9vbSBpbiByZXFxICovCisJc3RydWN0IGJmYV9mY3BpbV9tb2RfcyAqZmNwaW07CS8qICBmY3BpbSBtb2R1bGUgICAgICAgICAgICAgICAgKi8KKwlzdHJ1Y3QgYmZhX2l0bmltX2hhbF9zdGF0c19zCXN0YXRzOworfTsKKworI2RlZmluZSBiZmFfaXRuaW1faXNfb25saW5lKF9pdG5pbSkgKF9pdG5pbSktPmlzX29ubGluZQorI2RlZmluZSBCRkFfRkNQSU1fTU9EKF9oYWwpICgmKF9oYWwpLT5tb2R1bGVzLmZjcGltX21vZCkKKyNkZWZpbmUgQkZBX0lPSU1fRlJPTV9UQUcoX2ZjcGltLCBfaW90YWcpCVwKKwkoJmZjcGltLT5pb2ltX2FycltfaW90YWddKQorI2RlZmluZSBCRkFfVFNLSU1fRlJPTV9UQUcoX2ZjcGltLCBfdG10YWcpICAgICAgICAgICAgICAgICAgXAorICAgICgmZmNwaW0tPnRza2ltX2FycltfdG10YWcgJiAoZmNwaW0tPm51bV90c2tpbV9yZXFzIC0gMSldKQorCisvKgorICogZnVuY3Rpb24gcHJvdG90eXBlcworICovCit2b2lkICAgICAgICAgICAgYmZhX2lvaW1fYXR0YWNoKHN0cnVjdCBiZmFfZmNwaW1fbW9kX3MgKmZjcGltLAorCQkJCSAgICBzdHJ1Y3QgYmZhX21lbWluZm9fcyAqbWluZm8pOwordm9pZCAgICAgICAgICAgIGJmYV9pb2ltX2RldGFjaChzdHJ1Y3QgYmZhX2ZjcGltX21vZF9zICpmY3BpbSk7Cit2b2lkICAgICAgICAgICAgYmZhX2lvaW1faXNyKHN0cnVjdCBiZmFfcyAqYmZhLCBzdHJ1Y3QgYmZpX21zZ19zICptc2cpOwordm9pZCAgICAgICAgICAgIGJmYV9pb2ltX2dvb2RfY29tcF9pc3Ioc3RydWN0IGJmYV9zICpiZmEsCisJCQkJCXN0cnVjdCBiZmlfbXNnX3MgKm1zZyk7Cit2b2lkICAgICAgICAgICAgYmZhX2lvaW1fY2xlYW51cChzdHJ1Y3QgYmZhX2lvaW1fcyAqaW9pbSk7Cit2b2lkICAgICAgICAgICAgYmZhX2lvaW1fY2xlYW51cF90bShzdHJ1Y3QgYmZhX2lvaW1fcyAqaW9pbSwKKwkJCQkJc3RydWN0IGJmYV90c2tpbV9zICp0c2tpbSk7Cit2b2lkICAgICAgICAgICAgYmZhX2lvaW1faW9jZGlzYWJsZShzdHJ1Y3QgYmZhX2lvaW1fcyAqaW9pbSk7Cit2b2lkICAgICAgICAgICAgYmZhX2lvaW1fdG92KHN0cnVjdCBiZmFfaW9pbV9zICppb2ltKTsKKwordm9pZCAgICAgICAgICAgIGJmYV90c2tpbV9hdHRhY2goc3RydWN0IGJmYV9mY3BpbV9tb2RfcyAqZmNwaW0sCisJCQkJICAgICBzdHJ1Y3QgYmZhX21lbWluZm9fcyAqbWluZm8pOwordm9pZCAgICAgICAgICAgIGJmYV90c2tpbV9kZXRhY2goc3RydWN0IGJmYV9mY3BpbV9tb2RfcyAqZmNwaW0pOwordm9pZCAgICAgICAgICAgIGJmYV90c2tpbV9pc3Ioc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBiZmlfbXNnX3MgKm1zZyk7Cit2b2lkICAgICAgICAgICAgYmZhX3Rza2ltX2lvZG9uZShzdHJ1Y3QgYmZhX3Rza2ltX3MgKnRza2ltKTsKK3ZvaWQgICAgICAgICAgICBiZmFfdHNraW1faW9jZGlzYWJsZShzdHJ1Y3QgYmZhX3Rza2ltX3MgKnRza2ltKTsKK3ZvaWQgICAgICAgICAgICBiZmFfdHNraW1fY2xlYW51cChzdHJ1Y3QgYmZhX3Rza2ltX3MgKnRza2ltKTsKKwordm9pZCAgICAgICAgICAgIGJmYV9pdG5pbV9tZW1pbmZvKHN0cnVjdCBiZmFfaW9jZmNfY2ZnX3MgKmNmZywgdTMyICprbV9sZW4sCisJCQkJICAgICAgdTMyICpkbV9sZW4pOwordm9pZCAgICAgICAgICAgIGJmYV9pdG5pbV9hdHRhY2goc3RydWN0IGJmYV9mY3BpbV9tb2RfcyAqZmNwaW0sCisJCQkJICAgICBzdHJ1Y3QgYmZhX21lbWluZm9fcyAqbWluZm8pOwordm9pZCAgICAgICAgICAgIGJmYV9pdG5pbV9kZXRhY2goc3RydWN0IGJmYV9mY3BpbV9tb2RfcyAqZmNwaW0pOwordm9pZCAgICAgICAgICAgIGJmYV9pdG5pbV9pb2NkaXNhYmxlKHN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0pOwordm9pZCAgICAgICAgICAgIGJmYV9pdG5pbV9pc3Ioc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBiZmlfbXNnX3MgKm1zZyk7Cit2b2lkICAgICAgICAgICAgYmZhX2l0bmltX2lvZG9uZShzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltKTsKK3ZvaWQgICAgICAgICAgICBiZmFfaXRuaW1fdHNrZG9uZShzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltKTsKK2JmYV9ib29sZWFuX3QgICBiZmFfaXRuaW1faG9sZF9pbyhzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltKTsKKworI2VuZGlmIC8qIF9fQkZBX0ZDUElNX1BSSVZfSF9fICovCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2ZjcG9ydC5jIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfZmNwb3J0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTkyNDM1OQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2ZjcG9ydC5jCkBAIC0wLDAgKzEsMTY3MSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8YmZhLmg+CisjaW5jbHVkZSA8YmZhX3N2Yy5oPgorI2luY2x1ZGUgPGJmaS9iZmlfcHBvcnQuaD4KKyNpbmNsdWRlIDxjcy9iZmFfZGVidWcuaD4KKyNpbmNsdWRlIDxhZW4vYmZhX2Flbi5oPgorI2luY2x1ZGUgPGNzL2JmYV9wbG9nLmg+CisjaW5jbHVkZSA8YWVuL2JmYV9hZW5fcG9ydC5oPgorCitCRkFfVFJDX0ZJTEUoSEFMLCBQUE9SVCk7CitCRkFfTU9EVUxFKHBwb3J0KTsKKworI2RlZmluZSBiZmFfcHBvcnRfY2FsbGJhY2soX19wcG9ydCwgX19ldmVudCkgZG8gewkJCVwKKwlpZiAoKF9fcHBvcnQpLT5iZmEtPmZjcykgeyAgICAgIFwKKwkJKF9fcHBvcnQpLT5ldmVudF9jYmZuKChfX3Bwb3J0KS0+ZXZlbnRfY2JhcmcsIChfX2V2ZW50KSk7ICAgICAgXAorCX0gZWxzZSB7CQkJCQkJCVwKKwkJKF9fcHBvcnQpLT5oY2JfZXZlbnQgPSAoX19ldmVudCk7ICAgICAgXAorCQliZmFfY2JfcXVldWUoKF9fcHBvcnQpLT5iZmEsICYoX19wcG9ydCktPmhjYl9xZSwJXAorCQlfX2JmYV9jYl9wb3J0X2V2ZW50LCAoX19wcG9ydCkpOyAgICAgIFwKKwl9CQkJCQkJCQlcCit9IHdoaWxlICgwKQorCisvKgorICogVGhlIHBvcnQgaXMgY29uc2lkZXJlZCBkaXNhYmxlZCBpZiBjb3JyZXNwb25kaW5nIHBoeXNpY2FsIHBvcnQgb3IgSU9DIGFyZQorICogZGlzYWJsZWQgZXhwbGljaXRseQorICovCisjZGVmaW5lIEJGQV9QT1JUX0lTX0RJU0FCTEVEKGJmYSkgXAorCSgoYmZhX3Bwb3J0X2lzX2Rpc2FibGVkKGJmYSkgPT0gQkZBX1RSVUUpIHx8IFwKKwkoYmZhX2lvY19pc19kaXNhYmxlZCgmYmZhLT5pb2MpID09IEJGQV9UUlVFKSkKKworLyoKKyAqIGZvcndhcmQgZGVjbGFyYXRpb25zCisgKi8KK3N0YXRpYyBiZmFfYm9vbGVhbl90IGJmYV9wcG9ydF9zZW5kX2VuYWJsZShzdHJ1Y3QgYmZhX3Bwb3J0X3MgKnBvcnQpOworc3RhdGljIGJmYV9ib29sZWFuX3QgYmZhX3Bwb3J0X3NlbmRfZGlzYWJsZShzdHJ1Y3QgYmZhX3Bwb3J0X3MgKnBvcnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9wcG9ydF91cGRhdGVfbGlua2luZm8oc3RydWN0IGJmYV9wcG9ydF9zICpwcG9ydCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX3Bwb3J0X3Jlc2V0X2xpbmtpbmZvKHN0cnVjdCBiZmFfcHBvcnRfcyAqcHBvcnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9wcG9ydF9zZXRfd3ducyhzdHJ1Y3QgYmZhX3Bwb3J0X3MgKnBvcnQpOworc3RhdGljIHZvaWQgICAgIF9fYmZhX2NiX3BvcnRfZXZlbnQodm9pZCAqY2JhcmcsIGJmYV9ib29sZWFuX3QgY29tcGxldGUpOworc3RhdGljIHZvaWQgICAgIF9fYmZhX2NiX3BvcnRfc3RhdHModm9pZCAqY2JhcmcsIGJmYV9ib29sZWFuX3QgY29tcGxldGUpOworc3RhdGljIHZvaWQgICAgIF9fYmZhX2NiX3BvcnRfc3RhdHNfY2xyKHZvaWQgKmNiYXJnLCBiZmFfYm9vbGVhbl90IGNvbXBsZXRlKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfcG9ydF9zdGF0c190aW1lb3V0KHZvaWQgKmNiYXJnKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfcG9ydF9zdGF0c19jbHJfdGltZW91dCh2b2lkICpjYmFyZyk7CisKKy8qKgorICogIGJmYV9wcG9ydF9wcml2YXRlCisgKi8KKworLyoqCisgKiBCRkEgcG9ydCBzdGF0ZSBtYWNoaW5lIGV2ZW50cworICovCitlbnVtIGJmYV9wcG9ydF9zbV9ldmVudCB7CisJQkZBX1BQT1JUX1NNX1NUQVJUID0gMSwJLyogIHN0YXJ0IHBvcnQgc3RhdGUgbWFjaGluZSAqLworCUJGQV9QUE9SVF9TTV9TVE9QID0gMiwJLyogIHN0b3AgcG9ydCBzdGF0ZSBtYWNoaW5lICovCisJQkZBX1BQT1JUX1NNX0VOQUJMRSA9IDMsCS8qICBlbmFibGUgcG9ydCAqLworCUJGQV9QUE9SVF9TTV9ESVNBQkxFID0gNCwJLyogIGRpc2FibGUgcG9ydCBzdGF0ZSBtYWNoaW5lICovCisJQkZBX1BQT1JUX1NNX0ZXUlNQID0gNSwJLyogIGZpcm13YXJlIGVuYWJsZS9kaXNhYmxlIHJzcCAqLworCUJGQV9QUE9SVF9TTV9MSU5LVVAgPSA2LAkvKiAgZmlybXdhcmUgbGlua3VwIGV2ZW50ICovCisJQkZBX1BQT1JUX1NNX0xJTktET1dOID0gNywJLyogIGZpcm13YXJlIGxpbmt1cCBkb3duICovCisJQkZBX1BQT1JUX1NNX1FSRVNVTUUgPSA4LAkvKiAgQ1Egc3BhY2UgYXZhaWxhYmxlICovCisJQkZBX1BQT1JUX1NNX0hXRkFJTCA9IDksCS8qICBJT0MgaC93IGZhaWx1cmUgKi8KK307CisKK3N0YXRpYyB2b2lkICAgICBiZmFfcHBvcnRfc21fdW5pbml0KHN0cnVjdCBiZmFfcHBvcnRfcyAqcHBvcnQsCisJCQkJICAgIGVudW0gYmZhX3Bwb3J0X3NtX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfcHBvcnRfc21fZW5hYmxpbmdfcXdhaXQoc3RydWN0IGJmYV9wcG9ydF9zICpwcG9ydCwKKwkJCQkJICAgIGVudW0gYmZhX3Bwb3J0X3NtX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfcHBvcnRfc21fZW5hYmxpbmcoc3RydWN0IGJmYV9wcG9ydF9zICpwcG9ydCwKKwkJCQkgICAgICBlbnVtIGJmYV9wcG9ydF9zbV9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX3Bwb3J0X3NtX2xpbmtkb3duKHN0cnVjdCBiZmFfcHBvcnRfcyAqcHBvcnQsCisJCQkJICAgICAgZW51bSBiZmFfcHBvcnRfc21fZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9wcG9ydF9zbV9saW5rdXAoc3RydWN0IGJmYV9wcG9ydF9zICpwcG9ydCwKKwkJCQkgICAgZW51bSBiZmFfcHBvcnRfc21fZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9wcG9ydF9zbV9kaXNhYmxpbmcoc3RydWN0IGJmYV9wcG9ydF9zICpwcG9ydCwKKwkJCQkgICAgICAgZW51bSBiZmFfcHBvcnRfc21fZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9wcG9ydF9zbV9kaXNhYmxpbmdfcXdhaXQoc3RydWN0IGJmYV9wcG9ydF9zICpwcG9ydCwKKwkJCQkJICAgICBlbnVtIGJmYV9wcG9ydF9zbV9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX3Bwb3J0X3NtX2Rpc2FibGVkKHN0cnVjdCBiZmFfcHBvcnRfcyAqcHBvcnQsCisJCQkJICAgICAgZW51bSBiZmFfcHBvcnRfc21fZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9wcG9ydF9zbV9zdG9wcGVkKHN0cnVjdCBiZmFfcHBvcnRfcyAqcHBvcnQsCisJCQkJICAgICBlbnVtIGJmYV9wcG9ydF9zbV9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX3Bwb3J0X3NtX2lvY2Rvd24oc3RydWN0IGJmYV9wcG9ydF9zICpwcG9ydCwKKwkJCQkgICAgIGVudW0gYmZhX3Bwb3J0X3NtX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfcHBvcnRfc21faW9jZmFpbChzdHJ1Y3QgYmZhX3Bwb3J0X3MgKnBwb3J0LAorCQkJCSAgICAgZW51bSBiZmFfcHBvcnRfc21fZXZlbnQgZXZlbnQpOworCitzdGF0aWMgc3RydWN0IGJmYV9zbV90YWJsZV9zIGhhbF9wcG9ydF9zbV90YWJsZVtdID0geworCXtCRkFfU00oYmZhX3Bwb3J0X3NtX3VuaW5pdCksIEJGQV9QUE9SVF9TVF9VTklOSVR9LAorCXtCRkFfU00oYmZhX3Bwb3J0X3NtX2VuYWJsaW5nX3F3YWl0KSwgQkZBX1BQT1JUX1NUX0VOQUJMSU5HX1FXQUlUfSwKKwl7QkZBX1NNKGJmYV9wcG9ydF9zbV9lbmFibGluZyksIEJGQV9QUE9SVF9TVF9FTkFCTElOR30sCisJe0JGQV9TTShiZmFfcHBvcnRfc21fbGlua2Rvd24pLCBCRkFfUFBPUlRfU1RfTElOS0RPV059LAorCXtCRkFfU00oYmZhX3Bwb3J0X3NtX2xpbmt1cCksIEJGQV9QUE9SVF9TVF9MSU5LVVB9LAorCXtCRkFfU00oYmZhX3Bwb3J0X3NtX2Rpc2FibGluZ19xd2FpdCksCisJIEJGQV9QUE9SVF9TVF9ESVNBQkxJTkdfUVdBSVR9LAorCXtCRkFfU00oYmZhX3Bwb3J0X3NtX2Rpc2FibGluZyksIEJGQV9QUE9SVF9TVF9ESVNBQkxJTkd9LAorCXtCRkFfU00oYmZhX3Bwb3J0X3NtX2Rpc2FibGVkKSwgQkZBX1BQT1JUX1NUX0RJU0FCTEVEfSwKKwl7QkZBX1NNKGJmYV9wcG9ydF9zbV9zdG9wcGVkKSwgQkZBX1BQT1JUX1NUX1NUT1BQRUR9LAorCXtCRkFfU00oYmZhX3Bwb3J0X3NtX2lvY2Rvd24pLCBCRkFfUFBPUlRfU1RfSU9DRE9XTn0sCisJe0JGQV9TTShiZmFfcHBvcnRfc21faW9jZmFpbCksIEJGQV9QUE9SVF9TVF9JT0NET1dOfSwKK307CisKK3N0YXRpYyB2b2lkCitiZmFfcHBvcnRfYWVuX3Bvc3Qoc3RydWN0IGJmYV9wcG9ydF9zICpwcG9ydCwgZW51bSBiZmFfcG9ydF9hZW5fZXZlbnQgZXZlbnQpCit7CisJdW5pb24gYmZhX2Flbl9kYXRhX3UgYWVuX2RhdGE7CisJc3RydWN0IGJmYV9sb2dfbW9kX3MgKmxvZ21vZCA9IHBwb3J0LT5iZmEtPmxvZ207CisJd3duX3QgICAgICAgICAgIHB3d24gPSBwcG9ydC0+cHd3bjsKKwljaGFyICAgICAgICAgICAgcHd3bl9wdHJbQkZBX1NUUklOR18zMl07CisJc3RydWN0IGJmYV9pb2NfYXR0cl9zIGlvY19hdHRyOworCisJd3duMnN0cihwd3duX3B0ciwgcHd3bik7CisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX1BPUlRfQUVOX09OTElORToKKwkJYmZhX2xvZyhsb2dtb2QsIEJGQV9BRU5fUE9SVF9PTkxJTkUsIHB3d25fcHRyKTsKKwkJYnJlYWs7CisJY2FzZSBCRkFfUE9SVF9BRU5fT0ZGTElORToKKwkJYmZhX2xvZyhsb2dtb2QsIEJGQV9BRU5fUE9SVF9PRkZMSU5FLCBwd3duX3B0cik7CisJCWJyZWFrOworCWNhc2UgQkZBX1BPUlRfQUVOX0VOQUJMRToKKwkJYmZhX2xvZyhsb2dtb2QsIEJGQV9BRU5fUE9SVF9FTkFCTEUsIHB3d25fcHRyKTsKKwkJYnJlYWs7CisJY2FzZSBCRkFfUE9SVF9BRU5fRElTQUJMRToKKwkJYmZhX2xvZyhsb2dtb2QsIEJGQV9BRU5fUE9SVF9ESVNBQkxFLCBwd3duX3B0cik7CisJCWJyZWFrOworCWNhc2UgQkZBX1BPUlRfQUVOX0RJU0NPTk5FQ1Q6CisJCWJmYV9sb2cobG9nbW9kLCBCRkFfQUVOX1BPUlRfRElTQ09OTkVDVCwgcHd3bl9wdHIpOworCQlicmVhazsKKwljYXNlIEJGQV9QT1JUX0FFTl9RT1NfTkVHOgorCQliZmFfbG9nKGxvZ21vZCwgQkZBX0FFTl9QT1JUX1FPU19ORUcsIHB3d25fcHRyKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJYmZhX2lvY19nZXRfYXR0cigmcHBvcnQtPmJmYS0+aW9jLCAmaW9jX2F0dHIpOworCWFlbl9kYXRhLnBvcnQuaW9jX3R5cGUgPSBpb2NfYXR0ci5pb2NfdHlwZTsKKwlhZW5fZGF0YS5wb3J0LnB3d24gPSBwd3duOworfQorCitzdGF0aWMgdm9pZAorYmZhX3Bwb3J0X3NtX3VuaW5pdChzdHJ1Y3QgYmZhX3Bwb3J0X3MgKnBwb3J0LCBlbnVtIGJmYV9wcG9ydF9zbV9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKHBwb3J0LT5iZmEsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9QUE9SVF9TTV9TVEFSVDoKKwkJLyoqCisJCSAqIFN0YXJ0IGV2ZW50IGFmdGVyIElPQyBpcyBjb25maWd1cmVkIGFuZCBCRkEgaXMgc3RhcnRlZC4KKwkJICovCisJCWlmIChiZmFfcHBvcnRfc2VuZF9lbmFibGUocHBvcnQpKQorCQkJYmZhX3NtX3NldF9zdGF0ZShwcG9ydCwgYmZhX3Bwb3J0X3NtX2VuYWJsaW5nKTsKKwkJZWxzZQorCQkJYmZhX3NtX3NldF9zdGF0ZShwcG9ydCwgYmZhX3Bwb3J0X3NtX2VuYWJsaW5nX3F3YWl0KTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9QUE9SVF9TTV9FTkFCTEU6CisJCS8qKgorCQkgKiBQb3J0IGlzIHBlcnNpc3RlbnRseSBjb25maWd1cmVkIHRvIGJlIGluIGVuYWJsZWQgc3RhdGUuIERvCisJCSAqIG5vdCBjaGFuZ2Ugc3RhdGUuIFBvcnQgZW5hYmxpbmcgaXMgZG9uZSB3aGVuIFNUQVJUIGV2ZW50IGlzCisJCSAqIHJlY2VpdmVkLgorCQkgKi8KKwkJYnJlYWs7CisKKwljYXNlIEJGQV9QUE9SVF9TTV9ESVNBQkxFOgorCQkvKioKKwkJICogSWYgYSBwb3J0IGlzIHBlcnNpc3RlbnRseSBjb25maWd1cmVkIHRvIGJlIGRpc2FibGVkLCB0aGUKKwkJICogZmlyc3QgZXZlbnQgd2lsbCBhIHBvcnQgZGlzYWJsZSByZXF1ZXN0LgorCQkgKi8KKwkJYmZhX3NtX3NldF9zdGF0ZShwcG9ydCwgYmZhX3Bwb3J0X3NtX2Rpc2FibGVkKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9QUE9SVF9TTV9IV0ZBSUw6CisJCWJmYV9zbV9zZXRfc3RhdGUocHBvcnQsIGJmYV9wcG9ydF9zbV9pb2Nkb3duKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfc21fZmF1bHQocHBvcnQtPmJmYSwgZXZlbnQpOworCX0KK30KKworc3RhdGljIHZvaWQKK2JmYV9wcG9ydF9zbV9lbmFibGluZ19xd2FpdChzdHJ1Y3QgYmZhX3Bwb3J0X3MgKnBwb3J0LAorCQkJICAgIGVudW0gYmZhX3Bwb3J0X3NtX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMocHBvcnQtPmJmYSwgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX1BQT1JUX1NNX1FSRVNVTUU6CisJCWJmYV9zbV9zZXRfc3RhdGUocHBvcnQsIGJmYV9wcG9ydF9zbV9lbmFibGluZyk7CisJCWJmYV9wcG9ydF9zZW5kX2VuYWJsZShwcG9ydCk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfUFBPUlRfU01fU1RPUDoKKwkJYmZhX3JlcXFfd2NhbmNlbCgmcHBvcnQtPnJlcXFfd2FpdCk7CisJCWJmYV9zbV9zZXRfc3RhdGUocHBvcnQsIGJmYV9wcG9ydF9zbV9zdG9wcGVkKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9QUE9SVF9TTV9FTkFCTEU6CisJCS8qKgorCQkgKiBBbHJlYWR5IGVuYWJsZSBpcyBpbiBwcm9ncmVzcy4KKwkJICovCisJCWJyZWFrOworCisJY2FzZSBCRkFfUFBPUlRfU01fRElTQUJMRToKKwkJLyoqCisJCSAqIEp1c3Qgc2VuZCBkaXNhYmxlIHJlcXVlc3QgdG8gZmlybXdhcmUgd2hlbiByb29tIGJlY29tZXMKKwkJICogYXZhaWxhYmxlIGluIHJlcXVlc3QgcXVldWUuCisJCSAqLworCQliZmFfc21fc2V0X3N0YXRlKHBwb3J0LCBiZmFfcHBvcnRfc21fZGlzYWJsZWQpOworCQliZmFfcmVxcV93Y2FuY2VsKCZwcG9ydC0+cmVxcV93YWl0KTsKKwkJYmZhX3Bsb2dfc3RyKHBwb3J0LT5iZmEtPnBsb2csIEJGQV9QTF9NSURfSEFMLAorCQkJICAgICBCRkFfUExfRUlEX1BPUlRfRElTQUJMRSwgMCwgIlBvcnQgRGlzYWJsZSIpOworCQliZmFfcHBvcnRfYWVuX3Bvc3QocHBvcnQsIEJGQV9QT1JUX0FFTl9ESVNBQkxFKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9QUE9SVF9TTV9MSU5LVVA6CisJY2FzZSBCRkFfUFBPUlRfU01fTElOS0RPV046CisJCS8qKgorCQkgKiBQb3NzaWJsZSB0byBnZXQgbGluayBldmVudHMgd2hlbiBkb2luZyBiYWNrLXRvLWJhY2sKKwkJICogZW5hYmxlL2Rpc2FibGVzLgorCQkgKi8KKwkJYnJlYWs7CisKKwljYXNlIEJGQV9QUE9SVF9TTV9IV0ZBSUw6CisJCWJmYV9yZXFxX3djYW5jZWwoJnBwb3J0LT5yZXFxX3dhaXQpOworCQliZmFfc21fc2V0X3N0YXRlKHBwb3J0LCBiZmFfcHBvcnRfc21faW9jZG93bik7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX3NtX2ZhdWx0KHBwb3J0LT5iZmEsIGV2ZW50KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfcHBvcnRfc21fZW5hYmxpbmcoc3RydWN0IGJmYV9wcG9ydF9zICpwcG9ydCwgZW51bSBiZmFfcHBvcnRfc21fZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhwcG9ydC0+YmZhLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfUFBPUlRfU01fRldSU1A6CisJY2FzZSBCRkFfUFBPUlRfU01fTElOS0RPV046CisJCWJmYV9zbV9zZXRfc3RhdGUocHBvcnQsIGJmYV9wcG9ydF9zbV9saW5rZG93bik7CisJCWJyZWFrOworCisJY2FzZSBCRkFfUFBPUlRfU01fTElOS1VQOgorCQliZmFfcHBvcnRfdXBkYXRlX2xpbmtpbmZvKHBwb3J0KTsKKwkJYmZhX3NtX3NldF9zdGF0ZShwcG9ydCwgYmZhX3Bwb3J0X3NtX2xpbmt1cCk7CisKKwkJYmZhX2Fzc2VydChwcG9ydC0+ZXZlbnRfY2Jmbik7CisJCWJmYV9wcG9ydF9jYWxsYmFjayhwcG9ydCwgQkZBX1BQT1JUX0xJTktVUCk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfUFBPUlRfU01fRU5BQkxFOgorCQkvKioKKwkJICogQWxyZWFkeSBiZWluZyBlbmFibGVkLgorCQkgKi8KKwkJYnJlYWs7CisKKwljYXNlIEJGQV9QUE9SVF9TTV9ESVNBQkxFOgorCQlpZiAoYmZhX3Bwb3J0X3NlbmRfZGlzYWJsZShwcG9ydCkpCisJCQliZmFfc21fc2V0X3N0YXRlKHBwb3J0LCBiZmFfcHBvcnRfc21fZGlzYWJsaW5nKTsKKwkJZWxzZQorCQkJYmZhX3NtX3NldF9zdGF0ZShwcG9ydCwgYmZhX3Bwb3J0X3NtX2Rpc2FibGluZ19xd2FpdCk7CisKKwkJYmZhX3Bsb2dfc3RyKHBwb3J0LT5iZmEtPnBsb2csIEJGQV9QTF9NSURfSEFMLAorCQkJICAgICBCRkFfUExfRUlEX1BPUlRfRElTQUJMRSwgMCwgIlBvcnQgRGlzYWJsZSIpOworCQliZmFfcHBvcnRfYWVuX3Bvc3QocHBvcnQsIEJGQV9QT1JUX0FFTl9ESVNBQkxFKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9QUE9SVF9TTV9TVE9QOgorCQliZmFfc21fc2V0X3N0YXRlKHBwb3J0LCBiZmFfcHBvcnRfc21fc3RvcHBlZCk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfUFBPUlRfU01fSFdGQUlMOgorCQliZmFfc21fc2V0X3N0YXRlKHBwb3J0LCBiZmFfcHBvcnRfc21faW9jZG93bik7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX3NtX2ZhdWx0KHBwb3J0LT5iZmEsIGV2ZW50KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfcHBvcnRfc21fbGlua2Rvd24oc3RydWN0IGJmYV9wcG9ydF9zICpwcG9ydCwgZW51bSBiZmFfcHBvcnRfc21fZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhwcG9ydC0+YmZhLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfUFBPUlRfU01fTElOS1VQOgorCQliZmFfcHBvcnRfdXBkYXRlX2xpbmtpbmZvKHBwb3J0KTsKKwkJYmZhX3NtX3NldF9zdGF0ZShwcG9ydCwgYmZhX3Bwb3J0X3NtX2xpbmt1cCk7CisJCWJmYV9hc3NlcnQocHBvcnQtPmV2ZW50X2NiZm4pOworCQliZmFfcGxvZ19zdHIocHBvcnQtPmJmYS0+cGxvZywgQkZBX1BMX01JRF9IQUwsCisJCQkgICAgIEJGQV9QTF9FSURfUE9SVF9TVF9DSEFOR0UsIDAsICJQb3J0IExpbmt1cCIpOworCQliZmFfcHBvcnRfY2FsbGJhY2socHBvcnQsIEJGQV9QUE9SVF9MSU5LVVApOworCQliZmFfcHBvcnRfYWVuX3Bvc3QocHBvcnQsIEJGQV9QT1JUX0FFTl9PTkxJTkUpOworCQkvKioKKwkJICogSWYgUW9TIGlzIGVuYWJsZWQgYW5kIGl0IGlzIG5vdCBvbmxpbmUsCisJCSAqIFNlbmQgYSBzZXBhcmF0ZSBldmVudC4KKwkJICovCisJCWlmICgocHBvcnQtPmNmZy5xb3NfZW5hYmxlZCkKKwkJICAgICYmIChiZmFfb3NfbnRvaGwocHBvcnQtPnFvc19hdHRyLnN0YXRlKSAhPSBCRkFfUU9TX09OTElORSkpCisJCQliZmFfcHBvcnRfYWVuX3Bvc3QocHBvcnQsIEJGQV9QT1JUX0FFTl9RT1NfTkVHKTsKKworCQlicmVhazsKKworCWNhc2UgQkZBX1BQT1JUX1NNX0xJTktET1dOOgorCQkvKioKKwkJICogUG9zc2libGUgdG8gZ2V0IGxpbmsgZG93biBldmVudC4KKwkJICovCisJCWJyZWFrOworCisJY2FzZSBCRkFfUFBPUlRfU01fRU5BQkxFOgorCQkvKioKKwkJICogQWxyZWFkeSBlbmFibGVkLgorCQkgKi8KKwkJYnJlYWs7CisKKwljYXNlIEJGQV9QUE9SVF9TTV9ESVNBQkxFOgorCQlpZiAoYmZhX3Bwb3J0X3NlbmRfZGlzYWJsZShwcG9ydCkpCisJCQliZmFfc21fc2V0X3N0YXRlKHBwb3J0LCBiZmFfcHBvcnRfc21fZGlzYWJsaW5nKTsKKwkJZWxzZQorCQkJYmZhX3NtX3NldF9zdGF0ZShwcG9ydCwgYmZhX3Bwb3J0X3NtX2Rpc2FibGluZ19xd2FpdCk7CisKKwkJYmZhX3Bsb2dfc3RyKHBwb3J0LT5iZmEtPnBsb2csIEJGQV9QTF9NSURfSEFMLAorCQkJICAgICBCRkFfUExfRUlEX1BPUlRfRElTQUJMRSwgMCwgIlBvcnQgRGlzYWJsZSIpOworCQliZmFfcHBvcnRfYWVuX3Bvc3QocHBvcnQsIEJGQV9QT1JUX0FFTl9ESVNBQkxFKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9QUE9SVF9TTV9TVE9QOgorCQliZmFfc21fc2V0X3N0YXRlKHBwb3J0LCBiZmFfcHBvcnRfc21fc3RvcHBlZCk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfUFBPUlRfU01fSFdGQUlMOgorCQliZmFfc21fc2V0X3N0YXRlKHBwb3J0LCBiZmFfcHBvcnRfc21faW9jZG93bik7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX3NtX2ZhdWx0KHBwb3J0LT5iZmEsIGV2ZW50KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfcHBvcnRfc21fbGlua3VwKHN0cnVjdCBiZmFfcHBvcnRfcyAqcHBvcnQsIGVudW0gYmZhX3Bwb3J0X3NtX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMocHBvcnQtPmJmYSwgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX1BQT1JUX1NNX0VOQUJMRToKKwkJLyoqCisJCSAqIEFscmVhZHkgZW5hYmxlZC4KKwkJICovCisJCWJyZWFrOworCisJY2FzZSBCRkFfUFBPUlRfU01fRElTQUJMRToKKwkJaWYgKGJmYV9wcG9ydF9zZW5kX2Rpc2FibGUocHBvcnQpKQorCQkJYmZhX3NtX3NldF9zdGF0ZShwcG9ydCwgYmZhX3Bwb3J0X3NtX2Rpc2FibGluZyk7CisJCWVsc2UKKwkJCWJmYV9zbV9zZXRfc3RhdGUocHBvcnQsIGJmYV9wcG9ydF9zbV9kaXNhYmxpbmdfcXdhaXQpOworCisJCWJmYV9wcG9ydF9yZXNldF9saW5raW5mbyhwcG9ydCk7CisJCWJmYV9wcG9ydF9jYWxsYmFjayhwcG9ydCwgQkZBX1BQT1JUX0xJTktET1dOKTsKKwkJYmZhX3Bsb2dfc3RyKHBwb3J0LT5iZmEtPnBsb2csIEJGQV9QTF9NSURfSEFMLAorCQkJICAgICBCRkFfUExfRUlEX1BPUlRfRElTQUJMRSwgMCwgIlBvcnQgRGlzYWJsZSIpOworCQliZmFfcHBvcnRfYWVuX3Bvc3QocHBvcnQsIEJGQV9QT1JUX0FFTl9PRkZMSU5FKTsKKwkJYmZhX3Bwb3J0X2Flbl9wb3N0KHBwb3J0LCBCRkFfUE9SVF9BRU5fRElTQUJMRSk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfUFBPUlRfU01fTElOS0RPV046CisJCWJmYV9zbV9zZXRfc3RhdGUocHBvcnQsIGJmYV9wcG9ydF9zbV9saW5rZG93bik7CisJCWJmYV9wcG9ydF9yZXNldF9saW5raW5mbyhwcG9ydCk7CisJCWJmYV9wcG9ydF9jYWxsYmFjayhwcG9ydCwgQkZBX1BQT1JUX0xJTktET1dOKTsKKwkJYmZhX3Bsb2dfc3RyKHBwb3J0LT5iZmEtPnBsb2csIEJGQV9QTF9NSURfSEFMLAorCQkJICAgICBCRkFfUExfRUlEX1BPUlRfU1RfQ0hBTkdFLCAwLCAiUG9ydCBMaW5rZG93biIpOworCQlpZiAoQkZBX1BPUlRfSVNfRElTQUJMRUQocHBvcnQtPmJmYSkpIHsKKwkJCWJmYV9wcG9ydF9hZW5fcG9zdChwcG9ydCwgQkZBX1BPUlRfQUVOX09GRkxJTkUpOworCQl9IGVsc2UgeworCQkJYmZhX3Bwb3J0X2Flbl9wb3N0KHBwb3J0LCBCRkFfUE9SVF9BRU5fRElTQ09OTkVDVCk7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIEJGQV9QUE9SVF9TTV9TVE9QOgorCQliZmFfc21fc2V0X3N0YXRlKHBwb3J0LCBiZmFfcHBvcnRfc21fc3RvcHBlZCk7CisJCWJmYV9wcG9ydF9yZXNldF9saW5raW5mbyhwcG9ydCk7CisJCWlmIChCRkFfUE9SVF9JU19ESVNBQkxFRChwcG9ydC0+YmZhKSkgeworCQkJYmZhX3Bwb3J0X2Flbl9wb3N0KHBwb3J0LCBCRkFfUE9SVF9BRU5fT0ZGTElORSk7CisJCX0gZWxzZSB7CisJCQliZmFfcHBvcnRfYWVuX3Bvc3QocHBvcnQsIEJGQV9QT1JUX0FFTl9ESVNDT05ORUNUKTsKKwkJfQorCQlicmVhazsKKworCWNhc2UgQkZBX1BQT1JUX1NNX0hXRkFJTDoKKwkJYmZhX3NtX3NldF9zdGF0ZShwcG9ydCwgYmZhX3Bwb3J0X3NtX2lvY2Rvd24pOworCQliZmFfcHBvcnRfcmVzZXRfbGlua2luZm8ocHBvcnQpOworCQliZmFfcHBvcnRfY2FsbGJhY2socHBvcnQsIEJGQV9QUE9SVF9MSU5LRE9XTik7CisJCWlmIChCRkFfUE9SVF9JU19ESVNBQkxFRChwcG9ydC0+YmZhKSkgeworCQkJYmZhX3Bwb3J0X2Flbl9wb3N0KHBwb3J0LCBCRkFfUE9SVF9BRU5fT0ZGTElORSk7CisJCX0gZWxzZSB7CisJCQliZmFfcHBvcnRfYWVuX3Bvc3QocHBvcnQsIEJGQV9QT1JUX0FFTl9ESVNDT05ORUNUKTsKKwkJfQorCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9zbV9mYXVsdChwcG9ydC0+YmZhLCBldmVudCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX3Bwb3J0X3NtX2Rpc2FibGluZ19xd2FpdChzdHJ1Y3QgYmZhX3Bwb3J0X3MgKnBwb3J0LAorCQkJICAgICBlbnVtIGJmYV9wcG9ydF9zbV9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKHBwb3J0LT5iZmEsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9QUE9SVF9TTV9RUkVTVU1FOgorCQliZmFfc21fc2V0X3N0YXRlKHBwb3J0LCBiZmFfcHBvcnRfc21fZGlzYWJsaW5nKTsKKwkJYmZhX3Bwb3J0X3NlbmRfZGlzYWJsZShwcG9ydCk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfUFBPUlRfU01fU1RPUDoKKwkJYmZhX3NtX3NldF9zdGF0ZShwcG9ydCwgYmZhX3Bwb3J0X3NtX3N0b3BwZWQpOworCQliZmFfcmVxcV93Y2FuY2VsKCZwcG9ydC0+cmVxcV93YWl0KTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9QUE9SVF9TTV9ESVNBQkxFOgorCQkvKioKKwkJICogQWxyZWFkeSBiZWluZyBkaXNhYmxlZC4KKwkJICovCisJCWJyZWFrOworCisJY2FzZSBCRkFfUFBPUlRfU01fTElOS1VQOgorCWNhc2UgQkZBX1BQT1JUX1NNX0xJTktET1dOOgorCQkvKioKKwkJICogUG9zc2libGUgdG8gZ2V0IGxpbmsgZXZlbnRzIHdoZW4gZG9pbmcgYmFjay10by1iYWNrCisJCSAqIGVuYWJsZS9kaXNhYmxlcy4KKwkJICovCisJCWJyZWFrOworCisJY2FzZSBCRkFfUFBPUlRfU01fSFdGQUlMOgorCQliZmFfc21fc2V0X3N0YXRlKHBwb3J0LCBiZmFfcHBvcnRfc21faW9jZmFpbCk7CisJCWJmYV9yZXFxX3djYW5jZWwoJnBwb3J0LT5yZXFxX3dhaXQpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9zbV9mYXVsdChwcG9ydC0+YmZhLCBldmVudCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX3Bwb3J0X3NtX2Rpc2FibGluZyhzdHJ1Y3QgYmZhX3Bwb3J0X3MgKnBwb3J0LCBlbnVtIGJmYV9wcG9ydF9zbV9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKHBwb3J0LT5iZmEsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9QUE9SVF9TTV9GV1JTUDoKKwkJYmZhX3NtX3NldF9zdGF0ZShwcG9ydCwgYmZhX3Bwb3J0X3NtX2Rpc2FibGVkKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9QUE9SVF9TTV9ESVNBQkxFOgorCQkvKioKKwkJICogQWxyZWFkeSBiZWluZyBkaXNhYmxlZC4KKwkJICovCisJCWJyZWFrOworCisJY2FzZSBCRkFfUFBPUlRfU01fRU5BQkxFOgorCQlpZiAoYmZhX3Bwb3J0X3NlbmRfZW5hYmxlKHBwb3J0KSkKKwkJCWJmYV9zbV9zZXRfc3RhdGUocHBvcnQsIGJmYV9wcG9ydF9zbV9lbmFibGluZyk7CisJCWVsc2UKKwkJCWJmYV9zbV9zZXRfc3RhdGUocHBvcnQsIGJmYV9wcG9ydF9zbV9lbmFibGluZ19xd2FpdCk7CisKKwkJYmZhX3Bsb2dfc3RyKHBwb3J0LT5iZmEtPnBsb2csIEJGQV9QTF9NSURfSEFMLAorCQkJICAgICBCRkFfUExfRUlEX1BPUlRfRU5BQkxFLCAwLCAiUG9ydCBFbmFibGUiKTsKKwkJYmZhX3Bwb3J0X2Flbl9wb3N0KHBwb3J0LCBCRkFfUE9SVF9BRU5fRU5BQkxFKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9QUE9SVF9TTV9TVE9QOgorCQliZmFfc21fc2V0X3N0YXRlKHBwb3J0LCBiZmFfcHBvcnRfc21fc3RvcHBlZCk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfUFBPUlRfU01fTElOS1VQOgorCWNhc2UgQkZBX1BQT1JUX1NNX0xJTktET1dOOgorCQkvKioKKwkJICogUG9zc2libGUgdG8gZ2V0IGxpbmsgZXZlbnRzIHdoZW4gZG9pbmcgYmFjay10by1iYWNrCisJCSAqIGVuYWJsZS9kaXNhYmxlcy4KKwkJICovCisJCWJyZWFrOworCisJY2FzZSBCRkFfUFBPUlRfU01fSFdGQUlMOgorCQliZmFfc21fc2V0X3N0YXRlKHBwb3J0LCBiZmFfcHBvcnRfc21faW9jZmFpbCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX3NtX2ZhdWx0KHBwb3J0LT5iZmEsIGV2ZW50KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfcHBvcnRfc21fZGlzYWJsZWQoc3RydWN0IGJmYV9wcG9ydF9zICpwcG9ydCwgZW51bSBiZmFfcHBvcnRfc21fZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhwcG9ydC0+YmZhLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfUFBPUlRfU01fU1RBUlQ6CisJCS8qKgorCQkgKiBJZ25vcmUgc3RhcnQgZXZlbnQgZm9yIGEgcG9ydCB0aGF0IGlzIGRpc2FibGVkLgorCQkgKi8KKwkJYnJlYWs7CisKKwljYXNlIEJGQV9QUE9SVF9TTV9TVE9QOgorCQliZmFfc21fc2V0X3N0YXRlKHBwb3J0LCBiZmFfcHBvcnRfc21fc3RvcHBlZCk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfUFBPUlRfU01fRU5BQkxFOgorCQlpZiAoYmZhX3Bwb3J0X3NlbmRfZW5hYmxlKHBwb3J0KSkKKwkJCWJmYV9zbV9zZXRfc3RhdGUocHBvcnQsIGJmYV9wcG9ydF9zbV9lbmFibGluZyk7CisJCWVsc2UKKwkJCWJmYV9zbV9zZXRfc3RhdGUocHBvcnQsIGJmYV9wcG9ydF9zbV9lbmFibGluZ19xd2FpdCk7CisKKwkJYmZhX3Bsb2dfc3RyKHBwb3J0LT5iZmEtPnBsb2csIEJGQV9QTF9NSURfSEFMLAorCQkJICAgICBCRkFfUExfRUlEX1BPUlRfRU5BQkxFLCAwLCAiUG9ydCBFbmFibGUiKTsKKwkJYmZhX3Bwb3J0X2Flbl9wb3N0KHBwb3J0LCBCRkFfUE9SVF9BRU5fRU5BQkxFKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9QUE9SVF9TTV9ESVNBQkxFOgorCQkvKioKKwkJICogQWxyZWFkeSBkaXNhYmxlZC4KKwkJICovCisJCWJyZWFrOworCisJY2FzZSBCRkFfUFBPUlRfU01fSFdGQUlMOgorCQliZmFfc21fc2V0X3N0YXRlKHBwb3J0LCBiZmFfcHBvcnRfc21faW9jZmFpbCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX3NtX2ZhdWx0KHBwb3J0LT5iZmEsIGV2ZW50KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfcHBvcnRfc21fc3RvcHBlZChzdHJ1Y3QgYmZhX3Bwb3J0X3MgKnBwb3J0LCBlbnVtIGJmYV9wcG9ydF9zbV9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKHBwb3J0LT5iZmEsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9QUE9SVF9TTV9TVEFSVDoKKwkJaWYgKGJmYV9wcG9ydF9zZW5kX2VuYWJsZShwcG9ydCkpCisJCQliZmFfc21fc2V0X3N0YXRlKHBwb3J0LCBiZmFfcHBvcnRfc21fZW5hYmxpbmcpOworCQllbHNlCisJCQliZmFfc21fc2V0X3N0YXRlKHBwb3J0LCBiZmFfcHBvcnRfc21fZW5hYmxpbmdfcXdhaXQpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCS8qKgorCQkgKiBJZ25vcmUgYWxsIG90aGVyIGV2ZW50cy4KKwkJICovCisJCTsKKwl9Cit9CisKKy8qKgorICogUG9ydCBpcyBlbmFibGVkLiBJT0MgaXMgZG93bi9mYWlsZWQuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfcHBvcnRfc21faW9jZG93bihzdHJ1Y3QgYmZhX3Bwb3J0X3MgKnBwb3J0LCBlbnVtIGJmYV9wcG9ydF9zbV9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKHBwb3J0LT5iZmEsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9QUE9SVF9TTV9TVEFSVDoKKwkJaWYgKGJmYV9wcG9ydF9zZW5kX2VuYWJsZShwcG9ydCkpCisJCQliZmFfc21fc2V0X3N0YXRlKHBwb3J0LCBiZmFfcHBvcnRfc21fZW5hYmxpbmcpOworCQllbHNlCisJCQliZmFfc21fc2V0X3N0YXRlKHBwb3J0LCBiZmFfcHBvcnRfc21fZW5hYmxpbmdfcXdhaXQpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCS8qKgorCQkgKiBJZ25vcmUgYWxsIGV2ZW50cy4KKwkJICovCisJCTsKKwl9Cit9CisKKy8qKgorICogUG9ydCBpcyBkaXNhYmxlZC4gSU9DIGlzIGRvd24vZmFpbGVkLgorICovCitzdGF0aWMgdm9pZAorYmZhX3Bwb3J0X3NtX2lvY2ZhaWwoc3RydWN0IGJmYV9wcG9ydF9zICpwcG9ydCwgZW51bSBiZmFfcHBvcnRfc21fZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhwcG9ydC0+YmZhLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfUFBPUlRfU01fU1RBUlQ6CisJCWJmYV9zbV9zZXRfc3RhdGUocHBvcnQsIGJmYV9wcG9ydF9zbV9kaXNhYmxlZCk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfUFBPUlRfU01fRU5BQkxFOgorCQliZmFfc21fc2V0X3N0YXRlKHBwb3J0LCBiZmFfcHBvcnRfc21faW9jZG93bik7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJLyoqCisJCSAqIElnbm9yZSBhbGwgZXZlbnRzLgorCQkgKi8KKwkJOworCX0KK30KKworCisKKy8qKgorICogIGJmYV9wcG9ydF9wcml2YXRlCisgKi8KKworc3RhdGljIHZvaWQKK19fYmZhX2NiX3BvcnRfZXZlbnQodm9pZCAqY2JhcmcsIGJmYV9ib29sZWFuX3QgY29tcGxldGUpCit7CisJc3RydWN0IGJmYV9wcG9ydF9zICpwcG9ydCA9IGNiYXJnOworCisJaWYgKGNvbXBsZXRlKQorCQlwcG9ydC0+ZXZlbnRfY2JmbihwcG9ydC0+ZXZlbnRfY2JhcmcsIHBwb3J0LT5oY2JfZXZlbnQpOworfQorCisjZGVmaW5lIFBQT1JUX1NUQVRTX0RNQV9TWiAoQkZBX1JPVU5EVVAoc2l6ZW9mKHVuaW9uIGJmYV9wcG9ydF9zdGF0c191KSwgXAorCQkJCQkJCUJGQV9DQUNIRUxJTkVfU1opKQorCitzdGF0aWMgdm9pZAorYmZhX3Bwb3J0X21lbWluZm8oc3RydWN0IGJmYV9pb2NmY19jZmdfcyAqY2ZnLCB1MzIgKm5kbV9sZW4sCisJCSAgdTMyICpkbV9sZW4pCit7CisJKmRtX2xlbiArPSBQUE9SVF9TVEFUU19ETUFfU1o7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfcHBvcnRfcXJlc3VtZSh2b2lkICpjYmFyZykKK3sKKwlzdHJ1Y3QgYmZhX3Bwb3J0X3MgKnBvcnQgPSBjYmFyZzsKKworCWJmYV9zbV9zZW5kX2V2ZW50KHBvcnQsIEJGQV9QUE9SVF9TTV9RUkVTVU1FKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9wcG9ydF9tZW1fY2xhaW0oc3RydWN0IGJmYV9wcG9ydF9zICpwcG9ydCwgc3RydWN0IGJmYV9tZW1pbmZvX3MgKm1lbWluZm8pCit7CisJdTggICAgICAgICpkbV9rdmE7CisJdTY0ICAgICAgICBkbV9wYTsKKworCWRtX2t2YSA9IGJmYV9tZW1pbmZvX2RtYV92aXJ0KG1lbWluZm8pOworCWRtX3BhID0gYmZhX21lbWluZm9fZG1hX3BoeXMobWVtaW5mbyk7CisKKwlwcG9ydC0+c3RhdHNfa3ZhID0gZG1fa3ZhOworCXBwb3J0LT5zdGF0c19wYSA9IGRtX3BhOworCXBwb3J0LT5zdGF0cyA9ICh1bmlvbiBiZmFfcHBvcnRfc3RhdHNfdSAqKWRtX2t2YTsKKworCWRtX2t2YSArPSBQUE9SVF9TVEFUU19ETUFfU1o7CisJZG1fcGEgKz0gUFBPUlRfU1RBVFNfRE1BX1NaOworCisJYmZhX21lbWluZm9fZG1hX3ZpcnQobWVtaW5mbykgPSBkbV9rdmE7CisJYmZhX21lbWluZm9fZG1hX3BoeXMobWVtaW5mbykgPSBkbV9wYTsKK30KKworLyoqCisgKiBNZW1vcnkgaW5pdGlhbGl6YXRpb24uCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfcHBvcnRfYXR0YWNoKHN0cnVjdCBiZmFfcyAqYmZhLCB2b2lkICpiZmFkLCBzdHJ1Y3QgYmZhX2lvY2ZjX2NmZ19zICpjZmcsCisJCSBzdHJ1Y3QgYmZhX21lbWluZm9fcyAqbWVtaW5mbywgc3RydWN0IGJmYV9wY2lkZXZfcyAqcGNpZGV2KQoreworCXN0cnVjdCBiZmFfcHBvcnRfcyAqcHBvcnQgPSBCRkFfUE9SVF9NT0QoYmZhKTsKKwlzdHJ1Y3QgYmZhX3Bwb3J0X2NmZ19zICpwb3J0X2NmZyA9ICZwcG9ydC0+Y2ZnOworCisJYmZhX29zX21lbXNldChwcG9ydCwgMCwgc2l6ZW9mKHN0cnVjdCBiZmFfcHBvcnRfcykpOworCXBwb3J0LT5iZmEgPSBiZmE7CisKKwliZmFfcHBvcnRfbWVtX2NsYWltKHBwb3J0LCBtZW1pbmZvKTsKKworCWJmYV9zbV9zZXRfc3RhdGUocHBvcnQsIGJmYV9wcG9ydF9zbV91bmluaXQpOworCisJLyoqCisJICogaW5pdGlhbGl6ZSBhbmQgc2V0IGRlZmF1bHQgY29uZmlndXJhdGlvbgorCSAqLworCXBvcnRfY2ZnLT50b3BvbG9neSA9IEJGQV9QUE9SVF9UT1BPTE9HWV9QMlA7CisJcG9ydF9jZmctPnNwZWVkID0gQkZBX1BQT1JUX1NQRUVEX0FVVE87CisJcG9ydF9jZmctPnRydW5rZWQgPSBCRkFfRkFMU0U7CisJcG9ydF9jZmctPm1heGZyc2l6ZSA9IDA7CisKKwlwb3J0X2NmZy0+dHJsX2RlZl9zcGVlZCA9IEJGQV9QUE9SVF9TUEVFRF8xR0JQUzsKKworCWJmYV9yZXFxX3dpbml0KCZwcG9ydC0+cmVxcV93YWl0LCBiZmFfcHBvcnRfcXJlc3VtZSwgcHBvcnQpOworfQorCitzdGF0aWMgdm9pZAorYmZhX3Bwb3J0X2luaXRkb25lKHN0cnVjdCBiZmFfcyAqYmZhKQoreworCXN0cnVjdCBiZmFfcHBvcnRfcyAqcHBvcnQgPSBCRkFfUE9SVF9NT0QoYmZhKTsKKworCS8qKgorCSAqIEluaXRpYWxpemUgcG9ydCBhdHRyaWJ1dGVzIGZyb20gSU9DIGhhcmR3YXJlIGRhdGEuCisJICovCisJYmZhX3Bwb3J0X3NldF93d25zKHBwb3J0KTsKKwlpZiAocHBvcnQtPmNmZy5tYXhmcnNpemUgPT0gMCkKKwkJcHBvcnQtPmNmZy5tYXhmcnNpemUgPSBiZmFfaW9jX21heGZyc2l6ZSgmYmZhLT5pb2MpOworCXBwb3J0LT5jZmcucnhfYmJjcmVkaXQgPSBiZmFfaW9jX3J4X2JiY3JlZGl0KCZiZmEtPmlvYyk7CisJcHBvcnQtPnNwZWVkX3N1cCA9IGJmYV9pb2Nfc3BlZWRfc3VwKCZiZmEtPmlvYyk7CisKKwliZmFfYXNzZXJ0KHBwb3J0LT5jZmcubWF4ZnJzaXplKTsKKwliZmFfYXNzZXJ0KHBwb3J0LT5jZmcucnhfYmJjcmVkaXQpOworCWJmYV9hc3NlcnQocHBvcnQtPnNwZWVkX3N1cCk7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfcHBvcnRfZGV0YWNoKHN0cnVjdCBiZmFfcyAqYmZhKQoreworfQorCisvKioKKyAqIENhbGxlZCB3aGVuIElPQyBpcyByZWFkeS4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9wcG9ydF9zdGFydChzdHJ1Y3QgYmZhX3MgKmJmYSkKK3sKKwliZmFfc21fc2VuZF9ldmVudChCRkFfUE9SVF9NT0QoYmZhKSwgQkZBX1BQT1JUX1NNX1NUQVJUKTsKK30KKworLyoqCisgKiBDYWxsZWQgYmVmb3JlIElPQyBpcyBzdG9wcGVkLgorICovCitzdGF0aWMgdm9pZAorYmZhX3Bwb3J0X3N0b3Aoc3RydWN0IGJmYV9zICpiZmEpCit7CisJYmZhX3NtX3NlbmRfZXZlbnQoQkZBX1BPUlRfTU9EKGJmYSksIEJGQV9QUE9SVF9TTV9TVE9QKTsKK30KKworLyoqCisgKiBDYWxsZWQgd2hlbiBJT0MgZmFpbHVyZSBpcyBkZXRlY3RlZC4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9wcG9ydF9pb2NkaXNhYmxlKHN0cnVjdCBiZmFfcyAqYmZhKQoreworCWJmYV9zbV9zZW5kX2V2ZW50KEJGQV9QT1JUX01PRChiZmEpLCBCRkFfUFBPUlRfU01fSFdGQUlMKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9wcG9ydF91cGRhdGVfbGlua2luZm8oc3RydWN0IGJmYV9wcG9ydF9zICpwcG9ydCkKK3sKKwlzdHJ1Y3QgYmZpX3Bwb3J0X2V2ZW50X3MgKnBldmVudCA9IHBwb3J0LT5ldmVudF9hcmcuaTJobXNnLmV2ZW50OworCisJcHBvcnQtPnNwZWVkID0gcGV2ZW50LT5saW5rX3N0YXRlLnNwZWVkOworCXBwb3J0LT50b3BvbG9neSA9IHBldmVudC0+bGlua19zdGF0ZS50b3BvbG9neTsKKworCWlmIChwcG9ydC0+dG9wb2xvZ3kgPT0gQkZBX1BQT1JUX1RPUE9MT0dZX0xPT1ApCisJCXBwb3J0LT5teWFscGEgPSBwZXZlbnQtPmxpbmtfc3RhdGUudGwubG9vcF9pbmZvLm15YWxwYTsKKworCS8qCisJICogUW9TIERldGFpbHMKKwkgKi8KKwliZmFfb3NfYXNzaWduKHBwb3J0LT5xb3NfYXR0ciwgcGV2ZW50LT5saW5rX3N0YXRlLnFvc19hdHRyKTsKKwliZmFfb3NfYXNzaWduKHBwb3J0LT5xb3NfdmNfYXR0ciwgcGV2ZW50LT5saW5rX3N0YXRlLnFvc192Y19hdHRyKTsKKworCWJmYV90cmMocHBvcnQtPmJmYSwgcHBvcnQtPnNwZWVkKTsKKwliZmFfdHJjKHBwb3J0LT5iZmEsIHBwb3J0LT50b3BvbG9neSk7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfcHBvcnRfcmVzZXRfbGlua2luZm8oc3RydWN0IGJmYV9wcG9ydF9zICpwcG9ydCkKK3sKKwlwcG9ydC0+c3BlZWQgPSBCRkFfUFBPUlRfU1BFRURfVU5LTk9XTjsKKwlwcG9ydC0+dG9wb2xvZ3kgPSBCRkFfUFBPUlRfVE9QT0xPR1lfTk9ORTsKK30KKworLyoqCisgKiBTZW5kIHBvcnQgZW5hYmxlIG1lc3NhZ2UgdG8gZmlybXdhcmUuCisgKi8KK3N0YXRpYyAgICAgICAgICBiZmFfYm9vbGVhbl90CitiZmFfcHBvcnRfc2VuZF9lbmFibGUoc3RydWN0IGJmYV9wcG9ydF9zICpwb3J0KQoreworCXN0cnVjdCBiZmlfcHBvcnRfZW5hYmxlX3JlcV9zICptOworCisJLyoqCisJICogSW5jcmVtZW50IG1lc3NhZ2UgdGFnIGJlZm9yZSBxdWV1ZSBjaGVjaywgc28gdGhhdCByZXNwb25zZXMgdG8gb2xkCisJICogcmVxdWVzdHMgYXJlIGRpc2NhcmRlZC4KKwkgKi8KKwlwb3J0LT5tc2d0YWcrKzsKKworCS8qKgorCSAqIGNoZWNrIGZvciByb29tIGluIHF1ZXVlIHRvIHNlbmQgcmVxdWVzdCBub3cKKwkgKi8KKwltID0gYmZhX3JlcXFfbmV4dChwb3J0LT5iZmEsIEJGQV9SRVFRX1BPUlQpOworCWlmICghbSkgeworCQliZmFfcmVxcV93YWl0KHBvcnQtPmJmYSwgQkZBX1JFUVFfUE9SVCwgJnBvcnQtPnJlcXFfd2FpdCk7CisJCXJldHVybiBCRkFfRkFMU0U7CisJfQorCisJYmZpX2gyaV9zZXQobS0+bWgsIEJGSV9NQ19GQ19QT1JULCBCRklfUFBPUlRfSDJJX0VOQUJMRV9SRVEsCisJCSAgICBiZmFfbHB1aWQocG9ydC0+YmZhKSk7CisJbS0+bnd3biA9IHBvcnQtPm53d247CisJbS0+cHd3biA9IHBvcnQtPnB3d247CisJbS0+cG9ydF9jZmcgPSBwb3J0LT5jZmc7CisJbS0+bXNndGFnID0gcG9ydC0+bXNndGFnOworCW0tPnBvcnRfY2ZnLm1heGZyc2l6ZSA9IGJmYV9vc19odG9ucyhwb3J0LT5jZmcubWF4ZnJzaXplKTsKKwliZmFfZG1hX2JlX2FkZHJfc2V0KG0tPnN0YXRzX2RtYV9hZGRyLCBwb3J0LT5zdGF0c19wYSk7CisJYmZhX3RyYyhwb3J0LT5iZmEsIG0tPnN0YXRzX2RtYV9hZGRyLmEzMi5hZGRyX2xvKTsKKwliZmFfdHJjKHBvcnQtPmJmYSwgbS0+c3RhdHNfZG1hX2FkZHIuYTMyLmFkZHJfaGkpOworCisJLyoqCisJICogcXVldWUgSS9PIG1lc3NhZ2UgdG8gZmlybXdhcmUKKwkgKi8KKwliZmFfcmVxcV9wcm9kdWNlKHBvcnQtPmJmYSwgQkZBX1JFUVFfUE9SVCk7CisJcmV0dXJuIEJGQV9UUlVFOworfQorCisvKioKKyAqIFNlbmQgcG9ydCBkaXNhYmxlIG1lc3NhZ2UgdG8gZmlybXdhcmUuCisgKi8KK3N0YXRpYyAgICAgICAgICBiZmFfYm9vbGVhbl90CitiZmFfcHBvcnRfc2VuZF9kaXNhYmxlKHN0cnVjdCBiZmFfcHBvcnRfcyAqcG9ydCkKK3sKKwliZmlfcHBvcnRfZGlzYWJsZV9yZXFfdCAqbTsKKworCS8qKgorCSAqIEluY3JlbWVudCBtZXNzYWdlIHRhZyBiZWZvcmUgcXVldWUgY2hlY2ssIHNvIHRoYXQgcmVzcG9uc2VzIHRvIG9sZAorCSAqIHJlcXVlc3RzIGFyZSBkaXNjYXJkZWQuCisJICovCisJcG9ydC0+bXNndGFnKys7CisKKwkvKioKKwkgKiBjaGVjayBmb3Igcm9vbSBpbiBxdWV1ZSB0byBzZW5kIHJlcXVlc3Qgbm93CisJICovCisJbSA9IGJmYV9yZXFxX25leHQocG9ydC0+YmZhLCBCRkFfUkVRUV9QT1JUKTsKKwlpZiAoIW0pIHsKKwkJYmZhX3JlcXFfd2FpdChwb3J0LT5iZmEsIEJGQV9SRVFRX1BPUlQsICZwb3J0LT5yZXFxX3dhaXQpOworCQlyZXR1cm4gQkZBX0ZBTFNFOworCX0KKworCWJmaV9oMmlfc2V0KG0tPm1oLCBCRklfTUNfRkNfUE9SVCwgQkZJX1BQT1JUX0gySV9ESVNBQkxFX1JFUSwKKwkJICAgIGJmYV9scHVpZChwb3J0LT5iZmEpKTsKKwltLT5tc2d0YWcgPSBwb3J0LT5tc2d0YWc7CisKKwkvKioKKwkgKiBxdWV1ZSBJL08gbWVzc2FnZSB0byBmaXJtd2FyZQorCSAqLworCWJmYV9yZXFxX3Byb2R1Y2UocG9ydC0+YmZhLCBCRkFfUkVRUV9QT1JUKTsKKworCXJldHVybiBCRkFfVFJVRTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9wcG9ydF9zZXRfd3ducyhzdHJ1Y3QgYmZhX3Bwb3J0X3MgKnBvcnQpCit7CisJcG9ydC0+cHd3biA9IGJmYV9pb2NfZ2V0X3B3d24oJnBvcnQtPmJmYS0+aW9jKTsKKwlwb3J0LT5ud3duID0gYmZhX2lvY19nZXRfbnd3bigmcG9ydC0+YmZhLT5pb2MpOworCisJYmZhX3RyYyhwb3J0LT5iZmEsIHBvcnQtPnB3d24pOworCWJmYV90cmMocG9ydC0+YmZhLCBwb3J0LT5ud3duKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9wb3J0X3NlbmRfdHhjcmVkaXQodm9pZCAqcG9ydF9jYmFyZykKK3sKKworCXN0cnVjdCBiZmFfcHBvcnRfcyAqcG9ydCA9IHBvcnRfY2Jhcmc7CisJc3RydWN0IGJmaV9wcG9ydF9zZXRfc3ZjX3BhcmFtc19yZXFfcyAqbTsKKworCS8qKgorCSAqIGNoZWNrIGZvciByb29tIGluIHF1ZXVlIHRvIHNlbmQgcmVxdWVzdCBub3cKKwkgKi8KKwltID0gYmZhX3JlcXFfbmV4dChwb3J0LT5iZmEsIEJGQV9SRVFRX1BPUlQpOworCWlmICghbSkgeworCQliZmFfdHJjKHBvcnQtPmJmYSwgcG9ydC0+Y2ZnLnR4X2JiY3JlZGl0KTsKKwkJcmV0dXJuOworCX0KKworCWJmaV9oMmlfc2V0KG0tPm1oLCBCRklfTUNfRkNfUE9SVCwgQkZJX1BQT1JUX0gySV9TRVRfU1ZDX1BBUkFNU19SRVEsCisJCSAgICBiZmFfbHB1aWQocG9ydC0+YmZhKSk7CisJbS0+dHhfYmJjcmVkaXQgPSBiZmFfb3NfaHRvbnMoKHUxNikgcG9ydC0+Y2ZnLnR4X2JiY3JlZGl0KTsKKworCS8qKgorCSAqIHF1ZXVlIEkvTyBtZXNzYWdlIHRvIGZpcm13YXJlCisJICovCisJYmZhX3JlcXFfcHJvZHVjZShwb3J0LT5iZmEsIEJGQV9SRVFRX1BPUlQpOworfQorCisKKworLyoqCisgKiAgYmZhX3Bwb3J0X3B1YmxpYworICovCisKKy8qKgorICogRmlybXdhcmUgbWVzc2FnZSBoYW5kbGVyLgorICovCit2b2lkCitiZmFfcHBvcnRfaXNyKHN0cnVjdCBiZmFfcyAqYmZhLCBzdHJ1Y3QgYmZpX21zZ19zICptc2cpCit7CisJc3RydWN0IGJmYV9wcG9ydF9zICpwcG9ydCA9IEJGQV9QT1JUX01PRChiZmEpOworCXVuaW9uIGJmaV9wcG9ydF9pMmhfbXNnX3UgaTJobXNnOworCisJaTJobXNnLm1zZyA9IG1zZzsKKwlwcG9ydC0+ZXZlbnRfYXJnLmkyaG1zZyA9IGkyaG1zZzsKKworCXN3aXRjaCAobXNnLT5taGRyLm1zZ19pZCkgeworCWNhc2UgQkZJX1BQT1JUX0kySF9FTkFCTEVfUlNQOgorCQlpZiAocHBvcnQtPm1zZ3RhZyA9PSBpMmhtc2cuZW5hYmxlX3JzcC0+bXNndGFnKQorCQkJYmZhX3NtX3NlbmRfZXZlbnQocHBvcnQsIEJGQV9QUE9SVF9TTV9GV1JTUCk7CisJCWJyZWFrOworCisJY2FzZSBCRklfUFBPUlRfSTJIX0RJU0FCTEVfUlNQOgorCQlpZiAocHBvcnQtPm1zZ3RhZyA9PSBpMmhtc2cuZW5hYmxlX3JzcC0+bXNndGFnKQorCQkJYmZhX3NtX3NlbmRfZXZlbnQocHBvcnQsIEJGQV9QUE9SVF9TTV9GV1JTUCk7CisJCWJyZWFrOworCisJY2FzZSBCRklfUFBPUlRfSTJIX0VWRU5UOgorCQlzd2l0Y2ggKGkyaG1zZy5ldmVudC0+bGlua19zdGF0ZS5saW5rc3RhdGUpIHsKKwkJY2FzZSBCRkFfUFBPUlRfTElOS1VQOgorCQkJYmZhX3NtX3NlbmRfZXZlbnQocHBvcnQsIEJGQV9QUE9SVF9TTV9MSU5LVVApOworCQkJYnJlYWs7CisJCWNhc2UgQkZBX1BQT1JUX0xJTktET1dOOgorCQkJYmZhX3NtX3NlbmRfZXZlbnQocHBvcnQsIEJGQV9QUE9SVF9TTV9MSU5LRE9XTik7CisJCQlicmVhazsKKwkJY2FzZSBCRkFfUFBPUlRfVFJVTktfTElOS0RPV046CisJCQkvKiogdG9kbzogZXZlbnQgbm90aWZpY2F0aW9uICovCisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKworCWNhc2UgQkZJX1BQT1JUX0kySF9HRVRfU1RBVFNfUlNQOgorCWNhc2UgQkZJX1BQT1JUX0kySF9HRVRfUU9TX1NUQVRTX1JTUDoKKwkJLyoKKwkJICogY2hlY2sgZm9yIHRpbWVyIHBvcCBiZWZvcmUgcHJvY2Vzc2luZyB0aGUgcnNwCisJCSAqLworCQlpZiAocHBvcnQtPnN0YXRzX2J1c3kgPT0gQkZBX0ZBTFNFCisJCSAgICB8fCBwcG9ydC0+c3RhdHNfc3RhdHVzID09IEJGQV9TVEFUVVNfRVRJTUVSKQorCQkJYnJlYWs7CisKKwkJYmZhX3RpbWVyX3N0b3AoJnBwb3J0LT50aW1lcik7CisJCXBwb3J0LT5zdGF0c19zdGF0dXMgPSBpMmhtc2cuZ2V0c3RhdHNfcnNwLT5zdGF0dXM7CisJCWJmYV9jYl9xdWV1ZShwcG9ydC0+YmZhLCAmcHBvcnQtPmhjYl9xZSwgX19iZmFfY2JfcG9ydF9zdGF0cywKKwkJCSAgICAgcHBvcnQpOworCQlicmVhazsKKwljYXNlIEJGSV9QUE9SVF9JMkhfQ0xFQVJfU1RBVFNfUlNQOgorCWNhc2UgQkZJX1BQT1JUX0kySF9DTEVBUl9RT1NfU1RBVFNfUlNQOgorCQkvKgorCQkgKiBjaGVjayBmb3IgdGltZXIgcG9wIGJlZm9yZSBwcm9jZXNzaW5nIHRoZSByc3AKKwkJICovCisJCWlmIChwcG9ydC0+c3RhdHNfYnVzeSA9PSBCRkFfRkFMU0UKKwkJICAgIHx8IHBwb3J0LT5zdGF0c19zdGF0dXMgPT0gQkZBX1NUQVRVU19FVElNRVIpCisJCQlicmVhazsKKworCQliZmFfdGltZXJfc3RvcCgmcHBvcnQtPnRpbWVyKTsKKwkJcHBvcnQtPnN0YXRzX3N0YXR1cyA9IEJGQV9TVEFUVVNfT0s7CisJCWJmYV9jYl9xdWV1ZShwcG9ydC0+YmZhLCAmcHBvcnQtPmhjYl9xZSwKKwkJCSAgICAgX19iZmFfY2JfcG9ydF9zdGF0c19jbHIsIHBwb3J0KTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworCisKKy8qKgorICogIGJmYV9wcG9ydF9hcGkKKyAqLworCisvKioKKyAqIFJlZ2lzdGVyZWQgY2FsbGJhY2sgZm9yIHBvcnQgZXZlbnRzLgorICovCit2b2lkCitiZmFfcHBvcnRfZXZlbnRfcmVnaXN0ZXIoc3RydWN0IGJmYV9zICpiZmEsCisJCQkgdm9pZCAoKmNiZm4pICh2b2lkICpjYmFyZywgYmZhX3Bwb3J0X2V2ZW50X3QgZXZlbnQpLAorCQkJIHZvaWQgKmNiYXJnKQoreworCXN0cnVjdCBiZmFfcHBvcnRfcyAqcHBvcnQgPSBCRkFfUE9SVF9NT0QoYmZhKTsKKworCXBwb3J0LT5ldmVudF9jYmZuID0gY2JmbjsKKwlwcG9ydC0+ZXZlbnRfY2JhcmcgPSBjYmFyZzsKK30KKworYmZhX3N0YXR1c190CitiZmFfcHBvcnRfZW5hYmxlKHN0cnVjdCBiZmFfcyAqYmZhKQoreworCXN0cnVjdCBiZmFfcHBvcnRfcyAqcHBvcnQgPSBCRkFfUE9SVF9NT0QoYmZhKTsKKworCWlmIChwcG9ydC0+ZGlhZ19idXN5KQorCQlyZXR1cm4gKEJGQV9TVEFUVVNfRElBR19CVVNZKTsKKwllbHNlIGlmIChiZmFfc21fY21wX3N0YXRlCisJCSAoQkZBX1BPUlRfTU9EKGJmYSksIGJmYV9wcG9ydF9zbV9kaXNhYmxpbmdfcXdhaXQpKQorCQlyZXR1cm4gKEJGQV9TVEFUVVNfREVWQlVTWSk7CisKKwliZmFfc21fc2VuZF9ldmVudChCRkFfUE9SVF9NT0QoYmZhKSwgQkZBX1BQT1JUX1NNX0VOQUJMRSk7CisJcmV0dXJuIEJGQV9TVEFUVVNfT0s7Cit9CisKK2JmYV9zdGF0dXNfdAorYmZhX3Bwb3J0X2Rpc2FibGUoc3RydWN0IGJmYV9zICpiZmEpCit7CisJYmZhX3NtX3NlbmRfZXZlbnQoQkZBX1BPUlRfTU9EKGJmYSksIEJGQV9QUE9SVF9TTV9ESVNBQkxFKTsKKwlyZXR1cm4gQkZBX1NUQVRVU19PSzsKK30KKworLyoqCisgKiBDb25maWd1cmUgcG9ydCBzcGVlZC4KKyAqLworYmZhX3N0YXR1c190CitiZmFfcHBvcnRfY2ZnX3NwZWVkKHN0cnVjdCBiZmFfcyAqYmZhLCBlbnVtIGJmYV9wcG9ydF9zcGVlZCBzcGVlZCkKK3sKKwlzdHJ1Y3QgYmZhX3Bwb3J0X3MgKnBwb3J0ID0gQkZBX1BPUlRfTU9EKGJmYSk7CisKKwliZmFfdHJjKGJmYSwgc3BlZWQpOworCisJaWYgKChzcGVlZCAhPSBCRkFfUFBPUlRfU1BFRURfQVVUTykgJiYgKHNwZWVkID4gcHBvcnQtPnNwZWVkX3N1cCkpIHsKKwkJYmZhX3RyYyhiZmEsIHBwb3J0LT5zcGVlZF9zdXApOworCQlyZXR1cm4gQkZBX1NUQVRVU19VTlNVUFBfU1BFRUQ7CisJfQorCisJcHBvcnQtPmNmZy5zcGVlZCA9IHNwZWVkOworCisJcmV0dXJuIChCRkFfU1RBVFVTX09LKTsKK30KKworLyoqCisgKiBHZXQgY3VycmVudCBzcGVlZC4KKyAqLworZW51bSBiZmFfcHBvcnRfc3BlZWQKK2JmYV9wcG9ydF9nZXRfc3BlZWQoc3RydWN0IGJmYV9zICpiZmEpCit7CisJc3RydWN0IGJmYV9wcG9ydF9zICpwb3J0ID0gQkZBX1BPUlRfTU9EKGJmYSk7CisKKwlyZXR1cm4gcG9ydC0+c3BlZWQ7Cit9CisKKy8qKgorICogQ29uZmlndXJlIHBvcnQgdG9wb2xvZ3kuCisgKi8KK2JmYV9zdGF0dXNfdAorYmZhX3Bwb3J0X2NmZ190b3BvbG9neShzdHJ1Y3QgYmZhX3MgKmJmYSwgZW51bSBiZmFfcHBvcnRfdG9wb2xvZ3kgdG9wb2xvZ3kpCit7CisJc3RydWN0IGJmYV9wcG9ydF9zICpwcG9ydCA9IEJGQV9QT1JUX01PRChiZmEpOworCisJYmZhX3RyYyhiZmEsIHRvcG9sb2d5KTsKKwliZmFfdHJjKGJmYSwgcHBvcnQtPmNmZy50b3BvbG9neSk7CisKKwlzd2l0Y2ggKHRvcG9sb2d5KSB7CisJY2FzZSBCRkFfUFBPUlRfVE9QT0xPR1lfUDJQOgorCWNhc2UgQkZBX1BQT1JUX1RPUE9MT0dZX0xPT1A6CisJY2FzZSBCRkFfUFBPUlRfVE9QT0xPR1lfQVVUTzoKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gQkZBX1NUQVRVU19FSU5WQUw7CisJfQorCisJcHBvcnQtPmNmZy50b3BvbG9neSA9IHRvcG9sb2d5OworCXJldHVybiAoQkZBX1NUQVRVU19PSyk7Cit9CisKKy8qKgorICogR2V0IGN1cnJlbnQgdG9wb2xvZ3kuCisgKi8KK2VudW0gYmZhX3Bwb3J0X3RvcG9sb2d5CitiZmFfcHBvcnRfZ2V0X3RvcG9sb2d5KHN0cnVjdCBiZmFfcyAqYmZhKQoreworCXN0cnVjdCBiZmFfcHBvcnRfcyAqcG9ydCA9IEJGQV9QT1JUX01PRChiZmEpOworCisJcmV0dXJuIHBvcnQtPnRvcG9sb2d5OworfQorCitiZmFfc3RhdHVzX3QKK2JmYV9wcG9ydF9jZmdfaGFyZGFscGEoc3RydWN0IGJmYV9zICpiZmEsIHU4IGFscGEpCit7CisJc3RydWN0IGJmYV9wcG9ydF9zICpwcG9ydCA9IEJGQV9QT1JUX01PRChiZmEpOworCisJYmZhX3RyYyhiZmEsIGFscGEpOworCWJmYV90cmMoYmZhLCBwcG9ydC0+Y2ZnLmNmZ19oYXJkYWxwYSk7CisJYmZhX3RyYyhiZmEsIHBwb3J0LT5jZmcuaGFyZGFscGEpOworCisJcHBvcnQtPmNmZy5jZmdfaGFyZGFscGEgPSBCRkFfVFJVRTsKKwlwcG9ydC0+Y2ZnLmhhcmRhbHBhID0gYWxwYTsKKworCXJldHVybiAoQkZBX1NUQVRVU19PSyk7Cit9CisKK2JmYV9zdGF0dXNfdAorYmZhX3Bwb3J0X2Nscl9oYXJkYWxwYShzdHJ1Y3QgYmZhX3MgKmJmYSkKK3sKKwlzdHJ1Y3QgYmZhX3Bwb3J0X3MgKnBwb3J0ID0gQkZBX1BPUlRfTU9EKGJmYSk7CisKKwliZmFfdHJjKGJmYSwgcHBvcnQtPmNmZy5jZmdfaGFyZGFscGEpOworCWJmYV90cmMoYmZhLCBwcG9ydC0+Y2ZnLmhhcmRhbHBhKTsKKworCXBwb3J0LT5jZmcuY2ZnX2hhcmRhbHBhID0gQkZBX0ZBTFNFOworCXJldHVybiAoQkZBX1NUQVRVU19PSyk7Cit9CisKK2JmYV9ib29sZWFuX3QKK2JmYV9wcG9ydF9nZXRfaGFyZGFscGEoc3RydWN0IGJmYV9zICpiZmEsIHU4ICphbHBhKQoreworCXN0cnVjdCBiZmFfcHBvcnRfcyAqcG9ydCA9IEJGQV9QT1JUX01PRChiZmEpOworCisJKmFscGEgPSBwb3J0LT5jZmcuaGFyZGFscGE7CisJcmV0dXJuIHBvcnQtPmNmZy5jZmdfaGFyZGFscGE7Cit9CisKK3U4CitiZmFfcHBvcnRfZ2V0X215YWxwYShzdHJ1Y3QgYmZhX3MgKmJmYSkKK3sKKwlzdHJ1Y3QgYmZhX3Bwb3J0X3MgKnBvcnQgPSBCRkFfUE9SVF9NT0QoYmZhKTsKKworCXJldHVybiBwb3J0LT5teWFscGE7Cit9CisKK2JmYV9zdGF0dXNfdAorYmZhX3Bwb3J0X2NmZ19tYXhmcnNpemUoc3RydWN0IGJmYV9zICpiZmEsIHUxNiBtYXhmcnNpemUpCit7CisJc3RydWN0IGJmYV9wcG9ydF9zICpwcG9ydCA9IEJGQV9QT1JUX01PRChiZmEpOworCisJYmZhX3RyYyhiZmEsIG1heGZyc2l6ZSk7CisJYmZhX3RyYyhiZmEsIHBwb3J0LT5jZmcubWF4ZnJzaXplKTsKKworCS8qCisJICogd2l0aCBpbiByYW5nZQorCSAqLworCWlmICgobWF4ZnJzaXplID4gRkNfTUFYX1BEVVNaKSB8fCAobWF4ZnJzaXplIDwgRkNfTUlOX1BEVVNaKSkKKwkJcmV0dXJuIChCRkFfU1RBVFVTX0lOVkxEX0RGU1opOworCisJLyoKKwkgKiBwb3dlciBvZiAyLCBpZiBub3QgdGhlIG1heCBmcmFtZSBzaXplIG9mIDIxMTIKKwkgKi8KKwlpZiAoKG1heGZyc2l6ZSAhPSBGQ19NQVhfUERVU1opICYmIChtYXhmcnNpemUgJiAobWF4ZnJzaXplIC0gMSkpKQorCQlyZXR1cm4gKEJGQV9TVEFUVVNfSU5WTERfREZTWik7CisKKwlwcG9ydC0+Y2ZnLm1heGZyc2l6ZSA9IG1heGZyc2l6ZTsKKwlyZXR1cm4gKEJGQV9TVEFUVVNfT0spOworfQorCit1MTYKK2JmYV9wcG9ydF9nZXRfbWF4ZnJzaXplKHN0cnVjdCBiZmFfcyAqYmZhKQoreworCXN0cnVjdCBiZmFfcHBvcnRfcyAqcG9ydCA9IEJGQV9QT1JUX01PRChiZmEpOworCisJcmV0dXJuIHBvcnQtPmNmZy5tYXhmcnNpemU7Cit9CisKK3UzMgorYmZhX3Bwb3J0X215cGlkKHN0cnVjdCBiZmFfcyAqYmZhKQoreworCXN0cnVjdCBiZmFfcHBvcnRfcyAqcG9ydCA9IEJGQV9QT1JUX01PRChiZmEpOworCisJcmV0dXJuIHBvcnQtPm15cGlkOworfQorCit1OAorYmZhX3Bwb3J0X2dldF9yeF9iYmNyZWRpdChzdHJ1Y3QgYmZhX3MgKmJmYSkKK3sKKwlzdHJ1Y3QgYmZhX3Bwb3J0X3MgKnBvcnQgPSBCRkFfUE9SVF9NT0QoYmZhKTsKKworCXJldHVybiBwb3J0LT5jZmcucnhfYmJjcmVkaXQ7Cit9CisKK3ZvaWQKK2JmYV9wcG9ydF9zZXRfdHhfYmJjcmVkaXQoc3RydWN0IGJmYV9zICpiZmEsIHUxNiB0eF9iYmNyZWRpdCkKK3sKKwlzdHJ1Y3QgYmZhX3Bwb3J0X3MgKnBvcnQgPSBCRkFfUE9SVF9NT0QoYmZhKTsKKworCXBvcnQtPmNmZy50eF9iYmNyZWRpdCA9ICh1OCkgdHhfYmJjcmVkaXQ7CisJYmZhX3BvcnRfc2VuZF90eGNyZWRpdChwb3J0KTsKK30KKworLyoqCisgKiBHZXQgcG9ydCBhdHRyaWJ1dGVzLgorICovCisKK3d3bl90CitiZmFfcHBvcnRfZ2V0X3d3bihzdHJ1Y3QgYmZhX3MgKmJmYSwgYmZhX2Jvb2xlYW5fdCBub2RlKQoreworCXN0cnVjdCBiZmFfcHBvcnRfcyAqcHBvcnQgPSBCRkFfUE9SVF9NT0QoYmZhKTsKKwlpZiAobm9kZSkKKwkJcmV0dXJuIHBwb3J0LT5ud3duOworCWVsc2UKKwkJcmV0dXJuIHBwb3J0LT5wd3duOworfQorCit2b2lkCitiZmFfcHBvcnRfZ2V0X2F0dHIoc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBiZmFfcHBvcnRfYXR0cl9zICphdHRyKQoreworCXN0cnVjdCBiZmFfcHBvcnRfcyAqcHBvcnQgPSBCRkFfUE9SVF9NT0QoYmZhKTsKKworCWJmYV9vc19tZW1zZXQoYXR0ciwgMCwgc2l6ZW9mKHN0cnVjdCBiZmFfcHBvcnRfYXR0cl9zKSk7CisKKwlhdHRyLT5ud3duID0gcHBvcnQtPm53d247CisJYXR0ci0+cHd3biA9IHBwb3J0LT5wd3duOworCisJYmZhX29zX21lbWNweSgmYXR0ci0+cHBvcnRfY2ZnLCAmcHBvcnQtPmNmZywKKwkJICAgICAgc2l6ZW9mKHN0cnVjdCBiZmFfcHBvcnRfY2ZnX3MpKTsKKwkvKgorCSAqIHNwZWVkIGF0dHJpYnV0ZXMKKwkgKi8KKwlhdHRyLT5wcG9ydF9jZmcuc3BlZWQgPSBwcG9ydC0+Y2ZnLnNwZWVkOworCWF0dHItPnNwZWVkX3N1cHBvcnRlZCA9IHBwb3J0LT5zcGVlZF9zdXA7CisJYXR0ci0+c3BlZWQgPSBwcG9ydC0+c3BlZWQ7CisJYXR0ci0+Y29zX3N1cHBvcnRlZCA9IEZDX0NMQVNTXzM7CisKKwkvKgorCSAqIHRvcG9sb2d5IGF0dHJpYnV0ZXMKKwkgKi8KKwlhdHRyLT5wcG9ydF9jZmcudG9wb2xvZ3kgPSBwcG9ydC0+Y2ZnLnRvcG9sb2d5OworCWF0dHItPnRvcG9sb2d5ID0gcHBvcnQtPnRvcG9sb2d5OworCisJLyoKKwkgKiBiZWFjb24gYXR0cmlidXRlcworCSAqLworCWF0dHItPmJlYWNvbiA9IHBwb3J0LT5iZWFjb247CisJYXR0ci0+bGlua19lMmVfYmVhY29uID0gcHBvcnQtPmxpbmtfZTJlX2JlYWNvbjsKKwlhdHRyLT5wbG9nX2VuYWJsZWQgPSBiZmFfcGxvZ19nZXRfc2V0dGluZyhwcG9ydC0+YmZhLT5wbG9nKTsKKworCWF0dHItPnBwb3J0X2NmZy5wYXRoX3RvdiA9IGJmYV9mY3BpbV9wYXRoX3Rvdl9nZXQoYmZhKTsKKwlhdHRyLT5wcG9ydF9jZmcucV9kZXB0aCA9IGJmYV9mY3BpbV9xZGVwdGhfZ2V0KGJmYSk7CisJYXR0ci0+cG9ydF9zdGF0ZSA9IGJmYV9zbV90b19zdGF0ZShoYWxfcHBvcnRfc21fdGFibGUsIHBwb3J0LT5zbSk7CisJaWYgKGJmYV9pb2NfaXNfZGlzYWJsZWQoJnBwb3J0LT5iZmEtPmlvYykpCisJCWF0dHItPnBvcnRfc3RhdGUgPSBCRkFfUFBPUlRfU1RfSU9DRElTOworCWVsc2UgaWYgKGJmYV9pb2NfZndfbWlzbWF0Y2goJnBwb3J0LT5iZmEtPmlvYykpCisJCWF0dHItPnBvcnRfc3RhdGUgPSBCRkFfUFBPUlRfU1RfRldNSVNNQVRDSDsKK30KKworc3RhdGljIHZvaWQKK2JmYV9wb3J0X3N0YXRzX3F1ZXJ5KHZvaWQgKmNiYXJnKQoreworCXN0cnVjdCBiZmFfcHBvcnRfcyAqcG9ydCA9IChzdHJ1Y3QgYmZhX3Bwb3J0X3MgKiljYmFyZzsKKwliZmlfcHBvcnRfZ2V0X3N0YXRzX3JlcV90ICptc2c7CisKKwltc2cgPSBiZmFfcmVxcV9uZXh0KHBvcnQtPmJmYSwgQkZBX1JFUVFfUE9SVCk7CisKKwlpZiAoIW1zZykgeworCQlwb3J0LT5zdGF0c19xZnVsbCA9IEJGQV9UUlVFOworCQliZmFfcmVxcV93aW5pdCgmcG9ydC0+c3RhdHNfcmVxcV93YWl0LCBiZmFfcG9ydF9zdGF0c19xdWVyeSwKKwkJCSAgICAgICBwb3J0KTsKKwkJYmZhX3JlcXFfd2FpdChwb3J0LT5iZmEsIEJGQV9SRVFRX1BPUlQsICZwb3J0LT5zdGF0c19yZXFxX3dhaXQpOworCQlyZXR1cm47CisJfQorCXBvcnQtPnN0YXRzX3FmdWxsID0gQkZBX0ZBTFNFOworCisJYmZhX29zX21lbXNldChtc2csIDAsIHNpemVvZihiZmlfcHBvcnRfZ2V0X3N0YXRzX3JlcV90KSk7CisJYmZpX2gyaV9zZXQobXNnLT5taCwgQkZJX01DX0ZDX1BPUlQsIEJGSV9QUE9SVF9IMklfR0VUX1NUQVRTX1JFUSwKKwkJICAgIGJmYV9scHVpZChwb3J0LT5iZmEpKTsKKwliZmFfcmVxcV9wcm9kdWNlKHBvcnQtPmJmYSwgQkZBX1JFUVFfUE9SVCk7CisKKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfcG9ydF9zdGF0c19jbGVhcih2b2lkICpjYmFyZykKK3sKKwlzdHJ1Y3QgYmZhX3Bwb3J0X3MgKnBvcnQgPSAoc3RydWN0IGJmYV9wcG9ydF9zICopY2Jhcmc7CisJYmZpX3Bwb3J0X2NsZWFyX3N0YXRzX3JlcV90ICptc2c7CisKKwltc2cgPSBiZmFfcmVxcV9uZXh0KHBvcnQtPmJmYSwgQkZBX1JFUVFfUE9SVCk7CisKKwlpZiAoIW1zZykgeworCQlwb3J0LT5zdGF0c19xZnVsbCA9IEJGQV9UUlVFOworCQliZmFfcmVxcV93aW5pdCgmcG9ydC0+c3RhdHNfcmVxcV93YWl0LCBiZmFfcG9ydF9zdGF0c19jbGVhciwKKwkJCSAgICAgICBwb3J0KTsKKwkJYmZhX3JlcXFfd2FpdChwb3J0LT5iZmEsIEJGQV9SRVFRX1BPUlQsICZwb3J0LT5zdGF0c19yZXFxX3dhaXQpOworCQlyZXR1cm47CisJfQorCXBvcnQtPnN0YXRzX3FmdWxsID0gQkZBX0ZBTFNFOworCisJYmZhX29zX21lbXNldChtc2csIDAsIHNpemVvZihiZmlfcHBvcnRfY2xlYXJfc3RhdHNfcmVxX3QpKTsKKwliZmlfaDJpX3NldChtc2ctPm1oLCBCRklfTUNfRkNfUE9SVCwgQkZJX1BQT1JUX0gySV9DTEVBUl9TVEFUU19SRVEsCisJCSAgICBiZmFfbHB1aWQocG9ydC0+YmZhKSk7CisJYmZhX3JlcXFfcHJvZHVjZShwb3J0LT5iZmEsIEJGQV9SRVFRX1BPUlQpOworCXJldHVybjsKK30KKworc3RhdGljIHZvaWQKK2JmYV9wb3J0X3Fvc19zdGF0c19jbGVhcih2b2lkICpjYmFyZykKK3sKKwlzdHJ1Y3QgYmZhX3Bwb3J0X3MgKnBvcnQgPSAoc3RydWN0IGJmYV9wcG9ydF9zICopY2Jhcmc7CisJYmZpX3Bwb3J0X2NsZWFyX3Fvc19zdGF0c19yZXFfdCAqbXNnOworCisJbXNnID0gYmZhX3JlcXFfbmV4dChwb3J0LT5iZmEsIEJGQV9SRVFRX1BPUlQpOworCisJaWYgKCFtc2cpIHsKKwkJcG9ydC0+c3RhdHNfcWZ1bGwgPSBCRkFfVFJVRTsKKwkJYmZhX3JlcXFfd2luaXQoJnBvcnQtPnN0YXRzX3JlcXFfd2FpdCwgYmZhX3BvcnRfcW9zX3N0YXRzX2NsZWFyLAorCQkJICAgICAgIHBvcnQpOworCQliZmFfcmVxcV93YWl0KHBvcnQtPmJmYSwgQkZBX1JFUVFfUE9SVCwgJnBvcnQtPnN0YXRzX3JlcXFfd2FpdCk7CisJCXJldHVybjsKKwl9CisJcG9ydC0+c3RhdHNfcWZ1bGwgPSBCRkFfRkFMU0U7CisKKwliZmFfb3NfbWVtc2V0KG1zZywgMCwgc2l6ZW9mKGJmaV9wcG9ydF9jbGVhcl9xb3Nfc3RhdHNfcmVxX3QpKTsKKwliZmlfaDJpX3NldChtc2ctPm1oLCBCRklfTUNfRkNfUE9SVCwgQkZJX1BQT1JUX0gySV9DTEVBUl9RT1NfU1RBVFNfUkVRLAorCQkgICAgYmZhX2xwdWlkKHBvcnQtPmJmYSkpOworCWJmYV9yZXFxX3Byb2R1Y2UocG9ydC0+YmZhLCBCRkFfUkVRUV9QT1JUKTsKKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfcHBvcnRfc3RhdHNfc3dhcCh1bmlvbiBiZmFfcHBvcnRfc3RhdHNfdSAqZCwgdW5pb24gYmZhX3Bwb3J0X3N0YXRzX3UgKnMpCit7CisJdTMyICAgICAgICpkaXAgPSAodTMyICopIGQ7CisJdTMyICAgICAgICpzaXAgPSAodTMyICopIHM7CisJaW50ICAgICAgICAgICAgIGk7CisKKwkvKgorCSAqIERvIDY0IGJpdCBmaWVsZHMgc3dhcCBmaXJzdAorCSAqLworCWZvciAoaSA9IDA7CisJICAgICBpIDwKKwkgICAgICgoc2l6ZW9mKHVuaW9uIGJmYV9wcG9ydF9zdGF0c191KSAtCisJICAgICAgIHNpemVvZihzdHJ1Y3QgYmZhX3Fvc19zdGF0c19zKSkgLyBzaXplb2YodTMyKSk7IGkgPSBpICsgMikgeworI2lmZGVmIF9fQklHRU5ESUFOCisJCWRpcFtpXSA9IGJmYV9vc19udG9obChzaXBbaV0pOworCQlkaXBbaSArIDFdID0gYmZhX29zX250b2hsKHNpcFtpICsgMV0pOworI2Vsc2UKKwkJZGlwW2ldID0gYmZhX29zX250b2hsKHNpcFtpICsgMV0pOworCQlkaXBbaSArIDFdID0gYmZhX29zX250b2hsKHNpcFtpXSk7CisjZW5kaWYKKwl9CisKKwkvKgorCSAqIE5vdyBzd2FwIHRoZSAzMiBiaXQgZmllbGRzCisJICovCisJZm9yICg7IGkgPCAoc2l6ZW9mKHVuaW9uIGJmYV9wcG9ydF9zdGF0c191KSAvIHNpemVvZih1MzIpKTsgKytpKQorCQlkaXBbaV0gPSBiZmFfb3NfbnRvaGwoc2lwW2ldKTsKK30KKworc3RhdGljIHZvaWQKK19fYmZhX2NiX3BvcnRfc3RhdHNfY2xyKHZvaWQgKmNiYXJnLCBiZmFfYm9vbGVhbl90IGNvbXBsZXRlKQoreworCXN0cnVjdCBiZmFfcHBvcnRfcyAqcG9ydCA9IGNiYXJnOworCisJaWYgKGNvbXBsZXRlKSB7CisJCXBvcnQtPnN0YXRzX2NiZm4ocG9ydC0+c3RhdHNfY2JhcmcsIHBvcnQtPnN0YXRzX3N0YXR1cyk7CisJfSBlbHNlIHsKKwkJcG9ydC0+c3RhdHNfYnVzeSA9IEJGQV9GQUxTRTsKKwkJcG9ydC0+c3RhdHNfc3RhdHVzID0gQkZBX1NUQVRVU19PSzsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfcG9ydF9zdGF0c19jbHJfdGltZW91dCh2b2lkICpjYmFyZykKK3sKKwlzdHJ1Y3QgYmZhX3Bwb3J0X3MgKnBvcnQgPSAoc3RydWN0IGJmYV9wcG9ydF9zICopY2Jhcmc7CisKKwliZmFfdHJjKHBvcnQtPmJmYSwgcG9ydC0+c3RhdHNfcWZ1bGwpOworCisJaWYgKHBvcnQtPnN0YXRzX3FmdWxsKSB7CisJCWJmYV9yZXFxX3djYW5jZWwoJnBvcnQtPnN0YXRzX3JlcXFfd2FpdCk7CisJCXBvcnQtPnN0YXRzX3FmdWxsID0gQkZBX0ZBTFNFOworCX0KKworCXBvcnQtPnN0YXRzX3N0YXR1cyA9IEJGQV9TVEFUVVNfRVRJTUVSOworCWJmYV9jYl9xdWV1ZShwb3J0LT5iZmEsICZwb3J0LT5oY2JfcWUsIF9fYmZhX2NiX3BvcnRfc3RhdHNfY2xyLCBwb3J0KTsKK30KKworc3RhdGljIHZvaWQKK19fYmZhX2NiX3BvcnRfc3RhdHModm9pZCAqY2JhcmcsIGJmYV9ib29sZWFuX3QgY29tcGxldGUpCit7CisJc3RydWN0IGJmYV9wcG9ydF9zICpwb3J0ID0gY2Jhcmc7CisKKwlpZiAoY29tcGxldGUpIHsKKwkJaWYgKHBvcnQtPnN0YXRzX3N0YXR1cyA9PSBCRkFfU1RBVFVTX09LKQorCQkJYmZhX3Bwb3J0X3N0YXRzX3N3YXAocG9ydC0+c3RhdHNfcmV0LCBwb3J0LT5zdGF0cyk7CisJCXBvcnQtPnN0YXRzX2NiZm4ocG9ydC0+c3RhdHNfY2JhcmcsIHBvcnQtPnN0YXRzX3N0YXR1cyk7CisJfSBlbHNlIHsKKwkJcG9ydC0+c3RhdHNfYnVzeSA9IEJGQV9GQUxTRTsKKwkJcG9ydC0+c3RhdHNfc3RhdHVzID0gQkZBX1NUQVRVU19PSzsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfcG9ydF9zdGF0c190aW1lb3V0KHZvaWQgKmNiYXJnKQoreworCXN0cnVjdCBiZmFfcHBvcnRfcyAqcG9ydCA9IChzdHJ1Y3QgYmZhX3Bwb3J0X3MgKiljYmFyZzsKKworCWJmYV90cmMocG9ydC0+YmZhLCBwb3J0LT5zdGF0c19xZnVsbCk7CisKKwlpZiAocG9ydC0+c3RhdHNfcWZ1bGwpIHsKKwkJYmZhX3JlcXFfd2NhbmNlbCgmcG9ydC0+c3RhdHNfcmVxcV93YWl0KTsKKwkJcG9ydC0+c3RhdHNfcWZ1bGwgPSBCRkFfRkFMU0U7CisJfQorCisJcG9ydC0+c3RhdHNfc3RhdHVzID0gQkZBX1NUQVRVU19FVElNRVI7CisJYmZhX2NiX3F1ZXVlKHBvcnQtPmJmYSwgJnBvcnQtPmhjYl9xZSwgX19iZmFfY2JfcG9ydF9zdGF0cywgcG9ydCk7Cit9CisKKyNkZWZpbmUgQkZBX1BPUlRfU1RBVFNfVE9WCTEwMDAKKworLyoqCisgKiBGZXRjaCBwb3J0IGF0dHJpYnV0ZXMuCisgKi8KK2JmYV9zdGF0dXNfdAorYmZhX3Bwb3J0X2dldF9zdGF0cyhzdHJ1Y3QgYmZhX3MgKmJmYSwgdW5pb24gYmZhX3Bwb3J0X3N0YXRzX3UgKnN0YXRzLAorCQkgICAgYmZhX2NiX3Bwb3J0X3QgY2Jmbiwgdm9pZCAqY2JhcmcpCit7CisJc3RydWN0IGJmYV9wcG9ydF9zICpwb3J0ID0gQkZBX1BPUlRfTU9EKGJmYSk7CisKKwlpZiAocG9ydC0+c3RhdHNfYnVzeSkgeworCQliZmFfdHJjKGJmYSwgcG9ydC0+c3RhdHNfYnVzeSk7CisJCXJldHVybiAoQkZBX1NUQVRVU19ERVZCVVNZKTsKKwl9CisKKwlwb3J0LT5zdGF0c19idXN5ID0gQkZBX1RSVUU7CisJcG9ydC0+c3RhdHNfcmV0ID0gc3RhdHM7CisJcG9ydC0+c3RhdHNfY2JmbiA9IGNiZm47CisJcG9ydC0+c3RhdHNfY2JhcmcgPSBjYmFyZzsKKworCWJmYV9wb3J0X3N0YXRzX3F1ZXJ5KHBvcnQpOworCisJYmZhX3RpbWVyX3N0YXJ0KGJmYSwgJnBvcnQtPnRpbWVyLCBiZmFfcG9ydF9zdGF0c190aW1lb3V0LCBwb3J0LAorCQkJQkZBX1BPUlRfU1RBVFNfVE9WKTsKKwlyZXR1cm4gKEJGQV9TVEFUVVNfT0spOworfQorCitiZmFfc3RhdHVzX3QKK2JmYV9wcG9ydF9jbGVhcl9zdGF0cyhzdHJ1Y3QgYmZhX3MgKmJmYSwgYmZhX2NiX3Bwb3J0X3QgY2Jmbiwgdm9pZCAqY2JhcmcpCit7CisJc3RydWN0IGJmYV9wcG9ydF9zICpwb3J0ID0gQkZBX1BPUlRfTU9EKGJmYSk7CisKKwlpZiAocG9ydC0+c3RhdHNfYnVzeSkgeworCQliZmFfdHJjKGJmYSwgcG9ydC0+c3RhdHNfYnVzeSk7CisJCXJldHVybiAoQkZBX1NUQVRVU19ERVZCVVNZKTsKKwl9CisKKwlwb3J0LT5zdGF0c19idXN5ID0gQkZBX1RSVUU7CisJcG9ydC0+c3RhdHNfY2JmbiA9IGNiZm47CisJcG9ydC0+c3RhdHNfY2JhcmcgPSBjYmFyZzsKKworCWJmYV9wb3J0X3N0YXRzX2NsZWFyKHBvcnQpOworCisJYmZhX3RpbWVyX3N0YXJ0KGJmYSwgJnBvcnQtPnRpbWVyLCBiZmFfcG9ydF9zdGF0c19jbHJfdGltZW91dCwgcG9ydCwKKwkJCUJGQV9QT1JUX1NUQVRTX1RPVik7CisJcmV0dXJuIChCRkFfU1RBVFVTX09LKTsKK30KKworYmZhX3N0YXR1c190CitiZmFfcHBvcnRfdHJ1bmtfZW5hYmxlKHN0cnVjdCBiZmFfcyAqYmZhLCB1OCBiaXRtYXApCit7CisJc3RydWN0IGJmYV9wcG9ydF9zICpwcG9ydCA9IEJGQV9QT1JUX01PRChiZmEpOworCisJYmZhX3RyYyhiZmEsIGJpdG1hcCk7CisJYmZhX3RyYyhiZmEsIHBwb3J0LT5jZmcudHJ1bmtlZCk7CisJYmZhX3RyYyhiZmEsIHBwb3J0LT5jZmcudHJ1bmtfcG9ydHMpOworCisJaWYgKCFiaXRtYXAgfHwgKGJpdG1hcCAmIChiaXRtYXAgLSAxKSkpCisJCXJldHVybiBCRkFfU1RBVFVTX0VJTlZBTDsKKworCXBwb3J0LT5jZmcudHJ1bmtlZCA9IEJGQV9UUlVFOworCXBwb3J0LT5jZmcudHJ1bmtfcG9ydHMgPSBiaXRtYXA7CisKKwlyZXR1cm4gQkZBX1NUQVRVU19PSzsKK30KKwordm9pZAorYmZhX3Bwb3J0X3Fvc19nZXRfYXR0cihzdHJ1Y3QgYmZhX3MgKmJmYSwgc3RydWN0IGJmYV9xb3NfYXR0cl9zICpxb3NfYXR0cikKK3sKKwlzdHJ1Y3QgYmZhX3Bwb3J0X3MgKnBwb3J0ID0gQkZBX1BPUlRfTU9EKGJmYSk7CisKKwlxb3NfYXR0ci0+c3RhdGUgPSBiZmFfb3NfbnRvaGwocHBvcnQtPnFvc19hdHRyLnN0YXRlKTsKKwlxb3NfYXR0ci0+dG90YWxfYmJfY3IgPSBiZmFfb3NfbnRvaGwocHBvcnQtPnFvc19hdHRyLnRvdGFsX2JiX2NyKTsKK30KKwordm9pZAorYmZhX3Bwb3J0X3Fvc19nZXRfdmNfYXR0cihzdHJ1Y3QgYmZhX3MgKmJmYSwKKwkJCSAgc3RydWN0IGJmYV9xb3NfdmNfYXR0cl9zICpxb3NfdmNfYXR0cikKK3sKKwlzdHJ1Y3QgYmZhX3Bwb3J0X3MgKnBwb3J0ID0gQkZBX1BPUlRfTU9EKGJmYSk7CisJc3RydWN0IGJmYV9xb3NfdmNfYXR0cl9zICpiZmFfdmNfYXR0ciA9ICZwcG9ydC0+cW9zX3ZjX2F0dHI7CisJdTMyICAgICAgICBpID0gMDsKKworCXFvc192Y19hdHRyLT50b3RhbF92Y19jb3VudCA9IGJmYV9vc19udG9ocyhiZmFfdmNfYXR0ci0+dG90YWxfdmNfY291bnQpOworCXFvc192Y19hdHRyLT5zaGFyZWRfY3JlZGl0ID0gYmZhX29zX250b2hzKGJmYV92Y19hdHRyLT5zaGFyZWRfY3JlZGl0KTsKKwlxb3NfdmNfYXR0ci0+ZWxwX29wbW9kZV9mbGFncyA9CisJCWJmYV9vc19udG9obChiZmFfdmNfYXR0ci0+ZWxwX29wbW9kZV9mbGFncyk7CisKKwkvKgorCSAqIEluZGl2aWR1YWwgVkMgaW5mbworCSAqLworCXdoaWxlIChpIDwgcW9zX3ZjX2F0dHItPnRvdGFsX3ZjX2NvdW50KSB7CisJCXFvc192Y19hdHRyLT52Y19pbmZvW2ldLnZjX2NyZWRpdCA9CisJCQliZmFfdmNfYXR0ci0+dmNfaW5mb1tpXS52Y19jcmVkaXQ7CisJCXFvc192Y19hdHRyLT52Y19pbmZvW2ldLmJvcnJvd19jcmVkaXQgPQorCQkJYmZhX3ZjX2F0dHItPnZjX2luZm9baV0uYm9ycm93X2NyZWRpdDsKKwkJcW9zX3ZjX2F0dHItPnZjX2luZm9baV0ucHJpb3JpdHkgPQorCQkJYmZhX3ZjX2F0dHItPnZjX2luZm9baV0ucHJpb3JpdHk7CisJCSsraTsKKwl9Cit9CisKKy8qKgorICogRmV0Y2ggUW9TIFN0YXRzLgorICovCitiZmFfc3RhdHVzX3QKK2JmYV9wcG9ydF9nZXRfcW9zX3N0YXRzKHN0cnVjdCBiZmFfcyAqYmZhLCB1bmlvbiBiZmFfcHBvcnRfc3RhdHNfdSAqc3RhdHMsCisJCQliZmFfY2JfcHBvcnRfdCBjYmZuLCB2b2lkICpjYmFyZykKK3sKKwkvKgorCSAqIFFvUyBzdGF0cyBpcyBlbWJlZGRlZCBpbiBwb3J0IHN0YXRzCisJICovCisJcmV0dXJuIChiZmFfcHBvcnRfZ2V0X3N0YXRzKGJmYSwgc3RhdHMsIGNiZm4sIGNiYXJnKSk7Cit9CisKK2JmYV9zdGF0dXNfdAorYmZhX3Bwb3J0X2NsZWFyX3Fvc19zdGF0cyhzdHJ1Y3QgYmZhX3MgKmJmYSwgYmZhX2NiX3Bwb3J0X3QgY2Jmbiwgdm9pZCAqY2JhcmcpCit7CisJc3RydWN0IGJmYV9wcG9ydF9zICpwb3J0ID0gQkZBX1BPUlRfTU9EKGJmYSk7CisKKwlpZiAocG9ydC0+c3RhdHNfYnVzeSkgeworCQliZmFfdHJjKGJmYSwgcG9ydC0+c3RhdHNfYnVzeSk7CisJCXJldHVybiAoQkZBX1NUQVRVU19ERVZCVVNZKTsKKwl9CisKKwlwb3J0LT5zdGF0c19idXN5ID0gQkZBX1RSVUU7CisJcG9ydC0+c3RhdHNfY2JmbiA9IGNiZm47CisJcG9ydC0+c3RhdHNfY2JhcmcgPSBjYmFyZzsKKworCWJmYV9wb3J0X3Fvc19zdGF0c19jbGVhcihwb3J0KTsKKworCWJmYV90aW1lcl9zdGFydChiZmEsICZwb3J0LT50aW1lciwgYmZhX3BvcnRfc3RhdHNfY2xyX3RpbWVvdXQsIHBvcnQsCisJCQlCRkFfUE9SVF9TVEFUU19UT1YpOworCXJldHVybiAoQkZBX1NUQVRVU19PSyk7Cit9CisKKy8qKgorICogRmV0Y2ggcG9ydCBhdHRyaWJ1dGVzLgorICovCitiZmFfc3RhdHVzX3QKK2JmYV9wcG9ydF90cnVua19kaXNhYmxlKHN0cnVjdCBiZmFfcyAqYmZhKQoreworCXJldHVybiAoQkZBX1NUQVRVU19PSyk7Cit9CisKK2JmYV9ib29sZWFuX3QKK2JmYV9wcG9ydF90cnVua19xdWVyeShzdHJ1Y3QgYmZhX3MgKmJmYSwgdTMyICpiaXRtYXApCit7CisJc3RydWN0IGJmYV9wcG9ydF9zICpwb3J0ID0gQkZBX1BPUlRfTU9EKGJmYSk7CisKKwkqYml0bWFwID0gcG9ydC0+Y2ZnLnRydW5rX3BvcnRzOworCXJldHVybiBwb3J0LT5jZmcudHJ1bmtlZDsKK30KKworYmZhX2Jvb2xlYW5fdAorYmZhX3Bwb3J0X2lzX2Rpc2FibGVkKHN0cnVjdCBiZmFfcyAqYmZhKQoreworCXN0cnVjdCBiZmFfcHBvcnRfcyAqcG9ydCA9IEJGQV9QT1JUX01PRChiZmEpOworCisJcmV0dXJuIChiZmFfc21fdG9fc3RhdGUoaGFsX3Bwb3J0X3NtX3RhYmxlLCBwb3J0LT5zbSkgPT0KKwkJQkZBX1BQT1JUX1NUX0RJU0FCTEVEKTsKKworfQorCitiZmFfYm9vbGVhbl90CitiZmFfcHBvcnRfaXNfcmF0ZWxpbShzdHJ1Y3QgYmZhX3MgKmJmYSkKK3sKKwlzdHJ1Y3QgYmZhX3Bwb3J0X3MgKnBwb3J0ID0gQkZBX1BPUlRfTU9EKGJmYSk7CisKK3JldHVybiAocHBvcnQtPmNmZy5yYXRlbGltaXQgPyBCRkFfVFJVRSA6IEJGQV9GQUxTRSk7CisKK30KKwordm9pZAorYmZhX3Bwb3J0X2NmZ19xb3Moc3RydWN0IGJmYV9zICpiZmEsIGJmYV9ib29sZWFuX3Qgb25fb2ZmKQoreworCXN0cnVjdCBiZmFfcHBvcnRfcyAqcHBvcnQgPSBCRkFfUE9SVF9NT0QoYmZhKTsKKworCWJmYV90cmMoYmZhLCBvbl9vZmYpOworCWJmYV90cmMoYmZhLCBwcG9ydC0+Y2ZnLnFvc19lbmFibGVkKTsKKworCXBwb3J0LT5jZmcucW9zX2VuYWJsZWQgPSBvbl9vZmY7Cit9CisKK3ZvaWQKK2JmYV9wcG9ydF9jZmdfcmF0ZWxpbShzdHJ1Y3QgYmZhX3MgKmJmYSwgYmZhX2Jvb2xlYW5fdCBvbl9vZmYpCit7CisJc3RydWN0IGJmYV9wcG9ydF9zICpwcG9ydCA9IEJGQV9QT1JUX01PRChiZmEpOworCisJYmZhX3RyYyhiZmEsIG9uX29mZik7CisJYmZhX3RyYyhiZmEsIHBwb3J0LT5jZmcucmF0ZWxpbWl0KTsKKworCXBwb3J0LT5jZmcucmF0ZWxpbWl0ID0gb25fb2ZmOworCWlmIChwcG9ydC0+Y2ZnLnRybF9kZWZfc3BlZWQgPT0gQkZBX1BQT1JUX1NQRUVEX1VOS05PV04pCisJCXBwb3J0LT5jZmcudHJsX2RlZl9zcGVlZCA9IEJGQV9QUE9SVF9TUEVFRF8xR0JQUzsKK30KKworLyoqCisgKiBDb25maWd1cmUgZGVmYXVsdCBtaW5pbXVtIHJhdGVsaW0gc3BlZWQKKyAqLworYmZhX3N0YXR1c190CitiZmFfcHBvcnRfY2ZnX3JhdGVsaW1fc3BlZWQoc3RydWN0IGJmYV9zICpiZmEsIGVudW0gYmZhX3Bwb3J0X3NwZWVkIHNwZWVkKQoreworCXN0cnVjdCBiZmFfcHBvcnRfcyAqcHBvcnQgPSBCRkFfUE9SVF9NT0QoYmZhKTsKKworCWJmYV90cmMoYmZhLCBzcGVlZCk7CisKKwkvKgorCSAqIEF1dG8gYW5kIHNwZWVkcyBncmVhdGVyIHRoYW4gdGhlIHN1cHBvcnRlZCBzcGVlZCwgYXJlIGludmFsaWQKKwkgKi8KKwlpZiAoKHNwZWVkID09IEJGQV9QUE9SVF9TUEVFRF9BVVRPKSB8fCAoc3BlZWQgPiBwcG9ydC0+c3BlZWRfc3VwKSkgeworCQliZmFfdHJjKGJmYSwgcHBvcnQtPnNwZWVkX3N1cCk7CisJCXJldHVybiBCRkFfU1RBVFVTX1VOU1VQUF9TUEVFRDsKKwl9CisKKwlwcG9ydC0+Y2ZnLnRybF9kZWZfc3BlZWQgPSBzcGVlZDsKKworCXJldHVybiAoQkZBX1NUQVRVU19PSyk7Cit9CisKKy8qKgorICogR2V0IGRlZmF1bHQgbWluaW11bSByYXRlbGltIHNwZWVkCisgKi8KK2VudW0gYmZhX3Bwb3J0X3NwZWVkCitiZmFfcHBvcnRfZ2V0X3JhdGVsaW1fc3BlZWQoc3RydWN0IGJmYV9zICpiZmEpCit7CisJc3RydWN0IGJmYV9wcG9ydF9zICpwcG9ydCA9IEJGQV9QT1JUX01PRChiZmEpOworCisJYmZhX3RyYyhiZmEsIHBwb3J0LT5jZmcudHJsX2RlZl9zcGVlZCk7CisJcmV0dXJuIChwcG9ydC0+Y2ZnLnRybF9kZWZfc3BlZWQpOworCit9CisKK3ZvaWQKK2JmYV9wcG9ydF9idXN5KHN0cnVjdCBiZmFfcyAqYmZhLCBiZmFfYm9vbGVhbl90IHN0YXR1cykKK3sKKwlzdHJ1Y3QgYmZhX3Bwb3J0X3MgKnBwb3J0ID0gQkZBX1BPUlRfTU9EKGJmYSk7CisKKwliZmFfdHJjKGJmYSwgc3RhdHVzKTsKKwliZmFfdHJjKGJmYSwgcHBvcnQtPmRpYWdfYnVzeSk7CisKKwlwcG9ydC0+ZGlhZ19idXN5ID0gc3RhdHVzOworfQorCit2b2lkCitiZmFfcHBvcnRfYmVhY29uKHN0cnVjdCBiZmFfcyAqYmZhLCBiZmFfYm9vbGVhbl90IGJlYWNvbiwKKwkJIGJmYV9ib29sZWFuX3QgbGlua19lMmVfYmVhY29uKQoreworCXN0cnVjdCBiZmFfcHBvcnRfcyAqcHBvcnQgPSBCRkFfUE9SVF9NT0QoYmZhKTsKKworCWJmYV90cmMoYmZhLCBiZWFjb24pOworCWJmYV90cmMoYmZhLCBsaW5rX2UyZV9iZWFjb24pOworCWJmYV90cmMoYmZhLCBwcG9ydC0+YmVhY29uKTsKKwliZmFfdHJjKGJmYSwgcHBvcnQtPmxpbmtfZTJlX2JlYWNvbik7CisKKwlwcG9ydC0+YmVhY29uID0gYmVhY29uOworCXBwb3J0LT5saW5rX2UyZV9iZWFjb24gPSBsaW5rX2UyZV9iZWFjb247Cit9CisKK2JmYV9ib29sZWFuX3QKK2JmYV9wcG9ydF9pc19saW5rdXAoc3RydWN0IGJmYV9zICpiZmEpCit7CisJcmV0dXJuIGJmYV9zbV9jbXBfc3RhdGUoQkZBX1BPUlRfTU9EKGJmYSksIGJmYV9wcG9ydF9zbV9saW5rdXApOworfQorCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2Zjcy5jIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfZmNzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2NiMzlhMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2Zjcy5jCkBAIC0wLDAgKzEsMTgyIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKy8qKgorICogIGJmYV9mY3MuYyBCRkEgRkNTIG1haW4KKyAqLworCisjaW5jbHVkZSA8ZmNzL2JmYV9mY3MuaD4KKyNpbmNsdWRlICJmY3NfcG9ydC5oIgorI2luY2x1ZGUgImZjc191Zi5oIgorI2luY2x1ZGUgImZjc192cG9ydC5oIgorI2luY2x1ZGUgImZjc19ycG9ydC5oIgorI2luY2x1ZGUgImZjc19mYWJyaWMuaCIKKyNpbmNsdWRlICJmY3NfZmNwaW0uaCIKKyNpbmNsdWRlICJmY3NfZmNwdG0uaCIKKyNpbmNsdWRlICJmY2J1aWxkLmgiCisjaW5jbHVkZSAiZmNzLmgiCisjaW5jbHVkZSAiYmZhZF9kcnYuaCIKKyNpbmNsdWRlIDxmY2IvYmZhX2ZjYi5oPgorCisvKioKKyAqIEZDUyBzdWItbW9kdWxlcworICovCitzdHJ1Y3QgYmZhX2Zjc19tb2RfcyB7CisJdm9pZCAgICAgICAgICAgICgqbW9kaW5pdCkgKHN0cnVjdCBiZmFfZmNzX3MgKmZjcyk7CisJdm9pZCAgICAgICAgICAgICgqbW9kZXhpdCkgKHN0cnVjdCBiZmFfZmNzX3MgKmZjcyk7Cit9OworCisjZGVmaW5lIEJGQV9GQ1NfTU9EVUxFKF9tb2QpIHsgX21vZCAjIyBfbW9kaW5pdCwgX21vZCAjIyBfbW9kZXhpdCB9CisKK3N0YXRpYyBzdHJ1Y3QgYmZhX2Zjc19tb2RfcyBmY3NfbW9kdWxlc1tdID0geworCUJGQV9GQ1NfTU9EVUxFKGJmYV9mY3NfcHBvcnQpLAorCUJGQV9GQ1NfTU9EVUxFKGJmYV9mY3NfdWYpLAorCUJGQV9GQ1NfTU9EVUxFKGJmYV9mY3NfZmFicmljKSwKKwlCRkFfRkNTX01PRFVMRShiZmFfZmNzX3Zwb3J0KSwKKwlCRkFfRkNTX01PRFVMRShiZmFfZmNzX3Jwb3J0KSwKKwlCRkFfRkNTX01PRFVMRShiZmFfZmNzX2ZjcGltKSwKK307CisKKy8qKgorICogIGZjc19hcGkgQkZBIEZDUyBBUEkKKyAqLworCitzdGF0aWMgdm9pZAorYmZhX2Zjc19leGl0X2NvbXAodm9pZCAqZmNzX2NiYXJnKQoreworCXN0cnVjdCBiZmFfZmNzX3MgKmZjcyA9IGZjc19jYmFyZzsKKwlzdHJ1Y3QgYmZhZF9zICpiZmFkID0gZmNzLT5iZmFkOworCisJY29tcGxldGUoJmJmYWQtPmNvbXApOworfQorCisKKworLyoqCisgKiAgZmNzX2FwaSBCRkEgRkNTIEFQSQorICovCisKKy8qKgorICogCQlGQ1MgaW5zdGFuY2UgaW5pdGlhbGl6YXRpb24uCisgKgorICogCXBhcmFtW2luXQkJZmNzCQlGQ1MgaW5zdGFuY2UKKyAqIAlwYXJhbVtpbl0JCWJmYQkJQkZBIGluc3RhbmNlCisgKiAJcGFyYW1baW5dCQliZmFkCQlCRkEgZHJpdmVyIGluc3RhbmNlCisgKgorICogCXJldHVybiBOb25lCisgKi8KK3ZvaWQKK2JmYV9mY3NfaW5pdChzdHJ1Y3QgYmZhX2Zjc19zICpmY3MsIHN0cnVjdCBiZmFfcyAqYmZhLCBzdHJ1Y3QgYmZhZF9zICpiZmFkLAorCQkJYmZhX2Jvb2xlYW5fdCBtaW5fY2ZnKQoreworCWludCAgICAgICAgICAgICBpOworCXN0cnVjdCBiZmFfZmNzX21vZF9zICAqbW9kOworCisJZmNzLT5iZmEgPSBiZmE7CisJZmNzLT5iZmFkID0gYmZhZDsKKwlmY3MtPm1pbl9jZmcgPSBtaW5fY2ZnOworCisJYmZhX2F0dGFjaF9mY3MoYmZhKTsKKwlmY2J1aWxkX2luaXQoKTsKKworCWZvciAoaSA9IDA7IGkgPCBzaXplb2YoZmNzX21vZHVsZXMpIC8gc2l6ZW9mKGZjc19tb2R1bGVzWzBdKTsgaSsrKSB7CisJCW1vZCA9ICZmY3NfbW9kdWxlc1tpXTsKKwkJbW9kLT5tb2Rpbml0KGZjcyk7CisJfQorfQorCisvKioKKyAqIFN0YXJ0IEZDUyBvcGVyYXRpb25zLgorICovCit2b2lkCitiZmFfZmNzX3N0YXJ0KHN0cnVjdCBiZmFfZmNzX3MgKmZjcykKK3sKKwliZmFfZmNzX2ZhYnJpY19tb2RzdGFydChmY3MpOworfQorCisvKioKKyAqIAkJRkNTIGRyaXZlciBkZXRhaWxzIGluaXRpYWxpemF0aW9uLgorICoKKyAqIAlwYXJhbVtpbl0JCWZjcwkJRkNTIGluc3RhbmNlCisgKiAJcGFyYW1baW5dCQlkcml2ZXJfaW5mbwlEcml2ZXIgRGV0YWlscworICoKKyAqIAlyZXR1cm4gTm9uZQorICovCit2b2lkCitiZmFfZmNzX2RyaXZlcl9pbmZvX2luaXQoc3RydWN0IGJmYV9mY3NfcyAqZmNzLAorCQkJc3RydWN0IGJmYV9mY3NfZHJpdmVyX2luZm9fcyAqZHJpdmVyX2luZm8pCit7CisKKwlmY3MtPmRyaXZlcl9pbmZvID0gKmRyaXZlcl9pbmZvOworCisJYmZhX2Zjc19mYWJyaWNfcHN5bWJfaW5pdCgmZmNzLT5mYWJyaWMpOworfQorCisvKioKKyAqIAkJRkNTIGluc3RhbmNlIGNsZWFudXAgYW5kIGV4aXQuCisgKgorICogCXBhcmFtW2luXQkJZmNzCQkJRkNTIGluc3RhbmNlCisgKiAJcmV0dXJuIE5vbmUKKyAqLwordm9pZAorYmZhX2Zjc19leGl0KHN0cnVjdCBiZmFfZmNzX3MgKmZjcykKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19tb2RfcyAgKm1vZDsKKwlpbnQgICAgICAgICAgICAgbm1vZHMsIGk7CisKKwliZmFfd2NfaW5pdCgmZmNzLT53YywgYmZhX2Zjc19leGl0X2NvbXAsIGZjcyk7CisKKwlubW9kcyA9IHNpemVvZihmY3NfbW9kdWxlcykgLyBzaXplb2YoZmNzX21vZHVsZXNbMF0pOworCisJZm9yIChpID0gMDsgaSA8IG5tb2RzOyBpKyspIHsKKwkJYmZhX3djX3VwKCZmY3MtPndjKTsKKworCQltb2QgPSAmZmNzX21vZHVsZXNbaV07CisJCW1vZC0+bW9kZXhpdChmY3MpOworCX0KKworCWJmYV93Y193YWl0KCZmY3MtPndjKTsKK30KKworCit2b2lkCitiZmFfZmNzX3RyY19pbml0KHN0cnVjdCBiZmFfZmNzX3MgKmZjcywgc3RydWN0IGJmYV90cmNfbW9kX3MgKnRyY21vZCkKK3sKKwlmY3MtPnRyY21vZCA9IHRyY21vZDsKK30KKworCit2b2lkCitiZmFfZmNzX2xvZ19pbml0KHN0cnVjdCBiZmFfZmNzX3MgKmZjcywgc3RydWN0IGJmYV9sb2dfbW9kX3MgKmxvZ21vZCkKK3sKKwlmY3MtPmxvZ20gPSBsb2dtb2Q7Cit9CisKKwordm9pZAorYmZhX2Zjc19hZW5faW5pdChzdHJ1Y3QgYmZhX2Zjc19zICpmY3MsIHN0cnVjdCBiZmFfYWVuX3MgKmFlbikKK3sKKwlmY3MtPmFlbiA9IGFlbjsKK30KKwordm9pZAorYmZhX2Zjc19tb2RleGl0X2NvbXAoc3RydWN0IGJmYV9mY3NfcyAqZmNzKQoreworCWJmYV93Y19kb3duKCZmY3MtPndjKTsKK30KKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2JmYV9mY3NfbHBvcnQuYyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2Zjc19scG9ydC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5NzVlZDAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9mY3NfbHBvcnQuYwpAQCAtMCwwICsxLDk0MCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisvKioKKyAqICBiZmFfZmNzX3BvcnQuYyBCRkEgRkNTIHBvcnQKKyAqLworCisjaW5jbHVkZSA8ZmNzL2JmYV9mY3MuaD4KKyNpbmNsdWRlIDxmY3MvYmZhX2Zjc19scG9ydC5oPgorI2luY2x1ZGUgPGZjcy9iZmFfZmNzX3Jwb3J0Lmg+CisjaW5jbHVkZSA8ZmNiL2JmYV9mY2JfcG9ydC5oPgorI2luY2x1ZGUgPGJmYV9zdmMuaD4KKyNpbmNsdWRlIDxsb2cvYmZhX2xvZ19mY3MuaD4KKyNpbmNsdWRlICJmY3MuaCIKKyNpbmNsdWRlICJmY3NfbHBvcnQuaCIKKyNpbmNsdWRlICJmY3NfdnBvcnQuaCIKKyNpbmNsdWRlICJmY3NfcnBvcnQuaCIKKyNpbmNsdWRlICJmY3NfZmN4cC5oIgorI2luY2x1ZGUgImZjc190cmNtb2QuaCIKKyNpbmNsdWRlICJscG9ydF9wcml2LmgiCisjaW5jbHVkZSA8YWVuL2JmYV9hZW5fbHBvcnQuaD4KKworQkZBX1RSQ19GSUxFKEZDUywgUE9SVCk7CisKKy8qKgorICogRm9yd2FyZCBkZWNsYXJhdGlvbnMKKyAqLworCitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X2Flbl9wb3N0KHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCwKKwkJCQkgICAgICBlbnVtIGJmYV9scG9ydF9hZW5fZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9zZW5kX2xzX3JqdChzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQsCisJCQlzdHJ1Y3QgZmNoc19zICpyeF9mY2hzLCB1OCByZWFzb25fY29kZSwKKwkJCXU4IHJlYXNvbl9jb2RlX2V4cGwpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9wbG9naShzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQsCisJCQlzdHJ1Y3QgZmNoc19zICpyeF9mY2hzLAorCQkJc3RydWN0IGZjX2xvZ2lfcyAqcGxvZ2kpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9vbmxpbmVfYWN0aW9ucyhzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9vZmZsaW5lX2FjdGlvbnMoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3BvcnRfdW5rbm93bl9pbml0KHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X3Vua25vd25fb25saW5lKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X3Vua25vd25fb2ZmbGluZShzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9kZWxldGVkKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X2VjaG8oc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LAorCQkJc3RydWN0IGZjaHNfcyAqcnhfZmNocywKKwkJCXN0cnVjdCBmY19lY2hvX3MgKmVjaG8sIHUxNiBsZW4pOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9ybmlkKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCwKKwkJCXN0cnVjdCBmY2hzX3MgKnJ4X2ZjaHMsCisJCQlzdHJ1Y3QgZmNfcm5pZF9jbWRfcyAqcm5pZCwgdTE2IGxlbik7CitzdGF0aWMgdm9pZCAgICAgYmZhX2ZzX3BvcnRfZ2V0X2dlbl90b3BvX2RhdGEoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LAorCQkJc3RydWN0IGZjX3JuaWRfZ2VuZXJhbF90b3BvbG9neV9kYXRhX3MgKmdlbl90b3BvX2RhdGEpOworCitzdGF0aWMgc3RydWN0IHsKKwl2b2lkICAgICAgICAgICAgKCppbml0KSAoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0KTsKKwl2b2lkICAgICAgICAgICAgKCpvbmxpbmUpIChzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQpOworCXZvaWQgICAgICAgICAgICAoKm9mZmxpbmUpIChzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQpOworfSBfX3BvcnRfYWN0aW9uW10gPSB7CisJeworCWJmYV9mY3NfcG9ydF91bmtub3duX2luaXQsIGJmYV9mY3NfcG9ydF91bmtub3duX29ubGluZSwKKwkJCWJmYV9mY3NfcG9ydF91bmtub3duX29mZmxpbmV9LCB7CisJYmZhX2Zjc19wb3J0X2ZhYl9pbml0LCBiZmFfZmNzX3BvcnRfZmFiX29ubGluZSwKKwkJCWJmYV9mY3NfcG9ydF9mYWJfb2ZmbGluZX0sIHsKKwliZmFfZmNzX3BvcnRfbG9vcF9pbml0LCBiZmFfZmNzX3BvcnRfbG9vcF9vbmxpbmUsCisJCQliZmFfZmNzX3BvcnRfbG9vcF9vZmZsaW5lfSwgeworYmZhX2Zjc19wb3J0X24ybl9pbml0LCBiZmFfZmNzX3BvcnRfbjJuX29ubGluZSwKKwkJCWJmYV9mY3NfcG9ydF9uMm5fb2ZmbGluZX0sfTsKKworLyoqCisgKiAgZmNzX3BvcnRfc20gRkNTIGxvZ2ljYWwgcG9ydCBzdGF0ZSBtYWNoaW5lCisgKi8KKworZW51bSBiZmFfZmNzX3BvcnRfZXZlbnQgeworCUJGQV9GQ1NfUE9SVF9TTV9DUkVBVEUgPSAxLAorCUJGQV9GQ1NfUE9SVF9TTV9PTkxJTkUgPSAyLAorCUJGQV9GQ1NfUE9SVF9TTV9PRkZMSU5FID0gMywKKwlCRkFfRkNTX1BPUlRfU01fREVMRVRFID0gNCwKKwlCRkFfRkNTX1BPUlRfU01fREVMUlBPUlQgPSA1LAorfTsKKworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9zbV91bmluaXQoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LAorCQkJCSAgICAgICBlbnVtIGJmYV9mY3NfcG9ydF9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X3NtX2luaXQoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LAorCQkJCSAgICAgZW51bSBiZmFfZmNzX3BvcnRfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9zbV9vbmxpbmUoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LAorCQkJCSAgICAgICBlbnVtIGJmYV9mY3NfcG9ydF9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X3NtX29mZmxpbmUoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LAorCQkJCQllbnVtIGJmYV9mY3NfcG9ydF9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X3NtX2RlbGV0aW5nKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCwKKwkJCQkJIGVudW0gYmZhX2Zjc19wb3J0X2V2ZW50IGV2ZW50KTsKKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9zbV91bmluaXQoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LAorCQkJZW51bSBiZmFfZmNzX3BvcnRfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhwb3J0LT5mY3MsIHBvcnQtPnBvcnRfY2ZnLnB3d24pOworCWJmYV90cmMocG9ydC0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfRkNTX1BPUlRfU01fQ1JFQVRFOgorCQliZmFfc21fc2V0X3N0YXRlKHBvcnQsIGJmYV9mY3NfcG9ydF9zbV9pbml0KTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9zbV9pbml0KHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCwgZW51bSBiZmFfZmNzX3BvcnRfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhwb3J0LT5mY3MsIHBvcnQtPnBvcnRfY2ZnLnB3d24pOworCWJmYV90cmMocG9ydC0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfRkNTX1BPUlRfU01fT05MSU5FOgorCQliZmFfc21fc2V0X3N0YXRlKHBvcnQsIGJmYV9mY3NfcG9ydF9zbV9vbmxpbmUpOworCQliZmFfZmNzX3BvcnRfb25saW5lX2FjdGlvbnMocG9ydCk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfRkNTX1BPUlRfU01fREVMRVRFOgorCQliZmFfc21fc2V0X3N0YXRlKHBvcnQsIGJmYV9mY3NfcG9ydF9zbV91bmluaXQpOworCQliZmFfZmNzX3BvcnRfZGVsZXRlZChwb3J0KTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9zbV9vbmxpbmUoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LAorCQkJZW51bSBiZmFfZmNzX3BvcnRfZXZlbnQgZXZlbnQpCit7CisJc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQ7CisJc3RydWN0IGxpc3RfaGVhZCAqcWUsICpxZW47CisKKwliZmFfdHJjKHBvcnQtPmZjcywgcG9ydC0+cG9ydF9jZmcucHd3bik7CisJYmZhX3RyYyhwb3J0LT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9GQ1NfUE9SVF9TTV9PRkZMSU5FOgorCQliZmFfc21fc2V0X3N0YXRlKHBvcnQsIGJmYV9mY3NfcG9ydF9zbV9vZmZsaW5lKTsKKwkJYmZhX2Zjc19wb3J0X29mZmxpbmVfYWN0aW9ucyhwb3J0KTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9GQ1NfUE9SVF9TTV9ERUxFVEU6CisKKwkJX19wb3J0X2FjdGlvbltwb3J0LT5mYWJyaWMtPmZhYl90eXBlXS5vZmZsaW5lKHBvcnQpOworCisJCWlmIChwb3J0LT5udW1fcnBvcnRzID09IDApIHsKKwkJCWJmYV9zbV9zZXRfc3RhdGUocG9ydCwgYmZhX2Zjc19wb3J0X3NtX3VuaW5pdCk7CisJCQliZmFfZmNzX3BvcnRfZGVsZXRlZChwb3J0KTsKKwkJfSBlbHNlIHsKKwkJCWJmYV9zbV9zZXRfc3RhdGUocG9ydCwgYmZhX2Zjc19wb3J0X3NtX2RlbGV0aW5nKTsKKwkJCWxpc3RfZm9yX2VhY2hfc2FmZShxZSwgcWVuLCAmcG9ydC0+cnBvcnRfcSkgeworCQkJCXJwb3J0ID0gKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKilxZTsKKwkJCQliZmFfZmNzX3Jwb3J0X2RlbGV0ZShycG9ydCk7CisJCQl9CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIEJGQV9GQ1NfUE9SVF9TTV9ERUxSUE9SVDoKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9zbV9vZmZsaW5lKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCwKKwkJCWVudW0gYmZhX2Zjc19wb3J0X2V2ZW50IGV2ZW50KQoreworCXN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0OworCXN0cnVjdCBsaXN0X2hlYWQgKnFlLCAqcWVuOworCisJYmZhX3RyYyhwb3J0LT5mY3MsIHBvcnQtPnBvcnRfY2ZnLnB3d24pOworCWJmYV90cmMocG9ydC0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfRkNTX1BPUlRfU01fT05MSU5FOgorCQliZmFfc21fc2V0X3N0YXRlKHBvcnQsIGJmYV9mY3NfcG9ydF9zbV9vbmxpbmUpOworCQliZmFfZmNzX3BvcnRfb25saW5lX2FjdGlvbnMocG9ydCk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfRkNTX1BPUlRfU01fREVMRVRFOgorCQlpZiAocG9ydC0+bnVtX3Jwb3J0cyA9PSAwKSB7CisJCQliZmFfc21fc2V0X3N0YXRlKHBvcnQsIGJmYV9mY3NfcG9ydF9zbV91bmluaXQpOworCQkJYmZhX2Zjc19wb3J0X2RlbGV0ZWQocG9ydCk7CisJCX0gZWxzZSB7CisJCQliZmFfc21fc2V0X3N0YXRlKHBvcnQsIGJmYV9mY3NfcG9ydF9zbV9kZWxldGluZyk7CisJCQlsaXN0X2Zvcl9lYWNoX3NhZmUocWUsIHFlbiwgJnBvcnQtPnJwb3J0X3EpIHsKKwkJCQlycG9ydCA9IChzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICopcWU7CisJCQkJYmZhX2Zjc19ycG9ydF9kZWxldGUocnBvcnQpOworCQkJfQorCQl9CisJCWJyZWFrOworCisJY2FzZSBCRkFfRkNTX1BPUlRfU01fREVMUlBPUlQ6CisJY2FzZSBCRkFfRkNTX1BPUlRfU01fT0ZGTElORToKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9zbV9kZWxldGluZyhzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQsCisJCQkgZW51bSBiZmFfZmNzX3BvcnRfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhwb3J0LT5mY3MsIHBvcnQtPnBvcnRfY2ZnLnB3d24pOworCWJmYV90cmMocG9ydC0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfRkNTX1BPUlRfU01fREVMUlBPUlQ6CisJCWlmIChwb3J0LT5udW1fcnBvcnRzID09IDApIHsKKwkJCWJmYV9zbV9zZXRfc3RhdGUocG9ydCwgYmZhX2Zjc19wb3J0X3NtX3VuaW5pdCk7CisJCQliZmFfZmNzX3BvcnRfZGVsZXRlZChwb3J0KTsKKwkJfQorCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisKKworLyoqCisgKiAgZmNzX3BvcnRfcHZ0CisgKi8KKworLyoqCisgKiBTZW5kIEFFTiBub3RpZmljYXRpb24KKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9hZW5fcG9zdChzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQsCisJCSAgICAgIGVudW0gYmZhX2xwb3J0X2Flbl9ldmVudCBldmVudCkKK3sKKwl1bmlvbiBiZmFfYWVuX2RhdGFfdSBhZW5fZGF0YTsKKwlzdHJ1Y3QgYmZhX2xvZ19tb2RfcyAqbG9nbW9kID0gcG9ydC0+ZmNzLT5sb2dtOworCWVudW0gYmZhX3BvcnRfcm9sZSByb2xlID0gcG9ydC0+cG9ydF9jZmcucm9sZXM7CisJd3duX3QgICAgICAgICAgIGxwd3duID0gYmZhX2Zjc19wb3J0X2dldF9wd3duKHBvcnQpOworCWNoYXIgICAgICAgICAgICBscHd3bl9wdHJbQkZBX1NUUklOR18zMl07CisJY2hhciAgICAgICAgICAgKnJvbGVfc3RyW0JGQV9QT1JUX1JPTEVfRkNQX01BWCAvIDIgKyAxXSA9CisJCXsgIkluaXRpYXRvciIsICJUYXJnZXQiLCAiSVBGQyIgfTsKKworCXd3bjJzdHIobHB3d25fcHRyLCBscHd3bik7CisKKwliZmFfYXNzZXJ0KHJvbGUgPD0gQkZBX1BPUlRfUk9MRV9GQ1BfTUFYKTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9MUE9SVF9BRU5fT05MSU5FOgorCQliZmFfbG9nKGxvZ21vZCwgQkZBX0FFTl9MUE9SVF9PTkxJTkUsIGxwd3duX3B0ciwKKwkJCXJvbGVfc3RyW3JvbGUgLyAyXSk7CisJCWJyZWFrOworCWNhc2UgQkZBX0xQT1JUX0FFTl9PRkZMSU5FOgorCQliZmFfbG9nKGxvZ21vZCwgQkZBX0FFTl9MUE9SVF9PRkZMSU5FLCBscHd3bl9wdHIsCisJCQlyb2xlX3N0cltyb2xlIC8gMl0pOworCQlicmVhazsKKwljYXNlIEJGQV9MUE9SVF9BRU5fTkVXOgorCQliZmFfbG9nKGxvZ21vZCwgQkZBX0FFTl9MUE9SVF9ORVcsIGxwd3duX3B0ciwKKwkJCXJvbGVfc3RyW3JvbGUgLyAyXSk7CisJCWJyZWFrOworCWNhc2UgQkZBX0xQT1JUX0FFTl9ERUxFVEU6CisJCWJmYV9sb2cobG9nbW9kLCBCRkFfQUVOX0xQT1JUX0RFTEVURSwgbHB3d25fcHRyLAorCQkJcm9sZV9zdHJbcm9sZSAvIDJdKTsKKwkJYnJlYWs7CisJY2FzZSBCRkFfTFBPUlRfQUVOX0RJU0NPTk5FQ1Q6CisJCWJmYV9sb2cobG9nbW9kLCBCRkFfQUVOX0xQT1JUX0RJU0NPTk5FQ1QsIGxwd3duX3B0ciwKKwkJCXJvbGVfc3RyW3JvbGUgLyAyXSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCWFlbl9kYXRhLmxwb3J0LnZmX2lkID0gcG9ydC0+ZmFicmljLT52Zl9pZDsKKwlhZW5fZGF0YS5scG9ydC5yb2xlcyA9IHJvbGU7CisJYWVuX2RhdGEubHBvcnQucHB3d24gPQorCQliZmFfZmNzX3BvcnRfZ2V0X3B3d24oYmZhX2Zjc19nZXRfYmFzZV9wb3J0KHBvcnQtPmZjcykpOworCWFlbl9kYXRhLmxwb3J0Lmxwd3duID0gbHB3d247Cit9CisKKy8qCisgKiBTZW5kIGEgTFMgcmVqZWN0CisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX3BvcnRfc2VuZF9sc19yanQoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LCBzdHJ1Y3QgZmNoc19zICpyeF9mY2hzLAorCQkJIHU4IHJlYXNvbl9jb2RlLCB1OCByZWFzb25fY29kZV9leHBsKQoreworCXN0cnVjdCBmY2hzX3MgICAgICAgICAgZmNoczsKKwlzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cDsKKwlzdHJ1Y3QgYmZhX3Jwb3J0X3MgKmJmYV9ycG9ydCA9IE5VTEw7CisJaW50ICAgICAgICAgICAgIGxlbjsKKworCWJmYV90cmMocG9ydC0+ZmNzLCByeF9mY2hzLT5zX2lkKTsKKworCWZjeHAgPSBiZmFfZmNzX2ZjeHBfYWxsb2MocG9ydC0+ZmNzKTsKKwlpZiAoIWZjeHApCisJCXJldHVybjsKKworCWxlbiA9IGZjX2xzX3JqdF9idWlsZCgmZmNocywgYmZhX2ZjeHBfZ2V0X3JlcWJ1ZihmY3hwKSwgcnhfZmNocy0+c19pZCwKKwkJCSAgICAgIGJmYV9mY3NfcG9ydF9nZXRfZmNpZChwb3J0KSwgcnhfZmNocy0+b3hfaWQsCisJCQkgICAgICByZWFzb25fY29kZSwgcmVhc29uX2NvZGVfZXhwbCk7CisKKwliZmFfZmN4cF9zZW5kKGZjeHAsIGJmYV9ycG9ydCwgcG9ydC0+ZmFicmljLT52Zl9pZCwgcG9ydC0+bHBfdGFnLAorCQkgICAgICBCRkFfRkFMU0UsIEZDX0NMQVNTXzMsIGxlbiwgJmZjaHMsIE5VTEwsIE5VTEwsCisJCSAgICAgIEZDX01BWF9QRFVTWiwgMCk7Cit9CisKKy8qKgorICogUHJvY2VzcyBpbmNvbWluZyBwbG9naSBmcm9tIGEgcmVtb3RlIHBvcnQuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX3BvcnRfcGxvZ2koc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LCBzdHJ1Y3QgZmNoc19zICpyeF9mY2hzLAorCQkJc3RydWN0IGZjX2xvZ2lfcyAqcGxvZ2kpCit7CisJc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQ7CisKKwliZmFfdHJjKHBvcnQtPmZjcywgcnhfZmNocy0+ZF9pZCk7CisJYmZhX3RyYyhwb3J0LT5mY3MsIHJ4X2ZjaHMtPnNfaWQpOworCisJLyoKKwkgKiBJZiBtaW4gY2ZnIG1vZGUgaXMgZW5hYmxlZCwgZHJvcCBhbnkgaW5jb21pbmcgUExPR0lzCisJICovCisJaWYgKF9fZmNzX21pbl9jZmcocG9ydC0+ZmNzKSkgeworCQliZmFfdHJjKHBvcnQtPmZjcywgcnhfZmNocy0+c19pZCk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoZmNfcGxvZ2lfcGFyc2UocnhfZmNocykgIT0gRkNfUEFSU0VfT0spIHsKKwkJYmZhX3RyYyhwb3J0LT5mY3MsIHJ4X2ZjaHMtPnNfaWQpOworCQkvKgorCQkgKiBzZW5kIGEgTFMgcmVqZWN0CisJCSAqLworCQliZmFfZmNzX3BvcnRfc2VuZF9sc19yanQocG9ydCwgcnhfZmNocywKKwkJCQkJIEZDX0xTX1JKVF9SU05fUFJPVE9DT0xfRVJST1IsCisJCQkJCSBGQ19MU19SSlRfRVhQX1NQQVJNU19FUlJfT1BUSU9OUyk7CisJCXJldHVybjsKKwl9CisKKwkvKioKKyogRGlyZWN0IEF0dGFjaCBQMlAgbW9kZSA6IHZlcmlmeSBhZGRyZXNzIGFzc2lnbmVkIGJ5IHRoZSByLXBvcnQuCisJICovCisJaWYgKCghYmZhX2Zjc19mYWJyaWNfaXNfc3dpdGNoZWQocG9ydC0+ZmFicmljKSkKKwkgICAgJiYKKwkgICAgKG1lbWNtcAorCSAgICAgKCh2b2lkICopJmJmYV9mY3NfcG9ydF9nZXRfcHd3bihwb3J0KSwgKHZvaWQgKikmcGxvZ2ktPnBvcnRfbmFtZSwKKwkgICAgICBzaXplb2Yod3duX3QpKSA8IDApKSB7CisJCWlmIChCRkFfRkNTX1BJRF9JU19XS0EocnhfZmNocy0+ZF9pZCkpIHsKKwkJCS8qCisJCQkgKiBBZGRyZXNzIGFzc2lnbmVkIHRvIHVzIGNhbm5vdCBiZSBhIFdLQQorCQkJICovCisJCQliZmFfZmNzX3BvcnRfc2VuZF9sc19yanQocG9ydCwgcnhfZmNocywKKwkJCQkJRkNfTFNfUkpUX1JTTl9QUk9UT0NPTF9FUlJPUiwKKwkJCQkJRkNfTFNfUkpUX0VYUF9JTlZBTElEX05QT1JUX0lEKTsKKwkJCXJldHVybjsKKwkJfQorCQlwb3J0LT5waWQgPSByeF9mY2hzLT5kX2lkOworCX0KKworCS8qKgorCSAqIEZpcnN0LCBjaGVjayBpZiB3ZSBrbm93IHRoZSBkZXZpY2UgYnkgcHd3bi4KKwkgKi8KKwlycG9ydCA9IGJmYV9mY3NfcG9ydF9nZXRfcnBvcnRfYnlfcHd3bihwb3J0LCBwbG9naS0+cG9ydF9uYW1lKTsKKwlpZiAocnBvcnQpIHsKKwkJLyoqCisJCSAqIERpcmVjdCBBdHRhY2ggUDJQIG1vZGU6IGhhbmRsZSBhZGRyZXNzIGFzc2lnbmVkIGJ5IHRoZSBycG9ydC4KKwkJICovCisJCWlmICgoIWJmYV9mY3NfZmFicmljX2lzX3N3aXRjaGVkKHBvcnQtPmZhYnJpYykpCisJCSAgICAmJgorCQkgICAgKG1lbWNtcAorCQkgICAgICgodm9pZCAqKSZiZmFfZmNzX3BvcnRfZ2V0X3B3d24ocG9ydCksCisJCSAgICAgICh2b2lkICopJnBsb2dpLT5wb3J0X25hbWUsIHNpemVvZih3d25fdCkpIDwgMCkpIHsKKwkJCXBvcnQtPnBpZCA9IHJ4X2ZjaHMtPmRfaWQ7CisJCQlycG9ydC0+cGlkID0gcnhfZmNocy0+c19pZDsKKwkJfQorCQliZmFfZmNzX3Jwb3J0X3Bsb2dpKHJwb3J0LCByeF9mY2hzLCBwbG9naSk7CisJCXJldHVybjsKKwl9CisKKwkvKioKKwkgKiBOZXh0LCBsb29rdXAgcnBvcnQgYnkgUElELgorCSAqLworCXJwb3J0ID0gYmZhX2Zjc19wb3J0X2dldF9ycG9ydF9ieV9waWQocG9ydCwgcnhfZmNocy0+c19pZCk7CisJaWYgKCFycG9ydCkgeworCQkvKioKKwkJICogSW5ib3VuZCBQTE9HSSBmcm9tIGEgbmV3IGRldmljZS4KKwkJICovCisJCWJmYV9mY3NfcnBvcnRfcGxvZ2lfY3JlYXRlKHBvcnQsIHJ4X2ZjaHMsIHBsb2dpKTsKKwkJcmV0dXJuOworCX0KKworCS8qKgorCSAqIFJwb3J0IGlzIGtub3duIG9ubHkgYnkgUElELgorCSAqLworCWlmIChycG9ydC0+cHd3bikgeworCQkvKioKKwkJICogVGhpcyBpcyBhIGRpZmZlcmVudCBkZXZpY2Ugd2l0aCB0aGUgc2FtZSBwaWQuIE9sZCBkZXZpY2UKKwkJICogZGlzYXBwZWFyZWQuIFNlbmQgaW1wbGljaXQgTE9HTyB0byBvbGQgZGV2aWNlLgorCQkgKi8KKwkJYmZhX2Fzc2VydChycG9ydC0+cHd3biAhPSBwbG9naS0+cG9ydF9uYW1lKTsKKwkJYmZhX2Zjc19ycG9ydF9sb2dvX2ltcChycG9ydCk7CisKKwkJLyoqCisJCSAqIEluYm91bmQgUExPR0kgZnJvbSBhIG5ldyBkZXZpY2UgKHdpdGggb2xkIFBJRCkuCisJCSAqLworCQliZmFfZmNzX3Jwb3J0X3Bsb2dpX2NyZWF0ZShwb3J0LCByeF9mY2hzLCBwbG9naSk7CisJCXJldHVybjsKKwl9CisKKwkvKioKKwkgKiBQTE9HSSBjcm9zc2luZyBlYWNoIG90aGVyLgorCSAqLworCWJmYV9hc3NlcnQocnBvcnQtPnB3d24gPT0gV1dOX05VTEwpOworCWJmYV9mY3NfcnBvcnRfcGxvZ2kocnBvcnQsIHJ4X2ZjaHMsIHBsb2dpKTsKK30KKworLyoKKyAqIFByb2Nlc3MgaW5jb21pbmcgRUNITy4KKyAqIFNpbmNlIGl0IGRvZXMgbm90IHJlcXVpcmUgYSBsb2dpbiwgaXQgaXMgcHJvY2Vzc2VkIGhlcmUuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX3BvcnRfZWNobyhzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQsIHN0cnVjdCBmY2hzX3MgKnJ4X2ZjaHMsCisJCQlzdHJ1Y3QgZmNfZWNob19zICplY2hvLCB1MTYgcnhfbGVuKQoreworCXN0cnVjdCBmY2hzX3MgICAgICAgICAgZmNoczsKKwlzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cDsKKwlzdHJ1Y3QgYmZhX3Jwb3J0X3MgKmJmYV9ycG9ydCA9IE5VTEw7CisJaW50ICAgICAgICAgICAgIGxlbiwgcHlsZF9sZW47CisKKwliZmFfdHJjKHBvcnQtPmZjcywgcnhfZmNocy0+c19pZCk7CisJYmZhX3RyYyhwb3J0LT5mY3MsIHJ4X2ZjaHMtPmRfaWQpOworCWJmYV90cmMocG9ydC0+ZmNzLCByeF9sZW4pOworCisJZmN4cCA9IGJmYV9mY3NfZmN4cF9hbGxvYyhwb3J0LT5mY3MpOworCWlmICghZmN4cCkKKwkJcmV0dXJuOworCisJbGVuID0gZmNfbHNfYWNjX2J1aWxkKCZmY2hzLCBiZmFfZmN4cF9nZXRfcmVxYnVmKGZjeHApLCByeF9mY2hzLT5zX2lkLAorCQkJICAgICAgYmZhX2Zjc19wb3J0X2dldF9mY2lkKHBvcnQpLCByeF9mY2hzLT5veF9pZCk7CisKKwkvKgorCSAqIENvcHkgdGhlIHBheWxvYWQgKGlmIGFueSkgZnJvbSB0aGUgZWNobyBmcmFtZQorCSAqLworCXB5bGRfbGVuID0gcnhfbGVuIC0gc2l6ZW9mKHN0cnVjdCBmY2hzX3MpOworCWJmYV90cmMocG9ydC0+ZmNzLCBweWxkX2xlbik7CisKKwlpZiAocHlsZF9sZW4gPiBsZW4pCisJCW1lbWNweSgoKHU4ICopIGJmYV9mY3hwX2dldF9yZXFidWYoZmN4cCkpICsKKwkJICAgICAgIHNpemVvZihzdHJ1Y3QgZmNfZWNob19zKSwgKGVjaG8gKyAxKSwKKwkJICAgICAgIChweWxkX2xlbiAtIHNpemVvZihzdHJ1Y3QgZmNfZWNob19zKSkpOworCisJYmZhX2ZjeHBfc2VuZChmY3hwLCBiZmFfcnBvcnQsIHBvcnQtPmZhYnJpYy0+dmZfaWQsIHBvcnQtPmxwX3RhZywKKwkJICAgICAgQkZBX0ZBTFNFLCBGQ19DTEFTU18zLCBweWxkX2xlbiwgJmZjaHMsIE5VTEwsIE5VTEwsCisJCSAgICAgIEZDX01BWF9QRFVTWiwgMCk7Cit9CisKKy8qCisgKiBQcm9jZXNzIGluY29taW5nIFJOSUQuCisgKiBTaW5jZSBpdCBkb2VzIG5vdCByZXF1aXJlIGEgbG9naW4sIGl0IGlzIHByb2Nlc3NlZCBoZXJlLgorICovCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X3JuaWQoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LCBzdHJ1Y3QgZmNoc19zICpyeF9mY2hzLAorCQkJc3RydWN0IGZjX3JuaWRfY21kX3MgKnJuaWQsIHUxNiByeF9sZW4pCit7CisJc3RydWN0IGZjX3JuaWRfY29tbW9uX2lkX2RhdGFfcyBjb21tb25faWRfZGF0YTsKKwlzdHJ1Y3QgZmNfcm5pZF9nZW5lcmFsX3RvcG9sb2d5X2RhdGFfcyBnZW5fdG9wb19kYXRhOworCXN0cnVjdCBmY2hzX3MgICAgICAgICAgZmNoczsKKwlzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cDsKKwlzdHJ1Y3QgYmZhX3Jwb3J0X3MgKmJmYV9ycG9ydCA9IE5VTEw7CisJdTE2ICAgICAgICBsZW47CisJdTMyICAgICAgICBkYXRhX2Zvcm1hdDsKKworCWJmYV90cmMocG9ydC0+ZmNzLCByeF9mY2hzLT5zX2lkKTsKKwliZmFfdHJjKHBvcnQtPmZjcywgcnhfZmNocy0+ZF9pZCk7CisJYmZhX3RyYyhwb3J0LT5mY3MsIHJ4X2xlbik7CisKKwlmY3hwID0gYmZhX2Zjc19mY3hwX2FsbG9jKHBvcnQtPmZjcyk7CisJaWYgKCFmY3hwKQorCQlyZXR1cm47CisKKwkvKgorCSAqIENoZWNrIE5vZGUgSW5kZW50aWZpY2F0aW9uIERhdGEgRm9ybWF0CisJICogV2Ugb25seSBzdXBwb3J0IEdlbmVyYWwgVG9wb2xvZ3kgRGlzY292ZXJ5IEZvcm1hdC4KKwkgKiBGb3IgYW55IG90aGVyIHJlcXVlc3RlZCBEYXRhIEZvcm1hdHMsIHdlIHJldHVybiBDb21tb24gTm9kZSBJZCBEYXRhCisJICogb25seSwgYXMgcGVyIEZDLUxTLgorCSAqLworCWJmYV90cmMocG9ydC0+ZmNzLCBybmlkLT5ub2RlX2lkX2RhdGFfZm9ybWF0KTsKKwlpZiAocm5pZC0+bm9kZV9pZF9kYXRhX2Zvcm1hdCA9PSBSTklEX05PREVJRF9EQVRBX0ZPUk1BVF9ESVNDT1ZFUlkpIHsKKwkJZGF0YV9mb3JtYXQgPSBSTklEX05PREVJRF9EQVRBX0ZPUk1BVF9ESVNDT1ZFUlk7CisJCS8qCisJCSAqIEdldCBHZW5lcmFsIHRvcG9sb2d5IGRhdGEgZm9yIHRoaXMgcG9ydAorCQkgKi8KKwkJYmZhX2ZzX3BvcnRfZ2V0X2dlbl90b3BvX2RhdGEocG9ydCwgJmdlbl90b3BvX2RhdGEpOworCX0gZWxzZSB7CisJCWRhdGFfZm9ybWF0ID0gUk5JRF9OT0RFSURfREFUQV9GT1JNQVRfQ09NTU9OOworCX0KKworCS8qCisJICogQ29weSB0aGUgTm9kZSBJZCBJbmZvCisJICovCisJY29tbW9uX2lkX2RhdGEucG9ydF9uYW1lID0gYmZhX2Zjc19wb3J0X2dldF9wd3duKHBvcnQpOworCWNvbW1vbl9pZF9kYXRhLm5vZGVfbmFtZSA9IGJmYV9mY3NfcG9ydF9nZXRfbnd3bihwb3J0KTsKKworCWxlbiA9IGZjX3JuaWRfYWNjX2J1aWxkKCZmY2hzLCBiZmFfZmN4cF9nZXRfcmVxYnVmKGZjeHApLCByeF9mY2hzLT5zX2lkLAorCQkJCWJmYV9mY3NfcG9ydF9nZXRfZmNpZChwb3J0KSwgcnhfZmNocy0+b3hfaWQsCisJCQkJZGF0YV9mb3JtYXQsICZjb21tb25faWRfZGF0YSwgJmdlbl90b3BvX2RhdGEpOworCisJYmZhX2ZjeHBfc2VuZChmY3hwLCBiZmFfcnBvcnQsIHBvcnQtPmZhYnJpYy0+dmZfaWQsIHBvcnQtPmxwX3RhZywKKwkJICAgICAgQkZBX0ZBTFNFLCBGQ19DTEFTU18zLCBsZW4sICZmY2hzLCBOVUxMLCBOVUxMLAorCQkgICAgICBGQ19NQVhfUERVU1osIDApOworCisJcmV0dXJuOworfQorCisvKgorICogIEZpbGwgb3V0IEdlbmVyYWwgVG9wb2xwZ3kgRGlzY292ZXJ5IERhdGEgZm9yIFJOSUQgRUxTLgorICovCitzdGF0aWMgdm9pZAorYmZhX2ZzX3BvcnRfZ2V0X2dlbl90b3BvX2RhdGEoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LAorCQkJc3RydWN0IGZjX3JuaWRfZ2VuZXJhbF90b3BvbG9neV9kYXRhX3MgKmdlbl90b3BvX2RhdGEpCit7CisKKwliZmFfb3NfbWVtc2V0KGdlbl90b3BvX2RhdGEsIDAsCisJCSAgICAgIHNpemVvZihzdHJ1Y3QgZmNfcm5pZF9nZW5lcmFsX3RvcG9sb2d5X2RhdGFfcykpOworCisJZ2VuX3RvcG9fZGF0YS0+YXNzb190eXBlID0gYmZhX29zX2h0b25sKFJOSURfQVNTT0NJQVRFRF9UWVBFX0hPU1QpOworCWdlbl90b3BvX2RhdGEtPnBoeV9wb3J0X251bSA9IDA7CS8qIEB0b2RvICovCisJZ2VuX3RvcG9fZGF0YS0+bnVtX2F0dGFjaGVkX25vZGVzID0gYmZhX29zX2h0b25sKDEpOworfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X29ubGluZV9hY3Rpb25zKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCkKK3sKKwliZmFfdHJjKHBvcnQtPmZjcywgcG9ydC0+ZmFicmljLT5vcGVyX3R5cGUpOworCisJX19wb3J0X2FjdGlvbltwb3J0LT5mYWJyaWMtPmZhYl90eXBlXS5pbml0KHBvcnQpOworCV9fcG9ydF9hY3Rpb25bcG9ydC0+ZmFicmljLT5mYWJfdHlwZV0ub25saW5lKHBvcnQpOworCisJYmZhX2Zjc19wb3J0X2Flbl9wb3N0KHBvcnQsIEJGQV9MUE9SVF9BRU5fT05MSU5FKTsKKwliZmFfZmNiX3BvcnRfb25saW5lKHBvcnQtPmZjcy0+YmZhZCwgcG9ydC0+cG9ydF9jZmcucm9sZXMsCisJCQlwb3J0LT5mYWJyaWMtPnZmX2RydiwgKHBvcnQtPnZwb3J0ID09IE5VTEwpID8KKwkJCU5VTEwgOiBwb3J0LT52cG9ydC0+dnBvcnRfZHJ2KTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9vZmZsaW5lX2FjdGlvbnMoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0KQoreworCXN0cnVjdCBsaXN0X2hlYWQgKnFlLCAqcWVuOworCXN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0OworCisJYmZhX3RyYyhwb3J0LT5mY3MsIHBvcnQtPmZhYnJpYy0+b3Blcl90eXBlKTsKKworCV9fcG9ydF9hY3Rpb25bcG9ydC0+ZmFicmljLT5mYWJfdHlwZV0ub2ZmbGluZShwb3J0KTsKKworCWlmIChiZmFfZmNzX2ZhYnJpY19pc19vbmxpbmUocG9ydC0+ZmFicmljKSA9PSBCRkFfVFJVRSkgeworCQliZmFfZmNzX3BvcnRfYWVuX3Bvc3QocG9ydCwgQkZBX0xQT1JUX0FFTl9ESVNDT05ORUNUKTsKKwl9IGVsc2UgeworCQliZmFfZmNzX3BvcnRfYWVuX3Bvc3QocG9ydCwgQkZBX0xQT1JUX0FFTl9PRkZMSU5FKTsKKwl9CisJYmZhX2ZjYl9wb3J0X29mZmxpbmUocG9ydC0+ZmNzLT5iZmFkLCBwb3J0LT5wb3J0X2NmZy5yb2xlcywKKwkJCXBvcnQtPmZhYnJpYy0+dmZfZHJ2LAorCQkJKHBvcnQtPnZwb3J0ID09IE5VTEwpID8gTlVMTCA6IHBvcnQtPnZwb3J0LT52cG9ydF9kcnYpOworCisJbGlzdF9mb3JfZWFjaF9zYWZlKHFlLCBxZW4sICZwb3J0LT5ycG9ydF9xKSB7CisJCXJwb3J0ID0gKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKilxZTsKKwkJYmZhX2Zjc19ycG9ydF9vZmZsaW5lKHJwb3J0KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3BvcnRfdW5rbm93bl9pbml0KHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCkKK3sKKwliZmFfYXNzZXJ0KDApOworfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X3Vua25vd25fb25saW5lKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCkKK3sKKwliZmFfYXNzZXJ0KDApOworfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X3Vua25vd25fb2ZmbGluZShzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQpCit7CisJYmZhX2Fzc2VydCgwKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9kZWxldGVkKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCkKK3sKKwliZmFfZmNzX3BvcnRfYWVuX3Bvc3QocG9ydCwgQkZBX0xQT1JUX0FFTl9ERUxFVEUpOworCisJLyoKKwkgKiBCYXNlIHBvcnQgd2lsbCBiZSBkZWxldGVkIGJ5IHRoZSBPUyBkcml2ZXIKKwkgKi8KKwlpZiAocG9ydC0+dnBvcnQpIHsKKwkJYmZhX2ZjYl9wb3J0X2RlbGV0ZShwb3J0LT5mY3MtPmJmYWQsIHBvcnQtPnBvcnRfY2ZnLnJvbGVzLAorCQkJcG9ydC0+ZmFicmljLT52Zl9kcnYsCisJCQlwb3J0LT52cG9ydCA/IHBvcnQtPnZwb3J0LT52cG9ydF9kcnYgOiBOVUxMKTsKKwkJYmZhX2Zjc192cG9ydF9kZWxldGVfY29tcChwb3J0LT52cG9ydCk7CisJfSBlbHNlIHsKKwkJYmZhX2Zjc19mYWJyaWNfcG9ydF9kZWxldGVfY29tcChwb3J0LT5mYWJyaWMpOworCX0KK30KKworCisKKy8qKgorICogIGZjc19scG9ydF9hcGkgQkZBIEZDUyBwb3J0IEFQSQorICovCisvKioKKyAqICAgTW9kdWxlIGluaXRpYWxpemF0aW9uCisgKi8KK3ZvaWQKK2JmYV9mY3NfcG9ydF9tb2Rpbml0KHN0cnVjdCBiZmFfZmNzX3MgKmZjcykKK3sKKworfQorCisvKioKKyAqICAgTW9kdWxlIGNsZWFudXAKKyAqLwordm9pZAorYmZhX2Zjc19wb3J0X21vZGV4aXQoc3RydWN0IGJmYV9mY3NfcyAqZmNzKQoreworCWJmYV9mY3NfbW9kZXhpdF9jb21wKGZjcyk7Cit9CisKKy8qKgorICogCQlVbnNvbGljaXRlZCBmcmFtZSByZWNlaXZlIGhhbmRsaW5nLgorICovCit2b2lkCitiZmFfZmNzX3BvcnRfdWZfcmVjdihzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKmxwb3J0LCBzdHJ1Y3QgZmNoc19zICpmY2hzLAorCQkJdTE2IGxlbikKK3sKKwl1MzIgICAgICAgIHBpZCA9IGZjaHMtPnNfaWQ7CisJc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQgPSBOVUxMOworCXN0cnVjdCBmY19lbHNfY21kX3MgICAqZWxzX2NtZCA9IChzdHJ1Y3QgZmNfZWxzX2NtZF9zICopIChmY2hzICsgMSk7CisKKwliZmFfc3RhdHMobHBvcnQsIHVmX3JlY3ZzKTsKKworCWlmICghYmZhX2Zjc19wb3J0X2lzX29ubGluZShscG9ydCkpIHsKKwkJYmZhX3N0YXRzKGxwb3J0LCB1Zl9yZWN2X2Ryb3BzKTsKKwkJcmV0dXJuOworCX0KKworCS8qKgorCSAqIEZpcnN0LCBoYW5kbGUgRUxTcyB0aGF0IGRvbm90IHJlcXVpcmUgYSBsb2dpbi4KKwkgKi8KKwkvKgorCSAqIEhhbmRsZSBQTE9HSSBmaXJzdAorCSAqLworCWlmICgoZmNocy0+dHlwZSA9PSBGQ19UWVBFX0VMUykgJiYKKwkJKGVsc19jbWQtPmVsc19jb2RlID09IEZDX0VMU19QTE9HSSkpIHsKKwkJYmZhX2Zjc19wb3J0X3Bsb2dpKGxwb3J0LCBmY2hzLCAoc3RydWN0IGZjX2xvZ2lfcyAqKSBlbHNfY21kKTsKKwkJcmV0dXJuOworCX0KKworCS8qCisJICogSGFuZGxlIEVDSE8gc2VwYXJhdGVseS4KKwkgKi8KKwlpZiAoKGZjaHMtPnR5cGUgPT0gRkNfVFlQRV9FTFMpICYmIChlbHNfY21kLT5lbHNfY29kZSA9PSBGQ19FTFNfRUNITykpIHsKKwkJYmZhX2Zjc19wb3J0X2VjaG8obHBvcnQsIGZjaHMsCisJCQkoc3RydWN0IGZjX2VjaG9fcyAqKSBlbHNfY21kLCBsZW4pOworCQlyZXR1cm47CisJfQorCisJLyoKKwkgKiBIYW5kbGUgUk5JRCBzZXBhcmF0ZWx5LgorCSAqLworCWlmICgoZmNocy0+dHlwZSA9PSBGQ19UWVBFX0VMUykgJiYgKGVsc19jbWQtPmVsc19jb2RlID09IEZDX0VMU19STklEKSkgeworCQliZmFfZmNzX3BvcnRfcm5pZChscG9ydCwgZmNocywKKwkJCShzdHJ1Y3QgZmNfcm5pZF9jbWRfcyAqKSBlbHNfY21kLCBsZW4pOworCQlyZXR1cm47CisJfQorCisJLyoqCisJICogbG9vayBmb3IgYSBtYXRjaGluZyByZW1vdGUgcG9ydCBJRAorCSAqLworCXJwb3J0ID0gYmZhX2Zjc19wb3J0X2dldF9ycG9ydF9ieV9waWQobHBvcnQsIHBpZCk7CisJaWYgKHJwb3J0KSB7CisJCWJmYV90cmMocnBvcnQtPmZjcywgZmNocy0+c19pZCk7CisJCWJmYV90cmMocnBvcnQtPmZjcywgZmNocy0+ZF9pZCk7CisJCWJmYV90cmMocnBvcnQtPmZjcywgZmNocy0+dHlwZSk7CisKKwkJYmZhX2Zjc19ycG9ydF91Zl9yZWN2KHJwb3J0LCBmY2hzLCBsZW4pOworCQlyZXR1cm47CisJfQorCisJLyoqCisJICogT25seSBoYW5kbGVzIEVMUyBmcmFtZXMgZm9yIG5vdy4KKwkgKi8KKwlpZiAoZmNocy0+dHlwZSAhPSBGQ19UWVBFX0VMUykgeworCQliZmFfdHJjKGxwb3J0LT5mY3MsIGZjaHMtPnR5cGUpOworCQliZmFfYXNzZXJ0KDApOworCQlyZXR1cm47CisJfQorCisJYmZhX3RyYyhscG9ydC0+ZmNzLCBlbHNfY21kLT5lbHNfY29kZSk7CisJaWYgKGVsc19jbWQtPmVsc19jb2RlID09IEZDX0VMU19SU0NOKSB7CisJCWJmYV9mY3NfcG9ydF9zY25fcHJvY2Vzc19yc2NuKGxwb3J0LCBmY2hzLCBsZW4pOworCQlyZXR1cm47CisJfQorCisJaWYgKGVsc19jbWQtPmVsc19jb2RlID09IEZDX0VMU19MT0dPKSB7CisJCS8qKgorCQkgKiBAdG9kbyBIYW5kbGUgTE9HTyBmcmFtZXMgcmVjZWl2ZWQuCisJCSAqLworCQliZmFfdHJjKGxwb3J0LT5mY3MsIGVsc19jbWQtPmVsc19jb2RlKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChlbHNfY21kLT5lbHNfY29kZSA9PSBGQ19FTFNfUFJMSSkgeworCQkvKioKKwkJICogQHRvZG8gSGFuZGxlIFBSTEkgZnJhbWVzIHJlY2VpdmVkLgorCQkgKi8KKwkJYmZhX3RyYyhscG9ydC0+ZmNzLCBlbHNfY21kLT5lbHNfY29kZSk7CisJCXJldHVybjsKKwl9CisKKwkvKioKKwkgKiBVbmhhbmRsZWQgRUxTIGZyYW1lcy4gU2VuZCBhIExTX1JKVC4KKwkgKi8KKwliZmFfZmNzX3BvcnRfc2VuZF9sc19yanQobHBvcnQsIGZjaHMsIEZDX0xTX1JKVF9SU05fQ01EX05PVF9TVVBQLAorCQkJCSBGQ19MU19SSlRfRVhQX05PX0FERExfSU5GTyk7CisKK30KKworLyoqCisgKiAgIFBJRCBiYXNlZCBMb29rdXAgZm9yIGEgUi1Qb3J0IGluIHRoZSBQb3J0IFItUG9ydCBRdWV1ZQorICovCitzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICoKK2JmYV9mY3NfcG9ydF9nZXRfcnBvcnRfYnlfcGlkKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCwgdTMyIHBpZCkKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydDsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpxZTsKKworCWxpc3RfZm9yX2VhY2gocWUsICZwb3J0LT5ycG9ydF9xKSB7CisJCXJwb3J0ID0gKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKilxZTsKKwkJaWYgKHJwb3J0LT5waWQgPT0gcGlkKQorCQkJcmV0dXJuIHJwb3J0OworCX0KKworCWJmYV90cmMocG9ydC0+ZmNzLCBwaWQpOworCXJldHVybiBOVUxMOworfQorCisvKioKKyAqICAgUFdXTiBiYXNlZCBMb29rdXAgZm9yIGEgUi1Qb3J0IGluIHRoZSBQb3J0IFItUG9ydCBRdWV1ZQorICovCitzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICoKK2JmYV9mY3NfcG9ydF9nZXRfcnBvcnRfYnlfcHd3bihzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQsIHd3bl90IHB3d24pCit7CisJc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQ7CisJc3RydWN0IGxpc3RfaGVhZCAqcWU7CisKKwlsaXN0X2Zvcl9lYWNoKHFlLCAmcG9ydC0+cnBvcnRfcSkgeworCQlycG9ydCA9IChzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICopcWU7CisJCWlmICh3d25faXNfZXF1YWwocnBvcnQtPnB3d24sIHB3d24pKQorCQkJcmV0dXJuIHJwb3J0OworCX0KKworCWJmYV90cmMocG9ydC0+ZmNzLCBwd3duKTsKKwlyZXR1cm4gKE5VTEwpOworfQorCisvKioKKyAqICAgTldXTiBiYXNlZCBMb29rdXAgZm9yIGEgUi1Qb3J0IGluIHRoZSBQb3J0IFItUG9ydCBRdWV1ZQorICovCitzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICoKK2JmYV9mY3NfcG9ydF9nZXRfcnBvcnRfYnlfbnd3bihzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQsIHd3bl90IG53d24pCit7CisJc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQ7CisJc3RydWN0IGxpc3RfaGVhZCAqcWU7CisKKwlsaXN0X2Zvcl9lYWNoKHFlLCAmcG9ydC0+cnBvcnRfcSkgeworCQlycG9ydCA9IChzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICopcWU7CisJCWlmICh3d25faXNfZXF1YWwocnBvcnQtPm53d24sIG53d24pKQorCQkJcmV0dXJuIHJwb3J0OworCX0KKworCWJmYV90cmMocG9ydC0+ZmNzLCBud3duKTsKKwlyZXR1cm4gKE5VTEwpOworfQorCisvKioKKyAqIENhbGxlZCBieSBycG9ydCBtb2R1bGUgd2hlbiBuZXcgcnBvcnRzIGFyZSBkaXNjb3ZlcmVkLgorICovCit2b2lkCitiZmFfZmNzX3BvcnRfYWRkX3Jwb3J0KHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCwKKwkJICAgICAgIHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0KQoreworCWxpc3RfYWRkX3RhaWwoJnJwb3J0LT5xZSwgJnBvcnQtPnJwb3J0X3EpOworCXBvcnQtPm51bV9ycG9ydHMrKzsKK30KKworLyoqCisgKiBDYWxsZWQgYnkgcnBvcnQgbW9kdWxlIHRvIHdoZW4gcnBvcnRzIGFyZSBkZWxldGVkLgorICovCit2b2lkCitiZmFfZmNzX3BvcnRfZGVsX3Jwb3J0KHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCwKKwkJICAgICAgIHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0KQoreworCWJmYV9hc3NlcnQoYmZhX3FfaXNfb25fcSgmcG9ydC0+cnBvcnRfcSwgcnBvcnQpKTsKKwlsaXN0X2RlbCgmcnBvcnQtPnFlKTsKKwlwb3J0LT5udW1fcnBvcnRzLS07CisKKwliZmFfc21fc2VuZF9ldmVudChwb3J0LCBCRkFfRkNTX1BPUlRfU01fREVMUlBPUlQpOworfQorCisvKioKKyAqIENhbGxlZCBieSBmYWJyaWMgZm9yIGJhc2UgcG9ydCB3aGVuIGZhYnJpYyBsb2dpbiBpcyBjb21wbGV0ZS4KKyAqIENhbGxlZCBieSB2cG9ydCBmb3IgdmlydHVhbCBwb3J0cyB3aGVuIEZESVNDIGlzIGNvbXBsZXRlLgorICovCit2b2lkCitiZmFfZmNzX3BvcnRfb25saW5lKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCkKK3sKKwliZmFfc21fc2VuZF9ldmVudChwb3J0LCBCRkFfRkNTX1BPUlRfU01fT05MSU5FKTsKK30KKworLyoqCisgKiBDYWxsZWQgYnkgZmFicmljIGZvciBiYXNlIHBvcnQgd2hlbiBmYWJyaWMgZ29lcyBvZmZsaW5lLgorICogQ2FsbGVkIGJ5IHZwb3J0IGZvciB2aXJ0dWFsIHBvcnRzIHdoZW4gdmlydHVhbCBwb3J0IGJlY29tZXMgb2ZmbGluZS4KKyAqLwordm9pZAorYmZhX2Zjc19wb3J0X29mZmxpbmUoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0KQoreworCWJmYV9zbV9zZW5kX2V2ZW50KHBvcnQsIEJGQV9GQ1NfUE9SVF9TTV9PRkZMSU5FKTsKK30KKworLyoqCisgKiBDYWxsZWQgYnkgZmFicmljIHRvIGRlbGV0ZSBiYXNlIGxwb3J0IGFuZCBhc3NvY2lhdGVkIHJlc291cmNlcy4KKyAqCisgKiBDYWxsZWQgYnkgdnBvcnQgdG8gZGVsZXRlIGxwb3J0IGFuZCBhc3NvY2lhdGVkIHJlc291cmNlcy4gU2hvdWxkIGNhbGwKKyAqIGJmYV9mY3NfdnBvcnRfZGVsZXRlX2NvbXAoKSBmb3IgdnBvcnRzIG9uIGNvbXBsZXRpb24uCisgKi8KK3ZvaWQKK2JmYV9mY3NfcG9ydF9kZWxldGUoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0KQoreworCWJmYV9zbV9zZW5kX2V2ZW50KHBvcnQsIEJGQV9GQ1NfUE9SVF9TTV9ERUxFVEUpOworfQorCisvKioKKyAqIENhbGxlZCBieSBmYWJyaWMgaW4gcHJpdmF0ZSBsb29wIHRvcG9sb2d5IHRvIHByb2Nlc3MgTElQIGV2ZW50LgorICovCit2b2lkCitiZmFfZmNzX3BvcnRfbGlwKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCkKK3sKK30KKworLyoqCisgKiBSZXR1cm4gVFJVRSBpZiBwb3J0IGlzIG9ubGluZSwgZWxzZSByZXR1cm4gRkFMU0UKKyAqLworYmZhX2Jvb2xlYW5fdAorYmZhX2Zjc19wb3J0X2lzX29ubGluZShzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQpCit7CisJcmV0dXJuIChiZmFfc21fY21wX3N0YXRlKHBvcnQsIGJmYV9mY3NfcG9ydF9zbV9vbmxpbmUpKTsKK30KKworLyoqCisgKiBMb2dpY2FsIHBvcnQgaW5pdGlhbGl6YXRpb24gb2YgYmFzZSBvciB2aXJ0dWFsIHBvcnQuCisgKiBDYWxsZWQgYnkgZmFicmljIGZvciBiYXNlIHBvcnQgb3IgYnkgdnBvcnQgZm9yIHZpcnR1YWwgcG9ydHMuCisgKi8KK3ZvaWQKK2JmYV9mY3NfbHBvcnRfaW5pdChzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKmxwb3J0LCBzdHJ1Y3QgYmZhX2Zjc19zICpmY3MsCisJCSAgIHUxNiB2Zl9pZCwgc3RydWN0IGJmYV9wb3J0X2NmZ19zICpwb3J0X2NmZywKKwkJICAgc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqdnBvcnQpCit7CisJbHBvcnQtPmZjcyA9IGZjczsKKwlscG9ydC0+ZmFicmljID0gYmZhX2Zjc192Zl9sb29rdXAoZmNzLCB2Zl9pZCk7CisJYmZhX29zX2Fzc2lnbihscG9ydC0+cG9ydF9jZmcsICpwb3J0X2NmZyk7CisJbHBvcnQtPnZwb3J0ID0gdnBvcnQ7CisJbHBvcnQtPmxwX3RhZyA9ICh2cG9ydCkgPyBiZmFfbHBzX2dldF90YWcodnBvcnQtPmxwcykgOgorCQkJIGJmYV9scHNfZ2V0X3RhZyhscG9ydC0+ZmFicmljLT5scHMpOworCisJSU5JVF9MSVNUX0hFQUQoJmxwb3J0LT5ycG9ydF9xKTsKKwlscG9ydC0+bnVtX3Jwb3J0cyA9IDA7CisKKwlscG9ydC0+YmZhZF9wb3J0ID0KKwkJYmZhX2ZjYl9wb3J0X25ldyhmY3MtPmJmYWQsIGxwb3J0LCBscG9ydC0+cG9ydF9jZmcucm9sZXMsCisJCQkJbHBvcnQtPmZhYnJpYy0+dmZfZHJ2LAorCQkJCXZwb3J0ID8gdnBvcnQtPnZwb3J0X2RydiA6IE5VTEwpOworCWJmYV9mY3NfcG9ydF9hZW5fcG9zdChscG9ydCwgQkZBX0xQT1JUX0FFTl9ORVcpOworCisJYmZhX3NtX3NldF9zdGF0ZShscG9ydCwgYmZhX2Zjc19wb3J0X3NtX3VuaW5pdCk7CisJYmZhX3NtX3NlbmRfZXZlbnQobHBvcnQsIEJGQV9GQ1NfUE9SVF9TTV9DUkVBVEUpOworfQorCisKKworLyoqCisgKiAgZmNzX2xwb3J0X2FwaQorICovCisKK3ZvaWQKK2JmYV9mY3NfcG9ydF9nZXRfYXR0cihzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQsCisJCSAgICAgIHN0cnVjdCBiZmFfcG9ydF9hdHRyX3MgKnBvcnRfYXR0cikKK3sKKwlpZiAoYmZhX3NtX2NtcF9zdGF0ZShwb3J0LCBiZmFfZmNzX3BvcnRfc21fb25saW5lKSkKKwkJcG9ydF9hdHRyLT5waWQgPSBwb3J0LT5waWQ7CisJZWxzZQorCQlwb3J0X2F0dHItPnBpZCA9IDA7CisKKwlwb3J0X2F0dHItPnBvcnRfY2ZnID0gcG9ydC0+cG9ydF9jZmc7CisKKwlpZiAocG9ydC0+ZmFicmljKSB7CisJCXBvcnRfYXR0ci0+cG9ydF90eXBlID0gYmZhX2Zjc19mYWJyaWNfcG9ydF90eXBlKHBvcnQtPmZhYnJpYyk7CisJCXBvcnRfYXR0ci0+bG9vcGJhY2sgPSBiZmFfZmNzX2ZhYnJpY19pc19sb29wYmFjayhwb3J0LT5mYWJyaWMpOworCQlwb3J0X2F0dHItPmZhYnJpY19uYW1lID0gYmZhX2Zjc19wb3J0X2dldF9mYWJyaWNfbmFtZShwb3J0KTsKKwkJbWVtY3B5KHBvcnRfYXR0ci0+ZmFicmljX2lwX2FkZHIsCisJCSAgICAgICBiZmFfZmNzX3BvcnRfZ2V0X2ZhYnJpY19pcGFkZHIocG9ydCksCisJCSAgICAgICBCRkFfRkNTX0ZBQlJJQ19JUEFERFJfU1opOworCisJCWlmIChwb3J0LT52cG9ydCAhPSBOVUxMKQorCQkJcG9ydF9hdHRyLT5wb3J0X3R5cGUgPSBCRkFfUFBPUlRfVFlQRV9WUE9SVDsKKworCX0gZWxzZSB7CisJCXBvcnRfYXR0ci0+cG9ydF90eXBlID0gQkZBX1BQT1JUX1RZUEVfVU5LTk9XTjsKKwkJcG9ydF9hdHRyLT5zdGF0ZSA9IEJGQV9QT1JUX1VOSU5JVDsKKwl9CisKK30KKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2JmYV9mY3NfcG9ydC5jIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfZmNzX3BvcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YzRiMjRlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfZmNzX3BvcnQuYwpAQCAtMCwwICsxLDY4IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKy8qKgorICogIGJmYV9mY3NfcHBvcnQuYyBCRkEgRkNTIFBQT1JUICggcGh5c2ljYWwgcG9ydCkKKyAqLworCisjaW5jbHVkZSA8ZmNzL2JmYV9mY3MuaD4KKyNpbmNsdWRlIDxiZmFfc3ZjLmg+CisjaW5jbHVkZSA8ZmNzL2JmYV9mY3NfZmFicmljLmg+CisjaW5jbHVkZSAiZmNzX3RyY21vZC5oIgorI2luY2x1ZGUgImZjcy5oIgorI2luY2x1ZGUgImZjc19mYWJyaWMuaCIKKyNpbmNsdWRlICJmY3NfcG9ydC5oIgorCitCRkFfVFJDX0ZJTEUoRkNTLCBQUE9SVCk7CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3Bwb3J0X2V2ZW50X2hhbmRsZXIodm9pZCAqY2JhcmcsIGJmYV9wcG9ydF9ldmVudF90IGV2ZW50KQoreworCXN0cnVjdCBiZmFfZmNzX3MgICAgICAqZmNzID0gY2Jhcmc7CisKKwliZmFfdHJjKGZjcywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX1BQT1JUX0xJTktVUDoKKwkJYmZhX2Zjc19mYWJyaWNfbGlua191cCgmZmNzLT5mYWJyaWMpOworCQlicmVhazsKKworCWNhc2UgQkZBX1BQT1JUX0xJTktET1dOOgorCQliZmFfZmNzX2ZhYnJpY19saW5rX2Rvd24oJmZjcy0+ZmFicmljKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9QUE9SVF9UUlVOS19MSU5LRE9XTjoKKwkJYmZhX2Fzc2VydCgwKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKwordm9pZAorYmZhX2Zjc19wcG9ydF9tb2Rpbml0KHN0cnVjdCBiZmFfZmNzX3MgKmZjcykKK3sKKwliZmFfcHBvcnRfZXZlbnRfcmVnaXN0ZXIoZmNzLT5iZmEsIGJmYV9mY3NfcHBvcnRfZXZlbnRfaGFuZGxlciwKKwkJCQkgICAgIGZjcyk7Cit9CisKK3ZvaWQKK2JmYV9mY3NfcHBvcnRfbW9kZXhpdChzdHJ1Y3QgYmZhX2Zjc19zICpmY3MpCit7CisJYmZhX2Zjc19tb2RleGl0X2NvbXAoZmNzKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2Zjc191Zi5jIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfZmNzX3VmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQwMWRiNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2Zjc191Zi5jCkBAIC0wLDAgKzEsMTA1IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKy8qKgorICogIGJmYV9mY3NfdWYuYyBCRkEgRkNTIFVGICggVW5zb2xpY2l0ZWQgRnJhbWVzKQorICovCisKKyNpbmNsdWRlIDxmY3MvYmZhX2Zjcy5oPgorI2luY2x1ZGUgPGJmYV9zdmMuaD4KKyNpbmNsdWRlIDxmY3MvYmZhX2Zjc19mYWJyaWMuaD4KKyNpbmNsdWRlICJmY3MuaCIKKyNpbmNsdWRlICJmY3NfdHJjbW9kLmgiCisjaW5jbHVkZSAiZmNzX2ZhYnJpYy5oIgorI2luY2x1ZGUgImZjc191Zi5oIgorCitCRkFfVFJDX0ZJTEUoRkNTLCBVRik7CisKKy8qKgorICogCQlCRkEgY2FsbGJhY2sgZm9yIHVuc29saWNpdGVkIGZyYW1lIHJlY2VpdmUgaGFuZGxlci4KKyAqCisgKiBAcGFyYW1baW5dCQljYmFyZwkJY2FsbGJhY2sgYXJnIGZvciByZWNlaXZlIGhhbmRsZXIKKyAqIEBwYXJhbVtpbl0JCXVmCQl1bnNvbGljaXRlZCBmcmFtZSBkZXNjcmlwdG9yCisgKgorICogQHJldHVybiBOb25lCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX3VmX3JlY3Yodm9pZCAqY2JhcmcsIHN0cnVjdCBiZmFfdWZfcyAqdWYpCit7CisJc3RydWN0IGJmYV9mY3NfcyAgICAgICpmY3MgPSAoc3RydWN0IGJmYV9mY3NfcyAqKSBjYmFyZzsKKwlzdHJ1Y3QgZmNoc19zICAgICAgICAgKmZjaHMgPSBiZmFfdWZfZ2V0X2ZybWJ1Zih1Zik7CisJdTE2ICAgICAgICBsZW4gPSBiZmFfdWZfZ2V0X2ZybWxlbih1Zik7CisJc3RydWN0IGZjX3ZmdF9zICAgICAgICp2ZnQ7CisJc3RydWN0IGJmYV9mY3NfZmFicmljX3MgKmZhYnJpYzsKKworCS8qKgorCSAqIGNoZWNrIGZvciBWRlQgaGVhZGVyCisJICovCisJaWYgKGZjaHMtPnJvdXRpbmcgPT0gRkNfUlRHX0VYVF9IRFIgJiYKKwkJZmNocy0+Y2F0X2luZm8gPT0gRkNfQ0FUX1ZGVF9IRFIpIHsKKwkJYmZhX3N0YXRzKGZjcywgdWYudGFnZ2VkKTsKKwkJdmZ0ID0gYmZhX3VmX2dldF9mcm1idWYodWYpOworCQlpZiAoZmNzLT5wb3J0X3ZmaWQgPT0gdmZ0LT52Zl9pZCkKKwkJCWZhYnJpYyA9ICZmY3MtPmZhYnJpYzsKKwkJZWxzZQorCQkJZmFicmljID0gYmZhX2Zjc192Zl9sb29rdXAoZmNzLCAodTE2KSB2ZnQtPnZmX2lkKTsKKworCQkvKioKKwkJICogZHJvcCBmcmFtZSBpZiB2ZmlkIGlzIHVua25vd24KKwkJICovCisJCWlmICghZmFicmljKSB7CisJCQliZmFfYXNzZXJ0KDApOworCQkJYmZhX3N0YXRzKGZjcywgdWYudmZpZF91bmtub3duKTsKKwkJCWJmYV91Zl9mcmVlKHVmKTsKKwkJCXJldHVybjsKKwkJfQorCisJCS8qKgorCQkgKiBza2lwIHZmdCBoZWFkZXIKKwkJICovCisJCWZjaHMgPSAoc3RydWN0IGZjaHNfcyAqKSAodmZ0ICsgMSk7CisJCWxlbiAtPSBzaXplb2Yoc3RydWN0IGZjX3ZmdF9zKTsKKworCQliZmFfdHJjKGZjcywgdmZ0LT52Zl9pZCk7CisJfSBlbHNlIHsKKwkJYmZhX3N0YXRzKGZjcywgdWYudW50YWdnZWQpOworCQlmYWJyaWMgPSAmZmNzLT5mYWJyaWM7CisJfQorCisJYmZhX3RyYyhmY3MsICgodTMyICopIGZjaHMpWzBdKTsKKwliZmFfdHJjKGZjcywgKCh1MzIgKikgZmNocylbMV0pOworCWJmYV90cmMoZmNzLCAoKHUzMiAqKSBmY2hzKVsyXSk7CisJYmZhX3RyYyhmY3MsICgodTMyICopIGZjaHMpWzNdKTsKKwliZmFfdHJjKGZjcywgKCh1MzIgKikgZmNocylbNF0pOworCWJmYV90cmMoZmNzLCAoKHUzMiAqKSBmY2hzKVs1XSk7CisJYmZhX3RyYyhmY3MsIGxlbik7CisKKwliZmFfZmNzX2ZhYnJpY191Zl9yZWN2KGZhYnJpYywgZmNocywgbGVuKTsKKwliZmFfdWZfZnJlZSh1Zik7Cit9CisKK3ZvaWQKK2JmYV9mY3NfdWZfbW9kaW5pdChzdHJ1Y3QgYmZhX2Zjc19zICpmY3MpCit7CisJYmZhX3VmX3JlY3ZfcmVnaXN0ZXIoZmNzLT5iZmEsIGJmYV9mY3NfdWZfcmVjdiwgZmNzKTsKK30KKwordm9pZAorYmZhX2Zjc191Zl9tb2RleGl0KHN0cnVjdCBiZmFfZmNzX3MgKmZjcykKK3sKKwliZmFfZmNzX21vZGV4aXRfY29tcChmY3MpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfZmN4cC5jIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfZmN4cC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3NTRhMGUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9mY3hwLmMKQEAgLTAsMCArMSw3ODIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGJmYS5oPgorI2luY2x1ZGUgPGJmaS9iZmlfdWYuaD4KKyNpbmNsdWRlIDxjcy9iZmFfZGVidWcuaD4KKworQkZBX1RSQ19GSUxFKEhBTCwgRkNYUCk7CitCRkFfTU9EVUxFKGZjeHApOworCisvKioKKyAqIGZvcndhcmQgZGVjbGFyYXRpb25zCisgKi8KK3N0YXRpYyB2b2lkICAgICBfX2JmYV9mY3hwX3NlbmRfY2Jmbih2b2lkICpjYmFyZywgYmZhX2Jvb2xlYW5fdCBjb21wbGV0ZSk7CitzdGF0aWMgdm9pZCAgICAgaGFsX2ZjeHBfcnhfcGxvZyhzdHJ1Y3QgYmZhX3MgKmJmYSwgc3RydWN0IGJmYV9mY3hwX3MgKmZjeHAsCisJCQkJIHN0cnVjdCBiZmlfZmN4cF9zZW5kX3JzcF9zICpmY3hwX3JzcCk7CitzdGF0aWMgdm9pZCAgICAgaGFsX2ZjeHBfdHhfcGxvZyhzdHJ1Y3QgYmZhX3MgKmJmYSwgdTMyIHJlcWxlbiwKKwkJCQkgc3RydWN0IGJmYV9mY3hwX3MgKmZjeHAsIHN0cnVjdCBmY2hzX3MgKmZjaHMpOworc3RhdGljIHZvaWQJYmZhX2ZjeHBfcXJlc3VtZSh2b2lkICpjYmFyZyk7CitzdGF0aWMgdm9pZAliZmFfZmN4cF9xdWV1ZShzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cCwKKwkJCSAgICAgICBzdHJ1Y3QgYmZpX2ZjeHBfc2VuZF9yZXFfcyAqc2VuZF9yZXEpOworCisvKioKKyAqICBmY3hwX3B2dCBCRkEgRkNYUCBwcml2YXRlIGZ1bmN0aW9ucworICovCisKK3N0YXRpYyB2b2lkCitjbGFpbV9mY3hwX3JlcV9yc3BfbWVtKHN0cnVjdCBiZmFfZmN4cF9tb2RfcyAqbW9kLCBzdHJ1Y3QgYmZhX21lbWluZm9fcyAqbWkpCit7CisJdTggICAgICAgICpkbV9rdmEgPSBOVUxMOworCXU2NCAgICAgICAgZG1fcGE7CisJdTMyICAgICAgICBidWZfcG9vbF9zejsKKworCWRtX2t2YSA9IGJmYV9tZW1pbmZvX2RtYV92aXJ0KG1pKTsKKwlkbV9wYSA9IGJmYV9tZW1pbmZvX2RtYV9waHlzKG1pKTsKKworCWJ1Zl9wb29sX3N6ID0gbW9kLT5yZXFfcGxkX3N6ICogbW9kLT5udW1fZmN4cHM7CisKKwkvKgorCSAqIEluaXRpYWxpemUgdGhlIGZjeHAgcmVxIHBheWxvYWQgbGlzdAorCSAqLworCW1vZC0+cmVxX3BsZF9saXN0X2t2YSA9IGRtX2t2YTsKKwltb2QtPnJlcV9wbGRfbGlzdF9wYSA9IGRtX3BhOworCWRtX2t2YSArPSBidWZfcG9vbF9zejsKKwlkbV9wYSArPSBidWZfcG9vbF9zejsKKwliZmFfb3NfbWVtc2V0KG1vZC0+cmVxX3BsZF9saXN0X2t2YSwgMCwgYnVmX3Bvb2xfc3opOworCisJLyoKKwkgKiBJbml0aWFsaXplIHRoZSBmY3hwIHJzcCBwYXlsb2FkIGxpc3QKKwkgKi8KKwlidWZfcG9vbF9zeiA9IG1vZC0+cnNwX3BsZF9zeiAqIG1vZC0+bnVtX2ZjeHBzOworCW1vZC0+cnNwX3BsZF9saXN0X2t2YSA9IGRtX2t2YTsKKwltb2QtPnJzcF9wbGRfbGlzdF9wYSA9IGRtX3BhOworCWRtX2t2YSArPSBidWZfcG9vbF9zejsKKwlkbV9wYSArPSBidWZfcG9vbF9zejsKKwliZmFfb3NfbWVtc2V0KG1vZC0+cnNwX3BsZF9saXN0X2t2YSwgMCwgYnVmX3Bvb2xfc3opOworCisJYmZhX21lbWluZm9fZG1hX3ZpcnQobWkpID0gZG1fa3ZhOworCWJmYV9tZW1pbmZvX2RtYV9waHlzKG1pKSA9IGRtX3BhOworfQorCitzdGF0aWMgdm9pZAorY2xhaW1fZmN4cHNfbWVtKHN0cnVjdCBiZmFfZmN4cF9tb2RfcyAqbW9kLCBzdHJ1Y3QgYmZhX21lbWluZm9fcyAqbWkpCit7CisJdTE2ICAgICAgICBpOworCXN0cnVjdCBiZmFfZmN4cF9zICpmY3hwOworCisJZmN4cCA9IChzdHJ1Y3QgYmZhX2ZjeHBfcyAqKSBiZmFfbWVtaW5mb19rdmEobWkpOworCWJmYV9vc19tZW1zZXQoZmN4cCwgMCwgc2l6ZW9mKHN0cnVjdCBiZmFfZmN4cF9zKSAqIG1vZC0+bnVtX2ZjeHBzKTsKKworCUlOSVRfTElTVF9IRUFEKCZtb2QtPmZjeHBfZnJlZV9xKTsKKwlJTklUX0xJU1RfSEVBRCgmbW9kLT5mY3hwX2FjdGl2ZV9xKTsKKworCW1vZC0+ZmN4cF9saXN0ID0gZmN4cDsKKworCWZvciAoaSA9IDA7IGkgPCBtb2QtPm51bV9mY3hwczsgaSsrKSB7CisJCWZjeHAtPmZjeHBfbW9kID0gbW9kOworCQlmY3hwLT5mY3hwX3RhZyA9IGk7CisKKwkJbGlzdF9hZGRfdGFpbCgmZmN4cC0+cWUsICZtb2QtPmZjeHBfZnJlZV9xKTsKKwkJYmZhX3JlcXFfd2luaXQoJmZjeHAtPnJlcXFfd3FlLCBiZmFfZmN4cF9xcmVzdW1lLCBmY3hwKTsKKwkJZmN4cC0+cmVxcV93YWl0aW5nID0gQkZBX0ZBTFNFOworCisJCWZjeHAgPSBmY3hwICsgMTsKKwl9CisKKwliZmFfbWVtaW5mb19rdmEobWkpID0gKHZvaWQgKilmY3hwOworfQorCitzdGF0aWMgdm9pZAorYmZhX2ZjeHBfbWVtaW5mbyhzdHJ1Y3QgYmZhX2lvY2ZjX2NmZ19zICpjZmcsIHUzMiAqbmRtX2xlbiwKKwkJdTMyICpkbV9sZW4pCit7CisJdTE2ICAgICAgICBudW1fZmN4cF9yZXFzID0gY2ZnLT5md2NmZy5udW1fZmN4cF9yZXFzOworCisJaWYgKG51bV9mY3hwX3JlcXMgPT0gMCkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBBY2NvdW50IGZvciByZXEvcnNwIHBheWxvYWQKKwkgKi8KKwkqZG1fbGVuICs9IEJGQV9GQ1hQX01BWF9JQlVGX1NaICogbnVtX2ZjeHBfcmVxczsKKwlpZiAoY2ZnLT5kcnZjZmcubWluX2NmZykKKwkJKmRtX2xlbiArPSBCRkFfRkNYUF9NQVhfSUJVRl9TWiAqIG51bV9mY3hwX3JlcXM7CisJZWxzZQorCQkqZG1fbGVuICs9IEJGQV9GQ1hQX01BWF9MQlVGX1NaICogbnVtX2ZjeHBfcmVxczsKKworCS8qCisJICogQWNjb3VudCBmb3IgZmN4cCBzdHJ1Y3RzCisJICovCisJKm5kbV9sZW4gKz0gc2l6ZW9mKHN0cnVjdCBiZmFfZmN4cF9zKSAqIG51bV9mY3hwX3JlcXM7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmN4cF9hdHRhY2goc3RydWN0IGJmYV9zICpiZmEsIHZvaWQgKmJmYWQsIHN0cnVjdCBiZmFfaW9jZmNfY2ZnX3MgKmNmZywKKwkJICAgIHN0cnVjdCBiZmFfbWVtaW5mb19zICptZW1pbmZvLCBzdHJ1Y3QgYmZhX3BjaWRldl9zICpwY2lkZXYpCit7CisJc3RydWN0IGJmYV9mY3hwX21vZF9zICptb2QgPSBCRkFfRkNYUF9NT0QoYmZhKTsKKworCWJmYV9vc19tZW1zZXQobW9kLCAwLCBzaXplb2Yoc3RydWN0IGJmYV9mY3hwX21vZF9zKSk7CisJbW9kLT5iZmEgPSBiZmE7CisJbW9kLT5udW1fZmN4cHMgPSBjZmctPmZ3Y2ZnLm51bV9mY3hwX3JlcXM7CisKKwkvKioKKwkgKiBJbml0aWFsaXplIEZDWFAgcmVxdWVzdCBhbmQgcmVzcG9uc2UgcGF5bG9hZCBzaXplcy4KKwkgKi8KKwltb2QtPnJlcV9wbGRfc3ogPSBtb2QtPnJzcF9wbGRfc3ogPSBCRkFfRkNYUF9NQVhfSUJVRl9TWjsKKwlpZiAoIWNmZy0+ZHJ2Y2ZnLm1pbl9jZmcpCisJCW1vZC0+cnNwX3BsZF9zeiA9IEJGQV9GQ1hQX01BWF9MQlVGX1NaOworCisJSU5JVF9MSVNUX0hFQUQoJm1vZC0+d2FpdF9xKTsKKworCWNsYWltX2ZjeHBfcmVxX3JzcF9tZW0obW9kLCBtZW1pbmZvKTsKKwljbGFpbV9mY3hwc19tZW0obW9kLCBtZW1pbmZvKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3hwX2luaXRkb25lKHN0cnVjdCBiZmFfcyAqYmZhKQoreworfQorCitzdGF0aWMgdm9pZAorYmZhX2ZjeHBfZGV0YWNoKHN0cnVjdCBiZmFfcyAqYmZhKQoreworfQorCitzdGF0aWMgdm9pZAorYmZhX2ZjeHBfc3RhcnQoc3RydWN0IGJmYV9zICpiZmEpCit7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmN4cF9zdG9wKHN0cnVjdCBiZmFfcyAqYmZhKQoreworfQorCitzdGF0aWMgdm9pZAorYmZhX2ZjeHBfaW9jZGlzYWJsZShzdHJ1Y3QgYmZhX3MgKmJmYSkKK3sKKwlzdHJ1Y3QgYmZhX2ZjeHBfbW9kX3MgKm1vZCA9IEJGQV9GQ1hQX01PRChiZmEpOworCXN0cnVjdCBiZmFfZmN4cF9zICpmY3hwOworCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgICpxZSwgKnFlbjsKKworCWxpc3RfZm9yX2VhY2hfc2FmZShxZSwgcWVuLCAmbW9kLT5mY3hwX2FjdGl2ZV9xKSB7CisJCWZjeHAgPSAoc3RydWN0IGJmYV9mY3hwX3MgKikgcWU7CisJCWlmIChmY3hwLT5jYWxsZXIgPT0gTlVMTCkgeworCQkJZmN4cC0+c2VuZF9jYmZuKGZjeHAtPmNhbGxlciwgZmN4cCwgZmN4cC0+c2VuZF9jYmFyZywKKwkJCQkJQkZBX1NUQVRVU19JT0NfRkFJTFVSRSwgMCwgMCwgTlVMTCk7CisJCQliZmFfZmN4cF9mcmVlKGZjeHApOworCQl9IGVsc2UgeworCQkJZmN4cC0+cnNwX3N0YXR1cyA9IEJGQV9TVEFUVVNfSU9DX0ZBSUxVUkU7CisJCQliZmFfY2JfcXVldWUoYmZhLCAmZmN4cC0+aGNiX3FlLAorCQkJCSAgICAgIF9fYmZhX2ZjeHBfc2VuZF9jYmZuLCBmY3hwKTsKKwkJfQorCX0KK30KKworc3RhdGljIHN0cnVjdCBiZmFfZmN4cF9zICoKK2JmYV9mY3hwX2dldChzdHJ1Y3QgYmZhX2ZjeHBfbW9kX3MgKmZtKQoreworCXN0cnVjdCBiZmFfZmN4cF9zICpmY3hwOworCisJYmZhX3FfZGVxKCZmbS0+ZmN4cF9mcmVlX3EsICZmY3hwKTsKKworCWlmIChmY3hwKQorCQlsaXN0X2FkZF90YWlsKCZmY3hwLT5xZSwgJmZtLT5mY3hwX2FjdGl2ZV9xKTsKKworCXJldHVybiAoZmN4cCk7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmN4cF9wdXQoc3RydWN0IGJmYV9mY3hwX3MgKmZjeHApCit7CisJc3RydWN0IGJmYV9mY3hwX21vZF9zICptb2QgPSBmY3hwLT5mY3hwX21vZDsKKwlzdHJ1Y3QgYmZhX2ZjeHBfd3FlX3MgKndxZTsKKworCWJmYV9xX2RlcSgmbW9kLT53YWl0X3EsICZ3cWUpOworCWlmICh3cWUpIHsKKwkJYmZhX3RyYyhtb2QtPmJmYSwgZmN4cC0+ZmN4cF90YWcpOworCQl3cWUtPmFsbG9jX2NiZm4od3FlLT5hbGxvY19jYmFyZywgZmN4cCk7CisJCXJldHVybjsKKwl9CisKKwliZmFfYXNzZXJ0KGJmYV9xX2lzX29uX3EoJm1vZC0+ZmN4cF9hY3RpdmVfcSwgZmN4cCkpOworCWxpc3RfZGVsKCZmY3hwLT5xZSk7CisJbGlzdF9hZGRfdGFpbCgmZmN4cC0+cWUsICZtb2QtPmZjeHBfZnJlZV9xKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3hwX251bGxfY29tcCh2b2lkICpiZmFkX2ZjeHAsIHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwLCB2b2lkICpjYmFyZywKKwkJICAgICAgIGJmYV9zdGF0dXNfdCByZXFfc3RhdHVzLCB1MzIgcnNwX2xlbiwKKwkJICAgICAgIHUzMiByZXNpZF9sZW4sIHN0cnVjdCBmY2hzX3MgKnJzcF9mY2hzKQoreworCS8qKmRpc2NhcmRlZCBmY3hwIGNvbXBsZXRpb24gKi8KK30KKworc3RhdGljIHZvaWQKK19fYmZhX2ZjeHBfc2VuZF9jYmZuKHZvaWQgKmNiYXJnLCBiZmFfYm9vbGVhbl90IGNvbXBsZXRlKQoreworCXN0cnVjdCBiZmFfZmN4cF9zICpmY3hwID0gY2Jhcmc7CisKKwlpZiAoY29tcGxldGUpIHsKKwkJZmN4cC0+c2VuZF9jYmZuKGZjeHAtPmNhbGxlciwgZmN4cCwgZmN4cC0+c2VuZF9jYmFyZywKKwkJCQlmY3hwLT5yc3Bfc3RhdHVzLCBmY3hwLT5yc3BfbGVuLAorCQkJCWZjeHAtPnJlc2lkdWVfbGVuLCAmZmN4cC0+cnNwX2ZjaHMpOworCX0gZWxzZSB7CisJCWJmYV9mY3hwX2ZyZWUoZmN4cCk7CisJfQorfQorCitzdGF0aWMgdm9pZAoraGFsX2ZjeHBfc2VuZF9jb21wKHN0cnVjdCBiZmFfcyAqYmZhLCBzdHJ1Y3QgYmZpX2ZjeHBfc2VuZF9yc3BfcyAqZmN4cF9yc3ApCit7CisJc3RydWN0IGJmYV9mY3hwX21vZF9zCSptb2QgPSBCRkFfRkNYUF9NT0QoYmZhKTsKKwlzdHJ1Y3QgYmZhX2ZjeHBfcyAJKmZjeHA7CisJdTE2CQlmY3hwX3RhZyA9IGJmYV9vc19udG9ocyhmY3hwX3JzcC0+ZmN4cF90YWcpOworCisJYmZhX3RyYyhiZmEsIGZjeHBfdGFnKTsKKworCWZjeHBfcnNwLT5yc3BfbGVuID0gYmZhX29zX250b2hsKGZjeHBfcnNwLT5yc3BfbGVuKTsKKworCS8qKgorCSAqIEB0b2RvIGYvdyBzaG91bGQgbm90IHNldCByZXNpZHVlIHRvIG5vbi0wIHdoZW4gZXZlcnl0aGluZworCSAqICAgICAgIGlzIHJlY2VpdmVkLgorCSAqLworCWlmIChmY3hwX3JzcC0+cmVxX3N0YXR1cyA9PSBCRkFfU1RBVFVTX09LKQorCQlmY3hwX3JzcC0+cmVzaWR1ZV9sZW4gPSAwOworCWVsc2UKKwkJZmN4cF9yc3AtPnJlc2lkdWVfbGVuID0gYmZhX29zX250b2hsKGZjeHBfcnNwLT5yZXNpZHVlX2xlbik7CisKKwlmY3hwID0gQkZBX0ZDWFBfRlJPTV9UQUcobW9kLCBmY3hwX3RhZyk7CisKKwliZmFfYXNzZXJ0KGZjeHAtPnNlbmRfY2JmbiAhPSBOVUxMKTsKKworCWhhbF9mY3hwX3J4X3Bsb2cobW9kLT5iZmEsIGZjeHAsIGZjeHBfcnNwKTsKKworCWlmIChmY3hwLT5zZW5kX2NiZm4gIT0gTlVMTCkgeworCQlpZiAoZmN4cC0+Y2FsbGVyID09IE5VTEwpIHsKKwkJCWJmYV90cmMobW9kLT5iZmEsIGZjeHAtPmZjeHBfdGFnKTsKKworCQkJZmN4cC0+c2VuZF9jYmZuKGZjeHAtPmNhbGxlciwgZmN4cCwgZmN4cC0+c2VuZF9jYmFyZywKKwkJCQkJZmN4cF9yc3AtPnJlcV9zdGF0dXMsIGZjeHBfcnNwLT5yc3BfbGVuLAorCQkJCQlmY3hwX3JzcC0+cmVzaWR1ZV9sZW4sICZmY3hwX3JzcC0+ZmNocyk7CisJCQkvKgorCQkJICogZmN4cCBhdXRvbWF0aWNhbGx5IGZyZWVkIG9uIHJldHVybiBmcm9tIHRoZSBjYWxsYmFjaworCQkJICovCisJCQliZmFfZmN4cF9mcmVlKGZjeHApOworCQl9IGVsc2UgeworCQkJYmZhX3RyYyhtb2QtPmJmYSwgZmN4cC0+ZmN4cF90YWcpOworCQkJZmN4cC0+cnNwX3N0YXR1cyA9IGZjeHBfcnNwLT5yZXFfc3RhdHVzOworCQkJZmN4cC0+cnNwX2xlbiA9IGZjeHBfcnNwLT5yc3BfbGVuOworCQkJZmN4cC0+cmVzaWR1ZV9sZW4gPSBmY3hwX3JzcC0+cmVzaWR1ZV9sZW47CisJCQlmY3hwLT5yc3BfZmNocyA9IGZjeHBfcnNwLT5mY2hzOworCisJCQliZmFfY2JfcXVldWUoYmZhLCAmZmN4cC0+aGNiX3FlLAorCQkJCSAgICAgIF9fYmZhX2ZjeHBfc2VuZF9jYmZuLCBmY3hwKTsKKwkJfQorCX0gZWxzZSB7CisJCWJmYV90cmMoYmZhLCBmY3hwX3RhZyk7CisJfQorfQorCitzdGF0aWMgdm9pZAoraGFsX2ZjeHBfc2V0X2xvY2FsX3NnZXMoc3RydWN0IGJmaV9zZ2VfcyAqc2dlLCB1MzIgcmVxbGVuLCB1NjQgcmVxX3BhKQoreworCXVuaW9uIGJmaV9hZGRyX3UgICAgICBzZ2FfemVybyA9IHsgezB9IH07CisKKwlzZ2UtPnNnX2xlbiA9IHJlcWxlbjsKKwlzZ2UtPmZsYWdzID0gQkZJX1NHRV9EQVRBX0xBU1Q7CisJYmZhX2RtYV9hZGRyX3NldChzZ2VbMF0uc2dhLCByZXFfcGEpOworCWJmYV9zZ2VfdG9fYmUoc2dlKTsKKwlzZ2UrKzsKKworCXNnZS0+c2dhID0gc2dhX3plcm87CisJc2dlLT5zZ19sZW4gPSByZXFsZW47CisJc2dlLT5mbGFncyA9IEJGSV9TR0VfUEdETEVOOworCWJmYV9zZ2VfdG9fYmUoc2dlKTsKK30KKworc3RhdGljIHZvaWQKK2hhbF9mY3hwX3R4X3Bsb2coc3RydWN0IGJmYV9zICpiZmEsIHUzMiByZXFsZW4sIHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwLAorCQkgc3RydWN0IGZjaHNfcyAqZmNocykKK3sKKwkvKgorCSAqIFRPRE86IFRYIG94X2lkCisJICovCisJaWYgKHJlcWxlbiA+IDApIHsKKwkJaWYgKGZjeHAtPnVzZV9pcmVxYnVmKSB7CisJCQl1MzIgICAgICAgIHBsZF93MCA9CisJCQkJKigodTMyICopIEJGQV9GQ1hQX1JFUV9QTEQoZmN4cCkpOworCisJCQliZmFfcGxvZ19mY2hkcl9hbmRfcGwoYmZhLT5wbG9nLCBCRkFfUExfTUlEX0hBTF9GQ1hQLAorCQkJCUJGQV9QTF9FSURfVFgsCisJCQkJcmVxbGVuICsgc2l6ZW9mKHN0cnVjdCBmY2hzX3MpLCBmY2hzLCBwbGRfdzApOworCQl9IGVsc2UgeworCQkJYmZhX3Bsb2dfZmNoZHIoYmZhLT5wbG9nLCBCRkFfUExfTUlEX0hBTF9GQ1hQLAorCQkJCUJGQV9QTF9FSURfVFgsIHJlcWxlbiArIHNpemVvZihzdHJ1Y3QgZmNoc19zKSwKKwkJCQlmY2hzKTsKKwkJfQorCX0gZWxzZSB7CisJCWJmYV9wbG9nX2ZjaGRyKGJmYS0+cGxvZywgQkZBX1BMX01JRF9IQUxfRkNYUCwgQkZBX1BMX0VJRF9UWCwKKwkJCSAgICAgICByZXFsZW4gKyBzaXplb2Yoc3RydWN0IGZjaHNfcyksIGZjaHMpOworCX0KK30KKworc3RhdGljIHZvaWQKK2hhbF9mY3hwX3J4X3Bsb2coc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwLAorCQkgc3RydWN0IGJmaV9mY3hwX3NlbmRfcnNwX3MgKmZjeHBfcnNwKQoreworCWlmIChmY3hwX3JzcC0+cnNwX2xlbiA+IDApIHsKKwkJaWYgKGZjeHAtPnVzZV9pcnNwYnVmKSB7CisJCQl1MzIgICAgICAgIHBsZF93MCA9CisJCQkJKigodTMyICopIEJGQV9GQ1hQX1JTUF9QTEQoZmN4cCkpOworCisJCQliZmFfcGxvZ19mY2hkcl9hbmRfcGwoYmZhLT5wbG9nLCBCRkFfUExfTUlEX0hBTF9GQ1hQLAorCQkJCQkgICAgICBCRkFfUExfRUlEX1JYLAorCQkJCQkgICAgICAodTE2KSBmY3hwX3JzcC0+cnNwX2xlbiwKKwkJCQkJICAgICAgJmZjeHBfcnNwLT5mY2hzLCBwbGRfdzApOworCQl9IGVsc2UgeworCQkJYmZhX3Bsb2dfZmNoZHIoYmZhLT5wbG9nLCBCRkFfUExfTUlEX0hBTF9GQ1hQLAorCQkJCSAgICAgICBCRkFfUExfRUlEX1JYLAorCQkJCSAgICAgICAodTE2KSBmY3hwX3JzcC0+cnNwX2xlbiwKKwkJCQkgICAgICAgJmZjeHBfcnNwLT5mY2hzKTsKKwkJfQorCX0gZWxzZSB7CisJCWJmYV9wbG9nX2ZjaGRyKGJmYS0+cGxvZywgQkZBX1BMX01JRF9IQUxfRkNYUCwgQkZBX1BMX0VJRF9SWCwKKwkJCSAgICAgICAodTE2KSBmY3hwX3JzcC0+cnNwX2xlbiwgJmZjeHBfcnNwLT5mY2hzKTsKKwl9Cit9CisKKy8qKgorICogSGFuZGxlciB0byByZXN1bWUgc2VuZGluZyBmY3hwIHdoZW4gc3BhY2UgaW4gYXZhaWxhYmxlIGluIGNwZSBxdWV1ZS4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3hwX3FyZXN1bWUodm9pZCAqY2JhcmcpCit7CisJc3RydWN0IGJmYV9mY3hwX3MJCSpmY3hwID0gY2Jhcmc7CisJc3RydWN0IGJmYV9zCQkJKmJmYSA9IGZjeHAtPmZjeHBfbW9kLT5iZmE7CisJc3RydWN0IGJmaV9mY3hwX3NlbmRfcmVxX3MJKnNlbmRfcmVxOworCisJZmN4cC0+cmVxcV93YWl0aW5nID0gQkZBX0ZBTFNFOworCXNlbmRfcmVxID0gYmZhX3JlcXFfbmV4dChiZmEsIEJGQV9SRVFRX0ZDWFApOworCWJmYV9mY3hwX3F1ZXVlKGZjeHAsIHNlbmRfcmVxKTsKK30KKworLyoqCisgKiBRdWV1ZSBmY3hwIHNlbmQgcmVxdWVzdCB0byBmb2ltcndhcmUuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmN4cF9xdWV1ZShzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cCwgc3RydWN0IGJmaV9mY3hwX3NlbmRfcmVxX3MgKnNlbmRfcmVxKQoreworCXN0cnVjdCBiZmFfcyAgICAgIAkJKmJmYSA9IGZjeHAtPmZjeHBfbW9kLT5iZmE7CisJc3RydWN0IGJmYV9mY3hwX3JlcV9pbmZvX3MJKnJlcWkgPSAmZmN4cC0+cmVxX2luZm87CisJc3RydWN0IGJmYV9mY3hwX3JzcF9pbmZvX3MJKnJzcGkgPSAmZmN4cC0+cnNwX2luZm87CisJc3RydWN0IGJmYV9ycG9ydF9zCQkqcnBvcnQgPSByZXFpLT5iZmFfcnBvcnQ7CisKKwliZmlfaDJpX3NldChzZW5kX3JlcS0+bWgsIEJGSV9NQ19GQ1hQLCBCRklfRkNYUF9IMklfU0VORF9SRVEsCisJCQliZmFfbHB1aWQoYmZhKSk7CisKKwlzZW5kX3JlcS0+ZmN4cF90YWcgPSBiZmFfb3NfaHRvbnMoZmN4cC0+ZmN4cF90YWcpOworCWlmIChycG9ydCkgeworCQlzZW5kX3JlcS0+cnBvcnRfZndfaG5kbCA9IHJwb3J0LT5md19oYW5kbGU7CisJCXNlbmRfcmVxLT5tYXhfZnJtc3ogPSBiZmFfb3NfaHRvbnMocnBvcnQtPnJwb3J0X2luZm8ubWF4X2ZybXN6KTsKKwkJaWYgKHNlbmRfcmVxLT5tYXhfZnJtc3ogPT0gMCkKKwkJCXNlbmRfcmVxLT5tYXhfZnJtc3ogPSBiZmFfb3NfaHRvbnMoRkNfTUFYX1BEVVNaKTsKKwl9IGVsc2UgeworCQlzZW5kX3JlcS0+cnBvcnRfZndfaG5kbCA9IDA7CisJCXNlbmRfcmVxLT5tYXhfZnJtc3ogPSBiZmFfb3NfaHRvbnMoRkNfTUFYX1BEVVNaKTsKKwl9CisKKwlzZW5kX3JlcS0+dmZfaWQgPSBiZmFfb3NfaHRvbnMocmVxaS0+dmZfaWQpOworCXNlbmRfcmVxLT5scF90YWcgPSByZXFpLT5scF90YWc7CisJc2VuZF9yZXEtPmNsYXNzID0gcmVxaS0+Y2xhc3M7CisJc2VuZF9yZXEtPnJzcF90aW1lb3V0ID0gcnNwaS0+cnNwX3RpbWVvdXQ7CisJc2VuZF9yZXEtPmN0cyA9IHJlcWktPmN0czsKKwlzZW5kX3JlcS0+ZmNocyA9IHJlcWktPmZjaHM7CisKKwlzZW5kX3JlcS0+cmVxX2xlbiA9IGJmYV9vc19odG9ubChyZXFpLT5yZXFfdG90X2xlbik7CisJc2VuZF9yZXEtPnJzcF9tYXhsZW4gPSBiZmFfb3NfaHRvbmwocnNwaS0+cnNwX21heGxlbik7CisKKwkvKgorCSAqIHNldHVwIHJlcSBzZ2xlcworCSAqLworCWlmIChmY3hwLT51c2VfaXJlcWJ1ZiA9PSAxKSB7CisJCWhhbF9mY3hwX3NldF9sb2NhbF9zZ2VzKHNlbmRfcmVxLT5yZXFfc2dlLCByZXFpLT5yZXFfdG90X2xlbiwKKwkJCQkJQkZBX0ZDWFBfUkVRX1BMRF9QQShmY3hwKSk7CisJfSBlbHNlIHsKKwkJaWYgKGZjeHAtPm5yZXFfc2dsZXMgPiAwKSB7CisJCQliZmFfYXNzZXJ0KGZjeHAtPm5yZXFfc2dsZXMgPT0gMSk7CisJCQloYWxfZmN4cF9zZXRfbG9jYWxfc2dlcyhzZW5kX3JlcS0+cmVxX3NnZSwKKwkJCQkJCXJlcWktPnJlcV90b3RfbGVuLAorCQkJCQkJZmN4cC0+cmVxX3NnYV9jYmZuKGZjeHAtPmNhbGxlciwKKwkJCQkJCQkJICAgMCkpOworCQl9IGVsc2UgeworCQkJYmZhX2Fzc2VydChyZXFpLT5yZXFfdG90X2xlbiA9PSAwKTsKKwkJCWhhbF9mY3hwX3NldF9sb2NhbF9zZ2VzKHNlbmRfcmVxLT5yc3Bfc2dlLCAwLCAwKTsKKwkJfQorCX0KKworCS8qCisJICogc2V0dXAgcnNwIHNnbGVzCisJICovCisJaWYgKGZjeHAtPnVzZV9pcnNwYnVmID09IDEpIHsKKwkJYmZhX2Fzc2VydChyc3BpLT5yc3BfbWF4bGVuIDw9IEJGQV9GQ1hQX01BWF9MQlVGX1NaKTsKKworCQloYWxfZmN4cF9zZXRfbG9jYWxfc2dlcyhzZW5kX3JlcS0+cnNwX3NnZSwgcnNwaS0+cnNwX21heGxlbiwKKwkJCQkJQkZBX0ZDWFBfUlNQX1BMRF9QQShmY3hwKSk7CisKKwl9IGVsc2UgeworCQlpZiAoZmN4cC0+bnJzcF9zZ2xlcyA+IDApIHsKKwkJCWJmYV9hc3NlcnQoZmN4cC0+bnJzcF9zZ2xlcyA9PSAxKTsKKwkJCWhhbF9mY3hwX3NldF9sb2NhbF9zZ2VzKHNlbmRfcmVxLT5yc3Bfc2dlLAorCQkJCQkJcnNwaS0+cnNwX21heGxlbiwKKwkJCQkJCWZjeHAtPnJzcF9zZ2FfY2JmbihmY3hwLT5jYWxsZXIsCisJCQkJCQkJCSAgIDApKTsKKwkJfSBlbHNlIHsKKwkJCWJmYV9hc3NlcnQocnNwaS0+cnNwX21heGxlbiA9PSAwKTsKKwkJCWhhbF9mY3hwX3NldF9sb2NhbF9zZ2VzKHNlbmRfcmVxLT5yc3Bfc2dlLCAwLCAwKTsKKwkJfQorCX0KKworCWhhbF9mY3hwX3R4X3Bsb2coYmZhLCByZXFpLT5yZXFfdG90X2xlbiwgZmN4cCwgJnJlcWktPmZjaHMpOworCisJYmZhX3JlcXFfcHJvZHVjZShiZmEsIEJGQV9SRVFRX0ZDWFApOworCisJYmZhX3RyYyhiZmEsIGJmYV9yZXFxX3BpKGJmYSwgQkZBX1JFUVFfRkNYUCkpOworCWJmYV90cmMoYmZhLCBiZmFfcmVxcV9jaShiZmEsIEJGQV9SRVFRX0ZDWFApKTsKK30KKworCisvKioKKyAqICBoYWxfZmN4cF9hcGkgQkZBIEZDWFAgQVBJCisgKi8KKworLyoqCisgKiBBbGxvY2F0ZSBhbiBGQ1hQIGluc3RhbmNlIHRvIHNlbmQgYSByZXNwb25zZSBvciB0byBzZW5kIGEgcmVxdWVzdAorICogdGhhdCBoYXMgYSByZXNwb25zZS4gUmVxdWVzdC9yZXNwb25zZSBidWZmZXJzIGFyZSBhbGxvY2F0ZWQgYnkgY2FsbGVyLgorICoKKyAqIEBwYXJhbVtpbl0JYmZhCQlCRkEgYmZhIGluc3RhbmNlCisgKiBAcGFyYW1baW5dCW5yZXFfc2dsZXMJTnVtYmVyIG9mIFNHIGVsZW1lbnRzIHJlcXVpcmVkIGZvciByZXF1ZXN0CisgKiAJCQkJYnVmZmVyLiAwLCBpZiBmY3hwIGludGVybmFsIGJ1ZmZlcnMgYXJlCXVzZWQuCisgKiAJCQkJVXNlIGJmYV9mY3hwX2dldF9yZXFidWYoKSB0byBnZXQgdGhlCisgKiAJCQkJaW50ZXJuYWwgcmVxIGJ1ZmZlci4KKyAqIEBwYXJhbVtpbl0JcmVxX3NnbGVzCVNHIGVsZW1lbnRzIGRlc2NyaWJpbmcgcmVxdWVzdCBidWZmZXIuIFdpbGwgYmUKKyAqIAkJCQljb3BpZWQgaW4gYnkgQkZBIGFuZCBoZW5jZSBjYW4gYmUgZnJlZWQgb24KKyAqIAkJCQlyZXR1cm4gZnJvbSB0aGlzIGZ1bmN0aW9uLgorICogQHBhcmFtW2luXQlnZXRfcmVxX3NnYQlmdW5jdGlvbiBwdHIgdG8gYmUgY2FsbGVkIHRvIGdldCBhIHJlcXVlc3QgU0cKKyAqIAkJCQlBZGRyZXNzIChnaXZlbiB0aGUgc2dlIGluZGV4KS4KKyAqIEBwYXJhbVtpbl0JZ2V0X3JlcV9zZ2xlbglmdW5jdGlvbiBwdHIgdG8gYmUgY2FsbGVkIHRvIGdldCBhIHJlcXVlc3QgU0cKKyAqIAkJCQlsZW4gKGdpdmVuIHRoZSBzZ2UgaW5kZXgpLgorICogQHBhcmFtW2luXQlnZXRfcnNwX3NnYQlmdW5jdGlvbiBwdHIgdG8gYmUgY2FsbGVkIHRvIGdldCBhIHJlc3BvbnNlIFNHCisgKiAJCQkJQWRkcmVzcyAoZ2l2ZW4gdGhlIHNnZSBpbmRleCkuCisgKiBAcGFyYW1baW5dCWdldF9yc3Bfc2dsZW4JZnVuY3Rpb24gcHRyIHRvIGJlIGNhbGxlZCB0byBnZXQgYSByZXNwb25zZSBTRworICogCQkJCWxlbiAoZ2l2ZW4gdGhlIHNnZSBpbmRleCkuCisgKgorICogQHJldHVybiBGQ1hQIGluc3RhbmNlLiBOVUxMIG9uIGZhaWx1cmUuCisgKi8KK3N0cnVjdCBiZmFfZmN4cF9zICoKK2JmYV9mY3hwX2FsbG9jKHZvaWQgKmNhbGxlciwgc3RydWN0IGJmYV9zICpiZmEsIGludCBucmVxX3NnbGVzLAorCQkJaW50IG5yc3Bfc2dsZXMsIGJmYV9mY3hwX2dldF9zZ2FkZHJfdCByZXFfc2dhX2NiZm4sCisJCQliZmFfZmN4cF9nZXRfc2dsZW5fdCByZXFfc2dsZW5fY2JmbiwKKwkJCWJmYV9mY3hwX2dldF9zZ2FkZHJfdCByc3Bfc2dhX2NiZm4sCisJCQliZmFfZmN4cF9nZXRfc2dsZW5fdCByc3Bfc2dsZW5fY2JmbikKK3sKKwlzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cCA9IE5VTEw7CisJdTMyICAgICAgICBucmVxX3NncGcsIG5yc3Bfc2dwZzsKKworCWJmYV9hc3NlcnQoYmZhICE9IE5VTEwpOworCisJZmN4cCA9IGJmYV9mY3hwX2dldChCRkFfRkNYUF9NT0QoYmZhKSk7CisJaWYgKGZjeHAgPT0gTlVMTCkKKwkJcmV0dXJuIChOVUxMKTsKKworCWJmYV90cmMoYmZhLCBmY3hwLT5mY3hwX3RhZyk7CisKKwlmY3hwLT5jYWxsZXIgPSBjYWxsZXI7CisKKwlpZiAobnJlcV9zZ2xlcyA9PSAwKSB7CisJCWZjeHAtPnVzZV9pcmVxYnVmID0gMTsKKwl9IGVsc2UgeworCQliZmFfYXNzZXJ0KHJlcV9zZ2FfY2JmbiAhPSBOVUxMKTsKKwkJYmZhX2Fzc2VydChyZXFfc2dsZW5fY2JmbiAhPSBOVUxMKTsKKworCQlmY3hwLT51c2VfaXJlcWJ1ZiA9IDA7CisJCWZjeHAtPnJlcV9zZ2FfY2JmbiA9IHJlcV9zZ2FfY2JmbjsKKwkJZmN4cC0+cmVxX3NnbGVuX2NiZm4gPSByZXFfc2dsZW5fY2JmbjsKKworCQlmY3hwLT5ucmVxX3NnbGVzID0gbnJlcV9zZ2xlczsKKworCQkvKgorCQkgKiBhbGxvYyByZXF1aXJlZCBzZ3BncworCQkgKi8KKwkJaWYgKG5yZXFfc2dsZXMgPiBCRklfU0dFX0lOTElORSkgeworCQkJbnJlcV9zZ3BnID0gQkZBX1NHUEdfTlBBR0UobnJlcV9zZ2xlcyk7CisKKwkJCWlmIChiZmFfc2dwZ19tYWxsb2MKKwkJCSAgICAoYmZhLCAmZmN4cC0+cmVxX3NncGdfcSwgbnJlcV9zZ3BnKQorCQkJICAgICE9IEJGQV9TVEFUVVNfT0spIHsKKwkJCQkvKiBiZmFfc2dwZ193YWl0KGJmYSwgJmZjeHAtPnJlcV9zZ3BnX3dxZSwKKwkJCQlucmVxX3NncGcpOyAqLworCQkJCS8qCisJCQkJICogVE9ETworCQkJCSAqLworCQkJfQorCQl9CisJfQorCisJaWYgKG5yc3Bfc2dsZXMgPT0gMCkgeworCQlmY3hwLT51c2VfaXJzcGJ1ZiA9IDE7CisJfSBlbHNlIHsKKwkJYmZhX2Fzc2VydChyc3Bfc2dhX2NiZm4gIT0gTlVMTCk7CisJCWJmYV9hc3NlcnQocnNwX3NnbGVuX2NiZm4gIT0gTlVMTCk7CisKKwkJZmN4cC0+dXNlX2lyc3BidWYgPSAwOworCQlmY3hwLT5yc3Bfc2dhX2NiZm4gPSByc3Bfc2dhX2NiZm47CisJCWZjeHAtPnJzcF9zZ2xlbl9jYmZuID0gcnNwX3NnbGVuX2NiZm47CisKKwkJZmN4cC0+bnJzcF9zZ2xlcyA9IG5yc3Bfc2dsZXM7CisJCS8qCisJCSAqIGFsbG9jIHJlcXVpcmVkIHNncGdzCisJCSAqLworCQlpZiAobnJzcF9zZ2xlcyA+IEJGSV9TR0VfSU5MSU5FKSB7CisJCQlucnNwX3NncGcgPSBCRkFfU0dQR19OUEFHRShucmVxX3NnbGVzKTsKKworCQkJaWYgKGJmYV9zZ3BnX21hbGxvYworCQkJICAgIChiZmEsICZmY3hwLT5yc3Bfc2dwZ19xLCBucnNwX3NncGcpCisJCQkgICAgIT0gQkZBX1NUQVRVU19PSykgeworCQkJCS8qIGJmYV9zZ3BnX3dhaXQoYmZhLCAmZmN4cC0+cnNwX3NncGdfd3FlLAorCQkJCW5yc3Bfc2dwZyk7ICovCisJCQkJLyoKKwkJCQkgKiBUT0RPCisJCQkJICovCisJCQl9CisJCX0KKwl9CisKKwlyZXR1cm4gKGZjeHApOworfQorCisvKioKKyAqIEdldCB0aGUgaW50ZXJuYWwgcmVxdWVzdCBidWZmZXIgcG9pbnRlcgorICoKKyAqIEBwYXJhbVtpbl0JZmN4cAlCRkEgZmN4cCBwb2ludGVyCisgKgorICogQHJldHVybiAJCXBvaW50ZXIgdG8gdGhlIGludGVybmFsIHJlcXVlc3QgYnVmZmVyCisgKi8KK3ZvaWQgKgorYmZhX2ZjeHBfZ2V0X3JlcWJ1ZihzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cCkKK3sKKwlzdHJ1Y3QgYmZhX2ZjeHBfbW9kX3MgKm1vZCA9IGZjeHAtPmZjeHBfbW9kOworCXZvaWQJKnJlcWJ1ZjsKKworCWJmYV9hc3NlcnQoZmN4cC0+dXNlX2lyZXFidWYgPT0gMSk7CisJcmVxYnVmID0gKCh1OCAqKW1vZC0+cmVxX3BsZF9saXN0X2t2YSkgKworCQkJZmN4cC0+ZmN4cF90YWcgKiBtb2QtPnJlcV9wbGRfc3o7CisJcmV0dXJuIHJlcWJ1ZjsKK30KKwordTMyCitiZmFfZmN4cF9nZXRfcmVxYnVmc3ooc3RydWN0IGJmYV9mY3hwX3MgKmZjeHApCit7CisJc3RydWN0IGJmYV9mY3hwX21vZF9zICptb2QgPSBmY3hwLT5mY3hwX21vZDsKKworCXJldHVybiBtb2QtPnJlcV9wbGRfc3o7Cit9CisKKy8qKgorICogR2V0IHRoZSBpbnRlcm5hbCByZXNwb25zZSBidWZmZXIgcG9pbnRlcgorICoKKyAqIEBwYXJhbVtpbl0JZmN4cAlCRkEgZmN4cCBwb2ludGVyCisgKgorICogQHJldHVybgkJcG9pbnRlciB0byB0aGUgaW50ZXJuYWwgcmVxdWVzdCBidWZmZXIKKyAqLwordm9pZCAqCitiZmFfZmN4cF9nZXRfcnNwYnVmKHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwKQoreworCXN0cnVjdCBiZmFfZmN4cF9tb2RfcyAqbW9kID0gZmN4cC0+ZmN4cF9tb2Q7CisJdm9pZAkqcnNwYnVmOworCisJYmZhX2Fzc2VydChmY3hwLT51c2VfaXJzcGJ1ZiA9PSAxKTsKKworCXJzcGJ1ZiA9ICgodTggKiltb2QtPnJzcF9wbGRfbGlzdF9rdmEpICsKKwkJCWZjeHAtPmZjeHBfdGFnICogbW9kLT5yc3BfcGxkX3N6OworCXJldHVybiByc3BidWY7Cit9CisKKy8qKgorICogCQlGcmVlIHRoZSBCRkEgRkNYUAorICoKKyAqIEBwYXJhbVtpbl0JZmN4cAkJCUJGQSBmY3hwIHBvaW50ZXIKKyAqCisgKiBAcmV0dXJuIAkJdm9pZAorICovCit2b2lkCitiZmFfZmN4cF9mcmVlKHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwKQoreworCXN0cnVjdCBiZmFfZmN4cF9tb2RfcyAqbW9kID0gZmN4cC0+ZmN4cF9tb2Q7CisKKwliZmFfYXNzZXJ0KGZjeHAgIT0gTlVMTCk7CisJYmZhX3RyYyhtb2QtPmJmYSwgZmN4cC0+ZmN4cF90YWcpOworCWJmYV9mY3hwX3B1dChmY3hwKTsKK30KKworLyoqCisgKiBTZW5kIGEgRkNYUCByZXF1ZXN0CisgKgorICogQHBhcmFtW2luXQlmY3hwCUJGQSBmY3hwIHBvaW50ZXIKKyAqIEBwYXJhbVtpbl0JcnBvcnQJQkZBIHJwb3J0IHBvaW50ZXIuIENvdWxkIGJlIGxlZnQgTlVMTCBmb3IgV0tBIHJwb3J0cworICogQHBhcmFtW2luXQl2Zl9pZAl2aXJ0dWFsIEZhYnJpYyBJRAorICogQHBhcmFtW2luXQlscF90YWcgIGxwb3J0IHRhZworICogQHBhcmFtW2luXQljdHMJdXNlIENvbnRpbm91cyBzZXF1ZW5jZQorICogQHBhcmFtW2luXQljb3MJZmMgQ2xhc3Mgb2YgU2VydmljZQorICogQHBhcmFtW2luXQlyZXFsZW4JcmVxdWVzdCBsZW5ndGgsIGRvZXMgbm90IGluY2x1ZGUgRkNIUyBsZW5ndGgKKyAqIEBwYXJhbVtpbl0JZmNocwlmYyBIZWFkZXIgUG9pbnRlci4gVGhlIGhlYWRlciBjb250ZW50IHdpbGwgYmUgY29waWVkCisgKgkJCWluIGJ5IEJGQS4KKyAqCisgKiBAcGFyYW1baW5dCWNiZm4JY2FsbCBiYWNrIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBvbiByZWNlaXZpbmcKKyAqIAkJCQkJCQkJdGhlIHJlc3BvbnNlCisgKiBAcGFyYW1baW5dCWNiYXJnCWFyZyBmb3IgY2JmbgorICogQHBhcmFtW2luXQlyc3BfdGltZW91dAorICoJCQlyZXNwb25zZSB0aW1lb3V0CisgKgorICogQHJldHVybgkJYmZhX3N0YXR1c190CisgKi8KK3ZvaWQKK2JmYV9mY3hwX3NlbmQoc3RydWN0IGJmYV9mY3hwX3MgKmZjeHAsIHN0cnVjdCBiZmFfcnBvcnRfcyAqcnBvcnQsCisJCXUxNiB2Zl9pZCwgdTggbHBfdGFnLCBiZmFfYm9vbGVhbl90IGN0cywgZW51bSBmY19jb3MgY29zLAorCQl1MzIgcmVxbGVuLCBzdHJ1Y3QgZmNoc19zICpmY2hzLCBiZmFfY2JfZmN4cF9zZW5kX3QgY2JmbiwKKwkJdm9pZCAqY2JhcmcsIHUzMiByc3BfbWF4bGVuLCB1OCByc3BfdGltZW91dCkKK3sKKwlzdHJ1Y3QgYmZhX3MJCQkqYmZhICA9IGZjeHAtPmZjeHBfbW9kLT5iZmE7CisJc3RydWN0IGJmYV9mY3hwX3JlcV9pbmZvX3MJKnJlcWkgPSAmZmN4cC0+cmVxX2luZm87CisJc3RydWN0IGJmYV9mY3hwX3JzcF9pbmZvX3MJKnJzcGkgPSAmZmN4cC0+cnNwX2luZm87CisJc3RydWN0IGJmaV9mY3hwX3NlbmRfcmVxX3MJKnNlbmRfcmVxOworCisJYmZhX3RyYyhiZmEsIGZjeHAtPmZjeHBfdGFnKTsKKworCS8qKgorCSAqIHNldHVwIHJlcXVlc3QvcmVzcG9uc2UgaW5mbworCSAqLworCXJlcWktPmJmYV9ycG9ydCA9IHJwb3J0OworCXJlcWktPnZmX2lkID0gdmZfaWQ7CisJcmVxaS0+bHBfdGFnID0gbHBfdGFnOworCXJlcWktPmNsYXNzID0gY29zOworCXJzcGktPnJzcF90aW1lb3V0ID0gcnNwX3RpbWVvdXQ7CisJcmVxaS0+Y3RzID0gY3RzOworCXJlcWktPmZjaHMgPSAqZmNoczsKKwlyZXFpLT5yZXFfdG90X2xlbiA9IHJlcWxlbjsKKwlyc3BpLT5yc3BfbWF4bGVuID0gcnNwX21heGxlbjsKKwlmY3hwLT5zZW5kX2NiZm4gPSBjYmZuID8gY2JmbiA6IGJmYV9mY3hwX251bGxfY29tcDsKKwlmY3hwLT5zZW5kX2NiYXJnID0gY2Jhcmc7CisKKwkvKioKKwkgKiBJZiBubyByb29tIGluIENQRSBxdWV1ZSwgd2FpdCBmb3IKKwkgKi8KKwlzZW5kX3JlcSA9IGJmYV9yZXFxX25leHQoYmZhLCBCRkFfUkVRUV9GQ1hQKTsKKwlpZiAoIXNlbmRfcmVxKSB7CisJCWJmYV90cmMoYmZhLCBmY3hwLT5mY3hwX3RhZyk7CisJCWZjeHAtPnJlcXFfd2FpdGluZyA9IEJGQV9UUlVFOworCQliZmFfcmVxcV93YWl0KGJmYSwgQkZBX1JFUVFfRkNYUCwgJmZjeHAtPnJlcXFfd3FlKTsKKwkJcmV0dXJuOworCX0KKworCWJmYV9mY3hwX3F1ZXVlKGZjeHAsIHNlbmRfcmVxKTsKK30KKworLyoqCisgKiBBYm9ydCBhIEJGQSBGQ1hQCisgKgorICogQHBhcmFtW2luXQlmY3hwCUJGQSBmY3hwIHBvaW50ZXIKKyAqCisgKiBAcmV0dXJuIAkJdm9pZAorICovCitiZmFfc3RhdHVzX3QKK2JmYV9mY3hwX2Fib3J0KHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwKQoreworCWJmYV9hc3NlcnQoMCk7CisJcmV0dXJuIChCRkFfU1RBVFVTX09LKTsKK30KKwordm9pZAorYmZhX2ZjeHBfYWxsb2Nfd2FpdChzdHJ1Y3QgYmZhX3MgKmJmYSwgc3RydWN0IGJmYV9mY3hwX3dxZV9zICp3cWUsCisJCQliZmFfZmN4cF9hbGxvY19jYmZuX3QgYWxsb2NfY2Jmbiwgdm9pZCAqYWxsb2NfY2JhcmcpCit7CisJc3RydWN0IGJmYV9mY3hwX21vZF9zICptb2QgPSBCRkFfRkNYUF9NT0QoYmZhKTsKKworCWJmYV9hc3NlcnQobGlzdF9lbXB0eSgmbW9kLT5mY3hwX2ZyZWVfcSkpOworCisJd3FlLT5hbGxvY19jYmZuID0gYWxsb2NfY2JmbjsKKwl3cWUtPmFsbG9jX2NiYXJnID0gYWxsb2NfY2Jhcmc7CisJbGlzdF9hZGRfdGFpbCgmd3FlLT5xZSwgJm1vZC0+d2FpdF9xKTsKK30KKwordm9pZAorYmZhX2ZjeHBfd2FsbG9jX2NhbmNlbChzdHJ1Y3QgYmZhX3MgKmJmYSwgc3RydWN0IGJmYV9mY3hwX3dxZV9zICp3cWUpCit7CisJc3RydWN0IGJmYV9mY3hwX21vZF9zICptb2QgPSBCRkFfRkNYUF9NT0QoYmZhKTsKKworCWJmYV9hc3NlcnQoYmZhX3FfaXNfb25fcSgmbW9kLT53YWl0X3EsIHdxZSkpOworCWxpc3RfZGVsKCZ3cWUtPnFlKTsKK30KKwordm9pZAorYmZhX2ZjeHBfZGlzY2FyZChzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cCkKK3sKKwkvKioKKwkgKiBJZiB3YWl0aW5nIGZvciByb29tIGluIHJlcXVlc3QgcXVldWUsIGNhbmNlbCByZXFxIHdhaXQKKwkgKiBhbmQgZnJlZSBmY3hwLgorCSAqLworCWlmIChmY3hwLT5yZXFxX3dhaXRpbmcpIHsKKwkJZmN4cC0+cmVxcV93YWl0aW5nID0gQkZBX0ZBTFNFOworCQliZmFfcmVxcV93Y2FuY2VsKCZmY3hwLT5yZXFxX3dxZSk7CisJCWJmYV9mY3hwX2ZyZWUoZmN4cCk7CisJCXJldHVybjsKKwl9CisKKwlmY3hwLT5zZW5kX2NiZm4gPSBiZmFfZmN4cF9udWxsX2NvbXA7Cit9CisKKworCisvKioKKyAqICBoYWxfZmN4cF9wdWJsaWMgQkZBIEZDWFAgcHVibGljIGZ1bmN0aW9ucworICovCisKK3ZvaWQKK2JmYV9mY3hwX2lzcihzdHJ1Y3QgYmZhX3MgKmJmYSwgc3RydWN0IGJmaV9tc2dfcyAqbXNnKQoreworCXN3aXRjaCAobXNnLT5taGRyLm1zZ19pZCkgeworCWNhc2UgQkZJX0ZDWFBfSTJIX1NFTkRfUlNQOgorCQloYWxfZmN4cF9zZW5kX2NvbXAoYmZhLCAoc3RydWN0IGJmaV9mY3hwX3NlbmRfcnNwX3MgKikgbXNnKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfdHJjKGJmYSwgbXNnLT5taGRyLm1zZ19pZCk7CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCit1MzIKK2JmYV9mY3hwX2dldF9tYXhyc3Aoc3RydWN0IGJmYV9zICpiZmEpCit7CisJc3RydWN0IGJmYV9mY3hwX21vZF9zICptb2QgPSBCRkFfRkNYUF9NT0QoYmZhKTsKKworCXJldHVybiBtb2QtPnJzcF9wbGRfc3o7Cit9CisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfZmN4cF9wcml2LmggYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9mY3hwX3ByaXYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Y2RhNDkzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfZmN4cF9wcml2LmgKQEAgLTAsMCArMSwxMzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0JGQV9GQ1hQX1BSSVZfSF9fCisjZGVmaW5lIF9fQkZBX0ZDWFBfUFJJVl9IX18KKworI2luY2x1ZGUgPGNzL2JmYV9zbS5oPgorI2luY2x1ZGUgPHByb3RvY29sL2ZjLmg+CisjaW5jbHVkZSA8YmZhX3N2Yy5oPgorI2luY2x1ZGUgPGJmaS9iZmlfZmN4cC5oPgorCisjZGVmaW5lIEJGQV9GQ1hQX01JTiAgICAgCSgxKQorI2RlZmluZSBCRkFfRkNYUF9NQVhfSUJVRl9TWgkoMiAqIDEwMjQgKyAyNTYpCisjZGVmaW5lIEJGQV9GQ1hQX01BWF9MQlVGX1NaCSg0ICogMTAyNCArIDI1NikKKworc3RydWN0IGJmYV9mY3hwX21vZF9zIHsKKwlzdHJ1Y3QgYmZhX3MgICAgICAqYmZhOwkJLyogIGJhY2twb2ludGVyIHRvIEJGQSAqLworCXN0cnVjdCBiZmFfZmN4cF9zICpmY3hwX2xpc3Q7CS8qICBhcnJheSBvZiBGQ1hQcyAqLworCXUxNiAgICAgICAgbnVtX2ZjeHBzOwkvKiAgbWF4IG51bSBGQ1hQIHJlcXVlc3RzICovCisJc3RydWN0IGxpc3RfaGVhZCBmY3hwX2ZyZWVfcTsJLyogIGZyZWUgRkNYUHMgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIGZjeHBfYWN0aXZlX3E7CS8qICBhY3RpdmUgRkNYUHMgKi8KKwl2b2lkCSpyZXFfcGxkX2xpc3Rfa3ZhOwkvKiAgbGlzdCBvZiBGQ1hQIHJlcSBwbGQgKi8KKwl1NjQgcmVxX3BsZF9saXN0X3BhOwkvKiAgbGlzdCBvZiBGQ1hQIHJlcSBwbGQgKi8KKwl2b2lkICpyc3BfcGxkX2xpc3Rfa3ZhOwkJLyogIGxpc3Qgb2YgRkNYUCByZXNwIHBsZCAqLworCXU2NCByc3BfcGxkX2xpc3RfcGE7CS8qICBsaXN0IG9mIEZDWFAgcmVzcCBwbGQgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkICB3YWl0X3E7CQkvKiAgd2FpdCBxdWV1ZSBmb3IgZnJlZSBmY3hwICovCisJdTMyCXJlcV9wbGRfc3o7CisJdTMyCXJzcF9wbGRfc3o7Cit9OworCisjZGVmaW5lIEJGQV9GQ1hQX01PRChfX2JmYSkJCSgmKF9fYmZhKS0+bW9kdWxlcy5mY3hwX21vZCkKKyNkZWZpbmUgQkZBX0ZDWFBfRlJPTV9UQUcoX19tb2QsIF9fdGFnKQkoJihfX21vZCktPmZjeHBfbGlzdFtfX3RhZ10pCisKK3R5cGVkZWYgdm9pZCAgICAoKmZjeHBfc2VuZF9jYl90KSAoc3RydWN0IGJmYV9zICppb2MsIHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwLAorCQkJCSAgIHZvaWQgKmNiX2FyZywgYmZhX3N0YXR1c190IHJlcV9zdGF0dXMsCisJCQkJICAgdTMyIHJzcF9sZW4sIHUzMiByZXNpZF9sZW4sCisJCQkJICAgc3RydWN0IGZjaHNfcyAqcnNwX2ZjaHMpOworCisvKioKKyAqIEluZm9ybWF0aW9uIG5lZWRlZCBmb3IgYSBGQ1hQIHJlcXVlc3QKKyAqLworc3RydWN0IGJmYV9mY3hwX3JlcV9pbmZvX3MgeworCXN0cnVjdCBiZmFfcnBvcnRfcyAqYmZhX3Jwb3J0OwkvKiAgUG9pbnRlciB0byB0aGUgYmZhIHJwb3J0IHRoYXQgd2FzCisJCQkJCSAqcmV0dXJuZWQgZnJvbSBiZmFfcnBvcnRfY3JlYXRlKCkuCisJCQkJCSAqVGhpcyBjb3VsZCBiZSBsZWZ0IE5VTEwgZm9yIFdLQSBvciBmb3IKKwkJCQkJICpGQ1hQIGludGVyYWN0aW9ucyBiZWZvcmUgdGhlIHJwb3J0CisJCQkJCSAqbmV4dXMgaXMgZXN0YWJsaXNoZWQKKwkJCQkJICovCisJc3RydWN0IGZjaHNfcyAgIGZjaHM7CS8qICByZXF1ZXN0IEZDIGhlYWRlciBzdHJ1Y3R1cmUgKi8KKwl1OCBjdHM7CQkvKiAgY29udGlub3VzIHNlcXVlbmNlICovCisJdTggY2xhc3M7CQkvKiAgRkMgY2xhc3MgZm9yIHRoZSByZXF1ZXN0L3Jlc3BvbnNlICovCisJdTE2IG1heF9mcm1zejsJLyogIG1heCBzZW5kIGZyYW1lIHNpemUgKi8KKwl1MTYgdmZfaWQ7CQkvKiAgdnNhbiB0YWcgaWYgYXBwbGljYWJsZSAqLworCXU4CWxwX3RhZzsJCS8qICBscG9ydCB0YWcgKi8KKwl1MzIgcmVxX3RvdF9sZW47CS8qICByZXF1ZXN0IHBheWxvYWQgdG90YWwgbGVuZ3RoICovCit9OworCitzdHJ1Y3QgYmZhX2ZjeHBfcnNwX2luZm9fcyB7CisJc3RydWN0IGZjaHNfcyByc3BfZmNoczsJCS8qICBSZXNwb25zZSBmcmFtZSdzIEZDIGhlYWRlciB3aWxsCisJCQkJCSAqIGJlICpzZW50IGJhY2sgaW4gdGhpcyBmaWVsZCAqLworCXU4ICAgICAgICAgcnNwX3RpbWVvdXQ7CS8qICB0aW1lb3V0IGluIHNlY29uZHMsIDAtbm8gcmVzcG9uc2UKKwkJCQkJICovCisJdTggICAgICAgICByc3ZkMlszXTsKKwl1MzIgICAgICAgIHJzcF9tYXhsZW47CS8qICBtYXggcmVzcG9uc2UgbGVuZ3RoIGV4cGVjdGVkICovCit9OworCitzdHJ1Y3QgYmZhX2ZjeHBfcyB7CisJc3RydWN0IGxpc3RfaGVhZCAJcWU7CQkvKiAgZmN4cCBxdWV1ZSBlbGVtZW50ICovCisJYmZhX3NtX3QgICAgICAgIHNtOyAgICAgICAgICAgICAvKiAgc3RhdGUgbWFjaGluZSAqLworCXZvaWQgICAgICAgICAgIAkqY2FsbGVyOwkvKiAgZHJpdmVyIG9yIGZjcyAqLworCXN0cnVjdCBiZmFfZmN4cF9tb2RfcyAqZmN4cF9tb2Q7CisJCQkJCS8qICBiYWNrIHBvaW50ZXIgdG8gZmN4cCBtb2QgKi8KKwl1MTYgICAgICAgIGZjeHBfdGFnOwkvKiAgaW50ZXJuYWwgdGFnICovCisJc3RydWN0IGJmYV9mY3hwX3JlcV9pbmZvX3MgcmVxX2luZm87CisJCQkJCS8qICByZXF1ZXN0IGluZm8gKi8KKwlzdHJ1Y3QgYmZhX2ZjeHBfcnNwX2luZm9fcyByc3BfaW5mbzsKKwkJCQkJLyogIHJlc3BvbnNlIGluZm8gKi8KKwl1OCAJdXNlX2lyZXFidWY7CS8qICB1c2UgaW50ZXJuYWwgcmVxIGJ1ZiAqLworCXU4ICAgICAgICAgdXNlX2lyc3BidWY7CS8qICB1c2UgaW50ZXJuYWwgcnNwIGJ1ZiAqLworCXUzMiAgICAgICAgbnJlcV9zZ2xlczsJLyogIG51bSByZXF1ZXN0IFNHTEVzICovCisJdTMyICAgICAgICBucnNwX3NnbGVzOwkvKiAgbnVtIHJlc3BvbnNlIFNHTEVzICovCisJc3RydWN0IGxpc3RfaGVhZCByZXFfc2dwZ19xOwkvKiAgU0cgcGFnZXMgZm9yIHJlcXVlc3QgYnVmICovCisJc3RydWN0IGxpc3RfaGVhZCByZXFfc2dwZ193cWU7CS8qICB3YWl0IHF1ZXVlIGZvciByZXEgU0cgcGFnZSAqLworCXN0cnVjdCBsaXN0X2hlYWQgcnNwX3NncGdfcTsJLyogIFNHIHBhZ2VzIGZvciByZXNwb25zZSBidWYgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIHJzcF9zZ3BnX3dxZTsJLyogIHdhaXQgcXVldWUgZm9yIHJzcCBTRyBwYWdlICovCisKKwliZmFfZmN4cF9nZXRfc2dhZGRyX3QgcmVxX3NnYV9jYmZuOworCQkJCQkvKiAgU0cgZWxlbSBhZGRyIHVzZXIgZnVuY3Rpb24gKi8KKwliZmFfZmN4cF9nZXRfc2dsZW5fdCByZXFfc2dsZW5fY2JmbjsKKwkJCQkJLyogIFNHIGVsZW0gbGVuIHVzZXIgZnVuY3Rpb24gKi8KKwliZmFfZmN4cF9nZXRfc2dhZGRyX3QgcnNwX3NnYV9jYmZuOworCQkJCQkvKiAgU0cgZWxlbSBhZGRyIHVzZXIgZnVuY3Rpb24gKi8KKwliZmFfZmN4cF9nZXRfc2dsZW5fdCByc3Bfc2dsZW5fY2JmbjsKKwkJCQkJLyogIFNHIGVsZW0gbGVuIHVzZXIgZnVuY3Rpb24gKi8KKwliZmFfY2JfZmN4cF9zZW5kX3Qgc2VuZF9jYmZuOyAgIC8qICBzZW5kIGNvbXBsZXRpb24gY2FsbGJhY2sgKi8KKwl2b2lkCQkqc2VuZF9jYmFyZzsJLyogIGNhbGxiYWNrIGFyZyAqLworCXN0cnVjdCBiZmFfc2dlX3MgICByZXFfc2dlW0JGQV9GQ1hQX01BWF9TR0VTXTsKKwkJCQkJLyogIHJlcSBTRyBlbGVtcyAqLworCXN0cnVjdCBiZmFfc2dlX3MgICByc3Bfc2dlW0JGQV9GQ1hQX01BWF9TR0VTXTsKKwkJCQkJLyogIHJzcCBTRyBlbGVtcyAqLworCXU4ICAgICAgICAgcnNwX3N0YXR1czsJLyogIGNvbXA6IHJzcCBzdGF0dXMgKi8KKwl1MzIgICAgICAgIHJzcF9sZW47CS8qICBjb21wOiBhY3R1YWwgcmVzcG9uc2UgbGVuICovCisJdTMyICAgICAgICByZXNpZHVlX2xlbjsJLyogIGNvbXA6IHJlc2lkdWFsIHJzcCBsZW5ndGggKi8KKwlzdHJ1Y3QgZmNoc19zICAgICAgICAgIHJzcF9mY2hzOwkvKiAgY29tcDogcmVzcG9uc2UgZmNocyAqLworCXN0cnVjdCBiZmFfY2JfcWVfcyAgICBoY2JfcWU7CS8qICBjb21wOiBjYWxsYmFjayBxZWxlbSAqLworCXN0cnVjdCBiZmFfcmVxcV93YWl0X3MJcmVxcV93cWU7CisJYmZhX2Jvb2xlYW5fdAlyZXFxX3dhaXRpbmc7Cit9OworCisjZGVmaW5lIEJGQV9GQ1hQX1JFUV9QTEQoX2ZjeHApIAkoYmZhX2ZjeHBfZ2V0X3JlcWJ1ZihfZmN4cCkpCisKKyNkZWZpbmUgQkZBX0ZDWFBfUlNQX0ZDSFMoX2ZjeHApIAkoJigoX2ZjeHApLT5yc3BfaW5mby5mY2hzKSkKKyNkZWZpbmUgQkZBX0ZDWFBfUlNQX1BMRChfZmN4cCkgCShiZmFfZmN4cF9nZXRfcnNwYnVmKF9mY3hwKSkKKworI2RlZmluZSBCRkFfRkNYUF9SRVFfUExEX1BBKF9mY3hwKQkJCQkJXAorCSgoX2ZjeHApLT5mY3hwX21vZC0+cmVxX3BsZF9saXN0X3BhICsJCQkJXAorCQkoKF9mY3hwKS0+ZmN4cF9tb2QtPnJlcV9wbGRfc3ogICogKF9mY3hwKS0+ZmN4cF90YWcpKQorCisjZGVmaW5lIEJGQV9GQ1hQX1JTUF9QTERfUEEoX2ZjeHApIAkJCQkJXAorCSgoX2ZjeHApLT5mY3hwX21vZC0+cnNwX3BsZF9saXN0X3BhICsJCQkJXAorCQkoKF9mY3hwKS0+ZmN4cF9tb2QtPnJzcF9wbGRfc3ogKiAoX2ZjeHApLT5mY3hwX3RhZykpCisKK3ZvaWQJYmZhX2ZjeHBfaXNyKHN0cnVjdCBiZmFfcyAqYmZhLCBzdHJ1Y3QgYmZpX21zZ19zICptc2cpOworI2VuZGlmIC8qIF9fQkZBX0ZDWFBfUFJJVl9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2Z3aW1nX3ByaXYuaCBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2Z3aW1nX3ByaXYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZWMxMzU1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfZndpbWdfcHJpdi5oCkBAIC0wLDAgKzEsMzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0JGQV9GV0lNR19QUklWX0hfXworI2RlZmluZSBfX0JGQV9GV0lNR19QUklWX0hfXworCisjZGVmaW5lCUJGSV9GTEFTSF9DSFVOS19TWgkJMjU2CS8qICBGbGFzaCBjaHVuayBzaXplICovCisjZGVmaW5lCUJGSV9GTEFTSF9DSFVOS19TWl9XT1JEUwkoQkZJX0ZMQVNIX0NIVU5LX1NaL3NpemVvZih1MzIpKQorCitleHRlcm4gdTMyICpiZmlfaW1hZ2VfY3RfZ2V0X2NodW5rKHUzMiBvZmYpOworZXh0ZXJuIHUzMiBiZmlfaW1hZ2VfY3Rfc2l6ZTsKK2V4dGVybiB1MzIgKmJmaV9pbWFnZV9jYl9nZXRfY2h1bmsodTMyIG9mZik7CitleHRlcm4gdTMyIGJmaV9pbWFnZV9jYl9zaXplOworZXh0ZXJuIHUzMiAqYmZpX2ltYWdlX2NiOworZXh0ZXJuIHUzMiAqYmZpX2ltYWdlX2N0OworCisjZW5kaWYgLyogX19CRkFfRldJTUdfUFJJVl9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2h3X2NiLmMgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9od19jYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkZTE0MzgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9od19jYi5jCkBAIC0wLDAgKzEsMTQyIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxiZmFfcHJpdi5oPgorI2luY2x1ZGUgPGJmaS9iZmlfY2JyZWcuaD4KKwordm9pZAorYmZhX2h3Y2JfcmVnaW5pdChzdHJ1Y3QgYmZhX3MgKmJmYSkKK3sKKwlzdHJ1Y3QgYmZhX2lvY2ZjX3JlZ3NfcwkqYmZhX3JlZ3MgPSAmYmZhLT5pb2NmYy5iZmFfcmVnczsKKwliZmFfb3NfYWRkcl90CQlrdmEgPSBiZmFfaW9jX2JhcjAoJmJmYS0+aW9jKTsKKwlpbnQgICAgICAgICAgICAgCWksIHEsIGZuID0gYmZhX2lvY19wY2lmbigmYmZhLT5pb2MpOworCisJaWYgKGZuID09IDApIHsKKwkJYmZhX3JlZ3MtPmludHJfc3RhdHVzID0gKGt2YSArIEhPU1RGTjBfSU5UX1NUQVRVUyk7CisJCWJmYV9yZWdzLT5pbnRyX21hc2sgICA9IChrdmEgKyBIT1NURk4wX0lOVF9NU0spOworCX0gZWxzZSB7CisJCWJmYV9yZWdzLT5pbnRyX3N0YXR1cyA9IChrdmEgKyBIT1NURk4xX0lOVF9TVEFUVVMpOworCQliZmFfcmVncy0+aW50cl9tYXNrICAgPSAoa3ZhICsgSE9TVEZOMV9JTlRfTVNLKTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgQkZJX0lPQ19NQVhfQ1FTOyBpKyspIHsKKwkJLyoKKwkJICogQ1BFIHJlZ2lzdGVycworCQkgKi8KKwkJcSA9IENQRV9RX05VTShmbiwgaSk7CisJCWJmYV9yZWdzLT5jcGVfcV9waVtpXSA9IChrdmEgKyBDUEVfUV9QSShxKSk7CisJCWJmYV9yZWdzLT5jcGVfcV9jaVtpXSA9IChrdmEgKyBDUEVfUV9DSShxKSk7CisJCWJmYV9yZWdzLT5jcGVfcV9kZXB0aFtpXSA9IChrdmEgKyBDUEVfUV9ERVBUSChxKSk7CisKKwkJLyoKKwkJICogUk1FIHJlZ2lzdGVycworCQkgKi8KKwkJcSA9IENQRV9RX05VTShmbiwgaSk7CisJCWJmYV9yZWdzLT5ybWVfcV9waVtpXSA9IChrdmEgKyBSTUVfUV9QSShxKSk7CisJCWJmYV9yZWdzLT5ybWVfcV9jaVtpXSA9IChrdmEgKyBSTUVfUV9DSShxKSk7CisJCWJmYV9yZWdzLT5ybWVfcV9kZXB0aFtpXSA9IChrdmEgKyBSTUVfUV9ERVBUSChxKSk7CisJfQorfQorCit2b2lkCitiZmFfaHdjYl9yc3BxX2FjayhzdHJ1Y3QgYmZhX3MgKmJmYSwgaW50IHJzcHEpCit7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfaHdjYl9yc3BxX2Fja19tc2l4KHN0cnVjdCBiZmFfcyAqYmZhLCBpbnQgcnNwcSkKK3sKKwliZmFfcmVnX3dyaXRlKGJmYS0+aW9jZmMuYmZhX3JlZ3MuaW50cl9zdGF0dXMsCisJCV9fSEZOX0lOVF9STUVfUTAgPDwgUk1FX1FfTlVNKGJmYV9pb2NfcGNpZm4oJmJmYS0+aW9jKSwgcnNwcSkpOworfQorCit2b2lkCitiZmFfaHdjYl9tc2l4X2dldHZlY3Moc3RydWN0IGJmYV9zICpiZmEsIHUzMiAqbXNpeF92ZWNzX2JtYXAsCisJCSB1MzIgKm51bV92ZWNzLCB1MzIgKm1heF92ZWNfYml0KQoreworI2RlZmluZSBfX0hGTl9OVU1JTlRTCTEzCisJaWYgKGJmYV9pb2NfcGNpZm4oJmJmYS0+aW9jKSA9PSAwKSB7CisJCSptc2l4X3ZlY3NfYm1hcCA9IChfX0hGTl9JTlRfQ1BFX1EwIHwgX19IRk5fSU5UX0NQRV9RMSB8CisJCQkJICAgX19IRk5fSU5UX0NQRV9RMiB8IF9fSEZOX0lOVF9DUEVfUTMgfAorCQkJCSAgIF9fSEZOX0lOVF9STUVfUTAgfCBfX0hGTl9JTlRfUk1FX1ExIHwKKwkJCQkgICBfX0hGTl9JTlRfUk1FX1EyIHwgX19IRk5fSU5UX1JNRV9RMyB8CisJCQkJICAgX19IRk5fSU5UX01CT1hfTFBVMCk7CisJCSptYXhfdmVjX2JpdCA9IF9fSEZOX0lOVF9NQk9YX0xQVTA7CisJfSBlbHNlIHsKKwkJKm1zaXhfdmVjc19ibWFwID0gKF9fSEZOX0lOVF9DUEVfUTQgfCBfX0hGTl9JTlRfQ1BFX1E1IHwKKwkJCQkgICBfX0hGTl9JTlRfQ1BFX1E2IHwgX19IRk5fSU5UX0NQRV9RNyB8CisJCQkJICAgX19IRk5fSU5UX1JNRV9RNCB8IF9fSEZOX0lOVF9STUVfUTUgfAorCQkJCSAgIF9fSEZOX0lOVF9STUVfUTYgfCBfX0hGTl9JTlRfUk1FX1E3IHwKKwkJCQkgICBfX0hGTl9JTlRfTUJPWF9MUFUxKTsKKwkJKm1heF92ZWNfYml0ID0gX19IRk5fSU5UX01CT1hfTFBVMTsKKwl9CisKKwkqbXNpeF92ZWNzX2JtYXAgfD0gKF9fSEZOX0lOVF9FUlJfRU1DIHwgX19IRk5fSU5UX0VSUl9MUFUwIHwKKwkJCSAgICBfX0hGTl9JTlRfRVJSX0xQVTEgfCBfX0hGTl9JTlRfRVJSX1BTUyk7CisJKm51bV92ZWNzID0gX19IRk5fTlVNSU5UUzsKK30KKworLyoqCisgKiBObyBzcGVjaWFsIHNldHVwIHJlcXVpcmVkIGZvciBjcm9zc2JvdyAtLSB2ZWN0b3IgYXNzaWdubWVudHMgYXJlIGltcGxpY2l0LgorICovCit2b2lkCitiZmFfaHdjYl9tc2l4X2luaXQoc3RydWN0IGJmYV9zICpiZmEsIGludCBudmVjcykKK3sKKwlpbnQgaTsKKworCWJmYV9hc3NlcnQoKG52ZWNzID09IDEpIHx8IChudmVjcyA9PSBfX0hGTl9OVU1JTlRTKSk7CisKKwliZmEtPm1zaXgubnZlY3MgPSBudmVjczsKKwlpZiAobnZlY3MgPT0gMSkgeworCQlmb3IgKGkgPSAwOyBpIDwgQkZBX01TSVhfQ0JfTUFYOyBpKyspCisJCQliZmEtPm1zaXguaGFuZGxlcltpXSA9IGJmYV9tc2l4X2FsbDsKKwkJcmV0dXJuOworCX0KKworCWZvciAoaSA9IEJGQV9NU0lYX0NQRV9RMDsgaSA8PSBCRkFfTVNJWF9DUEVfUTc7IGkrKykKKwkJYmZhLT5tc2l4LmhhbmRsZXJbaV0gPSBiZmFfbXNpeF9yZXFxOworCisJZm9yIChpID0gQkZBX01TSVhfUk1FX1EwOyBpIDw9IEJGQV9NU0lYX1JNRV9RNzsgaSsrKQorCQliZmEtPm1zaXguaGFuZGxlcltpXSA9IGJmYV9tc2l4X3JzcHE7CisKKwlmb3IgKDsgaSA8IEJGQV9NU0lYX0NCX01BWDsgaSsrKQorCQliZmEtPm1zaXguaGFuZGxlcltpXSA9IGJmYV9tc2l4X2xwdV9lcnI7Cit9CisKKy8qKgorICogQ3Jvc3Nib3cgLS0gZHVtbXksIGludGVycnVwdHMgYXJlIG1hc2tlZAorICovCit2b2lkCitiZmFfaHdjYl9tc2l4X2luc3RhbGwoc3RydWN0IGJmYV9zICpiZmEpCit7Cit9CisKK3ZvaWQKK2JmYV9od2NiX21zaXhfdW5pbnN0YWxsKHN0cnVjdCBiZmFfcyAqYmZhKQoreworfQorCisvKioKKyAqIE5vIHNwZWNpYWwgZW5hYmxlL2Rpc2FibGUgLS0gdmVjdG9yIGFzc2lnbm1lbnRzIGFyZSBpbXBsaWNpdC4KKyAqLwordm9pZAorYmZhX2h3Y2JfaXNyX21vZGVfc2V0KHN0cnVjdCBiZmFfcyAqYmZhLCBiZmFfYm9vbGVhbl90IG1zaXgpCit7CisJYmZhLT5pb2NmYy5od2lmLmh3X3JzcHFfYWNrID0gYmZhX2h3Y2JfcnNwcV9hY2tfbXNpeDsKK30KKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2JmYV9od19jdC5jIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfaHdfY3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MWFlNTc0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfaHdfY3QuYwpAQCAtMCwwICsxLDE2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8YmZhX3ByaXYuaD4KKyNpbmNsdWRlIDxiZmkvYmZpX2N0cmVnLmg+CisjaW5jbHVkZSA8YmZhX2lvYy5oPgorCitCRkFfVFJDX0ZJTEUoSEFMLCBJT0NGQ19DVCk7CisKK3N0YXRpYyB1MzIgX19jdF9tc2l4X2Vycl92ZWNfcmVnW10gPSB7CisJSE9TVF9NU0lYX0VSUl9JTkRFWF9GTjAsCisJSE9TVF9NU0lYX0VSUl9JTkRFWF9GTjEsCisJSE9TVF9NU0lYX0VSUl9JTkRFWF9GTjIsCisJSE9TVF9NU0lYX0VSUl9JTkRFWF9GTjMsCit9OworCitzdGF0aWMgdm9pZAorYmZhX2h3Y3RfbXNpeF9scHVfZXJyX3NldChzdHJ1Y3QgYmZhX3MgKmJmYSwgYmZhX2Jvb2xlYW5fdCBtc2l4LCBpbnQgdmVjKQoreworCWludCBmbiA9IGJmYV9pb2NfcGNpZm4oJmJmYS0+aW9jKTsKKwliZmFfb3NfYWRkcl90IGt2YSA9IGJmYV9pb2NfYmFyMCgmYmZhLT5pb2MpOworCisJaWYgKG1zaXgpCisJCWJmYV9yZWdfd3JpdGUoa3ZhICsgX19jdF9tc2l4X2Vycl92ZWNfcmVnW2ZuXSwgdmVjKTsKKwllbHNlCisJCWJmYV9yZWdfd3JpdGUoa3ZhICsgX19jdF9tc2l4X2Vycl92ZWNfcmVnW2ZuXSwgMCk7Cit9CisKKy8qKgorICogRHVtbXkgaW50ZXJydXB0IGhhbmRsZXIgZm9yIGhhbmRsaW5nIHNwdXJpb3VzIGludGVycnVwdCBkdXJpbmcgY2hpcC1yZWluaXQuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaHdjdF9tc2l4X2R1bW15KHN0cnVjdCBiZmFfcyAqYmZhLCBpbnQgdmVjKQoreworfQorCit2b2lkCitiZmFfaHdjdF9yZWdpbml0KHN0cnVjdCBiZmFfcyAqYmZhKQoreworCXN0cnVjdCBiZmFfaW9jZmNfcmVnc19zCSpiZmFfcmVncyA9ICZiZmEtPmlvY2ZjLmJmYV9yZWdzOworCWJmYV9vc19hZGRyX3QJCWt2YSA9IGJmYV9pb2NfYmFyMCgmYmZhLT5pb2MpOworCWludCAgICAgICAgICAgICAJaSwgcSwgZm4gPSBiZmFfaW9jX3BjaWZuKCZiZmEtPmlvYyk7CisKKwlpZiAoZm4gPT0gMCkgeworCQliZmFfcmVncy0+aW50cl9zdGF0dXMgPSAoa3ZhICsgSE9TVEZOMF9JTlRfU1RBVFVTKTsKKwkJYmZhX3JlZ3MtPmludHJfbWFzayAgID0gKGt2YSArIEhPU1RGTjBfSU5UX01TSyk7CisJfSBlbHNlIHsKKwkJYmZhX3JlZ3MtPmludHJfc3RhdHVzID0gKGt2YSArIEhPU1RGTjFfSU5UX1NUQVRVUyk7CisJCWJmYV9yZWdzLT5pbnRyX21hc2sgICA9IChrdmEgKyBIT1NURk4xX0lOVF9NU0spOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBCRklfSU9DX01BWF9DUVM7IGkrKykgeworCQkvKgorCQkgKiBDUEUgcmVnaXN0ZXJzCisJCSAqLworCQlxID0gQ1BFX1FfTlVNKGZuLCBpKTsKKwkJYmZhX3JlZ3MtPmNwZV9xX3BpW2ldID0gKGt2YSArIENQRV9QSV9QVFJfUShxIDw8IDUpKTsKKwkJYmZhX3JlZ3MtPmNwZV9xX2NpW2ldID0gKGt2YSArIENQRV9DSV9QVFJfUShxIDw8IDUpKTsKKwkJYmZhX3JlZ3MtPmNwZV9xX2RlcHRoW2ldID0gKGt2YSArIENQRV9ERVBUSF9RKHEgPDwgNSkpOworCQliZmFfcmVncy0+Y3BlX3FfY3RybFtpXSA9IChrdmEgKyBDUEVfUUNUUkxfUShxIDw8IDUpKTsKKworCQkvKgorCQkgKiBSTUUgcmVnaXN0ZXJzCisJCSAqLworCQlxID0gQ1BFX1FfTlVNKGZuLCBpKTsKKwkJYmZhX3JlZ3MtPnJtZV9xX3BpW2ldID0gKGt2YSArIFJNRV9QSV9QVFJfUShxIDw8IDUpKTsKKwkJYmZhX3JlZ3MtPnJtZV9xX2NpW2ldID0gKGt2YSArIFJNRV9DSV9QVFJfUShxIDw8IDUpKTsKKwkJYmZhX3JlZ3MtPnJtZV9xX2RlcHRoW2ldID0gKGt2YSArIFJNRV9ERVBUSF9RKHEgPDwgNSkpOworCQliZmFfcmVncy0+cm1lX3FfY3RybFtpXSA9IChrdmEgKyBSTUVfUUNUUkxfUShxIDw8IDUpKTsKKwl9Cit9CisKK3ZvaWQKK2JmYV9od2N0X3JzcHFfYWNrKHN0cnVjdCBiZmFfcyAqYmZhLCBpbnQgcnNwcSkKK3sKKwl1MzIJcjMyOworCisJcjMyID0gYmZhX3JlZ19yZWFkKGJmYS0+aW9jZmMuYmZhX3JlZ3Mucm1lX3FfY3RybFtyc3BxXSk7CisJYmZhX3JlZ193cml0ZShiZmEtPmlvY2ZjLmJmYV9yZWdzLnJtZV9xX2N0cmxbcnNwcV0sIHIzMik7Cit9CisKK3ZvaWQKK2JmYV9od2N0X21zaXhfZ2V0dmVjcyhzdHJ1Y3QgYmZhX3MgKmJmYSwgdTMyICptc2l4X3ZlY3NfYm1hcCwKKwkJIHUzMiAqbnVtX3ZlY3MsIHUzMiAqbWF4X3ZlY19iaXQpCit7CisJKm1zaXhfdmVjc19ibWFwID0gKDEgPDwgQkZBX01TSVhfQ1RfTUFYKSAtIDE7CisJKm1heF92ZWNfYml0ID0gKDEgPDwgKEJGQV9NU0lYX0NUX01BWCAtIDEpKTsKKwkqbnVtX3ZlY3MgPSBCRkFfTVNJWF9DVF9NQVg7Cit9CisKKy8qKgorICogU2V0dXAgTVNJLVggdmVjdG9yIGZvciBjYXRhcHVsdAorICovCit2b2lkCitiZmFfaHdjdF9tc2l4X2luaXQoc3RydWN0IGJmYV9zICpiZmEsIGludCBudmVjcykKK3sKKwliZmFfYXNzZXJ0KChudmVjcyA9PSAxKSB8fCAobnZlY3MgPT0gQkZBX01TSVhfQ1RfTUFYKSk7CisJYmZhX3RyYyhiZmEsIG52ZWNzKTsKKworCWJmYS0+bXNpeC5udmVjcyA9IG52ZWNzOworCWJmYV9od2N0X21zaXhfdW5pbnN0YWxsKGJmYSk7Cit9CisKK3ZvaWQKK2JmYV9od2N0X21zaXhfaW5zdGFsbChzdHJ1Y3QgYmZhX3MgKmJmYSkKK3sKKwlpbnQgaTsKKworCWlmIChiZmEtPm1zaXgubnZlY3MgPT0gMCkKKwkJcmV0dXJuOworCisJaWYgKGJmYS0+bXNpeC5udmVjcyA9PSAxKSB7CisJCWZvciAoaSA9IDA7IGkgPCBCRkFfTVNJWF9DVF9NQVg7IGkrKykKKwkJCWJmYS0+bXNpeC5oYW5kbGVyW2ldID0gYmZhX21zaXhfYWxsOworCQlyZXR1cm47CisJfQorCisJZm9yIChpID0gQkZBX01TSVhfQ1BFX1EwOyBpIDw9IEJGQV9NU0lYX0NQRV9RMzsgaSsrKQorCQliZmEtPm1zaXguaGFuZGxlcltpXSA9IGJmYV9tc2l4X3JlcXE7CisKKwlmb3IgKDsgaSA8PSBCRkFfTVNJWF9STUVfUTM7IGkrKykKKwkJYmZhLT5tc2l4LmhhbmRsZXJbaV0gPSBiZmFfbXNpeF9yc3BxOworCisJYmZhX2Fzc2VydChpID09IEJGQV9NU0lYX0xQVV9FUlIpOworCWJmYS0+bXNpeC5oYW5kbGVyW0JGQV9NU0lYX0xQVV9FUlJdID0gYmZhX21zaXhfbHB1X2VycjsKK30KKwordm9pZAorYmZhX2h3Y3RfbXNpeF91bmluc3RhbGwoc3RydWN0IGJmYV9zICpiZmEpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQkZBX01TSVhfQ1RfTUFYOyBpKyspCisJCWJmYS0+bXNpeC5oYW5kbGVyW2ldID0gYmZhX2h3Y3RfbXNpeF9kdW1teTsKK30KKworLyoqCisgKiBFbmFibGUgTVNJLVggdmVjdG9ycworICovCit2b2lkCitiZmFfaHdjdF9pc3JfbW9kZV9zZXQoc3RydWN0IGJmYV9zICpiZmEsIGJmYV9ib29sZWFuX3QgbXNpeCkKK3sKKwliZmFfdHJjKGJmYSwgMCk7CisJYmZhX2h3Y3RfbXNpeF9scHVfZXJyX3NldChiZmEsIG1zaXgsIEJGQV9NU0lYX0xQVV9FUlIpOworCWJmYV9pb2NfaXNyX21vZGVfc2V0KCZiZmEtPmlvYywgbXNpeCk7Cit9CisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfaW50ci5jIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfaW50ci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjYTEyNTcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9pbnRyLmMKQEAgLTAsMCArMSwyMTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpbmNsdWRlIDxiZmEuaD4KKyNpbmNsdWRlIDxiZmkvYmZpX2NicmVnLmg+CisjaW5jbHVkZSA8YmZhX3BvcnRfcHJpdi5oPgorI2luY2x1ZGUgPGJmYV9pbnRyX3ByaXYuaD4KKyNpbmNsdWRlIDxjcy9iZmFfZGVidWcuaD4KKworQkZBX1RSQ19GSUxFKEhBTCwgSU5UUik7CisKK3N0YXRpYyB2b2lkCitiZmFfbXNpeF9lcnJpbnQoc3RydWN0IGJmYV9zICpiZmEsIHUzMiBpbnRyKQoreworCWJmYV9pb2NfZXJyb3JfaXNyKCZiZmEtPmlvYyk7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfbXNpeF9scHUoc3RydWN0IGJmYV9zICpiZmEpCit7CisJYmZhX2lvY19tYm94X2lzcigmYmZhLT5pb2MpOworfQorCit2b2lkCitiZmFfbXNpeF9hbGwoc3RydWN0IGJmYV9zICpiZmEsIGludCB2ZWMpCit7CisJYmZhX2ludHgoYmZhKTsKK30KKworLyoqCisgKiAgaGFsX2ludHJfYXBpCisgKi8KK2JmYV9ib29sZWFuX3QKK2JmYV9pbnR4KHN0cnVjdCBiZmFfcyAqYmZhKQoreworCXUzMiAgICAgICAgaW50ciwgcWludHI7CisJaW50ICAgICAgICAgICAgIHF1ZXVlOworCisJaW50ciA9IGJmYV9yZWdfcmVhZChiZmEtPmlvY2ZjLmJmYV9yZWdzLmludHJfc3RhdHVzKTsKKwlpZiAoIWludHIpCisJCXJldHVybiBCRkFfRkFMU0U7CisKKwkvKioKKwkgKiBSTUUgY29tcGxldGlvbiBxdWV1ZSBpbnRlcnJ1cHQKKwkgKi8KKwlxaW50ciA9IGludHIgJiBfX0hGTl9JTlRfUk1FX01BU0s7CisJYmZhX3JlZ193cml0ZShiZmEtPmlvY2ZjLmJmYV9yZWdzLmludHJfc3RhdHVzLCBxaW50cik7CisKKwlmb3IgKHF1ZXVlID0gMDsgcXVldWUgPCBCRklfSU9DX01BWF9DUVNfQVNJQzsgcXVldWUgKyspIHsKKwkJaWYgKGludHIgJiAoX19IRk5fSU5UX1JNRV9RMCA8PCBxdWV1ZSkpCisJCQliZmFfbXNpeF9yc3BxKGJmYSwgcXVldWUgJiAoQkZJX0lPQ19NQVhfQ1FTIC0gMSkpOworCX0KKwlpbnRyICY9IH5xaW50cjsKKwlpZiAoIWludHIpCisJCXJldHVybiBCRkFfVFJVRTsKKworCS8qKgorCSAqIENQRSBjb21wbGV0aW9uIHF1ZXVlIGludGVycnVwdAorCSAqLworCXFpbnRyID0gaW50ciAmIF9fSEZOX0lOVF9DUEVfTUFTSzsKKwliZmFfcmVnX3dyaXRlKGJmYS0+aW9jZmMuYmZhX3JlZ3MuaW50cl9zdGF0dXMsIHFpbnRyKTsKKworCWZvciAocXVldWUgPSAwOyBxdWV1ZSA8IEJGSV9JT0NfTUFYX0NRU19BU0lDOyBxdWV1ZSsrKSB7CisJCWlmIChpbnRyICYgKF9fSEZOX0lOVF9DUEVfUTAgPDwgcXVldWUpKQorCQkJYmZhX21zaXhfcmVxcShiZmEsIHF1ZXVlICYgKEJGSV9JT0NfTUFYX0NRUyAtIDEpKTsKKwl9CisJaW50ciAmPSB+cWludHI7CisJaWYgKCFpbnRyKQorCQlyZXR1cm4gQkZBX1RSVUU7CisKKwliZmFfbXNpeF9scHVfZXJyKGJmYSwgaW50cik7CisKKwlyZXR1cm4gQkZBX1RSVUU7Cit9CisKK3ZvaWQKK2JmYV9pc3JfZW5hYmxlKHN0cnVjdCBiZmFfcyAqYmZhKQoreworCXUzMiAgICAgICAgaW50cl91bm1hc2s7CisJaW50ICAgICAgICAgICAgIHBjaV9mdW5jID0gYmZhX2lvY19wY2lmbigmYmZhLT5pb2MpOworCisJYmZhX3RyYyhiZmEsIHBjaV9mdW5jKTsKKworCWJmYV9tc2l4X2luc3RhbGwoYmZhKTsKKwlpbnRyX3VubWFzayA9IChfX0hGTl9JTlRfRVJSX0VNQyB8IF9fSEZOX0lOVF9FUlJfTFBVMCB8CisJCSAgICAgICBfX0hGTl9JTlRfRVJSX0xQVTEgfCBfX0hGTl9JTlRfRVJSX1BTUyk7CisKKwlpZiAocGNpX2Z1bmMgPT0gMCkKKwkJaW50cl91bm1hc2sgfD0gKF9fSEZOX0lOVF9DUEVfUTAgfCBfX0hGTl9JTlRfQ1BFX1ExIHwKKwkJCQlfX0hGTl9JTlRfQ1BFX1EyIHwgX19IRk5fSU5UX0NQRV9RMyB8CisJCQkJX19IRk5fSU5UX1JNRV9RMCB8IF9fSEZOX0lOVF9STUVfUTEgfAorCQkJCV9fSEZOX0lOVF9STUVfUTIgfCBfX0hGTl9JTlRfUk1FX1EzIHwKKwkJCQlfX0hGTl9JTlRfTUJPWF9MUFUwKTsKKwllbHNlCisJCWludHJfdW5tYXNrIHw9IChfX0hGTl9JTlRfQ1BFX1E0IHwgX19IRk5fSU5UX0NQRV9RNSB8CisJCQkJX19IRk5fSU5UX0NQRV9RNiB8IF9fSEZOX0lOVF9DUEVfUTcgfAorCQkJCV9fSEZOX0lOVF9STUVfUTQgfCBfX0hGTl9JTlRfUk1FX1E1IHwKKwkJCQlfX0hGTl9JTlRfUk1FX1E2IHwgX19IRk5fSU5UX1JNRV9RNyB8CisJCQkJX19IRk5fSU5UX01CT1hfTFBVMSk7CisKKwliZmFfcmVnX3dyaXRlKGJmYS0+aW9jZmMuYmZhX3JlZ3MuaW50cl9zdGF0dXMsIGludHJfdW5tYXNrKTsKKwliZmFfcmVnX3dyaXRlKGJmYS0+aW9jZmMuYmZhX3JlZ3MuaW50cl9tYXNrLCB+aW50cl91bm1hc2spOworCWJmYV9pc3JfbW9kZV9zZXQoYmZhLCBiZmEtPm1zaXgubnZlY3MgIT0gMCk7Cit9CisKK3ZvaWQKK2JmYV9pc3JfZGlzYWJsZShzdHJ1Y3QgYmZhX3MgKmJmYSkKK3sKKwliZmFfaXNyX21vZGVfc2V0KGJmYSwgQkZBX0ZBTFNFKTsKKwliZmFfcmVnX3dyaXRlKGJmYS0+aW9jZmMuYmZhX3JlZ3MuaW50cl9tYXNrLCAtMUwpOworCWJmYV9tc2l4X3VuaW5zdGFsbChiZmEpOworfQorCit2b2lkCitiZmFfbXNpeF9yZXFxKHN0cnVjdCBiZmFfcyAqYmZhLCBpbnQgcWlkKQoreworCXN0cnVjdCBsaXN0X2hlYWQgCQkqd2FpdHEsICpxZSwgKnFlbjsKKwlzdHJ1Y3QgYmZhX3JlcXFfd2FpdF9zCSp3cWU7CisKKwlxaWQgJj0gKEJGSV9JT0NfTUFYX0NRUyAtIDEpOworCisJd2FpdHEgPSBiZmFfcmVxcShiZmEsIHFpZCk7CisJbGlzdF9mb3JfZWFjaF9zYWZlKHFlLCBxZW4sIHdhaXRxKSB7CisJCS8qKgorCQkgKiBDYWxsYmFjayBvbmx5IGFzIGxvbmcgYXMgdGhlcmUgaXMgcm9vbSBpbiByZXF1ZXN0IHF1ZXVlCisJCSAqLworCQlpZiAoYmZhX3JlcXFfZnVsbChiZmEsIHFpZCkpCisJCQlicmVhazsKKworCQlsaXN0X2RlbChxZSk7CisJCXdxZSA9IChzdHJ1Y3QgYmZhX3JlcXFfd2FpdF9zICopIHFlOworCQl3cWUtPnFyZXN1bWUod3FlLT5jYmFyZyk7CisJfQorfQorCit2b2lkCitiZmFfaXNyX3VuaGFuZGxlZChzdHJ1Y3QgYmZhX3MgKmJmYSwgc3RydWN0IGJmaV9tc2dfcyAqbSkKK3sKKwliZmFfdHJjKGJmYSwgbS0+bWhkci5tc2dfY2xhc3MpOworCWJmYV90cmMoYmZhLCBtLT5taGRyLm1zZ19pZCk7CisJYmZhX3RyYyhiZmEsIG0tPm1oZHIubXRhZy5pMmh0b2spOworCWJmYV9hc3NlcnQoMCk7CisJYmZhX3RyY19zdG9wKGJmYS0+dHJjbW9kKTsKK30KKwordm9pZAorYmZhX21zaXhfcnNwcShzdHJ1Y3QgYmZhX3MgKmJmYSwgaW50IHJzcF9xaWQpCit7CisJc3RydWN0IGJmaV9tc2dfcyAgICAgICptOworCXUzMiAgICAgICAgcGksIGNpOworCisJYmZhX3RyY19mcChiZmEsIHJzcF9xaWQpOworCisJcnNwX3FpZCAmPSAoQkZJX0lPQ19NQVhfQ1FTIC0gMSk7CisKKwliZmEtPmlvY2ZjLmh3aWYuaHdfcnNwcV9hY2soYmZhLCByc3BfcWlkKTsKKworCWNpID0gYmZhX3JzcHFfY2koYmZhLCByc3BfcWlkKTsKKwlwaSA9IGJmYV9yc3BxX3BpKGJmYSwgcnNwX3FpZCk7CisKKwliZmFfdHJjX2ZwKGJmYSwgY2kpOworCWJmYV90cmNfZnAoYmZhLCBwaSk7CisKKwlpZiAoYmZhLT5ybWVfcHJvY2VzcykgeworCQl3aGlsZSAoY2kgIT0gcGkpIHsKKwkJCW0gPSBiZmFfcnNwcV9lbGVtKGJmYSwgcnNwX3FpZCwgY2kpOworCQkJYmZhX2Fzc2VydF9mcChtLT5taGRyLm1zZ19jbGFzcyA8IEJGSV9NQ19NQVgpOworCisJCQliZmFfaXNyc1ttLT5taGRyLm1zZ19jbGFzc10gKGJmYSwgbSk7CisKKwkJCUNRX0lOQ1IoY2ksIGJmYS0+aW9jZmMuY2ZnLmRydmNmZy5udW1fcnNwcV9lbGVtcyk7CisJCX0KKwl9CisKKwkvKioKKwkgKiB1cGRhdGUgQ0kKKwkgKi8KKwliZmFfcnNwcV9jaShiZmEsIHJzcF9xaWQpID0gcGk7CisJYmZhX3JlZ193cml0ZShiZmEtPmlvY2ZjLmJmYV9yZWdzLnJtZV9xX2NpW3JzcF9xaWRdLCBwaSk7CisJYmZhX29zX21taW93YigpOworfQorCit2b2lkCitiZmFfbXNpeF9scHVfZXJyKHN0cnVjdCBiZmFfcyAqYmZhLCBpbnQgdmVjKQoreworCXUzMiBpbnRyOworCisJaW50ciA9IGJmYV9yZWdfcmVhZChiZmEtPmlvY2ZjLmJmYV9yZWdzLmludHJfc3RhdHVzKTsKKworCWlmIChpbnRyICYgKF9fSEZOX0lOVF9NQk9YX0xQVTAgfCBfX0hGTl9JTlRfTUJPWF9MUFUxKSkKKwkJYmZhX21zaXhfbHB1KGJmYSk7CisKKwlpZiAoaW50ciAmIChfX0hGTl9JTlRfRVJSX0VNQyB8CisJCSAgICBfX0hGTl9JTlRfRVJSX0xQVTAgfCBfX0hGTl9JTlRfRVJSX0xQVTEgfAorCQkgICAgX19IRk5fSU5UX0VSUl9QU1MpKQorCQliZmFfbXNpeF9lcnJpbnQoYmZhLCBpbnRyKTsKK30KKwordm9pZAorYmZhX2lzcl9iaW5kKGVudW0gYmZpX21jbGFzcyBtYywgYmZhX2lzcl9mdW5jX3QgaXNyX2Z1bmMpCit7CisJYmZhX2lzcnNbbWNdID0gaXNyX2Z1bmM7Cit9CisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfaW50cl9wcml2LmggYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9pbnRyX3ByaXYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Y2U2ZTZiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfaW50cl9wcml2LmgKQEAgLTAsMCArMSwxMTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0JGQV9JTlRSX1BSSVZfSF9fCisjZGVmaW5lIF9fQkZBX0lOVFJfUFJJVl9IX18KKworLyoqCisgKiBNZXNzYWdlIGhhbmRsZXIKKyAqLwordHlwZWRlZiB2b2lkICgqYmZhX2lzcl9mdW5jX3QpIChzdHJ1Y3QgYmZhX3MgKmJmYSwgc3RydWN0IGJmaV9tc2dfcyAqbSk7Cit2b2lkIGJmYV9pc3JfdW5oYW5kbGVkKHN0cnVjdCBiZmFfcyAqYmZhLCBzdHJ1Y3QgYmZpX21zZ19zICptKTsKK3ZvaWQgYmZhX2lzcl9iaW5kKGVudW0gYmZpX21jbGFzcyBtYywgYmZhX2lzcl9mdW5jX3QgaXNyX2Z1bmMpOworCisKKyNkZWZpbmUgYmZhX3JlcXFfcGkoX19iZmEsIF9fcmVxcSkJKF9fYmZhKS0+aW9jZmMucmVxX2NxX3BpW19fcmVxcV0KKyNkZWZpbmUgYmZhX3JlcXFfY2koX19iZmEsIF9fcmVxcSkJCQkJCVwKKwkqKHUzMiAqKSgoX19iZmEpLT5pb2NmYy5yZXFfY3Ffc2hhZG93X2NpW19fcmVxcV0ua3ZhKQorCisjZGVmaW5lIGJmYV9yZXFxX2Z1bGwoX19iZmEsIF9fcmVxcSkJCQkJXAorCSgoKGJmYV9yZXFxX3BpKF9fYmZhLCBfX3JlcXEpICsgMSkgJgkJCVwKKwkgICgoX19iZmEpLT5pb2NmYy5jZmcuZHJ2Y2ZnLm51bV9yZXFxX2VsZW1zIC0gMSkpID09CVwKKwkgYmZhX3JlcXFfY2koX19iZmEsIF9fcmVxcSkpCisKKyNkZWZpbmUgYmZhX3JlcXFfbmV4dChfX2JmYSwgX19yZXFxKQkJCQlcCisJKGJmYV9yZXFxX2Z1bGwoX19iZmEsIF9fcmVxcSkgPyBOVUxMIDoJCQlcCisJICgodm9pZCAqKSgoc3RydWN0IGJmaV9tc2dfcyAqKSgoX19iZmEpLT5pb2NmYy5yZXFfY3FfYmFbX19yZXFxXS5rdmEpIFwKKwkJCSAgKyBiZmFfcmVxcV9waSgoX19iZmEpLCAoX19yZXFxKSkpKSkKKworI2RlZmluZSBiZmFfcmVxcV9wcm9kdWNlKF9fYmZhLCBfX3JlcXEpCWRvIHsJCQkJXAorCShfX2JmYSktPmlvY2ZjLnJlcV9jcV9waVtfX3JlcXFdKys7CQkJCVwKKwkoX19iZmEpLT5pb2NmYy5yZXFfY3FfcGlbX19yZXFxXSAmPQkJCQlcCisJCSgoX19iZmEpLT5pb2NmYy5jZmcuZHJ2Y2ZnLm51bV9yZXFxX2VsZW1zIC0gMSk7ICAgICAgXAorCWJmYV9yZWdfd3JpdGUoKF9fYmZhKS0+aW9jZmMuYmZhX3JlZ3MuY3BlX3FfcGlbX19yZXFxXSwJCVwKKwkJCQkoX19iZmEpLT5pb2NmYy5yZXFfY3FfcGlbX19yZXFxXSk7ICAgICAgXAorCWJmYV9vc19tbWlvd2IoKTsgICAgICBcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIGJmYV9yc3BxX3BpKF9fYmZhLCBfX3JzcHEpCQkJCQlcCisJKih1MzIgKikoKF9fYmZhKS0+aW9jZmMucnNwX2NxX3NoYWRvd19waVtfX3JzcHFdLmt2YSkKKworI2RlZmluZSBiZmFfcnNwcV9jaShfX2JmYSwgX19yc3BxKQkoX19iZmEpLT5pb2NmYy5yc3BfY3FfY2lbX19yc3BxXQorI2RlZmluZSBiZmFfcnNwcV9lbGVtKF9fYmZhLCBfX3JzcHEsIF9fY2kpCQkJCVwKKwkmKChzdHJ1Y3QgYmZpX21zZ19zICopKChfX2JmYSktPmlvY2ZjLnJzcF9jcV9iYVtfX3JzcHFdLmt2YSkpW19fY2ldCisKKyNkZWZpbmUgQ1FfSU5DUihfX2luZGV4LCBfX3NpemUpCQkJCQlcCisJCQkoX19pbmRleCkrKzsgKF9faW5kZXgpICY9ICgoX19zaXplKSAtIDEpCisKKy8qKgorICogUXVldWUgZWxlbWVudCB0byB3YWl0IGZvciByb29tIGluIHJlcXVlc3QgcXVldWUuIEZJRk8gb3JkZXIgaXMKKyAqIG1haW50YWluZWQgd2hlbiBmdWxsZmlsbGluZyByZXF1ZXN0cy4KKyAqLworc3RydWN0IGJmYV9yZXFxX3dhaXRfcyB7CisJc3RydWN0IGxpc3RfaGVhZCAJcWU7CisJdm9pZAkJKCpxcmVzdW1lKSAodm9pZCAqY2JhcmcpOworCXZvaWQJCSpjYmFyZzsKK307CisKKy8qKgorICogQ2lyY3VsYXIgcXVldWUgdXNhZ2UgYXNzaWdubWVudHMKKyAqLworZW51bSB7CisJQkZBX1JFUVFfSU9DCT0gMCwJLyogIGFsbCBsb3ctcHJpb3JpdHkgSU9DIG1zZ3MJKi8KKwlCRkFfUkVRUV9GQ1hQCT0gMCwJLyogIGFsbCBGQ1hQIG1lc3NhZ2VzCQkqLworCUJGQV9SRVFRX0xQUwk9IDAsCS8qICBhbGwgbHBvcnQgc2VydmljZSBtc2dzCSovCisJQkZBX1JFUVFfUE9SVAk9IDAsCS8qICBhbGwgcG9ydCBtZXNzYWdlcwkJKi8KKwlCRkFfUkVRUV9GTEFTSAk9IDAsCS8qICBmb3IgZmxhc2ggbW9kdWxlCQkqLworCUJGQV9SRVFRX0RJQUcJPSAwLAkvKiAgZm9yIGRpYWcgbW9kdWxlCQkqLworCUJGQV9SRVFRX1JQT1JUCT0gMCwJLyogIGFsbCBwb3J0IG1lc3NhZ2VzCQkqLworCUJGQV9SRVFRX1NCT09UCT0gMCwJLyogIGFsbCBzYW4gYm9vdCBtZXNzYWdlcwkqLworCUJGQV9SRVFRX1FPU19MTwk9IDEsCS8qICBhbGwgbG93IHByaW9yaXR5IElPCSovCisJQkZBX1JFUVFfUU9TX01ECT0gMiwJLyogIGFsbCBtZWRpdW0gcHJpb3JpdHkgSU8JKi8KKwlCRkFfUkVRUV9RT1NfSEkJPSAzLAkvKiAgYWxsIGhpZ2ggcHJpb3JpdHkgSU8JKi8KK307CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorYmZhX3JlcXFfd2luaXQoc3RydWN0IGJmYV9yZXFxX3dhaXRfcyAqd3FlLCB2b2lkICgqcXJlc3VtZSkgKHZvaWQgKmNiYXJnKSwKKwkJCXZvaWQgKmNiYXJnKQoreworCXdxZS0+cXJlc3VtZSA9IHFyZXN1bWU7CisJd3FlLT5jYmFyZyA9IGNiYXJnOworfQorCisjZGVmaW5lIGJmYV9yZXFxKF9fYmZhLCBfX3JlcXEpCSYoX19iZmEpLT5yZXFxX3dhaXRxW19fcmVxcV0KKworLyoqCisgKiBzdGF0aWMgaW5saW5lIHZvaWQKKyAqIGJmYV9yZXFxX3dhaXQoc3RydWN0IGJmYV9zICpiZmEsIGludCByZXFxLCBzdHJ1Y3QgYmZhX3JlcXFfd2FpdF9zICp3cWUpCisgKi8KKyNkZWZpbmUgYmZhX3JlcXFfd2FpdChfX2JmYSwgX19yZXFxLCBfX3dxZSkgZG8gewkJCVwKKwkJCQkJCQkJCVwKKwkJc3RydWN0IGxpc3RfaGVhZCAqd2FpdHEgPSBiZmFfcmVxcShfX2JmYSwgX19yZXFxKTsgICAgICBcCisJCQkJCQkJCQlcCisJCWJmYV9hc3NlcnQoKChfX3JlcXEpIDwgQkZJX0lPQ19NQVhfQ1FTKSk7ICAgICAgXAorCQliZmFfYXNzZXJ0KChfX3dxZSktPnFyZXN1bWUgJiYgKF9fd3FlKS0+Y2JhcmcpOyAgICAgIFwKKwkJCQkJCQkJCVwKKwkJbGlzdF9hZGRfdGFpbCgmKF9fd3FlKS0+cWUsIHdhaXRxKTsgICAgICBcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIGJmYV9yZXFxX3djYW5jZWwoX193cWUpCWxpc3RfZGVsKCYoX193cWUpLT5xZSkKKworI2VuZGlmIC8qIF9fQkZBX0lOVFJfUFJJVl9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2lvYy5jIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfaW9jLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQ5MzQ4OQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2lvYy5jCkBAIC0wLDAgKzEsMjM4MiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8YmZhLmg+CisjaW5jbHVkZSA8YmZhX2lvYy5oPgorI2luY2x1ZGUgPGJmYV9md2ltZ19wcml2Lmg+CisjaW5jbHVkZSA8YmZhX3RyY21vZF9wcml2Lmg+CisjaW5jbHVkZSA8Y3MvYmZhX2RlYnVnLmg+CisjaW5jbHVkZSA8YmZpL2JmaV9pb2MuaD4KKyNpbmNsdWRlIDxiZmkvYmZpX2N0cmVnLmg+CisjaW5jbHVkZSA8YWVuL2JmYV9hZW5faW9jLmg+CisjaW5jbHVkZSA8YWVuL2JmYV9hZW4uaD4KKyNpbmNsdWRlIDxsb2cvYmZhX2xvZ19oYWwuaD4KKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX3BjaS5oPgorCitCRkFfVFJDX0ZJTEUoSEFMLCBJT0MpOworCisvKioKKyAqIElPQyBsb2NhbCBkZWZpbml0aW9ucworICovCisjZGVmaW5lIEJGQV9JT0NfVE9WCQkyMDAwCS8qIG1zZWNzICovCisjZGVmaW5lIEJGQV9JT0NfSEJfVE9WCQkxMDAwCS8qIG1zZWNzICovCisjZGVmaW5lIEJGQV9JT0NfSEJfRkFJTF9NQVgJNAorI2RlZmluZSBCRkFfSU9DX0hXSU5JVF9NQVgJMgorI2RlZmluZSBCRkFfSU9DX0ZXSU1HX01JTlNaICAgICAoMTYgKiAxMDI0KQorI2RlZmluZSBCRkFfSU9DX1RPVl9SRUNPVkVSCShCRkFfSU9DX0hCX0ZBSUxfTUFYICogQkZBX0lPQ19IQl9UT1YgXAorCQkJCSsgQkZBX0lPQ19UT1YpCisKKyNkZWZpbmUgYmZhX2lvY190aW1lcl9zdGFydChfX2lvYykJCQkJCVwKKwliZmFfdGltZXJfYmVnaW4oKF9faW9jKS0+dGltZXJfbW9kLCAmKF9faW9jKS0+aW9jX3RpbWVyLAlcCisJCQliZmFfaW9jX3RpbWVvdXQsIChfX2lvYyksIEJGQV9JT0NfVE9WKQorI2RlZmluZSBiZmFfaW9jX3RpbWVyX3N0b3AoX19pb2MpICAgYmZhX3RpbWVyX3N0b3AoJihfX2lvYyktPmlvY190aW1lcikKKworI2RlZmluZSBCRkFfREJHX0ZXVFJDX0VOVFMJKEJGSV9JT0NfVFJDX0VOVFMpCisjZGVmaW5lIEJGQV9EQkdfRldUUkNfTEVOCQkJCQlcCisJKEJGQV9EQkdfRldUUkNfRU5UUyAqIHNpemVvZihzdHJ1Y3QgYmZhX3RyY19zKSArCVwKKwkgKHNpemVvZihzdHJ1Y3QgYmZhX3RyY19tb2RfcykgLQkJCVwKKwkgIEJGQV9UUkNfTUFYICogc2l6ZW9mKHN0cnVjdCBiZmFfdHJjX3MpKSkKKyNkZWZpbmUgQkZBX0RCR19GV1RSQ19PRkYoX2ZuKQkoQkZJX0lPQ19UUkNfT0ZGICsgQkZBX0RCR19GV1RSQ19MRU4gKiAoX2ZuKSkKKyNkZWZpbmUgYmZhX2lvY19zdGF0cyhfaW9jLCBfc3RhdHMpCShfaW9jKS0+c3RhdHMuX3N0YXRzICsrCisKKyNkZWZpbmUgQkZBX0ZMQVNIX0NIVU5LX05PKG9mZikgICAgICAgICAob2ZmIC8gQkZJX0ZMQVNIX0NIVU5LX1NaX1dPUkRTKQorI2RlZmluZSBCRkFfRkxBU0hfT0ZGU0VUX0lOX0NIVU5LKG9mZikgIChvZmYgJSBCRklfRkxBU0hfQ0hVTktfU1pfV09SRFMpCisjZGVmaW5lIEJGQV9GTEFTSF9DSFVOS19BRERSKGNodW5rbm8pICAgKGNodW5rbm8gKiBCRklfRkxBU0hfQ0hVTktfU1pfV09SRFMpCitiZmFfYm9vbGVhbl90ICAgYmZhX2F1dG9fcmVjb3ZlciA9IEJGQV9GQUxTRTsKKworLyoKKyAqIGZvcndhcmQgZGVjbGFyYXRpb25zCisgKi8KK3N0YXRpYyB2b2lkICAgICBiZmFfaW9jX2Flbl9wb3N0KHN0cnVjdCBiZmFfaW9jX3MgKmJmYSwKKwkJCQkgZW51bSBiZmFfaW9jX2Flbl9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2lvY19od19zZW1fZ2V0KHN0cnVjdCBiZmFfaW9jX3MgKmlvYyk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2lvY19od19zZW1fcmVsZWFzZShzdHJ1Y3QgYmZhX2lvY19zICppb2MpOworc3RhdGljIHZvaWQgICAgIGJmYV9pb2NfaHdfc2VtX2dldF9jYW5jZWwoc3RydWN0IGJmYV9pb2NfcyAqaW9jKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfaW9jX2h3aW5pdChzdHJ1Y3QgYmZhX2lvY19zICppb2MsIGJmYV9ib29sZWFuX3QgZm9yY2UpOworc3RhdGljIHZvaWQgICAgIGJmYV9pb2NfdGltZW91dCh2b2lkICppb2MpOworc3RhdGljIHZvaWQgICAgIGJmYV9pb2Nfc2VuZF9lbmFibGUoc3RydWN0IGJmYV9pb2NfcyAqaW9jKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfaW9jX3NlbmRfZGlzYWJsZShzdHJ1Y3QgYmZhX2lvY19zICppb2MpOworc3RhdGljIHZvaWQgICAgIGJmYV9pb2Nfc2VuZF9nZXRhdHRyKHN0cnVjdCBiZmFfaW9jX3MgKmlvYyk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2lvY19oYl9tb25pdG9yKHN0cnVjdCBiZmFfaW9jX3MgKmlvYyk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2lvY19oYl9zdG9wKHN0cnVjdCBiZmFfaW9jX3MgKmlvYyk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2lvY19yZXNldChzdHJ1Y3QgYmZhX2lvY19zICppb2MsIGJmYV9ib29sZWFuX3QgZm9yY2UpOworc3RhdGljIHZvaWQgICAgIGJmYV9pb2NfbWJveF9wb2xsKHN0cnVjdCBiZmFfaW9jX3MgKmlvYyk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2lvY19tYm94X2hiZmFpbChzdHJ1Y3QgYmZhX2lvY19zICppb2MpOworc3RhdGljIHZvaWQgICAgIGJmYV9pb2NfcmVjb3ZlcihzdHJ1Y3QgYmZhX2lvY19zICppb2MpOworc3RhdGljIGJmYV9ib29sZWFuX3QgYmZhX2lvY19maXJtd2FyZV9sb2NrKHN0cnVjdCBiZmFfaW9jX3MgKmlvYyk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2lvY19maXJtd2FyZV91bmxvY2soc3RydWN0IGJmYV9pb2NfcyAqaW9jKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfaW9jX2Rpc2FibGVfY29tcChzdHJ1Y3QgYmZhX2lvY19zICppb2MpOworc3RhdGljIHZvaWQgICAgIGJmYV9pb2NfbHB1X3N0b3Aoc3RydWN0IGJmYV9pb2NfcyAqaW9jKTsKKworLyoqCisgKiAgYmZhX2lvY19zbQorICovCisKKy8qKgorICogSU9DIHN0YXRlIG1hY2hpbmUgZXZlbnRzCisgKi8KK2VudW0gaW9jX2V2ZW50IHsKKwlJT0NfRV9FTkFCTEUgPSAxLAkvKiAgSU9DIGVuYWJsZSByZXF1ZXN0ICovCisJSU9DX0VfRElTQUJMRSA9IDIsCS8qICBJT0MgZGlzYWJsZSByZXF1ZXN0ICovCisJSU9DX0VfVElNRU9VVCA9IDMsCS8qICBmL3cgcmVzcG9uc2UgdGltZW91dCAqLworCUlPQ19FX0ZXUkVBRFkgPSA0LAkvKiAgZi93IGluaXRpYWxpemF0aW9uIGRvbmUgKi8KKwlJT0NfRV9GV1JTUF9HRVRBVFRSID0gNSwJLyogIElPQyBnZXQgYXR0cmlidXRlIHJlc3BvbnNlICovCisJSU9DX0VfRldSU1BfRU5BQkxFID0gNiwJLyogIGVuYWJsZSBmL3cgcmVzcG9uc2UgKi8KKwlJT0NfRV9GV1JTUF9ESVNBQkxFID0gNywJLyogIGRpc2FibGUgZi93IHJlc3BvbnNlICovCisJSU9DX0VfSEJGQUlMID0gOCwJLyogIGhlYXJ0YmVhdCBmYWlsdXJlICovCisJSU9DX0VfSFdFUlJPUiA9IDksCS8qICBoYXJkd2FyZSBlcnJvciBpbnRlcnJ1cHQgKi8KKwlJT0NfRV9TRU1MT0NLRUQgPSAxMCwJLyogIGgvdyBzZW1hcGhvcmUgaXMgbG9ja2VkICovCisJSU9DX0VfREVUQUNIID0gMTEsCS8qICBkcml2ZXIgZGV0YWNoIGNsZWFudXAgKi8KK307CisKK2JmYV9mc21fc3RhdGVfZGVjbChiZmFfaW9jLCByZXNldCwgc3RydWN0IGJmYV9pb2NfcywgZW51bSBpb2NfZXZlbnQpOworYmZhX2ZzbV9zdGF0ZV9kZWNsKGJmYV9pb2MsIGZ3Y2hlY2ssIHN0cnVjdCBiZmFfaW9jX3MsIGVudW0gaW9jX2V2ZW50KTsKK2JmYV9mc21fc3RhdGVfZGVjbChiZmFfaW9jLCBtaXNtYXRjaCwgc3RydWN0IGJmYV9pb2NfcywgZW51bSBpb2NfZXZlbnQpOworYmZhX2ZzbV9zdGF0ZV9kZWNsKGJmYV9pb2MsIHNlbXdhaXQsIHN0cnVjdCBiZmFfaW9jX3MsIGVudW0gaW9jX2V2ZW50KTsKK2JmYV9mc21fc3RhdGVfZGVjbChiZmFfaW9jLCBod2luaXQsIHN0cnVjdCBiZmFfaW9jX3MsIGVudW0gaW9jX2V2ZW50KTsKK2JmYV9mc21fc3RhdGVfZGVjbChiZmFfaW9jLCBlbmFibGluZywgc3RydWN0IGJmYV9pb2NfcywgZW51bSBpb2NfZXZlbnQpOworYmZhX2ZzbV9zdGF0ZV9kZWNsKGJmYV9pb2MsIGdldGF0dHIsIHN0cnVjdCBiZmFfaW9jX3MsIGVudW0gaW9jX2V2ZW50KTsKK2JmYV9mc21fc3RhdGVfZGVjbChiZmFfaW9jLCBvcCwgc3RydWN0IGJmYV9pb2NfcywgZW51bSBpb2NfZXZlbnQpOworYmZhX2ZzbV9zdGF0ZV9kZWNsKGJmYV9pb2MsIGluaXRmYWlsLCBzdHJ1Y3QgYmZhX2lvY19zLCBlbnVtIGlvY19ldmVudCk7CitiZmFfZnNtX3N0YXRlX2RlY2woYmZhX2lvYywgaGJmYWlsLCBzdHJ1Y3QgYmZhX2lvY19zLCBlbnVtIGlvY19ldmVudCk7CitiZmFfZnNtX3N0YXRlX2RlY2woYmZhX2lvYywgZGlzYWJsaW5nLCBzdHJ1Y3QgYmZhX2lvY19zLCBlbnVtIGlvY19ldmVudCk7CitiZmFfZnNtX3N0YXRlX2RlY2woYmZhX2lvYywgZGlzYWJsZWQsIHN0cnVjdCBiZmFfaW9jX3MsIGVudW0gaW9jX2V2ZW50KTsKKworc3RhdGljIHN0cnVjdCBiZmFfc21fdGFibGVfcyBpb2Nfc21fdGFibGVbXSA9IHsKKwl7QkZBX1NNKGJmYV9pb2Nfc21fcmVzZXQpLCBCRkFfSU9DX1JFU0VUfSwKKwl7QkZBX1NNKGJmYV9pb2Nfc21fZndjaGVjayksIEJGQV9JT0NfRldNSVNNQVRDSH0sCisJe0JGQV9TTShiZmFfaW9jX3NtX21pc21hdGNoKSwgQkZBX0lPQ19GV01JU01BVENIfSwKKwl7QkZBX1NNKGJmYV9pb2Nfc21fc2Vtd2FpdCksIEJGQV9JT0NfU0VNV0FJVH0sCisJe0JGQV9TTShiZmFfaW9jX3NtX2h3aW5pdCksIEJGQV9JT0NfSFdJTklUfSwKKwl7QkZBX1NNKGJmYV9pb2Nfc21fZW5hYmxpbmcpLCBCRkFfSU9DX0hXSU5JVH0sCisJe0JGQV9TTShiZmFfaW9jX3NtX2dldGF0dHIpLCBCRkFfSU9DX0dFVEFUVFJ9LAorCXtCRkFfU00oYmZhX2lvY19zbV9vcCksIEJGQV9JT0NfT1BFUkFUSU9OQUx9LAorCXtCRkFfU00oYmZhX2lvY19zbV9pbml0ZmFpbCksIEJGQV9JT0NfSU5JVEZBSUx9LAorCXtCRkFfU00oYmZhX2lvY19zbV9oYmZhaWwpLCBCRkFfSU9DX0hCRkFJTH0sCisJe0JGQV9TTShiZmFfaW9jX3NtX2Rpc2FibGluZyksIEJGQV9JT0NfRElTQUJMSU5HfSwKKwl7QkZBX1NNKGJmYV9pb2Nfc21fZGlzYWJsZWQpLCBCRkFfSU9DX0RJU0FCTEVEfSwKK307CisKKy8qKgorICogUmVzZXQgZW50cnkgYWN0aW9ucyAtLSBpbml0aWFsaXplIHN0YXRlIG1hY2hpbmUKKyAqLworc3RhdGljIHZvaWQKK2JmYV9pb2Nfc21fcmVzZXRfZW50cnkoc3RydWN0IGJmYV9pb2NfcyAqaW9jKQoreworCWlvYy0+cmV0cnlfY291bnQgPSAwOworCWlvYy0+YXV0b19yZWNvdmVyID0gYmZhX2F1dG9fcmVjb3ZlcjsKK30KKworLyoqCisgKiBCZWdpbm5pbmcgc3RhdGUuIElPQyBpcyBpbiByZXNldCBzdGF0ZS4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9pb2Nfc21fcmVzZXQoc3RydWN0IGJmYV9pb2NfcyAqaW9jLCBlbnVtIGlvY19ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKGlvYywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgSU9DX0VfRU5BQkxFOgorCQliZmFfZnNtX3NldF9zdGF0ZShpb2MsIGJmYV9pb2Nfc21fZndjaGVjayk7CisJCWJyZWFrOworCisJY2FzZSBJT0NfRV9ESVNBQkxFOgorCQliZmFfaW9jX2Rpc2FibGVfY29tcChpb2MpOworCQlicmVhazsKKworCWNhc2UgSU9DX0VfREVUQUNIOgorCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9zbV9mYXVsdChpb2MsIGV2ZW50KTsKKwl9Cit9CisKKy8qKgorICogU2VtYXBob3JlIHNob3VsZCBiZSBhY3F1aXJlZCBmb3IgdmVyc2lvbiBjaGVjay4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9pb2Nfc21fZndjaGVja19lbnRyeShzdHJ1Y3QgYmZhX2lvY19zICppb2MpCit7CisJYmZhX2lvY19od19zZW1fZ2V0KGlvYyk7Cit9CisKKy8qKgorICogQXdhaXRpbmcgaC93IHNlbWFwaG9yZSB0byBjb250aW51ZSB3aXRoIHZlcnNpb24gY2hlY2suCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaW9jX3NtX2Z3Y2hlY2soc3RydWN0IGJmYV9pb2NfcyAqaW9jLCBlbnVtIGlvY19ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKGlvYywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgSU9DX0VfU0VNTE9DS0VEOgorCQlpZiAoYmZhX2lvY19maXJtd2FyZV9sb2NrKGlvYykpIHsKKwkJCWlvYy0+cmV0cnlfY291bnQgPSAwOworCQkJYmZhX2ZzbV9zZXRfc3RhdGUoaW9jLCBiZmFfaW9jX3NtX2h3aW5pdCk7CisJCX0gZWxzZSB7CisJCQliZmFfaW9jX2h3X3NlbV9yZWxlYXNlKGlvYyk7CisJCQliZmFfZnNtX3NldF9zdGF0ZShpb2MsIGJmYV9pb2Nfc21fbWlzbWF0Y2gpOworCQl9CisJCWJyZWFrOworCisJY2FzZSBJT0NfRV9ESVNBQkxFOgorCQliZmFfaW9jX2Rpc2FibGVfY29tcChpb2MpOworCQkvKgorCQkgKiBmYWxsIHRocm91Z2gKKwkJICovCisKKwljYXNlIElPQ19FX0RFVEFDSDoKKwkJYmZhX2lvY19od19zZW1fZ2V0X2NhbmNlbChpb2MpOworCQliZmFfZnNtX3NldF9zdGF0ZShpb2MsIGJmYV9pb2Nfc21fcmVzZXQpOworCQlicmVhazsKKworCWNhc2UgSU9DX0VfRldSRUFEWToKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfc21fZmF1bHQoaW9jLCBldmVudCk7CisJfQorfQorCisvKioKKyAqIE5vdGlmeSBlbmFibGUgY29tcGxldGlvbiBjYWxsYmFjayBhbmQgZ2VuZXJhdGUgbWlzbWF0Y2ggQUVOLgorICovCitzdGF0aWMgdm9pZAorYmZhX2lvY19zbV9taXNtYXRjaF9lbnRyeShzdHJ1Y3QgYmZhX2lvY19zICppb2MpCit7CisJLyoqCisJICogUHJvdmlkZSBlbmFibGUgY29tcGxldGlvbiBjYWxsYmFjayBhbmQgQUVOIG5vdGlmaWNhdGlvbiBvbmx5IG9uY2UuCisJICovCisJaWYgKGlvYy0+cmV0cnlfY291bnQgPT0gMCkgeworCQlpb2MtPmNiZm4tPmVuYWJsZV9jYmZuKGlvYy0+YmZhLCBCRkFfU1RBVFVTX0lPQ19GQUlMVVJFKTsKKwkJYmZhX2lvY19hZW5fcG9zdChpb2MsIEJGQV9JT0NfQUVOX0ZXTUlTTUFUQ0gpOworCX0KKwlpb2MtPnJldHJ5X2NvdW50Kys7CisJYmZhX2lvY190aW1lcl9zdGFydChpb2MpOworfQorCisvKioKKyAqIEF3YWl0aW5nIGZpcm13YXJlIHZlcnNpb24gbWF0Y2guCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaW9jX3NtX21pc21hdGNoKHN0cnVjdCBiZmFfaW9jX3MgKmlvYywgZW51bSBpb2NfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhpb2MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIElPQ19FX1RJTUVPVVQ6CisJCWJmYV9mc21fc2V0X3N0YXRlKGlvYywgYmZhX2lvY19zbV9md2NoZWNrKTsKKwkJYnJlYWs7CisKKwljYXNlIElPQ19FX0RJU0FCTEU6CisJCWJmYV9pb2NfZGlzYWJsZV9jb21wKGlvYyk7CisJCS8qCisJCSAqIGZhbGwgdGhyb3VnaAorCQkgKi8KKworCWNhc2UgSU9DX0VfREVUQUNIOgorCQliZmFfaW9jX3RpbWVyX3N0b3AoaW9jKTsKKwkJYmZhX2ZzbV9zZXRfc3RhdGUoaW9jLCBiZmFfaW9jX3NtX3Jlc2V0KTsKKwkJYnJlYWs7CisKKwljYXNlIElPQ19FX0ZXUkVBRFk6CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX3NtX2ZhdWx0KGlvYywgZXZlbnQpOworCX0KK30KKworLyoqCisgKiBSZXF1ZXN0IGZvciBzZW1hcGhvcmUuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaW9jX3NtX3NlbXdhaXRfZW50cnkoc3RydWN0IGJmYV9pb2NfcyAqaW9jKQoreworCWJmYV9pb2NfaHdfc2VtX2dldChpb2MpOworfQorCisvKioKKyAqIEF3YWl0aW5nIHNlbWFwaG9yZSBmb3IgaC93IGluaXRpYWx6YXRpb24uCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaW9jX3NtX3NlbXdhaXQoc3RydWN0IGJmYV9pb2NfcyAqaW9jLCBlbnVtIGlvY19ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKGlvYywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgSU9DX0VfU0VNTE9DS0VEOgorCQlpb2MtPnJldHJ5X2NvdW50ID0gMDsKKwkJYmZhX2ZzbV9zZXRfc3RhdGUoaW9jLCBiZmFfaW9jX3NtX2h3aW5pdCk7CisJCWJyZWFrOworCisJY2FzZSBJT0NfRV9ESVNBQkxFOgorCQliZmFfaW9jX2h3X3NlbV9nZXRfY2FuY2VsKGlvYyk7CisJCWJmYV9mc21fc2V0X3N0YXRlKGlvYywgYmZhX2lvY19zbV9kaXNhYmxlZCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX3NtX2ZhdWx0KGlvYywgZXZlbnQpOworCX0KK30KKworCitzdGF0aWMgdm9pZAorYmZhX2lvY19zbV9od2luaXRfZW50cnkoc3RydWN0IGJmYV9pb2NfcyAqaW9jKQoreworCWJmYV9pb2NfdGltZXJfc3RhcnQoaW9jKTsKKwliZmFfaW9jX3Jlc2V0KGlvYywgQkZBX0ZBTFNFKTsKK30KKworLyoqCisgKiBIYXJkd2FyZSBpcyBiZWluZyBpbml0aWFsaXplZC4gSW50ZXJydXB0cyBhcmUgZW5hYmxlZC4KKyAqIEhvbGRpbmcgaGFyZHdhcmUgc2VtYXBob3JlIGxvY2suCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaW9jX3NtX2h3aW5pdChzdHJ1Y3QgYmZhX2lvY19zICppb2MsIGVudW0gaW9jX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMoaW9jLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBJT0NfRV9GV1JFQURZOgorCQliZmFfaW9jX3RpbWVyX3N0b3AoaW9jKTsKKwkJYmZhX2ZzbV9zZXRfc3RhdGUoaW9jLCBiZmFfaW9jX3NtX2VuYWJsaW5nKTsKKwkJYnJlYWs7CisKKwljYXNlIElPQ19FX0hXRVJST1I6CisJCWJmYV9pb2NfdGltZXJfc3RvcChpb2MpOworCQkvKgorCQkgKiBmYWxsIHRocm91Z2gKKwkJICovCisKKwljYXNlIElPQ19FX1RJTUVPVVQ6CisJCWlvYy0+cmV0cnlfY291bnQrKzsKKwkJaWYgKGlvYy0+cmV0cnlfY291bnQgPCBCRkFfSU9DX0hXSU5JVF9NQVgpIHsKKwkJCWJmYV9pb2NfdGltZXJfc3RhcnQoaW9jKTsKKwkJCWJmYV9pb2NfcmVzZXQoaW9jLCBCRkFfVFJVRSk7CisJCQlicmVhazsKKwkJfQorCisJCWJmYV9pb2NfaHdfc2VtX3JlbGVhc2UoaW9jKTsKKwkJYmZhX2ZzbV9zZXRfc3RhdGUoaW9jLCBiZmFfaW9jX3NtX2luaXRmYWlsKTsKKwkJYnJlYWs7CisKKwljYXNlIElPQ19FX0RJU0FCTEU6CisJCWJmYV9pb2NfaHdfc2VtX3JlbGVhc2UoaW9jKTsKKwkJYmZhX2lvY190aW1lcl9zdG9wKGlvYyk7CisJCWJmYV9mc21fc2V0X3N0YXRlKGlvYywgYmZhX2lvY19zbV9kaXNhYmxlZCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX3NtX2ZhdWx0KGlvYywgZXZlbnQpOworCX0KK30KKworCitzdGF0aWMgdm9pZAorYmZhX2lvY19zbV9lbmFibGluZ19lbnRyeShzdHJ1Y3QgYmZhX2lvY19zICppb2MpCit7CisJYmZhX2lvY190aW1lcl9zdGFydChpb2MpOworCWJmYV9pb2Nfc2VuZF9lbmFibGUoaW9jKTsKK30KKworLyoqCisgKiBIb3N0IElPQyBmdW5jdGlvbiBpcyBiZWluZyBlbmFibGVkLCBhd2FpdGluZyByZXNwb25zZSBmcm9tIGZpcm13YXJlLgorICogU2VtYXBob3JlIGlzIGFjcXVpcmVkLgorICovCitzdGF0aWMgdm9pZAorYmZhX2lvY19zbV9lbmFibGluZyhzdHJ1Y3QgYmZhX2lvY19zICppb2MsIGVudW0gaW9jX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMoaW9jLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBJT0NfRV9GV1JTUF9FTkFCTEU6CisJCWJmYV9pb2NfdGltZXJfc3RvcChpb2MpOworCQliZmFfaW9jX2h3X3NlbV9yZWxlYXNlKGlvYyk7CisJCWJmYV9mc21fc2V0X3N0YXRlKGlvYywgYmZhX2lvY19zbV9nZXRhdHRyKTsKKwkJYnJlYWs7CisKKwljYXNlIElPQ19FX0hXRVJST1I6CisJCWJmYV9pb2NfdGltZXJfc3RvcChpb2MpOworCQkvKgorCQkgKiBmYWxsIHRocm91Z2gKKwkJICovCisKKwljYXNlIElPQ19FX1RJTUVPVVQ6CisJCWlvYy0+cmV0cnlfY291bnQrKzsKKwkJaWYgKGlvYy0+cmV0cnlfY291bnQgPCBCRkFfSU9DX0hXSU5JVF9NQVgpIHsKKwkJCWJmYV9yZWdfd3JpdGUoaW9jLT5pb2NfcmVncy5pb2NfZndzdGF0ZSwKKwkJCQkgICAgICBCRklfSU9DX1VOSU5JVCk7CisJCQliZmFfZnNtX3NldF9zdGF0ZShpb2MsIGJmYV9pb2Nfc21faHdpbml0KTsKKwkJCWJyZWFrOworCQl9CisKKwkJYmZhX2lvY19od19zZW1fcmVsZWFzZShpb2MpOworCQliZmFfZnNtX3NldF9zdGF0ZShpb2MsIGJmYV9pb2Nfc21faW5pdGZhaWwpOworCQlicmVhazsKKworCWNhc2UgSU9DX0VfRElTQUJMRToKKwkJYmZhX2lvY190aW1lcl9zdG9wKGlvYyk7CisJCWJmYV9pb2NfaHdfc2VtX3JlbGVhc2UoaW9jKTsKKwkJYmZhX2ZzbV9zZXRfc3RhdGUoaW9jLCBiZmFfaW9jX3NtX2Rpc2FibGVkKTsKKwkJYnJlYWs7CisKKwljYXNlIElPQ19FX0ZXUkVBRFk6CisJCWJmYV9pb2Nfc2VuZF9lbmFibGUoaW9jKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfc21fZmF1bHQoaW9jLCBldmVudCk7CisJfQorfQorCisKK3N0YXRpYyB2b2lkCitiZmFfaW9jX3NtX2dldGF0dHJfZW50cnkoc3RydWN0IGJmYV9pb2NfcyAqaW9jKQoreworCWJmYV9pb2NfdGltZXJfc3RhcnQoaW9jKTsKKwliZmFfaW9jX3NlbmRfZ2V0YXR0cihpb2MpOworfQorCisvKioKKyAqIElPQyBjb25maWd1cmF0aW9uIGluIHByb2dyZXNzLiBUaW1lciBpcyBhY3RpdmUuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaW9jX3NtX2dldGF0dHIoc3RydWN0IGJmYV9pb2NfcyAqaW9jLCBlbnVtIGlvY19ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKGlvYywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgSU9DX0VfRldSU1BfR0VUQVRUUjoKKwkJYmZhX2lvY190aW1lcl9zdG9wKGlvYyk7CisJCWJmYV9mc21fc2V0X3N0YXRlKGlvYywgYmZhX2lvY19zbV9vcCk7CisJCWJyZWFrOworCisJY2FzZSBJT0NfRV9IV0VSUk9SOgorCQliZmFfaW9jX3RpbWVyX3N0b3AoaW9jKTsKKwkJLyoKKwkJICogZmFsbCB0aHJvdWdoCisJCSAqLworCisJY2FzZSBJT0NfRV9USU1FT1VUOgorCQliZmFfZnNtX3NldF9zdGF0ZShpb2MsIGJmYV9pb2Nfc21faW5pdGZhaWwpOworCQlicmVhazsKKworCWNhc2UgSU9DX0VfRElTQUJMRToKKwkJYmZhX2lvY190aW1lcl9zdG9wKGlvYyk7CisJCWJmYV9mc21fc2V0X3N0YXRlKGlvYywgYmZhX2lvY19zbV9kaXNhYmxlZCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX3NtX2ZhdWx0KGlvYywgZXZlbnQpOworCX0KK30KKworCitzdGF0aWMgdm9pZAorYmZhX2lvY19zbV9vcF9lbnRyeShzdHJ1Y3QgYmZhX2lvY19zICppb2MpCit7CisJaW9jLT5jYmZuLT5lbmFibGVfY2Jmbihpb2MtPmJmYSwgQkZBX1NUQVRVU19PSyk7CisJYmZhX2lvY19oYl9tb25pdG9yKGlvYyk7CisJYmZhX2lvY19hZW5fcG9zdChpb2MsIEJGQV9JT0NfQUVOX0VOQUJMRSk7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfaW9jX3NtX29wKHN0cnVjdCBiZmFfaW9jX3MgKmlvYywgZW51bSBpb2NfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhpb2MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIElPQ19FX0VOQUJMRToKKwkJYnJlYWs7CisKKwljYXNlIElPQ19FX0RJU0FCTEU6CisJCWJmYV9pb2NfaGJfc3RvcChpb2MpOworCQliZmFfZnNtX3NldF9zdGF0ZShpb2MsIGJmYV9pb2Nfc21fZGlzYWJsaW5nKTsKKwkJYnJlYWs7CisKKwljYXNlIElPQ19FX0hXRVJST1I6CisJY2FzZSBJT0NfRV9GV1JFQURZOgorCQkvKioKKwkJICogSGFyZCBlcnJvciBvciBJT0MgcmVjb3ZlcnkgYnkgb3RoZXIgZnVuY3Rpb24uCisJCSAqIFRyZWF0IGl0IHNhbWUgYXMgaGVhcnRiZWF0IGZhaWx1cmUuCisJCSAqLworCQliZmFfaW9jX2hiX3N0b3AoaW9jKTsKKwkJLyoKKwkJICogISEhIGZhbGwgdGhyb3VnaCAhISEKKwkJICovCisKKwljYXNlIElPQ19FX0hCRkFJTDoKKwkJYmZhX2ZzbV9zZXRfc3RhdGUoaW9jLCBiZmFfaW9jX3NtX2hiZmFpbCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX3NtX2ZhdWx0KGlvYywgZXZlbnQpOworCX0KK30KKworCitzdGF0aWMgdm9pZAorYmZhX2lvY19zbV9kaXNhYmxpbmdfZW50cnkoc3RydWN0IGJmYV9pb2NfcyAqaW9jKQoreworCWJmYV9pb2NfYWVuX3Bvc3QoaW9jLCBCRkFfSU9DX0FFTl9ESVNBQkxFKTsKKwliZmFfaW9jX3RpbWVyX3N0YXJ0KGlvYyk7CisJYmZhX2lvY19zZW5kX2Rpc2FibGUoaW9jKTsKK30KKworLyoqCisgKiBJT0MgaXMgYmVpbmcgZGlzYWJsZWQKKyAqLworc3RhdGljIHZvaWQKK2JmYV9pb2Nfc21fZGlzYWJsaW5nKHN0cnVjdCBiZmFfaW9jX3MgKmlvYywgZW51bSBpb2NfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhpb2MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIElPQ19FX0hXRVJST1I6CisJY2FzZSBJT0NfRV9GV1JTUF9ESVNBQkxFOgorCQliZmFfaW9jX3RpbWVyX3N0b3AoaW9jKTsKKwkJLyoKKwkJICogISEhIGZhbGwgdGhyb3VnaCAhISEKKwkJICovCisKKwljYXNlIElPQ19FX1RJTUVPVVQ6CisJCWJmYV9mc21fc2V0X3N0YXRlKGlvYywgYmZhX2lvY19zbV9kaXNhYmxlZCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX3NtX2ZhdWx0KGlvYywgZXZlbnQpOworCX0KK30KKworLyoqCisgKiBJT0MgZGlzYWJsZSBjb21wbGV0aW9uIGVudHJ5LgorICovCitzdGF0aWMgdm9pZAorYmZhX2lvY19zbV9kaXNhYmxlZF9lbnRyeShzdHJ1Y3QgYmZhX2lvY19zICppb2MpCit7CisJYmZhX2lvY19kaXNhYmxlX2NvbXAoaW9jKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9pb2Nfc21fZGlzYWJsZWQoc3RydWN0IGJmYV9pb2NfcyAqaW9jLCBlbnVtIGlvY19ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKGlvYywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgSU9DX0VfRU5BQkxFOgorCQliZmFfZnNtX3NldF9zdGF0ZShpb2MsIGJmYV9pb2Nfc21fc2Vtd2FpdCk7CisJCWJyZWFrOworCisJY2FzZSBJT0NfRV9ESVNBQkxFOgorCQlpb2MtPmNiZm4tPmRpc2FibGVfY2Jmbihpb2MtPmJmYSk7CisJCWJyZWFrOworCisJY2FzZSBJT0NfRV9GV1JFQURZOgorCQlicmVhazsKKworCWNhc2UgSU9DX0VfREVUQUNIOgorCQliZmFfaW9jX2Zpcm13YXJlX3VubG9jayhpb2MpOworCQliZmFfZnNtX3NldF9zdGF0ZShpb2MsIGJmYV9pb2Nfc21fcmVzZXQpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9zbV9mYXVsdChpb2MsIGV2ZW50KTsKKwl9Cit9CisKKworc3RhdGljIHZvaWQKK2JmYV9pb2Nfc21faW5pdGZhaWxfZW50cnkoc3RydWN0IGJmYV9pb2NfcyAqaW9jKQoreworCWlvYy0+Y2Jmbi0+ZW5hYmxlX2NiZm4oaW9jLT5iZmEsIEJGQV9TVEFUVVNfSU9DX0ZBSUxVUkUpOworCWJmYV9pb2NfdGltZXJfc3RhcnQoaW9jKTsKK30KKworLyoqCisgKiBIYXJkd2FyZSBpbml0aWFsaXphdGlvbiBmYWlsZWQuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaW9jX3NtX2luaXRmYWlsKHN0cnVjdCBiZmFfaW9jX3MgKmlvYywgZW51bSBpb2NfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhpb2MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIElPQ19FX0RJU0FCTEU6CisJCWJmYV9pb2NfdGltZXJfc3RvcChpb2MpOworCQliZmFfZnNtX3NldF9zdGF0ZShpb2MsIGJmYV9pb2Nfc21fZGlzYWJsZWQpOworCQlicmVhazsKKworCWNhc2UgSU9DX0VfREVUQUNIOgorCQliZmFfaW9jX3RpbWVyX3N0b3AoaW9jKTsKKwkJYmZhX2lvY19maXJtd2FyZV91bmxvY2soaW9jKTsKKwkJYmZhX2ZzbV9zZXRfc3RhdGUoaW9jLCBiZmFfaW9jX3NtX3Jlc2V0KTsKKwkJYnJlYWs7CisKKwljYXNlIElPQ19FX1RJTUVPVVQ6CisJCWJmYV9mc21fc2V0X3N0YXRlKGlvYywgYmZhX2lvY19zbV9zZW13YWl0KTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfc21fZmF1bHQoaW9jLCBldmVudCk7CisJfQorfQorCisKK3N0YXRpYyB2b2lkCitiZmFfaW9jX3NtX2hiZmFpbF9lbnRyeShzdHJ1Y3QgYmZhX2lvY19zICppb2MpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqcWU7CisJc3RydWN0IGJmYV9pb2NfaGJmYWlsX25vdGlmeV9zICpub3RpZnk7CisKKwkvKioKKwkgKiBNYXJrIElPQyBhcyBmYWlsZWQgaW4gaGFyZHdhcmUgYW5kIHN0b3AgZmlybXdhcmUuCisJICovCisJYmZhX2lvY19scHVfc3RvcChpb2MpOworCWJmYV9yZWdfd3JpdGUoaW9jLT5pb2NfcmVncy5pb2NfZndzdGF0ZSwgQkZJX0lPQ19IQkZBSUwpOworCisJaWYgKGlvYy0+cGNpZGV2LmRldmljZV9pZCA9PSBCRkFfUENJX0RFVklDRV9JRF9DVCkgeworCQliZmFfcmVnX3dyaXRlKGlvYy0+aW9jX3JlZ3MubGxfaGFsdCwgX19GV19JTklUX0hBTFRfUCk7CisJCS8qCisJCSAqIFdhaXQgZm9yIGhhbHQgdG8gdGFrZSBlZmZlY3QKKwkJICovCisJCWJmYV9yZWdfcmVhZChpb2MtPmlvY19yZWdzLmxsX2hhbHQpOworCX0KKworCS8qKgorCSAqIE5vdGlmeSBkcml2ZXIgYW5kIGNvbW1vbiBtb2R1bGVzIHJlZ2lzdGVyZWQgZm9yIG5vdGlmaWNhdGlvbi4KKwkgKi8KKwlpb2MtPmNiZm4tPmhiZmFpbF9jYmZuKGlvYy0+YmZhKTsKKwlsaXN0X2Zvcl9lYWNoKHFlLCAmaW9jLT5oYl9ub3RpZnlfcSkgeworCQlub3RpZnkgPSAoc3RydWN0IGJmYV9pb2NfaGJmYWlsX25vdGlmeV9zICopcWU7CisJCW5vdGlmeS0+Y2Jmbihub3RpZnktPmNiYXJnKTsKKwl9CisKKwkvKioKKwkgKiBGbHVzaCBhbnkgcXVldWVkIHVwIG1haWxib3ggcmVxdWVzdHMuCisJICovCisJYmZhX2lvY19tYm94X2hiZmFpbChpb2MpOworCWJmYV9pb2NfYWVuX3Bvc3QoaW9jLCBCRkFfSU9DX0FFTl9IQkZBSUwpOworCisJLyoqCisJICogVHJpZ2dlciBhdXRvLXJlY292ZXJ5IGFmdGVyIGEgZGVsYXkuCisJICovCisJaWYgKGlvYy0+YXV0b19yZWNvdmVyKSB7CisJCWJmYV90aW1lcl9iZWdpbihpb2MtPnRpbWVyX21vZCwgJmlvYy0+aW9jX3RpbWVyLAorCQkJCWJmYV9pb2NfdGltZW91dCwgaW9jLCBCRkFfSU9DX1RPVl9SRUNPVkVSKTsKKwl9Cit9CisKKy8qKgorICogSU9DIGhlYXJ0YmVhdCBmYWlsdXJlLgorICovCitzdGF0aWMgdm9pZAorYmZhX2lvY19zbV9oYmZhaWwoc3RydWN0IGJmYV9pb2NfcyAqaW9jLCBlbnVtIGlvY19ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKGlvYywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCisJY2FzZSBJT0NfRV9FTkFCTEU6CisJCWlvYy0+Y2Jmbi0+ZW5hYmxlX2NiZm4oaW9jLT5iZmEsIEJGQV9TVEFUVVNfSU9DX0ZBSUxVUkUpOworCQlicmVhazsKKworCWNhc2UgSU9DX0VfRElTQUJMRToKKwkJaWYgKGlvYy0+YXV0b19yZWNvdmVyKQorCQkJYmZhX2lvY190aW1lcl9zdG9wKGlvYyk7CisJCWJmYV9mc21fc2V0X3N0YXRlKGlvYywgYmZhX2lvY19zbV9kaXNhYmxlZCk7CisJCWJyZWFrOworCisJY2FzZSBJT0NfRV9USU1FT1VUOgorCQliZmFfZnNtX3NldF9zdGF0ZShpb2MsIGJmYV9pb2Nfc21fc2Vtd2FpdCk7CisJCWJyZWFrOworCisJY2FzZSBJT0NfRV9GV1JFQURZOgorCQkvKioKKwkJICogUmVjb3ZlcnkgaXMgYWxyZWFkeSBpbml0aWF0ZWQgYnkgb3RoZXIgZnVuY3Rpb24uCisJCSAqLworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9zbV9mYXVsdChpb2MsIGV2ZW50KTsKKwl9Cit9CisKKworCisvKioKKyAqICBiZmFfaW9jX3B2dCBCRkEgSU9DIHByaXZhdGUgZnVuY3Rpb25zCisgKi8KKworc3RhdGljIHZvaWQKK2JmYV9pb2NfZGlzYWJsZV9jb21wKHN0cnVjdCBiZmFfaW9jX3MgKmlvYykKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICpxZTsKKwlzdHJ1Y3QgYmZhX2lvY19oYmZhaWxfbm90aWZ5X3MgKm5vdGlmeTsKKworCWlvYy0+Y2Jmbi0+ZGlzYWJsZV9jYmZuKGlvYy0+YmZhKTsKKworCS8qKgorCSAqIE5vdGlmeSBjb21tb24gbW9kdWxlcyByZWdpc3RlcmVkIGZvciBub3RpZmljYXRpb24uCisJICovCisJbGlzdF9mb3JfZWFjaChxZSwgJmlvYy0+aGJfbm90aWZ5X3EpIHsKKwkJbm90aWZ5ID0gKHN0cnVjdCBiZmFfaW9jX2hiZmFpbF9ub3RpZnlfcyAqKXFlOworCQlub3RpZnktPmNiZm4obm90aWZ5LT5jYmFyZyk7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX2lvY19zZW1fdGltZW91dCh2b2lkICppb2NfYXJnKQoreworCXN0cnVjdCBiZmFfaW9jX3MgKmlvYyA9IChzdHJ1Y3QgYmZhX2lvY19zICopaW9jX2FyZzsKKworCWJmYV9pb2NfaHdfc2VtX2dldChpb2MpOworfQorCitzdGF0aWMgdm9pZAorYmZhX2lvY191c2FnZV9zZW1fZ2V0KHN0cnVjdCBiZmFfaW9jX3MgKmlvYykKK3sKKwl1MzIgICAgICAgIHIzMjsKKwlpbnQgICAgICAgICAgICAgY250ID0gMDsKKyNkZWZpbmUgQkZBX1NFTV9TUElOQ05UCTEwMDAKKworCWRvIHsKKwkJcjMyID0gYmZhX3JlZ19yZWFkKGlvYy0+aW9jX3JlZ3MuaW9jX3VzYWdlX3NlbV9yZWcpOworCQljbnQrKzsKKwkJaWYgKGNudCA+IEJGQV9TRU1fU1BJTkNOVCkKKwkJCWJyZWFrOworCX0gd2hpbGUgKHIzMiAhPSAwKTsKKwliZmFfYXNzZXJ0KGNudCA8IEJGQV9TRU1fU1BJTkNOVCk7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfaW9jX3VzYWdlX3NlbV9yZWxlYXNlKHN0cnVjdCBiZmFfaW9jX3MgKmlvYykKK3sKKwliZmFfcmVnX3dyaXRlKGlvYy0+aW9jX3JlZ3MuaW9jX3VzYWdlX3NlbV9yZWcsIDEpOworfQorCitzdGF0aWMgdm9pZAorYmZhX2lvY19od19zZW1fZ2V0KHN0cnVjdCBiZmFfaW9jX3MgKmlvYykKK3sKKwl1MzIgICAgICAgIHIzMjsKKworCS8qKgorCSAqIEZpcnN0IHJlYWQgdG8gdGhlIHNlbWFwaG9yZSByZWdpc3RlciB3aWxsIHJldHVybiAwLCBzdWJzZXF1ZW50IHJlYWRzCisJICogd2lsbCByZXR1cm4gMS4gU2VtYXBob3JlIGlzIHJlbGVhc2VkIGJ5IHdyaXRpbmcgMCB0byB0aGUgcmVnaXN0ZXIKKwkgKi8KKwlyMzIgPSBiZmFfcmVnX3JlYWQoaW9jLT5pb2NfcmVncy5pb2Nfc2VtX3JlZyk7CisJaWYgKHIzMiA9PSAwKSB7CisJCWJmYV9mc21fc2VuZF9ldmVudChpb2MsIElPQ19FX1NFTUxPQ0tFRCk7CisJCXJldHVybjsKKwl9CisKKwliZmFfdGltZXJfYmVnaW4oaW9jLT50aW1lcl9tb2QsICZpb2MtPnNlbV90aW1lciwgYmZhX2lvY19zZW1fdGltZW91dCwKKwkJCWlvYywgQkZBX0lPQ19UT1YpOworfQorCitzdGF0aWMgdm9pZAorYmZhX2lvY19od19zZW1fcmVsZWFzZShzdHJ1Y3QgYmZhX2lvY19zICppb2MpCit7CisJYmZhX3JlZ193cml0ZShpb2MtPmlvY19yZWdzLmlvY19zZW1fcmVnLCAxKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9pb2NfaHdfc2VtX2dldF9jYW5jZWwoc3RydWN0IGJmYV9pb2NfcyAqaW9jKQoreworCWJmYV90aW1lcl9zdG9wKCZpb2MtPnNlbV90aW1lcik7Cit9CisKKy8qKgorICogSW5pdGlhbGl6ZSBMUFUgbG9jYWwgbWVtb3J5IChha2Egc2Vjb25kYXJ5IG1lbW9yeSAvIFNSQU0pCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaW9jX2xtZW1faW5pdChzdHJ1Y3QgYmZhX2lvY19zICppb2MpCit7CisJdTMyICAgICAgICBwc3NfY3RsOworCWludCAgICAgICAgICAgICBpOworI2RlZmluZSBQU1NfTE1FTV9JTklUX1RJTUUgIDEwMDAwCisKKwlwc3NfY3RsID0gYmZhX3JlZ19yZWFkKGlvYy0+aW9jX3JlZ3MucHNzX2N0bF9yZWcpOworCXBzc19jdGwgJj0gfl9fUFNTX0xNRU1fUkVTRVQ7CisJcHNzX2N0bCB8PSBfX1BTU19MTUVNX0lOSVRfRU47CisJcHNzX2N0bCB8PSBfX1BTU19JMkNfQ0xLX0RJVigzVUwpOyAvKiBpMmMgd29ya2Fyb3VuZCAxMi41a2h6IGNsb2NrICovCisJYmZhX3JlZ193cml0ZShpb2MtPmlvY19yZWdzLnBzc19jdGxfcmVnLCBwc3NfY3RsKTsKKworCS8qKgorCSAqIHdhaXQgZm9yIG1lbW9yeSBpbml0aWFsaXphdGlvbiB0byBiZSBjb21wbGV0ZQorCSAqLworCWkgPSAwOworCWRvIHsKKwkJcHNzX2N0bCA9IGJmYV9yZWdfcmVhZChpb2MtPmlvY19yZWdzLnBzc19jdGxfcmVnKTsKKwkJaSsrOworCX0gd2hpbGUgKCEocHNzX2N0bCAmIF9fUFNTX0xNRU1fSU5JVF9ET05FKSAmJiAoaSA8IFBTU19MTUVNX0lOSVRfVElNRSkpOworCisJLyoqCisJICogSWYgbWVtb3J5IGluaXRpYWxpemF0aW9uIGlzIG5vdCBzdWNjZXNzZnVsLCBJT0MgdGltZW91dCB3aWxsIGNhdGNoCisJICogc3VjaCBmYWlsdXJlcy4KKwkgKi8KKwliZmFfYXNzZXJ0KHBzc19jdGwgJiBfX1BTU19MTUVNX0lOSVRfRE9ORSk7CisJYmZhX3RyYyhpb2MsIHBzc19jdGwpOworCisJcHNzX2N0bCAmPSB+KF9fUFNTX0xNRU1fSU5JVF9ET05FIHwgX19QU1NfTE1FTV9JTklUX0VOKTsKKwliZmFfcmVnX3dyaXRlKGlvYy0+aW9jX3JlZ3MucHNzX2N0bF9yZWcsIHBzc19jdGwpOworfQorCitzdGF0aWMgdm9pZAorYmZhX2lvY19scHVfc3RhcnQoc3RydWN0IGJmYV9pb2NfcyAqaW9jKQoreworCXUzMiAgICAgICAgcHNzX2N0bDsKKworCS8qKgorCSAqIFRha2UgcHJvY2Vzc29yIG91dCBvZiByZXNldC4KKwkgKi8KKwlwc3NfY3RsID0gYmZhX3JlZ19yZWFkKGlvYy0+aW9jX3JlZ3MucHNzX2N0bF9yZWcpOworCXBzc19jdGwgJj0gfl9fUFNTX0xQVTBfUkVTRVQ7CisKKwliZmFfcmVnX3dyaXRlKGlvYy0+aW9jX3JlZ3MucHNzX2N0bF9yZWcsIHBzc19jdGwpOworfQorCitzdGF0aWMgdm9pZAorYmZhX2lvY19scHVfc3RvcChzdHJ1Y3QgYmZhX2lvY19zICppb2MpCit7CisJdTMyICAgICAgICBwc3NfY3RsOworCisJLyoqCisJICogUHV0IHByb2Nlc3NvcnMgaW4gcmVzZXQuCisJICovCisJcHNzX2N0bCA9IGJmYV9yZWdfcmVhZChpb2MtPmlvY19yZWdzLnBzc19jdGxfcmVnKTsKKwlwc3NfY3RsIHw9IChfX1BTU19MUFUwX1JFU0VUIHwgX19QU1NfTFBVMV9SRVNFVCk7CisKKwliZmFfcmVnX3dyaXRlKGlvYy0+aW9jX3JlZ3MucHNzX2N0bF9yZWcsIHBzc19jdGwpOworfQorCisvKioKKyAqIEdldCBkcml2ZXIgYW5kIGZpcm13YXJlIHZlcnNpb25zLgorICovCitzdGF0aWMgdm9pZAorYmZhX2lvY19md3Zlcl9nZXQoc3RydWN0IGJmYV9pb2NfcyAqaW9jLCBzdHJ1Y3QgYmZpX2lvY19pbWFnZV9oZHJfcyAqZndoZHIpCit7CisJdTMyICAgICAgICBwZ251bSwgcGdvZmY7CisJdTMyICAgICAgICBsb2ZmID0gMDsKKwlpbnQgICAgICAgICAgICAgaTsKKwl1MzIgICAgICAgKmZ3c2lnID0gKHUzMiAqKSBmd2hkcjsKKworCXBnbnVtID0gYmZhX2lvY19zbWVtX3BnbnVtKGlvYywgbG9mZik7CisJcGdvZmYgPSBiZmFfaW9jX3NtZW1fcGdvZmYoaW9jLCBsb2ZmKTsKKwliZmFfcmVnX3dyaXRlKGlvYy0+aW9jX3JlZ3MuaG9zdF9wYWdlX251bV9mbiwgcGdudW0pOworCisJZm9yIChpID0gMDsgaSA8IChzaXplb2Yoc3RydWN0IGJmaV9pb2NfaW1hZ2VfaGRyX3MpIC8gc2l6ZW9mKHUzMikpOworCSAgICAgaSsrKSB7CisJCWZ3c2lnW2ldID0gYmZhX21lbV9yZWFkKGlvYy0+aW9jX3JlZ3Muc21lbV9wYWdlX3N0YXJ0LCBsb2ZmKTsKKwkJbG9mZiArPSBzaXplb2YodTMyKTsKKwl9Cit9CisKK3N0YXRpYyB1MzIgKgorYmZhX2lvY19md2ltZ19nZXRfY2h1bmsoc3RydWN0IGJmYV9pb2NfcyAqaW9jLCB1MzIgb2ZmKQoreworCWlmIChpb2MtPmN0ZGV2KQorCQlyZXR1cm4gYmZpX2ltYWdlX2N0X2dldF9jaHVuayhvZmYpOworCXJldHVybiBiZmlfaW1hZ2VfY2JfZ2V0X2NodW5rKG9mZik7Cit9CisKK3N0YXRpYyAgICAgICAgICB1MzIKK2JmYV9pb2NfZndpbWdfZ2V0X3NpemUoc3RydWN0IGJmYV9pb2NfcyAqaW9jKQoreworcmV0dXJuIChpb2MtPmN0ZGV2KSA/IGJmaV9pbWFnZV9jdF9zaXplIDogYmZpX2ltYWdlX2NiX3NpemU7Cit9CisKKy8qKgorICogUmV0dXJucyBUUlVFIGlmIHNhbWUuCisgKi8KK3N0YXRpYyAgICAgICAgICBiZmFfYm9vbGVhbl90CitiZmFfaW9jX2Z3dmVyX2NtcChzdHJ1Y3QgYmZhX2lvY19zICppb2MsIHN0cnVjdCBiZmlfaW9jX2ltYWdlX2hkcl9zICpmd2hkcikKK3sKKwlzdHJ1Y3QgYmZpX2lvY19pbWFnZV9oZHJfcyAqZHJ2X2Z3aGRyOworCWludCAgICAgICAgICAgICBpOworCisJZHJ2X2Z3aGRyID0KKwkJKHN0cnVjdCBiZmlfaW9jX2ltYWdlX2hkcl9zICopYmZhX2lvY19md2ltZ19nZXRfY2h1bmsoaW9jLCAwKTsKKworCWZvciAoaSA9IDA7IGkgPCBCRklfSU9DX01ENVNVTV9TWjsgaSsrKSB7CisJCWlmIChmd2hkci0+bWQ1c3VtW2ldICE9IGRydl9md2hkci0+bWQ1c3VtW2ldKSB7CisJCQliZmFfdHJjKGlvYywgaSk7CisJCQliZmFfdHJjKGlvYywgZndoZHItPm1kNXN1bVtpXSk7CisJCQliZmFfdHJjKGlvYywgZHJ2X2Z3aGRyLT5tZDVzdW1baV0pOworCQkJcmV0dXJuIEJGQV9GQUxTRTsKKwkJfQorCX0KKworCWJmYV90cmMoaW9jLCBmd2hkci0+bWQ1c3VtWzBdKTsKKwlyZXR1cm4gQkZBX1RSVUU7Cit9CisKKy8qKgorICogUmV0dXJuIHRydWUgaWYgY3VycmVudCBydW5uaW5nIHZlcnNpb24gaXMgdmFsaWQuIEZpcm13YXJlIHNpZ25hdHVyZSBhbmQKKyAqIGV4ZWN1dGlvbiBjb250ZXh0IChkcml2ZXIvYmlvcykgbXVzdCBtYXRjaC4KKyAqLworc3RhdGljICAgICAgICAgIGJmYV9ib29sZWFuX3QKK2JmYV9pb2NfZnd2ZXJfdmFsaWQoc3RydWN0IGJmYV9pb2NfcyAqaW9jKQoreworCXN0cnVjdCBiZmlfaW9jX2ltYWdlX2hkcl9zIGZ3aGRyLCAqZHJ2X2Z3aGRyOworCisJLyoqCisJICogSWYgYmlvcy9lZmkgYm9vdCAoZmxhc2ggYmFzZWQpIC0tIHJldHVybiB0cnVlCisJICovCisJaWYgKGJmYV9pb2NfZndpbWdfZ2V0X3NpemUoaW9jKSA8IEJGQV9JT0NfRldJTUdfTUlOU1opCisJCXJldHVybiBCRkFfVFJVRTsKKworCWJmYV9pb2NfZnd2ZXJfZ2V0KGlvYywgJmZ3aGRyKTsKKwlkcnZfZndoZHIgPQorCQkoc3RydWN0IGJmaV9pb2NfaW1hZ2VfaGRyX3MgKiliZmFfaW9jX2Z3aW1nX2dldF9jaHVuayhpb2MsIDApOworCisJaWYgKGZ3aGRyLnNpZ25hdHVyZSAhPSBkcnZfZndoZHItPnNpZ25hdHVyZSkgeworCQliZmFfdHJjKGlvYywgZndoZHIuc2lnbmF0dXJlKTsKKwkJYmZhX3RyYyhpb2MsIGRydl9md2hkci0+c2lnbmF0dXJlKTsKKwkJcmV0dXJuIEJGQV9GQUxTRTsKKwl9CisKKwlpZiAoZndoZHIuZXhlYyAhPSBkcnZfZndoZHItPmV4ZWMpIHsKKwkJYmZhX3RyYyhpb2MsIGZ3aGRyLmV4ZWMpOworCQliZmFfdHJjKGlvYywgZHJ2X2Z3aGRyLT5leGVjKTsKKwkJcmV0dXJuIEJGQV9GQUxTRTsKKwl9CisKKwlyZXR1cm4gYmZhX2lvY19md3Zlcl9jbXAoaW9jLCAmZndoZHIpOworfQorCisvKioKKyAqIFJldHVybiB0cnVlIGlmIGZpcm13YXJlIG9mIGN1cnJlbnQgZHJpdmVyIG1hdGNoZXMgdGhlIHJ1bm5pbmcgZmlybXdhcmUuCisgKi8KK3N0YXRpYyAgICAgICAgICBiZmFfYm9vbGVhbl90CitiZmFfaW9jX2Zpcm13YXJlX2xvY2soc3RydWN0IGJmYV9pb2NfcyAqaW9jKQoreworCWVudW0gYmZpX2lvY19zdGF0ZSBpb2NfZndzdGF0ZTsKKwl1MzIgICAgICAgIHVzZWNudDsKKwlzdHJ1Y3QgYmZpX2lvY19pbWFnZV9oZHJfcyBmd2hkcjsKKworCS8qKgorCSAqIEZpcm13YXJlIG1hdGNoIGNoZWNrIGlzIHJlbGV2YW50IG9ubHkgZm9yIENOQS4KKwkgKi8KKwlpZiAoIWlvYy0+Y25hKQorCQlyZXR1cm4gQkZBX1RSVUU7CisKKwkvKioKKwkgKiBJZiBiaW9zIGJvb3QgKGZsYXNoIGJhc2VkKSAtLSBkbyBub3QgaW5jcmVtZW50IHVzYWdlIGNvdW50CisJICovCisJaWYgKGJmYV9pb2NfZndpbWdfZ2V0X3NpemUoaW9jKSA8IEJGQV9JT0NfRldJTUdfTUlOU1opCisJCXJldHVybiBCRkFfVFJVRTsKKworCWJmYV9pb2NfdXNhZ2Vfc2VtX2dldChpb2MpOworCXVzZWNudCA9IGJmYV9yZWdfcmVhZChpb2MtPmlvY19yZWdzLmlvY191c2FnZV9yZWcpOworCisJLyoqCisJICogSWYgdXNhZ2UgY291bnQgaXMgMCwgYWx3YXlzIHJldHVybiBUUlVFLgorCSAqLworCWlmICh1c2VjbnQgPT0gMCkgeworCQliZmFfcmVnX3dyaXRlKGlvYy0+aW9jX3JlZ3MuaW9jX3VzYWdlX3JlZywgMSk7CisJCWJmYV9pb2NfdXNhZ2Vfc2VtX3JlbGVhc2UoaW9jKTsKKwkJYmZhX3RyYyhpb2MsIHVzZWNudCk7CisJCXJldHVybiBCRkFfVFJVRTsKKwl9CisKKwlpb2NfZndzdGF0ZSA9IGJmYV9yZWdfcmVhZChpb2MtPmlvY19yZWdzLmlvY19md3N0YXRlKTsKKwliZmFfdHJjKGlvYywgaW9jX2Z3c3RhdGUpOworCisJLyoqCisJICogVXNlIGNvdW50IGNhbm5vdCBiZSBub24temVybyBhbmQgY2hpcCBpbiB1bmluaXRpYWxpemVkIHN0YXRlLgorCSAqLworCWJmYV9hc3NlcnQoaW9jX2Z3c3RhdGUgIT0gQkZJX0lPQ19VTklOSVQpOworCisJLyoqCisJICogQ2hlY2sgaWYgYW5vdGhlciBkcml2ZXIgd2l0aCBhIGRpZmZlcmVudCBmaXJtd2FyZSBpcyBhY3RpdmUKKwkgKi8KKwliZmFfaW9jX2Z3dmVyX2dldChpb2MsICZmd2hkcik7CisJaWYgKCFiZmFfaW9jX2Z3dmVyX2NtcChpb2MsICZmd2hkcikpIHsKKwkJYmZhX2lvY191c2FnZV9zZW1fcmVsZWFzZShpb2MpOworCQliZmFfdHJjKGlvYywgdXNlY250KTsKKwkJcmV0dXJuIEJGQV9GQUxTRTsKKwl9CisKKwkvKioKKwkgKiBTYW1lIGZpcm13YXJlIHZlcnNpb24uIEluY3JlbWVudCB0aGUgcmVmZXJlbmNlIGNvdW50LgorCSAqLworCXVzZWNudCsrOworCWJmYV9yZWdfd3JpdGUoaW9jLT5pb2NfcmVncy5pb2NfdXNhZ2VfcmVnLCB1c2VjbnQpOworCWJmYV9pb2NfdXNhZ2Vfc2VtX3JlbGVhc2UoaW9jKTsKKwliZmFfdHJjKGlvYywgdXNlY250KTsKKwlyZXR1cm4gQkZBX1RSVUU7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfaW9jX2Zpcm13YXJlX3VubG9jayhzdHJ1Y3QgYmZhX2lvY19zICppb2MpCit7CisJdTMyICAgICAgICB1c2VjbnQ7CisKKwkvKioKKwkgKiBGaXJtd2FyZSBsb2NrIGlzIHJlbGV2YW50IG9ubHkgZm9yIENOQS4KKwkgKiBJZiBiaW9zIGJvb3QgKGZsYXNoIGJhc2VkKSAtLSBkbyBub3QgZGVjcmVtZW50IHVzYWdlIGNvdW50CisJICovCisJaWYgKCFpb2MtPmNuYSB8fCAoYmZhX2lvY19md2ltZ19nZXRfc2l6ZShpb2MpIDwgQkZBX0lPQ19GV0lNR19NSU5TWikpCisJCXJldHVybjsKKworCS8qKgorCSAqIGRlY3JlbWVudCB1c2FnZSBjb3VudAorCSAqLworCWJmYV9pb2NfdXNhZ2Vfc2VtX2dldChpb2MpOworCXVzZWNudCA9IGJmYV9yZWdfcmVhZChpb2MtPmlvY19yZWdzLmlvY191c2FnZV9yZWcpOworCWJmYV9hc3NlcnQodXNlY250ID4gMCk7CisKKwl1c2VjbnQtLTsKKwliZmFfcmVnX3dyaXRlKGlvYy0+aW9jX3JlZ3MuaW9jX3VzYWdlX3JlZywgdXNlY250KTsKKwliZmFfdHJjKGlvYywgdXNlY250KTsKKworCWJmYV9pb2NfdXNhZ2Vfc2VtX3JlbGVhc2UoaW9jKTsKK30KKworLyoqCisgKiBDb25kaXRpb25hbGx5IGZsdXNoIGFueSBwZW5kaW5nIG1lc3NhZ2UgZnJvbSBmaXJtd2FyZSBhdCBzdGFydC4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9pb2NfbXNnZmx1c2goc3RydWN0IGJmYV9pb2NfcyAqaW9jKQoreworCXUzMiAgICAgICAgcjMyOworCisJcjMyID0gYmZhX3JlZ19yZWFkKGlvYy0+aW9jX3JlZ3MubHB1X21ib3hfY21kKTsKKwlpZiAocjMyKQorCQliZmFfcmVnX3dyaXRlKGlvYy0+aW9jX3JlZ3MubHB1X21ib3hfY21kLCAxKTsKK30KKworCitzdGF0aWMgdm9pZAorYmZhX2lvY19od2luaXQoc3RydWN0IGJmYV9pb2NfcyAqaW9jLCBiZmFfYm9vbGVhbl90IGZvcmNlKQoreworCWVudW0gYmZpX2lvY19zdGF0ZSBpb2NfZndzdGF0ZTsKKwliZmFfYm9vbGVhbl90ICAgZnd2YWxpZDsKKworCWlvY19md3N0YXRlID0gYmZhX3JlZ19yZWFkKGlvYy0+aW9jX3JlZ3MuaW9jX2Z3c3RhdGUpOworCisJaWYgKGZvcmNlKQorCQlpb2NfZndzdGF0ZSA9IEJGSV9JT0NfVU5JTklUOworCisJYmZhX3RyYyhpb2MsIGlvY19md3N0YXRlKTsKKworCS8qKgorCSAqIGNoZWNrIGlmIGZpcm13YXJlIGlzIHZhbGlkCisJICovCisJZnd2YWxpZCA9IChpb2NfZndzdGF0ZSA9PSBCRklfSU9DX1VOSU5JVCkgPworCQkJQkZBX0ZBTFNFIDogYmZhX2lvY19md3Zlcl92YWxpZChpb2MpOworCisJaWYgKCFmd3ZhbGlkKSB7CisJCWJmYV9pb2NfYm9vdChpb2MsIEJGSV9CT09UX1RZUEVfTk9STUFMLCBpb2MtPnBjaWRldi5kZXZpY2VfaWQpOworCQlyZXR1cm47CisJfQorCisJLyoqCisJICogSWYgaGFyZHdhcmUgaW5pdGlhbGl6YXRpb24gaXMgaW4gcHJvZ3Jlc3MgKGluaXRpYWxpemVkIGJ5IG90aGVyIElPQyksCisJICoganVzdCB3YWl0IGZvciBhbiBpbml0aWFsaXphdGlvbiBjb21wbGV0aW9uIGludGVycnVwdC4KKwkgKi8KKwlpZiAoaW9jX2Z3c3RhdGUgPT0gQkZJX0lPQ19JTklUSU5HKSB7CisJCWJmYV90cmMoaW9jLCBpb2NfZndzdGF0ZSk7CisJCWlvYy0+Y2Jmbi0+cmVzZXRfY2Jmbihpb2MtPmJmYSk7CisJCXJldHVybjsKKwl9CisKKwkvKioKKwkgKiBJZiBJT0MgZnVuY3Rpb24gaXMgZGlzYWJsZWQgYW5kIGZpcm13YXJlIHZlcnNpb24gaXMgc2FtZSwKKwkgKiBqdXN0IHJlLWVuYWJsZSBJT0MuCisJICovCisJaWYgKGlvY19md3N0YXRlID09IEJGSV9JT0NfRElTQUJMRUQgfHwgaW9jX2Z3c3RhdGUgPT0gQkZJX0lPQ19PUCkgeworCQliZmFfdHJjKGlvYywgaW9jX2Z3c3RhdGUpOworCisJCS8qKgorCQkgKiBXaGVuIHVzaW5nIE1TSS1YIGFueSBwZW5kaW5nIGZpcm13YXJlIHJlYWR5IGV2ZW50IHNob3VsZAorCQkgKiBiZSBmbHVzaGVkLiBPdGhlcndpc2UgTVNJLVggaW50ZXJydXB0cyBhcmUgbm90IGRlbGl2ZXJlZC4KKwkJICovCisJCWJmYV9pb2NfbXNnZmx1c2goaW9jKTsKKwkJaW9jLT5jYmZuLT5yZXNldF9jYmZuKGlvYy0+YmZhKTsKKwkJYmZhX2ZzbV9zZW5kX2V2ZW50KGlvYywgSU9DX0VfRldSRUFEWSk7CisJCXJldHVybjsKKwl9CisKKwkvKioKKwkgKiBJbml0aWFsaXplIHRoZSBoL3cgZm9yIGFueSBvdGhlciBzdGF0ZXMuCisJICovCisJYmZhX2lvY19ib290KGlvYywgQkZJX0JPT1RfVFlQRV9OT1JNQUwsIGlvYy0+cGNpZGV2LmRldmljZV9pZCk7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfaW9jX3RpbWVvdXQodm9pZCAqaW9jX2FyZykKK3sKKwlzdHJ1Y3QgYmZhX2lvY19zICppb2MgPSAoc3RydWN0IGJmYV9pb2NfcyAqKWlvY19hcmc7CisKKwliZmFfdHJjKGlvYywgMCk7CisJYmZhX2ZzbV9zZW5kX2V2ZW50KGlvYywgSU9DX0VfVElNRU9VVCk7Cit9CisKK3ZvaWQKK2JmYV9pb2NfbWJveF9zZW5kKHN0cnVjdCBiZmFfaW9jX3MgKmlvYywgdm9pZCAqaW9jX21zZywgaW50IGxlbikKK3sKKwl1MzIgICAgICAgKm1zZ3AgPSAodTMyICopIGlvY19tc2c7CisJdTMyICAgICAgICBpOworCisJYmZhX3RyYyhpb2MsIG1zZ3BbMF0pOworCWJmYV90cmMoaW9jLCBsZW4pOworCisJYmZhX2Fzc2VydChsZW4gPD0gQkZJX0lPQ19NU0dMRU5fTUFYKTsKKworCS8qCisJICogZmlyc3Qgd3JpdGUgbXNnIHRvIG1haWxib3ggcmVnaXN0ZXJzCisJICovCisJZm9yIChpID0gMDsgaSA8IGxlbiAvIHNpemVvZih1MzIpOyBpKyspCisJCWJmYV9yZWdfd3JpdGUoaW9jLT5pb2NfcmVncy5oZm5fbWJveCArIGkgKiBzaXplb2YodTMyKSwKKwkJCSAgICAgIGJmYV9vc193dG9sZShtc2dwW2ldKSk7CisKKwlmb3IgKDsgaSA8IEJGSV9JT0NfTVNHTEVOX01BWCAvIHNpemVvZih1MzIpOyBpKyspCisJCWJmYV9yZWdfd3JpdGUoaW9jLT5pb2NfcmVncy5oZm5fbWJveCArIGkgKiBzaXplb2YodTMyKSwgMCk7CisKKwkvKgorCSAqIHdyaXRlIDEgdG8gbWFpbGJveCBDTUQgdG8gdHJpZ2dlciBMUFUgZXZlbnQKKwkgKi8KKwliZmFfcmVnX3dyaXRlKGlvYy0+aW9jX3JlZ3MuaGZuX21ib3hfY21kLCAxKTsKKwkodm9pZCliZmFfcmVnX3JlYWQoaW9jLT5pb2NfcmVncy5oZm5fbWJveF9jbWQpOworfQorCitzdGF0aWMgdm9pZAorYmZhX2lvY19zZW5kX2VuYWJsZShzdHJ1Y3QgYmZhX2lvY19zICppb2MpCit7CisJc3RydWN0IGJmaV9pb2NfY3RybF9yZXFfcyBlbmFibGVfcmVxOworCisJYmZpX2gyaV9zZXQoZW5hYmxlX3JlcS5taCwgQkZJX01DX0lPQywgQkZJX0lPQ19IMklfRU5BQkxFX1JFUSwKKwkJICAgIGJmYV9pb2NfcG9ydGlkKGlvYykpOworCWVuYWJsZV9yZXEuaW9jX2NsYXNzID0gaW9jLT5pb2NfbWM7CisJYmZhX2lvY19tYm94X3NlbmQoaW9jLCAmZW5hYmxlX3JlcSwgc2l6ZW9mKHN0cnVjdCBiZmlfaW9jX2N0cmxfcmVxX3MpKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9pb2Nfc2VuZF9kaXNhYmxlKHN0cnVjdCBiZmFfaW9jX3MgKmlvYykKK3sKKwlzdHJ1Y3QgYmZpX2lvY19jdHJsX3JlcV9zIGRpc2FibGVfcmVxOworCisJYmZpX2gyaV9zZXQoZGlzYWJsZV9yZXEubWgsIEJGSV9NQ19JT0MsIEJGSV9JT0NfSDJJX0RJU0FCTEVfUkVRLAorCQkgICAgYmZhX2lvY19wb3J0aWQoaW9jKSk7CisJYmZhX2lvY19tYm94X3NlbmQoaW9jLCAmZGlzYWJsZV9yZXEsIHNpemVvZihzdHJ1Y3QgYmZpX2lvY19jdHJsX3JlcV9zKSk7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfaW9jX3NlbmRfZ2V0YXR0cihzdHJ1Y3QgYmZhX2lvY19zICppb2MpCit7CisJc3RydWN0IGJmaV9pb2NfZ2V0YXR0cl9yZXFfcyBhdHRyX3JlcTsKKworCWJmaV9oMmlfc2V0KGF0dHJfcmVxLm1oLCBCRklfTUNfSU9DLCBCRklfSU9DX0gySV9HRVRBVFRSX1JFUSwKKwkJICAgIGJmYV9pb2NfcG9ydGlkKGlvYykpOworCWJmYV9kbWFfYmVfYWRkcl9zZXQoYXR0cl9yZXEuYXR0cl9hZGRyLCBpb2MtPmF0dHJfZG1hLnBhKTsKKwliZmFfaW9jX21ib3hfc2VuZChpb2MsICZhdHRyX3JlcSwgc2l6ZW9mKGF0dHJfcmVxKSk7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfaW9jX2hiX2NoZWNrKHZvaWQgKmNiYXJnKQoreworCXN0cnVjdCBiZmFfaW9jX3MgKmlvYyA9IGNiYXJnOworCXUzMiAgICAgICAgaGJfY291bnQ7CisKKwloYl9jb3VudCA9IGJmYV9yZWdfcmVhZChpb2MtPmlvY19yZWdzLmhlYXJ0YmVhdCk7CisJaWYgKGlvYy0+aGJfY291bnQgPT0gaGJfY291bnQpIHsKKwkJaW9jLT5oYl9mYWlsKys7CisJfSBlbHNlIHsKKwkJaW9jLT5oYl9jb3VudCA9IGhiX2NvdW50OworCQlpb2MtPmhiX2ZhaWwgPSAwOworCX0KKworCWlmIChpb2MtPmhiX2ZhaWwgPj0gQkZBX0lPQ19IQl9GQUlMX01BWCkgeworCQliZmFfbG9nKGlvYy0+bG9nbSwgQkZBX0xPR19IQUxfSEVBUlRCRUFUX0ZBSUxVUkUsIGhiX2NvdW50KTsKKwkJaW9jLT5oYl9mYWlsID0gMDsKKwkJYmZhX2lvY19yZWNvdmVyKGlvYyk7CisJCXJldHVybjsKKwl9CisKKwliZmFfaW9jX21ib3hfcG9sbChpb2MpOworCWJmYV90aW1lcl9iZWdpbihpb2MtPnRpbWVyX21vZCwgJmlvYy0+aW9jX3RpbWVyLCBiZmFfaW9jX2hiX2NoZWNrLCBpb2MsCisJCQlCRkFfSU9DX0hCX1RPVik7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfaW9jX2hiX21vbml0b3Ioc3RydWN0IGJmYV9pb2NfcyAqaW9jKQoreworCWlvYy0+aGJfZmFpbCA9IDA7CisJaW9jLT5oYl9jb3VudCA9IGJmYV9yZWdfcmVhZChpb2MtPmlvY19yZWdzLmhlYXJ0YmVhdCk7CisJYmZhX3RpbWVyX2JlZ2luKGlvYy0+dGltZXJfbW9kLCAmaW9jLT5pb2NfdGltZXIsIGJmYV9pb2NfaGJfY2hlY2ssIGlvYywKKwkJCUJGQV9JT0NfSEJfVE9WKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9pb2NfaGJfc3RvcChzdHJ1Y3QgYmZhX2lvY19zICppb2MpCit7CisJYmZhX3RpbWVyX3N0b3AoJmlvYy0+aW9jX3RpbWVyKTsKK30KKworLyoqCisgKiBIb3N0IHRvIExQVSBtYWlsYm94IG1lc3NhZ2UgYWRkcmVzc2VzCisgKi8KK3N0YXRpYyBzdHJ1Y3QgeworCXUzMiAgICAgICAgaGZuX21ib3gsIGxwdV9tYm94LCBoZm5fcGduOworfSBpb2NyZWdfZm5yZWdbXSA9IHsKKwl7CisJSE9TVEZOMF9MUFVfTUJPWDBfMCwgTFBVX0hPU1RGTjBfTUJPWDBfMCwgSE9TVF9QQUdFX05VTV9GTjB9LCB7CisJSE9TVEZOMV9MUFVfTUJPWDBfOCwgTFBVX0hPU1RGTjFfTUJPWDBfOCwgSE9TVF9QQUdFX05VTV9GTjF9LCB7CisJSE9TVEZOMl9MUFVfTUJPWDBfMCwgTFBVX0hPU1RGTjJfTUJPWDBfMCwgSE9TVF9QQUdFX05VTV9GTjJ9LCB7CisJSE9TVEZOM19MUFVfTUJPWDBfOCwgTFBVX0hPU1RGTjNfTUJPWDBfOCwgSE9TVF9QQUdFX05VTV9GTjN9Cit9OworCisvKioKKyAqIEhvc3QgPC0+IExQVSBtYWlsYm94IGNvbW1hbmQvc3RhdHVzIHJlZ2lzdGVycyAtIHBvcnQgMAorICovCitzdGF0aWMgc3RydWN0IHsKKwl1MzIgICAgICAgIGhmbiwgbHB1OworfSBpb2NyZWdfbWJjbWRfcDBbXSA9IHsKKwl7CisJSE9TVEZOMF9MUFUwX01CT1gwX0NNRF9TVEFULCBMUFUwX0hPU1RGTjBfTUJPWDBfQ01EX1NUQVR9LCB7CisJSE9TVEZOMV9MUFUwX01CT1gwX0NNRF9TVEFULCBMUFUwX0hPU1RGTjFfTUJPWDBfQ01EX1NUQVR9LCB7CisJSE9TVEZOMl9MUFUwX01CT1gwX0NNRF9TVEFULCBMUFUwX0hPU1RGTjJfTUJPWDBfQ01EX1NUQVR9LCB7CisJSE9TVEZOM19MUFUwX01CT1gwX0NNRF9TVEFULCBMUFUwX0hPU1RGTjNfTUJPWDBfQ01EX1NUQVR9Cit9OworCisvKioKKyAqIEhvc3QgPC0+IExQVSBtYWlsYm94IGNvbW1hbmQvc3RhdHVzIHJlZ2lzdGVycyAtIHBvcnQgMQorICovCitzdGF0aWMgc3RydWN0IHsKKwl1MzIgICAgICAgIGhmbiwgbHB1OworfSBpb2NyZWdfbWJjbWRfcDFbXSA9IHsKKwl7CisJSE9TVEZOMF9MUFUxX01CT1gwX0NNRF9TVEFULCBMUFUxX0hPU1RGTjBfTUJPWDBfQ01EX1NUQVR9LCB7CisJSE9TVEZOMV9MUFUxX01CT1gwX0NNRF9TVEFULCBMUFUxX0hPU1RGTjFfTUJPWDBfQ01EX1NUQVR9LCB7CisJSE9TVEZOMl9MUFUxX01CT1gwX0NNRF9TVEFULCBMUFUxX0hPU1RGTjJfTUJPWDBfQ01EX1NUQVR9LCB7CisJSE9TVEZOM19MUFUxX01CT1gwX0NNRF9TVEFULCBMUFUxX0hPU1RGTjNfTUJPWDBfQ01EX1NUQVR9Cit9OworCisvKioKKyAqIFNoYXJlZCBJUlEgaGFuZGxpbmcgaW4gSU5UWCBtb2RlCisgKi8KK3N0YXRpYyBzdHJ1Y3QgeworCXUzMiAgICAgICAgaXNyLCBtc2s7Cit9IGlvY3JlZ19zaGlycV9uZXh0W10gPSB7CisJeworCUhPU1RGTjFfSU5UX1NUQVRVUywgSE9TVEZOMV9JTlRfTVNLfSwgeworCUhPU1RGTjJfSU5UX1NUQVRVUywgSE9TVEZOMl9JTlRfTVNLfSwgeworCUhPU1RGTjNfSU5UX1NUQVRVUywgSE9TVEZOM19JTlRfTVNLfSwgeworSE9TVEZOMF9JTlRfU1RBVFVTLCBIT1NURk4wX0lOVF9NU0t9LH07CisKK3N0YXRpYyB2b2lkCitiZmFfaW9jX3JlZ19pbml0KHN0cnVjdCBiZmFfaW9jX3MgKmlvYykKK3sKKwliZmFfb3NfYWRkcl90ICAgcmI7CisJaW50ICAgICAgICAgICAgIHBjaWZuID0gYmZhX2lvY19wY2lmbihpb2MpOworCisJcmIgPSBiZmFfaW9jX2JhcjAoaW9jKTsKKworCWlvYy0+aW9jX3JlZ3MuaGZuX21ib3ggPSByYiArIGlvY3JlZ19mbnJlZ1twY2lmbl0uaGZuX21ib3g7CisJaW9jLT5pb2NfcmVncy5scHVfbWJveCA9IHJiICsgaW9jcmVnX2ZucmVnW3BjaWZuXS5scHVfbWJveDsKKwlpb2MtPmlvY19yZWdzLmhvc3RfcGFnZV9udW1fZm4gPSByYiArIGlvY3JlZ19mbnJlZ1twY2lmbl0uaGZuX3BnbjsKKworCWlmIChpb2MtPnBvcnRfaWQgPT0gMCkgeworCQlpb2MtPmlvY19yZWdzLmhlYXJ0YmVhdCA9IHJiICsgQkZBX0lPQzBfSEJFQVRfUkVHOworCQlpb2MtPmlvY19yZWdzLmlvY19md3N0YXRlID0gcmIgKyBCRkFfSU9DMF9TVEFURV9SRUc7CisJCWlvYy0+aW9jX3JlZ3MuaGZuX21ib3hfY21kID0gcmIgKyBpb2NyZWdfbWJjbWRfcDBbcGNpZm5dLmhmbjsKKwkJaW9jLT5pb2NfcmVncy5scHVfbWJveF9jbWQgPSByYiArIGlvY3JlZ19tYmNtZF9wMFtwY2lmbl0ubHB1OworCQlpb2MtPmlvY19yZWdzLmxsX2hhbHQgPSByYiArIEZXX0lOSVRfSEFMVF9QMDsKKwl9IGVsc2UgeworCQlpb2MtPmlvY19yZWdzLmhlYXJ0YmVhdCA9IChyYiArIEJGQV9JT0MxX0hCRUFUX1JFRyk7CisJCWlvYy0+aW9jX3JlZ3MuaW9jX2Z3c3RhdGUgPSAocmIgKyBCRkFfSU9DMV9TVEFURV9SRUcpOworCQlpb2MtPmlvY19yZWdzLmhmbl9tYm94X2NtZCA9IHJiICsgaW9jcmVnX21iY21kX3AxW3BjaWZuXS5oZm47CisJCWlvYy0+aW9jX3JlZ3MubHB1X21ib3hfY21kID0gcmIgKyBpb2NyZWdfbWJjbWRfcDFbcGNpZm5dLmxwdTsKKwkJaW9jLT5pb2NfcmVncy5sbF9oYWx0ID0gcmIgKyBGV19JTklUX0hBTFRfUDE7CisJfQorCisJLyoqCisJICogU2hhcmVkIElSUSBoYW5kbGluZyBpbiBJTlRYIG1vZGUKKwkgKi8KKwlpb2MtPmlvY19yZWdzLnNoaXJxX2lzcl9uZXh0ID0gcmIgKyBpb2NyZWdfc2hpcnFfbmV4dFtwY2lmbl0uaXNyOworCWlvYy0+aW9jX3JlZ3Muc2hpcnFfbXNrX25leHQgPSByYiArIGlvY3JlZ19zaGlycV9uZXh0W3BjaWZuXS5tc2s7CisKKwkvKgorCSAqIFBTUyBjb250cm9sIHJlZ2lzdGVycworCSAqLworCWlvYy0+aW9jX3JlZ3MucHNzX2N0bF9yZWcgPSAocmIgKyBQU1NfQ1RMX1JFRyk7CisJaW9jLT5pb2NfcmVncy5hcHBfcGxsX2Zhc3RfY3RsX3JlZyA9IChyYiArIEFQUF9QTExfNDI1X0NUTF9SRUcpOworCWlvYy0+aW9jX3JlZ3MuYXBwX3BsbF9zbG93X2N0bF9yZWcgPSAocmIgKyBBUFBfUExMXzMxMl9DVExfUkVHKTsKKworCS8qCisJICogSU9DIHNlbWFwaG9yZSByZWdpc3RlcnMgYW5kIHNlcmlhbGl6YXRpb24KKwkgKi8KKwlpb2MtPmlvY19yZWdzLmlvY19zZW1fcmVnID0gKHJiICsgSE9TVF9TRU0wX1JFRyk7CisJaW9jLT5pb2NfcmVncy5pb2NfdXNhZ2Vfc2VtX3JlZyA9IChyYiArIEhPU1RfU0VNMV9SRUcpOworCWlvYy0+aW9jX3JlZ3MuaW9jX3VzYWdlX3JlZyA9IChyYiArIEJGQV9GV19VU0VfQ09VTlQpOworCisJLyoqCisJICogc3JhbSBtZW1vcnkgYWNjZXNzCisJICovCisJaW9jLT5pb2NfcmVncy5zbWVtX3BhZ2Vfc3RhcnQgPSAocmIgKyBQU1NfU01FTV9QQUdFX1NUQVJUKTsKKwlpb2MtPmlvY19yZWdzLnNtZW1fcGcwID0gQkZJX0lPQ19TTUVNX1BHMF9DQjsKKwlpZiAoaW9jLT5wY2lkZXYuZGV2aWNlX2lkID09IEJGQV9QQ0lfREVWSUNFX0lEX0NUKQorCQlpb2MtPmlvY19yZWdzLnNtZW1fcGcwID0gQkZJX0lPQ19TTUVNX1BHMF9DVDsKK30KKworLyoqCisgKiAgICAgIEluaXRpYXRlIGEgZnVsbCBmaXJtd2FyZSBkb3dubG9hZC4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9pb2NfZG93bmxvYWRfZncoc3RydWN0IGJmYV9pb2NfcyAqaW9jLCB1MzIgYm9vdF90eXBlLAorCQkgICAgdTMyIGJvb3RfcGFyYW0pCit7CisJdTMyICAgICAgICpmd2ltZzsKKwl1MzIgICAgICAgIHBnbnVtLCBwZ29mZjsKKwl1MzIgICAgICAgIGxvZmYgPSAwOworCXUzMiAgICAgICAgY2h1bmtubyA9IDA7CisJdTMyICAgICAgICBpOworCisJLyoqCisJICogSW5pdGlhbGl6ZSBMTUVNIGZpcnN0IGJlZm9yZSBjb2RlIGRvd25sb2FkCisJICovCisJYmZhX2lvY19sbWVtX2luaXQoaW9jKTsKKworCS8qKgorCSAqIEZsYXNoIGJhc2VkIGZpcm13YXJlIGJvb3QKKwkgKi8KKwliZmFfdHJjKGlvYywgYmZhX2lvY19md2ltZ19nZXRfc2l6ZShpb2MpKTsKKwlpZiAoYmZhX2lvY19md2ltZ19nZXRfc2l6ZShpb2MpIDwgQkZBX0lPQ19GV0lNR19NSU5TWikKKwkJYm9vdF90eXBlID0gQkZJX0JPT1RfVFlQRV9GTEFTSDsKKwlmd2ltZyA9IGJmYV9pb2NfZndpbWdfZ2V0X2NodW5rKGlvYywgY2h1bmtubyk7CisJZndpbWdbQkZJX0JPT1RfVFlQRV9PRkYgLyBzaXplb2YodTMyKV0gPSBiZmFfb3Nfc3dhcDMyKGJvb3RfdHlwZSk7CisJZndpbWdbQkZJX0JPT1RfUEFSQU1fT0ZGIC8gc2l6ZW9mKHUzMildID0KKwkJYmZhX29zX3N3YXAzMihib290X3BhcmFtKTsKKworCXBnbnVtID0gYmZhX2lvY19zbWVtX3BnbnVtKGlvYywgbG9mZik7CisJcGdvZmYgPSBiZmFfaW9jX3NtZW1fcGdvZmYoaW9jLCBsb2ZmKTsKKworCWJmYV9yZWdfd3JpdGUoaW9jLT5pb2NfcmVncy5ob3N0X3BhZ2VfbnVtX2ZuLCBwZ251bSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgYmZhX2lvY19md2ltZ19nZXRfc2l6ZShpb2MpOyBpKyspIHsKKworCQlpZiAoQkZBX0ZMQVNIX0NIVU5LX05PKGkpICE9IGNodW5rbm8pIHsKKwkJCWNodW5rbm8gPSBCRkFfRkxBU0hfQ0hVTktfTk8oaSk7CisJCQlmd2ltZyA9IGJmYV9pb2NfZndpbWdfZ2V0X2NodW5rKGlvYywKKwkJCQkJQkZBX0ZMQVNIX0NIVU5LX0FERFIoY2h1bmtubykpOworCQl9CisKKwkJLyoqCisJCSAqIHdyaXRlIHNtZW0KKwkJICovCisJCWJmYV9tZW1fd3JpdGUoaW9jLT5pb2NfcmVncy5zbWVtX3BhZ2Vfc3RhcnQsIGxvZmYsCisJCQkgICAgICBmd2ltZ1tCRkFfRkxBU0hfT0ZGU0VUX0lOX0NIVU5LKGkpXSk7CisKKwkJbG9mZiArPSBzaXplb2YodTMyKTsKKworCQkvKioKKwkJICogaGFuZGxlIHBhZ2Ugb2Zmc2V0IHdyYXAgYXJvdW5kCisJCSAqLworCQlsb2ZmID0gUFNTX1NNRU1fUEdPRkYobG9mZik7CisJCWlmIChsb2ZmID09IDApIHsKKwkJCXBnbnVtKys7CisJCQliZmFfcmVnX3dyaXRlKGlvYy0+aW9jX3JlZ3MuaG9zdF9wYWdlX251bV9mbiwgcGdudW0pOworCQl9CisJfQorCisJYmZhX3JlZ193cml0ZShpb2MtPmlvY19yZWdzLmhvc3RfcGFnZV9udW1fZm4sCisJCSAgICAgIGJmYV9pb2Nfc21lbV9wZ251bShpb2MsIDApKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9pb2NfcmVzZXQoc3RydWN0IGJmYV9pb2NfcyAqaW9jLCBiZmFfYm9vbGVhbl90IGZvcmNlKQoreworCWJmYV9pb2NfaHdpbml0KGlvYywgZm9yY2UpOworfQorCisvKioKKyAqIFVwZGF0ZSBCRkEgY29uZmlndXJhdGlvbiBmcm9tIGZpcm13YXJlIGNvbmZpZ3VyYXRpb24uCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaW9jX2dldGF0dHJfcmVwbHkoc3RydWN0IGJmYV9pb2NfcyAqaW9jKQoreworCXN0cnVjdCBiZmlfaW9jX2F0dHJfcyAqYXR0ciA9IGlvYy0+YXR0cjsKKworCWF0dHItPmFkYXB0ZXJfcHJvcCA9IGJmYV9vc19udG9obChhdHRyLT5hZGFwdGVyX3Byb3ApOworCWF0dHItPm1heGZyc2l6ZSA9IGJmYV9vc19udG9ocyhhdHRyLT5tYXhmcnNpemUpOworCisJYmZhX2ZzbV9zZW5kX2V2ZW50KGlvYywgSU9DX0VfRldSU1BfR0VUQVRUUik7Cit9CisKKy8qKgorICogQXR0YWNoIHRpbWUgaW5pdGlhbGl6YXRpb24gb2YgbWJveCBsb2dpYy4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9pb2NfbWJveF9hdHRhY2goc3RydWN0IGJmYV9pb2NfcyAqaW9jKQoreworCXN0cnVjdCBiZmFfaW9jX21ib3hfbW9kX3MgKm1vZCA9ICZpb2MtPm1ib3hfbW9kOworCWludCAgICAgICAgICAgICBtYzsKKworCUlOSVRfTElTVF9IRUFEKCZtb2QtPmNtZF9xKTsKKwlmb3IgKG1jID0gMDsgbWMgPCBCRklfTUNfTUFYOyBtYysrKSB7CisJCW1vZC0+bWJoZGxyW21jXS5jYmZuID0gTlVMTDsKKwkJbW9kLT5tYmhkbHJbbWNdLmNiYXJnID0gaW9jLT5iZmE7CisJfQorfQorCisvKioKKyAqIE1ib3ggcG9sbCB0aW1lciAtLSByZXN0YXJ0cyBhbnkgcGVuZGluZyBtYWlsYm94IHJlcXVlc3RzLgorICovCitzdGF0aWMgdm9pZAorYmZhX2lvY19tYm94X3BvbGwoc3RydWN0IGJmYV9pb2NfcyAqaW9jKQoreworCXN0cnVjdCBiZmFfaW9jX21ib3hfbW9kX3MgKm1vZCA9ICZpb2MtPm1ib3hfbW9kOworCXN0cnVjdCBiZmFfbWJveF9jbWRfcyAqY21kOworCXUzMiAgICAgICAgc3RhdDsKKworCS8qKgorCSAqIElmIG5vIGNvbW1hbmQgcGVuZGluZywgZG8gbm90aGluZworCSAqLworCWlmIChsaXN0X2VtcHR5KCZtb2QtPmNtZF9xKSkKKwkJcmV0dXJuOworCisJLyoqCisJICogSWYgcHJldmlvdXMgY29tbWFuZCBpcyBub3QgeWV0IGZldGNoZWQgYnkgZmlybXdhcmUsIGRvIG5vdGhpbmcKKwkgKi8KKwlzdGF0ID0gYmZhX3JlZ19yZWFkKGlvYy0+aW9jX3JlZ3MuaGZuX21ib3hfY21kKTsKKwlpZiAoc3RhdCkKKwkJcmV0dXJuOworCisJLyoqCisJICogRW5xdWV1ZSBjb21tYW5kIHRvIGZpcm13YXJlLgorCSAqLworCWJmYV9xX2RlcSgmbW9kLT5jbWRfcSwgJmNtZCk7CisJYmZhX2lvY19tYm94X3NlbmQoaW9jLCBjbWQtPm1zZywgc2l6ZW9mKGNtZC0+bXNnKSk7Cit9CisKKy8qKgorICogQ2xlYW51cCBhbnkgcGVuZGluZyByZXF1ZXN0cy4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9pb2NfbWJveF9oYmZhaWwoc3RydWN0IGJmYV9pb2NfcyAqaW9jKQoreworCXN0cnVjdCBiZmFfaW9jX21ib3hfbW9kX3MgKm1vZCA9ICZpb2MtPm1ib3hfbW9kOworCXN0cnVjdCBiZmFfbWJveF9jbWRfcyAqY21kOworCisJd2hpbGUgKCFsaXN0X2VtcHR5KCZtb2QtPmNtZF9xKSkKKwkJYmZhX3FfZGVxKCZtb2QtPmNtZF9xLCAmY21kKTsKK30KKworLyoqCisgKiBJbml0aWFsaXplIElPQyB0byBwb3J0IG1hcHBpbmcuCisgKi8KKworI2RlZmluZSBGTkNfUEVSU19GTl9TSElGVChfX2ZuKQkoKF9fZm4pICogOCkKK3N0YXRpYyB2b2lkCitiZmFfaW9jX21hcF9wb3J0KHN0cnVjdCBiZmFfaW9jX3MgKmlvYykKK3sKKwliZmFfb3NfYWRkcl90ICAgcmIgPSBpb2MtPnBjaWRldi5wY2lfYmFyX2t2YTsKKwl1MzIgICAgICAgIHIzMjsKKworCS8qKgorCSAqIEZvciBjcm9zc2JvdywgcG9ydCBpZCBpcyBzYW1lIGFzIHBjaSBmdW5jdGlvbi4KKwkgKi8KKwlpZiAoaW9jLT5wY2lkZXYuZGV2aWNlX2lkICE9IEJGQV9QQ0lfREVWSUNFX0lEX0NUKSB7CisJCWlvYy0+cG9ydF9pZCA9IGJmYV9pb2NfcGNpZm4oaW9jKTsKKwkJcmV0dXJuOworCX0KKworCS8qKgorCSAqIEZvciBjYXRhcHVsdCwgYmFzZSBwb3J0IGlkIG9uIHBlcnNvbmFsaXR5IHJlZ2lzdGVyIGFuZCBJT0MgdHlwZQorCSAqLworCXIzMiA9IGJmYV9yZWdfcmVhZChyYiArIEZOQ19QRVJTX1JFRyk7CisJcjMyID4+PSBGTkNfUEVSU19GTl9TSElGVChiZmFfaW9jX3BjaWZuKGlvYykpOworCWlvYy0+cG9ydF9pZCA9IChyMzIgJiBfX0YwX1BPUlRfTUFQX01LKSA+PiBfX0YwX1BPUlRfTUFQX1NIOworCisJYmZhX3RyYyhpb2MsIGJmYV9pb2NfcGNpZm4oaW9jKSk7CisJYmZhX3RyYyhpb2MsIGlvYy0+cG9ydF9pZCk7Cit9CisKKworCisvKioKKyAqICBiZmFfaW9jX3B1YmxpYworICovCisKKy8qKgorKiBTZXQgaW50ZXJydXB0IG1vZGUgZm9yIGEgZnVuY3Rpb246IElOVFggb3IgTVNJWAorICovCit2b2lkCitiZmFfaW9jX2lzcl9tb2RlX3NldChzdHJ1Y3QgYmZhX2lvY19zICppb2MsIGJmYV9ib29sZWFuX3QgbXNpeCkKK3sKKwliZmFfb3NfYWRkcl90ICAgcmIgPSBpb2MtPnBjaWRldi5wY2lfYmFyX2t2YTsKKwl1MzIgICAgICAgIHIzMiwgbW9kZTsKKworCXIzMiA9IGJmYV9yZWdfcmVhZChyYiArIEZOQ19QRVJTX1JFRyk7CisJYmZhX3RyYyhpb2MsIHIzMik7CisKKwltb2RlID0gKHIzMiA+PiBGTkNfUEVSU19GTl9TSElGVChiZmFfaW9jX3BjaWZuKGlvYykpKSAmCisJCV9fRjBfSU5UWF9TVEFUVVM7CisKKwkvKioKKwkgKiBJZiBhbHJlYWR5IGluIGRlc2lyZWQgbW9kZSwgZG8gbm90IGNoYW5nZSBhbnl0aGluZworCSAqLworCWlmICghbXNpeCAmJiBtb2RlKQorCQlyZXR1cm47CisKKwlpZiAobXNpeCkKKwkJbW9kZSA9IF9fRjBfSU5UWF9TVEFUVVNfTVNJWDsKKwllbHNlCisJCW1vZGUgPSBfX0YwX0lOVFhfU1RBVFVTX0lOVEE7CisKKwlyMzIgJj0gfihfX0YwX0lOVFhfU1RBVFVTIDw8IEZOQ19QRVJTX0ZOX1NISUZUKGJmYV9pb2NfcGNpZm4oaW9jKSkpOworCXIzMiB8PSAobW9kZSA8PCBGTkNfUEVSU19GTl9TSElGVChiZmFfaW9jX3BjaWZuKGlvYykpKTsKKwliZmFfdHJjKGlvYywgcjMyKTsKKworCWJmYV9yZWdfd3JpdGUocmIgKyBGTkNfUEVSU19SRUcsIHIzMik7Cit9CisKK2JmYV9zdGF0dXNfdAorYmZhX2lvY19wbGxfaW5pdChzdHJ1Y3QgYmZhX2lvY19zICppb2MpCit7CisJYmZhX29zX2FkZHJfdCAgIHJiID0gaW9jLT5wY2lkZXYucGNpX2Jhcl9rdmE7CisJdTMyICAgICAgICBwbGxfc2NsaywgcGxsX2ZjbGssIHIzMjsKKworCWlmIChpb2MtPnBjaWRldi5kZXZpY2VfaWQgPT0gQkZBX1BDSV9ERVZJQ0VfSURfQ1QpIHsKKwkJcGxsX3NjbGsgPQorCQkJX19BUFBfUExMXzMxMl9FTkFCTEUgfCBfX0FQUF9QTExfMzEyX0xSRVNFVE4gfAorCQkJX19BUFBfUExMXzMxMl9SU0VMMjAwNTAwIHwgX19BUFBfUExMXzMxMl9QMF8xKDBVKSB8CisJCQlfX0FQUF9QTExfMzEyX0pJVExNVDBfMSgzVSkgfAorCQkJX19BUFBfUExMXzMxMl9DTlRMTVQwXzEoMVUpOworCQlwbGxfZmNsayA9CisJCQlfX0FQUF9QTExfNDI1X0VOQUJMRSB8IF9fQVBQX1BMTF80MjVfTFJFU0VUTiB8CisJCQlfX0FQUF9QTExfNDI1X1JTRUwyMDA1MDAgfCBfX0FQUF9QTExfNDI1X1AwXzEoMFUpIHwKKwkJCV9fQVBQX1BMTF80MjVfSklUTE1UMF8xKDNVKSB8CisJCQlfX0FQUF9QTExfNDI1X0NOVExNVDBfMSgxVSk7CisKKwkJLyoqCisJCSAqIAlGb3IgY2F0YXB1bHQsIGNob29zZSBvcGVyYXRpb25hbCBtb2RlIEZDL0ZDb0UKKwkJICovCisJCWlmIChpb2MtPmZjbW9kZSkgeworCQkJYmZhX3JlZ193cml0ZSgocmIgKyBPUF9NT0RFKSwgMCk7CisJCQliZmFfcmVnX3dyaXRlKChyYiArIEVUSF9NQUNfU0VSX1JFRyksCisJCQkJICAgICAgX19BUFBfRU1TX0NNTENLU0VMIHwgX19BUFBfRU1TX1JFRkNLQlVGRU4yCisJCQkJICAgICAgfCBfX0FQUF9FTVNfQ0hBTk5FTF9TRUwpOworCQl9IGVsc2UgeworCQkJaW9jLT5wbGxpbml0ID0gQkZBX1RSVUU7CisJCQliZmFfcmVnX3dyaXRlKChyYiArIE9QX01PREUpLCBfX0dMT0JBTF9GQ09FX01PREUpOworCQkJYmZhX3JlZ193cml0ZSgocmIgKyBFVEhfTUFDX1NFUl9SRUcpLAorCQkJCSAgICAgIF9fQVBQX0VNU19SRUZDS0JVRkVOMSk7CisJCX0KKwl9IGVsc2UgeworCQlwbGxfc2NsayA9CisJCQlfX0FQUF9QTExfMzEyX0VOQUJMRSB8IF9fQVBQX1BMTF8zMTJfTFJFU0VUTiB8CisJCQlfX0FQUF9QTExfMzEyX1AwXzEoM1UpIHwgX19BUFBfUExMXzMxMl9KSVRMTVQwXzEoM1UpIHwKKwkJCV9fQVBQX1BMTF8zMTJfQ05UTE1UMF8xKDNVKTsKKwkJcGxsX2ZjbGsgPQorCQkJX19BUFBfUExMXzQyNV9FTkFCTEUgfCBfX0FQUF9QTExfNDI1X0xSRVNFVE4gfAorCQkJX19BUFBfUExMXzQyNV9SU0VMMjAwNTAwIHwgX19BUFBfUExMXzQyNV9QMF8xKDNVKSB8CisJCQlfX0FQUF9QTExfNDI1X0pJVExNVDBfMSgzVSkgfAorCQkJX19BUFBfUExMXzQyNV9DTlRMTVQwXzEoM1UpOworCX0KKworCWJmYV9yZWdfd3JpdGUoKHJiICsgQkZBX0lPQzBfU1RBVEVfUkVHKSwgQkZJX0lPQ19VTklOSVQpOworCWJmYV9yZWdfd3JpdGUoKHJiICsgQkZBX0lPQzFfU1RBVEVfUkVHKSwgQkZJX0lPQ19VTklOSVQpOworCisJYmZhX3JlZ193cml0ZSgocmIgKyBIT1NURk4wX0lOVF9NU0spLCAweGZmZmZmZmZmVSk7CisJYmZhX3JlZ193cml0ZSgocmIgKyBIT1NURk4xX0lOVF9NU0spLCAweGZmZmZmZmZmVSk7CisJYmZhX3JlZ193cml0ZSgocmIgKyBIT1NURk4wX0lOVF9TVEFUVVMpLCAweGZmZmZmZmZmVSk7CisJYmZhX3JlZ193cml0ZSgocmIgKyBIT1NURk4xX0lOVF9TVEFUVVMpLCAweGZmZmZmZmZmVSk7CisJYmZhX3JlZ193cml0ZSgocmIgKyBIT1NURk4wX0lOVF9NU0spLCAweGZmZmZmZmZmVSk7CisJYmZhX3JlZ193cml0ZSgocmIgKyBIT1NURk4xX0lOVF9NU0spLCAweGZmZmZmZmZmVSk7CisKKwliZmFfcmVnX3dyaXRlKGlvYy0+aW9jX3JlZ3MuYXBwX3BsbF9zbG93X2N0bF9yZWcsCisJCSAgICAgIF9fQVBQX1BMTF8zMTJfTE9HSUNfU09GVF9SRVNFVCk7CisJYmZhX3JlZ193cml0ZShpb2MtPmlvY19yZWdzLmFwcF9wbGxfc2xvd19jdGxfcmVnLAorCQkgICAgICBfX0FQUF9QTExfMzEyX0JZUEFTUyB8IF9fQVBQX1BMTF8zMTJfTE9HSUNfU09GVF9SRVNFVCk7CisJYmZhX3JlZ193cml0ZShpb2MtPmlvY19yZWdzLmFwcF9wbGxfZmFzdF9jdGxfcmVnLAorCQkgICAgICBfX0FQUF9QTExfNDI1X0xPR0lDX1NPRlRfUkVTRVQpOworCWJmYV9yZWdfd3JpdGUoaW9jLT5pb2NfcmVncy5hcHBfcGxsX2Zhc3RfY3RsX3JlZywKKwkJICAgICAgX19BUFBfUExMXzQyNV9CWVBBU1MgfCBfX0FQUF9QTExfNDI1X0xPR0lDX1NPRlRfUkVTRVQpOworCWJmYV9vc191ZGVsYXkoMik7CisJYmZhX3JlZ193cml0ZShpb2MtPmlvY19yZWdzLmFwcF9wbGxfc2xvd19jdGxfcmVnLAorCQkgICAgICBfX0FQUF9QTExfMzEyX0xPR0lDX1NPRlRfUkVTRVQpOworCWJmYV9yZWdfd3JpdGUoaW9jLT5pb2NfcmVncy5hcHBfcGxsX2Zhc3RfY3RsX3JlZywKKwkJICAgICAgX19BUFBfUExMXzQyNV9MT0dJQ19TT0ZUX1JFU0VUKTsKKworCWJmYV9yZWdfd3JpdGUoaW9jLT5pb2NfcmVncy5hcHBfcGxsX3Nsb3dfY3RsX3JlZywKKwkJICAgICAgcGxsX3NjbGsgfCBfX0FQUF9QTExfMzEyX0xPR0lDX1NPRlRfUkVTRVQpOworCWJmYV9yZWdfd3JpdGUoaW9jLT5pb2NfcmVncy5hcHBfcGxsX2Zhc3RfY3RsX3JlZywKKwkJICAgICAgcGxsX2ZjbGsgfCBfX0FQUF9QTExfNDI1X0xPR0lDX1NPRlRfUkVTRVQpOworCisJLyoqCisJICogV2FpdCBmb3IgUExMcyB0byBsb2NrLgorCSAqLworCWJmYV9vc191ZGVsYXkoMjAwMCk7CisJYmZhX3JlZ193cml0ZSgocmIgKyBIT1NURk4wX0lOVF9TVEFUVVMpLCAweGZmZmZmZmZmVSk7CisJYmZhX3JlZ193cml0ZSgocmIgKyBIT1NURk4xX0lOVF9TVEFUVVMpLCAweGZmZmZmZmZmVSk7CisKKwliZmFfcmVnX3dyaXRlKGlvYy0+aW9jX3JlZ3MuYXBwX3BsbF9zbG93X2N0bF9yZWcsIHBsbF9zY2xrKTsKKwliZmFfcmVnX3dyaXRlKGlvYy0+aW9jX3JlZ3MuYXBwX3BsbF9mYXN0X2N0bF9yZWcsIHBsbF9mY2xrKTsKKworCWlmIChpb2MtPnBjaWRldi5kZXZpY2VfaWQgPT0gQkZBX1BDSV9ERVZJQ0VfSURfQ1QpIHsKKwkJYmZhX3JlZ193cml0ZSgocmIgKyBNQklTVF9DVExfUkVHKSwgX19FRFJBTV9CSVNUUl9TVEFSVCk7CisJCWJmYV9vc191ZGVsYXkoMTAwMCk7CisJCXIzMiA9IGJmYV9yZWdfcmVhZCgocmIgKyBNQklTVF9TVEFUX1JFRykpOworCQliZmFfdHJjKGlvYywgcjMyKTsKKwl9CisKKwlyZXR1cm4gQkZBX1NUQVRVU19PSzsKK30KKworLyoqCisgKiBJbnRlcmZhY2UgdXNlZCBieSBkaWFnIG1vZHVsZSB0byBkbyBmaXJtd2FyZSBib290IHdpdGggbWVtb3J5IHRlc3QKKyAqIGFzIHRoZSBlbnRyeSB2ZWN0b3IuCisgKi8KK3ZvaWQKK2JmYV9pb2NfYm9vdChzdHJ1Y3QgYmZhX2lvY19zICppb2MsIHUzMiBib290X3R5cGUsIHUzMiBib290X3BhcmFtKQoreworCWJmYV9vc19hZGRyX3QgICByYjsKKworCWJmYV9pb2Nfc3RhdHMoaW9jLCBpb2NfYm9vdHMpOworCisJaWYgKGJmYV9pb2NfcGxsX2luaXQoaW9jKSAhPSBCRkFfU1RBVFVTX09LKQorCQlyZXR1cm47CisKKwkvKioKKwkgKiBJbml0aWFsaXplIElPQyBzdGF0ZSBvZiBhbGwgZnVuY3Rpb25zIG9uIGEgY2hpcCByZXNldC4KKwkgKi8KKwlyYiA9IGlvYy0+cGNpZGV2LnBjaV9iYXJfa3ZhOworCWlmIChib290X3BhcmFtID09IEJGSV9CT09UX1RZUEVfTUVNVEVTVCkgeworCQliZmFfcmVnX3dyaXRlKChyYiArIEJGQV9JT0MwX1NUQVRFX1JFRyksIEJGSV9JT0NfTUVNVEVTVCk7CisJCWJmYV9yZWdfd3JpdGUoKHJiICsgQkZBX0lPQzFfU1RBVEVfUkVHKSwgQkZJX0lPQ19NRU1URVNUKTsKKwl9IGVsc2UgeworCQliZmFfcmVnX3dyaXRlKChyYiArIEJGQV9JT0MwX1NUQVRFX1JFRyksIEJGSV9JT0NfSU5JVElORyk7CisJCWJmYV9yZWdfd3JpdGUoKHJiICsgQkZBX0lPQzFfU1RBVEVfUkVHKSwgQkZJX0lPQ19JTklUSU5HKTsKKwl9CisKKwliZmFfaW9jX2Rvd25sb2FkX2Z3KGlvYywgYm9vdF90eXBlLCBib290X3BhcmFtKTsKKworCS8qKgorCSAqIEVuYWJsZSBpbnRlcnJ1cHRzIGp1c3QgYmVmb3JlIHN0YXJ0aW5nIExQVQorCSAqLworCWlvYy0+Y2Jmbi0+cmVzZXRfY2Jmbihpb2MtPmJmYSk7CisJYmZhX2lvY19scHVfc3RhcnQoaW9jKTsKK30KKworLyoqCisgKiBFbmFibGUvZGlzYWJsZSBJT0MgZmFpbHVyZSBhdXRvIHJlY292ZXJ5LgorICovCit2b2lkCitiZmFfaW9jX2F1dG9fcmVjb3ZlcihiZmFfYm9vbGVhbl90IGF1dG9fcmVjb3ZlcikKK3sKKwliZmFfYXV0b19yZWNvdmVyID0gQkZBX0ZBTFNFOworfQorCisKK2JmYV9ib29sZWFuX3QKK2JmYV9pb2NfaXNfb3BlcmF0aW9uYWwoc3RydWN0IGJmYV9pb2NfcyAqaW9jKQoreworCXJldHVybiBiZmFfZnNtX2NtcF9zdGF0ZShpb2MsIGJmYV9pb2Nfc21fb3ApOworfQorCit2b2lkCitiZmFfaW9jX21zZ2dldChzdHJ1Y3QgYmZhX2lvY19zICppb2MsIHZvaWQgKm1ibXNnKQoreworCXUzMiAgICAgICAqbXNncCA9IG1ibXNnOworCXUzMiAgICAgICAgcjMyOworCWludCAgICAgICAgICAgICBpOworCisJLyoqCisJICogcmVhZCB0aGUgTUJPWCBtc2cKKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgKHNpemVvZih1bmlvbiBiZmlfaW9jX2kyaF9tc2dfdSkgLyBzaXplb2YodTMyKSk7CisJICAgICBpKyspIHsKKwkJcjMyID0gYmZhX3JlZ19yZWFkKGlvYy0+aW9jX3JlZ3MubHB1X21ib3ggKworCQkJCSAgIGkgKiBzaXplb2YodTMyKSk7CisJCW1zZ3BbaV0gPSBiZmFfb3NfaHRvbmwocjMyKTsKKwl9CisKKwkvKioKKwkgKiB0dXJuIG9mZiBtYWlsYm94IGludGVycnVwdCBieSBjbGVhcmluZyBtYWlsYm94IHN0YXR1cworCSAqLworCWJmYV9yZWdfd3JpdGUoaW9jLT5pb2NfcmVncy5scHVfbWJveF9jbWQsIDEpOworCWJmYV9yZWdfcmVhZChpb2MtPmlvY19yZWdzLmxwdV9tYm94X2NtZCk7Cit9CisKK3ZvaWQKK2JmYV9pb2NfaXNyKHN0cnVjdCBiZmFfaW9jX3MgKmlvYywgc3RydWN0IGJmaV9tYm1zZ19zICptKQoreworCXVuaW9uIGJmaV9pb2NfaTJoX21zZ191ICptc2c7CisKKwltc2cgPSAodW5pb24gYmZpX2lvY19pMmhfbXNnX3UgKiltOworCisJYmZhX2lvY19zdGF0cyhpb2MsIGlvY19pc3JzKTsKKworCXN3aXRjaCAobXNnLT5taC5tc2dfaWQpIHsKKwljYXNlIEJGSV9JT0NfSTJIX0hCRUFUOgorCQlicmVhazsKKworCWNhc2UgQkZJX0lPQ19JMkhfUkVBRFlfRVZFTlQ6CisJCWJmYV9mc21fc2VuZF9ldmVudChpb2MsIElPQ19FX0ZXUkVBRFkpOworCQlicmVhazsKKworCWNhc2UgQkZJX0lPQ19JMkhfRU5BQkxFX1JFUExZOgorCQliZmFfZnNtX3NlbmRfZXZlbnQoaW9jLCBJT0NfRV9GV1JTUF9FTkFCTEUpOworCQlicmVhazsKKworCWNhc2UgQkZJX0lPQ19JMkhfRElTQUJMRV9SRVBMWToKKwkJYmZhX2ZzbV9zZW5kX2V2ZW50KGlvYywgSU9DX0VfRldSU1BfRElTQUJMRSk7CisJCWJyZWFrOworCisJY2FzZSBCRklfSU9DX0kySF9HRVRBVFRSX1JFUExZOgorCQliZmFfaW9jX2dldGF0dHJfcmVwbHkoaW9jKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfdHJjKGlvYywgbXNnLT5taC5tc2dfaWQpOworCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworLyoqCisgKiBJT0MgYXR0YWNoIHRpbWUgaW5pdGlhbGl6YXRpb24gYW5kIHNldHVwLgorICoKKyAqIEBwYXJhbVtpbl0JaW9jCW1lbW9yeSBmb3IgSU9DCisgKiBAcGFyYW1baW5dCWJmYQlkcml2ZXIgaW5zdGFuY2Ugc3RydWN0dXJlCisgKiBAcGFyYW1baW5dCXRyY21vZAlrZXJuZWwgdHJhY2UgbW9kdWxlCisgKiBAcGFyYW1baW5dCWFlbglrZXJuZWwgYWVuIGV2ZW50IG1vZHVsZQorICogQHBhcmFtW2luXQlsb2dtCWtlcm5lbCBsb2dnaW5nIG1vZHVsZQorICovCit2b2lkCitiZmFfaW9jX2F0dGFjaChzdHJ1Y3QgYmZhX2lvY19zICppb2MsIHZvaWQgKmJmYSwgc3RydWN0IGJmYV9pb2NfY2Jmbl9zICpjYmZuLAorCSAgICAgICBzdHJ1Y3QgYmZhX3RpbWVyX21vZF9zICp0aW1lcl9tb2QsIHN0cnVjdCBiZmFfdHJjX21vZF9zICp0cmNtb2QsCisJICAgICAgIHN0cnVjdCBiZmFfYWVuX3MgKmFlbiwgc3RydWN0IGJmYV9sb2dfbW9kX3MgKmxvZ20pCit7CisJaW9jLT5iZmEgPSBiZmE7CisJaW9jLT5jYmZuID0gY2JmbjsKKwlpb2MtPnRpbWVyX21vZCA9IHRpbWVyX21vZDsKKwlpb2MtPnRyY21vZCA9IHRyY21vZDsKKwlpb2MtPmFlbiA9IGFlbjsKKwlpb2MtPmxvZ20gPSBsb2dtOworCWlvYy0+ZmNtb2RlID0gQkZBX0ZBTFNFOworCWlvYy0+cGxsaW5pdCA9IEJGQV9GQUxTRTsKKwlpb2MtPmRiZ19md3NhdmVfb25jZSA9IEJGQV9UUlVFOworCisJYmZhX2lvY19tYm94X2F0dGFjaChpb2MpOworCUlOSVRfTElTVF9IRUFEKCZpb2MtPmhiX25vdGlmeV9xKTsKKworCWJmYV9mc21fc2V0X3N0YXRlKGlvYywgYmZhX2lvY19zbV9yZXNldCk7Cit9CisKKy8qKgorICogRHJpdmVyIGRldGFjaCB0aW1lIElPQyBjbGVhbnVwLgorICovCit2b2lkCitiZmFfaW9jX2RldGFjaChzdHJ1Y3QgYmZhX2lvY19zICppb2MpCit7CisJYmZhX2ZzbV9zZW5kX2V2ZW50KGlvYywgSU9DX0VfREVUQUNIKTsKK30KKworLyoqCisgKiBTZXR1cCBJT0MgUENJIHByb3BlcnRpZXMuCisgKgorICogQHBhcmFtW2luXQlwY2lkZXYJUENJIGRldmljZSBpbmZvcm1hdGlvbiBmb3IgdGhpcyBJT0MKKyAqLwordm9pZAorYmZhX2lvY19wY2lfaW5pdChzdHJ1Y3QgYmZhX2lvY19zICppb2MsIHN0cnVjdCBiZmFfcGNpZGV2X3MgKnBjaWRldiwKKwkJIGVudW0gYmZpX21jbGFzcyBtYykKK3sKKwlpb2MtPmlvY19tYyA9IG1jOworCWlvYy0+cGNpZGV2ID0gKnBjaWRldjsKKwlpb2MtPmN0ZGV2ID0gKGlvYy0+cGNpZGV2LmRldmljZV9pZCA9PSBCRkFfUENJX0RFVklDRV9JRF9DVCk7CisJaW9jLT5jbmEgPSBpb2MtPmN0ZGV2ICYmICFpb2MtPmZjbW9kZTsKKworCWJmYV9pb2NfbWFwX3BvcnQoaW9jKTsKKwliZmFfaW9jX3JlZ19pbml0KGlvYyk7Cit9CisKKy8qKgorICogSW5pdGlhbGl6ZSBJT0MgZG1hIG1lbW9yeQorICoKKyAqIEBwYXJhbVtpbl0JZG1fa3ZhCWtlcm5lbCB2aXJ0dWFsIGFkZHJlc3Mgb2YgSU9DIGRtYSBtZW1vcnkKKyAqIEBwYXJhbVtpbl0JZG1fcGEJcGh5c2ljYWwgYWRkcmVzcyBvZiBJT0MgZG1hIG1lbW9yeQorICovCit2b2lkCitiZmFfaW9jX21lbV9jbGFpbShzdHJ1Y3QgYmZhX2lvY19zICppb2MsIHU4ICpkbV9rdmEsIHU2NCBkbV9wYSkKK3sKKwkvKioKKwkgKiBkbWEgbWVtb3J5IGZvciBmaXJtd2FyZSBhdHRyaWJ1dGUKKwkgKi8KKwlpb2MtPmF0dHJfZG1hLmt2YSA9IGRtX2t2YTsKKwlpb2MtPmF0dHJfZG1hLnBhID0gZG1fcGE7CisJaW9jLT5hdHRyID0gKHN0cnVjdCBiZmlfaW9jX2F0dHJfcyAqKWRtX2t2YTsKK30KKworLyoqCisgKiBSZXR1cm4gc2l6ZSBvZiBkbWEgbWVtb3J5IHJlcXVpcmVkLgorICovCit1MzIKK2JmYV9pb2NfbWVtaW5mbyh2b2lkKQoreworCXJldHVybiBCRkFfUk9VTkRVUChzaXplb2Yoc3RydWN0IGJmaV9pb2NfYXR0cl9zKSwgQkZBX0RNQV9BTElHTl9TWik7Cit9CisKK3ZvaWQKK2JmYV9pb2NfZW5hYmxlKHN0cnVjdCBiZmFfaW9jX3MgKmlvYykKK3sKKwliZmFfaW9jX3N0YXRzKGlvYywgaW9jX2VuYWJsZXMpOworCWlvYy0+ZGJnX2Z3c2F2ZV9vbmNlID0gQkZBX1RSVUU7CisKKwliZmFfZnNtX3NlbmRfZXZlbnQoaW9jLCBJT0NfRV9FTkFCTEUpOworfQorCit2b2lkCitiZmFfaW9jX2Rpc2FibGUoc3RydWN0IGJmYV9pb2NfcyAqaW9jKQoreworCWJmYV9pb2Nfc3RhdHMoaW9jLCBpb2NfZGlzYWJsZXMpOworCWJmYV9mc21fc2VuZF9ldmVudChpb2MsIElPQ19FX0RJU0FCTEUpOworfQorCisvKioKKyAqIFJldHVybnMgbWVtb3J5IHJlcXVpcmVkIGZvciBzYXZpbmcgZmlybXdhcmUgdHJhY2UgaW4gY2FzZSBvZiBjcmFzaC4KKyAqIERyaXZlciBtdXN0IGNhbGwgdGhpcyBpbnRlcmZhY2UgdG8gYWxsb2NhdGUgbWVtb3J5IHJlcXVpcmVkIGZvcgorICogYXV0b21hdGljIHNhdmluZyBvZiBmaXJtd2FyZSB0cmFjZS4gRHJpdmVyIHNob3VsZCBjYWxsCisgKiBiZmFfaW9jX2RlYnVnX21lbWNsYWltKCkgcmlnaHQgYWZ0ZXIgYmZhX2lvY19hdHRhY2goKSB0byBzZXR1cCB0aGlzCisgKiB0cmFjZSBtZW1vcnkuCisgKi8KK2ludAorYmZhX2lvY19kZWJ1Z190cmNzeihiZmFfYm9vbGVhbl90IGF1dG9fcmVjb3ZlcikKK3sKK3JldHVybiAoYXV0b19yZWNvdmVyKSA/IEJGQV9EQkdfRldUUkNfTEVOIDogMDsKK30KKworLyoqCisgKiBJbml0aWFsaXplIG1lbW9yeSBmb3Igc2F2aW5nIGZpcm13YXJlIHRyYWNlLiBEcml2ZXIgbXVzdCBpbml0aWFsaXplCisgKiB0cmFjZSBtZW1vcnkgYmVmb3JlIGNhbGwgYmZhX2lvY19lbmFibGUoKS4KKyAqLwordm9pZAorYmZhX2lvY19kZWJ1Z19tZW1jbGFpbShzdHJ1Y3QgYmZhX2lvY19zICppb2MsIHZvaWQgKmRiZ19md3NhdmUpCit7CisJYmZhX2Fzc2VydChpb2MtPmF1dG9fcmVjb3Zlcik7CisJaW9jLT5kYmdfZndzYXZlID0gZGJnX2Z3c2F2ZTsKKwlpb2MtPmRiZ19md3NhdmVfbGVuID0gYmZhX2lvY19kZWJ1Z190cmNzeihpb2MtPmF1dG9fcmVjb3Zlcik7Cit9CisKK3UzMgorYmZhX2lvY19zbWVtX3BnbnVtKHN0cnVjdCBiZmFfaW9jX3MgKmlvYywgdTMyIGZtYWRkcikKK3sKKwlyZXR1cm4gUFNTX1NNRU1fUEdOVU0oaW9jLT5pb2NfcmVncy5zbWVtX3BnMCwgZm1hZGRyKTsKK30KKwordTMyCitiZmFfaW9jX3NtZW1fcGdvZmYoc3RydWN0IGJmYV9pb2NfcyAqaW9jLCB1MzIgZm1hZGRyKQoreworCXJldHVybiBQU1NfU01FTV9QR09GRihmbWFkZHIpOworfQorCisvKioKKyAqIFJlZ2lzdGVyIG1haWxib3ggbWVzc2FnZSBoYW5kbGVyIGZ1bmN0aW9ucworICoKKyAqIEBwYXJhbVtpbl0JaW9jCQlJT0MgaW5zdGFuY2UKKyAqIEBwYXJhbVtpbl0JbWNmdW5jcwkJbWVzc2FnZSBjbGFzcyBoYW5kbGVyIGZ1bmN0aW9ucworICovCit2b2lkCitiZmFfaW9jX21ib3hfcmVnaXN0ZXIoc3RydWN0IGJmYV9pb2NfcyAqaW9jLCBiZmFfaW9jX21ib3hfbWNmdW5jX3QgKm1jZnVuY3MpCit7CisJc3RydWN0IGJmYV9pb2NfbWJveF9tb2RfcyAqbW9kID0gJmlvYy0+bWJveF9tb2Q7CisJaW50ICAgICAgICAgICAgIG1jOworCisJZm9yIChtYyA9IDA7IG1jIDwgQkZJX01DX01BWDsgbWMrKykKKwkJbW9kLT5tYmhkbHJbbWNdLmNiZm4gPSBtY2Z1bmNzW21jXTsKK30KKworLyoqCisgKiBSZWdpc3RlciBtYWlsYm94IG1lc3NhZ2UgaGFuZGxlciBmdW5jdGlvbiwgdG8gYmUgY2FsbGVkIGJ5IGNvbW1vbiBtb2R1bGVzCisgKi8KK3ZvaWQKK2JmYV9pb2NfbWJveF9yZWdpc3Ioc3RydWN0IGJmYV9pb2NfcyAqaW9jLCBlbnVtIGJmaV9tY2xhc3MgbWMsCisJCSAgICBiZmFfaW9jX21ib3hfbWNmdW5jX3QgY2Jmbiwgdm9pZCAqY2JhcmcpCit7CisJc3RydWN0IGJmYV9pb2NfbWJveF9tb2RfcyAqbW9kID0gJmlvYy0+bWJveF9tb2Q7CisKKwltb2QtPm1iaGRsclttY10uY2JmbiA9IGNiZm47CisJbW9kLT5tYmhkbHJbbWNdLmNiYXJnID0gY2Jhcmc7Cit9CisKKy8qKgorICogUXVldWUgYSBtYWlsYm94IGNvbW1hbmQgcmVxdWVzdCB0byBmaXJtd2FyZS4gV2FpdHMgaWYgbWFpbGJveCBpcyBidXN5LgorICogUmVzcG9uc2liaWxpdHkgb2YgY2FsbGVyIHRvIHNlcmlhbGl6ZQorICoKKyAqIEBwYXJhbVtpbl0JaW9jCUlPQyBpbnN0YW5jZQorICogQHBhcmFtW2ldCWNtZAlNYWlsYm94IGNvbW1hbmQKKyAqLwordm9pZAorYmZhX2lvY19tYm94X3F1ZXVlKHN0cnVjdCBiZmFfaW9jX3MgKmlvYywgc3RydWN0IGJmYV9tYm94X2NtZF9zICpjbWQpCit7CisJc3RydWN0IGJmYV9pb2NfbWJveF9tb2RfcyAqbW9kID0gJmlvYy0+bWJveF9tb2Q7CisJdTMyICAgICAgICBzdGF0OworCisJLyoqCisJICogSWYgYSBwcmV2aW91cyBjb21tYW5kIGlzIHBlbmRpbmcsIHF1ZXVlIG5ldyBjb21tYW5kCisJICovCisJaWYgKCFsaXN0X2VtcHR5KCZtb2QtPmNtZF9xKSkgeworCQlsaXN0X2FkZF90YWlsKCZjbWQtPnFlLCAmbW9kLT5jbWRfcSk7CisJCXJldHVybjsKKwl9CisKKwkvKioKKwkgKiBJZiBtYWlsYm94IGlzIGJ1c3ksIHF1ZXVlIGNvbW1hbmQgZm9yIHBvbGwgdGltZXIKKwkgKi8KKwlzdGF0ID0gYmZhX3JlZ19yZWFkKGlvYy0+aW9jX3JlZ3MuaGZuX21ib3hfY21kKTsKKwlpZiAoc3RhdCkgeworCQlsaXN0X2FkZF90YWlsKCZjbWQtPnFlLCAmbW9kLT5jbWRfcSk7CisJCXJldHVybjsKKwl9CisKKwkvKioKKwkgKiBtYWlsYm94IGlzIGZyZWUgLS0gcXVldWUgY29tbWFuZCB0byBmaXJtd2FyZQorCSAqLworCWJmYV9pb2NfbWJveF9zZW5kKGlvYywgY21kLT5tc2csIHNpemVvZihjbWQtPm1zZykpOworfQorCisvKioKKyAqIEhhbmRsZSBtYWlsYm94IGludGVycnVwdHMKKyAqLwordm9pZAorYmZhX2lvY19tYm94X2lzcihzdHJ1Y3QgYmZhX2lvY19zICppb2MpCit7CisJc3RydWN0IGJmYV9pb2NfbWJveF9tb2RfcyAqbW9kID0gJmlvYy0+bWJveF9tb2Q7CisJc3RydWN0IGJmaV9tYm1zZ19zIG07CisJaW50ICAgICAgICAgICAgIG1jOworCisJYmZhX2lvY19tc2dnZXQoaW9jLCAmbSk7CisKKwkvKioKKwkgKiBUcmVhdCBJT0MgbWVzc2FnZSBjbGFzcyBhcyBzcGVjaWFsLgorCSAqLworCW1jID0gbS5taC5tc2dfY2xhc3M7CisJaWYgKG1jID09IEJGSV9NQ19JT0MpIHsKKwkJYmZhX2lvY19pc3IoaW9jLCAmbSk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoKG1jID4gQkZJX01DX01BWCkgfHwgKG1vZC0+bWJoZGxyW21jXS5jYmZuID09IE5VTEwpKQorCQlyZXR1cm47CisKKwltb2QtPm1iaGRsclttY10uY2Jmbihtb2QtPm1iaGRsclttY10uY2JhcmcsICZtKTsKK30KKwordm9pZAorYmZhX2lvY19lcnJvcl9pc3Ioc3RydWN0IGJmYV9pb2NfcyAqaW9jKQoreworCWJmYV9mc21fc2VuZF9ldmVudChpb2MsIElPQ19FX0hXRVJST1IpOworfQorCisjaWZuZGVmIEJGQV9CSU9TX0JVSUxECisKKy8qKgorICogcmV0dXJuIHRydWUgaWYgSU9DIGlzIGRpc2FibGVkCisgKi8KK2JmYV9ib29sZWFuX3QKK2JmYV9pb2NfaXNfZGlzYWJsZWQoc3RydWN0IGJmYV9pb2NfcyAqaW9jKQoreworCXJldHVybiAoYmZhX2ZzbV9jbXBfc3RhdGUoaW9jLCBiZmFfaW9jX3NtX2Rpc2FibGluZykKKwkJfHwgYmZhX2ZzbV9jbXBfc3RhdGUoaW9jLCBiZmFfaW9jX3NtX2Rpc2FibGVkKSk7Cit9CisKKy8qKgorICogcmV0dXJuIHRydWUgaWYgSU9DIGZpcm13YXJlIGlzIGRpZmZlcmVudC4KKyAqLworYmZhX2Jvb2xlYW5fdAorYmZhX2lvY19md19taXNtYXRjaChzdHJ1Y3QgYmZhX2lvY19zICppb2MpCit7CisJcmV0dXJuIChiZmFfZnNtX2NtcF9zdGF0ZShpb2MsIGJmYV9pb2Nfc21fcmVzZXQpCisJCXx8IGJmYV9mc21fY21wX3N0YXRlKGlvYywgYmZhX2lvY19zbV9md2NoZWNrKQorCQl8fCBiZmFfZnNtX2NtcF9zdGF0ZShpb2MsIGJmYV9pb2Nfc21fbWlzbWF0Y2gpKTsKK30KKworI2RlZmluZSBiZmFfaW9jX3N0YXRlX2Rpc2FibGVkKF9fc20pCQlcCisJKCgoX19zbSkgPT0gQkZJX0lPQ19VTklOSVQpIHx8CQlcCisJICgoX19zbSkgPT0gQkZJX0lPQ19JTklUSU5HKSB8fAkJXAorCSAoKF9fc20pID09IEJGSV9JT0NfSFdJTklUKSB8fAkJXAorCSAoKF9fc20pID09IEJGSV9JT0NfRElTQUJMRUQpIHx8CVwKKwkgKChfX3NtKSA9PSBCRklfSU9DX0hCRkFJTCkgfHwJCVwKKwkgKChfX3NtKSA9PSBCRklfSU9DX0NGR19ESVNBQkxFRCkpCisKKy8qKgorICogQ2hlY2sgaWYgYWRhcHRlciBpcyBkaXNhYmxlZCAtLSBib3RoIElPQ3Mgc2hvdWxkIGJlIGluIGEgZGlzYWJsZWQKKyAqIHN0YXRlLgorICovCitiZmFfYm9vbGVhbl90CitiZmFfaW9jX2FkYXB0ZXJfaXNfZGlzYWJsZWQoc3RydWN0IGJmYV9pb2NfcyAqaW9jKQoreworCXUzMiAgICAgICAgaW9jX3N0YXRlOworCWJmYV9vc19hZGRyX3QgICByYiA9IGlvYy0+cGNpZGV2LnBjaV9iYXJfa3ZhOworCisJaWYgKCFiZmFfZnNtX2NtcF9zdGF0ZShpb2MsIGJmYV9pb2Nfc21fZGlzYWJsZWQpKQorCQlyZXR1cm4gQkZBX0ZBTFNFOworCisJaW9jX3N0YXRlID0gYmZhX3JlZ19yZWFkKHJiICsgQkZBX0lPQzBfU1RBVEVfUkVHKTsKKwlpZiAoIWJmYV9pb2Nfc3RhdGVfZGlzYWJsZWQoaW9jX3N0YXRlKSkKKwkJcmV0dXJuIEJGQV9GQUxTRTsKKworCWlvY19zdGF0ZSA9IGJmYV9yZWdfcmVhZChyYiArIEJGQV9JT0MxX1NUQVRFX1JFRyk7CisJaWYgKCFiZmFfaW9jX3N0YXRlX2Rpc2FibGVkKGlvY19zdGF0ZSkpCisJCXJldHVybiBCRkFfRkFMU0U7CisKKwlyZXR1cm4gQkZBX1RSVUU7Cit9CisKKy8qKgorICogQWRkIHRvIElPQyBoZWFydGJlYXQgZmFpbHVyZSBub3RpZmljYXRpb24gcXVldWUuIFRvIGJlIHVzZWQgYnkgY29tbW9uCisgKiBtb2R1bGVzIHN1Y2ggYXMKKyAqLwordm9pZAorYmZhX2lvY19oYmZhaWxfcmVnaXN0ZXIoc3RydWN0IGJmYV9pb2NfcyAqaW9jLAorCQkJc3RydWN0IGJmYV9pb2NfaGJmYWlsX25vdGlmeV9zICpub3RpZnkpCit7CisJbGlzdF9hZGRfdGFpbCgmbm90aWZ5LT5xZSwgJmlvYy0+aGJfbm90aWZ5X3EpOworfQorCisjZGVmaW5lIEJGQV9NRkdfTkFNRSAiQnJvY2FkZSIKK3ZvaWQKK2JmYV9pb2NfZ2V0X2FkYXB0ZXJfYXR0cihzdHJ1Y3QgYmZhX2lvY19zICppb2MsCisJCQkgc3RydWN0IGJmYV9hZGFwdGVyX2F0dHJfcyAqYWRfYXR0cikKK3sKKwlzdHJ1Y3QgYmZpX2lvY19hdHRyX3MgKmlvY19hdHRyOworCWNoYXIgICAgICAgICAgICBtb2RlbFtCRkFfQURBUFRFUl9NT0RFTF9OQU1FX0xFTl07CisKKwlpb2NfYXR0ciA9IGlvYy0+YXR0cjsKKwliZmFfb3NfbWVtY3B5KCh2b2lkICopJmFkX2F0dHItPnNlcmlhbF9udW0sCisJCSAgICAgICh2b2lkICopaW9jX2F0dHItPmJyY2Rfc2VyaWFsbnVtLAorCQkgICAgICBCRkFfQURBUFRFUl9TRVJJQUxfTlVNX0xFTik7CisKKwliZmFfb3NfbWVtY3B5KCZhZF9hdHRyLT5md192ZXIsIGlvY19hdHRyLT5md192ZXJzaW9uLCBCRkFfVkVSU0lPTl9MRU4pOworCWJmYV9vc19tZW1jcHkoJmFkX2F0dHItPm9wdHJvbV92ZXIsIGlvY19hdHRyLT5vcHRyb21fdmVyc2lvbiwKKwkJICAgICAgQkZBX1ZFUlNJT05fTEVOKTsKKwliZmFfb3NfbWVtY3B5KCZhZF9hdHRyLT5tYW51ZmFjdHVyZXIsIEJGQV9NRkdfTkFNRSwKKwkJICAgICAgQkZBX0FEQVBURVJfTUZHX05BTUVfTEVOKTsKKwliZmFfb3NfbWVtY3B5KCZhZF9hdHRyLT52cGQsICZpb2NfYXR0ci0+dnBkLAorCQkgICAgICBzaXplb2Yoc3RydWN0IGJmYV9tZmdfdnBkX3MpKTsKKworCWFkX2F0dHItPm5wb3J0cyA9IEJGSV9BREFQVEVSX0dFVFAoTlBPUlRTLCBpb2NfYXR0ci0+YWRhcHRlcl9wcm9wKTsKKwlhZF9hdHRyLT5tYXhfc3BlZWQgPSBCRklfQURBUFRFUl9HRVRQKFNQRUVELCBpb2NfYXR0ci0+YWRhcHRlcl9wcm9wKTsKKworCS8qKgorCSAqIG1vZGVsIG5hbWUKKwkgKi8KKwlpZiAoQkZJX0FEQVBURVJfR0VUUChTUEVFRCwgaW9jX2F0dHItPmFkYXB0ZXJfcHJvcCkgPT0gMTApIHsKKwkJc3RyY3B5KG1vZGVsLCAiQlItMTA/MCIpOworCQltb2RlbFs1XSA9ICcwJyArIGFkX2F0dHItPm5wb3J0czsKKwl9IGVsc2UgeworCQlzdHJjcHkobW9kZWwsICJCcm9jYWRlLT8/NSIpOworCQltb2RlbFs4XSA9CisJCQknMCcgKyBCRklfQURBUFRFUl9HRVRQKFNQRUVELCBpb2NfYXR0ci0+YWRhcHRlcl9wcm9wKTsKKwkJbW9kZWxbOV0gPSAnMCcgKyBhZF9hdHRyLT5ucG9ydHM7CisJfQorCisJaWYgKEJGSV9BREFQVEVSX0lTX1NQRUNJQUwoaW9jX2F0dHItPmFkYXB0ZXJfcHJvcCkpCisJCWFkX2F0dHItPnByb3RvdHlwZSA9IDE7CisJZWxzZQorCQlhZF9hdHRyLT5wcm90b3R5cGUgPSAwOworCisJYmZhX29zX21lbWNweSgmYWRfYXR0ci0+bW9kZWwsIG1vZGVsLCBCRkFfQURBUFRFUl9NT0RFTF9OQU1FX0xFTik7CisJYmZhX29zX21lbWNweSgmYWRfYXR0ci0+bW9kZWxfZGVzY3IsICZhZF9hdHRyLT5tb2RlbCwKKwkJICAgICAgQkZBX0FEQVBURVJfTU9ERUxfTkFNRV9MRU4pOworCisJYWRfYXR0ci0+cHd3biA9IGJmYV9pb2NfZ2V0X3B3d24oaW9jKTsKKwlhZF9hdHRyLT5tYWMgPSBiZmFfaW9jX2dldF9tYWMoaW9jKTsKKworCWFkX2F0dHItPnBjaWVfZ2VuID0gaW9jX2F0dHItPnBjaWVfZ2VuOworCWFkX2F0dHItPnBjaWVfbGFuZXMgPSBpb2NfYXR0ci0+cGNpZV9sYW5lczsKKwlhZF9hdHRyLT5wY2llX2xhbmVzX29yaWcgPSBpb2NfYXR0ci0+cGNpZV9sYW5lc19vcmlnOworCWFkX2F0dHItPmFzaWNfcmV2ID0gaW9jX2F0dHItPmFzaWNfcmV2OworCWFkX2F0dHItPmh3X3ZlclswXSA9ICdSJzsKKwlhZF9hdHRyLT5od192ZXJbMV0gPSAnZSc7CisJYWRfYXR0ci0+aHdfdmVyWzJdID0gJ3YnOworCWFkX2F0dHItPmh3X3ZlclszXSA9ICctJzsKKwlhZF9hdHRyLT5od192ZXJbNF0gPSBpb2NfYXR0ci0+YXNpY19yZXY7CisJYWRfYXR0ci0+aHdfdmVyWzVdID0gJ1wwJzsKKworCWFkX2F0dHItPmNuYV9jYXBhYmxlID0gaW9jLT5jbmE7Cit9CisKK3ZvaWQKK2JmYV9pb2NfZ2V0X2F0dHIoc3RydWN0IGJmYV9pb2NfcyAqaW9jLCBzdHJ1Y3QgYmZhX2lvY19hdHRyX3MgKmlvY19hdHRyKQoreworCWJmYV9vc19tZW1zZXQoKHZvaWQgKilpb2NfYXR0ciwgMCwgc2l6ZW9mKHN0cnVjdCBiZmFfaW9jX2F0dHJfcykpOworCisJaW9jX2F0dHItPnN0YXRlID0gYmZhX3NtX3RvX3N0YXRlKGlvY19zbV90YWJsZSwgaW9jLT5mc20pOworCWlvY19hdHRyLT5wb3J0X2lkID0gaW9jLT5wb3J0X2lkOworCisJaWYgKCFpb2MtPmN0ZGV2KQorCQlpb2NfYXR0ci0+aW9jX3R5cGUgPSBCRkFfSU9DX1RZUEVfRkM7CisJZWxzZSBpZiAoaW9jLT5pb2NfbWMgPT0gQkZJX01DX0lPQ0ZDKQorCQlpb2NfYXR0ci0+aW9jX3R5cGUgPSBCRkFfSU9DX1RZUEVfRkNvRTsKKwllbHNlIGlmIChpb2MtPmlvY19tYyA9PSBCRklfTUNfTEwpCisJCWlvY19hdHRyLT5pb2NfdHlwZSA9IEJGQV9JT0NfVFlQRV9MTDsKKworCWJmYV9pb2NfZ2V0X2FkYXB0ZXJfYXR0cihpb2MsICZpb2NfYXR0ci0+YWRhcHRlcl9hdHRyKTsKKworCWlvY19hdHRyLT5wY2lfYXR0ci5kZXZpY2VfaWQgPSBpb2MtPnBjaWRldi5kZXZpY2VfaWQ7CisJaW9jX2F0dHItPnBjaV9hdHRyLnBjaWZuID0gaW9jLT5wY2lkZXYucGNpX2Z1bmM7CisJaW9jX2F0dHItPnBjaV9hdHRyLmNoaXBfcmV2WzBdID0gJ1InOworCWlvY19hdHRyLT5wY2lfYXR0ci5jaGlwX3JldlsxXSA9ICdlJzsKKwlpb2NfYXR0ci0+cGNpX2F0dHIuY2hpcF9yZXZbMl0gPSAndic7CisJaW9jX2F0dHItPnBjaV9hdHRyLmNoaXBfcmV2WzNdID0gJy0nOworCWlvY19hdHRyLT5wY2lfYXR0ci5jaGlwX3Jldls0XSA9IGlvY19hdHRyLT5hZGFwdGVyX2F0dHIuYXNpY19yZXY7CisJaW9jX2F0dHItPnBjaV9hdHRyLmNoaXBfcmV2WzVdID0gJ1wwJzsKK30KKworLyoqCisgKiAgaGFsX3d3bl9wdWJsaWMKKyAqLword3duX3QKK2JmYV9pb2NfZ2V0X3B3d24oc3RydWN0IGJmYV9pb2NfcyAqaW9jKQoreworCXVuaW9uIHsKKwkJd3duX3QgICAgICAgICAgIHd3bjsKKwkJdTggICAgICAgICBieXRlW3NpemVvZih3d25fdCldOworCX0KKwl3OworCisJdy53d24gPSBpb2MtPmF0dHItPm1mZ193d247CisKKwlpZiAoYmZhX2lvY19wb3J0aWQoaW9jKSA9PSAxKQorCQl3LmJ5dGVbN10rKzsKKworCXJldHVybiB3Lnd3bjsKK30KKword3duX3QKK2JmYV9pb2NfZ2V0X253d24oc3RydWN0IGJmYV9pb2NfcyAqaW9jKQoreworCXVuaW9uIHsKKwkJd3duX3QgICAgICAgICAgIHd3bjsKKwkJdTggICAgICAgICBieXRlW3NpemVvZih3d25fdCldOworCX0KKwl3OworCisJdy53d24gPSBpb2MtPmF0dHItPm1mZ193d247CisKKwlpZiAoYmZhX2lvY19wb3J0aWQoaW9jKSA9PSAxKQorCQl3LmJ5dGVbN10rKzsKKworCXcuYnl0ZVswXSA9IDB4MjA7CisKKwlyZXR1cm4gdy53d247Cit9CisKK3d3bl90CitiZmFfaW9jX2dldF93d25fbmFhNShzdHJ1Y3QgYmZhX2lvY19zICppb2MsIHUxNiBpbnN0KQoreworCXVuaW9uIHsKKwkJd3duX3QgICAgICAgICAgIHd3bjsKKwkJdTggICAgICAgICBieXRlW3NpemVvZih3d25fdCldOworCX0KKwl3ICAgICAgICAgICAgICAsIHc1OworCisJYmZhX3RyYyhpb2MsIGluc3QpOworCisJdy53d24gPSBpb2MtPmF0dHItPm1mZ193d247CisJdzUuYnl0ZVswXSA9IDB4NTAgfCB3LmJ5dGVbMl0gPj4gNDsKKwl3NS5ieXRlWzFdID0gdy5ieXRlWzJdIDw8IDQgfCB3LmJ5dGVbM10gPj4gNDsKKwl3NS5ieXRlWzJdID0gdy5ieXRlWzNdIDw8IDQgfCB3LmJ5dGVbNF0gPj4gNDsKKwl3NS5ieXRlWzNdID0gdy5ieXRlWzRdIDw8IDQgfCB3LmJ5dGVbNV0gPj4gNDsKKwl3NS5ieXRlWzRdID0gdy5ieXRlWzVdIDw8IDQgfCB3LmJ5dGVbNl0gPj4gNDsKKwl3NS5ieXRlWzVdID0gdy5ieXRlWzZdIDw8IDQgfCB3LmJ5dGVbN10gPj4gNDsKKwl3NS5ieXRlWzZdID0gdy5ieXRlWzddIDw8IDQgfCAoaW5zdCAmIDB4MGYwMCkgPj4gODsKKwl3NS5ieXRlWzddID0gKGluc3QgJiAweGZmKTsKKworCXJldHVybiB3NS53d247Cit9CisKK3U2NAorYmZhX2lvY19nZXRfYWRpZChzdHJ1Y3QgYmZhX2lvY19zICppb2MpCit7CisJcmV0dXJuIGlvYy0+YXR0ci0+bWZnX3d3bjsKK30KKworbWFjX3QKK2JmYV9pb2NfZ2V0X21hYyhzdHJ1Y3QgYmZhX2lvY19zICppb2MpCit7CisJbWFjX3QgICAgICAgICAgIG1hYzsKKworCW1hYyA9IGlvYy0+YXR0ci0+bWZnX21hYzsKKwltYWMubWFjW01BQ19BRERSTEVOIC0gMV0gKz0gYmZhX2lvY19wY2lmbihpb2MpOworCisJcmV0dXJuIG1hYzsKK30KKwordm9pZAorYmZhX2lvY19zZXRfZmNtb2RlKHN0cnVjdCBiZmFfaW9jX3MgKmlvYykKK3sKKwlpb2MtPmZjbW9kZSA9IEJGQV9UUlVFOworCWlvYy0+cG9ydF9pZCA9IGJmYV9pb2NfcGNpZm4oaW9jKTsKK30KKworYmZhX2Jvb2xlYW5fdAorYmZhX2lvY19nZXRfZmNtb2RlKHN0cnVjdCBiZmFfaW9jX3MgKmlvYykKK3sKKwlyZXR1cm4gaW9jLT5mY21vZGUgfHwgKGlvYy0+cGNpZGV2LmRldmljZV9pZCAhPSBCRkFfUENJX0RFVklDRV9JRF9DVCk7Cit9CisKKy8qKgorICogUmV0dXJuIHRydWUgaWYgaW50ZXJydXB0IHNob3VsZCBiZSBjbGFpbWVkLgorICovCitiZmFfYm9vbGVhbl90CitiZmFfaW9jX2ludHhfY2xhaW0oc3RydWN0IGJmYV9pb2NfcyAqaW9jKQoreworCXUzMiAgICAgICAgaXNyLCBtc2s7CisKKwkvKioKKwkgKiBBbHdheXMgY2xhaW0gaWYgbm90IGNhdGFwdWx0LgorCSAqLworCWlmICghaW9jLT5jdGRldikKKwkJcmV0dXJuIEJGQV9UUlVFOworCisJLyoqCisJICogRkFMU0UgaWYgbmV4dCBkZXZpY2UgaXMgY2xhaW1pbmcgaW50ZXJydXB0LgorCSAqIFRSVUUgaWYgbmV4dCBkZXZpY2UgaXMgbm90IGludGVycnVwdGluZyBvciBub3QgcHJlc2VudC4KKwkgKi8KKwltc2sgPSBiZmFfcmVnX3JlYWQoaW9jLT5pb2NfcmVncy5zaGlycV9tc2tfbmV4dCk7CisJaXNyID0gYmZhX3JlZ19yZWFkKGlvYy0+aW9jX3JlZ3Muc2hpcnFfaXNyX25leHQpOworCXJldHVybiAhKGlzciAmIH5tc2spOworfQorCisvKioKKyAqIFNlbmQgQUVOIG5vdGlmaWNhdGlvbgorICovCitzdGF0aWMgdm9pZAorYmZhX2lvY19hZW5fcG9zdChzdHJ1Y3QgYmZhX2lvY19zICppb2MsIGVudW0gYmZhX2lvY19hZW5fZXZlbnQgZXZlbnQpCit7CisJdW5pb24gYmZhX2Flbl9kYXRhX3UgYWVuX2RhdGE7CisJc3RydWN0IGJmYV9sb2dfbW9kX3MgKmxvZ21vZCA9IGlvYy0+bG9nbTsKKwlzMzIgICAgICAgICBpbnN0X251bSA9IDA7CisJc3RydWN0IGJmYV9pb2NfYXR0cl9zIGlvY19hdHRyOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX0lPQ19BRU5fSEJHT09EOgorCQliZmFfbG9nKGxvZ21vZCwgQkZBX0FFTl9JT0NfSEJHT09ELCBpbnN0X251bSk7CisJCWJyZWFrOworCWNhc2UgQkZBX0lPQ19BRU5fSEJGQUlMOgorCQliZmFfbG9nKGxvZ21vZCwgQkZBX0FFTl9JT0NfSEJGQUlMLCBpbnN0X251bSk7CisJCWJyZWFrOworCWNhc2UgQkZBX0lPQ19BRU5fRU5BQkxFOgorCQliZmFfbG9nKGxvZ21vZCwgQkZBX0FFTl9JT0NfRU5BQkxFLCBpbnN0X251bSk7CisJCWJyZWFrOworCWNhc2UgQkZBX0lPQ19BRU5fRElTQUJMRToKKwkJYmZhX2xvZyhsb2dtb2QsIEJGQV9BRU5fSU9DX0RJU0FCTEUsIGluc3RfbnVtKTsKKwkJYnJlYWs7CisJY2FzZSBCRkFfSU9DX0FFTl9GV01JU01BVENIOgorCQliZmFfbG9nKGxvZ21vZCwgQkZBX0FFTl9JT0NfRldNSVNNQVRDSCwgaW5zdF9udW0pOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwltZW1zZXQoJmFlbl9kYXRhLmlvYy5wd3duLCAwLCBzaXplb2YoYWVuX2RhdGEuaW9jLnB3d24pKTsKKwltZW1zZXQoJmFlbl9kYXRhLmlvYy5tYWMsIDAsIHNpemVvZihhZW5fZGF0YS5pb2MubWFjKSk7CisJYmZhX2lvY19nZXRfYXR0cihpb2MsICZpb2NfYXR0cik7CisJc3dpdGNoIChpb2NfYXR0ci5pb2NfdHlwZSkgeworCWNhc2UgQkZBX0lPQ19UWVBFX0ZDOgorCQlhZW5fZGF0YS5pb2MucHd3biA9IGJmYV9pb2NfZ2V0X3B3d24oaW9jKTsKKwkJYnJlYWs7CisJY2FzZSBCRkFfSU9DX1RZUEVfRkNvRToKKwkJYWVuX2RhdGEuaW9jLnB3d24gPSBiZmFfaW9jX2dldF9wd3duKGlvYyk7CisJCWFlbl9kYXRhLmlvYy5tYWMgPSBiZmFfaW9jX2dldF9tYWMoaW9jKTsKKwkJYnJlYWs7CisJY2FzZSBCRkFfSU9DX1RZUEVfTEw6CisJCWFlbl9kYXRhLmlvYy5tYWMgPSBiZmFfaW9jX2dldF9tYWMoaW9jKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydChpb2NfYXR0ci5pb2NfdHlwZSA9PSBCRkFfSU9DX1RZUEVfRkMpOworCQlicmVhazsKKwl9CisJYWVuX2RhdGEuaW9jLmlvY190eXBlID0gaW9jX2F0dHIuaW9jX3R5cGU7Cit9CisKKy8qKgorICogUmV0cmlldmUgc2F2ZWQgZmlybXdhcmUgdHJhY2UgZnJvbSBhIHByaW9yIElPQyBmYWlsdXJlLgorICovCitiZmFfc3RhdHVzX3QKK2JmYV9pb2NfZGVidWdfZndzYXZlKHN0cnVjdCBiZmFfaW9jX3MgKmlvYywgdm9pZCAqdHJjZGF0YSwgaW50ICp0cmNsZW4pCit7CisJaW50ICAgICAgICAgICAgIHRsZW47CisKKwlpZiAoaW9jLT5kYmdfZndzYXZlX2xlbiA9PSAwKQorCQlyZXR1cm4gQkZBX1NUQVRVU19FTk9GU0FWRTsKKworCXRsZW4gPSAqdHJjbGVuOworCWlmICh0bGVuID4gaW9jLT5kYmdfZndzYXZlX2xlbikKKwkJdGxlbiA9IGlvYy0+ZGJnX2Z3c2F2ZV9sZW47CisKKwliZmFfb3NfbWVtY3B5KHRyY2RhdGEsIGlvYy0+ZGJnX2Z3c2F2ZSwgdGxlbik7CisJKnRyY2xlbiA9IHRsZW47CisJcmV0dXJuIEJGQV9TVEFUVVNfT0s7Cit9CisKKy8qKgorICogUmV0cmlldmUgc2F2ZWQgZmlybXdhcmUgdHJhY2UgZnJvbSBhIHByaW9yIElPQyBmYWlsdXJlLgorICovCitiZmFfc3RhdHVzX3QKK2JmYV9pb2NfZGVidWdfZnd0cmMoc3RydWN0IGJmYV9pb2NfcyAqaW9jLCB2b2lkICp0cmNkYXRhLCBpbnQgKnRyY2xlbikKK3sKKwl1MzIgICAgICAgIHBnbnVtOworCXUzMiAgICAgICAgbG9mZiA9IEJGQV9EQkdfRldUUkNfT0ZGKGJmYV9pb2NfcG9ydGlkKGlvYykpOworCWludCAgICAgICAgICAgICBpLCB0bGVuOworCXUzMiAgICAgICAqdGJ1ZiA9IHRyY2RhdGEsIHIzMjsKKworCWJmYV90cmMoaW9jLCAqdHJjbGVuKTsKKworCXBnbnVtID0gYmZhX2lvY19zbWVtX3BnbnVtKGlvYywgbG9mZik7CisJbG9mZiA9IGJmYV9pb2Nfc21lbV9wZ29mZihpb2MsIGxvZmYpOworCWJmYV9yZWdfd3JpdGUoaW9jLT5pb2NfcmVncy5ob3N0X3BhZ2VfbnVtX2ZuLCBwZ251bSk7CisKKwl0bGVuID0gKnRyY2xlbjsKKwlpZiAodGxlbiA+IEJGQV9EQkdfRldUUkNfTEVOKQorCQl0bGVuID0gQkZBX0RCR19GV1RSQ19MRU47CisJdGxlbiAvPSBzaXplb2YodTMyKTsKKworCWJmYV90cmMoaW9jLCB0bGVuKTsKKworCWZvciAoaSA9IDA7IGkgPCB0bGVuOyBpKyspIHsKKwkJcjMyID0gYmZhX21lbV9yZWFkKGlvYy0+aW9jX3JlZ3Muc21lbV9wYWdlX3N0YXJ0LCBsb2ZmKTsKKwkJdGJ1ZltpXSA9IGJmYV9vc19udG9obChyMzIpOworCQlsb2ZmICs9IHNpemVvZih1MzIpOworCisJCS8qKgorCQkgKiBoYW5kbGUgcGFnZSBvZmZzZXQgd3JhcCBhcm91bmQKKwkJICovCisJCWxvZmYgPSBQU1NfU01FTV9QR09GRihsb2ZmKTsKKwkJaWYgKGxvZmYgPT0gMCkgeworCQkJcGdudW0rKzsKKwkJCWJmYV9yZWdfd3JpdGUoaW9jLT5pb2NfcmVncy5ob3N0X3BhZ2VfbnVtX2ZuLCBwZ251bSk7CisJCX0KKwl9CisJYmZhX3JlZ193cml0ZShpb2MtPmlvY19yZWdzLmhvc3RfcGFnZV9udW1fZm4sCisJCSAgICAgIGJmYV9pb2Nfc21lbV9wZ251bShpb2MsIDApKTsKKwliZmFfdHJjKGlvYywgcGdudW0pOworCisJKnRyY2xlbiA9IHRsZW4gKiBzaXplb2YodTMyKTsKKwlyZXR1cm4gQkZBX1NUQVRVU19PSzsKK30KKworLyoqCisgKiBTYXZlIGZpcm13YXJlIHRyYWNlIGlmIGNvbmZpZ3VyZWQuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaW9jX2RlYnVnX3NhdmUoc3RydWN0IGJmYV9pb2NfcyAqaW9jKQoreworCWludCAgICAgICAgICAgICB0bGVuOworCisJaWYgKGlvYy0+ZGJnX2Z3c2F2ZV9sZW4pIHsKKwkJdGxlbiA9IGlvYy0+ZGJnX2Z3c2F2ZV9sZW47CisJCWJmYV9pb2NfZGVidWdfZnd0cmMoaW9jLCBpb2MtPmRiZ19md3NhdmUsICZ0bGVuKTsKKwl9Cit9CisKKy8qKgorICogRmlybXdhcmUgZmFpbHVyZSBkZXRlY3RlZC4gU3RhcnQgcmVjb3ZlcnkgYWN0aW9ucy4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9pb2NfcmVjb3ZlcihzdHJ1Y3QgYmZhX2lvY19zICppb2MpCit7CisJaWYgKGlvYy0+ZGJnX2Z3c2F2ZV9vbmNlKSB7CisJCWlvYy0+ZGJnX2Z3c2F2ZV9vbmNlID0gQkZBX0ZBTFNFOworCQliZmFfaW9jX2RlYnVnX3NhdmUoaW9jKTsKKwl9CisKKwliZmFfaW9jX3N0YXRzKGlvYywgaW9jX2hiZmFpbHMpOworCWJmYV9mc21fc2VuZF9ldmVudChpb2MsIElPQ19FX0hCRkFJTCk7Cit9CisKKyNlbHNlCisKK3N0YXRpYyB2b2lkCitiZmFfaW9jX2Flbl9wb3N0KHN0cnVjdCBiZmFfaW9jX3MgKmlvYywgZW51bSBiZmFfaW9jX2Flbl9ldmVudCBldmVudCkKK3sKK30KKworc3RhdGljIHZvaWQKK2JmYV9pb2NfcmVjb3ZlcihzdHJ1Y3QgYmZhX2lvY19zICppb2MpCit7CisJYmZhX2Fzc2VydCgwKTsKK30KKworI2VuZGlmCisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfaW9jLmggYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9pb2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OGVmZDRiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfaW9jLmgKQEAgLTAsMCArMSwyNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0JGQV9JT0NfSF9fCisjZGVmaW5lIF9fQkZBX0lPQ19IX18KKworI2luY2x1ZGUgPGNzL2JmYV9zbS5oPgorI2luY2x1ZGUgPGJmaS9iZmkuaD4KKyNpbmNsdWRlIDxiZmkvYmZpX2lvYy5oPgorI2luY2x1ZGUgPGJmaS9iZmlfYm9vdC5oPgorI2luY2x1ZGUgPGJmYV90aW1lci5oPgorCisvKioKKyAqIFBDSSBkZXZpY2UgaW5mb3JtYXRpb24gcmVxdWlyZWQgYnkgSU9DCisgKi8KK3N0cnVjdCBiZmFfcGNpZGV2X3MgeworCWludCAgICAgICAgICAgICBwY2lfc2xvdDsKKwl1OCAgICAgICAgIHBjaV9mdW5jOworCXUxNglkZXZpY2VfaWQ7CisJYmZhX29zX2FkZHJfdCAgIHBjaV9iYXJfa3ZhOworfTsKKworLyoqCisgKiBTdHJ1Y3R1cmUgdXNlZCB0byByZW1lbWJlciB0aGUgRE1BLWFibGUgbWVtb3J5IGJsb2NrJ3MgS1ZBIGFuZCBQaHlzaWNhbAorICogQWRkcmVzcworICovCitzdHJ1Y3QgYmZhX2RtYV9zIHsKKwl2b2lkCQkqa3ZhOwkvKiEgS2VybmVsIHZpcnR1YWwgYWRkcmVzcwkqLworCXU2NAlwYTsJLyohIFBoeXNpY2FsIGFkZHJlc3MJCSovCit9OworCisjZGVmaW5lIEJGQV9ETUFfQUxJR05fU1oJMjU2CisjZGVmaW5lIEJGQV9ST1VORFVQKF9sLCBfcykJKCgoX2wpICsgKChfcykgLSAxKSkgJiB+KChfcykgLSAxKSkKKworCisKKyNkZWZpbmUgYmZhX2RtYV9hZGRyX3NldChkbWFfYWRkciwgcGEpCVwKKwkJX19iZmFfZG1hX2FkZHJfc2V0KCZkbWFfYWRkciwgKHU2NClwYSkKKworc3RhdGljIGlubGluZSB2b2lkCitfX2JmYV9kbWFfYWRkcl9zZXQodW5pb24gYmZpX2FkZHJfdSAqZG1hX2FkZHIsIHU2NCBwYSkKK3sKKwlkbWFfYWRkci0+YTMyLmFkZHJfbG8gPSAodTMyKSBwYTsKKwlkbWFfYWRkci0+YTMyLmFkZHJfaGkgPSAodTMyKSAoYmZhX29zX3UzMihwYSkpOworfQorCisKKyNkZWZpbmUgYmZhX2RtYV9iZV9hZGRyX3NldChkbWFfYWRkciwgcGEpCVwKKwkJX19iZmFfZG1hX2JlX2FkZHJfc2V0KCZkbWFfYWRkciwgKHU2NClwYSkKK3N0YXRpYyBpbmxpbmUgdm9pZAorX19iZmFfZG1hX2JlX2FkZHJfc2V0KHVuaW9uIGJmaV9hZGRyX3UgKmRtYV9hZGRyLCB1NjQgcGEpCit7CisJZG1hX2FkZHItPmEzMi5hZGRyX2xvID0gKHUzMikgYmZhX29zX2h0b25sKHBhKTsKKwlkbWFfYWRkci0+YTMyLmFkZHJfaGkgPSAodTMyKSBiZmFfb3NfaHRvbmwoYmZhX29zX3UzMihwYSkpOworfQorCitzdHJ1Y3QgYmZhX2lvY19yZWdzX3MgeworCWJmYV9vc19hZGRyX3QgICBoZm5fbWJveF9jbWQ7CisJYmZhX29zX2FkZHJfdCAgIGhmbl9tYm94OworCWJmYV9vc19hZGRyX3QgICBscHVfbWJveF9jbWQ7CisJYmZhX29zX2FkZHJfdCAgIGxwdV9tYm94OworCWJmYV9vc19hZGRyX3QgICBwc3NfY3RsX3JlZzsKKwliZmFfb3NfYWRkcl90ICAgYXBwX3BsbF9mYXN0X2N0bF9yZWc7CisJYmZhX29zX2FkZHJfdCAgIGFwcF9wbGxfc2xvd19jdGxfcmVnOworCWJmYV9vc19hZGRyX3QgICBpb2Nfc2VtX3JlZzsKKwliZmFfb3NfYWRkcl90ICAgaW9jX3VzYWdlX3NlbV9yZWc7CisJYmZhX29zX2FkZHJfdCAgIGlvY191c2FnZV9yZWc7CisJYmZhX29zX2FkZHJfdCAgIGhvc3RfcGFnZV9udW1fZm47CisJYmZhX29zX2FkZHJfdCAgIGhlYXJ0YmVhdDsKKwliZmFfb3NfYWRkcl90ICAgaW9jX2Z3c3RhdGU7CisJYmZhX29zX2FkZHJfdCAgIGxsX2hhbHQ7CisJYmZhX29zX2FkZHJfdCAgIHNoaXJxX2lzcl9uZXh0OworCWJmYV9vc19hZGRyX3QgICBzaGlycV9tc2tfbmV4dDsKKwliZmFfb3NfYWRkcl90ICAgc21lbV9wYWdlX3N0YXJ0OworCXUzMglzbWVtX3BnMDsKK307CisKKyNkZWZpbmUgYmZhX3JlZ19yZWFkKF9yYWRkcikJYmZhX29zX3JlZ19yZWFkKF9yYWRkcikKKyNkZWZpbmUgYmZhX3JlZ193cml0ZShfcmFkZHIsIF92YWwpCWJmYV9vc19yZWdfd3JpdGUoX3JhZGRyLCBfdmFsKQorI2RlZmluZSBiZmFfbWVtX3JlYWQoX3JhZGRyLCBfb2ZmKQliZmFfb3NfbWVtX3JlYWQoX3JhZGRyLCBfb2ZmKQorI2RlZmluZSBiZmFfbWVtX3dyaXRlKF9yYWRkciwgX29mZiwgX3ZhbCkJXAorCQkJCQliZmFfb3NfbWVtX3dyaXRlKF9yYWRkciwgX29mZiwgX3ZhbCkKKy8qKgorICogSU9DIE1haWxib3ggc3RydWN0dXJlcworICovCitzdHJ1Y3QgYmZhX21ib3hfY21kX3MgeworCXN0cnVjdCBsaXN0X2hlYWQJCXFlOworCXUzMgltc2dbQkZJX0lPQ19NU0dTWl07Cit9OworCisvKioKKyAqIElPQyBtYWlsYm94IG1vZHVsZQorICovCit0eXBlZGVmIHZvaWQgKCpiZmFfaW9jX21ib3hfbWNmdW5jX3QpKHZvaWQgKmNiYXJnLCBzdHJ1Y3QgYmZpX21ibXNnX3MgKm0pOworc3RydWN0IGJmYV9pb2NfbWJveF9tb2RfcyB7CisJc3RydWN0IGxpc3RfaGVhZAljbWRfcTsJCS8qICBwZW5kaW5nIG1ib3ggcXVldWUJKi8KKwlpbnQJCW5tY2xhc3M7CS8qICBudW1iZXIgb2YgaGFuZGxlcnMgKi8KKwlzdHJ1Y3QgeworCQliZmFfaW9jX21ib3hfbWNmdW5jX3QJY2JmbjsJLyogIG1lc3NhZ2UgaGFuZGxlcnMJKi8KKwkJdm9pZAkJCSpjYmFyZzsKKwl9IG1iaGRscltCRklfTUNfTUFYXTsKK307CisKKy8qKgorICogSU9DIGNhbGxiYWNrIGZ1bmN0aW9uIGludGVyZmFjZXMKKyAqLwordHlwZWRlZiB2b2lkICgqYmZhX2lvY19lbmFibGVfY2Jmbl90KSh2b2lkICpiZmEsIGVudW0gYmZhX3N0YXR1cyBzdGF0dXMpOwordHlwZWRlZiB2b2lkICgqYmZhX2lvY19kaXNhYmxlX2NiZm5fdCkodm9pZCAqYmZhKTsKK3R5cGVkZWYgdm9pZCAoKmJmYV9pb2NfaGJmYWlsX2NiZm5fdCkodm9pZCAqYmZhKTsKK3R5cGVkZWYgdm9pZCAoKmJmYV9pb2NfcmVzZXRfY2Jmbl90KSh2b2lkICpiZmEpOworc3RydWN0IGJmYV9pb2NfY2Jmbl9zIHsKKwliZmFfaW9jX2VuYWJsZV9jYmZuX3QJZW5hYmxlX2NiZm47CisJYmZhX2lvY19kaXNhYmxlX2NiZm5fdAlkaXNhYmxlX2NiZm47CisJYmZhX2lvY19oYmZhaWxfY2Jmbl90CWhiZmFpbF9jYmZuOworCWJmYV9pb2NfcmVzZXRfY2Jmbl90CXJlc2V0X2NiZm47Cit9OworCisvKioKKyAqIEhlYXJ0YmVhdCBmYWlsdXJlIG5vdGlmaWNhdGlvbiBxdWV1ZSBlbGVtZW50LgorICovCitzdHJ1Y3QgYmZhX2lvY19oYmZhaWxfbm90aWZ5X3MgeworCXN0cnVjdCBsaXN0X2hlYWQJCXFlOworCWJmYV9pb2NfaGJmYWlsX2NiZm5fdAljYmZuOworCXZvaWQJCQkqY2Jhcmc7Cit9OworCisvKioKKyAqIEluaXRpYWxpemUgYSBoZWFydGJlYXQgZmFpbHVyZSBub3RpZmljYXRpb24gc3RydWN0dXJlCisgKi8KKyNkZWZpbmUgYmZhX2lvY19oYmZhaWxfaW5pdChfX25vdGlmeSwgX19jYmZuLCBfX2NiYXJnKSBkbyB7CVwKKwkoX19ub3RpZnkpLT5jYmZuID0gKF9fY2Jmbik7ICAgICAgXAorCShfX25vdGlmeSktPmNiYXJnID0gKF9fY2JhcmcpOyAgICAgIFwKK30gd2hpbGUgKDApCisKK3N0cnVjdCBiZmFfaW9jX3MgeworCWJmYV9mc21fdAkJZnNtOworCXN0cnVjdCBiZmFfcwkJKmJmYTsKKwlzdHJ1Y3QgYmZhX3BjaWRldl9zCXBjaWRldjsKKwlzdHJ1Y3QgYmZhX3RpbWVyX21vZF9zIAkqdGltZXJfbW9kOworCXN0cnVjdCBiZmFfdGltZXJfcyAJaW9jX3RpbWVyOworCXN0cnVjdCBiZmFfdGltZXJfcyAJc2VtX3RpbWVyOworCXUzMgkJaGJfY291bnQ7CisJdTMyCQloYl9mYWlsOworCXUzMgkJcmV0cnlfY291bnQ7CisJc3RydWN0IGxpc3RfaGVhZAkJaGJfbm90aWZ5X3E7CisJdm9pZAkJCSpkYmdfZndzYXZlOworCWludAkJCWRiZ19md3NhdmVfbGVuOworCWJmYV9ib29sZWFuX3QJCWRiZ19md3NhdmVfb25jZTsKKwllbnVtIGJmaV9tY2xhc3MJCWlvY19tYzsKKwlzdHJ1Y3QgYmZhX2lvY19yZWdzX3MgCWlvY19yZWdzOworCXN0cnVjdCBiZmFfdHJjX21vZF9zCSp0cmNtb2Q7CisJc3RydWN0IGJmYV9hZW5fcwkqYWVuOworCXN0cnVjdCBiZmFfbG9nX21vZF9zCSpsb2dtOworCXN0cnVjdCBiZmFfaW9jX2Rydl9zdGF0c19zCXN0YXRzOworCWJmYV9ib29sZWFuX3QJCWF1dG9fcmVjb3ZlcjsKKwliZmFfYm9vbGVhbl90CQlmY21vZGU7CisJYmZhX2Jvb2xlYW5fdAkJY3RkZXY7CisJYmZhX2Jvb2xlYW5fdAkJY25hOworCWJmYV9ib29sZWFuX3QJCXBsbGluaXQ7CisJdTgJCQlwb3J0X2lkOworCisJc3RydWN0IGJmYV9kbWFfcwlhdHRyX2RtYTsKKwlzdHJ1Y3QgYmZpX2lvY19hdHRyX3MJKmF0dHI7CisJc3RydWN0IGJmYV9pb2NfY2Jmbl9zCSpjYmZuOworCXN0cnVjdCBiZmFfaW9jX21ib3hfbW9kX3MgbWJveF9tb2Q7Cit9OworCisjZGVmaW5lIGJmYV9pb2NfcGNpZm4oX19pb2MpCQkoX19pb2MpLT5wY2lkZXYucGNpX2Z1bmMKKyNkZWZpbmUgYmZhX2lvY19kZXZpZChfX2lvYykJCShfX2lvYyktPnBjaWRldi5kZXZpY2VfaWQKKyNkZWZpbmUgYmZhX2lvY19iYXIwKF9faW9jKQkJKF9faW9jKS0+cGNpZGV2LnBjaV9iYXJfa3ZhCisjZGVmaW5lIGJmYV9pb2NfcG9ydGlkKF9faW9jKQkJKChfX2lvYyktPnBvcnRfaWQpCisjZGVmaW5lIGJmYV9pb2NfZmV0Y2hfc3RhdHMoX19pb2MsIF9fc3RhdHMpIFwKKwkJKChfX3N0YXRzKS0+ZHJ2X3N0YXRzKSA9IChfX2lvYyktPnN0YXRzCisjZGVmaW5lIGJmYV9pb2NfY2xyX3N0YXRzKF9faW9jKQlcCisJCWJmYV9vc19tZW1zZXQoJihfX2lvYyktPnN0YXRzLCAwLCBzaXplb2YoKF9faW9jKS0+c3RhdHMpKQorI2RlZmluZSBiZmFfaW9jX21heGZyc2l6ZShfX2lvYykJKF9faW9jKS0+YXR0ci0+bWF4ZnJzaXplCisjZGVmaW5lIGJmYV9pb2NfcnhfYmJjcmVkaXQoX19pb2MpCShfX2lvYyktPmF0dHItPnJ4X2JiY3JlZGl0CisjZGVmaW5lIGJmYV9pb2Nfc3BlZWRfc3VwKF9faW9jKQlcCisJQkZJX0FEQVBURVJfR0VUUChTUEVFRCwgKF9faW9jKS0+YXR0ci0+YWRhcHRlcl9wcm9wKQorCisvKioKKyAqIElPQyBtYWlsYm94IGludGVyZmFjZQorICovCit2b2lkIGJmYV9pb2NfbWJveF9xdWV1ZShzdHJ1Y3QgYmZhX2lvY19zICppb2MsIHN0cnVjdCBiZmFfbWJveF9jbWRfcyAqY21kKTsKK3ZvaWQgYmZhX2lvY19tYm94X3JlZ2lzdGVyKHN0cnVjdCBiZmFfaW9jX3MgKmlvYywKKwkJYmZhX2lvY19tYm94X21jZnVuY190ICptY2Z1bmNzKTsKK3ZvaWQgYmZhX2lvY19tYm94X2lzcihzdHJ1Y3QgYmZhX2lvY19zICppb2MpOwordm9pZCBiZmFfaW9jX21ib3hfc2VuZChzdHJ1Y3QgYmZhX2lvY19zICppb2MsIHZvaWQgKmlvY19tc2csIGludCBsZW4pOwordm9pZCBiZmFfaW9jX21zZ2dldChzdHJ1Y3QgYmZhX2lvY19zICppb2MsIHZvaWQgKm1ibXNnKTsKK3ZvaWQgYmZhX2lvY19tYm94X3JlZ2lzcihzdHJ1Y3QgYmZhX2lvY19zICppb2MsIGVudW0gYmZpX21jbGFzcyBtYywKKwkJYmZhX2lvY19tYm94X21jZnVuY190IGNiZm4sIHZvaWQgKmNiYXJnKTsKKworLyoqCisgKiBJT0MgaW50ZXJmYWNlcworICovCit2b2lkIGJmYV9pb2NfYXR0YWNoKHN0cnVjdCBiZmFfaW9jX3MgKmlvYywgdm9pZCAqYmZhLAorCQlzdHJ1Y3QgYmZhX2lvY19jYmZuX3MgKmNiZm4sIHN0cnVjdCBiZmFfdGltZXJfbW9kX3MgKnRpbWVyX21vZCwKKwkJc3RydWN0IGJmYV90cmNfbW9kX3MgKnRyY21vZCwKKwkJc3RydWN0IGJmYV9hZW5fcyAqYWVuLCBzdHJ1Y3QgYmZhX2xvZ19tb2RfcyAqbG9nbSk7Cit2b2lkIGJmYV9pb2NfZGV0YWNoKHN0cnVjdCBiZmFfaW9jX3MgKmlvYyk7Cit2b2lkIGJmYV9pb2NfcGNpX2luaXQoc3RydWN0IGJmYV9pb2NfcyAqaW9jLCBzdHJ1Y3QgYmZhX3BjaWRldl9zICpwY2lkZXYsCisJCWVudW0gYmZpX21jbGFzcyBtYyk7Cit1MzIgYmZhX2lvY19tZW1pbmZvKHZvaWQpOwordm9pZCBiZmFfaW9jX21lbV9jbGFpbShzdHJ1Y3QgYmZhX2lvY19zICppb2MsICB1OCAqZG1fa3ZhLCB1NjQgZG1fcGEpOwordm9pZCBiZmFfaW9jX2VuYWJsZShzdHJ1Y3QgYmZhX2lvY19zICppb2MpOwordm9pZCBiZmFfaW9jX2Rpc2FibGUoc3RydWN0IGJmYV9pb2NfcyAqaW9jKTsKK2JmYV9ib29sZWFuX3QgYmZhX2lvY19pbnR4X2NsYWltKHN0cnVjdCBiZmFfaW9jX3MgKmlvYyk7CisKK3ZvaWQgYmZhX2lvY19ib290KHN0cnVjdCBiZmFfaW9jX3MgKmlvYywgdTMyIGJvb3RfdHlwZSwgdTMyIGJvb3RfcGFyYW0pOwordm9pZCBiZmFfaW9jX2lzcihzdHJ1Y3QgYmZhX2lvY19zICppb2MsIHN0cnVjdCBiZmlfbWJtc2dfcyAqbXNnKTsKK3ZvaWQgYmZhX2lvY19lcnJvcl9pc3Ioc3RydWN0IGJmYV9pb2NfcyAqaW9jKTsKK3ZvaWQgYmZhX2lvY19pc3JfbW9kZV9zZXQoc3RydWN0IGJmYV9pb2NfcyAqaW9jLCBiZmFfYm9vbGVhbl90IGludHgpOworYmZhX3N0YXR1c190IGJmYV9pb2NfcGxsX2luaXQoc3RydWN0IGJmYV9pb2NfcyAqaW9jKTsKK2JmYV9ib29sZWFuX3QgYmZhX2lvY19pc19vcGVyYXRpb25hbChzdHJ1Y3QgYmZhX2lvY19zICppb2MpOworYmZhX2Jvb2xlYW5fdCBiZmFfaW9jX2lzX2Rpc2FibGVkKHN0cnVjdCBiZmFfaW9jX3MgKmlvYyk7CitiZmFfYm9vbGVhbl90IGJmYV9pb2NfZndfbWlzbWF0Y2goc3RydWN0IGJmYV9pb2NfcyAqaW9jKTsKK2JmYV9ib29sZWFuX3QgYmZhX2lvY19hZGFwdGVyX2lzX2Rpc2FibGVkKHN0cnVjdCBiZmFfaW9jX3MgKmlvYyk7Cit2b2lkIGJmYV9pb2NfY2ZnX2NvbXBsZXRlKHN0cnVjdCBiZmFfaW9jX3MgKmlvYyk7Cit2b2lkIGJmYV9pb2NfZ2V0X2F0dHIoc3RydWN0IGJmYV9pb2NfcyAqaW9jLCBzdHJ1Y3QgYmZhX2lvY19hdHRyX3MgKmlvY19hdHRyKTsKK3ZvaWQgYmZhX2lvY19nZXRfYWRhcHRlcl9hdHRyKHN0cnVjdCBiZmFfaW9jX3MgKmlvYywKKwkJc3RydWN0IGJmYV9hZGFwdGVyX2F0dHJfcyAqYWRfYXR0cik7CitpbnQgYmZhX2lvY19kZWJ1Z190cmNzeihiZmFfYm9vbGVhbl90IGF1dG9fcmVjb3Zlcik7Cit2b2lkIGJmYV9pb2NfZGVidWdfbWVtY2xhaW0oc3RydWN0IGJmYV9pb2NfcyAqaW9jLCB2b2lkICpkYmdfZndzYXZlKTsKK2JmYV9zdGF0dXNfdCBiZmFfaW9jX2RlYnVnX2Z3c2F2ZShzdHJ1Y3QgYmZhX2lvY19zICppb2MsIHZvaWQgKnRyY2RhdGEsCisJCWludCAqdHJjbGVuKTsKK2JmYV9zdGF0dXNfdCBiZmFfaW9jX2RlYnVnX2Z3dHJjKHN0cnVjdCBiZmFfaW9jX3MgKmlvYywgdm9pZCAqdHJjZGF0YSwKKwkJCQkgaW50ICp0cmNsZW4pOwordTMyIGJmYV9pb2Nfc21lbV9wZ251bShzdHJ1Y3QgYmZhX2lvY19zICppb2MsIHUzMiBmbWFkZHIpOwordTMyIGJmYV9pb2Nfc21lbV9wZ29mZihzdHJ1Y3QgYmZhX2lvY19zICppb2MsIHUzMiBmbWFkZHIpOwordm9pZCBiZmFfaW9jX3NldF9mY21vZGUoc3RydWN0IGJmYV9pb2NfcyAqaW9jKTsKK2JmYV9ib29sZWFuX3QgYmZhX2lvY19nZXRfZmNtb2RlKHN0cnVjdCBiZmFfaW9jX3MgKmlvYyk7Cit2b2lkIGJmYV9pb2NfaGJmYWlsX3JlZ2lzdGVyKHN0cnVjdCBiZmFfaW9jX3MgKmlvYywKKwlzdHJ1Y3QgYmZhX2lvY19oYmZhaWxfbm90aWZ5X3MgKm5vdGlmeSk7CisKKy8qCisgKiBiZmEgbWZnIHd3biBBUEkgZnVuY3Rpb25zCisgKi8KK3d3bl90IGJmYV9pb2NfZ2V0X3B3d24oc3RydWN0IGJmYV9pb2NfcyAqaW9jKTsKK3d3bl90IGJmYV9pb2NfZ2V0X253d24oc3RydWN0IGJmYV9pb2NfcyAqaW9jKTsKK3d3bl90IGJmYV9pb2NfZ2V0X3d3bl9uYWE1KHN0cnVjdCBiZmFfaW9jX3MgKmlvYywgdTE2IGluc3QpOworbWFjX3QgYmZhX2lvY19nZXRfbWFjKHN0cnVjdCBiZmFfaW9jX3MgKmlvYyk7Cit1NjQgYmZhX2lvY19nZXRfYWRpZChzdHJ1Y3QgYmZhX2lvY19zICppb2MpOworCisjZW5kaWYgLyogX19CRkFfSU9DX0hfXyAqLworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2JmYV9pb2NmYy5jIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfaW9jZmMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjM1MGIwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfaW9jZmMuYwpAQCAtMCwwICsxLDg3MiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8Y3MvYmZhX2RlYnVnLmg+CisjaW5jbHVkZSA8YmZhX3ByaXYuaD4KKyNpbmNsdWRlIDxsb2cvYmZhX2xvZ19oYWwuaD4KKyNpbmNsdWRlIDxiZmkvYmZpX2Jvb3QuaD4KKyNpbmNsdWRlIDxiZmkvYmZpX2NicmVnLmg+CisjaW5jbHVkZSA8YWVuL2JmYV9hZW5faW9jLmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc19pb2NmYy5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfcGNpLmg+CisjaW5jbHVkZSAiYmZhX2NhbGxiYWNrX3ByaXYuaCIKKyNpbmNsdWRlICJiZmFkX2Rydi5oIgorCitCRkFfVFJDX0ZJTEUoSEFMLCBJT0NGQyk7CisKKy8qKgorICogSU9DIGxvY2FsIGRlZmluaXRpb25zCisgKi8KKyNkZWZpbmUgQkZBX0lPQ0ZDX1RPVgkJNTAwMAkvKiBtc2VjcyAqLworCitlbnVtIHsKKwlCRkFfSU9DRkNfQUNUX05PTkUJPSAwLAorCUJGQV9JT0NGQ19BQ1RfSU5JVAk9IDEsCisJQkZBX0lPQ0ZDX0FDVF9TVE9QCT0gMiwKKwlCRkFfSU9DRkNfQUNUX0RJU0FCTEUJPSAzLAorfTsKKworLyoKKyAqIGZvcndhcmQgZGVjbGFyYXRpb25zCisgKi8KK3N0YXRpYyB2b2lkIGJmYV9pb2NmY19lbmFibGVfY2Jmbih2b2lkICpiZmFfYXJnLCBlbnVtIGJmYV9zdGF0dXMgc3RhdHVzKTsKK3N0YXRpYyB2b2lkIGJmYV9pb2NmY19kaXNhYmxlX2NiZm4odm9pZCAqYmZhX2FyZyk7CitzdGF0aWMgdm9pZCBiZmFfaW9jZmNfaGJmYWlsX2NiZm4odm9pZCAqYmZhX2FyZyk7CitzdGF0aWMgdm9pZCBiZmFfaW9jZmNfcmVzZXRfY2Jmbih2b2lkICpiZmFfYXJnKTsKK3N0YXRpYyB2b2lkIGJmYV9pb2NmY19zdGF0c19jbGVhcih2b2lkICpiZmFfYXJnKTsKK3N0YXRpYyB2b2lkIGJmYV9pb2NmY19zdGF0c19zd2FwKHN0cnVjdCBiZmFfZndfc3RhdHNfcyAqZCwKKwkJCXN0cnVjdCBiZmFfZndfc3RhdHNfcyAqcyk7CitzdGF0aWMgdm9pZCBiZmFfaW9jZmNfc3RhdHNfY2xyX2NiKHZvaWQgKmJmYV9hcmcsIGJmYV9ib29sZWFuX3QgY29tcGxldGUpOworc3RhdGljIHZvaWQgYmZhX2lvY2ZjX3N0YXRzX2Nscl90aW1lb3V0KHZvaWQgKmJmYV9hcmcpOworc3RhdGljIHZvaWQgYmZhX2lvY2ZjX3N0YXRzX2NiKHZvaWQgKmJmYV9hcmcsIGJmYV9ib29sZWFuX3QgY29tcGxldGUpOworc3RhdGljIHZvaWQgYmZhX2lvY2ZjX3N0YXRzX3RpbWVvdXQodm9pZCAqYmZhX2FyZyk7CisKK3N0YXRpYyBzdHJ1Y3QgYmZhX2lvY19jYmZuX3MgYmZhX2lvY2ZjX2NiZm47CisKKy8qKgorICogIGJmYV9pb2NfcHZ0IEJGQSBJT0MgcHJpdmF0ZSBmdW5jdGlvbnMKKyAqLworCitzdGF0aWMgdm9pZAorYmZhX2lvY2ZjX2Nxc19zeihzdHJ1Y3QgYmZhX2lvY2ZjX2NmZ19zICpjZmcsIHUzMiAqZG1fbGVuKQoreworCWludCAgICAgICAgICAgICBpLCBwZXJfcmVxcV9zeiwgcGVyX3JzcHFfc3o7CisKKwlwZXJfcmVxcV9zeiA9IEJGQV9ST1VORFVQKChjZmctPmRydmNmZy5udW1fcmVxcV9lbGVtcyAqIEJGSV9MTVNHX1NaKSwKKwkJCQkJCQlCRkFfRE1BX0FMSUdOX1NaKTsKKwlwZXJfcnNwcV9zeiA9IEJGQV9ST1VORFVQKChjZmctPmRydmNmZy5udW1fcnNwcV9lbGVtcyAqIEJGSV9MTVNHX1NaKSwKKwkJCQkJCQlCRkFfRE1BX0FMSUdOX1NaKTsKKworCS8qCisJICogQ2FsY3VsYXRlIENRIHNpemUKKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgY2ZnLT5md2NmZy5udW1fY3FzOyBpKyspIHsKKwkJKmRtX2xlbiA9ICpkbV9sZW4gKyBwZXJfcmVxcV9zejsKKwkJKmRtX2xlbiA9ICpkbV9sZW4gKyBwZXJfcnNwcV9zejsKKwl9CisKKwkvKgorCSAqIENhbGN1bGF0ZSBTaGFkb3cgQ0kvUEkgc2l6ZQorCSAqLworCWZvciAoaSA9IDA7IGkgPCBjZmctPmZ3Y2ZnLm51bV9jcXM7IGkrKykKKwkJKmRtX2xlbiArPSAoMiAqIEJGQV9DQUNIRUxJTkVfU1opOworfQorCitzdGF0aWMgdm9pZAorYmZhX2lvY2ZjX2Z3X2NmZ19zeihzdHJ1Y3QgYmZhX2lvY2ZjX2NmZ19zICpjZmcsIHUzMiAqZG1fbGVuKQoreworCSpkbV9sZW4gKz0KKwkJQkZBX1JPVU5EVVAoc2l6ZW9mKHN0cnVjdCBiZmlfaW9jZmNfY2ZnX3MpLCBCRkFfQ0FDSEVMSU5FX1NaKTsKKwkqZG1fbGVuICs9CisJCUJGQV9ST1VORFVQKHNpemVvZihzdHJ1Y3QgYmZpX2lvY2ZjX2NmZ3JzcF9zKSwKKwkJCSAgICBCRkFfQ0FDSEVMSU5FX1NaKTsKKwkqZG1fbGVuICs9IEJGQV9ST1VORFVQKHNpemVvZihzdHJ1Y3QgYmZhX2Z3X3N0YXRzX3MpLCBCRkFfQ0FDSEVMSU5FX1NaKTsKK30KKworLyoqCisgKiBVc2UgdGhlIE1haWxib3ggaW50ZXJmYWNlIHRvIHNlbmQgQkZJX0lPQ0ZDX0gySV9DRkdfUkVRCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaW9jZmNfc2VuZF9jZmcodm9pZCAqYmZhX2FyZykKK3sKKwlzdHJ1Y3QgYmZhX3MgKmJmYSA9IGJmYV9hcmc7CisJc3RydWN0IGJmYV9pb2NmY19zICppb2NmYyA9ICZiZmEtPmlvY2ZjOworCXN0cnVjdCBiZmlfaW9jZmNfY2ZnX3JlcV9zIGNmZ19yZXE7CisJc3RydWN0IGJmaV9pb2NmY19jZmdfcyAqY2ZnX2luZm8gPSBpb2NmYy0+Y2ZnaW5mbzsKKwlzdHJ1Y3QgYmZhX2lvY2ZjX2NmZ19zICAqY2ZnID0gJmlvY2ZjLT5jZmc7CisJaW50ICAgICAgICAgICAgIGk7CisKKwliZmFfYXNzZXJ0KGNmZy0+ZndjZmcubnVtX2NxcyA8PSBCRklfSU9DX01BWF9DUVMpOworCWJmYV90cmMoYmZhLCBjZmctPmZ3Y2ZnLm51bV9jcXMpOworCisJaW9jZmMtPmNmZ2RvbmUgPSBCRkFfRkFMU0U7CisJYmZhX2lvY2ZjX3Jlc2V0X3F1ZXVlcyhiZmEpOworCisJLyoqCisJICogaW5pdGlhbGl6ZSBJT0MgY29uZmlndXJhdGlvbiBpbmZvCisJICovCisJY2ZnX2luZm8tPmVuZGlhbl9zaWcgPSBCRklfSU9DX0VORElBTl9TSUc7CisJY2ZnX2luZm8tPm51bV9jcXMgPSBjZmctPmZ3Y2ZnLm51bV9jcXM7CisKKwliZmFfZG1hX2JlX2FkZHJfc2V0KGNmZ19pbmZvLT5jZmdyc3BfYWRkciwgaW9jZmMtPmNmZ3JzcF9kbWEucGEpOworCWJmYV9kbWFfYmVfYWRkcl9zZXQoY2ZnX2luZm8tPnN0YXRzX2FkZHIsIGlvY2ZjLT5zdGF0c19wYSk7CisKKwkvKioKKwkgKiBkbWEgbWFwIFJFUSBhbmQgUlNQIGNpcmN1bGFyIHF1ZXVlcyBhbmQgc2hhZG93IHBvaW50ZXJzCisJICovCisJZm9yIChpID0gMDsgaSA8IGNmZy0+ZndjZmcubnVtX2NxczsgaSsrKSB7CisJCWJmYV9kbWFfYmVfYWRkcl9zZXQoY2ZnX2luZm8tPnJlcV9jcV9iYVtpXSwKKwkJCQkgICAgICAgaW9jZmMtPnJlcV9jcV9iYVtpXS5wYSk7CisJCWJmYV9kbWFfYmVfYWRkcl9zZXQoY2ZnX2luZm8tPnJlcV9zaGFkb3dfY2lbaV0sCisJCQkJICAgICAgIGlvY2ZjLT5yZXFfY3Ffc2hhZG93X2NpW2ldLnBhKTsKKwkJY2ZnX2luZm8tPnJlcV9jcV9lbGVtc1tpXSA9CisJCQliZmFfb3NfaHRvbnMoY2ZnLT5kcnZjZmcubnVtX3JlcXFfZWxlbXMpOworCisJCWJmYV9kbWFfYmVfYWRkcl9zZXQoY2ZnX2luZm8tPnJzcF9jcV9iYVtpXSwKKwkJCQkgICAgICAgaW9jZmMtPnJzcF9jcV9iYVtpXS5wYSk7CisJCWJmYV9kbWFfYmVfYWRkcl9zZXQoY2ZnX2luZm8tPnJzcF9zaGFkb3dfcGlbaV0sCisJCQkJICAgICAgIGlvY2ZjLT5yc3BfY3Ffc2hhZG93X3BpW2ldLnBhKTsKKwkJY2ZnX2luZm8tPnJzcF9jcV9lbGVtc1tpXSA9CisJCQliZmFfb3NfaHRvbnMoY2ZnLT5kcnZjZmcubnVtX3JzcHFfZWxlbXMpOworCX0KKworCS8qKgorCSAqIGRtYSBtYXAgSU9DIGNvbmZpZ3VyYXRpb24gaXRzZWxmCisJICovCisJYmZpX2gyaV9zZXQoY2ZnX3JlcS5taCwgQkZJX01DX0lPQ0ZDLCBCRklfSU9DRkNfSDJJX0NGR19SRVEsCisJCQliZmFfbHB1aWQoYmZhKSk7CisJYmZhX2RtYV9iZV9hZGRyX3NldChjZmdfcmVxLmlvY19jZmdfZG1hX2FkZHIsIGlvY2ZjLT5jZmdfaW5mby5wYSk7CisKKwliZmFfaW9jX21ib3hfc2VuZCgmYmZhLT5pb2MsICZjZmdfcmVxLAorCQkJc2l6ZW9mKHN0cnVjdCBiZmlfaW9jZmNfY2ZnX3JlcV9zKSk7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfaW9jZmNfaW5pdF9tZW0oc3RydWN0IGJmYV9zICpiZmEsIHZvaWQgKmJmYWQsIHN0cnVjdCBiZmFfaW9jZmNfY2ZnX3MgKmNmZywKKwkJICAgIHN0cnVjdCBiZmFfcGNpZGV2X3MgKnBjaWRldikKK3sKKwlzdHJ1Y3QgYmZhX2lvY2ZjX3MJKmlvY2ZjID0gJmJmYS0+aW9jZmM7CisKKwliZmEtPmJmYWQgPSBiZmFkOworCWlvY2ZjLT5iZmEgPSBiZmE7CisJaW9jZmMtPmFjdGlvbiA9IEJGQV9JT0NGQ19BQ1RfTk9ORTsKKworCWJmYV9vc19hc3NpZ24oaW9jZmMtPmNmZywgKmNmZyk7CisKKwkvKioKKwkgKiBJbml0aWFsaXplIGNoaXAgc3BlY2lmaWMgaGFuZGxlcnMuCisJICovCisJaWYgKGJmYV9pb2NfZGV2aWQoJmJmYS0+aW9jKSA9PSBCRkFfUENJX0RFVklDRV9JRF9DVCkgeworCQlpb2NmYy0+aHdpZi5od19yZWdpbml0ID0gYmZhX2h3Y3RfcmVnaW5pdDsKKwkJaW9jZmMtPmh3aWYuaHdfcnNwcV9hY2sgPSBiZmFfaHdjdF9yc3BxX2FjazsKKwkJaW9jZmMtPmh3aWYuaHdfbXNpeF9pbml0ID0gYmZhX2h3Y3RfbXNpeF9pbml0OworCQlpb2NmYy0+aHdpZi5od19tc2l4X2luc3RhbGwgPSBiZmFfaHdjdF9tc2l4X2luc3RhbGw7CisJCWlvY2ZjLT5od2lmLmh3X21zaXhfdW5pbnN0YWxsID0gYmZhX2h3Y3RfbXNpeF91bmluc3RhbGw7CisJCWlvY2ZjLT5od2lmLmh3X2lzcl9tb2RlX3NldCA9IGJmYV9od2N0X2lzcl9tb2RlX3NldDsKKwkJaW9jZmMtPmh3aWYuaHdfbXNpeF9nZXR2ZWNzID0gYmZhX2h3Y3RfbXNpeF9nZXR2ZWNzOworCX0gZWxzZSB7CisJCWlvY2ZjLT5od2lmLmh3X3JlZ2luaXQgPSBiZmFfaHdjYl9yZWdpbml0OworCQlpb2NmYy0+aHdpZi5od19yc3BxX2FjayA9IGJmYV9od2NiX3JzcHFfYWNrOworCQlpb2NmYy0+aHdpZi5od19tc2l4X2luaXQgPSBiZmFfaHdjYl9tc2l4X2luaXQ7CisJCWlvY2ZjLT5od2lmLmh3X21zaXhfaW5zdGFsbCA9IGJmYV9od2NiX21zaXhfaW5zdGFsbDsKKwkJaW9jZmMtPmh3aWYuaHdfbXNpeF91bmluc3RhbGwgPSBiZmFfaHdjYl9tc2l4X3VuaW5zdGFsbDsKKwkJaW9jZmMtPmh3aWYuaHdfaXNyX21vZGVfc2V0ID0gYmZhX2h3Y2JfaXNyX21vZGVfc2V0OworCQlpb2NmYy0+aHdpZi5od19tc2l4X2dldHZlY3MgPSBiZmFfaHdjYl9tc2l4X2dldHZlY3M7CisJfQorCisJaW9jZmMtPmh3aWYuaHdfcmVnaW5pdChiZmEpOworCWJmYS0+bXNpeC5udmVjcyA9IDA7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfaW9jZmNfbWVtX2NsYWltKHN0cnVjdCBiZmFfcyAqYmZhLCBzdHJ1Y3QgYmZhX2lvY2ZjX2NmZ19zICpjZmcsCisJCSAgICAgIHN0cnVjdCBiZmFfbWVtaW5mb19zICptZW1pbmZvKQoreworCXU4ICAgICAgICAqZG1fa3ZhOworCXU2NCAgICAgICAgZG1fcGE7CisJaW50ICAgICAgICAgICAgIGksIHBlcl9yZXFxX3N6LCBwZXJfcnNwcV9zejsKKwlzdHJ1Y3QgYmZhX2lvY2ZjX3MgICppb2NmYyA9ICZiZmEtPmlvY2ZjOworCWludAkJZGJnc3o7CisKKwlkbV9rdmEgPSBiZmFfbWVtaW5mb19kbWFfdmlydChtZW1pbmZvKTsKKwlkbV9wYSA9IGJmYV9tZW1pbmZvX2RtYV9waHlzKG1lbWluZm8pOworCisJLyoKKwkgKiBGaXJzdCBhbGxvY2F0ZSBkbWEgbWVtb3J5IGZvciBJT0MuCisJICovCisJYmZhX2lvY19tZW1fY2xhaW0oJmJmYS0+aW9jLCBkbV9rdmEsIGRtX3BhKTsKKwlkbV9rdmEgKz0gYmZhX2lvY19tZW1pbmZvKCk7CisJZG1fcGEgICs9IGJmYV9pb2NfbWVtaW5mbygpOworCisJLyoKKwkgKiBDbGFpbSBETUEtYWJsZSBtZW1vcnkgZm9yIHRoZSByZXF1ZXN0L3Jlc3BvbnNlIHF1ZXVlcyBhbmQgZm9yIHNoYWRvdworCSAqIGNpL3BpIHJlZ2lzdGVycworCSAqLworCXBlcl9yZXFxX3N6ID0gQkZBX1JPVU5EVVAoKGNmZy0+ZHJ2Y2ZnLm51bV9yZXFxX2VsZW1zICogQkZJX0xNU0dfU1opLAorCQkJCQkJCUJGQV9ETUFfQUxJR05fU1opOworCXBlcl9yc3BxX3N6ID0gQkZBX1JPVU5EVVAoKGNmZy0+ZHJ2Y2ZnLm51bV9yc3BxX2VsZW1zICogQkZJX0xNU0dfU1opLAorCQkJCQkJCUJGQV9ETUFfQUxJR05fU1opOworCisJZm9yIChpID0gMDsgaSA8IGNmZy0+ZndjZmcubnVtX2NxczsgaSsrKSB7CisJCWlvY2ZjLT5yZXFfY3FfYmFbaV0ua3ZhID0gZG1fa3ZhOworCQlpb2NmYy0+cmVxX2NxX2JhW2ldLnBhID0gZG1fcGE7CisJCWJmYV9vc19tZW1zZXQoZG1fa3ZhLCAwLCBwZXJfcmVxcV9zeik7CisJCWRtX2t2YSArPSBwZXJfcmVxcV9zejsKKwkJZG1fcGEgKz0gcGVyX3JlcXFfc3o7CisKKwkJaW9jZmMtPnJzcF9jcV9iYVtpXS5rdmEgPSBkbV9rdmE7CisJCWlvY2ZjLT5yc3BfY3FfYmFbaV0ucGEgPSBkbV9wYTsKKwkJYmZhX29zX21lbXNldChkbV9rdmEsIDAsIHBlcl9yc3BxX3N6KTsKKwkJZG1fa3ZhICs9IHBlcl9yc3BxX3N6OworCQlkbV9wYSArPSBwZXJfcnNwcV9zejsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgY2ZnLT5md2NmZy5udW1fY3FzOyBpKyspIHsKKwkJaW9jZmMtPnJlcV9jcV9zaGFkb3dfY2lbaV0ua3ZhID0gZG1fa3ZhOworCQlpb2NmYy0+cmVxX2NxX3NoYWRvd19jaVtpXS5wYSA9IGRtX3BhOworCQlkbV9rdmEgKz0gQkZBX0NBQ0hFTElORV9TWjsKKwkJZG1fcGEgKz0gQkZBX0NBQ0hFTElORV9TWjsKKworCQlpb2NmYy0+cnNwX2NxX3NoYWRvd19waVtpXS5rdmEgPSBkbV9rdmE7CisJCWlvY2ZjLT5yc3BfY3Ffc2hhZG93X3BpW2ldLnBhID0gZG1fcGE7CisJCWRtX2t2YSArPSBCRkFfQ0FDSEVMSU5FX1NaOworCQlkbV9wYSArPSBCRkFfQ0FDSEVMSU5FX1NaOworCX0KKworCS8qCisJICogQ2xhaW0gRE1BLWFibGUgbWVtb3J5IGZvciB0aGUgY29uZmlnIGluZm8gcGFnZQorCSAqLworCWJmYS0+aW9jZmMuY2ZnX2luZm8ua3ZhID0gZG1fa3ZhOworCWJmYS0+aW9jZmMuY2ZnX2luZm8ucGEgPSBkbV9wYTsKKwliZmEtPmlvY2ZjLmNmZ2luZm8gPSAoc3RydWN0IGJmaV9pb2NmY19jZmdfcyAqKSBkbV9rdmE7CisJZG1fa3ZhICs9IEJGQV9ST1VORFVQKHNpemVvZihzdHJ1Y3QgYmZpX2lvY2ZjX2NmZ19zKSwgQkZBX0NBQ0hFTElORV9TWik7CisJZG1fcGEgKz0gQkZBX1JPVU5EVVAoc2l6ZW9mKHN0cnVjdCBiZmlfaW9jZmNfY2ZnX3MpLCBCRkFfQ0FDSEVMSU5FX1NaKTsKKworCS8qCisJICogQ2xhaW0gRE1BLWFibGUgbWVtb3J5IGZvciB0aGUgY29uZmlnIHJlc3BvbnNlCisJICovCisJYmZhLT5pb2NmYy5jZmdyc3BfZG1hLmt2YSA9IGRtX2t2YTsKKwliZmEtPmlvY2ZjLmNmZ3JzcF9kbWEucGEgPSBkbV9wYTsKKwliZmEtPmlvY2ZjLmNmZ3JzcCA9IChzdHJ1Y3QgYmZpX2lvY2ZjX2NmZ3JzcF9zICopIGRtX2t2YTsKKworCWRtX2t2YSArPQorCQlCRkFfUk9VTkRVUChzaXplb2Yoc3RydWN0IGJmaV9pb2NmY19jZmdyc3BfcyksCisJCQkgICAgQkZBX0NBQ0hFTElORV9TWik7CisJZG1fcGEgKz0gQkZBX1JPVU5EVVAoc2l6ZW9mKHN0cnVjdCBiZmlfaW9jZmNfY2ZncnNwX3MpLAorCQkJICAgICBCRkFfQ0FDSEVMSU5FX1NaKTsKKworCS8qCisJICogQ2xhaW0gRE1BLWFibGUgbWVtb3J5IGZvciBpb2NmYyBzdGF0cworCSAqLworCWJmYS0+aW9jZmMuc3RhdHNfa3ZhID0gZG1fa3ZhOworCWJmYS0+aW9jZmMuc3RhdHNfcGEgPSBkbV9wYTsKKwliZmEtPmlvY2ZjLmZ3X3N0YXRzID0gKHN0cnVjdCBiZmFfZndfc3RhdHNfcyAqKSBkbV9rdmE7CisJZG1fa3ZhICs9IEJGQV9ST1VORFVQKHNpemVvZihzdHJ1Y3QgYmZhX2Z3X3N0YXRzX3MpLCBCRkFfQ0FDSEVMSU5FX1NaKTsKKwlkbV9wYSArPSBCRkFfUk9VTkRVUChzaXplb2Yoc3RydWN0IGJmYV9md19zdGF0c19zKSwgQkZBX0NBQ0hFTElORV9TWik7CisKKwliZmFfbWVtaW5mb19kbWFfdmlydChtZW1pbmZvKSA9IGRtX2t2YTsKKwliZmFfbWVtaW5mb19kbWFfcGh5cyhtZW1pbmZvKSA9IGRtX3BhOworCisJZGJnc3ogPSBiZmFfaW9jX2RlYnVnX3RyY3N6KGJmYV9hdXRvX3JlY292ZXIpOworCWlmIChkYmdzeiA+IDApIHsKKwkJYmZhX2lvY19kZWJ1Z19tZW1jbGFpbSgmYmZhLT5pb2MsIGJmYV9tZW1pbmZvX2t2YShtZW1pbmZvKSk7CisJCWJmYV9tZW1pbmZvX2t2YShtZW1pbmZvKSArPSBkYmdzejsKKwl9Cit9CisKKy8qKgorICogQkZBIHN1Ym1vZHVsZXMgaW5pdGlhbGl6YXRpb24gY29tcGxldGlvbiBub3RpZmljYXRpb24uCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaW9jZmNfaW5pdGRvbmVfc3VibW9kKHN0cnVjdCBiZmFfcyAqYmZhKQoreworCWludCAgICAgICAgICAgICBpOworCisJZm9yIChpID0gMDsgaGFsX21vZHNbaV07IGkrKykKKwkJaGFsX21vZHNbaV0tPmluaXRkb25lKGJmYSk7Cit9CisKKy8qKgorICogU3RhcnQgQkZBIHN1Ym1vZHVsZXMuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaW9jZmNfc3RhcnRfc3VibW9kKHN0cnVjdCBiZmFfcyAqYmZhKQoreworCWludCAgICAgICAgICAgICBpOworCisJYmZhLT5ybWVfcHJvY2VzcyA9IEJGQV9UUlVFOworCisJZm9yIChpID0gMDsgaGFsX21vZHNbaV07IGkrKykKKwkJaGFsX21vZHNbaV0tPnN0YXJ0KGJmYSk7Cit9CisKKy8qKgorICogRGlzYWJsZSBCRkEgc3VibW9kdWxlcy4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9pb2NmY19kaXNhYmxlX3N1Ym1vZChzdHJ1Y3QgYmZhX3MgKmJmYSkKK3sKKwlpbnQgICAgICAgICAgICAgaTsKKworCWZvciAoaSA9IDA7IGhhbF9tb2RzW2ldOyBpKyspCisJCWhhbF9tb2RzW2ldLT5pb2NkaXNhYmxlKGJmYSk7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfaW9jZmNfaW5pdF9jYih2b2lkICpiZmFfYXJnLCBiZmFfYm9vbGVhbl90IGNvbXBsZXRlKQoreworCXN0cnVjdCBiZmFfcwkqYmZhID0gYmZhX2FyZzsKKworCWlmIChjb21wbGV0ZSkgeworCQlpZiAoYmZhLT5pb2NmYy5jZmdkb25lKQorCQkJYmZhX2NiX2luaXQoYmZhLT5iZmFkLCBCRkFfU1RBVFVTX09LKTsKKwkJZWxzZQorCQkJYmZhX2NiX2luaXQoYmZhLT5iZmFkLCBCRkFfU1RBVFVTX0ZBSUxFRCk7CisJfSBlbHNlCisJCWJmYS0+aW9jZmMuYWN0aW9uID0gQkZBX0lPQ0ZDX0FDVF9OT05FOworfQorCitzdGF0aWMgdm9pZAorYmZhX2lvY2ZjX3N0b3BfY2Iodm9pZCAqYmZhX2FyZywgYmZhX2Jvb2xlYW5fdCBjb21wbCkKK3sKKwlzdHJ1Y3QgYmZhX3MgICpiZmEgPSBiZmFfYXJnOworCXN0cnVjdCBiZmFkX3MgKmJmYWQgPSBiZmEtPmJmYWQ7CisKKwlpZiAoY29tcGwpCisJCWNvbXBsZXRlKCZiZmFkLT5jb21wKTsKKworCWVsc2UKKwkJYmZhLT5pb2NmYy5hY3Rpb24gPSBCRkFfSU9DRkNfQUNUX05PTkU7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfaW9jZmNfZGlzYWJsZV9jYih2b2lkICpiZmFfYXJnLCBiZmFfYm9vbGVhbl90IGNvbXBsKQoreworCXN0cnVjdCBiZmFfcyAgKmJmYSA9IGJmYV9hcmc7CisJc3RydWN0IGJmYWRfcyAqYmZhZCA9IGJmYS0+YmZhZDsKKworCWlmIChjb21wbCkKKwkJY29tcGxldGUoJmJmYWQtPmRpc2FibGVfY29tcCk7Cit9CisKKy8qKgorICogVXBkYXRlIEJGQSBjb25maWd1cmF0aW9uIGZyb20gZmlybXdhcmUgY29uZmlndXJhdGlvbi4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9pb2NmY19jZmdyc3Aoc3RydWN0IGJmYV9zICpiZmEpCit7CisJc3RydWN0IGJmYV9pb2NmY19zCQkqaW9jZmMJID0gJmJmYS0+aW9jZmM7CisJc3RydWN0IGJmaV9pb2NmY19jZmdyc3BfcwkqY2ZncnNwICA9IGlvY2ZjLT5jZmdyc3A7CisJc3RydWN0IGJmYV9pb2NmY19md2NmZ19zCSpmd2NmZyAgID0gJmNmZ3JzcC0+ZndjZmc7CisJc3RydWN0IGJmaV9pb2NmY19jZmdfcyAJCSpjZmdpbmZvID0gaW9jZmMtPmNmZ2luZm87CisKKwlmd2NmZy0+bnVtX2NxcyAgICAgICAgPSBmd2NmZy0+bnVtX2NxczsKKwlmd2NmZy0+bnVtX2lvaW1fcmVxcyAgPSBiZmFfb3NfbnRvaHMoZndjZmctPm51bV9pb2ltX3JlcXMpOworCWZ3Y2ZnLT5udW1fdHNraW1fcmVxcyA9IGJmYV9vc19udG9ocyhmd2NmZy0+bnVtX3Rza2ltX3JlcXMpOworCWZ3Y2ZnLT5udW1fZmN4cF9yZXFzICA9IGJmYV9vc19udG9ocyhmd2NmZy0+bnVtX2ZjeHBfcmVxcyk7CisJZndjZmctPm51bV91Zl9idWZzICAgID0gYmZhX29zX250b2hzKGZ3Y2ZnLT5udW1fdWZfYnVmcyk7CisJZndjZmctPm51bV9ycG9ydHMgICAgID0gYmZhX29zX250b2hzKGZ3Y2ZnLT5udW1fcnBvcnRzKTsKKworCWNmZ2luZm8tPmludHJfYXR0ci5jb2FsZXNjZSA9IGNmZ3JzcC0+aW50cl9hdHRyLmNvYWxlc2NlOworCWNmZ2luZm8tPmludHJfYXR0ci5kZWxheSAgICA9IGJmYV9vc19udG9ocyhjZmdyc3AtPmludHJfYXR0ci5kZWxheSk7CisJY2ZnaW5mby0+aW50cl9hdHRyLmxhdGVuY3kgID0gYmZhX29zX250b2hzKGNmZ3JzcC0+aW50cl9hdHRyLmxhdGVuY3kpOworCisJaW9jZmMtPmNmZ2RvbmUgPSBCRkFfVFJVRTsKKworCS8qKgorCSAqIENvbmZpZ3VyYXRpb24gaXMgY29tcGxldGUgLSBpbml0aWFsaXplL3N0YXJ0IHN1Ym1vZHVsZXMKKwkgKi8KKwlpZiAoaW9jZmMtPmFjdGlvbiA9PSBCRkFfSU9DRkNfQUNUX0lOSVQpCisJCWJmYV9jYl9xdWV1ZShiZmEsICZpb2NmYy0+aW5pdF9oY2JfcWUsIGJmYV9pb2NmY19pbml0X2NiLCBiZmEpOworCWVsc2UKKwkJYmZhX2lvY2ZjX3N0YXJ0X3N1Ym1vZChiZmEpOworfQorCitzdGF0aWMgdm9pZAorYmZhX2lvY2ZjX3N0YXRzX2NsZWFyKHZvaWQgKmJmYV9hcmcpCit7CisJc3RydWN0IGJmYV9zCQkqYmZhID0gYmZhX2FyZzsKKwlzdHJ1Y3QgYmZhX2lvY2ZjX3MJKmlvY2ZjID0gJmJmYS0+aW9jZmM7CisJc3RydWN0IGJmaV9pb2NmY19zdGF0c19yZXFfcyBzdGF0c19yZXE7CisKKwliZmFfdGltZXJfc3RhcnQoYmZhLCAmaW9jZmMtPnN0YXRzX3RpbWVyLAorCQkJICAgIGJmYV9pb2NmY19zdGF0c19jbHJfdGltZW91dCwgYmZhLAorCQkJICAgIEJGQV9JT0NGQ19UT1YpOworCisJYmZpX2gyaV9zZXQoc3RhdHNfcmVxLm1oLCBCRklfTUNfSU9DRkMsIEJGSV9JT0NGQ19IMklfQ0xFQVJfU1RBVFNfUkVRLAorCQliZmFfbHB1aWQoYmZhKSk7CisJYmZhX2lvY19tYm94X3NlbmQoJmJmYS0+aW9jLCAmc3RhdHNfcmVxLAorCQlzaXplb2Yoc3RydWN0IGJmaV9pb2NmY19zdGF0c19yZXFfcykpOworfQorCitzdGF0aWMgdm9pZAorYmZhX2lvY2ZjX3N0YXRzX3N3YXAoc3RydWN0IGJmYV9md19zdGF0c19zICpkLCBzdHJ1Y3QgYmZhX2Z3X3N0YXRzX3MgKnMpCit7CisJdTMyICAgICAgICpkaXAgPSAodTMyICopIGQ7CisJdTMyICAgICAgICpzaXAgPSAodTMyICopIHM7CisJaW50ICAgICAgICAgICAgIGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgKHNpemVvZihzdHJ1Y3QgYmZhX2Z3X3N0YXRzX3MpIC8gc2l6ZW9mKHUzMikpOyBpKyspCisJCWRpcFtpXSA9IGJmYV9vc19udG9obChzaXBbaV0pOworfQorCitzdGF0aWMgdm9pZAorYmZhX2lvY2ZjX3N0YXRzX2Nscl9jYih2b2lkICpiZmFfYXJnLCBiZmFfYm9vbGVhbl90IGNvbXBsZXRlKQoreworCXN0cnVjdCBiZmFfcyAqYmZhID0gYmZhX2FyZzsKKwlzdHJ1Y3QgYmZhX2lvY2ZjX3MgKmlvY2ZjID0gJmJmYS0+aW9jZmM7CisKKwlpZiAoY29tcGxldGUpIHsKKwkJYmZhX2lvY19jbHJfc3RhdHMoJmJmYS0+aW9jKTsKKwkJaW9jZmMtPnN0YXRzX2NiZm4oaW9jZmMtPnN0YXRzX2NiYXJnLCBpb2NmYy0+c3RhdHNfc3RhdHVzKTsKKwl9IGVsc2UgeworCQlpb2NmYy0+c3RhdHNfYnVzeSA9IEJGQV9GQUxTRTsKKwkJaW9jZmMtPnN0YXRzX3N0YXR1cyA9IEJGQV9TVEFUVVNfT0s7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX2lvY2ZjX3N0YXRzX2Nscl90aW1lb3V0KHZvaWQgKmJmYV9hcmcpCit7CisJc3RydWN0IGJmYV9zCQkqYmZhID0gYmZhX2FyZzsKKwlzdHJ1Y3QgYmZhX2lvY2ZjX3MJKmlvY2ZjID0gJmJmYS0+aW9jZmM7CisKKwliZmFfdHJjKGJmYSwgMCk7CisKKwlpb2NmYy0+c3RhdHNfc3RhdHVzID0gQkZBX1NUQVRVU19FVElNRVI7CisJYmZhX2NiX3F1ZXVlKGJmYSwgJmlvY2ZjLT5zdGF0c19oY2JfcWUsIGJmYV9pb2NmY19zdGF0c19jbHJfY2IsIGJmYSk7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfaW9jZmNfc3RhdHNfY2Iodm9pZCAqYmZhX2FyZywgYmZhX2Jvb2xlYW5fdCBjb21wbGV0ZSkKK3sKKwlzdHJ1Y3QgYmZhX3MJCSpiZmEgPSBiZmFfYXJnOworCXN0cnVjdCBiZmFfaW9jZmNfcwkqaW9jZmMgPSAmYmZhLT5pb2NmYzsKKworCWlmIChjb21wbGV0ZSkgeworCQlpZiAoaW9jZmMtPnN0YXRzX3N0YXR1cyA9PSBCRkFfU1RBVFVTX09LKSB7CisJCQliZmFfb3NfbWVtc2V0KGlvY2ZjLT5zdGF0c19yZXQsIDAsCisJCQkJc2l6ZW9mKCppb2NmYy0+c3RhdHNfcmV0KSk7CisJCQliZmFfaW9jZmNfc3RhdHNfc3dhcCgmaW9jZmMtPnN0YXRzX3JldC0+Zndfc3RhdHMsCisJCQkJaW9jZmMtPmZ3X3N0YXRzKTsKKwkJfQorCQlpb2NmYy0+c3RhdHNfY2Jmbihpb2NmYy0+c3RhdHNfY2JhcmcsIGlvY2ZjLT5zdGF0c19zdGF0dXMpOworCX0gZWxzZSB7CisJCWlvY2ZjLT5zdGF0c19idXN5ID0gQkZBX0ZBTFNFOworCQlpb2NmYy0+c3RhdHNfc3RhdHVzID0gQkZBX1NUQVRVU19PSzsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfaW9jZmNfc3RhdHNfdGltZW91dCh2b2lkICpiZmFfYXJnKQoreworCXN0cnVjdCBiZmFfcwkJKmJmYSA9IGJmYV9hcmc7CisJc3RydWN0IGJmYV9pb2NmY19zCSppb2NmYyA9ICZiZmEtPmlvY2ZjOworCisJYmZhX3RyYyhiZmEsIDApOworCisJaW9jZmMtPnN0YXRzX3N0YXR1cyA9IEJGQV9TVEFUVVNfRVRJTUVSOworCWJmYV9jYl9xdWV1ZShiZmEsICZpb2NmYy0+c3RhdHNfaGNiX3FlLCBiZmFfaW9jZmNfc3RhdHNfY2IsIGJmYSk7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfaW9jZmNfc3RhdHNfcXVlcnkoc3RydWN0IGJmYV9zICpiZmEpCit7CisJc3RydWN0IGJmYV9pb2NmY19zCSppb2NmYyA9ICZiZmEtPmlvY2ZjOworCXN0cnVjdCBiZmlfaW9jZmNfc3RhdHNfcmVxX3Mgc3RhdHNfcmVxOworCisJYmZhX3RpbWVyX3N0YXJ0KGJmYSwgJmlvY2ZjLT5zdGF0c190aW1lciwKKwkJCSAgICBiZmFfaW9jZmNfc3RhdHNfdGltZW91dCwgYmZhLCBCRkFfSU9DRkNfVE9WKTsKKworCWJmaV9oMmlfc2V0KHN0YXRzX3JlcS5taCwgQkZJX01DX0lPQ0ZDLCBCRklfSU9DRkNfSDJJX0dFVF9TVEFUU19SRVEsCisJCQliZmFfbHB1aWQoYmZhKSk7CisJYmZhX2lvY19tYm94X3NlbmQoJmJmYS0+aW9jLCAmc3RhdHNfcmVxLAorCQlzaXplb2Yoc3RydWN0IGJmaV9pb2NmY19zdGF0c19yZXFfcykpOworfQorCit2b2lkCitiZmFfaW9jZmNfcmVzZXRfcXVldWVzKHN0cnVjdCBiZmFfcyAqYmZhKQoreworCWludCAgICAgICAgICAgICBxOworCisJZm9yIChxID0gMDsgcSA8IEJGSV9JT0NfTUFYX0NRUzsgcSsrKSB7CisJCWJmYV9yZXFxX2NpKGJmYSwgcSkgPSAwOworCQliZmFfcmVxcV9waShiZmEsIHEpID0gMDsKKwkJYmZhX3JzcHFfY2koYmZhLCBxKSA9IDA7CisJCWJmYV9yc3BxX3BpKGJmYSwgcSkgPSAwOworCX0KK30KKworLyoqCisgKiBJT0MgZW5hYmxlIHJlcXVlc3QgaXMgY29tcGxldGUKKyAqLworc3RhdGljIHZvaWQKK2JmYV9pb2NmY19lbmFibGVfY2Jmbih2b2lkICpiZmFfYXJnLCBlbnVtIGJmYV9zdGF0dXMgc3RhdHVzKQoreworCXN0cnVjdCBiZmFfcwkqYmZhID0gYmZhX2FyZzsKKworCWlmIChzdGF0dXMgIT0gQkZBX1NUQVRVU19PSykgeworCQliZmFfaXNyX2Rpc2FibGUoYmZhKTsKKwkJaWYgKGJmYS0+aW9jZmMuYWN0aW9uID09IEJGQV9JT0NGQ19BQ1RfSU5JVCkKKwkJCWJmYV9jYl9xdWV1ZShiZmEsICZiZmEtPmlvY2ZjLmluaXRfaGNiX3FlLAorCQkJCSAgICAgYmZhX2lvY2ZjX2luaXRfY2IsIGJmYSk7CisJCXJldHVybjsKKwl9CisKKwliZmFfaW9jZmNfaW5pdGRvbmVfc3VibW9kKGJmYSk7CisJYmZhX2lvY2ZjX3NlbmRfY2ZnKGJmYSk7Cit9CisKKy8qKgorICogSU9DIGRpc2FibGUgcmVxdWVzdCBpcyBjb21wbGV0ZQorICovCitzdGF0aWMgdm9pZAorYmZhX2lvY2ZjX2Rpc2FibGVfY2Jmbih2b2lkICpiZmFfYXJnKQoreworCXN0cnVjdCBiZmFfcwkqYmZhID0gYmZhX2FyZzsKKworCWJmYV9pc3JfZGlzYWJsZShiZmEpOworCWJmYV9pb2NmY19kaXNhYmxlX3N1Ym1vZChiZmEpOworCisJaWYgKGJmYS0+aW9jZmMuYWN0aW9uID09IEJGQV9JT0NGQ19BQ1RfU1RPUCkKKwkJYmZhX2NiX3F1ZXVlKGJmYSwgJmJmYS0+aW9jZmMuc3RvcF9oY2JfcWUsIGJmYV9pb2NmY19zdG9wX2NiLAorCQkJICAgICBiZmEpOworCWVsc2UgeworCQliZmFfYXNzZXJ0KGJmYS0+aW9jZmMuYWN0aW9uID09IEJGQV9JT0NGQ19BQ1RfRElTQUJMRSk7CisJCWJmYV9jYl9xdWV1ZShiZmEsICZiZmEtPmlvY2ZjLmRpc19oY2JfcWUsIGJmYV9pb2NmY19kaXNhYmxlX2NiLAorCQkJICAgICBiZmEpOworCX0KK30KKworLyoqCisgKiBOb3RpZnkgc3ViLW1vZHVsZXMgb2YgaGFyZHdhcmUgZmFpbHVyZS4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9pb2NmY19oYmZhaWxfY2Jmbih2b2lkICpiZmFfYXJnKQoreworCXN0cnVjdCBiZmFfcwkqYmZhID0gYmZhX2FyZzsKKworCWJmYS0+cm1lX3Byb2Nlc3MgPSBCRkFfRkFMU0U7CisKKwliZmFfaXNyX2Rpc2FibGUoYmZhKTsKKwliZmFfaW9jZmNfZGlzYWJsZV9zdWJtb2QoYmZhKTsKKworCWlmIChiZmEtPmlvY2ZjLmFjdGlvbiA9PSBCRkFfSU9DRkNfQUNUX0lOSVQpCisJCWJmYV9jYl9xdWV1ZShiZmEsICZiZmEtPmlvY2ZjLmluaXRfaGNiX3FlLCBiZmFfaW9jZmNfaW5pdF9jYiwKKwkJCSAgICAgYmZhKTsKK30KKworLyoqCisgKiBBY3Rpb25zIG9uIGNoaXAtcmVzZXQgY29tcGxldGlvbi4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9pb2NmY19yZXNldF9jYmZuKHZvaWQgKmJmYV9hcmcpCit7CisJc3RydWN0IGJmYV9zCSpiZmEgPSBiZmFfYXJnOworCisJYmZhX2lvY2ZjX3Jlc2V0X3F1ZXVlcyhiZmEpOworCWJmYV9pc3JfZW5hYmxlKGJmYSk7Cit9CisKKworCisvKioKKyAqICBiZmFfaW9jX3B1YmxpYworICovCisKKy8qKgorICogUXVlcnkgSU9DIG1lbW9yeSByZXF1aXJlbWVudCBpbmZvcm1hdGlvbi4KKyAqLwordm9pZAorYmZhX2lvY2ZjX21lbWluZm8oc3RydWN0IGJmYV9pb2NmY19jZmdfcyAqY2ZnLCB1MzIgKmttX2xlbiwKKwkJdTMyICpkbV9sZW4pCit7CisJLyogZG1hIG1lbW9yeSBmb3IgSU9DICovCisJKmRtX2xlbiArPSBiZmFfaW9jX21lbWluZm8oKTsKKworCWJmYV9pb2NmY19md19jZmdfc3ooY2ZnLCBkbV9sZW4pOworCWJmYV9pb2NmY19jcXNfc3ooY2ZnLCBkbV9sZW4pOworCSprbV9sZW4gKz0gYmZhX2lvY19kZWJ1Z190cmNzeihiZmFfYXV0b19yZWNvdmVyKTsKK30KKworLyoqCisgKiBRdWVyeSBJT0MgbWVtb3J5IHJlcXVpcmVtZW50IGluZm9ybWF0aW9uLgorICovCit2b2lkCitiZmFfaW9jZmNfYXR0YWNoKHN0cnVjdCBiZmFfcyAqYmZhLCB2b2lkICpiZmFkLCBzdHJ1Y3QgYmZhX2lvY2ZjX2NmZ19zICpjZmcsCisJCSAgIHN0cnVjdCBiZmFfbWVtaW5mb19zICptZW1pbmZvLCBzdHJ1Y3QgYmZhX3BjaWRldl9zICpwY2lkZXYpCit7CisJaW50ICAgICAgICAgICAgIGk7CisKKwliZmFfaW9jZmNfY2Jmbi5lbmFibGVfY2JmbiA9IGJmYV9pb2NmY19lbmFibGVfY2JmbjsKKwliZmFfaW9jZmNfY2Jmbi5kaXNhYmxlX2NiZm4gPSBiZmFfaW9jZmNfZGlzYWJsZV9jYmZuOworCWJmYV9pb2NmY19jYmZuLmhiZmFpbF9jYmZuID0gYmZhX2lvY2ZjX2hiZmFpbF9jYmZuOworCWJmYV9pb2NmY19jYmZuLnJlc2V0X2NiZm4gPSBiZmFfaW9jZmNfcmVzZXRfY2JmbjsKKworCWJmYV9pb2NfYXR0YWNoKCZiZmEtPmlvYywgYmZhLCAmYmZhX2lvY2ZjX2NiZm4sICZiZmEtPnRpbWVyX21vZCwKKwkJYmZhLT50cmNtb2QsIGJmYS0+YWVuLCBiZmEtPmxvZ20pOworCWJmYV9pb2NfcGNpX2luaXQoJmJmYS0+aW9jLCBwY2lkZXYsIEJGSV9NQ19JT0NGQyk7CisJYmZhX2lvY19tYm94X3JlZ2lzdGVyKCZiZmEtPmlvYywgYmZhX21ib3hfaXNycyk7CisKKwkvKioKKwkgKiBDaG9vc2UgRkMgKHNzaWQ6IDB4MUMpIHYvcyBGQ29FIChzc2lkOiAweDE0KSBtb2RlLgorCSAqLworCWlmICgwKQorCQliZmFfaW9jX3NldF9mY21vZGUoJmJmYS0+aW9jKTsKKworCWJmYV9pb2NmY19pbml0X21lbShiZmEsIGJmYWQsIGNmZywgcGNpZGV2KTsKKwliZmFfaW9jZmNfbWVtX2NsYWltKGJmYSwgY2ZnLCBtZW1pbmZvKTsKKwliZmFfdGltZXJfaW5pdCgmYmZhLT50aW1lcl9tb2QpOworCisJSU5JVF9MSVNUX0hFQUQoJmJmYS0+Y29tcF9xKTsKKwlmb3IgKGkgPSAwOyBpIDwgQkZJX0lPQ19NQVhfQ1FTOyBpKyspCisJCUlOSVRfTElTVF9IRUFEKCZiZmEtPnJlcXFfd2FpdHFbaV0pOworfQorCisvKioKKyAqIFF1ZXJ5IElPQyBtZW1vcnkgcmVxdWlyZW1lbnQgaW5mb3JtYXRpb24uCisgKi8KK3ZvaWQKK2JmYV9pb2NmY19kZXRhY2goc3RydWN0IGJmYV9zICpiZmEpCit7CisJYmZhX2lvY19kZXRhY2goJmJmYS0+aW9jKTsKK30KKworLyoqCisgKiBRdWVyeSBJT0MgbWVtb3J5IHJlcXVpcmVtZW50IGluZm9ybWF0aW9uLgorICovCit2b2lkCitiZmFfaW9jZmNfaW5pdChzdHJ1Y3QgYmZhX3MgKmJmYSkKK3sKKwliZmEtPmlvY2ZjLmFjdGlvbiA9IEJGQV9JT0NGQ19BQ1RfSU5JVDsKKwliZmFfaW9jX2VuYWJsZSgmYmZhLT5pb2MpOworCWJmYV9tc2l4X2luc3RhbGwoYmZhKTsKK30KKworLyoqCisgKiBJT0Mgc3RhcnQgY2FsbGVkIGZyb20gYmZhX3N0YXJ0KCkuIENhbGxlZCB0byBzdGFydCBJT0Mgb3BlcmF0aW9ucworICogYXQgZHJpdmVyIGluc3RhbnRpYXRpb24gZm9yIHRoaXMgaW5zdGFuY2UuCisgKi8KK3ZvaWQKK2JmYV9pb2NmY19zdGFydChzdHJ1Y3QgYmZhX3MgKmJmYSkKK3sKKwlpZiAoYmZhLT5pb2NmYy5jZmdkb25lKQorCQliZmFfaW9jZmNfc3RhcnRfc3VibW9kKGJmYSk7Cit9CisKKy8qKgorICogSU9DIHN0b3AgY2FsbGVkIGZyb20gYmZhX3N0b3AoKS4gQ2FsbGVkIG9ubHkgd2hlbiBkcml2ZXIgaXMgdW5sb2FkZWQKKyAqIGZvciB0aGlzIGluc3RhbmNlLgorICovCit2b2lkCitiZmFfaW9jZmNfc3RvcChzdHJ1Y3QgYmZhX3MgKmJmYSkKK3sKKwliZmEtPmlvY2ZjLmFjdGlvbiA9IEJGQV9JT0NGQ19BQ1RfU1RPUDsKKworCWJmYS0+cm1lX3Byb2Nlc3MgPSBCRkFfRkFMU0U7CisJYmZhX2lvY19kaXNhYmxlKCZiZmEtPmlvYyk7Cit9CisKK3ZvaWQKK2JmYV9pb2NmY19pc3Iodm9pZCAqYmZhYXJnLCBzdHJ1Y3QgYmZpX21ibXNnX3MgKm0pCit7CisJc3RydWN0IGJmYV9zCQkqYmZhID0gYmZhYXJnOworCXN0cnVjdCBiZmFfaW9jZmNfcwkqaW9jZmMgPSAmYmZhLT5pb2NmYzsKKwl1bmlvbiBiZmlfaW9jZmNfaTJoX21zZ191CSptc2c7CisKKwltc2cgPSAodW5pb24gYmZpX2lvY2ZjX2kyaF9tc2dfdSAqKSBtOworCWJmYV90cmMoYmZhLCBtc2ctPm1oLm1zZ19pZCk7CisKKwlzd2l0Y2ggKG1zZy0+bWgubXNnX2lkKSB7CisJY2FzZSBCRklfSU9DRkNfSTJIX0NGR19SRVBMWToKKwkJaW9jZmMtPmNmZ19yZXBseSA9ICZtc2ctPmNmZ19yZXBseTsKKwkJYmZhX2lvY2ZjX2NmZ3JzcChiZmEpOworCQlicmVhazsKKworCWNhc2UgQkZJX0lPQ0ZDX0kySF9HRVRfU1RBVFNfUlNQOgorCQlpZiAoaW9jZmMtPnN0YXRzX2J1c3kgPT0gQkZBX0ZBTFNFCisJCSAgICB8fCBpb2NmYy0+c3RhdHNfc3RhdHVzID09IEJGQV9TVEFUVVNfRVRJTUVSKQorCQkJYnJlYWs7CisKKwkJYmZhX3RpbWVyX3N0b3AoJmlvY2ZjLT5zdGF0c190aW1lcik7CisJCWlvY2ZjLT5zdGF0c19zdGF0dXMgPSBCRkFfU1RBVFVTX09LOworCQliZmFfY2JfcXVldWUoYmZhLCAmaW9jZmMtPnN0YXRzX2hjYl9xZSwgYmZhX2lvY2ZjX3N0YXRzX2NiLAorCQkJICAgICAgYmZhKTsKKwkJYnJlYWs7CisJY2FzZSBCRklfSU9DRkNfSTJIX0NMRUFSX1NUQVRTX1JTUDoKKwkJLyoKKwkJICogY2hlY2sgZm9yIHRpbWVyIHBvcCBiZWZvcmUgcHJvY2Vzc2luZyB0aGUgcnNwCisJCSAqLworCQlpZiAoaW9jZmMtPnN0YXRzX2J1c3kgPT0gQkZBX0ZBTFNFCisJCSAgICB8fCBpb2NmYy0+c3RhdHNfc3RhdHVzID09IEJGQV9TVEFUVVNfRVRJTUVSKQorCQkJYnJlYWs7CisKKwkJYmZhX3RpbWVyX3N0b3AoJmlvY2ZjLT5zdGF0c190aW1lcik7CisJCWlvY2ZjLT5zdGF0c19zdGF0dXMgPSBCRkFfU1RBVFVTX09LOworCQliZmFfY2JfcXVldWUoYmZhLCAmaW9jZmMtPnN0YXRzX2hjYl9xZSwKKwkJCSAgICAgIGJmYV9pb2NmY19zdGF0c19jbHJfY2IsIGJmYSk7CisJCWJyZWFrOworCWNhc2UgQkZJX0lPQ0ZDX0kySF9VUERBVEVRX1JTUDoKKwkJaW9jZmMtPnVwZGF0ZXFfY2Jmbihpb2NmYy0+dXBkYXRlcV9jYmFyZywgQkZBX1NUQVRVU19PSyk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisjaWZuZGVmIEJGQV9CSU9TX0JVSUxECit2b2lkCitiZmFfYWRhcHRlcl9nZXRfYXR0cihzdHJ1Y3QgYmZhX3MgKmJmYSwgc3RydWN0IGJmYV9hZGFwdGVyX2F0dHJfcyAqYWRfYXR0cikKK3sKKwliZmFfaW9jX2dldF9hZGFwdGVyX2F0dHIoJmJmYS0+aW9jLCBhZF9hdHRyKTsKK30KKwordTY0CitiZmFfYWRhcHRlcl9nZXRfaWQoc3RydWN0IGJmYV9zICpiZmEpCit7CisJcmV0dXJuIGJmYV9pb2NfZ2V0X2FkaWQoJmJmYS0+aW9jKTsKK30KKwordm9pZAorYmZhX2lvY2ZjX2dldF9hdHRyKHN0cnVjdCBiZmFfcyAqYmZhLCBzdHJ1Y3QgYmZhX2lvY2ZjX2F0dHJfcyAqYXR0cikKK3sKKwlzdHJ1Y3QgYmZhX2lvY2ZjX3MJKmlvY2ZjID0gJmJmYS0+aW9jZmM7CisKKwlhdHRyLT5pbnRyX2F0dHIgPSBpb2NmYy0+Y2ZnaW5mby0+aW50cl9hdHRyOworCWF0dHItPmNvbmZpZwk9IGlvY2ZjLT5jZmc7Cit9CisKK2JmYV9zdGF0dXNfdAorYmZhX2lvY2ZjX2lzcmF0dHJfc2V0KHN0cnVjdCBiZmFfcyAqYmZhLCBzdHJ1Y3QgYmZhX2lvY2ZjX2ludHJfYXR0cl9zICphdHRyKQoreworCXN0cnVjdCBiZmFfaW9jZmNfcwkJKmlvY2ZjID0gJmJmYS0+aW9jZmM7CisJc3RydWN0IGJmaV9pb2NmY19zZXRfaW50cl9yZXFfcyAqbTsKKworCWlvY2ZjLT5jZmdpbmZvLT5pbnRyX2F0dHIgPSAqYXR0cjsKKwlpZiAoIWJmYV9pb2NmY19pc19vcGVyYXRpb25hbChiZmEpKQorCQlyZXR1cm4gQkZBX1NUQVRVU19PSzsKKworCW0gPSBiZmFfcmVxcV9uZXh0KGJmYSwgQkZBX1JFUVFfSU9DKTsKKwlpZiAoIW0pCisJCXJldHVybiBCRkFfU1RBVFVTX0RFVkJVU1k7CisKKwliZmlfaDJpX3NldChtLT5taCwgQkZJX01DX0lPQ0ZDLCBCRklfSU9DRkNfSDJJX1NFVF9JTlRSX1JFUSwKKwkJCWJmYV9scHVpZChiZmEpKTsKKwltLT5jb2FsZXNjZSA9IGF0dHItPmNvYWxlc2NlOworCW0tPmRlbGF5ICAgID0gYmZhX29zX2h0b25zKGF0dHItPmRlbGF5KTsKKwltLT5sYXRlbmN5ICA9IGJmYV9vc19odG9ucyhhdHRyLT5sYXRlbmN5KTsKKworCWJmYV90cmMoYmZhLCBhdHRyLT5kZWxheSk7CisJYmZhX3RyYyhiZmEsIGF0dHItPmxhdGVuY3kpOworCisJYmZhX3JlcXFfcHJvZHVjZShiZmEsIEJGQV9SRVFRX0lPQyk7CisJcmV0dXJuIEJGQV9TVEFUVVNfT0s7Cit9CisKK3ZvaWQKK2JmYV9pb2NmY19zZXRfc25zYmFzZShzdHJ1Y3QgYmZhX3MgKmJmYSwgdTY0IHNuc2Jhc2VfcGEpCit7CisJc3RydWN0IGJmYV9pb2NmY19zICAgICAgKmlvY2ZjID0gJmJmYS0+aW9jZmM7CisKKwlpb2NmYy0+Y2ZnaW5mby0+c2Vuc2VfYnVmX2xlbiA9IChCRklfSU9JTV9TTlNMRU4gLSAxKTsKKwliZmFfZG1hX2JlX2FkZHJfc2V0KGlvY2ZjLT5jZmdpbmZvLT5pb2ltX3Nuc2Jhc2UsIHNuc2Jhc2VfcGEpOworfQorCitiZmFfc3RhdHVzX3QKK2JmYV9pb2NmY19nZXRfc3RhdHMoc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBiZmFfaW9jZmNfc3RhdHNfcyAqc3RhdHMsCisJCSAgICAgIGJmYV9jYl9pb2NfdCBjYmZuLCB2b2lkICpjYmFyZykKK3sKKwlzdHJ1Y3QgYmZhX2lvY2ZjX3MJKmlvY2ZjID0gJmJmYS0+aW9jZmM7CisKKwlpZiAoaW9jZmMtPnN0YXRzX2J1c3kpIHsKKwkJYmZhX3RyYyhiZmEsIGlvY2ZjLT5zdGF0c19idXN5KTsKKwkJcmV0dXJuIChCRkFfU1RBVFVTX0RFVkJVU1kpOworCX0KKworCWlvY2ZjLT5zdGF0c19idXN5ID0gQkZBX1RSVUU7CisJaW9jZmMtPnN0YXRzX3JldCA9IHN0YXRzOworCWlvY2ZjLT5zdGF0c19jYmZuID0gY2JmbjsKKwlpb2NmYy0+c3RhdHNfY2JhcmcgPSBjYmFyZzsKKworCWJmYV9pb2NmY19zdGF0c19xdWVyeShiZmEpOworCisJcmV0dXJuIChCRkFfU1RBVFVTX09LKTsKK30KKworYmZhX3N0YXR1c190CitiZmFfaW9jZmNfY2xlYXJfc3RhdHMoc3RydWN0IGJmYV9zICpiZmEsIGJmYV9jYl9pb2NfdCBjYmZuLCB2b2lkICpjYmFyZykKK3sKKwlzdHJ1Y3QgYmZhX2lvY2ZjX3MJKmlvY2ZjID0gJmJmYS0+aW9jZmM7CisKKwlpZiAoaW9jZmMtPnN0YXRzX2J1c3kpIHsKKwkJYmZhX3RyYyhiZmEsIGlvY2ZjLT5zdGF0c19idXN5KTsKKwkJcmV0dXJuIChCRkFfU1RBVFVTX0RFVkJVU1kpOworCX0KKworCWlvY2ZjLT5zdGF0c19idXN5ID0gQkZBX1RSVUU7CisJaW9jZmMtPnN0YXRzX2NiZm4gPSBjYmZuOworCWlvY2ZjLT5zdGF0c19jYmFyZyA9IGNiYXJnOworCisJYmZhX2lvY2ZjX3N0YXRzX2NsZWFyKGJmYSk7CisJcmV0dXJuIChCRkFfU1RBVFVTX09LKTsKK30KKworLyoqCisgKiBFbmFibGUgSU9DIGFmdGVyIGl0IGlzIGRpc2FibGVkLgorICovCit2b2lkCitiZmFfaW9jZmNfZW5hYmxlKHN0cnVjdCBiZmFfcyAqYmZhKQoreworCWJmYV9wbG9nX3N0cihiZmEtPnBsb2csIEJGQV9QTF9NSURfSEFMLCBCRkFfUExfRUlEX01JU0MsIDAsCisJCSAgICAgIklPQyBFbmFibGUiKTsKKwliZmFfaW9jX2VuYWJsZSgmYmZhLT5pb2MpOworfQorCit2b2lkCitiZmFfaW9jZmNfZGlzYWJsZShzdHJ1Y3QgYmZhX3MgKmJmYSkKK3sKKwliZmFfcGxvZ19zdHIoYmZhLT5wbG9nLCBCRkFfUExfTUlEX0hBTCwgQkZBX1BMX0VJRF9NSVNDLCAwLAorCQkgICAgICJJT0MgRGlzYWJsZSIpOworCWJmYS0+aW9jZmMuYWN0aW9uID0gQkZBX0lPQ0ZDX0FDVF9ESVNBQkxFOworCisJYmZhLT5ybWVfcHJvY2VzcyA9IEJGQV9GQUxTRTsKKwliZmFfaW9jX2Rpc2FibGUoJmJmYS0+aW9jKTsKK30KKworCitiZmFfYm9vbGVhbl90CitiZmFfaW9jZmNfaXNfb3BlcmF0aW9uYWwoc3RydWN0IGJmYV9zICpiZmEpCit7CisJcmV0dXJuIGJmYV9pb2NfaXNfb3BlcmF0aW9uYWwoJmJmYS0+aW9jKSAmJiBiZmEtPmlvY2ZjLmNmZ2RvbmU7Cit9CisKKy8qKgorICogUmV0dXJuIGJvb3QgdGFyZ2V0IHBvcnQgd3ducyAtLSByZWFkIGZyb20gYm9vdCBpbmZvcm1hdGlvbiBpbiBmbGFzaC4KKyAqLwordm9pZAorYmZhX2lvY2ZjX2dldF9ib290d3ducyhzdHJ1Y3QgYmZhX3MgKmJmYSwgdTggKm53d25zLCB3d25fdCAqKnd3bnMpCit7CisJc3RydWN0IGJmYV9pb2NmY19zCQkqaW9jZmMJID0gJmJmYS0+aW9jZmM7CisJc3RydWN0IGJmaV9pb2NmY19jZmdyc3BfcwkqY2ZncnNwICA9IGlvY2ZjLT5jZmdyc3A7CisKKwkqbnd3bnMgPSBjZmdyc3AtPmJvb3R3d25zLm53d25zOworCSp3d25zID0gY2ZncnNwLT5ib290d3ducy53d247Cit9CisKKyNlbmRpZgorCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2lvY2ZjLmggYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9pb2NmYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhZDE3N2UKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9pb2NmYy5oCkBAIC0wLDAgKzEsMTY4IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX19CRkFfSU9DRkNfSF9fCisjZGVmaW5lIF9fQkZBX0lPQ0ZDX0hfXworCisjaW5jbHVkZSA8YmZhX2lvYy5oPgorI2luY2x1ZGUgPGJmYS5oPgorI2luY2x1ZGUgPGJmaS9iZmlfaW9jZmMuaD4KKyNpbmNsdWRlIDxiZmFfY2FsbGJhY2tfcHJpdi5oPgorCisjZGVmaW5lIEJGQV9SRVFRX05FTEVNU19NSU4JKDQpCisjZGVmaW5lIEJGQV9SU1BRX05FTEVNU19NSU4JKDQpCisKK3N0cnVjdCBiZmFfaW9jZmNfcmVnc19zIHsKKwliZmFfb3NfYWRkcl90ICAgaW50cl9zdGF0dXM7CisJYmZhX29zX2FkZHJfdCAgIGludHJfbWFzazsKKwliZmFfb3NfYWRkcl90ICAgY3BlX3FfcGlbQkZJX0lPQ19NQVhfQ1FTXTsKKwliZmFfb3NfYWRkcl90ICAgY3BlX3FfY2lbQkZJX0lPQ19NQVhfQ1FTXTsKKwliZmFfb3NfYWRkcl90ICAgY3BlX3FfZGVwdGhbQkZJX0lPQ19NQVhfQ1FTXTsKKwliZmFfb3NfYWRkcl90ICAgY3BlX3FfY3RybFtCRklfSU9DX01BWF9DUVNdOworCWJmYV9vc19hZGRyX3QgICBybWVfcV9jaVtCRklfSU9DX01BWF9DUVNdOworCWJmYV9vc19hZGRyX3QgICBybWVfcV9waVtCRklfSU9DX01BWF9DUVNdOworCWJmYV9vc19hZGRyX3QgICBybWVfcV9kZXB0aFtCRklfSU9DX01BWF9DUVNdOworCWJmYV9vc19hZGRyX3QgICBybWVfcV9jdHJsW0JGSV9JT0NfTUFYX0NRU107Cit9OworCisvKioKKyAqIE1TSVggdmVjdG9yIGhhbmRsZXJzCisgKi8KKyNkZWZpbmUgQkZBX01TSVhfTUFYX1ZFQ1RPUlMJMjIKK3R5cGVkZWYgdm9pZCAoKmJmYV9tc2l4X2hhbmRsZXJfdCkoc3RydWN0IGJmYV9zICpiZmEsIGludCB2ZWMpOworc3RydWN0IGJmYV9tc2l4X3MgeworCWludAludmVjczsKKwliZmFfbXNpeF9oYW5kbGVyX3QgaGFuZGxlcltCRkFfTVNJWF9NQVhfVkVDVE9SU107Cit9OworCisvKioKKyAqIENoaXAgc3BlY2lmaWMgaW50ZXJmYWNlcworICovCitzdHJ1Y3QgYmZhX2h3aWZfcyB7CisJdm9pZCAoKmh3X3JlZ2luaXQpKHN0cnVjdCBiZmFfcyAqYmZhKTsKKwl2b2lkICgqaHdfcnNwcV9hY2spKHN0cnVjdCBiZmFfcyAqYmZhLCBpbnQgcnNwcSk7CisJdm9pZCAoKmh3X21zaXhfaW5pdCkoc3RydWN0IGJmYV9zICpiZmEsIGludCBudmVjcyk7CisJdm9pZCAoKmh3X21zaXhfaW5zdGFsbCkoc3RydWN0IGJmYV9zICpiZmEpOworCXZvaWQgKCpod19tc2l4X3VuaW5zdGFsbCkoc3RydWN0IGJmYV9zICpiZmEpOworCXZvaWQgKCpod19pc3JfbW9kZV9zZXQpKHN0cnVjdCBiZmFfcyAqYmZhLCBiZmFfYm9vbGVhbl90IG1zaXgpOworCXZvaWQgKCpod19tc2l4X2dldHZlY3MpKHN0cnVjdCBiZmFfcyAqYmZhLCB1MzIgKnZlY21hcCwKKwkJCXUzMiAqbnZlY3MsIHUzMiAqbWF4dmVjKTsKK307Cit0eXBlZGVmIHZvaWQgKCpiZmFfY2JfaW9jZmNfdCkgKHZvaWQgKmNiYXJnLCBlbnVtIGJmYV9zdGF0dXMgc3RhdHVzKTsKKworc3RydWN0IGJmYV9pb2NmY19zIHsKKwlzdHJ1Y3QgYmZhX3MgCQkqYmZhOworCXN0cnVjdCBiZmFfaW9jZmNfY2ZnX3MgCWNmZzsKKwlpbnQJCQlhY3Rpb247CisKKwl1MzIgICAgICAgIAlyZXFfY3FfcGlbQkZJX0lPQ19NQVhfQ1FTXTsKKwl1MzIgICAgICAgIAlyc3BfY3FfY2lbQkZJX0lPQ19NQVhfQ1FTXTsKKworCXN0cnVjdCBiZmFfY2JfcWVfcwlpbml0X2hjYl9xZTsKKwlzdHJ1Y3QgYmZhX2NiX3FlX3MJc3RvcF9oY2JfcWU7CisJc3RydWN0IGJmYV9jYl9xZV9zCWRpc19oY2JfcWU7CisJc3RydWN0IGJmYV9jYl9xZV9zCXN0YXRzX2hjYl9xZTsKKwliZmFfYm9vbGVhbl90CQljZmdkb25lOworCisJc3RydWN0IGJmYV9kbWFfcwljZmdfaW5mbzsKKwlzdHJ1Y3QgYmZpX2lvY2ZjX2NmZ19zICpjZmdpbmZvOworCXN0cnVjdCBiZmFfZG1hX3MJY2ZncnNwX2RtYTsKKwlzdHJ1Y3QgYmZpX2lvY2ZjX2NmZ3JzcF9zICpjZmdyc3A7CisJc3RydWN0IGJmaV9pb2NmY19jZmdfcmVwbHlfcyAqY2ZnX3JlcGx5OworCisJdTgJCQkqc3RhdHNfa3ZhOworCXU2NAkJc3RhdHNfcGE7CisJc3RydWN0IGJmYV9md19zdGF0c19zIAkqZndfc3RhdHM7CisJc3RydWN0IGJmYV90aW1lcl9zIAlzdGF0c190aW1lcjsJLyogIHRpbWVyICovCisJc3RydWN0IGJmYV9pb2NmY19zdGF0c19zICpzdGF0c19yZXQ7CS8qICBkcml2ZXIgc3RhdHMgbG9jYXRpb24gKi8KKwliZmFfc3RhdHVzX3QJCXN0YXRzX3N0YXR1czsJLyogIHN0YXRzL3N0YXRzY2xyIHN0YXR1cyAqLworCWJmYV9ib29sZWFuX3QgICAJc3RhdHNfYnVzeTsJLyogIG91dHN0YW5kaW5nIHN0YXRzICovCisJYmZhX2NiX2lvY190CQlzdGF0c19jYmZuOwkvKiAgZHJpdmVyIGNhbGxiYWNrIGZ1bmN0aW9uICovCisJdm9pZCAgICAgICAgICAgCQkqc3RhdHNfY2Jhcmc7CS8qICB1c2VyIGNhbGxiYWNrIGFyZyAqLworCisJc3RydWN0IGJmYV9kbWFfcyAgIAlyZXFfY3FfYmFbQkZJX0lPQ19NQVhfQ1FTXTsKKwlzdHJ1Y3QgYmZhX2RtYV9zICAgCXJlcV9jcV9zaGFkb3dfY2lbQkZJX0lPQ19NQVhfQ1FTXTsKKwlzdHJ1Y3QgYmZhX2RtYV9zICAgCXJzcF9jcV9iYVtCRklfSU9DX01BWF9DUVNdOworCXN0cnVjdCBiZmFfZG1hX3MgICAJcnNwX2NxX3NoYWRvd19waVtCRklfSU9DX01BWF9DUVNdOworCXN0cnVjdCBiZmFfaW9jZmNfcmVnc19zCWJmYV9yZWdzOwkvKiAgQkZBIGRldmljZSByZWdpc3RlcnMgKi8KKwlzdHJ1Y3QgYmZhX2h3aWZfcwlod2lmOworCisJYmZhX2NiX2lvY2ZjX3QJCXVwZGF0ZXFfY2JmbjsgLyogIGJpb3MgY2FsbGJhY2sgZnVuY3Rpb24gKi8KKwl2b2lkCQkJCSp1cGRhdGVxX2NiYXJnOwkvKiAgYmlvcyBjYWxsYmFjayBhcmcgKi8KK307CisKKyNkZWZpbmUgYmZhX2xwdWlkKF9fYmZhKQkJYmZhX2lvY19wb3J0aWQoJihfX2JmYSktPmlvYykKKyNkZWZpbmUgYmZhX21zaXhfaW5pdChfX2JmYSwgX19udmVjcykJXAorCShfX2JmYSktPmlvY2ZjLmh3aWYuaHdfbXNpeF9pbml0KF9fYmZhLCBfX252ZWNzKQorI2RlZmluZSBiZmFfbXNpeF9pbnN0YWxsKF9fYmZhKQlcCisJKF9fYmZhKS0+aW9jZmMuaHdpZi5od19tc2l4X2luc3RhbGwoX19iZmEpCisjZGVmaW5lIGJmYV9tc2l4X3VuaW5zdGFsbChfX2JmYSkJXAorCShfX2JmYSktPmlvY2ZjLmh3aWYuaHdfbXNpeF91bmluc3RhbGwoX19iZmEpCisjZGVmaW5lIGJmYV9pc3JfbW9kZV9zZXQoX19iZmEsIF9fbXNpeCkJXAorCShfX2JmYSktPmlvY2ZjLmh3aWYuaHdfaXNyX21vZGVfc2V0KF9fYmZhLCBfX21zaXgpCisjZGVmaW5lIGJmYV9tc2l4X2dldHZlY3MoX19iZmEsIF9fdmVjbWFwLCBfX252ZWNzLCBfX21heHZlYykJXAorCShfX2JmYSktPmlvY2ZjLmh3aWYuaHdfbXNpeF9nZXR2ZWNzKF9fYmZhLCBfX3ZlY21hcCwgX19udmVjcywgX19tYXh2ZWMpCisKKy8qCisgKiBGQyBzcGVjaWZpYyBJT0MgZnVuY3Rpb25zLgorICovCit2b2lkIGJmYV9pb2NmY19tZW1pbmZvKHN0cnVjdCBiZmFfaW9jZmNfY2ZnX3MgKmNmZywgdTMyICprbV9sZW4sCisJCXUzMiAqZG1fbGVuKTsKK3ZvaWQgYmZhX2lvY2ZjX2F0dGFjaChzdHJ1Y3QgYmZhX3MgKmJmYSwgdm9pZCAqYmZhZCwKKwkJc3RydWN0IGJmYV9pb2NmY19jZmdfcyAqY2ZnLCBzdHJ1Y3QgYmZhX21lbWluZm9fcyAqbWVtaW5mbywKKwkJc3RydWN0IGJmYV9wY2lkZXZfcyAqcGNpZGV2KTsKK3ZvaWQgYmZhX2lvY2ZjX2RldGFjaChzdHJ1Y3QgYmZhX3MgKmJmYSk7Cit2b2lkIGJmYV9pb2NmY19pbml0KHN0cnVjdCBiZmFfcyAqYmZhKTsKK3ZvaWQgYmZhX2lvY2ZjX3N0YXJ0KHN0cnVjdCBiZmFfcyAqYmZhKTsKK3ZvaWQgYmZhX2lvY2ZjX3N0b3Aoc3RydWN0IGJmYV9zICpiZmEpOwordm9pZCBiZmFfaW9jZmNfaXNyKHZvaWQgKmJmYSwgc3RydWN0IGJmaV9tYm1zZ19zICptc2cpOwordm9pZCBiZmFfaW9jZmNfc2V0X3Nuc2Jhc2Uoc3RydWN0IGJmYV9zICpiZmEsIHU2NCBzbnNiYXNlX3BhKTsKK2JmYV9ib29sZWFuX3QgYmZhX2lvY2ZjX2lzX29wZXJhdGlvbmFsKHN0cnVjdCBiZmFfcyAqYmZhKTsKK3ZvaWQgYmZhX2lvY2ZjX3Jlc2V0X3F1ZXVlcyhzdHJ1Y3QgYmZhX3MgKmJmYSk7Cit2b2lkIGJmYV9pb2NmY191cGRhdGVxKHN0cnVjdCBiZmFfcyAqYmZhLCB1MzIgcmVxcV9iYSwgdTMyIHJzcHFfYmEsCisJCQl1MzIgcmVxcV9zY2ksIHUzMiByc3BxX3NwaSwKKwkJCWJmYV9jYl9pb2NmY190IGNiZm4sIHZvaWQgKmNiYXJnKTsKKwordm9pZCBiZmFfbXNpeF9hbGwoc3RydWN0IGJmYV9zICpiZmEsIGludCB2ZWMpOwordm9pZCBiZmFfbXNpeF9yZXFxKHN0cnVjdCBiZmFfcyAqYmZhLCBpbnQgdmVjKTsKK3ZvaWQgYmZhX21zaXhfcnNwcShzdHJ1Y3QgYmZhX3MgKmJmYSwgaW50IHZlYyk7Cit2b2lkIGJmYV9tc2l4X2xwdV9lcnIoc3RydWN0IGJmYV9zICpiZmEsIGludCB2ZWMpOworCit2b2lkIGJmYV9od2NiX3JlZ2luaXQoc3RydWN0IGJmYV9zICpiZmEpOwordm9pZCBiZmFfaHdjYl9yc3BxX2FjayhzdHJ1Y3QgYmZhX3MgKmJmYSwgaW50IHJzcHEpOwordm9pZCBiZmFfaHdjYl9tc2l4X2luaXQoc3RydWN0IGJmYV9zICpiZmEsIGludCBudmVjcyk7Cit2b2lkIGJmYV9od2NiX21zaXhfaW5zdGFsbChzdHJ1Y3QgYmZhX3MgKmJmYSk7Cit2b2lkIGJmYV9od2NiX21zaXhfdW5pbnN0YWxsKHN0cnVjdCBiZmFfcyAqYmZhKTsKK3ZvaWQgYmZhX2h3Y2JfaXNyX21vZGVfc2V0KHN0cnVjdCBiZmFfcyAqYmZhLCBiZmFfYm9vbGVhbl90IG1zaXgpOwordm9pZCBiZmFfaHdjYl9tc2l4X2dldHZlY3Moc3RydWN0IGJmYV9zICpiZmEsIHUzMiAqdmVjbWFwLAorCQkJdTMyICpudmVjcywgdTMyICptYXh2ZWMpOwordm9pZCBiZmFfaHdjdF9yZWdpbml0KHN0cnVjdCBiZmFfcyAqYmZhKTsKK3ZvaWQgYmZhX2h3Y3RfcnNwcV9hY2soc3RydWN0IGJmYV9zICpiZmEsIGludCByc3BxKTsKK3ZvaWQgYmZhX2h3Y3RfbXNpeF9pbml0KHN0cnVjdCBiZmFfcyAqYmZhLCBpbnQgbnZlY3MpOwordm9pZCBiZmFfaHdjdF9tc2l4X2luc3RhbGwoc3RydWN0IGJmYV9zICpiZmEpOwordm9pZCBiZmFfaHdjdF9tc2l4X3VuaW5zdGFsbChzdHJ1Y3QgYmZhX3MgKmJmYSk7Cit2b2lkIGJmYV9od2N0X2lzcl9tb2RlX3NldChzdHJ1Y3QgYmZhX3MgKmJmYSwgYmZhX2Jvb2xlYW5fdCBtc2l4KTsKK3ZvaWQgYmZhX2h3Y3RfbXNpeF9nZXR2ZWNzKHN0cnVjdCBiZmFfcyAqYmZhLCB1MzIgKnZlY21hcCwKKwkJCXUzMiAqbnZlY3MsIHUzMiAqbWF4dmVjKTsKKwordm9pZCBiZmFfY29tX21lbWluZm8oYmZhX2Jvb2xlYW5fdCBtaW5jZmcsIHUzMiAqZG1fbGVuKTsKK3ZvaWQgYmZhX2NvbV9hdHRhY2goc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBiZmFfbWVtaW5mb19zICptaSwKKwkJYmZhX2Jvb2xlYW5fdCBtaW5jZmcpOwordm9pZCBiZmFfaW9jZmNfZ2V0X2Jvb3R3d25zKHN0cnVjdCBiZmFfcyAqYmZhLCB1OCAqbnd3bnMsIHd3bl90ICoqd3ducyk7CisKKyNlbmRpZiAvKiBfX0JGQV9JT0NGQ19IX18gKi8KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfaW9jZmNfcS5jIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfaW9jZmNfcS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwMGExN2QKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9pb2NmY19xLmMKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8YmZhLmg+CisjaW5jbHVkZSAiYmZhX2ludHJfcHJpdi5oIgorCitCRkFfVFJDX0ZJTEUoSEFMLCBJT0NGQ19RKTsKKwordm9pZAorYmZhX2lvY2ZjX3VwZGF0ZXEoc3RydWN0IGJmYV9zICpiZmEsIHUzMiByZXFxX2JhLCB1MzIgcnNwcV9iYSwKKwkJCQl1MzIgcmVxcV9zY2ksIHUzMiByc3BxX3NwaSwgYmZhX2NiX2lvY2ZjX3QgY2JmbiwKKwkJCQl2b2lkICpjYmFyZykKK3sKKwlzdHJ1Y3QgYmZhX2lvY2ZjX3MgKmlvY2ZjID0gJmJmYS0+aW9jZmM7CisJc3RydWN0IGJmaV9pb2NmY191cGRhdGVxX3JlcV9zIHVwZGF0ZXFfcmVxOworCisJaW9jZmMtPnVwZGF0ZXFfY2JmbiA9IGNiZm47CisJaW9jZmMtPnVwZGF0ZXFfY2JhcmcgPSBjYmFyZzsKKworCWJmaV9oMmlfc2V0KHVwZGF0ZXFfcmVxLm1oLCBCRklfTUNfSU9DRkMsIEJGSV9JT0NGQ19IMklfVVBEQVRFUV9SRVEsCisJCQliZmFfbHB1aWQoYmZhKSk7CisKKwl1cGRhdGVxX3JlcS5yZXFxX2JhID0gYmZhX29zX2h0b25sKHJlcXFfYmEpOworCXVwZGF0ZXFfcmVxLnJzcHFfYmEgPSBiZmFfb3NfaHRvbmwocnNwcV9iYSk7CisJdXBkYXRlcV9yZXEucmVxcV9zY2kgPSBiZmFfb3NfaHRvbmwocmVxcV9zY2kpOworCXVwZGF0ZXFfcmVxLnJzcHFfc3BpID0gYmZhX29zX2h0b25sKHJzcHFfc3BpKTsKKworCWJmYV9pb2NfbWJveF9zZW5kKCZiZmEtPmlvYywgJnVwZGF0ZXFfcmVxLAorCQkJc2l6ZW9mKHN0cnVjdCBiZmlfaW9jZmNfdXBkYXRlcV9yZXFfcykpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfaW9pbS5jIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfaW9pbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhZTI1NTIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9pb2ltLmMKQEAgLTAsMCArMSwxMzExIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxiZmEuaD4KKyNpbmNsdWRlIDxjcy9iZmFfZGVidWcuaD4KKyNpbmNsdWRlIDxiZmFfY2JfaW9pbV9tYWNyb3MuaD4KKworQkZBX1RSQ19GSUxFKEhBTCwgSU9JTSk7CisKKy8qCisgKiBmb3J3YXJkIGRlY2xhcmF0aW9ucy4KKyAqLworc3RhdGljIGJmYV9ib29sZWFuX3QJYmZhX2lvaW1fc2VuZF9pb3JlcShzdHJ1Y3QgYmZhX2lvaW1fcyAqaW9pbSk7CitzdGF0aWMgYmZhX2Jvb2xlYW5fdAliZmFfaW9pbV9zZ2Vfc2V0dXAoc3RydWN0IGJmYV9pb2ltX3MgKmlvaW0pOworc3RhdGljIHZvaWQJCWJmYV9pb2ltX3NncGdfc2V0dXAoc3RydWN0IGJmYV9pb2ltX3MgKmlvaW0pOworc3RhdGljIGJmYV9ib29sZWFuX3QJYmZhX2lvaW1fc2VuZF9hYm9ydChzdHJ1Y3QgYmZhX2lvaW1fcyAqaW9pbSk7CitzdGF0aWMgdm9pZAkJYmZhX2lvaW1fbm90aWZ5X2NsZWFudXAoc3RydWN0IGJmYV9pb2ltX3MgKmlvaW0pOworc3RhdGljIHZvaWQgX19iZmFfY2JfaW9pbV9nb29kX2NvbXAodm9pZCAqY2JhcmcsIGJmYV9ib29sZWFuX3QgY29tcGxldGUpOworc3RhdGljIHZvaWQgX19iZmFfY2JfaW9pbV9jb21wKHZvaWQgKmNiYXJnLCBiZmFfYm9vbGVhbl90IGNvbXBsZXRlKTsKK3N0YXRpYyB2b2lkIF9fYmZhX2NiX2lvaW1fYWJvcnQodm9pZCAqY2JhcmcsIGJmYV9ib29sZWFuX3QgY29tcGxldGUpOworc3RhdGljIHZvaWQgX19iZmFfY2JfaW9pbV9mYWlsZWQodm9pZCAqY2JhcmcsIGJmYV9ib29sZWFuX3QgY29tcGxldGUpOworc3RhdGljIHZvaWQgX19iZmFfY2JfaW9pbV9wYXRodG92KHZvaWQgKmNiYXJnLCBiZmFfYm9vbGVhbl90IGNvbXBsZXRlKTsKKworLyoqCisgKiAgYmZhX2lvaW1fc20KKyAqLworCisvKioKKyAqIElPIHN0YXRlIG1hY2hpbmUgZXZlbnRzCisgKi8KK2VudW0gYmZhX2lvaW1fZXZlbnQgeworCUJGQV9JT0lNX1NNX1NUQVJUID0gMSwJCS8qICBpbyBzdGFydCByZXF1ZXN0IGZyb20gaG9zdCAqLworCUJGQV9JT0lNX1NNX0NPTVBfR09PRCA9IDIsCS8qICBpbyBnb29kIGNvbXAsIHJlc291cmNlIGZyZWUgKi8KKwlCRkFfSU9JTV9TTV9DT01QID0gMywJCS8qICBpbyBjb21wLCByZXNvdXJjZSBpcyBmcmVlICovCisJQkZBX0lPSU1fU01fQ09NUF9VVEFHID0gNCwJLyogIGlvIGNvbXAsIHJlc291cmNlIGlzIGZyZWUgKi8KKwlCRkFfSU9JTV9TTV9ET05FID0gNSwJCS8qICBpbyBjb21wLCByZXNvdXJjZSBub3QgZnJlZSAqLworCUJGQV9JT0lNX1NNX0ZSRUUgPSA2LAkJLyogIGlvIHJlc291cmNlIGlzIGZyZWVkICovCisJQkZBX0lPSU1fU01fQUJPUlQgPSA3LAkJLyogIGFib3J0IHJlcXVlc3QgZnJvbSBzY3NpIHN0YWNrICovCisJQkZBX0lPSU1fU01fQUJPUlRfQ09NUCA9IDgsCS8qICBhYm9ydCBmcm9tIGYvdyAqLworCUJGQV9JT0lNX1NNX0FCT1JUX0RPTkUgPSA5LAkvKiAgYWJvcnQgY29tcGxldGlvbiBmcm9tIGYvdyAqLworCUJGQV9JT0lNX1NNX1FSRVNVTUUgPSAxMCwJLyogIENRIHNwYWNlIGF2YWlsYWJsZSB0byBxdWV1ZSBJTyAqLworCUJGQV9JT0lNX1NNX1NHQUxMT0NFRCA9IDExLAkvKiAgU0cgcGFnZSBhbGxvY2F0aW9uIHN1Y2Nlc3NmdWwgKi8KKwlCRkFfSU9JTV9TTV9TUVJFVFJZID0gMTIsCS8qICBzZXF1ZW5jZSByZWNvdmVyeSByZXRyeSAqLworCUJGQV9JT0lNX1NNX0hDQgk9IDEzLAkJLyogIGJmYSBjYWxsYmFjayBjb21wbGV0ZSAqLworCUJGQV9JT0lNX1NNX0NMRUFOVVAgPSAxNCwJLyogIElPIGNsZWFudXAgZnJvbSBpdG5pbSAqLworCUJGQV9JT0lNX1NNX1RNU1RBUlQgPSAxNSwJLyogIElPIGNsZWFudXAgZnJvbSB0c2tpbSAqLworCUJGQV9JT0lNX1NNX1RNRE9ORSA9IDE2LAkvKiAgSU8gY2xlYW51cCBmcm9tIHRza2ltICovCisJQkZBX0lPSU1fU01fSFdGQUlMID0gMTcsCS8qICBJT0MgaC93IGZhaWx1cmUgZXZlbnQgKi8KKwlCRkFfSU9JTV9TTV9JT1RPViA9IDE4LAkJLyogIElUTiBvZmZsaW5lIFRPViAgICAgICAqLworfTsKKworLyoKKyAqIGZvcndhcmQgZGVjbGFyYXRpb24gb2YgSU8gc3RhdGUgbWFjaGluZQorICovCitzdGF0aWMgdm9pZCAgICAgYmZhX2lvaW1fc21fdW5pbml0KHN0cnVjdCBiZmFfaW9pbV9zICppb2ltLAorCQkJCSAgICAgICBlbnVtIGJmYV9pb2ltX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfaW9pbV9zbV9zZ2FsbG9jKHN0cnVjdCBiZmFfaW9pbV9zICppb2ltLAorCQkJCQllbnVtIGJmYV9pb2ltX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfaW9pbV9zbV9hY3RpdmUoc3RydWN0IGJmYV9pb2ltX3MgKmlvaW0sCisJCQkJICAgICAgIGVudW0gYmZhX2lvaW1fZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9pb2ltX3NtX2Fib3J0KHN0cnVjdCBiZmFfaW9pbV9zICppb2ltLAorCQkJCSAgICAgIGVudW0gYmZhX2lvaW1fZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9pb2ltX3NtX2NsZWFudXAoc3RydWN0IGJmYV9pb2ltX3MgKmlvaW0sCisJCQkJCWVudW0gYmZhX2lvaW1fZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9pb2ltX3NtX3FmdWxsKHN0cnVjdCBiZmFfaW9pbV9zICppb2ltLAorCQkJCSAgICAgIGVudW0gYmZhX2lvaW1fZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9pb2ltX3NtX2Fib3J0X3FmdWxsKHN0cnVjdCBiZmFfaW9pbV9zICppb2ltLAorCQkJCQkgICAgZW51bSBiZmFfaW9pbV9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2lvaW1fc21fY2xlYW51cF9xZnVsbChzdHJ1Y3QgYmZhX2lvaW1fcyAqaW9pbSwKKwkJCQkJICAgICAgZW51bSBiZmFfaW9pbV9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2lvaW1fc21faGNiKHN0cnVjdCBiZmFfaW9pbV9zICppb2ltLAorCQkJCSAgICBlbnVtIGJmYV9pb2ltX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfaW9pbV9zbV9oY2JfZnJlZShzdHJ1Y3QgYmZhX2lvaW1fcyAqaW9pbSwKKwkJCQkJIGVudW0gYmZhX2lvaW1fZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9pb2ltX3NtX3Jlc2ZyZWUoc3RydWN0IGJmYV9pb2ltX3MgKmlvaW0sCisJCQkJCWVudW0gYmZhX2lvaW1fZXZlbnQgZXZlbnQpOworCisvKioKKyAqIAkJSU8gaXMgbm90IHN0YXJ0ZWQgKHVuYWxsb2NhdGVkKS4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9pb2ltX3NtX3VuaW5pdChzdHJ1Y3QgYmZhX2lvaW1fcyAqaW9pbSwgZW51bSBiZmFfaW9pbV9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjX2ZwKGlvaW0tPmJmYSwgaW9pbS0+aW90YWcpOworCWJmYV90cmNfZnAoaW9pbS0+YmZhLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfSU9JTV9TTV9TVEFSVDoKKwkJaWYgKCFiZmFfaXRuaW1faXNfb25saW5lKGlvaW0tPml0bmltKSkgeworCQkJaWYgKCFiZmFfaXRuaW1faG9sZF9pbyhpb2ltLT5pdG5pbSkpIHsKKwkJCQliZmFfc21fc2V0X3N0YXRlKGlvaW0sIGJmYV9pb2ltX3NtX2hjYik7CisJCQkJbGlzdF9kZWwoJmlvaW0tPnFlKTsKKwkJCQlsaXN0X2FkZF90YWlsKCZpb2ltLT5xZSwKKwkJCQkJJmlvaW0tPmZjcGltLT5pb2ltX2NvbXBfcSk7CisJCQkJYmZhX2NiX3F1ZXVlKGlvaW0tPmJmYSwgJmlvaW0tPmhjYl9xZSwKKwkJCQkJCV9fYmZhX2NiX2lvaW1fcGF0aHRvdiwgaW9pbSk7CisJCQl9IGVsc2UgeworCQkJCWxpc3RfZGVsKCZpb2ltLT5xZSk7CisJCQkJbGlzdF9hZGRfdGFpbCgmaW9pbS0+cWUsCisJCQkJCSZpb2ltLT5pdG5pbS0+cGVuZGluZ19xKTsKKwkJCX0KKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKGlvaW0tPm5zZ2VzID4gQkZJX1NHRV9JTkxJTkUpIHsKKwkJCWlmICghYmZhX2lvaW1fc2dlX3NldHVwKGlvaW0pKSB7CisJCQkJYmZhX3NtX3NldF9zdGF0ZShpb2ltLCBiZmFfaW9pbV9zbV9zZ2FsbG9jKTsKKwkJCQlyZXR1cm47CisJCQl9CisJCX0KKworCQlpZiAoIWJmYV9pb2ltX3NlbmRfaW9yZXEoaW9pbSkpIHsKKwkJCWJmYV9zbV9zZXRfc3RhdGUoaW9pbSwgYmZhX2lvaW1fc21fcWZ1bGwpOworCQkJYnJlYWs7CisJCX0KKworCQliZmFfc21fc2V0X3N0YXRlKGlvaW0sIGJmYV9pb2ltX3NtX2FjdGl2ZSk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfSU9JTV9TTV9JT1RPVjoKKwkJYmZhX3NtX3NldF9zdGF0ZShpb2ltLCBiZmFfaW9pbV9zbV9oY2IpOworCQliZmFfY2JfcXVldWUoaW9pbS0+YmZhLCAmaW9pbS0+aGNiX3FlLAorCQkJCV9fYmZhX2NiX2lvaW1fcGF0aHRvdiwgaW9pbSk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfSU9JTV9TTV9BQk9SVDoKKwkJLyoqCisJCSAqIElPIGluIHBlbmRpbmcgcXVldWUgY2FuIGdldCBhYm9ydCByZXF1ZXN0cy4gQ29tcGxldGUgYWJvcnQKKwkJICogcmVxdWVzdHMgaW1tZWRpYXRlbHkuCisJCSAqLworCQliZmFfc21fc2V0X3N0YXRlKGlvaW0sIGJmYV9pb2ltX3NtX2hjYik7CisJCWJmYV9hc3NlcnQoYmZhX3FfaXNfb25fcSgmaW9pbS0+aXRuaW0tPnBlbmRpbmdfcSwgaW9pbSkpOworCQliZmFfY2JfcXVldWUoaW9pbS0+YmZhLCAmaW9pbS0+aGNiX3FlLCBfX2JmYV9jYl9pb2ltX2Fib3J0LAorCQkJCWlvaW0pOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqIAkJSU8gaXMgd2FpdGluZyBmb3IgU0cgcGFnZXMuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaW9pbV9zbV9zZ2FsbG9jKHN0cnVjdCBiZmFfaW9pbV9zICppb2ltLCBlbnVtIGJmYV9pb2ltX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMoaW9pbS0+YmZhLCBpb2ltLT5pb3RhZyk7CisJYmZhX3RyYyhpb2ltLT5iZmEsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9JT0lNX1NNX1NHQUxMT0NFRDoKKwkJaWYgKCFiZmFfaW9pbV9zZW5kX2lvcmVxKGlvaW0pKSB7CisJCQliZmFfc21fc2V0X3N0YXRlKGlvaW0sIGJmYV9pb2ltX3NtX3FmdWxsKTsKKwkJCWJyZWFrOworCQl9CisJCWJmYV9zbV9zZXRfc3RhdGUoaW9pbSwgYmZhX2lvaW1fc21fYWN0aXZlKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9JT0lNX1NNX0NMRUFOVVA6CisJCWJmYV9zbV9zZXRfc3RhdGUoaW9pbSwgYmZhX2lvaW1fc21faGNiKTsKKwkJYmZhX3NncGdfd2NhbmNlbChpb2ltLT5iZmEsICZpb2ltLT5pb3NwLT5zZ3BnX3dxZSk7CisJCWJmYV9jYl9xdWV1ZShpb2ltLT5iZmEsICZpb2ltLT5oY2JfcWUsIF9fYmZhX2NiX2lvaW1fZmFpbGVkLAorCQkJICAgICAgaW9pbSk7CisJCWJmYV9pb2ltX25vdGlmeV9jbGVhbnVwKGlvaW0pOworCQlicmVhazsKKworCWNhc2UgQkZBX0lPSU1fU01fQUJPUlQ6CisJCWJmYV9zbV9zZXRfc3RhdGUoaW9pbSwgYmZhX2lvaW1fc21faGNiKTsKKwkJYmZhX3NncGdfd2NhbmNlbChpb2ltLT5iZmEsICZpb2ltLT5pb3NwLT5zZ3BnX3dxZSk7CisJCWJmYV9jYl9xdWV1ZShpb2ltLT5iZmEsICZpb2ltLT5oY2JfcWUsIF9fYmZhX2NiX2lvaW1fYWJvcnQsCisJCQkgICAgICBpb2ltKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9JT0lNX1NNX0hXRkFJTDoKKwkJYmZhX3NtX3NldF9zdGF0ZShpb2ltLCBiZmFfaW9pbV9zbV9oY2IpOworCQliZmFfc2dwZ193Y2FuY2VsKGlvaW0tPmJmYSwgJmlvaW0tPmlvc3AtPnNncGdfd3FlKTsKKwkJYmZhX2NiX3F1ZXVlKGlvaW0tPmJmYSwgJmlvaW0tPmhjYl9xZSwgX19iZmFfY2JfaW9pbV9mYWlsZWQsCisJCQkgICAgICBpb2ltKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworLyoqCisgKiAJCUlPIGlzIGFjdGl2ZS4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9pb2ltX3NtX2FjdGl2ZShzdHJ1Y3QgYmZhX2lvaW1fcyAqaW9pbSwgZW51bSBiZmFfaW9pbV9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjX2ZwKGlvaW0tPmJmYSwgaW9pbS0+aW90YWcpOworCWJmYV90cmNfZnAoaW9pbS0+YmZhLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfSU9JTV9TTV9DT01QX0dPT0Q6CisJCWJmYV9zbV9zZXRfc3RhdGUoaW9pbSwgYmZhX2lvaW1fc21faGNiKTsKKwkJYmZhX2NiX3F1ZXVlKGlvaW0tPmJmYSwgJmlvaW0tPmhjYl9xZSwKKwkJCSAgICAgIF9fYmZhX2NiX2lvaW1fZ29vZF9jb21wLCBpb2ltKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9JT0lNX1NNX0NPTVA6CisJCWJmYV9zbV9zZXRfc3RhdGUoaW9pbSwgYmZhX2lvaW1fc21faGNiKTsKKwkJYmZhX2NiX3F1ZXVlKGlvaW0tPmJmYSwgJmlvaW0tPmhjYl9xZSwgX19iZmFfY2JfaW9pbV9jb21wLAorCQkJICAgICAgaW9pbSk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfSU9JTV9TTV9ET05FOgorCQliZmFfc21fc2V0X3N0YXRlKGlvaW0sIGJmYV9pb2ltX3NtX2hjYl9mcmVlKTsKKwkJYmZhX2NiX3F1ZXVlKGlvaW0tPmJmYSwgJmlvaW0tPmhjYl9xZSwgX19iZmFfY2JfaW9pbV9jb21wLAorCQkJICAgICAgaW9pbSk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfSU9JTV9TTV9BQk9SVDoKKwkJaW9pbS0+aW9zcC0+YWJvcnRfZXhwbGljaXQgPSBCRkFfVFJVRTsKKwkJaW9pbS0+aW9fY2JmbiA9IF9fYmZhX2NiX2lvaW1fYWJvcnQ7CisKKwkJaWYgKGJmYV9pb2ltX3NlbmRfYWJvcnQoaW9pbSkpCisJCQliZmFfc21fc2V0X3N0YXRlKGlvaW0sIGJmYV9pb2ltX3NtX2Fib3J0KTsKKwkJZWxzZSB7CisJCQliZmFfc21fc2V0X3N0YXRlKGlvaW0sIGJmYV9pb2ltX3NtX2Fib3J0X3FmdWxsKTsKKwkJCWJmYV9yZXFxX3dhaXQoaW9pbS0+YmZhLCBpb2ltLT5pdG5pbS0+cmVxcSwKKwkJCQkJICAmaW9pbS0+aW9zcC0+cmVxcV93YWl0KTsKKwkJfQorCQlicmVhazsKKworCWNhc2UgQkZBX0lPSU1fU01fQ0xFQU5VUDoKKwkJaW9pbS0+aW9zcC0+YWJvcnRfZXhwbGljaXQgPSBCRkFfRkFMU0U7CisJCWlvaW0tPmlvX2NiZm4gPSBfX2JmYV9jYl9pb2ltX2ZhaWxlZDsKKworCQlpZiAoYmZhX2lvaW1fc2VuZF9hYm9ydChpb2ltKSkKKwkJCWJmYV9zbV9zZXRfc3RhdGUoaW9pbSwgYmZhX2lvaW1fc21fY2xlYW51cCk7CisJCWVsc2UgeworCQkJYmZhX3NtX3NldF9zdGF0ZShpb2ltLCBiZmFfaW9pbV9zbV9jbGVhbnVwX3FmdWxsKTsKKwkJCWJmYV9yZXFxX3dhaXQoaW9pbS0+YmZhLCBpb2ltLT5pdG5pbS0+cmVxcSwKKwkJCQkJICAmaW9pbS0+aW9zcC0+cmVxcV93YWl0KTsKKwkJfQorCQlicmVhazsKKworCWNhc2UgQkZBX0lPSU1fU01fSFdGQUlMOgorCQliZmFfc21fc2V0X3N0YXRlKGlvaW0sIGJmYV9pb2ltX3NtX2hjYik7CisJCWJmYV9jYl9xdWV1ZShpb2ltLT5iZmEsICZpb2ltLT5oY2JfcWUsIF9fYmZhX2NiX2lvaW1fZmFpbGVkLAorCQkJICAgICAgaW9pbSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKy8qKgorICogCQlJTyBpcyBiZWluZyBhYm9ydGVkLCB3YWl0aW5nIGZvciBjb21wbGV0aW9uIGZyb20gZmlybXdhcmUuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaW9pbV9zbV9hYm9ydChzdHJ1Y3QgYmZhX2lvaW1fcyAqaW9pbSwgZW51bSBiZmFfaW9pbV9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKGlvaW0tPmJmYSwgaW9pbS0+aW90YWcpOworCWJmYV90cmMoaW9pbS0+YmZhLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfSU9JTV9TTV9DT01QX0dPT0Q6CisJY2FzZSBCRkFfSU9JTV9TTV9DT01QOgorCWNhc2UgQkZBX0lPSU1fU01fRE9ORToKKwljYXNlIEJGQV9JT0lNX1NNX0ZSRUU6CisJCWJyZWFrOworCisJY2FzZSBCRkFfSU9JTV9TTV9BQk9SVF9ET05FOgorCQliZmFfc21fc2V0X3N0YXRlKGlvaW0sIGJmYV9pb2ltX3NtX2hjYl9mcmVlKTsKKwkJYmZhX2NiX3F1ZXVlKGlvaW0tPmJmYSwgJmlvaW0tPmhjYl9xZSwgX19iZmFfY2JfaW9pbV9hYm9ydCwKKwkJCSAgICAgIGlvaW0pOworCQlicmVhazsKKworCWNhc2UgQkZBX0lPSU1fU01fQUJPUlRfQ09NUDoKKwkJYmZhX3NtX3NldF9zdGF0ZShpb2ltLCBiZmFfaW9pbV9zbV9oY2IpOworCQliZmFfY2JfcXVldWUoaW9pbS0+YmZhLCAmaW9pbS0+aGNiX3FlLCBfX2JmYV9jYl9pb2ltX2Fib3J0LAorCQkJICAgICAgaW9pbSk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfSU9JTV9TTV9DT01QX1VUQUc6CisJCWJmYV9zbV9zZXRfc3RhdGUoaW9pbSwgYmZhX2lvaW1fc21faGNiKTsKKwkJYmZhX2NiX3F1ZXVlKGlvaW0tPmJmYSwgJmlvaW0tPmhjYl9xZSwgX19iZmFfY2JfaW9pbV9hYm9ydCwKKwkJCSAgICAgIGlvaW0pOworCQlicmVhazsKKworCWNhc2UgQkZBX0lPSU1fU01fQ0xFQU5VUDoKKwkJYmZhX2Fzc2VydChpb2ltLT5pb3NwLT5hYm9ydF9leHBsaWNpdCA9PSBCRkFfVFJVRSk7CisJCWlvaW0tPmlvc3AtPmFib3J0X2V4cGxpY2l0ID0gQkZBX0ZBTFNFOworCisJCWlmIChiZmFfaW9pbV9zZW5kX2Fib3J0KGlvaW0pKQorCQkJYmZhX3NtX3NldF9zdGF0ZShpb2ltLCBiZmFfaW9pbV9zbV9jbGVhbnVwKTsKKwkJZWxzZSB7CisJCQliZmFfc21fc2V0X3N0YXRlKGlvaW0sIGJmYV9pb2ltX3NtX2NsZWFudXBfcWZ1bGwpOworCQkJYmZhX3JlcXFfd2FpdChpb2ltLT5iZmEsIGlvaW0tPml0bmltLT5yZXFxLAorCQkJCQkgICZpb2ltLT5pb3NwLT5yZXFxX3dhaXQpOworCQl9CisJCWJyZWFrOworCisJY2FzZSBCRkFfSU9JTV9TTV9IV0ZBSUw6CisJCWJmYV9zbV9zZXRfc3RhdGUoaW9pbSwgYmZhX2lvaW1fc21faGNiKTsKKwkJYmZhX2NiX3F1ZXVlKGlvaW0tPmJmYSwgJmlvaW0tPmhjYl9xZSwgX19iZmFfY2JfaW9pbV9mYWlsZWQsCisJCQkgICAgICBpb2ltKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworLyoqCisgKiBJTyBpcyBiZWluZyBjbGVhbmVkIHVwIChpbXBsaWNpdCBhYm9ydCksIHdhaXRpbmcgZm9yIGNvbXBsZXRpb24gZnJvbQorICogZmlybXdhcmUuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaW9pbV9zbV9jbGVhbnVwKHN0cnVjdCBiZmFfaW9pbV9zICppb2ltLCBlbnVtIGJmYV9pb2ltX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMoaW9pbS0+YmZhLCBpb2ltLT5pb3RhZyk7CisJYmZhX3RyYyhpb2ltLT5iZmEsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9JT0lNX1NNX0NPTVBfR09PRDoKKwljYXNlIEJGQV9JT0lNX1NNX0NPTVA6CisJY2FzZSBCRkFfSU9JTV9TTV9ET05FOgorCWNhc2UgQkZBX0lPSU1fU01fRlJFRToKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9JT0lNX1NNX0FCT1JUOgorCQkvKioKKwkJICogSU8gaXMgYWxyZWFkeSBiZWluZyBhYm9ydGVkIGltcGxpY2l0bHkKKwkJICovCisJCWlvaW0tPmlvX2NiZm4gPSBfX2JmYV9jYl9pb2ltX2Fib3J0OworCQlicmVhazsKKworCWNhc2UgQkZBX0lPSU1fU01fQUJPUlRfRE9ORToKKwkJYmZhX3NtX3NldF9zdGF0ZShpb2ltLCBiZmFfaW9pbV9zbV9oY2JfZnJlZSk7CisJCWJmYV9jYl9xdWV1ZShpb2ltLT5iZmEsICZpb2ltLT5oY2JfcWUsIGlvaW0tPmlvX2NiZm4sIGlvaW0pOworCQliZmFfaW9pbV9ub3RpZnlfY2xlYW51cChpb2ltKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9JT0lNX1NNX0FCT1JUX0NPTVA6CisJCWJmYV9zbV9zZXRfc3RhdGUoaW9pbSwgYmZhX2lvaW1fc21faGNiKTsKKwkJYmZhX2NiX3F1ZXVlKGlvaW0tPmJmYSwgJmlvaW0tPmhjYl9xZSwgaW9pbS0+aW9fY2JmbiwgaW9pbSk7CisJCWJmYV9pb2ltX25vdGlmeV9jbGVhbnVwKGlvaW0pOworCQlicmVhazsKKworCWNhc2UgQkZBX0lPSU1fU01fQ09NUF9VVEFHOgorCQliZmFfc21fc2V0X3N0YXRlKGlvaW0sIGJmYV9pb2ltX3NtX2hjYik7CisJCWJmYV9jYl9xdWV1ZShpb2ltLT5iZmEsICZpb2ltLT5oY2JfcWUsIGlvaW0tPmlvX2NiZm4sIGlvaW0pOworCQliZmFfaW9pbV9ub3RpZnlfY2xlYW51cChpb2ltKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9JT0lNX1NNX0hXRkFJTDoKKwkJYmZhX3NtX3NldF9zdGF0ZShpb2ltLCBiZmFfaW9pbV9zbV9oY2IpOworCQliZmFfY2JfcXVldWUoaW9pbS0+YmZhLCAmaW9pbS0+aGNiX3FlLCBfX2JmYV9jYl9pb2ltX2ZhaWxlZCwKKwkJCSAgICAgIGlvaW0pOworCQlicmVhazsKKworCWNhc2UgQkZBX0lPSU1fU01fQ0xFQU5VUDoKKwkJLyoqCisJCSAqIElPIGNhbiBiZSBpbiBjbGVhbnVwIHN0YXRlIGFscmVhZHkgZHVlIHRvIFRNIGNvbW1hbmQuIDJuZCBjbGVhbnVwCisJCSAqIHJlcXVlc3QgY29tZXMgZnJvbSBJVE4gb2ZmbGluZSBldmVudC4KKwkJICovCisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKy8qKgorICogCQlJTyBpcyB3YWl0aW5nIGZvciByb29tIGluIHJlcXVlc3QgQ1EKKyAqLworc3RhdGljIHZvaWQKK2JmYV9pb2ltX3NtX3FmdWxsKHN0cnVjdCBiZmFfaW9pbV9zICppb2ltLCBlbnVtIGJmYV9pb2ltX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMoaW9pbS0+YmZhLCBpb2ltLT5pb3RhZyk7CisJYmZhX3RyYyhpb2ltLT5iZmEsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9JT0lNX1NNX1FSRVNVTUU6CisJCWJmYV9zbV9zZXRfc3RhdGUoaW9pbSwgYmZhX2lvaW1fc21fYWN0aXZlKTsKKwkJYmZhX2lvaW1fc2VuZF9pb3JlcShpb2ltKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9JT0lNX1NNX0FCT1JUOgorCQliZmFfc21fc2V0X3N0YXRlKGlvaW0sIGJmYV9pb2ltX3NtX2hjYik7CisJCWJmYV9yZXFxX3djYW5jZWwoJmlvaW0tPmlvc3AtPnJlcXFfd2FpdCk7CisJCWJmYV9jYl9xdWV1ZShpb2ltLT5iZmEsICZpb2ltLT5oY2JfcWUsIF9fYmZhX2NiX2lvaW1fYWJvcnQsCisJCQkgICAgICBpb2ltKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9JT0lNX1NNX0NMRUFOVVA6CisJCWJmYV9zbV9zZXRfc3RhdGUoaW9pbSwgYmZhX2lvaW1fc21faGNiKTsKKwkJYmZhX3JlcXFfd2NhbmNlbCgmaW9pbS0+aW9zcC0+cmVxcV93YWl0KTsKKwkJYmZhX2NiX3F1ZXVlKGlvaW0tPmJmYSwgJmlvaW0tPmhjYl9xZSwgX19iZmFfY2JfaW9pbV9mYWlsZWQsCisJCQkgICAgICBpb2ltKTsKKwkJYmZhX2lvaW1fbm90aWZ5X2NsZWFudXAoaW9pbSk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfSU9JTV9TTV9IV0ZBSUw6CisJCWJmYV9zbV9zZXRfc3RhdGUoaW9pbSwgYmZhX2lvaW1fc21faGNiKTsKKwkJYmZhX3JlcXFfd2NhbmNlbCgmaW9pbS0+aW9zcC0+cmVxcV93YWl0KTsKKwkJYmZhX2NiX3F1ZXVlKGlvaW0tPmJmYSwgJmlvaW0tPmhjYl9xZSwgX19iZmFfY2JfaW9pbV9mYWlsZWQsCisJCQkgICAgICBpb2ltKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworLyoqCisgKiAJCUFjdGl2ZSBJTyBpcyBiZWluZyBhYm9ydGVkLCB3YWl0aW5nIGZvciByb29tIGluIHJlcXVlc3QgQ1EuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaW9pbV9zbV9hYm9ydF9xZnVsbChzdHJ1Y3QgYmZhX2lvaW1fcyAqaW9pbSwgZW51bSBiZmFfaW9pbV9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKGlvaW0tPmJmYSwgaW9pbS0+aW90YWcpOworCWJmYV90cmMoaW9pbS0+YmZhLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfSU9JTV9TTV9RUkVTVU1FOgorCQliZmFfc21fc2V0X3N0YXRlKGlvaW0sIGJmYV9pb2ltX3NtX2Fib3J0KTsKKwkJYmZhX2lvaW1fc2VuZF9hYm9ydChpb2ltKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9JT0lNX1NNX0NMRUFOVVA6CisJCWJmYV9hc3NlcnQoaW9pbS0+aW9zcC0+YWJvcnRfZXhwbGljaXQgPT0gQkZBX1RSVUUpOworCQlpb2ltLT5pb3NwLT5hYm9ydF9leHBsaWNpdCA9IEJGQV9GQUxTRTsKKwkJYmZhX3NtX3NldF9zdGF0ZShpb2ltLCBiZmFfaW9pbV9zbV9jbGVhbnVwX3FmdWxsKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9JT0lNX1NNX0NPTVBfR09PRDoKKwljYXNlIEJGQV9JT0lNX1NNX0NPTVA6CisJCWJmYV9zbV9zZXRfc3RhdGUoaW9pbSwgYmZhX2lvaW1fc21faGNiKTsKKwkJYmZhX3JlcXFfd2NhbmNlbCgmaW9pbS0+aW9zcC0+cmVxcV93YWl0KTsKKwkJYmZhX2NiX3F1ZXVlKGlvaW0tPmJmYSwgJmlvaW0tPmhjYl9xZSwgX19iZmFfY2JfaW9pbV9hYm9ydCwKKwkJCSAgICAgIGlvaW0pOworCQlicmVhazsKKworCWNhc2UgQkZBX0lPSU1fU01fRE9ORToKKwkJYmZhX3NtX3NldF9zdGF0ZShpb2ltLCBiZmFfaW9pbV9zbV9oY2JfZnJlZSk7CisJCWJmYV9yZXFxX3djYW5jZWwoJmlvaW0tPmlvc3AtPnJlcXFfd2FpdCk7CisJCWJmYV9jYl9xdWV1ZShpb2ltLT5iZmEsICZpb2ltLT5oY2JfcWUsIF9fYmZhX2NiX2lvaW1fYWJvcnQsCisJCQkgICAgICBpb2ltKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9JT0lNX1NNX0hXRkFJTDoKKwkJYmZhX3NtX3NldF9zdGF0ZShpb2ltLCBiZmFfaW9pbV9zbV9oY2IpOworCQliZmFfcmVxcV93Y2FuY2VsKCZpb2ltLT5pb3NwLT5yZXFxX3dhaXQpOworCQliZmFfY2JfcXVldWUoaW9pbS0+YmZhLCAmaW9pbS0+aGNiX3FlLCBfX2JmYV9jYl9pb2ltX2ZhaWxlZCwKKwkJCSAgICAgIGlvaW0pOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqIAkJQWN0aXZlIElPIGlzIGJlaW5nIGNsZWFuZWQgdXAsIHdhaXRpbmcgZm9yIHJvb20gaW4gcmVxdWVzdCBDUS4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9pb2ltX3NtX2NsZWFudXBfcWZ1bGwoc3RydWN0IGJmYV9pb2ltX3MgKmlvaW0sIGVudW0gYmZhX2lvaW1fZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhpb2ltLT5iZmEsIGlvaW0tPmlvdGFnKTsKKwliZmFfdHJjKGlvaW0tPmJmYSwgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX0lPSU1fU01fUVJFU1VNRToKKwkJYmZhX3NtX3NldF9zdGF0ZShpb2ltLCBiZmFfaW9pbV9zbV9jbGVhbnVwKTsKKwkJYmZhX2lvaW1fc2VuZF9hYm9ydChpb2ltKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9JT0lNX1NNX0FCT1JUOgorCQkvKioKKwkJICogSU8gaXMgYWxyYWVkeSBiZWluZyBjbGVhbmVkIHVwIGltcGxpY2l0bHkKKwkJICovCisJCWlvaW0tPmlvX2NiZm4gPSBfX2JmYV9jYl9pb2ltX2Fib3J0OworCQlicmVhazsKKworCWNhc2UgQkZBX0lPSU1fU01fQ09NUF9HT09EOgorCWNhc2UgQkZBX0lPSU1fU01fQ09NUDoKKwkJYmZhX3NtX3NldF9zdGF0ZShpb2ltLCBiZmFfaW9pbV9zbV9oY2IpOworCQliZmFfcmVxcV93Y2FuY2VsKCZpb2ltLT5pb3NwLT5yZXFxX3dhaXQpOworCQliZmFfY2JfcXVldWUoaW9pbS0+YmZhLCAmaW9pbS0+aGNiX3FlLCBpb2ltLT5pb19jYmZuLCBpb2ltKTsKKwkJYmZhX2lvaW1fbm90aWZ5X2NsZWFudXAoaW9pbSk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfSU9JTV9TTV9ET05FOgorCQliZmFfc21fc2V0X3N0YXRlKGlvaW0sIGJmYV9pb2ltX3NtX2hjYl9mcmVlKTsKKwkJYmZhX3JlcXFfd2NhbmNlbCgmaW9pbS0+aW9zcC0+cmVxcV93YWl0KTsKKwkJYmZhX2NiX3F1ZXVlKGlvaW0tPmJmYSwgJmlvaW0tPmhjYl9xZSwgaW9pbS0+aW9fY2JmbiwgaW9pbSk7CisJCWJmYV9pb2ltX25vdGlmeV9jbGVhbnVwKGlvaW0pOworCQlicmVhazsKKworCWNhc2UgQkZBX0lPSU1fU01fSFdGQUlMOgorCQliZmFfc21fc2V0X3N0YXRlKGlvaW0sIGJmYV9pb2ltX3NtX2hjYik7CisJCWJmYV9yZXFxX3djYW5jZWwoJmlvaW0tPmlvc3AtPnJlcXFfd2FpdCk7CisJCWJmYV9jYl9xdWV1ZShpb2ltLT5iZmEsICZpb2ltLT5oY2JfcWUsIF9fYmZhX2NiX2lvaW1fZmFpbGVkLAorCQkJICAgICAgaW9pbSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKy8qKgorICogSU8gYmZhIGNhbGxiYWNrIGlzIHBlbmRpbmcuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaW9pbV9zbV9oY2Ioc3RydWN0IGJmYV9pb2ltX3MgKmlvaW0sIGVudW0gYmZhX2lvaW1fZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyY19mcChpb2ltLT5iZmEsIGlvaW0tPmlvdGFnKTsKKwliZmFfdHJjX2ZwKGlvaW0tPmJmYSwgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX0lPSU1fU01fSENCOgorCQliZmFfc21fc2V0X3N0YXRlKGlvaW0sIGJmYV9pb2ltX3NtX3VuaW5pdCk7CisJCWJmYV9pb2ltX2ZyZWUoaW9pbSk7CisJCWJmYV9jYl9pb2ltX3Jlc2ZyZWUoaW9pbS0+YmZhLT5iZmFkKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9JT0lNX1NNX0NMRUFOVVA6CisJCWJmYV9pb2ltX25vdGlmeV9jbGVhbnVwKGlvaW0pOworCQlicmVhazsKKworCWNhc2UgQkZBX0lPSU1fU01fSFdGQUlMOgorCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqIElPIGJmYSBjYWxsYmFjayBpcyBwZW5kaW5nLiBJTyByZXNvdXJjZSBjYW5ub3QgYmUgZnJlZWQuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaW9pbV9zbV9oY2JfZnJlZShzdHJ1Y3QgYmZhX2lvaW1fcyAqaW9pbSwgZW51bSBiZmFfaW9pbV9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKGlvaW0tPmJmYSwgaW9pbS0+aW90YWcpOworCWJmYV90cmMoaW9pbS0+YmZhLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfSU9JTV9TTV9IQ0I6CisJCWJmYV9zbV9zZXRfc3RhdGUoaW9pbSwgYmZhX2lvaW1fc21fcmVzZnJlZSk7CisJCWxpc3RfZGVsKCZpb2ltLT5xZSk7CisJCWxpc3RfYWRkX3RhaWwoJmlvaW0tPnFlLCAmaW9pbS0+ZmNwaW0tPmlvaW1fcmVzZnJlZV9xKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9JT0lNX1NNX0ZSRUU6CisJCWJmYV9zbV9zZXRfc3RhdGUoaW9pbSwgYmZhX2lvaW1fc21faGNiKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9JT0lNX1NNX0NMRUFOVVA6CisJCWJmYV9pb2ltX25vdGlmeV9jbGVhbnVwKGlvaW0pOworCQlicmVhazsKKworCWNhc2UgQkZBX0lPSU1fU01fSFdGQUlMOgorCQliZmFfc21fc2V0X3N0YXRlKGlvaW0sIGJmYV9pb2ltX3NtX2hjYik7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKy8qKgorICogSU8gaXMgY29tcGxldGVkLCB3YWl0aW5nIHJlc291cmNlIGZyZWUgZnJvbSBmaXJtd2FyZS4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9pb2ltX3NtX3Jlc2ZyZWUoc3RydWN0IGJmYV9pb2ltX3MgKmlvaW0sIGVudW0gYmZhX2lvaW1fZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhpb2ltLT5iZmEsIGlvaW0tPmlvdGFnKTsKKwliZmFfdHJjKGlvaW0tPmJmYSwgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX0lPSU1fU01fRlJFRToKKwkJYmZhX3NtX3NldF9zdGF0ZShpb2ltLCBiZmFfaW9pbV9zbV91bmluaXQpOworCQliZmFfaW9pbV9mcmVlKGlvaW0pOworCQliZmFfY2JfaW9pbV9yZXNmcmVlKGlvaW0tPmJmYS0+YmZhZCk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfSU9JTV9TTV9DTEVBTlVQOgorCQliZmFfaW9pbV9ub3RpZnlfY2xlYW51cChpb2ltKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9JT0lNX1NNX0hXRkFJTDoKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworCisKKy8qKgorICogIGJmYV9pb2ltX3ByaXZhdGUKKyAqLworCitzdGF0aWMgdm9pZAorX19iZmFfY2JfaW9pbV9nb29kX2NvbXAodm9pZCAqY2JhcmcsIGJmYV9ib29sZWFuX3QgY29tcGxldGUpCit7CisJc3RydWN0IGJmYV9pb2ltX3MgKmlvaW0gPSBjYmFyZzsKKworCWlmICghY29tcGxldGUpIHsKKwkJYmZhX3NtX3NlbmRfZXZlbnQoaW9pbSwgQkZBX0lPSU1fU01fSENCKTsKKwkJcmV0dXJuOworCX0KKworCWJmYV9jYl9pb2ltX2dvb2RfY29tcChpb2ltLT5iZmEtPmJmYWQsIGlvaW0tPmRpbyk7Cit9CisKK3N0YXRpYyB2b2lkCitfX2JmYV9jYl9pb2ltX2NvbXAodm9pZCAqY2JhcmcsIGJmYV9ib29sZWFuX3QgY29tcGxldGUpCit7CisJc3RydWN0IGJmYV9pb2ltX3MJKmlvaW0gPSBjYmFyZzsKKwlzdHJ1Y3QgYmZpX2lvaW1fcnNwX3MgKm07CisJdTgJCSpzbnNpbmZvID0gTlVMTDsKKwl1OCAgICAgICAgIHNuc19sZW4gPSAwOworCXMzMiAgICAgICAgIHJlc2lkdWUgPSAwOworCisJaWYgKCFjb21wbGV0ZSkgeworCQliZmFfc21fc2VuZF9ldmVudChpb2ltLCBCRkFfSU9JTV9TTV9IQ0IpOworCQlyZXR1cm47CisJfQorCisJbSA9IChzdHJ1Y3QgYmZpX2lvaW1fcnNwX3MgKikgJmlvaW0tPmlvc3AtPmNvbXBfcnNwbXNnOworCWlmIChtLT5pb19zdGF0dXMgPT0gQkZJX0lPSU1fU1RTX09LKSB7CisJCS8qKgorCQkgKiBzZXR1cCBzZW5zZSBpbmZvcm1hdGlvbiwgaWYgcHJlc2VudAorCQkgKi8KKwkJaWYgKG0tPnNjc2lfc3RhdHVzID09IFNDU0lfU1RBVFVTX0NIRUNLX0NPTkRJVElPTgorCQkJCQkmJiBtLT5zbnNfbGVuKSB7CisJCQlzbnNfbGVuID0gbS0+c25zX2xlbjsKKwkJCXNuc2luZm8gPSBpb2ltLT5pb3NwLT5zbnNpbmZvOworCQl9CisKKwkJLyoqCisJCSAqIHNldHVwIHJlc2lkdWUgdmFsdWUgY29ycmVjdGx5IGZvciBub3JtYWwgY29tcGxldGlvbnMKKwkJICovCisJCWlmIChtLT5yZXNpZF9mbGFncyA9PSBGQ1BfUkVTSURfVU5ERVIpCisJCQlyZXNpZHVlID0gYmZhX29zX250b2hsKG0tPnJlc2lkdWUpOworCQlpZiAobS0+cmVzaWRfZmxhZ3MgPT0gRkNQX1JFU0lEX09WRVIpIHsKKwkJCXJlc2lkdWUgPSBiZmFfb3NfbnRvaGwobS0+cmVzaWR1ZSk7CisJCQlyZXNpZHVlID0gLXJlc2lkdWU7CisJCX0KKwl9CisKKwliZmFfY2JfaW9pbV9kb25lKGlvaW0tPmJmYS0+YmZhZCwgaW9pbS0+ZGlvLCBtLT5pb19zdGF0dXMsCisJCQkgIG0tPnNjc2lfc3RhdHVzLCBzbnNfbGVuLCBzbnNpbmZvLCByZXNpZHVlKTsKK30KKworc3RhdGljIHZvaWQKK19fYmZhX2NiX2lvaW1fZmFpbGVkKHZvaWQgKmNiYXJnLCBiZmFfYm9vbGVhbl90IGNvbXBsZXRlKQoreworCXN0cnVjdCBiZmFfaW9pbV9zICppb2ltID0gY2Jhcmc7CisKKwlpZiAoIWNvbXBsZXRlKSB7CisJCWJmYV9zbV9zZW5kX2V2ZW50KGlvaW0sIEJGQV9JT0lNX1NNX0hDQik7CisJCXJldHVybjsKKwl9CisKKwliZmFfY2JfaW9pbV9kb25lKGlvaW0tPmJmYS0+YmZhZCwgaW9pbS0+ZGlvLCBCRklfSU9JTV9TVFNfQUJPUlRFRCwKKwkJCSAgMCwgMCwgTlVMTCwgMCk7Cit9CisKK3N0YXRpYyB2b2lkCitfX2JmYV9jYl9pb2ltX3BhdGh0b3Yodm9pZCAqY2JhcmcsIGJmYV9ib29sZWFuX3QgY29tcGxldGUpCit7CisJc3RydWN0IGJmYV9pb2ltX3MgKmlvaW0gPSBjYmFyZzsKKworCWlmICghY29tcGxldGUpIHsKKwkJYmZhX3NtX3NlbmRfZXZlbnQoaW9pbSwgQkZBX0lPSU1fU01fSENCKTsKKwkJcmV0dXJuOworCX0KKworCWJmYV9jYl9pb2ltX2RvbmUoaW9pbS0+YmZhLT5iZmFkLCBpb2ltLT5kaW8sIEJGSV9JT0lNX1NUU19QQVRIVE9WLAorCQkJICAwLCAwLCBOVUxMLCAwKTsKK30KKworc3RhdGljIHZvaWQKK19fYmZhX2NiX2lvaW1fYWJvcnQodm9pZCAqY2JhcmcsIGJmYV9ib29sZWFuX3QgY29tcGxldGUpCit7CisJc3RydWN0IGJmYV9pb2ltX3MgKmlvaW0gPSBjYmFyZzsKKworCWlmICghY29tcGxldGUpIHsKKwkJYmZhX3NtX3NlbmRfZXZlbnQoaW9pbSwgQkZBX0lPSU1fU01fSENCKTsKKwkJcmV0dXJuOworCX0KKworCWJmYV9jYl9pb2ltX2Fib3J0KGlvaW0tPmJmYS0+YmZhZCwgaW9pbS0+ZGlvKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9pb2ltX3NncGdfYWxsb2NlZCh2b2lkICpjYmFyZykKK3sKKwlzdHJ1Y3QgYmZhX2lvaW1fcyAqaW9pbSA9IGNiYXJnOworCisJaW9pbS0+bnNncGdzID0gQkZBX1NHUEdfTlBBR0UoaW9pbS0+bnNnZXMpOworCWxpc3Rfc3BsaWNlX3RhaWxfaW5pdCgmaW9pbS0+aW9zcC0+c2dwZ193cWUuc2dwZ19xLCAmaW9pbS0+c2dwZ19xKTsKKwliZmFfaW9pbV9zZ3BnX3NldHVwKGlvaW0pOworCWJmYV9zbV9zZW5kX2V2ZW50KGlvaW0sIEJGQV9JT0lNX1NNX1NHQUxMT0NFRCk7Cit9CisKKy8qKgorICogU2VuZCBJL08gcmVxdWVzdCB0byBmaXJtd2FyZS4KKyAqLworc3RhdGljICAgICAgICAgIGJmYV9ib29sZWFuX3QKK2JmYV9pb2ltX3NlbmRfaW9yZXEoc3RydWN0IGJmYV9pb2ltX3MgKmlvaW0pCit7CisJc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSA9IGlvaW0tPml0bmltOworCXN0cnVjdCBiZmlfaW9pbV9yZXFfcyAqbTsKKwlzdGF0aWMgc3RydWN0IGZjcF9jbW5kX3MgY21uZF96MCA9IHsgMCB9OworCXN0cnVjdCBiZmlfc2dlX3MgICAgICAqc2dlOworCXUzMiAgICAgICAgcGdkbGVuID0gMDsKKworCS8qKgorCSAqIGNoZWNrIGZvciByb29tIGluIHF1ZXVlIHRvIHNlbmQgcmVxdWVzdCBub3cKKwkgKi8KKwltID0gYmZhX3JlcXFfbmV4dChpb2ltLT5iZmEsIGl0bmltLT5yZXFxKTsKKwlpZiAoIW0pIHsKKwkJYmZhX3JlcXFfd2FpdChpb2ltLT5iZmEsIGlvaW0tPml0bmltLT5yZXFxLAorCQkJCSAgJmlvaW0tPmlvc3AtPnJlcXFfd2FpdCk7CisJCXJldHVybiBCRkFfRkFMU0U7CisJfQorCisJLyoqCisJICogYnVpbGQgaS9vIHJlcXVlc3QgbWVzc2FnZSBuZXh0CisJICovCisJbS0+aW9fdGFnID0gYmZhX29zX2h0b25zKGlvaW0tPmlvdGFnKTsKKwltLT5ycG9ydF9oZGwgPSBpb2ltLT5pdG5pbS0+cnBvcnQtPmZ3X2hhbmRsZTsKKwltLT5pb190aW1lb3V0ID0gYmZhX2NiX2lvaW1fZ2V0X3RpbWVvdXQoaW9pbS0+ZGlvKTsKKworCS8qKgorCSAqIGJ1aWxkIGlubGluZSBJTyBTRyBlbGVtZW50IGhlcmUKKwkgKi8KKwlzZ2UgPSAmbS0+c2dlc1swXTsKKwlpZiAoaW9pbS0+bnNnZXMpIHsKKwkJc2dlLT5zZ2EgPSBiZmFfY2JfaW9pbV9nZXRfc2dhZGRyKGlvaW0tPmRpbywgMCk7CisJCXBnZGxlbiA9IGJmYV9jYl9pb2ltX2dldF9zZ2xlbihpb2ltLT5kaW8sIDApOworCQlzZ2UtPnNnX2xlbiA9IHBnZGxlbjsKKwkJc2dlLT5mbGFncyA9IChpb2ltLT5uc2dlcyA+IEJGSV9TR0VfSU5MSU5FKSA/CisJCQkJCUJGSV9TR0VfREFUQV9DUEwgOiBCRklfU0dFX0RBVEFfTEFTVDsKKwkJYmZhX3NnZV90b19iZShzZ2UpOworCQlzZ2UrKzsKKwl9CisKKwlpZiAoaW9pbS0+bnNnZXMgPiBCRklfU0dFX0lOTElORSkgeworCQlzZ2UtPnNnYSA9IGlvaW0tPnNncGctPnNncGdfcGE7CisJfSBlbHNlIHsKKwkJc2dlLT5zZ2EuYTMyLmFkZHJfbG8gPSAwOworCQlzZ2UtPnNnYS5hMzIuYWRkcl9oaSA9IDA7CisJfQorCXNnZS0+c2dfbGVuID0gcGdkbGVuOworCXNnZS0+ZmxhZ3MgPSBCRklfU0dFX1BHRExFTjsKKwliZmFfc2dlX3RvX2JlKHNnZSk7CisKKwkvKioKKwkgKiBzZXQgdXAgSS9PIGNvbW1hbmQgcGFyYW1ldGVycworCSAqLworCWJmYV9vc19hc3NpZ24obS0+Y21uZCwgY21uZF96MCk7CisJbS0+Y21uZC5sdW4gPSBiZmFfY2JfaW9pbV9nZXRfbHVuKGlvaW0tPmRpbyk7CisJbS0+Y21uZC5pb2RpciA9IGJmYV9jYl9pb2ltX2dldF9pb2Rpcihpb2ltLT5kaW8pOworCWJmYV9vc19hc3NpZ24obS0+Y21uZC5jZGIsCisJCQkqKHN0cnVjdCBzY3NpX2NkYl9zICopYmZhX2NiX2lvaW1fZ2V0X2NkYihpb2ltLT5kaW8pKTsKKwltLT5jbW5kLmZjcF9kbCA9IGJmYV9vc19odG9ubChiZmFfY2JfaW9pbV9nZXRfc2l6ZShpb2ltLT5kaW8pKTsKKworCS8qKgorCSAqIHNldCB1cCBJL08gbWVzc2FnZSBoZWFkZXIKKwkgKi8KKwlzd2l0Y2ggKG0tPmNtbmQuaW9kaXIpIHsKKwljYXNlIEZDUF9JT0RJUl9SRUFEOgorCQliZmlfaDJpX3NldChtLT5taCwgQkZJX01DX0lPSU1fUkVBRCwgMCwgYmZhX2xwdWlkKGlvaW0tPmJmYSkpOworCQliZmFfc3RhdHMoaXRuaW0sIGlucHV0X3JlcXMpOworCQlicmVhazsKKwljYXNlIEZDUF9JT0RJUl9XUklURToKKwkJYmZpX2gyaV9zZXQobS0+bWgsIEJGSV9NQ19JT0lNX1dSSVRFLCAwLCBiZmFfbHB1aWQoaW9pbS0+YmZhKSk7CisJCWJmYV9zdGF0cyhpdG5pbSwgb3V0cHV0X3JlcXMpOworCQlicmVhazsKKwljYXNlIEZDUF9JT0RJUl9SVzoKKwkJYmZhX3N0YXRzKGl0bmltLCBpbnB1dF9yZXFzKTsKKwkJYmZhX3N0YXRzKGl0bmltLCBvdXRwdXRfcmVxcyk7CisJZGVmYXVsdDoKKwkJYmZpX2gyaV9zZXQobS0+bWgsIEJGSV9NQ19JT0lNX0lPLCAwLCBiZmFfbHB1aWQoaW9pbS0+YmZhKSk7CisJfQorCWlmIChpdG5pbS0+c2VxX3JlYyB8fAorCSAgICAoYmZhX2NiX2lvaW1fZ2V0X3NpemUoaW9pbS0+ZGlvKSAmIChzaXplb2YodTMyKSAtIDEpKSkKKwkJYmZpX2gyaV9zZXQobS0+bWgsIEJGSV9NQ19JT0lNX0lPLCAwLCBiZmFfbHB1aWQoaW9pbS0+YmZhKSk7CisKKyNpZmRlZiBJT0lNX0FEVkFOQ0VECisJbS0+Y21uZC5jcm4gPSBiZmFfY2JfaW9pbV9nZXRfY3JuKGlvaW0tPmRpbyk7CisJbS0+Y21uZC5wcmlvcml0eSA9IGJmYV9jYl9pb2ltX2dldF9wcmlvcml0eShpb2ltLT5kaW8pOworCW0tPmNtbmQudGFza2F0dHIgPSBiZmFfY2JfaW9pbV9nZXRfdGFza2F0dHIoaW9pbS0+ZGlvKTsKKworCS8qKgorCSAqIEhhbmRsZSBsYXJnZSBDREIgKD4xNiBieXRlcykuCisJICovCisJbS0+Y21uZC5hZGRsX2NkYl9sZW4gPSAoYmZhX2NiX2lvaW1fZ2V0X2NkYmxlbihpb2ltLT5kaW8pIC0KKwkJCQkJRkNQX0NNTkRfQ0RCX0xFTikgLyBzaXplb2YodTMyKTsKKwlpZiAobS0+Y21uZC5hZGRsX2NkYl9sZW4pIHsKKwkJYmZhX29zX21lbWNweSgmbS0+Y21uZC5jZGIgKyAxLCAoc3RydWN0IHNjc2lfY2RiX3MgKikKKwkJCQliZmFfY2JfaW9pbV9nZXRfY2RiKGlvaW0tPmRpbykgKyAxLAorCQkJCW0tPmNtbmQuYWRkbF9jZGJfbGVuICogc2l6ZW9mKHUzMikpOworCQlmY3BfY21uZF9mY3BkbCgmbS0+Y21uZCkgPQorCQkJCWJmYV9vc19odG9ubChiZmFfY2JfaW9pbV9nZXRfc2l6ZShpb2ltLT5kaW8pKTsKKwl9CisjZW5kaWYKKworCS8qKgorCSAqIHF1ZXVlIEkvTyBtZXNzYWdlIHRvIGZpcm13YXJlCisJICovCisJYmZhX3JlcXFfcHJvZHVjZShpb2ltLT5iZmEsIGl0bmltLT5yZXFxKTsKKwlyZXR1cm4gQkZBX1RSVUU7Cit9CisKKy8qKgorICogU2V0dXAgYW55IGFkZGl0aW9uYWwgU0cgcGFnZXMgbmVlZGVkLklubGluZSBTRyBlbGVtZW50IGlzIHNldHVwCisgKiBhdCBxdWV1aW5nIHRpbWUuCisgKi8KK3N0YXRpYyBiZmFfYm9vbGVhbl90CitiZmFfaW9pbV9zZ2Vfc2V0dXAoc3RydWN0IGJmYV9pb2ltX3MgKmlvaW0pCit7CisJdTE2ICAgICAgICBuc2dwZ3M7CisKKwliZmFfYXNzZXJ0KGlvaW0tPm5zZ2VzID4gQkZJX1NHRV9JTkxJTkUpOworCisJLyoqCisJICogYWxsb2NhdGUgU0cgcGFnZXMgbmVlZGVkCisJICovCisJbnNncGdzID0gQkZBX1NHUEdfTlBBR0UoaW9pbS0+bnNnZXMpOworCWlmICghbnNncGdzKQorCQlyZXR1cm4gQkZBX1RSVUU7CisKKwlpZiAoYmZhX3NncGdfbWFsbG9jKGlvaW0tPmJmYSwgJmlvaW0tPnNncGdfcSwgbnNncGdzKQorCSAgICAhPSBCRkFfU1RBVFVTX09LKSB7CisJCWJmYV9zZ3BnX3dhaXQoaW9pbS0+YmZhLCAmaW9pbS0+aW9zcC0+c2dwZ193cWUsIG5zZ3Bncyk7CisJCXJldHVybiBCRkFfRkFMU0U7CisJfQorCisJaW9pbS0+bnNncGdzID0gbnNncGdzOworCWJmYV9pb2ltX3NncGdfc2V0dXAoaW9pbSk7CisKKwlyZXR1cm4gQkZBX1RSVUU7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfaW9pbV9zZ3BnX3NldHVwKHN0cnVjdCBiZmFfaW9pbV9zICppb2ltKQoreworCWludCAgICAgICAgICAgICBzZ2VpZCwgbnNnZXMsIGk7CisJc3RydWN0IGJmaV9zZ2VfcyAgICAgICpzZ2U7CisJc3RydWN0IGJmYV9zZ3BnX3MgKnNncGc7CisJdTMyICAgICAgICBwZ2N1bXN6OworCisJc2dlaWQgPSBCRklfU0dFX0lOTElORTsKKwlpb2ltLT5zZ3BnID0gc2dwZyA9IGJmYV9xX2ZpcnN0KCZpb2ltLT5zZ3BnX3EpOworCisJZG8geworCQlzZ2UgPSBzZ3BnLT5zZ3BnLT5zZ2VzOworCQluc2dlcyA9IGlvaW0tPm5zZ2VzIC0gc2dlaWQ7CisJCWlmIChuc2dlcyA+IEJGSV9TR1BHX0RBVEFfU0dFUykKKwkJCW5zZ2VzID0gQkZJX1NHUEdfREFUQV9TR0VTOworCisJCXBnY3Vtc3ogPSAwOworCQlmb3IgKGkgPSAwOyBpIDwgbnNnZXM7IGkrKywgc2dlKyssIHNnZWlkKyspIHsKKwkJCXNnZS0+c2dhID0gYmZhX2NiX2lvaW1fZ2V0X3NnYWRkcihpb2ltLT5kaW8sIHNnZWlkKTsKKwkJCXNnZS0+c2dfbGVuID0gYmZhX2NiX2lvaW1fZ2V0X3NnbGVuKGlvaW0tPmRpbywgc2dlaWQpOworCQkJcGdjdW1zeiArPSBzZ2UtPnNnX2xlbjsKKworCQkJLyoqCisJCQkgKiBzZXQgZmxhZ3MKKwkJCSAqLworCQkJaWYgKGkgPCAobnNnZXMgLSAxKSkKKwkJCQlzZ2UtPmZsYWdzID0gQkZJX1NHRV9EQVRBOworCQkJZWxzZSBpZiAoc2dlaWQgPCAoaW9pbS0+bnNnZXMgLSAxKSkKKwkJCQlzZ2UtPmZsYWdzID0gQkZJX1NHRV9EQVRBX0NQTDsKKwkJCWVsc2UKKwkJCQlzZ2UtPmZsYWdzID0gQkZJX1NHRV9EQVRBX0xBU1Q7CisJCX0KKworCQlzZ3BnID0gKHN0cnVjdCBiZmFfc2dwZ19zICopIGJmYV9xX25leHQoc2dwZyk7CisKKwkJLyoqCisJCSAqIHNldCB0aGUgbGluayBlbGVtZW50IG9mIGVhY2ggcGFnZQorCQkgKi8KKwkJaWYgKHNnZWlkID09IGlvaW0tPm5zZ2VzKSB7CisJCQlzZ2UtPmZsYWdzID0gQkZJX1NHRV9QR0RMRU47CisJCQlzZ2UtPnNnYS5hMzIuYWRkcl9sbyA9IDA7CisJCQlzZ2UtPnNnYS5hMzIuYWRkcl9oaSA9IDA7CisJCX0gZWxzZSB7CisJCQlzZ2UtPmZsYWdzID0gQkZJX1NHRV9MSU5LOworCQkJc2dlLT5zZ2EgPSBzZ3BnLT5zZ3BnX3BhOworCQl9CisJCXNnZS0+c2dfbGVuID0gcGdjdW1zejsKKwl9IHdoaWxlIChzZ2VpZCA8IGlvaW0tPm5zZ2VzKTsKK30KKworLyoqCisgKiBTZW5kIEkvTyBhYm9ydCByZXF1ZXN0IHRvIGZpcm13YXJlLgorICovCitzdGF0aWMgICAgICAgICAgYmZhX2Jvb2xlYW5fdAorYmZhX2lvaW1fc2VuZF9hYm9ydChzdHJ1Y3QgYmZhX2lvaW1fcyAqaW9pbSkKK3sKKwlzdHJ1Y3QgYmZhX2l0bmltX3MgICAgICAgICAgKml0bmltID0gaW9pbS0+aXRuaW07CisJc3RydWN0IGJmaV9pb2ltX2Fib3J0X3JlcV9zICptOworCWVudW0gYmZpX2lvaW1faDJpICAgICAgIG1zZ29wOworCisJLyoqCisJICogY2hlY2sgZm9yIHJvb20gaW4gcXVldWUgdG8gc2VuZCByZXF1ZXN0IG5vdworCSAqLworCW0gPSBiZmFfcmVxcV9uZXh0KGlvaW0tPmJmYSwgaXRuaW0tPnJlcXEpOworCWlmICghbSkKKwkJcmV0dXJuIEJGQV9GQUxTRTsKKworCS8qKgorCSAqIGJ1aWxkIGkvbyByZXF1ZXN0IG1lc3NhZ2UgbmV4dAorCSAqLworCWlmIChpb2ltLT5pb3NwLT5hYm9ydF9leHBsaWNpdCkKKwkJbXNnb3AgPSBCRklfSU9JTV9IMklfSU9BQk9SVF9SRVE7CisJZWxzZQorCQltc2dvcCA9IEJGSV9JT0lNX0gySV9JT0NMRUFOVVBfUkVROworCisJYmZpX2gyaV9zZXQobS0+bWgsIEJGSV9NQ19JT0lNLCBtc2dvcCwgYmZhX2xwdWlkKGlvaW0tPmJmYSkpOworCW0tPmlvX3RhZyAgICA9IGJmYV9vc19odG9ucyhpb2ltLT5pb3RhZyk7CisJbS0+YWJvcnRfdGFnID0gKytpb2ltLT5hYm9ydF90YWc7CisKKwkvKioKKwkgKiBxdWV1ZSBJL08gbWVzc2FnZSB0byBmaXJtd2FyZQorCSAqLworCWJmYV9yZXFxX3Byb2R1Y2UoaW9pbS0+YmZhLCBpdG5pbS0+cmVxcSk7CisJcmV0dXJuIEJGQV9UUlVFOworfQorCisvKioKKyAqIENhbGwgdG8gcmVzdW1lIGFueSBJL08gcmVxdWVzdHMgd2FpdGluZyBmb3Igcm9vbSBpbiByZXF1ZXN0IHF1ZXVlLgorICovCitzdGF0aWMgdm9pZAorYmZhX2lvaW1fcXJlc3VtZSh2b2lkICpjYmFyZykKK3sKKwlzdHJ1Y3QgYmZhX2lvaW1fcyAqaW9pbSA9IGNiYXJnOworCisJYmZhX2ZjcGltX3N0YXRzKGlvaW0tPmZjcGltLCBxcmVzdW1lcyk7CisJYmZhX3NtX3NlbmRfZXZlbnQoaW9pbSwgQkZBX0lPSU1fU01fUVJFU1VNRSk7Cit9CisKKworc3RhdGljIHZvaWQKK2JmYV9pb2ltX25vdGlmeV9jbGVhbnVwKHN0cnVjdCBiZmFfaW9pbV9zICppb2ltKQoreworCS8qKgorCSAqIE1vdmUgSU8gZnJvbSBpdG5pbSBxdWV1ZSB0byBmY3BpbSBnbG9iYWwgcXVldWUgc2luY2UgaXRuaW0gd2lsbCBiZQorCSAqIGZyZWVkLgorCSAqLworCWxpc3RfZGVsKCZpb2ltLT5xZSk7CisJbGlzdF9hZGRfdGFpbCgmaW9pbS0+cWUsICZpb2ltLT5mY3BpbS0+aW9pbV9jb21wX3EpOworCisJaWYgKCFpb2ltLT5pb3NwLT50c2tpbSkgeworCQlpZiAoaW9pbS0+ZmNwaW0tPmRlbGF5X2NvbXAgJiYgaW9pbS0+aXRuaW0tPmlvdG92X2FjdGl2ZSkgeworCQkJYmZhX2NiX2RlcXVldWUoJmlvaW0tPmhjYl9xZSk7CisJCQlsaXN0X2RlbCgmaW9pbS0+cWUpOworCQkJbGlzdF9hZGRfdGFpbCgmaW9pbS0+cWUsICZpb2ltLT5pdG5pbS0+ZGVsYXlfY29tcF9xKTsKKwkJfQorCQliZmFfaXRuaW1faW9kb25lKGlvaW0tPml0bmltKTsKKwl9IGVsc2UKKwkJYmZhX3Rza2ltX2lvZG9uZShpb2ltLT5pb3NwLT50c2tpbSk7Cit9CisKKy8qKgorICogCQkgIG9yIGFmdGVyIHRoZSBsaW5rIGNvbWVzIGJhY2suCisgKi8KK3ZvaWQKK2JmYV9pb2ltX2RlbGF5ZWRfY29tcChzdHJ1Y3QgYmZhX2lvaW1fcyAqaW9pbSwgYmZhX2Jvb2xlYW5fdCBpb3RvdikKK3sKKwkvKioKKwkgKiBJZiBwYXRoIHRvdiB0aW1lciBleHBpcmVkLCBmYWlsYmFjayB3aXRoIFBBVEhUT1Ygc3RhdHVzIC0gdGhlc2UKKwkgKiBJTyByZXF1ZXN0cyBhcmUgbm90IG5vcm1hbGx5IHJldHJpZWQgYnkgSU8gc3RhY2suCisJICoKKwkgKiBPdGhlcndpc2UgZGV2aWNlIGNhbWViYWNrIG9ubGluZSBhbmQgZmFpbCBpdCB3aXRoIG5vcm1hbCBmYWlsZWQKKwkgKiBzdGF0dXMgc28gdGhhdCBJTyBzdGFjayByZXRyaWVzIHRoZXNlIGZhaWxlZCBJTyByZXF1ZXN0cy4KKwkgKi8KKwlpZiAoaW90b3YpCisJCWlvaW0tPmlvX2NiZm4gPSBfX2JmYV9jYl9pb2ltX3BhdGh0b3Y7CisJZWxzZQorCQlpb2ltLT5pb19jYmZuID0gX19iZmFfY2JfaW9pbV9mYWlsZWQ7CisKKwliZmFfY2JfcXVldWUoaW9pbS0+YmZhLCAmaW9pbS0+aGNiX3FlLCBpb2ltLT5pb19jYmZuLCBpb2ltKTsKKworICAgIC8qKgorICAgICAqIE1vdmUgSU8gdG8gZmNwaW0gZ2xvYmFsIHF1ZXVlIHNpbmNlIGl0bmltIHdpbGwgYmUKKyAgICAgKiBmcmVlZC4KKyAgICAgKi8KKyAgICBsaXN0X2RlbCgmaW9pbS0+cWUpOworICAgIGxpc3RfYWRkX3RhaWwoJmlvaW0tPnFlLCAmaW9pbS0+ZmNwaW0tPmlvaW1fY29tcF9xKTsKK30KKworCisKKy8qKgorICogIGJmYV9pb2ltX2ZyaWVuZAorICovCisKKy8qKgorICogTWVtb3J5IGFsbG9jYXRpb24gYW5kIGluaXRpYWxpemF0aW9uLgorICovCit2b2lkCitiZmFfaW9pbV9hdHRhY2goc3RydWN0IGJmYV9mY3BpbV9tb2RfcyAqZmNwaW0sIHN0cnVjdCBiZmFfbWVtaW5mb19zICptaW5mbykKK3sKKwlzdHJ1Y3QgYmZhX2lvaW1fcwkJKmlvaW07CisJc3RydWN0IGJmYV9pb2ltX3NwX3MJKmlvc3A7CisJdTE2CQlpOworCXU4CQkJKnNuc2luZm87CisJdTMyCQlzbnNidWZzejsKKworCS8qKgorCSAqIGNsYWltIG1lbW9yeSBmaXJzdAorCSAqLworCWlvaW0gPSAoc3RydWN0IGJmYV9pb2ltX3MgKikgYmZhX21lbWluZm9fa3ZhKG1pbmZvKTsKKwlmY3BpbS0+aW9pbV9hcnIgPSBpb2ltOworCWJmYV9tZW1pbmZvX2t2YShtaW5mbykgPSAodTggKikgKGlvaW0gKyBmY3BpbS0+bnVtX2lvaW1fcmVxcyk7CisKKwlpb3NwID0gKHN0cnVjdCBiZmFfaW9pbV9zcF9zICopIGJmYV9tZW1pbmZvX2t2YShtaW5mbyk7CisJZmNwaW0tPmlvaW1fc3BfYXJyID0gaW9zcDsKKwliZmFfbWVtaW5mb19rdmEobWluZm8pID0gKHU4ICopIChpb3NwICsgZmNwaW0tPm51bV9pb2ltX3JlcXMpOworCisJLyoqCisJICogQ2xhaW0gRE1BIG1lbW9yeSBmb3IgcGVyIElPIHNlbnNlIGRhdGEuCisJICovCisJc25zYnVmc3ogPSBmY3BpbS0+bnVtX2lvaW1fcmVxcyAqIEJGSV9JT0lNX1NOU0xFTjsKKwlmY3BpbS0+c25zYmFzZS5wYSAgPSBiZmFfbWVtaW5mb19kbWFfcGh5cyhtaW5mbyk7CisJYmZhX21lbWluZm9fZG1hX3BoeXMobWluZm8pICs9IHNuc2J1ZnN6OworCisJZmNwaW0tPnNuc2Jhc2Uua3ZhID0gYmZhX21lbWluZm9fZG1hX3ZpcnQobWluZm8pOworCWJmYV9tZW1pbmZvX2RtYV92aXJ0KG1pbmZvKSArPSBzbnNidWZzejsKKwlzbnNpbmZvID0gZmNwaW0tPnNuc2Jhc2Uua3ZhOworCWJmYV9pb2NmY19zZXRfc25zYmFzZShmY3BpbS0+YmZhLCBmY3BpbS0+c25zYmFzZS5wYSk7CisKKwkvKioKKwkgKiBJbml0aWFsaXplIGlvaW0gZnJlZSBxdWV1ZXMKKwkgKi8KKwlJTklUX0xJU1RfSEVBRCgmZmNwaW0tPmlvaW1fZnJlZV9xKTsKKwlJTklUX0xJU1RfSEVBRCgmZmNwaW0tPmlvaW1fcmVzZnJlZV9xKTsKKwlJTklUX0xJU1RfSEVBRCgmZmNwaW0tPmlvaW1fY29tcF9xKTsKKworCWZvciAoaSA9IDA7IGkgPCBmY3BpbS0+bnVtX2lvaW1fcmVxczsKKwkgICAgIGkrKywgaW9pbSsrLCBpb3NwKyssIHNuc2luZm8gKz0gQkZJX0lPSU1fU05TTEVOKSB7CisJCS8qCisJCSAqIGluaXRpYWxpemUgSU9JTQorCQkgKi8KKwkJYmZhX29zX21lbXNldChpb2ltLCAwLCBzaXplb2Yoc3RydWN0IGJmYV9pb2ltX3MpKTsKKwkJaW9pbS0+aW90YWcgICA9IGk7CisJCWlvaW0tPmJmYSAgICAgPSBmY3BpbS0+YmZhOworCQlpb2ltLT5mY3BpbSAgID0gZmNwaW07CisJCWlvaW0tPmlvc3AgICAgPSBpb3NwOworCQlpb3NwLT5zbnNpbmZvID0gc25zaW5mbzsKKwkJSU5JVF9MSVNUX0hFQUQoJmlvaW0tPnNncGdfcSk7CisJCWJmYV9yZXFxX3dpbml0KCZpb2ltLT5pb3NwLT5yZXFxX3dhaXQsCisJCQkJICAgYmZhX2lvaW1fcXJlc3VtZSwgaW9pbSk7CisJCWJmYV9zZ3BnX3dpbml0KCZpb2ltLT5pb3NwLT5zZ3BnX3dxZSwKKwkJCQkgICBiZmFfaW9pbV9zZ3BnX2FsbG9jZWQsIGlvaW0pOworCQliZmFfc21fc2V0X3N0YXRlKGlvaW0sIGJmYV9pb2ltX3NtX3VuaW5pdCk7CisKKwkJbGlzdF9hZGRfdGFpbCgmaW9pbS0+cWUsICZmY3BpbS0+aW9pbV9mcmVlX3EpOworCX0KK30KKworLyoqCisgKiBEcml2ZXIgZGV0YWNoIHRpbWUgY2FsbC4KKyAqLwordm9pZAorYmZhX2lvaW1fZGV0YWNoKHN0cnVjdCBiZmFfZmNwaW1fbW9kX3MgKmZjcGltKQoreworfQorCit2b2lkCitiZmFfaW9pbV9pc3Ioc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBiZmlfbXNnX3MgKm0pCit7CisJc3RydWN0IGJmYV9mY3BpbV9tb2RfcyAqZmNwaW0gPSBCRkFfRkNQSU1fTU9EKGJmYSk7CisJc3RydWN0IGJmaV9pb2ltX3JzcF9zICpyc3AgPSAoc3RydWN0IGJmaV9pb2ltX3JzcF9zICopIG07CisJc3RydWN0IGJmYV9pb2ltX3MgKmlvaW07CisJdTE2ICAgICAgICBpb3RhZzsKKwllbnVtIGJmYV9pb2ltX2V2ZW50IGV2dCA9IEJGQV9JT0lNX1NNX0NPTVA7CisKKwlpb3RhZyA9IGJmYV9vc19udG9ocyhyc3AtPmlvX3RhZyk7CisKKwlpb2ltID0gQkZBX0lPSU1fRlJPTV9UQUcoZmNwaW0sIGlvdGFnKTsKKwliZmFfYXNzZXJ0KGlvaW0tPmlvdGFnID09IGlvdGFnKTsKKworCWJmYV90cmMoaW9pbS0+YmZhLCBpb2ltLT5pb3RhZyk7CisJYmZhX3RyYyhpb2ltLT5iZmEsIHJzcC0+aW9fc3RhdHVzKTsKKwliZmFfdHJjKGlvaW0tPmJmYSwgcnNwLT5yZXVzZV9pb190YWcpOworCisJaWYgKGJmYV9zbV9jbXBfc3RhdGUoaW9pbSwgYmZhX2lvaW1fc21fYWN0aXZlKSkKKwkJYmZhX29zX2Fzc2lnbihpb2ltLT5pb3NwLT5jb21wX3JzcG1zZywgKm0pOworCisJc3dpdGNoIChyc3AtPmlvX3N0YXR1cykgeworCWNhc2UgQkZJX0lPSU1fU1RTX09LOgorCQliZmFfZmNwaW1fc3RhdHMoZmNwaW0sIGlvY29tcF9vayk7CisJCWlmIChyc3AtPnJldXNlX2lvX3RhZyA9PSAwKQorCQkJZXZ0ID0gQkZBX0lPSU1fU01fRE9ORTsKKwkJZWxzZQorCQkJZXZ0ID0gQkZBX0lPSU1fU01fQ09NUDsKKwkJYnJlYWs7CisKKwljYXNlIEJGSV9JT0lNX1NUU19USU1FRE9VVDoKKwljYXNlIEJGSV9JT0lNX1NUU19BQk9SVEVEOgorCQlyc3AtPmlvX3N0YXR1cyA9IEJGSV9JT0lNX1NUU19BQk9SVEVEOworCQliZmFfZmNwaW1fc3RhdHMoZmNwaW0sIGlvY29tcF9hYm9ydGVkKTsKKwkJaWYgKHJzcC0+cmV1c2VfaW9fdGFnID09IDApCisJCQlldnQgPSBCRkFfSU9JTV9TTV9ET05FOworCQllbHNlCisJCQlldnQgPSBCRkFfSU9JTV9TTV9DT01QOworCQlicmVhazsKKworCWNhc2UgQkZJX0lPSU1fU1RTX1BST1RPX0VSUjoKKwkJYmZhX2ZjcGltX3N0YXRzKGZjcGltLCBpb2NvbV9wcm90b19lcnIpOworCQliZmFfYXNzZXJ0KHJzcC0+cmV1c2VfaW9fdGFnKTsKKwkJZXZ0ID0gQkZBX0lPSU1fU01fQ09NUDsKKwkJYnJlYWs7CisKKwljYXNlIEJGSV9JT0lNX1NUU19TUUVSX05FRURFRDoKKwkJYmZhX2ZjcGltX3N0YXRzKGZjcGltLCBpb2NvbV9zcWVyX25lZWRlZCk7CisJCWJmYV9hc3NlcnQocnNwLT5yZXVzZV9pb190YWcgPT0gMCk7CisJCWV2dCA9IEJGQV9JT0lNX1NNX1NRUkVUUlk7CisJCWJyZWFrOworCisJY2FzZSBCRklfSU9JTV9TVFNfUkVTX0ZSRUU6CisJCWJmYV9mY3BpbV9zdGF0cyhmY3BpbSwgaW9jb21fcmVzX2ZyZWUpOworCQlldnQgPSBCRkFfSU9JTV9TTV9GUkVFOworCQlicmVhazsKKworCWNhc2UgQkZJX0lPSU1fU1RTX0hPU1RfQUJPUlRFRDoKKwkJYmZhX2ZjcGltX3N0YXRzKGZjcGltLCBpb2NvbV9ob3N0YWJydHMpOworCQlpZiAocnNwLT5hYm9ydF90YWcgIT0gaW9pbS0+YWJvcnRfdGFnKSB7CisJCQliZmFfdHJjKGlvaW0tPmJmYSwgcnNwLT5hYm9ydF90YWcpOworCQkJYmZhX3RyYyhpb2ltLT5iZmEsIGlvaW0tPmFib3J0X3RhZyk7CisJCQlyZXR1cm47CisJCX0KKworCQlpZiAocnNwLT5yZXVzZV9pb190YWcpCisJCQlldnQgPSBCRkFfSU9JTV9TTV9BQk9SVF9DT01QOworCQllbHNlCisJCQlldnQgPSBCRkFfSU9JTV9TTV9BQk9SVF9ET05FOworCQlicmVhazsKKworCWNhc2UgQkZJX0lPSU1fU1RTX1VUQUc6CisJCWJmYV9mY3BpbV9zdGF0cyhmY3BpbSwgaW9jb21fdXRhZ3MpOworCQlldnQgPSBCRkFfSU9JTV9TTV9DT01QX1VUQUc7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9CisKKwliZmFfc21fc2VuZF9ldmVudChpb2ltLCBldnQpOworfQorCit2b2lkCitiZmFfaW9pbV9nb29kX2NvbXBfaXNyKHN0cnVjdCBiZmFfcyAqYmZhLCBzdHJ1Y3QgYmZpX21zZ19zICptKQoreworCXN0cnVjdCBiZmFfZmNwaW1fbW9kX3MgKmZjcGltID0gQkZBX0ZDUElNX01PRChiZmEpOworCXN0cnVjdCBiZmlfaW9pbV9yc3BfcyAqcnNwID0gKHN0cnVjdCBiZmlfaW9pbV9yc3BfcyAqKSBtOworCXN0cnVjdCBiZmFfaW9pbV9zICppb2ltOworCXUxNiAgICAgICAgaW90YWc7CisKKwlpb3RhZyA9IGJmYV9vc19udG9ocyhyc3AtPmlvX3RhZyk7CisKKwlpb2ltID0gQkZBX0lPSU1fRlJPTV9UQUcoZmNwaW0sIGlvdGFnKTsKKwliZmFfYXNzZXJ0KGlvaW0tPmlvdGFnID09IGlvdGFnKTsKKworCWJmYV90cmNfZnAoaW9pbS0+YmZhLCBpb2ltLT5pb3RhZyk7CisJYmZhX3NtX3NlbmRfZXZlbnQoaW9pbSwgQkZBX0lPSU1fU01fQ09NUF9HT09EKTsKK30KKworLyoqCisgKiBDYWxsZWQgYnkgaXRuaW0gdG8gY2xlYW4gdXAgSU8gd2hpbGUgZ29pbmcgb2ZmbGluZS4KKyAqLwordm9pZAorYmZhX2lvaW1fY2xlYW51cChzdHJ1Y3QgYmZhX2lvaW1fcyAqaW9pbSkKK3sKKwliZmFfdHJjKGlvaW0tPmJmYSwgaW9pbS0+aW90YWcpOworCWJmYV9mY3BpbV9zdGF0cyhpb2ltLT5mY3BpbSwgaW9fY2xlYW51cHMpOworCisJaW9pbS0+aW9zcC0+dHNraW0gPSBOVUxMOworCWJmYV9zbV9zZW5kX2V2ZW50KGlvaW0sIEJGQV9JT0lNX1NNX0NMRUFOVVApOworfQorCit2b2lkCitiZmFfaW9pbV9jbGVhbnVwX3RtKHN0cnVjdCBiZmFfaW9pbV9zICppb2ltLCBzdHJ1Y3QgYmZhX3Rza2ltX3MgKnRza2ltKQoreworCWJmYV90cmMoaW9pbS0+YmZhLCBpb2ltLT5pb3RhZyk7CisJYmZhX2ZjcGltX3N0YXRzKGlvaW0tPmZjcGltLCBpb190bWFib3J0cyk7CisKKwlpb2ltLT5pb3NwLT50c2tpbSA9IHRza2ltOworCWJmYV9zbV9zZW5kX2V2ZW50KGlvaW0sIEJGQV9JT0lNX1NNX0NMRUFOVVApOworfQorCisvKioKKyAqIElPQyBmYWlsdXJlIGhhbmRsaW5nLgorICovCit2b2lkCitiZmFfaW9pbV9pb2NkaXNhYmxlKHN0cnVjdCBiZmFfaW9pbV9zICppb2ltKQoreworCWJmYV9zbV9zZW5kX2V2ZW50KGlvaW0sIEJGQV9JT0lNX1NNX0hXRkFJTCk7Cit9CisKKy8qKgorICogSU8gb2ZmbGluZSBUT1YgcG9wcGVkLiBGYWlsIHRoZSBwZW5kaW5nIElPLgorICovCit2b2lkCitiZmFfaW9pbV90b3Yoc3RydWN0IGJmYV9pb2ltX3MgKmlvaW0pCit7CisJYmZhX3NtX3NlbmRfZXZlbnQoaW9pbSwgQkZBX0lPSU1fU01fSU9UT1YpOworfQorCisKKworLyoqCisgKiAgYmZhX2lvaW1fYXBpCisgKi8KKworLyoqCisgKiBBbGxvY2F0ZSBJT0lNIHJlc291cmNlIGZvciBpbml0aWF0b3IgbW9kZSBJL08gcmVxdWVzdC4KKyAqLworc3RydWN0IGJmYV9pb2ltX3MgKgorYmZhX2lvaW1fYWxsb2Moc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBiZmFkX2lvaW1fcyAqZGlvLAorCQlzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltLCB1MTYgbnNnZXMpCit7CisJc3RydWN0IGJmYV9mY3BpbV9tb2RfcyAqZmNwaW0gPSBCRkFfRkNQSU1fTU9EKGJmYSk7CisJc3RydWN0IGJmYV9pb2ltX3MgKmlvaW07CisKKwkvKioKKwkgKiBhbG9jYXRlIElPSU0gcmVzb3VyY2UKKwkgKi8KKwliZmFfcV9kZXEoJmZjcGltLT5pb2ltX2ZyZWVfcSwgJmlvaW0pOworCWlmICghaW9pbSkgeworCQliZmFfZmNwaW1fc3RhdHMoZmNwaW0sIG5vX2lvdGFncyk7CisJCXJldHVybiBOVUxMOworCX0KKworCWlvaW0tPmRpbyA9IGRpbzsKKwlpb2ltLT5pdG5pbSA9IGl0bmltOworCWlvaW0tPm5zZ2VzID0gbnNnZXM7CisJaW9pbS0+bnNncGdzID0gMDsKKworCWJmYV9zdGF0cyhmY3BpbSwgdG90YWxfaW9zKTsKKwliZmFfc3RhdHMoaXRuaW0sIGlvcyk7CisJZmNwaW0tPmlvc19hY3RpdmUrKzsKKworCWxpc3RfYWRkX3RhaWwoJmlvaW0tPnFlLCAmaXRuaW0tPmlvX3EpOworCWJmYV90cmNfZnAoaW9pbS0+YmZhLCBpb2ltLT5pb3RhZyk7CisKKwlyZXR1cm4gaW9pbTsKK30KKwordm9pZAorYmZhX2lvaW1fZnJlZShzdHJ1Y3QgYmZhX2lvaW1fcyAqaW9pbSkKK3sKKwlzdHJ1Y3QgYmZhX2ZjcGltX21vZF9zICpmY3BpbSA9IGlvaW0tPmZjcGltOworCisJYmZhX3RyY19mcChpb2ltLT5iZmEsIGlvaW0tPmlvdGFnKTsKKwliZmFfYXNzZXJ0X2ZwKGJmYV9zbV9jbXBfc3RhdGUoaW9pbSwgYmZhX2lvaW1fc21fdW5pbml0KSk7CisKKwliZmFfYXNzZXJ0X2ZwKGxpc3RfZW1wdHkoJmlvaW0tPnNncGdfcSkKKwkJICAgfHwgKGlvaW0tPm5zZ2VzID4gQkZJX1NHRV9JTkxJTkUpKTsKKworCWlmIChpb2ltLT5uc2dwZ3MgPiAwKQorCQliZmFfc2dwZ19tZnJlZShpb2ltLT5iZmEsICZpb2ltLT5zZ3BnX3EsIGlvaW0tPm5zZ3Bncyk7CisKKwliZmFfc3RhdHMoaW9pbS0+aXRuaW0sIGlvX2NvbXBzKTsKKwlmY3BpbS0+aW9zX2FjdGl2ZS0tOworCisJbGlzdF9kZWwoJmlvaW0tPnFlKTsKKwlsaXN0X2FkZF90YWlsKCZpb2ltLT5xZSwgJmZjcGltLT5pb2ltX2ZyZWVfcSk7Cit9CisKK3ZvaWQKK2JmYV9pb2ltX3N0YXJ0KHN0cnVjdCBiZmFfaW9pbV9zICppb2ltKQoreworCWJmYV90cmNfZnAoaW9pbS0+YmZhLCBpb2ltLT5pb3RhZyk7CisJYmZhX3NtX3NlbmRfZXZlbnQoaW9pbSwgQkZBX0lPSU1fU01fU1RBUlQpOworfQorCisvKioKKyAqIERyaXZlciBJL08gYWJvcnQgcmVxdWVzdC4KKyAqLwordm9pZAorYmZhX2lvaW1fYWJvcnQoc3RydWN0IGJmYV9pb2ltX3MgKmlvaW0pCit7CisJYmZhX3RyYyhpb2ltLT5iZmEsIGlvaW0tPmlvdGFnKTsKKwliZmFfZmNwaW1fc3RhdHMoaW9pbS0+ZmNwaW0sIGlvX2Fib3J0cyk7CisJYmZhX3NtX3NlbmRfZXZlbnQoaW9pbSwgQkZBX0lPSU1fU01fQUJPUlQpOworfQorCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2l0bmltLmMgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9pdG5pbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkNWM2MWEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9pdG5pbS5jCkBAIC0wLDAgKzEsMTA4OCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8YmZhLmg+CisjaW5jbHVkZSA8YmZhX2ZjcGltLmg+CisjaW5jbHVkZSAiYmZhX2ZjcGltX3ByaXYuaCIKKworQkZBX1RSQ19GSUxFKEhBTCwgSVROSU0pOworCisjZGVmaW5lIEJGQV9JVE5JTV9GUk9NX1RBRyhfZmNwaW0sIF90YWcpCQkJCVwKKwkoKF9mY3BpbSktPml0bmltX2FyciArICgoX3RhZykgJiAoKF9mY3BpbSktPm51bV9pdG5pbXMgLSAxKSkpCisKKyNkZWZpbmUgYmZhX2ZjcGltX2FkZGl0bihfX2l0bmltKQkJCQkJXAorCWxpc3RfYWRkX3RhaWwoJihfX2l0bmltKS0+cWUsICYoX19pdG5pbSktPmZjcGltLT5pdG5pbV9xKQorI2RlZmluZSBiZmFfZmNwaW1fZGVsaXRuKF9faXRuaW0pCWRvIHsJCQkJXAorCWJmYV9hc3NlcnQoYmZhX3FfaXNfb25fcSgmKF9faXRuaW0pLT5mY3BpbS0+aXRuaW1fcSwgX19pdG5pbSkpOyAgICAgIFwKKwlsaXN0X2RlbCgmKF9faXRuaW0pLT5xZSk7ICAgICAgXAorCWJmYV9hc3NlcnQobGlzdF9lbXB0eSgmKF9faXRuaW0pLT5pb19xKSk7ICAgICAgXAorCWJmYV9hc3NlcnQobGlzdF9lbXB0eSgmKF9faXRuaW0pLT5pb19jbGVhbnVwX3EpKTsgICAgICBcCisJYmZhX2Fzc2VydChsaXN0X2VtcHR5KCYoX19pdG5pbSktPnBlbmRpbmdfcSkpOyAgICAgIFwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgYmZhX2l0bmltX29ubGluZV9jYihfX2l0bmltKSBkbyB7CQkJCVwKKwlpZiAoKF9faXRuaW0pLT5iZmEtPmZjcykJCQkJCVwKKwkJYmZhX2NiX2l0bmltX29ubGluZSgoX19pdG5pbSktPmRpdG4pOyAgICAgIFwKKwllbHNlIHsJCQkJCQkJCVwKKwkJYmZhX2NiX3F1ZXVlKChfX2l0bmltKS0+YmZhLCAmKF9faXRuaW0pLT5oY2JfcWUsCVwKKwkJX19iZmFfY2JfaXRuaW1fb25saW5lLCAoX19pdG5pbSkpOyAgICAgIFwKKwl9CQkJCQkJCQlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIGJmYV9pdG5pbV9vZmZsaW5lX2NiKF9faXRuaW0pIGRvIHsJCQkJXAorCWlmICgoX19pdG5pbSktPmJmYS0+ZmNzKQkJCQkJXAorCQliZmFfY2JfaXRuaW1fb2ZmbGluZSgoX19pdG5pbSktPmRpdG4pOyAgICAgIFwKKwllbHNlIHsJCQkJCQkJCVwKKwkJYmZhX2NiX3F1ZXVlKChfX2l0bmltKS0+YmZhLCAmKF9faXRuaW0pLT5oY2JfcWUsCVwKKwkJX19iZmFfY2JfaXRuaW1fb2ZmbGluZSwgKF9faXRuaW0pKTsgICAgICBcCisJfQkJCQkJCQkJXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBiZmFfaXRuaW1fc2xlcl9jYihfX2l0bmltKSBkbyB7CQkJCQlcCisJaWYgKChfX2l0bmltKS0+YmZhLT5mY3MpCQkJCQlcCisJCWJmYV9jYl9pdG5pbV9zbGVyKChfX2l0bmltKS0+ZGl0bik7ICAgICAgXAorCWVsc2UgewkJCQkJCQkJXAorCQliZmFfY2JfcXVldWUoKF9faXRuaW0pLT5iZmEsICYoX19pdG5pbSktPmhjYl9xZSwJXAorCQlfX2JmYV9jYl9pdG5pbV9zbGVyLCAoX19pdG5pbSkpOyAgICAgIFwKKwl9CQkJCQkJCQlcCit9IHdoaWxlICgwKQorCisvKgorICogZm9yd2FyZCBkZWNsYXJhdGlvbnMKKyAqLworc3RhdGljIHZvaWQgICAgIGJmYV9pdG5pbV9pb2NkaXNhYmxlX2NsZWFudXAoc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSk7CitzdGF0aWMgYmZhX2Jvb2xlYW5fdCBiZmFfaXRuaW1fc2VuZF9md2NyZWF0ZShzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltKTsKK3N0YXRpYyBiZmFfYm9vbGVhbl90IGJmYV9pdG5pbV9zZW5kX2Z3ZGVsZXRlKHN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0pOworc3RhdGljIHZvaWQgICAgIGJmYV9pdG5pbV9jbGVhbnBfY29tcCh2b2lkICppdG5pbV9jYmFyZyk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2l0bmltX2NsZWFudXAoc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSk7CitzdGF0aWMgdm9pZCAgICAgX19iZmFfY2JfaXRuaW1fb25saW5lKHZvaWQgKmNiYXJnLCBiZmFfYm9vbGVhbl90IGNvbXBsZXRlKTsKK3N0YXRpYyB2b2lkICAgICBfX2JmYV9jYl9pdG5pbV9vZmZsaW5lKHZvaWQgKmNiYXJnLCBiZmFfYm9vbGVhbl90IGNvbXBsZXRlKTsKK3N0YXRpYyB2b2lkICAgICBfX2JmYV9jYl9pdG5pbV9zbGVyKHZvaWQgKmNiYXJnLCBiZmFfYm9vbGVhbl90IGNvbXBsZXRlKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfaXRuaW1faW90b3Zfb25saW5lKHN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0pOworc3RhdGljIHZvaWQgICAgIGJmYV9pdG5pbV9pb3Rvdl9jbGVhbnVwKHN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0pOworc3RhdGljIHZvaWQgICAgIGJmYV9pdG5pbV9pb3Rvdih2b2lkICppdG5pbV9hcmcpOworc3RhdGljIHZvaWQgICAgIGJmYV9pdG5pbV9pb3Rvdl9zdGFydChzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfaXRuaW1faW90b3Zfc3RvcChzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfaXRuaW1faW90b3ZfZGVsZXRlKHN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0pOworCisvKioKKyAqICBiZmFfaXRuaW1fc20gQkZBIGl0bmltIHN0YXRlIG1hY2hpbmUKKyAqLworCisKK2VudW0gYmZhX2l0bmltX2V2ZW50IHsKKwlCRkFfSVROSU1fU01fQ1JFQVRFID0gMSwJLyogIGl0bmltIGlzIGNyZWF0ZWQgKi8KKwlCRkFfSVROSU1fU01fT05MSU5FID0gMiwJLyogIGl0bmltIGlzIG9ubGluZSAqLworCUJGQV9JVE5JTV9TTV9PRkZMSU5FID0gMywJLyogIGl0bmltIGlzIG9mZmxpbmUgKi8KKwlCRkFfSVROSU1fU01fRldSU1AgPSA0LAkJLyogIGZpcm13YXJlIHJlc3BvbnNlICovCisJQkZBX0lUTklNX1NNX0RFTEVURSA9IDUsCS8qICBkZWxldGluZyBhbiBleGlzdGluZyBpdG5pbSAqLworCUJGQV9JVE5JTV9TTV9DTEVBTlVQID0gNiwJLyogIElPIGNsZWFudXAgY29tcGxldGlvbiAqLworCUJGQV9JVE5JTV9TTV9TTEVSID0gNywJCS8qICBzZWNvbmQgbGV2ZWwgZXJyb3IgcmVjb3ZlcnkgKi8KKwlCRkFfSVROSU1fU01fSFdGQUlMID0gOCwJLyogIElPQyBoL3cgZmFpbHVyZSBldmVudCAqLworCUJGQV9JVE5JTV9TTV9RUkVTVU1FID0gOSwJLyogIHF1ZXVlIHNwYWNlIGF2YWlsYWJsZSAqLworfTsKKworc3RhdGljIHZvaWQgICAgIGJmYV9pdG5pbV9zbV91bmluaXQoc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSwKKwkJCQkJZW51bSBiZmFfaXRuaW1fZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9pdG5pbV9zbV9jcmVhdGVkKHN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0sCisJCQkJCSBlbnVtIGJmYV9pdG5pbV9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2l0bmltX3NtX2Z3Y3JlYXRlKHN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0sCisJCQkJCSAgZW51bSBiZmFfaXRuaW1fZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQJYmZhX2l0bmltX3NtX2RlbGV0ZV9wZW5kaW5nKHN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0sCisJCQkJZW51bSBiZmFfaXRuaW1fZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9pdG5pbV9zbV9vbmxpbmUoc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSwKKwkJCQkJZW51bSBiZmFfaXRuaW1fZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9pdG5pbV9zbV9zbGVyKHN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0sCisJCQkJICAgICAgZW51bSBiZmFfaXRuaW1fZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9pdG5pbV9zbV9jbGVhbnVwX29mZmxpbmUoc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSwKKwkJCQkJCSBlbnVtIGJmYV9pdG5pbV9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2l0bmltX3NtX2NsZWFudXBfZGVsZXRlKHN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0sCisJCQkJCQllbnVtIGJmYV9pdG5pbV9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2l0bmltX3NtX2Z3ZGVsZXRlKHN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0sCisJCQkJCSAgZW51bSBiZmFfaXRuaW1fZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9pdG5pbV9zbV9vZmZsaW5lKHN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0sCisJCQkJCSBlbnVtIGJmYV9pdG5pbV9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2l0bmltX3NtX2lvY2Rpc2FibGUoc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSwKKwkJCQkJICAgIGVudW0gYmZhX2l0bmltX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfaXRuaW1fc21fZGVsZXRpbmcoc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSwKKwkJCQkJICBlbnVtIGJmYV9pdG5pbV9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2l0bmltX3NtX2Z3Y3JlYXRlX3FmdWxsKHN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0sCisJCQkJCSAgZW51bSBiZmFfaXRuaW1fZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9pdG5pbV9zbV9md2RlbGV0ZV9xZnVsbChzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltLAorCQkJCQkgIGVudW0gYmZhX2l0bmltX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfaXRuaW1fc21fZGVsZXRpbmdfcWZ1bGwoc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSwKKwkJCQkJICBlbnVtIGJmYV9pdG5pbV9ldmVudCBldmVudCk7CisKKy8qKgorICogCQlCZWdpbm5pbmcvdW5hbGxvY2F0ZWQgc3RhdGUgLSBubyBldmVudHMgZXhwZWN0ZWQuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaXRuaW1fc21fdW5pbml0KHN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0sIGVudW0gYmZhX2l0bmltX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMoaXRuaW0tPmJmYSwgaXRuaW0tPnJwb3J0LT5ycG9ydF90YWcpOworCWJmYV90cmMoaXRuaW0tPmJmYSwgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX0lUTklNX1NNX0NSRUFURToKKwkJYmZhX3NtX3NldF9zdGF0ZShpdG5pbSwgYmZhX2l0bmltX3NtX2NyZWF0ZWQpOworCQlpdG5pbS0+aXNfb25saW5lID0gQkZBX0ZBTFNFOworCQliZmFfZmNwaW1fYWRkaXRuKGl0bmltKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworLyoqCisgKiAJCUJlZ2lubmluZyBzdGF0ZSwgb25seSBvbmxpbmUgZXZlbnQgZXhwZWN0ZWQuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaXRuaW1fc21fY3JlYXRlZChzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltLCBlbnVtIGJmYV9pdG5pbV9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKGl0bmltLT5iZmEsIGl0bmltLT5ycG9ydC0+cnBvcnRfdGFnKTsKKwliZmFfdHJjKGl0bmltLT5iZmEsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9JVE5JTV9TTV9PTkxJTkU6CisJCWlmIChiZmFfaXRuaW1fc2VuZF9md2NyZWF0ZShpdG5pbSkpCisJCQliZmFfc21fc2V0X3N0YXRlKGl0bmltLCBiZmFfaXRuaW1fc21fZndjcmVhdGUpOworCQllbHNlCisJCQliZmFfc21fc2V0X3N0YXRlKGl0bmltLCBiZmFfaXRuaW1fc21fZndjcmVhdGVfcWZ1bGwpOworCQlicmVhazsKKworCWNhc2UgQkZBX0lUTklNX1NNX0RFTEVURToKKwkJYmZhX3NtX3NldF9zdGF0ZShpdG5pbSwgYmZhX2l0bmltX3NtX3VuaW5pdCk7CisJCWJmYV9mY3BpbV9kZWxpdG4oaXRuaW0pOworCQlicmVhazsKKworCWNhc2UgQkZBX0lUTklNX1NNX0hXRkFJTDoKKwkJYmZhX3NtX3NldF9zdGF0ZShpdG5pbSwgYmZhX2l0bmltX3NtX2lvY2Rpc2FibGUpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqIAkJV2FpdGluZyBmb3IgaXRuaW0gY3JlYXRlIHJlc3BvbnNlIGZyb20gZmlybXdhcmUuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaXRuaW1fc21fZndjcmVhdGUoc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSwgZW51bSBiZmFfaXRuaW1fZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhpdG5pbS0+YmZhLCBpdG5pbS0+cnBvcnQtPnJwb3J0X3RhZyk7CisJYmZhX3RyYyhpdG5pbS0+YmZhLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfSVROSU1fU01fRldSU1A6CisJCWJmYV9zbV9zZXRfc3RhdGUoaXRuaW0sIGJmYV9pdG5pbV9zbV9vbmxpbmUpOworCQlpdG5pbS0+aXNfb25saW5lID0gQkZBX1RSVUU7CisJCWJmYV9pdG5pbV9pb3Rvdl9vbmxpbmUoaXRuaW0pOworCQliZmFfaXRuaW1fb25saW5lX2NiKGl0bmltKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9JVE5JTV9TTV9ERUxFVEU6CisJCWJmYV9zbV9zZXRfc3RhdGUoaXRuaW0sIGJmYV9pdG5pbV9zbV9kZWxldGVfcGVuZGluZyk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfSVROSU1fU01fT0ZGTElORToKKwkJaWYgKGJmYV9pdG5pbV9zZW5kX2Z3ZGVsZXRlKGl0bmltKSkKKwkJCWJmYV9zbV9zZXRfc3RhdGUoaXRuaW0sIGJmYV9pdG5pbV9zbV9md2RlbGV0ZSk7CisJCWVsc2UKKwkJCWJmYV9zbV9zZXRfc3RhdGUoaXRuaW0sIGJmYV9pdG5pbV9zbV9md2RlbGV0ZV9xZnVsbCk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfSVROSU1fU01fSFdGQUlMOgorCQliZmFfc21fc2V0X3N0YXRlKGl0bmltLCBiZmFfaXRuaW1fc21faW9jZGlzYWJsZSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfaXRuaW1fc21fZndjcmVhdGVfcWZ1bGwoc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSwKKwkJCWVudW0gYmZhX2l0bmltX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMoaXRuaW0tPmJmYSwgaXRuaW0tPnJwb3J0LT5ycG9ydF90YWcpOworCWJmYV90cmMoaXRuaW0tPmJmYSwgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX0lUTklNX1NNX1FSRVNVTUU6CisJCWJmYV9zbV9zZXRfc3RhdGUoaXRuaW0sIGJmYV9pdG5pbV9zbV9md2NyZWF0ZSk7CisJCWJmYV9pdG5pbV9zZW5kX2Z3Y3JlYXRlKGl0bmltKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9JVE5JTV9TTV9ERUxFVEU6CisJCWJmYV9zbV9zZXRfc3RhdGUoaXRuaW0sIGJmYV9pdG5pbV9zbV91bmluaXQpOworCQliZmFfcmVxcV93Y2FuY2VsKCZpdG5pbS0+cmVxcV93YWl0KTsKKwkJYmZhX2ZjcGltX2RlbGl0bihpdG5pbSk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfSVROSU1fU01fT0ZGTElORToKKwkJYmZhX3NtX3NldF9zdGF0ZShpdG5pbSwgYmZhX2l0bmltX3NtX29mZmxpbmUpOworCQliZmFfcmVxcV93Y2FuY2VsKCZpdG5pbS0+cmVxcV93YWl0KTsKKwkJYmZhX2l0bmltX29mZmxpbmVfY2IoaXRuaW0pOworCQlicmVhazsKKworCWNhc2UgQkZBX0lUTklNX1NNX0hXRkFJTDoKKwkJYmZhX3NtX3NldF9zdGF0ZShpdG5pbSwgYmZhX2l0bmltX3NtX2lvY2Rpc2FibGUpOworCQliZmFfcmVxcV93Y2FuY2VsKCZpdG5pbS0+cmVxcV93YWl0KTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworLyoqCisgKiAJV2FpdGluZyBmb3IgaXRuaW0gY3JlYXRlIHJlc3BvbnNlIGZyb20gZmlybXdhcmUsIGEgZGVsZXRlIGlzIHBlbmRpbmcuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaXRuaW1fc21fZGVsZXRlX3BlbmRpbmcoc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSwKKwkJCQllbnVtIGJmYV9pdG5pbV9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKGl0bmltLT5iZmEsIGl0bmltLT5ycG9ydC0+cnBvcnRfdGFnKTsKKwliZmFfdHJjKGl0bmltLT5iZmEsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9JVE5JTV9TTV9GV1JTUDoKKwkJaWYgKGJmYV9pdG5pbV9zZW5kX2Z3ZGVsZXRlKGl0bmltKSkKKwkJCWJmYV9zbV9zZXRfc3RhdGUoaXRuaW0sIGJmYV9pdG5pbV9zbV9kZWxldGluZyk7CisJCWVsc2UKKwkJCWJmYV9zbV9zZXRfc3RhdGUoaXRuaW0sIGJmYV9pdG5pbV9zbV9kZWxldGluZ19xZnVsbCk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfSVROSU1fU01fSFdGQUlMOgorCQliZmFfc21fc2V0X3N0YXRlKGl0bmltLCBiZmFfaXRuaW1fc21fdW5pbml0KTsKKwkJYmZhX2ZjcGltX2RlbGl0bihpdG5pbSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKy8qKgorICogCQlPbmxpbmUgc3RhdGUgLSBub3JtYWwgcGFya2luZyBzdGF0ZS4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9pdG5pbV9zbV9vbmxpbmUoc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSwgZW51bSBiZmFfaXRuaW1fZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhpdG5pbS0+YmZhLCBpdG5pbS0+cnBvcnQtPnJwb3J0X3RhZyk7CisJYmZhX3RyYyhpdG5pbS0+YmZhLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfSVROSU1fU01fT0ZGTElORToKKwkJYmZhX3NtX3NldF9zdGF0ZShpdG5pbSwgYmZhX2l0bmltX3NtX2NsZWFudXBfb2ZmbGluZSk7CisJCWl0bmltLT5pc19vbmxpbmUgPSBCRkFfRkFMU0U7CisJCWJmYV9pdG5pbV9pb3Rvdl9zdGFydChpdG5pbSk7CisJCWJmYV9pdG5pbV9jbGVhbnVwKGl0bmltKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9JVE5JTV9TTV9ERUxFVEU6CisJCWJmYV9zbV9zZXRfc3RhdGUoaXRuaW0sIGJmYV9pdG5pbV9zbV9jbGVhbnVwX2RlbGV0ZSk7CisJCWl0bmltLT5pc19vbmxpbmUgPSBCRkFfRkFMU0U7CisJCWJmYV9pdG5pbV9jbGVhbnVwKGl0bmltKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9JVE5JTV9TTV9TTEVSOgorCQliZmFfc21fc2V0X3N0YXRlKGl0bmltLCBiZmFfaXRuaW1fc21fc2xlcik7CisJCWl0bmltLT5pc19vbmxpbmUgPSBCRkFfRkFMU0U7CisJCWJmYV9pdG5pbV9pb3Rvdl9zdGFydChpdG5pbSk7CisJCWJmYV9pdG5pbV9zbGVyX2NiKGl0bmltKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9JVE5JTV9TTV9IV0ZBSUw6CisJCWJmYV9zbV9zZXRfc3RhdGUoaXRuaW0sIGJmYV9pdG5pbV9zbV9pb2NkaXNhYmxlKTsKKwkJaXRuaW0tPmlzX29ubGluZSA9IEJGQV9GQUxTRTsKKwkJYmZhX2l0bmltX2lvdG92X3N0YXJ0KGl0bmltKTsKKwkJYmZhX2l0bmltX2lvY2Rpc2FibGVfY2xlYW51cChpdG5pbSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKy8qKgorICogCQlTZWNvbmQgbGV2ZWwgZXJyb3IgcmVjb3ZlcnkgbmVlZC4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9pdG5pbV9zbV9zbGVyKHN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0sIGVudW0gYmZhX2l0bmltX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMoaXRuaW0tPmJmYSwgaXRuaW0tPnJwb3J0LT5ycG9ydF90YWcpOworCWJmYV90cmMoaXRuaW0tPmJmYSwgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX0lUTklNX1NNX09GRkxJTkU6CisJCWJmYV9zbV9zZXRfc3RhdGUoaXRuaW0sIGJmYV9pdG5pbV9zbV9jbGVhbnVwX29mZmxpbmUpOworCQliZmFfaXRuaW1fY2xlYW51cChpdG5pbSk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfSVROSU1fU01fREVMRVRFOgorCQliZmFfc21fc2V0X3N0YXRlKGl0bmltLCBiZmFfaXRuaW1fc21fY2xlYW51cF9kZWxldGUpOworCQliZmFfaXRuaW1fY2xlYW51cChpdG5pbSk7CisJCWJmYV9pdG5pbV9pb3Rvdl9kZWxldGUoaXRuaW0pOworCQlicmVhazsKKworCWNhc2UgQkZBX0lUTklNX1NNX0hXRkFJTDoKKwkJYmZhX3NtX3NldF9zdGF0ZShpdG5pbSwgYmZhX2l0bmltX3NtX2lvY2Rpc2FibGUpOworCQliZmFfaXRuaW1faW9jZGlzYWJsZV9jbGVhbnVwKGl0bmltKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworLyoqCisgKiAJCUdvaW5nIG9mZmxpbmUuIFdhaXRpbmcgZm9yIGFjdGl2ZSBJTyBjbGVhbnVwLgorICovCitzdGF0aWMgdm9pZAorYmZhX2l0bmltX3NtX2NsZWFudXBfb2ZmbGluZShzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltLAorCQkJCSBlbnVtIGJmYV9pdG5pbV9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKGl0bmltLT5iZmEsIGl0bmltLT5ycG9ydC0+cnBvcnRfdGFnKTsKKwliZmFfdHJjKGl0bmltLT5iZmEsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9JVE5JTV9TTV9DTEVBTlVQOgorCQlpZiAoYmZhX2l0bmltX3NlbmRfZndkZWxldGUoaXRuaW0pKQorCQkJYmZhX3NtX3NldF9zdGF0ZShpdG5pbSwgYmZhX2l0bmltX3NtX2Z3ZGVsZXRlKTsKKwkJZWxzZQorCQkJYmZhX3NtX3NldF9zdGF0ZShpdG5pbSwgYmZhX2l0bmltX3NtX2Z3ZGVsZXRlX3FmdWxsKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9JVE5JTV9TTV9ERUxFVEU6CisJCWJmYV9zbV9zZXRfc3RhdGUoaXRuaW0sIGJmYV9pdG5pbV9zbV9jbGVhbnVwX2RlbGV0ZSk7CisJCWJmYV9pdG5pbV9pb3Rvdl9kZWxldGUoaXRuaW0pOworCQlicmVhazsKKworCWNhc2UgQkZBX0lUTklNX1NNX0hXRkFJTDoKKwkJYmZhX3NtX3NldF9zdGF0ZShpdG5pbSwgYmZhX2l0bmltX3NtX2lvY2Rpc2FibGUpOworCQliZmFfaXRuaW1faW9jZGlzYWJsZV9jbGVhbnVwKGl0bmltKTsKKwkJYmZhX2l0bmltX29mZmxpbmVfY2IoaXRuaW0pOworCQlicmVhazsKKworCWNhc2UgQkZBX0lUTklNX1NNX1NMRVI6CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKy8qKgorICogCQlEZWxldGluZyBpdG5pbS4gV2FpdGluZyBmb3IgYWN0aXZlIElPIGNsZWFudXAuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaXRuaW1fc21fY2xlYW51cF9kZWxldGUoc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSwKKwkJCQllbnVtIGJmYV9pdG5pbV9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKGl0bmltLT5iZmEsIGl0bmltLT5ycG9ydC0+cnBvcnRfdGFnKTsKKwliZmFfdHJjKGl0bmltLT5iZmEsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9JVE5JTV9TTV9DTEVBTlVQOgorCQlpZiAoYmZhX2l0bmltX3NlbmRfZndkZWxldGUoaXRuaW0pKQorCQkJYmZhX3NtX3NldF9zdGF0ZShpdG5pbSwgYmZhX2l0bmltX3NtX2RlbGV0aW5nKTsKKwkJZWxzZQorCQkJYmZhX3NtX3NldF9zdGF0ZShpdG5pbSwgYmZhX2l0bmltX3NtX2RlbGV0aW5nX3FmdWxsKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9JVE5JTV9TTV9IV0ZBSUw6CisJCWJmYV9zbV9zZXRfc3RhdGUoaXRuaW0sIGJmYV9pdG5pbV9zbV9pb2NkaXNhYmxlKTsKKwkJYmZhX2l0bmltX2lvY2Rpc2FibGVfY2xlYW51cChpdG5pbSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKy8qKgorICogUnBvcnQgb2ZmbGluZS4gRmltcndhcmUgaXRuaW0gaXMgYmVpbmcgZGVsZXRlZCAtIGF3YWl0aW5nIGYvdyByZXNwb25zZS4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9pdG5pbV9zbV9md2RlbGV0ZShzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltLCBlbnVtIGJmYV9pdG5pbV9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKGl0bmltLT5iZmEsIGl0bmltLT5ycG9ydC0+cnBvcnRfdGFnKTsKKwliZmFfdHJjKGl0bmltLT5iZmEsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9JVE5JTV9TTV9GV1JTUDoKKwkJYmZhX3NtX3NldF9zdGF0ZShpdG5pbSwgYmZhX2l0bmltX3NtX29mZmxpbmUpOworCQliZmFfaXRuaW1fb2ZmbGluZV9jYihpdG5pbSk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfSVROSU1fU01fREVMRVRFOgorCQliZmFfc21fc2V0X3N0YXRlKGl0bmltLCBiZmFfaXRuaW1fc21fZGVsZXRpbmcpOworCQlicmVhazsKKworCWNhc2UgQkZBX0lUTklNX1NNX0hXRkFJTDoKKwkJYmZhX3NtX3NldF9zdGF0ZShpdG5pbSwgYmZhX2l0bmltX3NtX2lvY2Rpc2FibGUpOworCQliZmFfaXRuaW1fb2ZmbGluZV9jYihpdG5pbSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfaXRuaW1fc21fZndkZWxldGVfcWZ1bGwoc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSwKKwkJCWVudW0gYmZhX2l0bmltX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMoaXRuaW0tPmJmYSwgaXRuaW0tPnJwb3J0LT5ycG9ydF90YWcpOworCWJmYV90cmMoaXRuaW0tPmJmYSwgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX0lUTklNX1NNX1FSRVNVTUU6CisJCWJmYV9zbV9zZXRfc3RhdGUoaXRuaW0sIGJmYV9pdG5pbV9zbV9md2RlbGV0ZSk7CisJCWJmYV9pdG5pbV9zZW5kX2Z3ZGVsZXRlKGl0bmltKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9JVE5JTV9TTV9ERUxFVEU6CisJCWJmYV9zbV9zZXRfc3RhdGUoaXRuaW0sIGJmYV9pdG5pbV9zbV9kZWxldGluZ19xZnVsbCk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfSVROSU1fU01fSFdGQUlMOgorCQliZmFfc21fc2V0X3N0YXRlKGl0bmltLCBiZmFfaXRuaW1fc21faW9jZGlzYWJsZSk7CisJCWJmYV9yZXFxX3djYW5jZWwoJml0bmltLT5yZXFxX3dhaXQpOworCQliZmFfaXRuaW1fb2ZmbGluZV9jYihpdG5pbSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKy8qKgorICogCQlPZmZsaW5lIHN0YXRlLgorICovCitzdGF0aWMgdm9pZAorYmZhX2l0bmltX3NtX29mZmxpbmUoc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSwgZW51bSBiZmFfaXRuaW1fZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhpdG5pbS0+YmZhLCBpdG5pbS0+cnBvcnQtPnJwb3J0X3RhZyk7CisJYmZhX3RyYyhpdG5pbS0+YmZhLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfSVROSU1fU01fREVMRVRFOgorCQliZmFfc21fc2V0X3N0YXRlKGl0bmltLCBiZmFfaXRuaW1fc21fdW5pbml0KTsKKwkJYmZhX2l0bmltX2lvdG92X2RlbGV0ZShpdG5pbSk7CisJCWJmYV9mY3BpbV9kZWxpdG4oaXRuaW0pOworCQlicmVhazsKKworCWNhc2UgQkZBX0lUTklNX1NNX09OTElORToKKwkJaWYgKGJmYV9pdG5pbV9zZW5kX2Z3Y3JlYXRlKGl0bmltKSkKKwkJCWJmYV9zbV9zZXRfc3RhdGUoaXRuaW0sIGJmYV9pdG5pbV9zbV9md2NyZWF0ZSk7CisJCWVsc2UKKwkJCWJmYV9zbV9zZXRfc3RhdGUoaXRuaW0sIGJmYV9pdG5pbV9zbV9md2NyZWF0ZV9xZnVsbCk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfSVROSU1fU01fSFdGQUlMOgorCQliZmFfc21fc2V0X3N0YXRlKGl0bmltLCBiZmFfaXRuaW1fc21faW9jZGlzYWJsZSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKy8qKgorICogCQlJT0MgaC93IGZhaWxlZCBzdGF0ZS4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9pdG5pbV9zbV9pb2NkaXNhYmxlKHN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0sCisJCQkgICAgZW51bSBiZmFfaXRuaW1fZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhpdG5pbS0+YmZhLCBpdG5pbS0+cnBvcnQtPnJwb3J0X3RhZyk7CisJYmZhX3RyYyhpdG5pbS0+YmZhLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfSVROSU1fU01fREVMRVRFOgorCQliZmFfc21fc2V0X3N0YXRlKGl0bmltLCBiZmFfaXRuaW1fc21fdW5pbml0KTsKKwkJYmZhX2l0bmltX2lvdG92X2RlbGV0ZShpdG5pbSk7CisJCWJmYV9mY3BpbV9kZWxpdG4oaXRuaW0pOworCQlicmVhazsKKworCWNhc2UgQkZBX0lUTklNX1NNX09GRkxJTkU6CisJCWJmYV9pdG5pbV9vZmZsaW5lX2NiKGl0bmltKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9JVE5JTV9TTV9PTkxJTkU6CisJCWlmIChiZmFfaXRuaW1fc2VuZF9md2NyZWF0ZShpdG5pbSkpCisJCQliZmFfc21fc2V0X3N0YXRlKGl0bmltLCBiZmFfaXRuaW1fc21fZndjcmVhdGUpOworCQllbHNlCisJCQliZmFfc21fc2V0X3N0YXRlKGl0bmltLCBiZmFfaXRuaW1fc21fZndjcmVhdGVfcWZ1bGwpOworCQlicmVhazsKKworCWNhc2UgQkZBX0lUTklNX1NNX0hXRkFJTDoKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworLyoqCisgKiAJCUl0bmltIGlzIGRlbGV0ZWQsIHdhaXRpbmcgZm9yIGZpcm13YXJlIHJlc3BvbnNlIHRvIGRlbGV0ZS4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9pdG5pbV9zbV9kZWxldGluZyhzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltLCBlbnVtIGJmYV9pdG5pbV9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKGl0bmltLT5iZmEsIGl0bmltLT5ycG9ydC0+cnBvcnRfdGFnKTsKKwliZmFfdHJjKGl0bmltLT5iZmEsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9JVE5JTV9TTV9GV1JTUDoKKwljYXNlIEJGQV9JVE5JTV9TTV9IV0ZBSUw6CisJCWJmYV9zbV9zZXRfc3RhdGUoaXRuaW0sIGJmYV9pdG5pbV9zbV91bmluaXQpOworCQliZmFfZmNwaW1fZGVsaXRuKGl0bmltKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworc3RhdGljIHZvaWQKK2JmYV9pdG5pbV9zbV9kZWxldGluZ19xZnVsbChzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltLAorCQkJZW51bSBiZmFfaXRuaW1fZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhpdG5pbS0+YmZhLCBpdG5pbS0+cnBvcnQtPnJwb3J0X3RhZyk7CisJYmZhX3RyYyhpdG5pbS0+YmZhLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfSVROSU1fU01fUVJFU1VNRToKKwkJYmZhX3NtX3NldF9zdGF0ZShpdG5pbSwgYmZhX2l0bmltX3NtX2RlbGV0aW5nKTsKKwkJYmZhX2l0bmltX3NlbmRfZndkZWxldGUoaXRuaW0pOworCQlicmVhazsKKworCWNhc2UgQkZBX0lUTklNX1NNX0hXRkFJTDoKKwkJYmZhX3NtX3NldF9zdGF0ZShpdG5pbSwgYmZhX2l0bmltX3NtX3VuaW5pdCk7CisJCWJmYV9yZXFxX3djYW5jZWwoJml0bmltLT5yZXFxX3dhaXQpOworCQliZmFfZmNwaW1fZGVsaXRuKGl0bmltKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworCisKKy8qKgorICogIGJmYV9pdG5pbV9wcml2YXRlCisgKi8KKworLyoqCisgKiAJCUluaXRpYXRlIGNsZWFudXAgb2YgYWxsIElPcyBvbiBhbiBJT0MgZmFpbHVyZS4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9pdG5pbV9pb2NkaXNhYmxlX2NsZWFudXAoc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSkKK3sKKwlzdHJ1Y3QgYmZhX3Rza2ltX3MgKnRza2ltOworCXN0cnVjdCBiZmFfaW9pbV9zICppb2ltOworCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgICpxZSwgKnFlbjsKKworCWxpc3RfZm9yX2VhY2hfc2FmZShxZSwgcWVuLCAmaXRuaW0tPnRza19xKSB7CisJCXRza2ltID0gKHN0cnVjdCBiZmFfdHNraW1fcyAqKSBxZTsKKwkJYmZhX3Rza2ltX2lvY2Rpc2FibGUodHNraW0pOworCX0KKworCWxpc3RfZm9yX2VhY2hfc2FmZShxZSwgcWVuLCAmaXRuaW0tPmlvX3EpIHsKKwkJaW9pbSA9IChzdHJ1Y3QgYmZhX2lvaW1fcyAqKSBxZTsKKwkJYmZhX2lvaW1faW9jZGlzYWJsZShpb2ltKTsKKwl9CisKKwkvKioKKwkgKiBGb3IgSU8gcmVxdWVzdCBpbiBwZW5kaW5nIHF1ZXVlLCB3ZSBwcmV0ZW5kIGFuIGVhcmx5IHRpbWVvdXQuCisJICovCisJbGlzdF9mb3JfZWFjaF9zYWZlKHFlLCBxZW4sICZpdG5pbS0+cGVuZGluZ19xKSB7CisJCWlvaW0gPSAoc3RydWN0IGJmYV9pb2ltX3MgKikgcWU7CisJCWJmYV9pb2ltX3Rvdihpb2ltKTsKKwl9CisKKwlsaXN0X2Zvcl9lYWNoX3NhZmUocWUsIHFlbiwgJml0bmltLT5pb19jbGVhbnVwX3EpIHsKKwkJaW9pbSA9IChzdHJ1Y3QgYmZhX2lvaW1fcyAqKSBxZTsKKwkJYmZhX2lvaW1faW9jZGlzYWJsZShpb2ltKTsKKwl9Cit9CisKKy8qKgorICogCQlJTyBjbGVhbnVwIGNvbXBsZXRpb24KKyAqLworc3RhdGljIHZvaWQKK2JmYV9pdG5pbV9jbGVhbnBfY29tcCh2b2lkICppdG5pbV9jYmFyZykKK3sKKwlzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltID0gaXRuaW1fY2Jhcmc7CisKKwliZmFfc3RhdHMoaXRuaW0sIGNsZWFudXBfY29tcHMpOworCWJmYV9zbV9zZW5kX2V2ZW50KGl0bmltLCBCRkFfSVROSU1fU01fQ0xFQU5VUCk7Cit9CisKKy8qKgorICogCQlJbml0aWF0ZSBjbGVhbnVwIG9mIGFsbCBJT3MuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaXRuaW1fY2xlYW51cChzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltKQoreworCXN0cnVjdCBiZmFfaW9pbV9zICAqaW9pbTsKKwlzdHJ1Y3QgYmZhX3Rza2ltX3MgKnRza2ltOworCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgICAqcWUsICpxZW47CisKKwliZmFfd2NfaW5pdCgmaXRuaW0tPndjLCBiZmFfaXRuaW1fY2xlYW5wX2NvbXAsIGl0bmltKTsKKworCWxpc3RfZm9yX2VhY2hfc2FmZShxZSwgcWVuLCAmaXRuaW0tPmlvX3EpIHsKKwkJaW9pbSA9IChzdHJ1Y3QgYmZhX2lvaW1fcyAqKSBxZTsKKworCQkvKioKKwkJICogTW92ZSBJTyB0byBhIGNsZWFudXAgcXVldWUgZnJvbSBhY3RpdmUgcXVldWUgc28gdGhhdCBhIGxhdGVyCisJCSAqIFRNIHdpbGwgbm90IHBpY2t1cCB0aGlzIElPLgorCQkgKi8KKwkJbGlzdF9kZWwoJmlvaW0tPnFlKTsKKwkJbGlzdF9hZGRfdGFpbCgmaW9pbS0+cWUsICZpdG5pbS0+aW9fY2xlYW51cF9xKTsKKworCQliZmFfd2NfdXAoJml0bmltLT53Yyk7CisJCWJmYV9pb2ltX2NsZWFudXAoaW9pbSk7CisJfQorCisJbGlzdF9mb3JfZWFjaF9zYWZlKHFlLCBxZW4sICZpdG5pbS0+dHNrX3EpIHsKKwkJdHNraW0gPSAoc3RydWN0IGJmYV90c2tpbV9zICopIHFlOworCQliZmFfd2NfdXAoJml0bmltLT53Yyk7CisJCWJmYV90c2tpbV9jbGVhbnVwKHRza2ltKTsKKwl9CisKKwliZmFfd2Nfd2FpdCgmaXRuaW0tPndjKTsKK30KKworc3RhdGljIHZvaWQKK19fYmZhX2NiX2l0bmltX29ubGluZSh2b2lkICpjYmFyZywgYmZhX2Jvb2xlYW5fdCBjb21wbGV0ZSkKK3sKKwlzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltID0gY2Jhcmc7CisKKwlpZiAoY29tcGxldGUpCisJCWJmYV9jYl9pdG5pbV9vbmxpbmUoaXRuaW0tPmRpdG4pOworfQorCitzdGF0aWMgdm9pZAorX19iZmFfY2JfaXRuaW1fb2ZmbGluZSh2b2lkICpjYmFyZywgYmZhX2Jvb2xlYW5fdCBjb21wbGV0ZSkKK3sKKwlzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltID0gY2Jhcmc7CisKKwlpZiAoY29tcGxldGUpCisJCWJmYV9jYl9pdG5pbV9vZmZsaW5lKGl0bmltLT5kaXRuKTsKK30KKworc3RhdGljIHZvaWQKK19fYmZhX2NiX2l0bmltX3NsZXIodm9pZCAqY2JhcmcsIGJmYV9ib29sZWFuX3QgY29tcGxldGUpCit7CisJc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSA9IGNiYXJnOworCisJaWYgKGNvbXBsZXRlKQorCQliZmFfY2JfaXRuaW1fc2xlcihpdG5pbS0+ZGl0bik7Cit9CisKKy8qKgorICogQ2FsbCB0byByZXN1bWUgYW55IEkvTyByZXF1ZXN0cyB3YWl0aW5nIGZvciByb29tIGluIHJlcXVlc3QgcXVldWUuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaXRuaW1fcXJlc3VtZSh2b2lkICpjYmFyZykKK3sKKwlzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltID0gY2Jhcmc7CisKKwliZmFfc21fc2VuZF9ldmVudChpdG5pbSwgQkZBX0lUTklNX1NNX1FSRVNVTUUpOworfQorCisKKworCisvKioKKyAqICBiZmFfaXRuaW1fcHVibGljCisgKi8KKwordm9pZAorYmZhX2l0bmltX2lvZG9uZShzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltKQoreworCWJmYV93Y19kb3duKCZpdG5pbS0+d2MpOworfQorCit2b2lkCitiZmFfaXRuaW1fdHNrZG9uZShzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltKQoreworCWJmYV93Y19kb3duKCZpdG5pbS0+d2MpOworfQorCit2b2lkCitiZmFfaXRuaW1fbWVtaW5mbyhzdHJ1Y3QgYmZhX2lvY2ZjX2NmZ19zICpjZmcsIHUzMiAqa21fbGVuLAorCQl1MzIgKmRtX2xlbikKK3sKKwkvKioKKwkgKiBJVE4gbWVtb3J5CisJICovCisJKmttX2xlbiArPSBjZmctPmZ3Y2ZnLm51bV9ycG9ydHMgKiBzaXplb2Yoc3RydWN0IGJmYV9pdG5pbV9zKTsKK30KKwordm9pZAorYmZhX2l0bmltX2F0dGFjaChzdHJ1Y3QgYmZhX2ZjcGltX21vZF9zICpmY3BpbSwgc3RydWN0IGJmYV9tZW1pbmZvX3MgKm1pbmZvKQoreworCXN0cnVjdCBiZmFfcyAgICAgICpiZmEgPSBmY3BpbS0+YmZhOworCXN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW07CisJaW50ICAgICAgICAgICAgIGk7CisKKwlJTklUX0xJU1RfSEVBRCgmZmNwaW0tPml0bmltX3EpOworCisJaXRuaW0gPSAoc3RydWN0IGJmYV9pdG5pbV9zICopIGJmYV9tZW1pbmZvX2t2YShtaW5mbyk7CisJZmNwaW0tPml0bmltX2FyciA9IGl0bmltOworCisJZm9yIChpID0gMDsgaSA8IGZjcGltLT5udW1faXRuaW1zOyBpKyssIGl0bmltKyspIHsKKwkJYmZhX29zX21lbXNldChpdG5pbSwgMCwgc2l6ZW9mKHN0cnVjdCBiZmFfaXRuaW1fcykpOworCQlpdG5pbS0+YmZhID0gYmZhOworCQlpdG5pbS0+ZmNwaW0gPSBmY3BpbTsKKwkJaXRuaW0tPnJlcXEgPSBCRkFfUkVRUV9RT1NfTE87CisJCWl0bmltLT5ycG9ydCA9IEJGQV9SUE9SVF9GUk9NX1RBRyhiZmEsIGkpOworCQlpdG5pbS0+aW90b3ZfYWN0aXZlID0gQkZBX0ZBTFNFOworCQliZmFfcmVxcV93aW5pdCgmaXRuaW0tPnJlcXFfd2FpdCwgYmZhX2l0bmltX3FyZXN1bWUsIGl0bmltKTsKKworCQlJTklUX0xJU1RfSEVBRCgmaXRuaW0tPmlvX3EpOworCQlJTklUX0xJU1RfSEVBRCgmaXRuaW0tPmlvX2NsZWFudXBfcSk7CisJCUlOSVRfTElTVF9IRUFEKCZpdG5pbS0+cGVuZGluZ19xKTsKKwkJSU5JVF9MSVNUX0hFQUQoJml0bmltLT50c2tfcSk7CisJCUlOSVRfTElTVF9IRUFEKCZpdG5pbS0+ZGVsYXlfY29tcF9xKTsKKwkJYmZhX3NtX3NldF9zdGF0ZShpdG5pbSwgYmZhX2l0bmltX3NtX3VuaW5pdCk7CisJfQorCisJYmZhX21lbWluZm9fa3ZhKG1pbmZvKSA9ICh1OCAqKSBpdG5pbTsKK30KKwordm9pZAorYmZhX2l0bmltX2lvY2Rpc2FibGUoc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSkKK3sKKwliZmFfc3RhdHMoaXRuaW0sIGlvY19kaXNhYmxlZCk7CisJYmZhX3NtX3NlbmRfZXZlbnQoaXRuaW0sIEJGQV9JVE5JTV9TTV9IV0ZBSUwpOworfQorCitzdGF0aWMgYmZhX2Jvb2xlYW5fdAorYmZhX2l0bmltX3NlbmRfZndjcmVhdGUoc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSkKK3sKKwlzdHJ1Y3QgYmZpX2l0bmltX2NyZWF0ZV9yZXFfcyAqbTsKKworCWl0bmltLT5tc2dfbm8rKzsKKworCS8qKgorCSAqIGNoZWNrIGZvciByb29tIGluIHF1ZXVlIHRvIHNlbmQgcmVxdWVzdCBub3cKKwkgKi8KKwltID0gYmZhX3JlcXFfbmV4dChpdG5pbS0+YmZhLCBpdG5pbS0+cmVxcSk7CisJaWYgKCFtKSB7CisJCWJmYV9yZXFxX3dhaXQoaXRuaW0tPmJmYSwgaXRuaW0tPnJlcXEsICZpdG5pbS0+cmVxcV93YWl0KTsKKwkJcmV0dXJuIEJGQV9GQUxTRTsKKwl9CisKKwliZmlfaDJpX3NldChtLT5taCwgQkZJX01DX0lUTklNLCBCRklfSVROSU1fSDJJX0NSRUFURV9SRVEsCisJCQliZmFfbHB1aWQoaXRuaW0tPmJmYSkpOworCW0tPmZ3X2hhbmRsZSA9IGl0bmltLT5ycG9ydC0+ZndfaGFuZGxlOworCW0tPmNsYXNzID0gRkNfQ0xBU1NfMzsKKwltLT5zZXFfcmVjID0gaXRuaW0tPnNlcV9yZWM7CisJbS0+bXNnX25vID0gaXRuaW0tPm1zZ19ubzsKKworCS8qKgorCSAqIHF1ZXVlIEkvTyBtZXNzYWdlIHRvIGZpcm13YXJlCisJICovCisJYmZhX3JlcXFfcHJvZHVjZShpdG5pbS0+YmZhLCBpdG5pbS0+cmVxcSk7CisJcmV0dXJuIEJGQV9UUlVFOworfQorCitzdGF0aWMgYmZhX2Jvb2xlYW5fdAorYmZhX2l0bmltX3NlbmRfZndkZWxldGUoc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSkKK3sKKwlzdHJ1Y3QgYmZpX2l0bmltX2RlbGV0ZV9yZXFfcyAqbTsKKworCS8qKgorCSAqIGNoZWNrIGZvciByb29tIGluIHF1ZXVlIHRvIHNlbmQgcmVxdWVzdCBub3cKKwkgKi8KKwltID0gYmZhX3JlcXFfbmV4dChpdG5pbS0+YmZhLCBpdG5pbS0+cmVxcSk7CisJaWYgKCFtKSB7CisJCWJmYV9yZXFxX3dhaXQoaXRuaW0tPmJmYSwgaXRuaW0tPnJlcXEsICZpdG5pbS0+cmVxcV93YWl0KTsKKwkJcmV0dXJuIEJGQV9GQUxTRTsKKwl9CisKKwliZmlfaDJpX3NldChtLT5taCwgQkZJX01DX0lUTklNLCBCRklfSVROSU1fSDJJX0RFTEVURV9SRVEsCisJCQliZmFfbHB1aWQoaXRuaW0tPmJmYSkpOworCW0tPmZ3X2hhbmRsZSA9IGl0bmltLT5ycG9ydC0+ZndfaGFuZGxlOworCisJLyoqCisJICogcXVldWUgSS9PIG1lc3NhZ2UgdG8gZmlybXdhcmUKKwkgKi8KKwliZmFfcmVxcV9wcm9kdWNlKGl0bmltLT5iZmEsIGl0bmltLT5yZXFxKTsKKwlyZXR1cm4gQkZBX1RSVUU7Cit9CisKKy8qKgorICogQ2xlYW51cCBhbGwgcGVuZGluZyBmYWlsZWQgaW5mbGlnaHQgcmVxdWVzdHMuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaXRuaW1fZGVsYXllZF9jb21wKHN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0sIGJmYV9ib29sZWFuX3QgaW90b3YpCit7CisJc3RydWN0IGJmYV9pb2ltX3MgKmlvaW07CisJc3RydWN0IGxpc3RfaGVhZCAqcWUsICpxZW47CisKKwlsaXN0X2Zvcl9lYWNoX3NhZmUocWUsIHFlbiwgJml0bmltLT5kZWxheV9jb21wX3EpIHsKKwkJaW9pbSA9IChzdHJ1Y3QgYmZhX2lvaW1fcyAqKXFlOworCQliZmFfaW9pbV9kZWxheWVkX2NvbXAoaW9pbSwgaW90b3YpOworCX0KK30KKworLyoqCisgKiBTdGFydCBhbGwgcGVuZGluZyBJTyByZXF1ZXN0cy4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9pdG5pbV9pb3Rvdl9vbmxpbmUoc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSkKK3sKKwlzdHJ1Y3QgYmZhX2lvaW1fcyAqaW9pbTsKKworCWJmYV9pdG5pbV9pb3Rvdl9zdG9wKGl0bmltKTsKKworCS8qKgorCSAqIEFib3J0IGFsbCBpbmZsaWdodCBJTyByZXF1ZXN0cyBpbiB0aGUgcXVldWUKKwkgKi8KKwliZmFfaXRuaW1fZGVsYXllZF9jb21wKGl0bmltLCBCRkFfRkFMU0UpOworCisJLyoqCisJICogU3RhcnQgYWxsIHBlbmRpbmcgSU8gcmVxdWVzdHMuCisJICovCisJd2hpbGUgKCFsaXN0X2VtcHR5KCZpdG5pbS0+cGVuZGluZ19xKSkgeworCQliZmFfcV9kZXEoJml0bmltLT5wZW5kaW5nX3EsICZpb2ltKTsKKwkJbGlzdF9hZGRfdGFpbCgmaW9pbS0+cWUsICZpdG5pbS0+aW9fcSk7CisJCWJmYV9pb2ltX3N0YXJ0KGlvaW0pOworCX0KK30KKworLyoqCisgKiBGYWlsIGFsbCBwZW5kaW5nIElPIHJlcXVlc3RzCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaXRuaW1faW90b3ZfY2xlYW51cChzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltKQoreworCXN0cnVjdCBiZmFfaW9pbV9zICppb2ltOworCisJLyoqCisJICogRmFpbCBhbGwgaW5mbGlnaHQgSU8gcmVxdWVzdHMgaW4gdGhlIHF1ZXVlCisJICovCisJYmZhX2l0bmltX2RlbGF5ZWRfY29tcChpdG5pbSwgQkZBX1RSVUUpOworCisJLyoqCisJICogRmFpbCBhbnkgcGVuZGluZyBJTyByZXF1ZXN0cy4KKwkgKi8KKwl3aGlsZSAoIWxpc3RfZW1wdHkoJml0bmltLT5wZW5kaW5nX3EpKSB7CisJCWJmYV9xX2RlcSgmaXRuaW0tPnBlbmRpbmdfcSwgJmlvaW0pOworCQlsaXN0X2FkZF90YWlsKCZpb2ltLT5xZSwgJmlvaW0tPmZjcGltLT5pb2ltX2NvbXBfcSk7CisJCWJmYV9pb2ltX3Rvdihpb2ltKTsKKwl9Cit9CisKKy8qKgorICogSU8gVE9WIHRpbWVyIGNhbGxiYWNrLiBGYWlsIGFueSBwZW5kaW5nIElPIHJlcXVlc3RzLgorICovCitzdGF0aWMgdm9pZAorYmZhX2l0bmltX2lvdG92KHZvaWQgKml0bmltX2FyZykKK3sKKwlzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltID0gaXRuaW1fYXJnOworCisJaXRuaW0tPmlvdG92X2FjdGl2ZSA9IEJGQV9GQUxTRTsKKworCWJmYV9jYl9pdG5pbV90b3ZfYmVnaW4oaXRuaW0tPmRpdG4pOworCWJmYV9pdG5pbV9pb3Rvdl9jbGVhbnVwKGl0bmltKTsKKwliZmFfY2JfaXRuaW1fdG92KGl0bmltLT5kaXRuKTsKK30KKworLyoqCisgKiBTdGFydCBJTyBUT1YgdGltZXIgZm9yIGZhaWxpbmcgYmFjayBwZW5kaW5nIElPIHJlcXVlc3RzIGluIG9mZmxpbmUgc3RhdGUuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaXRuaW1faW90b3Zfc3RhcnQoc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSkKK3sKKwlpZiAoaXRuaW0tPmZjcGltLT5wYXRoX3RvdiA+IDApIHsKKworCQlpdG5pbS0+aW90b3ZfYWN0aXZlID0gQkZBX1RSVUU7CisJCWJmYV9hc3NlcnQoYmZhX2l0bmltX2hvbGRfaW8oaXRuaW0pKTsKKwkJYmZhX3RpbWVyX3N0YXJ0KGl0bmltLT5iZmEsICZpdG5pbS0+dGltZXIsCisJCQliZmFfaXRuaW1faW90b3YsIGl0bmltLCBpdG5pbS0+ZmNwaW0tPnBhdGhfdG92KTsKKwl9Cit9CisKKy8qKgorICogU3RvcCBJTyBUT1YgdGltZXIuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaXRuaW1faW90b3Zfc3RvcChzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltKQoreworCWlmIChpdG5pbS0+aW90b3ZfYWN0aXZlKSB7CisJCWl0bmltLT5pb3Rvdl9hY3RpdmUgPSBCRkFfRkFMU0U7CisJCWJmYV90aW1lcl9zdG9wKCZpdG5pbS0+dGltZXIpOworCX0KK30KKworLyoqCisgKiBTdG9wIElPIFRPViB0aW1lci4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9pdG5pbV9pb3Rvdl9kZWxldGUoc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSkKK3sKKyAgICBiZmFfYm9vbGVhbl90IHBhdGh0b3ZfYWN0aXZlID0gQkZBX0ZBTFNFOworCisgICAgaWYgKGl0bmltLT5pb3Rvdl9hY3RpdmUpCisJCXBhdGh0b3ZfYWN0aXZlID0gQkZBX1RSVUU7CisKKwliZmFfaXRuaW1faW90b3Zfc3RvcChpdG5pbSk7CisJaWYgKHBhdGh0b3ZfYWN0aXZlKQorCQliZmFfY2JfaXRuaW1fdG92X2JlZ2luKGl0bmltLT5kaXRuKTsKKwliZmFfaXRuaW1faW90b3ZfY2xlYW51cChpdG5pbSk7CisJaWYgKHBhdGh0b3ZfYWN0aXZlKQorCQliZmFfY2JfaXRuaW1fdG92KGl0bmltLT5kaXRuKTsKK30KKworCisKKy8qKgorICogIGJmYV9pdG5pbV9wdWJsaWMKKyAqLworCisvKioKKyAqIAkJSXRuaW0gaW50ZXJydXB0IHByb2Nlc3NpbmcuCisgKi8KK3ZvaWQKK2JmYV9pdG5pbV9pc3Ioc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBiZmlfbXNnX3MgKm0pCit7CisJc3RydWN0IGJmYV9mY3BpbV9tb2RfcyAqZmNwaW0gPSBCRkFfRkNQSU1fTU9EKGJmYSk7CisJdW5pb24gYmZpX2l0bmltX2kyaF9tc2dfdSBtc2c7CisJc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbTsKKworCWJmYV90cmMoYmZhLCBtLT5taGRyLm1zZ19pZCk7CisKKwltc2cubXNnID0gbTsKKworCXN3aXRjaCAobS0+bWhkci5tc2dfaWQpIHsKKwljYXNlIEJGSV9JVE5JTV9JMkhfQ1JFQVRFX1JTUDoKKwkJaXRuaW0gPSBCRkFfSVROSU1fRlJPTV9UQUcoZmNwaW0sCisJCQkJCSAgICAgICBtc2cuY3JlYXRlX3JzcC0+YmZhX2hhbmRsZSk7CisJCWJmYV9hc3NlcnQobXNnLmNyZWF0ZV9yc3AtPnN0YXR1cyA9PSBCRkFfU1RBVFVTX09LKTsKKwkJYmZhX3N0YXRzKGl0bmltLCBjcmVhdGVfY29tcHMpOworCQliZmFfc21fc2VuZF9ldmVudChpdG5pbSwgQkZBX0lUTklNX1NNX0ZXUlNQKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGSV9JVE5JTV9JMkhfREVMRVRFX1JTUDoKKwkJaXRuaW0gPSBCRkFfSVROSU1fRlJPTV9UQUcoZmNwaW0sCisJCQkJCSAgICAgICBtc2cuZGVsZXRlX3JzcC0+YmZhX2hhbmRsZSk7CisJCWJmYV9hc3NlcnQobXNnLmRlbGV0ZV9yc3AtPnN0YXR1cyA9PSBCRkFfU1RBVFVTX09LKTsKKwkJYmZhX3N0YXRzKGl0bmltLCBkZWxldGVfY29tcHMpOworCQliZmFfc21fc2VuZF9ldmVudChpdG5pbSwgQkZBX0lUTklNX1NNX0ZXUlNQKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGSV9JVE5JTV9JMkhfU0xFUl9FVkVOVDoKKwkJaXRuaW0gPSBCRkFfSVROSU1fRlJPTV9UQUcoZmNwaW0sCisJCQkJCSAgICAgICBtc2cuc2xlcl9ldmVudC0+YmZhX2hhbmRsZSk7CisJCWJmYV9zdGF0cyhpdG5pbSwgc2xlcl9ldmVudHMpOworCQliZmFfc21fc2VuZF9ldmVudChpdG5pbSwgQkZBX0lUTklNX1NNX1NMRVIpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV90cmMoYmZhLCBtLT5taGRyLm1zZ19pZCk7CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisKKworLyoqCisgKiAgYmZhX2l0bmltX2FwaQorICovCisKK3N0cnVjdCBiZmFfaXRuaW1fcyAqCitiZmFfaXRuaW1fY3JlYXRlKHN0cnVjdCBiZmFfcyAqYmZhLCBzdHJ1Y3QgYmZhX3Jwb3J0X3MgKnJwb3J0LCB2b2lkICpkaXRuKQoreworCXN0cnVjdCBiZmFfZmNwaW1fbW9kX3MgKmZjcGltID0gQkZBX0ZDUElNX01PRChiZmEpOworCXN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW07CisKKwlpdG5pbSA9IEJGQV9JVE5JTV9GUk9NX1RBRyhmY3BpbSwgcnBvcnQtPnJwb3J0X3RhZyk7CisJYmZhX2Fzc2VydChpdG5pbS0+cnBvcnQgPT0gcnBvcnQpOworCisJaXRuaW0tPmRpdG4gPSBkaXRuOworCisJYmZhX3N0YXRzKGl0bmltLCBjcmVhdGVzKTsKKwliZmFfc21fc2VuZF9ldmVudChpdG5pbSwgQkZBX0lUTklNX1NNX0NSRUFURSk7CisKKwlyZXR1cm4gKGl0bmltKTsKK30KKwordm9pZAorYmZhX2l0bmltX2RlbGV0ZShzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltKQoreworCWJmYV9zdGF0cyhpdG5pbSwgZGVsZXRlcyk7CisJYmZhX3NtX3NlbmRfZXZlbnQoaXRuaW0sIEJGQV9JVE5JTV9TTV9ERUxFVEUpOworfQorCit2b2lkCitiZmFfaXRuaW1fb25saW5lKHN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0sIGJmYV9ib29sZWFuX3Qgc2VxX3JlYykKK3sKKwlpdG5pbS0+c2VxX3JlYyA9IHNlcV9yZWM7CisJYmZhX3N0YXRzKGl0bmltLCBvbmxpbmVzKTsKKwliZmFfc21fc2VuZF9ldmVudChpdG5pbSwgQkZBX0lUTklNX1NNX09OTElORSk7Cit9CisKK3ZvaWQKK2JmYV9pdG5pbV9vZmZsaW5lKHN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0pCit7CisJYmZhX3N0YXRzKGl0bmltLCBvZmZsaW5lcyk7CisJYmZhX3NtX3NlbmRfZXZlbnQoaXRuaW0sIEJGQV9JVE5JTV9TTV9PRkZMSU5FKTsKK30KKworLyoqCisgKiBSZXR1cm4gdHJ1ZSBpZiBpdG5pbSBpcyBjb25zaWRlcmVkIG9mZmxpbmUgZm9yIGhvbGRpbmcgb2ZmIElPIHJlcXVlc3QuCisgKiBJTyBpcyBub3QgaGVsZCBpZiBpdG5pbSBpcyBiZWluZyBkZWxldGVkLgorICovCitiZmFfYm9vbGVhbl90CitiZmFfaXRuaW1faG9sZF9pbyhzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltKQoreworCXJldHVybiAoCisJCWl0bmltLT5mY3BpbS0+cGF0aF90b3YgJiYgaXRuaW0tPmlvdG92X2FjdGl2ZSAmJgorCQkoYmZhX3NtX2NtcF9zdGF0ZShpdG5pbSwgYmZhX2l0bmltX3NtX2Z3Y3JlYXRlKSB8fAorCQkgYmZhX3NtX2NtcF9zdGF0ZShpdG5pbSwgYmZhX2l0bmltX3NtX3NsZXIpIHx8CisJCSBiZmFfc21fY21wX3N0YXRlKGl0bmltLCBiZmFfaXRuaW1fc21fY2xlYW51cF9vZmZsaW5lKSB8fAorCQkgYmZhX3NtX2NtcF9zdGF0ZShpdG5pbSwgYmZhX2l0bmltX3NtX2Z3ZGVsZXRlKSB8fAorCQkgYmZhX3NtX2NtcF9zdGF0ZShpdG5pbSwgYmZhX2l0bmltX3NtX29mZmxpbmUpIHx8CisJCSBiZmFfc21fY21wX3N0YXRlKGl0bmltLCBiZmFfaXRuaW1fc21faW9jZGlzYWJsZSkpCispOworfQorCit2b2lkCitiZmFfaXRuaW1fZ2V0X3N0YXRzKHN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0sCisJc3RydWN0IGJmYV9pdG5pbV9oYWxfc3RhdHNfcyAqc3RhdHMpCit7CisJKnN0YXRzID0gaXRuaW0tPnN0YXRzOworfQorCit2b2lkCitiZmFfaXRuaW1fY2xlYXJfc3RhdHMoc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSkKK3sKKwliZmFfb3NfbWVtc2V0KCZpdG5pbS0+c3RhdHMsIDAsIHNpemVvZihpdG5pbS0+c3RhdHMpKTsKK30KKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2JmYV9sb2cuYyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2xvZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyNzM1ZTUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9sb2cuYwpAQCAtMCwwICsxLDM0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisvKioKKyAqICBiZmFfbG9nLmMgQkZBIGxvZyBsaWJyYXJ5CisgKi8KKworI2luY2x1ZGUgPGJmYV9vc19pbmMuaD4KKyNpbmNsdWRlIDxjcy9iZmFfbG9nLmg+CisKKy8qCisgKiBnbG9iYWwgbG9nIGluZm8gc3RydWN0dXJlCisgKi8KK3N0cnVjdCBiZmFfbG9nX2luZm9fcyB7CisJdTMyICAgICAgICBzdGFydF9pZHg7CS8qICBzdGFydCBpbmRleCBmb3IgYSBtb2R1bGUgKi8KKwl1MzIgICAgICAgIHRvdGFsX2NvdW50OwkvKiAgdG90YWwgY291bnQgZm9yIGEgbW9kdWxlICovCisJZW51bSBiZmFfbG9nX3NldmVyaXR5IGxldmVsOwkvKiAgZ2xvYmFsIGxvZyBsZXZlbCAqLworCWJmYV9sb2dfY2JfdAljYmZuOwkJLyogIGNhbGxiYWNrIGZ1bmN0aW9uICovCit9OworCitzdGF0aWMgc3RydWN0IGJmYV9sb2dfaW5mb19zIGJmYV9sb2dfaW5mb1tCRkFfTE9HX01PRFVMRV9JRF9NQVggKyAxXTsKK3N0YXRpYyB1MzIgYmZhX2xvZ19tc2dfdG90YWxfY291bnQ7CitzdGF0aWMgaW50ICAgICAgYmZhX2xvZ19pbml0aWFsaXplZDsKKworc3RhdGljIGNoYXIgICAgKmJmYV9sb2dfc2V2ZXJpdHlbXSA9CisJeyAiW25vbmVdIiwgIltjcml0aWNhbF0iLCAiW2Vycm9yXSIsICJbd2Fybl0iLCAiW2luZm9dIiwgIiIgfTsKKworLyoqCisgKiBCRkEgbG9nIGxpYnJhcnkgaW5pdGlhbGl6YXRpb24KKyAqCisgKiBUaGUgbG9nIGxpYnJhcnkgaW5pdGlhbGl6YXRpb24gaW5jbHVkZXMgdGhlIGZvbGxvd2luZywKKyAqICAgIC0gc2V0IGxvZyBpbnN0YW5jZSBuYW1lIGFuZCBjYWxsYmFjayBmdW5jdGlvbgorICogICAgLSByZWFkIHRoZSBtZXNzYWdlIGFycmF5IGdlbmVyYXRlZCBmcm9tIHhtbCBmaWxlcworICogICAgLSBjYWxjdWxhdGUgc3RhcnQgaW5kZXggZm9yIGVhY2ggbW9kdWxlCisgKiAgICAtIGNhbGN1bGF0ZSBtZXNzYWdlIGNvdW50IGZvciBlYWNoIG1vZHVsZQorICogICAgLSBwZXJmb3JtIGVycm9yIGNoZWNraW5nCisgKgorICogQHBhcmFtW2luXSBsb2dfbW9kIC0gbG9nIG1vZHVsZSBpbmZvCisgKiBAcGFyYW1baW5dIGluc3RhbmNlX25hbWUgLSBpbnN0YW5jZSBuYW1lCisgKiBAcGFyYW1baW5dIGNiZm4gLSBjYWxsYmFjayBmdW5jdGlvbgorICoKKyAqIEl0IHJldHVybiAwIG9uIHN1Y2Nlc3MsIG9yIC0xIG9uIGZhaWx1cmUKKyAqLworaW50CitiZmFfbG9nX2luaXQoc3RydWN0IGJmYV9sb2dfbW9kX3MgKmxvZ19tb2QsIGNoYXIgKmluc3RhbmNlX25hbWUsCisJCQliZmFfbG9nX2NiX3QgY2JmbikKK3sKKwlzdHJ1Y3QgYmZhX2xvZ19tc2dkZWZfcyAqbXNnOworCXUzMiAgICAgICAgcHJlX21vZF9pZCA9IDA7CisJdTMyICAgICAgICBjdXJfbW9kX2lkID0gMDsKKwl1MzIgICAgICAgIGksIHByZV9pZHgsIGlkeCwgbXNnX2lkOworCisJLyoKKwkgKiBzZXQgaW5zdGFuY2UgbmFtZQorCSAqLworCWlmIChsb2dfbW9kKSB7CisJCXN0cm5jcHkobG9nX21vZC0+aW5zdGFuY2VfaW5mbywgaW5zdGFuY2VfbmFtZSwKKwkJCXNpemVvZihsb2dfbW9kLT5pbnN0YW5jZV9pbmZvKSk7CisJCWxvZ19tb2QtPmNiZm4gPSBjYmZuOworCQlmb3IgKGkgPSAwOyBpIDw9IEJGQV9MT0dfTU9EVUxFX0lEX01BWDsgaSsrKQorCQkJbG9nX21vZC0+bG9nX2xldmVsW2ldID0gQkZBX0xPR19XQVJOSU5HOworCX0KKworCWlmIChiZmFfbG9nX2luaXRpYWxpemVkKQorCQlyZXR1cm4gMDsKKworCWZvciAoaSA9IDA7IGkgPD0gQkZBX0xPR19NT0RVTEVfSURfTUFYOyBpKyspIHsKKwkJYmZhX2xvZ19pbmZvW2ldLnN0YXJ0X2lkeCA9IDA7CisJCWJmYV9sb2dfaW5mb1tpXS50b3RhbF9jb3VudCA9IDA7CisJCWJmYV9sb2dfaW5mb1tpXS5sZXZlbCA9IEJGQV9MT0dfV0FSTklORzsKKwkJYmZhX2xvZ19pbmZvW2ldLmNiZm4gPSBjYmZuOworCX0KKworCXByZV9pZHggPSAwOworCWlkeCA9IDA7CisJbXNnID0gYmZhX2xvZ19tc2dfYXJyYXk7CisJbXNnX2lkID0gQkZBX0xPR19HRVRfTVNHX0lEKG1zZyk7CisJcHJlX21vZF9pZCA9IEJGQV9MT0dfR0VUX01PRF9JRChtc2dfaWQpOworCXdoaWxlIChtc2dfaWQgIT0gMCkgeworCQljdXJfbW9kX2lkID0gQkZBX0xPR19HRVRfTU9EX0lEKG1zZ19pZCk7CisKKwkJaWYgKGN1cl9tb2RfaWQgPiBCRkFfTE9HX01PRFVMRV9JRF9NQVgpIHsKKwkJCWNiZm4obG9nX21vZCwgbXNnX2lkLAorCQkJCSIlcyVzIGxvZzogbW9kdWxlIGlkICV1IG91dCBvZiByYW5nZVxuIiwKKwkJCQlCRkFfTE9HX0NBVF9OQU1FLAorCQkJCWJmYV9sb2dfc2V2ZXJpdHlbQkZBX0xPR19FUlJPUl0sCisJCQkJY3VyX21vZF9pZCk7CisJCQlyZXR1cm4gLTE7CisJCX0KKworCQlpZiAocHJlX21vZF9pZCA+IEJGQV9MT0dfTU9EVUxFX0lEX01BWCkgeworCQkJY2Jmbihsb2dfbW9kLCBtc2dfaWQsCisJCQkJIiVzJXMgbG9nOiBtb2R1bGUgaWQgJXUgb3V0IG9mIHJhbmdlXG4iLAorCQkJCUJGQV9MT0dfQ0FUX05BTUUsCisJCQkJYmZhX2xvZ19zZXZlcml0eVtCRkFfTE9HX0VSUk9SXSwKKwkJCQlwcmVfbW9kX2lkKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCisJCWlmIChjdXJfbW9kX2lkICE9IHByZV9tb2RfaWQpIHsKKwkJCWJmYV9sb2dfaW5mb1twcmVfbW9kX2lkXS5zdGFydF9pZHggPSBwcmVfaWR4OworCQkJYmZhX2xvZ19pbmZvW3ByZV9tb2RfaWRdLnRvdGFsX2NvdW50ID0gaWR4IC0gcHJlX2lkeDsKKwkJCXByZV9tb2RfaWQgPSBjdXJfbW9kX2lkOworCQkJcHJlX2lkeCA9IGlkeDsKKwkJfQorCisJCWlkeCsrOworCQltc2crKzsKKwkJbXNnX2lkID0gQkZBX0xPR19HRVRfTVNHX0lEKG1zZyk7CisJfQorCisJYmZhX2xvZ19pbmZvW2N1cl9tb2RfaWRdLnN0YXJ0X2lkeCA9IHByZV9pZHg7CisJYmZhX2xvZ19pbmZvW2N1cl9tb2RfaWRdLnRvdGFsX2NvdW50ID0gaWR4IC0gcHJlX2lkeDsKKwliZmFfbG9nX21zZ190b3RhbF9jb3VudCA9IGlkeDsKKworCWNiZm4obG9nX21vZCwgbXNnX2lkLCAiJXMlcyBsb2c6IGluaXQgT0ssIG1zZyB0b3RhbCBjb3VudCAldVxuIiwKKwkJQkZBX0xPR19DQVRfTkFNRSwKKwkJYmZhX2xvZ19zZXZlcml0eVtCRkFfTE9HX0lORk9dLCBiZmFfbG9nX21zZ190b3RhbF9jb3VudCk7CisKKwliZmFfbG9nX2luaXRpYWxpemVkID0gMTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIEJGQSBsb2cgc2V0IGxvZyBsZXZlbCBmb3IgYSBtb2R1bGUKKyAqCisgKiBAcGFyYW1baW5dIGxvZ19tb2QgLSBsb2cgbW9kdWxlIGluZm8KKyAqIEBwYXJhbVtpbl0gbW9kX2lkIC0gbW9kdWxlIGlkCisgKiBAcGFyYW1baW5dIGxvZ19sZXZlbCAtIGxvZyBzZXZlcml0eSBsZXZlbAorICoKKyAqIEl0IHJldHVybiBCRkFfU1RBVFVTX09LIG9uIHN1Y2Nlc3MsIG9yID4gMCBvbiBmYWlsdXJlCisgKi8KK2JmYV9zdGF0dXNfdAorYmZhX2xvZ19zZXRfbGV2ZWwoc3RydWN0IGJmYV9sb2dfbW9kX3MgKmxvZ19tb2QsIGludCBtb2RfaWQsCisJCSAgZW51bSBiZmFfbG9nX3NldmVyaXR5IGxvZ19sZXZlbCkKK3sKKwlpZiAobW9kX2lkIDw9IEJGQV9MT0dfVU5VU0VEX0lEIHx8IG1vZF9pZCA+IEJGQV9MT0dfTU9EVUxFX0lEX01BWCkKKwkJcmV0dXJuIEJGQV9TVEFUVVNfRUlOVkFMOworCisJaWYgKGxvZ19sZXZlbCA8PSBCRkFfTE9HX0lOVkFMSUQgfHwgbG9nX2xldmVsID4gQkZBX0xPR19MRVZFTF9NQVgpCisJCXJldHVybiBCRkFfU1RBVFVTX0VJTlZBTDsKKworCWlmIChsb2dfbW9kKQorCQlsb2dfbW9kLT5sb2dfbGV2ZWxbbW9kX2lkXSA9IGxvZ19sZXZlbDsKKwllbHNlCisJCWJmYV9sb2dfaW5mb1ttb2RfaWRdLmxldmVsID0gbG9nX2xldmVsOworCisJcmV0dXJuIEJGQV9TVEFUVVNfT0s7Cit9CisKKy8qKgorICogQkZBIGxvZyBzZXQgbG9nIGxldmVsIGZvciBhbGwgbW9kdWxlcworICoKKyAqIEBwYXJhbVtpbl0gbG9nX21vZCAtIGxvZyBtb2R1bGUgaW5mbworICogQHBhcmFtW2luXSBsb2dfbGV2ZWwgLSBsb2cgc2V2ZXJpdHkgbGV2ZWwKKyAqCisgKiBJdCByZXR1cm4gQkZBX1NUQVRVU19PSyBvbiBzdWNjZXNzLCBvciA+IDAgb24gZmFpbHVyZQorICovCitiZmFfc3RhdHVzX3QKK2JmYV9sb2dfc2V0X2xldmVsX2FsbChzdHJ1Y3QgYmZhX2xvZ19tb2RfcyAqbG9nX21vZCwKKwkJICBlbnVtIGJmYV9sb2dfc2V2ZXJpdHkgbG9nX2xldmVsKQoreworCWludCBtb2RfaWQgPSBCRkFfTE9HX1VOVVNFRF9JRCArIDE7CisKKwlpZiAobG9nX2xldmVsIDw9IEJGQV9MT0dfSU5WQUxJRCB8fCBsb2dfbGV2ZWwgPiBCRkFfTE9HX0xFVkVMX01BWCkKKwkJcmV0dXJuIEJGQV9TVEFUVVNfRUlOVkFMOworCisJaWYgKGxvZ19tb2QpIHsKKwkJZm9yICg7IG1vZF9pZCA8PSBCRkFfTE9HX01PRFVMRV9JRF9NQVg7IG1vZF9pZCsrKQorCQkJbG9nX21vZC0+bG9nX2xldmVsW21vZF9pZF0gPSBsb2dfbGV2ZWw7CisJfSBlbHNlIHsKKwkJZm9yICg7IG1vZF9pZCA8PSBCRkFfTE9HX01PRFVMRV9JRF9NQVg7IG1vZF9pZCsrKQorCQkJYmZhX2xvZ19pbmZvW21vZF9pZF0ubGV2ZWwgPSBsb2dfbGV2ZWw7CisJfQorCisJcmV0dXJuIEJGQV9TVEFUVVNfT0s7Cit9CisKKy8qKgorICogQkZBIGxvZyBzZXQgbG9nIGxldmVsIGZvciBhbGwgYWVuIHN1Yi1tb2R1bGVzCisgKgorICogQHBhcmFtW2luXSBsb2dfbW9kIC0gbG9nIG1vZHVsZSBpbmZvCisgKiBAcGFyYW1baW5dIGxvZ19sZXZlbCAtIGxvZyBzZXZlcml0eSBsZXZlbAorICoKKyAqIEl0IHJldHVybiBCRkFfU1RBVFVTX09LIG9uIHN1Y2Nlc3MsIG9yID4gMCBvbiBmYWlsdXJlCisgKi8KK2JmYV9zdGF0dXNfdAorYmZhX2xvZ19zZXRfbGV2ZWxfYWVuKHN0cnVjdCBiZmFfbG9nX21vZF9zICpsb2dfbW9kLAorCQkgIGVudW0gYmZhX2xvZ19zZXZlcml0eSBsb2dfbGV2ZWwpCit7CisJaW50IG1vZF9pZCA9IEJGQV9MT0dfQUVOX01JTiArIDE7CisKKwlpZiAobG9nX21vZCkgeworCQlmb3IgKDsgbW9kX2lkIDw9IEJGQV9MT0dfQUVOX01BWDsgbW9kX2lkKyspCisJCQlsb2dfbW9kLT5sb2dfbGV2ZWxbbW9kX2lkXSA9IGxvZ19sZXZlbDsKKwl9IGVsc2UgeworCQlmb3IgKDsgbW9kX2lkIDw9IEJGQV9MT0dfQUVOX01BWDsgbW9kX2lkKyspCisJCQliZmFfbG9nX2luZm9bbW9kX2lkXS5sZXZlbCA9IGxvZ19sZXZlbDsKKwl9CisKKwlyZXR1cm4gQkZBX1NUQVRVU19PSzsKK30KKworLyoqCisgKiBCRkEgbG9nIGdldCBsb2cgbGV2ZWwgZm9yIGEgbW9kdWxlCisgKgorICogQHBhcmFtW2luXSBsb2dfbW9kIC0gbG9nIG1vZHVsZSBpbmZvCisgKiBAcGFyYW1baW5dIG1vZF9pZCAtIG1vZHVsZSBpZAorICoKKyAqIEl0IHJldHVybnMgbG9nIGxldmVsIG9yIC0xIG9uIGVycm9yCisgKi8KK2VudW0gYmZhX2xvZ19zZXZlcml0eQorYmZhX2xvZ19nZXRfbGV2ZWwoc3RydWN0IGJmYV9sb2dfbW9kX3MgKmxvZ19tb2QsIGludCBtb2RfaWQpCit7CisJaWYgKG1vZF9pZCA8PSBCRkFfTE9HX1VOVVNFRF9JRCB8fCBtb2RfaWQgPiBCRkFfTE9HX01PRFVMRV9JRF9NQVgpCisJCXJldHVybiBCRkFfTE9HX0lOVkFMSUQ7CisKKwlpZiAobG9nX21vZCkKKwkJcmV0dXJuIChsb2dfbW9kLT5sb2dfbGV2ZWxbbW9kX2lkXSk7CisJZWxzZQorCQlyZXR1cm4gKGJmYV9sb2dfaW5mb1ttb2RfaWRdLmxldmVsKTsKK30KKworZW51bSBiZmFfbG9nX3NldmVyaXR5CitiZmFfbG9nX2dldF9tc2dfbGV2ZWwoc3RydWN0IGJmYV9sb2dfbW9kX3MgKmxvZ19tb2QsIHUzMiBtc2dfaWQpCit7CisJc3RydWN0IGJmYV9sb2dfbXNnZGVmX3MgKm1zZzsKKwl1MzIgICAgICAgIG1vZCA9IEJGQV9MT0dfR0VUX01PRF9JRChtc2dfaWQpOworCXUzMiAgICAgICAgaWR4ID0gQkZBX0xPR19HRVRfTVNHX0lEWChtc2dfaWQpIC0gMTsKKworCWlmICghYmZhX2xvZ19pbml0aWFsaXplZCkKKwkJcmV0dXJuIEJGQV9MT0dfSU5WQUxJRDsKKworCWlmIChtb2QgPiBCRkFfTE9HX01PRFVMRV9JRF9NQVgpCisJCXJldHVybiBCRkFfTE9HX0lOVkFMSUQ7CisKKwlpZiAoaWR4ID49IGJmYV9sb2dfaW5mb1ttb2RdLnRvdGFsX2NvdW50KSB7CisJCWJmYV9sb2dfaW5mb1ttb2RdLmNiZm4obG9nX21vZCwgbXNnX2lkLAorCQkJIiVzJXMgbG9nOiBpbmNvbnNpc3RlbnQgaWR4ICV1IHZzLiB0b3RhbCBjb3VudCAldVxuIiwKKwkJCUJGQV9MT0dfQ0FUX05BTUUsIGJmYV9sb2dfc2V2ZXJpdHlbQkZBX0xPR19FUlJPUl0sIGlkeCwKKwkJCWJmYV9sb2dfaW5mb1ttb2RdLnRvdGFsX2NvdW50KTsKKwkJcmV0dXJuIEJGQV9MT0dfSU5WQUxJRDsKKwl9CisKKwltc2cgPSBiZmFfbG9nX21zZ19hcnJheSArIGJmYV9sb2dfaW5mb1ttb2RdLnN0YXJ0X2lkeCArIGlkeDsKKwlpZiAobXNnX2lkICE9IEJGQV9MT0dfR0VUX01TR19JRChtc2cpKSB7CisJCWJmYV9sb2dfaW5mb1ttb2RdLmNiZm4obG9nX21vZCwgbXNnX2lkLAorCQkJIiVzJXMgbG9nOiBpbmNvbnNpc3RlbnQgbXNnIGlkICV1IGFycmF5IG1zZyBpZCAldVxuIiwKKwkJCUJGQV9MT0dfQ0FUX05BTUUsIGJmYV9sb2dfc2V2ZXJpdHlbQkZBX0xPR19FUlJPUl0sCisJCQltc2dfaWQsIEJGQV9MT0dfR0VUX01TR19JRChtc2cpKTsKKwkJcmV0dXJuIEJGQV9MT0dfSU5WQUxJRDsKKwl9CisKKwlyZXR1cm4gQkZBX0xPR19HRVRfU0VWRVJJVFkobXNnKTsKK30KKworLyoqCisgKiBCRkEgbG9nIG1lc3NhZ2UgaGFuZGxpbmcKKyAqCisgKiBCRkEgbG9nIG1lc3NhZ2UgaGFuZGxpbmcgZmluZHMgdGhlIG1lc3NhZ2UgYmFzZWQgb24gbWVzc2FnZSBpZCBhbmQgcHJpbnRzCisgKiBvdXQgdGhlIG1lc3NhZ2UgYmFzZWQgb24gaXRzIGZvcm1hdCBhbmQgYXJndW1lbnRzLiBJdCBhbHNvIGRvZXMgcHJlZml4CisgKiB0aGUgc2V2ZXJpdHkgZXRjLgorICoKKyAqIEBwYXJhbVtpbl0gbG9nX21vZCAtIGxvZyBtb2R1bGUgaW5mbworICogQHBhcmFtW2luXSBtc2dfaWQgLSBtZXNzYWdlIGlkCisgKiBAcGFyYW1baW5dIC4uLiAtIG1lc3NhZ2UgYXJndW1lbnRzCisgKgorICogSXQgcmV0dXJuIDAgb24gc3VjY2Vzcywgb3IgLTEgb24gZXJyb3JzCisgKi8KK2ludAorYmZhX2xvZyhzdHJ1Y3QgYmZhX2xvZ19tb2RfcyAqbG9nX21vZCwgdTMyIG1zZ19pZCwgLi4uKQoreworCXZhX2xpc3QgICAgICAgICBhcDsKKwljaGFyICAgICAgICAgICAgYnVmWzI1Nl07CisJc3RydWN0IGJmYV9sb2dfbXNnZGVmX3MgKm1zZzsKKwlpbnQgICAgICAgICAgICAgbG9nX2xldmVsOworCXUzMiAgICAgICAgbW9kID0gQkZBX0xPR19HRVRfTU9EX0lEKG1zZ19pZCk7CisJdTMyICAgICAgICBpZHggPSBCRkFfTE9HX0dFVF9NU0dfSURYKG1zZ19pZCkgLSAxOworCisJaWYgKCFiZmFfbG9nX2luaXRpYWxpemVkKQorCQlyZXR1cm4gLTE7CisKKwlpZiAobW9kID4gQkZBX0xPR19NT0RVTEVfSURfTUFYKQorCQlyZXR1cm4gLTE7CisKKwlpZiAoaWR4ID49IGJmYV9sb2dfaW5mb1ttb2RdLnRvdGFsX2NvdW50KSB7CisJCWJmYV9sb2dfaW5mb1ttb2RdLgorCQkJY2JmbgorCQkJKGxvZ19tb2QsIG1zZ19pZCwKKwkJCSIlcyVzIGxvZzogaW5jb25zaXN0ZW50IGlkeCAldSB2cy4gdG90YWwgY291bnQgJXVcbiIsCisJCQlCRkFfTE9HX0NBVF9OQU1FLCBiZmFfbG9nX3NldmVyaXR5W0JGQV9MT0dfRVJST1JdLCBpZHgsCisJCQliZmFfbG9nX2luZm9bbW9kXS50b3RhbF9jb3VudCk7CisJCXJldHVybiAtMTsKKwl9CisKKwltc2cgPSBiZmFfbG9nX21zZ19hcnJheSArIGJmYV9sb2dfaW5mb1ttb2RdLnN0YXJ0X2lkeCArIGlkeDsKKwlpZiAobXNnX2lkICE9IEJGQV9MT0dfR0VUX01TR19JRChtc2cpKSB7CisJCWJmYV9sb2dfaW5mb1ttb2RdLgorCQkJY2JmbgorCQkJKGxvZ19tb2QsIG1zZ19pZCwKKwkJCSIlcyVzIGxvZzogaW5jb25zaXN0ZW50IG1zZyBpZCAldSBhcnJheSBtc2cgaWQgJXVcbiIsCisJCQlCRkFfTE9HX0NBVF9OQU1FLCBiZmFfbG9nX3NldmVyaXR5W0JGQV9MT0dfRVJST1JdLAorCQkJbXNnX2lkLCBCRkFfTE9HX0dFVF9NU0dfSUQobXNnKSk7CisJCXJldHVybiAtMTsKKwl9CisKKwlsb2dfbGV2ZWwgPSBsb2dfbW9kID8gbG9nX21vZC0+bG9nX2xldmVsW21vZF0gOiBiZmFfbG9nX2luZm9bbW9kXS5sZXZlbDsKKwlpZiAoKEJGQV9MT0dfR0VUX1NFVkVSSVRZKG1zZykgPiBsb2dfbGV2ZWwpICYmCisJCQkobXNnLT5hdHRyaWJ1dGVzICE9IEJGQV9MT0dfQVRUUl9OT05FKSkKKwkJcmV0dXJuIDA7CisKKwl2YV9zdGFydChhcCwgbXNnX2lkKTsKKwliZmFfb3NfdnNwcmludGYoYnVmLCBCRkFfTE9HX0dFVF9NU0dfRk1UX1NUUklORyhtc2cpLCBhcCk7CisJdmFfZW5kKGFwKTsKKworCWlmIChsb2dfbW9kKQorCQlsb2dfbW9kLT5jYmZuKGxvZ19tb2QsIG1zZ19pZCwgIiVzWyVzXSVzJXMgJXM6ICVzXG4iLAorCQkJCUJGQV9MT0dfQ0FUX05BTUUsIGxvZ19tb2QtPmluc3RhbmNlX2luZm8sCisJCQkJYmZhX2xvZ19zZXZlcml0eVtCRkFfTE9HX0dFVF9TRVZFUklUWShtc2cpXSwKKwkJCQkobXNnLT5hdHRyaWJ1dGVzICYgQkZBX0xPR19BVFRSX0FVRElUKQorCQkJCT8gIiAoYXVkaXQpICIgOiAiIiwgbXNnLT5tc2dfdmFsdWUsIGJ1Zik7CisJZWxzZQorCQliZmFfbG9nX2luZm9bbW9kXS5jYmZuKGxvZ19tb2QsIG1zZ19pZCwgIiVzJXMlcyAlczogJXNcbiIsCisJCQkJQkZBX0xPR19DQVRfTkFNRSwKKwkJCQliZmFfbG9nX3NldmVyaXR5W0JGQV9MT0dfR0VUX1NFVkVSSVRZKG1zZyldLAorCQkJCShtc2ctPmF0dHJpYnV0ZXMgJiBCRkFfTE9HX0FUVFJfQVVESVQpID8KKwkJCQkiIChhdWRpdCkgIiA6ICIiLCBtc2ctPm1zZ192YWx1ZSwgYnVmKTsKKworCXJldHVybiAwOworfQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2JmYV9sb2dfbW9kdWxlLmMgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9sb2dfbW9kdWxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWMxNTRkMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2xvZ19tb2R1bGUuYwpAQCAtMCwwICsxLDQ1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8Y3MvYmZhX2xvZy5oPgorI2luY2x1ZGUgPGFlbi9iZmFfYWVuX2FkYXB0ZXIuaD4KKyNpbmNsdWRlIDxhZW4vYmZhX2Flbl9hdWRpdC5oPgorI2luY2x1ZGUgPGFlbi9iZmFfYWVuX2V0aHBvcnQuaD4KKyNpbmNsdWRlIDxhZW4vYmZhX2Flbl9pb2MuaD4KKyNpbmNsdWRlIDxhZW4vYmZhX2Flbl9pdG5pbS5oPgorI2luY2x1ZGUgPGFlbi9iZmFfYWVuX2xwb3J0Lmg+CisjaW5jbHVkZSA8YWVuL2JmYV9hZW5fcG9ydC5oPgorI2luY2x1ZGUgPGFlbi9iZmFfYWVuX3Jwb3J0Lmg+CisjaW5jbHVkZSA8bG9nL2JmYV9sb2dfZmNzLmg+CisjaW5jbHVkZSA8bG9nL2JmYV9sb2dfaGFsLmg+CisjaW5jbHVkZSA8bG9nL2JmYV9sb2dfbGludXguaD4KKyNpbmNsdWRlIDxsb2cvYmZhX2xvZ193ZHJ2Lmg+CisKK3N0cnVjdCBiZmFfbG9nX21zZ2RlZl9zIGJmYV9sb2dfbXNnX2FycmF5W10gPSB7CisKKworLyogbWVzc2FnZXMgZGVmaW5lIGZvciBCRkFfQUVOX0NBVF9BREFQVEVSIE1vZHVsZSAqLwore0JGQV9BRU5fQURBUFRFUl9BREQsIEJGQV9MT0dfQVRUUl9OT05FIHwgQkZBX0xPR19BVFRSX0xPRywgQkZBX0xPR19JTkZPLAorICJCRkFfQUVOX0FEQVBURVJfQUREIiwKKyAiTmV3IGFkYXB0ZXIgZm91bmQ6IFNOID0gJXMsIGJhc2UgcG9ydCBXV04gPSAlcy4iLAorICgoQkZBX0xPR19TIDw8IEJGQV9MT0dfQVJHMCkgfCAoQkZBX0xPR19TIDw8IEJGQV9MT0dfQVJHMSkgfCAwKSwgMn0sCisKK3tCRkFfQUVOX0FEQVBURVJfUkVNT1ZFLCBCRkFfTE9HX0FUVFJfTk9ORSB8IEJGQV9MT0dfQVRUUl9MT0csCisgQkZBX0xPR19XQVJOSU5HLCAiQkZBX0FFTl9BREFQVEVSX1JFTU9WRSIsCisgIkFkYXB0ZXIgcmVtb3ZlZDogU04gPSAlcy4iLAorICgoQkZBX0xPR19TIDw8IEJGQV9MT0dfQVJHMCkgfCAwKSwgMX0sCisKKworCisKKy8qIG1lc3NhZ2VzIGRlZmluZSBmb3IgQkZBX0FFTl9DQVRfQVVESVQgTW9kdWxlICovCit7QkZBX0FFTl9BVURJVF9BVVRIX0VOQUJMRSwgQkZBX0xPR19BVFRSX05PTkUgfCBCRkFfTE9HX0FUVFJfTE9HLAorIEJGQV9MT0dfSU5GTywgIkJGQV9BRU5fQVVESVRfQVVUSF9FTkFCTEUiLAorICJBdXRoZW50aWNhdGlvbiBlbmFibGVkIGZvciBiYXNlIHBvcnQ6IFdXTiA9ICVzLiIsCisgKChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcwKSB8IDApLCAxfSwKKwore0JGQV9BRU5fQVVESVRfQVVUSF9ESVNBQkxFLCBCRkFfTE9HX0FUVFJfTk9ORSB8IEJGQV9MT0dfQVRUUl9MT0csCisgQkZBX0xPR19JTkZPLCAiQkZBX0FFTl9BVURJVF9BVVRIX0RJU0FCTEUiLAorICJBdXRoZW50aWNhdGlvbiBkaXNhYmxlZCBmb3IgYmFzZSBwb3J0OiBXV04gPSAlcy4iLAorICgoQkZBX0xPR19TIDw8IEJGQV9MT0dfQVJHMCkgfCAwKSwgMX0sCisKKworCisKKy8qIG1lc3NhZ2VzIGRlZmluZSBmb3IgQkZBX0FFTl9DQVRfRVRIUE9SVCBNb2R1bGUgKi8KK3tCRkFfQUVOX0VUSFBPUlRfTElOS1VQLCBCRkFfTE9HX0FUVFJfTk9ORSB8IEJGQV9MT0dfQVRUUl9MT0csIEJGQV9MT0dfSU5GTywKKyAiQkZBX0FFTl9FVEhQT1JUX0xJTktVUCIsCisgIkJhc2UgcG9ydCBldGhlcm5ldCBsaW5rdXA6IG1hYyA9ICVzLiIsCisgKChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcwKSB8IDApLCAxfSwKKwore0JGQV9BRU5fRVRIUE9SVF9MSU5LRE9XTiwgQkZBX0xPR19BVFRSX05PTkUgfCBCRkFfTE9HX0FUVFJfTE9HLCBCRkFfTE9HX0lORk8sCisgIkJGQV9BRU5fRVRIUE9SVF9MSU5LRE9XTiIsCisgIkJhc2UgcG9ydCBldGhlcm5ldCBsaW5rZG93bjogbWFjID0gJXMuIiwKKyAoKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzApIHwgMCksIDF9LAorCit7QkZBX0FFTl9FVEhQT1JUX0VOQUJMRSwgQkZBX0xPR19BVFRSX05PTkUgfCBCRkFfTE9HX0FUVFJfTE9HLCBCRkFfTE9HX0lORk8sCisgIkJGQV9BRU5fRVRIUE9SVF9FTkFCTEUiLAorICJCYXNlIHBvcnQgZXRoZXJuZXQgaW50ZXJmYWNlIGVuYWJsZWQ6IG1hYyA9ICVzLiIsCisgKChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcwKSB8IDApLCAxfSwKKwore0JGQV9BRU5fRVRIUE9SVF9ESVNBQkxFLCBCRkFfTE9HX0FUVFJfTk9ORSB8IEJGQV9MT0dfQVRUUl9MT0csIEJGQV9MT0dfSU5GTywKKyAiQkZBX0FFTl9FVEhQT1JUX0RJU0FCTEUiLAorICJCYXNlIHBvcnQgZXRoZXJuZXQgaW50ZXJmYWNlIGRpc2FibGVkOiBtYWMgPSAlcy4iLAorICgoQkZBX0xPR19TIDw8IEJGQV9MT0dfQVJHMCkgfCAwKSwgMX0sCisKKworCisKKy8qIG1lc3NhZ2VzIGRlZmluZSBmb3IgQkZBX0FFTl9DQVRfSU9DIE1vZHVsZSAqLwore0JGQV9BRU5fSU9DX0hCR09PRCwgQkZBX0xPR19BVFRSX05PTkUgfCBCRkFfTE9HX0FUVFJfTE9HLCBCRkFfTE9HX0lORk8sCisgIkJGQV9BRU5fSU9DX0hCR09PRCIsCisgIkhlYXJ0IEJlYXQgb2YgSU9DICVkIGlzIGdvb2QuIiwKKyAoKEJGQV9MT0dfRCA8PCBCRkFfTE9HX0FSRzApIHwgMCksIDF9LAorCit7QkZBX0FFTl9JT0NfSEJGQUlMLCBCRkFfTE9HX0FUVFJfTk9ORSB8IEJGQV9MT0dfQVRUUl9MT0csIEJGQV9MT0dfQ1JJVElDQUwsCisgIkJGQV9BRU5fSU9DX0hCRkFJTCIsCisgIkhlYXJ0IEJlYXQgb2YgSU9DICVkIGhhcyBmYWlsZWQuIiwKKyAoKEJGQV9MT0dfRCA8PCBCRkFfTE9HX0FSRzApIHwgMCksIDF9LAorCit7QkZBX0FFTl9JT0NfRU5BQkxFLCBCRkFfTE9HX0FUVFJfTk9ORSB8IEJGQV9MT0dfQVRUUl9MT0csIEJGQV9MT0dfSU5GTywKKyAiQkZBX0FFTl9JT0NfRU5BQkxFIiwKKyAiSU9DICVkIGlzIGVuYWJsZWQuIiwKKyAoKEJGQV9MT0dfRCA8PCBCRkFfTE9HX0FSRzApIHwgMCksIDF9LAorCit7QkZBX0FFTl9JT0NfRElTQUJMRSwgQkZBX0xPR19BVFRSX05PTkUgfCBCRkFfTE9HX0FUVFJfTE9HLCBCRkFfTE9HX0lORk8sCisgIkJGQV9BRU5fSU9DX0RJU0FCTEUiLAorICJJT0MgJWQgaXMgZGlzYWJsZWQuIiwKKyAoKEJGQV9MT0dfRCA8PCBCRkFfTE9HX0FSRzApIHwgMCksIDF9LAorCit7QkZBX0FFTl9JT0NfRldNSVNNQVRDSCwgQkZBX0xPR19BVFRSX05PTkUgfCBCRkFfTE9HX0FUVFJfTE9HLAorIEJGQV9MT0dfQ1JJVElDQUwsICJCRkFfQUVOX0lPQ19GV01JU01BVENIIiwKKyAiUnVubmluZyBmaXJtd2FyZSB2ZXJzaW9uIGlzIGluY29tcGF0aWJsZSB3aXRoIHRoZSBkcml2ZXIgdmVyc2lvbi4iLAorICgwKSwgMH0sCisKKworCisKKy8qIG1lc3NhZ2VzIGRlZmluZSBmb3IgQkZBX0FFTl9DQVRfSVROSU0gTW9kdWxlICovCit7QkZBX0FFTl9JVE5JTV9PTkxJTkUsIEJGQV9MT0dfQVRUUl9OT05FIHwgQkZBX0xPR19BVFRSX0xPRywgQkZBX0xPR19JTkZPLAorICJCRkFfQUVOX0lUTklNX09OTElORSIsCisgIlRhcmdldCAoV1dOID0gJXMpIGlzIG9ubGluZSBmb3IgaW5pdGlhdG9yIChXV04gPSAlcykuIiwKKyAoKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzApIHwgKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzEpIHwgMCksIDJ9LAorCit7QkZBX0FFTl9JVE5JTV9PRkZMSU5FLCBCRkFfTE9HX0FUVFJfTk9ORSB8IEJGQV9MT0dfQVRUUl9MT0csIEJGQV9MT0dfSU5GTywKKyAiQkZBX0FFTl9JVE5JTV9PRkZMSU5FIiwKKyAiVGFyZ2V0IChXV04gPSAlcykgb2ZmbGluZWQgYnkgaW5pdGlhdG9yIChXV04gPSAlcykuIiwKKyAoKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzApIHwgKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzEpIHwgMCksIDJ9LAorCit7QkZBX0FFTl9JVE5JTV9ESVNDT05ORUNULCBCRkFfTE9HX0FUVFJfTk9ORSB8IEJGQV9MT0dfQVRUUl9MT0csCisgQkZBX0xPR19FUlJPUiwgIkJGQV9BRU5fSVROSU1fRElTQ09OTkVDVCIsCisgIlRhcmdldCAoV1dOID0gJXMpIGNvbm5lY3Rpdml0eSBsb3N0IGZvciBpbml0aWF0b3IgKFdXTiA9ICVzKS4iLAorICgoQkZBX0xPR19TIDw8IEJGQV9MT0dfQVJHMCkgfCAoQkZBX0xPR19TIDw8IEJGQV9MT0dfQVJHMSkgfCAwKSwgMn0sCisKKworCisKKy8qIG1lc3NhZ2VzIGRlZmluZSBmb3IgQkZBX0FFTl9DQVRfTFBPUlQgTW9kdWxlICovCit7QkZBX0FFTl9MUE9SVF9ORVcsIEJGQV9MT0dfQVRUUl9OT05FIHwgQkZBX0xPR19BVFRSX0xPRywgQkZBX0xPR19JTkZPLAorICJCRkFfQUVOX0xQT1JUX05FVyIsCisgIk5ldyBsb2dpY2FsIHBvcnQgY3JlYXRlZDogV1dOID0gJXMsIFJvbGUgPSAlcy4iLAorICgoQkZBX0xPR19TIDw8IEJGQV9MT0dfQVJHMCkgfCAoQkZBX0xPR19TIDw8IEJGQV9MT0dfQVJHMSkgfCAwKSwgMn0sCisKK3tCRkFfQUVOX0xQT1JUX0RFTEVURSwgQkZBX0xPR19BVFRSX05PTkUgfCBCRkFfTE9HX0FUVFJfTE9HLCBCRkFfTE9HX0lORk8sCisgIkJGQV9BRU5fTFBPUlRfREVMRVRFIiwKKyAiTG9naWNhbCBwb3J0IGRlbGV0ZWQ6IFdXTiA9ICVzLCBSb2xlID0gJXMuIiwKKyAoKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzApIHwgKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzEpIHwgMCksIDJ9LAorCit7QkZBX0FFTl9MUE9SVF9PTkxJTkUsIEJGQV9MT0dfQVRUUl9OT05FIHwgQkZBX0xPR19BVFRSX0xPRywgQkZBX0xPR19JTkZPLAorICJCRkFfQUVOX0xQT1JUX09OTElORSIsCisgIkxvZ2ljYWwgcG9ydCBvbmxpbmU6IFdXTiA9ICVzLCBSb2xlID0gJXMuIiwKKyAoKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzApIHwgKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzEpIHwgMCksIDJ9LAorCit7QkZBX0FFTl9MUE9SVF9PRkZMSU5FLCBCRkFfTE9HX0FUVFJfTk9ORSB8IEJGQV9MT0dfQVRUUl9MT0csIEJGQV9MT0dfSU5GTywKKyAiQkZBX0FFTl9MUE9SVF9PRkZMSU5FIiwKKyAiTG9naWNhbCBwb3J0IHRha2VuIG9mZmxpbmU6IFdXTiA9ICVzLCBSb2xlID0gJXMuIiwKKyAoKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzApIHwgKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzEpIHwgMCksIDJ9LAorCit7QkZBX0FFTl9MUE9SVF9ESVNDT05ORUNULCBCRkFfTE9HX0FUVFJfTk9ORSB8IEJGQV9MT0dfQVRUUl9MT0csCisgQkZBX0xPR19FUlJPUiwgIkJGQV9BRU5fTFBPUlRfRElTQ09OTkVDVCIsCisgIkxvZ2ljYWwgcG9ydCBsb3N0IGZhYnJpYyBjb25uZWN0aXZpdHk6IFdXTiA9ICVzLCBSb2xlID0gJXMuIiwKKyAoKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzApIHwgKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzEpIHwgMCksIDJ9LAorCit7QkZBX0FFTl9MUE9SVF9ORVdfUFJPUCwgQkZBX0xPR19BVFRSX05PTkUgfCBCRkFfTE9HX0FUVFJfTE9HLCBCRkFfTE9HX0lORk8sCisgIkJGQV9BRU5fTFBPUlRfTkVXX1BST1AiLAorICJOZXcgdmlydHVhbCBwb3J0IGNyZWF0ZWQgdXNpbmcgcHJvcHJpZXRhcnkgaW50ZXJmYWNlOiBXV04gPSAlcywgUm9sZSA9ICVzLiIsCisgKChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcwKSB8IChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcxKSB8IDApLCAyfSwKKwore0JGQV9BRU5fTFBPUlRfREVMRVRFX1BST1AsIEJGQV9MT0dfQVRUUl9OT05FIHwgQkZBX0xPR19BVFRSX0xPRywKKyBCRkFfTE9HX0lORk8sICJCRkFfQUVOX0xQT1JUX0RFTEVURV9QUk9QIiwKKyAiVmlydHVhbCBwb3J0IGRlbGV0ZWQgdXNpbmcgcHJvcHJpZXRhcnkgaW50ZXJmYWNlOiBXV04gPSAlcywgUm9sZSA9ICVzLiIsCisgKChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcwKSB8IChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcxKSB8IDApLCAyfSwKKwore0JGQV9BRU5fTFBPUlRfTkVXX1NUQU5EQVJELCBCRkFfTE9HX0FUVFJfTk9ORSB8IEJGQV9MT0dfQVRUUl9MT0csCisgQkZBX0xPR19JTkZPLCAiQkZBX0FFTl9MUE9SVF9ORVdfU1RBTkRBUkQiLAorICJOZXcgdmlydHVhbCBwb3J0IGNyZWF0ZWQgdXNpbmcgc3RhbmRhcmQgaW50ZXJmYWNlOiBXV04gPSAlcywgUm9sZSA9ICVzLiIsCisgKChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcwKSB8IChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcxKSB8IDApLCAyfSwKKwore0JGQV9BRU5fTFBPUlRfREVMRVRFX1NUQU5EQVJELCBCRkFfTE9HX0FUVFJfTk9ORSB8IEJGQV9MT0dfQVRUUl9MT0csCisgQkZBX0xPR19JTkZPLCAiQkZBX0FFTl9MUE9SVF9ERUxFVEVfU1RBTkRBUkQiLAorICJWaXJ0dWFsIHBvcnQgZGVsZXRlZCB1c2luZyBzdGFuZGFyZCBpbnRlcmZhY2U6IFdXTiA9ICVzLCBSb2xlID0gJXMuIiwKKyAoKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzApIHwgKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzEpIHwgMCksIDJ9LAorCit7QkZBX0FFTl9MUE9SVF9OUElWX0RVUF9XV04sIEJGQV9MT0dfQVRUUl9OT05FIHwgQkZBX0xPR19BVFRSX0xPRywKKyBCRkFfTE9HX1dBUk5JTkcsICJCRkFfQUVOX0xQT1JUX05QSVZfRFVQX1dXTiIsCisgIlZpcnR1YWwgcG9ydCBsb2dpbiBmYWlsZWQuIER1cGxpY2F0ZSBXV04gPSAlcyByZXBvcnRlZCBieSBmYWJyaWMuIiwKKyAoKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzApIHwgMCksIDF9LAorCit7QkZBX0FFTl9MUE9SVF9OUElWX0ZBQlJJQ19NQVgsIEJGQV9MT0dfQVRUUl9OT05FIHwgQkZBX0xPR19BVFRSX0xPRywKKyBCRkFfTE9HX1dBUk5JTkcsICJCRkFfQUVOX0xQT1JUX05QSVZfRkFCUklDX01BWCIsCisgIlZpcnR1YWwgcG9ydCAoV1dOID0gJXMpIGxvZ2luIGZhaWxlZC4gTWF4IE5QSVYgcG9ydHMgYWxyZWFkeSBleGlzdCBpbiIKKyAiIGZhYnJpYy9mcG9ydC4iLAorICgoQkZBX0xPR19TIDw8IEJGQV9MT0dfQVJHMCkgfCAwKSwgMX0sCisKK3tCRkFfQUVOX0xQT1JUX05QSVZfVU5LTk9XTiwgQkZBX0xPR19BVFRSX05PTkUgfCBCRkFfTE9HX0FUVFJfTE9HLAorIEJGQV9MT0dfV0FSTklORywgIkJGQV9BRU5fTFBPUlRfTlBJVl9VTktOT1dOIiwKKyAiVmlydHVhbCBwb3J0IChXV04gPSAlcykgbG9naW4gZmFpbGVkLiIsCisgKChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcwKSB8IDApLCAxfSwKKworCisKKworLyogbWVzc2FnZXMgZGVmaW5lIGZvciBCRkFfQUVOX0NBVF9QT1JUIE1vZHVsZSAqLwore0JGQV9BRU5fUE9SVF9PTkxJTkUsIEJGQV9MT0dfQVRUUl9OT05FLCBCRkFfTE9HX0lORk8sICJCRkFfQUVOX1BPUlRfT05MSU5FIiwKKyAiQmFzZSBwb3J0IG9ubGluZTogV1dOID0gJXMuIiwKKyAoKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzApIHwgMCksIDF9LAorCit7QkZBX0FFTl9QT1JUX09GRkxJTkUsIEJGQV9MT0dfQVRUUl9OT05FIHwgQkZBX0xPR19BVFRSX0xPRywgQkZBX0xPR19XQVJOSU5HLAorICJCRkFfQUVOX1BPUlRfT0ZGTElORSIsCisgIkJhc2UgcG9ydCBvZmZsaW5lOiBXV04gPSAlcy4iLAorICgoQkZBX0xPR19TIDw8IEJGQV9MT0dfQVJHMCkgfCAwKSwgMX0sCisKK3tCRkFfQUVOX1BPUlRfUkxJUiwgQkZBX0xPR19BVFRSX05PTkUgfCBCRkFfTE9HX0FUVFJfTE9HLCBCRkFfTE9HX0lORk8sCisgIkJGQV9BRU5fUE9SVF9STElSIiwKKyAiUkxJUiBldmVudCBub3Qgc3VwcG9ydGVkLiIsCisgKDApLCAwfSwKKwore0JGQV9BRU5fUE9SVF9TRlBfSU5TRVJULCBCRkFfTE9HX0FUVFJfTk9ORSB8IEJGQV9MT0dfQVRUUl9MT0csIEJGQV9MT0dfSU5GTywKKyAiQkZBX0FFTl9QT1JUX1NGUF9JTlNFUlQiLAorICJOZXcgU0ZQIGZvdW5kOiBXV04vTUFDID0gJXMuIiwKKyAoKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzApIHwgMCksIDF9LAorCit7QkZBX0FFTl9QT1JUX1NGUF9SRU1PVkUsIEJGQV9MT0dfQVRUUl9OT05FIHwgQkZBX0xPR19BVFRSX0xPRywKKyBCRkFfTE9HX1dBUk5JTkcsICJCRkFfQUVOX1BPUlRfU0ZQX1JFTU9WRSIsCisgIlNGUCByZW1vdmVkOiBXV04vTUFDID0gJXMuIiwKKyAoKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzApIHwgMCksIDF9LAorCit7QkZBX0FFTl9QT1JUX1NGUF9QT00sIEJGQV9MT0dfQVRUUl9OT05FIHwgQkZBX0xPR19BVFRSX0xPRywgQkZBX0xPR19XQVJOSU5HLAorICJCRkFfQUVOX1BPUlRfU0ZQX1BPTSIsCisgIlNGUCBQT00gbGV2ZWwgdG8gJXM6IFdXTi9NQUMgPSAlcy4iLAorICgoQkZBX0xPR19TIDw8IEJGQV9MT0dfQVJHMCkgfCAoQkZBX0xPR19TIDw8IEJGQV9MT0dfQVJHMSkgfCAwKSwgMn0sCisKK3tCRkFfQUVOX1BPUlRfRU5BQkxFLCBCRkFfTE9HX0FUVFJfTk9ORSB8IEJGQV9MT0dfQVRUUl9MT0csIEJGQV9MT0dfSU5GTywKKyAiQkZBX0FFTl9QT1JUX0VOQUJMRSIsCisgIkJhc2UgcG9ydCBlbmFibGVkOiBXV04gPSAlcy4iLAorICgoQkZBX0xPR19TIDw8IEJGQV9MT0dfQVJHMCkgfCAwKSwgMX0sCisKK3tCRkFfQUVOX1BPUlRfRElTQUJMRSwgQkZBX0xPR19BVFRSX05PTkUgfCBCRkFfTE9HX0FUVFJfTE9HLCBCRkFfTE9HX0lORk8sCisgIkJGQV9BRU5fUE9SVF9ESVNBQkxFIiwKKyAiQmFzZSBwb3J0IGRpc2FibGVkOiBXV04gPSAlcy4iLAorICgoQkZBX0xPR19TIDw8IEJGQV9MT0dfQVJHMCkgfCAwKSwgMX0sCisKK3tCRkFfQUVOX1BPUlRfQVVUSF9PTiwgQkZBX0xPR19BVFRSX05PTkUgfCBCRkFfTE9HX0FUVFJfTE9HLCBCRkFfTE9HX0lORk8sCisgIkJGQV9BRU5fUE9SVF9BVVRIX09OIiwKKyAiQXV0aGVudGljYXRpb24gc3VjY2Vzc2Z1bCBmb3IgYmFzZSBwb3J0OiBXV04gPSAlcy4iLAorICgoQkZBX0xPR19TIDw8IEJGQV9MT0dfQVJHMCkgfCAwKSwgMX0sCisKK3tCRkFfQUVOX1BPUlRfQVVUSF9PRkYsIEJGQV9MT0dfQVRUUl9OT05FIHwgQkZBX0xPR19BVFRSX0xPRywgQkZBX0xPR19FUlJPUiwKKyAiQkZBX0FFTl9QT1JUX0FVVEhfT0ZGIiwKKyAiQXV0aGVudGljYXRpb24gdW5zdWNjZXNzZnVsIGZvciBiYXNlIHBvcnQ6IFdXTiA9ICVzLiIsCisgKChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcwKSB8IDApLCAxfSwKKwore0JGQV9BRU5fUE9SVF9ESVNDT05ORUNULCBCRkFfTE9HX0FUVFJfTk9ORSB8IEJGQV9MT0dfQVRUUl9MT0csIEJGQV9MT0dfRVJST1IsCisgIkJGQV9BRU5fUE9SVF9ESVNDT05ORUNUIiwKKyAiQmFzZSBwb3J0IChXV04gPSAlcykgbG9zdCBmYWJyaWMgY29ubmVjdGl2aXR5LiIsCisgKChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcwKSB8IDApLCAxfSwKKwore0JGQV9BRU5fUE9SVF9RT1NfTkVHLCBCRkFfTE9HX0FUVFJfTk9ORSB8IEJGQV9MT0dfQVRUUl9MT0csIEJGQV9MT0dfV0FSTklORywKKyAiQkZBX0FFTl9QT1JUX1FPU19ORUciLAorICJRT1MgbmVnb3RpYXRpb24gZmFpbGVkIGZvciBiYXNlIHBvcnQ6IFdXTiA9ICVzLiIsCisgKChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcwKSB8IDApLCAxfSwKKwore0JGQV9BRU5fUE9SVF9GQUJSSUNfTkFNRV9DSEFOR0UsIEJGQV9MT0dfQVRUUl9OT05FIHwgQkZBX0xPR19BVFRSX0xPRywKKyBCRkFfTE9HX1dBUk5JTkcsICJCRkFfQUVOX1BPUlRfRkFCUklDX05BTUVfQ0hBTkdFIiwKKyAiQmFzZSBwb3J0IFdXTiA9ICVzLCBGYWJyaWMgV1dOID0gJXMuIiwKKyAoKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzApIHwgKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzEpIHwgMCksIDJ9LAorCit7QkZBX0FFTl9QT1JUX1NGUF9BQ0NFU1NfRVJST1IsIEJGQV9MT0dfQVRUUl9OT05FIHwgQkZBX0xPR19BVFRSX0xPRywKKyBCRkFfTE9HX1dBUk5JTkcsICJCRkFfQUVOX1BPUlRfU0ZQX0FDQ0VTU19FUlJPUiIsCisgIlNGUCBhY2Nlc3MgZXJyb3I6IFdXTi9NQUMgPSAlcy4iLAorICgoQkZBX0xPR19TIDw8IEJGQV9MT0dfQVJHMCkgfCAwKSwgMX0sCisKK3tCRkFfQUVOX1BPUlRfU0ZQX1VOU1VQUE9SVCwgQkZBX0xPR19BVFRSX05PTkUgfCBCRkFfTE9HX0FUVFJfTE9HLAorIEJGQV9MT0dfV0FSTklORywgIkJGQV9BRU5fUE9SVF9TRlBfVU5TVVBQT1JUIiwKKyAiVW5zdXBwb3J0ZWQgU0ZQIGZvdW5kOiBXV04vTUFDID0gJXMuIiwKKyAoKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzApIHwgMCksIDF9LAorCisKKworCisvKiBtZXNzYWdlcyBkZWZpbmUgZm9yIEJGQV9BRU5fQ0FUX1JQT1JUIE1vZHVsZSAqLwore0JGQV9BRU5fUlBPUlRfT05MSU5FLCBCRkFfTE9HX0FUVFJfTk9ORSB8IEJGQV9MT0dfQVRUUl9MT0csIEJGQV9MT0dfSU5GTywKKyAiQkZBX0FFTl9SUE9SVF9PTkxJTkUiLAorICJSZW1vdGUgcG9ydCAoV1dOID0gJXMpIG9ubGluZSBmb3IgbG9naWNhbCBwb3J0IChXV04gPSAlcykuIiwKKyAoKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzApIHwgKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzEpIHwgMCksIDJ9LAorCit7QkZBX0FFTl9SUE9SVF9PRkZMSU5FLCBCRkFfTE9HX0FUVFJfTk9ORSB8IEJGQV9MT0dfQVRUUl9MT0csIEJGQV9MT0dfSU5GTywKKyAiQkZBX0FFTl9SUE9SVF9PRkZMSU5FIiwKKyAiUmVtb3RlIHBvcnQgKFdXTiA9ICVzKSBvZmZsaW5lZCBieSBsb2dpY2FsIHBvcnQgKFdXTiA9ICVzKS4iLAorICgoQkZBX0xPR19TIDw8IEJGQV9MT0dfQVJHMCkgfCAoQkZBX0xPR19TIDw8IEJGQV9MT0dfQVJHMSkgfCAwKSwgMn0sCisKK3tCRkFfQUVOX1JQT1JUX0RJU0NPTk5FQ1QsIEJGQV9MT0dfQVRUUl9OT05FIHwgQkZBX0xPR19BVFRSX0xPRywKKyBCRkFfTE9HX0VSUk9SLCAiQkZBX0FFTl9SUE9SVF9ESVNDT05ORUNUIiwKKyAiUmVtb3RlIHBvcnQgKFdXTiA9ICVzKSBjb25uZWN0aXZpdHkgbG9zdCBmb3IgbG9naWNhbCBwb3J0IChXV04gPSAlcykuIiwKKyAoKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzApIHwgKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzEpIHwgMCksIDJ9LAorCit7QkZBX0FFTl9SUE9SVF9RT1NfUFJJTywgQkZBX0xPR19BVFRSX05PTkUgfCBCRkFfTE9HX0FUVFJfTE9HLCBCRkFfTE9HX0lORk8sCisgIkJGQV9BRU5fUlBPUlRfUU9TX1BSSU8iLAorICJRT1MgcHJpb3JpdHkgY2hhbmdlZCB0byAlczogUlBXV04gPSAlcyBhbmQgTFBXV04gPSAlcy4iLAorICgoQkZBX0xPR19TIDw8IEJGQV9MT0dfQVJHMCkgfCAoQkZBX0xPR19TIDw8IEJGQV9MT0dfQVJHMSkgfAorICAoQkZBX0xPR19TIDw8IEJGQV9MT0dfQVJHMikgfCAwKSwgM30sCisKK3tCRkFfQUVOX1JQT1JUX1FPU19GTE9XSUQsIEJGQV9MT0dfQVRUUl9OT05FIHwgQkZBX0xPR19BVFRSX0xPRywgQkZBX0xPR19JTkZPLAorICJCRkFfQUVOX1JQT1JUX1FPU19GTE9XSUQiLAorICJRT1MgZmxvdyBJRCBjaGFuZ2VkIHRvICVkOiBSUFdXTiA9ICVzIGFuZCBMUFdXTiA9ICVzLiIsCisgKChCRkFfTE9HX0QgPDwgQkZBX0xPR19BUkcwKSB8IChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcxKSB8CisgIChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcyKSB8IDApLCAzfSwKKworCisKKworLyogbWVzc2FnZXMgZGVmaW5lIGZvciBGQ1MgTW9kdWxlICovCit7QkZBX0xPR19GQ1NfRkFCUklDX05PU1dJVENILCBCRkFfTE9HX0FUVFJfTk9ORSB8IEJGQV9MT0dfQVRUUl9MT0csCisgQkZBX0xPR19JTkZPLCAiRkNTX0ZBQlJJQ19OT1NXSVRDSCIsCisgIk5vIHN3aXRjaGVkIGZhYnJpYyBwcmVzZW5jZSBpcyBkZXRlY3RlZC4iLAorICgwKSwgMH0sCisKK3tCRkFfTE9HX0ZDU19GQUJSSUNfSVNPTEFURUQsIEJGQV9MT0dfQVRUUl9OT05FIHwgQkZBX0xPR19BVFRSX0xPRywKKyBCRkFfTE9HX0lORk8sICJGQ1NfRkFCUklDX0lTT0xBVEVEIiwKKyAiUG9ydCBpcyBpc29sYXRlZCBkdWUgdG8gVkZfSUQgbWlzbWF0Y2guIFBXV046ICVzLCBQb3J0IFZGX0lEOiAlMDR4IGFuZCIKKyAiIHN3aXRjaCBwb3J0IFZGX0lEOiAlMDR4LiIsCisgKChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcwKSB8IChCRkFfTE9HX1ggPDwgQkZBX0xPR19BUkcxKSB8CisgIChCRkFfTE9HX1ggPDwgQkZBX0xPR19BUkcyKSB8IDApLCAzfSwKKworCisKKworLyogbWVzc2FnZXMgZGVmaW5lIGZvciBIQUwgTW9kdWxlICovCit7QkZBX0xPR19IQUxfQVNTRVJULCBCRkFfTE9HX0FUVFJfTk9ORSB8IEJGQV9MT0dfQVRUUl9MT0csIEJGQV9MT0dfRVJST1IsCisgIkhBTF9BU1NFUlQiLAorICJBc3NlcnRpb24gZmFpbHVyZTogJXM6JWQ6ICVzIiwKKyAoKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzApIHwgKEJGQV9MT0dfRCA8PCBCRkFfTE9HX0FSRzEpIHwKKyAgKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzIpIHwgMCksIDN9LAorCit7QkZBX0xPR19IQUxfSEVBUlRCRUFUX0ZBSUxVUkUsIEJGQV9MT0dfQVRUUl9OT05FIHwgQkZBX0xPR19BVFRSX0xPRywKKyBCRkFfTE9HX0NSSVRJQ0FMLCAiSEFMX0hFQVJUQkVBVF9GQUlMVVJFIiwKKyAiRmlybXdhcmUgaGVhcnRiZWF0IGZhaWx1cmUgYXQgJWQiLAorICgoQkZBX0xPR19EIDw8IEJGQV9MT0dfQVJHMCkgfCAwKSwgMX0sCisKK3tCRkFfTE9HX0hBTF9GQ1BJTV9QQVJNX0lOVkFMSUQsIEJGQV9MT0dfQVRUUl9OT05FIHwgQkZBX0xPR19BVFRSX0xPRywKKyBCRkFfTE9HX0lORk8sICJIQUxfRkNQSU1fUEFSTV9JTlZBTElEIiwKKyAiRHJpdmVyIGNvbmZpZ3VyYXRpb24gJXMgdmFsdWUgJWQgaXMgaW52YWxpZC4gVmFsdWUgc2hvdWxkIGJlIHdpdGhpbiIKKyAiICVkIGFuZCAlZC4iLAorICgoQkZBX0xPR19TIDw8IEJGQV9MT0dfQVJHMCkgfCAoQkZBX0xPR19EIDw8IEJGQV9MT0dfQVJHMSkgfAorICAoQkZBX0xPR19EIDw8IEJGQV9MT0dfQVJHMikgfCAoQkZBX0xPR19EIDw8IEJGQV9MT0dfQVJHMykgfCAwKSwgNH0sCisKK3tCRkFfTE9HX0hBTF9TTV9BU1NFUlQsIEJGQV9MT0dfQVRUUl9OT05FIHwgQkZBX0xPR19BVFRSX0xPRywgQkZBX0xPR19FUlJPUiwKKyAiSEFMX1NNX0FTU0VSVCIsCisgIlNNIEFzc2VydGlvbiBmYWlsdXJlOiAlczolZDogZXZlbnQgPSAlZCIsCisgKChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcwKSB8IChCRkFfTE9HX0QgPDwgQkZBX0xPR19BUkcxKSB8CisgIChCRkFfTE9HX0QgPDwgQkZBX0xPR19BUkcyKSB8IDApLCAzfSwKKworCisKKworLyogbWVzc2FnZXMgZGVmaW5lIGZvciBMSU5VWCBNb2R1bGUgKi8KK3tCRkFfTE9HX0xJTlVYX0RFVklDRV9DTEFJTUVELCBCRkFfTE9HX0FUVFJfTk9ORSB8IEJGQV9MT0dfQVRUUl9MT0csCisgQkZBX0xPR19JTkZPLCAiTElOVVhfREVWSUNFX0NMQUlNRUQiLAorICJiZmEgZGV2aWNlIGF0ICVzIGNsYWltZWQuIiwKKyAoKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzApIHwgMCksIDF9LAorCit7QkZBX0xPR19MSU5VWF9IQVNIX0lOSVRfRkFJTEVELCBCRkFfTE9HX0FUVFJfTk9ORSB8IEJGQV9MT0dfQVRUUl9MT0csCisgQkZBX0xPR19JTkZPLCAiTElOVVhfSEFTSF9JTklUX0ZBSUxFRCIsCisgIkhhc2ggdGFibGUgaW5pdGlhbGl6YXRpb24gZmFpbHVyZSBmb3IgdGhlIHBvcnQgJXMuIiwKKyAoKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzApIHwgMCksIDF9LAorCit7QkZBX0xPR19MSU5VWF9TWVNGU19GQUlMRUQsIEJGQV9MT0dfQVRUUl9OT05FIHwgQkZBX0xPR19BVFRSX0xPRywKKyBCRkFfTE9HX0lORk8sICJMSU5VWF9TWVNGU19GQUlMRUQiLAorICJzeXNmcyBmaWxlIGNyZWF0aW9uIGZhaWx1cmUgZm9yIHRoZSBwb3J0ICVzLiIsCisgKChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcwKSB8IDApLCAxfSwKKwore0JGQV9MT0dfTElOVVhfTUVNX0FMTE9DX0ZBSUxFRCwgQkZBX0xPR19BVFRSX05PTkUgfCBCRkFfTE9HX0FUVFJfTE9HLAorIEJGQV9MT0dfSU5GTywgIkxJTlVYX01FTV9BTExPQ19GQUlMRUQiLAorICJNZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQ6ICVzLiAgIiwKKyAoKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzApIHwgMCksIDF9LAorCit7QkZBX0xPR19MSU5VWF9EUklWRVJfUkVHSVNUUkFUSU9OX0ZBSUxFRCwKKyBCRkFfTE9HX0FUVFJfTk9ORSB8IEJGQV9MT0dfQVRUUl9MT0csIEJGQV9MT0dfSU5GTywKKyAiTElOVVhfRFJJVkVSX1JFR0lTVFJBVElPTl9GQUlMRUQiLAorICIlcy4gICIsCisgKChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcwKSB8IDApLCAxfSwKKwore0JGQV9MT0dfTElOVVhfSVROSU1fRlJFRSwgQkZBX0xPR19BVFRSX05PTkUgfCBCRkFfTE9HX0FUVFJfTE9HLCBCRkFfTE9HX0lORk8sCisgIkxJTlVYX0lUTklNX0ZSRUUiLAorICJzY3NpJWQ6IEZDSUQ6ICVzIFdXUE46ICVzIiwKKyAoKEJGQV9MT0dfRCA8PCBCRkFfTE9HX0FSRzApIHwgKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzEpIHwKKyAgKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzIpIHwgMCksIDN9LAorCit7QkZBX0xPR19MSU5VWF9JVE5JTV9PTkxJTkUsIEJGQV9MT0dfQVRUUl9OT05FIHwgQkZBX0xPR19BVFRSX0xPRywKKyBCRkFfTE9HX0lORk8sICJMSU5VWF9JVE5JTV9PTkxJTkUiLAorICJUYXJnZXQ6ICVkOjA6JWQgRkNJRDogJXMgV1dQTjogJXMiLAorICgoQkZBX0xPR19EIDw8IEJGQV9MT0dfQVJHMCkgfCAoQkZBX0xPR19EIDw8IEJGQV9MT0dfQVJHMSkgfAorICAoQkZBX0xPR19TIDw8IEJGQV9MT0dfQVJHMikgfCAoQkZBX0xPR19TIDw8IEJGQV9MT0dfQVJHMykgfCAwKSwgNH0sCisKK3tCRkFfTE9HX0xJTlVYX0lUTklNX09GRkxJTkUsIEJGQV9MT0dfQVRUUl9OT05FIHwgQkZBX0xPR19BVFRSX0xPRywKKyBCRkFfTE9HX0lORk8sICJMSU5VWF9JVE5JTV9PRkZMSU5FIiwKKyAiVGFyZ2V0OiAlZDowOiVkIEZDSUQ6ICVzIFdXUE46ICVzIiwKKyAoKEJGQV9MT0dfRCA8PCBCRkFfTE9HX0FSRzApIHwgKEJGQV9MT0dfRCA8PCBCRkFfTE9HX0FSRzEpIHwKKyAgKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzIpIHwgKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzMpIHwgMCksIDR9LAorCit7QkZBX0xPR19MSU5VWF9TQ1NJX0hPU1RfRlJFRSwgQkZBX0xPR19BVFRSX05PTkUgfCBCRkFfTE9HX0FUVFJfTE9HLAorIEJGQV9MT0dfSU5GTywgIkxJTlVYX1NDU0lfSE9TVF9GUkVFIiwKKyAiRnJlZSBzY3NpJWQiLAorICgoQkZBX0xPR19EIDw8IEJGQV9MT0dfQVJHMCkgfCAwKSwgMX0sCisKK3tCRkFfTE9HX0xJTlVYX1NDU0lfQUJPUlQsIEJGQV9MT0dfQVRUUl9OT05FIHwgQkZBX0xPR19BVFRSX0xPRywgQkZBX0xPR19JTkZPLAorICJMSU5VWF9TQ1NJX0FCT1JUIiwKKyAic2NzaSVkOiBhYm9ydCBjbW5kICVwLCBpb3RhZyAleCIsCisgKChCRkFfTE9HX0QgPDwgQkZBX0xPR19BUkcwKSB8IChCRkFfTE9HX1AgPDwgQkZBX0xPR19BUkcxKSB8CisgIChCRkFfTE9HX1ggPDwgQkZBX0xPR19BUkcyKSB8IDApLCAzfSwKKwore0JGQV9MT0dfTElOVVhfU0NTSV9BQk9SVF9DT01QLCBCRkFfTE9HX0FUVFJfTk9ORSB8IEJGQV9MT0dfQVRUUl9MT0csCisgQkZBX0xPR19JTkZPLCAiTElOVVhfU0NTSV9BQk9SVF9DT01QIiwKKyAic2NzaSVkOiBjb21wbGV0ZSBhYm9ydCAweCVwLCBpb3RhZyAweCV4IiwKKyAoKEJGQV9MT0dfRCA8PCBCRkFfTE9HX0FSRzApIHwgKEJGQV9MT0dfUCA8PCBCRkFfTE9HX0FSRzEpIHwKKyAgKEJGQV9MT0dfWCA8PCBCRkFfTE9HX0FSRzIpIHwgMCksIDN9LAorCisKKworCisvKiBtZXNzYWdlcyBkZWZpbmUgZm9yIFdEUlYgTW9kdWxlICovCit7QkZBX0xPR19XRFJWX0lPQ19JTklUX0VSUk9SLCBCRkFfTE9HX0FUVFJfTk9ORSB8IEJGQV9MT0dfQVRUUl9MT0csCisgQkZBX0xPR19JTkZPLCAiV0RSVl9JT0NfSU5JVF9FUlJPUiIsCisgIklPQyBpbml0aWFsaXphdGlvbiBoYXMgZmFpbGVkLiIsCisgKDApLCAwfSwKKwore0JGQV9MT0dfV0RSVl9JT0NfSU5URVJOQUxfRVJST1IsIEJGQV9MT0dfQVRUUl9OT05FIHwgQkZBX0xPR19BVFRSX0xPRywKKyBCRkFfTE9HX0lORk8sICJXRFJWX0lPQ19JTlRFUk5BTF9FUlJPUiIsCisgIklPQyBpbnRlcm5hbCBlcnJvci4gICIsCisgKDApLCAwfSwKKwore0JGQV9MT0dfV0RSVl9JT0NfU1RBUlRfRVJST1IsIEJGQV9MT0dfQVRUUl9OT05FIHwgQkZBX0xPR19BVFRSX0xPRywKKyBCRkFfTE9HX0lORk8sICJXRFJWX0lPQ19TVEFSVF9FUlJPUiIsCisgIklPQyBjb3VsZCBub3QgYmUgc3RhcnRlZC4gICIsCisgKDApLCAwfSwKKwore0JGQV9MT0dfV0RSVl9JT0NfU1RPUF9FUlJPUiwgQkZBX0xPR19BVFRSX05PTkUgfCBCRkFfTE9HX0FUVFJfTE9HLAorIEJGQV9MT0dfSU5GTywgIldEUlZfSU9DX1NUT1BfRVJST1IiLAorICJJT0MgY291bGQgbm90IGJlIHN0b3BwZWQuICAiLAorICgwKSwgMH0sCisKK3tCRkFfTE9HX1dEUlZfSU5TVUZGSUNJRU5UX1JFU09VUkNFUywgQkZBX0xPR19BVFRSX05PTkUgfCBCRkFfTE9HX0FUVFJfTE9HLAorIEJGQV9MT0dfSU5GTywgIldEUlZfSU5TVUZGSUNJRU5UX1JFU09VUkNFUyIsCisgIkluc3VmZmljaWVudCBtZW1vcnkuICAiLAorICgwKSwgMH0sCisKK3tCRkFfTE9HX1dEUlZfQkFTRV9BRERSRVNTX01BUF9FUlJPUiwgQkZBX0xPR19BVFRSX05PTkUgfCBCRkFfTE9HX0FUVFJfTE9HLAorIEJGQV9MT0dfSU5GTywgIldEUlZfQkFTRV9BRERSRVNTX01BUF9FUlJPUiIsCisgIlVuYWJsZSB0byBtYXAgdGhlIElPQyBvbnRvIHRoZSBzeXN0ZW0gYWRkcmVzcyBzcGFjZS4gICIsCisgKDApLCAwfSwKKworCit7MCwgMCwgMCwgIiIsICIiLCAwLCAwfSwKK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2JmYV9scHMuYyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2xwcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4NDRiNDUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9scHMuYwpAQCAtMCwwICsxLDc4MiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8YmZhLmg+CisjaW5jbHVkZSA8YmZpL2JmaV9scHMuaD4KKyNpbmNsdWRlIDxjcy9iZmFfZGVidWcuaD4KKworQkZBX1RSQ19GSUxFKEhBTCwgTFBTKTsKK0JGQV9NT0RVTEUobHBzKTsKKworI2RlZmluZSBCRkFfTFBTX01JTl9MUE9SVFMJKDEpCisjZGVmaW5lIEJGQV9MUFNfTUFYX0xQT1JUUwkoMjU2KQorCisvKioKKyAqIGZvcndhcmQgZGVjbGFyYXRpb25zCisgKi8KK3N0YXRpYyB2b2lkIGJmYV9scHNfbWVtaW5mbyhzdHJ1Y3QgYmZhX2lvY2ZjX2NmZ19zICpjZmcsIHUzMiAqbmRtX2xlbiwKKwkJCSAgICB1MzIgKmRtX2xlbik7CitzdGF0aWMgdm9pZCBiZmFfbHBzX2F0dGFjaChzdHJ1Y3QgYmZhX3MgKmJmYSwgdm9pZCAqYmZhZCwKKwkJCSAgIHN0cnVjdCBiZmFfaW9jZmNfY2ZnX3MgKmNmZywKKwkJCSAgIHN0cnVjdCBiZmFfbWVtaW5mb19zICptZW1pbmZvLAorCQkJICAgc3RydWN0IGJmYV9wY2lkZXZfcyAqcGNpZGV2KTsKK3N0YXRpYyB2b2lkIGJmYV9scHNfaW5pdGRvbmUoc3RydWN0IGJmYV9zICpiZmEpOworc3RhdGljIHZvaWQgYmZhX2xwc19kZXRhY2goc3RydWN0IGJmYV9zICpiZmEpOworc3RhdGljIHZvaWQgYmZhX2xwc19zdGFydChzdHJ1Y3QgYmZhX3MgKmJmYSk7CitzdGF0aWMgdm9pZCBiZmFfbHBzX3N0b3Aoc3RydWN0IGJmYV9zICpiZmEpOworc3RhdGljIHZvaWQgYmZhX2xwc19pb2NkaXNhYmxlKHN0cnVjdCBiZmFfcyAqYmZhKTsKK3N0YXRpYyB2b2lkIGJmYV9scHNfbG9naW5fcnNwKHN0cnVjdCBiZmFfcyAqYmZhLAorCQkJICAgICAgc3RydWN0IGJmaV9scHNfbG9naW5fcnNwX3MgKnJzcCk7CitzdGF0aWMgdm9pZCBiZmFfbHBzX2xvZ291dF9yc3Aoc3RydWN0IGJmYV9zICpiZmEsCisJCQkgICAgICAgc3RydWN0IGJmaV9scHNfbG9nb3V0X3JzcF9zICpyc3ApOworc3RhdGljIHZvaWQgYmZhX2xwc19yZXFxX3Jlc3VtZSh2b2lkICpscHNfYXJnKTsKK3N0YXRpYyB2b2lkIGJmYV9scHNfZnJlZShzdHJ1Y3QgYmZhX2xwc19zICpscHMpOworc3RhdGljIHZvaWQgYmZhX2xwc19zZW5kX2xvZ2luKHN0cnVjdCBiZmFfbHBzX3MgKmxwcyk7CitzdGF0aWMgdm9pZCBiZmFfbHBzX3NlbmRfbG9nb3V0KHN0cnVjdCBiZmFfbHBzX3MgKmxwcyk7CitzdGF0aWMgdm9pZCBiZmFfbHBzX2xvZ2luX2NvbXAoc3RydWN0IGJmYV9scHNfcyAqbHBzKTsKK3N0YXRpYyB2b2lkIGJmYV9scHNfbG9nb3V0X2NvbXAoc3RydWN0IGJmYV9scHNfcyAqbHBzKTsKKworCisvKioKKyAqICBscHNfcHZ0IEJGQSBMUFMgcHJpdmF0ZSBmdW5jdGlvbnMKKyAqLworCitlbnVtIGJmYV9scHNfZXZlbnQgeworCUJGQV9MUFNfU01fTE9HSU4JPSAxLAkvKiBsb2dpbiByZXF1ZXN0IGZyb20gdXNlcgkqLworCUJGQV9MUFNfU01fTE9HT1VUCT0gMiwJLyogbG9nb3V0IHJlcXVlc3QgZnJvbSB1c2VyCSovCisJQkZBX0xQU19TTV9GV1JTUAk9IDMsCS8qIGYvdyByZXNwb25zZSB0byBsb2dpbi9sb2dvdXQJKi8KKwlCRkFfTFBTX1NNX1JFU1VNRQk9IDQsCS8qIHNwYWNlIHByZXNlbnQgaW4gcmVxcSBxdWV1ZQkqLworCUJGQV9MUFNfU01fREVMRVRFCT0gNSwJLyogbHBzIGRlbGV0ZSBmcm9tIHVzZXIJCSovCisJQkZBX0xQU19TTV9PRkZMSU5FCT0gNiwJLyogTGluayBpcyBvZmZsaW5lCQkqLworfTsKKworc3RhdGljIHZvaWQgYmZhX2xwc19zbV9pbml0KHN0cnVjdCBiZmFfbHBzX3MgKmxwcywgZW51bSBiZmFfbHBzX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkIGJmYV9scHNfc21fbG9naW4oc3RydWN0IGJmYV9scHNfcyAqbHBzLCBlbnVtIGJmYV9scHNfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgYmZhX2xwc19zbV9sb2dpbndhaXQoc3RydWN0IGJmYV9scHNfcyAqbHBzLAorCQkJZW51bSBiZmFfbHBzX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkIGJmYV9scHNfc21fb25saW5lKHN0cnVjdCBiZmFfbHBzX3MgKmxwcywgZW51bSBiZmFfbHBzX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkIGJmYV9scHNfc21fbG9nb3V0KHN0cnVjdCBiZmFfbHBzX3MgKmxwcywgZW51bSBiZmFfbHBzX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkIGJmYV9scHNfc21fbG9nb3dhaXQoc3RydWN0IGJmYV9scHNfcyAqbHBzLAorCQkJZW51bSBiZmFfbHBzX2V2ZW50IGV2ZW50KTsKKworLyoqCisgKiBJbml0IHN0YXRlIC0tIG5vIGxvZ2luCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfbHBzX3NtX2luaXQoc3RydWN0IGJmYV9scHNfcyAqbHBzLCBlbnVtIGJmYV9scHNfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhscHMtPmJmYSwgbHBzLT5scF90YWcpOworCWJmYV90cmMobHBzLT5iZmEsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9MUFNfU01fTE9HSU46CisJCWlmIChiZmFfcmVxcV9mdWxsKGxwcy0+YmZhLCBscHMtPnJlcXEpKSB7CisJCQliZmFfc21fc2V0X3N0YXRlKGxwcywgYmZhX2xwc19zbV9sb2dpbndhaXQpOworCQkJYmZhX3JlcXFfd2FpdChscHMtPmJmYSwgbHBzLT5yZXFxLCAmbHBzLT53cWUpOworCQl9IGVsc2UgeworCQkJYmZhX3NtX3NldF9zdGF0ZShscHMsIGJmYV9scHNfc21fbG9naW4pOworCQkJYmZhX2xwc19zZW5kX2xvZ2luKGxwcyk7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIEJGQV9MUFNfU01fTE9HT1VUOgorCQliZmFfbHBzX2xvZ291dF9jb21wKGxwcyk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfTFBTX1NNX0RFTEVURToKKwkJYmZhX2xwc19mcmVlKGxwcyk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfTFBTX1NNX09GRkxJTkU6CisJCWJyZWFrOworCisJY2FzZSBCRkFfTFBTX1NNX0ZXUlNQOgorCQkvKiBDb3VsZCBoYXBwZW4gd2hlbiBmYWJyaWMgZGV0ZWN0cyBsb29wYmFjayBhbmQgZGlzY2FyZHMKKwkJICogdGhlIGxwcyByZXF1ZXN0LiBGdyB3aWxsIGV2ZW50dWFsbHkgc2VudCBvdXQgdGhlIHRpbWVvdXQKKwkJICogSnVzdCBpZ25vcmUKKwkJICovCisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKy8qKgorICogbG9naW4gaXMgaW4gcHJvZ3Jlc3MgLS0gYXdhaXRpbmcgcmVzcG9uc2UgZnJvbSBmaXJtd2FyZQorICovCitzdGF0aWMgdm9pZAorYmZhX2xwc19zbV9sb2dpbihzdHJ1Y3QgYmZhX2xwc19zICpscHMsIGVudW0gYmZhX2xwc19ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKGxwcy0+YmZhLCBscHMtPmxwX3RhZyk7CisJYmZhX3RyYyhscHMtPmJmYSwgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX0xQU19TTV9GV1JTUDoKKwkJaWYgKGxwcy0+c3RhdHVzID09IEJGQV9TVEFUVVNfT0spCisJCQliZmFfc21fc2V0X3N0YXRlKGxwcywgYmZhX2xwc19zbV9vbmxpbmUpOworCQllbHNlCisJCQliZmFfc21fc2V0X3N0YXRlKGxwcywgYmZhX2xwc19zbV9pbml0KTsKKwkJYmZhX2xwc19sb2dpbl9jb21wKGxwcyk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfTFBTX1NNX09GRkxJTkU6CisJCWJmYV9zbV9zZXRfc3RhdGUobHBzLCBiZmFfbHBzX3NtX2luaXQpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqIGxvZ2luIHBlbmRpbmcgLSBhd2FpdGluZyBzcGFjZSBpbiByZXF1ZXN0IHF1ZXVlCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfbHBzX3NtX2xvZ2lud2FpdChzdHJ1Y3QgYmZhX2xwc19zICpscHMsIGVudW0gYmZhX2xwc19ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKGxwcy0+YmZhLCBscHMtPmxwX3RhZyk7CisJYmZhX3RyYyhscHMtPmJmYSwgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX0xQU19TTV9SRVNVTUU6CisJCWJmYV9zbV9zZXRfc3RhdGUobHBzLCBiZmFfbHBzX3NtX2xvZ2luKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9MUFNfU01fT0ZGTElORToKKwkJYmZhX3NtX3NldF9zdGF0ZShscHMsIGJmYV9scHNfc21faW5pdCk7CisJCWJmYV9yZXFxX3djYW5jZWwoJmxwcy0+d3FlKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworLyoqCisgKiBsb2dpbiBjb21wbGV0ZQorICovCitzdGF0aWMgdm9pZAorYmZhX2xwc19zbV9vbmxpbmUoc3RydWN0IGJmYV9scHNfcyAqbHBzLCBlbnVtIGJmYV9scHNfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhscHMtPmJmYSwgbHBzLT5scF90YWcpOworCWJmYV90cmMobHBzLT5iZmEsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9MUFNfU01fTE9HT1VUOgorCQlpZiAoYmZhX3JlcXFfZnVsbChscHMtPmJmYSwgbHBzLT5yZXFxKSkgeworCQkJYmZhX3NtX3NldF9zdGF0ZShscHMsIGJmYV9scHNfc21fbG9nb3dhaXQpOworCQkJYmZhX3JlcXFfd2FpdChscHMtPmJmYSwgbHBzLT5yZXFxLCAmbHBzLT53cWUpOworCQl9IGVsc2UgeworCQkJYmZhX3NtX3NldF9zdGF0ZShscHMsIGJmYV9scHNfc21fbG9nb3V0KTsKKwkJCWJmYV9scHNfc2VuZF9sb2dvdXQobHBzKTsKKwkJfQorCQlicmVhazsKKworCWNhc2UgQkZBX0xQU19TTV9PRkZMSU5FOgorCWNhc2UgQkZBX0xQU19TTV9ERUxFVEU6CisJCWJmYV9zbV9zZXRfc3RhdGUobHBzLCBiZmFfbHBzX3NtX2luaXQpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqIGxvZ291dCBpbiBwcm9ncmVzcyAtIGF3YWl0aW5nIGZpcm13YXJlIHJlc3BvbnNlCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfbHBzX3NtX2xvZ291dChzdHJ1Y3QgYmZhX2xwc19zICpscHMsIGVudW0gYmZhX2xwc19ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKGxwcy0+YmZhLCBscHMtPmxwX3RhZyk7CisJYmZhX3RyYyhscHMtPmJmYSwgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX0xQU19TTV9GV1JTUDoKKwkJYmZhX3NtX3NldF9zdGF0ZShscHMsIGJmYV9scHNfc21faW5pdCk7CisJCWJmYV9scHNfbG9nb3V0X2NvbXAobHBzKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9MUFNfU01fT0ZGTElORToKKwkJYmZhX3NtX3NldF9zdGF0ZShscHMsIGJmYV9scHNfc21faW5pdCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKy8qKgorICogbG9nb3V0IHBlbmRpbmcgLS0gYXdhaXRpbmcgc3BhY2UgaW4gcmVxdWVzdCBxdWV1ZQorICovCitzdGF0aWMgdm9pZAorYmZhX2xwc19zbV9sb2dvd2FpdChzdHJ1Y3QgYmZhX2xwc19zICpscHMsIGVudW0gYmZhX2xwc19ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKGxwcy0+YmZhLCBscHMtPmxwX3RhZyk7CisJYmZhX3RyYyhscHMtPmJmYSwgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX0xQU19TTV9SRVNVTUU6CisJCWJmYV9zbV9zZXRfc3RhdGUobHBzLCBiZmFfbHBzX3NtX2xvZ291dCk7CisJCWJmYV9scHNfc2VuZF9sb2dvdXQobHBzKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9MUFNfU01fT0ZGTElORToKKwkJYmZhX3NtX3NldF9zdGF0ZShscHMsIGJmYV9scHNfc21faW5pdCk7CisJCWJmYV9yZXFxX3djYW5jZWwoJmxwcy0+d3FlKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworCisKKy8qKgorICogIGxwc19wdnQgQkZBIExQUyBwcml2YXRlIGZ1bmN0aW9ucworICovCisKKy8qKgorICogcmV0dXJuIG1lbW9yeSByZXF1aXJlbWVudAorICovCitzdGF0aWMgdm9pZAorYmZhX2xwc19tZW1pbmZvKHN0cnVjdCBiZmFfaW9jZmNfY2ZnX3MgKmNmZywgdTMyICpuZG1fbGVuLCB1MzIgKmRtX2xlbikKK3sKKwlpZiAoY2ZnLT5kcnZjZmcubWluX2NmZykKKwkJKm5kbV9sZW4gKz0gc2l6ZW9mKHN0cnVjdCBiZmFfbHBzX3MpICogQkZBX0xQU19NSU5fTFBPUlRTOworCWVsc2UKKwkJKm5kbV9sZW4gKz0gc2l6ZW9mKHN0cnVjdCBiZmFfbHBzX3MpICogQkZBX0xQU19NQVhfTFBPUlRTOworfQorCisvKioKKyAqIGJmYSBtb2R1bGUgYXR0YWNoIGF0IGluaXRpYWxpemF0aW9uIHRpbWUKKyAqLworc3RhdGljIHZvaWQKK2JmYV9scHNfYXR0YWNoKHN0cnVjdCBiZmFfcyAqYmZhLCB2b2lkICpiZmFkLCBzdHJ1Y3QgYmZhX2lvY2ZjX2NmZ19zICpjZmcsCisJCXN0cnVjdCBiZmFfbWVtaW5mb19zICptZW1pbmZvLCBzdHJ1Y3QgYmZhX3BjaWRldl9zICpwY2lkZXYpCit7CisJc3RydWN0IGJmYV9scHNfbW9kX3MJKm1vZCA9IEJGQV9MUFNfTU9EKGJmYSk7CisJc3RydWN0IGJmYV9scHNfcwkqbHBzOworCWludAkJCWk7CisKKwliZmFfb3NfbWVtc2V0KG1vZCwgMCwgc2l6ZW9mKHN0cnVjdCBiZmFfbHBzX21vZF9zKSk7CisJbW9kLT5udW1fbHBzID0gQkZBX0xQU19NQVhfTFBPUlRTOworCWlmIChjZmctPmRydmNmZy5taW5fY2ZnKQorCQltb2QtPm51bV9scHMgPSBCRkFfTFBTX01JTl9MUE9SVFM7CisJZWxzZQorCQltb2QtPm51bV9scHMgPSBCRkFfTFBTX01BWF9MUE9SVFM7CisJbW9kLT5scHNfYXJyID0gbHBzID0gKHN0cnVjdCBiZmFfbHBzX3MgKikgYmZhX21lbWluZm9fa3ZhKG1lbWluZm8pOworCisJYmZhX21lbWluZm9fa3ZhKG1lbWluZm8pICs9IG1vZC0+bnVtX2xwcyAqIHNpemVvZihzdHJ1Y3QgYmZhX2xwc19zKTsKKworCUlOSVRfTElTVF9IRUFEKCZtb2QtPmxwc19mcmVlX3EpOworCUlOSVRfTElTVF9IRUFEKCZtb2QtPmxwc19hY3RpdmVfcSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbW9kLT5udW1fbHBzOyBpKyssIGxwcysrKSB7CisJCWxwcy0+YmZhCT0gYmZhOworCQlscHMtPmxwX3RhZwk9ICh1OCkgaTsKKwkJbHBzLT5yZXFxCT0gQkZBX1JFUVFfTFBTOworCQliZmFfcmVxcV93aW5pdCgmbHBzLT53cWUsIGJmYV9scHNfcmVxcV9yZXN1bWUsIGxwcyk7CisJCWxpc3RfYWRkX3RhaWwoJmxwcy0+cWUsICZtb2QtPmxwc19mcmVlX3EpOworCX0KK30KKworc3RhdGljIHZvaWQKK2JmYV9scHNfaW5pdGRvbmUoc3RydWN0IGJmYV9zICpiZmEpCit7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfbHBzX2RldGFjaChzdHJ1Y3QgYmZhX3MgKmJmYSkKK3sKK30KKworc3RhdGljIHZvaWQKK2JmYV9scHNfc3RhcnQoc3RydWN0IGJmYV9zICpiZmEpCit7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfbHBzX3N0b3Aoc3RydWN0IGJmYV9zICpiZmEpCit7Cit9CisKKy8qKgorICogSU9DIGluIGRpc2FibGVkIHN0YXRlIC0tIGNvbnNpZGVyIGFsbCBscHMgb2ZmbGluZQorICovCitzdGF0aWMgdm9pZAorYmZhX2xwc19pb2NkaXNhYmxlKHN0cnVjdCBiZmFfcyAqYmZhKQoreworCXN0cnVjdCBiZmFfbHBzX21vZF9zCSptb2QgPSBCRkFfTFBTX01PRChiZmEpOworCXN0cnVjdCBiZmFfbHBzX3MJKmxwczsKKwlzdHJ1Y3QgbGlzdF9oZWFkCQkqcWUsICpxZW47CisKKwlsaXN0X2Zvcl9lYWNoX3NhZmUocWUsIHFlbiwgJm1vZC0+bHBzX2FjdGl2ZV9xKSB7CisJCWxwcyA9IChzdHJ1Y3QgYmZhX2xwc19zICopIHFlOworCQliZmFfc21fc2VuZF9ldmVudChscHMsIEJGQV9MUFNfU01fT0ZGTElORSk7CisJfQorfQorCisvKioKKyAqIEZpcm13YXJlIGxvZ2luIHJlc3BvbnNlCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfbHBzX2xvZ2luX3JzcChzdHJ1Y3QgYmZhX3MgKmJmYSwgc3RydWN0IGJmaV9scHNfbG9naW5fcnNwX3MgKnJzcCkKK3sKKwlzdHJ1Y3QgYmZhX2xwc19tb2RfcwkqbW9kID0gQkZBX0xQU19NT0QoYmZhKTsKKwlzdHJ1Y3QgYmZhX2xwc19zCSpscHM7CisKKwliZmFfYXNzZXJ0KHJzcC0+bHBfdGFnIDwgbW9kLT5udW1fbHBzKTsKKwlscHMgPSBCRkFfTFBTX0ZST01fVEFHKG1vZCwgcnNwLT5scF90YWcpOworCisJbHBzLT5zdGF0dXMgPSByc3AtPnN0YXR1czsKKwlzd2l0Y2ggKHJzcC0+c3RhdHVzKSB7CisJY2FzZSBCRkFfU1RBVFVTX09LOgorCQlscHMtPmZwb3J0CT0gcnNwLT5mX3BvcnQ7CisJCWxwcy0+bnBpdl9lbgk9IHJzcC0+bnBpdl9lbjsKKwkJbHBzLT5scF9waWQJPSByc3AtPmxwX3BpZDsKKwkJbHBzLT5wcl9iYmNyZWQJPSBiZmFfb3NfbnRvaHMocnNwLT5iYl9jcmVkaXQpOworCQlscHMtPnByX3B3d24JPSByc3AtPnBvcnRfbmFtZTsKKwkJbHBzLT5wcl9ud3duCT0gcnNwLT5ub2RlX25hbWU7CisJCWxwcy0+YXV0aF9yZXEJPSByc3AtPmF1dGhfcmVxOworCQlscHMtPmxwX21hYwk9IHJzcC0+bHBfbWFjOworCQlscHMtPmJyY2Rfc3dpdGNoID0gcnNwLT5icmNkX3N3aXRjaDsKKwkJbHBzLT5mY2ZfbWFjCT0gcnNwLT5mY2ZfbWFjOworCisJCWJyZWFrOworCisJY2FzZSBCRkFfU1RBVFVTX0ZBQlJJQ19SSlQ6CisJCWxwcy0+bHNyanRfcnNuID0gcnNwLT5sc3JqdF9yc247CisJCWxwcy0+bHNyanRfZXhwbCA9IHJzcC0+bHNyanRfZXhwbDsKKworCQlicmVhazsKKworCWNhc2UgQkZBX1NUQVRVU19FUFJPVE9DT0w6CisJCWxwcy0+ZXh0X3N0YXR1cyA9IHJzcC0+ZXh0X3N0YXR1czsKKworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCS8qIE5vdGhpbmcgdG8gZG8gd2l0aCBvdGhlciBzdGF0dXMgKi8KKwkJYnJlYWs7CisJfQorCisJYmZhX3NtX3NlbmRfZXZlbnQobHBzLCBCRkFfTFBTX1NNX0ZXUlNQKTsKK30KKworLyoqCisgKiBGaXJtd2FyZSBsb2dvdXQgcmVzcG9uc2UKKyAqLworc3RhdGljIHZvaWQKK2JmYV9scHNfbG9nb3V0X3JzcChzdHJ1Y3QgYmZhX3MgKmJmYSwgc3RydWN0IGJmaV9scHNfbG9nb3V0X3JzcF9zICpyc3ApCit7CisJc3RydWN0IGJmYV9scHNfbW9kX3MJKm1vZCA9IEJGQV9MUFNfTU9EKGJmYSk7CisJc3RydWN0IGJmYV9scHNfcwkqbHBzOworCisJYmZhX2Fzc2VydChyc3AtPmxwX3RhZyA8IG1vZC0+bnVtX2xwcyk7CisJbHBzID0gQkZBX0xQU19GUk9NX1RBRyhtb2QsIHJzcC0+bHBfdGFnKTsKKworCWJmYV9zbV9zZW5kX2V2ZW50KGxwcywgQkZBX0xQU19TTV9GV1JTUCk7Cit9CisKKy8qKgorICogU3BhY2UgaXMgYXZhaWxhYmxlIGluIHJlcXVlc3QgcXVldWUsIHJlc3VtZSBxdWV1ZWluZyByZXF1ZXN0IHRvIGZpcm13YXJlLgorICovCitzdGF0aWMgdm9pZAorYmZhX2xwc19yZXFxX3Jlc3VtZSh2b2lkICpscHNfYXJnKQoreworCXN0cnVjdCBiZmFfbHBzX3MJKmxwcyA9IGxwc19hcmc7CisKKwliZmFfc21fc2VuZF9ldmVudChscHMsIEJGQV9MUFNfU01fUkVTVU1FKTsKK30KKworLyoqCisgKiBscHMgaXMgZnJlZWQgLS0gdHJpZ2dlcmVkIGJ5IHZwb3J0IGRlbGV0ZQorICovCitzdGF0aWMgdm9pZAorYmZhX2xwc19mcmVlKHN0cnVjdCBiZmFfbHBzX3MgKmxwcykKK3sKKwlzdHJ1Y3QgYmZhX2xwc19tb2RfcwkqbW9kID0gQkZBX0xQU19NT0QobHBzLT5iZmEpOworCisJbGlzdF9kZWwoJmxwcy0+cWUpOworCWxpc3RfYWRkX3RhaWwoJmxwcy0+cWUsICZtb2QtPmxwc19mcmVlX3EpOworfQorCisvKioKKyAqIHNlbmQgbG9naW4gcmVxdWVzdCB0byBmaXJtd2FyZQorICovCitzdGF0aWMgdm9pZAorYmZhX2xwc19zZW5kX2xvZ2luKHN0cnVjdCBiZmFfbHBzX3MgKmxwcykKK3sKKwlzdHJ1Y3QgYmZpX2xwc19sb2dpbl9yZXFfcwkqbTsKKworCW0gPSBiZmFfcmVxcV9uZXh0KGxwcy0+YmZhLCBscHMtPnJlcXEpOworCWJmYV9hc3NlcnQobSk7CisKKwliZmlfaDJpX3NldChtLT5taCwgQkZJX01DX0xQUywgQkZJX0xQU19IMklfTE9HSU5fUkVRLAorCQkJYmZhX2xwdWlkKGxwcy0+YmZhKSk7CisKKwltLT5scF90YWcJPSBscHMtPmxwX3RhZzsKKwltLT5hbHBhCQk9IGxwcy0+YWxwYTsKKwltLT5wZHVfc2l6ZQk9IGJmYV9vc19odG9ucyhscHMtPnBkdXN6KTsKKwltLT5wd3duCQk9IGxwcy0+cHd3bjsKKwltLT5ud3duCQk9IGxwcy0+bnd3bjsKKwltLT5mZGlzYwk9IGxwcy0+ZmRpc2M7CisJbS0+YXV0aF9lbgk9IGxwcy0+YXV0aF9lbjsKKworCWJmYV9yZXFxX3Byb2R1Y2UobHBzLT5iZmEsIGxwcy0+cmVxcSk7Cit9CisKKy8qKgorICogc2VuZCBsb2dvdXQgcmVxdWVzdCB0byBmaXJtd2FyZQorICovCitzdGF0aWMgdm9pZAorYmZhX2xwc19zZW5kX2xvZ291dChzdHJ1Y3QgYmZhX2xwc19zICpscHMpCit7CisJc3RydWN0IGJmaV9scHNfbG9nb3V0X3JlcV9zICptOworCisJbSA9IGJmYV9yZXFxX25leHQobHBzLT5iZmEsIGxwcy0+cmVxcSk7CisJYmZhX2Fzc2VydChtKTsKKworCWJmaV9oMmlfc2V0KG0tPm1oLCBCRklfTUNfTFBTLCBCRklfTFBTX0gySV9MT0dPVVRfUkVRLAorCQkJYmZhX2xwdWlkKGxwcy0+YmZhKSk7CisKKwltLT5scF90YWcgICAgPSBscHMtPmxwX3RhZzsKKwltLT5wb3J0X25hbWUgPSBscHMtPnB3d247CisJYmZhX3JlcXFfcHJvZHVjZShscHMtPmJmYSwgbHBzLT5yZXFxKTsKK30KKworLyoqCisgKiBJbmRpcmVjdCBsb2dpbiBjb21wbGV0aW9uIGhhbmRsZXIgZm9yIG5vbi1mY3MKKyAqLworc3RhdGljIHZvaWQKK2JmYV9scHNfbG9naW5fY29tcF9jYih2b2lkICphcmcsIGJmYV9ib29sZWFuX3QgY29tcGxldGUpCit7CisJc3RydWN0IGJmYV9scHNfcyAqbHBzCT0gYXJnOworCisJaWYgKCFjb21wbGV0ZSkKKwkJcmV0dXJuOworCisJaWYgKGxwcy0+ZmRpc2MpCisJCWJmYV9jYl9scHNfZmRpc2NfY29tcChscHMtPmJmYS0+YmZhZCwgbHBzLT51YXJnLCBscHMtPnN0YXR1cyk7CisJZWxzZQorCQliZmFfY2JfbHBzX2Zsb2dpX2NvbXAobHBzLT5iZmEtPmJmYWQsIGxwcy0+dWFyZywgbHBzLT5zdGF0dXMpOworfQorCisvKioKKyAqIExvZ2luIGNvbXBsZXRpb24gaGFuZGxlciAtLSBkaXJlY3QgY2FsbCBmb3IgZmNzLCBxdWV1ZSBmb3Igb3RoZXJzCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfbHBzX2xvZ2luX2NvbXAoc3RydWN0IGJmYV9scHNfcyAqbHBzKQoreworCWlmICghbHBzLT5iZmEtPmZjcykgeworCQliZmFfY2JfcXVldWUobHBzLT5iZmEsICZscHMtPmhjYl9xZSwKKwkJCQliZmFfbHBzX2xvZ2luX2NvbXBfY2IsIGxwcyk7CisJCXJldHVybjsKKwl9CisKKwlpZiAobHBzLT5mZGlzYykKKwkJYmZhX2NiX2xwc19mZGlzY19jb21wKGxwcy0+YmZhLT5iZmFkLCBscHMtPnVhcmcsIGxwcy0+c3RhdHVzKTsKKwllbHNlCisJCWJmYV9jYl9scHNfZmxvZ2lfY29tcChscHMtPmJmYS0+YmZhZCwgbHBzLT51YXJnLCBscHMtPnN0YXR1cyk7Cit9CisKKy8qKgorICogSW5kaXJlY3QgbG9nb3V0IGNvbXBsZXRpb24gaGFuZGxlciBmb3Igbm9uLWZjcworICovCitzdGF0aWMgdm9pZAorYmZhX2xwc19sb2dvdXRfY29tcF9jYih2b2lkICphcmcsIGJmYV9ib29sZWFuX3QgY29tcGxldGUpCit7CisJc3RydWN0IGJmYV9scHNfcyAqbHBzCT0gYXJnOworCisJaWYgKCFjb21wbGV0ZSkKKwkJcmV0dXJuOworCisJaWYgKGxwcy0+ZmRpc2MpCisJCWJmYV9jYl9scHNfZmRpc2Nsb2dvX2NvbXAobHBzLT5iZmEtPmJmYWQsIGxwcy0+dWFyZyk7CisJZWxzZQorCQliZmFfY2JfbHBzX2Zsb2dvX2NvbXAobHBzLT5iZmEtPmJmYWQsIGxwcy0+dWFyZyk7Cit9CisKKy8qKgorICogTG9nb3V0IGNvbXBsZXRpb24gaGFuZGxlciAtLSBkaXJlY3QgY2FsbCBmb3IgZmNzLCBxdWV1ZSBmb3Igb3RoZXJzCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfbHBzX2xvZ291dF9jb21wKHN0cnVjdCBiZmFfbHBzX3MgKmxwcykKK3sKKwlpZiAoIWxwcy0+YmZhLT5mY3MpIHsKKwkJYmZhX2NiX3F1ZXVlKGxwcy0+YmZhLCAmbHBzLT5oY2JfcWUsCisJCQkJYmZhX2xwc19sb2dvdXRfY29tcF9jYiwgbHBzKTsKKwkJcmV0dXJuOworCX0KKwlpZiAobHBzLT5mZGlzYykKKwkJYmZhX2NiX2xwc19mZGlzY2xvZ29fY29tcChscHMtPmJmYS0+YmZhZCwgbHBzLT51YXJnKTsKKwllbHNlCisJCWJmYV9jYl9scHNfZmxvZ29fY29tcChscHMtPmJmYS0+YmZhZCwgbHBzLT51YXJnKTsKK30KKworCisKKy8qKgorICogIGxwc19wdWJsaWMgQkZBIExQUyBwdWJsaWMgZnVuY3Rpb25zCisgKi8KKworLyoqCisgKiBBbGxvY2F0ZSBhIGxwb3J0IHNydmljZSB0YWcuCisgKi8KK3N0cnVjdCBiZmFfbHBzX3MgICoKK2JmYV9scHNfYWxsb2Moc3RydWN0IGJmYV9zICpiZmEpCit7CisJc3RydWN0IGJmYV9scHNfbW9kX3MJKm1vZCA9IEJGQV9MUFNfTU9EKGJmYSk7CisJc3RydWN0IGJmYV9scHNfcwkqbHBzID0gTlVMTDsKKworCWJmYV9xX2RlcSgmbW9kLT5scHNfZnJlZV9xLCAmbHBzKTsKKworCWlmIChscHMgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisKKwlsaXN0X2FkZF90YWlsKCZscHMtPnFlLCAmbW9kLT5scHNfYWN0aXZlX3EpOworCisJYmZhX3NtX3NldF9zdGF0ZShscHMsIGJmYV9scHNfc21faW5pdCk7CisJcmV0dXJuIGxwczsKK30KKworLyoqCisgKiBGcmVlIGxwb3J0IHNlcnZpY2UgdGFnLiBUaGlzIGNhbiBiZSBjYWxsZWQgYW55dGltZSBhZnRlciBhbiBhbGxvYy4KKyAqIE5vIG5lZWQgdG8gd2FpdCBmb3IgYW55IHBlbmRpbmcgbG9naW4vbG9nb3V0IGNvbXBsZXRpb25zLgorICovCit2b2lkCitiZmFfbHBzX2RlbGV0ZShzdHJ1Y3QgYmZhX2xwc19zICpscHMpCit7CisJYmZhX3NtX3NlbmRfZXZlbnQobHBzLCBCRkFfTFBTX1NNX0RFTEVURSk7Cit9CisKKy8qKgorICogSW5pdGlhdGUgYSBscG9ydCBsb2dpbi4KKyAqLwordm9pZAorYmZhX2xwc19mbG9naShzdHJ1Y3QgYmZhX2xwc19zICpscHMsIHZvaWQgKnVhcmcsIHU4IGFscGEsIHUxNiBwZHVzeiwKKwl3d25fdCBwd3duLCB3d25fdCBud3duLCBiZmFfYm9vbGVhbl90IGF1dGhfZW4pCit7CisJbHBzLT51YXJnCT0gdWFyZzsKKwlscHMtPmFscGEJPSBhbHBhOworCWxwcy0+cGR1c3oJPSBwZHVzejsKKwlscHMtPnB3d24JPSBwd3duOworCWxwcy0+bnd3bgk9IG53d247CisJbHBzLT5mZGlzYwk9IEJGQV9GQUxTRTsKKwlscHMtPmF1dGhfZW4JPSBhdXRoX2VuOworCWJmYV9zbV9zZW5kX2V2ZW50KGxwcywgQkZBX0xQU19TTV9MT0dJTik7Cit9CisKKy8qKgorICogSW5pdGlhdGUgYSBscG9ydCBmZGlzYyBsb2dpbi4KKyAqLwordm9pZAorYmZhX2xwc19mZGlzYyhzdHJ1Y3QgYmZhX2xwc19zICpscHMsIHZvaWQgKnVhcmcsIHUxNiBwZHVzeiwgd3duX3QgcHd3biwKKwl3d25fdCBud3duKQoreworCWxwcy0+dWFyZwk9IHVhcmc7CisJbHBzLT5hbHBhCT0gMDsKKwlscHMtPnBkdXN6CT0gcGR1c3o7CisJbHBzLT5wd3duCT0gcHd3bjsKKwlscHMtPm53d24JPSBud3duOworCWxwcy0+ZmRpc2MJPSBCRkFfVFJVRTsKKwlscHMtPmF1dGhfZW4JPSBCRkFfRkFMU0U7CisJYmZhX3NtX3NlbmRfZXZlbnQobHBzLCBCRkFfTFBTX1NNX0xPR0lOKTsKK30KKworLyoqCisgKiBJbml0aWF0ZSBhIGxwb3J0IGxvZ291dCAoZmxvZ2kpLgorICovCit2b2lkCitiZmFfbHBzX2Zsb2dvKHN0cnVjdCBiZmFfbHBzX3MgKmxwcykKK3sKKwliZmFfc21fc2VuZF9ldmVudChscHMsIEJGQV9MUFNfU01fTE9HT1VUKTsKK30KKworLyoqCisgKiBJbml0aWF0ZSBhIGxwb3J0IEZEU0lDIGxvZ291dC4KKyAqLwordm9pZAorYmZhX2xwc19mZGlzY2xvZ28oc3RydWN0IGJmYV9scHNfcyAqbHBzKQoreworCWJmYV9zbV9zZW5kX2V2ZW50KGxwcywgQkZBX0xQU19TTV9MT0dPVVQpOworfQorCisvKioKKyAqIERpc2NhcmQgYSBwZW5kaW5nIGxvZ2luIHJlcXVlc3QgLS0gc2hvdWxkIGJlIGNhbGxlZCBvbmx5IGZvcgorICogbGluayBkb3duIGhhbmRsaW5nLgorICovCit2b2lkCitiZmFfbHBzX2Rpc2NhcmQoc3RydWN0IGJmYV9scHNfcyAqbHBzKQoreworCWJmYV9zbV9zZW5kX2V2ZW50KGxwcywgQkZBX0xQU19TTV9PRkZMSU5FKTsKK30KKworLyoqCisgKiBSZXR1cm4gbHBvcnQgc2VydmljZXMgdGFnCisgKi8KK3U4CitiZmFfbHBzX2dldF90YWcoc3RydWN0IGJmYV9scHNfcyAqbHBzKQoreworCXJldHVybiBscHMtPmxwX3RhZzsKK30KKworLyoqCisgKiBSZXR1cm4gbHBvcnQgc2VydmljZXMgdGFnIGdpdmVuIHRoZSBwaWQKKyAqLwordTgKK2JmYV9scHNfZ2V0X3RhZ19mcm9tX3BpZChzdHJ1Y3QgYmZhX3MgKmJmYSwgdTMyIHBpZCkKK3sKKwlzdHJ1Y3QgYmZhX2xwc19tb2RfcwkqbW9kID0gQkZBX0xQU19NT0QoYmZhKTsKKwlzdHJ1Y3QgYmZhX2xwc19zCSpscHM7CisJaW50CQkJaTsKKworCWZvciAoaSA9IDAsIGxwcyA9IG1vZC0+bHBzX2FycjsgaSA8IG1vZC0+bnVtX2xwczsgaSsrLCBscHMrKykgeworCQlpZiAobHBzLT5scF9waWQgPT0gcGlkKQorCQkJcmV0dXJuIGxwcy0+bHBfdGFnOworCX0KKworCS8qIFJldHVybiBiYXNlIHBvcnQgdGFnIGFueXdheSAqLworCXJldHVybiAwOworfQorCisvKioKKyAqIHJldHVybiBpZiBmYWJyaWMgbG9naW4gaW5kaWNhdGVzIHN1cHBvcnQgZm9yIE5QSVYKKyAqLworYmZhX2Jvb2xlYW5fdAorYmZhX2xwc19pc19ucGl2X2VuKHN0cnVjdCBiZmFfbHBzX3MgKmxwcykKK3sKKwlyZXR1cm4gbHBzLT5ucGl2X2VuOworfQorCisvKioKKyAqIFJldHVybiBUUlVFIGlmIGF0dGFjaGVkIHRvIEYtUG9ydCwgZWxzZSByZXR1cm4gRkFMU0UKKyAqLworYmZhX2Jvb2xlYW5fdAorYmZhX2xwc19pc19mcG9ydChzdHJ1Y3QgYmZhX2xwc19zICpscHMpCit7CisJcmV0dXJuIGxwcy0+ZnBvcnQ7Cit9CisKKy8qKgorICogUmV0dXJuIFRSVUUgaWYgYXR0YWNoZWQgdG8gYSBCcm9jYWRlIEZhYnJpYworICovCitiZmFfYm9vbGVhbl90CitiZmFfbHBzX2lzX2JyY2RfZmFicmljKHN0cnVjdCBiZmFfbHBzX3MgKmxwcykKK3sKKwlyZXR1cm4gbHBzLT5icmNkX3N3aXRjaDsKK30KKy8qKgorICogcmV0dXJuIFRSVUUgaWYgYXV0aGVudGljYXRpb24gaXMgcmVxdWlyZWQKKyAqLworYmZhX2Jvb2xlYW5fdAorYmZhX2xwc19pc19hdXRocmVxKHN0cnVjdCBiZmFfbHBzX3MgKmxwcykKK3sKKwlyZXR1cm4gbHBzLT5hdXRoX3JlcTsKK30KKworYmZhX2Vwcm90b19zdGF0dXNfdAorYmZhX2xwc19nZXRfZXh0c3RhdHVzKHN0cnVjdCBiZmFfbHBzX3MgKmxwcykKK3sKKwlyZXR1cm4gbHBzLT5leHRfc3RhdHVzOworfQorCisvKioKKyAqIHJldHVybiBwb3J0IGlkIGFzc2lnbmVkIHRvIHRoZSBscG9ydAorICovCit1MzIKK2JmYV9scHNfZ2V0X3BpZChzdHJ1Y3QgYmZhX2xwc19zICpscHMpCit7CisJcmV0dXJuIGxwcy0+bHBfcGlkOworfQorCisvKioKKyAqIFJldHVybiBiYl9jcmVkaXQgYXNzaWduZWQgaW4gRkxPR0kgcmVzcG9uc2UKKyAqLwordTE2CitiZmFfbHBzX2dldF9wZWVyX2JiY3JlZGl0KHN0cnVjdCBiZmFfbHBzX3MgKmxwcykKK3sKKwlyZXR1cm4gbHBzLT5wcl9iYmNyZWQ7Cit9CisKKy8qKgorICogUmV0dXJuIHBlZXIgcG9ydCBuYW1lCisgKi8KK3d3bl90CitiZmFfbHBzX2dldF9wZWVyX3B3d24oc3RydWN0IGJmYV9scHNfcyAqbHBzKQoreworCXJldHVybiBscHMtPnByX3B3d247Cit9CisKKy8qKgorICogUmV0dXJuIHBlZXIgbm9kZSBuYW1lCisgKi8KK3d3bl90CitiZmFfbHBzX2dldF9wZWVyX253d24oc3RydWN0IGJmYV9scHNfcyAqbHBzKQoreworCXJldHVybiBscHMtPnByX253d247Cit9CisKKy8qKgorICogcmV0dXJuIHJlYXNvbiBjb2RlIGlmIGxvZ2luIHJlcXVlc3QgaXMgcmVqZWN0ZWQKKyAqLwordTgKK2JmYV9scHNfZ2V0X2xzcmp0X3JzbihzdHJ1Y3QgYmZhX2xwc19zICpscHMpCit7CisJcmV0dXJuIGxwcy0+bHNyanRfcnNuOworfQorCisvKioKKyAqIHJldHVybiBleHBsYW5hdGlvbiBjb2RlIGlmIGxvZ2luIHJlcXVlc3QgaXMgcmVqZWN0ZWQKKyAqLwordTgKK2JmYV9scHNfZ2V0X2xzcmp0X2V4cGwoc3RydWN0IGJmYV9scHNfcyAqbHBzKQoreworCXJldHVybiBscHMtPmxzcmp0X2V4cGw7Cit9CisKKworLyoqCisgKiBMUFMgZmlybXdhcmUgbWVzc2FnZSBjbGFzcyBoYW5kbGVyLgorICovCit2b2lkCitiZmFfbHBzX2lzcihzdHJ1Y3QgYmZhX3MgKmJmYSwgc3RydWN0IGJmaV9tc2dfcyAqbSkKK3sKKwl1bmlvbiBiZmlfbHBzX2kyaF9tc2dfdQltc2c7CisKKwliZmFfdHJjKGJmYSwgbS0+bWhkci5tc2dfaWQpOworCW1zZy5tc2cgPSBtOworCisJc3dpdGNoIChtLT5taGRyLm1zZ19pZCkgeworCWNhc2UgQkZJX0xQU19IMklfTE9HSU5fUlNQOgorCQliZmFfbHBzX2xvZ2luX3JzcChiZmEsIG1zZy5sb2dpbl9yc3ApOworCQlicmVhazsKKworCWNhc2UgQkZJX0xQU19IMklfTE9HT1VUX1JTUDoKKwkJYmZhX2xwc19sb2dvdXRfcnNwKGJmYSwgbXNnLmxvZ291dF9yc3ApOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV90cmMoYmZhLCBtLT5taGRyLm1zZ19pZCk7CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2xwc19wcml2LmggYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9scHNfcHJpdi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxNmM2Y2UKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9scHNfcHJpdi5oCkBAIC0wLDAgKzEsMzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0JGQV9MUFNfUFJJVl9IX18KKyNkZWZpbmUgX19CRkFfTFBTX1BSSVZfSF9fCisKKyNpbmNsdWRlIDxiZmFfc3ZjLmg+CisKK3N0cnVjdCBiZmFfbHBzX21vZF9zIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkCQlscHNfZnJlZV9xOworCXN0cnVjdCBsaXN0X2hlYWQJCWxwc19hY3RpdmVfcTsKKwlzdHJ1Y3QgYmZhX2xwc19zCSpscHNfYXJyOworCWludAkJCW51bV9scHM7Cit9OworCisjZGVmaW5lIEJGQV9MUFNfTU9EKF9fYmZhKQkJKCYoX19iZmEpLT5tb2R1bGVzLmxwc19tb2QpCisjZGVmaW5lIEJGQV9MUFNfRlJPTV9UQUcoX19tb2QsIF9fdGFnKQkoJihfX21vZCktPmxwc19hcnJbX190YWddKQorCisvKgorICogZXh0ZXJuYWwgZnVuY3Rpb25zCisgKi8KK3ZvaWQJYmZhX2xwc19pc3Ioc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBiZmlfbXNnX3MgKm1zZyk7CisKKyNlbmRpZiAvKiBfX0JGQV9MUFNfUFJJVl9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX21vZHVsZS5jIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfbW9kdWxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzJlZGE4ZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX21vZHVsZS5jCkBAIC0wLDAgKzEsOTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpbmNsdWRlIDxiZmEuaD4KKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX3BjaS5oPgorI2luY2x1ZGUgPGNzL2JmYV9kZWJ1Zy5oPgorI2luY2x1ZGUgPGJmYV9pb2NmYy5oPgorCisvKioKKyAqIEJGQSBtb2R1bGUgbGlzdCB0ZXJtaW5hdGVkIGJ5IE5VTEwKKyAqLworc3RydWN0IGJmYV9tb2R1bGVfcyAqaGFsX21vZHNbXSA9IHsKKwkmaGFsX21vZF9zZ3BnLAorCSZoYWxfbW9kX3Bwb3J0LAorCSZoYWxfbW9kX2ZjeHAsCisJJmhhbF9tb2RfbHBzLAorCSZoYWxfbW9kX3VmLAorCSZoYWxfbW9kX3Jwb3J0LAorCSZoYWxfbW9kX2ZjcGltLAorI2lmZGVmIEJGQV9DRkdfUEJJTkQKKwkmaGFsX21vZF9wYmluZCwKKyNlbmRpZgorCU5VTEwKK307CisKKy8qKgorICogTWVzc2FnZSBoYW5kbGVycyBmb3IgdmFyaW91cyBtb2R1bGVzLgorICovCitiZmFfaXNyX2Z1bmNfdCAgYmZhX2lzcnNbQkZJX01DX01BWF0gPSB7CisJYmZhX2lzcl91bmhhbmRsZWQsCS8qIE5PTkUgKi8KKwliZmFfaXNyX3VuaGFuZGxlZCwJLyogQkZJX01DX0lPQyAqLworCWJmYV9pc3JfdW5oYW5kbGVkLAkvKiBCRklfTUNfRElBRyAqLworCWJmYV9pc3JfdW5oYW5kbGVkLAkvKiBCRklfTUNfRkxBU0ggKi8KKwliZmFfaXNyX3VuaGFuZGxlZCwJLyogQkZJX01DX0NFRSAqLworCWJmYV9wcG9ydF9pc3IsCQkvKiBCRklfTUNfUE9SVCAqLworCWJmYV9pc3JfdW5oYW5kbGVkLAkvKiBCRklfTUNfSU9DRkMgKi8KKwliZmFfaXNyX3VuaGFuZGxlZCwJLyogQkZJX01DX0xMICovCisJYmZhX3VmX2lzciwJCS8qIEJGSV9NQ19VRiAqLworCWJmYV9mY3hwX2lzciwJCS8qIEJGSV9NQ19GQ1hQICovCisJYmZhX2xwc19pc3IsCQkvKiBCRklfTUNfTFBTICovCisJYmZhX3Jwb3J0X2lzciwJCS8qIEJGSV9NQ19SUE9SVCAqLworCWJmYV9pdG5pbV9pc3IsCQkvKiBCRklfTUNfSVROSU0gKi8KKwliZmFfaXNyX3VuaGFuZGxlZCwJLyogQkZJX01DX0lPSU1fUkVBRCAqLworCWJmYV9pc3JfdW5oYW5kbGVkLAkvKiBCRklfTUNfSU9JTV9XUklURSAqLworCWJmYV9pc3JfdW5oYW5kbGVkLAkvKiBCRklfTUNfSU9JTV9JTyAqLworCWJmYV9pb2ltX2lzciwJCS8qIEJGSV9NQ19JT0lNICovCisJYmZhX2lvaW1fZ29vZF9jb21wX2lzciwJLyogQkZJX01DX0lPSU1fSU9DT00gKi8KKwliZmFfdHNraW1faXNyLAkJLyogQkZJX01DX1RTS0lNICovCisJYmZhX2lzcl91bmhhbmRsZWQsCS8qIEJGSV9NQ19TQk9PVCAqLworCWJmYV9pc3JfdW5oYW5kbGVkLAkvKiBCRklfTUNfSVBGQyAqLworCWJmYV9pc3JfdW5oYW5kbGVkLAkvKiBCRklfTUNfUE9SVCAqLworCWJmYV9pc3JfdW5oYW5kbGVkLAkvKiAtLS0tLS0tLS0gKi8KKwliZmFfaXNyX3VuaGFuZGxlZCwJLyogLS0tLS0tLS0tICovCisJYmZhX2lzcl91bmhhbmRsZWQsCS8qIC0tLS0tLS0tLSAqLworCWJmYV9pc3JfdW5oYW5kbGVkLAkvKiAtLS0tLS0tLS0gKi8KKwliZmFfaXNyX3VuaGFuZGxlZCwJLyogLS0tLS0tLS0tICovCisJYmZhX2lzcl91bmhhbmRsZWQsCS8qIC0tLS0tLS0tLSAqLworCWJmYV9pc3JfdW5oYW5kbGVkLAkvKiAtLS0tLS0tLS0gKi8KKwliZmFfaXNyX3VuaGFuZGxlZCwJLyogLS0tLS0tLS0tICovCisJYmZhX2lzcl91bmhhbmRsZWQsCS8qIC0tLS0tLS0tLSAqLworCWJmYV9pc3JfdW5oYW5kbGVkLAkvKiAtLS0tLS0tLS0gKi8KK307CisKKy8qKgorICogTWVzc2FnZSBoYW5kbGVycyBmb3IgbWFpbGJveCBjb21tYW5kIGNsYXNzZXMKKyAqLworYmZhX2lvY19tYm94X21jZnVuY190ICBiZmFfbWJveF9pc3JzW0JGSV9NQ19NQVhdID0geworCU5VTEwsCisJTlVMTCwJCQkvKiBCRklfTUNfSU9DCSovCisJTlVMTCwJCQkvKiBCRklfTUNfRElBRwkqLworCU5VTEwsCQkvKiBCRklfTUNfRkxBU0ggKi8KKwlOVUxMLAkJCS8qIEJGSV9NQ19DRUUJKi8KKwlOVUxMLAkJCS8qIEJGSV9NQ19QT1JUCSovCisJYmZhX2lvY2ZjX2lzciwJCS8qIEJGSV9NQ19JT0NGQyAqLworCU5VTEwsCit9OworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2JmYV9tb2R1bGVzX3ByaXYuaCBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX21vZHVsZXNfcHJpdi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2ZjcwNTMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9tb2R1bGVzX3ByaXYuaApAQCAtMCwwICsxLDQzIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX19CRkFfTU9EVUxFU19QUklWX0hfXworI2RlZmluZSBfX0JGQV9NT0RVTEVTX1BSSVZfSF9fCisKKyNpbmNsdWRlICJiZmFfdWZfcHJpdi5oIgorI2luY2x1ZGUgImJmYV9wb3J0X3ByaXYuaCIKKyNpbmNsdWRlICJiZmFfcnBvcnRfcHJpdi5oIgorI2luY2x1ZGUgImJmYV9mY3hwX3ByaXYuaCIKKyNpbmNsdWRlICJiZmFfbHBzX3ByaXYuaCIKKyNpbmNsdWRlICJiZmFfZmNwaW1fcHJpdi5oIgorI2luY2x1ZGUgPGNlZS9iZmFfY2VlLmg+CisjaW5jbHVkZSA8cG9ydC9iZmFfcG9ydC5oPgorCisKK3N0cnVjdCBiZmFfbW9kdWxlc19zIHsKKwlzdHJ1Y3QgYmZhX3Bwb3J0X3MJcHBvcnQ7CS8qICBwaHlzaWNhbCBwb3J0IG1vZHVsZQkqLworCXN0cnVjdCBiZmFfZmN4cF9tb2RfcyBmY3hwX21vZDsgLyogIGZjeHAgbW9kdWxlCQkqLworCXN0cnVjdCBiZmFfbHBzX21vZF9zIGxwc19tb2Q7ICAgLyogIGZjeHAgbW9kdWxlCQkqLworCXN0cnVjdCBiZmFfdWZfbW9kX3MgdWZfbW9kOwkvKiAgdW5zb2xpY2l0ZWQgZnJhbWUgbW9kdWxlCSovCisJc3RydWN0IGJmYV9ycG9ydF9tb2RfcyBycG9ydF9tb2Q7IC8qICByZW1vdGUgcG9ydCBtb2R1bGUJKi8KKwlzdHJ1Y3QgYmZhX2ZjcGltX21vZF9zIGZjcGltX21vZDsgLyogIEZDUCBpbml0aWF0b3IgbW9kdWxlCSovCisJc3RydWN0IGJmYV9zZ3BnX21vZF9zIHNncGdfbW9kOyAvKiAgU0cgcGFnZSBtb2R1bGUJCSovCisJc3RydWN0IGJmYV9jZWVfcyBjZWU7ICAgCS8qICBDRUUgTW9kdWxlICAgICAgICAgICAgICAgICAqLworCXN0cnVjdCBiZmFfcG9ydF9zIHBvcnQ7CQkvKiAgUGh5c2ljYWwgcG9ydCBtb2R1bGUJKi8KK307CisKKyNlbmRpZiAvKiBfX0JGQV9NT0RVTEVTX1BSSVZfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2JmYV9vc19pbmMuaCBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX29zX2luYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwYTg5ZjcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9vc19pbmMuaApAQCAtMCwwICsxLDIyMiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisvKioKKyAqIENvbnRhaW5zIGRlY2xhcmF0aW9ucyBhbGwgT1MgU3BlY2lmaWMgZmlsZXMgbmVlZGVkIGZvciBCRkEgbGF5ZXIKKyAqLworCisjaWZuZGVmIF9fQkZBX09TX0lOQ19IX18KKyNkZWZpbmUgX19CRkFfT1NfSU5DX0hfXworCisjaWZuZGVmIF9fS0VSTkVMX18KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNlbHNlCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKworI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjZGVmaW5lIFNFVF9NT0RVTEVfVkVSU0lPTihWRVIpCisKKyNpbmNsdWRlIDxsaW51eC9pZHIuaD4KKworI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2NkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorCisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CisKKyNpbmNsdWRlIDxzY3NpL3Njc2kuaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2lfaG9zdC5oPgorCisjaW5jbHVkZSA8c2NzaS9zY3NpX3RjcS5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV90cmFuc3BvcnRfZmMuaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2lfdHJhbnNwb3J0Lmg+CisKKyNkZWZpbmUgQkZBX0VSUgkJCUtFUk5fRVJSCisjZGVmaW5lIEJGQV9XQVJOSU5HCQlLRVJOX1dBUk5JTkcKKyNkZWZpbmUgQkZBX05PVElDRQkJS0VSTl9OT1RJQ0UKKyNkZWZpbmUgQkZBX0lORk8JCUtFUk5fSU5GTworI2RlZmluZSBCRkFfREVCVUcJCUtFUk5fREVCVUcKKworI2RlZmluZSBMT0dfQkZBRF9JTklUCQkweDAwMDAwMDAxCisjZGVmaW5lIExPR19GQ1BfSU8JCTB4MDAwMDAwMDIKKworI2lmZGVmIERFQlVHCisjZGVmaW5lIEJGQV9MT0dfVFJBQ0UoYmZhZCwgbGV2ZWwsIG1hc2ssIGZtdCwgYXJnLi4uKQkJCVwKKwkJQkZBX0xPRyhiZmFkLCBsZXZlbCwgbWFzaywgZm10LCAjIyBhcmcpCisjZGVmaW5lIEJGQV9ERVZfVFJBQ0UoYmZhZCwgbGV2ZWwsIGZtdCwgYXJnLi4uKQkJCQlcCisJCUJGQV9ERVZfUFJJTlRGKGJmYWQsIGxldmVsLCBmbXQsICMjIGFyZykKKyNkZWZpbmUgQkZBX1RSQUNFKGxldmVsLCBmbXQsIGFyZy4uLikJCQkJCVwKKwkJQkZBX1BSSU5URihsZXZlbCwgZm10LCAjIyBhcmcpCisjZWxzZQorI2RlZmluZSBCRkFfTE9HX1RSQUNFKGJmYWQsIGxldmVsLCBtYXNrLCBmbXQsIGFyZy4uLikKKyNkZWZpbmUgQkZBX0RFVl9UUkFDRShiZmFkLCBsZXZlbCwgZm10LCBhcmcuLi4pCisjZGVmaW5lIEJGQV9UUkFDRShsZXZlbCwgZm10LCBhcmcuLi4pCisjZW5kaWYKKworI2RlZmluZSBCRkFfQVNTRVJUKHApIGRvIHsJCQkJCQlcCisJaWYgKCEocCkpIHsgICAgICBcCisJCXByaW50ayhLRVJOX0VSUiAiYXNzZXJ0KCVzKSBmYWlsZWQgYXQgJXM6JWRcbiIsCQlcCisJCSNwLCBfX0ZJTEVfXywgX19MSU5FX18pOyAgICAgIFwKKwkJQlVHKCk7ICAgICAgXAorCX0JCQkJCQkJCVwKK30gd2hpbGUgKDApCisKKworI2RlZmluZSBCRkFfTE9HKGJmYWQsIGxldmVsLCBtYXNrLCBmbXQsIGFyZy4uLikJCQkJXAorZG8geyAJCQkJCQkJCQlcCisJaWYgKCgobWFzaykgJiAoKChzdHJ1Y3QgYmZhZF9zICopKGJmYWQpKS0+CQkJXAorCQljZmdfZGF0YVtjZmdfbG9nX21hc2tdKSkgfHwgKGxldmVsWzFdIDw9ICczJykpCQlcCisJCWRldl9wcmludGsobGV2ZWwsICYoKChzdHJ1Y3QgYmZhZF9zICopCQkJXAorCQkJKGJmYWQpKS0+cGNpZGV2LT5kZXYpLCBmbXQsICMjYXJnKTsgICAgICBcCit9IHdoaWxlICgwKQorCisjaWZuZGVmIEJGQV9ERVZfUFJJTlRGCisjZGVmaW5lIEJGQV9ERVZfUFJJTlRGKGJmYWQsIGxldmVsLCBmbXQsIGFyZy4uLikJCQlcCisJCWRldl9wcmludGsobGV2ZWwsICYoKChzdHJ1Y3QgYmZhZF9zICopCQkJXAorCQkJKGJmYWQpKS0+cGNpZGV2LT5kZXYpLCBmbXQsICMjYXJnKTsKKyNlbmRpZgorCisjZGVmaW5lIEJGQV9QUklOVEYobGV2ZWwsIGZtdCwgYXJnLi4uKQkJCQkJXAorCQlwcmludGsobGV2ZWwgZm10LCAjI2FyZyk7CisKK2ludCBiZmFfb3NfTVdCKHZvaWQgKik7CisKKyNkZWZpbmUgYmZhX29zX21taW93YigpCQltbWlvd2IoKQorCisjZGVmaW5lIGJmYV9zd2FwXzNiKF94KQkJCQlcCisJKCgoKF94KSAmIDB4ZmYpIDw8IDE2KSB8CQlcCisJKChfeCkgJiAweDAwZmYwMCkgfAkJCVwKKwkoKChfeCkgJiAweGZmMDAwMCkgPj4gMTYpKQorCisjZGVmaW5lIGJmYV9zd2FwXzhiKF94KSAJCQkJXAorICAgICAoKCgoX3gpICYgMHhmZjAwMDAwMDAwMDAwMDAwdWxsKSA+PiA1NikJCVwKKyAgICAgIHwgKCgoX3gpICYgMHgwMGZmMDAwMDAwMDAwMDAwdWxsKSA+PiA0MCkJCVwKKyAgICAgIHwgKCgoX3gpICYgMHgwMDAwZmYwMDAwMDAwMDAwdWxsKSA+PiAyNCkJCVwKKyAgICAgIHwgKCgoX3gpICYgMHgwMDAwMDBmZjAwMDAwMDAwdWxsKSA+PiA4KQkJXAorICAgICAgfCAoKChfeCkgJiAweDAwMDAwMDAwZmYwMDAwMDB1bGwpIDw8IDgpCQlcCisgICAgICB8ICgoKF94KSAmIDB4MDAwMDAwMDAwMGZmMDAwMHVsbCkgPDwgMjQpCQlcCisgICAgICB8ICgoKF94KSAmIDB4MDAwMDAwMDAwMDAwZmYwMHVsbCkgPDwgNDApCQlcCisgICAgICB8ICgoKF94KSAmIDB4MDAwMDAwMDAwMDAwMDBmZnVsbCkgPDwgNTYpKQorCisjZGVmaW5lIGJmYV9vc19zd2FwMzIoX3gpIAkJCVwKKwkoKCgoX3gpICYgMHhmZikgPDwgMjQpIAkJfAlcCisJKCgoX3gpICYgMHgwMDAwZmYwMCkgPDwgOCkJfAlcCisJKCgoX3gpICYgMHgwMGZmMDAwMCkgPj4gOCkJfAlcCisJKCgoX3gpICYgMHhmZjAwMDAwMCkgPj4gMjQpKQorCisKKyNpZm5kZWYgX19CSUdFTkRJQU4KKyNkZWZpbmUgYmZhX29zX2h0b25zKF94KSAoKHUxNikoKCgoX3gpICYgMHhmZjAwKSA+PiA4KSB8IFwKKwkJCQkgKCgoX3gpICYgMHgwMGZmKSA8PCA4KSkpCisKKyNkZWZpbmUgYmZhX29zX2h0b25sKF94KQliZmFfb3Nfc3dhcDMyKF94KQorI2RlZmluZSBiZmFfb3NfaHRvbmxsKF94KQliZmFfc3dhcF84YihfeCkKKyNkZWZpbmUgYmZhX29zX2h0b24zYihfeCkJYmZhX3N3YXBfM2IoX3gpCisKKyNkZWZpbmUgYmZhX29zX3d0b2xlKF94KSAgIChfeCkKKworI2Vsc2UKKworI2RlZmluZSBiZmFfb3NfaHRvbnMoX3gpICAgKF94KQorI2RlZmluZSBiZmFfb3NfaHRvbmwoX3gpICAgKF94KQorI2RlZmluZSBiZmFfb3NfaHRvbjNiKF94KSAgKF94KQorI2RlZmluZSBiZmFfb3NfaHRvbmxsKF94KSAgKF94KQorI2RlZmluZSBiZmFfb3Nfd3RvbGUoX3gpICAgYmZhX29zX3N3YXAzMihfeCkKKworI2VuZGlmCisKKyNkZWZpbmUgYmZhX29zX250b2hzKF94KSAgIGJmYV9vc19odG9ucyhfeCkKKyNkZWZpbmUgYmZhX29zX250b2hsKF94KSAgIGJmYV9vc19odG9ubChfeCkKKyNkZWZpbmUgYmZhX29zX250b2hsbChfeCkgIGJmYV9vc19odG9ubGwoX3gpCisjZGVmaW5lIGJmYV9vc19udG9oM2IoX3gpICBiZmFfb3NfaHRvbjNiKF94KQorCisjZGVmaW5lIGJmYV9vc191MzIoX19wYTY0KSAoKF9fcGE2NCkgPj4gMzIpCisKKyNkZWZpbmUgYmZhX29zX21lbXNldAltZW1zZXQKKyNkZWZpbmUgYmZhX29zX21lbWNweQltZW1jcHkKKyNkZWZpbmUgYmZhX29zX3VkZWxheQl1ZGVsYXkKKyNkZWZpbmUgYmZhX29zX3ZzcHJpbnRmIHZzcHJpbnRmCisKKyNkZWZpbmUgYmZhX29zX2Fzc2lnbihfX3QsIF9fcykgX190ID0gX19zCisKKyNkZWZpbmUgYmZhX29zX2FkZHJfdCBjaGFyIF9faW9tZW0gKgorI2RlZmluZSBiZmFfb3NfcGFuaWMoKQorCisjZGVmaW5lIGJmYV9vc19yZWdfcmVhZChfcmFkZHIpIGJmYV9vc193dG9sZShyZWFkbChfcmFkZHIpKQorI2RlZmluZSBiZmFfb3NfcmVnX3dyaXRlKF9yYWRkciwgX3ZhbCkgd3JpdGVsKGJmYV9vc193dG9sZSgoX3ZhbCkpLCAoX3JhZGRyKSkKKyNkZWZpbmUgYmZhX29zX21lbV9yZWFkKF9yYWRkciwgX29mZikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwliZmFfb3NfbnRvaGwocmVhZGwoKChfcmFkZHIpICsgKF9vZmYpKSkpCisjZGVmaW5lIGJmYV9vc19tZW1fd3JpdGUoX3JhZGRyLCBfb2ZmLCBfdmFsKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJd3JpdGVsKGJmYV9vc19odG9ubCgoX3ZhbCkpLCAoKF9yYWRkcikgKyAoX29mZikpKQorCisjZGVmaW5lIEJGQV9UUkNfVFMoX3RyY20pCQkJCQkJXAorCQkJKHsJCQkJCQlcCisJCQkJc3RydWN0IHRpbWV2YWwgdHY7CQkJXAorCQkJCQkJCQkJXAorCQkJCWRvX2dldHRpbWVvZmRheSgmdHYpOyAgICAgIFwKKwkJCQkodHYudHZfc2VjKjEwMDAwMDArdHYudHZfdXNlYyk7ICAgICAgXAorCQkJIH0pCisKK3N0cnVjdCBiZmFfbG9nX21vZF9zOwordm9pZCBiZmFfb3NfcHJpbnRmKHN0cnVjdCBiZmFfbG9nX21vZF9zICpsb2dfbW9kLCB1MzIgbXNnX2lkLAorCQkJY29uc3QgY2hhciAqZm10LCAuLi4pOworI2VuZGlmCisKKyNkZWZpbmUgYm9vbGVhbl90IGludAorCisvKioKKyAqIEZvciBjdXJyZW50IHRpbWUgc3RhbXAsIE9TIEFQSSB3aWxsIGZpbGwtaW4KKyAqLworc3RydWN0IGJmYV90aW1ldmFsX3MgeworCXUzMgl0dl9zZWM7CQkvKiAgc2Vjb25kcyAgICAgICAgKi8KKwl1MzIJdHZfdXNlYzsJLyogIG1pY3Jvc2Vjb25kcyAgICovCit9OworCit2b2lkIGJmYV9vc19nZXR0aW1lb2ZkYXkoc3RydWN0IGJmYV90aW1ldmFsX3MgKnR2KTsKKworc3RhdGljIGlubGluZSB2b2lkCit3d24yc3RyKGNoYXIgKnd3bl9zdHIsIHU2NCB3d24pCit7CisJdW5pb24geworCQl1NjQgd3duOworCQl1OCBieXRlWzhdOworCX0gdzsKKworCXcud3duID0gd3duOworCXNwcmludGYod3duX3N0ciwgIiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeCIsIHcuYnl0ZVswXSwKKwkJdy5ieXRlWzFdLCB3LmJ5dGVbMl0sIHcuYnl0ZVszXSwgdy5ieXRlWzRdLCB3LmJ5dGVbNV0sCisJCXcuYnl0ZVs2XSwgdy5ieXRlWzddKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitmY2lkMnN0cihjaGFyICpmY2lkX3N0ciwgdTMyIGZjaWQpCit7CisJdW5pb24geworCQl1MzIgZmNpZDsKKwkJdTggYnl0ZVs0XTsKKwl9IGY7CisKKwlmLmZjaWQgPSBmY2lkOworCXNwcmludGYoZmNpZF9zdHIsICIlMDJ4OiUwMng6JTAyeCIsIGYuYnl0ZVsxXSwgZi5ieXRlWzJdLCBmLmJ5dGVbM10pOworfQorCisjZW5kaWYgLyogX19CRkFfT1NfSU5DX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfcG9ydC5jIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfcG9ydC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhYjE5MDIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9wb3J0LmMKQEAgLTAsMCArMSw0NjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfcG9ydC5oPgorI2luY2x1ZGUgPGNzL2JmYV90cmMuaD4KKyNpbmNsdWRlIDxjcy9iZmFfbG9nLmg+CisjaW5jbHVkZSA8Y3MvYmZhX2RlYnVnLmg+CisjaW5jbHVkZSA8cG9ydC9iZmFfcG9ydC5oPgorI2luY2x1ZGUgPGJmaS9iZmkuaD4KKyNpbmNsdWRlIDxiZmkvYmZpX3BvcnQuaD4KKyNpbmNsdWRlIDxiZmFfaW9jLmg+CisjaW5jbHVkZSA8Y25hL2JmYV9jbmFfdHJjbW9kLmg+CisKK0JGQV9UUkNfRklMRShDTkEsIFBPUlQpOworCisjZGVmaW5lIGJmYV9pb2NfcG9ydGlkKF9faW9jKSAoKF9faW9jKS0+cG9ydF9pZCkKKyNkZWZpbmUgYmZhX2xwdWlkKF9fYXJnKSBiZmFfaW9jX3BvcnRpZCgmKF9fYXJnKS0+aW9jKQorCitzdGF0aWMgdm9pZAorYmZhX3BvcnRfc3RhdHNfc3dhcChzdHJ1Y3QgYmZhX3BvcnRfcyAqcG9ydCwgdW5pb24gYmZhX3Bwb3J0X3N0YXRzX3UgKnN0YXRzKQoreworCXUzMiAgICAgICAqZGlwID0gKHUzMiAqKSBzdGF0czsKKwl1MzIgICAgICAgIHQwLCB0MTsKKwlpbnQgICAgICAgICAgICAgaTsKKworCWZvciAoaSA9IDA7IGkgPCBzaXplb2YodW5pb24gYmZhX3Bwb3J0X3N0YXRzX3UpIC8gc2l6ZW9mKHUzMik7CisJICAgICBpICs9IDIpIHsKKwkJdDAgPSBkaXBbaV07CisJCXQxID0gZGlwW2kgKyAxXTsKKyNpZmRlZiBfX0JJR0VORElBTgorCQlkaXBbaV0gPSBiZmFfb3NfbnRvaGwodDApOworCQlkaXBbaSArIDFdID0gYmZhX29zX250b2hsKHQxKTsKKyNlbHNlCisJCWRpcFtpXSA9IGJmYV9vc19udG9obCh0MSk7CisJCWRpcFtpICsgMV0gPSBiZmFfb3NfbnRvaGwodDApOworI2VuZGlmCisJfQorCisgICAgLyoqIHRvZG8KKyAgICAgKiBRb1Mgc3RhdHMgciBhbHNvIHN3YXBwZWQgYXMgNjRiaXQ7IHRoYXQgc3RydWN0dXJlIGFsc28KKyAgICAgKiBoYXMgdG8gdXNlIDY0IGJpdCBjb3VudGVycworICAgICAqLworfQorCisvKioKKyAqIGJmYV9wb3J0X2VuYWJsZV9pc3IoKQorICoKKyAqCisgKiBAcGFyYW1baW5dIHBvcnQgLSBQb2ludGVyIHRvIHRoZSBwb3J0IG1vZHVsZQorICogICAgICAgICAgICBzdGF0dXMgLSBSZXR1cm4gc3RhdHVzIGZyb20gdGhlIGYvdworICoKKyAqIEByZXR1cm4gdm9pZAorICovCitzdGF0aWMgdm9pZAorYmZhX3BvcnRfZW5hYmxlX2lzcihzdHJ1Y3QgYmZhX3BvcnRfcyAqcG9ydCwgYmZhX3N0YXR1c190IHN0YXR1cykKK3sKKwliZmFfYXNzZXJ0KDApOworfQorCisvKioKKyAqIGJmYV9wb3J0X2Rpc2FibGVfaXNyKCkKKyAqCisgKgorICogQHBhcmFtW2luXSBwb3J0IC0gUG9pbnRlciB0byB0aGUgcG9ydCBtb2R1bGUKKyAqICAgICAgICAgICAgc3RhdHVzIC0gUmV0dXJuIHN0YXR1cyBmcm9tIHRoZSBmL3cKKyAqCisgKiBAcmV0dXJuIHZvaWQKKyAqLworc3RhdGljIHZvaWQKK2JmYV9wb3J0X2Rpc2FibGVfaXNyKHN0cnVjdCBiZmFfcG9ydF9zICpwb3J0LCBiZmFfc3RhdHVzX3Qgc3RhdHVzKQoreworCWJmYV9hc3NlcnQoMCk7Cit9CisKKy8qKgorICogYmZhX3BvcnRfZ2V0X3N0YXRzX2lzcigpCisgKgorICoKKyAqIEBwYXJhbVtpbl0gcG9ydCAtIFBvaW50ZXIgdG8gdGhlIFBvcnQgbW9kdWxlCisgKiAgICAgICAgICAgIHN0YXR1cyAtIFJldHVybiBzdGF0dXMgZnJvbSB0aGUgZi93CisgKgorICogQHJldHVybiB2b2lkCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfcG9ydF9nZXRfc3RhdHNfaXNyKHN0cnVjdCBiZmFfcG9ydF9zICpwb3J0LCBiZmFfc3RhdHVzX3Qgc3RhdHVzKQoreworCXBvcnQtPnN0YXRzX3N0YXR1cyA9IHN0YXR1czsKKwlwb3J0LT5zdGF0c19idXN5ID0gQkZBX0ZBTFNFOworCisJaWYgKHN0YXR1cyA9PSBCRkFfU1RBVFVTX09LKSB7CisJCW1lbWNweShwb3J0LT5zdGF0cywgcG9ydC0+c3RhdHNfZG1hLmt2YSwKKwkJICAgICAgIHNpemVvZih1bmlvbiBiZmFfcHBvcnRfc3RhdHNfdSkpOworCQliZmFfcG9ydF9zdGF0c19zd2FwKHBvcnQsIHBvcnQtPnN0YXRzKTsKKwl9CisKKwlpZiAocG9ydC0+c3RhdHNfY2JmbikgeworCQlwb3J0LT5zdGF0c19jYmZuKHBvcnQtPnN0YXRzX2NiYXJnLCBzdGF0dXMpOworCQlwb3J0LT5zdGF0c19jYmZuID0gTlVMTDsKKwl9Cit9CisKKy8qKgorICogYmZhX3BvcnRfY2xlYXJfc3RhdHNfaXNyKCkKKyAqCisgKgorICogQHBhcmFtW2luXSBwb3J0IC0gUG9pbnRlciB0byB0aGUgUG9ydCBtb2R1bGUKKyAqICAgICAgICAgICAgc3RhdHVzIC0gUmV0dXJuIHN0YXR1cyBmcm9tIHRoZSBmL3cKKyAqCisgKiBAcmV0dXJuIHZvaWQKKyAqLworc3RhdGljIHZvaWQKK2JmYV9wb3J0X2NsZWFyX3N0YXRzX2lzcihzdHJ1Y3QgYmZhX3BvcnRfcyAqcG9ydCwgYmZhX3N0YXR1c190IHN0YXR1cykKK3sKKwlwb3J0LT5zdGF0c19zdGF0dXMgPSBzdGF0dXM7CisJcG9ydC0+c3RhdHNfYnVzeSA9IEJGQV9GQUxTRTsKKworCWlmIChwb3J0LT5zdGF0c19jYmZuKSB7CisJCXBvcnQtPnN0YXRzX2NiZm4ocG9ydC0+c3RhdHNfY2JhcmcsIHN0YXR1cyk7CisJCXBvcnQtPnN0YXRzX2NiZm4gPSBOVUxMOworCX0KK30KKworLyoqCisgKiBiZmFfcG9ydF9pc3IoKQorICoKKyAqCisgKiBAcGFyYW1baW5dIFBvaW50ZXIgdG8gdGhlIFBvcnQgbW9kdWxlIGRhdGEgc3RydWN0dXJlLgorICoKKyAqIEByZXR1cm4gdm9pZAorICovCitzdGF0aWMgdm9pZAorYmZhX3BvcnRfaXNyKHZvaWQgKmNiYXJnLCBzdHJ1Y3QgYmZpX21ibXNnX3MgKm0pCit7CisJc3RydWN0IGJmYV9wb3J0X3MgKnBvcnQgPSAoc3RydWN0IGJmYV9wb3J0X3MgKiljYmFyZzsKKwl1bmlvbiBiZmlfcG9ydF9pMmhfbXNnX3UgKmkyaG1zZzsKKworCWkyaG1zZyA9ICh1bmlvbiBiZmlfcG9ydF9pMmhfbXNnX3UgKiltOworCWJmYV90cmMocG9ydCwgbS0+bWgubXNnX2lkKTsKKworCXN3aXRjaCAobS0+bWgubXNnX2lkKSB7CisJY2FzZSBCRklfUE9SVF9JMkhfRU5BQkxFX1JTUDoKKwkJaWYgKHBvcnQtPmVuZGlzX3BlbmRpbmcgPT0gQkZBX0ZBTFNFKQorCQkJYnJlYWs7CisJCWJmYV9wb3J0X2VuYWJsZV9pc3IocG9ydCwgaTJobXNnLT5lbmFibGVfcnNwLnN0YXR1cyk7CisJCWJyZWFrOworCisJY2FzZSBCRklfUE9SVF9JMkhfRElTQUJMRV9SU1A6CisJCWlmIChwb3J0LT5lbmRpc19wZW5kaW5nID09IEJGQV9GQUxTRSkKKwkJCWJyZWFrOworCQliZmFfcG9ydF9kaXNhYmxlX2lzcihwb3J0LCBpMmhtc2ctPmRpc2FibGVfcnNwLnN0YXR1cyk7CisJCWJyZWFrOworCisJY2FzZSBCRklfUE9SVF9JMkhfR0VUX1NUQVRTX1JTUDoKKwkJLyoKKwkJICogU3RhdHMgYnVzeSBmbGFnIGlzIHN0aWxsIHNldD8gKG1heSBiZSBjbWQgdGltZWQgb3V0KQorCQkgKi8KKwkJaWYgKHBvcnQtPnN0YXRzX2J1c3kgPT0gQkZBX0ZBTFNFKQorCQkJYnJlYWs7CisJCWJmYV9wb3J0X2dldF9zdGF0c19pc3IocG9ydCwgaTJobXNnLT5nZXRzdGF0c19yc3Auc3RhdHVzKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGSV9QT1JUX0kySF9DTEVBUl9TVEFUU19SU1A6CisJCWlmIChwb3J0LT5zdGF0c19idXN5ID09IEJGQV9GQUxTRSkKKwkJCWJyZWFrOworCQliZmFfcG9ydF9jbGVhcl9zdGF0c19pc3IocG9ydCwgaTJobXNnLT5jbGVhcnN0YXRzX3JzcC5zdGF0dXMpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqIGJmYV9wb3J0X21lbWluZm8oKQorICoKKyAqCisgKiBAcGFyYW1baW5dIHZvaWQKKyAqCisgKiBAcmV0dXJuIFNpemUgb2YgRE1BIHJlZ2lvbgorICovCit1MzIKK2JmYV9wb3J0X21lbWluZm8odm9pZCkKK3sKKwlyZXR1cm4gQkZBX1JPVU5EVVAoc2l6ZW9mKHVuaW9uIGJmYV9wcG9ydF9zdGF0c191KSwgQkZBX0RNQV9BTElHTl9TWik7Cit9CisKKy8qKgorICogYmZhX3BvcnRfbWVtX2NsYWltKCkKKyAqCisgKgorICogQHBhcmFtW2luXSBwb3J0IFBvcnQgbW9kdWxlIHBvaW50ZXIKKyAqIAkgICAgICBkbWFfa3ZhIEtlcm5lbCBWaXJ0dWFsIEFkZHJlc3Mgb2YgUG9ydCBETUEgTWVtb3J5CisgKiAJICAgICAgZG1hX3BhICBQaHlzaWNhbCBBZGRyZXNzIG9mIFBvcnQgRE1BIE1lbW9yeQorICoKKyAqIEByZXR1cm4gdm9pZAorICovCit2b2lkCitiZmFfcG9ydF9tZW1fY2xhaW0oc3RydWN0IGJmYV9wb3J0X3MgKnBvcnQsIHU4ICpkbWFfa3ZhLCB1NjQgZG1hX3BhKQoreworCXBvcnQtPnN0YXRzX2RtYS5rdmEgPSBkbWFfa3ZhOworCXBvcnQtPnN0YXRzX2RtYS5wYSA9IGRtYV9wYTsKK30KKworLyoqCisgKiBiZmFfcG9ydF9lbmFibGUoKQorICoKKyAqICAgU2VuZCB0aGUgUG9ydCBlbmFibGUgcmVxdWVzdCB0byB0aGUgZi93CisgKgorICogQHBhcmFtW2luXSBQb2ludGVyIHRvIHRoZSBQb3J0IG1vZHVsZSBkYXRhIHN0cnVjdHVyZS4KKyAqCisgKiBAcmV0dXJuIFN0YXR1cworICovCitiZmFfc3RhdHVzX3QKK2JmYV9wb3J0X2VuYWJsZShzdHJ1Y3QgYmZhX3BvcnRfcyAqcG9ydCwgYmZhX3BvcnRfZW5kaXNfY2Jmbl90IGNiZm4sCisJCXZvaWQgKmNiYXJnKQoreworCXN0cnVjdCBiZmlfcG9ydF9nZW5lcmljX3JlcV9zICptOworCisJLyoqIHRvZG8gTm90IGltcGxlbWVudGVkICovCisJYmZhX2Fzc2VydCgwKTsKKworCWlmICghYmZhX2lvY19pc19vcGVyYXRpb25hbChwb3J0LT5pb2MpKSB7CisJCWJmYV90cmMocG9ydCwgQkZBX1NUQVRVU19JT0NfRkFJTFVSRSk7CisJCXJldHVybiBCRkFfU1RBVFVTX0lPQ19GQUlMVVJFOworCX0KKworCWlmIChwb3J0LT5lbmRpc19wZW5kaW5nKSB7CisJCWJmYV90cmMocG9ydCwgQkZBX1NUQVRVU19ERVZCVVNZKTsKKwkJcmV0dXJuIEJGQV9TVEFUVVNfREVWQlVTWTsKKwl9CisKKwltID0gKHN0cnVjdCBiZmlfcG9ydF9nZW5lcmljX3JlcV9zICopcG9ydC0+ZW5kaXNfbWIubXNnOworCisJcG9ydC0+bXNndGFnKys7CisJcG9ydC0+ZW5kaXNfY2JmbiA9IGNiZm47CisJcG9ydC0+ZW5kaXNfY2JhcmcgPSBjYmFyZzsKKwlwb3J0LT5lbmRpc19wZW5kaW5nID0gQkZBX1RSVUU7CisKKwliZmlfaDJpX3NldChtLT5taCwgQkZJX01DX1BPUlQsIEJGSV9QT1JUX0gySV9FTkFCTEVfUkVRLAorCQkgICAgYmZhX2lvY19wb3J0aWQocG9ydC0+aW9jKSk7CisJYmZhX2lvY19tYm94X3F1ZXVlKHBvcnQtPmlvYywgJnBvcnQtPmVuZGlzX21iKTsKKworCXJldHVybiBCRkFfU1RBVFVTX09LOworfQorCisvKioKKyAqIGJmYV9wb3J0X2Rpc2FibGUoKQorICoKKyAqICAgU2VuZCB0aGUgUG9ydCBkaXNhYmxlIHJlcXVlc3QgdG8gdGhlIGYvdworICoKKyAqIEBwYXJhbVtpbl0gUG9pbnRlciB0byB0aGUgUG9ydCBtb2R1bGUgZGF0YSBzdHJ1Y3R1cmUuCisgKgorICogQHJldHVybiBTdGF0dXMKKyAqLworYmZhX3N0YXR1c190CitiZmFfcG9ydF9kaXNhYmxlKHN0cnVjdCBiZmFfcG9ydF9zICpwb3J0LCBiZmFfcG9ydF9lbmRpc19jYmZuX3QgY2JmbiwKKwkJIHZvaWQgKmNiYXJnKQoreworCXN0cnVjdCBiZmlfcG9ydF9nZW5lcmljX3JlcV9zICptOworCisJLyoqIHRvZG8gTm90IGltcGxlbWVudGVkICovCisJYmZhX2Fzc2VydCgwKTsKKworCWlmICghYmZhX2lvY19pc19vcGVyYXRpb25hbChwb3J0LT5pb2MpKSB7CisJCWJmYV90cmMocG9ydCwgQkZBX1NUQVRVU19JT0NfRkFJTFVSRSk7CisJCXJldHVybiBCRkFfU1RBVFVTX0lPQ19GQUlMVVJFOworCX0KKworCWlmIChwb3J0LT5lbmRpc19wZW5kaW5nKSB7CisJCWJmYV90cmMocG9ydCwgQkZBX1NUQVRVU19ERVZCVVNZKTsKKwkJcmV0dXJuIEJGQV9TVEFUVVNfREVWQlVTWTsKKwl9CisKKwltID0gKHN0cnVjdCBiZmlfcG9ydF9nZW5lcmljX3JlcV9zICopcG9ydC0+ZW5kaXNfbWIubXNnOworCisJcG9ydC0+bXNndGFnKys7CisJcG9ydC0+ZW5kaXNfY2JmbiA9IGNiZm47CisJcG9ydC0+ZW5kaXNfY2JhcmcgPSBjYmFyZzsKKwlwb3J0LT5lbmRpc19wZW5kaW5nID0gQkZBX1RSVUU7CisKKwliZmlfaDJpX3NldChtLT5taCwgQkZJX01DX1BPUlQsIEJGSV9QT1JUX0gySV9ESVNBQkxFX1JFUSwKKwkJICAgIGJmYV9pb2NfcG9ydGlkKHBvcnQtPmlvYykpOworCWJmYV9pb2NfbWJveF9xdWV1ZShwb3J0LT5pb2MsICZwb3J0LT5lbmRpc19tYik7CisKKwlyZXR1cm4gQkZBX1NUQVRVU19PSzsKK30KKworLyoqCisgKiBiZmFfcG9ydF9nZXRfc3RhdHMoKQorICoKKyAqICAgU2VuZCB0aGUgcmVxdWVzdCB0byB0aGUgZi93IHRvIGZldGNoIFBvcnQgc3RhdGlzdGljcy4KKyAqCisgKiBAcGFyYW1baW5dIFBvaW50ZXIgdG8gdGhlIFBvcnQgbW9kdWxlIGRhdGEgc3RydWN0dXJlLgorICoKKyAqIEByZXR1cm4gU3RhdHVzCisgKi8KK2JmYV9zdGF0dXNfdAorYmZhX3BvcnRfZ2V0X3N0YXRzKHN0cnVjdCBiZmFfcG9ydF9zICpwb3J0LCB1bmlvbiBiZmFfcHBvcnRfc3RhdHNfdSAqc3RhdHMsCisJCSAgIGJmYV9wb3J0X3N0YXRzX2NiZm5fdCBjYmZuLCB2b2lkICpjYmFyZykKK3sKKwlzdHJ1Y3QgYmZpX3BvcnRfZ2V0X3N0YXRzX3JlcV9zICptOworCisJaWYgKCFiZmFfaW9jX2lzX29wZXJhdGlvbmFsKHBvcnQtPmlvYykpIHsKKwkJYmZhX3RyYyhwb3J0LCBCRkFfU1RBVFVTX0lPQ19GQUlMVVJFKTsKKwkJcmV0dXJuIEJGQV9TVEFUVVNfSU9DX0ZBSUxVUkU7CisJfQorCisJaWYgKHBvcnQtPnN0YXRzX2J1c3kpIHsKKwkJYmZhX3RyYyhwb3J0LCBCRkFfU1RBVFVTX0RFVkJVU1kpOworCQlyZXR1cm4gQkZBX1NUQVRVU19ERVZCVVNZOworCX0KKworCW0gPSAoc3RydWN0IGJmaV9wb3J0X2dldF9zdGF0c19yZXFfcyAqKXBvcnQtPnN0YXRzX21iLm1zZzsKKworCXBvcnQtPnN0YXRzID0gc3RhdHM7CisJcG9ydC0+c3RhdHNfY2JmbiA9IGNiZm47CisJcG9ydC0+c3RhdHNfY2JhcmcgPSBjYmFyZzsKKwlwb3J0LT5zdGF0c19idXN5ID0gQkZBX1RSVUU7CisJYmZhX2RtYV9iZV9hZGRyX3NldChtLT5kbWFfYWRkciwgcG9ydC0+c3RhdHNfZG1hLnBhKTsKKworCWJmaV9oMmlfc2V0KG0tPm1oLCBCRklfTUNfUE9SVCwgQkZJX1BPUlRfSDJJX0dFVF9TVEFUU19SRVEsCisJCSAgICBiZmFfaW9jX3BvcnRpZChwb3J0LT5pb2MpKTsKKwliZmFfaW9jX21ib3hfcXVldWUocG9ydC0+aW9jLCAmcG9ydC0+c3RhdHNfbWIpOworCisJcmV0dXJuIEJGQV9TVEFUVVNfT0s7Cit9CisKKy8qKgorICogYmZhX3BvcnRfY2xlYXJfc3RhdHMoKQorICoKKyAqCisgKiBAcGFyYW1baW5dIFBvaW50ZXIgdG8gdGhlIFBvcnQgbW9kdWxlIGRhdGEgc3RydWN0dXJlLgorICoKKyAqIEByZXR1cm4gU3RhdHVzCisgKi8KK2JmYV9zdGF0dXNfdAorYmZhX3BvcnRfY2xlYXJfc3RhdHMoc3RydWN0IGJmYV9wb3J0X3MgKnBvcnQsIGJmYV9wb3J0X3N0YXRzX2NiZm5fdCBjYmZuLAorCQkgICAgIHZvaWQgKmNiYXJnKQoreworCXN0cnVjdCBiZmlfcG9ydF9nZW5lcmljX3JlcV9zICptOworCisJaWYgKCFiZmFfaW9jX2lzX29wZXJhdGlvbmFsKHBvcnQtPmlvYykpIHsKKwkJYmZhX3RyYyhwb3J0LCBCRkFfU1RBVFVTX0lPQ19GQUlMVVJFKTsKKwkJcmV0dXJuIEJGQV9TVEFUVVNfSU9DX0ZBSUxVUkU7CisJfQorCisJaWYgKHBvcnQtPnN0YXRzX2J1c3kpIHsKKwkJYmZhX3RyYyhwb3J0LCBCRkFfU1RBVFVTX0RFVkJVU1kpOworCQlyZXR1cm4gQkZBX1NUQVRVU19ERVZCVVNZOworCX0KKworCW0gPSAoc3RydWN0IGJmaV9wb3J0X2dlbmVyaWNfcmVxX3MgKilwb3J0LT5zdGF0c19tYi5tc2c7CisKKwlwb3J0LT5zdGF0c19jYmZuID0gY2JmbjsKKwlwb3J0LT5zdGF0c19jYmFyZyA9IGNiYXJnOworCXBvcnQtPnN0YXRzX2J1c3kgPSBCRkFfVFJVRTsKKworCWJmaV9oMmlfc2V0KG0tPm1oLCBCRklfTUNfUE9SVCwgQkZJX1BPUlRfSDJJX0NMRUFSX1NUQVRTX1JFUSwKKwkJICAgIGJmYV9pb2NfcG9ydGlkKHBvcnQtPmlvYykpOworCWJmYV9pb2NfbWJveF9xdWV1ZShwb3J0LT5pb2MsICZwb3J0LT5zdGF0c19tYik7CisKKwlyZXR1cm4gQkZBX1NUQVRVU19PSzsKK30KKworLyoqCisgKiBiZmFfcG9ydF9oYmZhaWwoKQorICoKKyAqCisgKiBAcGFyYW1baW5dIFBvaW50ZXIgdG8gdGhlIFBvcnQgbW9kdWxlIGRhdGEgc3RydWN0dXJlLgorICoKKyAqIEByZXR1cm4gdm9pZAorICovCit2b2lkCitiZmFfcG9ydF9oYmZhaWwodm9pZCAqYXJnKQoreworCXN0cnVjdCBiZmFfcG9ydF9zICpwb3J0ID0gKHN0cnVjdCBiZmFfcG9ydF9zICopYXJnOworCisJLyoKKwkgKiBGYWlsIGFueSBwZW5kaW5nIGdldF9zdGF0cy9jbGVhcl9zdGF0cyByZXF1ZXN0cworCSAqLworCWlmIChwb3J0LT5zdGF0c19idXN5KSB7CisJCWlmIChwb3J0LT5zdGF0c19jYmZuKQorCQkJcG9ydC0+c3RhdHNfY2Jmbihwb3J0LT5kZXYsIEJGQV9TVEFUVVNfRkFJTEVEKTsKKwkJcG9ydC0+c3RhdHNfY2JmbiA9IE5VTEw7CisJCXBvcnQtPnN0YXRzX2J1c3kgPSBCRkFfRkFMU0U7CisJfQorCisJLyoKKwkgKiBDbGVhciBhbnkgZW5hYmxlL2Rpc2FibGUgaXMgcGVuZGluZworCSAqLworCWlmIChwb3J0LT5lbmRpc19wZW5kaW5nKSB7CisJCWlmIChwb3J0LT5lbmRpc19jYmZuKQorCQkJcG9ydC0+ZW5kaXNfY2Jmbihwb3J0LT5kZXYsIEJGQV9TVEFUVVNfRkFJTEVEKTsKKwkJcG9ydC0+ZW5kaXNfY2JmbiA9IE5VTEw7CisJCXBvcnQtPmVuZGlzX3BlbmRpbmcgPSBCRkFfRkFMU0U7CisJfQorfQorCisvKioKKyAqIGJmYV9wb3J0X2F0dGFjaCgpCisgKgorICoKKyAqIEBwYXJhbVtpbl0gcG9ydCAtIFBvaW50ZXIgdG8gdGhlIFBvcnQgbW9kdWxlIGRhdGEgc3RydWN0dXJlCisgKiAgICAgICAgICAgIGlvYyAgLSBQb2ludGVyIHRvIHRoZSBpb2MgbW9kdWxlIGRhdGEgc3RydWN0dXJlCisgKiAgICAgICAgICAgIGRldiAgLSBQb2ludGVyIHRvIHRoZSBkZXZpY2UgZHJpdmVyIG1vZHVsZSBkYXRhIHN0cnVjdHVyZQorICogICAgICAgICAgICAgICAgICAgVGhlIGRldmljZSBkcml2ZXIgc3BlY2lmaWMgbWJveCBJU1IgZnVuY3Rpb25zIGhhdmUKKyAqICAgICAgICAgICAgICAgICAgIHRoaXMgcG9pbnRlciBhcyBvbmUgb2YgdGhlIHBhcmFtZXRlcnMuCisgKiAgICAgICAgICAgIHRyY21vZCAtCisgKiAgICAgICAgICAgIGxvZ21vZCAtCisgKgorICogQHJldHVybiB2b2lkCisgKi8KK3ZvaWQKK2JmYV9wb3J0X2F0dGFjaChzdHJ1Y3QgYmZhX3BvcnRfcyAqcG9ydCwgc3RydWN0IGJmYV9pb2NfcyAqaW9jLCB2b2lkICpkZXYsCisJCXN0cnVjdCBiZmFfdHJjX21vZF9zICp0cmNtb2QsIHN0cnVjdCBiZmFfbG9nX21vZF9zICpsb2dtb2QpCit7CisJYmZhX2Fzc2VydChwb3J0KTsKKworCXBvcnQtPmRldiA9IGRldjsKKwlwb3J0LT5pb2MgPSBpb2M7CisJcG9ydC0+dHJjbW9kID0gdHJjbW9kOworCXBvcnQtPmxvZ21vZCA9IGxvZ21vZDsKKworCXBvcnQtPnN0YXRzX2J1c3kgPSBwb3J0LT5lbmRpc19wZW5kaW5nID0gQkZBX0ZBTFNFOworCXBvcnQtPnN0YXRzX2NiZm4gPSBwb3J0LT5lbmRpc19jYmZuID0gTlVMTDsKKworCWJmYV9pb2NfbWJveF9yZWdpc3IocG9ydC0+aW9jLCBCRklfTUNfUE9SVCwgYmZhX3BvcnRfaXNyLCBwb3J0KTsKKwliZmFfaW9jX2hiZmFpbF9pbml0KCZwb3J0LT5oYmZhaWwsIGJmYV9wb3J0X2hiZmFpbCwgcG9ydCk7CisJYmZhX2lvY19oYmZhaWxfcmVnaXN0ZXIocG9ydC0+aW9jLCAmcG9ydC0+aGJmYWlsKTsKKworCWJmYV90cmMocG9ydCwgMCk7Cit9CisKKy8qKgorICogYmZhX3BvcnRfZGV0YWNoKCkKKyAqCisgKgorICogQHBhcmFtW2luXSBwb3J0IC0gUG9pbnRlciB0byB0aGUgUG9ydCBtb2R1bGUgZGF0YSBzdHJ1Y3R1cmUKKyAqCisgKiBAcmV0dXJuIHZvaWQKKyAqLwordm9pZAorYmZhX3BvcnRfZGV0YWNoKHN0cnVjdCBiZmFfcG9ydF9zICpwb3J0KQoreworCWJmYV90cmMocG9ydCwgMCk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2JmYV9wb3J0X3ByaXYuaCBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX3BvcnRfcHJpdi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiOTdlMjcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9wb3J0X3ByaXYuaApAQCAtMCwwICsxLDkwIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX19CRkFfUE9SVF9QUklWX0hfXworI2RlZmluZSBfX0JGQV9QT1JUX1BSSVZfSF9fCisKKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX3Bwb3J0Lmg+CisjaW5jbHVkZSA8YmZpL2JmaV9wcG9ydC5oPgorI2luY2x1ZGUgImJmYV9pbnRyX3ByaXYuaCIKKworLyoqCisgKiBCRkEgcGh5c2ljYWwgcG9ydCBkYXRhIHN0cnVjdHVyZQorICovCitzdHJ1Y3QgYmZhX3Bwb3J0X3MgeworCXN0cnVjdCBiZmFfcyAJCSpiZmE7CS8qICBwYXJlbnQgQkZBIGluc3RhbmNlICovCisJYmZhX3NtX3QJCXNtOwkvKiAgcG9ydCBzdGF0ZSBtYWNoaW5lICovCisJd3duX3QJCQlud3duOwkvKiAgbm9kZSB3d24gb2YgcGh5c2ljYWwgcG9ydCAqLworCXd3bl90CQkJcHd3bjsJLyogIHBvcnQgd3duIG9mIHBoeXNpY2FsIG9wcnQgKi8KKwllbnVtIGJmYV9wcG9ydF9zcGVlZCBzcGVlZF9zdXA7CisJCQkJCS8qICBzdXBwb3J0ZWQgc3BlZWRzICovCisJZW51bSBiZmFfcHBvcnRfc3BlZWQgc3BlZWQ7CS8qICBjdXJyZW50IHNwZWVkICovCisJZW51bSBiZmFfcHBvcnRfdG9wb2xvZ3kgdG9wb2xvZ3k7CS8qICBjdXJyZW50IHRvcG9sb2d5ICovCisJdTgJCQlteWFscGE7CS8qICBteSBBTFBBIGluIExPT1AgdG9wb2xvZ3kgKi8KKwl1OAkJCXJzdmRbM107CisJc3RydWN0IGJmYV9wcG9ydF9jZmdfcwljZmc7CS8qICBjdXJyZW50IHBvcnQgY29uZmlndXJhdGlvbiAqLworCXN0cnVjdCBiZmFfcW9zX2F0dHJfcyAgcW9zX2F0dHI7ICAgLyogUW9TIEF0dHJpYnV0ZXMgKi8KKwlzdHJ1Y3QgYmZhX3Fvc192Y19hdHRyX3MgcW9zX3ZjX2F0dHI7ICAvKiAgVkMgaW5mbyBmcm9tIEVMUCAqLworCXN0cnVjdCBiZmFfcmVxcV93YWl0X3MJcmVxcV93YWl0OworCQkJCQkvKiAgdG8gd2FpdCBmb3Igcm9vbSBpbiByZXFxICovCisJc3RydWN0IGJmYV9yZXFxX3dhaXRfcwlzdmNyZXFfd2FpdDsKKwkJCQkJLyogIHRvIHdhaXQgZm9yIHJvb20gaW4gcmVxcSAqLworCXN0cnVjdCBiZmFfcmVxcV93YWl0X3MJc3RhdHNfcmVxcV93YWl0OworCQkJCQkvKiAgdG8gd2FpdCBmb3Igcm9vbSBpbiByZXFxIChzdGF0cykgKi8KKwl2b2lkCQkJKmV2ZW50X2NiYXJnOworCXZvaWQJCQkoKmV2ZW50X2NiZm4pICh2b2lkICpjYmFyZywKKwkJCQkJCWJmYV9wcG9ydF9ldmVudF90IGV2ZW50KTsKKwl1bmlvbiB7CisJCXVuaW9uIGJmaV9wcG9ydF9pMmhfbXNnX3UgaTJobXNnOworCX0gZXZlbnRfYXJnOworCXZvaWQJCQkqYmZhZDsJLyogIEJGQSBkcml2ZXIgaGFuZGxlICovCisJc3RydWN0IGJmYV9jYl9xZV9zCQloY2JfcWU7CS8qICBCRkEgY2FsbGJhY2sgcXVldWUgZWxlbSAqLworCWVudW0gYmZhX3Bwb3J0X2xpbmtzdGF0ZQloY2JfZXZlbnQ7CisJCQkJCS8qICBsaW5rIGV2ZW50IGZvciBjYWxsYmFjayAqLworCXUzMgkJbXNndGFnOwkvKiAgZmltcndhcmUgbXNnIHRhZyBmb3IgcmVwbHkgKi8KKwl1OAkJCSpzdGF0c19rdmE7CisJdTY0CQlzdGF0c19wYTsKKwl1bmlvbiBiZmFfcHBvcnRfc3RhdHNfdSAqc3RhdHM7CS8qICBwcG9ydCBzdGF0cyAqLworCXUzMgkJbXlwaWQgOiAyNDsKKwl1MzIJCXJzdmRfYiA6IDg7CisJc3RydWN0IGJmYV90aW1lcl9zIAl0aW1lcjsJLyogIHRpbWVyICovCisJdW5pb24gYmZhX3Bwb3J0X3N0YXRzX3UgCSpzdGF0c19yZXQ7CisJCQkJCS8qICBkcml2ZXIgc3RhdHMgbG9jYXRpb24gKi8KKwliZmFfc3RhdHVzX3QJCXN0YXRzX3N0YXR1czsKKwkJCQkJLyogIHN0YXRzL3N0YXRzY2xyIHN0YXR1cyAqLworCWJmYV9ib29sZWFuX3QgICAJc3RhdHNfYnVzeTsKKwkJCQkJLyogIG91dHN0YW5kaW5nIHN0YXRzL3N0YXRzY2xyICovCisJYmZhX2Jvb2xlYW5fdCAgIAlzdGF0c19xZnVsbDsKKwliZmFfYm9vbGVhbl90ICAgCWRpYWdfYnVzeTsKKwkJCQkJLyogIGRpYWcgYnVzeSBzdGF0dXMgKi8KKwliZmFfYm9vbGVhbl90ICAgCWJlYWNvbjsKKwkJCQkJLyogIHBvcnQgYmVhY29uIHN0YXR1cyAqLworCWJmYV9ib29sZWFuX3QgICAJbGlua19lMmVfYmVhY29uOworCQkJCQkvKiAgbGluayBiZWFjb24gc3RhdHVzICovCisJYmZhX2NiX3Bwb3J0X3QJCXN0YXRzX2NiZm47CisJCQkJCS8qICBkcml2ZXIgY2FsbGJhY2sgZnVuY3Rpb24gKi8KKwl2b2lkCQkJKnN0YXRzX2NiYXJnOworCQkJCQkvKiAqITwgdXNlciBjYWxsYmFjayBhcmcgKi8KK307CisKKyNkZWZpbmUgQkZBX1BPUlRfTU9EKF9fYmZhKQkoJihfX2JmYSktPm1vZHVsZXMucHBvcnQpCisKKy8qCisgKiBwdWJsaWMgZnVuY3Rpb25zCisgKi8KK3ZvaWQJYmZhX3Bwb3J0X2lzcihzdHJ1Y3QgYmZhX3MgKmJmYSwgc3RydWN0IGJmaV9tc2dfcyAqbXNnKTsKKyNlbmRpZiAvKiBfX0JGQV9QT1JUX1BSSVZfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2JmYV9wcml2LmggYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9wcml2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDc0N2E2YgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX3ByaXYuaApAQCAtMCwwICsxLDExMyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9fQkZBX1BSSVZfSF9fCisjZGVmaW5lIF9fQkZBX1BSSVZfSF9fCisKKyNpbmNsdWRlICJiZmFfaW9jZmMuaCIKKyNpbmNsdWRlICJiZmFfaW50cl9wcml2LmgiCisjaW5jbHVkZSAiYmZhX3RyY21vZF9wcml2LmgiCisjaW5jbHVkZSAiYmZhX21vZHVsZXNfcHJpdi5oIgorI2luY2x1ZGUgImJmYV9md2ltZ19wcml2LmgiCisjaW5jbHVkZSA8Y3MvYmZhX2xvZy5oPgorI2luY2x1ZGUgPGJmYV90aW1lci5oPgorCisvKioKKyAqIE1hY3JvIHRvIGRlZmluZSBhIG5ldyBCRkEgbW9kdWxlCisgKi8KKyNkZWZpbmUgQkZBX01PRFVMRShfX21vZCkgCQkJCQkJXAorCXN0YXRpYyB2b2lkIGJmYV8gIyMgX19tb2QgIyMgX21lbWluZm8oCQkJCVwKKwkJCXN0cnVjdCBiZmFfaW9jZmNfY2ZnX3MgKmNmZywgdTMyICpuZG1fbGVuLAlcCisJCQl1MzIgKmRtX2xlbik7ICAgICAgXAorCXN0YXRpYyB2b2lkIGJmYV8gIyMgX19tb2QgIyMgX2F0dGFjaChzdHJ1Y3QgYmZhX3MgKmJmYSwJCVwKKwkJCXZvaWQgKmJmYWQsIHN0cnVjdCBiZmFfaW9jZmNfY2ZnX3MgKmNmZywgCVwKKwkJCXN0cnVjdCBiZmFfbWVtaW5mb19zICptZW1pbmZvLAkJCVwKKwkJCXN0cnVjdCBiZmFfcGNpZGV2X3MgKnBjaWRldik7ICAgICAgXAorCXN0YXRpYyB2b2lkIGJmYV8gIyMgX19tb2QgIyMgX2luaXRkb25lKHN0cnVjdCBiZmFfcyAqYmZhKTsgICAgICBcCisJc3RhdGljIHZvaWQgYmZhXyAjIyBfX21vZCAjIyBfZGV0YWNoKHN0cnVjdCBiZmFfcyAqYmZhKTsgICAgICBcCisJc3RhdGljIHZvaWQgYmZhXyAjIyBfX21vZCAjIyBfc3RhcnQoc3RydWN0IGJmYV9zICpiZmEpOyAgICAgIFwKKwlzdGF0aWMgdm9pZCBiZmFfICMjIF9fbW9kICMjIF9zdG9wKHN0cnVjdCBiZmFfcyAqYmZhKTsgICAgICBcCisJc3RhdGljIHZvaWQgYmZhXyAjIyBfX21vZCAjIyBfaW9jZGlzYWJsZShzdHJ1Y3QgYmZhX3MgKmJmYSk7ICAgICAgXAorCQkJCQkJCQkJXAorCWV4dGVybiBzdHJ1Y3QgYmZhX21vZHVsZV9zIGhhbF9tb2RfICMjIF9fbW9kOwkJCVwKKwlzdHJ1Y3QgYmZhX21vZHVsZV9zIGhhbF9tb2RfICMjIF9fbW9kID0gewkJCVwKKwkJYmZhXyAjIyBfX21vZCAjIyBfbWVtaW5mbywJCQkJXAorCQliZmFfICMjIF9fbW9kICMjIF9hdHRhY2gsCQkJCVwKKwkJYmZhXyAjIyBfX21vZCAjIyBfaW5pdGRvbmUsCQkJCVwKKwkJYmZhXyAjIyBfX21vZCAjIyBfZGV0YWNoLAkJCQlcCisJCWJmYV8gIyMgX19tb2QgIyMgX3N0YXJ0LAkJCQlcCisJCWJmYV8gIyMgX19tb2QgIyMgX3N0b3AsCQkJCQlcCisJCWJmYV8gIyMgX19tb2QgIyMgX2lvY2Rpc2FibGUsCQkJCVwKKwl9CisKKyNkZWZpbmUgQkZBX0NBQ0hFTElORV9TWgkoMjU2KQorCisvKioKKyAqIFN0cnVjdHVyZSB1c2VkIHRvIGludGVyYWN0IGJldHdlZW4gZGlmZmVyZW50IEJGQSBzdWIgbW9kdWxlcworICoKKyAqIEVhY2ggc3ViIG1vZHVsZSBuZWVkcyB0byBpbXBsZW1lbnQgb25seSB0aGUgZW50cnkgcG9pbnRzIHJlbGV2YW50IHRvIGl0IChhbmQKKyAqIGNhbiBsZWF2ZSBlbnRyeSBwb2ludHMgYXMgTlVMTCkKKyAqLworc3RydWN0IGJmYV9tb2R1bGVfcyB7CisJdm9pZCAoKm1lbWluZm8pIChzdHJ1Y3QgYmZhX2lvY2ZjX2NmZ19zICpjZmcsIHUzMiAqa21fbGVuLAorCQkJdTMyICpkbV9sZW4pOworCXZvaWQgKCphdHRhY2gpIChzdHJ1Y3QgYmZhX3MgKmJmYSwgdm9pZCAqYmZhZCwKKwkJCXN0cnVjdCBiZmFfaW9jZmNfY2ZnX3MgKmNmZywKKwkJCXN0cnVjdCBiZmFfbWVtaW5mb19zICptZW1pbmZvLAorCQkJc3RydWN0IGJmYV9wY2lkZXZfcyAqcGNpZGV2KTsKKwl2b2lkICgqaW5pdGRvbmUpIChzdHJ1Y3QgYmZhX3MgKmJmYSk7CisJdm9pZCAoKmRldGFjaCkgKHN0cnVjdCBiZmFfcyAqYmZhKTsKKwl2b2lkICgqc3RhcnQpIChzdHJ1Y3QgYmZhX3MgKmJmYSk7CisJdm9pZCAoKnN0b3ApIChzdHJ1Y3QgYmZhX3MgKmJmYSk7CisJdm9pZCAoKmlvY2Rpc2FibGUpIChzdHJ1Y3QgYmZhX3MgKmJmYSk7Cit9OworCitleHRlcm4gc3RydWN0IGJmYV9tb2R1bGVfcyAqaGFsX21vZHNbXTsKKworc3RydWN0IGJmYV9zIHsKKwl2b2lkCQkJKmJmYWQ7CQkvKiAgQkZBIGRyaXZlciBpbnN0YW5jZSAgICAqLworCXN0cnVjdCBiZmFfYWVuX3MJKmFlbjsJCS8qICBBRU4gbW9kdWxlCQkgICAgKi8KKwlzdHJ1Y3QgYmZhX3Bsb2dfcwkqcGxvZzsJCS8qICBwb3J0bG9nIGJ1ZmZlcgkgICAgKi8KKwlzdHJ1Y3QgYmZhX2xvZ19tb2RfcwkqbG9nbTsJCS8qICBkcml2ZXIgbG9nZ2luZyBtb2R1bGVuICovCisJc3RydWN0IGJmYV90cmNfbW9kX3MJKnRyY21vZDsJLyogIGRyaXZlciB0cmFjaW5nCSAgICAqLworCXN0cnVjdCBiZmFfaW9jX3MJaW9jOwkJLyogIElPQyBtb2R1bGUJCSAgICAqLworCXN0cnVjdCBiZmFfaW9jZmNfcwlpb2NmYzsJCS8qICBJT0NGQyBtb2R1bGUJICAgICovCisJc3RydWN0IGJmYV90aW1lcl9tb2Rfcwl0aW1lcl9tb2Q7CS8qICB0aW1lciBtb2R1bGUJICAgICovCisJc3RydWN0IGJmYV9tb2R1bGVzX3MJbW9kdWxlczsJLyogIEJGQSBtb2R1bGVzCSAgICAqLworCXN0cnVjdCBsaXN0X2hlYWQJY29tcF9xOwkJLyogIHBlbmRpbmcgY29tcGxldGlvbnMgICAgKi8KKwliZmFfYm9vbGVhbl90CQlybWVfcHJvY2VzczsJLyogIFJNRSBwcm9jZXNzaW5nIGVuYWJsZWQgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkCQlyZXFxX3dhaXRxW0JGSV9JT0NfTUFYX0NRU107CisJYmZhX2Jvb2xlYW5fdAkJZmNzOwkJLyogIEZDUyBpcyBhdHRhY2hlZCB0byBCRkEgKi8KKwlzdHJ1Y3QgYmZhX21zaXhfcwltc2l4OworfTsKKworZXh0ZXJuIGJmYV9pc3JfZnVuY190IGJmYV9pc3JzW0JGSV9NQ19NQVhdOworZXh0ZXJuIGJmYV9pb2NfbWJveF9tY2Z1bmNfdCAgYmZhX21ib3hfaXNyc1tdOworZXh0ZXJuIGJmYV9ib29sZWFuX3QgYmZhX2F1dG9fcmVjb3ZlcjsKK2V4dGVybiBzdHJ1Y3QgYmZhX21vZHVsZV9zIGhhbF9tb2RfZmxhc2g7CitleHRlcm4gc3RydWN0IGJmYV9tb2R1bGVfcyBoYWxfbW9kX2ZjZGlhZzsKK2V4dGVybiBzdHJ1Y3QgYmZhX21vZHVsZV9zIGhhbF9tb2Rfc2dwZzsKK2V4dGVybiBzdHJ1Y3QgYmZhX21vZHVsZV9zIGhhbF9tb2RfcHBvcnQ7CitleHRlcm4gc3RydWN0IGJmYV9tb2R1bGVfcyBoYWxfbW9kX2ZjeHA7CitleHRlcm4gc3RydWN0IGJmYV9tb2R1bGVfcyBoYWxfbW9kX2xwczsKK2V4dGVybiBzdHJ1Y3QgYmZhX21vZHVsZV9zIGhhbF9tb2RfdWY7CitleHRlcm4gc3RydWN0IGJmYV9tb2R1bGVfcyBoYWxfbW9kX3Jwb3J0OworZXh0ZXJuIHN0cnVjdCBiZmFfbW9kdWxlX3MgaGFsX21vZF9mY3BpbTsKK2V4dGVybiBzdHJ1Y3QgYmZhX21vZHVsZV9zIGhhbF9tb2RfcGJpbmQ7CisKKyNlbmRpZiAvKiBfX0JGQV9QUklWX0hfXyAqLworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2JmYV9ycG9ydC5jIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfcnBvcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNmRhNzdhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfcnBvcnQuYwpAQCAtMCwwICsxLDkxMSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8YmZhLmg+CisjaW5jbHVkZSA8YmZhX3N2Yy5oPgorI2luY2x1ZGUgPGNzL2JmYV9kZWJ1Zy5oPgorI2luY2x1ZGUgPGJmaS9iZmlfcnBvcnQuaD4KKyNpbmNsdWRlICJiZmFfaW50cl9wcml2LmgiCisKK0JGQV9UUkNfRklMRShIQUwsIFJQT1JUKTsKK0JGQV9NT0RVTEUocnBvcnQpOworCisjZGVmaW5lIGJmYV9ycG9ydF9vZmZsaW5lX2NiKF9fcnApIGRvIHsJCQkJXAorCWlmICgoX19ycCktPmJmYS0+ZmNzKQkJCQkJCVwKKwkJYmZhX2NiX3Jwb3J0X29mZmxpbmUoKF9fcnApLT5ycG9ydF9kcnYpOyAgICAgIFwKKwllbHNlIHsJCQkJCQkJCVwKKwkJYmZhX2NiX3F1ZXVlKChfX3JwKS0+YmZhLCAmKF9fcnApLT5oY2JfcWUsCQlcCisJCQkJX19iZmFfY2JfcnBvcnRfb2ZmbGluZSwgKF9fcnApKTsgICAgICBcCisJfQkJCQkJCQkJXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBiZmFfcnBvcnRfb25saW5lX2NiKF9fcnApIGRvIHsJCQkJXAorCWlmICgoX19ycCktPmJmYS0+ZmNzKQkJCQkJCVwKKwkJYmZhX2NiX3Jwb3J0X29ubGluZSgoX19ycCktPnJwb3J0X2Rydik7ICAgICAgXAorCWVsc2UgewkJCQkJCQkJXAorCQliZmFfY2JfcXVldWUoKF9fcnApLT5iZmEsICYoX19ycCktPmhjYl9xZSwJCVwKKwkJCQkgIF9fYmZhX2NiX3Jwb3J0X29ubGluZSwgKF9fcnApKTsgICAgICBcCisJCX0JCQkJCQkJXAorfSB3aGlsZSAoMCkKKworLyoKKyAqIGZvcndhcmQgZGVjbGFyYXRpb25zCisgKi8KK3N0YXRpYyBzdHJ1Y3QgYmZhX3Jwb3J0X3MgKmJmYV9ycG9ydF9hbGxvYyhzdHJ1Y3QgYmZhX3Jwb3J0X21vZF9zICpycF9tb2QpOworc3RhdGljIHZvaWQgYmZhX3Jwb3J0X2ZyZWUoc3RydWN0IGJmYV9ycG9ydF9zICpycG9ydCk7CitzdGF0aWMgYmZhX2Jvb2xlYW5fdCBiZmFfcnBvcnRfc2VuZF9md2NyZWF0ZShzdHJ1Y3QgYmZhX3Jwb3J0X3MgKnJwKTsKK3N0YXRpYyBiZmFfYm9vbGVhbl90IGJmYV9ycG9ydF9zZW5kX2Z3ZGVsZXRlKHN0cnVjdCBiZmFfcnBvcnRfcyAqcnApOworc3RhdGljIGJmYV9ib29sZWFuX3QgYmZhX3Jwb3J0X3NlbmRfZndzcGVlZChzdHJ1Y3QgYmZhX3Jwb3J0X3MgKnJwKTsKK3N0YXRpYyB2b2lkIF9fYmZhX2NiX3Jwb3J0X29ubGluZSh2b2lkICpjYmFyZywgYmZhX2Jvb2xlYW5fdCBjb21wbGV0ZSk7CitzdGF0aWMgdm9pZCBfX2JmYV9jYl9ycG9ydF9vZmZsaW5lKHZvaWQgKmNiYXJnLCBiZmFfYm9vbGVhbl90IGNvbXBsZXRlKTsKKworLyoqCisgKiAgYmZhX3Jwb3J0X3NtIEJGQSBycG9ydCBzdGF0ZSBtYWNoaW5lCisgKi8KKworCitlbnVtIGJmYV9ycG9ydF9ldmVudCB7CisJQkZBX1JQT1JUX1NNX0NSRUFURQk9IDEsCS8qICBycG9ydCBjcmVhdGUgZXZlbnQJCSovCisJQkZBX1JQT1JUX1NNX0RFTEVURQk9IDIsCS8qICBkZWxldGluZyBhbiBleGlzdGluZyBycG9ydCAqLworCUJGQV9SUE9SVF9TTV9PTkxJTkUJPSAzLAkvKiAgcnBvcnQgaXMgb25saW5lCQkqLworCUJGQV9SUE9SVF9TTV9PRkZMSU5FCT0gNCwJLyogIHJwb3J0IGlzIG9mZmxpbmUJCSovCisJQkZBX1JQT1JUX1NNX0ZXUlNQCT0gNSwJLyogIGZpcm13YXJlIHJlc3BvbnNlCQkqLworCUJGQV9SUE9SVF9TTV9IV0ZBSUwJPSA2LAkvKiAgSU9DIGgvdyBmYWlsdXJlCQkqLworCUJGQV9SUE9SVF9TTV9RT1NfU0NOCT0gNywJLyogIFFvUyBTQ04gZnJvbSBmaXJtd2FyZQkqLworCUJGQV9SUE9SVF9TTV9TRVRfU1BFRUQJPSA4LAkvKiAgU2V0IFJwb3J0IFNwZWVkIAkJKi8KKwlCRkFfUlBPUlRfU01fUVJFU1VNRQk9IDksCS8qICBzcGFjZSBpbiByZXF1ZXVlIHF1ZXVlCSovCit9OworCitzdGF0aWMgdm9pZAliZmFfcnBvcnRfc21fdW5pbml0KHN0cnVjdCBiZmFfcnBvcnRfcyAqcnAsCisJCQkJCWVudW0gYmZhX3Jwb3J0X2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkCWJmYV9ycG9ydF9zbV9jcmVhdGVkKHN0cnVjdCBiZmFfcnBvcnRfcyAqcnAsCisJCQkJCSBlbnVtIGJmYV9ycG9ydF9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZAliZmFfcnBvcnRfc21fZndjcmVhdGUoc3RydWN0IGJmYV9ycG9ydF9zICpycCwKKwkJCQkJICBlbnVtIGJmYV9ycG9ydF9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZAliZmFfcnBvcnRfc21fb25saW5lKHN0cnVjdCBiZmFfcnBvcnRfcyAqcnAsCisJCQkJCWVudW0gYmZhX3Jwb3J0X2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkCWJmYV9ycG9ydF9zbV9md2RlbGV0ZShzdHJ1Y3QgYmZhX3Jwb3J0X3MgKnJwLAorCQkJCQkgIGVudW0gYmZhX3Jwb3J0X2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkCWJmYV9ycG9ydF9zbV9vZmZsaW5lKHN0cnVjdCBiZmFfcnBvcnRfcyAqcnAsCisJCQkJCSBlbnVtIGJmYV9ycG9ydF9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZAliZmFfcnBvcnRfc21fZGVsZXRpbmcoc3RydWN0IGJmYV9ycG9ydF9zICpycCwKKwkJCQkJICBlbnVtIGJmYV9ycG9ydF9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZAliZmFfcnBvcnRfc21fb2ZmbGluZV9wZW5kaW5nKHN0cnVjdCBiZmFfcnBvcnRfcyAqcnAsCisJCQkJCSAgZW51bSBiZmFfcnBvcnRfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQJYmZhX3Jwb3J0X3NtX2RlbGV0ZV9wZW5kaW5nKHN0cnVjdCBiZmFfcnBvcnRfcyAqcnAsCisJCQkJCSAgZW51bSBiZmFfcnBvcnRfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQJYmZhX3Jwb3J0X3NtX2lvY2Rpc2FibGUoc3RydWN0IGJmYV9ycG9ydF9zICpycCwKKwkJCQkJICAgIGVudW0gYmZhX3Jwb3J0X2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkCWJmYV9ycG9ydF9zbV9md2NyZWF0ZV9xZnVsbChzdHJ1Y3QgYmZhX3Jwb3J0X3MgKnJwLAorCQkJCQkgIGVudW0gYmZhX3Jwb3J0X2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkCWJmYV9ycG9ydF9zbV9md2RlbGV0ZV9xZnVsbChzdHJ1Y3QgYmZhX3Jwb3J0X3MgKnJwLAorCQkJCQkgIGVudW0gYmZhX3Jwb3J0X2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkCWJmYV9ycG9ydF9zbV9kZWxldGluZ19xZnVsbChzdHJ1Y3QgYmZhX3Jwb3J0X3MgKnJwLAorCQkJCQkgIGVudW0gYmZhX3Jwb3J0X2V2ZW50IGV2ZW50KTsKKworLyoqCisgKiBCZWdpbm5pbmcgc3RhdGUsIG9ubHkgb25saW5lIGV2ZW50IGV4cGVjdGVkLgorICovCitzdGF0aWMgdm9pZAorYmZhX3Jwb3J0X3NtX3VuaW5pdChzdHJ1Y3QgYmZhX3Jwb3J0X3MgKnJwLCBlbnVtIGJmYV9ycG9ydF9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKHJwLT5iZmEsIHJwLT5ycG9ydF90YWcpOworCWJmYV90cmMocnAtPmJmYSwgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX1JQT1JUX1NNX0NSRUFURToKKwkJYmZhX3N0YXRzKHJwLCBzbV91bl9jcik7CisJCWJmYV9zbV9zZXRfc3RhdGUocnAsIGJmYV9ycG9ydF9zbV9jcmVhdGVkKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfc3RhdHMocnAsIHNtX3VuX3VuZXhwKTsKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfcnBvcnRfc21fY3JlYXRlZChzdHJ1Y3QgYmZhX3Jwb3J0X3MgKnJwLCBlbnVtIGJmYV9ycG9ydF9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKHJwLT5iZmEsIHJwLT5ycG9ydF90YWcpOworCWJmYV90cmMocnAtPmJmYSwgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX1JQT1JUX1NNX09OTElORToKKwkJYmZhX3N0YXRzKHJwLCBzbV9jcl9vbik7CisJCWlmIChiZmFfcnBvcnRfc2VuZF9md2NyZWF0ZShycCkpCisJCQliZmFfc21fc2V0X3N0YXRlKHJwLCBiZmFfcnBvcnRfc21fZndjcmVhdGUpOworCQllbHNlCisJCQliZmFfc21fc2V0X3N0YXRlKHJwLCBiZmFfcnBvcnRfc21fZndjcmVhdGVfcWZ1bGwpOworCQlicmVhazsKKworCWNhc2UgQkZBX1JQT1JUX1NNX0RFTEVURToKKwkJYmZhX3N0YXRzKHJwLCBzbV9jcl9kZWwpOworCQliZmFfc21fc2V0X3N0YXRlKHJwLCBiZmFfcnBvcnRfc21fdW5pbml0KTsKKwkJYmZhX3Jwb3J0X2ZyZWUocnApOworCQlicmVhazsKKworCWNhc2UgQkZBX1JQT1JUX1NNX0hXRkFJTDoKKwkJYmZhX3N0YXRzKHJwLCBzbV9jcl9od2YpOworCQliZmFfc21fc2V0X3N0YXRlKHJwLCBiZmFfcnBvcnRfc21faW9jZGlzYWJsZSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX3N0YXRzKHJwLCBzbV9jcl91bmV4cCk7CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqIFdhaXRpbmcgZm9yIHJwb3J0IGNyZWF0ZSByZXNwb25zZSBmcm9tIGZpcm13YXJlLgorICovCitzdGF0aWMgdm9pZAorYmZhX3Jwb3J0X3NtX2Z3Y3JlYXRlKHN0cnVjdCBiZmFfcnBvcnRfcyAqcnAsIGVudW0gYmZhX3Jwb3J0X2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMocnAtPmJmYSwgcnAtPnJwb3J0X3RhZyk7CisJYmZhX3RyYyhycC0+YmZhLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfUlBPUlRfU01fRldSU1A6CisJCWJmYV9zdGF0cyhycCwgc21fZndjX3JzcCk7CisJCWJmYV9zbV9zZXRfc3RhdGUocnAsIGJmYV9ycG9ydF9zbV9vbmxpbmUpOworCQliZmFfcnBvcnRfb25saW5lX2NiKHJwKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9SUE9SVF9TTV9ERUxFVEU6CisJCWJmYV9zdGF0cyhycCwgc21fZndjX2RlbCk7CisJCWJmYV9zbV9zZXRfc3RhdGUocnAsIGJmYV9ycG9ydF9zbV9kZWxldGVfcGVuZGluZyk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfUlBPUlRfU01fT0ZGTElORToKKwkJYmZhX3N0YXRzKHJwLCBzbV9md2Nfb2ZmKTsKKwkJYmZhX3NtX3NldF9zdGF0ZShycCwgYmZhX3Jwb3J0X3NtX29mZmxpbmVfcGVuZGluZyk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfUlBPUlRfU01fSFdGQUlMOgorCQliZmFfc3RhdHMocnAsIHNtX2Z3Y19od2YpOworCQliZmFfc21fc2V0X3N0YXRlKHJwLCBiZmFfcnBvcnRfc21faW9jZGlzYWJsZSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX3N0YXRzKHJwLCBzbV9md2NfdW5leHApOworCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworLyoqCisgKiBSZXF1ZXN0IHF1ZXVlIGlzIGZ1bGwsIGF3YWl0aW5nIHF1ZXVlIHJlc3VtZSB0byBzZW5kIGNyZWF0ZSByZXF1ZXN0LgorICovCitzdGF0aWMgdm9pZAorYmZhX3Jwb3J0X3NtX2Z3Y3JlYXRlX3FmdWxsKHN0cnVjdCBiZmFfcnBvcnRfcyAqcnAsIGVudW0gYmZhX3Jwb3J0X2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMocnAtPmJmYSwgcnAtPnJwb3J0X3RhZyk7CisJYmZhX3RyYyhycC0+YmZhLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfUlBPUlRfU01fUVJFU1VNRToKKwkJYmZhX3NtX3NldF9zdGF0ZShycCwgYmZhX3Jwb3J0X3NtX2Z3Y3JlYXRlKTsKKwkJYmZhX3Jwb3J0X3NlbmRfZndjcmVhdGUocnApOworCQlicmVhazsKKworCWNhc2UgQkZBX1JQT1JUX1NNX0RFTEVURToKKwkJYmZhX3N0YXRzKHJwLCBzbV9md2NfZGVsKTsKKwkJYmZhX3NtX3NldF9zdGF0ZShycCwgYmZhX3Jwb3J0X3NtX3VuaW5pdCk7CisJCWJmYV9yZXFxX3djYW5jZWwoJnJwLT5yZXFxX3dhaXQpOworCQliZmFfcnBvcnRfZnJlZShycCk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfUlBPUlRfU01fT0ZGTElORToKKwkJYmZhX3N0YXRzKHJwLCBzbV9md2Nfb2ZmKTsKKwkJYmZhX3NtX3NldF9zdGF0ZShycCwgYmZhX3Jwb3J0X3NtX29mZmxpbmUpOworCQliZmFfcmVxcV93Y2FuY2VsKCZycC0+cmVxcV93YWl0KTsKKwkJYmZhX3Jwb3J0X29mZmxpbmVfY2IocnApOworCQlicmVhazsKKworCWNhc2UgQkZBX1JQT1JUX1NNX0hXRkFJTDoKKwkJYmZhX3N0YXRzKHJwLCBzbV9md2NfaHdmKTsKKwkJYmZhX3NtX3NldF9zdGF0ZShycCwgYmZhX3Jwb3J0X3NtX2lvY2Rpc2FibGUpOworCQliZmFfcmVxcV93Y2FuY2VsKCZycC0+cmVxcV93YWl0KTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfc3RhdHMocnAsIHNtX2Z3Y191bmV4cCk7CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqIE9ubGluZSBzdGF0ZSAtIG5vcm1hbCBwYXJraW5nIHN0YXRlLgorICovCitzdGF0aWMgdm9pZAorYmZhX3Jwb3J0X3NtX29ubGluZShzdHJ1Y3QgYmZhX3Jwb3J0X3MgKnJwLCBlbnVtIGJmYV9ycG9ydF9ldmVudCBldmVudCkKK3sKKwlzdHJ1Y3QgYmZpX3Jwb3J0X3Fvc19zY25fcyAqcW9zX3NjbjsKKworCWJmYV90cmMocnAtPmJmYSwgcnAtPnJwb3J0X3RhZyk7CisJYmZhX3RyYyhycC0+YmZhLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfUlBPUlRfU01fT0ZGTElORToKKwkJYmZhX3N0YXRzKHJwLCBzbV9vbl9vZmYpOworCQlpZiAoYmZhX3Jwb3J0X3NlbmRfZndkZWxldGUocnApKQorCQkJYmZhX3NtX3NldF9zdGF0ZShycCwgYmZhX3Jwb3J0X3NtX2Z3ZGVsZXRlKTsKKwkJZWxzZQorCQkJYmZhX3NtX3NldF9zdGF0ZShycCwgYmZhX3Jwb3J0X3NtX2Z3ZGVsZXRlX3FmdWxsKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9SUE9SVF9TTV9ERUxFVEU6CisJCWJmYV9zdGF0cyhycCwgc21fb25fZGVsKTsKKwkJaWYgKGJmYV9ycG9ydF9zZW5kX2Z3ZGVsZXRlKHJwKSkKKwkJCWJmYV9zbV9zZXRfc3RhdGUocnAsIGJmYV9ycG9ydF9zbV9kZWxldGluZyk7CisJCWVsc2UKKwkJCWJmYV9zbV9zZXRfc3RhdGUocnAsIGJmYV9ycG9ydF9zbV9kZWxldGluZ19xZnVsbCk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfUlBPUlRfU01fSFdGQUlMOgorCQliZmFfc3RhdHMocnAsIHNtX29uX2h3Zik7CisJCWJmYV9zbV9zZXRfc3RhdGUocnAsIGJmYV9ycG9ydF9zbV9pb2NkaXNhYmxlKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9SUE9SVF9TTV9TRVRfU1BFRUQ6CisJCWJmYV9ycG9ydF9zZW5kX2Z3c3BlZWQocnApOworCQlicmVhazsKKworCWNhc2UgQkZBX1JQT1JUX1NNX1FPU19TQ046CisJCXFvc19zY24gPSAoc3RydWN0IGJmaV9ycG9ydF9xb3Nfc2NuX3MgKikgcnAtPmV2ZW50X2FyZy5md19tc2c7CisJCXJwLT5xb3NfYXR0ciA9IHFvc19zY24tPm5ld19xb3NfYXR0cjsKKwkJYmZhX3RyYyhycC0+YmZhLCBxb3Nfc2NuLT5vbGRfcW9zX2F0dHIucW9zX2Zsb3dfaWQpOworCQliZmFfdHJjKHJwLT5iZmEsIHFvc19zY24tPm5ld19xb3NfYXR0ci5xb3NfZmxvd19pZCk7CisJCWJmYV90cmMocnAtPmJmYSwgcW9zX3Njbi0+b2xkX3Fvc19hdHRyLnFvc19wcmlvcml0eSk7CisJCWJmYV90cmMocnAtPmJmYSwgcW9zX3Njbi0+bmV3X3Fvc19hdHRyLnFvc19wcmlvcml0eSk7CisKKwkJcW9zX3Njbi0+b2xkX3Fvc19hdHRyLnFvc19mbG93X2lkICA9CisJCQliZmFfb3NfbnRvaGwocW9zX3Njbi0+b2xkX3Fvc19hdHRyLnFvc19mbG93X2lkKTsKKwkJcW9zX3Njbi0+bmV3X3Fvc19hdHRyLnFvc19mbG93X2lkICA9CisJCQliZmFfb3NfbnRvaGwocW9zX3Njbi0+bmV3X3Fvc19hdHRyLnFvc19mbG93X2lkKTsKKwkJcW9zX3Njbi0+b2xkX3Fvc19hdHRyLnFvc19wcmlvcml0eSA9CisJCQliZmFfb3NfbnRvaGwocW9zX3Njbi0+b2xkX3Fvc19hdHRyLnFvc19wcmlvcml0eSk7CisJCXFvc19zY24tPm5ld19xb3NfYXR0ci5xb3NfcHJpb3JpdHkgPQorCQkJYmZhX29zX250b2hsKHFvc19zY24tPm5ld19xb3NfYXR0ci5xb3NfcHJpb3JpdHkpOworCisJCWlmIChxb3Nfc2NuLT5vbGRfcW9zX2F0dHIucW9zX2Zsb3dfaWQgIT0KKwkJCXFvc19zY24tPm5ld19xb3NfYXR0ci5xb3NfZmxvd19pZCkKKwkJCWJmYV9jYl9ycG9ydF9xb3Nfc2NuX2Zsb3dpZChycC0+cnBvcnRfZHJ2LAorCQkJCQkJICAgIHFvc19zY24tPm9sZF9xb3NfYXR0ciwKKwkJCQkJCSAgICBxb3Nfc2NuLT5uZXdfcW9zX2F0dHIpOworCQlpZiAocW9zX3Njbi0+b2xkX3Fvc19hdHRyLnFvc19wcmlvcml0eSAhPQorCQkJcW9zX3Njbi0+bmV3X3Fvc19hdHRyLnFvc19wcmlvcml0eSkKKwkJCWJmYV9jYl9ycG9ydF9xb3Nfc2NuX3ByaW8ocnAtPnJwb3J0X2RydiwKKwkJCQkJCSAgcW9zX3Njbi0+b2xkX3Fvc19hdHRyLAorCQkJCQkJICBxb3Nfc2NuLT5uZXdfcW9zX2F0dHIpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9zdGF0cyhycCwgc21fb25fdW5leHApOworCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworLyoqCisgKiBGaXJtd2FyZSBycG9ydCBpcyBiZWluZyBkZWxldGVkIC0gYXdhaXRpbmcgZi93IHJlc3BvbnNlLgorICovCitzdGF0aWMgdm9pZAorYmZhX3Jwb3J0X3NtX2Z3ZGVsZXRlKHN0cnVjdCBiZmFfcnBvcnRfcyAqcnAsIGVudW0gYmZhX3Jwb3J0X2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMocnAtPmJmYSwgcnAtPnJwb3J0X3RhZyk7CisJYmZhX3RyYyhycC0+YmZhLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfUlBPUlRfU01fRldSU1A6CisJCWJmYV9zdGF0cyhycCwgc21fZndkX3JzcCk7CisJCWJmYV9zbV9zZXRfc3RhdGUocnAsIGJmYV9ycG9ydF9zbV9vZmZsaW5lKTsKKwkJYmZhX3Jwb3J0X29mZmxpbmVfY2IocnApOworCQlicmVhazsKKworCWNhc2UgQkZBX1JQT1JUX1NNX0RFTEVURToKKwkJYmZhX3N0YXRzKHJwLCBzbV9md2RfZGVsKTsKKwkJYmZhX3NtX3NldF9zdGF0ZShycCwgYmZhX3Jwb3J0X3NtX2RlbGV0aW5nKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9SUE9SVF9TTV9IV0ZBSUw6CisJCWJmYV9zdGF0cyhycCwgc21fZndkX2h3Zik7CisJCWJmYV9zbV9zZXRfc3RhdGUocnAsIGJmYV9ycG9ydF9zbV9pb2NkaXNhYmxlKTsKKwkJYmZhX3Jwb3J0X29mZmxpbmVfY2IocnApOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9zdGF0cyhycCwgc21fZndkX3VuZXhwKTsKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfcnBvcnRfc21fZndkZWxldGVfcWZ1bGwoc3RydWN0IGJmYV9ycG9ydF9zICpycCwgZW51bSBiZmFfcnBvcnRfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhycC0+YmZhLCBycC0+cnBvcnRfdGFnKTsKKwliZmFfdHJjKHJwLT5iZmEsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9SUE9SVF9TTV9RUkVTVU1FOgorCQliZmFfc21fc2V0X3N0YXRlKHJwLCBiZmFfcnBvcnRfc21fZndkZWxldGUpOworCQliZmFfcnBvcnRfc2VuZF9md2RlbGV0ZShycCk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfUlBPUlRfU01fREVMRVRFOgorCQliZmFfc3RhdHMocnAsIHNtX2Z3ZF9kZWwpOworCQliZmFfc21fc2V0X3N0YXRlKHJwLCBiZmFfcnBvcnRfc21fZGVsZXRpbmdfcWZ1bGwpOworCQlicmVhazsKKworCWNhc2UgQkZBX1JQT1JUX1NNX0hXRkFJTDoKKwkJYmZhX3N0YXRzKHJwLCBzbV9md2RfaHdmKTsKKwkJYmZhX3NtX3NldF9zdGF0ZShycCwgYmZhX3Jwb3J0X3NtX2lvY2Rpc2FibGUpOworCQliZmFfcmVxcV93Y2FuY2VsKCZycC0+cmVxcV93YWl0KTsKKwkJYmZhX3Jwb3J0X29mZmxpbmVfY2IocnApOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9zdGF0cyhycCwgc21fZndkX3VuZXhwKTsKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKy8qKgorICogT2ZmbGluZSBzdGF0ZS4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9ycG9ydF9zbV9vZmZsaW5lKHN0cnVjdCBiZmFfcnBvcnRfcyAqcnAsIGVudW0gYmZhX3Jwb3J0X2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMocnAtPmJmYSwgcnAtPnJwb3J0X3RhZyk7CisJYmZhX3RyYyhycC0+YmZhLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfUlBPUlRfU01fREVMRVRFOgorCQliZmFfc3RhdHMocnAsIHNtX29mZl9kZWwpOworCQliZmFfc21fc2V0X3N0YXRlKHJwLCBiZmFfcnBvcnRfc21fdW5pbml0KTsKKwkJYmZhX3Jwb3J0X2ZyZWUocnApOworCQlicmVhazsKKworCWNhc2UgQkZBX1JQT1JUX1NNX09OTElORToKKwkJYmZhX3N0YXRzKHJwLCBzbV9vZmZfb24pOworCQlpZiAoYmZhX3Jwb3J0X3NlbmRfZndjcmVhdGUocnApKQorCQkJYmZhX3NtX3NldF9zdGF0ZShycCwgYmZhX3Jwb3J0X3NtX2Z3Y3JlYXRlKTsKKwkJZWxzZQorCQkJYmZhX3NtX3NldF9zdGF0ZShycCwgYmZhX3Jwb3J0X3NtX2Z3Y3JlYXRlX3FmdWxsKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9SUE9SVF9TTV9IV0ZBSUw6CisJCWJmYV9zdGF0cyhycCwgc21fb2ZmX2h3Zik7CisJCWJmYV9zbV9zZXRfc3RhdGUocnAsIGJmYV9ycG9ydF9zbV9pb2NkaXNhYmxlKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfc3RhdHMocnAsIHNtX29mZl91bmV4cCk7CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqIFJwb3J0IGlzIGRlbGV0ZWQsIHdhaXRpbmcgZm9yIGZpcm13YXJlIHJlc3BvbnNlIHRvIGRlbGV0ZS4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9ycG9ydF9zbV9kZWxldGluZyhzdHJ1Y3QgYmZhX3Jwb3J0X3MgKnJwLCBlbnVtIGJmYV9ycG9ydF9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKHJwLT5iZmEsIHJwLT5ycG9ydF90YWcpOworCWJmYV90cmMocnAtPmJmYSwgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX1JQT1JUX1NNX0ZXUlNQOgorCQliZmFfc3RhdHMocnAsIHNtX2RlbF9md3JzcCk7CisJCWJmYV9zbV9zZXRfc3RhdGUocnAsIGJmYV9ycG9ydF9zbV91bmluaXQpOworCQliZmFfcnBvcnRfZnJlZShycCk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfUlBPUlRfU01fSFdGQUlMOgorCQliZmFfc3RhdHMocnAsIHNtX2RlbF9od2YpOworCQliZmFfc21fc2V0X3N0YXRlKHJwLCBiZmFfcnBvcnRfc21fdW5pbml0KTsKKwkJYmZhX3Jwb3J0X2ZyZWUocnApOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX3Jwb3J0X3NtX2RlbGV0aW5nX3FmdWxsKHN0cnVjdCBiZmFfcnBvcnRfcyAqcnAsIGVudW0gYmZhX3Jwb3J0X2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMocnAtPmJmYSwgcnAtPnJwb3J0X3RhZyk7CisJYmZhX3RyYyhycC0+YmZhLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfUlBPUlRfU01fUVJFU1VNRToKKwkJYmZhX3N0YXRzKHJwLCBzbV9kZWxfZndyc3ApOworCQliZmFfc21fc2V0X3N0YXRlKHJwLCBiZmFfcnBvcnRfc21fZGVsZXRpbmcpOworCQliZmFfcnBvcnRfc2VuZF9md2RlbGV0ZShycCk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfUlBPUlRfU01fSFdGQUlMOgorCQliZmFfc3RhdHMocnAsIHNtX2RlbF9od2YpOworCQliZmFfc21fc2V0X3N0YXRlKHJwLCBiZmFfcnBvcnRfc21fdW5pbml0KTsKKwkJYmZhX3JlcXFfd2NhbmNlbCgmcnAtPnJlcXFfd2FpdCk7CisJCWJmYV9ycG9ydF9mcmVlKHJwKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworLyoqCisgKiBXYWl0aW5nIGZvciBycG9ydCBjcmVhdGUgcmVzcG9uc2UgZnJvbSBmaXJtd2FyZS4gQSBkZWxldGUgaXMgcGVuZGluZy4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9ycG9ydF9zbV9kZWxldGVfcGVuZGluZyhzdHJ1Y3QgYmZhX3Jwb3J0X3MgKnJwLAorCQkJCWVudW0gYmZhX3Jwb3J0X2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMocnAtPmJmYSwgcnAtPnJwb3J0X3RhZyk7CisJYmZhX3RyYyhycC0+YmZhLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfUlBPUlRfU01fRldSU1A6CisJCWJmYV9zdGF0cyhycCwgc21fZGVscF9md3JzcCk7CisJCWlmIChiZmFfcnBvcnRfc2VuZF9md2RlbGV0ZShycCkpCisJCQliZmFfc21fc2V0X3N0YXRlKHJwLCBiZmFfcnBvcnRfc21fZGVsZXRpbmcpOworCQllbHNlCisJCQliZmFfc21fc2V0X3N0YXRlKHJwLCBiZmFfcnBvcnRfc21fZGVsZXRpbmdfcWZ1bGwpOworCQlicmVhazsKKworCWNhc2UgQkZBX1JQT1JUX1NNX0hXRkFJTDoKKwkJYmZhX3N0YXRzKHJwLCBzbV9kZWxwX2h3Zik7CisJCWJmYV9zbV9zZXRfc3RhdGUocnAsIGJmYV9ycG9ydF9zbV91bmluaXQpOworCQliZmFfcnBvcnRfZnJlZShycCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX3N0YXRzKHJwLCBzbV9kZWxwX3VuZXhwKTsKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKy8qKgorICogV2FpdGluZyBmb3IgcnBvcnQgY3JlYXRlIHJlc3BvbnNlIGZyb20gZmlybXdhcmUuIFJwb3J0IG9mZmxpbmUgaXMgcGVuZGluZy4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9ycG9ydF9zbV9vZmZsaW5lX3BlbmRpbmcoc3RydWN0IGJmYV9ycG9ydF9zICpycCwKKwkJCQkgZW51bSBiZmFfcnBvcnRfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhycC0+YmZhLCBycC0+cnBvcnRfdGFnKTsKKwliZmFfdHJjKHJwLT5iZmEsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9SUE9SVF9TTV9GV1JTUDoKKwkJYmZhX3N0YXRzKHJwLCBzbV9vZmZwX2Z3cnNwKTsKKwkJaWYgKGJmYV9ycG9ydF9zZW5kX2Z3ZGVsZXRlKHJwKSkKKwkJCWJmYV9zbV9zZXRfc3RhdGUocnAsIGJmYV9ycG9ydF9zbV9md2RlbGV0ZSk7CisJCWVsc2UKKwkJCWJmYV9zbV9zZXRfc3RhdGUocnAsIGJmYV9ycG9ydF9zbV9md2RlbGV0ZV9xZnVsbCk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfUlBPUlRfU01fREVMRVRFOgorCQliZmFfc3RhdHMocnAsIHNtX29mZnBfZGVsKTsKKwkJYmZhX3NtX3NldF9zdGF0ZShycCwgYmZhX3Jwb3J0X3NtX2RlbGV0ZV9wZW5kaW5nKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9SUE9SVF9TTV9IV0ZBSUw6CisJCWJmYV9zdGF0cyhycCwgc21fb2ZmcF9od2YpOworCQliZmFfc21fc2V0X3N0YXRlKHJwLCBiZmFfcnBvcnRfc21faW9jZGlzYWJsZSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX3N0YXRzKHJwLCBzbV9vZmZwX3VuZXhwKTsKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKy8qKgorICogSU9DIGgvdyBmYWlsZWQuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfcnBvcnRfc21faW9jZGlzYWJsZShzdHJ1Y3QgYmZhX3Jwb3J0X3MgKnJwLCBlbnVtIGJmYV9ycG9ydF9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKHJwLT5iZmEsIHJwLT5ycG9ydF90YWcpOworCWJmYV90cmMocnAtPmJmYSwgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX1JQT1JUX1NNX09GRkxJTkU6CisJCWJmYV9zdGF0cyhycCwgc21faW9jZF9vZmYpOworCQliZmFfcnBvcnRfb2ZmbGluZV9jYihycCk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfUlBPUlRfU01fREVMRVRFOgorCQliZmFfc3RhdHMocnAsIHNtX2lvY2RfZGVsKTsKKwkJYmZhX3NtX3NldF9zdGF0ZShycCwgYmZhX3Jwb3J0X3NtX3VuaW5pdCk7CisJCWJmYV9ycG9ydF9mcmVlKHJwKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9SUE9SVF9TTV9PTkxJTkU6CisJCWJmYV9zdGF0cyhycCwgc21faW9jZF9vbik7CisJCWlmIChiZmFfcnBvcnRfc2VuZF9md2NyZWF0ZShycCkpCisJCQliZmFfc21fc2V0X3N0YXRlKHJwLCBiZmFfcnBvcnRfc21fZndjcmVhdGUpOworCQllbHNlCisJCQliZmFfc21fc2V0X3N0YXRlKHJwLCBiZmFfcnBvcnRfc21fZndjcmVhdGVfcWZ1bGwpOworCQlicmVhazsKKworCWNhc2UgQkZBX1JQT1JUX1NNX0hXRkFJTDoKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfc3RhdHMocnAsIHNtX2lvY2RfdW5leHApOworCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworCisKKy8qKgorICogIGJmYV9ycG9ydF9wcml2YXRlIEJGQSBycG9ydCBwcml2YXRlIGZ1bmN0aW9ucworICovCisKK3N0YXRpYyB2b2lkCitfX2JmYV9jYl9ycG9ydF9vbmxpbmUodm9pZCAqY2JhcmcsIGJmYV9ib29sZWFuX3QgY29tcGxldGUpCit7CisJc3RydWN0IGJmYV9ycG9ydF9zICpycCA9IGNiYXJnOworCisJaWYgKGNvbXBsZXRlKQorCQliZmFfY2JfcnBvcnRfb25saW5lKHJwLT5ycG9ydF9kcnYpOworfQorCitzdGF0aWMgdm9pZAorX19iZmFfY2JfcnBvcnRfb2ZmbGluZSh2b2lkICpjYmFyZywgYmZhX2Jvb2xlYW5fdCBjb21wbGV0ZSkKK3sKKwlzdHJ1Y3QgYmZhX3Jwb3J0X3MgKnJwID0gY2Jhcmc7CisKKwlpZiAoY29tcGxldGUpCisJCWJmYV9jYl9ycG9ydF9vZmZsaW5lKHJwLT5ycG9ydF9kcnYpOworfQorCitzdGF0aWMgdm9pZAorYmZhX3Jwb3J0X3FyZXN1bWUodm9pZCAqY2JhcmcpCit7CisJc3RydWN0IGJmYV9ycG9ydF9zCSpycCA9IGNiYXJnOworCisJYmZhX3NtX3NlbmRfZXZlbnQocnAsIEJGQV9SUE9SVF9TTV9RUkVTVU1FKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9ycG9ydF9tZW1pbmZvKHN0cnVjdCBiZmFfaW9jZmNfY2ZnX3MgKmNmZywgdTMyICprbV9sZW4sCisJCXUzMiAqZG1fbGVuKQoreworCWlmIChjZmctPmZ3Y2ZnLm51bV9ycG9ydHMgPCBCRkFfUlBPUlRfTUlOKQorCQljZmctPmZ3Y2ZnLm51bV9ycG9ydHMgPSBCRkFfUlBPUlRfTUlOOworCisJKmttX2xlbiArPSBjZmctPmZ3Y2ZnLm51bV9ycG9ydHMgKiBzaXplb2Yoc3RydWN0IGJmYV9ycG9ydF9zKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9ycG9ydF9hdHRhY2goc3RydWN0IGJmYV9zICpiZmEsIHZvaWQgKmJmYWQsIHN0cnVjdCBiZmFfaW9jZmNfY2ZnX3MgKmNmZywKKwkJICAgICBzdHJ1Y3QgYmZhX21lbWluZm9fcyAqbWVtaW5mbywgc3RydWN0IGJmYV9wY2lkZXZfcyAqcGNpZGV2KQoreworCXN0cnVjdCBiZmFfcnBvcnRfbW9kX3MgKm1vZCA9IEJGQV9SUE9SVF9NT0QoYmZhKTsKKwlzdHJ1Y3QgYmZhX3Jwb3J0X3MgKnJwOworCXUxNiAgICAgICAgaTsKKworCUlOSVRfTElTVF9IRUFEKCZtb2QtPnJwX2ZyZWVfcSk7CisJSU5JVF9MSVNUX0hFQUQoJm1vZC0+cnBfYWN0aXZlX3EpOworCisJcnAgPSAoc3RydWN0IGJmYV9ycG9ydF9zICopIGJmYV9tZW1pbmZvX2t2YShtZW1pbmZvKTsKKwltb2QtPnJwc19saXN0ID0gcnA7CisJbW9kLT5udW1fcnBvcnRzID0gY2ZnLT5md2NmZy5udW1fcnBvcnRzOworCisJYmZhX2Fzc2VydChtb2QtPm51bV9ycG9ydHMKKwkJICAgJiYgIShtb2QtPm51bV9ycG9ydHMgJiAobW9kLT5udW1fcnBvcnRzIC0gMSkpKTsKKworCWZvciAoaSA9IDA7IGkgPCBtb2QtPm51bV9ycG9ydHM7IGkrKywgcnArKykgeworCQliZmFfb3NfbWVtc2V0KHJwLCAwLCBzaXplb2Yoc3RydWN0IGJmYV9ycG9ydF9zKSk7CisJCXJwLT5iZmEgPSBiZmE7CisJCXJwLT5ycG9ydF90YWcgPSBpOworCQliZmFfc21fc2V0X3N0YXRlKHJwLCBiZmFfcnBvcnRfc21fdW5pbml0KTsKKworCQkvKioKKwkJICogIC0gaXMgdW51c2VkCisJCSAqLworCQlpZiAoaSkKKwkJCWxpc3RfYWRkX3RhaWwoJnJwLT5xZSwgJm1vZC0+cnBfZnJlZV9xKTsKKworCQliZmFfcmVxcV93aW5pdCgmcnAtPnJlcXFfd2FpdCwgYmZhX3Jwb3J0X3FyZXN1bWUsIHJwKTsKKwl9CisKKwkvKioKKwkgKiBjb25zdW1lIG1lbW9yeQorCSAqLworCWJmYV9tZW1pbmZvX2t2YShtZW1pbmZvKSA9ICh1OCAqKSBycDsKK30KKworc3RhdGljIHZvaWQKK2JmYV9ycG9ydF9pbml0ZG9uZShzdHJ1Y3QgYmZhX3MgKmJmYSkKK3sKK30KKworc3RhdGljIHZvaWQKK2JmYV9ycG9ydF9kZXRhY2goc3RydWN0IGJmYV9zICpiZmEpCit7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfcnBvcnRfc3RhcnQoc3RydWN0IGJmYV9zICpiZmEpCit7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfcnBvcnRfc3RvcChzdHJ1Y3QgYmZhX3MgKmJmYSkKK3sKK30KKworc3RhdGljIHZvaWQKK2JmYV9ycG9ydF9pb2NkaXNhYmxlKHN0cnVjdCBiZmFfcyAqYmZhKQoreworCXN0cnVjdCBiZmFfcnBvcnRfbW9kX3MgKm1vZCA9IEJGQV9SUE9SVF9NT0QoYmZhKTsKKwlzdHJ1Y3QgYmZhX3Jwb3J0X3MgKnJwb3J0OworCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgICpxZSwgKnFlbjsKKworCWxpc3RfZm9yX2VhY2hfc2FmZShxZSwgcWVuLCAmbW9kLT5ycF9hY3RpdmVfcSkgeworCQlycG9ydCA9IChzdHJ1Y3QgYmZhX3Jwb3J0X3MgKikgcWU7CisJCWJmYV9zbV9zZW5kX2V2ZW50KHJwb3J0LCBCRkFfUlBPUlRfU01fSFdGQUlMKTsKKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYmZhX3Jwb3J0X3MgKgorYmZhX3Jwb3J0X2FsbG9jKHN0cnVjdCBiZmFfcnBvcnRfbW9kX3MgKm1vZCkKK3sKKwlzdHJ1Y3QgYmZhX3Jwb3J0X3MgKnJwb3J0OworCisJYmZhX3FfZGVxKCZtb2QtPnJwX2ZyZWVfcSwgJnJwb3J0KTsKKwlpZiAocnBvcnQpCisJCWxpc3RfYWRkX3RhaWwoJnJwb3J0LT5xZSwgJm1vZC0+cnBfYWN0aXZlX3EpOworCisJcmV0dXJuIChycG9ydCk7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfcnBvcnRfZnJlZShzdHJ1Y3QgYmZhX3Jwb3J0X3MgKnJwb3J0KQoreworCXN0cnVjdCBiZmFfcnBvcnRfbW9kX3MgKm1vZCA9IEJGQV9SUE9SVF9NT0QocnBvcnQtPmJmYSk7CisKKwliZmFfYXNzZXJ0KGJmYV9xX2lzX29uX3EoJm1vZC0+cnBfYWN0aXZlX3EsIHJwb3J0KSk7CisJbGlzdF9kZWwoJnJwb3J0LT5xZSk7CisJbGlzdF9hZGRfdGFpbCgmcnBvcnQtPnFlLCAmbW9kLT5ycF9mcmVlX3EpOworfQorCitzdGF0aWMgYmZhX2Jvb2xlYW5fdAorYmZhX3Jwb3J0X3NlbmRfZndjcmVhdGUoc3RydWN0IGJmYV9ycG9ydF9zICpycCkKK3sKKwlzdHJ1Y3QgYmZpX3Jwb3J0X2NyZWF0ZV9yZXFfcyAqbTsKKworCS8qKgorCSAqIGNoZWNrIGZvciByb29tIGluIHF1ZXVlIHRvIHNlbmQgcmVxdWVzdCBub3cKKwkgKi8KKwltID0gYmZhX3JlcXFfbmV4dChycC0+YmZhLCBCRkFfUkVRUV9SUE9SVCk7CisJaWYgKCFtKSB7CisJCWJmYV9yZXFxX3dhaXQocnAtPmJmYSwgQkZBX1JFUVFfUlBPUlQsICZycC0+cmVxcV93YWl0KTsKKwkJcmV0dXJuIEJGQV9GQUxTRTsKKwl9CisKKwliZmlfaDJpX3NldChtLT5taCwgQkZJX01DX1JQT1JULCBCRklfUlBPUlRfSDJJX0NSRUFURV9SRVEsCisJCQliZmFfbHB1aWQocnAtPmJmYSkpOworCW0tPmJmYV9oYW5kbGUgPSBycC0+cnBvcnRfdGFnOworCW0tPm1heF9mcm1zeiA9IGJmYV9vc19odG9ucyhycC0+cnBvcnRfaW5mby5tYXhfZnJtc3opOworCW0tPnBpZCA9IHJwLT5ycG9ydF9pbmZvLnBpZDsKKwltLT5scF90YWcgPSBycC0+cnBvcnRfaW5mby5scF90YWc7CisJbS0+bG9jYWxfcGlkID0gcnAtPnJwb3J0X2luZm8ubG9jYWxfcGlkOworCW0tPmZjX2NsYXNzID0gcnAtPnJwb3J0X2luZm8uZmNfY2xhc3M7CisJbS0+dmZfZW4gPSBycC0+cnBvcnRfaW5mby52Zl9lbjsKKwltLT52Zl9pZCA9IHJwLT5ycG9ydF9pbmZvLnZmX2lkOworCW0tPmNpc2MgPSBycC0+cnBvcnRfaW5mby5jaXNjOworCisJLyoqCisJICogcXVldWUgSS9PIG1lc3NhZ2UgdG8gZmlybXdhcmUKKwkgKi8KKwliZmFfcmVxcV9wcm9kdWNlKHJwLT5iZmEsIEJGQV9SRVFRX1JQT1JUKTsKKwlyZXR1cm4gQkZBX1RSVUU7Cit9CisKK3N0YXRpYyBiZmFfYm9vbGVhbl90CitiZmFfcnBvcnRfc2VuZF9md2RlbGV0ZShzdHJ1Y3QgYmZhX3Jwb3J0X3MgKnJwKQoreworCXN0cnVjdCBiZmlfcnBvcnRfZGVsZXRlX3JlcV9zICptOworCisJLyoqCisJICogY2hlY2sgZm9yIHJvb20gaW4gcXVldWUgdG8gc2VuZCByZXF1ZXN0IG5vdworCSAqLworCW0gPSBiZmFfcmVxcV9uZXh0KHJwLT5iZmEsIEJGQV9SRVFRX1JQT1JUKTsKKwlpZiAoIW0pIHsKKwkJYmZhX3JlcXFfd2FpdChycC0+YmZhLCBCRkFfUkVRUV9SUE9SVCwgJnJwLT5yZXFxX3dhaXQpOworCQlyZXR1cm4gQkZBX0ZBTFNFOworCX0KKworCWJmaV9oMmlfc2V0KG0tPm1oLCBCRklfTUNfUlBPUlQsIEJGSV9SUE9SVF9IMklfREVMRVRFX1JFUSwKKwkJCWJmYV9scHVpZChycC0+YmZhKSk7CisJbS0+ZndfaGFuZGxlID0gcnAtPmZ3X2hhbmRsZTsKKworCS8qKgorCSAqIHF1ZXVlIEkvTyBtZXNzYWdlIHRvIGZpcm13YXJlCisJICovCisJYmZhX3JlcXFfcHJvZHVjZShycC0+YmZhLCBCRkFfUkVRUV9SUE9SVCk7CisJcmV0dXJuIEJGQV9UUlVFOworfQorCitzdGF0aWMgYmZhX2Jvb2xlYW5fdAorYmZhX3Jwb3J0X3NlbmRfZndzcGVlZChzdHJ1Y3QgYmZhX3Jwb3J0X3MgKnJwKQoreworCXN0cnVjdCBiZmFfcnBvcnRfc3BlZWRfcmVxX3MgKm07CisKKwkvKioKKwkgKiBjaGVjayBmb3Igcm9vbSBpbiBxdWV1ZSB0byBzZW5kIHJlcXVlc3Qgbm93CisJICovCisJbSA9IGJmYV9yZXFxX25leHQocnAtPmJmYSwgQkZBX1JFUVFfUlBPUlQpOworCWlmICghbSkgeworCQliZmFfdHJjKHJwLT5iZmEsIHJwLT5ycG9ydF9pbmZvLnNwZWVkKTsKKwkJcmV0dXJuIEJGQV9GQUxTRTsKKwl9CisKKwliZmlfaDJpX3NldChtLT5taCwgQkZJX01DX1JQT1JULCBCRklfUlBPUlRfSDJJX1NFVF9TUEVFRF9SRVEsCisJCQliZmFfbHB1aWQocnAtPmJmYSkpOworCW0tPmZ3X2hhbmRsZSA9IHJwLT5md19oYW5kbGU7CisJbS0+c3BlZWQgPSAodTgpcnAtPnJwb3J0X2luZm8uc3BlZWQ7CisKKwkvKioKKwkgKiBxdWV1ZSBJL08gbWVzc2FnZSB0byBmaXJtd2FyZQorCSAqLworCWJmYV9yZXFxX3Byb2R1Y2UocnAtPmJmYSwgQkZBX1JFUVFfUlBPUlQpOworCXJldHVybiBCRkFfVFJVRTsKK30KKworCisKKy8qKgorICogIGJmYV9ycG9ydF9wdWJsaWMKKyAqLworCisvKioKKyAqIAkJUnBvcnQgaW50ZXJydXB0IHByb2Nlc3NpbmcuCisgKi8KK3ZvaWQKK2JmYV9ycG9ydF9pc3Ioc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBiZmlfbXNnX3MgKm0pCit7CisJdW5pb24gYmZpX3Jwb3J0X2kyaF9tc2dfdSBtc2c7CisJc3RydWN0IGJmYV9ycG9ydF9zICpycDsKKworCWJmYV90cmMoYmZhLCBtLT5taGRyLm1zZ19pZCk7CisKKwltc2cubXNnID0gbTsKKworCXN3aXRjaCAobS0+bWhkci5tc2dfaWQpIHsKKwljYXNlIEJGSV9SUE9SVF9JMkhfQ1JFQVRFX1JTUDoKKwkJcnAgPSBCRkFfUlBPUlRfRlJPTV9UQUcoYmZhLCBtc2cuY3JlYXRlX3JzcC0+YmZhX2hhbmRsZSk7CisJCXJwLT5md19oYW5kbGUgPSBtc2cuY3JlYXRlX3JzcC0+ZndfaGFuZGxlOworCQlycC0+cW9zX2F0dHIgPSBtc2cuY3JlYXRlX3JzcC0+cW9zX2F0dHI7CisJCWJmYV9hc3NlcnQobXNnLmNyZWF0ZV9yc3AtPnN0YXR1cyA9PSBCRkFfU1RBVFVTX09LKTsKKwkJYmZhX3NtX3NlbmRfZXZlbnQocnAsIEJGQV9SUE9SVF9TTV9GV1JTUCk7CisJCWJyZWFrOworCisJY2FzZSBCRklfUlBPUlRfSTJIX0RFTEVURV9SU1A6CisJCXJwID0gQkZBX1JQT1JUX0ZST01fVEFHKGJmYSwgbXNnLmRlbGV0ZV9yc3AtPmJmYV9oYW5kbGUpOworCQliZmFfYXNzZXJ0KG1zZy5kZWxldGVfcnNwLT5zdGF0dXMgPT0gQkZBX1NUQVRVU19PSyk7CisJCWJmYV9zbV9zZW5kX2V2ZW50KHJwLCBCRkFfUlBPUlRfU01fRldSU1ApOworCQlicmVhazsKKworCWNhc2UgQkZJX1JQT1JUX0kySF9RT1NfU0NOOgorCQlycCA9IEJGQV9SUE9SVF9GUk9NX1RBRyhiZmEsIG1zZy5xb3Nfc2NuX2V2dC0+YmZhX2hhbmRsZSk7CisJCXJwLT5ldmVudF9hcmcuZndfbXNnID0gbXNnLnFvc19zY25fZXZ0OworCQliZmFfc21fc2VuZF9ldmVudChycCwgQkZBX1JQT1JUX1NNX1FPU19TQ04pOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV90cmMoYmZhLCBtLT5taGRyLm1zZ19pZCk7CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisKKworLyoqCisgKiAgYmZhX3Jwb3J0X2FwaQorICovCisKK3N0cnVjdCBiZmFfcnBvcnRfcyAqCitiZmFfcnBvcnRfY3JlYXRlKHN0cnVjdCBiZmFfcyAqYmZhLCB2b2lkICpycG9ydF9kcnYpCit7CisJc3RydWN0IGJmYV9ycG9ydF9zICpycDsKKworCXJwID0gYmZhX3Jwb3J0X2FsbG9jKEJGQV9SUE9SVF9NT0QoYmZhKSk7CisKKwlpZiAocnAgPT0gTlVMTCkKKwkJcmV0dXJuIChOVUxMKTsKKworCXJwLT5iZmEgPSBiZmE7CisJcnAtPnJwb3J0X2RydiA9IHJwb3J0X2RydjsKKwliZmFfcnBvcnRfY2xlYXJfc3RhdHMocnApOworCisJYmZhX2Fzc2VydChiZmFfc21fY21wX3N0YXRlKHJwLCBiZmFfcnBvcnRfc21fdW5pbml0KSk7CisJYmZhX3NtX3NlbmRfZXZlbnQocnAsIEJGQV9SUE9SVF9TTV9DUkVBVEUpOworCisJcmV0dXJuIChycCk7Cit9CisKK3ZvaWQKK2JmYV9ycG9ydF9kZWxldGUoc3RydWN0IGJmYV9ycG9ydF9zICpycG9ydCkKK3sKKwliZmFfc21fc2VuZF9ldmVudChycG9ydCwgQkZBX1JQT1JUX1NNX0RFTEVURSk7Cit9CisKK3ZvaWQKK2JmYV9ycG9ydF9vbmxpbmUoc3RydWN0IGJmYV9ycG9ydF9zICpycG9ydCwgc3RydWN0IGJmYV9ycG9ydF9pbmZvX3MgKnJwb3J0X2luZm8pCit7CisJYmZhX2Fzc2VydChycG9ydF9pbmZvLT5tYXhfZnJtc3ogIT0gMCk7CisKKwkvKioKKwkgKiBTb21lIEpCT0RzIGFyZSBzZWVuIHRvIGJlIG5vdCBzZXR0aW5nIFBEVSBzaXplIGNvcnJlY3RseSBpbiBQTE9HSQorCSAqIHJlc3BvbnNlcy4gRGVmYXVsdCB0byBtaW5pbXVtIHNpemUuCisJICovCisJaWYgKHJwb3J0X2luZm8tPm1heF9mcm1zeiA9PSAwKSB7CisJCWJmYV90cmMocnBvcnQtPmJmYSwgcnBvcnQtPnJwb3J0X3RhZyk7CisJCXJwb3J0X2luZm8tPm1heF9mcm1zeiA9IEZDX01JTl9QRFVTWjsKKwl9CisKKwliZmFfb3NfYXNzaWduKHJwb3J0LT5ycG9ydF9pbmZvLCAqcnBvcnRfaW5mbyk7CisJYmZhX3NtX3NlbmRfZXZlbnQocnBvcnQsIEJGQV9SUE9SVF9TTV9PTkxJTkUpOworfQorCit2b2lkCitiZmFfcnBvcnRfb2ZmbGluZShzdHJ1Y3QgYmZhX3Jwb3J0X3MgKnJwb3J0KQoreworCWJmYV9zbV9zZW5kX2V2ZW50KHJwb3J0LCBCRkFfUlBPUlRfU01fT0ZGTElORSk7Cit9CisKK3ZvaWQKK2JmYV9ycG9ydF9zcGVlZChzdHJ1Y3QgYmZhX3Jwb3J0X3MgKnJwb3J0LCBlbnVtIGJmYV9wcG9ydF9zcGVlZCBzcGVlZCkKK3sKKwliZmFfYXNzZXJ0KHNwZWVkICE9IDApOworCWJmYV9hc3NlcnQoc3BlZWQgIT0gQkZBX1BQT1JUX1NQRUVEX0FVVE8pOworCisJcnBvcnQtPnJwb3J0X2luZm8uc3BlZWQgPSBzcGVlZDsKKwliZmFfc21fc2VuZF9ldmVudChycG9ydCwgQkZBX1JQT1JUX1NNX1NFVF9TUEVFRCk7Cit9CisKK3ZvaWQKK2JmYV9ycG9ydF9nZXRfc3RhdHMoc3RydWN0IGJmYV9ycG9ydF9zICpycG9ydCwKKwlzdHJ1Y3QgYmZhX3Jwb3J0X2hhbF9zdGF0c19zICpzdGF0cykKK3sKKwkqc3RhdHMgPSBycG9ydC0+c3RhdHM7Cit9CisKK3ZvaWQKK2JmYV9ycG9ydF9nZXRfcW9zX2F0dHIoc3RydWN0IGJmYV9ycG9ydF9zICpycG9ydCwKKwkJCQkJc3RydWN0IGJmYV9ycG9ydF9xb3NfYXR0cl9zICpxb3NfYXR0cikKK3sKKwlxb3NfYXR0ci0+cW9zX3ByaW9yaXR5ICA9IGJmYV9vc19udG9obChycG9ydC0+cW9zX2F0dHIucW9zX3ByaW9yaXR5KTsKKwlxb3NfYXR0ci0+cW9zX2Zsb3dfaWQgID0gYmZhX29zX250b2hsKHJwb3J0LT5xb3NfYXR0ci5xb3NfZmxvd19pZCk7CisKK30KKwordm9pZAorYmZhX3Jwb3J0X2NsZWFyX3N0YXRzKHN0cnVjdCBiZmFfcnBvcnRfcyAqcnBvcnQpCit7CisJYmZhX29zX21lbXNldCgmcnBvcnQtPnN0YXRzLCAwLCBzaXplb2YocnBvcnQtPnN0YXRzKSk7Cit9CisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfcnBvcnRfcHJpdi5oIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfcnBvcnRfcHJpdi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0OTBjZTIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9ycG9ydF9wcml2LmgKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9fQkZBX1JQT1JUX1BSSVZfSF9fCisjZGVmaW5lIF9fQkZBX1JQT1JUX1BSSVZfSF9fCisKKyNpbmNsdWRlIDxiZmFfc3ZjLmg+CisKKyNkZWZpbmUgQkZBX1JQT1JUX01JTgk0CisKK3N0cnVjdCBiZmFfcnBvcnRfbW9kX3MgeworCXN0cnVjdCBiZmFfcnBvcnRfcyAqcnBzX2xpc3Q7CS8qICBsaXN0IG9mIHJwb3J0cwkqLworCXN0cnVjdCBsaXN0X2hlYWQgCXJwX2ZyZWVfcTsJLyogIGZyZWUgYmZhX3Jwb3J0cwkqLworCXN0cnVjdCBsaXN0X2hlYWQgCXJwX2FjdGl2ZV9xOwkvKiAgZnJlZSBiZmFfcnBvcnRzIAkqLworCXUxNgludW1fcnBvcnRzOwkvKiAgbnVtYmVyIG9mIHJwb3J0cwkqLworfTsKKworI2RlZmluZSBCRkFfUlBPUlRfTU9EKF9fYmZhKQkoJihfX2JmYSktPm1vZHVsZXMucnBvcnRfbW9kKQorCisvKioKKyAqIENvbnZlcnQgcnBvcnQgdGFnIHRvIFJQT1JUCisgKi8KKyNkZWZpbmUgQkZBX1JQT1JUX0ZST01fVEFHKF9fYmZhLCBfdGFnKQkJCQlcCisJKEJGQV9SUE9SVF9NT0QoX19iZmEpLT5ycHNfbGlzdCArCQkJCVwKKwkgKChfdGFnKSAmIChCRkFfUlBPUlRfTU9EKF9fYmZhKS0+bnVtX3Jwb3J0cyAtIDEpKSkKKworLyoKKyAqIGV4dGVybmFsIGZ1bmN0aW9ucworICovCit2b2lkCWJmYV9ycG9ydF9pc3Ioc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBiZmlfbXNnX3MgKm1zZyk7CisjZW5kaWYgLyogX19CRkFfUlBPUlRfUFJJVl9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX3NncGcuYyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX3NncGcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNzlkOGY5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfc2dwZy5jCkBAIC0wLDAgKzEsMjMxIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxiZmEuaD4KKworQkZBX1RSQ19GSUxFKEhBTCwgU0dQRyk7CitCRkFfTU9EVUxFKHNncGcpOworCisvKioKKyAqICBiZmFfc2dwZ19tb2QgQkZBIFNHUEcgTW9kZSBtb2R1bGUKKyAqLworCisvKioKKyAqIENvbXB1dGUgYW5kIHJldHVybiBtZW1vcnkgbmVlZGVkIGJ5IEZDUChpbSkgbW9kdWxlLgorICovCitzdGF0aWMgdm9pZAorYmZhX3NncGdfbWVtaW5mbyhzdHJ1Y3QgYmZhX2lvY2ZjX2NmZ19zICpjZmcsIHUzMiAqa21fbGVuLAorCQl1MzIgKmRtX2xlbikKK3sKKwlpZiAoY2ZnLT5kcnZjZmcubnVtX3NncGdzIDwgQkZBX1NHUEdfTUlOKQorCQljZmctPmRydmNmZy5udW1fc2dwZ3MgPSBCRkFfU0dQR19NSU47CisKKwkqa21fbGVuICs9IChjZmctPmRydmNmZy5udW1fc2dwZ3MgKyAxKSAqIHNpemVvZihzdHJ1Y3QgYmZhX3NncGdfcyk7CisJKmRtX2xlbiArPSAoY2ZnLT5kcnZjZmcubnVtX3NncGdzICsgMSkgKiBzaXplb2Yoc3RydWN0IGJmaV9zZ3BnX3MpOworfQorCisKK3N0YXRpYyB2b2lkCitiZmFfc2dwZ19hdHRhY2goc3RydWN0IGJmYV9zICpiZmEsIHZvaWQgKmJmYWQsIHN0cnVjdCBiZmFfaW9jZmNfY2ZnX3MgKmNmZywKKwkJICAgIHN0cnVjdCBiZmFfbWVtaW5mb19zICptaW5mbywgc3RydWN0IGJmYV9wY2lkZXZfcyAqcGNpZGV2KQoreworCXN0cnVjdCBiZmFfc2dwZ19tb2RfcwkqbW9kID0gQkZBX1NHUEdfTU9EKGJmYSk7CisJaW50CQkJCWk7CisJc3RydWN0IGJmYV9zZ3BnX3MJCSpoc2dwZzsKKwlzdHJ1Y3QgYmZpX3NncGdfcyAJKnNncGc7CisJdTY0CQlhbGlnbl9sZW47CisKKwl1bmlvbiB7CisJCXU2NCAgICAgICAgcGE7CisJCXVuaW9uIGJmaV9hZGRyX3UgICAgICBhZGRyOworCX0gc2dwZ19wYTsKKworCUlOSVRfTElTVF9IRUFEKCZtb2QtPnNncGdfcSk7CisJSU5JVF9MSVNUX0hFQUQoJm1vZC0+c2dwZ193YWl0X3EpOworCisJYmZhX3RyYyhiZmEsIGNmZy0+ZHJ2Y2ZnLm51bV9zZ3Bncyk7CisKKwltb2QtPm51bV9zZ3BncyA9IGNmZy0+ZHJ2Y2ZnLm51bV9zZ3BnczsKKwltb2QtPnNncGdfYXJyX3BhID0gYmZhX21lbWluZm9fZG1hX3BoeXMobWluZm8pOworCWFsaWduX2xlbiA9IChCRkFfU0dQR19ST1VORFVQKG1vZC0+c2dwZ19hcnJfcGEpIC0gbW9kLT5zZ3BnX2Fycl9wYSk7CisJbW9kLT5zZ3BnX2Fycl9wYSArPSBhbGlnbl9sZW47CisJbW9kLT5oc2dwZ19hcnIgPSAoc3RydWN0IGJmYV9zZ3BnX3MgKikgKGJmYV9tZW1pbmZvX2t2YShtaW5mbykgKworCQkJCQkJYWxpZ25fbGVuKTsKKwltb2QtPnNncGdfYXJyID0gKHN0cnVjdCBiZmlfc2dwZ19zICopIChiZmFfbWVtaW5mb19kbWFfdmlydChtaW5mbykgKworCQkJCQkJYWxpZ25fbGVuKTsKKworCWhzZ3BnID0gbW9kLT5oc2dwZ19hcnI7CisJc2dwZyA9IG1vZC0+c2dwZ19hcnI7CisJc2dwZ19wYS5wYSA9IG1vZC0+c2dwZ19hcnJfcGE7CisJbW9kLT5mcmVlX3NncGdzID0gbW9kLT5udW1fc2dwZ3M7CisKKwliZmFfYXNzZXJ0KCEoc2dwZ19wYS5wYSAmIChzaXplb2Yoc3RydWN0IGJmaV9zZ3BnX3MpIC0gMSkpKTsKKworCWZvciAoaSA9IDA7IGkgPCBtb2QtPm51bV9zZ3BnczsgaSsrKSB7CisJCWJmYV9vc19tZW1zZXQoaHNncGcsIDAsIHNpemVvZigqaHNncGcpKTsKKwkJYmZhX29zX21lbXNldChzZ3BnLCAwLCBzaXplb2YoKnNncGcpKTsKKworCQloc2dwZy0+c2dwZyA9IHNncGc7CisJCWhzZ3BnLT5zZ3BnX3BhID0gc2dwZ19wYS5hZGRyOworCQlsaXN0X2FkZF90YWlsKCZoc2dwZy0+cWUsICZtb2QtPnNncGdfcSk7CisKKwkJaHNncGcrKzsKKwkJc2dwZysrOworCQlzZ3BnX3BhLnBhICs9IHNpemVvZihzdHJ1Y3QgYmZpX3NncGdfcyk7CisJfQorCisJYmZhX21lbWluZm9fa3ZhKG1pbmZvKSA9ICh1OCAqKSBoc2dwZzsKKwliZmFfbWVtaW5mb19kbWFfdmlydChtaW5mbykgPSAodTggKikgc2dwZzsKKwliZmFfbWVtaW5mb19kbWFfcGh5cyhtaW5mbykgPSBzZ3BnX3BhLnBhOworfQorCitzdGF0aWMgdm9pZAorYmZhX3NncGdfaW5pdGRvbmUoc3RydWN0IGJmYV9zICpiZmEpCit7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfc2dwZ19kZXRhY2goc3RydWN0IGJmYV9zICpiZmEpCit7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfc2dwZ19zdGFydChzdHJ1Y3QgYmZhX3MgKmJmYSkKK3sKK30KKworc3RhdGljIHZvaWQKK2JmYV9zZ3BnX3N0b3Aoc3RydWN0IGJmYV9zICpiZmEpCit7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfc2dwZ19pb2NkaXNhYmxlKHN0cnVjdCBiZmFfcyAqYmZhKQoreworfQorCisKKworLyoqCisgKiAgYmZhX3NncGdfcHVibGljIEJGQSBTR1BHIHB1YmxpYyBmdW5jdGlvbnMKKyAqLworCitiZmFfc3RhdHVzX3QKK2JmYV9zZ3BnX21hbGxvYyhzdHJ1Y3QgYmZhX3MgKmJmYSwgc3RydWN0IGxpc3RfaGVhZCAqc2dwZ19xLCBpbnQgbnNncGdzKQoreworCXN0cnVjdCBiZmFfc2dwZ19tb2RfcyAqbW9kID0gQkZBX1NHUEdfTU9EKGJmYSk7CisJc3RydWN0IGJmYV9zZ3BnX3MgKmhzZ3BnOworCWludCAgICAgICAgICAgICBpOworCisJYmZhX3RyY19mcChiZmEsIG5zZ3Bncyk7CisKKwlpZiAobW9kLT5mcmVlX3NncGdzIDwgbnNncGdzKQorCQlyZXR1cm4gQkZBX1NUQVRVU19FTk9NRU07CisKKwlmb3IgKGkgPSAwOyBpIDwgbnNncGdzOyBpKyspIHsKKwkJYmZhX3FfZGVxKCZtb2QtPnNncGdfcSwgJmhzZ3BnKTsKKwkJYmZhX2Fzc2VydChoc2dwZyk7CisJCWxpc3RfYWRkX3RhaWwoJmhzZ3BnLT5xZSwgc2dwZ19xKTsKKwl9CisKKwltb2QtPmZyZWVfc2dwZ3MgLT0gbnNncGdzOworCXJldHVybiBCRkFfU1RBVFVTX09LOworfQorCit2b2lkCitiZmFfc2dwZ19tZnJlZShzdHJ1Y3QgYmZhX3MgKmJmYSwgc3RydWN0IGxpc3RfaGVhZCAqc2dwZ19xLCBpbnQgbnNncGcpCit7CisJc3RydWN0IGJmYV9zZ3BnX21vZF9zICptb2QgPSBCRkFfU0dQR19NT0QoYmZhKTsKKwlzdHJ1Y3QgYmZhX3NncGdfd3FlX3MgKndxZTsKKworCWJmYV90cmNfZnAoYmZhLCBuc2dwZyk7CisKKwltb2QtPmZyZWVfc2dwZ3MgKz0gbnNncGc7CisJYmZhX2Fzc2VydChtb2QtPmZyZWVfc2dwZ3MgPD0gbW9kLT5udW1fc2dwZ3MpOworCisJbGlzdF9zcGxpY2VfdGFpbF9pbml0KHNncGdfcSwgJm1vZC0+c2dwZ19xKTsKKworCWlmIChsaXN0X2VtcHR5KCZtb2QtPnNncGdfd2FpdF9xKSkKKwkJcmV0dXJuOworCisJLyoqCisJICogc2F0aXNmeSBhcyBtYW55IHdhaXRpbmcgcmVxdWVzdHMgYXMgcG9zc2libGUKKwkgKi8KKwlkbyB7CisJCXdxZSA9IGJmYV9xX2ZpcnN0KCZtb2QtPnNncGdfd2FpdF9xKTsKKwkJaWYgKG1vZC0+ZnJlZV9zZ3BncyA8IHdxZS0+bnNncGcpCisJCQluc2dwZyA9IG1vZC0+ZnJlZV9zZ3BnczsKKwkJZWxzZQorCQkJbnNncGcgPSB3cWUtPm5zZ3BnOworCQliZmFfc2dwZ19tYWxsb2MoYmZhLCAmd3FlLT5zZ3BnX3EsIG5zZ3BnKTsKKwkJd3FlLT5uc2dwZyAtPSBuc2dwZzsKKwkJaWYgKHdxZS0+bnNncGcgPT0gMCkgeworCQkJbGlzdF9kZWwoJndxZS0+cWUpOworCQkJd3FlLT5jYmZuKHdxZS0+Y2JhcmcpOworCQl9CisJfSB3aGlsZSAobW9kLT5mcmVlX3NncGdzICYmICFsaXN0X2VtcHR5KCZtb2QtPnNncGdfd2FpdF9xKSk7Cit9CisKK3ZvaWQKK2JmYV9zZ3BnX3dhaXQoc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBiZmFfc2dwZ193cWVfcyAqd3FlLCBpbnQgbnNncGcpCit7CisJc3RydWN0IGJmYV9zZ3BnX21vZF9zICptb2QgPSBCRkFfU0dQR19NT0QoYmZhKTsKKworCWJmYV9hc3NlcnQobnNncGcgPiAwKTsKKwliZmFfYXNzZXJ0KG5zZ3BnID4gbW9kLT5mcmVlX3NncGdzKTsKKworCXdxZS0+bnNncGdfdG90YWwgPSB3cWUtPm5zZ3BnID0gbnNncGc7CisKKwkvKioKKwkgKiBhbGxvY2F0ZSBhbnkgbGVmdCB0byB0aGlzIG9uZSBmaXJzdAorCSAqLworCWlmIChtb2QtPmZyZWVfc2dwZ3MpIHsKKwkJLyoqCisJCSAqIG5vIG9uZSBlbHNlIGlzIHdhaXRpbmcgZm9yIFNHUEcKKwkJICovCisJCWJmYV9hc3NlcnQobGlzdF9lbXB0eSgmbW9kLT5zZ3BnX3dhaXRfcSkpOworCQlsaXN0X3NwbGljZV90YWlsX2luaXQoJm1vZC0+c2dwZ19xLCAmd3FlLT5zZ3BnX3EpOworCQl3cWUtPm5zZ3BnIC09IG1vZC0+ZnJlZV9zZ3BnczsKKwkJbW9kLT5mcmVlX3NncGdzID0gMDsKKwl9CisKKwlsaXN0X2FkZF90YWlsKCZ3cWUtPnFlLCAmbW9kLT5zZ3BnX3dhaXRfcSk7Cit9CisKK3ZvaWQKK2JmYV9zZ3BnX3djYW5jZWwoc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBiZmFfc2dwZ193cWVfcyAqd3FlKQoreworCXN0cnVjdCBiZmFfc2dwZ19tb2RfcyAqbW9kID0gQkZBX1NHUEdfTU9EKGJmYSk7CisKKwliZmFfYXNzZXJ0KGJmYV9xX2lzX29uX3EoJm1vZC0+c2dwZ193YWl0X3EsIHdxZSkpOworCWxpc3RfZGVsKCZ3cWUtPnFlKTsKKworCWlmICh3cWUtPm5zZ3BnX3RvdGFsICE9IHdxZS0+bnNncGcpCisJCWJmYV9zZ3BnX21mcmVlKGJmYSwgJndxZS0+c2dwZ19xLAorCQkJCSAgIHdxZS0+bnNncGdfdG90YWwgLSB3cWUtPm5zZ3BnKTsKK30KKwordm9pZAorYmZhX3NncGdfd2luaXQoc3RydWN0IGJmYV9zZ3BnX3dxZV9zICp3cWUsIHZvaWQgKCpjYmZuKSAodm9pZCAqY2JhcmcpLAorCQkgICB2b2lkICpjYmFyZykKK3sKKwlJTklUX0xJU1RfSEVBRCgmd3FlLT5zZ3BnX3EpOworCXdxZS0+Y2JmbiA9IGNiZm47CisJd3FlLT5jYmFyZyA9IGNiYXJnOworfQorCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX3NncGdfcHJpdi5oIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfc2dwZ19wcml2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWMyYThjYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX3NncGdfcHJpdi5oCkBAIC0wLDAgKzEsNzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworLyoqCisgKiAgaGFsX3NncGcuaCBCRkEgU0cgcGFnZSBtb2R1bGUKKyAqLworCisjaWZuZGVmIF9fQkZBX1NHUEdfUFJJVl9IX18KKyNkZWZpbmUgX19CRkFfU0dQR19QUklWX0hfXworCisjaW5jbHVkZSA8Y3MvYmZhX3EuaD4KKworI2RlZmluZSBCRkFfU0dQR19NSU4JKDE2KQorCisvKioKKyAqIEFsaWdubWVudCBtYWNybyBmb3IgU0cgcGFnZSBhbGxvY2F0aW9uCisgKi8KKyNkZWZpbmUgQkZBX1NHUEdfUk9VTkRVUChfbCkgKCgoX2wpICsgKHNpemVvZihzdHJ1Y3QgYmZpX3NncGdfcykgLSAxKSkgXAorCQkJJiB+KHNpemVvZihzdHJ1Y3QgYmZpX3NncGdfcykgLSAxKSkKKworc3RydWN0IGJmYV9zZ3BnX3dxZV9zIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHFlOwkvKiAgcXVldWUgc2cgcGFnZSBlbGVtZW50CSovCisJaW50CW5zZ3BnOwkJLyogIHBhZ2VzIHRvIGJlIGFsbG9jYXRlZAkqLworCWludAluc2dwZ190b3RhbDsJLyogIHRvdGFsIHBhZ2VzIHJlcXVpcmVkCSovCisJdm9pZAkoKmNiZm4pICh2b2lkICpjYmFyZyk7CisJCQkJLyogIGNhbGxiYWNrIGZ1bmN0aW9uCQkqLworCXZvaWQJKmNiYXJnOwkJLyogIGNhbGxiYWNrIGFyZwkJKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIHNncGdfcTsJLyogIHF1ZXVlIG9mIGFsbG9jZWQgc2dwZ3MJKi8KK307CisKK3N0cnVjdCBiZmFfc2dwZ19zIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIAlxZTsJLyogIHF1ZXVlIHNnIHBhZ2UgZWxlbWVudAkqLworCXN0cnVjdCBiZmlfc2dwZ19zICpzZ3BnOyAvKiAgdmEgb2YgU0cgcGFnZQkJKi8KKwl1bmlvbiBiZmlfYWRkcl91IHNncGdfcGE7LyogIHBhIG9mIFNHIHBhZ2UJCSovCit9OworCisvKioKKyAqIEdpdmVuIG51bWJlciBvZiBTRyBlbGVtZW50cywgQkZBX1NHUEdfTlBBR0UoKSByZXR1cm5zIHRoZSBudW1iZXIgb2YKKyAqIFNHIHBhZ2VzIHJlcXVpcmVkLgorICovCisjZGVmaW5lIEJGQV9TR1BHX05QQUdFKF9uc2dlcykgICgoKF9uc2dlcykgLyBCRklfU0dQR19EQVRBX1NHRVMpICsgMSkKKworc3RydWN0IGJmYV9zZ3BnX21vZF9zIHsKKwlzdHJ1Y3QgYmZhX3MgKmJmYTsKKwlpbnQJCW51bV9zZ3BnczsJLyogIG51bWJlciBvZiBTRyBwYWdlcwkJKi8KKwlpbnQJCWZyZWVfc2dwZ3M7CS8qICBudW1iZXIgb2YgZnJlZSBTRyBwYWdlcwkqLworCXN0cnVjdCBiZmFfc2dwZ19zICpoc2dwZ19hcnI7CS8qICBCRkEgU0cgcGFnZSBhcnJheQkqLworCXN0cnVjdCBiZmlfc2dwZ19zICpzZ3BnX2FycjsJLyogIGFjdHVhbCBTRyBwYWdlIGFycmF5CSovCisJdTY0CXNncGdfYXJyX3BhOwkvKiAgU0cgcGFnZSBhcnJheSBETUEgYWRkcgkqLworCXN0cnVjdCBsaXN0X2hlYWQgc2dwZ19xOwkvKiAgcXVldWUgb2YgZnJlZSBTRyBwYWdlcwkqLworCXN0cnVjdCBsaXN0X2hlYWQgc2dwZ193YWl0X3E7IC8qICB3YWl0IHF1ZXVlIGZvciBTRyBwYWdlcwkqLworfTsKKyNkZWZpbmUgQkZBX1NHUEdfTU9EKF9fYmZhKQkoJihfX2JmYSktPm1vZHVsZXMuc2dwZ19tb2QpCisKK2JmYV9zdGF0dXNfdAliZmFfc2dwZ19tYWxsb2Moc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBsaXN0X2hlYWQgKnNncGdfcSwKKwkJCQkJCQkJaW50IG5zZ3Bncyk7Cit2b2lkCQliZmFfc2dwZ19tZnJlZShzdHJ1Y3QgYmZhX3MgKmJmYSwgc3RydWN0IGxpc3RfaGVhZCAqc2dwZ19xLAorCQkJCQkJCQlpbnQgbnNncGdzKTsKK3ZvaWQJCWJmYV9zZ3BnX3dpbml0KHN0cnVjdCBiZmFfc2dwZ193cWVfcyAqd3FlLAorCQkJCSAgIHZvaWQgKCpjYmZuKSAodm9pZCAqY2JhcmcpLCB2b2lkICpjYmFyZyk7Cit2b2lkCQliZmFfc2dwZ193YWl0KHN0cnVjdCBiZmFfcyAqYmZhLCBzdHJ1Y3QgYmZhX3NncGdfd3FlX3MgKndxZSwKKwkJCQkJCQkJaW50IG5zZ3Bncyk7Cit2b2lkCQliZmFfc2dwZ193Y2FuY2VsKHN0cnVjdCBiZmFfcyAqYmZhLCBzdHJ1Y3QgYmZhX3NncGdfd3FlX3MgKndxZSk7CisKKyNlbmRpZiAvKiBfX0JGQV9TR1BHX1BSSVZfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2JmYV9zbS5jIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfc20uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDIwZjRmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfc20uYwpAQCAtMCwwICsxLDM4IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKy8qKgorICogIGJmYXNtLmMgQkZBIFN0YXRlIG1hY2hpbmUgdXRpbGl0eSBmdW5jdGlvbnMKKyAqLworCisjaW5jbHVkZSA8Y3MvYmZhX3NtLmg+CisKKy8qKgorICogIGNzX3NtX2FwaQorICovCisKK2ludAorYmZhX3NtX3RvX3N0YXRlKHN0cnVjdCBiZmFfc21fdGFibGVfcyAqc210LCBiZmFfc21fdCBzbSkKK3sKKwlpbnQgICAgICAgICAgICAgaSA9IDA7CisKKwl3aGlsZSAoc210W2ldLnNtICYmIHNtdFtpXS5zbSAhPSBzbSkKKwkJaSsrOworCXJldHVybiBzbXRbaV0uc3RhdGU7Cit9CisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfdGltZXIuYyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX3RpbWVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2I3NjQ4MQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX3RpbWVyLmMKQEAgLTAsMCArMSw5MCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8YmZhX3RpbWVyLmg+CisjaW5jbHVkZSA8Y3MvYmZhX2RlYnVnLmg+CisKK3ZvaWQKK2JmYV90aW1lcl9pbml0KHN0cnVjdCBiZmFfdGltZXJfbW9kX3MgKm1vZCkKK3sKKwlJTklUX0xJU1RfSEVBRCgmbW9kLT50aW1lcl9xKTsKK30KKwordm9pZAorYmZhX3RpbWVyX2JlYXQoc3RydWN0IGJmYV90aW1lcl9tb2RfcyAqbW9kKQoreworCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgICpxaCA9ICZtb2QtPnRpbWVyX3E7CisJc3RydWN0IGxpc3RfaGVhZCAgICAgICAgKnFlLCAqcWVfbmV4dDsKKwlzdHJ1Y3QgYmZhX3RpbWVyX3MgKmVsZW07CisJc3RydWN0IGxpc3RfaGVhZCAgICAgICAgIHRpbWVkb3V0X3E7CisKKwlJTklUX0xJU1RfSEVBRCgmdGltZWRvdXRfcSk7CisKKwlxZSA9IGJmYV9xX25leHQocWgpOworCisJd2hpbGUgKHFlICE9IHFoKSB7CisJCXFlX25leHQgPSBiZmFfcV9uZXh0KHFlKTsKKworCQllbGVtID0gKHN0cnVjdCBiZmFfdGltZXJfcyAqKSBxZTsKKwkJaWYgKGVsZW0tPnRpbWVvdXQgPD0gQkZBX1RJTUVSX0ZSRVEpIHsKKwkJCWVsZW0tPnRpbWVvdXQgPSAwOworCQkJbGlzdF9kZWwoJmVsZW0tPnFlKTsKKwkJCWxpc3RfYWRkX3RhaWwoJmVsZW0tPnFlLCAmdGltZWRvdXRfcSk7CisJCX0gZWxzZSB7CisJCQllbGVtLT50aW1lb3V0IC09IEJGQV9USU1FUl9GUkVROworCQl9CisKKwkJcWUgPSBxZV9uZXh0OwkvKiBnbyB0byBuZXh0IGVsZW0gKi8KKwl9CisKKwkvKgorCSAqIFBvcCBhbGwgdGhlIHRpbWVvdXQgZW50cmllcworCSAqLworCXdoaWxlICghbGlzdF9lbXB0eSgmdGltZWRvdXRfcSkpIHsKKwkJYmZhX3FfZGVxKCZ0aW1lZG91dF9xLCAmZWxlbSk7CisJCWVsZW0tPnRpbWVyY2IoZWxlbS0+YXJnKTsKKwl9Cit9CisKKy8qKgorICogU2hvdWxkIGJlIGNhbGxlZCB3aXRoIGxvY2sgcHJvdGVjdGlvbgorICovCit2b2lkCitiZmFfdGltZXJfYmVnaW4oc3RydWN0IGJmYV90aW1lcl9tb2RfcyAqbW9kLCBzdHJ1Y3QgYmZhX3RpbWVyX3MgKnRpbWVyLAorCQkgICAgdm9pZCAoKnRpbWVyY2IpICh2b2lkICopLCB2b2lkICphcmcsIHVuc2lnbmVkIGludCB0aW1lb3V0KQoreworCisJYmZhX2Fzc2VydCh0aW1lcmNiICE9IE5VTEwpOworCWJmYV9hc3NlcnQoIWJmYV9xX2lzX29uX3EoJm1vZC0+dGltZXJfcSwgdGltZXIpKTsKKworCXRpbWVyLT50aW1lb3V0ID0gdGltZW91dDsKKwl0aW1lci0+dGltZXJjYiA9IHRpbWVyY2I7CisJdGltZXItPmFyZyA9IGFyZzsKKworCWxpc3RfYWRkX3RhaWwoJnRpbWVyLT5xZSwgJm1vZC0+dGltZXJfcSk7Cit9CisKKy8qKgorICogU2hvdWxkIGJlIGNhbGxlZCB3aXRoIGxvY2sgcHJvdGVjdGlvbgorICovCit2b2lkCitiZmFfdGltZXJfc3RvcChzdHJ1Y3QgYmZhX3RpbWVyX3MgKnRpbWVyKQoreworCWJmYV9hc3NlcnQoIWxpc3RfZW1wdHkoJnRpbWVyLT5xZSkpOworCisJbGlzdF9kZWwoJnRpbWVyLT5xZSk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2JmYV90cmNtb2RfcHJpdi5oIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfdHJjbW9kX3ByaXYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzU2MmRjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfdHJjbW9kX3ByaXYuaApAQCAtMCwwICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKy8qKgorICogIGhhbF90cmNtb2QuaCBCRkEgdHJhY2UgbW9kdWxlcworICovCisKKyNpZm5kZWYgX19CRkFfVFJDTU9EX1BSSVZfSF9fCisjZGVmaW5lIF9fQkZBX1RSQ01PRF9QUklWX0hfXworCisjaW5jbHVkZSA8Y3MvYmZhX3RyYy5oPgorCisvKgorICogISEhIE9ubHkgYXBwZW5kIHRvIHRoZSBlbnVtcyBkZWZpbmVkIGhlcmUgdG8gYXZvaWQgYW55IHZlcnNpb25pbmcKKyAqICEhISBuZWVkZWQgYmV0d2VlbiB0cmFjZSB1dGlsaXR5IGFuZCBkcml2ZXIgdmVyc2lvbgorICovCitlbnVtIHsKKwlCRkFfVFJDX0hBTF9JT0MJCT0gMSwKKwlCRkFfVFJDX0hBTF9JTlRSCT0gMiwKKwlCRkFfVFJDX0hBTF9GQ1hQCT0gMywKKwlCRkFfVFJDX0hBTF9VRgkJPSA0LAorCUJGQV9UUkNfSEFMX0RJQUcJPSA1LAorCUJGQV9UUkNfSEFMX1JQT1JUCT0gNiwKKwlCRkFfVFJDX0hBTF9GQ1BJTQk9IDcsCisJQkZBX1RSQ19IQUxfSU9JTQk9IDgsCisJQkZBX1RSQ19IQUxfVFNLSU0JPSA5LAorCUJGQV9UUkNfSEFMX0lUTklNCT0gMTAsCisJQkZBX1RSQ19IQUxfUFBPUlQJPSAxMSwKKwlCRkFfVFJDX0hBTF9TR1BHCT0gMTIsCisJQkZBX1RSQ19IQUxfRkxBU0gJPSAxMywKKwlCRkFfVFJDX0hBTF9ERUJVRwk9IDE0LAorCUJGQV9UUkNfSEFMX1dXTgkJPSAxNSwKKwlCRkFfVFJDX0hBTF9GTEFTSF9SQVcJPSAxNiwKKwlCRkFfVFJDX0hBTF9TQk9PVAk9IDE3LAorCUJGQV9UUkNfSEFMX1NCT09UX0lPCT0gMTgsCisJQkZBX1RSQ19IQUxfU0JPT1RfSU5UUgk9IDE5LAorCUJGQV9UUkNfSEFMX1NCVEVTVAk9IDIwLAorCUJGQV9UUkNfSEFMX0lQRkMJPSAyMSwKKwlCRkFfVFJDX0hBTF9JT0NGQwk9IDIyLAorCUJGQV9UUkNfSEFMX0ZDUFRNCT0gMjMsCisJQkZBX1RSQ19IQUxfSU9UTQk9IDI0LAorCUJGQV9UUkNfSEFMX1RTS1RNCT0gMjUsCisJQkZBX1RSQ19IQUxfVElOCQk9IDI2LAorCUJGQV9UUkNfSEFMX0xQUwkJPSAyNywKKwlCRkFfVFJDX0hBTF9GQ0RJQUcJPSAyOCwKKwlCRkFfVFJDX0hBTF9QQklORAk9IDI5LAorCUJGQV9UUkNfSEFMX0lPQ0ZDX0NUCT0gMzAsCisJQkZBX1RSQ19IQUxfSU9DRkNfQ0IJPSAzMSwKKwlCRkFfVFJDX0hBTF9JT0NGQ19RCT0gMzIsCit9OworCisjZW5kaWYgLyogX19CRkFfVFJDTU9EX1BSSVZfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2JmYV90c2tpbS5jIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfdHNraW0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTBkNDBkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfdHNraW0uYwpAQCAtMCwwICsxLDY4OSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8YmZhLmg+CisjaW5jbHVkZSA8YmZhX2NiX2lvaW1fbWFjcm9zLmg+CisKK0JGQV9UUkNfRklMRShIQUwsIFRTS0lNKTsKKworLyoqCisgKiB0YXNrIG1hbmFnZW1lbnQgY29tcGxldGlvbiBoYW5kbGluZworICovCisjZGVmaW5lIGJmYV90c2tpbV9xY29tcChfX3Rza2ltLCBfX2NiZm4pIGRvIHsJCQkgICAgIFwKKwliZmFfY2JfcXVldWUoKF9fdHNraW0pLT5iZmEsICYoX190c2tpbSktPmhjYl9xZSwgX19jYmZuLCAoX190c2tpbSkpOyBcCisJYmZhX3Rza2ltX25vdGlmeV9jb21wKF9fdHNraW0pOyAgICAgIFwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgYmZhX3Rza2ltX25vdGlmeV9jb21wKF9fdHNraW0pIGRvIHsJCQkJICAgICBcCisJaWYgKChfX3Rza2ltKS0+bm90aWZ5KQkJCQkJICAgICAJICAgICBcCisJCWJmYV9pdG5pbV90c2tkb25lKChfX3Rza2ltKS0+aXRuaW0pOyAgICAgIFwKK30gd2hpbGUgKDApCisKKy8qCisgKiBmb3J3YXJkIGRlY2xhcmF0aW9ucworICovCitzdGF0aWMgdm9pZCAgICAgX19iZmFfY2JfdHNraW1fZG9uZSh2b2lkICpjYmFyZywgYmZhX2Jvb2xlYW5fdCBjb21wbGV0ZSk7CitzdGF0aWMgdm9pZCAgICAgX19iZmFfY2JfdHNraW1fZmFpbGVkKHZvaWQgKmNiYXJnLCBiZmFfYm9vbGVhbl90IGNvbXBsZXRlKTsKK3N0YXRpYyBiZmFfYm9vbGVhbl90IGJmYV90c2tpbV9tYXRjaF9zY29wZShzdHJ1Y3QgYmZhX3Rza2ltX3MgKnRza2ltLAorCQkJCQkgICAgICAgbHVuX3QgbHVuKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfdHNraW1fZ2F0aGVyX2lvcyhzdHJ1Y3QgYmZhX3Rza2ltX3MgKnRza2ltKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfdHNraW1fY2xlYW5wX2NvbXAodm9pZCAqdHNraW1fY2JhcmcpOworc3RhdGljIHZvaWQgICAgIGJmYV90c2tpbV9jbGVhbnVwX2lvcyhzdHJ1Y3QgYmZhX3Rza2ltX3MgKnRza2ltKTsKK3N0YXRpYyBiZmFfYm9vbGVhbl90IGJmYV90c2tpbV9zZW5kKHN0cnVjdCBiZmFfdHNraW1fcyAqdHNraW0pOworc3RhdGljIGJmYV9ib29sZWFuX3QgYmZhX3Rza2ltX3NlbmRfYWJvcnQoc3RydWN0IGJmYV90c2tpbV9zICp0c2tpbSk7CitzdGF0aWMgdm9pZCAgICAgYmZhX3Rza2ltX2lvY2Rpc2FibGVfaW9zKHN0cnVjdCBiZmFfdHNraW1fcyAqdHNraW0pOworCisvKioKKyAqICBiZmFfdHNraW1fc20KKyAqLworCitlbnVtIGJmYV90c2tpbV9ldmVudCB7CisJQkZBX1RTS0lNX1NNX1NUQVJUICAgICAgICA9IDEsICAvKiAgVE0gY29tbWFuZCBzdGFydCAgICAgICAgICAgICovCisJQkZBX1RTS0lNX1NNX0RPTkUgICAgICAgICA9IDIsICAvKiAgVE0gY29tcGxldGlvbiAgICAgICAgICAgICAgICovCisJQkZBX1RTS0lNX1NNX1FSRVNVTUUgICAgICA9IDMsICAvKiAgcmVzdW1lIGFmdGVyIHFmdWxsICAgICAgICAgICovCisJQkZBX1RTS0lNX1NNX0hXRkFJTCAgICAgICA9IDUsICAvKiAgSU9DIGgvdyBmYWlsdXJlIGV2ZW50ICAgICAgICovCisJQkZBX1RTS0lNX1NNX0hDQiAgICAgICAgICA9IDYsICAvKiAgQkZBIGNhbGxiYWNrIGNvbXBsZXRpb24gICAgICovCisJQkZBX1RTS0lNX1NNX0lPU19ET05FICAgICA9IDcsICAvKiAgSU8gYW5kIHN1YiBUTSBjb21wbGV0aW9ucyAgICovCisJQkZBX1RTS0lNX1NNX0NMRUFOVVAgICAgICA9IDgsICAvKiAgVE0gY2xlYW51cCBvbiBJVE4gb2ZmbGluZSAgICovCisJQkZBX1RTS0lNX1NNX0NMRUFOVVBfRE9ORSA9IDksICAvKiAgVE0gYWJvcnQgY29tcGxldGlvbiAgICAgICAgICovCit9OworCitzdGF0aWMgdm9pZCAgICAgYmZhX3Rza2ltX3NtX3VuaW5pdChzdHJ1Y3QgYmZhX3Rza2ltX3MgKnRza2ltLAorCQkJCQllbnVtIGJmYV90c2tpbV9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX3Rza2ltX3NtX2FjdGl2ZShzdHJ1Y3QgYmZhX3Rza2ltX3MgKnRza2ltLAorCQkJCQllbnVtIGJmYV90c2tpbV9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX3Rza2ltX3NtX2NsZWFudXAoc3RydWN0IGJmYV90c2tpbV9zICp0c2tpbSwKKwkJCQkJIGVudW0gYmZhX3Rza2ltX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfdHNraW1fc21faW9jbGVhbnVwKHN0cnVjdCBiZmFfdHNraW1fcyAqdHNraW0sCisJCQkJCSBlbnVtIGJmYV90c2tpbV9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX3Rza2ltX3NtX3FmdWxsKHN0cnVjdCBiZmFfdHNraW1fcyAqdHNraW0sCisJCQkJICAgICAgIGVudW0gYmZhX3Rza2ltX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfdHNraW1fc21fY2xlYW51cF9xZnVsbChzdHJ1Y3QgYmZhX3Rza2ltX3MgKnRza2ltLAorCQkJCSAgICAgICBlbnVtIGJmYV90c2tpbV9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX3Rza2ltX3NtX2hjYihzdHJ1Y3QgYmZhX3Rza2ltX3MgKnRza2ltLAorCQkJCSAgICAgZW51bSBiZmFfdHNraW1fZXZlbnQgZXZlbnQpOworCisvKioKKyAqICAgICAgVGFzayBtYW5hZ2VtZW50IGNvbW1hbmQgYmVnaW5uaW5nIHN0YXRlLgorICovCitzdGF0aWMgdm9pZAorYmZhX3Rza2ltX3NtX3VuaW5pdChzdHJ1Y3QgYmZhX3Rza2ltX3MgKnRza2ltLCBlbnVtIGJmYV90c2tpbV9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKHRza2ltLT5iZmEsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9UU0tJTV9TTV9TVEFSVDoKKwkJYmZhX3NtX3NldF9zdGF0ZSh0c2tpbSwgYmZhX3Rza2ltX3NtX2FjdGl2ZSk7CisJCWJmYV90c2tpbV9nYXRoZXJfaW9zKHRza2ltKTsKKworCQkvKioKKwkJICogSWYgZGV2aWNlIGlzIG9mZmxpbmUsIGRvIG5vdCBzZW5kIFRNIG9uIHdpcmUuIEp1c3QgY2xlYW51cAorCQkgKiBhbnkgcGVuZGluZyBJTyByZXF1ZXN0cyBhbmQgY29tcGxldGUgVE0gcmVxdWVzdC4KKwkJICovCisJCWlmICghYmZhX2l0bmltX2lzX29ubGluZSh0c2tpbS0+aXRuaW0pKSB7CisJCQliZmFfc21fc2V0X3N0YXRlKHRza2ltLCBiZmFfdHNraW1fc21faW9jbGVhbnVwKTsKKwkJCXRza2ltLT50c2tfc3RhdHVzID0gQkZJX1RTS0lNX1NUU19PSzsKKwkJCWJmYV90c2tpbV9jbGVhbnVwX2lvcyh0c2tpbSk7CisJCQlyZXR1cm47CisJCX0KKworCQlpZiAoIWJmYV90c2tpbV9zZW5kKHRza2ltKSkgeworCQkJYmZhX3NtX3NldF9zdGF0ZSh0c2tpbSwgYmZhX3Rza2ltX3NtX3FmdWxsKTsKKwkJCWJmYV9yZXFxX3dhaXQodHNraW0tPmJmYSwgdHNraW0tPml0bmltLT5yZXFxLAorCQkJCQkgICZ0c2tpbS0+cmVxcV93YWl0KTsKKwkJfQorCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqIGJyaWVmCisgKglUTSBjb21tYW5kIGlzIGFjdGl2ZSwgYXdhaXRpbmcgY29tcGxldGlvbiBmcm9tIGZpcm13YXJlIHRvCisgKgljbGVhbnVwIElPIHJlcXVlc3RzIGluIFRNIHNjb3BlLgorICovCitzdGF0aWMgdm9pZAorYmZhX3Rza2ltX3NtX2FjdGl2ZShzdHJ1Y3QgYmZhX3Rza2ltX3MgKnRza2ltLCBlbnVtIGJmYV90c2tpbV9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKHRza2ltLT5iZmEsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9UU0tJTV9TTV9ET05FOgorCQliZmFfc21fc2V0X3N0YXRlKHRza2ltLCBiZmFfdHNraW1fc21faW9jbGVhbnVwKTsKKwkJYmZhX3Rza2ltX2NsZWFudXBfaW9zKHRza2ltKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9UU0tJTV9TTV9DTEVBTlVQOgorCQliZmFfc21fc2V0X3N0YXRlKHRza2ltLCBiZmFfdHNraW1fc21fY2xlYW51cCk7CisJCWlmICghYmZhX3Rza2ltX3NlbmRfYWJvcnQodHNraW0pKSB7CisJCQliZmFfc21fc2V0X3N0YXRlKHRza2ltLCBiZmFfdHNraW1fc21fY2xlYW51cF9xZnVsbCk7CisJCQliZmFfcmVxcV93YWl0KHRza2ltLT5iZmEsIHRza2ltLT5pdG5pbS0+cmVxcSwKKwkJCQkmdHNraW0tPnJlcXFfd2FpdCk7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIEJGQV9UU0tJTV9TTV9IV0ZBSUw6CisJCWJmYV9zbV9zZXRfc3RhdGUodHNraW0sIGJmYV90c2tpbV9zbV9oY2IpOworCQliZmFfdHNraW1faW9jZGlzYWJsZV9pb3ModHNraW0pOworCQliZmFfdHNraW1fcWNvbXAodHNraW0sIF9fYmZhX2NiX3Rza2ltX2ZhaWxlZCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKy8qKgorICoJQW4gYWN0aXZlIFRNIGlzIGJlaW5nIGNsZWFuZWQgdXAgc2luY2UgSVROIGlzIG9mZmxpbmUuIEF3YWl0aW5nIGNsZWFudXAKKyAqCWNvbXBsZXRpb24gZXZlbnQgZnJvbSBmaXJtd2FyZS4KKyAqLworc3RhdGljIHZvaWQKK2JmYV90c2tpbV9zbV9jbGVhbnVwKHN0cnVjdCBiZmFfdHNraW1fcyAqdHNraW0sIGVudW0gYmZhX3Rza2ltX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmModHNraW0tPmJmYSwgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX1RTS0lNX1NNX0RPTkU6CisJCS8qKgorCQkgKiBJZ25vcmUgYW5kIHdhaXQgZm9yIEFCT1JUIGNvbXBsZXRpb24gZnJvbSBmaXJtd2FyZS4KKwkJICovCisJCWJyZWFrOworCisJY2FzZSBCRkFfVFNLSU1fU01fQ0xFQU5VUF9ET05FOgorCQliZmFfc21fc2V0X3N0YXRlKHRza2ltLCBiZmFfdHNraW1fc21faW9jbGVhbnVwKTsKKwkJYmZhX3Rza2ltX2NsZWFudXBfaW9zKHRza2ltKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9UU0tJTV9TTV9IV0ZBSUw6CisJCWJmYV9zbV9zZXRfc3RhdGUodHNraW0sIGJmYV90c2tpbV9zbV9oY2IpOworCQliZmFfdHNraW1faW9jZGlzYWJsZV9pb3ModHNraW0pOworCQliZmFfdHNraW1fcWNvbXAodHNraW0sIF9fYmZhX2NiX3Rza2ltX2ZhaWxlZCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfdHNraW1fc21faW9jbGVhbnVwKHN0cnVjdCBiZmFfdHNraW1fcyAqdHNraW0sIGVudW0gYmZhX3Rza2ltX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmModHNraW0tPmJmYSwgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX1RTS0lNX1NNX0lPU19ET05FOgorCQliZmFfc21fc2V0X3N0YXRlKHRza2ltLCBiZmFfdHNraW1fc21faGNiKTsKKwkJYmZhX3Rza2ltX3Fjb21wKHRza2ltLCBfX2JmYV9jYl90c2tpbV9kb25lKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9UU0tJTV9TTV9DTEVBTlVQOgorCQkvKioKKwkJICogSWdub3JlLCBUTSBjb21tYW5kIGNvbXBsZXRlZCBvbiB3aXJlLgorCQkgKiBOb3RpZnkgVE0gY29ubXBsZXRpb24gb24gSU8gY2xlYW51cCBjb21wbGV0aW9uLgorCQkgKi8KKwkJYnJlYWs7CisKKwljYXNlIEJGQV9UU0tJTV9TTV9IV0ZBSUw6CisJCWJmYV9zbV9zZXRfc3RhdGUodHNraW0sIGJmYV90c2tpbV9zbV9oY2IpOworCQliZmFfdHNraW1faW9jZGlzYWJsZV9pb3ModHNraW0pOworCQliZmFfdHNraW1fcWNvbXAodHNraW0sIF9fYmZhX2NiX3Rza2ltX2ZhaWxlZCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKy8qKgorICogICAgICBUYXNrIG1hbmFnZW1lbnQgY29tbWFuZCBpcyB3YWl0aW5nIGZvciByb29tIGluIHJlcXVlc3QgQ1EKKyAqLworc3RhdGljIHZvaWQKK2JmYV90c2tpbV9zbV9xZnVsbChzdHJ1Y3QgYmZhX3Rza2ltX3MgKnRza2ltLCBlbnVtIGJmYV90c2tpbV9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKHRza2ltLT5iZmEsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9UU0tJTV9TTV9RUkVTVU1FOgorCQliZmFfc21fc2V0X3N0YXRlKHRza2ltLCBiZmFfdHNraW1fc21fYWN0aXZlKTsKKwkJYmZhX3Rza2ltX3NlbmQodHNraW0pOworCQlicmVhazsKKworCWNhc2UgQkZBX1RTS0lNX1NNX0NMRUFOVVA6CisJCS8qKgorCQkgKiBObyBuZWVkIHRvIHNlbmQgVE0gb24gd2lyZSBzaW5jZSBJVE4gaXMgb2ZmbGluZS4KKwkJICovCisJCWJmYV9zbV9zZXRfc3RhdGUodHNraW0sIGJmYV90c2tpbV9zbV9pb2NsZWFudXApOworCQliZmFfcmVxcV93Y2FuY2VsKCZ0c2tpbS0+cmVxcV93YWl0KTsKKwkJYmZhX3Rza2ltX2NsZWFudXBfaW9zKHRza2ltKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9UU0tJTV9TTV9IV0ZBSUw6CisJCWJmYV9zbV9zZXRfc3RhdGUodHNraW0sIGJmYV90c2tpbV9zbV9oY2IpOworCQliZmFfcmVxcV93Y2FuY2VsKCZ0c2tpbS0+cmVxcV93YWl0KTsKKwkJYmZhX3Rza2ltX2lvY2Rpc2FibGVfaW9zKHRza2ltKTsKKwkJYmZhX3Rza2ltX3Fjb21wKHRza2ltLCBfX2JmYV9jYl90c2tpbV9mYWlsZWQpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqICAgICAgVGFzayBtYW5hZ2VtZW50IGNvbW1hbmQgaXMgYWN0aXZlLCBhd2FpdGluZyBmb3Igcm9vbSBpbiByZXF1ZXN0IENRCisgKgl0byBzZW5kIGNsZWFuIHVwIHJlcXVlc3QuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfdHNraW1fc21fY2xlYW51cF9xZnVsbChzdHJ1Y3QgYmZhX3Rza2ltX3MgKnRza2ltLAorCQllbnVtIGJmYV90c2tpbV9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKHRza2ltLT5iZmEsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9UU0tJTV9TTV9ET05FOgorCQliZmFfcmVxcV93Y2FuY2VsKCZ0c2tpbS0+cmVxcV93YWl0KTsKKwkJLyoqCisJCSAqCisJCSAqIEZhbGwgdGhyb3VnaCAhISEKKwkJICovCisKKwljYXNlIEJGQV9UU0tJTV9TTV9RUkVTVU1FOgorCQliZmFfc21fc2V0X3N0YXRlKHRza2ltLCBiZmFfdHNraW1fc21fY2xlYW51cCk7CisJCWJmYV90c2tpbV9zZW5kX2Fib3J0KHRza2ltKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9UU0tJTV9TTV9IV0ZBSUw6CisJCWJmYV9zbV9zZXRfc3RhdGUodHNraW0sIGJmYV90c2tpbV9zbV9oY2IpOworCQliZmFfcmVxcV93Y2FuY2VsKCZ0c2tpbS0+cmVxcV93YWl0KTsKKwkJYmZhX3Rza2ltX2lvY2Rpc2FibGVfaW9zKHRza2ltKTsKKwkJYmZhX3Rza2ltX3Fjb21wKHRza2ltLCBfX2JmYV9jYl90c2tpbV9mYWlsZWQpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqICAgICAgQkZBIGNhbGxiYWNrIGlzIHBlbmRpbmcKKyAqLworc3RhdGljIHZvaWQKK2JmYV90c2tpbV9zbV9oY2Ioc3RydWN0IGJmYV90c2tpbV9zICp0c2tpbSwgZW51bSBiZmFfdHNraW1fZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyh0c2tpbS0+YmZhLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfVFNLSU1fU01fSENCOgorCQliZmFfc21fc2V0X3N0YXRlKHRza2ltLCBiZmFfdHNraW1fc21fdW5pbml0KTsKKwkJYmZhX3Rza2ltX2ZyZWUodHNraW0pOworCQlicmVhazsKKworCWNhc2UgQkZBX1RTS0lNX1NNX0NMRUFOVVA6CisJCWJmYV90c2tpbV9ub3RpZnlfY29tcCh0c2tpbSk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfVFNLSU1fU01fSFdGQUlMOgorCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisKKworLyoqCisgKiAgYmZhX3Rza2ltX3ByaXZhdGUKKyAqLworCitzdGF0aWMgdm9pZAorX19iZmFfY2JfdHNraW1fZG9uZSh2b2lkICpjYmFyZywgYmZhX2Jvb2xlYW5fdCBjb21wbGV0ZSkKK3sKKwlzdHJ1Y3QgYmZhX3Rza2ltX3MgKnRza2ltID0gY2Jhcmc7CisKKwlpZiAoIWNvbXBsZXRlKSB7CisJCWJmYV9zbV9zZW5kX2V2ZW50KHRza2ltLCBCRkFfVFNLSU1fU01fSENCKTsKKwkJcmV0dXJuOworCX0KKworCWJmYV9zdGF0cyh0c2tpbS0+aXRuaW0sIHRtX3N1Y2Nlc3MpOworCWJmYV9jYl90c2tpbV9kb25lKHRza2ltLT5iZmEtPmJmYWQsIHRza2ltLT5kdHNrLCB0c2tpbS0+dHNrX3N0YXR1cyk7Cit9CisKK3N0YXRpYyB2b2lkCitfX2JmYV9jYl90c2tpbV9mYWlsZWQodm9pZCAqY2JhcmcsIGJmYV9ib29sZWFuX3QgY29tcGxldGUpCit7CisJc3RydWN0IGJmYV90c2tpbV9zICp0c2tpbSA9IGNiYXJnOworCisJaWYgKCFjb21wbGV0ZSkgeworCQliZmFfc21fc2VuZF9ldmVudCh0c2tpbSwgQkZBX1RTS0lNX1NNX0hDQik7CisJCXJldHVybjsKKwl9CisKKwliZmFfc3RhdHModHNraW0tPml0bmltLCB0bV9mYWlsdXJlcyk7CisJYmZhX2NiX3Rza2ltX2RvbmUodHNraW0tPmJmYS0+YmZhZCwgdHNraW0tPmR0c2ssCisJCQkgICBCRklfVFNLSU1fU1RTX0ZBSUxFRCk7Cit9CisKK3N0YXRpYyAgICAgICAgICBiZmFfYm9vbGVhbl90CitiZmFfdHNraW1fbWF0Y2hfc2NvcGUoc3RydWN0IGJmYV90c2tpbV9zICp0c2tpbSwgbHVuX3QgbHVuKQoreworCXN3aXRjaCAodHNraW0tPnRtX2NtbmQpIHsKKwljYXNlIEZDUF9UTV9UQVJHRVRfUkVTRVQ6CisJCXJldHVybiBCRkFfVFJVRTsKKworCWNhc2UgRkNQX1RNX0FCT1JUX1RBU0tfU0VUOgorCWNhc2UgRkNQX1RNX0NMRUFSX1RBU0tfU0VUOgorCWNhc2UgRkNQX1RNX0xVTl9SRVNFVDoKKwljYXNlIEZDUF9UTV9DTEVBUl9BQ0E6CisJCXJldHVybiAodHNraW0tPmx1biA9PSBsdW4pOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9CisKKwlyZXR1cm4gQkZBX0ZBTFNFOworfQorCisvKioKKyAqICAgICAgR2F0aGVyIGFmZmVjdGVkIElPIHJlcXVlc3RzIGFuZCB0YXNrIG1hbmFnZW1lbnQgY29tbWFuZHMuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfdHNraW1fZ2F0aGVyX2lvcyhzdHJ1Y3QgYmZhX3Rza2ltX3MgKnRza2ltKQoreworCXN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0gPSB0c2tpbS0+aXRuaW07CisJc3RydWN0IGJmYV9pb2ltX3MgKmlvaW07CisJc3RydWN0IGxpc3RfaGVhZCAgICAgICAgKnFlLCAqcWVuOworCisJSU5JVF9MSVNUX0hFQUQoJnRza2ltLT5pb19xKTsKKworCS8qKgorCSAqIEdhdGhlciBhbnkgYWN0aXZlIElPIHJlcXVlc3RzIGZpcnN0LgorCSAqLworCWxpc3RfZm9yX2VhY2hfc2FmZShxZSwgcWVuLCAmaXRuaW0tPmlvX3EpIHsKKwkJaW9pbSA9IChzdHJ1Y3QgYmZhX2lvaW1fcyAqKSBxZTsKKwkJaWYgKGJmYV90c2tpbV9tYXRjaF9zY29wZQorCQkgICAgKHRza2ltLCBiZmFfY2JfaW9pbV9nZXRfbHVuKGlvaW0tPmRpbykpKSB7CisJCQlsaXN0X2RlbCgmaW9pbS0+cWUpOworCQkJbGlzdF9hZGRfdGFpbCgmaW9pbS0+cWUsICZ0c2tpbS0+aW9fcSk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBGYWlsYmFjayBhbnkgcGVuZGluZyBJTyByZXF1ZXN0cyBpbW1lZGlhdGVseS4KKwkgKi8KKwlsaXN0X2Zvcl9lYWNoX3NhZmUocWUsIHFlbiwgJml0bmltLT5wZW5kaW5nX3EpIHsKKwkJaW9pbSA9IChzdHJ1Y3QgYmZhX2lvaW1fcyAqKSBxZTsKKwkJaWYgKGJmYV90c2tpbV9tYXRjaF9zY29wZQorCQkgICAgKHRza2ltLCBiZmFfY2JfaW9pbV9nZXRfbHVuKGlvaW0tPmRpbykpKSB7CisJCQlsaXN0X2RlbCgmaW9pbS0+cWUpOworCQkJbGlzdF9hZGRfdGFpbCgmaW9pbS0+cWUsICZpb2ltLT5mY3BpbS0+aW9pbV9jb21wX3EpOworCQkJYmZhX2lvaW1fdG92KGlvaW0pOworCQl9CisJfQorfQorCisvKioKKyAqIAkJSU8gY2xlYW51cCBjb21wbGV0aW9uCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfdHNraW1fY2xlYW5wX2NvbXAodm9pZCAqdHNraW1fY2JhcmcpCit7CisJc3RydWN0IGJmYV90c2tpbV9zICp0c2tpbSA9IHRza2ltX2NiYXJnOworCisJYmZhX3N0YXRzKHRza2ltLT5pdG5pbSwgdG1faW9fY29tcHMpOworCWJmYV9zbV9zZW5kX2V2ZW50KHRza2ltLCBCRkFfVFNLSU1fU01fSU9TX0RPTkUpOworfQorCisvKioKKyAqICAgICAgR2F0aGVyIGFmZmVjdGVkIElPIHJlcXVlc3RzIGFuZCB0YXNrIG1hbmFnZW1lbnQgY29tbWFuZHMuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfdHNraW1fY2xlYW51cF9pb3Moc3RydWN0IGJmYV90c2tpbV9zICp0c2tpbSkKK3sKKwlzdHJ1Y3QgYmZhX2lvaW1fcyAqaW9pbTsKKwlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICAqcWUsICpxZW47CisKKwliZmFfd2NfaW5pdCgmdHNraW0tPndjLCBiZmFfdHNraW1fY2xlYW5wX2NvbXAsIHRza2ltKTsKKworCWxpc3RfZm9yX2VhY2hfc2FmZShxZSwgcWVuLCAmdHNraW0tPmlvX3EpIHsKKwkJaW9pbSA9IChzdHJ1Y3QgYmZhX2lvaW1fcyAqKSBxZTsKKwkJYmZhX3djX3VwKCZ0c2tpbS0+d2MpOworCQliZmFfaW9pbV9jbGVhbnVwX3RtKGlvaW0sIHRza2ltKTsKKwl9CisKKwliZmFfd2Nfd2FpdCgmdHNraW0tPndjKTsKK30KKworLyoqCisgKiAgICAgIFNlbmQgdGFzayBtYW5hZ2VtZW50IHJlcXVlc3QgdG8gZmlybXdhcmUuCisgKi8KK3N0YXRpYyBiZmFfYm9vbGVhbl90CitiZmFfdHNraW1fc2VuZChzdHJ1Y3QgYmZhX3Rza2ltX3MgKnRza2ltKQoreworCXN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0gPSB0c2tpbS0+aXRuaW07CisJc3RydWN0IGJmaV90c2tpbV9yZXFfcyAqbTsKKworCS8qKgorCSAqIGNoZWNrIGZvciByb29tIGluIHF1ZXVlIHRvIHNlbmQgcmVxdWVzdCBub3cKKwkgKi8KKwltID0gYmZhX3JlcXFfbmV4dCh0c2tpbS0+YmZhLCBpdG5pbS0+cmVxcSk7CisJaWYgKCFtKQorCQlyZXR1cm4gQkZBX0ZBTFNFOworCisJLyoqCisJICogYnVpbGQgaS9vIHJlcXVlc3QgbWVzc2FnZSBuZXh0CisJICovCisJYmZpX2gyaV9zZXQobS0+bWgsIEJGSV9NQ19UU0tJTSwgQkZJX1RTS0lNX0gySV9UTV9SRVEsCisJCQliZmFfbHB1aWQodHNraW0tPmJmYSkpOworCisJbS0+dHNrX3RhZyA9IGJmYV9vc19odG9ucyh0c2tpbS0+dHNrX3RhZyk7CisJbS0+aXRuX2ZoZGwgPSB0c2tpbS0+aXRuaW0tPnJwb3J0LT5md19oYW5kbGU7CisJbS0+dF9zZWNzID0gdHNraW0tPnRzZWNzOworCW0tPmx1biA9IHRza2ltLT5sdW47CisJbS0+dG1fZmxhZ3MgPSB0c2tpbS0+dG1fY21uZDsKKworCS8qKgorCSAqIHF1ZXVlIEkvTyBtZXNzYWdlIHRvIGZpcm13YXJlCisJICovCisJYmZhX3JlcXFfcHJvZHVjZSh0c2tpbS0+YmZhLCBpdG5pbS0+cmVxcSk7CisJcmV0dXJuIEJGQV9UUlVFOworfQorCisvKioKKyAqICAgICAgU2VuZCBhYm9ydCByZXF1ZXN0IHRvIGNsZWFudXAgYW4gYWN0aXZlIFRNIHRvIGZpcm13YXJlLgorICovCitzdGF0aWMgYmZhX2Jvb2xlYW5fdAorYmZhX3Rza2ltX3NlbmRfYWJvcnQoc3RydWN0IGJmYV90c2tpbV9zICp0c2tpbSkKK3sKKwlzdHJ1Y3QgYmZhX2l0bmltX3MgICAgICAgICAgICAgKml0bmltID0gdHNraW0tPml0bmltOworCXN0cnVjdCBiZmlfdHNraW1fYWJvcnRyZXFfcyAgICAqbTsKKworCS8qKgorCSAqIGNoZWNrIGZvciByb29tIGluIHF1ZXVlIHRvIHNlbmQgcmVxdWVzdCBub3cKKwkgKi8KKwltID0gYmZhX3JlcXFfbmV4dCh0c2tpbS0+YmZhLCBpdG5pbS0+cmVxcSk7CisJaWYgKCFtKQorCQlyZXR1cm4gQkZBX0ZBTFNFOworCisJLyoqCisJICogYnVpbGQgaS9vIHJlcXVlc3QgbWVzc2FnZSBuZXh0CisJICovCisJYmZpX2gyaV9zZXQobS0+bWgsIEJGSV9NQ19UU0tJTSwgQkZJX1RTS0lNX0gySV9BQk9SVF9SRVEsCisJCQliZmFfbHB1aWQodHNraW0tPmJmYSkpOworCisJbS0+dHNrX3RhZyAgPSBiZmFfb3NfaHRvbnModHNraW0tPnRza190YWcpOworCisJLyoqCisJICogcXVldWUgSS9PIG1lc3NhZ2UgdG8gZmlybXdhcmUKKwkgKi8KKwliZmFfcmVxcV9wcm9kdWNlKHRza2ltLT5iZmEsIGl0bmltLT5yZXFxKTsKKwlyZXR1cm4gQkZBX1RSVUU7Cit9CisKKy8qKgorICogICAgICBDYWxsIHRvIHJlc3VtZSB0YXNrIG1hbmFnZW1lbnQgY21uZCB3YWl0aW5nIGZvciByb29tIGluIHJlcXVlc3QgcXVldWUuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfdHNraW1fcXJlc3VtZSh2b2lkICpjYmFyZykKK3sKKwlzdHJ1Y3QgYmZhX3Rza2ltX3MgKnRza2ltID0gY2Jhcmc7CisKKwliZmFfZmNwaW1fc3RhdHModHNraW0tPmZjcGltLCBxcmVzdW1lcyk7CisJYmZhX3N0YXRzKHRza2ltLT5pdG5pbSwgdG1fcXJlc3VtZXMpOworCWJmYV9zbV9zZW5kX2V2ZW50KHRza2ltLCBCRkFfVFNLSU1fU01fUVJFU1VNRSk7Cit9CisKKy8qKgorICogQ2xlYW51cCBJT3MgYXNzb2NpYXRlZCB3aXRoIGEgdGFzayBtYW5nZW1lbnQgY29tbWFuZCBvbiBJT0MgZmFpbHVyZXMuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfdHNraW1faW9jZGlzYWJsZV9pb3Moc3RydWN0IGJmYV90c2tpbV9zICp0c2tpbSkKK3sKKwlzdHJ1Y3QgYmZhX2lvaW1fcyAqaW9pbTsKKwlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICAqcWUsICpxZW47CisKKwlsaXN0X2Zvcl9lYWNoX3NhZmUocWUsIHFlbiwgJnRza2ltLT5pb19xKSB7CisJCWlvaW0gPSAoc3RydWN0IGJmYV9pb2ltX3MgKikgcWU7CisJCWJmYV9pb2ltX2lvY2Rpc2FibGUoaW9pbSk7CisJfQorfQorCisKKworLyoqCisgKiAgYmZhX3Rza2ltX2ZyaWVuZAorICovCisKKy8qKgorICogTm90aWZpY2F0aW9uIG9uIGNvbXBsZXRpb25zIGZyb20gcmVsYXRlZCBpb2ltLgorICovCit2b2lkCitiZmFfdHNraW1faW9kb25lKHN0cnVjdCBiZmFfdHNraW1fcyAqdHNraW0pCit7CisJYmZhX3djX2Rvd24oJnRza2ltLT53Yyk7Cit9CisKKy8qKgorICogSGFuZGxlIElPQyBoL3cgZmFpbHVyZSBub3RpZmljYXRpb24gZnJvbSBpdG5pbS4KKyAqLwordm9pZAorYmZhX3Rza2ltX2lvY2Rpc2FibGUoc3RydWN0IGJmYV90c2tpbV9zICp0c2tpbSkKK3sKKwl0c2tpbS0+bm90aWZ5ID0gQkZBX0ZBTFNFOworCWJmYV9zdGF0cyh0c2tpbS0+aXRuaW0sIHRtX2lvY2Rvd25zKTsKKwliZmFfc21fc2VuZF9ldmVudCh0c2tpbSwgQkZBX1RTS0lNX1NNX0hXRkFJTCk7Cit9CisKKy8qKgorICogQ2xlYW51cCBUTSBjb21tYW5kIGFuZCBhc3NvY2lhdGVkIElPcyBhcyBwYXJ0IG9mIElUTklNIG9mZmxpbmUuCisgKi8KK3ZvaWQKK2JmYV90c2tpbV9jbGVhbnVwKHN0cnVjdCBiZmFfdHNraW1fcyAqdHNraW0pCit7CisJdHNraW0tPm5vdGlmeSA9IEJGQV9UUlVFOworCWJmYV9zdGF0cyh0c2tpbS0+aXRuaW0sIHRtX2NsZWFudXBzKTsKKwliZmFfc21fc2VuZF9ldmVudCh0c2tpbSwgQkZBX1RTS0lNX1NNX0NMRUFOVVApOworfQorCisvKioKKyAqICAgICAgTWVtb3J5IGFsbG9jYXRpb24gYW5kIGluaXRpYWxpemF0aW9uLgorICovCit2b2lkCitiZmFfdHNraW1fYXR0YWNoKHN0cnVjdCBiZmFfZmNwaW1fbW9kX3MgKmZjcGltLCBzdHJ1Y3QgYmZhX21lbWluZm9fcyAqbWluZm8pCit7CisJc3RydWN0IGJmYV90c2tpbV9zICp0c2tpbTsKKwl1MTYgICAgICAgIGk7CisKKwlJTklUX0xJU1RfSEVBRCgmZmNwaW0tPnRza2ltX2ZyZWVfcSk7CisKKwl0c2tpbSA9IChzdHJ1Y3QgYmZhX3Rza2ltX3MgKikgYmZhX21lbWluZm9fa3ZhKG1pbmZvKTsKKwlmY3BpbS0+dHNraW1fYXJyID0gdHNraW07CisKKwlmb3IgKGkgPSAwOyBpIDwgZmNwaW0tPm51bV90c2tpbV9yZXFzOyBpKyssIHRza2ltKyspIHsKKwkJLyoKKwkJICogaW5pdGlhbGl6ZSBUU0tJTQorCQkgKi8KKwkJYmZhX29zX21lbXNldCh0c2tpbSwgMCwgc2l6ZW9mKHN0cnVjdCBiZmFfdHNraW1fcykpOworCQl0c2tpbS0+dHNrX3RhZyA9IGk7CisJCXRza2ltLT5iZmEgICAgID0gZmNwaW0tPmJmYTsKKwkJdHNraW0tPmZjcGltICAgPSBmY3BpbTsKKwkJdHNraW0tPm5vdGlmeSAgPSBCRkFfRkFMU0U7CisJCWJmYV9yZXFxX3dpbml0KCZ0c2tpbS0+cmVxcV93YWl0LCBiZmFfdHNraW1fcXJlc3VtZSwKKwkJCQkgICB0c2tpbSk7CisJCWJmYV9zbV9zZXRfc3RhdGUodHNraW0sIGJmYV90c2tpbV9zbV91bmluaXQpOworCisJCWxpc3RfYWRkX3RhaWwoJnRza2ltLT5xZSwgJmZjcGltLT50c2tpbV9mcmVlX3EpOworCX0KKworCWJmYV9tZW1pbmZvX2t2YShtaW5mbykgPSAodTggKikgdHNraW07Cit9CisKK3ZvaWQKK2JmYV90c2tpbV9kZXRhY2goc3RydWN0IGJmYV9mY3BpbV9tb2RfcyAqZmNwaW0pCit7CisgICAgLyoqCisgICAgICogQHRvZG8KKyAgICAgKi8KK30KKwordm9pZAorYmZhX3Rza2ltX2lzcihzdHJ1Y3QgYmZhX3MgKmJmYSwgc3RydWN0IGJmaV9tc2dfcyAqbSkKK3sKKwlzdHJ1Y3QgYmZhX2ZjcGltX21vZF9zICpmY3BpbSA9IEJGQV9GQ1BJTV9NT0QoYmZhKTsKKwlzdHJ1Y3QgYmZpX3Rza2ltX3JzcF9zICpyc3AgPSAoc3RydWN0IGJmaV90c2tpbV9yc3BfcyAqKSBtOworCXN0cnVjdCBiZmFfdHNraW1fcyAqdHNraW07CisJdTE2ICAgICAgICB0c2tfdGFnID0gYmZhX29zX250b2hzKHJzcC0+dHNrX3RhZyk7CisKKwl0c2tpbSA9IEJGQV9UU0tJTV9GUk9NX1RBRyhmY3BpbSwgdHNrX3RhZyk7CisJYmZhX2Fzc2VydCh0c2tpbS0+dHNrX3RhZyA9PSB0c2tfdGFnKTsKKworCXRza2ltLT50c2tfc3RhdHVzID0gcnNwLT50c2tfc3RhdHVzOworCisJLyoqCisJICogRmlybXdhcmUgc2VuZHMgQkZJX1RTS0lNX1NUU19BQk9SVEVEIHN0YXR1cyBmb3IgYWJvcnQKKwkgKiByZXF1ZXN0cy4gQWxsIG90aGVyIHN0YXR1c2VzIGFyZSBmb3Igbm9ybWFsIGNvbXBsZXRpb25zLgorCSAqLworCWlmIChyc3AtPnRza19zdGF0dXMgPT0gQkZJX1RTS0lNX1NUU19BQk9SVEVEKSB7CisJCWJmYV9zdGF0cyh0c2tpbS0+aXRuaW0sIHRtX2NsZWFudXBfY29tcHMpOworCQliZmFfc21fc2VuZF9ldmVudCh0c2tpbSwgQkZBX1RTS0lNX1NNX0NMRUFOVVBfRE9ORSk7CisJfSBlbHNlIHsKKwkJYmZhX3N0YXRzKHRza2ltLT5pdG5pbSwgdG1fZndfcnNwcyk7CisJCWJmYV9zbV9zZW5kX2V2ZW50KHRza2ltLCBCRkFfVFNLSU1fU01fRE9ORSk7CisJfQorfQorCisKKworLyoqCisgKiAgYmZhX3Rza2ltX2FwaQorICovCisKKworc3RydWN0IGJmYV90c2tpbV9zICoKK2JmYV90c2tpbV9hbGxvYyhzdHJ1Y3QgYmZhX3MgKmJmYSwgc3RydWN0IGJmYWRfdHNraW1fcyAqZHRzaykKK3sKKwlzdHJ1Y3QgYmZhX2ZjcGltX21vZF9zICpmY3BpbSA9IEJGQV9GQ1BJTV9NT0QoYmZhKTsKKwlzdHJ1Y3QgYmZhX3Rza2ltX3MgKnRza2ltOworCisJYmZhX3FfZGVxKCZmY3BpbS0+dHNraW1fZnJlZV9xLCAmdHNraW0pOworCisJaWYgKCF0c2tpbSkKKwkJYmZhX2ZjcGltX3N0YXRzKGZjcGltLCBub190c2tpbXMpOworCWVsc2UKKwkJdHNraW0tPmR0c2sgPSBkdHNrOworCisJcmV0dXJuIHRza2ltOworfQorCit2b2lkCitiZmFfdHNraW1fZnJlZShzdHJ1Y3QgYmZhX3Rza2ltX3MgKnRza2ltKQoreworCWJmYV9hc3NlcnQoYmZhX3FfaXNfb25fcV9mdW5jKCZ0c2tpbS0+aXRuaW0tPnRza19xLCAmdHNraW0tPnFlKSk7CisJbGlzdF9kZWwoJnRza2ltLT5xZSk7CisJbGlzdF9hZGRfdGFpbCgmdHNraW0tPnFlLCAmdHNraW0tPmZjcGltLT50c2tpbV9mcmVlX3EpOworfQorCisvKioKKyAqICAgICAgU3RhcnQgYSB0YXNrIG1hbmFnZW1lbnQgY29tbWFuZC4KKyAqCisgKiBAcGFyYW1baW5dICAgICAgIHRza2ltICAgICAgIEJGQSB0YXNrIG1hbmFnZW1lbnQgY29tbWFuZCBpbnN0YW5jZQorICogQHBhcmFtW2luXSAgICAgICBpdG5pbSAgICAgICBpLXQgbmV4dXMgZm9yIHRoZSB0YXNrIG1hbmFnZW1lbnQgY29tbWFuZAorICogQHBhcmFtW2luXSAgICAgICBsdW4gICAgICAgICBsdW4sIGlmIGFwcGxpY2FibGUKKyAqIEBwYXJhbVtpbl0gICAgICAgdG1fY21uZCAgICAgVGFzayBtYW5hZ2VtZW50IGNvbW1hbmQgY29kZS4KKyAqIEBwYXJhbVtpbl0gICAgICAgdF9zZWNzICAgICAgVGltZW91dCBpbiBzZWNvbmRzCisgKgorICogQHJldHVybiBOb25lLgorICovCit2b2lkCitiZmFfdHNraW1fc3RhcnQoc3RydWN0IGJmYV90c2tpbV9zICp0c2tpbSwgc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSwgbHVuX3QgbHVuLAorCQkgICAgZW51bSBmY3BfdG1fY21uZCB0bV9jbW5kLCB1OCB0c2VjcykKK3sKKwl0c2tpbS0+aXRuaW0gICA9IGl0bmltOworCXRza2ltLT5sdW4gICAgID0gbHVuOworCXRza2ltLT50bV9jbW5kID0gdG1fY21uZDsKKwl0c2tpbS0+dHNlY3MgICA9IHRzZWNzOworCXRza2ltLT5ub3RpZnkgID0gQkZBX0ZBTFNFOworCWJmYV9zdGF0cyhpdG5pbSwgdG1fY21uZHMpOworCisJbGlzdF9hZGRfdGFpbCgmdHNraW0tPnFlLCAmaXRuaW0tPnRza19xKTsKKwliZmFfc21fc2VuZF9ldmVudCh0c2tpbSwgQkZBX1RTS0lNX1NNX1NUQVJUKTsKK30KKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2JmYV91Zi5jIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfdWYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjVmOWRlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfdWYuYwpAQCAtMCwwICsxLDM0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisvKioKKyAqICBiZmFfdWYuYyBCRkEgdW5zb2xpY2l0ZWQgZnJhbWUgcmVjZWl2ZSBpbXBsZW1lbnRhdGlvbgorICovCisKKyNpbmNsdWRlIDxiZmEuaD4KKyNpbmNsdWRlIDxiZmFfc3ZjLmg+CisjaW5jbHVkZSA8YmZpL2JmaV91Zi5oPgorI2luY2x1ZGUgPGNzL2JmYV9kZWJ1Zy5oPgorCitCRkFfVFJDX0ZJTEUoSEFMLCBVRik7CitCRkFfTU9EVUxFKHVmKTsKKworLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogSW50ZXJuYWwgZnVuY3Rpb25zCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworc3RhdGljIHZvaWQKK19fYmZhX2NiX3VmX3JlY3Yodm9pZCAqY2JhcmcsIGJmYV9ib29sZWFuX3QgY29tcGxldGUpCit7CisJc3RydWN0IGJmYV91Zl9zICAgKnVmID0gY2Jhcmc7CisJc3RydWN0IGJmYV91Zl9tb2RfcyAqdWZtID0gQkZBX1VGX01PRCh1Zi0+YmZhKTsKKworCWlmIChjb21wbGV0ZSkKKwkJdWZtLT51ZnJlY3YodWZtLT5jYmFyZywgdWYpOworfQorCitzdGF0aWMgdm9pZAorY2xhaW1fdWZfcGJzKHN0cnVjdCBiZmFfdWZfbW9kX3MgKnVmbSwgc3RydWN0IGJmYV9tZW1pbmZvX3MgKm1pKQoreworCXUzMiAgICAgICAgdWZfcGJfdG90X3N6OworCisJdWZtLT51Zl9wYnNfa3ZhID0gKHN0cnVjdCBiZmFfdWZfYnVmX3MgKikgYmZhX21lbWluZm9fZG1hX3ZpcnQobWkpOworCXVmbS0+dWZfcGJzX3BhID0gYmZhX21lbWluZm9fZG1hX3BoeXMobWkpOworCXVmX3BiX3RvdF9zeiA9IEJGQV9ST1VORFVQKChzaXplb2Yoc3RydWN0IGJmYV91Zl9idWZfcykgKiB1Zm0tPm51bV91ZnMpLAorCQkJCQkJCUJGQV9ETUFfQUxJR05fU1opOworCisJYmZhX21lbWluZm9fZG1hX3ZpcnQobWkpICs9IHVmX3BiX3RvdF9zejsKKwliZmFfbWVtaW5mb19kbWFfcGh5cyhtaSkgKz0gdWZfcGJfdG90X3N6OworCisJYmZhX29zX21lbXNldCgodm9pZCAqKXVmbS0+dWZfcGJzX2t2YSwgMCwgdWZfcGJfdG90X3N6KTsKK30KKworc3RhdGljIHZvaWQKK2NsYWltX3VmX3Bvc3RfbXNncyhzdHJ1Y3QgYmZhX3VmX21vZF9zICp1Zm0sIHN0cnVjdCBiZmFfbWVtaW5mb19zICptaSkKK3sKKwlzdHJ1Y3QgYmZpX3VmX2J1Zl9wb3N0X3MgKnVmX2JwX21zZzsKKwlzdHJ1Y3QgYmZpX3NnZV9zICAgICAgKnNnZTsKKwl1bmlvbiBiZmlfYWRkcl91ICAgICAgc2dhX3plcm8gPSB7IHswfSB9OworCXUxNiAgICAgICAgaTsKKwl1MTYgICAgICAgIGJ1Zl9sZW47CisKKwl1Zm0tPnVmX2J1Zl9wb3N0cyA9IChzdHJ1Y3QgYmZpX3VmX2J1Zl9wb3N0X3MgKikgYmZhX21lbWluZm9fa3ZhKG1pKTsKKwl1Zl9icF9tc2cgPSB1Zm0tPnVmX2J1Zl9wb3N0czsKKworCWZvciAoaSA9IDAsIHVmX2JwX21zZyA9IHVmbS0+dWZfYnVmX3Bvc3RzOyBpIDwgdWZtLT5udW1fdWZzOworCSAgICAgaSsrLCB1Zl9icF9tc2crKykgeworCQliZmFfb3NfbWVtc2V0KHVmX2JwX21zZywgMCwgc2l6ZW9mKHN0cnVjdCBiZmlfdWZfYnVmX3Bvc3RfcykpOworCisJCXVmX2JwX21zZy0+YnVmX3RhZyA9IGk7CisJCWJ1Zl9sZW4gPSBzaXplb2Yoc3RydWN0IGJmYV91Zl9idWZfcyk7CisJCXVmX2JwX21zZy0+YnVmX2xlbiA9IGJmYV9vc19odG9ucyhidWZfbGVuKTsKKwkJYmZpX2gyaV9zZXQodWZfYnBfbXNnLT5taCwgQkZJX01DX1VGLCBCRklfVUZfSDJJX0JVRl9QT1NULAorCQkJICAgIGJmYV9scHVpZCh1Zm0tPmJmYSkpOworCisJCXNnZSA9IHVmX2JwX21zZy0+c2dlOworCQlzZ2VbMF0uc2dfbGVuID0gYnVmX2xlbjsKKwkJc2dlWzBdLmZsYWdzID0gQkZJX1NHRV9EQVRBX0xBU1Q7CisJCWJmYV9kbWFfYWRkcl9zZXQoc2dlWzBdLnNnYSwgdWZtX3Bic19wYSh1Zm0sIGkpKTsKKwkJYmZhX3NnZV90b19iZShzZ2UpOworCisJCXNnZVsxXS5zZ19sZW4gPSBidWZfbGVuOworCQlzZ2VbMV0uZmxhZ3MgPSBCRklfU0dFX1BHRExFTjsKKwkJc2dlWzFdLnNnYSA9IHNnYV96ZXJvOworCQliZmFfc2dlX3RvX2JlKCZzZ2VbMV0pOworCX0KKworCS8qKgorCSAqIGFkdmFuY2UgcG9pbnRlciBiZXlvbmQgY29uc3VtZWQgbWVtb3J5CisJICovCisJYmZhX21lbWluZm9fa3ZhKG1pKSA9ICh1OCAqKSB1Zl9icF9tc2c7Cit9CisKK3N0YXRpYyB2b2lkCitjbGFpbV91ZnMoc3RydWN0IGJmYV91Zl9tb2RfcyAqdWZtLCBzdHJ1Y3QgYmZhX21lbWluZm9fcyAqbWkpCit7CisJdTE2ICAgICAgICBpOworCXN0cnVjdCBiZmFfdWZfcyAgICp1ZjsKKworCS8qCisJICogQ2xhaW0gYmxvY2sgb2YgbWVtb3J5IGZvciBVRiBsaXN0CisJICovCisJdWZtLT51Zl9saXN0ID0gKHN0cnVjdCBiZmFfdWZfcyAqKSBiZmFfbWVtaW5mb19rdmEobWkpOworCisJLyoKKwkgKiBJbml0aWFsaXplIFVGcyBhbmQgcXVldWUgaXQgaW4gVUYgZnJlZSBxdWV1ZQorCSAqLworCWZvciAoaSA9IDAsIHVmID0gdWZtLT51Zl9saXN0OyBpIDwgdWZtLT5udW1fdWZzOyBpKyssIHVmKyspIHsKKwkJYmZhX29zX21lbXNldCh1ZiwgMCwgc2l6ZW9mKHN0cnVjdCBiZmFfdWZfcykpOworCQl1Zi0+YmZhID0gdWZtLT5iZmE7CisJCXVmLT51Zl90YWcgPSBpOworCQl1Zi0+cGJfbGVuID0gc2l6ZW9mKHN0cnVjdCBiZmFfdWZfYnVmX3MpOworCQl1Zi0+YnVmX2t2YSA9ICh2b2lkICopJnVmbS0+dWZfcGJzX2t2YVtpXTsKKwkJdWYtPmJ1Zl9wYSA9IHVmbV9wYnNfcGEodWZtLCBpKTsKKwkJbGlzdF9hZGRfdGFpbCgmdWYtPnFlLCAmdWZtLT51Zl9mcmVlX3EpOworCX0KKworCS8qKgorCSAqIGFkdmFuY2UgbWVtb3J5IHBvaW50ZXIKKwkgKi8KKwliZmFfbWVtaW5mb19rdmEobWkpID0gKHU4ICopIHVmOworfQorCitzdGF0aWMgdm9pZAordWZfbWVtX2NsYWltKHN0cnVjdCBiZmFfdWZfbW9kX3MgKnVmbSwgc3RydWN0IGJmYV9tZW1pbmZvX3MgKm1pKQoreworCWNsYWltX3VmX3Bicyh1Zm0sIG1pKTsKKwljbGFpbV91ZnModWZtLCBtaSk7CisJY2xhaW1fdWZfcG9zdF9tc2dzKHVmbSwgbWkpOworfQorCitzdGF0aWMgdm9pZAorYmZhX3VmX21lbWluZm8oc3RydWN0IGJmYV9pb2NmY19jZmdfcyAqY2ZnLCB1MzIgKm5kbV9sZW4sIHUzMiAqZG1fbGVuKQoreworCXUzMiAgICAgICAgbnVtX3VmcyA9IGNmZy0+ZndjZmcubnVtX3VmX2J1ZnM7CisKKwkvKgorCSAqIGRtYS1hYmxlIG1lbW9yeSBmb3IgVUYgcG9zdGVkIGJ1ZnMKKwkgKi8KKwkqZG1fbGVuICs9IEJGQV9ST1VORFVQKChzaXplb2Yoc3RydWN0IGJmYV91Zl9idWZfcykgKiBudW1fdWZzKSwKKwkJCQkJCQlCRkFfRE1BX0FMSUdOX1NaKTsKKworCS8qCisJICoga2VybmVsIFZpcnR1YWwgbWVtb3J5IGZvciBVRnMgYW5kIFVGIGJ1ZiBwb3N0IG1zZyBjb3BpZXMKKwkgKi8KKwkqbmRtX2xlbiArPSBzaXplb2Yoc3RydWN0IGJmYV91Zl9zKSAqIG51bV91ZnM7CisJKm5kbV9sZW4gKz0gc2l6ZW9mKHN0cnVjdCBiZmlfdWZfYnVmX3Bvc3RfcykgKiBudW1fdWZzOworfQorCitzdGF0aWMgdm9pZAorYmZhX3VmX2F0dGFjaChzdHJ1Y3QgYmZhX3MgKmJmYSwgdm9pZCAqYmZhZCwgc3RydWN0IGJmYV9pb2NmY19jZmdfcyAqY2ZnLAorCQkgIHN0cnVjdCBiZmFfbWVtaW5mb19zICptZW1pbmZvLCBzdHJ1Y3QgYmZhX3BjaWRldl9zICpwY2lkZXYpCit7CisJc3RydWN0IGJmYV91Zl9tb2RfcyAqdWZtID0gQkZBX1VGX01PRChiZmEpOworCisJYmZhX29zX21lbXNldCh1Zm0sIDAsIHNpemVvZihzdHJ1Y3QgYmZhX3VmX21vZF9zKSk7CisJdWZtLT5iZmEgPSBiZmE7CisJdWZtLT5udW1fdWZzID0gY2ZnLT5md2NmZy5udW1fdWZfYnVmczsKKwlJTklUX0xJU1RfSEVBRCgmdWZtLT51Zl9mcmVlX3EpOworCUlOSVRfTElTVF9IRUFEKCZ1Zm0tPnVmX3Bvc3RlZF9xKTsKKworCXVmX21lbV9jbGFpbSh1Zm0sIG1lbWluZm8pOworfQorCitzdGF0aWMgdm9pZAorYmZhX3VmX2luaXRkb25lKHN0cnVjdCBiZmFfcyAqYmZhKQoreworfQorCitzdGF0aWMgdm9pZAorYmZhX3VmX2RldGFjaChzdHJ1Y3QgYmZhX3MgKmJmYSkKK3sKK30KKworc3RhdGljIHN0cnVjdCBiZmFfdWZfcyAqCitiZmFfdWZfZ2V0KHN0cnVjdCBiZmFfdWZfbW9kX3MgKnVmX21vZCkKK3sKKwlzdHJ1Y3QgYmZhX3VmX3MgICAqdWY7CisKKwliZmFfcV9kZXEoJnVmX21vZC0+dWZfZnJlZV9xLCAmdWYpOworCXJldHVybiAodWYpOworfQorCitzdGF0aWMgdm9pZAorYmZhX3VmX3B1dChzdHJ1Y3QgYmZhX3VmX21vZF9zICp1Zl9tb2QsIHN0cnVjdCBiZmFfdWZfcyAqdWYpCit7CisJbGlzdF9hZGRfdGFpbCgmdWYtPnFlLCAmdWZfbW9kLT51Zl9mcmVlX3EpOworfQorCitzdGF0aWMgYmZhX3N0YXR1c190CitiZmFfdWZfcG9zdChzdHJ1Y3QgYmZhX3VmX21vZF9zICp1Zm0sIHN0cnVjdCBiZmFfdWZfcyAqdWYpCit7CisJc3RydWN0IGJmaV91Zl9idWZfcG9zdF9zICp1Zl9wb3N0X21zZzsKKworCXVmX3Bvc3RfbXNnID0gYmZhX3JlcXFfbmV4dCh1Zm0tPmJmYSwgQkZBX1JFUVFfRkNYUCk7CisJaWYgKCF1Zl9wb3N0X21zZykKKwkJcmV0dXJuIEJGQV9TVEFUVVNfRkFJTEVEOworCisJYmZhX29zX21lbWNweSh1Zl9wb3N0X21zZywgJnVmbS0+dWZfYnVmX3Bvc3RzW3VmLT51Zl90YWddLAorCQkgICAgICBzaXplb2Yoc3RydWN0IGJmaV91Zl9idWZfcG9zdF9zKSk7CisJYmZhX3JlcXFfcHJvZHVjZSh1Zm0tPmJmYSwgQkZBX1JFUVFfRkNYUCk7CisKKwliZmFfdHJjKHVmbS0+YmZhLCB1Zi0+dWZfdGFnKTsKKworCWxpc3RfYWRkX3RhaWwoJnVmLT5xZSwgJnVmbS0+dWZfcG9zdGVkX3EpOworCXJldHVybiBCRkFfU1RBVFVTX09LOworfQorCitzdGF0aWMgdm9pZAorYmZhX3VmX3Bvc3RfYWxsKHN0cnVjdCBiZmFfdWZfbW9kX3MgKnVmX21vZCkKK3sKKwlzdHJ1Y3QgYmZhX3VmX3MgICAqdWY7CisKKwl3aGlsZSAoKHVmID0gYmZhX3VmX2dldCh1Zl9tb2QpKSAhPSBOVUxMKSB7CisJCWlmIChiZmFfdWZfcG9zdCh1Zl9tb2QsIHVmKSAhPSBCRkFfU1RBVFVTX09LKQorCQkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgdm9pZAordWZfcmVjdihzdHJ1Y3QgYmZhX3MgKmJmYSwgc3RydWN0IGJmaV91Zl9mcm1fcmN2ZF9zICptKQoreworCXN0cnVjdCBiZmFfdWZfbW9kX3MgKnVmbSA9IEJGQV9VRl9NT0QoYmZhKTsKKwl1MTYgICAgICAgIHVmX3RhZyA9IG0tPmJ1Zl90YWc7CisJc3RydWN0IGJmYV91Zl9idWZfcyAqdWZfYnVmID0gJnVmbS0+dWZfcGJzX2t2YVt1Zl90YWddOworCXN0cnVjdCBiZmFfdWZfcyAgICp1ZiA9ICZ1Zm0tPnVmX2xpc3RbdWZfdGFnXTsKKwl1OCAgICAgICAgKmJ1ZiA9ICZ1Zl9idWYtPmRbMF07CisJc3RydWN0IGZjaHNfcyAgICAgICAgICpmY2hzOworCisJbS0+ZnJtX2xlbiA9IGJmYV9vc19udG9ocyhtLT5mcm1fbGVuKTsKKwltLT54ZnJfbGVuID0gYmZhX29zX250b2hzKG0tPnhmcl9sZW4pOworCisJZmNocyA9IChzdHJ1Y3QgZmNoc19zICopIHVmX2J1ZjsKKworCWxpc3RfZGVsKCZ1Zi0+cWUpOwkvKiBkZXF1ZXVlIGZyb20gcG9zdGVkIHF1ZXVlICovCisKKwl1Zi0+ZGF0YV9wdHIgPSBidWY7CisJdWYtPmRhdGFfbGVuID0gbS0+eGZyX2xlbjsKKworCWJmYV9hc3NlcnQodWYtPmRhdGFfbGVuID49IHNpemVvZihzdHJ1Y3QgZmNoc19zKSk7CisKKwlpZiAodWYtPmRhdGFfbGVuID09IHNpemVvZihzdHJ1Y3QgZmNoc19zKSkgeworCQliZmFfcGxvZ19mY2hkcihiZmEtPnBsb2csIEJGQV9QTF9NSURfSEFMX1VGLCBCRkFfUExfRUlEX1JYLAorCQkJICAgICAgIHVmLT5kYXRhX2xlbiwgKHN0cnVjdCBmY2hzX3MgKikgYnVmKTsKKwl9IGVsc2UgeworCQl1MzIgICAgICAgIHBsZF93MCA9ICooKHUzMiAqKSAoYnVmICsgc2l6ZW9mKHN0cnVjdCBmY2hzX3MpKSk7CisJCWJmYV9wbG9nX2ZjaGRyX2FuZF9wbChiZmEtPnBsb2csIEJGQV9QTF9NSURfSEFMX1VGLAorCQkJCSAgICAgIEJGQV9QTF9FSURfUlgsIHVmLT5kYXRhX2xlbiwKKwkJCQkgICAgICAoc3RydWN0IGZjaHNfcyAqKSBidWYsIHBsZF93MCk7CisJfQorCisJYmZhX2NiX3F1ZXVlKGJmYSwgJnVmLT5oY2JfcWUsIF9fYmZhX2NiX3VmX3JlY3YsIHVmKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV91Zl9zdG9wKHN0cnVjdCBiZmFfcyAqYmZhKQoreworfQorCitzdGF0aWMgdm9pZAorYmZhX3VmX2lvY2Rpc2FibGUoc3RydWN0IGJmYV9zICpiZmEpCit7CisJc3RydWN0IGJmYV91Zl9tb2RfcyAqdWZtID0gQkZBX1VGX01PRChiZmEpOworCXN0cnVjdCBiZmFfdWZfcyAgICp1ZjsKKwlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICAqcWUsICpxZW47CisKKwlsaXN0X2Zvcl9lYWNoX3NhZmUocWUsIHFlbiwgJnVmbS0+dWZfcG9zdGVkX3EpIHsKKwkJdWYgPSAoc3RydWN0IGJmYV91Zl9zICopIHFlOworCQlsaXN0X2RlbCgmdWYtPnFlKTsKKwkJYmZhX3VmX3B1dCh1Zm0sIHVmKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfdWZfc3RhcnQoc3RydWN0IGJmYV9zICpiZmEpCit7CisJYmZhX3VmX3Bvc3RfYWxsKEJGQV9VRl9NT0QoYmZhKSk7Cit9CisKKworCisvKioKKyAqICBiZmFfdWZfYXBpCisgKi8KKworLyoqCisgKiAJCVJlZ2lzdGVyIGhhbmRsZXIgZm9yIGFsbCB1bnNvbGljdGVkIHJlY2lldmUgZnJhbWVzLgorICoKKyAqIEBwYXJhbVtpbl0JYmZhCQlCRkEgaW5zdGFuY2UKKyAqIEBwYXJhbVtpbl0JdWZyZWN2CXJlY2VpdmUgaGFuZGxlciBmdW5jdGlvbgorICogQHBhcmFtW2luXQljYmFyZwlyZWNlaXZlIGhhbmRsZXIgYXJnCisgKi8KK3ZvaWQKK2JmYV91Zl9yZWN2X3JlZ2lzdGVyKHN0cnVjdCBiZmFfcyAqYmZhLCBiZmFfY2JfdWZfcmVjdl90IHVmcmVjdiwgdm9pZCAqY2JhcmcpCit7CisJc3RydWN0IGJmYV91Zl9tb2RfcyAqdWZtID0gQkZBX1VGX01PRChiZmEpOworCisJdWZtLT51ZnJlY3YgPSB1ZnJlY3Y7CisJdWZtLT5jYmFyZyA9IGNiYXJnOworfQorCisvKioKKyAqIAkJRnJlZSBhbiB1bnNvbGljaXRlZCBmcmFtZSBiYWNrIHRvIEJGQS4KKyAqCisgKiBAcGFyYW1baW5dCQl1ZgkJdW5zb2xpY2l0ZWQgZnJhbWUgdG8gYmUgZnJlZWQKKyAqCisgKiBAcmV0dXJuIE5vbmUKKyAqLwordm9pZAorYmZhX3VmX2ZyZWUoc3RydWN0IGJmYV91Zl9zICp1ZikKK3sKKwliZmFfdWZfcHV0KEJGQV9VRl9NT0QodWYtPmJmYSksIHVmKTsKKwliZmFfdWZfcG9zdF9hbGwoQkZBX1VGX01PRCh1Zi0+YmZhKSk7Cit9CisKKworCisvKioKKyAqICB1Zl9wdWIgQkZBIHVmIG1vZHVsZSBwdWJsaWMgZnVuY3Rpb25zCisgKi8KKwordm9pZAorYmZhX3VmX2lzcihzdHJ1Y3QgYmZhX3MgKmJmYSwgc3RydWN0IGJmaV9tc2dfcyAqbXNnKQoreworCWJmYV90cmMoYmZhLCBtc2ctPm1oZHIubXNnX2lkKTsKKworCXN3aXRjaCAobXNnLT5taGRyLm1zZ19pZCkgeworCWNhc2UgQkZJX1VGX0kySF9GUk1fUkNWRDoKKwkJdWZfcmVjdihiZmEsIChzdHJ1Y3QgYmZpX3VmX2ZybV9yY3ZkX3MgKikgbXNnKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfdHJjKGJmYSwgbXNnLT5taGRyLm1zZ19pZCk7CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX3VmX3ByaXYuaCBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX3VmX3ByaXYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iY2I0OTBmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfdWZfcHJpdi5oCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpZm5kZWYgX19CRkFfVUZfUFJJVl9IX18KKyNkZWZpbmUgX19CRkFfVUZfUFJJVl9IX18KKworI2luY2x1ZGUgPGNzL2JmYV9zbS5oPgorI2luY2x1ZGUgPGJmYV9zdmMuaD4KKyNpbmNsdWRlIDxiZmkvYmZpX3VmLmg+CisKKyNkZWZpbmUgQkZBX1VGX01JTgkoNCkKKworc3RydWN0IGJmYV91Zl9tb2RfcyB7CisJc3RydWN0IGJmYV9zICpiZmE7CQkvKiAgYmFjayBwb2ludGVyIHRvIEJGQSAqLworCXN0cnVjdCBiZmFfdWZfcyAqdWZfbGlzdDsJLyogIGFycmF5IG9mIFVGcyAqLworCXUxNgludW1fdWZzOwkvKiAgbnVtIHVuc29saWNpdGVkIHJ4IGZyYW1lcyAqLworCXN0cnVjdCBsaXN0X2hlYWQgCXVmX2ZyZWVfcTsJLyogIGZyZWUgVUZzICovCisJc3RydWN0IGxpc3RfaGVhZCAJdWZfcG9zdGVkX3E7CS8qICBVRnMgcG9zdGVkIHRvIElPQyAqLworCXN0cnVjdCBiZmFfdWZfYnVmX3MgKnVmX3Bic19rdmE7CS8qICBsaXN0IFVGIGJ1ZnMgcmVxdWVzdCBwbGQgKi8KKwl1NjQJdWZfcGJzX3BhOwkvKiAgcGh5IGFkZHIgZm9yIFVGIGJ1ZnMgKi8KKwlzdHJ1Y3QgYmZpX3VmX2J1Zl9wb3N0X3MgKnVmX2J1Zl9wb3N0czsKKwkJCQkJLyogIHByZS1idWlsdCBVRiBwb3N0IG1zZ3MgKi8KKwliZmFfY2JfdWZfcmVjdl90IHVmcmVjdjsJLyogIHVmIHJlY3YgaGFuZGxlciBmdW5jdGlvbiAqLworCXZvaWQJCSpjYmFyZzsJCS8qICB1ZiByZWNlaXZlIGhhbmRsZXIgYXJnICovCit9OworCisjZGVmaW5lIEJGQV9VRl9NT0QoX19iZmEpCSgmKF9fYmZhKS0+bW9kdWxlcy51Zl9tb2QpCisKKyNkZWZpbmUgdWZtX3Bic19wYShfdWZtb2QsIF91ZnRhZykJXAorCSgoX3VmbW9kKS0+dWZfcGJzX3BhICsgc2l6ZW9mKHN0cnVjdCBiZmFfdWZfYnVmX3MpICogKF91ZnRhZykpCisKK3ZvaWQJYmZhX3VmX2lzcihzdHJ1Y3QgYmZhX3MgKmJmYSwgc3RydWN0IGJmaV9tc2dfcyAqbXNnKTsKKworI2VuZGlmIC8qIF9fQkZBX1VGX1BSSVZfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2JmYWQuYyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmMmJlNWEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYWQuYwpAQCAtMCwwICsxLDExODIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworLyoqCisgKiAgYmZhZC5jIExpbnV4IGRyaXZlciBQQ0kgaW50ZXJmYWNlIG1vZHVsZS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSAiYmZhZF9kcnYuaCIKKyNpbmNsdWRlICJiZmFkX2ltLmgiCisjaW5jbHVkZSAiYmZhZF90bS5oIgorI2luY2x1ZGUgImJmYWRfaXBmYy5oIgorI2luY2x1ZGUgImJmYWRfdHJjbW9kLmgiCisjaW5jbHVkZSA8ZmNiL2JmYV9mY2JfdmYuaD4KKyNpbmNsdWRlIDxmY2IvYmZhX2ZjYl9ycG9ydC5oPgorI2luY2x1ZGUgPGZjYi9iZmFfZmNiX3BvcnQuaD4KKyNpbmNsdWRlIDxmY2IvYmZhX2ZjYi5oPgorCitCRkFfVFJDX0ZJTEUoTERSViwgQkZBRCk7CitzdGF0aWMgREVGSU5FX01VVEVYKGJmYWRfbXV0ZXgpOworTElTVF9IRUFEKGJmYWRfbGlzdCk7CitzdGF0aWMgaW50ICAgICAgYmZhZF9pbnN0OworaW50IGJmYWRfc3VwcG9ydGVkX2ZjNHM7CisKK3N0YXRpYyBjaGFyICAgICAqaG9zdF9uYW1lOworc3RhdGljIGNoYXIgICAgICpvc19uYW1lOworc3RhdGljIGNoYXIgICAgICpvc19wYXRjaDsKK3N0YXRpYyBpbnQgICAgICBudW1fcnBvcnRzOworc3RhdGljIGludCAgICAgIG51bV9pb3M7CitzdGF0aWMgaW50ICAgICAgbnVtX3RtczsKK3N0YXRpYyBpbnQgICAgICBudW1fZmN4cHM7CitzdGF0aWMgaW50ICAgICAgbnVtX3VmYnVmczsKK3N0YXRpYyBpbnQgICAgICByZXFxX3NpemU7CitzdGF0aWMgaW50ICAgICAgcnNwcV9zaXplOworc3RhdGljIGludCAgICAgIG51bV9zZ3BnczsKK3N0YXRpYyBpbnQgICAgICBycG9ydF9kZWxfdGltZW91dCA9IEJGQV9GQ1NfUlBPUlRfREVGX0RFTF9USU1FT1VUOworc3RhdGljIGludCAgICAgIGJmYV9pb19tYXhfc2dlID0gQkZBRF9JT19NQVhfU0dFOworc3RhdGljIGludCAgICAgIGxvZ19sZXZlbCA9IEJGQV9MT0dfV0FSTklORzsKK3N0YXRpYyBpbnQgICAgICBpb2NfYXV0b19yZWNvdmVyID0gQkZBX1RSVUU7CitzdGF0aWMgaW50ICAgICAgaXBmY19lbmFibGUgPSBCRkFfRkFMU0U7CitzdGF0aWMgaW50ICAgICAgaXBmY19tdHUgPSAtMTsKK2ludCAJCWJmYV9sdW5fcXVldWVfZGVwdGggPSBCRkFEX0xVTl9RVUVVRV9ERVBUSDsKK2ludCAgICAgIAliZmFfbGlua3VwX2RlbGF5ID0gLTE7CisKK21vZHVsZV9wYXJhbShvc19uYW1lLCBjaGFycCwgU19JUlVHTyB8IFNfSVdVU1IpOworbW9kdWxlX3BhcmFtKG9zX3BhdGNoLCBjaGFycCwgU19JUlVHTyB8IFNfSVdVU1IpOworbW9kdWxlX3BhcmFtKGhvc3RfbmFtZSwgY2hhcnAsIFNfSVJVR08gfCBTX0lXVVNSKTsKK21vZHVsZV9wYXJhbShudW1fcnBvcnRzLCBpbnQsIFNfSVJVR08gfCBTX0lXVVNSKTsKK21vZHVsZV9wYXJhbShudW1faW9zLCBpbnQsIFNfSVJVR08gfCBTX0lXVVNSKTsKK21vZHVsZV9wYXJhbShudW1fdG1zLCBpbnQsIFNfSVJVR08gfCBTX0lXVVNSKTsKK21vZHVsZV9wYXJhbShudW1fZmN4cHMsIGludCwgU19JUlVHTyB8IFNfSVdVU1IpOworbW9kdWxlX3BhcmFtKG51bV91ZmJ1ZnMsIGludCwgU19JUlVHTyB8IFNfSVdVU1IpOworbW9kdWxlX3BhcmFtKHJlcXFfc2l6ZSwgaW50LCBTX0lSVUdPIHwgU19JV1VTUik7Cittb2R1bGVfcGFyYW0ocnNwcV9zaXplLCBpbnQsIFNfSVJVR08gfCBTX0lXVVNSKTsKK21vZHVsZV9wYXJhbShudW1fc2dwZ3MsIGludCwgU19JUlVHTyB8IFNfSVdVU1IpOworbW9kdWxlX3BhcmFtKHJwb3J0X2RlbF90aW1lb3V0LCBpbnQsIFNfSVJVR08gfCBTX0lXVVNSKTsKK21vZHVsZV9wYXJhbShiZmFfbHVuX3F1ZXVlX2RlcHRoLCBpbnQsIFNfSVJVR08gfCBTX0lXVVNSKTsKK21vZHVsZV9wYXJhbShiZmFfaW9fbWF4X3NnZSwgaW50LCBTX0lSVUdPIHwgU19JV1VTUik7Cittb2R1bGVfcGFyYW0obG9nX2xldmVsLCBpbnQsIFNfSVJVR08gfCBTX0lXVVNSKTsKK21vZHVsZV9wYXJhbShpb2NfYXV0b19yZWNvdmVyLCBpbnQsIFNfSVJVR08gfCBTX0lXVVNSKTsKK21vZHVsZV9wYXJhbShpcGZjX2VuYWJsZSwgaW50LCBTX0lSVUdPIHwgU19JV1VTUik7Cittb2R1bGVfcGFyYW0oaXBmY19tdHUsIGludCwgU19JUlVHTyB8IFNfSVdVU1IpOworbW9kdWxlX3BhcmFtKGJmYV9saW5rdXBfZGVsYXksIGludCwgU19JUlVHTyB8IFNfSVdVU1IpOworCisvKgorICogU3RvcmVzIHRoZSBtb2R1bGUgcGFybSBudW1fc2dwZ3MgdmFsdWU7CisgKiB1c2VkIHRvIHJlc2V0IGZvciBiZmFkIG5leHQgaW5zdGFuY2UuCisgKi8KK3N0YXRpYyBpbnQgbnVtX3NncGdzX3Bhcm07CisKK3N0YXRpYyBiZmFfc3RhdHVzX3QKK2JmYWRfZmM0X3Byb2JlKHN0cnVjdCBiZmFkX3MgKmJmYWQpCit7CisJaW50ICAgICAgICAgICAgIHJjOworCisJcmMgPSBiZmFkX2ltX3Byb2JlKGJmYWQpOworCWlmIChyYyAhPSBCRkFfU1RBVFVTX09LKQorCQlnb3RvIGV4dDsKKworCWJmYWRfdG1fcHJvYmUoYmZhZCk7CisKKwlpZiAoaXBmY19lbmFibGUpCisJCWJmYWRfaXBmY19wcm9iZShiZmFkKTsKK2V4dDoKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFkX2ZjNF9wcm9iZV91bmRvKHN0cnVjdCBiZmFkX3MgKmJmYWQpCit7CisJYmZhZF9pbV9wcm9iZV91bmRvKGJmYWQpOworCWJmYWRfdG1fcHJvYmVfdW5kbyhiZmFkKTsKKwlpZiAoaXBmY19lbmFibGUpCisJCWJmYWRfaXBmY19wcm9iZV91bmRvKGJmYWQpOworfQorCitzdGF0aWMgdm9pZAorYmZhZF9mYzRfcHJvYmVfcG9zdChzdHJ1Y3QgYmZhZF9zICpiZmFkKQoreworCWlmIChiZmFkLT5pbSkKKwkJYmZhZF9pbV9wcm9iZV9wb3N0KGJmYWQtPmltKTsKKworCWJmYWRfdG1fcHJvYmVfcG9zdChiZmFkKTsKKwlpZiAoaXBmY19lbmFibGUpCisJCWJmYWRfaXBmY19wcm9iZV9wb3N0KGJmYWQpOworfQorCitzdGF0aWMgYmZhX3N0YXR1c190CitiZmFkX2ZjNF9wb3J0X25ldyhzdHJ1Y3QgYmZhZF9zICpiZmFkLCBzdHJ1Y3QgYmZhZF9wb3J0X3MgKnBvcnQsIGludCByb2xlcykKK3sKKwlpbnQgICAgICAgICAgICAgcmMgPSBCRkFfU1RBVFVTX0ZBSUxFRDsKKworCWlmIChyb2xlcyAmIEJGQV9QT1JUX1JPTEVfRkNQX0lNKQorCQlyYyA9IGJmYWRfaW1fcG9ydF9uZXcoYmZhZCwgcG9ydCk7CisJaWYgKHJjICE9IEJGQV9TVEFUVVNfT0spCisJCWdvdG8gZXh0OworCisJaWYgKHJvbGVzICYgQkZBX1BPUlRfUk9MRV9GQ1BfVE0pCisJCXJjID0gYmZhZF90bV9wb3J0X25ldyhiZmFkLCBwb3J0KTsKKwlpZiAocmMgIT0gQkZBX1NUQVRVU19PSykKKwkJZ290byBleHQ7CisKKwlpZiAoKHJvbGVzICYgQkZBX1BPUlRfUk9MRV9GQ1BfSVBGQykgJiYgaXBmY19lbmFibGUpCisJCXJjID0gYmZhZF9pcGZjX3BvcnRfbmV3KGJmYWQsIHBvcnQsIHBvcnQtPnB2Yl90eXBlKTsKK2V4dDoKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFkX2ZjNF9wb3J0X2RlbGV0ZShzdHJ1Y3QgYmZhZF9zICpiZmFkLCBzdHJ1Y3QgYmZhZF9wb3J0X3MgKnBvcnQsIGludCByb2xlcykKK3sKKwlpZiAocm9sZXMgJiBCRkFfUE9SVF9ST0xFX0ZDUF9JTSkKKwkJYmZhZF9pbV9wb3J0X2RlbGV0ZShiZmFkLCBwb3J0KTsKKworCWlmIChyb2xlcyAmIEJGQV9QT1JUX1JPTEVfRkNQX1RNKQorCQliZmFkX3RtX3BvcnRfZGVsZXRlKGJmYWQsIHBvcnQpOworCisJaWYgKChyb2xlcyAmIEJGQV9QT1JUX1JPTEVfRkNQX0lQRkMpICYmIGlwZmNfZW5hYmxlKQorCQliZmFkX2lwZmNfcG9ydF9kZWxldGUoYmZhZCwgcG9ydCk7Cit9CisKKy8qKgorICogIEJGQSBjYWxsYmFja3MKKyAqLwordm9pZAorYmZhZF9oY2JfY29tcCh2b2lkICphcmcsIGJmYV9zdGF0dXNfdCBzdGF0dXMpCit7CisJc3RydWN0IGJmYWRfaGFsX2NvbXAgKmZjb21wID0gKHN0cnVjdCBiZmFkX2hhbF9jb21wICopYXJnOworCisJZmNvbXAtPnN0YXR1cyA9IHN0YXR1czsKKwljb21wbGV0ZSgmZmNvbXAtPmNvbXApOworfQorCisvKioKKyAqIGJmYV9pbml0IGNhbGxiYWNrCisgKi8KK3ZvaWQKK2JmYV9jYl9pbml0KHZvaWQgKmRydiwgYmZhX3N0YXR1c190IGluaXRfc3RhdHVzKQoreworCXN0cnVjdCBiZmFkX3MgICpiZmFkID0gZHJ2OworCisJaWYgKGluaXRfc3RhdHVzID09IEJGQV9TVEFUVVNfT0spCisJCWJmYWQtPmJmYWRfZmxhZ3MgfD0gQkZBRF9IQUxfSU5JVF9ET05FOworCisJY29tcGxldGUoJmJmYWQtPmNvbXApOworfQorCisKKworLyoqCisgKiAgQkZBX0ZDUyBjYWxsYmFja3MKKyAqLworc3RhdGljIHN0cnVjdCBiZmFkX3BvcnRfcyAqCitiZmFkX2dldF9kcnZfcG9ydChzdHJ1Y3QgYmZhZF9zICpiZmFkLCBzdHJ1Y3QgYmZhZF92Zl9zICp2Zl9kcnYsCisJCSAgc3RydWN0IGJmYWRfdnBvcnRfcyAqdnBfZHJ2KQoreworCXJldHVybiAoKHZwX2RydikgPyAoJih2cF9kcnYpLT5kcnZfcG9ydCkKKwkJOiAoKHZmX2RydikgPyAoJih2Zl9kcnYpLT5iYXNlX3BvcnQpIDogKCYoYmZhZCktPnBwb3J0KSkpOworfQorCitzdHJ1Y3QgYmZhZF9wb3J0X3MgKgorYmZhX2ZjYl9wb3J0X25ldyhzdHJ1Y3QgYmZhZF9zICpiZmFkLCBzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQsCisJCSBlbnVtIGJmYV9wb3J0X3JvbGUgcm9sZXMsIHN0cnVjdCBiZmFkX3ZmX3MgKnZmX2RydiwKKwkJIHN0cnVjdCBiZmFkX3Zwb3J0X3MgKnZwX2RydikKK3sKKwliZmFfc3RhdHVzX3QgICAgcmM7CisJc3RydWN0IGJmYWRfcG9ydF9zICpwb3J0X2RydjsKKworCWlmICghdnBfZHJ2ICYmICF2Zl9kcnYpIHsKKwkJcG9ydF9kcnYgPSAmYmZhZC0+cHBvcnQ7CisJCXBvcnRfZHJ2LT5wdmJfdHlwZSA9IEJGQURfUE9SVF9QSFlTX0JBU0U7CisJfSBlbHNlIGlmICghdnBfZHJ2ICYmIHZmX2RydikgeworCQlwb3J0X2RydiA9ICZ2Zl9kcnYtPmJhc2VfcG9ydDsKKwkJcG9ydF9kcnYtPnB2Yl90eXBlID0gQkZBRF9QT1JUX1ZGX0JBU0U7CisJfSBlbHNlIGlmICh2cF9kcnYgJiYgIXZmX2RydikgeworCQlwb3J0X2RydiA9ICZ2cF9kcnYtPmRydl9wb3J0OworCQlwb3J0X2Rydi0+cHZiX3R5cGUgPSBCRkFEX1BPUlRfUEhZU19WUE9SVDsKKwl9IGVsc2UgeworCQlwb3J0X2RydiA9ICZ2cF9kcnYtPmRydl9wb3J0OworCQlwb3J0X2Rydi0+cHZiX3R5cGUgPSBCRkFEX1BPUlRfVkZfVlBPUlQ7CisJfQorCisJcG9ydF9kcnYtPmZjc19wb3J0ID0gcG9ydDsKKwlwb3J0X2Rydi0+cm9sZXMgPSByb2xlczsKKwlyYyA9IGJmYWRfZmM0X3BvcnRfbmV3KGJmYWQsIHBvcnRfZHJ2LCByb2xlcyk7CisJaWYgKHJjICE9IEJGQV9TVEFUVVNfT0spIHsKKwkJYmZhZF9mYzRfcG9ydF9kZWxldGUoYmZhZCwgcG9ydF9kcnYsIHJvbGVzKTsKKwkJcG9ydF9kcnYgPSBOVUxMOworCX0KKworCXJldHVybiBwb3J0X2RydjsKK30KKwordm9pZAorYmZhX2ZjYl9wb3J0X2RlbGV0ZShzdHJ1Y3QgYmZhZF9zICpiZmFkLCBlbnVtIGJmYV9wb3J0X3JvbGUgcm9sZXMsCisJCSAgICBzdHJ1Y3QgYmZhZF92Zl9zICp2Zl9kcnYsIHN0cnVjdCBiZmFkX3Zwb3J0X3MgKnZwX2RydikKK3sKKwlzdHJ1Y3QgYmZhZF9wb3J0X3MgKnBvcnRfZHJ2OworCisJLyoKKwkgKiB0aGlzIHdpbGwgYmUgb25seSBjYWxsZWQgZnJvbSBybW1vZCBjb250ZXh0CisJICovCisJaWYgKHZwX2RydiAmJiAhdnBfZHJ2LT5jb21wX2RlbCkgeworCQlwb3J0X2RydiA9IGJmYWRfZ2V0X2Rydl9wb3J0KGJmYWQsIHZmX2RydiwgdnBfZHJ2KTsKKwkJYmZhX3RyYyhiZmFkLCByb2xlcyk7CisJCWJmYWRfZmM0X3BvcnRfZGVsZXRlKGJmYWQsIHBvcnRfZHJ2LCByb2xlcyk7CisJfQorfQorCit2b2lkCitiZmFfZmNiX3BvcnRfb25saW5lKHN0cnVjdCBiZmFkX3MgKmJmYWQsIGVudW0gYmZhX3BvcnRfcm9sZSByb2xlcywKKwkJICAgIHN0cnVjdCBiZmFkX3ZmX3MgKnZmX2Rydiwgc3RydWN0IGJmYWRfdnBvcnRfcyAqdnBfZHJ2KQoreworCXN0cnVjdCBiZmFkX3BvcnRfcyAqcG9ydF9kcnYgPSBiZmFkX2dldF9kcnZfcG9ydChiZmFkLCB2Zl9kcnYsIHZwX2Rydik7CisKKwlpZiAocm9sZXMgJiBCRkFfUE9SVF9ST0xFX0ZDUF9JTSkKKwkJYmZhZF9pbV9wb3J0X29ubGluZShiZmFkLCBwb3J0X2Rydik7CisKKwlpZiAocm9sZXMgJiBCRkFfUE9SVF9ST0xFX0ZDUF9UTSkKKwkJYmZhZF90bV9wb3J0X29ubGluZShiZmFkLCBwb3J0X2Rydik7CisKKwlpZiAoKHJvbGVzICYgQkZBX1BPUlRfUk9MRV9GQ1BfSVBGQykgJiYgaXBmY19lbmFibGUpCisJCWJmYWRfaXBmY19wb3J0X29ubGluZShiZmFkLCBwb3J0X2Rydik7CisKKwliZmFkLT5iZmFkX2ZsYWdzIHw9IEJGQURfUE9SVF9PTkxJTkU7Cit9CisKK3ZvaWQKK2JmYV9mY2JfcG9ydF9vZmZsaW5lKHN0cnVjdCBiZmFkX3MgKmJmYWQsIGVudW0gYmZhX3BvcnRfcm9sZSByb2xlcywKKwkJICAgICBzdHJ1Y3QgYmZhZF92Zl9zICp2Zl9kcnYsIHN0cnVjdCBiZmFkX3Zwb3J0X3MgKnZwX2RydikKK3sKKwlzdHJ1Y3QgYmZhZF9wb3J0X3MgKnBvcnRfZHJ2ID0gYmZhZF9nZXRfZHJ2X3BvcnQoYmZhZCwgdmZfZHJ2LCB2cF9kcnYpOworCisJaWYgKHJvbGVzICYgQkZBX1BPUlRfUk9MRV9GQ1BfSU0pCisJCWJmYWRfaW1fcG9ydF9vZmZsaW5lKGJmYWQsIHBvcnRfZHJ2KTsKKworCWlmIChyb2xlcyAmIEJGQV9QT1JUX1JPTEVfRkNQX1RNKQorCQliZmFkX3RtX3BvcnRfb2ZmbGluZShiZmFkLCBwb3J0X2Rydik7CisKKwlpZiAoKHJvbGVzICYgQkZBX1BPUlRfUk9MRV9GQ1BfSVBGQykgJiYgaXBmY19lbmFibGUpCisJCWJmYWRfaXBmY19wb3J0X29mZmxpbmUoYmZhZCwgcG9ydF9kcnYpOworfQorCit2b2lkCitiZmFfZmNiX3Zwb3J0X2RlbGV0ZShzdHJ1Y3QgYmZhZF92cG9ydF9zICp2cG9ydF9kcnYpCit7CisJaWYgKHZwb3J0X2Rydi0+Y29tcF9kZWwpIHsKKwkJY29tcGxldGUodnBvcnRfZHJ2LT5jb21wX2RlbCk7CisJCXJldHVybjsKKwl9CisKKwlrZnJlZSh2cG9ydF9kcnYpOworfQorCisvKioKKyAqIEZDUyBSUE9SVCBhbGxvYyBjYWxsYmFjaywgYWZ0ZXIgc3VjY2Vzc2Z1bCBQTE9HSSBieSBGQ1MKKyAqLworYmZhX3N0YXR1c190CitiZmFfZmNiX3Jwb3J0X2FsbG9jKHN0cnVjdCBiZmFkX3MgKmJmYWQsIHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKipycG9ydCwKKwkJICAgIHN0cnVjdCBiZmFkX3Jwb3J0X3MgKipycG9ydF9kcnYpCit7CisJYmZhX3N0YXR1c190ICAgIHJjID0gQkZBX1NUQVRVU19PSzsKKworCSpycG9ydF9kcnYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYmZhZF9ycG9ydF9zKSwgR0ZQX0FUT01JQyk7CisJaWYgKCpycG9ydF9kcnYgPT0gTlVMTCkgeworCQlyYyA9IEJGQV9TVEFUVVNfRU5PTUVNOworCQlnb3RvIGV4dDsKKwl9CisKKwkqcnBvcnQgPSAmKCpycG9ydF9kcnYpLT5mY3NfcnBvcnQ7CisKK2V4dDoKKwlyZXR1cm4gcmM7Cit9CisKKworCit2b2lkCitiZmFkX2hhbF9tZW1fcmVsZWFzZShzdHJ1Y3QgYmZhZF9zICpiZmFkKQoreworCWludCAgICAgICAgICAgICBpOworCXN0cnVjdCBiZmFfbWVtaW5mb19zICpoYWxfbWVtaW5mbyA9ICZiZmFkLT5tZW1pbmZvOworCXN0cnVjdCBiZmFfbWVtX2VsZW1fcyAqbWVtaW5mb19lbGVtOworCisJZm9yIChpID0gMDsgaSA8IEJGQV9NRU1fVFlQRV9NQVg7IGkrKykgeworCQltZW1pbmZvX2VsZW0gPSAmaGFsX21lbWluZm8tPm1lbWluZm9baV07CisJCWlmIChtZW1pbmZvX2VsZW0tPmt2YSAhPSBOVUxMKSB7CisJCQlzd2l0Y2ggKG1lbWluZm9fZWxlbS0+bWVtX3R5cGUpIHsKKwkJCWNhc2UgQkZBX01FTV9UWVBFX0tWQToKKwkJCQl2ZnJlZShtZW1pbmZvX2VsZW0tPmt2YSk7CisJCQkJYnJlYWs7CisJCQljYXNlIEJGQV9NRU1fVFlQRV9ETUE6CisJCQkJZG1hX2ZyZWVfY29oZXJlbnQoJmJmYWQtPnBjaWRldi0+ZGV2LAorCQkJCQkJbWVtaW5mb19lbGVtLT5tZW1fbGVuLAorCQkJCQkJbWVtaW5mb19lbGVtLT5rdmEsCisJCQkJCQkoZG1hX2FkZHJfdCkgbWVtaW5mb19lbGVtLT5kbWEpOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQliZmFfYXNzZXJ0KDApOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCisJbWVtc2V0KGhhbF9tZW1pbmZvLCAwLCBzaXplb2Yoc3RydWN0IGJmYV9tZW1pbmZvX3MpKTsKK30KKwordm9pZAorYmZhZF91cGRhdGVfaGFsX2NmZyhzdHJ1Y3QgYmZhX2lvY2ZjX2NmZ19zICpiZmFfY2ZnKQoreworCWlmIChudW1fcnBvcnRzID4gMCkKKwkJYmZhX2NmZy0+ZndjZmcubnVtX3Jwb3J0cyA9IG51bV9ycG9ydHM7CisJaWYgKG51bV9pb3MgPiAwKQorCQliZmFfY2ZnLT5md2NmZy5udW1faW9pbV9yZXFzID0gbnVtX2lvczsKKwlpZiAobnVtX3RtcyA+IDApCisJCWJmYV9jZmctPmZ3Y2ZnLm51bV90c2tpbV9yZXFzID0gbnVtX3RtczsKKwlpZiAobnVtX2ZjeHBzID4gMCkKKwkJYmZhX2NmZy0+ZndjZmcubnVtX2ZjeHBfcmVxcyA9IG51bV9mY3hwczsKKwlpZiAobnVtX3VmYnVmcyA+IDApCisJCWJmYV9jZmctPmZ3Y2ZnLm51bV91Zl9idWZzID0gbnVtX3VmYnVmczsKKwlpZiAocmVxcV9zaXplID4gMCkKKwkJYmZhX2NmZy0+ZHJ2Y2ZnLm51bV9yZXFxX2VsZW1zID0gcmVxcV9zaXplOworCWlmIChyc3BxX3NpemUgPiAwKQorCQliZmFfY2ZnLT5kcnZjZmcubnVtX3JzcHFfZWxlbXMgPSByc3BxX3NpemU7CisJaWYgKG51bV9zZ3BncyA+IDApCisJCWJmYV9jZmctPmRydmNmZy5udW1fc2dwZ3MgPSBudW1fc2dwZ3M7CisKKwkvKgorCSAqIHBvcHVsYXRlIHRoZSBoYWwgdmFsdWVzIGJhY2sgdG8gdGhlIGRyaXZlciBmb3Igc3lzZnMgdXNlLgorCSAqIG90aGVyd2lzZSwgdGhlIGRlZmF1bHQgdmFsdWVzIHdpbGwgYmUgc2hvd24gYXMgMCBpbiBzeXNmcworCSAqLworCW51bV9ycG9ydHMgPSBiZmFfY2ZnLT5md2NmZy5udW1fcnBvcnRzOworCW51bV9pb3MgICAgPSBiZmFfY2ZnLT5md2NmZy5udW1faW9pbV9yZXFzOworCW51bV90bXMJICAgPSBiZmFfY2ZnLT5md2NmZy5udW1fdHNraW1fcmVxczsKKwludW1fZmN4cHMgID0gYmZhX2NmZy0+ZndjZmcubnVtX2ZjeHBfcmVxczsKKwludW1fdWZidWZzID0gYmZhX2NmZy0+ZndjZmcubnVtX3VmX2J1ZnM7CisJcmVxcV9zaXplICA9IGJmYV9jZmctPmRydmNmZy5udW1fcmVxcV9lbGVtczsKKwlyc3BxX3NpemUgID0gYmZhX2NmZy0+ZHJ2Y2ZnLm51bV9yc3BxX2VsZW1zOworCW51bV9zZ3BncyAgPSBiZmFfY2ZnLT5kcnZjZmcubnVtX3NncGdzOworfQorCitiZmFfc3RhdHVzX3QKK2JmYWRfaGFsX21lbV9hbGxvYyhzdHJ1Y3QgYmZhZF9zICpiZmFkKQoreworCXN0cnVjdCBiZmFfbWVtaW5mb19zICpoYWxfbWVtaW5mbyA9ICZiZmFkLT5tZW1pbmZvOworCXN0cnVjdCBiZmFfbWVtX2VsZW1fcyAqbWVtaW5mb19lbGVtOworCWJmYV9zdGF0dXNfdCAgICByYyA9IEJGQV9TVEFUVVNfT0s7CisJZG1hX2FkZHJfdCAgICAgIHBoeXNfYWRkcjsKKwlpbnQgICAgICAgICAgICAgcmV0cnlfY291bnQgPSAwOworCWludCAgICAgICAgICAgICByZXNldF92YWx1ZSA9IDE7CisJaW50ICAgICAgICAgICAgIG1pbl9udW1fc2dwZ3MgPSA1MTI7CisJdm9pZCAgICAgICAgICAgKmt2YTsKKwlpbnQgICAgICAgICAgICAgaTsKKworCWJmYV9jZmdfZ2V0X2RlZmF1bHQoJmJmYWQtPmlvY19jZmcpOworCityZXRyeToKKwliZmFkX3VwZGF0ZV9oYWxfY2ZnKCZiZmFkLT5pb2NfY2ZnKTsKKwliZmFkLT5jZmdfZGF0YS5pb2NfcXVldWVfZGVwdGggPSBiZmFkLT5pb2NfY2ZnLmZ3Y2ZnLm51bV9pb2ltX3JlcXM7CisJYmZhX2NmZ19nZXRfbWVtaW5mbygmYmZhZC0+aW9jX2NmZywgaGFsX21lbWluZm8pOworCisJZm9yIChpID0gMDsgaSA8IEJGQV9NRU1fVFlQRV9NQVg7IGkrKykgeworCQltZW1pbmZvX2VsZW0gPSAmaGFsX21lbWluZm8tPm1lbWluZm9baV07CisJCXN3aXRjaCAobWVtaW5mb19lbGVtLT5tZW1fdHlwZSkgeworCQljYXNlIEJGQV9NRU1fVFlQRV9LVkE6CisJCQlrdmEgPSB2bWFsbG9jKG1lbWluZm9fZWxlbS0+bWVtX2xlbik7CisJCQlpZiAoa3ZhID09IE5VTEwpIHsKKwkJCQliZmFkX2hhbF9tZW1fcmVsZWFzZShiZmFkKTsKKwkJCQlyYyA9IEJGQV9TVEFUVVNfRU5PTUVNOworCQkJCWdvdG8gZXh0OworCQkJfQorCQkJbWVtc2V0KGt2YSwgMCwgbWVtaW5mb19lbGVtLT5tZW1fbGVuKTsKKwkJCW1lbWluZm9fZWxlbS0+a3ZhID0ga3ZhOworCQkJYnJlYWs7CisJCWNhc2UgQkZBX01FTV9UWVBFX0RNQToKKwkJCWt2YSA9IGRtYV9hbGxvY19jb2hlcmVudCgmYmZhZC0+cGNpZGV2LT5kZXYsCisJCQkJCW1lbWluZm9fZWxlbS0+bWVtX2xlbiwKKwkJCQkJJnBoeXNfYWRkciwgR0ZQX0tFUk5FTCk7CisJCQlpZiAoa3ZhID09IE5VTEwpIHsKKwkJCQliZmFkX2hhbF9tZW1fcmVsZWFzZShiZmFkKTsKKwkJCQkvKgorCQkJCSAqIElmIHdlIGNhbm5vdCBhbGxvY2F0ZSB3aXRoIGRlZmF1bHQKKwkJCQkgKiBudW1fc2dwYWdlcyB0cnkgd2l0aCBoYWxmIHRoZSB2YWx1ZS4KKwkJCQkgKi8KKwkJCQlpZiAobnVtX3NncGdzID4gbWluX251bV9zZ3BncykgeworCQkJCQlwcmludGsoS0VSTl9JTkZPICJiZmFkWyVkXTogbWVtb3J5IgorCQkJCQkJIiBhbGxvY2F0aW9uIGZhaWxlZCB3aXRoIgorCQkJCQkJIiBudW1fc2dwZ3M6ICVkXG4iLAorCQkJCQkJYmZhZC0+aW5zdF9ubywgbnVtX3NncGdzKTsKKwkJCQkJbmV4dExvd2VySW50KCZudW1fc2dwZ3MpOworCQkJCQlwcmludGsoS0VSTl9JTkZPICJiZmFkWyVkXTogdHJ5aW5nIHRvIgorCQkJCQkJIiBhbGxvY2F0ZSBtZW1vcnkgd2l0aCIKKwkJCQkJCSIgbnVtX3NncGdzOiAlZFxuIiwKKwkJCQkJCWJmYWQtPmluc3Rfbm8sIG51bV9zZ3Bncyk7CisJCQkJCXJldHJ5X2NvdW50Kys7CisJCQkJCWdvdG8gcmV0cnk7CisJCQkJfSBlbHNlIHsKKwkJCQkJaWYgKG51bV9zZ3Bnc19wYXJtID4gMCkKKwkJCQkJCW51bV9zZ3BncyA9IG51bV9zZ3Bnc19wYXJtOworCQkJCQllbHNlIHsKKwkJCQkJCXJlc2V0X3ZhbHVlID0KKwkJCQkJCQkoMSA8PCByZXRyeV9jb3VudCk7CisJCQkJCQludW1fc2dwZ3MgKj0gcmVzZXRfdmFsdWU7CisJCQkJCX0KKwkJCQkJcmMgPSBCRkFfU1RBVFVTX0VOT01FTTsKKwkJCQkJZ290byBleHQ7CisJCQkJfQorCQkJfQorCisJCQlpZiAobnVtX3NncGdzX3Bhcm0gPiAwKQorCQkJCW51bV9zZ3BncyA9IG51bV9zZ3Bnc19wYXJtOworCQkJZWxzZSB7CisJCQkJcmVzZXRfdmFsdWUgPSAoMSA8PCByZXRyeV9jb3VudCk7CisJCQkJbnVtX3NncGdzICo9IHJlc2V0X3ZhbHVlOworCQkJfQorCisJCQltZW1zZXQoa3ZhLCAwLCBtZW1pbmZvX2VsZW0tPm1lbV9sZW4pOworCQkJbWVtaW5mb19lbGVtLT5rdmEgPSBrdmE7CisJCQltZW1pbmZvX2VsZW0tPmRtYSA9IHBoeXNfYWRkcjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisKKwkJfQorCX0KK2V4dDoKKwlyZXR1cm4gcmM7Cit9CisKKy8qKgorICogQ3JlYXRlIGEgdnBvcnQgdW5kZXIgYSB2Zi4KKyAqLworYmZhX3N0YXR1c190CitiZmFkX3Zwb3J0X2NyZWF0ZShzdHJ1Y3QgYmZhZF9zICpiZmFkLCB1MTYgdmZfaWQsCisJCSAgc3RydWN0IGJmYV9wb3J0X2NmZ19zICpwb3J0X2NmZykKK3sKKwlzdHJ1Y3QgYmZhZF92cG9ydF9zICp2cG9ydDsKKwlpbnQgICAgICAgICAgICAgcmMgPSBCRkFfU1RBVFVTX09LOworCXVuc2lnbmVkIGxvbmcgICBmbGFnczsKKwlzdHJ1Y3QgY29tcGxldGlvbiBmY29tcDsKKworCXZwb3J0ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGJmYWRfdnBvcnRfcyksIEdGUF9LRVJORUwpOworCWlmICghdnBvcnQpIHsKKwkJcmMgPSBCRkFfU1RBVFVTX0VOT01FTTsKKwkJZ290byBleHQ7CisJfQorCisJdnBvcnQtPmRydl9wb3J0LmJmYWQgPSBiZmFkOworCXNwaW5fbG9ja19pcnFzYXZlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKKwlyYyA9IGJmYV9mY3NfdnBvcnRfY3JlYXRlKCZ2cG9ydC0+ZmNzX3Zwb3J0LCAmYmZhZC0+YmZhX2ZjcywgdmZfaWQsCisJCQkJICBwb3J0X2NmZywgdnBvcnQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOworCisJaWYgKHJjICE9IEJGQV9TVEFUVVNfT0spCisJCWdvdG8gZXh0X2ZyZWVfdnBvcnQ7CisKKwlpZiAocG9ydF9jZmctPnJvbGVzICYgQkZBX1BPUlRfUk9MRV9GQ1BfSU0pIHsKKwkJcmMgPSBiZmFkX2ltX3Njc2lfaG9zdF9hbGxvYyhiZmFkLCB2cG9ydC0+ZHJ2X3BvcnQuaW1fcG9ydCk7CisJCWlmIChyYyAhPSBCRkFfU1RBVFVTX09LKQorCQkJZ290byBleHRfZnJlZV9mY3NfdnBvcnQ7CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOworCWJmYV9mY3NfdnBvcnRfc3RhcnQoJnZwb3J0LT5mY3NfdnBvcnQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIEJGQV9TVEFUVVNfT0s7CisKK2V4dF9mcmVlX2Zjc192cG9ydDoKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisJdnBvcnQtPmNvbXBfZGVsID0gJmZjb21wOworCWluaXRfY29tcGxldGlvbih2cG9ydC0+Y29tcF9kZWwpOworCWJmYV9mY3NfdnBvcnRfZGVsZXRlKCZ2cG9ydC0+ZmNzX3Zwb3J0KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKKwl3YWl0X2Zvcl9jb21wbGV0aW9uKHZwb3J0LT5jb21wX2RlbCk7CitleHRfZnJlZV92cG9ydDoKKwlrZnJlZSh2cG9ydCk7CitleHQ6CisJcmV0dXJuIHJjOworfQorCisvKioKKyAqIENyZWF0ZSBhIHZmIGFuZCBpdHMgYmFzZSB2cG9ydCBpbXBsaWNpdGVseS4KKyAqLworYmZhX3N0YXR1c190CitiZmFkX3ZmX2NyZWF0ZShzdHJ1Y3QgYmZhZF9zICpiZmFkLCB1MTYgdmZfaWQsCisJICAgICAgIHN0cnVjdCBiZmFfcG9ydF9jZmdfcyAqcG9ydF9jZmcpCit7CisJc3RydWN0IGJmYWRfdmZfcyAqdmY7CisJaW50ICAgICAgICAgICAgIHJjID0gQkZBX1NUQVRVU19PSzsKKworCXZmID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGJmYWRfdmZfcyksIEdGUF9LRVJORUwpOworCWlmICghdmYpIHsKKwkJcmMgPSBCRkFfU1RBVFVTX0ZBSUxFRDsKKwkJZ290byBleHQ7CisJfQorCisJcmMgPSBiZmFfZmNzX3ZmX2NyZWF0ZSgmdmYtPmZjc192ZiwgJmJmYWQtPmJmYV9mY3MsIHZmX2lkLCBwb3J0X2NmZywKKwkJCSAgICAgICB2Zik7CisJaWYgKHJjICE9IEJGQV9TVEFUVVNfT0spCisJCWtmcmVlKHZmKTsKK2V4dDoKKwlyZXR1cm4gcmM7Cit9CisKK3ZvaWQKK2JmYWRfYmZhX3Rtbyh1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0IGJmYWRfcyAgKmJmYWQgPSAoc3RydWN0IGJmYWRfcyAqKWRhdGE7CisJdW5zaWduZWQgbG9uZyAgIGZsYWdzOworCXN0cnVjdCBsaXN0X2hlYWQgIGRvbmVxOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOworCisJYmZhX3RpbWVyX3RpY2soJmJmYWQtPmJmYSk7CisKKwliZmFfY29tcF9kZXEoJmJmYWQtPmJmYSwgJmRvbmVxKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKKworCWlmICghbGlzdF9lbXB0eSgmZG9uZXEpKSB7CisJCWJmYV9jb21wX3Byb2Nlc3MoJmJmYWQtPmJmYSwgJmRvbmVxKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOworCQliZmFfY29tcF9mcmVlKCZiZmFkLT5iZmEsICZkb25lcSk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOworCX0KKworCW1vZF90aW1lcigmYmZhZC0+aGFsX3RtbywgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoQkZBX1RJTUVSX0ZSRVEpKTsKK30KKwordm9pZAorYmZhZF9pbml0X3RpbWVyKHN0cnVjdCBiZmFkX3MgKmJmYWQpCit7CisJaW5pdF90aW1lcigmYmZhZC0+aGFsX3Rtbyk7CisJYmZhZC0+aGFsX3Rtby5mdW5jdGlvbiA9IGJmYWRfYmZhX3RtbzsKKwliZmFkLT5oYWxfdG1vLmRhdGEgPSAodW5zaWduZWQgbG9uZyliZmFkOworCisJbW9kX3RpbWVyKCZiZmFkLT5oYWxfdG1vLCBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhCRkFfVElNRVJfRlJFUSkpOworfQorCitpbnQKK2JmYWRfcGNpX2luaXQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHN0cnVjdCBiZmFkX3MgKmJmYWQpCit7CisJdW5zaWduZWQgbG9uZyAgIGJhcjBfbGVuOworCWludCAgICAgICAgICAgICByYyA9IC1FTk9ERVY7CisKKwlpZiAocGNpX2VuYWJsZV9kZXZpY2UocGRldikpIHsKKwkJQkZBX1BSSU5URihCRkFfRVJSLCAicGNpX2VuYWJsZV9kZXZpY2UgZmFpbCAlcFxuIiwgcGRldik7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChwY2lfcmVxdWVzdF9yZWdpb25zKHBkZXYsIEJGQURfRFJJVkVSX05BTUUpKQorCQlnb3RvIG91dF9kaXNhYmxlX2RldmljZTsKKworCXBjaV9zZXRfbWFzdGVyKHBkZXYpOworCisKKwlpZiAocGNpX3NldF9kbWFfbWFzayhwZGV2LCBETUFfQklUX01BU0soNjQpKSAhPSAwKQorCQlpZiAocGNpX3NldF9kbWFfbWFzayhwZGV2LCBETUFfQklUX01BU0soMzIpKSAhPSAwKSB7CisJCQlCRkFfUFJJTlRGKEJGQV9FUlIsICJwY2lfc2V0X2RtYV9tYXNrIGZhaWwgJXBcbiIsIHBkZXYpOworCQkJZ290byBvdXRfcmVsZWFzZV9yZWdpb247CisJCX0KKworCWJmYWQtPnBjaV9iYXIwX21hcCA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAwKTsKKwliYXIwX2xlbiA9IHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMCk7CisJYmZhZC0+cGNpX2JhcjBfa3ZhID0gaW9yZW1hcChiZmFkLT5wY2lfYmFyMF9tYXAsIGJhcjBfbGVuKTsKKworCWlmIChiZmFkLT5wY2lfYmFyMF9rdmEgPT0gTlVMTCkgeworCQlCRkFfUFJJTlRGKEJGQV9FUlIsICJGYWlsIHRvIG1hcCBiYXIwXG4iKTsKKwkJZ290byBvdXRfcmVsZWFzZV9yZWdpb247CisJfQorCisJYmZhZC0+aGFsX3BjaWRldi5wY2lfc2xvdCA9IFBDSV9TTE9UKHBkZXYtPmRldmZuKTsKKwliZmFkLT5oYWxfcGNpZGV2LnBjaV9mdW5jID0gUENJX0ZVTkMocGRldi0+ZGV2Zm4pOworCWJmYWQtPmhhbF9wY2lkZXYucGNpX2Jhcl9rdmEgPSBiZmFkLT5wY2lfYmFyMF9rdmE7CisJYmZhZC0+aGFsX3BjaWRldi5kZXZpY2VfaWQgPSBwZGV2LT5kZXZpY2U7CisJYmZhZC0+cGNpX25hbWUgPSBwY2lfbmFtZShwZGV2KTsKKworCWJmYWQtPnBjaV9hdHRyLnZlbmRvcl9pZCA9IHBkZXYtPnZlbmRvcjsKKwliZmFkLT5wY2lfYXR0ci5kZXZpY2VfaWQgPSBwZGV2LT5kZXZpY2U7CisJYmZhZC0+cGNpX2F0dHIuc3NpZCA9IHBkZXYtPnN1YnN5c3RlbV9kZXZpY2U7CisJYmZhZC0+cGNpX2F0dHIuc3N2aWQgPSBwZGV2LT5zdWJzeXN0ZW1fdmVuZG9yOworCWJmYWQtPnBjaV9hdHRyLnBjaWZuID0gUENJX0ZVTkMocGRldi0+ZGV2Zm4pOworCisJYmZhZC0+cGNpZGV2ID0gcGRldjsKKwlyZXR1cm4gMDsKKworb3V0X3JlbGVhc2VfcmVnaW9uOgorCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CitvdXRfZGlzYWJsZV9kZXZpY2U6CisJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOworb3V0OgorCXJldHVybiByYzsKK30KKwordm9pZAorYmZhZF9wY2lfdW5pbml0KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzdHJ1Y3QgYmZhZF9zICpiZmFkKQoreworI2lmIGRlZmluZWQoX19pYTY0X18pCisJcGNpX2lvdW5tYXAocGRldiwgYmZhZC0+cGNpX2JhcjBfa3ZhKTsKKyNlbHNlCisJaW91bm1hcChiZmFkLT5wY2lfYmFyMF9rdmEpOworI2VuZGlmCisJcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CisJcGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworfQorCit2b2lkCitiZmFkX2Zjc19wb3J0X2NmZyhzdHJ1Y3QgYmZhZF9zICpiZmFkKQoreworCXN0cnVjdCBiZmFfcG9ydF9jZmdfcyBwb3J0X2NmZzsKKwlzdHJ1Y3QgYmZhX3Bwb3J0X2F0dHJfcyBhdHRyOworCWNoYXIgICAgICAgICAgICBzeW1uYW1lW0JGQV9TWU1OQU1FX01BWExFTl07CisKKwlzcHJpbnRmKHN5bW5hbWUsICIlcy0lZCIsIEJGQURfRFJJVkVSX05BTUUsIGJmYWQtPmluc3Rfbm8pOworCW1lbWNweShwb3J0X2NmZy5zeW1fbmFtZS5zeW1uYW1lLCBzeW1uYW1lLCBzdHJsZW4oc3ltbmFtZSkpOworCWJmYV9wcG9ydF9nZXRfYXR0cigmYmZhZC0+YmZhLCAmYXR0cik7CisJcG9ydF9jZmcubnd3biA9IGF0dHIubnd3bjsKKwlwb3J0X2NmZy5wd3duID0gYXR0ci5wd3duOworCisJYmZhX2Zjc19jZmdfYmFzZV9wb3J0KCZiZmFkLT5iZmFfZmNzLCAmcG9ydF9jZmcpOworfQorCitiZmFfc3RhdHVzX3QKK2JmYWRfZHJ2X2luaXQoc3RydWN0IGJmYWRfcyAqYmZhZCkKK3sKKwliZmFfc3RhdHVzX3QgICAgcmM7CisJdW5zaWduZWQgbG9uZyAgIGZsYWdzOworCXN0cnVjdCBiZmFfZmNzX2RyaXZlcl9pbmZvX3MgZHJpdmVyX2luZm87CisJaW50ICAgICAgICAgICAgIGk7CisKKwliZmFkLT5jZmdfZGF0YS5ycG9ydF9kZWxfdGltZW91dCA9IHJwb3J0X2RlbF90aW1lb3V0OworCWJmYWQtPmNmZ19kYXRhLmx1bl9xdWV1ZV9kZXB0aCA9IGJmYV9sdW5fcXVldWVfZGVwdGg7CisJYmZhZC0+Y2ZnX2RhdGEuaW9fbWF4X3NnZSA9IGJmYV9pb19tYXhfc2dlOworCWJmYWQtPmNmZ19kYXRhLmJpbmRpbmdfbWV0aG9kID0gRkNQX1BXV05fQklORElORzsKKworCXJjID0gYmZhZF9oYWxfbWVtX2FsbG9jKGJmYWQpOworCWlmIChyYyAhPSBCRkFfU1RBVFVTX09LKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgImJmYWQlZCBiZmFkX2hhbF9tZW1fYWxsb2MgZmFpbHVyZVxuIiwKKwkJICAgICAgIGJmYWQtPmluc3Rfbm8pOworCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkiTm90IGVub3VnaCBtZW1vcnkgdG8gYXR0YWNoIGFsbCBCcm9jYWRlIEhCQSBwb3J0cywiCisJCQkiIFN5c3RlbSBtYXkgbmVlZCBtb3JlIG1lbW9yeS5cbiIpOworCQlnb3RvIG91dF9oYWxfbWVtX2FsbG9jX2ZhaWx1cmU7CisJfQorCisJYmZhX2luaXRfbG9nKCZiZmFkLT5iZmEsIGJmYWQtPmxvZ21vZCk7CisJYmZhX2luaXRfdHJjKCZiZmFkLT5iZmEsIGJmYWQtPnRyY21vZCk7CisJYmZhX2luaXRfYWVuKCZiZmFkLT5iZmEsIGJmYWQtPmFlbik7CisJSU5JVF9MSVNUX0hFQUQoJmJmYWQtPmZpbGVfcSk7CisJSU5JVF9MSVNUX0hFQUQoJmJmYWQtPmZpbGVfZnJlZV9xKTsKKwlmb3IgKGkgPSAwOyBpIDwgQkZBRF9BRU5fTUFYX0FQUFM7IGkrKykgeworCQliZmFfcV9xZV9pbml0KCZiZmFkLT5maWxlX2J1ZltpXS5xZSk7CisJCWxpc3RfYWRkX3RhaWwoJmJmYWQtPmZpbGVfYnVmW2ldLnFlLCAmYmZhZC0+ZmlsZV9mcmVlX3EpOworCX0KKwliZmFfaW5pdF9wbG9nKCZiZmFkLT5iZmEsICZiZmFkLT5wbG9nX2J1Zik7CisJYmZhX3Bsb2dfaW5pdCgmYmZhZC0+cGxvZ19idWYpOworCWJmYV9wbG9nX3N0cigmYmZhZC0+cGxvZ19idWYsIEJGQV9QTF9NSURfRFJWUiwgQkZBX1BMX0VJRF9EUklWRVJfU1RBUlQsCisJCSAgICAgMCwgIkRyaXZlciBBdHRhY2giKTsKKworCWJmYV9hdHRhY2goJmJmYWQtPmJmYSwgYmZhZCwgJmJmYWQtPmlvY19jZmcsICZiZmFkLT5tZW1pbmZvLAorCQkgICAmYmZhZC0+aGFsX3BjaWRldik7CisKKwlpbml0X2NvbXBsZXRpb24oJmJmYWQtPmNvbXApOworCisJLyoKKwkgKiBFbmFibGUgSW50ZXJydXB0IGFuZCB3YWl0IGJmYV9pbml0IGNvbXBsZXRpb24KKwkgKi8KKwlpZiAoYmZhZF9zZXR1cF9pbnRyKGJmYWQpKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgImJmYWQlZDogYmZhZF9zZXR1cF9pbnRyIGZhaWxlZFxuIiwKKwkJICAgICAgIGJmYWQtPmluc3Rfbm8pOworCQlnb3RvIG91dF9zZXR1cF9pbnRyX2ZhaWx1cmU7CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOworCWJmYV9pbml0KCZiZmFkLT5iZmEpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOworCisJLyoKKwkgKiBTZXQgdXAgaW50ZXJydXB0IGhhbmRsZXIgZm9yIGVhY2ggdmVjdG9ycworCSAqLworCWlmICgoYmZhZC0+YmZhZF9mbGFncyAmIEJGQURfTVNJWF9PTikKKwkgICAgJiYgYmZhZF9pbnN0YWxsX21zaXhfaGFuZGxlcihiZmFkKSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogaW5zdGFsbF9tc2l4IGZhaWxlZCwgYmZhZCVkXG4iLAorCQkgICAgICAgX19GVU5DVElPTl9fLCBiZmFkLT5pbnN0X25vKTsKKwl9CisKKwliZmFkX2luaXRfdGltZXIoYmZhZCk7CisKKwl3YWl0X2Zvcl9jb21wbGV0aW9uKCZiZmFkLT5jb21wKTsKKworCW1lbXNldCgmZHJpdmVyX2luZm8sIDAsIHNpemVvZihkcml2ZXJfaW5mbykpOworCXN0cm5jcHkoZHJpdmVyX2luZm8udmVyc2lvbiwgQkZBRF9EUklWRVJfVkVSU0lPTiwKKwkJc2l6ZW9mKGRyaXZlcl9pbmZvLnZlcnNpb24pIC0gMSk7CisJaWYgKGhvc3RfbmFtZSkKKwkJc3RybmNweShkcml2ZXJfaW5mby5ob3N0X21hY2hpbmVfbmFtZSwgaG9zdF9uYW1lLAorCQkJc2l6ZW9mKGRyaXZlcl9pbmZvLmhvc3RfbWFjaGluZV9uYW1lKSAtIDEpOworCWlmIChvc19uYW1lKQorCQlzdHJuY3B5KGRyaXZlcl9pbmZvLmhvc3Rfb3NfbmFtZSwgb3NfbmFtZSwKKwkJCXNpemVvZihkcml2ZXJfaW5mby5ob3N0X29zX25hbWUpIC0gMSk7CisJaWYgKG9zX3BhdGNoKQorCQlzdHJuY3B5KGRyaXZlcl9pbmZvLmhvc3Rfb3NfcGF0Y2gsIG9zX3BhdGNoLAorCQkJc2l6ZW9mKGRyaXZlcl9pbmZvLmhvc3Rfb3NfcGF0Y2gpIC0gMSk7CisKKwlzdHJuY3B5KGRyaXZlcl9pbmZvLm9zX2RldmljZV9uYW1lLCBiZmFkLT5wY2lfbmFtZSwKKwkJc2l6ZW9mKGRyaXZlcl9pbmZvLm9zX2RldmljZV9uYW1lIC0gMSkpOworCisJLyoKKwkgKiBGQ1MgSU5JVAorCSAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKKwliZmFfZmNzX2xvZ19pbml0KCZiZmFkLT5iZmFfZmNzLCBiZmFkLT5sb2dtb2QpOworCWJmYV9mY3NfdHJjX2luaXQoJmJmYWQtPmJmYV9mY3MsIGJmYWQtPnRyY21vZCk7CisJYmZhX2Zjc19hZW5faW5pdCgmYmZhZC0+YmZhX2ZjcywgYmZhZC0+YWVuKTsKKwliZmFfZmNzX2luaXQoJmJmYWQtPmJmYV9mY3MsICZiZmFkLT5iZmEsIGJmYWQsIEJGQV9GQUxTRSk7CisJYmZhX2Zjc19kcml2ZXJfaW5mb19pbml0KCZiZmFkLT5iZmFfZmNzLCAmZHJpdmVyX2luZm8pOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOworCisJYmZhZC0+YmZhZF9mbGFncyB8PSBCRkFEX0RSVl9JTklUX0RPTkU7CisJcmV0dXJuIEJGQV9TVEFUVVNfT0s7CisKK291dF9zZXR1cF9pbnRyX2ZhaWx1cmU6CisJYmZhX2RldGFjaCgmYmZhZC0+YmZhKTsKKwliZmFkX2hhbF9tZW1fcmVsZWFzZShiZmFkKTsKK291dF9oYWxfbWVtX2FsbG9jX2ZhaWx1cmU6CisJcmV0dXJuIEJGQV9TVEFUVVNfRkFJTEVEOworfQorCit2b2lkCitiZmFkX2Rydl91bmluaXQoc3RydWN0IGJmYWRfcyAqYmZhZCkKK3sKKwlkZWxfdGltZXJfc3luYygmYmZhZC0+aGFsX3Rtbyk7CisJYmZhX2lzcl9kaXNhYmxlKCZiZmFkLT5iZmEpOworCWJmYV9kZXRhY2goJmJmYWQtPmJmYSk7CisJYmZhZF9yZW1vdmVfaW50cihiZmFkKTsKKwliZmFfYXNzZXJ0KGxpc3RfZW1wdHkoJmJmYWQtPmZpbGVfcSkpOworCWJmYWRfaGFsX21lbV9yZWxlYXNlKGJmYWQpOworfQorCit2b2lkCitiZmFkX2Rydl9zdGFydChzdHJ1Y3QgYmZhZF9zICpiZmFkKQoreworCXVuc2lnbmVkIGxvbmcgICBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKKwliZmFfc3RhcnQoJmJmYWQtPmJmYSk7CisJYmZhX2Zjc19zdGFydCgmYmZhZC0+YmZhX2Zjcyk7CisJYmZhZC0+YmZhZF9mbGFncyB8PSBCRkFEX0hBTF9TVEFSVF9ET05FOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOworCisJYmZhZF9mYzRfcHJvYmVfcG9zdChiZmFkKTsKK30KKwordm9pZAorYmZhZF9kcnZfc3RvcChzdHJ1Y3QgYmZhZF9zICpiZmFkKQoreworCXVuc2lnbmVkIGxvbmcgICBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKKwlpbml0X2NvbXBsZXRpb24oJmJmYWQtPmNvbXApOworCWJmYWQtPnBwb3J0LmZsYWdzIHw9IEJGQURfUE9SVF9ERUxFVEU7CisJYmZhX2Zjc19leGl0KCZiZmFkLT5iZmFfZmNzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKKwl3YWl0X2Zvcl9jb21wbGV0aW9uKCZiZmFkLT5jb21wKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKKwlpbml0X2NvbXBsZXRpb24oJmJmYWQtPmNvbXApOworCWJmYV9zdG9wKCZiZmFkLT5iZmEpOworCWJmYWQtPmJmYWRfZmxhZ3MgJj0gfkJGQURfSEFMX1NUQVJUX0RPTkU7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisJd2FpdF9mb3JfY29tcGxldGlvbigmYmZhZC0+Y29tcCk7Cit9CisKK2JmYV9zdGF0dXNfdAorYmZhZF9jZmdfcHBvcnQoc3RydWN0IGJmYWRfcyAqYmZhZCwgZW51bSBiZmFfcG9ydF9yb2xlIHJvbGUpCit7CisJaW50ICAgICAgICAgICAgIHJjID0gQkZBX1NUQVRVU19PSzsKKworCS8qCisJICogQWxsb2NhdGUgc2NzaV9ob3N0IGZvciB0aGUgcGh5c2ljYWwgcG9ydAorCSAqLworCWlmICgoYmZhZF9zdXBwb3J0ZWRfZmM0cyAmIEJGQV9QT1JUX1JPTEVfRkNQX0lNKQorCSAgICAmJiAocm9sZSAmIEJGQV9QT1JUX1JPTEVfRkNQX0lNKSkgeworCQlpZiAoYmZhZC0+cHBvcnQuaW1fcG9ydCA9PSBOVUxMKSB7CisJCQlyYyA9IEJGQV9TVEFUVVNfRkFJTEVEOworCQkJZ290byBvdXQ7CisJCX0KKworCQlyYyA9IGJmYWRfaW1fc2NzaV9ob3N0X2FsbG9jKGJmYWQsIGJmYWQtPnBwb3J0LmltX3BvcnQpOworCQlpZiAocmMgIT0gQkZBX1NUQVRVU19PSykKKwkJCWdvdG8gb3V0OworCisJCWJmYWQtPnBwb3J0LnJvbGVzIHw9IEJGQV9QT1JUX1JPTEVfRkNQX0lNOworCX0KKworCWJmYWQtPmJmYWRfZmxhZ3MgfD0gQkZBRF9DRkdfUFBPUlRfRE9ORTsKKworb3V0OgorCXJldHVybiByYzsKK30KKwordm9pZAorYmZhZF91bmNmZ19wcG9ydChzdHJ1Y3QgYmZhZF9zICpiZmFkKQoreworCWlmICgoYmZhZC0+cHBvcnQucm9sZXMgJiBCRkFfUE9SVF9ST0xFX0ZDUF9JUEZDKSAmJiBpcGZjX2VuYWJsZSkgeworCQliZmFkX2lwZmNfcG9ydF9kZWxldGUoYmZhZCwgJmJmYWQtPnBwb3J0KTsKKwkJYmZhZC0+cHBvcnQucm9sZXMgJj0gfkJGQV9QT1JUX1JPTEVfRkNQX0lQRkM7CisJfQorCisJaWYgKChiZmFkX3N1cHBvcnRlZF9mYzRzICYgQkZBX1BPUlRfUk9MRV9GQ1BfSU0pCisJICAgICYmIChiZmFkLT5wcG9ydC5yb2xlcyAmIEJGQV9QT1JUX1JPTEVfRkNQX0lNKSkgeworCQliZmFkX2ltX3Njc2lfaG9zdF9mcmVlKGJmYWQsIGJmYWQtPnBwb3J0LmltX3BvcnQpOworCQliZmFkX2ltX3BvcnRfY2xlYW4oYmZhZC0+cHBvcnQuaW1fcG9ydCk7CisJCWtmcmVlKGJmYWQtPnBwb3J0LmltX3BvcnQpOworCQliZmFkLT5wcG9ydC5yb2xlcyAmPSB+QkZBX1BPUlRfUk9MRV9GQ1BfSU07CisJfQorCisJYmZhZC0+YmZhZF9mbGFncyAmPSB+QkZBRF9DRkdfUFBPUlRfRE9ORTsKK30KKwordm9pZAorYmZhZF9kcnZfbG9nX2xldmVsX3NldChzdHJ1Y3QgYmZhZF9zICpiZmFkKQoreworCWlmIChsb2dfbGV2ZWwgPiBCRkFfTE9HX0lOVkFMSUQgJiYgbG9nX2xldmVsIDw9IEJGQV9MT0dfTEVWRUxfTUFYKQorCQliZmFfbG9nX3NldF9sZXZlbF9hbGwoJmJmYWQtPmxvZ19kYXRhLCBsb2dfbGV2ZWwpOworfQorCisgLyoKKyAgKiAgUENJX2VudHJ5IFBDSSBkcml2ZXIgZW50cmllcyAqIHsKKyAgKi8KKworLyoqCisgKiBQQ0kgcHJvYmUgZW50cnkuCisgKi8KK2ludAorYmZhZF9wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpwaWQpCit7CisJc3RydWN0IGJmYWRfcyAgKmJmYWQ7CisJaW50ICAgICAgICAgICAgIGVycm9yID0gLUVOT0RFViwgcmV0dmFsOworCWNoYXIgICAgICAgICAgICBidWZbMTZdOworCisJLyoKKwkgKiBGb3Igc2luZ2xlIHBvcnQgY2FyZHMgLSBvbmx5IGNsYWltIGZ1bmN0aW9uIDAKKwkgKi8KKwlpZiAoKHBkZXYtPmRldmljZSA9PSBCRkFfUENJX0RFVklDRV9JRF9GQ184RzFQKQorCSAgICAmJiAoUENJX0ZVTkMocGRldi0+ZGV2Zm4pICE9IDApKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCUJGQV9UUkFDRShCRkFfSU5GTywgImJmYWRfcGNpX3Byb2JlIGVudHJ5Iik7CisKKwliZmFkID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGJmYWRfcyksIEdGUF9LRVJORUwpOworCWlmICghYmZhZCkgeworCQllcnJvciA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCWJmYWQtPnRyY21vZCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBiZmFfdHJjX21vZF9zKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFiZmFkLT50cmNtb2QpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiRXJyb3IgYWxsb2MgdHJhY2UgYnVmZmVyIVxuIik7CisJCWVycm9yID0gLUVOT01FTTsKKwkJZ290byBvdXRfYWxsb2NfdHJhY2VfZmFpbHVyZTsKKwl9CisKKwkvKgorCSAqIExPRy9UUkFDRSBJTklUCisJICovCisJYmZhX3RyY19pbml0KGJmYWQtPnRyY21vZCk7CisJYmZhX3RyYyhiZmFkLCBiZmFkX2luc3QpOworCisJYmZhZC0+bG9nbW9kID0gJmJmYWQtPmxvZ19kYXRhOworCXNwcmludGYoYnVmLCAiJWQiLCBiZmFkX2luc3QpOworCWJmYV9sb2dfaW5pdChiZmFkLT5sb2dtb2QsIGJ1ZiwgYmZhX29zX3ByaW50Zik7CisKKwliZmFkX2Rydl9sb2dfbGV2ZWxfc2V0KGJmYWQpOworCisJYmZhZC0+YWVuID0gJmJmYWQtPmFlbl9idWY7CisKKwlpZiAoIShiZmFkX2xvYWRfZndpbWcocGRldikpKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgImJmYWRfbG9hZF9md2ltZyBmYWlsdXJlIVxuIik7CisJCWtmcmVlKGJmYWQtPnRyY21vZCk7CisJCWdvdG8gb3V0X2FsbG9jX3RyYWNlX2ZhaWx1cmU7CisJfQorCisJcmV0dmFsID0gYmZhZF9wY2lfaW5pdChwZGV2LCBiZmFkKTsKKwlpZiAocmV0dmFsKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgImJmYWRfcGNpX2luaXQgZmFpbHVyZSFcbiIpOworCQllcnJvciA9IHJldHZhbDsKKwkJZ290byBvdXRfcGNpX2luaXRfZmFpbHVyZTsKKwl9CisKKwltdXRleF9sb2NrKCZiZmFkX211dGV4KTsKKwliZmFkLT5pbnN0X25vID0gYmZhZF9pbnN0Kys7CisJbGlzdF9hZGRfdGFpbCgmYmZhZC0+bGlzdF9lbnRyeSwgJmJmYWRfbGlzdCk7CisJbXV0ZXhfdW5sb2NrKCZiZmFkX211dGV4KTsKKworCXNwaW5fbG9ja19pbml0KCZiZmFkLT5iZmFkX2xvY2spOworCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBiZmFkKTsKKworCWJmYWQtPnJlZl9jb3VudCA9IDA7CisJYmZhZC0+cHBvcnQuYmZhZCA9IGJmYWQ7CisKKwlyZXR2YWwgPSBiZmFkX2Rydl9pbml0KGJmYWQpOworCWlmIChyZXR2YWwgIT0gQkZBX1NUQVRVU19PSykKKwkJZ290byBvdXRfZHJ2X2luaXRfZmFpbHVyZTsKKwlpZiAoIShiZmFkLT5iZmFkX2ZsYWdzICYgQkZBRF9IQUxfSU5JVF9ET05FKSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJiZmFkJWQ6IGhhbCBpbml0IGZhaWxlZFxuIiwgYmZhZC0+aW5zdF9ubyk7CisJCWdvdG8gb2s7CisJfQorCisJLyoKKwkgKiBQUE9SVCBGQ1MgY29uZmlnCisJICovCisJYmZhZF9mY3NfcG9ydF9jZmcoYmZhZCk7CisKKwlyZXR2YWwgPSBiZmFkX2NmZ19wcG9ydChiZmFkLCBCRkFfUE9SVF9ST0xFX0ZDUF9JTSk7CisJaWYgKHJldHZhbCAhPSBCRkFfU1RBVFVTX09LKQorCQlnb3RvIG91dF9jZmdfcHBvcnRfZmFpbHVyZTsKKworCS8qCisJICogQkZBRCBsZXZlbCBGQzQgKElNL1RNL0lQRkMpIHNwZWNpZmljIHJlc291cmNlIGFsbG9jYXRpb24KKwkgKi8KKwlyZXR2YWwgPSBiZmFkX2ZjNF9wcm9iZShiZmFkKTsKKwlpZiAocmV0dmFsICE9IEJGQV9TVEFUVVNfT0spIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiYmZhZF9mYzRfcHJvYmUgZmFpbGVkXG4iKTsKKwkJZ290byBvdXRfZmM0X3Byb2JlX2ZhaWx1cmU7CisJfQorCisJYmZhZF9kcnZfc3RhcnQoYmZhZCk7CisKKwkvKgorCSAqIElmIGJmYV9saW5rdXBfZGVsYXkgaXMgc2V0IHRvIC0xIGRlZmF1bHQ7IHRyeSB0byByZXRyaXZlIHRoZQorCSAqIHZhbHVlIHVzaW5nIHRoZSBiZmFkX29zX2dldF9saW5rdXBfZGVsYXkoKTsgZWxzZSB1c2UgdGhlCisJICogcGFzc2VkIGluIG1vZHVsZSBwYXJhbSB2YWx1ZSBhcyB0aGUgYmZhX2xpbmt1cF9kZWxheS4KKwkgKi8KKwlpZiAoYmZhX2xpbmt1cF9kZWxheSA8IDApIHsKKwkJYmZhX2xpbmt1cF9kZWxheSA9IGJmYWRfb3NfZ2V0X2xpbmt1cF9kZWxheShiZmFkKTsKKwkJYmZhZF9vc19ycG9ydF9vbmxpbmVfd2FpdChiZmFkKTsKKwkJYmZhX2xpbmt1cF9kZWxheSA9IC0xOworCX0gZWxzZSB7CisJCWJmYWRfb3NfcnBvcnRfb25saW5lX3dhaXQoYmZhZCk7CisJfQorCisJYmZhX2xvZyhiZmFkLT5sb2dtb2QsIEJGQV9MT0dfTElOVVhfREVWSUNFX0NMQUlNRUQsIGJmYWQtPnBjaV9uYW1lKTsKK29rOgorCXJldHVybiAwOworCitvdXRfZmM0X3Byb2JlX2ZhaWx1cmU6CisJYmZhZF9mYzRfcHJvYmVfdW5kbyhiZmFkKTsKKwliZmFkX3VuY2ZnX3Bwb3J0KGJmYWQpOworb3V0X2NmZ19wcG9ydF9mYWlsdXJlOgorCWJmYWRfZHJ2X3VuaW5pdChiZmFkKTsKK291dF9kcnZfaW5pdF9mYWlsdXJlOgorCW11dGV4X2xvY2soJmJmYWRfbXV0ZXgpOworCWJmYWRfaW5zdC0tOworCWxpc3RfZGVsKCZiZmFkLT5saXN0X2VudHJ5KTsKKwltdXRleF91bmxvY2soJmJmYWRfbXV0ZXgpOworCWJmYWRfcGNpX3VuaW5pdChwZGV2LCBiZmFkKTsKK291dF9wY2lfaW5pdF9mYWlsdXJlOgorCWtmcmVlKGJmYWQtPnRyY21vZCk7CitvdXRfYWxsb2NfdHJhY2VfZmFpbHVyZToKKwlrZnJlZShiZmFkKTsKK291dDoKKwlyZXR1cm4gZXJyb3I7Cit9CisKKy8qKgorICogUENJIHJlbW92ZSBlbnRyeS4KKyAqLwordm9pZAorYmZhZF9wY2lfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXN0cnVjdCBiZmFkX3MgICpiZmFkID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCXVuc2lnbmVkIGxvbmcgICBmbGFnczsKKworCWJmYV90cmMoYmZhZCwgYmZhZC0+aW5zdF9ubyk7CisKKwlpZiAoKGJmYWQtPmJmYWRfZmxhZ3MgJiBCRkFEX0RSVl9JTklUX0RPTkUpCisJICAgICYmICEoYmZhZC0+YmZhZF9mbGFncyAmIEJGQURfSEFMX0lOSVRfRE9ORSkpIHsKKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisJCWluaXRfY29tcGxldGlvbigmYmZhZC0+Y29tcCk7CisJCWJmYV9zdG9wKCZiZmFkLT5iZmEpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKKwkJd2FpdF9mb3JfY29tcGxldGlvbigmYmZhZC0+Y29tcCk7CisKKwkJYmZhZF9yZW1vdmVfaW50cihiZmFkKTsKKwkJZGVsX3RpbWVyX3N5bmMoJmJmYWQtPmhhbF90bW8pOworCQlnb3RvIGhhbF9kZXRhY2g7CisJfSBlbHNlIGlmICghKGJmYWQtPmJmYWRfZmxhZ3MgJiBCRkFEX0RSVl9JTklUX0RPTkUpKSB7CisJCWdvdG8gcmVtb3ZlX3N5c2ZzOworCX0KKworCWlmIChiZmFkLT5iZmFkX2ZsYWdzICYgQkZBRF9IQUxfU1RBUlRfRE9ORSkKKwkJYmZhZF9kcnZfc3RvcChiZmFkKTsKKworCWJmYWRfcmVtb3ZlX2ludHIoYmZhZCk7CisKKwlkZWxfdGltZXJfc3luYygmYmZhZC0+aGFsX3Rtbyk7CisJYmZhZF9mYzRfcHJvYmVfdW5kbyhiZmFkKTsKKworCWlmIChiZmFkLT5iZmFkX2ZsYWdzICYgQkZBRF9DRkdfUFBPUlRfRE9ORSkKKwkJYmZhZF91bmNmZ19wcG9ydChiZmFkKTsKKworaGFsX2RldGFjaDoKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisJYmZhX2RldGFjaCgmYmZhZC0+YmZhKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKKwliZmFkX2hhbF9tZW1fcmVsZWFzZShiZmFkKTsKK3JlbW92ZV9zeXNmczoKKworCW11dGV4X2xvY2soJmJmYWRfbXV0ZXgpOworCWJmYWRfaW5zdC0tOworCWxpc3RfZGVsKCZiZmFkLT5saXN0X2VudHJ5KTsKKwltdXRleF91bmxvY2soJmJmYWRfbXV0ZXgpOworCWJmYWRfcGNpX3VuaW5pdChwZGV2LCBiZmFkKTsKKworCWtmcmVlKGJmYWQtPnRyY21vZCk7CisJa2ZyZWUoYmZhZCk7Cit9CisKKworc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGJmYWRfaWRfdGFibGVbXSA9IHsKKwl7CisJIC52ZW5kb3IgPSBCRkFfUENJX1ZFTkRPUl9JRF9CUk9DQURFLAorCSAuZGV2aWNlID0gQkZBX1BDSV9ERVZJQ0VfSURfRkNfOEcyUCwKKwkgLnN1YnZlbmRvciA9IFBDSV9BTllfSUQsCisJIC5zdWJkZXZpY2UgPSBQQ0lfQU5ZX0lELAorCSB9LAorCXsKKwkgLnZlbmRvciA9IEJGQV9QQ0lfVkVORE9SX0lEX0JST0NBREUsCisJIC5kZXZpY2UgPSBCRkFfUENJX0RFVklDRV9JRF9GQ184RzFQLAorCSAuc3VidmVuZG9yID0gUENJX0FOWV9JRCwKKwkgLnN1YmRldmljZSA9IFBDSV9BTllfSUQsCisJIH0sCisJeworCSAudmVuZG9yID0gQkZBX1BDSV9WRU5ET1JfSURfQlJPQ0FERSwKKwkgLmRldmljZSA9IEJGQV9QQ0lfREVWSUNFX0lEX0NULAorCSAuc3VidmVuZG9yID0gUENJX0FOWV9JRCwKKwkgLnN1YmRldmljZSA9IFBDSV9BTllfSUQsCisJIC5jbGFzcyA9IChQQ0lfQ0xBU1NfU0VSSUFMX0ZJQkVSIDw8IDgpLAorCSAuY2xhc3NfbWFzayA9IH4wLAorCSB9LAorCisJezAsIDB9LAorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGJmYWRfaWRfdGFibGUpOworCitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgYmZhZF9wY2lfZHJpdmVyID0geworCS5uYW1lID0gQkZBRF9EUklWRVJfTkFNRSwKKwkuaWRfdGFibGUgPSBiZmFkX2lkX3RhYmxlLAorCS5wcm9iZSA9IGJmYWRfcGNpX3Byb2JlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcChiZmFkX3BjaV9yZW1vdmUpLAorfTsKKworLyoqCisgKiAgTGludXggZHJpdmVyIG1vZHVsZSBmdW5jdGlvbnMKKyAqLworYmZhX3N0YXR1c190CitiZmFkX2ZjNF9tb2R1bGVfaW5pdCh2b2lkKQoreworCWludCAgICAgICAgICAgICByYzsKKworCXJjID0gYmZhZF9pbV9tb2R1bGVfaW5pdCgpOworCWlmIChyYyAhPSBCRkFfU1RBVFVTX09LKQorCQlnb3RvIGV4dDsKKworCWJmYWRfdG1fbW9kdWxlX2luaXQoKTsKKwlpZiAoaXBmY19lbmFibGUpCisJCWJmYWRfaXBmY19tb2R1bGVfaW5pdCgpOworZXh0OgorCXJldHVybiByYzsKK30KKwordm9pZAorYmZhZF9mYzRfbW9kdWxlX2V4aXQodm9pZCkKK3sKKwlpZiAoaXBmY19lbmFibGUpCisJCWJmYWRfaXBmY19tb2R1bGVfZXhpdCgpOworCWJmYWRfdG1fbW9kdWxlX2V4aXQoKTsKKwliZmFkX2ltX21vZHVsZV9leGl0KCk7Cit9CisKKy8qKgorICogRHJpdmVyIG1vZHVsZSBpbml0LgorICovCitzdGF0aWMgaW50ICAgICAgX19pbml0CitiZmFkX2luaXQodm9pZCkKK3sKKwlpbnQgICAgICAgICAgICAgZXJyb3IgPSAwOworCisJcHJpbnRrKEtFUk5fSU5GTyAiQnJvY2FkZSBCRkEgRkMvRkNPRSBTQ1NJIGRyaXZlciAtIHZlcnNpb246ICVzXG4iLAorCSAgICAgICBCRkFEX0RSSVZFUl9WRVJTSU9OKTsKKworCWlmIChudW1fc2dwZ3MgPiAwKQorCQludW1fc2dwZ3NfcGFybSA9IG51bV9zZ3BnczsKKworCWVycm9yID0gYmZhZF9mYzRfbW9kdWxlX2luaXQoKTsKKwlpZiAoZXJyb3IpIHsKKwkJZXJyb3IgPSAtRU5PTUVNOworCQlwcmludGsoS0VSTl9XQVJOSU5HICJiZmFkX2ZjNF9tb2R1bGVfaW5pdCBmYWlsdXJlXG4iKTsKKwkJZ290byBleHQ7CisJfQorCisJaWYgKCFzdHJjbXAoRkNQSV9OQU1FLCAiIGZjcGltIikpCisJCWJmYWRfc3VwcG9ydGVkX2ZjNHMgfD0gQkZBX1BPUlRfUk9MRV9GQ1BfSU07CisJaWYgKCFzdHJjbXAoRkNQVF9OQU1FLCAiIGZjcHRtIikpCisJCWJmYWRfc3VwcG9ydGVkX2ZjNHMgfD0gQkZBX1BPUlRfUk9MRV9GQ1BfVE07CisJaWYgKCFzdHJjbXAoSVBGQ19OQU1FLCAiIGlwZmMiKSkKKwkJYmZhZF9zdXBwb3J0ZWRfZmM0cyB8PSBCRkFfUE9SVF9ST0xFX0ZDUF9JUEZDOworCisJYmZhX2lvY19hdXRvX3JlY292ZXIoaW9jX2F1dG9fcmVjb3Zlcik7CisJYmZhX2Zjc19ycG9ydF9zZXRfZGVsX3RpbWVvdXQocnBvcnRfZGVsX3RpbWVvdXQpOworCWVycm9yID0gcGNpX3JlZ2lzdGVyX2RyaXZlcigmYmZhZF9wY2lfZHJpdmVyKTsKKworCWlmIChlcnJvcikgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJiZmFkIHBjaV9yZWdpc3Rlcl9kcml2ZXIgZmFpbHVyZVxuIik7CisJCWdvdG8gZXh0OworCX0KKworCXJldHVybiAwOworCitleHQ6CisJYmZhZF9mYzRfbW9kdWxlX2V4aXQoKTsKKwlyZXR1cm4gZXJyb3I7Cit9CisKKy8qKgorICogRHJpdmVyIG1vZHVsZSBleGl0LgorICovCitzdGF0aWMgdm9pZCAgICAgX19leGl0CitiZmFkX2V4aXQodm9pZCkKK3sKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmJmYWRfcGNpX2RyaXZlcik7CisJYmZhZF9mYzRfbW9kdWxlX2V4aXQoKTsKKwliZmFkX2ZyZWVfZndpbWcoKTsKK30KKworI2RlZmluZSBCRkFEX1BST1RPX05BTUUgRkNQSV9OQU1FIEZDUFRfTkFNRSBJUEZDX05BTUUKKworbW9kdWxlX2luaXQoYmZhZF9pbml0KTsKK21vZHVsZV9leGl0KGJmYWRfZXhpdCk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIQkEgRHJpdmVyIiBCRkFEX1BST1RPX05BTUUpOworTU9EVUxFX0FVVEhPUigiQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuIik7CitNT0RVTEVfVkVSU0lPTihCRkFEX0RSSVZFUl9WRVJTSU9OKTsKKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2JmYWRfYXR0ci5jIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFkX2F0dHIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MTI5YWUzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFkX2F0dHIuYwpAQCAtMCwwICsxLDY0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisvKioKKyAqICBiZmFfYXR0ci5jIExpbnV4IGRyaXZlciBjb25maWd1cmF0aW9uIGludGVyZmFjZSBtb2R1bGUuCisgKi8KKworI2luY2x1ZGUgImJmYWRfZHJ2LmgiCisjaW5jbHVkZSAiYmZhZF9pbS5oIgorI2luY2x1ZGUgImJmYWRfdHJjbW9kLmgiCisjaW5jbHVkZSAiYmZhZF9hdHRyLmgiCisKKy8qKgorICogIEZDX3RyYW5zcG9ydF90ZW1wbGF0ZSBGQyB0cmFuc3BvcnQgdGVtcGxhdGUKKyAqLworCisvKioKKyAqIEZDIHRyYW5zcG9ydCB0ZW1wbGF0ZSBlbnRyeSwgZ2V0IFNDU0kgdGFyZ2V0IHBvcnQgSUQuCisgKi8KK3ZvaWQKK2JmYWRfaW1fZ2V0X3N0YXJnZXRfcG9ydF9pZChzdHJ1Y3Qgc2NzaV90YXJnZXQgKnN0YXJnZXQpCit7CisJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3Q7CisJc3RydWN0IGJmYWRfaW1fcG9ydF9zICppbV9wb3J0OworCXN0cnVjdCBiZmFkX3MgICAgICAgICAqYmZhZDsKKwlzdHJ1Y3QgYmZhZF9pdG5pbV9zICAgKml0bmltID0gTlVMTDsKKwl1MzIgICAgICAgIGZjX2lkID0gLTE7CisJdW5zaWduZWQgbG9uZyAgIGZsYWdzOworCisJc2hvc3QgPSBiZmFkX29zX3N0YXJnZXRfdG9fc2hvc3Qoc3RhcmdldCk7CisJaW1fcG9ydCA9IChzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKikgc2hvc3QtPmhvc3RkYXRhWzBdOworCWJmYWQgPSBpbV9wb3J0LT5iZmFkOworCXNwaW5fbG9ja19pcnFzYXZlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKKworCWl0bmltID0gYmZhZF9vc19nZXRfaXRuaW0oaW1fcG9ydCwgc3RhcmdldC0+aWQpOworCWlmIChpdG5pbSkKKwkJZmNfaWQgPSBiZmFfZmNzX2l0bmltX2dldF9mY2lkKCZpdG5pbS0+ZmNzX2l0bmltKTsKKworCWZjX3N0YXJnZXRfcG9ydF9pZChzdGFyZ2V0KSA9IGZjX2lkOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOworfQorCisvKioKKyAqIEZDIHRyYW5zcG9ydCB0ZW1wbGF0ZSBlbnRyeSwgZ2V0IFNDU0kgdGFyZ2V0IG53d24uCisgKi8KK3ZvaWQKK2JmYWRfaW1fZ2V0X3N0YXJnZXRfbm9kZV9uYW1lKHN0cnVjdCBzY3NpX3RhcmdldCAqc3RhcmdldCkKK3sKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdDsKKwlzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKmltX3BvcnQ7CisJc3RydWN0IGJmYWRfcyAgICAgICAgICpiZmFkOworCXN0cnVjdCBiZmFkX2l0bmltX3MgICAqaXRuaW0gPSBOVUxMOworCXU2NCAgICAgICAgICAgICBub2RlX25hbWUgPSAwOworCXVuc2lnbmVkIGxvbmcgICBmbGFnczsKKworCXNob3N0ID0gYmZhZF9vc19zdGFyZ2V0X3RvX3Nob3N0KHN0YXJnZXQpOworCWltX3BvcnQgPSAoc3RydWN0IGJmYWRfaW1fcG9ydF9zICopIHNob3N0LT5ob3N0ZGF0YVswXTsKKwliZmFkID0gaW1fcG9ydC0+YmZhZDsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisKKwlpdG5pbSA9IGJmYWRfb3NfZ2V0X2l0bmltKGltX3BvcnQsIHN0YXJnZXQtPmlkKTsKKwlpZiAoaXRuaW0pCisJCW5vZGVfbmFtZSA9IGJmYV9mY3NfaXRuaW1fZ2V0X253d24oJml0bmltLT5mY3NfaXRuaW0pOworCisJZmNfc3RhcmdldF9ub2RlX25hbWUoc3RhcmdldCkgPSBiZmFfb3NfaHRvbmxsKG5vZGVfbmFtZSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7Cit9CisKKy8qKgorICogRkMgdHJhbnNwb3J0IHRlbXBsYXRlIGVudHJ5LCBnZXQgU0NTSSB0YXJnZXQgcHd3bi4KKyAqLwordm9pZAorYmZhZF9pbV9nZXRfc3RhcmdldF9wb3J0X25hbWUoc3RydWN0IHNjc2lfdGFyZ2V0ICpzdGFyZ2V0KQoreworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0OworCXN0cnVjdCBiZmFkX2ltX3BvcnRfcyAqaW1fcG9ydDsKKwlzdHJ1Y3QgYmZhZF9zICAgICAgICAgKmJmYWQ7CisJc3RydWN0IGJmYWRfaXRuaW1fcyAgICppdG5pbSA9IE5VTEw7CisJdTY0ICAgICAgICAgICAgIHBvcnRfbmFtZSA9IDA7CisJdW5zaWduZWQgbG9uZyAgIGZsYWdzOworCisJc2hvc3QgPSBiZmFkX29zX3N0YXJnZXRfdG9fc2hvc3Qoc3RhcmdldCk7CisJaW1fcG9ydCA9IChzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKikgc2hvc3QtPmhvc3RkYXRhWzBdOworCWJmYWQgPSBpbV9wb3J0LT5iZmFkOworCXNwaW5fbG9ja19pcnFzYXZlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKKworCWl0bmltID0gYmZhZF9vc19nZXRfaXRuaW0oaW1fcG9ydCwgc3RhcmdldC0+aWQpOworCWlmIChpdG5pbSkKKwkJcG9ydF9uYW1lID0gYmZhX2Zjc19pdG5pbV9nZXRfcHd3bigmaXRuaW0tPmZjc19pdG5pbSk7CisKKwlmY19zdGFyZ2V0X3BvcnRfbmFtZShzdGFyZ2V0KSA9IGJmYV9vc19odG9ubGwocG9ydF9uYW1lKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKK30KKworLyoqCisgKiBGQyB0cmFuc3BvcnQgdGVtcGxhdGUgZW50cnksIGdldCBTQ1NJIGhvc3QgcG9ydCBJRC4KKyAqLwordm9pZAorYmZhZF9pbV9nZXRfaG9zdF9wb3J0X2lkKHN0cnVjdCBTY3NpX0hvc3QgKnNob3N0KQoreworCXN0cnVjdCBiZmFkX2ltX3BvcnRfcyAqaW1fcG9ydCA9CisJCQkoc3RydWN0IGJmYWRfaW1fcG9ydF9zICopIHNob3N0LT5ob3N0ZGF0YVswXTsKKwlzdHJ1Y3QgYmZhZF9wb3J0X3MgICAgKnBvcnQgPSBpbV9wb3J0LT5wb3J0OworCisJZmNfaG9zdF9wb3J0X2lkKHNob3N0KSA9CisJCQliZmFfb3NfaHRvbjNiKGJmYV9mY3NfcG9ydF9nZXRfZmNpZChwb3J0LT5mY3NfcG9ydCkpOworfQorCisKKworCisKK3N0cnVjdCBTY3NpX0hvc3QgKgorYmZhZF9vc19zdGFyZ2V0X3RvX3Nob3N0KHN0cnVjdCBzY3NpX3RhcmdldCAqc3RhcmdldCkKK3sKKwlyZXR1cm4gZGV2X3RvX3Nob3N0KHN0YXJnZXQtPmRldi5wYXJlbnQpOworfQorCisvKioKKyAqIEZDIHRyYW5zcG9ydCB0ZW1wbGF0ZSBlbnRyeSwgZ2V0IFNDU0kgaG9zdCBwb3J0IHR5cGUuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFkX2ltX2dldF9ob3N0X3BvcnRfdHlwZShzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCkKK3sKKwlzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKmltX3BvcnQgPQorCQkJKHN0cnVjdCBiZmFkX2ltX3BvcnRfcyAqKSBzaG9zdC0+aG9zdGRhdGFbMF07CisJc3RydWN0IGJmYWRfcyAgICAgICAgICpiZmFkID0gaW1fcG9ydC0+YmZhZDsKKwlzdHJ1Y3QgYmZhX3Bwb3J0X2F0dHJfcyBhdHRyOworCisJYmZhX3Bwb3J0X2dldF9hdHRyKCZiZmFkLT5iZmEsICZhdHRyKTsKKworCXN3aXRjaCAoYXR0ci5wb3J0X3R5cGUpIHsKKwljYXNlIEJGQV9QUE9SVF9UWVBFX05QT1JUOgorCQlmY19ob3N0X3BvcnRfdHlwZShzaG9zdCkgPSBGQ19QT1JUVFlQRV9OUE9SVDsKKwkJYnJlYWs7CisJY2FzZSBCRkFfUFBPUlRfVFlQRV9OTFBPUlQ6CisJCWZjX2hvc3RfcG9ydF90eXBlKHNob3N0KSA9IEZDX1BPUlRUWVBFX05MUE9SVDsKKwkJYnJlYWs7CisJY2FzZSBCRkFfUFBPUlRfVFlQRV9QMlA6CisJCWZjX2hvc3RfcG9ydF90eXBlKHNob3N0KSA9IEZDX1BPUlRUWVBFX1BUUDsKKwkJYnJlYWs7CisJY2FzZSBCRkFfUFBPUlRfVFlQRV9MUE9SVDoKKwkJZmNfaG9zdF9wb3J0X3R5cGUoc2hvc3QpID0gRkNfUE9SVFRZUEVfTFBPUlQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWZjX2hvc3RfcG9ydF90eXBlKHNob3N0KSA9IEZDX1BPUlRUWVBFX1VOS05PV047CisJCWJyZWFrOworCX0KK30KKworLyoqCisgKiBGQyB0cmFuc3BvcnQgdGVtcGxhdGUgZW50cnksIGdldCBTQ1NJIGhvc3QgcG9ydCBzdGF0ZS4KKyAqLworc3RhdGljIHZvaWQKK2JmYWRfaW1fZ2V0X2hvc3RfcG9ydF9zdGF0ZShzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCkKK3sKKwlzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKmltX3BvcnQgPQorCQkJKHN0cnVjdCBiZmFkX2ltX3BvcnRfcyAqKSBzaG9zdC0+aG9zdGRhdGFbMF07CisJc3RydWN0IGJmYWRfcyAgICAgICAgICpiZmFkID0gaW1fcG9ydC0+YmZhZDsKKwlzdHJ1Y3QgYmZhX3Bwb3J0X2F0dHJfcyBhdHRyOworCisJYmZhX3Bwb3J0X2dldF9hdHRyKCZiZmFkLT5iZmEsICZhdHRyKTsKKworCXN3aXRjaCAoYXR0ci5wb3J0X3N0YXRlKSB7CisJY2FzZSBCRkFfUFBPUlRfU1RfTElOS0RPV046CisJCWZjX2hvc3RfcG9ydF9zdGF0ZShzaG9zdCkgPSBGQ19QT1JUU1RBVEVfTElOS0RPV047CisJCWJyZWFrOworCWNhc2UgQkZBX1BQT1JUX1NUX0xJTktVUDoKKwkJZmNfaG9zdF9wb3J0X3N0YXRlKHNob3N0KSA9IEZDX1BPUlRTVEFURV9PTkxJTkU7CisJCWJyZWFrOworCWNhc2UgQkZBX1BQT1JUX1NUX1VOSU5JVDoKKwljYXNlIEJGQV9QUE9SVF9TVF9FTkFCTElOR19RV0FJVDoKKwljYXNlIEJGQV9QUE9SVF9TVF9FTkFCTElORzoKKwljYXNlIEJGQV9QUE9SVF9TVF9ESVNBQkxJTkdfUVdBSVQ6CisJY2FzZSBCRkFfUFBPUlRfU1RfRElTQUJMSU5HOgorCWNhc2UgQkZBX1BQT1JUX1NUX0RJU0FCTEVEOgorCWNhc2UgQkZBX1BQT1JUX1NUX1NUT1BQRUQ6CisJY2FzZSBCRkFfUFBPUlRfU1RfSU9DRE9XTjoKKwlkZWZhdWx0OgorCQlmY19ob3N0X3BvcnRfc3RhdGUoc2hvc3QpID0gRkNfUE9SVFNUQVRFX1VOS05PV047CisJCWJyZWFrOworCX0KK30KKworLyoqCisgKiBGQyB0cmFuc3BvcnQgdGVtcGxhdGUgZW50cnksIGdldCBTQ1NJIGhvc3QgYWN0aXZlIGZjNHMuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFkX2ltX2dldF9ob3N0X2FjdGl2ZV9mYzRzKHN0cnVjdCBTY3NpX0hvc3QgKnNob3N0KQoreworCXN0cnVjdCBiZmFkX2ltX3BvcnRfcyAqaW1fcG9ydCA9CisJCQkoc3RydWN0IGJmYWRfaW1fcG9ydF9zICopIHNob3N0LT5ob3N0ZGF0YVswXTsKKwlzdHJ1Y3QgYmZhZF9wb3J0X3MgICAgKnBvcnQgPSBpbV9wb3J0LT5wb3J0OworCisJbWVtc2V0KGZjX2hvc3RfYWN0aXZlX2ZjNHMoc2hvc3QpLCAwLAorCSAgICAgICBzaXplb2YoZmNfaG9zdF9hY3RpdmVfZmM0cyhzaG9zdCkpKTsKKworCWlmIChwb3J0LT5zdXBwb3J0ZWRfZmM0cyAmCisJCShCRkFfUE9SVF9ST0xFX0ZDUF9JTSB8IEJGQV9QT1JUX1JPTEVfRkNQX1RNKSkKKwkJZmNfaG9zdF9hY3RpdmVfZmM0cyhzaG9zdClbMl0gPSAxOworCisJaWYgKHBvcnQtPnN1cHBvcnRlZF9mYzRzICYgQkZBX1BPUlRfUk9MRV9GQ1BfSVBGQykKKwkJZmNfaG9zdF9hY3RpdmVfZmM0cyhzaG9zdClbM10gPSAweDIwOworCisJZmNfaG9zdF9hY3RpdmVfZmM0cyhzaG9zdClbN10gPSAxOworfQorCisvKioKKyAqIEZDIHRyYW5zcG9ydCB0ZW1wbGF0ZSBlbnRyeSwgZ2V0IFNDU0kgaG9zdCBsaW5rIHNwZWVkLgorICovCitzdGF0aWMgdm9pZAorYmZhZF9pbV9nZXRfaG9zdF9zcGVlZChzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCkKK3sKKwlzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKmltX3BvcnQgPQorCQkJKHN0cnVjdCBiZmFkX2ltX3BvcnRfcyAqKSBzaG9zdC0+aG9zdGRhdGFbMF07CisJc3RydWN0IGJmYWRfcyAgICAgICAgICpiZmFkID0gaW1fcG9ydC0+YmZhZDsKKwlzdHJ1Y3QgYmZhX3Bwb3J0X2F0dHJfcyBhdHRyOworCisJYmZhX3Bwb3J0X2dldF9hdHRyKCZiZmFkLT5iZmEsICZhdHRyKTsKKwlzd2l0Y2ggKGF0dHIuc3BlZWQpIHsKKwljYXNlIEJGQV9QUE9SVF9TUEVFRF84R0JQUzoKKwkJZmNfaG9zdF9zcGVlZChzaG9zdCkgPSBGQ19QT1JUU1BFRURfOEdCSVQ7CisJCWJyZWFrOworCWNhc2UgQkZBX1BQT1JUX1NQRUVEXzRHQlBTOgorCQlmY19ob3N0X3NwZWVkKHNob3N0KSA9IEZDX1BPUlRTUEVFRF80R0JJVDsKKwkJYnJlYWs7CisJY2FzZSBCRkFfUFBPUlRfU1BFRURfMkdCUFM6CisJCWZjX2hvc3Rfc3BlZWQoc2hvc3QpID0gRkNfUE9SVFNQRUVEXzJHQklUOworCQlicmVhazsKKwljYXNlIEJGQV9QUE9SVF9TUEVFRF8xR0JQUzoKKwkJZmNfaG9zdF9zcGVlZChzaG9zdCkgPSBGQ19QT1JUU1BFRURfMUdCSVQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWZjX2hvc3Rfc3BlZWQoc2hvc3QpID0gRkNfUE9SVFNQRUVEX1VOS05PV047CisJCWJyZWFrOworCX0KK30KKworLyoqCisgKiBGQyB0cmFuc3BvcnQgdGVtcGxhdGUgZW50cnksIGdldCBTQ1NJIGhvc3QgcG9ydCB0eXBlLgorICovCitzdGF0aWMgdm9pZAorYmZhZF9pbV9nZXRfaG9zdF9mYWJyaWNfbmFtZShzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCkKK3sKKwlzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKmltX3BvcnQgPQorCQkJKHN0cnVjdCBiZmFkX2ltX3BvcnRfcyAqKSBzaG9zdC0+aG9zdGRhdGFbMF07CisJc3RydWN0IGJmYWRfcG9ydF9zICAgICpwb3J0ID0gaW1fcG9ydC0+cG9ydDsKKwl3d25fdCAgICAgICAgICAgZmFicmljX253d24gPSAwOworCisJZmFicmljX253d24gPSBiZmFfZmNzX3BvcnRfZ2V0X2ZhYnJpY19uYW1lKHBvcnQtPmZjc19wb3J0KTsKKworCWZjX2hvc3RfZmFicmljX25hbWUoc2hvc3QpID0gYmZhX29zX2h0b25sbChmYWJyaWNfbnd3bik7CisKK30KKworLyoqCisgKiBGQyB0cmFuc3BvcnQgdGVtcGxhdGUgZW50cnksIGdldCBCRkFEIHN0YXRpc3RpY3MuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgZmNfaG9zdF9zdGF0aXN0aWNzICoKK2JmYWRfaW1fZ2V0X3N0YXRzKHN0cnVjdCBTY3NpX0hvc3QgKnNob3N0KQoreworCXN0cnVjdCBiZmFkX2ltX3BvcnRfcyAqaW1fcG9ydCA9CisJCQkoc3RydWN0IGJmYWRfaW1fcG9ydF9zICopIHNob3N0LT5ob3N0ZGF0YVswXTsKKwlzdHJ1Y3QgYmZhZF9zICAgICAgICAgKmJmYWQgPSBpbV9wb3J0LT5iZmFkOworCXN0cnVjdCBiZmFkX2hhbF9jb21wIGZjb21wOworCXN0cnVjdCBmY19ob3N0X3N0YXRpc3RpY3MgKmhzdGF0czsKKwliZmFfc3RhdHVzX3QgICAgcmM7CisJdW5zaWduZWQgbG9uZyAgIGZsYWdzOworCisJaHN0YXRzID0gJmJmYWQtPmxpbmtfc3RhdHM7CisJaW5pdF9jb21wbGV0aW9uKCZmY29tcC5jb21wKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisJbWVtc2V0KGhzdGF0cywgMCwgc2l6ZW9mKHN0cnVjdCBmY19ob3N0X3N0YXRpc3RpY3MpKTsKKwlyYyA9IGJmYV9wcG9ydF9nZXRfc3RhdHMoJmJmYWQtPmJmYSwKKwkJCQkgICAgICh1bmlvbiBiZmFfcHBvcnRfc3RhdHNfdSAqKSBoc3RhdHMsCisJCQkJICAgICBiZmFkX2hjYl9jb21wLCAmZmNvbXApOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOworCWlmIChyYyAhPSBCRkFfU1RBVFVTX09LKQorCQlyZXR1cm4gTlVMTDsKKworCXdhaXRfZm9yX2NvbXBsZXRpb24oJmZjb21wLmNvbXApOworCisJcmV0dXJuIGhzdGF0czsKK30KKworLyoqCisgKiBGQyB0cmFuc3BvcnQgdGVtcGxhdGUgZW50cnksIHJlc2V0IEJGQUQgc3RhdGlzdGljcy4KKyAqLworc3RhdGljIHZvaWQKK2JmYWRfaW1fcmVzZXRfc3RhdHMoc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QpCit7CisJc3RydWN0IGJmYWRfaW1fcG9ydF9zICppbV9wb3J0ID0KKwkJCShzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKikgc2hvc3QtPmhvc3RkYXRhWzBdOworCXN0cnVjdCBiZmFkX3MgICAgICAgICAqYmZhZCA9IGltX3BvcnQtPmJmYWQ7CisJc3RydWN0IGJmYWRfaGFsX2NvbXAgZmNvbXA7CisJdW5zaWduZWQgbG9uZyAgIGZsYWdzOworCWJmYV9zdGF0dXNfdCAgICByYzsKKworCWluaXRfY29tcGxldGlvbigmZmNvbXAuY29tcCk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOworCXJjID0gYmZhX3Bwb3J0X2NsZWFyX3N0YXRzKCZiZmFkLT5iZmEsIGJmYWRfaGNiX2NvbXAsICZmY29tcCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisKKwlpZiAocmMgIT0gQkZBX1NUQVRVU19PSykKKwkJcmV0dXJuOworCisJd2FpdF9mb3JfY29tcGxldGlvbigmZmNvbXAuY29tcCk7CisKKwlyZXR1cm47Cit9CisKKy8qKgorICogRkMgdHJhbnNwb3J0IHRlbXBsYXRlIGVudHJ5LCBnZXQgcnBvcnQgbG9zcyB0aW1lb3V0LgorICovCitzdGF0aWMgdm9pZAorYmZhZF9pbV9nZXRfcnBvcnRfbG9zc190bW8oc3RydWN0IGZjX3Jwb3J0ICpycG9ydCkKK3sKKwlzdHJ1Y3QgYmZhZF9pdG5pbV9kYXRhX3MgKml0bmltX2RhdGEgPSBycG9ydC0+ZGRfZGF0YTsKKwlzdHJ1Y3QgYmZhZF9pdG5pbV9zICAgKml0bmltID0gaXRuaW1fZGF0YS0+aXRuaW07CisJc3RydWN0IGJmYWRfcyAgICAgICAgICpiZmFkID0gaXRuaW0tPmltLT5iZmFkOworCXVuc2lnbmVkIGxvbmcgICBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKKwlycG9ydC0+ZGV2X2xvc3NfdG1vID0gYmZhX2ZjcGltX3BhdGhfdG92X2dldCgmYmZhZC0+YmZhKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKK30KKworLyoqCisgKiBGQyB0cmFuc3BvcnQgdGVtcGxhdGUgZW50cnksIHNldCBycG9ydCBsb3NzIHRpbWVvdXQuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFkX2ltX3NldF9ycG9ydF9sb3NzX3RtbyhzdHJ1Y3QgZmNfcnBvcnQgKnJwb3J0LCB1MzIgdGltZW91dCkKK3sKKwlzdHJ1Y3QgYmZhZF9pdG5pbV9kYXRhX3MgKml0bmltX2RhdGEgPSBycG9ydC0+ZGRfZGF0YTsKKwlzdHJ1Y3QgYmZhZF9pdG5pbV9zICAgKml0bmltID0gaXRuaW1fZGF0YS0+aXRuaW07CisJc3RydWN0IGJmYWRfcyAgICAgICAgICpiZmFkID0gaXRuaW0tPmltLT5iZmFkOworCXVuc2lnbmVkIGxvbmcgICBmbGFnczsKKworCWlmICh0aW1lb3V0ID4gMCkgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisJCWJmYV9mY3BpbV9wYXRoX3Rvdl9zZXQoJmJmYWQtPmJmYSwgdGltZW91dCk7CisJCXJwb3J0LT5kZXZfbG9zc190bW8gPSBiZmFfZmNwaW1fcGF0aF90b3ZfZ2V0KCZiZmFkLT5iZmEpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKKwl9CisKK30KKworc3RydWN0IGZjX2Z1bmN0aW9uX3RlbXBsYXRlIGJmYWRfaW1fZmNfZnVuY3Rpb25fdGVtcGxhdGUgPSB7CisKKwkvKiBUYXJnZXQgZHluYW1pYyBhdHRyaWJ1dGVzICovCisJLmdldF9zdGFyZ2V0X3BvcnRfaWQgPSBiZmFkX2ltX2dldF9zdGFyZ2V0X3BvcnRfaWQsCisJLnNob3dfc3RhcmdldF9wb3J0X2lkID0gMSwKKwkuZ2V0X3N0YXJnZXRfbm9kZV9uYW1lID0gYmZhZF9pbV9nZXRfc3RhcmdldF9ub2RlX25hbWUsCisJLnNob3dfc3RhcmdldF9ub2RlX25hbWUgPSAxLAorCS5nZXRfc3RhcmdldF9wb3J0X25hbWUgPSBiZmFkX2ltX2dldF9zdGFyZ2V0X3BvcnRfbmFtZSwKKwkuc2hvd19zdGFyZ2V0X3BvcnRfbmFtZSA9IDEsCisKKwkvKiBIb3N0IGR5bmFtaWMgYXR0cmlidXRlICovCisJLmdldF9ob3N0X3BvcnRfaWQgPSBiZmFkX2ltX2dldF9ob3N0X3BvcnRfaWQsCisJLnNob3dfaG9zdF9wb3J0X2lkID0gMSwKKworCS8qIEhvc3QgZml4ZWQgYXR0cmlidXRlcyAqLworCS5zaG93X2hvc3Rfbm9kZV9uYW1lID0gMSwKKwkuc2hvd19ob3N0X3BvcnRfbmFtZSA9IDEsCisJLnNob3dfaG9zdF9zdXBwb3J0ZWRfY2xhc3NlcyA9IDEsCisJLnNob3dfaG9zdF9zdXBwb3J0ZWRfZmM0cyA9IDEsCisJLnNob3dfaG9zdF9zdXBwb3J0ZWRfc3BlZWRzID0gMSwKKwkuc2hvd19ob3N0X21heGZyYW1lX3NpemUgPSAxLAorCisJLyogTW9yZSBob3N0IGR5bmFtaWMgYXR0cmlidXRlcyAqLworCS5zaG93X2hvc3RfcG9ydF90eXBlID0gMSwKKwkuZ2V0X2hvc3RfcG9ydF90eXBlID0gYmZhZF9pbV9nZXRfaG9zdF9wb3J0X3R5cGUsCisJLnNob3dfaG9zdF9wb3J0X3N0YXRlID0gMSwKKwkuZ2V0X2hvc3RfcG9ydF9zdGF0ZSA9IGJmYWRfaW1fZ2V0X2hvc3RfcG9ydF9zdGF0ZSwKKwkuc2hvd19ob3N0X2FjdGl2ZV9mYzRzID0gMSwKKwkuZ2V0X2hvc3RfYWN0aXZlX2ZjNHMgPSBiZmFkX2ltX2dldF9ob3N0X2FjdGl2ZV9mYzRzLAorCS5zaG93X2hvc3Rfc3BlZWQgPSAxLAorCS5nZXRfaG9zdF9zcGVlZCA9IGJmYWRfaW1fZ2V0X2hvc3Rfc3BlZWQsCisJLnNob3dfaG9zdF9mYWJyaWNfbmFtZSA9IDEsCisJLmdldF9ob3N0X2ZhYnJpY19uYW1lID0gYmZhZF9pbV9nZXRfaG9zdF9mYWJyaWNfbmFtZSwKKworCS5zaG93X2hvc3Rfc3ltYm9saWNfbmFtZSA9IDEsCisKKwkvKiBTdGF0aXN0aWNzICovCisJLmdldF9mY19ob3N0X3N0YXRzID0gYmZhZF9pbV9nZXRfc3RhdHMsCisJLnJlc2V0X2ZjX2hvc3Rfc3RhdHMgPSBiZmFkX2ltX3Jlc2V0X3N0YXRzLAorCisJLyogQWxsb2NhdGlvbiBsZW5ndGggZm9yIGhvc3Qgc3BlY2lmaWMgZGF0YSAqLworCS5kZF9mY3Jwb3J0X3NpemUgPSBzaXplb2Yoc3RydWN0IGJmYWRfaXRuaW1fZGF0YV9zICopLAorCisJLyogUmVtb3RlIHBvcnQgZml4ZWQgYXR0cmlidXRlcyAqLworCS5zaG93X3Jwb3J0X21heGZyYW1lX3NpemUgPSAxLAorCS5zaG93X3Jwb3J0X3N1cHBvcnRlZF9jbGFzc2VzID0gMSwKKwkuc2hvd19ycG9ydF9kZXZfbG9zc190bW8gPSAxLAorCS5nZXRfcnBvcnRfZGV2X2xvc3NfdG1vID0gYmZhZF9pbV9nZXRfcnBvcnRfbG9zc190bW8sCisJLnNldF9ycG9ydF9kZXZfbG9zc190bW8gPSBiZmFkX2ltX3NldF9ycG9ydF9sb3NzX3RtbywKK307CisKKy8qKgorICogIFNjc2lfSG9zdF9hdHRycyBTQ1NJIGhvc3QgYXR0cmlidXRlcworICovCitzdGF0aWMgc3NpemVfdAorYmZhZF9pbV9zZXJpYWxfbnVtX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSBjaGFyICpidWYpCit7CisJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBjbGFzc190b19zaG9zdChkZXYpOworCXN0cnVjdCBiZmFkX2ltX3BvcnRfcyAqaW1fcG9ydCA9CisJCQkoc3RydWN0IGJmYWRfaW1fcG9ydF9zICopIHNob3N0LT5ob3N0ZGF0YVswXTsKKwlzdHJ1Y3QgYmZhZF9zICAgICAgICAgKmJmYWQgPSBpbV9wb3J0LT5iZmFkOworCXN0cnVjdCBiZmFfaW9jX2F0dHJfcyAgaW9jX2F0dHI7CisKKwltZW1zZXQoJmlvY19hdHRyLCAwLCBzaXplb2YoaW9jX2F0dHIpKTsKKwliZmFfZ2V0X2F0dHIoJmJmYWQtPmJmYSwgJmlvY19hdHRyKTsKKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlc1xuIiwKKwkJCWlvY19hdHRyLmFkYXB0ZXJfYXR0ci5zZXJpYWxfbnVtKTsKK30KKworc3RhdGljIHNzaXplX3QKK2JmYWRfaW1fbW9kZWxfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJY2hhciAqYnVmKQoreworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gY2xhc3NfdG9fc2hvc3QoZGV2KTsKKwlzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKmltX3BvcnQgPQorCQkJKHN0cnVjdCBiZmFkX2ltX3BvcnRfcyAqKSBzaG9zdC0+aG9zdGRhdGFbMF07CisJc3RydWN0IGJmYWRfcyAgICAgICAgICpiZmFkID0gaW1fcG9ydC0+YmZhZDsKKwlzdHJ1Y3QgYmZhX2lvY19hdHRyX3MgIGlvY19hdHRyOworCisJbWVtc2V0KCZpb2NfYXR0ciwgMCwgc2l6ZW9mKGlvY19hdHRyKSk7CisJYmZhX2dldF9hdHRyKCZiZmFkLT5iZmEsICZpb2NfYXR0cik7CisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJXNcbiIsIGlvY19hdHRyLmFkYXB0ZXJfYXR0ci5tb2RlbCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90CitiZmFkX2ltX21vZGVsX2Rlc2Nfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCSBjaGFyICpidWYpCit7CisJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBjbGFzc190b19zaG9zdChkZXYpOworCXN0cnVjdCBiZmFkX2ltX3BvcnRfcyAqaW1fcG9ydCA9CisJCQkoc3RydWN0IGJmYWRfaW1fcG9ydF9zICopIHNob3N0LT5ob3N0ZGF0YVswXTsKKwlzdHJ1Y3QgYmZhZF9zICAgICAgICAgKmJmYWQgPSBpbV9wb3J0LT5iZmFkOworCXN0cnVjdCBiZmFfaW9jX2F0dHJfcyAgaW9jX2F0dHI7CisKKwltZW1zZXQoJmlvY19hdHRyLCAwLCBzaXplb2YoaW9jX2F0dHIpKTsKKwliZmFfZ2V0X2F0dHIoJmJmYWQtPmJmYSwgJmlvY19hdHRyKTsKKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlc1xuIiwKKwkJCWlvY19hdHRyLmFkYXB0ZXJfYXR0ci5tb2RlbF9kZXNjcik7Cit9CisKK3N0YXRpYyBzc2l6ZV90CitiZmFkX2ltX25vZGVfbmFtZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGNsYXNzX3RvX3Nob3N0KGRldik7CisJc3RydWN0IGJmYWRfaW1fcG9ydF9zICppbV9wb3J0ID0KKwkJCShzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKikgc2hvc3QtPmhvc3RkYXRhWzBdOworCXN0cnVjdCBiZmFkX3BvcnRfcyAgICAqcG9ydCA9IGltX3BvcnQtPnBvcnQ7CisJdTY0ICAgICAgICBud3duOworCisJbnd3biA9IGJmYV9mY3NfcG9ydF9nZXRfbnd3bihwb3J0LT5mY3NfcG9ydCk7CisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiMHglbGx4XG4iLCBiZmFfb3NfaHRvbmxsKG53d24pKTsKK30KKworc3RhdGljIHNzaXplX3QKK2JmYWRfaW1fc3ltYm9saWNfbmFtZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGNsYXNzX3RvX3Nob3N0KGRldik7CisJc3RydWN0IGJmYWRfaW1fcG9ydF9zICppbV9wb3J0ID0KKwkJCShzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKikgc2hvc3QtPmhvc3RkYXRhWzBdOworCXN0cnVjdCBiZmFkX3MgICAgICAgICAqYmZhZCA9IGltX3BvcnQtPmJmYWQ7CisJc3RydWN0IGJmYV9pb2NfYXR0cl9zICBpb2NfYXR0cjsKKworCW1lbXNldCgmaW9jX2F0dHIsIDAsIHNpemVvZihpb2NfYXR0cikpOworCWJmYV9nZXRfYXR0cigmYmZhZC0+YmZhLCAmaW9jX2F0dHIpOworCisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiQnJvY2FkZSAlcyBGViVzIERWJXNcbiIsCisJCQlpb2NfYXR0ci5hZGFwdGVyX2F0dHIubW9kZWwsCisJCQlpb2NfYXR0ci5hZGFwdGVyX2F0dHIuZndfdmVyLCBCRkFEX0RSSVZFUl9WRVJTSU9OKTsKK30KKworc3RhdGljIHNzaXplX3QKK2JmYWRfaW1faHdfdmVyc2lvbl9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJY2hhciAqYnVmKQoreworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gY2xhc3NfdG9fc2hvc3QoZGV2KTsKKwlzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKmltX3BvcnQgPQorCQkJKHN0cnVjdCBiZmFkX2ltX3BvcnRfcyAqKSBzaG9zdC0+aG9zdGRhdGFbMF07CisJc3RydWN0IGJmYWRfcyAgICAgICAgICpiZmFkID0gaW1fcG9ydC0+YmZhZDsKKwlzdHJ1Y3QgYmZhX2lvY19hdHRyX3MgIGlvY19hdHRyOworCisJbWVtc2V0KCZpb2NfYXR0ciwgMCwgc2l6ZW9mKGlvY19hdHRyKSk7CisJYmZhX2dldF9hdHRyKCZiZmFkLT5iZmEsICZpb2NfYXR0cik7CisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJXNcbiIsIGlvY19hdHRyLmFkYXB0ZXJfYXR0ci5od192ZXIpOworfQorCitzdGF0aWMgc3NpemVfdAorYmZhZF9pbV9kcnZfdmVyc2lvbl9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJY2hhciAqYnVmKQoreworCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVzXG4iLCBCRkFEX0RSSVZFUl9WRVJTSU9OKTsKK30KKworc3RhdGljIHNzaXplX3QKK2JmYWRfaW1fb3B0aW9ucm9tX3ZlcnNpb25fc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGNsYXNzX3RvX3Nob3N0KGRldik7CisJc3RydWN0IGJmYWRfaW1fcG9ydF9zICppbV9wb3J0ID0KKwkJCShzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKikgc2hvc3QtPmhvc3RkYXRhWzBdOworCXN0cnVjdCBiZmFkX3MgICAgICAgICAqYmZhZCA9IGltX3BvcnQtPmJmYWQ7CisJc3RydWN0IGJmYV9pb2NfYXR0cl9zICBpb2NfYXR0cjsKKworCW1lbXNldCgmaW9jX2F0dHIsIDAsIHNpemVvZihpb2NfYXR0cikpOworCWJmYV9nZXRfYXR0cigmYmZhZC0+YmZhLCAmaW9jX2F0dHIpOworCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVzXG4iLAorCQkJaW9jX2F0dHIuYWRhcHRlcl9hdHRyLm9wdHJvbV92ZXIpOworfQorCitzdGF0aWMgc3NpemVfdAorYmZhZF9pbV9md192ZXJzaW9uX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkgY2hhciAqYnVmKQoreworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gY2xhc3NfdG9fc2hvc3QoZGV2KTsKKwlzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKmltX3BvcnQgPQorCQkJKHN0cnVjdCBiZmFkX2ltX3BvcnRfcyAqKSBzaG9zdC0+aG9zdGRhdGFbMF07CisJc3RydWN0IGJmYWRfcyAgICAgICAgICpiZmFkID0gaW1fcG9ydC0+YmZhZDsKKwlzdHJ1Y3QgYmZhX2lvY19hdHRyX3MgIGlvY19hdHRyOworCisJbWVtc2V0KCZpb2NfYXR0ciwgMCwgc2l6ZW9mKGlvY19hdHRyKSk7CisJYmZhX2dldF9hdHRyKCZiZmFkLT5iZmEsICZpb2NfYXR0cik7CisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJXNcbiIsIGlvY19hdHRyLmFkYXB0ZXJfYXR0ci5md192ZXIpOworfQorCitzdGF0aWMgc3NpemVfdAorYmZhZF9pbV9udW1fb2ZfcG9ydHNfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCWNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGNsYXNzX3RvX3Nob3N0KGRldik7CisJc3RydWN0IGJmYWRfaW1fcG9ydF9zICppbV9wb3J0ID0KKwkJCShzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKikgc2hvc3QtPmhvc3RkYXRhWzBdOworCXN0cnVjdCBiZmFkX3MgICAgICAgICAqYmZhZCA9IGltX3BvcnQtPmJmYWQ7CisJc3RydWN0IGJmYV9pb2NfYXR0cl9zICBpb2NfYXR0cjsKKworCW1lbXNldCgmaW9jX2F0dHIsIDAsIHNpemVvZihpb2NfYXR0cikpOworCWJmYV9nZXRfYXR0cigmYmZhZC0+YmZhLCAmaW9jX2F0dHIpOworCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVkXG4iLCBpb2NfYXR0ci5hZGFwdGVyX2F0dHIubnBvcnRzKTsKK30KKworc3RhdGljIHNzaXplX3QKK2JmYWRfaW1fZHJ2X25hbWVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCWNoYXIgKmJ1ZikKK3sKKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlc1xuIiwgQkZBRF9EUklWRVJfTkFNRSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90CitiZmFkX2ltX251bV9vZl9kaXNjb3ZlcmVkX3BvcnRzX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGNsYXNzX3RvX3Nob3N0KGRldik7CisJc3RydWN0IGJmYWRfaW1fcG9ydF9zICppbV9wb3J0ID0KKwkJCShzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKikgc2hvc3QtPmhvc3RkYXRhWzBdOworCXN0cnVjdCBiZmFkX3BvcnRfcyAgICAqcG9ydCA9IGltX3BvcnQtPnBvcnQ7CisJc3RydWN0IGJmYWRfcyAgICAgICAgICpiZmFkID0gaW1fcG9ydC0+YmZhZDsKKwlpbnQgICAgICAgIG5ycG9ydHMgPSAyMDQ4OworCXd3bl90ICAgICAgICAgICpycG9ydHMgPSBOVUxMOworCXVuc2lnbmVkIGxvbmcgICBmbGFnczsKKworCXJwb3J0cyA9IGt6YWxsb2Moc2l6ZW9mKHd3bl90KSAqIG5ycG9ydHMgLCBHRlBfQVRPTUlDKTsKKwlpZiAocnBvcnRzID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOworCWJmYV9mY3NfcG9ydF9nZXRfcnBvcnRzKHBvcnQtPmZjc19wb3J0LCBycG9ydHMsICZucnBvcnRzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKKwlrZnJlZShycG9ydHMpOworCisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJWRcbiIsIG5ycG9ydHMpOworfQorCitzdGF0aWMgICAgICAgICAgREVWSUNFX0FUVFIoc2VyaWFsX251bWJlciwgU19JUlVHTywKKwkJCQliZmFkX2ltX3NlcmlhbF9udW1fc2hvdywgTlVMTCk7CitzdGF0aWMgICAgICAgICAgREVWSUNFX0FUVFIobW9kZWwsIFNfSVJVR08sIGJmYWRfaW1fbW9kZWxfc2hvdywgTlVMTCk7CitzdGF0aWMgICAgICAgICAgREVWSUNFX0FUVFIobW9kZWxfZGVzY3JpcHRpb24sIFNfSVJVR08sCisJCQkJYmZhZF9pbV9tb2RlbF9kZXNjX3Nob3csIE5VTEwpOworc3RhdGljICAgICAgICAgIERFVklDRV9BVFRSKG5vZGVfbmFtZSwgU19JUlVHTywgYmZhZF9pbV9ub2RlX25hbWVfc2hvdywgTlVMTCk7CitzdGF0aWMgICAgICAgICAgREVWSUNFX0FUVFIoc3ltYm9saWNfbmFtZSwgU19JUlVHTywKKwkJCQliZmFkX2ltX3N5bWJvbGljX25hbWVfc2hvdywgTlVMTCk7CitzdGF0aWMgICAgICAgICAgREVWSUNFX0FUVFIoaGFyZHdhcmVfdmVyc2lvbiwgU19JUlVHTywKKwkJCQliZmFkX2ltX2h3X3ZlcnNpb25fc2hvdywgTlVMTCk7CitzdGF0aWMgICAgICAgICAgREVWSUNFX0FUVFIoZHJpdmVyX3ZlcnNpb24sIFNfSVJVR08sCisJCQkJYmZhZF9pbV9kcnZfdmVyc2lvbl9zaG93LCBOVUxMKTsKK3N0YXRpYyAgICAgICAgICBERVZJQ0VfQVRUUihvcHRpb25fcm9tX3ZlcnNpb24sIFNfSVJVR08sCisJCQkJYmZhZF9pbV9vcHRpb25yb21fdmVyc2lvbl9zaG93LCBOVUxMKTsKK3N0YXRpYyAgICAgICAgICBERVZJQ0VfQVRUUihmaXJtd2FyZV92ZXJzaW9uLCBTX0lSVUdPLAorCQkJCWJmYWRfaW1fZndfdmVyc2lvbl9zaG93LCBOVUxMKTsKK3N0YXRpYyAgICAgICAgICBERVZJQ0VfQVRUUihudW1iZXJfb2ZfcG9ydHMsIFNfSVJVR08sCisJCQkJYmZhZF9pbV9udW1fb2ZfcG9ydHNfc2hvdywgTlVMTCk7CitzdGF0aWMgICAgICAgICAgREVWSUNFX0FUVFIoZHJpdmVyX25hbWUsIFNfSVJVR08sIGJmYWRfaW1fZHJ2X25hbWVfc2hvdywgTlVMTCk7CitzdGF0aWMgICAgICAgICAgREVWSUNFX0FUVFIobnVtYmVyX29mX2Rpc2NvdmVyZWRfcG9ydHMsIFNfSVJVR08sCisJCQkJYmZhZF9pbV9udW1fb2ZfZGlzY292ZXJlZF9wb3J0c19zaG93LCBOVUxMKTsKKworc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmJmYWRfaW1faG9zdF9hdHRyc1tdID0geworCSZkZXZfYXR0cl9zZXJpYWxfbnVtYmVyLAorCSZkZXZfYXR0cl9tb2RlbCwKKwkmZGV2X2F0dHJfbW9kZWxfZGVzY3JpcHRpb24sCisJJmRldl9hdHRyX25vZGVfbmFtZSwKKwkmZGV2X2F0dHJfc3ltYm9saWNfbmFtZSwKKwkmZGV2X2F0dHJfaGFyZHdhcmVfdmVyc2lvbiwKKwkmZGV2X2F0dHJfZHJpdmVyX3ZlcnNpb24sCisJJmRldl9hdHRyX29wdGlvbl9yb21fdmVyc2lvbiwKKwkmZGV2X2F0dHJfZmlybXdhcmVfdmVyc2lvbiwKKwkmZGV2X2F0dHJfbnVtYmVyX29mX3BvcnRzLAorCSZkZXZfYXR0cl9kcml2ZXJfbmFtZSwKKwkmZGV2X2F0dHJfbnVtYmVyX29mX2Rpc2NvdmVyZWRfcG9ydHMsCisJTlVMTCwKK307CisKK3N0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpiZmFkX2ltX3Zwb3J0X2F0dHJzW10gPSB7CisgICAgJmRldl9hdHRyX3NlcmlhbF9udW1iZXIsCisgICAgJmRldl9hdHRyX21vZGVsLAorICAgICZkZXZfYXR0cl9tb2RlbF9kZXNjcmlwdGlvbiwKKyAgICAmZGV2X2F0dHJfbm9kZV9uYW1lLAorICAgICZkZXZfYXR0cl9zeW1ib2xpY19uYW1lLAorICAgICZkZXZfYXR0cl9oYXJkd2FyZV92ZXJzaW9uLAorICAgICZkZXZfYXR0cl9kcml2ZXJfdmVyc2lvbiwKKyAgICAmZGV2X2F0dHJfb3B0aW9uX3JvbV92ZXJzaW9uLAorICAgICZkZXZfYXR0cl9maXJtd2FyZV92ZXJzaW9uLAorICAgICZkZXZfYXR0cl9udW1iZXJfb2ZfcG9ydHMsCisgICAgJmRldl9hdHRyX2RyaXZlcl9uYW1lLAorICAgICZkZXZfYXR0cl9udW1iZXJfb2ZfZGlzY292ZXJlZF9wb3J0cywKKyAgICBOVUxMLAorfTsKKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2JmYWRfYXR0ci5oIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFkX2F0dHIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZDMzMTJkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFkX2F0dHIuaApAQCAtMCwwICsxLDY1IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX19CRkFEX0FUVFJfSF9fCisjZGVmaW5lIF9fQkZBRF9BVFRSX0hfXworLyoqCisgKiAgYmZhZF9hdHRyLmggVk13YXJlIGRyaXZlciBjb25maWd1cmF0aW9uIGludGVyZmFjZSBtb2R1bGUuCisgKi8KKworLyoqCisgKiAgRkNfdHJhbnNwb3J0X3RlbXBsYXRlIEZDIHRyYW5zcG9ydCB0ZW1wbGF0ZQorICovCisKK3N0cnVjdCBTY3NpX0hvc3QqCitiZmFkX29zX2Rldl90b19zaG9zdChzdHJ1Y3Qgc2NzaV90YXJnZXQgKnN0YXJnZXQpOworCisvKioKKyAqIEZDIHRyYW5zcG9ydCB0ZW1wbGF0ZSBlbnRyeSwgZ2V0IFNDU0kgdGFyZ2V0IHBvcnQgSUQuCisgKi8KK3ZvaWQKK2JmYWRfaW1fZ2V0X3N0YXJnZXRfcG9ydF9pZChzdHJ1Y3Qgc2NzaV90YXJnZXQgKnN0YXJnZXQpOworCisvKioKKyAqIEZDIHRyYW5zcG9ydCB0ZW1wbGF0ZSBlbnRyeSwgZ2V0IFNDU0kgdGFyZ2V0IG53d24uCisgKi8KK3ZvaWQKK2JmYWRfaW1fZ2V0X3N0YXJnZXRfbm9kZV9uYW1lKHN0cnVjdCBzY3NpX3RhcmdldCAqc3RhcmdldCk7CisKKy8qKgorICogRkMgdHJhbnNwb3J0IHRlbXBsYXRlIGVudHJ5LCBnZXQgU0NTSSB0YXJnZXQgcHd3bi4KKyAqLwordm9pZAorYmZhZF9pbV9nZXRfc3RhcmdldF9wb3J0X25hbWUoc3RydWN0IHNjc2lfdGFyZ2V0ICpzdGFyZ2V0KTsKKworLyoqCisgKiBGQyB0cmFuc3BvcnQgdGVtcGxhdGUgZW50cnksIGdldCBTQ1NJIGhvc3QgcG9ydCBJRC4KKyAqLwordm9pZAorYmZhZF9pbV9nZXRfaG9zdF9wb3J0X2lkKHN0cnVjdCBTY3NpX0hvc3QgKnNob3N0KTsKKworLyoqCisgKiBGQyB0cmFuc3BvcnQgdGVtcGxhdGUgZW50cnksIGlzc3VlIGEgTElQLgorICovCitpbnQKK2JmYWRfaW1faXNzdWVfZmNfaG9zdF9saXAoc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QpOworCitzdHJ1Y3QgU2NzaV9Ib3N0KgorYmZhZF9vc19zdGFyZ2V0X3RvX3Nob3N0KHN0cnVjdCBzY3NpX3RhcmdldCAqc3RhcmdldCk7CisKKworI2VuZGlmIC8qICBfX0JGQURfQVRUUl9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhZF9kcnYuaCBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhZF9kcnYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzJjODFlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFkX2Rydi5oCkBAIC0wLDAgKzEsMjk1IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKy8qKgorICogQ29udGFpbnMgYmFzZSBkcml2ZXIgZGVmaW5pdGlvbnMuCisgKi8KKworLyoqCisgKiAgYmZhX2Rydi5oIExpbnV4IGRyaXZlciBkYXRhIHN0cnVjdHVyZXMuCisgKi8KKworI2lmbmRlZiBfX0JGQURfRFJWX0hfXworI2RlZmluZSBfX0JGQURfRFJWX0hfXworCisjaW5jbHVkZSAiYmZhX29zX2luYy5oIgorCisjaW5jbHVkZSA8YmZhLmg+CisjaW5jbHVkZSA8YmZhX3N2Yy5oPgorI2luY2x1ZGUgPGZjcy9iZmFfZmNzLmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc19wY2kuaD4KKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX3BvcnQuaD4KKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX3Jwb3J0Lmg+CisjaW5jbHVkZSA8ZmNzL2JmYV9mY3NfcnBvcnQuaD4KKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX3Zwb3J0Lmg+CisjaW5jbHVkZSA8ZmNzL2JmYV9mY3NfdnBvcnQuaD4KKworI2luY2x1ZGUgPGNzL2JmYV9wbG9nLmg+CisjaW5jbHVkZSAiYWVuL2JmYV9hZW4uaCIKKyNpbmNsdWRlIDxsb2cvYmZhX2xvZ19saW51eC5oPgorCisjZGVmaW5lIEJGQURfRFJJVkVSX05BTUUgICAgICAgICJiZmEiCisjaWZkZWYgQkZBX0RSSVZFUl9WRVJTSU9OCisjZGVmaW5lIEJGQURfRFJJVkVSX1ZFUlNJT04gICAgQkZBX0RSSVZFUl9WRVJTSU9OCisjZWxzZQorI2RlZmluZSBCRkFEX0RSSVZFUl9WRVJTSU9OICAgICIyLjAuMC4wIgorI2VuZGlmCisKKworI2RlZmluZSBCRkFEX0lSUV9GTEFHUyBJUlFGX1NIQVJFRAorCisvKgorICogQkZBRCBmbGFncworICovCisjZGVmaW5lIEJGQURfTVNJWF9PTgkJCQkweDAwMDAwMDAxCisjZGVmaW5lIEJGQURfSEFMX0lOSVRfRE9ORQkJCTB4MDAwMDAwMDIKKyNkZWZpbmUgQkZBRF9EUlZfSU5JVF9ET05FCQkJMHgwMDAwMDAwNAorI2RlZmluZSBCRkFEX0NGR19QUE9SVF9ET05FCQkJMHgwMDAwMDAwOAorI2RlZmluZSBCRkFEX0hBTF9TVEFSVF9ET05FCQkJMHgwMDAwMDAxMAorI2RlZmluZSBCRkFEX1BPUlRfT05MSU5FCQkJMHgwMDAwMDAyMAorI2RlZmluZSBCRkFEX1JQT1JUX09OTElORQkJCTB4MDAwMDAwNDAKKworI2RlZmluZSBCRkFEX1BPUlRfREVMRVRFCQkJMHgwMDAwMDAwMQorCisvKgorICogQkZBRCByZWxhdGVkIGRlZmluaXRpb24KKyAqLworI2RlZmluZSBTQ1NJX1NDQU5fREVMQVkJCUhaCisjZGVmaW5lIEJGQURfU1RPUF9USU1FT1VUCTMwCisjZGVmaW5lIEJGQURfU1VTUEVORF9USU1FT1VUCUJGQURfU1RPUF9USU1FT1VUCisKKy8qCisgKiBCRkFEIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyIGRlZmF1bHQgdmFsdWVzCisgKi8KKyNkZWZpbmUgQkZBRF9MVU5fUVVFVUVfREVQVEggCQkzMgorI2RlZmluZSBCRkFEX0lPX01BWF9TR0UgCQlTR19BTEwKKworI2RlZmluZSBiZmFkX2lzcl90IGlycV9oYW5kbGVyX3QKKworI2RlZmluZSBNQVhfTVNJWF9FTlRSWSAyMgorCitzdHJ1Y3QgYmZhZF9tc2l4X3MgeworCXN0cnVjdCBiZmFkX3MgKmJmYWQ7CisJc3RydWN0IG1zaXhfZW50cnkgbXNpeDsKK307CisKK2VudW0gYmZhZF9wb3J0X3B2Yl90eXBlIHsKKwlCRkFEX1BPUlRfUEhZU19CQVNFID0gMCwKKwlCRkFEX1BPUlRfUEhZU19WUE9SVCA9IDEsCisJQkZBRF9QT1JUX1ZGX0JBU0UgPSAyLAorCUJGQURfUE9SVF9WRl9WUE9SVCA9IDMsCit9OworCisvKgorICogUE9SVCBkYXRhIHN0cnVjdHVyZQorICovCitzdHJ1Y3QgYmZhZF9wb3J0X3MgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdF9lbnRyeTsKKwlzdHJ1Y3QgYmZhZF9zICAgICAgICAgKmJmYWQ7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpmY3NfcG9ydDsKKwl1MzIgICAgICAgIHJvbGVzOworCXMzMiAgICAgICAgIGZsYWdzOworCXUzMiAgICAgICAgc3VwcG9ydGVkX2ZjNHM7CisJdTgJCWlwZmNfZmxhZ3M7CisJZW51bSBiZmFkX3BvcnRfcHZiX3R5cGUgcHZiX3R5cGU7CisJc3RydWN0IGJmYWRfaW1fcG9ydF9zICppbV9wb3J0OwkvKiBJTSBzcGVjaWZpYyBkYXRhICovCisJc3RydWN0IGJmYWRfdG1fcG9ydF9zICp0bV9wb3J0OwkvKiBUTSBzcGVjaWZpYyBkYXRhICovCisJc3RydWN0IGJmYWRfaXBmY19wb3J0X3MgKmlwZmNfcG9ydDsJLyogSVBGQyBzcGVjaWZpYyBkYXRhICovCit9OworCisvKgorICogVlBPUlQgZGF0YSBzdHJ1Y3R1cmUKKyAqLworc3RydWN0IGJmYWRfdnBvcnRfcyB7CisJc3RydWN0IGJmYWRfcG9ydF9zICAgICBkcnZfcG9ydDsKKwlzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zIGZjc192cG9ydDsKKwlzdHJ1Y3QgY29tcGxldGlvbiAqY29tcF9kZWw7Cit9OworCisvKgorICogVkYgZGF0YSBzdHJ1Y3R1cmUKKyAqLworc3RydWN0IGJmYWRfdmZfcyB7CisJYmZhX2Zjc192Zl90ICAgIGZjc192ZjsKKwlzdHJ1Y3QgYmZhZF9wb3J0X3MgICAgYmFzZV9wb3J0OwkvKiBiYXNlIHBvcnQgZm9yIHZmICovCisJc3RydWN0IGJmYWRfcyAgICpiZmFkOworfTsKKworc3RydWN0IGJmYWRfY2ZnX3BhcmFtX3MgeworCXUzMiAgICAgICAgcnBvcnRfZGVsX3RpbWVvdXQ7CisJdTMyICAgICAgICBpb2NfcXVldWVfZGVwdGg7CisJdTMyICAgICAgICBsdW5fcXVldWVfZGVwdGg7CisJdTMyICAgICAgICBpb19tYXhfc2dlOworCXUzMiAgICAgICAgYmluZGluZ19tZXRob2Q7Cit9OworCisjZGVmaW5lIEJGQURfQUVOX01BWF9BUFBTIDgKK3N0cnVjdCBiZmFkX2Flbl9maWxlX3MgeworCXN0cnVjdCBsaXN0X2hlYWQgIHFlOworCXN0cnVjdCBiZmFkX3MgKmJmYWQ7CisJczMyIHJpOworCXMzMiBhcHBfaWQ7Cit9OworCisvKgorICogQkZBRCAoUENJIGZ1bmN0aW9uKSBkYXRhIHN0cnVjdHVyZQorICovCitzdHJ1Y3QgYmZhZF9zIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3RfZW50cnk7CisJc3RydWN0IGJmYV9zICAgICAgIGJmYTsKKwlzdHJ1Y3QgYmZhX2Zjc19zICAgICAgIGJmYV9mY3M7CisJc3RydWN0IHBjaV9kZXYgKnBjaWRldjsKKwljb25zdCBjaGFyICpwY2lfbmFtZTsKKwlzdHJ1Y3QgYmZhX3BjaWRldl9zIGhhbF9wY2lkZXY7CisJc3RydWN0IGJmYV9pb2NfcGNpX2F0dHJfcyBwY2lfYXR0cjsKKwl1bnNpZ25lZCBsb25nICAgcGNpX2JhcjBfbWFwOworCXZvaWQgX19pb21lbSAgICpwY2lfYmFyMF9rdmE7CisJc3RydWN0IGNvbXBsZXRpb24gY29tcDsKKwlzdHJ1Y3QgY29tcGxldGlvbiBzdXNwZW5kOworCXN0cnVjdCBjb21wbGV0aW9uIGRpc2FibGVfY29tcDsKKwliZmFfYm9vbGVhbl90ICAgZGlzYWJsZV9hY3RpdmU7CisJc3RydWN0IGJmYWRfcG9ydF9zICAgICBwcG9ydDsJLyogcGh5c2ljYWwgcG9ydCBvZiB0aGUgQkZBRCAqLworCXN0cnVjdCBiZmFfbWVtaW5mb19zIG1lbWluZm87CisJc3RydWN0IGJmYV9pb2NmY19jZmdfcyAgIGlvY19jZmc7CisJdTMyICAgICAgICBpbnN0X25vOwkvKiBCRkFEIGluc3RhbmNlIG51bWJlciAqLworCXUzMiAgICAgICAgYmZhZF9mbGFnczsKKwlzcGlubG9ja190ICAgICAgYmZhZF9sb2NrOworCXN0cnVjdCBiZmFkX2NmZ19wYXJhbV9zIGNmZ19kYXRhOworCXN0cnVjdCBiZmFkX21zaXhfcyBtc2l4X3RhYltNQVhfTVNJWF9FTlRSWV07CisJaW50ICAgICAgICAgICAgIG52ZWM7CisJY2hhciAgICAgICAgICAgIGFkYXB0ZXJfbmFtZVtCRkFfQURBUFRFUl9TWU1fTkFNRV9MRU5dOworCWNoYXIgICAgICAgICAgICBwb3J0X25hbWVbQkZBX0FEQVBURVJfU1lNX05BTUVfTEVOXTsKKwlzdHJ1Y3QgdGltZXJfbGlzdCBoYWxfdG1vOworCXVuc2lnbmVkIGxvbmcgICBoc19zdGFydDsKKwlzdHJ1Y3QgYmZhZF9pbV9zICppbTsJCS8qIElNIHNwZWNpZmljIGRhdGEgKi8KKwlzdHJ1Y3QgYmZhZF90bV9zICp0bTsJCS8qIFRNIHNwZWNpZmljIGRhdGEgKi8KKwlzdHJ1Y3QgYmZhZF9pcGZjX3MgKmlwZmM7CS8qIElQRkMgc3BlY2lmaWMgZGF0YSAqLworCXN0cnVjdCBiZmFfbG9nX21vZF9zICAgbG9nX2RhdGE7CisJc3RydWN0IGJmYV90cmNfbW9kX3MgICp0cmNtb2Q7CisJc3RydWN0IGJmYV9sb2dfbW9kX3MgICpsb2dtb2Q7CisJc3RydWN0IGJmYV9hZW5fcyAgICAgICphZW47CisJc3RydWN0IGJmYV9hZW5fcyAgICAgICBhZW5fYnVmOworCXN0cnVjdCBiZmFkX2Flbl9maWxlX3MgZmlsZV9idWZbQkZBRF9BRU5fTUFYX0FQUFNdOworCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgICBmaWxlX3E7CisJc3RydWN0IGxpc3RfaGVhZCAgICAgICAgIGZpbGVfZnJlZV9xOworCXN0cnVjdCBiZmFfcGxvZ19zICAgICAgcGxvZ19idWY7CisJaW50ICAgICAgICAgICAgIHJlZl9jb3VudDsKKwliZmFfYm9vbGVhbl90CWlwZmNfZW5hYmxlZDsKKwlzdHJ1Y3QgZmNfaG9zdF9zdGF0aXN0aWNzIGxpbmtfc3RhdHM7CisKKwlzdHJ1Y3Qga29iamVjdCAqYmZhX2tvYmo7CisJc3RydWN0IGtvYmplY3QgKmlvY19rb2JqOworCXN0cnVjdCBrb2JqZWN0ICpwcG9ydF9rb2JqOworCXN0cnVjdCBrb2JqZWN0ICpscG9ydF9rb2JqOworfTsKKworLyoKKyAqIFJQT1JUIGRhdGEgc3RydWN0dXJlCisgKi8KK3N0cnVjdCBiZmFkX3Jwb3J0X3MgeworCXN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgZmNzX3Jwb3J0OworfTsKKworc3RydWN0IGJmYWRfYnVmX2luZm8geworCXZvaWQgICAgICAgICAgICp2aXJ0OworCWRtYV9hZGRyX3QgICAgICBwaHlzOworCXUzMiAgICAgICAgc2l6ZTsKK307CisKK3N0cnVjdCBiZmFkX2ZjeHAgeworCXN0cnVjdCBiZmFkX3BvcnRfcyAgICAqcG9ydDsKKwlzdHJ1Y3QgYmZhX3Jwb3J0X3MgKmJmYV9ycG9ydDsKKwliZmFfc3RhdHVzX3QgICAgcmVxX3N0YXR1czsKKwl1MTYgICAgICAgIHRhZzsKKwl1MTYgICAgICAgIHJzcF9sZW47CisJdTE2ICAgICAgICByc3BfbWF4bGVuOworCXU4ICAgICAgICAgdXNlX2lyZXFidWY7CisJdTggICAgICAgICB1c2VfaXJzcGJ1ZjsKKwl1MzIgICAgICAgIG51bV9yZXFfc2dsZXM7CisJdTMyICAgICAgICBudW1fcnNwX3NnbGVzOworCXN0cnVjdCBmY2hzX3MgICAgICAgICAgZmNoczsKKwl2b2lkICAgICAgICAgICAqcmVxYnVmX2luZm87CisJdm9pZCAgICAgICAgICAgKnJzcGJ1Zl9pbmZvOworCXN0cnVjdCBiZmFfc2dlX3MgICpyZXFfc2dlOworCXN0cnVjdCBiZmFfc2dlX3MgICpyc3Bfc2dlOworCWZjeHBfc2VuZF9jYl90ICBzZW5kX2NiZm47CisJdm9pZCAgICAgICAgICAgKnNlbmRfY2Jhcmc7CisJdm9pZCAgICAgICAgICAgKmJmYV9mY3hwOworCXN0cnVjdCBjb21wbGV0aW9uIGNvbXA7Cit9OworCitzdHJ1Y3QgYmZhZF9oYWxfY29tcCB7CisJYmZhX3N0YXR1c190ICAgIHN0YXR1czsKKwlzdHJ1Y3QgY29tcGxldGlvbiBjb21wOworfTsKKworLyoKKyAqIE1hY3JvIHRvIG9idGFpbiB0aGUgaW1tZWRpYXRlIGxvd2VyIHBvd2VyCisgKiBvZiB0d28gZm9yIHRoZSBpbnRlZ2VyLgorICovCisjZGVmaW5lIG5leHRMb3dlckludCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAJXAorZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCVwKKwlpbnQgajsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCVwKKwkoKngpLS07ICAgIAkJICAgICAgICAgICAgICAgIAlcCisJZm9yIChqID0gMTsgaiA8IChzaXplb2YoaW50KSAqIDgpOyBqIDw8PSAxKSAgICAgXAorCQkoKngpID0gKCp4KSB8ICgqeCkgPj4gajsgICAgICAgIAlcCisJKCp4KSsrOyAgICAgICAgICAgICAgICAgIAkgICAgICAgIAlcCisJKCp4KSA9ICgqeCkgPj4gMTsgICAgICAgICAgICAgICAgICAgICAgIAlcCit9IHdoaWxlICgwKQorCisKK2JmYV9zdGF0dXNfdCAgICBiZmFkX3Zwb3J0X2NyZWF0ZShzdHJ1Y3QgYmZhZF9zICpiZmFkLCB1MTYgdmZfaWQsCisJCQkJICBzdHJ1Y3QgYmZhX3BvcnRfY2ZnX3MgKnBvcnRfY2ZnKTsKK2JmYV9zdGF0dXNfdCAgICBiZmFkX3ZmX2NyZWF0ZShzdHJ1Y3QgYmZhZF9zICpiZmFkLCB1MTYgdmZfaWQsCisJCQkgICAgICAgc3RydWN0IGJmYV9wb3J0X2NmZ19zICpwb3J0X2NmZyk7CitiZmFfc3RhdHVzX3QgICAgYmZhZF9jZmdfcHBvcnQoc3RydWN0IGJmYWRfcyAqYmZhZCwgZW51bSBiZmFfcG9ydF9yb2xlIHJvbGUpOworYmZhX3N0YXR1c190ICAgIGJmYWRfZHJ2X2luaXQoc3RydWN0IGJmYWRfcyAqYmZhZCk7Cit2b2lkICAgICAgICAgICAgYmZhZF9kcnZfc3RhcnQoc3RydWN0IGJmYWRfcyAqYmZhZCk7Cit2b2lkICAgICAgICAgICAgYmZhZF91bmNmZ19wcG9ydChzdHJ1Y3QgYmZhZF9zICpiZmFkKTsKK3ZvaWQgICAgICAgICAgICBiZmFkX2Rydl9zdG9wKHN0cnVjdCBiZmFkX3MgKmJmYWQpOwordm9pZCAgICAgICAgICAgIGJmYWRfcmVtb3ZlX2ludHIoc3RydWN0IGJmYWRfcyAqYmZhZCk7Cit2b2lkICAgICAgICAgICAgYmZhZF9oYWxfbWVtX3JlbGVhc2Uoc3RydWN0IGJmYWRfcyAqYmZhZCk7Cit2b2lkICAgICAgICAgICAgYmZhZF9oY2JfY29tcCh2b2lkICphcmcsIGJmYV9zdGF0dXNfdCBzdGF0dXMpOworCitpbnQgICAgICAgICAgICAgYmZhZF9zZXR1cF9pbnRyKHN0cnVjdCBiZmFkX3MgKmJmYWQpOwordm9pZCAgICAgICAgICAgIGJmYWRfcmVtb3ZlX2ludHIoc3RydWN0IGJmYWRfcyAqYmZhZCk7CisKK3ZvaWQJCWJmYWRfdXBkYXRlX2hhbF9jZmcoc3RydWN0IGJmYV9pb2NmY19jZmdfcyAqYmZhX2NmZyk7CitiZmFfc3RhdHVzX3QJYmZhZF9oYWxfbWVtX2FsbG9jKHN0cnVjdCBiZmFkX3MgKmJmYWQpOwordm9pZAkJYmZhZF9iZmFfdG1vKHVuc2lnbmVkIGxvbmcgZGF0YSk7Cit2b2lkCQliZmFkX2luaXRfdGltZXIoc3RydWN0IGJmYWRfcyAqYmZhZCk7CitpbnQJCWJmYWRfcGNpX2luaXQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHN0cnVjdCBiZmFkX3MgKmJmYWQpOwordm9pZAkJYmZhZF9wY2lfdW5pbml0KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzdHJ1Y3QgYmZhZF9zICpiZmFkKTsKK3ZvaWQJCWJmYWRfZmNzX3BvcnRfY2ZnKHN0cnVjdCBiZmFkX3MgKmJmYWQpOwordm9pZAkJYmZhZF9kcnZfdW5pbml0KHN0cnVjdCBiZmFkX3MgKmJmYWQpOwordm9pZAkJYmZhZF9kcnZfbG9nX2xldmVsX3NldChzdHJ1Y3QgYmZhZF9zICpiZmFkKTsKK2JmYV9zdGF0dXNfdAliZmFkX2ZjNF9tb2R1bGVfaW5pdCh2b2lkKTsKK3ZvaWQJCWJmYWRfZmM0X21vZHVsZV9leGl0KHZvaWQpOworCit2b2lkIGJmYWRfcGNpX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldik7CitpbnQgYmZhZF9wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpwaWQpOwordm9pZCBiZmFkX29zX3Jwb3J0X29ubGluZV93YWl0KHN0cnVjdCBiZmFkX3MgKmJmYWQpOworaW50IGJmYWRfb3NfZ2V0X2xpbmt1cF9kZWxheShzdHJ1Y3QgYmZhZF9zICpiZmFkKTsKK2ludCBiZmFkX2luc3RhbGxfbXNpeF9oYW5kbGVyKHN0cnVjdCBiZmFkX3MgKmJmYWQpOworCitleHRlcm4gc3RydWN0IGlkciBiZmFkX2ltX3BvcnRfaW5kZXg7CitleHRlcm4gc3RydWN0IGxpc3RfaGVhZCBiZmFkX2xpc3Q7CitleHRlcm4gaW50IGJmYV9sdW5fcXVldWVfZGVwdGg7CitleHRlcm4gaW50IGJmYWRfc3VwcG9ydGVkX2ZjNHM7CitleHRlcm4gaW50IGJmYV9saW5rdXBfZGVsYXk7CisKKyNlbmRpZiAvKiBfX0JGQURfRFJWX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFkX2Z3aW1nLmMgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYWRfZndpbWcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMmY2OTQ5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFkX2Z3aW1nLmMKQEAgLTAsMCArMSw5NSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisvKioKKyAqICBiZmFkX2Z3aW1nLmMgTGludXggZHJpdmVyIFBDSSBpbnRlcmZhY2UgbW9kdWxlLgorICovCisjaW5jbHVkZSA8YmZhX29zX2luYy5oPgorI2luY2x1ZGUgPGJmYWRfZHJ2Lmg+CisjaW5jbHVkZSA8YmZhZF9pbV9jb21wYXQuaD4KKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxhc20vZmNudGwuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgorI2luY2x1ZGUgPGJmYV9md2ltZ19wcml2Lmg+CisjaW5jbHVkZSA8YmZhLmg+CisKK3UzMiBiZmlfaW1hZ2VfY3Rfc2l6ZTsKK3UzMiBiZmlfaW1hZ2VfY2Jfc2l6ZTsKK3UzMiAqYmZpX2ltYWdlX2N0OwordTMyICpiZmlfaW1hZ2VfY2I7CisKKworI2RlZmluZQlCRkFEX0ZXX0ZJTEVfQ1QJImN0ZncuYmluIgorI2RlZmluZQlCRkFEX0ZXX0ZJTEVfQ0IJImNiZncuYmluIgorCit1MzIgKgorYmZhZF9yZWFkX2Zpcm13YXJlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1MzIgKipiZmlfaW1hZ2UsCisJCQl1MzIgKmJmaV9pbWFnZV9zaXplLCBjaGFyICpmd19uYW1lKQoreworCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZnc7CisKKwlpZiAocmVxdWVzdF9maXJtd2FyZSgmZncsIGZ3X25hbWUsICZwZGV2LT5kZXYpKSB7CisJCXByaW50ayhLRVJOX0FMRVJUICJDYW4ndCBsb2NhdGUgZmlybXdhcmUgJXNcbiIsIGZ3X25hbWUpOworCQlnb3RvIGVycm9yOworCX0KKworCSpiZmlfaW1hZ2UgPSB2bWFsbG9jKGZ3LT5zaXplKTsKKwlpZiAoTlVMTCA9PSAqYmZpX2ltYWdlKSB7CisJCXByaW50ayhLRVJOX0FMRVJUICJGYWlsIHRvIGFsbG9jYXRlIGJ1ZmZlciBmb3IgZncgaW1hZ2UgIgorCQkJInNpemU9JXghXG4iLCAodTMyKSBmdy0+c2l6ZSk7CisJCWdvdG8gZXJyb3I7CisJfQorCisJbWVtY3B5KCpiZmlfaW1hZ2UsIGZ3LT5kYXRhLCBmdy0+c2l6ZSk7CisJKmJmaV9pbWFnZV9zaXplID0gZnctPnNpemUvc2l6ZW9mKHUzMik7CisKKwlyZXR1cm4oKmJmaV9pbWFnZSk7CisKK2Vycm9yOgorCXJldHVybihOVUxMKTsKK30KKwordTMyICoKK2JmYWRfZ2V0X2Zpcm13YXJlX2J1ZihzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlpZiAocGRldi0+ZGV2aWNlID09IEJGQV9QQ0lfREVWSUNFX0lEX0NUKSB7CisJCWlmIChiZmlfaW1hZ2VfY3Rfc2l6ZSA9PSAwKQorCQkJYmZhZF9yZWFkX2Zpcm13YXJlKHBkZXYsICZiZmlfaW1hZ2VfY3QsCisJCQkJJmJmaV9pbWFnZV9jdF9zaXplLCBCRkFEX0ZXX0ZJTEVfQ1QpOworCQlyZXR1cm4oYmZpX2ltYWdlX2N0KTsKKwl9IGVsc2UgeworCQlpZiAoYmZpX2ltYWdlX2NiX3NpemUgPT0gMCkKKwkJCWJmYWRfcmVhZF9maXJtd2FyZShwZGV2LCAmYmZpX2ltYWdlX2NiLAorCQkJCSZiZmlfaW1hZ2VfY2Jfc2l6ZSwgQkZBRF9GV19GSUxFX0NCKTsKKwkJcmV0dXJuKGJmaV9pbWFnZV9jYik7CisJfQorfQorCit1MzIgKgorYmZpX2ltYWdlX2N0X2dldF9jaHVuayh1MzIgb2ZmKQoreyByZXR1cm4gKHUzMiAqKShiZmlfaW1hZ2VfY3QgKyBvZmYpOyB9CisKK3UzMiAqCitiZmlfaW1hZ2VfY2JfZ2V0X2NodW5rKHUzMiBvZmYpCit7IHJldHVybiAodTMyICopKGJmaV9pbWFnZV9jYiArIG9mZik7IH0KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFkX2ltLmMgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYWRfaW0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNThjOTkyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFkX2ltLmMKQEAgLTAsMCArMSwxMjMwIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKy8qKgorICogIGJmYWRfaW0uYyBMaW51eCBkcml2ZXIgSU0gbW9kdWxlLgorICovCisKKyNpbmNsdWRlICJiZmFkX2Rydi5oIgorI2luY2x1ZGUgImJmYWRfaW0uaCIKKyNpbmNsdWRlICJiZmFkX3RyY21vZC5oIgorI2luY2x1ZGUgImJmYV9jYl9pb2ltX21hY3Jvcy5oIgorI2luY2x1ZGUgPGZjYi9iZmFfZmNiX2ZjcGltLmg+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+cXVldWVfZGVwdGggLSAxKTsKKwl9Cit9CisKKworCisKK3N0cnVjdCBiZmFkX2l0bmltX3MgKgorYmZhZF9vc19nZXRfaXRuaW0oc3RydWN0IGJmYWRfaW1fcG9ydF9zICppbV9wb3J0LCBpbnQgaWQpCit7CisJc3RydWN0IGJmYWRfaXRuaW1fcyAgICppdG5pbSA9IE5VTEw7CisKKwkvKiBTZWFyY2ggdGhlIG1hcHBlZCBsaXN0IGZvciB0aGlzIHRhcmdldCBJRCAqLworCWxpc3RfZm9yX2VhY2hfZW50cnkoaXRuaW0sICZpbV9wb3J0LT5pdG5pbV9tYXBwZWRfbGlzdCwgbGlzdF9lbnRyeSkgeworCQlpZiAoaWQgPT0gaXRuaW0tPnNjc2lfdGd0X2lkKQorCQkJcmV0dXJuIGl0bmltOworCX0KKworCXJldHVybiBOVUxMOworfQorCisvKioKKyAqIFNjc2lfSG9zdCB0ZW1wbGF0ZSBlbnRyeSBzbGF2ZV9hbGxvYworICovCitzdGF0aWMgaW50CitiZmFkX2ltX3NsYXZlX2FsbG9jKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldikKK3sKKwlzdHJ1Y3QgZmNfcnBvcnQgKnJwb3J0ID0gc3RhcmdldF90b19ycG9ydChzY3NpX3RhcmdldChzZGV2KSk7CisKKwlpZiAoIXJwb3J0IHx8IGZjX3JlbW90ZV9wb3J0X2Noa3JlYWR5KHJwb3J0KSkKKwkJcmV0dXJuIC1FTlhJTzsKKworCXNkZXYtPmhvc3RkYXRhID0gcnBvcnQtPmRkX2RhdGE7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZAorYmZhZF9vc19mY19ob3N0X2luaXQoc3RydWN0IGJmYWRfaW1fcG9ydF9zICppbV9wb3J0KQoreworCXN0cnVjdCBTY3NpX0hvc3QgKmhvc3QgPSBpbV9wb3J0LT5zaG9zdDsKKwlzdHJ1Y3QgYmZhZF9zICAgICAgICAgKmJmYWQgPSBpbV9wb3J0LT5iZmFkOworCXN0cnVjdCBiZmFkX3BvcnRfcyAgICAqcG9ydCA9IGltX3BvcnQtPnBvcnQ7CisJdW5pb24gYXR0ciB7CisJCXN0cnVjdCBiZmFfcHBvcnRfYXR0cl9zIHBhdHRyOworCQlzdHJ1Y3QgYmZhX2lvY19hdHRyX3MgIGlvY19hdHRyOworCX0gYXR0cjsKKworCWZjX2hvc3Rfbm9kZV9uYW1lKGhvc3QpID0KKwkJYmZhX29zX2h0b25sbCgoYmZhX2Zjc19wb3J0X2dldF9ud3duKHBvcnQtPmZjc19wb3J0KSkpOworCWZjX2hvc3RfcG9ydF9uYW1lKGhvc3QpID0KKwkJYmZhX29zX2h0b25sbCgoYmZhX2Zjc19wb3J0X2dldF9wd3duKHBvcnQtPmZjc19wb3J0KSkpOworCisJZmNfaG9zdF9zdXBwb3J0ZWRfY2xhc3Nlcyhob3N0KSA9IEZDX0NPU19DTEFTUzM7CisKKwltZW1zZXQoZmNfaG9zdF9zdXBwb3J0ZWRfZmM0cyhob3N0KSwgMCwKKwkgICAgICAgc2l6ZW9mKGZjX2hvc3Rfc3VwcG9ydGVkX2ZjNHMoaG9zdCkpKTsKKwlpZiAoYmZhZF9zdXBwb3J0ZWRfZmM0cyAmIChCRkFfUE9SVF9ST0xFX0ZDUF9JTSB8IEJGQV9QT1JUX1JPTEVfRkNQX1RNKSkKKwkJLyogRm9yIEZDUCB0eXBlIDB4MDggKi8KKwkJZmNfaG9zdF9zdXBwb3J0ZWRfZmM0cyhob3N0KVsyXSA9IDE7CisJaWYgKGJmYWRfc3VwcG9ydGVkX2ZjNHMgfCBCRkFfUE9SVF9ST0xFX0ZDUF9JUEZDKQorCQkvKiBGb3IgTExDL1NOQVAgdHlwZSAweDA1ICovCisJCWZjX2hvc3Rfc3VwcG9ydGVkX2ZjNHMoaG9zdClbM10gPSAweDIwOworCS8qIEZvciBmaWJyZSBjaGFubmVsIHNlcnZpY2VzIHR5cGUgMHgyMCAqLworCWZjX2hvc3Rfc3VwcG9ydGVkX2ZjNHMoaG9zdClbN10gPSAxOworCisJbWVtc2V0KCZhdHRyLmlvY19hdHRyLCAwLCBzaXplb2YoYXR0ci5pb2NfYXR0cikpOworCWJmYV9nZXRfYXR0cigmYmZhZC0+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+CisjaW5jbHVkZSA8Y3MvYmZhX3EuaD4KKworc3RydWN0IGJmYV9zOworCit0eXBlZGVmIHZvaWQgKCpiZmFfdGltZXJfY2Jmbl90KSh2b2lkICopOworCisvKioKKyAqIEJGQSB0aW1lciBkYXRhIHN0cnVjdHVyZQorICovCitzdHJ1Y3QgYmZhX3RpbWVyX3MgeworCXN0cnVjdCBsaXN0X2hlYWQJcWU7CisJYmZhX3RpbWVyX2NiZm5fdCB0aW1lcmNiOworCXZvaWQgICAgICAgICAgICAqYXJnOworCWludCAgICAgICAgICAgICB0aW1lb3V0OwkvKio8IGluIG1pbGxpc2Vjcy4gKi8KK307CisKKy8qKgorICogVGltZXIgbW9kdWxlIHN0cnVjdHVyZQorICovCitzdHJ1Y3QgYmZhX3RpbWVyX21vZF9zIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHRpbWVyX3E7Cit9OworCisjZGVmaW5lIEJGQV9USU1FUl9GUkVRIDUwMCAvKio8IHNwZWNpZmllZCBpbiBtaWxsaXNlY3MgKi8KKwordm9pZCBiZmFfdGltZXJfYmVhdChzdHJ1Y3QgYmZhX3RpbWVyX21vZF9zICptb2QpOwordm9pZCBiZmFfdGltZXJfaW5pdChzdHJ1Y3QgYmZhX3RpbWVyX21vZF9zICptb2QpOwordm9pZCBiZmFfdGltZXJfYmVnaW4oc3RydWN0IGJmYV90aW1lcl9tb2RfcyAqbW9kLCBzdHJ1Y3QgYmZhX3RpbWVyX3MgKnRpbWVyLAorCQkJYmZhX3RpbWVyX2NiZm5fdCB0aW1lcmNiLCB2b2lkICphcmcsCisJCQl1bnNpZ25lZCBpbnQgdGltZW91dCk7Cit2b2lkIGJmYV90aW1lcl9zdG9wKHN0cnVjdCBiZmFfdGltZXJfcyAqdGltZXIpOworCisjZW5kaWYgLyogX19CRkFfVElNRVJfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYmZpL2JmaS5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2JmaS9iZmkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Y2FkZmUwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2JmaS9iZmkuaApAQCAtMCwwICsxLDE3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9fQkZJX0hfXworI2RlZmluZSBfX0JGSV9IX18KKworI2luY2x1ZGUgPGJmYV9vc19pbmMuaD4KKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX3N0YXR1cy5oPgorCisjcHJhZ21hIHBhY2soMSkKKworLyoqCisgKiBNc2cgaGVhZGVyIGNvbW1vbiB0byBhbGwgbXNncworICovCitzdHJ1Y3QgYmZpX21oZHJfcyB7CisJdTggICAgICAgICBtc2dfY2xhc3M7CS8qICBAcmVmIGJmaV9tY2xhc3NfdAkgICAgKi8KKwl1OCAgICAgICAgIG1zZ19pZDsJCS8qICBtc2cgb3Bjb2RlIHdpdGggaW4gdGhlIGNsYXNzICAgKi8KKwl1bmlvbiB7CisJCXN0cnVjdCB7CisJCQl1OCAgICAgICAgIHJzdmQ7CisJCQl1OCAgICAgICAgIGxwdV9pZDsJLyogIG1zZyBkZXN0aW5hdGlvbgkgICAgKi8KKwkJfSBoMmk7CisJCXUxNiAgICAgICAgaTJodG9rOwkvKiAgdG9rZW4gaW4gbXNncyB0byBob3N0CSAgICAqLworCX0gbXRhZzsKK307CisKKyNkZWZpbmUgYmZpX2gyaV9zZXQoX21oLCBfbWMsIF9vcCwgX2xwdWlkKSBkbyB7CQlcCisJKF9taCkubXNnX2NsYXNzIAkJPSAoX21jKTsgICAgICBcCisJKF9taCkubXNnX2lkCQkJPSAoX29wKTsgICAgICBcCisJKF9taCkubXRhZy5oMmkubHB1X2lkCT0gKF9scHVpZCk7ICAgICAgXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBiZmlfaTJoX3NldChfbWgsIF9tYywgX29wLCBfaTJodG9rKSBkbyB7CQlcCisJKF9taCkubXNnX2NsYXNzIAkJPSAoX21jKTsgICAgICBcCisJKF9taCkubXNnX2lkCQkJPSAoX29wKTsgICAgICBcCisJKF9taCkubXRhZy5pMmh0b2sJCT0gKF9pMmh0b2spOyAgICAgIFwKK30gd2hpbGUgKDApCisKKy8qCisgKiBNZXNzYWdlIG9wY29kZXM6IDAtMTI3IHRvIGZpcm13YXJlLCAxMjgtMjU1IHRvIGhvc3QKKyAqLworI2RlZmluZSBCRklfSTJIX09QQ09ERV9CQVNFCTEyOAorI2RlZmluZSBCRkFfSTJITShfeCkgCQkJKChfeCkgKyBCRklfSTJIX09QQ09ERV9CQVNFKQorCisvKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogU2NhdHRlciBHYXRoZXIgRWxlbWVudCBhbmQgUGFnZSBkZWZpbml0aW9uCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworCisjZGVmaW5lIEJGSV9TR0VfSU5MSU5FCTEKKyNkZWZpbmUgQkZJX1NHRV9JTkxJTkVfTUFYCShCRklfU0dFX0lOTElORSArIDEpCisKKy8qKgorICogU0cgRmxhZ3MKKyAqLworZW51bSB7CisJQkZJX1NHRV9EQVRBCT0gMCwJLyogIGRhdGEgYWRkcmVzcywgbm90IGxhc3QJICAgICAqLworCUJGSV9TR0VfREFUQV9DUEwJPSAxLAkvKiAgZGF0YSBhZGRyLCBsYXN0IGluIGN1cnJlbnQgcGFnZSAqLworCUJGSV9TR0VfREFUQV9MQVNUCT0gMywJLyogIGRhdGEgYWRkcmVzcywgbGFzdAkJICAgICAqLworCUJGSV9TR0VfTElOSwk9IDIsCS8qICBsaW5rIGFkZHJlc3MJCSAgICAgKi8KKwlCRklfU0dFX1BHRExFTgk9IDIsCS8qICBjdW11bGF0aXZlIGRhdGEgbGVuZ3RoIGZvciBwYWdlICovCit9OworCisvKioKKyAqIERNQSBhZGRyZXNzZXMKKyAqLwordW5pb24gYmZpX2FkZHJfdSB7CisJc3RydWN0IHsKKwkJdTMyICAgICAgICBhZGRyX2xvOworCQl1MzIgICAgICAgIGFkZHJfaGk7CisJfSBhMzI7Cit9OworCisvKioKKyAqIFNjYXR0ZXIgR2F0aGVyIEVsZW1lbnQKKyAqLworc3RydWN0IGJmaV9zZ2VfcyB7CisjaWZkZWYgX19CSUdFTkRJQU4KKwl1MzIgICAgICAgIGZsYWdzCTogMiwKKwkJCXJzdmQJOiAyLAorCQkJc2dfbGVuCTogMjg7CisjZWxzZQorCXUzMiAgICAgICAgc2dfbGVuCTogMjgsCisJCQlyc3ZkCTogMiwKKwkJCWZsYWdzCTogMjsKKyNlbmRpZgorCXVuaW9uIGJmaV9hZGRyX3Ugc2dhOworfTsKKworLyoqCisgKiBTY2F0dGVyIEdhdGhlciBQYWdlCisgKi8KKyNkZWZpbmUgQkZJX1NHUEdfREFUQV9TR0VTCQk3CisjZGVmaW5lIEJGSV9TR1BHX1NHRVNfTUFYCQkoQkZJX1NHUEdfREFUQV9TR0VTICsgMSkKKyNkZWZpbmUgQkZJX1NHUEdfUlNWRF9XRF9MRU4JOAorc3RydWN0IGJmaV9zZ3BnX3MgeworCXN0cnVjdCBiZmlfc2dlX3Mgc2dlc1tCRklfU0dQR19TR0VTX01BWF07CisJdTMyCXJzdmRbQkZJX1NHUEdfUlNWRF9XRF9MRU5dOworfTsKKworLyoKKyAqIExhcmdlIE1lc3NhZ2Ugc3RydWN0dXJlIC0gMTI4IEJ5dGVzIHNpemUgTXNncworICovCisjZGVmaW5lIEJGSV9MTVNHX1NaCQkxMjgKKyNkZWZpbmUgQkZJX0xNU0dfUExfV1NaCVwKKwkJCSgoQkZJX0xNU0dfU1ogLSBzaXplb2Yoc3RydWN0IGJmaV9taGRyX3MpKSAvIDQpCisKK3N0cnVjdCBiZmlfbXNnX3MgeworCXN0cnVjdCBiZmlfbWhkcl9zIG1oZHI7CisJdTMyCXBsW0JGSV9MTVNHX1BMX1dTWl07Cit9OworCisvKioKKyAqIE1haWxib3ggbWVzc2FnZSBzdHJ1Y3R1cmUKKyAqLworI2RlZmluZSBCRklfTUJNU0dfU1oJCTcKK3N0cnVjdCBiZmlfbWJtc2dfcyB7CisJc3RydWN0IGJmaV9taGRyX3MJbWg7CisJdTMyCQlwbFtCRklfTUJNU0dfU1pdOworfTsKKworLyoqCisgKiBNZXNzYWdlIENsYXNzZXMKKyAqLworZW51bSBiZmlfbWNsYXNzIHsKKwlCRklfTUNfSU9DCQk9IDEsCS8qICBJTyBDb250cm9sbGVyIChJT0MpCSAgICAqLworCUJGSV9NQ19ESUFHCQk9IDIsCS8qICBEaWFnbm9zdGljIE1zZ3MJCSAgICAqLworCUJGSV9NQ19GTEFTSAkJPSAzLAkvKiAgRmxhc2ggbWVzc2FnZSBjbGFzcwkgICAgKi8KKwlCRklfTUNfQ0VFCQk9IDQsCisJQkZJX01DX0ZDX1BPUlQJCT0gNSwJLyogIEZDIHBvcnQJCSAgIAkgICAgKi8KKwlCRklfTUNfSU9DRkMJCT0gNiwJLyogIEZDIC0gSU8gQ29udHJvbGxlciAoSU9DKQkgICAgKi8KKwlCRklfTUNfTEwJCT0gNywJLyogIExpbmsgTGF5ZXIJCSAJICAgICovCisJQkZJX01DX1VGCQk9IDgsCS8qICBVbnNvbGljaXRlZCBmcmFtZSByZWNlaXZlCSAgICAqLworCUJGSV9NQ19GQ1hQCQk9IDksCS8qICBGQyBUcmFuc3BvcnQJCSAgICAqLworCUJGSV9NQ19MUFMJCT0gMTAsCS8qICBscG9ydCBmYyBsb2dpbiBzZXJ2aWNlcwkgICAgKi8KKwlCRklfTUNfUlBPUlQJCT0gMTEsCS8qICBSZW1vdGUgcG9ydAkJICAgICovCisJQkZJX01DX0lUTklNCQk9IDEyLAkvKiAgSS1UIG5leHVzIChJbml0aWF0b3IgbW9kZSkJICAgICovCisJQkZJX01DX0lPSU1fUkVBRAk9IDEzLAkvKiAgcmVhZCBJTyAoSW5pdGlhdG9yIG1vZGUpCSAgICAqLworCUJGSV9NQ19JT0lNX1dSSVRFCT0gMTQsCS8qICB3cml0ZSBJTyAoSW5pdGlhdG9yIG1vZGUpCSAgICAqLworCUJGSV9NQ19JT0lNX0lPCQk9IDE1LAkvKiAgSU8gKEluaXRpYXRvciBtb2RlKQkgICAgKi8KKwlCRklfTUNfSU9JTQkJPSAxNiwJLyogIElPIChJbml0aWF0b3IgbW9kZSkJICAgICovCisJQkZJX01DX0lPSU1fSU9DT00JPSAxNywJLyogIGdvb2QgSU8gY29tcGxldGlvbgkJICAgICovCisJQkZJX01DX1RTS0lNCQk9IDE4LAkvKiAgSW5pdGlhdG9yIFRhc2sgbWFuYWdlbWVudAkgICAgKi8KKwlCRklfTUNfU0JPT1QJCT0gMTksCS8qICBTQU4gYm9vdCBzZXJ2aWNlcwkJICAgICovCisJQkZJX01DX0lQRkMJCT0gMjAsCS8qICBJUCBvdmVyIEZDIE1zZ3MJCSAgICAqLworCUJGSV9NQ19QT1JUCQk9IDIxLAkvKiAgUGh5c2ljYWwgcG9ydAkJICAgICovCisJQkZJX01DX01BWAkJPSAzMgorfTsKKworI2RlZmluZSBCRklfSU9DX01BWF9DUVMJCTQKKyNkZWZpbmUgQkZJX0lPQ19NQVhfQ1FTX0FTSUMJOAorI2RlZmluZSBCRklfSU9DX01TR0xFTl9NQVgJMzIJLyogMzIgYnl0ZXMgKi8KKworI3ByYWdtYSBwYWNrKCkKKworI2VuZGlmIC8qIF9fQkZJX0hfXyAqLworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYmZpL2JmaV9ib290LmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYmZpL2JmaV9ib290LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTk1NWFmZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9iZmkvYmZpX2Jvb3QuaApAQCAtMCwwICsxLDM0IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisvKgorICogYmZpX2Jvb3QuaAorICovCisKKyNpZm5kZWYgX19CRklfQk9PVF9IX18KKyNkZWZpbmUgX19CRklfQk9PVF9IX18KKworI2RlZmluZSBCRklfQk9PVF9UWVBFX09GRgkJOAorI2RlZmluZSBCRklfQk9PVF9QQVJBTV9PRkYJCTEyCisKKyNkZWZpbmUgQkZJX0JPT1RfVFlQRV9OT1JNQUwgCQkwCS8qIHBhcmFtIGlzIGRldmljZSBpZCAqLworI2RlZmluZQlCRklfQk9PVF9UWVBFX0ZMQVNICQkxCisjZGVmaW5lCUJGSV9CT09UX1RZUEVfTUVNVEVTVAkJMgorCisjZGVmaW5lIEJGSV9CT09UX01FTVRFU1RfUkVTX0FERFIgICAweDkwMAorI2RlZmluZSBCRklfQk9PVF9NRU1URVNUX1JFU19TSUcgICAgMHhBMEExQTJBMworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9iZmkvYmZpX2NicmVnLmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYmZpL2JmaV9jYnJlZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzYmI1MmIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYmZpL2JmaV9jYnJlZy5oCkBAIC0wLDAgKzEsMzA1IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKy8qCisgKiBiZmlfY2JyZWcuaCBjcm9zc2JvdyBob3N0IGJsb2NrIHJlZ2lzdGVyIGRlZmluaXRpb25zCisgKgorICogISEhIERvIG5vdCBlZGl0LiBBdXRvIGdlbmVyYXRlZC4gISEhCisgKi8KKworI2lmbmRlZiBfX0JGSV9DQlJFR19IX18KKyNkZWZpbmUgX19CRklfQ0JSRUdfSF9fCisKKworI2RlZmluZSBIT1NURk4wX0lOVF9TVEFUVVMgICAgICAgICAgICAgICAweDAwMDE0MDAwCisjZGVmaW5lIF9fSE9TVEZOMF9JTlRfU1RBVFVTX0xWTF9NSyAgICAgIDB4MDBmMDAwMDAKKyNkZWZpbmUgX19IT1NURk4wX0lOVF9TVEFUVVNfTFZMX1NIICAgICAgMjAKKyNkZWZpbmUgX19IT1NURk4wX0lOVF9TVEFUVVNfTFZMKF92KSAgICAgKChfdikgPDwgX19IT1NURk4wX0lOVF9TVEFUVVNfTFZMX1NIKQorI2RlZmluZSBfX0hPU1RGTjBfSU5UX1NUQVRVU19QICAgICAgICAgICAweDAwMGZmZmZmCisjZGVmaW5lIEhPU1RGTjBfSU5UX01TSyAgICAgICAgICAgICAgICAgIDB4MDAwMTQwMDQKKyNkZWZpbmUgSE9TVF9QQUdFX05VTV9GTjAgICAgICAgICAgICAgICAgMHgwMDAxNDAwOAorI2RlZmluZSBfX0hPU1RfUEFHRV9OVU1fRk4gICAgICAgICAgICAgICAweDAwMDAwMWZmCisjZGVmaW5lIEhPU1RGTjFfSU5UX1NUQVRVUyAgICAgICAgICAgICAgIDB4MDAwMTQxMDAKKyNkZWZpbmUgX19IT1NURk4xX0lOVF9TVEFUX0xWTF9NSyAgICAgICAgMHgwMGYwMDAwMAorI2RlZmluZSBfX0hPU1RGTjFfSU5UX1NUQVRfTFZMX1NIICAgICAgICAyMAorI2RlZmluZSBfX0hPU1RGTjFfSU5UX1NUQVRfTFZMKF92KSAgICAgICAoKF92KSA8PCBfX0hPU1RGTjFfSU5UX1NUQVRfTFZMX1NIKQorI2RlZmluZSBfX0hPU1RGTjFfSU5UX1NUQVRfUCAgICAgICAgICAgICAweDAwMGZmZmZmCisjZGVmaW5lIEhPU1RGTjFfSU5UX01TSyAgICAgICAgICAgICAgICAgIDB4MDAwMTQxMDQKKyNkZWZpbmUgSE9TVF9QQUdFX05VTV9GTjEgICAgICAgICAgICAgICAgMHgwMDAxNDEwOAorI2RlZmluZSBBUFBfUExMXzQwMF9DVExfUkVHICAgICAgICAgICAgICAweDAwMDE0MjA0CisjZGVmaW5lIF9fUF80MDBfUExMX0xPQ0sgICAgICAgICAgICAgICAgIDB4ODAwMDAwMDAKKyNkZWZpbmUgX19BUFBfUExMXzQwMF9TUkFNX1VTRV8xMDBNSFogICAgMHgwMDEwMDAwMAorI2RlZmluZSBfX0FQUF9QTExfNDAwX1JFU0VUX1RJTUVSX01LICAgICAweDAwMGUwMDAwCisjZGVmaW5lIF9fQVBQX1BMTF80MDBfUkVTRVRfVElNRVJfU0ggICAgIDE3CisjZGVmaW5lIF9fQVBQX1BMTF80MDBfUkVTRVRfVElNRVIoX3YpICAgICgoX3YpIDw8IF9fQVBQX1BMTF80MDBfUkVTRVRfVElNRVJfU0gpCisjZGVmaW5lIF9fQVBQX1BMTF80MDBfTE9HSUNfU09GVF9SRVNFVCAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgX19BUFBfUExMXzQwMF9DTlRMTVQwXzFfTUsgICAgICAgMHgwMDAwYzAwMAorI2RlZmluZSBfX0FQUF9QTExfNDAwX0NOVExNVDBfMV9TSCAgICAgICAxNAorI2RlZmluZSBfX0FQUF9QTExfNDAwX0NOVExNVDBfMShfdikgICAgICAoKF92KSA8PCBfX0FQUF9QTExfNDAwX0NOVExNVDBfMV9TSCkKKyNkZWZpbmUgX19BUFBfUExMXzQwMF9KSVRMTVQwXzFfTUsgICAgICAgMHgwMDAwMzAwMAorI2RlZmluZSBfX0FQUF9QTExfNDAwX0pJVExNVDBfMV9TSCAgICAgICAxMgorI2RlZmluZSBfX0FQUF9QTExfNDAwX0pJVExNVDBfMShfdikgICAgICAoKF92KSA8PCBfX0FQUF9QTExfNDAwX0pJVExNVDBfMV9TSCkKKyNkZWZpbmUgX19BUFBfUExMXzQwMF9IUkVGICAgICAgICAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBfX0FQUF9QTExfNDAwX0hESVYgICAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIF9fQVBQX1BMTF80MDBfUDBfMV9NSyAgICAgICAgICAgIDB4MDAwMDAzMDAKKyNkZWZpbmUgX19BUFBfUExMXzQwMF9QMF8xX1NIICAgICAgICAgICAgOAorI2RlZmluZSBfX0FQUF9QTExfNDAwX1AwXzEoX3YpICAgICAgICAgICAoKF92KSA8PCBfX0FQUF9QTExfNDAwX1AwXzFfU0gpCisjZGVmaW5lIF9fQVBQX1BMTF80MDBfWjBfMl9NSyAgICAgICAgICAgIDB4MDAwMDAwZTAKKyNkZWZpbmUgX19BUFBfUExMXzQwMF9aMF8yX1NIICAgICAgICAgICAgNQorI2RlZmluZSBfX0FQUF9QTExfNDAwX1owXzIoX3YpICAgICAgICAgICAoKF92KSA8PCBfX0FQUF9QTExfNDAwX1owXzJfU0gpCisjZGVmaW5lIF9fQVBQX1BMTF80MDBfUlNFTDIwMDUwMCAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgX19BUFBfUExMXzQwMF9FTkFSU1QgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBfX0FQUF9QTExfNDAwX0JZUEFTUyAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIF9fQVBQX1BMTF80MDBfTFJFU0VUTiAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgX19BUFBfUExMXzQwMF9FTkFCTEUgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBUFBfUExMXzIxMl9DVExfUkVHICAgICAgICAgICAgICAweDAwMDE0MjA4CisjZGVmaW5lIF9fUF8yMTJfUExMX0xPQ0sgICAgICAgICAgICAgICAgIDB4ODAwMDAwMDAKKyNkZWZpbmUgX19BUFBfUExMXzIxMl9SRVNFVF9USU1FUl9NSyAgICAgMHgwMDBlMDAwMAorI2RlZmluZSBfX0FQUF9QTExfMjEyX1JFU0VUX1RJTUVSX1NIICAgICAxNworI2RlZmluZSBfX0FQUF9QTExfMjEyX1JFU0VUX1RJTUVSKF92KSAgICAoKF92KSA8PCBfX0FQUF9QTExfMjEyX1JFU0VUX1RJTUVSX1NIKQorI2RlZmluZSBfX0FQUF9QTExfMjEyX0xPR0lDX1NPRlRfUkVTRVQgICAweDAwMDEwMDAwCisjZGVmaW5lIF9fQVBQX1BMTF8yMTJfQ05UTE1UMF8xX01LICAgICAgIDB4MDAwMGMwMDAKKyNkZWZpbmUgX19BUFBfUExMXzIxMl9DTlRMTVQwXzFfU0ggICAgICAgMTQKKyNkZWZpbmUgX19BUFBfUExMXzIxMl9DTlRMTVQwXzEoX3YpICAgICAgKChfdikgPDwgX19BUFBfUExMXzIxMl9DTlRMTVQwXzFfU0gpCisjZGVmaW5lIF9fQVBQX1BMTF8yMTJfSklUTE1UMF8xX01LICAgICAgIDB4MDAwMDMwMDAKKyNkZWZpbmUgX19BUFBfUExMXzIxMl9KSVRMTVQwXzFfU0ggICAgICAgMTIKKyNkZWZpbmUgX19BUFBfUExMXzIxMl9KSVRMTVQwXzEoX3YpICAgICAgKChfdikgPDwgX19BUFBfUExMXzIxMl9KSVRMTVQwXzFfU0gpCisjZGVmaW5lIF9fQVBQX1BMTF8yMTJfSFJFRiAgICAgICAgICAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgX19BUFBfUExMXzIxMl9IRElWICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBfX0FQUF9QTExfMjEyX1AwXzFfTUsgICAgICAgICAgICAweDAwMDAwMzAwCisjZGVmaW5lIF9fQVBQX1BMTF8yMTJfUDBfMV9TSCAgICAgICAgICAgIDgKKyNkZWZpbmUgX19BUFBfUExMXzIxMl9QMF8xKF92KSAgICAgICAgICAgKChfdikgPDwgX19BUFBfUExMXzIxMl9QMF8xX1NIKQorI2RlZmluZSBfX0FQUF9QTExfMjEyX1owXzJfTUsgICAgICAgICAgICAweDAwMDAwMGUwCisjZGVmaW5lIF9fQVBQX1BMTF8yMTJfWjBfMl9TSCAgICAgICAgICAgIDUKKyNkZWZpbmUgX19BUFBfUExMXzIxMl9aMF8yKF92KSAgICAgICAgICAgKChfdikgPDwgX19BUFBfUExMXzIxMl9aMF8yX1NIKQorI2RlZmluZSBfX0FQUF9QTExfMjEyX1JTRUwyMDA1MDAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIF9fQVBQX1BMTF8yMTJfRU5BUlNUICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgX19BUFBfUExMXzIxMl9CWVBBU1MgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBfX0FQUF9QTExfMjEyX0xSRVNFVE4gICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIF9fQVBQX1BMTF8yMTJfRU5BQkxFICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgSE9TVF9TRU0wX1JFRyAgICAgICAgICAgICAgICAgICAgMHgwMDAxNDIzMAorI2RlZmluZSBfX0hPU1RfU0VNQVBIT1JFICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEhPU1RfU0VNMV9SRUcgICAgICAgICAgICAgICAgICAgIDB4MDAwMTQyMzQKKyNkZWZpbmUgSE9TVF9TRU0yX1JFRyAgICAgICAgICAgICAgICAgICAgMHgwMDAxNDIzOAorI2RlZmluZSBIT1NUX1NFTTNfUkVHICAgICAgICAgICAgICAgICAgICAweDAwMDE0MjNjCisjZGVmaW5lIEhPU1RfU0VNMF9JTkZPX1JFRyAgICAgICAgICAgICAgIDB4MDAwMTQyNDAKKyNkZWZpbmUgSE9TVF9TRU0xX0lORk9fUkVHICAgICAgICAgICAgICAgMHgwMDAxNDI0NAorI2RlZmluZSBIT1NUX1NFTTJfSU5GT19SRUcgICAgICAgICAgICAgICAweDAwMDE0MjQ4CisjZGVmaW5lIEhPU1RfU0VNM19JTkZPX1JFRyAgICAgICAgICAgICAgIDB4MDAwMTQyNGMKKyNkZWZpbmUgSE9TVEZOMF9MUFUwX0NNRF9TVEFUICAgICAgICAgICAgMHgwMDAxOTAwMAorI2RlZmluZSBfX0hPU1RGTjBfTFBVMF9NQk9YX0lORk9fTUsgICAgICAweGZmZmZmZmZlCisjZGVmaW5lIF9fSE9TVEZOMF9MUFUwX01CT1hfSU5GT19TSCAgICAgIDEKKyNkZWZpbmUgX19IT1NURk4wX0xQVTBfTUJPWF9JTkZPKF92KSAgICAgKChfdikgPDwgX19IT1NURk4wX0xQVTBfTUJPWF9JTkZPX1NIKQorI2RlZmluZSBfX0hPU1RGTjBfTFBVMF9NQk9YX0NNRF9TVEFUVVMgICAweDAwMDAwMDAxCisjZGVmaW5lIExQVTBfSE9TVEZOMF9DTURfU1RBVCAgICAgICAgICAgIDB4MDAwMTkwMDgKKyNkZWZpbmUgX19MUFUwX0hPU1RGTjBfTUJPWF9JTkZPX01LICAgICAgMHhmZmZmZmZmZQorI2RlZmluZSBfX0xQVTBfSE9TVEZOMF9NQk9YX0lORk9fU0ggICAgICAxCisjZGVmaW5lIF9fTFBVMF9IT1NURk4wX01CT1hfSU5GTyhfdikgICAgICgoX3YpIDw8IF9fTFBVMF9IT1NURk4wX01CT1hfSU5GT19TSCkKKyNkZWZpbmUgX19MUFUwX0hPU1RGTjBfTUJPWF9DTURfU1RBVFVTICAgMHgwMDAwMDAwMQorI2RlZmluZSBIT1NURk4xX0xQVTFfQ01EX1NUQVQgICAgICAgICAgICAweDAwMDE5MDE0CisjZGVmaW5lIF9fSE9TVEZOMV9MUFUxX01CT1hfSU5GT19NSyAgICAgIDB4ZmZmZmZmZmUKKyNkZWZpbmUgX19IT1NURk4xX0xQVTFfTUJPWF9JTkZPX1NIICAgICAgMQorI2RlZmluZSBfX0hPU1RGTjFfTFBVMV9NQk9YX0lORk8oX3YpICAgICAoKF92KSA8PCBfX0hPU1RGTjFfTFBVMV9NQk9YX0lORk9fU0gpCisjZGVmaW5lIF9fSE9TVEZOMV9MUFUxX01CT1hfQ01EX1NUQVRVUyAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgTFBVMV9IT1NURk4xX0NNRF9TVEFUICAgICAgICAgICAgMHgwMDAxOTAxYworI2RlZmluZSBfX0xQVTFfSE9TVEZOMV9NQk9YX0lORk9fTUsgICAgICAweGZmZmZmZmZlCisjZGVmaW5lIF9fTFBVMV9IT1NURk4xX01CT1hfSU5GT19TSCAgICAgIDEKKyNkZWZpbmUgX19MUFUxX0hPU1RGTjFfTUJPWF9JTkZPKF92KSAgICAgKChfdikgPDwgX19MUFUxX0hPU1RGTjFfTUJPWF9JTkZPX1NIKQorI2RlZmluZSBfX0xQVTFfSE9TVEZOMV9NQk9YX0NNRF9TVEFUVVMgICAweDAwMDAwMDAxCisjZGVmaW5lIENQRV9RMF9ERVBUSCAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMTQKKyNkZWZpbmUgQ1BFX1EwX1BJICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAxYworI2RlZmluZSBDUEVfUTBfQ0kgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDIwCisjZGVmaW5lIENQRV9RMV9ERVBUSCAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMzQKKyNkZWZpbmUgQ1BFX1ExX1BJICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAzYworI2RlZmluZSBDUEVfUTFfQ0kgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDQwCisjZGVmaW5lIENQRV9RMl9ERVBUSCAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwNTQKKyNkZWZpbmUgQ1BFX1EyX1BJICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDA1YworI2RlZmluZSBDUEVfUTJfQ0kgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDYwCisjZGVmaW5lIENQRV9RM19ERVBUSCAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwNzQKKyNkZWZpbmUgQ1BFX1EzX1BJICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDA3YworI2RlZmluZSBDUEVfUTNfQ0kgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDgwCisjZGVmaW5lIENQRV9RNF9ERVBUSCAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwOTQKKyNkZWZpbmUgQ1BFX1E0X1BJICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDA5YworI2RlZmluZSBDUEVfUTRfQ0kgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMGEwCisjZGVmaW5lIENQRV9RNV9ERVBUSCAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwYjQKKyNkZWZpbmUgQ1BFX1E1X1BJICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDBiYworI2RlZmluZSBDUEVfUTVfQ0kgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMGMwCisjZGVmaW5lIENQRV9RNl9ERVBUSCAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwZDQKKyNkZWZpbmUgQ1BFX1E2X1BJICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDBkYworI2RlZmluZSBDUEVfUTZfQ0kgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMGUwCisjZGVmaW5lIENQRV9RN19ERVBUSCAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwZjQKKyNkZWZpbmUgQ1BFX1E3X1BJICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDBmYworI2RlZmluZSBDUEVfUTdfQ0kgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMTAwCisjZGVmaW5lIFJNRV9RMF9ERVBUSCAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTEwMTQKKyNkZWZpbmUgUk1FX1EwX1BJICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMTAxYworI2RlZmluZSBSTUVfUTBfQ0kgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDExMDIwCisjZGVmaW5lIFJNRV9RMV9ERVBUSCAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTEwMzQKKyNkZWZpbmUgUk1FX1ExX1BJICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMTAzYworI2RlZmluZSBSTUVfUTFfQ0kgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDExMDQwCisjZGVmaW5lIFJNRV9RMl9ERVBUSCAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTEwNTQKKyNkZWZpbmUgUk1FX1EyX1BJICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMTA1YworI2RlZmluZSBSTUVfUTJfQ0kgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDExMDYwCisjZGVmaW5lIFJNRV9RM19ERVBUSCAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTEwNzQKKyNkZWZpbmUgUk1FX1EzX1BJICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMTA3YworI2RlZmluZSBSTUVfUTNfQ0kgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDExMDgwCisjZGVmaW5lIFJNRV9RNF9ERVBUSCAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTEwOTQKKyNkZWZpbmUgUk1FX1E0X1BJICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMTA5YworI2RlZmluZSBSTUVfUTRfQ0kgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDExMGEwCisjZGVmaW5lIFJNRV9RNV9ERVBUSCAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTEwYjQKKyNkZWZpbmUgUk1FX1E1X1BJICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMTBiYworI2RlZmluZSBSTUVfUTVfQ0kgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDExMGMwCisjZGVmaW5lIFJNRV9RNl9ERVBUSCAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTEwZDQKKyNkZWZpbmUgUk1FX1E2X1BJICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMTBkYworI2RlZmluZSBSTUVfUTZfQ0kgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDExMGUwCisjZGVmaW5lIFJNRV9RN19ERVBUSCAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTEwZjQKKyNkZWZpbmUgUk1FX1E3X1BJICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMTBmYworI2RlZmluZSBSTUVfUTdfQ0kgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDExMTAwCisjZGVmaW5lIFBTU19DVExfUkVHICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTg4MDAKKyNkZWZpbmUgX19QU1NfSTJDX0NMS19ESVZfTUsgICAgICAgICAgICAgMHgwMDAzMDAwMAorI2RlZmluZSBfX1BTU19JMkNfQ0xLX0RJVl9TSCAgICAgICAgICAgICAxNgorI2RlZmluZSBfX1BTU19JMkNfQ0xLX0RJVihfdikgICAgICAgICAgICAoKF92KSA8PCBfX1BTU19JMkNfQ0xLX0RJVl9TSCkKKyNkZWZpbmUgX19QU1NfTE1FTV9JTklUX0RPTkUgICAgICAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBfX1BTU19MTUVNX1JFU0VUICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIF9fUFNTX0xNRU1fSU5JVF9FTiAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgX19QU1NfTFBVMV9SRVNFVCAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBfX1BTU19MUFUwX1JFU0VUICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisKKworLyoKKyAqIFRoZXNlIGRlZmluaXRpb25zIGFyZSBlaXRoZXIgaW4gZXJyb3IvbWlzc2luZyBpbiBzcGVjLiBJdHMgYXV0by1nZW5lcmF0ZWQKKyAqIGZyb20gaGFyZCBjb2RlZCB2YWx1ZXMgaW4gcmVncGFyc2UucGwuCisgKi8KKyNkZWZpbmUgX19FTVBIUE9TVF9BVF80R19NS19GSVggICAgICAgICAgMHgwMDAwMDAxYworI2RlZmluZSBfX0VNUEhQT1NUX0FUXzRHX1NIX0ZJWCAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIF9fRU1QSFBSRV9BVF80R19GSVggICAgICAgICAgICAgIDB4MDAwMDAwMDMKKyNkZWZpbmUgX19TRlBfVFhSQVRFX0VOX0ZJWCAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBfX1NGUF9SWFJBVEVfRU5fRklYICAgICAgICAgICAgICAweDAwMDAwMDgwCisKKworLyoKKyAqIFRoZXNlIHJlZ2lzdGVyIGRlZmluaXRpb25zIGFyZSBhdXRvLWdlbmVyYXRlZCBmcm9tIGhhcmQgY29kZWQgdmFsdWVzCisgKiBpbiByZWdwYXJzZS5wbC4KKyAqLworI2RlZmluZSBIT1NURk4wX0xQVV9NQk9YMF8wICAgICAgICAgICAgICAweDAwMDE5MjAwCisjZGVmaW5lIEhPU1RGTjFfTFBVX01CT1gwXzggICAgICAgICAgICAgIDB4MDAwMTkyNjAKKyNkZWZpbmUgTFBVX0hPU1RGTjBfTUJPWDBfMCAgICAgICAgICAgICAgMHgwMDAxOTI4MAorI2RlZmluZSBMUFVfSE9TVEZOMV9NQk9YMF84ICAgICAgICAgICAgICAweDAwMDE5MmUwCisKKworLyoKKyAqIFRoZXNlIHJlZ2lzdGVyIG1hcHBpbmcgZGVmaW5pdGlvbnMgYXJlIGF1dG8tZ2VuZXJhdGVkIGZyb20gbWFwcGluZyB0YWJsZXMKKyAqIGluIHJlZ3BhcnNlLnBsLgorICovCisjZGVmaW5lIEJGQV9JT0MwX0hCRUFUX1JFRyAgICAgICAgICAgICAgIEhPU1RfU0VNMF9JTkZPX1JFRworI2RlZmluZSBCRkFfSU9DMF9TVEFURV9SRUcgICAgICAgICAgICAgICBIT1NUX1NFTTFfSU5GT19SRUcKKyNkZWZpbmUgQkZBX0lPQzFfSEJFQVRfUkVHICAgICAgICAgICAgICAgSE9TVF9TRU0yX0lORk9fUkVHCisjZGVmaW5lIEJGQV9JT0MxX1NUQVRFX1JFRyAgICAgICAgICAgICAgIEhPU1RfU0VNM19JTkZPX1JFRworI2RlZmluZSBCRkFfRldfVVNFX0NPVU5UICAgICAgICAgICAgICAgICBIT1NUX1NFTTRfSU5GT19SRUcKKworI2RlZmluZSBDUEVfUV9ERVBUSChfX24pIFwKKwkoQ1BFX1EwX0RFUFRIICsgKF9fbikgKiAoQ1BFX1ExX0RFUFRIIC0gQ1BFX1EwX0RFUFRIKSkKKyNkZWZpbmUgQ1BFX1FfUEkoX19uKSBcCisJKENQRV9RMF9QSSArIChfX24pICogKENQRV9RMV9QSSAtIENQRV9RMF9QSSkpCisjZGVmaW5lIENQRV9RX0NJKF9fbikgXAorCShDUEVfUTBfQ0kgKyAoX19uKSAqIChDUEVfUTFfQ0kgLSBDUEVfUTBfQ0kpKQorI2RlZmluZSBSTUVfUV9ERVBUSChfX24pIFwKKwkoUk1FX1EwX0RFUFRIICsgKF9fbikgKiAoUk1FX1ExX0RFUFRIIC0gUk1FX1EwX0RFUFRIKSkKKyNkZWZpbmUgUk1FX1FfUEkoX19uKSBcCisJKFJNRV9RMF9QSSArIChfX24pICogKFJNRV9RMV9QSSAtIFJNRV9RMF9QSSkpCisjZGVmaW5lIFJNRV9RX0NJKF9fbikgXAorCShSTUVfUTBfQ0kgKyAoX19uKSAqIChSTUVfUTFfQ0kgLSBSTUVfUTBfQ0kpKQorCisjZGVmaW5lIENQRV9RX05VTShfX2ZuLCBfX3EpICAoKChfX2ZuKSA8PCAyKSArIChfX3EpKQorI2RlZmluZSBSTUVfUV9OVU0oX19mbiwgX19xKSAgKCgoX19mbikgPDwgMikgKyAoX19xKSkKKyNkZWZpbmUgQ1BFX1FfTUFTSyhfX3EpICAoKF9fcSkgJiAweDMpCisjZGVmaW5lIFJNRV9RX01BU0soX19xKSAgKChfX3EpICYgMHgzKQorCisKKy8qCisgKiBQQ0kgTVNJLVggdmVjdG9yIGRlZmluZXMKKyAqLworZW51bSB7CisgICAgQkZBX01TSVhfQ1BFX1EwID0gMCwKKyAgICBCRkFfTVNJWF9DUEVfUTEgPSAxLAorICAgIEJGQV9NU0lYX0NQRV9RMiA9IDIsCisgICAgQkZBX01TSVhfQ1BFX1EzID0gMywKKyAgICBCRkFfTVNJWF9DUEVfUTQgPSA0LAorICAgIEJGQV9NU0lYX0NQRV9RNSA9IDUsCisgICAgQkZBX01TSVhfQ1BFX1E2ID0gNiwKKyAgICBCRkFfTVNJWF9DUEVfUTcgPSA3LAorICAgIEJGQV9NU0lYX1JNRV9RMCA9IDgsCisgICAgQkZBX01TSVhfUk1FX1ExID0gOSwKKyAgICBCRkFfTVNJWF9STUVfUTIgPSAxMCwKKyAgICBCRkFfTVNJWF9STUVfUTMgPSAxMSwKKyAgICBCRkFfTVNJWF9STUVfUTQgPSAxMiwKKyAgICBCRkFfTVNJWF9STUVfUTUgPSAxMywKKyAgICBCRkFfTVNJWF9STUVfUTYgPSAxNCwKKyAgICBCRkFfTVNJWF9STUVfUTcgPSAxNSwKKyAgICBCRkFfTVNJWF9FUlJfRU1DID0gMTYsCisgICAgQkZBX01TSVhfRVJSX0xQVTAgPSAxNywKKyAgICBCRkFfTVNJWF9FUlJfTFBVMSA9IDE4LAorICAgIEJGQV9NU0lYX0VSUl9QU1MgPSAxOSwKKyAgICBCRkFfTVNJWF9NQk9YX0xQVTAgPSAyMCwKKyAgICBCRkFfTVNJWF9NQk9YX0xQVTEgPSAyMSwKKyAgICBCRkFfTVNJWF9DQl9NQVggPSAyMiwKK307CisKKy8qCisgKiBBbmQgY29ycmVzcG9uZGluZyBob3N0IGludGVycnVwdCBzdGF0dXMgYml0IGZpZWxkIGRlZmluZXMKKyAqLworI2RlZmluZSBfX0hGTl9JTlRfQ1BFX1EwICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDFVCisjZGVmaW5lIF9fSEZOX0lOVF9DUEVfUTEgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMlUKKyNkZWZpbmUgX19IRk5fSU5UX0NQRV9RMiAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0VQorI2RlZmluZSBfX0hGTl9JTlRfQ1BFX1EzICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDhVCisjZGVmaW5lIF9fSEZOX0lOVF9DUEVfUTQgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMFUKKyNkZWZpbmUgX19IRk5fSU5UX0NQRV9RNSAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwVQorI2RlZmluZSBfX0hGTl9JTlRfQ1BFX1E2ICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDBVCisjZGVmaW5lIF9fSEZOX0lOVF9DUEVfUTcgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MFUKKyNkZWZpbmUgX19IRk5fSU5UX1JNRV9RMCAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwVQorI2RlZmluZSBfX0hGTl9JTlRfUk1FX1ExICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDBVCisjZGVmaW5lIF9fSEZOX0lOVF9STUVfUTIgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMFUKKyNkZWZpbmUgX19IRk5fSU5UX1JNRV9RMyAgICAgICAgICAgICAgICAgICAweDAwMDAwODAwVQorI2RlZmluZSBfX0hGTl9JTlRfUk1FX1E0ICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDBVCisjZGVmaW5lIF9fSEZOX0lOVF9STUVfUTUgICAgICAgICAgICAgICAgICAgMHgwMDAwMjAwMFUKKyNkZWZpbmUgX19IRk5fSU5UX1JNRV9RNiAgICAgICAgICAgICAgICAgICAweDAwMDA0MDAwVQorI2RlZmluZSBfX0hGTl9JTlRfUk1FX1E3ICAgICAgICAgICAgICAgICAgIDB4MDAwMDgwMDBVCisjZGVmaW5lIF9fSEZOX0lOVF9FUlJfRU1DICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMFUKKyNkZWZpbmUgX19IRk5fSU5UX0VSUl9MUFUwICAgICAgICAgICAgICAgICAweDAwMDIwMDAwVQorI2RlZmluZSBfX0hGTl9JTlRfRVJSX0xQVTEgICAgICAgICAgICAgICAgIDB4MDAwNDAwMDBVCisjZGVmaW5lIF9fSEZOX0lOVF9FUlJfUFNTICAgICAgICAgICAgICAgICAgMHgwMDA4MDAwMFUKKyNkZWZpbmUgX19IRk5fSU5UX01CT1hfTFBVMCAgICAgICAgICAgICAgICAweDAwMTAwMDAwVQorI2RlZmluZSBfX0hGTl9JTlRfTUJPWF9MUFUxICAgICAgICAgICAgICAgIDB4MDAyMDAwMDBVCisjZGVmaW5lIF9fSEZOX0lOVF9NQk9YMV9MUFUwICAgICAgICAgICAgICAgMHgwMDQwMDAwMFUKKyNkZWZpbmUgX19IRk5fSU5UX01CT1gxX0xQVTEgICAgICAgICAgICAgICAweDAwODAwMDAwVQorI2RlZmluZSBfX0hGTl9JTlRfQ1BFX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwMDAwZmZVCisjZGVmaW5lIF9fSEZOX0lOVF9STUVfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDAwZmYwMFUKKworCisvKgorICogY3Jvc3Nib3cgbWVtb3J5IG1hcC4KKyAqLworI2RlZmluZSBQU1NfU01FTV9QQUdFX1NUQVJUCTB4ODAwMAorI2RlZmluZSBQU1NfU01FTV9QR05VTShfcGcwLCBfbWEpCSgoX3BnMCkgKyAoKF9tYSkgPj4gMTUpKQorI2RlZmluZSBQU1NfU01FTV9QR09GRihfbWEpCSgoX21hKSAmIDB4N2ZmZikKKworLyoKKyAqIEVuZCBvZiBjcm9zc2JvdyBtZW1vcnkgbWFwCisgKi8KKworCisjZW5kaWYgLyogX19CRklfQ0JSRUdfSF9fICovCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9iZmkvYmZpX2NlZS5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2JmaS9iZmlfY2VlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDk3MDU5NgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9iZmkvYmZpX2NlZS5oCkBAIC0wLDAgKzEsMTE5IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisvKioKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBiZmlfZGNieC5oIEJGSSBJbnRlcmZhY2UgKE1haWxib3ggY29tbWFuZHMgYW5kIHJlbGF0ZWQgc3RydWN0dXJlcykKKyAqIGJldHdlZW4gaG9zdCBkcml2ZXIgYW5kIERDQlgvTExEUCBmaXJtd2FyZSBtb2R1bGUuCisgKgorKiovCisKKyNpZm5kZWYgX19CRklfQ0VFX0hfXworI2RlZmluZSBfX0JGSV9DRUVfSF9fCisKKyNpbmNsdWRlIDxiZmkvYmZpLmg+CisKKyNwcmFnbWEgcGFjaygxKQorCisKK2VudW0gYmZpX2NlZV9oMmlfbXNnc19lIHsKKwlCRklfQ0VFX0gySV9HRVRfQ0ZHX1JFUSA9IDEsCisJQkZJX0NFRV9IMklfUkVTRVRfU1RBVFMgPSAyLAorCUJGSV9DRUVfSDJJX0dFVF9TVEFUU19SRVEgPSAzLAorfTsKKworCitlbnVtIGJmaV9jZWVfaTJoX21zZ3NfZSB7CisJQkZJX0NFRV9JMkhfR0VUX0NGR19SU1AgPSBCRkFfSTJITSgxKSwKKwlCRklfQ0VFX0kySF9SRVNFVF9TVEFUU19SU1AgPSBCRkFfSTJITSgyKSwKKwlCRklfQ0VFX0kySF9HRVRfU1RBVFNfUlNQID0gQkZBX0kySE0oMyksCit9OworCisKKy8qIERhdGEgc3RydWN0dXJlcyAqLworCisvKgorICogQkZJX0NFRV9IMklfUkVTRVRfU1RBVFMKKyAqLworc3RydWN0IGJmaV9sbGRwX3Jlc2V0X3N0YXRzX3MgeworCXN0cnVjdCBiZmlfbWhkcl9zICBtaDsKK307CisKKy8qCisgKiBCRklfQ0VFX0gySV9SRVNFVF9TVEFUUworICovCitzdHJ1Y3QgYmZpX2NlZV9yZXNldF9zdGF0c19zIHsKKwlzdHJ1Y3QgYmZpX21oZHJfcyAgbWg7Cit9OworCisvKgorICogQkZJX0NFRV9IMklfR0VUX0NGR19SRVEKKyAqLworc3RydWN0IGJmaV9jZWVfZ2V0X3JlcV9zIHsKKwlzdHJ1Y3QgYmZpX21oZHJfcyAgbWg7CisJdW5pb24gYmZpX2FkZHJfdSAgIGRtYV9hZGRyOworfTsKKworCisvKgorICogQkZJX0NFRV9JMkhfR0VUX0NGR19SU1AKKyAqLworc3RydWN0IGJmaV9jZWVfZ2V0X3JzcF9zIHsKKwlzdHJ1Y3QgYmZpX21oZHJfcyAgbWg7CisJdTggICAgICAgICAgICBjbWRfc3RhdHVzOworCXU4ICAgICAgICAgICAgcnN2ZFszXTsKK307CisKKy8qCisgKiBCRklfQ0VFX0gySV9HRVRfU1RBVFNfUkVRCisgKi8KK3N0cnVjdCBiZmlfY2VlX3N0YXRzX3JlcV9zIHsKKwlzdHJ1Y3QgYmZpX21oZHJfcyAgbWg7CisJdW5pb24gYmZpX2FkZHJfdSAgIGRtYV9hZGRyOworfTsKKworCisvKgorICogQkZJX0NFRV9JMkhfR0VUX1NUQVRTX1JTUAorICovCitzdHJ1Y3QgYmZpX2NlZV9zdGF0c19yc3BfcyB7CisJc3RydWN0IGJmaV9taGRyX3MgIG1oOworCXU4IAkJICAgY21kX3N0YXR1czsKKwl1OCAJCSAgIHJzdmRbM107Cit9OworCisKKwordW5pb24gYmZpX2NlZV9oMmlfbXNnX3UgeworCXN0cnVjdCBiZmlfbWhkcl9zICAgICAgICAgICBtaDsKKwlzdHJ1Y3QgYmZpX2NlZV9nZXRfcmVxX3MgICBnZXRfcmVxOworCXN0cnVjdCBiZmlfY2VlX3N0YXRzX3JlcV9zIHN0YXRzX3JlcTsKK307CisKKwordW5pb24gYmZpX2NlZV9pMmhfbXNnX3UgeworCXN0cnVjdCBiZmlfbWhkcl9zICAgICAgICAgbWg7CisJc3RydWN0IGJmaV9jZWVfZ2V0X3JzcF9zICBnZXRfcnNwOworCXN0cnVjdCBiZmlfY2VlX3N0YXRzX3JzcF9zIHN0YXRzX3JzcDsKK307CisKKyNwcmFnbWEgcGFjaygpCisKKworI2VuZGlmIC8qIF9fQkZJX0NFRV9IX18gKi8KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2JmaS9iZmlfY3RyZWcuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9iZmkvYmZpX2N0cmVnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDNjYWE1OAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9iZmkvYmZpX2N0cmVnLmgKQEAgLTAsMCArMSw2MTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworLyoKKyAqIGJmaV9jdHJlZy5oIGNhdGFwdWx0IGhvc3QgYmxvY2sgcmVnaXN0ZXIgZGVmaW5pdGlvbnMKKyAqCisgKiAhISEgRG8gbm90IGVkaXQuIEF1dG8gZ2VuZXJhdGVkLiAhISEKKyAqLworCisjaWZuZGVmIF9fQkZJX0NUUkVHX0hfXworI2RlZmluZSBfX0JGSV9DVFJFR19IX18KKworCisjZGVmaW5lIEhPU1RGTjBfTFBVX01CT1gwXzAgICAgICAgICAgICAgIDB4MDAwMTkyMDAKKyNkZWZpbmUgSE9TVEZOMV9MUFVfTUJPWDBfOCAgICAgICAgICAgICAgMHgwMDAxOTI2MAorI2RlZmluZSBMUFVfSE9TVEZOMF9NQk9YMF8wICAgICAgICAgICAgICAweDAwMDE5MjgwCisjZGVmaW5lIExQVV9IT1NURk4xX01CT1gwXzggICAgICAgICAgICAgIDB4MDAwMTkyZTAKKyNkZWZpbmUgSE9TVEZOMl9MUFVfTUJPWDBfMCAgICAgICAgICAgICAgMHgwMDAxOTQwMAorI2RlZmluZSBIT1NURk4zX0xQVV9NQk9YMF84ICAgICAgICAgICAgICAweDAwMDE5NDYwCisjZGVmaW5lIExQVV9IT1NURk4yX01CT1gwXzAgICAgICAgICAgICAgIDB4MDAwMTk0ODAKKyNkZWZpbmUgTFBVX0hPU1RGTjNfTUJPWDBfOCAgICAgICAgICAgICAgMHgwMDAxOTRlMAorI2RlZmluZSBIT1NURk4wX0lOVF9TVEFUVVMgICAgICAgICAgICAgICAweDAwMDE0MDAwCisjZGVmaW5lIF9fSE9TVEZOMF9IQUxUX09DQ1VSUkVEICAgICAgICAgIDB4MDEwMDAwMDAKKyNkZWZpbmUgX19IT1NURk4wX0lOVF9TVEFUVVNfTFZMX01LICAgICAgMHgwMGYwMDAwMAorI2RlZmluZSBfX0hPU1RGTjBfSU5UX1NUQVRVU19MVkxfU0ggICAgICAyMAorI2RlZmluZSBfX0hPU1RGTjBfSU5UX1NUQVRVU19MVkwoX3YpICAgICAoKF92KSA8PCBfX0hPU1RGTjBfSU5UX1NUQVRVU19MVkxfU0gpCisjZGVmaW5lIF9fSE9TVEZOMF9JTlRfU1RBVFVTX1BfTUsgICAgICAgIDB4MDAwZjAwMDAKKyNkZWZpbmUgX19IT1NURk4wX0lOVF9TVEFUVVNfUF9TSCAgICAgICAgMTYKKyNkZWZpbmUgX19IT1NURk4wX0lOVF9TVEFUVVNfUChfdikgICAgICAgKChfdikgPDwgX19IT1NURk4wX0lOVF9TVEFUVVNfUF9TSCkKKyNkZWZpbmUgX19IT1NURk4wX0lOVF9TVEFUVVNfRiAgICAgICAgICAgMHgwMDAwZmZmZgorI2RlZmluZSBIT1NURk4wX0lOVF9NU0sgICAgICAgICAgICAgICAgICAweDAwMDE0MDA0CisjZGVmaW5lIEhPU1RfUEFHRV9OVU1fRk4wICAgICAgICAgICAgICAgIDB4MDAwMTQwMDgKKyNkZWZpbmUgX19IT1NUX1BBR0VfTlVNX0ZOICAgICAgICAgICAgICAgMHgwMDAwMDFmZgorI2RlZmluZSBIT1NUX01TSVhfRVJSX0lOREVYX0ZOMCAgICAgICAgICAweDAwMDE0MDBjCisjZGVmaW5lIF9fTVNJWF9FUlJfSU5ERVhfRk4gICAgICAgICAgICAgIDB4MDAwMDAxZmYKKyNkZWZpbmUgSE9TVEZOMV9JTlRfU1RBVFVTICAgICAgICAgICAgICAgMHgwMDAxNDEwMAorI2RlZmluZSBfX0hPU1RGTjFfSEFMVF9PQ0NVUlJFRCAgICAgICAgICAweDAxMDAwMDAwCisjZGVmaW5lIF9fSE9TVEZOMV9JTlRfU1RBVFVTX0xWTF9NSyAgICAgIDB4MDBmMDAwMDAKKyNkZWZpbmUgX19IT1NURk4xX0lOVF9TVEFUVVNfTFZMX1NIICAgICAgMjAKKyNkZWZpbmUgX19IT1NURk4xX0lOVF9TVEFUVVNfTFZMKF92KSAgICAgKChfdikgPDwgX19IT1NURk4xX0lOVF9TVEFUVVNfTFZMX1NIKQorI2RlZmluZSBfX0hPU1RGTjFfSU5UX1NUQVRVU19QX01LICAgICAgICAweDAwMGYwMDAwCisjZGVmaW5lIF9fSE9TVEZOMV9JTlRfU1RBVFVTX1BfU0ggICAgICAgIDE2CisjZGVmaW5lIF9fSE9TVEZOMV9JTlRfU1RBVFVTX1AoX3YpICAgICAgICgoX3YpIDw8IF9fSE9TVEZOMV9JTlRfU1RBVFVTX1BfU0gpCisjZGVmaW5lIF9fSE9TVEZOMV9JTlRfU1RBVFVTX0YgICAgICAgICAgIDB4MDAwMGZmZmYKKyNkZWZpbmUgSE9TVEZOMV9JTlRfTVNLICAgICAgICAgICAgICAgICAgMHgwMDAxNDEwNAorI2RlZmluZSBIT1NUX1BBR0VfTlVNX0ZOMSAgICAgICAgICAgICAgICAweDAwMDE0MTA4CisjZGVmaW5lIEhPU1RfTVNJWF9FUlJfSU5ERVhfRk4xICAgICAgICAgIDB4MDAwMTQxMGMKKyNkZWZpbmUgQVBQX1BMTF80MjVfQ1RMX1JFRyAgICAgICAgICAgICAgMHgwMDAxNDIwNAorI2RlZmluZSBfX1BfNDI1X1BMTF9MT0NLICAgICAgICAgICAgICAgICAweDgwMDAwMDAwCisjZGVmaW5lIF9fQVBQX1BMTF80MjVfU1JBTV9VU0VfMTAwTUhaICAgIDB4MDAxMDAwMDAKKyNkZWZpbmUgX19BUFBfUExMXzQyNV9SRVNFVF9USU1FUl9NSyAgICAgMHgwMDBlMDAwMAorI2RlZmluZSBfX0FQUF9QTExfNDI1X1JFU0VUX1RJTUVSX1NIICAgICAxNworI2RlZmluZSBfX0FQUF9QTExfNDI1X1JFU0VUX1RJTUVSKF92KSAgICAoKF92KSA8PCBfX0FQUF9QTExfNDI1X1JFU0VUX1RJTUVSX1NIKQorI2RlZmluZSBfX0FQUF9QTExfNDI1X0xPR0lDX1NPRlRfUkVTRVQgICAweDAwMDEwMDAwCisjZGVmaW5lIF9fQVBQX1BMTF80MjVfQ05UTE1UMF8xX01LICAgICAgIDB4MDAwMGMwMDAKKyNkZWZpbmUgX19BUFBfUExMXzQyNV9DTlRMTVQwXzFfU0ggICAgICAgMTQKKyNkZWZpbmUgX19BUFBfUExMXzQyNV9DTlRMTVQwXzEoX3YpICAgICAgKChfdikgPDwgX19BUFBfUExMXzQyNV9DTlRMTVQwXzFfU0gpCisjZGVmaW5lIF9fQVBQX1BMTF80MjVfSklUTE1UMF8xX01LICAgICAgIDB4MDAwMDMwMDAKKyNkZWZpbmUgX19BUFBfUExMXzQyNV9KSVRMTVQwXzFfU0ggICAgICAgMTIKKyNkZWZpbmUgX19BUFBfUExMXzQyNV9KSVRMTVQwXzEoX3YpICAgICAgKChfdikgPDwgX19BUFBfUExMXzQyNV9KSVRMTVQwXzFfU0gpCisjZGVmaW5lIF9fQVBQX1BMTF80MjVfSFJFRiAgICAgICAgICAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgX19BUFBfUExMXzQyNV9IRElWICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBfX0FQUF9QTExfNDI1X1AwXzFfTUsgICAgICAgICAgICAweDAwMDAwMzAwCisjZGVmaW5lIF9fQVBQX1BMTF80MjVfUDBfMV9TSCAgICAgICAgICAgIDgKKyNkZWZpbmUgX19BUFBfUExMXzQyNV9QMF8xKF92KSAgICAgICAgICAgKChfdikgPDwgX19BUFBfUExMXzQyNV9QMF8xX1NIKQorI2RlZmluZSBfX0FQUF9QTExfNDI1X1owXzJfTUsgICAgICAgICAgICAweDAwMDAwMGUwCisjZGVmaW5lIF9fQVBQX1BMTF80MjVfWjBfMl9TSCAgICAgICAgICAgIDUKKyNkZWZpbmUgX19BUFBfUExMXzQyNV9aMF8yKF92KSAgICAgICAgICAgKChfdikgPDwgX19BUFBfUExMXzQyNV9aMF8yX1NIKQorI2RlZmluZSBfX0FQUF9QTExfNDI1X1JTRUwyMDA1MDAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIF9fQVBQX1BMTF80MjVfRU5BUlNUICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgX19BUFBfUExMXzQyNV9CWVBBU1MgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBfX0FQUF9QTExfNDI1X0xSRVNFVE4gICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIF9fQVBQX1BMTF80MjVfRU5BQkxFICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQVBQX1BMTF8zMTJfQ1RMX1JFRyAgICAgICAgICAgICAgMHgwMDAxNDIwOAorI2RlZmluZSBfX1BfMzEyX1BMTF9MT0NLICAgICAgICAgICAgICAgICAweDgwMDAwMDAwCisjZGVmaW5lIF9fRU5BQkxFX01BQ19BSEJfMSAgICAgICAgICAgICAgIDB4MDA4MDAwMDAKKyNkZWZpbmUgX19FTkFCTEVfTUFDX0FIQl8wICAgICAgICAgICAgICAgMHgwMDQwMDAwMAorI2RlZmluZSBfX0VOQUJMRV9NQUNfMSAgICAgICAgICAgICAgICAgICAweDAwMjAwMDAwCisjZGVmaW5lIF9fRU5BQkxFX01BQ18wICAgICAgICAgICAgICAgICAgIDB4MDAxMDAwMDAKKyNkZWZpbmUgX19BUFBfUExMXzMxMl9SRVNFVF9USU1FUl9NSyAgICAgMHgwMDBlMDAwMAorI2RlZmluZSBfX0FQUF9QTExfMzEyX1JFU0VUX1RJTUVSX1NIICAgICAxNworI2RlZmluZSBfX0FQUF9QTExfMzEyX1JFU0VUX1RJTUVSKF92KSAgICAoKF92KSA8PCBfX0FQUF9QTExfMzEyX1JFU0VUX1RJTUVSX1NIKQorI2RlZmluZSBfX0FQUF9QTExfMzEyX0xPR0lDX1NPRlRfUkVTRVQgICAweDAwMDEwMDAwCisjZGVmaW5lIF9fQVBQX1BMTF8zMTJfQ05UTE1UMF8xX01LICAgICAgIDB4MDAwMGMwMDAKKyNkZWZpbmUgX19BUFBfUExMXzMxMl9DTlRMTVQwXzFfU0ggICAgICAgMTQKKyNkZWZpbmUgX19BUFBfUExMXzMxMl9DTlRMTVQwXzEoX3YpICAgICAgKChfdikgPDwgX19BUFBfUExMXzMxMl9DTlRMTVQwXzFfU0gpCisjZGVmaW5lIF9fQVBQX1BMTF8zMTJfSklUTE1UMF8xX01LICAgICAgIDB4MDAwMDMwMDAKKyNkZWZpbmUgX19BUFBfUExMXzMxMl9KSVRMTVQwXzFfU0ggICAgICAgMTIKKyNkZWZpbmUgX19BUFBfUExMXzMxMl9KSVRMTVQwXzEoX3YpICAgICAgKChfdikgPDwgX19BUFBfUExMXzMxMl9KSVRMTVQwXzFfU0gpCisjZGVmaW5lIF9fQVBQX1BMTF8zMTJfSFJFRiAgICAgICAgICAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgX19BUFBfUExMXzMxMl9IRElWICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBfX0FQUF9QTExfMzEyX1AwXzFfTUsgICAgICAgICAgICAweDAwMDAwMzAwCisjZGVmaW5lIF9fQVBQX1BMTF8zMTJfUDBfMV9TSCAgICAgICAgICAgIDgKKyNkZWZpbmUgX19BUFBfUExMXzMxMl9QMF8xKF92KSAgICAgICAgICAgKChfdikgPDwgX19BUFBfUExMXzMxMl9QMF8xX1NIKQorI2RlZmluZSBfX0FQUF9QTExfMzEyX1owXzJfTUsgICAgICAgICAgICAweDAwMDAwMGUwCisjZGVmaW5lIF9fQVBQX1BMTF8zMTJfWjBfMl9TSCAgICAgICAgICAgIDUKKyNkZWZpbmUgX19BUFBfUExMXzMxMl9aMF8yKF92KSAgICAgICAgICAgKChfdikgPDwgX19BUFBfUExMXzMxMl9aMF8yX1NIKQorI2RlZmluZSBfX0FQUF9QTExfMzEyX1JTRUwyMDA1MDAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIF9fQVBQX1BMTF8zMTJfRU5BUlNUICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgX19BUFBfUExMXzMxMl9CWVBBU1MgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBfX0FQUF9QTExfMzEyX0xSRVNFVE4gICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIF9fQVBQX1BMTF8zMTJfRU5BQkxFICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgTUJJU1RfQ1RMX1JFRyAgICAgICAgICAgICAgICAgICAgMHgwMDAxNDIyMAorI2RlZmluZSBfX0VEUkFNX0JJU1RSX1NUQVJUICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIF9fTUJJU1RfUkVTRVQgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgX19NQklTVF9TVEFSVCAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBNQklTVF9TVEFUX1JFRyAgICAgICAgICAgICAgICAgICAweDAwMDE0MjI0CisjZGVmaW5lIF9fRURSQU1fQklTVFJfU1RBVFVTICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgX19FRFJBTV9CSVNUUl9ET05FICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBfX01FTV9CSVRfU1RBVFVTICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIF9fTUJJU1RfRE9ORSAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgSE9TVF9TRU0wX1JFRyAgICAgICAgICAgICAgICAgICAgMHgwMDAxNDIzMAorI2RlZmluZSBfX0hPU1RfU0VNQVBIT1JFICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEhPU1RfU0VNMV9SRUcgICAgICAgICAgICAgICAgICAgIDB4MDAwMTQyMzQKKyNkZWZpbmUgSE9TVF9TRU0yX1JFRyAgICAgICAgICAgICAgICAgICAgMHgwMDAxNDIzOAorI2RlZmluZSBIT1NUX1NFTTNfUkVHICAgICAgICAgICAgICAgICAgICAweDAwMDE0MjNjCisjZGVmaW5lIEhPU1RfU0VNMF9JTkZPX1JFRyAgICAgICAgICAgICAgIDB4MDAwMTQyNDAKKyNkZWZpbmUgSE9TVF9TRU0xX0lORk9fUkVHICAgICAgICAgICAgICAgMHgwMDAxNDI0NAorI2RlZmluZSBIT1NUX1NFTTJfSU5GT19SRUcgICAgICAgICAgICAgICAweDAwMDE0MjQ4CisjZGVmaW5lIEhPU1RfU0VNM19JTkZPX1JFRyAgICAgICAgICAgICAgIDB4MDAwMTQyNGMKKyNkZWZpbmUgRVRIX01BQ19TRVJfUkVHICAgICAgICAgICAgICAgICAgMHgwMDAxNDI4OAorI2RlZmluZSBfX0FQUF9FTVNfQ0tCVUZBTVBJTiAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIF9fQVBQX0VNU19SRUZDTEtTRUwgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgX19BUFBfRU1TX0NNTENLU0VMICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBfX0FQUF9FTVNfUkVGQ0tCVUZFTjIgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIF9fQVBQX0VNU19SRUZDS0JVRkVOMSAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgX19BUFBfRU1TX0NIQU5ORUxfU0VMICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBIT1NURk4yX0lOVF9TVEFUVVMgICAgICAgICAgICAgICAweDAwMDE0MzAwCisjZGVmaW5lIF9fSE9TVEZOMl9IQUxUX09DQ1VSUkVEICAgICAgICAgIDB4MDEwMDAwMDAKKyNkZWZpbmUgX19IT1NURk4yX0lOVF9TVEFUVVNfTFZMX01LICAgICAgMHgwMGYwMDAwMAorI2RlZmluZSBfX0hPU1RGTjJfSU5UX1NUQVRVU19MVkxfU0ggICAgICAyMAorI2RlZmluZSBfX0hPU1RGTjJfSU5UX1NUQVRVU19MVkwoX3YpICAgICAoKF92KSA8PCBfX0hPU1RGTjJfSU5UX1NUQVRVU19MVkxfU0gpCisjZGVmaW5lIF9fSE9TVEZOMl9JTlRfU1RBVFVTX1BfTUsgICAgICAgIDB4MDAwZjAwMDAKKyNkZWZpbmUgX19IT1NURk4yX0lOVF9TVEFUVVNfUF9TSCAgICAgICAgMTYKKyNkZWZpbmUgX19IT1NURk4yX0lOVF9TVEFUVVNfUChfdikgICAgICAgKChfdikgPDwgX19IT1NURk4yX0lOVF9TVEFUVVNfUF9TSCkKKyNkZWZpbmUgX19IT1NURk4yX0lOVF9TVEFUVVNfRiAgICAgICAgICAgMHgwMDAwZmZmZgorI2RlZmluZSBIT1NURk4yX0lOVF9NU0sgICAgICAgICAgICAgICAgICAweDAwMDE0MzA0CisjZGVmaW5lIEhPU1RfUEFHRV9OVU1fRk4yICAgICAgICAgICAgICAgIDB4MDAwMTQzMDgKKyNkZWZpbmUgSE9TVF9NU0lYX0VSUl9JTkRFWF9GTjIgICAgICAgICAgMHgwMDAxNDMwYworI2RlZmluZSBIT1NURk4zX0lOVF9TVEFUVVMgICAgICAgICAgICAgICAweDAwMDE0NDAwCisjZGVmaW5lIF9fSEFMVF9PQ0NVUlJFRCAgICAgICAgICAgICAgICAgIDB4MDEwMDAwMDAKKyNkZWZpbmUgX19IT1NURk4zX0lOVF9TVEFUVVNfTFZMX01LICAgICAgMHgwMGYwMDAwMAorI2RlZmluZSBfX0hPU1RGTjNfSU5UX1NUQVRVU19MVkxfU0ggICAgICAyMAorI2RlZmluZSBfX0hPU1RGTjNfSU5UX1NUQVRVU19MVkwoX3YpICAgICAoKF92KSA8PCBfX0hPU1RGTjNfSU5UX1NUQVRVU19MVkxfU0gpCisjZGVmaW5lIF9fSE9TVEZOM19JTlRfU1RBVFVTX1BfTUsgICAgICAgIDB4MDAwZjAwMDAKKyNkZWZpbmUgX19IT1NURk4zX0lOVF9TVEFUVVNfUF9TSCAgICAgICAgMTYKKyNkZWZpbmUgX19IT1NURk4zX0lOVF9TVEFUVVNfUChfdikgICAgICAgKChfdikgPDwgX19IT1NURk4zX0lOVF9TVEFUVVNfUF9TSCkKKyNkZWZpbmUgX19IT1NURk4zX0lOVF9TVEFUVVNfRiAgICAgICAgICAgMHgwMDAwZmZmZgorI2RlZmluZSBIT1NURk4zX0lOVF9NU0sgICAgICAgICAgICAgICAgICAweDAwMDE0NDA0CisjZGVmaW5lIEhPU1RfUEFHRV9OVU1fRk4zICAgICAgICAgICAgICAgIDB4MDAwMTQ0MDgKKyNkZWZpbmUgSE9TVF9NU0lYX0VSUl9JTkRFWF9GTjMgICAgICAgICAgMHgwMDAxNDQwYworI2RlZmluZSBGTkNfSURfUkVHICAgICAgICAgICAgICAgICAgICAgICAweDAwMDE0NjAwCisjZGVmaW5lIF9fRlVOQ1RJT05fTlVNQkVSICAgICAgICAgICAgICAgIDB4MDAwMDAwMDcKKyNkZWZpbmUgRk5DX1BFUlNfUkVHICAgICAgICAgICAgICAgICAgICAgMHgwMDAxNDYwNAorI2RlZmluZSBfX0YzX0ZVTkNUSU9OX0FDVElWRSAgICAgICAgICAgICAweDgwMDAwMDAwCisjZGVmaW5lIF9fRjNfRlVOQ1RJT05fTU9ERSAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgX19GM19QT1JUX01BUF9NSyAgICAgICAgICAgICAgICAgMHgzMDAwMDAwMAorI2RlZmluZSBfX0YzX1BPUlRfTUFQX1NIICAgICAgICAgICAgICAgICAyOAorI2RlZmluZSBfX0YzX1BPUlRfTUFQKF92KSAgICAgICAgICAgICAgICAoKF92KSA8PCBfX0YzX1BPUlRfTUFQX1NIKQorI2RlZmluZSBfX0YzX1ZNX01PREUgICAgICAgICAgICAgICAgICAgICAweDA4MDAwMDAwCisjZGVmaW5lIF9fRjNfSU5UWF9TVEFUVVNfTUsgICAgICAgICAgICAgIDB4MDcwMDAwMDAKKyNkZWZpbmUgX19GM19JTlRYX1NUQVRVU19TSCAgICAgICAgICAgICAgMjQKKyNkZWZpbmUgX19GM19JTlRYX1NUQVRVUyhfdikgICAgICAgICAgICAgKChfdikgPDwgX19GM19JTlRYX1NUQVRVU19TSCkKKyNkZWZpbmUgX19GMl9GVU5DVElPTl9BQ1RJVkUgICAgICAgICAgICAgMHgwMDgwMDAwMAorI2RlZmluZSBfX0YyX0ZVTkNUSU9OX01PREUgICAgICAgICAgICAgICAweDAwNDAwMDAwCisjZGVmaW5lIF9fRjJfUE9SVF9NQVBfTUsgICAgICAgICAgICAgICAgIDB4MDAzMDAwMDAKKyNkZWZpbmUgX19GMl9QT1JUX01BUF9TSCAgICAgICAgICAgICAgICAgMjAKKyNkZWZpbmUgX19GMl9QT1JUX01BUChfdikgICAgICAgICAgICAgICAgKChfdikgPDwgX19GMl9QT1JUX01BUF9TSCkKKyNkZWZpbmUgX19GMl9WTV9NT0RFICAgICAgICAgICAgICAgICAgICAgMHgwMDA4MDAwMAorI2RlZmluZSBfX0YyX0lOVFhfU1RBVFVTX01LICAgICAgICAgICAgICAweDAwMDcwMDAwCisjZGVmaW5lIF9fRjJfSU5UWF9TVEFUVVNfU0ggICAgICAgICAgICAgIDE2CisjZGVmaW5lIF9fRjJfSU5UWF9TVEFUVVMoX3YpICAgICAgICAgICAgICgoX3YpIDw8IF9fRjJfSU5UWF9TVEFUVVNfU0gpCisjZGVmaW5lIF9fRjFfRlVOQ1RJT05fQUNUSVZFICAgICAgICAgICAgIDB4MDAwMDgwMDAKKyNkZWZpbmUgX19GMV9GVU5DVElPTl9NT0RFICAgICAgICAgICAgICAgMHgwMDAwNDAwMAorI2RlZmluZSBfX0YxX1BPUlRfTUFQX01LICAgICAgICAgICAgICAgICAweDAwMDAzMDAwCisjZGVmaW5lIF9fRjFfUE9SVF9NQVBfU0ggICAgICAgICAgICAgICAgIDEyCisjZGVmaW5lIF9fRjFfUE9SVF9NQVAoX3YpICAgICAgICAgICAgICAgICgoX3YpIDw8IF9fRjFfUE9SVF9NQVBfU0gpCisjZGVmaW5lIF9fRjFfVk1fTU9ERSAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgX19GMV9JTlRYX1NUQVRVU19NSyAgICAgICAgICAgICAgMHgwMDAwMDcwMAorI2RlZmluZSBfX0YxX0lOVFhfU1RBVFVTX1NIICAgICAgICAgICAgICA4CisjZGVmaW5lIF9fRjFfSU5UWF9TVEFUVVMoX3YpICAgICAgICAgICAgICgoX3YpIDw8IF9fRjFfSU5UWF9TVEFUVVNfU0gpCisjZGVmaW5lIF9fRjBfRlVOQ1RJT05fQUNUSVZFICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgX19GMF9GVU5DVElPTl9NT0RFICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBfX0YwX1BPUlRfTUFQX01LICAgICAgICAgICAgICAgICAweDAwMDAwMDMwCisjZGVmaW5lIF9fRjBfUE9SVF9NQVBfU0ggICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgX19GMF9QT1JUX01BUChfdikgICAgICAgICAgICAgICAgKChfdikgPDwgX19GMF9QT1JUX01BUF9TSCkKKyNkZWZpbmUgX19GMF9WTV9NT0RFICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBfX0YwX0lOVFhfU1RBVFVTICAgICAgICAgICAgICAgICAweDAwMDAwMDA3CitlbnVtIHsKKyAgICBfX0YwX0lOVFhfU1RBVFVTX01TSVggICAgICAgICAgICA9IDB4MCwKKyAgICBfX0YwX0lOVFhfU1RBVFVTX0lOVEEgICAgICAgICAgICA9IDB4MSwKKyAgICBfX0YwX0lOVFhfU1RBVFVTX0lOVEIgICAgICAgICAgICA9IDB4MiwKKyAgICBfX0YwX0lOVFhfU1RBVFVTX0lOVEMgICAgICAgICAgICA9IDB4MywKKyAgICBfX0YwX0lOVFhfU1RBVFVTX0lOVEQgICAgICAgICAgICA9IDB4NCwKK307CisjZGVmaW5lIE9QX01PREUgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTQ2MGMKKyNkZWZpbmUgX19BUFBfRVRIX0NMS19MT1dTUEVFRCAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBfX0dMT0JBTF9DT1JFQ0xLX0hBTEZTUEVFRCAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIF9fR0xPQkFMX0ZDT0VfTU9ERSAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgSE9TVF9TRU00X1JFRyAgICAgICAgICAgICAgICAgICAgMHgwMDAxNDYxMAorI2RlZmluZSBIT1NUX1NFTTVfUkVHICAgICAgICAgICAgICAgICAgICAweDAwMDE0NjE0CisjZGVmaW5lIEhPU1RfU0VNNl9SRUcgICAgICAgICAgICAgICAgICAgIDB4MDAwMTQ2MTgKKyNkZWZpbmUgSE9TVF9TRU03X1JFRyAgICAgICAgICAgICAgICAgICAgMHgwMDAxNDYxYworI2RlZmluZSBIT1NUX1NFTTRfSU5GT19SRUcgICAgICAgICAgICAgICAweDAwMDE0NjIwCisjZGVmaW5lIEhPU1RfU0VNNV9JTkZPX1JFRyAgICAgICAgICAgICAgIDB4MDAwMTQ2MjQKKyNkZWZpbmUgSE9TVF9TRU02X0lORk9fUkVHICAgICAgICAgICAgICAgMHgwMDAxNDYyOAorI2RlZmluZSBIT1NUX1NFTTdfSU5GT19SRUcgICAgICAgICAgICAgICAweDAwMDE0NjJjCisjZGVmaW5lIEhPU1RGTjBfTFBVMF9NQk9YMF9DTURfU1RBVCAgICAgIDB4MDAwMTkwMDAKKyNkZWZpbmUgX19IT1NURk4wX0xQVTBfTUJPWDBfSU5GT19NSyAgICAgMHhmZmZmZmZmZQorI2RlZmluZSBfX0hPU1RGTjBfTFBVMF9NQk9YMF9JTkZPX1NIICAgICAxCisjZGVmaW5lIF9fSE9TVEZOMF9MUFUwX01CT1gwX0lORk8oX3YpICAgICgoX3YpIDw8IF9fSE9TVEZOMF9MUFUwX01CT1gwX0lORk9fU0gpCisjZGVmaW5lIF9fSE9TVEZOMF9MUFUwX01CT1gwX0NNRF9TVEFUVVMgIDB4MDAwMDAwMDEKKyNkZWZpbmUgSE9TVEZOMF9MUFUxX01CT1gwX0NNRF9TVEFUICAgICAgMHgwMDAxOTAwNAorI2RlZmluZSBfX0hPU1RGTjBfTFBVMV9NQk9YMF9JTkZPX01LICAgICAweGZmZmZmZmZlCisjZGVmaW5lIF9fSE9TVEZOMF9MUFUxX01CT1gwX0lORk9fU0ggICAgIDEKKyNkZWZpbmUgX19IT1NURk4wX0xQVTFfTUJPWDBfSU5GTyhfdikgICAgKChfdikgPDwgX19IT1NURk4wX0xQVTFfTUJPWDBfSU5GT19TSCkKKyNkZWZpbmUgX19IT1NURk4wX0xQVTFfTUJPWDBfQ01EX1NUQVRVUyAgMHgwMDAwMDAwMQorI2RlZmluZSBMUFUwX0hPU1RGTjBfTUJPWDBfQ01EX1NUQVQgICAgICAweDAwMDE5MDA4CisjZGVmaW5lIF9fTFBVMF9IT1NURk4wX01CT1gwX0lORk9fTUsgICAgIDB4ZmZmZmZmZmUKKyNkZWZpbmUgX19MUFUwX0hPU1RGTjBfTUJPWDBfSU5GT19TSCAgICAgMQorI2RlZmluZSBfX0xQVTBfSE9TVEZOMF9NQk9YMF9JTkZPKF92KSAgICAoKF92KSA8PCBfX0xQVTBfSE9TVEZOMF9NQk9YMF9JTkZPX1NIKQorI2RlZmluZSBfX0xQVTBfSE9TVEZOMF9NQk9YMF9DTURfU1RBVFVTICAweDAwMDAwMDAxCisjZGVmaW5lIExQVTFfSE9TVEZOMF9NQk9YMF9DTURfU1RBVCAgICAgIDB4MDAwMTkwMGMKKyNkZWZpbmUgX19MUFUxX0hPU1RGTjBfTUJPWDBfSU5GT19NSyAgICAgMHhmZmZmZmZmZQorI2RlZmluZSBfX0xQVTFfSE9TVEZOMF9NQk9YMF9JTkZPX1NIICAgICAxCisjZGVmaW5lIF9fTFBVMV9IT1NURk4wX01CT1gwX0lORk8oX3YpICAgICgoX3YpIDw8IF9fTFBVMV9IT1NURk4wX01CT1gwX0lORk9fU0gpCisjZGVmaW5lIF9fTFBVMV9IT1NURk4wX01CT1gwX0NNRF9TVEFUVVMgIDB4MDAwMDAwMDEKKyNkZWZpbmUgSE9TVEZOMV9MUFUwX01CT1gwX0NNRF9TVEFUICAgICAgMHgwMDAxOTAxMAorI2RlZmluZSBfX0hPU1RGTjFfTFBVMF9NQk9YMF9JTkZPX01LICAgICAweGZmZmZmZmZlCisjZGVmaW5lIF9fSE9TVEZOMV9MUFUwX01CT1gwX0lORk9fU0ggICAgIDEKKyNkZWZpbmUgX19IT1NURk4xX0xQVTBfTUJPWDBfSU5GTyhfdikgICAgKChfdikgPDwgX19IT1NURk4xX0xQVTBfTUJPWDBfSU5GT19TSCkKKyNkZWZpbmUgX19IT1NURk4xX0xQVTBfTUJPWDBfQ01EX1NUQVRVUyAgMHgwMDAwMDAwMQorI2RlZmluZSBIT1NURk4xX0xQVTFfTUJPWDBfQ01EX1NUQVQgICAgICAweDAwMDE5MDE0CisjZGVmaW5lIF9fSE9TVEZOMV9MUFUxX01CT1gwX0lORk9fTUsgICAgIDB4ZmZmZmZmZmUKKyNkZWZpbmUgX19IT1NURk4xX0xQVTFfTUJPWDBfSU5GT19TSCAgICAgMQorI2RlZmluZSBfX0hPU1RGTjFfTFBVMV9NQk9YMF9JTkZPKF92KSAgICAoKF92KSA8PCBfX0hPU1RGTjFfTFBVMV9NQk9YMF9JTkZPX1NIKQorI2RlZmluZSBfX0hPU1RGTjFfTFBVMV9NQk9YMF9DTURfU1RBVFVTICAweDAwMDAwMDAxCisjZGVmaW5lIExQVTBfSE9TVEZOMV9NQk9YMF9DTURfU1RBVCAgICAgIDB4MDAwMTkwMTgKKyNkZWZpbmUgX19MUFUwX0hPU1RGTjFfTUJPWDBfSU5GT19NSyAgICAgMHhmZmZmZmZmZQorI2RlZmluZSBfX0xQVTBfSE9TVEZOMV9NQk9YMF9JTkZPX1NIICAgICAxCisjZGVmaW5lIF9fTFBVMF9IT1NURk4xX01CT1gwX0lORk8oX3YpICAgICgoX3YpIDw8IF9fTFBVMF9IT1NURk4xX01CT1gwX0lORk9fU0gpCisjZGVmaW5lIF9fTFBVMF9IT1NURk4xX01CT1gwX0NNRF9TVEFUVVMgIDB4MDAwMDAwMDEKKyNkZWZpbmUgTFBVMV9IT1NURk4xX01CT1gwX0NNRF9TVEFUICAgICAgMHgwMDAxOTAxYworI2RlZmluZSBfX0xQVTFfSE9TVEZOMV9NQk9YMF9JTkZPX01LICAgICAweGZmZmZmZmZlCisjZGVmaW5lIF9fTFBVMV9IT1NURk4xX01CT1gwX0lORk9fU0ggICAgIDEKKyNkZWZpbmUgX19MUFUxX0hPU1RGTjFfTUJPWDBfSU5GTyhfdikgICAgKChfdikgPDwgX19MUFUxX0hPU1RGTjFfTUJPWDBfSU5GT19TSCkKKyNkZWZpbmUgX19MUFUxX0hPU1RGTjFfTUJPWDBfQ01EX1NUQVRVUyAgMHgwMDAwMDAwMQorI2RlZmluZSBIT1NURk4yX0xQVTBfTUJPWDBfQ01EX1NUQVQgICAgICAweDAwMDE5MTUwCisjZGVmaW5lIF9fSE9TVEZOMl9MUFUwX01CT1gwX0lORk9fTUsgICAgIDB4ZmZmZmZmZmUKKyNkZWZpbmUgX19IT1NURk4yX0xQVTBfTUJPWDBfSU5GT19TSCAgICAgMQorI2RlZmluZSBfX0hPU1RGTjJfTFBVMF9NQk9YMF9JTkZPKF92KSAgICAoKF92KSA8PCBfX0hPU1RGTjJfTFBVMF9NQk9YMF9JTkZPX1NIKQorI2RlZmluZSBfX0hPU1RGTjJfTFBVMF9NQk9YMF9DTURfU1RBVFVTICAweDAwMDAwMDAxCisjZGVmaW5lIEhPU1RGTjJfTFBVMV9NQk9YMF9DTURfU1RBVCAgICAgIDB4MDAwMTkxNTQKKyNkZWZpbmUgX19IT1NURk4yX0xQVTFfTUJPWDBfSU5GT19NSyAgICAgMHhmZmZmZmZmZQorI2RlZmluZSBfX0hPU1RGTjJfTFBVMV9NQk9YMF9JTkZPX1NIICAgICAxCisjZGVmaW5lIF9fSE9TVEZOMl9MUFUxX01CT1gwX0lORk8oX3YpICAgICgoX3YpIDw8IF9fSE9TVEZOMl9MUFUxX01CT1gwX0lORk9fU0gpCisjZGVmaW5lIF9fSE9TVEZOMl9MUFUxX01CT1gwQk9YMF9DTURfU1RBVFVTIDB4MDAwMDAwMDEKKyNkZWZpbmUgTFBVMF9IT1NURk4yX01CT1gwX0NNRF9TVEFUICAgICAgMHgwMDAxOTE1OAorI2RlZmluZSBfX0xQVTBfSE9TVEZOMl9NQk9YMF9JTkZPX01LICAgICAweGZmZmZmZmZlCisjZGVmaW5lIF9fTFBVMF9IT1NURk4yX01CT1gwX0lORk9fU0ggICAgIDEKKyNkZWZpbmUgX19MUFUwX0hPU1RGTjJfTUJPWDBfSU5GTyhfdikgICAgKChfdikgPDwgX19MUFUwX0hPU1RGTjJfTUJPWDBfSU5GT19TSCkKKyNkZWZpbmUgX19MUFUwX0hPU1RGTjJfTUJPWDBfQ01EX1NUQVRVUyAgMHgwMDAwMDAwMQorI2RlZmluZSBMUFUxX0hPU1RGTjJfTUJPWDBfQ01EX1NUQVQgICAgICAweDAwMDE5MTVjCisjZGVmaW5lIF9fTFBVMV9IT1NURk4yX01CT1gwX0lORk9fTUsgICAgIDB4ZmZmZmZmZmUKKyNkZWZpbmUgX19MUFUxX0hPU1RGTjJfTUJPWDBfSU5GT19TSCAgICAgMQorI2RlZmluZSBfX0xQVTFfSE9TVEZOMl9NQk9YMF9JTkZPKF92KSAgICAoKF92KSA8PCBfX0xQVTFfSE9TVEZOMl9NQk9YMF9JTkZPX1NIKQorI2RlZmluZSBfX0xQVTFfSE9TVEZOMl9NQk9YMF9DTURfU1RBVFVTICAweDAwMDAwMDAxCisjZGVmaW5lIEhPU1RGTjNfTFBVMF9NQk9YMF9DTURfU1RBVCAgICAgIDB4MDAwMTkxNjAKKyNkZWZpbmUgX19IT1NURk4zX0xQVTBfTUJPWDBfSU5GT19NSyAgICAgMHhmZmZmZmZmZQorI2RlZmluZSBfX0hPU1RGTjNfTFBVMF9NQk9YMF9JTkZPX1NIICAgICAxCisjZGVmaW5lIF9fSE9TVEZOM19MUFUwX01CT1gwX0lORk8oX3YpICAgICgoX3YpIDw8IF9fSE9TVEZOM19MUFUwX01CT1gwX0lORk9fU0gpCisjZGVmaW5lIF9fSE9TVEZOM19MUFUwX01CT1gwX0NNRF9TVEFUVVMgIDB4MDAwMDAwMDEKKyNkZWZpbmUgSE9TVEZOM19MUFUxX01CT1gwX0NNRF9TVEFUICAgICAgMHgwMDAxOTE2NAorI2RlZmluZSBfX0hPU1RGTjNfTFBVMV9NQk9YMF9JTkZPX01LICAgICAweGZmZmZmZmZlCisjZGVmaW5lIF9fSE9TVEZOM19MUFUxX01CT1gwX0lORk9fU0ggICAgIDEKKyNkZWZpbmUgX19IT1NURk4zX0xQVTFfTUJPWDBfSU5GTyhfdikgICAgKChfdikgPDwgX19IT1NURk4zX0xQVTFfTUJPWDBfSU5GT19TSCkKKyNkZWZpbmUgX19IT1NURk4zX0xQVTFfTUJPWDBfQ01EX1NUQVRVUyAgMHgwMDAwMDAwMQorI2RlZmluZSBMUFUwX0hPU1RGTjNfTUJPWDBfQ01EX1NUQVQgICAgICAweDAwMDE5MTY4CisjZGVmaW5lIF9fTFBVMF9IT1NURk4zX01CT1gwX0lORk9fTUsgICAgIDB4ZmZmZmZmZmUKKyNkZWZpbmUgX19MUFUwX0hPU1RGTjNfTUJPWDBfSU5GT19TSCAgICAgMQorI2RlZmluZSBfX0xQVTBfSE9TVEZOM19NQk9YMF9JTkZPKF92KSAgICAoKF92KSA8PCBfX0xQVTBfSE9TVEZOM19NQk9YMF9JTkZPX1NIKQorI2RlZmluZSBfX0xQVTBfSE9TVEZOM19NQk9YMF9DTURfU1RBVFVTICAweDAwMDAwMDAxCisjZGVmaW5lIExQVTFfSE9TVEZOM19NQk9YMF9DTURfU1RBVCAgICAgIDB4MDAwMTkxNmMKKyNkZWZpbmUgX19MUFUxX0hPU1RGTjNfTUJPWDBfSU5GT19NSyAgICAgMHhmZmZmZmZmZQorI2RlZmluZSBfX0xQVTFfSE9TVEZOM19NQk9YMF9JTkZPX1NIICAgICAxCisjZGVmaW5lIF9fTFBVMV9IT1NURk4zX01CT1gwX0lORk8oX3YpICAgICgoX3YpIDw8IF9fTFBVMV9IT1NURk4zX01CT1gwX0lORk9fU0gpCisjZGVmaW5lIF9fTFBVMV9IT1NURk4zX01CT1gwX0NNRF9TVEFUVVMgIDB4MDAwMDAwMDEKKyNkZWZpbmUgRldfSU5JVF9IQUxUX1AwICAgICAgICAgICAgICAgICAgMHgwMDAxOTFhYworI2RlZmluZSBfX0ZXX0lOSVRfSEFMVF9QICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEZXX0lOSVRfSEFMVF9QMSAgICAgICAgICAgICAgICAgIDB4MDAwMTkxYmMKKyNkZWZpbmUgQ1BFX1BJX1BUUl9RMCAgICAgICAgICAgICAgICAgICAgMHgwMDAzODAwMAorI2RlZmluZSBfX0NQRV9QSV9VTlVTRURfTUsgICAgICAgICAgICAgICAweGZmZmYwMDAwCisjZGVmaW5lIF9fQ1BFX1BJX1VOVVNFRF9TSCAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIF9fQ1BFX1BJX1VOVVNFRChfdikgICAgICAgICAgICAgICgoX3YpIDw8IF9fQ1BFX1BJX1VOVVNFRF9TSCkKKyNkZWZpbmUgX19DUEVfUElfUFRSICAgICAgICAgICAgICAgICAgICAgMHgwMDAwZmZmZgorI2RlZmluZSBDUEVfUElfUFRSX1ExICAgICAgICAgICAgICAgICAgICAweDAwMDM4MDQwCisjZGVmaW5lIENQRV9DSV9QVFJfUTAgICAgICAgICAgICAgICAgICAgIDB4MDAwMzgwMDQKKyNkZWZpbmUgX19DUEVfQ0lfVU5VU0VEX01LICAgICAgICAgICAgICAgMHhmZmZmMDAwMAorI2RlZmluZSBfX0NQRV9DSV9VTlVTRURfU0ggICAgICAgICAgICAgICAxNgorI2RlZmluZSBfX0NQRV9DSV9VTlVTRUQoX3YpICAgICAgICAgICAgICAoKF92KSA8PCBfX0NQRV9DSV9VTlVTRURfU0gpCisjZGVmaW5lIF9fQ1BFX0NJX1BUUiAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGZmZmYKKyNkZWZpbmUgQ1BFX0NJX1BUUl9RMSAgICAgICAgICAgICAgICAgICAgMHgwMDAzODA0NAorI2RlZmluZSBDUEVfREVQVEhfUTAgICAgICAgICAgICAgICAgICAgICAweDAwMDM4MDA4CisjZGVmaW5lIF9fQ1BFX0RFUFRIX1VOVVNFRF9NSyAgICAgICAgICAgIDB4ZjgwMDAwMDAKKyNkZWZpbmUgX19DUEVfREVQVEhfVU5VU0VEX1NIICAgICAgICAgICAgMjcKKyNkZWZpbmUgX19DUEVfREVQVEhfVU5VU0VEKF92KSAgICAgICAgICAgKChfdikgPDwgX19DUEVfREVQVEhfVU5VU0VEX1NIKQorI2RlZmluZSBfX0NQRV9NU0lYX1ZFQ19JTkRFWF9NSyAgICAgICAgICAweDA3ZmYwMDAwCisjZGVmaW5lIF9fQ1BFX01TSVhfVkVDX0lOREVYX1NIICAgICAgICAgIDE2CisjZGVmaW5lIF9fQ1BFX01TSVhfVkVDX0lOREVYKF92KSAgICAgICAgICgoX3YpIDw8IF9fQ1BFX01TSVhfVkVDX0lOREVYX1NIKQorI2RlZmluZSBfX0NQRV9ERVBUSCAgICAgICAgICAgICAgICAgICAgICAweDAwMDBmZmZmCisjZGVmaW5lIENQRV9ERVBUSF9RMSAgICAgICAgICAgICAgICAgICAgIDB4MDAwMzgwNDgKKyNkZWZpbmUgQ1BFX1FDVFJMX1EwICAgICAgICAgICAgICAgICAgICAgMHgwMDAzODAwYworI2RlZmluZSBfX0NQRV9DVFJMX1VOVVNFRDMwX01LICAgICAgICAgICAweGZjMDAwMDAwCisjZGVmaW5lIF9fQ1BFX0NUUkxfVU5VU0VEMzBfU0ggICAgICAgICAgIDI2CisjZGVmaW5lIF9fQ1BFX0NUUkxfVU5VU0VEMzAoX3YpICAgICAgICAgICgoX3YpIDw8IF9fQ1BFX0NUUkxfVU5VU0VEMzBfU0gpCisjZGVmaW5lIF9fQ1BFX0ZVTkNfSU5UX0NUUkxfTUsgICAgICAgICAgIDB4MDMwMDAwMDAKKyNkZWZpbmUgX19DUEVfRlVOQ19JTlRfQ1RSTF9TSCAgICAgICAgICAgMjQKKyNkZWZpbmUgX19DUEVfRlVOQ19JTlRfQ1RSTChfdikgICAgICAgICAgKChfdikgPDwgX19DUEVfRlVOQ19JTlRfQ1RSTF9TSCkKK2VudW0geworICAgIF9fQ1BFX0ZVTkNfSU5UX0NUUkxfRElTQUJMRSAgICAgID0gMHgwLAorICAgIF9fQ1BFX0ZVTkNfSU5UX0NUUkxfRjJORiAgICAgICAgID0gMHgxLAorICAgIF9fQ1BFX0ZVTkNfSU5UX0NUUkxfM1FVQVJUICAgICAgID0gMHgyLAorICAgIF9fQ1BFX0ZVTkNfSU5UX0NUUkxfSEFMRiAgICAgICAgID0gMHgzLAorfTsKKyNkZWZpbmUgX19DUEVfQ1RSTF9VTlVTRUQyMF9NSyAgICAgICAgICAgMHgwMGYwMDAwMAorI2RlZmluZSBfX0NQRV9DVFJMX1VOVVNFRDIwX1NIICAgICAgICAgICAyMAorI2RlZmluZSBfX0NQRV9DVFJMX1VOVVNFRDIwKF92KSAgICAgICAgICAoKF92KSA8PCBfX0NQRV9DVFJMX1VOVVNFRDIwX1NIKQorI2RlZmluZSBfX0NQRV9TQ0lfVEhfTUsgICAgICAgICAgICAgICAgICAweDAwMGYwMDAwCisjZGVmaW5lIF9fQ1BFX1NDSV9USF9TSCAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIF9fQ1BFX1NDSV9USChfdikgICAgICAgICAgICAgICAgICgoX3YpIDw8IF9fQ1BFX1NDSV9USF9TSCkKKyNkZWZpbmUgX19DUEVfQ1RSTF9VTlVTRUQxMF9NSyAgICAgICAgICAgMHgwMDAwYzAwMAorI2RlZmluZSBfX0NQRV9DVFJMX1VOVVNFRDEwX1NIICAgICAgICAgICAxNAorI2RlZmluZSBfX0NQRV9DVFJMX1VOVVNFRDEwKF92KSAgICAgICAgICAoKF92KSA8PCBfX0NQRV9DVFJMX1VOVVNFRDEwX1NIKQorI2RlZmluZSBfX0NQRV9BQ0tfUEVORElORyAgICAgICAgICAgICAgICAweDAwMDAyMDAwCisjZGVmaW5lIF9fQ1BFX0NUUkxfVU5VU0VENDBfTUsgICAgICAgICAgIDB4MDAwMDFjMDAKKyNkZWZpbmUgX19DUEVfQ1RSTF9VTlVTRUQ0MF9TSCAgICAgICAgICAgMTAKKyNkZWZpbmUgX19DUEVfQ1RSTF9VTlVTRUQ0MChfdikgICAgICAgICAgKChfdikgPDwgX19DUEVfQ1RSTF9VTlVTRUQ0MF9TSCkKKyNkZWZpbmUgX19DUEVfUENJRUlEX01LICAgICAgICAgICAgICAgICAgMHgwMDAwMDMwMAorI2RlZmluZSBfX0NQRV9QQ0lFSURfU0ggICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIF9fQ1BFX1BDSUVJRChfdikgICAgICAgICAgICAgICAgICgoX3YpIDw8IF9fQ1BFX1BDSUVJRF9TSCkKKyNkZWZpbmUgX19DUEVfQ1RSTF9VTlVTRUQwMF9NSyAgICAgICAgICAgMHgwMDAwMDBmZQorI2RlZmluZSBfX0NQRV9DVFJMX1VOVVNFRDAwX1NIICAgICAgICAgICAxCisjZGVmaW5lIF9fQ1BFX0NUUkxfVU5VU0VEMDAoX3YpICAgICAgICAgICgoX3YpIDw8IF9fQ1BFX0NUUkxfVU5VU0VEMDBfU0gpCisjZGVmaW5lIF9fQ1BFX0VTSVpFICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQ1BFX1FDVFJMX1ExICAgICAgICAgICAgICAgICAgICAgMHgwMDAzODA0YworI2RlZmluZSBfX0NQRV9DVFJMX1VOVVNFRDMxX01LICAgICAgICAgICAweGZjMDAwMDAwCisjZGVmaW5lIF9fQ1BFX0NUUkxfVU5VU0VEMzFfU0ggICAgICAgICAgIDI2CisjZGVmaW5lIF9fQ1BFX0NUUkxfVU5VU0VEMzEoX3YpICAgICAgICAgICgoX3YpIDw8IF9fQ1BFX0NUUkxfVU5VU0VEMzFfU0gpCisjZGVmaW5lIF9fQ1BFX0NUUkxfVU5VU0VEMjFfTUsgICAgICAgICAgIDB4MDBmMDAwMDAKKyNkZWZpbmUgX19DUEVfQ1RSTF9VTlVTRUQyMV9TSCAgICAgICAgICAgMjAKKyNkZWZpbmUgX19DUEVfQ1RSTF9VTlVTRUQyMShfdikgICAgICAgICAgKChfdikgPDwgX19DUEVfQ1RSTF9VTlVTRUQyMV9TSCkKKyNkZWZpbmUgX19DUEVfQ1RSTF9VTlVTRUQxMV9NSyAgICAgICAgICAgMHgwMDAwYzAwMAorI2RlZmluZSBfX0NQRV9DVFJMX1VOVVNFRDExX1NIICAgICAgICAgICAxNAorI2RlZmluZSBfX0NQRV9DVFJMX1VOVVNFRDExKF92KSAgICAgICAgICAoKF92KSA8PCBfX0NQRV9DVFJMX1VOVVNFRDExX1NIKQorI2RlZmluZSBfX0NQRV9DVFJMX1VOVVNFRDQxX01LICAgICAgICAgICAweDAwMDAxYzAwCisjZGVmaW5lIF9fQ1BFX0NUUkxfVU5VU0VENDFfU0ggICAgICAgICAgIDEwCisjZGVmaW5lIF9fQ1BFX0NUUkxfVU5VU0VENDEoX3YpICAgICAgICAgICgoX3YpIDw8IF9fQ1BFX0NUUkxfVU5VU0VENDFfU0gpCisjZGVmaW5lIF9fQ1BFX0NUUkxfVU5VU0VEMDFfTUsgICAgICAgICAgIDB4MDAwMDAwZmUKKyNkZWZpbmUgX19DUEVfQ1RSTF9VTlVTRUQwMV9TSCAgICAgICAgICAgMQorI2RlZmluZSBfX0NQRV9DVFJMX1VOVVNFRDAxKF92KSAgICAgICAgICAoKF92KSA8PCBfX0NQRV9DVFJMX1VOVVNFRDAxX1NIKQorI2RlZmluZSBSTUVfUElfUFRSX1EwICAgICAgICAgICAgICAgICAgICAweDAwMDM4MDIwCisjZGVmaW5lIF9fTEFURU5DWV9USU1FX1NUQU1QX01LICAgICAgICAgIDB4ZmZmZjAwMDAKKyNkZWZpbmUgX19MQVRFTkNZX1RJTUVfU1RBTVBfU0ggICAgICAgICAgMTYKKyNkZWZpbmUgX19MQVRFTkNZX1RJTUVfU1RBTVAoX3YpICAgICAgICAgKChfdikgPDwgX19MQVRFTkNZX1RJTUVfU1RBTVBfU0gpCisjZGVmaW5lIF9fUk1FX1BJX1BUUiAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGZmZmYKKyNkZWZpbmUgUk1FX1BJX1BUUl9RMSAgICAgICAgICAgICAgICAgICAgMHgwMDAzODA2MAorI2RlZmluZSBSTUVfQ0lfUFRSX1EwICAgICAgICAgICAgICAgICAgICAweDAwMDM4MDI0CisjZGVmaW5lIF9fREVMQVlfVElNRV9TVEFNUF9NSyAgICAgICAgICAgIDB4ZmZmZjAwMDAKKyNkZWZpbmUgX19ERUxBWV9USU1FX1NUQU1QX1NIICAgICAgICAgICAgMTYKKyNkZWZpbmUgX19ERUxBWV9USU1FX1NUQU1QKF92KSAgICAgICAgICAgKChfdikgPDwgX19ERUxBWV9USU1FX1NUQU1QX1NIKQorI2RlZmluZSBfX1JNRV9DSV9QVFIgICAgICAgICAgICAgICAgICAgICAweDAwMDBmZmZmCisjZGVmaW5lIFJNRV9DSV9QVFJfUTEgICAgICAgICAgICAgICAgICAgIDB4MDAwMzgwNjQKKyNkZWZpbmUgUk1FX0RFUFRIX1EwICAgICAgICAgICAgICAgICAgICAgMHgwMDAzODAyOAorI2RlZmluZSBfX1JNRV9ERVBUSF9VTlVTRURfTUsgICAgICAgICAgICAweGY4MDAwMDAwCisjZGVmaW5lIF9fUk1FX0RFUFRIX1VOVVNFRF9TSCAgICAgICAgICAgIDI3CisjZGVmaW5lIF9fUk1FX0RFUFRIX1VOVVNFRChfdikgICAgICAgICAgICgoX3YpIDw8IF9fUk1FX0RFUFRIX1VOVVNFRF9TSCkKKyNkZWZpbmUgX19STUVfTVNJWF9WRUNfSU5ERVhfTUsgICAgICAgICAgMHgwN2ZmMDAwMAorI2RlZmluZSBfX1JNRV9NU0lYX1ZFQ19JTkRFWF9TSCAgICAgICAgICAxNgorI2RlZmluZSBfX1JNRV9NU0lYX1ZFQ19JTkRFWChfdikgICAgICAgICAoKF92KSA8PCBfX1JNRV9NU0lYX1ZFQ19JTkRFWF9TSCkKKyNkZWZpbmUgX19STUVfREVQVEggICAgICAgICAgICAgICAgICAgICAgMHgwMDAwZmZmZgorI2RlZmluZSBSTUVfREVQVEhfUTEgICAgICAgICAgICAgICAgICAgICAweDAwMDM4MDY4CisjZGVmaW5lIFJNRV9RQ1RSTF9RMCAgICAgICAgICAgICAgICAgICAgIDB4MDAwMzgwMmMKKyNkZWZpbmUgX19STUVfSU5UX0xBVEVOQ1lfVElNRVJfTUsgICAgICAgMHhmZjAwMDAwMAorI2RlZmluZSBfX1JNRV9JTlRfTEFURU5DWV9USU1FUl9TSCAgICAgICAyNAorI2RlZmluZSBfX1JNRV9JTlRfTEFURU5DWV9USU1FUihfdikgICAgICAoKF92KSA8PCBfX1JNRV9JTlRfTEFURU5DWV9USU1FUl9TSCkKKyNkZWZpbmUgX19STUVfSU5UX0RFTEFZX1RJTUVSX01LICAgICAgICAgMHgwMGZmMDAwMAorI2RlZmluZSBfX1JNRV9JTlRfREVMQVlfVElNRVJfU0ggICAgICAgICAxNgorI2RlZmluZSBfX1JNRV9JTlRfREVMQVlfVElNRVIoX3YpICAgICAgICAoKF92KSA8PCBfX1JNRV9JTlRfREVMQVlfVElNRVJfU0gpCisjZGVmaW5lIF9fUk1FX0lOVF9ERUxBWV9ESVNBQkxFICAgICAgICAgIDB4MDAwMDgwMDAKKyNkZWZpbmUgX19STUVfRExZX0RFTEFZX0RJU0FCTEUgICAgICAgICAgMHgwMDAwNDAwMAorI2RlZmluZSBfX1JNRV9BQ0tfUEVORElORyAgICAgICAgICAgICAgICAweDAwMDAyMDAwCisjZGVmaW5lIF9fUk1FX0ZVTExfSU5URVJSVVBUX0RJU0FCTEUgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgX19STUVfQ1RSTF9VTlVTRUQxMF9NSyAgICAgICAgICAgMHgwMDAwMGMwMAorI2RlZmluZSBfX1JNRV9DVFJMX1VOVVNFRDEwX1NIICAgICAgICAgICAxMAorI2RlZmluZSBfX1JNRV9DVFJMX1VOVVNFRDEwKF92KSAgICAgICAgICAoKF92KSA8PCBfX1JNRV9DVFJMX1VOVVNFRDEwX1NIKQorI2RlZmluZSBfX1JNRV9QQ0lFSURfTUsgICAgICAgICAgICAgICAgICAweDAwMDAwMzAwCisjZGVmaW5lIF9fUk1FX1BDSUVJRF9TSCAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgX19STUVfUENJRUlEKF92KSAgICAgICAgICAgICAgICAgKChfdikgPDwgX19STUVfUENJRUlEX1NIKQorI2RlZmluZSBfX1JNRV9DVFJMX1VOVVNFRDAwX01LICAgICAgICAgICAweDAwMDAwMGZlCisjZGVmaW5lIF9fUk1FX0NUUkxfVU5VU0VEMDBfU0ggICAgICAgICAgIDEKKyNkZWZpbmUgX19STUVfQ1RSTF9VTlVTRUQwMChfdikgICAgICAgICAgKChfdikgPDwgX19STUVfQ1RSTF9VTlVTRUQwMF9TSCkKKyNkZWZpbmUgX19STUVfRVNJWkUgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBSTUVfUUNUUkxfUTEgICAgICAgICAgICAgICAgICAgICAweDAwMDM4MDZjCisjZGVmaW5lIF9fUk1FX0NUUkxfVU5VU0VEMTFfTUsgICAgICAgICAgIDB4MDAwMDBjMDAKKyNkZWZpbmUgX19STUVfQ1RSTF9VTlVTRUQxMV9TSCAgICAgICAgICAgMTAKKyNkZWZpbmUgX19STUVfQ1RSTF9VTlVTRUQxMShfdikgICAgICAgICAgKChfdikgPDwgX19STUVfQ1RSTF9VTlVTRUQxMV9TSCkKKyNkZWZpbmUgX19STUVfQ1RSTF9VTlVTRUQwMV9NSyAgICAgICAgICAgMHgwMDAwMDBmZQorI2RlZmluZSBfX1JNRV9DVFJMX1VOVVNFRDAxX1NIICAgICAgICAgICAxCisjZGVmaW5lIF9fUk1FX0NUUkxfVU5VU0VEMDEoX3YpICAgICAgICAgICgoX3YpIDw8IF9fUk1FX0NUUkxfVU5VU0VEMDFfU0gpCisjZGVmaW5lIFBTU19DVExfUkVHICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTg4MDAKKyNkZWZpbmUgX19QU1NfSTJDX0NMS19ESVZfTUsgICAgICAgICAgICAgMHgwMDdmMDAwMAorI2RlZmluZSBfX1BTU19JMkNfQ0xLX0RJVl9TSCAgICAgICAgICAgICAxNgorI2RlZmluZSBfX1BTU19JMkNfQ0xLX0RJVihfdikgICAgICAgICAgICAoKF92KSA8PCBfX1BTU19JMkNfQ0xLX0RJVl9TSCkKKyNkZWZpbmUgX19QU1NfTE1FTV9JTklUX0RPTkUgICAgICAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBfX1BTU19MTUVNX1JFU0VUICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIF9fUFNTX0xNRU1fSU5JVF9FTiAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgX19QU1NfTFBVMV9SRVNFVCAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBfX1BTU19MUFUwX1JFU0VUICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEhRTV9RU0VUMF9SWFFfRFJCTF9QMCAgICAgICAgICAgIDB4MDAwMzgwMDAKKyNkZWZpbmUgX19SWFEwX0FERF9WRUNUT1JTX1AgICAgICAgICAgICAgMHg4MDAwMDAwMAorI2RlZmluZSBfX1JYUTBfU1RPUF9QICAgICAgICAgICAgICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIF9fUlhRMF9QUkRfUFRSX1AgICAgICAgICAgICAgICAgIDB4MDAwMGZmZmYKKyNkZWZpbmUgSFFNX1FTRVQxX1JYUV9EUkJMX1AwICAgICAgICAgICAgMHgwMDAzODA4MAorI2RlZmluZSBfX1JYUTFfQUREX1ZFQ1RPUlNfUCAgICAgICAgICAgICAweDgwMDAwMDAwCisjZGVmaW5lIF9fUlhRMV9TVE9QX1AgICAgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgX19SWFExX1BSRF9QVFJfUCAgICAgICAgICAgICAgICAgMHgwMDAwZmZmZgorI2RlZmluZSBIUU1fUVNFVDBfUlhRX0RSQkxfUDEgICAgICAgICAgICAweDAwMDNjMDAwCisjZGVmaW5lIEhRTV9RU0VUMV9SWFFfRFJCTF9QMSAgICAgICAgICAgIDB4MDAwM2MwODAKKyNkZWZpbmUgSFFNX1FTRVQwX1RYUV9EUkJMX1AwICAgICAgICAgICAgMHgwMDAzODAyMAorI2RlZmluZSBfX1RYUTBfQUREX1ZFQ1RPUlNfUCAgICAgICAgICAgICAweDgwMDAwMDAwCisjZGVmaW5lIF9fVFhRMF9TVE9QX1AgICAgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgX19UWFEwX1BSRF9QVFJfUCAgICAgICAgICAgICAgICAgMHgwMDAwZmZmZgorI2RlZmluZSBIUU1fUVNFVDFfVFhRX0RSQkxfUDAgICAgICAgICAgICAweDAwMDM4MGEwCisjZGVmaW5lIF9fVFhRMV9BRERfVkVDVE9SU19QICAgICAgICAgICAgIDB4ODAwMDAwMDAKKyNkZWZpbmUgX19UWFExX1NUT1BfUCAgICAgICAgICAgICAgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBfX1RYUTFfUFJEX1BUUl9QICAgICAgICAgICAgICAgICAweDAwMDBmZmZmCisjZGVmaW5lIEhRTV9RU0VUMF9UWFFfRFJCTF9QMSAgICAgICAgICAgIDB4MDAwM2MwMjAKKyNkZWZpbmUgSFFNX1FTRVQxX1RYUV9EUkJMX1AxICAgICAgICAgICAgMHgwMDAzYzBhMAorI2RlZmluZSBIUU1fUVNFVDBfSUJfRFJCTF8xX1AwICAgICAgICAgICAweDAwMDM4MDQwCisjZGVmaW5lIF9fSUIxXzBfQUNLX1AgICAgICAgICAgICAgICAgICAgIDB4ODAwMDAwMDAKKyNkZWZpbmUgX19JQjFfMF9ESVNBQkxFX1AgICAgICAgICAgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBfX0lCMV8wX05VTV9PRl9BQ0tFRF9FVkVOVFNfUCAgICAweDAwMDBmZmZmCisjZGVmaW5lIEhRTV9RU0VUMV9JQl9EUkJMXzFfUDAgICAgICAgICAgIDB4MDAwMzgwYzAKKyNkZWZpbmUgX19JQjFfMV9BQ0tfUCAgICAgICAgICAgICAgICAgICAgMHg4MDAwMDAwMAorI2RlZmluZSBfX0lCMV8xX0RJU0FCTEVfUCAgICAgICAgICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIF9fSUIxXzFfTlVNX09GX0FDS0VEX0VWRU5UU19QICAgIDB4MDAwMGZmZmYKKyNkZWZpbmUgSFFNX1FTRVQwX0lCX0RSQkxfMV9QMSAgICAgICAgICAgMHgwMDAzYzA0MAorI2RlZmluZSBIUU1fUVNFVDFfSUJfRFJCTF8xX1AxICAgICAgICAgICAweDAwMDNjMGMwCisjZGVmaW5lIEhRTV9RU0VUMF9JQl9EUkJMXzJfUDAgICAgICAgICAgIDB4MDAwMzgwNjAKKyNkZWZpbmUgX19JQjJfMF9BQ0tfUCAgICAgICAgICAgICAgICAgICAgMHg4MDAwMDAwMAorI2RlZmluZSBfX0lCMl8wX0RJU0FCTEVfUCAgICAgICAgICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIF9fSUIyXzBfTlVNX09GX0FDS0VEX0VWRU5UU19QICAgIDB4MDAwMGZmZmYKKyNkZWZpbmUgSFFNX1FTRVQxX0lCX0RSQkxfMl9QMCAgICAgICAgICAgMHgwMDAzODBlMAorI2RlZmluZSBfX0lCMl8xX0FDS19QICAgICAgICAgICAgICAgICAgICAweDgwMDAwMDAwCisjZGVmaW5lIF9fSUIyXzFfRElTQUJMRV9QICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgX19JQjJfMV9OVU1fT0ZfQUNLRURfRVZFTlRTX1AgICAgMHgwMDAwZmZmZgorI2RlZmluZSBIUU1fUVNFVDBfSUJfRFJCTF8yX1AxICAgICAgICAgICAweDAwMDNjMDYwCisjZGVmaW5lIEhRTV9RU0VUMV9JQl9EUkJMXzJfUDEgICAgICAgICAgIDB4MDAwM2MwZTAKKworCisvKgorICogVGhlc2UgZGVmaW5pdGlvbnMgYXJlIGVpdGhlciBpbiBlcnJvci9taXNzaW5nIGluIHNwZWMuIEl0cyBhdXRvLWdlbmVyYXRlZAorICogZnJvbSBoYXJkIGNvZGVkIHZhbHVlcyBpbiByZWdwYXJzZS5wbC4KKyAqLworI2RlZmluZSBfX0VNUEhQT1NUX0FUXzRHX01LX0ZJWCAgICAgICAgICAweDAwMDAwMDFjCisjZGVmaW5lIF9fRU1QSFBPU1RfQVRfNEdfU0hfRklYICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgX19FTVBIUFJFX0FUXzRHX0ZJWCAgICAgICAgICAgICAgMHgwMDAwMDAwMworI2RlZmluZSBfX1NGUF9UWFJBVEVfRU5fRklYICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIF9fU0ZQX1JYUkFURV9FTl9GSVggICAgICAgICAgICAgIDB4MDAwMDAwODAKKworCisvKgorICogVGhlc2UgcmVnaXN0ZXIgZGVmaW5pdGlvbnMgYXJlIGF1dG8tZ2VuZXJhdGVkIGZyb20gaGFyZCBjb2RlZCB2YWx1ZXMKKyAqIGluIHJlZ3BhcnNlLnBsLgorICovCisKKworLyoKKyAqIFRoZXNlIHJlZ2lzdGVyIG1hcHBpbmcgZGVmaW5pdGlvbnMgYXJlIGF1dG8tZ2VuZXJhdGVkIGZyb20gbWFwcGluZyB0YWJsZXMKKyAqIGluIHJlZ3BhcnNlLnBsLgorICovCisjZGVmaW5lIEJGQV9JT0MwX0hCRUFUX1JFRyAgICAgICAgICAgICAgIEhPU1RfU0VNMF9JTkZPX1JFRworI2RlZmluZSBCRkFfSU9DMF9TVEFURV9SRUcgICAgICAgICAgICAgICBIT1NUX1NFTTFfSU5GT19SRUcKKyNkZWZpbmUgQkZBX0lPQzFfSEJFQVRfUkVHICAgICAgICAgICAgICAgSE9TVF9TRU0yX0lORk9fUkVHCisjZGVmaW5lIEJGQV9JT0MxX1NUQVRFX1JFRyAgICAgICAgICAgICAgIEhPU1RfU0VNM19JTkZPX1JFRworI2RlZmluZSBCRkFfRldfVVNFX0NPVU5UICAgICAgICAgICAgICAgICBIT1NUX1NFTTRfSU5GT19SRUcKKworI2RlZmluZSBDUEVfREVQVEhfUShfX24pIFwKKwkoQ1BFX0RFUFRIX1EwICsgKF9fbikgKiAoQ1BFX0RFUFRIX1ExIC0gQ1BFX0RFUFRIX1EwKSkKKyNkZWZpbmUgQ1BFX1FDVFJMX1EoX19uKSBcCisJKENQRV9RQ1RSTF9RMCArIChfX24pICogKENQRV9RQ1RSTF9RMSAtIENQRV9RQ1RSTF9RMCkpCisjZGVmaW5lIENQRV9QSV9QVFJfUShfX24pIFwKKwkoQ1BFX1BJX1BUUl9RMCArIChfX24pICogKENQRV9QSV9QVFJfUTEgLSBDUEVfUElfUFRSX1EwKSkKKyNkZWZpbmUgQ1BFX0NJX1BUUl9RKF9fbikgXAorCShDUEVfQ0lfUFRSX1EwICsgKF9fbikgKiAoQ1BFX0NJX1BUUl9RMSAtIENQRV9DSV9QVFJfUTApKQorI2RlZmluZSBSTUVfREVQVEhfUShfX24pIFwKKwkoUk1FX0RFUFRIX1EwICsgKF9fbikgKiAoUk1FX0RFUFRIX1ExIC0gUk1FX0RFUFRIX1EwKSkKKyNkZWZpbmUgUk1FX1FDVFJMX1EoX19uKSBcCisJKFJNRV9RQ1RSTF9RMCArIChfX24pICogKFJNRV9RQ1RSTF9RMSAtIFJNRV9RQ1RSTF9RMCkpCisjZGVmaW5lIFJNRV9QSV9QVFJfUShfX24pIFwKKwkoUk1FX1BJX1BUUl9RMCArIChfX24pICogKFJNRV9QSV9QVFJfUTEgLSBSTUVfUElfUFRSX1EwKSkKKyNkZWZpbmUgUk1FX0NJX1BUUl9RKF9fbikgXAorCShSTUVfQ0lfUFRSX1EwICsgKF9fbikgKiAoUk1FX0NJX1BUUl9RMSAtIFJNRV9DSV9QVFJfUTApKQorI2RlZmluZSBIUU1fUVNFVF9SWFFfRFJCTF9QMChfX24pIFwKKwkoSFFNX1FTRVQwX1JYUV9EUkJMX1AwICsgKF9fbikgKiAoSFFNX1FTRVQxX1JYUV9EUkJMX1AwIC0gXAorCUhRTV9RU0VUMF9SWFFfRFJCTF9QMCkpCisjZGVmaW5lIEhRTV9RU0VUX1RYUV9EUkJMX1AwKF9fbikgXAorCShIUU1fUVNFVDBfVFhRX0RSQkxfUDAgKyAoX19uKSAqIChIUU1fUVNFVDFfVFhRX0RSQkxfUDAgLSBcCisJSFFNX1FTRVQwX1RYUV9EUkJMX1AwKSkKKyNkZWZpbmUgSFFNX1FTRVRfSUJfRFJCTF8xX1AwKF9fbikgXAorCShIUU1fUVNFVDBfSUJfRFJCTF8xX1AwICsgKF9fbikgKiAoSFFNX1FTRVQxX0lCX0RSQkxfMV9QMCAtIFwKKwlIUU1fUVNFVDBfSUJfRFJCTF8xX1AwKSkKKyNkZWZpbmUgSFFNX1FTRVRfSUJfRFJCTF8yX1AwKF9fbikgXAorCShIUU1fUVNFVDBfSUJfRFJCTF8yX1AwICsgKF9fbikgKiAoSFFNX1FTRVQxX0lCX0RSQkxfMl9QMCAtIFwKKwlIUU1fUVNFVDBfSUJfRFJCTF8yX1AwKSkKKyNkZWZpbmUgSFFNX1FTRVRfUlhRX0RSQkxfUDEoX19uKSBcCisJKEhRTV9RU0VUMF9SWFFfRFJCTF9QMSArIChfX24pICogKEhRTV9RU0VUMV9SWFFfRFJCTF9QMSAtIFwKKwlIUU1fUVNFVDBfUlhRX0RSQkxfUDEpKQorI2RlZmluZSBIUU1fUVNFVF9UWFFfRFJCTF9QMShfX24pIFwKKwkoSFFNX1FTRVQwX1RYUV9EUkJMX1AxICsgKF9fbikgKiAoSFFNX1FTRVQxX1RYUV9EUkJMX1AxIC0gXAorCUhRTV9RU0VUMF9UWFFfRFJCTF9QMSkpCisjZGVmaW5lIEhRTV9RU0VUX0lCX0RSQkxfMV9QMShfX24pIFwKKwkoSFFNX1FTRVQwX0lCX0RSQkxfMV9QMSArIChfX24pICogKEhRTV9RU0VUMV9JQl9EUkJMXzFfUDEgLSBcCisJSFFNX1FTRVQwX0lCX0RSQkxfMV9QMSkpCisjZGVmaW5lIEhRTV9RU0VUX0lCX0RSQkxfMl9QMShfX24pIFwKKwkoSFFNX1FTRVQwX0lCX0RSQkxfMl9QMSArIChfX24pICogKEhRTV9RU0VUMV9JQl9EUkJMXzJfUDEgLSBcCisJSFFNX1FTRVQwX0lCX0RSQkxfMl9QMSkpCisKKyNkZWZpbmUgQ1BFX1FfTlVNKF9fZm4sIF9fcSkgICgoKF9fZm4pIDw8IDIpICsgKF9fcSkpCisjZGVmaW5lIFJNRV9RX05VTShfX2ZuLCBfX3EpICAoKChfX2ZuKSA8PCAyKSArIChfX3EpKQorI2RlZmluZSBDUEVfUV9NQVNLKF9fcSkgICgoX19xKSAmIDB4MykKKyNkZWZpbmUgUk1FX1FfTUFTSyhfX3EpICAoKF9fcSkgJiAweDMpCisKKworLyoKKyAqIFBDSSBNU0ktWCB2ZWN0b3IgZGVmaW5lcworICovCitlbnVtIHsKKyAgICBCRkFfTVNJWF9DUEVfUTAgPSAwLAorICAgIEJGQV9NU0lYX0NQRV9RMSA9IDEsCisgICAgQkZBX01TSVhfQ1BFX1EyID0gMiwKKyAgICBCRkFfTVNJWF9DUEVfUTMgPSAzLAorICAgIEJGQV9NU0lYX1JNRV9RMCA9IDQsCisgICAgQkZBX01TSVhfUk1FX1ExID0gNSwKKyAgICBCRkFfTVNJWF9STUVfUTIgPSA2LAorICAgIEJGQV9NU0lYX1JNRV9RMyA9IDcsCisgICAgQkZBX01TSVhfTFBVX0VSUiA9IDgsCisgICAgQkZBX01TSVhfQ1RfTUFYID0gOSwKK307CisKKy8qCisgKiBBbmQgY29ycmVzcG9uZGluZyBob3N0IGludGVycnVwdCBzdGF0dXMgYml0IGZpZWxkIGRlZmluZXMKKyAqLworI2RlZmluZSBfX0hGTl9JTlRfQ1BFX1EwICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDFVCisjZGVmaW5lIF9fSEZOX0lOVF9DUEVfUTEgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMlUKKyNkZWZpbmUgX19IRk5fSU5UX0NQRV9RMiAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0VQorI2RlZmluZSBfX0hGTl9JTlRfQ1BFX1EzICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDhVCisjZGVmaW5lIF9fSEZOX0lOVF9DUEVfUTQgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMFUKKyNkZWZpbmUgX19IRk5fSU5UX0NQRV9RNSAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwVQorI2RlZmluZSBfX0hGTl9JTlRfQ1BFX1E2ICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDBVCisjZGVmaW5lIF9fSEZOX0lOVF9DUEVfUTcgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MFUKKyNkZWZpbmUgX19IRk5fSU5UX1JNRV9RMCAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwVQorI2RlZmluZSBfX0hGTl9JTlRfUk1FX1ExICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDBVCisjZGVmaW5lIF9fSEZOX0lOVF9STUVfUTIgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMFUKKyNkZWZpbmUgX19IRk5fSU5UX1JNRV9RMyAgICAgICAgICAgICAgICAgICAweDAwMDAwODAwVQorI2RlZmluZSBfX0hGTl9JTlRfUk1FX1E0ICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDBVCisjZGVmaW5lIF9fSEZOX0lOVF9STUVfUTUgICAgICAgICAgICAgICAgICAgMHgwMDAwMjAwMFUKKyNkZWZpbmUgX19IRk5fSU5UX1JNRV9RNiAgICAgICAgICAgICAgICAgICAweDAwMDA0MDAwVQorI2RlZmluZSBfX0hGTl9JTlRfUk1FX1E3ICAgICAgICAgICAgICAgICAgIDB4MDAwMDgwMDBVCisjZGVmaW5lIF9fSEZOX0lOVF9FUlJfRU1DICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMFUKKyNkZWZpbmUgX19IRk5fSU5UX0VSUl9MUFUwICAgICAgICAgICAgICAgICAweDAwMDIwMDAwVQorI2RlZmluZSBfX0hGTl9JTlRfRVJSX0xQVTEgICAgICAgICAgICAgICAgIDB4MDAwNDAwMDBVCisjZGVmaW5lIF9fSEZOX0lOVF9FUlJfUFNTICAgICAgICAgICAgICAgICAgMHgwMDA4MDAwMFUKKyNkZWZpbmUgX19IRk5fSU5UX01CT1hfTFBVMCAgICAgICAgICAgICAgICAweDAwMTAwMDAwVQorI2RlZmluZSBfX0hGTl9JTlRfTUJPWF9MUFUxICAgICAgICAgICAgICAgIDB4MDAyMDAwMDBVCisjZGVmaW5lIF9fSEZOX0lOVF9NQk9YMV9MUFUwICAgICAgICAgICAgICAgMHgwMDQwMDAwMFUKKyNkZWZpbmUgX19IRk5fSU5UX01CT1gxX0xQVTEgICAgICAgICAgICAgICAweDAwODAwMDAwVQorI2RlZmluZSBfX0hGTl9JTlRfQ1BFX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwMDAwZmZVCisjZGVmaW5lIF9fSEZOX0lOVF9STUVfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDAwZmYwMFUKKworCisvKgorICogY2F0YXB1bHQgbWVtb3J5IG1hcC4KKyAqLworI2RlZmluZSBMTF9QR05fSFFNMCAgICAgICAgICAgICAgICAgICAgICAweDAwOTYKKyNkZWZpbmUgTExfUEdOX0hRTTEgICAgICAgICAgICAgICAgICAgICAgMHgwMDk3CisjZGVmaW5lIFBTU19TTUVNX1BBR0VfU1RBUlQJMHg4MDAwCisjZGVmaW5lIFBTU19TTUVNX1BHTlVNKF9wZzAsIF9tYSkJKChfcGcwKSArICgoX21hKSA+PiAxNSkpCisjZGVmaW5lIFBTU19TTUVNX1BHT0ZGKF9tYSkJKChfbWEpICYgMHg3ZmZmKQorCisvKgorICogRW5kIG9mIGNhdGFwdWx0IG1lbW9yeSBtYXAKKyAqLworCisKKyNlbmRpZiAvKiBfX0JGSV9DVFJFR19IX18gKi8KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2JmaS9iZmlfZmFicmljLmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYmZpL2JmaV9mYWJyaWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMDY2OWVkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2JmaS9iZmlfZmFicmljLmgKQEAgLTAsMCArMSw5MiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9fQkZJX0ZBQlJJQ19IX18KKyNkZWZpbmUgX19CRklfRkFCUklDX0hfXworCisjaW5jbHVkZSA8YmZpL2JmaS5oPgorCisjcHJhZ21hIHBhY2soMSkKKworZW51bSBiZmlfZmFicmljX2gyaV9tc2dzIHsKKwlCRklfRkFCUklDX0gySV9DUkVBVEVfUkVRCT0gMSwKKwlCRklfRkFCUklDX0gySV9ERUxFVEVfUkVRCT0gMiwKKwlCRklfRkFCUklDX0gySV9TRVRBVVRICQk9IDMsCit9OworCitlbnVtIGJmaV9mYWJyaWNfaTJoX21zZ3MgeworCUJGSV9GQUJSSUNfSTJIX0NSRUFURV9SU1AJPSBCRkFfSTJITSgxKSwKKwlCRklfRkFCUklDX0kySF9ERUxFVEVfUlNQCT0gQkZBX0kySE0oMiksCisJQkZJX0ZBQlJJQ19JMkhfU0VUQVVUSF9SU1AJPSBCRkFfSTJITSgzKSwKKwlCRklfRkFCUklDX0kySF9PTkxJTkUJCT0gQkZBX0kySE0oNCksCisJQkZJX0ZBQlJJQ19JMkhfT0ZGTElORQkJPSBCRkFfSTJITSg1KSwKK307CisKK3N0cnVjdCBiZmlfZmFicmljX2NyZWF0ZV9yZXFfcyB7CisJYmZpX21oZHJfdAltaDsJCS8qICBjb21tb24gbXNnIGhlYWRlcgkJKi8KKwl1OCAgICAgICAgIHZmX2VuOwkJLyogIHZpcnR1YWwgZmFicmljIGVuYWJsZQkqLworCXU4ICAgICAgICAgcnN2ZDsKKwl1MTYgICAgICAgIHZmX2lkOwkJLyogIHZpcnR1YWwgZmFicmljIElECQkqLworCXd3bl90CQlwd3duOwkJLyogIHBvcnQgbmFtZQkJCSovCisJd3duX3QJCW53d247CQkvKiAgbm9kZSBuYW1lCQkJKi8KK307CisKK3N0cnVjdCBiZmlfZmFicmljX2NyZWF0ZV9yc3BfcyB7CisJYmZpX21oZHJfdAltaDsJCS8qICBjb21tb24gbXNnIGhlYWRlcgkJKi8KKwl1MTYgICAgICAgIGJmYV9oYW5kbGU7CS8qICBob3N0IGZhYnJpYyBoYW5kbGUJCSovCisJdTggICAgICAgICBzdGF0dXM7CQkvKiAgZmFicmljIGNyZWF0ZSBzdGF0dXMJKi8KKwl1OCAgICAgICAgIHJzdmQ7Cit9OworCitzdHJ1Y3QgYmZpX2ZhYnJpY19kZWxldGVfcmVxX3MgeworCWJmaV9taGRyX3QJbWg7CQkvKiAgY29tbW9uIG1zZyBoZWFkZXIJCSovCisJdTE2ICAgICAgICBmd19oYW5kbGU7CS8qICBmaXJtd2FyZSBmYWJyaWMgaGFuZGxlCSovCisJdTE2ICAgICAgICByc3ZkOworfTsKKworc3RydWN0IGJmaV9mYWJyaWNfZGVsZXRlX3JzcF9zIHsKKwliZmlfbWhkcl90CW1oOwkJLyogIGNvbW1vbiBtc2cgaGVhZGVyCQkqLworCXUxNiAgICAgICAgYmZhX2hhbmRsZTsJLyogIGhvc3QgZmFicmljIGhhbmRsZQkJKi8KKwl1OCAgICAgICAgIHN0YXR1czsJCS8qICBmYWJyaWMgZGVsZXRpb24gc3RhdHVzCSovCisJdTggICAgICAgICByc3ZkOworfTsKKworI2RlZmluZSBCRklfRkFCUklDX0FVVEhTRUNSRVRfTEVOCTY0CitzdHJ1Y3QgYmZpX2ZhYnJpY19zZXRhdXRoX3JlcV9zIHsKKwliZmlfbWhkcl90CW1oOwkJLyogIGNvbW1vbiBtc2cgaGVhZGVyCQkqLworCXUxNiAgICAgICAgZndfaGFuZGxlOwkvKiAgZi93IGhhbmRsZSBvZiBmYWJyaWMJKi8KKwl1OAkJYWxnb3JpdGhtOworCXU4CQlncm91cDsKKwl1OAkJc2VjcmV0W0JGSV9GQUJSSUNfQVVUSFNFQ1JFVF9MRU5dOworfTsKKwordW5pb24gYmZpX2ZhYnJpY19oMmlfbXNnX3UgeworCWJmaV9tc2dfdAkJKm1zZzsKKwlzdHJ1Y3QgYmZpX2ZhYnJpY19jcmVhdGVfcmVxX3MJKmNyZWF0ZV9yZXE7CisJc3RydWN0IGJmaV9mYWJyaWNfZGVsZXRlX3JlcV9zCSpkZWxldGVfcmVxOworfTsKKwordW5pb24gYmZpX2ZhYnJpY19pMmhfbXNnX3UgeworCWJmaV9tc2dfdAkJKm1zZzsKKwlzdHJ1Y3QgYmZpX2ZhYnJpY19jcmVhdGVfcnNwX3MJKmNyZWF0ZV9yc3A7CisJc3RydWN0IGJmaV9mYWJyaWNfZGVsZXRlX3JzcF9zCSpkZWxldGVfcnNwOworfTsKKworI3ByYWdtYSBwYWNrKCkKKworI2VuZGlmIC8qIF9fQkZJX0ZBQlJJQ19IX18gKi8KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2JmaS9iZmlfZmNwaW0uaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9iZmkvYmZpX2ZjcGltLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTJjMDU5ZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9iZmkvYmZpX2ZjcGltLmgKQEAgLTAsMCArMSwzMDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0JGSV9GQ1BJTV9IX18KKyNkZWZpbmUgX19CRklfRkNQSU1fSF9fCisKKyNpbmNsdWRlICJiZmkuaCIKKyNpbmNsdWRlIDxwcm90b2NvbC9mY3AuaD4KKworI3ByYWdtYSBwYWNrKDEpCisKKy8qCisgKiBJbml0aWF0b3IgbW9kZSBJLVQgbmV4dXMgaW50ZXJmYWNlIGRlZmluZXMuCisgKi8KKworZW51bSBiZmlfaXRuaW1faDJpIHsKKwlCRklfSVROSU1fSDJJX0NSRUFURV9SRVEgPSAxLAkvKiAgaS10IG5leHVzIGNyZWF0aW9uICovCisJQkZJX0lUTklNX0gySV9ERUxFVEVfUkVRID0gMiwJLyogIGktdCBuZXh1cyBkZWxldGlvbiAqLworfTsKKworZW51bSBiZmlfaXRuaW1faTJoIHsKKwlCRklfSVROSU1fSTJIX0NSRUFURV9SU1AgPSBCRkFfSTJITSgxKSwKKwlCRklfSVROSU1fSTJIX0RFTEVURV9SU1AgPSBCRkFfSTJITSgyKSwKKwlCRklfSVROSU1fSTJIX1NMRVJfRVZFTlQgPSBCRkFfSTJITSgzKSwKK307CisKK3N0cnVjdCBiZmlfaXRuaW1fY3JlYXRlX3JlcV9zIHsKKwlzdHJ1Y3QgYmZpX21oZHJfcyAgbWg7CQkvKiAgY29tbW9uIG1zZyBoZWFkZXIJCSAqLworCXUxNiAgICAgICAgZndfaGFuZGxlOwkvKiAgZi93IGhhbmRsZSBmb3IgaXRuaW0JICovCisJdTggICAgICAgICBjbGFzczsJCS8qICBGQyBjbGFzcyBmb3IgSU8JCSAqLworCXU4ICAgICAgICAgc2VxX3JlYzsJLyogIHNlcXVlbmNlIHJlY292ZXJ5IHN1cHBvcnQJICovCisJdTggICAgICAgICBtc2dfbm87CQkvKiAgc2VxIGlkIG9mIHRoZSBtc2cJCSAqLworfTsKKworc3RydWN0IGJmaV9pdG5pbV9jcmVhdGVfcnNwX3MgeworCXN0cnVjdCBiZmlfbWhkcl9zICBtaDsJCS8qICBjb21tb24gbXNnIGhlYWRlcgkJICovCisJdTE2ICAgICAgICBiZmFfaGFuZGxlOwkvKiAgYmZhIGhhbmRsZSBmb3IgaXRuaW0JICovCisJdTggICAgICAgICBzdGF0dXM7CQkvKiAgZmNwIHJlcXVlc3Qgc3RhdHVzCQkgKi8KKwl1OCAgICAgICAgIHNlcV9pZDsJCS8qICBzZXEgaWQgb2YgdGhlIG1zZwkJICovCit9OworCitzdHJ1Y3QgYmZpX2l0bmltX2RlbGV0ZV9yZXFfcyB7CisJc3RydWN0IGJmaV9taGRyX3MgIG1oOwkJLyogIGNvbW1vbiBtc2cgaGVhZGVyCQkgKi8KKwl1MTYgICAgICAgIGZ3X2hhbmRsZTsJLyogIGYvdyBpdG5pbSBoYW5kbGUJCSAqLworCXU4ICAgICAgICAgc2VxX2lkOwkJLyogIHNlcSBpZCBvZiB0aGUgbXNnCQkgKi8KKwl1OCAgICAgICAgIHJzdmQ7Cit9OworCitzdHJ1Y3QgYmZpX2l0bmltX2RlbGV0ZV9yc3BfcyB7CisJc3RydWN0IGJmaV9taGRyX3MgIG1oOwkJLyogIGNvbW1vbiBtc2cgaGVhZGVyCQkgKi8KKwl1MTYgICAgICAgIGJmYV9oYW5kbGU7CS8qICBiZmEgaGFuZGxlIGZvciBpdG5pbQkgKi8KKwl1OCAgICAgICAgIHN0YXR1czsJCS8qICBmY3AgcmVxdWVzdCBzdGF0dXMJCSAqLworCXU4ICAgICAgICAgc2VxX2lkOwkJLyogIHNlcSBpZCBvZiB0aGUgbXNnCQkgKi8KK307CisKK3N0cnVjdCBiZmlfaXRuaW1fc2xlcl9ldmVudF9zIHsKKwlzdHJ1Y3QgYmZpX21oZHJfcyAgbWg7CQkvKiAgY29tbW9uIG1zZyBoZWFkZXIJCSAqLworCXUxNiAgICAgICAgYmZhX2hhbmRsZTsJLyogIGJmYSBoYW5kbGUgZm9yIGl0bmltCSAqLworCXUxNiAgICAgICAgcnN2ZDsKK307CisKK3VuaW9uIGJmaV9pdG5pbV9oMmlfbXNnX3UgeworCXN0cnVjdCBiZmlfaXRuaW1fY3JlYXRlX3JlcV9zICpjcmVhdGVfcmVxOworCXN0cnVjdCBiZmlfaXRuaW1fZGVsZXRlX3JlcV9zICpkZWxldGVfcmVxOworCXN0cnVjdCBiZmlfbXNnX3MgICAgICAqbXNnOworfTsKKwordW5pb24gYmZpX2l0bmltX2kyaF9tc2dfdSB7CisJc3RydWN0IGJmaV9pdG5pbV9jcmVhdGVfcnNwX3MgKmNyZWF0ZV9yc3A7CisJc3RydWN0IGJmaV9pdG5pbV9kZWxldGVfcnNwX3MgKmRlbGV0ZV9yc3A7CisJc3RydWN0IGJmaV9pdG5pbV9zbGVyX2V2ZW50X3MgKnNsZXJfZXZlbnQ7CisJc3RydWN0IGJmaV9tc2dfcyAgICAgICptc2c7Cit9OworCisvKgorICogSW5pdGlhdG9yIG1vZGUgSU8gaW50ZXJmYWNlIGRlZmluZXMuCisgKi8KKworZW51bSBiZmlfaW9pbV9oMmkgeworCUJGSV9JT0lNX0gySV9JT0FCT1JUX1JFUSA9IDEsCS8qICBJTyBhYm9ydCByZXF1ZXN0CSAqLworCUJGSV9JT0lNX0gySV9JT0NMRUFOVVBfUkVRID0gMiwJLyogIElPIGNsZWFudXAgcmVxdWVzdAkgKi8KK307CisKK2VudW0gYmZpX2lvaW1faTJoIHsKKwlCRklfSU9JTV9JMkhfSU9fUlNQID0gQkZBX0kySE0oMSksCS8qICBub24tZnAgSU8gcmVzcG9uc2UJICovCisJQkZJX0lPSU1fSTJIX0lPQUJPUlRfUlNQID0gQkZBX0kySE0oMiksLyogIEFCT1JUIHJzcAkgKi8KK307CisKKy8qKgorICogSU8gY29tbWFuZCBESUYgaW5mbworICovCitzdHJ1Y3QgYmZpX2lvaW1fZGlmX3MgeworCXUzMglkaWZfaW5mb1s0XTsKK307CisKKy8qKgorICogRkNQIElPIG1lc3NhZ2VzIG92ZXJ2aWV3CisgKgorICogQG5vdGUKKyAqIC0gTWF4IENEQiBsZW5ndGggc3VwcG9ydGVkIGlzIDY0IGJ5dGVzLgorICogLSBTQ1NJIExpbmtlZCBjb21tYW5kcyBhbmQgU0NTSSBiaS1kaXJlY3Rpb25hbCBDb21tYW5kcyBub3QKKyAqIAkgc3VwcG9ydGVkLgorICoKKyAqLworc3RydWN0IGJmaV9pb2ltX3JlcV9zIHsKKwlzdHJ1Y3QgYmZpX21oZHJfcyAgbWg7CQkvKiAgQ29tbW9uIG1zZyBoZWFkZXIJCSAqLworCXUxNiAgICAgICAgaW9fdGFnOwkJLyogIEkvTyB0YWcJCQkgKi8KKwl1MTYgICAgICAgIHJwb3J0X2hkbDsJLyogIGl0bmltL3Jwb3J0IGZpcm13YXJlIGhhbmRsZSAqLworCXN0cnVjdCBmY3BfY21uZF9zIGNtbmQ7CQkvKiAgSU8gcmVxdWVzdCBpbmZvCQkgKi8KKworCS8qKgorCSAqIFNHIGVsZW1lbnRzIGFycmF5IHdpdGhpbiB0aGUgSU8gcmVxdWVzdCBtdXN0IGJlIGRvdWJsZSB3b3JkCisJICogYWxpZ25lZC4gVGhpcyBhbGlnbWVudCBpcyByZXF1aXJlZCB0byBvcHRpbWl6ZSBTR00gc2V0dXAgZm9yIHRoZSBJTy4KKwkgKi8KKwlzdHJ1Y3QgYmZpX3NnZV9zICAgc2dlc1tCRklfU0dFX0lOTElORV9NQVhdOworCXU4ICAgICAgICAgaW9fdGltZW91dDsKKwl1OCAgICAgICAgIGRpZl9lbjsKKwl1OCAgICAgICAgIHJzdmRfYVsyXTsKKwlzdHJ1Y3QgYmZpX2lvaW1fZGlmX3MgIGRpZjsKK307CisKKy8qKgorICogCVRoaXMgdGFibGUgc2hvd3MgdmFyaW91cyBJTyBzdGF0dXMgY29kZXMgZnJvbSBmaXJtd2FyZSBhbmQgdGhlaXIKKyAqCW1lYW5pbmcuIEhvc3QgZHJpdmVyIGNhbiB1c2UgdGhlc2Ugc3RhdHVzIGNvZGVzIHRvIGZ1cnRoZXIgcHJvY2VzcworICoJSU8gY29tcGxldGlvbnMuCisgKgorICogCUJGSV9JT0lNX1NUU19PSwkJOiBJTyBjb21wbGV0ZWQgd2l0aCBlcnJvciBmcmVlIFNDU0kgJgorICoJCQkJCSAgIHRyYW5zcG9ydCBzdGF0dXMuCisgKiAJCQkJCSAgIC0gaW8tdGFnIGNhbiBiZSByZXVzZWQuCisgKgorICogCUJGQV9JT0lNX1NUU19TQ1NJX0VSUgkJOiBJTyBjb21wbGV0ZWQgd2l0aCBzY3NpIGVycm9yLgorICogCQkJCQkgIC0gaW8tdGFnIGNhbiBiZSByZXVzZWQuCisgKgorICogCUJGSV9JT0lNX1NUU19IT1NUX0FCT1JURUQJOiBJTyB3YXMgYWJvcnRlZCBzdWNjZXNzZnVsbHkgZHVlIHRvCisgKgkJCQkJICAgaG9zdCByZXF1ZXN0LgorICogCQkJCQkgICAtIGlvLXRhZyBjYW5ub3QgYmUgcmV1c2VkIHlldC4KKyAqCisgKiAJQkZJX0lPSU1fU1RTX0FCT1JURUQJCTogSU8gd2FzIGFib3J0ZWQgc3VjY2Vzc2Z1bGx5CisgKgkJCQkJICAgaW50ZXJuYWxseSBieSBmL3cuCisgKiAJCQkJCSAgIC0gaW8tdGFnIGNhbm5vdCBiZSByZXVzZWQgeWV0LgorICoKKyAqIAlCRklfSU9JTV9TVFNfVElNRURPVVQJOiBJTyB0aW1lZG91dCBhbmQgQUJUUy9SUlEgaXMgaGFwcGVuaW5nCisgKgkJCQkJICAgaW4gdGhlIGZpcm13YXJlIGFuZAorICogCQkJCQkgICAtIGlvLXRhZyBjYW5ub3QgYmUgcmV1c2VkIHlldC4KKyAqCisgKiAJQkZJX0lPSU1fU1RTX1NRRVJfTkVFREVECTogRmlybXdhcmUgY291bGQgbm90IHJlY292ZXIgdGhlIElPCisgKgkJCQkJICB3aXRoIHNlcXVlbmNlIGxldmVsIGVycm9yCisgKiAJCQkJCSAgbG9naWMgYW5kIGhlbmNlIGhvc3QgbmVlZHMgdG8gcmV0cnkKKyAqCQkJCQkgIHRoaXMgSU8gd2l0aCBhIGRpZmZlcmVudCBJTyB0YWcKKyAqIAkJCQkJICAtIGlvLXRhZyBjYW5ub3QgYmUgdXNlZCB5ZXQuCisgKgorICogCUJGSV9JT0lNX1NUU19ORVhVU19BQk9SVAk6IFNlY29uZCBMZXZlbCBFcnJvciBSZWNvdmVyeSBmcm9tIGhvc3QKKyAqCQkJCQkgIGlzIHJlcXVpcmVkIGJlY2F1c2UgMiBjb25zZWN1dGl2ZSBBQlRTCisgKgkJCQkJICB0aW1lZG91dCBhbmQgaG9zdCBuZWVkcyBsb2dvdXQgYW5kCisgKgkJCQkJICByZS1sb2dpbiB3aXRoIHRoZSB0YXJnZXQKKyAqIAkJCQkJICAtIGlvLXRhZyBjYW5ub3QgYmUgdXNlZCB5ZXQuCisgKgorICogCUJGSV9JT0lNX1NUU19VTkRFUlJVTgk6IElPIGNvbXBsZXRlZCB3aXRoIFNDU0kgc3RhdHVzIGdvb2QsCisgKgkJCQkJICBidXQgdGhlIGRhdGEgdHJhbmZlcnJlZCBpcyBsZXNzIHRoYW4KKyAqCQkJCQkgIHRoZSBmY3AgZGF0YSBsZW5ndGggaW4gdGhlIGNvbW1hbmQuCisgKgkJCQkJICBleC4gU0NTSSBJTlFVSVJZIHdoZXJlIHRyYW5zZmVycmVkCisgKgkJCQkJICBkYXRhIGxlbmd0aCBhbmQgcmVzaWR1ZSBjb3VudCBpbiBGQ1AKKyAqCQkJCQkgIHJlc3BvbnNlIGFjY291bnRzIGZvciB0b3RhbCBmY3AtZGwKKyAqIAkJCQkJICAtIGlvLXRhZyBjYW4gYmUgcmV1c2VkLgorICoKKyAqIAlCRklfSU9JTV9TVFNfT1ZFUlJVTgk6IElPIGNvbXBsZXRlZCB3aXRoIFNDU0kgc3RhdHVzIGdvb2QsCisgKgkJCQkJICBidXQgdGhlIGRhdGEgdHJhbnNlcnJlZCBpcyBtb3JlIHRoYW4KKyAqCQkJCQkgIGZjcCBkYXRhIGxlbmd0aCBpbiB0aGUgY29tbWFuZC4gZXguCisgKgkJCQkJICBUQVBFIElPcyB3aGVyZSBibG9ja3MgY2FuIG9mIHVuZXF1YWwKKyAqCQkJCQkgIGxlbmd0aHMuCisgKiAJCQkJCSAgLSBpby10YWcgY2FuIGJlIHJldXNlZC4KKyAqCisgKiAJQkZJX0lPSU1fU1RTX1JFU19GUkVFCTogRmlybXdhcmUgaGFzIGNvbXBsZXRlZCB1c2luZyBpby10YWcKKyAqCQkJCQkgIGR1cmluZyBhYm9ydCBwcm9jZXNzCisgKiAJCQkJCSAgLSBpby10YWcgY2FuIGJlIHJldXNlZC4KKyAqCisgKiAJQkZJX0lPSU1fU1RTX1BST1RPX0VSUgk6IEZpcm13YXJlIGRldGVjdGVkIGEgcHJvdG9jb2wgZXJyb3IuCisgKgkJCQkJICBleCB0YXJnZXQgc2VudCBtb3JlIGRhdGEgdGhhbgorICoJCQkJCSAgcmVxdWVzdGVkLCBvciB0aGVyZSB3YXMgZGF0YSBmcmFtZQorICoJCQkJCSAgbG9zcyBhbmQgb3RoZXIgcmVhc29ucworICogCQkJCQkgIC0gaW8tdGFnIGNhbm5vdCBiZSB1c2VkIHlldC4KKyAqCisgKiAJQkZJX0lPSU1fU1RTX0RJRl9FUlIJOiBGaXJ3bWFyZSBkZXRlY3RlZCBESUYgZXJyb3IuIGV4OiBESUYKKyAqIAkJCQkJICBDUkMgZXJyIG9yIFJlZiBUYWcgZXJyIG9yIEFwcCB0YWcgZXJyLgorICogCQkJCQkgIC0gaW8tdGFnIGNhbiBiZSByZXVzZWQuCisgKgorICogCUJGQV9JT0lNX1NUU19UU0tfTUdUX0FCT1JUCTogSU8gd2FzIGFib3J0ZWQgYmVjYXVzZSBvZiBUYXNrCisgKgkJCQkJICBNYW5hZ2VtZW50IGNvbW1hbmQgZnJvbSB0aGUgaG9zdAorICogCQkJCQkgIC0gaW8tdGFnIGNhbiBiZSByZXVzZWQuCisgKgorICogCUJGSV9JT0lNX1NUU19VVEFHCQk6IEZpcm13YXJlIGRvZXMgbm90IGtub3cgYWJvdXQgdGhpcworICoJCQkJCSAgaW9fdGFnLgorICogCQkJCQkgIC0gaW8tdGFnIGNhbiBiZSByZXVzZWQuCisgKi8KK2VudW0gYmZpX2lvaW1fc3RhdHVzIHsKKwlCRklfSU9JTV9TVFNfT0sgPSAwLAorCUJGSV9JT0lNX1NUU19IT1NUX0FCT1JURUQgPSAxLAorCUJGSV9JT0lNX1NUU19BQk9SVEVEID0gMiwKKwlCRklfSU9JTV9TVFNfVElNRURPVVQgPSAzLAorCUJGSV9JT0lNX1NUU19SRVNfRlJFRSA9IDQsCisJQkZJX0lPSU1fU1RTX1NRRVJfTkVFREVEID0gNSwKKwlCRklfSU9JTV9TVFNfUFJPVE9fRVJSID0gNiwKKwlCRklfSU9JTV9TVFNfVVRBRyA9IDcsCisJQkZJX0lPSU1fU1RTX1BBVEhUT1YgPSA4LAorfTsKKworI2RlZmluZSBCRklfSU9JTV9TTlNMRU4JKDI1NikKKy8qKgorICogSS9PIHJlc3BvbnNlIG1lc3NhZ2UKKyAqLworc3RydWN0IGJmaV9pb2ltX3JzcF9zIHsKKwlzdHJ1Y3QgYmZpX21oZHJfcyAgbWg7CQkvKiAgY29tbW9uIG1zZyBoZWFkZXIJIAkgKi8KKwl1MTYgICAgICAgIGlvX3RhZzsJCS8qICBjb21wbGV0ZWQgSU8gdGFnCQkgKi8KKwl1MTYgICAgICAgIGJmYV9ycG9ydF9obmRsOwkvKiAgcmVsZWF0ZWQgcnBvcnQgaGFuZGxlCSAqLworCXU4ICAgICAgICAgaW9fc3RhdHVzOwkvKiAgSU8gY29tcGxldGlvbiBzdGF0dXMJICovCisJdTggICAgICAgICByZXVzZV9pb190YWc7CS8qICBJTyB0YWcgY2FuIGJlIHJldXNlZCAgICAgICAgKi8KKwl1MTYJYWJvcnRfdGFnOwkvKiAgaG9zdCBhYm9ydCByZXF1ZXN0IHRhZyAgICAgICovCisJdTgJCXNjc2lfc3RhdHVzOwkvKiAgc2NzaSBzdGF0dXMgZnJvbSB0YXJnZXQJICovCisJdTgJCXNuc19sZW47CS8qICBzY3NpIHNlbnNlIGxlbmd0aAkJICovCisJdTgJCXJlc2lkX2ZsYWdzOwkvKiAgSU8gcmVzaWR1ZSBmbGFncwkJICovCisJdTgJCXJzdmRfYTsKKwl1MzIJcmVzaWR1ZTsJLyogIElPIHJlc2lkdWFsIGxlbmd0aCBpbiBieXRlcyAqLworCXUzMglyc3ZkX2JbM107Cit9OworCitzdHJ1Y3QgYmZpX2lvaW1fYWJvcnRfcmVxX3MgeworCXN0cnVjdCBiZmlfbWhkcl9zICBtaDsgICAgICAgICAgLyogIENvbW1vbiBtc2cgaGVhZGVyICAqLworCXUxNiAgICAgICAgaW9fdGFnOyAgICAgICAgIC8qICBJL08gdGFnICAgICAgICAgICAgKi8KKwl1MTYgICAgICAgIGFib3J0X3RhZzsgICAgICAvKiAgdW5pcXVlIHJlcXVlc3QgdGFnICovCit9OworCisvKgorICogSW5pdGlhdG9yIG1vZGUgdGFzayBtYW5hZ2VtZW50IGNvbW1hbmQgaW50ZXJmYWNlIGRlZmluZXMuCisgKi8KKworZW51bSBiZmlfdHNraW1faDJpIHsKKwlCRklfVFNLSU1fSDJJX1RNX1JFUSAgICA9IDEsIC8qICB0YXNrLW1nbXQgY29tbWFuZCAgICAgICAgICovCisJQkZJX1RTS0lNX0gySV9BQk9SVF9SRVEgPSAyLCAvKiAgdGFzay1tZ210IGNvbW1hbmQgICAgICAgICAqLworfTsKKworZW51bSBiZmlfdHNraW1faTJoIHsKKwlCRklfVFNLSU1fSTJIX1RNX1JTUCA9IEJGQV9JMkhNKDEpLAorfTsKKworc3RydWN0IGJmaV90c2tpbV9yZXFfcyB7CisJc3RydWN0IGJmaV9taGRyX3MgIG1oOyAgICAgICAgICAgICAvKiAgQ29tbW9uIG1zZyBoZWFkZXIgICAgICAgICAgKi8KKwl1MTYgICAgICAgIHRza190YWc7ICAgICAgICAvKiAgdGFzayBtYW5hZ2VtZW50IHRhZyAgICAgICAgKi8KKwl1MTYgICAgICAgIGl0bl9maGRsOyAgICAgICAvKiAgaXRuIGZpcm13YXJlIGhhbmRsZSAgICAgICAgKi8KKwlsdW5fdCAgICAgICAgICAgbHVuOyAgICAgICAgICAgIC8qICBMVSBudW1iZXIgICAgICAgICAgICAgICAgICAqLworCXU4ICAgICAgICAgdG1fZmxhZ3M7ICAgICAgIC8qICBzZWUgZmNwX3RtX2NtbmRfdCAgICAgICAgICAqLworCXU4ICAgICAgICAgdF9zZWNzOyAgICAgICAgIC8qICBUaW1lb3V0IHZhbHVlIGluIHNlY29uZHMgICAqLworCXU4ICAgICAgICAgcnN2ZFsyXTsKK307CisKK3N0cnVjdCBiZmlfdHNraW1fYWJvcnRyZXFfcyB7CisJc3RydWN0IGJmaV9taGRyX3MgIG1oOyAgICAgICAgICAgICAvKiAgQ29tbW9uIG1zZyBoZWFkZXIgICAgICAgICAgKi8KKwl1MTYgICAgICAgIHRza190YWc7ICAgICAgICAvKiAgdGFzayBtYW5hZ2VtZW50IHRhZyAgICAgICAgKi8KKwl1MTYgICAgICAgIHJzdmQ7Cit9OworCitlbnVtIGJmaV90c2tpbV9zdGF0dXMgeworCS8qCisJICogRm9sbG93aW5nIGFyZSBGQ1AtNCBzcGVjIGRlZmluZWQgc3RhdHVzIGNvZGVzLAorCSAqICoqRE8gTk9UIENIQU5HRSBUSEVNICoqCisJICovCisJQkZJX1RTS0lNX1NUU19PSyAgICAgICA9IDAsCisJQkZJX1RTS0lNX1NUU19OT1RfU1VQUCA9IDQsCisJQkZJX1RTS0lNX1NUU19GQUlMRUQgICA9IDUsCisKKwkvKioKKwkgKiBEZWZpbmVkIGJ5IEJGQQorCSAqLworCUJGSV9UU0tJTV9TVFNfVElNRU9VVCAgPSAxMCwgICAgLyogIFRNIHJlcXVlc3QgdGltZWRvdXQgICAgICovCisJQkZJX1RTS0lNX1NUU19BQk9SVEVEICA9IDExLCAgICAvKiAgQWJvcnRlZCBvbiBob3N0IHJlcXVlc3QgKi8KK307CisKK3N0cnVjdCBiZmlfdHNraW1fcnNwX3MgeworCXN0cnVjdCBiZmlfbWhkcl9zICBtaDsJCS8qICBDb21tb24gbXNnIGhlYWRlcgkJICovCisJdTE2ICAgICAgICB0c2tfdGFnOwkvKiAgdGFzayBtZ210IGNtbmQgdGFnCQkgKi8KKwl1OCAgICAgICAgIHRza19zdGF0dXM7CS8qICBAcmVmIGJmaV90c2tpbV9zdGF0dXMgKi8KKwl1OCAgICAgICAgIHJzdmQ7Cit9OworCisjcHJhZ21hIHBhY2soKQorCisjZW5kaWYgLyogX19CRklfRkNQSU1fSF9fICovCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9iZmkvYmZpX2ZjeHAuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9iZmkvYmZpX2ZjeHAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMGU5OTVhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2JmaS9iZmlfZmN4cC5oCkBAIC0wLDAgKzEsNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0JGSV9GQ1hQX0hfXworI2RlZmluZSBfX0JGSV9GQ1hQX0hfXworCisjaW5jbHVkZSAiYmZpLmgiCisKKyNwcmFnbWEgcGFjaygxKQorCitlbnVtIGJmaV9mY3hwX2gyaSB7CisJQkZJX0ZDWFBfSDJJX1NFTkRfUkVRID0gMSwKK307CisKK2VudW0gYmZpX2ZjeHBfaTJoIHsKKwlCRklfRkNYUF9JMkhfU0VORF9SU1AgPSBCRkFfSTJITSgxKSwKK307CisKKyNkZWZpbmUgQkZBX0ZDWFBfTUFYX1NHRVMJMgorCisvKioKKyAqIEZDWFAgc2VuZCByZXF1ZXN0IHN0cnVjdHVyZQorICovCitzdHJ1Y3QgYmZpX2ZjeHBfc2VuZF9yZXFfcyB7CisJc3RydWN0IGJmaV9taGRyX3MgIG1oOwkJLyogIENvbW1vbiBtc2cgaGVhZGVyCQkgICAgKi8KKwl1MTYgICAgICAgIGZjeHBfdGFnOwkvKiAgZHJpdmVyIHJlcXVlc3QgdGFnCQkgICAgKi8KKwl1MTYgICAgICAgIG1heF9mcm1zejsJLyogIG1heCBzZW5kIGZyYW1lIHNpemUJICAgICovCisJdTE2ICAgICAgICB2Zl9pZDsJCS8qICB2c2FuIHRhZyBpZiBhcHBsaWNhYmxlCSAgICAqLworCXUxNiAgICAgICAgcnBvcnRfZndfaG5kbDsJLyogIEZXIEhhbmRsZSBmb3IgdGhlIHJlbW90ZSBwb3J0ICAqLworCXU4ICAgICAgICAgY2xhc3M7CQkvKiAgRkMgY2xhc3MgdXNlZCBmb3IgcmVxL3JzcAkgICAgKi8KKwl1OCAgICAgICAgIHJzcF90aW1lb3V0OwkvKiAgdGltZW91dCBpbiBzZWNzLCAwLW5vIHJlc3BvbnNlICovCisJdTggICAgICAgICBjdHM7CQkvKiAgY29udGludWUgc2VxdWVuY2UJCSAgICAqLworCXU4ICAgICAgICAgbHBfdGFnOwkJLyogIGxwb3J0IHRhZwkJCSAgICAqLworCXN0cnVjdCBmY2hzX3MgICBmY2hzOwkJLyogIHJlcXVlc3QgRkMgaGVhZGVyIHN0cnVjdHVyZSAgICAqLworCXUzMiAgICAgICAgcmVxX2xlbjsJLyogIHJlcXVlc3QgcGF5bG9hZCBsZW5ndGgJICAgICovCisJdTMyICAgICAgICByc3BfbWF4bGVuOwkvKiAgbWF4IHJlc3BvbnNlIGxlbmd0aCBleHBlY3RlZCAgICovCisJc3RydWN0IGJmaV9zZ2VfcyAgIHJlcV9zZ2VbQkZBX0ZDWFBfTUFYX1NHRVNdOwkvKiAgcmVxdWVzdCBidWYgICAgKi8KKwlzdHJ1Y3QgYmZpX3NnZV9zICAgcnNwX3NnZVtCRkFfRkNYUF9NQVhfU0dFU107CS8qICByZXNwb25zZSBidWYgICAqLworfTsKKworLyoqCisgKiBGQ1hQIHNlbmQgcmVzcG9uc2Ugc3RydWN0dXJlCisgKi8KK3N0cnVjdCBiZmlfZmN4cF9zZW5kX3JzcF9zIHsKKwlzdHJ1Y3QgYmZpX21oZHJfcyAgbWg7CQkvKiAgQ29tbW9uIG1zZyBoZWFkZXIJCSAgICAqLworCXUxNiAgICAgICAgZmN4cF90YWc7CS8qICBzZW5kIHJlcXVlc3QgdGFnCQkgICAgKi8KKwl1OCAgICAgICAgIHJlcV9zdGF0dXM7CS8qICByZXF1ZXN0IHN0YXR1cwkJICAgICovCisJdTggICAgICAgICByc3ZkOworCXUzMiAgICAgICAgcnNwX2xlbjsJLyogIGFjdHVhbCByZXNwb25zZSBsZW5ndGgJICAgICovCisJdTMyICAgICAgICByZXNpZHVlX2xlbjsJLyogIHJlc2lkdWFsIHJlc3BvbnNlIGxlbmd0aAkgICAgKi8KKwlzdHJ1Y3QgZmNoc19zICAgZmNoczsJCS8qICByZXNwb25zZSBGQyBoZWFkZXIgc3RydWN0dXJlICAgKi8KK307CisKKyNwcmFnbWEgcGFjaygpCisKKyNlbmRpZiAvKiBfX0JGSV9GQ1hQX0hfXyAqLworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYmZpL2JmaV9pb2MuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9iZmkvYmZpX2lvYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyNmU5YzAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYmZpL2JmaV9pb2MuaApAQCAtMCwwICsxLDIwMiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9fQkZJX0lPQ19IX18KKyNkZWZpbmUgX19CRklfSU9DX0hfXworCisjaW5jbHVkZSAiYmZpLmgiCisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc19pb2MuaD4KKworI3ByYWdtYSBwYWNrKDEpCisKK2VudW0gYmZpX2lvY19oMmlfbXNncyB7CisJQkZJX0lPQ19IMklfRU5BQkxFX1JFUSAJCT0gMSwKKwlCRklfSU9DX0gySV9ESVNBQkxFX1JFUSAJPSAyLAorCUJGSV9JT0NfSDJJX0dFVEFUVFJfUkVRIAk9IDMsCisJQkZJX0lPQ19IMklfREJHX1NZTkMJIAk9IDQsCisJQkZJX0lPQ19IMklfREJHX0RVTVAJIAk9IDUsCit9OworCitlbnVtIGJmaV9pb2NfaTJoX21zZ3MgeworCUJGSV9JT0NfSTJIX0VOQUJMRV9SRVBMWQk9IEJGQV9JMkhNKDEpLAorCUJGSV9JT0NfSTJIX0RJU0FCTEVfUkVQTFkgCT0gQkZBX0kySE0oMiksCisJQkZJX0lPQ19JMkhfR0VUQVRUUl9SRVBMWSAJPSBCRkFfSTJITSgzKSwKKwlCRklfSU9DX0kySF9SRUFEWV9FVkVOVCAJPSBCRkFfSTJITSg0KSwKKwlCRklfSU9DX0kySF9IQkVBVAkJPSBCRkFfSTJITSg1KSwKK307CisKKy8qKgorICogQkZJX0lPQ19IMklfR0VUQVRUUl9SRVEgbWVzc2FnZQorICovCitzdHJ1Y3QgYmZpX2lvY19nZXRhdHRyX3JlcV9zIHsKKwlzdHJ1Y3QgYmZpX21oZHJfcwltaDsKKwl1bmlvbiBiZmlfYWRkcl91CWF0dHJfYWRkcjsKK307CisKK3N0cnVjdCBiZmlfaW9jX2F0dHJfcyB7CisJd3duX3QgICAgICAgICAgIG1mZ193d247CisJbWFjX3QJCW1mZ19tYWM7CisJdTE2CXJzdmRfYTsKKwljaGFyICAgICAgICAgICAgYnJjZF9zZXJpYWxudW1bU1RSU1ooQkZBX01GR19TRVJJQUxOVU1fU0laRSldOworCXU4ICAgICAgICAgcGNpZV9nZW47CisJdTggICAgICAgICBwY2llX2xhbmVzX29yaWc7CisJdTggICAgICAgICBwY2llX2xhbmVzOworCXU4ICAgICAgICAgcnhfYmJjcmVkaXQ7CS8qICByZWNlaXZlIGJ1ZmZlciBjcmVkaXRzICovCisJdTMyICAgICAgICBhZGFwdGVyX3Byb3A7CS8qICBhZGFwdGVyIHByb3BlcnRpZXMgICAgICovCisJdTE2ICAgICAgICBtYXhmcnNpemU7CS8qICBtYXggcmVjZWl2ZSBmcmFtZSBzaXplICovCisJY2hhciAgICAgICAgIAlhc2ljX3JldjsKKwl1OCAgICAgICAgIHJzdmRfYjsKKwljaGFyICAgICAgICAgICAgZndfdmVyc2lvbltCRkFfVkVSU0lPTl9MRU5dOworCWNoYXIgICAgICAgICAgICBvcHRyb21fdmVyc2lvbltCRkFfVkVSU0lPTl9MRU5dOworCXN0cnVjdCBiZmFfbWZnX3ZwZF9zCXZwZDsKK307CisKKy8qKgorICogQkZJX0lPQ19JMkhfR0VUQVRUUl9SRVBMWSBtZXNzYWdlCisgKi8KK3N0cnVjdCBiZmlfaW9jX2dldGF0dHJfcmVwbHlfcyB7CisJc3RydWN0IGJmaV9taGRyX3MgIG1oOwkJLyogIENvbW1vbiBtc2cgaGVhZGVyICAgICAgICAgICovCisJdTgJCXN0YXR1czsJLyogIGNmZyByZXBseSBzdGF0dXMgICAgICAgICAgICovCisJdTgJCXJzdmRbM107Cit9OworCisvKioKKyAqIEZpcm13YXJlIG1lbW9yeSBwYWdlIG9mZnNldHMKKyAqLworI2RlZmluZSBCRklfSU9DX1NNRU1fUEcwX0NCCSgweDQwKQorI2RlZmluZSBCRklfSU9DX1NNRU1fUEcwX0NUCSgweDE4MCkKKworLyoqCisgKiBGaXJtd2FyZSB0cmFjZSBvZmZzZXQKKyAqLworI2RlZmluZSBCRklfSU9DX1RSQ19PRkYJCSgweDRiMDApCisjZGVmaW5lIEJGSV9JT0NfVFJDX0VOVFMJMjU2CisKKyNkZWZpbmUgQkZJX0lPQ19GV19TSUdOQVRVUkUJKDB4YmZhZGJmYWQpCisjZGVmaW5lIEJGSV9JT0NfTUQ1U1VNX1NaCTQKK3N0cnVjdCBiZmlfaW9jX2ltYWdlX2hkcl9zIHsKKwl1MzIgICAgICAgIHNpZ25hdHVyZTsJLyogIGNvbnN0YW50IHNpZ25hdHVyZSAqLworCXUzMiAgICAgICAgcnN2ZF9hOworCXUzMiAgICAgICAgZXhlYzsJCS8qICBleGVjIHZlY3RvciAgICAgICAgKi8KKwl1MzIgICAgICAgIHBhcmFtOwkJLyogIHBhcmFtZXRlcnMgICAgICAgICAqLworCXUzMiAgICAgICAgcnN2ZF9iWzRdOworCXUzMiAgICAgICAgbWQ1c3VtW0JGSV9JT0NfTUQ1U1VNX1NaXTsKK307CisKKy8qKgorICogIEJGSV9JT0NfSTJIX1JFQURZX0VWRU5UIG1lc3NhZ2UKKyAqLworc3RydWN0IGJmaV9pb2NfcmR5X2V2ZW50X3MgeworCXN0cnVjdCBiZmlfbWhkcl9zICBtaDsJCQkvKiAgY29tbW9uIG1zZyBoZWFkZXIgKi8KKwl1OCAgICAgICAgIGluaXRfc3RhdHVzOwkvKiAgaW5pdCBldmVudCBzdGF0dXMgKi8KKwl1OCAgICAgICAgIHJzdmRbM107Cit9OworCitzdHJ1Y3QgYmZpX2lvY19oYmVhdF9zIHsKKwlzdHJ1Y3QgYmZpX21oZHJfcyAgbWg7CQkvKiAgY29tbW9uIG1zZyBoZWFkZXIJCSovCisJdTMyCSAgIGhiX2NvdW50OwkvKiAgY3VycmVudCBoZWFydCBiZWF0IGNvdW50CSovCit9OworCisvKioKKyAqIElPQyBoYXJkd2FyZS9maXJtd2FyZSBzdGF0ZQorICovCitlbnVtIGJmaV9pb2Nfc3RhdGUgeworCUJGSV9JT0NfVU5JTklUIAkgPSAwLAkJLyogIG5vdCBpbml0aWFsaXplZCAgICAgICAgICAgICAgICAgKi8KKwlCRklfSU9DX0lOSVRJTkcgCSA9IDEsCS8qICBoL3cgaXMgYmVpbmcgaW5pdGlhbGl6ZWQgICAgICAgICovCisJQkZJX0lPQ19IV0lOSVQgCSA9IDIsCQkvKiAgaC93IGlzIGluaXRpYWxpemVkICAgICAgICAgICAgICAqLworCUJGSV9JT0NfQ0ZHIAkgPSAzLAkJLyogIElPQyBjb25maWd1cmF0aW9uIGluIHByb2dyZXNzICAgKi8KKwlCRklfSU9DX09QIAkJID0gNCwJLyogIElPQyBpcyBvcGVyYXRpb25hbCAgICAgICAgICAgICAgKi8KKwlCRklfSU9DX0RJU0FCTElORyAJID0gNSwJLyogIElPQyBpcyBiZWluZyBkaXNhYmxlZCAgICAgICAgICAgKi8KKwlCRklfSU9DX0RJU0FCTEVEIAkgPSA2LAkvKiAgSU9DIGlzIGRpc2FibGVkICAgICAgICAgICAgICAgICAqLworCUJGSV9JT0NfQ0ZHX0RJU0FCTEVEID0gNywJLyogIElPQyBpcyBiZWluZyBkaXNhYmxlZDt0cmFuc2llbnQgKi8KKwlCRklfSU9DX0hCRkFJTCAgICAgICA9IDgsCS8qICBJT0MgaGVhcnQtYmVhdCBmYWlsdXJlICAgICAgICAgICovCisJQkZJX0lPQ19NRU1URVNUICAgICAgPSA5LAkvKiAgSU9DIGlzIGRvaW5nIG1lbXRlc3QgICAgICAgICAgICAqLworfTsKKworI2RlZmluZSBCRklfSU9DX0VORElBTl9TSUcgIDB4MTIzNDU2NzgKKworZW51bSB7CisJQkZJX0FEQVBURVJfVFlQRV9GQyAgID0gMHgwMSwJCS8qICBGQyBhZGFwdGVycyAgICAgICAgICAgKi8KKwlCRklfQURBUFRFUl9UWVBFX01LICAgPSAweDBmMDAwMCwJLyogIGFkYXB0ZXIgdHlwZSBtYXNrICAgICAqLworCUJGSV9BREFQVEVSX1RZUEVfU0ggICA9IDE2LAkgICAgICAgIC8qICBhZGFwdGVyIHR5cGUgc2hpZnQgICAgKi8KKwlCRklfQURBUFRFUl9OUE9SVFNfTUsgPSAweGZmMDAsCQkvKiAgbnVtYmVyIG9mIHBvcnRzIG1hc2sgICovCisJQkZJX0FEQVBURVJfTlBPUlRTX1NIID0gOCwJICAgICAgICAvKiAgbnVtYmVyIG9mIHBvcnRzIHNoaWZ0ICovCisJQkZJX0FEQVBURVJfU1BFRURfTUsgID0gMHhmZiwJCS8qICBhZGFwdGVyIHNwZWVkIG1hc2sgICAgKi8KKwlCRklfQURBUFRFUl9TUEVFRF9TSCAgPSAwLAkgICAgICAgIC8qICBhZGFwdGVyIHNwZWVkIHNoaWZ0ICAgKi8KKwlCRklfQURBUFRFUl9QUk9UTyAgICAgPSAweDEwMDAwMCwJLyogIHByb3RvdHlwZSBhZGFwYXRlcnMgICAqLworCUJGSV9BREFQVEVSX1RUViAgICAgICA9IDB4MjAwMDAwLAkvKiAgVFRWIGRlYnVnIGNhcGFibGUgICAgICovCisJQkZJX0FEQVBURVJfVU5TVVBQICAgID0gMHg0MDAwMDAsCS8qICB1bmtub3duIGFkYXB0ZXIgdHlwZSAgKi8KK307CisKKyNkZWZpbmUgQkZJX0FEQVBURVJfR0VUUChfX3Byb3AsX19hZGFwX3Byb3ApICAgICAgICAgIAkJXAorICAgICgoKF9fYWRhcF9wcm9wKSAmIEJGSV9BREFQVEVSXyAjIyBfX3Byb3AgIyMgX01LKSA+PiAgICAgICAgIFwKKyAgICAgQkZJX0FEQVBURVJfICMjIF9fcHJvcCAjIyBfU0gpCisjZGVmaW5lIEJGSV9BREFQVEVSX1NFVFAoX19wcm9wLCBfX3ZhbCkgICAgICAgICAJCVwKKyAgICAoKF9fdmFsKSA8PCBCRklfQURBUFRFUl8gIyMgX19wcm9wICMjIF9TSCkKKyNkZWZpbmUgQkZJX0FEQVBURVJfSVNfUFJPVE8oX19hZGFwX3R5cGUpICAgCQkJXAorICAgICgoX19hZGFwX3R5cGUpICYgQkZJX0FEQVBURVJfUFJPVE8pCisjZGVmaW5lIEJGSV9BREFQVEVSX0lTX1RUVihfX2FkYXBfdHlwZSkgICAgIAkJCVwKKyAgICAoKF9fYWRhcF90eXBlKSAmIEJGSV9BREFQVEVSX1RUVikKKyNkZWZpbmUgQkZJX0FEQVBURVJfSVNfVU5TVVBQKF9fYWRhcF90eXBlKSAgCQkJXAorICAgICgoX19hZGFwX3R5cGUpICYgQkZJX0FEQVBURVJfVU5TVVBQKQorI2RlZmluZSBCRklfQURBUFRFUl9JU19TUEVDSUFMKF9fYWRhcF90eXBlKSAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoKF9fYWRhcF90eXBlKSAmIChCRklfQURBUFRFUl9UVFYgfCBCRklfQURBUFRFUl9QUk9UTyB8ICAgICBcCisJCQlCRklfQURBUFRFUl9VTlNVUFApKQorCisvKioKKyAqIEJGSV9JT0NfSDJJX0VOQUJMRV9SRVEgJiBCRklfSU9DX0gySV9ESVNBQkxFX1JFUSBtZXNzYWdlcworICovCitzdHJ1Y3QgYmZpX2lvY19jdHJsX3JlcV9zIHsKKwlzdHJ1Y3QgYmZpX21oZHJfcwltaDsKKwl1OAkJCWlvY19jbGFzczsKKwl1OCAgICAgICAgIAlyc3ZkWzNdOworfTsKKworLyoqCisgKiBCRklfSU9DX0kySF9FTkFCTEVfUkVQTFkgJiBCRklfSU9DX0kySF9ESVNBQkxFX1JFUExZIG1lc3NhZ2VzCisgKi8KK3N0cnVjdCBiZmlfaW9jX2N0cmxfcmVwbHlfcyB7CisJc3RydWN0IGJmaV9taGRyX3MgIG1oOwkJLyogIENvbW1vbiBtc2cgaGVhZGVyICAgICAqLworCXU4ICAgICAgICAgc3RhdHVzOwkJLyogIGVuYWJsZS9kaXNhYmxlIHN0YXR1cyAqLworCXU4ICAgICAgICAgcnN2ZFszXTsKK307CisKKyNkZWZpbmUgQkZJX0lPQ19NU0dTWiAgIDgKKy8qKgorICogSDJJIE1lc3NhZ2VzCisgKi8KK3VuaW9uIGJmaV9pb2NfaDJpX21zZ191IHsKKwlzdHJ1Y3QgYmZpX21oZHJfcyAJbWg7CisJc3RydWN0IGJmaV9pb2NfY3RybF9yZXFfcyBlbmFibGVfcmVxOworCXN0cnVjdCBiZmlfaW9jX2N0cmxfcmVxX3MgZGlzYWJsZV9yZXE7CisJc3RydWN0IGJmaV9pb2NfZ2V0YXR0cl9yZXFfcyBnZXRhdHRyX3JlcTsKKwl1MzIgICAgICAgCQltYm94bXNnW0JGSV9JT0NfTVNHU1pdOworfTsKKworLyoqCisgKiBJMkggTWVzc2FnZXMKKyAqLwordW5pb24gYmZpX2lvY19pMmhfbXNnX3UgeworCXN0cnVjdCBiZmlfbWhkcl9zICAgICAgCW1oOworCXN0cnVjdCBiZmlfaW9jX3JkeV9ldmVudF9zIAlyZHlfZXZlbnQ7CisJdTMyICAgICAgIAkJbWJveG1zZ1tCRklfSU9DX01TR1NaXTsKK307CisKKyNwcmFnbWEgcGFjaygpCisKKyNlbmRpZiAvKiBfX0JGSV9JT0NfSF9fICovCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9iZmkvYmZpX2lvY2ZjLmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYmZpL2JmaV9pb2NmYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzNzYwZGYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYmZpL2JmaV9pb2NmYy5oCkBAIC0wLDAgKzEsMTc3IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX19CRklfSU9DRkNfSF9fCisjZGVmaW5lIF9fQkZJX0lPQ0ZDX0hfXworCisjaW5jbHVkZSAiYmZpLmgiCisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc19pb2MuaD4KKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX2lvY2ZjLmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc19ib290Lmg+CisKKyNwcmFnbWEgcGFjaygxKQorCitlbnVtIGJmaV9pb2NmY19oMmlfbXNncyB7CisJQkZJX0lPQ0ZDX0gySV9DRkdfUkVRIAkJPSAxLAorCUJGSV9JT0NGQ19IMklfR0VUX1NUQVRTX1JFUSAJPSAyLAorCUJGSV9JT0NGQ19IMklfQ0xFQVJfU1RBVFNfUkVRCT0gMywKKwlCRklfSU9DRkNfSDJJX1NFVF9JTlRSX1JFUSAJPSA0LAorCUJGSV9JT0NGQ19IMklfVVBEQVRFUV9SRVEgPSA1LAorfTsKKworZW51bSBiZmlfaW9jZmNfaTJoX21zZ3MgeworCUJGSV9JT0NGQ19JMkhfQ0ZHX1JFUExZCQk9IEJGQV9JMkhNKDEpLAorCUJGSV9JT0NGQ19JMkhfR0VUX1NUQVRTX1JTUCAJPSBCRkFfSTJITSgyKSwKKwlCRklfSU9DRkNfSTJIX0NMRUFSX1NUQVRTX1JTUAk9IEJGQV9JMkhNKDMpLAorCUJGSV9JT0NGQ19JMkhfVVBEQVRFUV9SU1AgPSBCRkFfSTJITSg1KSwKK307CisKK3N0cnVjdCBiZmlfaW9jZmNfY2ZnX3MgeworCXU4ICAgICAgICAgbnVtX2NxczsgCS8qICBOdW1iZXIgb2YgQ1FzIHRvIGJlIHVzZWQgICAgICovCisJdTggICAgICAgICBzZW5zZV9idWZfbGVuOwkvKiAgU0NTSSBzZW5zZSBsZW5ndGggICAgICAgICAgICAqLworCXU4ICAgICAgICAgdHJ1bmtfZW5hYmxlZDsJLyogIHBvcnQgdHJ1bmtpbmcgZW5hYmxlZCAgICAgICAgKi8KKwl1OCAgICAgICAgIHRydW5rX3BvcnRzOwkvKiAgdHJ1bmsgcG9ydHMgYml0IG1hcCAgICAgICAgICAqLworCXUzMiAgICAgICAgZW5kaWFuX3NpZzsJLyogIGVuZGlhbiBzaWduYXR1cmUgb2YgaG9zdCAgICAgKi8KKworCS8qKgorCSAqIFJlcXVlc3QgYW5kIHJlc3BvbnNlIGNpcmN1bGFyIHF1ZXVlIGJhc2UgYWRkcmVzc2VzLCBzaXplIGFuZAorCSAqIHNoYWRvdyBpbmRleCBwb2ludGVycy4KKwkgKi8KKwl1bmlvbiBiZmlfYWRkcl91ICByZXFfY3FfYmFbQkZJX0lPQ19NQVhfQ1FTXTsKKwl1bmlvbiBiZmlfYWRkcl91ICByZXFfc2hhZG93X2NpW0JGSV9JT0NfTUFYX0NRU107CisJdTE2ICAgIHJlcV9jcV9lbGVtc1tCRklfSU9DX01BWF9DUVNdOworCXVuaW9uIGJmaV9hZGRyX3UgIHJzcF9jcV9iYVtCRklfSU9DX01BWF9DUVNdOworCXVuaW9uIGJmaV9hZGRyX3UgIHJzcF9zaGFkb3dfcGlbQkZJX0lPQ19NQVhfQ1FTXTsKKwl1MTYgICAgcnNwX2NxX2VsZW1zW0JGSV9JT0NfTUFYX0NRU107CisKKwl1bmlvbiBiZmlfYWRkcl91ICBzdGF0c19hZGRyOwkvKiAgRE1BLWFibGUgYWRkcmVzcyBmb3Igc3RhdHMJICAqLworCXVuaW9uIGJmaV9hZGRyX3UgIGNmZ3JzcF9hZGRyOwkvKiAgY29uZmlnIHJlc3BvbnNlIGRtYSBhZGRyZXNzICAqLworCXVuaW9uIGJmaV9hZGRyX3UgIGlvaW1fc25zYmFzZTsgIC8qICBJTyBzZW5zZSBidWZmZXIgYmFzZSBhZGRyZXNzICovCisJc3RydWN0IGJmYV9pb2NmY19pbnRyX2F0dHJfcyBpbnRyX2F0dHI7IC8qICBJT0MgaW50ZXJydXB0IGF0dHJpYnV0ZXMgKi8KK307CisKKy8qKgorICogQm9vdCB0YXJnZXQgd3duIGluZm9ybWF0aW9uIGZvciB0aGlzIHBvcnQuIFRoaXMgY29udGFpbnMgZWl0aGVyIHRoZSBzdG9yZWQKKyAqIG9yIGRpc2NvdmVyZWQgYm9vdCB0YXJnZXQgcG9ydCB3d25zIGZvciB0aGUgcG9ydC4KKyAqLworc3RydWN0IGJmaV9pb2NmY19ib290d3ducyB7CisJd3duX3QJCXd3bltCRkFfQk9PVF9CT09UTFVOX01BWF07CisJdTgJCW53d25zOworCXU4CQlyc3ZkWzddOworfTsKKworc3RydWN0IGJmaV9pb2NmY19jZmdyc3BfcyB7CisJc3RydWN0IGJmYV9pb2NmY19md2NmZ19zCWZ3Y2ZnOworCXN0cnVjdCBiZmFfaW9jZmNfaW50cl9hdHRyX3MJaW50cl9hdHRyOworCXN0cnVjdCBiZmlfaW9jZmNfYm9vdHd3bnMJYm9vdHd3bnM7Cit9OworCisvKioKKyAqIEJGSV9JT0NGQ19IMklfQ0ZHX1JFUSBtZXNzYWdlCisgKi8KK3N0cnVjdCBiZmlfaW9jZmNfY2ZnX3JlcV9zIHsKKwlzdHJ1Y3QgYmZpX21oZHJfcyAgICAgIG1oOworCXVuaW9uIGJmaV9hZGRyX3UgICAgICBpb2NfY2ZnX2RtYV9hZGRyOworfTsKKworLyoqCisgKiBCRklfSU9DRkNfSTJIX0NGR19SRVBMWSBtZXNzYWdlCisgKi8KK3N0cnVjdCBiZmlfaW9jZmNfY2ZnX3JlcGx5X3MgeworCXN0cnVjdCBiZmlfbWhkcl9zICBtaDsJCS8qICBDb21tb24gbXNnIGhlYWRlciAgICAgICAgICAqLworCXU4ICAgICAgICAgY2ZnX3N1Y2Nlc3M7CS8qICBjZmcgcmVwbHkgc3RhdHVzICAgICAgICAgICAqLworCXU4ICAgICAgICAgbHB1X2JtOwkJLyogIExQVXMgYXNzaWduZWQgZm9yIHRoaXMgSU9DICovCisJdTggICAgICAgICByc3ZkWzJdOworfTsKKworLyoqCisgKiAgQkZJX0lPQ0ZDX0gySV9HRVRfU1RBVFNfUkVRICYgQkZJX0lPQ0ZDX0gySV9DTEVBUl9TVEFUU19SRVEgbWVzc2FnZXMKKyAqLworc3RydWN0IGJmaV9pb2NmY19zdGF0c19yZXFfcyB7CisJc3RydWN0IGJmaV9taGRyX3MgbWg7CQkvKiAgbXNnIGhlYWRlciAgICAgICAgICAgICovCisJdTMyICAgICAgICBtc2d0YWc7CQkvKiAgbXNndGFnIGZvciByZXBseSAgICAgICovCit9OworCisvKioKKyAqIEJGSV9JT0NGQ19JMkhfR0VUX1NUQVRTX1JTUCAmIEJGSV9JT0NGQ19JMkhfQ0xFQVJfU1RBVFNfUlNQIG1lc3NhZ2VzCisgKi8KK3N0cnVjdCBiZmlfaW9jZmNfc3RhdHNfcnNwX3MgeworCXN0cnVjdCBiZmlfbWhkcl9zIG1oOwkJLyogIGNvbW1vbiBtc2cgaGVhZGVyICAgICAqLworCXU4ICAgICAgICAgc3RhdHVzOwkJLyogIHJlcGx5IHN0YXR1cyAgICAgICAgICAqLworCXU4ICAgICAgICAgcnN2ZFszXTsKKwl1MzIgICAgICAgIG1zZ3RhZzsJCS8qICBtc2d0YWcgZm9yIHJlcGx5ICAgICAgKi8KK307CisKKy8qKgorICogQkZJX0lPQ0ZDX0gySV9TRVRfSU5UUl9SRVEgbWVzc2FnZQorICovCitzdHJ1Y3QgYmZpX2lvY2ZjX3NldF9pbnRyX3JlcV9zIHsKKwlzdHJ1Y3QgYmZpX21oZHJfcyBtaDsJCS8qICBjb21tb24gbXNnIGhlYWRlciAgICAgKi8KKwl1OAkJY29hbGVzY2U7CS8qICBlbmFibGUgaW50ciBjb2FsZXNjaW5nKi8KKwl1OCAgICAgICAgIHJzdmRbM107CisJdTE2CWRlbGF5OwkJLyogIGRlbGF5IHRpbWVyIDAuLjExMjV1cyAgKi8KKwl1MTYJbGF0ZW5jeTsJLyogIGxhdGVuY3kgdGltZXIgMC4uMjI1dXMgKi8KK307CisKKy8qKgorICogQkZJX0lPQ0ZDX0gySV9VUERBVEVRX1JFUSBtZXNzYWdlCisgKi8KK3N0cnVjdCBiZmlfaW9jZmNfdXBkYXRlcV9yZXFfcyB7CisJc3RydWN0IGJmaV9taGRyX3MgbWg7CQkvKiAgY29tbW9uIG1zZyBoZWFkZXIgICAgICovCisJdTMyIHJlcXFfYmE7CQkJLyogIHJlcXEgYmFzZSBhZGRyICAgICAgICAqLworCXUzMiByc3BxX2JhOwkJCS8qICByc3BxIGJhc2UgYWRkciAgICAgICAgKi8KKwl1MzIgcmVxcV9zY2k7CQkJLyogIHJlcXEgc2hhZG93IGNpICAgICAgICAqLworCXUzMiByc3BxX3NwaTsJCQkvKiAgcnNwcSBzaGFkb3cgcGkgICAgICAgICovCit9OworCisvKioKKyAqIEJGSV9JT0NGQ19JMkhfVVBEQVRFUV9SU1AgbWVzc2FnZQorICovCitzdHJ1Y3QgYmZpX2lvY2ZjX3VwZGF0ZXFfcnNwX3MgeworCXN0cnVjdCBiZmlfbWhkcl9zIG1oOwkJLyogIGNvbW1vbiBtc2cgaGVhZGVyICAgICAqLworCXU4ICAgICAgICAgc3RhdHVzOwkJLyogIHVwZGF0ZXEgIHN0YXR1cyAgICAgICAqLworCXU4ICAgICAgICAgcnN2ZFszXTsKK307CisKKy8qKgorICogSDJJIE1lc3NhZ2VzCisgKi8KK3VuaW9uIGJmaV9pb2NmY19oMmlfbXNnX3UgeworCXN0cnVjdCBiZmlfbWhkcl9zIAkJbWg7CisJc3RydWN0IGJmaV9pb2NmY19jZmdfcmVxX3MgCWNmZ19yZXE7CisJc3RydWN0IGJmaV9pb2NmY19zdGF0c19yZXFfcyBzdGF0c19nZXQ7CisJc3RydWN0IGJmaV9pb2NmY19zdGF0c19yZXFfcyBzdGF0c19jbHI7CisJc3RydWN0IGJmaV9pb2NmY191cGRhdGVxX3JlcV9zIHVwZGF0ZXFfcmVxOworCXUzMiAgICAgICAJCQltYm94bXNnW0JGSV9JT0NfTVNHU1pdOworfTsKKworLyoqCisgKiBJMkggTWVzc2FnZXMKKyAqLwordW5pb24gYmZpX2lvY2ZjX2kyaF9tc2dfdSB7CisJc3RydWN0IGJmaV9taGRyX3MgICAgICAJCW1oOworCXN0cnVjdCBiZmlfaW9jZmNfY2ZnX3JlcGx5X3MgCQljZmdfcmVwbHk7CisJc3RydWN0IGJmaV9pb2NmY19zdGF0c19yc3BfcyBzdGF0c19nZXRfcnNwOworCXN0cnVjdCBiZmlfaW9jZmNfc3RhdHNfcnNwX3Mgc3RhdHNfY2xyX3JzcDsKKwlzdHJ1Y3QgYmZpX2lvY2ZjX3VwZGF0ZXFfcnNwX3MgdXBkYXRlcV9yc3A7CisJdTMyICAgICAgIAkJCW1ib3htc2dbQkZJX0lPQ19NU0dTWl07Cit9OworCisjcHJhZ21hIHBhY2soKQorCisjZW5kaWYgLyogX19CRklfSU9DRkNfSF9fICovCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9iZmkvYmZpX2xwb3J0LmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYmZpL2JmaV9scG9ydC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5MDEwNjEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYmZpL2JmaV9scG9ydC5oCkBAIC0wLDAgKzEsODkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0JGSV9MUE9SVF9IX18KKyNkZWZpbmUgX19CRklfTFBPUlRfSF9fCisKKyNpbmNsdWRlIDxiZmkvYmZpLmg+CisKKyNwcmFnbWEgcGFjaygxKQorCitlbnVtIGJmaV9scG9ydF9oMmlfbXNncyB7CisJQkZJX0xQT1JUX0gySV9DUkVBVEVfUkVRID0gMSwKKwlCRklfTFBPUlRfSDJJX0RFTEVURV9SRVEgPSAyLAorfTsKKworZW51bSBiZmlfbHBvcnRfaTJoX21zZ3MgeworCUJGSV9MUE9SVF9JMkhfQ1JFQVRFX1JTUCA9IEJGQV9JMkhNKDEpLAorCUJGSV9MUE9SVF9JMkhfREVMRVRFX1JTUCA9IEJGQV9JMkhNKDIpLAorCUJGSV9MUE9SVF9JMkhfT05MSU5FCSAgPSBCRkFfSTJITSgzKSwKKwlCRklfTFBPUlRfSTJIX09GRkxJTkUJICA9IEJGQV9JMkhNKDQpLAorfTsKKworI2RlZmluZSBCRklfTFBPUlRfTUFYX1NZTk5BTUUJNjQKKworZW51bSBiZmlfbHBvcnRfcm9sZV9lIHsKKwlCRklfTFBPUlRfUk9MRV9GQ1BJTQk9IDEsCisJQkZJX0xQT1JUX1JPTEVfRkNQVE0JPSAyLAorCUJGSV9MUE9SVF9ST0xFX0lQRkMJPSA0LAorfTsKKworc3RydWN0IGJmaV9scG9ydF9jcmVhdGVfcmVxX3MgeworCWJmaV9taGRyX3QJbWg7CQkvKiAgY29tbW9uIG1zZyBoZWFkZXIJCSovCisJdTE2CWZhYnJpY19md2hkbDsJLyogIHBhcmVudCBmYWJyaWMgaW5zdGFuY2UJKi8KKwl1OAkJcm9sZXM7CQkvKiAgbHBvcnQgRkMtNCByb2xlcwkJKi8KKwl1OAkJcnN2ZDsKKwl3d25fdAkJcHd3bjsJCS8qICBwb3J0IG5hbWUJCQkqLworCXd3bl90CQlud3duOwkJLyogIG5vZGUgbmFtZQkJCSovCisJdTgJCXN5bW5hbWVbQkZJX0xQT1JUX01BWF9TWU5OQU1FXTsKK307CisKK3N0cnVjdCBiZmlfbHBvcnRfY3JlYXRlX3JzcF9zIHsKKwliZmlfbWhkcl90CW1oOwkJLyogIGNvbW1vbiBtc2cgaGVhZGVyCQkqLworCXU4ICAgICAgICAgc3RhdHVzOwkJLyogIGxwb3J0IGNyZWF0aW9uIHN0YXR1cwkqLworCXU4ICAgICAgICAgcnN2ZFszXTsKK307CisKK3N0cnVjdCBiZmlfbHBvcnRfZGVsZXRlX3JlcV9zIHsKKwliZmlfbWhkcl90CW1oOwkJLyogIGNvbW1vbiBtc2cgaGVhZGVyCQkqLworCXUxNiAgICAgICAgZndfaGFuZGxlOwkvKiAgZmlybXdhcmUgbHBvcnQgaGFuZGxlCSovCisJdTE2ICAgICAgICByc3ZkOworfTsKKworc3RydWN0IGJmaV9scG9ydF9kZWxldGVfcnNwX3MgeworCWJmaV9taGRyX3QJbWg7CQkvKiAgY29tbW9uIG1zZyBoZWFkZXIJCSovCisJdTE2ICAgICAgICBiZmFfaGFuZGxlOwkvKiAgaG9zdCBscG9ydCBoYW5kbGUJCSovCisJdTggICAgICAgICBzdGF0dXM7CQkvKiAgbHBvcnQgZGVsZXRpb24gc3RhdHVzCSovCisJdTggICAgICAgICByc3ZkOworfTsKKwordW5pb24gYmZpX2xwb3J0X2gyaV9tc2dfdSB7CisJYmZpX21zZ190CQkqbXNnOworCXN0cnVjdCBiZmlfbHBvcnRfY3JlYXRlX3JlcV9zCSpjcmVhdGVfcmVxOworCXN0cnVjdCBiZmlfbHBvcnRfZGVsZXRlX3JlcV9zCSpkZWxldGVfcmVxOworfTsKKwordW5pb24gYmZpX2xwb3J0X2kyaF9tc2dfdSB7CisJYmZpX21zZ190CQkqbXNnOworCXN0cnVjdCBiZmlfbHBvcnRfY3JlYXRlX3JzcF9zCSpjcmVhdGVfcnNwOworCXN0cnVjdCBiZmlfbHBvcnRfZGVsZXRlX3JzcF9zCSpkZWxldGVfcnNwOworfTsKKworI3ByYWdtYSBwYWNrKCkKKworI2VuZGlmIC8qIF9fQkZJX0xQT1JUX0hfXyAqLworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYmZpL2JmaV9scHMuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9iZmkvYmZpX2xwcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxNGIwZTMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYmZpL2JmaV9scHMuaApAQCAtMCwwICsxLDk2IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX19CRklfTFBTX0hfXworI2RlZmluZSBfX0JGSV9MUFNfSF9fCisKKyNpbmNsdWRlIDxiZmkvYmZpLmg+CisKKyNwcmFnbWEgcGFjaygxKQorCitlbnVtIGJmaV9scHNfaDJpX21zZ3MgeworCUJGSV9MUFNfSDJJX0xPR0lOX1JFUQk9IDEsCisJQkZJX0xQU19IMklfTE9HT1VUX1JFUQk9IDIsCit9OworCitlbnVtIGJmaV9scHNfaTJoX21zZ3MgeworCUJGSV9MUFNfSDJJX0xPR0lOX1JTUAk9IEJGQV9JMkhNKDEpLAorCUJGSV9MUFNfSDJJX0xPR09VVF9SU1AJPSBCRkFfSTJITSgyKSwKK307CisKK3N0cnVjdCBiZmlfbHBzX2xvZ2luX3JlcV9zIHsKKwlzdHJ1Y3QgYmZpX21oZHJfcyAgbWg7CQkvKiAgY29tbW9uIG1zZyBoZWFkZXIJCSovCisJdTgJCWxwX3RhZzsKKwl1OAkJYWxwYTsKKwl1MTYJcGR1X3NpemU7CisJd3duX3QJCXB3d247CisJd3duX3QJCW53d247CisJdTgJCWZkaXNjOworCXU4CQlhdXRoX2VuOworCXU4CQlyc3ZkWzJdOworfTsKKworc3RydWN0IGJmaV9scHNfbG9naW5fcnNwX3MgeworCXN0cnVjdCBiZmlfbWhkcl9zICBtaDsJCS8qICBjb21tb24gbXNnIGhlYWRlcgkJKi8KKwl1OAkJbHBfdGFnOworCXU4CQlzdGF0dXM7CisJdTgJCWxzcmp0X3JzbjsKKwl1OAkJbHNyanRfZXhwbDsKKwl3d25fdAkJcG9ydF9uYW1lOworCXd3bl90CQlub2RlX25hbWU7CisJdTE2CWJiX2NyZWRpdDsKKwl1OAkJZl9wb3J0OworCXU4CQlucGl2X2VuOworCXUzMglscF9waWQgOiAyNDsKKwl1MzIJYXV0aF9yZXEgOiA4OworCW1hY190CQlscF9tYWM7CisJbWFjX3QJCWZjZl9tYWM7CisJdTgJCWV4dF9zdGF0dXM7CisJdTggIAlicmNkX3N3aXRjaDsvKiAgYXR0YWNoZWQgcGVlciBpcyBicmNkIHN3aXRjaAkqLworfTsKKworc3RydWN0IGJmaV9scHNfbG9nb3V0X3JlcV9zIHsKKwlzdHJ1Y3QgYmZpX21oZHJfcyAgbWg7CQkvKiAgY29tbW9uIG1zZyBoZWFkZXIJCSovCisJdTgJCWxwX3RhZzsKKwl1OAkJcnN2ZFszXTsKKwl3d25fdAkJcG9ydF9uYW1lOworfTsKKworc3RydWN0IGJmaV9scHNfbG9nb3V0X3JzcF9zIHsKKwlzdHJ1Y3QgYmZpX21oZHJfcyAgbWg7CQkvKiAgY29tbW9uIG1zZyBoZWFkZXIJCSovCisJdTgJCWxwX3RhZzsKKwl1OAkJc3RhdHVzOworCXU4CQlyc3ZkWzJdOworfTsKKwordW5pb24gYmZpX2xwc19oMmlfbXNnX3UgeworCXN0cnVjdCBiZmlfbWhkcl9zCQkqbXNnOworCXN0cnVjdCBiZmlfbHBzX2xvZ2luX3JlcV9zCSpsb2dpbl9yZXE7CisJc3RydWN0IGJmaV9scHNfbG9nb3V0X3JlcV9zCSpsb2dvdXRfcmVxOworfTsKKwordW5pb24gYmZpX2xwc19pMmhfbXNnX3UgeworCXN0cnVjdCBiZmlfbXNnX3MJCSptc2c7CisJc3RydWN0IGJmaV9scHNfbG9naW5fcnNwX3MJKmxvZ2luX3JzcDsKKwlzdHJ1Y3QgYmZpX2xwc19sb2dvdXRfcnNwX3MJKmxvZ291dF9yc3A7Cit9OworCisjcHJhZ21hIHBhY2soKQorCisjZW5kaWYgLyogX19CRklfTFBTX0hfXyAqLworCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9iZmkvYmZpX3BvcnQuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9iZmkvYmZpX3BvcnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZWMzYmVhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2JmaS9iZmlfcG9ydC5oCkBAIC0wLDAgKzEsMTE1IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaWZuZGVmIF9fQkZJX1BPUlRfSF9fCisjZGVmaW5lIF9fQkZJX1BPUlRfSF9fCisKKyNpbmNsdWRlIDxiZmkvYmZpLmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc19wcG9ydC5oPgorCisjcHJhZ21hIHBhY2soMSkKKworZW51bSBiZmlfcG9ydF9oMmkgeworCUJGSV9QT1JUX0gySV9FTkFCTEVfUkVRCQk9ICgxKSwKKwlCRklfUE9SVF9IMklfRElTQUJMRV9SRVEJPSAoMiksCisJQkZJX1BPUlRfSDJJX0dFVF9TVEFUU19SRVEJPSAoMyksCisJQkZJX1BPUlRfSDJJX0NMRUFSX1NUQVRTX1JFUQk9ICg0KSwKK307CisKK2VudW0gYmZpX3BvcnRfaTJoIHsKKwlCRklfUE9SVF9JMkhfRU5BQkxFX1JTUAkJPSBCRkFfSTJITSgxKSwKKwlCRklfUE9SVF9JMkhfRElTQUJMRV9SU1AJPSBCRkFfSTJITSgyKSwKKwlCRklfUE9SVF9JMkhfR0VUX1NUQVRTX1JTUAk9IEJGQV9JMkhNKDMpLAorCUJGSV9QT1JUX0kySF9DTEVBUl9TVEFUU19SU1AJPSBCRkFfSTJITSg0KSwKK307CisKKy8qKgorICogR2VuZXJpYyBSRVEgdHlwZQorICovCitzdHJ1Y3QgYmZpX3BvcnRfZ2VuZXJpY19yZXFfcyB7CisJc3RydWN0IGJmaV9taGRyX3MgIG1oOwkJLyogIG1zZyBoZWFkZXIJCQkgICAgKi8KKwl1MzIgICAgICAgIG1zZ3RhZzsJCS8qICBtc2d0YWcgZm9yIHJlcGx5CQkgICAgKi8KKwl1MzIJcnN2ZDsKK307CisKKy8qKgorICogR2VuZXJpYyBSU1AgdHlwZQorICovCitzdHJ1Y3QgYmZpX3BvcnRfZ2VuZXJpY19yc3BfcyB7CisJc3RydWN0IGJmaV9taGRyX3MgIG1oOwkJLyogIGNvbW1vbiBtc2cgaGVhZGVyCQkgICAgKi8KKwl1OCAgICAgICAgIHN0YXR1czsJCS8qICBwb3J0IGVuYWJsZSBzdGF0dXMJCSAgICAqLworCXU4ICAgICAgICAgcnN2ZFszXTsKKwl1MzIgICAgICAgIG1zZ3RhZzsJCS8qICBtc2d0YWcgZm9yIHJlcGx5CQkgICAgKi8KK307CisKKy8qKgorICogQHRvZG8KKyAqIEJGSV9QT1JUX0gySV9FTkFCTEVfUkVRCisgKi8KKworLyoqCisgKiBAdG9kbworICogQkZJX1BPUlRfSTJIX0VOQUJMRV9SU1AKKyAqLworCisvKioKKyAqIEJGSV9QT1JUX0gySV9ESVNBQkxFX1JFUQorICovCisKKy8qKgorICogQkZJX1BPUlRfSTJIX0RJU0FCTEVfUlNQCisgKi8KKworLyoqCisgKiBCRklfUE9SVF9IMklfR0VUX1NUQVRTX1JFUQorICovCitzdHJ1Y3QgYmZpX3BvcnRfZ2V0X3N0YXRzX3JlcV9zIHsKKwlzdHJ1Y3QgYmZpX21oZHJfcyAgbWg7CQkvKiAgY29tbW9uIG1zZyBoZWFkZXIJCSAgICAqLworCXVuaW9uIGJmaV9hZGRyX3UgICBkbWFfYWRkcjsKK307CisKKy8qKgorICogQkZJX1BPUlRfSTJIX0dFVF9TVEFUU19SU1AKKyAqLworCisvKioKKyAqIEJGSV9QT1JUX0gySV9DTEVBUl9TVEFUU19SRVEKKyAqLworCisvKioKKyAqIEJGSV9QT1JUX0kySF9DTEVBUl9TVEFUU19SU1AKKyAqLworCit1bmlvbiBiZmlfcG9ydF9oMmlfbXNnX3UgeworCXN0cnVjdCBiZmlfbWhkcl9zCQltaDsKKwlzdHJ1Y3QgYmZpX3BvcnRfZ2VuZXJpY19yZXFfcwllbmFibGVfcmVxOworCXN0cnVjdCBiZmlfcG9ydF9nZW5lcmljX3JlcV9zCWRpc2FibGVfcmVxOworCXN0cnVjdCBiZmlfcG9ydF9nZXRfc3RhdHNfcmVxX3MJZ2V0c3RhdHNfcmVxOworCXN0cnVjdCBiZmlfcG9ydF9nZW5lcmljX3JlcV9zCWNsZWFyc3RhdHNfcmVxOworfTsKKwordW5pb24gYmZpX3BvcnRfaTJoX21zZ191IHsKKwlzdHJ1Y3QgYmZpX21oZHJfcyAgICAgICAgIAltaDsKKwlzdHJ1Y3QgYmZpX3BvcnRfZ2VuZXJpY19yc3BfcwllbmFibGVfcnNwOworCXN0cnVjdCBiZmlfcG9ydF9nZW5lcmljX3JzcF9zCWRpc2FibGVfcnNwOworCXN0cnVjdCBiZmlfcG9ydF9nZW5lcmljX3JzcF9zCWdldHN0YXRzX3JzcDsKKwlzdHJ1Y3QgYmZpX3BvcnRfZ2VuZXJpY19yc3BfcwljbGVhcnN0YXRzX3JzcDsKK307CisKKyNwcmFnbWEgcGFjaygpCisKKyNlbmRpZiAvKiBfX0JGSV9QT1JUX0hfXyAqLworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYmZpL2JmaV9wcG9ydC5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2JmaS9iZmlfcHBvcnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTZkMjQ2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2JmaS9iZmlfcHBvcnQuaApAQCAtMCwwICsxLDE4NCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2lmbmRlZiBfX0JGSV9QUE9SVF9IX18KKyNkZWZpbmUgX19CRklfUFBPUlRfSF9fCisKKyNpbmNsdWRlIDxiZmkvYmZpLmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc19wcG9ydC5oPgorCisjcHJhZ21hIHBhY2soMSkKKworZW51bSBiZmlfcHBvcnRfaDJpIHsKKwlCRklfUFBPUlRfSDJJX0VOQUJMRV9SRVEJCT0gKDEpLAorCUJGSV9QUE9SVF9IMklfRElTQUJMRV9SRVEJCT0gKDIpLAorCUJGSV9QUE9SVF9IMklfR0VUX1NUQVRTX1JFUQkJPSAoMyksCisJQkZJX1BQT1JUX0gySV9DTEVBUl9TVEFUU19SRVEJPSAoNCksCisJQkZJX1BQT1JUX0gySV9TRVRfU1ZDX1BBUkFNU19SRVEJPSAoNSksCisJQkZJX1BQT1JUX0gySV9FTkFCTEVfUlhfVkZfVEFHX1JFUQk9ICg2KSwKKwlCRklfUFBPUlRfSDJJX0VOQUJMRV9UWF9WRl9UQUdfUkVRCT0gKDcpLAorCUJGSV9QUE9SVF9IMklfR0VUX1FPU19TVEFUU19SRVEJCT0gKDgpLAorCUJGSV9QUE9SVF9IMklfQ0xFQVJfUU9TX1NUQVRTX1JFUQk9ICg5KSwKK307CisKK2VudW0gYmZpX3Bwb3J0X2kyaCB7CisJQkZJX1BQT1JUX0kySF9FTkFCTEVfUlNQCQk9IEJGQV9JMkhNKDEpLAorCUJGSV9QUE9SVF9JMkhfRElTQUJMRV9SU1AJCT0gQkZBX0kySE0oMiksCisJQkZJX1BQT1JUX0kySF9HRVRfU1RBVFNfUlNQCQk9IEJGQV9JMkhNKDMpLAorCUJGSV9QUE9SVF9JMkhfQ0xFQVJfU1RBVFNfUlNQCT0gQkZBX0kySE0oNCksCisJQkZJX1BQT1JUX0kySF9TRVRfU1ZDX1BBUkFNU19SU1AJPSBCRkFfSTJITSg1KSwKKwlCRklfUFBPUlRfSTJIX0VOQUJMRV9SWF9WRl9UQUdfUlNQCT0gQkZBX0kySE0oNiksCisJQkZJX1BQT1JUX0kySF9FTkFCTEVfVFhfVkZfVEFHX1JTUAk9IEJGQV9JMkhNKDcpLAorCUJGSV9QUE9SVF9JMkhfRVZFTlQJCQk9IEJGQV9JMkhNKDgpLAorCUJGSV9QUE9SVF9JMkhfR0VUX1FPU19TVEFUU19SU1AJCT0gQkZBX0kySE0oOSksCisJQkZJX1BQT1JUX0kySF9DTEVBUl9RT1NfU1RBVFNfUlNQCT0gQkZBX0kySE0oMTApLAorfTsKKworLyoqCisgKiBHZW5lcmljIFJFUSB0eXBlCisgKi8KK3N0cnVjdCBiZmlfcHBvcnRfZ2VuZXJpY19yZXFfcyB7CisJc3RydWN0IGJmaV9taGRyX3MgIG1oOwkJLyogIG1zZyBoZWFkZXIJCQkgICAgKi8KKwl1MzIgICAgICAgIG1zZ3RhZzsJCS8qICBtc2d0YWcgZm9yIHJlcGx5CQkgICAgKi8KK307CisKKy8qKgorICogR2VuZXJpYyBSU1AgdHlwZQorICovCitzdHJ1Y3QgYmZpX3Bwb3J0X2dlbmVyaWNfcnNwX3MgeworCXN0cnVjdCBiZmlfbWhkcl9zICBtaDsJCS8qICBjb21tb24gbXNnIGhlYWRlcgkJICAgICovCisJdTggICAgICAgICBzdGF0dXM7CQkvKiAgcG9ydCBlbmFibGUgc3RhdHVzCQkgICAgKi8KKwl1OCAgICAgICAgIHJzdmRbM107CisJdTMyICAgICAgICBtc2d0YWc7CQkvKiAgbXNndGFnIGZvciByZXBseQkJICAgICovCit9OworCisvKioKKyAqIEJGSV9QUE9SVF9IMklfRU5BQkxFX1JFUQorICovCitzdHJ1Y3QgYmZpX3Bwb3J0X2VuYWJsZV9yZXFfcyB7CisJc3RydWN0IGJmaV9taGRyX3MgIG1oOwkJLyogIG1zZyBoZWFkZXIJCQkgICAgKi8KKwl1MzIgICAgICAgIHJzdmQxOworCXd3bl90ICAgICAgICAgICBud3duOwkJLyogIG5vZGUgd3duIG9mIHBoeXNpY2FsIHBvcnQJICAgICovCisJd3duX3QgICAgICAgICAgIHB3d247CQkvKiAgcG9ydCB3d24gb2YgcGh5c2ljYWwgcG9ydAkgICAgKi8KKwlzdHJ1Y3QgYmZhX3Bwb3J0X2NmZ19zIHBvcnRfY2ZnOwkvKiAgcG9ydCBjb25maWd1cmF0aW9uCSAgICAqLworCXVuaW9uIGJmaV9hZGRyX3UgIHN0YXRzX2RtYV9hZGRyOwkvKiAgRE1BIGFkZHJlc3MgZm9yIHN0YXRzICAqLworCXUzMiAgICAgICAgbXNndGFnOwkJLyogIG1zZ3RhZyBmb3IgcmVwbHkJCSAgICAqLworCXUzMiAgICAgICAgcnN2ZDI7Cit9OworCisvKioKKyAqIEJGSV9QUE9SVF9JMkhfRU5BQkxFX1JTUAorICovCisjZGVmaW5lIGJmaV9wcG9ydF9lbmFibGVfcnNwX3Qgc3RydWN0IGJmaV9wcG9ydF9nZW5lcmljX3JzcF9zCisKKy8qKgorICogQkZJX1BQT1JUX0gySV9ESVNBQkxFX1JFUQorICovCisjZGVmaW5lIGJmaV9wcG9ydF9kaXNhYmxlX3JlcV90IHN0cnVjdCBiZmlfcHBvcnRfZ2VuZXJpY19yZXFfcworCisvKioKKyAqIEJGSV9QUE9SVF9JMkhfRElTQUJMRV9SU1AKKyAqLworI2RlZmluZSBiZmlfcHBvcnRfZGlzYWJsZV9yc3BfdCBzdHJ1Y3QgYmZpX3Bwb3J0X2dlbmVyaWNfcnNwX3MKKworLyoqCisgKiBCRklfUFBPUlRfSDJJX0dFVF9TVEFUU19SRVEKKyAqLworI2RlZmluZSBiZmlfcHBvcnRfZ2V0X3N0YXRzX3JlcV90IHN0cnVjdCBiZmlfcHBvcnRfZ2VuZXJpY19yZXFfcworCisvKioKKyAqIEJGSV9QUE9SVF9JMkhfR0VUX1NUQVRTX1JTUAorICovCisjZGVmaW5lIGJmaV9wcG9ydF9nZXRfc3RhdHNfcnNwX3Qgc3RydWN0IGJmaV9wcG9ydF9nZW5lcmljX3JzcF9zCisKKy8qKgorICogQkZJX1BQT1JUX0gySV9DTEVBUl9TVEFUU19SRVEKKyAqLworI2RlZmluZSBiZmlfcHBvcnRfY2xlYXJfc3RhdHNfcmVxX3Qgc3RydWN0IGJmaV9wcG9ydF9nZW5lcmljX3JlcV9zCisKKy8qKgorICogQkZJX1BQT1JUX0kySF9DTEVBUl9TVEFUU19SU1AKKyAqLworI2RlZmluZSBiZmlfcHBvcnRfY2xlYXJfc3RhdHNfcnNwX3Qgc3RydWN0IGJmaV9wcG9ydF9nZW5lcmljX3JzcF9zCisKKy8qKgorICogQkZJX1BQT1JUX0gySV9HRVRfUU9TX1NUQVRTX1JFUQorICovCisjZGVmaW5lIGJmaV9wcG9ydF9nZXRfcW9zX3N0YXRzX3JlcV90IHN0cnVjdCBiZmlfcHBvcnRfZ2VuZXJpY19yZXFfcworCisvKioKKyAqIEJGSV9QUE9SVF9IMklfR0VUX1FPU19TVEFUU19SU1AKKyAqLworI2RlZmluZSBiZmlfcHBvcnRfZ2V0X3Fvc19zdGF0c19yc3BfdCBzdHJ1Y3QgYmZpX3Bwb3J0X2dlbmVyaWNfcnNwX3MKKworLyoqCisgKiBCRklfUFBPUlRfSDJJX0NMRUFSX1FPU19TVEFUU19SRVEKKyAqLworI2RlZmluZSBiZmlfcHBvcnRfY2xlYXJfcW9zX3N0YXRzX3JlcV90IHN0cnVjdCBiZmlfcHBvcnRfZ2VuZXJpY19yZXFfcworCisvKioKKyAqIEJGSV9QUE9SVF9IMklfQ0xFQVJfUU9TX1NUQVRTX1JTUAorICovCisjZGVmaW5lIGJmaV9wcG9ydF9jbGVhcl9xb3Nfc3RhdHNfcnNwX3Qgc3RydWN0IGJmaV9wcG9ydF9nZW5lcmljX3JzcF9zCisKKy8qKgorICogQkZJX1BQT1JUX0gySV9TRVRfU1ZDX1BBUkFNU19SRVEKKyAqLworc3RydWN0IGJmaV9wcG9ydF9zZXRfc3ZjX3BhcmFtc19yZXFfcyB7CisJc3RydWN0IGJmaV9taGRyX3MgIG1oOwkJLyogIG1zZyBoZWFkZXIgKi8KKwl1MTYgICAgICAgIHR4X2JiY3JlZGl0OwkvKiAgVHggY3JlZGl0cyAqLworCXUxNiAgICAgICAgcnN2ZDsKK307CisKKy8qKgorICogQkZJX1BQT1JUX0kySF9TRVRfU1ZDX1BBUkFNU19SU1AKKyAqLworCisvKioKKyAqIEJGSV9QUE9SVF9JMkhfRVZFTlQKKyAqLworc3RydWN0IGJmaV9wcG9ydF9ldmVudF9zIHsKKwlzdHJ1Y3QgYmZpX21oZHJfcyAJbWg7CS8qICBjb21tb24gbXNnIGhlYWRlciAqLworCXN0cnVjdCBiZmFfcHBvcnRfbGlua19zCWxpbmtfc3RhdGU7Cit9OworCit1bmlvbiBiZmlfcHBvcnRfaDJpX21zZ191IHsKKwlzdHJ1Y3QgYmZpX21oZHJfcwkJCSptaGRyOworCXN0cnVjdCBiZmlfcHBvcnRfZW5hYmxlX3JlcV9zCQkqcGVuYWJsZTsKKwlzdHJ1Y3QgYmZpX3Bwb3J0X2dlbmVyaWNfcmVxX3MJCSpwZGlzYWJsZTsKKwlzdHJ1Y3QgYmZpX3Bwb3J0X2dlbmVyaWNfcmVxX3MJCSpwZ2V0c3RhdHM7CisJc3RydWN0IGJmaV9wcG9ydF9nZW5lcmljX3JlcV9zCQkqcGNsZWFyc3RhdHM7CisJc3RydWN0IGJmaV9wcG9ydF9zZXRfc3ZjX3BhcmFtc19yZXFfcwkqcHNldHN2Y3BhcmFtczsKKwlzdHJ1Y3QgYmZpX3Bwb3J0X2dldF9xb3Nfc3RhdHNfcmVxX3MJKnBnZXRxb3NzdGF0czsKKwlzdHJ1Y3QgYmZpX3Bwb3J0X2dlbmVyaWNfcmVxX3MJCSpwY2xlYXJxb3NzdGF0czsKK307CisKK3VuaW9uIGJmaV9wcG9ydF9pMmhfbXNnX3UgeworCXN0cnVjdCBiZmlfbXNnX3MJCQkqbXNnOworCXN0cnVjdCBiZmlfcHBvcnRfZ2VuZXJpY19yc3BfcwkJKmVuYWJsZV9yc3A7CisJc3RydWN0IGJmaV9wcG9ydF9kaXNhYmxlX3JzcF9zCQkqZGlzYWJsZV9yc3A7CisJc3RydWN0IGJmaV9wcG9ydF9nZW5lcmljX3JzcF9zCQkqZ2V0c3RhdHNfcnNwOworCXN0cnVjdCBiZmlfcHBvcnRfY2xlYXJfc3RhdHNfcnNwX3MJKmNsZWFyc3RhdHNfcnNwOworCXN0cnVjdCBiZmlfcHBvcnRfc2V0X3N2Y19wYXJhbXNfcnNwX3MJKnNldHN2Y3BhcmFzbV9yc3A7CisJc3RydWN0IGJmaV9wcG9ydF9nZXRfcW9zX3N0YXRzX3JzcF9zCSpnZXRxb3NzdGF0c19yc3A7CisJc3RydWN0IGJmaV9wcG9ydF9jbGVhcl9xb3Nfc3RhdHNfcnNwX3MJKmNsZWFycW9zc3RhdHNfcnNwOworCXN0cnVjdCBiZmlfcHBvcnRfZXZlbnRfcwkJKmV2ZW50OworfTsKKworI3ByYWdtYSBwYWNrKCkKKworI2VuZGlmIC8qIF9fQkZJX1BQT1JUX0hfXyAqLworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYmZpL2JmaV9ycG9ydC5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2JmaS9iZmlfcnBvcnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTIwZjU1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2JmaS9iZmlfcnBvcnQuaApAQCAtMCwwICsxLDEwNCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9fQkZJX1JQT1JUX0hfXworI2RlZmluZSBfX0JGSV9SUE9SVF9IX18KKworI2luY2x1ZGUgPGJmaS9iZmkuaD4KKworI3ByYWdtYSBwYWNrKDEpCisKK2VudW0gYmZpX3Jwb3J0X2gyaV9tc2dzIHsKKwlCRklfUlBPUlRfSDJJX0NSRUFURV9SRVEgPSAxLAorCUJGSV9SUE9SVF9IMklfREVMRVRFX1JFUSA9IDIsCisJQkZJX1JQT1JUX0gySV9TRVRfU1BFRURfUkVRICA9IDMsCit9OworCitlbnVtIGJmaV9ycG9ydF9pMmhfbXNncyB7CisJQkZJX1JQT1JUX0kySF9DUkVBVEVfUlNQID0gQkZBX0kySE0oMSksCisJQkZJX1JQT1JUX0kySF9ERUxFVEVfUlNQID0gQkZBX0kySE0oMiksCisJQkZJX1JQT1JUX0kySF9RT1NfU0NOICAgID0gQkZBX0kySE0oMyksCit9OworCitzdHJ1Y3QgYmZpX3Jwb3J0X2NyZWF0ZV9yZXFfcyB7CisJc3RydWN0IGJmaV9taGRyX3MgIG1oOwkJLyogIGNvbW1vbiBtc2cgaGVhZGVyCQkqLworCXUxNiAgICAgICAgYmZhX2hhbmRsZTsJLyogIGhvc3QgcnBvcnQgaGFuZGxlCQkqLworCXUxNiAgICAgICAgbWF4X2ZybXN6OwkvKiAgbWF4IHJjdiBwZHUgc2l6ZQkJKi8KKwl1MzIgICAgICAgIHBpZCAgICAgICA6IDI0LAkvKiAgcmVtb3RlIHBvcnQgSUQJCSovCisJCQlscF90YWcgICAgOiA4OwkvKiAgbG9jYWwgcG9ydCB0YWcJCSovCisJdTMyICAgICAgICBsb2NhbF9waWQgOiAyNCwJLyogIGxvY2FsIHBvcnQgSUQJCSovCisJCQljaXNjICAgICAgOiA4OworCXU4ICAgICAgICAgZmNfY2xhc3M7CS8qICBzdXBwb3J0ZWQgRkMgY2xhc3NlcwkqLworCXU4ICAgICAgICAgdmZfZW47CQkvKiAgdmlydHVhbCBmYWJyaWMgZW5hYmxlCSovCisJdTE2ICAgICAgICB2Zl9pZDsJCS8qICB2aXJ0dWFsIGZhYnJpYyBJRAkJKi8KK307CisKK3N0cnVjdCBiZmlfcnBvcnRfY3JlYXRlX3JzcF9zIHsKKwlzdHJ1Y3QgYmZpX21oZHJfcyAgbWg7CQkvKiAgY29tbW9uIG1zZyBoZWFkZXIJCSovCisJdTggICAgICAgICBzdGF0dXM7CQkvKiAgcnBvcnQgY3JlYXRpb24gc3RhdHVzCSovCisJdTggICAgICAgICByc3ZkWzNdOworCXUxNiAgICAgICAgYmZhX2hhbmRsZTsJLyogIGhvc3QgcnBvcnQgaGFuZGxlCQkqLworCXUxNiAgICAgICAgZndfaGFuZGxlOwkvKiAgZmlybXdhcmUgcnBvcnQgaGFuZGxlCSovCisJc3RydWN0IGJmYV9ycG9ydF9xb3NfYXR0cl9zIHFvc19hdHRyOyAgLyogUW9TIEF0dHJpYnV0ZXMgKi8KK307CisKK3N0cnVjdCBiZmFfcnBvcnRfc3BlZWRfcmVxX3MgeworCXN0cnVjdCBiZmlfbWhkcl9zICBtaDsJCS8qICBjb21tb24gbXNnIGhlYWRlcgkJKi8KKwl1MTYgICAgICAgIGZ3X2hhbmRsZTsJLyogIGZpcm13YXJlIHJwb3J0IGhhbmRsZQkqLworCXU4CQlzcGVlZDsJCS8qISBycG9ydCdzIHNwZWVkIHZpYSBSUFNDICAqLworCXU4CQlyc3ZkOworfTsKKworc3RydWN0IGJmaV9ycG9ydF9kZWxldGVfcmVxX3MgeworCXN0cnVjdCBiZmlfbWhkcl9zICBtaDsJCS8qICBjb21tb24gbXNnIGhlYWRlcgkJKi8KKwl1MTYgICAgICAgIGZ3X2hhbmRsZTsJLyogIGZpcm13YXJlIHJwb3J0IGhhbmRsZQkqLworCXUxNiAgICAgICAgcnN2ZDsKK307CisKK3N0cnVjdCBiZmlfcnBvcnRfZGVsZXRlX3JzcF9zIHsKKwlzdHJ1Y3QgYmZpX21oZHJfcyAgbWg7CQkvKiAgY29tbW9uIG1zZyBoZWFkZXIJCSovCisJdTE2ICAgICAgICBiZmFfaGFuZGxlOwkvKiAgaG9zdCBycG9ydCBoYW5kbGUJCSovCisJdTggICAgICAgICBzdGF0dXM7CQkvKiAgcnBvcnQgZGVsZXRpb24gc3RhdHVzCSovCisJdTggICAgICAgICByc3ZkOworfTsKKworc3RydWN0IGJmaV9ycG9ydF9xb3Nfc2NuX3MgeworCXN0cnVjdCBiZmlfbWhkcl9zICBtaDsJCS8qICBjb21tb24gbXNnIGhlYWRlcgkJKi8KKwl1MTYgICAgICAgIGJmYV9oYW5kbGU7CS8qICBob3N0IHJwb3J0IGhhbmRsZQkJKi8KKwl1MTYgICAgICAgIHJzdmQ7CisJc3RydWN0IGJmYV9ycG9ydF9xb3NfYXR0cl9zIG9sZF9xb3NfYXR0cjsgIC8qIE9sZCBRb1MgQXR0cmlidXRlcyAqLworCXN0cnVjdCBiZmFfcnBvcnRfcW9zX2F0dHJfcyBuZXdfcW9zX2F0dHI7ICAvKiBOZXcgUW9TIEF0dHJpYnV0ZXMgKi8KK307CisKK3VuaW9uIGJmaV9ycG9ydF9oMmlfbXNnX3UgeworCXN0cnVjdCBiZmlfbXNnX3MgCQkqbXNnOworCXN0cnVjdCBiZmlfcnBvcnRfY3JlYXRlX3JlcV9zCSpjcmVhdGVfcmVxOworCXN0cnVjdCBiZmlfcnBvcnRfZGVsZXRlX3JlcV9zCSpkZWxldGVfcmVxOworCXN0cnVjdCBiZmlfcnBvcnRfc3BlZWRfcmVxX3MJKnNwZWVkX3JlcTsKK307CisKK3VuaW9uIGJmaV9ycG9ydF9pMmhfbXNnX3UgeworCXN0cnVjdCBiZmlfbXNnX3MgCQkqbXNnOworCXN0cnVjdCBiZmlfcnBvcnRfY3JlYXRlX3JzcF9zCSpjcmVhdGVfcnNwOworCXN0cnVjdCBiZmlfcnBvcnRfZGVsZXRlX3JzcF9zCSpkZWxldGVfcnNwOworCXN0cnVjdCBiZmlfcnBvcnRfcW9zX3Njbl9zCSpxb3Nfc2NuX2V2dDsKK307CisKKyNwcmFnbWEgcGFjaygpCisKKyNlbmRpZiAvKiBfX0JGSV9SUE9SVF9IX18gKi8KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2JmaS9iZmlfdWYuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9iZmkvYmZpX3VmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjMyOGE5ZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9iZmkvYmZpX3VmLmgKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9fQkZJX1VGX0hfXworI2RlZmluZSBfX0JGSV9VRl9IX18KKworI2luY2x1ZGUgImJmaS5oIgorCisjcHJhZ21hIHBhY2soMSkKKworZW51bSBiZmlfdWZfaDJpIHsKKwlCRklfVUZfSDJJX0JVRl9QT1NUID0gMSwKK307CisKK2VudW0gYmZpX3VmX2kyaCB7CisJQkZJX1VGX0kySF9GUk1fUkNWRCA9IEJGQV9JMkhNKDEpLAorfTsKKworI2RlZmluZSBCRkFfVUZfTUFYX1NHRVMJMgorCitzdHJ1Y3QgYmZpX3VmX2J1Zl9wb3N0X3MgeworCXN0cnVjdCBiZmlfbWhkcl9zICBtaDsJCS8qICBDb21tb24gbXNnIGhlYWRlcgkJKi8KKwl1MTYgICAgICAgIGJ1Zl90YWc7CS8qICBidWZmZXIgdGFnCQkJKi8KKwl1MTYgICAgICAgIGJ1Zl9sZW47CS8qICB0b3RhbCBidWZmZXIgbGVuZ3RoCSovCisJc3RydWN0IGJmaV9zZ2VfcyAgIHNnZVtCRkFfVUZfTUFYX1NHRVNdOyAvKiAgYnVmZmVyIERNQSBTR0VzCSovCit9OworCitzdHJ1Y3QgYmZpX3VmX2ZybV9yY3ZkX3MgeworCXN0cnVjdCBiZmlfbWhkcl9zICBtaDsJCS8qICBDb21tb24gbXNnIGhlYWRlcgkJKi8KKwl1MTYgICAgICAgIGJ1Zl90YWc7CS8qICBidWZmZXIgdGFnCQkJKi8KKwl1MTYgICAgICAgIHJzdmQ7CisJdTE2ICAgICAgICBmcm1fbGVuOwkvKiAgcmVjZWl2ZWQgZnJhbWUgbGVuZ3RoIAkqLworCXUxNiAgICAgICAgeGZyX2xlbjsJLyogIHRyYW5mZXJyZWQgbGVuZ3RoCQkqLworfTsKKworI3ByYWdtYSBwYWNrKCkKKworI2VuZGlmIC8qIF9fQkZJX1VGX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2NuYS9iZmFfY25hX3RyY21vZC5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2NuYS9iZmFfY25hX3RyY21vZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzYmE3MDYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvY25hL2JmYV9jbmFfdHJjbW9kLmgKQEAgLTAsMCArMSwzNiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisvKioKKyAqICBiZmFfY25hX3RyY21vZC5oIENOQSB0cmFjZSBtb2R1bGVzCisgKi8KKworI2lmbmRlZiBfX0JGQV9DTkFfVFJDTU9EX0hfXworI2RlZmluZSBfX0JGQV9DTkFfVFJDTU9EX0hfXworCisjaW5jbHVkZSA8Y3MvYmZhX3RyYy5oPgorCisvKgorICogISEhIE9ubHkgYXBwZW5kIHRvIHRoZSBlbnVtcyBkZWZpbmVkIGhlcmUgdG8gYXZvaWQgYW55IHZlcnNpb25pbmcKKyAqICEhISBuZWVkZWQgYmV0d2VlbiB0cmFjZSB1dGlsaXR5IGFuZCBkcml2ZXIgdmVyc2lvbgorICovCitlbnVtIHsKKwlCRkFfVFJDX0NOQV9DRUUJCT0gMSwKKwlCRkFfVFJDX0NOQV9QT1JUCT0gMiwKK307CisKKyNlbmRpZiAvKiBfX0JGQV9DTkFfVFJDTU9EX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2NuYS9jZWUvYmZhX2NlZS5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2NuYS9jZWUvYmZhX2NlZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3ZjI5N2YKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvY25hL2NlZS9iZmFfY2VlLmgKQEAgLTAsMCArMSw3NyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9fQkZBX0NFRV9IX18KKyNkZWZpbmUgX19CRkFfQ0VFX0hfXworCisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc19jZWUuaD4KKyNpbmNsdWRlIDxiZmFfaW9jLmg+CisjaW5jbHVkZSA8Y3MvYmZhX3RyYy5oPgorI2luY2x1ZGUgPGNzL2JmYV9sb2cuaD4KKwordHlwZWRlZiB2b2lkICgqYmZhX2NlZV9nZXRfYXR0cl9jYmZuX3QpICh2b2lkICpkZXYsIGJmYV9zdGF0dXNfdCBzdGF0dXMpOwordHlwZWRlZiB2b2lkICgqYmZhX2NlZV9nZXRfc3RhdHNfY2Jmbl90KSAodm9pZCAqZGV2LCBiZmFfc3RhdHVzX3Qgc3RhdHVzKTsKK3R5cGVkZWYgdm9pZCAoKmJmYV9jZWVfcmVzZXRfc3RhdHNfY2Jmbl90KSAodm9pZCAqZGV2LCBiZmFfc3RhdHVzX3Qgc3RhdHVzKTsKK3R5cGVkZWYgdm9pZCAoKmJmYV9jZWVfaGJmYWlsX2NiZm5fdCkgKHZvaWQgKmRldiwgYmZhX3N0YXR1c190IHN0YXR1cyk7CisKK3N0cnVjdCBiZmFfY2VlX2NiZm5fcyB7CisJYmZhX2NlZV9nZXRfYXR0cl9jYmZuX3QgICAgZ2V0X2F0dHJfY2JmbjsKKwl2b2lkICpnZXRfYXR0cl9jYmFyZzsKKwliZmFfY2VlX2dldF9zdGF0c19jYmZuX3QgICBnZXRfc3RhdHNfY2JmbjsKKwl2b2lkICpnZXRfc3RhdHNfY2Jhcmc7CisJYmZhX2NlZV9yZXNldF9zdGF0c19jYmZuX3QgcmVzZXRfc3RhdHNfY2JmbjsKKwl2b2lkICpyZXNldF9zdGF0c19jYmFyZzsKK307CisKK3N0cnVjdCBiZmFfY2VlX3MgeworCXZvaWQgKmRldjsKKwliZmFfYm9vbGVhbl90IGdldF9hdHRyX3BlbmRpbmc7CisJYmZhX2Jvb2xlYW5fdCBnZXRfc3RhdHNfcGVuZGluZzsKKwliZmFfYm9vbGVhbl90IHJlc2V0X3N0YXRzX3BlbmRpbmc7CisJYmZhX3N0YXR1c190IGdldF9hdHRyX3N0YXR1czsKKwliZmFfc3RhdHVzX3QgZ2V0X3N0YXRzX3N0YXR1czsKKwliZmFfc3RhdHVzX3QgcmVzZXRfc3RhdHNfc3RhdHVzOworCXN0cnVjdCBiZmFfY2VlX2NiZm5fcyBjYmZuOworCXN0cnVjdCBiZmFfaW9jX2hiZmFpbF9ub3RpZnlfcyBoYmZhaWw7CisJc3RydWN0IGJmYV90cmNfbW9kX3MgKnRyY21vZDsKKwlzdHJ1Y3QgYmZhX2xvZ19tb2RfcyAqbG9nbW9kOworCXN0cnVjdCBiZmFfY2VlX2F0dHJfcyAqYXR0cjsKKwlzdHJ1Y3QgYmZhX2NlZV9zdGF0c19zICpzdGF0czsKKwlzdHJ1Y3QgYmZhX2RtYV9zIGF0dHJfZG1hOworCXN0cnVjdCBiZmFfZG1hX3Mgc3RhdHNfZG1hOworCXN0cnVjdCBiZmFfaW9jX3MgKmlvYzsKKwlzdHJ1Y3QgYmZhX21ib3hfY21kX3MgZ2V0X2NmZ19tYjsKKwlzdHJ1Y3QgYmZhX21ib3hfY21kX3MgZ2V0X3N0YXRzX21iOworCXN0cnVjdCBiZmFfbWJveF9jbWRfcyByZXNldF9zdGF0c19tYjsKK307CisKK3UzMiBiZmFfY2VlX21lbWluZm8odm9pZCk7Cit2b2lkIGJmYV9jZWVfbWVtX2NsYWltKHN0cnVjdCBiZmFfY2VlX3MgKmNlZSwgdTggKmRtYV9rdmEsCisJCQkgdTY0IGRtYV9wYSk7Cit2b2lkIGJmYV9jZWVfYXR0YWNoKHN0cnVjdCBiZmFfY2VlX3MgKmNlZSwgc3RydWN0IGJmYV9pb2NfcyAqaW9jLCB2b2lkICpkZXYsCisJCQlzdHJ1Y3QgYmZhX3RyY19tb2RfcyAqdHJjbW9kLAorCQkJc3RydWN0IGJmYV9sb2dfbW9kX3MgKmxvZ21vZCk7Cit2b2lkIGJmYV9jZWVfZGV0YWNoKHN0cnVjdCBiZmFfY2VlX3MgKmNlZSk7CitiZmFfc3RhdHVzX3QgYmZhX2NlZV9nZXRfYXR0cihzdHJ1Y3QgYmZhX2NlZV9zICpjZWUsCisJCQkgc3RydWN0IGJmYV9jZWVfYXR0cl9zICphdHRyLAorCQkJYmZhX2NlZV9nZXRfYXR0cl9jYmZuX3QgY2Jmbiwgdm9pZCAqY2JhcmcpOworYmZhX3N0YXR1c190IGJmYV9jZWVfZ2V0X3N0YXRzKHN0cnVjdCBiZmFfY2VlX3MgKmNlZSwKKwkJCXN0cnVjdCBiZmFfY2VlX3N0YXRzX3MgKnN0YXRzLAorCQkJYmZhX2NlZV9nZXRfc3RhdHNfY2Jmbl90IGNiZm4sIHZvaWQgKmNiYXJnKTsKK2JmYV9zdGF0dXNfdCBiZmFfY2VlX3Jlc2V0X3N0YXRzKHN0cnVjdCBiZmFfY2VlX3MgKmNlZSwKKwkJCWJmYV9jZWVfcmVzZXRfc3RhdHNfY2Jmbl90IGNiZm4sIHZvaWQgKmNiYXJnKTsKKyNlbmRpZiAvKiBfX0JGQV9DRUVfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvY25hL3BvcnQvYmZhX3BvcnQuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9jbmEvcG9ydC9iZmFfcG9ydC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjYmYxN2QKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvY25hL3BvcnQvYmZhX3BvcnQuaApAQCAtMCwwICsxLDY5IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX19CRkFfUE9SVF9IX18KKyNkZWZpbmUgX19CRkFfUE9SVF9IX18KKworI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfcG9ydC5oPgorI2luY2x1ZGUgPGJmYV9pb2MuaD4KKyNpbmNsdWRlIDxjcy9iZmFfdHJjLmg+CisjaW5jbHVkZSA8Y3MvYmZhX2xvZy5oPgorCit0eXBlZGVmIHZvaWQgICAgKCpiZmFfcG9ydF9zdGF0c19jYmZuX3QpICh2b2lkICpkZXYsIGJmYV9zdGF0dXNfdCBzdGF0dXMpOwordHlwZWRlZiB2b2lkICAgICgqYmZhX3BvcnRfZW5kaXNfY2Jmbl90KSAodm9pZCAqZGV2LCBiZmFfc3RhdHVzX3Qgc3RhdHVzKTsKKworc3RydWN0IGJmYV9wb3J0X3MgeworCXZvaWQgICAgICAgICAgICpkZXY7CisJc3RydWN0IGJmYV9pb2NfcyAqaW9jOworCXN0cnVjdCBiZmFfdHJjX21vZF9zICp0cmNtb2Q7CisJc3RydWN0IGJmYV9sb2dfbW9kX3MgKmxvZ21vZDsKKwl1MzIgICAgICAgIG1zZ3RhZzsKKwliZmFfYm9vbGVhbl90ICAgc3RhdHNfYnVzeTsKKwlzdHJ1Y3QgYmZhX21ib3hfY21kX3Mgc3RhdHNfbWI7CisJYmZhX3BvcnRfc3RhdHNfY2Jmbl90IHN0YXRzX2NiZm47CisJdm9pZCAgICAgICAgICAgKnN0YXRzX2NiYXJnOworCWJmYV9zdGF0dXNfdCAgICBzdGF0c19zdGF0dXM7CisJdW5pb24gYmZhX3Bwb3J0X3N0YXRzX3UgKnN0YXRzOworCXN0cnVjdCBiZmFfZG1hX3Mgc3RhdHNfZG1hOworCWJmYV9ib29sZWFuX3QgICBlbmRpc19wZW5kaW5nOworCXN0cnVjdCBiZmFfbWJveF9jbWRfcyBlbmRpc19tYjsKKwliZmFfcG9ydF9lbmRpc19jYmZuX3QgZW5kaXNfY2JmbjsKKwl2b2lkICAgICAgICAgICAqZW5kaXNfY2Jhcmc7CisJYmZhX3N0YXR1c190ICAgIGVuZGlzX3N0YXR1czsKKwlzdHJ1Y3QgYmZhX2lvY19oYmZhaWxfbm90aWZ5X3MgaGJmYWlsOworfTsKKwordm9pZCAgICAgICAgICAgIGJmYV9wb3J0X2F0dGFjaChzdHJ1Y3QgYmZhX3BvcnRfcyAqcG9ydCwgc3RydWN0IGJmYV9pb2NfcyAqaW9jLAorCQkJCXZvaWQgKmRldiwgc3RydWN0IGJmYV90cmNfbW9kX3MgKnRyY21vZCwKKwkJCQlzdHJ1Y3QgYmZhX2xvZ19tb2RfcyAqbG9nbW9kKTsKK3ZvaWQgICAgICAgICAgICBiZmFfcG9ydF9kZXRhY2goc3RydWN0IGJmYV9wb3J0X3MgKnBvcnQpOwordm9pZCAgICAgICAgICAgIGJmYV9wb3J0X2hiZmFpbCh2b2lkICphcmcpOworCitiZmFfc3RhdHVzX3QgICAgYmZhX3BvcnRfZ2V0X3N0YXRzKHN0cnVjdCBiZmFfcG9ydF9zICpwb3J0LAorCQkJCSAgIHVuaW9uIGJmYV9wcG9ydF9zdGF0c191ICpzdGF0cywKKwkJCQkgICBiZmFfcG9ydF9zdGF0c19jYmZuX3QgY2Jmbiwgdm9pZCAqY2JhcmcpOworYmZhX3N0YXR1c190ICAgIGJmYV9wb3J0X2NsZWFyX3N0YXRzKHN0cnVjdCBiZmFfcG9ydF9zICpwb3J0LAorCQkJCSAgICAgYmZhX3BvcnRfc3RhdHNfY2Jmbl90IGNiZm4sIHZvaWQgKmNiYXJnKTsKK2JmYV9zdGF0dXNfdCAgICBiZmFfcG9ydF9lbmFibGUoc3RydWN0IGJmYV9wb3J0X3MgKnBvcnQsCisJCQkJYmZhX3BvcnRfZW5kaXNfY2Jmbl90IGNiZm4sIHZvaWQgKmNiYXJnKTsKK2JmYV9zdGF0dXNfdCAgICBiZmFfcG9ydF9kaXNhYmxlKHN0cnVjdCBiZmFfcG9ydF9zICpwb3J0LAorCQkJCSBiZmFfcG9ydF9lbmRpc19jYmZuX3QgY2Jmbiwgdm9pZCAqY2JhcmcpOwordTMyICAgICAgICBiZmFfcG9ydF9tZW1pbmZvKHZvaWQpOwordm9pZCAgICAgICAgICAgIGJmYV9wb3J0X21lbV9jbGFpbShzdHJ1Y3QgYmZhX3BvcnRfcyAqcG9ydCwgdTggKmRtYV9rdmEsCisJCQkJICAgdTY0IGRtYV9wYSk7CisKKyNlbmRpZiAvKiBfX0JGQV9QT1JUX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2NuYS9wc3RhdHMvZXRocG9ydF9kZWZzLmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvY25hL3BzdGF0cy9ldGhwb3J0X2RlZnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNTYzZWU1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2NuYS9wc3RhdHMvZXRocG9ydF9kZWZzLmgKQEAgLTAsMCArMSwzNiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX19FVEhQT1JUX0RFRlNfSF9fCisjZGVmaW5lIF9fRVRIUE9SVF9ERUZTX0hfXworCitzdHJ1Y3QgYm5hZF9kcnZfc3RhdHMgeworCXU2NCBuZXRpZl9xdWV1ZV9zdG9wOworCXU2NCBuZXRpZl9xdWV1ZV93YWtldXA7CisJdTY0IHRzbzQ7CisJdTY0IHRzbzY7CisJdTY0IHRzb19lcnI7CisJdTY0IHRjcGNzdW1fb2ZmbG9hZDsKKwl1NjQgdWRwY3N1bV9vZmZsb2FkOworCXU2NCBjc3VtX2hlbHA7CisJdTY0IGNzdW1faGVscF9lcnI7CisKKwl1NjQgaHdfc3RhdHNfdXBkYXRlczsKKwl1NjQgbmV0aWZfcnhfc2NoZWR1bGU7CisJdTY0IG5ldGlmX3J4X2NvbXBsZXRlOworCXU2NCBuZXRpZl9yeF9kcm9wcGVkOworfTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2NuYS9wc3RhdHMvcGh5cG9ydF9kZWZzLmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvY25hL3BzdGF0cy9waHlwb3J0X2RlZnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjc1NDgwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2NuYS9wc3RhdHMvcGh5cG9ydF9kZWZzLmgKQEAgLTAsMCArMSwyMTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9fUEhZUE9SVF9ERUZTX0hfXworI2RlZmluZSBfX1BIWVBPUlRfREVGU19IX18KKworI2RlZmluZSBCTkFfVFhGX0lEX01BWCAgCTY0CisjZGVmaW5lIEJOQV9SWEZfSURfTUFYICAJNjQKKworLyoKKyAqIFN0YXRpc3RpY3MKKyAqLworCisvKgorICogVHhGIEZyYW1lIFN0YXRpc3RpY3MKKyAqLworc3RydWN0IGJuYV9zdGF0c190eGYgeworCXU2NCAgICAgICAgdWNhc3Rfb2N0ZXRzOworCXU2NCAgICAgICAgdWNhc3Q7CisJdTY0ICAgICAgICB1Y2FzdF92bGFuOworCisJdTY0ICAgICAgICBtY2FzdF9vY3RldHM7CisJdTY0ICAgICAgICBtY2FzdDsKKwl1NjQgICAgICAgIG1jYXN0X3ZsYW47CisKKwl1NjQgICAgICAgIGJjYXN0X29jdGV0czsKKwl1NjQgICAgICAgIGJjYXN0OworCXU2NCAgICAgICAgYmNhc3RfdmxhbjsKKworCXU2NCAgICAgICAgZXJyb3JzOworCXU2NCAgICAgICAgZmlsdGVyX3ZsYW47CS8qIGZyYW1lcyBmaWx0ZXJlZCBkdWUgdG8gVkxBTiAqLworCXU2NCAgICAgICAgZmlsdGVyX21hY19zYTsJLyogZnJhbWVzIGZpbHRlcmVkIGR1ZSB0byBTQSBjaGVjayAqLworfTsKKworLyoKKyAqIFJ4RiBGcmFtZSBTdGF0aXN0aWNzCisgKi8KK3N0cnVjdCBibmFfc3RhdHNfcnhmIHsKKwl1NjQgICAgICAgIHVjYXN0X29jdGV0czsKKwl1NjQgICAgICAgIHVjYXN0OworCXU2NCAgICAgICAgdWNhc3RfdmxhbjsKKworCXU2NCAgICAgICAgbWNhc3Rfb2N0ZXRzOworCXU2NCAgICAgICAgbWNhc3Q7CisJdTY0ICAgICAgICBtY2FzdF92bGFuOworCisJdTY0ICAgICAgICBiY2FzdF9vY3RldHM7CisJdTY0ICAgICAgICBiY2FzdDsKKwl1NjQgICAgICAgIGJjYXN0X3ZsYW47CisJdTY0ICAgICAgICBmcmFtZV9kcm9wczsKK307CisKKy8qCisgKiBGQyBUeCBGcmFtZSBTdGF0aXN0aWNzCisgKi8KK3N0cnVjdCBibmFfc3RhdHNfZmNfdHggeworCXU2NCAgICAgICAgdHhmX3VjYXN0X29jdGV0czsKKwl1NjQgICAgICAgIHR4Zl91Y2FzdDsKKwl1NjQgICAgICAgIHR4Zl91Y2FzdF92bGFuOworCisJdTY0ICAgICAgICB0eGZfbWNhc3Rfb2N0ZXRzOworCXU2NCAgICAgICAgdHhmX21jYXN0OworCXU2NCAgICAgICAgdHhmX21jYXN0X3ZsYW47CisKKwl1NjQgICAgICAgIHR4Zl9iY2FzdF9vY3RldHM7CisJdTY0ICAgICAgICB0eGZfYmNhc3Q7CisJdTY0ICAgICAgICB0eGZfYmNhc3RfdmxhbjsKKworCXU2NCAgICAgICAgdHhmX3Bhcml0eV9lcnJvcnM7CisJdTY0ICAgICAgICB0eGZfdGltZW91dDsKKwl1NjQgICAgICAgIHR4Zl9maWRfcGFyaXR5X2Vycm9yczsKK307CisKKy8qCisgKiBGQyBSeCBGcmFtZSBTdGF0aXN0aWNzCisgKi8KK3N0cnVjdCBibmFfc3RhdHNfZmNfcnggeworCXU2NCAgICAgICAgcnhmX3VjYXN0X29jdGV0czsKKwl1NjQgICAgICAgIHJ4Zl91Y2FzdDsKKwl1NjQgICAgICAgIHJ4Zl91Y2FzdF92bGFuOworCisJdTY0ICAgICAgICByeGZfbWNhc3Rfb2N0ZXRzOworCXU2NCAgICAgICAgcnhmX21jYXN0OworCXU2NCAgICAgICAgcnhmX21jYXN0X3ZsYW47CisKKwl1NjQgICAgICAgIHJ4Zl9iY2FzdF9vY3RldHM7CisJdTY0ICAgICAgICByeGZfYmNhc3Q7CisJdTY0ICAgICAgICByeGZfYmNhc3RfdmxhbjsKK307CisKKy8qCisgKiBSQUQgRnJhbWUgU3RhdGlzdGljcworICovCitzdHJ1Y3QgY25hX3N0YXRzX3JhZCB7CisJdTY0ICAgICAgICByeF9mcmFtZXM7CisJdTY0ICAgICAgICByeF9vY3RldHM7CisJdTY0ICAgICAgICByeF92bGFuX2ZyYW1lczsKKworCXU2NCAgICAgICAgcnhfdWNhc3Q7CisJdTY0ICAgICAgICByeF91Y2FzdF9vY3RldHM7CisJdTY0ICAgICAgICByeF91Y2FzdF92bGFuOworCisJdTY0ICAgICAgICByeF9tY2FzdDsKKwl1NjQgICAgICAgIHJ4X21jYXN0X29jdGV0czsKKwl1NjQgICAgICAgIHJ4X21jYXN0X3ZsYW47CisKKwl1NjQgICAgICAgIHJ4X2JjYXN0OworCXU2NCAgICAgICAgcnhfYmNhc3Rfb2N0ZXRzOworCXU2NCAgICAgICAgcnhfYmNhc3RfdmxhbjsKKworCXU2NCAgICAgICAgcnhfZHJvcHM7Cit9OworCisvKgorICogQlBDIFR4IFJlZ2lzdGVycworICovCitzdHJ1Y3QgY25hX3N0YXRzX2JwY190eCB7CisJdTY0ICAgICAgICB0eF9wYXVzZVs4XTsKKwl1NjQgICAgICAgIHR4X3plcm9fcGF1c2VbOF07CS8qICBQYXVzZSBjYW5jZWxsYXRpb24gKi8KKwl1NjQgICAgICAgIHR4X2ZpcnN0X3BhdXNlWzhdOwkvKiAgUGF1c2UgaW5pdGlhdGlvbiByYXRoZXIKKwkJCQkJCSAqdGhhbiByZXRlbnRpb24gKi8KK307CisKKy8qCisgKiBCUEMgUnggUmVnaXN0ZXJzCisgKi8KK3N0cnVjdCBjbmFfc3RhdHNfYnBjX3J4IHsKKwl1NjQgICAgICAgIHJ4X3BhdXNlWzhdOworCXU2NCAgICAgICAgcnhfemVyb19wYXVzZVs4XTsJLyogIFBhdXNlIGNhbmNlbGxhdGlvbiAqLworCXU2NCAgICAgICAgcnhfZmlyc3RfcGF1c2VbOF07CS8qICBQYXVzZSBpbml0aWF0aW9uIHJhdGhlcgorCQkJCQkJICp0aGFuIHJldGVudGlvbiAqLworfTsKKworLyoKKyAqIE1BQyBSeCBTdGF0aXN0aWNzCisgKi8KK3N0cnVjdCBjbmFfc3RhdHNfbWFjX3J4IHsKKwl1NjQgICAgICAgIGZyYW1lXzY0OwkvKiBib3RoIHJ4IGFuZCB0eCBjb3VudGVyICovCisJdTY0ICAgICAgICBmcmFtZV82NV8xMjc7CS8qIGJvdGggcnggYW5kIHR4IGNvdW50ZXIgKi8KKwl1NjQgICAgICAgIGZyYW1lXzEyOF8yNTU7CS8qIGJvdGggcnggYW5kIHR4IGNvdW50ZXIgKi8KKwl1NjQgICAgICAgIGZyYW1lXzI1Nl81MTE7CS8qIGJvdGggcnggYW5kIHR4IGNvdW50ZXIgKi8KKwl1NjQgICAgICAgIGZyYW1lXzUxMl8xMDIzOwkvKiBib3RoIHJ4IGFuZCB0eCBjb3VudGVyICovCisJdTY0ICAgICAgICBmcmFtZV8xMDI0XzE1MTg7CS8qIGJvdGggcnggYW5kIHR4IGNvdW50ZXIgKi8KKwl1NjQgICAgICAgIGZyYW1lXzE1MThfMTUyMjsJLyogYm90aCByeCBhbmQgdHggY291bnRlciAqLworCXU2NCAgICAgICAgcnhfYnl0ZXM7CisJdTY0ICAgICAgICByeF9wYWNrZXRzOworCXU2NCAgICAgICAgcnhfZmNzX2Vycm9yOworCXU2NCAgICAgICAgcnhfbXVsdGljYXN0OworCXU2NCAgICAgICAgcnhfYnJvYWRjYXN0OworCXU2NCAgICAgICAgcnhfY29udHJvbF9mcmFtZXM7CisJdTY0ICAgICAgICByeF9wYXVzZTsKKwl1NjQgICAgICAgIHJ4X3Vua25vd25fb3Bjb2RlOworCXU2NCAgICAgICAgcnhfYWxpZ25tZW50X2Vycm9yOworCXU2NCAgICAgICAgcnhfZnJhbWVfbGVuZ3RoX2Vycm9yOworCXU2NCAgICAgICAgcnhfY29kZV9lcnJvcjsKKwl1NjQgICAgICAgIHJ4X2NhcnJpZXJfc2Vuc2VfZXJyb3I7CisJdTY0ICAgICAgICByeF91bmRlcnNpemU7CisJdTY0ICAgICAgICByeF9vdmVyc2l6ZTsKKwl1NjQgICAgICAgIHJ4X2ZyYWdtZW50czsKKwl1NjQgICAgICAgIHJ4X2phYmJlcjsKKwl1NjQgICAgICAgIHJ4X2Ryb3A7Cit9OworCisvKgorICogTUFDIFR4IFN0YXRpc3RpY3MKKyAqLworc3RydWN0IGNuYV9zdGF0c19tYWNfdHggeworCXU2NCAgICAgICAgdHhfYnl0ZXM7CisJdTY0ICAgICAgICB0eF9wYWNrZXRzOworCXU2NCAgICAgICAgdHhfbXVsdGljYXN0OworCXU2NCAgICAgICAgdHhfYnJvYWRjYXN0OworCXU2NCAgICAgICAgdHhfcGF1c2U7CisJdTY0ICAgICAgICB0eF9kZWZlcnJhbDsKKwl1NjQgICAgICAgIHR4X2V4Y2Vzc2l2ZV9kZWZlcnJhbDsKKwl1NjQgICAgICAgIHR4X3NpbmdsZV9jb2xsaXNpb247CisJdTY0ICAgICAgICB0eF9tdWxpcGxlX2NvbGxpc2lvbjsKKwl1NjQgICAgICAgIHR4X2xhdGVfY29sbGlzaW9uOworCXU2NCAgICAgICAgdHhfZXhjZXNzaXZlX2NvbGxpc2lvbjsKKwl1NjQgICAgICAgIHR4X3RvdGFsX2NvbGxpc2lvbjsKKwl1NjQgICAgICAgIHR4X3BhdXNlX2hvbm9yZWQ7CisJdTY0ICAgICAgICB0eF9kcm9wOworCXU2NCAgICAgICAgdHhfamFiYmVyOworCXU2NCAgICAgICAgdHhfZmNzX2Vycm9yOworCXU2NCAgICAgICAgdHhfY29udHJvbF9mcmFtZTsKKwl1NjQgICAgICAgIHR4X292ZXJzaXplOworCXU2NCAgICAgICAgdHhfdW5kZXJzaXplOworCXU2NCAgICAgICAgdHhfZnJhZ21lbnRzOworfTsKKworLyoKKyAqIENvbXBsZXRlIHN0YXRpc3RpY3MKKyAqLworc3RydWN0IGJuYV9zdGF0cyB7CisJc3RydWN0IGNuYV9zdGF0c19tYWNfcnggbWFjX3J4X3N0YXRzOworCXN0cnVjdCBjbmFfc3RhdHNfYnBjX3J4IGJwY19yeF9zdGF0czsKKwlzdHJ1Y3QgY25hX3N0YXRzX3JhZCByYWRfc3RhdHM7CisJc3RydWN0IGJuYV9zdGF0c19mY19yeCBmY19yeF9zdGF0czsKKwlzdHJ1Y3QgY25hX3N0YXRzX21hY190eCBtYWNfdHhfc3RhdHM7CisJc3RydWN0IGNuYV9zdGF0c19icGNfdHggYnBjX3R4X3N0YXRzOworCXN0cnVjdCBibmFfc3RhdHNfZmNfdHggZmNfdHhfc3RhdHM7CisJc3RydWN0IGJuYV9zdGF0c19yeGYgcnhmX3N0YXRzW0JOQV9UWEZfSURfTUFYXTsKKwlzdHJ1Y3QgYm5hX3N0YXRzX3R4ZiB0eGZfc3RhdHNbQk5BX1JYRl9JRF9NQVhdOworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvY3MvYmZhX2NoZWNrc3VtLmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvY3MvYmZhX2NoZWNrc3VtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWY4YzFkNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9jcy9iZmFfY2hlY2tzdW0uaApAQCAtMCwwICsxLDYwIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKy8qKgorICogIGJmYV9jaGVja3N1bS5oIEJGQSBjaGVja3N1bSB1dGlsaXRpZXMKKyAqLworCisjaWZuZGVmIF9fQkZBX0NIRUNLU1VNX0hfXworI2RlZmluZSBfX0JGQV9DSEVDS1NVTV9IX18KKworc3RhdGljIGlubGluZSB1MzIKK2JmYV9jaGVja3N1bV91MzIodTMyICpidWYsIGludCBzeikKK3sKKwlpbnQJCWksIG0gPSBzeiA+PiAyOworCXUzMglzdW0gPSAwOworCisJZm9yIChpID0gMDsgaSA8IG07IGkrKykKKwkJc3VtIF49IGJ1ZltpXTsKKworCXJldHVybiAoc3VtKTsKK30KKworc3RhdGljIGlubGluZSB1MTYKK2JmYV9jaGVja3N1bV91MTYodTE2ICpidWYsIGludCBzeikKK3sKKwlpbnQgICAgICAgICAgICAgaSwgbSA9IHN6ID4+IDE7CisJdTE2ICAgICAgICBzdW0gPSAwOworCisJZm9yIChpID0gMDsgaSA8IG07IGkrKykKKwkJc3VtIF49IGJ1ZltpXTsKKworCXJldHVybiAoc3VtKTsKK30KKworc3RhdGljIGlubGluZSB1OAorYmZhX2NoZWNrc3VtX3U4KHU4ICpidWYsIGludCBzeikKK3sKKwlpbnQgICAgICAgICAgICAgaTsKKwl1OCAgICAgICAgIHN1bSA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgc3o7IGkrKykKKwkJc3VtIF49IGJ1ZltpXTsKKworCXJldHVybiAoc3VtKTsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2NzL2JmYV9kZWJ1Zy5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2NzL2JmYV9kZWJ1Zy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0MWJlODYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvY3MvYmZhX2RlYnVnLmgKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisvKioKKyAqICBiZmFfZGVidWcuaCBCRkEgZGVidWcgaW50ZXJmYWNlcworICovCisKKyNpZm5kZWYgX19CRkFfREVCVUdfSF9fCisjZGVmaW5lIF9fQkZBX0RFQlVHX0hfXworCisjZGVmaW5lIGJmYV9hc3NlcnQoX19jb25kKQlkbyB7CQkJCQlcCisJaWYgKCEoX19jb25kKSkgCQkJCQkJCVwKKwkJYmZhX3BhbmljKF9fTElORV9fLCBfX0ZJTEVfXywgI19fY29uZCk7ICAgICAgXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBiZmFfc21fZmF1bHQoX19tb2QsIF9fZXZlbnQpCWRvIHsJCQkJXAorCWJmYV9zbV9wYW5pYygoX19tb2QpLT5sb2dtLCBfX0xJTkVfXywgX19GSUxFX18sIF9fZXZlbnQpOyAgICAgIFwKK30gd2hpbGUgKDApCisKKyNpZm5kZWYgQkZBX1BFUkZfQlVJTEQKKyNkZWZpbmUgYmZhX2Fzc2VydF9mcChfX2NvbmQpCWJmYV9hc3NlcnQoX19jb25kKQorI2Vsc2UKKyNkZWZpbmUgYmZhX2Fzc2VydF9mcChfX2NvbmQpCisjZW5kaWYKKworc3RydWN0IGJmYV9sb2dfbW9kX3M7Cit2b2lkIGJmYV9wYW5pYyhpbnQgbGluZSwgY2hhciAqZmlsZSwgY2hhciAqcGFuaWNzdHIpOwordm9pZCBiZmFfc21fcGFuaWMoc3RydWN0IGJmYV9sb2dfbW9kX3MgKmxvZ20sIGludCBsaW5lLCBjaGFyICpmaWxlLCBpbnQgZXZlbnQpOworCisjZW5kaWYgLyogX19CRkFfREVCVUdfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvY3MvYmZhX2xvZy5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2NzL2JmYV9sb2cuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NjFjYmUyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2NzL2JmYV9sb2cuaApAQCAtMCwwICsxLDE4NCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisvKioKKyAqICBiZmFfbG9nLmggQkZBIGxvZyBsaWJyYXJ5IGRhdGEgc3RydWN0dXJlIGFuZCBmdW5jdGlvbiBkZWZpbml0aW9uCisgKi8KKworI2lmbmRlZiBfX0JGQV9MT0dfSF9fCisjZGVmaW5lIF9fQkZBX0xPR19IX18KKworI2luY2x1ZGUgPGJmYV9vc19pbmMuaD4KKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX3N0YXR1cy5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfYWVuLmg+CisKKy8qCisgKiBCRkEgbG9nIG1vZHVsZSBkZWZpbml0aW9uCisgKgorICogVG8gY3JlYXRlIGEgbmV3IG1vZHVsZSBpZDoKKyAqIEFkZCBhICNkZWZpbmUgYXQgdGhlIGVuZCBvZiB0aGUgbGlzdCBiZWxvdy4gU2VsZWN0IGEgdmFsdWUgZm9yIHlvdXIKKyAqIGRlZmluaXRpb24gc28gdGhhdCBpdCBpcyBvbmUgKDEpIGdyZWF0ZXIgdGhhbiB0aGUgcHJldmlvdXMKKyAqIGRlZmluaXRpb24uIE1vZGlmeSB0aGUgZGVmaW5pdGlvbiBvZiBCRkFfTE9HX01PRFVMRV9JRF9NQVggdG8gYmVjb21lCisgKiB5b3VyIG5ldyBkZWZpbml0aW9uLgorICogU2hvdWxkIGhhdmUgbm8gZ2FwcyBpbiBiZXR3ZWVuIHRoZSB2YWx1ZXMgYmVjYXVzZSB0aGlzIGlzIHVzZWQgaW4gYXJyYXlzLgorICogSU1QT1JUQU5UOiBBRU5fSURzIG11c3QgYmUgYXQgdGhlIGJlZ2luaW5nLCBvdGhlcndpc2UgdXBkYXRlIGJmYV9kZWZzX2Flbi5oCisgKi8KKworZW51bSBiZmFfbG9nX21vZHVsZV9pZCB7CisJQkZBX0xPR19VTlVTRURfSUQJPSAwLAorCisJLyogQUVOIGRlZnMgYmVnaW4gKi8KKwlCRkFfTE9HX0FFTl9NSU4JCT0gQkZBX0xPR19VTlVTRURfSUQsCisKKwlCRkFfTE9HX0FFTl9JRF9BREFQVEVSIAk9IEJGQV9MT0dfQUVOX01JTiArIEJGQV9BRU5fQ0FUX0FEQVBURVIsLyogMSAqLworCUJGQV9MT0dfQUVOX0lEX1BPUlQgCT0gQkZBX0xPR19BRU5fTUlOICsgQkZBX0FFTl9DQVRfUE9SVCwJLyogMiAqLworCUJGQV9MT0dfQUVOX0lEX0xQT1JUIAk9IEJGQV9MT0dfQUVOX01JTiArIEJGQV9BRU5fQ0FUX0xQT1JULAkvKiAzICovCisJQkZBX0xPR19BRU5fSURfUlBPUlQgCT0gQkZBX0xPR19BRU5fTUlOICsgQkZBX0FFTl9DQVRfUlBPUlQsCS8qIDQgKi8KKwlCRkFfTE9HX0FFTl9JRF9JVE5JTSAJPSBCRkFfTE9HX0FFTl9NSU4gKyBCRkFfQUVOX0NBVF9JVE5JTSwJLyogNSAqLworCUJGQV9MT0dfQUVOX0lEX1RJTiAJPSBCRkFfTE9HX0FFTl9NSU4gKyBCRkFfQUVOX0NBVF9USU4sCS8qIDYgKi8KKwlCRkFfTE9HX0FFTl9JRF9JUEZDIAk9IEJGQV9MT0dfQUVOX01JTiArIEJGQV9BRU5fQ0FUX0lQRkMsCS8qIDcgKi8KKwlCRkFfTE9HX0FFTl9JRF9BVURJVCAJPSBCRkFfTE9HX0FFTl9NSU4gKyBCRkFfQUVOX0NBVF9BVURJVCwJLyogOCAqLworCUJGQV9MT0dfQUVOX0lEX0lPQwk9IEJGQV9MT0dfQUVOX01JTiArIEJGQV9BRU5fQ0FUX0lPQywJLyogOSAqLworCUJGQV9MT0dfQUVOX0lEX0VUSFBPUlQJPSBCRkFfTE9HX0FFTl9NSU4gKyBCRkFfQUVOX0NBVF9FVEhQT1JULC8qIDEwICovCisKKwlCRkFfTE9HX0FFTl9NQVgJCT0gQkZBX0xPR19BRU5fSURfRVRIUE9SVCwKKwkvKiBBRU4gZGVmcyBlbmQgKi8KKworCUJGQV9MT0dfTU9EVUxFX0lEX01JTgk9IEJGQV9MT0dfQUVOX01BWCwKKworCUJGQV9MT0dfRldfSUQJCT0gQkZBX0xPR19NT0RVTEVfSURfTUlOICsgMSwKKwlCRkFfTE9HX0hBTF9JRAkJPSBCRkFfTE9HX01PRFVMRV9JRF9NSU4gKyAyLAorCUJGQV9MT0dfRkNTX0lECQk9IEJGQV9MT0dfTU9EVUxFX0lEX01JTiArIDMsCisJQkZBX0xPR19XRFJWX0lECQk9IEJGQV9MT0dfTU9EVUxFX0lEX01JTiArIDQsCisJQkZBX0xPR19MSU5VWF9JRAk9IEJGQV9MT0dfTU9EVUxFX0lEX01JTiArIDUsCisJQkZBX0xPR19TT0xBUklTX0lECT0gQkZBX0xPR19NT0RVTEVfSURfTUlOICsgNiwKKworCUJGQV9MT0dfTU9EVUxFX0lEX01BWCAJPSBCRkFfTE9HX1NPTEFSSVNfSUQsCisKKwkvKiBOb3QgcGFydCBvZiBhbnkgYXJyYXlzICovCisJQkZBX0xPR19NT0RVTEVfSURfQUxMIAk9IEJGQV9MT0dfTU9EVUxFX0lEX01BWCArIDEsCisJQkZBX0xPR19BRU5fQUxMIAk9IEJGQV9MT0dfTU9EVUxFX0lEX01BWCArIDIsCisJQkZBX0xPR19EUlZfQUxMCQk9IEJGQV9MT0dfTU9EVUxFX0lEX01BWCArIDMsCit9OworCisvKgorICogQkZBIGxvZyBjYXRhbG9nIG5hbWUKKyAqLworI2RlZmluZSBCRkFfTE9HX0NBVF9OQU1FCSJCRkEiCisKKy8qCisgKiBiZmEgbG9nIHNldmVyaXR5IHZhbHVlcworICovCitlbnVtIGJmYV9sb2dfc2V2ZXJpdHkgeworCUJGQV9MT0dfSU5WQUxJRCA9IDAsCisJQkZBX0xPR19DUklUSUNBTCA9IDEsCisJQkZBX0xPR19FUlJPUiA9IDIsCisJQkZBX0xPR19XQVJOSU5HID0gMywKKwlCRkFfTE9HX0lORk8gPSA0LAorCUJGQV9MT0dfTk9ORSA9IDUsCisJQkZBX0xPR19MRVZFTF9NQVggPSBCRkFfTE9HX05PTkUKK307CisKKyNkZWZpbmUgQkZBX0xPR19NT0RJRF9PRkZTRVQJCTE2CisKKworc3RydWN0IGJmYV9sb2dfbXNnZGVmX3MgeworCXUzMgltc2dfaWQ7CQkvKiAgbWVzc2FnZSBpZCAqLworCWludAkJYXR0cmlidXRlczsJLyogIGF0dHJpYnV0ZXMgKi8KKwlpbnQJCXNldmVyaXR5OwkvKiAgc2V2ZXJpdHkgbGV2ZWwgKi8KKwljaGFyCQkqbXNnX3ZhbHVlOworCQkJCQkvKiAgbXNnIHN0cmluZyAqLworCWNoYXIJCSptZXNzYWdlOworCQkJCQkvKiAgbXNnIGZvcm1hdCBzdHJpbmcgKi8KKwlpbnQJCWFyZ190eXBlOwkvKiAgYXJndW1lbnQgdHlwZSAqLworCWludAkJYXJnX251bTsJLyogIG51bWJlciBvZiBhcmd1bWVudCAqLworfTsKKworLyoKKyAqIHN1cHBvcnRlZCBhcmd1bWVudCB0eXBlCisgKi8KK2VudW0gYmZhX2xvZ19hcmdfdHlwZSB7CisJQkZBX0xPR19TID0gMCwJCS8qICBzdHJpbmcgKi8KKwlCRkFfTE9HX0QsCQkvKiAgZGVjaW1hbCAqLworCUJGQV9MT0dfSSwJCS8qICBpbnRlZ2VyICovCisJQkZBX0xPR19PLAkJLyogIG9jdCBudW1iZXIgKi8KKwlCRkFfTE9HX1UsCQkvKiAgdW5zaWduZWQgaW50ZWdlciAqLworCUJGQV9MT0dfWCwJCS8qICBoZXggbnVtYmVyICovCisJQkZBX0xPR19GLAkJLyogIGZsb2F0aW5nICovCisJQkZBX0xPR19DLAkJLyogIGNoYXJhY3RlciAqLworCUJGQV9MT0dfTCwJCS8qICBkb3VibGUgKi8KKwlCRkFfTE9HX1AJCS8qICBwb2ludGVyICovCit9OworCisjZGVmaW5lIEJGQV9MT0dfQVJHX1RZUEUJMgorI2RlZmluZSBCRkFfTE9HX0FSRzAJCSgwICogQkZBX0xPR19BUkdfVFlQRSkKKyNkZWZpbmUgQkZBX0xPR19BUkcxCQkoMSAqIEJGQV9MT0dfQVJHX1RZUEUpCisjZGVmaW5lIEJGQV9MT0dfQVJHMgkJKDIgKiBCRkFfTE9HX0FSR19UWVBFKQorI2RlZmluZSBCRkFfTE9HX0FSRzMJCSgzICogQkZBX0xPR19BUkdfVFlQRSkKKworI2RlZmluZSBCRkFfTE9HX0dFVF9NT0RfSUQobXNnaWQpICgobXNnaWQgPj4gQkZBX0xPR19NT0RJRF9PRkZTRVQpICYgMHhmZikKKyNkZWZpbmUgQkZBX0xPR19HRVRfTVNHX0lEWChtc2dpZCkgKG1zZ2lkICYgMHhmZmZmKQorI2RlZmluZSBCRkFfTE9HX0dFVF9NU0dfSUQobXNnZGVmKSAoKG1zZ2RlZiktPm1zZ19pZCkKKyNkZWZpbmUgQkZBX0xPR19HRVRfTVNHX0ZNVF9TVFJJTkcobXNnZGVmKSAoKG1zZ2RlZiktPm1lc3NhZ2UpCisjZGVmaW5lIEJGQV9MT0dfR0VUX1NFVkVSSVRZKG1zZ2RlZikgKChtc2dkZWYpLT5zZXZlcml0eSkKKworLyoKKyAqIEV2ZW50IGF0dHJpYnV0ZXMKKyAqLworI2RlZmluZSBCRkFfTE9HX0FUVFJfTk9ORQkwCisjZGVmaW5lIEJGQV9MT0dfQVRUUl9BVURJVAkxCisjZGVmaW5lIEJGQV9MT0dfQVRUUl9MT0cJMgorI2RlZmluZSBCRkFfTE9HX0FUVFJfRkZEQwk0CisKKyNkZWZpbmUgQkZBX0xPR19DUkVBVEVfSUQobXN3LCBsc3cpIFwKKwkoKCh1MzIpbXN3IDw8IEJGQV9MT0dfTU9ESURfT0ZGU0VUKSB8IGxzdykKKworc3RydWN0IGJmYV9sb2dfbW9kX3M7CisKKy8qKgorICogY2FsbGJhY2sgZnVuY3Rpb24KKyAqLwordHlwZWRlZiB2b2lkICgqYmZhX2xvZ19jYl90KShzdHJ1Y3QgYmZhX2xvZ19tb2RfcyAqbG9nX21vZCwgdTMyIG1zZ19pZCwKKwkJCWNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKTsKKworCitzdHJ1Y3QgYmZhX2xvZ19tb2RfcyB7CisJY2hhcgkJaW5zdGFuY2VfaW5mb1sxNl07CS8qICBpbnN0YW5jZSBpbmZvICovCisJaW50CQlsb2dfbGV2ZWxbQkZBX0xPR19NT0RVTEVfSURfTUFYICsgMV07CisJCQkJCQkvKiAgbG9nIGxldmVsIGZvciBtb2R1bGVzICovCisJYmZhX2xvZ19jYl90CWNiZm47IAkJCS8qICBjYWxsYmFjayBmdW5jdGlvbiAqLworfTsKKworZXh0ZXJuIGludCBiZmFfbG9nX2luaXQoc3RydWN0IGJmYV9sb2dfbW9kX3MgKmxvZ19tb2QsCisJCQljaGFyICppbnN0YW5jZV9uYW1lLCBiZmFfbG9nX2NiX3QgY2Jmbik7CitleHRlcm4gaW50IGJmYV9sb2coc3RydWN0IGJmYV9sb2dfbW9kX3MgKmxvZ19tb2QsIHUzMiBtc2dfaWQsIC4uLik7CitleHRlcm4gYmZhX3N0YXR1c190IGJmYV9sb2dfc2V0X2xldmVsKHN0cnVjdCBiZmFfbG9nX21vZF9zICpsb2dfbW9kLAorCQkJaW50IG1vZF9pZCwgZW51bSBiZmFfbG9nX3NldmVyaXR5IGxvZ19sZXZlbCk7CitleHRlcm4gYmZhX3N0YXR1c190IGJmYV9sb2dfc2V0X2xldmVsX2FsbChzdHJ1Y3QgYmZhX2xvZ19tb2RfcyAqbG9nX21vZCwKKwkJCWVudW0gYmZhX2xvZ19zZXZlcml0eSBsb2dfbGV2ZWwpOworZXh0ZXJuIGJmYV9zdGF0dXNfdCBiZmFfbG9nX3NldF9sZXZlbF9hZW4oc3RydWN0IGJmYV9sb2dfbW9kX3MgKmxvZ19tb2QsCisJCQllbnVtIGJmYV9sb2dfc2V2ZXJpdHkgbG9nX2xldmVsKTsKK2V4dGVybiBlbnVtIGJmYV9sb2dfc2V2ZXJpdHkgYmZhX2xvZ19nZXRfbGV2ZWwoc3RydWN0IGJmYV9sb2dfbW9kX3MgKmxvZ19tb2QsCisJCQlpbnQgbW9kX2lkKTsKK2V4dGVybiBlbnVtIGJmYV9sb2dfc2V2ZXJpdHkgYmZhX2xvZ19nZXRfbXNnX2xldmVsKAorCQkJc3RydWN0IGJmYV9sb2dfbW9kX3MgKmxvZ19tb2QsIHUzMiBtc2dfaWQpOworLyoKKyAqIGFycmF5IG9mIG1lc3NhZ2VzIGdlbmVyYXRlZCBmcm9tIHhtbCBmaWxlcworICovCitleHRlcm4gc3RydWN0IGJmYV9sb2dfbXNnZGVmX3MgYmZhX2xvZ19tc2dfYXJyYXlbXTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvY3MvYmZhX3BlcmYuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9jcy9iZmFfcGVyZi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1YWE1ZjkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvY3MvYmZhX3BlcmYuaApAQCAtMCwwICsxLDM0IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaWZuZGVmIF9fQkZBRF9QRVJGX0hfXworI2RlZmluZSBfX0JGQURfUEVSRl9IX18KKworI2lmZGVmIEJGQURfUEVSRl9CVUlMRAorCisjdW5kZWYgYmZhX3RyYworI3VuZGVmIGJmYV90cmMzMgorI3VuZGVmIGJmYV9hc3NlcnQKKyN1bmRlZiBCRkFfVFJDX0ZJTEUKKworI2RlZmluZSBiZmFfdHJjKF90cmNwLCBfZGF0YSkKKyNkZWZpbmUgYmZhX3RyYzMyKF90cmNwLCBfZGF0YSkKKyNkZWZpbmUgYmZhX2Fzc2VydChfX2NvbmQpCisjZGVmaW5lIEJGQV9UUkNfRklMRShfX21vZCwgX19zdWJtb2QpCisKKyNlbmRpZgorCisjZW5kaWYgLyogX19CRkFEX1BFUkZfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvY3MvYmZhX3Bsb2cuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9jcy9iZmFfcGxvZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3MGY4NmUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvY3MvYmZhX3Bsb2cuaApAQCAtMCwwICsxLDE2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2lmbmRlZiBfX0JGQV9QT1JUTE9HX0hfXworI2RlZmluZSBfX0JGQV9QT1JUTE9HX0hfXworCisjaW5jbHVkZSAicHJvdG9jb2wvZmMuaCIKKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX3R5cGVzLmg+CisKKyNkZWZpbmUgQkZBX1BMX05MT0dfRU5UUyAyNTYKKyNkZWZpbmUgQkZBX1BMX0xPR19SRUNfSU5DUihfeCkgKChfeCkrKywgKF94KSAlPSBCRkFfUExfTkxPR19FTlRTKQorCisjZGVmaW5lIEJGQV9QTF9TVFJJTkdfTE9HX1NaICAgMzIgICAvKiBudW1iZXIgb2YgY2hhcnMgaW4gc3RyaW5nIGxvZyAqLworI2RlZmluZSBCRkFfUExfSU5UX0xPR19TWiAgICAgIDggICAgLyogbnVtYmVyIG9mIGludGVnZXJzIGluIHRoZSBpbnRlZ2VyIGxvZyAqLworCitlbnVtIGJmYV9wbG9nX2xvZ190eXBlIHsKKwlCRkFfUExfTE9HX1RZUEVfSU5WQUxJRCA9IDAsCisJQkZBX1BMX0xPR19UWVBFX0lOVCAJPSAxLAorCUJGQV9QTF9MT0dfVFlQRV9TVFJJTkcgCT0gMiwKK307CisKKy8qCisgKiB0aGUgKGZpeGVkIHNpemUpIHJlY29yZCBmb3JtYXQgZm9yIGVhY2ggZW50cnkgaW4gdGhlIHBvcnRsb2cKKyAqLworc3RydWN0IGJmYV9wbG9nX3JlY19zIHsKKwl1MzIgICAgICAgIHR2OwkvKiBGaWxsZWQgYnkgdGhlIHBvcnRsb2cgZHJpdmVyIHdoZW4gdGhlICoKKwkJCQkgKiBlbnRyeSBpcyBhZGRlZCB0byB0aGUgY2lyY3VsYXIgbG9nLiAgICovCisJdTggICAgICAgICBwb3J0OwkvKiBTb3VyY2UgcG9ydCB0aGF0IGxvZ2dlZCB0aGlzIGVudHJ5LiBDTQorCQkJCSAqIGVudGl0aWVzIHdpbGwgdXNlIDB4RkYgKi8KKwl1OCAgICAgICAgIG1pZDsJLyogSW50ZWdlciB2YWx1ZSB0byBiZSB1c2VkIGJ5IGFsbCBlbnRpdGllcyAqCisJCQkJICogd2hpbGUgbG9nZ2luZy4gVGhlIG1vZHVsZSBpZCB0byBzdHJpbmcgICAqCisJCQkJICogY29udmVyc2lvbiB3aWxsIGJlIGRvbmUgYnkgQkZBTC4gU2VlCisJCQkJICogZW51bSBiZmFfcGxvZ19taWQgKi8KKwl1OCAgICAgICAgIGVpZDsJLyogaW5kaWNhdGVzIFJ4LCBUeCwgSU9DVEwsIGV0Yy4gU2VlCisJCQkJICogZW51bSBiZmFfcGxvZ19laWQgKi8KKwl1OCAgICAgICAgIGxvZ190eXBlOyAvKiBpbmRpY2F0ZXMgc3RyaW5nIGxvZyBvciBpbnRlZ2VyIGxvZy4KKwkJCQkgICAqIHNlZSBiZmFfcGxvZ19sb2dfdHlwZV90ICovCisJdTggICAgICAgICBsb2dfbnVtX2ludHM7CisJLyoKKwkgKiBpbnRlcnByZXRlZCBvbmx5IGlmIGxvZ190eXBlIGlzIElOVF9MT0cuIGluZGljYXRlcyBudW1iZXIgb2YKKwkgKiBpbnRlZ2VycyBpbiB0aGUgaW50X2xvZ1tdICgwLVBMX0lOVF9MT0dfU1opLgorCSAqLworCXU4ICAgICAgICAgcnN2ZDsKKwl1MTYgICAgICAgIG1pc2M7CS8qIGNhbiBiZSB1c2VkIHRvIGluZGljYXRlIGZjIGZyYW1lIGxlbmd0aCwKKwkJCQkgKmV0Yy4uICovCisJdW5pb24geworCQljaGFyICAgICAgICAgICAgc3RyaW5nX2xvZ1tCRkFfUExfU1RSSU5HX0xPR19TWl07CisJCXUzMiAgICAgICAgaW50X2xvZ1tCRkFfUExfSU5UX0xPR19TWl07CisJfSBsb2dfZW50cnk7CisKK307CisKKy8qCisgKiB0aGUgZm9sbG93aW5nICNkZWZpbmVzIHdpbGwgYmUgdXNlZCBieSB0aGUgbG9nZ2luZyBlbnRpdGllcyB0byBpbmRpY2F0ZQorICogdGhlaXIgbW9kdWxlIGlkLiBCRkFMIHdpbGwgY29udmVydCB0aGUgaW50ZWdlciB2YWx1ZSB0byBzdHJpbmcgZm9ybWF0CisgKgorKiBwcm9jZXNzIHRvIGJlIHVzZWQgd2hpbGUgY2hhbmdpbmcgdGhlIGZvbGxvd2luZyAjZGVmaW5lczoKKyAqICAtIEFsd2F5cyBhZGQgbmV3IGVudHJpZXMgYXQgdGhlIGVuZAorICogIC0gZGVmaW5lIGNvcnJlc3BvbmRpbmcgc3RyaW5nIGluIEJGQUwKKyAqICAtIERvIG5vdCByZW1vdmUgYW55IGVudHJ5IG9yIHJlYXJyYW5nZSB0aGUgb3JkZXIuCisgKi8KK2VudW0gYmZhX3Bsb2dfbWlkIHsKKwlCRkFfUExfTUlEX0lOVkFMSUQgCT0gMCwKKwlCRkFfUExfTUlEX0RFQlVHIAk9IDEsCisJQkZBX1BMX01JRF9EUlZSIAk9IDIsCisJQkZBX1BMX01JRF9IQUwgCQk9IDMsCisJQkZBX1BMX01JRF9IQUxfRkNYUCAJPSA0LAorCUJGQV9QTF9NSURfSEFMX1VGIAk9IDUsCisJQkZBX1BMX01JRF9GQ1MgCQk9IDYsCisJQkZBX1BMX01JRF9NQVggCQk9IDcKK307CisKKyNkZWZpbmUgQkZBX1BMX01JRF9TVFJMRU4gICAgOAorc3RydWN0IGJmYV9wbG9nX21pZF9zdHJpbmdzX3MgeworCWNoYXIgICAgICAgICAgICBtX3N0cltCRkFfUExfTUlEX1NUUkxFTl07Cit9OworCisvKgorICogdGhlIGZvbGxvd2luZyAjZGVmaW5lcyB3aWxsIGJlIHVzZWQgYnkgdGhlIGxvZ2dpbmcgZW50aXRpZXMgdG8gaW5kaWNhdGUKKyAqIHRoZWlyIGV2ZW50IHR5cGUuIEJGQUwgd2lsbCBjb252ZXJ0IHRoZSBpbnRlZ2VyIHZhbHVlIHRvIHN0cmluZyBmb3JtYXQKKyAqCisqIHByb2Nlc3MgdG8gYmUgdXNlZCB3aGlsZSBjaGFuZ2luZyB0aGUgZm9sbG93aW5nICNkZWZpbmVzOgorICogIC0gQWx3YXlzIGFkZCBuZXcgZW50cmllcyBhdCB0aGUgZW5kCisgKiAgLSBkZWZpbmUgY29ycmVzcG9uZGluZyBzdHJpbmcgaW4gQkZBTAorICogIC0gRG8gbm90IHJlbW92ZSBhbnkgZW50cnkgb3IgcmVhcnJhbmdlIHRoZSBvcmRlci4KKyAqLworZW51bSBiZmFfcGxvZ19laWQgeworCUJGQV9QTF9FSURfSU5WQUxJRCAJCT0gMCwKKwlCRkFfUExfRUlEX0lPQ19ESVNBQkxFIAkJPSAxLAorCUJGQV9QTF9FSURfSU9DX0VOQUJMRSAJCT0gMiwKKwlCRkFfUExfRUlEX1BPUlRfRElTQUJMRSAJPSAzLAorCUJGQV9QTF9FSURfUE9SVF9FTkFCTEUgCQk9IDQsCisJQkZBX1BMX0VJRF9QT1JUX1NUX0NIQU5HRSAJPSA1LAorCUJGQV9QTF9FSURfVFggCQkJPSA2LAorCUJGQV9QTF9FSURfVFhfQUNLMSAJCT0gNywKKwlCRkFfUExfRUlEX1RYX1JKVCAJCT0gOCwKKwlCRkFfUExfRUlEX1RYX0JTWSAJCT0gOSwKKwlCRkFfUExfRUlEX1JYIAkJCT0gMTAsCisJQkZBX1BMX0VJRF9SWF9BQ0sxIAkJPSAxMSwKKwlCRkFfUExfRUlEX1JYX1JKVCAJCT0gMTIsCisJQkZBX1BMX0VJRF9SWF9CU1kgCQk9IDEzLAorCUJGQV9QTF9FSURfQ1RfSU4gCQk9IDE0LAorCUJGQV9QTF9FSURfQ1RfT1VUIAkJPSAxNSwKKwlCRkFfUExfRUlEX0RSSVZFUl9TVEFSVCAJPSAxNiwKKwlCRkFfUExfRUlEX1JTQ04gCQk9IDE3LAorCUJGQV9QTF9FSURfREVCVUcgCQk9IDE4LAorCUJGQV9QTF9FSURfTUlTQyAJCT0gMTksCisJQkZBX1BMX0VJRF9NQVggCQkJPSAyMAorfTsKKworI2RlZmluZSBCRkFfUExfRU5BTUVfU1RSTEVOICAgIAk4CitzdHJ1Y3QgYmZhX3Bsb2dfZWlkX3N0cmluZ3NfcyB7CisJY2hhciAgICAgICAgICAgIGVfc3RyW0JGQV9QTF9FTkFNRV9TVFJMRU5dOworfTsKKworI2RlZmluZSBCRkFfUExfU0lHX0xFTgk4CisjZGVmaW5lIEJGQV9QTF9TSUdfU1RSICAiMTJwbDEyMyIKKworLyoKKyAqIHBlciBwb3J0IGNpcmN1bGFyIGxvZyBidWZmZXIKKyAqLworc3RydWN0IGJmYV9wbG9nX3MgeworCWNoYXIgICAgICAgICAgICBwbG9nX3NpZ1tCRkFfUExfU0lHX0xFTl07CS8qIFN0YXJ0IHNpZ25hdHVyZSAqLworCXU4ICAgICAgICAgcGxvZ19lbmFibGVkOworCXU4ICAgICAgICAgcnN2ZFs3XTsKKwl1MzIgICAgICAgIHRpY2tzOworCXUxNiAgICAgICAgaGVhZDsKKwl1MTYgICAgICAgIHRhaWw7CisJc3RydWN0IGJmYV9wbG9nX3JlY19zICBwbG9nX3JlY3NbQkZBX1BMX05MT0dfRU5UU107Cit9OworCit2b2lkIGJmYV9wbG9nX2luaXQoc3RydWN0IGJmYV9wbG9nX3MgKnBsb2cpOwordm9pZCBiZmFfcGxvZ19zdHIoc3RydWN0IGJmYV9wbG9nX3MgKnBsb2csIGVudW0gYmZhX3Bsb2dfbWlkIG1pZCwKKwkJCWVudW0gYmZhX3Bsb2dfZWlkIGV2ZW50LCB1MTYgbWlzYywgY2hhciAqbG9nX3N0cik7Cit2b2lkIGJmYV9wbG9nX2ludGFycihzdHJ1Y3QgYmZhX3Bsb2dfcyAqcGxvZywgZW51bSBiZmFfcGxvZ19taWQgbWlkLAorCQkJZW51bSBiZmFfcGxvZ19laWQgZXZlbnQsIHUxNiBtaXNjLAorCQkJdTMyICppbnRhcnIsIHUzMiBudW1faW50cyk7Cit2b2lkIGJmYV9wbG9nX2ZjaGRyKHN0cnVjdCBiZmFfcGxvZ19zICpwbG9nLCBlbnVtIGJmYV9wbG9nX21pZCBtaWQsCisJCQllbnVtIGJmYV9wbG9nX2VpZCBldmVudCwgdTE2IG1pc2MsCisJCQlzdHJ1Y3QgZmNoc19zICpmY2hkcik7Cit2b2lkIGJmYV9wbG9nX2ZjaGRyX2FuZF9wbChzdHJ1Y3QgYmZhX3Bsb2dfcyAqcGxvZywgZW51bSBiZmFfcGxvZ19taWQgbWlkLAorCQkJZW51bSBiZmFfcGxvZ19laWQgZXZlbnQsIHUxNiBtaXNjLAorCQkJc3RydWN0IGZjaHNfcyAqZmNoZHIsIHUzMiBwbGRfdzApOwordm9pZCBiZmFfcGxvZ19jbGVhcihzdHJ1Y3QgYmZhX3Bsb2dfcyAqcGxvZyk7Cit2b2lkIGJmYV9wbG9nX2VuYWJsZShzdHJ1Y3QgYmZhX3Bsb2dfcyAqcGxvZyk7Cit2b2lkIGJmYV9wbG9nX2Rpc2FibGUoc3RydWN0IGJmYV9wbG9nX3MgKnBsb2cpOworYmZhX2Jvb2xlYW5fdAliZmFfcGxvZ19nZXRfc2V0dGluZyhzdHJ1Y3QgYmZhX3Bsb2dfcyAqcGxvZyk7CisKKyNlbmRpZiAvKiBfX0JGQV9QT1JUTE9HX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2NzL2JmYV9xLmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvY3MvYmZhX3EuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYTg5NWZhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2NzL2JmYV9xLmgKQEAgLTAsMCArMSw4MSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisvKioKKyAqICBiZmFfcS5oIENpcmN1bGFyIHF1ZXVlIGRlZmluaXRpb25zLgorICovCisKKyNpZm5kZWYgX19CRkFfUV9IX18KKyNkZWZpbmUgX19CRkFfUV9IX18KKworI2RlZmluZSBiZmFfcV9maXJzdChfcSkgKCh2b2lkICopKCgoc3RydWN0IGxpc3RfaGVhZCAqKSAoX3EpKS0+bmV4dCkpCisjZGVmaW5lIGJmYV9xX25leHQoX3FlKQkoKChzdHJ1Y3QgbGlzdF9oZWFkICopIChfcWUpKS0+bmV4dCkKKyNkZWZpbmUgYmZhX3FfcHJldihfcWUpICgoKHN0cnVjdCBsaXN0X2hlYWQgKikgKF9xZSkpLT5wcmV2KQorCisvKgorICogYmZhX3FfcWVfaW5pdCAtIHRvIGluaXRpYWxpemUgYSBxdWV1ZSBlbGVtZW50CisgKi8KKyNkZWZpbmUgYmZhX3FfcWVfaW5pdChfcWUpIHsJCQkJCQlcCisJYmZhX3FfbmV4dChfcWUpID0gKHN0cnVjdCBsaXN0X2hlYWQgKikgTlVMTDsJCQlcCisJYmZhX3FfcHJldihfcWUpID0gKHN0cnVjdCBsaXN0X2hlYWQgKikgTlVMTDsJCQlcCit9CisKKy8qCisgKiBiZmFfcV9kZXEgLSBkZXF1ZXVlIGFuIGVsZW1lbnQgZnJvbSBoZWFkIG9mIHRoZSBxdWV1ZQorICovCisjZGVmaW5lIGJmYV9xX2RlcShfcSwgX3FlKSB7CQkJCQkJXAorCWlmICghbGlzdF9lbXB0eShfcSkpIHsJCQkJCVwKKwkJKCooKHN0cnVjdCBsaXN0X2hlYWQgKiopIChfcWUpKSkgPSBiZmFfcV9uZXh0KF9xKTsJXAorCQliZmFfcV9wcmV2KGJmYV9xX25leHQoKigoc3RydWN0IGxpc3RfaGVhZCAqKikgX3FlKSkpID0JXAorCQkJCQkJKHN0cnVjdCBsaXN0X2hlYWQgKikgKF9xKTsgXAorCQliZmFfcV9uZXh0KF9xKSA9IGJmYV9xX25leHQoKigoc3RydWN0IGxpc3RfaGVhZCAqKikgX3FlKSk7IFwKKwkJQkZBX1FfREJHX0lOSVQoKigoc3RydWN0IGxpc3RfaGVhZCAqKikgX3FlKSk7CQlcCisJfSBlbHNlIHsJCQkJCQkJXAorCQkqKChzdHJ1Y3QgbGlzdF9oZWFkICoqKSAoX3FlKSkgPSAoc3RydWN0IGxpc3RfaGVhZCAqKSBOVUxMOyBcCisJfQkJCQkJCQkJXAorfQorCisvKgorICogYmZhX3FfZGVxX3RhaWwgLSBkZXF1ZXVlIGFuIGVsZW1lbnQgZnJvbSB0YWlsIG9mIHRoZSBxdWV1ZQorICovCisjZGVmaW5lIGJmYV9xX2RlcV90YWlsKF9xLCBfcWUpIHsJCQkJCSAgICBcCisJaWYgKCFsaXN0X2VtcHR5KF9xKSkgewkJCQkJICAgICAgICAgICAgXAorCQkqKChzdHJ1Y3QgbGlzdF9oZWFkICoqKSAoX3FlKSkgPSBiZmFfcV9wcmV2KF9xKTsJICAgIFwKKwkJYmZhX3FfbmV4dChiZmFfcV9wcmV2KCooKHN0cnVjdCBsaXN0X2hlYWQgKiopIF9xZSkpKSA9IAkgICAgXAorCQkJCQkJKHN0cnVjdCBsaXN0X2hlYWQgKikgKF9xKTsgIFwKKwkJYmZhX3FfcHJldihfcSkgPSBiZmFfcV9wcmV2KCooc3RydWN0IGxpc3RfaGVhZCAqKikgX3FlKTsgICAgXAorCQlCRkFfUV9EQkdfSU5JVCgqKChzdHJ1Y3QgbGlzdF9oZWFkICoqKSBfcWUpKTsJCSAgICBcCisJfSBlbHNlIHsJCQkJCQkJICAgIFwKKwkJKigoc3RydWN0IGxpc3RfaGVhZCAqKikgKF9xZSkpID0gKHN0cnVjdCBsaXN0X2hlYWQgKikgTlVMTDsgXAorCX0JCQkJCQkJCSAgICBcCit9CisKKy8qCisgKiAjaWZkZWYgQkZBX0RFQlVHIChVc2luZyBiZmFfYXNzZXJ0IHRvIGNoZWNrIGZvciBkZWJ1Z19idWlsZCBpcyBub3QKKyAqIGNvbnNpc3RlbnQgYWNyb3NzIG1vZHVsZXMpCisgKi8KKyNpZm5kZWYgQkZBX1BFUkZfQlVJTEQKKyNkZWZpbmUgQkZBX1FfREJHX0lOSVQoX3FlKQliZmFfcV9xZV9pbml0KF9xZSkKKyNlbHNlCisjZGVmaW5lIEJGQV9RX0RCR19JTklUKF9xZSkKKyNlbmRpZgorCisjZGVmaW5lIGJmYV9xX2lzX29uX3EoX3EsIF9xZSkJCVwKKwliZmFfcV9pc19vbl9xX2Z1bmMoX3EsIChzdHJ1Y3QgbGlzdF9oZWFkICopKF9xZSkpCitleHRlcm4gaW50IGJmYV9xX2lzX29uX3FfZnVuYyhzdHJ1Y3QgbGlzdF9oZWFkICpxLCBzdHJ1Y3QgbGlzdF9oZWFkICpxZSk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2NzL2JmYV9zbS5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2NzL2JmYV9zbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4NzcwNjYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvY3MvYmZhX3NtLmgKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisvKioKKyAqICBiZmFzbS5oIFN0YXRlIG1hY2hpbmUgZGVmaW5lcworICovCisKKyNpZm5kZWYgX19CRkFfU01fSF9fCisjZGVmaW5lIF9fQkZBX1NNX0hfXworCit0eXBlZGVmIHZvaWQgKCpiZmFfc21fdCkodm9pZCAqc20sIGludCBldmVudCk7CisKKyNkZWZpbmUgYmZhX3NtX3NldF9zdGF0ZShfc20sIF9zdGF0ZSkJKF9zbSktPnNtID0gKGJmYV9zbV90KShfc3RhdGUpCisjZGVmaW5lIGJmYV9zbV9zZW5kX2V2ZW50KF9zbSwgX2V2ZW50KQkoX3NtKS0+c20oKF9zbSksIChfZXZlbnQpKQorI2RlZmluZSBiZmFfc21fZ2V0X3N0YXRlKF9zbSkJCSgoX3NtKS0+c20pCisjZGVmaW5lIGJmYV9zbV9jbXBfc3RhdGUoX3NtLCBfc3RhdGUpCSgoX3NtKS0+c20gPT0gKGJmYV9zbV90KShfc3RhdGUpKQorCisvKioKKyAqIEZvciBjb252ZXJ0aW5nIGZyb20gc3RhdGUgbWFjaGluZSBmdW5jdGlvbiB0byBzdGF0ZSBlbmNvZGluZy4KKyAqLworc3RydWN0IGJmYV9zbV90YWJsZV9zIHsKKwliZmFfc21fdAlzbTsJLyogIHN0YXRlIG1hY2hpbmUgZnVuY3Rpb24JKi8KKwlpbnQJCXN0YXRlOwkvKiAgc3RhdGUgbWFjaGluZSBlbmNvZGluZwkqLworCWNoYXIJCSpuYW1lOwkvKiAgc3RhdGUgbmFtZSBmb3IgZGlzcGxheQkqLworfTsKKyNkZWZpbmUgQkZBX1NNKF9zbSkJKChiZmFfc21fdCkoX3NtKSkKKworaW50IGJmYV9zbV90b19zdGF0ZShzdHJ1Y3QgYmZhX3NtX3RhYmxlX3MgKnNtdCwgYmZhX3NtX3Qgc20pOworCisvKioKKyAqIFN0YXRlIG1hY2hpbmUgd2l0aCBlbnRyeSBhY3Rpb25zLgorICovCit0eXBlZGVmIHZvaWQgKCpiZmFfZnNtX3QpKHZvaWQgKmZzbSwgaW50IGV2ZW50KTsKKworLyoqCisgKiBvYyAtIG9iamVjdCBjbGFzcyBlZy4gYmZhX2lvYworICogc3QgLSBzdGF0ZSwgZWcuIHJlc2V0CisgKiBvdHlwZSAtIG9iamVjdCB0eXBlLCBlZy4gc3RydWN0IGJmYV9pb2NfcworICogZXR5cGUgLSBvYmplY3QgdHlwZSwgZWcuIGVudW0gaW9jX2V2ZW50CisgKi8KKyNkZWZpbmUgYmZhX2ZzbV9zdGF0ZV9kZWNsKG9jLCBzdCwgb3R5cGUsIGV0eXBlKQkJXAorCXN0YXRpYyB2b2lkIG9jICMjIF9zbV8gIyMgc3Qob3R5cGUgKiBmc20sIGV0eXBlIGV2ZW50KTsgICAgICBcCisJc3RhdGljIHZvaWQgb2MgIyMgX3NtXyAjIyBzdCAjIyBfZW50cnkob3R5cGUgKiBmc20pCisKKyNkZWZpbmUgYmZhX2ZzbV9zZXRfc3RhdGUoX2ZzbSwgX3N0YXRlKSBkbyB7CVwKKwkoX2ZzbSktPmZzbSA9IChiZmFfZnNtX3QpKF9zdGF0ZSk7ICAgICAgXAorCV9zdGF0ZSAjIyBfZW50cnkoX2ZzbSk7ICAgICAgXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBiZmFfZnNtX3NlbmRfZXZlbnQoX2ZzbSwgX2V2ZW50KQlcCisJKF9mc20pLT5mc20oKF9mc20pLCAoX2V2ZW50KSkKKyNkZWZpbmUgYmZhX2ZzbV9jbXBfc3RhdGUoX2ZzbSwgX3N0YXRlKQkJXAorCSgoX2ZzbSktPmZzbSA9PSAoYmZhX2ZzbV90KShfc3RhdGUpKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9jcy9iZmFfdHJjLmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvY3MvYmZhX3RyYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlNzQzOTIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvY3MvYmZhX3RyYy5oCkBAIC0wLDAgKzEsMTc2IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaWZuZGVmIF9fQkZBX1RSQ19IX18KKyNkZWZpbmUgX19CRkFfVFJDX0hfXworCisjaW5jbHVkZSA8YmZhX29zX2luYy5oPgorCisjaWZuZGVmIEJGQV9UUkNfTUFYCisjZGVmaW5lIEJGQV9UUkNfTUFYCSg0ICogMTAyNCkKKyNlbmRpZgorCisjaWZuZGVmIEJGQV9UUkNfVFMKKyNkZWZpbmUgQkZBX1RSQ19UUyhfdHJjbSkJKChfdHJjbSktPnRpY2tzICsrKQorI2VuZGlmCisKK3N0cnVjdCBiZmFfdHJjX3MgeworI2lmZGVmIF9fQklHRU5ESUFOCisJdTE2CWZpbGVubzsKKwl1MTYJbGluZTsKKyNlbHNlCisJdTE2CWxpbmU7CisJdTE2CWZpbGVubzsKKyNlbmRpZgorCXUzMgl0aW1lc3RhbXA7CisJdW5pb24geworCQlzdHJ1Y3QgeworCQkJdTMyCXJzdmQ7CisJCQl1MzIJdTMyOworCQl9IHUzMjsKKwkJdTY0CXU2NDsKKwl9IGRhdGE7Cit9OworCisKK3N0cnVjdCBiZmFfdHJjX21vZF9zIHsKKwl1MzIJaGVhZDsKKwl1MzIJdGFpbDsKKwl1MzIJbnRyYzsKKwl1MzIJc3RvcHBlZDsKKwl1MzIJdGlja3M7CisJdTMyCXJzdmRbM107CisJc3RydWN0IGJmYV90cmNfcyB0cmNbQkZBX1RSQ19NQVhdOworfTsKKworCitlbnVtIHsKKwlCRkFfVFJDX0ZXICAgPSAxLAkvKiAgZmlybXdhcmUgbW9kdWxlcyAqLworCUJGQV9UUkNfSEFMICA9IDIsCS8qICBCRkEgbW9kdWxlcyAqLworCUJGQV9UUkNfRkNTICA9IDMsCS8qICBCRkEgRkNTIG1vZHVsZXMgKi8KKwlCRkFfVFJDX0xEUlYgPSA0LAkvKiAgTGludXggZHJpdmVyIG1vZHVsZXMgKi8KKwlCRkFfVFJDX1NEUlYgPSA1LAkvKiAgU29sYXJpcyBkcml2ZXIgbW9kdWxlcyAqLworCUJGQV9UUkNfVkRSViA9IDYsCS8qICB2bXdhcmUgZHJpdmVyIG1vZHVsZXMgKi8KKwlCRkFfVFJDX1dEUlYgPSA3LAkvKiAgd2luZG93cyBkcml2ZXIgbW9kdWxlcyAqLworCUJGQV9UUkNfQUVOICA9IDgsCS8qICBBRU4gbW9kdWxlICovCisJQkZBX1RSQ19CSU9TID0gOSwJLyogIGJpb3MgZHJpdmVyIG1vZHVsZXMgKi8KKwlCRkFfVFJDX0VGSSAgPSAxMCwJLyogIEVGSSBkcml2ZXIgbW9kdWxlcyAqLworCUJOQV9UUkNfV0RSViA9IDExLAkvKiAgQk5BIHdpbmRvd3MgZHJpdmVyIG1vZHVsZXMgKi8KKwlCTkFfVFJDX1ZEUlYgPSAxMiwJLyogIEJOQSB2bXdhcmUgZHJpdmVyIG1vZHVsZXMgKi8KKwlCTkFfVFJDX1NEUlYgPSAxMywJLyogIEJOQSBTb2xhcmlzIGRyaXZlciBtb2R1bGVzICovCisJQk5BX1RSQ19MRFJWID0gMTQsCS8qICBCTkEgTGludXggZHJpdmVyIG1vZHVsZXMgKi8KKwlCTkFfVFJDX0hBTCAgPSAxNSwJLyogIEJOQSBtb2R1bGVzICovCisJQkZBX1RSQ19DTkEgID0gMTYsCS8qICBDb21tb24gbW9kdWxlcyAqLworCUJOQV9UUkNfSU1EUlYgPSAxNwkvKiAgQk5BIHdpbmRvd3MgaW50ZXJtZWRpYXRlIGRyaXZlciBtb2R1bGVzICovCit9OworI2RlZmluZSBCRkFfVFJDX01PRF9TSAkxMAorI2RlZmluZSBCRkFfVFJDX01PRChfX21vZCkJKChCRkFfVFJDXyAjIyBfX21vZCkgPDwgQkZBX1RSQ19NT0RfU0gpCisKKy8qKgorICogRGVmaW5lIGEgbmV3IHRyYWNpbmcgZmlsZSAobW9kdWxlKS4gTW9kdWxlIHNob3VsZCBtYXRjaCBvbmUgZGVmaW5lZCBhYm92ZS4KKyAqLworI2RlZmluZSBCRkFfVFJDX0ZJTEUoX19tb2QsIF9fc3VibW9kKQkJCQkJXAorCXN0YXRpYyBpbnQgX190cmNfZmlsZW5vID0gKChCRkFfVFJDXyAjIyBfX21vZCAjIyBfICMjIF9fc3VibW9kKSB8IFwKKwkJCQkJCSBCRkFfVFJDX01PRChfX21vZCkpCisKKworI2RlZmluZSBiZmFfdHJjMzIoX3RyY3AsIF9kYXRhKQlcCisJX19iZmFfdHJjKChfdHJjcCktPnRyY21vZCwgX190cmNfZmlsZW5vLCBfX0xJTkVfXywgKHUzMilfZGF0YSkKKworCisjaWZuZGVmIEJGQV9CT09UX0JVSUxECisjZGVmaW5lIGJmYV90cmMoX3RyY3AsIF9kYXRhKQlcCisJX19iZmFfdHJjKChfdHJjcCktPnRyY21vZCwgX190cmNfZmlsZW5vLCBfX0xJTkVfXywgKHU2NClfZGF0YSkKKyNlbHNlCit2b2lkIGJmYV9ib290X3RyYyhzdHJ1Y3QgYmZhX3RyY19tb2RfcyAqdHJjbW9kLCB1MTYgZmlsZW5vLAorCQkJdTE2IGxpbmUsIHUzMiBkYXRhKTsKKyNkZWZpbmUgYmZhX3RyYyhfdHJjcCwgX2RhdGEpCVwKKwliZmFfYm9vdF90cmMoKF90cmNwKS0+dHJjbW9kLCBfX3RyY19maWxlbm8sIF9fTElORV9fLCAodTMyKV9kYXRhKQorI2VuZGlmCisKKworc3RhdGljIGlubGluZSB2b2lkCitiZmFfdHJjX2luaXQoc3RydWN0IGJmYV90cmNfbW9kX3MgKnRyY20pCit7CisJdHJjbS0+aGVhZCA9IHRyY20tPnRhaWwgPSB0cmNtLT5zdG9wcGVkID0gMDsKKwl0cmNtLT5udHJjID0gQkZBX1RSQ19NQVg7Cit9CisKKworc3RhdGljIGlubGluZSB2b2lkCitiZmFfdHJjX3N0b3Aoc3RydWN0IGJmYV90cmNfbW9kX3MgKnRyY20pCit7CisJdHJjbS0+c3RvcHBlZCA9IDE7Cit9CisKKyNpZmRlZiBGV1RSQworZXh0ZXJuIHZvaWQgZGNfZmx1c2godm9pZCAqZGF0YSk7CisjZWxzZQorI2RlZmluZSBkY19mbHVzaChkYXRhKQorI2VuZGlmCisKKworc3RhdGljIGlubGluZSB2b2lkCitfX2JmYV90cmMoc3RydWN0IGJmYV90cmNfbW9kX3MgKnRyY20sIGludCBmaWxlbm8sIGludCBsaW5lLCB1NjQgZGF0YSkKK3sKKwlpbnQJCXRhaWwgPSB0cmNtLT50YWlsOworCXN0cnVjdCBiZmFfdHJjX3MgCSp0cmMgPSAmdHJjbS0+dHJjW3RhaWxdOworCisJaWYgKHRyY20tPnN0b3BwZWQpCisJCXJldHVybjsKKworCXRyYy0+ZmlsZW5vID0gKHUxNikgZmlsZW5vOworCXRyYy0+bGluZSA9ICh1MTYpIGxpbmU7CisJdHJjLT5kYXRhLnU2NCA9IGRhdGE7CisJdHJjLT50aW1lc3RhbXAgPSBCRkFfVFJDX1RTKHRyY20pOworCWRjX2ZsdXNoKHRyYyk7CisKKwl0cmNtLT50YWlsID0gKHRyY20tPnRhaWwgKyAxKSAmIChCRkFfVFJDX01BWCAtIDEpOworCWlmICh0cmNtLT50YWlsID09IHRyY20tPmhlYWQpCisJCXRyY20tPmhlYWQgPSAodHJjbS0+aGVhZCArIDEpICYgKEJGQV9UUkNfTUFYIC0gMSk7CisJZGNfZmx1c2godHJjbSk7Cit9CisKKworc3RhdGljIGlubGluZSB2b2lkCitfX2JmYV90cmMzMihzdHJ1Y3QgYmZhX3RyY19tb2RfcyAqdHJjbSwgaW50IGZpbGVubywgaW50IGxpbmUsIHUzMiBkYXRhKQoreworCWludAkJdGFpbCA9IHRyY20tPnRhaWw7CisJc3RydWN0IGJmYV90cmNfcyAqdHJjID0gJnRyY20tPnRyY1t0YWlsXTsKKworCWlmICh0cmNtLT5zdG9wcGVkKQorCQlyZXR1cm47CisKKwl0cmMtPmZpbGVubyA9ICh1MTYpIGZpbGVubzsKKwl0cmMtPmxpbmUgPSAodTE2KSBsaW5lOworCXRyYy0+ZGF0YS51MzIudTMyID0gZGF0YTsKKwl0cmMtPnRpbWVzdGFtcCA9IEJGQV9UUkNfVFModHJjbSk7CisJZGNfZmx1c2godHJjKTsKKworCXRyY20tPnRhaWwgPSAodHJjbS0+dGFpbCArIDEpICYgKEJGQV9UUkNfTUFYIC0gMSk7CisJaWYgKHRyY20tPnRhaWwgPT0gdHJjbS0+aGVhZCkKKwkJdHJjbS0+aGVhZCA9ICh0cmNtLT5oZWFkICsgMSkgJiAoQkZBX1RSQ19NQVggLSAxKTsKKwlkY19mbHVzaCh0cmNtKTsKK30KKworI2lmbmRlZiBCRkFfUEVSRl9CVUlMRAorI2RlZmluZSBiZmFfdHJjX2ZwKF90cmNwLCBfZGF0YSkJYmZhX3RyYyhfdHJjcCwgX2RhdGEpCisjZWxzZQorI2RlZmluZSBiZmFfdHJjX2ZwKF90cmNwLCBfZGF0YSkKKyNlbmRpZgorCisjZW5kaWYgLyogX19CRkFfVFJDX0hfXyAqLworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvY3MvYmZhX3djLmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvY3MvYmZhX3djLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQ2MGJkNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9jcy9iZmFfd2MuaApAQCAtMCwwICsxLDY4IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKy8qKgorICogIGJmYV93Yy5oIEdlbmVyaWMgd2FpdCBjb3VudGVyLgorICovCisKKyNpZm5kZWYgX19CRkFfV0NfSF9fCisjZGVmaW5lIF9fQkZBX1dDX0hfXworCit0eXBlZGVmIHZvaWQgKCpiZmFfd2NfcmVzdW1lX3QpICh2b2lkICpjYmFyZyk7CisKK3N0cnVjdCBiZmFfd2NfcyB7CisJYmZhX3djX3Jlc3VtZV90IHdjX3Jlc3VtZTsKKwl2b2lkCQkqd2NfY2Jhcmc7CisJaW50CQl3Y19jb3VudDsKK307CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorYmZhX3djX3VwKHN0cnVjdCBiZmFfd2NfcyAqd2MpCit7CisJd2MtPndjX2NvdW50Kys7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorYmZhX3djX2Rvd24oc3RydWN0IGJmYV93Y19zICp3YykKK3sKKwl3Yy0+d2NfY291bnQtLTsKKwlpZiAod2MtPndjX2NvdW50ID09IDApCisJCXdjLT53Y19yZXN1bWUod2MtPndjX2NiYXJnKTsKK30KKworLyoqCisgKiBJbml0aWFsaXplIGEgd2FpdGluZyBjb3VudGVyLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQKK2JmYV93Y19pbml0KHN0cnVjdCBiZmFfd2NfcyAqd2MsIGJmYV93Y19yZXN1bWVfdCB3Y19yZXN1bWUsIHZvaWQgKndjX2NiYXJnKQoreworCXdjLT53Y19yZXN1bWUgPSB3Y19yZXN1bWU7CisJd2MtPndjX2NiYXJnID0gd2NfY2Jhcmc7CisJd2MtPndjX2NvdW50ID0gMDsKKwliZmFfd2NfdXAod2MpOworfQorCisvKioKKyAqIFdhaXQgZm9yIGNvdW50ZXIgdG8gcmVhY2ggemVybworICovCitzdGF0aWMgaW5saW5lIHZvaWQKK2JmYV93Y193YWl0KHN0cnVjdCBiZmFfd2NfcyAqd2MpCit7CisJYmZhX3djX2Rvd24od2MpOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX2FkYXB0ZXIuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX2FkYXB0ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YzIwOGZjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfYWRhcHRlci5oCkBAIC0wLDAgKzEsODIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpZm5kZWYgX19CRkFfREVGU19BREFQVEVSX0hfXworI2RlZmluZSBfX0JGQV9ERUZTX0FEQVBURVJfSF9fCisKKyNpbmNsdWRlIDxwcm90b2NvbC90eXBlcy5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfdmVyc2lvbi5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfbWZnLmg+CisKKy8qKgorICogQkZBIGFkYXB0ZXIgbGV2ZWwgYXR0cmlidXRlcy4KKyAqLworZW51bSB7CisJQkZBX0FEQVBURVJfU0VSSUFMX05VTV9MRU4gPSBTVFJTWihCRkFfTUZHX1NFUklBTE5VTV9TSVpFKSwKKwkJCQkJLyoKKwkJCQkJICohPCBhZGFwdGVyIHNlcmlhbCBudW0gbGVuZ3RoCisJCQkJCSAqLworCUJGQV9BREFQVEVSX01PREVMX05BTUVfTEVOICA9IDE2LCAgLyogIG1vZGVsIG5hbWUgbGVuZ3RoICovCisJQkZBX0FEQVBURVJfTU9ERUxfREVTQ1JfTEVOID0gMTI4LCAvKiAgbW9kZWwgZGVzY3JpcHRpb24gbGVuZ3RoICovCisJQkZBX0FEQVBURVJfTUZHX05BTUVfTEVOICAgID0gOCwgICAvKiAgbWFudWZhY3R1cmVyIG5hbWUgbGVuZ3RoICovCisJQkZBX0FEQVBURVJfU1lNX05BTUVfTEVOICAgID0gNjQsICAvKiAgYWRhcHRlciBzeW1ib2xpYyBuYW1lIGxlbmd0aCAqLworCUJGQV9BREFQVEVSX09TX1RZUEVfTEVOCSAgICA9IDY0LCAgLyogIGFkYXB0ZXIgb3MgdHlwZSBsZW5ndGggKi8KK307CisKK3N0cnVjdCBiZmFfYWRhcHRlcl9hdHRyX3MgeworCWNoYXIgICAgICAgICAgICBtYW51ZmFjdHVyZXJbQkZBX0FEQVBURVJfTUZHX05BTUVfTEVOXTsKKwljaGFyICAgICAgICAgICAgc2VyaWFsX251bVtCRkFfQURBUFRFUl9TRVJJQUxfTlVNX0xFTl07CisJdTMyCXJzdmQxOworCWNoYXIgICAgICAgICAgICBtb2RlbFtCRkFfQURBUFRFUl9NT0RFTF9OQU1FX0xFTl07CisJY2hhciAgICAgICAgICAgIG1vZGVsX2Rlc2NyW0JGQV9BREFQVEVSX01PREVMX0RFU0NSX0xFTl07CisJd3duX3QgICAgICAgICAgIHB3d247CisJY2hhciAgICAgICAgICAgIG5vZGVfc3ltbmFtZVtGQ19TWU1OQU1FX01BWF07CisJY2hhciAgICAgICAgICAgIGh3X3ZlcltCRkFfVkVSU0lPTl9MRU5dOworCWNoYXIgICAgICAgICAgICBmd192ZXJbQkZBX1ZFUlNJT05fTEVOXTsKKwljaGFyICAgICAgICAgICAgb3B0cm9tX3ZlcltCRkFfVkVSU0lPTl9MRU5dOworCWNoYXIgICAgICAgICAgICBvc190eXBlW0JGQV9BREFQVEVSX09TX1RZUEVfTEVOXTsKKwlzdHJ1Y3QgYmZhX21mZ192cGRfcwl2cGQ7CisJc3RydWN0IG1hY19zCW1hYzsKKworCXU4CQlucG9ydHM7CisJdTgJCW1heF9zcGVlZDsKKwl1OAkJcHJvdG90eXBlOworCWNoYXIJICAgICAgICBhc2ljX3JldjsKKworCXU4ICAgICAgICAgcGNpZV9nZW47CisJdTggICAgICAgICBwY2llX2xhbmVzX29yaWc7CisJdTggICAgICAgICBwY2llX2xhbmVzOworCXU4CSAgICAgICAgY25hX2NhcGFibGU7Cit9OworCisvKioKKyAqIEJGQSBhZGFwdGVyIGxldmVsIGV2ZW50cworICogQXJndW1lbnRzIGJlbG93IGFyZSBpbiBCRkFMIGNvbnRleHQgZnJvbSBNZ210CisgKiBCRkFfUE9SVF9BRU5fQUREOiAgICAgICAgW2luXTogTm9uZSAgICAgW291dF06IHNlcmlhbF9udW0sIHB3d24sIG5wb3J0cworICogQkZBX1BPUlRfQUVOX1JFTU9WRTogICAgIFtpbl06IHB3d24gICAgIFtvdXRdOiBzZXJpYWxfbnVtLCBwd3duLCBucG9ydHMKKyAqLworZW51bSBiZmFfYWRhcHRlcl9hZW5fZXZlbnQgeworCUJGQV9BREFQVEVSX0FFTl9BREQgCT0gMSwJLyogIE5ldyBBZGFwdGVyIGZvdW5kIGV2ZW50ICovCisJQkZBX0FEQVBURVJfQUVOX1JFTU9WRSAJPSAyLAkvKiAgQWRhcHRlciByZW1vdmVkIGV2ZW50ICovCit9OworCitzdHJ1Y3QgYmZhX2FkYXB0ZXJfYWVuX2RhdGFfcyB7CisJY2hhciAgICAgICAgICAgIHNlcmlhbF9udW1bQkZBX0FEQVBURVJfU0VSSUFMX05VTV9MRU5dOworCXUzMiAgICAgICAgbnBvcnRzOwkvKiAgTnVtYmVyIG9mIE5Qb3J0cyAqLworCXd3bl90ICAgICAgICAgICBwd3duOwkvKiAgV1dOIG9mIG9uZSBvZiBpdHMgcGh5c2ljYWwgcG9ydCAqLworfTsKKworI2VuZGlmIC8qIF9fQkZBX0RFRlNfQURBUFRFUl9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX2Flbi5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfYWVuLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGM4MWE2MQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX2Flbi5oCkBAIC0wLDAgKzEsNzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0JGQV9ERUZTX0FFTl9IX18KKyNkZWZpbmUgX19CRkFfREVGU19BRU5fSF9fCisKKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX3R5cGVzLmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc19pb2MuaD4KKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX2FkYXB0ZXIuaD4KKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX3BvcnQuaD4KKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX2xwb3J0Lmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc19ycG9ydC5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfaXRuaW0uaD4KKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX3Rpbi5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfaXBmYy5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfYXVkaXQuaD4KKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX2V0aHBvcnQuaD4KKworZW51bSBiZmFfYWVuX2NhdGVnb3J5IHsKKwlCRkFfQUVOX0NBVF9BREFQVEVSIAk9IDEsCisJQkZBX0FFTl9DQVRfUE9SVCAJPSAyLAorCUJGQV9BRU5fQ0FUX0xQT1JUIAk9IDMsCisJQkZBX0FFTl9DQVRfUlBPUlQgCT0gNCwKKwlCRkFfQUVOX0NBVF9JVE5JTSAJPSA1LAorCUJGQV9BRU5fQ0FUX1RJTiAJPSA2LAorCUJGQV9BRU5fQ0FUX0lQRkMgCT0gNywKKwlCRkFfQUVOX0NBVF9BVURJVCAJPSA4LAorCUJGQV9BRU5fQ0FUX0lPQyAJPSA5LAorCUJGQV9BRU5fQ0FUX0VUSFBPUlQJPSAxMCwKKwlCRkFfQUVOX01BWF9DQVQgCT0gMTAKK307CisKKyNwcmFnbWEgcGFjaygxKQordW5pb24gYmZhX2Flbl9kYXRhX3UgeworCXN0cnVjdCBiZmFfYWRhcHRlcl9hZW5fZGF0YV9zIAlhZGFwdGVyOworCXN0cnVjdCBiZmFfcG9ydF9hZW5fZGF0YV9zIAlwb3J0OworCXN0cnVjdCBiZmFfbHBvcnRfYWVuX2RhdGFfcyAJbHBvcnQ7CisJc3RydWN0IGJmYV9ycG9ydF9hZW5fZGF0YV9zIAlycG9ydDsKKwlzdHJ1Y3QgYmZhX2l0bmltX2Flbl9kYXRhX3MgCWl0bmltOworCXN0cnVjdCBiZmFfYXVkaXRfYWVuX2RhdGFfcyAJYXVkaXQ7CisJc3RydWN0IGJmYV9pb2NfYWVuX2RhdGFfcyAJaW9jOworCXN0cnVjdCBiZmFfZXRocG9ydF9hZW5fZGF0YV9zIAlldGhwb3J0OworfTsKKworc3RydWN0IGJmYV9hZW5fZW50cnlfcyB7CisJZW51bSBiZmFfYWVuX2NhdGVnb3J5IAlhZW5fY2F0ZWdvcnk7CisJaW50CQkJYWVuX3R5cGU7CisJdW5pb24gYmZhX2Flbl9kYXRhX3UgIAlhZW5fZGF0YTsKKwlzdHJ1Y3QgYmZhX3RpbWV2YWxfcyAgIAlhZW5fdHY7CisJczMyICAgICAgICAgCXNlcV9udW07CisJczMyICAgICAgICAgCWJmYWRfbnVtOworCXMzMiAgICAgICAgIAlyc3ZkWzFdOworfTsKKworI3ByYWdtYSBwYWNrKCkKKworI2RlZmluZSBiZmFfYWVuX2V2ZW50X3QgaW50CisKKyNlbmRpZiAvKiBfX0JGQV9ERUZTX0FFTl9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX2F1ZGl0LmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19hdWRpdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlM2E5NjIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19hdWRpdC5oCkBAIC0wLDAgKzEsMzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0JGQV9ERUZTX0FVRElUX0hfXworI2RlZmluZSBfX0JGQV9ERUZTX0FVRElUX0hfXworCisjaW5jbHVkZSA8YmZhX29zX2luYy5oPgorCisvKioKKyAqIEJGQSBhdWRpdCBldmVudHMKKyAqLworZW51bSBiZmFfYXVkaXRfYWVuX2V2ZW50IHsKKwlCRkFfQVVESVRfQUVOX0FVVEhfRU5BQkxFIAk9IDEsCisJQkZBX0FVRElUX0FFTl9BVVRIX0RJU0FCTEUgCT0gMiwKK307CisKKy8qKgorICogYXVkaXQgZXZlbnQgZGF0YQorICovCitzdHJ1Y3QgYmZhX2F1ZGl0X2Flbl9kYXRhX3MgeworCXd3bl90ICAgICAgICAgICBwd3duOworfTsKKworI2VuZGlmIC8qIF9fQkZBX0RFRlNfQVVESVRfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19hdXRoLmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19hdXRoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQxOWM4MwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX2F1dGguaApAQCAtMCwwICsxLDExMiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2lmbmRlZiBfX0JGQV9ERUZTX0FVVEhfSF9fCisjZGVmaW5lIF9fQkZBX0RFRlNfQVVUSF9IX18KKworI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfdHlwZXMuaD4KKworI2RlZmluZSBQVUJMSUNfS0VZCQkJMTU0MDkKKyNkZWZpbmUgUFJJVkFURV9LRVkJCQkxOTAwOQorI2RlZmluZSBLRVlfTEVOCQkJCTMyMzk5CisjZGVmaW5lIEJGQV9BVVRIX1NFQ1JFVF9TVFJJTkdfTEVOCTI1NgorI2RlZmluZSBCRkFfQVVUSF9GQUlMX1RJTUVPVVQJCTB4RkYKKworLyoqCisgKiBBdXRoZW50aWNhdGlvbiBzdGF0dXMKKyAqLworZW51bSBiZmFfYXV0aF9zdGF0dXMgeworCUJGQV9BVVRIX1NUQVRVU19OT05FIAk9IDAsCS8qICBubyBhdXRoZW50aWNhdGlvbiAqLworCUJGQV9BVVRIX1VOSU5JVCAJPSAxLAkvKiAgc3RhdGUgLSB1bmluaXQgKi8KKwlCRkFfQVVUSF9ORUdfU0VORCAJPSAyLAkvKiAgc3RhdGUgLSBuZWdvdGlhdGUgc2VuZCAqLworCUJGQV9BVVRIX0NIQUxfV0FJVCAJPSAzLAkvKiAgc3RhdGUgLSBjaGFsbGVuZ2Ugd2FpdCAqLworCUJGQV9BVVRIX05FR19SRVRSWSAJPSA0LAkvKiAgc3RhdGUgLSBuZWdvdGlhdGUgcmV0cnkgKi8KKwlCRkFfQVVUSF9SRVBMWV9TRU5EIAk9IDUsCS8qICBzdGF0ZSAtIHJlcGx5IHNlbmQgKi8KKwlCRkFfQVVUSF9TVEFUVVNfV0FJVCAJPSA2LAkvKiAgc3RhdGUgLSBzdGF0dXMgd2FpdCAqLworCUJGQV9BVVRIX1NVQ0NFU1MgCT0gNywJLyogIHN0YXRlIC0gc3VjY2VzcyAqLworCUJGQV9BVVRIX0ZBSUxFRCAJPSA4LAkvKiAgc3RhdGUgLSBmYWlsZWQgKi8KKwlCRkFfQVVUSF9TVEFUVVNfVU5LTk9XTiA9IDksCS8qICBhdXRoZW50aWNhdGlvbiBzdGF0dXMgdW5rbm93biAqLworfTsKKworc3RydWN0IGF1dGhfcHJvdG9fc3RhdHNfcyB7CisJdTMyICAgICAgICBhdXRoX3JqdHM7CisJdTMyICAgICAgICBhdXRoX25lZ3M7CisJdTMyICAgICAgICBhdXRoX2RvbmVzOworCisJdTMyICAgICAgICBkaGNoYXBfY2hhbGxlbmdlczsKKwl1MzIgICAgICAgIGRoY2hhcF9yZXBsaWVzOworCXUzMiAgICAgICAgZGhjaGFwX3N1Y2Nlc3NlczsKK307CisKKy8qKgorICogQXV0aGVudGljYXRpb24gcmVsYXRlZCBzdGF0aXN0aWNzCisgKi8KK3N0cnVjdCBiZmFfYXV0aF9zdGF0c19zIHsKKwl1MzIgICAgICAgICAgIGF1dGhfZmFpbHVyZXM7CS8qICBhdXRoZW50aWNhdGlvbiBmYWlsdXJlcyAqLworCXUzMiAgICAgICAgICAgYXV0aF9zdWNjZXNzZXM7CS8qICBhdXRoZW50aWNhdGlvbiBzdWNjZXNzZXMqLworCXN0cnVjdCBhdXRoX3Byb3RvX3N0YXRzX3MgYXV0aF9yeF9zdGF0czsgLyogIFJ4IHByb3RvY29sIHN0YXRzICovCisJc3RydWN0IGF1dGhfcHJvdG9fc3RhdHNfcyBhdXRoX3R4X3N0YXRzOyAvKiAgVHggcHJvdG9jb2wgc3RhdHMgKi8KK307CisKKy8qKgorICogQXV0aGVudGljYXRpb24gaGFzaCBmdW5jdGlvbiBhbGdvcml0aG1zCisgKi8KK2VudW0gYmZhX2F1dGhfYWxnbyB7CisJQkZBX0FVVEhfQUxHT19NRDUgCT0gMSwJLyogIE1lc3NhZ2UtRGlnZXN0IGFsZ29yaXRobSA1ICovCisJQkZBX0FVVEhfQUxHT19TSEExIAk9IDIsCS8qICBTZWN1cmUgSGFzaCBBbGdvcml0aG0gMSAqLworCUJGQV9BVVRIX0FMR09fTVMgCT0gMywJLyogIE1ENSwgdGhlbiBTSEEtMSAqLworCUJGQV9BVVRIX0FMR09fU00gCT0gNCwJLyogIFNIQS0xLCB0aGVuIE1ENSAqLworfTsKKworLyoqCisgKiBESCBHcm91cHMKKyAqCisgKiBDdXJyZW50IHZhbHVlIGNvdWxkIGJlIGNvbWJpbmF0aW9uIG9mIG9uZSBvciBtb3JlIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzCisgKi8KK2VudW0gYmZhX2F1dGhfZ3JvdXAgeworCUJGQV9BVVRIX0dST1VQX0RITlVMTCAJPSAwLAkvKiAgREggTlVMTCAodmFsdWUgPT0gMCkgKi8KKwlCRkFfQVVUSF9HUk9VUF9ESDc2OCAJPSAxLAkvKiAgREggZ3JvdXAgNzY4ICh2YWx1ZSA9PSAxKSAqLworCUJGQV9BVVRIX0dST1VQX0RIMTAyNCAJPSAyLAkvKiAgREggZ3JvdXAgMTAyNCAodmFsdWUgPT0gMikgKi8KKwlCRkFfQVVUSF9HUk9VUF9ESDEyODAgCT0gNCwJLyogIERIIGdyb3VwIDEyODAgKHZhbHVlID09IDMpICovCisJQkZBX0FVVEhfR1JPVVBfREgxNTM2IAk9IDgsCS8qICBESCBncm91cCAxNTM2ICh2YWx1ZSA9PSA0KSAqLworCisJQkZBX0FVVEhfR1JPVVBfQUxMIAk9IDI1NgkvKiAgVXNlIGRlZmF1bHQgREggZ3JvdXAgb3JkZXIKKwkJCQkJICogICAgMCwgMSwgMiwgMywgNCAqLworfTsKKworLyoqCisgKiBBdXRoZW50aWNhdGlvbiBzZWNyZXQgc291cmNlcworICovCitlbnVtIGJmYV9hdXRoX3NlY3JldHNvdXJjZSB7CisJQkZBX0FVVEhfU0VDU1JDX0xPQ0FMIAk9IDEsCS8qICBsb2NhbGx5IGNvbmZpZ3VyZWQgKi8KKwlCRkFfQVVUSF9TRUNTUkNfUkFESVVTIAk9IDIsCS8qICB1c2UgcmFkaXVzIHNlcnZlciAqLworCUJGQV9BVVRIX1NFQ1NSQ19UQUNBQ1MgCT0gMywJLyogIFRBQ0FDUyBzZXJ2ZXIgKi8KK307CisKKy8qKgorICogQXV0aGVudGljYXRpb24gYXR0cmlidXRlcworICovCitzdHJ1Y3QgYmZhX2F1dGhfYXR0cl9zIHsKKwllbnVtIGJmYV9hdXRoX3N0YXR1cyAJc3RhdHVzOworCWVudW0gYmZhX2F1dGhfYWxnbyAJYWxnbzsKKwllbnVtIGJmYV9hdXRoX2dyb3VwIAlkaF9ncnA7CisJdTE2CQlyanRfY29kZTsKKwl1MTYJCXJqdF9jb2RlX2V4cDsKKwl1OAkJCXNlY3JldF9zZXQ7CisJdTgJCQlyZXN2WzddOworfTsKKworI2VuZGlmIC8qIF9fQkZBX0RFRlNfQVVUSF9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX2Jvb3QuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX2Jvb3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZjRhYTUyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfYm9vdC5oCkBAIC0wLDAgKzEsNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0JGQV9ERUZTX0JPT1RfSF9fCisjZGVmaW5lIF9fQkZBX0RFRlNfQk9PVF9IX18KKworI2luY2x1ZGUgPHByb3RvY29sL3R5cGVzLmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc190eXBlcy5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfcHBvcnQuaD4KKworZW51bSB7CisJQkZBX0JPT1RfQk9PVExVTl9NQVggPSA0LAkvKiAgbWF4aW11bSBib290IGx1biBwZXIgSU9DICovCit9OworCisjZGVmaW5lIEJPT1RfQ0ZHX1JFVjEJMQorCisvKioKKyAqICAgICAgQm9vdCBvcHRpb25zIHNldHRpbmcuIEJvb3Qgb3B0aW9ucyBzZXR0aW5nIGRldGVybWluZXMgZnJvbSB3aGVyZQorICogICAgICB0byBnZXQgdGhlIGJvb3QgbHVuIGluZm9ybWF0aW9uCisgKi8KK2VudW0gYmZhX2Jvb3RfYm9vdG9wdCB7CisgICAgQkZBX0JPT1RfQVVUT19ESVNDT1ZFUiA9IDAsICAgIC8qICBCb290IGZyb20gYmx1biBwcm92aWRlZCBieSBmYWJyaWMgKi8KKyAgICBCRkFfQk9PVF9TVE9SRURfQkxVTiAgID0gMSwgICAgLyogIEJvb3QgZnJvbSBibHVucyBzdG9yZWQgaW4gZmxhc2ggICAqLworICAgIEJGQV9CT09UX0ZJUlNUX0xVTiAgICAgPSAyLCAgICAvKiAgQm9vdCBmcm9tIGZpcnN0IGRpc2NvdmVyZWQgYmx1biAgICovCit9OworCisvKioKKyAqIEJvb3QgbHVuIGluZm9ybWF0aW9uLgorICovCitzdHJ1Y3QgYmZhX2Jvb3RfYm9vdGx1bl9zIHsKKwl3d25fdCAgICAgICAgICAgcHd3bjsJLyogIHBvcnQgd3duIG9mIHRhcmdldCAqLworCWx1bl90ICAgICAgICAgICBsdW47CS8qICA2NC1iaXQgbHVuICovCit9OworCisvKioKKyAqIEJPT1QgYm9vdCBjb25maWd1cmF0b24KKyAqLworc3RydWN0IGJmYV9ib290X2NmZ19zIHsKKwl1OCAgICAgICAgIHZlcnNpb247CisJdTggICAgICAgICByc3ZkMTsKKwl1MTYgICAgICAgIGNoa3N1bTsKKworCXU4ICAgICAgICAgZW5hYmxlOwkJLyogIGVuYWJsZS9kaXNhYmxlIFNBTiBib290ICovCisJdTggICAgICAgICBzcGVlZDsJCS8qICBib290IHNwZWVkIHNldHRpbmdzICovCisJdTggICAgICAgICB0b3BvbG9neTsJLyogIGJvb3QgdG9wb2xvZ3kgc2V0dGluZyAqLworCXU4ICAgICAgICAgYm9vdG9wdDsJLyogIGJmYV9ib290X2Jvb3RvcHRfdCAqLworCisJdTMyICAgICAgICBuYmx1bnM7CQkvKiAgbnVtYmVyIG9mIGJvb3QgbHVucyAqLworCisJdTMyICAgICAgICByc3ZkMjsKKworCXN0cnVjdCBiZmFfYm9vdF9ib290bHVuX3MgYmx1bltCRkFfQk9PVF9CT09UTFVOX01BWF07CisJc3RydWN0IGJmYV9ib290X2Jvb3RsdW5fcyBibHVuX2Rpc2NbQkZBX0JPT1RfQk9PVExVTl9NQVhdOworfTsKKworCisjZW5kaWYgLyogX19CRkFfREVGU19CT09UX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfY2VlLmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19jZWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjBhMjJmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfY2VlLmgKQEAgLTAsMCArMSwxNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqICBiZmFfZGVmc19jZWUuaCBJbnRlcmZhY2UgZGVjbGFyYXRpb25zIGJldHdlZW4gaG9zdCBiYXNlZAorICoJQkZBTCBhbmQgRENCWC9MTERQIG1vZHVsZSBpbiBGaXJtd2FyZQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpZm5kZWYgX19CRkFfREVGU19DRUVfSF9fCisjZGVmaW5lIF9fQkZBX0RFRlNfQ0VFX0hfXworCisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc190eXBlcy5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfcHBvcnQuaD4KKyNpbmNsdWRlIDxwcm90b2NvbC90eXBlcy5oPgorCisjcHJhZ21hIHBhY2soMSkKKworI2RlZmluZSBCRkFfQ0VFX0xMRFBfTUFYX1NUUklOR19MRU4gKDEyOCkKKworCisvKiBGSVhNRTogdGhpcyBpcyBjb21pbmcgZnJvbSB0aGUgcHJvdG9jb2wgc3BlYy4gQ2FuIHRoZSBob3N0ICYgYXBwcyBzaGFyZSB0aGUKKyAgIHByb3RvY29sIC5oIGZpbGVzID8KKyAqLworI2RlZmluZSBCRkFfQ0VFX0xMRFBfU1lTX0NBUF9PVEhFUiAgICAgICAweDAwMDEKKyNkZWZpbmUgQkZBX0NFRV9MTERQX1NZU19DQVBfUkVQRUFURVIgICAgMHgwMDAyCisjZGVmaW5lIEJGQV9DRUVfTExEUF9TWVNfQ0FQX01BQ19CUklER0UgIDB4MDAwNAorI2RlZmluZSBCRkFfQ0VFX0xMRFBfU1lTX0NBUF9XTEFOX0FQICAgICAweDAwMDgKKyNkZWZpbmUgQkZBX0NFRV9MTERQX1NZU19DQVBfUk9VVEVSICAgICAgMHgwMDEwCisjZGVmaW5lIEJGQV9DRUVfTExEUF9TWVNfQ0FQX1RFTEVQSE9ORSAJIDB4MDAyMAorI2RlZmluZSBCRkFfQ0VFX0xMRFBfU1lTX0NBUF9ET0NTSVNfQ0QgICAweDAwNDAKKyNkZWZpbmUgQkZBX0NFRV9MTERQX1NZU19DQVBfU1RBVElPTiAgICAgMHgwMDgwCisjZGVmaW5lIEJGQV9DRUVfTExEUF9TWVNfQ0FQX0NWTEFOCSAgICAgMHgwMTAwCisjZGVmaW5lIEJGQV9DRUVfTExEUF9TWVNfQ0FQX1NWTEFOIAkgICAgIDB4MDIwMAorI2RlZmluZSBCRkFfQ0VFX0xMRFBfU1lTX0NBUF9UUE1SCQkgMHgwNDAwCisKKworLyogTExEUCBzdHJpbmcgdHlwZSAqLworc3RydWN0IGJmYV9jZWVfbGxkcF9zdHJfcyB7CisJdTggc3ViX3R5cGU7CisJdTggbGVuOworCXU4IHJzdmRbMl07CisJdTggdmFsdWVbQkZBX0NFRV9MTERQX01BWF9TVFJJTkdfTEVOXTsKK307CisKKworLyogTExEUCBwYXJhbXRlcnMgKi8KK3N0cnVjdCBiZmFfY2VlX2xsZHBfY2ZnX3MgeworCXN0cnVjdCBiZmFfY2VlX2xsZHBfc3RyX3MgY2hhc3Npc19pZDsKKwlzdHJ1Y3QgYmZhX2NlZV9sbGRwX3N0cl9zIHBvcnRfaWQ7CisJc3RydWN0IGJmYV9jZWVfbGxkcF9zdHJfcyBwb3J0X2Rlc2M7CisJc3RydWN0IGJmYV9jZWVfbGxkcF9zdHJfcyBzeXNfbmFtZTsKKwlzdHJ1Y3QgYmZhX2NlZV9sbGRwX3N0cl9zIHN5c19kZXNjOworCXN0cnVjdCBiZmFfY2VlX2xsZHBfc3RyX3MgbWdtdF9hZGRyOworCXUxNiAgICB0aW1lX3RvX2ludGVydmFsOworCXUxNiAgICBlbmFibGVkX3N5c3RlbV9jYXA7Cit9OworCitlbnVtIGJmYV9jZWVfZGNieF92ZXJzaW9uX2UgeworCURDQlhfUFJPVE9DT0xfUFJFQ0VFID0gMSwKKwlEQ0JYX1BST1RPQ09MX0NFRSAgICA9IDIsCit9OworCitlbnVtIGJmYV9jZWVfbGxzX2UgeworCUNFRV9MTFNfRE9XTl9OT19UTFYgPSAwLCAvKiBMTFMgaXMgZG93biBiZWNhdXNlIHRoZSBUTFYgbm90IHNlbnQgYnkKKwkJCQkgICogdGhlIHBlZXIgKi8KKwlDRUVfTExTX0RPV04gICAgICAgID0gMSwgLyogTExTIGlzIGRvd24gYXMgYWR2ZXJ0aXNlZCBieSB0aGUgcGVlciAqLworCUNFRV9MTFNfVVAgICAgICAgICAgPSAyLAorfTsKKworLyogQ0VFL0RDQlggcGFyYW1ldGVycyAqLworc3RydWN0IGJmYV9jZWVfZGNieF9jZmdfcyB7CisJdTggcGdpZFs4XTsKKwl1OCBwZ19wZXJjZW50YWdlWzhdOworCXU4IHBmY19lbmFibGVkOyAgICAgICAgICAvKiBiaXRtYXAgb2YgcHJpb3J0aWVzIHdpdGggUEZDIGVuYWJsZWQgKi8KKwl1OCBmY29lX3VzZXJfcHJpb3JpdHk7ICAgLyogYml0bWFwIG9mIHByaW9yaXRpZXMgdXNlZCBmb3IgRmNvRQorCQkJCSAgICAgICAqIHRyYWZmaWMgKi8KKwl1OCBkY2J4X3ZlcnNpb247CS8qIG9wZXJhdGluZyB2ZXJzaW9uOkNFRSBvciBwcmVDRUUgKi8KKwl1OCBsbHNfZmNvZTsJLyogRkNvRSBMb2dpY2FsIExpbmsgU3RhdHVzICovCisJdTggbGxzX2xhbjsJLyogTEFOIExvZ2ljYWwgTGluayBTdGF0dXMgKi8KKwl1OCByc3ZkWzNdOworfTsKKworLyogQ0VFIHN0YXR1cyAqLworLyogTWFraW5nIHRoaXMgdG8gdHJpLXN0YXRlIGZvciB0aGUgYmVuZWZpdCBvZiBwb3J0IGxpc3QgY29tbWFuZCAqLworZW51bSBiZmFfY2VlX3N0YXR1c19lIHsKKyAgICBDRUVfUEhZX0RPV04gPSAwLAorICAgIENFRV9QSFlfVVAgPSAxLAorICAgIENFRV9VUCA9IDIsCit9OworCisvKiBDRUUgUXVlcnkgKi8KK3N0cnVjdCBiZmFfY2VlX2F0dHJfcyB7CisJdTggICAgICAgICAgICAgICAgICAgY2VlX3N0YXR1czsKKwl1OCAgICAgICAgICAgICAgICAgICBlcnJvcl9yZWFzb247CisJc3RydWN0IGJmYV9jZWVfbGxkcF9jZmdfcyBsbGRwX3JlbW90ZTsKKwlzdHJ1Y3QgYmZhX2NlZV9kY2J4X2NmZ19zIGRjYnhfcmVtb3RlOworCW1hY190IHNyY19tYWM7CisJdTggbGlua19zcGVlZDsKKwl1OCBmaWxsZXJbM107Cit9OworCisKKworCisvKiBMTERQL0RDQlgvQ0VFIFN0YXRpc3RpY3MgKi8KKworc3RydWN0IGJmYV9jZWVfbGxkcF9zdGF0c19zIHsKKwl1MzIgZnJhbWVzX3RyYW5zbWl0dGVkOworCXUzMiBmcmFtZXNfYWdlZF9vdXQ7CisJdTMyIGZyYW1lc19kaXNjYXJkZWQ7CisJdTMyIGZyYW1lc19pbl9lcnJvcjsKKwl1MzIgZnJhbWVzX3JjdmQ7CisJdTMyIHRsdnNfZGlzY2FyZGVkOworCXUzMiB0bHZzX3VucmVjb2duaXplZDsKK307CisKK3N0cnVjdCBiZmFfY2VlX2RjYnhfc3RhdHNfcyB7CisJdTMyIHN1YnRsdnNfdW5yZWNvZ25pemVkOworCXUzMiBuZWdvdGlhdGlvbl9mYWlsZWQ7CisJdTMyIHJlbW90ZV9jZmdfY2hhbmdlZDsKKwl1MzIgdGx2c19yZWNlaXZlZDsKKwl1MzIgdGx2c19pbnZhbGlkOworCXUzMiBzZXFubzsKKwl1MzIgYWNrbm87CisJdTMyIHJlY3ZkX3NlcW5vOworCXUzMiByZWN2ZF9hY2tubzsKK307CisKK3N0cnVjdCBiZmFfY2VlX2NmZ19zdGF0c19zIHsKKwl1MzIgY2VlX3N0YXR1c19kb3duOworCXUzMiBjZWVfc3RhdHVzX3VwOworCXUzMiBjZWVfaHdfY2ZnX2NoYW5nZWQ7CisJdTMyIHJlY3ZkX2ludmFsaWRfY2ZnOworfTsKKworCitzdHJ1Y3QgYmZhX2NlZV9zdGF0c19zIHsKKwlzdHJ1Y3QgYmZhX2NlZV9sbGRwX3N0YXRzX3MgbGxkcF9zdGF0czsKKwlzdHJ1Y3QgYmZhX2NlZV9kY2J4X3N0YXRzX3MgZGNieF9zdGF0czsKKwlzdHJ1Y3QgYmZhX2NlZV9jZmdfc3RhdHNfcyAgY2ZnX3N0YXRzOworfTsKKworI3ByYWdtYSBwYWNrKCkKKworCisjZW5kaWYJLyogX19CRkFfREVGU19DRUVfSF9fICovCisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfZHJpdmVyLmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19kcml2ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzA0OTgwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfZHJpdmVyLmgKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9fQkZBX0RFRlNfRFJJVkVSX0hfXworI2RlZmluZSBfX0JGQV9ERUZTX0RSSVZFUl9IX18KKworLyoqCisgKiBEcml2ZXIgc3RhdGlzdGljcworICovCisJdTE2ICAgIHRtX2lvX2Fib3J0OworICAgIHUxNiAgICB0bV9pb19hYm9ydF9jb21wOworICAgIHUxNiAgICB0bV9sdW5fcmVzZXQ7CisgICAgdTE2ICAgIHRtX2x1bl9yZXNldF9jb21wOworICAgIHUxNiAgICB0bV90YXJnZXRfcmVzZXQ7CisgICAgdTE2ICAgIHRtX2J1c19yZXNldDsKKyAgICB1MTYgICAgaW9jX3Jlc3RhcnQ7ICAgICAgICAvKiAgSU9DIHJlc3RhcnQgY291bnQgKi8KKyAgICB1MTYgICAgaW9fcGVuZGluZzsgICAgICAgICAvKiAgb3V0c3RhbmRpbmcgaW8gY291bnQgcGVyLUlPQyAqLworICAgIHU2NCAgICBjb250cm9sX3JlcTsKKyAgICB1NjQgICAgaW5wdXRfcmVxOworICAgIHU2NCAgICBvdXRwdXRfcmVxOworICAgIHU2NCAgICBpbnB1dF93b3JkczsKKyAgICB1NjQgICAgb3V0cHV0X3dvcmRzOworfSBiZmFfZHJpdmVyX3N0YXRzX3Q7CisKKworI2VuZGlmIC8qIF9fQkZBX0RFRlNfRFJJVkVSX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfZXRocG9ydC5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfZXRocG9ydC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5ZjliM2UKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19ldGhwb3J0LmgKQEAgLTAsMCArMSw5OCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9fQkZBX0RFRlNfRVRIUE9SVF9IX18KKyNkZWZpbmUgX19CRkFfREVGU19FVEhQT1JUX0hfXworCisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc19zdGF0dXMuaD4KKyNpbmNsdWRlIDxwcm90b2NvbC90eXBlcy5oPgorI2luY2x1ZGUgPGNuYS9wc3RhdHMvcGh5cG9ydF9kZWZzLmg+CisjaW5jbHVkZSA8Y25hL3BzdGF0cy9ldGhwb3J0X2RlZnMuaD4KKworc3RydWN0IGJuYV90eF9pbmZvX3MgeworCXUzMiAgICBtaW5pcG9ydF9zdGF0ZTsKKwl1MzIgICAgYWRhcHRlcl9zdGF0ZTsKKwl1NjQgICAgdHhfY291bnQ7CisJdTY0ICAgIHR4X3dpOworCXU2NCAgICB0eF9zZzsKKwl1NjQgICAgdHhfdGNwX2Noa3N1bTsKKwl1NjQgICAgdHhfdWRwX2Noa3N1bTsKKwl1NjQgICAgdHhfaXBfY2hrc3VtOworCXU2NCAgICB0eF9sc292MTsKKwl1NjQgICAgdHhfbHNvdjI7CisJdTY0ICAgIHR4X21heF9zZ19sZW4gOworfTsKKworc3RydWN0IGJuYV9yeF9xdWV1ZV9pbmZvX3MgeworCXUxNiAgICBxX2lkIDsKKwl1MTYgICAgYnVmX3NpemUgOworCXUxNiAgICBidWZfY291bnQgOworCXUxNiAgICByc3ZkIDsKKwl1NjQgICAgcnhfY291bnQgOworCXU2NCAgICByeF9kcm9wcGVkIDsKKwl1NjQgICAgcnhfdW5zdXBwb3J0ZWQgOworCXU2NCAgICByeF9pbnRlcm5hbF9lcnIgOworCXU2NCAgICByc3NfY291bnQgOworCXU2NCAgICB2bGFuX2NvdW50IDsKKwl1NjQgICAgcnhfdGNwX2Noa3N1bSA7CisJdTY0ICAgIHJ4X3VkcF9jaGtzdW0gOworCXU2NCAgICByeF9pcF9jaGtzdW0gOworCXU2NCAgICByeF9oZHMgOworfTsKKworc3RydWN0IGJuYV9yeF9xX3NldF9zIHsKKwl1MTYgICAgcV9zZXRfdHlwZTsKKwl1MzIgICAgbWluaXBvcnRfc3RhdGU7CisJdTMyICAgIGFkYXB0ZXJfc3RhdGU7CisJc3RydWN0IGJuYV9yeF9xdWV1ZV9pbmZvX3MgICAgcnhfcXVldWVbMl07Cit9OworCitzdHJ1Y3QgYm5hX3BvcnRfc3RhdHNfcyB7CisJc3RydWN0IGJuYV90eF9pbmZvX3MgICB0eF9zdGF0czsKKwl1MTYgICAgICAgIHFzZXRfY291bnQgOworCXN0cnVjdCBibmFfcnhfcV9zZXRfcyAgcnhfcXNldFs4XTsKK307CisKK3N0cnVjdCBiZmFfZXRocG9ydF9zdGF0c19zIHsKKwlzdHJ1Y3QgYm5hX3N0YXRzX3R4Zgl0eGZfc3RhdHNbMV07CisJc3RydWN0IGJuYV9zdGF0c19yeGYJcnhmX3N0YXRzWzFdOworCXN0cnVjdCBibmFkX2Rydl9zdGF0cyBkcnZfc3RhdHM7Cit9OworCisvKioKKyAqIEV0aGVybmV0IHBvcnQgZXZlbnRzCisgKiBBcmd1bWVudHMgYmVsb3cgYXJlIGluIEJGQUwgY29udGV4dCBmcm9tIE1nbXQKKyAqIEJGQV9QT1JUX0FFTl9FVEhfTElOS1VQOiAgICBbaW5dOiBtYWMgW291dF06IG1hYworICogQkZBX1BPUlRfQUVOX0VUSF9MSU5LRE9XTjogIFtpbl06IG1hYyBbb3V0XTogbWFjCisgKiBCRkFfUE9SVF9BRU5fRVRIX0VOQUJMRTogIFtpbl06IG1hYyBbb3V0XTogbWFjCisgKiBCRkFfUE9SVF9BRU5fRVRIX0RJU0FCTEU6ICBbaW5dOiBtYWMgW291dF06IG1hYworICoKKyAqLworZW51bSBiZmFfZXRocG9ydF9hZW5fZXZlbnQgeworCUJGQV9FVEhQT1JUX0FFTl9MSU5LVVAgPSAxLCAvKiAgQmFzZSBQb3J0IEV0aGVybmV0IGxpbmsgdXAgZXZlbnQgKi8KKwlCRkFfRVRIUE9SVF9BRU5fTElOS0RPV04gPSAyLCAvKiAgQmFzZSBQb3J0IEV0aGVybmV0IGxpbmsgZG93biBldmVudCAqLworCUJGQV9FVEhQT1JUX0FFTl9FTkFCTEUgPSAzLCAvKiAgQmFzZSBQb3J0IEV0aGVybmV0IGxpbmsgZW5hYmxlIGV2ZW50ICovCisJQkZBX0VUSFBPUlRfQUVOX0RJU0FCTEUgPSA0LCAvKiAgQmFzZSBQb3J0IEV0aGVybmV0IGxpbmsgZGlzYWJsZQorCQkJCSAgICAgICogZXZlbnQgKi8KK307CisKK3N0cnVjdCBiZmFfZXRocG9ydF9hZW5fZGF0YV9zIHsKKwltYWNfdCBtYWM7CS8qICBNQUMgYWRkcmVzcyBvZiB0aGUgcGh5c2ljYWwgcG9ydCAqLworfTsKKworCisjZW5kaWYgLyogX19CRkFfREVGU19FVEhQT1JUX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfZmNwaW0uaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX2ZjcGltLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzA4ZjRmNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX2ZjcGltLmgKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2lmbmRlZiBfX0JGQV9ERUZTX0ZDUElNX0hfXworI2RlZmluZSBfX0JGQV9ERUZTX0ZDUElNX0hfXworCitzdHJ1Y3QgYmZhX2ZjcGltX3N0YXRzX3MgeworCXUzMiAgICAgICAgdG90YWxfaW9zOwkvKiAgVG90YWwgSU8gY291bnQgKi8KKwl1MzIgICAgICAgIHFyZXN1bWVzOwkvKiAgSU8gd2FpdGluZyBmb3IgQ1Egc3BhY2UgKi8KKwl1MzIgICAgICAgIG5vX2lvdGFnczsJLyogIE5PIElPIGNvbnRleHRzICovCisJdTMyICAgICAgICBpb19hYm9ydHM7CS8qICBJTyBhYm9ydCByZXF1ZXN0cyAqLworCXUzMiAgICAgICAgbm9fdHNraW1zOwkvKiAgTk8gdGFzayBtYW5hZ2VtZW50IGNvbnRleHRzICovCisJdTMyICAgICAgICBpb2NvbXBfb2s7CS8qICBJTyBjb21wbGV0aW9ucyB3aXRoIE9LIHN0YXR1cyAqLworCXUzMiAgICAgICAgaW9jb21wX3VuZGVycnVuOwkvKiAgSU8gdW5kZXJydW4gKGdvb2QpICovCisJdTMyICAgICAgICBpb2NvbXBfb3ZlcnJ1bjsJLyogIElPIG92ZXJydW4gKGdvb2QpICovCisJdTMyICAgICAgICBpb2NvbXBfYWJvcnRlZDsJLyogIEFib3J0ZWQgSU8gcmVxdWVzdHMgKi8KKwl1MzIgICAgICAgIGlvY29tcF90aW1lZG91dDsJLyogIElPIHRpbWVvdXRzICovCisJdTMyICAgICAgICBpb2NvbV9uZXh1c19hYm9ydDsJLyogIElPIHNlbGVjdGlvbiB0aW1lb3V0cyAqLworCXUzMiAgICAgICAgaW9jb21fcHJvdG9fZXJyOwkvKiAgSU8gcHJvdG9jb2wgZXJyb3JzICovCisJdTMyICAgICAgICBpb2NvbV9kaWZfZXJyOwkvKiAgSU8gU0JDLTMgcHJvdGVjdGlvbiBlcnJvcnMgKi8KKwl1MzIgICAgICAgIGlvY29tX3RtX2Fib3J0OwkvKiAgSU8gYWJvcnRlZCBieSBUTSByZXF1ZXN0cyAqLworCXUzMiAgICAgICAgaW9jb21fc3Flcl9uZWVkZWQ7CS8qICBJTyByZXRyeSBmb3IgU1EgZXJyb3IKKwkJCQkJCSAqcmVjb3ZlcnkgKi8KKwl1MzIgICAgICAgIGlvY29tX3Jlc19mcmVlOwkvKiAgRGVsYXllZCBmcmVlaW5nIG9mIElPIHJlc291cmNlcyAqLworCXUzMiAgICAgICAgaW9jb21wX3Njc2llcnI7CS8qICBJTyB3aXRoIG5vbi1nb29kIFNDU0kgc3RhdHVzICovCisJdTMyICAgICAgICBpb2NvbV9ob3N0YWJydHM7CS8qICBIb3N0IElPIGFib3J0IHJlcXVlc3RzICovCisJdTMyICAgICAgICBpb2NvbV91dGFnczsJLyogIElPIGNvbXAgd2l0aCB1bmtub3duIHRhZ3MgKi8KKwl1MzIgICAgICAgIGlvX2NsZWFudXBzOwkvKiAgSU8gaW1wbGljaXRseSBhYm9ydGVkICovCisJdTMyICAgICAgICBpb190bWFib3J0czsJLyogIElPIGFib3J0ZWQgZHVlIHRvIFRNIGNvbW1hbmRzICovCisJdTMyICAgICAgICByc3ZkOworfTsKKyNlbmRpZiAvKl9fQkZBX0RFRlNfRkNQSU1fSF9fKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX2ltX2NvbW1vbi5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfaW1fY29tbW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWNjZjUzYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX2ltX2NvbW1vbi5oCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0JGQV9ERUZTX0lNX0NPTU1PTl9IX18KKyNkZWZpbmUgX19CRkFfREVGU19JTV9DT01NT05fSF9fCisKKyNkZWZpbmUJQkZBX0FEQVBURVJfTkFNRV9MRU4JMjU2CisjZGVmaW5lIEJGQV9BREFQVEVSX0dVSURfTEVOICAgIDI1NgorI2RlZmluZSBSRVNFUlZFRF9WTEFOX05BTUUgICAgICBMIlBPUlQgVkxBTiIKKyNkZWZpbmUgUEFTU1RIUlVfVkxBTl9OQU1FICAgICAgTCJQQVNTVEhSVSBWTEFOIgorCisJdTY0CXR4X3BrdF9jbnQ7CisJdTY0CXJ4X3BrdF9jbnQ7CisJdTMyCWR1cmF0aW9uOworCXU4CQlzdGF0dXM7Cit9IGJmYV9pbV9zdGF0c190LCAqcGJmYV9pbV9zdGF0c190OworCisjZW5kaWYgLyogX19CRkFfREVGU19JTV9DT01NT05fSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19pbV90ZWFtLmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19pbV90ZWFtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQ4NmE3ZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX2ltX3RlYW0uaApAQCAtMCwwICsxLDcyIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX19CRkFfREVGU19JTV9URUFNX0hfXworI2RlZmluZSBfX0JGQV9ERUZTX0lNX1RFQU1fSF9fCisKKyNpbmNsdWRlIDxwcm90b2NvbC90eXBlcy5oPgorCisjZGVmaW5lCUJGQV9URUFNX01BWF9QT1JUUwk4CisjZGVmaW5lCUJGQV9URUFNX05BTUVfTEVOCTI1NgorI2RlZmluZSBCRkFfTUFYX05VTV9URUFNUwkxNgorI2RlZmluZSBCRkFfVEVBTV9JTlZBTElEX0RFTEFZIC0xCisKKwlCRkFfTEFDUF9SQVRFX1NMT1cgPSAxLAorCUJGQV9MQUNQX1JBVEVfRkFTVAorfSBiZmFfaW1fbGFjcF9yYXRlX3Q7CisKKwlCRkFfVEVBTV9NT0RFX0ZBSUxfT1ZFUiA9IDEsCisJQkZBX1RFQU1fTU9ERV9GQUlMX0JBQ0ssCisJQkZBX1RFQU1fTU9ERV9MQUNQLAorCUJGQV9URUFNX01PREVfTk9ORQorfSBiZmFfaW1fdGVhbV9tb2RlX3Q7CisKKwlCRkFfWE1JVF9QT0xJQ1lfTDIgPSAxLAorCUJGQV9YTUlUX1BPTElDWV9MM19MNAorfSBiZmFfaW1feG1pdF9wb2xpY3lfdDsKKworCWJmYV9pbV90ZWFtX21vZGVfdCAgICAgdGVhbV9tb2RlOworCWJmYV9pbV9sYWNwX3JhdGVfdCAgICAgbGFjcF9yYXRlOworCWJmYV9pbV94bWl0X3BvbGljeV90ICAgeG1pdF9wb2xpY3k7CisJaW50ICAgCSAgICAgICAgICBkZWxheTsKKwl3Y2hhcl90ICAgIAkgIHByaW1hcnlbQkZBX0FEQVBURVJfTkFNRV9MRU5dOworCXdjaGFyX3QgICAgICAgIAkgIHByZWZlcnJlZF9wcmltYXJ5W0JGQV9BREFQVEVSX05BTUVfTEVOXTsKKwltYWNfdAkgICAgICAgICAgbWFjOworCXUxNiAgICAgICAJICBudW1fcG9ydHM7CisJdTE2ICAgICAgICAgIG51bV92bGFuczsKKwl1MTYgdmxhbl9saXN0W0JGQV9NQVhfVkxBTlNfUEVSX1BPUlRdOworCXdjaGFyX3QJIHRlYW1fZ3VpZF9saXN0W0JGQV9URUFNX01BWF9QT1JUU11bQkZBX0FEQVBURVJfR1VJRF9MRU5dOworCXdjaGFyX3QJIGlvY19uYW1lX2xpc3RbQkZBX1RFQU1fTUFYX1BPUlRTXVtCRkFfQURBUFRFUl9OQU1FX0xFTl07Cit9IGJmYV9pbV90ZWFtX2F0dHJfdDsKKworCXdjaGFyX3QJCSAgICAgICAgICAgICB0ZWFtX25hbWVbQkZBX1RFQU1fTkFNRV9MRU5dOworCWJmYV9pbV94bWl0X3BvbGljeV90CSB4bWl0X3BvbGljeTsKKwlpbnQgICAgICAgICAgICAgICAgIAkgZGVsYXk7CisJd2NoYXJfdCAgICAgICAgICAgICAgICAJIHByaW1hcnlbQkZBX0FEQVBURVJfTkFNRV9MRU5dOworCXdjaGFyX3QgICAgICAgICAgICAgICAJIHByZWZlcnJlZF9wcmltYXJ5W0JGQV9BREFQVEVSX05BTUVfTEVOXTsKK30gYmZhX2ltX3RlYW1fZWRpdF90LCAqcGJmYV9pbV90ZWFtX2VkaXRfdDsKKworCXdjaGFyX3QJCQkJCXRlYW1fbmFtZVtCRkFfVEVBTV9OQU1FX0xFTl07CisJYmZhX2ltX3RlYW1fbW9kZV90ICAgICAgdGVhbV9tb2RlOworCW1hY190CSAgICAgICAgICAgICAgIAltYWM7Cit9IGJmYV9pbV90ZWFtX2luZm9fdDsKKworCWJmYV9pbV90ZWFtX2luZm9fdCAJCXRlYW1faW5mb1tCRkFfTUFYX05VTV9URUFNU107CisJdTE2IAkJCQludW1fdGVhbXM7Cit9IGJmYV9pbV90ZWFtX2xpc3RfdCwgKnBiZmFfaW1fdGVhbV9saXN0X3Q7CisKKyNlbmRpZiAvKiBfX0JGQV9ERUZTX0lNX1RFQU1fSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19pb2MuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX2lvYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxZDUzMmQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19pb2MuaApAQCAtMCwwICsxLDE1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9fQkZBX0RFRlNfSU9DX0hfXworI2RlZmluZSBfX0JGQV9ERUZTX0lPQ19IX18KKworI2luY2x1ZGUgPHByb3RvY29sL3R5cGVzLmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc190eXBlcy5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfdmVyc2lvbi5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfYWRhcHRlci5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfcG0uaD4KKworZW51bSB7CisJQkZBX0lPQ19EUklWRVJfTEVOCT0gMTYsCisJQkZBX0lPQ19DSElQX1JFVl9MRU4gCT0gOCwKK307CisKKy8qKgorICogRHJpdmVyIGFuZCBmaXJtd2FyZSB2ZXJzaW9ucy4KKyAqLworc3RydWN0IGJmYV9pb2NfZHJpdmVyX2F0dHJfcyB7CisJY2hhciAgICAgICAgICAgIGRyaXZlcltCRkFfSU9DX0RSSVZFUl9MRU5dOwkvKiAgZHJpdmVyIG5hbWUgKi8KKwljaGFyICAgICAgICAgICAgZHJpdmVyX3ZlcltCRkFfVkVSU0lPTl9MRU5dOwkvKiAgZHJpdmVyIHZlcnNpb24gKi8KKwljaGFyICAgICAgICAgICAgZndfdmVyW0JGQV9WRVJTSU9OX0xFTl07CS8qICBmaXJtd2FyZSB2ZXJzaW9uKi8KKwljaGFyICAgICAgICAgICAgYmlvc192ZXJbQkZBX1ZFUlNJT05fTEVOXTsJLyogIGJpb3MgdmVyc2lvbiAqLworCWNoYXIgICAgICAgICAgICBlZmlfdmVyW0JGQV9WRVJTSU9OX0xFTl07CS8qICBFRkkgdmVyc2lvbiAqLworCWNoYXIgICAgICAgICAgICBvYl92ZXJbQkZBX1ZFUlNJT05fTEVOXTsJLyogIG9wZW5ib290IHZlcnNpb24qLworfTsKKworLyoqCisgKiBJT0MgUENJIGRldmljZSBhdHRyaWJ1dGVzCisgKi8KK3N0cnVjdCBiZmFfaW9jX3BjaV9hdHRyX3MgeworCXUxNiAgICAgICAgdmVuZG9yX2lkOwkvKiAgUENJIHZlbmRvciBJRCAqLworCXUxNiAgICAgICAgZGV2aWNlX2lkOwkvKiAgUENJIGRldmljZSBJRCAqLworCXUxNiAgICAgICAgc3NpZDsJCS8qICBzdWJzeXN0ZW0gSUQgKi8KKwl1MTYgICAgICAgIHNzdmlkOwkJLyogIHN1YnN5c3RlbSB2ZW5kb3IgSUQgKi8KKwl1MzIgICAgICAgIHBjaWZuOwkJLyogIFBDSSBkZXZpY2UgZnVuY3Rpb24gKi8KKwl1MzIgICAgICAgIHJzdmQ7CQkvKiBwYWRkaW5nICovCisJdTggICAgICAgICBjaGlwX3JldltCRkFfSU9DX0NISVBfUkVWX0xFTl07CSAvKiAgY2hpcCByZXZpc2lvbiAqLworfTsKKworLyoqCisgKiBJT0Mgc3RhdGVzCisgKi8KK2VudW0gYmZhX2lvY19zdGF0ZSB7CisJQkZBX0lPQ19SRVNFVCAgICAgICA9IDEsICAvKiAgSU9DIGlzIGluIHJlc2V0IHN0YXRlICovCisJQkZBX0lPQ19TRU1XQUlUICAgICA9IDIsICAvKiAgV2FpdGluZyBmb3IgSU9DIGhhcmR3YXJlIHNlbWFwaG9yZSAqLworCUJGQV9JT0NfSFdJTklUIAkgICAgPSAzLCAgLyogIElPQyBoYXJkd2FyZSBpcyBiZWluZyBpbml0aWFsaXplZCAqLworCUJGQV9JT0NfR0VUQVRUUiAgICAgPSA0LCAgLyogIElPQyBpcyBiZWluZyBjb25maWd1cmVkICovCisJQkZBX0lPQ19PUEVSQVRJT05BTCA9IDUsICAvKiAgSU9DIGlzIG9wZXJhdGlvbmFsICovCisJQkZBX0lPQ19JTklURkFJTCAgICA9IDYsICAvKiAgSU9DIGhhcmR3YXJlIGZhaWx1cmUgKi8KKwlCRkFfSU9DX0hCRkFJTCAgICAgID0gNywgIC8qICBJT0MgaGVhcnQtYmVhdCBmYWlsdXJlICovCisJQkZBX0lPQ19ESVNBQkxJTkcgICA9IDgsICAvKiAgSU9DIGlzIGJlaW5nIGRpc2FibGVkICovCisJQkZBX0lPQ19ESVNBQkxFRCAgICA9IDksICAvKiAgSU9DIGlzIGRpc2FibGVkICovCisJQkZBX0lPQ19GV01JU01BVENIICA9IDEwLCAvKiAgSU9DIGZpcm13YXJlIGRpZmZlcmVudCBmcm9tIGRyaXZlcnMgKi8KK307CisKKy8qKgorICogSU9DIGZpcm13YXJlIHN0YXRzCisgKi8KK3N0cnVjdCBiZmFfZndfaW9jX3N0YXRzX3MgeworCXUzMiAgICAgICAgaGJfY291bnQ7CisJdTMyICAgICAgICBjZmdfcmVxczsKKwl1MzIgICAgICAgIGVuYWJsZV9yZXFzOworCXUzMiAgICAgICAgZGlzYWJsZV9yZXFzOworCXUzMiAgICAgICAgc3RhdHNfcmVxczsKKwl1MzIgICAgICAgIGNscnN0YXRzX3JlcXM7CisJdTMyICAgICAgICB1bmtub3duX3JlcXM7CisJdTMyICAgICAgICBpY19yZXFzOwkJLyogIGludGVycnVwdCBjb2FsZXNjZSByZXFzICovCit9OworCisvKioKKyAqIElPQyBkcml2ZXIgc3RhdHMKKyAqLworc3RydWN0IGJmYV9pb2NfZHJ2X3N0YXRzX3MgeworCXUzMglpb2NfaXNyczsKKwl1MzIJaW9jX2VuYWJsZXM7CisJdTMyCWlvY19kaXNhYmxlczsKKwl1MzIJaW9jX2hiZmFpbHM7CisJdTMyCWlvY19ib290czsKKwl1MzIJc3RhdHNfdG1vczsKKwl1MzIgICAgICAgIGhiX2NvdW50OworCXUzMiAgICAgICAgZGlzYWJsZV9yZXFzOworCXUzMiAgICAgICAgZW5hYmxlX3JlcXM7CisJdTMyICAgICAgICBkaXNhYmxlX3JlcGxpZXM7CisJdTMyICAgICAgICBlbmFibGVfcmVwbGllczsKK307CisKKy8qKgorICogSU9DIHN0YXRpc3RpY3MKKyAqLworc3RydWN0IGJmYV9pb2Nfc3RhdHNfcyB7CisJc3RydWN0IGJmYV9pb2NfZHJ2X3N0YXRzX3MJZHJ2X3N0YXRzOyAvKiAgZHJpdmVyIElPQyBzdGF0cyAqLworCXN0cnVjdCBiZmFfZndfaW9jX3N0YXRzX3MgCWZ3X3N0YXRzOyAgLyogIGZpcm13YXJlIElPQyBzdGF0cyAqLworfTsKKworCitlbnVtIGJmYV9pb2NfdHlwZV9lIHsKKwlCRkFfSU9DX1RZUEVfRkMJICA9IDEsCisJQkZBX0lPQ19UWVBFX0ZDb0UgPSAyLAorCUJGQV9JT0NfVFlQRV9MTAkgID0gMywKK307CisKKy8qKgorICogSU9DIGF0dHJpYnV0ZXMgcmV0dXJuZWQgaW4gcXVlcmllcworICovCitzdHJ1Y3QgYmZhX2lvY19hdHRyX3MgeworCWVudW0gYmZhX2lvY190eXBlX2UJCWlvY190eXBlOworCWVudW0gYmZhX2lvY19zdGF0ZSAJCXN0YXRlOwkJLyogIElPQyBzdGF0ZSAgICAgICovCisJc3RydWN0IGJmYV9hZGFwdGVyX2F0dHJfcwlhZGFwdGVyX2F0dHI7CS8qICBIQkEgYXR0cmlidXRlcyAqLworCXN0cnVjdCBiZmFfaW9jX2RyaXZlcl9hdHRyX3MgCWRyaXZlcl9hdHRyOwkvKiAgZHJpdmVyIGF0dHIgICAgKi8KKwlzdHJ1Y3QgYmZhX2lvY19wY2lfYXR0cl9zCXBjaV9hdHRyOworCXU4CQkJCXBvcnRfaWQ7CS8qICBwb3J0IG51bWJlciAgICAqLworfTsKKworLyoqCisgKiBCRkEgSU9DIGxldmVsIGV2ZW50cworICovCitlbnVtIGJmYV9pb2NfYWVuX2V2ZW50IHsKKwlCRkFfSU9DX0FFTl9IQkdPT0QJPSAxLAkvKiAgSGVhcnQgQmVhdCByZXN0b3JlIGV2ZW50CSovCisJQkZBX0lPQ19BRU5fSEJGQUlMCT0gMiwJLyogIEhlYXJ0IEJlYXQgZmFpbHVyZSBldmVudAkqLworCUJGQV9JT0NfQUVOX0VOQUJMRQk9IDMsCS8qICBJT0MgZW5hYmxlZCBldmVudAkJKi8KKwlCRkFfSU9DX0FFTl9ESVNBQkxFCT0gNCwJLyogIElPQyBkaXNhYmxlZCBldmVudAkJKi8KKwlCRkFfSU9DX0FFTl9GV01JU01BVENICT0gNSwJLyogIElPQyBmaXJtd2FyZSBtaXNtYXRjaAkqLworfTsKKworLyoqCisgKiBCRkEgSU9DIGxldmVsIGV2ZW50IGRhdGEsIG5vdyBqdXN0IGEgcGxhY2UgaG9sZGVyCisgKi8KK3N0cnVjdCBiZmFfaW9jX2Flbl9kYXRhX3MgeworCWVudW0gYmZhX2lvY190eXBlX2UgaW9jX3R5cGU7CisJd3duX3QJcHd3bjsKKwltYWNfdAltYWM7Cit9OworCisjZW5kaWYgLyogX19CRkFfREVGU19JT0NfSF9fICovCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX2lvY2ZjLmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19pb2NmYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3NmJjYmQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19pb2NmYy5oCkBAIC0wLDAgKzEsMzEwIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX19CRkFfREVGU19JT0NGQ19IX18KKyNkZWZpbmUgX19CRkFfREVGU19JT0NGQ19IX18KKworI2luY2x1ZGUgPHByb3RvY29sL3R5cGVzLmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc190eXBlcy5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfdmVyc2lvbi5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfYWRhcHRlci5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfcG0uaD4KKworI2RlZmluZSBCRkFfSU9DRkNfSU5UUl9ERUxBWQkxMTI1CisjZGVmaW5lIEJGQV9JT0NGQ19JTlRSX0xBVEVOQ1kJMjI1CisKKy8qKgorICogSW50ZXJydXB0IGNvYWxlc2NpbmcgY29uZmlndXJhdGlvbi4KKyAqLworc3RydWN0IGJmYV9pb2NmY19pbnRyX2F0dHJfcyB7CisJYmZhX2Jvb2xlYW5fdAljb2FsZXNjZTsJLyogIGVuYWJsZS9kaXNhYmxlIGNvYWxlc2NpbmcgKi8KKwl1MTYJbGF0ZW5jeTsJLyogIGxhdGVuY3kgaW4gbWljcm9zZWNvbmRzICAgKi8KKwl1MTYJZGVsYXk7CQkvKiAgZGVsYXkgaW4gbWljcm9zZWNvbmRzICAgICAqLworfTsKKworLyoqCisgKiBJT0MgZmlybXdhcmUgY29uZmlndXJhdG9uCisgKi8KK3N0cnVjdCBiZmFfaW9jZmNfZndjZmdfcyB7CisJdTE2ICAgICAgICBudW1fZmFicmljczsJLyogIG51bWJlciBvZiBmYWJyaWNzCQkqLworCXUxNiAgICAgICAgbnVtX2xwb3J0czsJLyogIG51bWJlciBvZiBsb2NhbCBscG9ydHMJKi8KKwl1MTYgICAgICAgIG51bV9ycG9ydHM7CS8qICBudW1iZXIgb2YgcmVtb3RlIHBvcnRzCSovCisJdTE2ICAgICAgICBudW1faW9pbV9yZXFzOwkvKiAgbnVtYmVyIG9mIElPIHJlcXMJCSovCisJdTE2ICAgICAgICBudW1fdHNraW1fcmVxczsJLyogIHRhc2sgbWFuYWdlbWVudCByZXF1ZXN0cwkqLworCXUxNiAgICAgICAgbnVtX2lvdG1fcmVxczsJLyogIG51bWJlciBvZiBUTSBJTyByZXFzCSovCisJdTE2ICAgICAgICBudW1fdHNrdG1fcmVxczsJLyogIFRNIHRhc2sgbWFuYWdlbWVudCByZXF1ZXN0cyovCisJdTE2ICAgICAgICBudW1fZmN4cF9yZXFzOwkvKiAgdW5hc3Npc3RlZCBGQyBleGNoYW5nZXMJKi8KKwl1MTYgICAgICAgIG51bV91Zl9idWZzOwkvKiAgdW5zb2xpY2l0ZWQgcmVjdiBidWZmZXJzCSovCisJdTgJCW51bV9jcXM7CisJdTgJCXJzdmQ7Cit9OworCitzdHJ1Y3QgYmZhX2lvY2ZjX2RydmNmZ19zIHsKKwl1MTYgICAgICAgIG51bV9yZXFxX2VsZW1zOwkvKiAgbnVtYmVyIG9mIHJlcSBxdWV1ZSBlbGVtZW50cyAqLworCXUxNiAgICAgICAgbnVtX3JzcHFfZWxlbXM7CS8qICBudW1iZXIgb2YgcnNwIHF1ZXVlIGVsZW1lbnRzICovCisJdTE2ICAgICAgICBudW1fc2dwZ3M7CS8qICBudW1iZXIgb2YgdG90YWwgU0cgcGFnZXMJICAqLworCXUxNiAgICAgICAgbnVtX3Nib290X3RndHM7CS8qICBudW1iZXIgb2YgU0FOIGJvb3QgdGFyZ2V0cwkgICovCisJdTE2ICAgICAgICBudW1fc2Jvb3RfbHVuczsJLyogIG51bWJlciBvZiBTQU4gYm9vdCBsdW5zCSAgKi8KKwl1MTYJICAgIGlvY19yZWNvdmVyOwkvKiAgSU9DIHJlY292ZXJ5IG1vZGUJCSAgKi8KKwl1MTYJICAgIG1pbl9jZmc7CS8qICBtaW5pbXVtIGNvbmZpZ3VyYXRpb24JICAqLworCXUxNiAgICAgICAgcGF0aF90b3Y7CS8qICBkZXZpY2UgcGF0aCB0aW1lb3V0CSAgKi8KKwliZmFfYm9vbGVhbl90ICAgZGVsYXlfY29tcDsgLyogIGRlbGF5IGNvbXBsZXRpb24gb2YKKwkJCQkJCQlmYWlsZWQgaW5mbGlnaHQgSU9zICovCisJdTMyCQlyc3ZkOworfTsKKy8qKgorICogSU9DIGNvbmZpZ3VyYXRpb24KKyAqLworc3RydWN0IGJmYV9pb2NmY19jZmdfcyB7CisJc3RydWN0IGJmYV9pb2NmY19md2NmZ19zCWZ3Y2ZnOwkvKiAgZmlybXdhcmUgc2lkZSBjb25maWcgKi8KKwlzdHJ1Y3QgYmZhX2lvY2ZjX2RydmNmZ19zCWRydmNmZzsJLyogIGRyaXZlciBzaWRlIGNvbmZpZwkgICovCit9OworCisvKioKKyAqIElPQyBmaXJtd2FyZSBJTyBzdGF0cworICovCitzdHJ1Y3QgYmZhX2Z3X2lvX3N0YXRzX3MgeworCXUzMglob3N0X2Fib3J0OwkJLyogIElPIGFib3J0ZWQgYnkgaG9zdCBkcml2ZXIqLworCXUzMglob3N0X2NsZWFudXA7CQkvKiAgSU8gY2xlYW4gdXAgYnkgaG9zdCBkcml2ZXIgKi8KKworCXUzMglmd19pb190aW1lb3V0OwkJLyogIElPcyB0aW1lZG91dCAqLworCXUzMglmd19mcm1fcGFyc2U7CQkvKiAgZnJhbWUgcGFyc2VkIGJ5IGYvdyAqLworCXUzMglmd19mcm1fZGF0YTsJCS8qICBmY3BfZGF0YSBmcmFtZSBwYXJzZWQgYnkgZi93ICovCisJdTMyCWZ3X2ZybV9yc3A7CQkvKiAgZmNwX3JzcCBmcmFtZSBwYXJzZWQgYnkgZi93ICovCisJdTMyCWZ3X2ZybV94ZmVyX3JkeTsJLyogIHhmZXJfcmR5IGZyYW1lIHBhcnNlZCBieSBmL3cgKi8KKwl1MzIJZndfZnJtX2Jsc19hY2M7CQkvKiAgQkxTIEFDQyAgZnJhbWUgcGFyc2VkIGJ5IGYvdyAqLworCXUzMglmd19mcm1fdGd0X2Fib3J0OwkvKiAgdGFyZ2V0IEFCVFMgcGFyc2VkIGJ5IGYvdyAqLworCXUzMglmd19mcm1fdW5rbm93bjsJCS8qICB1bmtub3duIHBhcnNlZCBieSBmL3cgKi8KKwl1MzIJZndfZGF0YV9kbWE7CQkvKiAgZi93IERNQSdlZCB0aGUgZGF0YSBmcmFtZSAqLworCXUzMglmd19mcm1fZHJvcDsJCS8qICBmL3cgZHJvcCB0aGUgZnJhbWUgKi8KKworCXUzMglyZWNfdGltZW91dDsJCS8qICBGVyByZWMgdGltZWQgb3V0ICovCisJdTMyCWVycm9yX3JlYzsJCQkvKiAgRlcgc2VuZGluZyByZWMgb24KKwkJCQkJCQkqIGFuIGVycm9yIGNvbmRpdGlvbiovCisJdTMyCXdhaXRfZm9yX3NpOwkJLyogIEZXIHdhaXQgZm9yIFNJICovCisJdTMyCXJlY19yc3BfaW52YWw7CQkvKiAgUkVDIHJzcCBpbnZhbGlkICovCisJdTMyCXNlcXJfaW9fYWJvcnQ7CQkvKiAgdGFyZ2V0IGRvZXMgbm90IGtub3cgY21kIHNvIGFib3J0ICovCisJdTMyCXNlcXJfaW9fcmV0cnk7CQkvKiAgU0VRUiBmYWlsZWQgc28gcmV0cnkgSU8gKi8KKworCXUzMglpdG5fY2lzY191cGRfcnNwOwkvKiAgSVROIGNpc2MgdXBkYXRlZCBvbiBmY3BfcnNwICovCisJdTMyCWl0bl9jaXNjX3VwZF9kYXRhOwkvKiAgSVROIGNpc2MgdXBkYXRlZCBvbiBmY3BfZGF0YSAqLworCXUzMglpdG5fY2lzY191cGRfeGZlcl9yZHk7CS8qICBJVE4gY2lzYyB1cGRhdGVkIG9uIGZjcF9kYXRhICovCisKKwl1MzIJZmNwX2RhdGFfbG9zdDsJCS8qICBmY3AgZGF0YSBsb3N0ICovCisKKwl1MzIJcm9fc2V0X2luX3hmZXJfcmR5OwkvKiAgVGFyZ2V0IHNldCBSTyBpbiBYZmVyX3JkeSBmcmFtZSAqLworCXUzMgl4ZmVyX3JkeV9vb29fZXJyOwkvKiAgT3V0IG9mIG9yZGVyIFhmZXJfcmR5IHJlY2VpdmVkICovCisJdTMyCXhmZXJfcmR5X3Vua25vd25fZXJyOwkvKiAgdW5rbm93biBlcnJvciBpbiB4ZmVyX3JkeSBmcmFtZSAqLworCisJdTMyCWlvX2Fib3J0X3RpbWVvdXQ7CS8qICBBQlRTIHRpbWVkb3V0ICAqLworCXUzMglzbGVyX2luaXRpYXRlZDsJCS8qICBTTEVSIGluaXRpYXRlZCAqLworCisJdTMyCXVuZXhwX2ZjcF9yc3A7CQkvKiAgZmNwIHJlc3BvbnNlIGluIHdyb25nIHN0YXRlICovCisKKwl1MzIJZmNwX3JzcF91bmRlcl9ydW47CS8qICBmY3AgcnNwIElPIHVuZGVycnVuICovCisJdTMyICAgICAgICBmY3BfcnNwX3VuZGVyX3J1bl93cjsgICAvKiAgZmNwIHJzcCBJTyB1bmRlcnJ1biBmb3Igd3JpdGUgKi8KKwl1MzIJZmNwX3JzcF91bmRlcl9ydW5fZXJyOwkvKiAgZmNwIHJzcCBJTyB1bmRlcnJ1biBlcnJvciAqLworCXUzMiAgICAgICAgZmNwX3JzcF9yZXNpZF9pbnZhbDsgICAgLyogIGludmFsaWQgcmVzaWR1ZSAqLworCXUzMglmY3BfcnNwX292ZXJfcnVuOwkvKiAgZmNwIHJzcCBJTyBvdmVycnVuICovCisJdTMyCWZjcF9yc3Bfb3Zlcl9ydW5fZXJyOwkvKiAgZmNwIHJzcCBJTyBvdmVycnVuIGVycm9yICovCisJdTMyCWZjcF9yc3BfcHJvdG9fZXJyOwkvKiAgcHJvdG9jb2wgZXJyb3IgaW4gZmNwIHJzcCAqLworCXUzMglmY3BfcnNwX3NlbnNlX2VycjsJLyogIGVycm9yIGluIHNlbnNlIGluZm8gaW4gZmNwIHJzcCAqLworCXUzMglmY3BfY29uZl9yZXE7CQkvKiAgRkNQIGNvbmYgcmVxdWVzdGVkICovCisKKwl1MzIJdGd0X2Fib3J0ZWRfaW87CQkvKiAgdGFyZ2V0IGluaXRpYXRlZCBhYm9ydCAqLworCisJdTMyCWlvaF9lZHRvdl90aW1lb3V0X2V2ZW50Oy8qICBJT0ggZWR0b3YgdGltZXIgcG9wcGVkICovCisJdTMyCWlvaF9mY3BfcnNwX2V4Y3BfZXZlbnQ7CS8qICBJT0ggRkNQX1JTUCBleGNlcHRpb24gKi8KKwl1MzIJaW9oX2ZjcF9jb25mX2V2ZW50OwkvKiAgSU9IIEZDUF9DT05GICovCisJdTMyCWlvaF9tdWx0X2ZybV9yc3BfZXZlbnQ7CS8qICBJT0ggbXVsdGlfZnJhbWUgRkNQX1JTUCAqLworCXUzMglpb2hfaGl0X2NsYXNzMl9ldmVudDsJLyogIElPSCBoaXQgY2xhc3MyICovCisJdTMyCWlvaF9taXNzX290aGVyX2V2ZW50OwkvKiAgSU9IIG1pc3Mgb3RoZXIgKi8KKwl1MzIJaW9oX3NlcV9jbnRfZXJyX2V2ZW50OwkvKiAgSU9IIHNlcSBjbnQgZXJyb3IgKi8KKwl1MzIJaW9oX2xlbl9lcnJfZXZlbnQ7CQkvKiAgSU9IIGxlbiBlcnJvciAtIGZjcF9kbCAhPQorCQkJCQkJCSogYnl0ZXMgeGZlcmVkICovCisJdTMyCWlvaF9zZXFfbGVuX2Vycl9ldmVudDsJLyogIElPSCBzZXEgbGVuIGVycm9yICovCisJdTMyCWlvaF9kYXRhX29vcl9ldmVudDsJLyogIERhdGEgb3V0IG9mIHJhbmdlICovCisJdTMyCWlvaF9yb19vb29fZXZlbnQ7CS8qICBSZWxhdGl2ZSBvZmZzZXQgb3V0IG9mIHJhbmdlICovCisJdTMyCWlvaF9jcHVfb3duZWRfZXZlbnQ7CS8qICBJT0ggaGl0IC1pb3N0IG93bmVkIGJ5IGYvdyAqLworCXUzMglpb2hfdW5leHBfZnJhbWVfZXZlbnQ7CS8qICB1bmV4cGVjdGVkIGZyYW1lIHJlY2lldmVkCisJCQkJCQkgKiAgIGNvdW50ICovCisJdTMyCWlvaF9lcnJfaW50OwkJLyogIElPSCBlcnJvciBpbnQgZHVyaW5nIGRhdGEtcGhhc2UKKwkJCQkJCSAqICAgZm9yIHNjc2kgd3JpdGUKKwkJCQkJCSAqLworfTsKKworLyoqCisgKiBJT0MgcG9ydCBmaXJtd2FyZSBzdGF0cworICovCisKK3N0cnVjdCBiZmFfZndfcG9ydF9mcGdfc3RhdHNfcyB7CisgICAgdTMyICAgIGludHJfZXZ0OworICAgIHUzMiAgICBpbnRyOworICAgIHUzMiAgICBpbnRyX2V4Y2VzczsKKyAgICB1MzIgICAgaW50cl9jYXVzZTA7CisgICAgdTMyICAgIGludHJfb3RoZXI7CisgICAgdTMyICAgIGludHJfb3RoZXJfaWduOworICAgIHUzMiAgICBzaWdfbG9zdDsKKyAgICB1MzIgICAgc2lnX3JlZ2FpbmVkOworICAgIHUzMiAgICBzeW5jX2xvc3Q7CisgICAgdTMyICAgIHN5bmNfdG87CisgICAgdTMyICAgIHN5bmNfcmVnYWluZWQ7CisgICAgdTMyICAgIGRpdjJfb3ZlcmZsb3c7CisgICAgdTMyICAgIGRpdjJfdW5kZXJmbG93OworICAgIHUzMiAgICBlZmlmb19vdmVyZmxvdzsKKyAgICB1MzIgICAgZWZpZm9fdW5kZXJmbG93OworICAgIHUzMiAgICBpZGxlX3J4OworICAgIHUzMiAgICBscnJfcng7CisgICAgdTMyICAgIGxyX3J4OworICAgIHUzMiAgICBvbHNfcng7CisgICAgdTMyICAgIG5vc19yeDsKKyAgICB1MzIgICAgbGlwX3J4OworICAgIHUzMiAgICBhcmJmMF9yeDsKKyAgICB1MzIgICAgbXJrX3J4OworICAgIHUzMiAgICBjb25zdF9tcmtfcng7CisgICAgdTMyICAgIHByaW1fdW5rbm93bjsKKyAgICB1MzIgICAgcnN2ZDsKK307CisKKworc3RydWN0IGJmYV9md19wb3J0X2xrc21fc3RhdHNfcyB7CisgICAgdTMyICAgIGh3c21fc3VjY2VzczsgICAgICAgLyogIGh3c20gc3RhdGUgbWFjaGluZSBzdWNjZXNzICAgICAgICAgICovCisgICAgdTMyICAgIGh3c21fZmFpbHM7ICAgICAgICAgLyogIGh3c20gZmFpbHMgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgdTMyICAgIGh3c21fd2R0b3Y7ICAgICAgICAgLyogIGh3c20gdGltZWQgb3V0ICAgICAgICAgICAgICAgICAgICAgICovCisgICAgdTMyICAgIHN3c21fc3VjY2VzczsgICAgICAgLyogIHN3c20gc3VjY2VzcyAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgdTMyICAgIHN3c21fZmFpbHM7ICAgICAgICAgLyogIHN3c20gZmFpbHMgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgdTMyICAgIHN3c21fd2R0b3Y7ICAgICAgICAgLyogIHN3c20gdGltZWQgb3V0ICAgICAgICAgICAgICAgICAgICAgICovCisgICAgdTMyICAgIGJ1c3lidWZzOyAgICAgICAgICAgLyogIGxpbmsgaW5pdCBmYWlsZWQgZHVlIHRvIGJ1c3lidWYgICAgICovCisgICAgdTMyICAgIGJ1Zl93YWl0czsgICAgICAgICAgLyogIGJ1ZndhaXQgc3RhdGUgZW50cmllcyAgICAgICAgICAgICAgICovCisgICAgdTMyICAgIGxpbmtfZmFpbHM7ICAgICAgICAgLyogIGxpbmsgZmFpbHVyZXMgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgdTMyICAgIHBzcF9lcnJvcnM7ICAgICAgICAgLyogIHByaW1pdGl2ZSBzZXF1ZW5jZSBwcm90b2NvbCBlcnJvcnMgICovCisgICAgdTMyICAgIGxyX3VuZXhwOyAgICAgICAgICAgLyogIE5vLiBvZiB0aW1lcyBMUiByeC1lZCB1bmV4cGVjdGVkbHkgICovCisgICAgdTMyICAgIGxycl91bmV4cDsgICAgICAgICAgLyogIE5vLiBvZiB0aW1lcyBMUlIgcngtZWQgdW5leHBlY3RlZGx5ICovCisgICAgdTMyICAgIGxyX3R4OyAgICAgICAgICAgICAgLyogIE5vLiBvZiB0aW1lcyBMUiB0eCBzdGFydGVkICAgICAgICAgICovCisgICAgdTMyICAgIGxycl90eDsgICAgICAgICAgICAgLyogIE5vLiBvZiB0aW1lcyBMUlIgdHggc3RhcnRlZCAgICAgICAgICovCisgICAgdTMyICAgIG9sc190eDsgICAgICAgICAgICAgLyogIE5vLiBvZiB0aW1lcyBPTFMgdHggc3RhcnRlZCAgICAgICAgICovCisgICAgdTMyICAgIG5vc190eDsgICAgICAgICAgICAgLyogIE5vLiBvZiB0aW1lcyBOT1MgdHggc3RhcnRlZCAgICAgICAgICovCit9OworCisKK3N0cnVjdCBiZmFfZndfcG9ydF9zbnNtX3N0YXRzX3MgeworICAgIHUzMiAgICBod3NtX3N1Y2Nlc3M7ICAgICAgIC8qICBTdWNjZXNzZnVsIGh3c20gdGVybWluYXRpb25zICAgICAgICAqLworICAgIHUzMiAgICBod3NtX2ZhaWxzOyAgICAgICAgIC8qICBod3NtIGZhaWwgY291bnQgICAgICAgICAgICAgICAgICAgICAqLworICAgIHUzMiAgICBod3NtX3dkdG92OyAgICAgICAgIC8qICBod3NtIHRpbWVkIG91dCAgICAgICAgICAgICAgICAgICAgICAqLworICAgIHUzMiAgICBzd3NtX3N1Y2Nlc3M7ICAgICAgIC8qICBzd3NtIHN1Y2Nlc3MgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIHUzMiAgICBzd3NtX3dkdG92OyAgICAgICAgIC8qICBzd3NtIHRpbWVkIG91dCAgICAgICAgICAgICAgICAgICAgICAqLworICAgIHUzMiAgICBlcnJvcl9yZXNldHM7ICAgICAgIC8qICBlcnJvciByZXNldHMgaW5pdGlhdGVkIGJ5IHVwc20gICAgICAqLworICAgIHUzMiAgICBzeW5jX2xvc3Q7ICAgICAgICAgIC8qICBTeW5jIGxvc3MgY291bnQgICAgICAgICAgICAgICAgICAgICAqLworICAgIHUzMiAgICBzaWdfbG9zdDsgICAgICAgICAgIC8qICBTaWduYWwgbG9zcyBjb3VudCAgICAgICAgICAgICAgICAgICAqLworfTsKKworCitzdHJ1Y3QgYmZhX2Z3X3BvcnRfcGh5c21fc3RhdHNfcyB7CisgICAgdTMyICAgIG1vZHVsZV9pbnNlcnRzOyAgICAgLyogIE1vZHVsZSBpbnNlcnQgY291bnQgICAgICAgICAgICAgICAgICovCisgICAgdTMyICAgIG1vZHVsZV94dHJhY3RzOyAgICAgLyogIE1vZHVsZSBleHRyYWN0cyBjb3VudCAgICAgICAgICAgICAgICovCisgICAgdTMyICAgIG1vZHVsZV9pbnZhbGlkczsgICAgLyogIEludmFsaWQgbW9kdWxlIGluc2VydGVkIGNvdW50ICAgICAgICovCisgICAgdTMyICAgIG1vZHVsZV9yZWFkX2lnbjsgICAgLyogIE1vZHVsZSB2YWxpZGF0aW9uIHN0YXR1cyBpZ25vcmVkICAgICovCisgICAgdTMyICAgIGxhc2VyX2ZhdWx0czsgICAgICAgLyogIExhc2VyIGZhdWx0IGNvdW50ICAgICAgICAgICAgICAgICAgICovCisgICAgdTMyICAgIHJzdmQ7Cit9OworCisKK3N0cnVjdCBiZmFfZndfZmlwX3N0YXRzX3MgeworICAgIHUzMiAgICBkaXNjX3JlcTsgICAgICAgICAgIC8qICBEaXNjb3Zlcnkgc29saWNpdCByZXF1ZXN0cyAgICAgICAgICAqLworICAgIHUzMiAgICBkaXNjX3JzcDsgICAgICAgICAgIC8qICBEaXNjb3Zlcnkgc29saWNpdCByZXNwb25zZSAgICAgICAgICAqLworICAgIHUzMiAgICBkaXNjX2VycjsgICAgICAgICAgIC8qICBEaXNjb3ZlcnkgYWR2dC4gcGFyc2UgZXJyb3JzICAgICAgICAqLworICAgIHUzMiAgICBkaXNjX3Vuc29sOyAgICAgICAgIC8qICBEaXNjb3ZlcnkgdW5zb2xpY2l0ZWQgICAgICAgICAgICAgICAqLworICAgIHUzMiAgICBkaXNjX3RpbWVvdXRzOyAgICAgIC8qICBEaXNjb3ZlcnkgdGltZW91dHMgICAgICAgICAgICAgICAgICAqLworICAgIHUzMiAgICBsaW5rc3ZjX3Vuc3VwcDsgICAgIC8qICBVbnN1cHBvcnRlZCBsaW5rIHNlcnZpY2UgcmVxICAgICAgICAqLworICAgIHUzMiAgICBsaW5rc3ZjX2VycjsgICAgICAgIC8qICBQYXJzZSBlcnJvciBpbiBsaW5rIHNlcnZpY2UgcmVxICAgICAqLworICAgIHUzMiAgICBsb2dvX3JlcTsgICAgICAgICAgIC8qICBOdW1iZXIgb2YgRklQIGxvZ29zIHJlY2VpdmVkICAgICAgICAqLworICAgIHUzMiAgICBjbHJ2bGlua19yZXE7ICAgICAgIC8qICBDbGVhciB2aXJ0dWFsIGxpbmsgcmVxICAgICAgICAgICAgICAqLworICAgIHUzMiAgICBvcF91bnN1cHA7ICAgICAgICAgIC8qICBVbnN1cHBvcnRlZCBGSVAgb3BlcmF0aW9uICAgICAgICAgICAqLworICAgIHUzMiAgICB1bnRhZ2dlZDsgICAgICAgICAgIC8qICBVbnRhZ2dlZCBmcmFtZXMgKGlnbm9yZWQpICAgICAgICAgICAqLworICAgIHUzMiAgICByc3ZkOworfTsKKworCitzdHJ1Y3QgYmZhX2Z3X2xwc19zdGF0c19zIHsKKyAgICB1MzIgICAgbWFjX2ludmFsaWRzOyAgICAgICAvKiAgSW52YWxpZCBtYWMgYXNzaWduZWQgICAgICAgICAgICAgICAgKi8KKyAgICB1MzIgICAgcnN2ZDsKK307CisKKworc3RydWN0IGJmYV9md19mY29lX3N0YXRzX3MgeworICAgIHUzMiAgICBjZWVfbGlua3VwczsgICAgICAgIC8qICBDRUUgbGluayB1cCBjb3VudCAgICAgICAgICAgICAgICAgICAqLworICAgIHUzMiAgICBjZWVfbGlua2RuczsgICAgICAgIC8qICBDRUUgbGluayBkb3duIGNvdW50ICAgICAgICAgICAgICAgICAqLworICAgIHUzMiAgICBmaXBfbGlua3VwczsgICAgICAgIC8qICBGSVAgbGluayB1cCBjb3VudCAgICAgICAgICAgICAgICAgICAqLworICAgIHUzMiAgICBmaXBfbGlua2RuczsgICAgICAgIC8qICBGSVAgbGluayB1cCBjb3VudCAgICAgICAgICAgICAgICAgICAqLworICAgIHUzMiAgICBmaXBfZmFpbHM7ICAgICAgICAgIC8qICBGSVAgZmFpbCBjb3VudCAgICAgICAgICAgICAgICAgICAgICAqLworICAgIHUzMiAgICBtYWNfaW52YWxpZHM7ICAgICAgIC8qICBJbnZhbGlkIG1hYyBhc3NpZ25lZCAgICAgICAgICAgICAgICAqLworfTsKKworLyoqCisgKiBJT0MgZmlybXdhcmUgRkNvRSBwb3J0IHN0YXRzCisgKi8KK3N0cnVjdCBiZmFfZndfZmNvZV9wb3J0X3N0YXRzX3MgeworICAgIHN0cnVjdCBiZmFfZndfZmNvZV9zdGF0c19zICBmY29lX3N0YXRzOworICAgIHN0cnVjdCBiZmFfZndfZmlwX3N0YXRzX3MgICBmaXBfc3RhdHM7Cit9OworCisvKioKKyAqIElPQyBmaXJtd2FyZSBGQyBwb3J0IHN0YXRzCisgKi8KK3N0cnVjdCBiZmFfZndfZmNfcG9ydF9zdGF0c19zIHsKKwlzdHJ1Y3QgYmZhX2Z3X3BvcnRfZnBnX3N0YXRzX3MJCWZwZ19zdGF0czsKKwlzdHJ1Y3QgYmZhX2Z3X3BvcnRfcGh5c21fc3RhdHNfcwlwaHlzbV9zdGF0czsKKwlzdHJ1Y3QgYmZhX2Z3X3BvcnRfc25zbV9zdGF0c19zCQlzbnNtX3N0YXRzOworCXN0cnVjdCBiZmFfZndfcG9ydF9sa3NtX3N0YXRzX3MJCWxrc21fc3RhdHM7Cit9OworCisvKioKKyAqIElPQyBmaXJtd2FyZSBGQyBwb3J0IHN0YXRzCisgKi8KK3VuaW9uIGJmYV9md19wb3J0X3N0YXRzX3MgeworCXN0cnVjdCBiZmFfZndfZmNfcG9ydF9zdGF0c19zCWZjX3N0YXRzOworCXN0cnVjdCBiZmFfZndfZmNvZV9wb3J0X3N0YXRzX3MJZmNvZV9zdGF0czsKK307CisKKy8qKgorICogSU9DIGZpcm13YXJlIHN0YXRzCisgKi8KK3N0cnVjdCBiZmFfZndfc3RhdHNfcyB7CisJc3RydWN0IGJmYV9md19pb2Nfc3RhdHNfcwlpb2Nfc3RhdHM7CisJc3RydWN0IGJmYV9md19pb19zdGF0c19zCWlvX3N0YXRzOworCXVuaW9uICBiZmFfZndfcG9ydF9zdGF0c19zCXBvcnRfc3RhdHM7Cit9OworCisvKioKKyAqIElPQyBzdGF0aXN0aWNzCisgKi8KK3N0cnVjdCBiZmFfaW9jZmNfc3RhdHNfcyB7CisJc3RydWN0IGJmYV9md19zdGF0c19zIAlmd19zdGF0czsJLyogIGZpcm13YXJlIElPQyBzdGF0cyAgICAgICovCit9OworCisvKioKKyAqIElPQyBhdHRyaWJ1dGVzIHJldHVybmVkIGluIHF1ZXJpZXMKKyAqLworc3RydWN0IGJmYV9pb2NmY19hdHRyX3MgeworCXN0cnVjdCBiZmFfaW9jZmNfY2ZnX3MJCWNvbmZpZzsJCS8qICBJT0NGQyBjb25maWcgICAqLworCXN0cnVjdCBiZmFfaW9jZmNfaW50cl9hdHRyX3MJaW50cl9hdHRyOwkvKiAgaW50ZXJydXB0IGF0dHIgKi8KK307CisKKyNkZWZpbmUgQkZBX0lPQ0ZDX1BBVEhUT1ZfTUFYCTYwCisjZGVmaW5lIEJGQV9JT0NGQ19RREVQVEhfTUFYCTIwMDAKKworI2VuZGlmIC8qIF9fQkZBX0RFRlNfSU9DX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfaXBmYy5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfaXBmYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjYjYzZWEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19pcGZjLmgKQEAgLTAsMCArMSw3MCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2lmbmRlZiBfX0JGQV9ERUZTX0lQRkNfSF9fCisjZGVmaW5lIF9fQkZBX0RFRlNfSVBGQ19IX18KKworI2luY2x1ZGUgPGJmYV9vc19pbmMuaD4KKyNpbmNsdWRlIDxwcm90b2NvbC90eXBlcy5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfdHlwZXMuaD4KKworLyoqCisgKiBGQ1MgaXAgcmVtb3RlIHBvcnQgc3RhdGVzCisgKi8KK2VudW0gYmZhX2lwcnBfc3RhdGUgeworCUJGQV9JUFJQX1VOSU5JVCAgPSAwLAkvKiAgUE9SVCBpcyBub3QgeWV0IGluaXRpYWxpemVkICovCisJQkZBX0lQUlBfT05MSU5FICA9IDEsCS8qICBwcm9jZXNzIGxvZ2luIGlzIGNvbXBsZXRlICovCisJQkZBX0lQUlBfT0ZGTElORSA9IDIsCS8qICBpcHJwIGlzIG9mZmxpbmUgKi8KK307CisKKy8qKgorICogRkNTIHJlbW90ZSBwb3J0IHN0YXRpc3RpY3MKKyAqLworc3RydWN0IGJmYV9pcHJwX3N0YXRzX3MgeworCXUzMiAgICAgICAgb2ZmbGluZXM7CisJdTMyICAgICAgICBvbmxpbmVzOworCXUzMiAgICAgICAgcnNjbnM7CisJdTMyICAgICAgICBwbG9naXM7CisJdTMyICAgICAgICBsb2dvczsKKwl1MzIgICAgICAgIHBsb2dpX3RpbWVvdXRzOworCXUzMiAgICAgICAgcGxvZ2lfcmVqZWN0czsKK307CisKKy8qKgorICogRkNTIGlwcnAgYXR0cmlidXRlIHJldHVybmVkIGluIHF1ZXJpZXMKKyAqLworc3RydWN0IGJmYV9pcHJwX2F0dHJfcyB7CisJZW51bSBiZmFfaXBycF9zdGF0ZSBzdGF0ZTsKK307CisKK3N0cnVjdCBiZmFfaXBmY19zdGF0c19zIHsKKwl1MzIgYXJwX3NlbnQ7CisJdTMyIGFycF9yZWN2OworCXUzMiBhcnBfcmVwbHlfc2VudDsKKwl1MzIgYXJwX3JlcGx5X3JlY3Y7CisJdTMyIGZhcnBfc2VudDsKKwl1MzIgZmFycF9yZWN2OworCXUzMiBmYXJwX3JlcGx5X3NlbnQ7CisJdTMyIGZhcnBfcmVwbHlfcmVjdjsKKwl1MzIgZmFycF9yZWplY3Rfc2VudDsKKwl1MzIgZmFycF9yZWplY3RfcmVjdjsKK307CisKK3N0cnVjdCBiZmFfaXBmY19hdHRyX3MgeworCWJmYV9ib29sZWFuX3QgZW5hYmxlZDsKK307CisKKyNlbmRpZiAvKiBfX0JGQV9ERUZTX0lQRkNfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19pdG5pbS5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfaXRuaW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZWM3Njk5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfaXRuaW0uaApAQCAtMCwwICsxLDEyNiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2lmbmRlZiBfX0JGQV9ERUZTX0lUTklNX0hfXworI2RlZmluZSBfX0JGQV9ERUZTX0lUTklNX0hfXworCisjaW5jbHVkZSA8YmZhX29zX2luYy5oPgorI2luY2x1ZGUgPHByb3RvY29sL3R5cGVzLmg+CisKKy8qKgorICogRkNTIGl0bmltIHN0YXRlcworICovCitlbnVtIGJmYV9pdG5pbV9zdGF0ZSB7CisJQkZBX0lUTklNX09GRkxJTkUgCT0gMCwJLyogIG9mZmxpbmUgKi8KKwlCRkFfSVROSU1fUFJMSV9TRU5EIAk9IDEsCS8qICBwcmxpIHNlbmQgKi8KKwlCRkFfSVROSU1fUFJMSV9TRU5UIAk9IDIsCS8qICBwcmxpIHNlbnQgKi8KKwlCRkFfSVROSU1fUFJMSV9SRVRSWSAJPSAzLAkvKiAgcHJsaSByZXRyeSAqLworCUJGQV9JVE5JTV9IQ0JfT05MSU5FIAk9IDQsCS8qICBvbmxpbmUgY2FsbGJhY2sgKi8KKwlCRkFfSVROSU1fT05MSU5FIAk9IDUsCS8qICBvbmxpbmUgKi8KKwlCRkFfSVROSU1fSENCX09GRkxJTkUgCT0gNiwJLyogIG9mZmxpbmUgY2FsbGJhY2sgKi8KKwlCRkFfSVROSU1fSU5JVElBVElPUiAJPSA3LAkvKiAgaW5pdGlhdG9yICovCit9OworCitzdHJ1Y3QgYmZhX2l0bmltX2hhbF9zdGF0c19zIHsKKwl1MzIJb25saW5lczsJLyogIElUTiBuZXh1cyBvbmxpbmVzIChQUkxJIGRvbmUpICovCisJdTMyCW9mZmxpbmVzOwkvKiAgSVROIE5leHVzIG9mZmxpbmVzIAkqLworCXUzMgljcmVhdGVzOwkvKiAgSVROIGNyZWF0ZSByZXF1ZXN0cyAJKi8KKwl1MzIJZGVsZXRlczsJLyogIElUTiBkZWxldGUgcmVxdWVzdHMgCSovCisJdTMyCWNyZWF0ZV9jb21wczsJLyogIElUTiBjcmVhdGUgY29tcGxldGlvbnMgCSovCisJdTMyCWRlbGV0ZV9jb21wczsJLyogIElUTiBkZWxldGUgY29tcGxldGlvbnMgCSovCisJdTMyCXNsZXJfZXZlbnRzOwkvKiAgU0xFUiAoc2VxdWVuY2UgbGV2ZWwgZXJyb3IKKwkJCQkJICogcmVjb3ZlcnkpIGV2ZW50cyAqLworCXUzMglpb2NfZGlzYWJsZWQ7CS8qICBOdW0gSU9DIGRpc2FibGVzCQkqLworCXUzMgljbGVhbnVwX2NvbXBzOwkvKiAgSVROIGNsZWFudXAgY29tcGxldGlvbnMgKi8KKwl1MzIJdG1fY21uZHM7CS8qICB0YXNrIG1hbmFnZW1lbnQoVE0pIGNtbmRzIHNlbnQgKi8KKwl1MzIJdG1fZndfcnNwczsJLyogIFRNIGNtZHMgZmlybXdhcmUgcmVzcG9uc2VzICovCisJdTMyCXRtX3N1Y2Nlc3M7CS8qICBUTSBzdWNjZXNzZXMgKi8KKwl1MzIJdG1fZmFpbHVyZXM7CS8qICBUTSBmYWlsdXJlcyAqLworCXUzMgl0bV9pb19jb21wczsJLyogIFRNIElPIGNvbXBsZXRpb25zICovCisJdTMyCXRtX3FyZXN1bWVzOwkvKiAgVE0gcXVldWUgcmVzdW1lcyAoYWZ0ZXIgd2FpdGluZworCQkJCQkgKiBmb3IgcmVzb3VyY2VzKQorCQkJCQkgKi8KKwl1MzIJdG1faW9jZG93bnM7CS8qICBUTSBjbW5kcyBhZmZlY3RlZCBieSBJT0MgZG93biAqLworCXUzMgl0bV9jbGVhbnVwczsJLyogIFRNIGNsZWFudXBzICovCisJdTMyCXRtX2NsZWFudXBfY29tcHM7CisJCQkJCS8qICBUTSBjbGVhbnVwIGNvbXBsZXRpb25zICovCisJdTMyCWlvczsJCS8qICBJTyByZXF1ZXN0cyAqLworCXUzMglpb19jb21wczsJLyogIElPIGNvbXBsZXRpb25zICovCisJdTY0CWlucHV0X3JlcXM7CS8qICBJTlBVVCByZXF1ZXN0cyAqLworCXU2NAlvdXRwdXRfcmVxczsJLyogIE9VVFBVVCByZXF1ZXN0cyAqLworfTsKKworLyoqCisgKiBGQ1MgcmVtb3RlIHBvcnQgc3RhdGlzdGljcworICovCitzdHJ1Y3QgYmZhX2l0bmltX3N0YXRzX3MgeworCXUzMiAgICAgICAgb25saW5lczsJLyogIG51bSBycG9ydCBvbmxpbmUgKi8KKwl1MzIgICAgICAgIG9mZmxpbmVzOwkvKiAgbnVtIHJwb3J0IG9mZmxpbmUgKi8KKwl1MzIgICAgICAgIHBybGlfc2VudDsJLyogIG51bSBwcmxpIHNlbnQgb3V0ICovCisJdTMyICAgICAgICBmY3hwX2FsbG9jX3dhaXQ7LyogIG51bSBmY3hwIGFsbG9jIHdhaXRzICovCisJdTMyICAgICAgICBwcmxpX3JzcF9lcnI7CS8qICBudW0gcHJsaSByc3AgZXJyb3JzICovCisJdTMyICAgICAgICBwcmxpX3JzcF9hY2M7CS8qICBudW0gcHJsaSByc3AgYWNjZXB0cyAqLworCXUzMiAgICAgICAgaW5pdGlhdG9yOwkvKiAgcnBvcnQgaXMgYW4gaW5pdGlhdG9yICovCisJdTMyICAgICAgICBwcmxpX3JzcF9wYXJzZV9lcnI7CS8qICBwcmxpIHJzcCBwYXJzaW5nIGVycm9ycyAqLworCXUzMiAgICAgICAgcHJsaV9yc3Bfcmp0OwkvKiAgbnVtIHBybGkgcnNwIHJlamVjdHMgKi8KKwl1MzIgICAgICAgIHRpbWVvdXQ7CS8qICBudW0gdGltZW91dHMgZGV0ZWN0ZWQgKi8KKwl1MzIgICAgICAgIHNsZXI7CQkvKiAgbnVtIHNsZXIgbm90aWZpY2F0aW9uIGZyb20gQkZBICovCisJdTMyCXJzdmQ7CisJc3RydWN0IGJmYV9pdG5pbV9oYWxfc3RhdHNfcwloYWxfc3RhdHM7Cit9OworCisvKioKKyAqIEZDUyBpdG5pbSBhdHRyaWJ1dGVzIHJldHVybmVkIGluIHF1ZXJpZXMKKyAqLworc3RydWN0IGJmYV9pdG5pbV9hdHRyX3MgeworCWVudW0gYmZhX2l0bmltX3N0YXRlIHN0YXRlOyAvKiAgRkNTIGl0bmltIHN0YXRlICAgICAgICAqLworCXU4IHJldHJ5OwkJLyogIGRhdGEgcmV0cmFuc21pc2lvbiBzdXBwb3J0ICovCisJdTgJdGFza19yZXRyeV9pZDsgIC8qICB0YXNrIHJldHJ5IGlkZW50IHN1cHBvcnQgICAqLworCXU4IHJlY19zdXBwb3J0OyAgICAvKiAgUkVDIHN1cHBvcnRlZCAgICAgICAgICAgICAgKi8KKwl1OCBjb25mX2NvbXA7ICAgICAgLyogIGNvbmZpcm1lZCBjb21wbGV0aW9uIHN1cHAgICovCit9OworCisvKioKKyAqIEJGQSBJVE5JTSBldmVudHMuCisgKiBBcmd1bWVudHMgYmVsb3cgYXJlIGluIEJGQUwgY29udGV4dCBmcm9tIE1nbXQKKyAqIEJGQV9JVE5JTV9BRU5fTkVXOiAgICAgICBbaW5dOiBOb25lICBbb3V0XTogdmZfaWQsIGxwd3duCisgKiBCRkFfSVROSU1fQUVOX0RFTEVURTogICAgW2luXTogdmZfaWQsIGxwd3duLCBycHd3biAoMCA9IGFsbCBmY3A0IHRhcmdldHMpLAorICoJCQkJICBbb3V0XTogdmZfaWQsIHBwd3duLCBscHd3biwgcnB3d24KKyAqIEJGQV9JVE5JTV9BRU5fT05MSU5FOiAgICBbaW5dOiB2Zl9pZCwgbHB3d24sIHJwd3duICgwID0gYWxsIGZjcDQgdGFyZ2V0cyksCisgKgkJCQkgIFtvdXRdOiB2Zl9pZCwgcHB3d24sIGxwd3duLCBycHd3bgorICogQkZBX0lUTklNX0FFTl9PRkZMSU5FOiAgIFtpbl06IHZmX2lkLCBscHd3biwgcnB3d24gKDAgPSBhbGwgZmNwNCB0YXJnZXRzKSwKKyAqCQkJCSAgW291dF06IHZmX2lkLCBwcHd3biwgbHB3d24sIHJwd3duCisgKiBCRkFfSVROSU1fQUVOX0RJU0NPTk5FQ1Q6W2luXTogdmZfaWQsIGxwd3duLCBycHd3biAoMCA9IGFsbCBmY3A0IHRhcmdldHMpLAorICoJCQkJICBbb3V0XTogdmZfaWQsIHBwd3duLCBscHd3biwgcnB3d24KKyAqLworZW51bSBiZmFfaXRuaW1fYWVuX2V2ZW50IHsKKwlCRkFfSVROSU1fQUVOX09OTElORSAJPSAxLAkvKiAgVGFyZ2V0IG9ubGluZSAqLworCUJGQV9JVE5JTV9BRU5fT0ZGTElORSAJPSAyLAkvKiAgVGFyZ2V0IG9mZmxpbmUgKi8KKwlCRkFfSVROSU1fQUVOX0RJU0NPTk5FQ1QgPSAzLAkvKiAgVGFyZ2V0IGRpc2Nvbm5lY3RlZCAqLworfTsKKworLyoqCisgKiBCRkEgSVROSU0gZXZlbnQgZGF0YSBzdHJ1Y3R1cmUuCisgKi8KK3N0cnVjdCBiZmFfaXRuaW1fYWVuX2RhdGFfcyB7CisJdTE2ICAgICAgICB2Zl9pZDsJLyogIHZmX2lkIG9mIHRoZSBJVCBuZXh1cyAqLworCXUxNiAgICAgICAgcnN2ZFszXTsKKwl3d25fdCAgICAgICAgICAgcHB3d247CS8qICBXV04gb2YgaXRzIHBoeXNpY2FsIHBvcnQgKi8KKwl3d25fdCAgICAgICAgICAgbHB3d247CS8qICBXV04gb2YgbG9naWNhbCBwb3J0ICovCisJd3duX3QgICAgICAgICAgIHJwd3duOwkvKiAgV1dOIG9mIHJlbW90ZSh0YXJnZXQpIHBvcnQgKi8KK307CisKKyNlbmRpZiAvKiBfX0JGQV9ERUZTX0lUTklNX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfbGVkLmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19sZWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjAzOTI3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfbGVkLmgKQEAgLTAsMCArMSwzNSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9fQkZBX0RFRlNfTEVEX0hfXworI2RlZmluZSBfX0JGQV9ERUZTX0xFRF9IX18KKworI2RlZmluZQlCRkFfTEVEX01BWF9OVU0JCTMKKworZW51bSBiZmFfbGVkX29wIHsKKwlCRkFfTEVEX09GRiAgID0gMCwKKwlCRkFfTEVEX09OICAgID0gMSwKKwlCRkFfTEVEX0ZMSUNLID0gMiwKKwlCRkFfTEVEX0JMSU5LID0gMywKK307CisKK2VudW0gYmZhX2xlZF9jb2xvciB7CisJQkZBX0xFRF9HUkVFTiA9IDAsCisJQkZBX0xFRF9BTUJFUiA9IDEsCit9OworCisjZW5kaWYgLyogX19CRkFfREVGU19MRURfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19scG9ydC5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfbHBvcnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MzU5ZjgyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfbHBvcnQuaApAQCAtMCwwICsxLDY4IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX19CRkFfREVGU19MUE9SVF9IX18KKyNkZWZpbmUgX19CRkFfREVGU19MUE9SVF9IX18KKworI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfdHlwZXMuaD4KKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX3BvcnQuaD4KKworLyoqCisgKiBCRkEgQUVOIGxvZ2ljYWwgcG9ydCBldmVudHMuCisgKiBBcmd1bWVudHMgYmVsb3cgYXJlIGluIEJGQUwgY29udGV4dCBmcm9tIE1nbXQKKyAqIEJGQV9MUE9SVF9BRU5fTkVXOiAgICAgICBbaW5dOiBOb25lICAgICAgICAgW291dF06IHZmX2lkLCBwcHd3biwgbHB3d24sIHJvbGVzCisgKiBCRkFfTFBPUlRfQUVOX0RFTEVURTogICAgW2luXTogbHB3d24gICAgICAgIFtvdXRdOiB2Zl9pZCwgcHB3d24uIGxwd3duLCByb2xlcworICogQkZBX0xQT1JUX0FFTl9PTkxJTkU6ICAgIFtpbl06IGxwd3duICAgICAgICBbb3V0XTogdmZfaWQsIHBwd3duLiBscHd3biwgcm9sZXMKKyAqIEJGQV9MUE9SVF9BRU5fT0ZGTElORTogICBbaW5dOiBscHd3biAgICAgICAgW291dF06IHZmX2lkLCBwcHd3bi4gbHB3d24sIHJvbGVzCisgKiBCRkFfTFBPUlRfQUVOX0RJU0NPTk5FQ1Q6W2luXTogbHB3d24gICAgICAgIFtvdXRdOiB2Zl9pZCwgcHB3d24uIGxwd3duLCByb2xlcworICogQkZBX0xQT1JUX0FFTl9ORVdfUFJPUDogIFtpbl06IE5vbmUgICAgICAgICBbb3V0XTogdmZfaWQsIHBwd3duLiBscHd3biwgcm9sZXMKKyAqIEJGQV9MUE9SVF9BRU5fREVMRVRFX1BST1A6ICAgICBbaW5dOiBscHd3biAgW291dF06IHZmX2lkLCBwcHd3bi4gbHB3d24sIHJvbGVzCisgKiBCRkFfTFBPUlRfQUVOX05FV19TVEFOREFSRDogICAgW2luXTogTm9uZSAgIFtvdXRdOiB2Zl9pZCwgcHB3d24uIGxwd3duLCByb2xlcworICogQkZBX0xQT1JUX0FFTl9ERUxFVEVfU1RBTkRBUkQ6IFtpbl06IGxwd3duICBbb3V0XTogdmZfaWQsIHBwd3duLiBscHd3biwgcm9sZXMKKyAqIEJGQV9MUE9SVF9BRU5fTlBJVl9EVVBfV1dOOiAgICBbaW5dOiBscHd3biAgW291dF06IHZmX2lkLCBwcHd3bi4gbHB3d24sIHJvbGVzCisgKiBCRkFfTFBPUlRfQUVOX05QSVZfRkFCUklDX01BWDogW2luXTogbHB3d24gIFtvdXRdOiB2Zl9pZCwgcHB3d24uIGxwd3duLCByb2xlcworICogQkZBX0xQT1JUX0FFTl9OUElWX1VOS05PV046ICAgIFtpbl06IGxwd3duICBbb3V0XTogdmZfaWQsIHBwd3duLiBscHd3biwgcm9sZXMKKyAqLworZW51bSBiZmFfbHBvcnRfYWVuX2V2ZW50IHsKKwlCRkFfTFBPUlRfQUVOX05FVwk9IDEsCS8qICBMUG9ydCBjcmVhdGVkIGV2ZW50ICovCisJQkZBX0xQT1JUX0FFTl9ERUxFVEUJPSAyLAkvKiAgTFBvcnQgZGVsZXRlZCBldmVudCAqLworCUJGQV9MUE9SVF9BRU5fT05MSU5FCT0gMywJLyogIExQb3J0IG9ubGluZSBldmVudCAqLworCUJGQV9MUE9SVF9BRU5fT0ZGTElORQk9IDQsCS8qICBMUG9ydCBvZmZsaW5lIGV2ZW50ICovCisJQkZBX0xQT1JUX0FFTl9ESVNDT05ORUNUID0gNSwJLyogIExQb3J0IGRpc2Nvbm5lY3QgZXZlbnQgKi8KKwlCRkFfTFBPUlRfQUVOX05FV19QUk9QCT0gNiwJLyogIFZQb3J0IGNyZWF0ZWQgZXZlbnQgKi8KKwlCRkFfTFBPUlRfQUVOX0RFTEVURV9QUk9QID0gNywJLyogIFZQb3J0IGRlbGV0ZWQgZXZlbnQgKi8KKwlCRkFfTFBPUlRfQUVOX05FV19TVEFOREFSRCA9IDgsCS8qICBWUG9ydCBjcmVhdGVkIGV2ZW50ICovCisJQkZBX0xQT1JUX0FFTl9ERUxFVEVfU1RBTkRBUkQgPSA5LCAgLyogIFZQb3J0IGRlbGV0ZWQgZXZlbnQgKi8KKwlCRkFfTFBPUlRfQUVOX05QSVZfRFVQX1dXTiA9IDEwLCAgICAvKiAgVlBvcnQgY29uZmlndXJlZCB3aXRoCisJCQkJCSAgICAgKiAgIGR1cGxpY2F0ZSBXV04gZXZlbnQKKwkJCQkJCSAqLworCUJGQV9MUE9SVF9BRU5fTlBJVl9GQUJSSUNfTUFYID0gMTEsIC8qICBNYXggTlBJViBpbiBmYWJyaWMvZnBvcnQgKi8KKwlCRkFfTFBPUlRfQUVOX05QSVZfVU5LTk9XTiA9IDEyLCAvKiAgVW5rbm93biBOUElWIEVycm9yIGNvZGUgZXZlbnQgKi8KK307CisKKy8qKgorICogQkZBIEFFTiBldmVudCBkYXRhIHN0cnVjdHVyZQorICovCitzdHJ1Y3QgYmZhX2xwb3J0X2Flbl9kYXRhX3MgeworCXUxNiAgICAgICAgdmZfaWQ7CS8qICB2Zl9pZCBvZiB0aGlzIGxvZ2ljYWwgcG9ydCAqLworCXUxNiAgICAgICAgcnN2ZDsKKwllbnVtIGJmYV9wb3J0X3JvbGUgcm9sZXM7CS8qICBMb2dpY2FsIHBvcnQgbW9kZSxJTS9UTS9JUCBldGMgKi8KKwl3d25fdCAgICAgICAgICAgcHB3d247CS8qICBXV04gb2YgaXRzIHBoeXNpY2FsIHBvcnQgKi8KKwl3d25fdCAgICAgICAgICAgbHB3d247CS8qICBXV04gb2YgdGhpcyBsb2dpY2FsIHBvcnQgKi8KK307CisKKyNlbmRpZiAvKiBfX0JGQV9ERUZTX0xQT1JUX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfbWZnLmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19tZmcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xM2ZkNGFiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfbWZnLmgKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2lmbmRlZiBfX0JGQV9ERUZTX01GR19IX18KKyNkZWZpbmUgX19CRkFfREVGU19NRkdfSF9fCisKKyNpbmNsdWRlIDxiZmFfb3NfaW5jLmg+CisKKy8qKgorICogTWFudWZhY3R1cmluZyBibG9jayB2ZXJzaW9uCisgKi8KKyNkZWZpbmUgQkZBX01GR19WRVJTSU9OCQkJCTEKKworLyoqCisgKiBNYW51ZmFjdHVyaW5nIGJsb2NrIGZvcm1hdAorICovCisjZGVmaW5lIEJGQV9NRkdfU0VSSUFMTlVNX1NJWkUJCQkxMQorI2RlZmluZSBCRkFfTUZHX1BBUlROVU1fU0laRQkJCTE0CisjZGVmaW5lIEJGQV9NRkdfU1VQUExJRVJfSURfU0laRQkJMTAKKyNkZWZpbmUgQkZBX01GR19TVVBQTElFUl9QQVJUTlVNX1NJWkUJMjAKKyNkZWZpbmUgQkZBX01GR19TVVBQTElFUl9TRVJJQUxOVU1fU0laRQkyMAorI2RlZmluZSBCRkFfTUZHX1NVUFBMSUVSX1JFVklTSU9OX1NJWkUJNAorI2RlZmluZSBTVFJTWihfbikJKCgoX24pICsgNCkgJiB+MykKKworLyoqCisgKiBWUEQgZGF0YSBsZW5ndGgKKyAqLworI2RlZmluZSBCRkFfTUZHX1ZQRF9MRU4gICAgIDI1NgorCisvKioKKyAqIEFsbCBudW1lcmljYWwgZmllbGRzIGFyZSBpbiBiaWctZW5kaWFuIGZvcm1hdC4KKyAqLworc3RydWN0IGJmYV9tZmdfdnBkX3MgeworICAgIHU4ICAgICB2ZXJzaW9uOyAgICAvKiAgdnBkIGRhdGEgdmVyc2lvbiAqLworICAgIHU4ICAgICB2cGRfc2lnWzNdOyAvKiAgY2hhcmFjdGVycyAnVicsICdQJywgJ0QnICovCisgICAgdTggICAgIGNoa3N1bTsgICAgIC8qICB1OCBjaGVja3N1bSAqLworICAgIHU4ICAgICB2ZW5kb3I7ICAgICAvKiAgdmVuZG9yICovCisgICAgdTggICAgIGxlbjsgICAgICAgIC8qICB2cGQgZGF0YSBsZW5ndGggZXhjbHVkaW5nIGhlYWRlciAqLworICAgIHU4ICAgICByc3Y7CisgICAgdTggICAgIGRhdGFbQkZBX01GR19WUERfTEVOXTsgIC8qICB2cGQgZGF0YSAqLworfTsKKworI3ByYWdtYSBwYWNrKDEpCisKKyNlbmRpZiAvKiBfX0JGQV9ERUZTX01GR19IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX3BjaS5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfcGNpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzliODMzMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX3BjaS5oCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0JGQV9ERUZTX1BDSV9IX18KKyNkZWZpbmUgX19CRkFfREVGU19QQ0lfSF9fCisKKy8qKgorICogUENJIGRldmljZSBhbmQgdmVuZG9yIElEIGluZm9ybWF0aW9uCisgKi8KK2VudW0geworCUJGQV9QQ0lfVkVORE9SX0lEX0JST0NBREUJPSAweDE2NTcsCisJQkZBX1BDSV9ERVZJQ0VfSURfRkNfOEcyUAk9IDB4MTMsCisJQkZBX1BDSV9ERVZJQ0VfSURfRkNfOEcxUAk9IDB4MTcsCisJQkZBX1BDSV9ERVZJQ0VfSURfQ1QJCT0gMHgxNCwKK307CisKKy8qKgorICogUENJIHN1Yi1zeXN0ZW0gZGV2aWNlIGFuZCB2ZW5kb3IgSUQgaW5mb3JtYXRpb24KKyAqLworZW51bSB7CisJQkZBX1BDSV9GQ09FX1NTREVWSUNFX0lECT0gMHgxNCwKK307CisKKyNkZWZpbmUgQkZBX1BDSV9BQ0NFU1NfUkFOR0VTIDEJLyogTWF4aW11bSBudW1iZXIgb2YgZGV2aWNlIGFkZHJlc3MgcmFuZ2VzCisJCQkJICogbWFwcGVkIHRocm91Z2ggZGlmZmVyZW50IEJBUihzKS4gKi8KKworI2VuZGlmIC8qIF9fQkZBX0RFRlNfUENJX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfcG0uaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX3BtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZThkNmQ5NQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX3BtLmgKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9fQkZBX0RFRlNfUE1fSF9fCisjZGVmaW5lIF9fQkZBX0RFRlNfUE1fSF9fCisKKyNpbmNsdWRlIDxiZmFfb3NfaW5jLmg+CisKKy8qKgorICogQkZBIHBvd2VyIG1hbmFnZW1lbnQgZGV2aWNlIHN0YXRlcworICovCitlbnVtIGJmYV9wbV9kcyB7CisJQkZBX1BNX0RTX0QwID0gMCwJLyogIGZ1bGwgcG93ZXIgbW9kZSAqLworCUJGQV9QTV9EU19EMSA9IDEsCS8qICBwb3dlciBzYXZlIHN0YXRlIDEgKi8KKwlCRkFfUE1fRFNfRDIgPSAyLAkvKiAgcG93ZXIgc2F2ZSBzdGF0ZSAyICovCisJQkZBX1BNX0RTX0QzID0gMywJLyogIHBvd2VyIG9mZiBzdGF0ZSAqLworfTsKKworI2VuZGlmIC8qIF9fQkZBX0RFRlNfUE1fSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19wb20uaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX3BvbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5ZmEyNzgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19wb20uaApAQCAtMCwwICsxLDU2IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaWZuZGVmIF9fQkZBX0RFRlNfUE9NX0hfXworI2RlZmluZSBfX0JGQV9ERUZTX1BPTV9IX18KKworI2luY2x1ZGUgPGJmYV9vc19pbmMuaD4KKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX3R5cGVzLmg+CisKKy8qKgorICogUE9NIGhlYWx0aCBzdGF0dXMgbGV2ZWxzIGZvciBlYWNoIGF0dHJpYnV0ZXMuCisgKi8KK2VudW0gYmZhX3BvbV9lbnRyeV9oZWFsdGggeworCUJGQV9QT01fSEVBTFRIX05PSU5GTyAgPSAxLAkvKiAgbm8gaW5mb3JtYXRpb24gKi8KKwlCRkFfUE9NX0hFQUxUSF9OT1JNQUwgID0gMiwJLyogIGhlYWx0aCBpcyBub3JtYWwgKi8KKwlCRkFfUE9NX0hFQUxUSF9XQVJOSU5HID0gMywJLyogIHdhcm5pbmcgbGV2ZWwgKi8KKwlCRkFfUE9NX0hFQUxUSF9BTEFSTSAgID0gNCwJLyogIGFsYXJtaW5nIGxldmVsICovCit9OworCisvKioKKyAqIFJlYWRpbmcgb2YgdGVtcGVyYXR1cmUvdm9sdGFnZS9jdXJyZW50L3Bvd2VyCisgKi8KK3N0cnVjdCBiZmFfcG9tX2VudHJ5X3MgeworCWVudW0gYmZhX3BvbV9lbnRyeV9oZWFsdGggaGVhbHRoOwkvKiAgUE9NIGVudHJ5IGhlYWx0aCAqLworCXUzMiAgICAgICAgY3Vycl92YWx1ZTsJLyogIGN1cnJlbnQgdmFsdWUgKi8KKwl1MzIgICAgICAgIHRocl93YXJuX2hpZ2g7CS8qICB0aHJlc2hvbGQgd2FybmluZyBoaWdoICovCisJdTMyICAgICAgICB0aHJfd2Fybl9sb3c7CS8qICB0aHJlc2hvbGQgd2FybmluZyBsb3cgKi8KKwl1MzIgICAgICAgIHRocl9hbGFybV9sb3c7CS8qICB0aHJlc2hvbGQgYWxhcmFtIGxvdyAqLworCXUzMiAgICAgICAgdGhyX2FsYXJtX2hpZ2g7CS8qICB0aHJlc2hvbGQgYWxhcm0gaGlnaCAqLworfTsKKworLyoqCisgKiBQT00gYXR0cmlidXRlcworICovCitzdHJ1Y3QgYmZhX3BvbV9hdHRyX3MgeworCXN0cnVjdCBiZmFfcG9tX2VudHJ5X3MgdGVtcGVyYXR1cmU7CS8qICBjZW50aWdyYWRlICovCisJc3RydWN0IGJmYV9wb21fZW50cnlfcyB2b2x0YWdlOwkvKiAgdm9sdHMgKi8KKwlzdHJ1Y3QgYmZhX3BvbV9lbnRyeV9zIGN1cnI7CS8qICBtaWxsaSBhbXBzICovCisJc3RydWN0IGJmYV9wb21fZW50cnlfcyB0eHBvd2VyOwkvKiAgbWljcm8gd2F0dHMgKi8KKwlzdHJ1Y3QgYmZhX3BvbV9lbnRyeV9zIHJ4cG93ZXI7CS8qICBtaWNybyB3YXR0cyAqLworfTsKKworI2VuZGlmIC8qIF9fQkZBX0RFRlNfUE9NX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfcG9ydC5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfcG9ydC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlMDY5NmMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19wb3J0LmgKQEAgLTAsMCArMSwyNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0JGQV9ERUZTX1BPUlRfSF9fCisjZGVmaW5lIF9fQkZBX0RFRlNfUE9SVF9IX18KKworI2luY2x1ZGUgPGJmYV9vc19pbmMuaD4KKyNpbmNsdWRlIDxwcm90b2NvbC90eXBlcy5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfcHBvcnQuaD4KKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX2lvYy5oPgorCisjZGVmaW5lIEJGQV9GQ1NfRkFCUklDX0lQQUREUl9TWiAgMTYKKworLyoqCisgKiBzeW1ib2xpYyBuYW1lcyBmb3IgYmFzZSBwb3J0L3ZpcnR1YWwgcG9ydAorICovCisjZGVmaW5lIEJGQV9TWU1OQU1FX01BWExFTgkxMjgJLyogdm13YXJlL3dpbmRvd3MgdXNlcyAxMjggYnl0ZXMgKi8KK3N0cnVjdCBiZmFfcG9ydF9zeW1uYW1lX3MgeworCWNoYXIgICAgICAgICAgICBzeW1uYW1lW0JGQV9TWU1OQU1FX01BWExFTl07Cit9OworCisvKioKKyogUm9sZXMgb2YgRkNTIHBvcnQ6CisgKiAgICAgLSBGQ1AgSU0gYW5kIEZDUCBUTSByb2xlcyBjYW5ub3QgYmUgZW5hYmxlZCB0b2dldGhlciBmb3IgYSBGQ1MgcG9ydAorICogICAgIC0gQ3JlYXRlIG11bHRpcGxlIHBvcnRzIGlmIGJvdGggSU0gYW5kIFRNIGZ1bmN0aW9ucyByZXF1aXJlZC4KKyAqICAgICAtIEF0bGVhc3Qgb25lIHJvbGUgbXVzdCBiZSBzcGVjaWZpZWQuCisgKi8KK2VudW0gYmZhX3BvcnRfcm9sZSB7CisJQkZBX1BPUlRfUk9MRV9GQ1BfSU0gCT0gMHgwMSwJLyogIEZDUCBpbml0aWF0b3Igcm9sZSAqLworCUJGQV9QT1JUX1JPTEVfRkNQX1RNIAk9IDB4MDIsCS8qICBGQ1AgdGFyZ2V0IHJvbGUgKi8KKwlCRkFfUE9SVF9ST0xFX0ZDUF9JUEZDIAk9IDB4MDQsCS8qICBJUCBvdmVyIEZDIHJvbGUgKi8KKwlCRkFfUE9SVF9ST0xFX0ZDUF9NQVggCT0gQkZBX1BPUlRfUk9MRV9GQ1BfSVBGQyB8IEJGQV9QT1JUX1JPTEVfRkNQX0lNCit9OworCisvKioKKyAqIEZDUyBwb3J0IGNvbmZpZ3VyYXRpb24uCisgKi8KK3N0cnVjdCBiZmFfcG9ydF9jZmdfcyB7CisgICAgd3duX3QgICAgICAgICAgICAgICBwd3duOyAgICAgICAvKiAgcG9ydCB3d24gKi8KKyAgICB3d25fdCAgICAgICAgICAgICAgIG53d247ICAgICAgIC8qICBub2RlIHd3biAqLworICAgIHN0cnVjdCBiZmFfcG9ydF9zeW1uYW1lX3MgIHN5bV9uYW1lOyAgIC8qICB2bSBwb3J0IHN5bWJvbGljIG5hbWUgKi8KKyAgICBlbnVtIGJmYV9wb3J0X3JvbGUgICAgIHJvbGVzOyAgICAgIC8qICBGQ1MgcG9ydCByb2xlcyAqLworCXUzMgkJCXJzdmQ7CisgICAgdTggICAgICAgICAgICAgdGFnWzE2XTsJLyogIG9wYXF1ZSB0YWcgZnJvbSBhcHBsaWNhdGlvbiAqLworfTsKKworLyoqCisgKiBGQ1MgcG9ydCBzdGF0ZXMKKyAqLworZW51bSBiZmFfcG9ydF9zdGF0ZSB7CisJQkZBX1BPUlRfVU5JTklUICA9IDAsCS8qICBQT1JUIGlzIG5vdCB5ZXQgaW5pdGlhbGl6ZWQgKi8KKwlCRkFfUE9SVF9GRElTQyAgID0gMSwJLyogIEZESVNDIGlzIGluIHByb2dyZXNzICovCisJQkZBX1BPUlRfT05MSU5FICA9IDIsCS8qICBsb2dpbiB0byBmYWJyaWMgaXMgY29tcGxldGUgKi8KKwlCRkFfUE9SVF9PRkZMSU5FID0gMywJLyogIE5vIGxvZ2luIHRvIGZhYnJpYyAqLworfTsKKworLyoqCisgKiBGQ1MgcG9ydCB0eXBlLiBSZXF1aXJlZCBmb3IgVm1XYXJlLgorICovCitlbnVtIGJmYV9wb3J0X3R5cGUgeworCUJGQV9QT1JUX1RZUEVfUEhZU0lDQUwgPSAwLAorCUJGQV9QT1JUX1RZUEVfVklSVFVBTCwKK307CisKKy8qKgorICogRkNTIHBvcnQgb2ZmbGluZSByZWFzb24uIFJlcXVpcmVkIGZvciBWbVdhcmUuCisgKi8KK2VudW0gYmZhX3BvcnRfb2ZmbGluZV9yZWFzb24geworCUJGQV9QT1JUX09GRkxJTkVfVU5LTk9XTiA9IDAsCisJQkZBX1BPUlRfT0ZGTElORV9MSU5LRE9XTiwKKwlCRkFfUE9SVF9PRkZMSU5FX0ZBQl9VTlNVUFBPUlRFRCwJLyogIE5QSVYgbm90IHN1cHBvcnRlZCBieSB0aGUKKwkJCQkJCSAqICAgIGZhYnJpYyAqLworCUJGQV9QT1JUX09GRkxJTkVfRkFCX05PUkVTT1VSQ0VTLAorCUJGQV9QT1JUX09GRkxJTkVfRkFCX0xPR09VVCwKK307CisKKy8qKgorICogRkNTIGxwb3J0IGluZm8uIFJlcXVpcmVkIGZvciBWbVdhcmUuCisgKi8KK3N0cnVjdCBiZmFfcG9ydF9pbmZvX3MgeworCXU4ICAgICAgICAgcG9ydF90eXBlOwkvKiBiZmFfcG9ydF90eXBlX3QgOiBwaHlzaWNhbCBvcgorCQkJCQkgKiB2aXJ0dWFsICovCisJdTggICAgICAgICBwb3J0X3N0YXRlOwkvKiBvbmUgb2YgYmZhX3BvcnRfc3RhdGUgdmFsdWVzICovCisJdTggICAgICAgICBvZmZsaW5lX3JlYXNvbjsJLyogb25lIG9mIGJmYV9wb3J0X29mZmxpbmVfcmVhc29uX3QKKwkJCQkJICogdmFsdWVzICovCisJd3duX3QgICAgICAgICAgIHBvcnRfd3duOworCXd3bl90ICAgICAgICAgICBub2RlX3d3bjsKKworCS8qCisJICogZm9sbG93aW5nIDQgZmVpbGRzIGFyZSB2YWxpZCBmb3IgUGh5c2ljYWwgUG9ydHMgb25seQorCSAqLworCXUzMiAgICAgICAgbWF4X3Zwb3J0c19zdXBwOwkvKiBNYXggc3VwcG9ydGVkIHZwb3J0cyAqLworCXUzMiAgICAgICAgbnVtX3Zwb3J0c19pbnVzZTsJLyogTnVtIG9mIGluIHVzZSB2cG9ydHMgKi8KKwl1MzIgICAgICAgIG1heF9ycG9ydHNfc3VwcDsJLyogTWF4IHN1cHBvcnRlZCBycG9ydHMgKi8KKwl1MzIgICAgICAgIG51bV9ycG9ydHNfaW51c2U7CS8qIE51bSBvZiBkb3Njb3ZlcmVkIHJwb3J0cyAqLworCit9OworCisvKioKKyAqIEZDUyBwb3J0IHN0YXRpc3RpY3MKKyAqLworc3RydWN0IGJmYV9wb3J0X3N0YXRzX3MgeworCXUzMiAgICAgICAgbnNfcGxvZ2lfc2VudDsKKwl1MzIgICAgICAgIG5zX3Bsb2dpX3JzcF9lcnI7CisJdTMyICAgICAgICBuc19wbG9naV9hY2NfZXJyOworCXUzMiAgICAgICAgbnNfcGxvZ2lfYWNjZXB0czsKKwl1MzIgICAgICAgIG5zX3JlamVjdHM7CS8qIE5TIGNvbW1hbmQgcmVqZWN0cyAqLworCXUzMiAgICAgICAgbnNfcGxvZ2lfdW5rbm93bl9yc3A7CisJdTMyICAgICAgICBuc19wbG9naV9hbGxvY193YWl0OworCisJdTMyICAgICAgICBuc19yZXRyaWVzOwkvKiBOUyBjb21tYW5kIHJldHJpZXMgKi8KKwl1MzIgICAgICAgIG5zX3RpbWVvdXRzOwkvKiBOUyBjb21tYW5kIHRpbWVvdXRzICovCisKKwl1MzIgICAgICAgIG5zX3JzcG5pZF9zZW50OworCXUzMiAgICAgICAgbnNfcnNwbmlkX2FjY2VwdHM7CisJdTMyICAgICAgICBuc19yc3BuaWRfcnNwX2VycjsKKwl1MzIgICAgICAgIG5zX3JzcG5pZF9yZWplY3RzOworCXUzMiAgICAgICAgbnNfcnNwbmlkX2FsbG9jX3dhaXQ7CisKKwl1MzIgICAgICAgIG5zX3JmdGlkX3NlbnQ7CisJdTMyICAgICAgICBuc19yZnRpZF9hY2NlcHRzOworCXUzMiAgICAgICAgbnNfcmZ0aWRfcnNwX2VycjsKKwl1MzIgICAgICAgIG5zX3JmdGlkX3JlamVjdHM7CisJdTMyICAgICAgICBuc19yZnRpZF9hbGxvY193YWl0OworCisJdTMyCW5zX3JmZmlkX3NlbnQ7CisJdTMyCW5zX3JmZmlkX2FjY2VwdHM7CisJdTMyCW5zX3JmZmlkX3JzcF9lcnI7CisJdTMyCW5zX3JmZmlkX3JlamVjdHM7CisJdTMyCW5zX3JmZmlkX2FsbG9jX3dhaXQ7CisKKwl1MzIgICAgICAgIG5zX2dpZGZ0X3NlbnQ7CisJdTMyICAgICAgICBuc19naWRmdF9hY2NlcHRzOworCXUzMiAgICAgICAgbnNfZ2lkZnRfcnNwX2VycjsKKwl1MzIgICAgICAgIG5zX2dpZGZ0X3JlamVjdHM7CisJdTMyICAgICAgICBuc19naWRmdF91bmtub3duX3JzcDsKKwl1MzIgICAgICAgIG5zX2dpZGZ0X2FsbG9jX3dhaXQ7CisKKwkvKgorCSAqIE1nbXQgU2VydmVyIHN0YXRzCisJICovCisJdTMyICAgICAgICBtc19yZXRyaWVzOwkvKiBNUyBjb21tYW5kIHJldHJpZXMgKi8KKwl1MzIgICAgICAgIG1zX3RpbWVvdXRzOwkvKiBNUyBjb21tYW5kIHRpbWVvdXRzICovCisJdTMyICAgICAgICBtc19wbG9naV9zZW50OworCXUzMiAgICAgICAgbXNfcGxvZ2lfcnNwX2VycjsKKwl1MzIgICAgICAgIG1zX3Bsb2dpX2FjY19lcnI7CisJdTMyICAgICAgICBtc19wbG9naV9hY2NlcHRzOworCXUzMiAgICAgICAgbXNfcmVqZWN0czsJLyogTlMgY29tbWFuZCByZWplY3RzICovCisJdTMyICAgICAgICBtc19wbG9naV91bmtub3duX3JzcDsKKwl1MzIgICAgICAgIG1zX3Bsb2dpX2FsbG9jX3dhaXQ7CisKKwl1MzIgICAgICAgIG51bV9yc2NuOwkvKiBOdW0gb2YgUlNDTiByZWNlaXZlZCAqLworCXUzMiAgICAgICAgbnVtX3BvcnRpZF9yc2NuOy8qIE51bSBwb3J0aWQgZm9ybWF0IFJTQ04KKwkJCQkJCQkJKiByZWNlaXZlZCAqLworCisJdTMyCXVmX3JlY3ZzOyAJLyogdW5zb2xpY2l0ZWQgcmVjdiBmcmFtZXMgICAgICAqLworCXUzMgl1Zl9yZWN2X2Ryb3BzOyAJLyogZHJvcHBlZCByZWNlaXZlZCBmcmFtZXMJKi8KKworCXUzMglyc3ZkOyAJCS8qIHBhZGRpbmcgZm9yIDY0IGJpdCBhbGlnbm1lbnQgKi8KK307CisKKy8qKgorICogQkZBIHBvcnQgYXR0cmlidXRlIHJldHVybmVkIGluIHF1ZXJpZXMKKyAqLworc3RydWN0IGJmYV9wb3J0X2F0dHJfcyB7CisJZW51bSBiZmFfcG9ydF9zdGF0ZSBzdGF0ZTsJCS8qICBwb3J0IHN0YXRlICovCisJdTMyICAgICAgICAgcGlkOwkJLyogIHBvcnQgSUQgKi8KKwlzdHJ1Y3QgYmZhX3BvcnRfY2ZnX3MgICBwb3J0X2NmZzsJLyogIHBvcnQgY29uZmlndXJhdGlvbiAqLworCWVudW0gYmZhX3Bwb3J0X3R5cGUgcG9ydF90eXBlOwkvKiAgY3VycmVudCB0b3BvbG9neSAqLworCXUzMiAgICAgICAgIGxvb3BiYWNrOwkvKiAgY2FibGUgaXMgZXh0ZXJuYWxseSBsb29wZWQgYmFjayAqLworCXd3bl90CQlmYWJyaWNfbmFtZTsgLyogIGF0dGFjaGVkIHN3aXRjaCdzIG53d24gKi8KKwl1OAkJZmFicmljX2lwX2FkZHJbQkZBX0ZDU19GQUJSSUNfSVBBRERSX1NaXTsgLyogIGF0dGFjaGVkCisJCQkJCQkJKiBmYWJyaWMncyBpcCBhZGRyICovCit9OworCisvKioKKyAqIEJGQSBwaHlzaWNhbCBwb3J0IExldmVsIGV2ZW50cworICogQXJndW1lbnRzIGJlbG93IGFyZSBpbiBCRkFMIGNvbnRleHQgZnJvbSBNZ210CisgKiBCRkFfUE9SVF9BRU5fT05MSU5FOiAgICAgW2luXTogcHd3bglbb3V0XTogcHd3bgorICogQkZBX1BPUlRfQUVOX09GRkxJTkU6ICAgIFtpbl06IHB3d24JW291dF06IHB3d24KKyAqIEJGQV9QT1JUX0FFTl9STElSOiAgICAgICBbaW5dOiBOb25lCVtvdXRdOiBwd3duLCBybGlyX2RhdGEsIHJsaXJfbGVuCisgKiBCRkFfUE9SVF9BRU5fU0ZQX0lOU0VSVDogW2luXTogcHd3bglbb3V0XTogcG9ydF9pZCwgcHd3bgorICogQkZBX1BPUlRfQUVOX1NGUF9SRU1PVkU6IFtpbl06IHB3d24JW291dF06IHBvcnRfaWQsIHB3d24KKyAqIEJGQV9QT1JUX0FFTl9TRlBfUE9NOiAgICBbaW5dOiBwd3duCVtvdXRdOiBsZXZlbCwgcG9ydF9pZCwgcHd3bgorICogQkZBX1BPUlRfQUVOX0VOQUJMRTogICAgIFtpbl06IHB3d24JW291dF06IHB3d24KKyAqIEJGQV9QT1JUX0FFTl9ESVNBQkxFOiAgICBbaW5dOiBwd3duCVtvdXRdOiBwd3duCisgKiBCRkFfUE9SVF9BRU5fQVVUSF9PTjogICAgW2luXTogcHd3bglbb3V0XTogcHd3bgorICogQkZBX1BPUlRfQUVOX0FVVEhfT0ZGOiAgIFtpbl06IHB3d24JW291dF06IHB3d24KKyAqIEJGQV9QT1JUX0FFTl9ESVNDT05ORUNUOiBbaW5dOiBwd3duCVtvdXRdOiBwd3duCisgKiBCRkFfUE9SVF9BRU5fUU9TX05FRzogICAgW2luXTogcHd3bglbb3V0XTogcHd3bgorICogQkZBX1BPUlRfQUVOX0ZBQlJJQ19OQU1FX0NIQU5HRTogW2luXTogcHd3biwgW291dF06IHB3d24sIGZ3d24KKyAqCisgKi8KK2VudW0gYmZhX3BvcnRfYWVuX2V2ZW50IHsKKwlCRkFfUE9SVF9BRU5fT05MSU5FICAgICA9IDEsCS8qICBQaHlzaWNhbCBQb3J0IG9ubGluZSBldmVudCAqLworCUJGQV9QT1JUX0FFTl9PRkZMSU5FICAgID0gMiwJLyogIFBoeXNpY2FsIFBvcnQgb2ZmbGluZSBldmVudCAqLworCUJGQV9QT1JUX0FFTl9STElSICAgICAgID0gMywJLyogIFJMSVIgZXZlbnQsIG5vdCBzdXBwb3J0ZWQgKi8KKwlCRkFfUE9SVF9BRU5fU0ZQX0lOU0VSVCA9IDQsCS8qICBTRlAgaW5zZXJ0ZWQgZXZlbnQgKi8KKwlCRkFfUE9SVF9BRU5fU0ZQX1JFTU9WRSA9IDUsCS8qICBTRlAgcmVtb3ZlZCBldmVudCAqLworCUJGQV9QT1JUX0FFTl9TRlBfUE9NICAgID0gNiwJLyogIFNGUCBQT00gZXZlbnQgKi8KKwlCRkFfUE9SVF9BRU5fRU5BQkxFICAgICA9IDcsCS8qICBQaHlzaWNhbCBQb3J0IGVuYWJsZSBldmVudCAqLworCUJGQV9QT1JUX0FFTl9ESVNBQkxFICAgID0gOCwJLyogIFBoeXNpY2FsIFBvcnQgZGlzYWJsZSBldmVudCAqLworCUJGQV9QT1JUX0FFTl9BVVRIX09OICAgID0gOSwJLyogIFBoeXNpY2FsIFBvcnQgYXV0aCBzdWNjZXNzIGV2ZW50ICovCisJQkZBX1BPUlRfQUVOX0FVVEhfT0ZGICAgPSAxMCwJLyogIFBoeXNpY2FsIFBvcnQgYXV0aCBmYWlsIGV2ZW50ICovCisJQkZBX1BPUlRfQUVOX0RJU0NPTk5FQ1QgPSAxMSwJLyogIFBoeXNpY2FsIFBvcnQgZGlzY29ubmVjdCBldmVudCAqLworCUJGQV9QT1JUX0FFTl9RT1NfTkVHICAgID0gMTIsICAJLyogIEJhc2UgUG9ydCBRT1MgbmVnb3RpYXRpb24gZXZlbnQgKi8KKwlCRkFfUE9SVF9BRU5fRkFCUklDX05BTUVfQ0hBTkdFID0gMTMsIC8qICBGYWJyaWMgTmFtZS9XV04gY2hhbmdlCisJCQkJCSAgICAgICAqIGV2ZW50ICovCisJQkZBX1BPUlRfQUVOX1NGUF9BQ0NFU1NfRVJST1IgPSAxNCwgLyogIFNGUCByZWFkIGVycm9yIGV2ZW50ICovCisJQkZBX1BPUlRfQUVOX1NGUF9VTlNVUFBPUlQgPSAxNSwgLyogIFVuc3VwcG9ydGVkIFNGUCBldmVudCAqLworfTsKKworZW51bSBiZmFfcG9ydF9hZW5fc2ZwX3BvbSB7CisJQkZBX1BPUlRfQUVOX1NGUF9QT01fR1JFRU4gPSAxLAkvKiAgTm9ybWFsICovCisJQkZBX1BPUlRfQUVOX1NGUF9QT01fQU1CRVIgPSAyLAkvKiAgV2FybmluZyAqLworCUJGQV9QT1JUX0FFTl9TRlBfUE9NX1JFRCAgID0gMywJLyogIENyaXRpY2FsICovCisJQkZBX1BPUlRfQUVOX1NGUF9QT01fTUFYICAgPSBCRkFfUE9SVF9BRU5fU0ZQX1BPTV9SRUQKK307CisKK3N0cnVjdCBiZmFfcG9ydF9hZW5fZGF0YV9zIHsKKwllbnVtIGJmYV9pb2NfdHlwZV9lIGlvY190eXBlOworCXd3bl90ICAgICAgICAgICBwd3duOwkgICAgICAvKiAgV1dOIG9mIHRoZSBwaHlzaWNhbCBwb3J0ICovCisJd3duX3QgICAgICAgICAgIGZ3d247CSAgICAgIC8qICBXV04gb2YgdGhlIGZhYnJpYyBwb3J0ICovCisJbWFjX3QgICAgICAgICAgIG1hYzsJICAgICAgLyogIE1BQyBhZGRyZXMgb2YgdGhlIGV0aGVybmV0IHBvcnQsCisJCQkJICAgICAgICogYXBwbGljYWJsZSB0byBDTkEgcG9ydCBvbmx5ICovCisJaW50ICAgICAgICAgICAgIHBoeV9wb3J0X251bTsgLyohIEZvciBTRlAgcmVsYXRlZCBldmVudHMgKi8KKwllbnVtIGJmYV9wb3J0X2Flbl9zZnBfcG9tIGxldmVsOyAvKiAgT25seSB0cmFuc2l0aW9ucyB3aWxsCisJCQkJCSAgKiBiZSBpbmZvcm1lZCAqLworfTsKKworI2VuZGlmIC8qIF9fQkZBX0RFRlNfUE9SVF9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX3Bwb3J0LmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19wcG9ydC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwMDBiYzQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19wcG9ydC5oCkBAIC0wLDAgKzEsMzgzIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX19CRkFfREVGU19QUE9SVF9IX18KKyNkZWZpbmUgX19CRkFfREVGU19QUE9SVF9IX18KKworI2luY2x1ZGUgPGJmYV9vc19pbmMuaD4KKyNpbmNsdWRlIDxwcm90b2NvbC9mYy5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfdHlwZXMuaD4KKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX3Fvcy5oPgorI2luY2x1ZGUgPGNuYS9wc3RhdHMvcGh5cG9ydF9kZWZzLmg+CisKKy8qIE1vZGlmeSBjaGFyKiBwb3J0X3N0dFtdIGluIGJmYWxfcG9ydC5jIGlmIGEgbmV3IHN0YXRlIHdhcyBhZGRlZCAqLworZW51bSBiZmFfcHBvcnRfc3RhdGVzIHsKKwlCRkFfUFBPUlRfU1RfVU5JTklUIAkJPSAxLAorCUJGQV9QUE9SVF9TVF9FTkFCTElOR19RV0FJVCAJPSAyLAorCUJGQV9QUE9SVF9TVF9FTkFCTElORyAJCT0gMywKKwlCRkFfUFBPUlRfU1RfTElOS0RPV04gCQk9IDQsCisJQkZBX1BQT1JUX1NUX0xJTktVUCAJCT0gNSwKKwlCRkFfUFBPUlRfU1RfRElTQUJMSU5HX1FXQUlUIAk9IDYsCisJQkZBX1BQT1JUX1NUX0RJU0FCTElORwkJPSA3LAorCUJGQV9QUE9SVF9TVF9ESVNBQkxFRCAJCT0gOCwKKwlCRkFfUFBPUlRfU1RfU1RPUFBFRCAJCT0gOSwKKwlCRkFfUFBPUlRfU1RfSU9DRE9XTiAJCT0gMTAsCisJQkZBX1BQT1JUX1NUX0lPQ0RJUyAJCT0gMTEsCisJQkZBX1BQT1JUX1NUX0ZXTUlTTUFUQ0gJCT0gMTIsCisJQkZBX1BQT1JUX1NUX01BWF9TVEFURSwKK307CisKKy8qKgorICogCVBvcnQgc3BlZWQgc2V0dGluZ3MuIEVhY2ggc3BlY2lmaWMgc3BlZWQgaXMgYSBiaXQgZmllbGQuIFVzZSBtdWx0aXBsZQorICogICAgICBiaXRzIHRvIHNwZWNpZnkgc3BlZWRzIHRvIGJlIHNlbGVjdGVkIGZvciBhdXRvLW5lZ290aWF0aW9uLgorICovCitlbnVtIGJmYV9wcG9ydF9zcGVlZCB7CisJQkZBX1BQT1JUX1NQRUVEX1VOS05PV04gPSAwLAorCUJGQV9QUE9SVF9TUEVFRF8xR0JQUyAJPSAxLAorCUJGQV9QUE9SVF9TUEVFRF8yR0JQUyAJPSAyLAorCUJGQV9QUE9SVF9TUEVFRF80R0JQUyAJPSA0LAorCUJGQV9QUE9SVF9TUEVFRF84R0JQUyAJPSA4LAorCUJGQV9QUE9SVF9TUEVFRF8xMEdCUFMgCT0gMTAsCisJQkZBX1BQT1JUX1NQRUVEX0FVVE8gPQorCQkoQkZBX1BQT1JUX1NQRUVEXzFHQlBTIHwgQkZBX1BQT1JUX1NQRUVEXzJHQlBTIHwKKwkJIEJGQV9QUE9SVF9TUEVFRF80R0JQUyB8IEJGQV9QUE9SVF9TUEVFRF84R0JQUyksCit9OworCisvKioKKyAqIAkJUG9ydCBvcGVyYXRpb25hbCB0eXBlIChpbiBzeW5jIHdpdGggU05JQSBwb3J0IHR5cGUpLgorICovCitlbnVtIGJmYV9wcG9ydF90eXBlIHsKKwlCRkFfUFBPUlRfVFlQRV9VTktOT1dOID0gMSwJLyogIHBvcnQgdHlwZSBpcyB1bmtvd24gKi8KKwlCRkFfUFBPUlRfVFlQRV9UUlVOS0VEID0gMiwJLyogIFRydW5rZWQgbW9kZSAqLworCUJGQV9QUE9SVF9UWVBFX05QT1JUICAgPSA1LAkvKiAgUDJQIHdpdGggc3dpdGNoZWQgZmFicmljICovCisJQkZBX1BQT1JUX1RZUEVfTkxQT1JUICA9IDYsCS8qICBwdWJsaWMgbG9vcCAqLworCUJGQV9QUE9SVF9UWVBFX0xQT1JUICAgPSAyMCwJLyogIHByaXZhdGUgbG9vcCAqLworCUJGQV9QUE9SVF9UWVBFX1AyUCAgICAgPSAyMSwJLyogIFAyUCB3aXRoIG5vIHN3aXRjaGVkIGZhYnJpYyAqLworCUJGQV9QUE9SVF9UWVBFX1ZQT1JUICAgPSAyMiwJLyogIE5QSVYgLSB2aXJ0dWFsIHBvcnQgKi8KK307CisKKy8qKgorICogCQlQb3J0IHRvcG9sb2d5IHNldHRpbmcuIEEgcG9ydCdzIHRvcG9sb2d5IGFuZCBmYWJyaWMgbG9naW4gc3RhdHVzCisgKiAJCWRldGVybWluZSBpdHMgb3BlcmF0aW9uYWwgdHlwZS4KKyAqLworZW51bSBiZmFfcHBvcnRfdG9wb2xvZ3kgeworCUJGQV9QUE9SVF9UT1BPTE9HWV9OT05FID0gMCwJLyogIE5vIHZhbGlkIHRvcG9sb2d5ICovCisJQkZBX1BQT1JUX1RPUE9MT0dZX1AyUCAgPSAxLAkvKiAgUDJQIG9ubHkgKi8KKwlCRkFfUFBPUlRfVE9QT0xPR1lfTE9PUCA9IDIsCS8qICBMT09QIHRvcG9sb2d5ICovCisJQkZBX1BQT1JUX1RPUE9MT0dZX0FVVE8gPSAzLAkvKiAgYXV0byB0b3BvbG9neSBzZWxlY3Rpb24gKi8KK307CisKKy8qKgorICogCQlQaHlzaWNhbCBwb3J0IGxvb3BiYWNrIHR5cGVzLgorICovCitlbnVtIGJmYV9wcG9ydF9vcG1vZGUgeworCUJGQV9QUE9SVF9PUE1PREVfTk9STUFMICAgPSAweDAwLCAvKiAgbm9ybWFsIG5vbi1sb29wYmFjayBtb2RlICovCisJQkZBX1BQT1JUX09QTU9ERV9MQl9JTlQgICA9IDB4MDEsIC8qICBpbnRlcm5hbCBsb29wIGJhY2sgKi8KKwlCRkFfUFBPUlRfT1BNT0RFX0xCX1NMVyAgID0gMHgwMiwgLyogIHNlcmlhbCBsaW5rIHdyYXBiYWNrIChzZXJkZXMpICovCisJQkZBX1BQT1JUX09QTU9ERV9MQl9FWFQgICA9IDB4MDQsIC8qICBleHRlcm5hbCBsb29wIGJhY2sgKHNlcmRlcykgKi8KKwlCRkFfUFBPUlRfT1BNT0RFX0xCX0NCTCAgID0gMHgwOCwgLyogIGNhYmxlZCBsb29wIGJhY2sgKi8KKwlCRkFfUFBPUlRfT1BNT0RFX0xCX05MSU5UID0gMHgyMCwgLyogIE5MX1BvcnQgaW50ZXJuYWwgbG9vcGJhY2sgKi8KK307CisKKyNkZWZpbmUgQkZBX1BQT1JUX09QTU9ERV9MQl9IQVJEKF9tb2RlKQkJCVwKKwkoKF9tb2RlID09IEJGQV9QUE9SVF9PUE1PREVfTEJfSU5UKSB8fAkJXAorICAgICAoX21vZGUgPT0gQkZBX1BQT1JUX09QTU9ERV9MQl9TTFcpIHx8CQlcCisgICAgIChfbW9kZSA9PSBCRkFfUFBPUlRfT1BNT0RFX0xCX0VYVCkpCisKKy8qKgorCQlQb3J0IFN0YXRlIChpbiBzeW5jIHdpdGggU05JQSBwb3J0IHN0YXRlKS4KKyAqLworZW51bSBiZmFfcHBvcnRfc25pYV9zdGF0ZSB7CisJQkZBX1BQT1JUX1NUQVRFX1VOS05PV04gID0gMSwJLyogIHBvcnQgaXMgbm90IGluaXRpYWxpemVkICovCisJQkZBX1BQT1JUX1NUQVRFX09OTElORSAgID0gMiwJLyogIHBvcnQgaXMgT05MSU5FICovCisJQkZBX1BQT1JUX1NUQVRFX0RJU0FCTEVEID0gMywJLyogIHBvcnQgaXMgZGlzYWJsZWQgYnkgdXNlciAqLworCUJGQV9QUE9SVF9TVEFURV9CWVBBU1NFRCA9IDQsCS8qICBwb3J0IGlzIGJ5cGFzc2VkIChpbiBMT09QKSAqLworCUJGQV9QUE9SVF9TVEFURV9ESUFHICAgICA9IDUsCS8qICBwb3J0IGRpYWdub3N0aWNzIGlzIGFjdGl2ZSAqLworCUJGQV9QUE9SVF9TVEFURV9MSU5LRE9XTiA9IDYsCS8qICBsaW5rIGlzIGRvd24gKi8KKwlCRkFfUFBPUlRfU1RBVEVfTE9PUEJBQ0sgPSA4LAkvKiAgcG9ydCBpcyBsb29wZWQgYmFjayAqLworfTsKKworLyoqCisgKiAJCVBvcnQgbGluayBzdGF0ZQorICovCitlbnVtIGJmYV9wcG9ydF9saW5rc3RhdGUgeworCUJGQV9QUE9SVF9MSU5LVVAgCSA9IDEsCS8qICBQaHlzaWNhbCBwb3J0L1RydW5rIGxpbmsgdXAgKi8KKwlCRkFfUFBPUlRfTElOS0RPV04gCSA9IDIsCS8qICBQaHlzaWNhbCBwb3J0L1RydW5rIGxpbmsgZG93biAqLworCUJGQV9QUE9SVF9UUlVOS19MSU5LRE9XTiA9IDMsCS8qICBUcnVuayBsaW5rIGRvd24gKG5ldyB0bWFzdGVyKSAqLworfTsKKworLyoqCisgKiAJCVBvcnQgbGluayBzdGF0ZSBldmVudAorICovCisjZGVmaW5lIGJmYV9wcG9ydF9ldmVudF90IGVudW0gYmZhX3Bwb3J0X2xpbmtzdGF0ZQorCisvKioKKyAqIAkJUG9ydCBsaW5rIHN0YXRlIHJlYXNvbiBjb2RlCisgKi8KK2VudW0gYmZhX3Bwb3J0X2xpbmtzdGF0ZV9yc24geworCUJGQV9QUE9SVF9MSU5LU1RBVEVfUlNOX05PTkUJCT0gMCwKKwlCRkFfUFBPUlRfTElOS1NUQVRFX1JTTl9ESVNBQkxFRCAJPSAxLAorCUJGQV9QUE9SVF9MSU5LU1RBVEVfUlNOX1JYX05PUyAJCT0gMiwKKwlCRkFfUFBPUlRfTElOS1NUQVRFX1JTTl9SWF9PTFMgCQk9IDMsCisJQkZBX1BQT1JUX0xJTktTVEFURV9SU05fUlhfTElQIAkJPSA0LAorCUJGQV9QUE9SVF9MSU5LU1RBVEVfUlNOX1JYX0xJUEY3IAk9IDUsCisJQkZBX1BQT1JUX0xJTktTVEFURV9SU05fU0ZQX1JFTU9WRUQgCT0gNiwKKwlCRkFfUFBPUlRfTElOS1NUQVRFX1JTTl9QT1JUX0ZBVUxUIAk9IDcsCisJQkZBX1BQT1JUX0xJTktTVEFURV9SU05fUlhfTE9TIAkJPSA4LAorCUJGQV9QUE9SVF9MSU5LU1RBVEVfUlNOX0xPQ0FMX0ZBVUxUIAk9IDksCisJQkZBX1BQT1JUX0xJTktTVEFURV9SU05fUkVNT1RFX0ZBVUxUIAk9IDEwLAorCUJGQV9QUE9SVF9MSU5LU1RBVEVfUlNOX1RJTUVPVVQgCT0gMTEsCisKKworCisJLyogQ0VFIHJlbGF0ZWQgcmVhc29uIGNvZGVzL2Vycm9ycyAqLworCUNFRV9MTERQX0lORk9fQUdFRF9PVVQgICAgICAgPSAyMCwKKwlDRUVfTExEUF9TSFVURE9XTl9UTFZfUkNWRCAgID0gMjEsCisJQ0VFX1BFRVJfTk9UX0FEVkVSVElTRV9EQ0JYICA9IDIyLAorCUNFRV9QRUVSX05PVF9BRFZFUlRJU0VfUEcgICAgPSAyMywKKwlDRUVfUEVFUl9OT1RfQURWRVJUSVNFX1BGQyAgID0gMjQsCisJQ0VFX1BFRVJfTk9UX0FEVkVSVElTRV9GQ09FICA9IDI1LAorCUNFRV9QR19OT1RfQ09NUEFUSUJMRSAgICAgICAgPSAyNiwKKwlDRUVfUEZDX05PVF9DT01QQVRJQkxFICAgICAgID0gMjcsCisJQ0VFX0ZDT0VfTk9UX0NPTVBBVElCTEUgICAgICA9IDI4LAorCUNFRV9CQURfUEdfUkNWRCAgICAgICAgICAgICAgPSAyOSwKKwlDRUVfQkFEX0JXX1JDVkQgICAgICAgICAgICAgID0gMzAsCisJQ0VFX0JBRF9QRkNfUkNWRCAgICAgICAgICAgICA9IDMxLAorCUNFRV9CQURfRkNPRV9QUklfUkNWRCAgICAgICAgPSAzMiwKKwlDRUVfRkNPRV9QUklfUEZDX09GRiAgICAgICAgID0gMzMsCisJQ0VFX0RVUF9DT05UUk9MX1RMVl9SQ1ZEICAgICA9IDM0LAorCUNFRV9EVVBfRkVBVF9UTFZfUkNWRCAgICAgICAgPSAzNSwKKwlDRUVfQVBQTFlfTkVXX0NGRyAgICAgICAgICAgID0gMzYsCS8qIHJlYXNvbiwgbm90IGFuIGVycm9yICovCisJQ0VFX1BST1RPQ09MX0lOSVQgICAgICAgICAgICA9IDM3LCAgLyogcmVhc29uLCBub3QgYW4gZXJyb3IgKi8KKwlDRUVfUEhZX0xJTktfRE9XTiAgICAgICAgICAgID0gMzgsCisJQ0VFX0xMU19GQ09FX0FCU0VOVCAgICAgICAgICA9IDM5LAorCUNFRV9MTFNfRkNPRV9ET1dOICAgICAgICAgICAgPSA0MAorfTsKKworLyoqCisgKiAgICAgIERlZmF1bHQgVGFyZ2V0IFJhdGUgTGltaXRpbmcgU3BlZWQuCisgKi8KKyNkZWZpbmUgQkZBX1BQT1JUX0RFRl9UUkxfU1BFRUQgIEJGQV9QUE9SVF9TUEVFRF8xR0JQUworCisvKioKKyAqICAgICAgUGh5c2ljYWwgcG9ydCBjb25maWd1cmF0aW9uCisgKi8KK3N0cnVjdCBiZmFfcHBvcnRfY2ZnX3MgeworCXU4ICAgICAgICAgdG9wb2xvZ3k7CS8qICBiZmFfcHBvcnRfdG9wb2xvZ3kJCSovCisJdTggICAgICAgICBzcGVlZDsJCS8qICBlbnVtIGJmYV9wcG9ydF9zcGVlZAkqLworCXU4ICAgICAgICAgdHJ1bmtlZDsJLyogIHRydW5rZWQgb3Igbm90CQkqLworCXU4ICAgICAgICAgcW9zX2VuYWJsZWQ7CS8qICBxb3MgZW5hYmxlZCBvciBub3QJCSovCisJdTggICAgICAgICB0cnVua19wb3J0czsJLyogIGJpdG1hcCBvZiB0cnVua2VkIHBvcnRzCSovCisJdTggICAgICAgICBjZmdfaGFyZGFscGE7CS8qICBpcyBoYXJkIGFscGEgY29uZmlndXJlZAkqLworCXUxNiAgICAgICAgbWF4ZnJzaXplOwkvKiAgbWF4aW11bSBmcmFtZSBzaXplCQkqLworCXU4ICAgICAgICAgaGFyZGFscGE7CS8qICBjb25maWd1cmVkIGhhcmQgYWxwYQkqLworCXU4ICAgICAgICAgcnhfYmJjcmVkaXQ7CS8qICByZWNlaXZlIGJ1ZmZlciBjcmVkaXRzCSovCisJdTggICAgICAgICB0eF9iYmNyZWRpdDsJLyogIHRyYW5zbWl0IGJ1ZmZlciBjcmVkaXRzCSovCisJdTggICAgICAgICByYXRlbGltaXQ7CS8qICByYXRlbGltaXQgZW5hYmxlZCBvciBub3QJKi8KKwl1OCAgICAgICAgIHRybF9kZWZfc3BlZWQ7CS8qICByYXRlbGltaXQgZGVmYXVsdCBzcGVlZAkqLworCXU4CQlyc3ZkWzNdOworCXUxNiAgIAlwYXRoX3RvdjsJLyogIGRldmljZSBwYXRoIHRpbWVvdXQJKi8KKwl1MTYgICAJcV9kZXB0aDsJLyogIFNDU0kgUXVldWUgZGVwdGgJCSovCit9OworCisvKioKKyAqIAkJUG9ydCBhdHRyaWJ1dGUgdmFsdWVzLgorICovCitzdHJ1Y3QgYmZhX3Bwb3J0X2F0dHJfcyB7CisJLyoKKwkgKiBTdGF0aWMgZmllbGRzCisJICovCisJd3duX3QgICAgICAgICAgIG53d247CQkvKiAgbm9kZSB3d24gKi8KKwl3d25fdCAgICAgICAgICAgcHd3bjsJCS8qICBwb3J0IHd3biAqLworCWVudW0gZmNfY29zICAgICBjb3Nfc3VwcG9ydGVkOwkvKiAgc3VwcG9ydGVkIGNsYXNzIG9mIHNlcnZpY2VzICovCisJdTMyICAgICAgICByc3ZkOworCXN0cnVjdCBmY19zeW1uYW1lX3MgICAgcG9ydF9zeW1uYW1lOwkvKiAgcG9ydCBzeW1ib2xpYyBuYW1lICovCisJZW51bSBiZmFfcHBvcnRfc3BlZWQgc3BlZWRfc3VwcG9ydGVkOyAvKiAgc3VwcG9ydGVkIHNwZWVkcyAqLworCWJmYV9ib29sZWFuX3QgICBwYmluZF9lbmFibGVkOwkvKiAgV2lsbCBiZSBzZXQgaWYgUGVyc2lzdGVudCBiaW5kaW5nCisJCQkJCSAqICAgZW5hYmxlZC4gUmVsZXZhbnQgb25seSBpbiBXaW5kb3dzCisJCQkJCSAqLworCisJLyoKKwkgKiBDb25maWd1cmVkIHZhbHVlcworCSAqLworCXN0cnVjdCBiZmFfcHBvcnRfY2ZnX3MgcHBvcnRfY2ZnOwkvKiAgcHBvcnQgY2ZnICovCisKKwkvKgorCSAqIER5bmFtaWMgZmllbGQgLSBpbmZvIGZyb20gQkZBCisJICovCisJZW51bSBiZmFfcHBvcnRfc3RhdGVzIAlwb3J0X3N0YXRlOwkvKiAgY3VycmVudCBwb3J0IHN0YXRlICovCisJZW51bSBiZmFfcHBvcnRfc3BlZWQgCXNwZWVkOwkJLyogIGN1cnJlbnQgc3BlZWQgKi8KKwllbnVtIGJmYV9wcG9ydF90b3BvbG9neSAJdG9wb2xvZ3k7CS8qICBjdXJyZW50IHRvcG9sb2d5ICovCisJYmZhX2Jvb2xlYW5fdAkJYmVhY29uOwkJLyogIGN1cnJlbnQgYmVhY29uIHN0YXR1cyAqLworCWJmYV9ib29sZWFuX3QJCWxpbmtfZTJlX2JlYWNvbjsvKiAgc2V0IGlmIGxpbmsgYmVhY29uIG9uICovCisJYmZhX2Jvb2xlYW5fdAkJcGxvZ19lbmFibGVkOwkvKiAgc2V0IGlmIHBvcnRsb2cgaXMgZW5hYmxlZCovCisKKwkvKgorCSAqIER5bmFtaWMgZmllbGQgLSBpbmZvIGZyb20gRkNTCisJICovCisJdTMyICAgICAgICAJcGlkOwkJLyogIHBvcnQgSUQgKi8KKwllbnVtIGJmYV9wcG9ydF90eXBlIAlwb3J0X3R5cGU7CS8qICBjdXJyZW50IHRvcG9sb2d5ICovCisJdTMyICAgICAgICAJbG9vcGJhY2s7CS8qICBleHRlcm5hbCBsb29wYmFjayAqLworCXUzMgkJcnN2ZDE7CisJdTMyCQlyc3ZkMjsJCS8qICBwYWRkaW5nIGZvciA2NCBiaXQgKi8KK307CisKKy8qKgorICogCQlGQyBQb3J0IHN0YXRpc3RpY3MuCisgKi8KK3N0cnVjdCBiZmFfcHBvcnRfZmNfc3RhdHNfcyB7CisJdTY0ICAgICAgICBzZWNzX3Jlc2V0OwkvKiAgc2Vjb25kcyBzaW5jZSBzdGF0cyBpcyByZXNldCAqLworCXU2NCAgICAgICAgdHhfZnJhbWVzOwkvKiAgdHJhbnNtaXR0ZWQgZnJhbWVzICovCisJdTY0ICAgICAgICB0eF93b3JkczsJLyogIHRyYW5zbWl0dGVkIHdvcmRzICovCisJdTY0ICAgICAgICByeF9mcmFtZXM7CS8qICByZWNlaXZlZCBmcmFtZXMgKi8KKwl1NjQgICAgICAgIHJ4X3dvcmRzOwkvKiAgcmVjZWl2ZWQgd29yZHMgKi8KKwl1NjQgICAgICAgIGxpcF9jb3VudDsJLyogIExJUHMgc2VlbiAqLworCXU2NCAgICAgICAgbm9zX2NvdW50OwkvKiAgTk9TIGNvdW50ICovCisJdTY0ICAgICAgICBlcnJvcl9mcmFtZXM7CS8qICBlcnJvcmVkIGZyYW1lcyAoc2VudD8pICovCisJdTY0ICAgICAgICBkcm9wcGVkX2ZyYW1lczsJLyogIGRyb3BwZWQgZnJhbWVzICovCisJdTY0ICAgICAgICBsaW5rX2ZhaWx1cmVzOwkvKiAgbGluayBmYWlsdXJlIGNvdW50ICovCisJdTY0ICAgICAgICBsb3NzX29mX3N5bmNzOwkvKiAgbG9zcyBvZiBzeW5jIGNvdW50ICovCisJdTY0ICAgICAgICBsb3NzX29mX3NpZ25hbHM7LyogIGxvc3Mgb2Ygc2lnbmFsIGNvdW50ICovCisJdTY0ICAgICAgICBwcmltc2VxX2VycnM7CS8qICBwcmltaXRpdmUgc2VxdWVuY2UgcHJvdG9jb2wgKi8KKwl1NjQgICAgICAgIGJhZF9vc19jb3VudDsJLyogIGludmFsaWQgb3JkZXJlZCBzZXQgKi8KKwl1NjQgICAgICAgIGVycl9lbmNfb3V0OwkvKiAgRW5jb2RpbmcgZXJyb3Igb3V0c2lkZSBmcmFtZSAqLworCXU2NCAgICAgICAgaW52YWxpZF9jcmNzOwkvKiAgZnJhbWVzIHJlY2VpdmVkIHdpdGggaW52YWxpZCBDUkMqLworCXU2NAl1bmRlcnNpemVkX2ZybTsgLyogIHVuZGVyc2l6ZWQgZnJhbWVzICovCisJdTY0CW92ZXJzaXplZF9mcm07CS8qICBvdmVyc2l6ZWQgZnJhbWVzICovCisJdTY0CWJhZF9lb2ZfZnJtOwkvKiAgZnJhbWVzIHdpdGggYmFkIEVPRiAqLworCXN0cnVjdCBiZmFfcW9zX3N0YXRzX3MJcW9zX3N0YXRzOwkvKiAgUW9TIHN0YXRpc3RpY3MgKi8KK307CisKKy8qKgorICogCQlFdGggUG9ydCBzdGF0aXN0aWNzLgorICovCitzdHJ1Y3QgYmZhX3Bwb3J0X2V0aF9zdGF0c19zIHsKKwl1NjQJc2Vjc19yZXNldDsJLyogIHNlY29uZHMgc2luY2Ugc3RhdHMgaXMgcmVzZXQgKi8KKwl1NjQJZnJhbWVfNjQ7ICAgICAgLyogIGJvdGggcnggYW5kIHR4IGNvdW50ZXIgKi8KKwl1NjQJZnJhbWVfNjVfMTI3OyAgICAgIC8qIGJvdGggcnggYW5kIHR4IGNvdW50ZXIgKi8KKwl1NjQJZnJhbWVfMTI4XzI1NTsgICAgIC8qIGJvdGggcnggYW5kIHR4IGNvdW50ZXIgKi8KKwl1NjQJZnJhbWVfMjU2XzUxMTsgICAgIC8qIGJvdGggcnggYW5kIHR4IGNvdW50ZXIgKi8KKwl1NjQJZnJhbWVfNTEyXzEwMjM7ICAgIC8qIGJvdGggcnggYW5kIHR4IGNvdW50ZXIgKi8KKwl1NjQJZnJhbWVfMTAyNF8xNTE4OyAgIC8qIGJvdGggcnggYW5kIHR4IGNvdW50ZXIgKi8KKwl1NjQJZnJhbWVfMTUxOV8xNTIyOyAgIC8qIGJvdGggcnggYW5kIHR4IGNvdW50ZXIgKi8KKworCXU2NAl0eF9ieXRlczsKKwl1NjQJdHhfcGFja2V0czsKKwl1NjQJdHhfbWNhc3RfcGFja2V0czsKKwl1NjQJdHhfYmNhc3RfcGFja2V0czsKKwl1NjQJdHhfY29udHJvbF9mcmFtZTsKKwl1NjQJdHhfZHJvcDsKKwl1NjQJdHhfamFiYmVyOworCXU2NAl0eF9mY3NfZXJyb3I7CisJdTY0CXR4X2ZyYWdtZW50czsKKworCXU2NAlyeF9ieXRlczsKKwl1NjQJcnhfcGFja2V0czsKKwl1NjQJcnhfbWNhc3RfcGFja2V0czsKKwl1NjQJcnhfYmNhc3RfcGFja2V0czsKKwl1NjQJcnhfY29udHJvbF9mcmFtZXM7CisJdTY0CXJ4X3Vua25vd25fb3Bjb2RlOworCXU2NAlyeF9kcm9wOworCXU2NAlyeF9qYWJiZXI7CisJdTY0CXJ4X2Zjc19lcnJvcjsKKwl1NjQJcnhfYWxpZ25tZW50X2Vycm9yOworCXU2NAlyeF9mcmFtZV9sZW5ndGhfZXJyb3I7CisJdTY0CXJ4X2NvZGVfZXJyb3I7CisJdTY0CXJ4X2ZyYWdtZW50czsKKworCXU2NAlyeF9wYXVzZTsgLyogQlBDICovCisJdTY0CXJ4X3plcm9fcGF1c2U7IC8qICBCUEMgUGF1c2UgY2FuY2VsbGF0aW9uICovCisJdTY0CXR4X3BhdXNlOyAgICAgIC8qIEJQQyAqLworCXU2NAl0eF96ZXJvX3BhdXNlOyAvKiAgQlBDIFBhdXNlIGNhbmNlbGxhdGlvbiAqLworCXU2NAlyeF9mY29lX3BhdXNlOyAvKiBCUEMgKi8KKwl1NjQJcnhfZmNvZV96ZXJvX3BhdXNlOyAvKiAgQlBDIFBhdXNlIGNhbmNlbGxhdGlvbiAqLworCXU2NAl0eF9mY29lX3BhdXNlOyAgICAgIC8qIEJQQyAqLworCXU2NAl0eF9mY29lX3plcm9fcGF1c2U7IC8qICBCUEMgUGF1c2UgY2FuY2VsbGF0aW9uICovCit9OworCisvKioKKyAqIAkJUG9ydCBzdGF0aXN0aWNzLgorICovCit1bmlvbiBiZmFfcHBvcnRfc3RhdHNfdSB7CisJc3RydWN0IGJmYV9wcG9ydF9mY19zdGF0c19zCWZjOworCXN0cnVjdCBiZmFfcHBvcnRfZXRoX3N0YXRzX3MgCWV0aDsKK307CisKKy8qKgorICogICAgICAgICAgICAgIFBvcnQgRkNQIG1hcHBpbmdzLgorICovCitzdHJ1Y3QgYmZhX3Bwb3J0X2ZjcG1hcF9zIHsKKwljaGFyCQlvc2Rldm5hbWVbMjU2XTsKKwl1MzIJYnVzOworCXUzMiAgICAgICAgdGFyZ2V0OworCXUzMiAgICAgICAgb3NsdW47CisJdTMyICAgICAgICBmY2lkOworCXd3bl90ICAgICAgICAgICBud3duOworCXd3bl90ICAgICAgICAgICBwd3duOworCXU2NCAgICAgICAgZmNwbHVuOworCWNoYXIJCWx1aWRbMjU2XTsKK307CisKKy8qKgorICogICAgICAgICAgICAgIFBvcnQgUk5JRCBpbmZvLgorICovCitzdHJ1Y3QgYmZhX3Bwb3J0X3JuaWRfcyB7CisJd3duX3QgICAgICAgICAgICAgd3duOworCXUzMiAgICAgICAgICB1bml0dHlwZTsKKwl1MzIgICAgICAgICAgcG9ydGlkOworCXUzMiAgICAgICAgICBhdHRhY2hlZF9ub2Rlc19udW07CisJdTE2ICAgICAgICAgIGlwX3ZlcnNpb247CisJdTE2ICAgICAgICAgIHVkcF9wb3J0OworCXU4ICAgICAgICAgICBpcGFkZHJbMTZdOworCXUxNiAgICAgICAgICByc3ZkOworCXUxNiAgICAgICAgICB0b3BvbG9neWRpc2NvdmVyeWZsYWdzOworfTsKKworLyoqCisgKiAJCUxpbmsgc3RhdGUgaW5mb3JtYXRpb24KKyAqLworc3RydWN0IGJmYV9wcG9ydF9saW5rX3MgeworCXU4ICAgICAgICAgbGlua3N0YXRlOwkvKiAgTGluayBzdGF0ZSBiZmFfcHBvcnRfbGlua3N0YXRlICovCisJdTggICAgICAgICBsaW5rc3RhdGVfcnNuOwkvKiAgYmZhX3Bwb3J0X2xpbmtzdGF0ZV9yc25fdCAqLworCXU4ICAgICAgICAgdG9wb2xvZ3k7CS8qICBQMlAvTE9PUCBiZmFfcHBvcnRfdG9wb2xvZ3kgKi8KKwl1OCAgICAgICAgIHNwZWVkOwkJLyogIExpbmsgc3BlZWQgKDEvMi80LzggRykgKi8KKwl1MzIgICAgICAgIGxpbmtzdGF0ZV9vcHQ7CS8qICBMaW5rc3RhdGUgb3B0aW9uYWwgZGF0YSAoZGVidWcpICovCisJdTggICAgICAgICB0cnVua2VkOwkvKiAgVHJ1bmtlZCBvciBub3QgKDEgb3IgMCkgKi8KKwl1OCAgICAgICAgIHJlc3ZkWzNdOworCXN0cnVjdCBiZmFfcW9zX2F0dHJfcyAgcW9zX2F0dHI7ICAgLyogUW9TIEF0dHJpYnV0ZXMgKi8KKwlzdHJ1Y3QgYmZhX3Fvc192Y19hdHRyX3MgcW9zX3ZjX2F0dHI7ICAvKiAgVkMgaW5mbyBmcm9tIEVMUCAqLworCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCXU4ICAgICAgICAgdG1hc3RlcjsvKiAgVHJ1bmsgTWFzdGVyIG9yCisJCQkJCQkgKiAgICBub3QgKDEgb3IgMCkgKi8KKwkJCXU4ICAgICAgICAgdGxpbmtzOwkvKiAgVHJ1bmsgbGlua3MgYml0bWFwCisJCQkJCQkgKiAgICAobGlua3VwKSAqLworCQkJdTggICAgICAgICByZXN2MTsJLyogIFJlc2VydmVkICovCisJCX0gdHJ1bmtfaW5mbzsKKworCQlzdHJ1Y3QgeworCQkJdTggICAgICAgICBteWFscGE7CSAgIC8qICBhbHBhIGNsYWltZWQgKi8KKwkJCXU4ICAgICAgICAgbG9naW5fcmVxOyAvKiAgTG9naW4gcmVxdWlyZWQgb3IKKwkJCQkJCSAgICAqICAgIG5vdCAoMSBvciAwKSAqLworCQkJdTggICAgICAgICBhbHBhYm1fdmFsOy8qICBhbHBhIGJpdG1hcCB2YWxpZAorCQkJCQkJICAgICogICAgb3Igbm90ICgxIG9yIDApICovCisJCQlzdHJ1Y3QgZmNfYWxwYWJtX3MgICAgIGFscGFibTsJICAgLyogIGFscGEgYml0bWFwICovCisJCX0gbG9vcF9pbmZvOworCX0gdGw7Cit9OworCisjZW5kaWYgLyogX19CRkFfREVGU19QUE9SVF9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX3Fvcy5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfcW9zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWFkYmFjZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX3Fvcy5oCkBAIC0wLDAgKzEsOTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0JGQV9ERUZTX1FPU19IX18KKyNkZWZpbmUgX19CRkFfREVGU19RT1NfSF9fCisKKy8qKgorICogUW9TIHN0YXRlcworICovCitlbnVtIGJmYV9xb3Nfc3RhdGUgeworCUJGQV9RT1NfT05MSU5FID0gMSwJCS8qICBRb1MgaXMgb25saW5lICovCisJQkZBX1FPU19PRkZMSU5FID0gMiwJCS8qICBRb1MgaXMgb2ZmbGluZSAqLworfTsKKworCisvKioKKyAqIFFvUyAgUHJpb3JpdHkgbGV2ZWxzLgorICovCitlbnVtIGJmYV9xb3NfcHJpb3JpdHkgeworCUJGQV9RT1NfVU5LTk9XTiA9IDAsCisJQkZBX1FPU19ISUdIICA9IDEsCS8qICBRb1MgUHJpb3JpdHkgTGV2ZWwgSGlnaCAqLworCUJGQV9RT1NfTUVEICA9ICAyLAkvKiAgUW9TIFByaW9yaXR5IExldmVsIE1lZGl1bSAqLworCUJGQV9RT1NfTE9XICA9ICAzLAkvKiAgUW9TIFByaW9yaXR5IExldmVsIExvdyAqLworfTsKKworCisvKioKKyAqIFFvUyAgYmFuZHdpZHRoIGFsbG9jYXRpb24gZm9yIGVhY2ggcHJpb3JpdHkgbGV2ZWwKKyAqLworZW51bSBiZmFfcW9zX2J3X2FsbG9jIHsKKwlCRkFfUU9TX0JXX0hJR0ggID0gNjAsCS8qICBiYW5kd2lkdGggYWxsb2NhdGlvbiBmb3IgSGlnaCAqLworCUJGQV9RT1NfQldfTUVEICA9ICAzMCwJLyogIGJhbmR3aWR0aCBhbGxvY2F0aW9uIGZvciBNZWRpdW0gKi8KKwlCRkFfUU9TX0JXX0xPVyAgPSAgMTAsCS8qICBiYW5kd2lkdGggYWxsb2NhdGlvbiBmb3IgTG93ICovCit9OworCisvKioKKyAqIFFvUyBhdHRyaWJ1dGUgcmV0dXJuZWQgaW4gUW9TIFF1ZXJ5CisgKi8KK3N0cnVjdCBiZmFfcW9zX2F0dHJfcyB7CisJZW51bSBiZmFfcW9zX3N0YXRlIHN0YXRlOwkJLyogIFFvUyBjdXJyZW50IHN0YXRlICovCisJdTMyICB0b3RhbF9iYl9jcjsgIAkgCS8qICBUb3RhbCBCQiBDcmVkaXRzICovCit9OworCisvKioKKyAqIFRoZXNlIGZpZWxkcyBzaG91bGQgYmUgZGlzcGxheWVkIG9ubHkgZnJvbSB0aGUgQ0xJLgorICogVGhlcmUgd2lsbCBiZSBhIHNlcGFyYXRlIEJGQUwgQVBJIChnZXRfcW9zX3ZjX2F0dHIgPykKKyAqIHRvIHJldHJpZXZlIHRoaXMuCisgKgorICovCisjZGVmaW5lICBCRkFfUU9TX01BWF9WQyAgMTYKKworc3RydWN0IGJmYV9xb3NfdmNfaW5mb19zIHsKKwl1OCB2Y19jcmVkaXQ7CisJdTggYm9ycm93X2NyZWRpdDsKKwl1OCBwcmlvcml0eTsKKwl1OCByZXN2ZDsKK307CisKK3N0cnVjdCBiZmFfcW9zX3ZjX2F0dHJfcyB7CisJdTE2ICB0b3RhbF92Y19jb3VudDsgICAgICAgICAgICAgICAgICAgIC8qICBUb3RhbCBWQyBDb3VudCAqLworCXUxNiAgc2hhcmVkX2NyZWRpdDsKKwl1MzIgIGVscF9vcG1vZGVfZmxhZ3M7CisJc3RydWN0IGJmYV9xb3NfdmNfaW5mb19zIHZjX2luZm9bQkZBX1FPU19NQVhfVkNdOyAgLyogICBhcyBtYW55IGFzCisJCQkJCQkJICAgICogdG90YWxfdmNfY291bnQgKi8KK307CisKKy8qKgorICogUW9TIHN0YXRpc3RpY3MKKyAqLworc3RydWN0IGJmYV9xb3Nfc3RhdHNfcyB7CisJdTMyCWZsb2dpX3NlbnQ7IAkJLyogIFFvUyBGbG9naSBzZW50ICovCisJdTMyCWZsb2dpX2FjY19yZWN2ZDsJLyogIFFvUyBGbG9naSBBY2MgcmVjZWl2ZWQgKi8KKwl1MzIJZmxvZ2lfcmp0X3JlY3ZkOyAvKiAgUW9TIEZsb2dpIHJlamVjdHMgcmVjZWl2ZWQgKi8KKwl1MzIJZmxvZ2lfcmV0cmllczsJCS8qICBRb1MgRmxvZ2kgcmV0cmllcyAqLworCisJdTMyCWVscF9yZWN2ZDsgCSAgIAkvKiAgUW9TIEVMUCByZWNlaXZlZCAqLworCXUzMgllbHBfYWNjZXB0ZWQ7ICAgICAgIC8qICBRb1MgRUxQIEFjY2VwdGVkICovCisJdTMyCWVscF9yZWplY3RlZDsgICAgICAgLyogIFFvUyBFTFAgcmVqZWN0ZWQgKi8KKwl1MzIJZWxwX2Ryb3BwZWQ7ICAgICAgICAvKiAgUW9TIEVMUCBkcm9wcGVkICAqLworCisJdTMyCXFvc19yc2NuX3JlY3ZkOyAgICAgLyogIFFvUyBSU0NOIHJlY2VpdmVkICovCisJdTMyCXJzdmQ7IAkJLyogcGFkZGluZyBmb3IgNjQgYml0IGFsaWdubWVudCAqLworfTsKKworI2VuZGlmIC8qIF9fQkZBX0RFRlNfUU9TX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfcnBvcnQuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX3Jwb3J0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTBhZjU5ZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX3Jwb3J0LmgKQEAgLTAsMCArMSwxOTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0JGQV9ERUZTX1JQT1JUX0hfXworI2RlZmluZSBfX0JGQV9ERUZTX1JQT1JUX0hfXworCisjaW5jbHVkZSA8YmZhX29zX2luYy5oPgorI2luY2x1ZGUgPHByb3RvY29sL3R5cGVzLmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc19wcG9ydC5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfcG9ydC5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfcW9zLmg+CisKKy8qKgorICogRkNTIHJlbW90ZSBwb3J0IHN0YXRlcworICovCitlbnVtIGJmYV9ycG9ydF9zdGF0ZSB7CisJQkZBX1JQT1JUX1VOSU5JVCAJPSAwLAkvKiAgUE9SVCBpcyBub3QgeWV0IGluaXRpYWxpemVkICovCisJQkZBX1JQT1JUX09GRkxJTkUgCT0gMSwJLyogIHJwb3J0IGlzIG9mZmxpbmUgKi8KKwlCRkFfUlBPUlRfUExPR0kgCT0gMiwJLyogIFBMT0dJIHRvIHJwb3J0IGlzIGluIHByb2dyZXNzICovCisJQkZBX1JQT1JUX09OTElORSAJPSAzLAkvKiAgbG9naW4gdG8gcnBvcnQgaXMgY29tcGxldGUgKi8KKwlCRkFfUlBPUlRfUExPR0lfUkVUUlkgCT0gNCwJLyogIHJldHJ5aW5nIGxvZ2luIHRvIHJwb3J0ICovCisJQkZBX1JQT1JUX05TUVVFUlkgCT0gNSwJLyogIG5hbWVzZXJ2ZXIgcXVlcnkgKi8KKwlCRkFfUlBPUlRfQURJU0MgCT0gNiwJLyogIEFESVNDIGF1dGhlbnRpY2F0aW9uICovCisJQkZBX1JQT1JUX0xPR08gCQk9IDcsCS8qICBsb2dnaW5nIG91dCB3aXRoIHJwb3J0ICovCisJQkZBX1JQT1JUX0xPR09SQ1YgCT0gOCwJLyogIGhhbmRsaW5nIExPR08gZnJvbSBycG9ydCAqLworCUJGQV9SUE9SVF9OU0RJU0MgCT0gOSwJLyogIHJlLWRpc2NvdmVyIHJwb3J0ICovCit9OworCisvKioKKyAqICBScG9ydCBTY3NpIEZ1bmN0aW9uIDogSW5pdGlhdG9yL1RhcmdldC4KKyAqLworZW51bSBiZmFfcnBvcnRfZnVuY3Rpb24geworCUJGQV9SUE9SVF9JTklUSUFUT1IgCT0gMHgwMSwJLyogIFNDU0kgSW5pdGlhdG9yCSovCisJQkZBX1JQT1JUX1RBUkdFVCAJPSAweDAyLAkvKiAgU0NTSSBUYXJnZXQJKi8KK307CisKKy8qKgorICogcG9ydC9ub2RlIHN5bWJvbGljIG5hbWVzIGZvciBycG9ydAorICovCisjZGVmaW5lIEJGQV9SUE9SVF9TWU1OQU1FX01BWExFTgkyNTUKK3N0cnVjdCBiZmFfcnBvcnRfc3ltbmFtZV9zIHsKKwljaGFyICAgICAgICAgICAgc3ltbmFtZVtCRkFfUlBPUlRfU1lNTkFNRV9NQVhMRU5dOworfTsKKworc3RydWN0IGJmYV9ycG9ydF9oYWxfc3RhdHNfcyB7CisJdTMyICAgICAgICBzbV91bl9jcjsJICAgIC8qICB1bmluaXQ6IGNyZWF0ZSBldmVudHMgICAgICAqLworCXUzMiAgICAgICAgc21fdW5fdW5leHA7CSAgICAvKiAgdW5pbml0OiBleGNlcHRpb24gZXZlbnRzICAgKi8KKwl1MzIgICAgICAgIHNtX2NyX29uOwkgICAgLyogIGNyZWF0ZWQ6IG9ubGluZSBldmVudHMgICAgICovCisJdTMyICAgICAgICBzbV9jcl9kZWw7CSAgICAvKiAgY3JlYXRlZDogZGVsZXRlIGV2ZW50cyAgICAgKi8KKwl1MzIgICAgICAgIHNtX2NyX2h3ZjsJICAgIC8qICBjcmVhdGVkOiBJT0MgZG93biAgICAgICAgICAqLworCXUzMiAgICAgICAgc21fY3JfdW5leHA7CSAgICAvKiAgY3JlYXRlZDogZXhjZXB0aW9uIGV2ZW50cyAgKi8KKwl1MzIgICAgICAgIHNtX2Z3Y19yc3A7CSAgICAvKiAgZncgY3JlYXRlOiBmL3cgcmVzcG9uc2VzICAgKi8KKwl1MzIgICAgICAgIHNtX2Z3Y19kZWw7CSAgICAvKiAgZncgY3JlYXRlOiBkZWxldGUgZXZlbnRzICAgKi8KKwl1MzIgICAgICAgIHNtX2Z3Y19vZmY7CSAgICAvKiAgZncgY3JlYXRlOiBvZmZsaW5lIGV2ZW50cyAgKi8KKwl1MzIgICAgICAgIHNtX2Z3Y19od2Y7CSAgICAvKiAgZncgY3JlYXRlOiBJT0MgZG93biAgICAgICAgKi8KKwl1MzIgICAgICAgIHNtX2Z3Y191bmV4cDsJICAgIC8qICBmdyBjcmVhdGU6IGV4Y2VwdGlvbiBldmVudHMqLworCXUzMiAgICAgICAgc21fb25fb2ZmOwkgICAgLyogIG9ubGluZTogb2ZmbGluZSBldmVudHMgICAgICovCisJdTMyICAgICAgICBzbV9vbl9kZWw7CSAgICAvKiAgb25saW5lOiBkZWxldGUgZXZlbnRzICAgICAgKi8KKwl1MzIgICAgICAgIHNtX29uX2h3ZjsJICAgIC8qICBvbmxpbmU6IElPQyBkb3duIGV2ZW50cyAgICAqLworCXUzMiAgICAgICAgc21fb25fdW5leHA7CSAgICAvKiAgb25saW5lOiBleGNlcHRpb24gZXZlbnRzICAgKi8KKwl1MzIgICAgICAgIHNtX2Z3ZF9yc3A7CSAgICAvKiAgZncgZGVsZXRlOiBmdyByZXNwb25zZXMgICAgKi8KKwl1MzIgICAgICAgIHNtX2Z3ZF9kZWw7CSAgICAvKiAgZncgZGVsZXRlOiBkZWxldGUgZXZlbnRzICAgKi8KKwl1MzIgICAgICAgIHNtX2Z3ZF9od2Y7CSAgICAvKiAgZncgZGVsZXRlOiBJT0MgZG93biBldmVudHMgKi8KKwl1MzIgICAgICAgIHNtX2Z3ZF91bmV4cDsJICAgIC8qICBmdyBkZWxldGU6IGV4Y2VwdGlvbiBldmVudHMqLworCXUzMiAgICAgICAgc21fb2ZmX2RlbDsJICAgIC8qICBvZmZsaW5lOiBkZWxldGUgZXZlbnRzICAgICAqLworCXUzMiAgICAgICAgc21fb2ZmX29uOwkgICAgLyogIG9mZmxpbmU6IG9ubGluZSBldmVudHMgICAgICovCisJdTMyICAgICAgICBzbV9vZmZfaHdmOwkgICAgLyogIG9mZmxpbmU6IElPQyBkb3duIGV2ZW50cyAgICovCisJdTMyICAgICAgICBzbV9vZmZfdW5leHA7CSAgICAvKiAgb2ZmbGluZTogZXhjZXB0aW9uIGV2ZW50cyAgKi8KKwl1MzIgICAgICAgIHNtX2RlbF9md3JzcDsJICAgIC8qICBkZWxldGU6IGZ3IHJlc3BvbnNlcyAgICAgICAqLworCXUzMiAgICAgICAgc21fZGVsX2h3ZjsJICAgIC8qICBkZWxldGU6IElPQyBkb3duIGV2ZW50cyAgICAqLworCXUzMiAgICAgICAgc21fZGVsX3VuZXhwOwkgICAgLyogIGRlbGV0ZTogZXhjZXB0aW9uIGV2ZW50cyAgICovCisJdTMyICAgICAgICBzbV9kZWxwX2Z3cnNwOwkgICAgLyogIGRlbGV0ZSBwZW5kOiBmdyByZXNwb25zZXMgICovCisJdTMyICAgICAgICBzbV9kZWxwX2h3ZjsJICAgIC8qICBkZWxldGUgcGVuZDogSU9DIGRvd25zICAgICAqLworCXUzMiAgICAgICAgc21fZGVscF91bmV4cDsJICAgIC8qICBkZWxldGUgcGVuZDogZXhjZXB0aW9ucyAgICAqLworCXUzMiAgICAgICAgc21fb2ZmcF9md3JzcDsJICAgIC8qICBvZmYtcGVuZGluZzogZncgcmVzcG9uc2VzICAqLworCXUzMiAgICAgICAgc21fb2ZmcF9kZWw7CSAgICAvKiAgb2ZmLXBlbmRpbmc6IGRlbGV0ZXMgICAgICAgKi8KKwl1MzIgICAgICAgIHNtX29mZnBfaHdmOwkgICAgLyogIG9mZi1wZW5kaW5nOiBJT0MgZG93bnMgICAgICovCisJdTMyICAgICAgICBzbV9vZmZwX3VuZXhwOwkgICAgLyogIG9mZi1wZW5kaW5nOiBleGNlcHRpb25zICAgICovCisJdTMyICAgICAgICBzbV9pb2NkX29mZjsJICAgIC8qICBJT0MgZG93bjogb2ZmbGluZSBldmVudHMgICAqLworCXUzMiAgICAgICAgc21faW9jZF9kZWw7CSAgICAvKiAgSU9DIGRvd246IGRlbGV0ZSBldmVudHMgICAgKi8KKwl1MzIgICAgICAgIHNtX2lvY2Rfb247CSAgICAvKiAgSU9DIGRvd246IG9ubGluZSBldmVudHMgICAgKi8KKwl1MzIgICAgICAgIHNtX2lvY2RfdW5leHA7CSAgICAvKiAgSU9DIGRvd246IGV4Y2VwdGlvbnMgICAgICAgKi8KKwl1MzIgICAgICAgIHJzdmQ7Cit9OworCisvKioKKyAqIEZDUyByZW1vdGUgcG9ydCBzdGF0aXN0aWNzCisgKi8KK3N0cnVjdCBiZmFfcnBvcnRfc3RhdHNfcyB7CisJdTMyICAgICAgICBvZmZsaW5lczsgICAgICAgICAgIC8qICByZW1vdGUgcG9ydCBvZmZsaW5lIGNvdW50ICAqLworCXUzMiAgICAgICAgb25saW5lczsgICAgICAgICAgICAvKiAgcmVtb3RlIHBvcnQgb25saW5lIGNvdW50ICAgKi8KKwl1MzIgICAgICAgIHJzY25zOyAgICAgICAgICAgICAgLyogIFJTQ04gYWZmZWN0aW5nIHJwb3J0ICAgICAgICovCisJdTMyICAgICAgICBwbG9naXM7CQkgICAgLyogIHBsb2dpcyBzZW50ICAgICAgICAgICAgICAgICovCisJdTMyICAgICAgICBwbG9naV9hY2NzOwkgICAgLyogIHBsb2dpIGFjY2VwdHMgICAgICAgICAgICAgICovCisJdTMyICAgICAgICBwbG9naV90aW1lb3V0czsJICAgIC8qICBwbG9naSB0aW1lb3V0cyAgICAgICAgICAgICAqLworCXUzMiAgICAgICAgcGxvZ2lfcmVqZWN0czsJICAgIC8qICByY3ZkIHBsb2dpIHJlamVjdHMgICAgICAgICAqLworCXUzMiAgICAgICAgcGxvZ2lfZmFpbGVkOwkgICAgLyogIGxvY2FsIGZhaWx1cmUgICAgICAgICAgICAgICovCisJdTMyICAgICAgICBwbG9naV9yY3ZkOwkgICAgLyogIHBsb2dpcyByY3ZkICAgICAgICAgICAgICAgICovCisJdTMyICAgICAgICBwcmxpX3JjdmQ7ICAgICAgICAgIC8qICBpbmJvdW5kIFBSTElzICAgICAgICAgICAgICAqLworCXUzMiAgICAgICAgYWRpc2NfcmN2ZDsgICAgICAgICAvKiAgQURJU0NzIHJlY2VpdmVkICAgICAgICAgICAgKi8KKwl1MzIgICAgICAgIGFkaXNjX3JlamVjdHM7ICAgICAgLyogIHJlY3ZkICBBRElTQyByZWplY3RzICAgICAgICovCisJdTMyICAgICAgICBhZGlzY19zZW50OyAgICAgICAgIC8qICBBRElTQyByZXF1ZXN0cyBzZW50ICAgICAgICAqLworCXUzMiAgICAgICAgYWRpc2NfYWNjczsgICAgICAgICAvKiAgQURJU0MgYWNjZXB0ZWQgYnkgcnBvcnQgICAgKi8KKwl1MzIgICAgICAgIGFkaXNjX2ZhaWxlZDsgICAgICAgLyogIEFESVNDIGZhaWxlZCAobm8gcmVzcG9uc2UpICovCisJdTMyICAgICAgICBhZGlzY19yZWplY3RlZDsgICAgIC8qICBBRElTQyByZWplY3RlZCBieSB1cyAgICAqLworCXUzMiAgICAgICAgbG9nb3M7ICAgICAgICAgICAgICAvKiAgbG9nb3Mgc2VudCAgICAgICAgICAgICAgICAgKi8KKwl1MzIgICAgICAgIGxvZ29fYWNjczsgICAgICAgICAgLyogIExPR08gYWNjZXB0cyBmcm9tIHJwb3J0ICAgICovCisJdTMyICAgICAgICBsb2dvX2ZhaWxlZDsgICAgICAgIC8qICBMT0dPIGZhaWx1cmVzICAgICAgICAgICAgICAqLworCXUzMiAgICAgICAgbG9nb19yZWplY3RlZDsgICAgICAvKiAgTE9HTyByZWplY3RzIGZyb20gcnBvcnQgICAgKi8KKwl1MzIgICAgICAgIGxvZ29fcmN2ZDsgICAgICAgICAgLyogIExPR08gZnJvbSByZW1vdGUgcG9ydCAgICAgICovCisKKwl1MzIgICAgICAgIHJwc2NfcmN2ZDsgICAgICAgICAvKiAgUlBTQyByZWNlaXZlZCAgICAgICAgICAgICovCisJdTMyICAgICAgICBycHNjX3JlamVjdHM7ICAgICAgLyogIHJlY3ZkICBSUFNDIHJlamVjdHMgICAgICAgKi8KKwl1MzIgICAgICAgIHJwc2Nfc2VudDsgICAgICAgICAvKiAgUlBTQyByZXF1ZXN0cyBzZW50ICAgICAgICAqLworCXUzMiAgICAgICAgcnBzY19hY2NzOyAgICAgICAgIC8qICBSUFNDIGFjY2VwdGVkIGJ5IHJwb3J0ICAgICovCisJdTMyICAgICAgICBycHNjX2ZhaWxlZDsgICAgICAgLyogIFJQU0MgZmFpbGVkIChubyByZXNwb25zZSkgKi8KKwl1MzIgICAgICAgIHJwc2NfcmVqZWN0ZWQ7ICAgICAvKiAgUlBTQyByZWplY3RlZCBieSB1cyAgICAqLworCisJdTMyICAgICAgICByc3ZkOworCXN0cnVjdCBiZmFfcnBvcnRfaGFsX3N0YXRzX3MJaGFsX3N0YXRzOyAgLyogIEJGQSBycG9ydCBzdGF0cyAgICAqLworfTsKKworLyoqCisgKiAgUnBvcnQncyBRb1MgYXR0cmlidXRlcworICovCitzdHJ1Y3QgYmZhX3Jwb3J0X3Fvc19hdHRyX3MgeworCWVudW0gYmZhX3Fvc19wcmlvcml0eSBxb3NfcHJpb3JpdHk7ICAvKiAgcnBvcnQncyBRb1MgcHJpb3JpdHkgICAqLworCXUzMgkgICAgICAgcW9zX2Zsb3dfaWQ7CSAgLyogIFFvUyBmbG93IElkCSAqLworfTsKKworLyoqCisgKiBGQ1MgcmVtb3RlIHBvcnQgYXR0cmlidXRlcyByZXR1cm5lZCBpbiBxdWVyaWVzCisgKi8KK3N0cnVjdCBiZmFfcnBvcnRfYXR0cl9zIHsKKwl3d25fdCAgICAgICAgICAgCW53d247CS8qICBub2RlIHd3biAqLworCXd3bl90ICAgICAgICAgICAJcHd3bjsJLyogIHBvcnQgd3duICovCisJZW51bSBmY19jb3MgY29zX3N1cHBvcnRlZDsJLyogIHN1cHBvcnRlZCBjbGFzcyBvZiBzZXJ2aWNlcyAqLworCXUzMiAgICAgICAgCXBpZDsJLyogIHBvcnQgSUQgKi8KKwl1MzIgICAgICAgIAlkZl9zejsJLyogIE1heCBwYXlsb2FkIHNpemUgKi8KKwllbnVtIGJmYV9ycG9ydF9zdGF0ZSAJc3RhdGU7CS8qICBScG9ydCBTdGF0ZSBtYWNoaW5lIHN0YXRlICovCisJZW51bSBmY19jb3MgICAgICAgIAlmY19jb3M7CS8qICBGQyBjbGFzc2VzIG9mIHNlcnZpY2VzICovCisJYmZhX2Jvb2xlYW5fdCAgIAljaXNjOwkvKiAgQ0lTQyBjYXBhYmxlIGRldmljZSAqLworCXN0cnVjdCBiZmFfcnBvcnRfc3ltbmFtZV9zIHN5bW5hbWU7IC8qICBTeW1ib2xpYyBOYW1lICovCisJZW51bSBiZmFfcnBvcnRfZnVuY3Rpb24Jc2NzaV9mdW5jdGlvbjsgLyogIEluaXRpYXRvci9UYXJnZXQgKi8KKwlzdHJ1Y3QgYmZhX3Jwb3J0X3Fvc19hdHRyX3MgcW9zX2F0dHI7IC8qICBxb3MgYXR0cmlidXRlcyAgKi8KKwllbnVtIGJmYV9wcG9ydF9zcGVlZCBjdXJyX3NwZWVkOyAgIC8qICBvcGVyYXRpbmcgc3BlZWQgZ290IGZyb20KKwkJCQkJICAgICogUlBTQyBFTFMuIFVOS05PV04sIGlmIFJQU0MKKwkJCQkJICAgICogaXMgbm90IHN1cHBvcnRlZCAqLworCWJmYV9ib29sZWFuX3QgCXRybF9lbmZvcmNlZDsJLyogIFRSTCBlbmZvcmNlZCA/IFRSVUUvRkFMU0UgKi8KKwllbnVtIGJmYV9wcG9ydF9zcGVlZAlhc3NpZ25lZF9zcGVlZDsJLyogU3BlZWQgYXNzaWduZWQgYnkgdGhlIHVzZXIuCisJCQkJCQkgKiB3aWxsIGJlIHVzZWQgaWYgUlBTQyBpcyBub3QKKwkJCQkJCSAqIHN1cHBvcnRlZCBieSB0aGUgcnBvcnQgKi8KK307CisKKyNkZWZpbmUgYmZhX3Jwb3J0X2Flbl9xb3NfZGF0YV90IHN0cnVjdCBiZmFfcnBvcnRfcW9zX2F0dHJfcworCisvKioKKyAqIEJGQSByZW1vdGUgcG9ydCBldmVudHMKKyAqIEFyZ3VtZW50cyBiZWxvdyBhcmUgaW4gQkZBTCBjb250ZXh0IGZyb20gTWdtdAorICogQkZBX1JQT1JUX0FFTl9PTkxJTkU6ICAgIFtpbl06IGxwd3duCVtvdXRdOiB2Zl9pZCwgbHB3d24sIHJwd3duCisgKiBCRkFfUlBPUlRfQUVOX09GRkxJTkU6ICAgW2luXTogbHB3d24gW291dF06IHZmX2lkLCBscHd3biwgcnB3d24KKyAqIEJGQV9SUE9SVF9BRU5fRElTQ09OTkVDVDpbaW5dOiBscHd3biBbb3V0XTogdmZfaWQsIGxwd3duLCBycHd3bgorICogQkZBX1JQT1JUX0FFTl9RT1NfUFJJTzogIFtpbl06IGxwd3duIFtvdXRdOiB2Zl9pZCwgbHB3d24sIHJwd3duLCBwcmlvCisgKiBCRkFfUlBPUlRfQUVOX1FPU19GTE9XSUQ6W2luXTogbHB3d24gW291dF06IHZmX2lkLCBscHd3biwgcnB3d24sIGZsb3dfaWQKKyAqLworZW51bSBiZmFfcnBvcnRfYWVuX2V2ZW50IHsKKwlCRkFfUlBPUlRfQUVOX09OTElORSAgICAgID0gMSwJLyogIFJQb3J0IG9ubGluZSBldmVudCAqLworCUJGQV9SUE9SVF9BRU5fT0ZGTElORSAgICAgPSAyLAkvKiAgUlBvcnQgb2ZmbGluZSBldmVudCAqLworCUJGQV9SUE9SVF9BRU5fRElTQ09OTkVDVCAgPSAzLAkvKiAgUlBvcnQgZGlzY29ubmVjdCBldmVudCAqLworCUJGQV9SUE9SVF9BRU5fUU9TX1BSSU8gICAgPSA0LAkvKiAgUU9TIHByaW9yaXR5IGNoYW5nZSBldmVudCAqLworCUJGQV9SUE9SVF9BRU5fUU9TX0ZMT1dJRCAgPSA1LAkvKiAgUU9TIGZsb3cgSWQgY2hhbmdlIGV2ZW50ICovCit9OworCitzdHJ1Y3QgYmZhX3Jwb3J0X2Flbl9kYXRhX3MgeworCXUxNiAgICAgICAgdmZfaWQ7CS8qICB2Zl9pZCBvZiB0aGlzIGxvZ2ljYWwgcG9ydCAqLworCXUxNiAgICAgICAgcnN2ZFszXTsKKwl3d25fdCAgICAgICAgICAgcHB3d247CS8qICBXV04gb2YgaXRzIHBoeXNpY2FsIHBvcnQgKi8KKwl3d25fdCAgICAgICAgICAgbHB3d247CS8qICBXV04gb2YgdGhpcyBsb2dpY2FsIHBvcnQgKi8KKwl3d25fdCAgICAgICAgICAgcnB3d247CS8qICBXV04gb2YgdGhpcyByZW1vdGUgcG9ydCAqLworCXVuaW9uIHsKKwkJYmZhX3Jwb3J0X2Flbl9xb3NfZGF0YV90IHFvczsKKwl9IHByaXY7Cit9OworCisjZW5kaWYgLyogX19CRkFfREVGU19SUE9SVF9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX3N0YXR1cy5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfc3RhdHVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2RjZWFlYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX3N0YXR1cy5oCkBAIC0wLDAgKzEsMjU1IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaWZuZGVmIF9fQkZBX0RFRlNfU1RBVFVTX0hfXworI2RlZmluZSBfX0JGQV9ERUZTX1NUQVRVU19IX18KKworLyoqCisgKiBBUEkgc3RhdHVzIHJldHVybiB2YWx1ZXMKKyAqCisgKiBOT1RFOiBUaGUgZXJyb3IgbXNncyBhcmUgYXV0byBnZW5lcmF0ZWQgZnJvbSB0aGUgY29tbWVudHMuIE9ubHkgc2luZ2UgbGluZQorICogY29tbWVudHMgYXJlIHN1cHBvcnRlZAorICovCitlbnVtIGJmYV9zdGF0dXMgeworCUJGQV9TVEFUVVNfT0sgCQk9IDAsCS8qICBTdWNjZXNzICovCisJQkZBX1NUQVRVU19GQUlMRUQgCT0gMSwJLyogIE9wZXJhdGlvbiBmYWlsZWQgKi8KKwlCRkFfU1RBVFVTX0VJTlZBTCAJPSAyLAkvKiAgSW52YWxpZCBwYXJhbXMgQ2hlY2sgaW5wdXQKKwkJCQkJICogcGFyYW1ldGVycyAqLworCUJGQV9TVEFUVVNfRU5PTUVNIAk9IDMsCS8qICBPdXQgb2YgcmVzb3VyY2VzICovCisJQkZBX1NUQVRVU19FTk9TWVMgCT0gNCwJLyogIEZ1bmN0aW9uIG5vdCBpbXBsZW1lbnRlZCAqLworCUJGQV9TVEFUVVNfRVRJTUVSIAk9IDUsCS8qICBUaW1lciBleHBpcmVkIC0gUmV0cnksIGlmCisJCQkJCSAqIHBlcnNpc3RzLCBjb250YWN0IHN1cHBvcnQgKi8KKwlCRkFfU1RBVFVTX0VQUk9UT0NPTCAJPSA2LAkvKiAgUHJvdG9jb2wgZXJyb3IgKi8KKwlCRkFfU1RBVFVTX0VOT0ZDUE9SVFMgCT0gNywJLyogIE5vIEZDIHBvcnRzIHJlc291cmNlcyAqLworCUJGQV9TVEFUVVNfTk9GTEFTSCAJPSA4LAkvKiAgRmxhc2ggbm90IHByZXNlbnQgKi8KKwlCRkFfU1RBVFVTX0JBREZMQVNIIAk9IDksCS8qICBGbGFzaCBpcyBjb3JydXB0ZWQgb3IgYmFkICovCisJQkZBX1NUQVRVU19TRlBfVU5TVVBQIAk9IDEwLAkvKiAgVW5zdXBwb3J0ZWQgU0ZQIC0gUmVwbGFjZSBTRlAgKi8KKwlCRkFfU1RBVFVTX1VOS05PV05fVkZJRCA9IDExLAkvKiAgVkZfSUQgbm90IGZvdW5kICovCisJQkZBX1NUQVRVU19EQVRBQ09SUlVQVEVEID0gMTIsCS8qICBEaWFnIHJldHVybmVkIGRhdGEgY29ycnVwdGVkCisJCQkJCSAqIGNvbnRhY3Qgc3VwcG9ydCAqLworCUJGQV9TVEFUVVNfREVWQlVTWSAJPSAxMywJLyogIERldmljZSBidXN5IC0gUmV0cnkgb3BlcmF0aW9uICovCisJQkZBX1NUQVRVU19BQk9SVEVEIAk9IDE0LAkvKiAgT3BlcmF0aW9uIGFib3J0ZWQgKi8KKwlCRkFfU1RBVFVTX05PREVWIAk9IDE1LAkvKiAgRGV2IGlzIG5vdCBwcmVzZW50ICovCisJQkZBX1NUQVRVU19IRE1BX0ZBSUxFRCAJPSAxNiwJLyogIEhvc3QgZG1hIGZhaWxlZCBjb250YWN0IHN1cHBvcnQgKi8KKwlCRkFfU1RBVFVTX0ZMQVNIX0JBRF9MRU4gPSAxNywJLyogIEZsYXNoIGJhZCBsZW5ndGggKi8KKwlCRkFfU1RBVFVTX1VOS05PV05fTFdXTiA9IDE4LAkvKiAgTFBPUlQgUFdXTiBub3QgZm91bmQgKi8KKwlCRkFfU1RBVFVTX1VOS05PV05fUldXTiA9IDE5LAkvKiAgUlBPUlQgUFdXTiBub3QgZm91bmQgKi8KKwlCRkFfU1RBVFVTX0ZDUFRfTFNfUkpUIAk9IDIwLAkvKiAgR290IExTX1JKVCBmb3IgRkMgUGFzcworCQkJCQkgKiB0aHJvdWdoIFJlcSAqLworCUJGQV9TVEFUVVNfVlBPUlRfRVhJU1RTID0gMjEsCS8qICBWUE9SVCBhbHJlYWR5IGV4aXN0cyAqLworCUJGQV9TVEFUVVNfVlBPUlRfTUFYIAk9IDIyLAkvKiAgUmVhY2hlZCBtYXggVlBPUlQgc3VwcG9ydGVkCisJCQkJCSAqIGxpbWl0ICovCisJQkZBX1NUQVRVU19VTlNVUFBfU1BFRUQgPSAyMywJLyogIEludmFsaWQgU3BlZWQgQ2hlY2sgc3BlZWQKKwkJCQkJICogc2V0dGluZyAqLworCUJGQV9TVEFUVVNfSU5WTERfREZTWiAJPSAyNCwJLyogIEludmFsaWQgTWF4IGRhdGEgZmllbGQgc2l6ZSAqLworCUJGQV9TVEFUVVNfQ05GR19GQUlMRUQgCT0gMjUsCS8qICBTZXR0aW5nIGNhbiBub3QgYmUgcGVyc2lzdGVkICovCisJQkZBX1NUQVRVU19DTURfTk9UU1VQUCAJPSAyNiwJLyogIENvbW1hbmQvQVBJIG5vdCBzdXBwb3J0ZWQgKi8KKwlCRkFfU1RBVFVTX05PX0FEQVBURVIgCT0gMjcsCS8qICBObyBCcm9jYWRlIEFkYXB0ZXIgRm91bmQgKi8KKwlCRkFfU1RBVFVTX0xJTktET1dOIAk9IDI4LAkvKiAgTGluayBpcyBkb3duIC0gQ2hlY2sgb3IgcmVwbGFjZQorCQkJCQkgKiBTRlAvY2FibGUgKi8KKwlCRkFfU1RBVFVTX0ZBQlJJQ19SSlQgCT0gMjksCS8qICBSZWplY3QgZnJvbSBhdHRhY2hlZCBmYWJyaWMgKi8KKwlCRkFfU1RBVFVTX1VOS05PV05fVldXTiA9IDMwLAkvKiAgVlBPUlQgUFdXTiBub3QgZm91bmQgKi8KKwlCRkFfU1RBVFVTX05TTE9HSU5fRkFJTEVEID0gMzEsCS8qICBOYW1lc2VydmVyIGxvZ2luIGZhaWxlZCAqLworCUJGQV9TVEFUVVNfTk9fUlBPUlRTIAk9IDMyLAkvKiAgTm8gcmVtb3RlIHBvcnRzIGZvdW5kICovCisJQkZBX1NUQVRVU19OU1FVRVJZX0ZBSUxFRCA9IDMzLAkvKiAgTmFtZXNlcnZlciBxdWVyeSBmYWlsZWQgKi8KKwlCRkFfU1RBVFVTX1BPUlRfT0ZGTElORSA9IDM0LAkvKiAgUG9ydCBpcyBub3Qgb25saW5lICovCisJQkZBX1NUQVRVU19SUE9SVF9PRkZMSU5FID0gMzUsCS8qICBSUE9SVCBpcyBub3Qgb25saW5lICovCisJQkZBX1NUQVRVU19UR1RPUEVOX0ZBSUxFRCA9IDM2LAkvKiAgUmVtb3RlIFNDU0kgdGFyZ2V0IG9wZW4gZmFpbGVkICovCisJQkZBX1NUQVRVU19CQURfTFVOUyAJPSAzNywJLyogIE5vIHZhbGlkIExVTnMgZm91bmQgKi8KKwlCRkFfU1RBVFVTX0lPX0ZBSUxVUkUgCT0gMzgsCS8qICBTQ1NJIHRhcmdldCBJTyBmYWlsdXJlICovCisJQkZBX1NUQVRVU19OT19GQUJSSUMgCT0gMzksCS8qICBObyBzd2l0Y2hlZCBmYWJyaWMgcHJlc2VudCAqLworCUJGQV9TVEFUVVNfRUJBREYgCT0gNDAsCS8qICBCYWQgZmlsZSBkZXNjcmlwdG9yICovCisJQkZBX1NUQVRVU19FSU5UUiAJPSA0MSwJLyogIEEgc2lnbmFsIHdhcyBjYXVnaHQgZHVyaW5nIGlvY3RsICovCisJQkZBX1NUQVRVU19FSU8gCQk9IDQyLAkvKiAgSS9PIGVycm9yICovCisJQkZBX1NUQVRVU19FTk9UVFkgCT0gNDMsCS8qICBJbmFwcHJvcHJpYXRlIEkvTyBjb250cm9sCisJCQkJCSAqIG9wZXJhdGlvbiAqLworCUJGQV9TVEFUVVNfRU5YSU8gCT0gNDQsCS8qICBObyBzdWNoIGRldmljZSBvciBhZGRyZXNzICovCisJQkZBX1NUQVRVU19FRk9QRU4gCT0gNDUsCS8qICBGYWlsZWQgdG8gb3BlbiBmaWxlICovCisJQkZBX1NUQVRVU19WUE9SVF9XV05fQlAgPSA0NiwJLyogIFdXTiBpcyBzYW1lIGFzIGJhc2UgcG9ydCdzIFdXTiAqLworCUJGQV9TVEFUVVNfUE9SVF9OT1RfRElTQUJMRUQgPSA0NywgLyogIFBvcnQgbm90IGRpc2FibGVkIGRpc2FibGUgcG9ydAorCQkJCQkgICAgKiBmaXJzdCAqLworCUJGQV9TVEFUVVNfQkFERlJNSERSIAk9IDQ4LAkvKiAgQmFkIGZyYW1lIGhlYWRlciAqLworCUJGQV9TVEFUVVNfQkFERlJNU1ogCT0gNDksCS8qICBCYWQgZnJhbWUgc2l6ZSBjaGVjayBhbmQgcmVwbGFjZQorCQkJCQkgKiBTRlAvY2FibGUgKi8KKwlCRkFfU1RBVFVTX01JU1NJTkdGUk0gCT0gNTAsCS8qICBNaXNzaW5nIGZyYW1lIGNoZWNrIGFuZCByZXBsYWNlCisJCQkJCSAqIFNGUC9jYWJsZSAqLworCUJGQV9TVEFUVVNfTElOS1RJTUVPVVQgCT0gNTEsCS8qICBMaW5rIHRpbWVvdXQgY2hlY2sgYW5kIHJlcGxhY2UKKwkJCQkJICogU0ZQL2NhYmxlICovCisJQkZBX1NUQVRVU19OT19GQ1BJTV9ORVhVUyA9IDUyLAkvKiAgTm8gRkNQIE5leHVzIGV4aXN0cyB3aXRoIHRoZQorCQkJCQkgKiBycG9ydCAqLworCUJGQV9TVEFUVVNfQ0hFQ0tTVU1fRkFJTCA9IDUzLAkvKiAgY2hlY2tzdW0gZmFpbHVyZSAqLworCUJGQV9TVEFUVVNfR1pNRV9GQUlMRUQgCT0gNTQsCS8qICBHZXQgem9uZSBtZW1iZXIgcXVlcnkgZmFpbGVkICovCisJQkZBX1NUQVRVU19TQ1NJU1RBUlRfUkVRRCA9IDU1LAkvKiAgU0NTSSBkaXNrIHJlcXVpcmUgU1RBUlQgY29tbWFuZCAqLworCUJGQV9TVEFUVVNfSU9DX0ZBSUxVUkUgCT0gNTYsCS8qICBJT0MgZmFpbHVyZSAtIFJldHJ5LCBpZiBwZXJzaXN0cworCQkJCQkgKiBjb250YWN0IHN1cHBvcnQgKi8KKwlCRkFfU1RBVFVTX0lOVkFMSURfV1dOIAk9IDU3LAkvKiAgSW52YWxpZCBXV04gKi8KKwlCRkFfU1RBVFVTX01JU01BVENIIAk9IDU4LAkvKiAgVmVyc2lvbiBtaXNtYXRjaCAqLworCUJGQV9TVEFUVVNfSU9DX0VOQUJMRUQgCT0gNTksCS8qICBJT0MgaXMgYWxyZWFkeSBlbmFibGVkICovCisJQkZBX1NUQVRVU19BREFQVEVSX0VOQUJMRUQgPSA2MCwgLyogIEFkYXB0ZXIgaXMgbm90IGRpc2FibGVkIGRpc2FibGUKKwkJCQkJICAqIGFkYXB0ZXIgZmlyc3QgKi8KKwlCRkFfU1RBVFVTX0lPQ19OT05fT1AgCT0gNjEsCS8qICBJT0MgaXMgbm90IG9wZXJhdGlvbmFsLiBFbmFibGUgSU9DCisJCQkJCSAqIGFuZCBpZiBpdCBzdGlsbCBmYWlscywKKwkJCQkJICogY29udGFjdCBzdXBwb3J0ICovCisJQkZBX1NUQVRVU19BRERSX01BUF9GQUlMVVJFID0gNjIsIC8qICBQQ0kgYmFzZSBhZGRyZXNzIG5vdCBtYXBwZWQKKwkJCQkJICAgKiBpbiBPUyAqLworCUJGQV9TVEFUVVNfU0FNRV9OQU1FIAk9IDYzLAkvKiAgTmFtZSBleGlzdHMhIHVzZSBhIGRpZmZlcmVudAorCQkJCQkgKiBuYW1lICovCisJQkZBX1NUQVRVU19QRU5ESU5HICAgICAgPSA2NCwgICAvKiAgQVBJIGNvbXBsZXRlcyBhc3luY2hyb25vdXNseSAqLworCUJGQV9TVEFUVVNfOEdfU1BECT0gNjUsCS8qICBTcGVlZCBzZXR0aW5nIG5vdCB2YWxpZCBmb3IKKwkJCQkJICogOEcgSEJBICovCisJQkZBX1NUQVRVU180R19TUEQJPSA2NiwJLyogIFNwZWVkIHNldHRpbmcgbm90IHZhbGlkIGZvcgorCQkJCQkgKiA0RyBIQkEgKi8KKwlCRkFfU1RBVFVTX0FEX0lTX0VOQUJMRSA9IDY3LAkvKiAgQWRhcHRlciBpcyBhbHJlYWR5IGVuYWJsZWQgKi8KKwlCRkFfU1RBVFVTX0VJTlZBTF9UT1YgCT0gNjgsCS8qICBJbnZhbGlkIHBhdGggZmFpbG92ZXIgVE9WICovCisJQkZBX1NUQVRVU19FSU5WQUxfUURFUFRIID0gNjksCS8qICBJbnZhbGlkIHF1ZXVlIGRlcHRoIHZhbHVlICovCisJQkZBX1NUQVRVU19WRVJTSU9OX0ZBSUwgPSA3MCwJLyogIEFwcGxpY2F0aW9uL0RyaXZlciB2ZXJzaW9uCisJCQkJCSAqIG1pc21hdGNoICovCisJQkZBX1NUQVRVU19ESUFHX0JVU1kgICAgPSA3MSwJLyogIGRpYWcgYnVzeSAqLworCUJGQV9TVEFUVVNfQkVBQ09OX09OCT0gNzIsCS8qICBQb3J0IEJlYWNvbiBhbHJlYWR5IG9uICovCisJQkZBX1NUQVRVU19CRUFDT05fT0ZGCT0gNzMsCS8qICBQb3J0IEJlYWNvbiBhbHJlYWR5IG9mZiAqLworCUJGQV9TVEFUVVNfTEJFQUNPTl9PTiAgID0gNzQsCS8qICBMaW5rIEVuZC10by1FbmQgQmVhY29uIGFscmVhZHkKKwkJCQkJICogb24gKi8KKwlCRkFfU1RBVFVTX0xCRUFDT05fT0ZGCT0gNzUsCS8qICBMaW5rIEVuZC10by1FbmQgQmVhY29uIGFscmVhZHkKKwkJCQkJICogb2ZmICovCisJQkZBX1NUQVRVU19QT1JUX05PVF9JTklURUQgPSA3NiwgLyogIFBvcnQgbm90IGluaXRpYWxpemVkICovCisJQkZBX1NUQVRVU19SUFNDX0VOQUJMRUQgPSA3NywgLyogIFRhcmdldCBoYXMgYSB2YWxpZCBzcGVlZCAqLworCUJGQV9TVEFUVVNfRU5PRlNBVkUgPSA3OCwJLyogIE5vIHNhdmVkIGZpcm13YXJlIHRyYWNlICovCisJQkZBX1NUQVRVU19CQURfRklMRSA9IDc5LAkvKiAgTm90IGEgdmFsaWQgQnJvY2FkZSBCb290IENvZGUKKwkJCQkJICogZmlsZSAqLworCUJGQV9TVEFUVVNfUkxJTV9FTiA9IDgwLAkvKiAgVGFyZ2V0IHJhdGUgbGltaXRpbmcgaXMgYWxyZWFkeQorCQkJCQkgKiBlbmFibGVkICovCisJQkZBX1NUQVRVU19STElNX0RJUyA9IDgxLCAgLyogIFRhcmdldCByYXRlIGxpbWl0aW5nIGlzIGFscmVhZHkKKwkJCQkgICAgKiBkaXNhYmxlZCAqLworCUJGQV9TVEFUVVNfSU9DX0RJU0FCTEVEID0gODIsICAgLyogIElPQyBpcyBhbHJlYWR5IGRpc2FibGVkICovCisJQkZBX1NUQVRVU19BREFQVEVSX0RJU0FCTEVEID0gODMsICAgLyogIEFkYXB0ZXIgaXMgYWxyZWFkeSBkaXNhYmxlZCAqLworCUJGQV9TVEFUVVNfQklPU19ESVNBQkxFRCA9IDg0LCAgIC8qICBCaW9zIGlzIGFscmVhZHkgZGlzYWJsZWQgKi8KKwlCRkFfU1RBVFVTX0FVVEhfRU5BQkxFRCA9IDg1LCAgIC8qICBBdXRoZW50aWNhdGlvbiBpcyBhbHJlYWR5CisJCQkJCSAqIGVuYWJsZWQgKi8KKwlCRkFfU1RBVFVTX0FVVEhfRElTQUJMRUQgPSA4NiwgICAvKiAgQXV0aGVudGljYXRpb24gaXMgYWxyZWFkeQorCQkJCQkgKiBkaXNhYmxlZCAqLworCUJGQV9TVEFUVVNfRVJST1JfVFJMX0VOQUJMRUQgPSA4NywgICAvKiAgVGFyZ2V0IHJhdGUgbGltaXRpbmcgaXMKKwkJCQkJICAgICAgKiBlbmFibGVkICovCisJQkZBX1NUQVRVU19FUlJPUl9RT1NfRU5BQkxFRCA9IDg4LCAgIC8qICBRb1MgaXMgZW5hYmxlZCAqLworCUJGQV9TVEFUVVNfTk9fU0ZQX0RFViA9IDg5LCAvKiAgTm8gU0ZQIGRldmljZSBjaGVjayBvciByZXBsYWNlIFNGUCAqLworCUJGQV9TVEFUVVNfTUVNVEVTVF9GQUlMRUQgPSA5MCwJLyogIE1lbW9yeSB0ZXN0IGZhaWxlZCBjb250YWN0CisJCQkJCSAqIHN1cHBvcnQgKi8KKwlCRkFfU1RBVFVTX0lOVkFMSURfREVWSUQgPSA5MSwJLyogIEludmFsaWQgZGV2aWNlIGlkIHByb3ZpZGVkICovCisJQkZBX1NUQVRVU19RT1NfRU5BQkxFRCA9IDkyLCAvKiAgUU9TIGlzIGFscmVhZHkgZW5hYmxlZCAqLworCUJGQV9TVEFUVVNfUU9TX0RJU0FCTEVEID0gOTMsIC8qICBRT1MgaXMgYWxyZWFkeSBkaXNhYmxlZCAqLworCUJGQV9TVEFUVVNfSU5DT1JSRUNUX0RSVl9DT05GSUcgPSA5NCwgLyogIENoZWNrIGNvbmZpZ3VyYXRpb24KKwkJCQkJICAgICAgICoga2V5L3ZhbHVlIHBhaXIgKi8KKwlCRkFfU1RBVFVTX1JFR19GQUlMID0gOTUsIC8qICBDYW4ndCByZWFkIHdpbmRvd3MgcmVnaXN0cnkgKi8KKwlCRkFfU1RBVFVTX0lNX0lOVl9DT0RFID0gOTYsIC8qICBJbnZhbGlkIElPQ1RMIGNvZGUgKi8KKwlCRkFfU1RBVFVTX0lNX0lOVl9WTEFOID0gOTcsIC8qICBJbnZhbGlkIFZMQU4gSUQgKi8KKwlCRkFfU1RBVFVTX0lNX0lOVl9BREFQVF9OQU1FID0gOTgsIC8qICBJbnZhbGlkIGFkYXB0ZXIgbmFtZSAqLworCUJGQV9TVEFUVVNfSU1fTE9XX1JFU09VUkNFUyA9IDk5LCAvKiAgTWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZSBpbgorCQkJCQkgICAqIGRyaXZlciAqLworCUJGQV9TVEFUVVNfSU1fVkxBTklEX0lTX1BWSUQgPSAxMDAsIC8qICBHaXZlbiBWTEFOIGlkIHNhbWUgYXMgUFZJRCAqLworCUJGQV9TVEFUVVNfSU1fVkxBTklEX0VYSVNUUyA9IDEwMSwgLyogIEdpdmVuIFZMQU4gaWQgYWxyZWFkeSBleGlzdHMgKi8KKwlCRkFfU1RBVFVTX0lNX0ZXX1VQREFURV9GQUlMID0gMTAyLCAvKiAgVXBkYXRpbmcgZmlybXdhcmUgd2l0aCBuZXcKKwkJCQkJICAgICAqIFZMQU4gSUQgZmFpbGVkICovCisJQkZBX1NUQVRVU19QT1JUTE9HX0VOQUJMRUQgPSAxMDMsIC8qICBQb3J0IExvZyBpcyBhbHJlYWR5IGVuYWJsZWQgKi8KKwlCRkFfU1RBVFVTX1BPUlRMT0dfRElTQUJMRUQgPSAxMDQsIC8qICBQb3J0IExvZyBpcyBhbHJlYWR5IGRpc2FibGVkICovCisJQkZBX1NUQVRVU19GSUxFX05PVF9GT1VORCA9IDEwNSwgLyogIFNwZWNpZmllZCBmaWxlIGNvdWxkIG5vdCBiZQorCQkJCQkgICogZm91bmQgKi8KKwlCRkFfU1RBVFVTX1FPU19GQ19PTkxZID0gMTA2LCAvKiAgUU9TIGNhbiBiZSBlbmFibGVkIGZvciBGQyBtb2RlCisJCQkJICAgICAgICogb25seSAqLworCUJGQV9TVEFUVVNfUkxJTV9GQ19PTkxZID0gMTA3LCAvKiAgUkFURUxJTSBjYW4gYmUgZW5hYmxlZCBmb3IgRkMgbW9kZQorCQkJCQkqIG9ubHkgKi8KKwlCRkFfU1RBVFVTX0NUX1NQRCA9IDEwOCwgLyogIEludmFsaWQgc3BlZWQgc2VsZWN0aW9uIGZvciBDYXRhcHVsdC4gKi8KKwlCRkFfU1RBVFVTX0xFRFRFU1RfT1AgPSAxMDksIC8qICBMRUQgdGVzdCBpcyBvcGVyYXRpbmcgKi8KKwlCRkFfU1RBVFVTX0NFRV9OT1RfRE4gPSAxMTAsIC8qICBldGggcG9ydCBpcyBub3QgYXQgZG93biBzdGF0ZSwgcGxlYXNlCisJCQkJICAgICAgKiBicmluZyBkb3duIGZpcnN0ICovCisJQkZBX1NUQVRVU18xMEdfU1BEID0gMTExLCAvKiAgU3BlZWQgc2V0dGluZyBub3QgdmFsaWQgZm9yIDEwRyBIQkEgKi8KKwlCRkFfU1RBVFVTX0lNX0lOVl9URUFNX05BTUUgPSAxMTIsIC8qICBJbnZhbGlkIHRlYW0gbmFtZSAqLworCUJGQV9TVEFUVVNfSU1fRFVQX1RFQU1fTkFNRSA9IDExMywgLyogIEdpdmVuIHRlYW0gbmFtZSBhbHJlYWR5CisJCQkJCSAgICAqIGV4aXN0cyAqLworCUJGQV9TVEFUVVNfSU1fQURBUFRfQUxSRUFEWV9JTl9URUFNID0gMTE0LCAvKiAgR2l2ZW4gYWRhcHRlciBpcyBwYXJ0CisJCQkJCQkgICAgKiBvZiBhbm90aGVyIHRlYW0gKi8KKwlCRkFfU1RBVFVTX0lNX0FEQVBUX0hBU19WTEFOUyA9IDExNSwgLyogIEFkYXB0ZXIgaGFzIFZMQU5zIGNvbmZpZ3VyZWQuCisJCQkJCSAgICAgICogRGVsZXRlIGFsbCBWTEFOcyBiZWZvcmUKKwkJCQkJICAgICAgKiBjcmVhdGluZyB0ZWFtICovCisJQkZBX1NUQVRVU19JTV9QVklEX01JU01BVENIID0gMTE2LCAvKiAgTWlzbWF0Y2hpbmcgUFZJRHMgY29uZmlndXJlZAorCQkJCQkgICAgKiBmb3IgYWRhcHRlcnMgKi8KKwlCRkFfU1RBVFVTX0lNX0xJTktfU1BFRURfTUlTTUFUQ0ggPSAxMTcsIC8qICBNaXNtYXRjaGluZyBsaW5rIHNwZWVkcworCQkJCQkJICAqIGNvbmZpZ3VyZWQgZm9yIGFkYXB0ZXJzICovCisJQkZBX1NUQVRVU19JTV9NVFVfTUlTTUFUQ0ggPSAxMTgsIC8qICBNaXNtYXRjaGluZyBNVFVzIGNvbmZpZ3VyZWQgZm9yCisJCQkJCSAgICogYWRhcHRlcnMgKi8KKwlCRkFfU1RBVFVTX0lNX1JTU19NSVNNQVRDSCA9IDExOSwgLyogIE1pc21hdGNoaW5nIFJTUyBwYXJhbWV0ZXJzCisJCQkJCSAgICogY29uZmlndXJlZCBmb3IgYWRhcHRlcnMgKi8KKwlCRkFfU1RBVFVTX0lNX0hEU19NSVNNQVRDSCA9IDEyMCwgLyogIE1pc21hdGNoaW5nIEhEUyBwYXJhbWV0ZXJzCisJCQkJCSAgICogY29uZmlndXJlZCBmb3IgYWRhcHRlcnMgKi8KKwlCRkFfU1RBVFVTX0lNX09GRkxPQURfTUlTTUFUQ0ggPSAxMjEsIC8qICBNaXNtYXRjaGluZyBvZmZsb2FkCisJCQkJCSAgICAgICAqIHBhcmFtZXRlcnMgY29uZmlndXJlZCBmb3IKKwkJCQkJICAgICAgICogYWRhcHRlcnMgKi8KKwlCRkFfU1RBVFVTX0lNX1BPUlRfUEFSQU1TID0gMTIyLCAvKiAgRXJyb3Igc2V0dGluZyBwb3J0IHBhcmFtZXRlcnMgKi8KKwlCRkFfU1RBVFVTX0lNX1BPUlRfTk9UX0lOX1RFQU0gPSAxMjMsIC8qICBQb3J0IGlzIG5vdCBwYXJ0IG9mIHRlYW0gKi8KKwlCRkFfU1RBVFVTX0lNX0NBTk5PVF9SRU1fUFJJID0gMTI0LCAvKiAgUHJpbWFyeSBhZGFwdGVyIGNhbm5vdCBiZQorCQkJCQkgICAgICogcmVtb3ZlZC4gQ2hhbmdlIHByaW1hcnkgYmVmb3JlCisJCQkJCSAgICAgKiByZW1vdmluZyAqLworCUJGQV9TVEFUVVNfSU1fTUFYX1BPUlRTX1JFQUNIRUQgPSAxMjUsIC8qICBFeGNlZWRpbmcgbWF4aW11bSBwb3J0cworCQkJCQkJKiBwZXIgdGVhbSAqLworCUJGQV9TVEFUVVNfSU1fTEFTVF9QT1JUX0RFTEVURSA9IDEyNiwgLyogIExhc3QgcG9ydCBpbiB0ZWFtIGJlaW5nCisJCQkJCSAgICAgICAqIGRlbGV0ZWQgKi8KKwlCRkFfU1RBVFVTX0lNX05PX0RSSVZFUiA9IDEyNywgLyogIElNIGRyaXZlciBpcyBub3QgaW5zdGFsbGVkICovCisJQkZBX1NUQVRVU19JTV9NQVhfVkxBTlNfUkVBQ0hFRCA9IDEyOCwgLyogIEV4Y2VlZGluZyBtYXhpbXVtIFZMQU5zCisJCQkJCQkqIHBlciBwb3J0ICovCisJQkZBX1NUQVRVU19UT01DQVRfU1BEX05PVF9BTExPV0VEID0gMTI5LCAvKiBCaW9zIHNwZWVkIGNvbmZpZyBub3QKKwkJCQkJCSAgKiBhbGxvd2VkIGZvciBDTkEgKi8KKwlCRkFfU1RBVFVTX05PX01JTlBPUlRfRFJJVkVSID0gMTMwLCAvKiAgTWluaXBvcnQgZHJpdmVyIGlzIG5vdAorCQkJCQkgICAgICogbG9hZGVkICovCisJQkZBX1NUQVRVU19DQVJEX1RZUEVfTUlTTUFUQ0ggPSAxMzEsIC8qICBDYXJkIHR5cGUgbWlzbWF0Y2ggKi8KKwlCRkFfU1RBVFVTX0JBRF9BU0lDQkxLID0gMTMyLCAvKiAgQmFkIEFTSUMgYmxvY2sgKi8KKwlCRkFfU1RBVFVTX05PX0RSSVZFUiA9IDEzMywgLyogIFN0b3JhZ2UvRXRoZXJuZXQgZHJpdmVyIG5vdCBsb2FkZWQgKi8KKwlCRkFfU1RBVFVTX0lOVkFMSURfTUFDID0gMTM0LCAvKiAgSW52YWxpZCBtYWMgYWRkcmVzcyAqLworCUJGQV9TVEFUVVNfSU1fTk9fVkxBTiA9IDEzNSwgLyogIE5vIFZMQU5zIGNvbmZpZ3VyZWQgb24gdGhlIGFkYXB0ZXIgKi8KKwlCRkFfU1RBVFVTX0lNX0VUSF9MQl9GQUlMRUQgPSAxMzYsIC8qICBFdGhlcm5ldCBsb29wYmFjayB0ZXN0IGZhaWxlZCAqLworCUJGQV9TVEFUVVNfSU1fUFZJRF9SRU1PVkUgPSAxMzcsIC8qICBDYW5ub3QgcmVtb3ZlIHBvcnQgdmxhbiAoUFZJRCkgKi8KKwlCRkFfU1RBVFVTX0lNX1BWSURfRURJVCA9IDEzOCwgLyogIENhbm5vdCBlZGl0IHBvcnQgdmxhbiAoUFZJRCkgKi8KKwlCRkFfU1RBVFVTX0NOQV9OT19CT09UID0gMTM5LCAvKiAgQm9vdCB1cGxvYWQgbm90IGFsbG93ZWQgZm9yIENOQSAqLworCUJGQV9TVEFUVVNfSU1fUFZJRF9OT05fWkVSTyA9IDE0MCwgLyogIFBvcnQgVkxBTiBJRCAoUFZJRCkgaXMgU2V0IHRvCisJCQkJCSAgICAqIE5vbi1aZXJvIFZhbHVlICovCisJQkZBX1NUQVRVU19JTV9JTkVUQ0ZHX0xPQ0tfRkFJTEVEID0gMTQxLCAvKiAgQWNxdWlyaW5nIE5ldHdvcmsKKwkJCQkJCSAgKiBTdWJzeXRlbSBMb2NrIEZhaWxlZC5QbGVhc2UKKwkJCQkJCSAgKiB0cnkgYWZ0ZXIgc29tZSB0aW1lICovCisJQkZBX1NUQVRVU19JTV9HRVRfSU5FVENGR19GQUlMRUQgPSAxNDIsIC8qICBBY3F1aXJpbmcgTmV0d29yayBTdWJzeXRlbQorCQkJCQkJICogaGFuZGxlIEZhaWxlZC4gUGxlYXNlIHRyeQorCQkJCQkJICogYWZ0ZXIgc29tZSB0aW1lICovCisJQkZBX1NUQVRVU19JTV9OT1RfQk9VTkQgPSAxNDMsIC8qICBCcm9jYWRlIDEwRyBFdGhlcm5ldCBTZXJ2aWNlIGlzIG5vdAorCQkJCQkqIEVuYWJsZWQgb24gdGhpcyBwb3J0ICovCisJQkZBX1NUQVRVU19JTlNVRkZJQ0lFTlRfUEVSTVMgPSAxNDQsIC8qICBVc2VyIGRvZXNuJ3QgaGF2ZSBzdWZmaWNpZW50CisJCQkJCSAgICAgICogcGVybWlzc2lvbnMgdG8gZXhlY3V0ZSB0aGUgQkNVCisJCQkJCSAgICAgICogYXBwbGljYXRpb24gKi8KKwlCRkFfU1RBVFVTX0lNX0lOVl9WTEFOX05BTUUgPSAxNDUsIC8qICBJbnZhbGlkL1Jlc2VydmVkIFZsYW4gbmFtZQorCQkJCQkgICAgKiBzdHJpbmcuIFRoZSBuYW1lIGlzIG5vdCBhbGxvd2VkCisJCQkJCSAgICAqIGZvciB0aGUgbm9ybWFsIFZsYW5zICovCisJQkZBX1NUQVRVU19DTURfTk9UU1VQUF9DTkEgPSAxNDYsIC8qICBDb21tYW5kIG5vdCBzdXBwb3J0ZWQgZm9yIENOQSAqLworCUJGQV9TVEFUVVNfSU1fUEFTU1RIUlVfRURJVCA9IDE0NywgLyogIENhbiBub3QgZWRpdCBwYXNzdGhydSB2bGFuIGlkICovCisJQkZBX1NUQVRVU19JTV9CSU5EX0ZBSUxFRCA9IDE0OCwgLyohIDwgSU0gRHJpdmVyIGJpbmQgb3BlcmF0aW9uCisJCQkJCSAgKiBmYWlsZWQgKi8KKwlCRkFfU1RBVFVTX0lNX1VOQklORF9GQUlMRUQgPSAxNDksIC8qICEgPCBJTSBEcml2ZXIgdW5iaW5kIG9wZXJhdGlvbgorCQkJCQkgICAgKiBmYWlsZWQgKi8KKwlCRkFfU1RBVFVTX01BWF9WQUwJCS8qICBVbmtub3duIGVycm9yIGNvZGUgKi8KK307CisjZGVmaW5lIGJmYV9zdGF0dXNfdCBlbnVtIGJmYV9zdGF0dXMKKworZW51bSBiZmFfZXByb3RvX3N0YXR1cyB7CisJQkZBX0VQUk9UT19CQURfQUNDRVBUID0gMCwKKwlCRkFfRVBST1RPX1VOS05PV05fUlNQID0gMQorfTsKKyNkZWZpbmUgYmZhX2Vwcm90b19zdGF0dXNfdCBlbnVtIGJmYV9lcHJvdG9fc3RhdHVzCisKKyNlbmRpZiAvKiBfX0JGQV9ERUZTX1NUQVRVU19IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX3Rpbi5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfdGluLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTA1YTJkYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX3Rpbi5oCkBAIC0wLDAgKzEsMTE4IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX19CRkFfREVGU19USU5fSF9fCisjZGVmaW5lIF9fQkZBX0RFRlNfVElOX0hfXworCisjaW5jbHVkZSA8cHJvdG9jb2wvdHlwZXMuaD4KKyNpbmNsdWRlIDxwcm90b2NvbC9mYy5oPgorCisvKioKKyAqIEZDUyB0aW4gc3RhdGVzCisgKi8KK2VudW0gYmZhX3Rpbl9zdGF0ZV9lIHsKKwlCRkFfVElOX1NNX09GRkxJTkUgPSAwLAkJLyogIHRpbiBpcyBvZmZsaW5lICovCisJQkZBX1RJTl9TTV9XT1NfTE9HSU4gPSAxLAkvKiAgV2FpdGluZyBQUkxJIEFDQy9SSlQgZnJvbSBVTFAgKi8KKwlCRkFfVElOX1NNX1dGV19PTkxJTkUgPSAyLAkvKiAgV2FpdGluZyBBQ0sgdG8gUFJMSSBBQ0MgZnJvbSBGVyAqLworCUJGQV9USU5fU01fT05MSU5FID0gMywJCS8qICB0aW4gbG9naW4gaXMgY29tcGxldGUgKi8KKwlCRkFfVElOX1NNX1dJT19SRUxPR0lOID0gNCwJLyogIHRpbiByZWxvZ2luIGlzIGluIHByb2dyZXNzICovCisJQkZBX1RJTl9TTV9XSU9fTE9HT1VUID0gNSwJLyogIFByb2Nlc3Npbmcgb2YgUFJMTyByZXEgZnJvbQorCQkJCQkgKiAgIEluaXRpYXRvciBpcyBpbiBwcm9ncmVzcworCQkJCQkgKi8KKwlCRkFfVElOX1NNX1dPU19MT0dPVVQgPSA2LAkvKiAgUHJvY2Vzc2luZyBvZiBQUkxPIHJlcSBmcm9tCisJCQkJCSAqICAgSW5pdGlhdG9yIGlzIGluIHByb2dyZXNzCisJCQkJCSAqLworCUJGQV9USU5fU01fV0lPX0NMRUFOID0gNywJLyogIFdhaXRpbmcgZm9yIElPIGNsZWFudXAgYmVmb3JlIHRpbgorCQkJCQkgKiAgIGlzIG9mZmxpbmUuIFRoaXMgY2FuIGJlIHRyaWdnZXJlZAorCQkJCQkgKiAgIGJ5IFJQT1JUIExPR08gKHJjdmQvc2VudCkgb3IgYnkKKwkJCQkJICogICBQUkxPIChyY3ZkL3NlbnQpCisJCQkJCSAqLworfTsKKworc3RydWN0IGJmYV9wcmxpX3JlcV9zIHsKKwlzdHJ1Y3QgZmNoc19zIGZjaHM7CisJc3RydWN0IGZjX3BybGlfcyBwcmxpX3BheWxvYWQ7Cit9OworCitzdHJ1Y3QgYmZhX3BybG9fcmVxX3MgeworCXN0cnVjdCBmY2hzX3MgZmNoczsKKwlzdHJ1Y3QgZmNfcHJsb19zIHBybG9fcGF5bG9hZDsKK307CisKK3ZvaWQgYmZhX3Rpbl9zZW5kX2xvZ2luX3JzcCh2b2lkICpiZmFfdGluLCB1MzIgbG9naW5fcnNwLAorCQkJCXN0cnVjdCBmY19sc19yanRfcyByanRfcGF5bG9hZCk7Cit2b2lkIGJmYV90aW5fc2VuZF9sb2dvdXRfcnNwKHZvaWQgKmJmYV90aW4sIHUzMiBsb2dvdXRfcnNwLAorCQkJCXN0cnVjdCBmY19sc19yanRfcyByanRfcGF5bG9hZCk7CisvKioKKyAqIEZDUyB0YXJnZXQgcG9ydCBzdGF0aXN0aWNzCisgKi8KK3N0cnVjdCBiZmFfdGluX3N0YXRzX3MgeworCXUzMiBvbmxpbmVzOwkvKiAgSVROIG5leHVzIG9ubGluZXMgKFBSTEkgZG9uZSkgKi8KKwl1MzIgb2ZmbGluZXM7CS8qICBJVE4gTmV4dXMgb2ZmbGluZXMgCSovCisJdTMyIHBybGlfcmVxX3BhcnNlX2VycjsJLyogIHBybGkgcmVxIHBhcnNpbmcgZXJyb3JzICovCisJdTMyIHBybGlfcnNwX3JqdDsJLyogIG51bSBwcmxpIHJzcCByZWplY3RzIHNlbnQgKi8KKwl1MzIgcHJsaV9yc3BfYWNjOwkvKiAgbnVtIHBybGkgcnNwIGFjY2VwdHMgc2VudCAqLworCXUzMiBjbGVhbnVwX2NvbXBzOwkvKiAgSVROIGNsZWFudXAgY29tcGxldGlvbnMgKi8KK307CisKKy8qKgorICogRkNTIHRpbiBhdHRyaWJ1dGVzIHJldHVybmVkIGluIHF1ZXJpZXMKKyAqLworc3RydWN0IGJmYV90aW5fYXR0cl9zIHsKKwllbnVtIGJmYV90aW5fc3RhdGVfZSBzdGF0ZTsKKwl1OAlzZXFfcmV0cnk7ICAgIC8qICBTZXF1ZW5jZSByZXRyeSBzdXBwb3J0ZWQgICAgICAqLworCXU4CXJzdmRbM107Cit9OworCisvKioKKyAqIEJGQSBUSU4gYXN5bmMgZXZlbnQgZGF0YSBzdHJ1Y3R1cmUgZm9yIEJGQUwKKyAqLworZW51bSBiZmFfdGluX2Flbl9ldmVudCB7CisJQkZBX1RJTl9BRU5fT05MSU5FIAk9IDEsCS8qICBUYXJnZXQgb25saW5lICovCisJQkZBX1RJTl9BRU5fT0ZGTElORSAJPSAyLAkvKiAgVGFyZ2V0IG9mZmxpbmUgKi8KKwlCRkFfVElOX0FFTl9ESVNDT05ORUNUCT0gMywJLyogIFRhcmdldCBkaXNjb25uZWN0ZWQgKi8KK307CisKKy8qKgorICogQkZBIFRJTiBldmVudCBkYXRhIHN0cnVjdHVyZS4KKyAqLworc3RydWN0IGJmYV90aW5fYWVuX2RhdGFfcyB7CisJdTE2IHZmX2lkOwkvKiAgdmZfaWQgb2YgdGhlIElUIG5leHVzICovCisJdTE2IHJzdmRbM107CisJd3duX3QgbHB3d247CS8qICBXV04gb2YgbG9naWNhbCBwb3J0ICovCisJd3duX3QgcnB3d247CS8qICBXV04gb2YgcmVtb3RlKHRhcmdldCkgcG9ydCAqLworfTsKKworLyoqCisgKiBCZWxvdyBBUElzIGFyZSBuZWVkZWQgZnJvbSBCRkEgZHJpdmVyCisgKiBNb3ZlIHRoZXNlIHRvIEJGQSBkcml2ZXIgcHVibGljIGhlYWRlciBmaWxlPworICovCisvKiAgVElOIHJjdmQgbmV3IFBSTEkgJiBnZXRzIGJmYWRfdGluX3QgcHRyIGZyb20gZHJpdmVyIHRoaXMgY2FsbGJhY2sgKi8KK3ZvaWQgKmJmYWRfdGluX3JjdmRfbG9naW5fcmVxKHZvaWQgKmJmYWRfdG1fcG9ydCwgdm9pZCAqYmZhX3RpbiwKKwkJCQl3d25fdCBycF93d24sIHUzMiBycF9mY2lkLAorCQkJCXN0cnVjdCBiZmFfcHJsaV9yZXFfcyBwcmxpX3JlcSk7CisvKiAgVElOIHJjdmQgbmV3IFBSTE8gKi8KK3ZvaWQgYmZhZF90aW5fcmN2ZF9sb2dvdXRfcmVxKHZvaWQgKmJmYWRfdGluLCB3d25fdCBycF93d24sIHUzMiBycF9mY2lkLAorCQkJCXN0cnVjdCBiZmFfcHJsb19yZXFfcyBwcmxvX3JlcSk7CisvKiAgVElOIGlzIG9ubGluZSBhbmQgcmVhZHkgZm9yIElPICovCit2b2lkIGJmYWRfdGluX29ubGluZSh2b2lkICpiZmFkX3Rpbik7CisvKiAgVElOIGlzIG9mZmxpbmUgYW5kIEJGQSBkcml2ZXIgY2FuIHNodXRkb3duIGl0cyB1cHBlciBzdGFjayAqLwordm9pZCBiZmFkX3Rpbl9vZmZsaW5lKHZvaWQgKmJmYWRfdGluKTsKKy8qICBUSU4gZG9lcyBub3QgbmVlZCB0aGlzIEJGQSBkcml2ZXIgdGluIHRhZyBhbnltb3JlLCBzbyBjYW4gYmUgZnJlZWQgKi8KK3ZvaWQgYmZhZF90aW5fcmVzX2ZyZWUodm9pZCAqYmZhZF90aW4pOworCisjZW5kaWYgLyogX19CRkFfREVGU19USU5fSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc190c2Vuc29yLmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc190c2Vuc29yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzE4ODFkMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX3RzZW5zb3IuaApAQCAtMCwwICsxLDQzIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX19CRkFfREVGU19UU0VOU09SX0hfXworI2RlZmluZSBfX0JGQV9ERUZTX1RTRU5TT1JfSF9fCisKKyNpbmNsdWRlIDxiZmFfb3NfaW5jLmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc190eXBlcy5oPgorCisvKioKKyAqIFRlbXBlcmF0dXJlIHNlbnNvciBzdGF0dXMgdmFsdWVzCisgKi8KK2VudW0gYmZhX3RzZW5zb3Jfc3RhdHVzIHsKKwlCRkFfVFNFTlNPUl9TVEFUVVNfVU5LTk9XTiAgID0gMSwgICAvKiAgdW5rb3duIHN0YXR1cyAqLworCUJGQV9UU0VOU09SX1NUQVRVU19GQVVMVFkgICAgPSAyLCAgIC8qICBzZW5zb3IgaXMgZmF1bHR5ICovCisJQkZBX1RTRU5TT1JfU1RBVFVTX0JFTE9XX01JTiA9IDMsICAgLyogIHRlbXBlcmF0dXJlIGJlbG93IG1pbmludW0gKi8KKwlCRkFfVFNFTlNPUl9TVEFUVVNfTk9NSU5BTCAgID0gNCwgICAvKiAgbm9ybWFsIHRlbXBlcmF0dXJlICovCisJQkZBX1RTRU5TT1JfU1RBVFVTX0FCT1ZFX01BWCA9IDUsICAgLyogIHRlbXBlcmF0dXJlIGFib3ZlIG1heGltdW0gKi8KK307CisKKy8qKgorICogVGVtcGVyYXR1cmUgc2Vuc29yIGF0dHJpYnV0ZQorICovCitzdHJ1Y3QgYmZhX3RzZW5zb3JfYXR0cl9zIHsKKwllbnVtIGJmYV90c2Vuc29yX3N0YXR1cyBzdGF0dXM7CS8qICB0ZW1wZXJhdHVyZSBzZW5zb3Igc3RhdHVzICovCisJdTMyICAgICAgICAJdmFsdWU7CS8qICBjdXJyZW50IHRlbXBlcmF0dXJlIGluIGNlbHNpdXMgKi8KK307CisKKyNlbmRpZiAvKiBfX0JGQV9ERUZTX1RTRU5TT1JfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc190eXBlcy5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfdHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MzQ4MzMyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfdHlwZXMuaApAQCAtMCwwICsxLDMwIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaWZuZGVmIF9fQkZBX0RFRlNfVFlQRVNfSF9fCisjZGVmaW5lIF9fQkZBX0RFRlNfVFlQRVNfSF9fCisKKyNpbmNsdWRlIDxiZmFfb3NfaW5jLmg+CisKK2VudW0gYmZhX2Jvb2xlYW4geworCUJGQV9GQUxTRSA9IDAsCisJQkZBX1RSVUUgID0gMQorfTsKKyNkZWZpbmUgYmZhX2Jvb2xlYW5fdCBlbnVtIGJmYV9ib29sZWFuCisKKyNkZWZpbmUgQkZBX1NUUklOR18zMgkzMgorCisjZW5kaWYgLyogX19CRkFfREVGU19UWVBFU19IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX3ZlcnNpb24uaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX3ZlcnNpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODkwMmEyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfdmVyc2lvbi5oCkBAIC0wLDAgKzEsMjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpZm5kZWYgX19CRkFfREVGU19WRVJTSU9OX0hfXworI2RlZmluZSBfX0JGQV9ERUZTX1ZFUlNJT05fSF9fCisKKyNkZWZpbmUgQkZBX1ZFUlNJT05fTEVOCQk2NAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX3ZmLmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc192Zi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyMzViZTUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc192Zi5oCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0JGQV9ERUZTX1ZGX0hfXworI2RlZmluZSBfX0JGQV9ERUZTX1ZGX0hfXworCisjaW5jbHVkZSA8YmZhX29zX2luYy5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfcG9ydC5oPgorI2luY2x1ZGUgPHByb3RvY29sL3R5cGVzLmg+CisKKy8qKgorICogVkYgc3RhdGVzCisgKi8KK2VudW0gYmZhX3ZmX3N0YXRlIHsKKwlCRkFfVkZfVU5JTklUICAgID0gMCwJLyogIGZhYnJpYyBpcyBub3QgeWV0IGluaXRpYWxpemVkICovCisJQkZBX1ZGX0xJTktfRE9XTiA9IDEsCS8qICBsaW5rIGlzIGRvd24gKi8KKwlCRkFfVkZfRkxPR0kgICAgID0gMiwJLyogIGZsb2dpIGlzIGluIHByb2dyZXNzICovCisJQkZBX1ZGX0FVVEggICAgICA9IDMsCS8qICBhdXRoZW50aWNhdGlvbiBpbiBwcm9ncmVzcyAqLworCUJGQV9WRl9OT0ZBQlJJQyAgPSA0LAkvKiAgZmFicmljIGlzIG5vdCBwcmVzZW50ICovCisJQkZBX1ZGX09OTElORSAgICA9IDUsCS8qICBsb2dpbiB0byBmYWJyaWMgaXMgY29tcGxldGUgKi8KKwlCRkFfVkZfRVZGUCAgICAgID0gNiwJLyogIEVWRlAgaXMgaW4gcHJvZ3Jlc3MgKi8KKwlCRkFfVkZfSVNPTEFURUQgID0gNywJLyogIHBvcnQgaXNvbGF0ZWQgZHVlIHRvIHZmX2lkIG1pc21hdGNoICovCit9OworCisvKioKKyAqIFZGIHN0YXRpc3RpY3MKKyAqLworc3RydWN0IGJmYV92Zl9zdGF0c19zIHsKKwl1MzIgICAgICAgIGZsb2dpX3NlbnQ7CS8qICBOdW0gRkxPR0lzIHNlbnQgCQkqLworCXUzMiAgICAgICAgZmxvZ2lfcnNwX2VycjsJLyogIEZMT0dJIHJlc3BvbnNlIGVycm9ycyAJKi8KKwl1MzIgICAgICAgIGZsb2dpX2FjY19lcnI7CS8qICBGTE9HSSBhY2NlcHQgZXJyb3JzIAkqLworCXUzMiAgICAgICAgZmxvZ2lfYWNjZXB0czsJLyogIEZMT0dJIGFjY2VwdHMgcmVjZWl2ZWQgCSovCisJdTMyICAgICAgICBmbG9naV9yZWplY3RzOwkvKiAgRkxPR0kgcmVqZWN0cyByZWNlaXZlZCAJKi8KKwl1MzIgICAgICAgIGZsb2dpX3Vua25vd25fcnNwOyAvKiAgVW5rbm93biByZXNwb25zZXMgZm9yIEZMT0dJICovCisJdTMyICAgICAgICBmbG9naV9hbGxvY193YWl0OyAvKiAgQWxsb2NhdGlvbiB3YWl0cyBwcmlvciB0bworCQkJCQkgICAqIHNlbmRpbmcgRkxPR0kKKwkJCQkJICAgKi8KKwl1MzIgICAgICAgIGZsb2dpX3JjdmQ7CS8qICBGTE9HSXMgcmVjZWl2ZWQgKi8KKwl1MzIgICAgICAgIGZsb2dpX3JlamVjdGVkOwkvKiAgSW5jb21pbmcgRkxPR0lzIHJlamVjdGVkICovCisJdTMyICAgICAgICBmYWJyaWNfb25saW5lczsJLyogIEludGVybmFsIGZhYnJpYyBvbmxpbmUKKwkJCQkJICogbm90aWZpY2F0aW9uIHNlbnQgdG8gb3RoZXIKKwkJCQkJICogbW9kdWxlcworCQkJCQkgKi8KKwl1MzIgICAgICAgIGZhYnJpY19vZmZsaW5lczsgLyogIEludGVybmFsIGZhYnJpYyBvZmZsaW5lCisJCQkJCSAgKiBub3RpZmljYXRpb24gc2VudCB0byBvdGhlcgorCQkJCQkgICogbW9kdWxlcworCQkJCQkgICovCisJdTMyICAgICAgICByZXN2ZDsKK307CisKKy8qKgorICogVkYgYXR0cmlidXRlcyByZXR1cm5lZCBpbiBxdWVyaWVzCisgKi8KK3N0cnVjdCBiZmFfdmZfYXR0cl9zIHsKKwllbnVtIGJmYV92Zl9zdGF0ZSAgc3RhdGU7CQkvKiAgVkYgc3RhdGUgKi8KKwl1MzIgICAgICAgIHJzdmQ7CisJd3duX3QgICAgICAgICAgIGZhYnJpY19uYW1lOwkvKiAgZmFicmljIG5hbWUgKi8KK307CisKKyNlbmRpZiAvKiBfX0JGQV9ERUZTX1ZGX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfdnBvcnQuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX3Zwb3J0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWYwMjFmNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX3Zwb3J0LmgKQEAgLTAsMCArMSw5MSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9fQkZBX0RFRlNfVlBPUlRfSF9fCisjZGVmaW5lIF9fQkZBX0RFRlNfVlBPUlRfSF9fCisKKyNpbmNsdWRlIDxiZmFfb3NfaW5jLmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc19wb3J0Lmg+CisjaW5jbHVkZSA8cHJvdG9jb2wvdHlwZXMuaD4KKworLyoqCisgKiBWUE9SVCBzdGF0ZXMKKyAqLworZW51bSBiZmFfdnBvcnRfc3RhdGUgeworCUJGQV9GQ1NfVlBPUlRfVU5JTklUIAkJPSAwLAorCUJGQV9GQ1NfVlBPUlRfQ1JFQVRFRCAJCT0gMSwKKwlCRkFfRkNTX1ZQT1JUX09GRkxJTkUgCQk9IDEsCisJQkZBX0ZDU19WUE9SVF9GRElTQ19TRU5EIAk9IDIsCisJQkZBX0ZDU19WUE9SVF9GRElTQyAJCT0gMywKKwlCRkFfRkNTX1ZQT1JUX0ZESVNDX1JFVFJZIAk9IDQsCisJQkZBX0ZDU19WUE9SVF9PTkxJTkUgCQk9IDUsCisJQkZBX0ZDU19WUE9SVF9ERUxFVElORyAJCT0gNiwKKwlCRkFfRkNTX1ZQT1JUX0NMRUFOVVAgCQk9IDYsCisJQkZBX0ZDU19WUE9SVF9MT0dPX1NFTkQgCT0gNywKKwlCRkFfRkNTX1ZQT1JUX0xPR08gCQkJPSA4LAorCUJGQV9GQ1NfVlBPUlRfRVJST1IJCQk9IDksCisJQkZBX0ZDU19WUE9SVF9NQVhfU1RBVEUsCit9OworCisvKioKKyAqIHZwb3J0IHN0YXRpc3RpY3MKKyAqLworc3RydWN0IGJmYV92cG9ydF9zdGF0c19zIHsKKwlzdHJ1Y3QgYmZhX3BvcnRfc3RhdHNfcyBwb3J0X3N0YXRzOwkvKiAgYmFzZSBjbGFzcyAocG9ydCkgc3RhdHMgKi8KKwkvKgorCSAqIFRPRE8gLSByZW1vdmUKKwkgKi8KKworCXUzMiAgICAgICAgZmRpc2Nfc2VudDsJLyogIG51bSBmZGlzYyBzZW50ICovCisJdTMyICAgICAgICBmZGlzY19hY2NlcHRzOwkvKiAgZmRpc2MgYWNjZXB0cyAqLworCXUzMiAgICAgICAgZmRpc2NfcmV0cmllczsJLyogIGZkaXNjIHJldHJpZXMgKi8KKwl1MzIgICAgICAgIGZkaXNjX3RpbWVvdXRzOwkvKiAgZmRpc2MgdGltZW91dHMgKi8KKwl1MzIgICAgICAgIGZkaXNjX3JzcF9lcnI7CS8qICBmZGlzYyByZXNwb25zZSBlcnJvciAqLworCXUzMiAgICAgICAgZmRpc2NfYWNjX2JhZDsJLyogIGJhZCBmZGlzYyBhY2NlcHRzICovCisJdTMyICAgICAgICBmZGlzY19yZWplY3RzOwkvKiAgZmRpc2MgcmVqZWN0cyAqLworCXUzMiAgICAgICAgZmRpc2NfdW5rbm93bl9yc3A7CisJLyoKKwkgKiE8IGZkaXNjIHJzcCB1bmtub3duIGVycm9yCisJICovCisJdTMyICAgICAgICBmZGlzY19hbGxvY193YWl0Oy8qICBmZGlzYyByZXEgKGZjeHApYWxsb2Mgd2FpdCAqLworCisJdTMyICAgICAgICBsb2dvX2FsbG9jX3dhaXQ7LyogIGxvZ28gcmVxIChmY3hwKSBhbGxvYyB3YWl0ICovCisJdTMyICAgICAgICBsb2dvX3NlbnQ7CS8qICBsb2dvIHNlbnQgKi8KKwl1MzIgICAgICAgIGxvZ29fYWNjZXB0czsJLyogIGxvZ28gYWNjZXB0cyAqLworCXUzMiAgICAgICAgbG9nb19yZWplY3RzOwkvKiAgbG9nbyByZWplY3RzICovCisJdTMyICAgICAgICBsb2dvX3JzcF9lcnI7CS8qICBsb2dvIHJzcCBlcnJvcnMgKi8KKwl1MzIgICAgICAgIGxvZ29fdW5rbm93bl9yc3A7CisJCQkvKiAgbG9nbyByc3AgdW5rbm93biBlcnJvcnMgKi8KKworCXUzMiAgICAgICAgZmFiX25vX25waXY7CS8qICBmYWJyaWMgZG9lcyBub3Qgc3VwcG9ydCBucGl2ICovCisKKwl1MzIgICAgICAgIGZhYl9vZmZsaW5lOwkvKiAgb2ZmbGluZSBldmVudHMgZnJvbSBmYWIgU00gKi8KKwl1MzIgICAgICAgIGZhYl9vbmxpbmU7CS8qICBvbmxpbmUgZXZlbnRzIGZyb20gZmFiIFNNICovCisJdTMyICAgICAgICBmYWJfY2xlYW51cDsJLyogIGNsZWFudXAgcmVxdWVzdCBmcm9tIGZhYiBTTSAqLworCXUzMiAgICAgICAgcnN2ZDsKK307CisKKy8qKgorICogQkZBIHZwb3J0IGF0dHJpYnV0ZSByZXR1cm5lZCBpbiBxdWVyaWVzCisgKi8KK3N0cnVjdCBiZmFfdnBvcnRfYXR0cl9zIHsKKwlzdHJ1Y3QgYmZhX3BvcnRfYXR0cl9zICAgcG9ydF9hdHRyOyAvKiAgYmFzZSBjbGFzcyAocG9ydCkgYXR0cmlidXRlcyAqLworCWVudW0gYmZhX3Zwb3J0X3N0YXRlIHZwb3J0X3N0YXRlOyAvKiAgdnBvcnQgc3RhdGUgKi8KKwl1MzIgICAgICAgICAgcnN2ZDsKK307CisKKyNlbmRpZiAvKiBfX0JGQV9ERUZTX1ZQT1JUX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2ZjYi9iZmFfZmNiLmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZmNiL2JmYV9mY2IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTYzYjBiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2ZjYi9iZmFfZmNiLmgKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisvKioKKyAqICBiZmFfZmNiLmggQkZBIEZDUyBjYWxsYmFjayBpbnRlcmZhY2VzCisgKi8KKworI2lmbmRlZiBfX0JGQV9GQ0JfSF9fCisjZGVmaW5lIF9fQkZBX0ZDQl9IX18KKworLyoqCisgKiAgZmNiIE1haW4gZmNzIGNhbGxiYWNrcworICovCisKK3ZvaWQgYmZhX2ZjYl9leGl0KHN0cnVjdCBiZmFkX3MgKmJmYWQpOworCisKKworI2VuZGlmIC8qIF9fQkZBX0ZDQl9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9mY2IvYmZhX2ZjYl9mY3BpbS5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2ZjYi9iZmFfZmNiX2ZjcGltLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTZjNzBhZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9mY2IvYmZhX2ZjYl9mY3BpbS5oCkBAIC0wLDAgKzEsNzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworLyoqCisqIDogYmZhZF9mY3BpbS5oIC0gQkZBIEZDUyBpbml0aWF0b3IgbW9kZSByZW1vdGUgcG9ydCBjYWxsYmFja3MKKyAqLworCisjaWZuZGVmIF9fQkZBRF9GQ0JfRkNQSU1fSF9fCisjZGVmaW5lIF9fQkZBRF9GQ0JfRkNQSU1fSF9fCisKK3N0cnVjdCBiZmFkX2l0bmltX3M7CisKKy8qCisgKiBSUElNIGNhbGxiYWNrcworICovCisKKy8qKgorICogCU1lbW9yeSBhbGxvY2F0aW9uIGZvciByZW1vdGUgcG9ydCBpbnN0YW5jZS4gQ2FsbGVkIGJlZm9yZSBQUkxJIGlzCisgKiAJaW5pdGlhdGVkIHRvIHRoZSByZW1vdGUgdGFyZ2V0IHBvcnQuCisgKgorICogQHBhcmFtW2luXSBiZmFkCQktIGRyaXZlciBpbnN0YW5jZQorICogQHBhcmFtW291dF0gaXRuaW0JCS0gRkNTIHJlbW90ZSBwb3J0IChJTSkgaW5zdGFuY2UKKyAqIEBwYXJhbVtvdXRdIGl0bmltX2RydgktIGRyaXZlciByZW1vdGUgcG9ydCAoSU0pIGluc3RhbmNlCisgKgorICogQHJldHVybiBOb25lCisgKi8KK3ZvaWQgYmZhX2ZjYl9pdG5pbV9hbGxvYyhzdHJ1Y3QgYmZhZF9zICpiZmFkLCBzdHJ1Y3QgYmZhX2Zjc19pdG5pbV9zICoqaXRuaW0sCisJCQkJICAgIHN0cnVjdCBiZmFkX2l0bmltX3MgKippdG5pbV9kcnYpOworCisvKioKKyAqIAkJRnJlZSByZW1vdGUgcG9ydCAoSU0pIGluc3RhbmNlLgorICoKKyAqIEBwYXJhbVtpbl0gYmZhZAktIGRyaXZlciBpbnN0YW5jZQorICogQHBhcmFtW2luXSBpdG5pbV9kcnYJLSBkcml2ZXIgcmVtb3RlIHBvcnQgaW5zdGFuY2UKKyAqCisgKiBAcmV0dXJuIE5vbmUKKyAqLwordm9pZCAgICAgICAgICAgIGJmYV9mY2JfaXRuaW1fZnJlZShzdHJ1Y3QgYmZhZF9zICpiZmFkLAorCQkJCSAgIHN0cnVjdCBiZmFkX2l0bmltX3MgKml0bmltX2Rydik7CisKKy8qKgorICogCU5vdGlmaWNhdGlvbiBvZiB3aGVuIGxvZ2luIHdpdGggYSByZW1vdGUgdGFyZ2V0IGRldmljZSBpcyBjb21wbGV0ZS4KKyAqCisgKiBAcGFyYW1baW5dIGl0bmltX2RydgktIGRyaXZlciByZW1vdGUgcG9ydCBpbnN0YW5jZQorICoKKyAqIEByZXR1cm4gTm9uZQorICovCit2b2lkICAgICAgICAgICAgYmZhX2ZjYl9pdG5pbV9vbmxpbmUoc3RydWN0IGJmYWRfaXRuaW1fcyAqaXRuaW1fZHJ2KTsKKworLyoqCisgKiAJTm90aWZpY2F0aW9uIHdoZW4gbG9naW4gd2l0aCB0aGUgcmVtb3RlIGRldmljZSBpcyBzZXZlcmVkLgorICoKKyAqIEBwYXJhbVtpbl0gaXRuaW1fZHJ2CS0gZHJpdmVyIHJlbW90ZSBwb3J0IGluc3RhbmNlCisgKgorICogQHJldHVybiBOb25lCisgKi8KK3ZvaWQgICAgICAgICAgICBiZmFfZmNiX2l0bmltX29mZmxpbmUoc3RydWN0IGJmYWRfaXRuaW1fcyAqaXRuaW1fZHJ2KTsKKwordm9pZCAgICAgICAgICAgIGJmYV9mY2JfaXRuaW1fdG92X2JlZ2luKHN0cnVjdCBiZmFkX2l0bmltX3MgKml0bmltX2Rydik7Cit2b2lkICAgICAgICAgICAgYmZhX2ZjYl9pdG5pbV90b3Yoc3RydWN0IGJmYWRfaXRuaW1fcyAqaXRuaW1fZHJ2KTsKKworI2VuZGlmIC8qIF9fQkZBRF9GQ0JfRkNQSU1fSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZmNiL2JmYV9mY2JfcG9ydC5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2ZjYi9iZmFfZmNiX3BvcnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZmQ3Zjk4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2ZjYi9iZmFfZmNiX3BvcnQuaApAQCAtMCwwICsxLDExMyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisvKioKKyAqICBiZmFfZmNiX3BvcnQuaCBCRkEgRkNTIHZpcnR1YWwgcG9ydCBkcml2ZXIgaW50ZXJmYWNlcworICovCisKKyNpZm5kZWYgX19CRkFfRkNCX1BPUlRfSF9fCisjZGVmaW5lIF9fQkZBX0ZDQl9QT1JUX0hfXworCisjaW5jbHVkZSA8ZmNiL2JmYV9mY2JfdnBvcnQuaD4KKy8qKgorICogIGZjc19wb3J0X2ZjYiBGQ1MgcG9ydCBkcml2ZXIgaW50ZXJmYWNlcworICovCisKKy8qCisgKiBGb3J3YXJkIGRlY2xhcmF0aW9ucworICovCitzdHJ1Y3QgYmZhZF9wb3J0X3M7CisKKy8qCisgKiBDYWxsYmFjayBmdW5jdGlvbnMgZnJvbSBCRkEgRkNTIHRvIGRyaXZlcgorICovCisKKy8qKgorICogCUNhbGwgZnJvbSBGQ1MgdG8gZHJpdmVyIG1vZHVsZSB3aGVuIGEgcG9ydCBpcyBpbnN0YW50aWF0ZWQuIFRoZSBwb3J0CisgKiAJY2FuIGJlIGEgYmFzZSBwb3J0IG9yIGEgdmlydHVhbCBwb3J0IHdpdGggaW4gdGhlIGJhc2UgZmFicmljIG9yCisgKiAJYSB2aXJ0dWFsIGZhYnJpYy4KKyAqCisgKiAgT24gdGhpcyBjYWxsYmFjaywgZHJpdmVyIGlzIHN1cHBvc2VkIHRvIGNyZWF0ZSBzY3NpX2hvc3QsIHNjc2lfdGd0IG9yCisgKiAgbmV0d29yayBpbnRlcmZhY2VzIGJhc2VzIG9uIHBvcnRzIHBlcnNvbmFsaXR5L3JvbGVzLgorICoKKyAqICAgICAgYmFzZSBwb3J0IG9mIGJhc2UgZmFicmljOgl2Zl9kcnYgPT0gTlVMTCAmJiB2cF9kcnYgPT0gTlVMTAorICogICAgICB2cG9ydCBvZiBiYXNlIGZhYnJpYzoJCXZmX2RydiA9PSBOVUxMICYmIHZwX2RydiAhPSBOVUxMCisgKiAgICAgIGJhc2UgcG9ydCBvZiBWRjoJCXZmX2RydiAhPSBOVUxMICYmIHZwX2RydiA9PSBOVUxMCisgKiAgICAgIHZwb3J0IG9mIFZGOgkJCXZmX2RydiAhPSBOVUxMICYmIHZwX2RydiAhPSBOVUxMCisgKgorICogQHBhcmFtW2luXSBiZmFkICAgLSBkcml2ZXIgaW5zdGFuY2UKKyAqIEBwYXJhbVtpbl0gcG9ydCAgIC0gRkNTIHBvcnQgaW5zdGFuY2UKKyAqIEBwYXJhbVtpbl0gcm9sZXMgIC0gcG9ydCByb2xlczogSU0sIFRNLCBJUAorICogQHBhcmFtW2luXSB2Zl9kcnYgLSBWRiBkcml2ZXIgaW5zdGFuY2UsIE5VTEwgaWYgYmFzZSBmYWJyaWMgKG5vIFZGKQorICogQHBhcmFtW2luXSB2cF9kcnYgLSB2cG9ydCBkcml2ZXIgaW5zdGFuY2UsIE5VTEwgaWYgYmFzZSBwb3J0CisgKgorICogQHJldHVybiBOb25lCisgKi8KK3N0cnVjdCBiZmFkX3BvcnRfcyAqYmZhX2ZjYl9wb3J0X25ldyhzdHJ1Y3QgYmZhZF9zICpiZmFkLAorCQkJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LAorCQkJZW51bSBiZmFfcG9ydF9yb2xlIHJvbGVzLCBzdHJ1Y3QgYmZhZF92Zl9zICp2Zl9kcnYsCisJCQlzdHJ1Y3QgYmZhZF92cG9ydF9zICp2cF9kcnYpOworCisvKioKKyAqIAlDYWxsIGZyb20gRkNTIHRvIGRyaXZlciBtb2R1bGUgd2hlbiBhIHBvcnQgaXMgZGVsZXRlZC4gVGhlIHBvcnQKKyAqIAljYW4gYmUgYSBiYXNlIHBvcnQgb3IgYSB2aXJ0dWFsIHBvcnQgd2l0aCBpbiB0aGUgYmFzZSBmYWJyaWMgb3IKKyAqIAlhIHZpcnR1YWwgZmFicmljLgorICoKKyAqIEBwYXJhbVtpbl0gYmZhZCAgIC0gZHJpdmVyIGluc3RhbmNlCisgKiBAcGFyYW1baW5dIHJvbGVzICAtIHBvcnQgcm9sZXM6IElNLCBUTSwgSVAKKyAqIEBwYXJhbVtpbl0gdmZfZHJ2IC0gVkYgZHJpdmVyIGluc3RhbmNlLCBOVUxMIGlmIGJhc2UgZmFicmljIChubyBWRikKKyAqIEBwYXJhbVtpbl0gdnBfZHJ2IC0gdnBvcnQgZHJpdmVyIGluc3RhbmNlLCBOVUxMIGlmIGJhc2UgcG9ydAorICoKKyAqIEByZXR1cm4gTm9uZQorICovCit2b2lkIGJmYV9mY2JfcG9ydF9kZWxldGUoc3RydWN0IGJmYWRfcyAqYmZhZCwgZW51bSBiZmFfcG9ydF9yb2xlIHJvbGVzLAorCQkJc3RydWN0IGJmYWRfdmZfcyAqdmZfZHJ2LCBzdHJ1Y3QgYmZhZF92cG9ydF9zICp2cF9kcnYpOworCisvKioKKyAqIAlOb3RpZmljYXRpb24gd2hlbiBwb3J0IHRyYW5zaXRpb25zIHRvIE9OTElORSBzdGF0ZS4KKyAqCisgKiBPbmxpbmUgbm90aWZpY2F0aW9uIGlzIGEgbG9naWNhbCBsaW5rIHVwIGZvciB0aGUgbG9jYWwgcG9ydC4gVGhpcworICogbm90aWZpY2F0aW9uIGlzIHNlbnQgYWZ0ZXIgYSBzdWNjZXNzZnVsbCBGTE9HSSwgb3IgYSBzdWNjZXNzZnVsCisgKiBsaW5rIGluaXRpYWxpemF0aW9uIGluIHByb3ZpYXRlLWxvb3Agb3IgTjJOIHRvcG9sb2dpZXMuCisgKgorICogQHBhcmFtW2luXSBiZmFkICAgLSBkcml2ZXIgaW5zdGFuY2UKKyAqIEBwYXJhbVtpbl0gcm9sZXMgIC0gcG9ydCByb2xlczogSU0sIFRNLCBJUAorICogQHBhcmFtW2luXSB2Zl9kcnYgLSBWRiBkcml2ZXIgaW5zdGFuY2UsIE5VTEwgaWYgYmFzZSBmYWJyaWMgKG5vIFZGKQorICogQHBhcmFtW2luXSB2cF9kcnYgLSB2cG9ydCBkcml2ZXIgaW5zdGFuY2UsIE5VTEwgaWYgYmFzZSBwb3J0CisgKgorICogQHJldHVybiBOb25lCisgKi8KK3ZvaWQgYmZhX2ZjYl9wb3J0X29ubGluZShzdHJ1Y3QgYmZhZF9zICpiZmFkLCBlbnVtIGJmYV9wb3J0X3JvbGUgcm9sZXMsCisJCQlzdHJ1Y3QgYmZhZF92Zl9zICp2Zl9kcnYsIHN0cnVjdCBiZmFkX3Zwb3J0X3MgKnZwX2Rydik7CisKKy8qKgorICogCU5vdGlmaWNhdGlvbiB3aGVuIHBvcnQgdHJhbnNpdGlvbnMgdG8gT0ZGTElORSBzdGF0ZS4KKyAqCisgKiBPZmZsaW5lIG5vdGlmaWNhdGlvbiBpcyBhIGxvZ2ljYWwgbGluayBkb3duIGZvciB0aGUgbG9jYWwgcG9ydC4KKyAqCisgKiBAcGFyYW1baW5dIGJmYWQgICAtIGRyaXZlciBpbnN0YW5jZQorICogQHBhcmFtW2luXSByb2xlcyAgLSBwb3J0IHJvbGVzOiBJTSwgVE0sIElQCisgKiBAcGFyYW1baW5dIHZmX2RydiAtIFZGIGRyaXZlciBpbnN0YW5jZSwgTlVMTCBpZiBiYXNlIGZhYnJpYyAobm8gVkYpCisgKiBAcGFyYW1baW5dIHZwX2RydiAtIHZwb3J0IGRyaXZlciBpbnN0YW5jZSwgTlVMTCBpZiBiYXNlIHBvcnQKKyAqCisgKiBAcmV0dXJuIE5vbmUKKyAqLwordm9pZCBiZmFfZmNiX3BvcnRfb2ZmbGluZShzdHJ1Y3QgYmZhZF9zICpiZmFkLCBlbnVtIGJmYV9wb3J0X3JvbGUgcm9sZXMsCisJCQlzdHJ1Y3QgYmZhZF92Zl9zICp2Zl9kcnYsIHN0cnVjdCBiZmFkX3Zwb3J0X3MgKnZwX2Rydik7CisKKworI2VuZGlmIC8qIF9fQkZBX0ZDQl9QT1JUX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2ZjYi9iZmFfZmNiX3Jwb3J0LmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZmNiL2JmYV9mY2JfcnBvcnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDI2MWJiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2ZjYi9iZmFfZmNiX3Jwb3J0LmgKQEAgLTAsMCArMSw4MCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisvKioKKyAqICBiZmFfZmNiX3Jwb3J0LmggQkZBIEZDUyBycG9ydCBkcml2ZXIgaW50ZXJmYWNlcworICovCisKKyNpZm5kZWYgX19CRkFfRkNCX1JQT1JUX0hfXworI2RlZmluZSBfX0JGQV9GQ0JfUlBPUlRfSF9fCisKKy8qKgorICogIGZjc19ycG9ydF9mY2IgUmVtb3RlIHBvcnQgZHJpdmVyIGludGVyZmFjZXMKKyAqLworCisKK3N0cnVjdCBiZmFkX3Jwb3J0X3M7CisKKy8qCisgKiBDYWxsYmFjayBmdW5jdGlvbnMgZnJvbSBCRkEgRkNTIHRvIGRyaXZlcgorICovCisKKy8qKgorICogCUNvbXBsZXRpb24gY2FsbGJhY2sgZm9yIGJmYV9mY3NfcnBvcnRfYWRkKCkuCisgKgorICogQHBhcmFtW2luXSBycG9ydF9kcnYgLSBkcml2ZXIgaW5zdGFuY2Ugb2YgcnBvcnQKKyAqCisgKiBAcmV0dXJuIE5vbmUKKyAqLwordm9pZCBiZmFfZmNiX3Jwb3J0X2FkZChzdHJ1Y3QgYmZhZF9ycG9ydF9zICpycG9ydF9kcnYpOworCisvKioKKyAqIAlDb21wbGV0aW9uIGNhbGxiYWNrIGZvciBiZmFfZmNzX3Jwb3J0X3JlbW92ZSgpLgorICoKKyAqIEBwYXJhbVtpbl0gcnBvcnRfZHJ2IC0gZHJpdmVyIGluc3RhbmNlIG9mIHJwb3J0CisgKgorICogQHJldHVybiBOb25lCisgKi8KK3ZvaWQgYmZhX2ZjYl9ycG9ydF9yZW1vdmUoc3RydWN0IGJmYWRfcnBvcnRfcyAqcnBvcnRfZHJ2KTsKKworLyoqCisgKiAJCUNhbGwgdG8gYWxsb2NhdGUgYSBycG9ydCBpbnN0YW5jZS4KKyAqCisgKiBAcGFyYW1baW5dIGJmYWQgLSBkcml2ZXIgaW5zdGFuY2UKKyAqIEBwYXJhbVtvdXRdIHJwb3J0IC0gQkZBIEZDUyBpbnN0YW5jZSBvZiBycG9ydAorICogQHBhcmFtW291dF0gcnBvcnRfZHJ2IC0gZHJpdmVyIGluc3RhbmNlIG9mIHJwb3J0CisgKgorICogQHJldHZhbCBCRkFfU1RBVFVTX09LIC0gc3VjY2Vzc2Z1bGx5IGFsbG9jYXRlZAorICogQHJldHZhbCBCRkFfU1RBVFVTX0VOT01FTSAtIGNhbm5vdCBhbGxvY2F0ZQorICovCitiZmFfc3RhdHVzX3QgYmZhX2ZjYl9ycG9ydF9hbGxvYyhzdHJ1Y3QgYmZhZF9zICpiZmFkLAorCQkJc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqKnJwb3J0LAorCQkJc3RydWN0IGJmYWRfcnBvcnRfcyAqKnJwb3J0X2Rydik7CisKKy8qKgorICogCUNhbGwgdG8gZnJlZSBycG9ydCBtZW1vcnkgcmVzb3VyY2VzLgorICoKKyAqIEBwYXJhbVtpbl0gYmZhZCAtIGRyaXZlciBpbnN0YW5jZQorICogQHBhcmFtW2luXSBycG9ydF9kcnYgLSBkcml2ZXIgaW5zdGFuY2Ugb2YgcnBvcnQKKyAqCisgKiBAcmV0dXJuIE5vbmUKKyAqLwordm9pZCBiZmFfZmNiX3Jwb3J0X2ZyZWUoc3RydWN0IGJmYWRfcyAqYmZhZCwgc3RydWN0IGJmYWRfcnBvcnRfcyAqKnJwb3J0X2Rydik7CisKKworCisjZW5kaWYgLyogX19CRkFfRkNCX1JQT1JUX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2ZjYi9iZmFfZmNiX3ZmLmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZmNiL2JmYV9mY2JfdmYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZmQzZmFjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2ZjYi9iZmFfZmNiX3ZmLmgKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisvKioKKyAqICBiZmFfZmNiX3ZmLmggQkZBIEZDUyB2aXJ0dWFsIGZhYnJpYyBkcml2ZXIgaW50ZXJmYWNlcworICovCisKKyNpZm5kZWYgX19CRkFfRkNCX1ZGX0hfXworI2RlZmluZSBfX0JGQV9GQ0JfVkZfSF9fCisKKy8qKgorICogIGZjc192Zl9mY2IgVmlydHVhbCBmYWJyaWMgZHJpdmVyIGludHJlZmFjZXMKKyAqLworCisKK3N0cnVjdCBiZmFkX3ZmX3M7CisKKy8qCisgKiBDYWxsYmFjayBmdW5jdGlvbnMgZnJvbSBCRkEgRkNTIHRvIGRyaXZlcgorICovCisKKy8qKgorICogCUNvbXBsZXRpb24gY2FsbGJhY2sgZm9yIGJmYV9mY3NfdmZfc3RvcCgpLgorICoKKyAqIEBwYXJhbVtpbl0gdmZfZHJ2IC0gZHJpdmVyIGluc3RhbmNlIG9mIHZmCisgKgorICogQHJldHVybiBOb25lCisgKi8KK3ZvaWQgICAgICAgICAgICBiZmFfZmNiX3ZmX3N0b3Aoc3RydWN0IGJmYWRfdmZfcyAqdmZfZHJ2KTsKKworCisKKyNlbmRpZiAvKiBfX0JGQV9GQ0JfVkZfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZmNiL2JmYV9mY2JfdnBvcnQuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9mY2IvYmZhX2ZjYl92cG9ydC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzOWY0NzQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZmNiL2JmYV9mY2JfdnBvcnQuaApAQCAtMCwwICsxLDQ3IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKy8qKgorICogIGJmYV9mY2JfdnBvcnQuaCBCRkEgRkNTIHZpcnR1YWwgcG9ydCBkcml2ZXIgaW50ZXJmYWNlcworICovCisKKyNpZm5kZWYgX19CRkFfRkNCX1ZQT1JUX0hfXworI2RlZmluZSBfX0JGQV9GQ0JfVlBPUlRfSF9fCisKKy8qKgorICogIGZjc192cG9ydF9mY2IgVmlydHVhbCBwb3J0IGRyaXZlciBpbnRlcmZhY2VzCisgKi8KKworCitzdHJ1Y3QgYmZhZF92cG9ydF9zOworCisvKgorICogQ2FsbGJhY2sgZnVuY3Rpb25zIGZyb20gQkZBIEZDUyB0byBkcml2ZXIKKyAqLworCisvKioKKyAqIAlDb21wbGV0aW9uIGNhbGxiYWNrIGZvciBiZmFfZmNzX3Zwb3J0X2RlbGV0ZSgpLgorICoKKyAqIEBwYXJhbVtpbl0gdnBvcnRfZHJ2IC0gZHJpdmVyIGluc3RhbmNlIG9mIHZwb3J0CisgKgorICogQHJldHVybiBOb25lCisgKi8KK3ZvaWQgICAgICAgICAgICBiZmFfZmNiX3Zwb3J0X2RlbGV0ZShzdHJ1Y3QgYmZhZF92cG9ydF9zICp2cG9ydF9kcnYpOworCisKKworI2VuZGlmIC8qIF9fQkZBX0ZDQl9WUE9SVF9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9mY3MvYmZhX2Zjcy5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2Zjcy9iZmFfZmNzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjI3NjY5YwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9mY3MvYmZhX2Zjcy5oCkBAIC0wLDAgKzEsNzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0JGQV9GQ1NfSF9fCisjZGVmaW5lIF9fQkZBX0ZDU19IX18KKworI2luY2x1ZGUgPGNzL2JmYV9kZWJ1Zy5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfc3RhdHVzLmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc192ZXJzaW9uLmg+CisjaW5jbHVkZSA8YmZhLmg+CisjaW5jbHVkZSA8ZmNzL2JmYV9mY3NfZmFicmljLmg+CisKKyNkZWZpbmUgQkZBX0ZDU19PU19TVFJfTEVOICAJCTY0CisKK3N0cnVjdCBiZmFfZmNzX3N0YXRzX3MgeworCXN0cnVjdCB7CisJCXUzMiAgICAgICAgdW50YWdnZWQ7IC8qICB1bnRhZ2dlZCByZWNlaXZlIGZyYW1lcyAqLworCQl1MzIgICAgICAgIHRhZ2dlZDsJLyogIHRhZ2dlZCByZWNlaXZlIGZyYW1lcyAqLworCQl1MzIgICAgICAgIHZmaWRfdW5rbm93bjsJLyogIFZGIGlkIGlzIHVua25vd24gKi8KKwl9IHVmOworfTsKKworc3RydWN0IGJmYV9mY3NfZHJpdmVyX2luZm9fcyB7CisJdTggIHZlcnNpb25bQkZBX1ZFUlNJT05fTEVOXTsJCS8qICBEcml2ZXIgVmVyc2lvbiAqLworCXU4ICBob3N0X21hY2hpbmVfbmFtZVtCRkFfRkNTX09TX1NUUl9MRU5dOworCXU4ICBob3N0X29zX25hbWVbQkZBX0ZDU19PU19TVFJfTEVOXTsgLyogIE9TIG5hbWUgYW5kIHZlcnNpb24gKi8KKwl1OCAgaG9zdF9vc19wYXRjaFtCRkFfRkNTX09TX1NUUl9MRU5dOy8qICBwYXRjaCBvciBzZXJ2aWNlIHBhY2sgKi8KKwl1OCAgb3NfZGV2aWNlX25hbWVbQkZBX0ZDU19PU19TVFJfTEVOXTsgLyogIERyaXZlciBEZXZpY2UgTmFtZSAqLworfTsKKworc3RydWN0IGJmYV9mY3NfcyB7CisJc3RydWN0IGJmYV9zICAgICAgKmJmYTsJLyogIGNvcnJlc3BvbmRpbmcgQkZBIGJmYSBpbnN0YW5jZSAqLworCXN0cnVjdCBiZmFkX3MgICAgICAgICAqYmZhZDsgLyogIGNvcnJlc3BvbmRpbmcgQkRBIGRyaXZlciBpbnN0YW5jZSAqLworCXN0cnVjdCBiZmFfbG9nX21vZF9zICAqbG9nbTsJLyogIGRyaXZlciBsb2dnaW5nIG1vZHVsZSBpbnN0YW5jZSAqLworCXN0cnVjdCBiZmFfdHJjX21vZF9zICAqdHJjbW9kOwkvKiAgdHJhY2luZyBtb2R1bGUgKi8KKwlzdHJ1Y3QgYmZhX2Flbl9zICAgICAgKmFlbjsJLyogIGFlbiBjb21wb25lbnQgKi8KKwliZmFfYm9vbGVhbl90ICAgdmZfZW5hYmxlZDsJLyogIFZGIG1vZGUgaXMgZW5hYmxlZCAqLworCWJmYV9ib29sZWFuX3QgbWluX2NmZzsJCS8qIG1pbiBjZmcgZW5hYmxlZC9kaXNhYmxlZCAqLworCXUxNiAgICAgICAgcG9ydF92ZmlkOwkvKiAgcG9ydCBkZWZhdWx0IFZGIElEICovCisJc3RydWN0IGJmYV9mY3NfZHJpdmVyX2luZm9fcyBkcml2ZXJfaW5mbzsKKwlzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyBmYWJyaWM7IC8qICBiYXNlIGZhYnJpYyBzdGF0ZSBtYWNoaW5lICovCisJc3RydWN0IGJmYV9mY3Nfc3RhdHNfcwlzdGF0czsJLyogIEZDUyBzdGF0aXN0aWNzICovCisJc3RydWN0IGJmYV93Y19zICAgICAgIAl3YzsJLyogIHdhaXRpbmcgY291bnRlciAqLworfTsKKworLyoKKyAqIGJmYSBmY3MgQVBJIGZ1bmN0aW9ucworICovCit2b2lkIGJmYV9mY3NfaW5pdChzdHJ1Y3QgYmZhX2Zjc19zICpmY3MsIHN0cnVjdCBiZmFfcyAqYmZhLCBzdHJ1Y3QgYmZhZF9zICpiZmFkLAorCQkJYmZhX2Jvb2xlYW5fdCBtaW5fY2ZnKTsKK3ZvaWQgYmZhX2Zjc19kcml2ZXJfaW5mb19pbml0KHN0cnVjdCBiZmFfZmNzX3MgKmZjcywKKwkJCXN0cnVjdCBiZmFfZmNzX2RyaXZlcl9pbmZvX3MgKmRyaXZlcl9pbmZvKTsKK3ZvaWQgYmZhX2Zjc19leGl0KHN0cnVjdCBiZmFfZmNzX3MgKmZjcyk7Cit2b2lkIGJmYV9mY3NfdHJjX2luaXQoc3RydWN0IGJmYV9mY3NfcyAqZmNzLCBzdHJ1Y3QgYmZhX3RyY19tb2RfcyAqdHJjbW9kKTsKK3ZvaWQgYmZhX2Zjc19sb2dfaW5pdChzdHJ1Y3QgYmZhX2Zjc19zICpmY3MsIHN0cnVjdCBiZmFfbG9nX21vZF9zICpsb2dtb2QpOwordm9pZCBiZmFfZmNzX2Flbl9pbml0KHN0cnVjdCBiZmFfZmNzX3MgKmZjcywgc3RydWN0IGJmYV9hZW5fcyAqYWVuKTsKK3ZvaWQgCSAgCWJmYV9mY3Nfc3RhcnQoc3RydWN0IGJmYV9mY3NfcyAqZmNzKTsKKworI2VuZGlmIC8qIF9fQkZBX0ZDU19IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9mY3MvYmZhX2Zjc19hdXRoLmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZmNzL2JmYV9mY3NfYXV0aC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4YzRjOWYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZmNzL2JmYV9mY3NfYXV0aC5oCkBAIC0wLDAgKzEsODIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0JGQV9GQ1NfQVVUSF9IX18KKyNkZWZpbmUgX19CRkFfRkNTX0FVVEhfSF9fCisKK3N0cnVjdCBiZmFfZmNzX3M7CisKKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX3N0YXR1cy5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfYXV0aC5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfdmYuaD4KKyNpbmNsdWRlIDxjcy9iZmFfcS5oPgorI2luY2x1ZGUgPGNzL2JmYV9zbS5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfcHBvcnQuaD4KKyNpbmNsdWRlIDxmY3MvYmZhX2Zjc19scG9ydC5oPgorI2luY2x1ZGUgPHByb3RvY29sL2ZjX3NwLmg+CisKK3N0cnVjdCBiZmFfZmNzX2ZhYnJpY19zOworCisKKworc3RydWN0IGJmYV9mY3NfYXV0aF9zIHsKKwliZmFfc21fdAlzbTsJLyogIHN0YXRlIG1hY2hpbmUgKi8KKwliZmFfYm9vbGVhbl90ICAgcG9saWN5OwkvKiAgYXV0aGVudGljYXRpb24gZW5hYmxlZC9kaXNhYmxlZCAqLworCWVudW0gYmZhX2F1dGhfc3RhdHVzIHN0YXR1czsJLyogIGF1dGhlbnRpY2F0aW9uIHN0YXR1cyAqLworCWVudW0gYXV0aF9yanRfY29kZXMgIHJqdF9jb2RlOwkvKiAgYXV0aCByZWplY3Qgc3RhdHVzICovCisJZW51bSBhdXRoX3JqdF9jb2RlX2V4cHMgIHJqdF9jb2RlX2V4cDsJLyogIGF1dGggcmVqZWN0IHJlYXNvbiAqLworCWVudW0gYmZhX2F1dGhfYWxnbyBhbGdvOwkvKiAgQXV0aGVudGljYXRpb24gYWxnb3JpdGhtICovCisJc3RydWN0IGJmYV9hdXRoX3N0YXRzX3Mgc3RhdHM7CS8qICBTdGF0aXN0aWNzICovCisJZW51bSBhdXRoX2RoX2dpZCAgIGdyb3VwOwkvKiAgREgoZGlmZmllLWhlbGxtYW4pIEdyb3VwICovCisJZW51bSBiZmFfYXV0aF9zZWNyZXRzb3VyY2Ugc291cmNlOwkvKiAgU2VjcmV0IHNvdXJjZSAqLworCWNoYXIgICAgICAgICAgICBzZWNyZXRbQkZBX0FVVEhfU0VDUkVUX1NUUklOR19MRU5dOworCQkJCS8qICBzZWNyZXQgc3RyaW5nICovCisJdTggICAgICAgICBzZWNyZXRfbGVuOworCQkJCS8qICBzZWNyZXQgc3RyaW5nIGxlbmd0aCAqLworCXU4ICAgICAgICAgbnJldHJpZXM7CisJCQkJLyogIG51bWJlciBvZiByZXRyaWVzICovCisJc3RydWN0IGJmYV9mY3NfZmFicmljX3MgKmZhYnJpYzsvKiAgcG9pbnRlciB0byBmYWJyaWMgKi8KKwl1OCAgICAgICAgIHNlbnRjb2RlOwkvKiAgcG9pbnRlciB0byByZXNwb25zZSBkYXRhICovCisJdTggICAgICAgICpyZXNwb25zZTsJLyogIHBvaW50ZXIgdG8gcmVzcG9uc2UgZGF0YSAqLworCXN0cnVjdCBiZmFfdGltZXJfcyBkZWxheV90aW1lcjsgCS8qICBkZWxheSB0aW1lciAqLworCXN0cnVjdCBiZmFfZmN4cF9zICpmY3hwOwkJLyogIHBvaW50ZXIgdG8gZmN4cCAqLworCXN0cnVjdCBiZmFfZmN4cF93cWVfcyBmY3hwX3dxZTsKK307CisKKy8qKgorICogYmZhIGZjcyBhdXRoZW50aWNhdGlvbiBwdWJsaWMgZnVuY3Rpb25zCisgKi8KK2JmYV9zdGF0dXNfdCAgICBiZmFfZmNzX2F1dGhfZ2V0X2F0dHIoc3RydWN0IGJmYV9mY3NfcyAqcG9ydCwKKwkJCQkgICAgICBzdHJ1Y3QgYmZhX2F1dGhfYXR0cl9zICphdHRyKTsKK2JmYV9zdGF0dXNfdCAgICBiZmFfZmNzX2F1dGhfc2V0X3BvbGljeShzdHJ1Y3QgYmZhX2Zjc19zICpwb3J0LAorCQkJCQliZmFfYm9vbGVhbl90IHBvbGljeSk7CitlbnVtIGJmYV9hdXRoX3N0YXR1cyBiZmFfZmNzX2F1dGhfZ2V0X3N0YXR1cyhzdHJ1Y3QgYmZhX2Zjc19zICpwb3J0KTsKK2JmYV9zdGF0dXNfdCAgICBiZmFfZmNzX2F1dGhfc2V0X2FsZ28oc3RydWN0IGJmYV9mY3NfcyAqcG9ydCwKKwkJCQkgICAgICBlbnVtIGJmYV9hdXRoX2FsZ28gYWxnbyk7CitiZmFfc3RhdHVzX3QgICAgYmZhX2Zjc19hdXRoX2dldF9zdGF0cyhzdHJ1Y3QgYmZhX2Zjc19zICpwb3J0LAorCQkJCSAgICAgICBzdHJ1Y3QgYmZhX2F1dGhfc3RhdHNfcyAqc3RhdHMpOworYmZhX3N0YXR1c190ICAgIGJmYV9mY3NfYXV0aF9zZXRfZGhfZ3JvdXAoc3RydWN0IGJmYV9mY3NfcyAqcG9ydCwgaW50IGdyb3VwKTsKK2JmYV9zdGF0dXNfdCAgICBiZmFfZmNzX2F1dGhfc2V0X3NlY3JldHN0cmluZyhzdHJ1Y3QgYmZhX2Zjc19zICpwb3J0LAorCQkJCQkgICAgICBjaGFyICpzZWNyZXQpOworYmZhX3N0YXR1c190ICAgIGJmYV9mY3NfYXV0aF9zZXRfc2VjcmV0c3RyaW5nX2VuY3J5cHQoc3RydWN0IGJmYV9mY3NfcyAqcG9ydCwKKwkJCQkJICAgICAgdTMyIHNlY3JldFtdLCB1MzIgbGVuKTsKK2JmYV9zdGF0dXNfdCAgICBiZmFfZmNzX2F1dGhfc2V0X3NlY3JldHNvdXJjZShzdHJ1Y3QgYmZhX2Zjc19zICpwb3J0LAorCQkJCQkgICAgICBlbnVtIGJmYV9hdXRoX3NlY3JldHNvdXJjZSBzcmMpOworYmZhX3N0YXR1c190ICAgIGJmYV9mY3NfYXV0aF9yZXNldF9zdGF0cyhzdHJ1Y3QgYmZhX2Zjc19zICpwb3J0KTsKK2JmYV9zdGF0dXNfdCAgICBiZmFfZmNzX2F1dGhfcmVpbml0KHN0cnVjdCBiZmFfZmNzX3MgKnBvcnQpOworCisjZW5kaWYgLyogX19CRkFfRkNTX0FVVEhfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZmNzL2JmYV9mY3NfZmFicmljLmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZmNzL2JmYV9mY3NfZmFicmljLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGZmZDIyNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9mY3MvYmZhX2Zjc19mYWJyaWMuaApAQCAtMCwwICsxLDExMiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9fQkZBX0ZDU19GQUJSSUNfSF9fCisjZGVmaW5lIF9fQkZBX0ZDU19GQUJSSUNfSF9fCisKK3N0cnVjdCBiZmFfZmNzX3M7CisKKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX3N0YXR1cy5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfdmYuaD4KKyNpbmNsdWRlIDxjcy9iZmFfcS5oPgorI2luY2x1ZGUgPGNzL2JmYV9zbS5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfcHBvcnQuaD4KKyNpbmNsdWRlIDxmY3MvYmZhX2Zjc19scG9ydC5oPgorI2luY2x1ZGUgPHByb3RvY29sL2ZjX3NwLmg+CisjaW5jbHVkZSA8ZmNzL2JmYV9mY3NfYXV0aC5oPgorCisvKgorICogZm9yd2FyZCBkZWNsYXJhdGlvbgorICovCitzdHJ1Y3QgYmZhZF92Zl9zOworCitlbnVtIGJmYV9mY3NfZmFicmljX3R5cGUgeworCUJGQV9GQ1NfRkFCUklDX1VOS05PV04gPSAwLAorCUJGQV9GQ1NfRkFCUklDX1NXSVRDSEVEID0gMSwKKwlCRkFfRkNTX0ZBQlJJQ19QTE9PUCA9IDIsCisJQkZBX0ZDU19GQUJSSUNfTjJOID0gMywKK307CisKKworc3RydWN0IGJmYV9mY3NfZmFicmljX3MgeworCXN0cnVjdCBsaXN0X2hlYWQgICBxZTsJCS8qICBxdWV1ZSBlbGVtZW50ICovCisJYmZhX3NtX3QJIHNtOwkJLyogIHN0YXRlIG1hY2hpbmUgKi8KKwlzdHJ1Y3QgYmZhX2Zjc19zICpmY3M7CQkvKiAgRkNTIGluc3RhbmNlICovCisJc3RydWN0IGJmYV9mY3NfcG9ydF9zICBicG9ydDsJLyogIGJhc2UgbG9naWNhbCBwb3J0ICovCisJZW51bSBiZmFfZmNzX2ZhYnJpY190eXBlIGZhYl90eXBlOyAvKiAgZmFicmljIHR5cGUgKi8KKwllbnVtIGJmYV9wcG9ydF90eXBlIG9wZXJfdHlwZTsJLyogIGN1cnJlbnQgbGluayB0b3BvbG9neSAqLworCXU4ICAgICAgICAgaXNfdmY7CQkvKiAgaXMgdmlydHVhbCBmYWJyaWM/ICovCisJdTggICAgICAgICBpc19ucGl2OwkvKiAgaXMgTlBJViBzdXBwb3J0ZWQgPyAqLworCXU4ICAgICAgICAgaXNfYXV0aDsJLyogIGlzIFNlY3VyaXR5L0F1dGggc3VwcG9ydGVkID8gKi8KKwl1MTYgICAgICAgIGJiX2NyZWRpdDsJLyogIEJCIGNyZWRpdCBmcm9tIGZhYnJpYyAqLworCXUxNiAgICAgICAgdmZfaWQ7CQkvKiAgdmlydHVhbCBmYWJyaWMgSUQgKi8KKwl1MTYgICAgICAgIG51bV92cG9ydHM7CS8qICBudW0gdnBvcnRzICovCisJdTE2ICAgICAgICByc3ZkOworCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgICB2cG9ydF9xOwkvKiAgcXVldWUgb2YgdmlydHVhbCBwb3J0cyAqLworCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgICB2Zl9xOwkvKiAgcXVldWUgb2YgdmlydHVhbCBmYWJyaWNzICovCisJc3RydWN0IGJmYWRfdmZfcyAgICAgICp2Zl9kcnY7CS8qICBkcml2ZXIgdmYgc3RydWN0dXJlICovCisJc3RydWN0IGJmYV90aW1lcl9zIGxpbmtfdGltZXI7CS8qICBMaW5rIEZhaWx1cmUgdGltZXIuIFZwb3J0ICovCisJd3duX3QgICAgICAgICAgIGZhYnJpY19uYW1lOwkvKiAgYXR0YWNoZWQgZmFicmljIG5hbWUgKi8KKwliZmFfYm9vbGVhbl90ICAgYXV0aF9yZXFkOwkvKiAgYXV0aGVudGljYXRpb24gcmVxdWlyZWQJKi8KKwlzdHJ1Y3QgYmZhX3RpbWVyX3MgZGVsYXlfdGltZXI7CS8qICBkZWxheSB0aW1lcgkJKi8KKwl1bmlvbiB7CisJCXUxNiAgICAgICAgc3dwX3ZmaWQ7LyogIHN3aXRjaCBwb3J0IFZGIGlkCQkqLworCX0gZXZlbnRfYXJnOworCXN0cnVjdCBiZmFfZmNzX2F1dGhfcyAgYXV0aDsJLyogIGF1dGhlbnRpY2F0aW9uIGNvbmZpZwkqLworCXN0cnVjdCBiZmFfd2NfcyAgICAgICAgd2M7CS8qICB3YWl0IGNvdW50ZXIgZm9yIGRlbGV0ZQkqLworCXN0cnVjdCBiZmFfdmZfc3RhdHNfcyAgc3RhdHM7IAkvKiAgZmFicmljL3ZmIHN0YXRzCQkqLworCXN0cnVjdCBiZmFfbHBzX3MJKmxwczsJLyogIGxwb3J0IGxvZ2luIHNlcnZpY2VzCSovCisJdTgJZmFicmljX2lwX2FkZHJbQkZBX0ZDU19GQUJSSUNfSVBBRERSX1NaXTsgIC8qICBhdHRhY2hlZAorCQkJCQkJCSAgICAqIGZhYnJpYydzIGlwIGFkZHIKKwkJCQkJCQkgICAgKi8KK307CisKKyNkZWZpbmUgYmZhX2Zjc19mYWJyaWNfbnBpdl9jYXBhYmxlKF9fZikgICAgKF9fZiktPmlzX25waXYKKyNkZWZpbmUgYmZhX2Zjc19mYWJyaWNfaXNfc3dpdGNoZWQoX19mKQkJCVwKKwkoKF9fZiktPmZhYl90eXBlID09IEJGQV9GQ1NfRkFCUklDX1NXSVRDSEVEKQorCisvKioKKyAqICAgVGhlIGRlc2lnbiBjYWxscyBmb3IgYSBzaW5nbGUgaW1wbGVtZW50YXRpb24gb2YgYmFzZSBmYWJyaWMgYW5kIHZmLgorICovCisjZGVmaW5lIGJmYV9mY3NfdmZfdCBzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcworCitzdHJ1Y3QgYmZhX3ZmX2V2ZW50X3MgeworCXUzMiAgICAgICAgdW5kZWZpbmVkOworfTsKKworLyoqCisgKiBiZmEgZmNzIHZmIHB1YmxpYyBmdW5jdGlvbnMKKyAqLworYmZhX3N0YXR1c190IGJmYV9mY3NfdmZfbW9kZV9lbmFibGUoc3RydWN0IGJmYV9mY3NfcyAqZmNzLCB1MTYgdmZfaWQpOworYmZhX3N0YXR1c190IGJmYV9mY3NfdmZfbW9kZV9kaXNhYmxlKHN0cnVjdCBiZmFfZmNzX3MgKmZjcyk7CitiZmFfc3RhdHVzX3QgYmZhX2Zjc192Zl9jcmVhdGUoYmZhX2Zjc192Zl90ICp2Ziwgc3RydWN0IGJmYV9mY3NfcyAqZmNzLAorCQkJICAgICAgIHUxNiB2Zl9pZCwgc3RydWN0IGJmYV9wb3J0X2NmZ19zICpwb3J0X2NmZywKKwkJCSAgICAgICBzdHJ1Y3QgYmZhZF92Zl9zICp2Zl9kcnYpOworYmZhX3N0YXR1c190IGJmYV9mY3NfdmZfZGVsZXRlKGJmYV9mY3NfdmZfdCAqdmYpOwordm9pZCBiZmFfZmNzX3ZmX3N0YXJ0KGJmYV9mY3NfdmZfdCAqdmYpOworYmZhX3N0YXR1c190IGJmYV9mY3NfdmZfc3RvcChiZmFfZmNzX3ZmX3QgKnZmKTsKK3ZvaWQgYmZhX2Zjc192Zl9saXN0KHN0cnVjdCBiZmFfZmNzX3MgKmZjcywgdTE2ICp2Zl9pZHMsIGludCAqbnZmcyk7Cit2b2lkIGJmYV9mY3NfdmZfbGlzdF9hbGwoc3RydWN0IGJmYV9mY3NfcyAqZmNzLCB1MTYgKnZmX2lkcywgaW50ICpudmZzKTsKK3ZvaWQgYmZhX2Zjc192Zl9nZXRfYXR0cihiZmFfZmNzX3ZmX3QgKnZmLCBzdHJ1Y3QgYmZhX3ZmX2F0dHJfcyAqdmZfYXR0cik7Cit2b2lkIGJmYV9mY3NfdmZfZ2V0X3N0YXRzKGJmYV9mY3NfdmZfdCAqdmYsCisJCQkgIHN0cnVjdCBiZmFfdmZfc3RhdHNfcyAqdmZfc3RhdHMpOwordm9pZCBiZmFfZmNzX3ZmX2NsZWFyX3N0YXRzKGJmYV9mY3NfdmZfdCAqdmYpOwordm9pZCBiZmFfZmNzX3ZmX2dldF9wb3J0cyhiZmFfZmNzX3ZmX3QgKnZmLCB3d25fdCB2cHd3bltdLCBpbnQgKm5wb3J0cyk7CitiZmFfZmNzX3ZmX3QgKmJmYV9mY3NfdmZfbG9va3VwKHN0cnVjdCBiZmFfZmNzX3MgKmZjcywgdTE2IHZmX2lkKTsKK3N0cnVjdCBiZmFkX3ZmX3MgKmJmYV9mY3NfdmZfZ2V0X2Rydl92ZihiZmFfZmNzX3ZmX3QgKnZmKTsKKworI2VuZGlmIC8qIF9fQkZBX0ZDU19GQUJSSUNfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZmNzL2JmYV9mY3NfZmNwaW0uaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9mY3MvYmZhX2Zjc19mY3BpbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3MTlmMmMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZmNzL2JmYV9mY3NfZmNwaW0uaApAQCAtMCwwICsxLDEzMSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisvKioKKyAqICBiZmFfZmNzX2ZjcGltLmggQkZBIEZDUyBGQ1AgSW5pdGlhdG9yIE1vZGUgaW50ZXJmYWNlcy9kZWZpbmVzLgorICovCisKKyNpZm5kZWYgX19CRkFfRkNTX0ZDUElNX0hfXworI2RlZmluZSBfX0JGQV9GQ1NfRkNQSU1fSF9fCisKKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX3N0YXR1cy5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfaXRuaW0uaD4KKyNpbmNsdWRlIDxmY3MvYmZhX2Zjcy5oPgorI2luY2x1ZGUgPGZjcy9iZmFfZmNzX3Jwb3J0Lmg+CisjaW5jbHVkZSA8ZmNzL2JmYV9mY3NfbHBvcnQuaD4KKyNpbmNsdWRlIDxiZmFfZmNwaW0uaD4KKworLyoKKyAqIGZvcndhcmQgZGVjbGFyYXRpb25zCisgKi8KK3N0cnVjdCBiZmFkX2l0bmltX3M7CisKK3N0cnVjdCBiZmFfZmNzX2l0bmltX3MgeworCWJmYV9zbV90CQlzbTsJCS8qICBzdGF0ZSBtYWNoaW5lICovCisJc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAJKnJwb3J0OwkJLyogIHBhcmVudCByZW1vdGUgcnBvcnQgICovCisJc3RydWN0IGJmYWRfaXRuaW1fcyAgIAkqaXRuaW1fZHJ2OwkvKiAgZHJpdmVyIHBlZXIgaW5zdGFuY2UgKi8KKwlzdHJ1Y3QgYmZhX2Zjc19zICAgICAgCSpmY3M7CQkvKiAgZmNzIGluc3RhbmNlICAgICAgICAgKi8KKwlzdHJ1Y3QgYmZhX3RpbWVyX3MgCXRpbWVyOwkJLyogIHRpbWVyIGZ1bmN0aW9ucyAgICAgICovCisJc3RydWN0IGJmYV9pdG5pbV9zIAkqYmZhX2l0bmltOwkvKiAgQkZBIGl0bmltIHN0cnVjdCAgICAgKi8KKwliZmFfYm9vbGVhbl90CSAJc2VxX3JlYzsJLyogIHNlcSByZWNvdmVyeSBzdXBwb3J0ICovCisJYmZhX2Jvb2xlYW5fdAkgCXJlY19zdXBwb3J0OwkvKiAgUkVDIHN1cHBvcnRlZCAgICAgICAgKi8KKwliZmFfYm9vbGVhbl90CSAJY29uZl9jb21wOwkvKiAgRkNQX0NPTkYgICAgIHN1cHBvcnQgKi8KKwliZmFfYm9vbGVhbl90CSAJdGFza19yZXRyeV9pZDsJLyogIHRhc2sgcmV0cnkgaWQgc3VwcCAgICovCisJc3RydWN0IGJmYV9mY3hwX3dxZV9zIAlmY3hwX3dxZTsJLyogIHdhaXQgcWVsZW0gZm9yIGZjeHAgICovCisJc3RydWN0IGJmYV9mY3hwX3MgKmZjeHA7CQkvKiAgRkNYUCBpbiB1c2UgICAgICAgICAgKi8KKwlzdHJ1Y3QgYmZhX2l0bmltX3N0YXRzX3MgCXN0YXRzOwkvKiAgaXRuIHN0YXRpc3RpY3MgICAgICAgKi8KK307CisKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgYmZhZF9wb3J0X3MgKgorYmZhX2Zjc19pdG5pbV9nZXRfZHJ2cG9ydChzdHJ1Y3QgYmZhX2Zjc19pdG5pbV9zICppdG5pbSkKK3sKKwlyZXR1cm4gaXRuaW0tPnJwb3J0LT5wb3J0LT5iZmFkX3BvcnQ7Cit9CisKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKgorYmZhX2Zjc19pdG5pbV9nZXRfcG9ydChzdHJ1Y3QgYmZhX2Zjc19pdG5pbV9zICppdG5pbSkKK3sKKwlyZXR1cm4gaXRuaW0tPnJwb3J0LT5wb3J0OworfQorCisKK3N0YXRpYyBpbmxpbmUgd3duX3QKK2JmYV9mY3NfaXRuaW1fZ2V0X253d24oc3RydWN0IGJmYV9mY3NfaXRuaW1fcyAqaXRuaW0pCit7CisJcmV0dXJuIGl0bmltLT5ycG9ydC0+bnd3bjsKK30KKworCitzdGF0aWMgaW5saW5lIHd3bl90CitiZmFfZmNzX2l0bmltX2dldF9wd3duKHN0cnVjdCBiZmFfZmNzX2l0bmltX3MgKml0bmltKQoreworCXJldHVybiBpdG5pbS0+cnBvcnQtPnB3d247Cit9CisKKworc3RhdGljIGlubGluZSB1MzIKK2JmYV9mY3NfaXRuaW1fZ2V0X2ZjaWQoc3RydWN0IGJmYV9mY3NfaXRuaW1fcyAqaXRuaW0pCit7CisJcmV0dXJuIGl0bmltLT5ycG9ydC0+cGlkOworfQorCisKK3N0YXRpYyBpbmxpbmUgICB1MzIKK2JmYV9mY3NfaXRuaW1fZ2V0X21heGZyc2l6ZShzdHJ1Y3QgYmZhX2Zjc19pdG5pbV9zICppdG5pbSkKK3sKKwlyZXR1cm4gaXRuaW0tPnJwb3J0LT5tYXhmcnNpemU7Cit9CisKKworc3RhdGljIGlubGluZSAgIGVudW0gZmNfY29zCitiZmFfZmNzX2l0bmltX2dldF9jb3Moc3RydWN0IGJmYV9mY3NfaXRuaW1fcyAqaXRuaW0pCit7CisJcmV0dXJuIGl0bmltLT5ycG9ydC0+ZmNfY29zOworfQorCisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGJmYWRfaXRuaW1fcyAqCitiZmFfZmNzX2l0bmltX2dldF9kcnZpdG4oc3RydWN0IGJmYV9mY3NfaXRuaW1fcyAqaXRuaW0pCit7CisJcmV0dXJuIGl0bmltLT5pdG5pbV9kcnY7Cit9CisKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgYmZhX2l0bmltX3MgKgorYmZhX2Zjc19pdG5pbV9nZXRfaGFsaXRuKHN0cnVjdCBiZmFfZmNzX2l0bmltX3MgKml0bmltKQoreworCXJldHVybiBpdG5pbS0+YmZhX2l0bmltOworfQorCisvKioKKyAqIGJmYSBmY3MgRkNQIEluaXRpYXRvciBtb2RlIEFQSSBmdW5jdGlvbnMKKyAqLwordm9pZCBiZmFfZmNzX2l0bmltX2dldF9hdHRyKHN0cnVjdCBiZmFfZmNzX2l0bmltX3MgKml0bmltLAorCQkJc3RydWN0IGJmYV9pdG5pbV9hdHRyX3MgKmF0dHIpOwordm9pZCBiZmFfZmNzX2l0bmltX2dldF9zdGF0cyhzdHJ1Y3QgYmZhX2Zjc19pdG5pbV9zICppdG5pbSwKKwkJCXN0cnVjdCBiZmFfaXRuaW1fc3RhdHNfcyAqc3RhdHMpOworc3RydWN0IGJmYV9mY3NfaXRuaW1fcyAqYmZhX2Zjc19pdG5pbV9sb29rdXAoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LAorCQkJd3duX3QgcnB3d24pOworYmZhX3N0YXR1c190IGJmYV9mY3NfaXRuaW1fYXR0cl9nZXQoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LCB3d25fdCBycHd3biwKKwkJCXN0cnVjdCBiZmFfaXRuaW1fYXR0cl9zICphdHRyKTsKK2JmYV9zdGF0dXNfdCBiZmFfZmNzX2l0bmltX3N0YXRzX2dldChzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQsIHd3bl90IHJwd3duLAorCQkJc3RydWN0IGJmYV9pdG5pbV9zdGF0c19zICpzdGF0cyk7CitiZmFfc3RhdHVzX3QgYmZhX2Zjc19pdG5pbV9zdGF0c19jbGVhcihzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQsCisJCQl3d25fdCBycHd3bik7CisjZW5kaWYgLyogX19CRkFfRkNTX0ZDUElNX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2Zjcy9iZmFfZmNzX2ZkbWkuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9mY3MvYmZhX2Zjc19mZG1pLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQ0MWZmZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9mY3MvYmZhX2Zjc19mZG1pLmgKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisvKioKKyAqICBiZmFfZmNzX2ZkbWkuaCBCRkEgZmNzIGZkbWkgbW9kdWxlIHB1YmxpYyBpbnRlcmZhY2UKKyAqLworCisjaWZuZGVmIF9fQkZBX0ZDU19GRE1JX0hfXworI2RlZmluZSBfX0JGQV9GQ1NfRkRNSV9IX18KKyNpbmNsdWRlIDxiZmFfb3NfaW5jLmg+CisjaW5jbHVkZSA8cHJvdG9jb2wvZmRtaS5oPgorCisjZGVmaW5lCUJGQV9GQ1NfRkRNSV9TVVBPUlRFRF9TUEVFRFMgIChGRE1JX1RSQU5TX1NQRUVEXzFHICB8IFwKKwkJCQkJRkRNSV9UUkFOU19TUEVFRF8yRyB8IFwKKwkJCQkJRkRNSV9UUkFOU19TUEVFRF80RyB8IFwKKwkJCQkJRkRNSV9UUkFOU19TUEVFRF84RykKKworLyoKKyogSEJBIEF0dHJpYnV0ZSBCbG9jayA6IEJGQSBpbnRlcm5hbCByZXByZXNlbnRhdGlvbi4gTm90ZSA6IFNvbWUgdmFyaWFibGUKKyogc2l6ZXMgaGF2ZSBiZWVuIHRyaW1tZWQgdG8gc3VpdCBCRkEgRm9yIEV4IDogTW9kZWwgd2lsbCBiZSAiQnJvY2FkZSIuIEJhc2VkCisgKiBvbiB0aGlzIHRoZSBzaXplIGhhcyBiZWVuIHJlZHVjZWQgdG8gMTYgYnl0ZXMgZnJvbSB0aGUgc3RhbmRhcmQncyA2NCBieXRlcy4KKyAqLworc3RydWN0IGJmYV9mY3NfZmRtaV9oYmFfYXR0cl9zIHsKKwl3d25fdCAgICAgICAgICAgbm9kZV9uYW1lOworCXU4ICAgICAgICAgbWFudWZhY3R1cmVyWzY0XTsKKwl1OCAgICAgICAgIHNlcmlhbF9udW1bNjRdOworCXU4ICAgICAgICAgbW9kZWxbMTZdOworCXU4ICAgICAgICAgbW9kZWxfZGVzY1syNTZdOworCXU4ICAgICAgICAgaHdfdmVyc2lvbls4XTsKKwl1OCAgICAgICAgIGRyaXZlcl92ZXJzaW9uWzhdOworCXU4ICAgICAgICAgb3B0aW9uX3JvbV92ZXJbQkZBX1ZFUlNJT05fTEVOXTsKKwl1OCAgICAgICAgIGZ3X3ZlcnNpb25bOF07CisJdTggICAgICAgICBvc19uYW1lWzI1Nl07CisJdTMyICAgICAgICBtYXhfY3RfcHlsZDsKK307CisKKy8qCisgKiBQb3J0IEF0dHJpYnV0ZSBCbG9jaworICovCitzdHJ1Y3QgYmZhX2Zjc19mZG1pX3BvcnRfYXR0cl9zIHsKKwl1OCAgICAgICAgIHN1cHBfZmM0X3R5cGVzWzMyXTsJLyogc3VwcG9ydGVkIEZDNCB0eXBlcyAqLworCXUzMiAgICAgICAgc3VwcF9zcGVlZDsJLyogc3VwcG9ydGVkIHNwZWVkICovCisJdTMyICAgICAgICBjdXJyX3NwZWVkOwkvKiBjdXJyZW50IFNwZWVkICovCisJdTMyICAgICAgICBtYXhfZnJtX3NpemU7CS8qIG1heCBmcmFtZSBzaXplICovCisJdTggICAgICAgICBvc19kZXZpY2VfbmFtZVsyNTZdOwkvKiBPUyBkZXZpY2UgTmFtZSAqLworCXU4ICAgICAgICAgaG9zdF9uYW1lWzI1Nl07CS8qIGhvc3QgbmFtZSAqLworfTsKKworI2VuZGlmIC8qIF9fQkZBX0ZDU19GRE1JX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2Zjcy9iZmFfZmNzX2xwb3J0LmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZmNzL2JmYV9mY3NfbHBvcnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODVjYmE4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2Zjcy9iZmFfZmNzX2xwb3J0LmgKQEAgLTAsMCArMSwyMjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworLyoqCisgKiAgYmZhX2Zjc19wb3J0LmggQkZBIGZjcyBwb3J0IG1vZHVsZSBwdWJsaWMgaW50ZXJmYWNlCisgKi8KKworI2lmbmRlZiBfX0JGQV9GQ1NfUE9SVF9IX18KKyNkZWZpbmUgX19CRkFfRkNTX1BPUlRfSF9fCisKKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX3N0YXR1cy5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfcG9ydC5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfcHBvcnQuaD4KKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX3Jwb3J0Lmg+CisjaW5jbHVkZSA8Y3MvYmZhX3EuaD4KKyNpbmNsdWRlIDxiZmFfc3ZjLmg+CisjaW5jbHVkZSA8Y3MvYmZhX3djLmg+CisKK3N0cnVjdCBiZmFfZmNzX3M7CitzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfczsKKworLyoKKyogQHRvZG8gOiBuZWVkIHRvIG1vdmUgdG8gYSBnbG9iYWwgY29uZmlnIGZpbGUuCisgKiBNYXhpbXVtIFZwb3J0cyBzdXBwb3J0ZWQgcGVyIHBoeXNpY2FsIHBvcnQgb3IgdmYuCisgKi8KKyNkZWZpbmUgQkZBX0ZDU19NQVhfVlBPUlRTX1NVUFBfQ0IgIDI1NQorI2RlZmluZSBCRkFfRkNTX01BWF9WUE9SVFNfU1VQUF9DVCAgMTkxCisKKy8qCisqIEB0b2RvIDogbmVlZCB0byBtb3ZlIHRvIGEgZ2xvYmFsIGNvbmZpZyBmaWxlLgorICogTWF4aW11bSBScG9ydHMgc3VwcG9ydGVkIHBlciBwb3J0IChwaHlzaWNhbC9sb2dpY2FsKS4KKyAqLworI2RlZmluZSBCRkFfRkNTX01BWF9SUE9SVFNfU1VQUCAgMjU2CS8qIEB0b2RvIDogdGVudGF0aXZlIHZhbHVlICovCisKKworc3RydWN0IGJmYV9mY3NfcG9ydF9uc19zIHsKKwliZmFfc21fdCAgICAgICAgc207CQkvKiAgc3RhdGUgbWFjaGluZSAqLworCXN0cnVjdCBiZmFfdGltZXJfcyB0aW1lcjsKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQ7CS8qICBwYXJlbnQgcG9ydCAqLworCXN0cnVjdCBiZmFfZmN4cF9zICpmY3hwOworCXN0cnVjdCBiZmFfZmN4cF93cWVfcyBmY3hwX3dxZTsKK307CisKKworc3RydWN0IGJmYV9mY3NfcG9ydF9zY25fcyB7CisJYmZhX3NtX3QgICAgICAgIHNtOwkJLyogIHN0YXRlIG1hY2hpbmUgKi8KKwlzdHJ1Y3QgYmZhX3RpbWVyX3MgdGltZXI7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0OwkvKiAgcGFyZW50IHBvcnQgKi8KKwlzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cDsKKwlzdHJ1Y3QgYmZhX2ZjeHBfd3FlX3MgZmN4cF93cWU7Cit9OworCisKK3N0cnVjdCBiZmFfZmNzX3BvcnRfZmRtaV9zIHsKKwliZmFfc21fdCAgICAgICAgc207CQkvKiAgc3RhdGUgbWFjaGluZSAqLworCXN0cnVjdCBiZmFfdGltZXJfcyB0aW1lcjsKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X21zX3MgKm1zOwkvKiAgcGFyZW50IG1zICovCisJc3RydWN0IGJmYV9mY3hwX3MgKmZjeHA7CisJc3RydWN0IGJmYV9mY3hwX3dxZV9zIGZjeHBfd3FlOworCXU4ICAgICAgICAgcmV0cnlfY250OwkvKiAgcmV0cnkgY291bnQgKi8KKwl1OAkgCSAgIHJzdmRbM107Cit9OworCisKK3N0cnVjdCBiZmFfZmNzX3BvcnRfbXNfcyB7CisJYmZhX3NtX3QgICAgICAgIHNtOwkJLyogIHN0YXRlIG1hY2hpbmUgKi8KKwlzdHJ1Y3QgYmZhX3RpbWVyX3MgdGltZXI7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0OwkvKiAgcGFyZW50IHBvcnQgKi8KKwlzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cDsKKwlzdHJ1Y3QgYmZhX2ZjeHBfd3FlX3MgZmN4cF93cWU7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9mZG1pX3MgZmRtaTsJLyogIEZETUkgY29tcG9uZW50IG9mIE1TICovCisJdTggICAgICAgICByZXRyeV9jbnQ7CS8qICByZXRyeSBjb3VudCAqLworCXU4CSAJICAgcnN2ZFszXTsKK307CisKKworc3RydWN0IGJmYV9mY3NfcG9ydF9mYWJfcyB7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9uc19zIG5zOwkvKiAgTlMgY29tcG9uZW50IG9mIHBvcnQgKi8KKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X3Njbl9zIHNjbjsJLyogIHNjbiBjb21wb25lbnQgb2YgcG9ydCAqLworCXN0cnVjdCBiZmFfZmNzX3BvcnRfbXNfcyBtczsJLyogIE1TIGNvbXBvbmVudCBvZiBwb3J0ICovCit9OworCisKKworI2RlZmluZSAJTUFYX0FMUEFfQ09VTlQgCQkxMjcKKworc3RydWN0IGJmYV9mY3NfcG9ydF9sb29wX3MgeworCXU4ICAgICAgICAgbnVtX2FscGE7CS8qICBOdW0gb2YgQUxQQSBlbnRyaWVzIGluIHRoZSBtYXAgKi8KKwl1OCAgICAgICAgIGFscGFfcG9zX21hcFtNQVhfQUxQQV9DT1VOVF07CS8qICBBTFBBIFBvc2l0aW9uYWwKKwkJCQkJCQkgKk1hcCAqLworCXN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydDsJLyogIHBhcmVudCBwb3J0ICovCit9OworCisKKworc3RydWN0IGJmYV9mY3NfcG9ydF9uMm5fcyB7CisJdTMyICAgICAgICByc3ZkOworCXUxNiAgICAgICAgcmVwbHlfb3hpZDsJLyogIG94X2lkIGZyb20gdGhlIHJlcSBmbG9naSB0byBiZQorCQkJCQkgKnVzZWQgaW4gZmxvZ2kgYWNjICovCisJd3duX3QgICAgICAgICAgIHJlbV9wb3J0X3d3bjsJLyogIEF0dGFjaGVkIHBvcnQncyB3d24gKi8KK307CisKKwordW5pb24gYmZhX2Zjc19wb3J0X3RvcG9fdSB7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9mYWJfcyBwZmFiOworCXN0cnVjdCBiZmFfZmNzX3BvcnRfbG9vcF9zIHBsb29wOworCXN0cnVjdCBiZmFfZmNzX3BvcnRfbjJuX3MgcG4ybjsKK307CisKKworc3RydWN0IGJmYV9mY3NfcG9ydF9zIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICAgcWU7CS8qICB1c2VkIGJ5IHBvcnQvdnBvcnQgKi8KKwliZmFfc21fdCAgICAgICAgICAgICAgIHNtOwkvKiAgc3RhdGUgbWFjaGluZSAqLworCXN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWM7CS8qICBwYXJlbnQgZmFicmljICovCisJc3RydWN0IGJmYV9wb3J0X2NmZ19zICBwb3J0X2NmZzsJLyogIHBvcnQgY29uZmlndXJhdGlvbiAqLworCXN0cnVjdCBiZmFfdGltZXJfcyBsaW5rX3RpbWVyOwkvKiAgdGltZXIgZm9yIGxpbmsgb2ZmbGluZSAqLworCXUzMiAgICAgICAgcGlkIDogMjQ7CS8qICBGQyBhZGRyZXNzICovCisJdTggICAgICAgICBscF90YWc7CQkvKiAgbHBvcnQgdGFnICovCisJdTE2ICAgICAgICBudW1fcnBvcnRzOwkvKiAgTnVtIG9mIHItcG9ydHMgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIHJwb3J0X3E7CS8qICBxdWV1ZSBvZiBkaXNjb3ZlcmVkIHItcG9ydHMgKi8KKwlzdHJ1Y3QgYmZhX2Zjc19zICpmY3M7CS8qICBGQ1MgaW5zdGFuY2UgKi8KKwl1bmlvbiBiZmFfZmNzX3BvcnRfdG9wb191IHBvcnRfdG9wbzsJLyogIGZhYnJpYy9sb29wL24ybiBkZXRhaWxzICovCisJc3RydWN0IGJmYWRfcG9ydF9zICpiZmFkX3BvcnQ7CS8qICBkcml2ZXIgcGVlciBpbnN0YW5jZSAqLworCXN0cnVjdCBiZmFfZmNzX3Zwb3J0X3MgKnZwb3J0OwkvKiAgTlVMTCBmb3IgYmFzZSBwb3J0cyAqLworCXN0cnVjdCBiZmFfZmN4cF9zICpmY3hwOworCXN0cnVjdCBiZmFfZmN4cF93cWVfcyBmY3hwX3dxZTsKKwlzdHJ1Y3QgYmZhX3BvcnRfc3RhdHNfcyBzdGF0czsKKwlzdHJ1Y3QgYmZhX3djX3MgICAgICAgIHdjOwkvKiAgd2FpdGluZyBjb3VudGVyIGZvciBldmVudHMgKi8KK307CisKKyNkZWZpbmUgYmZhX2Zjc19scG9ydF90IHN0cnVjdCBiZmFfZmNzX3BvcnRfcworCisvKioKKyAqIFN5bWJvbGljIE5hbWUgcmVsYXRlZCBkZWZpbmVzCisgKiAgVG90YWwgYnl0ZXMgMjU1LgorICogIFBoeXNpY2FsIFBvcnQncyBzeW1ib2xpYyBuYW1lIDEyOCBieXRlcy4KKyAqICBGb3IgVnBvcnRzLCBWcG9ydCdzIHN5bWJvbGljIG5hbWUgaXMgYXBwZW5kZWQgdG8gdGhlIFBoeXNpY2FsIHBvcnQncworICogIFN5bWJvbGljIE5hbWUuCisgKgorICogIFBoeXNpY2FsIFBvcnQncyBzeW1ib2xpYyBuYW1lIEZvcm1hdCA6IChUb3RhbCAxMjggYnl0ZXMpCisgKiAgQWRhcHRlciBNb2RlbCBudW1iZXIvbmFtZSA6IDEyIGJ5dGVzCisgKiAgRHJpdmVyIFZlcnNpb24gICAgIDogMTAgYnl0ZXMKKyAqICBIb3N0IE1hY2hpbmUgTmFtZSAgOiAzMCBieXRlcworICogCUhvc3QgT1MgSW5mbwkgICA6IDQ4IGJ5dGVzCisgKiAJSG9zdCBPUyBQQVRDSCBJbmZvIDogMTYgYnl0ZXMKKyAqICAoIHJlbWFpbmluZyAxMiBieXRlcyByZXNlcnZlZCB0byBiZSB1c2VkIGZvciBzZXBhcmF0b3IpCisgKi8KKyNkZWZpbmUgQkZBX0ZDU19QT1JUX1NZTUJOQU1FX1NFUEFSQVRPUiAJCSIgfCAiCisKKyNkZWZpbmUgQkZBX0ZDU19QT1JUX1NZTUJOQU1FX01PREVMX1NaCQkJMTIKKyNkZWZpbmUgQkZBX0ZDU19QT1JUX1NZTUJOQU1FX1ZFUlNJT05fU1ogCQkxMAorI2RlZmluZSBCRkFfRkNTX1BPUlRfU1lNQk5BTUVfTUFDSElORU5BTUVfU1ogCTMwCisjZGVmaW5lIEJGQV9GQ1NfUE9SVF9TWU1CTkFNRV9PU0lORk9fU1oJCQk0OAorI2RlZmluZSBCRkFfRkNTX1BPUlRfU1lNQk5BTUVfT1NQQVRDSF9TWgkJMTYKKworLyoqCisgKiBHZXQgRkMgcG9ydCBJRCBmb3IgYSBsb2dpY2FsIHBvcnQuCisgKi8KKyNkZWZpbmUgYmZhX2Zjc19wb3J0X2dldF9mY2lkKF9scG9ydCkJKChfbHBvcnQpLT5waWQpCisjZGVmaW5lIGJmYV9mY3NfcG9ydF9nZXRfcHd3bihfbHBvcnQpCSgoX2xwb3J0KS0+cG9ydF9jZmcucHd3bikKKyNkZWZpbmUgYmZhX2Zjc19wb3J0X2dldF9ud3duKF9scG9ydCkJKChfbHBvcnQpLT5wb3J0X2NmZy5ud3duKQorI2RlZmluZSBiZmFfZmNzX3BvcnRfZ2V0X3BzeW1fbmFtZShfbHBvcnQpCSgoX2xwb3J0KS0+cG9ydF9jZmcuc3ltX25hbWUpCisjZGVmaW5lIGJmYV9mY3NfcG9ydF9pc19pbml0aWF0b3IoX2xwb3J0KQlcCisJCQkoKF9scG9ydCktPnBvcnRfY2ZnLnJvbGVzICYgQkZBX1BPUlRfUk9MRV9GQ1BfSU0pCisjZGVmaW5lIGJmYV9mY3NfcG9ydF9pc190YXJnZXQoX2xwb3J0KQlcCisJCQkoKF9scG9ydCktPnBvcnRfY2ZnLnJvbGVzICYgQkZBX1BPUlRfUk9MRV9GQ1BfVE0pCisjZGVmaW5lIGJmYV9mY3NfcG9ydF9nZXRfbnJwb3J0cyhfbHBvcnQpCVwKKwkJCSgoX2xwb3J0KSA/IChfbHBvcnQpLT5udW1fcnBvcnRzIDogMCkKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgYmZhZF9wb3J0X3MgKgorYmZhX2Zjc19wb3J0X2dldF9kcnZwb3J0KHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCkKK3sKKwlyZXR1cm4gcG9ydC0+YmZhZF9wb3J0OworfQorCisKKyNkZWZpbmUgYmZhX2Zjc19wb3J0X2dldF9vcGVydHlwZShfbHBvcnQpCShfbHBvcnQpLT5mYWJyaWMtPm9wZXJfdHlwZQorCisKKyNkZWZpbmUgYmZhX2Zjc19wb3J0X2dldF9mYWJyaWNfbmFtZShfbHBvcnQpCShfbHBvcnQpLT5mYWJyaWMtPmZhYnJpY19uYW1lCisKKworI2RlZmluZSBiZmFfZmNzX3BvcnRfZ2V0X2ZhYnJpY19pcGFkZHIoX2xwb3J0KQkoX2xwb3J0KS0+ZmFicmljLT5mYWJyaWNfaXBfYWRkcgorCisvKioKKyAqIGJmYSBmY3MgcG9ydCBwdWJsaWMgZnVuY3Rpb25zCisgKi8KK3ZvaWQgYmZhX2Zjc19jZmdfYmFzZV9wb3J0KHN0cnVjdCBiZmFfZmNzX3MgKmZjcywKKwkJCXN0cnVjdCBiZmFfcG9ydF9jZmdfcyAqcG9ydF9jZmcpOworc3RydWN0IGJmYV9mY3NfcG9ydF9zICpiZmFfZmNzX2dldF9iYXNlX3BvcnQoc3RydWN0IGJmYV9mY3NfcyAqZmNzKTsKK3ZvaWQgYmZhX2Zjc19wb3J0X2dldF9ycG9ydHMoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LAorCQkJd3duX3QgcnBvcnRfd3duc1tdLCBpbnQgKm5ycG9ydHMpOworCit3d25fdCBiZmFfZmNzX3BvcnRfZ2V0X3Jwb3J0KHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCwgd3duX3Qgd3duLAorCQkJaW50IGluZGV4LCBpbnQgbnJwb3J0cywgYmZhX2Jvb2xlYW5fdCBid3duKTsKKworc3RydWN0IGJmYV9mY3NfcG9ydF9zICpiZmFfZmNzX2xvb2t1cF9wb3J0KHN0cnVjdCBiZmFfZmNzX3MgKmZjcywKKwkJCXUxNiB2Zl9pZCwgd3duX3QgbHB3d24pOworCit2b2lkIGJmYV9mY3NfcG9ydF9nZXRfaW5mbyhzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQsCisJCQlzdHJ1Y3QgYmZhX3BvcnRfaW5mb19zICpwb3J0X2luZm8pOwordm9pZCBiZmFfZmNzX3BvcnRfZ2V0X2F0dHIoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LAorCQkJc3RydWN0IGJmYV9wb3J0X2F0dHJfcyAqcG9ydF9hdHRyKTsKK3ZvaWQgYmZhX2Zjc19wb3J0X2dldF9zdGF0cyhzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKmZjc19wb3J0LAorCQkJc3RydWN0IGJmYV9wb3J0X3N0YXRzX3MgKnBvcnRfc3RhdHMpOwordm9pZCBiZmFfZmNzX3BvcnRfY2xlYXJfc3RhdHMoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpmY3NfcG9ydCk7CitlbnVtIGJmYV9wcG9ydF9zcGVlZCBiZmFfZmNzX3BvcnRfZ2V0X3Jwb3J0X21heF9zcGVlZCgKKwkJCXN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCk7Cit2b2lkIGJmYV9mY3NfcG9ydF9lbmFibGVfaXBmY19yb2xlcyhzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKmZjc19wb3J0KTsKK3ZvaWQgYmZhX2Zjc19wb3J0X2Rpc2FibGVfaXBmY19yb2xlcyhzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKmZjc19wb3J0KTsKKworI2VuZGlmIC8qIF9fQkZBX0ZDU19QT1JUX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2Zjcy9iZmFfZmNzX3Jwb3J0LmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZmNzL2JmYV9mY3NfcnBvcnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDJiOTViCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2Zjcy9iZmFfZmNzX3Jwb3J0LmgKQEAgLTAsMCArMSwxMDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0JGQV9GQ1NfUlBPUlRfSF9fCisjZGVmaW5lIF9fQkZBX0ZDU19SUE9SVF9IX18KKworI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfc3RhdHVzLmg+CisjaW5jbHVkZSA8Y3MvYmZhX3EuaD4KKyNpbmNsdWRlIDxmY3MvYmZhX2Zjcy5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfcnBvcnQuaD4KKworI2RlZmluZSBCRkFfRkNTX1JQT1JUX0RFRl9ERUxfVElNRU9VVCAJOTAgCS8qIGluIHNlY3MgKi8KKy8qCisgKiBmb3J3YXJkIGRlY2xhcmF0aW9ucworICovCitzdHJ1Y3QgYmZhZF9ycG9ydF9zOworCitzdHJ1Y3QgYmZhX2Zjc19pdG5pbV9zOworc3RydWN0IGJmYV9mY3NfdGluX3M7CitzdHJ1Y3QgYmZhX2Zjc19pcHJwX3M7CisKKy8qIFJwb3J0IEZlYXR1cmVzIChSUEYpICovCitzdHJ1Y3QgYmZhX2Zjc19ycGZfcyB7CisJYmZhX3NtX3QgICAgICAgICAgICAgICBzbTsJLyogIHN0YXRlIG1hY2hpbmUgKi8KKwlzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydDsJLyogIHBhcmVudCBycG9ydCAqLworCXN0cnVjdCBiZmFfdGltZXJfcyAJdGltZXI7CS8qICBnZW5lcmFsIHB1cnBvc2UgdGltZXIgKi8KKwlzdHJ1Y3QgYmZhX2ZjeHBfcyAJKmZjeHA7CS8qICBGQ1hQIG5lZWRlZCBmb3IgZGlzY2FyZGluZyAqLworCXN0cnVjdCBiZmFfZmN4cF93cWVfcyAJZmN4cF93cWU7CS8qICBmY3hwIHdhaXQgcXVldWUgZWxlbWVudCAqLworCWludCAgICAgICAgICAgICAJcnBzY19yZXRyaWVzOwkvKiAgbWF4IFJQU0MgcmV0cnkgYXR0ZW1wdHMgKi8KKwllbnVtIGJmYV9wcG9ydF9zcGVlZCAJcnBzY19zcGVlZDsJLyogQ3VycmVudCBTcGVlZCBmcm9tIFJQU0MuCisJCQkJCQkgKiBPIGlmIFJQU0MgZmFpbHMgKi8KKwllbnVtIGJmYV9wcG9ydF9zcGVlZAlhc3NpZ25lZF9zcGVlZDsJLyogU3BlZWQgYXNzaWduZWQgYnkgdGhlIHVzZXIuCisJCQkJCQkgKiB3aWxsIGJlIHVzZWQgaWYgUlBTQyBpcyBub3QKKwkJCQkJCSAqIHN1cHBvcnRlZCBieSB0aGUgcnBvcnQgKi8KK307CisKK3N0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgeworCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgICBxZTsJLyogIHVzZWQgYnkgcG9ydC92cG9ydCAqLworCXN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydDsJLyogIHBhcmVudCBGQ1MgcG9ydCAqLworCXN0cnVjdCBiZmFfZmNzX3MgICAgICAqZmNzOwkvKiAgZmNzIGluc3RhbmNlICovCisJc3RydWN0IGJmYWRfcnBvcnRfcyAgICpycF9kcnY7CS8qICBkcml2ZXIgcGVlciBpbnN0YW5jZSAqLworCXUzMiAgICAgICAgcGlkOwkvKiAgcG9ydCBJRCBvZiBycG9ydCAqLworCXUxNiAgICAgICAgbWF4ZnJzaXplOwkvKiAgbWF4aW11bSBmcmFtZSBzaXplICovCisJdTE2ICAgICAgICByZXBseV9veGlkOwkvKiAgT1hfSUQgb2YgaW5ib3VuZCByZXF1ZXN0cyAqLworCWVudW0gZmNfY29zICAgICAgICBmY19jb3M7CS8qICBGQyBjbGFzc2VzIG9mIHNlcnZpY2Ugc3VwcCAqLworCWJmYV9ib29sZWFuX3QgICBjaXNjOwkvKiAgQ0lTQyBjYXBhYmxlIGRldmljZSAqLworCXd3bl90ICAgICAgICAgICBwd3duOwkvKiAgcG9ydCB3d24gb2YgcnBvcnQgKi8KKwl3d25fdCAgICAgICAgICAgbnd3bjsJLyogIG5vZGUgd3duIG9mIHJwb3J0ICovCisJc3RydWN0IGJmYV9ycG9ydF9zeW1uYW1lX3MgcHN5bV9uYW1lOyAvKiAgcG9ydCBzeW1ib2xpYyBuYW1lICAqLworCWJmYV9zbV90ICAgICAgICBzbTsJCS8qICBzdGF0ZSBtYWNoaW5lICovCisJc3RydWN0IGJmYV90aW1lcl9zIHRpbWVyOwkvKiAgZ2VuZXJhbCBwdXJwb3NlIHRpbWVyICovCisJc3RydWN0IGJmYV9mY3NfaXRuaW1fcyAqaXRuaW07CS8qICBJVE4gaW5pdGlhdG9yIG1vZGUgcm9sZSAqLworCXN0cnVjdCBiZmFfZmNzX3Rpbl9zICp0aW47CS8qICBJVE4gaW5pdGlhdG9yIG1vZGUgcm9sZSAqLworCXN0cnVjdCBiZmFfZmNzX2lwcnBfcyAqaXBycDsJLyogIElQL0ZDIHJvbGUgKi8KKwlzdHJ1Y3QgYmZhX3Jwb3J0X3MgKmJmYV9ycG9ydDsJLyogIEJGQSBScG9ydCAqLworCXN0cnVjdCBiZmFfZmN4cF9zICpmY3hwOwkvKiAgRkNYUCBuZWVkZWQgZm9yIGRpc2NhcmRpbmcgKi8KKwlpbnQgICAgICAgICAgICAgcGxvZ2lfcmV0cmllczsJLyogIG1heCBwbG9naSByZXRyeSBhdHRlbXB0cyAqLworCWludCAgICAgICAgICAgICBuc19yZXRyaWVzOwkvKiAgbWF4IE5TIHF1ZXJ5IHJldHJ5IGF0dGVtcHRzICovCisJc3RydWN0IGJmYV9mY3hwX3dxZV9zIAlmY3hwX3dxZTsgLyogIGZjeHAgd2FpdCBxdWV1ZSBlbGVtZW50ICovCisJc3RydWN0IGJmYV9ycG9ydF9zdGF0c19zIHN0YXRzOwkvKiAgcnBvcnQgc3RhdHMgKi8KKwllbnVtIGJmYV9ycG9ydF9mdW5jdGlvbglzY3NpX2Z1bmN0aW9uOyAgLyogIEluaXRpYXRvci9UYXJnZXQgKi8KKwlzdHJ1Y3QgYmZhX2Zjc19ycGZfcyBycGY7IAkvKiBScG9ydCBmZWF0dXJlcyBtb2R1bGUgKi8KK307CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGJmYV9ycG9ydF9zICoKK2JmYV9mY3NfcnBvcnRfZ2V0X2hhbHJwb3J0KHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0KQoreworCXJldHVybiBycG9ydC0+YmZhX3Jwb3J0OworfQorCisvKioKKyAqIGJmYSBmY3MgcnBvcnQgQVBJIGZ1bmN0aW9ucworICovCitiZmFfc3RhdHVzX3QgYmZhX2Zjc19ycG9ydF9hZGQoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LCB3d25fdCAqcHd3biwKKwkJCXN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0LAorCQkJc3RydWN0IGJmYWRfcnBvcnRfcyAqcnBvcnRfZHJ2KTsKK2JmYV9zdGF0dXNfdCBiZmFfZmNzX3Jwb3J0X3JlbW92ZShzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCk7Cit2b2lkIGJmYV9mY3NfcnBvcnRfZ2V0X2F0dHIoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQsCisJCQlzdHJ1Y3QgYmZhX3Jwb3J0X2F0dHJfcyAqYXR0cik7Cit2b2lkIGJmYV9mY3NfcnBvcnRfZ2V0X3N0YXRzKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0LAorCQkJc3RydWN0IGJmYV9ycG9ydF9zdGF0c19zICpzdGF0cyk7Cit2b2lkIGJmYV9mY3NfcnBvcnRfY2xlYXJfc3RhdHMoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQpOworc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqYmZhX2Zjc19ycG9ydF9sb29rdXAoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LAorCQkJd3duX3QgcnB3d24pOworc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqYmZhX2Zjc19ycG9ydF9sb29rdXBfYnlfbnd3bigKKwkJCXN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCwgd3duX3Qgcm53d24pOwordm9pZCBiZmFfZmNzX3Jwb3J0X3NldF9kZWxfdGltZW91dCh1OCBycG9ydF90bW8pOwordm9pZCBiZmFfZmNzX3Jwb3J0X3NldF9zcGVlZChzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCwKKwkJCWVudW0gYmZhX3Bwb3J0X3NwZWVkIHNwZWVkKTsKKyNlbmRpZiAvKiBfX0JGQV9GQ1NfUlBPUlRfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZmNzL2JmYV9mY3NfdnBvcnQuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9mY3MvYmZhX2Zjc192cG9ydC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkMzNmMmMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZmNzL2JmYV9mY3NfdnBvcnQuaApAQCAtMCwwICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKy8qKgorICogIGJmYV9mY3NfdnBvcnQuaCBCRkEgZmNzIHZwb3J0IG1vZHVsZSBwdWJsaWMgaW50ZXJmYWNlCisgKi8KKworI2lmbmRlZiBfX0JGQV9GQ1NfVlBPUlRfSF9fCisjZGVmaW5lIF9fQkZBX0ZDU19WUE9SVF9IX18KKworI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfc3RhdHVzLmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc19wb3J0Lmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc192cG9ydC5oPgorI2luY2x1ZGUgPGZjcy9iZmFfZmNzLmg+CisjaW5jbHVkZSA8ZmNiL2JmYV9mY2JfdnBvcnQuaD4KKworc3RydWN0IGJmYV9mY3NfdnBvcnRfcyB7CisJc3RydWN0IGxpc3RfaGVhZAkJcWU7CQkvKiAgcXVldWUgZWxlbQkgKi8KKwliZmFfc21fdAkJc207CQkvKiAgc3RhdGUgbWFjaGluZQkqLworCWJmYV9mY3NfbHBvcnRfdAkJbHBvcnQ7CQkvKiAgbG9naWNhbCBwb3J0CSovCisJc3RydWN0IGJmYV90aW1lcl9zCXRpbWVyOwkJLyogIGdlbmVyYWwgcHVycG9zZSB0aW1lciAqLworCXN0cnVjdCBiZmFkX3Zwb3J0X3MJKnZwb3J0X2RydjsJLyogIERyaXZlciBwcml2YXRlCSovCisJc3RydWN0IGJmYV92cG9ydF9zdGF0c19zIHZwb3J0X3N0YXRzOwkvKiAgdnBvcnQgc3RhdGlzdGljcwkqLworCXN0cnVjdCBiZmFfbHBzX3MJKmxwczsJCS8qICBMcG9ydCBsb2dpbiBzZXJ2aWNlICovCisJaW50CQkJZmRpc2NfcmV0cmllczsKK307CisKKyNkZWZpbmUgYmZhX2Zjc192cG9ydF9nZXRfcG9ydCh2cG9ydCkgXAorCQkJKChzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgICopKCZ2cG9ydC0+cG9ydCkpCisKKy8qKgorICogYmZhIGZjcyB2cG9ydCBwdWJsaWMgZnVuY3Rpb25zCisgKi8KK2JmYV9zdGF0dXNfdCBiZmFfZmNzX3Zwb3J0X2NyZWF0ZShzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zICp2cG9ydCwKKwkJCXN0cnVjdCBiZmFfZmNzX3MgKmZjcywgdTE2IHZmX2lkLAorCQkJc3RydWN0IGJmYV9wb3J0X2NmZ19zICpwb3J0X2NmZywKKwkJCXN0cnVjdCBiZmFkX3Zwb3J0X3MgKnZwb3J0X2Rydik7CitiZmFfc3RhdHVzX3QgYmZhX2Zjc192cG9ydF9kZWxldGUoc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqdnBvcnQpOworYmZhX3N0YXR1c190IGJmYV9mY3NfdnBvcnRfc3RhcnQoc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqdnBvcnQpOworYmZhX3N0YXR1c190IGJmYV9mY3NfdnBvcnRfc3RvcChzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zICp2cG9ydCk7Cit2b2lkIGJmYV9mY3NfdnBvcnRfZ2V0X2F0dHIoc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqdnBvcnQsCisJCQlzdHJ1Y3QgYmZhX3Zwb3J0X2F0dHJfcyAqdnBvcnRfYXR0cik7Cit2b2lkIGJmYV9mY3NfdnBvcnRfZ2V0X3N0YXRzKHN0cnVjdCBiZmFfZmNzX3Zwb3J0X3MgKnZwb3J0LAorCQkJc3RydWN0IGJmYV92cG9ydF9zdGF0c19zICp2cG9ydF9zdGF0cyk7Cit2b2lkIGJmYV9mY3NfdnBvcnRfY2xyX3N0YXRzKHN0cnVjdCBiZmFfZmNzX3Zwb3J0X3MgKnZwb3J0KTsKK3N0cnVjdCBiZmFfZmNzX3Zwb3J0X3MgKmJmYV9mY3NfdnBvcnRfbG9va3VwKHN0cnVjdCBiZmFfZmNzX3MgKmZjcywKKwkJCXUxNiB2Zl9pZCwgd3duX3QgdnB3d24pOworCisjZW5kaWYgLyogX19CRkFfRkNTX1ZQT1JUX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2xvZy9iZmFfbG9nX2Zjcy5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2xvZy9iZmFfbG9nX2Zjcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2ZjVkZjgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvbG9nL2JmYV9sb2dfZmNzLmgKQEAgLTAsMCArMSwyOCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisvKgorICogbWVzc2FnZXMgZGVmaW5lIGZvciBGQ1MgTW9kdWxlCisgKi8KKyNpZm5kZWYJX19CRkFfTE9HX0ZDU19IX18KKyNkZWZpbmUJX19CRkFfTE9HX0ZDU19IX18KKyNpbmNsdWRlICA8Y3MvYmZhX2xvZy5oPgorI2RlZmluZSBCRkFfTE9HX0ZDU19GQUJSSUNfTk9TV0lUQ0ggCVwKKwkoKCh1MzIpIEJGQV9MT0dfRkNTX0lEIDw8IEJGQV9MT0dfTU9ESURfT0ZGU0VUKSB8IDEpCisjZGVmaW5lIEJGQV9MT0dfRkNTX0ZBQlJJQ19JU09MQVRFRCAJXAorCSgoKHUzMikgQkZBX0xPR19GQ1NfSUQgPDwgQkZBX0xPR19NT0RJRF9PRkZTRVQpIHwgMikKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2xvZy9iZmFfbG9nX2hhbC5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2xvZy9iZmFfbG9nX2hhbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0MTJhZWEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvbG9nL2JmYV9sb2dfaGFsLmgKQEAgLTAsMCArMSwzMCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisvKiBtZXNzYWdlcyBkZWZpbmUgZm9yIEhBTCBNb2R1bGUgKi8KKyNpZm5kZWYJX19CRkFfTE9HX0hBTF9IX18KKyNkZWZpbmUJX19CRkFfTE9HX0hBTF9IX18KKyNpbmNsdWRlICA8Y3MvYmZhX2xvZy5oPgorI2RlZmluZSBCRkFfTE9HX0hBTF9BU1NFUlQgXAorCSgoKHUzMikgQkZBX0xPR19IQUxfSUQgPDwgQkZBX0xPR19NT0RJRF9PRkZTRVQpIHwgMSkKKyNkZWZpbmUgQkZBX0xPR19IQUxfSEVBUlRCRUFUX0ZBSUxVUkUgXAorCSgoKHUzMikgQkZBX0xPR19IQUxfSUQgPDwgQkZBX0xPR19NT0RJRF9PRkZTRVQpIHwgMikKKyNkZWZpbmUgQkZBX0xPR19IQUxfRkNQSU1fUEFSTV9JTlZBTElEIFwKKwkoKCh1MzIpIEJGQV9MT0dfSEFMX0lEIDw8IEJGQV9MT0dfTU9ESURfT0ZGU0VUKSB8IDMpCisjZGVmaW5lIEJGQV9MT0dfSEFMX1NNX0FTU0VSVCBcCisJKCgodTMyKSBCRkFfTE9HX0hBTF9JRCA8PCBCRkFfTE9HX01PRElEX09GRlNFVCkgfCA0KQorI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvbG9nL2JmYV9sb2dfbGludXguaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9sb2cvYmZhX2xvZ19saW51eC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxN2MwNTQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvbG9nL2JmYV9sb2dfbGludXguaApAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKy8qIG1lc3NhZ2VzIGRlZmluZSBmb3IgTElOVVggTW9kdWxlICovCisjaWZuZGVmCV9fQkZBX0xPR19MSU5VWF9IX18KKyNkZWZpbmUJX19CRkFfTE9HX0xJTlVYX0hfXworI2luY2x1ZGUgIDxjcy9iZmFfbG9nLmg+CisjZGVmaW5lIEJGQV9MT0dfTElOVVhfREVWSUNFX0NMQUlNRUQgXAorCQkoKCh1MzIpIEJGQV9MT0dfTElOVVhfSUQgPDwgQkZBX0xPR19NT0RJRF9PRkZTRVQpIHwgMSkKKyNkZWZpbmUgQkZBX0xPR19MSU5VWF9IQVNIX0lOSVRfRkFJTEVEIFwKKwkJKCgodTMyKSBCRkFfTE9HX0xJTlVYX0lEIDw8IEJGQV9MT0dfTU9ESURfT0ZGU0VUKSB8IDIpCisjZGVmaW5lIEJGQV9MT0dfTElOVVhfU1lTRlNfRkFJTEVEIFwKKwkJKCgodTMyKSBCRkFfTE9HX0xJTlVYX0lEIDw8IEJGQV9MT0dfTU9ESURfT0ZGU0VUKSB8IDMpCisjZGVmaW5lIEJGQV9MT0dfTElOVVhfTUVNX0FMTE9DX0ZBSUxFRCBcCisJCSgoKHUzMikgQkZBX0xPR19MSU5VWF9JRCA8PCBCRkFfTE9HX01PRElEX09GRlNFVCkgfCA0KQorI2RlZmluZSBCRkFfTE9HX0xJTlVYX0RSSVZFUl9SRUdJU1RSQVRJT05fRkFJTEVEIFwKKwkJKCgodTMyKSBCRkFfTE9HX0xJTlVYX0lEIDw8IEJGQV9MT0dfTU9ESURfT0ZGU0VUKSB8IDUpCisjZGVmaW5lIEJGQV9MT0dfTElOVVhfSVROSU1fRlJFRSBcCisJCSgoKHUzMikgQkZBX0xPR19MSU5VWF9JRCA8PCBCRkFfTE9HX01PRElEX09GRlNFVCkgfCA2KQorI2RlZmluZSBCRkFfTE9HX0xJTlVYX0lUTklNX09OTElORSBcCisJCSgoKHUzMikgQkZBX0xPR19MSU5VWF9JRCA8PCBCRkFfTE9HX01PRElEX09GRlNFVCkgfCA3KQorI2RlZmluZSBCRkFfTE9HX0xJTlVYX0lUTklNX09GRkxJTkUgXAorCQkoKCh1MzIpIEJGQV9MT0dfTElOVVhfSUQgPDwgQkZBX0xPR19NT0RJRF9PRkZTRVQpIHwgOCkKKyNkZWZpbmUgQkZBX0xPR19MSU5VWF9TQ1NJX0hPU1RfRlJFRSBcCisJCSgoKHUzMikgQkZBX0xPR19MSU5VWF9JRCA8PCBCRkFfTE9HX01PRElEX09GRlNFVCkgfCA5KQorI2RlZmluZSBCRkFfTE9HX0xJTlVYX1NDU0lfQUJPUlQgXAorCQkoKCh1MzIpIEJGQV9MT0dfTElOVVhfSUQgPDwgQkZBX0xPR19NT0RJRF9PRkZTRVQpIHwgMTApCisjZGVmaW5lIEJGQV9MT0dfTElOVVhfU0NTSV9BQk9SVF9DT01QIFwKKwkJKCgodTMyKSBCRkFfTE9HX0xJTlVYX0lEIDw8IEJGQV9MT0dfTU9ESURfT0ZGU0VUKSB8IDExKQorI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvbG9nL2JmYV9sb2dfd2Rydi5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2xvZy9iZmFfbG9nX3dkcnYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDlhOTVmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2xvZy9iZmFfbG9nX3dkcnYuaApAQCAtMCwwICsxLDM2IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKy8qCisgKiBtZXNzYWdlcyBkZWZpbmUgZm9yIFdEUlYgTW9kdWxlCisgKi8KKyNpZm5kZWYJX19CRkFfTE9HX1dEUlZfSF9fCisjZGVmaW5lCV9fQkZBX0xPR19XRFJWX0hfXworI2luY2x1ZGUgIDxjcy9iZmFfbG9nLmg+CisjZGVmaW5lIEJGQV9MT0dfV0RSVl9JT0NfSU5JVF9FUlJPUiAJXAorCSgoKHUzMikgQkZBX0xPR19XRFJWX0lEIDw8IEJGQV9MT0dfTU9ESURfT0ZGU0VUKSB8IDEpCisjZGVmaW5lIEJGQV9MT0dfV0RSVl9JT0NfSU5URVJOQUxfRVJST1IgXAorCSgoKHUzMikgQkZBX0xPR19XRFJWX0lEIDw8IEJGQV9MT0dfTU9ESURfT0ZGU0VUKSB8IDIpCisjZGVmaW5lIEJGQV9MT0dfV0RSVl9JT0NfU1RBUlRfRVJST1IgCVwKKwkoKCh1MzIpIEJGQV9MT0dfV0RSVl9JRCA8PCBCRkFfTE9HX01PRElEX09GRlNFVCkgfCAzKQorI2RlZmluZSBCRkFfTE9HX1dEUlZfSU9DX1NUT1BfRVJST1IgCVwKKwkoKCh1MzIpIEJGQV9MT0dfV0RSVl9JRCA8PCBCRkFfTE9HX01PRElEX09GRlNFVCkgfCA0KQorI2RlZmluZSBCRkFfTE9HX1dEUlZfSU5TVUZGSUNJRU5UX1JFU09VUkNFUyBcCisJKCgodTMyKSBCRkFfTE9HX1dEUlZfSUQgPDwgQkZBX0xPR19NT0RJRF9PRkZTRVQpIHwgNSkKKyNkZWZpbmUgQkZBX0xPR19XRFJWX0JBU0VfQUREUkVTU19NQVBfRVJST1IgXAorCSgoKHUzMikgQkZBX0xPR19XRFJWX0lEIDw8IEJGQV9MT0dfTU9ESURfT0ZGU0VUKSB8IDYpCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9wcm90b2NvbC9jdC5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL3Byb3RvY29sL2N0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzU5ZDY2MwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9wcm90b2NvbC9jdC5oCkBAIC0wLDAgKzEsNDkyIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX19DVF9IX18KKyNkZWZpbmUgX19DVF9IX18KKworI2luY2x1ZGUgPHByb3RvY29sL3R5cGVzLmg+CisKKyNwcmFnbWEgcGFjaygxKQorCitzdHJ1Y3QgY3RfaGRyX3N7CisJdTMyCXJldl9pZDo4OwkvKiBSZXZpc2lvbiBvZiB0aGUgQ1QgKi8KKwl1MzIJaW5faWQ6MjQ7CS8qIEluaXRpYXRvciBJZCAqLworCXUzMglnc190eXBlOjg7CS8qIEdlbmVyaWMgc2VydmljZSBUeXBlICovCisJdTMyCWdzX3N1Yl90eXBlOjg7CS8qIEdlbmVyaWMgc2VydmljZSBzdWIgdHlwZSAqLworCXUzMglvcHRpb25zOjg7CS8qIG9wdGlvbnMgKi8KKwl1MzIJcnN2cmQ6ODsJLyogcmVzZXJ2ZWQgKi8KKwl1MzIJY21kX3JzcF9jb2RlOjE2Oy8qIGN0IGNvbW1hbmQvcmVzcG9uc2UgY29kZSAqLworCXUzMgltYXhfcmVzX3NpemU6MTY7LyogbWF4aW11bS9yZXNpZHVhbCBzaXplICovCisJdTMyCWZyYWdfaWQ6ODsJLyogZnJhZ21lbnQgSUQgKi8KKwl1MzIJcmVhc29uX2NvZGU6ODsJLyogcmVhc29uIGNvZGUgKi8KKwl1MzIJZXhwX2NvZGU6ODsJLyogZXhwbGFuYXRpb24gY29kZSAqLworCXUzMgl2ZW5kb3JfdW5xOjg7CS8qIHZlbmRvciB1bmlxdWUgKi8KK307CisKKy8qCisgKiBkZWZpbmVzIGZvciB0aGUgUmV2aXNpb24KKyAqLworZW51bSB7CisJQ1RfR1MzX1JFVklTSU9OID0gMHgwMSwKK307CisKKy8qCisgKiBkZWZpbmVzIGZvciBnc190eXBlCisgKi8KK2VudW0geworCUNUX0dTVFlQRV9LRVlTRVJWSUNFCT0gMHhGNywKKwlDVF9HU1RZUEVfQUxJQVNTRVJWSUNFCT0gMHhGOCwKKwlDVF9HU1RZUEVfTUdNVFNFUlZJQ0UJPSAweEZBLAorCUNUX0dTVFlQRV9USU1FU0VSVklDRQk9IDB4RkIsCisJQ1RfR1NUWVBFX0RJUlNFUlZJQ0UJPSAweEZDLAorfTsKKworLyoKKyAqIGRlZmluZXMgZm9yIGdzX3N1Yl90eXBlIGZvciBncyB0eXBlIGRpcmVjdG9yeSBzZXJ2aWNlCisgKi8KK2VudW0geworCUNUX0dTU1VCVFlQRV9OQU1FU0VSVkVSID0gMHgwMiwKK307CisKKy8qCisgKiBkZWZpbmVzIGZvciBnc19zdWJfdHlwZSBmb3IgZ3MgdHlwZSBtYW5hZ2VtZW50IHNlcnZpY2UKKyAqLworZW51bSB7CisJQ1RfR1NTVUJUWVBFX0NGR1NFUlZFUgk9IDB4MDEsCisJQ1RfR1NTVUJUWVBFX1VOWk9ORURfTlMgPSAweDAyLAorCUNUX0dTU1VCVFlQRV9aT05FU0VSVkVSID0gMHgwMywKKwlDVF9HU1NVQlRZUEVfTE9DS1NFUlZFUiA9IDB4MDQsCisJQ1RfR1NTVUJUWVBFX0hCQV9NR01UU0VSVkVSID0gMHgxMCwJLyogZm9yIEZETUkgKi8KK307CisKKy8qCisgKiBkZWZpbmVzIGZvciBDVCByZXNwb25zZSBjb2RlIGZpZWxkCisgKi8KK2VudW0geworCUNUX1JTUF9SRUpFQ1QgPSAweDgwMDEsCisJQ1RfUlNQX0FDQ0VQVCA9IDB4ODAwMiwKK307CisKKy8qCisgKiBkZWZpbnRpb25zIGZvciBDVCByZWFzb24gY29kZQorICovCitlbnVtIHsKKwlDVF9SU05fSU5WX0NNRAkJPSAweDAxLAorCUNUX1JTTl9JTlZfVkVSCQk9IDB4MDIsCisJQ1RfUlNOX0xPR0lDX0VSUgk9IDB4MDMsCisJQ1RfUlNOX0lOVl9TSVpFCQk9IDB4MDQsCisJQ1RfUlNOX0xPR0lDQUxfQlVTWQk9IDB4MDUsCisJQ1RfUlNOX1BST1RPX0VSUgk9IDB4MDcsCisJQ1RfUlNOX1VOQUJMRV9UT19QRVJGCT0gMHgwOSwKKwlDVF9SU05fTk9UX1NVUFAJCQk9IDB4MEIsCisJQ1RfUlNOX1NFUlZFUl9OT1RfQVZCTCAgPSAweDBELAorCUNUX1JTTl9TRVNTSU9OX0NPVUxEX05PVF9CRV9FU1RCRCA9IDB4MEUsCisJQ1RfUlNOX1ZFTkRPUl9TUEVDSUZJQyAgPSAweEZGLAorCit9OworCisvKgorICogZGVmaW5pdGlvbnMgZm9yIGV4cGxhbmF0aW9ucyBjb2RlIGZvciBOYW1lIHNlcnZlcgorICovCitlbnVtIHsKKwlDVF9OU19FWFBfTk9BRERJVElPTkFMCT0gMHgwMCwKKwlDVF9OU19FWFBfSURfTk9UX1JFRwk9IDB4MDEsCisJQ1RfTlNfRVhQX1BOX05PVF9SRUcJPSAweDAyLAorCUNUX05TX0VYUF9OTl9OT1RfUkVHCT0gMHgwMywKKwlDVF9OU19FWFBfQ1NfTk9UX1JFRwk9IDB4MDQsCisJQ1RfTlNfRVhQX0lQTl9OT1RfUkVHCT0gMHgwNSwKKwlDVF9OU19FWFBfSVBBX05PVF9SRUcJPSAweDA2LAorCUNUX05TX0VYUF9GVF9OT1RfUkVHCT0gMHgwNywKKwlDVF9OU19FWFBfU1BOX05PVF9SRUcJPSAweDA4LAorCUNUX05TX0VYUF9TTk5fTk9UX1JFRwk9IDB4MDksCisJQ1RfTlNfRVhQX1BUX05PVF9SRUcJPSAweDBBLAorCUNUX05TX0VYUF9JUFBfTk9UX1JFRwk9IDB4MEIsCisJQ1RfTlNfRVhQX0ZQTl9OT1RfUkVHCT0gMHgwQywKKwlDVF9OU19FWFBfSEFfTk9UX1JFRwk9IDB4MEQsCisJQ1RfTlNfRVhQX0ZEX05PVF9SRUcJPSAweDBFLAorCUNUX05TX0VYUF9GRl9OT1RfUkVHCT0gMHgwRiwKKwlDVF9OU19FWFBfQUNDRVNTREVOSUVECT0gMHgxMCwKKwlDVF9OU19FWFBfVU5BQ0NFUFRBQkxFX0lEID0gMHgxMSwKKwlDVF9OU19FWFBfREFUQUJBU0VFTVBUWQkJCT0gMHgxMiwKKwlDVF9OU19FWFBfTk9UX1JFR19JTl9TQ09QRSAJCT0gMHgxMywKKwlDVF9OU19FWFBfRE9NX0lEX05PVF9QUkVTRU5UIAk9IDB4MTQsCisJQ1RfTlNfRVhQX1BPUlRfTlVNX05PVF9QUkVTRU5UICA9IDB4MTUsCisJQ1RfTlNfRVhQX05PX0RFVklDRV9BVFRBQ0hFRCAJPSAweDE2Cit9OworCisvKgorICogZGVmaW50aW9ucyBmb3IgdGhlIGV4cGxhbmF0aW9uIGNvZGUgZm9yIGFsbCBzZXJ2ZXJzCisgKi8KK2VudW0geworCUNUX0VYUF9BVVRIX0VYQ0VQVElPTgkJCT0gMHhGMSwKKwlDVF9FWFBfREJfRlVMTAkJCQkJPSAweEYyLAorCUNUX0VYUF9EQl9FTVBUWQkJCQkJPSAweEYzLAorCUNUX0VYUF9QUk9DRVNTSU5HX1JFUQkJCT0gMHhGNCwKKwlDVF9FWFBfVU5BQkxFX1RPX1ZFUklGWV9DT05OCT0gMHhGNSwKKwlDVF9FWFBfREVWSUNFU19OT1RfSU5fQ01OX1pPTkUgID0gMHhGNgorfTsKKworLyoKKyAqIENvbW1hbmQgY29kZXMgZm9yIE5hbWUgc2VydmVyCisgKi8KK2VudW0geworCUdTX0dJRF9QTgk9IDB4MDEyMSwJLyogR2V0IElkIG9uIHBvcnQgbmFtZSAqLworCUdTX0dQTl9JRAk9IDB4MDExMiwJLyogR2V0IHBvcnQgbmFtZSBvbiBJRCAqLworCUdTX0dOTl9JRAk9IDB4MDExMywJLyogR2V0IG5vZGUgbmFtZSBvbiBJRCAqLworCUdTX0dJRF9GVAk9IDB4MDE3MSwJLyogR2V0IElkIG9uIEZDNCB0eXBlICovCisJR1NfR1NQTl9JRAk9IDB4MDExOCwJLyogR2V0IHN5bWJvbGljIFBOIG9uIElEICovCisJR1NfUkZUX0lECT0gMHgwMjE3LAkvKiBSZWdpc3RlciBmYzR0eXBlIG9uIElEICovCisJR1NfUlNQTl9JRAk9IDB4MDIxOCwJLyogUmVnaXN0ZXIgc3ltYm9saWMgUE4gb24gSUQgKi8KKwlHU19SUE5fSUQJPSAweDAyMTIsCS8qIFJlZ2lzdGVyIHBvcnQgbmFtZSAqLworCUdTX1JOTl9JRAk9IDB4MDIxMywJLyogUmVnaXN0ZXIgbm9kZSBuYW1lICovCisJR1NfUkNTX0lECT0gMHgwMjE0LAkvKiBSZWdpc3RlciBjbGFzcyBvZiBzZXJ2aWNlICovCisJR1NfUlBUX0lECT0gMHgwMjFBLAkvKiBSZWdpc3RlciBwb3J0IHR5cGUgKi8KKwlHU19HQV9OWFQJPSAweDAxMDAsCS8qIEdldCBhbGwgbmV4dCAqLworCUdTX1JGRl9JRAk9IDB4MDIxRiwJLyogUmVnaXN0ZXIgRkM0IEZlYXR1cmUJCSovCit9OworCitzdHJ1Y3QgZmNnc19pZF9yZXFfc3sKKwl1MzIJcnN2ZDo4OworCXUzMglkYXA6MjQ7CS8qIHBvcnQgaWRlbnRpZmllciAqLworfTsKKyNkZWZpbmUgZmNnc19ncG5pZF9yZXFfdCBzdHJ1Y3QgZmNnc19pZF9yZXFfcworI2RlZmluZSBmY2dzX2dubmlkX3JlcV90IHN0cnVjdCBmY2dzX2lkX3JlcV9zCisjZGVmaW5lIGZjZ3NfZ3NwbmlkX3JlcV90IHN0cnVjdCBmY2dzX2lkX3JlcV9zCisKK3N0cnVjdCBmY2dzX2dpZHBuX3JlcV9zeworCXd3bl90CXBvcnRfbmFtZTsJLyogcG9ydCB3d24gKi8KK307CisKK3N0cnVjdCBmY2dzX2dpZHBuX3Jlc3Bfc3sKKwl1MzIJcnN2ZDo4OworCXUzMglkYXA6MjQ7CS8qIHBvcnQgaWRlbnRpZmllciAqLworfTsKKworLyoqCisgKiBSRlRfSUQKKyAqLworc3RydWN0IGZjZ3NfcmZ0aWRfcmVxX3MgeworCXUzMglyc3ZkOjg7CisJdTMyCWRhcDoyNDsJCS8qIHBvcnQgaWRlbnRpZmllciAqLworCXUzMglmYzRfdHlwZVs4XTsJLyogZmM0IHR5cGVzICovCit9OworCisvKioKKyAqIFJGRl9JRCA6IFJlZ2lzdGVyIEZDNCBmZWF0dXJlcy4KKyAqLworCisjZGVmaW5lIEZDX0dTX0ZDUF9GQzRfRkVBVFVSRV9JTklUSUFUT1IgIDB4MDIKKyNkZWZpbmUgRkNfR1NfRkNQX0ZDNF9GRUFUVVJFX1RBUkdFVAkgMHgwMQorCitzdHJ1Y3QgZmNnc19yZmZpZF9yZXFfc3sKKyAgICB1MzIgICAgcnN2ZCAgICAgICAgICA6ODsKKyAgICB1MzIgICAgZGFwICAgICAgICAJICA6MjQ7CQkvKiBwb3J0IGlkZW50aWZpZXIJKi8KKyAgICB1MzIgICAgcnN2ZDEgICAgICAgICA6MTY7CisgICAgdTMyICAgIGZjNGZ0cl9iaXRzICAgOjg7CQkvKiBmYzQgZmVhdHVyZSBiaXRzCSovCisgICAgdTMyICAgIGZjNF90eXBlICAgICAgOjg7CQkvKiBjb3JyZXNwb25kaW5nIEZDNCBUeXBlICovCit9OworCisvKioKKyAqIEdJRF9GVCBSZXF1ZXN0CisgKi8KK3N0cnVjdCBmY2dzX2dpZGZ0X3JlcV9zeworCXU4CXJlc2VydmVkOworCXU4CWRvbWFpbl9pZDsJLyogZG9tYWluLCAwIC0gYWxsIGZhYnJpYyAqLworCXU4CWFyZWFfaWQ7CS8qIGFyZWEsIDAgLSB3aG9sZSBkb21haW4gKi8KKwl1OAlmYzRfdHlwZTsJLyogRkNfVFlQRV9GQ1AgZm9yIFNDU0kgZGV2aWNlcyAqLworfTsJCQkJLyogR0lEX0ZUIFJlcXVlc3QgKi8KKworLyoqCisgKiBHSURfRlQgUmVzcG9uc2UKKyAqLworc3RydWN0IGZjZ3NfZ2lkZnRfcmVzcF9zIHsKKwl1OAkJbGFzdDoxOwkvKiBsYXN0IHBvcnQgaWRlbnRpZmllciBmbGFnICovCisJdTgJCXJlc2VydmVkOjc7CisJdTMyCXBpZDoyNDsJLyogcG9ydCBpZGVudGlmaWVyICovCit9OwkJCQkvKiBHSURfRlQgUmVzcG9uc2UgKi8KKworLyoqCisgKiBSU1BOX0lECisgKi8KK3N0cnVjdCBmY2dzX3JzcG5pZF9yZXFfc3sKKwl1MzIJcnN2ZDo4OworCXUzMglkYXA6MjQ7CQkvKiBwb3J0IGlkZW50aWZpZXIgKi8KKwl1OAkJc3BuX2xlbjsJLyogc3ltYm9saWMgcG9ydCBuYW1lIGxlbmd0aCAqLworCXU4CQlzcG5bMjU2XTsJLyogc3ltYm9saWMgcG9ydCBuYW1lICovCit9OworCisvKioKKyAqIFJQTl9JRAorICovCitzdHJ1Y3QgZmNnc19ycG5pZF9yZXFfc3sKKwl1MzIJcnN2ZDo4OworCXUzMglwb3J0X2lkOjI0OworCXd3bl90CQlwb3J0X25hbWU7Cit9OworCisvKioKKyAqIFJOTl9JRAorICovCitzdHJ1Y3QgZmNnc19ybm5pZF9yZXFfc3sKKwl1MzIJcnN2ZDo4OworCXUzMglwb3J0X2lkOjI0OworCXd3bl90CQlub2RlX25hbWU7Cit9OworCisvKioKKyAqIFJDU19JRAorICovCitzdHJ1Y3QgZmNnc19yY3NpZF9yZXFfc3sKKwl1MzIJcnN2ZDo4OworCXUzMglwb3J0X2lkOjI0OworCXUzMgljb3M7Cit9OworCisvKioKKyAqIFJQVF9JRAorICovCitzdHJ1Y3QgZmNnc19ycHRpZF9yZXFfc3sKKwl1MzIJcnN2ZDo4OworCXUzMglwb3J0X2lkOjI0OworCXUzMglwb3J0X3R5cGU6ODsKKwl1MzIJcnN2ZDE6MjQ7Cit9OworCisvKioKKyAqIEdBX05YVCBSZXF1ZXN0CisgKi8KK3N0cnVjdCBmY2dzX2dhbnh0X3JlcV9zeworCXUzMglyc3ZkOjg7CisJdTMyCXBvcnRfaWQ6MjQ7Cit9OworCisvKioKKyAqIEdBX05YVCBSZXNwb25zZQorICovCitzdHJ1Y3QgZmNnc19nYW54dF9yc3Bfc3sKKwl1MzIJcG9ydF90eXBlOjg7CS8qIFBvcnQgVHlwZSAqLworCXUzMglwb3J0X2lkOjI0OwkvKiBQb3J0IElkZW50aWZpZXIgKi8KKwl3d25fdAkJcG9ydF9uYW1lOwkvKiBQb3J0IE5hbWUgKi8KKwl1OAkJc3BuX2xlbjsJLyogTGVuZ3RoIG9mIFN5bWJvbGljIFBvcnQgTmFtZSAqLworCWNoYXIJCXNwblsyNTVdOwkvKiBTeW1ib2xpYyBQb3J0IE5hbWUgKi8KKwl3d25fdAkJbm9kZV9uYW1lOwkvKiBOb2RlIE5hbWUgKi8KKwl1OAkJc25uX2xlbjsJLyogTGVuZ3RoIG9mIFN5bWJvbGljIE5vZGUgTmFtZSAqLworCWNoYXIJCXNublsyNTVdOwkvKiBTeW1ib2xpYyBOb2RlIE5hbWUgKi8KKwl1OAkJaXBhWzhdOwkJLyogSW5pdGlhbCBQcm9jZXNzIEFzc29jaWF0b3IgKi8KKwl1OAkJaXBbMTZdOwkJLyogSVAgQWRkcmVzcyAqLworCXUzMgljb3M7CQkvKiBDbGFzcyBvZiBTZXJ2aWNlICovCisJdTMyCWZjNHR5cGVzWzhdOwkvKiBGQy00IFRZUEVzICovCisJd3duX3QJCWZhYnJpY19wb3J0X25hbWU7CisJCQkJCS8qIEZhYnJpYyBQb3J0IE5hbWUgKi8KKwl1MzIJcnN2ZDo4OwkJLyogUmVzZXJ2ZWQgKi8KKwl1MzIJaGFyZF9hZGRyOjI0OwkvKiBIYXJkIEFkZHJlc3MgKi8KK307CisKKy8qCisgKiBGYWJyaWMgQ29uZmlnIFNlcnZlcgorICovCisKKy8qCisgKiBDb21tYW5kIGNvZGVzIGZvciBGYWJyaWMgQ29uZmlndXJhdGlvbiBTZXJ2ZXIKKyAqLworZW51bSB7CisJR1NfRkNfR0ZOX0NNRAk9IDB4MDExNCwJLyogR1MgRkMgR2V0IEZhYnJpYyBOYW1lICAqLworCUdTX0ZDX0dNQUxfQ01ECT0gMHgwMTE2LAkvKiBHUyBGQyBHTUFMICAqLworCUdTX0ZDX1RSQUNFX0NNRAk9IDB4MDQwMCwJLyogR1MgRkMgVHJhY2UgUm91dGUgKi8KKwlHU19GQ19QSU5HX0NNRAk9IDB4MDQwMSwJLyogR1MgRkMgUGluZyAqLworfTsKKworLyoKKyAqIFNvdXJjZSBvciBEZXN0aW5hdGlvbiBQb3J0IFRhZ3MuCisgKi8KK2VudW0geworCUdTX0ZUUkFDRV9UQUdfTlBPUlRfSUQJCT0gMSwKKwlHU19GVFJBQ0VfVEFHX05QT1JUX05BTUUJPSAyLAorfTsKKworLyoKKyogUG9ydCBWYWx1ZSA6IENvdWxkIGJlIGEgUG9ydCBpZCBvciB3d24KKyAqLwordW5pb24gZmNnc19wb3J0X3ZhbF91eworCXUzMglucG9ydF9pZDsKKwl3d25fdAkJbnBvcnRfd3duOworfTsKKworI2RlZmluZSBHU19GVFJBQ0VfTUFYX0hPUF9DT1VOVAkyMAorI2RlZmluZSBHU19GVFJBQ0VfUkVWSVNJT04JMQorCisvKgorICogRnRyYWNlIFJlbGF0ZWQgU3RydWN0dXJlcy4KKyAqLworCisvKgorICogU1RSIChTd2l0Y2ggVHJhY2UpIFJlamVjdCBSZWFzb24gQ29kZXMuIEZyb20gRkMtU1cuCisgKi8KK2VudW0geworCUdTX0ZUUkFDRV9TVFJfQ01EX0NPTVBMRVRFRF9TVUNDCT0gMCwKKwlHU19GVFJBQ0VfU1RSX0NNRF9OT1RfU1VQUF9JTl9ORVhUX1NXSVRDSCwKKwlHU19GVFJBQ0VfU1RSX05PX1JFU1BfRlJPTV9ORVhUX1NXSVRDSCwKKwlHU19GVFJBQ0VfU1RSX01BWF9IT1BfQ05UX1JFQUNIRUQsCisJR1NfRlRSQUNFX1NUUl9TUkNfUE9SVF9OT1RfRk9VTkQsCisJR1NfRlRSQUNFX1NUUl9EU1RfUE9SVF9OT1RfRk9VTkQsCisJR1NfRlRSQUNFX1NUUl9ERVZJQ0VTX05PVF9JTl9DT01NT05fWk9ORSwKKwlHU19GVFJBQ0VfU1RSX05PX1JPVVRFX0JXX1BPUlRTLAorCUdTX0ZUUkFDRV9TVFJfTk9fQURETF9FWFBMTiwKKwlHU19GVFJBQ0VfU1RSX0ZBQlJJQ19CVVNZLAorCUdTX0ZUUkFDRV9TVFJfRkFCUklDX0JVSUxEX0lOX1BST0dSRVNTLAorCUdTX0ZUUkFDRV9TVFJfVkVORE9SX1NQRUNJRklDX0VSUl9TVEFSVCA9IDB4ZjAsCisJR1NfRlRSQUNFX1NUUl9WRU5ET1JfU1BFQ0lGSUNfRVJSX0VORCA9IDB4ZmYsCit9OworCisvKgorICogRnRyYWNlIFJlcXVlc3QKKyAqLworc3RydWN0IGZjZ3NfZnRyYWNlX3JlcV9zeworCXUzMglyZXZpc2lvbjsKKwl1MTYJc3JjX3BvcnRfdGFnOwkvKiBTb3VyY2UgUG9ydCB0YWcgKi8KKwl1MTYJc3JjX3BvcnRfbGVuOwkvKiBTb3VyY2UgUG9ydCBsZW4gKi8KKwl1bmlvbiBmY2dzX3BvcnRfdmFsX3Ugc3JjX3BvcnRfdmFsOwkvKiBTb3VyY2UgUG9ydCB2YWx1ZSAqLworCXUxNglkc3RfcG9ydF90YWc7CS8qIERlc3RpbmF0aW9uIFBvcnQgdGFnICovCisJdTE2CWRzdF9wb3J0X2xlbjsJLyogRGVzdGluYXRpb24gUG9ydCBsZW4gKi8KKwl1bmlvbiBmY2dzX3BvcnRfdmFsX3UgZHN0X3BvcnRfdmFsOwkvKiBEZXN0aW5hdGlvbiBQb3J0IHZhbHVlICovCisJdTMyCXRva2VuOworCXU4CQl2ZW5kb3JfaWRbOF07CS8qIFQxMCBWZW5kb3IgSWRlbnRpZmllciAqLworCXU4CQl2ZW5kb3JfaW5mb1s4XTsJLyogVmVuZG9yIHNwZWNpZmljIEluZm8gKi8KKwl1MzIJbWF4X2hvcF9jbnQ7CS8qIE1heCBIb3AgQ291bnQgKi8KK307CisKKy8qCisgKiBQYXRoIGluZm8gc3RydWN0dXJlCisgKi8KK3N0cnVjdCBmY2dzX2Z0cmFjZV9wYXRoX2luZm9fc3sKKwl3d25fdAkJc3dpdGNoX25hbWU7CQkvKiBTd2l0Y2ggV1dOICovCisJdTMyCWRvbWFpbl9pZDsKKwl3d25fdAkJaW5ncmVzc19wb3J0X25hbWU7CS8qIEluZ3Jlc3MgcG9ydHMgd3duICovCisJdTMyCWluZ3Jlc3NfcGh5c19wb3J0X251bTsJLyogSW5ncmVzcyBwb3J0cyBwaHlzaWNhbCBwb3J0CisJCQkJCQkgKiBudW1iZXIKKwkJCQkJCSAqLworCXd3bl90CQllZ3Jlc3NfcG9ydF9uYW1lOwkvKiBJbmdyZXNzIHBvcnRzIHd3biAqLworCXUzMgllZ3Jlc3NfcGh5c19wb3J0X251bTsJLyogSW5ncmVzcyBwb3J0cyBwaHlzaWNhbCBwb3J0CisJCQkJCQkgKiBudW1iZXIKKwkJCQkJCSAqLworfTsKKworLyoKKyAqIEZ0cmFjZSBBY2MgUmVzcG9uc2UKKyAqLworc3RydWN0IGZjZ3NfZnRyYWNlX3Jlc3Bfc3sKKwl1MzIJcmV2aXNpb247CisJdTMyCXRva2VuOworCXU4CQl2ZW5kb3JfaWRbOF07CQkvKiBUMTAgVmVuZG9yIElkZW50aWZpZXIgKi8KKwl1OAkJdmVuZG9yX2luZm9bOF07CQkvKiBWZW5kb3Igc3BlY2lmaWMgSW5mbyAqLworCXUzMglzdHJfcmVqX3JlYXNvbl9jb2RlOwkvKiBTVFIgUmVqZWN0IFJlYXNvbiBDb2RlICovCisJdTMyCW51bV9wYXRoX2luZm9fZW50cmllczsJLyogTm8uIG9mIHBhdGggaW5mbyBlbnRyaWVzICovCisJLyoKKwkgKiBwYXRoIGluZm8gZW50cnkvZW50cmllcy4KKwkgKi8KKwlzdHJ1Y3QgZmNnc19mdHJhY2VfcGF0aF9pbmZvX3MgcGF0aF9pbmZvWzFdOworCit9OworCisvKgorKiBGYWJyaWMgQ29uZmlnIFNlcnZlciA6IEZDUGluZworICovCisKKy8qCisgKiBGQyBQaW5nIFJlcXVlc3QKKyAqLworc3RydWN0IGZjZ3NfZmNwaW5nX3JlcV9zeworCXUzMglyZXZpc2lvbjsKKwl1MTYJcG9ydF90YWc7CisJdTE2CXBvcnRfbGVuOwkvKiBQb3J0IGxlbiAqLworCXVuaW9uIGZjZ3NfcG9ydF92YWxfdSBwb3J0X3ZhbDsJLyogUG9ydCB2YWx1ZSAqLworCXUzMgl0b2tlbjsKK307CisKKy8qCisgKiBGQyBQaW5nIFJlc3BvbnNlCisgKi8KK3N0cnVjdCBmY2dzX2ZjcGluZ19yZXNwX3N7CisJdTMyCXRva2VuOworfTsKKworLyoKKyAqIENvbW1hbmQgY29kZXMgZm9yIHpvbmUgc2VydmVyIHF1ZXJ5LgorICovCitlbnVtIHsKKwlaU19HWk1FID0gMHgwMTI0LAkvKiBHZXQgem9uZSBtZW1iZXIgZXh0ZW5kZWQgKi8KK307CisKKy8qCisgKiBaUyBHWk1FIHJlcXVlc3QKKyAqLworI2RlZmluZSBaU19HWk1FX1pOQU1FTEVOCTMyCitzdHJ1Y3QgenNfZ3ptZV9yZXFfc3sKKwl1OAl6bmFtZWxlbjsKKwl1OAlyc3ZkWzNdOworCXU4CXpuYW1lW1pTX0daTUVfWk5BTUVMRU5dOworfTsKKworZW51bSB6c19tYnJfdHlwZXsKKwlaU19NQlJfVFlQRV9QV1dOCT0gMSwKKwlaU19NQlJfVFlQRV9ET01QT1JUCT0gMiwKKwlaU19NQlJfVFlQRV9QT1JUSUQJPSAzLAorCVpTX01CUl9UWVBFX05XV04JPSA0LAorfTsKKworc3RydWN0IHpzX21icl93d25fc3sKKwl1OAltYnJfdHlwZTsKKwl1OAlyc3ZkWzNdOworCXd3bl90CXd3bjsKK307CisKK3N0cnVjdCB6c19xdWVyeV9yZXNwX3N7CisJdTMyCW5tYnJzOwkvKiAgbnVtYmVyIG9mIHpvbmUgbWVtYmVycyAqLworCXN0cnVjdCB6c19tYnJfd3duX3MJbWJyWzFdOworfTsKKworLyoKKyAqIEdNQUwgQ29tbWFuZCAoIEdldCAoIGludGVyY29ubmVjdCBFbGVtZW50KSBNYW5hZ2VtZW50IEFkZHJlc3MgTGlzdCkKKyAqIFRvIHJldHJpZXZlIHRoZSBJUCBBZGRyZXNzIG9mIGEgU3dpdGNoLgorICovCisKKyNkZWZpbmUgQ1RfR01BTF9SRVNQX1BSRUZJWF9URUxORVQJICJ0ZWxuZXQ6Ly8iCisjZGVmaW5lIENUX0dNQUxfUkVTUF9QUkVGSVhfSFRUUAkgImh0dHA6Ly8iCisKKy8qICBHTUFML0dGTiByZXF1ZXN0ICovCitzdHJ1Y3QgZmNnc19yZXFfcyB7CisJd3duX3QgICAgd3duOyAJLyogUFdXTi9OV1dOICovCit9OworCisjZGVmaW5lIGZjZ3NfZ21hbF9yZXFfdCBzdHJ1Y3QgZmNnc19yZXFfcworI2RlZmluZSBmY2dzX2dmbl9yZXFfdCBzdHJ1Y3QgZmNnc19yZXFfcworCisvKiBBY2NlcHQgUmVzcG9uc2UgdG8gR01BTCAqLworc3RydWN0IGZjZ3NfZ21hbF9yZXNwX3MgeworCXUzMiAJCW1zX2xlbjsgICAvKiBOdW0gb2YgZW50cmllcyAqLworCXU4ICAgICAJbXNfbWFbMjU2XTsKK307CisKK3N0cnVjdCBmY19nbWFsX2VudHJ5X3MgeworCXU4ICBsZW47CisJdTggIHByZWZpeFs3XTsgLyogbGlrZSAiaHR0cDovLyIgKi8KKwl1OCAgaXBfYWRkclsyNDhdOworfTsKKworI3ByYWdtYSBwYWNrKCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvcHJvdG9jb2wvZmMuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9wcm90b2NvbC9mYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlMzliYTUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvcHJvdG9jb2wvZmMuaApAQCAtMCwwICsxLDExMDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0ZDX0hfXworI2RlZmluZSBfX0ZDX0hfXworCisjaW5jbHVkZSA8cHJvdG9jb2wvdHlwZXMuaD4KKworI3ByYWdtYSBwYWNrKDEpCisKKy8qCisgKiBGaWJyZSBDaGFubmVsIEhlYWRlciBTdHJ1Y3R1cmUgKEZDSFMpIGRlZmluaXRpb24KKyAqLworc3RydWN0IGZjaHNfcyB7CisjaWZkZWYgX19CSUdFTkRJQU4KKwl1MzIgICAgICAgIHJvdXRpbmc6NDsJLyogcm91dGluZyBiaXRzICovCisJdTMyICAgICAgICBjYXRfaW5mbzo0OwkvKiBjYXRlZ29yeSBpbmZvICovCisjZWxzZQorCXUzMiAgICAgICAgY2F0X2luZm86NDsJLyogY2F0ZWdvcnkgaW5mbyAqLworCXUzMiAgICAgICAgcm91dGluZzo0OwkvKiByb3V0aW5nIGJpdHMgKi8KKyNlbmRpZgorCXUzMiAgICAgICAgZF9pZDoyNDsJLyogZGVzdGluYXRpb24gaWRlbnRpZmllciAqLworCisJdTMyICAgICAgICBjc19jdGw6ODsJLyogY2xhc3Mgc3BlY2lmaWMgY29udHJvbCAqLworCXUzMiAgICAgICAgc19pZDoyNDsJLyogc291cmNlIGlkZW50aWZpZXIgKi8KKworCXUzMiAgICAgICAgdHlwZTo4OwkJLyogZGF0YSBzdHJ1Y3R1cmUgdHlwZSAqLworCXUzMiAgICAgICAgZl9jdGw6MjQ7CS8qIGluaXRpYWwgZnJhbWUgY29udHJvbCAqLworCisJdTggICAgICAgICBzZXFfaWQ7CQkvKiBzZXF1ZW5jZSBpZGVudGlmaWVyICovCisJdTggICAgICAgICBkZl9jdGw7CQkvKiBkYXRhIGZpZWxkIGNvbnRyb2wgKi8KKwl1MTYgICAgICAgIHNlcV9jbnQ7CS8qIHNlcXVlbmNlIGNvdW50ICovCisKKwl1MTYgICAgICAgIG94X2lkOwkJLyogb3JpZ2luYXRvciBleGNoYW5nZSBJRCAqLworCXUxNiAgICAgICAgcnhfaWQ7CQkvKiByZXNwb25kZXIgZXhjaGFuZ2UgSUQgKi8KKworCXUzMiAgICAgICAgcm87CQkvKiByZWxhdGl2ZSBvZmZzZXQgKi8KK307CisvKgorICogRmlicmUgQ2hhbm5lbCBCQl9FIEhlYWRlciBTdHJ1Y3R1cmUKKyAqLworc3RydWN0IGZjYmJlaHNfcyB7CisJdTE2CXZlcl9yc3ZkOworCXUzMglyc3ZkWzJdOworCXUzMglyc3ZkX19zb2Y7Cit9OworCisjZGVmaW5lIEZDX1NFUV9JRF9NQVgJCTI1NgorCisvKgorICogcm91dGluZyBiaXQgZGVmaW5pdGlvbnMKKyAqLworZW51bSB7CisJRkNfUlRHX0ZDNF9ERVZfREFUQQk9IDB4MCwJLyogRkMtNCBEZXZpY2UgRGF0YSAqLworCUZDX1JUR19FWFRfTElOSwkJPSAweDIsCS8qIEV4dGVuZGVkIExpbmsgRGF0YSAqLworCUZDX1JUR19GQzRfTElOS19EQVRBCT0gMHgzLAkvKiBGQy00IExpbmsgRGF0YSAqLworCUZDX1JUR19WSURFT19EQVRBCT0gMHg0LAkvKiBWaWRlbyBEYXRhICovCisJRkNfUlRHX0VYVF9IRFIJCT0gMHg1LAkvKiBWRlQsIElGUiBvciBFbmNhcHN1bGVkICovCisJRkNfUlRHX0JBU0lDX0xJTksJPSAweDgsCS8qIEJhc2ljIExpbmsgZGF0YSAqLworCUZDX1JUR19MSU5LX0NUUkwJPSAweEMsCS8qIExpbmsgQ29udHJvbCAqLworfTsKKworLyoKKyAqIGluZm9ybWF0aW9uIGNhdGVnb3J5IGZvciBleHRlbmRlZCBsaW5rIGRhdGEgYW5kIEZDLTQgTGluayBEYXRhCisgKi8KK2VudW0geworCUZDX0NBVF9MRF9SRVFVRVNUCT0gMHgyLAkvKiBSZXF1ZXN0ICovCisJRkNfQ0FUX0xEX1JFUExZCQk9IDB4MywJLyogUmVwbHkgKi8KKwlGQ19DQVRfTERfRElBRwkJPSAweEYsCS8qIGZvciBESUFHIHVzZSBvbmx5ICovCit9OworCisvKgorICogaW5mb3JtYXRpb24gY2F0ZWdvcnkgZm9yIGV4dGVuZGVkIGhlYWRlcnMgKFZGVCwgSUZSIG9yIGVuY2Fwc3VsYXRpb24pCisgKi8KK2VudW0geworCUZDX0NBVF9WRlRfSERSID0gMHgwLAkvKiBWaXJ0dWFsIGZhYnJpYyB0YWdnaW5nIGhlYWRlciAqLworCUZDX0NBVF9JRlJfSERSID0gMHgxLAkvKiBJbnRlci1GYWJyaWMgcm91dGluZyBoZWFkZXIgKi8KKwlGQ19DQVRfRU5DX0hEUiA9IDB4MiwJLyogRW5jYXBzdWxhdGlvbiBoZWFkZXIgKi8KK307CisKKy8qCisgKiBpbmZvcm1hdGlvbiBjYXRlZ29yeSBmb3IgRkMtNCBkZXZpY2UgZGF0YQorICovCitlbnVtIHsKKwlGQ19DQVRfVU5DQVRFR19JTkZPCT0gMHgwLAkvKiBVbmNhdGVnb3JpemVkIGluZm9ybWF0aW9uICovCisJRkNfQ0FUX1NPTElDSVRfREFUQQk9IDB4MSwJLyogU29saWNpdGVkIERhdGEgKi8KKwlGQ19DQVRfVU5TT0xJQ0lUX0NUUkwJPSAweDIsCS8qIFVuc29saWNpdGVkIENvbnRyb2wgKi8KKwlGQ19DQVRfU09MSUNJVF9DVFJMCT0gMHgzLAkvKiBTb2xpY2l0ZWQgQ29udHJvbCAqLworCUZDX0NBVF9VTlNPTElDSVRfREFUQQk9IDB4NCwJLyogVW5zb2xpY2l0ZWQgRGF0YSAqLworCUZDX0NBVF9EQVRBX0RFU0MJPSAweDUsCS8qIERhdGEgRGVzY3JpcHRvciAqLworCUZDX0NBVF9VTlNPTElDSVRfQ01ECT0gMHg2LAkvKiBVbnNvbGljaXRlZCBDb21tYW5kICovCisJRkNfQ0FUX0NNRF9TVEFUVVMJPSAweDcsCS8qIENvbW1hbmQgU3RhdHVzICovCit9OworCisvKgorICogaW5mb3JtYXRpb24gY2F0ZWdvcnkgZm9yIExpbmsgQ29udHJvbAorICovCitlbnVtIHsKKwlGQ19DQVRfQUNLXzEJCT0gMHgwMCwKKwlGQ19DQVRfQUNLXzBfTgkJPSAweDAxLAorCUZDX0NBVF9QX1JKVAkJPSAweDAyLAorCUZDX0NBVF9GX1JKVAkJPSAweDAzLAorCUZDX0NBVF9QX0JTWQkJPSAweDA0LAorCUZDX0NBVF9GX0JTWV9EQVRBCT0gMHgwNSwKKwlGQ19DQVRfRl9CU1lfTElOS19DVEwJPSAweDA2LAorCUZDX0NBVF9GX0xDUgkJPSAweDA3LAorCUZDX0NBVF9OVFkJCT0gMHgwOCwKKwlGQ19DQVRfRU5ECQk9IDB4MDksCit9OworCisvKgorICogVHlwZSBGaWVsZCBEZWZpbml0aW9ucy4gRkMtUEggU2VjdGlvbiAxOC41IHBnLiAxNjUKKyAqLworZW51bSB7CisJRkNfVFlQRV9CTFMJCT0gMHgwLAkvKiBCYXNpYyBMaW5rIFNlcnZpY2UgKi8KKwlGQ19UWVBFX0VMUwkJPSAweDEsCS8qIEV4dGVuZGVkIExpbmsgU2VydmljZSAqLworCUZDX1RZUEVfSVAJCT0gMHg1LAkvKiBJUCAqLworCUZDX1RZUEVfRkNQCQk9IDB4OCwJLyogU0NTSS1GQ1AgKi8KKwlGQ19UWVBFX0dQUAkJPSAweDksCS8qIFNDU0lfR1BQICovCisJRkNfVFlQRV9TRVJWSUNFUwk9IDB4MjAsCS8qIEZpYnJlIENoYW5uZWwgU2VydmljZXMgKi8KKwlGQ19UWVBFX0ZDX0ZTUwkJPSAweDIyLAkvKiBGYWJyaWMgU3dpdGNoIFNlcnZpY2VzICovCisJRkNfVFlQRV9GQ19BTAkJPSAweDIzLAkvKiBGQy1BTCAqLworCUZDX1RZUEVfRkNfU05NUAkJPSAweDI0LAkvKiBGQy1TTk1QICovCisJRkNfVFlQRV9NQVgJCT0gMjU2LAkvKiAyNTYgRkMtNCB0eXBlcyAqLworfTsKKworc3RydWN0IGZjX2ZjNHR5cGVzX3N7CisJdTggICAgICAgICBiaXRzW0ZDX1RZUEVfTUFYIC8gOF07Cit9OworCisvKgorICogRnJhbWUgQ29udHJvbCBEZWZpbml0aW9ucy4gRkMtUEggVGFibGUtNDUuIHBnLiAxNjgKKyAqLworZW51bSB7CisJRkNUTF9FQ19PUklHID0gMHgwMDAwMDAsCS8qIGV4Y2hhbmdlIG9yaWdpbmF0b3IgKi8KKwlGQ1RMX0VDX1JFU1AgPSAweDgwMDAwMCwJLyogZXhjaGFuZ2UgcmVzcG9uZGVyICovCisJRkNUTF9TRVFfSU5JID0gMHgwMDAwMDAsCS8qIHNlcXVlbmNlIGluaXRpYXRvciAqLworCUZDVExfU0VRX1JFQyA9IDB4NDAwMDAwLAkvKiBzZXF1ZW5jZSByZWNpcGllbnQgKi8KKwlGQ1RMX0ZTX0VYQ0ggPSAweDIwMDAwMCwJLyogZmlyc3Qgc2VxdWVuY2Ugb2YgeGNoZyAqLworCUZDVExfTFNfRVhDSCA9IDB4MTAwMDAwLAkvKiBsYXN0IHNlcXVlbmNlIG9mIHhjaGcgKi8KKwlGQ1RMX0VORF9TRVEgPSAweDA4MDAwMCwJLyogbGFzdCBmcmFtZSBvZiBzZXF1ZW5jZSAqLworCUZDVExfU0lfWEZFUiA9IDB4MDEwMDAwLAkvKiBzZXEgaW5pdGlhdGl2ZSB0cmFuc2ZlciAqLworCUZDVExfUk9fUFJFU0VOVCA9IDB4MDAwMDA4LAkvKiByZWxhdGl2ZSBvZmZzZXQgcHJlc2VudCAqLworCUZDVExfRklMTEJZVEVfTUFTSyA9IDB4MDAwMDAzCS8qICwgZmlsbCBieXRlIG1hc2sgKi8KK307CisKKy8qCisgKiBGYWJyaWMgV2VsbCBLbm93biBBZGRyZXNzZXMKKyAqLworZW51bSB7CisJRkNfTUlOX1dFTExfS05PV05fQUREUgkJPSAweEZGRkZGMCwKKwlGQ19ET01BSU5fQ09OVFJPTExFUl9NQVNLIAk9IDB4RkZGQzAwLAorCUZDX0FMSUFTX1NFUlZFUgkJCT0gMHhGRkZGRjgsCisJRkNfTUdNVF9TRVJWRVIJCQk9IDB4RkZGRkZBLAorCUZDX1RJTUVfU0VSVkVSCQkJPSAweEZGRkZGQiwKKwlGQ19OQU1FX1NFUlZFUgkJCT0gMHhGRkZGRkMsCisJRkNfRkFCUklDX0NPTlRST0xMRVIJCT0gMHhGRkZGRkQsCisJRkNfRkFCUklDX1BPUlQJCQk9IDB4RkZGRkZFLAorCUZDX0JST0FEQ0FTVF9TRVJWRVIJCT0gMHhGRkZGRkYKK307CisKKy8qCisgKiBkb21haW4vYXJlYS9wb3J0IGRlZmluZXMKKyAqLworI2RlZmluZSBGQ19ET01BSU5fTUFTSyAgMHhGRjAwMDAKKyNkZWZpbmUgRkNfRE9NQUlOX1NISUZUIDE2CisjZGVmaW5lIEZDX0FSRUFfTUFTSyAgICAweDAwRkYwMAorI2RlZmluZSBGQ19BUkVBX1NISUZUICAgOAorI2RlZmluZSBGQ19QT1JUX01BU0sgICAgMHgwMDAwRkYKKyNkZWZpbmUgRkNfUE9SVF9TSElGVCAgIDAKKworI2RlZmluZSBGQ19HRVRfRE9NQUlOKHApCSgoKHApICYgRkNfRE9NQUlOX01BU0spID4+IEZDX0RPTUFJTl9TSElGVCkKKyNkZWZpbmUgRkNfR0VUX0FSRUEocCkJCSgoKHApICYgRkNfQVJFQV9NQVNLKSA+PiBGQ19BUkVBX1NISUZUKQorI2RlZmluZSBGQ19HRVRfUE9SVChwKQkJKCgocCkgJiBGQ19QT1JUX01BU0spID4+IEZDX1BPUlRfU0hJRlQpCisKKyNkZWZpbmUgRkNfRE9NQUlOX0NUUkxSKHApCShGQ19ET01BSU5fQ09OVFJPTExFUl9NQVNLIHwgKEZDX0dFVF9ET01BSU4ocCkpKQorCitlbnVtIHsKKwlGQ19SWElEX0FOWSA9IDB4RkZGRlUsCit9OworCisvKgorICogZ2VuZXJpYyBFTFMgY29tbWFuZAorICovCitzdHJ1Y3QgZmNfZWxzX2NtZF9zeworCXUzMiAgICAgICAgZWxzX2NvZGU6ODsJLyogRUxTIENvbW1hbmQgQ29kZSAqLworCXUzMiAgICAgICAgcmVzZXJ2ZWQ6MjQ7Cit9OworCisvKgorICogRUxTIENvbW1hbmQgQ29kZXMuIEZDLVBIIFRhYmxlLTc1LiBwZy4gMjIzCisgKi8KK2VudW0geworCUZDX0VMU19MU19SSlQgPSAweDEsCS8qIExpbmsgU2VydmljZSBSZWplY3QuICovCisJRkNfRUxTX0FDQyA9IDB4MDIsCS8qIEFjY2VwdCAqLworCUZDX0VMU19QTE9HSSA9IDB4MDMsCS8qIE5fUG9ydCBMb2dpbi4gKi8KKwlGQ19FTFNfRkxPR0kgPSAweDA0LAkvKiBGX1BvcnQgTG9naW4uICovCisJRkNfRUxTX0xPR08gPSAweDA1LAkvKiBMb2dvdXQuICovCisJRkNfRUxTX0FCVFggPSAweDA2LAkvKiBBYm9ydCBFeGNoYW5nZSAqLworCUZDX0VMU19SRVMgPSAweDA4LAkvKiBSZWFkIEV4Y2hhbmdlIHN0YXR1cyAqLworCUZDX0VMU19SU1MgPSAweDA5LAkvKiBSZWFkIHNlcXVlbmNlIHN0YXR1cyBibG9jayAqLworCUZDX0VMU19SU0kgPSAweDBBLAkvKiBSZXF1ZXN0IFNlcXVlbmNlIEluaXRpYXRpdmUgKi8KKwlGQ19FTFNfRVNUQyA9IDB4MEMsCS8qIEVzdGltYXRlIENyZWRpdC4gKi8KKwlGQ19FTFNfUlRWID0gMHgwRSwJLyogUmVhZCBUaW1lb3V0IFZhbHVlLiAqLworCUZDX0VMU19STFMgPSAweDBGLAkvKiBSZWFkIExpbmsgU3RhdHVzLiAqLworCUZDX0VMU19FQ0hPID0gMHgxMCwJLyogRWNobyAqLworCUZDX0VMU19URVNUID0gMHgxMSwJLyogVGVzdCAqLworCUZDX0VMU19SUlEgPSAweDEyLAkvKiBSZWluc3RhdGUgUmVjb3ZlcnkgUXVhbGlmaWVyLiAqLworCUZDX0VMU19SRUMgPSAweDEzLAkvKiBBZGQgdGhpcyBmb3IgVEFQRSBzdXBwb3J0IGluIEZDUiAqLworCUZDX0VMU19QUkxJID0gMHgyMCwJLyogUHJvY2VzcyBMb2dpbiAqLworCUZDX0VMU19QUkxPID0gMHgyMSwJLyogUHJvY2VzcyBMb2dvdXQuICovCisJRkNfRUxTX1NDTiA9IDB4MjIsCS8qIFN0YXRlIENoYW5nZSBOb3RpZmljYXRpb24uICovCisJRkNfRUxTX1RQUkxPID0gMHgyNCwJLyogVGhpcmQgUGFydHkgUHJvY2VzcyBMb2dvdXQuICovCisJRkNfRUxTX1BESVNDID0gMHg1MCwJLyogRGlzY292ZXIgTl9Qb3J0IFBhcmFtZXRlcnMuICovCisJRkNfRUxTX0ZESVNDID0gMHg1MSwJLyogRGlzY292ZXIgRl9Qb3J0IFBhcmFtZXRlcnMuICovCisJRkNfRUxTX0FESVNDID0gMHg1MiwJLyogRGlzY292ZXIgQWRkcmVzcy4gKi8KKwlGQ19FTFNfRkFOID0gMHg2MCwJLyogRmFicmljIEFkZHJlc3MgTm90aWZpY2F0aW9uICovCisJRkNfRUxTX1JTQ04gPSAweDYxLAkvKiBSZWcgU3RhdGUgQ2hhbmdlIE5vdGlmaWNhdGlvbiAqLworCUZDX0VMU19TQ1IgPSAweDYyLAkvKiBTdGF0ZSBDaGFuZ2UgUmVnaXN0cmF0aW9uLiAqLworCUZDX0VMU19SVElOID0gMHg3NywJLyogTWFuZ2VtZW50IHNlcnZlciByZXF1ZXN0ICovCisJRkNfRUxTX1JOSUQgPSAweDc4LAkvKiBNYW5nZW1lbnQgc2VydmVyIHJlcXVlc3QgKi8KKwlGQ19FTFNfUkxJUiA9IDB4NzksCS8qIFJlZ2lzdGVyZWQgTGluayBJbmNpZGVudCBSZWNvcmQgKi8KKworCUZDX0VMU19SUFNDID0gMHg3RCwJLyogUmVwb3J0IFBvcnQgU3BlZWQgQ2FwYWJpbGl0aWVzICovCisJRkNfRUxTX1FTQSA9IDB4N0UsCS8qIFF1ZXJ5IFNlY3VyaXR5IEF0dHJpYnV0ZXMuIFJlZiBGQy1TUCAqLworCUZDX0VMU19FMkVfTEJFQUNPTiA9IDB4ODEsCisJCQkJLyogRW5kLXRvLUVuZCBMaW5rIEJlYWNvbiAqLworCUZDX0VMU19BVVRIID0gMHg5MCwJLyogQXV0aGVudGljYXRpb24uIFJlZiBGQy1TUCAqLworCUZDX0VMU19SRkNOID0gMHg5NywJLyogUmVxdWVzdCBGYWJyaWMgQ2hhbmdlIE5vdGlmaWNhdGlvbi4gUmVmCisJCQkJICpGQy1TUCAqLworCit9OworCisvKgorICogIFZlcnNpb24gbnVtYmVycyBmb3IgRkMtUEggc3RhbmRhcmRzLAorICogIHVzZWQgaW4gbG9naW4gdG8gaW5kaWNhdGUgd2hhdCBwb3J0CisgKiAgc3VwcG9ydHMuIFNlZSBGQy1QSC1YIHRhYmxlIDE1OC4KKyAqLworZW51bSB7CisJRkNfUEhfVkVSXzRfMyA9IDB4MDksCisJRkNfUEhfVkVSX1BIXzMgPSAweDIwLAorfTsKKworLyoKKyAqIFBEVSBzaXplIGRlZmluZXMKKyAqLworZW51bSB7CisJRkNfTUlOX1BEVVNaID0gNTEyLAorCUZDX01BWF9QRFVTWiA9IDIxMTIsCit9OworCisvKgorICogTl9Qb3J0IFBMT0dJIENvbW1vbiBTZXJ2aWNlIFBhcmFtZXRlcnMuCisgKiBGQy1QSC14LiBGaWd1cmUtNzYuIHBnLiAzMDguCisgKi8KK3N0cnVjdCBmY19wbG9naV9jc3Bfc3sKKwl1OCAgICAgICAgIHZlcmhpOwkvKiBGQy1QSCBoaWdoIHZlcnNpb24gKi8KKwl1OCAgICAgICAgIHZlcmxvOwkvKiBGQy1QSCBsb3cgdmVyc2lvbiAqLworCXUxNiAgICAgICAgYmJjcmVkOwkvKiBCQl9DcmVkaXQgKi8KKworI2lmZGVmIF9fQklHRU5ESUFOCisJdTggICAgICAgICBjaXJvOjEsCQkvKiBjb250aW51b3VzbHkgaW5jcmVhc2luZyBSTyAqLworCQkJcnJvOjEsCQkvKiByYW5kb20gcmVsYXRpdmUgb2Zmc2V0ICovCisJCQlucGl2X3N1cHA6MSwJLyogTlBJViBzdXBwb3J0ZWQgKi8KKwkJCXBvcnRfdHlwZToxLAkvKiBOX1BvcnQvRl9wb3J0ICovCisJCQlhbHRiYmNyZWQ6MSwJLyogYWx0ZXJuYXRlIEJCX0NyZWRpdCAqLworCQkJcmVzb2x1dGlvbjoxLAkvKiBtcy9ucyBFRF9UT1YgcmVzb2x1dGlvbiAqLworCQkJdnZsX2luZm86MSwJLyogVlZMIEluZm8gaW5jbHVkZWQgKi8KKwkJCXJlc2VydmVkMToxOworCisJdTggICAgICAgICBoZ19zdXBwOjEsCisJCQlxdWVyeV9kYmM6MSwKKwkJCXNlY3VyaXR5OjEsCisJCQlzeW5jX2NhcDoxLAorCQkJcl90X3RvdjoxLAorCQkJZGhfZHVwX3N1cHA6MSwKKwkJCWNpc2M6MSwJCS8qIGNvbnRpbnVvdXNseSBpbmNyZWFzaW5nIHNlcSBjb3VudCAqLworCQkJcGF5bG9hZDoxOworI2Vsc2UKKwl1OCAgICAgICAgIHJlc2VydmVkMjoyLAorCQkJcmVzb2x1dGlvbjoxLAkvKiBtcy9ucyBFRF9UT1YgcmVzb2x1dGlvbiAqLworCQkJYWx0YmJjcmVkOjEsCS8qIGFsdGVybmF0ZSBCQl9DcmVkaXQgKi8KKwkJCXBvcnRfdHlwZToxLAkvKiBOX1BvcnQvRl9wb3J0ICovCisJCQlucGl2X3N1cHA6MSwJLyogTlBJViBzdXBwb3J0ZWQgKi8KKwkJCXJybzoxLAkJLyogcmFuZG9tIHJlbGF0aXZlIG9mZnNldCAqLworCQkJY2lybzoxOwkJLyogY29udGludW91c2x5IGluY3JlYXNpbmcgUk8gKi8KKworCXU4ICAgICAgICAgcGF5bG9hZDoxLAorCQkJY2lzYzoxLAkJLyogY29udGludW91c2x5IGluY3JlYXNpbmcgc2VxIGNvdW50ICovCisJCQlkaF9kdXBfc3VwcDoxLAorCQkJcl90X3RvdjoxLAorCQkJc3luY19jYXA6MSwKKwkJCXNlY3VyaXR5OjEsCisJCQlxdWVyeV9kYmM6MSwKKwkJCWhnX3N1cHA6MTsKKyNlbmRpZgorCisJdTE2ICAgICAgICByeHN6OwkJLyogcmVjaWV2ZSBkYXRhX2ZpZWxkIHNpemUgKi8KKworCXUxNiAgICAgICAgY29uc2VxOworCXUxNiAgICAgICAgcm9fYml0bWFwOworCisJdTMyICAgICAgICBlX2RfdG92OworfTsKKworLyoKKyAqIE5fUG9ydCBQTE9HSSBDbGFzcyBTcGVjaWZpYyBQYXJhbWV0ZXJzLgorICogRkMtUEgteC4gRmlndXJlIDc4LiBwZy4gMzE4LgorICovCitzdHJ1Y3QgZmNfcGxvZ2lfY2xwX3N7CisjaWZkZWYgX19CSUdFTkRJQU4KKwl1MzIgICAgICAgIGNsYXNzX3ZhbGlkOjE7CisJdTMyICAgICAgICBpbnRlcm1peDoxOwkvKiBjbGFzcyBpbnRlcm1peCBzdXBwb3J0ZWQgaWYgc2V0ID0xLgorCQkJCQkgKiB2YWxpZCBvbmx5IGZvciBjbGFzczEuIFJlc2VydmVkIGZvcgorCQkJCQkgKiBjbGFzczIgJiBjbGFzczMKKwkJCQkJICovCisJdTMyICAgICAgICByZXNlcnZlZDE6MjsKKwl1MzIgICAgICAgIHNlcXVlbnRpYWw6MTsKKwl1MzIgICAgICAgIHJlc2VydmVkMjozOworI2Vsc2UKKwl1MzIgICAgICAgIHJlc2VydmVkMjozOworCXUzMiAgICAgICAgc2VxdWVudGlhbDoxOworCXUzMiAgICAgICAgcmVzZXJ2ZWQxOjI7CisJdTMyICAgICAgICBpbnRlcm1peDoxOwkvKiBjbGFzcyBpbnRlcm1peCBzdXBwb3J0ZWQgaWYgc2V0ID0xLgorCQkJCQkgKiB2YWxpZCBvbmx5IGZvciBjbGFzczEuIFJlc2VydmVkIGZvcgorCQkJCQkgKiBjbGFzczIgJiBjbGFzczMKKwkJCQkJICovCisJdTMyICAgICAgICBjbGFzc192YWxpZDoxOworI2VuZGlmCisKKwl1MzIgICAgICAgIHJlc2VydmVkMzoyNDsKKworCXUzMiAgICAgICAgcmVzZXJ2ZWQ0OjE2OworCXUzMiAgICAgICAgcnhzejoxNjsJLyogUmVjZWl2ZSBkYXRhX2ZpZWxkIHNpemUgKi8KKworCXUzMiAgICAgICAgcmVzZXJ2ZWQ1Ojg7CisJdTMyICAgICAgICBjb25zZXE6ODsKKwl1MzIgICAgICAgIGUyZV9jcmVkaXQ6MTY7CS8qIGVuZCB0byBlbmQgY3JlZGl0ICovCisKKwl1MzIgICAgICAgIHJlc2VydmVkNzo4OworCXUzMiAgICAgICAgb3NweDo4OworCXUzMiAgICAgICAgcmVzZXJ2ZWQ4OjE2OworfTsKKworI2RlZmluZSBGTE9HSV9WVkxfQlJDRCAgICAweDQyNTI0MzQ0IC8qIEFTQ0lJIHZhbHVlIGZvciBlYWNoIGNoYXJhY3RlciBpbgorCQkJCSAgICAgICogc3RyaW5nICJCUkNEIiAqLworCisvKgorICogUExPR0kgZWxzIGNvbW1hbmQgYW5kIHJlcGx5IHBheWxvYWQKKyAqLworc3RydWN0IGZjX2xvZ2lfc3sKKwlzdHJ1Y3QgZmNfZWxzX2NtZF9zIGVsc19jbWQ7CS8qIEVMUyBjb21tYW5kIGNvZGUgKi8KKwlzdHJ1Y3QgZmNfcGxvZ2lfY3NwX3MgIGNzcDsJCS8qIGNvbW1vbiBzZXJ2aWNlIHBhcmFtcyAqLworCXd3bl90ICAgICAgICAgICBwb3J0X25hbWU7CisJd3duX3QgICAgICAgICAgIG5vZGVfbmFtZTsKKwlzdHJ1Y3QgZmNfcGxvZ2lfY2xwX3MgIGNsYXNzMTsJCS8qIGNsYXNzIDEgc2VydmljZSBwYXJhbWV0ZXJzICovCisJc3RydWN0IGZjX3Bsb2dpX2NscF9zICBjbGFzczI7CQkvKiBjbGFzcyAyIHNlcnZpY2UgcGFyYW1ldGVycyAqLworCXN0cnVjdCBmY19wbG9naV9jbHBfcyAgY2xhc3MzOwkJLyogY2xhc3MgMyBzZXJ2aWNlIHBhcmFtZXRlcnMgKi8KKwlzdHJ1Y3QgZmNfcGxvZ2lfY2xwX3MgIGNsYXNzNDsJCS8qIGNsYXNzIDQgc2VydmljZSBwYXJhbWV0ZXJzICovCisJdTggICAgICAgICB2dmxbMTZdOwkvKiB2ZW5kb3IgdmVyc2lvbiBsZXZlbCAqLworfTsKKworLyoKKyAqIExPR08gZWxzIGNvbW1hbmQgcGF5bG9hZAorICovCitzdHJ1Y3QgZmNfbG9nb19zeworCXN0cnVjdCBmY19lbHNfY21kX3MgICAgZWxzX2NtZDsJLyogRUxTIGNvbW1hbmQgY29kZSAqLworCXUzMiAgICAgICAgcmVzMTo4OworCXUzMiAgICAgICAgbnBvcnRfaWQ6MjQ7CS8qIE5fUG9ydCBpZGVudGlmaWVyIG9mIHNvdXJjZSAqLworCXd3bl90ICAgICAgICAgICBvcmlnX3BvcnRfbmFtZTsJLyogUG9ydCBuYW1lIG9mIHRoZSBMT0dPIG9yaWdpbmF0b3IgKi8KK307CisKKy8qCisgKiBBRElTQyBlbHMgY29tbWFuZCBwYXlsb2FkCisgKi8KK3N0cnVjdCBmY19hZGlzY19zIHsKKwlzdHJ1Y3QgZmNfZWxzX2NtZF9zICAgIGVsc19jbWQ7CS8qIEVMUyBjb21tYW5kIGNvZGUgKi8KKwl1MzIgICAgICAgIHJlczE6ODsKKwl1MzIgICAgICAgIG9yaWdfSEE6MjQ7CS8qIG9yaWdpbmF0b3IgaGFyZCBhZGRyZXNzICovCisJd3duX3QgICAgICAgICAgIG9yaWdfcG9ydF9uYW1lOwkvKiBvcmlnaW5hdG9yIHBvcnQgbmFtZSAqLworCXd3bl90ICAgICAgICAgICBvcmlnX25vZGVfbmFtZTsJLyogb3JpZ2luYXRvciBub2RlIG5hbWUgKi8KKwl1MzIgICAgICAgIHJlczI6ODsKKwl1MzIgICAgICAgIG5wb3J0X2lkOjI0OwkvKiBvcmlnaW5hdG9yIE5Qb3J0SUQgKi8KK307CisKKy8qCisgKiBFeGNoYW5nZSBzdGF0dXMgYmxvY2sKKyAqLworc3RydWN0IGZjX2V4Y2hfc3RhdHVzX2Jsa19zeworCXUzMiAgICAgICAgb3hpZDoxNjsKKwl1MzIgICAgICAgIHJ4aWQ6MTY7CisJdTMyICAgICAgICByZXMxOjg7CisJdTMyICAgICAgICBvcmlnX25wOjI0OwkvKiBvcmlnaW5hdG9yIE5Qb3J0SUQgKi8KKwl1MzIgICAgICAgIHJlczI6ODsKKwl1MzIgICAgICAgIHJlc3BfbnA6MjQ7CS8qIHJlc3BvbmRlciBOUG9ydElEICovCisJdTMyICAgICAgICBlc19iaXRzOworCXUzMiAgICAgICAgcmVzMzsKKwkvKgorCSAqIHVuIG1vZGlmaWVkIHNlY3Rpb24gb2YgdGhlIGZpZWxkcworCSAqLworfTsKKworLyoKKyAqIFJFUyBlbHMgY29tbWFuZCBwYXlsb2FkCisgKi8KK3N0cnVjdCBmY19yZXNfcyB7CisJc3RydWN0IGZjX2Vsc19jbWRfcyAgICBlbHNfY21kOwkvKiBFTFMgY29tbWFuZCBjb2RlICovCisJdTMyICAgICAgICByZXMxOjg7CisJdTMyICAgICAgICBucG9ydF9pZDoyNDsJLyogTl9Qb3J0IGlkZW50aWZpZXIgb2Ygc291cmNlICovCisJdTMyICAgICAgICBveGlkOjE2OworCXUzMiAgICAgICAgcnhpZDoxNjsKKwl1OCAgICAgICAgIGFzc29jX2hkclszMl07Cit9OworCisvKgorICogUkVTIGVscyBhY2NlcHQgcGF5bG9hZAorICovCitzdHJ1Y3QgZmNfcmVzX2FjY19zeworCXN0cnVjdCBmY19lbHNfY21kX3MgZWxzX2NtZDsJLyogRUxTIGNvbW1hbmQgY29kZSAqLworCXN0cnVjdCBmY19leGNoX3N0YXR1c19ibGtfcyBmY19leGNoX2JsazsgLyogRXhjaGFuZ2Ugc3RhdHVzIGJsb2NrICovCit9OworCisvKgorICogUkVDIGVscyBjb21tYW5kIHBheWxvYWQKKyAqLworc3RydWN0IGZjX3JlY19zIHsKKwlzdHJ1Y3QgZmNfZWxzX2NtZF9zICAgIGVsc19jbWQ7CS8qIEVMUyBjb21tYW5kIGNvZGUgKi8KKwl1MzIgICAgICAgIHJlczE6ODsKKwl1MzIgICAgICAgIG5wb3J0X2lkOjI0OwkvKiBOX1BvcnQgaWRlbnRpZmllciBvZiBzb3VyY2UgKi8KKwl1MzIgICAgICAgIG94aWQ6MTY7CisJdTMyICAgICAgICByeGlkOjE2OworfTsKKworI2RlZmluZSBGQ19SRUNfRVNCX09XTl9SU1AJMHg4MDAwMDAwMAkvKiByZXNwb25kZXIgb3ducyAqLworI2RlZmluZSBGQ19SRUNfRVNCX1NJCQkweDQwMDAwMDAwCS8qIFNJIGlzIG93bmVkIAkqLworI2RlZmluZSBGQ19SRUNfRVNCX0NPTVAJCTB4MjAwMDAwMDAJLyogZXhjaGFuZ2UgaXMgY29tcGxldGUJKi8KKyNkZWZpbmUgRkNfUkVDX0VTQl9FTkRDT05EX0FCTgkweDEwMDAwMDAwCS8qIGFibm9ybWFsIGVuZGluZyAJKi8KKyNkZWZpbmUgRkNfUkVDX0VTQl9SUUFDVAkweDA0MDAwMDAwCS8qIHJlY292ZXJ5IHF1YWwgYWN0aXZlCSovCisjZGVmaW5lIEZDX1JFQ19FU0JfRVJSUF9NU0sJMHgwMzAwMDAwMAorI2RlZmluZSBGQ19SRUNfRVNCX09YSURfSU5WCTB4MDA4MDAwMDAJLyogaW52YWxpZCBPWElECQkqLworI2RlZmluZSBGQ19SRUNfRVNCX1JYSURfSU5WCTB4MDA0MDAwMDAJLyogaW52YWxpZCBSWElECQkqLworI2RlZmluZSBGQ19SRUNfRVNCX1BSSU9fSU5VU0UJMHgwMDIwMDAwMAorCisvKgorICogUkVDIGVscyBhY2NlcHQgcGF5bG9hZAorICovCitzdHJ1Y3QgZmNfcmVjX2FjY19zIHsKKwlzdHJ1Y3QgZmNfZWxzX2NtZF9zICAgIGVsc19jbWQ7CS8qIEVMUyBjb21tYW5kIGNvZGUgKi8KKwl1MzIgICAgICAgIG94aWQ6MTY7CisJdTMyICAgICAgICByeGlkOjE2OworCXUzMiAgICAgICAgcmVzMTo4OworCXUzMiAgICAgICAgb3JpZ19pZDoyNDsJLyogTl9Qb3J0IGlkIG9mIGV4Y2hhbmdlIG9yaWdpbmF0b3IgKi8KKwl1MzIgICAgICAgIHJlczI6ODsKKwl1MzIgICAgICAgIHJlc3BfaWQ6MjQ7CS8qIE5fUG9ydCBpZCBvZiBleGNoYW5nZSByZXNwb25kZXIgKi8KKwl1MzIgICAgICAgIGNvdW50OwkJLyogZGF0YSB0cmFuc2ZlciBjb3VudCAqLworCXUzMiAgICAgICAgZV9zdGF0OwkJLyogZXhjaGFuZ2Ugc3RhdHVzICovCit9OworCisvKgorICogUlNJIGVscyBwYXlsb2FkCisgKi8KK3N0cnVjdCBmY19yc2lfcyB7CisJc3RydWN0IGZjX2Vsc19jbWRfcyAgICBlbHNfY21kOworCXUzMiAgICAgICAgcmVzMTo4OworCXUzMiAgICAgICAgb3JpZ19zaWQ6MjQ7CisJdTMyICAgICAgICBveGlkOjE2OworCXUzMiAgICAgICAgcnhpZDoxNjsKK307CisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIFBSTEkgcGFyYW1hdGVyIHBhZ2VzLCBib3RoIHJlcXVlc3QgJiByZXNwb25zZQorICogc2VlIEZDLVBILVggdGFibGUgMTEzICYgMTE1IGZvciBleHBsYW5hdGlvbiBhbHNvIEZDUCB0YWJsZSA4CisgKi8KK3N0cnVjdCBmY19wcmxpX3BhcmFtc19zeworCXUzMiAgICAgICAgcmVzZXJ2ZWQ6IDE2OworI2lmZGVmIF9fQklHRU5ESUFOCisJdTMyICAgICAgICByZXNlcnZlZDE6IDU7CisJdTMyICAgICAgICByZWNfc3VwcG9ydCA6IDE7CisJdTMyICAgICAgICB0YXNrX3JldHJ5X2lkIDogMTsKKwl1MzIgICAgICAgIHJldHJ5IDogMTsKKworCXUzMiAgICAgICAgY29uZmlybSA6IDE7CisJdTMyICAgICAgICBkb3ZlcmxheToxOworCXUzMiAgICAgICAgaW5pdGlhdG9yOjE7CisJdTMyICAgICAgICB0YXJnZXQ6MTsKKwl1MzIgICAgICAgIGNkbWl4OjE7CisJdTMyICAgICAgICBkcm1peDoxOworCXUzMiAgICAgICAgcnhyZGlzYWI6MTsKKwl1MzIgICAgICAgIHd4cmRpc2FiOjE7CisjZWxzZQorCXUzMiAgICAgICAgcmV0cnkgOiAxOworCXUzMiAgICAgICAgdGFza19yZXRyeV9pZCA6IDE7CisJdTMyICAgICAgICByZWNfc3VwcG9ydCA6IDE7CisJdTMyICAgICAgICByZXNlcnZlZDE6IDU7CisKKwl1MzIgICAgICAgIHd4cmRpc2FiOjE7CisJdTMyICAgICAgICByeHJkaXNhYjoxOworCXUzMiAgICAgICAgZHJtaXg6MTsKKwl1MzIgICAgICAgIGNkbWl4OjE7CisJdTMyICAgICAgICB0YXJnZXQ6MTsKKwl1MzIgICAgICAgIGluaXRpYXRvcjoxOworCXUzMiAgICAgICAgZG92ZXJsYXk6MTsKKwl1MzIgICAgICAgIGNvbmZpcm0gOiAxOworI2VuZGlmCit9OworCisvKgorICogdmFsaWQgdmFsdWVzIGZvciByc3Bjb2RlIGluIFBSTEkgQUNDIHBheWxvYWQKKyAqLworZW51bSB7CisJRkNfUFJMSV9BQ0NfWFFURCA9IDB4MSwJCS8qIHJlcXVlc3QgZXhlY3V0ZWQgKi8KKwlGQ19QUkxJX0FDQ19QUkVERUZfSU1HID0gMHg1LAkvKiBwcmVkZWZpbmVkIGltYWdlIC0gbm8gcHJsaSBuZWVkZWQgKi8KK307CisKK3N0cnVjdCBmY19wcmxpX3BhcmFtc19wYWdlX3N7CisJdTMyICAgICAgICB0eXBlOjg7CisJdTMyICAgICAgICBjb2RleHQ6ODsKKyNpZmRlZiBfX0JJR0VORElBTgorCXUzMiAgICAgICAgb3JpZ3Byb2Nhc3Y6MTsKKwl1MzIgICAgICAgIHJzcHBhdjoxOworCXUzMiAgICAgICAgaW1hZ2VwYWlyOjE7CisJdTMyICAgICAgICByZXNlcnZlZDE6MTsKKwl1MzIgICAgICAgIHJzcGNvZGU6NDsKKyNlbHNlCisJdTMyICAgICAgICByc3Bjb2RlOjQ7CisJdTMyICAgICAgICByZXNlcnZlZDE6MTsKKwl1MzIgICAgICAgIGltYWdlcGFpcjoxOworCXUzMiAgICAgICAgcnNwcGF2OjE7CisJdTMyICAgICAgICBvcmlncHJvY2FzdjoxOworI2VuZGlmCisJdTMyICAgICAgICByZXNlcnZlZDI6ODsKKworCXUzMiAgICAgICAgb3JpZ3Byb2NhczsKKwl1MzIgICAgICAgIHJzcHByb2NhczsKKwlzdHJ1Y3QgZmNfcHJsaV9wYXJhbXNfcyAgc2VydnBhcmFtczsKK307CisKKy8qCisgKiBQUkxJIHJlcXVlc3QgYW5kIGFjY2VwdCBwYXlsb2FkLCBGQy1QSC1YIHRhYmxlcyAxMTIgJiAxMTQKKyAqLworc3RydWN0IGZjX3BybGlfc3sKKwl1MzIgICAgICAgIGNvbW1hbmQ6ODsKKwl1MzIgICAgICAgIHBnbGVuOjg7CisJdTMyICAgICAgICBwYWdlYnl0ZXM6MTY7CisJc3RydWN0IGZjX3BybGlfcGFyYW1zX3BhZ2VfcyBwYXJhbXBhZ2U7Cit9OworCisvKgorICogUFJMTyBsb2dvdXQgcGFyYW1zIHBhZ2UKKyAqLworc3RydWN0IGZjX3BybG9fcGFyYW1zX3BhZ2Vfc3sKKwl1MzIgICAgICAgIHR5cGU6ODsKKwl1MzIgICAgICAgIHR5cGVfZXh0Ojg7CisjaWZkZWYgX19CSUdFTkRJQU4KKwl1MzIgICAgICAgIG9wYV92YWxpZDoxOwkvKiBvcmlnaW5hdG9yIHByb2Nlc3MgYXNzb2NpYXRvcgorCQkJCQkgKiB2YWxpZAorCQkJCQkgKi8KKwl1MzIgICAgICAgIHJwYV92YWxpZDoxOwkvKiByZXNwb25kZXIgcHJvY2VzcyBhc3NvY2lhdG9yIHZhbGlkICovCisJdTMyICAgICAgICByZXMxOjE0OworI2Vsc2UKKwl1MzIgICAgICAgIHJlczE6MTQ7CisJdTMyICAgICAgICBycGFfdmFsaWQ6MTsJLyogcmVzcG9uZGVyIHByb2Nlc3MgYXNzb2NpYXRvciB2YWxpZCAqLworCXUzMiAgICAgICAgb3BhX3ZhbGlkOjE7CS8qIG9yaWdpbmF0b3IgcHJvY2VzcyBhc3NvY2lhdG9yCisJCQkJCSAqIHZhbGlkCisJCQkJCSAqLworI2VuZGlmCisJdTMyICAgICAgICBvcmlnX3Byb2Nlc3NfYXNzYzsKKwl1MzIgICAgICAgIHJlc3BfcHJvY2Vzc19hc3NjOworCisJdTMyICAgICAgICByZXMyOworfTsKKworLyoKKyAqIFBSTE8gZWxzIGNvbW1hbmQgcGF5bG9hZAorICovCitzdHJ1Y3QgZmNfcHJsb19zeworCXUzMiAgICAgICAgCWNvbW1hbmQ6ODsKKwl1MzIgICAgICAgIAlwYWdlX2xlbjo4OworCXUzMiAgICAgICAgCXBheWxvYWRfbGVuOjE2OworCXN0cnVjdCBmY19wcmxvX3BhcmFtc19wYWdlX3MgCXBybG9fcGFyYW1zWzFdOworfTsKKworLyoKKyAqIFBSTE8gTG9nb3V0IHJlc3BvbnNlIHBhcmFtZXRlciBwYWdlCisgKi8KK3N0cnVjdCBmY19wcmxvX2FjY19wYXJhbXNfcGFnZV9zeworCXUzMiAgICAgICAgdHlwZTo4OworCXUzMiAgICAgICAgdHlwZV9leHQ6ODsKKworI2lmZGVmIF9fQklHRU5ESUFOCisJdTMyICAgICAgICBvcGFfdmFsaWQ6MTsJLyogb3JpZ2luYXRvciBwcm9jZXNzIGFzc29jaWF0b3IKKwkJCQkJICogdmFsaWQKKwkJCQkJICovCisJdTMyICAgICAgICBycGFfdmFsaWQ6MTsJLyogcmVzcG9uZGVyIHByb2Nlc3MgYXNzb2NpYXRvciB2YWxpZCAqLworCXUzMiAgICAgICAgcmVzMToxNDsKKyNlbHNlCisJdTMyICAgICAgICByZXMxOjE0OworCXUzMiAgICAgICAgcnBhX3ZhbGlkOjE7CS8qIHJlc3BvbmRlciBwcm9jZXNzIGFzc29jaWF0b3IgdmFsaWQgKi8KKwl1MzIgICAgICAgIG9wYV92YWxpZDoxOwkvKiBvcmlnaW5hdG9yIHByb2Nlc3MgYXNzb2NpYXRvcgorCQkJCQkgKiB2YWxpZAorCQkJCQkgKi8KKyNlbmRpZgorCXUzMiAgICAgICAgb3JpZ19wcm9jZXNzX2Fzc2M7CisJdTMyICAgICAgICByZXNwX3Byb2Nlc3NfYXNzYzsKKworCXUzMiAgICAgICAgZmM0dHlwZV9jc3A7Cit9OworCisvKgorICogUFJMTyBlbHMgY29tbWFuZCBBQ0MgcGF5bG9hZAorICovCitzdHJ1Y3QgZmNfcHJsb19hY2Nfc3sKKwl1MzIgICAgICAgIGNvbW1hbmQ6ODsKKwl1MzIgICAgICAgIHBhZ2VfbGVuOjg7CisJdTMyICAgICAgICBwYXlsb2FkX2xlbjoxNjsKKwlzdHJ1Y3QgZmNfcHJsb19hY2NfcGFyYW1zX3BhZ2VfcyBwcmxvX2FjY19wYXJhbXNbMV07Cit9OworCisvKgorICogU0NSIGVscyBjb21tYW5kIHBheWxvYWQKKyAqLworZW51bSB7CisJRkNfU0NSX1JFR19GVU5DX0ZBQlJJQ19ERVRFQ1RFRCA9IDB4MDEsCisJRkNfU0NSX1JFR19GVU5DX05fUE9SVF9ERVRFQ1RFRCA9IDB4MDIsCisJRkNfU0NSX1JFR19GVU5DX0ZVTEwgPSAweDAzLAorCUZDX1NDUl9SRUdfRlVOQ19DTEVBUl9SRUcgPSAweEZGLAorfTsKKworLyogU0NSIFZVIHJlZ2lzdHJhdGlvbnMgKi8KK2VudW0geworCUZDX1ZVX1NDUl9SRUdfRlVOQ19GQUJSSUNfTkFNRV9DSEFOR0UgPSAweDAxCit9OworCitzdHJ1Y3QgZmNfc2NyX3N7CisJdTMyIGNvbW1hbmQ6ODsKKwl1MzIgcmVzOjI0OworCXUzMiB2dV9yZWdfZnVuYzo4OyAvKiBWZW5kb3IgVW5pcXVlIFJlZ2lzdHJhdGlvbnMgKi8KKwl1MzIgcmVzMToxNjsKKwl1MzIgcmVnX2Z1bmM6ODsKK307CisKKy8qCisgKiBJbmZvcm1hdGlvbiBjYXRlZ29yeSBmb3IgQmFzaWMgbGluayBkYXRhCisgKi8KK2VudW0geworCUZDX0NBVF9OT1AJPSAweDAsCisJRkNfQ0FUX0FCVFMJPSAweDEsCisJRkNfQ0FUX1JNQwk9IDB4MiwKKwlGQ19DQVRfQkFfQUNDCT0gMHg0LAorCUZDX0NBVF9CQV9SSlQJPSAweDUsCisJRkNfQ0FUX1BSTVQJPSAweDYsCit9OworCisvKgorICogTFNfUkpUIGVscyByZXBseSBwYXlsb2FkCisgKi8KK3N0cnVjdCBmY19sc19yanRfcyB7CisJc3RydWN0IGZjX2Vsc19jbWRfcyAgICBlbHNfY21kOwkJLyogRUxTIGNvbW1hbmQgY29kZSAqLworCXUzMiAgICAgICAgcmVzMTo4OworCXUzMiAgICAgICAgcmVhc29uX2NvZGU6ODsJCS8qIFJlYXNvbiBjb2RlIGZvciByZWplY3QgKi8KKwl1MzIgICAgICAgIHJlYXNvbl9jb2RlX2V4cGw6ODsJLyogUmVhc29uIGNvZGUgZXhwbGFuYXRpb24gKi8KKwl1MzIgICAgICAgIHZlbmRvcl91bmlxdWU6ODsJLyogVmVuZG9yIHNwZWNpZmljICovCit9OworCisvKgorICogTFNfUkpUIHJlYXNvbiBjb2RlcworICovCitlbnVtIHsKKwlGQ19MU19SSlRfUlNOX0lOVl9DTURfQ09ERQk9IDB4MDEsCisJRkNfTFNfUkpUX1JTTl9MT0dJQ0FMX0VSUk9SCT0gMHgwMywKKwlGQ19MU19SSlRfUlNOX0xPR0lDQUxfQlVTWQk9IDB4MDUsCisJRkNfTFNfUkpUX1JTTl9QUk9UT0NPTF9FUlJPUgk9IDB4MDcsCisJRkNfTFNfUkpUX1JTTl9VTkFCTEVfVE9fUEVSRl9DTUQgPSAweDA5LAorCUZDX0xTX1JKVF9SU05fQ01EX05PVF9TVVBQCT0gMHgwQiwKK307CisKKy8qCisgKiBMU19SSlQgcmVhc29uIGNvZGUgZXhwbGFuYXRpb24KKyAqLworZW51bSB7CisJRkNfTFNfUkpUX0VYUF9OT19BRERMX0lORk8JCT0gMHgwMCwKKwlGQ19MU19SSlRfRVhQX1NQQVJNU19FUlJfT1BUSU9OUwk9IDB4MDEsCisJRkNfTFNfUkpUX0VYUF9TUEFSTVNfRVJSX0lOSV9DVEwJPSAweDAzLAorCUZDX0xTX1JKVF9FWFBfU1BBUk1TX0VSUl9SRUNfQ1RMCT0gMHgwNSwKKwlGQ19MU19SSlRfRVhQX1NQQVJNU19FUlJfUlhTWgkJPSAweDA3LAorCUZDX0xTX1JKVF9FWFBfU1BBUk1TX0VSUl9DT05TRVEJCT0gMHgwOSwKKwlGQ19MU19SSlRfRVhQX1NQQVJNU19FUlJfQ1JFRElUCQk9IDB4MEIsCisJRkNfTFNfUkpUX0VYUF9JTlZfUE9SVF9OQU1FCQk9IDB4MEQsCisJRkNfTFNfUkpUX0VYUF9JTlZfTk9ERV9GQUJSSUNfTkFNRQk9IDB4MEUsCisJRkNfTFNfUkpUX0VYUF9JTlZfQ1NQCQkJPSAweDBGLAorCUZDX0xTX1JKVF9FWFBfSU5WX0FTU09DX0hEUgkJPSAweDExLAorCUZDX0xTX1JKVF9FWFBfQVNTT0NfSERSX1JFUUQJCT0gMHgxMywKKwlGQ19MU19SSlRfRVhQX0lOVl9PUklHX1NfSUQJCT0gMHgxNSwKKwlGQ19MU19SSlRfRVhQX0lOVl9PWElEX1JYSURfQ09NQgk9IDB4MTcsCisJRkNfTFNfUkpUX0VYUF9DTURfQUxSRUFEWV9JTl9QUk9HCT0gMHgxOSwKKwlGQ19MU19SSlRfRVhQX0xPR0lOX1JFUVVJUkVECQk9IDB4MUUsCisJRkNfTFNfUkpUX0VYUF9JTlZBTElEX05QT1JUX0lECQk9IDB4MUYsCisJRkNfTFNfUkpUX0VYUF9JTlNVRkZfUkVTCQk9IDB4MjksCisJRkNfTFNfUkpUX0VYUF9DTURfTk9UX1NVUFAJCT0gMHgyQywKKwlGQ19MU19SSlRfRVhQX0lOVl9QQVlMT0FEX0xFTgkJPSAweDJELAorfTsKKworLyoKKyAqIFJSUSBlbHMgY29tbWFuZCBwYXlsb2FkCisgKi8KK3N0cnVjdCBmY19ycnFfc3sKKwlzdHJ1Y3QgZmNfZWxzX2NtZF9zICAgIGVsc19jbWQ7CS8qIEVMUyBjb21tYW5kIGNvZGUgKi8KKwl1MzIgICAgICAgIHJlczE6ODsKKwl1MzIgICAgICAgIHNfaWQ6MjQ7CS8qIGV4Y2hhbmdlIG9yaWdpbmF0b3IgU19JRCAqLworCisJdTMyICAgICAgICBveF9pZDoxNjsJLyogb3JpZ2luYXRvciBleGNoYW5nZSBJRCAqLworCXUzMiAgICAgICAgcnhfaWQ6MTY7CS8qIHJlc3BvbmRlciBleGNoYW5nZSBJRCAqLworCisJdTMyICAgICAgICByZXMyWzhdOwkvKiBvcHRpb25hbCBhc3NvY2lhdGlvbiBoZWFkZXIgKi8KK307CisKKy8qCisgKiBBQlRTIEJBX0FDQyByZXBseSBwYXlsb2FkCisgKi8KK3N0cnVjdCBmY19iYV9hY2Nfc3sKKwl1MzIgICAgICAgIHNlcV9pZF92YWxpZDo4OwkvKiBzZXQgdG8gMHgwMCBmb3IgQWJvcnQgRXhjaGFuZ2UgKi8KKwl1MzIgICAgICAgIHNlcV9pZDo4OwkvKiBpbnZhbGlkIGZvciBBYm9ydCBFeGNoYW5nZSAqLworCXUzMiAgICAgICAgcmVzMjoxNjsKKwl1MzIgICAgICAgIG94X2lkOjE2OwkvKiBPWF9JRCBmcm9tIEFCVFMgZnJhbWUgKi8KKwl1MzIgICAgICAgIHJ4X2lkOjE2OwkvKiBSWF9JRCBmcm9tIEFCVFMgZnJhbWUgKi8KKwl1MzIgICAgICAgIGxvd19zZXFfY250OjE2OwkvKiBzZXQgdG8gMHgwMDAwIGZvciBBYm9ydCBFeGNoYW5nZSAqLworCXUzMiAgICAgICAgaGlnaF9zZXFfY250OjE2Oy8qIHNldCB0byAweEZGRkYgZm9yIEFib3J0IEV4Y2hhbmdlICovCit9OworCisvKgorICogQUJUUyBCQV9SSlQgcmVqZWN0IHBheWxvYWQKKyAqLworc3RydWN0IGZjX2JhX3JqdF9zeworCXUzMiAgICAgICAgcmVzMTo4OwkJLyogUmVzZXJ2ZWQgKi8KKwl1MzIgICAgICAgIHJlYXNvbl9jb2RlOjg7CS8qIHJlYXNvbiBjb2RlIGZvciByZWplY3QgKi8KKwl1MzIgICAgICAgIHJlYXNvbl9leHBsOjg7CS8qIHJlYXNvbiBjb2RlIGV4cGxhbmF0aW9uICovCisJdTMyICAgICAgICB2ZW5kb3JfdW5pcXVlOjg7LyogdmVuZG9yIHVuaXF1ZSByZWFzb24gY29kZSxzZXQgdG8gMCAqLworfTsKKworLyoKKyAqIFRQUkxPIGxvZ291dCBwYXJhbWV0ZXIgcGFnZQorICovCitzdHJ1Y3QgZmNfdHBybG9fcGFyYW1zX3BhZ2Vfc3sKKwl1MzIgICAgICAgIHR5cGU6ODsKKwl1MzIgICAgICAgIHR5cGVfZXh0Ojg7CisKKyNpZmRlZiBfX0JJR0VORElBTgorCXUzMiAgICAgICAgb3BhX3ZhbGlkOjE7CisJdTMyICAgICAgICBycGFfdmFsaWQ6MTsKKwl1MzIgICAgICAgIHRwb19ucG9ydF92YWxpZDoxOworCXUzMiAgICAgICAgZ2xvYmFsX3Byb2Nlc3NfbG9nb3V0OjE7CisJdTMyICAgICAgICByZXMxOjEyOworI2Vsc2UKKwl1MzIgICAgICAgIHJlczE6MTI7CisJdTMyICAgICAgICBnbG9iYWxfcHJvY2Vzc19sb2dvdXQ6MTsKKwl1MzIgICAgICAgIHRwb19ucG9ydF92YWxpZDoxOworCXUzMiAgICAgICAgcnBhX3ZhbGlkOjE7CisJdTMyICAgICAgICBvcGFfdmFsaWQ6MTsKKyNlbmRpZgorCisJdTMyICAgICAgICBvcmlnX3Byb2Nlc3NfYXNzYzsKKwl1MzIgICAgICAgIHJlc3BfcHJvY2Vzc19hc3NjOworCisJdTMyICAgICAgICByZXMyOjg7CisJdTMyICAgICAgICB0cG9fbnBvcnRfaWQ7Cit9OworCisvKgorICogVFBSTE8gRUxTIGNvbW1hbmQgcGF5bG9hZAorICovCitzdHJ1Y3QgZmNfdHBybG9fc3sKKwl1MzIgICAgICAgIGNvbW1hbmQ6ODsKKwl1MzIgICAgICAgIHBhZ2VfbGVuOjg7CisJdTMyICAgICAgICBwYXlsb2FkX2xlbjoxNjsKKworCXN0cnVjdCBmY190cHJsb19wYXJhbXNfcGFnZV9zIHRwcmxvX3BhcmFtc1sxXTsKK307CisKK2VudW0gZmNfdHBybG9fdHlwZXsKKwlGQ19HTE9CQUxfTE9HTyA9IDEsCisJRkNfVFBSX0xPR08KK307CisKKy8qCisgKiBUUFJMTyBlbHMgY29tbWFuZCBBQ0MgcGF5bG9hZAorICovCitzdHJ1Y3QgZmNfdHBybG9fYWNjX3N7CisJdTMyCWNvbW1hbmQ6ODsKKwl1MzIJcGFnZV9sZW46ODsKKwl1MzIJcGF5bG9hZF9sZW46MTY7CisJc3RydWN0IGZjX3BybG9fYWNjX3BhcmFtc19wYWdlX3MgdHBybG9fYWNjX3BhcmFtc1sxXTsKK307CisKKy8qCisgKiBSU0NOIGVscyBjb21tYW5kIHJlcSBwYXlsb2FkCisgKi8KKyNkZWZpbmUgRkNfUlNDTl9QR0xFTgkweDQKKworZW51bSBmY19yc2NuX2Zvcm1hdHsKKwlGQ19SU0NOX0ZPUk1BVF9QT1JUSUQJPSAweDAsCisJRkNfUlNDTl9GT1JNQVRfQVJFQQk9IDB4MSwKKwlGQ19SU0NOX0ZPUk1BVF9ET01BSU4JPSAweDIsCisJRkNfUlNDTl9GT1JNQVRfRkFCUklDCT0gMHgzLAorfTsKKworc3RydWN0IGZjX3JzY25fZXZlbnRfc3sKKwl1MzIgICAgICAgIGZvcm1hdDoyOworCXUzMiAgICAgICAgcXVhbGlmaWVyOjQ7CisJdTMyICAgICAgICByZXN2ZDoyOworCXUzMiAgICAgICAgcG9ydGlkOjI0OworfTsKKworc3RydWN0IGZjX3JzY25fcGxfc3sKKwl1OCAgICAgICAgIGNvbW1hbmQ7CisJdTggICAgICAgICBwYWdlbGVuOworCXUxNiAgICAgICAgcGF5bGRsZW47CisJc3RydWN0IGZjX3JzY25fZXZlbnRfcyBldmVudFsxXTsKK307CisKKy8qCisgKiBFQ0hPIGVscyBjb21tYW5kIHJlcSBwYXlsb2FkCisgKi8KK3N0cnVjdCBmY19lY2hvX3MgeworCXN0cnVjdCBmY19lbHNfY21kX3MgICAgZWxzX2NtZDsKK307CisKKy8qCisgKiBSTklEIGVscyBjb21tYW5kCisgKi8KKworI2RlZmluZSBSTklEX05PREVJRF9EQVRBX0ZPUk1BVF9DT01NT04gICAgCQkgMHgwMAorI2RlZmluZSBSTklEX05PREVJRF9EQVRBX0ZPUk1BVF9GQ1AzICAgICAgICAJCSAweDA4CisjZGVmaW5lIFJOSURfTk9ERUlEX0RBVEFfRk9STUFUX0RJU0NPVkVSWSAgICAgCQkweERGCisKKyNkZWZpbmUgUk5JRF9BU1NPQ0lBVEVEX1RZUEVfVU5LTk9XTiAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBSTklEX0FTU09DSUFURURfVFlQRV9PVEhFUiAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIFJOSURfQVNTT0NJQVRFRF9UWVBFX0hVQiAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDMKKyNkZWZpbmUgUk5JRF9BU1NPQ0lBVEVEX1RZUEVfU1dJVENIICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBSTklEX0FTU09DSUFURURfVFlQRV9HQVRFV0FZICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA1CisjZGVmaW5lIFJOSURfQVNTT0NJQVRFRF9UWVBFX1NUT1JBR0VfREVWSUNFICAgICAgICAgICAgIDB4MDAwMDAwMDkKKyNkZWZpbmUgUk5JRF9BU1NPQ0lBVEVEX1RZUEVfSE9TVCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQQorI2RlZmluZSBSTklEX0FTU09DSUFURURfVFlQRV9TVE9SQUdFX1NVQlNZU1RFTSAgICAgICAgICAweDAwMDAwMDBCCisjZGVmaW5lIFJOSURfQVNTT0NJQVRFRF9UWVBFX1NUT1JBR0VfQUNDRVNTX0RFVklDRSAgICAgIDB4MDAwMDAwMEUKKyNkZWZpbmUgUk5JRF9BU1NPQ0lBVEVEX1RZUEVfTkFTX1NFUlZFUiAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMQorI2RlZmluZSBSTklEX0FTU09DSUFURURfVFlQRV9CUklER0UgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIFJOSURfQVNTT0NJQVRFRF9UWVBFX1ZJUlRVQUxJWkFUSU9OX0RFVklDRSAgICAgIDB4MDAwMDAwMDMKKyNkZWZpbmUgUk5JRF9BU1NPQ0lBVEVEX1RZUEVfTVVMVElfRlVOQ1RJT05fREVWSUNFICAgICAgMHgwMDAwMDBGRgorCisvKgorICogUk5JRCBlbHMgY29tbWFuZCBwYXlsb2FkCisgKi8KK3N0cnVjdCBmY19ybmlkX2NtZF9zeworCXN0cnVjdCBmY19lbHNfY21kX3MgICAgZWxzX2NtZDsKKwl1MzIgICAgICAgIG5vZGVfaWRfZGF0YV9mb3JtYXQ6ODsKKwl1MzIgICAgICAgIHJlc2VydmVkOjI0OworfTsKKworLyoKKyAqIFJOSUQgZWxzIHJlc3BvbnNlIHBheWxvYWQKKyAqLworCitzdHJ1Y3QgZmNfcm5pZF9jb21tb25faWRfZGF0YV9zeworCXd3bl90ICAgICAgICAgICBwb3J0X25hbWU7CisJd3duX3QgICAgICAgICAgIG5vZGVfbmFtZTsKK307CisKK3N0cnVjdCBmY19ybmlkX2dlbmVyYWxfdG9wb2xvZ3lfZGF0YV9zeworCXUzMiAgICAgICAgdmVuZG9yX3VuaXF1ZVs0XTsKKwl1MzIgICAgICAgIGFzc29fdHlwZTsKKwl1MzIgICAgICAgIHBoeV9wb3J0X251bTsKKwl1MzIgICAgICAgIG51bV9hdHRhY2hlZF9ub2RlczsKKwl1MzIgICAgICAgIG5vZGVfbWdtdDo4OworCXUzMiAgICAgICAgaXBfdmVyc2lvbjo4OworCXUzMiAgICAgICAgdWRwX3RjcF9wb3J0X251bToxNjsKKwl1MzIgICAgICAgIGlwX2FkZHJlc3NbNF07CisJdTMyICAgICAgICByZXNlcnZlZDoxNjsKKwl1MzIgICAgICAgIHZlbmRvcl9zcGVjaWZpYzoxNjsKK307CisKK3N0cnVjdCBmY19ybmlkX2FjY19zeworCXN0cnVjdCBmY19lbHNfY21kX3MgICAgZWxzX2NtZDsKKwl1MzIgICAgICAgIG5vZGVfaWRfZGF0YV9mb3JtYXQ6ODsKKwl1MzIgICAgICAgIGNvbW1vbl9pZF9kYXRhX2xlbmd0aDo4OworCXUzMiAgICAgICAgcmVzZXJ2ZWQ6ODsKKwl1MzIgICAgICAgIHNwZWNpZmljX2lkX2RhdGFfbGVuZ3RoOjg7CisJc3RydWN0IGZjX3JuaWRfY29tbW9uX2lkX2RhdGFfcyBjb21tb25faWRfZGF0YTsKKwlzdHJ1Y3QgZmNfcm5pZF9nZW5lcmFsX3RvcG9sb2d5X2RhdGFfcyBnZW5fdG9wb2xvZ3lfZGF0YTsKK307CisKKyNkZWZpbmUgUk5JRF9BU1NPQ0lBVEVEX1RZUEVfVU5LTk9XTiAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBSTklEX0FTU09DSUFURURfVFlQRV9PVEhFUiAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIFJOSURfQVNTT0NJQVRFRF9UWVBFX0hVQiAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDMKKyNkZWZpbmUgUk5JRF9BU1NPQ0lBVEVEX1RZUEVfU1dJVENIICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBSTklEX0FTU09DSUFURURfVFlQRV9HQVRFV0FZICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA1CisjZGVmaW5lIFJOSURfQVNTT0NJQVRFRF9UWVBFX1NUT1JBR0VfREVWSUNFICAgICAgICAgICAgIDB4MDAwMDAwMDkKKyNkZWZpbmUgUk5JRF9BU1NPQ0lBVEVEX1RZUEVfSE9TVCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQQorI2RlZmluZSBSTklEX0FTU09DSUFURURfVFlQRV9TVE9SQUdFX1NVQlNZU1RFTSAgICAgICAgICAweDAwMDAwMDBCCisjZGVmaW5lIFJOSURfQVNTT0NJQVRFRF9UWVBFX1NUT1JBR0VfQUNDRVNTX0RFVklDRSAgICAgIDB4MDAwMDAwMEUKKyNkZWZpbmUgUk5JRF9BU1NPQ0lBVEVEX1RZUEVfTkFTX1NFUlZFUiAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMQorI2RlZmluZSBSTklEX0FTU09DSUFURURfVFlQRV9CUklER0UgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIFJOSURfQVNTT0NJQVRFRF9UWVBFX1ZJUlRVQUxJWkFUSU9OX0RFVklDRSAgICAgIDB4MDAwMDAwMDMKKyNkZWZpbmUgUk5JRF9BU1NPQ0lBVEVEX1RZUEVfTVVMVElfRlVOQ1RJT05fREVWSUNFICAgICAgMHgwMDAwMDBGRgorCitlbnVtIGZjX3Jwc2Nfc3BlZWRfY2FweworCVJQU0NfU1BFRURfQ0FQXzFHID0gMHg4MDAwLAorCVJQU0NfU1BFRURfQ0FQXzJHID0gMHg0MDAwLAorCVJQU0NfU1BFRURfQ0FQXzRHID0gMHgyMDAwLAorCVJQU0NfU1BFRURfQ0FQXzEwRyA9IDB4MTAwMCwKKwlSUFNDX1NQRUVEX0NBUF84RyA9IDB4MDgwMCwKKwlSUFNDX1NQRUVEX0NBUF8xNkcgPSAweDA0MDAsCisKKwlSUFNDX1NQRUVEX0NBUF9VTktOT1dOID0gMHgwMDAxLAorfTsKKworZW51bSBmY19ycHNjX29wX3NwZWVkX3N7CisJUlBTQ19PUF9TUEVFRF8xRyA9IDB4ODAwMCwKKwlSUFNDX09QX1NQRUVEXzJHID0gMHg0MDAwLAorCVJQU0NfT1BfU1BFRURfNEcgPSAweDIwMDAsCisJUlBTQ19PUF9TUEVFRF8xMEcgPSAweDEwMDAsCisJUlBTQ19PUF9TUEVFRF84RyA9IDB4MDgwMCwKKwlSUFNDX09QX1NQRUVEXzE2RyA9IDB4MDQwMCwKKworCVJQU0NfT1BfU1BFRURfTk9UX0VTVCA9IDB4MDAwMSwJLyohIHNwZWVkIG5vdCBlc3RhYmxpc2hlZCAqLworfTsKKworc3RydWN0IGZjX3Jwc2Nfc3BlZWRfaW5mb19zeworCXUxNiAgICAgICAgcG9ydF9zcGVlZF9jYXA7CS8qISBzZWUgZmNfcnBzY19zcGVlZF9jYXBfdCAqLworCXUxNiAgICAgICAgcG9ydF9vcF9zcGVlZDsJLyohIHNlZSBmY19ycHNjX29wX3NwZWVkX3QgKi8KK307CisKK2VudW0gbGlua19lMmVfYmVhY29uX3N1YmNtZHsKKwlMSU5LX0UyRV9CRUFDT05fT04gPSAxLAorCUxJTktfRTJFX0JFQUNPTl9PRkYgPSAyCit9OworCitlbnVtIGJlYWNvbl90eXBleworCUJFQUNPTl9UWVBFX05PUk1BTAk9IDEsCS8qISBOb3JtYWwgQmVhY29uaW5nLiBHcmVlbiAqLworCUJFQUNPTl9UWVBFX1dBUk4JPSAyLAkvKiEgV2FybmluZyBCZWFjb25pbmcuIFllbGxvdy9BbWJlciAqLworCUJFQUNPTl9UWVBFX0NSSVRJQ0FMCT0gMwkvKiEgQ3JpdGljYWwgQmVhY29uaW5nLiBSZWQgKi8KK307CisKK3N0cnVjdCBsaW5rX2UyZV9iZWFjb25fcGFyYW1fcyB7CisJdTggICAgICAgICBiZWFjb25fdHlwZTsJLyogQmVhY29uIFR5cGUuIFNlZSBiZWFjb25fdHlwZV90ICovCisJdTggICAgICAgICBiZWFjb25fZnJlcXVlbmN5OworCQkJCQkvKiBCZWFjb24gZnJlcXVlbmN5LiBOdW1iZXIgb2YgYmxpbmtzCisJCQkJCSAqIHBlciAxMCBzZWNvbmRzCisJCQkJCSAqLworCXUxNiAgICAgICAgYmVhY29uX2R1cmF0aW9uOy8qIEJlYWNvbiBkdXJhdGlvbiAoaW4gU2Vjb25kcykuIFRoZQorCQkJCQkgKiBjb21tYW5kIG9wZXJhdGlvbiBzaG91bGQgYmUKKwkJCQkJICogdGVybWluYXRlZCBhdCB0aGUgZW5kIG9mIHRoaXMKKwkJCQkJICogdGltZW91dCB2YWx1ZS4KKwkJCQkJICoKKwkJCQkJICogSWdub3JlZCBpZiBkaWFnX3N1Yl9jbWQgaXMKKwkJCQkJICogTElOS19FMkVfQkVBQ09OX09GRi4KKwkJCQkJICoKKwkJCQkJICogSWYgMCwgYmVhY29uaW5nIHdpbGwgY29udGludWUgdGlsbCBhCisJCQkJCSAqIEJFQUNPTiBPRkYgcmVxdWVzdCBpcyByZWNlaXZlZAorCQkJCQkgKi8KK307CisKKy8qCisgKiBMaW5rIEUyRSBiZWFjb24gcmVxdWVzdC9nb29kIHJlc3BvbnNlIGZvcm1hdC4gRm9yIExTX1JKVHMgdXNlIGZjX2xzX3JqdF90CisgKi8KK3N0cnVjdCBsaW5rX2UyZV9iZWFjb25fcmVxX3N7CisJdTMyICAgICAgICBsc19jb2RlOwkvKiEgRkNfRUxTX0UyRV9MQkVBQ09OIGluIHJlcXVlc3RzICoKKwkJCQkJICpvciBGQ19FTFNfQUNDIGluIGdvb2QgcmVwbGllcyAqLworCXUzMiAgICAgICAgbHNfc3ViX2NtZDsJLyohIFNlZSBsaW5rX2UyZV9iZWFjb25fc3ViY21kX3QgKi8KKwlzdHJ1Y3QgbGlua19lMmVfYmVhY29uX3BhcmFtX3MgYmVhY29uX3Bhcm07Cit9OworCisvKioKKyAqIElmIFJQU0MgcmVxdWVzdCBpcyBzZW50IHRvIHRoZSBEb21haW4gQ29udHJvbGxlciwgdGhlIHJlcXVlc3QgaXMgZm9yCisgKiBhbGwgdGhlIHBvcnRzIHdpdGhpbiB0aGF0IGRvbWFpbiAoVE9ETyAtIEkgZG9uJ3QgdGhpbmsgRk9TIGltcGxlbWVudHMKKyAqIHRoaXMuLi4pLgorICovCitzdHJ1Y3QgZmNfcnBzY19jbWRfc3sKKwlzdHJ1Y3QgZmNfZWxzX2NtZF9zICAgIGVsc19jbWQ7Cit9OworCisvKgorICogUlBTQyBBY2MKKyAqLworc3RydWN0IGZjX3Jwc2NfYWNjX3N7CisJdTMyICAgICAgICBjb21tYW5kOjg7CisJdTMyICAgICAgICByc3ZkOjg7CisJdTMyICAgICAgICBudW1fZW50cmllczoxNjsKKworCXN0cnVjdCBmY19ycHNjX3NwZWVkX2luZm9fcyBzcGVlZF9pbmZvWzFdOworfTsKKworLyoqCisgKiBJZiBSUFNDMiByZXF1ZXN0IGlzIHNlbnQgdG8gdGhlIERvbWFpbiBDb250cm9sbGVyLAorICovCisjZGVmaW5lIEZDX0JSQ0RfVE9LRU4gICAgMHg0MjUyNDM0NAorCitzdHJ1Y3QgZmNfcnBzYzJfY21kX3N7CisJc3RydWN0IGZjX2Vsc19jbWRfcyAgICBlbHNfY21kOworCXUzMiAgICAgICAJdG9rZW47CisJdTE2ICAgICAJcmVzdmQ7CisJdTE2ICAgICAJbnVtX3BpZHM7ICAgICAgIC8qIE51bWJlciBvZiBwaWRzIGluIHRoZSByZXF1ZXN0ICovCisJc3RydWN0ICB7CisJCXUzMglyc3ZkMTo4OworCQl1MzIJcGlkOjI0OwkvKiBwb3J0IGlkZW50aWZpZXIgKi8KKwl9IHBpZF9saXN0WzFdOworfTsKKworZW51bSBmY19ycHNjMl9wb3J0X3R5cGV7CisJUlBTQzJfUE9SVF9UWVBFX1VOS05PV04gPSAwLAorCVJQU0MyX1BPUlRfVFlQRV9OUE9SVCAgID0gMSwKKwlSUFNDMl9QT1JUX1RZUEVfTkxQT1JUICA9IDIsCisJUlBTQzJfUE9SVF9UWVBFX05QSVZfUE9SVCAgPSAweDVmLAorCVJQU0MyX1BPUlRfVFlQRV9OUE9SVF9UUlVOSyAgPSAweDZmLAorfTsKKworLyoKKyAqIFJQU0MyIHBvcnRJbmZvIGVudHJ5IHN0cnVjdHVyZQorICovCitzdHJ1Y3QgZmNfcnBzYzJfcG9ydF9pbmZvX3N7CisgICAgdTMyICAgIHBpZDsgICAgICAgIC8qIFBJRCAqLworICAgIHUxNiAgICByZXN2ZDE7CisgICAgdTE2ICAgIGluZGV4OyAgICAgIC8qIHBvcnQgbnVtYmVyIC8gaW5kZXggKi8KKyAgICB1OCAgICAgcmVzdmQyOworICAgIHU4ICAgIAl0eXBlOyAgICAgICAgLyogcG9ydCB0eXBlIE4vTkwvLi4uICovCisgICAgdTE2ICAgIHNwZWVkOyAgICAgIC8qIHBvcnQgT3BlcmF0aW5nIFNwZWVkICovCit9OworCisvKgorICogUlBTQzIgQWNjZXB0IHBheWxvYWQKKyAqLworc3RydWN0IGZjX3Jwc2MyX2FjY19zeworCXU4ICAgICAgICBlbHNfY21kOworCXU4ICAgICAgICByZXN2ZDsKKwl1MTYgICAgICAgbnVtX3BpZHM7ICAvKiBOdW1iZXIgb2YgcGlkcyBpbiB0aGUgcmVxdWVzdCAqLworCXN0cnVjdCBmY19ycHNjMl9wb3J0X2luZm9fcyAgcG9ydF9pbmZvWzFdOyAgICAvKiBwb3J0IGluZm9ybWF0aW9uICovCit9OworCisvKioKKyAqIGJpdCBmaWVsZHMgc28gdGhhdCBtdWx0aXBsZSBjbGFzc2VzIGNhbiBiZSBzcGVjaWZpZWQKKyAqLworZW51bSBmY19jb3N7CisJRkNfQ0xBU1NfMgk9IDB4MDQsCisJRkNfQ0xBU1NfMwk9IDB4MDgsCisJRkNfQ0xBU1NfMl8zCT0gMHgwQywKK307CisKKy8qCisgKiBzeW1ib2xpYyBuYW1lCisgKi8KK3N0cnVjdCBmY19zeW1uYW1lX3N7CisJdTggICAgICAgICBzeW1uYW1lW0ZDX1NZTU5BTUVfTUFYXTsKK307CisKK3N0cnVjdCBmY19hbHBhYm1fc3sKKwl1OCAgICAgICAgIGFscGFfYm1bRkNfQUxQQV9NQVggLyA4XTsKK307CisKKy8qCisgKiBwcm90b2NvbCBkZWZhdWx0IHRpbWVvdXQgdmFsdWVzCisgKi8KKyNkZWZpbmUgRkNfRURfVE9WCQkyCisjZGVmaW5lIEZDX1JFQ19UT1YJCShGQ19FRF9UT1YgKyAxKQorI2RlZmluZSBGQ19SQV9UT1YJCTEwCisjZGVmaW5lIEZDX0VMU19UT1YJCSgyICogRkNfUkFfVE9WKQorCisvKgorICogdmlydHVhbCBmYWJyaWMgcmVsYXRlZCBkZWZpbmVzCisgKi8KKyNkZWZpbmUgRkNfVkZfSURfTlVMTCAgICAwCS8qICBtdXN0IG5vdCBiZSB1c2VkIGFzIFZGX0lEICovCisjZGVmaW5lIEZDX1ZGX0lEX01JTiAgICAgMQorI2RlZmluZSBGQ19WRl9JRF9NQVggICAgIDB4RUZGCisjZGVmaW5lIEZDX1ZGX0lEX0NUTCAgICAgMHhGRUYJLyogIGNvbnRyb2wgVkZfSUQgKi8KKworLyoqCisgKiBWaXJ0dWFsIEZhYnJpYyBUYWdnaW5nIGhlYWRlciBmb3JtYXQKKyAqIEBjYXV0aW9uIFRoaXMgaXMgZGVmaW5lZCBvbmx5IGluIEJJRyBFTkRJQU4gZm9ybWF0LgorICovCitzdHJ1Y3QgZmNfdmZ0X3N7CisJdTMyICAgICAgICByX2N0bDo4OworCXUzMiAgICAgICAgdmVyOjI7CisJdTMyICAgICAgICB0eXBlOjQ7CisJdTMyICAgICAgICByZXNfYToyOworCXUzMiAgICAgICAgcHJpb3JpdHk6MzsKKwl1MzIgICAgICAgIHZmX2lkOjEyOworCXUzMiAgICAgICAgcmVzX2I6MTsKKwl1MzIgICAgICAgIGhvcGN0Ojg7CisJdTMyICAgICAgICByZXNfYzoyNDsKK307CisKKyNwcmFnbWEgcGFjaygpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL3Byb3RvY29sL2ZjX3NwLmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvcHJvdG9jb2wvZmNfc3AuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NWJiMGIzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL3Byb3RvY29sL2ZjX3NwLmgKQEAgLTAsMCArMSwyMjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0ZDX1NQX0hfXworI2RlZmluZSBfX0ZDX1NQX0hfXworCisjaW5jbHVkZSA8cHJvdG9jb2wvdHlwZXMuaD4KKworI3ByYWdtYSBwYWNrKDEpCisKK2VudW0gYXV0aF9lbHNfZmxhZ3N7CisJRkNfQVVUSF9FTFNfTU9SRV9GUkFHU19GTEFHIAk9IDB4ODAsCS8qISBiaXQtNy4gTW9yZSBGcmFnbWVudHMKKwkJCQkJCSAqIEZvbGxvdworCQkJCQkJICovCisJRkNfQVVUSF9FTFNfQ09OQ0FUX0ZMQUcgCT0gMHg0MCwJLyohIGJpdC02LiBDb25jYXRlbmF0aW9uIEZsYWcgKi8KKwlGQ19BVVRIX0VMU19TRVFfTlVNX0ZMQUcgCT0gMHgwMSAJLyohIGJpdC0wLiBTZXF1ZW5jZSBOdW1iZXIgKi8KK307CisKK2VudW0gYXV0aF9tc2dfY29kZXN7CisJRkNfQVVUSF9NQ19BVVRIX1JKVAkJPSAweDBBLAkvKiEgQXV0aCBSZWplY3QgKi8KKwlGQ19BVVRIX01DX0FVVEhfTkVHIAkJPSAweDBCLCAvKiEgQXV0aCBOZWdvdGlhdGUgKi8KKwlGQ19BVVRIX01DX0FVVEhfRE9ORSAJCT0gMHgwQywgLyohIEF1dGggRG9uZSAqLworCisJRkNfQVVUSF9NQ19ESENIQVBfQ0hBTCAJCT0gMHgxMCwgLyohIERIQ0hBUCBDaGFsbGVuZ2UgKi8KKwlGQ19BVVRIX01DX0RIQ0hBUF9SRVBMWSAJPSAweDExLCAvKiEgREhDSEFQIFJlcGx5ICovCisJRkNfQVVUSF9NQ19ESENIQVBfU1VDQyAJCT0gMHgxMiwgLyohIERIQ0hBUCBTdWNjZXNzICovCisKKwlGQ19BVVRIX01DX0ZDQVBfUkVRIAkJPSAweDEzLCAvKiEgRkNBUCBSZXF1ZXN0ICovCisJRkNfQVVUSF9NQ19GQ0FQX0FDSyAJCT0gMHgxNCwgLyohIEZDQVAgQWNrbm93bGVkZ2UgKi8KKwlGQ19BVVRIX01DX0ZDQVBfQ09ORiAJCT0gMHgxNSwgLyohIEZDQVAgQ29uZmlybSAqLworCisJRkNfQVVUSF9NQ19GQ1BBUF9JTklUIAkJPSAweDE2LCAvKiEgRkNQQVAgSW5pdCAqLworCUZDX0FVVEhfTUNfRkNQQVBfQUNDIAkJPSAweDE3LCAvKiEgRkNQQVAgQWNjZXB0ICovCisJRkNfQVVUSF9NQ19GQ1BBUF9DT01QIAkJPSAweDE4LCAvKiEgRkNQQVAgQ29tcGxldGUgKi8KKworCUZDX0FVVEhfTUNfSUtFX1NBX0lOSVQgCQk9IDB4MjIsIC8qISBJS0UgU0EgSU5JVCAqLworCUZDX0FVVEhfTUNfSUtFX1NBX0FVVEggCQk9IDB4MjMsIC8qISBJS0UgU0EgQXV0aCAqLworCUZDX0FVVEhfTUNfSUtFX0NSRUFURV9DSElMRF9TQQk9IDB4MjQsIC8qISBJS0UgQ3JlYXRlIENoaWxkIFNBICovCisJRkNfQVVUSF9NQ19JS0VfSU5GTyAJCT0gMHgyNSwgLyohIElLRSBpbmZvcm1hdGlvbmFsICovCit9OworCitlbnVtIGF1dGhfcHJvdG9fdmVyc2lvbnsKKwlGQ19BVVRIX1BST1RPX1ZFUl8xIAk9IDEsCS8qISBQcm90b2NvbCBWZXJzaW9uIDEgKi8KK307CisKK2VudW0geworCUZDX0FVVEhfRUxTX0NPTU1BTkRfQ09ERSA9IDB4OTAsLyohIEF1dGhlbnRpY2F0aW9uIEVMUyBDb21tYW5kIGNvZGUgICovCisJRkNfQVVUSF9QUk9UT19QQVJBTV9MRU5fU1ogPSA0LAkvKiEgU2l6ZSBvZiBQcm90byBQYXJhbWV0ZXIgTGVuIEZpZWxkICovCisJRkNfQVVUSF9QUk9UT19QQVJBTV9WQUxfU1ogPSA0LAkvKiEgU2l6ZSBvZiBQcm90byBQYXJhbWV0ZXIgVmFsIEZpZWxkICovCisJRkNfTUFYX0FVVEhfU0VDUkVUX0xFTiAgICAgPSAyNTYsCisJCQkJCS8qISBNYXhpbXVtIHNlY3JldCBzdHJpbmcgbGVuZ3RoICovCisJRkNfQVVUSF9OVU1fVVNBQkxFX1BST1RPX0xFTl9TWiA9IDQsCisJCQkJCS8qISBTaXplIG9mIHVzYWJsZSBwcm90b2NvbHMgZmllbGQgKi8KKwlGQ19BVVRIX1JFU1BfVkFMVUVfTEVOX1NaCT0gNCwKKwkJCQkJLyohIFNpemUgb2YgcmVzcG9uc2UgdmFsdWUgbGVuZ3RoICovCisJRkNfTUFYX0NIQVBfS0VZX0xFTgk9IDI1NiwJLyohIE1heGltdW0gbWQ1IGRpZ2VzdCBsZW5ndGggKi8KKwlGQ19NQVhfQVVUSF9SRVRSSUVTICAgICA9IDMsCS8qISBNYXhpbXVtIG51bWJlciBvZiByZXRyaWVzICovCisJRkNfTUQ1X0RJR0VTVF9MRU4gICAgICAgPSAxNiwJLyohIE1ENSBkaWdlc3QgbGVuZ3RoICovCisJRkNfU0hBMV9ESUdFU1RfTEVOICAgICAgPSAyMCwJLyohIFNIQTEgZGlnZXN0IGxlbmd0aCAqLworCUZDX01BWF9ESEdfU1VQUE9SVEVEICAgID0gMSwJLyohIE1heGltdW0gREggR3JvdXBzIHN1cHBvcnRlZCAqLworCUZDX01BWF9BTEdfU1VQUE9SVEVEICAgID0gMSwJLyohIE1heGltdW0gYWxnb3JpdGhtcyBzdXBwb3J0ZWQgKi8KKwlGQ19NQVhfUFJPVE9fU1VQUE9SVEVEICA9IDEsCS8qISBNYXhpbXVtIHByb3RvY29scyBzdXBwb3J0ZWQgKi8KKwlGQ19TVEFSVF9UWE5fSUQgICAgICAgICA9IDIsCS8qISBTdGFydGluZyB0cmFuc2FjdGlvbiBJRCAqLworfTsKKworZW51bSBhdXRoX3Byb3RvX2lkeworCUZDX0FVVEhfUFJPVE9fREhDSEFQCQk9IDB4MDAwMDAwMDEsCisJRkNfQVVUSF9QUk9UT19GQ0FQIAkJPSAweDAwMDAwMDAyLAorCUZDX0FVVEhfUFJPVE9fRkNQQVAgCQk9IDB4MDAwMDAwMDMsCisJRkNfQVVUSF9QUk9UT19JS0V2MiAJCT0gMHgwMDAwMDAwNCwKKwlGQ19BVVRIX1BST1RPX0lLRXYyX0FVVEggCT0gMHgwMDAwMDAwNSwKK307CisKK3N0cnVjdCBhdXRoX25hbWVfc3sKKwl1MTYJbmFtZV90YWc7CS8qISBOYW1lIFRhZyA9IDEgZm9yIEF1dGhlbnRpY2F0aW9uICovCisJdTE2CW5hbWVfbGVuOwkvKiEgTmFtZSBMZW5ndGggPSA4IGZvciBBdXRoZW50aWNhdGlvbgorCQkJCQkgKi8KKwl3d25fdAkJbmFtZTsgIAkJLyohIE5hbWUuIFRPRE8gLSBpcyB0aGlzIFBXV04gKi8KK307CisKKworZW51bSBhdXRoX2hhc2hfZnVuY3sKKwlGQ19BVVRIX0hBU0hfRlVOQ19NRDUgCQk9IDB4MDAwMDAwMDUsCisJRkNfQVVUSF9IQVNIX0ZVTkNfU0hBXzEgCT0gMHgwMDAwMDAwNiwKK307CisKK2VudW0gYXV0aF9kaF9naWR7CisJRkNfQVVUSF9ESF9HSURfMF9ESEdfTlVMTAk9IDB4MDAwMDAwMDAsCisJRkNfQVVUSF9ESF9HSURfMV9ESEdfMTAyNAk9IDB4MDAwMDAwMDEsCisJRkNfQVVUSF9ESF9HSURfMl9ESEdfMTI4MAk9IDB4MDAwMDAwMDIsCisJRkNfQVVUSF9ESF9HSURfM19ESEdfMTUzNgk9IDB4MDAwMDAwMDMsCisJRkNfQVVUSF9ESF9HSURfNF9ESEdfMjA0OAk9IDB4MDAwMDAwMDQsCisJRkNfQVVUSF9ESF9HSURfNl9ESEdfMzA3Mgk9IDB4MDAwMDAwMDYsCisJRkNfQVVUSF9ESF9HSURfN19ESEdfNDA5Ngk9IDB4MDAwMDAwMDcsCisJRkNfQVVUSF9ESF9HSURfOF9ESEdfNjE0NAk9IDB4MDAwMDAwMDgsCisJRkNfQVVUSF9ESF9HSURfOV9ESEdfODE5Mgk9IDB4MDAwMDAwMDksCit9OworCitzdHJ1Y3QgYXV0aF9lbHNfbXNnX3MgeworCXU4CQlhdXRoX2Vsc19jb2RlOwkvKiAgQXV0aGVudGljYXRpb24gRUxTIENvZGUgKDB4OTApICovCisJdTggCWF1dGhfZWxzX2ZsYWc7IAkvKiAgQXV0aGVudGljYXRpb24gRUxTIEZsYWdzICovCisJdTggCWF1dGhfbXNnX2NvZGU7IAkvKiAgQXV0aGVudGljYXRpb24gTWVzc2FnZSBDb2RlICovCisJdTggCXByb3RvX3ZlcnNpb247IAkvKiAgUHJvdG9jb2wgVmVyc2lvbiAqLworCXUzMgltc2dfbGVuOyAJLyogIE1lc3NhZ2UgTGVuZ3RoICovCisJdTMyCXRyYW5zX2lkOyAJLyogIFRyYW5zYWN0aW9uIElkZW50aWZpZXIgKFRfSUQpICovCisKKwkvKiBNc2cgcGF5bG9hZCBmb2xsb3dzLi4uICovCit9OworCisKK2VudW0gYXV0aF9uZWdfcGFyYW1fdGFncyB7CisJRkNfQVVUSF9ORUdfREhDSEFQX0hBU0hMSVNUIAk9IDB4MDAwMSwKKwlGQ19BVVRIX05FR19ESENIQVBfREhHX0lEX0xJU1QgCT0gMHgwMDAyLAorfTsKKworCitzdHJ1Y3QgZGhjaGFwX3BhcmFtX2Zvcm1hdF9zIHsKKwl1MTYJdGFnOwkJLyohIFBhcmFtZXRlciBUYWcuIFNlZQorCQkJCQkgKiBhdXRoX25lZ19wYXJhbV90YWdzX3QKKwkJCQkJICovCisJdTE2CXdvcmRfY250OworCisJLyogZm9sbG93ZWQgYnkgdmFyaWFibGUgbGVuZ3RoIHBhcmFtZXRlciB2YWx1ZS4uLiAqLworfTsKKworc3RydWN0IGF1dGhfcHJvdG9fcGFyYW1zX3MgeworCXUzMglwcm90b19wYXJhbV9sZW47CisJdTMyCXByb3RvX2lkOworCisJLyoKKwkgKiBGb2xsb3dlZCBieSB2YXJpYWJsZSBsZW5ndGggUHJvdG9jb2wgc3BlY2lmaWMgcGFyYW1ldGVycy4gREgtQ0hBUAorCSAqIHVzZXMgZGhjaGFwX3BhcmFtX2Zvcm1hdF90CisJICovCit9OworCitzdHJ1Y3QgYXV0aF9uZWdfbXNnX3MgeworCXN0cnVjdCBhdXRoX25hbWVfcwlhdXRoX2luaV9uYW1lOworCXUzMgkJdXNhYmxlX2F1dGhfcHJvdG9zOworCXN0cnVjdCBhdXRoX3Byb3RvX3BhcmFtc19zIHByb3RvX3BhcmFtc1sxXTsgLyohICgxLi51c2FibGVfYXV0aF9wcm90bykKKwkJCQkJCSAgICAgKiBwcm90b2NvbCBwYXJhbXMKKwkJCQkJCSAgICAgKi8KK307CisKK3N0cnVjdCBhdXRoX2RoX3ZhbF9zIHsKKwl1MzIgZGhfdmFsX2xlbjsKKwl1MzIgZGhfdmFsWzFdOworfTsKKworc3RydWN0IGF1dGhfZGhjaGFwX2NoYWxfbXNnX3MgeworCXN0cnVjdCBhdXRoX2Vsc19tc2dfcwloZHI7CisJc3RydWN0IGF1dGhfbmFtZV9zIGF1dGhfcmVzcG9uZGVyX25hbWU7CS8qIFRPRE8gVlJLIC0gaXMgYXV0aF9uYW1lX3QKKwkJCQkJCSAqIHR5cGUgT0s/CisJCQkJCQkgKi8KKwl1MzIgCWhhc2hfaWQ7CisJdTMyIAlkaF9ncnBfaWQ7CisJdTMyIAljaGFsX3ZhbF9sZW47CisJY2hhcgkJY2hhbF92YWxbMV07CisKKwkvKiAuLi5mb2xsb3dlZCBieSB2YXJpYWJsZSBDaGFsbGVuZ2UgbGVuZ3RoL3ZhbHVlIGFuZCBESCBsZW5ndGgvdmFsdWUgKi8KK307CisKKworZW51bSBhdXRoX3JqdF9jb2RlcyB7CisJRkNfQVVUSF9SSlRfQ09ERV9BVVRIX0ZBSUxVUkUgCT0gMHgwMSwKKwlGQ19BVVRIX1JKVF9DT0RFX0xPR0lDQUxfRVJSCT0gMHgwMiwKK307CisKK2VudW0gYXV0aF9yanRfY29kZV9leHBzIHsKKwlGQ19BVVRIX0NFWFBfQVVUSF9NRUNIX05PVF9VU0FCTEUJPSAweDAxLAorCUZDX0FVVEhfQ0VYUF9ESF9HUk9VUF9OT1RfVVNBQkxFIAk9IDB4MDIsCisJRkNfQVVUSF9DRVhQX0hBU0hfRlVOQ19OT1RfVVNBQkxFIAk9IDB4MDMsCisJRkNfQVVUSF9DRVhQX0FVVEhfWEFDVF9TVEFSVEVECQk9IDB4MDQsCisJRkNfQVVUSF9DRVhQX0FVVEhfRkFJTEVEIAkJPSAweDA1LAorCUZDX0FVVEhfQ0VYUF9JTkNPUlJFQ1RfUExEIAkJPSAweDA2LAorCUZDX0FVVEhfQ0VYUF9JTkNPUlJFQ1RfUFJPVE9fTVNHIAk9IDB4MDcsCisJRkNfQVVUSF9DRVhQX1JFU1RBUlRfQVVUSF9QUk9UTyAJPSAweDA4LAorCUZDX0FVVEhfQ0VYUF9BVVRIX0NPTkNBVF9OT1RfU1VQUCAJPSAweDA5LAorCUZDX0FVVEhfQ0VYUF9QUk9UT19WRVJfTk9UX1NVUFAgCT0gMHgwQSwKK307CisKK2VudW0gYXV0aF9zdGF0dXMgeworCUZDX0FVVEhfU1RBVEVfSU5QUk9HUkVTUyA9IDAsIAkvKiEgYXV0aGVudGljYXRpb24gaW4gcHJvZ3Jlc3MgCSovCisJRkNfQVVUSF9TVEFURV9GQUlMRUQJPSAxLCAJLyohIGF1dGhlbnRpY2F0aW9uIGZhaWxlZCAqLworCUZDX0FVVEhfU1RBVEVfU1VDQ0VTUwk9IDIgCS8qISBhdXRoZW50aWNhdGlvbiBzdWNjZXNzZnVsCSovCit9OworCitzdHJ1Y3QgYXV0aF9yanRfbXNnX3MgeworCXN0cnVjdCBhdXRoX2Vsc19tc2dfcwloZHI7CisJdTgJCXJlYXNvbl9jb2RlOworCXU4CQlyZWFzb25fY29kZV9leHA7CisJdTgJCXJzdmRbMl07Cit9OworCisKK3N0cnVjdCBhdXRoX2RoY2hhcF9uZWdfbXNnX3MgeworCXN0cnVjdCBhdXRoX2Vsc19tc2dfcyBoZHI7CisJc3RydWN0IGF1dGhfbmVnX21zZ19zIG5lZ287Cit9OworCitzdHJ1Y3QgYXV0aF9kaGNoYXBfcmVwbHlfbXNnX3MgeworCXN0cnVjdCBhdXRoX2Vsc19tc2dfcwloZHI7CisKKwkvKgorCSAqIGZvbGxvd2VkIGJ5IHJlc3BvbnNlIHZhbHVlIGxlbmd0aCAmIFZhbHVlICsgREggVmFsdWUgTGVuZ3RoICYgVmFsdWUKKwkgKi8KK307CisKKyNwcmFnbWEgcGFjaygpCisKKyNlbmRpZiAvKiBfX0ZDX1NQX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL3Byb3RvY29sL2ZjcC5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL3Byb3RvY29sL2ZjcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhZGU2OGEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvcHJvdG9jb2wvZmNwLmgKQEAgLTAsMCArMSwxODYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0ZDUFBST1RPX0hfXworI2RlZmluZSBfX0ZDUFBST1RPX0hfXworCisjaW5jbHVkZSA8cHJvdG9jb2wvc2NzaS5oPgorCisjcHJhZ21hIHBhY2soMSkKKworZW51bSB7CisJRkNQX1JKVAkJPSAweDAxMDAwMDAwLAkvKiBTUlIgcmVqZWN0ICovCisJRkNQX1NSUl9BQ0NFUFQJPSAweDAyMDAwMDAwLAkvKiBTUlIgYWNjZXB0ICovCisJRkNQX1NSUgkJPSAweDE0MDAwMDAwLAkvKiBTZXF1ZW5jZSBSZXRyYW5zbWlzc2lvbiBSZXF1ZXN0ICovCit9OworCisvKgorICogU1JSIEZDLTQgTFMgcGF5bG9hZAorICovCitzdHJ1Y3QgZmNfc3JyX3N7CisJdTMyCWxzX2NtZDsKKwl1MzIgICAgICAgIG94X2lkOjE2OwkvKiBveC1pZCAqLworCXUzMiAgICAgICAgcnhfaWQ6MTY7CS8qIHJ4LWlkICovCisJdTMyICAgICAgICBybzsJCS8qIHJlbGF0aXZlIG9mZnNldCAqLworCXUzMiAgICAgICAgcl9jdGw6ODsJCS8qIFJfQ1RMIGZvciBJLlUuICovCisJdTMyICAgICAgICByZXM6MjQ7Cit9OworCisKKy8qCisgKiBGQ1BfQ01ORCBkZWZpbml0aW9ucworICovCisjZGVmaW5lIEZDUF9DTU5EX0NEQl9MRU4gICAgMTYKKyNkZWZpbmUgRkNQX0NNTkRfTFVOX0xFTiAgICA4CisKK3N0cnVjdCBmY3BfY21uZF9zeworCWx1bl90ICAgICAgICAgICBsdW47CQkvKiA2NC1iaXQgTFUgbnVtYmVyICovCisJdTggICAgICAgICBjcm47CQkvKiBjb21tYW5kIHJlZmVyZW5jZSBudW1iZXIgKi8KKyNpZmRlZiBfX0JJR0VORElBTgorCXU4ICAgICAgICAgcmVzdmQ6MSwKKwkJCXByaW9yaXR5OjQsCS8qIEZDUC0zOiBTQU0tMyBwcmlvcml0eSAqLworCQkJdGFza2F0dHI6MzsJLyogc2NzaSB0YXNrIGF0dHJpYnV0ZSAqLworI2Vsc2UKKwl1OCAgICAgICAgIHRhc2thdHRyOjMsCS8qIHNjc2kgdGFzayBhdHRyaWJ1dGUgKi8KKwkJCXByaW9yaXR5OjQsCS8qIEZDUC0zOiBTQU0tMyBwcmlvcml0eSAqLworCQkJcmVzdmQ6MTsKKyNlbmRpZgorCXU4ICAgICAgICAgdG1fZmxhZ3M7CS8qIHRhc2sgbWFuYWdlbWVudCBmbGFncyAqLworI2lmZGVmIF9fQklHRU5ESUFOCisJdTggICAgICAgICBhZGRsX2NkYl9sZW46NiwJLyogYWRkaXRpb25hbCBDREIgbGVuZ3RoIHdvcmRzICovCisJCQlpb2RpcjoyOwkvKiByZWFkL3dyaXRlIEZDUF9EQVRBIElVcyAqLworI2Vsc2UKKwl1OCAgICAgICAgIGlvZGlyOjIsCS8qIHJlYWQvd3JpdGUgRkNQX0RBVEEgSVVzICovCisJCQlhZGRsX2NkYl9sZW46NjsJLyogYWRkaXRpb25hbCBDREIgbGVuZ3RoICovCisjZW5kaWYKKwlzdHJ1Y3Qgc2NzaV9jZGJfcyAgICAgIGNkYjsKKworCS8qCisJICogISEhIGFkZGl0aW9uYWwgY2RiIGJ5dGVzIGZvbGxvd3MgaGVyZSEhIQorCSAqLworCXUzMiAgICAgICAgZmNwX2RsOwkvKiBieXRlcyB0byBiZSB0cmFuc2ZlcnJlZCAqLworfTsKKworI2RlZmluZSBmY3BfY21uZF9jZGJfbGVuKF9jbW5kKSAoKF9jbW5kKS0+YWRkbF9jZGJfbGVuICogNCArIEZDUF9DTU5EX0NEQl9MRU4pCisjZGVmaW5lIGZjcF9jbW5kX2ZjcGRsKF9jbW5kKQkoKCYoX2NtbmQpLT5mY3BfZGwpWyhfY21uZCktPmFkZGxfY2RiX2xlbl0pCisKKy8qCisgKiBmY3BfY21uZF90LmlvZGlyIGZpZWxkIHZhbHVlcworICovCitlbnVtIGZjcF9pb2RpcnsKKwlGQ1BfSU9ESVJfTk9ORQk9IDAsCisJRkNQX0lPRElSX1dSSVRFID0gMSwKKwlGQ1BfSU9ESVJfUkVBRAk9IDIsCisJRkNQX0lPRElSX1JXCT0gMywKK307CisKKy8qCisgKiBUYXNrIGF0dHJpYnV0ZSBmaWVsZAorICovCitlbnVtIHsKKwlGQ1BfVEFTS19BVFRSX1NJTVBMRQk9IDAsCisJRkNQX1RBU0tfQVRUUl9IT1EJPSAxLAorCUZDUF9UQVNLX0FUVFJfT1JERVJFRAk9IDIsCisJRkNQX1RBU0tfQVRUUl9BQ0EJPSA0LAorCUZDUF9UQVNLX0FUVFJfVU5UQUdHRUQJPSA1LAkvKiBvYnNvbGV0ZSBpbiBGQ1AtMyAqLworfTsKKworLyoKKyAqIFRhc2sgbWFuYWdlbWVudCBmbGFncyBmaWVsZCAtIG9ubHkgb25lIGJpdCBzaGFsbCBiZSBzZXQKKyAqLworI2lmbmRlZiBCSVQKKyNkZWZpbmUgQklUKF94KQkoMSA8PCAoX3gpKQorI2VuZGlmCitlbnVtIGZjcF90bV9jbW5keworCUZDUF9UTV9BQk9SVF9UQVNLX1NFVAk9IEJJVCgxKSwKKwlGQ1BfVE1fQ0xFQVJfVEFTS19TRVQJPSBCSVQoMiksCisJRkNQX1RNX0xVTl9SRVNFVAk9IEJJVCg0KSwKKwlGQ1BfVE1fVEFSR0VUX1JFU0VUCT0gQklUKDUpLAkvKiBvYnNvbGV0ZSBpbiBGQ1AtMyAqLworCUZDUF9UTV9DTEVBUl9BQ0EJPSBCSVQoNiksCit9OworCisvKgorICogRkNQX1hGRVJfUkRZIElVIGRlZmluZXMKKyAqLworc3RydWN0IGZjcF94ZmVyX3JkeV9zeworCXUzMiAgICAgICAgZGF0YV9ybzsKKwl1MzIgICAgICAgIGJ1cnN0X2xlbjsKKwl1MzIgICAgICAgIHJlc2VydmVkOworfTsKKworLyoKKyAqIEZDUF9SU1AgcmVzaWR1ZSBmbGFncworICovCitlbnVtIGZjcF9yZXNpZHVleworCUZDUF9OT19SRVNJRFVFID0gMCwJLyogbm8gcmVzaWR1ZSAqLworCUZDUF9SRVNJRF9PVkVSID0gMSwJLyogbW9yZSBkYXRhIGxlZnQgdGhhdCB3YXMgbm90IHNlbnQgKi8KKwlGQ1BfUkVTSURfVU5ERVIgPSAyLAkvKiBsZXNzIGRhdGEgdGhhbiByZXF1ZXN0ZWQgKi8KK307CisKK2VudW0geworCUZDUF9SU1BJTkZPX0dPT0QgPSAwLAorCUZDUF9SU1BJTkZPX0RBVEFMRU5fTUlTTUFUQ0ggPSAxLAorCUZDUF9SU1BJTkZPX0NNTkRfSU5WQUxJRCA9IDIsCisJRkNQX1JTUElORk9fUk9MRU5fTUlTTUFUQ0ggPSAzLAorCUZDUF9SU1BJTkZPX1RNX05PVF9TVVBQID0gNCwKKwlGQ1BfUlNQSU5GT19UTV9GQUlMRUQgPSA1LAorfTsKKworc3RydWN0IGZjcF9yc3BpbmZvX3N7CisJdTMyICAgICAgICByZXMwOjI0OworCXUzMiAgICAgICAgcnNwX2NvZGU6ODsJLyogcmVzcG9uc2UgY29kZSAoYXMgYWJvdmUpICovCisJdTMyICAgICAgICByZXMxOworfTsKKworc3RydWN0IGZjcF9yZXNwX3N7CisJdTMyICAgICAgICByZXNlcnZlZFsyXTsJLyogMiB3b3JkcyByZXNlcnZlZCAqLworCXUxNiAgICAgICAgcmVzZXJ2ZWQyOworI2lmZGVmIF9fQklHRU5ESUFOCisJdTggICAgICAgICByZXNlcnZlZDM6MzsKKwl1OCAgICAgICAgIGZjcF9jb25mX3JlcToxOwkvKiBGQ1BfQ09ORiBpcyByZXF1ZXN0ZWQgKi8KKwl1OCAgICAgICAgIHJlc2lkX2ZsYWdzOjI7CS8qIHVuZGVyZmxvdy9vdmVyZmxvdyAqLworCXU4ICAgICAgICAgc25zX2xlbl92YWxpZDoxOy8qIHNlbnNlIGxlbiBpcyB2YWxpZCAqLworCXU4ICAgICAgICAgcnNwX2xlbl92YWxpZDoxOy8qIHJlc3BvbnNlIGxlbiBpcyB2YWxpZCAqLworI2Vsc2UKKwl1OCAgICAgICAgIHJzcF9sZW5fdmFsaWQ6MTsvKiByZXNwb25zZSBsZW4gaXMgdmFsaWQgKi8KKwl1OCAgICAgICAgIHNuc19sZW5fdmFsaWQ6MTsvKiBzZW5zZSBsZW4gaXMgdmFsaWQgKi8KKwl1OCAgICAgICAgIHJlc2lkX2ZsYWdzOjI7CS8qIHVuZGVyZmxvdy9vdmVyZmxvdyAqLworCXU4ICAgICAgICAgZmNwX2NvbmZfcmVxOjE7CS8qIEZDUF9DT05GIGlzIHJlcXVlc3RlZCAqLworCXU4ICAgICAgICAgcmVzZXJ2ZWQzOjM7CisjZW5kaWYKKwl1OCAgICAgICAgIHNjc2lfc3RhdHVzOwkvKiBvbmUgYnl0ZSBTQ1NJIHN0YXR1cyAqLworCXUzMiAgICAgICAgcmVzaWR1ZTsJLyogcmVzaWR1YWwgZGF0YSBieXRlcyAqLworCXUzMiAgICAgICAgc25zX2xlbjsJLyogbGVuZ3RoIG9kIHNlbnNlIGluZm8gKi8KKwl1MzIgICAgICAgIHJzcF9sZW47CS8qIGxlbmd0aCBvZiByZXNwb25zZSBpbmZvICovCit9OworCisjZGVmaW5lIGZjcF9zbnNsZW4oX19mY3Byc3ApCSgoX19mY3Byc3ApLT5zbnNfbGVuX3ZhbGlkID8gCQlcCisJCQkJCShfX2ZjcHJzcCktPnNuc19sZW4gOiAwKQorI2RlZmluZSBmY3BfcnNwbGVuKF9fZmNwcnNwKQkoKF9fZmNwcnNwKS0+cnNwX2xlbl92YWxpZCA/IAkJXAorCQkJCQkoX19mY3Byc3ApLT5yc3BfbGVuIDogMCkKKyNkZWZpbmUgZmNwX3JzcGluZm8oX19mY3Byc3ApCSgoc3RydWN0IGZjcF9yc3BpbmZvX3MgKikoKF9fZmNwcnNwKSArIDEpKQorI2RlZmluZSBmY3Bfc25zaW5mbyhfX2ZjcHJzcCkJKCgodTggKilmY3BfcnNwaW5mbyhfX2ZjcHJzcCkpICsgCVwKKwkJCQkJCWZjcF9yc3BsZW4oX19mY3Byc3ApKQorCitzdHJ1Y3QgZmNwX2NtbmRfZnJfc3sKKwlzdHJ1Y3QgZmNoc19zICAgICAgICAgIGZjaHM7CisJc3RydWN0IGZjcF9jbW5kX3MgICAgICBmY3A7Cit9OworCisjcHJhZ21hIHBhY2soKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9wcm90b2NvbC9mZG1pLmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvcHJvdG9jb2wvZmRtaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjMDVjMjYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvcHJvdG9jb2wvZmRtaS5oCkBAIC0wLDAgKzEsMTYzIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX19GRE1JX0hfXworI2RlZmluZSBfX0ZETUlfSF9fCisKKyNpbmNsdWRlIDxwcm90b2NvbC90eXBlcy5oPgorI2luY2x1ZGUgPHByb3RvY29sL2ZjLmg+CisjaW5jbHVkZSA8cHJvdG9jb2wvY3QuaD4KKworI3ByYWdtYSBwYWNrKDEpCisKKy8qCisgKiBGRE1JIENvbW1hbmQgQ29kZXMKKyAqLworI2RlZmluZQlGRE1JX0dSSEwJCTB4MDEwMAorI2RlZmluZQlGRE1JX0dIQVQJCTB4MDEwMQorI2RlZmluZQlGRE1JX0dSUEwJCTB4MDEwMgorI2RlZmluZQlGRE1JX0dQQVQJCTB4MDExMAorI2RlZmluZQlGRE1JX1JIQkEJCTB4MDIwMAorI2RlZmluZQlGRE1JX1JIQVQJCTB4MDIwMQorI2RlZmluZQlGRE1JX1JQUlQJCTB4MDIxMAorI2RlZmluZQlGRE1JX1JQQQkJMHgwMjExCisjZGVmaW5lCUZETUlfREhCQQkJMHgwMzAwCisjZGVmaW5lCUZETUlfRFBSVAkJMHgwMzEwCisKKy8qCisgKiBGRE1JIHJlYXNvbiBjb2RlcworICovCisjZGVmaW5lCUZETUlfTk9fQURESVRJT05BTF9FWFAJCTB4MDAKKyNkZWZpbmUJRkRNSV9IQkFfQUxSRUFEWV9SRUcJCTB4MTAKKyNkZWZpbmUJRkRNSV9IQkFfQVRUUklCX05PVF9SRUcJCTB4MTEKKyNkZWZpbmUJRkRNSV9IQkFfQVRUUklCX01VTFRJUExFCTB4MTIKKyNkZWZpbmUJRkRNSV9IQkFfQVRUUklCX0xFTkdUSF9JTlZBTElECTB4MTMKKyNkZWZpbmUJRkRNSV9IQkFfQVRUUklCX05PVF9QUkVTRU5UCTB4MTQKKyNkZWZpbmUJRkRNSV9QT1JUX09SSUdfTk9UX0lOX0xJU1QJMHgxNQorI2RlZmluZQlGRE1JX1BPUlRfSEJBX05PVF9JTl9MSVNUCTB4MTYKKyNkZWZpbmUJRkRNSV9QT1JUX0FUVFJJQl9OT1RfUkVHCTB4MjAKKyNkZWZpbmUJRkRNSV9QT1JUX05PVF9SRUcJCTB4MjEKKyNkZWZpbmUJRkRNSV9QT1JUX0FUVFJJQl9NVUxUSVBMRQkweDIyCisjZGVmaW5lCUZETUlfUE9SVF9BVFRSSUJfTEVOR1RIX0lOVkFMSUQJMHgyMworI2RlZmluZQlGRE1JX1BPUlRfQUxSRUFEWV9SRUdJU1RFUkVFRAkweDI0CisKKy8qCisgKiBGRE1JIFRyYW5zbWlzc2lvbiBTcGVlZCBNYXNrIHZhbHVlcworICovCisjZGVmaW5lCUZETUlfVFJBTlNfU1BFRURfMUcJCTB4MDAwMDAwMDEKKyNkZWZpbmUJRkRNSV9UUkFOU19TUEVFRF8yRwkJMHgwMDAwMDAwMgorI2RlZmluZQlGRE1JX1RSQU5TX1NQRUVEXzEwRwkJMHgwMDAwMDAwNAorI2RlZmluZQlGRE1JX1RSQU5TX1NQRUVEXzRHCQkweDAwMDAwMDA4CisjZGVmaW5lCUZETUlfVFJBTlNfU1BFRURfOEcJCTB4MDAwMDAwMTAKKyNkZWZpbmUJRkRNSV9UUkFOU19TUEVFRF8xNkcJCTB4MDAwMDAwMjAKKyNkZWZpbmUJRkRNSV9UUkFOU19TUEVFRF9VTktOT1dOCTB4MDAwMDgwMDAKKworLyoKKyAqIEZETUkgSEJBIGF0dHJpYnV0ZSB0eXBlcworICovCitlbnVtIGZkbWlfaGJhX2F0dHJpYnV0ZV90eXBlIHsKKwlGRE1JX0hCQV9BVFRSSUJfTk9ERU5BTUUgPSAxLAkvKiAweDAwMDEgKi8KKwlGRE1JX0hCQV9BVFRSSUJfTUFOVUZBQ1RVUkVSLAkvKiAweDAwMDIgKi8KKwlGRE1JX0hCQV9BVFRSSUJfU0VSSUFMTlVNLAkvKiAweDAwMDMgKi8KKwlGRE1JX0hCQV9BVFRSSUJfTU9ERUwsCQkvKiAweDAwMDQgKi8KKwlGRE1JX0hCQV9BVFRSSUJfTU9ERUxfREVTQywJLyogMHgwMDA1ICovCisJRkRNSV9IQkFfQVRUUklCX0hXX1ZFUlNJT04sCS8qIDB4MDAwNiAqLworCUZETUlfSEJBX0FUVFJJQl9EUklWRVJfVkVSU0lPTiwJLyogMHgwMDA3ICovCisJRkRNSV9IQkFfQVRUUklCX1JPTV9WRVJTSU9OLAkvKiAweDAwMDggKi8KKwlGRE1JX0hCQV9BVFRSSUJfRldfVkVSU0lPTiwJLyogMHgwMDA5ICovCisJRkRNSV9IQkFfQVRUUklCX09TX05BTUUsCS8qIDB4MDAwQSAqLworCUZETUlfSEJBX0FUVFJJQl9NQVhfQ1QsCQkvKiAweDAwMEIgKi8KKworCUZETUlfSEJBX0FUVFJJQl9NQVhfVFlQRQorfTsKKworLyoKKyAqIEZETUkgUG9ydCBhdHRyaWJ1dGUgdHlwZXMKKyAqLworZW51bSBmZG1pX3BvcnRfYXR0cmlidXRlX3R5cGUgeworCUZETUlfUE9SVF9BVFRSSUJfRkM0X1RZUEVTID0gMSwJLyogMHgwMDAxICovCisJRkRNSV9QT1JUX0FUVFJJQl9TVVBQX1NQRUVELAkvKiAweDAwMDIgKi8KKwlGRE1JX1BPUlRfQVRUUklCX1BPUlRfU1BFRUQsCS8qIDB4MDAwMyAqLworCUZETUlfUE9SVF9BVFRSSUJfRlJBTUVfU0laRSwJLyogMHgwMDA0ICovCisJRkRNSV9QT1JUX0FUVFJJQl9ERVZfTkFNRSwJLyogMHgwMDA1ICovCisJRkRNSV9QT1JUX0FUVFJJQl9IT1NUX05BTUUsCS8qIDB4MDAwNiAqLworCisJRkRNSV9QT1JUX0FUVFJfTUFYX1RZUEUKK307CisKKy8qCisgKiBGRE1JIGF0dHJpYnV0ZQorICovCitzdHJ1Y3QgZmRtaV9hdHRyX3MgeworCXUxNiAgICAgICAgdHlwZTsKKwl1MTYgICAgICAgIGxlbjsKKwl1OCAgICAgICAgIHZhbHVlWzFdOworfTsKKworLyoKKyAqIEhCQSBBdHRyaWJ1dGUgQmxvY2sKKyAqLworc3RydWN0IGZkbWlfaGJhX2F0dHJfcyB7CisJdTMyICAgICAgICBhdHRyX2NvdW50OwkvKiAjIG9mIGF0dHJpYnV0ZXMgKi8KKwlzdHJ1Y3QgZmRtaV9hdHRyX3MgICAgIGhiYV9hdHRyOwkvKiBuIGF0dHJpYnV0ZXMgKi8KK307CisKKy8qCisgKiBSZWdpc3RlcmVkIFBvcnQgTGlzdAorICovCitzdHJ1Y3QgZmRtaV9wb3J0X2xpc3RfcyB7CisJdTMyICAgICAgICBudW1fcG9ydHM7CS8qIG51bWJlciBPZiBQb3J0IEVudHJpZXMgKi8KKwl3d25fdCAgICAgICAgICAgcG9ydF9lbnRyeTsJLyogb25lIG9yIG1vcmUgKi8KK307CisKKy8qCisgKiBQb3J0IEF0dHJpYnV0ZSBCbG9jaworICovCitzdHJ1Y3QgZmRtaV9wb3J0X2F0dHJfcyB7CisJdTMyICAgICAgICBhdHRyX2NvdW50OwkvKiAjIG9mIGF0dHJpYnV0ZXMgKi8KKwlzdHJ1Y3QgZmRtaV9hdHRyX3MgICAgIHBvcnRfYXR0cjsJLyogbiBhdHRyaWJ1dGVzICovCit9OworCisvKgorICogRkRNSSBSZWdpc3RlciBIQkEgQXR0cmlidXRlcworICovCitzdHJ1Y3QgZmRtaV9yaGJhX3MgeworCXd3bl90ICAgICAgICAgICBoYmFfaWQ7CQkvKiBIQkEgSWRlbnRpZmllciAqLworCXN0cnVjdCBmZG1pX3BvcnRfbGlzdF9zIHBvcnRfbGlzdDsJLyogUmVnaXN0ZXJlZCBQb3J0IExpc3QgKi8KKwlzdHJ1Y3QgZmRtaV9oYmFfYXR0cl9zIGhiYV9hdHRyX2JsazsJLyogSEJBIGF0dHJpYnV0ZSBibG9jayAqLworfTsKKworLyoKKyAqIEZETUkgUmVnaXN0ZXIgUG9ydAorICovCitzdHJ1Y3QgZmRtaV9ycHJ0X3MgeworCXd3bl90ICAgICAgICAgICBoYmFfaWQ7CQkvKiBIQkEgSWRlbnRpZmllciAqLworCXd3bl90ICAgICAgICAgICBwb3J0X25hbWU7CS8qIFBvcnQgd3duICovCisJc3RydWN0IGZkbWlfcG9ydF9hdHRyX3MgcG9ydF9hdHRyX2JsazsJLyogUG9ydCBBdHRyIEJsb2NrICovCit9OworCisvKgorICogRkRNSSBSZWdpc3RlciBQb3J0IEF0dHJpYnV0ZXMKKyAqLworc3RydWN0IGZkbWlfcnBhX3MgeworCXd3bl90ICAgICAgICAgICBwb3J0X25hbWU7CS8qIHBvcnQgd3duICovCisJc3RydWN0IGZkbWlfcG9ydF9hdHRyX3MgcG9ydF9hdHRyX2JsazsJLyogUG9ydCBBdHRyIEJsb2NrICovCit9OworCisjcHJhZ21hIHBhY2soKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9wcm90b2NvbC9wY2lmdy5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL3Byb3RvY29sL3BjaWZ3LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjgzMGRjMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9wcm90b2NvbC9wY2lmdy5oCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworLyoqCisgKiAgcGNpZncuaCBQQ0kgRlcgcmVsYXRlZCBoZWFkZXJzCisgKi8KKworI2lmbmRlZiBfX1BDSUZXX0hfXworI2RlZmluZSBfX1BDSUZXX0hfXworCisjcHJhZ21hIHBhY2soMSkKKworc3RydWN0IHBucF9oZHJfc3sKKyAgdTMyCXNpZ25hdHVyZTsJLyogIiRQblAiICovCisgIHU4CXJldjsJCS8qIFN0cnVjdCByZXZpc2lvbiAqLworICB1OCAJbGVuOwkJLyogSGVhZGVyIHN0cnVjdHVyZSBsZW4gaW4gbXVsdGlwbGVzCisJCQkJICogb2YgMTYgYnl0ZXMgKi8KKyAgdTE2ICBvZmY7CQkvKiBPZmZzZXQgdG8gbmV4dCBoZWFkZXIgMDAgaWYgbm9uZSAqLworICB1OAlyc3ZkOwkJLyogUmVzZXJ2ZWQgYnl0ZSAqLworICB1OAlja3N1bTsJCS8qIDgtYml0IGNoZWNrc3VtIGZvciB0aGlzIGhlYWRlciAqLworICB1MzIJcG5wX2Rldl9pZDsJLyogUG5QIERldmljZSBJZCAqLworICB1MTYgIG1mc3RyOwkJLyogUG9pbnRlciB0byBtYW51ZmFjdHVyZXIgc3RyaW5nICovCisgIHUxNglwcnN0cjsJCS8qIFBvaW50ZXIgdG8gcHJvZHVjdCBzdHJpbmcgKi8KKyAgdTgJZGV2dHlwZVszXTsJLyogRGV2aWNlIFR5cGUgQ29kZSAqLworICB1OAlkZXZpbmQ7CQkvKiBEZXZpY2UgSW5kaWNhdG9yICovCisgIHUxNgliY3ZlbnRyOwkvKiBCb290c3RyYXAgZW50cnkgdmVjdG9yICovCisgIHUxNglyc3ZkMjsJCS8qIFJlc2VydmVkICovCisgIHUxNiAgc3JpdjsJCS8qIFN0YXRpYyByZXNvdXJjZSBpbmZvcm1hdGlvbiB2ZWN0b3IgKi8KK307CisKK3N0cnVjdCBwY2lfM18wX2RzX3N7CisgdTMyCXNpZzsgICAJCS8qIFNpZ25hdHVyZSAiUENJUiIgKi8KKyB1MTYJdmVuZGlkOwkJLyogVmVuZG9yIElEICovCisgdTE2CWRldmlkOwkJLyogRGV2aWNlIElEICovCisgdTE2CWRldmxpc3RvZmY7CS8qIERldmljZSBMaXN0IE9mZnNldCAqLworIHUxNglsZW47CQkvKiBQQ0kgRGF0YSBTdHJ1Y3R1cmUgTGVuZ3RoICovCisgdTgJcmV2OwkJLyogUENJIERhdGEgU3RydWN0dXJlIFJldmlzaW9uICovCisgdTgJY2xjb2RlWzNdOwkvKiBDbGFzcyBDb2RlICovCisgdTE2CWltZ2xlbjsJCS8qIENvZGUgaW1hZ2UgbGVuZ3RoIGluIG11bHRpcGxlcyBvZgorCQkJCSAqIDUxMiBieXRlcyAqLworIHUxNgljb2RlcmV2OwkvKiBSZXZpc2lvbiBsZXZlbCBvZiBjb2RlL2RhdGEgKi8KKyB1OAljb2RldHlwZTsJLyogQ29kZSB0eXBlIDB4MDAgLSBCSU9TICovCisgdTgJaW5kcjsJCS8qIExhc3QgaW1hZ2UgaW5kaWNhdG9yICovCisgdTE2CW1ydGltZ2xlbjsJLyogTWF4IFJ1biBUaW1lIEltYWdlIExlbmd0aCAqLworIHUxNgljdW9mZjsJCS8qIENvbmZpZyBVdGlsaXR5IENvZGUgSGVhZGVyIE9mZnNldCAqLworIHUxNglkbXRmY2xwOwkvKiBETVRGIENMUCBlbnRyeSBwb2ludCBvZmZzZXQgKi8KK307CisKK3N0cnVjdCBwY2lfb3B0cm9tX2hkcl9zeworIHUxNglzaWc7CQkvKiBTaWduYXR1cmUgMHg1NUFBICovCisgdTgJbGVuOwkJLyogT3B0aW9uIFJPTSBsZW5ndGggaW4gdW5pdHMgb2YgNTEyIGJ5dGVzICovCisgdTgJaW5pdmVjWzNdOwkvKiBJbml0aWFsaXphdGlvbiB2ZWN0b3IgKi8KKyB1OAlyc3ZkWzE2XTsJLyogUmVzZXJ2ZWQgZmllbGQgKi8KKyB1MTYJdmVycHRyOwkJLyogUG9pbnRlciB0byB2ZXJzaW9uIHN0cmluZyAtIHByaXZhdGUgKi8KKyB1MTYJcGNpZHM7CQkvKiBQb2ludGVyIHRvIFBDSSBkYXRhIHN0cnVjdHVyZSAqLworIHUxNglwbnBoZHI7CQkvKiBQb2ludGVyIHRvIFBuUCBleHBhbnNpb24gaGVhZGVyICovCit9OworCisjcHJhZ21hIHBhY2soKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9wcm90b2NvbC9zY3NpLmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvcHJvdG9jb2wvc2NzaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyMjBlNmIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvcHJvdG9jb2wvc2NzaS5oCkBAIC0wLDAgKzEsMTY0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9fU0NTSV9IX18KKyNkZWZpbmUgX19TQ1NJX0hfXworCisjaW5jbHVkZSA8cHJvdG9jb2wvdHlwZXMuaD4KKworI3ByYWdtYSBwYWNrKDEpCisKKy8qCisgKiBnZW5lcmljIFNDU0kgY2RiIGRlZmluaXRpb24KKyAqLworI2RlZmluZSBTQ1NJX01BWF9DREJMRU4gICAgIDE2CitzdHJ1Y3Qgc2NzaV9jZGJfc3sKKwl1OCAgICAgICAgIHNjc2lfY2RiW1NDU0lfTUFYX0NEQkxFTl07Cit9OworCisvKgorICogc2NzaSBsdW4gc2VyaWFsIG51bWJlciBkZWZpbml0aW9uCisgKi8KKyNkZWZpbmUgU0NTSV9MVU5fU05fTEVOICAgICAzMgorc3RydWN0IHNjc2lfbHVuX3NuX3N7CisJdTggICAgICAgICBsdW5fc25bU0NTSV9MVU5fU05fTEVOXTsKK307CisKKy8qCisgKiBTQ1NJIERpcmVjdCBBY2Nlc3MgQ29tbWFuZHMKKyAqLworZW51bSB7CisJU0NTSV9PUF9URVNUX1VOSVRfUkVBRFkJCT0gMHgwMCwKKwlTQ1NJX09QX1JFUVVFU1RfU0VOU0UJCT0gMHgwMywKKwlTQ1NJX09QX0ZPUk1BVF9VTklUCQk9IDB4MDQsCisJU0NTSV9PUF9SRUFENgkJCT0gMHgwOCwKKwlTQ1NJX09QX1dSSVRFNgkJCT0gMHgwQSwKKwlTQ1NJX09QX1dSSVRFX0ZJTEVNQVJLUwkJPSAweDEwLAorCVNDU0lfT1BfSU5RVUlSWQkJCT0gMHgxMiwKKwlTQ1NJX09QX01PREVfU0VMRUNUNgkJPSAweDE1LAorCVNDU0lfT1BfUkVTRVJWRTYJCT0gMHgxNiwKKwlTQ1NJX09QX1JFTEVBU0U2CQk9IDB4MTcsCisJU0NTSV9PUF9NT0RFX1NFTlNFNgkJPSAweDFBLAorCVNDU0lfT1BfU1RBUlRfU1RPUF9VTklUCQk9IDB4MUIsCisJU0NTSV9PUF9TRU5EX0RJQUdOT1NUSUMJCT0gMHgxRCwKKwlTQ1NJX09QX1JFQURfQ0FQQUNJVFkJCT0gMHgyNSwKKwlTQ1NJX09QX1JFQUQxMAkJCT0gMHgyOCwKKwlTQ1NJX09QX1dSSVRFMTAJCQk9IDB4MkEsCisJU0NTSV9PUF9WRVJJRlkxMAkJPSAweDJGLAorCVNDU0lfT1BfUkVBRF9ERUZFQ1RfREFUQQk9IDB4MzcsCisJU0NTSV9PUF9MT0dfU0VMRUNUCQk9IDB4NEMsCisJU0NTSV9PUF9MT0dfU0VOU0UJCT0gMHg0RCwKKwlTQ1NJX09QX01PREVfU0VMRUNUMTAJCT0gMHg1NSwKKwlTQ1NJX09QX1JFU0VSVkUxMAkJPSAweDU2LAorCVNDU0lfT1BfUkVMRUFTRTEwCQk9IDB4NTcsCisJU0NTSV9PUF9NT0RFX1NFTlNFMTAJCT0gMHg1QSwKKwlTQ1NJX09QX1BFUl9SRVNFUlZFX0lOCQk9IDB4NUUsCisJU0NTSV9PUF9QRVJfUkVTRVJWRV9PVVIJCT0gMHg1RSwKKwlTQ1NJX09QX1JFQUQxNgkJCT0gMHg4OCwKKwlTQ1NJX09QX1dSSVRFMTYJCQk9IDB4OEEsCisJU0NTSV9PUF9WRVJJRlkxNgkJPSAweDhGLAorCVNDU0lfT1BfUkVBRF9DQVBBQ0lUWTE2CQk9IDB4OUUsCisJU0NTSV9PUF9SRVBPUlRfTFVOUwkJPSAweEEwLAorCVNDU0lfT1BfUkVBRDEyCQkJPSAweEE4LAorCVNDU0lfT1BfV1JJVEUxMgkJCT0gMHhBQSwKKwlTQ1NJX09QX1VOREVGCQkJPSAweEZGLAorfTsKKworLyoKKyAqIFNDU0kgU1RBUlRfU1RPUF9VTklUIGNvbW1hbmQKKyAqLworc3RydWN0IHNjc2lfc3RhcnRfc3RvcF91bml0X3N7CisJdTggICAgICAgICBvcGNvZGU7CisjaWZkZWYgX19CSUdFTkRJQU4KKwl1OCAgICAgICAgIGx1bjozOworCXU4ICAgICAgICAgcmVzZXJ2ZWQxOjQ7CisJdTggICAgICAgICBpbW1lZDoxOworI2Vsc2UKKwl1OCAgICAgICAgIGltbWVkOjE7CisJdTggICAgICAgICByZXNlcnZlZDE6NDsKKwl1OCAgICAgICAgIGx1bjozOworI2VuZGlmCisJdTggICAgICAgICByZXNlcnZlZDI7CisJdTggICAgICAgICByZXNlcnZlZDM7CisjaWZkZWYgX19CSUdFTkRJQU4KKwl1OCAgICAgICAgIHBvd2VyX2NvbmRpdGlvbnM6NDsKKwl1OCAgICAgICAgIHJlc2VydmVkNDoyOworCXU4ICAgICAgICAgbG9FajoxOworCXU4ICAgICAgICAgc3RhcnQ6MTsKKyNlbHNlCisJdTggICAgICAgICBzdGFydDoxOworCXU4ICAgICAgICAgbG9FajoxOworCXU4ICAgICAgICAgcmVzZXJ2ZWQ0OjI7CisJdTggICAgICAgICBwb3dlcl9jb25kaXRpb25zOjQ7CisjZW5kaWYKKwl1OCAgICAgICAgIGNvbnRyb2w7Cit9OworCisvKgorICogU0NTSSBTRU5EX0RJQUdOT1NUSUMgY29tbWFuZAorICovCitzdHJ1Y3Qgc2NzaV9zZW5kX2RpYWdub3N0aWNfc3sKKwl1OCAgICAgICAgIG9wY29kZTsKKyNpZmRlZiBfX0JJR0VORElBTgorCXU4ICAgICAgICAgc2VsZl90ZXN0X2NvZGU6MzsKKwl1OCAgICAgICAgIHBmOjE7CisJdTggICAgICAgICByZXNlcnZlZDE6MTsKKwl1OCAgICAgICAgIHNlbGZfdGVzdDoxOworCXU4ICAgICAgICAgZGV2X29mZmw6MTsKKwl1OCAgICAgICAgIHVuaXRfb2ZmbDoxOworI2Vsc2UKKwl1OCAgICAgICAgIHVuaXRfb2ZmbDoxOworCXU4ICAgICAgICAgZGV2X29mZmw6MTsKKwl1OCAgICAgICAgIHNlbGZfdGVzdDoxOworCXU4ICAgICAgICAgcmVzZXJ2ZWQxOjE7CisJdTggICAgICAgICBwZjoxOworCXU4ICAgICAgICAgc2VsZl90ZXN0X2NvZGU6MzsKKyNlbmRpZgorCXU4ICAgICAgICAgcmVzZXJ2ZWQyOworCisJdTggICAgICAgICBwYXJhbV9saXN0X2xlbmd0aFsyXTsJLyogTVNCIGZpcnN0ICovCisJdTggICAgICAgICBjb250cm9sOworCit9OworCisvKgorICogU0NTSSBSRUFEMTAvV1JJVEUxMCBjb21tYW5kcworICovCitzdHJ1Y3Qgc2NzaV9ydzEwX3N7CisJdTggICAgICAgICBvcGNvZGU7CisjaWZkZWYgX19CSUdFTkRJQU4KKwl1OCAgICAgICAgIGx1bjozOworCXU4ICAgICAgICAgZHBvOjE7CS8qIERpc2FibGUgUGFnZSBPdXQgKi8KKwl1OCAgICAgICAgIGZ1YToxOwkvKiBGb3JjZSBVbml0IEFjY2VzcyAqLworCXU4ICAgICAgICAgcmVzZXJ2ZWQxOjI7CisJdTggICAgICAgICByZWxfYWRyOjE7CS8qIHJlbGF0aXZlIGFkZHJlc3MgKi8KKyNlbHNlCisJdTggICAgICAgICByZWxfYWRyOjE7CisJdTggICAgICAgICByZXNlcnZlZDE6MjsKKwl1OCAgICAgICAgIGZ1YToxOworCXU4ICAgICAgICAgZHBvOjE7CisJdTggICAgICAgICBsdW46MzsKKyNlbmRpZgorCXU4ICAgICAgICAgbGJhMDsJLyogbG9naWNhbCBibG9jayBhZGRyZXNzIC0gTVNCICovCisJdTggICAgICAgICBsYmExOworCXU4ICAgICAgICAgbGJhMjsKKwl1OCAgICAgICAgIGxiYTM7CS8qIExTQiAqLworCXU4ICAgICAgICAgcmVzZXJ2ZWQzOworCXU4ICAgICAgICAgeGZlcl9sZW5ndGgwOwkvKiB0cmFuc2ZlciBsZW5ndGggaW4gYmxvY2tzIC0gTVNCICovCisJdTggICAgICAgICB4ZmVyX2xlbmd0aDE7CS8qIExTQiAqLworCXU4ICAgICAgICAgY29udHJvbDsKK307CisKKyNkZWZpbmUgU0NTSV9DREIxMF9HRVRfTEJBKGNkYikgICAgICAgICAgICAgICAgICAgICBcCisgICAgKCgoY2RiKS0+bGJhMCA8PCAyNCkgfCAoKGNkYiktPmxiYTEgPDwgMTYpIHwgICAgXAorICAgICAoKGNkYiktPmxiYTIgPDwgOCkgfCAoY2RiKS0+bGJhMykKKworI2RlZmluZSBTQ1NJX0NEQjEwX1NFVF9MQkEoY2RiLCBsYmEpIHsgICAgICBcCisgICAgKGNkYiktPmxiYTAgPSBsYmEgPj4gMjQ7ICAgICAgICAgICAgXAorICAgIChjZGIpLT5sYmExID0gKGxiYSA+PiAxNikgJiAweEZGOyAgIFwKKyAgICAoY2RiKS0+bGJhMiA9IChsYmEgPj4gOCkgJiAweEZGOyAgICBcCisgICAgKGNkYiktPmxiYTMgPSBsYmEgJiAweEZGOyAgICAgICAgICAgXAorfQorCisjZGVmaW5lIFNDU0lfQ0RCMTBfR0VUX1RMKGNkYikgIFwKKyAgICAoKGNkYiktPnhmZXJfbGVuZ3RoMCA8PCA4IHwgKGNkYiktPnhmZXJfbGVuZ3RoMSkKKyNkZWZpbmUgU0NTSV9DREIxMF9TRVRfVEwoY2RiLCB0bCkgeyAgICAgIFwKKyAgICAoY2RiKS0+eGZlcl9sZW5ndGgwID0gdGwgPj4gODsgICAgICAgXAorICAgIChjZGIpLT54ZmVyX2xlbmd0aDEgPSB0bCAmIDB4RkY7ICAgICBcCit9CisKKy8qCisgKiBTQ1NJIFJFQUQ2L1dSSVRFNiBjb21tYW5kcworICovCitzdHJ1Y3Qgc2NzaV9ydzZfc3sKKwl1OCAgICAgICAgIG9wY29kZTsKKyNpZmRlZiBfX0JJR0VORElBTgorCXU4ICAgICAgICAgbHVuOjM7CisJdTggICAgICAgICBsYmEwOjU7CQkvKiBNU2IgKi8KKyNlbHNlCisJdTggICAgICAgICBsYmEwOjU7CQkvKiBNU2IgKi8KKwl1OCAgICAgICAgIGx1bjozOworI2VuZGlmCisJdTggICAgICAgICBsYmExOworCXU4ICAgICAgICAgbGJhMjsJCS8qIExTQiAqLworCXU4ICAgICAgICAgeGZlcl9sZW5ndGg7CisJdTggICAgICAgICBjb250cm9sOworfTsKKworI2RlZmluZSBTQ1NJX1RBUEVfQ0RCNl9HRVRfVEwoY2RiKSAgICAgICAgICAgICAgXAorICAgICgoKGNkYiktPnRsMCA8PCAxNikgfCAoKGNkYiktPnRsMSA8PCA4KSB8IChjZGIpLT50bDIpCisKKyNkZWZpbmUgU0NTSV9UQVBFX0NEQjZfU0VUX1RMKGNkYiwgdGwpIHsgICAgICBcCisgICAgKGNkYiktPnRsMCA9IHRsID4+IDE2OyAgICAgICAgICAgIFwKKyAgICAoY2RiKS0+dGwxID0gKHRsID4+IDgpICYgMHhGRjsgICAgXAorICAgIChjZGIpLT50bDIgPSB0bCAmIDB4RkY7ICAgICAgICAgICBcCit9CisKKy8qCisgKiBTQ1NJIHNlcXVlbnRpYWwgKFRBUEUpIHdydGllIGNvbW1hbmQKKyAqLworc3RydWN0IHNjc2lfdGFwZV93cl9zeworCXU4ICAgICAgICAgb3Bjb2RlOworI2lmZGVmIF9fQklHRU5ESUFOCisJdTggICAgICAgICByc3ZkOjc7CisJdTggICAgICAgICBmaXhlZDoxOwkvKiBNU2IgKi8KKyNlbHNlCisJdTggICAgICAgICBmaXhlZDoxOwkvKiBNU2IgKi8KKwl1OCAgICAgICAgIHJzdmQ6NzsKKyNlbmRpZgorCXU4ICAgICAgICAgdGwwOwkJLyogTXNiICovCisJdTggICAgICAgICB0bDE7CisJdTggICAgICAgICB0bDI7CQkvKiBMc2IgKi8KKworCXU4ICAgICAgICAgY29udHJvbDsKK307CisKKyNkZWZpbmUgU0NTSV9DREI2X0dFVF9MQkEoY2RiKSAgICAgICAgICAgICAgXAorICAgICgoKGNkYiktPmxiYTAgPDwgMTYpIHwgKChjZGIpLT5sYmExIDw8IDgpIHwgKGNkYiktPmxiYTIpCisKKyNkZWZpbmUgU0NTSV9DREI2X1NFVF9MQkEoY2RiLCBsYmEpIHsgICAgICBcCisgICAgKGNkYiktPmxiYTAgPSBsYmEgPj4gMTY7ICAgICAgICAgICAgXAorICAgIChjZGIpLT5sYmExID0gKGxiYSA+PiA4KSAmIDB4RkY7ICAgIFwKKyAgICAoY2RiKS0+bGJhMiA9IGxiYSAmIDB4RkY7ICAgICAgICAgICBcCit9CisKKyNkZWZpbmUgU0NTSV9DREI2X0dFVF9UTChjZGIpICgoY2RiKS0+eGZlcl9sZW5ndGgpCisjZGVmaW5lIFNDU0lfQ0RCNl9TRVRfVEwoY2RiLCB0bCkgeyAgICAgIFwKKyAgICAoY2RiKS0+eGZlcl9sZW5ndGggPSB0bDsgICAgICAgICBcCit9CisKKy8qCisgKiBTQ1NJIHNlbnNlIGRhdGEgZm9ybWF0CisgKi8KK3N0cnVjdCBzY3NpX3NlbnNlX3N7CisjaWZkZWYgX19CSUdFTkRJQU4KKwl1OCAgICAgICAgIHZhbGlkOjE7CisJdTggICAgICAgICByc3BfY29kZTo3OworI2Vsc2UKKwl1OCAgICAgICAgIHJzcF9jb2RlOjc7CisJdTggICAgICAgICB2YWxpZDoxOworI2VuZGlmCisJdTggICAgICAgICBzZWdfbnVtOworI2lmZGVmIF9fQklHRU5ESUFOCisJdTggICAgICAgICBmaWxlX21hcms6MTsKKwl1OCAgICAgICAgIGVvbToxOwkJLyogZW5kIG9mIG1lZGlhICovCisJdTggICAgICAgICBpbGk6MTsJCS8qIGluY29ycmVjdCBsZW5ndGggaW5kaWNhdG9yICovCisJdTggICAgICAgICByZXNlcnZlZDoxOworCXU4ICAgICAgICAgc2Vuc2Vfa2V5OjQ7CisjZWxzZQorCXU4ICAgICAgICAgc2Vuc2Vfa2V5OjQ7CisJdTggICAgICAgICByZXNlcnZlZDoxOworCXU4ICAgICAgICAgaWxpOjE7CQkvKiBpbmNvcnJlY3QgbGVuZ3RoIGluZGljYXRvciAqLworCXU4ICAgICAgICAgZW9tOjE7CQkvKiBlbmQgb2YgbWVkaWEgKi8KKwl1OCAgICAgICAgIGZpbGVfbWFyazoxOworI2VuZGlmCisJdTggICAgICAgICBpbmZvcm1hdGlvbls0XTsJLyogZGV2aWNlLXR5cGUgb3IgY29tbWFuZCBzcGVjaWZpYyBpbmZvCisJCQkJCSAqLworCXU4ICAgICAgICAgYWRkX3NlbnNlX2xlbmd0aDsKKwkJCQkJLyogYWRkaXRpb25hbCBzZW5zZSBsZW5ndGggKi8KKwl1OCAgICAgICAgIGNvbW1hbmRfaW5mb1s0XTsvKiBjb21tYW5kIHNwZWNpZmljIGluZm9ybWF0aW9uCisJCQkJCQkgKi8KKwl1OCAgICAgICAgIGFzYzsJCS8qIGFkZGl0aW9uYWwgc2Vuc2UgY29kZSAqLworCXU4ICAgICAgICAgYXNjcTsJCS8qIGFkZGl0aW9uYWwgc2Vuc2UgY29kZSBxdWFsaWZpZXIgKi8KKwl1OCAgICAgICAgIGZydV9jb2RlOwkvKiBmaWVsZCByZXBsYWNlYWJsZSB1bml0IGNvZGUgKi8KKyNpZmRlZiBfX0JJR0VORElBTgorCXU4ICAgICAgICAgc2tzdjoxOwkJLyogc2Vuc2Uga2V5IHNwZWNpZmljIHZhbGlkICovCisJdTggICAgICAgICBjX2Q6MTsJCS8qIGNvbW1hbmQvZGF0YSBiaXQgKi8KKwl1OCAgICAgICAgIHJlczE6MjsKKwl1OCAgICAgICAgIGJwdjoxOwkJLyogYml0IHBvaW50ZXIgdmFsaWQgKi8KKwl1OCAgICAgICAgIGJwb2ludGVyOjM7CS8qIGJpdCBwb2ludGVyICovCisjZWxzZQorCXU4ICAgICAgICAgYnBvaW50ZXI6MzsJLyogYml0IHBvaW50ZXIgKi8KKwl1OCAgICAgICAgIGJwdjoxOwkJLyogYml0IHBvaW50ZXIgdmFsaWQgKi8KKwl1OCAgICAgICAgIHJlczE6MjsKKwl1OCAgICAgICAgIGNfZDoxOwkJLyogY29tbWFuZC9kYXRhIGJpdCAqLworCXU4ICAgICAgICAgc2tzdjoxOwkJLyogc2Vuc2Uga2V5IHNwZWNpZmljIHZhbGlkICovCisjZW5kaWYKKwl1OCAgICAgICAgIGZwb2ludGVyWzJdOwkvKiBmaWVsZCBwb2ludGVyICovCit9OworCisjZGVmaW5lIFNDU0lfU0VOU0VfQ1VSX0VSUiAgICAgICAgICAweDcwCisjZGVmaW5lIFNDU0lfU0VOU0VfREVGX0VSUiAgICAgICAgICAweDcxCisKKy8qCisgKiBTQ1NJIHNlbnNlIGtleSB2YWx1ZXMKKyAqLworI2RlZmluZSBTQ1NJX1NLX05PX1NFTlNFICAgICAgICAweDAKKyNkZWZpbmUgU0NTSV9TS19SRUNfRVJSICAgICAgICAgMHgxCS8qIHJlY292ZXJlZCBlcnJvciAqLworI2RlZmluZSBTQ1NJX1NLX05PVF9SRUFEWSAgICAgICAweDIKKyNkZWZpbmUgU0NTSV9TS19NRURfRVJSICAgICAgICAgMHgzCS8qIG1lZGl1bSBlcnJvciAqLworI2RlZmluZSBTQ1NJX1NLX0hXX0VSUiAgICAgICAgICAweDQJLyogaGFyZHdhcmUgZXJyb3IgKi8KKyNkZWZpbmUgU0NTSV9TS19JTExFR0FMX1JFUSAgICAgMHg1CisjZGVmaW5lIFNDU0lfU0tfVU5JVF9BVFQgICAgICAgIDB4NgkvKiB1bml0IGF0dGVudGlvbiAqLworI2RlZmluZSBTQ1NJX1NLX0RBVEFfUFJPVEVDVCAgICAweDcKKyNkZWZpbmUgU0NTSV9TS19CTEFOS19DSEVDSyAgICAgMHg4CisjZGVmaW5lIFNDU0lfU0tfVkVORE9SX1NQRUMgICAgIDB4OQorI2RlZmluZSBTQ1NJX1NLX0NPUFlfQUJPUlRFRCAgICAweEEKKyNkZWZpbmUgU0NTSV9TS19BQk9SVEVEX0NNTkQgICAgMHhCCisjZGVmaW5lIFNDU0lfU0tfVk9MX09WRVJGTE9XICAgIDB4RAorI2RlZmluZSBTQ1NJX1NLX01JU0NPTVBBUkUgICAgICAweEUKKworLyoKKyAqIFNDU0kgYWRkaXRpb25hbCBzZW5zZSBjb2RlcworICovCisjZGVmaW5lIFNDU0lfQVNDX05PX0FERF9TRU5TRSAgICAgICAgICAgMHgwMAorI2RlZmluZSBTQ1NJX0FTQ19MVU5fTk9UX1JFQURZICAgICAgICAgIDB4MDQKKyNkZWZpbmUgU0NTSV9BU0NfTFVOX0NPTU1VTklDQVRJT04gICAgICAweDA4CisjZGVmaW5lIFNDU0lfQVNDX1dSSVRFX0VSUk9SICAgICAgICAgICAgMHgwQworI2RlZmluZSBTQ1NJX0FTQ19JTlZBTElEX0NNTkRfQ09ERSAgICAgIDB4MjAKKyNkZWZpbmUgU0NTSV9BU0NfQkFEX0xCQSAgICAgICAgICAgICAgICAweDIxCisjZGVmaW5lIFNDU0lfQVNDX0lOVkFMSURfRklFTERfSU5fQ0RCICAgMHgyNAorI2RlZmluZSBTQ1NJX0FTQ19MVU5fTk9UX1NVUFBPUlRFRCAgICAgIDB4MjUKKyNkZWZpbmUgU0NTSV9BU0NfTFVOX1dSSVRFX1BST1RFQ1QgICAgICAweDI3CisjZGVmaW5lIFNDU0lfQVNDX1BPV0VST05fQkRSICAgICAgICAgICAgMHgyOQkvKiBwb3dlciBvbiByZXNldCwgYnVzIHJlc2V0LAorCQkJCQkJICogYnVzIGRldmljZSByZXNldAorCQkJCQkJICovCisjZGVmaW5lIFNDU0lfQVNDX1BBUkFNU19DSEFOR0VEICAgICAgICAgMHgyQQorI2RlZmluZSBTQ1NJX0FTQ19DTU5EX0NMRUFSRURfQllfQV9JICAgIDB4MkYKKyNkZWZpbmUgU0NTSV9BU0NfU0FWSU5HX1BBUkFNX05PVFNVUFAgICAweDM5CisjZGVmaW5lIFNDU0lfQVNDX1RPQ0MgICAgICAgICAgICAgICAgICAgMHgzRgkvKiB0YXJnZXQgb3BlcmF0aW5nIGNvbmR0aW9ucworCQkJCQkJICogY2hhbmdlZAorCQkJCQkJICovCisjZGVmaW5lIFNDU0lfQVNDX1BBUklUWV9FUlJPUiAgICAgICAgICAgMHg0NworI2RlZmluZSBTQ1NJX0FTQ19DTU5EX1BIQVNFX0VSUk9SICAgICAgIDB4NEEKKyNkZWZpbmUgU0NTSV9BU0NfREFUQV9QSEFTRV9FUlJPUiAgICAgICAweDRCCisjZGVmaW5lIFNDU0lfQVNDX1ZFTkRPUl9TUEVDICAgICAgICAgICAgMHg3RgorCisvKgorICogU0NTSSBhZGRpdGlvbmFsIHNlbnNlIGNvZGUgcXVhbGlmaWVycworICovCisjZGVmaW5lIFNDU0lfQVNDUV9DQVVTRV9OT1RfUkVQT1JUICAgICAgMHgwMAorI2RlZmluZSBTQ1NJX0FTQ1FfQkVDT01JTkdfUkVBRFkgICAgICAgIDB4MDEKKyNkZWZpbmUgU0NTSV9BU0NRX0lOSVRfQ01EX1JFUSAgICAgICAgICAweDAyCisjZGVmaW5lIFNDU0lfQVNDUV9GT1JNQVRfSU5fUFJPR1JFU1MgICAgMHgwNAorI2RlZmluZSBTQ1NJX0FTQ1FfT1BFUkFUSU9OX0lOX1BST0dSRVNTIDB4MDcKKyNkZWZpbmUgU0NTSV9BU0NRX1NFTEZfVEVTVF9JTl9QUk9HUkVTUyAweDA5CisjZGVmaW5lIFNDU0lfQVNDUV9XUl9VTkVYUF9VTlNPTF9EQVRBICAgMHgwQworI2RlZmluZSBTQ1NJX0FTQ1FfV1JfTk9URU5HX1VOU09MX0RBVEEgIDB4MEQKKworI2RlZmluZSBTQ1NJX0FTQ1FfTEJBX09VVF9PRl9SQU5HRSAgICAgIDB4MDAKKyNkZWZpbmUgU0NTSV9BU0NRX0lOVkFMSURfRUxFTUVOVF9BRERSICAweDAxCisKKyNkZWZpbmUgU0NTSV9BU0NRX0xVTl9XUklURV9QUk9URUNURUQgICAgICAgMHgwMAorI2RlZmluZSBTQ1NJX0FTQ1FfTFVOX0hXX1dSSVRFX1BST1RFQ1RFRCAgICAweDAxCisjZGVmaW5lIFNDU0lfQVNDUV9MVU5fU1dfV1JJVEVfUFJPVEVDVEVEICAgIDB4MDIKKworI2RlZmluZSBTQ1NJX0FTQ1FfUE9SICAgMHgwMQkvKiBwb3dlciBvbiByZXNldCAqLworI2RlZmluZSBTQ1NJX0FTQ1FfU0JSICAgMHgwMgkvKiBzY3NpIGJ1cyByZXNldCAqLworI2RlZmluZSBTQ1NJX0FTQ1FfQkRSICAgMHgwMwkvKiBidXMgZGV2aWNlIHJlc2V0ICovCisjZGVmaW5lIFNDU0lfQVNDUV9ESVIgICAweDA0CS8qIGRldmljZSBpbnRlcm5hbCByZXNldCAqLworCisjZGVmaW5lIFNDU0lfQVNDUV9NT0RFX1BBUkFNU19DSEFOR0VEICAgICAgIDB4MDEKKyNkZWZpbmUgU0NTSV9BU0NRX0xPR19QQVJBTVNfQ0hBTkdFRCAgICAgICAgMHgwMgorI2RlZmluZSBTQ1NJX0FTQ1FfUkVTRVJWQVRJT05TX1BSRUVNUFRFRCAgICAweDAzCisjZGVmaW5lIFNDU0lfQVNDUV9SRVNFUlZBVElPTlNfUkVMRUFTRUQgICAgIDB4MDQKKyNkZWZpbmUgU0NTSV9BU0NRX1JFR0lTVFJBVElPTlNfUFJFRU1QVEVEICAgMHgwNQorCisjZGVmaW5lIFNDU0lfQVNDUV9NSUNST0NPREVfQ0hBTkdFRCAweDAxCisjZGVmaW5lIFNDU0lfQVNDUV9DSEFOR0VEX09QRVJfQ09ORCAweDAyCisjZGVmaW5lIFNDU0lfQVNDUV9JTlFfQ0hBTkdFRCAgICAgICAweDAzCS8qIGlucXVpcnkgZGF0YSBjaGFuZ2VkICovCisjZGVmaW5lIFNDU0lfQVNDUV9ESV9DSEFOR0VEICAgICAgICAweDA1CS8qIGRldmljZSBpZCBjaGFuZ2VkICovCisjZGVmaW5lIFNDU0lfQVNDUV9STF9EQVRBX0NIQU5HRUQgICAweDBFCS8qIHJlcG9ydCBsdW5zIGRhdGEgY2hhbmdlZCAqLworCisjZGVmaW5lIFNDU0lfQVNDUV9EUF9DUkNfRVJSICAgICAgICAgICAgMHgwMQkvKiBkYXRhIHBoYXNlIGNyYyBlcnJvciAqLworI2RlZmluZSBTQ1NJX0FTQ1FfRFBfU0NTSV9QQVJJVFlfRVJSICAgIDB4MDIJLyogZGF0YSBwaGFzZSBzY3NpIHBhcml0eSBlcnJvcgorCQkJCQkJICovCisjZGVmaW5lIFNDU0lfQVNDUV9JVV9DUkNfRVJSICAgICAgICAgICAgMHgwMwkvKiBpbmZvcm1hdGlvbiB1bml0IGNyYyBlcnJvciAqLworI2RlZmluZSBTQ1NJX0FTQ1FfUFJPVE9fU0VSVl9DUkNfRVJSICAgIDB4MDUKKworI2RlZmluZSBTQ1NJX0FTQ1FfTFVOX1RJTUVfT1VUICAgICAgICAgIDB4MDEKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBTQ1NJIElOUVVJUlkKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0cnVjdCBzY3NpX2lucXVpcnlfc3sKKwl1OCAgICAgICAgIG9wY29kZTsKKyNpZmRlZiBfX0JJR0VORElBTgorCXU4ICAgICAgICAgbHVuOjM7CisJdTggICAgICAgICByZXNlcnZlZDE6MzsKKwl1OCAgICAgICAgIGNtZF9kdDoxOworCXU4ICAgICAgICAgZXZwZDoxOworI2Vsc2UKKwl1OCAgICAgICAgIGV2cGQ6MTsKKwl1OCAgICAgICAgIGNtZF9kdDoxOworCXU4ICAgICAgICAgcmVzZXJ2ZWQxOjM7CisJdTggICAgICAgICBsdW46MzsKKyNlbmRpZgorCXU4ICAgICAgICAgcGFnZV9jb2RlOworCXU4ICAgICAgICAgcmVzZXJ2ZWQyOworCXU4ICAgICAgICAgYWxsb2NfbGVuZ3RoOworCXU4ICAgICAgICAgY29udHJvbDsKK307CisKK3N0cnVjdCBzY3NpX2lucXVpcnlfdmVuZG9yX3N7CisJdTggICAgICAgICB2ZW5kb3JfaWRbOF07Cit9OworCitzdHJ1Y3Qgc2NzaV9pbnF1aXJ5X3Byb2RpZF9zeworCXU4ICAgICAgICAgcHJvZHVjdF9pZFsxNl07Cit9OworCitzdHJ1Y3Qgc2NzaV9pbnF1aXJ5X3Byb2RyZXZfc3sKKwl1OCAgICAgICAgIHByb2R1Y3RfcmV2WzRdOworfTsKKworc3RydWN0IHNjc2lfaW5xdWlyeV9kYXRhX3N7CisjaWZkZWYgX19CSUdFTkRJQU4KKwl1OCAgICAgICAgIHBlcmlwaGVyYWxfcXVhbDozOwkvKiBwZXJpcGhlcmFsIHF1YWxpZmllciAqLworCXU4ICAgICAgICAgZGV2aWNlX3R5cGU6NTsJCS8qIHBlcmlwaGVyYWwgZGV2aWNlIHR5cGUgKi8KKworCXU4ICAgICAgICAgcm1iOjE7CQkJLyogcmVtb3ZhYmxlIG1lZGl1bSBiaXQgKi8KKwl1OCAgICAgICAgIGRldmljZV90eXBlX21vZDo3OwkvKiBkZXZpY2UgdHlwZSBtb2RpZmllciAqLworCisJdTggICAgICAgICB2ZXJzaW9uOworCisJdTggICAgICAgICBhZW5jOjE7CQkvKiBhc3luYyBldmVudCBub3RpZmljYXRpb24gY2FwYWJpbGl0eQorCQkJCQkgKi8KKwl1OCAgICAgICAgIHRybV9pb3A6MTsJLyogdGVybWluYXRlIEkvTyBwcm9jZXNzICovCisJdTggICAgICAgICBub3JtX2FjYToxOwkvKiBub3JtYWwgQUNBIHN1cHBvcnRlZCAqLworCXU4ICAgICAgICAgaGlfc3VwcG9ydDoxOwkvKiBTQ1NJLTM6IHN1cHBvcnRzIFJFUE9SVCBMVU5TICovCisJdTggICAgICAgICByc3BfZGF0YV9mb3JtYXQ6NDsKKworCXU4ICAgICAgICAgYWRkaXRpb25hbF9sZW47CisJdTggICAgICAgICBzY2NzOjE7CisJdTggICAgICAgICByZXNlcnZlZDE6NzsKKworCXU4ICAgICAgICAgcmVzZXJ2ZWQyOjE7CisJdTggICAgICAgICBlbmNfc2VydjoxOwkvKiBlbmNsb3N1cmUgc2VydmljZSBjb21wb25lbnQgKi8KKwl1OCAgICAgICAgIHJlc2VydmVkMzoxOworCXU4ICAgICAgICAgbXVsdGlfcG9ydDoxOwkvKiBtdWx0aS1wb3J0IGRldmljZSAqLworCXU4ICAgICAgICAgbV9jaG5ncjoxOwkvKiBkZXZpY2UgaW4gbWVkaXVtIHRyYW5zcG9ydCBlbGVtZW50ICovCisJdTggICAgICAgICBhY2tfcmVxX3E6MTsJLyogU0lQIHNwZWNpZmljIGJpdCAqLworCXU4ICAgICAgICAgYWRkcjMyOjE7CS8qIFNJUCBzcGVjaWZpYyBiaXQgKi8KKwl1OCAgICAgICAgIGFkZHIxNjoxOwkvKiBTSVAgc3BlY2lmaWMgYml0ICovCisKKwl1OCAgICAgICAgIHJlbF9hZHI6MTsJLyogcmVsYXRpdmUgYWRkcmVzcyAqLworCXU4ICAgICAgICAgd19idXMzMjoxOworCXU4ICAgICAgICAgd19idXMxNjoxOworCXU4ICAgICAgICAgc3luY2hyb25vdXM6MTsKKwl1OCAgICAgICAgIGxpbmtlZF9jb21tYW5kczoxOworCXU4ICAgICAgICAgdHJhbnNfZGlzOjE7CisJdTggICAgICAgICBjbWRfcXVldWU6MTsJLyogY29tbWFuZCBxdWV1ZWluZyBzdXBwb3J0ZWQgKi8KKwl1OCAgICAgICAgIHNvZnRfcmVzZXQ6MTsJLyogc29mdCByZXNldCBhbHRlcm5hdGl2ZSAoVlMpICovCisjZWxzZQorCXU4ICAgICAgICAgZGV2aWNlX3R5cGU6NTsJLyogcGVyaXBoZXJhbCBkZXZpY2UgdHlwZSAqLworCXU4ICAgICAgICAgcGVyaXBoZXJhbF9xdWFsOjM7CisJCQkJCS8qIHBlcmlwaGVyYWwgcXVhbGlmaWVyICovCisKKwl1OCAgICAgICAgIGRldmljZV90eXBlX21vZDo3OworCQkJCQkvKiBkZXZpY2UgdHlwZSBtb2RpZmllciAqLworCXU4ICAgICAgICAgcm1iOjE7CQkvKiByZW1vdmFibGUgbWVkaXVtIGJpdCAqLworCisJdTggICAgICAgICB2ZXJzaW9uOworCisJdTggICAgICAgICByc3BfZGF0YV9mb3JtYXQ6NDsKKwl1OCAgICAgICAgIGhpX3N1cHBvcnQ6MTsJLyogU0NTSS0zOiBzdXBwb3J0cyBSRVBPUlQgTFVOUyAqLworCXU4ICAgICAgICAgbm9ybV9hY2E6MTsJLyogbm9ybWFsIEFDQSBzdXBwb3J0ZWQgKi8KKwl1OCAgICAgICAgIHRlcm1pbmF0ZV9pb3A6MTsvKiB0ZXJtaW5hdGUgSS9PIHByb2Nlc3MgKi8KKwl1OCAgICAgICAgIGFlbmM6MTsJCS8qIGFzeW5jIGV2ZW50IG5vdGlmaWNhdGlvbiBjYXBhYmlsaXR5CisJCQkJCSAqLworCisJdTggICAgICAgICBhZGRpdGlvbmFsX2xlbjsKKwl1OCAgICAgICAgIHJlc2VydmVkMTo3OworCXU4ICAgICAgICAgc2NjczoxOworCisJdTggICAgICAgICBhZGRyMTY6MTsJLyogU0lQIHNwZWNpZmljIGJpdCAqLworCXU4ICAgICAgICAgYWRkcjMyOjE7CS8qIFNJUCBzcGVjaWZpYyBiaXQgKi8KKwl1OCAgICAgICAgIGFja19yZXFfcToxOwkvKiBTSVAgc3BlY2lmaWMgYml0ICovCisJdTggICAgICAgICBtX2NobmdyOjE7CS8qIGRldmljZSBpbiBtZWRpdW0gdHJhbnNwb3J0IGVsZW1lbnQgKi8KKwl1OCAgICAgICAgIG11bHRpX3BvcnQ6MTsJLyogbXVsdGktcG9ydCBkZXZpY2UgKi8KKwl1OCAgICAgICAgIHJlc2VydmVkMzoxOwkvKiBUQkQgLSBWZW5kb3IgU3BlY2lmaWMgKi8KKwl1OCAgICAgICAgIGVuY19zZXJ2OjE7CS8qIGVuY2xvc3VyZSBzZXJ2aWNlIGNvbXBvbmVudCAqLworCXU4ICAgICAgICAgcmVzZXJ2ZWQyOjE7CisKKwl1OCAgICAgICAgIHNvZnRfc2VzZXQ6MTsJLyogc29mdCByZXNldCBhbHRlcm5hdGl2ZSAoVlMpICovCisJdTggICAgICAgICBjbWRfcXVldWU6MTsJLyogY29tbWFuZCBxdWV1ZWluZyBzdXBwb3J0ZWQgKi8KKwl1OCAgICAgICAgIHRyYW5zX2RpczoxOworCXU4ICAgICAgICAgbGlua2VkX2NvbW1hbmRzOjE7CisJdTggICAgICAgICBzeW5jaHJvbm91czoxOworCXU4ICAgICAgICAgd19idXMxNjoxOworCXU4ICAgICAgICAgd19idXMzMjoxOworCXU4ICAgICAgICAgcmVsX2FkcjoxOwkvKiByZWxhdGl2ZSBhZGRyZXNzICovCisjZW5kaWYKKwlzdHJ1Y3Qgc2NzaV9pbnF1aXJ5X3ZlbmRvcl9zIHZlbmRvcl9pZDsKKwlzdHJ1Y3Qgc2NzaV9pbnF1aXJ5X3Byb2RpZF9zIHByb2R1Y3RfaWQ7CisJc3RydWN0IHNjc2lfaW5xdWlyeV9wcm9kcmV2X3MgcHJvZHVjdF9yZXY7CisJdTggICAgICAgICB2ZW5kb3Jfc3BlY2lmaWNbMjBdOworCXU4ICAgICAgICAgcmVzZXJ2ZWQ0WzQwXTsKK307CisKKy8qCisgKiBpbnF1aXJ5LnBlcmlwaGVyYWxfcXVhbCBmaWVsZCB2YWx1ZXMKKyAqLworI2RlZmluZSBTQ1NJX0RFVlFVQUxfREVGQVVMVCAgICAgICAgMAorI2RlZmluZSBTQ1NJX0RFVlFVQUxfTk9UX0NPTk5FQ1RFRCAgMQorI2RlZmluZSBTQ1NJX0RFVlFVQUxfTk9UX1NVUFBPUlRFRCAgMworCisvKgorICogaW5xdWlyeS5kZXZpY2VfdHlwZSBmaWVsZCB2YWx1ZXMKKyAqLworI2RlZmluZSBTQ1NJX0RFVklDRV9ESVJFQ1RfQUNDRVNTICAgICAgIDB4MDAKKyNkZWZpbmUgU0NTSV9ERVZJQ0VfU0VRX0FDQ0VTUyAgICAgICAgICAweDAxCisjZGVmaW5lIFNDU0lfREVWSUNFX0FSUkFZX0NPTlRST0xMRVIgICAgMHgwQworI2RlZmluZSBTQ1NJX0RFVklDRV9VTktOT1dOICAgICAgICAgICAgIDB4MUYKKworLyoKKyAqIGlucXVpcnkudmVyc2lvbgorICovCisjZGVmaW5lIFNDU0lfVkVSU0lPTl9BTlNJX1gzMTMxICAgICAyCS8qIEFOU0kgWDMuMTMxIFNDU0ktMiAqLworI2RlZmluZSBTQ1NJX1ZFUlNJT05fU1BDICAgICAgICAgICAgMwkvKiBTUEMgKFNDU0ktMyksIEFOU0kgWDMuMzAxOjE5OTcgKi8KKyNkZWZpbmUgU0NTSV9WRVJTSU9OX1NQQ18yICAgICAgICAgIDQJLyogU1BDLTIgKi8KKworLyoKKyAqIHJlc3BvbnNlIGRhdGEgZm9ybWF0CisgKi8KKyNkZWZpbmUgU0NTSV9SU1BfREFUQV9GT1JNQVQgICAgICAgIDIJLyogU0NTSS0yICYgU1BDICovCisKKy8qCisgKiBTQ1NJIGlucXVpcnkgcGFnZSBjb2RlcworICovCisjZGVmaW5lIFNDU0lfSU5RX1BBR0VfVlBEX1BBR0VTICAgICAweDAwCS8qIHN1cHBvcnRlZCB2cGQgcGFnZXMgKi8KKyNkZWZpbmUgU0NTSV9JTlFfUEFHRV9VU05fUEFHRSAgICAgIDB4ODAJLyogdW5pdCBzZXJpYWwgbnVtYmVyIHBhZ2UgKi8KKyNkZWZpbmUgU0NTSV9JTlFfUEFHRV9ERVZfSURFTlQgICAgIDB4ODMJLyogZGV2aWNlIGluZGVudGlmaWNhdGlvbiBwYWdlCisJCQkJCQkgKi8KKyNkZWZpbmUgU0NTSV9JTlFfUEFHRVNfTUFYICAgICAgICAgIDMKKworLyoKKyAqIHN1cHBvcnRlZCB2aXRhbCBwcm9kdWN0IGRhdGEgcGFnZXMKKyAqLworc3RydWN0IHNjc2lfaW5xX3BhZ2VfdnBkX3BhZ2VzX3N7CisjaWZkZWYgX19CSUdFTkRJQU4KKwl1OCAgICAgICAgIHBlcmlwaGVyYWxfcXVhbDozOworCXU4ICAgICAgICAgZGV2aWNlX3R5cGU6NTsKKyNlbHNlCisJdTggICAgICAgICBkZXZpY2VfdHlwZTo1OworCXU4ICAgICAgICAgcGVyaXBoZXJhbF9xdWFsOjM7CisjZW5kaWYKKwl1OCAgICAgICAgIHBhZ2VfY29kZTsKKwl1OCAgICAgICAgIHJlc2VydmVkOworCXU4ICAgICAgICAgcGFnZV9sZW5ndGg7CisJdTggICAgICAgICBwYWdlc1tTQ1NJX0lOUV9QQUdFU19NQVhdOworfTsKKworLyoKKyAqIFVuaXQgc2VyaWFsIG51bWJlciBwYWdlCisgKi8KKyNkZWZpbmUgU0NTSV9JTlFfVVNOX0xFTiAzMgorCitzdHJ1Y3Qgc2NzaV9pbnFfdXNuX3N7CisJY2hhciAgICAgICAgICAgIHVzbltTQ1NJX0lOUV9VU05fTEVOXTsKK307CisKK3N0cnVjdCBzY3NpX2lucV9wYWdlX3Vzbl9zeworI2lmZGVmIF9fQklHRU5ESUFOCisJdTggICAgICAgICBwZXJpcGhlcmFsX3F1YWw6MzsKKwl1OCAgICAgICAgIGRldmljZV90eXBlOjU7CisjZWxzZQorCXU4ICAgICAgICAgZGV2aWNlX3R5cGU6NTsKKwl1OCAgICAgICAgIHBlcmlwaGVyYWxfcXVhbDozOworI2VuZGlmCisJdTggICAgICAgICBwYWdlX2NvZGU7CisJdTggICAgICAgICByZXNlcnZlZDE7CisJdTggICAgICAgICBwYWdlX2xlbmd0aDsKKwlzdHJ1Y3Qgc2NzaV9pbnFfdXNuX3MgIHVzbjsKK307CisKK2VudW0geworCVNDU0lfSU5RX0RJUF9DT0RFX0JJTkFSWSA9IDEsCS8qIGlkZW50aWZpZXIgaGFzIGJpbmFyeSB2YWx1ZSAqLworCVNDU0lfSU5RX0RJUF9DT0RFX0FTQ0lJID0gMiwJLyogaWRlbnRpZmllciBoYXMgYXNjaWkgdmFsdWUgKi8KK307CisKK2VudW0geworCVNDU0lfSU5RX0RJUF9BU1NPQ19MVU4gPSAwLAkvKiBpZCBpcyBhc3NvY2lhdGVkIHdpdGggZGV2aWNlICovCisJU0NTSV9JTlFfRElQX0FTU09DX1BPUlQgPSAxLAkvKiBpZCBpcyBhc3NvY2lhdGVkIHdpdGggcG9ydCB0aGF0CisJCQkJCSAqIHJlY2VpdmVkIHRoZSByZXF1ZXN0CisJCQkJCSAqLworfTsKKworZW51bSB7CisJU0NTSV9JTlFfSURfVFlQRV9WRU5ET1IgPSAxLAorCVNDU0lfSU5RX0lEX1RZUEVfSUVFRSA9IDIsCisJU0NTSV9JTlFfSURfVFlQRV9GQ19GUyA9IDMsCisJU0NTSV9JTlFfSURfVFlQRV9PVEhFUiA9IDQsCit9OworCitzdHJ1Y3Qgc2NzaV9pbnFfZGlwX2Rlc2Nfc3sKKyNpZmRlZiBfX0JJR0VORElBTgorCXU4ICAgICAgICAgcmVzMDo0OworCXU4ICAgICAgICAgY29kZV9zZXQ6NDsKKwl1OCAgICAgICAgIHJlczE6MjsKKwl1OCAgICAgICAgIGFzc29jaWF0aW9uOjI7CisJdTggICAgICAgICBpZF90eXBlOjQ7CisjZWxzZQorCXU4ICAgICAgICAgY29kZV9zZXQ6NDsKKwl1OCAgICAgICAgIHJlczA6NDsKKwl1OCAgICAgICAgIGlkX3R5cGU6NDsKKwl1OCAgICAgICAgIGFzc29jaWF0aW9uOjI7CisJdTggICAgICAgICByZXMxOjI7CisjZW5kaWYKKwl1OCAgICAgICAgIHJlczI7CisJdTggICAgICAgICBpZF9sZW47CisJc3RydWN0IHNjc2lfbHVuX3NuX3MgICBpZDsKK307CisKKy8qCisgKiBEZXZpY2UgaW5kZW50aWZpY2F0aW9uIHBhZ2UKKyAqLworc3RydWN0IHNjc2lfaW5xX3BhZ2VfZGV2X2lkZW50X3N7CisjaWZkZWYgX19CSUdFTkRJQU4KKwl1OCAgICAgICAgIHBlcmlwaGVyYWxfcXVhbDozOworCXU4ICAgICAgICAgZGV2aWNlX3R5cGU6NTsKKyNlbHNlCisJdTggICAgICAgICBkZXZpY2VfdHlwZTo1OworCXU4ICAgICAgICAgcGVyaXBoZXJhbF9xdWFsOjM7CisjZW5kaWYKKwl1OCAgICAgICAgIHBhZ2VfY29kZTsKKwl1OCAgICAgICAgIHJlc2VydmVkMTsKKwl1OCAgICAgICAgIHBhZ2VfbGVuZ3RoOworCXN0cnVjdCBzY3NpX2lucV9kaXBfZGVzY19zIGRlc2M7Cit9OworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFJFQUQgQ0FQQUNJVFkKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKK3N0cnVjdCBzY3NpX3JlYWRfY2FwYWNpdHlfc3sKKwl1OCAgICAgICAgIG9wY29kZTsKKyNpZmRlZiBfX0JJR0VORElBTgorCXU4ICAgICAgICAgbHVuOjM7CisJdTggICAgICAgICByZXNlcnZlZDE6NDsKKwl1OCAgICAgICAgIHJlbF9hZHI6MTsKKyNlbHNlCisJdTggICAgICAgICByZWxfYWRyOjE7CisJdTggICAgICAgICByZXNlcnZlZDE6NDsKKwl1OCAgICAgICAgIGx1bjozOworI2VuZGlmCisJdTggICAgICAgICBsYmEwOwkvKiBNU0IgKi8KKwl1OCAgICAgICAgIGxiYTE7CisJdTggICAgICAgICBsYmEyOworCXU4ICAgICAgICAgbGJhMzsJLyogTFNCICovCisJdTggICAgICAgICByZXNlcnZlZDI7CisJdTggICAgICAgICByZXNlcnZlZDM7CisjaWZkZWYgX19CSUdFTkRJQU4KKwl1OCAgICAgICAgIHJlc2VydmVkNDo3OworCXU4ICAgICAgICAgcG1pOjE7CS8qIHBhcnRpYWwgbWVkaXVtIGluZGljYXRvciAqLworI2Vsc2UKKwl1OCAgICAgICAgIHBtaToxOwkvKiBwYXJ0aWFsIG1lZGl1bSBpbmRpY2F0b3IgKi8KKwl1OCAgICAgICAgIHJlc2VydmVkNDo3OworI2VuZGlmCisJdTggICAgICAgICBjb250cm9sOworfTsKKworc3RydWN0IHNjc2lfcmVhZF9jYXBhY2l0eV9kYXRhX3N7CisJdTMyICAgICAgICBtYXhfbGJhOwkvKiBtYXhpbXVtIExCQSBhdmFpbGFibGUgKi8KKwl1MzIgICAgICAgIGJsb2NrX2xlbmd0aDsJLyogaW4gYnl0ZXMgKi8KK307CisKK3N0cnVjdCBzY3NpX3JlYWRfY2FwYWNpdHkxNl9kYXRhX3N7CisJdTY0ICAgICAgICBsYmE7CS8qIG1heGltdW0gTEJBIGF2YWlsYWJsZSAqLworCXUzMiAgICAgICAgYmxvY2tfbGVuZ3RoOwkvKiBpbiBieXRlcyAqLworI2lmZGVmIF9fQklHRU5ESUFOCisJdTggICAgICAgICByZXNlcnZlZDE6NCwKKwkJCXBfdHlwZTozLAorCQkJcHJvdF9lbjoxOworCXU4CQlyZXNlcnZlZDI6NCwKKwkJCWxiX3BiZTo0OwkvKiBsb2dpY2FsIGJsb2NrcyBwZXIgcGh5c2ljYWwgYmxvY2sKKwkJCQkJICogZXhwb25lbnQgKi8KKwl1MTYJcmVzZXJ2ZWQzOjIsCisJCQlsYmFfYWxpZ246MTQ7CS8qIGxvd2VzdCBhbGlnbmVkIGxvZ2ljYWwgYmxvY2sKKwkJCQkJICogYWRkcmVzcyAqLworI2Vsc2UKKwl1MTYJbGJhX2FsaWduOjE0LAkvKiBsb3dlc3QgYWxpZ25lZCBsb2dpY2FsIGJsb2NrCisJCQkJCSAqIGFkZHJlc3MgKi8KKwkJCXJlc2VydmVkMzoyOworCXU4CQlsYl9wYmU6NCwJLyogbG9naWNhbCBibG9ja3MgcGVyIHBoeXNpY2FsIGJsb2NrCisJCQkJCSAqIGV4cG9uZW50ICovCisJCQlyZXNlcnZlZDI6NDsKKwl1OAkJcHJvdF9lbjoxLAorCQkJcF90eXBlOjMsCisJCQlyZXNlcnZlZDE6NDsKKyNlbmRpZgorCXU2NAlyZXNlcnZlZDQ7CisJdTY0CXJlc2VydmVkNTsKK307CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogUkVQT1JUIExVTlMgY29tbWFuZAorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworc3RydWN0IHNjc2lfcmVwb3J0X2x1bnNfc3sKKwl1OCAgICAgICAgIG9wY29kZTsJCS8qIEEwaCAtIFJFUE9SVCBMVU5TIG9wQ29kZSAqLworCXU4ICAgICAgICAgcmVzZXJ2ZWQxWzVdOworCXU4ICAgICAgICAgYWxsb2NfbGVuZ3RoWzRdOy8qIGFsbG9jYXRpb24gbGVuZ3RoIE1TQiBmaXJzdCAqLworCXU4ICAgICAgICAgcmVzZXJ2ZWQyOworCXU4ICAgICAgICAgY29udHJvbDsKK307CisKKyNkZWZpbmUgU0NTSV9SRVBPUlRfTFVOX0FMTE9DX0xFTkdUSChybCkgICAgICAgICAgICAgICAgCQlcCisgICAgKChybC0+YWxsb2NfbGVuZ3RoWzBdIDw8IDI0KSB8IChybC0+YWxsb2NfbGVuZ3RoWzFdIDw8IDE2KSB8IAlcCisgICAgIChybC0+YWxsb2NfbGVuZ3RoWzJdIDw8IDgpIHwgKHJsLT5hbGxvY19sZW5ndGhbM10pKQorCisjZGVmaW5lIFNDU0lfUkVQT1JUX0xVTlNfU0VUX0FMTE9DTEVOKHJsLCBhbGxvY19sZW4pIHsgICAgICBcCisgICAgKHJsKS0+YWxsb2NfbGVuZ3RoWzBdID0gKGFsbG9jX2xlbikgPj4gMjQ7ICAgICAgCQkJXAorICAgIChybCktPmFsbG9jX2xlbmd0aFsxXSA9ICgoYWxsb2NfbGVuKSA+PiAxNikgJiAweEZGOyAJCVwKKyAgICAocmwpLT5hbGxvY19sZW5ndGhbMl0gPSAoKGFsbG9jX2xlbikgPj4gOCkgJiAweEZGOyAgCQlcCisgICAgKHJsKS0+YWxsb2NfbGVuZ3RoWzNdID0gKGFsbG9jX2xlbikgJiAweEZGOyAgICAgCQkJXAorfQorCitzdHJ1Y3Qgc2NzaV9yZXBvcnRfbHVuc19kYXRhX3N7CisJdTMyICAgICAgICBsdW5fbGlzdF9sZW5ndGg7CS8qIGxlbmd0aCBvZiBMVU4gbGlzdCBsZW5ndGggKi8KKwl1MzIgICAgICAgIHJlc2VydmVkOworCWx1bl90ICAgICAgICAgICBsdW5bMV07CQkJLyogZmlyc3QgTFVOIGluIGx1biBsaXN0ICovCit9OworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBTQ1NJIG1vZGUgIHBhcmFtZXRlcnMKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KK2VudW0geworCVNDU0lfREFfTUVESVVNX0RFRiA9IDAsCS8qIGRpcmVjdCBhY2Nlc3MgZGVmYXVsdCBtZWRpdW0gdHlwZSAqLworCVNDU0lfREFfTUVESVVNX1NTID0gMSwJLyogZGlyZWN0IGFjY2VzcyBzaW5nbGUgc2lkZWQgKi8KKwlTQ1NJX0RBX01FRElVTV9EUyA9IDIsCS8qIGRpcmVjdCBhY2Nlc3MgZG91YmxlIHNpZGVkICovCit9OworCisvKgorICogU0NTSSBNb2RlIFNlbGVjdCg2KSBjZGIKKyAqLworc3RydWN0IHNjc2lfbW9kZV9zZWxlY3Q2X3N7CisJdTggICAgICAgICBvcGNvZGU7CisjaWZkZWYgX19CSUdFTkRJQU4KKwl1OCAgICAgICAgIHJlc2VydmVkMTozOworCXU4ICAgICAgICAgcGY6MTsJCS8qIHBhZ2UgZm9ybWF0ICovCisJdTggICAgICAgICByZXNlcnZlZDI6MzsKKwl1OCAgICAgICAgIHNwOjE7CQkvKiBzYXZlIHBhZ2VzIGlmIHNldCB0byAxICovCisjZWxzZQorCXU4ICAgICAgICAgc3A6MTsJLyogc2F2ZSBwYWdlcyBpZiBzZXQgdG8gMSAqLworCXU4ICAgICAgICAgcmVzZXJ2ZWQyOjM7CisJdTggICAgICAgICBwZjoxOwkvKiBwYWdlIGZvcm1hdCAqLworCXU4ICAgICAgICAgcmVzZXJ2ZWQxOjM7CisjZW5kaWYKKwl1OCAgICAgICAgIHJlc2VydmVkM1syXTsKKwl1OCAgICAgICAgIGFsbG9jX2xlbjsKKwl1OCAgICAgICAgIGNvbnRyb2w7Cit9OworCisvKgorICogU0NTSSBNb2RlIFNlbGVjdCgxMCkgY2RiCisgKi8KK3N0cnVjdCBzY3NpX21vZGVfc2VsZWN0MTBfc3sKKwl1OCAgICAgICAgIG9wY29kZTsKKyNpZmRlZiBfX0JJR0VORElBTgorCXU4ICAgICAgICAgcmVzZXJ2ZWQxOjM7CisJdTggICAgICAgICBwZjoxOwkvKiBwYWdlIGZvcm1hdCAqLworCXU4ICAgICAgICAgcmVzZXJ2ZWQyOjM7CisJdTggICAgICAgICBzcDoxOwkvKiBzYXZlIHBhZ2VzIGlmIHNldCB0byAxICovCisjZWxzZQorCXU4ICAgICAgICAgc3A6MTsJLyogc2F2ZSBwYWdlcyBpZiBzZXQgdG8gMSAqLworCXU4ICAgICAgICAgcmVzZXJ2ZWQyOjM7CisJdTggICAgICAgICBwZjoxOwkvKiBwYWdlIGZvcm1hdCAqLworCXU4ICAgICAgICAgcmVzZXJ2ZWQxOjM7CisjZW5kaWYKKwl1OCAgICAgICAgIHJlc2VydmVkM1s1XTsKKwl1OCAgICAgICAgIGFsbG9jX2xlbl9tc2I7CisJdTggICAgICAgICBhbGxvY19sZW5fbHNiOworCXU4ICAgICAgICAgY29udHJvbDsKK307CisKKy8qCisgKiBTQ1NJIE1vZGUgU2Vuc2UoNikgY2RiCisgKi8KK3N0cnVjdCBzY3NpX21vZGVfc2Vuc2U2X3N7CisJdTggICAgICAgICBvcGNvZGU7CisjaWZkZWYgX19CSUdFTkRJQU4KKwl1OCAgICAgICAgIHJlc2VydmVkMTo0OworCXU4ICAgICAgICAgZGJkOjE7CS8qIGRpc2FibGUgYmxvY2sgZGlzY3JpcHRvcnMgaWYgc2V0IHRvIDEgKi8KKwl1OCAgICAgICAgIHJlc2VydmVkMjozOworCisJdTggICAgICAgICBwYzoyOwkvKiBwYWdlIGNvbnRyb2wgKi8KKwl1OCAgICAgICAgIHBhZ2VfY29kZTo2OworI2Vsc2UKKwl1OCAgICAgICAgIHJlc2VydmVkMjozOworCXU4ICAgICAgICAgZGJkOjE7CS8qIGRpc2FibGUgYmxvY2sgZGVzY3JpcHRvcnMgaWYgc2V0IHRvIDEgKi8KKwl1OCAgICAgICAgIHJlc2VydmVkMTo0OworCisJdTggICAgICAgICBwYWdlX2NvZGU6NjsKKwl1OCAgICAgICAgIHBjOjI7CS8qIHBhZ2UgY29udHJvbCAqLworI2VuZGlmCisJdTggICAgICAgICByZXNlcnZlZDM7CisJdTggICAgICAgICBhbGxvY19sZW47CisJdTggICAgICAgICBjb250cm9sOworfTsKKworLyoKKyAqIFNDU0kgTW9kZSBTZW5zZSgxMCkgY2RiCisgKi8KK3N0cnVjdCBzY3NpX21vZGVfc2Vuc2UxMF9zeworCXU4ICAgICAgICAgb3Bjb2RlOworI2lmZGVmIF9fQklHRU5ESUFOCisJdTggICAgICAgICByZXNlcnZlZDE6MzsKKwl1OCAgICAgICAgIExMQkFBOjE7CS8qIGxvbmcgTEJBIGFjY2VwdGVkIGlmIHNldCB0byAxICovCisJdTggICAgICAgICBkYmQ6MTsJCS8qIGRpc2FibGUgYmxvY2sgZGVzY3JpcHRvcnMgaWYgc2V0CisJCQkJCSAqIHRvIDEKKwkJCQkJICovCisJdTggICAgICAgICByZXNlcnZlZDI6MzsKKworCXU4ICAgICAgICAgcGM6MjsJCS8qIHBhZ2UgY29udHJvbCAqLworCXU4ICAgICAgICAgcGFnZV9jb2RlOjY7CisjZWxzZQorCXU4ICAgICAgICAgcmVzZXJ2ZWQyOjM7CisJdTggICAgICAgICBkYmQ6MTsJCS8qIGRpc2FibGUgYmxvY2sgZGVzY3JpcHRvcnMgaWYgc2V0IHRvCisJCQkJCSAqIDEKKwkJCQkJICovCisJdTggICAgICAgICBMTEJBQToxOwkvKiBsb25nIExCQSBhY2NlcHRlZCBpZiBzZXQgdG8gMSAqLworCXU4ICAgICAgICAgcmVzZXJ2ZWQxOjM7CisKKwl1OCAgICAgICAgIHBhZ2VfY29kZTo2OworCXU4ICAgICAgICAgcGM6MjsJCS8qIHBhZ2UgY29udHJvbCAqLworI2VuZGlmCisJdTggICAgICAgICByZXNlcnZlZDNbNF07CisJdTggICAgICAgICBhbGxvY19sZW5fbXNiOworCXU4ICAgICAgICAgYWxsb2NfbGVuX2xzYjsKKwl1OCAgICAgICAgIGNvbnRyb2w7Cit9OworCisjZGVmaW5lIFNDU0lfQ0RCMTBfR0VUX0FMKGNkYikgIAkJCQkJXAorICAgICgoY2RiKS0+YWxsb2NfbGVuX21zYiA8PCA4IHwgKGNkYiktPmFsbG9jX2xlbl9sc2IpCisKKyNkZWZpbmUgU0NTSV9DREIxMF9TRVRfQUwoY2RiLCBhbCkgeyAgICAgIFwKKyAgICAoY2RiKS0+YWxsb2NfbGVuX21zYiA9IGFsID4+IDg7ICAgICAgIAkJCQlcCisgICAgKGNkYiktPmFsbG9jX2xlbl9sc2IgPSBhbCAmIDB4RkY7ICAgICAJCQkJXAorfQorCisjZGVmaW5lIFNDU0lfQ0RCNl9HRVRfQUwoY2RiKSAoKGNkYiktPmFsbG9jX2xlbikKKworI2RlZmluZSBTQ1NJX0NEQjZfU0VUX0FMKGNkYiwgYWwpIHsgICAgICBcCisgICAgKGNkYiktPmFsbG9jX2xlbiA9IGFsOyAgICAgICAgIAkJCQkJXAorfQorCisvKgorICogcGFnZSBjb250cm9sIGZpZWxkIHZhbHVlcworICovCisjZGVmaW5lIFNDU0lfUENfQ1VSUkVOVF9WQUxVRVMgICAgICAgMHgwCisjZGVmaW5lIFNDU0lfUENfQ0hBTkdFQUJMRV9WQUxVRVMgICAgMHgxCisjZGVmaW5lIFNDU0lfUENfREVGQVVMVF9WQUxVRVMgICAgICAgMHgyCisjZGVmaW5lIFNDU0lfUENfU0FWRURfVkFMVUVTICAgICAgICAgMHgzCisKKy8qCisgKiBTQ1NJIG1vZGUgcGFnZSBjb2RlcworICovCisjZGVmaW5lIFNDU0lfTVBfVkVORE9SX1NQRUMgICAgIDB4MDAKKyNkZWZpbmUgU0NTSV9NUF9ESVNDX1JFQ04gICAgICAgMHgwMgkvKiBkaXNjb25uZWN0LXJlY29ubmVjdCBwYWdlICovCisjZGVmaW5lIFNDU0lfTVBfRk9STUFUX0RFVklDRSAgIDB4MDMKKyNkZWZpbmUgU0NTSV9NUF9SREcgICAgICAgICAgICAgMHgwNAkvKiByaWdpZCBkaXNrIGdlb21ldHJ5IHBhZ2UgKi8KKyNkZWZpbmUgU0NTSV9NUF9GRFAgICAgICAgICAgICAgMHgwNQkvKiBmbGV4aWJsZSBkaXNrIHBhZ2UgKi8KKyNkZWZpbmUgU0NTSV9NUF9DQUNISU5HICAgICAgICAgMHgwOAkvKiBjYWNoaW5nIHBhZ2UgKi8KKyNkZWZpbmUgU0NTSV9NUF9DT05UUk9MICAgICAgICAgMHgwQQkvKiBjb250cm9sIG1vZGUgcGFnZSAqLworI2RlZmluZSBTQ1NJX01QX01FRF9UWVBFU19TVVAgICAweDBCCS8qIG1lZGl1bSB0eXBlcyBzdXBwb3J0ZWQgcGFnZSAqLworI2RlZmluZSBTQ1NJX01QX0lORk9fRVhDUF9DTlRMICAweDFDCS8qIGluZm9ybWF0aW9uYWwgZXhjZXB0aW9uIGNvbnRyb2wgKi8KKyNkZWZpbmUgU0NTSV9NUF9BTEwgICAgICAgICAgICAgMHgzRgkvKiByZXR1cm4gYWxsIHBhZ2VzIC0gbW9kZSBzZW5zZSBvbmx5ICovCisKKy8qCisgKiBtb2RlIHBhcmFtZXRlciBoZWFkZXIKKyAqLworc3RydWN0IHNjc2lfbW9kZV9wYXJhbV9oZWFkZXI2X3N7CisJdTggICAgICAgICBtb2RlX2RhdGFsZW47CisJdTggICAgICAgICBtZWRpdW1fdHlwZTsKKworCS8qCisJICogZGV2aWNlIHNwZWNpZmljIHBhcmFtZXRlcnMgZXhwYW5kZWQgZm9yIGRpcmVjdCBhY2Nlc3MgZGV2aWNlcworCSAqLworI2lmZGVmIF9fQklHRU5ESUFOCisJdTMyICAgICAgICB3cDoxOwkJLyogd3JpdGUgcHJvdGVjdGVkICovCisJdTMyICAgICAgICByZXNlcnZlZDE6MjsKKwl1MzIgICAgICAgIGRwb2Z1YToxOwkvKiBkaXNhYmxlIHBhZ2Ugb3V0ICsgZm9yY2UgdW5pdCBhY2Nlc3MKKwkJCQkJICovCisJdTMyICAgICAgICByZXNlcnZlZDI6NDsKKyNlbHNlCisJdTMyICAgICAgICByZXNlcnZlZDI6NDsKKwl1MzIgICAgICAgIGRwb2Z1YToxOwkvKiBkaXNhYmxlIHBhZ2Ugb3V0ICsgZm9yY2UgdW5pdCBhY2Nlc3MKKwkJCQkJICovCisJdTMyICAgICAgICByZXNlcnZlZDE6MjsKKwl1MzIgICAgICAgIHdwOjE7CQkvKiB3cml0ZSBwcm90ZWN0ZWQgKi8KKyNlbmRpZgorCisJdTggICAgICAgICBibG9ja19kZXNjbGVuOworfTsKKworc3RydWN0IHNjc2lfbW9kZV9wYXJhbV9oZWFkZXIxMF9zeworCXUzMiAgICAgICAgbW9kZV9kYXRhbGVuOjE2OworCXUzMiAgICAgICAgbWVkaXVtX3R5cGU6ODsKKworCS8qCisJICogZGV2aWNlIHNwZWNpZmljIHBhcmFtZXRlcnMgZXhwYW5kZWQgZm9yIGRpcmVjdCBhY2Nlc3MgZGV2aWNlcworCSAqLworI2lmZGVmIF9fQklHRU5ESUFOCisJdTMyICAgICAgICB3cDoxOwkJLyogd3JpdGUgcHJvdGVjdGVkICovCisJdTMyICAgICAgICByZXNlcnZlZDE6MjsKKwl1MzIgICAgICAgIGRwb2Z1YToxOwkvKiBkaXNhYmxlIHBhZ2Ugb3V0ICsgZm9yY2UgdW5pdCBhY2Nlc3MKKwkJCQkJICovCisJdTMyICAgICAgICByZXNlcnZlZDI6NDsKKyNlbHNlCisJdTMyICAgICAgICByZXNlcnZlZDI6NDsKKwl1MzIgICAgICAgIGRwb2Z1YToxOwkvKiBkaXNhYmxlIHBhZ2Ugb3V0ICsgZm9yY2UgdW5pdCBhY2Nlc3MKKwkJCQkJICovCisJdTMyICAgICAgICByZXNlcnZlZDE6MjsKKwl1MzIgICAgICAgIHdwOjE7CQkvKiB3cml0ZSBwcm90ZWN0ZWQgKi8KKyNlbmRpZgorCisjaWZkZWYgX19CSUdFTkRJQU4KKwl1MzIgICAgICAgIHJlc2VydmVkMzo3OworCXUzMiAgICAgICAgbG9uZ2xiYToxOworI2Vsc2UKKwl1MzIgICAgICAgIGxvbmdsYmE6MTsKKwl1MzIgICAgICAgIHJlc2VydmVkMzo3OworI2VuZGlmCisJdTMyICAgICAgICByZXNlcnZlZDQ6ODsKKwl1MzIgICAgICAgIGJsb2NrX2Rlc2NsZW46MTY7Cit9OworCisvKgorICogbW9kZSBwYXJhbWV0ZXIgYmxvY2sgZGVzY3JpcHRvcgorICovCitzdHJ1Y3Qgc2NzaV9tb2RlX3BhcmFtX2Rlc2Nfc3sKKwl1MzIgICAgICAgIG5ibGtzOworCXUzMiAgICAgICAgZGVuc2l0eV9jb2RlOjg7CisJdTMyICAgICAgICBibG9ja19sZW5ndGg6MjQ7Cit9OworCisvKgorICogRGlzY29ubmVjdC1yZWNvbm5lY3QgbW9kZSBwYWdlIGZvcm1hdAorICovCitzdHJ1Y3Qgc2NzaV9tcF9kaXNjX3JlY25fc3sKKyNpZmRlZiBfX0JJR0VORElBTgorCXU4ICAgICAgICAgcHM6MTsKKwl1OCAgICAgICAgIHJlc2VydmVkMToxOworCXU4ICAgICAgICAgcGFnZV9jb2RlOjY7CisjZWxzZQorCXU4ICAgICAgICAgcGFnZV9jb2RlOjY7CisJdTggICAgICAgICByZXNlcnZlZDE6MTsKKwl1OCAgICAgICAgIHBzOjE7CisjZW5kaWYKKwl1OCAgICAgICAgIHBhZ2VfbGVuOworCXU4ICAgICAgICAgYnVmX2Z1bGxfcmF0aW87CisJdTggICAgICAgICBidWZfZW1wdHlfcmF0aW87CisKKwl1OCAgICAgICAgIGJpbF9tc2I7CS8qIGJ1cyBpbmFjdGl2aXR5IGxpbWl0IC1NU0IgKi8KKwl1OCAgICAgICAgIGJpbF9sc2I7CS8qIGJ1cyBpbmFjdGl2aXR5IGxpbWl0IC1MU0IgKi8KKworCXU4ICAgICAgICAgZHRsX21zYjsJLyogZGlzY29ubmVjdCB0aW1lIGxpbWl0IC0gTVNCICovCisJdTggICAgICAgICBkdGxfbHNiOwkvKiBkaXNjb25uZWN0IHRpbWUgbGltaXQgLSBMU0IgKi8KKworCXU4ICAgICAgICAgY3RsX21zYjsJLyogY29ubmVjdCB0aW1lIGxpbWl0IC0gTVNCICovCisJdTggICAgICAgICBjdGxfbHNiOwkvKiBjb25uZWN0IHRpbWUgbGltaXQgLSBMU0IgKi8KKworCXU4ICAgICAgICAgbWF4X2J1cnN0X2xlbl9tc2I7CisJdTggICAgICAgICBtYXhfYnVyc3RfbGVuX2xzYjsKKyNpZmRlZiBfX0JJR0VORElBTgorCXU4ICAgICAgICAgZW1kcDoxOwkvKiBlbmFibGUgbW9kaWZ5IGRhdGEgcG9pbnRlcnMgKi8KKwl1OCAgICAgICAgIGZhOjM7CS8qIGZhaXIgYXJiaXRyYXRpb24gKi8KKwl1OCAgICAgICAgIGRpbW06MTsJLyogZGlzY29ubmVjdCBpbW1lZGlhdGUgKi8KKwl1OCAgICAgICAgIGR0ZGM6MzsJLyogZGF0YSB0cmFuc2ZlciBkaXNjb25uZWN0IGNvbnRyb2wgKi8KKyNlbHNlCisJdTggICAgICAgICBkdGRjOjM7CS8qIGRhdGEgdHJhbnNmZXIgZGlzY29ubmVjdCBjb250cm9sICovCisJdTggICAgICAgICBkaW1tOjE7CS8qIGRpc2Nvbm5lY3QgaW1tZWRpYXRlICovCisJdTggICAgICAgICBmYTozOwkvKiBmYWlyIGFyYml0cmF0aW9uICovCisJdTggICAgICAgICBlbWRwOjE7CS8qIGVuYWJsZSBtb2RpZnkgZGF0YSBwb2ludGVycyAqLworI2VuZGlmCisKKwl1OCAgICAgICAgIHJlc2VydmVkMzsKKworCXU4ICAgICAgICAgZmlyc3RfYnVyc3RfbGVuX21zYjsKKwl1OCAgICAgICAgIGZpcnN0X2J1cnN0X2xlbl9sc2I7Cit9OworCisvKgorICogU0NTSSBmb3JtYXQgZGV2aWNlIG1vZGUgcGFnZQorICovCitzdHJ1Y3Qgc2NzaV9tcF9mb3JtYXRfZGV2aWNlX3N7CisjaWZkZWYgX19CSUdFTkRJQU4KKwl1MzIgICAgICAgIHBzOjE7CisJdTMyICAgICAgICByZXNlcnZlZDE6MTsKKwl1MzIgICAgICAgIHBhZ2VfY29kZTo2OworI2Vsc2UKKwl1MzIgICAgICAgIHBhZ2VfY29kZTo2OworCXUzMiAgICAgICAgcmVzZXJ2ZWQxOjE7CisJdTMyICAgICAgICBwczoxOworI2VuZGlmCisJdTMyICAgICAgICBwYWdlX2xlbjo4OworCXUzMiAgICAgICAgdHJhY2tzX3Blcl96b25lOjE2OworCisJdTMyICAgICAgICBhX3NlY19wZXJfem9uZToxNjsKKwl1MzIgICAgICAgIGFfdHJhY2tzX3Blcl96b25lOjE2OworCisJdTMyICAgICAgICBhX3RyYWNrc19wZXJfbHVuOjE2OwkvKiBhbHRlcm5hdGUgdHJhY2tzL2x1bi1NU0IgKi8KKwl1MzIgICAgICAgIHNlY19wZXJfdHJhY2s6MTY7CS8qIHNlY3RvcnMvdHJhY2stTVNCICovCisKKwl1MzIgICAgICAgIGJ5dGVzX3Blcl9zZWN0b3I6MTY7CisJdTMyICAgICAgICBpbnRlcmxlYXZlOjE2OworCisJdTMyICAgICAgICB0c2Y6MTY7CQkJLyogdHJhY2sgc2tldyBmYWN0b3ItTVNCICovCisJdTMyICAgICAgICBjc2Y6MTY7CQkJLyogY3lsaW5kZXIgc2tldyBmYWN0b3ItTVNCICovCisKKyNpZmRlZiBfX0JJR0VORElBTgorCXUzMiAgICAgICAgc3NlYzoxOwkvKiBzb2Z0IHNlY3RvciBmb3JtYXR0aW5nICovCisJdTMyICAgICAgICBoc2VjOjE7CS8qIGhhcmQgc2VjdG9yIGZvcm1hdHRpbmcgKi8KKwl1MzIgICAgICAgIHJtYjoxOwkvKiByZW1vdmFibGUgbWVkaWEgKi8KKwl1MzIgICAgICAgIHN1cmY6MTsJLyogc3VyZmFjZSAqLworCXUzMiAgICAgICAgcmVzZXJ2ZWQyOjQ7CisjZWxzZQorCXUzMiAgICAgICAgcmVzZXJ2ZWQyOjQ7CisJdTMyICAgICAgICBzdXJmOjE7CS8qIHN1cmZhY2UgKi8KKwl1MzIgICAgICAgIHJtYjoxOwkvKiByZW1vdmFibGUgbWVkaWEgKi8KKwl1MzIgICAgICAgIGhzZWM6MTsJLyogaGFyZCBzZWN0b3IgZm9ybWF0dGluZyAqLworCXUzMiAgICAgICAgc3NlYzoxOwkvKiBzb2Z0IHNlY3RvciBmb3JtYXR0aW5nICovCisjZW5kaWYKKwl1MzIgICAgICAgIHJlc2VydmVkMzoyNDsKK307CisKKy8qCisgKiBTQ1NJIHJpZ2lkIGRpc2sgZGV2aWNlIGdlb21ldHJ5IHBhZ2UKKyAqLworc3RydWN0IHNjc2lfbXBfcmlnaWRfZGV2aWNlX2dlb21ldHJ5X3N7CisjaWZkZWYgX19CSUdFTkRJQU4KKwl1MzIgICAgICAgIHBzOjE7CisJdTMyICAgICAgICByZXNlcnZlZDE6MTsKKwl1MzIgICAgICAgIHBhZ2VfY29kZTo2OworI2Vsc2UKKwl1MzIgICAgICAgIHBhZ2VfY29kZTo2OworCXUzMiAgICAgICAgcmVzZXJ2ZWQxOjE7CisJdTMyICAgICAgICBwczoxOworI2VuZGlmCisJdTMyICAgICAgICBwYWdlX2xlbjo4OworCXUzMiAgICAgICAgbnVtX2N5bGluZGVyczA6ODsKKwl1MzIgICAgICAgIG51bV9jeWxpbmRlcnMxOjg7CisKKwl1MzIgICAgICAgIG51bV9jeWxpbmRlcnMyOjg7CisJdTMyICAgICAgICBudW1faGVhZHM6ODsKKwl1MzIgICAgICAgIHNjd3AwOjg7CisJdTMyICAgICAgICBzY3dwMTo4OworCisJdTMyICAgICAgICBzY3dwMjo4OworCXUzMiAgICAgICAgc2Nyd2MwOjg7CisJdTMyICAgICAgICBzY3J3YzE6ODsKKwl1MzIgICAgICAgIHNjcndjMjo4OworCisJdTMyICAgICAgICBkc3I6MTY7CisJdTMyICAgICAgICBsc2N5bDA6ODsKKwl1MzIgICAgICAgIGxzY3lsMTo4OworCisJdTMyICAgICAgICBsc2N5bDI6ODsKKyNpZmRlZiBfX0JJR0VORElBTgorCXUzMiAgICAgICAgcmVzZXJ2ZWQyOjY7CisJdTMyICAgICAgICBycGw6MjsJLyogcm90YXRpb25hbCBwb3NpdGlvbiBsb2NraW5nICovCisjZWxzZQorCXUzMiAgICAgICAgcnBsOjI7CS8qIHJvdGF0aW9uYWwgcG9zaXRpb24gbG9ja2luZyAqLworCXUzMiAgICAgICAgcmVzZXJ2ZWQyOjY7CisjZW5kaWYKKwl1MzIgICAgICAgIHJvdF9vZmY6ODsKKwl1MzIgICAgICAgIHJlc2VydmVkMzo4OworCisJdTMyICAgICAgICBtZWRfcm90X3JhdGU6MTY7CisJdTMyICAgICAgICByZXNlcnZlZDQ6MTY7Cit9OworCisvKgorICogU0NTSSBjYWNoaW5nIG1vZGUgcGFnZQorICovCitzdHJ1Y3Qgc2NzaV9tcF9jYWNoaW5nX3N7CisjaWZkZWYgX19CSUdFTkRJQU4KKwl1OCAgICAgICAgIHBzOjE7CisJdTggICAgICAgICByZXMxOjE7CisJdTggICAgICAgICBwYWdlX2NvZGU6NjsKKyNlbHNlCisJdTggICAgICAgICBwYWdlX2NvZGU6NjsKKwl1OCAgICAgICAgIHJlczE6MTsKKwl1OCAgICAgICAgIHBzOjE7CisjZW5kaWYKKwl1OCAgICAgICAgIHBhZ2VfbGVuOworI2lmZGVmIF9fQklHRU5ESUFOCisJdTggICAgICAgICBpYzoxOwkvKiBpbml0aWF0b3IgY29udHJvbCAqLworCXU4ICAgICAgICAgYWJwZjoxOwkvKiBhYm9ydCBwcmUtZmV0Y2ggKi8KKwl1OCAgICAgICAgIGNhcDoxOwkvKiBjYWNoaW5nIGFuYWx5c2lzIHBlcm1pdHRlZCAqLworCXU4ICAgICAgICAgZGlzYzoxOwkvKiBkaXNjb250aW51aXR5ICovCisJdTggICAgICAgICBzaXplOjE7CS8qIHNpemUgZW5hYmxlICovCisJdTggICAgICAgICB3Y2U6MTsJLyogd3JpdGUgY2FjaGUgZW5hYmxlICovCisJdTggICAgICAgICBtZjoxOwkvKiBtdWx0aXBsaWNhdGlvbiBmYWN0b3IgKi8KKwl1OCAgICAgICAgIHJjZDoxOwkvKiByZWFkIGNhY2hlIGRpc2FibGUgKi8KKworCXU4ICAgICAgICAgZHJycDo0OwkvKiBkZW1hbmQgcmVhZCByZXRlbnRpb24gcHJpb3JpdHkgKi8KKwl1OCAgICAgICAgIHdycDo0OwkvKiB3cml0ZSByZXRlbnRpb24gcHJpb3JpdHkgKi8KKyNlbHNlCisJdTggICAgICAgICByY2Q6MTsJLyogcmVhZCBjYWNoZSBkaXNhYmxlICovCisJdTggICAgICAgICBtZjoxOwkvKiBtdWx0aXBsaWNhdGlvbiBmYWN0b3IgKi8KKwl1OCAgICAgICAgIHdjZToxOwkvKiB3cml0ZSBjYWNoZSBlbmFibGUgKi8KKwl1OCAgICAgICAgIHNpemU6MTsJLyogc2l6ZSBlbmFibGUgKi8KKwl1OCAgICAgICAgIGRpc2M6MTsJLyogZGlzY29udGludWl0eSAqLworCXU4ICAgICAgICAgY2FwOjE7CS8qIGNhY2hpbmcgYW5hbHlzaXMgcGVybWl0dGVkICovCisJdTggICAgICAgICBhYnBmOjE7CS8qIGFib3J0IHByZS1mZXRjaCAqLworCXU4ICAgICAgICAgaWM6MTsJLyogaW5pdGlhdG9yIGNvbnRyb2wgKi8KKworCXU4ICAgICAgICAgd3JwOjQ7CS8qIHdyaXRlIHJldGVudGlvbiBwcmlvcml0eSAqLworCXU4ICAgICAgICAgZHJycDo0OwkvKiBkZW1hbmQgcmVhZCByZXRlbnRpb24gcHJpb3JpdHkgKi8KKyNlbmRpZgorCXU4ICAgICAgICAgZHB0bFsyXTsvKiBkaXNhYmxlIHByZS1mZXRjaCB0cmFuc2ZlciBsZW5ndGggKi8KKwl1OCAgICAgICAgIG1pbl9wcmVmZXRjaFsyXTsKKwl1OCAgICAgICAgIG1heF9wcmVmZXRjaFsyXTsKKwl1OCAgICAgICAgIG1heF9wcmVmZXRjaF9saW1pdFsyXTsKKyNpZmRlZiBfX0JJR0VORElBTgorCXU4ICAgICAgICAgZnN3OjE7CS8qIGZvcmNlIHNlcXVlbnRpYWwgd3JpdGUgKi8KKwl1OCAgICAgICAgIGxiY3NzOjE7LyogbG9naWNhbCBibG9jayBjYWNoZSBzZWdtZW50IHNpemUgKi8KKwl1OCAgICAgICAgIGRyYToxOwkvKiBkaXNhYmxlIHJlYWQgYWhlYWQgKi8KKwl1OCAgICAgICAgIHZzOjI7CS8qIHZlbmRvciBzcGVjaWZpYyAqLworCXU4ICAgICAgICAgcmVzMjozOworI2Vsc2UKKwl1OCAgICAgICAgIHJlczI6MzsKKwl1OCAgICAgICAgIHZzOjI7CS8qIHZlbmRvciBzcGVjaWZpYyAqLworCXU4ICAgICAgICAgZHJhOjE7CS8qIGRpc2FibGUgcmVhZCBhaGVhZCAqLworCXU4ICAgICAgICAgbGJjc3M6MTsvKiBsb2dpY2FsIGJsb2NrIGNhY2hlIHNlZ21lbnQgc2l6ZSAqLworCXU4ICAgICAgICAgZnN3OjE7CS8qIGZvcmNlIHNlcXVlbnRpYWwgd3JpdGUgKi8KKyNlbmRpZgorCXU4ICAgICAgICAgbnVtX2NhY2hlX3NlZ3M7CisKKwl1OCAgICAgICAgIGNhY2hlX3NlZ19zaXplWzJdOworCXU4ICAgICAgICAgcmVzMzsKKwl1OCAgICAgICAgIG5vbl9jYWNoZV9zZWdfc2l6ZVszXTsKK307CisKKy8qCisgKiBTQ1NJIGNvbnRyb2wgbW9kZSBwYWdlCisgKi8KK3N0cnVjdCBzY3NpX21wX2NvbnRyb2xfcGFnZV9zeworI2lmZGVmIF9fQklHRU5ESUFOCit1OCAgICAgICAgIHBzOjE7Cit1OCAgICAgICAgIHJlc2VydmVkMToxOwordTggICAgICAgICBwYWdlX2NvZGU6NjsKKyNlbHNlCit1OCAgICAgICAgIHBhZ2VfY29kZTo2OwordTggICAgICAgICByZXNlcnZlZDE6MTsKK3U4ICAgICAgICAgcHM6MTsKKyNlbmRpZgorCXU4ICAgICAgICAgcGFnZV9sZW47CisjaWZkZWYgX19CSUdFTkRJQU4KKwl1OCAgICAgICAgIHRzdDozOwkJLyogdGFzayBzZXQgdHlwZSAqLworCXU4ICAgICAgICAgcmVzZXJ2ZWQzOjM7CisJdTggICAgICAgICBnbHRzZDoxOwkvKiBnbG9iYWwgbG9nZ2luZyB0YXJnZXQgc2F2ZSBkaXNhYmxlICovCisJdTggICAgICAgICBybGVjOjE7CQkvKiByZXBvcnQgbG9nIGV4Y2VwdGlvbiBjb25kaXRpb24gKi8KKworCXU4ICAgICAgICAgcWFsZ29fbW9kOjQ7CS8qIHF1ZXVlIGFsb2dvcml0aG0gbW9kaWZpZXIgKi8KKwl1OCAgICAgICAgIHJlc2VydmVkNDoxOworCXU4ICAgICAgICAgcWVycjoyOwkJLyogcXVldWUgZXJyb3IgbWFuYWdlbWVudCAqLworCXU4ICAgICAgICAgZHF1ZToxOwkJLyogZGlzYWJsZSBxdWV1aW5nICovCisKKwl1OCAgICAgICAgIHJlc2VydmVkNToxOworCXU4ICAgICAgICAgcmFjOjE7CQkvKiByZXBvcnQgYSBjaGVjayAqLworCXU4ICAgICAgICAgcmVzZXJ2ZWQ2OjI7CisJdTggICAgICAgICBzd3A6MTsJCS8qIHNvZnR3YXJlIHdyaXRlIHByb3RlY3QgKi8KKwl1OCAgICAgICAgIHJhZXJwOjE7CS8qIHJlYWR5IEFFUiBwZXJtaXNzaW9uICovCisJdTggICAgICAgICB1YWFlcnA6MTsJLyogdW5pdCBhdHRlbnN0aW9uIEFFUiBwZXJtaXNzaW9uICovCisJdTggICAgICAgICBlYWVycDoxOwkvKiBlcnJvciBBRVIgcGVybWlzc2lvbiAqLworCisJdTggICAgICAgICByZXNlcnZlZDc6NTsKKwl1OCAgICAgICAgIGF1dG9sb2FkX21vZDozOworI2Vsc2UKKwl1OCAgICAgICAgIHJsZWM6MTsJCS8qIHJlcG9ydCBsb2cgZXhjZXB0aW9uIGNvbmRpdGlvbiAqLworCXU4ICAgICAgICAgZ2x0c2Q6MTsJLyogZ2xvYmFsIGxvZ2dpbmcgdGFyZ2V0IHNhdmUgZGlzYWJsZSAqLworCXU4ICAgICAgICAgcmVzZXJ2ZWQzOjM7CisJdTggICAgICAgICB0c3Q6MzsJCS8qIHRhc2sgc2V0IHR5cGUgKi8KKworCXU4ICAgICAgICAgZHF1ZToxOwkJLyogZGlzYWJsZSBxdWV1aW5nICovCisJdTggICAgICAgICBxZXJyOjI7CQkvKiBxdWV1ZSBlcnJvciBtYW5hZ2VtZW50ICovCisJdTggICAgICAgICByZXNlcnZlZDQ6MTsKKwl1OCAgICAgICAgIHFhbGdvX21vZDo0OwkvKiBxdWV1ZSBhbG9nb3JpdGhtIG1vZGlmaWVyICovCisKKwl1OCAgICAgICAgIGVhZXJwOjE7CS8qIGVycm9yIEFFUiBwZXJtaXNzaW9uICovCisJdTggICAgICAgICB1YWFlcnA6MTsJLyogdW5pdCBhdHRlbnN0aW9uIEFFUiBwZXJtaXNzaW9uICovCisJdTggICAgICAgICByYWVycDoxOwkvKiByZWFkeSBBRVIgcGVybWlzc2lvbiAqLworCXU4ICAgICAgICAgc3dwOjE7CQkvKiBzb2Z0d2FyZSB3cml0ZSBwcm90ZWN0ICovCisJdTggICAgICAgICByZXNlcnZlZDY6MjsKKwl1OCAgICAgICAgIHJhYzoxOwkJLyogcmVwb3J0IGEgY2hlY2sgKi8KKwl1OCAgICAgICAgIHJlc2VydmVkNToxOworCisJdTggICAgICAgICBhdXRvbG9hZF9tb2Q6MzsKKwl1OCAgICAgICAgIHJlc2VydmVkNzo1OworI2VuZGlmCisJdTggICAgICAgICByYWhwX21zYjsJLyogcmVhZHkgQUVSIGhvbGRvZmYgcGVyaW9kIC0gTVNCICovCisJdTggICAgICAgICByYWhwX2xzYjsJLyogcmVhZHkgQUVSIGhvbGRvZmYgcGVyaW9kIC0gTFNCICovCisKKwl1OCAgICAgICAgIGJ1c3lfdGltZW91dF9wZXJpb2RfbXNiOworCXU4ICAgICAgICAgYnVzeV90aW1lb3V0X3BlcmlvZF9sc2I7CisKKwl1OCAgICAgICAgIGV4dF9zZWxmdGVzdF9jb21wbF90aW1lX21zYjsKKwl1OCAgICAgICAgIGV4dF9zZWxmdGVzdF9jb21wbF90aW1lX2xzYjsKK307CisKKy8qCisgKiBTQ1NJIG1lZGl1bSB0eXBlcyBzdXBwb3J0ZWQgbW9kZSBwYWdlCisgKi8KK3N0cnVjdCBzY3NpX21wX21lZGl1bV90eXBlc19zdXBfc3sKKyNpZmRlZiBfX0JJR0VORElBTgorCXU4ICAgICAgICAgcHM6MTsKKwl1OCAgICAgICAgIHJlc2VydmVkMToxOworCXU4ICAgICAgICAgcGFnZV9jb2RlOjY7CisjZWxzZQorCXU4ICAgICAgICAgcGFnZV9jb2RlOjY7CisJdTggICAgICAgICByZXNlcnZlZDE6MTsKKwl1OCAgICAgICAgIHBzOjE7CisjZW5kaWYKKwl1OCAgICAgICAgIHBhZ2VfbGVuOworCisJdTggICAgICAgICByZXNlcnZlZDNbMl07CisJdTggICAgICAgICBtZWRfdHlwZTFfc3VwOwkvKiBtZWRpdW0gdHlwZSBvbmUgc3VwcG9ydGVkICovCisJdTggICAgICAgICBtZWRfdHlwZTJfc3VwOwkvKiBtZWRpdW0gdHlwZSB0d28gc3VwcG9ydGVkICovCisJdTggICAgICAgICBtZWRfdHlwZTNfc3VwOwkvKiBtZWRpdW0gdHlwZSB0aHJlZSBzdXBwb3J0ZWQgKi8KKwl1OCAgICAgICAgIG1lZF90eXBlNF9zdXA7CS8qIG1lZGl1bSB0eXBlIGZvdXIgc3VwcG9ydGVkICovCit9OworCisvKgorICogU0NTSSBpbmZvcm1hdGlvbmFsIGV4Y2VwdGlvbiBjb250cm9sIG1vZGUgcGFnZQorICovCitzdHJ1Y3Qgc2NzaV9tcF9pbmZvX2V4Y3B0X2NudGxfc3sKKyNpZmRlZiBfX0JJR0VORElBTgorCXU4ICAgICAgICAgcHM6MTsKKwl1OCAgICAgICAgIHJlc2VydmVkMToxOworCXU4ICAgICAgICAgcGFnZV9jb2RlOjY7CisjZWxzZQorCXU4ICAgICAgICAgcGFnZV9jb2RlOjY7CisJdTggICAgICAgICByZXNlcnZlZDE6MTsKKwl1OCAgICAgICAgIHBzOjE7CisjZW5kaWYKKwl1OCAgICAgICAgIHBhZ2VfbGVuOworI2lmZGVmIF9fQklHRU5ESUFOCisJdTggICAgICAgICBwZXJmOjE7CQkvKiBwZXJmb3JtYW5jZSAqLworCXU4ICAgICAgICAgcmVzZXJ2ZWQzOjE7CisJdTggICAgICAgICBlYmY6MTsJCS8qIGVuYWJsZSBiYWNrZ3JvdW5kIGZ1Y250aW9uICovCisJdTggICAgICAgICBld2FzYzoxOwkvKiBlbmFibGUgd2FybmluZyAqLworCXU4ICAgICAgICAgZGV4Y3B0OjE7CS8qIGRpc2FibGUgZXhjZXB0aW9uIGNvbnRyb2wgKi8KKwl1OCAgICAgICAgIHRlc3Q6MTsJCS8qIGVuYWJsZSB0ZXN0IGRldmljZSBmYWlsdXJlCisJCQkJCSAqIG5vdGlmaWNhdGlvbgorCQkJCQkgKi8KKwl1OCAgICAgICAgIHJlc2VydmVkNDoxOworCXU4ICAgICAgICAgbG9nX2Vycm9yOjE7CisKKwl1OCAgICAgICAgIHJlc2VydmVkNTo0OworCXU4ICAgICAgICAgbXJpZTo0OwkJLyogbWV0aG9kIG9mIHJlcG9ydGluZyBpbmZvCisJCQkJCSAqIGV4Y2VwdGlvbnMKKwkJCQkJICovCisjZWxzZQorCXU4ICAgICAgICAgbG9nX2Vycm9yOjE7CisJdTggICAgICAgICByZXNlcnZlZDQ6MTsKKwl1OCAgICAgICAgIHRlc3Q6MTsJCS8qIGVuYWJsZSB0ZXN0IGRldmljZSBmYWlsdXJlCisJCQkJCSAqIG5vdGlmaWNhdGlvbgorCQkJCQkgKi8KKwl1OCAgICAgICAgIGRleGNwdDoxOwkvKiBkaXNhYmxlIGV4Y2VwdGlvbiBjb250cm9sICovCisJdTggICAgICAgICBld2FzYzoxOwkvKiBlbmFibGUgd2FybmluZyAqLworCXU4ICAgICAgICAgZWJmOjE7CQkvKiBlbmFibGUgYmFja2dyb3VuZCBmdWNudGlvbiAqLworCXU4ICAgICAgICAgcmVzZXJ2ZWQzOjE7CisJdTggICAgICAgICBwZXJmOjE7CQkvKiBwZXJmb3JtYW5jZSAqLworCisJdTggICAgICAgICBtcmllOjQ7CQkvKiBtZXRob2Qgb2YgcmVwb3J0aW5nIGluZm8KKwkJCQkJICogZXhjZXB0aW9ucworCQkJCQkgKi8KKwl1OCAgICAgICAgIHJlc2VydmVkNTo0OworI2VuZGlmCisJdTggICAgICAgICBpbnRlcnZhbF90aW1lcl9tc2I7CisJdTggICAgICAgICBpbnRlcnZhbF90aW1lcl9sc2I7CisKKwl1OCAgICAgICAgIHJlcG9ydF9jb3VudF9tc2I7CisJdTggICAgICAgICByZXBvcnRfY291bnRfbHNiOworfTsKKworLyoKKyAqIE1ldGhvZHMgb2YgcmVwb3J0aW5nIGluZm9ybWF0aW9uYWwgZXhjZXB0aW9ucworICovCisjZGVmaW5lIFNDU0lfTVBfSUVDX05PX1JFUE9SVCAgICAgICAweDAJLyogbm8gcmVwb3J0aW5nIG9mIGV4Y2VwdGlvbnMgKi8KKyNkZWZpbmUgU0NTSV9NUF9JRUNfQUVSICAgICAgICAgICAgIDB4MQkvKiBhc3luYyBldmVudCByZXBvcnRpbmcgKi8KKyNkZWZpbmUgU0NTSV9NUF9JRUNfVU5JVF9BVFROICAgICAgIDB4MgkvKiBnZW5lcmF0ZSB1bml0IGF0dGVuc3Rpb24gKi8KKyNkZWZpbmUgU0NTSV9NT19JRUNfQ09ORF9SRUNfRVJSICAgIDB4MwkvKiBjb25kaXRpb25hbGx5IGdlbmVyYXRlIHJlY292ZXJlZAorCQkJCQkgKiBlcnJvcgorCQkJCQkgKi8KKyNkZWZpbmUgU0NTSV9NUF9JRUNfVU5DT05EX1JFQ19FUlIgIDB4NAkvKiB1bmNvbmRpdGlvbmFsbHkgZ2VuZXJhdGUgcmVjb3ZlcmVkCisJCQkJCSAqIGVycm9yCisJCQkJCSAqLworI2RlZmluZSBTQ1NJX01QX0lFQ19OT19TRU5TRSAgICAgICAgMHg1CS8qIGdlbmVyYXRlIG5vIHNlbnNlICovCisjZGVmaW5lIFNDU0lfTVBfSUVDX09OX1JFUVVFU1QgICAgICAweDYJLyogb25seSByZXBvcnQgZXhjZXB0aW9ucyBvbiByZXF1ZXN0ICovCisKKy8qCisgKiBTQ1NJIGZsZXhpYmxlIGRpc2sgcGFnZQorICovCitzdHJ1Y3Qgc2NzaV9tcF9mbGV4aWJsZV9kaXNrX3N7CisjaWZkZWYgX19CSUdFTkRJQU4KKwl1OCAgICAgICAgIHBzOjE7CisJdTggICAgICAgICByZXNlcnZlZDE6MTsKKwl1OCAgICAgICAgIHBhZ2VfY29kZTo2OworI2Vsc2UKKwl1OCAgICAgICAgIHBhZ2VfY29kZTo2OworCXU4ICAgICAgICAgcmVzZXJ2ZWQxOjE7CisJdTggICAgICAgICBwczoxOworI2VuZGlmCisJdTggICAgICAgICBwYWdlX2xlbjsKKworCXU4ICAgICAgICAgdHJhbnNmZXJfcmF0ZV9tc2I7CisJdTggICAgICAgICB0cmFuc2Zlcl9yYXRlX2xzYjsKKworCXU4ICAgICAgICAgbnVtX2hlYWRzOworCXU4ICAgICAgICAgbnVtX3NlY3RvcnM7CisKKwl1OCAgICAgICAgIGJ5dGVzX3Blcl9zZWN0b3JfbXNiOworCXU4ICAgICAgICAgYnl0ZXNfcGVyX3NlY3Rvcl9sc2I7CisKKwl1OCAgICAgICAgIG51bV9jeWxpbmRlcnNfbXNiOworCXU4ICAgICAgICAgbnVtX2N5bGluZGVyc19sc2I7CisKKwl1OCAgICAgICAgIHNjX3dwY19tc2I7CS8qIHN0YXJ0aW5nIGN5bGluZGVyLXdyaXRlCisJCQkJCSAqIHByZWNvbXBlbnNhdGlvbiBtc2IKKwkJCQkJICovCisJdTggICAgICAgICBzY193cGNfbHNiOwkvKiBzdGFydGluZyBjeWxpbmRlci13cml0ZQorCQkJCQkgKiBwcmVjb21wZW5zYXRpb24gbHNiCisJCQkJCSAqLworCXU4ICAgICAgICAgc2NfcndjX21zYjsJLyogc3RhcnRpbmcgY3lsaW5kZXItcmVkdWNlZCB3cml0ZQorCQkJCQkgKiBjdXJyZW50IG1zYgorCQkJCQkgKi8KKwl1OCAgICAgICAgIHNjX3J3Y19sc2I7CS8qIHN0YXJ0aW5nIGN5bGluZGVyLXJlZHVjZWQgd3JpdGUKKwkJCQkJICogY3VycmVudCBsc2IKKwkJCQkJICovCisKKwl1OCAgICAgICAgIGRldl9zdGVwX3JhdGVfbXNiOworCXU4ICAgICAgICAgZGV2X3N0ZXBfcmF0ZV9sc2I7CisKKwl1OCAgICAgICAgIGRldl9zdGVwX3B1bHNlX3dpZHRoOworCisJdTggICAgICAgICBoZWFkX3NkX21zYjsJLyogaGVhZCBzZXR0bGUgZGVsYXkgbXNiICovCisJdTggICAgICAgICBoZWFkX3NkX2xzYjsJLyogaGVhZCBzZXR0bGUgZGVsYXkgbHNiICovCisKKwl1OCAgICAgICAgIG1vdG9yX29uX2RlbGF5OworCXU4ICAgICAgICAgbW90b3Jfb2ZmX2RlbGF5OworI2lmZGVmIF9fQklHRU5ESUFOCisJdTggICAgICAgICB0cmR5OjE7CQkvKiB0cnVlIHJlYWR5IGJpdCAqLworCXU4ICAgICAgICAgc3NuOjE7CQkvKiBzdGFydCBzZWN0b3IgbnVtYmVyIGJpdCAqLworCXU4ICAgICAgICAgbW86MTsJCS8qIG1vdG9yIG9uIGJpdCAqLworCXU4ICAgICAgICAgcmVzZXJ2ZWQzOjU7CisKKwl1OCAgICAgICAgIHJlc2VydmVkNDo0OworCXU4ICAgICAgICAgc3BjOjQ7CQkvKiBzdGVwIHB1bHNlIHBlciBjeWxpbmRlciAqLworI2Vsc2UKKwl1OCAgICAgICAgIHJlc2VydmVkMzo1OworCXU4ICAgICAgICAgbW86MTsJCS8qIG1vdG9yIG9uIGJpdCAqLworCXU4ICAgICAgICAgc3NuOjE7CQkvKiBzdGFydCBzZWN0b3IgbnVtYmVyIGJpdCAqLworCXU4ICAgICAgICAgdHJkeToxOwkJLyogdHJ1ZSByZWFkeSBiaXQgKi8KKworCXU4ICAgICAgICAgc3BjOjQ7CQkvKiBzdGVwIHB1bHNlIHBlciBjeWxpbmRlciAqLworCXU4ICAgICAgICAgcmVzZXJ2ZWQ0OjQ7CisjZW5kaWYKKwl1OCAgICAgICAgIHdyaXRlX2NvbXA7CisJdTggICAgICAgICBoZWFkX2xvYWRfZGVsYXk7CisJdTggICAgICAgICBoZWFkX3VubG9hZF9kZWxheTsKKyNpZmRlZiBfX0JJR0VORElBTgorCXU4ICAgICAgICAgcGluMzQ6NDsJLyogcGluMzQgdXNhZ2UgKi8KKwl1OCAgICAgICAgIHBpbjI6NDsJCS8qIHBpbjIgdXNhZ2UgKi8KKworCXU4ICAgICAgICAgcGluNDo0OwkJLyogcGluNCB1c2FnZSAqLworCXU4ICAgICAgICAgcGluMTo0OwkJLyogcGluMSB1c2FnZSAqLworI2Vsc2UKKwl1OCAgICAgICAgIHBpbjI6NDsJCS8qIHBpbjIgdXNhZ2UgKi8KKwl1OCAgICAgICAgIHBpbjM0OjQ7CS8qIHBpbjM0IHVzYWdlICovCisKKwl1OCAgICAgICAgIHBpbjE6NDsJCS8qIHBpbjEgdXNhZ2UgKi8KKwl1OCAgICAgICAgIHBpbjQ6NDsJCS8qIHBpbjQgdXNhZ2UgKi8KKyNlbmRpZgorCXU4ICAgICAgICAgbWVkX3JvdF9yYXRlX21zYjsKKwl1OCAgICAgICAgIG1lZF9yb3RfcmF0ZV9sc2I7CisKKwl1OCAgICAgICAgIHJlc2VydmVkNVsyXTsKK307CisKK3N0cnVjdCBzY3NpX21vZGVfcGFnZV9mb3JtYXRfZGF0YTZfc3sKKwlzdHJ1Y3Qgc2NzaV9tb2RlX3BhcmFtX2hlYWRlcjZfcyBtcGg7CS8qIG1vZGUgcGFnZSBoZWFkZXIgKi8KKwlzdHJ1Y3Qgc2NzaV9tb2RlX3BhcmFtX2Rlc2NfcyBkZXNjOwkvKiBibG9jayBkZXNjcmlwdG9yICovCisJc3RydWN0IHNjc2lfbXBfZm9ybWF0X2RldmljZV9zIGZvcm1hdDsJLyogZm9ybWF0IGRldmljZSBkYXRhICovCit9OworCitzdHJ1Y3Qgc2NzaV9tb2RlX3BhZ2VfZm9ybWF0X2RhdGExMF9zeworCXN0cnVjdCBzY3NpX21vZGVfcGFyYW1faGVhZGVyMTBfcyBtcGg7CS8qIG1vZGUgcGFnZSBoZWFkZXIgKi8KKwlzdHJ1Y3Qgc2NzaV9tb2RlX3BhcmFtX2Rlc2NfcyBkZXNjOwkvKiBibG9jayBkZXNjcmlwdG9yICovCisJc3RydWN0IHNjc2lfbXBfZm9ybWF0X2RldmljZV9zIGZvcm1hdDsJLyogZm9ybWF0IGRldmljZSBkYXRhICovCit9OworCitzdHJ1Y3Qgc2NzaV9tb2RlX3BhZ2VfcmRnX2RhdGE2X3N7CisJc3RydWN0IHNjc2lfbW9kZV9wYXJhbV9oZWFkZXI2X3MgbXBoOwkvKiBtb2RlIHBhZ2UgaGVhZGVyICovCisJc3RydWN0IHNjc2lfbW9kZV9wYXJhbV9kZXNjX3MgZGVzYzsJLyogYmxvY2sgZGVzY3JpcHRvciAqLworCXN0cnVjdCBzY3NpX21wX3JpZ2lkX2RldmljZV9nZW9tZXRyeV9zIHJkZzsKKwkJCQkJLyogcmlnaWQgZ2VvbWV0cnkgZGF0YSAqLworfTsKKworc3RydWN0IHNjc2lfbW9kZV9wYWdlX3JkZ19kYXRhMTBfc3sKKwlzdHJ1Y3Qgc2NzaV9tb2RlX3BhcmFtX2hlYWRlcjEwX3MgbXBoOwkvKiBtb2RlIHBhZ2UgaGVhZGVyICovCisJc3RydWN0IHNjc2lfbW9kZV9wYXJhbV9kZXNjX3MgZGVzYzsJLyogYmxvY2sgZGVzY3JpcHRvciAqLworCXN0cnVjdCBzY3NpX21wX3JpZ2lkX2RldmljZV9nZW9tZXRyeV9zIHJkZzsKKwkJCQkJLyogcmlnaWQgZ2VvbWV0cnkgZGF0YSAqLworfTsKKworc3RydWN0IHNjc2lfbW9kZV9wYWdlX2NhY2hlNl9zeworCXN0cnVjdCBzY3NpX21vZGVfcGFyYW1faGVhZGVyNl9zIG1waDsJLyogbW9kZSBwYWdlIGhlYWRlciAqLworCXN0cnVjdCBzY3NpX21vZGVfcGFyYW1fZGVzY19zIGRlc2M7CS8qIGJsb2NrIGRlc2NyaXB0b3IgKi8KKwlzdHJ1Y3Qgc2NzaV9tcF9jYWNoaW5nX3MgY2FjaGU7CS8qIGNhY2hlIHBhZ2UgZGF0YSAqLworfTsKKworc3RydWN0IHNjc2lfbW9kZV9wYWdlX2NhY2hlMTBfc3sKKwlzdHJ1Y3Qgc2NzaV9tb2RlX3BhcmFtX2hlYWRlcjEwX3MgbXBoOwkvKiBtb2RlIHBhZ2UgaGVhZGVyICovCisJc3RydWN0IHNjc2lfbW9kZV9wYXJhbV9kZXNjX3MgZGVzYzsJLyogYmxvY2sgZGVzY3JpcHRvciAqLworCXN0cnVjdCBzY3NpX21wX2NhY2hpbmdfcyBjYWNoZTsJLyogY2FjaGUgcGFnZSBkYXRhICovCit9OworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogRm9ybWF0IFVuaXQgY29tbWFuZAorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworLyoKKyAqIEZvcm1hdCBVbml0IENEQgorICovCitzdHJ1Y3Qgc2NzaV9mb3JtYXRfdW5pdF9zeworCXU4ICAgICAgICAgb3Bjb2RlOworI2lmZGVmIF9fQklHRU5ESUFOCisJdTggICAgICAgICByZXMxOjM7CisJdTggICAgICAgICBmbXRkYXRhOjE7CS8qIGlmIHNldCwgZGF0YSBvdXQgcGhhc2UgaGFzIGZvcm1hdAorCQkJCQkgKiBkYXRhCisJCQkJCSAqLworCXU4ICAgICAgICAgY21wbHN0OjE7CS8qIGlmIHNldCwgZGVmZWN0IGxpc3QgaXMgY29tcGxldGUgKi8KKwl1OCAgICAgICAgIGRlZl9saXN0OjM7CS8qIGZvcm1hdCBvZiBkZWZlY3QgZGVzY3JpcHRvciBpcworCQkJCQkgKiBmbXRkYXRhID0xCisJCQkJCSAqLworI2Vsc2UKKwl1OCAgICAgICAgIGRlZl9saXN0OjM7CS8qIGZvcm1hdCBvZiBkZWZlY3QgZGVzY3JpcHRvciBpcworCQkJCQkgKiBmbXRkYXRhID0gMQorCQkJCQkgKi8KKwl1OCAgICAgICAgIGNtcGxzdDoxOwkvKiBpZiBzZXQsIGRlZmVjdCBsaXN0IGlzIGNvbXBsZXRlICovCisJdTggICAgICAgICBmbXRkYXRhOjE7CS8qIGlmIHNldCwgZGF0YSBvdXQgcGhhc2UgaGFzIGZvcm1hdAorCQkJCQkgKiBkYXRhCisJCQkJCSAqLworCXU4ICAgICAgICAgcmVzMTozOworI2VuZGlmCisJdTggICAgICAgICBpbnRlcmxlYXZlX21zYjsKKwl1OCAgICAgICAgIGludGVybGVhdmVfbHNiOworCXU4ICAgICAgICAgdmVuZG9yX3NwZWM7CisJdTggICAgICAgICBjb250cm9sOworfTsKKworLyoKKyAqIGgKKyAqLworc3RydWN0IHNjc2lfcmVzZXJ2ZTZfc3sKKwl1OCAgICAgICAgIG9wY29kZTsKKyNpZmRlZiBfX0JJR0VORElBTgorCXU4ICAgICAgICAgcmVzZXJ2ZWQ6MzsKKwl1OCAgICAgICAgIG9ic29sZXRlOjQ7CisJdTggICAgICAgICBleHRlbnQ6MTsKKyNlbHNlCisJdTggICAgICAgICBleHRlbnQ6MTsKKwl1OCAgICAgICAgIG9ic29sZXRlOjQ7CisJdTggICAgICAgICByZXNlcnZlZDozOworI2VuZGlmCisJdTggICAgICAgICByZXNlcnZhdGlvbl9pZDsKKwl1MTYgICAgICAgIHBhcmFtX2xpc3RfbGVuOworCXU4ICAgICAgICAgY29udHJvbDsKK307CisKKy8qCisgKiBoCisgKi8KK3N0cnVjdCBzY3NpX3JlbGVhc2U2X3N7CisJdTggICAgICAgICBvcGNvZGU7CisjaWZkZWYgX19CSUdFTkRJQU4KKwl1OCAgICAgICAgIHJlc2VydmVkMTozOworCXU4ICAgICAgICAgb2Jzb2xldGU6NDsKKwl1OCAgICAgICAgIGV4dGVudDoxOworI2Vsc2UKKwl1OCAgICAgICAgIGV4dGVudDoxOworCXU4ICAgICAgICAgb2Jzb2xldGU6NDsKKwl1OCAgICAgICAgIHJlc2VydmVkMTozOworI2VuZGlmCisJdTggICAgICAgICByZXNlcnZhdGlvbl9pZDsKKwl1MTYgICAgICAgIHJlc2VydmVkMjsKKwl1OCAgICAgICAgIGNvbnRyb2w7Cit9OworCisvKgorICogaAorICovCitzdHJ1Y3Qgc2NzaV9yZXNlcnZlMTBfc3sKKwl1OCAgICAgICAgIG9wY29kZTsKKyNpZmRlZiBfX0JJR0VORElBTgorCXU4ICAgICAgICAgcmVzZXJ2ZWQxOjM7CisJdTggICAgICAgICB0aGlyZF9wYXJ0eToxOworCXU4ICAgICAgICAgcmVzZXJ2ZWQyOjI7CisJdTggICAgICAgICBsb25nX2lkOjE7CisJdTggICAgICAgICBleHRlbnQ6MTsKKyNlbHNlCisJdTggICAgICAgICBleHRlbnQ6MTsKKwl1OCAgICAgICAgIGxvbmdfaWQ6MTsKKwl1OCAgICAgICAgIHJlc2VydmVkMjoyOworCXU4ICAgICAgICAgdGhpcmRfcGFydHk6MTsKKwl1OCAgICAgICAgIHJlc2VydmVkMTozOworI2VuZGlmCisJdTggICAgICAgICByZXNlcnZhdGlvbl9pZDsKKwl1OCAgICAgICAgIHRoaXJkX3B0eV9kZXZfaWQ7CisJdTggICAgICAgICByZXNlcnZlZDM7CisJdTggICAgICAgICByZXNlcnZlZDQ7CisJdTggICAgICAgICByZXNlcnZlZDU7CisJdTE2ICAgICAgICBwYXJhbV9saXN0X2xlbjsKKwl1OCAgICAgICAgIGNvbnRyb2w7Cit9OworCitzdHJ1Y3Qgc2NzaV9yZWxlYXNlMTBfc3sKKwl1OCAgICAgICAgIG9wY29kZTsKKyNpZmRlZiBfX0JJR0VORElBTgorCXU4ICAgICAgICAgcmVzZXJ2ZWQxOjM7CisJdTggICAgICAgICB0aGlyZF9wYXJ0eToxOworCXU4ICAgICAgICAgcmVzZXJ2ZWQyOjI7CisJdTggICAgICAgICBsb25nX2lkOjE7CisJdTggICAgICAgICBleHRlbnQ6MTsKKyNlbHNlCisJdTggICAgICAgICBleHRlbnQ6MTsKKwl1OCAgICAgICAgIGxvbmdfaWQ6MTsKKwl1OCAgICAgICAgIHJlc2VydmVkMjoyOworCXU4ICAgICAgICAgdGhpcmRfcGFydHk6MTsKKwl1OCAgICAgICAgIHJlc2VydmVkMTozOworI2VuZGlmCisJdTggICAgICAgICByZXNlcnZhdGlvbl9pZDsKKwl1OCAgICAgICAgIHRoaXJkX3B0eV9kZXZfaWQ7CisJdTggICAgICAgICByZXNlcnZlZDM7CisJdTggICAgICAgICByZXNlcnZlZDQ7CisJdTggICAgICAgICByZXNlcnZlZDU7CisJdTE2ICAgICAgICBwYXJhbV9saXN0X2xlbjsKKwl1OCAgICAgICAgIGNvbnRyb2w7Cit9OworCitzdHJ1Y3Qgc2NzaV92ZXJpZnkxMF9zeworCXU4ICAgICAgICAgb3Bjb2RlOworI2lmZGVmIF9fQklHRU5ESUFOCisJdTggICAgICAgICBsdW46MzsKKwl1OCAgICAgICAgIGRwbzoxOworCXU4ICAgICAgICAgcmVzZXJ2ZWQ6MjsKKwl1OCAgICAgICAgIGJ5dGNoazoxOworCXU4ICAgICAgICAgcmVsYWRkcjoxOworI2Vsc2UKKwl1OCAgICAgICAgIHJlbGFkZHI6MTsKKwl1OCAgICAgICAgIGJ5dGNoazoxOworCXU4ICAgICAgICAgcmVzZXJ2ZWQ6MjsKKwl1OCAgICAgICAgIGRwbzoxOworCXU4ICAgICAgICAgbHVuOjM7CisjZW5kaWYKKwl1OCAgICAgICAgIGxiYTA7CisJdTggICAgICAgICBsYmExOworCXU4ICAgICAgICAgbGJhMjsKKwl1OCAgICAgICAgIGxiYTM7CisJdTggICAgICAgICByZXNlcnZlZDE7CisJdTggICAgICAgICB2ZXJpZmljYXRpb25fbGVuMDsKKwl1OCAgICAgICAgIHZlcmlmaWNhdGlvbl9sZW4xOworCXU4ICAgICAgICAgY29udHJvbF9ieXRlOworfTsKKworc3RydWN0IHNjc2lfcmVxdWVzdF9zZW5zZV9zeworCXU4ICAgICAgICAgb3Bjb2RlOworI2lmZGVmIF9fQklHRU5ESUFOCisJdTggICAgICAgICBsdW46MzsKKwl1OCAgICAgICAgIHJlc2VydmVkOjU7CisjZWxzZQorCXU4ICAgICAgICAgcmVzZXJ2ZWQ6NTsKKwl1OCAgICAgICAgIGx1bjozOworI2VuZGlmCisJdTggICAgICAgICByZXNlcnZlZDA7CisJdTggICAgICAgICByZXNlcnZlZDE7CisJdTggICAgICAgICBhbGxvY19sZW47CisJdTggICAgICAgICBjb250cm9sX2J5dGU7Cit9OworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFNDU0kgc3RhdHVzIGJ5dGUgdmFsdWVzCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2RlZmluZSBTQ1NJX1NUQVRVU19HT09EICAgICAgICAgICAgICAgICAgIDB4MDAKKyNkZWZpbmUgU0NTSV9TVEFUVVNfQ0hFQ0tfQ09ORElUSU9OICAgICAgICAweDAyCisjZGVmaW5lIFNDU0lfU1RBVFVTX0NPTkRJVElPTl9NRVQgICAgICAgICAgMHgwNAorI2RlZmluZSBTQ1NJX1NUQVRVU19CVVNZICAgICAgICAgICAgICAgICAgIDB4MDgKKyNkZWZpbmUgU0NTSV9TVEFUVVNfSU5URVJNRURJQVRFICAgICAgICAgICAweDEwCisjZGVmaW5lIFNDU0lfU1RBVFVTX0lDTSAgICAgICAgICAgICAgICAgICAgMHgxNAkvKiBpbnRlcm1lZGlhdGUgY29uZGl0aW9uIG1ldCAqLworI2RlZmluZSBTQ1NJX1NUQVRVU19SRVNFUlZBVElPTl9DT05GTElDVCAgIDB4MTgKKyNkZWZpbmUgU0NTSV9TVEFUVVNfQ09NTUFORF9URVJNSU5BVEVEICAgICAweDIyCisjZGVmaW5lIFNDU0lfU1RBVFVTX1FVRVVFX0ZVTEwgICAgICAgICAgICAgMHgyOAorI2RlZmluZSBTQ1NJX1NUQVRVU19BQ0FfQUNUSVZFICAgICAgICAgICAgIDB4MzAKKworI2RlZmluZSBTQ1NJX01BWF9BTExPQ19MRU4JCTB4RkYJLyogbWF4aW11bSBhbGxvY2FyaW9uIGxlbmd0aAorCQkJCQkJICogaW4gQ0RCcworCQkJCQkJICovCisKKyNkZWZpbmUgU0NTSV9PUF9XUklURV9WRVJJRlkxMCAgICAgIDB4MkUKKyNkZWZpbmUgU0NTSV9PUF9XUklURV9WRVJJRlkxMiAgICAgIDB4QUUKKyNkZWZpbmUgU0NTSV9PUF9VTkRFRiAgICAgICAgICAgICAgIDB4RkYKKworLyoKKyAqIFNDU0kgV1JJVEUtVkVSSUZZKDEwKSBjb21tYW5kCisgKi8KK3N0cnVjdCBzY3NpX3dyaXRlX3ZlcmlmeTEwX3N7CisJdTggICAgICAgICBvcGNvZGU7CisjaWZkZWYgX19CSUdFTkRJQU4KKwl1OCAgICAgICAgIHJlc2VydmVkMTozOworCXU4ICAgICAgICAgZHBvOjE7CQkvKiBEaXNhYmxlIFBhZ2UgT3V0ICovCisJdTggICAgICAgICByZXNlcnZlZDI6MTsKKwl1OCAgICAgICAgIGVicDoxOwkJLyogZXJzZSBieS1wYXNzICovCisJdTggICAgICAgICBieXRjaGs6MTsJLyogYnl0ZSBjaGVjayAqLworCXU4ICAgICAgICAgcmVsX2FkcjoxOwkvKiByZWxhdGl2ZSBhZGRyZXNzICovCisjZWxzZQorCXU4ICAgICAgICAgcmVsX2FkcjoxOwkvKiByZWxhdGl2ZSBhZGRyZXNzICovCisJdTggICAgICAgICBieXRjaGs6MTsJLyogYnl0ZSBjaGVjayAqLworCXU4ICAgICAgICAgZWJwOjE7CQkvKiBlcnNlIGJ5LXBhc3MgKi8KKwl1OCAgICAgICAgIHJlc2VydmVkMjoxOworCXU4ICAgICAgICAgZHBvOjE7CQkvKiBEaXNhYmxlIFBhZ2UgT3V0ICovCisJdTggICAgICAgICByZXNlcnZlZDE6MzsKKyNlbmRpZgorCXU4ICAgICAgICAgbGJhMDsJCS8qIGxvZ2ljYWwgYmxvY2sgYWRkcmVzcyAtIE1TQiAqLworCXU4ICAgICAgICAgbGJhMTsKKwl1OCAgICAgICAgIGxiYTI7CisJdTggICAgICAgICBsYmEzOwkJLyogTFNCICovCisJdTggICAgICAgICByZXNlcnZlZDM7CisJdTggICAgICAgICB4ZmVyX2xlbmd0aDA7CS8qIHRyYW5zZmVyIGxlbmd0aCBpbiBibG9ja3MgLSBNU0IgKi8KKwl1OCAgICAgICAgIHhmZXJfbGVuZ3RoMTsJLyogTFNCICovCisJdTggICAgICAgICBjb250cm9sOworfTsKKworI3ByYWdtYSBwYWNrKCkKKworI2VuZGlmIC8qIF9fU0NTSV9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9wcm90b2NvbC90eXBlcy5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL3Byb3RvY29sL3R5cGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjg3NWE2YwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9wcm90b2NvbC90eXBlcy5oCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworLyoqCisgKiAgdHlwZXMuaCBQcm90b2NvbCBkZWZpbmVkIGJhc2UgdHlwZXMKKyAqLworCisjaWZuZGVmIF9fVFlQRVNfSF9fCisjZGVmaW5lIF9fVFlQRVNfSF9fCisKKyNpbmNsdWRlIDxiZmFfb3NfaW5jLmg+CisKKyNkZWZpbmUgd3duX3QgdTY0CisjZGVmaW5lIGx1bl90IHU2NAorCisjZGVmaW5lIFdXTl9OVUxMCSgwKQorI2RlZmluZSBGQ19TWU1OQU1FX01BWAkyNTYJLyogIG1heCBuYW1lIHNlcnZlciBzeW1ib2xpYyBuYW1lIHNpemUgKi8KKyNkZWZpbmUgRkNfQUxQQV9NQVgJMTI4CisKKyNwcmFnbWEgcGFjaygxKQorCisjZGVmaW5lIE1BQ19BRERSTEVOCSg2KQorc3RydWN0IG1hY19zIHsgdTggbWFjW01BQ19BRERSTEVOXTsgfTsKKyNkZWZpbmUgbWFjX3Qgc3RydWN0IG1hY19zCisKKyNwcmFnbWEgcGFjaygpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9sb29wLmMgYi9kcml2ZXJzL3Njc2kvYmZhL2xvb3AuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDE4ZGVkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9sb29wLmMKQEAgLTAsMCArMSw0MjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworLyoqCisgKiAgcG9ydF9sb29wLmMgdnBvcnQgcHJpdmF0ZSBsb29wIGltcGxlbWVudGF0aW9uLgorICovCisjaW5jbHVkZSA8YmZhLmg+CisjaW5jbHVkZSA8YmZhX3N2Yy5oPgorI2luY2x1ZGUgImZjc19scG9ydC5oIgorI2luY2x1ZGUgImZjc19ycG9ydC5oIgorI2luY2x1ZGUgImZjc190cmNtb2QuaCIKKyNpbmNsdWRlICJscG9ydF9wcml2LmgiCisKK0JGQV9UUkNfRklMRShGQ1MsIExPT1ApOworCisvKioKKyAqICAgQUxQQSB0byBMSVhBIGJpdG1hcCBtYXBwaW5nCisgKgorICogICBBTFBBIDB4MDAgKFdvcmQgMCwgQml0IDMwKSBpcyBpbnZhbGlkIGZvciBOX1BvcnRzLiBBbHNvIFdvcmQgMCBCaXQgMzEKKyAqIGlzIGZvciBMX2JpdCAobG9naW4gcmVxdWlyZWQpIGFuZCBpcyBmaWxsZWQgYXMgQUxQQSAweDAwIGhlcmUuCisgKi8KK3N0YXRpYyBjb25zdCB1OCAgIHBvcnRfbG9vcF9hbHBhX21hcFtdID0geworCTB4RUYsIDB4RTgsIDB4RTQsIDB4RTIsIDB4RTEsIDB4RTAsIDB4REMsIDB4REEsCS8qIFdvcmQgMyBCaXRzIDAuLjcgKi8KKwkweEQ5LCAweEQ2LCAweEQ1LCAweEQ0LCAweEQzLCAweEQyLCAweEQxLCAweENFLAkvKiBXb3JkIDMgQml0cyA4Li4xNSAqLworCTB4Q0QsIDB4Q0MsIDB4Q0IsIDB4Q0EsIDB4QzksIDB4QzcsIDB4QzYsIDB4QzUsCS8qIFdvcmQgMyBCaXRzIDE2Li4yMyAqLworCTB4QzMsIDB4QkMsIDB4QkEsIDB4QjksIDB4QjYsIDB4QjUsIDB4QjQsIDB4QjMsCS8qIFdvcmQgMyBCaXRzIDI0Li4zMSAqLworCisJMHhCMiwgMHhCMSwgMHhBRSwgMHhBRCwgMHhBQywgMHhBQiwgMHhBQSwgMHhBOSwJLyogV29yZCAyIEJpdHMgMC4uNyAqLworCTB4QTcsIDB4QTYsIDB4QTUsIDB4QTMsIDB4OUYsIDB4OUUsIDB4OUQsIDB4OUIsCS8qIFdvcmQgMiBCaXRzIDguLjE1ICovCisJMHg5OCwgMHg5NywgMHg5MCwgMHg4RiwgMHg4OCwgMHg4NCwgMHg4MiwgMHg4MSwJLyogV29yZCAyIEJpdHMgMTYuLjIzICovCisJMHg4MCwgMHg3QywgMHg3QSwgMHg3OSwgMHg3NiwgMHg3NSwgMHg3NCwgMHg3MywJLyogV29yZCAyIEJpdHMgMjQuLjMxICovCisKKwkweDcyLCAweDcxLCAweDZFLCAweDZELCAweDZDLCAweDZCLCAweDZBLCAweDY5LAkvKiBXb3JkIDEgQml0cyAwLi43ICovCisJMHg2NywgMHg2NiwgMHg2NSwgMHg2MywgMHg1QywgMHg1QSwgMHg1OSwgMHg1NiwJLyogV29yZCAxIEJpdHMgOC4uMTUgKi8KKwkweDU1LCAweDU0LCAweDUzLCAweDUyLCAweDUxLCAweDRFLCAweDRELCAweDRDLAkvKiBXb3JkIDEgQml0cyAxNi4uMjMgKi8KKwkweDRCLCAweDRBLCAweDQ5LCAweDQ3LCAweDQ2LCAweDQ1LCAweDQzLCAweDNDLAkvKiBXb3JkIDEgQml0cyAyNC4uMzEgKi8KKworCTB4M0EsIDB4MzksIDB4MzYsIDB4MzUsIDB4MzQsIDB4MzMsIDB4MzIsIDB4MzEsCS8qIFdvcmQgMCBCaXRzIDAuLjcgKi8KKwkweDJFLCAweDJELCAweDJDLCAweDJCLCAweDJBLCAweDI5LCAweDI3LCAweDI2LAkvKiBXb3JkIDAgQml0cyA4Li4xNSAqLworCTB4MjUsIDB4MjMsIDB4MUYsIDB4MUUsIDB4MUQsIDB4MUIsIDB4MTgsIDB4MTcsCS8qIFdvcmQgMCBCaXRzIDE2Li4yMyAqLworCTB4MTAsIDB4MEYsIDB4MDgsIDB4MDQsIDB4MDIsIDB4MDEsIDB4MDAsIDB4MDAsCS8qIFdvcmQgMCBCaXRzIDI0Li4zMSAqLworfTsKKworLyoKKyAqIExvY2FsIEZ1bmN0aW9ucworICovCitiZmFfc3RhdHVzX3QgICAgYmZhX2Zjc19wb3J0X2xvb3Bfc2VuZF9wbG9naShzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQsCisJCQkJCSAgICAgdTggYWxwYSk7CisKK3ZvaWQgICAgICAgICAgICBiZmFfZmNzX3BvcnRfbG9vcF9wbG9naV9yZXNwb25zZSh2b2lkICpmY3NhcmcsCisJCQkJCQkgc3RydWN0IGJmYV9mY3hwX3MgKmZjeHAsCisJCQkJCQkgdm9pZCAqY2JhcmcsCisJCQkJCQkgYmZhX3N0YXR1c190IHJlcV9zdGF0dXMsCisJCQkJCQkgdTMyIHJzcF9sZW4sCisJCQkJCQkgdTMyIHJlc2lkX2xlbiwKKwkJCQkJCSBzdHJ1Y3QgZmNoc19zICpyc3BfZmNocyk7CisKK2JmYV9zdGF0dXNfdCAgICBiZmFfZmNzX3BvcnRfbG9vcF9zZW5kX2FkaXNjKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCwKKwkJCQkJICAgICB1OCBhbHBhKTsKKwordm9pZCAgICAgICAgICAgIGJmYV9mY3NfcG9ydF9sb29wX2FkaXNjX3Jlc3BvbnNlKHZvaWQgKmZjc2FyZywKKwkJCQkJCSBzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cCwKKwkJCQkJCSB2b2lkICpjYmFyZywKKwkJCQkJCSBiZmFfc3RhdHVzX3QgcmVxX3N0YXR1cywKKwkJCQkJCSB1MzIgcnNwX2xlbiwKKwkJCQkJCSB1MzIgcmVzaWRfbGVuLAorCQkJCQkJIHN0cnVjdCBmY2hzX3MgKnJzcF9mY2hzKTsKKworYmZhX3N0YXR1c190ICAgIGJmYV9mY3NfcG9ydF9sb29wX3NlbmRfcGxvZ2lfYWNjKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCwKKwkJCQkJCSB1OCBhbHBhKTsKKwordm9pZCAgICAgICAgICAgIGJmYV9mY3NfcG9ydF9sb29wX3Bsb2dpX2FjY19yZXNwb25zZSh2b2lkICpmY3NhcmcsCisJCQkJCQkgICAgIHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwLAorCQkJCQkJICAgICB2b2lkICpjYmFyZywKKwkJCQkJCSAgICAgYmZhX3N0YXR1c190IHJlcV9zdGF0dXMsCisJCQkJCQkgICAgIHUzMiByc3BfbGVuLAorCQkJCQkJICAgICB1MzIgcmVzaWRfbGVuLAorCQkJCQkJICAgICBzdHJ1Y3QgZmNoc19zICpyc3BfZmNocyk7CisKK2JmYV9zdGF0dXNfdCAgICBiZmFfZmNzX3BvcnRfbG9vcF9zZW5kX2FkaXNjX2FjYyhzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQsCisJCQkJCQkgdTggYWxwYSk7CisKK3ZvaWQgICAgICAgICAgICBiZmFfZmNzX3BvcnRfbG9vcF9hZGlzY19hY2NfcmVzcG9uc2Uodm9pZCAqZmNzYXJnLAorCQkJCQkJICAgICBzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cCwKKwkJCQkJCSAgICAgdm9pZCAqY2JhcmcsCisJCQkJCQkgICAgIGJmYV9zdGF0dXNfdCByZXFfc3RhdHVzLAorCQkJCQkJICAgICB1MzIgcnNwX2xlbiwKKwkJCQkJCSAgICAgdTMyIHJlc2lkX2xlbiwKKwkJCQkJCSAgICAgc3RydWN0IGZjaHNfcyAqcnNwX2ZjaHMpOworLyoqCisgKiAgIENhbGxlZCBieSBwb3J0IHRvIGluaXRpYWxpemFyIGluIHByb3ZhdGUgTE9PUCB0b3BvbG9neS4KKyAqLwordm9pZAorYmZhX2Zjc19wb3J0X2xvb3BfaW5pdChzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQpCit7Cit9CisKKy8qKgorICogICBDYWxsZWQgYnkgcG9ydCB0byBub3RpZnkgdHJhbnNpdGlvbiB0byBvbmxpbmUgc3RhdGUuCisgKi8KK3ZvaWQKK2JmYV9mY3NfcG9ydF9sb29wX29ubGluZShzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQpCit7CisKKwl1OCAgICAgICAgIG51bV9hbHBhID0gcG9ydC0+cG9ydF90b3BvLnBsb29wLm51bV9hbHBhOworCXU4ICAgICAgICAqYWxwYV9wb3NfbWFwID0gcG9ydC0+cG9ydF90b3BvLnBsb29wLmFscGFfcG9zX21hcDsKKwlzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpyX3BvcnQ7CisJaW50ICAgICAgICAgICAgIGlpID0gMDsKKworCS8qCisJICogSWYgdGhlIHBvcnQgcm9sZSBpcyBJbml0aWF0b3IgTW9kZSwgY3JlYXRlIFJwb3J0cy4KKwkgKi8KKwlpZiAocG9ydC0+cG9ydF9jZmcucm9sZXMgPT0gQkZBX1BPUlRfUk9MRV9GQ1BfSU0pIHsKKwkJLyoKKwkJICogQ2hlY2sgaWYgdGhlIEFMUEEgcG9zaXRpb25hbCBiaXRtYXAgaXMgYXZhaWxhYmxlLgorCQkgKiBpZiBub3QsIHdlIHNlbmQgUExPR0kgdG8gYWxsIHBvc3NpYmxlIEFMUEFzLgorCQkgKi8KKwkJaWYgKG51bV9hbHBhID4gMCkgeworCQkJZm9yIChpaSA9IDA7IGlpIDwgbnVtX2FscGE7IGlpKyspIHsKKwkJCQkvKgorCQkJCSAqIGlnbm9yZSBBTFBBIG9mIGJmYSBwb3J0CisJCQkJICovCisJCQkJaWYgKGFscGFfcG9zX21hcFtpaV0gIT0gcG9ydC0+cGlkKSB7CisJCQkJCXJfcG9ydCA9IGJmYV9mY3NfcnBvcnRfY3JlYXRlKHBvcnQsCisJCQkJCQlhbHBhX3Bvc19tYXBbaWldKTsKKwkJCQl9CisJCQl9CisJCX0gZWxzZSB7CisJCQlmb3IgKGlpID0gMDsgaWkgPCBNQVhfQUxQQV9DT1VOVDsgaWkrKykgeworCQkJCS8qCisJCQkJICogaWdub3JlIEFMUEEgb2YgYmZhIHBvcnQKKwkJCQkgKi8KKwkJCQlpZiAoKHBvcnRfbG9vcF9hbHBhX21hcFtpaV0gPiAwKQorCQkJCSAgICAmJiAocG9ydF9sb29wX2FscGFfbWFwW2lpXSAhPSBwb3J0LT5waWQpKQorCQkJCQliZmFfZmNzX3BvcnRfbG9vcF9zZW5kX3Bsb2dpKHBvcnQsCisJCQkJCQlwb3J0X2xvb3BfYWxwYV9tYXBbaWldKTsKKwkJCQkvKipUQkQgKi8KKwkJCX0KKwkJfQorCX0gZWxzZSB7CisJCS8qCisJCSAqIFRCRCBUYXJnZXQgTW9kZSA/PworCQkgKi8KKwl9CisKK30KKworLyoqCisgKiAgIENhbGxlZCBieSBwb3J0IHRvIG5vdGlmeSB0cmFuc2l0aW9uIHRvIG9mZmxpbmUgc3RhdGUuCisgKi8KK3ZvaWQKK2JmYV9mY3NfcG9ydF9sb29wX29mZmxpbmUoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0KQoreworCit9CisKKy8qKgorICogICBDYWxsZWQgYnkgcG9ydCB0byBub3RpZnkgYSBMSVAgb24gdGhlIGxvb3AuCisgKi8KK3ZvaWQKK2JmYV9mY3NfcG9ydF9sb29wX2xpcChzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQpCit7Cit9CisKKy8qKgorICogTG9jYWwgRnVuY3Rpb25zLgorICovCitiZmFfc3RhdHVzX3QKK2JmYV9mY3NfcG9ydF9sb29wX3NlbmRfcGxvZ2koc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LCB1OCBhbHBhKQoreworCXN0cnVjdCBmY2hzX3MgICAgICAgICAgZmNoczsKKwlzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cCA9IE5VTEw7CisJaW50ICAgICAgICAgICAgIGxlbjsKKworCWJmYV90cmMocG9ydC0+ZmNzLCBhbHBhKTsKKworCWZjeHAgPSBiZmFfZmN4cF9hbGxvYyhOVUxMLCBwb3J0LT5mY3MtPmJmYSwgMCwgMCwgTlVMTCwgTlVMTCwgTlVMTCwKKwkJCQkgIE5VTEwpOworCWJmYV9hc3NlcnQoZmN4cCk7CisKKwlsZW4gPSBmY19wbG9naV9idWlsZCgmZmNocywgYmZhX2ZjeHBfZ2V0X3JlcWJ1ZihmY3hwKSwgYWxwYSwKKwkJCSAgICAgYmZhX2Zjc19wb3J0X2dldF9mY2lkKHBvcnQpLCAwLAorCQkJICAgICBwb3J0LT5wb3J0X2NmZy5wd3duLCBwb3J0LT5wb3J0X2NmZy5ud3duLAorCQkJCSBiZmFfcHBvcnRfZ2V0X21heGZyc2l6ZShwb3J0LT5mY3MtPmJmYSkpOworCisJYmZhX2ZjeHBfc2VuZChmY3hwLCBOVUxMLCBwb3J0LT5mYWJyaWMtPnZmX2lkLCBwb3J0LT5scF90YWcsIEJGQV9GQUxTRSwKKwkJCSAgRkNfQ0xBU1NfMywgbGVuLCAmZmNocywKKwkJCSAgYmZhX2Zjc19wb3J0X2xvb3BfcGxvZ2lfcmVzcG9uc2UsICh2b2lkICopcG9ydCwKKwkJCSAgRkNfTUFYX1BEVVNaLCBGQ19SQV9UT1YpOworCisJcmV0dXJuIEJGQV9TVEFUVVNfT0s7Cit9CisKKy8qKgorICogICBDYWxsZWQgYnkgZmN4cCB0byBub3RpZnkgdGhlIFBsb2dpIHJlc3BvbnNlCisgKi8KK3ZvaWQKK2JmYV9mY3NfcG9ydF9sb29wX3Bsb2dpX3Jlc3BvbnNlKHZvaWQgKmZjc2FyZywgc3RydWN0IGJmYV9mY3hwX3MgKmZjeHAsCisJCQkJIHZvaWQgKmNiYXJnLCBiZmFfc3RhdHVzX3QgcmVxX3N0YXR1cywKKwkJCQkgdTMyIHJzcF9sZW4sIHUzMiByZXNpZF9sZW4sCisJCQkJIHN0cnVjdCBmY2hzX3MgKnJzcF9mY2hzKQoreworCXN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCA9IChzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKikgY2Jhcmc7CisJc3RydWN0IGZjX2xvZ2lfcyAgICAgKnBsb2dpX3Jlc3A7CisJc3RydWN0IGZjX2Vsc19jbWRfcyAgICplbHNfY21kOworCisJYmZhX3RyYyhwb3J0LT5mY3MsIHJlcV9zdGF0dXMpOworCisJLyoKKwkgKiBTYW5pdHkgQ2hlY2tzCisJICovCisJaWYgKHJlcV9zdGF0dXMgIT0gQkZBX1NUQVRVU19PSykgeworCQliZmFfdHJjKHBvcnQtPmZjcywgcmVxX3N0YXR1cyk7CisJCS8qCisJCSAqIEB0b2RvCisJCSAqIFRoaXMgY291bGQgbWVhbiB0aGF0IHRoZSBkZXZpY2Ugd2l0aCB0aGlzIEFQTEEgZG9lcyBub3QKKwkJICogZXhpc3Qgb24gdGhlIGxvb3AuCisJCSAqLworCisJCXJldHVybjsKKwl9CisKKwllbHNfY21kID0gKHN0cnVjdCBmY19lbHNfY21kX3MgKikgQkZBX0ZDWFBfUlNQX1BMRChmY3hwKTsKKwlwbG9naV9yZXNwID0gKHN0cnVjdCBmY19sb2dpX3MgKikgZWxzX2NtZDsKKworCWlmIChlbHNfY21kLT5lbHNfY29kZSA9PSBGQ19FTFNfQUNDKSB7CisJCWJmYV9mY3NfcnBvcnRfc3RhcnQocG9ydCwgcnNwX2ZjaHMsIHBsb2dpX3Jlc3ApOworCX0gZWxzZSB7CisJCWJmYV90cmMocG9ydC0+ZmNzLCBwbG9naV9yZXNwLT5lbHNfY21kLmVsc19jb2RlKTsKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKK2JmYV9zdGF0dXNfdAorYmZhX2Zjc19wb3J0X2xvb3Bfc2VuZF9wbG9naV9hY2Moc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LCB1OCBhbHBhKQoreworCXN0cnVjdCBmY2hzX3MgICAgICAgICAgZmNoczsKKwlzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cDsKKwlpbnQgICAgICAgICAgICAgbGVuOworCisJYmZhX3RyYyhwb3J0LT5mY3MsIGFscGEpOworCisJZmN4cCA9IGJmYV9mY3hwX2FsbG9jKE5VTEwsIHBvcnQtPmZjcy0+YmZhLCAwLCAwLCBOVUxMLCBOVUxMLCBOVUxMLAorCQkJCSAgTlVMTCk7CisJYmZhX2Fzc2VydChmY3hwKTsKKworCWxlbiA9IGZjX3Bsb2dpX2FjY19idWlsZCgmZmNocywgYmZhX2ZjeHBfZ2V0X3JlcWJ1ZihmY3hwKSwgYWxwYSwKKwkJCQkgYmZhX2Zjc19wb3J0X2dldF9mY2lkKHBvcnQpLCAwLAorCQkJCSBwb3J0LT5wb3J0X2NmZy5wd3duLCBwb3J0LT5wb3J0X2NmZy5ud3duLAorCQkJCSBiZmFfcHBvcnRfZ2V0X21heGZyc2l6ZShwb3J0LT5mY3MtPmJmYSkpOworCisJYmZhX2ZjeHBfc2VuZChmY3hwLCBOVUxMLCBwb3J0LT5mYWJyaWMtPnZmX2lkLCBwb3J0LT5scF90YWcsIEJGQV9GQUxTRSwKKwkJCQkgRkNfQ0xBU1NfMywgbGVuLCAmZmNocywKKwkJCQkgYmZhX2Zjc19wb3J0X2xvb3BfcGxvZ2lfYWNjX3Jlc3BvbnNlLAorCQkJCSAodm9pZCAqKXBvcnQsIEZDX01BWF9QRFVTWiwgMCk7IC8qIE5vIHJlc3BvbnNlCisJCQkJCQkJCSAgKiBleHBlY3RlZAorCQkJCQkJCQkgICovCisKKwlyZXR1cm4gQkZBX1NUQVRVU19PSzsKK30KKworLyoKKyAqICBQbG9naSBBY2MgUmVzcG9uc2UKKyAqIFdlIGRvbm90IGRvIGFueSBwcm9jZXNzaW5nIGhlcmUuCisgKi8KK3ZvaWQKK2JmYV9mY3NfcG9ydF9sb29wX3Bsb2dpX2FjY19yZXNwb25zZSh2b2lkICpmY3NhcmcsIHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwLAorCQkJCSAgICAgdm9pZCAqY2JhcmcsIGJmYV9zdGF0dXNfdCByZXFfc3RhdHVzLAorCQkJCSAgICAgdTMyIHJzcF9sZW4sIHUzMiByZXNpZF9sZW4sCisJCQkJICAgICBzdHJ1Y3QgZmNoc19zICpyc3BfZmNocykKK3sKKworCXN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCA9IChzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKikgY2Jhcmc7CisKKwliZmFfdHJjKHBvcnQtPmZjcywgcG9ydC0+cGlkKTsKKworCS8qCisJICogU2FuaXR5IENoZWNrcworCSAqLworCWlmIChyZXFfc3RhdHVzICE9IEJGQV9TVEFUVVNfT0spIHsKKwkJYmZhX3RyYyhwb3J0LT5mY3MsIHJlcV9zdGF0dXMpOworCQlyZXR1cm47CisJfQorfQorCitiZmFfc3RhdHVzX3QKK2JmYV9mY3NfcG9ydF9sb29wX3NlbmRfYWRpc2Moc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LCB1OCBhbHBhKQoreworCXN0cnVjdCBmY2hzX3MgICAgICAgICAgZmNoczsKKwlzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cDsKKwlpbnQgICAgICAgICAgICAgbGVuOworCisJYmZhX3RyYyhwb3J0LT5mY3MsIGFscGEpOworCisJZmN4cCA9IGJmYV9mY3hwX2FsbG9jKE5VTEwsIHBvcnQtPmZjcy0+YmZhLCAwLCAwLCBOVUxMLCBOVUxMLCBOVUxMLAorCQkJCSAgTlVMTCk7CisJYmZhX2Fzc2VydChmY3hwKTsKKworCWxlbiA9IGZjX2FkaXNjX2J1aWxkKCZmY2hzLCBiZmFfZmN4cF9nZXRfcmVxYnVmKGZjeHApLCBhbHBhLAorCQkJICAgICBiZmFfZmNzX3BvcnRfZ2V0X2ZjaWQocG9ydCksIDAsCisJCQkgICAgIHBvcnQtPnBvcnRfY2ZnLnB3d24sIHBvcnQtPnBvcnRfY2ZnLm53d24pOworCisJYmZhX2ZjeHBfc2VuZChmY3hwLCBOVUxMLCBwb3J0LT5mYWJyaWMtPnZmX2lkLCBwb3J0LT5scF90YWcsIEJGQV9GQUxTRSwKKwkJCSAgRkNfQ0xBU1NfMywgbGVuLCAmZmNocywKKwkJCSAgYmZhX2Zjc19wb3J0X2xvb3BfYWRpc2NfcmVzcG9uc2UsICh2b2lkICopcG9ydCwKKwkJCSAgRkNfTUFYX1BEVVNaLCBGQ19SQV9UT1YpOworCisJcmV0dXJuIEJGQV9TVEFUVVNfT0s7Cit9CisKKy8qKgorICogICBDYWxsZWQgYnkgZmN4cCB0byBub3RpZnkgdGhlIEFESVNDIHJlc3BvbnNlCisgKi8KK3ZvaWQKK2JmYV9mY3NfcG9ydF9sb29wX2FkaXNjX3Jlc3BvbnNlKHZvaWQgKmZjc2FyZywgc3RydWN0IGJmYV9mY3hwX3MgKmZjeHAsCisJCQkJIHZvaWQgKmNiYXJnLCBiZmFfc3RhdHVzX3QgcmVxX3N0YXR1cywKKwkJCQkgdTMyIHJzcF9sZW4sIHUzMiByZXNpZF9sZW4sCisJCQkJIHN0cnVjdCBmY2hzX3MgKnJzcF9mY2hzKQoreworCXN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCA9IChzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKikgY2Jhcmc7CisJc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQ7CisJc3RydWN0IGZjX2FkaXNjX3MgICAgICphZGlzY19yZXNwOworCXN0cnVjdCBmY19lbHNfY21kX3MgICAqZWxzX2NtZDsKKwl1MzIgICAgICAgIHBpZCA9IHJzcF9mY2hzLT5zX2lkOworCisJYmZhX3RyYyhwb3J0LT5mY3MsIHJlcV9zdGF0dXMpOworCisJLyoKKwkgKiBTYW5pdHkgQ2hlY2tzCisJICovCisJaWYgKHJlcV9zdGF0dXMgIT0gQkZBX1NUQVRVU19PSykgeworCQkvKgorCQkgKiBUQkQgOiB3ZSBtYXkgbmVlZCB0byByZXRyeSBjZXJ0YWluIHJlcXVlc3RzCisJCSAqLworCQliZmFfZmN4cF9mcmVlKGZjeHApOworCQlyZXR1cm47CisJfQorCisJZWxzX2NtZCA9IChzdHJ1Y3QgZmNfZWxzX2NtZF9zICopIEJGQV9GQ1hQX1JTUF9QTEQoZmN4cCk7CisJYWRpc2NfcmVzcCA9IChzdHJ1Y3QgZmNfYWRpc2NfcyAqKSBlbHNfY21kOworCisJaWYgKGVsc19jbWQtPmVsc19jb2RlID09IEZDX0VMU19BQ0MpIHsKKwl9IGVsc2UgeworCQliZmFfdHJjKHBvcnQtPmZjcywgYWRpc2NfcmVzcC0+ZWxzX2NtZC5lbHNfY29kZSk7CisKKwkJLyoKKwkJICogVEJEOiB3ZSBtYXkgbmVlZCB0byBjaGVjayBmb3IgcmVqZWN0IGNvZGVzIGFuZCByZXRyeQorCQkgKi8KKwkJcnBvcnQgPSBiZmFfZmNzX3BvcnRfZ2V0X3Jwb3J0X2J5X3BpZChwb3J0LCBwaWQpOworCQlpZiAocnBvcnQpIHsKKwkJCWxpc3RfZGVsKCZycG9ydC0+cWUpOworCQkJYmZhX2Zjc19ycG9ydF9kZWxldGUocnBvcnQpOworCQl9CisKKwl9CisJcmV0dXJuOworfQorCitiZmFfc3RhdHVzX3QKK2JmYV9mY3NfcG9ydF9sb29wX3NlbmRfYWRpc2NfYWNjKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCwgdTggYWxwYSkKK3sKKwlzdHJ1Y3QgZmNoc19zICAgICAgICAgIGZjaHM7CisJc3RydWN0IGJmYV9mY3hwX3MgKmZjeHA7CisJaW50ICAgICAgICAgICAgIGxlbjsKKworCWJmYV90cmMocG9ydC0+ZmNzLCBhbHBhKTsKKworCWZjeHAgPSBiZmFfZmN4cF9hbGxvYyhOVUxMLCBwb3J0LT5mY3MtPmJmYSwgMCwgMCwgTlVMTCwgTlVMTCwgTlVMTCwKKwkJCQkgIE5VTEwpOworCWJmYV9hc3NlcnQoZmN4cCk7CisKKwlsZW4gPSBmY19hZGlzY19hY2NfYnVpbGQoJmZjaHMsIGJmYV9mY3hwX2dldF9yZXFidWYoZmN4cCksIGFscGEsCisJCQkJIGJmYV9mY3NfcG9ydF9nZXRfZmNpZChwb3J0KSwgMCwKKwkJCQkgcG9ydC0+cG9ydF9jZmcucHd3biwgcG9ydC0+cG9ydF9jZmcubnd3bik7CisKKwliZmFfZmN4cF9zZW5kKGZjeHAsIE5VTEwsIHBvcnQtPmZhYnJpYy0+dmZfaWQsIHBvcnQtPmxwX3RhZywgQkZBX0ZBTFNFLAorCQkJCUZDX0NMQVNTXzMsIGxlbiwgJmZjaHMsCisJCQkJYmZhX2Zjc19wb3J0X2xvb3BfYWRpc2NfYWNjX3Jlc3BvbnNlLAorCQkJCSh2b2lkICopcG9ydCwgRkNfTUFYX1BEVVNaLCAwKTsgLyogbm8gcmVwb25zZQorCQkJCQkJCQkgKiBleHBlY3RlZAorCQkJCQkJCQkgKi8KKworCXJldHVybiBCRkFfU1RBVFVTX09LOworfQorCisvKgorICogIEFkaXNjIEFjYyBSZXNwb25zZQorICogV2UgZG9ub3QgZG8gYW55IHByb2Nlc3NpbmcgaGVyZS4KKyAqLwordm9pZAorYmZhX2Zjc19wb3J0X2xvb3BfYWRpc2NfYWNjX3Jlc3BvbnNlKHZvaWQgKmZjc2FyZywgc3RydWN0IGJmYV9mY3hwX3MgKmZjeHAsCisJCQkJICAgICB2b2lkICpjYmFyZywgYmZhX3N0YXR1c190IHJlcV9zdGF0dXMsCisJCQkJICAgICB1MzIgcnNwX2xlbiwgdTMyIHJlc2lkX2xlbiwKKwkJCQkgICAgIHN0cnVjdCBmY2hzX3MgKnJzcF9mY2hzKQoreworCisJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0ID0gKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqKSBjYmFyZzsKKworCWJmYV90cmMocG9ydC0+ZmNzLCBwb3J0LT5waWQpOworCisJLyoKKwkgKiBTYW5pdHkgQ2hlY2tzCisJICovCisJaWYgKHJlcV9zdGF0dXMgIT0gQkZBX1NUQVRVU19PSykgeworCQliZmFfdHJjKHBvcnQtPmZjcywgcmVxX3N0YXR1cyk7CisJCXJldHVybjsKKwl9Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2xwb3J0X2FwaS5jIGIvZHJpdmVycy9zY3NpL2JmYS9scG9ydF9hcGkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZjUxYTgzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9scG9ydF9hcGkuYwpAQCAtMCwwICsxLDI5MSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisvKioKKyAqICBwb3J0X2FwaS5jIEJGQSBGQ1MgcG9ydAorICovCisKKyNpbmNsdWRlIDxmY3MvYmZhX2Zjcy5oPgorI2luY2x1ZGUgPGZjcy9iZmFfZmNzX2xwb3J0Lmg+CisjaW5jbHVkZSA8ZmNzL2JmYV9mY3NfcnBvcnQuaD4KKyNpbmNsdWRlICJmY3NfcnBvcnQuaCIKKyNpbmNsdWRlICJmY3NfZmFicmljLmgiCisjaW5jbHVkZSAiZmNzX3RyY21vZC5oIgorI2luY2x1ZGUgImZjc192cG9ydC5oIgorCitCRkFfVFJDX0ZJTEUoRkNTLCBQT1JUX0FQSSk7CisKKworCisvKioKKyAqICBmY3NfcG9ydF9hcGkgQkZBIEZDUyBwb3J0IEFQSQorICovCisKK3ZvaWQKK2JmYV9mY3NfY2ZnX2Jhc2VfcG9ydChzdHJ1Y3QgYmZhX2Zjc19zICpmY3MsIHN0cnVjdCBiZmFfcG9ydF9jZmdfcyAqcG9ydF9jZmcpCit7Cit9CisKK3N0cnVjdCBiZmFfZmNzX3BvcnRfcyAqCitiZmFfZmNzX2dldF9iYXNlX3BvcnQoc3RydWN0IGJmYV9mY3NfcyAqZmNzKQoreworCXJldHVybiAoJmZjcy0+ZmFicmljLmJwb3J0KTsKK30KKword3duX3QKK2JmYV9mY3NfcG9ydF9nZXRfcnBvcnQoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LCB3d25fdCB3d24sIGludCBpbmRleCwKKwkJICAgICAgIGludCBucnBvcnRzLCBiZmFfYm9vbGVhbl90IGJ3d24pCit7CisJc3RydWN0IGxpc3RfaGVhZCAqcWgsICpxZTsKKwlzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCA9IE5VTEw7CisJaW50ICAgICAgICAgICAgIGk7CisJc3RydWN0IGJmYV9mY3NfcyAqZmNzOworCisJaWYgKHBvcnQgPT0gTlVMTCB8fCBucnBvcnRzID09IDApCisJCXJldHVybiAod3duX3QpIDA7CisKKwlmY3MgPSBwb3J0LT5mY3M7CisJYmZhX3RyYyhmY3MsICh1MzIpIG5ycG9ydHMpOworCisJaSA9IDA7CisJcWggPSAmcG9ydC0+cnBvcnRfcTsKKwlxZSA9IGJmYV9xX2ZpcnN0KHFoKTsKKworCXdoaWxlICgocWUgIT0gcWgpICYmIChpIDwgbnJwb3J0cykpIHsKKwkJcnBvcnQgPSAoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqKXFlOworCQlpZiAoYmZhX29zX250b2gzYihycG9ydC0+cGlkKSA+IDB4RkZGMDAwKSB7CisJCQlxZSA9IGJmYV9xX25leHQocWUpOworCQkJYmZhX3RyYyhmY3MsICh1MzIpIHJwb3J0LT5wd3duKTsKKwkJCWJmYV90cmMoZmNzLCBycG9ydC0+cGlkKTsKKwkJCWJmYV90cmMoZmNzLCBpKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKGJ3d24pIHsKKwkJCWlmICghbWVtY21wKCZ3d24sICZycG9ydC0+cHd3biwgOCkpCisJCQkJYnJlYWs7CisJCX0gZWxzZSB7CisJCQlpZiAoaSA9PSBpbmRleCkKKwkJCQlicmVhazsKKwkJfQorCisJCWkrKzsKKwkJcWUgPSBiZmFfcV9uZXh0KHFlKTsKKwl9CisKKwliZmFfdHJjKGZjcywgaSk7CisJaWYgKHJwb3J0KSB7CisJCXJldHVybiBycG9ydC0+cHd3bjsKKwl9IGVsc2UgeworCQlyZXR1cm4gKHd3bl90KSAwOworCX0KK30KKwordm9pZAorYmZhX2Zjc19wb3J0X2dldF9ycG9ydHMoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LCB3d25fdCBycG9ydF93d25zW10sCisJCQlpbnQgKm5ycG9ydHMpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqcWgsICpxZTsKKwlzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCA9IE5VTEw7CisJaW50ICAgICAgICAgICAgIGk7CisJc3RydWN0IGJmYV9mY3NfcyAqZmNzOworCisJaWYgKHBvcnQgPT0gTlVMTCB8fCBycG9ydF93d25zID09IE5VTEwgfHwgKm5ycG9ydHMgPT0gMCkKKwkJcmV0dXJuOworCisJZmNzID0gcG9ydC0+ZmNzOworCWJmYV90cmMoZmNzLCAodTMyKSAqbnJwb3J0cyk7CisKKwlpID0gMDsKKwlxaCA9ICZwb3J0LT5ycG9ydF9xOworCXFlID0gYmZhX3FfZmlyc3QocWgpOworCisJd2hpbGUgKChxZSAhPSBxaCkgJiYgKGkgPCAqbnJwb3J0cykpIHsKKwkJcnBvcnQgPSAoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqKXFlOworCQlpZiAoYmZhX29zX250b2gzYihycG9ydC0+cGlkKSA+IDB4RkZGMDAwKSB7CisJCQlxZSA9IGJmYV9xX25leHQocWUpOworCQkJYmZhX3RyYyhmY3MsICh1MzIpIHJwb3J0LT5wd3duKTsKKwkJCWJmYV90cmMoZmNzLCBycG9ydC0+cGlkKTsKKwkJCWJmYV90cmMoZmNzLCBpKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJcnBvcnRfd3duc1tpXSA9IHJwb3J0LT5wd3duOworCisJCWkrKzsKKwkJcWUgPSBiZmFfcV9uZXh0KHFlKTsKKwl9CisKKwliZmFfdHJjKGZjcywgaSk7CisJKm5ycG9ydHMgPSBpOworCXJldHVybjsKK30KKworLyoKKyAqIEl0ZXJhdGUncyB0aHJvdWdoIGFsbCB0aGUgcnBvcnQncyBpbiB0aGUgZ2l2ZW4gcG9ydCB0bworICogZGV0ZXJtaW5lIHRoZSBtYXhpbXVtIG9wZXJhdGluZyBzcGVlZC4KKyAqLworZW51bSBiZmFfcHBvcnRfc3BlZWQKK2JmYV9mY3NfcG9ydF9nZXRfcnBvcnRfbWF4X3NwZWVkKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCkKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICpxaCwgKnFlOworCXN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0ID0gTlVMTDsKKwlzdHJ1Y3QgYmZhX2Zjc19zICpmY3M7CisJZW51bSBiZmFfcHBvcnRfc3BlZWQgbWF4X3NwZWVkID0gMDsKKwlzdHJ1Y3QgYmZhX3Bwb3J0X2F0dHJfcyBwcG9ydF9hdHRyOworCWVudW0gYmZhX3Bwb3J0X3NwZWVkIHBwb3J0X3NwZWVkOworCisJaWYgKHBvcnQgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwlmY3MgPSBwb3J0LT5mY3M7CisKKwkvKgorCSAqIEdldCBQaHlzaWNhbCBwb3J0J3MgY3VycmVudCBzcGVlZAorCSAqLworCWJmYV9wcG9ydF9nZXRfYXR0cihwb3J0LT5mY3MtPmJmYSwgJnBwb3J0X2F0dHIpOworCXBwb3J0X3NwZWVkID0gcHBvcnRfYXR0ci5zcGVlZDsKKwliZmFfdHJjKGZjcywgcHBvcnRfc3BlZWQpOworCisJcWggPSAmcG9ydC0+cnBvcnRfcTsKKwlxZSA9IGJmYV9xX2ZpcnN0KHFoKTsKKworCXdoaWxlIChxZSAhPSBxaCkgeworCQlycG9ydCA9IChzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICopcWU7CisJCWlmICgoYmZhX29zX250b2gzYihycG9ydC0+cGlkKSA+IDB4RkZGMDAwKQorCQkgICAgfHwgKGJmYV9mY3NfcnBvcnRfZ2V0X3N0YXRlKHJwb3J0KSA9PSBCRkFfUlBPUlRfT0ZGTElORSkpIHsKKwkJCXFlID0gYmZhX3FfbmV4dChxZSk7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmICgocnBvcnQtPnJwZi5ycHNjX3NwZWVkID09IEJGQV9QUE9SVF9TUEVFRF84R0JQUykKKwkJICAgIHx8IChycG9ydC0+cnBmLnJwc2Nfc3BlZWQgPiBwcG9ydF9zcGVlZCkpIHsKKwkJCW1heF9zcGVlZCA9IHJwb3J0LT5ycGYucnBzY19zcGVlZDsKKwkJCWJyZWFrOworCQl9IGVsc2UgaWYgKHJwb3J0LT5ycGYucnBzY19zcGVlZCA+IG1heF9zcGVlZCkgeworCQkJbWF4X3NwZWVkID0gcnBvcnQtPnJwZi5ycHNjX3NwZWVkOworCQl9CisKKwkJcWUgPSBiZmFfcV9uZXh0KHFlKTsKKwl9CisKKwliZmFfdHJjKGZjcywgbWF4X3NwZWVkKTsKKwlyZXR1cm4gbWF4X3NwZWVkOworfQorCitzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKgorYmZhX2Zjc19sb29rdXBfcG9ydChzdHJ1Y3QgYmZhX2Zjc19zICpmY3MsIHUxNiB2Zl9pZCwgd3duX3QgbHB3d24pCit7CisJc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqdnBvcnQ7CisJYmZhX2Zjc192Zl90ICAgKnZmOworCisJYmZhX2Fzc2VydChmY3MgIT0gTlVMTCk7CisKKwl2ZiA9IGJmYV9mY3NfdmZfbG9va3VwKGZjcywgdmZfaWQpOworCWlmICh2ZiA9PSBOVUxMKSB7CisJCWJmYV90cmMoZmNzLCB2Zl9pZCk7CisJCXJldHVybiAoTlVMTCk7CisJfQorCisJaWYgKCFscHd3biB8fCAodmYtPmJwb3J0LnBvcnRfY2ZnLnB3d24gPT0gbHB3d24pKQorCQlyZXR1cm4gKCZ2Zi0+YnBvcnQpOworCisJdnBvcnQgPSBiZmFfZmNzX2ZhYnJpY192cG9ydF9sb29rdXAodmYsIGxwd3duKTsKKwlpZiAodnBvcnQpCisJCXJldHVybiAoJnZwb3J0LT5scG9ydCk7CisKKwlyZXR1cm4gKE5VTEwpOworfQorCisvKgorICogIEFQSSBjb3JyZXNwb25kaW5nIHRvIFZtV2FyZSdzIE5QSVZfVlBPUlRfR0VUSU5GTy4KKyAqLwordm9pZAorYmZhX2Zjc19wb3J0X2dldF9pbmZvKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCwKKwkJICAgICAgc3RydWN0IGJmYV9wb3J0X2luZm9fcyAqcG9ydF9pbmZvKQoreworCisJYmZhX3RyYyhwb3J0LT5mY3MsIHBvcnQtPmZhYnJpYy0+ZmFicmljX25hbWUpOworCisJaWYgKHBvcnQtPnZwb3J0ID09IE5VTEwpIHsKKwkJLyoKKwkJICogVGhpcyBpcyBhIFBoeXNpY2FsIHBvcnQKKwkJICovCisJCXBvcnRfaW5mby0+cG9ydF90eXBlID0gQkZBX1BPUlRfVFlQRV9QSFlTSUNBTDsKKworCQkvKgorCQkgKiBAdG9kbyA6IG5lZWQgdG8gZml4IHRoZSBzdGF0ZSAmIHJlYXNvbgorCQkgKi8KKwkJcG9ydF9pbmZvLT5wb3J0X3N0YXRlID0gMDsKKwkJcG9ydF9pbmZvLT5vZmZsaW5lX3JlYXNvbiA9IDA7CisKKwkJcG9ydF9pbmZvLT5wb3J0X3d3biA9IGJmYV9mY3NfcG9ydF9nZXRfcHd3bihwb3J0KTsKKwkJcG9ydF9pbmZvLT5ub2RlX3d3biA9IGJmYV9mY3NfcG9ydF9nZXRfbnd3bihwb3J0KTsKKworCQlwb3J0X2luZm8tPm1heF92cG9ydHNfc3VwcCA9IGJmYV9mY3NfdnBvcnRfZ2V0X21heChwb3J0LT5mY3MpOworCQlwb3J0X2luZm8tPm51bV92cG9ydHNfaW51c2UgPQorCQkJYmZhX2Zjc19mYWJyaWNfdnBvcnRfY291bnQocG9ydC0+ZmFicmljKTsKKwkJcG9ydF9pbmZvLT5tYXhfcnBvcnRzX3N1cHAgPSBCRkFfRkNTX01BWF9SUE9SVFNfU1VQUDsKKwkJcG9ydF9pbmZvLT5udW1fcnBvcnRzX2ludXNlID0gcG9ydC0+bnVtX3Jwb3J0czsKKwl9IGVsc2UgeworCQkvKgorCQkgKiBUaGlzIGlzIGEgdmlydHVhbCBwb3J0CisJCSAqLworCQlwb3J0X2luZm8tPnBvcnRfdHlwZSA9IEJGQV9QT1JUX1RZUEVfVklSVFVBTDsKKworCQkvKgorCQkgKiBAdG9kbyA6IG5lZWQgdG8gZml4IHRoZSBzdGF0ZSAmIHJlYXNvbgorCQkgKi8KKwkJcG9ydF9pbmZvLT5wb3J0X3N0YXRlID0gMDsKKwkJcG9ydF9pbmZvLT5vZmZsaW5lX3JlYXNvbiA9IDA7CisKKwkJcG9ydF9pbmZvLT5wb3J0X3d3biA9IGJmYV9mY3NfcG9ydF9nZXRfcHd3bihwb3J0KTsKKwkJcG9ydF9pbmZvLT5ub2RlX3d3biA9IGJmYV9mY3NfcG9ydF9nZXRfbnd3bihwb3J0KTsKKwl9Cit9CisKK3ZvaWQKK2JmYV9mY3NfcG9ydF9nZXRfc3RhdHMoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpmY3NfcG9ydCwKKwkJICAgICAgIHN0cnVjdCBiZmFfcG9ydF9zdGF0c19zICpwb3J0X3N0YXRzKQoreworCWJmYV9vc19tZW1jcHkocG9ydF9zdGF0cywgJmZjc19wb3J0LT5zdGF0cywKKwkJICAgICAgc2l6ZW9mKHN0cnVjdCBiZmFfcG9ydF9zdGF0c19zKSk7CisJcmV0dXJuOworfQorCit2b2lkCitiZmFfZmNzX3BvcnRfY2xlYXJfc3RhdHMoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpmY3NfcG9ydCkKK3sKKwliZmFfb3NfbWVtc2V0KCZmY3NfcG9ydC0+c3RhdHMsIDAsIHNpemVvZihzdHJ1Y3QgYmZhX3BvcnRfc3RhdHNfcykpOworCXJldHVybjsKK30KKwordm9pZAorYmZhX2Zjc19wb3J0X2VuYWJsZV9pcGZjX3JvbGVzKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqZmNzX3BvcnQpCit7CisJZmNzX3BvcnQtPnBvcnRfY2ZnLnJvbGVzIHw9IEJGQV9QT1JUX1JPTEVfRkNQX0lQRkM7CisJcmV0dXJuOworfQorCit2b2lkCitiZmFfZmNzX3BvcnRfZGlzYWJsZV9pcGZjX3JvbGVzKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqZmNzX3BvcnQpCit7CisJZmNzX3BvcnQtPnBvcnRfY2ZnLnJvbGVzICY9IH5CRkFfUE9SVF9ST0xFX0ZDUF9JUEZDOworCXJldHVybjsKK30KKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2xwb3J0X3ByaXYuaCBiL2RyaXZlcnMvc2NzaS9iZmEvbHBvcnRfcHJpdi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiYWUzNzAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2xwb3J0X3ByaXYuaApAQCAtMCwwICsxLDgyIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX19WUF9QUklWX0hfXworI2RlZmluZSBfX1ZQX1BSSVZfSF9fCisKKyNpbmNsdWRlIDxmY3MvYmZhX2Zjc19scG9ydC5oPgorI2luY2x1ZGUgPGZjcy9iZmFfZmNzX3Zwb3J0Lmg+CisKKy8qCisgKiBGdW5jdGlvbnMgZXhwb3J0ZWQgYnkgdnBzCisgKi8KK3ZvaWQgICAgICAgICAgICBiZmFfZmNzX3Zwb3J0X2luaXQoc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqdnBvcnQpOworCisvKgorICogRnVuY3Rpb25zIGV4cG9ydGVkIGJ5IHZwcworICovCit2b2lkICAgICAgICAgICAgYmZhX2Zjc192cHNfb25saW5lKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCk7Cit2b2lkICAgICAgICAgICAgYmZhX2Zjc192cHNfb2ZmbGluZShzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQpOwordm9pZCAgICAgICAgICAgIGJmYV9mY3NfdnBzX2xpcChzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQpOworCisvKgorICogRnVuY3Rpb25zIGV4cG9ydGVkIGJ5IHBvcnRfZmFiCisgKi8KK3ZvaWQgICAgICAgICAgICBiZmFfZmNzX3BvcnRfZmFiX2luaXQoc3RydWN0IGJmYV9mY3NfcG9ydF9zICp2cG9ydCk7Cit2b2lkICAgICAgICAgICAgYmZhX2Zjc19wb3J0X2ZhYl9vbmxpbmUoc3RydWN0IGJmYV9mY3NfcG9ydF9zICp2cG9ydCk7Cit2b2lkICAgICAgICAgICAgYmZhX2Zjc19wb3J0X2ZhYl9vZmZsaW5lKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqdnBvcnQpOwordm9pZCAgICAgICAgICAgIGJmYV9mY3NfcG9ydF9mYWJfcnhfZnJhbWUoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LAorCQkJCQkgIHU4ICpyeF9mcmFtZSwgdTMyIGxlbik7CisKKy8qCisgKiBGdW5jdGlvbnMgZXhwb3J0ZWQgYnkgVlAtTlMuCisgKi8KK3ZvaWQgICAgICAgICAgICBiZmFfZmNzX3BvcnRfbnNfaW5pdChzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnZwb3J0KTsKK3ZvaWQgICAgICAgICAgICBiZmFfZmNzX3BvcnRfbnNfb2ZmbGluZShzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnZwb3J0KTsKK3ZvaWQgICAgICAgICAgICBiZmFfZmNzX3BvcnRfbnNfb25saW5lKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqdnBvcnQpOwordm9pZCAgICAgICAgICAgIGJmYV9mY3NfcG9ydF9uc19xdWVyeShzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQpOworCisvKgorICogRnVuY3Rpb25zIGV4cG9ydGVkIGJ5IFZQLVNDTgorICovCit2b2lkICAgICAgICAgICAgYmZhX2Zjc19wb3J0X3Njbl9pbml0KHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqdnBvcnQpOwordm9pZCAgICAgICAgICAgIGJmYV9mY3NfcG9ydF9zY25fb2ZmbGluZShzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnZwb3J0KTsKK3ZvaWQgICAgICAgICAgICBiZmFfZmNzX3BvcnRfc2NuX29ubGluZShzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnZwb3J0KTsKK3ZvaWQgICAgICAgICAgICBiZmFfZmNzX3BvcnRfc2NuX3Byb2Nlc3NfcnNjbihzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQsCisJCQkJCSAgICAgIHN0cnVjdCBmY2hzX3MgKnJ4X2ZyYW1lLCB1MzIgbGVuKTsKKworLyoKKyAqIEZ1bmN0aW9ucyBleHBvcnRlZCBieSBWUC1OMk4KKyAqLworCit2b2lkICAgICAgICAgICAgYmZhX2Zjc19wb3J0X24ybl9pbml0KHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCk7Cit2b2lkICAgICAgICAgICAgYmZhX2Zjc19wb3J0X24ybl9vbmxpbmUoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0KTsKK3ZvaWQgICAgICAgICAgICBiZmFfZmNzX3BvcnRfbjJuX29mZmxpbmUoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0KTsKK3ZvaWQgICAgICAgICAgICBiZmFfZmNzX3BvcnRfbjJuX3J4X2ZyYW1lKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCwKKwkJCQkJICB1OCAqcnhfZnJhbWUsIHUzMiBsZW4pOworCisvKgorICogRnVuY3Rpb25zIGV4cG9ydGVkIGJ5IFZQLUxPT1AKKyAqLwordm9pZCAgICAgICAgICAgIGJmYV9mY3NfcG9ydF9sb29wX2luaXQoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0KTsKK3ZvaWQgICAgICAgICAgICBiZmFfZmNzX3BvcnRfbG9vcF9vbmxpbmUoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0KTsKK3ZvaWQgICAgICAgICAgICBiZmFfZmNzX3BvcnRfbG9vcF9vZmZsaW5lKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCk7Cit2b2lkICAgICAgICAgICAgYmZhX2Zjc19wb3J0X2xvb3BfbGlwKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCk7Cit2b2lkICAgICAgICAgICAgYmZhX2Zjc19wb3J0X2xvb3BfcnhfZnJhbWUoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LAorCQkJCQkgICB1OCAqcnhfZnJhbWUsIHUzMiBsZW4pOworCisjZW5kaWYgLyogX19WUF9QUklWX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9tcy5jIGIvZHJpdmVycy9zY3NpL2JmYS9tcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5NmIzY2EKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL21zLmMKQEAgLTAsMCArMSw3NTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworCisjaW5jbHVkZSA8YmZhLmg+CisjaW5jbHVkZSA8YmZhX3N2Yy5oPgorI2luY2x1ZGUgImZjc19scG9ydC5oIgorI2luY2x1ZGUgImZjc19ycG9ydC5oIgorI2luY2x1ZGUgImZjc190cmNtb2QuaCIKKyNpbmNsdWRlICJmY3NfZmN4cC5oIgorI2luY2x1ZGUgImxwb3J0X3ByaXYuaCIKKworQkZBX1RSQ19GSUxFKEZDUywgTVMpOworCisjZGVmaW5lIEJGQV9GQ1NfTVNfQ01EX01BWF9SRVRSSUVTICAyCisvKgorICogZm9yd2FyZCBkZWNsYXJhdGlvbnMKKyAqLworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9tc19zZW5kX3Bsb2dpKHZvaWQgKm1zX2NiYXJnLAorCQkJCQkgICBzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cF9hbGxvY2VkKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3BvcnRfbXNfdGltZW91dCh2b2lkICphcmcpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9tc19wbG9naV9yZXNwb25zZSh2b2lkICpmY3NhcmcsCisJCQkJCSAgICAgICBzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cCwKKwkJCQkJICAgICAgIHZvaWQgKmNiYXJnLAorCQkJCQkgICAgICAgYmZhX3N0YXR1c190IHJlcV9zdGF0dXMsCisJCQkJCSAgICAgICB1MzIgcnNwX2xlbiwKKwkJCQkJICAgICAgIHUzMiByZXNpZF9sZW4sCisJCQkJCSAgICAgICBzdHJ1Y3QgZmNoc19zICpyc3BfZmNocyk7CisKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3BvcnRfbXNfc2VuZF9nbWFsKHZvaWQgKm1zX2NiYXJnLAorCQkJCQkgIHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwX2FsbG9jZWQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9tc19nbWFsX3Jlc3BvbnNlKHZvaWQgKmZjc2FyZywKKwkJCQkJICAgICAgc3RydWN0IGJmYV9mY3hwX3MgKmZjeHAsCisJCQkJCSAgICAgIHZvaWQgKmNiYXJnLAorCQkJCQkgICAgICBiZmFfc3RhdHVzX3QgcmVxX3N0YXR1cywKKwkJCQkJICAgICAgdTMyIHJzcF9sZW4sCisJCQkJCSAgICAgIHUzMiByZXNpZF9sZW4sCisJCQkJCSAgICAgIHN0cnVjdCBmY2hzX3MgKnJzcF9mY2hzKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3BvcnRfbXNfc2VuZF9nZm4odm9pZCAqbXNfY2JhcmcsCisJCQkJCSBzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cF9hbGxvY2VkKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3BvcnRfbXNfZ2ZuX3Jlc3BvbnNlKHZvaWQgKmZjc2FyZywKKwkJCQkJICAgICBzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cCwKKwkJCQkJICAgICB2b2lkICpjYmFyZywKKwkJCQkJICAgICBiZmFfc3RhdHVzX3QgcmVxX3N0YXR1cywKKwkJCQkJICAgICB1MzIgcnNwX2xlbiwKKwkJCQkJICAgICB1MzIgcmVzaWRfbGVuLAorCQkJCQkgICAgIHN0cnVjdCBmY2hzX3MgKnJzcF9mY2hzKTsKKy8qKgorICogIGZjc19tc19zbSBGQ1MgTVMgc3RhdGUgbWFjaGluZQorICovCisKKy8qKgorICogIE1TIFN0YXRlIE1hY2hpbmUgZXZlbnRzCisgKi8KK2VudW0gcG9ydF9tc19ldmVudCB7CisJTVNTTV9FVkVOVF9QT1JUX09OTElORSA9IDEsCisJTVNTTV9FVkVOVF9QT1JUX09GRkxJTkUgPSAyLAorCU1TU01fRVZFTlRfUlNQX09LID0gMywKKwlNU1NNX0VWRU5UX1JTUF9FUlJPUiA9IDQsCisJTVNTTV9FVkVOVF9USU1FT1VUID0gNSwKKwlNU1NNX0VWRU5UX0ZDWFBfU0VOVCA9IDYsCisJTVNTTV9FVkVOVF9QT1JUX0ZBQlJJQ19SU0NOID0gNworfTsKKworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9tc19zbV9vZmZsaW5lKHN0cnVjdCBiZmFfZmNzX3BvcnRfbXNfcyAqbXMsCisJCQkJCSAgIGVudW0gcG9ydF9tc19ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X21zX3NtX3Bsb2dpX3NlbmRpbmcoc3RydWN0IGJmYV9mY3NfcG9ydF9tc19zICptcywKKwkJCQkJCSBlbnVtIHBvcnRfbXNfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9tc19zbV9wbG9naShzdHJ1Y3QgYmZhX2Zjc19wb3J0X21zX3MgKm1zLAorCQkJCQkgZW51bSBwb3J0X21zX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3BvcnRfbXNfc21fcGxvZ2lfcmV0cnkoc3RydWN0IGJmYV9mY3NfcG9ydF9tc19zICptcywKKwkJCQkJICAgICAgIGVudW0gcG9ydF9tc19ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X21zX3NtX2dtYWxfc2VuZGluZyhzdHJ1Y3QgYmZhX2Zjc19wb3J0X21zX3MgKm1zLAorCQkJCQkJZW51bSBwb3J0X21zX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3BvcnRfbXNfc21fZ21hbChzdHJ1Y3QgYmZhX2Zjc19wb3J0X21zX3MgKm1zLAorCQkJCQllbnVtIHBvcnRfbXNfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9tc19zbV9nbWFsX3JldHJ5KHN0cnVjdCBiZmFfZmNzX3BvcnRfbXNfcyAqbXMsCisJCQkJCSAgICAgIGVudW0gcG9ydF9tc19ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X21zX3NtX2dmbl9zZW5kaW5nKHN0cnVjdCBiZmFfZmNzX3BvcnRfbXNfcyAqbXMsCisJCQkJCSAgICAgICBlbnVtIHBvcnRfbXNfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9tc19zbV9nZm4oc3RydWN0IGJmYV9mY3NfcG9ydF9tc19zICptcywKKwkJCQkgICAgICAgZW51bSBwb3J0X21zX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3BvcnRfbXNfc21fZ2ZuX3JldHJ5KHN0cnVjdCBiZmFfZmNzX3BvcnRfbXNfcyAqbXMsCisJCQkJCSAgICAgZW51bSBwb3J0X21zX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3BvcnRfbXNfc21fb25saW5lKHN0cnVjdCBiZmFfZmNzX3BvcnRfbXNfcyAqbXMsCisJCQkJCSAgZW51bSBwb3J0X21zX2V2ZW50IGV2ZW50KTsKKy8qKgorICogCQlTdGFydCBpbiBvZmZsaW5lIHN0YXRlIC0gYXdhaXRpbmcgTlMgdG8gc2VuZCBzdGFydC4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9tc19zbV9vZmZsaW5lKHN0cnVjdCBiZmFfZmNzX3BvcnRfbXNfcyAqbXMsCisJCQkgICBlbnVtIHBvcnRfbXNfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhtcy0+cG9ydC0+ZmNzLCBtcy0+cG9ydC0+cG9ydF9jZmcucHd3bik7CisJYmZhX3RyYyhtcy0+cG9ydC0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBNU1NNX0VWRU5UX1BPUlRfT05MSU5FOgorCQliZmFfc21fc2V0X3N0YXRlKG1zLCBiZmFfZmNzX3BvcnRfbXNfc21fcGxvZ2lfc2VuZGluZyk7CisJCWJmYV9mY3NfcG9ydF9tc19zZW5kX3Bsb2dpKG1zLCBOVUxMKTsKKwkJYnJlYWs7CisKKwljYXNlIE1TU01fRVZFTlRfUE9SVF9PRkZMSU5FOgorCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X21zX3NtX3Bsb2dpX3NlbmRpbmcoc3RydWN0IGJmYV9mY3NfcG9ydF9tc19zICptcywKKwkJCQkgZW51bSBwb3J0X21zX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMobXMtPnBvcnQtPmZjcywgbXMtPnBvcnQtPnBvcnRfY2ZnLnB3d24pOworCWJmYV90cmMobXMtPnBvcnQtPmZjcywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgTVNTTV9FVkVOVF9GQ1hQX1NFTlQ6CisJCWJmYV9zbV9zZXRfc3RhdGUobXMsIGJmYV9mY3NfcG9ydF9tc19zbV9wbG9naSk7CisJCWJyZWFrOworCisJY2FzZSBNU1NNX0VWRU5UX1BPUlRfT0ZGTElORToKKwkJYmZhX3NtX3NldF9zdGF0ZShtcywgYmZhX2Zjc19wb3J0X21zX3NtX29mZmxpbmUpOworCQliZmFfZmN4cF93YWxsb2NfY2FuY2VsKEJGQV9GQ1NfR0VUX0hBTF9GUk9NX1BPUlQobXMtPnBvcnQpLAorCQkJCSAgICAgICAmbXMtPmZjeHBfd3FlKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9tc19zbV9wbG9naShzdHJ1Y3QgYmZhX2Zjc19wb3J0X21zX3MgKm1zLCBlbnVtIHBvcnRfbXNfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhtcy0+cG9ydC0+ZmNzLCBtcy0+cG9ydC0+cG9ydF9jZmcucHd3bik7CisJYmZhX3RyYyhtcy0+cG9ydC0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBNU1NNX0VWRU5UX1JTUF9FUlJPUjoKKwkJLyoKKwkJICogU3RhcnQgdGltZXIgZm9yIGEgZGVsYXllZCByZXRyeQorCQkgKi8KKwkJYmZhX3NtX3NldF9zdGF0ZShtcywgYmZhX2Zjc19wb3J0X21zX3NtX3Bsb2dpX3JldHJ5KTsKKwkJYmZhX3RpbWVyX3N0YXJ0KEJGQV9GQ1NfR0VUX0hBTF9GUk9NX1BPUlQobXMtPnBvcnQpLCAmbXMtPnRpbWVyLAorCQkJCWJmYV9mY3NfcG9ydF9tc190aW1lb3V0LCBtcywKKwkJCQlCRkFfRkNTX1JFVFJZX1RJTUVPVVQpOworCQlicmVhazsKKworCWNhc2UgTVNTTV9FVkVOVF9SU1BfT0s6CisJCS8qCisJCSAqIHNpbmNlIHBsb2dpIGlzIGRvbmUsIG5vdyBpbnZva2UgTVMgcmVsYXRlZCBzdWItbW9kdWxlcworCQkgKi8KKwkJYmZhX2Zjc19wb3J0X2ZkbWlfb25saW5lKG1zKTsKKworCQkvKioKKwkJICogaWYgdGhpcyBpcyBhIFZwb3J0LCBnbyB0byBvbmxpbmUgc3RhdGUuCisJCSAqLworCQlpZiAobXMtPnBvcnQtPnZwb3J0KSB7CisJCQliZmFfc21fc2V0X3N0YXRlKG1zLCBiZmFfZmNzX3BvcnRfbXNfc21fb25saW5lKTsKKwkJCWJyZWFrOworCQl9CisKKwkJLyoKKwkJICogRm9yIGEgYmFzZSBwb3J0IHdlIG5lZWQgdG8gZ2V0IHRoZQorCQkgKiBzd2l0Y2gncyBJUCBhZGRyZXNzLgorCQkgKi8KKwkJYmZhX3NtX3NldF9zdGF0ZShtcywgYmZhX2Zjc19wb3J0X21zX3NtX2dtYWxfc2VuZGluZyk7CisJCWJmYV9mY3NfcG9ydF9tc19zZW5kX2dtYWwobXMsIE5VTEwpOworCQlicmVhazsKKworCWNhc2UgTVNTTV9FVkVOVF9QT1JUX09GRkxJTkU6CisJCWJmYV9zbV9zZXRfc3RhdGUobXMsIGJmYV9mY3NfcG9ydF9tc19zbV9vZmZsaW5lKTsKKwkJYmZhX2ZjeHBfZGlzY2FyZChtcy0+ZmN4cCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3BvcnRfbXNfc21fcGxvZ2lfcmV0cnkoc3RydWN0IGJmYV9mY3NfcG9ydF9tc19zICptcywKKwkJCSAgICAgICBlbnVtIHBvcnRfbXNfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhtcy0+cG9ydC0+ZmNzLCBtcy0+cG9ydC0+cG9ydF9jZmcucHd3bik7CisJYmZhX3RyYyhtcy0+cG9ydC0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBNU1NNX0VWRU5UX1RJTUVPVVQ6CisJCS8qCisJCSAqIFJldHJ5IFRpbWVyIEV4cGlyZWQuIFJlLXNlbmQKKwkJICovCisJCWJmYV9zbV9zZXRfc3RhdGUobXMsIGJmYV9mY3NfcG9ydF9tc19zbV9wbG9naV9zZW5kaW5nKTsKKwkJYmZhX2Zjc19wb3J0X21zX3NlbmRfcGxvZ2kobXMsIE5VTEwpOworCQlicmVhazsKKworCWNhc2UgTVNTTV9FVkVOVF9QT1JUX09GRkxJTkU6CisJCWJmYV9zbV9zZXRfc3RhdGUobXMsIGJmYV9mY3NfcG9ydF9tc19zbV9vZmZsaW5lKTsKKwkJYmZhX3RpbWVyX3N0b3AoJm1zLT50aW1lcik7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3BvcnRfbXNfc21fb25saW5lKHN0cnVjdCBiZmFfZmNzX3BvcnRfbXNfcyAqbXMsCisJCQkgIGVudW0gcG9ydF9tc19ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKG1zLT5wb3J0LT5mY3MsIG1zLT5wb3J0LT5wb3J0X2NmZy5wd3duKTsKKwliZmFfdHJjKG1zLT5wb3J0LT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIE1TU01fRVZFTlRfUE9SVF9PRkZMSU5FOgorCQliZmFfc21fc2V0X3N0YXRlKG1zLCBiZmFfZmNzX3BvcnRfbXNfc21fb2ZmbGluZSk7CisJCS8qCisJCSAqIG5vdyBpbnZva2UgTVMgcmVsYXRlZCBzdWItbW9kdWxlcworCQkgKi8KKwkJYmZhX2Zjc19wb3J0X2ZkbWlfb2ZmbGluZShtcyk7CisJCWJyZWFrOworCisJY2FzZSBNU1NNX0VWRU5UX1BPUlRfRkFCUklDX1JTQ046CisJCWJmYV9zbV9zZXRfc3RhdGUobXMsIGJmYV9mY3NfcG9ydF9tc19zbV9nZm5fc2VuZGluZyk7CisJCW1zLT5yZXRyeV9jbnQgPSAwOworCQliZmFfZmNzX3BvcnRfbXNfc2VuZF9nZm4obXMsIE5VTEwpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X21zX3NtX2dtYWxfc2VuZGluZyhzdHJ1Y3QgYmZhX2Zjc19wb3J0X21zX3MgKm1zLAorCQkJCWVudW0gcG9ydF9tc19ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKG1zLT5wb3J0LT5mY3MsIG1zLT5wb3J0LT5wb3J0X2NmZy5wd3duKTsKKwliZmFfdHJjKG1zLT5wb3J0LT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIE1TU01fRVZFTlRfRkNYUF9TRU5UOgorCQliZmFfc21fc2V0X3N0YXRlKG1zLCBiZmFfZmNzX3BvcnRfbXNfc21fZ21hbCk7CisJCWJyZWFrOworCisJY2FzZSBNU1NNX0VWRU5UX1BPUlRfT0ZGTElORToKKwkJYmZhX3NtX3NldF9zdGF0ZShtcywgYmZhX2Zjc19wb3J0X21zX3NtX29mZmxpbmUpOworCQliZmFfZmN4cF93YWxsb2NfY2FuY2VsKEJGQV9GQ1NfR0VUX0hBTF9GUk9NX1BPUlQobXMtPnBvcnQpLAorCQkJCSAgICAgICAmbXMtPmZjeHBfd3FlKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9tc19zbV9nbWFsKHN0cnVjdCBiZmFfZmNzX3BvcnRfbXNfcyAqbXMsIGVudW0gcG9ydF9tc19ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKG1zLT5wb3J0LT5mY3MsIG1zLT5wb3J0LT5wb3J0X2NmZy5wd3duKTsKKwliZmFfdHJjKG1zLT5wb3J0LT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIE1TU01fRVZFTlRfUlNQX0VSUk9SOgorCQkvKgorCQkgKiBTdGFydCB0aW1lciBmb3IgYSBkZWxheWVkIHJldHJ5CisJCSAqLworCQlpZiAobXMtPnJldHJ5X2NudCsrIDwgQkZBX0ZDU19NU19DTURfTUFYX1JFVFJJRVMpIHsKKwkJCWJmYV9zbV9zZXRfc3RhdGUobXMsIGJmYV9mY3NfcG9ydF9tc19zbV9nbWFsX3JldHJ5KTsKKwkJCWJmYV90aW1lcl9zdGFydChCRkFfRkNTX0dFVF9IQUxfRlJPTV9QT1JUKG1zLT5wb3J0KSwKKwkJCQkJJm1zLT50aW1lciwgYmZhX2Zjc19wb3J0X21zX3RpbWVvdXQsIG1zLAorCQkJCQlCRkFfRkNTX1JFVFJZX1RJTUVPVVQpOworCQl9IGVsc2UgeworCQkJYmZhX3NtX3NldF9zdGF0ZShtcywgYmZhX2Zjc19wb3J0X21zX3NtX2dmbl9zZW5kaW5nKTsKKwkJCWJmYV9mY3NfcG9ydF9tc19zZW5kX2dmbihtcywgTlVMTCk7CisJCQltcy0+cmV0cnlfY250ID0gMDsKKwkJfQorCQlicmVhazsKKworCWNhc2UgTVNTTV9FVkVOVF9SU1BfT0s6CisJCWJmYV9zbV9zZXRfc3RhdGUobXMsIGJmYV9mY3NfcG9ydF9tc19zbV9nZm5fc2VuZGluZyk7CisJCWJmYV9mY3NfcG9ydF9tc19zZW5kX2dmbihtcywgTlVMTCk7CisJCWJyZWFrOworCisJY2FzZSBNU1NNX0VWRU5UX1BPUlRfT0ZGTElORToKKwkJYmZhX3NtX3NldF9zdGF0ZShtcywgYmZhX2Zjc19wb3J0X21zX3NtX29mZmxpbmUpOworCQliZmFfZmN4cF9kaXNjYXJkKG1zLT5mY3hwKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9tc19zbV9nbWFsX3JldHJ5KHN0cnVjdCBiZmFfZmNzX3BvcnRfbXNfcyAqbXMsCisJCQkgICAgICBlbnVtIHBvcnRfbXNfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhtcy0+cG9ydC0+ZmNzLCBtcy0+cG9ydC0+cG9ydF9jZmcucHd3bik7CisJYmZhX3RyYyhtcy0+cG9ydC0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBNU1NNX0VWRU5UX1RJTUVPVVQ6CisJCS8qCisJCSAqIFJldHJ5IFRpbWVyIEV4cGlyZWQuIFJlLXNlbmQKKwkJICovCisJCWJmYV9zbV9zZXRfc3RhdGUobXMsIGJmYV9mY3NfcG9ydF9tc19zbV9nbWFsX3NlbmRpbmcpOworCQliZmFfZmNzX3BvcnRfbXNfc2VuZF9nbWFsKG1zLCBOVUxMKTsKKwkJYnJlYWs7CisKKwljYXNlIE1TU01fRVZFTlRfUE9SVF9PRkZMSU5FOgorCQliZmFfc21fc2V0X3N0YXRlKG1zLCBiZmFfZmNzX3BvcnRfbXNfc21fb2ZmbGluZSk7CisJCWJmYV90aW1lcl9zdG9wKCZtcy0+dGltZXIpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqICBtc19wdnQgTVMgbG9jYWwgZnVuY3Rpb25zCisgKi8KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9tc19zZW5kX2dtYWwodm9pZCAqbXNfY2JhcmcsIHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwX2FsbG9jZWQpCit7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9tc19zICptcyA9IG1zX2NiYXJnOworCXN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCA9IG1zLT5wb3J0OworCXN0cnVjdCBmY2hzX3MgICAgICAgICAgZmNoczsKKwlpbnQgICAgICAgICAgICAgbGVuOworCXN0cnVjdCBiZmFfZmN4cF9zICpmY3hwOworCisJYmZhX3RyYyhwb3J0LT5mY3MsIHBvcnQtPnBpZCk7CisKKwlmY3hwID0gZmN4cF9hbGxvY2VkID8gZmN4cF9hbGxvY2VkIDogYmZhX2Zjc19mY3hwX2FsbG9jKHBvcnQtPmZjcyk7CisJaWYgKCFmY3hwKSB7CisJCWJmYV9mY3hwX2FsbG9jX3dhaXQocG9ydC0+ZmNzLT5iZmEsICZtcy0+ZmN4cF93cWUsCisJCQkJICAgIGJmYV9mY3NfcG9ydF9tc19zZW5kX2dtYWwsIG1zKTsKKwkJcmV0dXJuOworCX0KKwltcy0+ZmN4cCA9IGZjeHA7CisKKwlsZW4gPSBmY19nbWFsX3JlcV9idWlsZCgmZmNocywgYmZhX2ZjeHBfZ2V0X3JlcWJ1ZihmY3hwKSwKKwkJCQliZmFfZmNzX3BvcnRfZ2V0X2ZjaWQocG9ydCksCisJCQkJYmZhX2xwc19nZXRfcGVlcl9ud3duKHBvcnQtPmZhYnJpYy0+bHBzKSk7CisKKwliZmFfZmN4cF9zZW5kKGZjeHAsIE5VTEwsIHBvcnQtPmZhYnJpYy0+dmZfaWQsIHBvcnQtPmxwX3RhZywgQkZBX0ZBTFNFLAorCQkgICAgICBGQ19DTEFTU18zLCBsZW4sICZmY2hzLCBiZmFfZmNzX3BvcnRfbXNfZ21hbF9yZXNwb25zZSwKKwkJICAgICAgKHZvaWQgKiltcywgRkNfTUFYX1BEVVNaLCBGQ19SQV9UT1YpOworCisJYmZhX3NtX3NlbmRfZXZlbnQobXMsIE1TU01fRVZFTlRfRkNYUF9TRU5UKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9tc19nbWFsX3Jlc3BvbnNlKHZvaWQgKmZjc2FyZywgc3RydWN0IGJmYV9mY3hwX3MgKmZjeHAsCisJCQkgICAgICB2b2lkICpjYmFyZywgYmZhX3N0YXR1c190IHJlcV9zdGF0dXMsCisJCQkgICAgICB1MzIgcnNwX2xlbiwgdTMyIHJlc2lkX2xlbiwKKwkJCSAgICAgIHN0cnVjdCBmY2hzX3MgKnJzcF9mY2hzKQoreworCXN0cnVjdCBiZmFfZmNzX3BvcnRfbXNfcyAqbXMgPSAoc3RydWN0IGJmYV9mY3NfcG9ydF9tc19zICopY2Jhcmc7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0ID0gbXMtPnBvcnQ7CisJc3RydWN0IGN0X2hkcl9zICAgICAgICpjdGhkciA9IE5VTEw7CisJc3RydWN0IGZjZ3NfZ21hbF9yZXNwX3MgKmdtYWxfcmVzcDsKKwlzdHJ1Y3QgZmNfZ21hbF9lbnRyeV9zICpnbWFsX2VudHJ5OworCXUzMiAgICAgICAgbnVtX2VudHJpZXM7CisJdTggICAgICAgICpyc3Bfc3RyOworCisJYmZhX3RyYyhwb3J0LT5mY3MsIHJlcV9zdGF0dXMpOworCWJmYV90cmMocG9ydC0+ZmNzLCBwb3J0LT5wb3J0X2NmZy5wd3duKTsKKworCS8qCisJICogU2FuaXR5IENoZWNrcworCSAqLworCWlmIChyZXFfc3RhdHVzICE9IEJGQV9TVEFUVVNfT0spIHsKKwkJYmZhX3RyYyhwb3J0LT5mY3MsIHJlcV9zdGF0dXMpOworCQliZmFfc21fc2VuZF9ldmVudChtcywgTVNTTV9FVkVOVF9SU1BfRVJST1IpOworCQlyZXR1cm47CisJfQorCisJY3RoZHIgPSAoc3RydWN0IGN0X2hkcl9zICopIEJGQV9GQ1hQX1JTUF9QTEQoZmN4cCk7CisJY3RoZHItPmNtZF9yc3BfY29kZSA9IGJmYV9vc19udG9ocyhjdGhkci0+Y21kX3JzcF9jb2RlKTsKKworCWlmIChjdGhkci0+Y21kX3JzcF9jb2RlID09IENUX1JTUF9BQ0NFUFQpIHsKKwkJZ21hbF9yZXNwID0gKHN0cnVjdCBmY2dzX2dtYWxfcmVzcF9zICopKGN0aGRyICsgMSk7CisJCW51bV9lbnRyaWVzID0gYmZhX29zX250b2hsKGdtYWxfcmVzcC0+bXNfbGVuKTsKKwkJaWYgKG51bV9lbnRyaWVzID09IDApIHsKKwkJCWJmYV9zbV9zZW5kX2V2ZW50KG1zLCBNU1NNX0VWRU5UX1JTUF9FUlJPUik7CisJCQlyZXR1cm47CisJCX0KKwkJLyoKKwkJICogVGhlIHJlc3BvbnNlIGNvdWxkIGNvbnRhaW4gbXVsdGlwbGUgRW50cmllcy4KKwkJICogRW50cmllcyBmb3IgU05NUCBpbnRlcmZhY2UsIGV0Yy4KKwkJICogV2UgbG9vayBmb3IgdGhlIGVudHJ5IHdpdGggYSB0ZWxuZXQgcHJlZml4LgorCQkgKiBGaXJzdCAiaHR0cDovLyIgZW50cnkgcmVmZXJzIHRvIElQIGFkZHIKKwkJICovCisKKwkJZ21hbF9lbnRyeSA9IChzdHJ1Y3QgZmNfZ21hbF9lbnRyeV9zICopZ21hbF9yZXNwLT5tc19tYTsKKwkJd2hpbGUgKG51bV9lbnRyaWVzID4gMCkgeworCQkJaWYgKHN0cm5jbXAKKwkJCSAgICAoZ21hbF9lbnRyeS0+cHJlZml4LCBDVF9HTUFMX1JFU1BfUFJFRklYX0hUVFAsCisJCQkgICAgIHNpemVvZihnbWFsX2VudHJ5LT5wcmVmaXgpKSA9PSAwKSB7CisKKwkJCQkvKgorCQkJCSAqIGlmIHRoZSBJUCBhZGRyZXNzIGlzIHRlcm1pbmF0aW5nIHdpdGggYSAnLycsCisJCQkJICogcmVtb3ZlIGl0LiAqQnl0ZSAwIGNvbnNpc3RzIG9mIHRoZSBsZW5ndGgKKwkJCQkgKiBvZiB0aGUgc3RyaW5nLgorCQkJCSAqLworCQkJCXJzcF9zdHIgPSAmKGdtYWxfZW50cnktPnByZWZpeFswXSk7CisJCQkJaWYgKHJzcF9zdHJbZ21hbF9lbnRyeS0+bGVuIC0gMV0gPT0gJy8nKQorCQkJCQlyc3Bfc3RyW2dtYWxfZW50cnktPmxlbiAtIDFdID0gMDsKKwkJCQkvKgorCQkJCSAqIGNvcHkgSVAgQWRkcmVzcyB0byBmYWJyaWMKKwkJCQkgKi8KKwkJCQlzdHJuY3B5KGJmYV9mY3NfcG9ydF9nZXRfZmFicmljX2lwYWRkcihwb3J0KSwKKwkJCQkJZ21hbF9lbnRyeS0+aXBfYWRkciwKKwkJCQkJQkZBX0ZDU19GQUJSSUNfSVBBRERSX1NaKTsKKwkJCQlicmVhazsKKwkJCX0gZWxzZSB7CisJCQkJLS1udW1fZW50cmllczsKKwkJCQkrK2dtYWxfZW50cnk7CisJCQl9CisJCX0KKworCQliZmFfc21fc2VuZF9ldmVudChtcywgTVNTTV9FVkVOVF9SU1BfT0spOworCQlyZXR1cm47CisJfQorCisJYmZhX3RyYyhwb3J0LT5mY3MsIGN0aGRyLT5yZWFzb25fY29kZSk7CisJYmZhX3RyYyhwb3J0LT5mY3MsIGN0aGRyLT5leHBfY29kZSk7CisJYmZhX3NtX3NlbmRfZXZlbnQobXMsIE1TU01fRVZFTlRfUlNQX0VSUk9SKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9tc19zbV9nZm5fc2VuZGluZyhzdHJ1Y3QgYmZhX2Zjc19wb3J0X21zX3MgKm1zLAorCQkJICAgICAgIGVudW0gcG9ydF9tc19ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKG1zLT5wb3J0LT5mY3MsIG1zLT5wb3J0LT5wb3J0X2NmZy5wd3duKTsKKwliZmFfdHJjKG1zLT5wb3J0LT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIE1TU01fRVZFTlRfRkNYUF9TRU5UOgorCQliZmFfc21fc2V0X3N0YXRlKG1zLCBiZmFfZmNzX3BvcnRfbXNfc21fZ2ZuKTsKKwkJYnJlYWs7CisKKwljYXNlIE1TU01fRVZFTlRfUE9SVF9PRkZMSU5FOgorCQliZmFfc21fc2V0X3N0YXRlKG1zLCBiZmFfZmNzX3BvcnRfbXNfc21fb2ZmbGluZSk7CisJCWJmYV9mY3hwX3dhbGxvY19jYW5jZWwoQkZBX0ZDU19HRVRfSEFMX0ZST01fUE9SVChtcy0+cG9ydCksCisJCQkJICAgICAgICZtcy0+ZmN4cF93cWUpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X21zX3NtX2dmbihzdHJ1Y3QgYmZhX2Zjc19wb3J0X21zX3MgKm1zLCBlbnVtIHBvcnRfbXNfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhtcy0+cG9ydC0+ZmNzLCBtcy0+cG9ydC0+cG9ydF9jZmcucHd3bik7CisJYmZhX3RyYyhtcy0+cG9ydC0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBNU1NNX0VWRU5UX1JTUF9FUlJPUjoKKwkJLyoKKwkJICogU3RhcnQgdGltZXIgZm9yIGEgZGVsYXllZCByZXRyeQorCQkgKi8KKwkJaWYgKG1zLT5yZXRyeV9jbnQrKyA8IEJGQV9GQ1NfTVNfQ01EX01BWF9SRVRSSUVTKSB7CisJCQliZmFfc21fc2V0X3N0YXRlKG1zLCBiZmFfZmNzX3BvcnRfbXNfc21fZ2ZuX3JldHJ5KTsKKwkJCWJmYV90aW1lcl9zdGFydChCRkFfRkNTX0dFVF9IQUxfRlJPTV9QT1JUKG1zLT5wb3J0KSwKKwkJCQkJJm1zLT50aW1lciwgYmZhX2Zjc19wb3J0X21zX3RpbWVvdXQsIG1zLAorCQkJCQlCRkFfRkNTX1JFVFJZX1RJTUVPVVQpOworCQl9IGVsc2UgeworCQkJYmZhX3NtX3NldF9zdGF0ZShtcywgYmZhX2Zjc19wb3J0X21zX3NtX29ubGluZSk7CisJCQltcy0+cmV0cnlfY250ID0gMDsKKwkJfQorCQlicmVhazsKKworCWNhc2UgTVNTTV9FVkVOVF9SU1BfT0s6CisJCWJmYV9zbV9zZXRfc3RhdGUobXMsIGJmYV9mY3NfcG9ydF9tc19zbV9vbmxpbmUpOworCQlicmVhazsKKworCWNhc2UgTVNTTV9FVkVOVF9QT1JUX09GRkxJTkU6CisJCWJmYV9zbV9zZXRfc3RhdGUobXMsIGJmYV9mY3NfcG9ydF9tc19zbV9vZmZsaW5lKTsKKwkJYmZhX2ZjeHBfZGlzY2FyZChtcy0+ZmN4cCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3BvcnRfbXNfc21fZ2ZuX3JldHJ5KHN0cnVjdCBiZmFfZmNzX3BvcnRfbXNfcyAqbXMsCisJCQkgICAgIGVudW0gcG9ydF9tc19ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKG1zLT5wb3J0LT5mY3MsIG1zLT5wb3J0LT5wb3J0X2NmZy5wd3duKTsKKwliZmFfdHJjKG1zLT5wb3J0LT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIE1TU01fRVZFTlRfVElNRU9VVDoKKwkJLyoKKwkJICogUmV0cnkgVGltZXIgRXhwaXJlZC4gUmUtc2VuZAorCQkgKi8KKwkJYmZhX3NtX3NldF9zdGF0ZShtcywgYmZhX2Zjc19wb3J0X21zX3NtX2dmbl9zZW5kaW5nKTsKKwkJYmZhX2Zjc19wb3J0X21zX3NlbmRfZ2ZuKG1zLCBOVUxMKTsKKwkJYnJlYWs7CisKKwljYXNlIE1TU01fRVZFTlRfUE9SVF9PRkZMSU5FOgorCQliZmFfc21fc2V0X3N0YXRlKG1zLCBiZmFfZmNzX3BvcnRfbXNfc21fb2ZmbGluZSk7CisJCWJmYV90aW1lcl9zdG9wKCZtcy0+dGltZXIpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqICBtc19wdnQgTVMgbG9jYWwgZnVuY3Rpb25zCisgKi8KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9tc19zZW5kX2dmbih2b2lkICptc19jYmFyZywgc3RydWN0IGJmYV9mY3hwX3MgKmZjeHBfYWxsb2NlZCkKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X21zX3MgKm1zID0gbXNfY2Jhcmc7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0ID0gbXMtPnBvcnQ7CisJc3RydWN0IGZjaHNfcyAgICAgICAgICBmY2hzOworCWludCAgICAgICAgICAgICBsZW47CisJc3RydWN0IGJmYV9mY3hwX3MgKmZjeHA7CisKKwliZmFfdHJjKHBvcnQtPmZjcywgcG9ydC0+cGlkKTsKKworCWZjeHAgPSBmY3hwX2FsbG9jZWQgPyBmY3hwX2FsbG9jZWQgOiBiZmFfZmNzX2ZjeHBfYWxsb2MocG9ydC0+ZmNzKTsKKwlpZiAoIWZjeHApIHsKKwkJYmZhX2ZjeHBfYWxsb2Nfd2FpdChwb3J0LT5mY3MtPmJmYSwgJm1zLT5mY3hwX3dxZSwKKwkJCQkgICAgYmZhX2Zjc19wb3J0X21zX3NlbmRfZ2ZuLCBtcyk7CisJCXJldHVybjsKKwl9CisJbXMtPmZjeHAgPSBmY3hwOworCisJbGVuID0gZmNfZ2ZuX3JlcV9idWlsZCgmZmNocywgYmZhX2ZjeHBfZ2V0X3JlcWJ1ZihmY3hwKSwKKwkJCSAgICAgICBiZmFfZmNzX3BvcnRfZ2V0X2ZjaWQocG9ydCksCisJCQkgICAgICAgYmZhX2xwc19nZXRfcGVlcl9ud3duKHBvcnQtPmZhYnJpYy0+bHBzKSk7CisKKwliZmFfZmN4cF9zZW5kKGZjeHAsIE5VTEwsIHBvcnQtPmZhYnJpYy0+dmZfaWQsIHBvcnQtPmxwX3RhZywgQkZBX0ZBTFNFLAorCQkgICAgICBGQ19DTEFTU18zLCBsZW4sICZmY2hzLCBiZmFfZmNzX3BvcnRfbXNfZ2ZuX3Jlc3BvbnNlLAorCQkgICAgICAodm9pZCAqKW1zLCBGQ19NQVhfUERVU1osIEZDX1JBX1RPVik7CisKKwliZmFfc21fc2VuZF9ldmVudChtcywgTVNTTV9FVkVOVF9GQ1hQX1NFTlQpOworfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X21zX2dmbl9yZXNwb25zZSh2b2lkICpmY3NhcmcsIHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwLCB2b2lkICpjYmFyZywKKwkJCSAgICAgYmZhX3N0YXR1c190IHJlcV9zdGF0dXMsIHUzMiByc3BfbGVuLAorCQkJICAgICAgIHUzMiByZXNpZF9sZW4sIHN0cnVjdCBmY2hzX3MgKnJzcF9mY2hzKQoreworCXN0cnVjdCBiZmFfZmNzX3BvcnRfbXNfcyAqbXMgPSAoc3RydWN0IGJmYV9mY3NfcG9ydF9tc19zICopY2Jhcmc7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0ID0gbXMtPnBvcnQ7CisJc3RydWN0IGN0X2hkcl9zICAgICAgICpjdGhkciA9IE5VTEw7CisJd3duX3QgICAgICAgICAgKmdmbl9yZXNwOworCisJYmZhX3RyYyhwb3J0LT5mY3MsIHJlcV9zdGF0dXMpOworCWJmYV90cmMocG9ydC0+ZmNzLCBwb3J0LT5wb3J0X2NmZy5wd3duKTsKKworCS8qCisJICogU2FuaXR5IENoZWNrcworCSAqLworCWlmIChyZXFfc3RhdHVzICE9IEJGQV9TVEFUVVNfT0spIHsKKwkJYmZhX3RyYyhwb3J0LT5mY3MsIHJlcV9zdGF0dXMpOworCQliZmFfc21fc2VuZF9ldmVudChtcywgTVNTTV9FVkVOVF9SU1BfRVJST1IpOworCQlyZXR1cm47CisJfQorCisJY3RoZHIgPSAoc3RydWN0IGN0X2hkcl9zICopIEJGQV9GQ1hQX1JTUF9QTEQoZmN4cCk7CisJY3RoZHItPmNtZF9yc3BfY29kZSA9IGJmYV9vc19udG9ocyhjdGhkci0+Y21kX3JzcF9jb2RlKTsKKworCWlmIChjdGhkci0+Y21kX3JzcF9jb2RlID09IENUX1JTUF9BQ0NFUFQpIHsKKwkJZ2ZuX3Jlc3AgPSAod3duX3QgKikgKGN0aGRyICsgMSk7CisJCS8qCisJCSAqIGNoZWNrIGlmIGl0IGhhcyBhY3R1YWxseSBjaGFuZ2VkCisJCSAqLworCQlpZiAoKG1lbWNtcAorCQkgICAgICgodm9pZCAqKSZiZmFfZmNzX3BvcnRfZ2V0X2ZhYnJpY19uYW1lKHBvcnQpLCBnZm5fcmVzcCwKKwkJICAgICAgc2l6ZW9mKHd3bl90KSkgIT0gMCkpCisJCQliZmFfZmNzX2ZhYnJpY19zZXRfZmFicmljX25hbWUocG9ydC0+ZmFicmljLCAqZ2ZuX3Jlc3ApOworCQliZmFfc21fc2VuZF9ldmVudChtcywgTVNTTV9FVkVOVF9SU1BfT0spOworCQlyZXR1cm47CisJfQorCisJYmZhX3RyYyhwb3J0LT5mY3MsIGN0aGRyLT5yZWFzb25fY29kZSk7CisJYmZhX3RyYyhwb3J0LT5mY3MsIGN0aGRyLT5leHBfY29kZSk7CisJYmZhX3NtX3NlbmRfZXZlbnQobXMsIE1TU01fRVZFTlRfUlNQX0VSUk9SKTsKK30KKworLyoqCisgKiAgbXNfcHZ0IE1TIGxvY2FsIGZ1bmN0aW9ucworICovCisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3BvcnRfbXNfc2VuZF9wbG9naSh2b2lkICptc19jYmFyZywgc3RydWN0IGJmYV9mY3hwX3MgKmZjeHBfYWxsb2NlZCkKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X21zX3MgKm1zID0gbXNfY2Jhcmc7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0ID0gbXMtPnBvcnQ7CisJc3RydWN0IGZjaHNfcyAgICAgICAgICBmY2hzOworCWludCAgICAgICAgICAgICBsZW47CisJc3RydWN0IGJmYV9mY3hwX3MgKmZjeHA7CisKKwliZmFfdHJjKHBvcnQtPmZjcywgcG9ydC0+cGlkKTsKKworCWZjeHAgPSBmY3hwX2FsbG9jZWQgPyBmY3hwX2FsbG9jZWQgOiBiZmFfZmNzX2ZjeHBfYWxsb2MocG9ydC0+ZmNzKTsKKwlpZiAoIWZjeHApIHsKKwkJcG9ydC0+c3RhdHMubXNfcGxvZ2lfYWxsb2Nfd2FpdCsrOworCQliZmFfZmN4cF9hbGxvY193YWl0KHBvcnQtPmZjcy0+YmZhLCAmbXMtPmZjeHBfd3FlLAorCQkJCSAgICBiZmFfZmNzX3BvcnRfbXNfc2VuZF9wbG9naSwgbXMpOworCQlyZXR1cm47CisJfQorCW1zLT5mY3hwID0gZmN4cDsKKworCWxlbiA9IGZjX3Bsb2dpX2J1aWxkKCZmY2hzLCBiZmFfZmN4cF9nZXRfcmVxYnVmKGZjeHApLAorCQkJICAgICBiZmFfb3NfaHRvbjNiKEZDX01HTVRfU0VSVkVSKSwKKwkJCSAgICAgYmZhX2Zjc19wb3J0X2dldF9mY2lkKHBvcnQpLCAwLAorCQkJICAgICBwb3J0LT5wb3J0X2NmZy5wd3duLCBwb3J0LT5wb3J0X2NmZy5ud3duLAorCQkJICAgICBiZmFfcHBvcnRfZ2V0X21heGZyc2l6ZShwb3J0LT5mY3MtPmJmYSkpOworCisJYmZhX2ZjeHBfc2VuZChmY3hwLCBOVUxMLCBwb3J0LT5mYWJyaWMtPnZmX2lkLCBwb3J0LT5scF90YWcsIEJGQV9GQUxTRSwKKwkJICAgICAgRkNfQ0xBU1NfMywgbGVuLCAmZmNocywgYmZhX2Zjc19wb3J0X21zX3Bsb2dpX3Jlc3BvbnNlLAorCQkgICAgICAodm9pZCAqKW1zLCBGQ19NQVhfUERVU1osIEZDX1JBX1RPVik7CisKKwlwb3J0LT5zdGF0cy5tc19wbG9naV9zZW50Kys7CisJYmZhX3NtX3NlbmRfZXZlbnQobXMsIE1TU01fRVZFTlRfRkNYUF9TRU5UKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9tc19wbG9naV9yZXNwb25zZSh2b2lkICpmY3NhcmcsIHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwLAorCQkJICAgICAgIHZvaWQgKmNiYXJnLCBiZmFfc3RhdHVzX3QgcmVxX3N0YXR1cywKKwkJCSAgICAgICB1MzIgcnNwX2xlbiwgdTMyIHJlc2lkX2xlbiwKKwkJCSAgICAgICBzdHJ1Y3QgZmNoc19zICpyc3BfZmNocykKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X21zX3MgKm1zID0gKHN0cnVjdCBiZmFfZmNzX3BvcnRfbXNfcyAqKWNiYXJnOworCisJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0ID0gbXMtPnBvcnQ7CisJc3RydWN0IGZjX2Vsc19jbWRfcyAgICplbHNfY21kOworCXN0cnVjdCBmY19sc19yanRfcyAgICAqbHNfcmp0OworCisJYmZhX3RyYyhwb3J0LT5mY3MsIHJlcV9zdGF0dXMpOworCWJmYV90cmMocG9ydC0+ZmNzLCBwb3J0LT5wb3J0X2NmZy5wd3duKTsKKworCS8qCisJICogU2FuaXR5IENoZWNrcworCSAqLworCWlmIChyZXFfc3RhdHVzICE9IEJGQV9TVEFUVVNfT0spIHsKKwkJcG9ydC0+c3RhdHMubXNfcGxvZ2lfcnNwX2VycisrOworCQliZmFfdHJjKHBvcnQtPmZjcywgcmVxX3N0YXR1cyk7CisJCWJmYV9zbV9zZW5kX2V2ZW50KG1zLCBNU1NNX0VWRU5UX1JTUF9FUlJPUik7CisJCXJldHVybjsKKwl9CisKKwllbHNfY21kID0gKHN0cnVjdCBmY19lbHNfY21kX3MgKikgQkZBX0ZDWFBfUlNQX1BMRChmY3hwKTsKKworCXN3aXRjaCAoZWxzX2NtZC0+ZWxzX2NvZGUpIHsKKworCWNhc2UgRkNfRUxTX0FDQzoKKwkJaWYgKHJzcF9sZW4gPCBzaXplb2Yoc3RydWN0IGZjX2xvZ2lfcykpIHsKKwkJCWJmYV90cmMocG9ydC0+ZmNzLCByc3BfbGVuKTsKKwkJCXBvcnQtPnN0YXRzLm1zX3Bsb2dpX2FjY19lcnIrKzsKKwkJCWJmYV9zbV9zZW5kX2V2ZW50KG1zLCBNU1NNX0VWRU5UX1JTUF9FUlJPUik7CisJCQlicmVhazsKKwkJfQorCQlwb3J0LT5zdGF0cy5tc19wbG9naV9hY2NlcHRzKys7CisJCWJmYV9zbV9zZW5kX2V2ZW50KG1zLCBNU1NNX0VWRU5UX1JTUF9PSyk7CisJCWJyZWFrOworCisJY2FzZSBGQ19FTFNfTFNfUkpUOgorCQlsc19yanQgPSAoc3RydWN0IGZjX2xzX3JqdF9zICopIEJGQV9GQ1hQX1JTUF9QTEQoZmN4cCk7CisKKwkJYmZhX3RyYyhwb3J0LT5mY3MsIGxzX3JqdC0+cmVhc29uX2NvZGUpOworCQliZmFfdHJjKHBvcnQtPmZjcywgbHNfcmp0LT5yZWFzb25fY29kZV9leHBsKTsKKworCQlwb3J0LT5zdGF0cy5tc19yZWplY3RzKys7CisJCWJmYV9zbV9zZW5kX2V2ZW50KG1zLCBNU1NNX0VWRU5UX1JTUF9FUlJPUik7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcG9ydC0+c3RhdHMubXNfcGxvZ2lfdW5rbm93bl9yc3ArKzsKKwkJYmZhX3RyYyhwb3J0LT5mY3MsIGVsc19jbWQtPmVsc19jb2RlKTsKKwkJYmZhX3NtX3NlbmRfZXZlbnQobXMsIE1TU01fRVZFTlRfUlNQX0VSUk9SKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3BvcnRfbXNfdGltZW91dCh2b2lkICphcmcpCit7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9tc19zICptcyA9IChzdHJ1Y3QgYmZhX2Zjc19wb3J0X21zX3MgKilhcmc7CisKKwltcy0+cG9ydC0+c3RhdHMubXNfdGltZW91dHMrKzsKKwliZmFfc21fc2VuZF9ldmVudChtcywgTVNTTV9FVkVOVF9USU1FT1VUKTsKK30KKworCit2b2lkCitiZmFfZmNzX3BvcnRfbXNfaW5pdChzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQpCit7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9tc19zICptcyA9IEJGQV9GQ1NfR0VUX01TX0ZST01fUE9SVChwb3J0KTsKKworCW1zLT5wb3J0ID0gcG9ydDsKKwliZmFfc21fc2V0X3N0YXRlKG1zLCBiZmFfZmNzX3BvcnRfbXNfc21fb2ZmbGluZSk7CisKKwkvKgorCSAqIEludm9rZSBpbml0IHJvdXRpbmVzIG9mIHN1YiBtb2R1bGVzLgorCSAqLworCWJmYV9mY3NfcG9ydF9mZG1pX2luaXQobXMpOworfQorCit2b2lkCitiZmFfZmNzX3BvcnRfbXNfb2ZmbGluZShzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQpCit7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9tc19zICptcyA9IEJGQV9GQ1NfR0VUX01TX0ZST01fUE9SVChwb3J0KTsKKworCW1zLT5wb3J0ID0gcG9ydDsKKwliZmFfc21fc2VuZF9ldmVudChtcywgTVNTTV9FVkVOVF9QT1JUX09GRkxJTkUpOworfQorCit2b2lkCitiZmFfZmNzX3BvcnRfbXNfb25saW5lKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCkKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X21zX3MgKm1zID0gQkZBX0ZDU19HRVRfTVNfRlJPTV9QT1JUKHBvcnQpOworCisJbXMtPnBvcnQgPSBwb3J0OworCWJmYV9zbV9zZW5kX2V2ZW50KG1zLCBNU1NNX0VWRU5UX1BPUlRfT05MSU5FKTsKK30KKwordm9pZAorYmZhX2Zjc19wb3J0X21zX2ZhYnJpY19yc2NuKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCkKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X21zX3MgKm1zID0gQkZBX0ZDU19HRVRfTVNfRlJPTV9QT1JUKHBvcnQpOworCisJLyoKKwkgKiBAdG9kby4gIEhhbmRsZSB0aGlzIG9ubHkgd2hlbiBpbiBPbmxpbmUgc3RhdGUKKwkgKi8KKwlpZiAoYmZhX3NtX2NtcF9zdGF0ZShtcywgYmZhX2Zjc19wb3J0X21zX3NtX29ubGluZSkpCisJCWJmYV9zbV9zZW5kX2V2ZW50KG1zLCBNU1NNX0VWRU5UX1BPUlRfRkFCUklDX1JTQ04pOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9uMm4uYyBiL2RyaXZlcnMvc2NzaS9iZmEvbjJuLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzM1NDU2OAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvbjJuLmMKQEAgLTAsMCArMSwxMDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworLyoqCisgKiAgbjJuLmMgbjJuIGltcGxlbWVudGF0aW9uLgorICovCisjaW5jbHVkZSA8YmZhLmg+CisjaW5jbHVkZSA8YmZhX3N2Yy5oPgorI2luY2x1ZGUgImZjc19scG9ydC5oIgorI2luY2x1ZGUgImZjc19ycG9ydC5oIgorI2luY2x1ZGUgImZjc190cmNtb2QuaCIKKyNpbmNsdWRlICJscG9ydF9wcml2LmgiCisKK0JGQV9UUkNfRklMRShGQ1MsIE4yTik7CisKKy8qKgorICogICBDYWxsZWQgYnkgZmNzL3BvcnQgdG8gaW5pdGlhbGl6ZSBOMk4gdG9wb2xvZ3kuCisgKi8KK3ZvaWQKK2JmYV9mY3NfcG9ydF9uMm5faW5pdChzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQpCit7Cit9CisKKy8qKgorICogICBDYWxsZWQgYnkgZmNzL3BvcnQgdG8gbm90aWZ5IHRyYW5zaXRpb24gdG8gb25saW5lIHN0YXRlLgorICovCit2b2lkCitiZmFfZmNzX3BvcnRfbjJuX29ubGluZShzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQpCit7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9uMm5fcyAqbjJuX3BvcnQgPSAmcG9ydC0+cG9ydF90b3BvLnBuMm47CisJc3RydWN0IGJmYV9wb3J0X2NmZ19zICpwY2ZnID0gJnBvcnQtPnBvcnRfY2ZnOworCXN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0OworCisJYmZhX3RyYyhwb3J0LT5mY3MsIHBjZmctPnB3d24pOworCisJLyoKKwkgKiBJZiBvdXIgUFdXTiBpcyA+IHRoYW4gdGhhdCBvZiB0aGUgci1wb3J0LCB3ZSBoYXZlIHRvIGluaXRpYXRlIFBMT0dJCisJICogYW5kIGFzc2lnbiBhbiBBZGRyZXNzLiBpZiBub3QsIHdlIG5lZWQgdG8gd2FpdCBmb3IgaXRzIFBMT0dJLgorCSAqCisJICogSWYgb3VyIFBXV04gaXMgPCB0aGFuIHRoYXQgb2YgdGhlIHJlbW90ZSBwb3J0LCBpdCB3aWxsIHNlbmQgYSBQTE9HSQorCSAqIHdpdGggdGhlIFBJRHMgYXNzaWduZWQuIFRoZSBycG9ydCBzdGF0ZSBtYWNoaW5lIHRha2UgY2FyZSBvZiB0aGlzCisJICogaW5jb21pbmcgUExPR0kuCisJICovCisJaWYgKG1lbWNtcAorCSAgICAoKHZvaWQgKikmcGNmZy0+cHd3biwgKHZvaWQgKikmbjJuX3BvcnQtPnJlbV9wb3J0X3d3biwKKwkgICAgIHNpemVvZih3d25fdCkpID4gMCkgeworCQlwb3J0LT5waWQgPSBOMk5fTE9DQUxfUElEOworCQkvKioKKwkJICogRmlyc3QsIGNoZWNrIGlmIHdlIGtub3cgdGhlIGRldmljZSBieSBwd3duLgorCQkgKi8KKwkJcnBvcnQgPSBiZmFfZmNzX3BvcnRfZ2V0X3Jwb3J0X2J5X3B3d24ocG9ydCwKKwkJCQkJCSAgICAgICBuMm5fcG9ydC0+cmVtX3BvcnRfd3duKTsKKwkJaWYgKHJwb3J0KSB7CisJCQliZmFfdHJjKHBvcnQtPmZjcywgcnBvcnQtPnBpZCk7CisJCQliZmFfdHJjKHBvcnQtPmZjcywgcnBvcnQtPnB3d24pOworCQkJcnBvcnQtPnBpZCA9IE4yTl9SRU1PVEVfUElEOworCQkJYmZhX2Zjc19ycG9ydF9vbmxpbmUocnBvcnQpOworCQkJcmV0dXJuOworCQl9CisKKwkJLyoKKwkJICogSW4gbjJuIHRoZXJlIGNhbiBiZSBvbmx5IG9uZSBycG9ydC4gRGVsZXRlIHRoZSBvbGQgb25lIHdob3NlCisJCSAqIHBpZCBzaG91bGQgYmUgemVybywgYmVjYXVzZSBpdCBpcyBvZmZsaW5lLgorCQkgKi8KKwkJaWYgKHBvcnQtPm51bV9ycG9ydHMgPiAwKSB7CisJCQlycG9ydCA9IGJmYV9mY3NfcG9ydF9nZXRfcnBvcnRfYnlfcGlkKHBvcnQsIDApOworCQkJYmZhX2Fzc2VydChycG9ydCAhPSBOVUxMKTsKKwkJCWlmIChycG9ydCkgeworCQkJCWJmYV90cmMocG9ydC0+ZmNzLCBycG9ydC0+cHd3bik7CisJCQkJYmZhX2Zjc19ycG9ydF9kZWxldGUocnBvcnQpOworCQkJfQorCQl9CisJCWJmYV9mY3NfcnBvcnRfY3JlYXRlKHBvcnQsIE4yTl9SRU1PVEVfUElEKTsKKwl9Cit9CisKKy8qKgorICogICBDYWxsZWQgYnkgZmNzL3BvcnQgdG8gbm90aWZ5IHRyYW5zaXRpb24gdG8gb2ZmbGluZSBzdGF0ZS4KKyAqLwordm9pZAorYmZhX2Zjc19wb3J0X24ybl9vZmZsaW5lKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCkKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X24ybl9zICpuMm5fcG9ydCA9ICZwb3J0LT5wb3J0X3RvcG8ucG4ybjsKKworCWJmYV90cmMocG9ydC0+ZmNzLCBwb3J0LT5waWQpOworCXBvcnQtPnBpZCA9IDA7CisJbjJuX3BvcnQtPnJlbV9wb3J0X3d3biA9IDA7CisJbjJuX3BvcnQtPnJlcGx5X294aWQgPSAwOworfQorCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvbnMuYyBiL2RyaXZlcnMvc2NzaS9iZmEvbnMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OWZlYTk5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9ucy5jCkBAIC0wLDAgKzEsMTI0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisvKioKKyAqIEBwYWdlIG5zX3NtX2luZm8gVlBPUlQgTlMgU3RhdGUgTWFjaGluZQorICoKKyAqIEBzZWN0aW9uIG5zX3NtX2ludGVyYWN0aW9ucyBWUE9SVCBOUyBTdGF0ZSBNYWNoaW5lIEludGVyYWN0aW9ucworICoKKyAqIEBzZWN0aW9uIG5zX3NtIFZQT1JUIE5TIFN0YXRlIE1hY2hpbmUKKyAqIAlpbWcgbnNfc20uanBnCisgKi8KKyNpbmNsdWRlIDxiZmEuaD4KKyNpbmNsdWRlIDxiZmFfc3ZjLmg+CisjaW5jbHVkZSA8YmZhX2lvY2ZjLmg+CisjaW5jbHVkZSAiZmNzX2xwb3J0LmgiCisjaW5jbHVkZSAiZmNzX3Jwb3J0LmgiCisjaW5jbHVkZSAiZmNzX3RyY21vZC5oIgorI2luY2x1ZGUgImZjc19mY3hwLmgiCisjaW5jbHVkZSAiZmNzLmgiCisjaW5jbHVkZSAibHBvcnRfcHJpdi5oIgorCitCRkFfVFJDX0ZJTEUoRkNTLCBOUyk7CisKKy8qCisgKiBmb3J3YXJkIGRlY2xhcmF0aW9ucworICovCitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X25zX3NlbmRfcGxvZ2kodm9pZCAqbnNfY2JhcmcsCisJCQkJCSAgIHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwX2FsbG9jZWQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9uc19zZW5kX3JzcG5faWQodm9pZCAqbnNfY2JhcmcsCisJCQkJCSAgICAgc3RydWN0IGJmYV9mY3hwX3MgKmZjeHBfYWxsb2NlZCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X25zX3NlbmRfcmZ0X2lkKHZvaWQgKm5zX2NiYXJnLAorCQkJCQkgICAgc3RydWN0IGJmYV9mY3hwX3MgKmZjeHBfYWxsb2NlZCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X25zX3NlbmRfcmZmX2lkKHZvaWQgKm5zX2NiYXJnLAorCQkJCQkgICAgc3RydWN0IGJmYV9mY3hwX3MgKmZjeHBfYWxsb2NlZCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X25zX3NlbmRfZ2lkX2Z0KHZvaWQgKm5zX2NiYXJnLAorCQkJCQkgICAgc3RydWN0IGJmYV9mY3hwX3MgKmZjeHBfYWxsb2NlZCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X25zX3RpbWVvdXQodm9pZCAqYXJnKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3BvcnRfbnNfcGxvZ2lfcmVzcG9uc2Uodm9pZCAqZmNzYXJnLAorCQkJCQkgICAgICAgc3RydWN0IGJmYV9mY3hwX3MgKmZjeHAsCisJCQkJCSAgICAgICB2b2lkICpjYmFyZywKKwkJCQkJICAgICAgIGJmYV9zdGF0dXNfdCByZXFfc3RhdHVzLAorCQkJCQkgICAgICAgdTMyIHJzcF9sZW4sCisJCQkJCSAgICAgICB1MzIgcmVzaWRfbGVuLAorCQkJCQkgICAgICAgc3RydWN0IGZjaHNfcyAqcnNwX2ZjaHMpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9uc19yc3BuX2lkX3Jlc3BvbnNlKHZvaWQgKmZjc2FyZywKKwkJCQkJCSBzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cCwKKwkJCQkJCSB2b2lkICpjYmFyZywKKwkJCQkJCSBiZmFfc3RhdHVzX3QgcmVxX3N0YXR1cywKKwkJCQkJCSB1MzIgcnNwX2xlbiwKKwkJCQkJCSB1MzIgcmVzaWRfbGVuLAorCQkJCQkJIHN0cnVjdCBmY2hzX3MgKnJzcF9mY2hzKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3BvcnRfbnNfcmZ0X2lkX3Jlc3BvbnNlKHZvaWQgKmZjc2FyZywKKwkJCQkJCXN0cnVjdCBiZmFfZmN4cF9zICpmY3hwLAorCQkJCQkJdm9pZCAqY2JhcmcsCisJCQkJCQliZmFfc3RhdHVzX3QgcmVxX3N0YXR1cywKKwkJCQkJCXUzMiByc3BfbGVuLAorCQkJCQkJdTMyIHJlc2lkX2xlbiwKKwkJCQkJCXN0cnVjdCBmY2hzX3MgKnJzcF9mY2hzKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3BvcnRfbnNfcmZmX2lkX3Jlc3BvbnNlKHZvaWQgKmZjc2FyZywKKwkJCQkJCXN0cnVjdCBiZmFfZmN4cF9zICpmY3hwLAorCQkJCQkJdm9pZCAqY2JhcmcsCisJCQkJCQliZmFfc3RhdHVzX3QgcmVxX3N0YXR1cywKKwkJCQkJCXUzMiByc3BfbGVuLAorCQkJCQkJdTMyIHJlc2lkX2xlbiwKKwkJCQkJCXN0cnVjdCBmY2hzX3MgKnJzcF9mY2hzKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3BvcnRfbnNfZ2lkX2Z0X3Jlc3BvbnNlKHZvaWQgKmZjc2FyZywKKwkJCQkJCXN0cnVjdCBiZmFfZmN4cF9zICpmY3hwLAorCQkJCQkJdm9pZCAqY2JhcmcsCisJCQkJCQliZmFfc3RhdHVzX3QgcmVxX3N0YXR1cywKKwkJCQkJCXUzMiByc3BfbGVuLAorCQkJCQkJdTMyIHJlc2lkX2xlbiwKKwkJCQkJCXN0cnVjdCBmY2hzX3MgKnJzcF9mY2hzKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3BvcnRfbnNfcHJvY2Vzc19naWRmdF9waWRzKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCwKKwkJCQkJCSAgIHUzMiAqcGlkX2J1ZiwKKwkJCQkJCSAgIHUzMiBuX3BpZHMpOworCitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X25zX2Jvb3RfdGFyZ2V0X2Rpc2Moc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0KTsKKy8qKgorICogIGZjc19uc19zbSBGQ1MgbmFtZXNlcnZlciBpbnRlcmZhY2Ugc3RhdGUgbWFjaGluZQorICovCisKKy8qKgorICogVlBvcnQgTlMgU3RhdGUgTWFjaGluZSBldmVudHMKKyAqLworZW51bSB2cG9ydF9uc19ldmVudCB7CisJTlNTTV9FVkVOVF9QT1JUX09OTElORSA9IDEsCisJTlNTTV9FVkVOVF9QT1JUX09GRkxJTkUgPSAyLAorCU5TU01fRVZFTlRfUExPR0lfU0VOVCA9IDMsCisJTlNTTV9FVkVOVF9SU1BfT0sgPSA0LAorCU5TU01fRVZFTlRfUlNQX0VSUk9SID0gNSwKKwlOU1NNX0VWRU5UX1RJTUVPVVQgPSA2LAorCU5TU01fRVZFTlRfTlNfUVVFUlkgPSA3LAorCU5TU01fRVZFTlRfUlNQTklEX1NFTlQgPSA4LAorCU5TU01fRVZFTlRfUkZUSURfU0VOVCA9IDksCisJTlNTTV9FVkVOVF9SRkZJRF9TRU5UID0gMTAsCisJTlNTTV9FVkVOVF9HSURGVF9TRU5UID0gMTEsCit9OworCitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X25zX3NtX29mZmxpbmUoc3RydWN0IGJmYV9mY3NfcG9ydF9uc19zICpucywKKwkJCQkJICAgZW51bSB2cG9ydF9uc19ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X25zX3NtX3Bsb2dpX3NlbmRpbmcoc3RydWN0IGJmYV9mY3NfcG9ydF9uc19zICpucywKKwkJCQkJCSBlbnVtIHZwb3J0X25zX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3BvcnRfbnNfc21fcGxvZ2koc3RydWN0IGJmYV9mY3NfcG9ydF9uc19zICpucywKKwkJCQkJIGVudW0gdnBvcnRfbnNfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9uc19zbV9wbG9naV9yZXRyeShzdHJ1Y3QgYmZhX2Zjc19wb3J0X25zX3MgKm5zLAorCQkJCQkgICAgICAgZW51bSB2cG9ydF9uc19ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X25zX3NtX3NlbmRpbmdfcnNwbl9pZChzdHJ1Y3QgYmZhX2Zjc19wb3J0X25zX3MgKm5zLAorCQkJCQkJICAgZW51bSB2cG9ydF9uc19ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X25zX3NtX3JzcG5faWQoc3RydWN0IGJmYV9mY3NfcG9ydF9uc19zICpucywKKwkJCQkJICAgZW51bSB2cG9ydF9uc19ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X25zX3NtX3JzcG5faWRfcmV0cnkoc3RydWN0IGJmYV9mY3NfcG9ydF9uc19zICpucywKKwkJCQkJCSBlbnVtIHZwb3J0X25zX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3BvcnRfbnNfc21fc2VuZGluZ19yZnRfaWQoc3RydWN0IGJmYV9mY3NfcG9ydF9uc19zICpucywKKwkJCQkJCSAgZW51bSB2cG9ydF9uc19ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X25zX3NtX3JmdF9pZF9yZXRyeShzdHJ1Y3QgYmZhX2Zjc19wb3J0X25zX3MgKm5zLAorCQkJCQkJZW51bSB2cG9ydF9uc19ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X25zX3NtX3JmdF9pZChzdHJ1Y3QgYmZhX2Zjc19wb3J0X25zX3MgKm5zLAorCQkJCQkgIGVudW0gdnBvcnRfbnNfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9uc19zbV9zZW5kaW5nX3JmZl9pZChzdHJ1Y3QgYmZhX2Zjc19wb3J0X25zX3MgKm5zLAorCQkJCQkJICBlbnVtIHZwb3J0X25zX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3BvcnRfbnNfc21fcmZmX2lkX3JldHJ5KHN0cnVjdCBiZmFfZmNzX3BvcnRfbnNfcyAqbnMsCisJCQkJCQllbnVtIHZwb3J0X25zX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3BvcnRfbnNfc21fcmZmX2lkKHN0cnVjdCBiZmFfZmNzX3BvcnRfbnNfcyAqbnMsCisJCQkJCSAgZW51bSB2cG9ydF9uc19ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X25zX3NtX3NlbmRpbmdfZ2lkX2Z0KHN0cnVjdCBiZmFfZmNzX3BvcnRfbnNfcyAqbnMsCisJCQkJCQkgIGVudW0gdnBvcnRfbnNfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9uc19zbV9naWRfZnQoc3RydWN0IGJmYV9mY3NfcG9ydF9uc19zICpucywKKwkJCQkJICBlbnVtIHZwb3J0X25zX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3BvcnRfbnNfc21fZ2lkX2Z0X3JldHJ5KHN0cnVjdCBiZmFfZmNzX3BvcnRfbnNfcyAqbnMsCisJCQkJCQllbnVtIHZwb3J0X25zX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3BvcnRfbnNfc21fb25saW5lKHN0cnVjdCBiZmFfZmNzX3BvcnRfbnNfcyAqbnMsCisJCQkJCSAgZW51bSB2cG9ydF9uc19ldmVudCBldmVudCk7CisvKioKKyAqIAkJU3RhcnQgaW4gb2ZmbGluZSBzdGF0ZSAtIGF3YWl0aW5nIGxpbmt1cAorICovCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X25zX3NtX29mZmxpbmUoc3RydWN0IGJmYV9mY3NfcG9ydF9uc19zICpucywKKwkJCSAgIGVudW0gdnBvcnRfbnNfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhucy0+cG9ydC0+ZmNzLCBucy0+cG9ydC0+cG9ydF9jZmcucHd3bik7CisJYmZhX3RyYyhucy0+cG9ydC0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBOU1NNX0VWRU5UX1BPUlRfT05MSU5FOgorCQliZmFfc21fc2V0X3N0YXRlKG5zLCBiZmFfZmNzX3BvcnRfbnNfc21fcGxvZ2lfc2VuZGluZyk7CisJCWJmYV9mY3NfcG9ydF9uc19zZW5kX3Bsb2dpKG5zLCBOVUxMKTsKKwkJYnJlYWs7CisKKwljYXNlIE5TU01fRVZFTlRfUE9SVF9PRkZMSU5FOgorCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X25zX3NtX3Bsb2dpX3NlbmRpbmcoc3RydWN0IGJmYV9mY3NfcG9ydF9uc19zICpucywKKwkJCQkgZW51bSB2cG9ydF9uc19ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKG5zLT5wb3J0LT5mY3MsIG5zLT5wb3J0LT5wb3J0X2NmZy5wd3duKTsKKwliZmFfdHJjKG5zLT5wb3J0LT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIE5TU01fRVZFTlRfUExPR0lfU0VOVDoKKwkJYmZhX3NtX3NldF9zdGF0ZShucywgYmZhX2Zjc19wb3J0X25zX3NtX3Bsb2dpKTsKKwkJYnJlYWs7CisKKwljYXNlIE5TU01fRVZFTlRfUE9SVF9PRkZMSU5FOgorCQliZmFfc21fc2V0X3N0YXRlKG5zLCBiZmFfZmNzX3BvcnRfbnNfc21fb2ZmbGluZSk7CisJCWJmYV9mY3hwX3dhbGxvY19jYW5jZWwoQkZBX0ZDU19HRVRfSEFMX0ZST01fUE9SVChucy0+cG9ydCksCisJCQkJICAgICAgICZucy0+ZmN4cF93cWUpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X25zX3NtX3Bsb2dpKHN0cnVjdCBiZmFfZmNzX3BvcnRfbnNfcyAqbnMsCisJCQkgZW51bSB2cG9ydF9uc19ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKG5zLT5wb3J0LT5mY3MsIG5zLT5wb3J0LT5wb3J0X2NmZy5wd3duKTsKKwliZmFfdHJjKG5zLT5wb3J0LT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIE5TU01fRVZFTlRfUlNQX0VSUk9SOgorCQkvKgorCQkgKiBTdGFydCB0aW1lciBmb3IgYSBkZWxheWVkIHJldHJ5CisJCSAqLworCQliZmFfc21fc2V0X3N0YXRlKG5zLCBiZmFfZmNzX3BvcnRfbnNfc21fcGxvZ2lfcmV0cnkpOworCQlucy0+cG9ydC0+c3RhdHMubnNfcmV0cmllcysrOworCQliZmFfdGltZXJfc3RhcnQoQkZBX0ZDU19HRVRfSEFMX0ZST01fUE9SVChucy0+cG9ydCksICZucy0+dGltZXIsCisJCQkJYmZhX2Zjc19wb3J0X25zX3RpbWVvdXQsIG5zLAorCQkJCUJGQV9GQ1NfUkVUUllfVElNRU9VVCk7CisJCWJyZWFrOworCisJY2FzZSBOU1NNX0VWRU5UX1JTUF9PSzoKKwkJYmZhX3NtX3NldF9zdGF0ZShucywgYmZhX2Zjc19wb3J0X25zX3NtX3NlbmRpbmdfcnNwbl9pZCk7CisJCWJmYV9mY3NfcG9ydF9uc19zZW5kX3JzcG5faWQobnMsIE5VTEwpOworCQlicmVhazsKKworCWNhc2UgTlNTTV9FVkVOVF9QT1JUX09GRkxJTkU6CisJCWJmYV9zbV9zZXRfc3RhdGUobnMsIGJmYV9mY3NfcG9ydF9uc19zbV9vZmZsaW5lKTsKKwkJYmZhX2ZjeHBfZGlzY2FyZChucy0+ZmN4cCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3BvcnRfbnNfc21fcGxvZ2lfcmV0cnkoc3RydWN0IGJmYV9mY3NfcG9ydF9uc19zICpucywKKwkJCSAgICAgICBlbnVtIHZwb3J0X25zX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMobnMtPnBvcnQtPmZjcywgbnMtPnBvcnQtPnBvcnRfY2ZnLnB3d24pOworCWJmYV90cmMobnMtPnBvcnQtPmZjcywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgTlNTTV9FVkVOVF9USU1FT1VUOgorCQkvKgorCQkgKiBSZXRyeSBUaW1lciBFeHBpcmVkLiBSZS1zZW5kCisJCSAqLworCQliZmFfc21fc2V0X3N0YXRlKG5zLCBiZmFfZmNzX3BvcnRfbnNfc21fcGxvZ2lfc2VuZGluZyk7CisJCWJmYV9mY3NfcG9ydF9uc19zZW5kX3Bsb2dpKG5zLCBOVUxMKTsKKwkJYnJlYWs7CisKKwljYXNlIE5TU01fRVZFTlRfUE9SVF9PRkZMSU5FOgorCQliZmFfc21fc2V0X3N0YXRlKG5zLCBiZmFfZmNzX3BvcnRfbnNfc21fb2ZmbGluZSk7CisJCWJmYV90aW1lcl9zdG9wKCZucy0+dGltZXIpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X25zX3NtX3NlbmRpbmdfcnNwbl9pZChzdHJ1Y3QgYmZhX2Zjc19wb3J0X25zX3MgKm5zLAorCQkJCSAgIGVudW0gdnBvcnRfbnNfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhucy0+cG9ydC0+ZmNzLCBucy0+cG9ydC0+cG9ydF9jZmcucHd3bik7CisJYmZhX3RyYyhucy0+cG9ydC0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBOU1NNX0VWRU5UX1JTUE5JRF9TRU5UOgorCQliZmFfc21fc2V0X3N0YXRlKG5zLCBiZmFfZmNzX3BvcnRfbnNfc21fcnNwbl9pZCk7CisJCWJyZWFrOworCisJY2FzZSBOU1NNX0VWRU5UX1BPUlRfT0ZGTElORToKKwkJYmZhX3NtX3NldF9zdGF0ZShucywgYmZhX2Zjc19wb3J0X25zX3NtX29mZmxpbmUpOworCQliZmFfZmN4cF93YWxsb2NfY2FuY2VsKEJGQV9GQ1NfR0VUX0hBTF9GUk9NX1BPUlQobnMtPnBvcnQpLAorCQkJCSAgICAgICAmbnMtPmZjeHBfd3FlKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9uc19zbV9yc3BuX2lkKHN0cnVjdCBiZmFfZmNzX3BvcnRfbnNfcyAqbnMsCisJCQkgICBlbnVtIHZwb3J0X25zX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMobnMtPnBvcnQtPmZjcywgbnMtPnBvcnQtPnBvcnRfY2ZnLnB3d24pOworCWJmYV90cmMobnMtPnBvcnQtPmZjcywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgTlNTTV9FVkVOVF9SU1BfRVJST1I6CisJCS8qCisJCSAqIFN0YXJ0IHRpbWVyIGZvciBhIGRlbGF5ZWQgcmV0cnkKKwkJICovCisJCWJmYV9zbV9zZXRfc3RhdGUobnMsIGJmYV9mY3NfcG9ydF9uc19zbV9yc3BuX2lkX3JldHJ5KTsKKwkJbnMtPnBvcnQtPnN0YXRzLm5zX3JldHJpZXMrKzsKKwkJYmZhX3RpbWVyX3N0YXJ0KEJGQV9GQ1NfR0VUX0hBTF9GUk9NX1BPUlQobnMtPnBvcnQpLCAmbnMtPnRpbWVyLAorCQkJCWJmYV9mY3NfcG9ydF9uc190aW1lb3V0LCBucywKKwkJCQlCRkFfRkNTX1JFVFJZX1RJTUVPVVQpOworCQlicmVhazsKKworCWNhc2UgTlNTTV9FVkVOVF9SU1BfT0s6CisJCWJmYV9zbV9zZXRfc3RhdGUobnMsIGJmYV9mY3NfcG9ydF9uc19zbV9zZW5kaW5nX3JmdF9pZCk7CisJCWJmYV9mY3NfcG9ydF9uc19zZW5kX3JmdF9pZChucywgTlVMTCk7CisJCWJyZWFrOworCisJY2FzZSBOU1NNX0VWRU5UX1BPUlRfT0ZGTElORToKKwkJYmZhX2ZjeHBfZGlzY2FyZChucy0+ZmN4cCk7CisJCWJmYV9zbV9zZXRfc3RhdGUobnMsIGJmYV9mY3NfcG9ydF9uc19zbV9vZmZsaW5lKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9uc19zbV9yc3BuX2lkX3JldHJ5KHN0cnVjdCBiZmFfZmNzX3BvcnRfbnNfcyAqbnMsCisJCQkJIGVudW0gdnBvcnRfbnNfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhucy0+cG9ydC0+ZmNzLCBucy0+cG9ydC0+cG9ydF9jZmcucHd3bik7CisJYmZhX3RyYyhucy0+cG9ydC0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBOU1NNX0VWRU5UX1RJTUVPVVQ6CisJCS8qCisJCSAqIFJldHJ5IFRpbWVyIEV4cGlyZWQuIFJlLXNlbmQKKwkJICovCisJCWJmYV9zbV9zZXRfc3RhdGUobnMsIGJmYV9mY3NfcG9ydF9uc19zbV9zZW5kaW5nX3JzcG5faWQpOworCQliZmFfZmNzX3BvcnRfbnNfc2VuZF9yc3BuX2lkKG5zLCBOVUxMKTsKKwkJYnJlYWs7CisKKwljYXNlIE5TU01fRVZFTlRfUE9SVF9PRkZMSU5FOgorCQliZmFfc21fc2V0X3N0YXRlKG5zLCBiZmFfZmNzX3BvcnRfbnNfc21fb2ZmbGluZSk7CisJCWJmYV90aW1lcl9zdG9wKCZucy0+dGltZXIpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X25zX3NtX3NlbmRpbmdfcmZ0X2lkKHN0cnVjdCBiZmFfZmNzX3BvcnRfbnNfcyAqbnMsCisJCQkJICBlbnVtIHZwb3J0X25zX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMobnMtPnBvcnQtPmZjcywgbnMtPnBvcnQtPnBvcnRfY2ZnLnB3d24pOworCWJmYV90cmMobnMtPnBvcnQtPmZjcywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgTlNTTV9FVkVOVF9SRlRJRF9TRU5UOgorCQliZmFfc21fc2V0X3N0YXRlKG5zLCBiZmFfZmNzX3BvcnRfbnNfc21fcmZ0X2lkKTsKKwkJYnJlYWs7CisKKwljYXNlIE5TU01fRVZFTlRfUE9SVF9PRkZMSU5FOgorCQliZmFfc21fc2V0X3N0YXRlKG5zLCBiZmFfZmNzX3BvcnRfbnNfc21fb2ZmbGluZSk7CisJCWJmYV9mY3hwX3dhbGxvY19jYW5jZWwoQkZBX0ZDU19HRVRfSEFMX0ZST01fUE9SVChucy0+cG9ydCksCisJCQkJICAgICAgICZucy0+ZmN4cF93cWUpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X25zX3NtX3JmdF9pZChzdHJ1Y3QgYmZhX2Zjc19wb3J0X25zX3MgKm5zLAorCQkJICBlbnVtIHZwb3J0X25zX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMobnMtPnBvcnQtPmZjcywgbnMtPnBvcnQtPnBvcnRfY2ZnLnB3d24pOworCWJmYV90cmMobnMtPnBvcnQtPmZjcywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgTlNTTV9FVkVOVF9SU1BfT0s6CisJCS8qCisJCSAqIE5vdyBtb3ZlIHRvIHJlZ2lzdGVyIEZDNCBGZWF0dXJlcworCQkgKi8KKwkJYmZhX3NtX3NldF9zdGF0ZShucywgYmZhX2Zjc19wb3J0X25zX3NtX3NlbmRpbmdfcmZmX2lkKTsKKwkJYmZhX2Zjc19wb3J0X25zX3NlbmRfcmZmX2lkKG5zLCBOVUxMKTsKKwkJYnJlYWs7CisKKwljYXNlIE5TU01fRVZFTlRfUlNQX0VSUk9SOgorCQkvKgorCQkgKiBTdGFydCB0aW1lciBmb3IgYSBkZWxheWVkIHJldHJ5CisJCSAqLworCQliZmFfc21fc2V0X3N0YXRlKG5zLCBiZmFfZmNzX3BvcnRfbnNfc21fcmZ0X2lkX3JldHJ5KTsKKwkJbnMtPnBvcnQtPnN0YXRzLm5zX3JldHJpZXMrKzsKKwkJYmZhX3RpbWVyX3N0YXJ0KEJGQV9GQ1NfR0VUX0hBTF9GUk9NX1BPUlQobnMtPnBvcnQpLCAmbnMtPnRpbWVyLAorCQkJCWJmYV9mY3NfcG9ydF9uc190aW1lb3V0LCBucywKKwkJCQlCRkFfRkNTX1JFVFJZX1RJTUVPVVQpOworCQlicmVhazsKKworCWNhc2UgTlNTTV9FVkVOVF9QT1JUX09GRkxJTkU6CisJCWJmYV9zbV9zZXRfc3RhdGUobnMsIGJmYV9mY3NfcG9ydF9uc19zbV9vZmZsaW5lKTsKKwkJYmZhX2ZjeHBfZGlzY2FyZChucy0+ZmN4cCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3BvcnRfbnNfc21fcmZ0X2lkX3JldHJ5KHN0cnVjdCBiZmFfZmNzX3BvcnRfbnNfcyAqbnMsCisJCQkJZW51bSB2cG9ydF9uc19ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKG5zLT5wb3J0LT5mY3MsIG5zLT5wb3J0LT5wb3J0X2NmZy5wd3duKTsKKwliZmFfdHJjKG5zLT5wb3J0LT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIE5TU01fRVZFTlRfVElNRU9VVDoKKwkJYmZhX3NtX3NldF9zdGF0ZShucywgYmZhX2Zjc19wb3J0X25zX3NtX3NlbmRpbmdfcmZ0X2lkKTsKKwkJYmZhX2Zjc19wb3J0X25zX3NlbmRfcmZ0X2lkKG5zLCBOVUxMKTsKKwkJYnJlYWs7CisKKwljYXNlIE5TU01fRVZFTlRfUE9SVF9PRkZMSU5FOgorCQliZmFfc21fc2V0X3N0YXRlKG5zLCBiZmFfZmNzX3BvcnRfbnNfc21fb2ZmbGluZSk7CisJCWJmYV90aW1lcl9zdG9wKCZucy0+dGltZXIpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X25zX3NtX3NlbmRpbmdfcmZmX2lkKHN0cnVjdCBiZmFfZmNzX3BvcnRfbnNfcyAqbnMsCisJCQkJICBlbnVtIHZwb3J0X25zX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMobnMtPnBvcnQtPmZjcywgbnMtPnBvcnQtPnBvcnRfY2ZnLnB3d24pOworCWJmYV90cmMobnMtPnBvcnQtPmZjcywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgTlNTTV9FVkVOVF9SRkZJRF9TRU5UOgorCQliZmFfc21fc2V0X3N0YXRlKG5zLCBiZmFfZmNzX3BvcnRfbnNfc21fcmZmX2lkKTsKKwkJYnJlYWs7CisKKwljYXNlIE5TU01fRVZFTlRfUE9SVF9PRkZMSU5FOgorCQliZmFfc21fc2V0X3N0YXRlKG5zLCBiZmFfZmNzX3BvcnRfbnNfc21fb2ZmbGluZSk7CisJCWJmYV9mY3hwX3dhbGxvY19jYW5jZWwoQkZBX0ZDU19HRVRfSEFMX0ZST01fUE9SVChucy0+cG9ydCksCisJCQkJICAgICAgICZucy0+ZmN4cF93cWUpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X25zX3NtX3JmZl9pZChzdHJ1Y3QgYmZhX2Zjc19wb3J0X25zX3MgKm5zLAorCQkJICBlbnVtIHZwb3J0X25zX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMobnMtPnBvcnQtPmZjcywgbnMtPnBvcnQtPnBvcnRfY2ZnLnB3d24pOworCWJmYV90cmMobnMtPnBvcnQtPmZjcywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgTlNTTV9FVkVOVF9SU1BfT0s6CisKKwkJLyoKKwkJICogSWYgbWluIGNmZyBtb2RlIGlzIGVuYWJsZWQsIHdlIGRvbm90IGluaXRpYXRlIHJwb3J0CisJCSAqIGRpc2NvdmVyeSB3aXRoIHRoZSBmYWJyaWMuIEluc3RlYWQsIHdlIHdpbGwgcmV0cmlldmUgdGhlCisJCSAqIGJvb3QgdGFyZ2V0cyBmcm9tIEhBTC9GVy4KKwkJICovCisJCWlmIChfX2Zjc19taW5fY2ZnKG5zLT5wb3J0LT5mY3MpKSB7CisJCQliZmFfZmNzX3BvcnRfbnNfYm9vdF90YXJnZXRfZGlzYyhucy0+cG9ydCk7CisJCQliZmFfc21fc2V0X3N0YXRlKG5zLCBiZmFfZmNzX3BvcnRfbnNfc21fb25saW5lKTsKKwkJCXJldHVybjsKKwkJfQorCisJCS8qCisJCSAqIElmIHRoZSBwb3J0IHJvbGUgaXMgSW5pdGlhdG9yIE1vZGUgaXNzdWUgTlMgcXVlcnkuCisJCSAqIElmIGl0IGlzIFRhcmdldCBNb2RlLCBza2lwIHRoaXMgYW5kIGdvIHRvIG9ubGluZS4KKwkJICovCisJCWlmIChCRkFfRkNTX1ZQT1JUX0lTX0lOSVRJQVRPUl9NT0RFKG5zLT5wb3J0KSkgeworCQkJYmZhX3NtX3NldF9zdGF0ZShucywgYmZhX2Zjc19wb3J0X25zX3NtX3NlbmRpbmdfZ2lkX2Z0KTsKKwkJCWJmYV9mY3NfcG9ydF9uc19zZW5kX2dpZF9mdChucywgTlVMTCk7CisJCX0gZWxzZSBpZiAoQkZBX0ZDU19WUE9SVF9JU19UQVJHRVRfTU9ERShucy0+cG9ydCkpIHsKKwkJCWJmYV9zbV9zZXRfc3RhdGUobnMsIGJmYV9mY3NfcG9ydF9uc19zbV9vbmxpbmUpOworCQl9CisJCS8qCisJCSAqIGtpY2sgb2ZmIG1nbXQgc3J2ciBzdGF0ZSBtYWNoaW5lCisJCSAqLworCQliZmFfZmNzX3BvcnRfbXNfb25saW5lKG5zLT5wb3J0KTsKKwkJYnJlYWs7CisKKwljYXNlIE5TU01fRVZFTlRfUlNQX0VSUk9SOgorCQkvKgorCQkgKiBTdGFydCB0aW1lciBmb3IgYSBkZWxheWVkIHJldHJ5CisJCSAqLworCQliZmFfc21fc2V0X3N0YXRlKG5zLCBiZmFfZmNzX3BvcnRfbnNfc21fcmZmX2lkX3JldHJ5KTsKKwkJbnMtPnBvcnQtPnN0YXRzLm5zX3JldHJpZXMrKzsKKwkJYmZhX3RpbWVyX3N0YXJ0KEJGQV9GQ1NfR0VUX0hBTF9GUk9NX1BPUlQobnMtPnBvcnQpLCAmbnMtPnRpbWVyLAorCQkJCWJmYV9mY3NfcG9ydF9uc190aW1lb3V0LCBucywKKwkJCQlCRkFfRkNTX1JFVFJZX1RJTUVPVVQpOworCQlicmVhazsKKworCWNhc2UgTlNTTV9FVkVOVF9QT1JUX09GRkxJTkU6CisJCWJmYV9zbV9zZXRfc3RhdGUobnMsIGJmYV9mY3NfcG9ydF9uc19zbV9vZmZsaW5lKTsKKwkJYmZhX2ZjeHBfZGlzY2FyZChucy0+ZmN4cCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3BvcnRfbnNfc21fcmZmX2lkX3JldHJ5KHN0cnVjdCBiZmFfZmNzX3BvcnRfbnNfcyAqbnMsCisJCQkJZW51bSB2cG9ydF9uc19ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKG5zLT5wb3J0LT5mY3MsIG5zLT5wb3J0LT5wb3J0X2NmZy5wd3duKTsKKwliZmFfdHJjKG5zLT5wb3J0LT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIE5TU01fRVZFTlRfVElNRU9VVDoKKwkJYmZhX3NtX3NldF9zdGF0ZShucywgYmZhX2Zjc19wb3J0X25zX3NtX3NlbmRpbmdfcmZmX2lkKTsKKwkJYmZhX2Zjc19wb3J0X25zX3NlbmRfcmZmX2lkKG5zLCBOVUxMKTsKKwkJYnJlYWs7CisKKwljYXNlIE5TU01fRVZFTlRfUE9SVF9PRkZMSU5FOgorCQliZmFfc21fc2V0X3N0YXRlKG5zLCBiZmFfZmNzX3BvcnRfbnNfc21fb2ZmbGluZSk7CisJCWJmYV90aW1lcl9zdG9wKCZucy0+dGltZXIpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9uc19zbV9zZW5kaW5nX2dpZF9mdChzdHJ1Y3QgYmZhX2Zjc19wb3J0X25zX3MgKm5zLAorCQkJCSAgZW51bSB2cG9ydF9uc19ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKG5zLT5wb3J0LT5mY3MsIG5zLT5wb3J0LT5wb3J0X2NmZy5wd3duKTsKKwliZmFfdHJjKG5zLT5wb3J0LT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIE5TU01fRVZFTlRfR0lERlRfU0VOVDoKKwkJYmZhX3NtX3NldF9zdGF0ZShucywgYmZhX2Zjc19wb3J0X25zX3NtX2dpZF9mdCk7CisJCWJyZWFrOworCisJY2FzZSBOU1NNX0VWRU5UX1BPUlRfT0ZGTElORToKKwkJYmZhX3NtX3NldF9zdGF0ZShucywgYmZhX2Zjc19wb3J0X25zX3NtX29mZmxpbmUpOworCQliZmFfZmN4cF93YWxsb2NfY2FuY2VsKEJGQV9GQ1NfR0VUX0hBTF9GUk9NX1BPUlQobnMtPnBvcnQpLAorCQkJCSAgICAgICAmbnMtPmZjeHBfd3FlKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9uc19zbV9naWRfZnQoc3RydWN0IGJmYV9mY3NfcG9ydF9uc19zICpucywKKwkJCSAgZW51bSB2cG9ydF9uc19ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKG5zLT5wb3J0LT5mY3MsIG5zLT5wb3J0LT5wb3J0X2NmZy5wd3duKTsKKwliZmFfdHJjKG5zLT5wb3J0LT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIE5TU01fRVZFTlRfUlNQX09LOgorCQliZmFfc21fc2V0X3N0YXRlKG5zLCBiZmFfZmNzX3BvcnRfbnNfc21fb25saW5lKTsKKwkJYnJlYWs7CisKKwljYXNlIE5TU01fRVZFTlRfUlNQX0VSUk9SOgorCQkvKgorCQkgKiBUQkQ6IGZvciBjZXJ0YWluIHJlamVjdCBjb2Rlcywgd2UgZG9uJ3QgbmVlZCB0byByZXRyeQorCQkgKi8KKwkJLyoKKwkJICogU3RhcnQgdGltZXIgZm9yIGEgZGVsYXllZCByZXRyeQorCQkgKi8KKwkJYmZhX3NtX3NldF9zdGF0ZShucywgYmZhX2Zjc19wb3J0X25zX3NtX2dpZF9mdF9yZXRyeSk7CisJCW5zLT5wb3J0LT5zdGF0cy5uc19yZXRyaWVzKys7CisJCWJmYV90aW1lcl9zdGFydChCRkFfRkNTX0dFVF9IQUxfRlJPTV9QT1JUKG5zLT5wb3J0KSwgJm5zLT50aW1lciwKKwkJCQliZmFfZmNzX3BvcnRfbnNfdGltZW91dCwgbnMsCisJCQkJQkZBX0ZDU19SRVRSWV9USU1FT1VUKTsKKwkJYnJlYWs7CisKKwljYXNlIE5TU01fRVZFTlRfUE9SVF9PRkZMSU5FOgorCQliZmFfc21fc2V0X3N0YXRlKG5zLCBiZmFfZmNzX3BvcnRfbnNfc21fb2ZmbGluZSk7CisJCWJmYV9mY3hwX2Rpc2NhcmQobnMtPmZjeHApOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X25zX3NtX2dpZF9mdF9yZXRyeShzdHJ1Y3QgYmZhX2Zjc19wb3J0X25zX3MgKm5zLAorCQkJCWVudW0gdnBvcnRfbnNfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhucy0+cG9ydC0+ZmNzLCBucy0+cG9ydC0+cG9ydF9jZmcucHd3bik7CisJYmZhX3RyYyhucy0+cG9ydC0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBOU1NNX0VWRU5UX1RJTUVPVVQ6CisJCWJmYV9zbV9zZXRfc3RhdGUobnMsIGJmYV9mY3NfcG9ydF9uc19zbV9zZW5kaW5nX2dpZF9mdCk7CisJCWJmYV9mY3NfcG9ydF9uc19zZW5kX2dpZF9mdChucywgTlVMTCk7CisJCWJyZWFrOworCisJY2FzZSBOU1NNX0VWRU5UX1BPUlRfT0ZGTElORToKKwkJYmZhX3NtX3NldF9zdGF0ZShucywgYmZhX2Zjc19wb3J0X25zX3NtX29mZmxpbmUpOworCQliZmFfdGltZXJfc3RvcCgmbnMtPnRpbWVyKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9uc19zbV9vbmxpbmUoc3RydWN0IGJmYV9mY3NfcG9ydF9uc19zICpucywKKwkJCSAgZW51bSB2cG9ydF9uc19ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKG5zLT5wb3J0LT5mY3MsIG5zLT5wb3J0LT5wb3J0X2NmZy5wd3duKTsKKwliZmFfdHJjKG5zLT5wb3J0LT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIE5TU01fRVZFTlRfUE9SVF9PRkZMSU5FOgorCQliZmFfc21fc2V0X3N0YXRlKG5zLCBiZmFfZmNzX3BvcnRfbnNfc21fb2ZmbGluZSk7CisJCWJyZWFrOworCisJY2FzZSBOU1NNX0VWRU5UX05TX1FVRVJZOgorCQkvKgorCQkgKiBJZiB0aGUgcG9ydCByb2xlIGlzIEluaXRpYXRvciBNb2RlIGlzc3VlIE5TIHF1ZXJ5LgorCQkgKiBJZiBpdCBpcyBUYXJnZXQgTW9kZSwgc2tpcCB0aGlzIGFuZCBnbyB0byBvbmxpbmUuCisJCSAqLworCQlpZiAoQkZBX0ZDU19WUE9SVF9JU19JTklUSUFUT1JfTU9ERShucy0+cG9ydCkpIHsKKwkJCWJmYV9zbV9zZXRfc3RhdGUobnMsIGJmYV9mY3NfcG9ydF9uc19zbV9zZW5kaW5nX2dpZF9mdCk7CisJCQliZmFfZmNzX3BvcnRfbnNfc2VuZF9naWRfZnQobnMsIE5VTEwpOworCQl9OworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisKKworLyoqCisgKiAgbnNfcHZ0IE5hbWVzZXJ2ZXIgbG9jYWwgZnVuY3Rpb25zCisgKi8KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9uc19zZW5kX3Bsb2dpKHZvaWQgKm5zX2NiYXJnLCBzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cF9hbGxvY2VkKQoreworCXN0cnVjdCBiZmFfZmNzX3BvcnRfbnNfcyAqbnMgPSBuc19jYmFyZzsKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQgPSBucy0+cG9ydDsKKwlzdHJ1Y3QgZmNoc19zICAgICAgICAgIGZjaHM7CisJaW50ICAgICAgICAgICAgIGxlbjsKKwlzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cDsKKworCWJmYV90cmMocG9ydC0+ZmNzLCBwb3J0LT5waWQpOworCisJZmN4cCA9IGZjeHBfYWxsb2NlZCA/IGZjeHBfYWxsb2NlZCA6IGJmYV9mY3NfZmN4cF9hbGxvYyhwb3J0LT5mY3MpOworCWlmICghZmN4cCkgeworCQlwb3J0LT5zdGF0cy5uc19wbG9naV9hbGxvY193YWl0Kys7CisJCWJmYV9mY3hwX2FsbG9jX3dhaXQocG9ydC0+ZmNzLT5iZmEsICZucy0+ZmN4cF93cWUsCisJCQkJICAgIGJmYV9mY3NfcG9ydF9uc19zZW5kX3Bsb2dpLCBucyk7CisJCXJldHVybjsKKwl9CisJbnMtPmZjeHAgPSBmY3hwOworCisJbGVuID0gZmNfcGxvZ2lfYnVpbGQoJmZjaHMsIGJmYV9mY3hwX2dldF9yZXFidWYoZmN4cCksCisJCQkgICAgIGJmYV9vc19odG9uM2IoRkNfTkFNRV9TRVJWRVIpLAorCQkJICAgICBiZmFfZmNzX3BvcnRfZ2V0X2ZjaWQocG9ydCksIDAsCisJCQkgICAgIHBvcnQtPnBvcnRfY2ZnLnB3d24sIHBvcnQtPnBvcnRfY2ZnLm53d24sCisJCQkgICAgIGJmYV9wcG9ydF9nZXRfbWF4ZnJzaXplKHBvcnQtPmZjcy0+YmZhKSk7CisKKwliZmFfZmN4cF9zZW5kKGZjeHAsIE5VTEwsIHBvcnQtPmZhYnJpYy0+dmZfaWQsIHBvcnQtPmxwX3RhZywgQkZBX0ZBTFNFLAorCQkgICAgICBGQ19DTEFTU18zLCBsZW4sICZmY2hzLCBiZmFfZmNzX3BvcnRfbnNfcGxvZ2lfcmVzcG9uc2UsCisJCSAgICAgICh2b2lkICopbnMsIEZDX01BWF9QRFVTWiwgRkNfUkFfVE9WKTsKKwlwb3J0LT5zdGF0cy5uc19wbG9naV9zZW50Kys7CisKKwliZmFfc21fc2VuZF9ldmVudChucywgTlNTTV9FVkVOVF9QTE9HSV9TRU5UKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9uc19wbG9naV9yZXNwb25zZSh2b2lkICpmY3NhcmcsIHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwLAorCQkJICAgICAgIHZvaWQgKmNiYXJnLCBiZmFfc3RhdHVzX3QgcmVxX3N0YXR1cywKKwkJCSAgICAgICB1MzIgcnNwX2xlbiwgdTMyIHJlc2lkX2xlbiwKKwkJCSAgICAgICBzdHJ1Y3QgZmNoc19zICpyc3BfZmNocykKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X25zX3MgKm5zID0gKHN0cnVjdCBiZmFfZmNzX3BvcnRfbnNfcyAqKWNiYXJnOworCXN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCA9IG5zLT5wb3J0OworCS8qIHN0cnVjdCBmY19sb2dpX3MgKnBsb2dpX3Jlc3A7ICovCisJc3RydWN0IGZjX2Vsc19jbWRfcyAgICplbHNfY21kOworCXN0cnVjdCBmY19sc19yanRfcyAgICAqbHNfcmp0OworCisJYmZhX3RyYyhwb3J0LT5mY3MsIHJlcV9zdGF0dXMpOworCWJmYV90cmMocG9ydC0+ZmNzLCBwb3J0LT5wb3J0X2NmZy5wd3duKTsKKworCS8qCisJICogU2FuaXR5IENoZWNrcworCSAqLworCWlmIChyZXFfc3RhdHVzICE9IEJGQV9TVEFUVVNfT0spIHsKKwkJYmZhX3RyYyhwb3J0LT5mY3MsIHJlcV9zdGF0dXMpOworCQlwb3J0LT5zdGF0cy5uc19wbG9naV9yc3BfZXJyKys7CisJCWJmYV9zbV9zZW5kX2V2ZW50KG5zLCBOU1NNX0VWRU5UX1JTUF9FUlJPUik7CisJCXJldHVybjsKKwl9CisKKwllbHNfY21kID0gKHN0cnVjdCBmY19lbHNfY21kX3MgKikgQkZBX0ZDWFBfUlNQX1BMRChmY3hwKTsKKworCXN3aXRjaCAoZWxzX2NtZC0+ZWxzX2NvZGUpIHsKKworCWNhc2UgRkNfRUxTX0FDQzoKKwkJaWYgKHJzcF9sZW4gPCBzaXplb2Yoc3RydWN0IGZjX2xvZ2lfcykpIHsKKwkJCWJmYV90cmMocG9ydC0+ZmNzLCByc3BfbGVuKTsKKwkJCXBvcnQtPnN0YXRzLm5zX3Bsb2dpX2FjY19lcnIrKzsKKwkJCWJmYV9zbV9zZW5kX2V2ZW50KG5zLCBOU1NNX0VWRU5UX1JTUF9FUlJPUik7CisJCQlicmVhazsKKwkJfQorCQlwb3J0LT5zdGF0cy5uc19wbG9naV9hY2NlcHRzKys7CisJCWJmYV9zbV9zZW5kX2V2ZW50KG5zLCBOU1NNX0VWRU5UX1JTUF9PSyk7CisJCWJyZWFrOworCisJY2FzZSBGQ19FTFNfTFNfUkpUOgorCQlsc19yanQgPSAoc3RydWN0IGZjX2xzX3JqdF9zICopIEJGQV9GQ1hQX1JTUF9QTEQoZmN4cCk7CisKKwkJYmZhX3RyYyhwb3J0LT5mY3MsIGxzX3JqdC0+cmVhc29uX2NvZGUpOworCQliZmFfdHJjKHBvcnQtPmZjcywgbHNfcmp0LT5yZWFzb25fY29kZV9leHBsKTsKKworCQlwb3J0LT5zdGF0cy5uc19yZWplY3RzKys7CisKKwkJYmZhX3NtX3NlbmRfZXZlbnQobnMsIE5TU01fRVZFTlRfUlNQX0VSUk9SKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlwb3J0LT5zdGF0cy5uc19wbG9naV91bmtub3duX3JzcCsrOworCQliZmFfdHJjKHBvcnQtPmZjcywgZWxzX2NtZC0+ZWxzX2NvZGUpOworCQliZmFfc21fc2VuZF9ldmVudChucywgTlNTTV9FVkVOVF9SU1BfRVJST1IpOworCX0KK30KKworLyoqCisgKiBSZWdpc3RlciB0aGUgc3ltYm9saWMgcG9ydCBuYW1lLgorICovCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X25zX3NlbmRfcnNwbl9pZCh2b2lkICpuc19jYmFyZywgc3RydWN0IGJmYV9mY3hwX3MgKmZjeHBfYWxsb2NlZCkKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X25zX3MgKm5zID0gbnNfY2Jhcmc7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0ID0gbnMtPnBvcnQ7CisJc3RydWN0IGZjaHNfcyAgICAgICAgICBmY2hzOworCWludCAgICAgICAgICAgICBsZW47CisJc3RydWN0IGJmYV9mY3hwX3MgKmZjeHA7CisJdTggICAgICAgICBzeW1ibFsyNTZdOworCXU4ICAgICAgICAqcHN5bWJsID0gJnN5bWJsWzBdOworCisJYmZhX29zX21lbXNldChzeW1ibCwgMCwgc2l6ZW9mKHN5bWJsKSk7CisKKwliZmFfdHJjKHBvcnQtPmZjcywgcG9ydC0+cG9ydF9jZmcucHd3bik7CisKKwlmY3hwID0gZmN4cF9hbGxvY2VkID8gZmN4cF9hbGxvY2VkIDogYmZhX2Zjc19mY3hwX2FsbG9jKHBvcnQtPmZjcyk7CisJaWYgKCFmY3hwKSB7CisJCXBvcnQtPnN0YXRzLm5zX3JzcG5pZF9hbGxvY193YWl0Kys7CisJCWJmYV9mY3hwX2FsbG9jX3dhaXQocG9ydC0+ZmNzLT5iZmEsICZucy0+ZmN4cF93cWUsCisJCQkJICAgIGJmYV9mY3NfcG9ydF9uc19zZW5kX3JzcG5faWQsIG5zKTsKKwkJcmV0dXJuOworCX0KKwlucy0+ZmN4cCA9IGZjeHA7CisKKwkvKgorCSAqIGZvciBWLVBvcnQsIGZvcm0gYSBQb3J0IFN5bWJvbGljIE5hbWUKKwkgKi8KKwlpZiAocG9ydC0+dnBvcnQpIHsKKwkJLyoqRm9yIFZwb3J0cywKKwkJICogIHdlIGFwcGVuZCB0aGUgdnBvcnQncyBwb3J0IHN5bWJvbGljIG5hbWUgdG8gdGhhdCBvZiB0aGUgYmFzZSBwb3J0LgorCQkgKi8KKworCQlzdHJuY3B5KChjaGFyICopcHN5bWJsLAorCQkJKGNoYXIgKikKKwkJCSYoYmZhX2Zjc19wb3J0X2dldF9wc3ltX25hbWUKKwkJCSAgKGJmYV9mY3NfZ2V0X2Jhc2VfcG9ydChwb3J0LT5mY3MpKSksCisJCQlzdHJsZW4oKGNoYXIgKikKKwkJCSAgICAgICAmYmZhX2Zjc19wb3J0X2dldF9wc3ltX25hbWUoYmZhX2Zjc19nZXRfYmFzZV9wb3J0CisJCQkJCQkJICAgKHBvcnQtPmZjcykpKSk7CisKKwkJLyoKKwkJICogRW5zdXJlIHdlIGhhdmUgYSBudWxsIHRlcm1pbmF0aW5nIHN0cmluZy4KKwkJICovCisJCSgoY2hhciAqKQorCQkgcHN5bWJsKVtzdHJsZW4oKGNoYXIgKikKKwkJCQkmYmZhX2Zjc19wb3J0X2dldF9wc3ltX25hbWUKKwkJCQkoYmZhX2Zjc19nZXRfYmFzZV9wb3J0KHBvcnQtPmZjcykpKV0gPSAwOworCisJCXN0cm5jYXQoKGNoYXIgKilwc3ltYmwsCisJCQkoY2hhciAqKSYoYmZhX2Zjc19wb3J0X2dldF9wc3ltX25hbWUocG9ydCkpLAorCQkJc3RybGVuKChjaGFyICopJmJmYV9mY3NfcG9ydF9nZXRfcHN5bV9uYW1lKHBvcnQpKSk7CisJfSBlbHNlIHsKKwkJcHN5bWJsID0gKHU4ICopICYoYmZhX2Zjc19wb3J0X2dldF9wc3ltX25hbWUocG9ydCkpOworCX0KKworCWxlbiA9IGZjX3JzcG5pZF9idWlsZCgmZmNocywgYmZhX2ZjeHBfZ2V0X3JlcWJ1ZihmY3hwKSwKKwkJCSAgICAgIGJmYV9mY3NfcG9ydF9nZXRfZmNpZChwb3J0KSwgMCwgcHN5bWJsKTsKKworCWJmYV9mY3hwX3NlbmQoZmN4cCwgTlVMTCwgcG9ydC0+ZmFicmljLT52Zl9pZCwgcG9ydC0+bHBfdGFnLCBCRkFfRkFMU0UsCisJCSAgICAgIEZDX0NMQVNTXzMsIGxlbiwgJmZjaHMsIGJmYV9mY3NfcG9ydF9uc19yc3BuX2lkX3Jlc3BvbnNlLAorCQkgICAgICAodm9pZCAqKW5zLCBGQ19NQVhfUERVU1osIEZDX1JBX1RPVik7CisKKwlwb3J0LT5zdGF0cy5uc19yc3BuaWRfc2VudCsrOworCisJYmZhX3NtX3NlbmRfZXZlbnQobnMsIE5TU01fRVZFTlRfUlNQTklEX1NFTlQpOworfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X25zX3JzcG5faWRfcmVzcG9uc2Uodm9pZCAqZmNzYXJnLCBzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cCwKKwkJCQkgdm9pZCAqY2JhcmcsIGJmYV9zdGF0dXNfdCByZXFfc3RhdHVzLAorCQkJCSB1MzIgcnNwX2xlbiwgdTMyIHJlc2lkX2xlbiwKKwkJCQkgc3RydWN0IGZjaHNfcyAqcnNwX2ZjaHMpCit7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9uc19zICpucyA9IChzdHJ1Y3QgYmZhX2Zjc19wb3J0X25zX3MgKiljYmFyZzsKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQgPSBucy0+cG9ydDsKKwlzdHJ1Y3QgY3RfaGRyX3MgICAgICAgKmN0aGRyID0gTlVMTDsKKworCWJmYV90cmMocG9ydC0+ZmNzLCBwb3J0LT5wb3J0X2NmZy5wd3duKTsKKworCS8qCisJICogU2FuaXR5IENoZWNrcworCSAqLworCWlmIChyZXFfc3RhdHVzICE9IEJGQV9TVEFUVVNfT0spIHsKKwkJYmZhX3RyYyhwb3J0LT5mY3MsIHJlcV9zdGF0dXMpOworCQlwb3J0LT5zdGF0cy5uc19yc3BuaWRfcnNwX2VycisrOworCQliZmFfc21fc2VuZF9ldmVudChucywgTlNTTV9FVkVOVF9SU1BfRVJST1IpOworCQlyZXR1cm47CisJfQorCisJY3RoZHIgPSAoc3RydWN0IGN0X2hkcl9zICopIEJGQV9GQ1hQX1JTUF9QTEQoZmN4cCk7CisJY3RoZHItPmNtZF9yc3BfY29kZSA9IGJmYV9vc19udG9ocyhjdGhkci0+Y21kX3JzcF9jb2RlKTsKKworCWlmIChjdGhkci0+Y21kX3JzcF9jb2RlID09IENUX1JTUF9BQ0NFUFQpIHsKKwkJcG9ydC0+c3RhdHMubnNfcnNwbmlkX2FjY2VwdHMrKzsKKwkJYmZhX3NtX3NlbmRfZXZlbnQobnMsIE5TU01fRVZFTlRfUlNQX09LKTsKKwkJcmV0dXJuOworCX0KKworCXBvcnQtPnN0YXRzLm5zX3JzcG5pZF9yZWplY3RzKys7CisJYmZhX3RyYyhwb3J0LT5mY3MsIGN0aGRyLT5yZWFzb25fY29kZSk7CisJYmZhX3RyYyhwb3J0LT5mY3MsIGN0aGRyLT5leHBfY29kZSk7CisJYmZhX3NtX3NlbmRfZXZlbnQobnMsIE5TU01fRVZFTlRfUlNQX0VSUk9SKTsKK30KKworLyoqCisgKiBSZWdpc3RlciBGQzQtVHlwZXMKKyAqIFRCRCwgTmVlZCB0byByZXRyaWV2ZSB0aGlzIGZyb20gdGhlIE9TIGRyaXZlciwgaW4gY2FzZSBJUEZDIGlzIGVuYWJsZWQgPworICovCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X25zX3NlbmRfcmZ0X2lkKHZvaWQgKm5zX2NiYXJnLCBzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cF9hbGxvY2VkKQoreworCXN0cnVjdCBiZmFfZmNzX3BvcnRfbnNfcyAqbnMgPSBuc19jYmFyZzsKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQgPSBucy0+cG9ydDsKKwlzdHJ1Y3QgZmNoc19zICAgICAgICAgIGZjaHM7CisJaW50ICAgICAgICAgICAgIGxlbjsKKwlzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cDsKKworCWJmYV90cmMocG9ydC0+ZmNzLCBwb3J0LT5wb3J0X2NmZy5wd3duKTsKKworCWZjeHAgPSBmY3hwX2FsbG9jZWQgPyBmY3hwX2FsbG9jZWQgOiBiZmFfZmNzX2ZjeHBfYWxsb2MocG9ydC0+ZmNzKTsKKwlpZiAoIWZjeHApIHsKKwkJcG9ydC0+c3RhdHMubnNfcmZ0aWRfYWxsb2Nfd2FpdCsrOworCQliZmFfZmN4cF9hbGxvY193YWl0KHBvcnQtPmZjcy0+YmZhLCAmbnMtPmZjeHBfd3FlLAorCQkJCSAgICBiZmFfZmNzX3BvcnRfbnNfc2VuZF9yZnRfaWQsIG5zKTsKKwkJcmV0dXJuOworCX0KKwlucy0+ZmN4cCA9IGZjeHA7CisKKwlsZW4gPSBmY19yZnRpZF9idWlsZCgmZmNocywgYmZhX2ZjeHBfZ2V0X3JlcWJ1ZihmY3hwKSwKKwkJCSAgICAgYmZhX2Zjc19wb3J0X2dldF9mY2lkKHBvcnQpLCAwLAorCQkJICAgICBwb3J0LT5wb3J0X2NmZy5yb2xlcyk7CisKKwliZmFfZmN4cF9zZW5kKGZjeHAsIE5VTEwsIHBvcnQtPmZhYnJpYy0+dmZfaWQsIHBvcnQtPmxwX3RhZywgQkZBX0ZBTFNFLAorCQkgICAgICBGQ19DTEFTU18zLCBsZW4sICZmY2hzLCBiZmFfZmNzX3BvcnRfbnNfcmZ0X2lkX3Jlc3BvbnNlLAorCQkgICAgICAodm9pZCAqKW5zLCBGQ19NQVhfUERVU1osIEZDX1JBX1RPVik7CisKKwlwb3J0LT5zdGF0cy5uc19yZnRpZF9zZW50Kys7CisJYmZhX3NtX3NlbmRfZXZlbnQobnMsIE5TU01fRVZFTlRfUkZUSURfU0VOVCk7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3BvcnRfbnNfcmZ0X2lkX3Jlc3BvbnNlKHZvaWQgKmZjc2FyZywgc3RydWN0IGJmYV9mY3hwX3MgKmZjeHAsCisJCQkJdm9pZCAqY2JhcmcsIGJmYV9zdGF0dXNfdCByZXFfc3RhdHVzLAorCQkJCXUzMiByc3BfbGVuLCB1MzIgcmVzaWRfbGVuLAorCQkJCXN0cnVjdCBmY2hzX3MgKnJzcF9mY2hzKQoreworCXN0cnVjdCBiZmFfZmNzX3BvcnRfbnNfcyAqbnMgPSAoc3RydWN0IGJmYV9mY3NfcG9ydF9uc19zICopY2Jhcmc7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0ID0gbnMtPnBvcnQ7CisJc3RydWN0IGN0X2hkcl9zICAgICAgICpjdGhkciA9IE5VTEw7CisKKwliZmFfdHJjKHBvcnQtPmZjcywgcG9ydC0+cG9ydF9jZmcucHd3bik7CisKKwkvKgorCSAqIFNhbml0eSBDaGVja3MKKwkgKi8KKwlpZiAocmVxX3N0YXR1cyAhPSBCRkFfU1RBVFVTX09LKSB7CisJCWJmYV90cmMocG9ydC0+ZmNzLCByZXFfc3RhdHVzKTsKKwkJcG9ydC0+c3RhdHMubnNfcmZ0aWRfcnNwX2VycisrOworCQliZmFfc21fc2VuZF9ldmVudChucywgTlNTTV9FVkVOVF9SU1BfRVJST1IpOworCQlyZXR1cm47CisJfQorCisJY3RoZHIgPSAoc3RydWN0IGN0X2hkcl9zICopIEJGQV9GQ1hQX1JTUF9QTEQoZmN4cCk7CisJY3RoZHItPmNtZF9yc3BfY29kZSA9IGJmYV9vc19udG9ocyhjdGhkci0+Y21kX3JzcF9jb2RlKTsKKworCWlmIChjdGhkci0+Y21kX3JzcF9jb2RlID09IENUX1JTUF9BQ0NFUFQpIHsKKwkJcG9ydC0+c3RhdHMubnNfcmZ0aWRfYWNjZXB0cysrOworCQliZmFfc21fc2VuZF9ldmVudChucywgTlNTTV9FVkVOVF9SU1BfT0spOworCQlyZXR1cm47CisJfQorCisJcG9ydC0+c3RhdHMubnNfcmZ0aWRfcmVqZWN0cysrOworCWJmYV90cmMocG9ydC0+ZmNzLCBjdGhkci0+cmVhc29uX2NvZGUpOworCWJmYV90cmMocG9ydC0+ZmNzLCBjdGhkci0+ZXhwX2NvZGUpOworCWJmYV9zbV9zZW5kX2V2ZW50KG5zLCBOU1NNX0VWRU5UX1JTUF9FUlJPUik7Cit9CisKKy8qKgorKiBSZWdpc3RlciBGQzQtRmVhdHVyZXMgOiBTaG91bGQgYmUgZG9uZSBhZnRlciBSRlRfSUQKKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9uc19zZW5kX3JmZl9pZCh2b2lkICpuc19jYmFyZywgc3RydWN0IGJmYV9mY3hwX3MgKmZjeHBfYWxsb2NlZCkKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X25zX3MgKm5zID0gbnNfY2Jhcmc7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0ID0gbnMtPnBvcnQ7CisJc3RydWN0IGZjaHNfcyAgICAgICAgICBmY2hzOworCWludCAgICAgICAgICAgICBsZW47CisJc3RydWN0IGJmYV9mY3hwX3MgKmZjeHA7CisJdTggICAgICAgICBmYzRfZnRycyA9IDA7CisKKwliZmFfdHJjKHBvcnQtPmZjcywgcG9ydC0+cG9ydF9jZmcucHd3bik7CisKKwlmY3hwID0gZmN4cF9hbGxvY2VkID8gZmN4cF9hbGxvY2VkIDogYmZhX2Zjc19mY3hwX2FsbG9jKHBvcnQtPmZjcyk7CisJaWYgKCFmY3hwKSB7CisJCXBvcnQtPnN0YXRzLm5zX3JmZmlkX2FsbG9jX3dhaXQrKzsKKwkJYmZhX2ZjeHBfYWxsb2Nfd2FpdChwb3J0LT5mY3MtPmJmYSwgJm5zLT5mY3hwX3dxZSwKKwkJCQkgICAgYmZhX2Zjc19wb3J0X25zX3NlbmRfcmZmX2lkLCBucyk7CisJCXJldHVybjsKKwl9CisJbnMtPmZjeHAgPSBmY3hwOworCisJaWYgKEJGQV9GQ1NfVlBPUlRfSVNfSU5JVElBVE9SX01PREUobnMtPnBvcnQpKSB7CisJCWZjNF9mdHJzID0gRkNfR1NfRkNQX0ZDNF9GRUFUVVJFX0lOSVRJQVRPUjsKKwl9IGVsc2UgaWYgKEJGQV9GQ1NfVlBPUlRfSVNfVEFSR0VUX01PREUobnMtPnBvcnQpKSB7CisJCWZjNF9mdHJzID0gRkNfR1NfRkNQX0ZDNF9GRUFUVVJFX1RBUkdFVDsKKwl9CisKKwlsZW4gPSBmY19yZmZpZF9idWlsZCgmZmNocywgYmZhX2ZjeHBfZ2V0X3JlcWJ1ZihmY3hwKSwKKwkJCSAgICAgYmZhX2Zjc19wb3J0X2dldF9mY2lkKHBvcnQpLCAwLCBGQ19UWVBFX0ZDUCwKKwkJCSAgICAgZmM0X2Z0cnMpOworCisJYmZhX2ZjeHBfc2VuZChmY3hwLCBOVUxMLCBwb3J0LT5mYWJyaWMtPnZmX2lkLCBwb3J0LT5scF90YWcsIEJGQV9GQUxTRSwKKwkJICAgICAgRkNfQ0xBU1NfMywgbGVuLCAmZmNocywgYmZhX2Zjc19wb3J0X25zX3JmZl9pZF9yZXNwb25zZSwKKwkJICAgICAgKHZvaWQgKilucywgRkNfTUFYX1BEVVNaLCBGQ19SQV9UT1YpOworCisJcG9ydC0+c3RhdHMubnNfcmZmaWRfc2VudCsrOworCWJmYV9zbV9zZW5kX2V2ZW50KG5zLCBOU1NNX0VWRU5UX1JGRklEX1NFTlQpOworfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X25zX3JmZl9pZF9yZXNwb25zZSh2b2lkICpmY3NhcmcsIHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwLAorCQkJCXZvaWQgKmNiYXJnLCBiZmFfc3RhdHVzX3QgcmVxX3N0YXR1cywKKwkJCQl1MzIgcnNwX2xlbiwgdTMyIHJlc2lkX2xlbiwKKwkJCQlzdHJ1Y3QgZmNoc19zICpyc3BfZmNocykKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X25zX3MgKm5zID0gKHN0cnVjdCBiZmFfZmNzX3BvcnRfbnNfcyAqKWNiYXJnOworCXN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCA9IG5zLT5wb3J0OworCXN0cnVjdCBjdF9oZHJfcyAgICAgICAqY3RoZHIgPSBOVUxMOworCisJYmZhX3RyYyhwb3J0LT5mY3MsIHBvcnQtPnBvcnRfY2ZnLnB3d24pOworCisJLyoKKwkgKiBTYW5pdHkgQ2hlY2tzCisJICovCisJaWYgKHJlcV9zdGF0dXMgIT0gQkZBX1NUQVRVU19PSykgeworCQliZmFfdHJjKHBvcnQtPmZjcywgcmVxX3N0YXR1cyk7CisJCXBvcnQtPnN0YXRzLm5zX3JmZmlkX3JzcF9lcnIrKzsKKwkJYmZhX3NtX3NlbmRfZXZlbnQobnMsIE5TU01fRVZFTlRfUlNQX0VSUk9SKTsKKwkJcmV0dXJuOworCX0KKworCWN0aGRyID0gKHN0cnVjdCBjdF9oZHJfcyAqKSBCRkFfRkNYUF9SU1BfUExEKGZjeHApOworCWN0aGRyLT5jbWRfcnNwX2NvZGUgPSBiZmFfb3NfbnRvaHMoY3RoZHItPmNtZF9yc3BfY29kZSk7CisKKwlpZiAoY3RoZHItPmNtZF9yc3BfY29kZSA9PSBDVF9SU1BfQUNDRVBUKSB7CisJCXBvcnQtPnN0YXRzLm5zX3JmZmlkX2FjY2VwdHMrKzsKKwkJYmZhX3NtX3NlbmRfZXZlbnQobnMsIE5TU01fRVZFTlRfUlNQX09LKTsKKwkJcmV0dXJuOworCX0KKworCXBvcnQtPnN0YXRzLm5zX3JmZmlkX3JlamVjdHMrKzsKKwliZmFfdHJjKHBvcnQtPmZjcywgY3RoZHItPnJlYXNvbl9jb2RlKTsKKwliZmFfdHJjKHBvcnQtPmZjcywgY3RoZHItPmV4cF9jb2RlKTsKKworCWlmIChjdGhkci0+cmVhc29uX2NvZGUgPT0gQ1RfUlNOX05PVF9TVVBQKSB7CisJCS8qCisJCSAqIGlmIHRoaXMgY29tbWFuZCBpcyBub3Qgc3VwcG9ydGVkLCB3ZSBkb24ndCByZXRyeQorCQkgKi8KKwkJYmZhX3NtX3NlbmRfZXZlbnQobnMsIE5TU01fRVZFTlRfUlNQX09LKTsKKwl9IGVsc2UgeworCQliZmFfc21fc2VuZF9ldmVudChucywgTlNTTV9FVkVOVF9SU1BfRVJST1IpOworCX0KK30KKworLyoqCisgKiBRdWVyeSBGYWJyaWMgZm9yIEZDNC1UeXBlcyBEZXZpY2VzLgorICoKKyogIFRCRCA6IE5lZWQgdG8gdXNlIGEgbG9jYWwgKEZDUyBwcml2YXRlKSByZXNwb25zZSBidWZmZXIsIHNpbmNlIHRoZSByZXNwb25zZQorICogY2FuIGJlIGxhcmdlciB0aGFuIDJLLgorICovCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X25zX3NlbmRfZ2lkX2Z0KHZvaWQgKm5zX2NiYXJnLCBzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cF9hbGxvY2VkKQoreworCXN0cnVjdCBiZmFfZmNzX3BvcnRfbnNfcyAqbnMgPSBuc19jYmFyZzsKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQgPSBucy0+cG9ydDsKKwlzdHJ1Y3QgZmNoc19zICAgICAgICAgIGZjaHM7CisJaW50ICAgICAgICAgICAgIGxlbjsKKwlzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cDsKKworCWJmYV90cmMocG9ydC0+ZmNzLCBwb3J0LT5waWQpOworCisJZmN4cCA9IGZjeHBfYWxsb2NlZCA/IGZjeHBfYWxsb2NlZCA6IGJmYV9mY3NfZmN4cF9hbGxvYyhwb3J0LT5mY3MpOworCWlmICghZmN4cCkgeworCQlwb3J0LT5zdGF0cy5uc19naWRmdF9hbGxvY193YWl0Kys7CisJCWJmYV9mY3hwX2FsbG9jX3dhaXQocG9ydC0+ZmNzLT5iZmEsICZucy0+ZmN4cF93cWUsCisJCQkJICAgIGJmYV9mY3NfcG9ydF9uc19zZW5kX2dpZF9mdCwgbnMpOworCQlyZXR1cm47CisJfQorCW5zLT5mY3hwID0gZmN4cDsKKworCS8qCisJICogVGhpcyBxdWVyeSBpcyBvbmx5IGluaXRpYXRlZCBmb3IgRkNQIGluaXRpYXRvciBtb2RlLgorCSAqLworCWxlbiA9IGZjX2dpZF9mdF9idWlsZCgmZmNocywgYmZhX2ZjeHBfZ2V0X3JlcWJ1ZihmY3hwKSwgbnMtPnBvcnQtPnBpZCwKKwkJCSAgICAgIEZDX1RZUEVfRkNQKTsKKworCWJmYV9mY3hwX3NlbmQoZmN4cCwgTlVMTCwgcG9ydC0+ZmFicmljLT52Zl9pZCwgcG9ydC0+bHBfdGFnLCBCRkFfRkFMU0UsCisJCSAgICAgIEZDX0NMQVNTXzMsIGxlbiwgJmZjaHMsIGJmYV9mY3NfcG9ydF9uc19naWRfZnRfcmVzcG9uc2UsCisJCSAgICAgICh2b2lkICopbnMsIGJmYV9mY3hwX2dldF9tYXhyc3AocG9ydC0+ZmNzLT5iZmEpLAorCQkgICAgICBGQ19SQV9UT1YpOworCisJcG9ydC0+c3RhdHMubnNfZ2lkZnRfc2VudCsrOworCisJYmZhX3NtX3NlbmRfZXZlbnQobnMsIE5TU01fRVZFTlRfR0lERlRfU0VOVCk7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3BvcnRfbnNfZ2lkX2Z0X3Jlc3BvbnNlKHZvaWQgKmZjc2FyZywgc3RydWN0IGJmYV9mY3hwX3MgKmZjeHAsCisJCQkJdm9pZCAqY2JhcmcsIGJmYV9zdGF0dXNfdCByZXFfc3RhdHVzLAorCQkJCXUzMiByc3BfbGVuLCB1MzIgcmVzaWRfbGVuLAorCQkJCXN0cnVjdCBmY2hzX3MgKnJzcF9mY2hzKQoreworCXN0cnVjdCBiZmFfZmNzX3BvcnRfbnNfcyAqbnMgPSAoc3RydWN0IGJmYV9mY3NfcG9ydF9uc19zICopY2Jhcmc7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0ID0gbnMtPnBvcnQ7CisJc3RydWN0IGN0X2hkcl9zICAgICAgICpjdGhkciA9IE5VTEw7CisJdTMyICAgICAgICBuX3BpZHM7CisKKwliZmFfdHJjKHBvcnQtPmZjcywgcG9ydC0+cG9ydF9jZmcucHd3bik7CisKKwkvKgorCSAqIFNhbml0eSBDaGVja3MKKwkgKi8KKwlpZiAocmVxX3N0YXR1cyAhPSBCRkFfU1RBVFVTX09LKSB7CisJCWJmYV90cmMocG9ydC0+ZmNzLCByZXFfc3RhdHVzKTsKKwkJcG9ydC0+c3RhdHMubnNfZ2lkZnRfcnNwX2VycisrOworCQliZmFfc21fc2VuZF9ldmVudChucywgTlNTTV9FVkVOVF9SU1BfRVJST1IpOworCQlyZXR1cm47CisJfQorCisJaWYgKHJlc2lkX2xlbiAhPSAwKSB7CisJCS8qCisJCSAqIFRCRCA6IHdlIHdpbGwgbmVlZCB0byBhbGxvY2F0ZSBhIGxhcmdlciBidWZmZXIgJiByZXRyeSB0aGUKKwkJICogY29tbWFuZAorCQkgKi8KKwkJYmZhX3RyYyhwb3J0LT5mY3MsIHJzcF9sZW4pOworCQliZmFfdHJjKHBvcnQtPmZjcywgcmVzaWRfbGVuKTsKKwkJcmV0dXJuOworCX0KKworCWN0aGRyID0gKHN0cnVjdCBjdF9oZHJfcyAqKSBCRkFfRkNYUF9SU1BfUExEKGZjeHApOworCWN0aGRyLT5jbWRfcnNwX2NvZGUgPSBiZmFfb3NfbnRvaHMoY3RoZHItPmNtZF9yc3BfY29kZSk7CisKKwlzd2l0Y2ggKGN0aGRyLT5jbWRfcnNwX2NvZGUpIHsKKworCWNhc2UgQ1RfUlNQX0FDQ0VQVDoKKworCQlwb3J0LT5zdGF0cy5uc19naWRmdF9hY2NlcHRzKys7CisJCW5fcGlkcyA9IChmY19nZXRfY3RyZXNwX3B5bGRfbGVuKHJzcF9sZW4pIC8gc2l6ZW9mKHUzMikpOworCQliZmFfdHJjKHBvcnQtPmZjcywgbl9waWRzKTsKKwkJYmZhX2Zjc19wb3J0X25zX3Byb2Nlc3NfZ2lkZnRfcGlkcyhwb3J0LAorCQkJCQkJICAgKHUzMiAqKSAoY3RoZHIgKyAxKSwKKwkJCQkJCSAgIG5fcGlkcyk7CisJCWJmYV9zbV9zZW5kX2V2ZW50KG5zLCBOU1NNX0VWRU5UX1JTUF9PSyk7CisJCWJyZWFrOworCisJY2FzZSBDVF9SU1BfUkVKRUNUOgorCisJCS8qCisJCSAqIENoZWNrIHRoZSByZWFzb24gY29kZSAgJiBleHBsYW5hdGlvbi4KKwkJICogVGhlcmUgbWF5IG5vdCBoYXZlIGJlZW4gYW55IEZDNCBkZXZpY2VzIGluIHRoZSBmYWJyaWMKKwkJICovCisJCXBvcnQtPnN0YXRzLm5zX2dpZGZ0X3JlamVjdHMrKzsKKwkJYmZhX3RyYyhwb3J0LT5mY3MsIGN0aGRyLT5yZWFzb25fY29kZSk7CisJCWJmYV90cmMocG9ydC0+ZmNzLCBjdGhkci0+ZXhwX2NvZGUpOworCisJCWlmICgoY3RoZHItPnJlYXNvbl9jb2RlID09IENUX1JTTl9VTkFCTEVfVE9fUEVSRikKKwkJICAgICYmIChjdGhkci0+ZXhwX2NvZGUgPT0gQ1RfTlNfRVhQX0ZUX05PVF9SRUcpKSB7CisKKwkJCWJmYV9zbV9zZW5kX2V2ZW50KG5zLCBOU1NNX0VWRU5UX1JTUF9PSyk7CisJCX0gZWxzZSB7CisJCQkvKgorCQkJICogZm9yIGFsbCBvdGhlciBlcnJvcnMsIHJldHJ5CisJCQkgKi8KKwkJCWJmYV9zbV9zZW5kX2V2ZW50KG5zLCBOU1NNX0VWRU5UX1JTUF9FUlJPUik7CisJCX0KKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlwb3J0LT5zdGF0cy5uc19naWRmdF91bmtub3duX3JzcCsrOworCQliZmFfdHJjKHBvcnQtPmZjcywgY3RoZHItPmNtZF9yc3BfY29kZSk7CisJCWJmYV9zbV9zZW5kX2V2ZW50KG5zLCBOU1NNX0VWRU5UX1JTUF9FUlJPUik7CisJfQorfQorCisvKioKKyAqICAgICBUaGlzIHJvdXRpbmUgd2lsbCBiZSBjYWxsZWQgYnkgYmZhX3RpbWVyIG9uIHRpbWVyIHRpbWVvdXRzLgorICoKKyAqIAlwYXJhbVtpbl0gCXBvcnQgCS0gcG9pbnRlciB0byBiZmFfZmNzX3BvcnRfdC4KKyAqCisgKiAJcmV0dXJuCisgKiAJCXZvaWQKKyAqCisqIAlTcGVjaWFsIENvbnNpZGVyYXRpb25zOgorICoKKyAqIAlub3RlCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX3BvcnRfbnNfdGltZW91dCh2b2lkICphcmcpCit7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9uc19zICpucyA9IChzdHJ1Y3QgYmZhX2Zjc19wb3J0X25zX3MgKilhcmc7CisKKwlucy0+cG9ydC0+c3RhdHMubnNfdGltZW91dHMrKzsKKwliZmFfc21fc2VuZF9ldmVudChucywgTlNTTV9FVkVOVF9USU1FT1VUKTsKK30KKworLyoKKyAqIFByb2Nlc3MgdGhlIFBJRCBsaXN0IGluIEdJRF9GVCByZXNwb25zZQorICovCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X25zX3Byb2Nlc3NfZ2lkZnRfcGlkcyhzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQsCisJCQkJICAgdTMyICpwaWRfYnVmLCB1MzIgbl9waWRzKQoreworCXN0cnVjdCBmY2dzX2dpZGZ0X3Jlc3BfcyAqZ2lkZnRfZW50cnk7CisJc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQ7CisJdTMyICAgICAgICBpaTsKKworCWZvciAoaWkgPSAwOyBpaSA8IG5fcGlkczsgaWkrKykgeworCQlnaWRmdF9lbnRyeSA9IChzdHJ1Y3QgZmNnc19naWRmdF9yZXNwX3MgKikgJnBpZF9idWZbaWldOworCisJCWlmIChnaWRmdF9lbnRyeS0+cGlkID09IHBvcnQtPnBpZCkKKwkJCWNvbnRpbnVlOworCisJCS8qCisJCSAqIENoZWNrIGlmIHRoaXMgcnBvcnQgYWxyZWFkeSBleGlzdHMKKwkJICovCisJCXJwb3J0ID0gYmZhX2Zjc19wb3J0X2dldF9ycG9ydF9ieV9waWQocG9ydCwgZ2lkZnRfZW50cnktPnBpZCk7CisJCWlmIChycG9ydCA9PSBOVUxMKSB7CisJCQkvKgorCQkJICogdGhpcyBpcyBhIG5ldyBkZXZpY2UuIGNyZWF0ZSBycG9ydAorCQkJICovCisJCQlycG9ydCA9IGJmYV9mY3NfcnBvcnRfY3JlYXRlKHBvcnQsIGdpZGZ0X2VudHJ5LT5waWQpOworCQl9IGVsc2UgeworCQkJLyoKKwkJCSAqIHRoaXMgcnBvcnQgYWxyZWFkeSBleGlzdHMKKwkJCSAqLworCQkJYmZhX2Zjc19ycG9ydF9zY24ocnBvcnQpOworCQl9CisKKwkJYmZhX3RyYyhwb3J0LT5mY3MsIGdpZGZ0X2VudHJ5LT5waWQpOworCisJCS8qCisJCSAqIGlmIHRoZSBsYXN0IGVudHJ5IGJpdCBpcyBzZXQsIGJhaWwgb3V0LgorCQkgKi8KKwkJaWYgKGdpZGZ0X2VudHJ5LT5sYXN0KQorCQkJcmV0dXJuOworCX0KK30KKworLyoqCisgKiAgZmNzX25zX3B1YmxpYyBGQ1MgbmFtZXNlcnZlciBwdWJsaWMgaW50ZXJmYWNlcworICovCisKKy8qCisgKiBGdW5jdGlvbnMgY2FsbGVkIGJ5IHBvcnQvZmFiLgorICogVGhlc2Ugd2lsbCBzZW5kIHJlbGV2YW50IEV2ZW50cyB0byB0aGUgbnMgc3RhdGUgbWFjaGluZS4KKyAqLwordm9pZAorYmZhX2Zjc19wb3J0X25zX2luaXQoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0KQoreworCXN0cnVjdCBiZmFfZmNzX3BvcnRfbnNfcyAqbnMgPSBCRkFfRkNTX0dFVF9OU19GUk9NX1BPUlQocG9ydCk7CisKKwlucy0+cG9ydCA9IHBvcnQ7CisJYmZhX3NtX3NldF9zdGF0ZShucywgYmZhX2Zjc19wb3J0X25zX3NtX29mZmxpbmUpOworfQorCit2b2lkCitiZmFfZmNzX3BvcnRfbnNfb2ZmbGluZShzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQpCit7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9uc19zICpucyA9IEJGQV9GQ1NfR0VUX05TX0ZST01fUE9SVChwb3J0KTsKKworCW5zLT5wb3J0ID0gcG9ydDsKKwliZmFfc21fc2VuZF9ldmVudChucywgTlNTTV9FVkVOVF9QT1JUX09GRkxJTkUpOworfQorCit2b2lkCitiZmFfZmNzX3BvcnRfbnNfb25saW5lKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCkKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X25zX3MgKm5zID0gQkZBX0ZDU19HRVRfTlNfRlJPTV9QT1JUKHBvcnQpOworCisJbnMtPnBvcnQgPSBwb3J0OworCWJmYV9zbV9zZW5kX2V2ZW50KG5zLCBOU1NNX0VWRU5UX1BPUlRfT05MSU5FKTsKK30KKwordm9pZAorYmZhX2Zjc19wb3J0X25zX3F1ZXJ5KHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCkKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X25zX3MgKm5zID0gQkZBX0ZDU19HRVRfTlNfRlJPTV9QT1JUKHBvcnQpOworCisJYmZhX3RyYyhwb3J0LT5mY3MsIHBvcnQtPnBpZCk7CisJYmZhX3NtX3NlbmRfZXZlbnQobnMsIE5TU01fRVZFTlRfTlNfUVVFUlkpOworfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X25zX2Jvb3RfdGFyZ2V0X2Rpc2Moc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0KQoreworCisJc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQ7CisJdTggICAgICAgICBud3duczsKKwl3d25fdCAgICAgICAgICAqd3duczsKKwlpbnQgICAgICAgICAgICAgaWk7CisKKwliZmFfaW9jZmNfZ2V0X2Jvb3R3d25zKHBvcnQtPmZjcy0+YmZhLCAmbnd3bnMsICZ3d25zKTsKKworCWZvciAoaWkgPSAwOyBpaSA8IG53d25zOyArK2lpKSB7CisJCXJwb3J0ID0gYmZhX2Zjc19ycG9ydF9jcmVhdGVfYnlfd3duKHBvcnQsIHd3bnNbaWldKTsKKwkJYmZhX2Fzc2VydChycG9ydCk7CisJfQorfQorCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvcGxvZy5jIGIvZHJpdmVycy9zY3NpL2JmYS9wbG9nLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODZhZjgxOAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvcGxvZy5jCkBAIC0wLDAgKzEsMTg0IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxiZmFfb3NfaW5jLmg+CisjaW5jbHVkZSA8Y3MvYmZhX3Bsb2cuaD4KKyNpbmNsdWRlIDxjcy9iZmFfZGVidWcuaD4KKworc3RhdGljIGludAorcGxrZF92YWxpZGF0ZV9sb2dyZWMoc3RydWN0IGJmYV9wbG9nX3JlY19zICpwbF9yZWMpCit7CisJaWYgKChwbF9yZWMtPmxvZ190eXBlICE9IEJGQV9QTF9MT0dfVFlQRV9JTlQpCisJICAgICYmIChwbF9yZWMtPmxvZ190eXBlICE9IEJGQV9QTF9MT0dfVFlQRV9TVFJJTkcpKQorCQlyZXR1cm4gMTsKKworCWlmICgocGxfcmVjLT5sb2dfdHlwZSAhPSBCRkFfUExfTE9HX1RZUEVfSU5UKQorCSAgICAmJiAocGxfcmVjLT5sb2dfbnVtX2ludHMgPiBCRkFfUExfSU5UX0xPR19TWikpCisJCXJldHVybiAxOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfcGxvZ19hZGQoc3RydWN0IGJmYV9wbG9nX3MgKnBsb2csIHN0cnVjdCBiZmFfcGxvZ19yZWNfcyAqcGxfcmVjKQoreworCXUxNiAgICAgICAgdGFpbDsKKwlzdHJ1Y3QgYmZhX3Bsb2dfcmVjX3MgKnBsX3JlY3A7CisKKwlpZiAocGxvZy0+cGxvZ19lbmFibGVkID09IDApCisJCXJldHVybjsKKworCWlmIChwbGtkX3ZhbGlkYXRlX2xvZ3JlYyhwbF9yZWMpKSB7CisJCWJmYV9hc3NlcnQoMCk7CisJCXJldHVybjsKKwl9CisKKwl0YWlsID0gcGxvZy0+dGFpbDsKKworCXBsX3JlY3AgPSAmKHBsb2ctPnBsb2dfcmVjc1t0YWlsXSk7CisKKwliZmFfb3NfbWVtY3B5KHBsX3JlY3AsIHBsX3JlYywgc2l6ZW9mKHN0cnVjdCBiZmFfcGxvZ19yZWNfcykpOworCisJcGxfcmVjcC0+dHYgPSBCRkFfVFJDX1RTKHBsb2cpOworCUJGQV9QTF9MT0dfUkVDX0lOQ1IocGxvZy0+dGFpbCk7CisKKwlpZiAocGxvZy0+aGVhZCA9PSBwbG9nLT50YWlsKQorCQlCRkFfUExfTE9HX1JFQ19JTkNSKHBsb2ctPmhlYWQpOworfQorCit2b2lkCitiZmFfcGxvZ19pbml0KHN0cnVjdCBiZmFfcGxvZ19zICpwbG9nKQoreworCWJmYV9vc19tZW1zZXQoKGNoYXIgKilwbG9nLCAwLCBzaXplb2Yoc3RydWN0IGJmYV9wbG9nX3MpKTsKKworCWJmYV9vc19tZW1jcHkocGxvZy0+cGxvZ19zaWcsIEJGQV9QTF9TSUdfU1RSLCBCRkFfUExfU0lHX0xFTik7CisJcGxvZy0+aGVhZCA9IHBsb2ctPnRhaWwgPSAwOworCXBsb2ctPnBsb2dfZW5hYmxlZCA9IDE7Cit9CisKK3ZvaWQKK2JmYV9wbG9nX3N0cihzdHJ1Y3QgYmZhX3Bsb2dfcyAqcGxvZywgZW51bSBiZmFfcGxvZ19taWQgbWlkLAorCQllbnVtIGJmYV9wbG9nX2VpZCBldmVudCwKKwkJdTE2IG1pc2MsIGNoYXIgKmxvZ19zdHIpCit7CisJc3RydWN0IGJmYV9wbG9nX3JlY19zICBscDsKKworCWlmIChwbG9nLT5wbG9nX2VuYWJsZWQpIHsKKwkJYmZhX29zX21lbXNldCgmbHAsIDAsIHNpemVvZihzdHJ1Y3QgYmZhX3Bsb2dfcmVjX3MpKTsKKwkJbHAubWlkID0gbWlkOworCQlscC5laWQgPSBldmVudDsKKwkJbHAubG9nX3R5cGUgPSBCRkFfUExfTE9HX1RZUEVfU1RSSU5HOworCQlscC5taXNjID0gbWlzYzsKKwkJc3RybmNweShscC5sb2dfZW50cnkuc3RyaW5nX2xvZywgbG9nX3N0ciwKKwkJCUJGQV9QTF9TVFJJTkdfTE9HX1NaIC0gMSk7CisJCWxwLmxvZ19lbnRyeS5zdHJpbmdfbG9nW0JGQV9QTF9TVFJJTkdfTE9HX1NaIC0gMV0gPSAnXDAnOworCQliZmFfcGxvZ19hZGQocGxvZywgJmxwKTsKKwl9Cit9CisKK3ZvaWQKK2JmYV9wbG9nX2ludGFycihzdHJ1Y3QgYmZhX3Bsb2dfcyAqcGxvZywgZW51bSBiZmFfcGxvZ19taWQgbWlkLAorCQllbnVtIGJmYV9wbG9nX2VpZCBldmVudCwKKwkJdTE2IG1pc2MsIHUzMiAqaW50YXJyLCB1MzIgbnVtX2ludHMpCit7CisJc3RydWN0IGJmYV9wbG9nX3JlY19zICBscDsKKwl1MzIgICAgICAgIGk7CisKKwlpZiAobnVtX2ludHMgPiBCRkFfUExfSU5UX0xPR19TWikKKwkJbnVtX2ludHMgPSBCRkFfUExfSU5UX0xPR19TWjsKKworCWlmIChwbG9nLT5wbG9nX2VuYWJsZWQpIHsKKwkJYmZhX29zX21lbXNldCgmbHAsIDAsIHNpemVvZihzdHJ1Y3QgYmZhX3Bsb2dfcmVjX3MpKTsKKwkJbHAubWlkID0gbWlkOworCQlscC5laWQgPSBldmVudDsKKwkJbHAubG9nX3R5cGUgPSBCRkFfUExfTE9HX1RZUEVfSU5UOworCQlscC5taXNjID0gbWlzYzsKKworCQlmb3IgKGkgPSAwOyBpIDwgbnVtX2ludHM7IGkrKykKKwkJCWJmYV9vc19hc3NpZ24obHAubG9nX2VudHJ5LmludF9sb2dbaV0sCisJCQkJCWludGFycltpXSk7CisKKwkJbHAubG9nX251bV9pbnRzID0gKHU4KSBudW1faW50czsKKworCQliZmFfcGxvZ19hZGQocGxvZywgJmxwKTsKKwl9Cit9CisKK3ZvaWQKK2JmYV9wbG9nX2ZjaGRyKHN0cnVjdCBiZmFfcGxvZ19zICpwbG9nLCBlbnVtIGJmYV9wbG9nX21pZCBtaWQsCisJCQllbnVtIGJmYV9wbG9nX2VpZCBldmVudCwKKwkJCXUxNiBtaXNjLCBzdHJ1Y3QgZmNoc19zICpmY2hkcikKK3sKKwlzdHJ1Y3QgYmZhX3Bsb2dfcmVjX3MgIGxwOworCXUzMiAgICAgICAqdG1wX2ludCA9ICh1MzIgKikgZmNoZHI7CisJdTMyICAgICAgICBpbnRzW0JGQV9QTF9JTlRfTE9HX1NaXTsKKworCWlmIChwbG9nLT5wbG9nX2VuYWJsZWQpIHsKKwkJYmZhX29zX21lbXNldCgmbHAsIDAsIHNpemVvZihzdHJ1Y3QgYmZhX3Bsb2dfcmVjX3MpKTsKKworCQlpbnRzWzBdID0gdG1wX2ludFswXTsKKwkJaW50c1sxXSA9IHRtcF9pbnRbMV07CisJCWludHNbMl0gPSB0bXBfaW50WzRdOworCisJCWJmYV9wbG9nX2ludGFycihwbG9nLCBtaWQsIGV2ZW50LCBtaXNjLCBpbnRzLCAzKTsKKwl9Cit9CisKK3ZvaWQKK2JmYV9wbG9nX2ZjaGRyX2FuZF9wbChzdHJ1Y3QgYmZhX3Bsb2dfcyAqcGxvZywgZW51bSBiZmFfcGxvZ19taWQgbWlkLAorCQkgICAgICBlbnVtIGJmYV9wbG9nX2VpZCBldmVudCwgdTE2IG1pc2MsIHN0cnVjdCBmY2hzX3MgKmZjaGRyLAorCQkgICAgICB1MzIgcGxkX3cwKQoreworCXN0cnVjdCBiZmFfcGxvZ19yZWNfcyAgbHA7CisJdTMyICAgICAgICp0bXBfaW50ID0gKHUzMiAqKSBmY2hkcjsKKwl1MzIgICAgICAgIGludHNbQkZBX1BMX0lOVF9MT0dfU1pdOworCisJaWYgKHBsb2ctPnBsb2dfZW5hYmxlZCkgeworCQliZmFfb3NfbWVtc2V0KCZscCwgMCwgc2l6ZW9mKHN0cnVjdCBiZmFfcGxvZ19yZWNfcykpOworCisJCWludHNbMF0gPSB0bXBfaW50WzBdOworCQlpbnRzWzFdID0gdG1wX2ludFsxXTsKKwkJaW50c1syXSA9IHRtcF9pbnRbNF07CisJCWludHNbM10gPSBwbGRfdzA7CisKKwkJYmZhX3Bsb2dfaW50YXJyKHBsb2csIG1pZCwgZXZlbnQsIG1pc2MsIGludHMsIDQpOworCX0KK30KKwordm9pZAorYmZhX3Bsb2dfY2xlYXIoc3RydWN0IGJmYV9wbG9nX3MgKnBsb2cpCit7CisJcGxvZy0+aGVhZCA9IHBsb2ctPnRhaWwgPSAwOworfQorCit2b2lkCitiZmFfcGxvZ19lbmFibGUoc3RydWN0IGJmYV9wbG9nX3MgKnBsb2cpCit7CisJcGxvZy0+cGxvZ19lbmFibGVkID0gMTsKK30KKwordm9pZAorYmZhX3Bsb2dfZGlzYWJsZShzdHJ1Y3QgYmZhX3Bsb2dfcyAqcGxvZykKK3sKKwlwbG9nLT5wbG9nX2VuYWJsZWQgPSAwOworfQorCitiZmFfYm9vbGVhbl90CitiZmFfcGxvZ19nZXRfc2V0dGluZyhzdHJ1Y3QgYmZhX3Bsb2dfcyAqcGxvZykKK3sKKwlyZXR1cm4oKGJmYV9ib29sZWFuX3QpcGxvZy0+cGxvZ19lbmFibGVkKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvcnBvcnQuYyBiL2RyaXZlcnMvc2NzaS9iZmEvcnBvcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Y2Y1OGJiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9ycG9ydC5jCkBAIC0wLDAgKzEsMjYxOCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisvKioKKyAqICBycG9ydC5jIFJlbW90ZSBwb3J0IGltcGxlbWVudGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxiZmEuaD4KKyNpbmNsdWRlIDxiZmFfc3ZjLmg+CisjaW5jbHVkZSAiZmNidWlsZC5oIgorI2luY2x1ZGUgImZjc192cG9ydC5oIgorI2luY2x1ZGUgImZjc19scG9ydC5oIgorI2luY2x1ZGUgImZjc19ycG9ydC5oIgorI2luY2x1ZGUgImZjc19mY3BpbS5oIgorI2luY2x1ZGUgImZjc19mY3B0bS5oIgorI2luY2x1ZGUgImZjc190cmNtb2QuaCIKKyNpbmNsdWRlICJmY3NfZmN4cC5oIgorI2luY2x1ZGUgImZjcy5oIgorI2luY2x1ZGUgPGZjYi9iZmFfZmNiX3Jwb3J0Lmg+CisjaW5jbHVkZSA8YWVuL2JmYV9hZW5fcnBvcnQuaD4KKworQkZBX1RSQ19GSUxFKEZDUywgUlBPUlQpOworCisjZGVmaW5lIEJGQV9GQ1NfUlBPUlRfTUFYX1JFVFJJRVMJCSg1KQorCisvKiBJbiBtaWxsaXNlY3MgKi8KK3N0YXRpYyB1MzIgYmZhX2Zjc19ycG9ydF9kZWxfdGltZW91dCA9CisJCQlCRkFfRkNTX1JQT1JUX0RFRl9ERUxfVElNRU9VVCAqIDEwMDA7CisKKy8qCisgKiBmb3J3YXJkIGRlY2xhcmF0aW9ucworICovCitzdGF0aWMgc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqYmZhX2Zjc19ycG9ydF9hbGxvYyhzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQsCisJCQkJCQkgICB3d25fdCBwd3duLCB1MzIgcnBpZCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19ycG9ydF9mcmVlKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3Jwb3J0X2hhbF9vbmxpbmUoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcnBvcnRfb25saW5lX2FjdGlvbihzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19ycG9ydF9vZmZsaW5lX2FjdGlvbihzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19ycG9ydF91cGRhdGUoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQsCisJCQkJICAgICBzdHJ1Y3QgZmNfbG9naV9zICpwbG9naSk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19ycG9ydF9mYzRfcGF1c2Uoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcnBvcnRfZmM0X3Jlc3VtZShzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19ycG9ydF90aW1lb3V0KHZvaWQgKmFyZyk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19ycG9ydF9zZW5kX3Bsb2dpKHZvaWQgKnJwb3J0X2NiYXJnLAorCQkJCQkgc3RydWN0IGJmYV9mY3hwX3MgKmZjeHBfYWxsb2NlZCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19ycG9ydF9zZW5kX3Bsb2dpYWNjKHZvaWQgKnJwb3J0X2NiYXJnLAorCQkJCQkgICAgc3RydWN0IGJmYV9mY3hwX3MgKmZjeHBfYWxsb2NlZCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19ycG9ydF9wbG9naV9yZXNwb25zZSh2b2lkICpmY3NhcmcsCisJCQkJCSAgICAgc3RydWN0IGJmYV9mY3hwX3MgKmZjeHAsCisJCQkJCSAgICAgdm9pZCAqY2JhcmcsCisJCQkJCSAgICAgYmZhX3N0YXR1c190IHJlcV9zdGF0dXMsCisJCQkJCSAgICAgdTMyIHJzcF9sZW4sCisJCQkJCSAgICAgdTMyIHJlc2lkX2xlbiwKKwkJCQkJICAgICBzdHJ1Y3QgZmNoc19zICpyc3BfZmNocyk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19ycG9ydF9zZW5kX2FkaXNjKHZvaWQgKnJwb3J0X2NiYXJnLAorCQkJCQkgc3RydWN0IGJmYV9mY3hwX3MgKmZjeHBfYWxsb2NlZCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19ycG9ydF9hZGlzY19yZXNwb25zZSh2b2lkICpmY3NhcmcsCisJCQkJCSAgICAgc3RydWN0IGJmYV9mY3hwX3MgKmZjeHAsCisJCQkJCSAgICAgdm9pZCAqY2JhcmcsCisJCQkJCSAgICAgYmZhX3N0YXR1c190IHJlcV9zdGF0dXMsCisJCQkJCSAgICAgdTMyIHJzcF9sZW4sCisJCQkJCSAgICAgdTMyIHJlc2lkX2xlbiwKKwkJCQkJICAgICBzdHJ1Y3QgZmNoc19zICpyc3BfZmNocyk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19ycG9ydF9zZW5kX2dpZHBuKHZvaWQgKnJwb3J0X2NiYXJnLAorCQkJCQkgc3RydWN0IGJmYV9mY3hwX3MgKmZjeHBfYWxsb2NlZCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19ycG9ydF9naWRwbl9yZXNwb25zZSh2b2lkICpmY3NhcmcsCisJCQkJCSAgICAgc3RydWN0IGJmYV9mY3hwX3MgKmZjeHAsCisJCQkJCSAgICAgdm9pZCAqY2JhcmcsCisJCQkJCSAgICAgYmZhX3N0YXR1c190IHJlcV9zdGF0dXMsCisJCQkJCSAgICAgdTMyIHJzcF9sZW4sCisJCQkJCSAgICAgdTMyIHJlc2lkX2xlbiwKKwkJCQkJICAgICBzdHJ1Y3QgZmNoc19zICpyc3BfZmNocyk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19ycG9ydF9zZW5kX2xvZ28odm9pZCAqcnBvcnRfY2JhcmcsCisJCQkJCXN0cnVjdCBiZmFfZmN4cF9zICpmY3hwX2FsbG9jZWQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcnBvcnRfc2VuZF9sb2dvX2FjYyh2b2lkICpycG9ydF9jYmFyZyk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19ycG9ydF9wcm9jZXNzX3BybGkoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQsCisJCQlzdHJ1Y3QgZmNoc19zICpyeF9mY2hzLCB1MTYgbGVuKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3Jwb3J0X3NlbmRfbHNfcmp0KHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0LAorCQkJc3RydWN0IGZjaHNfcyAqcnhfZmNocywgdTggcmVhc29uX2NvZGUsCisJCQl1OCByZWFzb25fY29kZV9leHBsKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3Jwb3J0X3Byb2Nlc3NfYWRpc2Moc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQsCisJCQlzdHJ1Y3QgZmNoc19zICpyeF9mY2hzLCB1MTYgbGVuKTsKKy8qKgorICogIGZjc19ycG9ydF9zbSBGQ1MgcnBvcnQgc3RhdGUgbWFjaGluZSBldmVudHMKKyAqLworCitlbnVtIHJwb3J0X2V2ZW50IHsKKwlSUFNNX0VWRU5UX1BMT0dJX1NFTkQgPSAxLAkvKiAgbmV3IHJwb3J0OyBzdGFydCB3aXRoIFBMT0dJICovCisJUlBTTV9FVkVOVF9QTE9HSV9SQ1ZEID0gMiwJLyogIEluYm91bmQgUExPR0kgZnJvbSByZW1vdGUgcG9ydCAqLworCVJQU01fRVZFTlRfUExPR0lfQ09NUCA9IDMsCS8qICBQTE9HSSBjb21wbGV0ZWQgdG8gcnBvcnQgKi8KKwlSUFNNX0VWRU5UX0xPR09fUkNWRCA9IDQsCS8qICBMT0dPIGZyb20gcmVtb3RlIGRldmljZSAqLworCVJQU01fRVZFTlRfTE9HT19JTVAgPSA1LAkvKiAgaW1wbGljaXQgbG9nbyBmb3IgU0xFUiAqLworCVJQU01fRVZFTlRfRkNYUF9TRU5UID0gNiwJLyogIEZyYW1lIGZyb20gaGFzIGJlZW4gc2VudCAqLworCVJQU01fRVZFTlRfREVMRVRFID0gNywJLyogIFJQT1JUIGRlbGV0ZSByZXF1ZXN0ICovCisJUlBTTV9FVkVOVF9TQ04gPSA4LAkvKiAgc3RhdGUgY2hhbmdlIG5vdGlmaWNhdGlvbiAqLworCVJQU01fRVZFTlRfQUNDRVBURUQgPSA5LC8qICBHb29kIHJlc3BvbnNlIGZyb20gcmVtb3RlIGRldmljZSAqLworCVJQU01fRVZFTlRfRkFJTEVEID0gMTAsCS8qICBSZXF1ZXN0IHRvIHJwb3J0IGZhaWxlZC4gICovCisJUlBTTV9FVkVOVF9USU1FT1VUID0gMTEsCS8qICBScG9ydCBTTSB0aW1lb3V0IGV2ZW50ICovCisJUlBTTV9FVkVOVF9IQ0JfT05MSU5FID0gMTIsCS8qICBCRkEgcnBvcnQgb25saW5lIGNhbGxiYWNrICovCisJUlBTTV9FVkVOVF9IQ0JfT0ZGTElORSA9IDEzLAkvKiAgQkZBIHJwb3J0IG9mZmxpbmUgY2FsbGJhY2sgKi8KKwlSUFNNX0VWRU5UX0ZDNF9PRkZMSU5FID0gMTQsCS8qICBGQy00IG9mZmxpbmUgY29tcGxldGUgKi8KKwlSUFNNX0VWRU5UX0FERFJFU1NfQ0hBTkdFID0gMTUsCS8qICBScG9ydCdzIFBJRCBoYXMgY2hhbmdlZCAqLworCVJQU01fRVZFTlRfQUREUkVTU19ESVNDID0gMTYJLyogIE5lZWQgdG8gRGlzY292ZXIgcnBvcnQncyBQSUQgKi8KK307CisKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3Jwb3J0X3NtX3VuaW5pdChzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCwKKwkJCQkJZW51bSBycG9ydF9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19ycG9ydF9zbV9wbG9naV9zZW5kaW5nKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0LAorCQkJCQkgICAgICAgZW51bSBycG9ydF9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19ycG9ydF9zbV9wbG9naWFjY19zZW5kaW5nKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0LAorCQkJCQkJICBlbnVtIHJwb3J0X2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3Jwb3J0X3NtX3Bsb2dpX3JldHJ5KHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0LAorCQkJCQkgICAgIGVudW0gcnBvcnRfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcnBvcnRfc21fcGxvZ2koc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQsCisJCQkJICAgICAgIGVudW0gcnBvcnRfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcnBvcnRfc21faGFsX29ubGluZShzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCwKKwkJCQkJICAgIGVudW0gcnBvcnRfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcnBvcnRfc21fb25saW5lKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0LAorCQkJCQllbnVtIHJwb3J0X2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3Jwb3J0X3NtX25zcXVlcnlfc2VuZGluZyhzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCwKKwkJCQkJCSBlbnVtIHJwb3J0X2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3Jwb3J0X3NtX25zcXVlcnkoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQsCisJCQkJCSBlbnVtIHJwb3J0X2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3Jwb3J0X3NtX2FkaXNjX3NlbmRpbmcoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQsCisJCQkJCSAgICAgICBlbnVtIHJwb3J0X2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3Jwb3J0X3NtX2FkaXNjKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0LAorCQkJCSAgICAgICBlbnVtIHJwb3J0X2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3Jwb3J0X3NtX2ZjNF9sb2dvcmN2KHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0LAorCQkJCQkgICAgIGVudW0gcnBvcnRfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcnBvcnRfc21fZmM0X2xvZ29zZW5kKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0LAorCQkJCQkgICAgICBlbnVtIHJwb3J0X2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3Jwb3J0X3NtX2ZjNF9vZmZsaW5lKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0LAorCQkJCQkgICAgIGVudW0gcnBvcnRfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcnBvcnRfc21faGNiX29mZmxpbmUoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQsCisJCQkJCSAgICAgZW51bSBycG9ydF9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19ycG9ydF9zbV9oY2JfbG9nb3JjdihzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCwKKwkJCQkJICAgICBlbnVtIHJwb3J0X2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3Jwb3J0X3NtX2hjYl9sb2dvc2VuZChzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCwKKwkJCQkJICAgICAgZW51bSBycG9ydF9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19ycG9ydF9zbV9sb2dvX3NlbmRpbmcoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQsCisJCQkJCSAgICAgIGVudW0gcnBvcnRfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcnBvcnRfc21fb2ZmbGluZShzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCwKKwkJCQkJIGVudW0gcnBvcnRfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcnBvcnRfc21fbnNkaXNjX3NlbmRpbmcoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQsCisJCQkJCQllbnVtIHJwb3J0X2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3Jwb3J0X3NtX25zZGlzY19yZXRyeShzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCwKKwkJCQkJICAgICAgZW51bSBycG9ydF9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19ycG9ydF9zbV9uc2Rpc2Nfc2VudChzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCwKKwkJCQkJICAgICBlbnVtIHJwb3J0X2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3Jwb3J0X3NtX25zZGlzY19zZW50KHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0LAorCQkJCQkgICAgIGVudW0gcnBvcnRfZXZlbnQgZXZlbnQpOworCitzdGF0aWMgc3RydWN0IGJmYV9zbV90YWJsZV9zIHJwb3J0X3NtX3RhYmxlW10gPSB7CisJe0JGQV9TTShiZmFfZmNzX3Jwb3J0X3NtX3VuaW5pdCksIEJGQV9SUE9SVF9VTklOSVR9LAorCXtCRkFfU00oYmZhX2Zjc19ycG9ydF9zbV9wbG9naV9zZW5kaW5nKSwgQkZBX1JQT1JUX1BMT0dJfSwKKwl7QkZBX1NNKGJmYV9mY3NfcnBvcnRfc21fcGxvZ2lhY2Nfc2VuZGluZyksIEJGQV9SUE9SVF9PTkxJTkV9LAorCXtCRkFfU00oYmZhX2Zjc19ycG9ydF9zbV9wbG9naV9yZXRyeSksIEJGQV9SUE9SVF9QTE9HSV9SRVRSWX0sCisJe0JGQV9TTShiZmFfZmNzX3Jwb3J0X3NtX3Bsb2dpKSwgQkZBX1JQT1JUX1BMT0dJfSwKKwl7QkZBX1NNKGJmYV9mY3NfcnBvcnRfc21faGFsX29ubGluZSksIEJGQV9SUE9SVF9PTkxJTkV9LAorCXtCRkFfU00oYmZhX2Zjc19ycG9ydF9zbV9vbmxpbmUpLCBCRkFfUlBPUlRfT05MSU5FfSwKKwl7QkZBX1NNKGJmYV9mY3NfcnBvcnRfc21fbnNxdWVyeV9zZW5kaW5nKSwgQkZBX1JQT1JUX05TUVVFUll9LAorCXtCRkFfU00oYmZhX2Zjc19ycG9ydF9zbV9uc3F1ZXJ5KSwgQkZBX1JQT1JUX05TUVVFUll9LAorCXtCRkFfU00oYmZhX2Zjc19ycG9ydF9zbV9hZGlzY19zZW5kaW5nKSwgQkZBX1JQT1JUX0FESVNDfSwKKwl7QkZBX1NNKGJmYV9mY3NfcnBvcnRfc21fYWRpc2MpLCBCRkFfUlBPUlRfQURJU0N9LAorCXtCRkFfU00oYmZhX2Zjc19ycG9ydF9zbV9mYzRfbG9nb3JjdiksIEJGQV9SUE9SVF9MT0dPUkNWfSwKKwl7QkZBX1NNKGJmYV9mY3NfcnBvcnRfc21fZmM0X2xvZ29zZW5kKSwgQkZBX1JQT1JUX0xPR099LAorCXtCRkFfU00oYmZhX2Zjc19ycG9ydF9zbV9mYzRfb2ZmbGluZSksIEJGQV9SUE9SVF9PRkZMSU5FfSwKKwl7QkZBX1NNKGJmYV9mY3NfcnBvcnRfc21faGNiX29mZmxpbmUpLCBCRkFfUlBPUlRfT0ZGTElORX0sCisJe0JGQV9TTShiZmFfZmNzX3Jwb3J0X3NtX2hjYl9sb2dvcmN2KSwgQkZBX1JQT1JUX0xPR09SQ1Z9LAorCXtCRkFfU00oYmZhX2Zjc19ycG9ydF9zbV9oY2JfbG9nb3NlbmQpLCBCRkFfUlBPUlRfTE9HT30sCisJe0JGQV9TTShiZmFfZmNzX3Jwb3J0X3NtX2xvZ29fc2VuZGluZyksIEJGQV9SUE9SVF9MT0dPfSwKKwl7QkZBX1NNKGJmYV9mY3NfcnBvcnRfc21fb2ZmbGluZSksIEJGQV9SUE9SVF9PRkZMSU5FfSwKKwl7QkZBX1NNKGJmYV9mY3NfcnBvcnRfc21fbnNkaXNjX3NlbmRpbmcpLCBCRkFfUlBPUlRfTlNESVNDfSwKKwl7QkZBX1NNKGJmYV9mY3NfcnBvcnRfc21fbnNkaXNjX3JldHJ5KSwgQkZBX1JQT1JUX05TRElTQ30sCisJe0JGQV9TTShiZmFfZmNzX3Jwb3J0X3NtX25zZGlzY19zZW50KSwgQkZBX1JQT1JUX05TRElTQ30sCit9OworCisvKioKKyAqIAkJQmVnaW5uaW5nIHN0YXRlLgorICovCitzdGF0aWMgdm9pZAorYmZhX2Zjc19ycG9ydF9zbV91bmluaXQoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQsIGVudW0gcnBvcnRfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBycG9ydC0+cHd3bik7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBycG9ydC0+cGlkKTsKKwliZmFfdHJjKHJwb3J0LT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIFJQU01fRVZFTlRfUExPR0lfU0VORDoKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9wbG9naV9zZW5kaW5nKTsKKwkJcnBvcnQtPnBsb2dpX3JldHJpZXMgPSAwOworCQliZmFfZmNzX3Jwb3J0X3NlbmRfcGxvZ2kocnBvcnQsIE5VTEwpOworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9QTE9HSV9SQ1ZEOgorCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX3Bsb2dpYWNjX3NlbmRpbmcpOworCQliZmFfZmNzX3Jwb3J0X3NlbmRfcGxvZ2lhY2MocnBvcnQsIE5VTEwpOworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9QTE9HSV9DT01QOgorCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX2hhbF9vbmxpbmUpOworCQliZmFfZmNzX3Jwb3J0X2hhbF9vbmxpbmUocnBvcnQpOworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9BRERSRVNTX0NIQU5HRToKKwljYXNlIFJQU01fRVZFTlRfQUREUkVTU19ESVNDOgorCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX25zZGlzY19zZW5kaW5nKTsKKwkJcnBvcnQtPm5zX3JldHJpZXMgPSAwOworCQliZmFfZmNzX3Jwb3J0X3NlbmRfZ2lkcG4ocnBvcnQsIE5VTEwpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqIAkJUExPR0kgaXMgYmVpbmcgc2VudC4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfcnBvcnRfc21fcGxvZ2lfc2VuZGluZyhzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCwKKwkJCSAgICAgICBlbnVtIHJwb3J0X2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMocnBvcnQtPmZjcywgcnBvcnQtPnB3d24pOworCWJmYV90cmMocnBvcnQtPmZjcywgcnBvcnQtPnBpZCk7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBSUFNNX0VWRU5UX0ZDWFBfU0VOVDoKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9wbG9naSk7CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX0RFTEVURToKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV91bmluaXQpOworCQliZmFfZmN4cF93YWxsb2NfY2FuY2VsKHJwb3J0LT5mY3MtPmJmYSwgJnJwb3J0LT5mY3hwX3dxZSk7CisJCWJmYV9mY3NfcnBvcnRfZnJlZShycG9ydCk7CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX1BMT0dJX1JDVkQ6CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21fcGxvZ2lhY2Nfc2VuZGluZyk7CisJCWJmYV9mY3hwX3dhbGxvY19jYW5jZWwocnBvcnQtPmZjcy0+YmZhLCAmcnBvcnQtPmZjeHBfd3FlKTsKKwkJYmZhX2Zjc19ycG9ydF9zZW5kX3Bsb2dpYWNjKHJwb3J0LCBOVUxMKTsKKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfQUREUkVTU19DSEFOR0U6CisJCWJmYV9mY3hwX3dhbGxvY19jYW5jZWwocnBvcnQtPmZjcy0+YmZhLCAmcnBvcnQtPmZjeHBfd3FlKTsKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9uc2Rpc2Nfc2VuZGluZyk7CisJCXJwb3J0LT5uc19yZXRyaWVzID0gMDsKKwkJYmZhX2Zjc19ycG9ydF9zZW5kX2dpZHBuKHJwb3J0LCBOVUxMKTsKKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfTE9HT19JTVA6CisJCXJwb3J0LT5waWQgPSAwOworCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX29mZmxpbmUpOworCQliZmFfZmN4cF93YWxsb2NfY2FuY2VsKHJwb3J0LT5mY3MtPmJmYSwgJnJwb3J0LT5mY3hwX3dxZSk7CisJCWJmYV90aW1lcl9zdGFydChycG9ydC0+ZmNzLT5iZmEsICZycG9ydC0+dGltZXIsCisJCQkJYmZhX2Zjc19ycG9ydF90aW1lb3V0LCBycG9ydCwKKwkJCQliZmFfZmNzX3Jwb3J0X2RlbF90aW1lb3V0KTsKKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfU0NOOgorCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqIAkJUExPR0kgaXMgYmVpbmcgc2VudC4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfcnBvcnRfc21fcGxvZ2lhY2Nfc2VuZGluZyhzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCwKKwkJCQkgIGVudW0gcnBvcnRfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBycG9ydC0+cHd3bik7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBycG9ydC0+cGlkKTsKKwliZmFfdHJjKHJwb3J0LT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIFJQU01fRVZFTlRfRkNYUF9TRU5UOgorCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX2hhbF9vbmxpbmUpOworCQliZmFfZmNzX3Jwb3J0X2hhbF9vbmxpbmUocnBvcnQpOworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9ERUxFVEU6CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21fdW5pbml0KTsKKwkJYmZhX2ZjeHBfd2FsbG9jX2NhbmNlbChycG9ydC0+ZmNzLT5iZmEsICZycG9ydC0+ZmN4cF93cWUpOworCQliZmFfZmNzX3Jwb3J0X2ZyZWUocnBvcnQpOworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9TQ046CisJCS8qKgorCQkgKiBJZ25vcmUsIFNDTiBpcyBwb3NzaWJseSBvbmxpbmUgbm90aWZpY2F0aW9uLgorCQkgKi8KKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfQUREUkVTU19DSEFOR0U6CisJCWJmYV9mY3hwX3dhbGxvY19jYW5jZWwocnBvcnQtPmZjcy0+YmZhLCAmcnBvcnQtPmZjeHBfd3FlKTsKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9uc2Rpc2Nfc2VuZGluZyk7CisJCXJwb3J0LT5uc19yZXRyaWVzID0gMDsKKwkJYmZhX2Zjc19ycG9ydF9zZW5kX2dpZHBuKHJwb3J0LCBOVUxMKTsKKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfTE9HT19JTVA6CisJCXJwb3J0LT5waWQgPSAwOworCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX29mZmxpbmUpOworCQliZmFfZmN4cF93YWxsb2NfY2FuY2VsKHJwb3J0LT5mY3MtPmJmYSwgJnJwb3J0LT5mY3hwX3dxZSk7CisJCWJmYV90aW1lcl9zdGFydChycG9ydC0+ZmNzLT5iZmEsICZycG9ydC0+dGltZXIsCisJCQkJYmZhX2Zjc19ycG9ydF90aW1lb3V0LCBycG9ydCwKKwkJCQliZmFfZmNzX3Jwb3J0X2RlbF90aW1lb3V0KTsKKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfSENCX09GRkxJTkU6CisJCS8qKgorCQkgKiBJZ25vcmUgQkZBIGNhbGxiYWNrLCBvbiBhIFBMT0dJIHJlY2VpdmUgd2UgY2FsbCBiZmEgb2ZmbGluZS4KKwkJICovCisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKy8qKgorICogCQlQTE9HSSBpcyBzZW50LgorICovCitzdGF0aWMgdm9pZAorYmZhX2Zjc19ycG9ydF9zbV9wbG9naV9yZXRyeShzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCwKKwkJCWVudW0gcnBvcnRfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBycG9ydC0+cHd3bik7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBycG9ydC0+cGlkKTsKKwliZmFfdHJjKHJwb3J0LT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIFJQU01fRVZFTlRfU0NOOgorCQliZmFfdGltZXJfc3RvcCgmcnBvcnQtPnRpbWVyKTsKKwkJLyoKKwkJICogISEgZmFsbCB0aHJvdWdoICEhCisJCSAqLworCisJY2FzZSBSUFNNX0VWRU5UX1RJTUVPVVQ6CisJCXJwb3J0LT5wbG9naV9yZXRyaWVzKys7CisJCWlmIChycG9ydC0+cGxvZ2lfcmV0cmllcyA8IEJGQV9GQ1NfUlBPUlRfTUFYX1JFVFJJRVMpIHsKKwkJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21fcGxvZ2lfc2VuZGluZyk7CisJCQliZmFfZmNzX3Jwb3J0X3NlbmRfcGxvZ2kocnBvcnQsIE5VTEwpOworCQl9IGVsc2UgeworCQkJcnBvcnQtPnBpZCA9IDA7CisJCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX29mZmxpbmUpOworCQkJYmZhX3RpbWVyX3N0YXJ0KHJwb3J0LT5mY3MtPmJmYSwgJnJwb3J0LT50aW1lciwKKwkJCQkJYmZhX2Zjc19ycG9ydF90aW1lb3V0LCBycG9ydCwKKwkJCQkJYmZhX2Zjc19ycG9ydF9kZWxfdGltZW91dCk7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfREVMRVRFOgorCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX3VuaW5pdCk7CisJCWJmYV90aW1lcl9zdG9wKCZycG9ydC0+dGltZXIpOworCQliZmFfZmNzX3Jwb3J0X2ZyZWUocnBvcnQpOworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9MT0dPX1JDVkQ6CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX1BMT0dJX1JDVkQ6CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21fcGxvZ2lhY2Nfc2VuZGluZyk7CisJCWJmYV90aW1lcl9zdG9wKCZycG9ydC0+dGltZXIpOworCQliZmFfZmNzX3Jwb3J0X3NlbmRfcGxvZ2lhY2MocnBvcnQsIE5VTEwpOworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9BRERSRVNTX0NIQU5HRToKKwkJYmZhX3RpbWVyX3N0b3AoJnJwb3J0LT50aW1lcik7CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21fbnNkaXNjX3NlbmRpbmcpOworCQlycG9ydC0+bnNfcmV0cmllcyA9IDA7CisJCWJmYV9mY3NfcnBvcnRfc2VuZF9naWRwbihycG9ydCwgTlVMTCk7CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX0xPR09fSU1QOgorCQlycG9ydC0+cGlkID0gMDsKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9vZmZsaW5lKTsKKwkJYmZhX3RpbWVyX3N0b3AoJnJwb3J0LT50aW1lcik7CisJCWJmYV90aW1lcl9zdGFydChycG9ydC0+ZmNzLT5iZmEsICZycG9ydC0+dGltZXIsCisJCQkJYmZhX2Zjc19ycG9ydF90aW1lb3V0LCBycG9ydCwKKwkJCQliZmFfZmNzX3Jwb3J0X2RlbF90aW1lb3V0KTsKKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfUExPR0lfQ09NUDoKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9oYWxfb25saW5lKTsKKwkJYmZhX3RpbWVyX3N0b3AoJnJwb3J0LT50aW1lcik7CisJCWJmYV9mY3NfcnBvcnRfaGFsX29ubGluZShycG9ydCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKy8qKgorICogCQlQTE9HSSBpcyBzZW50LgorICovCitzdGF0aWMgdm9pZAorYmZhX2Zjc19ycG9ydF9zbV9wbG9naShzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCwgZW51bSBycG9ydF9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKHJwb3J0LT5mY3MsIHJwb3J0LT5wd3duKTsKKwliZmFfdHJjKHJwb3J0LT5mY3MsIHJwb3J0LT5waWQpOworCWJmYV90cmMocnBvcnQtPmZjcywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgUlBTTV9FVkVOVF9BQ0NFUFRFRDoKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9oYWxfb25saW5lKTsKKwkJcnBvcnQtPnBsb2dpX3JldHJpZXMgPSAwOworCQliZmFfZmNzX3Jwb3J0X2hhbF9vbmxpbmUocnBvcnQpOworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9MT0dPX1JDVkQ6CisJCWJmYV9mY3NfcnBvcnRfc2VuZF9sb2dvX2FjYyhycG9ydCk7CisJCWJmYV9mY3hwX2Rpc2NhcmQocnBvcnQtPmZjeHApOworCQkvKgorCQkgKiAhISBmYWxsIHRocm91Z2ggISEKKwkJICovCisJY2FzZSBSUFNNX0VWRU5UX0ZBSUxFRDoKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9wbG9naV9yZXRyeSk7CisJCWJmYV90aW1lcl9zdGFydChycG9ydC0+ZmNzLT5iZmEsICZycG9ydC0+dGltZXIsCisJCQkJYmZhX2Zjc19ycG9ydF90aW1lb3V0LCBycG9ydCwKKwkJCQlCRkFfRkNTX1JFVFJZX1RJTUVPVVQpOworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9MT0dPX0lNUDoKKwkJcnBvcnQtPnBpZCA9IDA7CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21fb2ZmbGluZSk7CisJCWJmYV9mY3hwX2Rpc2NhcmQocnBvcnQtPmZjeHApOworCQliZmFfdGltZXJfc3RhcnQocnBvcnQtPmZjcy0+YmZhLCAmcnBvcnQtPnRpbWVyLAorCQkJCWJmYV9mY3NfcnBvcnRfdGltZW91dCwgcnBvcnQsCisJCQkJYmZhX2Zjc19ycG9ydF9kZWxfdGltZW91dCk7CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX0FERFJFU1NfQ0hBTkdFOgorCQliZmFfZmN4cF9kaXNjYXJkKHJwb3J0LT5mY3hwKTsKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9uc2Rpc2Nfc2VuZGluZyk7CisJCXJwb3J0LT5uc19yZXRyaWVzID0gMDsKKwkJYmZhX2Zjc19ycG9ydF9zZW5kX2dpZHBuKHJwb3J0LCBOVUxMKTsKKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfUExPR0lfUkNWRDoKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9wbG9naWFjY19zZW5kaW5nKTsKKwkJYmZhX2ZjeHBfZGlzY2FyZChycG9ydC0+ZmN4cCk7CisJCWJmYV9mY3NfcnBvcnRfc2VuZF9wbG9naWFjYyhycG9ydCwgTlVMTCk7CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX1NDTjoKKwkJLyoqCisJCSAqIElnbm9yZSBTQ04gLSB3YWl0IGZvciBQTE9HSSByZXNwb25zZS4KKwkJICovCisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX0RFTEVURToKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV91bmluaXQpOworCQliZmFfZmN4cF9kaXNjYXJkKHJwb3J0LT5mY3hwKTsKKwkJYmZhX2Zjc19ycG9ydF9mcmVlKHJwb3J0KTsKKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfUExPR0lfQ09NUDoKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9oYWxfb25saW5lKTsKKwkJYmZhX2ZjeHBfZGlzY2FyZChycG9ydC0+ZmN4cCk7CisJCWJmYV9mY3NfcnBvcnRfaGFsX29ubGluZShycG9ydCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKy8qKgorICogCQlQTE9HSSBpcyBjb21wbGV0ZS4gQXdhaXRpbmcgQkZBIHJwb3J0IG9ubGluZSBjYWxsYmFjay4gRkMtNHMKKyAqIAkJYXJlIG9mZmxpbmUuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX3Jwb3J0X3NtX2hhbF9vbmxpbmUoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQsCisJCQllbnVtIHJwb3J0X2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMocnBvcnQtPmZjcywgcnBvcnQtPnB3d24pOworCWJmYV90cmMocnBvcnQtPmZjcywgcnBvcnQtPnBpZCk7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBSUFNNX0VWRU5UX0hDQl9PTkxJTkU6CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21fb25saW5lKTsKKwkJYmZhX2Zjc19ycG9ydF9vbmxpbmVfYWN0aW9uKHJwb3J0KTsKKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfTE9HT19SQ1ZEOgorCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX2hjYl9sb2dvcmN2KTsKKwkJYmZhX3Jwb3J0X29mZmxpbmUocnBvcnQtPmJmYV9ycG9ydCk7CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX0xPR09fSU1QOgorCWNhc2UgUlBTTV9FVkVOVF9BRERSRVNTX0NIQU5HRToKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9oY2Jfb2ZmbGluZSk7CisJCWJmYV9ycG9ydF9vZmZsaW5lKHJwb3J0LT5iZmFfcnBvcnQpOworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9QTE9HSV9SQ1ZEOgorCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX3Bsb2dpYWNjX3NlbmRpbmcpOworCQliZmFfcnBvcnRfb2ZmbGluZShycG9ydC0+YmZhX3Jwb3J0KTsKKwkJYmZhX2Zjc19ycG9ydF9zZW5kX3Bsb2dpYWNjKHJwb3J0LCBOVUxMKTsKKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfREVMRVRFOgorCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX2hjYl9sb2dvc2VuZCk7CisJCWJmYV9ycG9ydF9vZmZsaW5lKHJwb3J0LT5iZmFfcnBvcnQpOworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9TQ046CisJCS8qKgorCQkgKiBAdG9kbworCQkgKiBJZ25vcmUgU0NOIC0gUExPR0kganVzdCBjb21wbGV0ZWQsIEZDLTQgbG9naW4gc2hvdWxkIGRldGVjdAorCQkgKiBkZXZpY2UgZmFpbHVyZXMuCisJCSAqLworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqIAkJUnBvcnQgaXMgT05MSU5FLiBGQy00cyBhY3RpdmUuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX3Jwb3J0X3NtX29ubGluZShzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCwgZW51bSBycG9ydF9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKHJwb3J0LT5mY3MsIHJwb3J0LT5wd3duKTsKKwliZmFfdHJjKHJwb3J0LT5mY3MsIHJwb3J0LT5waWQpOworCWJmYV90cmMocnBvcnQtPmZjcywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgUlBTTV9FVkVOVF9TQ046CisJCS8qKgorCQkgKiBQYXVzZSBGQy00IGFjdGl2aXR5IHRpbGwgcnBvcnQgaXMgYXV0aGVudGljYXRlZC4KKwkJICogSW4gc3dpdGNoZWQgZmFicmljcywgY2hlY2sgcHJlc2VuY2Ugb2YgZGV2aWNlIGluIG5hbWVzZXJ2ZXIKKwkJICogZmlyc3QuCisJCSAqLworCQliZmFfZmNzX3Jwb3J0X2ZjNF9wYXVzZShycG9ydCk7CisKKwkJaWYgKGJmYV9mY3NfZmFicmljX2lzX3N3aXRjaGVkKHJwb3J0LT5wb3J0LT5mYWJyaWMpKSB7CisJCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LAorCQkJCQkgYmZhX2Zjc19ycG9ydF9zbV9uc3F1ZXJ5X3NlbmRpbmcpOworCQkJcnBvcnQtPm5zX3JldHJpZXMgPSAwOworCQkJYmZhX2Zjc19ycG9ydF9zZW5kX2dpZHBuKHJwb3J0LCBOVUxMKTsKKwkJfSBlbHNlIHsKKwkJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21fYWRpc2Nfc2VuZGluZyk7CisJCQliZmFfZmNzX3Jwb3J0X3NlbmRfYWRpc2MocnBvcnQsIE5VTEwpOworCQl9CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX1BMT0dJX1JDVkQ6CisJY2FzZSBSUFNNX0VWRU5UX0xPR09fSU1QOgorCWNhc2UgUlBTTV9FVkVOVF9BRERSRVNTX0NIQU5HRToKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9mYzRfb2ZmbGluZSk7CisJCWJmYV9mY3NfcnBvcnRfb2ZmbGluZV9hY3Rpb24ocnBvcnQpOworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9ERUxFVEU6CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21fZmM0X2xvZ29zZW5kKTsKKwkJYmZhX2Zjc19ycG9ydF9vZmZsaW5lX2FjdGlvbihycG9ydCk7CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX0xPR09fUkNWRDoKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9mYzRfbG9nb3Jjdik7CisJCWJmYV9mY3NfcnBvcnRfb2ZmbGluZV9hY3Rpb24ocnBvcnQpOworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9QTE9HSV9DT01QOgorCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqIAkJQW4gU0NOIGV2ZW50IGlzIHJlY2VpdmVkIGluIE9OTElORSBzdGF0ZS4gTlMgcXVlcnkgaXMgYmVpbmcgc2VudAorICogCQlwcmlvciB0byBBRElTQyBhdXRoZW50aWNhdGlvbiB3aXRoIHJwb3J0LiBGQy00cyBhcmUgcGF1c2VkLgorICovCitzdGF0aWMgdm9pZAorYmZhX2Zjc19ycG9ydF9zbV9uc3F1ZXJ5X3NlbmRpbmcoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQsCisJCQkJIGVudW0gcnBvcnRfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBycG9ydC0+cHd3bik7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBycG9ydC0+cGlkKTsKKwliZmFfdHJjKHJwb3J0LT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIFJQU01fRVZFTlRfRkNYUF9TRU5UOgorCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX25zcXVlcnkpOworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9ERUxFVEU6CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21fZmM0X2xvZ29zZW5kKTsKKwkJYmZhX2ZjeHBfd2FsbG9jX2NhbmNlbChycG9ydC0+ZmNzLT5iZmEsICZycG9ydC0+ZmN4cF93cWUpOworCQliZmFfZmNzX3Jwb3J0X29mZmxpbmVfYWN0aW9uKHJwb3J0KTsKKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfU0NOOgorCQkvKioKKwkJICogaWdub3JlIFNDTiwgd2FpdCBmb3IgcmVzcG9uc2UgdG8gcXVlcnkgaXRzZWxmCisJCSAqLworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9MT0dPX1JDVkQ6CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21fZmM0X2xvZ29yY3YpOworCQliZmFfZmN4cF93YWxsb2NfY2FuY2VsKHJwb3J0LT5mY3MtPmJmYSwgJnJwb3J0LT5mY3hwX3dxZSk7CisJCWJmYV9mY3NfcnBvcnRfb2ZmbGluZV9hY3Rpb24ocnBvcnQpOworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9MT0dPX0lNUDoKKwkJcnBvcnQtPnBpZCA9IDA7CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21fb2ZmbGluZSk7CisJCWJmYV9mY3hwX3dhbGxvY19jYW5jZWwocnBvcnQtPmZjcy0+YmZhLCAmcnBvcnQtPmZjeHBfd3FlKTsKKwkJYmZhX3RpbWVyX3N0YXJ0KHJwb3J0LT5mY3MtPmJmYSwgJnJwb3J0LT50aW1lciwKKwkJCQliZmFfZmNzX3Jwb3J0X3RpbWVvdXQsIHJwb3J0LAorCQkJCWJmYV9mY3NfcnBvcnRfZGVsX3RpbWVvdXQpOworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9QTE9HSV9SQ1ZEOgorCWNhc2UgUlBTTV9FVkVOVF9BRERSRVNTX0NIQU5HRToKKwljYXNlIFJQU01fRVZFTlRfUExPR0lfQ09NUDoKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9mYzRfb2ZmbGluZSk7CisJCWJmYV9mY3hwX3dhbGxvY19jYW5jZWwocnBvcnQtPmZjcy0+YmZhLCAmcnBvcnQtPmZjeHBfd3FlKTsKKwkJYmZhX2Zjc19ycG9ydF9vZmZsaW5lX2FjdGlvbihycG9ydCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKy8qKgorICogCUFuIFNDTiBldmVudCBpcyByZWNlaXZlZCBpbiBPTkxJTkUgc3RhdGUuIE5TIHF1ZXJ5IGlzIHNlbnQgdG8gcnBvcnQuCisgKiAJRkMtNHMgYXJlIHBhdXNlZC4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfcnBvcnRfc21fbnNxdWVyeShzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCwgZW51bSBycG9ydF9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKHJwb3J0LT5mY3MsIHJwb3J0LT5wd3duKTsKKwliZmFfdHJjKHJwb3J0LT5mY3MsIHJwb3J0LT5waWQpOworCWJmYV90cmMocnBvcnQtPmZjcywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgUlBTTV9FVkVOVF9BQ0NFUFRFRDoKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9hZGlzY19zZW5kaW5nKTsKKwkJYmZhX2Zjc19ycG9ydF9zZW5kX2FkaXNjKHJwb3J0LCBOVUxMKTsKKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfRkFJTEVEOgorCQlycG9ydC0+bnNfcmV0cmllcysrOworCQlpZiAocnBvcnQtPm5zX3JldHJpZXMgPCBCRkFfRkNTX1JQT1JUX01BWF9SRVRSSUVTKSB7CisJCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LAorCQkJCQkgYmZhX2Zjc19ycG9ydF9zbV9uc3F1ZXJ5X3NlbmRpbmcpOworCQkJYmZhX2Zjc19ycG9ydF9zZW5kX2dpZHBuKHJwb3J0LCBOVUxMKTsKKwkJfSBlbHNlIHsKKwkJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21fZmM0X29mZmxpbmUpOworCQkJYmZhX2Zjc19ycG9ydF9vZmZsaW5lX2FjdGlvbihycG9ydCk7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfREVMRVRFOgorCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX2ZjNF9sb2dvc2VuZCk7CisJCWJmYV9mY3hwX2Rpc2NhcmQocnBvcnQtPmZjeHApOworCQliZmFfZmNzX3Jwb3J0X29mZmxpbmVfYWN0aW9uKHJwb3J0KTsKKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfU0NOOgorCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9MT0dPX1JDVkQ6CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21fZmM0X2xvZ29yY3YpOworCQliZmFfZmN4cF9kaXNjYXJkKHJwb3J0LT5mY3hwKTsKKwkJYmZhX2Zjc19ycG9ydF9vZmZsaW5lX2FjdGlvbihycG9ydCk7CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX1BMT0dJX0NPTVA6CisJY2FzZSBSUFNNX0VWRU5UX0FERFJFU1NfQ0hBTkdFOgorCWNhc2UgUlBTTV9FVkVOVF9QTE9HSV9SQ1ZEOgorCWNhc2UgUlBTTV9FVkVOVF9MT0dPX0lNUDoKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9mYzRfb2ZmbGluZSk7CisJCWJmYV9mY3hwX2Rpc2NhcmQocnBvcnQtPmZjeHApOworCQliZmFfZmNzX3Jwb3J0X29mZmxpbmVfYWN0aW9uKHJwb3J0KTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworLyoqCisgKiAJQW4gU0NOIGV2ZW50IGlzIHJlY2VpdmVkIGluIE9OTElORSBzdGF0ZS4gQURJU0MgaXMgYmVpbmcgc2VudCBmb3IKKyAqIAlhdXRoZW50aWNhdGluZyB3aXRoIHJwb3J0LiBGQy00cyBhcmUgcGF1c2VkLgorICovCitzdGF0aWMgdm9pZAorYmZhX2Zjc19ycG9ydF9zbV9hZGlzY19zZW5kaW5nKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0LAorCQkJICAgICAgIGVudW0gcnBvcnRfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBycG9ydC0+cHd3bik7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBycG9ydC0+cGlkKTsKKwliZmFfdHJjKHJwb3J0LT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIFJQU01fRVZFTlRfRkNYUF9TRU5UOgorCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX2FkaXNjKTsKKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfREVMRVRFOgorCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX2ZjNF9sb2dvc2VuZCk7CisJCWJmYV9mY3hwX3dhbGxvY19jYW5jZWwocnBvcnQtPmZjcy0+YmZhLCAmcnBvcnQtPmZjeHBfd3FlKTsKKwkJYmZhX2Zjc19ycG9ydF9vZmZsaW5lX2FjdGlvbihycG9ydCk7CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX0xPR09fSU1QOgorCWNhc2UgUlBTTV9FVkVOVF9BRERSRVNTX0NIQU5HRToKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9mYzRfb2ZmbGluZSk7CisJCWJmYV9mY3hwX3dhbGxvY19jYW5jZWwocnBvcnQtPmZjcy0+YmZhLCAmcnBvcnQtPmZjeHBfd3FlKTsKKwkJYmZhX2Zjc19ycG9ydF9vZmZsaW5lX2FjdGlvbihycG9ydCk7CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX0xPR09fUkNWRDoKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9mYzRfbG9nb3Jjdik7CisJCWJmYV9mY3hwX3dhbGxvY19jYW5jZWwocnBvcnQtPmZjcy0+YmZhLCAmcnBvcnQtPmZjeHBfd3FlKTsKKwkJYmZhX2Zjc19ycG9ydF9vZmZsaW5lX2FjdGlvbihycG9ydCk7CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX1NDTjoKKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfUExPR0lfUkNWRDoKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9mYzRfb2ZmbGluZSk7CisJCWJmYV9mY3hwX3dhbGxvY19jYW5jZWwocnBvcnQtPmZjcy0+YmZhLCAmcnBvcnQtPmZjeHBfd3FlKTsKKwkJYmZhX2Zjc19ycG9ydF9vZmZsaW5lX2FjdGlvbihycG9ydCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKy8qKgorICogCQlBbiBTQ04gZXZlbnQgaXMgcmVjZWl2ZWQgaW4gT05MSU5FIHN0YXRlLiBBRElTQyBpcyB0byBycG9ydC4KKyAqIAkJRkMtNHMgYXJlIHBhdXNlZC4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfcnBvcnRfc21fYWRpc2Moc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQsIGVudW0gcnBvcnRfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBycG9ydC0+cHd3bik7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBycG9ydC0+cGlkKTsKKwliZmFfdHJjKHJwb3J0LT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIFJQU01fRVZFTlRfQUNDRVBURUQ6CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21fb25saW5lKTsKKwkJYmZhX2Zjc19ycG9ydF9mYzRfcmVzdW1lKHJwb3J0KTsKKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfUExPR0lfUkNWRDoKKwkJLyoqCisJCSAqIFRvbyBjb21wbGV4IHRvIGNsZWFudXAgRkMtNCAmIHJwb3J0IGFuZCB0aGVuIGFjYyB0byBQTE9HSS4KKwkJICogQXQgbGVhc3QgZ28gb2ZmbGluZSB3aGVuIGEgUExPR0kgaXMgcmVjZWl2ZWQuCisJCSAqLworCQliZmFfZmN4cF9kaXNjYXJkKHJwb3J0LT5mY3hwKTsKKwkJLyoKKwkJICogISEhIGZhbGwgdGhyb3VnaCAhISEKKwkJICovCisKKwljYXNlIFJQU01fRVZFTlRfRkFJTEVEOgorCWNhc2UgUlBTTV9FVkVOVF9BRERSRVNTX0NIQU5HRToKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9mYzRfb2ZmbGluZSk7CisJCWJmYV9mY3NfcnBvcnRfb2ZmbGluZV9hY3Rpb24ocnBvcnQpOworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9ERUxFVEU6CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21fZmM0X2xvZ29zZW5kKTsKKwkJYmZhX2ZjeHBfZGlzY2FyZChycG9ydC0+ZmN4cCk7CisJCWJmYV9mY3NfcnBvcnRfb2ZmbGluZV9hY3Rpb24ocnBvcnQpOworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9TQ046CisJCS8qKgorCQkgKiBhbHJlYWR5IHByb2Nlc3NpbmcgUlNDTgorCQkgKi8KKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfTE9HT19JTVA6CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21fZmM0X29mZmxpbmUpOworCQliZmFfZmN4cF9kaXNjYXJkKHJwb3J0LT5mY3hwKTsKKwkJYmZhX2Zjc19ycG9ydF9vZmZsaW5lX2FjdGlvbihycG9ydCk7CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX0xPR09fUkNWRDoKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9mYzRfbG9nb3Jjdik7CisJCWJmYV9mY3hwX2Rpc2NhcmQocnBvcnQtPmZjeHApOworCQliZmFfZmNzX3Jwb3J0X29mZmxpbmVfYWN0aW9uKHJwb3J0KTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworLyoqCisgKiAJCVJwb3J0IGhhcyBzZW50IExPR08uIEF3YWl0aW5nIEZDLTQgb2ZmbGluZSBjb21wbGV0aW9uIGNhbGxiYWNrLgorICovCitzdGF0aWMgdm9pZAorYmZhX2Zjc19ycG9ydF9zbV9mYzRfbG9nb3JjdihzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCwKKwkJCWVudW0gcnBvcnRfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBycG9ydC0+cHd3bik7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBycG9ydC0+cGlkKTsKKwliZmFfdHJjKHJwb3J0LT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIFJQU01fRVZFTlRfRkM0X09GRkxJTkU6CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21faGNiX2xvZ29yY3YpOworCQliZmFfcnBvcnRfb2ZmbGluZShycG9ydC0+YmZhX3Jwb3J0KTsKKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfREVMRVRFOgorCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX2ZjNF9sb2dvc2VuZCk7CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX0xPR09fUkNWRDoKKwljYXNlIFJQU01fRVZFTlRfQUREUkVTU19DSEFOR0U6CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKy8qKgorICogCQlMT0dPIG5lZWRzIHRvIGJlIHNlbnQgdG8gcnBvcnQuIEF3YWl0aW5nIEZDLTQgb2ZmbGluZSBjb21wbGV0aW9uCisgKiAJCWNhbGxiYWNrLgorICovCitzdGF0aWMgdm9pZAorYmZhX2Zjc19ycG9ydF9zbV9mYzRfbG9nb3NlbmQoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQsCisJCQkgICAgICBlbnVtIHJwb3J0X2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMocnBvcnQtPmZjcywgcnBvcnQtPnB3d24pOworCWJmYV90cmMocnBvcnQtPmZjcywgcnBvcnQtPnBpZCk7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBSUFNNX0VWRU5UX0ZDNF9PRkZMSU5FOgorCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX2hjYl9sb2dvc2VuZCk7CisJCWJmYV9ycG9ydF9vZmZsaW5lKHJwb3J0LT5iZmFfcnBvcnQpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqIAlScG9ydCBpcyBnb2luZyBvZmZsaW5lLiBBd2FpdGluZyBGQy00IG9mZmxpbmUgY29tcGxldGlvbiBjYWxsYmFjay4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfcnBvcnRfc21fZmM0X29mZmxpbmUoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQsCisJCQllbnVtIHJwb3J0X2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMocnBvcnQtPmZjcywgcnBvcnQtPnB3d24pOworCWJmYV90cmMocnBvcnQtPmZjcywgcnBvcnQtPnBpZCk7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBSUFNNX0VWRU5UX0ZDNF9PRkZMSU5FOgorCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX2hjYl9vZmZsaW5lKTsKKwkJYmZhX3Jwb3J0X29mZmxpbmUocnBvcnQtPmJmYV9ycG9ydCk7CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX1NDTjoKKwljYXNlIFJQU01fRVZFTlRfTE9HT19JTVA6CisJY2FzZSBSUFNNX0VWRU5UX0xPR09fUkNWRDoKKwljYXNlIFJQU01fRVZFTlRfQUREUkVTU19DSEFOR0U6CisJCS8qKgorCQkgKiBycG9ydCBpcyBhbHJlYWR5IGdvaW5nIG9mZmxpbmUuCisJCSAqIFNDTiAtIGlnbm9yZSBhbmQgd2FpdCB0aWxsIHRyYW5zaXRpb25pbmcgdG8gb2ZmbGluZSBzdGF0ZQorCQkgKi8KKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfREVMRVRFOgorCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX2ZjNF9sb2dvc2VuZCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKy8qKgorICogCQlScG9ydCBpcyBvZmZsaW5lLiBGQy00cyBhcmUgb2ZmbGluZS4gQXdhaXRpbmcgQkZBIHJwb3J0IG9mZmxpbmUKKyAqIAkJY2FsbGJhY2suCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX3Jwb3J0X3NtX2hjYl9vZmZsaW5lKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0LAorCQkJZW51bSBycG9ydF9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKHJwb3J0LT5mY3MsIHJwb3J0LT5wd3duKTsKKwliZmFfdHJjKHJwb3J0LT5mY3MsIHJwb3J0LT5waWQpOworCWJmYV90cmMocnBvcnQtPmZjcywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgUlBTTV9FVkVOVF9IQ0JfT0ZGTElORToKKwljYXNlIFJQU01fRVZFTlRfQUREUkVTU19DSEFOR0U6CisJCWlmIChiZmFfZmNzX3BvcnRfaXNfb25saW5lKHJwb3J0LT5wb3J0KSkgeworCQkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwKKwkJCQkJIGJmYV9mY3NfcnBvcnRfc21fbnNkaXNjX3NlbmRpbmcpOworCQkJcnBvcnQtPm5zX3JldHJpZXMgPSAwOworCQkJYmZhX2Zjc19ycG9ydF9zZW5kX2dpZHBuKHJwb3J0LCBOVUxMKTsKKwkJfSBlbHNlIHsKKwkJCXJwb3J0LT5waWQgPSAwOworCQkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9vZmZsaW5lKTsKKwkJCWJmYV90aW1lcl9zdGFydChycG9ydC0+ZmNzLT5iZmEsICZycG9ydC0+dGltZXIsCisJCQkJCWJmYV9mY3NfcnBvcnRfdGltZW91dCwgcnBvcnQsCisJCQkJCWJmYV9mY3NfcnBvcnRfZGVsX3RpbWVvdXQpOworCQl9CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX0RFTEVURToKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV91bmluaXQpOworCQliZmFfZmNzX3Jwb3J0X2ZyZWUocnBvcnQpOworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9TQ046CisJY2FzZSBSUFNNX0VWRU5UX0xPR09fUkNWRDoKKwkJLyoqCisJCSAqIElnbm9yZSwgYWxyZWFkeSBvZmZsaW5lLgorCQkgKi8KKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworLyoqCisgKiAJCVJwb3J0IGlzIG9mZmxpbmUuIEZDLTRzIGFyZSBvZmZsaW5lLiBBd2FpdGluZyBCRkEgcnBvcnQgb2ZmbGluZQorICogCQljYWxsYmFjayB0byBzZW5kIExPR08gYWNjZXB0LgorICovCitzdGF0aWMgdm9pZAorYmZhX2Zjc19ycG9ydF9zbV9oY2JfbG9nb3JjdihzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCwKKwkJCWVudW0gcnBvcnRfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBycG9ydC0+cHd3bik7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBycG9ydC0+cGlkKTsKKwliZmFfdHJjKHJwb3J0LT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIFJQU01fRVZFTlRfSENCX09GRkxJTkU6CisJY2FzZSBSUFNNX0VWRU5UX0FERFJFU1NfQ0hBTkdFOgorCQlpZiAocnBvcnQtPnBpZCkKKwkJCWJmYV9mY3NfcnBvcnRfc2VuZF9sb2dvX2FjYyhycG9ydCk7CisJCS8qCisJCSAqIElmIHRoZSBscG9ydCBpcyBvbmxpbmUgYW5kIGlmIHRoZSBycG9ydCBpcyBub3QgYSB3ZWxsIGtub3duCisJCSAqIGFkZHJlc3MgcG9ydCwgd2UgdHJ5IHRvIHJlLWRpc2NvdmVyIHRoZSByLXBvcnQuCisJCSAqLworCQlpZiAoYmZhX2Zjc19wb3J0X2lzX29ubGluZShycG9ydC0+cG9ydCkKKwkJICAgICYmICghQkZBX0ZDU19QSURfSVNfV0tBKHJwb3J0LT5waWQpKSkgeworCQkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwKKwkJCQkJIGJmYV9mY3NfcnBvcnRfc21fbnNkaXNjX3NlbmRpbmcpOworCQkJcnBvcnQtPm5zX3JldHJpZXMgPSAwOworCQkJYmZhX2Zjc19ycG9ydF9zZW5kX2dpZHBuKHJwb3J0LCBOVUxMKTsKKwkJfSBlbHNlIHsKKwkJCS8qCisJCQkgKiBpZiBpdCBpcyBub3QgYSB3ZWxsIGtub3duIGFkZHJlc3MsIHJlc2V0IHRoZSBwaWQgdG8KKwkJCSAqCisJCQkgKi8KKwkJCWlmICghQkZBX0ZDU19QSURfSVNfV0tBKHJwb3J0LT5waWQpKQorCQkJCXJwb3J0LT5waWQgPSAwOworCQkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9vZmZsaW5lKTsKKwkJCWJmYV90aW1lcl9zdGFydChycG9ydC0+ZmNzLT5iZmEsICZycG9ydC0+dGltZXIsCisJCQkJCWJmYV9mY3NfcnBvcnRfdGltZW91dCwgcnBvcnQsCisJCQkJCWJmYV9mY3NfcnBvcnRfZGVsX3RpbWVvdXQpOworCQl9CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX0RFTEVURToKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9oY2JfbG9nb3NlbmQpOworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9MT0dPX0lNUDoKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9oY2Jfb2ZmbGluZSk7CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX0xPR09fUkNWRDoKKwkJLyoqCisJCSAqIElnbm9yZSAtIGFscmVhZHkgcHJvY2Vzc2luZyBhIExPR08uCisJCSAqLworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqIFJwb3J0IGlzIGJlaW5nIGRlbGV0ZWQuIEZDLTRzIGFyZSBvZmZsaW5lLiBBd2FpdGluZyBCRkEgcnBvcnQgb2ZmbGluZQorICogY2FsbGJhY2sgdG8gc2VuZCBMT0dPLgorICovCitzdGF0aWMgdm9pZAorYmZhX2Zjc19ycG9ydF9zbV9oY2JfbG9nb3NlbmQoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQsCisJCQkgICAgICBlbnVtIHJwb3J0X2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMocnBvcnQtPmZjcywgcnBvcnQtPnB3d24pOworCWJmYV90cmMocnBvcnQtPmZjcywgcnBvcnQtPnBpZCk7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBSUFNNX0VWRU5UX0hDQl9PRkZMSU5FOgorCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX2xvZ29fc2VuZGluZyk7CisJCWJmYV9mY3NfcnBvcnRfc2VuZF9sb2dvKHJwb3J0LCBOVUxMKTsKKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfTE9HT19SQ1ZEOgorCWNhc2UgUlBTTV9FVkVOVF9BRERSRVNTX0NIQU5HRToKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworLyoqCisgKiAJCVJwb3J0IGlzIGJlaW5nIGRlbGV0ZWQuIEZDLTRzIGFyZSBvZmZsaW5lLiBMT0dPIGlzIGJlaW5nIHNlbnQuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX3Jwb3J0X3NtX2xvZ29fc2VuZGluZyhzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCwKKwkJCSAgICAgIGVudW0gcnBvcnRfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBycG9ydC0+cHd3bik7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBycG9ydC0+cGlkKTsKKwliZmFfdHJjKHJwb3J0LT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIFJQU01fRVZFTlRfRkNYUF9TRU5UOgorCQkvKgorCQkgKiBPbmNlIExPR08gaXMgc2VudCwgd2UgZG9ub3Qgd2FpdCBmb3IgdGhlIHJlc3BvbnNlCisJCSAqLworCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX3VuaW5pdCk7CisJCWJmYV9mY3NfcnBvcnRfZnJlZShycG9ydCk7CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX1NDTjoKKwljYXNlIFJQU01fRVZFTlRfQUREUkVTU19DSEFOR0U6CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX0xPR09fUkNWRDoKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV91bmluaXQpOworCQliZmFfZmN4cF93YWxsb2NfY2FuY2VsKHJwb3J0LT5mY3MtPmJmYSwgJnJwb3J0LT5mY3hwX3dxZSk7CisJCWJmYV9mY3NfcnBvcnRfZnJlZShycG9ydCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKy8qKgorICogCQlScG9ydCBpcyBvZmZsaW5lLiBGQy00cyBhcmUgb2ZmbGluZS4gQkZBIHJwb3J0IGlzIG9mZmxpbmUuCisgKiAJCVRpbWVyIGFjdGl2ZSB0byBkZWxldGUgc3RhbGUgcnBvcnQuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX3Jwb3J0X3NtX29mZmxpbmUoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQsIGVudW0gcnBvcnRfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBycG9ydC0+cHd3bik7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBycG9ydC0+cGlkKTsKKwliZmFfdHJjKHJwb3J0LT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIFJQU01fRVZFTlRfVElNRU9VVDoKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV91bmluaXQpOworCQliZmFfZmNzX3Jwb3J0X2ZyZWUocnBvcnQpOworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9TQ046CisJY2FzZSBSUFNNX0VWRU5UX0FERFJFU1NfQ0hBTkdFOgorCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX25zZGlzY19zZW5kaW5nKTsKKwkJYmZhX3RpbWVyX3N0b3AoJnJwb3J0LT50aW1lcik7CisJCXJwb3J0LT5uc19yZXRyaWVzID0gMDsKKwkJYmZhX2Zjc19ycG9ydF9zZW5kX2dpZHBuKHJwb3J0LCBOVUxMKTsKKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfREVMRVRFOgorCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX3VuaW5pdCk7CisJCWJmYV90aW1lcl9zdG9wKCZycG9ydC0+dGltZXIpOworCQliZmFfZmNzX3Jwb3J0X2ZyZWUocnBvcnQpOworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9QTE9HSV9SQ1ZEOgorCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX3Bsb2dpYWNjX3NlbmRpbmcpOworCQliZmFfdGltZXJfc3RvcCgmcnBvcnQtPnRpbWVyKTsKKwkJYmZhX2Zjc19ycG9ydF9zZW5kX3Bsb2dpYWNjKHJwb3J0LCBOVUxMKTsKKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfTE9HT19SQ1ZEOgorCWNhc2UgUlBTTV9FVkVOVF9MT0dPX0lNUDoKKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfUExPR0lfQ09NUDoKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9oYWxfb25saW5lKTsKKwkJYmZhX3RpbWVyX3N0b3AoJnJwb3J0LT50aW1lcik7CisJCWJmYV9mY3NfcnBvcnRfaGFsX29ubGluZShycG9ydCk7CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX1BMT0dJX1NFTkQ6CisJCWJmYV90aW1lcl9zdG9wKCZycG9ydC0+dGltZXIpOworCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX3Bsb2dpX3NlbmRpbmcpOworCQlycG9ydC0+cGxvZ2lfcmV0cmllcyA9IDA7CisJCWJmYV9mY3NfcnBvcnRfc2VuZF9wbG9naShycG9ydCwgTlVMTCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKy8qKgorICogCVJwb3J0IGFkZHJlc3MgaGFzIGNoYW5nZWQuIE5hbWVzZXJ2ZXIgZGlzY292ZXJ5IHJlcXVlc3QgaXMgYmVpbmcgc2VudC4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfcnBvcnRfc21fbnNkaXNjX3NlbmRpbmcoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQsCisJCQkJZW51bSBycG9ydF9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKHJwb3J0LT5mY3MsIHJwb3J0LT5wd3duKTsKKwliZmFfdHJjKHJwb3J0LT5mY3MsIHJwb3J0LT5waWQpOworCWJmYV90cmMocnBvcnQtPmZjcywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgUlBTTV9FVkVOVF9GQ1hQX1NFTlQ6CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21fbnNkaXNjX3NlbnQpOworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9ERUxFVEU6CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21fdW5pbml0KTsKKwkJYmZhX2ZjeHBfd2FsbG9jX2NhbmNlbChycG9ydC0+ZmNzLT5iZmEsICZycG9ydC0+ZmN4cF93cWUpOworCQliZmFfZmNzX3Jwb3J0X2ZyZWUocnBvcnQpOworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9QTE9HSV9SQ1ZEOgorCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX3Bsb2dpYWNjX3NlbmRpbmcpOworCQliZmFfZmN4cF93YWxsb2NfY2FuY2VsKHJwb3J0LT5mY3MtPmJmYSwgJnJwb3J0LT5mY3hwX3dxZSk7CisJCWJmYV9mY3NfcnBvcnRfc2VuZF9wbG9naWFjYyhycG9ydCwgTlVMTCk7CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX1NDTjoKKwljYXNlIFJQU01fRVZFTlRfTE9HT19SQ1ZEOgorCWNhc2UgUlBTTV9FVkVOVF9QTE9HSV9TRU5EOgorCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9BRERSRVNTX0NIQU5HRToKKwkJcnBvcnQtPm5zX3JldHJpZXMgPSAwOwkvKiByZXNldCB0aGUgcmV0cnkgY291bnQgKi8KKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfTE9HT19JTVA6CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21fb2ZmbGluZSk7CisJCWJmYV9mY3hwX3dhbGxvY19jYW5jZWwocnBvcnQtPmZjcy0+YmZhLCAmcnBvcnQtPmZjeHBfd3FlKTsKKwkJYmZhX3RpbWVyX3N0YXJ0KHJwb3J0LT5mY3MtPmJmYSwgJnJwb3J0LT50aW1lciwKKwkJCQliZmFfZmNzX3Jwb3J0X3RpbWVvdXQsIHJwb3J0LAorCQkJCWJmYV9mY3NfcnBvcnRfZGVsX3RpbWVvdXQpOworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9QTE9HSV9DT01QOgorCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX2hhbF9vbmxpbmUpOworCQliZmFfZmN4cF93YWxsb2NfY2FuY2VsKHJwb3J0LT5mY3MtPmJmYSwgJnJwb3J0LT5mY3hwX3dxZSk7CisJCWJmYV9mY3NfcnBvcnRfaGFsX29ubGluZShycG9ydCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKy8qKgorICogCQlOYW1lc2VydmVyIGRpc2NvdmVyeSBmYWlsZWQuIFdhaXRpbmcgZm9yIHRpbWVvdXQgdG8gcmV0cnkuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX3Jwb3J0X3NtX25zZGlzY19yZXRyeShzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCwKKwkJCSAgICAgIGVudW0gcnBvcnRfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBycG9ydC0+cHd3bik7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBycG9ydC0+cGlkKTsKKwliZmFfdHJjKHJwb3J0LT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIFJQU01fRVZFTlRfVElNRU9VVDoKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9uc2Rpc2Nfc2VuZGluZyk7CisJCWJmYV9mY3NfcnBvcnRfc2VuZF9naWRwbihycG9ydCwgTlVMTCk7CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX1NDTjoKKwljYXNlIFJQU01fRVZFTlRfQUREUkVTU19DSEFOR0U6CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21fbnNkaXNjX3NlbmRpbmcpOworCQliZmFfdGltZXJfc3RvcCgmcnBvcnQtPnRpbWVyKTsKKwkJcnBvcnQtPm5zX3JldHJpZXMgPSAwOworCQliZmFfZmNzX3Jwb3J0X3NlbmRfZ2lkcG4ocnBvcnQsIE5VTEwpOworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9ERUxFVEU6CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21fdW5pbml0KTsKKwkJYmZhX3RpbWVyX3N0b3AoJnJwb3J0LT50aW1lcik7CisJCWJmYV9mY3NfcnBvcnRfZnJlZShycG9ydCk7CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX1BMT0dJX1JDVkQ6CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21fcGxvZ2lhY2Nfc2VuZGluZyk7CisJCWJmYV90aW1lcl9zdG9wKCZycG9ydC0+dGltZXIpOworCQliZmFfZmNzX3Jwb3J0X3NlbmRfcGxvZ2lhY2MocnBvcnQsIE5VTEwpOworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9MT0dPX0lNUDoKKwkJcnBvcnQtPnBpZCA9IDA7CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21fb2ZmbGluZSk7CisJCWJmYV90aW1lcl9zdG9wKCZycG9ydC0+dGltZXIpOworCQliZmFfdGltZXJfc3RhcnQocnBvcnQtPmZjcy0+YmZhLCAmcnBvcnQtPnRpbWVyLAorCQkJCWJmYV9mY3NfcnBvcnRfdGltZW91dCwgcnBvcnQsCisJCQkJYmZhX2Zjc19ycG9ydF9kZWxfdGltZW91dCk7CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX0xPR09fUkNWRDoKKwkJYmZhX2Zjc19ycG9ydF9zZW5kX2xvZ29fYWNjKHJwb3J0KTsKKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfUExPR0lfQ09NUDoKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9oYWxfb25saW5lKTsKKwkJYmZhX3RpbWVyX3N0b3AoJnJwb3J0LT50aW1lcik7CisJCWJmYV9mY3NfcnBvcnRfaGFsX29ubGluZShycG9ydCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKy8qKgorICogUnBvcnQgYWRkcmVzcyBoYXMgY2hhbmdlZC4gTmFtZXNlcnZlciBkaXNjb3ZlcnkgcmVxdWVzdCBpcyBzZW50LgorICovCitzdGF0aWMgdm9pZAorYmZhX2Zjc19ycG9ydF9zbV9uc2Rpc2Nfc2VudChzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCwKKwkJCWVudW0gcnBvcnRfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBycG9ydC0+cHd3bik7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBycG9ydC0+cGlkKTsKKwliZmFfdHJjKHJwb3J0LT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIFJQU01fRVZFTlRfQUNDRVBURUQ6CisJY2FzZSBSUFNNX0VWRU5UX0FERFJFU1NfQ0hBTkdFOgorCQlpZiAocnBvcnQtPnBpZCkgeworCQkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9wbG9naV9zZW5kaW5nKTsKKwkJCWJmYV9mY3NfcnBvcnRfc2VuZF9wbG9naShycG9ydCwgTlVMTCk7CisJCX0gZWxzZSB7CisJCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LAorCQkJCQkgYmZhX2Zjc19ycG9ydF9zbV9uc2Rpc2Nfc2VuZGluZyk7CisJCQlycG9ydC0+bnNfcmV0cmllcyA9IDA7CisJCQliZmFfZmNzX3Jwb3J0X3NlbmRfZ2lkcG4ocnBvcnQsIE5VTEwpOworCQl9CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX0ZBSUxFRDoKKwkJcnBvcnQtPm5zX3JldHJpZXMrKzsKKwkJaWYgKHJwb3J0LT5uc19yZXRyaWVzIDwgQkZBX0ZDU19SUE9SVF9NQVhfUkVUUklFUykgeworCQkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwKKwkJCQkJIGJmYV9mY3NfcnBvcnRfc21fbnNkaXNjX3NlbmRpbmcpOworCQkJYmZhX2Zjc19ycG9ydF9zZW5kX2dpZHBuKHJwb3J0LCBOVUxMKTsKKwkJfSBlbHNlIHsKKwkJCXJwb3J0LT5waWQgPSAwOworCQkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9vZmZsaW5lKTsKKwkJCWJmYV90aW1lcl9zdGFydChycG9ydC0+ZmNzLT5iZmEsICZycG9ydC0+dGltZXIsCisJCQkJCWJmYV9mY3NfcnBvcnRfdGltZW91dCwgcnBvcnQsCisJCQkJCWJmYV9mY3NfcnBvcnRfZGVsX3RpbWVvdXQpOworCQl9OworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9ERUxFVEU6CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21fdW5pbml0KTsKKwkJYmZhX2ZjeHBfZGlzY2FyZChycG9ydC0+ZmN4cCk7CisJCWJmYV9mY3NfcnBvcnRfZnJlZShycG9ydCk7CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX1BMT0dJX1JDVkQ6CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21fcGxvZ2lhY2Nfc2VuZGluZyk7CisJCWJmYV9mY3hwX2Rpc2NhcmQocnBvcnQtPmZjeHApOworCQliZmFfZmNzX3Jwb3J0X3NlbmRfcGxvZ2lhY2MocnBvcnQsIE5VTEwpOworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9MT0dPX0lNUDoKKwkJcnBvcnQtPnBpZCA9IDA7CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21fb2ZmbGluZSk7CisJCWJmYV9mY3hwX2Rpc2NhcmQocnBvcnQtPmZjeHApOworCQliZmFfdGltZXJfc3RhcnQocnBvcnQtPmZjcy0+YmZhLCAmcnBvcnQtPnRpbWVyLAorCQkJCWJmYV9mY3NfcnBvcnRfdGltZW91dCwgcnBvcnQsCisJCQkJYmZhX2Zjc19ycG9ydF9kZWxfdGltZW91dCk7CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX1NDTjoKKwkJLyoqCisJCSAqIGlnbm9yZSwgd2FpdCBmb3IgTlMgcXVlcnkgcmVzcG9uc2UKKwkJICovCisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX0xPR09fUkNWRDoKKwkJLyoqCisJCSAqIE5vdCBsb2dnZWQtaW4geWV0LiBBY2NlcHQgTE9HTy4KKwkJICovCisJCWJmYV9mY3NfcnBvcnRfc2VuZF9sb2dvX2FjYyhycG9ydCk7CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX1BMT0dJX0NPTVA6CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21faGFsX29ubGluZSk7CisJCWJmYV9mY3hwX2Rpc2NhcmQocnBvcnQtPmZjeHApOworCQliZmFfZmNzX3Jwb3J0X2hhbF9vbmxpbmUocnBvcnQpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisKKworLyoqCisgKiAgZmNzX3Jwb3J0X3ByaXZhdGUgRkNTIFJQT1JUIHByb3ZhdGUgZnVuY3Rpb25zCisgKi8KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcnBvcnRfc2VuZF9wbG9naSh2b2lkICpycG9ydF9jYmFyZywgc3RydWN0IGJmYV9mY3hwX3MgKmZjeHBfYWxsb2NlZCkKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCA9IHJwb3J0X2NiYXJnOworCXN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCA9IHJwb3J0LT5wb3J0OworCXN0cnVjdCBmY2hzX3MgICAgICAgICAgZmNoczsKKwlpbnQgICAgICAgICAgICAgbGVuOworCXN0cnVjdCBiZmFfZmN4cF9zICpmY3hwOworCisJYmZhX3RyYyhycG9ydC0+ZmNzLCBycG9ydC0+cHd3bik7CisKKwlmY3hwID0gZmN4cF9hbGxvY2VkID8gZmN4cF9hbGxvY2VkIDogYmZhX2Zjc19mY3hwX2FsbG9jKHBvcnQtPmZjcyk7CisJaWYgKCFmY3hwKSB7CisJCWJmYV9mY3hwX2FsbG9jX3dhaXQocG9ydC0+ZmNzLT5iZmEsICZycG9ydC0+ZmN4cF93cWUsCisJCQkJICAgIGJmYV9mY3NfcnBvcnRfc2VuZF9wbG9naSwgcnBvcnQpOworCQlyZXR1cm47CisJfQorCXJwb3J0LT5mY3hwID0gZmN4cDsKKworCWxlbiA9IGZjX3Bsb2dpX2J1aWxkKCZmY2hzLCBiZmFfZmN4cF9nZXRfcmVxYnVmKGZjeHApLCBycG9ydC0+cGlkLAorCQkJICAgICBiZmFfZmNzX3BvcnRfZ2V0X2ZjaWQocG9ydCksIDAsCisJCQkgICAgIHBvcnQtPnBvcnRfY2ZnLnB3d24sIHBvcnQtPnBvcnRfY2ZnLm53d24sCisJCQkgICAgIGJmYV9wcG9ydF9nZXRfbWF4ZnJzaXplKHBvcnQtPmZjcy0+YmZhKSk7CisKKwliZmFfZmN4cF9zZW5kKGZjeHAsIE5VTEwsIHBvcnQtPmZhYnJpYy0+dmZfaWQsIHBvcnQtPmxwX3RhZywgQkZBX0ZBTFNFLAorCQkgICAgICBGQ19DTEFTU18zLCBsZW4sICZmY2hzLCBiZmFfZmNzX3Jwb3J0X3Bsb2dpX3Jlc3BvbnNlLAorCQkgICAgICAodm9pZCAqKXJwb3J0LCBGQ19NQVhfUERVU1osIEZDX1JBX1RPVik7CisKKwlycG9ydC0+c3RhdHMucGxvZ2lzKys7CisJYmZhX3NtX3NlbmRfZXZlbnQocnBvcnQsIFJQU01fRVZFTlRfRkNYUF9TRU5UKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcnBvcnRfcGxvZ2lfcmVzcG9uc2Uodm9pZCAqZmNzYXJnLCBzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cCwgdm9pZCAqY2JhcmcsCisJCQkgICAgIGJmYV9zdGF0dXNfdCByZXFfc3RhdHVzLCB1MzIgcnNwX2xlbiwKKwkJCSAgICAgdTMyIHJlc2lkX2xlbiwgc3RydWN0IGZjaHNfcyAqcnNwX2ZjaHMpCit7CisJc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQgPSAoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqKWNiYXJnOworCXN0cnVjdCBmY19sb2dpX3MJKnBsb2dpX3JzcDsKKwlzdHJ1Y3QgZmNfbHNfcmp0X3MJKmxzX3JqdDsKKwlzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICp0d2luOworCXN0cnVjdCBsaXN0X2hlYWQgKnFlOworCisJYmZhX3RyYyhycG9ydC0+ZmNzLCBycG9ydC0+cHd3bik7CisKKwkvKgorCSAqIFNhbml0eSBDaGVja3MKKwkgKi8KKwlpZiAocmVxX3N0YXR1cyAhPSBCRkFfU1RBVFVTX09LKSB7CisJCWJmYV90cmMocnBvcnQtPmZjcywgcmVxX3N0YXR1cyk7CisJCXJwb3J0LT5zdGF0cy5wbG9naV9mYWlsZWQrKzsKKwkJYmZhX3NtX3NlbmRfZXZlbnQocnBvcnQsIFJQU01fRVZFTlRfRkFJTEVEKTsKKwkJcmV0dXJuOworCX0KKworCXBsb2dpX3JzcCA9IChzdHJ1Y3QgZmNfbG9naV9zICopIEJGQV9GQ1hQX1JTUF9QTEQoZmN4cCk7CisKKwkvKioKKwkgKiBDaGVjayBmb3IgZmFpbHVyZSBmaXJzdC4KKwkgKi8KKwlpZiAocGxvZ2lfcnNwLT5lbHNfY21kLmVsc19jb2RlICE9IEZDX0VMU19BQ0MpIHsKKwkJbHNfcmp0ID0gKHN0cnVjdCBmY19sc19yanRfcyAqKSBCRkFfRkNYUF9SU1BfUExEKGZjeHApOworCisJCWJmYV90cmMocnBvcnQtPmZjcywgbHNfcmp0LT5yZWFzb25fY29kZSk7CisJCWJmYV90cmMocnBvcnQtPmZjcywgbHNfcmp0LT5yZWFzb25fY29kZV9leHBsKTsKKworCQlycG9ydC0+c3RhdHMucGxvZ2lfcmVqZWN0cysrOworCQliZmFfc21fc2VuZF9ldmVudChycG9ydCwgUlBTTV9FVkVOVF9GQUlMRUQpOworCQlyZXR1cm47CisJfQorCisJLyoqCisJICogUExPR0kgaXMgY29tcGxldGUuIE1ha2Ugc3VyZSB0aGlzIGRldmljZSBpcyBub3Qgb25lIG9mIHRoZSBrbm93bgorCSAqIGRldmljZSB3aXRoIGEgbmV3IEZDIHBvcnQgYWRkcmVzcy4KKwkgKi8KKwlsaXN0X2Zvcl9lYWNoKHFlLCAmcnBvcnQtPnBvcnQtPnJwb3J0X3EpIHsKKwkJdHdpbiA9IChzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICopcWU7CisJCWlmICh0d2luID09IHJwb3J0KQorCQkJY29udGludWU7CisJCWlmICghcnBvcnQtPnB3d24gJiYgKHBsb2dpX3JzcC0+cG9ydF9uYW1lID09IHR3aW4tPnB3d24pKSB7CisJCQliZmFfdHJjKHJwb3J0LT5mY3MsIHR3aW4tPnBpZCk7CisJCQliZmFfdHJjKHJwb3J0LT5mY3MsIHJwb3J0LT5waWQpOworCisJCQkvKgorCQkJICogVXBkYXRlIHBsb2dpIHN0YXRzIGluIHR3aW4KKwkJCSAqLworCQkJdHdpbi0+c3RhdHMucGxvZ2lzICs9IHJwb3J0LT5zdGF0cy5wbG9naXM7CisJCQl0d2luLT5zdGF0cy5wbG9naV9yZWplY3RzICs9IHJwb3J0LT5zdGF0cy5wbG9naV9yZWplY3RzOworCQkJdHdpbi0+c3RhdHMucGxvZ2lfdGltZW91dHMgKz0KKwkJCQlycG9ydC0+c3RhdHMucGxvZ2lfdGltZW91dHM7CisJCQl0d2luLT5zdGF0cy5wbG9naV9mYWlsZWQgKz0gcnBvcnQtPnN0YXRzLnBsb2dpX2ZhaWxlZDsKKwkJCXR3aW4tPnN0YXRzLnBsb2dpX3JjdmQgKz0gcnBvcnQtPnN0YXRzLnBsb2dpX3JjdmQ7CisJCQl0d2luLT5zdGF0cy5wbG9naV9hY2NzKys7CisKKwkJCWJmYV9mY3NfcnBvcnRfZGVsZXRlKHJwb3J0KTsKKworCQkJYmZhX2Zjc19ycG9ydF91cGRhdGUodHdpbiwgcGxvZ2lfcnNwKTsKKwkJCXR3aW4tPnBpZCA9IHJzcF9mY2hzLT5zX2lkOworCQkJYmZhX3NtX3NlbmRfZXZlbnQodHdpbiwgUlBTTV9FVkVOVF9QTE9HSV9DT01QKTsKKwkJCXJldHVybjsKKwkJfQorCX0KKworCS8qKgorCSAqIE5vcm1hbCBsb2dpbiBwYXRoIC0tIG5vIGV2aWwgdHdpbnMuCisJICovCisJcnBvcnQtPnN0YXRzLnBsb2dpX2FjY3MrKzsKKwliZmFfZmNzX3Jwb3J0X3VwZGF0ZShycG9ydCwgcGxvZ2lfcnNwKTsKKwliZmFfc21fc2VuZF9ldmVudChycG9ydCwgUlBTTV9FVkVOVF9BQ0NFUFRFRCk7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3Jwb3J0X3NlbmRfcGxvZ2lhY2Modm9pZCAqcnBvcnRfY2JhcmcsIHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwX2FsbG9jZWQpCit7CisJc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQgPSBycG9ydF9jYmFyZzsKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQgPSBycG9ydC0+cG9ydDsKKwlzdHJ1Y3QgZmNoc19zICAgICAgICAgIGZjaHM7CisJaW50ICAgICAgICAgICAgIGxlbjsKKwlzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cDsKKworCWJmYV90cmMocnBvcnQtPmZjcywgcnBvcnQtPnB3d24pOworCWJmYV90cmMocnBvcnQtPmZjcywgcnBvcnQtPnJlcGx5X294aWQpOworCisJZmN4cCA9IGZjeHBfYWxsb2NlZCA/IGZjeHBfYWxsb2NlZCA6IGJmYV9mY3NfZmN4cF9hbGxvYyhwb3J0LT5mY3MpOworCWlmICghZmN4cCkgeworCQliZmFfZmN4cF9hbGxvY193YWl0KHBvcnQtPmZjcy0+YmZhLCAmcnBvcnQtPmZjeHBfd3FlLAorCQkJCSAgICBiZmFfZmNzX3Jwb3J0X3NlbmRfcGxvZ2lhY2MsIHJwb3J0KTsKKwkJcmV0dXJuOworCX0KKwlycG9ydC0+ZmN4cCA9IGZjeHA7CisKKwlsZW4gPSBmY19wbG9naV9hY2NfYnVpbGQoJmZjaHMsIGJmYV9mY3hwX2dldF9yZXFidWYoZmN4cCksIHJwb3J0LT5waWQsCisJCQkJIGJmYV9mY3NfcG9ydF9nZXRfZmNpZChwb3J0KSwgcnBvcnQtPnJlcGx5X294aWQsCisJCQkJIHBvcnQtPnBvcnRfY2ZnLnB3d24sIHBvcnQtPnBvcnRfY2ZnLm53d24sCisJCQkJIGJmYV9wcG9ydF9nZXRfbWF4ZnJzaXplKHBvcnQtPmZjcy0+YmZhKSk7CisKKwliZmFfZmN4cF9zZW5kKGZjeHAsIE5VTEwsIHBvcnQtPmZhYnJpYy0+dmZfaWQsIHBvcnQtPmxwX3RhZywgQkZBX0ZBTFNFLAorCQkgICAgICBGQ19DTEFTU18zLCBsZW4sICZmY2hzLCBOVUxMLCBOVUxMLCBGQ19NQVhfUERVU1osIDApOworCisJYmZhX3NtX3NlbmRfZXZlbnQocnBvcnQsIFJQU01fRVZFTlRfRkNYUF9TRU5UKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcnBvcnRfc2VuZF9hZGlzYyh2b2lkICpycG9ydF9jYmFyZywgc3RydWN0IGJmYV9mY3hwX3MgKmZjeHBfYWxsb2NlZCkKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCA9IHJwb3J0X2NiYXJnOworCXN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCA9IHJwb3J0LT5wb3J0OworCXN0cnVjdCBmY2hzX3MgICAgICAgICAgZmNoczsKKwlpbnQgICAgICAgICAgICAgbGVuOworCXN0cnVjdCBiZmFfZmN4cF9zICpmY3hwOworCisJYmZhX3RyYyhycG9ydC0+ZmNzLCBycG9ydC0+cHd3bik7CisKKwlmY3hwID0gZmN4cF9hbGxvY2VkID8gZmN4cF9hbGxvY2VkIDogYmZhX2Zjc19mY3hwX2FsbG9jKHBvcnQtPmZjcyk7CisJaWYgKCFmY3hwKSB7CisJCWJmYV9mY3hwX2FsbG9jX3dhaXQocG9ydC0+ZmNzLT5iZmEsICZycG9ydC0+ZmN4cF93cWUsCisJCQkJICAgIGJmYV9mY3NfcnBvcnRfc2VuZF9hZGlzYywgcnBvcnQpOworCQlyZXR1cm47CisJfQorCXJwb3J0LT5mY3hwID0gZmN4cDsKKworCWxlbiA9IGZjX2FkaXNjX2J1aWxkKCZmY2hzLCBiZmFfZmN4cF9nZXRfcmVxYnVmKGZjeHApLCBycG9ydC0+cGlkLAorCQkJICAgICBiZmFfZmNzX3BvcnRfZ2V0X2ZjaWQocG9ydCksIDAsCisJCQkgICAgIHBvcnQtPnBvcnRfY2ZnLnB3d24sIHBvcnQtPnBvcnRfY2ZnLm53d24pOworCisJYmZhX2ZjeHBfc2VuZChmY3hwLCBOVUxMLCBwb3J0LT5mYWJyaWMtPnZmX2lkLCBwb3J0LT5scF90YWcsIEJGQV9GQUxTRSwKKwkJICAgICAgRkNfQ0xBU1NfMywgbGVuLCAmZmNocywgYmZhX2Zjc19ycG9ydF9hZGlzY19yZXNwb25zZSwKKwkJICAgICAgcnBvcnQsIEZDX01BWF9QRFVTWiwgRkNfUkFfVE9WKTsKKworCXJwb3J0LT5zdGF0cy5hZGlzY19zZW50Kys7CisJYmZhX3NtX3NlbmRfZXZlbnQocnBvcnQsIFJQU01fRVZFTlRfRkNYUF9TRU5UKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcnBvcnRfYWRpc2NfcmVzcG9uc2Uodm9pZCAqZmNzYXJnLCBzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cCwgdm9pZCAqY2JhcmcsCisJCQkgICAgIGJmYV9zdGF0dXNfdCByZXFfc3RhdHVzLCB1MzIgcnNwX2xlbiwKKwkJCSAgICAgdTMyIHJlc2lkX2xlbiwgc3RydWN0IGZjaHNfcyAqcnNwX2ZjaHMpCit7CisJc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQgPSAoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqKWNiYXJnOworCXZvaWQgICAgICAgICAgICpwbGQgPSBiZmFfZmN4cF9nZXRfcnNwYnVmKGZjeHApOworCXN0cnVjdCBmY19sc19yanRfcyAgICAqbHNfcmp0OworCisJaWYgKHJlcV9zdGF0dXMgIT0gQkZBX1NUQVRVU19PSykgeworCQliZmFfdHJjKHJwb3J0LT5mY3MsIHJlcV9zdGF0dXMpOworCQlycG9ydC0+c3RhdHMuYWRpc2NfZmFpbGVkKys7CisJCWJmYV9zbV9zZW5kX2V2ZW50KHJwb3J0LCBSUFNNX0VWRU5UX0ZBSUxFRCk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoZmNfYWRpc2NfcnNwX3BhcnNlKChzdHJ1Y3QgZmNfYWRpc2NfcyAqKXBsZCwgcnNwX2xlbiwgcnBvcnQtPnB3d24sCisJCXJwb3J0LT5ud3duKSAgPT0gRkNfUEFSU0VfT0spIHsKKwkJcnBvcnQtPnN0YXRzLmFkaXNjX2FjY3MrKzsKKwkJYmZhX3NtX3NlbmRfZXZlbnQocnBvcnQsIFJQU01fRVZFTlRfQUNDRVBURUQpOworCQlyZXR1cm47CisJfQorCisJcnBvcnQtPnN0YXRzLmFkaXNjX3JlamVjdHMrKzsKKwlsc19yanQgPSBwbGQ7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBsc19yanQtPmVsc19jbWQuZWxzX2NvZGUpOworCWJmYV90cmMocnBvcnQtPmZjcywgbHNfcmp0LT5yZWFzb25fY29kZSk7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBsc19yanQtPnJlYXNvbl9jb2RlX2V4cGwpOworCWJmYV9zbV9zZW5kX2V2ZW50KHJwb3J0LCBSUFNNX0VWRU5UX0ZBSUxFRCk7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3Jwb3J0X3NlbmRfZ2lkcG4odm9pZCAqcnBvcnRfY2JhcmcsIHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwX2FsbG9jZWQpCit7CisJc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQgPSBycG9ydF9jYmFyZzsKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQgPSBycG9ydC0+cG9ydDsKKwlzdHJ1Y3QgZmNoc19zICAgICAgICAgIGZjaHM7CisJc3RydWN0IGJmYV9mY3hwX3MgKmZjeHA7CisJaW50ICAgICAgICAgICAgIGxlbjsKKworCWJmYV90cmMocnBvcnQtPmZjcywgcnBvcnQtPnBpZCk7CisKKwlmY3hwID0gZmN4cF9hbGxvY2VkID8gZmN4cF9hbGxvY2VkIDogYmZhX2Zjc19mY3hwX2FsbG9jKHBvcnQtPmZjcyk7CisJaWYgKCFmY3hwKSB7CisJCWJmYV9mY3hwX2FsbG9jX3dhaXQocG9ydC0+ZmNzLT5iZmEsICZycG9ydC0+ZmN4cF93cWUsCisJCQkJICAgIGJmYV9mY3NfcnBvcnRfc2VuZF9naWRwbiwgcnBvcnQpOworCQlyZXR1cm47CisJfQorCXJwb3J0LT5mY3hwID0gZmN4cDsKKworCWxlbiA9IGZjX2dpZHBuX2J1aWxkKCZmY2hzLCBiZmFfZmN4cF9nZXRfcmVxYnVmKGZjeHApLAorCQkJICAgICBiZmFfZmNzX3BvcnRfZ2V0X2ZjaWQocG9ydCksIDAsIHJwb3J0LT5wd3duKTsKKworCWJmYV9mY3hwX3NlbmQoZmN4cCwgTlVMTCwgcG9ydC0+ZmFicmljLT52Zl9pZCwgcG9ydC0+bHBfdGFnLCBCRkFfRkFMU0UsCisJCSAgICAgIEZDX0NMQVNTXzMsIGxlbiwgJmZjaHMsIGJmYV9mY3NfcnBvcnRfZ2lkcG5fcmVzcG9uc2UsCisJCSAgICAgICh2b2lkICopcnBvcnQsIEZDX01BWF9QRFVTWiwgRkNfUkFfVE9WKTsKKworCWJmYV9zbV9zZW5kX2V2ZW50KHJwb3J0LCBSUFNNX0VWRU5UX0ZDWFBfU0VOVCk7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3Jwb3J0X2dpZHBuX3Jlc3BvbnNlKHZvaWQgKmZjc2FyZywgc3RydWN0IGJmYV9mY3hwX3MgKmZjeHAsIHZvaWQgKmNiYXJnLAorCQkJICAgICBiZmFfc3RhdHVzX3QgcmVxX3N0YXR1cywgdTMyIHJzcF9sZW4sCisJCQkgICAgIHUzMiByZXNpZF9sZW4sIHN0cnVjdCBmY2hzX3MgKnJzcF9mY2hzKQoreworCXN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0ID0gKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKiljYmFyZzsKKwlzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICp0d2luOworCXN0cnVjdCBsaXN0X2hlYWQgKnFlOworCXN0cnVjdCBjdF9oZHJfcyAgICAgICAJKmN0aGRyOworCXN0cnVjdCBmY2dzX2dpZHBuX3Jlc3BfcwkqZ2lkcG5fcnNwOworCisJYmZhX3RyYyhycG9ydC0+ZmNzLCBycG9ydC0+cHd3bik7CisKKwljdGhkciA9IChzdHJ1Y3QgY3RfaGRyX3MgKikgQkZBX0ZDWFBfUlNQX1BMRChmY3hwKTsKKwljdGhkci0+Y21kX3JzcF9jb2RlID0gYmZhX29zX250b2hzKGN0aGRyLT5jbWRfcnNwX2NvZGUpOworCisJaWYgKGN0aGRyLT5jbWRfcnNwX2NvZGUgPT0gQ1RfUlNQX0FDQ0VQVCkgeworCQkvKgorCQkgKiBDaGVjayBpZiB0aGUgcGlkIGlzIHRoZSBzYW1lIGFzIGJlZm9yZS4KKwkJICovCisJCWdpZHBuX3JzcCA9IChzdHJ1Y3QgZmNnc19naWRwbl9yZXNwX3MgKikgKGN0aGRyICsgMSk7CisKKwkJaWYgKGdpZHBuX3JzcC0+ZGFwID09IHJwb3J0LT5waWQpIHsKKwkJCS8qCisJCQkgKiBEZXZpY2UgaXMgb25saW5lCisJCQkgKi8KKwkJCWJmYV9zbV9zZW5kX2V2ZW50KHJwb3J0LCBSUFNNX0VWRU5UX0FDQ0VQVEVEKTsKKwkJfSBlbHNlIHsKKwkJCS8qCisJCQkgKiBEZXZpY2UncyBQSUQgaGFzIGNoYW5nZWQuIFdlIG5lZWQgdG8gY2xlYW51cCBhbmQKKwkJCSAqIHJlLWxvZ2luLiBJZiB0aGVyZSBpcyBhbm90aGVyIGRldmljZSB3aXRoIHRoZSB0aGUKKwkJCSAqIG5ld2x5IGRpc2NvdmVyZWQgcGlkLCBzZW5kIGFuIHNjbiBub3RpY2Ugc28gdGhhdCBpdHMKKwkJCSAqIG5ldyBwaWQgY2FuIGJlIGRpc2NvdmVyZWQuCisJCQkgKi8KKwkJCWxpc3RfZm9yX2VhY2gocWUsICZycG9ydC0+cG9ydC0+cnBvcnRfcSkgeworCQkJCXR3aW4gPSAoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqKXFlOworCQkJCWlmICh0d2luID09IHJwb3J0KQorCQkJCQljb250aW51ZTsKKwkJCQlpZiAoZ2lkcG5fcnNwLT5kYXAgPT0gdHdpbi0+cGlkKSB7CisJCQkJCWJmYV90cmMocnBvcnQtPmZjcywgdHdpbi0+cGlkKTsKKwkJCQkJYmZhX3RyYyhycG9ydC0+ZmNzLCBycG9ydC0+cGlkKTsKKworCQkJCQl0d2luLT5waWQgPSAwOworCQkJCQliZmFfc21fc2VuZF9ldmVudCh0d2luLAorCQkJCQkJUlBTTV9FVkVOVF9BRERSRVNTX0NIQU5HRSk7CisJCQkJfQorCQkJfQorCQkJcnBvcnQtPnBpZCA9IGdpZHBuX3JzcC0+ZGFwOworCQkJYmZhX3NtX3NlbmRfZXZlbnQocnBvcnQsIFJQU01fRVZFTlRfQUREUkVTU19DSEFOR0UpOworCQl9CisJCXJldHVybjsKKwl9CisKKwkvKgorCSAqIFJlamVjdCBSZXNwb25zZQorCSAqLworCXN3aXRjaCAoY3RoZHItPnJlYXNvbl9jb2RlKSB7CisJY2FzZSBDVF9SU05fTE9HSUNBTF9CVVNZOgorCQkvKgorCQkgKiBOZWVkIHRvIHJldHJ5CisJCSAqLworCQliZmFfc21fc2VuZF9ldmVudChycG9ydCwgUlBTTV9FVkVOVF9USU1FT1VUKTsKKwkJYnJlYWs7CisKKwljYXNlIENUX1JTTl9VTkFCTEVfVE9fUEVSRjoKKwkJLyoKKwkJICogZGV2aWNlIGRvZXNuJ3QgZXhpc3QgOiBTdGFydCB0aW1lciB0byBjbGVhbnVwIHRoaXMgbGF0ZXIuCisJCSAqLworCQliZmFfc21fc2VuZF9ldmVudChycG9ydCwgUlBTTV9FVkVOVF9GQUlMRUQpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9zbV9zZW5kX2V2ZW50KHJwb3J0LCBSUFNNX0VWRU5UX0ZBSUxFRCk7CisJCWJyZWFrOworCX0KK30KKworLyoqCisgKiAgICBDYWxsZWQgdG8gc2VuZCBhIGxvZ291dCB0byB0aGUgcnBvcnQuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX3Jwb3J0X3NlbmRfbG9nbyh2b2lkICpycG9ydF9jYmFyZywgc3RydWN0IGJmYV9mY3hwX3MgKmZjeHBfYWxsb2NlZCkKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCA9IHJwb3J0X2NiYXJnOworCXN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydDsKKwlzdHJ1Y3QgZmNoc19zICAgICAgICAgIGZjaHM7CisJc3RydWN0IGJmYV9mY3hwX3MgKmZjeHA7CisJdTE2ICAgICAgICBsZW47CisKKwliZmFfdHJjKHJwb3J0LT5mY3MsIHJwb3J0LT5waWQpOworCisJcG9ydCA9IHJwb3J0LT5wb3J0OworCisJZmN4cCA9IGZjeHBfYWxsb2NlZCA/IGZjeHBfYWxsb2NlZCA6IGJmYV9mY3NfZmN4cF9hbGxvYyhwb3J0LT5mY3MpOworCWlmICghZmN4cCkgeworCQliZmFfZmN4cF9hbGxvY193YWl0KHBvcnQtPmZjcy0+YmZhLCAmcnBvcnQtPmZjeHBfd3FlLAorCQkJCSAgICBiZmFfZmNzX3Jwb3J0X3NlbmRfbG9nbywgcnBvcnQpOworCQlyZXR1cm47CisJfQorCXJwb3J0LT5mY3hwID0gZmN4cDsKKworCWxlbiA9IGZjX2xvZ29fYnVpbGQoJmZjaHMsIGJmYV9mY3hwX2dldF9yZXFidWYoZmN4cCksIHJwb3J0LT5waWQsCisJCQkgICAgYmZhX2Zjc19wb3J0X2dldF9mY2lkKHBvcnQpLCAwLAorCQkJICAgIGJmYV9mY3NfcG9ydF9nZXRfcHd3bihwb3J0KSk7CisKKwliZmFfZmN4cF9zZW5kKGZjeHAsIE5VTEwsIHBvcnQtPmZhYnJpYy0+dmZfaWQsIHBvcnQtPmxwX3RhZywgQkZBX0ZBTFNFLAorCQkgICAgICBGQ19DTEFTU18zLCBsZW4sICZmY2hzLCBOVUxMLCBycG9ydCwgRkNfTUFYX1BEVVNaLAorCQkgICAgICBGQ19FRF9UT1YpOworCisJcnBvcnQtPnN0YXRzLmxvZ29zKys7CisJYmZhX2ZjeHBfZGlzY2FyZChycG9ydC0+ZmN4cCk7CisJYmZhX3NtX3NlbmRfZXZlbnQocnBvcnQsIFJQU01fRVZFTlRfRkNYUF9TRU5UKTsKK30KKworLyoqCisgKiAgICBTZW5kIEFDQyBmb3IgYSBMT0dPIHJlY2VpdmVkLgorICovCitzdGF0aWMgdm9pZAorYmZhX2Zjc19ycG9ydF9zZW5kX2xvZ29fYWNjKHZvaWQgKnJwb3J0X2NiYXJnKQoreworCXN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0ID0gcnBvcnRfY2Jhcmc7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0OworCXN0cnVjdCBmY2hzX3MgICAgICAgICAgZmNoczsKKwlzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cDsKKwl1MTYgICAgICAgIGxlbjsKKworCWJmYV90cmMocnBvcnQtPmZjcywgcnBvcnQtPnBpZCk7CisKKwlwb3J0ID0gcnBvcnQtPnBvcnQ7CisKKwlmY3hwID0gYmZhX2Zjc19mY3hwX2FsbG9jKHBvcnQtPmZjcyk7CisJaWYgKCFmY3hwKQorCQlyZXR1cm47CisKKwlycG9ydC0+c3RhdHMubG9nb19yY3ZkKys7CisJbGVuID0gZmNfbG9nb19hY2NfYnVpbGQoJmZjaHMsIGJmYV9mY3hwX2dldF9yZXFidWYoZmN4cCksIHJwb3J0LT5waWQsCisJCQkJYmZhX2Zjc19wb3J0X2dldF9mY2lkKHBvcnQpLCBycG9ydC0+cmVwbHlfb3hpZCk7CisKKwliZmFfZmN4cF9zZW5kKGZjeHAsIE5VTEwsIHBvcnQtPmZhYnJpYy0+dmZfaWQsIHBvcnQtPmxwX3RhZywgQkZBX0ZBTFNFLAorCQkgICAgICBGQ19DTEFTU18zLCBsZW4sICZmY2hzLCBOVUxMLCBOVUxMLCBGQ19NQVhfUERVU1osIDApOworfQorCisvKioKKyAqICAgICBUaGlzIHJvdXRpbmUgd2lsbCBiZSBjYWxsZWQgYnkgYmZhX3RpbWVyIG9uIHRpbWVyIHRpbWVvdXRzLgorICoKKyAqIAlwYXJhbVtpbl0gCXJwb3J0IAkJCS0gcG9pbnRlciB0byBiZmFfZmNzX3BvcnRfbnNfdC4KKyAqIAlwYXJhbVtvdXRdCXJwb3J0X3N0YXR1cyAJLSBwb2ludGVyIHRvIHJldHVybiB2cG9ydCBzdGF0dXMgaW4KKyAqCisgKiAJcmV0dXJuCisgKiAJCXZvaWQKKyAqCisqICAJU3BlY2lhbCBDb25zaWRlcmF0aW9uczoKKyAqCisgKiAJbm90ZQorICovCitzdGF0aWMgdm9pZAorYmZhX2Zjc19ycG9ydF90aW1lb3V0KHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCA9IChzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICopYXJnOworCisJcnBvcnQtPnN0YXRzLnBsb2dpX3RpbWVvdXRzKys7CisJYmZhX3NtX3NlbmRfZXZlbnQocnBvcnQsIFJQU01fRVZFTlRfVElNRU9VVCk7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3Jwb3J0X3Byb2Nlc3NfcHJsaShzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCwKKwkJCXN0cnVjdCBmY2hzX3MgKnJ4X2ZjaHMsIHUxNiBsZW4pCit7CisJc3RydWN0IGJmYV9mY3hwX3MgKmZjeHA7CisJc3RydWN0IGZjaHNfcyAgICAgICAgICBmY2hzOworCXN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCA9IHJwb3J0LT5wb3J0OworCXN0cnVjdCBmY19wcmxpX3MgICAgICAqcHJsaTsKKworCWJmYV90cmMocG9ydC0+ZmNzLCByeF9mY2hzLT5zX2lkKTsKKwliZmFfdHJjKHBvcnQtPmZjcywgcnhfZmNocy0+ZF9pZCk7CisKKwlycG9ydC0+c3RhdHMucHJsaV9yY3ZkKys7CisKKwlpZiAoQkZBX0ZDU19WUE9SVF9JU19UQVJHRVRfTU9ERShwb3J0KSkgeworCQkvKgorCQkgKiBUYXJnZXQgTW9kZSA6IExldCB0aGUgZmNwdG0gaGFuZGxlIGl0CisJCSAqLworCQliZmFfZmNzX3Rpbl9yeF9wcmxpKHJwb3J0LT50aW4sIHJ4X2ZjaHMsIGxlbik7CisJCXJldHVybjsKKwl9CisKKwkvKgorCSAqIFdlIGFyZSBlaXRoZXIgaW4gSW5pdGlhdG9yIG9yIGlwZmMgTW9kZQorCSAqLworCXBybGkgPSAoc3RydWN0IGZjX3BybGlfcyAqKSAocnhfZmNocyArIDEpOworCisJaWYgKHBybGktPnBhcmFtcGFnZS5zZXJ2cGFyYW1zLmluaXRpYXRvcikgeworCQliZmFfdHJjKHJwb3J0LT5mY3MsIHBybGktPnBhcmFtcGFnZS50eXBlKTsKKwkJcnBvcnQtPnNjc2lfZnVuY3Rpb24gPSBCRkFfUlBPUlRfSU5JVElBVE9SOworCQliZmFfZmNzX2l0bmltX2lzX2luaXRpYXRvcihycG9ydC0+aXRuaW0pOworCX0gZWxzZSB7CisJCS8qCisJCSAqIEB0b2RvOiBQUkxJIGZyb20gYSB0YXJnZXQgPworCQkgKi8KKwkJYmZhX3RyYyhwb3J0LT5mY3MsIHJ4X2ZjaHMtPnNfaWQpOworCQlycG9ydC0+c2NzaV9mdW5jdGlvbiA9IEJGQV9SUE9SVF9UQVJHRVQ7CisJfQorCisJZmN4cCA9IGJmYV9mY3NfZmN4cF9hbGxvYyhwb3J0LT5mY3MpOworCWlmICghZmN4cCkKKwkJcmV0dXJuOworCisJbGVuID0gZmNfcHJsaV9hY2NfYnVpbGQoJmZjaHMsIGJmYV9mY3hwX2dldF9yZXFidWYoZmN4cCksIHJ4X2ZjaHMtPnNfaWQsCisJCQkJYmZhX2Zjc19wb3J0X2dldF9mY2lkKHBvcnQpLCByeF9mY2hzLT5veF9pZCwKKwkJCQlwb3J0LT5wb3J0X2NmZy5yb2xlcyk7CisKKwliZmFfZmN4cF9zZW5kKGZjeHAsIE5VTEwsIHBvcnQtPmZhYnJpYy0+dmZfaWQsIHBvcnQtPmxwX3RhZywgQkZBX0ZBTFNFLAorCQkgICAgICBGQ19DTEFTU18zLCBsZW4sICZmY2hzLCBOVUxMLCBOVUxMLCBGQ19NQVhfUERVU1osIDApOworfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19ycG9ydF9wcm9jZXNzX3Jwc2Moc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQsCisJCQlzdHJ1Y3QgZmNoc19zICpyeF9mY2hzLCB1MTYgbGVuKQoreworCXN0cnVjdCBiZmFfZmN4cF9zICpmY3hwOworCXN0cnVjdCBmY2hzX3MgICAgICAgICAgZmNoczsKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQgPSBycG9ydC0+cG9ydDsKKwlzdHJ1Y3QgZmNfcnBzY19zcGVlZF9pbmZvX3Mgc3BlZWRzOworCXN0cnVjdCBiZmFfcHBvcnRfYXR0cl9zIHBwb3J0X2F0dHI7CisKKwliZmFfdHJjKHBvcnQtPmZjcywgcnhfZmNocy0+c19pZCk7CisJYmZhX3RyYyhwb3J0LT5mY3MsIHJ4X2ZjaHMtPmRfaWQpOworCisJcnBvcnQtPnN0YXRzLnJwc2NfcmN2ZCsrOworCXNwZWVkcy5wb3J0X3NwZWVkX2NhcCA9CisJCVJQU0NfU1BFRURfQ0FQXzFHIHwgUlBTQ19TUEVFRF9DQVBfMkcgfCBSUFNDX1NQRUVEX0NBUF80RyB8CisJCVJQU0NfU1BFRURfQ0FQXzhHOworCisJLyoKKwkgKiBnZXQgY3VyZW50IHNwZWVkIGZyb20gcHBvcnQgYXR0cmlidXRlcyBmcm9tIEJGQQorCSAqLworCWJmYV9wcG9ydF9nZXRfYXR0cihwb3J0LT5mY3MtPmJmYSwgJnBwb3J0X2F0dHIpOworCisJc3BlZWRzLnBvcnRfb3Bfc3BlZWQgPSBmY19iZmFfc3BlZWRfdG9fcnBzY19vcGVyc3BlZWQocHBvcnRfYXR0ci5zcGVlZCk7CisKKwlmY3hwID0gYmZhX2Zjc19mY3hwX2FsbG9jKHBvcnQtPmZjcyk7CisJaWYgKCFmY3hwKQorCQlyZXR1cm47CisKKwlsZW4gPSBmY19ycHNjX2FjY19idWlsZCgmZmNocywgYmZhX2ZjeHBfZ2V0X3JlcWJ1ZihmY3hwKSwgcnhfZmNocy0+c19pZCwKKwkJCQliZmFfZmNzX3BvcnRfZ2V0X2ZjaWQocG9ydCksIHJ4X2ZjaHMtPm94X2lkLAorCQkJCSZzcGVlZHMpOworCisJYmZhX2ZjeHBfc2VuZChmY3hwLCBOVUxMLCBwb3J0LT5mYWJyaWMtPnZmX2lkLCBwb3J0LT5scF90YWcsIEJGQV9GQUxTRSwKKwkJICAgICAgRkNfQ0xBU1NfMywgbGVuLCAmZmNocywgTlVMTCwgTlVMTCwgRkNfTUFYX1BEVVNaLCAwKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcnBvcnRfcHJvY2Vzc19hZGlzYyhzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCwKKwkJCXN0cnVjdCBmY2hzX3MgKnJ4X2ZjaHMsIHUxNiBsZW4pCit7CisJc3RydWN0IGJmYV9mY3hwX3MgKmZjeHA7CisJc3RydWN0IGZjaHNfcyAgICAgICAgICBmY2hzOworCXN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCA9IHJwb3J0LT5wb3J0OworCXN0cnVjdCBmY19hZGlzY19zICAgICAgKmFkaXNjOworCisJYmZhX3RyYyhwb3J0LT5mY3MsIHJ4X2ZjaHMtPnNfaWQpOworCWJmYV90cmMocG9ydC0+ZmNzLCByeF9mY2hzLT5kX2lkKTsKKworCXJwb3J0LT5zdGF0cy5hZGlzY19yY3ZkKys7CisKKwlpZiAoQkZBX0ZDU19WUE9SVF9JU19UQVJHRVRfTU9ERShwb3J0KSkgeworCQkvKgorCQkgKiBAdG9kbyA6IFRhcmdldCBNb2RlIGhhbmRsaW5nCisJCSAqLworCQliZmFfdHJjKHBvcnQtPmZjcywgcnhfZmNocy0+ZF9pZCk7CisJCWJmYV9hc3NlcnQoMCk7CisJCXJldHVybjsKKwl9CisKKwlhZGlzYyA9IChzdHJ1Y3QgZmNfYWRpc2NfcyAqKSAocnhfZmNocyArIDEpOworCisJLyoKKwkgKiBBY2NlcHQgaWYgdGhlIGl0bmltIGZvciB0aGlzIHJwb3J0IGlzIG9ubGluZS4gRWxzZSByZWplY3QgdGhlIEFESVNDCisJICovCisJaWYgKGJmYV9mY3NfaXRuaW1fZ2V0X29ubGluZV9zdGF0ZShycG9ydC0+aXRuaW0pID09IEJGQV9TVEFUVVNfT0spIHsKKworCQlmY3hwID0gYmZhX2Zjc19mY3hwX2FsbG9jKHBvcnQtPmZjcyk7CisJCWlmICghZmN4cCkKKwkJCXJldHVybjsKKworCQlsZW4gPSBmY19hZGlzY19hY2NfYnVpbGQoJmZjaHMsIGJmYV9mY3hwX2dldF9yZXFidWYoZmN4cCksCisJCQkJCSByeF9mY2hzLT5zX2lkLAorCQkJCQkgYmZhX2Zjc19wb3J0X2dldF9mY2lkKHBvcnQpLAorCQkJCQkgcnhfZmNocy0+b3hfaWQsIHBvcnQtPnBvcnRfY2ZnLnB3d24sCisJCQkJCSBwb3J0LT5wb3J0X2NmZy5ud3duKTsKKworCQliZmFfZmN4cF9zZW5kKGZjeHAsIE5VTEwsIHBvcnQtPmZhYnJpYy0+dmZfaWQsIHBvcnQtPmxwX3RhZywKKwkJCSAgICAgIEJGQV9GQUxTRSwgRkNfQ0xBU1NfMywgbGVuLCAmZmNocywgTlVMTCwgTlVMTCwKKwkJCSAgICAgIEZDX01BWF9QRFVTWiwgMCk7CisJfSBlbHNlIHsKKwkJcnBvcnQtPnN0YXRzLmFkaXNjX3JlamVjdGVkKys7CisJCWJmYV9mY3NfcnBvcnRfc2VuZF9sc19yanQocnBvcnQsIHJ4X2ZjaHMsCisJCQkJCSAgRkNfTFNfUkpUX1JTTl9VTkFCTEVfVE9fUEVSRl9DTUQsCisJCQkJCSAgRkNfTFNfUkpUX0VYUF9MT0dJTl9SRVFVSVJFRCk7CisJfQorCit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3Jwb3J0X2hhbF9vbmxpbmUoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQpCit7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0ID0gcnBvcnQtPnBvcnQ7CisJc3RydWN0IGJmYV9ycG9ydF9pbmZvX3MgcnBvcnRfaW5mbzsKKworCXJwb3J0X2luZm8ucGlkID0gcnBvcnQtPnBpZDsKKwlycG9ydF9pbmZvLmxvY2FsX3BpZCA9IHBvcnQtPnBpZDsKKwlycG9ydF9pbmZvLmxwX3RhZyA9IHBvcnQtPmxwX3RhZzsKKwlycG9ydF9pbmZvLnZmX2lkID0gcG9ydC0+ZmFicmljLT52Zl9pZDsKKwlycG9ydF9pbmZvLnZmX2VuID0gcG9ydC0+ZmFicmljLT5pc192ZjsKKwlycG9ydF9pbmZvLmZjX2NsYXNzID0gcnBvcnQtPmZjX2NvczsKKwlycG9ydF9pbmZvLmNpc2MgPSBycG9ydC0+Y2lzYzsKKwlycG9ydF9pbmZvLm1heF9mcm1zeiA9IHJwb3J0LT5tYXhmcnNpemU7CisJYmZhX3Jwb3J0X29ubGluZShycG9ydC0+YmZhX3Jwb3J0LCAmcnBvcnRfaW5mbyk7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3Jwb3J0X2ZjNF9wYXVzZShzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCkKK3sKKwlpZiAoYmZhX2Zjc19wb3J0X2lzX2luaXRpYXRvcihycG9ydC0+cG9ydCkpCisJCWJmYV9mY3NfaXRuaW1fcGF1c2UocnBvcnQtPml0bmltKTsKKworCWlmIChiZmFfZmNzX3BvcnRfaXNfdGFyZ2V0KHJwb3J0LT5wb3J0KSkKKwkJYmZhX2Zjc190aW5fcGF1c2UocnBvcnQtPnRpbik7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3Jwb3J0X2ZjNF9yZXN1bWUoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQpCit7CisJaWYgKGJmYV9mY3NfcG9ydF9pc19pbml0aWF0b3IocnBvcnQtPnBvcnQpKQorCQliZmFfZmNzX2l0bmltX3Jlc3VtZShycG9ydC0+aXRuaW0pOworCisJaWYgKGJmYV9mY3NfcG9ydF9pc190YXJnZXQocnBvcnQtPnBvcnQpKQorCQliZmFfZmNzX3Rpbl9yZXN1bWUocnBvcnQtPnRpbik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICoKK2JmYV9mY3NfcnBvcnRfYWxsb2Moc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LCB3d25fdCBwd3duLCB1MzIgcnBpZCkKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19zICpmY3MgPSBwb3J0LT5mY3M7CisJc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQ7CisJc3RydWN0IGJmYWRfcnBvcnRfcyAqcnBvcnRfZHJ2OworCisJLyoqCisJICogYWxsb2NhdGUgcnBvcnQKKwkgKi8KKwlpZiAoYmZhX2ZjYl9ycG9ydF9hbGxvYyhmY3MtPmJmYWQsICZycG9ydCwgJnJwb3J0X2RydikKKwkgICAgIT0gQkZBX1NUQVRVU19PSykgeworCQliZmFfdHJjKGZjcywgcnBpZCk7CisJCXJldHVybiBOVUxMOworCX0KKworCS8qCisJICogSW5pdGlhbGl6ZSByLXBvcnQKKwkgKi8KKwlycG9ydC0+cG9ydCA9IHBvcnQ7CisJcnBvcnQtPmZjcyA9IGZjczsKKwlycG9ydC0+cnBfZHJ2ID0gcnBvcnRfZHJ2OworCXJwb3J0LT5waWQgPSBycGlkOworCXJwb3J0LT5wd3duID0gcHd3bjsKKworCS8qKgorCSAqIGFsbG9jYXRlIEJGQSBycG9ydAorCSAqLworCXJwb3J0LT5iZmFfcnBvcnQgPSBiZmFfcnBvcnRfY3JlYXRlKHBvcnQtPmZjcy0+YmZhLCBycG9ydCk7CisJaWYgKCFycG9ydC0+YmZhX3Jwb3J0KSB7CisJCWJmYV90cmMoZmNzLCBycGlkKTsKKwkJa2ZyZWUocnBvcnRfZHJ2KTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJLyoqCisJICogYWxsb2NhdGUgRkMtNHMKKwkgKi8KKwliZmFfYXNzZXJ0KGJmYV9mY3NfcG9ydF9pc19pbml0aWF0b3IocG9ydCkgXgorCQkgICBiZmFfZmNzX3BvcnRfaXNfdGFyZ2V0KHBvcnQpKTsKKworCWlmIChiZmFfZmNzX3BvcnRfaXNfaW5pdGlhdG9yKHBvcnQpKSB7CisJCXJwb3J0LT5pdG5pbSA9IGJmYV9mY3NfaXRuaW1fY3JlYXRlKHJwb3J0KTsKKwkJaWYgKCFycG9ydC0+aXRuaW0pIHsKKwkJCWJmYV90cmMoZmNzLCBycGlkKTsKKwkJCWJmYV9ycG9ydF9kZWxldGUocnBvcnQtPmJmYV9ycG9ydCk7CisJCQlrZnJlZShycG9ydF9kcnYpOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKwl9CisKKwlpZiAoYmZhX2Zjc19wb3J0X2lzX3RhcmdldChwb3J0KSkgeworCQlycG9ydC0+dGluID0gYmZhX2Zjc190aW5fY3JlYXRlKHJwb3J0KTsKKwkJaWYgKCFycG9ydC0+dGluKSB7CisJCQliZmFfdHJjKGZjcywgcnBpZCk7CisJCQliZmFfcnBvcnRfZGVsZXRlKHJwb3J0LT5iZmFfcnBvcnQpOworCQkJa2ZyZWUocnBvcnRfZHJ2KTsKKwkJCXJldHVybiBOVUxMOworCQl9CisJfQorCisJYmZhX2Zjc19wb3J0X2FkZF9ycG9ydChwb3J0LCBycG9ydCk7CisKKwliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX3VuaW5pdCk7CisKKwkvKgorCSAqIEluaXRpYWxpemUgdGhlIFJwb3J0IEZlYXR1cmVzKFJQRikgU3ViIE1vZHVsZQorCSAqLworCWlmICghQkZBX0ZDU19QSURfSVNfV0tBKHJwb3J0LT5waWQpKQorCQliZmFfZmNzX3JwZl9pbml0KHJwb3J0KTsKKworCXJldHVybiBycG9ydDsKK30KKworCitzdGF0aWMgdm9pZAorYmZhX2Zjc19ycG9ydF9mcmVlKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0KQoreworCXN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCA9IHJwb3J0LT5wb3J0OworCisJLyoqCisJICogLSBkZWxldGUgRkMtNHMKKwkgKiAtIGRlbGV0ZSBCRkEgcnBvcnQKKwkgKiAtIHJlbW92ZSBmcm9tIHF1ZXVlIG9mIHJwb3J0cworCSAqLworCWlmIChiZmFfZmNzX3BvcnRfaXNfaW5pdGlhdG9yKHBvcnQpKQorCQliZmFfZmNzX2l0bmltX2RlbGV0ZShycG9ydC0+aXRuaW0pOworCisJaWYgKGJmYV9mY3NfcG9ydF9pc190YXJnZXQocG9ydCkpCisJCWJmYV9mY3NfdGluX2RlbGV0ZShycG9ydC0+dGluKTsKKworCWJmYV9ycG9ydF9kZWxldGUocnBvcnQtPmJmYV9ycG9ydCk7CisJYmZhX2Zjc19wb3J0X2RlbF9ycG9ydChwb3J0LCBycG9ydCk7CisJa2ZyZWUocnBvcnQtPnJwX2Rydik7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3Jwb3J0X2Flbl9wb3N0KHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0LAorCQkgICAgICAgZW51bSBiZmFfcnBvcnRfYWVuX2V2ZW50IGV2ZW50LAorCQkgICAgICAgc3RydWN0IGJmYV9ycG9ydF9hZW5fZGF0YV9zICpkYXRhKQoreworCXVuaW9uIGJmYV9hZW5fZGF0YV91IGFlbl9kYXRhOworCXN0cnVjdCBiZmFfbG9nX21vZF9zICpsb2dtb2QgPSBycG9ydC0+ZmNzLT5sb2dtOworCXd3bl90ICAgICAgICAgICBscHd3biA9IGJmYV9mY3NfcG9ydF9nZXRfcHd3bihycG9ydC0+cG9ydCk7CisJd3duX3QgICAgICAgICAgIHJwd3duID0gcnBvcnQtPnB3d247CisJY2hhciAgICAgICAgICAgIGxwd3duX3B0cltCRkFfU1RSSU5HXzMyXTsKKwljaGFyICAgICAgICAgICAgcnB3d25fcHRyW0JGQV9TVFJJTkdfMzJdOworCWNoYXIgICAgICAgICAgICpwcmlvX3N0cltdID0geyAidW5rbm93biIsICJoaWdoIiwgIm1lZGl1bSIsICJsb3ciIH07CisKKwl3d24yc3RyKGxwd3duX3B0ciwgbHB3d24pOworCXd3bjJzdHIocnB3d25fcHRyLCBycHd3bik7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfUlBPUlRfQUVOX09OTElORToKKwkJYmZhX2xvZyhsb2dtb2QsIEJGQV9BRU5fUlBPUlRfT05MSU5FLCBycHd3bl9wdHIsIGxwd3duX3B0cik7CisJCWJyZWFrOworCWNhc2UgQkZBX1JQT1JUX0FFTl9PRkZMSU5FOgorCQliZmFfbG9nKGxvZ21vZCwgQkZBX0FFTl9SUE9SVF9PRkZMSU5FLCBycHd3bl9wdHIsIGxwd3duX3B0cik7CisJCWJyZWFrOworCWNhc2UgQkZBX1JQT1JUX0FFTl9ESVNDT05ORUNUOgorCQliZmFfbG9nKGxvZ21vZCwgQkZBX0FFTl9SUE9SVF9ESVNDT05ORUNULCBycHd3bl9wdHIsIGxwd3duX3B0cik7CisJCWJyZWFrOworCWNhc2UgQkZBX1JQT1JUX0FFTl9RT1NfUFJJTzoKKwkJYWVuX2RhdGEucnBvcnQucHJpdi5xb3MgPSBkYXRhLT5wcml2LnFvczsKKwkJYmZhX2xvZyhsb2dtb2QsIEJGQV9BRU5fUlBPUlRfUU9TX1BSSU8sCisJCQlwcmlvX3N0clthZW5fZGF0YS5ycG9ydC5wcml2LnFvcy5xb3NfcHJpb3JpdHldLAorCQkJcnB3d25fcHRyLCBscHd3bl9wdHIpOworCQlicmVhazsKKwljYXNlIEJGQV9SUE9SVF9BRU5fUU9TX0ZMT1dJRDoKKwkJYWVuX2RhdGEucnBvcnQucHJpdi5xb3MgPSBkYXRhLT5wcml2LnFvczsKKwkJYmZhX2xvZyhsb2dtb2QsIEJGQV9BRU5fUlBPUlRfUU9TX0ZMT1dJRCwKKwkJCWFlbl9kYXRhLnJwb3J0LnByaXYucW9zLnFvc19mbG93X2lkLCBycHd3bl9wdHIsCisJCQlscHd3bl9wdHIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlhZW5fZGF0YS5ycG9ydC52Zl9pZCA9IHJwb3J0LT5wb3J0LT5mYWJyaWMtPnZmX2lkOworCWFlbl9kYXRhLnJwb3J0LnBwd3duID0KKwkJYmZhX2Zjc19wb3J0X2dldF9wd3duKGJmYV9mY3NfZ2V0X2Jhc2VfcG9ydChycG9ydC0+ZmNzKSk7CisJYWVuX2RhdGEucnBvcnQubHB3d24gPSBscHd3bjsKKwlhZW5fZGF0YS5ycG9ydC5ycHd3biA9IHJwd3duOworfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19ycG9ydF9vbmxpbmVfYWN0aW9uKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0KQoreworCXN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCA9IHJwb3J0LT5wb3J0OworCisJcnBvcnQtPnN0YXRzLm9ubGluZXMrKzsKKworCWlmIChiZmFfZmNzX3BvcnRfaXNfaW5pdGlhdG9yKHBvcnQpKSB7CisJCWJmYV9mY3NfaXRuaW1fcnBvcnRfb25saW5lKHJwb3J0LT5pdG5pbSk7CisJCWlmICghQkZBX0ZDU19QSURfSVNfV0tBKHJwb3J0LT5waWQpKQorCQkJYmZhX2Zjc19ycGZfcnBvcnRfb25saW5lKHJwb3J0KTsKKwl9OworCisJaWYgKGJmYV9mY3NfcG9ydF9pc190YXJnZXQocG9ydCkpCisJCWJmYV9mY3NfdGluX3Jwb3J0X29ubGluZShycG9ydC0+dGluKTsKKworCS8qCisJICogRG9uJ3QgcG9zdCBldmVudHMgZm9yIHdlbGwga25vd24gYWRkcmVzc2VzCisJICovCisJaWYgKCFCRkFfRkNTX1BJRF9JU19XS0EocnBvcnQtPnBpZCkpCisJCWJmYV9mY3NfcnBvcnRfYWVuX3Bvc3QocnBvcnQsIEJGQV9SUE9SVF9BRU5fT05MSU5FLCBOVUxMKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcnBvcnRfb2ZmbGluZV9hY3Rpb24oc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQpCit7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0ID0gcnBvcnQtPnBvcnQ7CisKKwlycG9ydC0+c3RhdHMub2ZmbGluZXMrKzsKKworCS8qCisJICogRG9uJ3QgcG9zdCBldmVudHMgZm9yIHdlbGwga25vd24gYWRkcmVzc2VzCisJICovCisJaWYgKCFCRkFfRkNTX1BJRF9JU19XS0EocnBvcnQtPnBpZCkpIHsKKwkJaWYgKGJmYV9mY3NfcG9ydF9pc19vbmxpbmUocnBvcnQtPnBvcnQpID09IEJGQV9UUlVFKSB7CisJCQliZmFfZmNzX3Jwb3J0X2Flbl9wb3N0KHJwb3J0LCBCRkFfUlBPUlRfQUVOX0RJU0NPTk5FQ1QsCisJCQkJCSAgICAgICBOVUxMKTsKKwkJfSBlbHNlIHsKKwkJCWJmYV9mY3NfcnBvcnRfYWVuX3Bvc3QocnBvcnQsIEJGQV9SUE9SVF9BRU5fT0ZGTElORSwKKwkJCQkJICAgICAgIE5VTEwpOworCQl9CisJfQorCisJaWYgKGJmYV9mY3NfcG9ydF9pc19pbml0aWF0b3IocG9ydCkpIHsKKwkJYmZhX2Zjc19pdG5pbV9ycG9ydF9vZmZsaW5lKHJwb3J0LT5pdG5pbSk7CisJCWlmICghQkZBX0ZDU19QSURfSVNfV0tBKHJwb3J0LT5waWQpKQorCQkJYmZhX2Zjc19ycGZfcnBvcnRfb2ZmbGluZShycG9ydCk7CisJfQorCisJaWYgKGJmYV9mY3NfcG9ydF9pc190YXJnZXQocG9ydCkpCisJCWJmYV9mY3NfdGluX3Jwb3J0X29mZmxpbmUocnBvcnQtPnRpbik7Cit9CisKKy8qKgorICogVXBkYXRlIHJwb3J0IHBhcmFtZXRlcnMgZnJvbSBQTE9HSSBvciBQTE9HSSBhY2NlcHQuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX3Jwb3J0X3VwZGF0ZShzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCwgc3RydWN0IGZjX2xvZ2lfcyAqcGxvZ2kpCit7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0ID0gcnBvcnQtPnBvcnQ7CisKKwkvKioKKwkgKiAtIHBvcnQgbmFtZQorCSAqIC0gbm9kZSBuYW1lCisJICovCisJcnBvcnQtPnB3d24gPSBwbG9naS0+cG9ydF9uYW1lOworCXJwb3J0LT5ud3duID0gcGxvZ2ktPm5vZGVfbmFtZTsKKworCS8qKgorCSAqIC0gY2xhc3Mgb2Ygc2VydmljZQorCSAqLworCXJwb3J0LT5mY19jb3MgPSAwOworCWlmIChwbG9naS0+Y2xhc3MzLmNsYXNzX3ZhbGlkKQorCQlycG9ydC0+ZmNfY29zID0gRkNfQ0xBU1NfMzsKKworCWlmIChwbG9naS0+Y2xhc3MyLmNsYXNzX3ZhbGlkKQorCQlycG9ydC0+ZmNfY29zIHw9IEZDX0NMQVNTXzI7CisKKwkvKioKKwkgKiAtIENJU0MKKwkgKiAtIE1BWCByZWNlaXZlIGZyYW1lIHNpemUKKwkgKi8KKwlycG9ydC0+Y2lzYyA9IHBsb2dpLT5jc3AuY2lzYzsKKwlycG9ydC0+bWF4ZnJzaXplID0gYmZhX29zX250b2hzKHBsb2dpLT5jbGFzczMucnhzeik7CisKKwliZmFfdHJjKHBvcnQtPmZjcywgYmZhX29zX250b2hzKHBsb2dpLT5jc3AuYmJjcmVkKSk7CisJYmZhX3RyYyhwb3J0LT5mY3MsIHBvcnQtPmZhYnJpYy0+YmJfY3JlZGl0KTsKKwkvKioKKwkgKiBEaXJlY3QgQXR0YWNoIFAyUCBtb2RlIDoKKwkgKiBUaGlzIGlzIHRvIGhhbmRsZSBhIGJ1ZyAoMjMzNDc2KSBpbiBJQk0gdGFyZ2V0cyBpbiBEaXJlY3QgQXR0YWNoCisJICogTW9kZS4gQmFzaWNhbGx5LCBpbiBGTE9HSSBBY2NlcHQgdGhlIHRhcmdldCB3b3VsZCBoYXZlIGVycm9uZW91c2x5CisJICogc2V0IHRoZSBCQiBDcmVkaXQgdG8gdGhlIHZhbHVlIHVzZWQgaW4gdGhlIEZMT0dJIHNlbnQgYnkgdGhlIEhCQS4KKwkgKiBJdCB1c2VzIHRoZSBjb3JyZWN0IHZhbHVlIChpdHMgb3duIEJCIGNyZWRpdCkgaW4gUExPR0kuCisJICovCisJaWYgKCghYmZhX2Zjc19mYWJyaWNfaXNfc3dpdGNoZWQocG9ydC0+ZmFicmljKSkKKwkgICAgJiYgKGJmYV9vc19udG9ocyhwbG9naS0+Y3NwLmJiY3JlZCkgPCBwb3J0LT5mYWJyaWMtPmJiX2NyZWRpdCkpIHsKKworCQliZmFfdHJjKHBvcnQtPmZjcywgYmZhX29zX250b2hzKHBsb2dpLT5jc3AuYmJjcmVkKSk7CisJCWJmYV90cmMocG9ydC0+ZmNzLCBwb3J0LT5mYWJyaWMtPmJiX2NyZWRpdCk7CisKKwkJcG9ydC0+ZmFicmljLT5iYl9jcmVkaXQgPSBiZmFfb3NfbnRvaHMocGxvZ2ktPmNzcC5iYmNyZWQpOworCQliZmFfcHBvcnRfc2V0X3R4X2JiY3JlZGl0KHBvcnQtPmZjcy0+YmZhLAorCQkJCQkgIHBvcnQtPmZhYnJpYy0+YmJfY3JlZGl0KTsKKwl9CisKK30KKworLyoqCisgKiAgIENhbGxlZCB0byBoYW5kbGUgTE9HTyByZWNlaXZlZCBmcm9tIGFuIGV4aXN0aW5nIHJlbW90ZSBwb3J0LgorICovCitzdGF0aWMgdm9pZAorYmZhX2Zjc19ycG9ydF9wcm9jZXNzX2xvZ28oc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQsIHN0cnVjdCBmY2hzX3MgKmZjaHMpCit7CisJcnBvcnQtPnJlcGx5X294aWQgPSBmY2hzLT5veF9pZDsKKwliZmFfdHJjKHJwb3J0LT5mY3MsIHJwb3J0LT5yZXBseV9veGlkKTsKKworCXJwb3J0LT5zdGF0cy5sb2dvX3JjdmQrKzsKKwliZmFfc21fc2VuZF9ldmVudChycG9ydCwgUlBTTV9FVkVOVF9MT0dPX1JDVkQpOworfQorCisKKworLyoqCisgKiAgZmNzX3Jwb3J0X3B1YmxpYyBGQ1MgcnBvcnQgcHVibGljIGludGVyZmFjZXMKKyAqLworCisvKioKKyAqIAlDYWxsZWQgYnkgYnBvcnQvdnBvcnQgdG8gY3JlYXRlIGEgcmVtb3RlIHBvcnQgaW5zdGFuY2UgZm9yIGEgZGlzY292ZXJlZAorICogCXJlbW90ZSBkZXZpY2UuCisgKgorICogQHBhcmFtW2luXSBwb3J0CS0gYmFzZSBwb3J0IG9yIHZwb3J0CisgKiBAcGFyYW1baW5dIHJwaWQJLSByZW1vdGUgcG9ydCBJRAorICoKKyAqIEByZXR1cm4gTm9uZQorICovCitzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICoKK2JmYV9mY3NfcnBvcnRfY3JlYXRlKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCwgdTMyIHJwaWQpCit7CisJc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQ7CisKKwliZmFfdHJjKHBvcnQtPmZjcywgcnBpZCk7CisJcnBvcnQgPSBiZmFfZmNzX3Jwb3J0X2FsbG9jKHBvcnQsIFdXTl9OVUxMLCBycGlkKTsKKwlpZiAoIXJwb3J0KQorCQlyZXR1cm4gTlVMTDsKKworCWJmYV9zbV9zZW5kX2V2ZW50KHJwb3J0LCBSUFNNX0VWRU5UX1BMT0dJX1NFTkQpOworCXJldHVybiBycG9ydDsKK30KKworLyoqCisgKiBDYWxsZWQgdG8gY3JlYXRlIGEgcnBvcnQgZm9yIHdoaWNoIG9ubHkgdGhlIHd3biBpcyBrbm93bi4KKyAqCisgKiBAcGFyYW1baW5dIHBvcnQJLSBiYXNlIHBvcnQKKyAqIEBwYXJhbVtpbl0gcnB3d24JLSByZW1vdGUgcG9ydCB3d24KKyAqCisgKiBAcmV0dXJuIE5vbmUKKyAqLworc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqCitiZmFfZmNzX3Jwb3J0X2NyZWF0ZV9ieV93d24oc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LCB3d25fdCBycHd3bikKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydDsKKworCWJmYV90cmMocG9ydC0+ZmNzLCBycHd3bik7CisJcnBvcnQgPSBiZmFfZmNzX3Jwb3J0X2FsbG9jKHBvcnQsIHJwd3duLCAwKTsKKwlpZiAoIXJwb3J0KQorCQlyZXR1cm4gTlVMTDsKKworCWJmYV9zbV9zZW5kX2V2ZW50KHJwb3J0LCBSUFNNX0VWRU5UX0FERFJFU1NfRElTQyk7CisJcmV0dXJuIHJwb3J0OworfQorCisvKioKKyAqIENhbGxlZCBieSBicG9ydCBpbiBwcml2YXRlIGxvb3AgdG9wb2xvZ3kgdG8gaW5kaWNhdGUgdGhhdCBhCisgKiBycG9ydCBoYXMgYmVlbiBkaXNjb3ZlcmVkIGFuZCBwbG9naSBoYXMgYmVlbiBjb21wbGV0ZWQuCisgKgorICogQHBhcmFtW2luXSBwb3J0CS0gYmFzZSBwb3J0IG9yIHZwb3J0CisgKiBAcGFyYW1baW5dIHJwaWQJLSByZW1vdGUgcG9ydCBJRAorICovCit2b2lkCitiZmFfZmNzX3Jwb3J0X3N0YXJ0KHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCwgc3RydWN0IGZjaHNfcyAqZmNocywKKwkJCXN0cnVjdCBmY19sb2dpX3MgKnBsb2dpKQoreworCXN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0OworCisJcnBvcnQgPSBiZmFfZmNzX3Jwb3J0X2FsbG9jKHBvcnQsIFdXTl9OVUxMLCBmY2hzLT5zX2lkKTsKKwlpZiAoIXJwb3J0KQorCQlyZXR1cm47CisKKwliZmFfZmNzX3Jwb3J0X3VwZGF0ZShycG9ydCwgcGxvZ2kpOworCisJYmZhX3NtX3NlbmRfZXZlbnQocnBvcnQsIFJQU01fRVZFTlRfUExPR0lfQ09NUCk7Cit9CisKKy8qKgorICogICBDYWxsZWQgYnkgYnBvcnQvdnBvcnQgdG8gaGFuZGxlIFBMT0dJIHJlY2VpdmVkIGZyb20gYSBuZXcgcmVtb3RlIHBvcnQuCisgKiAgIElmIGFuIGV4aXN0aW5nIHJwb3J0IGRvZXMgYSBwbG9naSwgaXQgd2lsbCBiZSBoYW5kbGVkIHNlcGFyYXRlbHkuCisgKi8KK3ZvaWQKK2JmYV9mY3NfcnBvcnRfcGxvZ2lfY3JlYXRlKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCwgc3RydWN0IGZjaHNfcyAqZmNocywKKwkJCSAgIHN0cnVjdCBmY19sb2dpX3MgKnBsb2dpKQoreworCXN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0OworCisJcnBvcnQgPSBiZmFfZmNzX3Jwb3J0X2FsbG9jKHBvcnQsIHBsb2dpLT5wb3J0X25hbWUsIGZjaHMtPnNfaWQpOworCWlmICghcnBvcnQpCisJCXJldHVybjsKKworCWJmYV9mY3NfcnBvcnRfdXBkYXRlKHJwb3J0LCBwbG9naSk7CisKKwlycG9ydC0+cmVwbHlfb3hpZCA9IGZjaHMtPm94X2lkOworCWJmYV90cmMocnBvcnQtPmZjcywgcnBvcnQtPnJlcGx5X294aWQpOworCisJcnBvcnQtPnN0YXRzLnBsb2dpX3JjdmQrKzsKKwliZmFfc21fc2VuZF9ldmVudChycG9ydCwgUlBTTV9FVkVOVF9QTE9HSV9SQ1ZEKTsKK30KKworc3RhdGljIGludAord3duX2NvbXBhcmUod3duX3Qgd3duMSwgd3duX3Qgd3duMikKK3sKKwl1OCAgICAgICAgKmIxID0gKHU4ICopICZ3d24xOworCXU4ICAgICAgICAqYjIgPSAodTggKikgJnd3bjI7CisJaW50ICAgICAgICAgICAgIGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKHd3bl90KTsgaSsrKSB7CisJCWlmIChiMVtpXSA8IGIyW2ldKQorCQkJcmV0dXJuIC0xOworCQlpZiAoYjFbaV0gPiBiMltpXSkKKwkJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiAgIENhbGxlZCBieSBicG9ydC92cG9ydCB0byBoYW5kbGUgUExPR0kgcmVjZWl2ZWQgZnJvbSBhbiBleGlzdGluZworICogCSByZW1vdGUgcG9ydC4KKyAqLwordm9pZAorYmZhX2Zjc19ycG9ydF9wbG9naShzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCwgc3RydWN0IGZjaHNfcyAqcnhfZmNocywKKwkJICAgIHN0cnVjdCBmY19sb2dpX3MgKnBsb2dpKQoreworCS8qKgorCSAqIEB0b2RvIEhhbmRsZSBQMlAgYW5kIGluaXRpYXRvci1pbml0aWF0b3IuCisJICovCisKKwliZmFfZmNzX3Jwb3J0X3VwZGF0ZShycG9ydCwgcGxvZ2kpOworCisJcnBvcnQtPnJlcGx5X294aWQgPSByeF9mY2hzLT5veF9pZDsKKwliZmFfdHJjKHJwb3J0LT5mY3MsIHJwb3J0LT5yZXBseV9veGlkKTsKKworCS8qKgorCSAqIEluIFN3aXRjaGVkIGZhYnJpYyB0b3BvbG9neSwKKwkgKiBQTE9HSSB0byBlYWNoIG90aGVyLiBJZiBvdXIgcHd3biBpcyBzbWFsbGVyLCBpZ25vcmUgaXQsCisJICogaWYgaXQgaXMgbm90IGEgd2VsbCBrbm93biBhZGRyZXNzLgorCSAqIElmIHRoZSBsaW5rIHRvcG9sb2d5IGlzIE4yTiwKKwkgKiB0aGlzIFBsb2dpIHNob3VsZCBiZSBhY2NlcHRlZC4KKwkgKi8KKwlpZiAoKHd3bl9jb21wYXJlKHJwb3J0LT5wb3J0LT5wb3J0X2NmZy5wd3duLCBycG9ydC0+cHd3bikgPT0gLTEpCisJICAgICYmIChiZmFfZmNzX2ZhYnJpY19pc19zd2l0Y2hlZChycG9ydC0+cG9ydC0+ZmFicmljKSkKKwkgICAgJiYgKCFCRkFfRkNTX1BJRF9JU19XS0EocnBvcnQtPnBpZCkpKSB7CisJCWJmYV90cmMocnBvcnQtPmZjcywgcnBvcnQtPnBpZCk7CisJCXJldHVybjsKKwl9CisKKwlycG9ydC0+c3RhdHMucGxvZ2lfcmN2ZCsrOworCWJmYV9zbV9zZW5kX2V2ZW50KHJwb3J0LCBSUFNNX0VWRU5UX1BMT0dJX1JDVkQpOworfQorCisvKioKKyAqIENhbGxlZCBieSBicG9ydC92cG9ydCB0byBkZWxldGUgYSByZW1vdGUgcG9ydCBpbnN0YW5jZS4KKyAqCisqIFJwb3J0IGRlbGV0ZSBpcyBjYWxsZWQgdW5kZXIgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICogCQktIHZwb3J0IGlzIGRlbGV0ZWQKKyAqIAkJLSB2ZiBpcyBkZWxldGVkCisgKiAJCS0gZXhwbGljaXQgcmVxdWVzdCBmcm9tIE9TIHRvIGRlbGV0ZSBycG9ydCAodm13YXJlKQorICovCit2b2lkCitiZmFfZmNzX3Jwb3J0X2RlbGV0ZShzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCkKK3sKKwliZmFfc21fc2VuZF9ldmVudChycG9ydCwgUlBTTV9FVkVOVF9ERUxFVEUpOworfQorCisvKioKKyAqIENhbGxlZCBieSBicG9ydC92cG9ydCB0byAgd2hlbiBhIHRhcmdldCBnb2VzIG9mZmxpbmUuCisgKgorICovCit2b2lkCitiZmFfZmNzX3Jwb3J0X29mZmxpbmUoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQpCit7CisJYmZhX3NtX3NlbmRfZXZlbnQocnBvcnQsIFJQU01fRVZFTlRfTE9HT19JTVApOworfQorCisvKioKKyAqIENhbGxlZCBieSBicG9ydCBpbiBuMm4gd2hlbiBhIHRhcmdldCAoYXR0YWNoZWQgcG9ydCkgYmVjb21lcyBvbmxpbmUuCisgKgorICovCit2b2lkCitiZmFfZmNzX3Jwb3J0X29ubGluZShzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCkKK3sKKwliZmFfc21fc2VuZF9ldmVudChycG9ydCwgUlBTTV9FVkVOVF9QTE9HSV9TRU5EKTsKK30KKworLyoqCisgKiAgIENhbGxlZCBieSBicG9ydC92cG9ydCB0byBub3RpZnkgU0NOIGZvciB0aGUgcmVtb3RlIHBvcnQKKyAqLwordm9pZAorYmZhX2Zjc19ycG9ydF9zY24oc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQpCit7CisKKwlycG9ydC0+c3RhdHMucnNjbnMrKzsKKwliZmFfc21fc2VuZF9ldmVudChycG9ydCwgUlBTTV9FVkVOVF9TQ04pOworfQorCisvKioKKyAqICAgQ2FsbGVkIGJ5ICBmY3BpbSB0byBub3RpZnkgdGhhdCB0aGUgSVROIGNsZWFudXAgaXMgZG9uZS4KKyAqLwordm9pZAorYmZhX2Zjc19ycG9ydF9pdG5pbV9hY2soc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQpCit7CisJYmZhX3NtX3NlbmRfZXZlbnQocnBvcnQsIFJQU01fRVZFTlRfRkM0X09GRkxJTkUpOworfQorCisvKioKKyAqICAgQ2FsbGVkIGJ5IGZjcHRtIHRvIG5vdGlmeSB0aGF0IHRoZSBJVE4gY2xlYW51cCBpcyBkb25lLgorICovCit2b2lkCitiZmFfZmNzX3Jwb3J0X3Rpbl9hY2soc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQpCit7CisJYmZhX3NtX3NlbmRfZXZlbnQocnBvcnQsIFJQU01fRVZFTlRfRkM0X09GRkxJTkUpOworfQorCisvKioKKyAqICAgICBUaGlzIHJvdXRpbmUgQkZBIGNhbGxiYWNrIGZvciBiZmFfcnBvcnRfb25saW5lKCkgY2FsbC4KKyAqCisgKiAJcGFyYW1baW5dIAljYl9hcmcJLSAgcnBvcnQgc3RydWN0LgorICoKKyAqIAlyZXR1cm4KKyAqIAkJdm9pZAorICoKKyogCVNwZWNpYWwgQ29uc2lkZXJhdGlvbnM6CisgKgorICogCW5vdGUKKyAqLwordm9pZAorYmZhX2NiX3Jwb3J0X29ubGluZSh2b2lkICpjYmFyZykKK3sKKworCXN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0ID0gKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKiljYmFyZzsKKworCWJmYV90cmMocnBvcnQtPmZjcywgcnBvcnQtPnB3d24pOworCWJmYV9zbV9zZW5kX2V2ZW50KHJwb3J0LCBSUFNNX0VWRU5UX0hDQl9PTkxJTkUpOworfQorCisvKioKKyAqICAgICBUaGlzIHJvdXRpbmUgQkZBIGNhbGxiYWNrIGZvciBiZmFfcnBvcnRfb2ZmbGluZSgpIGNhbGwuCisgKgorICogCXBhcmFtW2luXSAJcnBvcnQgCS0KKyAqCisgKiAJcmV0dXJuCisgKiAJCXZvaWQKKyAqCisgKiAJU3BlY2lhbCBDb25zaWRlcmF0aW9uczoKKyAqCisgKiAJbm90ZQorICovCit2b2lkCitiZmFfY2JfcnBvcnRfb2ZmbGluZSh2b2lkICpjYmFyZykKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCA9IChzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICopY2Jhcmc7CisKKwliZmFfdHJjKHJwb3J0LT5mY3MsIHJwb3J0LT5wd3duKTsKKwliZmFfc21fc2VuZF9ldmVudChycG9ydCwgUlBTTV9FVkVOVF9IQ0JfT0ZGTElORSk7Cit9CisKKy8qKgorICogVGhpcyByb3V0aW5lIGlzIGEgc3RhdGljIEJGQSBjYWxsYmFjayB3aGVuIHRoZXJlIGlzIGEgUW9TIGZsb3dfaWQKKyAqIGNoYW5nZSBub3RpZmljYXRpb24KKyAqCisgKiBAcGFyYW1baW5dIAlycG9ydCAJLQorICoKKyAqIEByZXR1cm4gIAl2b2lkCisgKgorICogU3BlY2lhbCBDb25zaWRlcmF0aW9uczoKKyAqCisgKiBAbm90ZQorICovCit2b2lkCitiZmFfY2JfcnBvcnRfcW9zX3Njbl9mbG93aWQodm9pZCAqY2JhcmcsCisJCQkgICAgc3RydWN0IGJmYV9ycG9ydF9xb3NfYXR0cl9zIG9sZF9xb3NfYXR0ciwKKwkJCSAgICBzdHJ1Y3QgYmZhX3Jwb3J0X3Fvc19hdHRyX3MgbmV3X3Fvc19hdHRyKQoreworCXN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0ID0gKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKiljYmFyZzsKKwlzdHJ1Y3QgYmZhX3Jwb3J0X2Flbl9kYXRhX3MgYWVuX2RhdGE7CisKKwliZmFfdHJjKHJwb3J0LT5mY3MsIHJwb3J0LT5wd3duKTsKKwlhZW5fZGF0YS5wcml2LnFvcyA9IG5ld19xb3NfYXR0cjsKKwliZmFfZmNzX3Jwb3J0X2Flbl9wb3N0KHJwb3J0LCBCRkFfUlBPUlRfQUVOX1FPU19GTE9XSUQsICZhZW5fZGF0YSk7Cit9CisKKy8qKgorICogVGhpcyByb3V0aW5lIGlzIGEgc3RhdGljIEJGQSBjYWxsYmFjayB3aGVuIHRoZXJlIGlzIGEgUW9TIHByaW9yaXR5CisgKiBjaGFuZ2Ugbm90aWZpY2F0aW9uCisgKgorICogQHBhcmFtW2luXSAJcnBvcnQgCS0KKyAqCisgKiBAcmV0dXJuIAl2b2lkCisgKgorICogU3BlY2lhbCBDb25zaWRlcmF0aW9uczoKKyAqCisgKiBAbm90ZQorICovCit2b2lkCitiZmFfY2JfcnBvcnRfcW9zX3Njbl9wcmlvKHZvaWQgKmNiYXJnLCBzdHJ1Y3QgYmZhX3Jwb3J0X3Fvc19hdHRyX3Mgb2xkX3Fvc19hdHRyLAorCQkJICBzdHJ1Y3QgYmZhX3Jwb3J0X3Fvc19hdHRyX3MgbmV3X3Fvc19hdHRyKQoreworCXN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0ID0gKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKiljYmFyZzsKKwlzdHJ1Y3QgYmZhX3Jwb3J0X2Flbl9kYXRhX3MgYWVuX2RhdGE7CisKKwliZmFfdHJjKHJwb3J0LT5mY3MsIHJwb3J0LT5wd3duKTsKKwlhZW5fZGF0YS5wcml2LnFvcyA9IG5ld19xb3NfYXR0cjsKKwliZmFfZmNzX3Jwb3J0X2Flbl9wb3N0KHJwb3J0LCBCRkFfUlBPUlRfQUVOX1FPU19QUklPLCAmYWVuX2RhdGEpOworfQorCisvKioKKyAqIAkJQ2FsbGVkIHRvIHByb2Nlc3MgYW55IHVuc29saWN0ZWQgZnJhbWVzIGZyb20gdGhpcyByZW1vdGUgcG9ydAorICovCit2b2lkCitiZmFfZmNzX3Jwb3J0X2xvZ29faW1wKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0KQoreworCWJmYV9zbV9zZW5kX2V2ZW50KHJwb3J0LCBSUFNNX0VWRU5UX0xPR09fSU1QKTsKK30KKworLyoqCisgKiAJCUNhbGxlZCB0byBwcm9jZXNzIGFueSB1bnNvbGljdGVkIGZyYW1lcyBmcm9tIHRoaXMgcmVtb3RlIHBvcnQKKyAqLwordm9pZAorYmZhX2Zjc19ycG9ydF91Zl9yZWN2KHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0LCBzdHJ1Y3QgZmNoc19zICpmY2hzLAorCQkJdTE2IGxlbikKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQgPSBycG9ydC0+cG9ydDsKKwlzdHJ1Y3QgZmNfZWxzX2NtZF9zICAgKmVsc19jbWQ7CisKKwliZmFfdHJjKHJwb3J0LT5mY3MsIGZjaHMtPnNfaWQpOworCWJmYV90cmMocnBvcnQtPmZjcywgZmNocy0+ZF9pZCk7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBmY2hzLT50eXBlKTsKKworCWlmIChmY2hzLT50eXBlICE9IEZDX1RZUEVfRUxTKQorCQlyZXR1cm47CisKKwllbHNfY21kID0gKHN0cnVjdCBmY19lbHNfY21kX3MgKikgKGZjaHMgKyAxKTsKKworCWJmYV90cmMocnBvcnQtPmZjcywgZWxzX2NtZC0+ZWxzX2NvZGUpOworCisJc3dpdGNoIChlbHNfY21kLT5lbHNfY29kZSkgeworCWNhc2UgRkNfRUxTX0xPR086CisJCWJmYV9mY3NfcnBvcnRfcHJvY2Vzc19sb2dvKHJwb3J0LCBmY2hzKTsKKwkJYnJlYWs7CisKKwljYXNlIEZDX0VMU19BRElTQzoKKwkJYmZhX2Zjc19ycG9ydF9wcm9jZXNzX2FkaXNjKHJwb3J0LCBmY2hzLCBsZW4pOworCQlicmVhazsKKworCWNhc2UgRkNfRUxTX1BSTE86CisJCWlmIChiZmFfZmNzX3BvcnRfaXNfaW5pdGlhdG9yKHBvcnQpKQorCQkJYmZhX2Zjc19mY3BpbV91Zl9yZWN2KHJwb3J0LT5pdG5pbSwgZmNocywgbGVuKTsKKworCQlpZiAoYmZhX2Zjc19wb3J0X2lzX3RhcmdldChwb3J0KSkKKwkJCWJmYV9mY3NfZmNwdG1fdWZfcmVjdihycG9ydC0+dGluLCBmY2hzLCBsZW4pOworCQlicmVhazsKKworCWNhc2UgRkNfRUxTX1BSTEk6CisJCWJmYV9mY3NfcnBvcnRfcHJvY2Vzc19wcmxpKHJwb3J0LCBmY2hzLCBsZW4pOworCQlicmVhazsKKworCWNhc2UgRkNfRUxTX1JQU0M6CisJCWJmYV9mY3NfcnBvcnRfcHJvY2Vzc19ycHNjKHJwb3J0LCBmY2hzLCBsZW4pOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9mY3NfcnBvcnRfc2VuZF9sc19yanQocnBvcnQsIGZjaHMsCisJCQkJCSAgRkNfTFNfUkpUX1JTTl9DTURfTk9UX1NVUFAsCisJCQkJCSAgRkNfTFNfUkpUX0VYUF9OT19BRERMX0lORk8pOworCQlicmVhazsKKwl9Cit9CisKKy8qCisgKiBTZW5kIGEgTFMgcmVqZWN0CisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX3Jwb3J0X3NlbmRfbHNfcmp0KHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0LCBzdHJ1Y3QgZmNoc19zICpyeF9mY2hzLAorCQkJICB1OCByZWFzb25fY29kZSwgdTggcmVhc29uX2NvZGVfZXhwbCkKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQgPSBycG9ydC0+cG9ydDsKKwlzdHJ1Y3QgZmNoc19zICAgICAgICAgIGZjaHM7CisJc3RydWN0IGJmYV9mY3hwX3MgKmZjeHA7CisJaW50ICAgICAgICAgICAgIGxlbjsKKworCWJmYV90cmMocnBvcnQtPmZjcywgcnhfZmNocy0+c19pZCk7CisKKwlmY3hwID0gYmZhX2Zjc19mY3hwX2FsbG9jKHJwb3J0LT5mY3MpOworCWlmICghZmN4cCkKKwkJcmV0dXJuOworCisJbGVuID0gZmNfbHNfcmp0X2J1aWxkKCZmY2hzLCBiZmFfZmN4cF9nZXRfcmVxYnVmKGZjeHApLCByeF9mY2hzLT5zX2lkLAorCQkJICAgICAgYmZhX2Zjc19wb3J0X2dldF9mY2lkKHBvcnQpLCByeF9mY2hzLT5veF9pZCwKKwkJCSAgICAgIHJlYXNvbl9jb2RlLCByZWFzb25fY29kZV9leHBsKTsKKworCWJmYV9mY3hwX3NlbmQoZmN4cCwgTlVMTCwgcG9ydC0+ZmFicmljLT52Zl9pZCwgcG9ydC0+bHBfdGFnLCBCRkFfRkFMU0UsCisJCSAgICAgIEZDX0NMQVNTXzMsIGxlbiwgJmZjaHMsIE5VTEwsIE5VTEwsIEZDX01BWF9QRFVTWiwgMCk7Cit9CisKKy8qKgorICogICBNb2R1bGUgaW5pdGlhbGl6YXRpb24KKyAqLwordm9pZAorYmZhX2Zjc19ycG9ydF9tb2Rpbml0KHN0cnVjdCBiZmFfZmNzX3MgKmZjcykKK3sKK30KKworLyoqCisgKiAgIE1vZHVsZSBjbGVhbnVwCisgKi8KK3ZvaWQKK2JmYV9mY3NfcnBvcnRfbW9kZXhpdChzdHJ1Y3QgYmZhX2Zjc19zICpmY3MpCit7CisJYmZhX2Zjc19tb2RleGl0X2NvbXAoZmNzKTsKK30KKworLyoqCisgKiBSZXR1cm4gc3RhdGUgb2YgcnBvcnQuCisgKi8KK2ludAorYmZhX2Zjc19ycG9ydF9nZXRfc3RhdGUoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQpCit7CisJcmV0dXJuIGJmYV9zbV90b19zdGF0ZShycG9ydF9zbV90YWJsZSwgcnBvcnQtPnNtKTsKK30KKworLyoqCisgKiAJCSBDYWxsZWQgYnkgdGhlIERyaXZlciB0byBzZXQgcnBvcnQgZGVsZXRlL2FnZW91dCB0aW1lb3V0CisgKgorICogCXBhcmFtW2luXQkJcnBvcnQgdGltZW91dCB2YWx1ZSBpbiBzZWNvbmRzLgorICoKKyAqIAlyZXR1cm4gTm9uZQorICovCit2b2lkCitiZmFfZmNzX3Jwb3J0X3NldF9kZWxfdGltZW91dCh1OCBycG9ydF90bW8pCit7CisJLyoKKwkgKiBjb252ZXJ0IHRvIE1pbGxpc2VjcworCSAqLworCWlmIChycG9ydF90bW8gPiAwKQorCQliZmFfZmNzX3Jwb3J0X2RlbF90aW1lb3V0ID0gcnBvcnRfdG1vICogMTAwMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvcnBvcnRfYXBpLmMgYi9kcml2ZXJzL3Njc2kvYmZhL3Jwb3J0X2FwaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkYWUxNzcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL3Jwb3J0X2FwaS5jCkBAIC0wLDAgKzEsMTgwIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaW5jbHVkZSA8YmZhLmg+CisjaW5jbHVkZSA8YmZhX3N2Yy5oPgorI2luY2x1ZGUgImZjc192cG9ydC5oIgorI2luY2x1ZGUgImZjc19scG9ydC5oIgorI2luY2x1ZGUgImZjc19ycG9ydC5oIgorI2luY2x1ZGUgImZjc190cmNtb2QuaCIKKworQkZBX1RSQ19GSUxFKEZDUywgUlBPUlRfQVBJKTsKKworLyoqCisgKiAgcnBvcnRfYXBpLmMgUmVtb3RlIHBvcnQgaW1wbGVtZW50YXRpb24uCisgKi8KKworLyoqCisgKiAgZmNzX3Jwb3J0X2FwaSBGQ1MgcnBvcnQgQVBJLgorICovCisKKy8qKgorICogCURpcmVjdCBBUEkgdG8gYWRkIGEgdGFyZ2V0IGJ5IHBvcnQgd3duLiBUaGlzIGludGVyZmFjZSBpcyB1c2VkLCBmb3IKKyAqCWV4YW1wbGUsIGJ5IGJpb3Mgd2hlbiB0YXJnZXQgcHd3biBpcyBrbm93biBmcm9tIGJvb3QgbHVuIGNvbmZpZ3VyYXRpb24uCisgKi8KK2JmYV9zdGF0dXNfdAorYmZhX2Zjc19ycG9ydF9hZGQoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LCB3d25fdCAqcHd3biwKKwkJCXN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0LAorCQkJc3RydWN0IGJmYWRfcnBvcnRfcyAqcnBvcnRfZHJ2KQoreworCWJmYV90cmMocG9ydC0+ZmNzLCAqcHd3bik7CisKKwlyZXR1cm4gQkZBX1NUQVRVU19PSzsKK30KKworLyoqCisgKglEaXJlY3QgQVBJIHRvIHJlbW92ZSBhIHRhcmdldCBhbmQgaXRzIGFzc29jaWF0ZWQgcmVzb3VyY2VzLiBUaGlzCisgKglpbnRlcmZhY2UgaXMgdXNlZCwgZm9yIGV4YW1wbGUsIGJ5IHZtd2FyZSBkcml2ZXIgdG8gcmVtb3ZlIHRhcmdldAorICoJcG9ydHMgZnJvbSB0aGUgdGFyZ2V0IGxpc3QgZm9yIGEgVk0uCisgKi8KK2JmYV9zdGF0dXNfdAorYmZhX2Zjc19ycG9ydF9yZW1vdmUoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnRfaW4pCit7CisKKwlzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydDsKKworCWJmYV90cmMocnBvcnRfaW4tPmZjcywgcnBvcnRfaW4tPnB3d24pOworCisJcnBvcnQgPSBiZmFfZmNzX3BvcnRfZ2V0X3Jwb3J0X2J5X3B3d24ocnBvcnRfaW4tPnBvcnQsIHJwb3J0X2luLT5wd3duKTsKKwlpZiAocnBvcnQgPT0gTlVMTCkgeworCQkvKgorCQkgKiBUQkQgRXJyb3IgaGFuZGxpbmcKKwkJICovCisJCWJmYV90cmMocnBvcnRfaW4tPmZjcywgcnBvcnRfaW4tPnBpZCk7CisJCXJldHVybiBCRkFfU1RBVFVTX1VOS05PV05fUldXTjsKKwl9CisKKwkvKgorCSAqIFRCRCBpZiB0aGlzIHJlbW90ZSBwb3J0IGlzIG9ubGluZSwgc2VuZCBhIGxvZ28KKwkgKi8KKwlyZXR1cm4gQkZBX1NUQVRVU19PSzsKKworfQorCisvKioKKyAqCVJlbW90ZSBkZXZpY2Ugc3RhdHVzIGZvciBkaXNwbGF5L2RlYnVnLgorICovCit2b2lkCitiZmFfZmNzX3Jwb3J0X2dldF9hdHRyKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0LAorCQkJc3RydWN0IGJmYV9ycG9ydF9hdHRyX3MgKnJwb3J0X2F0dHIpCit7CisJc3RydWN0IGJmYV9ycG9ydF9xb3NfYXR0cl9zIHFvc19hdHRyOworCXN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCA9IHJwb3J0LT5wb3J0OworCisJYmZhX29zX21lbXNldChycG9ydF9hdHRyLCAwLCBzaXplb2Yoc3RydWN0IGJmYV9ycG9ydF9hdHRyX3MpKTsKKworCXJwb3J0X2F0dHItPnBpZCA9IHJwb3J0LT5waWQ7CisJcnBvcnRfYXR0ci0+cHd3biA9IHJwb3J0LT5wd3duOworCXJwb3J0X2F0dHItPm53d24gPSBycG9ydC0+bnd3bjsKKwlycG9ydF9hdHRyLT5jb3Nfc3VwcG9ydGVkID0gcnBvcnQtPmZjX2NvczsKKwlycG9ydF9hdHRyLT5kZl9zeiA9IHJwb3J0LT5tYXhmcnNpemU7CisJcnBvcnRfYXR0ci0+c3RhdGUgPSBiZmFfZmNzX3Jwb3J0X2dldF9zdGF0ZShycG9ydCk7CisJcnBvcnRfYXR0ci0+ZmNfY29zID0gcnBvcnQtPmZjX2NvczsKKwlycG9ydF9hdHRyLT5jaXNjID0gcnBvcnQtPmNpc2M7CisJcnBvcnRfYXR0ci0+c2NzaV9mdW5jdGlvbiA9IHJwb3J0LT5zY3NpX2Z1bmN0aW9uOworCXJwb3J0X2F0dHItPmN1cnJfc3BlZWQgID0gcnBvcnQtPnJwZi5ycHNjX3NwZWVkOworCXJwb3J0X2F0dHItPmFzc2lnbmVkX3NwZWVkICA9IHJwb3J0LT5ycGYuYXNzaWduZWRfc3BlZWQ7CisKKwliZmFfcnBvcnRfZ2V0X3Fvc19hdHRyKHJwb3J0LT5iZmFfcnBvcnQsICZxb3NfYXR0cik7CisJcnBvcnRfYXR0ci0+cW9zX2F0dHIgPSBxb3NfYXR0cjsKKworCXJwb3J0X2F0dHItPnRybF9lbmZvcmNlZCA9IEJGQV9GQUxTRTsKKwlpZiAoYmZhX3Bwb3J0X2lzX3JhdGVsaW0ocG9ydC0+ZmNzLT5iZmEpKSB7CisJCWlmICgocnBvcnQtPnJwZi5ycHNjX3NwZWVkID09IEJGQV9QUE9SVF9TUEVFRF9VTktOT1dOKSB8fAorCQkJKHJwb3J0LT5ycGYucnBzY19zcGVlZCA8CisJCQliZmFfZmNzX3BvcnRfZ2V0X3Jwb3J0X21heF9zcGVlZChwb3J0KSkpCisJCQlycG9ydF9hdHRyLT50cmxfZW5mb3JjZWQgPSBCRkFfVFJVRTsKKwl9CisKKwkvKgorCSAqIFRPRE8KKwkgKiBycG9ydC0+c3ltbmFtZQorCSAqLworfQorCisvKioKKyAqIAlQZXIgcmVtb3RlIGRldmljZSBzdGF0aXN0aWNzLgorICovCit2b2lkCitiZmFfZmNzX3Jwb3J0X2dldF9zdGF0cyhzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCwKKwkJCXN0cnVjdCBiZmFfcnBvcnRfc3RhdHNfcyAqc3RhdHMpCit7CisJKnN0YXRzID0gcnBvcnQtPnN0YXRzOworfQorCit2b2lkCitiZmFfZmNzX3Jwb3J0X2NsZWFyX3N0YXRzKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0KQoreworCWJmYV9vc19tZW1zZXQoKGNoYXIgKikmcnBvcnQtPnN0YXRzLCAwLAorCQkJc2l6ZW9mKHN0cnVjdCBiZmFfcnBvcnRfc3RhdHNfcykpOworfQorCitzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICoKK2JmYV9mY3NfcnBvcnRfbG9va3VwKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCwgd3duX3QgcnB3d24pCit7CisJc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQ7CisKKwlycG9ydCA9IGJmYV9mY3NfcG9ydF9nZXRfcnBvcnRfYnlfcHd3bihwb3J0LCBycHd3bik7CisJaWYgKHJwb3J0ID09IE5VTEwpIHsKKwkJLyoKKwkJICogVEJEIEVycm9yIGhhbmRsaW5nCisJCSAqLworCX0KKworCXJldHVybiBycG9ydDsKK30KKworc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqCitiZmFfZmNzX3Jwb3J0X2xvb2t1cF9ieV9ud3duKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCwgd3duX3Qgcm53d24pCit7CisJc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQ7CisKKwlycG9ydCA9IGJmYV9mY3NfcG9ydF9nZXRfcnBvcnRfYnlfbnd3bihwb3J0LCBybnd3bik7CisJaWYgKHJwb3J0ID09IE5VTEwpIHsKKwkJLyoKKwkJICogVEJEIEVycm9yIGhhbmRsaW5nCisJCSAqLworCX0KKworCXJldHVybiBycG9ydDsKK30KKworLyoKKyAqIFRoaXMgQVBJIGlzIHRvIHNldCB0aGUgUnBvcnQncyBzcGVlZC4gU2hvdWxkIGJlIHVzZWQgd2hlbiBSUFNDIGlzIG5vdAorICogc3VwcG9ydGVkIGJ5IHRoZSBycG9ydC4KKyAqLwordm9pZAorYmZhX2Zjc19ycG9ydF9zZXRfc3BlZWQoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQsCisJCQllbnVtIGJmYV9wcG9ydF9zcGVlZCBzcGVlZCkKK3sKKwlycG9ydC0+cnBmLmFzc2lnbmVkX3NwZWVkICA9IHNwZWVkOworCisJLyogU2V0IHRoaXMgc3BlZWQgaW4gZi93IG9ubHkgaWYgdGhlIFJQU0Mgc3BlZWQgaXMgbm90IGF2YWlsYWJsZSAqLworCWlmIChycG9ydC0+cnBmLnJwc2Nfc3BlZWQgPT0gQkZBX1BQT1JUX1NQRUVEX1VOS05PV04pCisJCWJmYV9ycG9ydF9zcGVlZChycG9ydC0+YmZhX3Jwb3J0LCBzcGVlZCk7Cit9CisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9ycG9ydF9mdHJzLmMgYi9kcml2ZXJzL3Njc2kvYmZhL3Jwb3J0X2Z0cnMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTFmNTlkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9ycG9ydF9mdHJzLmMKQEAgLTAsMCArMSwzNzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworLyoqCisgKiAgcnBvcnRfZnRycy5jIFJlbW90ZSBwb3J0IGZlYXR1cmVzIChSUEYpIGltcGxlbWVudGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxiZmEuaD4KKyNpbmNsdWRlIDxiZmFfc3ZjLmg+CisjaW5jbHVkZSAiZmNidWlsZC5oIgorI2luY2x1ZGUgImZjc19ycG9ydC5oIgorI2luY2x1ZGUgImZjc19scG9ydC5oIgorI2luY2x1ZGUgImZjc190cmNtb2QuaCIKKyNpbmNsdWRlICJmY3NfZmN4cC5oIgorI2luY2x1ZGUgImZjcy5oIgorCitCRkFfVFJDX0ZJTEUoRkNTLCBSUE9SVF9GVFJTKTsKKworI2RlZmluZSBCRkFfRkNTX1JQRl9SRVRSSUVTCSgzKQorI2RlZmluZSBCRkFfRkNTX1JQRl9SRVRSWV9USU1FT1VUICAoMTAwMCkgLyogMSBzZWMgKEluIG1pbGxpc2VjcykgKi8KKworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcnBmX3NlbmRfcnBzYzIodm9pZCAqcnBvcnRfY2JhcmcsCisJCQlzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cF9hbGxvY2VkKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3JwZl9ycHNjMl9yZXNwb25zZSh2b2lkICpmY3NhcmcsCisJCQlzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cCwgdm9pZCAqY2JhcmcsCisJCQliZmFfc3RhdHVzX3QgcmVxX3N0YXR1cywgdTMyIHJzcF9sZW4sCisJCQl1MzIgcmVzaWRfbGVuLAorCQkJc3RydWN0IGZjaHNfcyAqcnNwX2ZjaHMpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcnBmX3RpbWVvdXQodm9pZCAqYXJnKTsKKworLyoqCisgKiAgZmNzX3Jwb3J0X2Z0cnNfc20gRkNTIHJwb3J0IHN0YXRlIG1hY2hpbmUgZXZlbnRzCisgKi8KKworZW51bSBycGZfZXZlbnQgeworCVJQRlNNX0VWRU5UX1JQT1JUX09GRkxJTkUgID0gMSwgICAgIC8qICBScG9ydCBvZmZsaW5lICAgICAgICAgICAgKi8KKwlSUEZTTV9FVkVOVF9SUE9SVF9PTkxJTkUgICA9IDIsICAgICAvKiAgUnBvcnQgb25saW5lICAgICAgICAgICAgKi8KKwlSUEZTTV9FVkVOVF9GQ1hQX1NFTlQgICAgICA9IDMsICAgIC8qICBGcmFtZSBmcm9tIGhhcyBiZWVuIHNlbnQgKi8KKwlSUEZTTV9FVkVOVF9USU1FT1VUICAJICAgPSA0LCAgICAvKiAgUnBvcnQgU00gdGltZW91dCBldmVudCAgICovCisJUlBGU01fRVZFTlRfUlBTQ19DT01QICAgICAgPSA1LAorCVJQRlNNX0VWRU5UX1JQU0NfRkFJTCAgICAgID0gNiwKKwlSUEZTTV9FVkVOVF9SUFNDX0VSUk9SICAgICA9IDcsCit9OworCitzdGF0aWMgdm9pZAliZmFfZmNzX3JwZl9zbV91bmluaXQoc3RydWN0IGJmYV9mY3NfcnBmX3MgKnJwZiwKKwkJCQkJZW51bSBycGZfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcnBmX3NtX3Jwc2Nfc2VuZGluZyhzdHJ1Y3QgYmZhX2Zjc19ycGZfcyAqcnBmLAorCQkJCQkgICAgICAgZW51bSBycGZfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcnBmX3NtX3Jwc2Moc3RydWN0IGJmYV9mY3NfcnBmX3MgKnJwZiwKKwkJCQkJICAgICAgIGVudW0gcnBmX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkIAliZmFfZmNzX3JwZl9zbV9ycHNjX3JldHJ5KHN0cnVjdCBiZmFfZmNzX3JwZl9zICpycGYsCisJCQkJCQkJZW51bSBycGZfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcnBmX3NtX29mZmxpbmUoc3RydWN0IGJmYV9mY3NfcnBmX3MgKnJwZiwKKwkJCQkJCQllbnVtIHJwZl9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19ycGZfc21fb25saW5lKHN0cnVjdCBiZmFfZmNzX3JwZl9zICpycGYsCisJCQkJCQkJZW51bSBycGZfZXZlbnQgZXZlbnQpOworCitzdGF0aWMgdm9pZAorYmZhX2Zjc19ycGZfc21fdW5pbml0KHN0cnVjdCBiZmFfZmNzX3JwZl9zICpycGYsIGVudW0gcnBmX2V2ZW50IGV2ZW50KQoreworCXN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0ID0gcnBmLT5ycG9ydDsKKworCWJmYV90cmMocnBvcnQtPmZjcywgcnBvcnQtPnB3d24pOworCWJmYV90cmMocnBvcnQtPmZjcywgcnBvcnQtPnBpZCk7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBSUEZTTV9FVkVOVF9SUE9SVF9PTkxJTkUgOgorCQlpZiAoIUJGQV9GQ1NfUElEX0lTX1dLQShycG9ydC0+cGlkKSkgeworCQkJYmZhX3NtX3NldF9zdGF0ZShycGYsIGJmYV9mY3NfcnBmX3NtX3Jwc2Nfc2VuZGluZyk7CisJCQlycGYtPnJwc2NfcmV0cmllcyA9IDA7CisJCQliZmFfZmNzX3JwZl9zZW5kX3Jwc2MyKHJwZiwgTlVMTCk7CisJCQlicmVhazsKKwkJfTsKKworCWNhc2UgUlBGU01fRVZFTlRfUlBPUlRfT0ZGTElORSA6CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3JwZl9zbV9ycHNjX3NlbmRpbmcoc3RydWN0IGJmYV9mY3NfcnBmX3MgKnJwZiwgZW51bSBycGZfZXZlbnQgZXZlbnQpCit7CisJc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQgPSBycGYtPnJwb3J0OworCisJYmZhX3RyYyhycG9ydC0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBSUEZTTV9FVkVOVF9GQ1hQX1NFTlQ6CisJCWJmYV9zbV9zZXRfc3RhdGUocnBmLCBiZmFfZmNzX3JwZl9zbV9ycHNjKTsKKwkJYnJlYWs7CisKKwljYXNlIFJQRlNNX0VWRU5UX1JQT1JUX09GRkxJTkUgOgorCQliZmFfc21fc2V0X3N0YXRlKHJwZiwgYmZhX2Zjc19ycGZfc21fb2ZmbGluZSk7CisJCWJmYV9mY3hwX3dhbGxvY19jYW5jZWwocnBvcnQtPmZjcy0+YmZhLCAmcnBmLT5mY3hwX3dxZSk7CisJCXJwZi0+cnBzY19yZXRyaWVzID0gMDsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcnBmX3NtX3Jwc2Moc3RydWN0IGJmYV9mY3NfcnBmX3MgKnJwZiwgZW51bSBycGZfZXZlbnQgZXZlbnQpCit7CisJc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQgPSBycGYtPnJwb3J0OworCisJYmZhX3RyYyhycG9ydC0+ZmNzLCBycG9ydC0+cGlkKTsKKwliZmFfdHJjKHJwb3J0LT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIFJQRlNNX0VWRU5UX1JQU0NfQ09NUDoKKwkJYmZhX3NtX3NldF9zdGF0ZShycGYsIGJmYV9mY3NfcnBmX3NtX29ubGluZSk7CisJCS8qIFVwZGF0ZSBzcGVlZCBpbmZvIGluIGYvdyB2aWEgQkZBICovCisJCWlmIChycGYtPnJwc2Nfc3BlZWQgIT0gQkZBX1BQT1JUX1NQRUVEX1VOS05PV04pIHsKKwkJCWJmYV9ycG9ydF9zcGVlZChycG9ydC0+YmZhX3Jwb3J0LCBycGYtPnJwc2Nfc3BlZWQpOworCQl9IGVsc2UgaWYgKHJwZi0+YXNzaWduZWRfc3BlZWQgIT0gQkZBX1BQT1JUX1NQRUVEX1VOS05PV04pIHsKKwkJCWJmYV9ycG9ydF9zcGVlZChycG9ydC0+YmZhX3Jwb3J0LCBycGYtPmFzc2lnbmVkX3NwZWVkKTsKKwkJfQorCQlicmVhazsKKworCWNhc2UgUlBGU01fRVZFTlRfUlBTQ19GQUlMOgorCQkvKiBSUFNDIG5vdCBzdXBwb3J0ZWQgYnkgcnBvcnQgKi8KKwkJYmZhX3NtX3NldF9zdGF0ZShycGYsIGJmYV9mY3NfcnBmX3NtX29ubGluZSk7CisJCWJyZWFrOworCisJY2FzZSBSUEZTTV9FVkVOVF9SUFNDX0VSUk9SOgorCQkvKiBuZWVkIHRvIHJldHJ5Li4uZGVsYXllZCBhIGJpdC4gKi8KKwkJaWYgKHJwZi0+cnBzY19yZXRyaWVzKysgPCBCRkFfRkNTX1JQRl9SRVRSSUVTKSB7CisJCQliZmFfdGltZXJfc3RhcnQocnBvcnQtPmZjcy0+YmZhLCAmcnBmLT50aW1lciwKKwkJCQkgICAgYmZhX2Zjc19ycGZfdGltZW91dCwgcnBmLAorCQkJCSAgICBCRkFfRkNTX1JQRl9SRVRSWV9USU1FT1VUKTsKKwkJCWJmYV9zbV9zZXRfc3RhdGUocnBmLCBiZmFfZmNzX3JwZl9zbV9ycHNjX3JldHJ5KTsKKwkJfSBlbHNlIHsKKwkJCWJmYV9zbV9zZXRfc3RhdGUocnBmLCBiZmFfZmNzX3JwZl9zbV9vbmxpbmUpOworCQl9CisJCWJyZWFrOworCisJY2FzZSBSUEZTTV9FVkVOVF9SUE9SVF9PRkZMSU5FIDoKKwkJYmZhX3NtX3NldF9zdGF0ZShycGYsIGJmYV9mY3NfcnBmX3NtX29mZmxpbmUpOworCQliZmFfZmN4cF9kaXNjYXJkKHJwZi0+ZmN4cCk7CisJCXJwZi0+cnBzY19yZXRyaWVzID0gMDsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcnBmX3NtX3Jwc2NfcmV0cnkoc3RydWN0IGJmYV9mY3NfcnBmX3MgKnJwZiwgZW51bSBycGZfZXZlbnQgZXZlbnQpCit7CisJc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQgPSBycGYtPnJwb3J0OworCisJYmZhX3RyYyhycG9ydC0+ZmNzLCBycG9ydC0+cGlkKTsKKwliZmFfdHJjKHJwb3J0LT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIFJQRlNNX0VWRU5UX1RJTUVPVVQgOgorCQkvKiByZS1zZW5kIHRoZSBSUFNDICovCisJCWJmYV9zbV9zZXRfc3RhdGUocnBmLCBiZmFfZmNzX3JwZl9zbV9ycHNjX3NlbmRpbmcpOworCQliZmFfZmNzX3JwZl9zZW5kX3Jwc2MyKHJwZiwgTlVMTCk7CisJCWJyZWFrOworCisJY2FzZSBSUEZTTV9FVkVOVF9SUE9SVF9PRkZMSU5FIDoKKwkJYmZhX3RpbWVyX3N0b3AoJnJwZi0+dGltZXIpOworCQliZmFfc21fc2V0X3N0YXRlKHJwZiwgYmZhX2Zjc19ycGZfc21fb2ZmbGluZSk7CisJCXJwZi0+cnBzY19yZXRyaWVzID0gMDsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcnBmX3NtX29ubGluZShzdHJ1Y3QgYmZhX2Zjc19ycGZfcyAqcnBmLCBlbnVtIHJwZl9ldmVudCBldmVudCkKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCA9IHJwZi0+cnBvcnQ7CisKKwliZmFfdHJjKHJwb3J0LT5mY3MsIHJwb3J0LT5wd3duKTsKKwliZmFfdHJjKHJwb3J0LT5mY3MsIHJwb3J0LT5waWQpOworCWJmYV90cmMocnBvcnQtPmZjcywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgUlBGU01fRVZFTlRfUlBPUlRfT0ZGTElORSA6CisJCWJmYV9zbV9zZXRfc3RhdGUocnBmLCBiZmFfZmNzX3JwZl9zbV9vZmZsaW5lKTsKKwkJcnBmLT5ycHNjX3JldHJpZXMgPSAwOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19ycGZfc21fb2ZmbGluZShzdHJ1Y3QgYmZhX2Zjc19ycGZfcyAqcnBmLCBlbnVtIHJwZl9ldmVudCBldmVudCkKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCA9IHJwZi0+cnBvcnQ7CisKKwliZmFfdHJjKHJwb3J0LT5mY3MsIHJwb3J0LT5wd3duKTsKKwliZmFfdHJjKHJwb3J0LT5mY3MsIHJwb3J0LT5waWQpOworCWJmYV90cmMocnBvcnQtPmZjcywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgUlBGU01fRVZFTlRfUlBPUlRfT05MSU5FIDoKKwkJYmZhX3NtX3NldF9zdGF0ZShycGYsIGJmYV9mY3NfcnBmX3NtX3Jwc2Nfc2VuZGluZyk7CisJCWJmYV9mY3NfcnBmX3NlbmRfcnBzYzIocnBmLCBOVUxMKTsKKwkJYnJlYWs7CisKKwljYXNlIFJQRlNNX0VWRU5UX1JQT1JUX09GRkxJTkUgOgorCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorLyoqCisgKiBDYWxsZWQgd2hlbiBScG9ydCBpcyBjcmVhdGVkLgorICovCit2b2lkICBiZmFfZmNzX3JwZl9pbml0KHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0KQoreworCXN0cnVjdCBiZmFfZmNzX3JwZl9zICpycGYgPSAmcnBvcnQtPnJwZjsKKworCWJmYV90cmMocnBvcnQtPmZjcywgcnBvcnQtPnBpZCk7CisJcnBmLT5ycG9ydCA9IHJwb3J0OworCisJYmZhX3NtX3NldF9zdGF0ZShycGYsIGJmYV9mY3NfcnBmX3NtX3VuaW5pdCk7Cit9CisKKy8qKgorICogQ2FsbGVkIHdoZW4gUnBvcnQgYmVjb21lcyBvbmxpbmUKKyAqLwordm9pZCAgYmZhX2Zjc19ycGZfcnBvcnRfb25saW5lKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0KQoreworCWJmYV90cmMocnBvcnQtPmZjcywgcnBvcnQtPnBpZCk7CisKKwlpZiAoX19mY3NfbWluX2NmZyhycG9ydC0+cG9ydC0+ZmNzKSkKKwkJcmV0dXJuOworCisJaWYgKGJmYV9mY3NfZmFicmljX2lzX3N3aXRjaGVkKHJwb3J0LT5wb3J0LT5mYWJyaWMpKQorCQliZmFfc21fc2VuZF9ldmVudCgmcnBvcnQtPnJwZiwgUlBGU01fRVZFTlRfUlBPUlRfT05MSU5FKTsKK30KKworLyoqCisgKiBDYWxsZWQgd2hlbiBScG9ydCBiZWNvbWVzIG9mZmxpbmUKKyAqLwordm9pZCAgYmZhX2Zjc19ycGZfcnBvcnRfb2ZmbGluZShzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCkKK3sKKwliZmFfdHJjKHJwb3J0LT5mY3MsIHJwb3J0LT5waWQpOworCisJaWYgKF9fZmNzX21pbl9jZmcocnBvcnQtPnBvcnQtPmZjcykpCisJCXJldHVybjsKKworCWJmYV9zbV9zZW5kX2V2ZW50KCZycG9ydC0+cnBmLCBSUEZTTV9FVkVOVF9SUE9SVF9PRkZMSU5FKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcnBmX3RpbWVvdXQodm9pZCAqYXJnKQoreworCXN0cnVjdCBiZmFfZmNzX3JwZl9zICpycGYgPSAoc3RydWN0IGJmYV9mY3NfcnBmX3MgKikgYXJnOworCXN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0ID0gcnBmLT5ycG9ydDsKKworCWJmYV90cmMocnBvcnQtPmZjcywgcnBvcnQtPnBpZCk7CisJYmZhX3NtX3NlbmRfZXZlbnQocnBmLCBSUEZTTV9FVkVOVF9USU1FT1VUKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcnBmX3NlbmRfcnBzYzIodm9pZCAqcnBmX2NiYXJnLCBzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cF9hbGxvY2VkKQoreworCXN0cnVjdCBiZmFfZmNzX3JwZl9zICpycGYgCT0gKHN0cnVjdCBiZmFfZmNzX3JwZl9zICopcnBmX2NiYXJnOworCXN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0ID0gcnBmLT5ycG9ydDsKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQgPSBycG9ydC0+cG9ydDsKKwlzdHJ1Y3QgZmNoc19zICAgICAgICAgIGZjaHM7CisJaW50ICAgICAgICAgICAgIGxlbjsKKwlzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cDsKKworCWJmYV90cmMocnBvcnQtPmZjcywgcnBvcnQtPnB3d24pOworCisJZmN4cCA9IGZjeHBfYWxsb2NlZCA/IGZjeHBfYWxsb2NlZCA6IGJmYV9mY3NfZmN4cF9hbGxvYyhwb3J0LT5mY3MpOworCWlmICghZmN4cCkgeworCQliZmFfZmN4cF9hbGxvY193YWl0KHBvcnQtPmZjcy0+YmZhLCAmcnBmLT5mY3hwX3dxZSwKKwkJCQkJYmZhX2Zjc19ycGZfc2VuZF9ycHNjMiwgcnBmKTsKKwkJcmV0dXJuOworCX0KKwlycGYtPmZjeHAgPSBmY3hwOworCisJbGVuID0gZmNfcnBzYzJfYnVpbGQoJmZjaHMsIGJmYV9mY3hwX2dldF9yZXFidWYoZmN4cCksIHJwb3J0LT5waWQsCisJCQkgICAgYmZhX2Zjc19wb3J0X2dldF9mY2lkKHBvcnQpLCAmcnBvcnQtPnBpZCwgMSk7CisKKwliZmFfZmN4cF9zZW5kKGZjeHAsIE5VTEwsIHBvcnQtPmZhYnJpYy0+dmZfaWQsIHBvcnQtPmxwX3RhZywgQkZBX0ZBTFNFLAorCQkJICBGQ19DTEFTU18zLCBsZW4sICZmY2hzLCBiZmFfZmNzX3JwZl9ycHNjMl9yZXNwb25zZSwKKwkJCSAgcnBmLCBGQ19NQVhfUERVU1osIEZDX1JBX1RPVik7CisJcnBvcnQtPnN0YXRzLnJwc2Nfc2VudCsrOworCWJmYV9zbV9zZW5kX2V2ZW50KHJwZiwgUlBGU01fRVZFTlRfRkNYUF9TRU5UKTsKKworfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19ycGZfcnBzYzJfcmVzcG9uc2Uodm9pZCAqZmNzYXJnLCBzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cCwgdm9pZCAqY2JhcmcsCisJCQkgICAgYmZhX3N0YXR1c190IHJlcV9zdGF0dXMsIHUzMiByc3BfbGVuLAorCQkJICAgIHUzMiByZXNpZF9sZW4sIHN0cnVjdCBmY2hzX3MgKnJzcF9mY2hzKQoreworCXN0cnVjdCBiZmFfZmNzX3JwZl9zICpycGYgPSAoc3RydWN0IGJmYV9mY3NfcnBmX3MgKikgY2Jhcmc7CisJc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQgPSBycGYtPnJwb3J0OworCXN0cnVjdCBmY19sc19yanRfcyAgICAqbHNfcmp0OworCXN0cnVjdCBmY19ycHNjMl9hY2NfcyAgKnJwc2MyX2FjYzsKKwl1MTYgICAgICAgIG51bV9lbnRzOworCisJYmZhX3RyYyhycG9ydC0+ZmNzLCByZXFfc3RhdHVzKTsKKworCWlmIChyZXFfc3RhdHVzICE9IEJGQV9TVEFUVVNfT0spIHsKKwkJYmZhX3RyYyhycG9ydC0+ZmNzLCByZXFfc3RhdHVzKTsKKwkJaWYgKHJlcV9zdGF0dXMgPT0gQkZBX1NUQVRVU19FVElNRVIpCisJCQlycG9ydC0+c3RhdHMucnBzY19mYWlsZWQrKzsKKwkJYmZhX3NtX3NlbmRfZXZlbnQocnBmLCBSUEZTTV9FVkVOVF9SUFNDX0VSUk9SKTsKKwkJcmV0dXJuOworCX0KKworCXJwc2MyX2FjYyA9IChzdHJ1Y3QgZmNfcnBzYzJfYWNjX3MgKikgQkZBX0ZDWFBfUlNQX1BMRChmY3hwKTsKKwlpZiAocnBzYzJfYWNjLT5lbHNfY21kID09IEZDX0VMU19BQ0MpIHsKKwkJcnBvcnQtPnN0YXRzLnJwc2NfYWNjcysrOworCQludW1fZW50cyA9IGJmYV9vc19udG9ocyhycHNjMl9hY2MtPm51bV9waWRzKTsKKwkJYmZhX3RyYyhycG9ydC0+ZmNzLCBudW1fZW50cyk7CisJCWlmIChudW1fZW50cyA+IDApIHsKKwkJCWJmYV9hc3NlcnQocnBzYzJfYWNjLT5wb3J0X2luZm9bMF0ucGlkICE9IHJwb3J0LT5waWQpOworCQkJYmZhX3RyYyhycG9ydC0+ZmNzLAorCQkJCWJmYV9vc19udG9ocyhycHNjMl9hY2MtPnBvcnRfaW5mb1swXS5waWQpKTsKKwkJCWJmYV90cmMocnBvcnQtPmZjcywKKwkJCQliZmFfb3NfbnRvaHMocnBzYzJfYWNjLT5wb3J0X2luZm9bMF0uc3BlZWQpKTsKKwkJCWJmYV90cmMocnBvcnQtPmZjcywKKwkJCQliZmFfb3NfbnRvaHMocnBzYzJfYWNjLT5wb3J0X2luZm9bMF0uaW5kZXgpKTsKKwkJCWJmYV90cmMocnBvcnQtPmZjcywKKwkJCQlycHNjMl9hY2MtPnBvcnRfaW5mb1swXS50eXBlKTsKKworCQkJaWYgKHJwc2MyX2FjYy0+cG9ydF9pbmZvWzBdLnNwZWVkID09IDApIHsKKwkJCQliZmFfc21fc2VuZF9ldmVudChycGYsIFJQRlNNX0VWRU5UX1JQU0NfRVJST1IpOworCQkJCXJldHVybjsKKwkJCX0KKworCQkJcnBmLT5ycHNjX3NwZWVkID0gZmNfcnBzY19vcGVyc3BlZWRfdG9fYmZhX3NwZWVkKAorCQkJCWJmYV9vc19udG9ocyhycHNjMl9hY2MtPnBvcnRfaW5mb1swXS5zcGVlZCkpOworCisJCQliZmFfc21fc2VuZF9ldmVudChycGYsIFJQRlNNX0VWRU5UX1JQU0NfQ09NUCk7CisJCX0KKwl9IGVsc2UgeworCQlsc19yanQgPSAoc3RydWN0IGZjX2xzX3JqdF9zICopIEJGQV9GQ1hQX1JTUF9QTEQoZmN4cCk7CisJCWJmYV90cmMocnBvcnQtPmZjcywgbHNfcmp0LT5yZWFzb25fY29kZSk7CisJCWJmYV90cmMocnBvcnQtPmZjcywgbHNfcmp0LT5yZWFzb25fY29kZV9leHBsKTsKKwkJcnBvcnQtPnN0YXRzLnJwc2NfcmVqZWN0cysrOworCQlpZiAobHNfcmp0LT5yZWFzb25fY29kZSA9PSBGQ19MU19SSlRfUlNOX0NNRF9OT1RfU1VQUCkgeworCQkJYmZhX3NtX3NlbmRfZXZlbnQocnBmLCBSUEZTTV9FVkVOVF9SUFNDX0ZBSUwpOworCQl9IGVsc2UgeworCQkJYmZhX3NtX3NlbmRfZXZlbnQocnBmLCBSUEZTTV9FVkVOVF9SUFNDX0VSUk9SKTsKKwkJfQorCX0KK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvc2NuLmMgYi9kcml2ZXJzL3Njc2kvYmZhL3Njbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkNDc3MWYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL3Njbi5jCkBAIC0wLDAgKzEsNDgyIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxiZmEuaD4KKyNpbmNsdWRlIDxiZmFfc3ZjLmg+CisjaW5jbHVkZSAiZmNzX2xwb3J0LmgiCisjaW5jbHVkZSAiZmNzX3Jwb3J0LmgiCisjaW5jbHVkZSAiZmNzX21zLmgiCisjaW5jbHVkZSAiZmNzX3RyY21vZC5oIgorI2luY2x1ZGUgImZjc19mY3hwLmgiCisjaW5jbHVkZSAiZmNzLmgiCisjaW5jbHVkZSAibHBvcnRfcHJpdi5oIgorCitCRkFfVFJDX0ZJTEUoRkNTLCBTQ04pOworCisjZGVmaW5lIEZDX1FPU19SU0NOX0VWRU5UCQkweDBjCisjZGVmaW5lIEZDX0ZBQlJJQ19OQU1FX1JTQ05fRVZFTlQJMHgwZAorCisvKgorICogZm9yd2FyZCBkZWNsYXJhdGlvbnMKKyAqLworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9zY25fc2VuZF9zY3Iodm9pZCAqc2NuX2NiYXJnLAorCQkJCQkgIHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwX2FsbG9jZWQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9zY25fc2NyX3Jlc3BvbnNlKHZvaWQgKmZjc2FyZywKKwkJCQkJICAgICAgc3RydWN0IGJmYV9mY3hwX3MgKmZjeHAsCisJCQkJCSAgICAgIHZvaWQgKmNiYXJnLAorCQkJCQkgICAgICBiZmFfc3RhdHVzX3QgcmVxX3N0YXR1cywKKwkJCQkJICAgICAgdTMyIHJzcF9sZW4sCisJCQkJCSAgICAgIHUzMiByZXNpZF9sZW4sCisJCQkJCSAgICAgIHN0cnVjdCBmY2hzX3MgKnJzcF9mY2hzKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3BvcnRfc2NuX3NlbmRfbHNfYWNjKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCwKKwkJCQkJICAgICBzdHJ1Y3QgZmNoc19zICpyeF9mY2hzKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3BvcnRfc2NuX3RpbWVvdXQodm9pZCAqYXJnKTsKKworLyoqCisgKiAgZmNzX3NjbV9zbSBGQ1MgU0NOIHN0YXRlIG1hY2hpbmUKKyAqLworCisvKioKKyAqIFZQb3J0IFNDTiBTdGF0ZSBNYWNoaW5lIGV2ZW50cworICovCitlbnVtIHBvcnRfc2NuX2V2ZW50IHsKKwlTQ05TTV9FVkVOVF9QT1JUX09OTElORSA9IDEsCisJU0NOU01fRVZFTlRfUE9SVF9PRkZMSU5FID0gMiwKKwlTQ05TTV9FVkVOVF9SU1BfT0sgPSAzLAorCVNDTlNNX0VWRU5UX1JTUF9FUlJPUiA9IDQsCisJU0NOU01fRVZFTlRfVElNRU9VVCA9IDUsCisJU0NOU01fRVZFTlRfU0NSX1NFTlQgPSA2LAorfTsKKworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9zY25fc21fb2ZmbGluZShzdHJ1Y3QgYmZhX2Zjc19wb3J0X3Njbl9zICpzY24sCisJCQkJCSAgICBlbnVtIHBvcnRfc2NuX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3BvcnRfc2NuX3NtX3NlbmRpbmdfc2NyKHN0cnVjdCBiZmFfZmNzX3BvcnRfc2NuX3MgKnNjbiwKKwkJCQkJCWVudW0gcG9ydF9zY25fZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9zY25fc21fc2NyKHN0cnVjdCBiZmFfZmNzX3BvcnRfc2NuX3MgKnNjbiwKKwkJCQkJZW51bSBwb3J0X3Njbl9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X3Njbl9zbV9zY3JfcmV0cnkoc3RydWN0IGJmYV9mY3NfcG9ydF9zY25fcyAqc2NuLAorCQkJCQkgICAgICBlbnVtIHBvcnRfc2NuX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3BvcnRfc2NuX3NtX29ubGluZShzdHJ1Y3QgYmZhX2Zjc19wb3J0X3Njbl9zICpzY24sCisJCQkJCSAgIGVudW0gcG9ydF9zY25fZXZlbnQgZXZlbnQpOworCisvKioKKyAqIAkJU3RhcnRpbmcgc3RhdGUgLSBhd2FpdGluZyBsaW5rIHVwLgorICovCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X3Njbl9zbV9vZmZsaW5lKHN0cnVjdCBiZmFfZmNzX3BvcnRfc2NuX3MgKnNjbiwKKwkJCSAgICBlbnVtIHBvcnRfc2NuX2V2ZW50IGV2ZW50KQoreworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIFNDTlNNX0VWRU5UX1BPUlRfT05MSU5FOgorCQliZmFfc21fc2V0X3N0YXRlKHNjbiwgYmZhX2Zjc19wb3J0X3Njbl9zbV9zZW5kaW5nX3Njcik7CisJCWJmYV9mY3NfcG9ydF9zY25fc2VuZF9zY3Ioc2NuLCBOVUxMKTsKKwkJYnJlYWs7CisKKwljYXNlIFNDTlNNX0VWRU5UX1BPUlRfT0ZGTElORToKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9zY25fc21fc2VuZGluZ19zY3Ioc3RydWN0IGJmYV9mY3NfcG9ydF9zY25fcyAqc2NuLAorCQkJCWVudW0gcG9ydF9zY25fZXZlbnQgZXZlbnQpCit7CisJc3dpdGNoIChldmVudCkgeworCWNhc2UgU0NOU01fRVZFTlRfU0NSX1NFTlQ6CisJCWJmYV9zbV9zZXRfc3RhdGUoc2NuLCBiZmFfZmNzX3BvcnRfc2NuX3NtX3Njcik7CisJCWJyZWFrOworCisJY2FzZSBTQ05TTV9FVkVOVF9QT1JUX09GRkxJTkU6CisJCWJmYV9zbV9zZXRfc3RhdGUoc2NuLCBiZmFfZmNzX3BvcnRfc2NuX3NtX29mZmxpbmUpOworCQliZmFfZmN4cF93YWxsb2NfY2FuY2VsKHNjbi0+cG9ydC0+ZmNzLT5iZmEsICZzY24tPmZjeHBfd3FlKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9zY25fc21fc2NyKHN0cnVjdCBiZmFfZmNzX3BvcnRfc2NuX3MgKnNjbiwKKwkJCWVudW0gcG9ydF9zY25fZXZlbnQgZXZlbnQpCit7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0ID0gc2NuLT5wb3J0OworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgU0NOU01fRVZFTlRfUlNQX09LOgorCQliZmFfc21fc2V0X3N0YXRlKHNjbiwgYmZhX2Zjc19wb3J0X3Njbl9zbV9vbmxpbmUpOworCQlicmVhazsKKworCWNhc2UgU0NOU01fRVZFTlRfUlNQX0VSUk9SOgorCQliZmFfc21fc2V0X3N0YXRlKHNjbiwgYmZhX2Zjc19wb3J0X3Njbl9zbV9zY3JfcmV0cnkpOworCQliZmFfdGltZXJfc3RhcnQocG9ydC0+ZmNzLT5iZmEsICZzY24tPnRpbWVyLAorCQkJCWJmYV9mY3NfcG9ydF9zY25fdGltZW91dCwgc2NuLAorCQkJCUJGQV9GQ1NfUkVUUllfVElNRU9VVCk7CisJCWJyZWFrOworCisJY2FzZSBTQ05TTV9FVkVOVF9QT1JUX09GRkxJTkU6CisJCWJmYV9zbV9zZXRfc3RhdGUoc2NuLCBiZmFfZmNzX3BvcnRfc2NuX3NtX29mZmxpbmUpOworCQliZmFfZmN4cF9kaXNjYXJkKHNjbi0+ZmN4cCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3BvcnRfc2NuX3NtX3Njcl9yZXRyeShzdHJ1Y3QgYmZhX2Zjc19wb3J0X3Njbl9zICpzY24sCisJCQkgICAgICBlbnVtIHBvcnRfc2NuX2V2ZW50IGV2ZW50KQoreworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIFNDTlNNX0VWRU5UX1RJTUVPVVQ6CisJCWJmYV9zbV9zZXRfc3RhdGUoc2NuLCBiZmFfZmNzX3BvcnRfc2NuX3NtX3NlbmRpbmdfc2NyKTsKKwkJYmZhX2Zjc19wb3J0X3Njbl9zZW5kX3NjcihzY24sIE5VTEwpOworCQlicmVhazsKKworCWNhc2UgU0NOU01fRVZFTlRfUE9SVF9PRkZMSU5FOgorCQliZmFfc21fc2V0X3N0YXRlKHNjbiwgYmZhX2Zjc19wb3J0X3Njbl9zbV9vZmZsaW5lKTsKKwkJYmZhX3RpbWVyX3N0b3AoJnNjbi0+dGltZXIpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X3Njbl9zbV9vbmxpbmUoc3RydWN0IGJmYV9mY3NfcG9ydF9zY25fcyAqc2NuLAorCQkJICAgZW51bSBwb3J0X3Njbl9ldmVudCBldmVudCkKK3sKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBTQ05TTV9FVkVOVF9QT1JUX09GRkxJTkU6CisJCWJmYV9zbV9zZXRfc3RhdGUoc2NuLCBiZmFfZmNzX3BvcnRfc2NuX3NtX29mZmxpbmUpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisKKworLyoqCisgKiAgZmNzX3Njbl9wcml2YXRlIEZDUyBTQ04gcHJpdmF0ZSBmdW5jdGlvbnMKKyAqLworCisvKioKKyAqIFRoaXMgcm91dGluZSB3aWxsIGJlIGNhbGxlZCB0byBzZW5kIGEgU0NSIGNvbW1hbmQuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX3BvcnRfc2NuX3NlbmRfc2NyKHZvaWQgKnNjbl9jYmFyZywgc3RydWN0IGJmYV9mY3hwX3MgKmZjeHBfYWxsb2NlZCkKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X3Njbl9zICpzY24gPSBzY25fY2Jhcmc7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0ID0gc2NuLT5wb3J0OworCXN0cnVjdCBmY2hzX3MgICAgICAgICAgZmNoczsKKwlpbnQgICAgICAgICAgICAgbGVuOworCXN0cnVjdCBiZmFfZmN4cF9zICpmY3hwOworCisJYmZhX3RyYyhwb3J0LT5mY3MsIHBvcnQtPnBpZCk7CisJYmZhX3RyYyhwb3J0LT5mY3MsIHBvcnQtPnBvcnRfY2ZnLnB3d24pOworCisJZmN4cCA9IGZjeHBfYWxsb2NlZCA/IGZjeHBfYWxsb2NlZCA6IGJmYV9mY3NfZmN4cF9hbGxvYyhwb3J0LT5mY3MpOworCWlmICghZmN4cCkgeworCQliZmFfZmN4cF9hbGxvY193YWl0KHBvcnQtPmZjcy0+YmZhLCAmc2NuLT5mY3hwX3dxZSwKKwkJCQkgICAgYmZhX2Zjc19wb3J0X3Njbl9zZW5kX3Njciwgc2NuKTsKKwkJcmV0dXJuOworCX0KKwlzY24tPmZjeHAgPSBmY3hwOworCisJLyoKKwkgKiBIYW5kbGUgVlUgcmVnaXN0cmF0aW9ucyBmb3IgQmFzZSBwb3J0IG9ubHkKKwkgKi8KKwlpZiAoKCFwb3J0LT52cG9ydCkgJiYgYmZhX2lvY19nZXRfZmNtb2RlKCZwb3J0LT5mY3MtPmJmYS0+aW9jKSkgeworCQlsZW4gPSBmY19zY3JfYnVpbGQoJmZjaHMsIGJmYV9mY3hwX2dldF9yZXFidWYoZmN4cCksCisJCQkJICAgYmZhX2xwc19pc19icmNkX2ZhYnJpYyhwb3J0LT5mYWJyaWMtPmxwcyksCisJCQkJICAgcG9ydC0+cGlkLCAwKTsKKwl9IGVsc2UgeworCQlsZW4gPSBmY19zY3JfYnVpbGQoJmZjaHMsIGJmYV9mY3hwX2dldF9yZXFidWYoZmN4cCksIEJGQV9GQUxTRSwKKwkJCQkgICBwb3J0LT5waWQsIDApOworCX0KKworCWJmYV9mY3hwX3NlbmQoZmN4cCwgTlVMTCwgcG9ydC0+ZmFicmljLT52Zl9pZCwgcG9ydC0+bHBfdGFnLCBCRkFfRkFMU0UsCisJCSAgICAgIEZDX0NMQVNTXzMsIGxlbiwgJmZjaHMsIGJmYV9mY3NfcG9ydF9zY25fc2NyX3Jlc3BvbnNlLAorCQkgICAgICAodm9pZCAqKXNjbiwgRkNfTUFYX1BEVVNaLCBGQ19SQV9UT1YpOworCisJYmZhX3NtX3NlbmRfZXZlbnQoc2NuLCBTQ05TTV9FVkVOVF9TQ1JfU0VOVCk7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3BvcnRfc2NuX3Njcl9yZXNwb25zZSh2b2lkICpmY3NhcmcsIHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwLAorCQkJICAgICAgdm9pZCAqY2JhcmcsIGJmYV9zdGF0dXNfdCByZXFfc3RhdHVzLAorCQkJICAgICAgdTMyIHJzcF9sZW4sIHUzMiByZXNpZF9sZW4sCisJCQkgICAgICBzdHJ1Y3QgZmNoc19zICpyc3BfZmNocykKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X3Njbl9zICpzY24gPSAoc3RydWN0IGJmYV9mY3NfcG9ydF9zY25fcyAqKWNiYXJnOworCXN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCA9IHNjbi0+cG9ydDsKKwlzdHJ1Y3QgZmNfZWxzX2NtZF9zICAgKmVsc19jbWQ7CisJc3RydWN0IGZjX2xzX3JqdF9zICAgICpsc19yanQ7CisKKwliZmFfdHJjKHBvcnQtPmZjcywgcG9ydC0+cG9ydF9jZmcucHd3bik7CisKKwkvKgorCSAqIFNhbml0eSBDaGVja3MKKwkgKi8KKwlpZiAocmVxX3N0YXR1cyAhPSBCRkFfU1RBVFVTX09LKSB7CisJCWJmYV90cmMocG9ydC0+ZmNzLCByZXFfc3RhdHVzKTsKKwkJYmZhX3NtX3NlbmRfZXZlbnQoc2NuLCBTQ05TTV9FVkVOVF9SU1BfRVJST1IpOworCQlyZXR1cm47CisJfQorCisJZWxzX2NtZCA9IChzdHJ1Y3QgZmNfZWxzX2NtZF9zICopIEJGQV9GQ1hQX1JTUF9QTEQoZmN4cCk7CisKKwlzd2l0Y2ggKGVsc19jbWQtPmVsc19jb2RlKSB7CisKKwljYXNlIEZDX0VMU19BQ0M6CisJCWJmYV9zbV9zZW5kX2V2ZW50KHNjbiwgU0NOU01fRVZFTlRfUlNQX09LKTsKKwkJYnJlYWs7CisKKwljYXNlIEZDX0VMU19MU19SSlQ6CisKKwkJbHNfcmp0ID0gKHN0cnVjdCBmY19sc19yanRfcyAqKSBCRkFfRkNYUF9SU1BfUExEKGZjeHApOworCisJCWJmYV90cmMocG9ydC0+ZmNzLCBsc19yanQtPnJlYXNvbl9jb2RlKTsKKwkJYmZhX3RyYyhwb3J0LT5mY3MsIGxzX3JqdC0+cmVhc29uX2NvZGVfZXhwbCk7CisKKwkJYmZhX3NtX3NlbmRfZXZlbnQoc2NuLCBTQ05TTV9FVkVOVF9SU1BfRVJST1IpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9zbV9zZW5kX2V2ZW50KHNjbiwgU0NOU01fRVZFTlRfUlNQX0VSUk9SKTsKKwl9Cit9CisKKy8qCisgKiBTZW5kIGEgTFMgQWNjZXB0CisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX3BvcnRfc2NuX3NlbmRfbHNfYWNjKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCwKKwkJCXN0cnVjdCBmY2hzX3MgKnJ4X2ZjaHMpCit7CisJc3RydWN0IGZjaHNfcyAgICAgICAgICBmY2hzOworCXN0cnVjdCBiZmFfZmN4cF9zICpmY3hwOworCXN0cnVjdCBiZmFfcnBvcnRfcyAqYmZhX3Jwb3J0ID0gTlVMTDsKKwlpbnQgICAgICAgICAgICAgbGVuOworCisJYmZhX3RyYyhwb3J0LT5mY3MsIHJ4X2ZjaHMtPnNfaWQpOworCisJZmN4cCA9IGJmYV9mY3NfZmN4cF9hbGxvYyhwb3J0LT5mY3MpOworCWlmICghZmN4cCkKKwkJcmV0dXJuOworCisJbGVuID0gZmNfbHNfYWNjX2J1aWxkKCZmY2hzLCBiZmFfZmN4cF9nZXRfcmVxYnVmKGZjeHApLCByeF9mY2hzLT5zX2lkLAorCQkJICAgICAgYmZhX2Zjc19wb3J0X2dldF9mY2lkKHBvcnQpLCByeF9mY2hzLT5veF9pZCk7CisKKwliZmFfZmN4cF9zZW5kKGZjeHAsIGJmYV9ycG9ydCwgcG9ydC0+ZmFicmljLT52Zl9pZCwgcG9ydC0+bHBfdGFnLAorCQkgICAgICBCRkFfRkFMU0UsIEZDX0NMQVNTXzMsIGxlbiwgJmZjaHMsIE5VTEwsIE5VTEwsCisJCSAgICAgIEZDX01BWF9QRFVTWiwgMCk7Cit9CisKKy8qKgorICogICAgIFRoaXMgcm91dGluZSB3aWxsIGJlIGNhbGxlZCBieSBiZmFfdGltZXIgb24gdGltZXIgdGltZW91dHMuCisgKgorICogCXBhcmFtW2luXSAJdnBvcnQgCQkJLSBwb2ludGVyIHRvIGJmYV9mY3NfcG9ydF90LgorICogCXBhcmFtW291dF0JdnBvcnRfc3RhdHVzIAktIHBvaW50ZXIgdG8gcmV0dXJuIHZwb3J0IHN0YXR1cyBpbgorICoKKyAqIAlyZXR1cm4KKyAqIAkJdm9pZAorICoKKyogIAlTcGVjaWFsIENvbnNpZGVyYXRpb25zOgorICoKKyAqIAlub3RlCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX3BvcnRfc2NuX3RpbWVvdXQodm9pZCAqYXJnKQoreworCXN0cnVjdCBiZmFfZmNzX3BvcnRfc2NuX3MgKnNjbiA9IChzdHJ1Y3QgYmZhX2Zjc19wb3J0X3Njbl9zICopYXJnOworCisJYmZhX3NtX3NlbmRfZXZlbnQoc2NuLCBTQ05TTV9FVkVOVF9USU1FT1VUKTsKK30KKworCisKKy8qKgorICogIGZjc19zY25fcHVibGljIEZDUyBzdGF0ZSBjaGFuZ2Ugbm90aWZpY2F0aW9uIHB1YmxpYyBpbnRlcmZhY2VzCisgKi8KKworLyoKKyAqIEZ1bmN0aW9ucyBjYWxsZWQgYnkgcG9ydC9mYWIKKyAqLwordm9pZAorYmZhX2Zjc19wb3J0X3Njbl9pbml0KHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCkKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X3Njbl9zICpzY24gPSBCRkFfRkNTX0dFVF9TQ05fRlJPTV9QT1JUKHBvcnQpOworCisJc2NuLT5wb3J0ID0gcG9ydDsKKwliZmFfc21fc2V0X3N0YXRlKHNjbiwgYmZhX2Zjc19wb3J0X3Njbl9zbV9vZmZsaW5lKTsKK30KKwordm9pZAorYmZhX2Zjc19wb3J0X3Njbl9vZmZsaW5lKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCkKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X3Njbl9zICpzY24gPSBCRkFfRkNTX0dFVF9TQ05fRlJPTV9QT1JUKHBvcnQpOworCisJc2NuLT5wb3J0ID0gcG9ydDsKKwliZmFfc21fc2VuZF9ldmVudChzY24sIFNDTlNNX0VWRU5UX1BPUlRfT0ZGTElORSk7Cit9CisKK3ZvaWQKK2JmYV9mY3NfcG9ydF9zY25fb25saW5lKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCkKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X3Njbl9zICpzY24gPSBCRkFfRkNTX0dFVF9TQ05fRlJPTV9QT1JUKHBvcnQpOworCisJc2NuLT5wb3J0ID0gcG9ydDsKKwliZmFfc21fc2VuZF9ldmVudChzY24sIFNDTlNNX0VWRU5UX1BPUlRfT05MSU5FKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9zY25fcG9ydGlkX3JzY24oc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LCB1MzIgcnBpZCkKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydDsKKworCWJmYV90cmMocG9ydC0+ZmNzLCBycGlkKTsKKworCS8qKgorCSAqIElmIHRoaXMgaXMgYW4gdW5rbm93biBkZXZpY2UsIHRoZW4gaXQganVzdCBjYW1lIG9ubGluZS4KKwkgKiBPdGhlcndpc2UgbGV0IHJwb3J0IGhhbmRsZSB0aGUgUlNDTiBldmVudC4KKwkgKi8KKwlycG9ydCA9IGJmYV9mY3NfcG9ydF9nZXRfcnBvcnRfYnlfcGlkKHBvcnQsIHJwaWQpOworCWlmIChycG9ydCA9PSBOVUxMKSB7CisJCS8qCisJCSAqIElmIG1pbiBjZmcgbW9kZSBpcyBlbmFibGVkLCB3ZSBkb25vdCBuZWVkIHRvCisJCSAqIGRpc2NvdmVyIGFueSBuZXcgcnBvcnRzLgorCQkgKi8KKwkJaWYgKCFfX2Zjc19taW5fY2ZnKHBvcnQtPmZjcykpCisJCQlycG9ydCA9IGJmYV9mY3NfcnBvcnRfY3JlYXRlKHBvcnQsIHJwaWQpOworCX0gZWxzZSB7CisJCWJmYV9mY3NfcnBvcnRfc2NuKHJwb3J0KTsKKwl9Cit9CisKKy8qKgorICogcnNjbiBmb3JtYXQgYmFzZWQgUElEIGNvbXBhcmlzb24KKyAqLworI2RlZmluZSBfX2ZjX3BpZF9tYXRjaChfX2MwLCBfX2MxLCBfX2ZtdCkJCVwKKwkoKChfX2ZtdCkgPT0gRkNfUlNDTl9GT1JNQVRfRkFCUklDKSB8fAkJXAorCSAoKChfX2ZtdCkgPT0gRkNfUlNDTl9GT1JNQVRfRE9NQUlOKSAmJgkJXAorCSAgKChfX2MwKVswXSA9PSAoX19jMSlbMF0pKSB8fAkJCVwKKwkgKCgoX19mbXQpID09IEZDX1JTQ05fRk9STUFUX0FSRUEpICYmCQlcCisJICAoKF9fYzApWzBdID09IChfX2MxKVswXSkgJiYJCQlcCisJICAoKF9fYzApWzFdID09IChfX2MxKVsxXSkpKQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X3Njbl9tdWx0aXBvcnRfcnNjbihzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQsCisJCQllbnVtIGZjX3JzY25fZm9ybWF0IGZvcm1hdCwgdTMyIHJzY25fcGlkKQoreworCXN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0OworCXN0cnVjdCBsaXN0X2hlYWQgKnFlLCAqcWVfbmV4dDsKKwl1OCAgICAgICAgKmMwLCAqYzE7CisKKwliZmFfdHJjKHBvcnQtPmZjcywgZm9ybWF0KTsKKwliZmFfdHJjKHBvcnQtPmZjcywgcnNjbl9waWQpOworCisJYzAgPSAodTggKikgJnJzY25fcGlkOworCisJbGlzdF9mb3JfZWFjaF9zYWZlKHFlLCBxZV9uZXh0LCAmcG9ydC0+cnBvcnRfcSkgeworCQlycG9ydCA9IChzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICopcWU7CisJCWMxID0gKHU4ICopICZycG9ydC0+cGlkOworCQlpZiAoX19mY19waWRfbWF0Y2goYzAsIGMxLCBmb3JtYXQpKQorCQkJYmZhX2Zjc19ycG9ydF9zY24ocnBvcnQpOworCX0KK30KKwordm9pZAorYmZhX2Zjc19wb3J0X3Njbl9wcm9jZXNzX3JzY24oc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LCBzdHJ1Y3QgZmNoc19zICpmY2hzLAorCQkJICAgICAgdTMyIGxlbikKK3sKKwlzdHJ1Y3QgZmNfcnNjbl9wbF9zICAgKnJzY24gPSAoc3RydWN0IGZjX3JzY25fcGxfcyAqKSAoZmNocyArIDEpOworCWludCAgICAgICAgICAgICBudW1fZW50cmllczsKKwl1MzIgICAgICAgIHJzY25fcGlkOworCWJmYV9ib29sZWFuX3QgICBuc3F1ZXJ5ID0gQkZBX0ZBTFNFOworCWludCAgICAgICAgICAgICBpID0gMDsKKworCW51bV9lbnRyaWVzID0KKwkJKGJmYV9vc19udG9ocyhyc2NuLT5wYXlsZGxlbikgLQorCQkgc2l6ZW9mKHUzMikpIC8gc2l6ZW9mKHJzY24tPmV2ZW50WzBdKTsKKworCWJmYV90cmMocG9ydC0+ZmNzLCBudW1fZW50cmllcyk7CisKKwlwb3J0LT5zdGF0cy5udW1fcnNjbisrOworCisJYmZhX2Zjc19wb3J0X3Njbl9zZW5kX2xzX2FjYyhwb3J0LCBmY2hzKTsKKworCWZvciAoaSA9IDA7IGkgPCBudW1fZW50cmllczsgaSsrKSB7CisJCXJzY25fcGlkID0gcnNjbi0+ZXZlbnRbaV0ucG9ydGlkOworCisJCWJmYV90cmMocG9ydC0+ZmNzLCByc2NuLT5ldmVudFtpXS5mb3JtYXQpOworCQliZmFfdHJjKHBvcnQtPmZjcywgcnNjbl9waWQpOworCisJCXN3aXRjaCAocnNjbi0+ZXZlbnRbaV0uZm9ybWF0KSB7CisJCWNhc2UgRkNfUlNDTl9GT1JNQVRfUE9SVElEOgorCQkJaWYgKHJzY24tPmV2ZW50W2ldLnF1YWxpZmllciA9PSBGQ19RT1NfUlNDTl9FVkVOVCkgeworCQkJCS8qCisJCQkJICogSWdub3JlIHRoaXMgZXZlbnQuIGYvdyB3b3VsZCBoYXZlIHByb2Nlc3NlZAorCQkJCSAqIGl0CisJCQkJICovCisJCQkJYmZhX3RyYyhwb3J0LT5mY3MsIHJzY25fcGlkKTsKKwkJCX0gZWxzZSB7CisJCQkJcG9ydC0+c3RhdHMubnVtX3BvcnRpZF9yc2NuKys7CisJCQkJYmZhX2Zjc19wb3J0X3Njbl9wb3J0aWRfcnNjbihwb3J0LCByc2NuX3BpZCk7CisJCQl9CisJCQlicmVhazsKKworCQljYXNlIEZDX1JTQ05fRk9STUFUX0ZBQlJJQzoKKwkJCWlmIChyc2NuLT5ldmVudFtpXS5xdWFsaWZpZXIgPT0KKwkJCSAgICBGQ19GQUJSSUNfTkFNRV9SU0NOX0VWRU5UKSB7CisJCQkJYmZhX2Zjc19wb3J0X21zX2ZhYnJpY19yc2NuKHBvcnQpOworCQkJCWJyZWFrOworCQkJfQorCQkJLyoKKwkJCSAqICEhISEhISEhISBGYWxsIFRocm91Z2ggISEhISEhISEhISEhIQorCQkJICovCisKKwkJY2FzZSBGQ19SU0NOX0ZPUk1BVF9BUkVBOgorCQljYXNlIEZDX1JTQ05fRk9STUFUX0RPTUFJTjoKKwkJCW5zcXVlcnkgPSBCRkFfVFJVRTsKKwkJCWJmYV9mY3NfcG9ydF9zY25fbXVsdGlwb3J0X3JzY24ocG9ydCwKKwkJCQkJCQlyc2NuLT5ldmVudFtpXS5mb3JtYXQsCisJCQkJCQkJcnNjbl9waWQpOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCWJmYV9hc3NlcnQoMCk7CisJCQluc3F1ZXJ5ID0gQkZBX1RSVUU7CisJCX0KKwl9CisKKwkvKioKKwkgKiBJZiBhbnkgb2YgYXJlYSwgZG9tYWluIG9yIGZhYnJpYyBSU0NOIGlzIHJlY2VpdmVkLCBkbyBhIGZyZXNoIGRpc2NvdmVyeQorCSAqIHRvIGZpbmQgbmV3IGRldmljZXMuCisJICovCisJaWYgKG5zcXVlcnkpCisJCWJmYV9mY3NfcG9ydF9uc19xdWVyeShwb3J0KTsKK30KKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL3ZmYXBpLmMgYi9kcml2ZXJzL3Njc2kvYmZhL3ZmYXBpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzFkODFmZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvdmZhcGkuYwpAQCAtMCwwICsxLDI5MiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisvKioKKyAqICB2ZmFwaS5jIEZhYnJpYyBtb2R1bGUgaW1wbGVtZW50YXRpb24uCisgKi8KKworI2luY2x1ZGUgImZjc19mYWJyaWMuaCIKKyNpbmNsdWRlICJmY3NfdHJjbW9kLmgiCisKK0JGQV9UUkNfRklMRShGQ1MsIFZGQVBJKTsKKworLyoqCisgKiAgZmNzX3ZmX2FwaSB2aXJ0dWFsIGZhYnJpY3MgQVBJCisgKi8KKworLyoqCisgKiAJCUVuYWJsZSBWRiBtb2RlLgorICoKKyAqIEBwYXJhbVtpbl0JCWZjcwkJZmNzIG1vZHVsZSBpbnN0YW5jZQorICogQHBhcmFtW2luXQkJdmZfaWQJCWRlZmF1bHQgdmZfaWQgb2YgcG9ydCwgRkNfVkZfSURfTlVMTAorICogCQkJCQl0byB1c2Ugc3RhbmRhcmQgZGVmYXVsdCB2Zl9pZCBvZiAxLgorICoKKyAqIEByZXR2YWwJQkZBX1NUQVRVU19PSwkJdmYgbW9kZSBpcyBlbmFibGVkCisgKiBAcmV0dmFsCUJGQV9TVEFUVVNfQlVTWQkJUG9ydCBpcyBhY3RpdmUuIFBvcnQgbXVzdCBiZSBkaXNhYmxlZAorICoJCQkJCWJlZm9yZSBWRiBtb2RlIGNhbiBiZSBlbmFibGVkLgorICovCitiZmFfc3RhdHVzX3QKK2JmYV9mY3NfdmZfbW9kZV9lbmFibGUoc3RydWN0IGJmYV9mY3NfcyAqZmNzLCB1MTYgdmZfaWQpCit7CisJcmV0dXJuIEJGQV9TVEFUVVNfT0s7Cit9CisKKy8qKgorICogCQlEaXNhYmxlIFZGIG1vZGUuCisgKgorICogQHBhcmFtW2luXQkJZmNzCQlmY3MgbW9kdWxlIGluc3RhbmNlCisgKgorICogQHJldHZhbAlCRkFfU1RBVFVTX09LCQl2ZiBtb2RlIGlzIGRpc2FibGVkCisgKiBAcmV0dmFsCUJGQV9TVEFUVVNfQlVTWQkJVkZzIGFyZSBwcmVzZW50IGFuZCBiZWluZyB1c2VkLiBBbGwKKyAqIAkJCQkJVkZzIG11c3QgYmUgZGVsZXRlZCBiZWZvcmUgZGlzYWJsaW5nCisgKgkJCQkJVkYgbW9kZS4KKyAqLworYmZhX3N0YXR1c190CitiZmFfZmNzX3ZmX21vZGVfZGlzYWJsZShzdHJ1Y3QgYmZhX2Zjc19zICpmY3MpCit7CisJcmV0dXJuIEJGQV9TVEFUVVNfT0s7Cit9CisKKy8qKgorICogCQlDcmVhdGUgYSBuZXcgVkYgaW5zdGFuY2UuCisgKgorICogIEEgbmV3IFZGIGlzIGNyZWF0ZWQgdXNpbmcgdGhlIGdpdmVuIFZGIGNvbmZpZ3VyYXRpb24uIEEgVkYgaXMgaWRlbnRpZmllZAorICogIGJ5IFZGIGlkLiBObyBkdXBsaWNhdGUgVkYgY3JlYXRpb24gaXMgYWxsb3dlZCB3aXRoIHRoZSBzYW1lIFZGIGlkLiBPbmNlCisgKiAgYSBWRiBpcyBjcmVhdGVkLCBWRiBpcyBhdXRvbWF0aWNhbGx5IHN0YXJ0ZWQgYWZ0ZXIgbGluayBpbml0aWFsaXphdGlvbgorICogIGFuZCBFVkZQIGV4Y2hhbmdlIGlzIGNvbXBsZXRlZC4KKyAqCisgKiAJcGFyYW1baW5dIHZmCQktIAlGQ1MgdmYgZGF0YSBzdHJ1Y3R1cmUuIE1lbW9yeSBpcworICoJCQkJCWFsbG9jYXRlZCBieSBjYWxsZXIgKGRyaXZlcikKKyAqIAlwYXJhbVtpbl0gZmNzIAkJLSAJRkNTIG1vZHVsZQorICogCXBhcmFtW2luXSB2Zl9jZmcJLSAJVkYgY29uZmlndXJhdGlvbgorICogCXBhcmFtW2luXSB2Zl9kcnYgCS0gCU9wYXF1ZSBoYW5kbGUgYmFjayB0byB0aGUgZHJpdmVyJ3MKKyAqCQkJCQl2aXJ0dWFsIHZmIHN0cnVjdHVyZQorICoKKyAqIAlyZXR2YWwgQkZBX1NUQVRVU19PSyBWRiBjcmVhdGlvbiBpcyBzdWNjZXNzZnVsCisgKiAJcmV0dmFsIEJGQV9TVEFUVVNfRkFJTEVEIFZGIGNyZWF0aW9uIGZhaWxlZAorICogCXJldHZhbCBCRkFfU1RBVFVTX0VFWElTVCBBIFZGIGV4aXN0cyB3aXRoIHRoZSBnaXZlbiB2Zl9pZAorICovCitiZmFfc3RhdHVzX3QKK2JmYV9mY3NfdmZfY3JlYXRlKGJmYV9mY3NfdmZfdCAqdmYsIHN0cnVjdCBiZmFfZmNzX3MgKmZjcywgdTE2IHZmX2lkLAorCQkgIHN0cnVjdCBiZmFfcG9ydF9jZmdfcyAqcG9ydF9jZmcsIHN0cnVjdCBiZmFkX3ZmX3MgKnZmX2RydikKK3sKKwliZmFfdHJjKGZjcywgdmZfaWQpOworCXJldHVybiBCRkFfU1RBVFVTX09LOworfQorCisvKioKKyAqICAJVXNlIHRoaXMgZnVuY3Rpb24gdG8gZGVsZXRlIGEgQkZBIFZGIG9iamVjdC4gVkYgb2JqZWN0IHNob3VsZAorICogCQliZSBzdG9wcGVkIGJlZm9yZSB0aGlzIGZ1bmN0aW9uIGNhbGwuCisgKgorICogCXBhcmFtW2luXSB2ZiAtIHBvaW50ZXIgdG8gYmZhX3ZmX3QuCisgKgorICogCXJldHZhbCBCRkFfU1RBVFVTX09LCU9uIHZmIGRlbGV0aW9uIHN1Y2Nlc3MKKyAqIAlyZXR2YWwgQkZBX1NUQVRVU19CVVNZIFZGIGlzIG5vdCBpbiBhIHN0b3BwZWQgc3RhdGUKKyAqIAlyZXR2YWwgQkZBX1NUQVRVU19JTlBST0dSRVNTIFZGIGRlbGV0aW9uIGluIGluIHByb2dyZXNzCisgKi8KK2JmYV9zdGF0dXNfdAorYmZhX2Zjc192Zl9kZWxldGUoYmZhX2Zjc192Zl90ICp2ZikKK3sKKwliZmFfdHJjKHZmLT5mY3MsIHZmLT52Zl9pZCk7CisJcmV0dXJuIEJGQV9TVEFUVVNfT0s7Cit9CisKKy8qKgorICogIAlTdGFydCBwYXJ0aWNpcGF0aW9uIGluIFZGLiBUaGlzIHRyaWdnZXJzIGxvZ2luIHRvIHRoZSB2aXJ0dWFsIGZhYnJpYy4KKyAqCisgKiAJcGFyYW1baW5dIHZmIC0gcG9pbnRlciB0byBiZmFfdmZfdC4KKyAqCisgKiAJcmV0dXJuIE5vbmUKKyAqLwordm9pZAorYmZhX2Zjc192Zl9zdGFydChiZmFfZmNzX3ZmX3QgKnZmKQoreworCWJmYV90cmModmYtPmZjcywgdmYtPnZmX2lkKTsKK30KKworLyoqCisgKiAgCUxvZ291dCB3aXRoIHRoZSB2aXJ0dWFsIGZhYnJpYy4KKyAqCisgKiAJcGFyYW1baW5dIHZmIC0gcG9pbnRlciB0byBiZmFfdmZfdC4KKyAqCisgKiAJcmV0dmFsIEJGQV9TVEFUVVNfT0sgCU9uIHN1Y2Nlc3MuCisgKiAJcmV0dmFsIEJGQV9TVEFUVVNfSU5QUk9HUkVTUyBWRiBpcyBiZWluZyBzdG9wcGVkLgorICovCitiZmFfc3RhdHVzX3QKK2JmYV9mY3NfdmZfc3RvcChiZmFfZmNzX3ZmX3QgKnZmKQoreworCWJmYV90cmModmYtPmZjcywgdmYtPnZmX2lkKTsKKwlyZXR1cm4gQkZBX1NUQVRVU19PSzsKK30KKworLyoqCisgKiAgCVJldHVybnMgYXR0cmlidXRlcyBvZiB0aGUgZ2l2ZW4gVkYuCisgKgorICogCXBhcmFtW2luXSAJdmYJCQlwb2ludGVyIHRvIGJmYV92Zl90LgorICogCXBhcmFtW291dF0gdmZfYXR0ciAJdmYgYXR0cmlidXRlcyByZXR1cm5lZAorICoKKyAqIAlyZXR1cm4gTm9uZQorICovCit2b2lkCitiZmFfZmNzX3ZmX2dldF9hdHRyKGJmYV9mY3NfdmZfdCAqdmYsIHN0cnVjdCBiZmFfdmZfYXR0cl9zICp2Zl9hdHRyKQoreworCWJmYV90cmModmYtPmZjcywgdmYtPnZmX2lkKTsKK30KKworLyoqCisgKiAJCVJldHVybiBzdGF0aXN0aWNzIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gdmYuCisgKgorICogCXBhcmFtW2luXSAJdmYJCQlwb2ludGVyIHRvIGJmYV92Zl90LgorICogCXBhcmFtW291dF0gdmZfc3RhdHMgCXZmIHN0YXRpc3RpY3MgcmV0dXJuZWQKKyAqCisgKiAgQHJldHVybiBOb25lCisgKi8KK3ZvaWQKK2JmYV9mY3NfdmZfZ2V0X3N0YXRzKGJmYV9mY3NfdmZfdCAqdmYsIHN0cnVjdCBiZmFfdmZfc3RhdHNfcyAqdmZfc3RhdHMpCit7CisJYmZhX29zX21lbWNweSh2Zl9zdGF0cywgJnZmLT5zdGF0cywgc2l6ZW9mKHN0cnVjdCBiZmFfdmZfc3RhdHNfcykpOworCXJldHVybjsKK30KKwordm9pZAorLyoqCisgKiAJCWNsZWFyIHN0YXRpc3RpY3MgYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbiB2Zi4KKyAqCisgKiAJcGFyYW1baW5dIAl2ZgkJCXBvaW50ZXIgdG8gYmZhX3ZmX3QuCisgKgorICogIEByZXR1cm4gTm9uZQorICovCitiZmFfZmNzX3ZmX2NsZWFyX3N0YXRzKGJmYV9mY3NfdmZfdCAqdmYpCit7CisJYmZhX29zX21lbXNldCgmdmYtPnN0YXRzLCAwLCBzaXplb2Yoc3RydWN0IGJmYV92Zl9zdGF0c19zKSk7CisJcmV0dXJuOworfQorCisvKioKKyAqICAJUmV0dXJucyBGQ1MgdmYgc3RydWN0dXJlIGZvciBhIGdpdmVuIHZmX2lkLgorICoKKyAqIAlwYXJhbVtpbl0gCXZmX2lkCQktIFZGX0lECisgKgorICogCXJldHVybgorICogCQlJZiBsb29rdXAgc3VjY2VlZHMsIHJldHVucyBmY3MgdmYgb2JqZWN0LCBvdGhlcndpc2UgcmV0dXJucyBOVUxMCisgKi8KK2JmYV9mY3NfdmZfdCAgICoKK2JmYV9mY3NfdmZfbG9va3VwKHN0cnVjdCBiZmFfZmNzX3MgKmZjcywgdTE2IHZmX2lkKQoreworCWJmYV90cmMoZmNzLCB2Zl9pZCk7CisJaWYgKHZmX2lkID09IEZDX1ZGX0lEX05VTEwpCisJCXJldHVybiAoJmZjcy0+ZmFicmljKTsKKworCS8qKgorCSAqIEB0b2RvIHZmIHN1cHBvcnQKKwkgKi8KKworCXJldHVybiBOVUxMOworfQorCisvKioKKyAqICAJUmV0dXJucyBkcml2ZXIgVkYgc3RydWN0dXJlIGZvciBhIGdpdmVuIEZDUyB2Zi4KKyAqCisgKiAJcGFyYW1baW5dIAl2ZgkJLSBwb2ludGVyIHRvIGJmYV92Zl90CisgKgorICogCXJldHVybiBEcml2ZXIgVkYgc3RydWN0dXJlCisgKi8KK3N0cnVjdCBiZmFkX3ZmX3MgICAgICAqCitiZmFfZmNzX3ZmX2dldF9kcnZfdmYoYmZhX2Zjc192Zl90ICp2ZikKK3sKKwliZmFfYXNzZXJ0KHZmKTsKKwliZmFfdHJjKHZmLT5mY3MsIHZmLT52Zl9pZCk7CisJcmV0dXJuIHZmLT52Zl9kcnY7Cit9CisKKy8qKgorICogIAlSZXR1cm4gdGhlIGxpc3Qgb2YgVkZzIGNvbmZpZ3VyZWQuCisgKgorICogCXBhcmFtW2luXQlmY3MJZmNzIG1vZHVsZSBpbnN0YW5jZQorICogCXBhcmFtW291dF0gCXZmX2lkcwlyZXR1cm5lZCBsaXN0IG9mIHZmX2lkcworICogCXBhcmFtW2luLG91dF0gCW52ZnMJaW46c2l6ZSBvZiB2Zl9pZHMgYXJyYXksCisgKiAJCQkJb3V0OnRvdGFsIGVsZW1lbnRzIHByZXNlbnQsCisgKiAJCQkJYWN0dWFsIGVsZW1lbnRzIHJldHVybmVkIGlzIGxpbWl0ZWQgYnkgdGhlIHNpemUKKyAqCisgKiAJcmV0dXJuIERyaXZlciBWRiBzdHJ1Y3R1cmUKKyAqLwordm9pZAorYmZhX2Zjc192Zl9saXN0KHN0cnVjdCBiZmFfZmNzX3MgKmZjcywgdTE2ICp2Zl9pZHMsIGludCAqbnZmcykKK3sKKwliZmFfdHJjKGZjcywgKm52ZnMpOworfQorCisvKioKKyAqICAJUmV0dXJuIHRoZSBsaXN0IG9mIGFsbCBWRnMgdmlzaWJsZSBmcm9tIGZhYnJpYy4KKyAqCisgKiAJcGFyYW1baW5dCWZjcwlmY3MgbW9kdWxlIGluc3RhbmNlCisgKiAJcGFyYW1bb3V0XSAJdmZfaWRzCXJldHVybmVkIGxpc3Qgb2YgdmZfaWRzCisgKiAJcGFyYW1baW4sb3V0XSAJbnZmcwlpbjpzaXplIG9mIHZmX2lkcyBhcnJheSwKKyAqCQkJCW91dDp0b3RhbCBlbGVtZW50cyBwcmVzZW50LAorICogCQkJCWFjdHVhbCBlbGVtZW50cyByZXR1cm5lZCBpcyBsaW1pdGVkIGJ5IHRoZSBzaXplCisgKgorICogCXJldHVybiBEcml2ZXIgVkYgc3RydWN0dXJlCisgKi8KK3ZvaWQKK2JmYV9mY3NfdmZfbGlzdF9hbGwoc3RydWN0IGJmYV9mY3NfcyAqZmNzLCB1MTYgKnZmX2lkcywgaW50ICpudmZzKQoreworCWJmYV90cmMoZmNzLCAqbnZmcyk7Cit9CisKKy8qKgorICogCQlSZXR1cm4gdGhlIGxpc3Qgb2YgbG9jYWwgbG9naWNhbCBwb3J0cyBwcmVzZW50IGluIHRoZSBnaXZlbiBWRi4KKyAqCisgKiAJcGFyYW1baW5dCXZmCXZmIGZvciB3aGljaCBsb2dpY2FsIHBvcnRzIGFyZSByZXR1cm5lZAorICogCXBhcmFtW291dF0gCWxwd3duCXJldHVybmVkIGxvZ2ljYWwgcG9ydCB3d24gbGlzdAorICogCXBhcmFtW2luLG91dF0gCW5scG9ydHMJaW46c2l6ZSBvZiBscHd3biBsaXN0OworICoJCQkJb3V0OnRvdGFsIGVsZW1lbnRzIHByZXNlbnQsCisgKiAJCQkJYWN0dWFsIGVsZW1lbnRzIHJldHVybmVkIGlzIGxpbWl0ZWQgYnkgdGhlIHNpemUKKyAqCisgKi8KK3ZvaWQKK2JmYV9mY3NfdmZfZ2V0X3BvcnRzKGJmYV9mY3NfdmZfdCAqdmYsIHd3bl90IGxwd3duW10sIGludCAqbmxwb3J0cykKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICAqcWU7CisJc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqdnBvcnQ7CisJaW50ICAgICAgICAgICAgIGk7CisJc3RydWN0IGJmYV9mY3NfcyAgICAgICpmY3M7CisKKwlpZiAodmYgPT0gTlVMTCB8fCBscHd3biA9PSBOVUxMIHx8ICpubHBvcnRzID09IDApCisJCXJldHVybjsKKworCWZjcyA9IHZmLT5mY3M7CisKKwliZmFfdHJjKGZjcywgdmYtPnZmX2lkKTsKKwliZmFfdHJjKGZjcywgKHUzMikgKm5scG9ydHMpOworCisJaSA9IDA7CisJbHB3d25baSsrXSA9IHZmLT5icG9ydC5wb3J0X2NmZy5wd3duOworCisJbGlzdF9mb3JfZWFjaChxZSwgJnZmLT52cG9ydF9xKSB7CisJCWlmIChpID49ICpubHBvcnRzKQorCQkJYnJlYWs7CisKKwkJdnBvcnQgPSAoc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqKSBxZTsKKwkJbHB3d25baSsrXSA9IHZwb3J0LT5scG9ydC5wb3J0X2NmZy5wd3duOworCX0KKworCWJmYV90cmMoZmNzLCBpKTsKKwkqbmxwb3J0cyA9IGk7CisJcmV0dXJuOworfQorCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvdnBvcnQuYyBiL2RyaXZlcnMvc2NzaS9iZmEvdnBvcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTBhZjA2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS92cG9ydC5jCkBAIC0wLDAgKzEsODkxIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKy8qKgorICogIGJmYV9mY3NfdnBvcnQuYyBGQ1MgdmlydHVhbCBwb3J0IHN0YXRlIG1hY2hpbmUKKyAqLworCisjaW5jbHVkZSA8YmZhLmg+CisjaW5jbHVkZSA8YmZhX3N2Yy5oPgorI2luY2x1ZGUgPGZjYnVpbGQuaD4KKyNpbmNsdWRlICJmY3NfZmFicmljLmgiCisjaW5jbHVkZSAiZmNzX2xwb3J0LmgiCisjaW5jbHVkZSAiZmNzX3Zwb3J0LmgiCisjaW5jbHVkZSAiZmNzX3RyY21vZC5oIgorI2luY2x1ZGUgImZjcy5oIgorI2luY2x1ZGUgPGFlbi9iZmFfYWVuX2xwb3J0Lmg+CisKK0JGQV9UUkNfRklMRShGQ1MsIFZQT1JUKTsKKworI2RlZmluZSBfX3Zwb3J0X2ZjcyhfX3ZwKSAgICAgICAoX192cCktPmxwb3J0LmZjcworI2RlZmluZSBfX3Zwb3J0X3B3d24oX192cCkgICAgICAoX192cCktPmxwb3J0LnBvcnRfY2ZnLnB3d24KKyNkZWZpbmUgX192cG9ydF9ud3duKF9fdnApICAgICAgKF9fdnApLT5scG9ydC5wb3J0X2NmZy5ud3duCisjZGVmaW5lIF9fdnBvcnRfYmZhKF9fdnApICAgICAgIChfX3ZwKS0+bHBvcnQuZmNzLT5iZmEKKyNkZWZpbmUgX192cG9ydF9mY2lkKF9fdnApICAgICAgKF9fdnApLT5scG9ydC5waWQKKyNkZWZpbmUgX192cG9ydF9mYWJyaWMoX192cCkgICAgKF9fdnApLT5scG9ydC5mYWJyaWMKKyNkZWZpbmUgX192cG9ydF92ZmlkKF9fdnApICAgICAgKF9fdnApLT5scG9ydC5mYWJyaWMtPnZmX2lkCisKKyNkZWZpbmUgQkZBX0ZDU19WUE9SVF9NQVhfUkVUUklFUyAgNQorLyoKKyAqIEZvcndhcmQgZGVjbGFyYXRpb25zCisgKi8KK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3Zwb3J0X2RvX2ZkaXNjKHN0cnVjdCBiZmFfZmNzX3Zwb3J0X3MgKnZwb3J0KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3Zwb3J0X3RpbWVvdXQodm9pZCAqdnBvcnRfYXJnKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3Zwb3J0X2RvX2xvZ28oc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqdnBvcnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfdnBvcnRfZnJlZShzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zICp2cG9ydCk7CisKKy8qKgorICogIGZjc192cG9ydF9zbSBGQ1MgdmlydHVhbCBwb3J0IHN0YXRlIG1hY2hpbmUKKyAqLworCisvKioKKyAqIFZQb3J0IFN0YXRlIE1hY2hpbmUgZXZlbnRzCisgKi8KK2VudW0gYmZhX2Zjc192cG9ydF9ldmVudCB7CisJQkZBX0ZDU19WUE9SVF9TTV9DUkVBVEUgPSAxLAkvKiAgdnBvcnQgY3JlYXRlIGV2ZW50ICovCisJQkZBX0ZDU19WUE9SVF9TTV9ERUxFVEUgPSAyLAkvKiAgdnBvcnQgZGVsZXRlIGV2ZW50ICovCisJQkZBX0ZDU19WUE9SVF9TTV9TVEFSVCA9IDMsCS8qICB2cG9ydCBzdGFydCByZXF1ZXN0ICovCisJQkZBX0ZDU19WUE9SVF9TTV9TVE9QID0gNCwJLyogIHN0b3A6IHVuc3VwcG9ydGVkICovCisJQkZBX0ZDU19WUE9SVF9TTV9PTkxJTkUgPSA1LAkvKiAgZmFicmljIG9ubGluZSAqLworCUJGQV9GQ1NfVlBPUlRfU01fT0ZGTElORSA9IDYsCS8qICBmYWJyaWMgb2ZmbGluZSBldmVudCAqLworCUJGQV9GQ1NfVlBPUlRfU01fRlJNU0VOVCA9IDcsCS8qICBmZGlzYy9sb2dvIHNlbnQgZXZlbnRzICovCisJQkZBX0ZDU19WUE9SVF9TTV9SU1BfT0sgPSA4LAkvKiAgZ29vZCByZXNwb25zZSAqLworCUJGQV9GQ1NfVlBPUlRfU01fUlNQX0VSUk9SID0gOSwJLyogIGVycm9yL2JhZCByZXNwb25zZSAqLworCUJGQV9GQ1NfVlBPUlRfU01fVElNRU9VVCA9IDEwLAkvKiAgZGVsYXkgdGltZXIgZXZlbnQgKi8KKwlCRkFfRkNTX1ZQT1JUX1NNX0RFTENPTVAgPSAxMSwJLyogIGxwb3J0IGRlbGV0ZSBjb21wbGV0aW9uICovCisJQkZBX0ZDU19WUE9SVF9TTV9SU1BfRFVQX1dXTiA9IDEyLAkvKiAgRHVwIHdubiBlcnJvciAqLworCUJGQV9GQ1NfVlBPUlRfU01fUlNQX0ZBSUxFRCA9IDEzLAkvKiAgbm9uLXJldHJ5YWJsZSBmYWlsdXJlICovCit9OworCitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc192cG9ydF9zbV91bmluaXQoc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqdnBvcnQsCisJCQkJCWVudW0gYmZhX2Zjc192cG9ydF9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc192cG9ydF9zbV9jcmVhdGVkKHN0cnVjdCBiZmFfZmNzX3Zwb3J0X3MgKnZwb3J0LAorCQkJCQkgZW51bSBiZmFfZmNzX3Zwb3J0X2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3Zwb3J0X3NtX29mZmxpbmUoc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqdnBvcnQsCisJCQkJCSBlbnVtIGJmYV9mY3NfdnBvcnRfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfdnBvcnRfc21fZmRpc2Moc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqdnBvcnQsCisJCQkJICAgICAgIGVudW0gYmZhX2Zjc192cG9ydF9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc192cG9ydF9zbV9mZGlzY19yZXRyeShzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zICp2cG9ydCwKKwkJCQkJICAgICBlbnVtIGJmYV9mY3NfdnBvcnRfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfdnBvcnRfc21fb25saW5lKHN0cnVjdCBiZmFfZmNzX3Zwb3J0X3MgKnZwb3J0LAorCQkJCQllbnVtIGJmYV9mY3NfdnBvcnRfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfdnBvcnRfc21fZGVsZXRpbmcoc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqdnBvcnQsCisJCQkJCSAgZW51bSBiZmFfZmNzX3Zwb3J0X2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3Zwb3J0X3NtX2NsZWFudXAoc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqdnBvcnQsCisJCQkJCSBlbnVtIGJmYV9mY3NfdnBvcnRfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfdnBvcnRfc21fbG9nbyhzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zICp2cG9ydCwKKwkJCQkgICAgICBlbnVtIGJmYV9mY3NfdnBvcnRfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfdnBvcnRfc21fZXJyb3Ioc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqdnBvcnQsCisJCQkJICAgICAgIGVudW0gYmZhX2Zjc192cG9ydF9ldmVudCBldmVudCk7CisKK3N0YXRpYyBzdHJ1Y3QgYmZhX3NtX3RhYmxlX3MgdnBvcnRfc21fdGFibGVbXSA9IHsKKwl7QkZBX1NNKGJmYV9mY3NfdnBvcnRfc21fdW5pbml0KSwgQkZBX0ZDU19WUE9SVF9VTklOSVR9LAorCXtCRkFfU00oYmZhX2Zjc192cG9ydF9zbV9jcmVhdGVkKSwgQkZBX0ZDU19WUE9SVF9DUkVBVEVEfSwKKwl7QkZBX1NNKGJmYV9mY3NfdnBvcnRfc21fb2ZmbGluZSksIEJGQV9GQ1NfVlBPUlRfT0ZGTElORX0sCisJe0JGQV9TTShiZmFfZmNzX3Zwb3J0X3NtX2ZkaXNjKSwgQkZBX0ZDU19WUE9SVF9GRElTQ30sCisJe0JGQV9TTShiZmFfZmNzX3Zwb3J0X3NtX2ZkaXNjX3JldHJ5KSwgQkZBX0ZDU19WUE9SVF9GRElTQ19SRVRSWX0sCisJe0JGQV9TTShiZmFfZmNzX3Zwb3J0X3NtX29ubGluZSksIEJGQV9GQ1NfVlBPUlRfT05MSU5FfSwKKwl7QkZBX1NNKGJmYV9mY3NfdnBvcnRfc21fZGVsZXRpbmcpLCBCRkFfRkNTX1ZQT1JUX0RFTEVUSU5HfSwKKwl7QkZBX1NNKGJmYV9mY3NfdnBvcnRfc21fY2xlYW51cCksIEJGQV9GQ1NfVlBPUlRfQ0xFQU5VUH0sCisJe0JGQV9TTShiZmFfZmNzX3Zwb3J0X3NtX2xvZ28pLCBCRkFfRkNTX1ZQT1JUX0xPR099LAorCXtCRkFfU00oYmZhX2Zjc192cG9ydF9zbV9lcnJvciksIEJGQV9GQ1NfVlBPUlRfRVJST1J9Cit9OworCisvKioKKyAqIEJlZ2lubmluZyBzdGF0ZS4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfdnBvcnRfc21fdW5pbml0KHN0cnVjdCBiZmFfZmNzX3Zwb3J0X3MgKnZwb3J0LAorCQkJZW51bSBiZmFfZmNzX3Zwb3J0X2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMoX192cG9ydF9mY3ModnBvcnQpLCBfX3Zwb3J0X3B3d24odnBvcnQpKTsKKwliZmFfdHJjKF9fdnBvcnRfZmNzKHZwb3J0KSwgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX0ZDU19WUE9SVF9TTV9DUkVBVEU6CisJCWJmYV9zbV9zZXRfc3RhdGUodnBvcnQsIGJmYV9mY3NfdnBvcnRfc21fY3JlYXRlZCk7CisJCWJmYV9mY3NfZmFicmljX2FkZHZwb3J0KF9fdnBvcnRfZmFicmljKHZwb3J0KSwgdnBvcnQpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqIENyZWF0ZWQgc3RhdGUgLSBhIHN0YXJ0IGV2ZW50IGlzIHJlcXVpcmVkIHRvIHN0YXJ0IHVwIHRoZSBzdGF0ZSBtYWNoaW5lLgorICovCitzdGF0aWMgdm9pZAorYmZhX2Zjc192cG9ydF9zbV9jcmVhdGVkKHN0cnVjdCBiZmFfZmNzX3Zwb3J0X3MgKnZwb3J0LAorCQkJIGVudW0gYmZhX2Zjc192cG9ydF9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKF9fdnBvcnRfZmNzKHZwb3J0KSwgX192cG9ydF9wd3duKHZwb3J0KSk7CisJYmZhX3RyYyhfX3Zwb3J0X2Zjcyh2cG9ydCksIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9GQ1NfVlBPUlRfU01fU1RBUlQ6CisJCWlmIChiZmFfZmNzX2ZhYnJpY19pc19vbmxpbmUoX192cG9ydF9mYWJyaWModnBvcnQpKQorCQkgICAgJiYgYmZhX2Zjc19mYWJyaWNfbnBpdl9jYXBhYmxlKF9fdnBvcnRfZmFicmljKHZwb3J0KSkpIHsKKwkJCWJmYV9zbV9zZXRfc3RhdGUodnBvcnQsIGJmYV9mY3NfdnBvcnRfc21fZmRpc2MpOworCQkJYmZhX2Zjc192cG9ydF9kb19mZGlzYyh2cG9ydCk7CisJCX0gZWxzZSB7CisJCQkvKioKKwkJCSAqIEZhYnJpYyBpcyBvZmZsaW5lIG9yIG5vdCBOUElWIGNhcGFibGUsIHN0YXkgaW4KKwkJCSAqIG9mZmxpbmUgc3RhdGUuCisJCQkgKi8KKwkJCXZwb3J0LT52cG9ydF9zdGF0cy5mYWJfbm9fbnBpdisrOworCQkJYmZhX3NtX3NldF9zdGF0ZSh2cG9ydCwgYmZhX2Zjc192cG9ydF9zbV9vZmZsaW5lKTsKKwkJfQorCQlicmVhazsKKworCWNhc2UgQkZBX0ZDU19WUE9SVF9TTV9ERUxFVEU6CisJCWJmYV9zbV9zZXRfc3RhdGUodnBvcnQsIGJmYV9mY3NfdnBvcnRfc21fY2xlYW51cCk7CisJCWJmYV9mY3NfcG9ydF9kZWxldGUoJnZwb3J0LT5scG9ydCk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfRkNTX1ZQT1JUX1NNX09OTElORToKKwljYXNlIEJGQV9GQ1NfVlBPUlRfU01fT0ZGTElORToKKwkJLyoqCisJCSAqIElnbm9yZSBPTkxJTkUvT0ZGTElORSBldmVudHMgZnJvbSBmYWJyaWMgdGlsbCB2cG9ydCBpcyBzdGFydGVkLgorCQkgKi8KKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworLyoqCisgKiBPZmZsaW5lIHN0YXRlIC0gYXdhaXRpbmcgT05MSU5FIGV2ZW50IGZyb20gZmFicmljIFNNLgorICovCitzdGF0aWMgdm9pZAorYmZhX2Zjc192cG9ydF9zbV9vZmZsaW5lKHN0cnVjdCBiZmFfZmNzX3Zwb3J0X3MgKnZwb3J0LAorCQkJIGVudW0gYmZhX2Zjc192cG9ydF9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKF9fdnBvcnRfZmNzKHZwb3J0KSwgX192cG9ydF9wd3duKHZwb3J0KSk7CisJYmZhX3RyYyhfX3Zwb3J0X2Zjcyh2cG9ydCksIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9GQ1NfVlBPUlRfU01fREVMRVRFOgorCQliZmFfc21fc2V0X3N0YXRlKHZwb3J0LCBiZmFfZmNzX3Zwb3J0X3NtX2NsZWFudXApOworCQliZmFfZmNzX3BvcnRfZGVsZXRlKCZ2cG9ydC0+bHBvcnQpOworCQlicmVhazsKKworCWNhc2UgQkZBX0ZDU19WUE9SVF9TTV9PTkxJTkU6CisJCWJmYV9zbV9zZXRfc3RhdGUodnBvcnQsIGJmYV9mY3NfdnBvcnRfc21fZmRpc2MpOworCQl2cG9ydC0+ZmRpc2NfcmV0cmllcyA9IDA7CisJCWJmYV9mY3NfdnBvcnRfZG9fZmRpc2ModnBvcnQpOworCQlicmVhazsKKworCWNhc2UgQkZBX0ZDU19WUE9SVF9TTV9PRkZMSU5FOgorCQkvKgorCQkgKiBUaGlzIGNhbiBoYXBwZW4gaWYgdGhlIHZwb3J0IGNvdWxkbid0IGJlIGluaXRpYWx6aWVkIGR1ZQorCQkgKiB0aGUgZmFjdCB0aGF0IHRoZSBucGl2IHdhcyBub3QgZW5hYmxlZCBvbiB0aGUgc3dpdGNoLiBJbgorCQkgKiB0aGF0IGNhc2Ugd2Ugd2lsbCBwdXQgdGhlIHZwb3J0IGluIG9mZmxpbmUgc3RhdGUuIEhvd2V2ZXIsCisJCSAqIHRoZSBsaW5rIGNhbiBnbyBkb3duIGFuZCBjYXVzZSB0aGUgdGhpcyBldmVudCB0byBiZSBzZW50IHdoZW4KKwkJICogd2UgYXJlIGFscmVhZHkgb2ZmbGluZS4gSWdub3JlIGl0LgorCQkgKi8KKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworLyoqCisgKiBGRElTQyBpcyBzZW50IGFuZCBhd2FpdGluZyByZXBseSBmcm9tIGZhYnJpYy4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfdnBvcnRfc21fZmRpc2Moc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqdnBvcnQsCisJCSAgICAgICBlbnVtIGJmYV9mY3NfdnBvcnRfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhfX3Zwb3J0X2Zjcyh2cG9ydCksIF9fdnBvcnRfcHd3bih2cG9ydCkpOworCWJmYV90cmMoX192cG9ydF9mY3ModnBvcnQpLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfRkNTX1ZQT1JUX1NNX0RFTEVURToKKwkJYmZhX3NtX3NldF9zdGF0ZSh2cG9ydCwgYmZhX2Zjc192cG9ydF9zbV9sb2dvKTsKKwkJYmZhX2xwc19kaXNjYXJkKHZwb3J0LT5scHMpOworCQliZmFfZmNzX3Zwb3J0X2RvX2xvZ28odnBvcnQpOworCQlicmVhazsKKworCWNhc2UgQkZBX0ZDU19WUE9SVF9TTV9PRkZMSU5FOgorCQliZmFfc21fc2V0X3N0YXRlKHZwb3J0LCBiZmFfZmNzX3Zwb3J0X3NtX29mZmxpbmUpOworCQliZmFfbHBzX2Rpc2NhcmQodnBvcnQtPmxwcyk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfRkNTX1ZQT1JUX1NNX1JTUF9PSzoKKwkJYmZhX3NtX3NldF9zdGF0ZSh2cG9ydCwgYmZhX2Zjc192cG9ydF9zbV9vbmxpbmUpOworCQliZmFfZmNzX3BvcnRfb25saW5lKCZ2cG9ydC0+bHBvcnQpOworCQlicmVhazsKKworCWNhc2UgQkZBX0ZDU19WUE9SVF9TTV9SU1BfRVJST1I6CisJCWJmYV9zbV9zZXRfc3RhdGUodnBvcnQsIGJmYV9mY3NfdnBvcnRfc21fZmRpc2NfcmV0cnkpOworCQliZmFfdGltZXJfc3RhcnQoX192cG9ydF9iZmEodnBvcnQpLCAmdnBvcnQtPnRpbWVyLAorCQkJCWJmYV9mY3NfdnBvcnRfdGltZW91dCwgdnBvcnQsCisJCQkJQkZBX0ZDU19SRVRSWV9USU1FT1VUKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9GQ1NfVlBPUlRfU01fUlNQX0ZBSUxFRDoKKwkJYmZhX3NtX3NldF9zdGF0ZSh2cG9ydCwgYmZhX2Zjc192cG9ydF9zbV9vZmZsaW5lKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9GQ1NfVlBPUlRfU01fUlNQX0RVUF9XV046CisJCWJmYV9zbV9zZXRfc3RhdGUodnBvcnQsIGJmYV9mY3NfdnBvcnRfc21fZXJyb3IpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqIEZESVNDIGF0dGVtcHQgZmFpbGVkIC0gYSB0aW1lciBpcyBhY3RpdmUgdG8gcmV0cnkgRkRJU0MuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX3Zwb3J0X3NtX2ZkaXNjX3JldHJ5KHN0cnVjdCBiZmFfZmNzX3Zwb3J0X3MgKnZwb3J0LAorCQkJICAgICBlbnVtIGJmYV9mY3NfdnBvcnRfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhfX3Zwb3J0X2Zjcyh2cG9ydCksIF9fdnBvcnRfcHd3bih2cG9ydCkpOworCWJmYV90cmMoX192cG9ydF9mY3ModnBvcnQpLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfRkNTX1ZQT1JUX1NNX0RFTEVURToKKwkJYmZhX3NtX3NldF9zdGF0ZSh2cG9ydCwgYmZhX2Zjc192cG9ydF9zbV9jbGVhbnVwKTsKKwkJYmZhX3RpbWVyX3N0b3AoJnZwb3J0LT50aW1lcik7CisJCWJmYV9mY3NfcG9ydF9kZWxldGUoJnZwb3J0LT5scG9ydCk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfRkNTX1ZQT1JUX1NNX09GRkxJTkU6CisJCWJmYV9zbV9zZXRfc3RhdGUodnBvcnQsIGJmYV9mY3NfdnBvcnRfc21fb2ZmbGluZSk7CisJCWJmYV90aW1lcl9zdG9wKCZ2cG9ydC0+dGltZXIpOworCQlicmVhazsKKworCWNhc2UgQkZBX0ZDU19WUE9SVF9TTV9USU1FT1VUOgorCQliZmFfc21fc2V0X3N0YXRlKHZwb3J0LCBiZmFfZmNzX3Zwb3J0X3NtX2ZkaXNjKTsKKwkJdnBvcnQtPnZwb3J0X3N0YXRzLmZkaXNjX3JldHJpZXMrKzsKKwkJdnBvcnQtPmZkaXNjX3JldHJpZXMrKzsKKwkJYmZhX2Zjc192cG9ydF9kb19mZGlzYyh2cG9ydCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKy8qKgorICogVnBvcnQgaXMgb25saW5lIChGRElTQyBpcyBjb21wbGV0ZSkuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX3Zwb3J0X3NtX29ubGluZShzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zICp2cG9ydCwKKwkJCWVudW0gYmZhX2Zjc192cG9ydF9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKF9fdnBvcnRfZmNzKHZwb3J0KSwgX192cG9ydF9wd3duKHZwb3J0KSk7CisJYmZhX3RyYyhfX3Zwb3J0X2Zjcyh2cG9ydCksIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9GQ1NfVlBPUlRfU01fREVMRVRFOgorCQliZmFfc21fc2V0X3N0YXRlKHZwb3J0LCBiZmFfZmNzX3Zwb3J0X3NtX2RlbGV0aW5nKTsKKwkJYmZhX2Zjc19wb3J0X2RlbGV0ZSgmdnBvcnQtPmxwb3J0KTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9GQ1NfVlBPUlRfU01fT0ZGTElORToKKwkJYmZhX3NtX3NldF9zdGF0ZSh2cG9ydCwgYmZhX2Zjc192cG9ydF9zbV9vZmZsaW5lKTsKKwkJYmZhX2xwc19kaXNjYXJkKHZwb3J0LT5scHMpOworCQliZmFfZmNzX3BvcnRfb2ZmbGluZSgmdnBvcnQtPmxwb3J0KTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworLyoqCisgKiBWcG9ydCBpcyBiZWluZyBkZWxldGVkIC0gYXdhaXRpbmcgbHBvcnQgZGVsZXRlIGNvbXBsZXRpb24gdG8gc2VuZAorICogTE9HTyB0byBmYWJyaWMuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX3Zwb3J0X3NtX2RlbGV0aW5nKHN0cnVjdCBiZmFfZmNzX3Zwb3J0X3MgKnZwb3J0LAorCQkJICBlbnVtIGJmYV9mY3NfdnBvcnRfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhfX3Zwb3J0X2Zjcyh2cG9ydCksIF9fdnBvcnRfcHd3bih2cG9ydCkpOworCWJmYV90cmMoX192cG9ydF9mY3ModnBvcnQpLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfRkNTX1ZQT1JUX1NNX0RFTEVURToKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9GQ1NfVlBPUlRfU01fREVMQ09NUDoKKwkJYmZhX3NtX3NldF9zdGF0ZSh2cG9ydCwgYmZhX2Zjc192cG9ydF9zbV9sb2dvKTsKKwkJYmZhX2Zjc192cG9ydF9kb19sb2dvKHZwb3J0KTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9GQ1NfVlBPUlRfU01fT0ZGTElORToKKwkJYmZhX3NtX3NldF9zdGF0ZSh2cG9ydCwgYmZhX2Zjc192cG9ydF9zbV9jbGVhbnVwKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworLyoqCisgKiBFcnJvciBTdGF0ZS4KKyAqIFRoaXMgc3RhdGUgd2lsbCBiZSBzZXQgd2hlbiB0aGUgVnBvcnQgQ3JlYXRpb24gZmFpbHMgZHVlIHRvIGVycm9ycyBsaWtlCisgKiBEdXAgV1dOLiBJbiB0aGlzIHN0YXRlIG9ubHkgb3BlcmF0aW9uIGFsbG93ZWQgaXMgYSBWcG9ydCBEZWxldGUuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX3Zwb3J0X3NtX2Vycm9yKHN0cnVjdCBiZmFfZmNzX3Zwb3J0X3MgKnZwb3J0LAorCQkgICAgICAgZW51bSBiZmFfZmNzX3Zwb3J0X2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMoX192cG9ydF9mY3ModnBvcnQpLCBfX3Zwb3J0X3B3d24odnBvcnQpKTsKKwliZmFfdHJjKF9fdnBvcnRfZmNzKHZwb3J0KSwgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX0ZDU19WUE9SVF9TTV9ERUxFVEU6CisJCWJmYV9zbV9zZXRfc3RhdGUodnBvcnQsIGJmYV9mY3NfdnBvcnRfc21fdW5pbml0KTsKKwkJYmZhX2Zjc192cG9ydF9mcmVlKHZwb3J0KTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfdHJjKF9fdnBvcnRfZmNzKHZwb3J0KSwgZXZlbnQpOworCX0KK30KKworLyoqCisgKiBMcG9ydCBjbGVhbnVwIGlzIGluIHByb2dyZXNzIHNpbmNlIHZwb3J0IGlzIGJlaW5nIGRlbGV0ZWQuIEZhYnJpYyBpcworICogb2ZmbGluZSwgc28gbm8gTE9HTyBpcyBuZWVkZWQgdG8gY29tcGxldGUgdnBvcnQgZGVsZXRpb24uCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX3Zwb3J0X3NtX2NsZWFudXAoc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqdnBvcnQsCisJCQkgZW51bSBiZmFfZmNzX3Zwb3J0X2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMoX192cG9ydF9mY3ModnBvcnQpLCBfX3Zwb3J0X3B3d24odnBvcnQpKTsKKwliZmFfdHJjKF9fdnBvcnRfZmNzKHZwb3J0KSwgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX0ZDU19WUE9SVF9TTV9ERUxDT01QOgorCQliZmFfc21fc2V0X3N0YXRlKHZwb3J0LCBiZmFfZmNzX3Zwb3J0X3NtX3VuaW5pdCk7CisJCWJmYV9mY3NfdnBvcnRfZnJlZSh2cG9ydCk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfRkNTX1ZQT1JUX1NNX0RFTEVURToKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworLyoqCisgKiBMT0dPIGlzIHNlbnQgdG8gZmFicmljLiBWcG9ydCBkZWxldGUgaXMgaW4gcHJvZ3Jlc3MuIExwb3J0IGRlbGV0ZSBjbGVhbnVwCisgKiBpcyBkb25lLgorICovCitzdGF0aWMgdm9pZAorYmZhX2Zjc192cG9ydF9zbV9sb2dvKHN0cnVjdCBiZmFfZmNzX3Zwb3J0X3MgKnZwb3J0LAorCQkgICAgICBlbnVtIGJmYV9mY3NfdnBvcnRfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhfX3Zwb3J0X2Zjcyh2cG9ydCksIF9fdnBvcnRfcHd3bih2cG9ydCkpOworCWJmYV90cmMoX192cG9ydF9mY3ModnBvcnQpLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfRkNTX1ZQT1JUX1NNX09GRkxJTkU6CisJCWJmYV9scHNfZGlzY2FyZCh2cG9ydC0+bHBzKTsKKwkJLyoKKwkJICogISEhIGZhbGwgdGhyb3VnaCAhISEKKwkJICovCisKKwljYXNlIEJGQV9GQ1NfVlBPUlRfU01fUlNQX09LOgorCWNhc2UgQkZBX0ZDU19WUE9SVF9TTV9SU1BfRVJST1I6CisJCWJmYV9zbV9zZXRfc3RhdGUodnBvcnQsIGJmYV9mY3NfdnBvcnRfc21fdW5pbml0KTsKKwkJYmZhX2Zjc192cG9ydF9mcmVlKHZwb3J0KTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9GQ1NfVlBPUlRfU01fREVMRVRFOgorCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisKKworLyoqCisgKiAgZmNzX3Zwb3J0X3ByaXZhdGUgRkNTIHZpcnR1YWwgcG9ydCBwcml2YXRlIGZ1bmN0aW9ucworICovCisKKy8qKgorICogU2VuZCBBRU4gbm90aWZpY2F0aW9uCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX3Zwb3J0X2Flbl9wb3N0KGJmYV9mY3NfbHBvcnRfdCAqcG9ydCwgZW51bSBiZmFfbHBvcnRfYWVuX2V2ZW50IGV2ZW50KQoreworCXVuaW9uIGJmYV9hZW5fZGF0YV91IGFlbl9kYXRhOworCXN0cnVjdCBiZmFfbG9nX21vZF9zICpsb2dtb2QgPSBwb3J0LT5mY3MtPmxvZ207CisJZW51bSBiZmFfcG9ydF9yb2xlIHJvbGUgPSBwb3J0LT5wb3J0X2NmZy5yb2xlczsKKwl3d25fdCAgICAgICAgICAgbHB3d24gPSBiZmFfZmNzX3BvcnRfZ2V0X3B3d24ocG9ydCk7CisJY2hhciAgICAgICAgICAgIGxwd3duX3B0cltCRkFfU1RSSU5HXzMyXTsKKwljaGFyICAgICAgICAgICAqcm9sZV9zdHJbQkZBX1BPUlRfUk9MRV9GQ1BfTUFYIC8gMiArIDFdID0KKwkJeyAiSW5pdGlhdG9yIiwgIlRhcmdldCIsICJJUEZDIiB9OworCisJd3duMnN0cihscHd3bl9wdHIsIGxwd3duKTsKKworCWJmYV9hc3NlcnQocm9sZSA8PSBCRkFfUE9SVF9ST0xFX0ZDUF9NQVgpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX0xQT1JUX0FFTl9OUElWX0RVUF9XV046CisJCWJmYV9sb2cobG9nbW9kLCBCRkFfQUVOX0xQT1JUX05QSVZfRFVQX1dXTiwgbHB3d25fcHRyLAorCQkJcm9sZV9zdHJbcm9sZSAvIDJdKTsKKwkJYnJlYWs7CisJY2FzZSBCRkFfTFBPUlRfQUVOX05QSVZfRkFCUklDX01BWDoKKwkJYmZhX2xvZyhsb2dtb2QsIEJGQV9BRU5fTFBPUlRfTlBJVl9GQUJSSUNfTUFYLCBscHd3bl9wdHIsCisJCQlyb2xlX3N0cltyb2xlIC8gMl0pOworCQlicmVhazsKKwljYXNlIEJGQV9MUE9SVF9BRU5fTlBJVl9VTktOT1dOOgorCQliZmFfbG9nKGxvZ21vZCwgQkZBX0FFTl9MUE9SVF9OUElWX1VOS05PV04sIGxwd3duX3B0ciwKKwkJCXJvbGVfc3RyW3JvbGUgLyAyXSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCWFlbl9kYXRhLmxwb3J0LnZmX2lkID0gcG9ydC0+ZmFicmljLT52Zl9pZDsKKwlhZW5fZGF0YS5scG9ydC5yb2xlcyA9IHJvbGU7CisJYWVuX2RhdGEubHBvcnQucHB3d24gPQorCQliZmFfZmNzX3BvcnRfZ2V0X3B3d24oYmZhX2Zjc19nZXRfYmFzZV9wb3J0KHBvcnQtPmZjcykpOworCWFlbl9kYXRhLmxwb3J0Lmxwd3duID0gbHB3d247Cit9CisKKy8qKgorICogVGhpcyByb3V0aW5lIHdpbGwgYmUgY2FsbGVkIHRvIHNlbmQgYSBGRElTQyBjb21tYW5kLgorICovCitzdGF0aWMgdm9pZAorYmZhX2Zjc192cG9ydF9kb19mZGlzYyhzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zICp2cG9ydCkKK3sKKwliZmFfbHBzX2ZkaXNjKHZwb3J0LT5scHMsIHZwb3J0LAorCQkgICAgICBiZmFfcHBvcnRfZ2V0X21heGZyc2l6ZShfX3Zwb3J0X2JmYSh2cG9ydCkpLAorCQkgICAgICBfX3Zwb3J0X3B3d24odnBvcnQpLCBfX3Zwb3J0X253d24odnBvcnQpKTsKKwl2cG9ydC0+dnBvcnRfc3RhdHMuZmRpc2Nfc2VudCsrOworfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc192cG9ydF9mZGlzY19yZWplY3RlZChzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zICp2cG9ydCkKK3sKKwl1OCAgICAgICAgIGxzcmp0X3JzbiA9IGJmYV9scHNfZ2V0X2xzcmp0X3Jzbih2cG9ydC0+bHBzKTsKKwl1OCAgICAgICAgIGxzcmp0X2V4cGwgPSBiZmFfbHBzX2dldF9sc3JqdF9leHBsKHZwb3J0LT5scHMpOworCisJYmZhX3RyYyhfX3Zwb3J0X2Zjcyh2cG9ydCksIGxzcmp0X3Jzbik7CisJYmZhX3RyYyhfX3Zwb3J0X2Zjcyh2cG9ydCksIGxzcmp0X2V4cGwpOworCisJLyoKKwkgKiBGb3IgY2VydGFpbiByZWFzb24gY29kZXMsIHdlIGRvbid0IHdhbnQgdG8gcmV0cnkuCisJICovCisJc3dpdGNoIChiZmFfbHBzX2dldF9sc3JqdF9leHBsKHZwb3J0LT5scHMpKSB7CisJY2FzZSBGQ19MU19SSlRfRVhQX0lOVl9QT1JUX05BTUU6CS8qIGJ5IGJyb2NhZGUgKi8KKwljYXNlIEZDX0xTX1JKVF9FWFBfSU5WQUxJRF9OUE9SVF9JRDoJLyogYnkgQ2lzY28gKi8KKwkJaWYgKHZwb3J0LT5mZGlzY19yZXRyaWVzIDwgQkZBX0ZDU19WUE9SVF9NQVhfUkVUUklFUykKKwkJCWJmYV9zbV9zZW5kX2V2ZW50KHZwb3J0LCBCRkFfRkNTX1ZQT1JUX1NNX1JTUF9FUlJPUik7CisJCWVsc2UgeworCQkJYmZhX2Zjc192cG9ydF9hZW5fcG9zdCgmdnBvcnQtPmxwb3J0LAorCQkJCQkgICAgICAgQkZBX0xQT1JUX0FFTl9OUElWX0RVUF9XV04pOworCQkJYmZhX3NtX3NlbmRfZXZlbnQodnBvcnQsIEJGQV9GQ1NfVlBPUlRfU01fUlNQX0RVUF9XV04pOworCQl9CisJCWJyZWFrOworCisJY2FzZSBGQ19MU19SSlRfRVhQX0lOU1VGRl9SRVM6CisJCS8qCisJCSAqIFRoaXMgbWVhbnMgbWF4IGxvZ2lucyBwZXIgcG9ydC9zd2l0Y2ggc2V0dGluZyBvbiB0aGUKKwkJICogc3dpdGNoIHdhcyBleGNlZWRlZC4KKwkJICovCisJCWlmICh2cG9ydC0+ZmRpc2NfcmV0cmllcyA8IEJGQV9GQ1NfVlBPUlRfTUFYX1JFVFJJRVMpCisJCQliZmFfc21fc2VuZF9ldmVudCh2cG9ydCwgQkZBX0ZDU19WUE9SVF9TTV9SU1BfRVJST1IpOworCQllbHNlIHsKKwkJCWJmYV9mY3NfdnBvcnRfYWVuX3Bvc3QoJnZwb3J0LT5scG9ydCwKKwkJCQkJICAgICAgIEJGQV9MUE9SVF9BRU5fTlBJVl9GQUJSSUNfTUFYKTsKKwkJCWJmYV9zbV9zZW5kX2V2ZW50KHZwb3J0LCBCRkFfRkNTX1ZQT1JUX1NNX1JTUF9GQUlMRUQpOworCQl9CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJaWYgKHZwb3J0LT5mZGlzY19yZXRyaWVzID09IDApCS8qIFByaW50IG9ubHkgb25jZSAqLworCQkJYmZhX2Zjc192cG9ydF9hZW5fcG9zdCgmdnBvcnQtPmxwb3J0LAorCQkJCQkgICAgICAgQkZBX0xQT1JUX0FFTl9OUElWX1VOS05PV04pOworCQliZmFfc21fc2VuZF9ldmVudCh2cG9ydCwgQkZBX0ZDU19WUE9SVF9TTV9SU1BfRVJST1IpOworCX0KK30KKworLyoqCisgKiAJQ2FsbGVkIHRvIHNlbmQgYSBsb2dvdXQgdG8gdGhlIGZhYnJpYy4gVXNlZCB3aGVuIGEgVi1Qb3J0IGlzCisgKiAJZGVsZXRlZC9zdG9wcGVkLgorICovCitzdGF0aWMgdm9pZAorYmZhX2Zjc192cG9ydF9kb19sb2dvKHN0cnVjdCBiZmFfZmNzX3Zwb3J0X3MgKnZwb3J0KQoreworCWJmYV90cmMoX192cG9ydF9mY3ModnBvcnQpLCBfX3Zwb3J0X3B3d24odnBvcnQpKTsKKworCXZwb3J0LT52cG9ydF9zdGF0cy5sb2dvX3NlbnQrKzsKKwliZmFfbHBzX2ZkaXNjbG9nbyh2cG9ydC0+bHBzKTsKK30KKworLyoqCisgKiAgICAgVGhpcyByb3V0aW5lIHdpbGwgYmUgY2FsbGVkIGJ5IGJmYV90aW1lciBvbiB0aW1lciB0aW1lb3V0cy4KKyAqCisgKiAJcGFyYW1baW5dIAl2cG9ydCAJCS0gcG9pbnRlciB0byBiZmFfZmNzX3Zwb3J0X3QuCisgKiAJcGFyYW1bb3V0XQl2cG9ydF9zdGF0dXMgCS0gcG9pbnRlciB0byByZXR1cm4gdnBvcnQgc3RhdHVzIGluCisgKgorICogCXJldHVybgorICogCQl2b2lkCisgKgorKiAJU3BlY2lhbCBDb25zaWRlcmF0aW9uczoKKyAqCisgKiAJbm90ZQorICovCitzdGF0aWMgdm9pZAorYmZhX2Zjc192cG9ydF90aW1lb3V0KHZvaWQgKnZwb3J0X2FyZykKK3sKKwlzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zICp2cG9ydCA9IChzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zICopdnBvcnRfYXJnOworCisJdnBvcnQtPnZwb3J0X3N0YXRzLmZkaXNjX3RpbWVvdXRzKys7CisJYmZhX3NtX3NlbmRfZXZlbnQodnBvcnQsIEJGQV9GQ1NfVlBPUlRfU01fVElNRU9VVCk7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3Zwb3J0X2ZyZWUoc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqdnBvcnQpCit7CisJYmZhX2Zjc19mYWJyaWNfZGVsdnBvcnQoX192cG9ydF9mYWJyaWModnBvcnQpLCB2cG9ydCk7CisJYmZhX2ZjYl92cG9ydF9kZWxldGUodnBvcnQtPnZwb3J0X2Rydik7CisJYmZhX2xwc19kZWxldGUodnBvcnQtPmxwcyk7Cit9CisKKworCisvKioKKyAqICBmY3NfdnBvcnRfcHVibGljIEZDUyB2aXJ0dWFsIHBvcnQgcHVibGljIGludGVyZmFjZXMKKyAqLworCisvKioKKyAqIE9ubGluZSBub3RpZmljYXRpb24gZnJvbSBmYWJyaWMgU00uCisgKi8KK3ZvaWQKK2JmYV9mY3NfdnBvcnRfb25saW5lKHN0cnVjdCBiZmFfZmNzX3Zwb3J0X3MgKnZwb3J0KQoreworCXZwb3J0LT52cG9ydF9zdGF0cy5mYWJfb25saW5lKys7CisJYmZhX3NtX3NlbmRfZXZlbnQodnBvcnQsIEJGQV9GQ1NfVlBPUlRfU01fT05MSU5FKTsKK30KKworLyoqCisgKiBPZmZsaW5lIG5vdGlmaWNhdGlvbiBmcm9tIGZhYnJpYyBTTS4KKyAqLwordm9pZAorYmZhX2Zjc192cG9ydF9vZmZsaW5lKHN0cnVjdCBiZmFfZmNzX3Zwb3J0X3MgKnZwb3J0KQoreworCXZwb3J0LT52cG9ydF9zdGF0cy5mYWJfb2ZmbGluZSsrOworCWJmYV9zbV9zZW5kX2V2ZW50KHZwb3J0LCBCRkFfRkNTX1ZQT1JUX1NNX09GRkxJTkUpOworfQorCisvKioKKyAqIENsZWFudXAgbm90aWZpY2F0aW9uIGZyb20gZmFicmljIFNNIG9uIGxpbmsgdGltZXIgZXhwaXJ5LgorICovCit2b2lkCitiZmFfZmNzX3Zwb3J0X2NsZWFudXAoc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqdnBvcnQpCit7CisJdnBvcnQtPnZwb3J0X3N0YXRzLmZhYl9jbGVhbnVwKys7Cit9CisKKy8qKgorICogRGVsZXRlIGNvbXBsZXRpb24gY2FsbGJhY2sgZnJvbSBhc3NvY2lhdGVkIGxwb3J0CisgKi8KK3ZvaWQKK2JmYV9mY3NfdnBvcnRfZGVsZXRlX2NvbXAoc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqdnBvcnQpCit7CisJYmZhX3NtX3NlbmRfZXZlbnQodnBvcnQsIEJGQV9GQ1NfVlBPUlRfU01fREVMQ09NUCk7Cit9CisKKy8qKgorICogICBNb2R1bGUgaW5pdGlhbGl6YXRpb24KKyAqLwordm9pZAorYmZhX2Zjc192cG9ydF9tb2Rpbml0KHN0cnVjdCBiZmFfZmNzX3MgKmZjcykKK3sKK30KKworLyoqCisgKiAgIE1vZHVsZSBjbGVhbnVwCisgKi8KK3ZvaWQKK2JmYV9mY3NfdnBvcnRfbW9kZXhpdChzdHJ1Y3QgYmZhX2Zjc19zICpmY3MpCit7CisJYmZhX2Zjc19tb2RleGl0X2NvbXAoZmNzKTsKK30KKwordTMyCitiZmFfZmNzX3Zwb3J0X2dldF9tYXgoc3RydWN0IGJmYV9mY3NfcyAqZmNzKQoreworCXN0cnVjdCBiZmFfaW9jX2F0dHJfcyBpb2NfYXR0cjsKKworCWJmYV9nZXRfYXR0cihmY3MtPmJmYSwgJmlvY19hdHRyKTsKKworCWlmIChpb2NfYXR0ci5wY2lfYXR0ci5kZXZpY2VfaWQgPT0gQkZBX1BDSV9ERVZJQ0VfSURfQ1QpCisJCXJldHVybiAoQkZBX0ZDU19NQVhfVlBPUlRTX1NVUFBfQ1QpOworCWVsc2UKKwkJcmV0dXJuIChCRkFfRkNTX01BWF9WUE9SVFNfU1VQUF9DQik7Cit9CisKKworCisvKioKKyAqICBmY3NfdnBvcnRfYXBpIFZpcnR1YWwgcG9ydCBBUEkKKyAqLworCisvKioKKyAqICAJVXNlIHRoaXMgZnVuY3Rpb24gdG8gaW5zdGFudGlhdGUgYSBuZXcgRkNTIHZwb3J0IG9iamVjdC4gVGhpcworICogCWZ1bmN0aW9uIHdpbGwgbm90IHRyaWdnZXIgYW55IEhXIGluaXRpYWxpemF0aW9uIHByb2Nlc3MgKHdoaWNoIHdpbGwgYmUKKyAqIAlkb25lIGluIHZwb3J0X3N0YXJ0KCkgY2FsbCkKKyAqCisgKiAJcGFyYW1baW5dIHZwb3J0CS0gCXBvaW50ZXIgdG8gYmZhX2Zjc192cG9ydF90LiBUaGlzIHNwYWNlCisgKiAJCQkJCW5lZWRzIHRvIGJlIGFsbG9jYXRlZCBieSB0aGUgZHJpdmVyLgorICogCXBhcmFtW2luXSBmY3MgCQktIAlGQ1MgaW5zdGFuY2UKKyAqIAlwYXJhbVtpbl0gdnBvcnRfY2ZnCS0gCXZwb3J0IGNvbmZpZ3VyYXRpb24KKyAqIAlwYXJhbVtpbl0gdmZfaWQgICAgCS0gCVZGX0lEIGlmIHZwb3J0IGlzIGNyZWF0ZWQgd2l0aGluIGEgVkYuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgCQlGQ19WRl9JRF9OVUxMIHRvIHNwZWNpZnkgYmFzZSBmYWJyaWMuCisgKiAJcGFyYW1baW5dIHZwb3J0X2RydiAJLSAJT3BhcXVlIGhhbmRsZSBiYWNrIHRvIHRoZSBkcml2ZXIncyB2cG9ydAorICogCQkJCQlzdHJ1Y3R1cmUKKyAqCisgKiAJcmV0dmFsIEJGQV9TVEFUVVNfT0sgLSBvbiBzdWNjZXNzLgorICogCXJldHZhbCBCRkFfU1RBVFVTX0ZBSUxFRCAtIG9uIGZhaWx1cmUuCisgKi8KK2JmYV9zdGF0dXNfdAorYmZhX2Zjc192cG9ydF9jcmVhdGUoc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqdnBvcnQsIHN0cnVjdCBiZmFfZmNzX3MgKmZjcywKKwkJICAgICB1MTYgdmZfaWQsIHN0cnVjdCBiZmFfcG9ydF9jZmdfcyAqdnBvcnRfY2ZnLAorCQkgICAgIHN0cnVjdCBiZmFkX3Zwb3J0X3MgKnZwb3J0X2RydikKK3sKKwlpZiAodnBvcnRfY2ZnLT5wd3duID09IDApCisJCXJldHVybiAoQkZBX1NUQVRVU19JTlZBTElEX1dXTik7CisKKwlpZiAoYmZhX2Zjc19wb3J0X2dldF9wd3duKCZmY3MtPmZhYnJpYy5icG9ydCkgPT0gdnBvcnRfY2ZnLT5wd3duKQorCQlyZXR1cm4gQkZBX1NUQVRVU19WUE9SVF9XV05fQlA7CisKKwlpZiAoYmZhX2Zjc192cG9ydF9sb29rdXAoZmNzLCB2Zl9pZCwgdnBvcnRfY2ZnLT5wd3duKSAhPSBOVUxMKQorCQlyZXR1cm4gQkZBX1NUQVRVU19WUE9SVF9FWElTVFM7CisKKwlpZiAoYmZhX2Zjc19mYWJyaWNfdnBvcnRfY291bnQoJmZjcy0+ZmFicmljKSA9PQorCSAgICBiZmFfZmNzX3Zwb3J0X2dldF9tYXgoZmNzKSkKKwkJcmV0dXJuIEJGQV9TVEFUVVNfVlBPUlRfTUFYOworCisJdnBvcnQtPmxwcyA9IGJmYV9scHNfYWxsb2MoZmNzLT5iZmEpOworCWlmICghdnBvcnQtPmxwcykKKwkJcmV0dXJuIEJGQV9TVEFUVVNfVlBPUlRfTUFYOworCisJdnBvcnQtPnZwb3J0X2RydiA9IHZwb3J0X2RydjsKKwliZmFfc21fc2V0X3N0YXRlKHZwb3J0LCBiZmFfZmNzX3Zwb3J0X3NtX3VuaW5pdCk7CisKKwliZmFfZmNzX2xwb3J0X2luaXQoJnZwb3J0LT5scG9ydCwgZmNzLCB2Zl9pZCwgdnBvcnRfY2ZnLCB2cG9ydCk7CisKKwliZmFfc21fc2VuZF9ldmVudCh2cG9ydCwgQkZBX0ZDU19WUE9SVF9TTV9DUkVBVEUpOworCisJcmV0dXJuIEJGQV9TVEFUVVNfT0s7Cit9CisKKy8qKgorICogIAlVc2UgdGhpcyBmdW5jdGlvbiBpbml0aWFsaXplIHRoZSB2cG9ydC4KKyAqCisgKiAgQHBhcmFtW2luXSB2cG9ydCAtIHBvaW50ZXIgdG8gYmZhX2Zjc192cG9ydF90LgorICoKKyAqICBAcmV0dXJucyBOb25lCisgKi8KK2JmYV9zdGF0dXNfdAorYmZhX2Zjc192cG9ydF9zdGFydChzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zICp2cG9ydCkKK3sKKwliZmFfc21fc2VuZF9ldmVudCh2cG9ydCwgQkZBX0ZDU19WUE9SVF9TTV9TVEFSVCk7CisKKwlyZXR1cm4gQkZBX1NUQVRVU19PSzsKK30KKworLyoqCisgKiAgCVVzZSB0aGlzIGZ1bmN0aW9uIHF1aWVzZSB0aGUgdnBvcnQgb2JqZWN0LiBUaGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuCisgKiAJaW1tZWRpYXRlbHksIHdoZW4gdGhlIHZwb3J0IGlzIGFjdHVhbGx5IHN0b3BwZWQsIHRoZQorICogCWJmYV9kcnZfdnBvcnRfc3RvcF9jYigpIHdpbGwgYmUgY2FsbGVkLgorICoKKyAqIAlwYXJhbVtpbl0gdnBvcnQgLSBwb2ludGVyIHRvIGJmYV9mY3NfdnBvcnRfdC4KKyAqCisgKiAJcmV0dXJuIE5vbmUKKyAqLworYmZhX3N0YXR1c190CitiZmFfZmNzX3Zwb3J0X3N0b3Aoc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqdnBvcnQpCit7CisJYmZhX3NtX3NlbmRfZXZlbnQodnBvcnQsIEJGQV9GQ1NfVlBPUlRfU01fU1RPUCk7CisKKwlyZXR1cm4gQkZBX1NUQVRVU19PSzsKK30KKworLyoqCisgKiAgCVVzZSB0aGlzIGZ1bmN0aW9uIHRvIGRlbGV0ZSBhIHZwb3J0IG9iamVjdC4gRmFicmljIG9iamVjdCBzaG91bGQKKyAqIAkJYmUgc3RvcHBlZCBiZWZvcmUgdGhpcyBmdW5jdGlvbiBjYWxsLgorICoKKyAqIAlwYXJhbVtpbl0gdnBvcnQgLSBwb2ludGVyIHRvIGJmYV9mY3NfdnBvcnRfdC4KKyAqCisgKiAJcmV0dXJuICAgICBOb25lCisgKi8KK2JmYV9zdGF0dXNfdAorYmZhX2Zjc192cG9ydF9kZWxldGUoc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqdnBvcnQpCit7CisJYmZhX3NtX3NlbmRfZXZlbnQodnBvcnQsIEJGQV9GQ1NfVlBPUlRfU01fREVMRVRFKTsKKworCXJldHVybiBCRkFfU1RBVFVTX09LOworfQorCisvKioKKyAqICAJVXNlIHRoaXMgZnVuY3Rpb24gdG8gZ2V0IHZwb3J0J3MgY3VycmVudCBzdGF0dXMgaW5mby4KKyAqCisgKiAJcGFyYW1baW5dIAl2cG9ydCAJCXBvaW50ZXIgdG8gYmZhX2Zjc192cG9ydF90LgorICogCXBhcmFtW291dF0JYXR0ciAJCXBvaW50ZXIgdG8gcmV0dXJuIHZwb3J0IGF0dHJpYnV0ZXMKKyAqCisgKiAJcmV0dXJuIE5vbmUKKyAqLwordm9pZAorYmZhX2Zjc192cG9ydF9nZXRfYXR0cihzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zICp2cG9ydCwKKwkJICAgICAgIHN0cnVjdCBiZmFfdnBvcnRfYXR0cl9zICphdHRyKQoreworCWlmICh2cG9ydCA9PSBOVUxMIHx8IGF0dHIgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJYmZhX29zX21lbXNldChhdHRyLCAwLCBzaXplb2Yoc3RydWN0IGJmYV92cG9ydF9hdHRyX3MpKTsKKworCWJmYV9mY3NfcG9ydF9nZXRfYXR0cigmdnBvcnQtPmxwb3J0LCAmYXR0ci0+cG9ydF9hdHRyKTsKKwlhdHRyLT52cG9ydF9zdGF0ZSA9IGJmYV9zbV90b19zdGF0ZSh2cG9ydF9zbV90YWJsZSwgdnBvcnQtPnNtKTsKK30KKworLyoqCisgKiAgCVVzZSB0aGlzIGZ1bmN0aW9uIHRvIGdldCB2cG9ydCdzIHN0YXRpc3RpY3MuCisgKgorICogCXBhcmFtW2luXSAJdnBvcnQgCQlwb2ludGVyIHRvIGJmYV9mY3NfdnBvcnRfdC4KKyAqIAlwYXJhbVtvdXRdCXN0YXRzCQlwb2ludGVyIHRvIHJldHVybiB2cG9ydCBzdGF0aXN0aWNzIGluCisgKgorICogCXJldHVybiBOb25lCisgKi8KK3ZvaWQKK2JmYV9mY3NfdnBvcnRfZ2V0X3N0YXRzKHN0cnVjdCBiZmFfZmNzX3Zwb3J0X3MgKnZwb3J0LAorCQkJc3RydWN0IGJmYV92cG9ydF9zdGF0c19zICpzdGF0cykKK3sKKwkqc3RhdHMgPSB2cG9ydC0+dnBvcnRfc3RhdHM7Cit9CisKKy8qKgorICogIAlVc2UgdGhpcyBmdW5jdGlvbiB0byBjbGVhciB2cG9ydCdzIHN0YXRpc3RpY3MuCisgKgorICogCXBhcmFtW2luXSAJdnBvcnQgCQlwb2ludGVyIHRvIGJmYV9mY3NfdnBvcnRfdC4KKyAqCisgKiAJcmV0dXJuIE5vbmUKKyAqLwordm9pZAorYmZhX2Zjc192cG9ydF9jbHJfc3RhdHMoc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqdnBvcnQpCit7CisJYmZhX29zX21lbXNldCgmdnBvcnQtPnZwb3J0X3N0YXRzLCAwLCBzaXplb2Yoc3RydWN0IGJmYV92cG9ydF9zdGF0c19zKSk7Cit9CisKKy8qKgorICogICAgICBMb29rdXAgYSB2aXJ0dWFsIHBvcnQuIEV4Y2x1ZGVzIGJhc2UgcG9ydCBmcm9tIGxvb2t1cC4KKyAqLworc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqCitiZmFfZmNzX3Zwb3J0X2xvb2t1cChzdHJ1Y3QgYmZhX2Zjc19zICpmY3MsIHUxNiB2Zl9pZCwgd3duX3QgdnB3d24pCit7CisJc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqdnBvcnQ7CisJc3RydWN0IGJmYV9mY3NfZmFicmljX3MgKmZhYnJpYzsKKworCWJmYV90cmMoZmNzLCB2Zl9pZCk7CisJYmZhX3RyYyhmY3MsIHZwd3duKTsKKworCWZhYnJpYyA9IGJmYV9mY3NfdmZfbG9va3VwKGZjcywgdmZfaWQpOworCWlmICghZmFicmljKSB7CisJCWJmYV90cmMoZmNzLCB2Zl9pZCk7CisJCXJldHVybiBOVUxMOworCX0KKworCXZwb3J0ID0gYmZhX2Zjc19mYWJyaWNfdnBvcnRfbG9va3VwKGZhYnJpYywgdnB3d24pOworCXJldHVybiB2cG9ydDsKK30KKworLyoqCisgKiBGRElTQyBSZXNwb25zZQorICovCit2b2lkCitiZmFfY2JfbHBzX2ZkaXNjX2NvbXAodm9pZCAqYmZhZCwgdm9pZCAqdWFyZywgYmZhX3N0YXR1c190IHN0YXR1cykKK3sKKwlzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zICp2cG9ydCA9IHVhcmc7CisKKwliZmFfdHJjKF9fdnBvcnRfZmNzKHZwb3J0KSwgX192cG9ydF9wd3duKHZwb3J0KSk7CisJYmZhX3RyYyhfX3Zwb3J0X2Zjcyh2cG9ydCksIHN0YXR1cyk7CisKKwlzd2l0Y2ggKHN0YXR1cykgeworCWNhc2UgQkZBX1NUQVRVU19PSzoKKwkJLyoKKwkJICogSW5pdGlhbGlhemUgdGhlIFYtUG9ydCBmaWVsZHMKKwkJICovCisJCV9fdnBvcnRfZmNpZCh2cG9ydCkgPSBiZmFfbHBzX2dldF9waWQodnBvcnQtPmxwcyk7CisJCXZwb3J0LT52cG9ydF9zdGF0cy5mZGlzY19hY2NlcHRzKys7CisJCWJmYV9zbV9zZW5kX2V2ZW50KHZwb3J0LCBCRkFfRkNTX1ZQT1JUX1NNX1JTUF9PSyk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfU1RBVFVTX0lOVkFMSURfTUFDOgorCQkvKgorCQkgKiBPbmx5IGZvciBDTkEKKwkJICovCisJCXZwb3J0LT52cG9ydF9zdGF0cy5mZGlzY19hY2NfYmFkKys7CisJCWJmYV9zbV9zZW5kX2V2ZW50KHZwb3J0LCBCRkFfRkNTX1ZQT1JUX1NNX1JTUF9FUlJPUik7CisKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9TVEFUVVNfRVBST1RPQ09MOgorCQlzd2l0Y2ggKGJmYV9scHNfZ2V0X2V4dHN0YXR1cyh2cG9ydC0+bHBzKSkgeworCQljYXNlIEJGQV9FUFJPVE9fQkFEX0FDQ0VQVDoKKwkJCXZwb3J0LT52cG9ydF9zdGF0cy5mZGlzY19hY2NfYmFkKys7CisJCQlicmVhazsKKworCQljYXNlIEJGQV9FUFJPVE9fVU5LTk9XTl9SU1A6CisJCQl2cG9ydC0+dnBvcnRfc3RhdHMuZmRpc2NfdW5rbm93bl9yc3ArKzsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCisJCWJmYV9zbV9zZW5kX2V2ZW50KHZwb3J0LCBCRkFfRkNTX1ZQT1JUX1NNX1JTUF9FUlJPUik7CisJCWJyZWFrOworCisJY2FzZSBCRkFfU1RBVFVTX0ZBQlJJQ19SSlQ6CisJCXZwb3J0LT52cG9ydF9zdGF0cy5mZGlzY19yZWplY3RzKys7CisJCWJmYV9mY3NfdnBvcnRfZmRpc2NfcmVqZWN0ZWQodnBvcnQpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXZwb3J0LT52cG9ydF9zdGF0cy5mZGlzY19yc3BfZXJyKys7CisJCWJmYV9zbV9zZW5kX2V2ZW50KHZwb3J0LCBCRkFfRkNTX1ZQT1JUX1NNX1JTUF9FUlJPUik7CisJfQorfQorCisvKioKKyAqIExPR08gcmVzcG9uc2UKKyAqLwordm9pZAorYmZhX2NiX2xwc19mZGlzY2xvZ29fY29tcCh2b2lkICpiZmFkLCB2b2lkICp1YXJnKQoreworCXN0cnVjdCBiZmFfZmNzX3Zwb3J0X3MgKnZwb3J0ID0gdWFyZzsKKwliZmFfc21fc2VuZF9ldmVudCh2cG9ydCwgQkZBX0ZDU19WUE9SVF9TTV9SU1BfT0spOworfQorCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9ibngyaS9ibngyaS5oIGIvZHJpdmVycy9zY3NpL2JueDJpL2JueDJpLmgKaW5kZXggZDc1NzZmMi4uNWVkZGUxYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2JueDJpL2JueDJpLmgKKysrIGIvZHJpdmVycy9zY3NpL2JueDJpL2JueDJpLmgKQEAgLTEwMCw2ICsxMDAsOCBAQAogI2RlZmluZSBDVFhfT0ZGU0VUIAkJCTB4MTAwMDAKICNkZWZpbmUgTUFYX0NJRF9DTlQJCQkweDQwMDAKIAorI2RlZmluZSBCTlgySV81NzBYX1BBR0VfU0laRV9ERUZBVUxUCTQwOTYKKwogLyogNTcwOSBjb250ZXh0IHJlZ2lzdGVycyAqLwogI2RlZmluZSBCTlgyX01RX0NPTkZJRzIJCQkweDAwMDAzZDAwCiAjZGVmaW5lIEJOWDJfTVFfQ09ORklHMl9DT05UX1NaCQkoMHg3TDw8NCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9ibngyaS9ibngyaV9od2kuYyBiL2RyaXZlcnMvc2NzaS9ibngyaS9ibngyaV9od2kuYwppbmRleCA0MWUxYjBlLi41YzhkNzYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYm54MmkvYm54MmlfaHdpLmMKKysrIGIvZHJpdmVycy9zY3NpL2JueDJpL2JueDJpX2h3aS5jCkBAIC0yMzg2LDcgKzIzODYsNyBAQAogCQljdHhfc3ogPSAoY29uZmlnMiAmIEJOWDJfTVFfQ09ORklHMl9DT05UX1NaKSA+PiAzOwogCQlpZiAoY3R4X3N6KQogCQkJcmVnX29mZiA9IENUWF9PRkZTRVQgKyBNQVhfQ0lEX0NOVCAqIE1CX0tFUk5FTF9DVFhfU0laRQotCQkJCSAgKyBQQUdFX1NJWkUgKgorCQkJCSAgKyBCTlgySV81NzBYX1BBR0VfU0laRV9ERUZBVUxUICoKIAkJCQkgICgoKGNpZF9udW0gLSBmaXJzdF9sNGw1KSAvIGN0eF9zeikgKyAyNTYpOwogCQllbHNlCiAJCQlyZWdfb2ZmID0gQ1RYX09GRlNFVCArIChNQl9LRVJORUxfQ1RYX1NJWkUgKiBjaWRfbnVtKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9ibngyaS9ibngyaV9pc2NzaS5jIGIvZHJpdmVycy9zY3NpL2JueDJpL2JueDJpX2lzY3NpLmMKaW5kZXggOWE3YmE3MS4uY2FmYjg4OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2JueDJpL2JueDJpX2lzY3NpLmMKKysrIGIvZHJpdmVycy9zY3NpL2JueDJpL2JueDJpX2lzY3NpLmMKQEAgLTEyNDMsNyArMTI0Myw3IEBACiAJCWNtZHNfbWF4ID0gQk5YMklfU1FfV1FFU19NSU47CiAKIAljbHNfc2Vzc2lvbiA9IGlzY3NpX3Nlc3Npb25fc2V0dXAoJmJueDJpX2lzY3NpX3RyYW5zcG9ydCwgc2hvc3QsCi0JCQkJCSAgY21kc19tYXgsIHNpemVvZihzdHJ1Y3QgYm54MmlfY21kKSwKKwkJCQkJICBjbWRzX21heCwgMCwgc2l6ZW9mKHN0cnVjdCBibngyaV9jbWQpLAogCQkJCQkgIGluaXRpYWxfY21kc24sIElTQ1NJX01BWF9UQVJHRVQpOwogCWlmICghY2xzX3Nlc3Npb24pCiAJCXJldHVybiBOVUxMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2N4Z2IzaS9jeGdiM2lfaXNjc2kuYyBiL2RyaXZlcnMvc2NzaS9jeGdiM2kvY3hnYjNpX2lzY3NpLmMKaW5kZXggYzM5OWY0OC4uMjYzMWJkZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2N4Z2IzaS9jeGdiM2lfaXNjc2kuYworKysgYi9kcml2ZXJzL3Njc2kvY3hnYjNpL2N4Z2IzaV9pc2NzaS5jCkBAIC00MjIsNyArNDIyLDcgQEAKIAlCVUdfT04oaGJhICE9IGlzY3NpX2hvc3RfcHJpdihzaG9zdCkpOwogCiAJY2xzX3Nlc3Npb24gPSBpc2NzaV9zZXNzaW9uX3NldHVwKCZjeGdiM2lfaXNjc2lfdHJhbnNwb3J0LCBzaG9zdCwKLQkJCQkJICBjbWRzX21heCwKKwkJCQkJICBjbWRzX21heCwgMCwKIAkJCQkJICBzaXplb2Yoc3RydWN0IGlzY3NpX3RjcF90YXNrKSArCiAJCQkJCSAgc2l6ZW9mKHN0cnVjdCBjeGdiM2lfdGFza19kYXRhKSwKIAkJCQkJICBpbml0aWFsX2NtZHNuLCBJU0NTSV9NQVhfVEFSR0VUKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9kZXZpY2VfaGFuZGxlci9zY3NpX2RoX3JkYWMuYyBiL2RyaXZlcnMvc2NzaS9kZXZpY2VfaGFuZGxlci9zY3NpX2RoX3JkYWMuYwppbmRleCAxMWM4OTMxLi4yNjgxODlkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvZGV2aWNlX2hhbmRsZXIvc2NzaV9kaF9yZGFjLmMKKysrIGIvZHJpdmVycy9zY3NpL2RldmljZV9oYW5kbGVyL3Njc2lfZGhfcmRhYy5jCkBAIC01MDAsOCArNTAwLDYgQEAKIAlpZiAoIXJldCkKIAkJZ290byBkb25lOwogCi0JZXJyID0gU0NTSV9ESF9PSzsKLQogCXN3aXRjaCAoc2Vuc2VfaGRyLnNlbnNlX2tleSkgewogCWNhc2UgTk9fU0VOU0U6CiAJY2FzZSBBQk9SVEVEX0NPTU1BTkQ6CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvZHB0X2kyby5jIGIvZHJpdmVycy9zY3NpL2RwdF9pMm8uYwppbmRleCBiNmFmNjNjLi40OTY3NjQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvZHB0X2kyby5jCisrKyBiL2RyaXZlcnMvc2NzaS9kcHRfaTJvLmMKQEAgLTE5MTgsNiArMTkxOCwxMCBAQAogCQl9CiAJCXNpemUgPSBzaXplPj4xNjsKIAkJc2l6ZSAqPSA0OworCQlpZiAoc2l6ZSA+IE1BWF9NRVNTQUdFX1NJWkUpIHsKKwkJCXJjb2RlID0gLUVJTlZBTDsKKwkJCWdvdG8gY2xlYW51cDsKKwkJfQogCQkvKiBDb3B5IGluIHRoZSB1c2VyJ3MgSTJPIGNvbW1hbmQgKi8KIAkJaWYgKGNvcHlfZnJvbV91c2VyIChtc2csIHVzZXJfbXNnLCBzaXplKSkgewogCQkJcmNvZGUgPSAtRUZBVUxUOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2hwdGlvcC5jIGIvZHJpdmVycy9zY3NpL2hwdGlvcC5jCmluZGV4IGM1OTZhYjUuLmEwZTdlNzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9ocHRpb3AuYworKysgYi9kcml2ZXJzL3Njc2kvaHB0aW9wLmMKQEAgLTEsNiArMSw2IEBACiAvKgogICogSGlnaFBvaW50IFJSM3h4eC80eHh4IGNvbnRyb2xsZXIgZHJpdmVyIGZvciBMaW51eAotICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMDcgSGlnaFBvaW50IFRlY2hub2xvZ2llcywgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMDkgSGlnaFBvaW50IFRlY2hub2xvZ2llcywgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtNDEsNyArNDEsNyBAQAogCiBzdGF0aWMgY2hhciBkcml2ZXJfbmFtZVtdID0gImhwdGlvcCI7CiBzdGF0aWMgY29uc3QgY2hhciBkcml2ZXJfbmFtZV9sb25nW10gPSAiUm9ja2V0UkFJRCAzeHh4LzR4eHggQ29udHJvbGxlciBkcml2ZXIiOwotc3RhdGljIGNvbnN0IGNoYXIgZHJpdmVyX3ZlcltdID0gInYxLjMgKDA3MTIwMykiOworc3RhdGljIGNvbnN0IGNoYXIgZHJpdmVyX3ZlcltdID0gInYxLjYgKDA5MDkxMCkiOwogCiBzdGF0aWMgaW50IGlvcF9zZW5kX3N5bmNfbXNnKHN0cnVjdCBocHRpb3BfaGJhICpoYmEsIHUzMiBtc2csIHUzMiBtaWxsaXNlYyk7CiBzdGF0aWMgdm9pZCBocHRpb3BfZmluaXNoX3Njc2lfcmVxKHN0cnVjdCBocHRpb3BfaGJhICpoYmEsIHUzMiB0YWcsCkBAIC0xMTUsOSArMTE1LDEzIEBACiBzdGF0aWMgaW50IGlvcF9pbnRyX2l0bChzdHJ1Y3QgaHB0aW9wX2hiYSAqaGJhKQogewogCXN0cnVjdCBocHRfaW9wbXVfaXRsIF9faW9tZW0gKmlvcCA9IGhiYS0+dS5pdGwuaW9wOworCXZvaWQgX19pb21lbSAqcGx4ID0gaGJhLT51Lml0bC5wbHg7CiAJdTMyIHN0YXR1czsKIAlpbnQgcmV0ID0gMDsKIAorCWlmIChwbHggJiYgcmVhZGwocGx4ICsgMHgxMUM1QykgJiAweGYpCisJCXdyaXRlbCgxLCBwbHggKyAweDExQzYwKTsKKwogCXN0YXR1cyA9IHJlYWRsKCZpb3AtPm91dGJvdW5kX2ludHN0YXR1cyk7CiAKIAlpZiAoc3RhdHVzICYgSU9QTVVfT1VUQk9VTkRfSU5UX01TRzApIHsKQEAgLTQ2MCwxNSArNDY0LDI1IEBACiAKIHN0YXRpYyBpbnQgaHB0aW9wX21hcF9wY2lfYmFyX2l0bChzdHJ1Y3QgaHB0aW9wX2hiYSAqaGJhKQogeworCXN0cnVjdCBwY2lfZGV2ICpwY2lkZXYgPSBoYmEtPnBjaWRldjsKIAloYmEtPnUuaXRsLmlvcCA9IGhwdGlvcF9tYXBfcGNpX2JhcihoYmEsIDApOwotCWlmIChoYmEtPnUuaXRsLmlvcCkKLQkJcmV0dXJuIDA7Ci0JZWxzZQorCWlmIChoYmEtPnUuaXRsLmlvcCA9PSBOVUxMKQogCQlyZXR1cm4gLTE7CisJaWYgKChwY2lkZXYtPmRldmljZSAmIDB4ZmYwMCkgPT0gMHg0NDAwKSB7CisJCWhiYS0+dS5pdGwucGx4ID0gaGJhLT51Lml0bC5pb3A7CisJCWhiYS0+dS5pdGwuaW9wID0gaHB0aW9wX21hcF9wY2lfYmFyKGhiYSwgMik7CisJCWlmIChoYmEtPnUuaXRsLmlvcCA9PSBOVUxMKSB7CisJCQlpb3VubWFwKGhiYS0+dS5pdGwucGx4KTsKKwkJCXJldHVybiAtMTsKKwkJfQorCX0KKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgaHB0aW9wX3VubWFwX3BjaV9iYXJfaXRsKHN0cnVjdCBocHRpb3BfaGJhICpoYmEpCiB7CisJaWYgKGhiYS0+dS5pdGwucGx4KQorCQlpb3VubWFwKGhiYS0+dS5pdGwucGx4KTsKIAlpb3VubWFwKGhiYS0+dS5pdGwuaW9wKTsKIH0KIApAQCAtMTIzOSwyMiArMTI1MywyMyBAQAogc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGhwdGlvcF9pZF90YWJsZVtdID0gewogCXsgUENJX1ZERVZJQ0UoVFRJLCAweDMyMjApLCAoa2VybmVsX3Vsb25nX3QpJmhwdGlvcF9pdGxfb3BzIH0sCiAJeyBQQ0lfVkRFVklDRShUVEksIDB4MzMyMCksIChrZXJuZWxfdWxvbmdfdCkmaHB0aW9wX2l0bF9vcHMgfSwKLQl7IFBDSV9WREVWSUNFKFRUSSwgMHgzNTIwKSwgKGtlcm5lbF91bG9uZ190KSZocHRpb3BfaXRsX29wcyB9LAotCXsgUENJX1ZERVZJQ0UoVFRJLCAweDQzMjApLCAoa2VybmVsX3Vsb25nX3QpJmhwdGlvcF9pdGxfb3BzIH0sCisJeyBQQ0lfVkRFVklDRShUVEksIDB4MzQxMCksIChrZXJuZWxfdWxvbmdfdCkmaHB0aW9wX2l0bF9vcHMgfSwKIAl7IFBDSV9WREVWSUNFKFRUSSwgMHgzNTEwKSwgKGtlcm5lbF91bG9uZ190KSZocHRpb3BfaXRsX29wcyB9LAogCXsgUENJX1ZERVZJQ0UoVFRJLCAweDM1MTEpLCAoa2VybmVsX3Vsb25nX3QpJmhwdGlvcF9pdGxfb3BzIH0sCisJeyBQQ0lfVkRFVklDRShUVEksIDB4MzUyMCksIChrZXJuZWxfdWxvbmdfdCkmaHB0aW9wX2l0bF9vcHMgfSwKIAl7IFBDSV9WREVWSUNFKFRUSSwgMHgzNTIxKSwgKGtlcm5lbF91bG9uZ190KSZocHRpb3BfaXRsX29wcyB9LAogCXsgUENJX1ZERVZJQ0UoVFRJLCAweDM1MjIpLCAoa2VybmVsX3Vsb25nX3QpJmhwdGlvcF9pdGxfb3BzIH0sCi0JeyBQQ0lfVkRFVklDRShUVEksIDB4MzQxMCksIChrZXJuZWxfdWxvbmdfdCkmaHB0aW9wX2l0bF9vcHMgfSwKLQl7IFBDSV9WREVWSUNFKFRUSSwgMHgzNTQwKSwgKGtlcm5lbF91bG9uZ190KSZocHRpb3BfaXRsX29wcyB9LAogCXsgUENJX1ZERVZJQ0UoVFRJLCAweDM1MzApLCAoa2VybmVsX3Vsb25nX3QpJmhwdGlvcF9pdGxfb3BzIH0sCisJeyBQQ0lfVkRFVklDRShUVEksIDB4MzU0MCksIChrZXJuZWxfdWxvbmdfdCkmaHB0aW9wX2l0bF9vcHMgfSwKIAl7IFBDSV9WREVWSUNFKFRUSSwgMHgzNTYwKSwgKGtlcm5lbF91bG9uZ190KSZocHRpb3BfaXRsX29wcyB9LAotCXsgUENJX1ZERVZJQ0UoVFRJLCAweDQzMjIpLCAoa2VybmVsX3Vsb25nX3QpJmhwdGlvcF9pdGxfb3BzIH0sCi0JeyBQQ0lfVkRFVklDRShUVEksIDB4NDMyMSksIChrZXJuZWxfdWxvbmdfdCkmaHB0aW9wX2l0bF9vcHMgfSwKIAl7IFBDSV9WREVWSUNFKFRUSSwgMHg0MjEwKSwgKGtlcm5lbF91bG9uZ190KSZocHRpb3BfaXRsX29wcyB9LAogCXsgUENJX1ZERVZJQ0UoVFRJLCAweDQyMTEpLCAoa2VybmVsX3Vsb25nX3QpJmhwdGlvcF9pdGxfb3BzIH0sCiAJeyBQQ0lfVkRFVklDRShUVEksIDB4NDMxMCksIChrZXJuZWxfdWxvbmdfdCkmaHB0aW9wX2l0bF9vcHMgfSwKIAl7IFBDSV9WREVWSUNFKFRUSSwgMHg0MzExKSwgKGtlcm5lbF91bG9uZ190KSZocHRpb3BfaXRsX29wcyB9LAorCXsgUENJX1ZERVZJQ0UoVFRJLCAweDQzMjApLCAoa2VybmVsX3Vsb25nX3QpJmhwdGlvcF9pdGxfb3BzIH0sCisJeyBQQ0lfVkRFVklDRShUVEksIDB4NDMyMSksIChrZXJuZWxfdWxvbmdfdCkmaHB0aW9wX2l0bF9vcHMgfSwKKwl7IFBDSV9WREVWSUNFKFRUSSwgMHg0MzIyKSwgKGtlcm5lbF91bG9uZ190KSZocHRpb3BfaXRsX29wcyB9LAorCXsgUENJX1ZERVZJQ0UoVFRJLCAweDQ0MDApLCAoa2VybmVsX3Vsb25nX3QpJmhwdGlvcF9pdGxfb3BzIH0sCiAJeyBQQ0lfVkRFVklDRShUVEksIDB4MzEyMCksIChrZXJuZWxfdWxvbmdfdCkmaHB0aW9wX212X29wcyB9LAogCXsgUENJX1ZERVZJQ0UoVFRJLCAweDMxMjIpLCAoa2VybmVsX3Vsb25nX3QpJmhwdGlvcF9tdl9vcHMgfSwKIAl7IFBDSV9WREVWSUNFKFRUSSwgMHgzMDIwKSwgKGtlcm5lbF91bG9uZ190KSZocHRpb3BfbXZfb3BzIH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvaHB0aW9wLmggYi9kcml2ZXJzL3Njc2kvaHB0aW9wLmgKaW5kZXggYTAyODlmMi4uMGI4NzFjMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2hwdGlvcC5oCisrKyBiL2RyaXZlcnMvc2NzaS9ocHRpb3AuaApAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBIaWdoUG9pbnQgUlIzeHh4LzR4eHggY29udHJvbGxlciBkcml2ZXIgZm9yIExpbnV4Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAwNyBIaWdoUG9pbnQgVGVjaG5vbG9naWVzLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAwOSBIaWdoUG9pbnQgVGVjaG5vbG9naWVzLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC0yMjgsNiArMjI4LDcgQEAKIAl1bmlvbiB7CiAJCXN0cnVjdCB7CiAJCQlzdHJ1Y3QgaHB0X2lvcG11X2l0bCBfX2lvbWVtICppb3A7CisJCQl2b2lkIF9faW9tZW0gKnBseDsKIAkJfSBpdGw7CiAJCXN0cnVjdCB7CiAJCQlzdHJ1Y3QgaHB0X2lvcG12X3JlZ3MgKnJlZ3M7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvaXNjc2lfdGNwLmMgYi9kcml2ZXJzL3Njc2kvaXNjc2lfdGNwLmMKaW5kZXggMmIxYjgzNC4uZWRjNDljYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2lzY3NpX3RjcC5jCisrKyBiL2RyaXZlcnMvc2NzaS9pc2NzaV90Y3AuYwpAQCAtODExLDcgKzgxMSw3IEBACiAJCWdvdG8gZnJlZV9ob3N0OwogCiAJY2xzX3Nlc3Npb24gPSBpc2NzaV9zZXNzaW9uX3NldHVwKCZpc2NzaV9zd190Y3BfdHJhbnNwb3J0LCBzaG9zdCwKLQkJCQkJICBjbWRzX21heCwKKwkJCQkJICBjbWRzX21heCwgMCwKIAkJCQkJICBzaXplb2Yoc3RydWN0IGlzY3NpX3RjcF90YXNrKSArCiAJCQkJCSAgc2l6ZW9mKHN0cnVjdCBpc2NzaV9zd190Y3BfaGRyYnVmKSwKIAkJCQkJICBpbml0aWFsX2NtZHNuLCAwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9saWJpc2NzaS5jIGIvZHJpdmVycy9zY3NpL2xpYmlzY3NpLmMKaW5kZXggOGRjNzNjNC4uZjFhNDI0NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xpYmlzY3NpLmMKKysrIGIvZHJpdmVycy9zY3NpL2xpYmlzY3NpLmMKQEAgLTI0MzYsNyArMjQzNiw3IEBACiAgKi8KIHN0cnVjdCBpc2NzaV9jbHNfc2Vzc2lvbiAqCiBpc2NzaV9zZXNzaW9uX3NldHVwKHN0cnVjdCBpc2NzaV90cmFuc3BvcnQgKmlzY3NpdCwgc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QsCi0JCSAgICB1aW50MTZfdCBjbWRzX21heCwgaW50IGNtZF90YXNrX3NpemUsCisJCSAgICB1aW50MTZfdCBjbWRzX21heCwgaW50IGRkX3NpemUsIGludCBjbWRfdGFza19zaXplLAogCQkgICAgdWludDMyX3QgaW5pdGlhbF9jbWRzbiwgdW5zaWduZWQgaW50IGlkKQogewogCXN0cnVjdCBpc2NzaV9ob3N0ICppaG9zdCA9IHNob3N0X3ByaXYoc2hvc3QpOwpAQCAtMjQ4Niw3ICsyNDg2LDggQEAKIAlzY3NpX2NtZHMgPSB0b3RhbF9jbWRzIC0gSVNDU0lfTUdNVF9DTURTX01BWDsKIAogCWNsc19zZXNzaW9uID0gaXNjc2lfYWxsb2Nfc2Vzc2lvbihzaG9zdCwgaXNjc2l0LAotCQkJCQkgIHNpemVvZihzdHJ1Y3QgaXNjc2lfc2Vzc2lvbikpOworCQkJCQkgIHNpemVvZihzdHJ1Y3QgaXNjc2lfc2Vzc2lvbikgKworCQkJCQkgIGRkX3NpemUpOwogCWlmICghY2xzX3Nlc3Npb24pCiAJCWdvdG8gZGVjX3Nlc3Npb25fY291bnQ7CiAJc2Vzc2lvbiA9IGNsc19zZXNzaW9uLT5kZF9kYXRhOwpAQCAtMjUwMyw2ICsyNTA0LDcgQEAKIAlzZXNzaW9uLT5tYXhfY21kc24gPSBpbml0aWFsX2NtZHNuICsgMTsKIAlzZXNzaW9uLT5tYXhfcjJ0ID0gMTsKIAlzZXNzaW9uLT50dCA9IGlzY3NpdDsKKwlzZXNzaW9uLT5kZF9kYXRhID0gY2xzX3Nlc3Npb24tPmRkX2RhdGEgKyBzaXplb2YoKnNlc3Npb24pOwogCW11dGV4X2luaXQoJnNlc3Npb24tPmVoX211dGV4KTsKIAlzcGluX2xvY2tfaW5pdCgmc2Vzc2lvbi0+bG9jayk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2NzaS5jIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zY3NpLmMKaW5kZXggNjFkMDg5Ny4uYzg4ZjU5ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zY3NpLmMKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zY3NpLmMKQEAgLTU2LDggKzU2LDYgQEAKIAkiU0NTSV9QUk9UX1dSSVRFX0lOU0VSVCIsCiAJIlNDU0lfUFJPVF9SRUFEX1BBU1MiLAogCSJTQ1NJX1BST1RfV1JJVEVfUEFTUyIsCi0JIlNDU0lfUFJPVF9SRUFEX0NPTlZFUlQiLAotCSJTQ1NJX1BST1RfV1JJVEVfQ09OVkVSVCIKIH07CiBzdGF0aWMgdm9pZAogbHBmY19yZWxlYXNlX3Njc2lfYnVmX3M0KHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgc3RydWN0IGxwZmNfc2NzaV9idWYgKnBzYik7CkBAIC0xMTMxLDEzICsxMTI5LDExIEBACiAJCQlyZXRfcHJvZiA9IExQRkNfUFJPRl9BMTsKIAkJCWJyZWFrOwogCi0JCWNhc2UgU0NTSV9QUk9UX1JFQURfQ09OVkVSVDoKLQkJY2FzZSBTQ1NJX1BST1RfV1JJVEVfQ09OVkVSVDoKKwkJY2FzZSBTQ1NJX1BST1RfUkVBRF9QQVNTOgorCQljYXNlIFNDU0lfUFJPVF9XUklURV9QQVNTOgogCQkJcmV0X3Byb2YgPSBMUEZDX1BST0ZfQVNUMTsKIAkJCWJyZWFrOwogCi0JCWNhc2UgU0NTSV9QUk9UX1JFQURfUEFTUzoKLQkJY2FzZSBTQ1NJX1BST1RfV1JJVEVfUEFTUzoKIAkJY2FzZSBTQ1NJX1BST1RfTk9STUFMOgogCQlkZWZhdWx0OgogCQkJcHJpbnRrKEtFUk5fRVJSICJCYWQgb3AvZ3VhcmQ6JWQvJWQgY29tYmluYXRpb25cbiIsCkBAIC0xMTU3LDggKzExNTMsNiBAQAogCQkJcmV0X3Byb2YgPSBMUEZDX1BST0ZfQzE7CiAJCQlicmVhazsKIAotCQljYXNlIFNDU0lfUFJPVF9SRUFEX0NPTlZFUlQ6Ci0JCWNhc2UgU0NTSV9QUk9UX1dSSVRFX0NPTlZFUlQ6CiAJCWNhc2UgU0NTSV9QUk9UX1JFQURfSU5TRVJUOgogCQljYXNlIFNDU0lfUFJPVF9XUklURV9TVFJJUDoKIAkJY2FzZSBTQ1NJX1BST1RfTk9STUFMOgpAQCAtMTIwOSw4ICsxMjAzLDcgQEAKIAlzdGF0aWMgaW50IGNudDsKIAogCWlmIChwcm90Y250ICYmIChvcCA9PSBTQ1NJX1BST1RfV1JJVEVfU1RSSVAgfHwKLQkJCQlvcCA9PSBTQ1NJX1BST1RfV1JJVEVfUEFTUyB8fAotCQkJCW9wID09IFNDU0lfUFJPVF9XUklURV9DT05WRVJUKSkgeworCQkJCW9wID09IFNDU0lfUFJPVF9XUklURV9QQVNTKSkgewogCiAJCWNudCsrOwogCQlzcHQgPSBwYWdlX2FkZHJlc3Moc2dfcGFnZShzY3NpX3Byb3Rfc2dsaXN0KHNjKSkpICsKQEAgLTE1MDEsOCArMTQ5NCw2IEBACiAJY2FzZSBTQ1NJX1BST1RfV1JJVEVfU1RSSVA6CiAJY2FzZSBTQ1NJX1BST1RfUkVBRF9QQVNTOgogCWNhc2UgU0NTSV9QUk9UX1dSSVRFX1BBU1M6Ci0JY2FzZSBTQ1NJX1BST1RfV1JJVEVfQ09OVkVSVDoKLQljYXNlIFNDU0lfUFJPVF9SRUFEX0NPTlZFUlQ6CiAJCXJldCA9IExQRkNfUEdfVFlQRV9ESUZfQlVGOwogCQlicmVhazsKIAlkZWZhdWx0OgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21wdDJzYXMvS2NvbmZpZyBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL0tjb25maWcKaW5kZXggNGE4Njg1NS4uNzBjNGMyNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21wdDJzYXMvS2NvbmZpZworKysgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9LY29uZmlnCkBAIC0yLDcgKzIsNyBAQAogIyBLZXJuZWwgY29uZmlndXJhdGlvbiBmaWxlIGZvciB0aGUgTVBUMlNBUwogIwogIyBUaGlzIGNvZGUgaXMgYmFzZWQgb24gZHJpdmVycy9zY3NpL21wdDJzYXMvS2NvbmZpZwotIyBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOCAgTFNJIENvcnBvcmF0aW9uCisjIENvcHlyaWdodCAoQykgMjAwNy0yMDA5ICBMU0kgQ29ycG9yYXRpb24KICMgIChtYWlsdG86REwtTVBURnVzaW9uTGludXhAbHNpLmNvbSkKIAogIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcGkvbXBpMi5oIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXBpL21waTIuaAppbmRleCA3YmIyZWNlLi5mOWY2YzA4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcGkvbXBpMi5oCisrKyBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21waS9tcGkyLmgKQEAgLTgsNyArOCw3IEBACiAgKiAgICAgICAgICAgICAgICAgIHNjYXR0ZXIvZ2F0aGVyIGZvcm1hdHMuCiAgKiAgQ3JlYXRpb24gRGF0ZTogIEp1bmUgMjEsIDIwMDYKICAqCi0gKiAgbXBpMi5oIFZlcnNpb246ICAwMi4wMC4xMQorICogIG1waTIuaCBWZXJzaW9uOiAgMDIuMDAuMTIKICAqCiAgKiAgVmVyc2lvbiBIaXN0b3J5CiAgKiAgLS0tLS0tLS0tLS0tLS0tCkBAIC00NSw2ICs0NSwxMyBAQAogICogIDEwLTAyLTA4ICAwMi4wMC4xMCAgQnVtcGVkIE1QSTJfSEVBREVSX1ZFUlNJT05fVU5JVC4KICAqICAgICAgICAgICAgICAgICAgICAgIE1vdmVkIExVTiBmaWVsZCBkZWZpbmVzIGZyb20gbXBpMl9pbml0LmguCiAgKiAgMDEtMTktMDkgIDAyLjAwLjExICBCdW1wZWQgTVBJMl9IRUFERVJfVkVSU0lPTl9VTklULgorICogIDA1LTA2LTA5ICAwMi4wMC4xMiAgQnVtcGVkIE1QSTJfSEVBREVSX1ZFUlNJT05fVU5JVC4KKyAqICAgICAgICAgICAgICAgICAgICAgIEluIGFsbCByZXF1ZXN0IGFuZCByZXBseSBkZXNjcmlwdG9ycywgcmVwbGFjZWQgVkZfSUQKKyAqICAgICAgICAgICAgICAgICAgICAgIGZpZWxkIHdpdGggTVNJeEluZGV4IGZpZWxkLgorICogICAgICAgICAgICAgICAgICAgICAgUmVtb3ZlZCBEZXZIYW5kbGUgZmllbGQgZnJvbQorICogICAgICAgICAgICAgICAgICAgICAgTVBJMl9TQ1NJX0lPX1NVQ0NFU1NfUkVQTFlfREVTQ1JJUFRPUiBhbmQgbWFkZSB0aG9zZQorICogICAgICAgICAgICAgICAgICAgICAgYnl0ZXMgcmVzZXJ2ZWQuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBSQUlEIEFjY2VsZXJhdG9yIGZ1bmN0aW9uYWxpdHkuCiAgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqLwogCkBAIC03MCw3ICs3Nyw3IEBACiAjZGVmaW5lIE1QSTJfVkVSU0lPTl8wMl8wMCAgICAgICAgICAgICAgICAgICgweDAyMDApCiAKIC8qIHZlcnNpb25pbmcgZm9yIHRoaXMgTVBJIGhlYWRlciBzZXQgKi8KLSNkZWZpbmUgTVBJMl9IRUFERVJfVkVSU0lPTl9VTklUICAgICAgICAgICAgKDB4MEIpCisjZGVmaW5lIE1QSTJfSEVBREVSX1ZFUlNJT05fVU5JVCAgICAgICAgICAgICgweDBDKQogI2RlZmluZSBNUEkyX0hFQURFUl9WRVJTSU9OX0RFViAgICAgICAgICAgICAoMHgwMCkKICNkZWZpbmUgTVBJMl9IRUFERVJfVkVSU0lPTl9VTklUX01BU0sgICAgICAgKDB4RkYwMCkKICNkZWZpbmUgTVBJMl9IRUFERVJfVkVSU0lPTl9VTklUX1NISUZUICAgICAgKDgpCkBAIC0yNTcsNyArMjY0LDcgQEAKIHR5cGVkZWYgc3RydWN0IF9NUEkyX0RFRkFVTFRfUkVRVUVTVF9ERVNDUklQVE9SCiB7CiAgICAgVTggICAgICAgICAgICAgIFJlcXVlc3RGbGFnczsgICAgICAgICAgICAgICAvKiAweDAwICovCi0gICAgVTggICAgICAgICAgICAgIFZGX0lEOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDAxICovCisgICAgVTggICAgICAgICAgICAgIE1TSXhJbmRleDsgICAgICAgICAgICAgICAgICAvKiAweDAxICovCiAgICAgVTE2ICAgICAgICAgICAgIFNNSUQ7ICAgICAgICAgICAgICAgICAgICAgICAvKiAweDAyICovCiAgICAgVTE2ICAgICAgICAgICAgIExNSUQ7ICAgICAgICAgICAgICAgICAgICAgICAvKiAweDA0ICovCiAgICAgVTE2ICAgICAgICAgICAgIERlc2NyaXB0b3JUeXBlRGVwZW5kZW50OyAgICAvKiAweDA2ICovCkBAIC0yNzEsNiArMjc4LDcgQEAKICNkZWZpbmUgTVBJMl9SRVFfREVTQ1JJUFRfRkxBR1NfU0NTSV9UQVJHRVQgICAgICAgICAgICAgKDB4MDIpCiAjZGVmaW5lIE1QSTJfUkVRX0RFU0NSSVBUX0ZMQUdTX0hJR0hfUFJJT1JJVFkgICAgICAgICAgICgweDA2KQogI2RlZmluZSBNUEkyX1JFUV9ERVNDUklQVF9GTEFHU19ERUZBVUxUX1RZUEUgICAgICAgICAgICAoMHgwOCkKKyNkZWZpbmUgTVBJMl9SRVFfREVTQ1JJUFRfRkxBR1NfUkFJRF9BQ0NFTEVSQVRPUiAgICAgICAgKDB4MEEpCiAKICNkZWZpbmUgTVBJMl9SRVFfREVTQ1JJUFRfRkxBR1NfSU9DX0ZJRk9fTUFSS0VSICgweDAxKQogCkBAIC0yNzksNyArMjg3LDcgQEAKIHR5cGVkZWYgc3RydWN0IF9NUEkyX0hJR0hfUFJJT1JJVFlfUkVRVUVTVF9ERVNDUklQVE9SCiB7CiAgICAgVTggICAgICAgICAgICAgIFJlcXVlc3RGbGFnczsgICAgICAgICAgICAgICAvKiAweDAwICovCi0gICAgVTggICAgICAgICAgICAgIFZGX0lEOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDAxICovCisgICAgVTggICAgICAgICAgICAgIE1TSXhJbmRleDsgICAgICAgICAgICAgICAgICAvKiAweDAxICovCiAgICAgVTE2ICAgICAgICAgICAgIFNNSUQ7ICAgICAgICAgICAgICAgICAgICAgICAvKiAweDAyICovCiAgICAgVTE2ICAgICAgICAgICAgIExNSUQ7ICAgICAgICAgICAgICAgICAgICAgICAvKiAweDA0ICovCiAgICAgVTE2ICAgICAgICAgICAgIFJlc2VydmVkMTsgICAgICAgICAgICAgICAgICAvKiAweDA2ICovCkBAIC0yOTMsNyArMzAxLDcgQEAKIHR5cGVkZWYgc3RydWN0IF9NUEkyX1NDU0lfSU9fUkVRVUVTVF9ERVNDUklQVE9SCiB7CiAgICAgVTggICAgICAgICAgICAgIFJlcXVlc3RGbGFnczsgICAgICAgICAgICAgICAvKiAweDAwICovCi0gICAgVTggICAgICAgICAgICAgIFZGX0lEOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDAxICovCisgICAgVTggICAgICAgICAgICAgIE1TSXhJbmRleDsgICAgICAgICAgICAgICAgICAvKiAweDAxICovCiAgICAgVTE2ICAgICAgICAgICAgIFNNSUQ7ICAgICAgICAgICAgICAgICAgICAgICAvKiAweDAyICovCiAgICAgVTE2ICAgICAgICAgICAgIExNSUQ7ICAgICAgICAgICAgICAgICAgICAgICAvKiAweDA0ICovCiAgICAgVTE2ICAgICAgICAgICAgIERldkhhbmRsZTsgICAgICAgICAgICAgICAgICAvKiAweDA2ICovCkBAIC0zMDYsNyArMzE0LDcgQEAKIHR5cGVkZWYgc3RydWN0IF9NUEkyX1NDU0lfVEFSR0VUX1JFUVVFU1RfREVTQ1JJUFRPUgogewogICAgIFU4ICAgICAgICAgICAgICBSZXF1ZXN0RmxhZ3M7ICAgICAgICAgICAgICAgLyogMHgwMCAqLwotICAgIFU4ICAgICAgICAgICAgICBWRl9JRDsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMSAqLworICAgIFU4ICAgICAgICAgICAgICBNU0l4SW5kZXg7ICAgICAgICAgICAgICAgICAgLyogMHgwMSAqLwogICAgIFUxNiAgICAgICAgICAgICBTTUlEOyAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMiAqLwogICAgIFUxNiAgICAgICAgICAgICBMTUlEOyAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwNCAqLwogICAgIFUxNiAgICAgICAgICAgICBJb0luZGV4OyAgICAgICAgICAgICAgICAgICAgLyogMHgwNiAqLwpAQCAtMzE1LDE0ICszMjMsMjkgQEAKICAgTXBpMlNDU0lUYXJnZXRSZXF1ZXN0RGVzY3JpcHRvcl90LAogICBNUEkyX1BPSU5URVIgcE1waTJTQ1NJVGFyZ2V0UmVxdWVzdERlc2NyaXB0b3JfdDsKIAorCisvKiBSQUlEIEFjY2VsZXJhdG9yIFJlcXVlc3QgRGVzY3JpcHRvciAqLwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfUkFJRF9BQ0NFTF9SRVFVRVNUX0RFU0NSSVBUT1IgeworICAgIFU4ICAgICAgICAgICAgICBSZXF1ZXN0RmxhZ3M7ICAgICAgICAgICAgICAgLyogMHgwMCAqLworICAgIFU4ICAgICAgICAgICAgICBNU0l4SW5kZXg7ICAgICAgICAgICAgICAgICAgLyogMHgwMSAqLworICAgIFUxNiAgICAgICAgICAgICBTTUlEOyAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMiAqLworICAgIFUxNiAgICAgICAgICAgICBMTUlEOyAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwNCAqLworICAgIFUxNiAgICAgICAgICAgICBSZXNlcnZlZDsgICAgICAgICAgICAgICAgICAgLyogMHgwNiAqLworfSBNUEkyX1JBSURfQUNDRUxfUkVRVUVTVF9ERVNDUklQVE9SLAorICBNUEkyX1BPSU5URVIgUFRSX01QSTJfUkFJRF9BQ0NFTF9SRVFVRVNUX0RFU0NSSVBUT1IsCisgIE1waTJSQUlEQWNjZWxlcmF0b3JSZXF1ZXN0RGVzY3JpcHRvcl90LAorICBNUEkyX1BPSU5URVIgcE1waTJSQUlEQWNjZWxlcmF0b3JSZXF1ZXN0RGVzY3JpcHRvcl90OworCisKIC8qIHVuaW9uIG9mIFJlcXVlc3QgRGVzY3JpcHRvcnMgKi8KIHR5cGVkZWYgdW5pb24gX01QSTJfUkVRVUVTVF9ERVNDUklQVE9SX1VOSU9OCiB7Ci0gICAgTVBJMl9ERUZBVUxUX1JFUVVFU1RfREVTQ1JJUFRPUiAgICAgICAgIERlZmF1bHQ7Ci0gICAgTVBJMl9ISUdIX1BSSU9SSVRZX1JFUVVFU1RfREVTQ1JJUFRPUiAgIEhpZ2hQcmlvcml0eTsKLSAgICBNUEkyX1NDU0lfSU9fUkVRVUVTVF9ERVNDUklQVE9SICAgICAgICAgU0NTSUlPOwotICAgIE1QSTJfU0NTSV9UQVJHRVRfUkVRVUVTVF9ERVNDUklQVE9SICAgICBTQ1NJVGFyZ2V0OwotICAgIFU2NCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXb3JkczsKKyAgICBNUEkyX0RFRkFVTFRfUkVRVUVTVF9ERVNDUklQVE9SICAgICAgICAgICAgIERlZmF1bHQ7CisgICAgTVBJMl9ISUdIX1BSSU9SSVRZX1JFUVVFU1RfREVTQ1JJUFRPUiAgICAgICBIaWdoUHJpb3JpdHk7CisgICAgTVBJMl9TQ1NJX0lPX1JFUVVFU1RfREVTQ1JJUFRPUiAgICAgICAgICAgICBTQ1NJSU87CisgICAgTVBJMl9TQ1NJX1RBUkdFVF9SRVFVRVNUX0RFU0NSSVBUT1IgICAgICAgICBTQ1NJVGFyZ2V0OworICAgIE1QSTJfUkFJRF9BQ0NFTF9SRVFVRVNUX0RFU0NSSVBUT1IgICAgICAgICAgUkFJREFjY2VsZXJhdG9yOworICAgIFU2NCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV29yZHM7CiB9IE1QSTJfUkVRVUVTVF9ERVNDUklQVE9SX1VOSU9OLCBNUEkyX1BPSU5URVIgUFRSX01QSTJfUkVRVUVTVF9ERVNDUklQVE9SX1VOSU9OLAogICBNcGkyUmVxdWVzdERlc2NyaXB0b3JVbmlvbl90LCBNUEkyX1BPSU5URVIgcE1waTJSZXF1ZXN0RGVzY3JpcHRvclVuaW9uX3Q7CiAKQEAgLTMzMywxOSArMzU2LDIwIEBACiB0eXBlZGVmIHN0cnVjdCBfTVBJMl9ERUZBVUxUX1JFUExZX0RFU0NSSVBUT1IKIHsKICAgICBVOCAgICAgICAgICAgICAgUmVwbHlGbGFnczsgICAgICAgICAgICAgICAgIC8qIDB4MDAgKi8KLSAgICBVOCAgICAgICAgICAgICAgVkZfSUQ7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDEgKi8KKyAgICBVOCAgICAgICAgICAgICAgTVNJeEluZGV4OyAgICAgICAgICAgICAgICAgIC8qIDB4MDEgKi8KICAgICBVMTYgICAgICAgICAgICAgRGVzY3JpcHRvclR5cGVEZXBlbmRlbnQxOyAgIC8qIDB4MDIgKi8KICAgICBVMzIgICAgICAgICAgICAgRGVzY3JpcHRvclR5cGVEZXBlbmRlbnQyOyAgIC8qIDB4MDQgKi8KIH0gTVBJMl9ERUZBVUxUX1JFUExZX0RFU0NSSVBUT1IsIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9ERUZBVUxUX1JFUExZX0RFU0NSSVBUT1IsCiAgIE1waTJEZWZhdWx0UmVwbHlEZXNjcmlwdG9yX3QsIE1QSTJfUE9JTlRFUiBwTXBpMkRlZmF1bHRSZXBseURlc2NyaXB0b3JfdDsKIAogLyogZGVmaW5lcyBmb3IgdGhlIFJlcGx5RmxhZ3MgZmllbGQgKi8KLSNkZWZpbmUgTVBJMl9SUFlfREVTQ1JJUFRfRkxBR1NfVFlQRV9NQVNLICAgICAgICAgICAgICAgKDB4MEYpCi0jZGVmaW5lIE1QSTJfUlBZX0RFU0NSSVBUX0ZMQUdTX1NDU0lfSU9fU1VDQ0VTUyAgICAgICAgICgweDAwKQotI2RlZmluZSBNUEkyX1JQWV9ERVNDUklQVF9GTEFHU19BRERSRVNTX1JFUExZICAgICAgICAgICAoMHgwMSkKLSNkZWZpbmUgTVBJMl9SUFlfREVTQ1JJUFRfRkxBR1NfVEFSR0VUQVNTSVNUX1NVQ0NFU1MgICAgKDB4MDIpCi0jZGVmaW5lIE1QSTJfUlBZX0RFU0NSSVBUX0ZMQUdTX1RBUkdFVF9DT01NQU5EX0JVRkZFUiAgICgweDAzKQotI2RlZmluZSBNUEkyX1JQWV9ERVNDUklQVF9GTEFHU19VTlVTRUQgICAgICAgICAgICAgICAgICAoMHgwRikKKyNkZWZpbmUgTVBJMl9SUFlfREVTQ1JJUFRfRkxBR1NfVFlQRV9NQVNLICAgICAgICAgICAgICAgICAgICgweDBGKQorI2RlZmluZSBNUEkyX1JQWV9ERVNDUklQVF9GTEFHU19TQ1NJX0lPX1NVQ0NFU1MgICAgICAgICAgICAgKDB4MDApCisjZGVmaW5lIE1QSTJfUlBZX0RFU0NSSVBUX0ZMQUdTX0FERFJFU1NfUkVQTFkgICAgICAgICAgICAgICAoMHgwMSkKKyNkZWZpbmUgTVBJMl9SUFlfREVTQ1JJUFRfRkxBR1NfVEFSR0VUQVNTSVNUX1NVQ0NFU1MgICAgICAgICgweDAyKQorI2RlZmluZSBNUEkyX1JQWV9ERVNDUklQVF9GTEFHU19UQVJHRVRfQ09NTUFORF9CVUZGRVIgICAgICAgKDB4MDMpCisjZGVmaW5lIE1QSTJfUlBZX0RFU0NSSVBUX0ZMQUdTX1JBSURfQUNDRUxFUkFUT1JfU1VDQ0VTUyAgICAoMHgwNSkKKyNkZWZpbmUgTVBJMl9SUFlfREVTQ1JJUFRfRkxBR1NfVU5VU0VEICAgICAgICAgICAgICAgICAgICAgICgweDBGKQogCiAvKiB2YWx1ZXMgZm9yIG1hcmtpbmcgYSByZXBseSBkZXNjcmlwdG9yIGFzIHVudXNlZCAqLwogI2RlZmluZSBNUEkyX1JQWV9ERVNDUklQVF9VTlVTRURfV09SRDBfTUFSSyAgICAgICAgICAgICAoMHhGRkZGRkZGRikKQEAgLTM1NSw3ICszNzksNyBAQAogdHlwZWRlZiBzdHJ1Y3QgX01QSTJfQUREUkVTU19SRVBMWV9ERVNDUklQVE9SCiB7CiAgICAgVTggICAgICAgICAgICAgIFJlcGx5RmxhZ3M7ICAgICAgICAgICAgICAgICAvKiAweDAwICovCi0gICAgVTggICAgICAgICAgICAgIFZGX0lEOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDAxICovCisgICAgVTggICAgICAgICAgICAgIE1TSXhJbmRleDsgICAgICAgICAgICAgICAgICAvKiAweDAxICovCiAgICAgVTE2ICAgICAgICAgICAgIFNNSUQ7ICAgICAgICAgICAgICAgICAgICAgICAvKiAweDAyICovCiAgICAgVTMyICAgICAgICAgICAgIFJlcGx5RnJhbWVBZGRyZXNzOyAgICAgICAgICAvKiAweDA0ICovCiB9IE1QSTJfQUREUkVTU19SRVBMWV9ERVNDUklQVE9SLCBNUEkyX1BPSU5URVIgUFRSX01QSTJfQUREUkVTU19SRVBMWV9ERVNDUklQVE9SLApAQCAtMzY4LDEwICszOTIsMTAgQEAKIHR5cGVkZWYgc3RydWN0IF9NUEkyX1NDU0lfSU9fU1VDQ0VTU19SRVBMWV9ERVNDUklQVE9SCiB7CiAgICAgVTggICAgICAgICAgICAgIFJlcGx5RmxhZ3M7ICAgICAgICAgICAgICAgICAvKiAweDAwICovCi0gICAgVTggICAgICAgICAgICAgIFZGX0lEOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDAxICovCisgICAgVTggICAgICAgICAgICAgIE1TSXhJbmRleDsgICAgICAgICAgICAgICAgICAvKiAweDAxICovCiAgICAgVTE2ICAgICAgICAgICAgIFNNSUQ7ICAgICAgICAgICAgICAgICAgICAgICAvKiAweDAyICovCiAgICAgVTE2ICAgICAgICAgICAgIFRhc2tUYWc7ICAgICAgICAgICAgICAgICAgICAvKiAweDA0ICovCi0gICAgVTE2ICAgICAgICAgICAgIERldkhhbmRsZTsgICAgICAgICAgICAgICAgICAvKiAweDA2ICovCisgICAgVTE2ICAgICAgICAgICAgIFJlc2VydmVkMTsgICAgICAgICAgICAgICAgICAvKiAweDA2ICovCiB9IE1QSTJfU0NTSV9JT19TVUNDRVNTX1JFUExZX0RFU0NSSVBUT1IsCiAgIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9TQ1NJX0lPX1NVQ0NFU1NfUkVQTFlfREVTQ1JJUFRPUiwKICAgTXBpMlNDU0lJT1N1Y2Nlc3NSZXBseURlc2NyaXB0b3JfdCwKQEAgLTM4Miw3ICs0MDYsNyBAQAogdHlwZWRlZiBzdHJ1Y3QgX01QSTJfVEFSR0VUQVNTSVNUX1NVQ0NFU1NfUkVQTFlfREVTQ1JJUFRPUgogewogICAgIFU4ICAgICAgICAgICAgICBSZXBseUZsYWdzOyAgICAgICAgICAgICAgICAgLyogMHgwMCAqLwotICAgIFU4ICAgICAgICAgICAgICBWRl9JRDsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMSAqLworICAgIFU4ICAgICAgICAgICAgICBNU0l4SW5kZXg7ICAgICAgICAgICAgICAgICAgLyogMHgwMSAqLwogICAgIFUxNiAgICAgICAgICAgICBTTUlEOyAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMiAqLwogICAgIFU4ICAgICAgICAgICAgICBTZXF1ZW5jZU51bWJlcjsgICAgICAgICAgICAgLyogMHgwNCAqLwogICAgIFU4ICAgICAgICAgICAgICBSZXNlcnZlZDE7ICAgICAgICAgICAgICAgICAgLyogMHgwNSAqLwpAQCAtMzk3LDcgKzQyMSw3IEBACiB0eXBlZGVmIHN0cnVjdCBfTVBJMl9UQVJHRVRfQ09NTUFORF9CVUZGRVJfUkVQTFlfREVTQ1JJUFRPUgogewogICAgIFU4ICAgICAgICAgICAgICBSZXBseUZsYWdzOyAgICAgICAgICAgICAgICAgLyogMHgwMCAqLwotICAgIFU4ICAgICAgICAgICAgICBWRl9JRDsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMSAqLworICAgIFU4ICAgICAgICAgICAgICBNU0l4SW5kZXg7ICAgICAgICAgICAgICAgICAgLyogMHgwMSAqLwogICAgIFU4ICAgICAgICAgICAgICBWUF9JRDsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMiAqLwogICAgIFU4ICAgICAgICAgICAgICBGbGFnczsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMyAqLwogICAgIFUxNiAgICAgICAgICAgICBJbml0aWF0b3JEZXZIYW5kbGU7ICAgICAgICAgLyogMHgwNCAqLwpAQCAtNDExLDE1ICs0MzUsMjggQEAKICNkZWZpbmUgTVBJMl9SUFlfREVTQ1JJUFRfVENCX0ZMQUdTX1BIWU5VTV9NQVNLICAgICAoMHgzRikKIAogCisvKiBSQUlEIEFjY2VsZXJhdG9yIFN1Y2Nlc3MgUmVwbHkgRGVzY3JpcHRvciAqLwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfUkFJRF9BQ0NFTEVSQVRPUl9TVUNDRVNTX1JFUExZX0RFU0NSSVBUT1IgeworICAgIFU4ICAgICAgICAgICAgICBSZXBseUZsYWdzOyAgICAgICAgICAgICAgICAgLyogMHgwMCAqLworICAgIFU4ICAgICAgICAgICAgICBNU0l4SW5kZXg7ICAgICAgICAgICAgICAgICAgLyogMHgwMSAqLworICAgIFUxNiAgICAgICAgICAgICBTTUlEOyAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMiAqLworICAgIFUzMiAgICAgICAgICAgICBSZXNlcnZlZDsgICAgICAgICAgICAgICAgICAgLyogMHgwNCAqLworfSBNUEkyX1JBSURfQUNDRUxFUkFUT1JfU1VDQ0VTU19SRVBMWV9ERVNDUklQVE9SLAorICBNUEkyX1BPSU5URVIgUFRSX01QSTJfUkFJRF9BQ0NFTEVSQVRPUl9TVUNDRVNTX1JFUExZX0RFU0NSSVBUT1IsCisgIE1waTJSQUlEQWNjZWxlcmF0b3JTdWNjZXNzUmVwbHlEZXNjcmlwdG9yX3QsCisgIE1QSTJfUE9JTlRFUiBwTXBpMlJBSURBY2NlbGVyYXRvclN1Y2Nlc3NSZXBseURlc2NyaXB0b3JfdDsKKworCiAvKiB1bmlvbiBvZiBSZXBseSBEZXNjcmlwdG9ycyAqLwogdHlwZWRlZiB1bmlvbiBfTVBJMl9SRVBMWV9ERVNDUklQVE9SU19VTklPTgogewotICAgIE1QSTJfREVGQVVMVF9SRVBMWV9ERVNDUklQVE9SICAgICAgICAgICAgICAgRGVmYXVsdDsKLSAgICBNUEkyX0FERFJFU1NfUkVQTFlfREVTQ1JJUFRPUiAgICAgICAgICAgICAgIEFkZHJlc3NSZXBseTsKLSAgICBNUEkyX1NDU0lfSU9fU1VDQ0VTU19SRVBMWV9ERVNDUklQVE9SICAgICAgIFNDU0lJT1N1Y2Nlc3M7Ci0gICAgTVBJMl9UQVJHRVRBU1NJU1RfU1VDQ0VTU19SRVBMWV9ERVNDUklQVE9SICBUYXJnZXRBc3Npc3RTdWNjZXNzOwotICAgIE1QSTJfVEFSR0VUX0NPTU1BTkRfQlVGRkVSX1JFUExZX0RFU0NSSVBUT1IgVGFyZ2V0Q29tbWFuZEJ1ZmZlcjsKLSAgICBVNjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdvcmRzOworICAgIE1QSTJfREVGQVVMVF9SRVBMWV9ERVNDUklQVE9SICAgICAgICAgICAgICAgICAgIERlZmF1bHQ7CisgICAgTVBJMl9BRERSRVNTX1JFUExZX0RFU0NSSVBUT1IgICAgICAgICAgICAgICAgICAgQWRkcmVzc1JlcGx5OworICAgIE1QSTJfU0NTSV9JT19TVUNDRVNTX1JFUExZX0RFU0NSSVBUT1IgICAgICAgICAgIFNDU0lJT1N1Y2Nlc3M7CisgICAgTVBJMl9UQVJHRVRBU1NJU1RfU1VDQ0VTU19SRVBMWV9ERVNDUklQVE9SICAgICAgVGFyZ2V0QXNzaXN0U3VjY2VzczsKKyAgICBNUEkyX1RBUkdFVF9DT01NQU5EX0JVRkZFUl9SRVBMWV9ERVNDUklQVE9SICAgICBUYXJnZXRDb21tYW5kQnVmZmVyOworICAgIE1QSTJfUkFJRF9BQ0NFTEVSQVRPUl9TVUNDRVNTX1JFUExZX0RFU0NSSVBUT1IgIFJBSURBY2NlbGVyYXRvclN1Y2Nlc3M7CisgICAgVTY0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV29yZHM7CiB9IE1QSTJfUkVQTFlfREVTQ1JJUFRPUlNfVU5JT04sIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9SRVBMWV9ERVNDUklQVE9SU19VTklPTiwKICAgTXBpMlJlcGx5RGVzY3JpcHRvcnNVbmlvbl90LCBNUEkyX1BPSU5URVIgcE1waTJSZXBseURlc2NyaXB0b3JzVW5pb25fdDsKIApAQCAtNDU4LDYgKzQ5NSw3IEBACiAjZGVmaW5lIE1QSTJfRlVOQ1RJT05fRElBR19SRUxFQVNFICAgICAgICAgICAgICAgICAgKDB4MUUpIC8qIERpYWdub3N0aWMgUmVsZWFzZSAqLwogI2RlZmluZSBNUEkyX0ZVTkNUSU9OX1RBUkdFVF9DTURfQlVGX0JBU0VfUE9TVCAgICAgICgweDI0KSAvKiBUYXJnZXQgQ29tbWFuZCBCdWZmZXIgUG9zdCBCYXNlICovCiAjZGVmaW5lIE1QSTJfRlVOQ1RJT05fVEFSR0VUX0NNRF9CVUZfTElTVF9QT1NUICAgICAgKDB4MjUpIC8qIFRhcmdldCBDb21tYW5kIEJ1ZmZlciBQb3N0IExpc3QgKi8KKyNkZWZpbmUgTVBJMl9GVU5DVElPTl9SQUlEX0FDQ0VMRVJBVE9SICAgICAgICAgICAgICAoMHgyQykgLyogUkFJRCBBY2NlbGVyYXRvciovCiAKIAogCkBAIC01NTUsMTIgKzU5MywxNyBAQAogCiAjZGVmaW5lIE1QSTJfSU9DU1RBVFVTX0RJQUdOT1NUSUNfUkVMRUFTRUQgICAgICAgICAgKDB4MDBBMCkKIAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIFJBSUQgQWNjZWxlcmF0b3IgdmFsdWVzCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIE1QSTJfSU9DU1RBVFVTX1JBSURfQUNDRUxfRVJST1IgICAgICAgICAgICAgKDB4MDBCMCkKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogIElPQ1N0YXR1cyBmbGFnIHRvIGluZGljYXRlIHRoYXQgbG9nIGluZm8gaXMgYXZhaWxhYmxlCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0jZGVmaW5lIE1QSTJfSU9DU1RBVFVTX0ZMQUdfTE9HX0lORk9fQVZBSUxBQkxFICAoMHg4MDAwKQorI2RlZmluZSBNUEkyX0lPQ1NUQVRVU19GTEFHX0xPR19JTkZPX0FWQUlMQUJMRSAgICAgICgweDgwMDApCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqICBJT0NMb2dJbmZvIFR5cGVzCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcGkvbXBpMl9jbmZnLmggYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcGkvbXBpMl9jbmZnLmgKaW5kZXggMmYyN2NmNi4uYWI0N2M0NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXBpL21waTJfY25mZy5oCisrKyBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21waS9tcGkyX2NuZmcuaApAQCAtNiw3ICs2LDcgQEAKICAqICAgICAgICAgIFRpdGxlOiAgTVBJIENvbmZpZ3VyYXRpb24gbWVzc2FnZXMgYW5kIHBhZ2VzCiAgKiAgQ3JlYXRpb24gRGF0ZTogIE5vdmVtYmVyIDEwLCAyMDA2CiAgKgotICogICAgbXBpMl9jbmZnLmggVmVyc2lvbjogIDAyLjAwLjEwCisgKiAgICBtcGkyX2NuZmcuaCBWZXJzaW9uOiAgMDIuMDAuMTEKICAqCiAgKiAgVmVyc2lvbiBIaXN0b3J5CiAgKiAgLS0tLS0tLS0tLS0tLS0tCkBAIC05NSw2ICs5NSwxMSBAQAogICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgTVBJMl9TQVNfREVWSUNFMF9BU1RBVFVTX0RFVklDRV9CTE9DS0VEIGRlZmluZS4KICAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIFBvcnRHcm91cHMsIERtYUdyb3VwLCBhbmQgQ29udHJvbEdyb3VwIGZpZWxkcyB0bwogICogICAgICAgICAgICAgICAgICAgICAgU0FTIERldmljZSBQYWdlIDAuCisgKiAgMDUtMDYtMDkgIDAyLjAwLjExICBBZGRlZCBzdHJ1Y3R1cmVzIGFuZCBkZWZpbmVzIGZvciBJTyBVbml0IFBhZ2UgNSBhbmQgSU8KKyAqICAgICAgICAgICAgICAgICAgICAgIFVuaXQgUGFnZSA2LgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgZXhwYW5kZXIgcmVkdWNlZCBmdW5jdGlvbmFsaXR5IGRhdGEgdG8gU0FTCisgKiAgICAgICAgICAgICAgICAgICAgICBFeHBhbmRlciBQYWdlIDAuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBTQVMgUEhZIFBhZ2UgMiBhbmQgU0FTIFBIWSBQYWdlIDMuCiAgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqLwogCkBAIC03MjMsNiArNzI4LDY1IEBACiAjZGVmaW5lIE1QSTJfSU9VTklUUEFHRTNfR1BJT19TRVRUSU5HX09OICAgICAgICAgICAgICAgICgweDAwMDEpCiAKIAorLyogSU8gVW5pdCBQYWdlIDUgKi8KKworLyoKKyAqIFVwcGVyIGxheWVyIGNvZGUgKGRyaXZlcnMsIHV0aWxpdGllcywgZXRjLikgc2hvdWxkIGxlYXZlIHRoaXMgZGVmaW5lIHNldCB0bworICogb25lIGFuZCBjaGVjayBIZWFkZXIuUGFnZUxlbmd0aCBvciBOdW1EbWFFbmdpbmVzIGF0IHJ1bnRpbWUuCisgKi8KKyNpZm5kZWYgTVBJMl9JT1VOSVRQQUdFNV9ETUFFTkdJTkVfRU5UUklFUworI2RlZmluZSBNUEkyX0lPVU5JVFBBR0U1X0RNQUVOR0lORV9FTlRSSUVTICAgICAgKDEpCisjZW5kaWYKKwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfQ09ORklHX1BBR0VfSU9fVU5JVF81IHsKKyAgICBNUEkyX0NPTkZJR19QQUdFX0hFQURFUiBIZWFkZXI7CQkJCS8qIDB4MDAgKi8KKyAgICBVNjQgICAgICAgICAgICAgICAgICAgICBSYWlkQWNjZWxlcmF0b3JCdWZmZXJCYXNlQWRkcmVzczsgIC8qIDB4MDQgKi8KKyAgICBVNjQgICAgICAgICAgICAgICAgICAgICBSYWlkQWNjZWxlcmF0b3JCdWZmZXJTaXplOyAgICAgICAgIC8qIDB4MEMgKi8KKyAgICBVNjQgICAgICAgICAgICAgICAgICAgICBSYWlkQWNjZWxlcmF0b3JDb250cm9sQmFzZUFkZHJlc3M7IC8qIDB4MTQgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBSQUNvbnRyb2xTaXplOyAgICAgICAgICAgICAgICAgICAgIC8qIDB4MUMgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBOdW1EbWFFbmdpbmVzOyAgICAgICAgICAgICAgICAgICAgIC8qIDB4MUQgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBSQU1pbkNvbnRyb2xTaXplOyAgICAgICAgICAgICAgICAgIC8qIDB4MUUgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBSQU1heENvbnRyb2xTaXplOyAgICAgICAgICAgICAgICAgIC8qIDB4MUYgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDE7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MjAgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDI7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MjQgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDM7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MjggKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBEbWFFbmdpbmVDYXBhYmlsaXRpZXMKKwkJCQlbTVBJMl9JT1VOSVRQQUdFNV9ETUFFTkdJTkVfRU5UUklFU107IC8qIDB4MkMgKi8KK30gTVBJMl9DT05GSUdfUEFHRV9JT19VTklUXzUsIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9DT05GSUdfUEFHRV9JT19VTklUXzUsCisgIE1waTJJT1VuaXRQYWdlNV90LCBNUEkyX1BPSU5URVIgcE1waTJJT1VuaXRQYWdlNV90OworCisjZGVmaW5lIE1QSTJfSU9VTklUUEFHRTVfUEFHRVZFUlNJT04gICAgICAgICAgICAgICAgICAgICgweDAwKQorCisvKiBkZWZpbmVzIGZvciBJTyBVbml0IFBhZ2UgNSBEbWFFbmdpbmVDYXBhYmlsaXRpZXMgZmllbGQgKi8KKyNkZWZpbmUgTVBJMl9JT1VOSVRQQUdFNV9ETUFfQ0FQX01BU0tfTUFYX1JFUVVFU1RTICAgICAgKDB4RkYwMCkKKyNkZWZpbmUgTVBJMl9JT1VOSVRQQUdFNV9ETUFfQ0FQX1NISUZUX01BWF9SRVFVRVNUUyAgICAgKDE2KQorCisjZGVmaW5lIE1QSTJfSU9VTklUUEFHRTVfRE1BX0NBUF9FRURQICAgICAgICAgICAgICAgICAgICgweDAwMDgpCisjZGVmaW5lIE1QSTJfSU9VTklUUEFHRTVfRE1BX0NBUF9QQVJJVFlfR0VORVJBVElPTiAgICAgICgweDAwMDQpCisjZGVmaW5lIE1QSTJfSU9VTklUUEFHRTVfRE1BX0NBUF9IQVNISU5HICAgICAgICAgICAgICAgICgweDAwMDIpCisjZGVmaW5lIE1QSTJfSU9VTklUUEFHRTVfRE1BX0NBUF9FTkNSWVBUSU9OICAgICAgICAgICAgICgweDAwMDEpCisKKworLyogSU8gVW5pdCBQYWdlIDYgKi8KKwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfQ09ORklHX1BBR0VfSU9fVU5JVF82IHsKKyAgICBNUEkyX0NPTkZJR19QQUdFX0hFQURFUiBIZWFkZXI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMCAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIEZsYWdzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDA0ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgUkFIb3N0Q29udHJvbFNpemU7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDYgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwNyAqLworICAgIFU2NCAgICAgICAgICAgICAgICAgICAgIFJhaWRBY2NlbGVyYXRvckhvc3RDb250cm9sQmFzZUFkZHJlc3M7ICAvKiAweDA4ICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MTAgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgxNCAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDE4ICovCit9IE1QSTJfQ09ORklHX1BBR0VfSU9fVU5JVF82LCBNUEkyX1BPSU5URVIgUFRSX01QSTJfQ09ORklHX1BBR0VfSU9fVU5JVF82LAorICBNcGkySU9Vbml0UGFnZTZfdCwgTVBJMl9QT0lOVEVSIHBNcGkySU9Vbml0UGFnZTZfdDsKKworI2RlZmluZSBNUEkyX0lPVU5JVFBBR0U2X1BBR0VWRVJTSU9OICAgICAgICAgICAgICAgICAgICAoMHgwMCkKKworLyogZGVmaW5lcyBmb3IgSU8gVW5pdCBQYWdlIDYgRmxhZ3MgZmllbGQgKi8KKyNkZWZpbmUgTVBJMl9JT1VOSVRQQUdFNl9GTEFHU19FTkFCTEVfUkFJRF9BQ0NFTEVSQVRPUiAgKDB4MDAwMSkKKworCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiAgIElPQyBDb25maWcgUGFnZXMKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0xNzA5LDEwICsxNzczLDE0IEBACiAgICAgVTY0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZlWm9uZU1hbmFnZXJTQVNBZGRyZXNzOy8qIDB4MkMgKi8KICAgICBVMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBab25lTG9ja0luYWN0aXZpdHlMaW1pdDsgICAgLyogMHgzNCAqLwogICAgIFUxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMTsgICAgICAgICAgICAgICAgICAvKiAweDM2ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGltZVRvUmVkdWNlZEZ1bmM7ICAgICAgICAgIC8qIDB4MzggKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbml0aWFsVGltZVRvUmVkdWNlZEZ1bmM7ICAgLyogMHgzOSAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1heFJlZHVjZWRGdW5jVGltZTsgICAgICAgICAvKiAweDNBICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQyOyAgICAgICAgICAgICAgICAgIC8qIDB4M0IgKi8KIH0gTVBJMl9DT05GSUdfUEFHRV9FWFBBTkRFUl8wLCBNUEkyX1BPSU5URVIgUFRSX01QSTJfQ09ORklHX1BBR0VfRVhQQU5ERVJfMCwKICAgTXBpMkV4cGFuZGVyUGFnZTBfdCwgTVBJMl9QT0lOVEVSIHBNcGkyRXhwYW5kZXJQYWdlMF90OwogCi0jZGVmaW5lIE1QSTJfU0FTRVhQQU5ERVIwX1BBR0VWRVJTSU9OICAgICAgICgweDA1KQorI2RlZmluZSBNUEkyX1NBU0VYUEFOREVSMF9QQUdFVkVSU0lPTiAgICAgICAoMHgwNikKIAogLyogdmFsdWVzIGZvciBTQVMgRXhwYW5kZXIgUGFnZSAwIERpc2NvdmVyeVN0YXR1cyBmaWVsZCAqLwogI2RlZmluZSBNUEkyX1NBU19FWFBBTkRFUjBfRFNfTUFYX0VOQ0xPU1VSRVNfRVhDRUVEICAgICAgICAgKDB4ODAwMDAwMDApCkBAIC0xNzM3LDYgKzE4MDUsNyBAQAogI2RlZmluZSBNUEkyX1NBU19FWFBBTkRFUjBfRFNfTE9PUF9ERVRFQ1RFRCAgICAgICAgICAgICAgICAgKDB4MDAwMDAwMDEpCiAKIC8qIHZhbHVlcyBmb3IgU0FTIEV4cGFuZGVyIFBhZ2UgMCBGbGFncyBmaWVsZCAqLworI2RlZmluZSBNUEkyX1NBU19FWFBBTkRFUjBfRkxBR1NfUkVEVUNFRF9GVU5DVElPTkFMSVRZICAgICAgKDB4MjAwMCkKICNkZWZpbmUgTVBJMl9TQVNfRVhQQU5ERVIwX0ZMQUdTX1pPTkVfTE9DS0VEICAgICAgICAgICAgICAgICgweDEwMDApCiAjZGVmaW5lIE1QSTJfU0FTX0VYUEFOREVSMF9GTEFHU19TVVBQT1JURURfUEhZU0lDQUxfUFJFUyAgICAoMHgwODAwKQogI2RlZmluZSBNUEkyX1NBU19FWFBBTkRFUjBfRkxBR1NfQVNTRVJURURfUEhZU0lDQUxfUFJFUyAgICAgKDB4MDQwMCkKQEAgLTE5NDQsNiArMjAxMywxMzMgQEAKICNkZWZpbmUgTVBJMl9TQVNQSFkxX1BBR0VWRVJTSU9OICAgICAgICAgICAgKDB4MDEpCiAKIAorLyogU0FTIFBIWSBQYWdlIDIgKi8KKwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfU0FTUEhZMl9QSFlfRVZFTlQgeworICAgIFU4ICAgICAgICAgIFBoeUV2ZW50Q29kZTsgICAgICAgLyogMHgwMCAqLworICAgIFU4ICAgICAgICAgIFJlc2VydmVkMTsgICAgICAgICAgLyogMHgwMSAqLworICAgIFUxNiAgICAgICAgIFJlc2VydmVkMjsgICAgICAgICAgLyogMHgwMiAqLworICAgIFUzMiAgICAgICAgIFBoeUV2ZW50SW5mbzsgICAgICAgLyogMHgwNCAqLworfSBNUEkyX1NBU1BIWTJfUEhZX0VWRU5ULCBNUEkyX1BPSU5URVIgUFRSX01QSTJfU0FTUEhZMl9QSFlfRVZFTlQsCisgIE1waTJTYXNQaHkyUGh5RXZlbnRfdCwgTVBJMl9QT0lOVEVSIHBNcGkyU2FzUGh5MlBoeUV2ZW50X3Q7CisKKy8qIHVzZSBNUEkyX1NBU1BIWTNfRVZFTlRfQ09ERV8gZm9yIHRoZSBQaHlFdmVudENvZGUgZmllbGQgKi8KKworCisvKgorICogSG9zdCBjb2RlIChkcml2ZXJzLCBCSU9TLCB1dGlsaXRpZXMsIGV0Yy4pIHNob3VsZCBsZWF2ZSB0aGlzIGRlZmluZSBzZXQgdG8KKyAqIG9uZSBhbmQgY2hlY2sgSGVhZGVyLkV4dFBhZ2VMZW5ndGggb3IgTnVtUGh5RXZlbnRzIGF0IHJ1bnRpbWUuCisgKi8KKyNpZm5kZWYgTVBJMl9TQVNQSFkyX1BIWV9FVkVOVF9NQVgKKyNkZWZpbmUgTVBJMl9TQVNQSFkyX1BIWV9FVkVOVF9NQVggICAgICAoMSkKKyNlbmRpZgorCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9DT05GSUdfUEFHRV9TQVNfUEhZXzIgeworICAgIE1QSTJfQ09ORklHX0VYVEVOREVEX1BBR0VfSEVBREVSICAgIEhlYWRlcjsgICAgICAgICAgICAgICAgICAgICAvKiAweDAwICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQxOyAgICAgICAgICAgICAgICAgIC8qIDB4MDggKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOdW1QaHlFdmVudHM7ICAgICAgICAgICAgICAgLyogMHgwQyAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMjsgICAgICAgICAgICAgICAgICAvKiAweDBEICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQzOyAgICAgICAgICAgICAgICAgIC8qIDB4MEUgKi8KKyAgICBNUEkyX1NBU1BIWTJfUEhZX0VWRU5UICAgICAgICAgICAgICBQaHlFdmVudFtNUEkyX1NBU1BIWTJfUEhZX0VWRU5UX01BWF07CisJCQkJCQkJCS8qIDB4MTAgKi8KK30gTVBJMl9DT05GSUdfUEFHRV9TQVNfUEhZXzIsIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9DT05GSUdfUEFHRV9TQVNfUEhZXzIsCisgIE1waTJTYXNQaHlQYWdlMl90LCBNUEkyX1BPSU5URVIgcE1waTJTYXNQaHlQYWdlMl90OworCisjZGVmaW5lIE1QSTJfU0FTUEhZMl9QQUdFVkVSU0lPTiAgICAgICAgICAgICgweDAwKQorCisKKy8qIFNBUyBQSFkgUGFnZSAzICovCisKK3R5cGVkZWYgc3RydWN0IF9NUEkyX1NBU1BIWTNfUEhZX0VWRU5UX0NPTkZJRyB7CisgICAgVTggICAgICAgICAgUGh5RXZlbnRDb2RlOyAgICAgICAvKiAweDAwICovCisgICAgVTggICAgICAgICAgUmVzZXJ2ZWQxOyAgICAgICAgICAvKiAweDAxICovCisgICAgVTE2ICAgICAgICAgUmVzZXJ2ZWQyOyAgICAgICAgICAvKiAweDAyICovCisgICAgVTggICAgICAgICAgQ291bnRlclR5cGU7ICAgICAgICAvKiAweDA0ICovCisgICAgVTggICAgICAgICAgVGhyZXNob2xkV2luZG93OyAgICAvKiAweDA1ICovCisgICAgVTggICAgICAgICAgVGltZVVuaXRzOyAgICAgICAgICAvKiAweDA2ICovCisgICAgVTggICAgICAgICAgUmVzZXJ2ZWQzOyAgICAgICAgICAvKiAweDA3ICovCisgICAgVTMyICAgICAgICAgRXZlbnRUaHJlc2hvbGQ7ICAgICAvKiAweDA4ICovCisgICAgVTE2ICAgICAgICAgVGhyZXNob2xkRmxhZ3M7ICAgICAvKiAweDBDICovCisgICAgVTE2ICAgICAgICAgUmVzZXJ2ZWQ0OyAgICAgICAgICAvKiAweDBFICovCit9IE1QSTJfU0FTUEhZM19QSFlfRVZFTlRfQ09ORklHLCBNUEkyX1BPSU5URVIgUFRSX01QSTJfU0FTUEhZM19QSFlfRVZFTlRfQ09ORklHLAorICBNcGkyU2FzUGh5M1BoeUV2ZW50Q29uZmlnX3QsIE1QSTJfUE9JTlRFUiBwTXBpMlNhc1BoeTNQaHlFdmVudENvbmZpZ190OworCisvKiB2YWx1ZXMgZm9yIFBoeUV2ZW50Q29kZSBmaWVsZCAqLworI2RlZmluZSBNUEkyX1NBU1BIWTNfRVZFTlRfQ09ERV9OT19FVkVOVCAgICAgICAgICAgICAgICAgICAgKDB4MDApCisjZGVmaW5lIE1QSTJfU0FTUEhZM19FVkVOVF9DT0RFX0lOVkFMSURfRFdPUkQgICAgICAgICAgICAgICAoMHgwMSkKKyNkZWZpbmUgTVBJMl9TQVNQSFkzX0VWRU5UX0NPREVfUlVOTklOR19ESVNQQVJJVFlfRVJST1IgICAgICgweDAyKQorI2RlZmluZSBNUEkyX1NBU1BIWTNfRVZFTlRfQ09ERV9MT1NTX0RXT1JEX1NZTkMgICAgICAgICAgICAgKDB4MDMpCisjZGVmaW5lIE1QSTJfU0FTUEhZM19FVkVOVF9DT0RFX1BIWV9SRVNFVF9QUk9CTEVNICAgICAgICAgICAoMHgwNCkKKyNkZWZpbmUgTVBJMl9TQVNQSFkzX0VWRU5UX0NPREVfRUxBU1RJQ0lUWV9CVUZfT1ZFUkZMT1cgICAgICgweDA1KQorI2RlZmluZSBNUEkyX1NBU1BIWTNfRVZFTlRfQ09ERV9SWF9FUlJPUiAgICAgICAgICAgICAgICAgICAgKDB4MDYpCisjZGVmaW5lIE1QSTJfU0FTUEhZM19FVkVOVF9DT0RFX1JYX0FERFJfRlJBTUVfRVJST1IgICAgICAgICAoMHgyMCkKKyNkZWZpbmUgTVBJMl9TQVNQSFkzX0VWRU5UX0NPREVfVFhfQUNfT1BFTl9SRUpFQ1QgICAgICAgICAgICgweDIxKQorI2RlZmluZSBNUEkyX1NBU1BIWTNfRVZFTlRfQ09ERV9SWF9BQ19PUEVOX1JFSkVDVCAgICAgICAgICAgKDB4MjIpCisjZGVmaW5lIE1QSTJfU0FTUEhZM19FVkVOVF9DT0RFX1RYX1JDX09QRU5fUkVKRUNUICAgICAgICAgICAoMHgyMykKKyNkZWZpbmUgTVBJMl9TQVNQSFkzX0VWRU5UX0NPREVfUlhfUkNfT1BFTl9SRUpFQ1QgICAgICAgICAgICgweDI0KQorI2RlZmluZSBNUEkyX1NBU1BIWTNfRVZFTlRfQ09ERV9SWF9BSVBfUEFSVElBTF9XQUlUSU5HX09OICAgKDB4MjUpCisjZGVmaW5lIE1QSTJfU0FTUEhZM19FVkVOVF9DT0RFX1JYX0FJUF9DT05ORUNUX1dBSVRJTkdfT04gICAoMHgyNikKKyNkZWZpbmUgTVBJMl9TQVNQSFkzX0VWRU5UX0NPREVfVFhfQlJFQUsgICAgICAgICAgICAgICAgICAgICgweDI3KQorI2RlZmluZSBNUEkyX1NBU1BIWTNfRVZFTlRfQ09ERV9SWF9CUkVBSyAgICAgICAgICAgICAgICAgICAgKDB4MjgpCisjZGVmaW5lIE1QSTJfU0FTUEhZM19FVkVOVF9DT0RFX0JSRUFLX1RJTUVPVVQgICAgICAgICAgICAgICAoMHgyOSkKKyNkZWZpbmUgTVBJMl9TQVNQSFkzX0VWRU5UX0NPREVfQ09OTkVDVElPTiAgICAgICAgICAgICAgICAgICgweDJBKQorI2RlZmluZSBNUEkyX1NBU1BIWTNfRVZFTlRfQ09ERV9QRUFLVFhfUEFUSFdBWV9CTE9DS0VEICAgICAgKDB4MkIpCisjZGVmaW5lIE1QSTJfU0FTUEhZM19FVkVOVF9DT0RFX1BFQUtUWF9BUkJfV0FJVF9USU1FICAgICAgICAoMHgyQykKKyNkZWZpbmUgTVBJMl9TQVNQSFkzX0VWRU5UX0NPREVfUEVBS19BUkJfV0FJVF9USU1FICAgICAgICAgICgweDJEKQorI2RlZmluZSBNUEkyX1NBU1BIWTNfRVZFTlRfQ09ERV9QRUFLX0NPTk5FQ1RfVElNRSAgICAgICAgICAgKDB4MkUpCisjZGVmaW5lIE1QSTJfU0FTUEhZM19FVkVOVF9DT0RFX1RYX1NTUF9GUkFNRVMgICAgICAgICAgICAgICAoMHg0MCkKKyNkZWZpbmUgTVBJMl9TQVNQSFkzX0VWRU5UX0NPREVfUlhfU1NQX0ZSQU1FUyAgICAgICAgICAgICAgICgweDQxKQorI2RlZmluZSBNUEkyX1NBU1BIWTNfRVZFTlRfQ09ERV9UWF9TU1BfRVJST1JfRlJBTUVTICAgICAgICAgKDB4NDIpCisjZGVmaW5lIE1QSTJfU0FTUEhZM19FVkVOVF9DT0RFX1JYX1NTUF9FUlJPUl9GUkFNRVMgICAgICAgICAoMHg0MykKKyNkZWZpbmUgTVBJMl9TQVNQSFkzX0VWRU5UX0NPREVfVFhfQ1JFRElUX0JMT0NLRUQgICAgICAgICAgICgweDQ0KQorI2RlZmluZSBNUEkyX1NBU1BIWTNfRVZFTlRfQ09ERV9SWF9DUkVESVRfQkxPQ0tFRCAgICAgICAgICAgKDB4NDUpCisjZGVmaW5lIE1QSTJfU0FTUEhZM19FVkVOVF9DT0RFX1RYX1NBVEFfRlJBTUVTICAgICAgICAgICAgICAoMHg1MCkKKyNkZWZpbmUgTVBJMl9TQVNQSFkzX0VWRU5UX0NPREVfUlhfU0FUQV9GUkFNRVMgICAgICAgICAgICAgICgweDUxKQorI2RlZmluZSBNUEkyX1NBU1BIWTNfRVZFTlRfQ09ERV9TQVRBX09WRVJGTE9XICAgICAgICAgICAgICAgKDB4NTIpCisjZGVmaW5lIE1QSTJfU0FTUEhZM19FVkVOVF9DT0RFX1RYX1NNUF9GUkFNRVMgICAgICAgICAgICAgICAoMHg2MCkKKyNkZWZpbmUgTVBJMl9TQVNQSFkzX0VWRU5UX0NPREVfUlhfU01QX0ZSQU1FUyAgICAgICAgICAgICAgICgweDYxKQorI2RlZmluZSBNUEkyX1NBU1BIWTNfRVZFTlRfQ09ERV9SWF9TTVBfRVJST1JfRlJBTUVTICAgICAgICAgKDB4NjMpCisjZGVmaW5lIE1QSTJfU0FTUEhZM19FVkVOVF9DT0RFX0hPVFBMVUdfVElNRU9VVCAgICAgICAgICAgICAoMHhEMCkKKyNkZWZpbmUgTVBJMl9TQVNQSFkzX0VWRU5UX0NPREVfTUlTQUxJR05FRF9NVVhfUFJJTUlUSVZFICAgICgweEQxKQorI2RlZmluZSBNUEkyX1NBU1BIWTNfRVZFTlRfQ09ERV9SWF9BSVAgICAgICAgICAgICAgICAgICAgICAgKDB4RDIpCisKKy8qIHZhbHVlcyBmb3IgdGhlIENvdW50ZXJUeXBlIGZpZWxkICovCisjZGVmaW5lIE1QSTJfU0FTUEhZM19DT1VOVEVSX1RZUEVfV1JBUFBJTkcgICAgICAgICAgICAgICAgICAoMHgwMCkKKyNkZWZpbmUgTVBJMl9TQVNQSFkzX0NPVU5URVJfVFlQRV9TQVRVUkFUSU5HICAgICAgICAgICAgICAgICgweDAxKQorI2RlZmluZSBNUEkyX1NBU1BIWTNfQ09VTlRFUl9UWVBFX1BFQUtfVkFMVUUgICAgICAgICAgICAgICAgKDB4MDIpCisKKy8qIHZhbHVlcyBmb3IgdGhlIFRpbWVVbml0cyBmaWVsZCAqLworI2RlZmluZSBNUEkyX1NBU1BIWTNfVElNRV9VTklUU18xMF9NSUNST1NFQ09ORFMgICAgICAgICAgICAgKDB4MDApCisjZGVmaW5lIE1QSTJfU0FTUEhZM19USU1FX1VOSVRTXzEwMF9NSUNST1NFQ09ORFMgICAgICAgICAgICAoMHgwMSkKKyNkZWZpbmUgTVBJMl9TQVNQSFkzX1RJTUVfVU5JVFNfMV9NSUxMSVNFQ09ORCAgICAgICAgICAgICAgICgweDAyKQorI2RlZmluZSBNUEkyX1NBU1BIWTNfVElNRV9VTklUU18xMF9NSUxMSVNFQ09ORFMgICAgICAgICAgICAgKDB4MDMpCisKKy8qIHZhbHVlcyBmb3IgdGhlIFRocmVzaG9sZEZsYWdzIGZpZWxkICovCisjZGVmaW5lIE1QSTJfU0FTUEhZM19URkxBR1NfUEhZX1JFU0VUICAgICAgICAgICAgICAgICAgICAgICAoMHgwMDAyKQorI2RlZmluZSBNUEkyX1NBU1BIWTNfVEZMQUdTX0VWRU5UX05PVElGWSAgICAgICAgICAgICAgICAgICAgKDB4MDAwMSkKKworLyoKKyAqIEhvc3QgY29kZSAoZHJpdmVycywgQklPUywgdXRpbGl0aWVzLCBldGMuKSBzaG91bGQgbGVhdmUgdGhpcyBkZWZpbmUgc2V0IHRvCisgKiBvbmUgYW5kIGNoZWNrIEhlYWRlci5FeHRQYWdlTGVuZ3RoIG9yIE51bVBoeUV2ZW50cyBhdCBydW50aW1lLgorICovCisjaWZuZGVmIE1QSTJfU0FTUEhZM19QSFlfRVZFTlRfTUFYCisjZGVmaW5lIE1QSTJfU0FTUEhZM19QSFlfRVZFTlRfTUFYICAgICAgKDEpCisjZW5kaWYKKwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfQ09ORklHX1BBR0VfU0FTX1BIWV8zIHsKKyAgICBNUEkyX0NPTkZJR19FWFRFTkRFRF9QQUdFX0hFQURFUiAgICBIZWFkZXI7ICAgICAgICAgICAgICAgICAgICAgLyogMHgwMCAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMTsgICAgICAgICAgICAgICAgICAvKiAweDA4ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTnVtUGh5RXZlbnRzOyAgICAgICAgICAgICAgIC8qIDB4MEMgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDI7ICAgICAgICAgICAgICAgICAgLyogMHgwRCAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMzsgICAgICAgICAgICAgICAgICAvKiAweDBFICovCisgICAgTVBJMl9TQVNQSFkzX1BIWV9FVkVOVF9DT05GSUcgICAgICAgUGh5RXZlbnRDb25maWcKKwkJCQkJW01QSTJfU0FTUEhZM19QSFlfRVZFTlRfTUFYXTsgLyogMHgxMCAqLworfSBNUEkyX0NPTkZJR19QQUdFX1NBU19QSFlfMywgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX0NPTkZJR19QQUdFX1NBU19QSFlfMywKKyAgTXBpMlNhc1BoeVBhZ2UzX3QsIE1QSTJfUE9JTlRFUiBwTXBpMlNhc1BoeVBhZ2UzX3Q7CisKKyNkZWZpbmUgTVBJMl9TQVNQSFkzX1BBR0VWRVJTSU9OICAgICAgICAgICAgKDB4MDApCisKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogICBTQVMgUG9ydCBDb25maWcgUGFnZXMKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcGkvbXBpMl9oaXN0b3J5LnR4dCBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21waS9tcGkyX2hpc3RvcnkudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1ZmNhYTMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcGkvbXBpMl9oaXN0b3J5LnR4dApAQCAtMCwwICsxLDMzNCBAQAorID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIEZ1c2lvbi1NUFQgTVBJIDIuMCBIZWFkZXIgRmlsZSBDaGFuZ2UgSGlzdG9yeQorID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgQ29weXJpZ2h0IChjKSAyMDAwLTIwMDkgTFNJIENvcnBvcmF0aW9uLgorCisgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSGVhZGVyIFNldCBSZWxlYXNlIFZlcnNpb246ICAgIDAyLjAwLjEyCisgSGVhZGVyIFNldCBSZWxlYXNlIERhdGU6ICAgICAgIDA1LTA2LTA5CisgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyBGaWxlbmFtZSAgICAgICAgICAgICAgIEN1cnJlbnQgdmVyc2lvbiAgICAgUHJpb3IgdmVyc2lvbgorIC0tLS0tLS0tLS0gICAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tICAgICAtLS0tLS0tLS0tLS0tCisgbXBpMi5oICAgICAgICAgICAgICAgICAwMi4wMC4xMiAgICAgICAgICAgIDAyLjAwLjExCisgbXBpMl9jbmZnLmggICAgICAgICAgICAwMi4wMC4xMSAgICAgICAgICAgIDAyLjAwLjEwCisgbXBpMl9pbml0LmggICAgICAgICAgICAwMi4wMC4wNyAgICAgICAgICAgIDAyLjAwLjA2CisgbXBpMl9pb2MuaCAgICAgICAgICAgICAwMi4wMC4xMSAgICAgICAgICAgIDAyLjAwLjEwCisgbXBpMl9yYWlkLmggICAgICAgICAgICAwMi4wMC4wMyAgICAgICAgICAgIDAyLjAwLjAzCisgbXBpMl9zYXMuaCAgICAgICAgICAgICAwMi4wMC4wMiAgICAgICAgICAgIDAyLjAwLjAyCisgbXBpMl90YXJnLmggICAgICAgICAgICAwMi4wMC4wMyAgICAgICAgICAgIDAyLjAwLjAzCisgbXBpMl90b29sLmggICAgICAgICAgICAwMi4wMC4wMyAgICAgICAgICAgIDAyLjAwLjAyCisgbXBpMl90eXBlLmggICAgICAgICAgICAwMi4wMC4wMCAgICAgICAgICAgIDAyLjAwLjAwCisgbXBpMl9yYS5oICAgICAgICAgICAgICAwMi4wMC4wMAorIG1waTJfaGlzdG9yeS50eHQgICAgICAgMDIuMDAuMTEgICAgICAgICAgICAwMi4wMC4xMgorCisKKyAqICBEYXRlICAgICAgVmVyc2lvbiAgIERlc2NyaXB0aW9uCisgKiAgLS0tLS0tLS0gIC0tLS0tLS0tICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbXBpMi5oCisgKiAgMDQtMzAtMDcgIDAyLjAwLjAwICBDb3JyZXNwb25kcyB0byBGdXNpb24tTVBUIE1QSSBTcGVjaWZpY2F0aW9uIFJldiBBLgorICogIDA2LTA0LTA3ICAwMi4wMC4wMSAgQnVtcGVkIE1QSTJfSEVBREVSX1ZFUlNJT05fVU5JVC4KKyAqICAwNi0yNi0wNyAgMDIuMDAuMDIgIEJ1bXBlZCBNUEkyX0hFQURFUl9WRVJTSU9OX1VOSVQuCisgKiAgMDgtMzEtMDcgIDAyLjAwLjAzICBCdW1wZWQgTVBJMl9IRUFERVJfVkVSU0lPTl9VTklULgorICogICAgICAgICAgICAgICAgICAgICAgTW92ZWQgUmVwbHlQb3N0SG9zdEluZGV4IHJlZ2lzdGVyIHRvIG9mZnNldCAweDZDIG9mIHRoZQorICogICAgICAgICAgICAgICAgICAgICAgTVBJMl9TWVNURU1fSU5URVJGQUNFX1JFR1MgYW5kIG1vZGlmaWVkIHRoZSBkZWZpbmUgZm9yCisgKiAgICAgICAgICAgICAgICAgICAgICBNUEkyX1JFUExZX1BPU1RfSE9TVF9JTkRFWF9PRkZTRVQuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCB1bmlvbiBvZiByZXF1ZXN0IGRlc2NyaXB0b3JzLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgdW5pb24gb2YgcmVwbHkgZGVzY3JpcHRvcnMuCisgKiAgMTAtMzEtMDcgIDAyLjAwLjA0ICBCdW1wZWQgTVBJMl9IRUFERVJfVkVSU0lPTl9VTklULgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgZGVmaW5lIGZvciBNUEkyX1ZFUlNJT05fMDJfMDAuCisgKiAgICAgICAgICAgICAgICAgICAgICBGaXhlZCB0aGUgc2l6ZSBvZiB0aGUgRnVuY3Rpb25EZXBlbmRlbnQ1IGZpZWxkIGluIHRoZQorICogICAgICAgICAgICAgICAgICAgICAgTVBJMl9ERUZBVUxUX1JFUExZIHN0cnVjdHVyZS4KKyAqICAxMi0xOC0wNyAgMDIuMDAuMDUgIEJ1bXBlZCBNUEkyX0hFQURFUl9WRVJTSU9OX1VOSVQuCisgKiAgICAgICAgICAgICAgICAgICAgICBSZW1vdmVkIHRoZSBNUEktZGVmaW5lZCBGYXVsdCBDb2RlcyBhbmQgZXh0ZW5kZWQgdGhlCisgKiAgICAgICAgICAgICAgICAgICAgICBwcm9kdWN0IHNwZWNpZmljIGNvZGVzIHVwIHRvIDB4RUZGRi4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIGEgc2l4dGgga2V5IHZhbHVlIGZvciB0aGUgV3JpdGVTZXF1ZW5jZSByZWdpc3RlcgorICogICAgICAgICAgICAgICAgICAgICAgYW5kIGNoYW5nZWQgdGhlIGZsdXNoIHZhbHVlIHRvIDB4MC4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIG1lc3NhZ2UgZnVuY3Rpb24gY29kZXMgZm9yIERpYWdub3N0aWMgQnVmZmVyIFBvc3QKKyAqICAgICAgICAgICAgICAgICAgICAgIGFuZCBEaWFnbnNvdGljIFJlbGVhc2UuCisgKiAgICAgICAgICAgICAgICAgICAgICBOZXcgSU9DU3RhdHVzIGRlZmluZTogTVBJMl9JT0NTVEFUVVNfRElBR05PU1RJQ19SRUxFQVNFRAorICogICAgICAgICAgICAgICAgICAgICAgTW92ZWQgTVBJMl9WRVJTSU9OX1VOSU9OIGZyb20gbXBpMl9pb2MuaC4KKyAqICAwMi0yOS0wOCAgMDIuMDAuMDYgIEJ1bXBlZCBNUEkyX0hFQURFUl9WRVJTSU9OX1VOSVQuCisgKiAgMDMtMDMtMDggIDAyLjAwLjA3ICBCdW1wZWQgTVBJMl9IRUFERVJfVkVSU0lPTl9VTklULgorICogIDA1LTIxLTA4ICAwMi4wMC4wOCAgQnVtcGVkIE1QSTJfSEVBREVSX1ZFUlNJT05fVU5JVC4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkICNkZWZpbmVzIGZvciBtYXJraW5nIGEgcmVwbHkgZGVzY3JpcHRvciBhcyB1bnVzZWQuCisgKiAgMDYtMjctMDggIDAyLjAwLjA5ICBCdW1wZWQgTVBJMl9IRUFERVJfVkVSU0lPTl9VTklULgorICogIDEwLTAyLTA4ICAwMi4wMC4xMCAgQnVtcGVkIE1QSTJfSEVBREVSX1ZFUlNJT05fVU5JVC4KKyAqICAgICAgICAgICAgICAgICAgICAgIE1vdmVkIExVTiBmaWVsZCBkZWZpbmVzIGZyb20gbXBpMl9pbml0LmguCisgKiAgMDEtMTktMDkgIDAyLjAwLjExICBCdW1wZWQgTVBJMl9IRUFERVJfVkVSU0lPTl9VTklULgorICogIDA1LTA2LTA5ICAwMi4wMC4xMiAgQnVtcGVkIE1QSTJfSEVBREVSX1ZFUlNJT05fVU5JVC4KKyAqICAgICAgICAgICAgICAgICAgICAgIEluIGFsbCByZXF1ZXN0IGFuZCByZXBseSBkZXNjcmlwdG9ycywgcmVwbGFjZWQgVkZfSUQKKyAqICAgICAgICAgICAgICAgICAgICAgIGZpZWxkIHdpdGggTVNJeEluZGV4IGZpZWxkLgorICogICAgICAgICAgICAgICAgICAgICAgUmVtb3ZlZCBEZXZIYW5kbGUgZmllbGQgZnJvbQorICogICAgICAgICAgICAgICAgICAgICAgTVBJMl9TQ1NJX0lPX1NVQ0NFU1NfUkVQTFlfREVTQ1JJUFRPUiBhbmQgbWFkZSB0aG9zZQorICogICAgICAgICAgICAgICAgICAgICAgYnl0ZXMgcmVzZXJ2ZWQuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBSQUlEIEFjY2VsZXJhdG9yIGZ1bmN0aW9uYWxpdHkuCisgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbXBpMl9jbmZnLmgKKyAqICAwNC0zMC0wNyAgMDIuMDAuMDAgIENvcnJlc3BvbmRzIHRvIEZ1c2lvbi1NUFQgTVBJIFNwZWNpZmljYXRpb24gUmV2IEEuCisgKiAgMDYtMDQtMDcgIDAyLjAwLjAxICBBZGRlZCBkZWZpbmVzIGZvciBTQVMgSU8gVW5pdCBQYWdlIDIgUGh5RmxhZ3MuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBNYW51ZmFjdHVyaW5nIFBhZ2UgMTEuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBNUEkyX1NBU19FWFBBTkRFUjBfRkxBR1NfQ09OTkVDVE9SX0VORF9ERVZJQ0UKKyAqICAgICAgICAgICAgICAgICAgICAgIGRlZmluZS4KKyAqICAwNi0yNi0wNyAgMDIuMDAuMDIgIEFkZGluZyBnZW5lcmljIHN0cnVjdHVyZSBmb3IgcHJvZHVjdC1zcGVjaWZpYworICogICAgICAgICAgICAgICAgICAgICAgTWFudWZhY3R1cmluZyBwYWdlczogTVBJMl9DT05GSUdfUEFHRV9NQU5VRkFDVFVSSU5HX1BTLgorICogICAgICAgICAgICAgICAgICAgICAgUmV3b3JrIG9mIEJJT1MgUGFnZSAyIGNvbmZpZ3VyYXRpb24gcGFnZS4KKyAqICAgICAgICAgICAgICAgICAgICAgIEZpeGVkIE1QSTJfQklPU1BBR0UyX0JPT1RfREVWSUNFIHRvIGJlIGEgdW5pb24gb2YgdGhlCisgKiAgICAgICAgICAgICAgICAgICAgICBmb3Jtcy4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIGNvbmZpZ3VyYXRpb24gcGFnZXMgSU9DIFBhZ2UgOCBhbmQgRHJpdmVyCisgKiAgICAgICAgICAgICAgICAgICAgICBQZXJzaXN0ZW50IE1hcHBpbmcgUGFnZSAwLgorICogIDA4LTMxLTA3ICAwMi4wMC4wMyAgTW9kaWZpZWQgY29uZmlndXJhdGlvbiBwYWdlcyBkZWFsaW5nIHdpdGggSW50ZWdyYXRlZAorICogICAgICAgICAgICAgICAgICAgICAgUkFJRCAoTWFudWZhY3R1cmluZyBQYWdlIDQsIFJBSUQgVm9sdW1lIFBhZ2VzIDAgYW5kIDEsCisgKiAgICAgICAgICAgICAgICAgICAgICBSQUlEIFBoeXNpY2FsIERpc2sgUGFnZXMgMCBhbmQgMSwgUkFJRCBDb25maWd1cmF0aW9uCisgKiAgICAgICAgICAgICAgICAgICAgICBQYWdlIDApLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgbmV3IHZhbHVlIGZvciBBY2Nlc3NTdGF0dXMgZmllbGQgb2YgU0FTIERldmljZQorICogICAgICAgICAgICAgICAgICAgICAgUGFnZSAwIChfU0FUQV9ORUVEU19JTklUSUFMSVpBVElPTikuCisgKiAgMTAtMzEtMDcgIDAyLjAwLjA0ICBBZGRlZCBtaXNzaW5nIFNFUERldkhhbmRsZSBmaWVsZCB0bworICogICAgICAgICAgICAgICAgICAgICAgTVBJMl9DT05GSUdfUEFHRV9TQVNfRU5DTE9TVVJFXzAuCisgKiAgMTItMTgtMDcgIDAyLjAwLjA1ICBNb2RpZmllZCBJTyBVbml0IFBhZ2UgMCB0byB1c2UgMzItYml0IHZlcnNpb24gZmllbGRzIGZvcgorICogICAgICAgICAgICAgICAgICAgICAgTlZEQVRBLgorICogICAgICAgICAgICAgICAgICAgICAgTW9kaWZpZWQgSU9DIFBhZ2UgNyB0byB1c2UgbWFza3MgYW5kIGFkZGVkIGZpZWxkIGZvcgorICogICAgICAgICAgICAgICAgICAgICAgU0FTQnJvYWRjYXN0UHJpbWl0aXZlTWFza3MuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBNUEkyX0NPTkZJR19QQUdFX0JJT1NfNC4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIE1QSTJfQ09ORklHX1BBR0VfTE9HXzAuCisgKiAgMDItMjktMDggIDAyLjAwLjA2ICBNb2RpZmllZCB2YXJpb3VzIG5hbWVzIHRvIG1ha2UgdGhlbSAzMi1jaGFyYWN0ZXIgdW5pcXVlLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgU0FTIERldmljZSBJRHMuCisgKiAgICAgICAgICAgICAgICAgICAgICBVcGRhdGVkIEludGVncmF0ZWQgUkFJRCBjb25maWd1cmF0aW9uIHBhZ2VzIGluY2x1ZGluZworICogICAgICAgICAgICAgICAgICAgICAgTWFudWZhY3R1cmluZyBQYWdlIDQsIElPQyBQYWdlIDYsIGFuZCBSQUlEIENvbmZpZ3VyYXRpb24KKyAqICAgICAgICAgICAgICAgICAgICAgIFBhZ2UgMC4KKyAqICAwNS0yMS0wOCAgMDIuMDAuMDcgIEFkZGVkIGRlZmluZSBNUEkyX01BTlBBR0U0X01JWF9TU0RfU0FTX1NBVEEuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBkZWZpbmUgTVBJMl9NQU5QQUdFNF9QSFlTRElTS18xMjhNQl9DT0VSQ0lPTi4KKyAqICAgICAgICAgICAgICAgICAgICAgIEZpeGVkIGRlZmluZSBNUEkyX0lPQ1BBR0U4X0ZMQUdTX0VOQ0xPU1VSRV9TTE9UX01BUFBJTkcuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBtaXNzaW5nIE1heE51bVJvdXRlZFNhc0FkZHJlc3NlcyBmaWVsZCB0bworICogICAgICAgICAgICAgICAgICAgICAgTVBJMl9DT05GSUdfUEFHRV9FWFBBTkRFUl8wLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgU0FTIFBvcnQgUGFnZSAwLgorICogICAgICAgICAgICAgICAgICAgICAgTW9kaWZpZWQgc3RydWN0dXJlIGxheW91dCBmb3IKKyAqICAgICAgICAgICAgICAgICAgICAgIE1QSTJfQ09ORklHX1BBR0VfRFJJVkVSX01BUFBJTkdfMC4KKyAqICAwNi0yNy0wOCAgMDIuMDAuMDggIENoYW5nZWQgTVBJMl9DT05GSUdfUEFHRV9SRF9QRElTS18xIHRvIHVzZQorICogICAgICAgICAgICAgICAgICAgICAgTVBJMl9SQUlEX1BIWVNfRElTSzFfUEFUSF9NQVggdG8gc2l6ZSB0aGUgYXJyYXkuCisgKiAgMTAtMDItMDggIDAyLjAwLjA5ICBDaGFuZ2VkIE1QSTJfUkFJRF9QR0FEX0NPTkZJR05VTV9NQVNLIGZyb20gMHgwMDAwRkZGRgorICogICAgICAgICAgICAgICAgICAgICAgdG8gMHgwMDAwMDBGRi4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIHR3byBuZXcgdmFsdWVzIGZvciB0aGUgUGh5c2ljYWwgRGlzayBDb2VyY2lvbiBTaXplCisgKiAgICAgICAgICAgICAgICAgICAgICBiaXRzIGluIHRoZSBGbGFncyBmaWVsZCBvZiBNYW51ZmFjdHVyaW5nIFBhZ2UgNC4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIHByb2R1Y3Qtc3BlY2lmaWMgTWFudWZhY3R1cmluZyBwYWdlcyAxNiB0byAzMS4KKyAqICAgICAgICAgICAgICAgICAgICAgIE1vZGlmaWVkIEZsYWdzIGJpdHMgZm9yIGNvbnRyb2xsaW5nIHdyaXRlIGNhY2hlIG9uIFNBVEEKKyAqICAgICAgICAgICAgICAgICAgICAgIGRyaXZlcyBpbiBJTyBVbml0IFBhZ2UgMS4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIG5ldyBiaXQgdG8gQWRkaXRpb25hbENvbnRyb2xGbGFncyBvZiBTQVMgSU8gVW5pdAorICogICAgICAgICAgICAgICAgICAgICAgUGFnZSAxIHRvIGNvbnRyb2wgSW52YWxpZCBUb3BvbG9neSBDb3JyZWN0aW9uLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgU3VwcG9ydGVkUGh5c0Rpc2tzIGZpZWxkIHRvIFJBSUQgVm9sdW1lIFBhZ2UgMSBhbmQKKyAqICAgICAgICAgICAgICAgICAgICAgIGFkZGVkIHJlbGF0ZWQgZGVmaW5lcy4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIGFkZGl0aW9uYWwgZGVmaW5lcyBmb3IgUkFJRCBWb2x1bWUgUGFnZSAwCisgKiAgICAgICAgICAgICAgICAgICAgICBWb2x1bWVTdGF0dXNGbGFncyBmaWVsZC4KKyAqICAgICAgICAgICAgICAgICAgICAgIE1vZGlmaWVkIG1lYW5pbmcgb2YgUkFJRCBWb2x1bWUgUGFnZSAwIFZvbHVtZVNldHRpbmdzCisgKiAgICAgICAgICAgICAgICAgICAgICBkZWZpbmUgZm9yIGF1dG8tY29uZmlndXJlIG9mIGhvdC1zd2FwIGRyaXZlcy4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIFBoeXNEaXNrQXR0cmlidXRlcyBmaWVsZCAoYW5kIHJlbGF0ZWQgZGVmaW5lcykgdG8KKyAqICAgICAgICAgICAgICAgICAgICAgIFJBSUQgUGh5c2ljYWwgRGlzayBQYWdlIDAuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBNUEkyX1NBU19QSFlJTkZPX1BIWV9WQUNBTlQgZGVmaW5lLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgdGhyZWUgbmV3IERpc2NvdmVyeVN0YXR1cyBiaXRzIGZvciBTQVMgSU8gVW5pdAorICogICAgICAgICAgICAgICAgICAgICAgUGFnZSAwIGFuZCBTQVMgRXhwYW5kZXIgUGFnZSAwLgorICogICAgICAgICAgICAgICAgICAgICAgUmVtb3ZlZCBtdWx0aXBsZXhpbmcgaW5mb3JtYXRpb24gZnJvbSBTQVMgSU8gVW5pdCBwYWdlcy4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIEJvb3REZXZpY2VXYWl0VGltZSBmaWVsZCB0byBTQVMgSU8gVW5pdCBQYWdlIDQuCisgKiAgICAgICAgICAgICAgICAgICAgICBSZW1vdmVkIFpvbmUgQWRkcmVzcyBSZXNvbHZlZCBiaXQgZnJvbSBQaHlJbmZvIGFuZCBmcm9tCisgKiAgICAgICAgICAgICAgICAgICAgICBFeHBhbmRlciBQYWdlIDAgRmxhZ3MgZmllbGQuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCB0d28gbmV3IEFjY2Vzc1N0YXR1cyB2YWx1ZXMgdG8gU0FTIERldmljZSBQYWdlIDAKKyAqICAgICAgICAgICAgICAgICAgICAgIGZvciBpbmRpY2F0aW5nIHJvdXRpbmcgcHJvYmxlbXMuIEFkZGVkIDMgcmVzZXJ2ZWQgd29yZHMKKyAqICAgICAgICAgICAgICAgICAgICAgIHRvIHRoaXMgcGFnZS4KKyAqICAwMS0xOS0wOSAgMDIuMDAuMTAgIEZpeGVkIGRlZmluZXMgZm9yIEdQSU9WYWwgZmllbGQgb2YgSU8gVW5pdCBQYWdlIDMuCisgKiAgICAgICAgICAgICAgICAgICAgICBJbnNlcnRlZCBtaXNzaW5nIHJlc2VydmVkIGZpZWxkIGludG8gc3RydWN0dXJlIGZvciBJT0MKKyAqICAgICAgICAgICAgICAgICAgICAgIFBhZ2UgNi4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIG1vcmUgcGVuZGluZyB0YXNrIGJpdHMgdG8gUkFJRCBWb2x1bWUgUGFnZSAwCisgKiAgICAgICAgICAgICAgICAgICAgICBWb2x1bWVTdGF0dXNGbGFncyBkZWZpbmVzLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgTVBJMl9QSFlTRElTSzBfU1RBVFVTX0ZMQUdfTk9UX0NFUlRJRklFRCBkZWZpbmUuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBhIG5ldyBEaXNjb3ZlcnlTdGF0dXMgYml0IGZvciBTQVMgSU8gVW5pdCBQYWdlIDAKKyAqICAgICAgICAgICAgICAgICAgICAgIGFuZCBTQVMgRXhwYW5kZXIgUGFnZSAwIHRvIGZsYWcgYSBkb3duc3RyZWFtIGluaXRpYXRvcgorICogICAgICAgICAgICAgICAgICAgICAgd2hlbiBpbiBzaW1wbGlmaWVkIHJvdXRpbmcgbW9kZS4KKyAqICAgICAgICAgICAgICAgICAgICAgIFJlbW92ZWQgU0FUQSBJbml0IEZhaWx1cmUgZGVmaW5lcyBmb3IgRGlzY292ZXJ5U3RhdHVzCisgKiAgICAgICAgICAgICAgICAgICAgICBmaWVsZHMgb2YgU0FTIElPIFVuaXQgUGFnZSAwIGFuZCBTQVMgRXhwYW5kZXIgUGFnZSAwLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgTVBJMl9TQVNfREVWSUNFMF9BU1RBVFVTX0RFVklDRV9CTE9DS0VEIGRlZmluZS4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIFBvcnRHcm91cHMsIERtYUdyb3VwLCBhbmQgQ29udHJvbEdyb3VwIGZpZWxkcyB0bworICogICAgICAgICAgICAgICAgICAgICAgU0FTIERldmljZSBQYWdlIDAuCisgKiAgMDUtMDYtMDkgIDAyLjAwLjExICBBZGRlZCBzdHJ1Y3R1cmVzIGFuZCBkZWZpbmVzIGZvciBJTyBVbml0IFBhZ2UgNSBhbmQgSU8KKyAqICAgICAgICAgICAgICAgICAgICAgIFVuaXQgUGFnZSA2LgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgZXhwYW5kZXIgcmVkdWNlZCBmdW5jdGlvbmFsaXR5IGRhdGEgdG8gU0FTCisgKiAgICAgICAgICAgICAgICAgICAgICBFeHBhbmRlciBQYWdlIDAuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBTQVMgUEhZIFBhZ2UgMiBhbmQgU0FTIFBIWSBQYWdlIDMuCisgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbXBpMl9pbml0LmgKKyAqICAwNC0zMC0wNyAgMDIuMDAuMDAgIENvcnJlc3BvbmRzIHRvIEZ1c2lvbi1NUFQgTVBJIFNwZWNpZmljYXRpb24gUmV2IEEuCisgKiAgMTAtMzEtMDcgIDAyLjAwLjAxICBGaXhlZCBuYW1lIGZvciBwTXBpMlNDU0lUYXNrTWFuYWdlbWVudFJlcXVlc3RfdC4KKyAqICAxMi0xOC0wNyAgMDIuMDAuMDIgIE1vZGlmaWVkIFRhc2sgTWFuYWdlbWVudCBUYXJnZXQgUmVzZXQgTWV0aG9kIGRlZmluZXMuCisgKiAgMDItMjktMDggIDAyLjAwLjAzICBBZGRlZCBRdWVyeSBUYXNrIFNldCBhbmQgUXVlcnkgVW5pdCBBdHRlbnRpb24uCisgKiAgMDMtMDMtMDggIDAyLjAwLjA0ICBGaXhlZCBuYW1lIG9mIHN0cnVjdCBfTVBJMl9TQ1NJX1RBU0tfTUFOQUdFX1JFUExZLgorICogIDA1LTIxLTA4ICAwMi4wMC4wNSAgRml4ZWQgdHlwbyBpbiBuYW1lIG9mIE1waTJTZXBSZXF1ZXN0X3QuCisgKiAgMTAtMDItMDggIDAyLjAwLjA2ICBSZW1vdmVkIFVudGFnZ2VkIGFuZCBObyBEaXNjb25uZWN0IHZhbHVlcyBmcm9tIFNDU0kgSU8KKyAqICAgICAgICAgICAgICAgICAgICAgIENvbnRyb2wgZmllbGQgVGFzayBBdHRyaWJ1dGUgZmxhZ3MuCisgKiAgICAgICAgICAgICAgICAgICAgICBNb3ZlZCBMVU4gZmllbGQgZGVmaW5lcyB0byBtcGkyLmggYmVjYXN1ZSB0aGV5IGFyZQorICogICAgICAgICAgICAgICAgICAgICAgY29tbW9uIHRvIG1hbnkgc3RydWN0dXJlcy4KKyAqICAwNS0wNi0wOSAgMDIuMDAuMDcgIENoYW5nZWQgdGFzayBtYW5hZ2VtZW50IHR5cGUgb2YgUXVlcnkgVW5pdCBBdHRlbnRpb24gdG8KKyAqICAgICAgICAgICAgICAgICAgICAgIFF1ZXJ5IEFzeW5jaHJvbm91cyBFdmVudC4KKyAqICAgICAgICAgICAgICAgICAgICAgIERlZmluZWQgdHdvIG5ldyBiaXRzIGluIHRoZSBTbG90U3RhdHVzIGZpZWxkIG9mIHRoZSBTQ1NJCisgKiAgICAgICAgICAgICAgICAgICAgICBFbmNsb3N1cmUgUHJvY2Vzc29yIFJlcXVlc3QgYW5kIFJlcGx5LgorICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21waTJfaW9jLmgKKyAqICAwNC0zMC0wNyAgMDIuMDAuMDAgIENvcnJlc3BvbmRzIHRvIEZ1c2lvbi1NUFQgTVBJIFNwZWNpZmljYXRpb24gUmV2IEEuCisgKiAgMDYtMDQtMDcgIDAyLjAwLjAxICBJbiBJT0NGYWN0cyBSZXBseSBzdHJ1Y3R1cmUsIHJlbmFtZWQgTWF4RGV2aWNlcyB0bworICogICAgICAgICAgICAgICAgICAgICAgTWF4VGFyZ2V0cy4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIFRvdGFsSW1hZ2VTaXplIGZpZWxkIHRvIEZXRG93bmxvYWQgUmVxdWVzdC4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIHJlc2VydmVkIHdvcmRzIHRvIEZXVXBsb2FkIFJlcXVlc3QuCisgKiAgMDYtMjYtMDcgIDAyLjAwLjAyICBBZGRlZCBJUiBDb25maWd1cmF0aW9uIENoYW5nZSBMaXN0IEV2ZW50LgorICogIDA4LTMxLTA3ICAwMi4wMC4wMyAgUmVtb3ZlZCBTeXN0ZW1SZXBseVF1ZXVlRGVwdGggZmllbGQgZnJvbSB0aGUgSU9DSW5pdAorICogICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdCBhbmQgcmVwbGFjZWQgaXQgd2l0aAorICogICAgICAgICAgICAgICAgICAgICAgUmVwbHlEZXNjcmlwdG9yUG9zdFF1ZXVlRGVwdGggYW5kIFJlcGx5RnJlZVF1ZXVlRGVwdGguCisgKiAgICAgICAgICAgICAgICAgICAgICBSZXBsYWNlZCB0aGUgTWluUmVwbHlRdWV1ZURlcHRoIGZpZWxkIG9mIHRoZSBJT0NGYWN0cworICogICAgICAgICAgICAgICAgICAgICAgcmVwbHkgd2l0aCBNYXhSZXBseURlc2NyaXB0b3JQb3N0UXVldWVEZXB0aC4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIE1QSTJfUkRQUV9ERVBUSF9NSU4gZGVmaW5lIHRvIHNwZWNpZnkgdGhlIG1pbmltdW0KKyAqICAgICAgICAgICAgICAgICAgICAgIGRlcHRoIGZvciB0aGUgUmVwbHkgRGVzY3JpcHRvciBQb3N0IFF1ZXVlLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgU0FTQWRkcmVzcyBmaWVsZCB0byBJbml0aWF0b3IgRGV2aWNlIFRhYmxlCisgKiAgICAgICAgICAgICAgICAgICAgICBPdmVyZmxvdyBFdmVudCBkYXRhLgorICogIDEwLTMxLTA3ICAwMi4wMC4wNCAgQWRkZWQgUmVhc29uQ29kZSBNUEkyX0VWRU5UX1NBU19JTklUX1JDX05PVF9SRVNQT05ESU5HCisgKiAgICAgICAgICAgICAgICAgICAgICBmb3IgU0FTIEluaXRpYXRvciBEZXZpY2UgU3RhdHVzIENoYW5nZSBFdmVudCBkYXRhLgorICogICAgICAgICAgICAgICAgICAgICAgTW9kaWZpZWQgUmVhc29uIENvZGUgZGVmaW5lcyBmb3IgU0FTIFRvcG9sb2d5IENoYW5nZQorICogICAgICAgICAgICAgICAgICAgICAgTGlzdCBFdmVudCBkYXRhLCBpbmNsdWRpbmcgYWRkaW5nIGEgYml0IGZvciBQSFkgVmFjYW50CisgKiAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMsIGFuZCBhZGRpbmcgYSBtYXNrIGZvciB0aGUgUmVhc29uIENvZGUuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBkZWZpbmUgZm9yCisgKiAgICAgICAgICAgICAgICAgICAgICBNUEkyX0VWRU5UX1NBU19UT1BPX0VTX0RFTEFZX05PVF9SRVNQT05ESU5HLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgZGVmaW5lIGZvciBNUEkyX0VYVF9JTUFHRV9UWVBFX01FR0FSQUlELgorICogIDEyLTE4LTA3ICAwMi4wMC4wNSAgQWRkZWQgQm9vdCBTdGF0dXMgZGVmaW5lcyBmb3IgdGhlIElPQ0V4Y2VwdGlvbnMgZmllbGQgb2YKKyAqICAgICAgICAgICAgICAgICAgICAgIHRoZSBJT0NGYWN0cyBSZXBseS4KKyAqICAgICAgICAgICAgICAgICAgICAgIFJlbW92ZWQgTVBJMl9JT0NGQUNUU19DQVBBQklMSVRZX0VYVEVOREVEX0JVRkZFUiBkZWZpbmUuCisgKiAgICAgICAgICAgICAgICAgICAgICBNb3ZlZCBNUEkyX1ZFUlNJT05fVU5JT04gdG8gbXBpMi5oLgorICogICAgICAgICAgICAgICAgICAgICAgQ2hhbmdlZCBNUEkyX0VWRU5UX05PVElGSUNBVElPTl9SRVFVRVNUIHRvIHVzZSBtYXNrcworICogICAgICAgICAgICAgICAgICAgICAgaW5zdGVhZCBvZiBlbmFibGVzLCBhbmQgYWRkZWQgU0FTQnJvYWRjYXN0UHJpbWl0aXZlTWFza3MKKyAqICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgTG9nIEVudHJ5IEFkZGVkIEV2ZW50IGFuZCByZWxhdGVkIHN0cnVjdHVyZS4KKyAqICAwMi0yOS0wOCAgMDIuMDAuMDYgIEFkZGVkIGRlZmluZSBNUEkyX0lPQ0ZBQ1RTX0NBUEFCSUxJVFlfSU5URUdSQVRFRF9SQUlELgorICogICAgICAgICAgICAgICAgICAgICAgUmVtb3ZlZCBkZWZpbmUgTVBJMl9JT0NGQUNUU19QUk9UT0NPTF9TTVBfVEFSR0VULgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgTWF4Vm9sdW1lcyBhbmQgTWF4UGVyc2lzdGVudEVudHJpZXMgZmllbGRzIHRvCisgKiAgICAgICAgICAgICAgICAgICAgICBJT0NGYWN0cyByZXBseS4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIFByb3RvY2FsRmxhZ3MgYW5kIElPQ0NhcGFiaWxpdGllcyBmaWVsZHMgdG8KKyAqICAgICAgICAgICAgICAgICAgICAgIE1QSTJfRldfSU1BR0VfSEVBREVSLgorICogICAgICAgICAgICAgICAgICAgICAgUmVtb3ZlZCBNUEkyX1BPUlRFTkFCTEVfRkxBR1NfRU5BQkxFX1NJTkdMRV9QT1JULgorICogIDAzLTAzLTA4ICAwMi4wMC4wNyAgRml4ZWQgTVBJMl9GV19JTUFHRV9IRUFERVIgYnkgY2hhbmdpbmcgUmVzZXJ2ZWQyNiB0bworICogICAgICAgICAgICAgICAgICAgICAgYSBVMTYgKGZyb20gYSBVMzIpLgorICogICAgICAgICAgICAgICAgICAgICAgUmVtb3ZlZCBleHRyYSAncycgZnJvbSBFdmVudE1hc2tzIG5hbWUuCisgKiAgMDYtMjctMDggIDAyLjAwLjA4ICBGaXhlZCBhbiBvZmZzZXQgaW4gYSBjb21tZW50LgorICogIDEwLTAyLTA4ICAwMi4wMC4wOSAgUmVtb3ZlZCBTeXN0ZW1SZXBseUZyYW1lU2l6ZSBmcm9tIE1QSTJfSU9DX0lOSVRfUkVRVUVTVC4KKyAqICAgICAgICAgICAgICAgICAgICAgIFJlbW92ZWQgQ3VyUmVwbHlGcmFtZVNpemUgZnJvbSBNUEkyX0lPQ19GQUNUU19SRVBMWSBhbmQKKyAqICAgICAgICAgICAgICAgICAgICAgIHJlbmFtZWQgTWluUmVwbHlGcmFtZVNpemUgdG8gUmVwbHlGcmFtZVNpemUuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBNUEkyX0lPQ0ZBQ1RTX0VYQ0VQVF9JUl9GT1JFSUdOX0NPTkZJR19NQVguCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCB0d28gbmV3IFJBSURPcGVyYXRpb24gdmFsdWVzIGZvciBJbnRlZ3JhdGVkIFJBSUQKKyAqICAgICAgICAgICAgICAgICAgICAgIE9wZXJhdGlvbnMgU3RhdHVzIEV2ZW50IGRhdGEuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBmb3VyIG5ldyBJUiBDb25maWd1cmF0aW9uIENoYW5nZSBMaXN0IEV2ZW50IGRhdGEKKyAqICAgICAgICAgICAgICAgICAgICAgIFJlYXNvbkNvZGUgdmFsdWVzLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgdHdvIG5ldyBSZWFzb25Db2RlIGRlZmluZXMgZm9yIFNBUyBEZXZpY2UgU3RhdHVzCisgKiAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2UgRXZlbnQgZGF0YS4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIHRocmVlIG5ldyBEaXNjb3ZlcnlTdGF0dXMgYml0cyBmb3IgdGhlIFNBUworICogICAgICAgICAgICAgICAgICAgICAgRGlzY292ZXJ5IGV2ZW50IGRhdGEuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBNdWx0aXBsZXhpbmcgU3RhdHVzIENoYW5nZSBiaXQgdG8gdGhlIFBoeVN0YXR1cworICogICAgICAgICAgICAgICAgICAgICAgZmllbGQgb2YgdGhlIFNBUyBUb3BvbG9neSBDaGFuZ2UgTGlzdCBldmVudCBkYXRhLgorICogICAgICAgICAgICAgICAgICAgICAgUmVtb3ZlZCBkZWZpbmUgZm9yIE1QSTJfSU5JVF9JTUFHRV9CT09URkxBR1NfWE1FTUNPUFkuCisgKiAgICAgICAgICAgICAgICAgICAgICBCb290RmxhZ3MgYXJlIG5vdyBwcm9kdWN0LXNwZWNpZmljLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgZGVmaW5lcyBmb3IgdGhlIGluZGl2ZHVhbCBzaWduYXR1cmUgYnl0ZXMKKyAqICAgICAgICAgICAgICAgICAgICAgIGZvciBNUEkyX0lOSVRfSU1BR0VfRk9PVEVSLgorICogIDAxLTE5LTA5ICAwMi4wMC4xMCAgQWRkZWQgTVBJMl9JT0NGQUNUU19DQVBBQklMSVRZX0VWRU5UX1JFUExBWSBkZWZpbmUuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBNUEkyX0VWRU5UX1NBU19ESVNDX0RTX0RPV05TVFJFQU1fSU5JVElBVE9SCisgKiAgICAgICAgICAgICAgICAgICAgICBkZWZpbmUuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBNUEkyX0VWRU5UX1NBU19ERVZfU1RBVF9SQ19TQVRBX0lOSVRfRkFJTFVSRQorICogICAgICAgICAgICAgICAgICAgICAgZGVmaW5lLgorICogICAgICAgICAgICAgICAgICAgICAgUmVtb3ZlZCBNUEkyX0VWRU5UX1NBU19ESVNDX0RTX1NBVEFfSU5JVF9GQUlMVVJFIGRlZmluZS4KKyAqICAwNS0wNi0wOSAgMDIuMDAuMTEgIEFkZGVkIE1QSTJfSU9DRkFDVFNfQ0FQQUJJTElUWV9SQUlEX0FDQ0VMRVJBVE9SIGRlZmluZS4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIE1QSTJfSU9DRkFDVFNfQ0FQQUJJTElUWV9NU0lfWF9JTkRFWCBkZWZpbmUuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCB0d28gbmV3IHJlYXNvbiBjb2RlcyBmb3IgU0FTIERldmljZSBTdGF0dXMgQ2hhbmdlCisgKiAgICAgICAgICAgICAgICAgICAgICBFdmVudC4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIG5ldyBldmVudDogU0FTIFBIWSBDb3VudGVyLgorICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21waTJfcmFpZC5oCisgKiAgMDQtMzAtMDcgIDAyLjAwLjAwICBDb3JyZXNwb25kcyB0byBGdXNpb24tTVBUIE1QSSBTcGVjaWZpY2F0aW9uIFJldiBBLgorICogIDA4LTMxLTA3ICAwMi4wMC4wMSAgTW9kaWZpY2F0aW9ucyB0byBSQUlEIEFjdGlvbiByZXF1ZXN0IGFuZCByZXBseSwKKyAqICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGluZyB0aGUgQWN0aW9ucyBhbmQgQWN0aW9uRGF0YS4KKyAqICAwMi0yOS0wOCAgMDIuMDAuMDIgIEFkZGVkIE1QSTJfUkFJRF9BQ1RJT05fQURBVEFfRElTQUJMX0ZVTExfUkVCVUlMRC4KKyAqICAwNS0yMS0wOCAgMDIuMDAuMDMgIEFkZGVkIE1QSTJfUkFJRF9WT0xfQ1JFQVRJT05fTlVNX1BIWVNESVNLUyBzbyB0aGF0CisgKiAgICAgICAgICAgICAgICAgICAgICB0aGUgUGh5c0Rpc2sgYXJyYXkgaW4gTVBJMl9SQUlEX1ZPTFVNRV9DUkVBVElPTl9TVFJVQ1QKKyAqICAgICAgICAgICAgICAgICAgICAgIGNhbiBiZSBzaXplZCBieSB0aGUgYnVpbGQgZW52aXJvbm1lbnQuCisgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbXBpMl9zYXMuaAorICogIDA0LTMwLTA3ICAwMi4wMC4wMCAgQ29ycmVzcG9uZHMgdG8gRnVzaW9uLU1QVCBNUEkgU3BlY2lmaWNhdGlvbiBSZXYgQS4KKyAqICAwNi0yNi0wNyAgMDIuMDAuMDEgIEFkZGVkIENsZWFyIEFsbCBQZXJzaXN0ZW50IE9wZXJhdGlvbiB0byBTQVMgSU8gVW5pdAorICogICAgICAgICAgICAgICAgICAgICAgQ29udHJvbCBSZXF1ZXN0LgorICogIDEwLTAyLTA4ICAwMi4wMC4wMiAgQWRkZWQgU2V0IElPQyBQYXJhbWV0ZXIgT3BlcmF0aW9uIHRvIFNBUyBJTyBVbml0IENvbnRyb2wKKyAqICAgICAgICAgICAgICAgICAgICAgIFJlcXVlc3QuCisgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbXBpMl90YXJnLmgKKyAqICAwNC0zMC0wNyAgMDIuMDAuMDAgIENvcnJlc3BvbmRzIHRvIEZ1c2lvbi1NUFQgTVBJIFNwZWNpZmljYXRpb24gUmV2IEEuCisgKiAgMDgtMzEtMDcgIDAyLjAwLjAxICBBZGRlZCBDb21tYW5kIEJ1ZmZlciBEYXRhIExvY2F0aW9uIEFkZHJlc3MgU3BhY2UgYml0cyB0bworICogICAgICAgICAgICAgICAgICAgICAgQnVmZmVyUG9zdEZsYWdzIGZpZWxkIG9mIENvbW1hbmRCdWZmZXJQb3N0QmFzZSBSZXF1ZXN0LgorICogIDAyLTI5LTA4ICAwMi4wMC4wMiAgTW9kaWZpZWQgdmFyaW91cyBuYW1lcyB0byBtYWtlIHRoZW0gMzItY2hhcmFjdGVyIHVuaXF1ZS4KKyAqICAxMC0wMi0wOCAgMDIuMDAuMDMgIFJlbW92ZWQgTmV4dENtZEJ1ZmZlck9mZnNldCBmcm9tCisgKiAgICAgICAgICAgICAgICAgICAgICBNUEkyX1RBUkdFVF9DTURfQlVGX1BPU1RfQkFTRV9SRVFVRVNULgorICogICAgICAgICAgICAgICAgICAgICAgVGFyZ2V0IFN0YXR1cyBTZW5kIFJlcXVlc3Qgb25seSB0YWtlcyBhIHNpbmdsZSBTR0UgZm9yCisgKiAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZSBkYXRhLgorICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21waTJfdG9vbC5oCisgKiAgMDQtMzAtMDcgIDAyLjAwLjAwICBDb3JyZXNwb25kcyB0byBGdXNpb24tTVBUIE1QSSBTcGVjaWZpY2F0aW9uIFJldiBBLgorICogIDEyLTE4LTA3ICAwMi4wMC4wMSAgQWRkZWQgRGlhZ25vc3RpYyBCdWZmZXIgUG9zdCBhbmQgRGlhZ25vc3RpYyBSZWxlYXNlCisgKiAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVzIGFuZCBkZWZpbmVzLgorICogIDAyLTI5LTA4ICAwMi4wMC4wMiAgTW9kaWZpZWQgdmFyaW91cyBuYW1lcyB0byBtYWtlIHRoZW0gMzItY2hhcmFjdGVyIHVuaXF1ZS4KKyAqICAwNS0wNi0wOSAgMDIuMDAuMDMgIEFkZGVkIElTVFdJIFJlYWQgV3JpdGUgVG9vbCBhbmQgRGlhZ25vc3RpYyBDTEkgVG9vbC4KKyAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittcGkyX3R5cGUuaAorICogIDA0LTMwLTA3ICAwMi4wMC4wMCAgQ29ycmVzcG9uZHMgdG8gRnVzaW9uLU1QVCBNUEkgU3BlY2lmaWNhdGlvbiBSZXYgQS4KKyAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittcGkyX3JhLmgKKyAqICAwNS0wNi0wOSAgMDIuMDAuMDAgIEluaXRpYWwgdmVyc2lvbi4KKyAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittcGkyX2hpc3RvcnkudHh0ICAgICAgICAgUGFydHMgbGlzdCBoaXN0b3J5CisKK0ZpbGVuYW1lICAgICAwMi4wMC4xMgorLS0tLS0tLS0tLSAgIC0tLS0tLS0tCittcGkyLmggICAgICAgMDIuMDAuMTIKK21waTJfY25mZy5oICAwMi4wMC4xMQorbXBpMl9pbml0LmggIDAyLjAwLjA3CittcGkyX2lvYy5oICAgMDIuMDAuMTEKK21waTJfcmFpZC5oICAwMi4wMC4wMworbXBpMl9zYXMuaCAgIDAyLjAwLjAyCittcGkyX3RhcmcuaCAgMDIuMDAuMDMKK21waTJfdG9vbC5oICAwMi4wMC4wMworbXBpMl90eXBlLmggIDAyLjAwLjAwCittcGkyX3JhLmggICAgMDIuMDAuMDAKKworRmlsZW5hbWUgICAgIDAyLjAwLjExICAwMi4wMC4xMCAgMDIuMDAuMDkgIDAyLjAwLjA4ICAwMi4wMC4wNyAgMDIuMDAuMDYKKy0tLS0tLS0tLS0gICAtLS0tLS0tLSAgLS0tLS0tLS0gIC0tLS0tLS0tICAtLS0tLS0tLSAgLS0tLS0tLS0gIC0tLS0tLS0tCittcGkyLmggICAgICAgMDIuMDAuMTEgIDAyLjAwLjEwICAwMi4wMC4wOSAgMDIuMDAuMDggIDAyLjAwLjA3ICAwMi4wMC4wNgorbXBpMl9jbmZnLmggIDAyLjAwLjEwICAwMi4wMC4wOSAgMDIuMDAuMDggIDAyLjAwLjA3ICAwMi4wMC4wNiAgMDIuMDAuMDYKK21waTJfaW5pdC5oICAwMi4wMC4wNiAgMDIuMDAuMDYgIDAyLjAwLjA1ICAwMi4wMC4wNSAgMDIuMDAuMDQgIDAyLjAwLjAzCittcGkyX2lvYy5oICAgMDIuMDAuMTAgIDAyLjAwLjA5ICAwMi4wMC4wOCAgMDIuMDAuMDcgIDAyLjAwLjA3ICAwMi4wMC4wNgorbXBpMl9yYWlkLmggIDAyLjAwLjAzICAwMi4wMC4wMyAgMDIuMDAuMDMgIDAyLjAwLjAzICAwMi4wMC4wMiAgMDIuMDAuMDIKK21waTJfc2FzLmggICAwMi4wMC4wMiAgMDIuMDAuMDIgIDAyLjAwLjAxICAwMi4wMC4wMSAgMDIuMDAuMDEgIDAyLjAwLjAxCittcGkyX3RhcmcuaCAgMDIuMDAuMDMgIDAyLjAwLjAzICAwMi4wMC4wMiAgMDIuMDAuMDIgIDAyLjAwLjAyICAwMi4wMC4wMgorbXBpMl90b29sLmggIDAyLjAwLjAyICAwMi4wMC4wMiAgMDIuMDAuMDIgIDAyLjAwLjAyICAwMi4wMC4wMiAgMDIuMDAuMDIKK21waTJfdHlwZS5oICAwMi4wMC4wMCAgMDIuMDAuMDAgIDAyLjAwLjAwICAwMi4wMC4wMCAgMDIuMDAuMDAgIDAyLjAwLjAwCisKK0ZpbGVuYW1lICAgICAwMi4wMC4wNSAgMDIuMDAuMDQgIDAyLjAwLjAzICAwMi4wMC4wMiAgMDIuMDAuMDEgIDAyLjAwLjAwCistLS0tLS0tLS0tICAgLS0tLS0tLS0gIC0tLS0tLS0tICAtLS0tLS0tLSAgLS0tLS0tLS0gIC0tLS0tLS0tICAtLS0tLS0tLQorbXBpMi5oICAgICAgIDAyLjAwLjA1ICAwMi4wMC4wNCAgMDIuMDAuMDMgIDAyLjAwLjAyICAwMi4wMC4wMSAgMDIuMDAuMDAKK21waTJfY25mZy5oICAwMi4wMC4wNSAgMDIuMDAuMDQgIDAyLjAwLjAzICAwMi4wMC4wMiAgMDIuMDAuMDEgIDAyLjAwLjAwCittcGkyX2luaXQuaCAgMDIuMDAuMDIgIDAyLjAwLjAxICAwMi4wMC4wMCAgMDIuMDAuMDAgIDAyLjAwLjAwICAwMi4wMC4wMAorbXBpMl9pb2MuaCAgIDAyLjAwLjA1ICAwMi4wMC4wNCAgMDIuMDAuMDMgIDAyLjAwLjAyICAwMi4wMC4wMSAgMDIuMDAuMDAKK21waTJfcmFpZC5oICAwMi4wMC4wMSAgMDIuMDAuMDEgIDAyLjAwLjAxICAwMi4wMC4wMCAgMDIuMDAuMDAgIDAyLjAwLjAwCittcGkyX3Nhcy5oICAgMDIuMDAuMDEgIDAyLjAwLjAxICAwMi4wMC4wMSAgMDIuMDAuMDEgIDAyLjAwLjAwICAwMi4wMC4wMAorbXBpMl90YXJnLmggIDAyLjAwLjAxICAwMi4wMC4wMSAgMDIuMDAuMDEgIDAyLjAwLjAwICAwMi4wMC4wMCAgMDIuMDAuMDAKK21waTJfdG9vbC5oICAwMi4wMC4wMSAgMDIuMDAuMDAgIDAyLjAwLjAwICAwMi4wMC4wMCAgMDIuMDAuMDAgIDAyLjAwLjAwCittcGkyX3R5cGUuaCAgMDIuMDAuMDAgIDAyLjAwLjAwICAwMi4wMC4wMCAgMDIuMDAuMDAgIDAyLjAwLjAwICAwMi4wMC4wMAorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcGkvbXBpMl9pbml0LmggYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcGkvbXBpMl9pbml0LmgKaW5kZXggZjExMTVmMC4uNTYzZTU2ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXBpL21waTJfaW5pdC5oCisrKyBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21waS9tcGkyX2luaXQuaApAQCAtMSwxMiArMSwxMiBAQAogLyoKLSAqICBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwOCBMU0kgQ29ycG9yYXRpb24uCisgKiAgQ29weXJpZ2h0IChjKSAyMDAwLTIwMDkgTFNJIENvcnBvcmF0aW9uLgogICoKICAqCiAgKiAgICAgICAgICAgTmFtZTogIG1waTJfaW5pdC5oCiAgKiAgICAgICAgICBUaXRsZTogIE1QSSBTQ1NJIGluaXRpYXRvciBtb2RlIG1lc3NhZ2VzIGFuZCBzdHJ1Y3R1cmVzCiAgKiAgQ3JlYXRpb24gRGF0ZTogIEp1bmUgMjMsIDIwMDYKICAqCi0gKiAgICBtcGkyX2luaXQuaCBWZXJzaW9uOiAgMDIuMDAuMDYKKyAqICAgIG1waTJfaW5pdC5oIFZlcnNpb246ICAwMi4wMC4wNwogICoKICAqICBWZXJzaW9uIEhpc3RvcnkKICAqICAtLS0tLS0tLS0tLS0tLS0KQEAgLTIzLDYgKzIzLDEwIEBACiAgKiAgICAgICAgICAgICAgICAgICAgICBDb250cm9sIGZpZWxkIFRhc2sgQXR0cmlidXRlIGZsYWdzLgogICogICAgICAgICAgICAgICAgICAgICAgTW92ZWQgTFVOIGZpZWxkIGRlZmluZXMgdG8gbXBpMi5oIGJlY2FzdWUgdGhleSBhcmUKICAqICAgICAgICAgICAgICAgICAgICAgIGNvbW1vbiB0byBtYW55IHN0cnVjdHVyZXMuCisgKiAgMDUtMDYtMDkgIDAyLjAwLjA3ICBDaGFuZ2VkIHRhc2sgbWFuYWdlbWVudCB0eXBlIG9mIFF1ZXJ5IFVuaXQgQXR0ZW50aW9uIHRvCisgKiAgICAgICAgICAgICAgICAgICAgICBRdWVyeSBBc3luY2hyb25vdXMgRXZlbnQuCisgKiAgICAgICAgICAgICAgICAgICAgICBEZWZpbmVkIHR3byBuZXcgYml0cyBpbiB0aGUgU2xvdFN0YXR1cyBmaWVsZCBvZiB0aGUgU0NTSQorICogICAgICAgICAgICAgICAgICAgICAgRW5jbG9zdXJlIFByb2Nlc3NvciBSZXF1ZXN0IGFuZCBSZXBseS4KICAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCiAKQEAgLTI4OSw3ICsyOTMsMTEgQEAKICNkZWZpbmUgTVBJMl9TQ1NJVEFTS01HTVRfVEFTS1RZUEVfUVVFUllfVEFTSyAgICAgICAgICAgKDB4MDcpCiAjZGVmaW5lIE1QSTJfU0NTSVRBU0tNR01UX1RBU0tUWVBFX0NMUl9BQ0EgICAgICAgICAgICAgICgweDA4KQogI2RlZmluZSBNUEkyX1NDU0lUQVNLTUdNVF9UQVNLVFlQRV9RUllfVEFTS19TRVQgICAgICAgICAoMHgwOSkKLSNkZWZpbmUgTVBJMl9TQ1NJVEFTS01HTVRfVEFTS1RZUEVfUVJZX1VOSVRfQVRURU5USU9OICAgKDB4MEEpCisjZGVmaW5lIE1QSTJfU0NTSVRBU0tNR01UX1RBU0tUWVBFX1FSWV9BU1lOQ19FVkVOVCAgICAgICgweDBBKQorCisvKiBvYnNvbGV0ZSBUYXNrVHlwZSBuYW1lICovCisjZGVmaW5lIE1QSTJfU0NTSVRBU0tNR01UX1RBU0tUWVBFX1FSWV9VTklUX0FUVEVOVElPTglcCisJKE1QSTJfU0NTSVRBU0tNR01UX1RBU0tUWVBFX1FSWV9BU1lOQ19FVkVOVCkKIAogLyogTXNnRmxhZ3MgYml0cyAqLwogCkBAIC0zNzUsNiArMzgzLDggQEAKICNkZWZpbmUgTVBJMl9TRVBfUkVRX1NMT1RTVEFUVVNfSE9UX1NQQVJFICAgICAgICAgICAgICAgKDB4MDAwMDAxMDApCiAjZGVmaW5lIE1QSTJfU0VQX1JFUV9TTE9UU1RBVFVTX1VOQ09ORklHVVJFRCAgICAgICAgICAgICgweDAwMDAwMDgwKQogI2RlZmluZSBNUEkyX1NFUF9SRVFfU0xPVFNUQVRVU19QUkVESUNURURfRkFVTFQgICAgICAgICAoMHgwMDAwMDA0MCkKKyNkZWZpbmUgTVBJMl9TRVBfUkVRX1NMT1RTVEFUVVNfSU5fQ1JJVElDQUxfQVJSQVkgICAgICAgKDB4MDAwMDAwMTApCisjZGVmaW5lIE1QSTJfU0VQX1JFUV9TTE9UU1RBVFVTX0lOX0ZBSUxFRF9BUlJBWSAgICAgICAgICgweDAwMDAwMDA4KQogI2RlZmluZSBNUEkyX1NFUF9SRVFfU0xPVFNUQVRVU19ERVZfUkVCVUlMRElORyAgICAgICAgICAoMHgwMDAwMDAwNCkKICNkZWZpbmUgTVBJMl9TRVBfUkVRX1NMT1RTVEFUVVNfREVWX0ZBVUxUWSAgICAgICAgICAgICAgKDB4MDAwMDAwMDIpCiAjZGVmaW5lIE1QSTJfU0VQX1JFUV9TTE9UU1RBVFVTX05PX0VSUk9SICAgICAgICAgICAgICAgICgweDAwMDAwMDAxKQpAQCAtNDEwLDYgKzQyMCw4IEBACiAjZGVmaW5lIE1QSTJfU0VQX1JFUExZX1NMT1RTVEFUVVNfSE9UX1NQQVJFICAgICAgICAgICAgICgweDAwMDAwMTAwKQogI2RlZmluZSBNUEkyX1NFUF9SRVBMWV9TTE9UU1RBVFVTX1VOQ09ORklHVVJFRCAgICAgICAgICAoMHgwMDAwMDA4MCkKICNkZWZpbmUgTVBJMl9TRVBfUkVQTFlfU0xPVFNUQVRVU19QUkVESUNURURfRkFVTFQgICAgICAgKDB4MDAwMDAwNDApCisjZGVmaW5lIE1QSTJfU0VQX1JFUExZX1NMT1RTVEFUVVNfSU5fQ1JJVElDQUxfQVJSQVkgICAgICgweDAwMDAwMDEwKQorI2RlZmluZSBNUEkyX1NFUF9SRVBMWV9TTE9UU1RBVFVTX0lOX0ZBSUxFRF9BUlJBWSAgICAgICAoMHgwMDAwMDAwOCkKICNkZWZpbmUgTVBJMl9TRVBfUkVQTFlfU0xPVFNUQVRVU19ERVZfUkVCVUlMRElORyAgICAgICAgKDB4MDAwMDAwMDQpCiAjZGVmaW5lIE1QSTJfU0VQX1JFUExZX1NMT1RTVEFUVVNfREVWX0ZBVUxUWSAgICAgICAgICAgICgweDAwMDAwMDAyKQogI2RlZmluZSBNUEkyX1NFUF9SRVBMWV9TTE9UU1RBVFVTX05PX0VSUk9SICAgICAgICAgICAgICAoMHgwMDAwMDAwMSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21waS9tcGkyX2lvYy5oIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXBpL21waTJfaW9jLmgKaW5kZXggOGM1ZDgxOC4uYzI5NDEyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXBpL21waTJfaW9jLmgKKysrIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXBpL21waTJfaW9jLmgKQEAgLTYsNyArNiw3IEBACiAgKiAgICAgICAgICBUaXRsZTogIE1QSSBJT0MsIFBvcnQsIEV2ZW50LCBGVyBEb3dubG9hZCwgYW5kIEZXIFVwbG9hZCBtZXNzYWdlcwogICogIENyZWF0aW9uIERhdGU6ICBPY3RvYmVyIDExLCAyMDA2CiAgKgotICogIG1waTJfaW9jLmggVmVyc2lvbjogIDAyLjAwLjEwCisgKiAgbXBpMl9pb2MuaCBWZXJzaW9uOiAgMDIuMDAuMTEKICAqCiAgKiAgVmVyc2lvbiBIaXN0b3J5CiAgKiAgLS0tLS0tLS0tLS0tLS0tCkBAIC03OSw2ICs3OSwxMSBAQAogICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgTVBJMl9FVkVOVF9TQVNfREVWX1NUQVRfUkNfU0FUQV9JTklUX0ZBSUxVUkUKICAqICAgICAgICAgICAgICAgICAgICAgIGRlZmluZS4KICAqICAgICAgICAgICAgICAgICAgICAgIFJlbW92ZWQgTVBJMl9FVkVOVF9TQVNfRElTQ19EU19TQVRBX0lOSVRfRkFJTFVSRSBkZWZpbmUuCisgKiAgMDUtMDYtMDkgIDAyLjAwLjExICBBZGRlZCBNUEkyX0lPQ0ZBQ1RTX0NBUEFCSUxJVFlfUkFJRF9BQ0NFTEVSQVRPUiBkZWZpbmUuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBNUEkyX0lPQ0ZBQ1RTX0NBUEFCSUxJVFlfTVNJX1hfSU5ERVggZGVmaW5lLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgdHdvIG5ldyByZWFzb24gY29kZXMgZm9yIFNBUyBEZXZpY2UgU3RhdHVzIENoYW5nZQorICogICAgICAgICAgICAgICAgICAgICAgRXZlbnQuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBuZXcgZXZlbnQ6IFNBUyBQSFkgQ291bnRlci4KICAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCiAKQEAgLTI2MSw2ICsyNjYsOCBAQAogLyogUHJvZHVjdElEIGZpZWxkIHVzZXMgTVBJMl9GV19IRUFERVJfUElEXyAqLwogCiAvKiBJT0NDYXBhYmlsaXRpZXMgKi8KKyNkZWZpbmUgTVBJMl9JT0NGQUNUU19DQVBBQklMSVRZX01TSV9YX0lOREVYICAgICAgICAgICAgKDB4MDAwMDgwMDApCisjZGVmaW5lIE1QSTJfSU9DRkFDVFNfQ0FQQUJJTElUWV9SQUlEX0FDQ0VMRVJBVE9SICAgICAgICgweDAwMDA0MDAwKQogI2RlZmluZSBNUEkyX0lPQ0ZBQ1RTX0NBUEFCSUxJVFlfRVZFTlRfUkVQTEFZICAgICAgICAgICAoMHgwMDAwMjAwMCkKICNkZWZpbmUgTVBJMl9JT0NGQUNUU19DQVBBQklMSVRZX0lOVEVHUkFURURfUkFJRCAgICAgICAgKDB4MDAwMDEwMDApCiAjZGVmaW5lIE1QSTJfSU9DRkFDVFNfQ0FQQUJJTElUWV9UTFIgICAgICAgICAgICAgICAgICAgICgweDAwMDAwODAwKQpAQCAtNDQwLDYgKzQ0Nyw3IEBACiAjZGVmaW5lIE1QSTJfRVZFTlRfSVJfUEhZU0lDQUxfRElTSyAgICAgICAgICAgICAgICAgKDB4MDAxRikKICNkZWZpbmUgTVBJMl9FVkVOVF9JUl9DT05GSUdVUkFUSU9OX0NIQU5HRV9MSVNUICAgICAoMHgwMDIwKQogI2RlZmluZSBNUEkyX0VWRU5UX0xPR19FTlRSWV9BRERFRCAgICAgICAgICAgICAgICAgICgweDAwMjEpCisjZGVmaW5lIE1QSTJfRVZFTlRfU0FTX1BIWV9DT1VOVEVSICAgICAgICAgICAgICAgICAgKDB4MDAyMikKIAogCiAvKiBMb2cgRW50cnkgQWRkZWQgRXZlbnQgZGF0YSAqLwpAQCAtNTAyLDE3ICs1MTAsMTkgQEAKICAgTVBJMl9QT0lOVEVSIHBNcGkyRXZlbnREYXRhU2FzRGV2aWNlU3RhdHVzQ2hhbmdlX3Q7CiAKIC8qIFNBUyBEZXZpY2UgU3RhdHVzIENoYW5nZSBFdmVudCBkYXRhIFJlYXNvbkNvZGUgdmFsdWVzICovCi0jZGVmaW5lIE1QSTJfRVZFTlRfU0FTX0RFVl9TVEFUX1JDX1NNQVJUX0RBVEEgICAgICAgICAgICAgICAoMHgwNSkKLSNkZWZpbmUgTVBJMl9FVkVOVF9TQVNfREVWX1NUQVRfUkNfVU5TVVBQT1JURUQgICAgICAgICAgICAgICgweDA3KQotI2RlZmluZSBNUEkyX0VWRU5UX1NBU19ERVZfU1RBVF9SQ19JTlRFUk5BTF9ERVZJQ0VfUkVTRVQgICAgKDB4MDgpCi0jZGVmaW5lIE1QSTJfRVZFTlRfU0FTX0RFVl9TVEFUX1JDX1RBU0tfQUJPUlRfSU5URVJOQUwgICAgICAoMHgwOSkKLSNkZWZpbmUgTVBJMl9FVkVOVF9TQVNfREVWX1NUQVRfUkNfQUJPUlRfVEFTS19TRVRfSU5URVJOQUwgICgweDBBKQotI2RlZmluZSBNUEkyX0VWRU5UX1NBU19ERVZfU1RBVF9SQ19DTEVBUl9UQVNLX1NFVF9JTlRFUk5BTCAgKDB4MEIpCi0jZGVmaW5lIE1QSTJfRVZFTlRfU0FTX0RFVl9TVEFUX1JDX1FVRVJZX1RBU0tfSU5URVJOQUwgICAgICAoMHgwQykKLSNkZWZpbmUgTVBJMl9FVkVOVF9TQVNfREVWX1NUQVRfUkNfQVNZTkNfTk9USUZJQ0FUSU9OICAgICAgICgweDBEKQotI2RlZmluZSBNUEkyX0VWRU5UX1NBU19ERVZfU1RBVF9SQ19DTVBfSU5URVJOQUxfREVWX1JFU0VUICAgKDB4MEUpCi0jZGVmaW5lIE1QSTJfRVZFTlRfU0FTX0RFVl9TVEFUX1JDX0NNUF9UQVNLX0FCT1JUX0lOVEVSTkFMICAoMHgwRikKLSNkZWZpbmUgTVBJMl9FVkVOVF9TQVNfREVWX1NUQVRfUkNfU0FUQV9JTklUX0ZBSUxVUkUgICAgICAgICgweDEwKQorI2RlZmluZSBNUEkyX0VWRU5UX1NBU19ERVZfU1RBVF9SQ19TTUFSVF9EQVRBICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDUpCisjZGVmaW5lIE1QSTJfRVZFTlRfU0FTX0RFVl9TVEFUX1JDX1VOU1VQUE9SVEVEICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwNykKKyNkZWZpbmUgTVBJMl9FVkVOVF9TQVNfREVWX1NUQVRfUkNfSU5URVJOQUxfREVWSUNFX1JFU0VUICAgICAgICAgICAgICAgICgweDA4KQorI2RlZmluZSBNUEkyX0VWRU5UX1NBU19ERVZfU1RBVF9SQ19UQVNLX0FCT1JUX0lOVEVSTkFMICAgICAgICAgICAgICAgICAgKDB4MDkpCisjZGVmaW5lIE1QSTJfRVZFTlRfU0FTX0RFVl9TVEFUX1JDX0FCT1JUX1RBU0tfU0VUX0lOVEVSTkFMICAgICAgICAgICAgICAoMHgwQSkKKyNkZWZpbmUgTVBJMl9FVkVOVF9TQVNfREVWX1NUQVRfUkNfQ0xFQVJfVEFTS19TRVRfSU5URVJOQUwgICAgICAgICAgICAgICgweDBCKQorI2RlZmluZSBNUEkyX0VWRU5UX1NBU19ERVZfU1RBVF9SQ19RVUVSWV9UQVNLX0lOVEVSTkFMICAgICAgICAgICAgICAgICAgKDB4MEMpCisjZGVmaW5lIE1QSTJfRVZFTlRfU0FTX0RFVl9TVEFUX1JDX0FTWU5DX05PVElGSUNBVElPTiAgICAgICAgICAgICAgICAgICAoMHgwRCkKKyNkZWZpbmUgTVBJMl9FVkVOVF9TQVNfREVWX1NUQVRfUkNfQ01QX0lOVEVSTkFMX0RFVl9SRVNFVCAgICAgICAgICAgICAgICgweDBFKQorI2RlZmluZSBNUEkyX0VWRU5UX1NBU19ERVZfU1RBVF9SQ19DTVBfVEFTS19BQk9SVF9JTlRFUk5BTCAgICAgICAgICAgICAgKDB4MEYpCisjZGVmaW5lIE1QSTJfRVZFTlRfU0FTX0RFVl9TVEFUX1JDX1NBVEFfSU5JVF9GQUlMVVJFICAgICAgICAgICAgICAgICAgICAoMHgxMCkKKyNkZWZpbmUgTVBJMl9FVkVOVF9TQVNfREVWX1NUQVRfUkNfRVhQQU5ERVJfUkVEVUNFRF9GVU5DVElPTkFMSVRZICAgICAgICgweDExKQorI2RlZmluZSBNUEkyX0VWRU5UX1NBU19ERVZfU1RBVF9SQ19DTVBfRVhQQU5ERVJfUkVEVUNFRF9GVU5DVElPTkFMSVRZICAgKDB4MTIpCiAKIAogLyogSW50ZWdyYXRlZCBSQUlEIE9wZXJhdGlvbiBTdGF0dXMgRXZlbnQgZGF0YSAqLwpAQCAtODIyLDYgKzgzMiwzNyBAQAogI2RlZmluZSBNUEkyX0VWRU5UX1NBU19FTkNMX1JDX05PVF9SRVNQT05ESU5HICAgICAgICgweDAyKQogCiAKKy8qIFNBUyBQSFkgQ291bnRlciBFdmVudCBkYXRhICovCisKK3R5cGVkZWYgc3RydWN0IF9NUEkyX0VWRU5UX0RBVEFfU0FTX1BIWV9DT1VOVEVSIHsKKyAgICBVNjQgICAgICAgICBUaW1lU3RhbXA7ICAgICAgICAgIC8qIDB4MDAgKi8KKyAgICBVMzIgICAgICAgICBSZXNlcnZlZDE7ICAgICAgICAgIC8qIDB4MDggKi8KKyAgICBVOCAgICAgICAgICBQaHlFdmVudENvZGU7ICAgICAgIC8qIDB4MEMgKi8KKyAgICBVOCAgICAgICAgICBQaHlOdW07ICAgICAgICAgICAgIC8qIDB4MEQgKi8KKyAgICBVMTYgICAgICAgICBSZXNlcnZlZDI7ICAgICAgICAgIC8qIDB4MEUgKi8KKyAgICBVMzIgICAgICAgICBQaHlFdmVudEluZm87ICAgICAgIC8qIDB4MTAgKi8KKyAgICBVOCAgICAgICAgICBDb3VudGVyVHlwZTsgICAgICAgIC8qIDB4MTQgKi8KKyAgICBVOCAgICAgICAgICBUaHJlc2hvbGRXaW5kb3c7ICAgIC8qIDB4MTUgKi8KKyAgICBVOCAgICAgICAgICBUaW1lVW5pdHM7ICAgICAgICAgIC8qIDB4MTYgKi8KKyAgICBVOCAgICAgICAgICBSZXNlcnZlZDM7ICAgICAgICAgIC8qIDB4MTcgKi8KKyAgICBVMzIgICAgICAgICBFdmVudFRocmVzaG9sZDsgICAgIC8qIDB4MTggKi8KKyAgICBVMTYgICAgICAgICBUaHJlc2hvbGRGbGFnczsgICAgIC8qIDB4MUMgKi8KKyAgICBVMTYgICAgICAgICBSZXNlcnZlZDQ7ICAgICAgICAgIC8qIDB4MUUgKi8KK30gTVBJMl9FVkVOVF9EQVRBX1NBU19QSFlfQ09VTlRFUiwKKyAgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX0VWRU5UX0RBVEFfU0FTX1BIWV9DT1VOVEVSLAorICBNcGkyRXZlbnREYXRhU2FzUGh5Q291bnRlcl90LCBNUEkyX1BPSU5URVIgcE1waTJFdmVudERhdGFTYXNQaHlDb3VudGVyX3Q7CisKKy8qIHVzZSBNUEkyX1NBU1BIWTNfRVZFTlRfQ09ERV8gdmFsdWVzIGZyb20gbXBpMl9jbmZnLmggZm9yIHRoZQorICogUGh5RXZlbnRDb2RlIGZpZWxkCisgKiB1c2UgTVBJMl9TQVNQSFkzX0NPVU5URVJfVFlQRV8gdmFsdWVzIGZyb20gbXBpMl9jbmZnLmggZm9yIHRoZQorICogQ291bnRlclR5cGUgZmllbGQKKyAqIHVzZSBNUEkyX1NBU1BIWTNfVElNRV9VTklUU18gdmFsdWVzIGZyb20gbXBpMl9jbmZnLmggZm9yIHRoZQorICogVGltZVVuaXRzIGZpZWxkCisgKiB1c2UgTVBJMl9TQVNQSFkzX1RGTEFHU18gdmFsdWVzIGZyb20gbXBpMl9jbmZnLmggZm9yIHRoZQorICogVGhyZXNob2xkRmxhZ3MgZmllbGQKKyAqICovCisKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogIEV2ZW50QWNrIG1lc3NhZ2UKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcGkvbXBpMl90b29sLmggYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcGkvbXBpMl90b29sLmgKaW5kZXggMmZmNGU5My4uMDA3ZTk1MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXBpL21waTJfdG9vbC5oCisrKyBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21waS9tcGkyX3Rvb2wuaApAQCAtMSwxMiArMSwxMiBAQAogLyoKLSAqICBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwOCBMU0kgQ29ycG9yYXRpb24uCisgKiAgQ29weXJpZ2h0IChjKSAyMDAwLTIwMDkgTFNJIENvcnBvcmF0aW9uLgogICoKICAqCiAgKiAgICAgICAgICAgTmFtZTogIG1waTJfdG9vbC5oCiAgKiAgICAgICAgICBUaXRsZTogIE1QSSBkaWFnbm9zdGljIHRvb2wgc3RydWN0dXJlcyBhbmQgZGVmaW5pdGlvbnMKICAqICBDcmVhdGlvbiBEYXRlOiAgTWFyY2ggMjYsIDIwMDcKICAqCi0gKiAgICBtcGkyX3Rvb2wuaCBWZXJzaW9uOiAgMDIuMDAuMDIKKyAqICAgIG1waTJfdG9vbC5oIFZlcnNpb246ICAwMi4wMC4wMwogICoKICAqICBWZXJzaW9uIEhpc3RvcnkKICAqICAtLS0tLS0tLS0tLS0tLS0KQEAgLTE3LDYgKzE3LDcgQEAKICAqICAxMi0xOC0wNyAgMDIuMDAuMDEgIEFkZGVkIERpYWdub3N0aWMgQnVmZmVyIFBvc3QgYW5kIERpYWdub3N0aWMgUmVsZWFzZQogICogICAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlcyBhbmQgZGVmaW5lcy4KICAqICAwMi0yOS0wOCAgMDIuMDAuMDIgIE1vZGlmaWVkIHZhcmlvdXMgbmFtZXMgdG8gbWFrZSB0aGVtIDMyLWNoYXJhY3RlciB1bmlxdWUuCisgKiAgMDUtMDYtMDkgIDAyLjAwLjAzICBBZGRlZCBJU1RXSSBSZWFkIFdyaXRlIFRvb2wgYW5kIERpYWdub3N0aWMgQ0xJIFRvb2wuCiAgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqLwogCkBAIC0zMiw3ICszMywxMCBAQAogLyogZGVmaW5lcyBmb3IgdGhlIFRvb2xzICovCiAjZGVmaW5lIE1QSTJfVE9PTEJPWF9DTEVBTl9UT09MICAgICAgICAgICAgICAgICAgICAgKDB4MDApCiAjZGVmaW5lIE1QSTJfVE9PTEJPWF9NRU1PUllfTU9WRV9UT09MICAgICAgICAgICAgICAgKDB4MDEpCisjZGVmaW5lIE1QSTJfVE9PTEJPWF9JU1RXSV9SRUFEX1dSSVRFX1RPT0wgICAgICAgICAgKDB4MDMpCiAjZGVmaW5lIE1QSTJfVE9PTEJPWF9CRUFDT05fVE9PTCAgICAgICAgICAgICAgICAgICAgKDB4MDUpCisjZGVmaW5lIE1QSTJfVE9PTEJPWF9ESUFHTk9TVElDX0NMSV9UT09MICAgICAgICAgICAgKDB4MDYpCisKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogIFRvb2xib3ggcmVwbHkKQEAgLTExMiw2ICsxMTYsNzcgQEAKIAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgVG9vbGJveCBJU1RXSSBSZWFkIFdyaXRlIFRvb2wKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFRvb2xib3ggSVNUV0kgUmVhZCBXcml0ZSBUb29sIHJlcXVlc3QgbWVzc2FnZSAqLwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfVE9PTEJPWF9JU1RXSV9SRUFEX1dSSVRFX1JFUVVFU1QgeworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFRvb2w7ICAgICAgICAgICAgICAgICAgICAgICAvKiAweDAwICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQxOyAgICAgICAgICAgICAgICAgIC8qIDB4MDEgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBDaGFpbk9mZnNldDsgICAgICAgICAgICAgICAgLyogMHgwMiAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uOyAgICAgICAgICAgICAgICAgICAvKiAweDAzICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQyOyAgICAgICAgICAgICAgICAgIC8qIDB4MDQgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDM7ICAgICAgICAgICAgICAgICAgLyogMHgwNiAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIE1zZ0ZsYWdzOyAgICAgICAgICAgICAgICAgICAvKiAweDA3ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgVlBfSUQ7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDggKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBWRl9JRDsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwOSAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkNDsgICAgICAgICAgICAgICAgICAvKiAweDBBICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ1OyAgICAgICAgICAgICAgICAgIC8qIDB4MEMgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDY7ICAgICAgICAgICAgICAgICAgLyogMHgxMCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIERldkluZGV4OyAgICAgICAgICAgICAgICAgICAvKiAweDE0ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgQWN0aW9uOyAgICAgICAgICAgICAgICAgICAgIC8qIDB4MTUgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBTR0xGbGFnczsgICAgICAgICAgICAgICAgICAgLyogMHgxNiAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkNzsgICAgICAgICAgICAgICAgICAvKiAweDE3ICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgVHhEYXRhTGVuZ3RoOyAgICAgICAgICAgICAgIC8qIDB4MTggKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBSeERhdGFMZW5ndGg7ICAgICAgICAgICAgICAgLyogMHgxQSAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkODsgICAgICAgICAgICAgICAgICAvKiAweDFDICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ5OyAgICAgICAgICAgICAgICAgIC8qIDB4MjAgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDEwOyAgICAgICAgICAgICAgICAgLyogMHgyNCAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMTE7ICAgICAgICAgICAgICAgICAvKiAweDI4ICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQxMjsgICAgICAgICAgICAgICAgIC8qIDB4MkMgKi8KKyAgICBNUEkyX1NHRV9TSU1QTEVfVU5JT04gICBTR0w7ICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgzMCAqLworfSBNUEkyX1RPT0xCT1hfSVNUV0lfUkVBRF9XUklURV9SRVFVRVNULAorICBNUEkyX1BPSU5URVIgUFRSX01QSTJfVE9PTEJPWF9JU1RXSV9SRUFEX1dSSVRFX1JFUVVFU1QsCisgIE1waTJUb29sYm94SXN0d2lSZWFkV3JpdGVSZXF1ZXN0X3QsCisgIE1QSTJfUE9JTlRFUiBwTXBpMlRvb2xib3hJc3R3aVJlYWRXcml0ZVJlcXVlc3RfdDsKKworLyogdmFsdWVzIGZvciB0aGUgQWN0aW9uIGZpZWxkICovCisjZGVmaW5lIE1QSTJfVE9PTF9JU1RXSV9BQ1RJT05fUkVBRF9EQVRBICAgICAgICAgICAgKDB4MDEpCisjZGVmaW5lIE1QSTJfVE9PTF9JU1RXSV9BQ1RJT05fV1JJVEVfREFUQSAgICAgICAgICAgKDB4MDIpCisjZGVmaW5lIE1QSTJfVE9PTF9JU1RXSV9BQ1RJT05fU0VRVUVOQ0UgICAgICAgICAgICAgKDB4MDMpCisjZGVmaW5lIE1QSTJfVE9PTF9JU1RXSV9BQ1RJT05fUkVTRVJWRV9CVVMgICAgICAgICAgKDB4MTApCisjZGVmaW5lIE1QSTJfVE9PTF9JU1RXSV9BQ1RJT05fUkVMRUFTRV9CVVMgICAgICAgICAgKDB4MTEpCisjZGVmaW5lIE1QSTJfVE9PTF9JU1RXSV9BQ1RJT05fUkVTRVQgICAgICAgICAgICAgICAgKDB4MTIpCisKKy8qIHZhbHVlcyBmb3IgU0dMRmxhZ3MgZmllbGQgYXJlIGluIHRoZSBTR0wgc2VjdGlvbiBvZiBtcGkyLmggKi8KKworCisvKiBUb29sYm94IElTVFdJIFJlYWQgV3JpdGUgVG9vbCByZXBseSBtZXNzYWdlICovCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9UT09MQk9YX0lTVFdJX1JFUExZIHsKKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBUb29sOyAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMTsgICAgICAgICAgICAgICAgICAvKiAweDAxICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgTXNnTGVuZ3RoOyAgICAgICAgICAgICAgICAgIC8qIDB4MDIgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBGdW5jdGlvbjsgICAgICAgICAgICAgICAgICAgLyogMHgwMyAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMjsgICAgICAgICAgICAgICAgICAvKiAweDA0ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQzOyAgICAgICAgICAgICAgICAgIC8qIDB4MDYgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBNc2dGbGFnczsgICAgICAgICAgICAgICAgICAgLyogMHgwNyAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFZQX0lEOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDA4ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgVkZfSUQ7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDkgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDQ7ICAgICAgICAgICAgICAgICAgLyogMHgwQSAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkNTsgICAgICAgICAgICAgICAgICAvKiAweDBDICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgSU9DU3RhdHVzOyAgICAgICAgICAgICAgICAgIC8qIDB4MEUgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBJT0NMb2dJbmZvOyAgICAgICAgICAgICAgICAgLyogMHgxMCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIERldkluZGV4OyAgICAgICAgICAgICAgICAgICAvKiAweDE0ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgQWN0aW9uOyAgICAgICAgICAgICAgICAgICAgIC8qIDB4MTUgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBJc3R3aVN0YXR1czsgICAgICAgICAgICAgICAgLyogMHgxNiAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkNjsgICAgICAgICAgICAgICAgICAvKiAweDE3ICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgVHhEYXRhQ291bnQ7ICAgICAgICAgICAgICAgIC8qIDB4MTggKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBSeERhdGFDb3VudDsgICAgICAgICAgICAgICAgLyogMHgxQSAqLworfSBNUEkyX1RPT0xCT1hfSVNUV0lfUkVQTFksIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9UT09MQk9YX0lTVFdJX1JFUExZLAorICBNcGkyVG9vbGJveElzdHdpUmVwbHlfdCwgTVBJMl9QT0lOVEVSIHBNcGkyVG9vbGJveElzdHdpUmVwbHlfdDsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiAgVG9vbGJveCBCZWFjb24gVG9vbCByZXF1ZXN0CiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCkBAIC0xMzksNiArMjE0LDYxIEBACiAjZGVmaW5lIE1QSTJfVE9PTEJPWF9GTEFHU19CRUFDT05NT0RFX09OICAgICAgICAoMHgwMSkKIAogCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgVG9vbGJveCBEaWFnbm9zdGljIENMSSBUb29sCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIE1QSTJfVE9PTEJPWF9ESUFHX0NMSV9DTURfTEVOR1RIICAgICgweDVDKQorCisvKiBUb29sYm94IERpYWdub3N0aWMgQ0xJIFRvb2wgcmVxdWVzdCBtZXNzYWdlICovCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9UT09MQk9YX0RJQUdOT1NUSUNfQ0xJX1JFUVVFU1QgeworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFRvb2w7ICAgICAgICAgICAgICAgICAgICAgICAvKiAweDAwICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQxOyAgICAgICAgICAgICAgICAgIC8qIDB4MDEgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBDaGFpbk9mZnNldDsgICAgICAgICAgICAgICAgLyogMHgwMiAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uOyAgICAgICAgICAgICAgICAgICAvKiAweDAzICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQyOyAgICAgICAgICAgICAgICAgIC8qIDB4MDQgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDM7ICAgICAgICAgICAgICAgICAgLyogMHgwNiAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIE1zZ0ZsYWdzOyAgICAgICAgICAgICAgICAgICAvKiAweDA3ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgVlBfSUQ7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDggKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBWRl9JRDsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwOSAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkNDsgICAgICAgICAgICAgICAgICAvKiAweDBBICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgU0dMRmxhZ3M7ICAgICAgICAgICAgICAgICAgIC8qIDB4MEMgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDU7ICAgICAgICAgICAgICAgICAgLyogMHgwRCAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkNjsgICAgICAgICAgICAgICAgICAvKiAweDBFICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgRGF0YUxlbmd0aDsgICAgICAgICAgICAgICAgIC8qIDB4MTAgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBEaWFnbm9zdGljQ2xpQ29tbWFuZAorCQlbTVBJMl9UT09MQk9YX0RJQUdfQ0xJX0NNRF9MRU5HVEhdOyAgICAgLyogMHgxNCAqLworICAgIE1QSTJfU0dFX1NJTVBMRV9VTklPTiAgIFNHTDsgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDcwICovCit9IE1QSTJfVE9PTEJPWF9ESUFHTk9TVElDX0NMSV9SRVFVRVNULAorICBNUEkyX1BPSU5URVIgUFRSX01QSTJfVE9PTEJPWF9ESUFHTk9TVElDX0NMSV9SRVFVRVNULAorICBNcGkyVG9vbGJveERpYWdub3N0aWNDbGlSZXF1ZXN0X3QsCisgIE1QSTJfUE9JTlRFUiBwTXBpMlRvb2xib3hEaWFnbm9zdGljQ2xpUmVxdWVzdF90OworCisvKiB2YWx1ZXMgZm9yIFNHTEZsYWdzIGZpZWxkIGFyZSBpbiB0aGUgU0dMIHNlY3Rpb24gb2YgbXBpMi5oICovCisKKworLyogVG9vbGJveCBEaWFnbm9zdGljIENMSSBUb29sIHJlcGx5IG1lc3NhZ2UgKi8KK3R5cGVkZWYgc3RydWN0IF9NUEkyX1RPT0xCT1hfRElBR05PU1RJQ19DTElfUkVQTFkgeworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFRvb2w7ICAgICAgICAgICAgICAgICAgICAgICAvKiAweDAwICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQxOyAgICAgICAgICAgICAgICAgIC8qIDB4MDEgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBNc2dMZW5ndGg7ICAgICAgICAgICAgICAgICAgLyogMHgwMiAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uOyAgICAgICAgICAgICAgICAgICAvKiAweDAzICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQyOyAgICAgICAgICAgICAgICAgIC8qIDB4MDQgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDM7ICAgICAgICAgICAgICAgICAgLyogMHgwNiAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIE1zZ0ZsYWdzOyAgICAgICAgICAgICAgICAgICAvKiAweDA3ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgVlBfSUQ7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDggKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBWRl9JRDsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwOSAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkNDsgICAgICAgICAgICAgICAgICAvKiAweDBBICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ1OyAgICAgICAgICAgICAgICAgIC8qIDB4MEMgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBJT0NTdGF0dXM7ICAgICAgICAgICAgICAgICAgLyogMHgwRSAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIElPQ0xvZ0luZm87ICAgICAgICAgICAgICAgICAvKiAweDEwICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgUmV0dXJuZWREYXRhTGVuZ3RoOyAgICAgICAgIC8qIDB4MTQgKi8KK30gTVBJMl9UT09MQk9YX0RJQUdOT1NUSUNfQ0xJX1JFUExZLAorICBNUEkyX1BPSU5URVIgUFRSX01QSTJfVE9PTEJPWF9ESUFHX0NMSV9SRVBMWSwKKyAgTXBpMlRvb2xib3hEaWFnbm9zdGljQ2xpUmVwbHlfdCwKKyAgTVBJMl9QT0lOVEVSIHBNcGkyVG9vbGJveERpYWdub3N0aWNDbGlSZXBseV90OworCisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKgogKiAgICAgICBEaWFnbm9zdGljIEJ1ZmZlciBNZXNzYWdlcwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19iYXNlLmMgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2Jhc2UuYwppbmRleCBkOTVkMmYyLi42NzAyNDFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2Jhc2UuYworKysgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2Jhc2UuYwpAQCAtMyw3ICszLDcgQEAKICAqIGZvciBhY2Nlc3MgdG8gTVBUIChNZXNzYWdlIFBhc3NpbmcgVGVjaG5vbG9neSkgZmlybXdhcmUuCiAgKgogICogVGhpcyBjb2RlIGlzIGJhc2VkIG9uIGRyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJfYmFzZS5jCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOCAgTFNJIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSAgTFNJIENvcnBvcmF0aW9uCiAgKiAgKG1haWx0bzpETC1NUFRGdXNpb25MaW51eEBsc2kuY29tKQogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTYzLDcgKzYzLDcgQEAKIHN0YXRpYyBNUFRfQ0FMTEJBQ0sJbXB0X2NhbGxiYWNrc1tNUFRfTUFYX0NBTExCQUNLU107CiAKICNkZWZpbmUgRkFVTFRfUE9MTElOR19JTlRFUlZBTCAxMDAwIC8qIGluIG1pbGxpc2Vjb25kcyAqLwotI2RlZmluZSBNUFQyU0FTX01BWF9SRVFVRVNUX1FVRVVFIDUwMCAvKiBtYXhpbXVtIGNvbnRyb2xsZXIgcXVldWUgZGVwdGggKi8KKyNkZWZpbmUgTVBUMlNBU19NQVhfUkVRVUVTVF9RVUVVRSA2MDAgLyogbWF4aW11bSBjb250cm9sbGVyIHF1ZXVlIGRlcHRoICovCiAKIHN0YXRpYyBpbnQgbWF4X3F1ZXVlX2RlcHRoID0gLTE7CiBtb2R1bGVfcGFyYW0obWF4X3F1ZXVlX2RlcHRoLCBpbnQsIDApOwpAQCAtNTQzLDEzICs1NDMsMTMgQEAKICAqIF9iYXNlX2Rpc3BsYXlfcmVwbHlfaW5mbyAtCiAgKiBAaW9jOiBwb2ludGVyIHRvIHNjc2kgY29tbWFuZCBvYmplY3QKICAqIEBzbWlkOiBzeXN0ZW0gcmVxdWVzdCBtZXNzYWdlIGluZGV4Ci0gKiBAVkZfSUQ6IHZpcnR1YWwgZnVuY3Rpb24gaWQKKyAqIEBtc2l4X2luZGV4OiBNU0lYIHRhYmxlIGluZGV4IHN1cHBsaWVkIGJ5IHRoZSBPUwogICogQHJlcGx5OiByZXBseSBtZXNzYWdlIGZyYW1lKGxvd2VyIDMyYml0IGFkZHIpCiAgKgogICogUmV0dXJuIG5vdGhpbmcuCiAgKi8KIHN0YXRpYyB2b2lkCi1fYmFzZV9kaXNwbGF5X3JlcGx5X2luZm8oc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgc21pZCwgdTggVkZfSUQsCitfYmFzZV9kaXNwbGF5X3JlcGx5X2luZm8oc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgc21pZCwgdTggbXNpeF9pbmRleCwKICAgICB1MzIgcmVwbHkpCiB7CiAJTVBJMkRlZmF1bHRSZXBseV90ICptcGlfcmVwbHk7CkBAIC01NzIsMjIgKzU3MiwyNCBAQAogICogbXB0MnNhc19iYXNlX2RvbmUgLSBiYXNlIGludGVybmFsIGNvbW1hbmQgY29tcGxldGlvbiByb3V0aW5lCiAgKiBAaW9jOiBwb2ludGVyIHRvIHNjc2kgY29tbWFuZCBvYmplY3QKICAqIEBzbWlkOiBzeXN0ZW0gcmVxdWVzdCBtZXNzYWdlIGluZGV4Ci0gKiBAVkZfSUQ6IHZpcnR1YWwgZnVuY3Rpb24gaWQKKyAqIEBtc2l4X2luZGV4OiBNU0lYIHRhYmxlIGluZGV4IHN1cHBsaWVkIGJ5IHRoZSBPUwogICogQHJlcGx5OiByZXBseSBtZXNzYWdlIGZyYW1lKGxvd2VyIDMyYml0IGFkZHIpCiAgKgotICogUmV0dXJuIG5vdGhpbmcuCisgKiBSZXR1cm4gMSBtZWFuaW5nIG1mIHNob3VsZCBiZSBmcmVlZCBmcm9tIF9iYXNlX2ludGVycnVwdAorICogICAgICAgIDAgbWVhbnMgdGhlIG1mIGlzIGZyZWVkIGZyb20gdGhpcyBmdW5jdGlvbi4KICAqLwotdm9pZAotbXB0MnNhc19iYXNlX2RvbmUoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgc21pZCwgdTggVkZfSUQsIHUzMiByZXBseSkKK3U4CittcHQyc2FzX2Jhc2VfZG9uZShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBzbWlkLCB1OCBtc2l4X2luZGV4LAorICAgIHUzMiByZXBseSkKIHsKIAlNUEkyRGVmYXVsdFJlcGx5X3QgKm1waV9yZXBseTsKIAogCW1waV9yZXBseSA9IG1wdDJzYXNfYmFzZV9nZXRfcmVwbHlfdmlydF9hZGRyKGlvYywgcmVwbHkpOwogCWlmIChtcGlfcmVwbHkgJiYgbXBpX3JlcGx5LT5GdW5jdGlvbiA9PSBNUEkyX0ZVTkNUSU9OX0VWRU5UX0FDSykKLQkJcmV0dXJuOworCQlyZXR1cm4gMTsKIAogCWlmIChpb2MtPmJhc2VfY21kcy5zdGF0dXMgPT0gTVBUMl9DTURfTk9UX1VTRUQpCi0JCXJldHVybjsKKwkJcmV0dXJuIDE7CiAKIAlpb2MtPmJhc2VfY21kcy5zdGF0dXMgfD0gTVBUMl9DTURfQ09NUExFVEU7CiAJaWYgKG1waV9yZXBseSkgewpAQCAtNTk2LDE4ICs1OTgsMjAgQEAKIAl9CiAJaW9jLT5iYXNlX2NtZHMuc3RhdHVzICY9IH5NUFQyX0NNRF9QRU5ESU5HOwogCWNvbXBsZXRlKCZpb2MtPmJhc2VfY21kcy5kb25lKTsKKwlyZXR1cm4gMTsKIH0KIAogLyoqCiAgKiBfYmFzZV9hc3luY19ldmVudCAtIG1haW4gY2FsbGJhY2sgaGFuZGxlciBmb3IgZmlybXdhcmUgYXN5biBldmVudHMKICAqIEBpb2M6IHBvaW50ZXIgdG8gc2NzaSBjb21tYW5kIG9iamVjdAotICogQFZGX0lEOiB2aXJ0dWFsIGZ1bmN0aW9uIGlkCisgKiBAbXNpeF9pbmRleDogTVNJWCB0YWJsZSBpbmRleCBzdXBwbGllZCBieSB0aGUgT1MKICAqIEByZXBseTogcmVwbHkgbWVzc2FnZSBmcmFtZShsb3dlciAzMmJpdCBhZGRyKQogICoKLSAqIFJldHVybiBub3RoaW5nLgorICogUmV0dXJuIDEgbWVhbmluZyBtZiBzaG91bGQgYmUgZnJlZWQgZnJvbSBfYmFzZV9pbnRlcnJ1cHQKKyAqICAgICAgICAwIG1lYW5zIHRoZSBtZiBpcyBmcmVlZCBmcm9tIHRoaXMgZnVuY3Rpb24uCiAgKi8KLXN0YXRpYyB2b2lkCi1fYmFzZV9hc3luY19ldmVudChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHU4IFZGX0lELCB1MzIgcmVwbHkpCitzdGF0aWMgdTgKK19iYXNlX2FzeW5jX2V2ZW50KHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTggbXNpeF9pbmRleCwgdTMyIHJlcGx5KQogewogCU1waTJFdmVudE5vdGlmaWNhdGlvblJlcGx5X3QgKm1waV9yZXBseTsKIAlNcGkyRXZlbnRBY2tSZXF1ZXN0X3QgKmFja19yZXF1ZXN0OwpAQCAtNjE1LDkgKzYxOSw5IEBACiAKIAltcGlfcmVwbHkgPSBtcHQyc2FzX2Jhc2VfZ2V0X3JlcGx5X3ZpcnRfYWRkcihpb2MsIHJlcGx5KTsKIAlpZiAoIW1waV9yZXBseSkKLQkJcmV0dXJuOworCQlyZXR1cm4gMTsKIAlpZiAobXBpX3JlcGx5LT5GdW5jdGlvbiAhPSBNUEkyX0ZVTkNUSU9OX0VWRU5UX05PVElGSUNBVElPTikKLQkJcmV0dXJuOworCQlyZXR1cm4gMTsKICNpZmRlZiBDT05GSUdfU0NTSV9NUFQyU0FTX0xPR0dJTkcKIAlfYmFzZV9kaXNwbGF5X2V2ZW50X2RhdGEoaW9jLCBtcGlfcmVwbHkpOwogI2VuZGlmCkBAIC02MzUsMTYgKzYzOSw0NyBAQAogCWFja19yZXF1ZXN0LT5GdW5jdGlvbiA9IE1QSTJfRlVOQ1RJT05fRVZFTlRfQUNLOwogCWFja19yZXF1ZXN0LT5FdmVudCA9IG1waV9yZXBseS0+RXZlbnQ7CiAJYWNrX3JlcXVlc3QtPkV2ZW50Q29udGV4dCA9IG1waV9yZXBseS0+RXZlbnRDb250ZXh0OwotCWFja19yZXF1ZXN0LT5WRl9JRCA9IFZGX0lEOwotCW1wdDJzYXNfYmFzZV9wdXRfc21pZF9kZWZhdWx0KGlvYywgc21pZCwgVkZfSUQpOworCWFja19yZXF1ZXN0LT5WRl9JRCA9IDA7ICAvKiBUT0RPICovCisJYWNrX3JlcXVlc3QtPlZQX0lEID0gMDsKKwltcHQyc2FzX2Jhc2VfcHV0X3NtaWRfZGVmYXVsdChpb2MsIHNtaWQpOwogCiAgb3V0OgogCiAJLyogc2NzaWggY2FsbGJhY2sgaGFuZGxlciAqLwotCW1wdDJzYXNfc2NzaWhfZXZlbnRfY2FsbGJhY2soaW9jLCBWRl9JRCwgcmVwbHkpOworCW1wdDJzYXNfc2NzaWhfZXZlbnRfY2FsbGJhY2soaW9jLCBtc2l4X2luZGV4LCByZXBseSk7CiAKIAkvKiBjdGwgY2FsbGJhY2sgaGFuZGxlciAqLwotCW1wdDJzYXNfY3RsX2V2ZW50X2NhbGxiYWNrKGlvYywgVkZfSUQsIHJlcGx5KTsKKwltcHQyc2FzX2N0bF9ldmVudF9jYWxsYmFjayhpb2MsIG1zaXhfaW5kZXgsIHJlcGx5KTsKKworCXJldHVybiAxOworfQorCisvKioKKyAqIF9iYXNlX2dldF9jYl9pZHggLSBvYnRhaW4gdGhlIGNhbGxiYWNrIGluZGV4CisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEBzbWlkOiBzeXN0ZW0gcmVxdWVzdCBtZXNzYWdlIGluZGV4CisgKgorICogUmV0dXJuIGNhbGxiYWNrIGluZGV4LgorICovCitzdGF0aWMgdTgKK19iYXNlX2dldF9jYl9pZHgoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgc21pZCkKK3sKKwlpbnQgaTsKKwl1OCBjYl9pZHggPSAweEZGOworCisJaWYgKHNtaWQgPj0gaW9jLT5oaV9wcmlvcml0eV9zbWlkKSB7CisJCWlmIChzbWlkIDwgaW9jLT5pbnRlcm5hbF9zbWlkKSB7CisJCQlpID0gc21pZCAtIGlvYy0+aGlfcHJpb3JpdHlfc21pZDsKKwkJCWNiX2lkeCA9IGlvYy0+aHByX2xvb2t1cFtpXS5jYl9pZHg7CisJCX0gZWxzZSB7CisJCQlpID0gc21pZCAtIGlvYy0+aW50ZXJuYWxfc21pZDsKKwkJCWNiX2lkeCA9IGlvYy0+aW50ZXJuYWxfbG9va3VwW2ldLmNiX2lkeDsKKwkJfQorCX0gZWxzZSB7CisJCWkgPSBzbWlkIC0gMTsKKwkJY2JfaWR4ID0gaW9jLT5zY3NpX2xvb2t1cFtpXS5jYl9pZHg7CisJfQorCXJldHVybiBjYl9pZHg7CiB9CiAKIC8qKgpAQCAtNjgwLDcgKzcxNSw2IEBACiB7CiAJdTMyIGhpbV9yZWdpc3RlcjsKIAotCXdyaXRlbCgwLCAmaW9jLT5jaGlwLT5Ib3N0SW50ZXJydXB0U3RhdHVzKTsKIAloaW1fcmVnaXN0ZXIgPSByZWFkbCgmaW9jLT5jaGlwLT5Ib3N0SW50ZXJydXB0TWFzayk7CiAJaGltX3JlZ2lzdGVyICY9IH5NUEkyX0hJTV9SSU07CiAJd3JpdGVsKGhpbV9yZWdpc3RlciwgJmlvYy0+Y2hpcC0+SG9zdEludGVycnVwdE1hc2spOwpAQCAtNzEyLDkgKzc0NiwxMCBAQAogCXUxNiBzbWlkOwogCXU4IGNiX2lkeDsKIAl1MzIgcmVwbHk7Ci0JdTggVkZfSUQ7CisJdTggbXNpeF9pbmRleDsKIAlzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MgPSBidXNfaWQ7CiAJTXBpMlJlcGx5RGVzY3JpcHRvcnNVbmlvbl90ICpycGY7CisJdTggcmM7CiAKIAlpZiAoaW9jLT5tYXNrX2ludGVycnVwdHMpCiAJCXJldHVybiBJUlFfTk9ORTsKQEAgLTczMyw3ICs3NjgsNyBAQAogCQlyZXBseSA9IDA7CiAJCWNiX2lkeCA9IDB4RkY7CiAJCXNtaWQgPSBsZTE2X3RvX2NwdShycGYtPkRlZmF1bHQuRGVzY3JpcHRvclR5cGVEZXBlbmRlbnQxKTsKLQkJVkZfSUQgPSBycGYtPkRlZmF1bHQuVkZfSUQ7CisJCW1zaXhfaW5kZXggPSBycGYtPkRlZmF1bHQuTVNJeEluZGV4OwogCQlpZiAocmVxdWVzdF9kZXNyaXB0X3R5cGUgPT0KIAkJICAgIE1QSTJfUlBZX0RFU0NSSVBUX0ZMQUdTX0FERFJFU1NfUkVQTFkpIHsKIAkJCXJlcGx5ID0gbGUzMl90b19jcHUKQEAgLTc0NSwxNiArNzgwLDE4IEBACiAJCSAgICBNUEkyX1JQWV9ERVNDUklQVF9GTEFHU19UQVJHRVRBU1NJU1RfU1VDQ0VTUykKIAkJCWdvdG8gbmV4dDsKIAkJaWYgKHNtaWQpCi0JCQljYl9pZHggPSBpb2MtPnNjc2lfbG9va3VwW3NtaWQgLSAxXS5jYl9pZHg7CisJCQljYl9pZHggPSBfYmFzZV9nZXRfY2JfaWR4KGlvYywgc21pZCk7CiAJCWlmIChzbWlkICYmIGNiX2lkeCAhPSAweEZGKSB7Ci0JCQltcHRfY2FsbGJhY2tzW2NiX2lkeF0oaW9jLCBzbWlkLCBWRl9JRCwgcmVwbHkpOworCQkJcmMgPSBtcHRfY2FsbGJhY2tzW2NiX2lkeF0oaW9jLCBzbWlkLCBtc2l4X2luZGV4LAorCQkJICAgIHJlcGx5KTsKIAkJCWlmIChyZXBseSkKLQkJCQlfYmFzZV9kaXNwbGF5X3JlcGx5X2luZm8oaW9jLCBzbWlkLCBWRl9JRCwKKwkJCQlfYmFzZV9kaXNwbGF5X3JlcGx5X2luZm8oaW9jLCBzbWlkLCBtc2l4X2luZGV4LAogCQkJCSAgICByZXBseSk7Ci0JCQltcHQyc2FzX2Jhc2VfZnJlZV9zbWlkKGlvYywgc21pZCk7CisJCQlpZiAocmMpCisJCQkJbXB0MnNhc19iYXNlX2ZyZWVfc21pZChpb2MsIHNtaWQpOwogCQl9CiAJCWlmICghc21pZCkKLQkJCV9iYXNlX2FzeW5jX2V2ZW50KGlvYywgVkZfSUQsIHJlcGx5KTsKKwkJCV9iYXNlX2FzeW5jX2V2ZW50KGlvYywgbXNpeF9pbmRleCwgcmVwbHkpOwogCiAJCS8qIHJlcGx5IGZyZWUgcXVldWUgaGFuZGxpbmcgKi8KIAkJaWYgKHJlcGx5KSB7CkBAIC0xMTkxLDE5ICsxMjI4LDYgQEAKIH0KIAogLyoqCi0gKiBtcHQyc2FzX2Jhc2VfZ2V0X21zZ19mcmFtZV9kbWEgLSBvYnRhaW4gcmVxdWVzdCBtZiBwb2ludGVyIHBoeXMgYWRkcgotICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0Ci0gKiBAc21pZDogc3lzdGVtIHJlcXVlc3QgbWVzc2FnZSBpbmRleChzbWlkIHplcm8gaXMgaW52YWxpZCkKLSAqCi0gKiBSZXR1cm5zIHBoeXMgcG9pbnRlciB0byBtZXNzYWdlIGZyYW1lLgotICovCi1kbWFfYWRkcl90Ci1tcHQyc2FzX2Jhc2VfZ2V0X21zZ19mcmFtZV9kbWEoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgc21pZCkKLXsKLQlyZXR1cm4gaW9jLT5yZXF1ZXN0X2RtYSArIChzbWlkICogaW9jLT5yZXF1ZXN0X3N6KTsKLX0KLQotLyoqCiAgKiBtcHQyc2FzX2Jhc2VfZ2V0X21zZ19mcmFtZSAtIG9idGFpbiByZXF1ZXN0IG1mIHBvaW50ZXIKICAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAogICogQHNtaWQ6IHN5c3RlbSByZXF1ZXN0IG1lc3NhZ2UgaW5kZXgoc21pZCB6ZXJvIGlzIGludmFsaWQpCkBAIC0xMjU4LDcgKzEyODIsNyBAQAogfQogCiAvKioKLSAqIG1wdDJzYXNfYmFzZV9nZXRfc21pZCAtIG9idGFpbiBhIGZyZWUgc21pZAorICogbXB0MnNhc19iYXNlX2dldF9zbWlkIC0gb2J0YWluIGEgZnJlZSBzbWlkIGZyb20gaW50ZXJuYWwgcXVldWUKICAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAogICogQGNiX2lkeDogY2FsbGJhY2sgaW5kZXgKICAqCkBAIC0xMjcyLDYgKzEyOTYsMzkgQEAKIAl1MTYgc21pZDsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZpb2MtPnNjc2lfbG9va3VwX2xvY2ssIGZsYWdzKTsKKwlpZiAobGlzdF9lbXB0eSgmaW9jLT5pbnRlcm5hbF9mcmVlX2xpc3QpKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+c2NzaV9sb29rdXBfbG9jaywgZmxhZ3MpOworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICIlczogc21pZCBub3QgYXZhaWxhYmxlXG4iLAorCQkgICAgaW9jLT5uYW1lLCBfX2Z1bmNfXyk7CisJCXJldHVybiAwOworCX0KKworCXJlcXVlc3QgPSBsaXN0X2VudHJ5KGlvYy0+aW50ZXJuYWxfZnJlZV9saXN0Lm5leHQsCisJICAgIHN0cnVjdCByZXF1ZXN0X3RyYWNrZXIsIHRyYWNrZXJfbGlzdCk7CisJcmVxdWVzdC0+Y2JfaWR4ID0gY2JfaWR4OworCXNtaWQgPSByZXF1ZXN0LT5zbWlkOworCWxpc3RfZGVsKCZyZXF1ZXN0LT50cmFja2VyX2xpc3QpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+c2NzaV9sb29rdXBfbG9jaywgZmxhZ3MpOworCXJldHVybiBzbWlkOworfQorCisvKioKKyAqIG1wdDJzYXNfYmFzZV9nZXRfc21pZF9zY3NpaW8gLSBvYnRhaW4gYSBmcmVlIHNtaWQgZnJvbSBzY3NpaW8gcXVldWUKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQGNiX2lkeDogY2FsbGJhY2sgaW5kZXgKKyAqIEBzY21kOiBwb2ludGVyIHRvIHNjc2kgY29tbWFuZCBvYmplY3QKKyAqCisgKiBSZXR1cm5zIHNtaWQgKHplcm8gaXMgaW52YWxpZCkKKyAqLwordTE2CittcHQyc2FzX2Jhc2VfZ2V0X3NtaWRfc2NzaWlvKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTggY2JfaWR4LAorICAgIHN0cnVjdCBzY3NpX2NtbmQgKnNjbWQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgcmVxdWVzdF90cmFja2VyICpyZXF1ZXN0OworCXUxNiBzbWlkOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+c2NzaV9sb29rdXBfbG9jaywgZmxhZ3MpOwogCWlmIChsaXN0X2VtcHR5KCZpb2MtPmZyZWVfbGlzdCkpIHsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5zY3NpX2xvb2t1cF9sb2NrLCBmbGFncyk7CiAJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgIiVzOiBzbWlkIG5vdCBhdmFpbGFibGVcbiIsCkBAIC0xMjgxLDYgKzEzMzgsMzYgQEAKIAogCXJlcXVlc3QgPSBsaXN0X2VudHJ5KGlvYy0+ZnJlZV9saXN0Lm5leHQsCiAJICAgIHN0cnVjdCByZXF1ZXN0X3RyYWNrZXIsIHRyYWNrZXJfbGlzdCk7CisJcmVxdWVzdC0+c2NtZCA9IHNjbWQ7CisJcmVxdWVzdC0+Y2JfaWR4ID0gY2JfaWR4OworCXNtaWQgPSByZXF1ZXN0LT5zbWlkOworCWxpc3RfZGVsKCZyZXF1ZXN0LT50cmFja2VyX2xpc3QpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+c2NzaV9sb29rdXBfbG9jaywgZmxhZ3MpOworCXJldHVybiBzbWlkOworfQorCisvKioKKyAqIG1wdDJzYXNfYmFzZV9nZXRfc21pZF9ocHIgLSBvYnRhaW4gYSBmcmVlIHNtaWQgZnJvbSBoaS1wcmlvcml0eSBxdWV1ZQorICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CisgKiBAY2JfaWR4OiBjYWxsYmFjayBpbmRleAorICoKKyAqIFJldHVybnMgc21pZCAoemVybyBpcyBpbnZhbGlkKQorICovCit1MTYKK21wdDJzYXNfYmFzZV9nZXRfc21pZF9ocHIoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1OCBjYl9pZHgpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgcmVxdWVzdF90cmFja2VyICpyZXF1ZXN0OworCXUxNiBzbWlkOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+c2NzaV9sb29rdXBfbG9jaywgZmxhZ3MpOworCWlmIChsaXN0X2VtcHR5KCZpb2MtPmhwcl9mcmVlX2xpc3QpKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+c2NzaV9sb29rdXBfbG9jaywgZmxhZ3MpOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXF1ZXN0ID0gbGlzdF9lbnRyeShpb2MtPmhwcl9mcmVlX2xpc3QubmV4dCwKKwkgICAgc3RydWN0IHJlcXVlc3RfdHJhY2tlciwgdHJhY2tlcl9saXN0KTsKIAlyZXF1ZXN0LT5jYl9pZHggPSBjYl9pZHg7CiAJc21pZCA9IHJlcXVlc3QtPnNtaWQ7CiAJbGlzdF9kZWwoJnJlcXVlc3QtPnRyYWNrZXJfbGlzdCk7CkBAIC0xMzAwLDEwICsxMzg3LDMyIEBACiBtcHQyc2FzX2Jhc2VfZnJlZV9zbWlkKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IHNtaWQpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgaTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZpb2MtPnNjc2lfbG9va3VwX2xvY2ssIGZsYWdzKTsKLQlpb2MtPnNjc2lfbG9va3VwW3NtaWQgLSAxXS5jYl9pZHggPSAweEZGOwotCWxpc3RfYWRkX3RhaWwoJmlvYy0+c2NzaV9sb29rdXBbc21pZCAtIDFdLnRyYWNrZXJfbGlzdCwKKwlpZiAoc21pZCA+PSBpb2MtPmhpX3ByaW9yaXR5X3NtaWQpIHsKKwkJaWYgKHNtaWQgPCBpb2MtPmludGVybmFsX3NtaWQpIHsKKwkJCS8qIGhpLXByaW9yaXR5ICovCisJCQlpID0gc21pZCAtIGlvYy0+aGlfcHJpb3JpdHlfc21pZDsKKwkJCWlvYy0+aHByX2xvb2t1cFtpXS5jYl9pZHggPSAweEZGOworCQkJbGlzdF9hZGRfdGFpbCgmaW9jLT5ocHJfbG9va3VwW2ldLnRyYWNrZXJfbGlzdCwKKwkJCSAgICAmaW9jLT5ocHJfZnJlZV9saXN0KTsKKwkJfSBlbHNlIHsKKwkJCS8qIGludGVybmFsIHF1ZXVlICovCisJCQlpID0gc21pZCAtIGlvYy0+aW50ZXJuYWxfc21pZDsKKwkJCWlvYy0+aW50ZXJuYWxfbG9va3VwW2ldLmNiX2lkeCA9IDB4RkY7CisJCQlsaXN0X2FkZF90YWlsKCZpb2MtPmludGVybmFsX2xvb2t1cFtpXS50cmFja2VyX2xpc3QsCisJCQkgICAgJmlvYy0+aW50ZXJuYWxfZnJlZV9saXN0KTsKKwkJfQorCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPnNjc2lfbG9va3VwX2xvY2ssIGZsYWdzKTsKKwkJcmV0dXJuOworCX0KKworCS8qIHNjc2lpbyBxdWV1ZSAqLworCWkgPSBzbWlkIC0gMTsKKwlpb2MtPnNjc2lfbG9va3VwW2ldLmNiX2lkeCA9IDB4RkY7CisJaW9jLT5zY3NpX2xvb2t1cFtpXS5zY21kID0gTlVMTDsKKwlsaXN0X2FkZF90YWlsKCZpb2MtPnNjc2lfbG9va3VwW2ldLnRyYWNrZXJfbGlzdCwKIAkgICAgJmlvYy0+ZnJlZV9saXN0KTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPnNjc2lfbG9va3VwX2xvY2ssIGZsYWdzKTsKIApAQCAtMTM1MiwyMSArMTQ2MSwxOSBAQAogICogbXB0MnNhc19iYXNlX3B1dF9zbWlkX3Njc2lfaW8gLSBzZW5kIFNDU0lfSU8gcmVxdWVzdCB0byBmaXJtd2FyZQogICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CiAgKiBAc21pZDogc3lzdGVtIHJlcXVlc3QgbWVzc2FnZSBpbmRleAotICogQHZmX2lkOiB2aXJ0dWFsIGZ1bmN0aW9uIGlkCiAgKiBAaGFuZGxlOiBkZXZpY2UgaGFuZGxlCiAgKgogICogUmV0dXJuIG5vdGhpbmcuCiAgKi8KIHZvaWQKLW1wdDJzYXNfYmFzZV9wdXRfc21pZF9zY3NpX2lvKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IHNtaWQsIHU4IHZmX2lkLAotICAgIHUxNiBoYW5kbGUpCittcHQyc2FzX2Jhc2VfcHV0X3NtaWRfc2NzaV9pbyhzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBzbWlkLCB1MTYgaGFuZGxlKQogewogCU1waTJSZXF1ZXN0RGVzY3JpcHRvclVuaW9uX3QgZGVzY3JpcHRvcjsKIAl1NjQgKnJlcXVlc3QgPSAodTY0ICopJmRlc2NyaXB0b3I7CiAKIAogCWRlc2NyaXB0b3IuU0NTSUlPLlJlcXVlc3RGbGFncyA9IE1QSTJfUkVRX0RFU0NSSVBUX0ZMQUdTX1NDU0lfSU87Ci0JZGVzY3JpcHRvci5TQ1NJSU8uVkZfSUQgPSB2Zl9pZDsKKwlkZXNjcmlwdG9yLlNDU0lJTy5NU0l4SW5kZXggPSAwOyAvKiBUT0RPICovCiAJZGVzY3JpcHRvci5TQ1NJSU8uU01JRCA9IGNwdV90b19sZTE2KHNtaWQpOwogCWRlc2NyaXB0b3IuU0NTSUlPLkRldkhhbmRsZSA9IGNwdV90b19sZTE2KGhhbmRsZSk7CiAJZGVzY3JpcHRvci5TQ1NJSU8uTE1JRCA9IDA7CkBAIC0xMzc5LDIwICsxNDg2LDE4IEBACiAgKiBtcHQyc2FzX2Jhc2VfcHV0X3NtaWRfaGlfcHJpb3JpdHkgLSBzZW5kIFRhc2sgTWFuYWdtZW50IHJlcXVlc3QgdG8gZmlybXdhcmUKICAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAogICogQHNtaWQ6IHN5c3RlbSByZXF1ZXN0IG1lc3NhZ2UgaW5kZXgKLSAqIEB2Zl9pZDogdmlydHVhbCBmdW5jdGlvbiBpZAogICoKICAqIFJldHVybiBub3RoaW5nLgogICovCiB2b2lkCi1tcHQyc2FzX2Jhc2VfcHV0X3NtaWRfaGlfcHJpb3JpdHkoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgc21pZCwKLSAgICB1OCB2Zl9pZCkKK21wdDJzYXNfYmFzZV9wdXRfc21pZF9oaV9wcmlvcml0eShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBzbWlkKQogewogCU1waTJSZXF1ZXN0RGVzY3JpcHRvclVuaW9uX3QgZGVzY3JpcHRvcjsKIAl1NjQgKnJlcXVlc3QgPSAodTY0ICopJmRlc2NyaXB0b3I7CiAKIAlkZXNjcmlwdG9yLkhpZ2hQcmlvcml0eS5SZXF1ZXN0RmxhZ3MgPQogCSAgICBNUEkyX1JFUV9ERVNDUklQVF9GTEFHU19ISUdIX1BSSU9SSVRZOwotCWRlc2NyaXB0b3IuSGlnaFByaW9yaXR5LlZGX0lEID0gdmZfaWQ7CisJZGVzY3JpcHRvci5IaWdoUHJpb3JpdHkuTVNJeEluZGV4ID0gMDsgLyogVE9ETyAqLwogCWRlc2NyaXB0b3IuSGlnaFByaW9yaXR5LlNNSUQgPSBjcHVfdG9fbGUxNihzbWlkKTsKIAlkZXNjcmlwdG9yLkhpZ2hQcmlvcml0eS5MTUlEID0gMDsKIAlkZXNjcmlwdG9yLkhpZ2hQcmlvcml0eS5SZXNlcnZlZDEgPSAwOwpAQCAtMTQwNCwxOCArMTUwOSwxNyBAQAogICogbXB0MnNhc19iYXNlX3B1dF9zbWlkX2RlZmF1bHQgLSBEZWZhdWx0LCBwcmltYXJpbHkgdXNlZCBmb3IgY29uZmlnIHBhZ2VzCiAgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKICAqIEBzbWlkOiBzeXN0ZW0gcmVxdWVzdCBtZXNzYWdlIGluZGV4Ci0gKiBAdmZfaWQ6IHZpcnR1YWwgZnVuY3Rpb24gaWQKICAqCiAgKiBSZXR1cm4gbm90aGluZy4KICAqLwogdm9pZAotbXB0MnNhc19iYXNlX3B1dF9zbWlkX2RlZmF1bHQoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgc21pZCwgdTggdmZfaWQpCittcHQyc2FzX2Jhc2VfcHV0X3NtaWRfZGVmYXVsdChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBzbWlkKQogewogCU1waTJSZXF1ZXN0RGVzY3JpcHRvclVuaW9uX3QgZGVzY3JpcHRvcjsKIAl1NjQgKnJlcXVlc3QgPSAodTY0ICopJmRlc2NyaXB0b3I7CiAKIAlkZXNjcmlwdG9yLkRlZmF1bHQuUmVxdWVzdEZsYWdzID0gTVBJMl9SRVFfREVTQ1JJUFRfRkxBR1NfREVGQVVMVF9UWVBFOwotCWRlc2NyaXB0b3IuRGVmYXVsdC5WRl9JRCA9IHZmX2lkOworCWRlc2NyaXB0b3IuRGVmYXVsdC5NU0l4SW5kZXggPSAwOyAvKiBUT0RPICovCiAJZGVzY3JpcHRvci5EZWZhdWx0LlNNSUQgPSBjcHVfdG9fbGUxNihzbWlkKTsKIAlkZXNjcmlwdG9yLkRlZmF1bHQuTE1JRCA9IDA7CiAJZGVzY3JpcHRvci5EZWZhdWx0LkRlc2NyaXB0b3JUeXBlRGVwZW5kZW50ID0gMDsKQEAgLTE0MjcsMjEgKzE1MzEsMjAgQEAKICAqIG1wdDJzYXNfYmFzZV9wdXRfc21pZF90YXJnZXRfYXNzaXN0IC0gc2VuZCBUYXJnZXQgQXNzaXN0L1N0YXR1cyB0byBmaXJtd2FyZQogICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CiAgKiBAc21pZDogc3lzdGVtIHJlcXVlc3QgbWVzc2FnZSBpbmRleAotICogQHZmX2lkOiB2aXJ0dWFsIGZ1bmN0aW9uIGlkCiAgKiBAaW9faW5kZXg6IHZhbHVlIHVzZWQgdG8gdHJhY2sgdGhlIElPCiAgKgogICogUmV0dXJuIG5vdGhpbmcuCiAgKi8KIHZvaWQKIG1wdDJzYXNfYmFzZV9wdXRfc21pZF90YXJnZXRfYXNzaXN0KHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IHNtaWQsCi0gICAgdTggdmZfaWQsIHUxNiBpb19pbmRleCkKKyAgICB1MTYgaW9faW5kZXgpCiB7CiAJTXBpMlJlcXVlc3REZXNjcmlwdG9yVW5pb25fdCBkZXNjcmlwdG9yOwogCXU2NCAqcmVxdWVzdCA9ICh1NjQgKikmZGVzY3JpcHRvcjsKIAogCWRlc2NyaXB0b3IuU0NTSVRhcmdldC5SZXF1ZXN0RmxhZ3MgPQogCSAgICBNUEkyX1JFUV9ERVNDUklQVF9GTEFHU19TQ1NJX1RBUkdFVDsKLQlkZXNjcmlwdG9yLlNDU0lUYXJnZXQuVkZfSUQgPSB2Zl9pZDsKKwlkZXNjcmlwdG9yLlNDU0lUYXJnZXQuTVNJeEluZGV4ID0gMDsgLyogVE9ETyAqLwogCWRlc2NyaXB0b3IuU0NTSVRhcmdldC5TTUlEID0gY3B1X3RvX2xlMTYoc21pZCk7CiAJZGVzY3JpcHRvci5TQ1NJVGFyZ2V0LkxNSUQgPSAwOwogCWRlc2NyaXB0b3IuU0NTSVRhcmdldC5Jb0luZGV4ID0gY3B1X3RvX2xlMTYoaW9faW5kZXgpOwpAQCAtMTcxNyw2ICsxODIwLDggQEAKIAl9CiAKIAlrZnJlZShpb2MtPnNjc2lfbG9va3VwKTsKKwlrZnJlZShpb2MtPmhwcl9sb29rdXApOworCWtmcmVlKGlvYy0+aW50ZXJuYWxfbG9va3VwKTsKIH0KIAogCkBAIC0xNzM2LDcgKzE4NDEsNiBAQAogCXUxNiBudW1fb2ZfcmVwbHlfZnJhbWVzOwogCXUxNiBjaGFpbnNfbmVlZGVkX3Blcl9pbzsKIAl1MzIgc3osIHRvdGFsX3N6OwotCXUxNiBpOwogCXUzMiByZXRyeV9zejsKIAl1MTYgbWF4X3JlcXVlc3RfY3JlZGl0OwogCkBAIC0xNzY0LDcgKzE4NjgsMTAgQEAKIAkJICAgIE1QVDJTQVNfTUFYX1JFUVVFU1RfUVVFVUUpID8gTVBUMlNBU19NQVhfUkVRVUVTVF9RVUVVRSA6CiAJCSAgICBmYWN0cy0+UmVxdWVzdENyZWRpdDsKIAl9Ci0JaW9jLT5yZXF1ZXN0X2RlcHRoID0gbWF4X3JlcXVlc3RfY3JlZGl0OworCisJaW9jLT5oYmFfcXVldWVfZGVwdGggPSBtYXhfcmVxdWVzdF9jcmVkaXQ7CisJaW9jLT5oaV9wcmlvcml0eV9kZXB0aCA9IGZhY3RzLT5IaWdoUHJpb3JpdHlDcmVkaXQ7CisJaW9jLT5pbnRlcm5hbF9kZXB0aCA9IGlvYy0+aGlfcHJpb3JpdHlfZGVwdGggKyA1OwogCiAJLyogcmVxdWVzdCBmcmFtZSBzaXplICovCiAJaW9jLT5yZXF1ZXN0X3N6ID0gZmFjdHMtPklPQ1JlcXVlc3RGcmFtZVNpemUgKiA0OwpAQCAtMTgwMiw3ICsxOTA5LDcgQEAKIAlpb2MtPmNoYWluc19uZWVkZWRfcGVyX2lvID0gY2hhaW5zX25lZWRlZF9wZXJfaW87CiAKIAkvKiByZXBseSBmcmVlIHF1ZXVlIHNpemluZyAtIHRha2luZyBpbnRvIGFjY291bnQgZm9yIGV2ZW50cyAqLwotCW51bV9vZl9yZXBseV9mcmFtZXMgPSBpb2MtPnJlcXVlc3RfZGVwdGggKyAzMjsKKwludW1fb2ZfcmVwbHlfZnJhbWVzID0gaW9jLT5oYmFfcXVldWVfZGVwdGggKyAzMjsKIAogCS8qIG51bWJlciBvZiByZXBsaWVzIGZyYW1lcyBjYW4ndCBiZSBhIG11bHRpcGxlIG9mIDE2ICovCiAJLyogZGVjcmVhc2UgbnVtYmVyIG9mIHJlcGx5IGZyYW1lcyBieSAxICovCkBAIC0xODIzLDcgKzE5MzAsNyBAQAogCSAqIGZyYW1lcwogCSAqLwogCi0JcXVldWVfc2l6ZSA9IGlvYy0+cmVxdWVzdF9kZXB0aCArIG51bV9vZl9yZXBseV9mcmFtZXMgKyAxOworCXF1ZXVlX3NpemUgPSBpb2MtPmhiYV9xdWV1ZV9kZXB0aCArIG51bV9vZl9yZXBseV9mcmFtZXMgKyAxOwogCS8qIHJvdW5kIHVwIHRvIDE2IGJ5dGUgYm91bmRhcnkgKi8KIAlpZiAocXVldWVfc2l6ZSAlIDE2KQogCQlxdWV1ZV9zaXplICs9IDE2IC0gKHF1ZXVlX3NpemUgJSAxNik7CkBAIC0xODM3LDYwICsxOTQ0LDg1IEBACiAJCWlmIChxdWV1ZV9kaWZmICUgMTYpCiAJCQlxdWV1ZV9kaWZmICs9IDE2IC0gKHF1ZXVlX2RpZmYgJSAxNik7CiAKLQkJLyogYWRqdXN0IHJlcXVlc3RfZGVwdGgsIHJlcGx5X2ZyZWVfcXVldWVfZGVwdGgsCisJCS8qIGFkanVzdCBoYmFfcXVldWVfZGVwdGgsIHJlcGx5X2ZyZWVfcXVldWVfZGVwdGgsCiAJCSAqIGFuZCBxdWV1ZV9zaXplCiAJCSAqLwotCQlpb2MtPnJlcXVlc3RfZGVwdGggLT0gcXVldWVfZGlmZjsKKwkJaW9jLT5oYmFfcXVldWVfZGVwdGggLT0gcXVldWVfZGlmZjsKIAkJaW9jLT5yZXBseV9mcmVlX3F1ZXVlX2RlcHRoIC09IHF1ZXVlX2RpZmY7CiAJCXF1ZXVlX3NpemUgLT0gcXVldWVfZGlmZjsKIAl9CiAJaW9jLT5yZXBseV9wb3N0X3F1ZXVlX2RlcHRoID0gcXVldWVfc2l6ZTsKIAotCS8qIG1heCBzY3NpIGhvc3QgcXVldWUgZGVwdGggKi8KLQlpb2MtPnNob3N0LT5jYW5fcXVldWUgPSBpb2MtPnJlcXVlc3RfZGVwdGggLSBJTlRFUk5BTF9DTURTX0NPVU5UOwotCWRpbml0cHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgInNjc2kgaG9zdCBxdWV1ZTogZGVwdGgiCi0JICAgICIoJWQpXG4iLCBpb2MtPm5hbWUsIGlvYy0+c2hvc3QtPmNhbl9xdWV1ZSkpOwotCiAJZGluaXRwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAic2NhdHRlciBnYXRoZXI6ICIKIAkgICAgInNnZV9pbl9tYWluX21zZyglZCksIHNnZV9wZXJfY2hhaW4oJWQpLCBzZ2VfcGVyX2lvKCVkKSwgIgogCSAgICAiY2hhaW5zX3Blcl9pbyglZClcbiIsIGlvYy0+bmFtZSwgaW9jLT5tYXhfc2dlc19pbl9tYWluX21lc3NhZ2UsCiAJICAgIGlvYy0+bWF4X3NnZXNfaW5fY2hhaW5fbWVzc2FnZSwgaW9jLT5zaG9zdC0+c2dfdGFibGVzaXplLAogCSAgICBpb2MtPmNoYWluc19uZWVkZWRfcGVyX2lvKSk7CiAKKwlpb2MtPnNjc2lpb19kZXB0aCA9IGlvYy0+aGJhX3F1ZXVlX2RlcHRoIC0KKwkgICAgaW9jLT5oaV9wcmlvcml0eV9kZXB0aCAtIGlvYy0+aW50ZXJuYWxfZGVwdGg7CisKKwkvKiBzZXQgdGhlIHNjc2kgaG9zdCBjYW5fcXVldWUgZGVwdGgKKwkgKiB3aXRoIHNvbWUgaW50ZXJuYWwgY29tbWFuZHMgdGhhdCBjb3VsZCBiZSBvdXRzdGFuZGluZworCSAqLworCWlvYy0+c2hvc3QtPmNhbl9xdWV1ZSA9IGlvYy0+c2NzaWlvX2RlcHRoIC0gKDIpOworCWRpbml0cHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgInNjc2kgaG9zdDogIgorCSAgICAiY2FuX3F1ZXVlIGRlcHRoICglZClcbiIsIGlvYy0+bmFtZSwgaW9jLT5zaG9zdC0+Y2FuX3F1ZXVlKSk7CisKIAkvKiBjb250aWd1b3VzIHBvb2wgZm9yIHJlcXVlc3QgYW5kIGNoYWlucywgMTYgYnl0ZSBhbGlnbiwgb25lIGV4dHJhICIKIAkgKiAiZnJhbWUgZm9yIHNtaWQ9MAogCSAqLwotCWlvYy0+Y2hhaW5fZGVwdGggPSBpb2MtPmNoYWluc19uZWVkZWRfcGVyX2lvICogaW9jLT5yZXF1ZXN0X2RlcHRoOwotCXN6ID0gKChpb2MtPnJlcXVlc3RfZGVwdGggKyAxICsgaW9jLT5jaGFpbl9kZXB0aCkgKiBpb2MtPnJlcXVlc3Rfc3opOworCWlvYy0+Y2hhaW5fZGVwdGggPSBpb2MtPmNoYWluc19uZWVkZWRfcGVyX2lvICogaW9jLT5zY3NpaW9fZGVwdGg7CisJc3ogPSAoKGlvYy0+c2NzaWlvX2RlcHRoICsgMSArIGlvYy0+Y2hhaW5fZGVwdGgpICogaW9jLT5yZXF1ZXN0X3N6KTsKKworCS8qIGhpLXByaW9yaXR5IHF1ZXVlICovCisJc3ogKz0gKGlvYy0+aGlfcHJpb3JpdHlfZGVwdGggKiBpb2MtPnJlcXVlc3Rfc3opOworCisJLyogaW50ZXJuYWwgcXVldWUgKi8KKwlzeiArPSAoaW9jLT5pbnRlcm5hbF9kZXB0aCAqIGlvYy0+cmVxdWVzdF9zeik7CiAKIAlpb2MtPnJlcXVlc3RfZG1hX3N6ID0gc3o7CiAJaW9jLT5yZXF1ZXN0ID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoaW9jLT5wZGV2LCBzeiwgJmlvYy0+cmVxdWVzdF9kbWEpOwogCWlmICghaW9jLT5yZXF1ZXN0KSB7CiAJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgInJlcXVlc3QgcG9vbDogcGNpX2FsbG9jX2NvbnNpc3RlbnQgIgotCQkgICAgImZhaWxlZDogcmVxX2RlcHRoKCVkKSwgY2hhaW5zX3Blcl9pbyglZCksIGZyYW1lX3N6KCVkKSwgIgotCQkgICAgInRvdGFsKCVkIGtCKVxuIiwgaW9jLT5uYW1lLCBpb2MtPnJlcXVlc3RfZGVwdGgsCisJCSAgICAiZmFpbGVkOiBoYmFfZGVwdGgoJWQpLCBjaGFpbnNfcGVyX2lvKCVkKSwgZnJhbWVfc3ooJWQpLCAiCisJCSAgICAidG90YWwoJWQga0IpXG4iLCBpb2MtPm5hbWUsIGlvYy0+aGJhX3F1ZXVlX2RlcHRoLAogCQkgICAgaW9jLT5jaGFpbnNfbmVlZGVkX3Blcl9pbywgaW9jLT5yZXF1ZXN0X3N6LCBzei8xMDI0KTsKLQkJaWYgKGlvYy0+cmVxdWVzdF9kZXB0aCA8IE1QVDJTQVNfU0FTX1FVRVVFX0RFUFRIKQorCQlpZiAoaW9jLT5zY3NpaW9fZGVwdGggPCBNUFQyU0FTX1NBU19RVUVVRV9ERVBUSCkKIAkJCWdvdG8gb3V0OwogCQlyZXRyeV9zeiArPSA2NDsKLQkJaW9jLT5yZXF1ZXN0X2RlcHRoID0gbWF4X3JlcXVlc3RfY3JlZGl0IC0gcmV0cnlfc3o7CisJCWlvYy0+aGJhX3F1ZXVlX2RlcHRoID0gbWF4X3JlcXVlc3RfY3JlZGl0IC0gcmV0cnlfc3o7CiAJCWdvdG8gcmV0cnlfYWxsb2NhdGlvbjsKIAl9CiAKIAlpZiAocmV0cnlfc3opCiAJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgInJlcXVlc3QgcG9vbDogcGNpX2FsbG9jX2NvbnNpc3RlbnQgIgotCQkgICAgInN1Y2NlZWQ6IHJlcV9kZXB0aCglZCksIGNoYWluc19wZXJfaW8oJWQpLCBmcmFtZV9zeiglZCksICIKLQkJICAgICJ0b3RhbCglZCBrYilcbiIsIGlvYy0+bmFtZSwgaW9jLT5yZXF1ZXN0X2RlcHRoLAorCQkgICAgInN1Y2NlZWQ6IGhiYV9kZXB0aCglZCksIGNoYWluc19wZXJfaW8oJWQpLCBmcmFtZV9zeiglZCksICIKKwkJICAgICJ0b3RhbCglZCBrYilcbiIsIGlvYy0+bmFtZSwgaW9jLT5oYmFfcXVldWVfZGVwdGgsCiAJCSAgICBpb2MtPmNoYWluc19uZWVkZWRfcGVyX2lvLCBpb2MtPnJlcXVlc3Rfc3osIHN6LzEwMjQpOwogCi0JaW9jLT5jaGFpbiA9IGlvYy0+cmVxdWVzdCArICgoaW9jLT5yZXF1ZXN0X2RlcHRoICsgMSkgKgorCisJLyogaGktcHJpb3JpdHkgcXVldWUgKi8KKwlpb2MtPmhpX3ByaW9yaXR5ID0gaW9jLT5yZXF1ZXN0ICsgKChpb2MtPnNjc2lpb19kZXB0aCArIDEpICoKIAkgICAgaW9jLT5yZXF1ZXN0X3N6KTsKLQlpb2MtPmNoYWluX2RtYSA9IGlvYy0+cmVxdWVzdF9kbWEgKyAoKGlvYy0+cmVxdWVzdF9kZXB0aCArIDEpICoKKwlpb2MtPmhpX3ByaW9yaXR5X2RtYSA9IGlvYy0+cmVxdWVzdF9kbWEgKyAoKGlvYy0+c2NzaWlvX2RlcHRoICsgMSkgKgogCSAgICBpb2MtPnJlcXVlc3Rfc3opOworCisJLyogaW50ZXJuYWwgcXVldWUgKi8KKwlpb2MtPmludGVybmFsID0gaW9jLT5oaV9wcmlvcml0eSArIChpb2MtPmhpX3ByaW9yaXR5X2RlcHRoICoKKwkgICAgaW9jLT5yZXF1ZXN0X3N6KTsKKwlpb2MtPmludGVybmFsX2RtYSA9IGlvYy0+aGlfcHJpb3JpdHlfZG1hICsgKGlvYy0+aGlfcHJpb3JpdHlfZGVwdGggKgorCSAgICBpb2MtPnJlcXVlc3Rfc3opOworCisJaW9jLT5jaGFpbiA9IGlvYy0+aW50ZXJuYWwgKyAoaW9jLT5pbnRlcm5hbF9kZXB0aCAqCisJICAgIGlvYy0+cmVxdWVzdF9zeik7CisJaW9jLT5jaGFpbl9kbWEgPSBpb2MtPmludGVybmFsX2RtYSArIChpb2MtPmludGVybmFsX2RlcHRoICoKKwkgICAgaW9jLT5yZXF1ZXN0X3N6KTsKKwogCWRpbml0cHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgInJlcXVlc3QgcG9vbCgweCVwKTogIgogCSAgICAiZGVwdGgoJWQpLCBmcmFtZV9zaXplKCVkKSwgcG9vbF9zaXplKCVkIGtCKVxuIiwgaW9jLT5uYW1lLAotCSAgICBpb2MtPnJlcXVlc3QsIGlvYy0+cmVxdWVzdF9kZXB0aCwgaW9jLT5yZXF1ZXN0X3N6LAotCSAgICAoKGlvYy0+cmVxdWVzdF9kZXB0aCArIDEpICogaW9jLT5yZXF1ZXN0X3N6KS8xMDI0KSk7CisJICAgIGlvYy0+cmVxdWVzdCwgaW9jLT5oYmFfcXVldWVfZGVwdGgsIGlvYy0+cmVxdWVzdF9zeiwKKwkgICAgKGlvYy0+aGJhX3F1ZXVlX2RlcHRoICogaW9jLT5yZXF1ZXN0X3N6KS8xMDI0KSk7CiAJZGluaXRwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAiY2hhaW4gcG9vbCgweCVwKTogZGVwdGgiCiAJICAgICIoJWQpLCBmcmFtZV9zaXplKCVkKSwgcG9vbF9zaXplKCVkIGtCKVxuIiwgaW9jLT5uYW1lLCBpb2MtPmNoYWluLAogCSAgICBpb2MtPmNoYWluX2RlcHRoLCBpb2MtPnJlcXVlc3Rfc3osICgoaW9jLT5jaGFpbl9kZXB0aCAqCkBAIC0xODk5LDcgKzIwMzEsNyBAQAogCSAgICBpb2MtPm5hbWUsICh1bnNpZ25lZCBsb25nIGxvbmcpIGlvYy0+cmVxdWVzdF9kbWEpKTsKIAl0b3RhbF9zeiArPSBzejsKIAotCWlvYy0+c2NzaV9sb29rdXAgPSBrY2FsbG9jKGlvYy0+cmVxdWVzdF9kZXB0aCwKKwlpb2MtPnNjc2lfbG9va3VwID0ga2NhbGxvYyhpb2MtPnNjc2lpb19kZXB0aCwKIAkgICAgc2l6ZW9mKHN0cnVjdCByZXF1ZXN0X3RyYWNrZXIpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWlvYy0+c2NzaV9sb29rdXApIHsKIAkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAic2NzaV9sb29rdXA6IGtjYWxsb2MgZmFpbGVkXG4iLApAQCAtMTkwNywxMiArMjAzOSwzOCBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQkgLyogaW5pdGlhbGl6ZSBzb21lIGJpdHMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgaW9jLT5yZXF1ZXN0X2RlcHRoOyBpKyspCi0JCWlvYy0+c2NzaV9sb29rdXBbaV0uc21pZCA9IGkgKyAxOworCWRpbml0cHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgInNjc2lpbygweCVwKTogIgorCSAgICAiZGVwdGgoJWQpXG4iLCBpb2MtPm5hbWUsIGlvYy0+cmVxdWVzdCwKKwkgICAgaW9jLT5zY3NpaW9fZGVwdGgpKTsKKworCS8qIGluaXRpYWxpemUgaGktcHJpb3JpdHkgcXVldWUgc21pZCdzICovCisJaW9jLT5ocHJfbG9va3VwID0ga2NhbGxvYyhpb2MtPmhpX3ByaW9yaXR5X2RlcHRoLAorCSAgICBzaXplb2Yoc3RydWN0IHJlcXVlc3RfdHJhY2tlciksIEdGUF9LRVJORUwpOworCWlmICghaW9jLT5ocHJfbG9va3VwKSB7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgImhwcl9sb29rdXA6IGtjYWxsb2MgZmFpbGVkXG4iLAorCQkgICAgaW9jLT5uYW1lKTsKKwkJZ290byBvdXQ7CisJfQorCWlvYy0+aGlfcHJpb3JpdHlfc21pZCA9IGlvYy0+c2NzaWlvX2RlcHRoICsgMTsKKwlkaW5pdHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0lORk9fRk1UICJoaV9wcmlvcml0eSgweCVwKTogIgorCSAgICAiZGVwdGgoJWQpLCBzdGFydCBzbWlkKCVkKVxuIiwgaW9jLT5uYW1lLCBpb2MtPmhpX3ByaW9yaXR5LAorCSAgICBpb2MtPmhpX3ByaW9yaXR5X2RlcHRoLCBpb2MtPmhpX3ByaW9yaXR5X3NtaWQpKTsKKworCS8qIGluaXRpYWxpemUgaW50ZXJuYWwgcXVldWUgc21pZCdzICovCisJaW9jLT5pbnRlcm5hbF9sb29rdXAgPSBrY2FsbG9jKGlvYy0+aW50ZXJuYWxfZGVwdGgsCisJICAgIHNpemVvZihzdHJ1Y3QgcmVxdWVzdF90cmFja2VyKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFpb2MtPmludGVybmFsX2xvb2t1cCkgeworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICJpbnRlcm5hbF9sb29rdXA6IGtjYWxsb2MgZmFpbGVkXG4iLAorCQkgICAgaW9jLT5uYW1lKTsKKwkJZ290byBvdXQ7CisJfQorCWlvYy0+aW50ZXJuYWxfc21pZCA9IGlvYy0+aGlfcHJpb3JpdHlfc21pZCArIGlvYy0+aGlfcHJpb3JpdHlfZGVwdGg7CisJZGluaXRwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAiaW50ZXJuYWwoMHglcCk6ICIKKwkgICAgImRlcHRoKCVkKSwgc3RhcnQgc21pZCglZClcbiIsIGlvYy0+bmFtZSwgaW9jLT5pbnRlcm5hbCwKKwkgICAgIGlvYy0+aW50ZXJuYWxfZGVwdGgsIGlvYy0+aW50ZXJuYWxfc21pZCkpOwogCiAJLyogc2Vuc2UgYnVmZmVycywgNCBieXRlIGFsaWduICovCi0Jc3ogPSBpb2MtPnJlcXVlc3RfZGVwdGggKiBTQ1NJX1NFTlNFX0JVRkZFUlNJWkU7CisJc3ogPSBpb2MtPnNjc2lpb19kZXB0aCAqIFNDU0lfU0VOU0VfQlVGRkVSU0laRTsKIAlpb2MtPnNlbnNlX2RtYV9wb29sID0gcGNpX3Bvb2xfY3JlYXRlKCJzZW5zZSBwb29sIiwgaW9jLT5wZGV2LCBzeiwgNCwKIAkgICAgMCk7CiAJaWYgKCFpb2MtPnNlbnNlX2RtYV9wb29sKSB7CkBAIC0xOTI5LDcgKzIwODcsNyBAQAogCX0KIAlkaW5pdHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0lORk9fRk1UCiAJICAgICJzZW5zZSBwb29sKDB4JXApOiBkZXB0aCglZCksIGVsZW1lbnRfc2l6ZSglZCksIHBvb2xfc2l6ZSIKLQkgICAgIiglZCBrQilcbiIsIGlvYy0+bmFtZSwgaW9jLT5zZW5zZSwgaW9jLT5yZXF1ZXN0X2RlcHRoLAorCSAgICAiKCVkIGtCKVxuIiwgaW9jLT5uYW1lLCBpb2MtPnNlbnNlLCBpb2MtPnNjc2lpb19kZXB0aCwKIAkgICAgU0NTSV9TRU5TRV9CVUZGRVJTSVpFLCBzei8xMDI0KSk7CiAJZGluaXRwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAic2Vuc2VfZG1hKDB4JWxseClcbiIsCiAJICAgIGlvYy0+bmFtZSwgKHVuc2lnbmVkIGxvbmcgbG9uZylpb2MtPnNlbnNlX2RtYSkpOwpAQCAtMjMwNCw3ICsyNDYyLDcgQEAKIAkgICAgKChyZXF1ZXN0X2J5dGVzLzQpPDxNUEkyX0RPT1JCRUxMX0FERF9EV09SRFNfU0hJRlQpKSwKIAkgICAgJmlvYy0+Y2hpcC0+RG9vcmJlbGwpOwogCi0JaWYgKChfYmFzZV93YWl0X2Zvcl9kb29yYmVsbF9pbnQoaW9jLCA1LCBzbGVlcF9mbGFnKSkpIHsKKwlpZiAoKF9iYXNlX3dhaXRfZm9yX2Rvb3JiZWxsX2ludChpb2MsIDUsIE5PX1NMRUVQKSkpIHsKIAkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiZG9vcmJlbGwgaGFuZHNoYWtlICIKIAkJICAgImludCBmYWlsZWQgKGxpbmU9JWQpXG4iLCBpb2MtPm5hbWUsIF9fTElORV9fKTsKIAkJcmV0dXJuIC1FRkFVTFQ7CkBAIC0yNDU0LDcgKzI2MTIsOCBAQAogCWlmIChtcGlfcmVxdWVzdC0+T3BlcmF0aW9uID09IE1QSTJfU0FTX09QX1BIWV9IQVJEX1JFU0VUIHx8CiAJICAgIG1waV9yZXF1ZXN0LT5PcGVyYXRpb24gPT0gTVBJMl9TQVNfT1BfUEhZX0xJTktfUkVTRVQpCiAJCWlvYy0+aW9jX2xpbmtfcmVzZXRfaW5fcHJvZ3Jlc3MgPSAxOwotCW1wdDJzYXNfYmFzZV9wdXRfc21pZF9kZWZhdWx0KGlvYywgc21pZCwgbXBpX3JlcXVlc3QtPlZGX0lEKTsKKwltcHQyc2FzX2Jhc2VfcHV0X3NtaWRfZGVmYXVsdChpb2MsIHNtaWQpOworCWluaXRfY29tcGxldGlvbigmaW9jLT5iYXNlX2NtZHMuZG9uZSk7CiAJdGltZWxlZnQgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJmlvYy0+YmFzZV9jbWRzLmRvbmUsCiAJICAgIG1zZWNzX3RvX2ppZmZpZXMoMTAwMDApKTsKIAlpZiAoKG1waV9yZXF1ZXN0LT5PcGVyYXRpb24gPT0gTVBJMl9TQVNfT1BfUEhZX0hBUkRfUkVTRVQgfHwKQEAgLTI1NTUsNyArMjcxNCw4IEBACiAJcmVxdWVzdCA9IG1wdDJzYXNfYmFzZV9nZXRfbXNnX2ZyYW1lKGlvYywgc21pZCk7CiAJaW9jLT5iYXNlX2NtZHMuc21pZCA9IHNtaWQ7CiAJbWVtY3B5KHJlcXVlc3QsIG1waV9yZXF1ZXN0LCBzaXplb2YoTXBpMlNlcFJlcGx5X3QpKTsKLQltcHQyc2FzX2Jhc2VfcHV0X3NtaWRfZGVmYXVsdChpb2MsIHNtaWQsIG1waV9yZXF1ZXN0LT5WRl9JRCk7CisJbXB0MnNhc19iYXNlX3B1dF9zbWlkX2RlZmF1bHQoaW9jLCBzbWlkKTsKKwlpbml0X2NvbXBsZXRpb24oJmlvYy0+YmFzZV9jbWRzLmRvbmUpOwogCXRpbWVsZWZ0ID0gd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZpb2MtPmJhc2VfY21kcy5kb25lLAogCSAgICBtc2Vjc190b19qaWZmaWVzKDEwMDAwKSk7CiAJaWYgKCEoaW9jLT5iYXNlX2NtZHMuc3RhdHVzICYgTVBUMl9DTURfQ09NUExFVEUpKSB7CkBAIC0yNzAxLDEzICsyODYxLDEyIEBACiAvKioKICAqIF9iYXNlX3NlbmRfaW9jX2luaXQgLSBzZW5kIGlvY19pbml0IHRvIGZpcm13YXJlCiAgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKLSAqIEBWRl9JRDogdmlydHVhbCBmdW5jdGlvbiBpZAogICogQHNsZWVwX2ZsYWc6IENBTl9TTEVFUCBvciBOT19TTEVFUAogICoKICAqIFJldHVybnMgMCBmb3Igc3VjY2Vzcywgbm9uLXplcm8gZm9yIGZhaWx1cmUuCiAgKi8KIHN0YXRpYyBpbnQKLV9iYXNlX3NlbmRfaW9jX2luaXQoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1OCBWRl9JRCwgaW50IHNsZWVwX2ZsYWcpCitfYmFzZV9zZW5kX2lvY19pbml0KHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgaW50IHNsZWVwX2ZsYWcpCiB7CiAJTXBpMklPQ0luaXRSZXF1ZXN0X3QgbXBpX3JlcXVlc3Q7CiAJTXBpMklPQ0luaXRSZXBseV90IG1waV9yZXBseTsKQEAgLTI3MTksNyArMjg3OCw4IEBACiAJbWVtc2V0KCZtcGlfcmVxdWVzdCwgMCwgc2l6ZW9mKE1waTJJT0NJbml0UmVxdWVzdF90KSk7CiAJbXBpX3JlcXVlc3QuRnVuY3Rpb24gPSBNUEkyX0ZVTkNUSU9OX0lPQ19JTklUOwogCW1waV9yZXF1ZXN0Lldob0luaXQgPSBNUEkyX1dIT0lOSVRfSE9TVF9EUklWRVI7Ci0JbXBpX3JlcXVlc3QuVkZfSUQgPSBWRl9JRDsKKwltcGlfcmVxdWVzdC5WRl9JRCA9IDA7IC8qIFRPRE8gKi8KKwltcGlfcmVxdWVzdC5WUF9JRCA9IDA7CiAJbXBpX3JlcXVlc3QuTXNnVmVyc2lvbiA9IGNwdV90b19sZTE2KE1QSTJfVkVSU0lPTik7CiAJbXBpX3JlcXVlc3QuSGVhZGVyVmVyc2lvbiA9IGNwdV90b19sZTE2KE1QSTJfSEVBREVSX1ZFUlNJT04pOwogCkBAIC0yNzk1LDEzICsyOTU1LDEyIEBACiAvKioKICAqIF9iYXNlX3NlbmRfcG9ydF9lbmFibGUgLSBzZW5kIHBvcnRfZW5hYmxlKGRpc2NvdmVyeSBzdHVmZikgdG8gZmlybXdhcmUKICAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAotICogQFZGX0lEOiB2aXJ0dWFsIGZ1bmN0aW9uIGlkCiAgKiBAc2xlZXBfZmxhZzogQ0FOX1NMRUVQIG9yIE5PX1NMRUVQCiAgKgogICogUmV0dXJucyAwIGZvciBzdWNjZXNzLCBub24temVybyBmb3IgZmFpbHVyZS4KICAqLwogc3RhdGljIGludAotX2Jhc2Vfc2VuZF9wb3J0X2VuYWJsZShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHU4IFZGX0lELCBpbnQgc2xlZXBfZmxhZykKK19iYXNlX3NlbmRfcG9ydF9lbmFibGUoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCBpbnQgc2xlZXBfZmxhZykKIHsKIAlNcGkyUG9ydEVuYWJsZVJlcXVlc3RfdCAqbXBpX3JlcXVlc3Q7CiAJdTMyIGlvY19zdGF0ZTsKQEAgLTI4MjksOSArMjk4OCwxMSBAQAogCWlvYy0+YmFzZV9jbWRzLnNtaWQgPSBzbWlkOwogCW1lbXNldChtcGlfcmVxdWVzdCwgMCwgc2l6ZW9mKE1waTJQb3J0RW5hYmxlUmVxdWVzdF90KSk7CiAJbXBpX3JlcXVlc3QtPkZ1bmN0aW9uID0gTVBJMl9GVU5DVElPTl9QT1JUX0VOQUJMRTsKLQltcGlfcmVxdWVzdC0+VkZfSUQgPSBWRl9JRDsKKwltcGlfcmVxdWVzdC0+VkZfSUQgPSAwOyAvKiBUT0RPICovCisJbXBpX3JlcXVlc3QtPlZQX0lEID0gMDsKIAotCW1wdDJzYXNfYmFzZV9wdXRfc21pZF9kZWZhdWx0KGlvYywgc21pZCwgVkZfSUQpOworCW1wdDJzYXNfYmFzZV9wdXRfc21pZF9kZWZhdWx0KGlvYywgc21pZCk7CisJaW5pdF9jb21wbGV0aW9uKCZpb2MtPmJhc2VfY21kcy5kb25lKTsKIAl0aW1lbGVmdCA9IHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmaW9jLT5iYXNlX2NtZHMuZG9uZSwKIAkgICAgMzAwKkhaKTsKIAlpZiAoIShpb2MtPmJhc2VfY21kcy5zdGF0dXMgJiBNUFQyX0NNRF9DT01QTEVURSkpIHsKQEAgLTI4OTIsMTMgKzMwNTMsMTIgQEAKIC8qKgogICogX2Jhc2VfZXZlbnRfbm90aWZpY2F0aW9uIC0gc2VuZCBldmVudCBub3RpZmljYXRpb24KICAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAotICogQFZGX0lEOiB2aXJ0dWFsIGZ1bmN0aW9uIGlkCiAgKiBAc2xlZXBfZmxhZzogQ0FOX1NMRUVQIG9yIE5PX1NMRUVQCiAgKgogICogUmV0dXJucyAwIGZvciBzdWNjZXNzLCBub24temVybyBmb3IgZmFpbHVyZS4KICAqLwogc3RhdGljIGludAotX2Jhc2VfZXZlbnRfbm90aWZpY2F0aW9uKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTggVkZfSUQsIGludCBzbGVlcF9mbGFnKQorX2Jhc2VfZXZlbnRfbm90aWZpY2F0aW9uKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgaW50IHNsZWVwX2ZsYWcpCiB7CiAJTXBpMkV2ZW50Tm90aWZpY2F0aW9uUmVxdWVzdF90ICptcGlfcmVxdWVzdDsKIAl1bnNpZ25lZCBsb25nIHRpbWVsZWZ0OwpAQCAtMjkyNiwxMSArMzA4NiwxMyBAQAogCWlvYy0+YmFzZV9jbWRzLnNtaWQgPSBzbWlkOwogCW1lbXNldChtcGlfcmVxdWVzdCwgMCwgc2l6ZW9mKE1waTJFdmVudE5vdGlmaWNhdGlvblJlcXVlc3RfdCkpOwogCW1waV9yZXF1ZXN0LT5GdW5jdGlvbiA9IE1QSTJfRlVOQ1RJT05fRVZFTlRfTk9USUZJQ0FUSU9OOwotCW1waV9yZXF1ZXN0LT5WRl9JRCA9IFZGX0lEOworCW1waV9yZXF1ZXN0LT5WRl9JRCA9IDA7IC8qIFRPRE8gKi8KKwltcGlfcmVxdWVzdC0+VlBfSUQgPSAwOwogCWZvciAoaSA9IDA7IGkgPCBNUEkyX0VWRU5UX05PVElGWV9FVkVOVE1BU0tfV09SRFM7IGkrKykKIAkJbXBpX3JlcXVlc3QtPkV2ZW50TWFza3NbaV0gPQogCQkgICAgbGUzMl90b19jcHUoaW9jLT5ldmVudF9tYXNrc1tpXSk7Ci0JbXB0MnNhc19iYXNlX3B1dF9zbWlkX2RlZmF1bHQoaW9jLCBzbWlkLCBWRl9JRCk7CisJbXB0MnNhc19iYXNlX3B1dF9zbWlkX2RlZmF1bHQoaW9jLCBzbWlkKTsKKwlpbml0X2NvbXBsZXRpb24oJmlvYy0+YmFzZV9jbWRzLmRvbmUpOwogCXRpbWVsZWZ0ID0gd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZpb2MtPmJhc2VfY21kcy5kb25lLCAzMCpIWik7CiAJaWYgKCEoaW9jLT5iYXNlX2NtZHMuc3RhdHVzICYgTVBUMl9DTURfQ09NUExFVEUpKSB7CiAJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgIiVzOiB0aW1lb3V0XG4iLApAQCAtMjk4MSw3ICszMTQzLDcgQEAKIAkJcmV0dXJuOwogCiAJbXV0ZXhfbG9jaygmaW9jLT5iYXNlX2NtZHMubXV0ZXgpOwotCV9iYXNlX2V2ZW50X25vdGlmaWNhdGlvbihpb2MsIDAsIENBTl9TTEVFUCk7CisJX2Jhc2VfZXZlbnRfbm90aWZpY2F0aW9uKGlvYywgQ0FOX1NMRUVQKTsKIAltdXRleF91bmxvY2soJmlvYy0+YmFzZV9jbWRzLm11dGV4KTsKIH0KIApAQCAtMzAwNiw3ICszMTY4LDYgQEAKIAogCWRyc3ByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0RFQlVHX0ZNVCAiY2xlYXIgaW50ZXJydXB0c1xuIiwKIAkgICAgaW9jLT5uYW1lKSk7Ci0Jd3JpdGVsKDAsICZpb2MtPmNoaXAtPkhvc3RJbnRlcnJ1cHRTdGF0dXMpOwogCiAJY291bnQgPSAwOwogCWRvIHsKQEAgLTMxNjAsMzAgKzMzMjEsNjAgQEAKIC8qKgogICogX2Jhc2VfbWFrZV9pb2Nfb3BlcmF0aW9uYWwgLSBwdXQgY29udHJvbGxlciBpbiBPUEVSQVRJT05BTCBzdGF0ZQogICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0Ci0gKiBAVkZfSUQ6IHZpcnR1YWwgZnVuY3Rpb24gaWQKICAqIEBzbGVlcF9mbGFnOiBDQU5fU0xFRVAgb3IgTk9fU0xFRVAKICAqCiAgKiBSZXR1cm5zIDAgZm9yIHN1Y2Nlc3MsIG5vbi16ZXJvIGZvciBmYWlsdXJlLgogICovCiBzdGF0aWMgaW50Ci1fYmFzZV9tYWtlX2lvY19vcGVyYXRpb25hbChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHU4IFZGX0lELAotICAgIGludCBzbGVlcF9mbGFnKQorX2Jhc2VfbWFrZV9pb2Nfb3BlcmF0aW9uYWwoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCBpbnQgc2xlZXBfZmxhZykKIHsKIAlpbnQgciwgaTsKIAl1bnNpZ25lZCBsb25nCWZsYWdzOwogCXUzMiByZXBseV9hZGRyZXNzOworCXUxNiBzbWlkOworCXN0cnVjdCBfdHJfbGlzdCAqZGVsYXllZF90ciwgKmRlbGF5ZWRfdHJfbmV4dDsKIAogCWRpbml0cHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfREVCVUdfRk1UICIlc1xuIiwgaW9jLT5uYW1lLAogCSAgICBfX2Z1bmNfXykpOwogCisJLyogY2xlYW4gdGhlIGRlbGF5ZWQgdGFyZ2V0IHJlc2V0IGxpc3QgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZGVsYXllZF90ciwgZGVsYXllZF90cl9uZXh0LAorCSAgICAmaW9jLT5kZWxheWVkX3RyX2xpc3QsIGxpc3QpIHsKKwkJbGlzdF9kZWwoJmRlbGF5ZWRfdHItPmxpc3QpOworCQlrZnJlZShkZWxheWVkX3RyKTsKKwl9CisKIAkvKiBpbml0aWFsaXplIHRoZSBzY3NpIGxvb2t1cCBmcmVlIGxpc3QgKi8KIAlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5zY3NpX2xvb2t1cF9sb2NrLCBmbGFncyk7CiAJSU5JVF9MSVNUX0hFQUQoJmlvYy0+ZnJlZV9saXN0KTsKLQlmb3IgKGkgPSAwOyBpIDwgaW9jLT5yZXF1ZXN0X2RlcHRoOyBpKyspIHsKKwlzbWlkID0gMTsKKwlmb3IgKGkgPSAwOyBpIDwgaW9jLT5zY3NpaW9fZGVwdGg7IGkrKywgc21pZCsrKSB7CiAJCWlvYy0+c2NzaV9sb29rdXBbaV0uY2JfaWR4ID0gMHhGRjsKKwkJaW9jLT5zY3NpX2xvb2t1cFtpXS5zbWlkID0gc21pZDsKKwkJaW9jLT5zY3NpX2xvb2t1cFtpXS5zY21kID0gTlVMTDsKIAkJbGlzdF9hZGRfdGFpbCgmaW9jLT5zY3NpX2xvb2t1cFtpXS50cmFja2VyX2xpc3QsCiAJCSAgICAmaW9jLT5mcmVlX2xpc3QpOwogCX0KKworCS8qIGhpLXByaW9yaXR5IHF1ZXVlICovCisJSU5JVF9MSVNUX0hFQUQoJmlvYy0+aHByX2ZyZWVfbGlzdCk7CisJc21pZCA9IGlvYy0+aGlfcHJpb3JpdHlfc21pZDsKKwlmb3IgKGkgPSAwOyBpIDwgaW9jLT5oaV9wcmlvcml0eV9kZXB0aDsgaSsrLCBzbWlkKyspIHsKKwkJaW9jLT5ocHJfbG9va3VwW2ldLmNiX2lkeCA9IDB4RkY7CisJCWlvYy0+aHByX2xvb2t1cFtpXS5zbWlkID0gc21pZDsKKwkJbGlzdF9hZGRfdGFpbCgmaW9jLT5ocHJfbG9va3VwW2ldLnRyYWNrZXJfbGlzdCwKKwkJICAgICZpb2MtPmhwcl9mcmVlX2xpc3QpOworCX0KKworCS8qIGludGVybmFsIHF1ZXVlICovCisJSU5JVF9MSVNUX0hFQUQoJmlvYy0+aW50ZXJuYWxfZnJlZV9saXN0KTsKKwlzbWlkID0gaW9jLT5pbnRlcm5hbF9zbWlkOworCWZvciAoaSA9IDA7IGkgPCBpb2MtPmludGVybmFsX2RlcHRoOyBpKyssIHNtaWQrKykgeworCQlpb2MtPmludGVybmFsX2xvb2t1cFtpXS5jYl9pZHggPSAweEZGOworCQlpb2MtPmludGVybmFsX2xvb2t1cFtpXS5zbWlkID0gc21pZDsKKwkJbGlzdF9hZGRfdGFpbCgmaW9jLT5pbnRlcm5hbF9sb29rdXBbaV0udHJhY2tlcl9saXN0LAorCQkgICAgJmlvYy0+aW50ZXJuYWxfZnJlZV9saXN0KTsKKwl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5zY3NpX2xvb2t1cF9sb2NrLCBmbGFncyk7CiAKIAkvKiBpbml0aWFsaXplIFJlcGx5IEZyZWUgUXVldWUgKi8KQEAgLTMxOTYsNyArMzM4Nyw3IEBACiAJZm9yIChpID0gMDsgaSA8IGlvYy0+cmVwbHlfcG9zdF9xdWV1ZV9kZXB0aDsgaSsrKQogCQlpb2MtPnJlcGx5X3Bvc3RfZnJlZVtpXS5Xb3JkcyA9IFVMTE9OR19NQVg7CiAKLQlyID0gX2Jhc2Vfc2VuZF9pb2NfaW5pdChpb2MsIFZGX0lELCBzbGVlcF9mbGFnKTsKKwlyID0gX2Jhc2Vfc2VuZF9pb2NfaW5pdChpb2MsIHNsZWVwX2ZsYWcpOwogCWlmIChyKQogCQlyZXR1cm4gcjsKIApAQCAtMzIwNywxNCArMzM5OCwxNCBAQAogCXdyaXRlbCgwLCAmaW9jLT5jaGlwLT5SZXBseVBvc3RIb3N0SW5kZXgpOwogCiAJX2Jhc2VfdW5tYXNrX2ludGVycnVwdHMoaW9jKTsKLQlyID0gX2Jhc2VfZXZlbnRfbm90aWZpY2F0aW9uKGlvYywgVkZfSUQsIHNsZWVwX2ZsYWcpOworCXIgPSBfYmFzZV9ldmVudF9ub3RpZmljYXRpb24oaW9jLCBzbGVlcF9mbGFnKTsKIAlpZiAocikKIAkJcmV0dXJuIHI7CiAKIAlpZiAoc2xlZXBfZmxhZyA9PSBDQU5fU0xFRVApCiAJCV9iYXNlX3N0YXRpY19jb25maWdfcGFnZXMoaW9jKTsKIAotCXIgPSBfYmFzZV9zZW5kX3BvcnRfZW5hYmxlKGlvYywgVkZfSUQsIHNsZWVwX2ZsYWcpOworCXIgPSBfYmFzZV9zZW5kX3BvcnRfZW5hYmxlKGlvYywgc2xlZXBfZmxhZyk7CiAJaWYgKHIpCiAJCXJldHVybiByOwogCkBAIC0zMjc4LDYgKzM0NjksMTcgQEAKIAlpZiAocikKIAkJZ290byBvdXRfZnJlZV9yZXNvdXJjZXM7CiAKKwlpb2MtPnBmYWN0cyA9IGtjYWxsb2MoaW9jLT5mYWN0cy5OdW1iZXJPZlBvcnRzLAorCSAgICBzaXplb2YoTXBpMlBvcnRGYWN0c1JlcGx5X3QpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWlvYy0+cGZhY3RzKQorCQlnb3RvIG91dF9mcmVlX3Jlc291cmNlczsKKworCWZvciAoaSA9IDAgOyBpIDwgaW9jLT5mYWN0cy5OdW1iZXJPZlBvcnRzOyBpKyspIHsKKwkJciA9IF9iYXNlX2dldF9wb3J0X2ZhY3RzKGlvYywgaSwgQ0FOX1NMRUVQKTsKKwkJaWYgKHIpCisJCQlnb3RvIG91dF9mcmVlX3Jlc291cmNlczsKKwl9CisKIAlyID0gX2Jhc2VfYWxsb2NhdGVfbWVtb3J5X3Bvb2xzKGlvYywgQ0FOX1NMRUVQKTsKIAlpZiAocikKIAkJZ290byBvdXRfZnJlZV9yZXNvdXJjZXM7CkBAIC0zMjg2LDcgKzM0ODgsNiBAQAogCiAJLyogYmFzZSBpbnRlcm5hbCBjb21tYW5kIGJpdHMgKi8KIAltdXRleF9pbml0KCZpb2MtPmJhc2VfY21kcy5tdXRleCk7Ci0JaW5pdF9jb21wbGV0aW9uKCZpb2MtPmJhc2VfY21kcy5kb25lKTsKIAlpb2MtPmJhc2VfY21kcy5yZXBseSA9IGt6YWxsb2MoaW9jLT5yZXBseV9zeiwgR0ZQX0tFUk5FTCk7CiAJaW9jLT5iYXNlX2NtZHMuc3RhdHVzID0gTVBUMl9DTURfTk9UX1VTRUQ7CiAKQEAgLTMyOTQsNyArMzQ5NSw2IEBACiAJaW9jLT50cmFuc3BvcnRfY21kcy5yZXBseSA9IGt6YWxsb2MoaW9jLT5yZXBseV9zeiwgR0ZQX0tFUk5FTCk7CiAJaW9jLT50cmFuc3BvcnRfY21kcy5zdGF0dXMgPSBNUFQyX0NNRF9OT1RfVVNFRDsKIAltdXRleF9pbml0KCZpb2MtPnRyYW5zcG9ydF9jbWRzLm11dGV4KTsKLQlpbml0X2NvbXBsZXRpb24oJmlvYy0+dHJhbnNwb3J0X2NtZHMuZG9uZSk7CiAKIAkvKiB0YXNrIG1hbmFnZW1lbnQgaW50ZXJuYWwgY29tbWFuZCBiaXRzICovCiAJaW9jLT50bV9jbWRzLnJlcGx5ID0ga3phbGxvYyhpb2MtPnJlcGx5X3N6LCBHRlBfS0VSTkVMKTsKQEAgLTMzMTAsNyArMzUxMCw2IEBACiAJaW9jLT5jdGxfY21kcy5yZXBseSA9IGt6YWxsb2MoaW9jLT5yZXBseV9zeiwgR0ZQX0tFUk5FTCk7CiAJaW9jLT5jdGxfY21kcy5zdGF0dXMgPSBNUFQyX0NNRF9OT1RfVVNFRDsKIAltdXRleF9pbml0KCZpb2MtPmN0bF9jbWRzLm11dGV4KTsKLQlpbml0X2NvbXBsZXRpb24oJmlvYy0+Y3RsX2NtZHMuZG9uZSk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgTVBJMl9FVkVOVF9OT1RJRllfRVZFTlRNQVNLX1dPUkRTOyBpKyspCiAJCWlvYy0+ZXZlbnRfbWFza3NbaV0gPSAtMTsKQEAgLTMzMjcsMTggKzM1MjYsNyBAQAogCV9iYXNlX3VubWFza19ldmVudHMoaW9jLCBNUEkyX0VWRU5UX0lSX09QRVJBVElPTl9TVEFUVVMpOwogCV9iYXNlX3VubWFza19ldmVudHMoaW9jLCBNUEkyX0VWRU5UX1RBU0tfU0VUX0ZVTEwpOwogCV9iYXNlX3VubWFza19ldmVudHMoaW9jLCBNUEkyX0VWRU5UX0xPR19FTlRSWV9BRERFRCk7Ci0KLQlpb2MtPnBmYWN0cyA9IGtjYWxsb2MoaW9jLT5mYWN0cy5OdW1iZXJPZlBvcnRzLAotCSAgICBzaXplb2YoTXBpMlBvcnRGYWN0c1JlcGx5X3QpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWlvYy0+cGZhY3RzKQotCQlnb3RvIG91dF9mcmVlX3Jlc291cmNlczsKLQotCWZvciAoaSA9IDAgOyBpIDwgaW9jLT5mYWN0cy5OdW1iZXJPZlBvcnRzOyBpKyspIHsKLQkJciA9IF9iYXNlX2dldF9wb3J0X2ZhY3RzKGlvYywgaSwgQ0FOX1NMRUVQKTsKLQkJaWYgKHIpCi0JCQlnb3RvIG91dF9mcmVlX3Jlc291cmNlczsKLQl9Ci0JciA9IF9iYXNlX21ha2VfaW9jX29wZXJhdGlvbmFsKGlvYywgMCwgQ0FOX1NMRUVQKTsKKwlyID0gX2Jhc2VfbWFrZV9pb2Nfb3BlcmF0aW9uYWwoaW9jLCBDQU5fU0xFRVApOwogCWlmIChyKQogCQlnb3RvIG91dF9mcmVlX3Jlc291cmNlczsKIApAQCAtMzQ2Niw3ICszNjU0LDcgQEAKIAogCS8qIHBlbmRpbmcgY29tbWFuZCBjb3VudCAqLwogCXNwaW5fbG9ja19pcnFzYXZlKCZpb2MtPnNjc2lfbG9va3VwX2xvY2ssIGZsYWdzKTsKLQlmb3IgKGkgPSAwOyBpIDwgaW9jLT5yZXF1ZXN0X2RlcHRoOyBpKyspCisJZm9yIChpID0gMDsgaSA8IGlvYy0+c2NzaWlvX2RlcHRoOyBpKyspCiAJCWlmIChpb2MtPnNjc2lfbG9va3VwW2ldLmNiX2lkeCAhPSAweEZGKQogCQkJaW9jLT5wZW5kaW5nX2lvX2NvdW50Kys7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5zY3NpX2xvb2t1cF9sb2NrLCBmbGFncyk7CkBAIC0zNDkwLDcgKzM2NzgsNyBAQAogbXB0MnNhc19iYXNlX2hhcmRfcmVzZXRfaGFuZGxlcihzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIGludCBzbGVlcF9mbGFnLAogICAgIGVudW0gcmVzZXRfdHlwZSB0eXBlKQogewotCWludCByLCBpOworCWludCByOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlkdG1wcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19ERUJVR19GTVQgIiVzOiBlbnRlclxuIiwgaW9jLT5uYW1lLApAQCAtMzUxMyw5ICszNzAxLDcgQEAKIAlpZiAocikKIAkJZ290byBvdXQ7CiAJX2Jhc2VfcmVzZXRfaGFuZGxlcihpb2MsIE1QVDJfSU9DX0FGVEVSX1JFU0VUKTsKLQlmb3IgKGkgPSAwIDsgaSA8IGlvYy0+ZmFjdHMuTnVtYmVyT2ZQb3J0czsgaSsrKQotCQlyID0gX2Jhc2VfbWFrZV9pb2Nfb3BlcmF0aW9uYWwoaW9jLCBpb2MtPnBmYWN0c1tpXS5WRl9JRCwKLQkJICAgIHNsZWVwX2ZsYWcpOworCXIgPSBfYmFzZV9tYWtlX2lvY19vcGVyYXRpb25hbChpb2MsIHNsZWVwX2ZsYWcpOwogCWlmICghcikKIAkJX2Jhc2VfcmVzZXRfaGFuZGxlcihpb2MsIE1QVDJfSU9DX0RPTkVfUkVTRVQpOwogIG91dDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfYmFzZS5oIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19iYXNlLmgKaW5kZXggMmZhYWIxZS4uMGNmNmJjMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19iYXNlLmgKKysrIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19iYXNlLmgKQEAgLTMsNyArMyw3IEBACiAgKiBmb3IgYWNjZXNzIHRvIE1QVCAoTWVzc2FnZSBQYXNzaW5nIFRlY2hub2xvZ3kpIGZpcm13YXJlLgogICoKICAqIFRoaXMgY29kZSBpcyBiYXNlZCBvbiBkcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyX2Jhc2UuaAotICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDggIExTSSBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDkgIExTSSBDb3Jwb3JhdGlvbgogICogIChtYWlsdG86REwtTVBURnVzaW9uTGludXhAbHNpLmNvbSkKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC02OSwxMCArNjksMTAgQEAKICNkZWZpbmUgTVBUMlNBU19EUklWRVJfTkFNRQkJIm1wdDJzYXMiCiAjZGVmaW5lIE1QVDJTQVNfQVVUSE9SCSJMU0kgQ29ycG9yYXRpb24gPERMLU1QVEZ1c2lvbkxpbnV4QGxzaS5jb20+IgogI2RlZmluZSBNUFQyU0FTX0RFU0NSSVBUSU9OCSJMU0kgTVBUIEZ1c2lvbiBTQVMgMi4wIERldmljZSBEcml2ZXIiCi0jZGVmaW5lIE1QVDJTQVNfRFJJVkVSX1ZFUlNJT04JCSIwMS4xMDAuMDYuMDAiCi0jZGVmaW5lIE1QVDJTQVNfTUFKT1JfVkVSU0lPTgkJMDEKKyNkZWZpbmUgTVBUMlNBU19EUklWRVJfVkVSU0lPTgkJIjAyLjEwMC4wMy4wMCIKKyNkZWZpbmUgTVBUMlNBU19NQUpPUl9WRVJTSU9OCQkwMgogI2RlZmluZSBNUFQyU0FTX01JTk9SX1ZFUlNJT04JCTEwMAotI2RlZmluZSBNUFQyU0FTX0JVSUxEX1ZFUlNJT04JCTA2CisjZGVmaW5lIE1QVDJTQVNfQlVJTERfVkVSU0lPTgkJMDMKICNkZWZpbmUgTVBUMlNBU19SRUxFQVNFX1ZFUlNJT04JCTAwCiAKIC8qCkBAIC0yNjQsNiArMjY0LDEzIEBACiAgKiBTQVMgVG9wb2xvZ3kgU3RydWN0dXJlcwogICovCiAKKyNkZWZpbmUgTVBUU0FTX1NUQVRFX1RSX1NFTkQJCTB4MDAwMQorI2RlZmluZSBNUFRTQVNfU1RBVEVfVFJfQ09NUExFVEUJMHgwMDAyCisjZGVmaW5lIE1QVFNBU19TVEFURV9DTlRSTF9TRU5ECQkweDAwMDQKKyNkZWZpbmUgTVBUU0FTX1NUQVRFX0NOVFJMX0NPTVBMRVRFCTB4MDAwOAorCisjZGVmaW5lIE1QVDJTQVNfUkVRX1NBU19DTlRSTAkJMHgwMDEwCisKIC8qKgogICogc3RydWN0IF9zYXNfZGV2aWNlIC0gYXR0YWNoZWQgZGV2aWNlIGluZm9ybWF0aW9uCiAgKiBAbGlzdDogc2FzIGRldmljZSBsaXN0CkBAIC0zMDAsNiArMzA3LDcgQEAKIAl1MTYJc2xvdDsKIAl1OAloaWRkZW5fcmFpZF9jb21wb25lbnQ7CiAJdTgJcmVzcG9uZGluZzsKKwl1MTYJc3RhdGU7CiB9OwogCiAvKioKQEAgLTQzNiw2ICs0NDQsMTcgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkIHRyYWNrZXJfbGlzdDsKIH07CiAKKy8qKgorICogc3RydWN0IF90cl9saXN0IC0gdGFyZ2V0IHJlc2V0IGxpc3QKKyAqIEBoYW5kbGU6IGRldmljZSBoYW5kbGUKKyAqIEBzdGF0ZTogc3RhdGUgbWFjaGluZQorICovCitzdHJ1Y3QgX3RyX2xpc3QgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwl1MTYJaGFuZGxlOworCXUxNglzdGF0ZTsKK307CisKIHR5cGVkZWYgdm9pZCAoKk1QVF9BRERfU0dFKSh2b2lkICpwYWRkciwgdTMyIGZsYWdzX2xlbmd0aCwgZG1hX2FkZHJfdCBkbWFfYWRkcik7CiAKIC8qKgpAQCAtNTEwLDggKzUyOSw5IEBACiAgKiBAY29uZmlnX3BhZ2Vfc3o6IGNvbmZpZyBwYWdlIHNpemUKICAqIEBjb25maWdfcGFnZTogcmVzZXJ2ZSBtZW1vcnkgZm9yIGNvbmZpZyBwYWdlIHBheWxvYWQKICAqIEBjb25maWdfcGFnZV9kbWE6CisgKiBAaGJhX3F1ZXVlX2RlcHRoOiBoYmEgcmVxdWVzdCBxdWV1ZSBkZXB0aAogICogQHNnZV9zaXplOiBzZyBlbGVtZW50IHNpemUgZm9yIGVpdGhlciAzMi82NCBiaXQKLSAqIEByZXF1ZXN0X2RlcHRoOiBoYmEgcmVxdWVzdCBxdWV1ZSBkZXB0aAorICogQHNjc2lpb19kZXB0aDogU0NTSV9JTyBxdWV1ZSBkZXB0aAogICogQHJlcXVlc3Rfc3o6IHBlciByZXF1ZXN0IGZyYW1lIHNpemUKICAqIEByZXF1ZXN0OiBwb29sIG9mIHJlcXVlc3QgZnJhbWVzCiAgKiBAcmVxdWVzdF9kbWE6CkBAIC01MjgsNiArNTQ4LDE4IEBACiAgKiBAY2hhaW5zX25lZWRlZF9wZXJfaW86IG1heCBjaGFpbnMgcGVyIGlvCiAgKiBAY2hhaW5fb2Zmc2V0X3ZhbHVlX2Zvcl9tYWluX21lc3NhZ2U6IGxvY2F0aW9uIDFzdCBzZyBpbiBtYWluCiAgKiBAY2hhaW5fZGVwdGg6IHRvdGFsIGNoYWlucyBhbGxvY2F0ZWQKKyAqIEBoaV9wcmlvcml0eV9zbWlkOgorICogQGhpX3ByaW9yaXR5OgorICogQGhpX3ByaW9yaXR5X2RtYToKKyAqIEBoaV9wcmlvcml0eV9kZXB0aDoKKyAqIEBocHJfbG9va3VwOgorICogQGhwcl9mcmVlX2xpc3Q6CisgKiBAaW50ZXJuYWxfc21pZDoKKyAqIEBpbnRlcm5hbDoKKyAqIEBpbnRlcm5hbF9kbWE6CisgKiBAaW50ZXJuYWxfZGVwdGg6CisgKiBAaW50ZXJuYWxfbG9va3VwOgorICogQGludGVybmFsX2ZyZWVfbGlzdDoKICAqIEBzZW5zZTogcG9vbCBvZiBzZW5zZQogICogQHNlbnNlX2RtYToKICAqIEBzZW5zZV9kbWFfcG9vbDoKQEAgLTU5Nyw2ICs2MjksOCBAQAogCXU4CQljdGxfY2JfaWR4OwogCXU4CQliYXNlX2NiX2lkeDsKIAl1OAkJY29uZmlnX2NiX2lkeDsKKwl1OAkJdG1fdHJfY2JfaWR4OworCXU4CQl0bV9zYXNfY29udHJvbF9jYl9pZHg7CiAJc3RydWN0IF9pbnRlcm5hbF9jbWQgYmFzZV9jbWRzOwogCXN0cnVjdCBfaW50ZXJuYWxfY21kIHRyYW5zcG9ydF9jbWRzOwogCXN0cnVjdCBfaW50ZXJuYWxfY21kIHRtX2NtZHM7CkBAIC02NDMsOSArNjc3LDEwIEBACiAJdm9pZCAJCSpjb25maWdfcGFnZTsKIAlkbWFfYWRkcl90CWNvbmZpZ19wYWdlX2RtYTsKIAotCS8qIHJlcXVlc3QgKi8KKwkvKiBzY3NpaW8gcmVxdWVzdCAqLworCXUxNgkJaGJhX3F1ZXVlX2RlcHRoOwogCXUxNgkJc2dlX3NpemU7Ci0JdTE2IAkJcmVxdWVzdF9kZXB0aDsKKwl1MTYgCQlzY3NpaW9fZGVwdGg7CiAJdTE2CQlyZXF1ZXN0X3N6OwogCXU4CQkqcmVxdWVzdDsKIAlkbWFfYWRkcl90CXJlcXVlc3RfZG1hOwpAQCAtNjY1LDYgKzcwMCwyMiBAQAogCXUxNgkJY2hhaW5fb2Zmc2V0X3ZhbHVlX2Zvcl9tYWluX21lc3NhZ2U7CiAJdTE2CQljaGFpbl9kZXB0aDsKIAorCS8qIGhpLXByaW9yaXR5IHF1ZXVlICovCisJdTE2CQloaV9wcmlvcml0eV9zbWlkOworCXU4CQkqaGlfcHJpb3JpdHk7CisJZG1hX2FkZHJfdAloaV9wcmlvcml0eV9kbWE7CisJdTE2CQloaV9wcmlvcml0eV9kZXB0aDsKKwlzdHJ1Y3QgcmVxdWVzdF90cmFja2VyICpocHJfbG9va3VwOworCXN0cnVjdCBsaXN0X2hlYWQgaHByX2ZyZWVfbGlzdDsKKworCS8qIGludGVybmFsIHF1ZXVlICovCisJdTE2CQlpbnRlcm5hbF9zbWlkOworCXU4CQkqaW50ZXJuYWw7CisJZG1hX2FkZHJfdAlpbnRlcm5hbF9kbWE7CisJdTE2CQlpbnRlcm5hbF9kZXB0aDsKKwlzdHJ1Y3QgcmVxdWVzdF90cmFja2VyICppbnRlcm5hbF9sb29rdXA7CisJc3RydWN0IGxpc3RfaGVhZCBpbnRlcm5hbF9mcmVlX2xpc3Q7CisKIAkvKiBzZW5zZSAqLwogCXU4CQkqc2Vuc2U7CiAJZG1hX2FkZHJfdAlzZW5zZV9kbWE7CkBAIC02OTAsNiArNzQxLDggQEAKIAlzdHJ1Y3QgZG1hX3Bvb2wgKnJlcGx5X3Bvc3RfZnJlZV9kbWFfcG9vbDsKIAl1MzIJCXJlcGx5X3Bvc3RfaG9zdF9pbmRleDsKIAorCXN0cnVjdCBsaXN0X2hlYWQgZGVsYXllZF90cl9saXN0OworCiAJLyogZGlhZyBidWZmZXIgc3VwcG9ydCAqLwogCXU4CQkqZGlhZ19idWZmZXJbTVBJMl9ESUFHX0JVRl9UWVBFX0NPVU5UXTsKIAl1MzIJCWRpYWdfYnVmZmVyX3N6W01QSTJfRElBR19CVUZfVFlQRV9DT1VOVF07CkBAIC03MDEsNyArNzU0LDcgQEAKIAl1MzIJCWRpYWdub3N0aWNfZmxhZ3NbTVBJMl9ESUFHX0JVRl9UWVBFX0NPVU5UXTsKIH07CiAKLXR5cGVkZWYgdm9pZCAoKk1QVF9DQUxMQkFDSykoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgc21pZCwgdTggVkZfSUQsCit0eXBlZGVmIHU4ICgqTVBUX0NBTExCQUNLKShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBzbWlkLCB1OCBtc2l4X2luZGV4LAogICAgIHUzMiByZXBseSk7CiAKIApAQCAtNzIwLDIyICs3NzMsMjggQEAKIHZvaWQgKm1wdDJzYXNfYmFzZV9nZXRfbXNnX2ZyYW1lKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IHNtaWQpOwogdm9pZCAqbXB0MnNhc19iYXNlX2dldF9zZW5zZV9idWZmZXIoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgc21pZCk7CiB2b2lkIG1wdDJzYXNfYmFzZV9idWlsZF96ZXJvX2xlbl9zZ2Uoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB2b2lkICpwYWRkcik7Ci1kbWFfYWRkcl90IG1wdDJzYXNfYmFzZV9nZXRfbXNnX2ZyYW1lX2RtYShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBzbWlkKTsKLWRtYV9hZGRyX3QgbXB0MnNhc19iYXNlX2dldF9zZW5zZV9idWZmZXJfZG1hKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IHNtaWQpOworZG1hX2FkZHJfdCBtcHQyc2FzX2Jhc2VfZ2V0X3NlbnNlX2J1ZmZlcl9kbWEoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLAorICAgIHUxNiBzbWlkKTsKKworLyogaGktcHJpb3JpdHkgcXVldWUgKi8KK3UxNiBtcHQyc2FzX2Jhc2VfZ2V0X3NtaWRfaHByKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTggY2JfaWR4KTsKK3UxNiBtcHQyc2FzX2Jhc2VfZ2V0X3NtaWRfc2NzaWlvKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTggY2JfaWR4LAorICAgIHN0cnVjdCBzY3NpX2NtbmQgKnNjbWQpOwogCiB1MTYgbXB0MnNhc19iYXNlX2dldF9zbWlkKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTggY2JfaWR4KTsKIHZvaWQgbXB0MnNhc19iYXNlX2ZyZWVfc21pZChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBzbWlkKTsKLXZvaWQgbXB0MnNhc19iYXNlX3B1dF9zbWlkX3Njc2lfaW8oc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgc21pZCwgdTggdmZfaWQsCit2b2lkIG1wdDJzYXNfYmFzZV9wdXRfc21pZF9zY3NpX2lvKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IHNtaWQsCiAgICAgdTE2IGhhbmRsZSk7Ci12b2lkIG1wdDJzYXNfYmFzZV9wdXRfc21pZF9oaV9wcmlvcml0eShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBzbWlkLCB1OCB2Zl9pZCk7Cit2b2lkIG1wdDJzYXNfYmFzZV9wdXRfc21pZF9oaV9wcmlvcml0eShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBzbWlkKTsKIHZvaWQgbXB0MnNhc19iYXNlX3B1dF9zbWlkX3RhcmdldF9hc3Npc3Qoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgc21pZCwKLSAgICB1OCB2Zl9pZCwgdTE2IGlvX2luZGV4KTsKLXZvaWQgbXB0MnNhc19iYXNlX3B1dF9zbWlkX2RlZmF1bHQoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgc21pZCwgdTggdmZfaWQpOworICAgIHUxNiBpb19pbmRleCk7Cit2b2lkIG1wdDJzYXNfYmFzZV9wdXRfc21pZF9kZWZhdWx0KHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IHNtaWQpOwogdm9pZCBtcHQyc2FzX2Jhc2VfaW5pdGlhbGl6ZV9jYWxsYmFja19oYW5kbGVyKHZvaWQpOwogdTggbXB0MnNhc19iYXNlX3JlZ2lzdGVyX2NhbGxiYWNrX2hhbmRsZXIoTVBUX0NBTExCQUNLIGNiX2Z1bmMpOwogdm9pZCBtcHQyc2FzX2Jhc2VfcmVsZWFzZV9jYWxsYmFja19oYW5kbGVyKHU4IGNiX2lkeCk7CiAKLXZvaWQgbXB0MnNhc19iYXNlX2RvbmUoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgc21pZCwgdTggVkZfSUQsIHUzMiByZXBseSk7Cit1OCBtcHQyc2FzX2Jhc2VfZG9uZShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBzbWlkLCB1OCBtc2l4X2luZGV4LAorICAgIHUzMiByZXBseSk7CiB2b2lkICptcHQyc2FzX2Jhc2VfZ2V0X3JlcGx5X3ZpcnRfYWRkcihzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUzMiBwaHlzX2FkZHIpOwogCiB1MzIgbXB0MnNhc19iYXNlX2dldF9pb2NzdGF0ZShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIGludCBjb29rZWQpOwpAQCAtNzQ5LDYgKzgwOCw4IEBACiB2b2lkIG1wdDJzYXNfYmFzZV92YWxpZGF0ZV9ldmVudF90eXBlKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTMyICpldmVudF90eXBlKTsKIAogLyogc2NzaWggc2hhcmVkIEFQSSAqLwordTggbXB0MnNhc19zY3NpaF9ldmVudF9jYWxsYmFjayhzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHU4IG1zaXhfaW5kZXgsCisgICAgdTMyIHJlcGx5KTsKIHZvaWQgbXB0MnNhc19zY3NpaF9pc3N1ZV90bShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBoYW5kbGUsIHVpbnQgbHVuLAogICAgIHU4IHR5cGUsIHUxNiBzbWlkX3Rhc2ssIHVsb25nIHRpbWVvdXQpOwogdm9pZCBtcHQyc2FzX3Njc2loX3NldF90bV9mbGFnKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IGhhbmRsZSk7CkBAIC03NjAsMTEgKzgyMSwxMSBAQAogc3RydWN0IF9zYXNfZGV2aWNlICptcHQyc2FzX3Njc2loX3Nhc19kZXZpY2VfZmluZF9ieV9zYXNfYWRkcmVzcygKICAgICBzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHU2NCBzYXNfYWRkcmVzcyk7CiAKLXZvaWQgbXB0MnNhc19zY3NpaF9ldmVudF9jYWxsYmFjayhzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHU4IFZGX0lELCB1MzIgcmVwbHkpOwogdm9pZCBtcHQyc2FzX3Njc2loX3Jlc2V0X2hhbmRsZXIoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCBpbnQgcmVzZXRfcGhhc2UpOwogCiAvKiBjb25maWcgc2hhcmVkIEFQSSAqLwotdm9pZCBtcHQyc2FzX2NvbmZpZ19kb25lKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IHNtaWQsIHU4IFZGX0lELCB1MzIgcmVwbHkpOwordTggbXB0MnNhc19jb25maWdfZG9uZShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBzbWlkLCB1OCBtc2l4X2luZGV4LAorICAgIHUzMiByZXBseSk7CiBpbnQgbXB0MnNhc19jb25maWdfZ2V0X251bWJlcl9oYmFfcGh5cyhzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHU4ICpudW1fcGh5cyk7CiBpbnQgbXB0MnNhc19jb25maWdfZ2V0X21hbnVmYWN0dXJpbmdfcGcwKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywKICAgICBNcGkyQ29uZmlnUmVwbHlfdCAqbXBpX3JlcGx5LCBNcGkyTWFudWZhY3R1cmluZ1BhZ2UwX3QgKmNvbmZpZ19wYWdlKTsKQEAgLTgxNywxNCArODc4LDE3IEBACiBleHRlcm4gc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKm1wdDJzYXNfZGV2X2F0dHJzW107CiB2b2lkIG1wdDJzYXNfY3RsX2luaXQodm9pZCk7CiB2b2lkIG1wdDJzYXNfY3RsX2V4aXQodm9pZCk7Ci12b2lkIG1wdDJzYXNfY3RsX2RvbmUoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgc21pZCwgdTggVkZfSUQsIHUzMiByZXBseSk7Cit1OCBtcHQyc2FzX2N0bF9kb25lKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IHNtaWQsIHU4IG1zaXhfaW5kZXgsCisgICAgdTMyIHJlcGx5KTsKIHZvaWQgbXB0MnNhc19jdGxfcmVzZXRfaGFuZGxlcihzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIGludCByZXNldF9waGFzZSk7Ci12b2lkIG1wdDJzYXNfY3RsX2V2ZW50X2NhbGxiYWNrKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTggVkZfSUQsIHUzMiByZXBseSk7Cit1OCBtcHQyc2FzX2N0bF9ldmVudF9jYWxsYmFjayhzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHU4IG1zaXhfaW5kZXgsCisgICAgdTMyIHJlcGx5KTsKIHZvaWQgbXB0MnNhc19jdGxfYWRkX3RvX2V2ZW50X2xvZyhzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsCiAgICAgTXBpMkV2ZW50Tm90aWZpY2F0aW9uUmVwbHlfdCAqbXBpX3JlcGx5KTsKIAogLyogdHJhbnNwb3J0IHNoYXJlZCBBUEkgKi8KLXZvaWQgbXB0MnNhc190cmFuc3BvcnRfZG9uZShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBzbWlkLCB1OCBWRl9JRCwgdTMyIHJlcGx5KTsKK3U4IG1wdDJzYXNfdHJhbnNwb3J0X2RvbmUoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgc21pZCwgdTggbXNpeF9pbmRleCwKKyAgICB1MzIgcmVwbHkpOwogc3RydWN0IF9zYXNfcG9ydCAqbXB0MnNhc190cmFuc3BvcnRfcG9ydF9hZGQoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLAogICAgIHUxNiBoYW5kbGUsIHUxNiBwYXJlbnRfaGFuZGxlKTsKIHZvaWQgbXB0MnNhc190cmFuc3BvcnRfcG9ydF9yZW1vdmUoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1NjQgc2FzX2FkZHJlc3MsCkBAIC04MzgsNiArOTAyLDggQEAKIGV4dGVybiBzdHJ1Y3Qgc2FzX2Z1bmN0aW9uX3RlbXBsYXRlIG1wdDJzYXNfdHJhbnNwb3J0X2Z1bmN0aW9uczsKIGV4dGVybiBzdHJ1Y3Qgc2NzaV90cmFuc3BvcnRfdGVtcGxhdGUgKm1wdDJzYXNfdHJhbnNwb3J0X3RlbXBsYXRlOwogZXh0ZXJuIGludCBzY3NpX2ludGVybmFsX2RldmljZV9ibG9jayhzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYpOworZXh0ZXJuIHU4IG1wdDJzYXNfc3RtX3plcm9fc21pZF9oYW5kbGVyKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywKKyAgICB1OCBtc2l4X2luZGV4LCB1MzIgcmVwbHkpOwogZXh0ZXJuIGludCBzY3NpX2ludGVybmFsX2RldmljZV91bmJsb2NrKHN0cnVjdCBzY3NpX2RldmljZSAqc2Rldik7CiAKICNlbmRpZiAvKiBNUFQyU0FTX0JBU0VfSF9JTkNMVURFRCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19jb25maWcuYyBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfY29uZmlnLmMKaW5kZXggYWI4YzU2MC4uNTk0YTM4OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19jb25maWcuYworKysgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2NvbmZpZy5jCkBAIC0yLDcgKzIsNyBAQAogICogVGhpcyBtb2R1bGUgcHJvdmlkZXMgY29tbW9uIEFQSSBmb3IgYWNjZXNzaW5nIGZpcm13YXJlIGNvbmZpZ3VyYXRpb24gcGFnZXMKICAqCiAgKiBUaGlzIGNvZGUgaXMgYmFzZWQgb24gZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0Ml9iYXNlLmMKLSAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA4ICBMU0kgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA5ICBMU0kgQ29ycG9yYXRpb24KICAqICAobWFpbHRvOkRMLU1QVEZ1c2lvbkxpbnV4QGxzaS5jb20pCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtMjI3LDIzICsyMjcsMjUgQEAKICAqIG1wdDJzYXNfY29uZmlnX2RvbmUgLSBjb25maWcgcGFnZSBjb21wbGV0aW9uIHJvdXRpbmUKICAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAogICogQHNtaWQ6IHN5c3RlbSByZXF1ZXN0IG1lc3NhZ2UgaW5kZXgKLSAqIEBWRl9JRDogdmlydHVhbCBmdW5jdGlvbiBpZAorICogQG1zaXhfaW5kZXg6IE1TSVggdGFibGUgaW5kZXggc3VwcGxpZWQgYnkgdGhlIE9TCiAgKiBAcmVwbHk6IHJlcGx5IG1lc3NhZ2UgZnJhbWUobG93ZXIgMzJiaXQgYWRkcikKICAqIENvbnRleHQ6IG5vbmUuCiAgKgogICogVGhlIGNhbGxiYWNrIGhhbmRsZXIgd2hlbiB1c2luZyBfY29uZmlnX3JlcXVlc3QuCiAgKgotICogUmV0dXJuIG5vdGhpbmcuCisgKiBSZXR1cm4gMSBtZWFuaW5nIG1mIHNob3VsZCBiZSBmcmVlZCBmcm9tIF9iYXNlX2ludGVycnVwdAorICogICAgICAgIDAgbWVhbnMgdGhlIG1mIGlzIGZyZWVkIGZyb20gdGhpcyBmdW5jdGlvbi4KICAqLwotdm9pZAotbXB0MnNhc19jb25maWdfZG9uZShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBzbWlkLCB1OCBWRl9JRCwgdTMyIHJlcGx5KQordTgKK21wdDJzYXNfY29uZmlnX2RvbmUoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgc21pZCwgdTggbXNpeF9pbmRleCwKKyAgICB1MzIgcmVwbHkpCiB7CiAJTVBJMkRlZmF1bHRSZXBseV90ICptcGlfcmVwbHk7CiAKIAlpZiAoaW9jLT5jb25maWdfY21kcy5zdGF0dXMgPT0gTVBUMl9DTURfTk9UX1VTRUQpCi0JCXJldHVybjsKKwkJcmV0dXJuIDE7CiAJaWYgKGlvYy0+Y29uZmlnX2NtZHMuc21pZCAhPSBzbWlkKQotCQlyZXR1cm47CisJCXJldHVybiAxOwogCWlvYy0+Y29uZmlnX2NtZHMuc3RhdHVzIHw9IE1QVDJfQ01EX0NPTVBMRVRFOwogCW1waV9yZXBseSA9ICBtcHQyc2FzX2Jhc2VfZ2V0X3JlcGx5X3ZpcnRfYWRkcihpb2MsIHJlcGx5KTsKIAlpZiAobXBpX3JlcGx5KSB7CkBAIC0yNTcsNiArMjU5LDcgQEAKICNlbmRpZgogCWlvYy0+Y29uZmlnX2NtZHMuc21pZCA9IFVTSE9SVF9NQVg7CiAJY29tcGxldGUoJmlvYy0+Y29uZmlnX2NtZHMuZG9uZSk7CisJcmV0dXJuIDE7CiB9CiAKIC8qKgpAQCAtMzAzLDYgKzMwNiw5IEBACiAJcmV0cnlfY291bnQgPSAwOwogCW1lbXNldCgmbWVtLCAwLCBzaXplb2Yoc3RydWN0IGNvbmZpZ19yZXF1ZXN0KSk7CiAKKwltcGlfcmVxdWVzdC0+VkZfSUQgPSAwOyAvKiBUT0RPICovCisJbXBpX3JlcXVlc3QtPlZQX0lEID0gMDsKKwogCWlmIChjb25maWdfcGFnZSkgewogCQltcGlfcmVxdWVzdC0+SGVhZGVyLlBhZ2VWZXJzaW9uID0gbXBpX3JlcGx5LT5IZWFkZXIuUGFnZVZlcnNpb247CiAJCW1waV9yZXF1ZXN0LT5IZWFkZXIuUGFnZU51bWJlciA9IG1waV9yZXBseS0+SGVhZGVyLlBhZ2VOdW1iZXI7CkBAIC0zODAsNyArMzg2LDcgQEAKIAlfY29uZmlnX2Rpc3BsYXlfc29tZV9kZWJ1Zyhpb2MsIHNtaWQsICJjb25maWdfcmVxdWVzdCIsIE5VTEwpOwogI2VuZGlmCiAJaW5pdF9jb21wbGV0aW9uKCZpb2MtPmNvbmZpZ19jbWRzLmRvbmUpOwotCW1wdDJzYXNfYmFzZV9wdXRfc21pZF9kZWZhdWx0KGlvYywgc21pZCwgY29uZmlnX3JlcXVlc3QtPlZGX0lEKTsKKwltcHQyc2FzX2Jhc2VfcHV0X3NtaWRfZGVmYXVsdChpb2MsIHNtaWQpOwogCXRpbWVsZWZ0ID0gd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZpb2MtPmNvbmZpZ19jbWRzLmRvbmUsCiAJICAgIHRpbWVvdXQqSFopOwogCWlmICghKGlvYy0+Y29uZmlnX2NtZHMuc3RhdHVzICYgTVBUMl9DTURfQ09NUExFVEUpKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2N0bC5jIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19jdGwuYwppbmRleCBjMmE1MTAxLi41N2Q3MjQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2N0bC5jCisrKyBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfY3RsLmMKQEAgLTMsNyArMyw3IEBACiAgKiBjb250cm9sbGVycwogICoKICAqIFRoaXMgY29kZSBpcyBiYXNlZCBvbiBkcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyX2N0bC5jCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOCAgTFNJIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSAgTFNJIENvcnBvcmF0aW9uCiAgKiAgKG1haWx0bzpETC1NUFRGdXNpb25MaW51eEBsc2kuY29tKQogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTIxOSwyMyArMjE5LDI1IEBACiAgKiBtcHQyc2FzX2N0bF9kb25lIC0gY3RsIG1vZHVsZSBjb21wbGV0aW9uIHJvdXRpbmUKICAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAogICogQHNtaWQ6IHN5c3RlbSByZXF1ZXN0IG1lc3NhZ2UgaW5kZXgKLSAqIEBWRl9JRDogdmlydHVhbCBmdW5jdGlvbiBpZAorICogQG1zaXhfaW5kZXg6IE1TSVggdGFibGUgaW5kZXggc3VwcGxpZWQgYnkgdGhlIE9TCiAgKiBAcmVwbHk6IHJlcGx5IG1lc3NhZ2UgZnJhbWUobG93ZXIgMzJiaXQgYWRkcikKICAqIENvbnRleHQ6IG5vbmUuCiAgKgogICogVGhlIGNhbGxiYWNrIGhhbmRsZXIgd2hlbiB1c2luZyBpb2MtPmN0bF9jYl9pZHguCiAgKgotICogUmV0dXJuIG5vdGhpbmcuCisgKiBSZXR1cm4gMSBtZWFuaW5nIG1mIHNob3VsZCBiZSBmcmVlZCBmcm9tIF9iYXNlX2ludGVycnVwdAorICogICAgICAgIDAgbWVhbnMgdGhlIG1mIGlzIGZyZWVkIGZyb20gdGhpcyBmdW5jdGlvbi4KICAqLwotdm9pZAotbXB0MnNhc19jdGxfZG9uZShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBzbWlkLCB1OCBWRl9JRCwgdTMyIHJlcGx5KQordTgKK21wdDJzYXNfY3RsX2RvbmUoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgc21pZCwgdTggbXNpeF9pbmRleCwKKwl1MzIgcmVwbHkpCiB7CiAJTVBJMkRlZmF1bHRSZXBseV90ICptcGlfcmVwbHk7CiAKIAlpZiAoaW9jLT5jdGxfY21kcy5zdGF0dXMgPT0gTVBUMl9DTURfTk9UX1VTRUQpCi0JCXJldHVybjsKKwkJcmV0dXJuIDE7CiAJaWYgKGlvYy0+Y3RsX2NtZHMuc21pZCAhPSBzbWlkKQotCQlyZXR1cm47CisJCXJldHVybiAxOwogCWlvYy0+Y3RsX2NtZHMuc3RhdHVzIHw9IE1QVDJfQ01EX0NPTVBMRVRFOwogCW1waV9yZXBseSA9IG1wdDJzYXNfYmFzZV9nZXRfcmVwbHlfdmlydF9hZGRyKGlvYywgcmVwbHkpOwogCWlmIChtcGlfcmVwbHkpIHsKQEAgLTI0Nyw2ICsyNDksNyBAQAogI2VuZGlmCiAJaW9jLT5jdGxfY21kcy5zdGF0dXMgJj0gfk1QVDJfQ01EX1BFTkRJTkc7CiAJY29tcGxldGUoJmlvYy0+Y3RsX2NtZHMuZG9uZSk7CisJcmV0dXJuIDE7CiB9CiAKIC8qKgpAQCAtMzI4LDIyICszMzEsMjUgQEAKIC8qKgogICogbXB0MnNhc19jdGxfZXZlbnRfY2FsbGJhY2sgLSBmaXJtd2FyZSBldmVudCBoYW5kbGVyIChjYWxsZWQgYXQgSVNSIHRpbWUpCiAgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKLSAqIEBWRl9JRDogdmlydHVhbCBmdW5jdGlvbiBpZAorICogQG1zaXhfaW5kZXg6IE1TSVggdGFibGUgaW5kZXggc3VwcGxpZWQgYnkgdGhlIE9TCiAgKiBAcmVwbHk6IHJlcGx5IG1lc3NhZ2UgZnJhbWUobG93ZXIgMzJiaXQgYWRkcikKICAqIENvbnRleHQ6IGludGVycnVwdC4KICAqCiAgKiBUaGlzIGZ1bmN0aW9uIG1lcmVseSBhZGRzIGEgbmV3IHdvcmsgdGFzayBpbnRvIGlvYy0+ZmlybXdhcmVfZXZlbnRfdGhyZWFkLgogICogVGhlIHRhc2tzIGFyZSB3b3JrZWQgZnJvbSBfZmlybXdhcmVfZXZlbnRfd29yayBpbiB1c2VyIGNvbnRleHQuCiAgKgotICogUmV0dXJuIG5vdGhpbmcuCisgKiBSZXR1cm4gMSBtZWFuaW5nIG1mIHNob3VsZCBiZSBmcmVlZCBmcm9tIF9iYXNlX2ludGVycnVwdAorICogICAgICAgIDAgbWVhbnMgdGhlIG1mIGlzIGZyZWVkIGZyb20gdGhpcyBmdW5jdGlvbi4KICAqLwotdm9pZAotbXB0MnNhc19jdGxfZXZlbnRfY2FsbGJhY2soc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1OCBWRl9JRCwgdTMyIHJlcGx5KQordTgKK21wdDJzYXNfY3RsX2V2ZW50X2NhbGxiYWNrKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTggbXNpeF9pbmRleCwKKwl1MzIgcmVwbHkpCiB7CiAJTXBpMkV2ZW50Tm90aWZpY2F0aW9uUmVwbHlfdCAqbXBpX3JlcGx5OwogCiAJbXBpX3JlcGx5ID0gbXB0MnNhc19iYXNlX2dldF9yZXBseV92aXJ0X2FkZHIoaW9jLCByZXBseSk7CiAJbXB0MnNhc19jdGxfYWRkX3RvX2V2ZW50X2xvZyhpb2MsIG1waV9yZXBseSk7CisJcmV0dXJuIDE7CiB9CiAKIC8qKgpAQCAtNTA3LDcgKzUxMyw3IEBACiAKIAloYW5kbGUgPSBsZTE2X3RvX2NwdSh0bV9yZXF1ZXN0LT5EZXZIYW5kbGUpOwogCXNwaW5fbG9ja19pcnFzYXZlKCZpb2MtPnNjc2lfbG9va3VwX2xvY2ssIGZsYWdzKTsKLQlmb3IgKGkgPSBpb2MtPnJlcXVlc3RfZGVwdGg7IGkgJiYgIWZvdW5kOyBpLS0pIHsKKwlmb3IgKGkgPSBpb2MtPnNjc2lpb19kZXB0aDsgaSAmJiAhZm91bmQ7IGktLSkgewogCQlzY21kID0gaW9jLT5zY3NpX2xvb2t1cFtpIC0gMV0uc2NtZDsKIAkJaWYgKHNjbWQgPT0gTlVMTCB8fCBzY21kLT5kZXZpY2UgPT0gTlVMTCB8fAogCQkgICAgc2NtZC0+ZGV2aWNlLT5ob3N0ZGF0YSA9PSBOVUxMKQpAQCAtNjE0LDcgKzYyMCw3IEBACiAJCXByaW50ayhNUFQyU0FTX0lORk9fRk1UICIlczogaW9jIGlzIG9wZXJhdGlvbmFsXG4iLAogCQkgICAgaW9jLT5uYW1lLCBfX2Z1bmNfXyk7CiAKLQlzbWlkID0gbXB0MnNhc19iYXNlX2dldF9zbWlkKGlvYywgaW9jLT5jdGxfY2JfaWR4KTsKKwlzbWlkID0gbXB0MnNhc19iYXNlX2dldF9zbWlkX3Njc2lpbyhpb2MsIGlvYy0+Y3RsX2NiX2lkeCwgTlVMTCk7CiAJaWYgKCFzbWlkKSB7CiAJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgIiVzOiBmYWlsZWQgb2J0YWluaW5nIGEgc21pZFxuIiwKIAkJICAgIGlvYy0+bmFtZSwgX19mdW5jX18pOwpAQCAtNzM3LDcgKzc0Myw3IEBACiAJCSAgICAodTMyKW1wdDJzYXNfYmFzZV9nZXRfc2Vuc2VfYnVmZmVyX2RtYShpb2MsIHNtaWQpOwogCQlwcml2X3NlbnNlID0gbXB0MnNhc19iYXNlX2dldF9zZW5zZV9idWZmZXIoaW9jLCBzbWlkKTsKIAkJbWVtc2V0KHByaXZfc2Vuc2UsIDAsIFNDU0lfU0VOU0VfQlVGRkVSU0laRSk7Ci0JCW1wdDJzYXNfYmFzZV9wdXRfc21pZF9zY3NpX2lvKGlvYywgc21pZCwgMCwKKwkJbXB0MnNhc19iYXNlX3B1dF9zbWlkX3Njc2lfaW8oaW9jLCBzbWlkLAogCQkgICAgbGUxNl90b19jcHUobXBpX3JlcXVlc3QtPkZ1bmN0aW9uRGVwZW5kZW50MSkpOwogCQlicmVhazsKIAl9CkBAIC03NTksOCArNzY1LDcgQEAKIAkJbXV0ZXhfbG9jaygmaW9jLT50bV9jbWRzLm11dGV4KTsKIAkJbXB0MnNhc19zY3NpaF9zZXRfdG1fZmxhZyhpb2MsIGxlMTZfdG9fY3B1KAogCQkgICAgdG1fcmVxdWVzdC0+RGV2SGFuZGxlKSk7Ci0JCW1wdDJzYXNfYmFzZV9wdXRfc21pZF9oaV9wcmlvcml0eShpb2MsIHNtaWQsCi0JCSAgICBtcGlfcmVxdWVzdC0+VkZfSUQpOworCQltcHQyc2FzX2Jhc2VfcHV0X3NtaWRfaGlfcHJpb3JpdHkoaW9jLCBzbWlkKTsKIAkJYnJlYWs7CiAJfQogCWNhc2UgTVBJMl9GVU5DVElPTl9TTVBfUEFTU1RIUk9VR0g6CkBAIC03ODEsNyArNzg2LDcgQEAKIAkJCWlvYy0+aW9jX2xpbmtfcmVzZXRfaW5fcHJvZ3Jlc3MgPSAxOwogCQkJaW9jLT5pZ25vcmVfbG9naW5mb3MgPSAxOwogCQl9Ci0JCW1wdDJzYXNfYmFzZV9wdXRfc21pZF9kZWZhdWx0KGlvYywgc21pZCwgbXBpX3JlcXVlc3QtPlZGX0lEKTsKKwkJbXB0MnNhc19iYXNlX3B1dF9zbWlkX2RlZmF1bHQoaW9jLCBzbWlkKTsKIAkJYnJlYWs7CiAJfQogCWNhc2UgTVBJMl9GVU5DVElPTl9TQVNfSU9fVU5JVF9DT05UUk9MOgpAQCAtNzk1LDExICs4MDAsMTEgQEAKIAkJCWlvYy0+aW9jX2xpbmtfcmVzZXRfaW5fcHJvZ3Jlc3MgPSAxOwogCQkJaW9jLT5pZ25vcmVfbG9naW5mb3MgPSAxOwogCQl9Ci0JCW1wdDJzYXNfYmFzZV9wdXRfc21pZF9kZWZhdWx0KGlvYywgc21pZCwgbXBpX3JlcXVlc3QtPlZGX0lEKTsKKwkJbXB0MnNhc19iYXNlX3B1dF9zbWlkX2RlZmF1bHQoaW9jLCBzbWlkKTsKIAkJYnJlYWs7CiAJfQogCWRlZmF1bHQ6Ci0JCW1wdDJzYXNfYmFzZV9wdXRfc21pZF9kZWZhdWx0KGlvYywgc21pZCwgbXBpX3JlcXVlc3QtPlZGX0lEKTsKKwkJbXB0MnNhc19iYXNlX3B1dF9zbWlkX2RlZmF1bHQoaW9jLCBzbWlkKTsKIAkJYnJlYWs7CiAJfQogCkBAIC04MDcsNiArODEyLDcgQEAKIAkJdGltZW91dCA9IE1QVDJfSU9DVExfREVGQVVMVF9USU1FT1VUOwogCWVsc2UKIAkJdGltZW91dCA9IGthcmcudGltZW91dDsKKwlpbml0X2NvbXBsZXRpb24oJmlvYy0+Y3RsX2NtZHMuZG9uZSk7CiAJdGltZWxlZnQgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJmlvYy0+Y3RsX2NtZHMuZG9uZSwKIAkgICAgdGltZW91dCpIWik7CiAJaWYgKG1waV9yZXF1ZXN0LT5GdW5jdGlvbiA9PSBNUEkyX0ZVTkNUSU9OX1NDU0lfVEFTS19NR01UKSB7CkBAIC0xMzcxLDYgKzEzNzcsOCBAQAogCW1waV9yZXF1ZXN0LT5GbGFncyA9IGNwdV90b19sZTMyKGthcmcuZGlhZ25vc3RpY19mbGFncyk7CiAJbXBpX3JlcXVlc3QtPkJ1ZmZlckFkZHJlc3MgPSBjcHVfdG9fbGU2NChyZXF1ZXN0X2RhdGFfZG1hKTsKIAltcGlfcmVxdWVzdC0+QnVmZmVyTGVuZ3RoID0gY3B1X3RvX2xlMzIocmVxdWVzdF9kYXRhX3N6KTsKKwltcGlfcmVxdWVzdC0+VkZfSUQgPSAwOyAvKiBUT0RPICovCisJbXBpX3JlcXVlc3QtPlZQX0lEID0gMDsKIAogCWRjdGxwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19ERUJVR19GTVQgIiVzOiBkaWFnX2J1ZmZlcigweCVwKSwgIgogCSAgICAiZG1hKDB4JWxseCksIHN6KCVkKVxuIiwgaW9jLT5uYW1lLCBfX2Z1bmNfXywgcmVxdWVzdF9kYXRhLApAQCAtMTM4MCw3ICsxMzg4LDggQEAKIAkJbXBpX3JlcXVlc3QtPlByb2R1Y3RTcGVjaWZpY1tpXSA9CiAJCQljcHVfdG9fbGUzMihpb2MtPnByb2R1Y3Rfc3BlY2lmaWNbYnVmZmVyX3R5cGVdW2ldKTsKIAotCW1wdDJzYXNfYmFzZV9wdXRfc21pZF9kZWZhdWx0KGlvYywgc21pZCwgbXBpX3JlcXVlc3QtPlZGX0lEKTsKKwltcHQyc2FzX2Jhc2VfcHV0X3NtaWRfZGVmYXVsdChpb2MsIHNtaWQpOworCWluaXRfY29tcGxldGlvbigmaW9jLT5jdGxfY21kcy5kb25lKTsKIAl0aW1lbGVmdCA9IHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmaW9jLT5jdGxfY21kcy5kb25lLAogCSAgICBNUFQyX0lPQ1RMX0RFRkFVTFRfVElNRU9VVCpIWik7CiAKQEAgLTE2NDMsOCArMTY1MiwxMSBAQAogCiAJbXBpX3JlcXVlc3QtPkZ1bmN0aW9uID0gTVBJMl9GVU5DVElPTl9ESUFHX1JFTEVBU0U7CiAJbXBpX3JlcXVlc3QtPkJ1ZmZlclR5cGUgPSBidWZmZXJfdHlwZTsKKwltcGlfcmVxdWVzdC0+VkZfSUQgPSAwOyAvKiBUT0RPICovCisJbXBpX3JlcXVlc3QtPlZQX0lEID0gMDsKIAotCW1wdDJzYXNfYmFzZV9wdXRfc21pZF9kZWZhdWx0KGlvYywgc21pZCwgbXBpX3JlcXVlc3QtPlZGX0lEKTsKKwltcHQyc2FzX2Jhc2VfcHV0X3NtaWRfZGVmYXVsdChpb2MsIHNtaWQpOworCWluaXRfY29tcGxldGlvbigmaW9jLT5jdGxfY21kcy5kb25lKTsKIAl0aW1lbGVmdCA9IHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmaW9jLT5jdGxfY21kcy5kb25lLAogCSAgICBNUFQyX0lPQ1RMX0RFRkFVTFRfVElNRU9VVCpIWik7CiAKQEAgLTE5MDIsOCArMTkxNCwxMSBAQAogCWZvciAoaSA9IDA7IGkgPCBNUFQyX1BST0RVQ1RfU1BFQ0lGSUNfRFdPUkRTOyBpKyspCiAJCW1waV9yZXF1ZXN0LT5Qcm9kdWN0U3BlY2lmaWNbaV0gPQogCQkJY3B1X3RvX2xlMzIoaW9jLT5wcm9kdWN0X3NwZWNpZmljW2J1ZmZlcl90eXBlXVtpXSk7CisJbXBpX3JlcXVlc3QtPlZGX0lEID0gMDsgLyogVE9ETyAqLworCW1waV9yZXF1ZXN0LT5WUF9JRCA9IDA7CiAKLQltcHQyc2FzX2Jhc2VfcHV0X3NtaWRfZGVmYXVsdChpb2MsIHNtaWQsIG1waV9yZXF1ZXN0LT5WRl9JRCk7CisJbXB0MnNhc19iYXNlX3B1dF9zbWlkX2RlZmF1bHQoaW9jLCBzbWlkKTsKKwlpbml0X2NvbXBsZXRpb24oJmlvYy0+Y3RsX2NtZHMuZG9uZSk7CiAJdGltZWxlZnQgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJmlvYy0+Y3RsX2NtZHMuZG9uZSwKIAkgICAgTVBUMl9JT0NUTF9ERUZBVUxUX1RJTUVPVVQqSFopOwogCkBAIC0yMDY5LDYgKzIwODQsNyBAQAogX2N0bF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJbG9uZyByZXQ7CisKIAlsb2NrX2tlcm5lbCgpOwogCXJldCA9IF9jdGxfaW9jdGxfbWFpbihmaWxlLCBjbWQsICh2b2lkIF9fdXNlciAqKWFyZyk7CiAJdW5sb2NrX2tlcm5lbCgpOwpAQCAtMjE0Myw2ICsyMTU5LDcgQEAKIF9jdGxfaW9jdGxfY29tcGF0KHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewogCWxvbmcgcmV0OworCiAJbG9ja19rZXJuZWwoKTsKIAlpZiAoY21kID09IE1QVDJDT01NQU5EMzIpCiAJCXJldCA9IF9jdGxfY29tcGF0X21wdF9jb21tYW5kKGZpbGUsIGNtZCwgYXJnKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfY3RsLmggYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2N0bC5oCmluZGV4IDRkYTExNDMuLjIxMWYyOTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfY3RsLmgKKysrIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19jdGwuaApAQCAtMyw3ICszLDcgQEAKICAqIGNvbnRyb2xsZXJzCiAgKgogICogVGhpcyBjb2RlIGlzIGJhc2VkIG9uIGRyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJfY3RsLmgKLSAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA4ICBMU0kgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA5ICBMU0kgQ29ycG9yYXRpb24KICAqICAobWFpbHRvOkRMLU1QVEZ1c2lvbkxpbnV4QGxzaS5jb20pCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19kZWJ1Zy5oIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19kZWJ1Zy5oCmluZGV4IGFkMzI1MDkuLjUzMDhhMjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfZGVidWcuaAorKysgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2RlYnVnLmgKQEAgLTIsNyArMiw3IEBACiAgKiBMb2dnaW5nIFN1cHBvcnQgZm9yIE1QVCAoTWVzc2FnZSBQYXNzaW5nIFRlY2hub2xvZ3kpIGJhc2VkIGNvbnRyb2xsZXJzCiAgKgogICogVGhpcyBjb2RlIGlzIGJhc2VkIG9uIGRyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJfZGVidWcuYwotICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDggIExTSSBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDkgIExTSSBDb3Jwb3JhdGlvbgogICogIChtYWlsdG86REwtTVBURnVzaW9uTGludXhAbHNpLmNvbSkKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX3Njc2loLmMgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX3Njc2loLmMKaW5kZXggNzc0YjM0NS4uODZhYjMyZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19zY3NpaC5jCisrKyBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfc2NzaWguYwpAQCAtMiw3ICsyLDcgQEAKICAqIFNjc2kgSG9zdCBMYXllciBmb3IgTVBUIChNZXNzYWdlIFBhc3NpbmcgVGVjaG5vbG9neSkgYmFzZWQgY29udHJvbGxlcnMKICAqCiAgKiBUaGlzIGNvZGUgaXMgYmFzZWQgb24gZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0Ml9zY3NpaC5jCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOCAgTFNJIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSAgTFNJIENvcnBvcmF0aW9uCiAgKiAgKG1haWx0bzpETC1NUFRGdXNpb25MaW51eEBsc2kuY29tKQogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTc5LDYgKzc5LDkgQEAKIHN0YXRpYyB1OCBjb25maWdfY2JfaWR4ID0gLTE7CiBzdGF0aWMgaW50IG1wdF9pZHM7CiAKK3N0YXRpYyB1OCB0bV90cl9jYl9pZHggPSAtMSA7CitzdGF0aWMgdTggdG1fc2FzX2NvbnRyb2xfY2JfaWR4ID0gLTE7CisKIC8qIGNvbW1hbmQgbGluZSBvcHRpb25zICovCiBzdGF0aWMgdTMyIGxvZ2dpbmdfbGV2ZWw7CiBNT0RVTEVfUEFSTV9ERVNDKGxvZ2dpbmdfbGV2ZWwsICIgYml0cyBmb3IgZW5hYmxpbmcgYWRkaXRpb25hbCBsb2dnaW5nIGluZm8gIgpAQCAtMTA5LDYgKzExMiw3IEBACiAgKiBAd29yazogd29yayBvYmplY3QgKGlvYy0+ZmF1bHRfcmVzZXRfd29ya19xKQogICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CiAgKiBAVkZfSUQ6IHZpcnR1YWwgZnVuY3Rpb24gaWQKKyAqIEBWUF9JRDogdmlydHVhbCBwb3J0IGlkCiAgKiBAaG9zdF9yZXNldF9oYW5kbGluZzogaGFuZGxpbmcgZXZlbnRzIGR1cmluZyBob3N0IHJlc2V0CiAgKiBAaWdub3JlOiBmbGFnIG1lYW5pbmcgdGhpcyBldmVudCBoYXMgYmVlbiBtYXJrZWQgdG8gaWdub3JlCiAgKiBAZXZlbnQ6IGZpcm13YXJlIGV2ZW50IE1QSTJfRVZFTlRfWFhYIGRlZmluZWQgaW4gbXB0Ml9pb2MuaApAQCAtMTIxLDYgKzEyNSw3IEBACiAJc3RydWN0IHdvcmtfc3RydWN0CXdvcms7CiAJc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jOwogCXU4CQkJVkZfSUQ7CisJdTgJCQlWUF9JRDsKIAl1OAkJCWhvc3RfcmVzZXRfaGFuZGxpbmc7CiAJdTgJCQlpZ25vcmU7CiAJdTE2CQkJZXZlbnQ7CkBAIC0xMzgsOCArMTQzLDEwIEBACiAgKiBAbHVuOiBsdW4gbnVtYmVyCiAgKiBAY2RiX2xlbmd0aDogY2RiIGxlbmd0aAogICogQGNkYjogY2RiIGNvbnRlbnRzCi0gKiBAdmFsaWRfcmVwbHk6IGZsYWcgc2V0IGZvciByZXBseSBtZXNzYWdlCiAgKiBAdGltZW91dDogdGltZW91dCBmb3IgdGhpcyBjb21tYW5kCisgKiBAVkZfSUQ6IHZpcnR1YWwgZnVuY3Rpb24gaWQKKyAqIEBWUF9JRDogdmlydHVhbCBwb3J0IGlkCisgKiBAdmFsaWRfcmVwbHk6IGZsYWcgc2V0IGZvciByZXBseSBtZXNzYWdlCiAgKiBAc2Vuc2VfbGVuZ3RoOiBzZW5zZSBsZW5ndGgKICAqIEBpb2Nfc3RhdHVzOiBpb2Mgc3RhdHVzCiAgKiBAc2NzaV9zdGF0ZTogc2NzaSBzdGF0ZQpAQCAtMTYxLDYgKzE2OCw4IEBACiAJdTgJY2RiX2xlbmd0aDsKIAl1OAljZGJbMzJdOwogCXU4CXRpbWVvdXQ7CisJdTgJVkZfSUQ7CisJdTgJVlBfSUQ7CiAJdTgJdmFsaWRfcmVwbHk7CiAgIC8qIHRoZSBmb2xsb3dpbmcgYml0cyBhcmUgb25seSB2YWxpZCB3aGVuICd2YWxpZF9yZXBseSA9IDEnICovCiAJdTMyCXNlbnNlX2xlbmd0aDsKQEAgLTc1Niw2NiArNzY1LDE2IEBACiB9CiAKIC8qKgotICogX3Njc2loX3Njc2lfbG9va3VwX2dldCAtIHJldHVybnMgc2NtZCBlbnRyeQorICogbXB0c2NzaWhfZ2V0X3Njc2lfbG9va3VwIC0gcmV0dXJucyBzY21kIGVudHJ5CiAgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKICAqIEBzbWlkOiBzeXN0ZW0gcmVxdWVzdCBtZXNzYWdlIGluZGV4Ci0gKiBDb250ZXh0OiBUaGlzIGZ1bmN0aW9uIHdpbGwgYWNxdWlyZSBpb2MtPnNjc2lfbG9va3VwX2xvY2suCiAgKgogICogUmV0dXJucyB0aGUgc21pZCBzdG9yZWQgc2NtZCBwb2ludGVyLgogICovCiBzdGF0aWMgc3RydWN0IHNjc2lfY21uZCAqCiBfc2NzaWhfc2NzaV9sb29rdXBfZ2V0KHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IHNtaWQpCiB7Ci0JdW5zaWduZWQgbG9uZwlmbGFnczsKLQlzdHJ1Y3Qgc2NzaV9jbW5kICpzY21kOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+c2NzaV9sb29rdXBfbG9jaywgZmxhZ3MpOwotCXNjbWQgPSBpb2MtPnNjc2lfbG9va3VwW3NtaWQgLSAxXS5zY21kOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+c2NzaV9sb29rdXBfbG9jaywgZmxhZ3MpOwotCXJldHVybiBzY21kOwotfQotCi0vKioKLSAqIG1wdHNjc2loX2dldGNsZWFyX3Njc2lfbG9va3VwIC0gcmV0dXJucyBzY21kIGVudHJ5Ci0gKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKLSAqIEBzbWlkOiBzeXN0ZW0gcmVxdWVzdCBtZXNzYWdlIGluZGV4Ci0gKiBDb250ZXh0OiBUaGlzIGZ1bmN0aW9uIHdpbGwgYWNxdWlyZSBpb2MtPnNjc2lfbG9va3VwX2xvY2suCi0gKgotICogUmV0dXJucyB0aGUgc21pZCBzdG9yZWQgc2NtZCBwb2ludGVyLCBhcyB3ZWxsIGFzIGNsZWFyaW5nIHRoZSBzY21kIHBvaW50ZXIuCi0gKi8KLXN0YXRpYyBzdHJ1Y3Qgc2NzaV9jbW5kICoKLV9zY3NpaF9zY3NpX2xvb2t1cF9nZXRjbGVhcihzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBzbWlkKQotewotCXVuc2lnbmVkIGxvbmcJZmxhZ3M7Ci0Jc3RydWN0IHNjc2lfY21uZCAqc2NtZDsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZpb2MtPnNjc2lfbG9va3VwX2xvY2ssIGZsYWdzKTsKLQlzY21kID0gaW9jLT5zY3NpX2xvb2t1cFtzbWlkIC0gMV0uc2NtZDsKLQlpb2MtPnNjc2lfbG9va3VwW3NtaWQgLSAxXS5zY21kID0gTlVMTDsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPnNjc2lfbG9va3VwX2xvY2ssIGZsYWdzKTsKLQlyZXR1cm4gc2NtZDsKLX0KLQotLyoqCi0gKiBfc2NzaWhfc2NzaV9sb29rdXBfc2V0IC0gdXBkYXRlcyBzY21kIGVudHJ5IGluIGxvb2t1cAotICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0Ci0gKiBAc21pZDogc3lzdGVtIHJlcXVlc3QgbWVzc2FnZSBpbmRleAotICogQHNjbWQ6IHBvaW50ZXIgdG8gc2NzaSBjb21tYW5kIG9iamVjdAotICogQ29udGV4dDogVGhpcyBmdW5jdGlvbiB3aWxsIGFjcXVpcmUgaW9jLT5zY3NpX2xvb2t1cF9sb2NrLgotICoKLSAqIFRoaXMgd2lsbCBzYXZlIHNjbWQgcG9pbnRlciBpbiB0aGUgc2NzaV9sb29rdXAgYXJyYXkuCi0gKgotICogUmV0dXJuIG5vdGhpbmcuCi0gKi8KLXN0YXRpYyB2b2lkCi1fc2NzaWhfc2NzaV9sb29rdXBfc2V0KHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IHNtaWQsCi0gICAgc3RydWN0IHNjc2lfY21uZCAqc2NtZCkKLXsKLQl1bnNpZ25lZCBsb25nCWZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+c2NzaV9sb29rdXBfbG9jaywgZmxhZ3MpOwotCWlvYy0+c2NzaV9sb29rdXBbc21pZCAtIDFdLnNjbWQgPSBzY21kOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+c2NzaV9sb29rdXBfbG9jaywgZmxhZ3MpOworCXJldHVybiBpb2MtPnNjc2lfbG9va3VwW3NtaWQgLSAxXS5zY21kOwogfQogCiAvKioKQEAgLTgzOCw5ICs3OTcsOSBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+c2NzaV9sb29rdXBfbG9jaywgZmxhZ3MpOwogCXNtaWQgPSAwOwotCWZvciAoaSA9IDA7IGkgPCBpb2MtPnJlcXVlc3RfZGVwdGg7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBpb2MtPnNjc2lpb19kZXB0aDsgaSsrKSB7CiAJCWlmIChpb2MtPnNjc2lfbG9va3VwW2ldLnNjbWQgPT0gc2NtZCkgewotCQkJc21pZCA9IGkgKyAxOworCQkJc21pZCA9IGlvYy0+c2NzaV9sb29rdXBbaV0uc21pZDsKIAkJCWdvdG8gb3V0OwogCQl9CiAJfQpAQCAtODY5LDcgKzgyOCw3IEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5zY3NpX2xvb2t1cF9sb2NrLCBmbGFncyk7CiAJZm91bmQgPSAwOwotCWZvciAoaSA9IDAgOyBpIDwgaW9jLT5yZXF1ZXN0X2RlcHRoOyBpKyspIHsKKwlmb3IgKGkgPSAwIDsgaSA8IGlvYy0+c2NzaWlvX2RlcHRoOyBpKyspIHsKIAkJaWYgKGlvYy0+c2NzaV9sb29rdXBbaV0uc2NtZCAmJgogCQkgICAgKGlvYy0+c2NzaV9sb29rdXBbaV0uc2NtZC0+ZGV2aWNlLT5pZCA9PSBpZCAmJgogCQkgICAgaW9jLT5zY3NpX2xvb2t1cFtpXS5zY21kLT5kZXZpY2UtPmNoYW5uZWwgPT0gY2hhbm5lbCkpIHsKQEAgLTkwMyw3ICs4NjIsNyBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+c2NzaV9sb29rdXBfbG9jaywgZmxhZ3MpOwogCWZvdW5kID0gMDsKLQlmb3IgKGkgPSAwIDsgaSA8IGlvYy0+cmVxdWVzdF9kZXB0aDsgaSsrKSB7CisJZm9yIChpID0gMCA7IGkgPCBpb2MtPnNjc2lpb19kZXB0aDsgaSsrKSB7CiAJCWlmIChpb2MtPnNjc2lfbG9va3VwW2ldLnNjbWQgJiYKIAkJICAgIChpb2MtPnNjc2lfbG9va3VwW2ldLnNjbWQtPmRldmljZS0+aWQgPT0gaWQgJiYKIAkJICAgIGlvYy0+c2NzaV9sb29rdXBbaV0uc2NtZC0+ZGV2aWNlLT5jaGFubmVsID09IGNoYW5uZWwgJiYKQEAgLTExMTMsNyArMTA3Miw3IEBACiB9CiAKIC8qKgotICogX3Njc2loX2NoYW5nZV9xdWV1ZV9kZXB0aCAtIGNoYW5naW5nIGRldmljZSBxdWV1ZSB0YWcgdHlwZQorICogX3Njc2loX2NoYW5nZV9xdWV1ZV90eXBlIC0gY2hhbmdpbmcgZGV2aWNlIHF1ZXVlIHRhZyB0eXBlCiAgKiBAc2Rldjogc2NzaSBkZXZpY2Ugc3RydWN0CiAgKiBAdGFnX3R5cGU6IHJlcXVlc3RlZCB0YWcgdHlwZQogICoKQEAgLTE2NzksMjMgKzE2MzgsMjQgQEAKICAqIF9zY3NpaF90bV9kb25lIC0gdG0gY29tcGxldGlvbiByb3V0aW5lCiAgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKICAqIEBzbWlkOiBzeXN0ZW0gcmVxdWVzdCBtZXNzYWdlIGluZGV4Ci0gKiBAVkZfSUQ6IHZpcnR1YWwgZnVuY3Rpb24gaWQKKyAqIEBtc2l4X2luZGV4OiBNU0lYIHRhYmxlIGluZGV4IHN1cHBsaWVkIGJ5IHRoZSBPUwogICogQHJlcGx5OiByZXBseSBtZXNzYWdlIGZyYW1lKGxvd2VyIDMyYml0IGFkZHIpCiAgKiBDb250ZXh0OiBub25lLgogICoKICAqIFRoZSBjYWxsYmFjayBoYW5kbGVyIHdoZW4gdXNpbmcgc2NzaWhfaXNzdWVfdG0uCiAgKgotICogUmV0dXJuIG5vdGhpbmcuCisgKiBSZXR1cm4gMSBtZWFuaW5nIG1mIHNob3VsZCBiZSBmcmVlZCBmcm9tIF9iYXNlX2ludGVycnVwdAorICogICAgICAgIDAgbWVhbnMgdGhlIG1mIGlzIGZyZWVkIGZyb20gdGhpcyBmdW5jdGlvbi4KICAqLwotc3RhdGljIHZvaWQKLV9zY3NpaF90bV9kb25lKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IHNtaWQsIHU4IFZGX0lELCB1MzIgcmVwbHkpCitzdGF0aWMgdTgKK19zY3NpaF90bV9kb25lKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IHNtaWQsIHU4IG1zaXhfaW5kZXgsIHUzMiByZXBseSkKIHsKIAlNUEkyRGVmYXVsdFJlcGx5X3QgKm1waV9yZXBseTsKIAogCWlmIChpb2MtPnRtX2NtZHMuc3RhdHVzID09IE1QVDJfQ01EX05PVF9VU0VEKQotCQlyZXR1cm47CisJCXJldHVybiAxOwogCWlmIChpb2MtPnRtX2NtZHMuc21pZCAhPSBzbWlkKQotCQlyZXR1cm47CisJCXJldHVybiAxOwogCWlvYy0+dG1fY21kcy5zdGF0dXMgfD0gTVBUMl9DTURfQ09NUExFVEU7CiAJbXBpX3JlcGx5ID0gIG1wdDJzYXNfYmFzZV9nZXRfcmVwbHlfdmlydF9hZGRyKGlvYywgcmVwbHkpOwogCWlmIChtcGlfcmVwbHkpIHsKQEAgLTE3MDQsNiArMTY2NCw3IEBACiAJfQogCWlvYy0+dG1fY21kcy5zdGF0dXMgJj0gfk1QVDJfQ01EX1BFTkRJTkc7CiAJY29tcGxldGUoJmlvYy0+dG1fY21kcy5kb25lKTsKKwlyZXR1cm4gMTsKIH0KIAogLyoqCkBAIC0xNzkwLDcgKzE3NTEsNiBAQAogCXUxNiBzbWlkID0gMDsKIAl1MzIgaW9jX3N0YXRlOwogCXVuc2lnbmVkIGxvbmcgdGltZWxlZnQ7Ci0JdTggVkZfSUQgPSAwOwogCiAJaWYgKGlvYy0+dG1fY21kcy5zdGF0dXMgIT0gTVBUMl9DTURfTk9UX1VTRUQpIHsKIAkJcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgIiVzOiB0bV9jbWQgYnVzeSEhIVxuIiwKQEAgLTE4MTcsNyArMTc3Nyw3IEBACiAJCWdvdG8gaXNzdWVfaG9zdF9yZXNldDsKIAl9CiAKLQlzbWlkID0gbXB0MnNhc19iYXNlX2dldF9zbWlkKGlvYywgaW9jLT50bV9jYl9pZHgpOworCXNtaWQgPSBtcHQyc2FzX2Jhc2VfZ2V0X3NtaWRfaHByKGlvYywgaW9jLT50bV9jYl9pZHgpOwogCWlmICghc21pZCkgewogCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICIlczogZmFpbGVkIG9idGFpbmluZyBhIHNtaWRcbiIsCiAJCSAgICBpb2MtPm5hbWUsIF9fZnVuY19fKTsKQEAgLTE4MjUsNyArMTc4NSw4IEBACiAJfQogCiAJZHRtcHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgInNlbmRpbmcgdG06IGhhbmRsZSgweCUwNHgpLCIKLQkgICAgIiB0YXNrX3R5cGUoMHglMDJ4KSwgc21pZCglZClcbiIsIGlvYy0+bmFtZSwgaGFuZGxlLCB0eXBlLCBzbWlkKSk7CisJICAgICIgdGFza190eXBlKDB4JTAyeCksIHNtaWQoJWQpXG4iLCBpb2MtPm5hbWUsIGhhbmRsZSwgdHlwZSwKKwkgICAgc21pZF90YXNrKSk7CiAJaW9jLT50bV9jbWRzLnN0YXR1cyA9IE1QVDJfQ01EX1BFTkRJTkc7CiAJbXBpX3JlcXVlc3QgPSBtcHQyc2FzX2Jhc2VfZ2V0X21zZ19mcmFtZShpb2MsIHNtaWQpOwogCWlvYy0+dG1fY21kcy5zbWlkID0gc21pZDsKQEAgLTE4MzQsMTAgKzE3OTUsMTIgQEAKIAltcGlfcmVxdWVzdC0+RGV2SGFuZGxlID0gY3B1X3RvX2xlMTYoaGFuZGxlKTsKIAltcGlfcmVxdWVzdC0+VGFza1R5cGUgPSB0eXBlOwogCW1waV9yZXF1ZXN0LT5UYXNrTUlEID0gY3B1X3RvX2xlMTYoc21pZF90YXNrKTsKKwltcGlfcmVxdWVzdC0+VlBfSUQgPSAwOyAgLyogVE9ETyAqLworCW1waV9yZXF1ZXN0LT5WRl9JRCA9IDA7CiAJaW50X3RvX3Njc2lsdW4obHVuLCAoc3RydWN0IHNjc2lfbHVuICopbXBpX3JlcXVlc3QtPkxVTik7CiAJbXB0MnNhc19zY3NpaF9zZXRfdG1fZmxhZyhpb2MsIGhhbmRsZSk7CiAJaW5pdF9jb21wbGV0aW9uKCZpb2MtPnRtX2NtZHMuZG9uZSk7Ci0JbXB0MnNhc19iYXNlX3B1dF9zbWlkX2hpX3ByaW9yaXR5KGlvYywgc21pZCwgVkZfSUQpOworCW1wdDJzYXNfYmFzZV9wdXRfc21pZF9oaV9wcmlvcml0eShpb2MsIHNtaWQpOwogCXRpbWVsZWZ0ID0gd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZpb2MtPnRtX2NtZHMuZG9uZSwgdGltZW91dCpIWik7CiAJbXB0MnNhc19zY3NpaF9jbGVhcl90bV9mbGFnKGlvYywgaGFuZGxlKTsKIAlpZiAoIShpb2MtPnRtX2NtZHMuc3RhdHVzICYgTVBUMl9DTURfQ09NUExFVEUpKSB7CkBAIC0yMDc1LDcgKzIwMzgsNyBAQAogfQogCiAvKioKLSAqIF9zY3NpaF9hYm9ydCAtIGVoIHRocmVhZHMgbWFpbiBob3N0IHJlc2V0IHJvdXRpbmUKKyAqIF9zY3NpaF9ob3N0X3Jlc2V0IC0gZWggdGhyZWFkcyBtYWluIGhvc3QgcmVzZXQgcm91dGluZQogICogQHNkZXY6IHNjc2kgZGV2aWNlIHN0cnVjdAogICoKICAqIFJldHVybnMgU1VDQ0VTUyBpZiBjb21tYW5kIGFib3J0ZWQgZWxzZSBGQUlMRUQKQEAgLTIzNTQsNiArMjMxNywyMzEgQEAKIH0KIAogLyoqCisgKiBfc2NzaWhfdG1fdHJfc2VuZCAtIHNlbmQgdGFzayBtYW5hZ2VtZW50IHJlcXVlc3QKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQGhhbmRsZTogZGV2aWNlIGhhbmRsZQorICogQ29udGV4dDogaW50ZXJydXB0IHRpbWUuCisgKgorICogVGhpcyBjb2RlIGlzIHRvIGluaXRpYXRlIHRoZSBkZXZpY2UgcmVtb3ZhbCBoYW5kc2hha2UgcHJvdG9jYWwKKyAqIHdpdGggY29udHJvbGxlciBmaXJtd2FyZS4gIFRoaXMgZnVuY3Rpb24gd2lsbCBpc3N1ZSB0YXJnZXQgcmVzZXQKKyAqIHVzaW5nIGhpZ2ggcHJpb3JpdHkgcmVxdWVzdCBxdWV1ZS4gIEl0IHdpbGwgc2VuZCBhIHNhcyBpb3VuaXQKKyAqIGNvbnRyb2xsIHJlcXVlc3QgKE1QSTJfU0FTX09QX1JFTU9WRV9ERVZJQ0UpIGZyb20gdGhpcyBjb21wbGV0aW9uLgorICoKKyAqIFRoaXMgaXMgZGVzaWduZWQgdG8gc2VuZCBtdWxpcGxlIHRhc2sgbWFuYWdlbWVudCByZXF1ZXN0IGF0IHRoZSBzYW1lCisgKiB0aW1lIHRvIHRoZSBmaWZvLiBJZiB0aGUgZmlmbyBpcyBmdWxsLCB3ZSB3aWxsIGFwcGVuZCB0aGUgcmVxdWVzdCwKKyAqIGFuZCBwcm9jZXNzIGl0IGluIGEgZnV0dXJlIGNvbXBsZXRpb24uCisgKi8KK3N0YXRpYyB2b2lkCitfc2NzaWhfdG1fdHJfc2VuZChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBoYW5kbGUpCit7CisJTXBpMlNDU0lUYXNrTWFuYWdlbWVudFJlcXVlc3RfdCAqbXBpX3JlcXVlc3Q7CisJc3RydWN0IE1QVDJTQVNfVEFSR0VUICpzYXNfdGFyZ2V0X3ByaXZfZGF0YTsKKwl1MTYgc21pZDsKKwlzdHJ1Y3QgX3Nhc19kZXZpY2UgKnNhc19kZXZpY2U7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgX3RyX2xpc3QgKmRlbGF5ZWRfdHI7CisKKwlpZiAoaW9jLT5zaG9zdF9yZWNvdmVyeSkgeworCQlwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAiJXM6IGhvc3QgcmVzZXQgaW4gcHJvZ3Jlc3MhXG4iLAorCQkgICAgX19mdW5jX18sIGlvYy0+bmFtZSk7CisJCXJldHVybjsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5zYXNfZGV2aWNlX2xvY2ssIGZsYWdzKTsKKwlzYXNfZGV2aWNlID0gX3Njc2loX3Nhc19kZXZpY2VfZmluZF9ieV9oYW5kbGUoaW9jLCBoYW5kbGUpOworCWlmICghc2FzX2RldmljZSkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPnNhc19kZXZpY2VfbG9jaywgZmxhZ3MpOworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICIlczogZmFpbGVkIGZpbmRpbmcgc2FzX2RldmljZVxuIiwKKwkJICAgIGlvYy0+bmFtZSwgX19mdW5jX18pOworCQlyZXR1cm47CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+c2FzX2RldmljZV9sb2NrLCBmbGFncyk7CisKKwkvKiBza2lwIGlzIGhpZGRlbiByYWlkIGNvbXBvbmVudCAqLworCWlmIChzYXNfZGV2aWNlLT5oaWRkZW5fcmFpZF9jb21wb25lbnQpCisJCXJldHVybjsKKworCXNtaWQgPSBtcHQyc2FzX2Jhc2VfZ2V0X3NtaWRfaHByKGlvYywgaW9jLT50bV90cl9jYl9pZHgpOworCWlmICghc21pZCkgeworCQlkZWxheWVkX3RyID0ga3phbGxvYyhzaXplb2YoKmRlbGF5ZWRfdHIpLCBHRlBfQVRPTUlDKTsKKwkJaWYgKCFkZWxheWVkX3RyKQorCQkJcmV0dXJuOworCQlJTklUX0xJU1RfSEVBRCgmZGVsYXllZF90ci0+bGlzdCk7CisJCWRlbGF5ZWRfdHItPmhhbmRsZSA9IGhhbmRsZTsKKwkJZGVsYXllZF90ci0+c3RhdGUgPSBNUFQyU0FTX1JFUV9TQVNfQ05UUkw7CisJCWxpc3RfYWRkX3RhaWwoJmRlbGF5ZWRfdHItPmxpc3QsCisJCSAgICAmaW9jLT5kZWxheWVkX3RyX2xpc3QpOworCQlpZiAoc2FzX2RldmljZS0+c3RhcmdldCkKKwkJCWRld3RwcmludGsoaW9jLCBzdGFyZ2V0X3ByaW50ayhLRVJOX0lORk8sCisJCQkgICAgc2FzX2RldmljZS0+c3RhcmdldCwgIkRFTEFZRUQ6dHI6aGFuZGxlKDB4JTA0eCksICIKKwkJCSAgICAiKG9wZW4pXG4iLCBzYXNfZGV2aWNlLT5oYW5kbGUpKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChzYXNfZGV2aWNlLT5zdGFyZ2V0ICYmIHNhc19kZXZpY2UtPnN0YXJnZXQtPmhvc3RkYXRhKSB7CisJCXNhc190YXJnZXRfcHJpdl9kYXRhID0gc2FzX2RldmljZS0+c3RhcmdldC0+aG9zdGRhdGE7CisJCXNhc190YXJnZXRfcHJpdl9kYXRhLT50bV9idXN5ID0gMTsKKwkJZGV3dHByaW50ayhpb2MsIHN0YXJnZXRfcHJpbnRrKEtFUk5fSU5GTywgc2FzX2RldmljZS0+c3RhcmdldCwKKwkJICAgICJ0cjpoYW5kbGUoMHglMDR4KSwgKG9wZW4pXG4iLCBzYXNfZGV2aWNlLT5oYW5kbGUpKTsKKwl9CisKKwltcGlfcmVxdWVzdCA9IG1wdDJzYXNfYmFzZV9nZXRfbXNnX2ZyYW1lKGlvYywgc21pZCk7CisJbWVtc2V0KG1waV9yZXF1ZXN0LCAwLCBzaXplb2YoTXBpMlNDU0lUYXNrTWFuYWdlbWVudFJlcXVlc3RfdCkpOworCW1waV9yZXF1ZXN0LT5GdW5jdGlvbiA9IE1QSTJfRlVOQ1RJT05fU0NTSV9UQVNLX01HTVQ7CisJbXBpX3JlcXVlc3QtPkRldkhhbmRsZSA9IGNwdV90b19sZTE2KGhhbmRsZSk7CisJbXBpX3JlcXVlc3QtPlRhc2tUeXBlID0gTVBJMl9TQ1NJVEFTS01HTVRfVEFTS1RZUEVfVEFSR0VUX1JFU0VUOworCXNhc19kZXZpY2UtPnN0YXRlIHw9IE1QVFNBU19TVEFURV9UUl9TRU5EOworCXNhc19kZXZpY2UtPnN0YXRlIHw9IE1QVDJTQVNfUkVRX1NBU19DTlRSTDsKKwltcHQyc2FzX2Jhc2VfcHV0X3NtaWRfaGlfcHJpb3JpdHkoaW9jLCBzbWlkKTsKK30KKworCisKKy8qKgorICogX3Njc2loX3Nhc19jb250cm9sX2NvbXBsZXRlIC0gY29tcGxldGlvbiByb3V0aW5lCisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEBzbWlkOiBzeXN0ZW0gcmVxdWVzdCBtZXNzYWdlIGluZGV4CisgKiBAbXNpeF9pbmRleDogTVNJWCB0YWJsZSBpbmRleCBzdXBwbGllZCBieSB0aGUgT1MKKyAqIEByZXBseTogcmVwbHkgbWVzc2FnZSBmcmFtZShsb3dlciAzMmJpdCBhZGRyKQorICogQ29udGV4dDogaW50ZXJydXB0IHRpbWUuCisgKgorICogVGhpcyBpcyB0aGUgc2FzIGlvdW5pdCBjb250cm9sbCBjb21wbGV0aW9uIHJvdXRpbmUuCisgKiBUaGlzIGNvZGUgaXMgcGFydCBvZiB0aGUgY29kZSB0byBpbml0aWF0ZSB0aGUgZGV2aWNlIHJlbW92YWwKKyAqIGhhbmRzaGFrZSBwcm90b2NhbCB3aXRoIGNvbnRyb2xsZXIgZmlybXdhcmUuCisgKgorICogUmV0dXJuIDEgbWVhbmluZyBtZiBzaG91bGQgYmUgZnJlZWQgZnJvbSBfYmFzZV9pbnRlcnJ1cHQKKyAqICAgICAgICAwIG1lYW5zIHRoZSBtZiBpcyBmcmVlZCBmcm9tIHRoaXMgZnVuY3Rpb24uCisgKi8KK3N0YXRpYyB1OAorX3Njc2loX3Nhc19jb250cm9sX2NvbXBsZXRlKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IHNtaWQsCisgICAgdTggbXNpeF9pbmRleCwgdTMyIHJlcGx5KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTE2IGhhbmRsZTsKKwlzdHJ1Y3QgX3Nhc19kZXZpY2UgKnNhc19kZXZpY2U7CisJTXBpMlNhc0lvVW5pdENvbnRyb2xSZXBseV90ICptcGlfcmVwbHkgPQorCSAgICBtcHQyc2FzX2Jhc2VfZ2V0X3JlcGx5X3ZpcnRfYWRkcihpb2MsIHJlcGx5KTsKKworCWhhbmRsZSA9IGxlMTZfdG9fY3B1KG1waV9yZXBseS0+RGV2SGFuZGxlKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpb2MtPnNhc19kZXZpY2VfbG9jaywgZmxhZ3MpOworCXNhc19kZXZpY2UgPSBfc2NzaWhfc2FzX2RldmljZV9maW5kX2J5X2hhbmRsZShpb2MsIGhhbmRsZSk7CisJaWYgKCFzYXNfZGV2aWNlKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+c2FzX2RldmljZV9sb2NrLCBmbGFncyk7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgIiVzOiBmYWlsZWQgZmluZGluZyBzYXNfZGV2aWNlXG4iLAorCQkgICAgaW9jLT5uYW1lLCBfX2Z1bmNfXyk7CisJCXJldHVybiAxOworCX0KKwlzYXNfZGV2aWNlLT5zdGF0ZSB8PSBNUFRTQVNfU1RBVEVfQ05UUkxfQ09NUExFVEU7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5zYXNfZGV2aWNlX2xvY2ssIGZsYWdzKTsKKworCWlmIChzYXNfZGV2aWNlLT5zdGFyZ2V0KQorCQlkZXd0cHJpbnRrKGlvYywgc3RhcmdldF9wcmludGsoS0VSTl9JTkZPLCBzYXNfZGV2aWNlLT5zdGFyZ2V0LAorCQkgICAgInNjX2NvbXBsZXRlOmhhbmRsZSgweCUwNHgpLCAiCisJCSAgICAiaW9jX3N0YXR1cygweCUwNHgpLCBsb2dpbmZvKDB4JTA4eClcbiIsCisJCSAgICBoYW5kbGUsIGxlMTZfdG9fY3B1KG1waV9yZXBseS0+SU9DU3RhdHVzKSwKKwkJICAgIGxlMzJfdG9fY3B1KG1waV9yZXBseS0+SU9DTG9nSW5mbykpKTsKKwlyZXR1cm4gMTsKK30KKworLyoqCisgKiBfc2NzaWhfdG1fdHJfY29tcGxldGUgLQorICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CisgKiBAc21pZDogc3lzdGVtIHJlcXVlc3QgbWVzc2FnZSBpbmRleAorICogQG1zaXhfaW5kZXg6IE1TSVggdGFibGUgaW5kZXggc3VwcGxpZWQgYnkgdGhlIE9TCisgKiBAcmVwbHk6IHJlcGx5IG1lc3NhZ2UgZnJhbWUobG93ZXIgMzJiaXQgYWRkcikKKyAqIENvbnRleHQ6IGludGVycnVwdCB0aW1lLgorICoKKyAqIFRoaXMgaXMgdGhlIHRhcmdldCByZXNldCBjb21wbGV0aW9uIHJvdXRpbmUuCisgKiBUaGlzIGNvZGUgaXMgcGFydCBvZiB0aGUgY29kZSB0byBpbml0aWF0ZSB0aGUgZGV2aWNlIHJlbW92YWwKKyAqIGhhbmRzaGFrZSBwcm90b2NhbCB3aXRoIGNvbnRyb2xsZXIgZmlybXdhcmUuCisgKiBJdCB3aWxsIHNlbmQgYSBzYXMgaW91bml0IGNvbnRyb2xsIHJlcXVlc3QgKE1QSTJfU0FTX09QX1JFTU9WRV9ERVZJQ0UpCisgKgorICogUmV0dXJuIDEgbWVhbmluZyBtZiBzaG91bGQgYmUgZnJlZWQgZnJvbSBfYmFzZV9pbnRlcnJ1cHQKKyAqICAgICAgICAwIG1lYW5zIHRoZSBtZiBpcyBmcmVlZCBmcm9tIHRoaXMgZnVuY3Rpb24uCisgKi8KK3N0YXRpYyB1OAorX3Njc2loX3RtX3RyX2NvbXBsZXRlKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IHNtaWQsIHU4IG1zaXhfaW5kZXgsCisgICAgdTMyIHJlcGx5KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTE2IGhhbmRsZTsKKwlzdHJ1Y3QgX3Nhc19kZXZpY2UgKnNhc19kZXZpY2U7CisJTXBpMlNDU0lUYXNrTWFuYWdlbWVudFJlcGx5X3QgKm1waV9yZXBseSA9CisJICAgIG1wdDJzYXNfYmFzZV9nZXRfcmVwbHlfdmlydF9hZGRyKGlvYywgcmVwbHkpOworCU1waTJTYXNJb1VuaXRDb250cm9sUmVxdWVzdF90ICptcGlfcmVxdWVzdDsKKwl1MTYgc21pZF9zYXNfY3RybDsKKwlzdHJ1Y3QgTVBUMlNBU19UQVJHRVQgKnNhc190YXJnZXRfcHJpdl9kYXRhOworCXN0cnVjdCBfdHJfbGlzdCAqZGVsYXllZF90cjsKKwl1OCByYzsKKworCWhhbmRsZSA9IGxlMTZfdG9fY3B1KG1waV9yZXBseS0+RGV2SGFuZGxlKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5zYXNfZGV2aWNlX2xvY2ssIGZsYWdzKTsKKwlzYXNfZGV2aWNlID0gX3Njc2loX3Nhc19kZXZpY2VfZmluZF9ieV9oYW5kbGUoaW9jLCBoYW5kbGUpOworCWlmICghc2FzX2RldmljZSkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPnNhc19kZXZpY2VfbG9jaywgZmxhZ3MpOworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICIlczogZmFpbGVkIGZpbmRpbmcgc2FzX2RldmljZVxuIiwKKwkJICAgIGlvYy0+bmFtZSwgX19mdW5jX18pOworCQlyZXR1cm4gMTsKKwl9CisJc2FzX2RldmljZS0+c3RhdGUgfD0gTVBUU0FTX1NUQVRFX1RSX0NPTVBMRVRFOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+c2FzX2RldmljZV9sb2NrLCBmbGFncyk7CisKKwlpZiAoc2FzX2RldmljZS0+c3RhcmdldCkKKwkJZGV3dHByaW50ayhpb2MsIHN0YXJnZXRfcHJpbnRrKEtFUk5fSU5GTywgc2FzX2RldmljZS0+c3RhcmdldCwKKwkJICAgICJ0cl9jb21wbGV0ZTpoYW5kbGUoMHglMDR4KSwgKCVzKSBpb2Nfc3RhdHVzKDB4JTA0eCksICIKKwkJICAgICJsb2dpbmZvKDB4JTA4eCksIGNvbXBsZXRlZCglZClcbiIsCisJCSAgICBzYXNfZGV2aWNlLT5oYW5kbGUsIChzYXNfZGV2aWNlLT5zdGF0ZSAmCisJCSAgICBNUFQyU0FTX1JFUV9TQVNfQ05UUkwpID8gIm9wZW4iIDogImFjdGl2ZSIsCisJCSAgICBsZTE2X3RvX2NwdShtcGlfcmVwbHktPklPQ1N0YXR1cyksCisJCSAgICBsZTMyX3RvX2NwdShtcGlfcmVwbHktPklPQ0xvZ0luZm8pLAorCQkgICAgbGUzMl90b19jcHUobXBpX3JlcGx5LT5UZXJtaW5hdGlvbkNvdW50KSkpOworCisJaWYgKHNhc19kZXZpY2UtPnN0YXJnZXQgJiYgc2FzX2RldmljZS0+c3RhcmdldC0+aG9zdGRhdGEpIHsKKwkJc2FzX3RhcmdldF9wcml2X2RhdGEgPSBzYXNfZGV2aWNlLT5zdGFyZ2V0LT5ob3N0ZGF0YTsKKwkJc2FzX3RhcmdldF9wcml2X2RhdGEtPnRtX2J1c3kgPSAwOworCX0KKworCWlmICghbGlzdF9lbXB0eSgmaW9jLT5kZWxheWVkX3RyX2xpc3QpKSB7CisJCWRlbGF5ZWRfdHIgPSBsaXN0X2VudHJ5KGlvYy0+ZGVsYXllZF90cl9saXN0Lm5leHQsCisJCSAgICBzdHJ1Y3QgX3RyX2xpc3QsIGxpc3QpOworCQltcHQyc2FzX2Jhc2VfZnJlZV9zbWlkKGlvYywgc21pZCk7CisJCWlmIChkZWxheWVkX3RyLT5zdGF0ZSAmIE1QVDJTQVNfUkVRX1NBU19DTlRSTCkKKwkJCV9zY3NpaF90bV90cl9zZW5kKGlvYywgZGVsYXllZF90ci0+aGFuZGxlKTsKKwkJbGlzdF9kZWwoJmRlbGF5ZWRfdHItPmxpc3QpOworCQlrZnJlZShkZWxheWVkX3RyKTsKKwkJcmMgPSAwOyAvKiB0ZWxscyBiYXNlX2ludGVycnVwdCBub3QgdG8gZnJlZSBtZiAqLworCX0gZWxzZQorCQlyYyA9IDE7CisKKworCWlmICghKHNhc19kZXZpY2UtPnN0YXRlICYgTVBUMlNBU19SRVFfU0FTX0NOVFJMKSkKKwkJcmV0dXJuIHJjOworCisJaWYgKGlvYy0+c2hvc3RfcmVjb3ZlcnkpIHsKKwkJcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgIiVzOiBob3N0IHJlc2V0IGluIHByb2dyZXNzIVxuIiwKKwkJICAgIF9fZnVuY19fLCBpb2MtPm5hbWUpOworCQlyZXR1cm4gcmM7CisJfQorCisJc21pZF9zYXNfY3RybCA9IG1wdDJzYXNfYmFzZV9nZXRfc21pZChpb2MsIGlvYy0+dG1fc2FzX2NvbnRyb2xfY2JfaWR4KTsKKwlpZiAoIXNtaWRfc2FzX2N0cmwpIHsKKwkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiJXM6IGZhaWxlZCBvYnRhaW5pbmcgYSBzbWlkXG4iLAorCQkgICAgaW9jLT5uYW1lLCBfX2Z1bmNfXyk7CisJCXJldHVybiByYzsKKwl9CisKKwltcGlfcmVxdWVzdCA9IG1wdDJzYXNfYmFzZV9nZXRfbXNnX2ZyYW1lKGlvYywgc21pZF9zYXNfY3RybCk7CisJbWVtc2V0KG1waV9yZXF1ZXN0LCAwLCBzaXplb2YoTXBpMlNhc0lvVW5pdENvbnRyb2xSZXF1ZXN0X3QpKTsKKwltcGlfcmVxdWVzdC0+RnVuY3Rpb24gPSBNUEkyX0ZVTkNUSU9OX1NBU19JT19VTklUX0NPTlRST0w7CisJbXBpX3JlcXVlc3QtPk9wZXJhdGlvbiA9IE1QSTJfU0FTX09QX1JFTU9WRV9ERVZJQ0U7CisJbXBpX3JlcXVlc3QtPkRldkhhbmRsZSA9IG1waV9yZXBseS0+RGV2SGFuZGxlOworCXNhc19kZXZpY2UtPnN0YXRlIHw9IE1QVFNBU19TVEFURV9DTlRSTF9TRU5EOworCW1wdDJzYXNfYmFzZV9wdXRfc21pZF9kZWZhdWx0KGlvYywgc21pZF9zYXNfY3RybCk7CisJcmV0dXJuIHJjOworfQorCisvKioKICAqIF9zY3NpaF9jaGVja190b3BvX2RlbGV0ZV9ldmVudHMgLSBzYW5pdHkgY2hlY2sgb24gdG9wbyBldmVudHMKICAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAogICogQGV2ZW50X2RhdGE6IHRoZSBldmVudCBkYXRhIHBheWxvYWQKQEAgLTIzNzUsNiArMjU2MywyMSBAQAogCXUxNiBleHBhbmRlcl9oYW5kbGU7CiAJc3RydWN0IF9zYXNfbm9kZSAqc2FzX2V4cGFuZGVyOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGksIHJlYXNvbl9jb2RlOworCXUxNiBoYW5kbGU7CisKKwlmb3IgKGkgPSAwIDsgaSA8IGV2ZW50X2RhdGEtPk51bUVudHJpZXM7IGkrKykgeworCQlpZiAoZXZlbnRfZGF0YS0+UEhZW2ldLlBoeVN0YXR1cyAmCisJCSAgICBNUEkyX0VWRU5UX1NBU19UT1BPX1BIWVNUQVRVU19WQUNBTlQpCisJCQljb250aW51ZTsKKwkJaGFuZGxlID0gbGUxNl90b19jcHUoZXZlbnRfZGF0YS0+UEhZW2ldLkF0dGFjaGVkRGV2SGFuZGxlKTsKKwkJaWYgKCFoYW5kbGUpCisJCQljb250aW51ZTsKKwkJcmVhc29uX2NvZGUgPSBldmVudF9kYXRhLT5QSFlbaV0uUGh5U3RhdHVzICYKKwkJICAgIE1QSTJfRVZFTlRfU0FTX1RPUE9fUkNfTUFTSzsKKwkJaWYgKHJlYXNvbl9jb2RlID09IE1QSTJfRVZFTlRfU0FTX1RPUE9fUkNfVEFSR19OT1RfUkVTUE9ORElORykKKwkJCV9zY3NpaF90bV90cl9zZW5kKGlvYywgaGFuZGxlKTsKKwl9CiAKIAlleHBhbmRlcl9oYW5kbGUgPSBsZTE2X3RvX2NwdShldmVudF9kYXRhLT5FeHBhbmRlckRldkhhbmRsZSk7CiAJaWYgKGV4cGFuZGVyX2hhbmRsZSA8IGlvYy0+c2FzX2hiYS5udW1fcGh5cykgewpAQCAtMjQzMyw4ICsyNjM2LDggQEAKIAl1MTYgc21pZDsKIAl1MTYgY291bnQgPSAwOwogCi0JZm9yIChzbWlkID0gMTsgc21pZCA8PSBpb2MtPnJlcXVlc3RfZGVwdGg7IHNtaWQrKykgewotCQlzY21kID0gX3Njc2loX3Njc2lfbG9va3VwX2dldGNsZWFyKGlvYywgc21pZCk7CisJZm9yIChzbWlkID0gMTsgc21pZCA8PSBpb2MtPnNjc2lpb19kZXB0aDsgc21pZCsrKSB7CisJCXNjbWQgPSBfc2NzaWhfc2NzaV9sb29rdXBfZ2V0KGlvYywgc21pZCk7CiAJCWlmICghc2NtZCkKIAkJCWNvbnRpbnVlOwogCQljb3VudCsrOwpAQCAtMjYxNiw3ICsyODE5LDcgQEAKIAlpZiAoKHNhc19kZXZpY2VfcHJpdl9kYXRhLT5mbGFncyAmIE1QVF9ERVZJQ0VfVExSX09OKSkKIAkJbXBpX2NvbnRyb2wgfD0gTVBJMl9TQ1NJSU9fQ09OVFJPTF9UTFJfT047CiAKLQlzbWlkID0gbXB0MnNhc19iYXNlX2dldF9zbWlkKGlvYywgaW9jLT5zY3NpX2lvX2NiX2lkeCk7CisJc21pZCA9IG1wdDJzYXNfYmFzZV9nZXRfc21pZF9zY3NpaW8oaW9jLCBpb2MtPnNjc2lfaW9fY2JfaWR4LCBzY21kKTsKIAlpZiAoIXNtaWQpIHsKIAkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiJXM6IGZhaWxlZCBvYnRhaW5pbmcgYSBzbWlkXG4iLAogCQkgICAgaW9jLT5uYW1lLCBfX2Z1bmNfXyk7CkBAIC0yNjQzLDcgKzI4NDYsOCBAQAogCW1waV9yZXF1ZXN0LT5TR0xPZmZzZXQwID0gb2Zmc2V0b2YoTXBpMlNDU0lJT1JlcXVlc3RfdCwgU0dMKSAvIDQ7CiAJbXBpX3JlcXVlc3QtPlNHTEZsYWdzID0gY3B1X3RvX2xlMTYoTVBJMl9TQ1NJSU9fU0dMRkxBR1NfVFlQRV9NUEkgKwogCSAgICBNUEkyX1NDU0lJT19TR0xGTEFHU19TWVNURU1fQUREUik7Ci0KKwltcGlfcmVxdWVzdC0+VkZfSUQgPSAwOyAvKiBUT0RPICovCisJbXBpX3JlcXVlc3QtPlZQX0lEID0gMDsKIAlpbnRfdG9fc2NzaWx1bihzYXNfZGV2aWNlX3ByaXZfZGF0YS0+bHVuLCAoc3RydWN0IHNjc2lfbHVuICopCiAJICAgIG1waV9yZXF1ZXN0LT5MVU4pOwogCW1lbWNweShtcGlfcmVxdWVzdC0+Q0RCLkNEQjMyLCBzY21kLT5jbW5kLCBzY21kLT5jbWRfbGVuKTsKQEAgLTI2NTcsOCArMjg2MSw3IEBACiAJCX0KIAl9CiAKLQlfc2NzaWhfc2NzaV9sb29rdXBfc2V0KGlvYywgc21pZCwgc2NtZCk7Ci0JbXB0MnNhc19iYXNlX3B1dF9zbWlkX3Njc2lfaW8oaW9jLCBzbWlkLCAwLAorCW1wdDJzYXNfYmFzZV9wdXRfc21pZF9zY3NpX2lvKGlvYywgc21pZCwKIAkgICAgc2FzX2RldmljZV9wcml2X2RhdGEtPnNhc190YXJnZXQtPmhhbmRsZSk7CiAJcmV0dXJuIDA7CiAKQEAgLTI5NTQsMTUgKzMxNTcsMTYgQEAKICAqIF9zY3NpaF9pb19kb25lIC0gc2NzaSByZXF1ZXN0IGNhbGxiYWNrCiAgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKICAqIEBzbWlkOiBzeXN0ZW0gcmVxdWVzdCBtZXNzYWdlIGluZGV4Ci0gKiBAVkZfSUQ6IHZpcnR1YWwgZnVuY3Rpb24gaWQKKyAqIEBtc2l4X2luZGV4OiBNU0lYIHRhYmxlIGluZGV4IHN1cHBsaWVkIGJ5IHRoZSBPUwogICogQHJlcGx5OiByZXBseSBtZXNzYWdlIGZyYW1lKGxvd2VyIDMyYml0IGFkZHIpCiAgKgotICogQ2FsbGJhY2sgaGFuZGxlciB3aGVuIHVzaW5nIHNjc2loX3FjbWQuCisgKiBDYWxsYmFjayBoYW5kbGVyIHdoZW4gdXNpbmcgX3Njc2loX3FjbWQuCiAgKgotICogUmV0dXJuIG5vdGhpbmcuCisgKiBSZXR1cm4gMSBtZWFuaW5nIG1mIHNob3VsZCBiZSBmcmVlZCBmcm9tIF9iYXNlX2ludGVycnVwdAorICogICAgICAgIDAgbWVhbnMgdGhlIG1mIGlzIGZyZWVkIGZyb20gdGhpcyBmdW5jdGlvbi4KICAqLwotc3RhdGljIHZvaWQKLV9zY3NpaF9pb19kb25lKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IHNtaWQsIHU4IFZGX0lELCB1MzIgcmVwbHkpCitzdGF0aWMgdTgKK19zY3NpaF9pb19kb25lKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IHNtaWQsIHU4IG1zaXhfaW5kZXgsIHUzMiByZXBseSkKIHsKIAlNcGkyU0NTSUlPUmVxdWVzdF90ICptcGlfcmVxdWVzdDsKIAlNcGkyU0NTSUlPUmVwbHlfdCAqbXBpX3JlcGx5OwpAQCAtMjk3Niw5ICszMTgwLDkgQEAKIAl1MzIgcmVzcG9uc2VfY29kZTsKIAogCW1waV9yZXBseSA9IG1wdDJzYXNfYmFzZV9nZXRfcmVwbHlfdmlydF9hZGRyKGlvYywgcmVwbHkpOwotCXNjbWQgPSBfc2NzaWhfc2NzaV9sb29rdXBfZ2V0Y2xlYXIoaW9jLCBzbWlkKTsKKwlzY21kID0gX3Njc2loX3Njc2lfbG9va3VwX2dldChpb2MsIHNtaWQpOwogCWlmIChzY21kID09IE5VTEwpCi0JCXJldHVybjsKKwkJcmV0dXJuIDE7CiAKIAltcGlfcmVxdWVzdCA9IG1wdDJzYXNfYmFzZV9nZXRfbXNnX2ZyYW1lKGlvYywgc21pZCk7CiAKQEAgLTMxMzQsNiArMzMzOCw3IEBACiAgb3V0OgogCXNjc2lfZG1hX3VubWFwKHNjbWQpOwogCXNjbWQtPnNjc2lfZG9uZShzY21kKTsKKwlyZXR1cm4gMTsKIH0KIAogLyoqCkBAIC0zMzk4LDkgKzM2MDMsOCBAQAogCQl9CiAJfQogCi0Jc2FzX2FkZHJlc3MgPSBsZTY0X3RvX2NwdShleHBhbmRlcl9wZzAuU0FTQWRkcmVzcyk7Ci0KIAlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5zYXNfbm9kZV9sb2NrLCBmbGFncyk7CisJc2FzX2FkZHJlc3MgPSBsZTY0X3RvX2NwdShleHBhbmRlcl9wZzAuU0FTQWRkcmVzcyk7CiAJc2FzX2V4cGFuZGVyID0gbXB0MnNhc19zY3NpaF9leHBhbmRlcl9maW5kX2J5X3Nhc19hZGRyZXNzKGlvYywKIAkgICAgc2FzX2FkZHJlc3MpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+c2FzX25vZGVfbG9jaywgZmxhZ3MpOwpAQCAtMzY2Niw2ICszODcwLDEyIEBACiAJaWYgKGlvYy0+cmVtb3ZlX2hvc3QpCiAJCWdvdG8gb3V0OwogCisJaWYgKChzYXNfZGV2aWNlLT5zdGF0ZSAmIE1QVFNBU19TVEFURV9UUl9DT01QTEVURSkpIHsKKwkJZGV3dHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0lORk9fRk1UICJcdHNraXAgIgorCQkgICAidGFyZ2V0X3Jlc2V0IGhhbmRsZSgweCUwNHgpXG4iLCBpb2MtPm5hbWUsIGhhbmRsZSkpOworCQlnb3RvIHNraXBfdHI7CisJfQorCiAJLyogVGFyZ2V0IFJlc2V0IHRvIGZsdXNoIG91dCBhbGwgdGhlIG91dHN0YW5kaW5nIElPICovCiAJZGV2aWNlX2hhbmRsZSA9IChzYXNfZGV2aWNlLT5oaWRkZW5fcmFpZF9jb21wb25lbnQpID8KIAkgICAgc2FzX2RldmljZS0+dm9sdW1lX2hhbmRsZSA6IGhhbmRsZTsKQEAgLTM2ODIsNiArMzg5MiwxMyBAQAogCQlpZiAoaW9jLT5zaG9zdF9yZWNvdmVyeSkKIAkJCWdvdG8gb3V0OwogCX0KKyBza2lwX3RyOgorCisJaWYgKChzYXNfZGV2aWNlLT5zdGF0ZSAmIE1QVFNBU19TVEFURV9DTlRSTF9DT01QTEVURSkpIHsKKwkJZGV3dHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0lORk9fRk1UICJcdHNraXAgIgorCQkgICAic2FzX2NudHJsIGhhbmRsZSgweCUwNHgpXG4iLCBpb2MtPm5hbWUsIGhhbmRsZSkpOworCQlnb3RvIG91dDsKKwl9CiAKIAkvKiBTQVNfSU9fVU5JVF9DTlRSIC0gc2VuZCBSRU1PVkVfREVWSUNFICovCiAJZGV3dHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0lORk9fRk1UICJzYXNfaW91bml0OiBoYW5kbGUiCkBAIC0zNjkwLDcgKzM5MDcsOCBAQAogCW1waV9yZXF1ZXN0LkZ1bmN0aW9uID0gTVBJMl9GVU5DVElPTl9TQVNfSU9fVU5JVF9DT05UUk9MOwogCW1waV9yZXF1ZXN0Lk9wZXJhdGlvbiA9IE1QSTJfU0FTX09QX1JFTU9WRV9ERVZJQ0U7CiAJbXBpX3JlcXVlc3QuRGV2SGFuZGxlID0gaGFuZGxlOwotCW1waV9yZXF1ZXN0LlZGX0lEID0gMDsKKwltcGlfcmVxdWVzdC5WRl9JRCA9IDA7IC8qIFRPRE8gKi8KKwltcGlfcmVxdWVzdC5WUF9JRCA9IDA7CiAJaWYgKChtcHQyc2FzX2Jhc2Vfc2FzX2lvdW5pdF9jb250cm9sKGlvYywgJm1waV9yZXBseSwKIAkgICAgJm1waV9yZXF1ZXN0KSkgIT0gMCkgewogCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICJmYWlsdXJlIGF0ICVzOiVkLyVzKCkhXG4iLApAQCAtMzgwMCwxNSArNDAxOCwxMiBAQAogLyoqCiAgKiBfc2NzaWhfc2FzX3RvcG9sb2d5X2NoYW5nZV9ldmVudCAtIGhhbmRsZSB0b3BvbG9neSBjaGFuZ2VzCiAgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKLSAqIEBWRl9JRDoKLSAqIEBldmVudF9kYXRhOiBldmVudCBkYXRhIHBheWxvYWQKLSAqIGZ3X2V2ZW50OgorICogQGZ3X2V2ZW50OiBUaGUgZndfZXZlbnRfd29yayBvYmplY3QKICAqIENvbnRleHQ6IHVzZXIuCiAgKgogICovCiBzdGF0aWMgdm9pZAotX3Njc2loX3Nhc190b3BvbG9neV9jaGFuZ2VfZXZlbnQoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1OCBWRl9JRCwKLSAgICBNcGkyRXZlbnREYXRhU2FzVG9wb2xvZ3lDaGFuZ2VMaXN0X3QgKmV2ZW50X2RhdGEsCitfc2NzaWhfc2FzX3RvcG9sb2d5X2NoYW5nZV9ldmVudChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsCiAgICAgc3RydWN0IGZ3X2V2ZW50X3dvcmsgKmZ3X2V2ZW50KQogewogCWludCBpOwpAQCAtMzgxOCw2ICs0MDMzLDcgQEAKIAlzdHJ1Y3QgX3Nhc19ub2RlICpzYXNfZXhwYW5kZXI7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1OCBsaW5rX3JhdGVfOworCU1waTJFdmVudERhdGFTYXNUb3BvbG9neUNoYW5nZUxpc3RfdCAqZXZlbnRfZGF0YSA9IGZ3X2V2ZW50LT5ldmVudF9kYXRhOwogCiAjaWZkZWYgQ09ORklHX1NDU0lfTVBUMlNBU19MT0dHSU5HCiAJaWYgKGlvYy0+bG9nZ2luZ19sZXZlbCAmIE1QVF9ERUJVR19FVkVOVF9XT1JLX1RBU0spCkBAIC0zODUxLDE1ICs0MDY3LDE2IEBACiAJCX0KIAkJaWYgKGlvYy0+c2hvc3RfcmVjb3ZlcnkpCiAJCQlyZXR1cm47Ci0JCWlmIChldmVudF9kYXRhLT5QSFlbaV0uUGh5U3RhdHVzICYKLQkJICAgIE1QSTJfRVZFTlRfU0FTX1RPUE9fUEhZU1RBVFVTX1ZBQ0FOVCkKKwkJcGh5X251bWJlciA9IGV2ZW50X2RhdGEtPlN0YXJ0UGh5TnVtICsgaTsKKwkJcmVhc29uX2NvZGUgPSBldmVudF9kYXRhLT5QSFlbaV0uUGh5U3RhdHVzICYKKwkJICAgIE1QSTJfRVZFTlRfU0FTX1RPUE9fUkNfTUFTSzsKKwkJaWYgKChldmVudF9kYXRhLT5QSFlbaV0uUGh5U3RhdHVzICYKKwkJICAgIE1QSTJfRVZFTlRfU0FTX1RPUE9fUEhZU1RBVFVTX1ZBQ0FOVCkgJiYgKHJlYXNvbl9jb2RlICE9CisJCSAgICBNUEkyX0VWRU5UX1NBU19UT1BPX1JDX1RBUkdfTk9UX1JFU1BPTkRJTkcpKQogCQkJY29udGludWU7CiAJCWhhbmRsZSA9IGxlMTZfdG9fY3B1KGV2ZW50X2RhdGEtPlBIWVtpXS5BdHRhY2hlZERldkhhbmRsZSk7CiAJCWlmICghaGFuZGxlKQogCQkJY29udGludWU7Ci0JCXBoeV9udW1iZXIgPSBldmVudF9kYXRhLT5TdGFydFBoeU51bSArIGk7Ci0JCXJlYXNvbl9jb2RlID0gZXZlbnRfZGF0YS0+UEhZW2ldLlBoeVN0YXR1cyAmCi0JCSAgICBNUEkyX0VWRU5UX1NBU19UT1BPX1JDX01BU0s7CiAJCWxpbmtfcmF0ZV8gPSBldmVudF9kYXRhLT5QSFlbaV0uTGlua1JhdGUgPj4gNDsKIAkJc3dpdGNoIChyZWFzb25fY29kZSkgewogCQljYXNlIE1QSTJfRVZFTlRfU0FTX1RPUE9fUkNfUEhZX0NIQU5HRUQ6CkBAIC0zOTcxLDE5ICs0MTg4LDE5IEBACiAvKioKICAqIF9zY3NpaF9zYXNfZGV2aWNlX3N0YXR1c19jaGFuZ2VfZXZlbnQgLSBoYW5kbGUgZGV2aWNlIHN0YXR1cyBjaGFuZ2UKICAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAotICogQFZGX0lEOgotICogQGV2ZW50X2RhdGE6IGV2ZW50IGRhdGEgcGF5bG9hZAorICogQGZ3X2V2ZW50OiBUaGUgZndfZXZlbnRfd29yayBvYmplY3QKICAqIENvbnRleHQ6IHVzZXIuCiAgKgogICogUmV0dXJuIG5vdGhpbmcuCiAgKi8KIHN0YXRpYyB2b2lkCi1fc2NzaWhfc2FzX2RldmljZV9zdGF0dXNfY2hhbmdlX2V2ZW50KHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTggVkZfSUQsCi0gICAgTXBpMkV2ZW50RGF0YVNhc0RldmljZVN0YXR1c0NoYW5nZV90ICpldmVudF9kYXRhKQorX3Njc2loX3Nhc19kZXZpY2Vfc3RhdHVzX2NoYW5nZV9ldmVudChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsCisgICAgc3RydWN0IGZ3X2V2ZW50X3dvcmsgKmZ3X2V2ZW50KQogewogI2lmZGVmIENPTkZJR19TQ1NJX01QVDJTQVNfTE9HR0lORwogCWlmIChpb2MtPmxvZ2dpbmdfbGV2ZWwgJiBNUFRfREVCVUdfRVZFTlRfV09SS19UQVNLKQotCQlfc2NzaWhfc2FzX2RldmljZV9zdGF0dXNfY2hhbmdlX2V2ZW50X2RlYnVnKGlvYywgZXZlbnRfZGF0YSk7CisJCV9zY3NpaF9zYXNfZGV2aWNlX3N0YXR1c19jaGFuZ2VfZXZlbnRfZGVidWcoaW9jLAorCQkgICAgIGZ3X2V2ZW50LT5ldmVudF9kYXRhKTsKICNlbmRpZgogfQogCkBAIC00MDI2LDM0ICs0MjQzLDMzIEBACiAvKioKICAqIF9zY3NpaF9zYXNfZW5jbG9zdXJlX2Rldl9zdGF0dXNfY2hhbmdlX2V2ZW50IC0gaGFuZGxlIGVuY2xvc3VyZSBldmVudHMKICAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAotICogQFZGX0lEOgotICogQGV2ZW50X2RhdGE6IGV2ZW50IGRhdGEgcGF5bG9hZAorICogQGZ3X2V2ZW50OiBUaGUgZndfZXZlbnRfd29yayBvYmplY3QKICAqIENvbnRleHQ6IHVzZXIuCiAgKgogICogUmV0dXJuIG5vdGhpbmcuCiAgKi8KIHN0YXRpYyB2b2lkCiBfc2NzaWhfc2FzX2VuY2xvc3VyZV9kZXZfc3RhdHVzX2NoYW5nZV9ldmVudChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsCi0gICAgdTggVkZfSUQsIE1waTJFdmVudERhdGFTYXNFbmNsRGV2U3RhdHVzQ2hhbmdlX3QgKmV2ZW50X2RhdGEpCisgICAgc3RydWN0IGZ3X2V2ZW50X3dvcmsgKmZ3X2V2ZW50KQogewogI2lmZGVmIENPTkZJR19TQ1NJX01QVDJTQVNfTE9HR0lORwogCWlmIChpb2MtPmxvZ2dpbmdfbGV2ZWwgJiBNUFRfREVCVUdfRVZFTlRfV09SS19UQVNLKQogCQlfc2NzaWhfc2FzX2VuY2xvc3VyZV9kZXZfc3RhdHVzX2NoYW5nZV9ldmVudF9kZWJ1Zyhpb2MsCi0JCSAgICAgZXZlbnRfZGF0YSk7CisJCSAgICAgZndfZXZlbnQtPmV2ZW50X2RhdGEpOwogI2VuZGlmCiB9CiAKIC8qKgogICogX3Njc2loX3Nhc19icm9hZGNhc3RfcHJpbWF0aXZlX2V2ZW50IC0gaGFuZGxlIGJyb2FkY2FzdCBldmVudHMKICAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAotICogQGV2ZW50X2RhdGE6IGV2ZW50IGRhdGEgcGF5bG9hZAorICogQGZ3X2V2ZW50OiBUaGUgZndfZXZlbnRfd29yayBvYmplY3QKICAqIENvbnRleHQ6IHVzZXIuCiAgKgogICogUmV0dXJuIG5vdGhpbmcuCiAgKi8KIHN0YXRpYyB2b2lkCi1fc2NzaWhfc2FzX2Jyb2FkY2FzdF9wcmltYXRpdmVfZXZlbnQoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1OCBWRl9JRCwKLSAgICBNcGkyRXZlbnREYXRhU2FzQnJvYWRjYXN0UHJpbWl0aXZlX3QgKmV2ZW50X2RhdGEpCitfc2NzaWhfc2FzX2Jyb2FkY2FzdF9wcmltYXRpdmVfZXZlbnQoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLAorICAgIHN0cnVjdCBmd19ldmVudF93b3JrICpmd19ldmVudCkKIHsKIAlzdHJ1Y3Qgc2NzaV9jbW5kICpzY21kOwogCXUxNiBzbWlkLCBoYW5kbGU7CkBAIC00MDYyLDExICs0Mjc4LDEyIEBACiAJdTMyIHRlcm1pbmF0aW9uX2NvdW50OwogCXUzMiBxdWVyeV9jb3VudDsKIAlNcGkyU0NTSVRhc2tNYW5hZ2VtZW50UmVwbHlfdCAqbXBpX3JlcGx5OwotCisjaWZkZWYgQ09ORklHX1NDU0lfTVBUMlNBU19MT0dHSU5HCisJTXBpMkV2ZW50RGF0YVNhc0Jyb2FkY2FzdFByaW1pdGl2ZV90ICpldmVudF9kYXRhID0gZndfZXZlbnQtPmV2ZW50X2RhdGE7CisjZW5kaWYKIAlkZXd0cHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfREVCVUdfRk1UICJicm9hZGNhc3QgcHJpbWF0aXZlOiAiCiAJICAgICJwaHkgbnVtYmVyKCVkKSwgd2lkdGgoJWQpXG4iLCBpb2MtPm5hbWUsIGV2ZW50X2RhdGEtPlBoeU51bSwKIAkgICAgZXZlbnRfZGF0YS0+UG9ydFdpZHRoKSk7Ci0KIAlkdG1wcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19ERUJVR19GTVQgIiVzOiBlbnRlclxuIiwgaW9jLT5uYW1lLAogCSAgICBfX2Z1bmNfXykpOwogCkBAIC00MDc0LDcgKzQyOTEsNyBAQAogCXRlcm1pbmF0aW9uX2NvdW50ID0gMDsKIAlxdWVyeV9jb3VudCA9IDA7CiAJbXBpX3JlcGx5ID0gaW9jLT50bV9jbWRzLnJlcGx5OwotCWZvciAoc21pZCA9IDE7IHNtaWQgPD0gaW9jLT5yZXF1ZXN0X2RlcHRoOyBzbWlkKyspIHsKKwlmb3IgKHNtaWQgPSAxOyBzbWlkIDw9IGlvYy0+c2NzaWlvX2RlcHRoOyBzbWlkKyspIHsKIAkJc2NtZCA9IF9zY3NpaF9zY3NpX2xvb2t1cF9nZXQoaW9jLCBzbWlkKTsKIAkJaWYgKCFzY21kKQogCQkJY29udGludWU7CkBAIC00MTIxLDIzICs0MzM4LDI1IEBACiAvKioKICAqIF9zY3NpaF9zYXNfZGlzY292ZXJ5X2V2ZW50IC0gaGFuZGxlIGRpc2NvdmVyeSBldmVudHMKICAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAotICogQGV2ZW50X2RhdGE6IGV2ZW50IGRhdGEgcGF5bG9hZAorICogQGZ3X2V2ZW50OiBUaGUgZndfZXZlbnRfd29yayBvYmplY3QKICAqIENvbnRleHQ6IHVzZXIuCiAgKgogICogUmV0dXJuIG5vdGhpbmcuCiAgKi8KIHN0YXRpYyB2b2lkCi1fc2NzaWhfc2FzX2Rpc2NvdmVyeV9ldmVudChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHU4IFZGX0lELAotICAgIE1waTJFdmVudERhdGFTYXNEaXNjb3ZlcnlfdCAqZXZlbnRfZGF0YSkKK19zY3NpaF9zYXNfZGlzY292ZXJ5X2V2ZW50KHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywKKyAgICBzdHJ1Y3QgZndfZXZlbnRfd29yayAqZndfZXZlbnQpCiB7CisJTXBpMkV2ZW50RGF0YVNhc0Rpc2NvdmVyeV90ICpldmVudF9kYXRhID0gZndfZXZlbnQtPmV2ZW50X2RhdGE7CisKICNpZmRlZiBDT05GSUdfU0NTSV9NUFQyU0FTX0xPR0dJTkcKIAlpZiAoaW9jLT5sb2dnaW5nX2xldmVsICYgTVBUX0RFQlVHX0VWRU5UX1dPUktfVEFTSykgewogCQlwcmludGsoTVBUMlNBU19ERUJVR19GTVQgImRpc2NvdmVyeSBldmVudDogKCVzKSIsIGlvYy0+bmFtZSwKIAkJICAgIChldmVudF9kYXRhLT5SZWFzb25Db2RlID09IE1QSTJfRVZFTlRfU0FTX0RJU0NfUkNfU1RBUlRFRCkgPwogCQkgICAgInN0YXJ0IiA6ICJzdG9wIik7CiAJaWYgKGV2ZW50X2RhdGEtPkRpc2NvdmVyeVN0YXR1cykKLQkJcHJpbnRrKE1QVDJTQVNfREVCVUdfRk1UICIsIGRpc2NvdmVyeV9zdGF0dXMoMHglMDh4KSIsCi0JCSAgICBpb2MtPm5hbWUsIGxlMzJfdG9fY3B1KGV2ZW50X2RhdGEtPkRpc2NvdmVyeVN0YXR1cykpOworCQlwcmludGsoImRpc2NvdmVyeV9zdGF0dXMoMHglMDh4KSIsCisJCSAgICBsZTMyX3RvX2NwdShldmVudF9kYXRhLT5EaXNjb3ZlcnlTdGF0dXMpKTsKIAlwcmludGsoIlxuIik7CiAJfQogI2VuZGlmCkBAIC00NDg4LDE5ICs0NzA3LDE5IEBACiAvKioKICAqIF9zY3NpaF9zYXNfaXJfY29uZmlnX2NoYW5nZV9ldmVudCAtIGhhbmRsZSBpciBjb25maWd1cmF0aW9uIGNoYW5nZSBldmVudHMKICAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAotICogQFZGX0lEOgotICogQGV2ZW50X2RhdGE6IGV2ZW50IGRhdGEgcGF5bG9hZAorICogQGZ3X2V2ZW50OiBUaGUgZndfZXZlbnRfd29yayBvYmplY3QKICAqIENvbnRleHQ6IHVzZXIuCiAgKgogICogUmV0dXJuIG5vdGhpbmcuCiAgKi8KIHN0YXRpYyB2b2lkCi1fc2NzaWhfc2FzX2lyX2NvbmZpZ19jaGFuZ2VfZXZlbnQoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1OCBWRl9JRCwKLSAgICBNcGkyRXZlbnREYXRhSXJDb25maWdDaGFuZ2VMaXN0X3QgKmV2ZW50X2RhdGEpCitfc2NzaWhfc2FzX2lyX2NvbmZpZ19jaGFuZ2VfZXZlbnQoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLAorICAgIHN0cnVjdCBmd19ldmVudF93b3JrICpmd19ldmVudCkKIHsKIAlNcGkyRXZlbnRJckNvbmZpZ0VsZW1lbnRfdCAqZWxlbWVudDsKIAlpbnQgaTsKIAl1OCBmb3JlaWduX2NvbmZpZzsKKwlNcGkyRXZlbnREYXRhSXJDb25maWdDaGFuZ2VMaXN0X3QgKmV2ZW50X2RhdGEgPSBmd19ldmVudC0+ZXZlbnRfZGF0YTsKIAogI2lmZGVmIENPTkZJR19TQ1NJX01QVDJTQVNfTE9HR0lORwogCWlmIChpb2MtPmxvZ2dpbmdfbGV2ZWwgJiBNUFRfREVCVUdfRVZFTlRfV09SS19UQVNLKQpAQCAtNDU0MywxNCArNDc2MiwxNCBAQAogLyoqCiAgKiBfc2NzaWhfc2FzX2lyX3ZvbHVtZV9ldmVudCAtIElSIHZvbHVtZSBldmVudAogICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0Ci0gKiBAZXZlbnRfZGF0YTogZXZlbnQgZGF0YSBwYXlsb2FkCisgKiBAZndfZXZlbnQ6IFRoZSBmd19ldmVudF93b3JrIG9iamVjdAogICogQ29udGV4dDogdXNlci4KICAqCiAgKiBSZXR1cm4gbm90aGluZy4KICAqLwogc3RhdGljIHZvaWQKLV9zY3NpaF9zYXNfaXJfdm9sdW1lX2V2ZW50KHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTggVkZfSUQsCi0gICAgTXBpMkV2ZW50RGF0YUlyVm9sdW1lX3QgKmV2ZW50X2RhdGEpCitfc2NzaWhfc2FzX2lyX3ZvbHVtZV9ldmVudChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsCisgICAgc3RydWN0IGZ3X2V2ZW50X3dvcmsgKmZ3X2V2ZW50KQogewogCXU2NCB3d2lkOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC00NTU5LDYgKzQ3NzgsNyBAQAogCXUzMiBzdGF0ZTsKIAlpbnQgcmM7CiAJc3RydWN0IE1QVDJTQVNfVEFSR0VUICpzYXNfdGFyZ2V0X3ByaXZfZGF0YTsKKwlNcGkyRXZlbnREYXRhSXJWb2x1bWVfdCAqZXZlbnRfZGF0YSA9IGZ3X2V2ZW50LT5ldmVudF9kYXRhOwogCiAJaWYgKGV2ZW50X2RhdGEtPlJlYXNvbkNvZGUgIT0gTVBJMl9FVkVOVF9JUl9WT0xVTUVfUkNfU1RBVEVfQ0hBTkdFRCkKIAkJcmV0dXJuOwpAQCAtNDYyOCwxNCArNDg0OCwxNCBAQAogLyoqCiAgKiBfc2NzaWhfc2FzX2lyX3BoeXNpY2FsX2Rpc2tfZXZlbnQgLSBQRCBldmVudAogICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0Ci0gKiBAZXZlbnRfZGF0YTogZXZlbnQgZGF0YSBwYXlsb2FkCisgKiBAZndfZXZlbnQ6IFRoZSBmd19ldmVudF93b3JrIG9iamVjdAogICogQ29udGV4dDogdXNlci4KICAqCiAgKiBSZXR1cm4gbm90aGluZy4KICAqLwogc3RhdGljIHZvaWQKLV9zY3NpaF9zYXNfaXJfcGh5c2ljYWxfZGlza19ldmVudChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHU4IFZGX0lELAotICAgTXBpMkV2ZW50RGF0YUlyUGh5c2ljYWxEaXNrX3QgKmV2ZW50X2RhdGEpCitfc2NzaWhfc2FzX2lyX3BoeXNpY2FsX2Rpc2tfZXZlbnQoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLAorICAgIHN0cnVjdCBmd19ldmVudF93b3JrICpmd19ldmVudCkKIHsKIAl1MTYgaGFuZGxlOwogCXUzMiBzdGF0ZTsKQEAgLTQ2NDQsNiArNDg2NCw3IEBACiAJTXBpMkNvbmZpZ1JlcGx5X3QgbXBpX3JlcGx5OwogCU1waTJTYXNEZXZpY2VQYWdlMF90IHNhc19kZXZpY2VfcGcwOwogCXUzMiBpb2Nfc3RhdHVzOworCU1waTJFdmVudERhdGFJclBoeXNpY2FsRGlza190ICpldmVudF9kYXRhID0gZndfZXZlbnQtPmV2ZW50X2RhdGE7CiAKIAlpZiAoZXZlbnRfZGF0YS0+UmVhc29uQ29kZSAhPSBNUEkyX0VWRU5UX0lSX1BIWVNESVNLX1JDX1NUQVRFX0NIQU5HRUQpCiAJCXJldHVybjsKQEAgLTQ3NDMsMzMgKzQ5NjQsMzMgQEAKIC8qKgogICogX3Njc2loX3Nhc19pcl9vcGVyYXRpb25fc3RhdHVzX2V2ZW50IC0gaGFuZGxlIFJBSUQgb3BlcmF0aW9uIGV2ZW50cwogICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0Ci0gKiBAVkZfSUQ6Ci0gKiBAZXZlbnRfZGF0YTogZXZlbnQgZGF0YSBwYXlsb2FkCisgKiBAZndfZXZlbnQ6IFRoZSBmd19ldmVudF93b3JrIG9iamVjdAogICogQ29udGV4dDogdXNlci4KICAqCiAgKiBSZXR1cm4gbm90aGluZy4KICAqLwogc3RhdGljIHZvaWQKLV9zY3NpaF9zYXNfaXJfb3BlcmF0aW9uX3N0YXR1c19ldmVudChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHU4IFZGX0lELAotICAgIE1waTJFdmVudERhdGFJck9wZXJhdGlvblN0YXR1c190ICpldmVudF9kYXRhKQorX3Njc2loX3Nhc19pcl9vcGVyYXRpb25fc3RhdHVzX2V2ZW50KHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywKKyAgICBzdHJ1Y3QgZndfZXZlbnRfd29yayAqZndfZXZlbnQpCiB7CiAjaWZkZWYgQ09ORklHX1NDU0lfTVBUMlNBU19MT0dHSU5HCiAJaWYgKGlvYy0+bG9nZ2luZ19sZXZlbCAmIE1QVF9ERUJVR19FVkVOVF9XT1JLX1RBU0spCi0JCV9zY3NpaF9zYXNfaXJfb3BlcmF0aW9uX3N0YXR1c19ldmVudF9kZWJ1Zyhpb2MsIGV2ZW50X2RhdGEpOworCQlfc2NzaWhfc2FzX2lyX29wZXJhdGlvbl9zdGF0dXNfZXZlbnRfZGVidWcoaW9jLAorCQkgICAgIGZ3X2V2ZW50LT5ldmVudF9kYXRhKTsKICNlbmRpZgogfQogCiAvKioKICAqIF9zY3NpaF90YXNrX3NldF9mdWxsIC0gaGFuZGxlIHRhc2sgc2V0IGZ1bGwKICAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAotICogQGV2ZW50X2RhdGE6IGV2ZW50IGRhdGEgcGF5bG9hZAorICogQGZ3X2V2ZW50OiBUaGUgZndfZXZlbnRfd29yayBvYmplY3QKICAqIENvbnRleHQ6IHVzZXIuCiAgKgogICogVGhyb3R0bGUgYmFjayBxZGVwdGguCiAgKi8KIHN0YXRpYyB2b2lkCi1fc2NzaWhfdGFza19zZXRfZnVsbChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHU4IFZGX0lELAotICAgIE1waTJFdmVudERhdGFUYXNrU2V0RnVsbF90ICpldmVudF9kYXRhKQorX3Njc2loX3Rhc2tfc2V0X2Z1bGwoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCBzdHJ1Y3QgZndfZXZlbnRfd29yaworCSpmd19ldmVudCkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBfc2FzX2RldmljZSAqc2FzX2RldmljZTsKQEAgLTQ3ODAsNiArNTAwMSw3IEBACiAJdTE2IGhhbmRsZTsKIAlpbnQgaWQsIGNoYW5uZWw7CiAJdTY0IHNhc19hZGRyZXNzOworCU1waTJFdmVudERhdGFUYXNrU2V0RnVsbF90ICpldmVudF9kYXRhID0gZndfZXZlbnQtPmV2ZW50X2RhdGE7CiAKIAljdXJyZW50X2RlcHRoID0gbGUxNl90b19jcHUoZXZlbnRfZGF0YS0+Q3VycmVudERlcHRoKTsKIAloYW5kbGUgPSBsZTE2X3RvX2NwdShldmVudF9kYXRhLT5EZXZIYW5kbGUpOwpAQCAtNDg2OCw2ICs1MDkwLDEwIEBACiAJCWlmIChzYXNfZGV2aWNlLT5zYXNfYWRkcmVzcyA9PSBzYXNfYWRkcmVzcyAmJgogCQkgICAgc2FzX2RldmljZS0+c2xvdCA9PSBzbG90ICYmIHNhc19kZXZpY2UtPnN0YXJnZXQpIHsKIAkJCXNhc19kZXZpY2UtPnJlc3BvbmRpbmcgPSAxOworCQkJc2FzX2RldmljZS0+c3RhdGUgPSAwOworCQkJc3RhcmdldCA9IHNhc19kZXZpY2UtPnN0YXJnZXQ7CisJCQlzYXNfdGFyZ2V0X3ByaXZfZGF0YSA9IHN0YXJnZXQtPmhvc3RkYXRhOworCQkJc2FzX3RhcmdldF9wcml2X2RhdGEtPnRtX2J1c3kgPSAwOwogCQkJc3RhcmdldF9wcmludGsoS0VSTl9JTkZPLCBzYXNfZGV2aWNlLT5zdGFyZ2V0LAogCQkJICAgICJoYW5kbGUoMHglMDR4KSwgc2FzX2FkZHIoMHglMDE2bGx4KSwgZW5jbG9zdXJlICIKIAkJCSAgICAibG9naWNhbCBpZCgweCUwMTZsbHgpLCBzbG90KCVkKVxuIiwgaGFuZGxlLApAQCAtNDg4MCw4ICs1MTA2LDYgQEAKIAkJCXByaW50ayhLRVJOX0lORk8gIlx0aGFuZGxlIGNoYW5nZWQgZnJvbSgweCUwNHgpISEhXG4iLAogCQkJICAgIHNhc19kZXZpY2UtPmhhbmRsZSk7CiAJCQlzYXNfZGV2aWNlLT5oYW5kbGUgPSBoYW5kbGU7Ci0JCQlzdGFyZ2V0ID0gc2FzX2RldmljZS0+c3RhcmdldDsKLQkJCXNhc190YXJnZXRfcHJpdl9kYXRhID0gc3RhcmdldC0+aG9zdGRhdGE7CiAJCQlzYXNfdGFyZ2V0X3ByaXZfZGF0YS0+aGFuZGxlID0gaGFuZGxlOwogCQkJZ290byBvdXQ7CiAJCX0KQEAgLTUyMjcsNDQgKzU0NTEsMzggQEAKIAogCXN3aXRjaCAoZndfZXZlbnQtPmV2ZW50KSB7CiAJY2FzZSBNUEkyX0VWRU5UX1NBU19UT1BPTE9HWV9DSEFOR0VfTElTVDoKLQkJX3Njc2loX3Nhc190b3BvbG9neV9jaGFuZ2VfZXZlbnQoaW9jLCBmd19ldmVudC0+VkZfSUQsCi0JCSAgICBmd19ldmVudC0+ZXZlbnRfZGF0YSwgZndfZXZlbnQpOworCQlfc2NzaWhfc2FzX3RvcG9sb2d5X2NoYW5nZV9ldmVudChpb2MsIGZ3X2V2ZW50KTsKIAkJYnJlYWs7CiAJY2FzZSBNUEkyX0VWRU5UX1NBU19ERVZJQ0VfU1RBVFVTX0NIQU5HRToKLQkJX3Njc2loX3Nhc19kZXZpY2Vfc3RhdHVzX2NoYW5nZV9ldmVudChpb2MsIGZ3X2V2ZW50LT5WRl9JRCwKLQkJICAgIGZ3X2V2ZW50LT5ldmVudF9kYXRhKTsKKwkJX3Njc2loX3Nhc19kZXZpY2Vfc3RhdHVzX2NoYW5nZV9ldmVudChpb2MsCisJCSAgICBmd19ldmVudCk7CiAJCWJyZWFrOwogCWNhc2UgTVBJMl9FVkVOVF9TQVNfRElTQ09WRVJZOgotCQlfc2NzaWhfc2FzX2Rpc2NvdmVyeV9ldmVudChpb2MsIGZ3X2V2ZW50LT5WRl9JRCwKLQkJICAgIGZ3X2V2ZW50LT5ldmVudF9kYXRhKTsKKwkJX3Njc2loX3Nhc19kaXNjb3ZlcnlfZXZlbnQoaW9jLAorCQkgICAgZndfZXZlbnQpOwogCQlicmVhazsKIAljYXNlIE1QSTJfRVZFTlRfU0FTX0JST0FEQ0FTVF9QUklNSVRJVkU6Ci0JCV9zY3NpaF9zYXNfYnJvYWRjYXN0X3ByaW1hdGl2ZV9ldmVudChpb2MsIGZ3X2V2ZW50LT5WRl9JRCwKLQkJICAgIGZ3X2V2ZW50LT5ldmVudF9kYXRhKTsKKwkJX3Njc2loX3Nhc19icm9hZGNhc3RfcHJpbWF0aXZlX2V2ZW50KGlvYywKKwkJICAgIGZ3X2V2ZW50KTsKIAkJYnJlYWs7CiAJY2FzZSBNUEkyX0VWRU5UX1NBU19FTkNMX0RFVklDRV9TVEFUVVNfQ0hBTkdFOgogCQlfc2NzaWhfc2FzX2VuY2xvc3VyZV9kZXZfc3RhdHVzX2NoYW5nZV9ldmVudChpb2MsCi0JCSAgICBmd19ldmVudC0+VkZfSUQsIGZ3X2V2ZW50LT5ldmVudF9kYXRhKTsKKwkJICAgIGZ3X2V2ZW50KTsKIAkJYnJlYWs7CiAJY2FzZSBNUEkyX0VWRU5UX0lSX0NPTkZJR1VSQVRJT05fQ0hBTkdFX0xJU1Q6Ci0JCV9zY3NpaF9zYXNfaXJfY29uZmlnX2NoYW5nZV9ldmVudChpb2MsIGZ3X2V2ZW50LT5WRl9JRCwKLQkJICAgIGZ3X2V2ZW50LT5ldmVudF9kYXRhKTsKKwkJX3Njc2loX3Nhc19pcl9jb25maWdfY2hhbmdlX2V2ZW50KGlvYywgZndfZXZlbnQpOwogCQlicmVhazsKIAljYXNlIE1QSTJfRVZFTlRfSVJfVk9MVU1FOgotCQlfc2NzaWhfc2FzX2lyX3ZvbHVtZV9ldmVudChpb2MsIGZ3X2V2ZW50LT5WRl9JRCwKLQkJICAgIGZ3X2V2ZW50LT5ldmVudF9kYXRhKTsKKwkJX3Njc2loX3Nhc19pcl92b2x1bWVfZXZlbnQoaW9jLCBmd19ldmVudCk7CiAJCWJyZWFrOwogCWNhc2UgTVBJMl9FVkVOVF9JUl9QSFlTSUNBTF9ESVNLOgotCQlfc2NzaWhfc2FzX2lyX3BoeXNpY2FsX2Rpc2tfZXZlbnQoaW9jLCBmd19ldmVudC0+VkZfSUQsCi0JCSAgICBmd19ldmVudC0+ZXZlbnRfZGF0YSk7CisJCV9zY3NpaF9zYXNfaXJfcGh5c2ljYWxfZGlza19ldmVudChpb2MsIGZ3X2V2ZW50KTsKIAkJYnJlYWs7CiAJY2FzZSBNUEkyX0VWRU5UX0lSX09QRVJBVElPTl9TVEFUVVM6Ci0JCV9zY3NpaF9zYXNfaXJfb3BlcmF0aW9uX3N0YXR1c19ldmVudChpb2MsIGZ3X2V2ZW50LT5WRl9JRCwKLQkJICAgIGZ3X2V2ZW50LT5ldmVudF9kYXRhKTsKKwkJX3Njc2loX3Nhc19pcl9vcGVyYXRpb25fc3RhdHVzX2V2ZW50KGlvYywgZndfZXZlbnQpOwogCQlicmVhazsKIAljYXNlIE1QSTJfRVZFTlRfVEFTS19TRVRfRlVMTDoKLQkJX3Njc2loX3Rhc2tfc2V0X2Z1bGwoaW9jLCBmd19ldmVudC0+VkZfSUQsCi0JCSAgICBmd19ldmVudC0+ZXZlbnRfZGF0YSk7CisJCV9zY3NpaF90YXNrX3NldF9mdWxsKGlvYywgZndfZXZlbnQpOwogCQlicmVhazsKIAl9CiAJX3Njc2loX2Z3X2V2ZW50X2ZyZWUoaW9jLCBmd19ldmVudCk7CkBAIC01MjczLDE3ICs1NDkxLDE5IEBACiAvKioKICAqIG1wdDJzYXNfc2NzaWhfZXZlbnRfY2FsbGJhY2sgLSBmaXJtd2FyZSBldmVudCBoYW5kbGVyIChjYWxsZWQgYXQgSVNSIHRpbWUpCiAgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKLSAqIEBWRl9JRDogdmlydHVhbCBmdW5jdGlvbiBpZAorICogQG1zaXhfaW5kZXg6IE1TSVggdGFibGUgaW5kZXggc3VwcGxpZWQgYnkgdGhlIE9TCiAgKiBAcmVwbHk6IHJlcGx5IG1lc3NhZ2UgZnJhbWUobG93ZXIgMzJiaXQgYWRkcikKICAqIENvbnRleHQ6IGludGVycnVwdC4KICAqCiAgKiBUaGlzIGZ1bmN0aW9uIG1lcmVseSBhZGRzIGEgbmV3IHdvcmsgdGFzayBpbnRvIGlvYy0+ZmlybXdhcmVfZXZlbnRfdGhyZWFkLgogICogVGhlIHRhc2tzIGFyZSB3b3JrZWQgZnJvbSBfZmlybXdhcmVfZXZlbnRfd29yayBpbiB1c2VyIGNvbnRleHQuCiAgKgotICogUmV0dXJuIG5vdGhpbmcuCisgKiBSZXR1cm4gMSBtZWFuaW5nIG1mIHNob3VsZCBiZSBmcmVlZCBmcm9tIF9iYXNlX2ludGVycnVwdAorICogICAgICAgIDAgbWVhbnMgdGhlIG1mIGlzIGZyZWVkIGZyb20gdGhpcyBmdW5jdGlvbi4KICAqLwotdm9pZAotbXB0MnNhc19zY3NpaF9ldmVudF9jYWxsYmFjayhzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHU4IFZGX0lELCB1MzIgcmVwbHkpCit1OAorbXB0MnNhc19zY3NpaF9ldmVudF9jYWxsYmFjayhzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHU4IG1zaXhfaW5kZXgsCisJdTMyIHJlcGx5KQogewogCXN0cnVjdCBmd19ldmVudF93b3JrICpmd19ldmVudDsKIAlNcGkyRXZlbnROb3RpZmljYXRpb25SZXBseV90ICptcGlfcmVwbHk7CkBAIC01Mjk0LDExICs1NTE0LDExIEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+ZndfZXZlbnRfbG9jaywgZmxhZ3MpOwogCWlmIChpb2MtPmZ3X2V2ZW50c19vZmYgfHwgaW9jLT5yZW1vdmVfaG9zdCkgewogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPmZ3X2V2ZW50X2xvY2ssIGZsYWdzKTsKLQkJcmV0dXJuOworCQlyZXR1cm4gMTsKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5md19ldmVudF9sb2NrLCBmbGFncyk7CiAKLQltcGlfcmVwbHkgPSAgbXB0MnNhc19iYXNlX2dldF9yZXBseV92aXJ0X2FkZHIoaW9jLCByZXBseSk7CisJbXBpX3JlcGx5ID0gbXB0MnNhc19iYXNlX2dldF9yZXBseV92aXJ0X2FkZHIoaW9jLCByZXBseSk7CiAJZXZlbnQgPSBsZTE2X3RvX2NwdShtcGlfcmVwbHktPkV2ZW50KTsKIAogCXN3aXRjaCAoZXZlbnQpIHsKQEAgLTUzMTIsNyArNTUzMiw3IEBACiAJCWlmIChiYWVuX2RhdGEtPlByaW1pdGl2ZSAhPQogCQkgICAgTVBJMl9FVkVOVF9QUklNSVRJVkVfQVNZTkNIUk9OT1VTX0VWRU5UIHx8CiAJCSAgICBpb2MtPmJyb2FkY2FzdF9hZW5fYnVzeSkKLQkJCXJldHVybjsKKwkJCXJldHVybiAxOwogCQlpb2MtPmJyb2FkY2FzdF9hZW5fYnVzeSA9IDE7CiAJCWJyZWFrOwogCX0KQEAgLTUzMzQsMTQgKzU1NTQsMTQgQEAKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OiAvKiBpZ25vcmUgdGhlIHJlc3QgKi8KLQkJcmV0dXJuOworCQlyZXR1cm4gMTsKIAl9CiAKIAlmd19ldmVudCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBmd19ldmVudF93b3JrKSwgR0ZQX0FUT01JQyk7CiAJaWYgKCFmd19ldmVudCkgewogCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICJmYWlsdXJlIGF0ICVzOiVkLyVzKCkhXG4iLAogCQkgICAgaW9jLT5uYW1lLCBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKLQkJcmV0dXJuOworCQlyZXR1cm4gMTsKIAl9CiAJZndfZXZlbnQtPmV2ZW50X2RhdGEgPQogCSAgICBremFsbG9jKG1waV9yZXBseS0+RXZlbnREYXRhTGVuZ3RoKjQsIEdGUF9BVE9NSUMpOwpAQCAtNTM0OSwxNSArNTU2OSwxNyBAQAogCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICJmYWlsdXJlIGF0ICVzOiVkLyVzKCkhXG4iLAogCQkgICAgaW9jLT5uYW1lLCBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKIAkJa2ZyZWUoZndfZXZlbnQpOwotCQlyZXR1cm47CisJCXJldHVybiAxOwogCX0KIAogCW1lbWNweShmd19ldmVudC0+ZXZlbnRfZGF0YSwgbXBpX3JlcGx5LT5FdmVudERhdGEsCiAJICAgIG1waV9yZXBseS0+RXZlbnREYXRhTGVuZ3RoKjQpOwogCWZ3X2V2ZW50LT5pb2MgPSBpb2M7Ci0JZndfZXZlbnQtPlZGX0lEID0gVkZfSUQ7CisJZndfZXZlbnQtPlZGX0lEID0gbXBpX3JlcGx5LT5WRl9JRDsKKwlmd19ldmVudC0+VlBfSUQgPSBtcGlfcmVwbHktPlZQX0lEOwogCWZ3X2V2ZW50LT5ldmVudCA9IGV2ZW50OwogCV9zY3NpaF9md19ldmVudF9hZGQoaW9jLCBmd19ldmVudCk7CisJcmV0dXJuIDE7CiB9CiAKIC8qIHNob3N0IHRlbXBsYXRlICovCkBAIC01NjE3LDcgKzU4MzksNyBAQAogfQogCiAvKioKLSAqIF9zY3NpaF9wcm9iZV9zYXMgLSByZXBvcnRpbmcgcmFpZCB2b2x1bWVzIHRvIHNhcyB0cmFuc3BvcnQKKyAqIF9zY3NpaF9wcm9iZV9zYXMgLSByZXBvcnRpbmcgc2FzIGRldmljZXMgdG8gc2FzIHRyYW5zcG9ydAogICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CiAgKgogICogQ2FsbGVkIGR1cmluZyBpbml0aWFsIGxvYWRpbmcgb2YgdGhlIGRyaXZlci4KQEAgLTU3MTQsNiArNTkzNiw4IEBACiAJaW9jLT5iYXNlX2NiX2lkeCA9IGJhc2VfY2JfaWR4OwogCWlvYy0+dHJhbnNwb3J0X2NiX2lkeCA9IHRyYW5zcG9ydF9jYl9pZHg7CiAJaW9jLT5jb25maWdfY2JfaWR4ID0gY29uZmlnX2NiX2lkeDsKKwlpb2MtPnRtX3RyX2NiX2lkeCA9IHRtX3RyX2NiX2lkeDsKKwlpb2MtPnRtX3Nhc19jb250cm9sX2NiX2lkeCA9IHRtX3Nhc19jb250cm9sX2NiX2lkeDsKIAlpb2MtPmxvZ2dpbmdfbGV2ZWwgPSBsb2dnaW5nX2xldmVsOwogCS8qIG1pc2Mgc2VtYXBob3JlcyBhbmQgc3BpbiBsb2NrcyAqLwogCXNwaW5fbG9ja19pbml0KCZpb2MtPmlvY19yZXNldF9pbl9wcm9ncmVzc19sb2NrKTsKQEAgLTU3MjksNiArNTk1Myw3IEBACiAJSU5JVF9MSVNUX0hFQUQoJmlvYy0+ZndfZXZlbnRfbGlzdCk7CiAJSU5JVF9MSVNUX0hFQUQoJmlvYy0+cmFpZF9kZXZpY2VfbGlzdCk7CiAJSU5JVF9MSVNUX0hFQUQoJmlvYy0+c2FzX2hiYS5zYXNfcG9ydF9saXN0KTsKKwlJTklUX0xJU1RfSEVBRCgmaW9jLT5kZWxheWVkX3RyX2xpc3QpOwogCiAJLyogaW5pdCBzaG9zdCBwYXJhbWV0ZXJzICovCiAJc2hvc3QtPm1heF9jbWRfbGVuID0gMTY7CkBAIC01NzQ1LDYgKzU5NzAsNyBAQAogCiAJc2NzaV9ob3N0X3NldF9wcm90KHNob3N0LCBTSE9TVF9ESUZfVFlQRTFfUFJPVEVDVElPTgogCSAgICB8IFNIT1NUX0RJRl9UWVBFM19QUk9URUNUSU9OKTsKKwlzY3NpX2hvc3Rfc2V0X2d1YXJkKHNob3N0LCBTSE9TVF9ESVhfR1VBUkRfQ1JDKTsKIAogCS8qIGV2ZW50IHRocmVhZCAqLwogCXNucHJpbnRmKGlvYy0+ZmlybXdhcmVfZXZlbnRfbmFtZSwgc2l6ZW9mKGlvYy0+ZmlybXdhcmVfZXZlbnRfbmFtZSksCkBAIC01ODk0LDYgKzYxMjAsMTEgQEAKIAkvKiBjdGwgbW9kdWxlIGNhbGxiYWNrIGhhbmRsZXIgKi8KIAljdGxfY2JfaWR4ID0gbXB0MnNhc19iYXNlX3JlZ2lzdGVyX2NhbGxiYWNrX2hhbmRsZXIobXB0MnNhc19jdGxfZG9uZSk7CiAKKwl0bV90cl9jYl9pZHggPSBtcHQyc2FzX2Jhc2VfcmVnaXN0ZXJfY2FsbGJhY2tfaGFuZGxlcigKKwkgICAgX3Njc2loX3RtX3RyX2NvbXBsZXRlKTsKKwl0bV9zYXNfY29udHJvbF9jYl9pZHggPSBtcHQyc2FzX2Jhc2VfcmVnaXN0ZXJfY2FsbGJhY2tfaGFuZGxlcigKKwkgICAgX3Njc2loX3Nhc19jb250cm9sX2NvbXBsZXRlKTsKKwogCW1wdDJzYXNfY3RsX2luaXQoKTsKIAogCWVycm9yID0gcGNpX3JlZ2lzdGVyX2RyaXZlcigmc2NzaWhfZHJpdmVyKTsKQEAgLTU5MjQsNiArNjE1NSw5IEBACiAJbXB0MnNhc19iYXNlX3JlbGVhc2VfY2FsbGJhY2tfaGFuZGxlcihjb25maWdfY2JfaWR4KTsKIAltcHQyc2FzX2Jhc2VfcmVsZWFzZV9jYWxsYmFja19oYW5kbGVyKGN0bF9jYl9pZHgpOwogCisJbXB0MnNhc19iYXNlX3JlbGVhc2VfY2FsbGJhY2tfaGFuZGxlcih0bV90cl9jYl9pZHgpOworCW1wdDJzYXNfYmFzZV9yZWxlYXNlX2NhbGxiYWNrX2hhbmRsZXIodG1fc2FzX2NvbnRyb2xfY2JfaWR4KTsKKwogCW1wdDJzYXNfY3RsX2V4aXQoKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc190cmFuc3BvcnQuYyBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfdHJhbnNwb3J0LmMKaW5kZXggNzQyMzI0YS4uZWI5ODE4OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc190cmFuc3BvcnQuYworKysgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX3RyYW5zcG9ydC5jCkBAIC0yLDcgKzIsNyBAQAogICogU0FTIFRyYW5zcG9ydCBMYXllciBmb3IgTVBUIChNZXNzYWdlIFBhc3NpbmcgVGVjaG5vbG9neSkgYmFzZWQgY29udHJvbGxlcnMKICAqCiAgKiBUaGlzIGNvZGUgaXMgYmFzZWQgb24gZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0Ml90cmFuc3BvcnQuYwotICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDggIExTSSBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDkgIExTSSBDb3Jwb3JhdGlvbgogICogIChtYWlsdG86REwtTVBURnVzaW9uTGludXhAbHNpLmNvbSkKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC0yMTIsMjUgKzIxMiwyNiBAQAogICogbXB0MnNhc190cmFuc3BvcnRfZG9uZSAtICBpbnRlcm5hbCB0cmFuc3BvcnQgbGF5ZXIgY2FsbGJhY2sgaGFuZGxlci4KICAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAogICogQHNtaWQ6IHN5c3RlbSByZXF1ZXN0IG1lc3NhZ2UgaW5kZXgKLSAqIEBWRl9JRDogdmlydHVhbCBmdW5jdGlvbiBpZAorICogQG1zaXhfaW5kZXg6IE1TSVggdGFibGUgaW5kZXggc3VwcGxpZWQgYnkgdGhlIE9TCiAgKiBAcmVwbHk6IHJlcGx5IG1lc3NhZ2UgZnJhbWUobG93ZXIgMzJiaXQgYWRkcikKICAqCiAgKiBDYWxsYmFjayBoYW5kbGVyIHdoZW4gc2VuZGluZyBpbnRlcm5hbCBnZW5lcmF0ZWQgdHJhbnNwb3J0IGNtZHMuCiAgKiBUaGUgY2FsbGJhY2sgaW5kZXggcGFzc2VkIGlzIGBpb2MtPnRyYW5zcG9ydF9jYl9pZHhgCiAgKgotICogUmV0dXJuIG5vdGhpbmcuCisgKiBSZXR1cm4gMSBtZWFuaW5nIG1mIHNob3VsZCBiZSBmcmVlZCBmcm9tIF9iYXNlX2ludGVycnVwdAorICogICAgICAgIDAgbWVhbnMgdGhlIG1mIGlzIGZyZWVkIGZyb20gdGhpcyBmdW5jdGlvbi4KICAqLwotdm9pZAotbXB0MnNhc190cmFuc3BvcnRfZG9uZShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBzbWlkLCB1OCBWRl9JRCwKK3U4CittcHQyc2FzX3RyYW5zcG9ydF9kb25lKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IHNtaWQsIHU4IG1zaXhfaW5kZXgsCiAgICAgdTMyIHJlcGx5KQogewogCU1QSTJEZWZhdWx0UmVwbHlfdCAqbXBpX3JlcGx5OwogCiAJbXBpX3JlcGx5ID0gIG1wdDJzYXNfYmFzZV9nZXRfcmVwbHlfdmlydF9hZGRyKGlvYywgcmVwbHkpOwogCWlmIChpb2MtPnRyYW5zcG9ydF9jbWRzLnN0YXR1cyA9PSBNUFQyX0NNRF9OT1RfVVNFRCkKLQkJcmV0dXJuOworCQlyZXR1cm4gMTsKIAlpZiAoaW9jLT50cmFuc3BvcnRfY21kcy5zbWlkICE9IHNtaWQpCi0JCXJldHVybjsKKwkJcmV0dXJuIDE7CiAJaW9jLT50cmFuc3BvcnRfY21kcy5zdGF0dXMgfD0gTVBUMl9DTURfQ09NUExFVEU7CiAJaWYgKG1waV9yZXBseSkgewogCQltZW1jcHkoaW9jLT50cmFuc3BvcnRfY21kcy5yZXBseSwgbXBpX3JlcGx5LApAQCAtMjM5LDYgKzI0MCw3IEBACiAJfQogCWlvYy0+dHJhbnNwb3J0X2NtZHMuc3RhdHVzICY9IH5NUFQyX0NNRF9QRU5ESU5HOwogCWNvbXBsZXRlKCZpb2MtPnRyYW5zcG9ydF9jbWRzLmRvbmUpOworCXJldHVybiAxOwogfQogCiAvKiByZXBvcnQgbWFudWZhY3R1cmUgcmVxdWVzdCBzdHJ1Y3R1cmUgKi8KQEAgLTM2OSw2ICszNzEsOCBAQAogCW1lbXNldChtcGlfcmVxdWVzdCwgMCwgc2l6ZW9mKE1waTJTbXBQYXNzdGhyb3VnaFJlcXVlc3RfdCkpOwogCW1waV9yZXF1ZXN0LT5GdW5jdGlvbiA9IE1QSTJfRlVOQ1RJT05fU01QX1BBU1NUSFJPVUdIOwogCW1waV9yZXF1ZXN0LT5QaHlzaWNhbFBvcnQgPSAweEZGOworCW1waV9yZXF1ZXN0LT5WRl9JRCA9IDA7IC8qIFRPRE8gKi8KKwltcGlfcmVxdWVzdC0+VlBfSUQgPSAwOwogCXNhc19hZGRyZXNzX2xlID0gKHU2NCAqKSZtcGlfcmVxdWVzdC0+U0FTQWRkcmVzczsKIAkqc2FzX2FkZHJlc3NfbGUgPSBjcHVfdG9fbGU2NChzYXNfYWRkcmVzcyk7CiAJbXBpX3JlcXVlc3QtPlJlcXVlc3REYXRhTGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCByZXBfbWFudV9yZXF1ZXN0KTsKQEAgLTM5Niw3ICs0MDAsOCBAQAogCWR0cmFuc3BvcnRwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19ERUJVR19GTVQgInJlcG9ydF9tYW51ZmFjdHVyZSAtICIKIAkgICAgInNlbmQgdG8gc2FzX2FkZHIoMHglMDE2bGx4KVxuIiwgaW9jLT5uYW1lLAogCSAgICAodW5zaWduZWQgbG9uZyBsb25nKXNhc19hZGRyZXNzKSk7Ci0JbXB0MnNhc19iYXNlX3B1dF9zbWlkX2RlZmF1bHQoaW9jLCBzbWlkLCAwIC8qIFZGX0lEICovKTsKKwltcHQyc2FzX2Jhc2VfcHV0X3NtaWRfZGVmYXVsdChpb2MsIHNtaWQpOworCWluaXRfY29tcGxldGlvbigmaW9jLT50cmFuc3BvcnRfY21kcy5kb25lKTsKIAl0aW1lbGVmdCA9IHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmaW9jLT50cmFuc3BvcnRfY21kcy5kb25lLAogCSAgICAxMCpIWik7CiAKQEAgLTExMDYsNiArMTExMSw4IEBACiAJbWVtc2V0KG1waV9yZXF1ZXN0LCAwLCBzaXplb2YoTXBpMlNtcFBhc3N0aHJvdWdoUmVxdWVzdF90KSk7CiAJbXBpX3JlcXVlc3QtPkZ1bmN0aW9uID0gTVBJMl9GVU5DVElPTl9TTVBfUEFTU1RIUk9VR0g7CiAJbXBpX3JlcXVlc3QtPlBoeXNpY2FsUG9ydCA9IDB4RkY7CisJbXBpX3JlcXVlc3QtPlZGX0lEID0gMDsgLyogVE9ETyAqLworCW1waV9yZXF1ZXN0LT5WUF9JRCA9IDA7CiAJKigodTY0ICopJm1waV9yZXF1ZXN0LT5TQVNBZGRyZXNzKSA9IChycGh5KSA/CiAJICAgIGNwdV90b19sZTY0KHJwaHktPmlkZW50aWZ5LnNhc19hZGRyZXNzKSA6CiAJICAgIGNwdV90b19sZTY0KGlvYy0+c2FzX2hiYS5zYXNfYWRkcmVzcyk7CkBAIC0xMTQ3LDcgKzExNTQsOCBAQAogCWR0cmFuc3BvcnRwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19ERUJVR19GTVQgIiVzIC0gIgogCSAgICAic2VuZGluZyBzbXAgcmVxdWVzdFxuIiwgaW9jLT5uYW1lLCBfX2Z1bmNfXykpOwogCi0JbXB0MnNhc19iYXNlX3B1dF9zbWlkX2RlZmF1bHQoaW9jLCBzbWlkLCAwIC8qIFZGX0lEICovKTsKKwltcHQyc2FzX2Jhc2VfcHV0X3NtaWRfZGVmYXVsdChpb2MsIHNtaWQpOworCWluaXRfY29tcGxldGlvbigmaW9jLT50cmFuc3BvcnRfY21kcy5kb25lKTsKIAl0aW1lbGVmdCA9IHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmaW9jLT50cmFuc3BvcnRfY21kcy5kb25lLAogCSAgICAxMCpIWik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tdnNhcy9tdl9kZWZzLmggYi9kcml2ZXJzL3Njc2kvbXZzYXMvbXZfZGVmcy5oCmluZGV4IGY4Y2I5ZGUuLjE4NDlkYTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tdnNhcy9tdl9kZWZzLmgKKysrIGIvZHJpdmVycy9zY3NpL212c2FzL212X2RlZnMuaApAQCAtMjUsNiArMjUsOCBAQAogI2lmbmRlZiBfTVZfREVGU19IXwogI2RlZmluZSBfTVZfREVGU19IXwogCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVJFQ0FfMTMwMAkweDEzMDAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BUkVDQV8xMzIwCTB4MTMyMAogCiBlbnVtIGNoaXBfZmxhdm9ycyB7CiAJY2hpcF82MzIwLApAQCAtMzIsNiArMzQsOCBAQAogCWNoaXBfNjQ4NSwKIAljaGlwXzk0ODAsCiAJY2hpcF85MTgwLAorCWNoaXBfMTMwMCwKKwljaGlwXzEzMjAKIH07CiAKIC8qIGRyaXZlciBjb21waWxlLXRpbWUgY29uZmlndXJhdGlvbiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL212c2FzL212X2luaXQuYyBiL2RyaXZlcnMvc2NzaS9tdnNhcy9tdl9pbml0LmMKaW5kZXggODY0NmExOS4uYzc5MGQ0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL212c2FzL212X2luaXQuYworKysgYi9kcml2ZXJzL3Njc2kvbXZzYXMvbXZfaW5pdC5jCkBAIC0zMiw2ICszMiw4IEBACiAJW2NoaXBfNjQ4NV0gPQl7IDEsIDgsIDB4ODAwLCAzMywgMzIsIDEwLCAmbXZzXzY0eHhfZGlzcGF0Y2gsIH0sCiAJW2NoaXBfOTE4MF0gPQl7IDIsIDQsIDB4ODAwLCAxNywgNjQsICA5LCAmbXZzXzk0eHhfZGlzcGF0Y2gsIH0sCiAJW2NoaXBfOTQ4MF0gPQl7IDIsIDQsIDB4ODAwLCAxNywgNjQsICA5LCAmbXZzXzk0eHhfZGlzcGF0Y2gsIH0sCisJW2NoaXBfMTMwMF0gPQl7IDEsIDQsIDB4NDAwLCAxNywgMTYsICA5LCAmbXZzXzY0eHhfZGlzcGF0Y2gsIH0sCisJW2NoaXBfMTMyMF0gPQl7IDIsIDQsIDB4ODAwLCAxNywgNjQsICA5LCAmbXZzXzk0eHhfZGlzcGF0Y2gsIH0sCiB9OwogCiAjZGVmaW5lIFNPQ19TQVNfTlVNIDIKQEAgLTY1Myw2ICs2NTUsOCBAQAogCXsgUENJX1ZERVZJQ0UoTUFSVkVMTCwgMHg2NDg1KSwgY2hpcF82NDg1IH0sCiAJeyBQQ0lfVkRFVklDRShNQVJWRUxMLCAweDk0ODApLCBjaGlwXzk0ODAgfSwKIAl7IFBDSV9WREVWSUNFKE1BUlZFTEwsIDB4OTE4MCksIGNoaXBfOTE4MCB9LAorCXsgUENJX1ZERVZJQ0UoQVJFQ0EsIFBDSV9ERVZJQ0VfSURfQVJFQ0FfMTMwMCksIGNoaXBfMTMwMCB9LAorCXsgUENJX1ZERVZJQ0UoQVJFQ0EsIFBDSV9ERVZJQ0VfSURfQVJFQ0FfMTMyMCksIGNoaXBfMTMyMCB9LAogCiAJeyB9CS8qIHRlcm1pbmF0ZSBsaXN0ICovCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3BtY3JhaWQuYyBiL2RyaXZlcnMvc2NzaS9wbWNyYWlkLmMKaW5kZXggNDMwMmYwNi4uZjdjNzBlMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3BtY3JhaWQuYworKysgYi9kcml2ZXJzL3Njc2kvcG1jcmFpZC5jCkBAIC00Niw2ICs0Niw3IEBACiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxzY3NpL3Njc2kuaD4KICNpbmNsdWRlIDxzY3NpL3Njc2lfaG9zdC5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV9kZXZpY2UuaD4KICNpbmNsdWRlIDxzY3NpL3Njc2lfdGNxLmg+CiAjaW5jbHVkZSA8c2NzaS9zY3NpX2VoLmg+CiAjaW5jbHVkZSA8c2NzaS9zY3NpX2NtbmQuaD4KQEAgLTY4NCw3ICs2ODUsNyBAQAogCXN0cnVjdCBwbWNyYWlkX2luc3RhbmNlICpwaW5zdGFuY2UgPSBjbWQtPmRydl9pbnN0OwogCXVuc2lnbmVkIGxvbmcgbG9ja19mbGFnczsKIAotCWRldl9lcnIoJnBpbnN0YW5jZS0+cGRldi0+ZGV2LAorCWRldl9pbmZvKCZwaW5zdGFuY2UtPnBkZXYtPmRldiwKIAkJIkFkYXB0ZXIgYmVpbmcgcmVzZXQgZHVlIHRvIGNvbW1hbmQgdGltZW91dC5cbiIpOwogCiAJLyogQ29tbWFuZCB0aW1lb3V0cyByZXN1bHQgaW4gaGFyZCByZXNldCBzZXF1ZW5jZS4gVGhlIGNvbW1hbmQgdGhhdCBnb3QKQEAgLTgxNSw4ICs4MTYsOSBAQAogCiAJaWYgKFBNQ1JBSURfSU9BU0NfU0VOU0VfS0VZKGlvYXNjKSA+IDApIHsKIAkJc2NzaV9jbWQtPnJlc3VsdCB8PSAoRElEX0VSUk9SIDw8IDE2KTsKLQkJcG1jcmFpZF9lcnIoImNvbW1hbmQgQ0RCWzBdID0gJXggZmFpbGVkIHdpdGggSU9BU0M6IDB4JTA4WFxuIiwKLQkJCSAgICAgY21kLT5pb2FfY2ItPmlvYXJjYi5jZGJbMF0sIGlvYXNjKTsKKwkJc2NtZF9wcmludGsoS0VSTl9JTkZPLCBzY3NpX2NtZCwKKwkJCSAgICAiY29tbWFuZCBDREJbMF0gPSAleCBmYWlsZWQgd2l0aCBJT0FTQzogMHglMDhYXG4iLAorCQkJICAgIGNtZC0+aW9hX2NiLT5pb2FyY2IuY2RiWzBdLCBpb2FzYyk7CiAJfQogCiAJLyogaWYgd2UgaGFkIGFsbG9jYXRlZCBzZW5zZSBidWZmZXJzIGZvciByZXF1ZXN0IHNlbnNlLCBjb3B5IHRoZSBzZW5zZQpAQCAtMTU0MSwxMyArMTU0MywxMyBAQAogCiAJaWYgKHBpbnN0YW5jZS0+bGRuLmhjYW0tPm5vdGlmaWNhdGlvbl9sb3N0ID09CiAJICAgIEhPU1RSQ0JfTk9USUZJQ0FUSU9OU19MT1NUKQotCQlkZXZfZXJyKCZwaW5zdGFuY2UtPnBkZXYtPmRldiwgIkVycm9yIG5vdGlmaWNhdGlvbnMgbG9zdFxuIik7CisJCWRldl9pbmZvKCZwaW5zdGFuY2UtPnBkZXYtPmRldiwgIkVycm9yIG5vdGlmaWNhdGlvbnMgbG9zdFxuIik7CiAKIAlpb2FzYyA9IGxlMzJfdG9fY3B1KGhjYW1fbGRuLT5lcnJvcl9sb2cuZmRfaW9hc2MpOwogCiAJaWYgKGlvYXNjID09IFBNQ1JBSURfSU9BU0NfVUFfQlVTX1dBU19SRVNFVCB8fAogCQlpb2FzYyA9PSBQTUNSQUlEX0lPQVNDX1VBX0JVU19XQVNfUkVTRVRfQllfT1RIRVIpIHsKLQkJZGV2X2VycigmcGluc3RhbmNlLT5wZGV2LT5kZXYsCisJCWRldl9pbmZvKCZwaW5zdGFuY2UtPnBkZXYtPmRldiwKIAkJCSJVbml0QXR0ZW50aW9uIGR1ZSB0byBJT0EgQnVzIFJlc2V0XG4iKTsKIAkJc2NzaV9yZXBvcnRfYnVzX3Jlc2V0KAogCQkJcGluc3RhbmNlLT5ob3N0LApAQCAtMTU4NCw3ICsxNTg2LDcgQEAKIAkgICAgYXRvbWljX3JlYWQoJnBpbnN0YW5jZS0+Y2NuLmlnbm9yZSkgPT0gMSkgewogCQlyZXR1cm47CiAJfSBlbHNlIGlmIChpb2FzYykgewotCQlkZXZfZXJyKCZwaW5zdGFuY2UtPnBkZXYtPmRldiwKKwkJZGV2X2luZm8oJnBpbnN0YW5jZS0+cGRldi0+ZGV2LAogCQkJIkhvc3QgUkNCIChDQ04pIGZhaWxlZCB3aXRoIElPQVNDOiAweCUwOFhcbiIsIGlvYXNjKTsKIAkJc3Bpbl9sb2NrX2lycXNhdmUocGluc3RhbmNlLT5ob3N0LT5ob3N0X2xvY2ssIGxvY2tfZmxhZ3MpOwogCQlwbWNyYWlkX3NlbmRfaGNhbShwaW5zdGFuY2UsIFBNQ1JBSURfSENBTV9DT0RFX0NPTkZJR19DSEFOR0UpOwpAQCAtMTYzNCw3ICsxNjM2LDcgQEAKIAkJCXJldHVybjsKIAkJfQogCX0gZWxzZSB7Ci0JCWRldl9lcnIoJnBpbnN0YW5jZS0+cGRldi0+ZGV2LAorCQlkZXZfaW5mbygmcGluc3RhbmNlLT5wZGV2LT5kZXYsCiAJCQkiSG9zdCBSQ0IoTEROKSBmYWlsZWQgd2l0aCBJT0FTQzogMHglMDhYXG4iLCBpb2FzYyk7CiAJfQogCS8qIHNlbmQgbmV0bGluayBtZXNzYWdlIGZvciBIQ0FNIG5vdGlmaWNhdGlvbiBpZiBlbmFibGVkICovCkBAIC0xODIyLDcgKzE4MjQsNiBAQAogCQkJc2NzaV9kbWFfdW5tYXAoc2NzaV9jbWQpOwogCQkJcG1jcmFpZF9yZXR1cm5fY21kKGNtZCk7CiAKLQogCQkJcG1jcmFpZF9pbmZvKCJmYWlsaW5nKCVkKSBDREJbMF0gPSAleCByZXN1bHQ6ICV4XG4iLAogCQkJCSAgICAgbGUzMl90b19jcHUocmVzcCkgPj4gMiwKIAkJCQkgICAgIGNtZC0+aW9hX2NiLT5pb2FyY2IuY2RiWzBdLApAQCAtMjUxNCw3ICsyNTE1LDggQEAKIAlyZXMgPSBzY3NpX2NtZC0+ZGV2aWNlLT5ob3N0ZGF0YTsKIAogCWlmICghcmVzKSB7Ci0JCXBtY3JhaWRfZXJyKCJyZXNldF9kZXZpY2U6IE5VTEwgcmVzb3VyY2UgcG9pbnRlclxuIik7CisJCXNkZXZfcHJpbnRrKEtFUk5fRVJSLCBzY3NpX2NtZC0+ZGV2aWNlLAorCQkJICAgICJyZXNldF9kZXZpY2U6IE5VTEwgcmVzb3VyY2UgcG9pbnRlclxuIik7CiAJCXJldHVybiBGQUlMRUQ7CiAJfQogCkBAIC0yNzUyLDggKzI3NTQsOCBAQAogCXBpbnN0YW5jZSA9CiAJCShzdHJ1Y3QgcG1jcmFpZF9pbnN0YW5jZSAqKXNjc2lfY21kLT5kZXZpY2UtPmhvc3QtPmhvc3RkYXRhOwogCi0JZGV2X2VycigmcGluc3RhbmNlLT5wZGV2LT5kZXYsCi0JCSJJL08gY29tbWFuZCB0aW1lZCBvdXQsIGFib3J0aW5nIGl0LlxuIik7CisJc2NtZF9wcmludGsoS0VSTl9JTkZPLCBzY3NpX2NtZCwKKwkJICAgICJJL08gY29tbWFuZCB0aW1lZCBvdXQsIGFib3J0aW5nIGl0LlxuIik7CiAKIAlyZXMgPSBzY3NpX2NtZC0+ZGV2aWNlLT5ob3N0ZGF0YTsKIApAQCAtMjgyNCw3ICsyODI2LDggQEAKICAqLwogc3RhdGljIGludCBwbWNyYWlkX2VoX2RldmljZV9yZXNldF9oYW5kbGVyKHN0cnVjdCBzY3NpX2NtbmQgKnNjbWQpCiB7Ci0JcG1jcmFpZF9lcnIoIkRvaW5nIGRldmljZSByZXNldCBkdWUgdG8gYW4gSS9PIGNvbW1hbmQgdGltZW91dC5cbiIpOworCXNjbWRfcHJpbnRrKEtFUk5fSU5GTywgc2NtZCwKKwkJICAgICJyZXNldHRpbmcgZGV2aWNlIGR1ZSB0byBhbiBJL08gY29tbWFuZCB0aW1lb3V0LlxuIik7CiAJcmV0dXJuIHBtY3JhaWRfcmVzZXRfZGV2aWNlKHNjbWQsCiAJCQkJICAgIFBNQ1JBSURfSU5URVJOQUxfVElNRU9VVCwKIAkJCQkgICAgUkVTRVRfREVWSUNFX0xVTik7CkBAIC0yODMyLDcgKzI4MzUsOCBAQAogCiBzdGF0aWMgaW50IHBtY3JhaWRfZWhfYnVzX3Jlc2V0X2hhbmRsZXIoc3RydWN0IHNjc2lfY21uZCAqc2NtZCkKIHsKLQlwbWNyYWlkX2VycigiRG9pbmcgYnVzIHJlc2V0IGR1ZSB0byBhbiBJL08gY29tbWFuZCB0aW1lb3V0LlxuIik7CisJc2NtZF9wcmludGsoS0VSTl9JTkZPLCBzY21kLAorCQkgICAgIkRvaW5nIGJ1cyByZXNldCBkdWUgdG8gYW4gSS9PIGNvbW1hbmQgdGltZW91dC5cbiIpOwogCXJldHVybiBwbWNyYWlkX3Jlc2V0X2RldmljZShzY21kLAogCQkJCSAgICBQTUNSQUlEX1JFU0VUX0JVU19USU1FT1VULAogCQkJCSAgICBSRVNFVF9ERVZJQ0VfQlVTKTsKQEAgLTI4NDAsNyArMjg0NCw4IEBACiAKIHN0YXRpYyBpbnQgcG1jcmFpZF9laF90YXJnZXRfcmVzZXRfaGFuZGxlcihzdHJ1Y3Qgc2NzaV9jbW5kICpzY21kKQogewotCXBtY3JhaWRfZXJyKCJEb2luZyB0YXJnZXQgcmVzZXQgZHVlIHRvIGFuIEkvTyBjb21tYW5kIHRpbWVvdXQuXG4iKTsKKwlzY21kX3ByaW50ayhLRVJOX0lORk8sIHNjbWQsCisJCSAgICAiRG9pbmcgdGFyZ2V0IHJlc2V0IGR1ZSB0byBhbiBJL08gY29tbWFuZCB0aW1lb3V0LlxuIik7CiAJcmV0dXJuIHBtY3JhaWRfcmVzZXRfZGV2aWNlKHNjbWQsCiAJCQkJICAgIFBNQ1JBSURfSU5URVJOQUxfVElNRU9VVCwKIAkJCQkgICAgUkVTRVRfREVWSUNFX1RBUkdFVCk7CkBAIC0yOTg4LDExICsyOTkzLDExIEBACiAJbnNlZyA9IHNjc2lfZG1hX21hcChzY3NpX2NtZCk7CiAKIAlpZiAobnNlZyA8IDApIHsKLQkJZGV2X2VycigmcGluc3RhbmNlLT5wZGV2LT5kZXYsICJzY3NpX21hcF9kbWEgZmFpbGVkIVxuIik7CisJCXNjbWRfcHJpbnRrKEtFUk5fRVJSLCBzY3NpX2NtZCwgInNjc2lfbWFwX2RtYSBmYWlsZWQhXG4iKTsKIAkJcmV0dXJuIC0xOwogCX0gZWxzZSBpZiAobnNlZyA+IFBNQ1JBSURfTUFYX0lPQURMUykgewogCQlzY3NpX2RtYV91bm1hcChzY3NpX2NtZCk7Ci0JCWRldl9lcnIoJnBpbnN0YW5jZS0+cGRldi0+ZGV2LAorCQlzY21kX3ByaW50ayhLRVJOX0VSUiwgc2NzaV9jbWQsCiAJCQkic2cgY291bnQgaXMgKCVkKSBtb3JlIHRoYW4gYWxsb3dlZCFcbiIsIG5zZWcpOwogCQlyZXR1cm4gLTE7CiAJfQpAQCAtNTA0MCw3ICs1MDQ1LDcgQEAKIAlyYyA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOwogCiAJaWYgKHJjKSB7Ci0JCXBtY3JhaWRfZXJyKCJwbWNyYWlkOiBFbmFibGUgZGV2aWNlIGZhaWxlZFxuIik7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgInJlc3VtZTogRW5hYmxlIGRldmljZSBmYWlsZWRcbiIpOwogCQlyZXR1cm4gcmM7CiAJfQogCkBAIC01MDU0LDcgKzUwNTksNyBAQAogCQlyYyA9IHBjaV9zZXRfY29uc2lzdGVudF9kbWFfbWFzayhwZGV2LCBETUFfQklUX01BU0soMzIpKTsKIAogCWlmIChyYyAhPSAwKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWxlZCB0byBzZXQgUENJIERNQSBtYXNrXG4iKTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAicmVzdW1lOiBGYWlsZWQgdG8gc2V0IFBDSSBETUEgbWFza1xuIik7CiAJCWdvdG8gZGlzYWJsZV9kZXZpY2U7CiAJfQogCkBAIC01MDYzLDcgKzUwNjgsOCBAQAogCXJjID0gcG1jcmFpZF9yZWdpc3Rlcl9pbnRlcnJ1cHRfaGFuZGxlcihwaW5zdGFuY2UpOwogCiAJaWYgKHJjKSB7Ci0JCXBtY3JhaWRfZXJyKCJyZXN1bWU6IGNvdWxkbid0IHJlZ2lzdGVyIGludGVycnVwdCBoYW5kbGVyc1xuIik7CisJCWRldl9lcnIoJnBkZXYtPmRldiwKKwkJCSJyZXN1bWU6IGNvdWxkbid0IHJlZ2lzdGVyIGludGVycnVwdCBoYW5kbGVyc1xuIik7CiAJCXJjID0gLUVOT0RFVjsKIAkJZ290byByZWxlYXNlX2hvc3Q7CiAJfQpAQCAtNTA4MCw3ICs1MDg2LDcgQEAKIAkgKiBzdGF0ZS4KIAkgKi8KIAlpZiAocG1jcmFpZF9yZXNldF9icmluZ3VwKHBpbnN0YW5jZSkpIHsKLQkJcG1jcmFpZF9lcnIoImNvdWxkbid0IGluaXRpYWxpemUgSU9BIFxuIik7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImNvdWxkbid0IGluaXRpYWxpemUgSU9BIFxuIik7CiAJCXJjID0gLUVOT0RFVjsKIAkJZ290byByZWxlYXNlX3Rhc2tsZXRzOwogCX0KQEAgLTUxODcsNyArNTE5Myw3IEBACiAJTElTVF9IRUFEKG9sZF9yZXMpOwogCiAJaWYgKHBpbnN0YW5jZS0+Y2ZnX3RhYmxlLT5mbGFncyAmIE1JQ1JPQ09ERV9VUERBVEVfUkVRVUlSRUQpCi0JCWRldl9lcnIoJnBpbnN0YW5jZS0+cGRldi0+ZGV2LCAiUmVxdWlyZSBtaWNyb2NvZGUgZG93bmxvYWRcbiIpOworCQlwbWNyYWlkX2VycigiSU9BIHJlcXVpcmVzIG1pY3JvY29kZSBkb3dubG9hZFxuIik7CiAKIAkvKiByZXNvdXJjZSBsaXN0IGlzIHByb3RlY3RlZCBieSBwaW5zdGFuY2UtPnJlc291cmNlX2xvY2suCiAJICogaW5pdF9yZXNfdGFibGUgY2FuIGJlIGNhbGxlZCBmcm9tIHByb2JlICh1c2VyLXRocmVhZCkgb3IgcnVudGltZQpAQCAtNTIyNCw4ICs1MjMwLDcgQEAKIAkJaWYgKCFmb3VuZCkgewogCiAJCQlpZiAobGlzdF9lbXB0eSgmcGluc3RhbmNlLT5mcmVlX3Jlc19xKSkgewotCQkJCWRldl9lcnIoJnBpbnN0YW5jZS0+cGRldi0+ZGV2LAotCQkJCQkiVG9vIG1hbnkgZGV2aWNlcyBhdHRhY2hlZFxuIik7CisJCQkJcG1jcmFpZF9lcnIoIlRvbyBtYW55IGRldmljZXMgYXR0YWNoZWRcbiIpOwogCQkJCWJyZWFrOwogCQkJfQogCkBAIC01NDQyLDcgKzU0NDcsNyBAQAogCXJjID0gcG1jcmFpZF9yZWdpc3Rlcl9pbnRlcnJ1cHRfaGFuZGxlcihwaW5zdGFuY2UpOwogCiAJaWYgKHJjKSB7Ci0JCXBtY3JhaWRfZXJyKCJjb3VsZG4ndCByZWdpc3RlciBpbnRlcnJ1cHQgaGFuZGxlclxuIik7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImNvdWxkbid0IHJlZ2lzdGVyIGludGVycnVwdCBoYW5kbGVyXG4iKTsKIAkJZ290byBvdXRfc2NzaV9ob3N0X3B1dDsKIAl9CiAKQEAgLTU0NjYsNyArNTQ3MSw3IEBACiAJICovCiAJcG1jcmFpZF9pbmZvKCJzdGFydGluZyBJT0EgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2VcbiIpOwogCWlmIChwbWNyYWlkX3Jlc2V0X2JyaW5ndXAocGluc3RhbmNlKSkgewotCQlwbWNyYWlkX2VycigiY291bGRuJ3QgaW5pdGlhbGl6ZSBJT0EgXG4iKTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiY291bGRuJ3QgaW5pdGlhbGl6ZSBJT0EgXG4iKTsKIAkJcmMgPSAxOwogCQlnb3RvIG91dF9yZWxlYXNlX2J1ZnM7CiAJfQpAQCAtNTUzNCw3ICs1NTM5LDYgQEAKIAkuc2h1dGRvd24gPSBwbWNyYWlkX3NodXRkb3duCiB9OwogCi0KIC8qKgogICogcG1jcmFpZF9pbml0IC0gbW9kdWxlIGxvYWQgZW50cnkgcG9pbnQKICAqLwpAQCAtNTU2Niw3ICs1NTcwLDYgQEAKIAkJZ290byBvdXRfdW5yZWdfY2hyZGV2OwogCX0KIAotCiAJZXJyb3IgPSBwbWNyYWlkX25ldGxpbmtfaW5pdCgpOwogCiAJaWYgKGVycm9yKQpAQCAtNTU4NCw2ICs1NTg3LDcgQEAKIAogb3V0X3VucmVnX2NocmRldjoKIAl1bnJlZ2lzdGVyX2NocmRldl9yZWdpb24oTUtERVYocG1jcmFpZF9tYWpvciwgMCksIFBNQ1JBSURfTUFYX0FEQVBURVJTKTsKKwogb3V0X2luaXQ6CiAJcmV0dXJuIGVycm9yOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3BtY3JhaWQuaCBiL2RyaXZlcnMvc2NzaS9wbWNyYWlkLmgKaW5kZXggNjE0YjNhNy4uMzQ0MWIzZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3BtY3JhaWQuaAorKysgYi9kcml2ZXJzL3Njc2kvcG1jcmFpZC5oCkBAIC0yNiw3ICsyNiw2IEBACiAjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxzY3NpL3Njc2kuaD4KLSNpbmNsdWRlIDxsaW51eC9rcmVmLmg+CiAjaW5jbHVkZSA8c2NzaS9zY3NpX2NtbmQuaD4KICNpbmNsdWRlIDxsaW51eC9jZGV2Lmg+CiAjaW5jbHVkZSA8bmV0L25ldGxpbmsuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9taWQuYyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9taWQuYwppbmRleCA0MmI3OTlhLi5lMDdiMzYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfbWlkLmMKKysrIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX21pZC5jCkBAIC01NjgsNyArNTY4LDcgQEAKIAlpZiAocmVxID09IE5VTEwpIHsKIAkJcWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLCAiY291bGQgbm90IGFsbG9jYXRlIG1lbW9yeSIKIAkJCSJmb3IgcmVxdWVzdCBxdWVcbiIpOwotCQlnb3RvIHF1ZV9mYWlsZWQ7CisJCWdvdG8gZmFpbGVkOwogCX0KIAogCXJlcS0+bGVuZ3RoID0gUkVRVUVTVF9FTlRSWV9DTlRfMjRYWDsKQEAgLTYzMiw2ICs2MzIsNyBAQAogCiBxdWVfZmFpbGVkOgogCXFsYTI1eHhfZnJlZV9yZXFfcXVlKGJhc2VfdmhhLCByZXEpOworZmFpbGVkOgogCXJldHVybiAwOwogfQogCkBAIC02NTksNyArNjYwLDcgQEAKIAlpZiAocnNwID09IE5VTEwpIHsKIAkJcWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLCAiY291bGQgbm90IGFsbG9jYXRlIG1lbW9yeSBmb3IiCiAJCQkJIiByZXNwb25zZSBxdWVcbiIpOwotCQlnb3RvIHF1ZV9mYWlsZWQ7CisJCWdvdG8gZmFpbGVkOwogCX0KIAogCXJzcC0+bGVuZ3RoID0gUkVTUE9OU0VfRU5UUllfQ05UX01ROwpAQCAtNzI4LDYgKzcyOSw3IEBACiAKIHF1ZV9mYWlsZWQ6CiAJcWxhMjV4eF9mcmVlX3JzcF9xdWUoYmFzZV92aGEsIHJzcCk7CitmYWlsZWQ6CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpLmMgYi9kcml2ZXJzL3Njc2kvc2NzaS5jCmluZGV4IGI2ZTAzMDcuLmRkMDk4Y2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2kuYwpAQCAtMjQxLDEwICsyNDEsNyBAQAogICovCiBzdHJ1Y3Qgc2NzaV9jbW5kICpfX3Njc2lfZ2V0X2NvbW1hbmQoc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QsIGdmcF90IGdmcF9tYXNrKQogewotCXN0cnVjdCBzY3NpX2NtbmQgKmNtZDsKLQl1bnNpZ25lZCBjaGFyICpidWY7Ci0KLQljbWQgPSBzY3NpX2hvc3RfYWxsb2NfY29tbWFuZChzaG9zdCwgZ2ZwX21hc2spOworCXN0cnVjdCBzY3NpX2NtbmQgKmNtZCA9IHNjc2lfaG9zdF9hbGxvY19jb21tYW5kKHNob3N0LCBnZnBfbWFzayk7CiAKIAlpZiAodW5saWtlbHkoIWNtZCkpIHsKIAkJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTI1OCw5ICsyNTUsMTUgQEAKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2hvc3QtPmZyZWVfbGlzdF9sb2NrLCBmbGFncyk7CiAKIAkJaWYgKGNtZCkgeworCQkJdm9pZCAqYnVmLCAqcHJvdDsKKwogCQkJYnVmID0gY21kLT5zZW5zZV9idWZmZXI7CisJCQlwcm90ID0gY21kLT5wcm90X3NkYjsKKwogCQkJbWVtc2V0KGNtZCwgMCwgc2l6ZW9mKCpjbWQpKTsKKwogCQkJY21kLT5zZW5zZV9idWZmZXIgPSBidWY7CisJCQljbWQtPnByb3Rfc2RiID0gcHJvdDsKIAkJfQogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfZGVidWcuYyBiL2RyaXZlcnMvc2NzaS9zY3NpX2RlYnVnLmMKaW5kZXggZmI5YWYyMC4uYzQxMDNiZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfZGVidWcuYworKysgYi9kcml2ZXJzL3Njc2kvc2NzaV9kZWJ1Zy5jCkBAIC01MCw2ICs1MCw3IEBACiAjaW5jbHVkZSA8c2NzaS9zY3NpX2hvc3QuaD4KICNpbmNsdWRlIDxzY3NpL3Njc2ljYW0uaD4KICNpbmNsdWRlIDxzY3NpL3Njc2lfZWguaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2lfZGJnLmg+CiAKICNpbmNsdWRlICJzZC5oIgogI2luY2x1ZGUgInNjc2lfbG9nZ2luZy5oIgpAQCAtNjQsNiArNjUsNyBAQAogI2RlZmluZSBQQVJBTUVURVJfTElTVF9MRU5HVEhfRVJSIDB4MWEKICNkZWZpbmUgSU5WQUxJRF9PUENPREUgMHgyMAogI2RlZmluZSBBRERSX09VVF9PRl9SQU5HRSAweDIxCisjZGVmaW5lIElOVkFMSURfQ09NTUFORF9PUENPREUgMHgyMAogI2RlZmluZSBJTlZBTElEX0ZJRUxEX0lOX0NEQiAweDI0CiAjZGVmaW5lIElOVkFMSURfRklFTERfSU5fUEFSQU1fTElTVCAweDI2CiAjZGVmaW5lIFBPV0VST05fUkVTRVQgMHgyOQpAQCAtMTgwLDcgKzE4Miw3IEBACiAjZGVmaW5lIFNERUJVR19TRU5TRV9MRU4gMzIKIAogI2RlZmluZSBTQ1NJX0RFQlVHX0NBTlFVRVVFICAyNTUKLSNkZWZpbmUgU0NTSV9ERUJVR19NQVhfQ01EX0xFTiAxNgorI2RlZmluZSBTQ1NJX0RFQlVHX01BWF9DTURfTEVOIDMyCiAKIHN0cnVjdCBzZGVidWdfZGV2X2luZm8gewogCXN0cnVjdCBsaXN0X2hlYWQgZGV2X2xpc3Q7CkBAIC0yOTYsOSArMjk4LDI1IEBACiB9CiAKIHN0YXRpYyB2b2lkIGdldF9kYXRhX3RyYW5zZmVyX2luZm8odW5zaWduZWQgY2hhciAqY21kLAotCQkJCSAgIHVuc2lnbmVkIGxvbmcgbG9uZyAqbGJhLCB1bnNpZ25lZCBpbnQgKm51bSkKKwkJCQkgICB1bnNpZ25lZCBsb25nIGxvbmcgKmxiYSwgdW5zaWduZWQgaW50ICpudW0sCisJCQkJICAgdTMyICplaV9sYmEpCiB7CisJKmVpX2xiYSA9IDA7CisKIAlzd2l0Y2ggKCpjbWQpIHsKKwljYXNlIFZBUklBQkxFX0xFTkdUSF9DTUQ6CisJCSpsYmEgPSAodTY0KWNtZFsxOV0gfCAodTY0KWNtZFsxOF0gPDwgOCB8CisJCQkodTY0KWNtZFsxN10gPDwgMTYgfCAodTY0KWNtZFsxNl0gPDwgMjQgfAorCQkJKHU2NCljbWRbMTVdIDw8IDMyIHwgKHU2NCljbWRbMTRdIDw8IDQwIHwKKwkJCSh1NjQpY21kWzEzXSA8PCA0OCB8ICh1NjQpY21kWzEyXSA8PCA1NjsKKworCQkqZWlfbGJhID0gKHUzMiljbWRbMjNdIHwgKHUzMiljbWRbMjJdIDw8IDggfAorCQkJKHUzMiljbWRbMjFdIDw8IDE2IHwgKHUzMiljbWRbMjBdIDw8IDI0OworCisJCSpudW0gPSAodTMyKWNtZFszMV0gfCAodTMyKWNtZFszMF0gPDwgOCB8ICh1MzIpY21kWzI5XSA8PCAxNiB8CisJCQkodTMyKWNtZFsyOF0gPDwgMjQ7CisJCWJyZWFrOworCiAJY2FzZSBXUklURV8xNjoKIAljYXNlIFJFQURfMTY6CiAJCSpsYmEgPSAodTY0KWNtZFs5XSB8ICh1NjQpY21kWzhdIDw8IDggfApAQCAtMTU4OSw3ICsxNjA3LDcgQEAKIH0KIAogc3RhdGljIGludCBwcm90X3ZlcmlmeV9yZWFkKHN0cnVjdCBzY3NpX2NtbmQgKlNDcG50LCBzZWN0b3JfdCBzdGFydF9zZWMsCi0JCQkgICAgdW5zaWduZWQgaW50IHNlY3RvcnMpCisJCQkgICAgdW5zaWduZWQgaW50IHNlY3RvcnMsIHUzMiBlaV9sYmEpCiB7CiAJdW5zaWduZWQgaW50IGksIHJlc2lkOwogCXN0cnVjdCBzY2F0dGVybGlzdCAqcHNnbDsKQEAgLTE2MzYsMTMgKzE2NTQsMjMgQEAKIAkJCXJldHVybiAweDAxOwogCQl9CiAKLQkJaWYgKHNjc2lfZGVidWdfZGlmICE9IFNEX0RJRl9UWVBFM19QUk9URUNUSU9OICYmCisJCWlmIChzY3NpX2RlYnVnX2RpZiA9PSBTRF9ESUZfVFlQRTFfUFJPVEVDVElPTiAmJgogCQkgICAgYmUzMl90b19jcHUoc2R0W2ldLnJlZl90YWcpICE9IChzZWN0b3IgJiAweGZmZmZmZmZmKSkgewogCQkJcHJpbnRrKEtFUk5fRVJSICIlczogUkVGIGNoZWNrIGZhaWxlZCBvbiBzZWN0b3IgJWx1XG4iLAogCQkJICAgICAgIF9fZnVuY19fLCAodW5zaWduZWQgbG9uZylzZWN0b3IpOwogCQkJZGlmX2Vycm9ycysrOwogCQkJcmV0dXJuIDB4MDM7CiAJCX0KKworCQlpZiAoc2NzaV9kZWJ1Z19kaWYgPT0gU0RfRElGX1RZUEUyX1BST1RFQ1RJT04gJiYKKwkJICAgIGJlMzJfdG9fY3B1KHNkdFtpXS5yZWZfdGFnKSAhPSBlaV9sYmEpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IFJFRiBjaGVjayBmYWlsZWQgb24gc2VjdG9yICVsdVxuIiwKKwkJCSAgICAgICBfX2Z1bmNfXywgKHVuc2lnbmVkIGxvbmcpc2VjdG9yKTsKKwkJCWRpZl9lcnJvcnMrKzsKKwkJCXJldHVybiAweDAzOworCQl9CisKKwkJZWlfbGJhKys7CiAJfQogCiAJcmVzaWQgPSBzZWN0b3JzICogODsgLyogQnl0ZXMgb2YgcHJvdGVjdGlvbiBkYXRhIHRvIGNvcHkgaW50byBzZ2wgKi8KQEAgLTE2NzAsNyArMTY5OCw4IEBACiB9CiAKIHN0YXRpYyBpbnQgcmVzcF9yZWFkKHN0cnVjdCBzY3NpX2NtbmQgKlNDcG50LCB1bnNpZ25lZCBsb25nIGxvbmcgbGJhLAotCQkgICAgIHVuc2lnbmVkIGludCBudW0sIHN0cnVjdCBzZGVidWdfZGV2X2luZm8gKmRldmlwKQorCQkgICAgIHVuc2lnbmVkIGludCBudW0sIHN0cnVjdCBzZGVidWdfZGV2X2luZm8gKmRldmlwLAorCQkgICAgIHUzMiBlaV9sYmEpCiB7CiAJdW5zaWduZWQgbG9uZyBpZmxhZ3M7CiAJaW50IHJldDsKQEAgLTE2OTksNyArMTcyOCw3IEBACiAKIAkvKiBESVggKyBUMTAgRElGICovCiAJaWYgKHNjc2lfZGVidWdfZGl4ICYmIHNjc2lfcHJvdF9zZ19jb3VudChTQ3BudCkpIHsKLQkJaW50IHByb3RfcmV0ID0gcHJvdF92ZXJpZnlfcmVhZChTQ3BudCwgbGJhLCBudW0pOworCQlpbnQgcHJvdF9yZXQgPSBwcm90X3ZlcmlmeV9yZWFkKFNDcG50LCBsYmEsIG51bSwgZWlfbGJhKTsKIAogCQlpZiAocHJvdF9yZXQpIHsKIAkJCW1rX3NlbnNlX2J1ZmZlcihkZXZpcCwgQUJPUlRFRF9DT01NQU5ELCAweDEwLCBwcm90X3JldCk7CkBAIC0xNzM1LDcgKzE3NjQsNyBAQAogfQogCiBzdGF0aWMgaW50IHByb3RfdmVyaWZ5X3dyaXRlKHN0cnVjdCBzY3NpX2NtbmQgKlNDcG50LCBzZWN0b3JfdCBzdGFydF9zZWMsCi0JCQkgICAgIHVuc2lnbmVkIGludCBzZWN0b3JzKQorCQkJICAgICB1bnNpZ25lZCBpbnQgc2VjdG9ycywgdTMyIGVpX2xiYSkKIHsKIAlpbnQgaSwgaiwgcmV0OwogCXN0cnVjdCBzZF9kaWZfdHVwbGUgKnNkdDsKQEAgLTE3NDksMTEgKzE3NzgsNiBAQAogCiAJc2VjdG9yID0gZG9fZGl2KHRtcF9zZWMsIHNkZWJ1Z19zdG9yZV9zZWN0b3JzKTsKIAotCWlmICgoKFNDcG50LT5jbW5kWzFdID4+IDUpICYgNykgIT0gMSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJzY3NpX2RlYnVnOiBXUlBST1RFQ1QgIT0gMVxuIik7Ci0JCXJldHVybiAwOwotCX0KLQogCUJVR19PTihzY3NpX3NnX2NvdW50KFNDcG50KSA9PSAwKTsKIAlCVUdfT04oc2NzaV9wcm90X3NnX2NvdW50KFNDcG50KSA9PSAwKTsKIApAQCAtMTgwOCw3ICsxODMyLDcgQEAKIAkJCQlnb3RvIG91dDsKIAkJCX0KIAotCQkJaWYgKHNjc2lfZGVidWdfZGlmICE9IFNEX0RJRl9UWVBFM19QUk9URUNUSU9OICYmCisJCQlpZiAoc2NzaV9kZWJ1Z19kaWYgPT0gU0RfRElGX1RZUEUxX1BST1RFQ1RJT04gJiYKIAkJCSAgICBiZTMyX3RvX2NwdShzZHQtPnJlZl90YWcpCiAJCQkgICAgIT0gKHN0YXJ0X3NlYyAmIDB4ZmZmZmZmZmYpKSB7CiAJCQkJcHJpbnRrKEtFUk5fRVJSCkBAIC0xODE5LDYgKzE4NDMsMTYgQEAKIAkJCQlnb3RvIG91dDsKIAkJCX0KIAorCQkJaWYgKHNjc2lfZGVidWdfZGlmID09IFNEX0RJRl9UWVBFMl9QUk9URUNUSU9OICYmCisJCQkgICAgYmUzMl90b19jcHUoc2R0LT5yZWZfdGFnKSAhPSBlaV9sYmEpIHsKKwkJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkgICAgICAgIiVzOiBSRUYgY2hlY2sgZmFpbGVkIG9uIHNlY3RvciAlbHVcbiIsCisJCQkJICAgICAgIF9fZnVuY19fLCAodW5zaWduZWQgbG9uZylzZWN0b3IpOworCQkJCXJldCA9IDB4MDM7CisJCQkJZHVtcF9zZWN0b3IoZGFkZHIsIHNjc2lfZGVidWdfc2VjdG9yX3NpemUpOworCQkJCWdvdG8gb3V0OworCQkJfQorCiAJCQkvKiBXb3VsZCBiZSBncmVhdCB0byBjb3B5IHRoaXMgaW4gYmlnZ2VyCiAJCQkgKiBjaHVua3MuICBIb3dldmVyLCBmb3IgdGhlIHNha2Ugb2YKIAkJCSAqIGNvcnJlY3RuZXNzIHdlIG5lZWQgdG8gdmVyaWZ5IGVhY2ggc2VjdG9yCkBAIC0xODMyLDYgKzE4NjYsNyBAQAogCQkJCXNlY3RvciA9IDA7CS8qIEZvcmNlIHdyYXAgKi8KIAogCQkJc3RhcnRfc2VjKys7CisJCQllaV9sYmErKzsKIAkJCWRhZGRyICs9IHNjc2lfZGVidWdfc2VjdG9yX3NpemU7CiAJCQlwcGFnZV9vZmZzZXQgKz0gc2l6ZW9mKHN0cnVjdCBzZF9kaWZfdHVwbGUpOwogCQl9CkBAIC0xODUzLDcgKzE4ODgsOCBAQAogfQogCiBzdGF0aWMgaW50IHJlc3Bfd3JpdGUoc3RydWN0IHNjc2lfY21uZCAqU0NwbnQsIHVuc2lnbmVkIGxvbmcgbG9uZyBsYmEsCi0JCSAgICAgIHVuc2lnbmVkIGludCBudW0sIHN0cnVjdCBzZGVidWdfZGV2X2luZm8gKmRldmlwKQorCQkgICAgICB1bnNpZ25lZCBpbnQgbnVtLCBzdHJ1Y3Qgc2RlYnVnX2Rldl9pbmZvICpkZXZpcCwKKwkJICAgICAgdTMyIGVpX2xiYSkKIHsKIAl1bnNpZ25lZCBsb25nIGlmbGFnczsKIAlpbnQgcmV0OwpAQCAtMTg2NCw3ICsxOTAwLDcgQEAKIAogCS8qIERJWCArIFQxMCBESUYgKi8KIAlpZiAoc2NzaV9kZWJ1Z19kaXggJiYgc2NzaV9wcm90X3NnX2NvdW50KFNDcG50KSkgewotCQlpbnQgcHJvdF9yZXQgPSBwcm90X3ZlcmlmeV93cml0ZShTQ3BudCwgbGJhLCBudW0pOworCQlpbnQgcHJvdF9yZXQgPSBwcm90X3ZlcmlmeV93cml0ZShTQ3BudCwgbGJhLCBudW0sIGVpX2xiYSk7CiAKIAkJaWYgKHByb3RfcmV0KSB7CiAJCQlta19zZW5zZV9idWZmZXIoZGV2aXAsIElMTEVHQUxfUkVRVUVTVCwgMHgxMCwgcHJvdF9yZXQpOwpAQCAtMjg3MiwxMSArMjkwOCwxMiBAQAogCiAJY2FzZSBTRF9ESUZfVFlQRTBfUFJPVEVDVElPTjoKIAljYXNlIFNEX0RJRl9UWVBFMV9QUk9URUNUSU9OOgorCWNhc2UgU0RfRElGX1RZUEUyX1BST1RFQ1RJT046CiAJY2FzZSBTRF9ESUZfVFlQRTNfUFJPVEVDVElPTjoKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgotCQlwcmludGsoS0VSTl9FUlIgInNjc2lfZGVidWdfaW5pdDogZGlmIG11c3QgYmUgMCwgMSBvciAzXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJzY3NpX2RlYnVnX2luaXQ6IGRpZiBtdXN0IGJlIDAsIDEsIDIgb3IgM1xuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtMzEyMSw2ICszMTU4LDcgQEAKIAlpbnQgbGVuLCBrOwogCXVuc2lnbmVkIGludCBudW07CiAJdW5zaWduZWQgbG9uZyBsb25nIGxiYTsKKwl1MzIgZWlfbGJhOwogCWludCBlcnJzdHMgPSAwOwogCWludCB0YXJnZXQgPSBTQ3BudC0+ZGV2aWNlLT5pZDsKIAlzdHJ1Y3Qgc2RlYnVnX2Rldl9pbmZvICpkZXZpcCA9IE5VTEw7CkBAIC0zMjU0LDE0ICszMjkyLDMwIEBACiAJY2FzZSBSRUFEXzE2OgogCWNhc2UgUkVBRF8xMjoKIAljYXNlIFJFQURfMTA6CisJCS8qIFJFQUR7MTAsMTIsMTZ9IGFuZCBESUYgVHlwZSAyIGFyZSBuYXR1cmFsIGVuZW1pZXMgKi8KKwkJaWYgKHNjc2lfZGVidWdfZGlmID09IFNEX0RJRl9UWVBFMl9QUk9URUNUSU9OICYmCisJCSAgICBjbWRbMV0gJiAweGUwKSB7CisJCQlta19zZW5zZV9idWZmZXIoZGV2aXAsIElMTEVHQUxfUkVRVUVTVCwKKwkJCQkJSU5WQUxJRF9DT01NQU5EX09QQ09ERSwgMCk7CisJCQllcnJzdHMgPSBjaGVja19jb25kaXRpb25fcmVzdWx0OworCQkJYnJlYWs7CisJCX0KKworCQlpZiAoKHNjc2lfZGVidWdfZGlmID09IFNEX0RJRl9UWVBFMV9QUk9URUNUSU9OIHx8CisJCSAgICAgc2NzaV9kZWJ1Z19kaWYgPT0gU0RfRElGX1RZUEUzX1BST1RFQ1RJT04pICYmCisJCSAgICAoY21kWzFdICYgMHhlMCkgPT0gMCkKKwkJCXByaW50ayhLRVJOX0VSUiAiVW5wcm90ZWN0ZWQgUkQvV1IgdG8gRElGIGRldmljZVxuIik7CisKKwkJLyogZmFsbCB0aHJvdWdoICovCiAJY2FzZSBSRUFEXzY6CityZWFkOgogCQllcnJzdHMgPSBjaGVja19yZWFkaW5lc3MoU0NwbnQsIDAsIGRldmlwKTsKIAkJaWYgKGVycnN0cykKIAkJCWJyZWFrOwogCQlpZiAoc2NzaV9kZWJ1Z19mYWtlX3J3KQogCQkJYnJlYWs7Ci0JCWdldF9kYXRhX3RyYW5zZmVyX2luZm8oY21kLCAmbGJhLCAmbnVtKTsKLQkJZXJyc3RzID0gcmVzcF9yZWFkKFNDcG50LCBsYmEsIG51bSwgZGV2aXApOworCQlnZXRfZGF0YV90cmFuc2Zlcl9pbmZvKGNtZCwgJmxiYSwgJm51bSwgJmVpX2xiYSk7CisJCWVycnN0cyA9IHJlc3BfcmVhZChTQ3BudCwgbGJhLCBudW0sIGRldmlwLCBlaV9sYmEpOwogCQlpZiAoaW5qX3JlY292ZXJlZCAmJiAoMCA9PSBlcnJzdHMpKSB7CiAJCQlta19zZW5zZV9idWZmZXIoZGV2aXAsIFJFQ09WRVJFRF9FUlJPUiwKIAkJCQkJVEhSRVNIT0xEX0VYQ0VFREVELCAwKTsKQEAgLTMyODgsMTQgKzMzNDIsMzAgQEAKIAljYXNlIFdSSVRFXzE2OgogCWNhc2UgV1JJVEVfMTI6CiAJY2FzZSBXUklURV8xMDoKKwkJLyogV1JJVEV7MTAsMTIsMTZ9IGFuZCBESUYgVHlwZSAyIGFyZSBuYXR1cmFsIGVuZW1pZXMgKi8KKwkJaWYgKHNjc2lfZGVidWdfZGlmID09IFNEX0RJRl9UWVBFMl9QUk9URUNUSU9OICYmCisJCSAgICBjbWRbMV0gJiAweGUwKSB7CisJCQlta19zZW5zZV9idWZmZXIoZGV2aXAsIElMTEVHQUxfUkVRVUVTVCwKKwkJCQkJSU5WQUxJRF9DT01NQU5EX09QQ09ERSwgMCk7CisJCQllcnJzdHMgPSBjaGVja19jb25kaXRpb25fcmVzdWx0OworCQkJYnJlYWs7CisJCX0KKworCQlpZiAoKHNjc2lfZGVidWdfZGlmID09IFNEX0RJRl9UWVBFMV9QUk9URUNUSU9OIHx8CisJCSAgICAgc2NzaV9kZWJ1Z19kaWYgPT0gU0RfRElGX1RZUEUzX1BST1RFQ1RJT04pICYmCisJCSAgICAoY21kWzFdICYgMHhlMCkgPT0gMCkKKwkJCXByaW50ayhLRVJOX0VSUiAiVW5wcm90ZWN0ZWQgUkQvV1IgdG8gRElGIGRldmljZVxuIik7CisKKwkJLyogZmFsbCB0aHJvdWdoICovCiAJY2FzZSBXUklURV82Ogord3JpdGU6CiAJCWVycnN0cyA9IGNoZWNrX3JlYWRpbmVzcyhTQ3BudCwgMCwgZGV2aXApOwogCQlpZiAoZXJyc3RzKQogCQkJYnJlYWs7CiAJCWlmIChzY3NpX2RlYnVnX2Zha2VfcncpCiAJCQlicmVhazsKLQkJZ2V0X2RhdGFfdHJhbnNmZXJfaW5mbyhjbWQsICZsYmEsICZudW0pOwotCQllcnJzdHMgPSByZXNwX3dyaXRlKFNDcG50LCBsYmEsIG51bSwgZGV2aXApOworCQlnZXRfZGF0YV90cmFuc2Zlcl9pbmZvKGNtZCwgJmxiYSwgJm51bSwgJmVpX2xiYSk7CisJCWVycnN0cyA9IHJlc3Bfd3JpdGUoU0NwbnQsIGxiYSwgbnVtLCBkZXZpcCwgZWlfbGJhKTsKIAkJaWYgKGlual9yZWNvdmVyZWQgJiYgKDAgPT0gZXJyc3RzKSkgewogCQkJbWtfc2Vuc2VfYnVmZmVyKGRldmlwLCBSRUNPVkVSRURfRVJST1IsCiAJCQkJCVRIUkVTSE9MRF9FWENFRURFRCwgMCk7CkBAIC0zMzQxLDE1ICszNDExLDM4IEBACiAJCQlicmVhazsKIAkJaWYgKHNjc2lfZGVidWdfZmFrZV9ydykKIAkJCWJyZWFrOwotCQlnZXRfZGF0YV90cmFuc2Zlcl9pbmZvKGNtZCwgJmxiYSwgJm51bSk7Ci0JCWVycnN0cyA9IHJlc3BfcmVhZChTQ3BudCwgbGJhLCBudW0sIGRldmlwKTsKKwkJZ2V0X2RhdGFfdHJhbnNmZXJfaW5mbyhjbWQsICZsYmEsICZudW0sICZlaV9sYmEpOworCQllcnJzdHMgPSByZXNwX3JlYWQoU0NwbnQsIGxiYSwgbnVtLCBkZXZpcCwgZWlfbGJhKTsKIAkJaWYgKGVycnN0cykKIAkJCWJyZWFrOwotCQllcnJzdHMgPSByZXNwX3dyaXRlKFNDcG50LCBsYmEsIG51bSwgZGV2aXApOworCQllcnJzdHMgPSByZXNwX3dyaXRlKFNDcG50LCBsYmEsIG51bSwgZGV2aXAsIGVpX2xiYSk7CiAJCWlmIChlcnJzdHMpCiAJCQlicmVhazsKIAkJZXJyc3RzID0gcmVzcF94ZHdyaXRlcmVhZChTQ3BudCwgbGJhLCBudW0sIGRldmlwKTsKIAkJYnJlYWs7CisJY2FzZSBWQVJJQUJMRV9MRU5HVEhfQ01EOgorCQlpZiAoc2NzaV9kZWJ1Z19kaWYgPT0gU0RfRElGX1RZUEUyX1BST1RFQ1RJT04pIHsKKworCQkJaWYgKChjbWRbMTBdICYgMHhlMCkgPT0gMCkKKwkJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkgICAgICAgIlVucHJvdGVjdGVkIFJEL1dSIHRvIERJRiBkZXZpY2VcbiIpOworCisJCQlpZiAoY21kWzldID09IFJFQURfMzIpIHsKKwkJCQlCVUdfT04oU0NwbnQtPmNtZF9sZW4gPCAzMik7CisJCQkJZ290byByZWFkOworCQkJfQorCisJCQlpZiAoY21kWzldID09IFdSSVRFXzMyKSB7CisJCQkJQlVHX09OKFNDcG50LT5jbWRfbGVuIDwgMzIpOworCQkJCWdvdG8gd3JpdGU7CisJCQl9CisJCX0KKworCQlta19zZW5zZV9idWZmZXIoZGV2aXAsIElMTEVHQUxfUkVRVUVTVCwKKwkJCQlJTlZBTElEX0ZJRUxEX0lOX0NEQiwgMCk7CisJCWVycnN0cyA9IGNoZWNrX2NvbmRpdGlvbl9yZXN1bHQ7CisJCWJyZWFrOworCiAJZGVmYXVsdDoKIAkJaWYgKFNDU0lfREVCVUdfT1BUX05PSVNFICYgc2NzaV9kZWJ1Z19vcHRzKQogCQkJcHJpbnRrKEtFUk5fSU5GTyAic2NzaV9kZWJ1ZzogT3Bjb2RlOiAweCV4IG5vdCAiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV9lcnJvci5jIGIvZHJpdmVycy9zY3NpL3Njc2lfZXJyb3IuYwppbmRleCA4NzcyMDRkLi4xYjAwNjBiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV9lcnJvci5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX2Vycm9yLmMKQEAgLTcyNSw2ICs3MjUsOSBAQAogCQljYXNlIE5FRURTX1JFVFJZOgogCQljYXNlIEZBSUxFRDoKIAkJCWJyZWFrOworCQljYXNlIEFERF9UT19NTFFVRVVFOgorCQkJcnRuID0gTkVFRFNfUkVUUlk7CisJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCXJ0biA9IEZBSUxFRDsKIAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfc2Nhbi5jIGIvZHJpdmVycy9zY3NpL3Njc2lfc2Nhbi5jCmluZGV4IGM0NDc4MzguLjA1NDdhN2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX3NjYW4uYworKysgYi9kcml2ZXJzL3Njc2kvc2NzaV9zY2FuLmMKQEAgLTMxNyw2ICszMTcsNyBAQAogb3V0X2RldmljZV9kZXN0cm95OgogCXNjc2lfZGV2aWNlX3NldF9zdGF0ZShzZGV2LCBTREVWX0RFTCk7CiAJdHJhbnNwb3J0X2Rlc3Ryb3lfZGV2aWNlKCZzZGV2LT5zZGV2X2dlbmRldik7CisJcHV0X2RldmljZSgmc2Rldi0+c2Rldl9kZXYpOwogCXB1dF9kZXZpY2UoJnNkZXYtPnNkZXZfZ2VuZGV2KTsKIG91dDoKIAlpZiAoZGlzcGxheV9mYWlsdXJlX21zZykKQEAgLTk1Nyw2ICs5NTgsNyBAQAogCWlmIChzZGV2LT5ob3N0LT5ob3N0dC0+c2xhdmVfZGVzdHJveSkKIAkJc2Rldi0+aG9zdC0+aG9zdHQtPnNsYXZlX2Rlc3Ryb3koc2Rldik7CiAJdHJhbnNwb3J0X2Rlc3Ryb3lfZGV2aWNlKCZzZGV2LT5zZGV2X2dlbmRldik7CisJcHV0X2RldmljZSgmc2Rldi0+c2Rldl9kZXYpOwogCXB1dF9kZXZpY2UoJnNkZXYtPnNkZXZfZ2VuZGV2KTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfc3lzZnMuYyBiL2RyaXZlcnMvc2NzaS9zY3NpX3N5c2ZzLmMKaW5kZXggZmRlNTQ1My4uNWM3ZWI2MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfc3lzZnMuYworKysgYi9kcml2ZXJzL3Njc2kvc2NzaV9zeXNmcy5jCkBAIC04NjQsMTAgKzg2NCw2IEBACiAJCWdvdG8gY2xlYW5fZGV2aWNlOwogCX0KIAotCS8qIHRha2UgYSByZWZlcmVuY2UgZm9yIHRoZSBzZGV2X2RldjsgdGhpcyBpcwotCSAqIHJlbGVhc2VkIGJ5IHRoZSBzZGV2X2NsYXNzIC5yZWxlYXNlICovCi0JZ2V0X2RldmljZSgmc2Rldi0+c2Rldl9nZW5kZXYpOwotCiAJLyogY3JlYXRlIHF1ZXVlIGZpbGVzLCB3aGljaCBtYXkgYmUgd3JpdGFibGUsIGRlcGVuZGluZyBvbiB0aGUgaG9zdCAqLwogCWlmIChzZGV2LT5ob3N0LT5ob3N0dC0+Y2hhbmdlX3F1ZXVlX2RlcHRoKQogCQllcnJvciA9IGRldmljZV9jcmVhdGVfZmlsZSgmc2Rldi0+c2Rldl9nZW5kZXYsICZzZGV2X2F0dHJfcXVldWVfZGVwdGhfcncpOwpAQCAtOTE3LDYgKzkxMyw3IEBACiAKIAlkZXZpY2VfZGVsKCZzZGV2LT5zZGV2X2dlbmRldik7CiAJdHJhbnNwb3J0X2Rlc3Ryb3lfZGV2aWNlKCZzZGV2LT5zZGV2X2dlbmRldik7CisJcHV0X2RldmljZSgmc2Rldi0+c2Rldl9kZXYpOwogCXB1dF9kZXZpY2UoJnNkZXYtPnNkZXZfZ2VuZGV2KTsKIAogCXJldHVybiBlcnJvcjsKQEAgLTEwNjUsNyArMTA2Miw3IEBACiAJCSAgICAgc2Rldi0+aG9zdC0+aG9zdF9ubywgc2Rldi0+Y2hhbm5lbCwgc2Rldi0+aWQsIHNkZXYtPmx1bik7CiAKIAlkZXZpY2VfaW5pdGlhbGl6ZSgmc2Rldi0+c2Rldl9kZXYpOwotCXNkZXYtPnNkZXZfZGV2LnBhcmVudCA9ICZzZGV2LT5zZGV2X2dlbmRldjsKKwlzZGV2LT5zZGV2X2Rldi5wYXJlbnQgPSBnZXRfZGV2aWNlKCZzZGV2LT5zZGV2X2dlbmRldik7CiAJc2Rldi0+c2Rldl9kZXYuY2xhc3MgPSAmc2Rldl9jbGFzczsKIAlkZXZfc2V0X25hbWUoJnNkZXYtPnNkZXZfZGV2LCAiJWQ6JWQ6JWQ6JWQiLAogCQkgICAgIHNkZXYtPmhvc3QtPmhvc3Rfbm8sIHNkZXYtPmNoYW5uZWwsIHNkZXYtPmlkLCBzZGV2LT5sdW4pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2ZjLmMgYi9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfZmMuYwppbmRleCBiOTg4ODVkLi5hNjdmZWQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfZmMuYworKysgYi9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfZmMuYwpAQCAtMzU4Niw2ICszNTg2LDcgQEAKIAogLyoqCiAgKiBmY19ic2dfaG9zdF9kaXNwYXRjaCAtIHByb2Nlc3MgZmMgaG9zdCBic2cgcmVxdWVzdHMgYW5kIGRpc3BhdGNoIHRvIExMREQKKyAqIEBxOgkJZmMgaG9zdCByZXF1ZXN0IHF1ZXVlCiAgKiBAc2hvc3Q6CXNjc2kgaG9zdCBycG9ydCBhdHRhY2hlZCB0bwogICogQGpvYjoJYnNnIGpvYiB0byBiZSBwcm9jZXNzZWQKICAqLwpAQCAtMzY5Myw2ICszNjk0LDcgQEAKIAogLyoqCiAgKiBmY19ic2dfcnBvcnRfZGlzcGF0Y2ggLSBwcm9jZXNzIHJwb3J0IGJzZyByZXF1ZXN0cyBhbmQgZGlzcGF0Y2ggdG8gTExERAorICogQHE6CQlycG9ydCByZXF1ZXN0IHF1ZXVlCiAgKiBAc2hvc3Q6CXNjc2kgaG9zdCBycG9ydCBhdHRhY2hlZCB0bwogICogQHJwb3J0OglycG9ydCByZXF1ZXN0IGRlc3RpbmVkIHRvCiAgKiBAam9iOglic2cgam9iIHRvIGJlIHByb2Nlc3NlZApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3NkLmMgYi9kcml2ZXJzL3Njc2kvc2QuYwppbmRleCA4ZGQ5NmRjLi45MDkzYzcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2QuYworKysgYi9kcml2ZXJzL3Njc2kvc2QuYwpAQCAtMTE2LDYgKzExNiw5IEBACiAgKiBvYmplY3QgYWZ0ZXIgbGFzdCBwdXQpICovCiBzdGF0aWMgREVGSU5FX01VVEVYKHNkX3JlZl9tdXRleCk7CiAKK3N0cnVjdCBrbWVtX2NhY2hlICpzZF9jZGJfY2FjaGU7CittZW1wb29sX3QgKnNkX2NkYl9wb29sOworCiBzdGF0aWMgY29uc3QgY2hhciAqc2RfY2FjaGVfdHlwZXNbXSA9IHsKIAkid3JpdGUgdGhyb3VnaCIsICJub25lIiwgIndyaXRlIGJhY2siLAogCSJ3cml0ZSBiYWNrLCBubyByZWFkIChkYWZ0KSIKQEAgLTM3MCw2ICszNzMsMzEgQEAKIAltdXRleF91bmxvY2soJnNkX3JlZl9tdXRleCk7CiB9CiAKK3N0YXRpYyB2b2lkIHNkX3Byb3Rfb3Aoc3RydWN0IHNjc2lfY21uZCAqc2NtZCwgdW5zaWduZWQgaW50IGRpZikKK3sKKwl1bnNpZ25lZCBpbnQgcHJvdF9vcCA9IFNDU0lfUFJPVF9OT1JNQUw7CisJdW5zaWduZWQgaW50IGRpeCA9IHNjc2lfcHJvdF9zZ19jb3VudChzY21kKTsKKworCWlmIChzY21kLT5zY19kYXRhX2RpcmVjdGlvbiA9PSBETUFfRlJPTV9ERVZJQ0UpIHsKKwkJaWYgKGRpZiAmJiBkaXgpCisJCQlwcm90X29wID0gU0NTSV9QUk9UX1JFQURfUEFTUzsKKwkJZWxzZSBpZiAoZGlmICYmICFkaXgpCisJCQlwcm90X29wID0gU0NTSV9QUk9UX1JFQURfU1RSSVA7CisJCWVsc2UgaWYgKCFkaWYgJiYgZGl4KQorCQkJcHJvdF9vcCA9IFNDU0lfUFJPVF9SRUFEX0lOU0VSVDsKKwl9IGVsc2UgeworCQlpZiAoZGlmICYmIGRpeCkKKwkJCXByb3Rfb3AgPSBTQ1NJX1BST1RfV1JJVEVfUEFTUzsKKwkJZWxzZSBpZiAoZGlmICYmICFkaXgpCisJCQlwcm90X29wID0gU0NTSV9QUk9UX1dSSVRFX0lOU0VSVDsKKwkJZWxzZSBpZiAoIWRpZiAmJiBkaXgpCisJCQlwcm90X29wID0gU0NTSV9QUk9UX1dSSVRFX1NUUklQOworCX0KKworCXNjc2lfc2V0X3Byb3Rfb3Aoc2NtZCwgcHJvdF9vcCk7CisJc2NzaV9zZXRfcHJvdF90eXBlKHNjbWQsIGRpZik7Cit9CisKIC8qKgogICoJc2RfaW5pdF9jb21tYW5kIC0gYnVpbGQgYSBzY3NpIChyZWFkIG9yIHdyaXRlKSBjb21tYW5kIGZyb20KICAqCWluZm9ybWF0aW9uIGluIHRoZSByZXF1ZXN0IHN0cnVjdHVyZS4KQEAgLTM4OCw2ICs0MTYsNyBAQAogCXNlY3Rvcl90IHRocmVzaG9sZDsKIAl1bnNpZ25lZCBpbnQgdGhpc19jb3VudCA9IGJsa19ycV9zZWN0b3JzKHJxKTsKIAlpbnQgcmV0LCBob3N0X2RpZjsKKwl1bnNpZ25lZCBjaGFyIHByb3RlY3Q7CiAKIAlpZiAocnEtPmNtZF90eXBlID09IFJFUV9UWVBFX0JMT0NLX1BDKSB7CiAJCXJldCA9IHNjc2lfc2V0dXBfYmxrX3BjX2NtbmQoc2RwLCBycSk7CkBAIC01MjAsMTMgKzU0OSw0OSBAQAogCS8qIFNldCBSRFBST1RFQ1QvV1JQUk9URUNUIGlmIGRpc2sgaXMgZm9ybWF0dGVkIHdpdGggRElGICovCiAJaG9zdF9kaWYgPSBzY3NpX2hvc3RfZGlmX2NhcGFibGUoc2RwLT5ob3N0LCBzZGtwLT5wcm90ZWN0aW9uX3R5cGUpOwogCWlmIChob3N0X2RpZikKLQkJU0NwbnQtPmNtbmRbMV0gPSAxIDw8IDU7CisJCXByb3RlY3QgPSAxIDw8IDU7CiAJZWxzZQotCQlTQ3BudC0+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+aG9zdCwgdHlwZSkpCisJCXNkX3ByaW50ayhLRVJOX05PVElDRSwgc2RrcCwKKwkJCSAgIkVuYWJsaW5nIERJRiBUeXBlICV1IHByb3RlY3Rpb25cbiIsIHR5cGUpOworCWVsc2UKKwkJc2RfcHJpbnRrKEtFUk5fTk9USUNFLCBzZGtwLAorCQkJICAiRGlzYWJsaW5nIERJRiBUeXBlICV1IHByb3RlY3Rpb25cbiIsIHR5cGUpOwogfQogCiBzdGF0aWMgdm9pZCByZWFkX2NhcGFjaXR5X2Vycm9yKHN0cnVjdCBzY3NpX2Rpc2sgKnNka3AsIHN0cnVjdCBzY3NpX2RldmljZSAqc2RwLApAQCAtMjMwMCw4ICsyMzYzLDI0IEBACiAJaWYgKGVycikKIAkJZ290byBlcnJfb3V0X2NsYXNzOwogCisJc2RfY2RiX2NhY2hlID0ga21lbV9jYWNoZV9jcmVhdGUoInNkX2V4dF9jZGIiLCBTRF9FWFRfQ0RCX1NJWkUsCisJCQkJCSAwLCAwLCBOVUxMKTsKKwlpZiAoIXNkX2NkYl9jYWNoZSkgeworCQlwcmludGsoS0VSTl9FUlIgInNkOiBjYW4ndCBpbml0IGV4dGVuZGVkIGNkYiBjYWNoZVxuIik7CisJCWdvdG8gZXJyX291dF9jbGFzczsKKwl9CisKKwlzZF9jZGJfcG9vbCA9IG1lbXBvb2xfY3JlYXRlX3NsYWJfcG9vbChTRF9NRU1QT09MX1NJWkUsIHNkX2NkYl9jYWNoZSk7CisJaWYgKCFzZF9jZGJfcG9vbCkgeworCQlwcmludGsoS0VSTl9FUlIgInNkOiBjYW4ndCBpbml0IGV4dGVuZGVkIGNkYiBwb29sXG4iKTsKKwkJZ290byBlcnJfb3V0X2NhY2hlOworCX0KKwogCXJldHVybiAwOwogCitlcnJfb3V0X2NhY2hlOgorCWttZW1fY2FjaGVfZGVzdHJveShzZF9jZGJfY2FjaGUpOworCiBlcnJfb3V0X2NsYXNzOgogCWNsYXNzX3VucmVnaXN0ZXIoJnNkX2Rpc2tfY2xhc3MpOwogZXJyX291dDoKQEAgLTIzMjEsNiArMjQwMCw5IEBACiAKIAlTQ1NJX0xPR19ITFFVRVVFKDMsIHByaW50aygiZXhpdF9zZDogZXhpdGluZyBzZCBkcml2ZXJcbiIpKTsKIAorCW1lbXBvb2xfZGVzdHJveShzZF9jZGJfcG9vbCk7CisJa21lbV9jYWNoZV9kZXN0cm95KHNkX2NkYl9jYWNoZSk7CisKIAlzY3NpX3VucmVnaXN0ZXJfZHJpdmVyKCZzZF90ZW1wbGF0ZS5nZW5kcnYpOwogCWNsYXNzX3VucmVnaXN0ZXIoJnNkX2Rpc2tfY2xhc3MpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2QuaCBiL2RyaXZlcnMvc2NzaS9zZC5oCmluZGV4IDg0NzRiNWIuLmUzNzQ4MDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zZC5oCisrKyBiL2RyaXZlcnMvc2NzaS9zZC5oCkBAIC0zNyw2ICszNywxMSBAQAogICovCiAjZGVmaW5lIFNEX0xBU1RfQlVHR1lfU0VDVE9SUwk4CiAKK2VudW0geworCVNEX0VYVF9DREJfU0laRSA9IDMyLAkvKiBFeHRlbmRlZCBDREIgc2l6ZSAqLworCVNEX01FTVBPT0xfU0laRSA9IDIsCS8qIENEQiBwb29sIHNpemUgKi8KK307CisKIHN0cnVjdCBzY3NpX2Rpc2sgewogCXN0cnVjdCBzY3NpX2RyaXZlciAqZHJpdmVyOwkvKiBhbHdheXMgJnNkX3RlbXBsYXRlICovCiAJc3RydWN0IHNjc2lfZGV2aWNlICpkZXZpY2U7CkBAIC0xMDEsMTYgKzEwNiwxMiBAQAogCiAjaWZkZWYgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZCiAKLWV4dGVybiB2b2lkIHNkX2RpZl9vcChzdHJ1Y3Qgc2NzaV9jbW5kICosIHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQpOwogZXh0ZXJuIHZvaWQgc2RfZGlmX2NvbmZpZ19ob3N0KHN0cnVjdCBzY3NpX2Rpc2sgKik7CiBleHRlcm4gaW50IHNkX2RpZl9wcmVwYXJlKHN0cnVjdCByZXF1ZXN0ICpycSwgc2VjdG9yX3QsIHVuc2lnbmVkIGludCk7CiBleHRlcm4gdm9pZCBzZF9kaWZfY29tcGxldGUoc3RydWN0IHNjc2lfY21uZCAqLCB1bnNpZ25lZCBpbnQpOwogCiAjZWxzZSAvKiBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgKi8KIAotc3RhdGljIGlubGluZSB2b2lkIHNkX2RpZl9vcChzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQsIHVuc2lnbmVkIGludCBhLCB1bnNpZ25lZCBpbnQgYiwgdW5zaWduZWQgaW50IGMpCi17Ci19CiBzdGF0aWMgaW5saW5lIHZvaWQgc2RfZGlmX2NvbmZpZ19ob3N0KHN0cnVjdCBzY3NpX2Rpc2sgKmRpc2spCiB7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2RfZGlmLmMgYi9kcml2ZXJzL3Njc2kvc2RfZGlmLmMKaW5kZXggODJmMTRhOS4uODhkYTk3NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3NkX2RpZi5jCisrKyBiL2RyaXZlcnMvc2NzaS9zZF9kaWYuYwpAQCAtMzIwLDE1ICszMjAsNiBAQAogCQlkaWYgPSAwOyBkaXggPSAxOwogCX0KIAotCWlmICh0eXBlKSB7Ci0JCWlmIChkaWYpCi0JCQlzZF9wcmludGsoS0VSTl9OT1RJQ0UsIHNka3AsCi0JCQkJICAiRW5hYmxpbmcgRElGIFR5cGUgJWQgcHJvdGVjdGlvblxuIiwgdHlwZSk7Ci0JCWVsc2UKLQkJCXNkX3ByaW50ayhLRVJOX05PVElDRSwgc2RrcCwKLQkJCQkgICJEaXNhYmxpbmcgRElGIFR5cGUgJWQgcHJvdGVjdGlvblxuIiwgdHlwZSk7Ci0JfQotCiAJaWYgKCFkaXgpCiAJCXJldHVybjsKIApAQCAtMzYwLDYyICszNTEsNiBAQAogfQogCiAvKgotICogRElGIERNQSBvcGVyYXRpb24gbWFnaWMgZGVjb2RlciByaW5nLgotICovCi12b2lkIHNkX2RpZl9vcChzdHJ1Y3Qgc2NzaV9jbW5kICpzY21kLCB1bnNpZ25lZCBpbnQgZGlmLCB1bnNpZ25lZCBpbnQgZGl4LCB1bnNpZ25lZCBpbnQgdHlwZSkKLXsKLQlpbnQgY3N1bV9jb252ZXJ0LCBwcm90X29wOwotCi0JcHJvdF9vcCA9IDA7Ci0KLQkvKiBDb252ZXJ0IGNoZWNrc3VtPyAqLwotCWlmIChzY3NpX2hvc3RfZ2V0X2d1YXJkKHNjbWQtPmRldmljZS0+aG9zdCkgIT0gU0hPU1RfRElYX0dVQVJEX0NSQykKLQkJY3N1bV9jb252ZXJ0ID0gMTsKLQllbHNlCi0JCWNzdW1fY29udmVydCA9IDA7Ci0KLQlCVUdfT04oZGlmICYmIChzY21kLT5jbW5kWzBdID09IFJFQURfNiB8fCBzY21kLT5jbW5kWzBdID09IFdSSVRFXzYpKTsKLQotCXN3aXRjaCAoc2NtZC0+Y21uZFswXSkgewotCWNhc2UgUkVBRF82OgotCWNhc2UgUkVBRF8xMDoKLQljYXNlIFJFQURfMTI6Ci0JY2FzZSBSRUFEXzE2OgotCQlpZiAoZGlmICYmIGRpeCkKLQkJCWlmIChjc3VtX2NvbnZlcnQpCi0JCQkJcHJvdF9vcCA9IFNDU0lfUFJPVF9SRUFEX0NPTlZFUlQ7Ci0JCQllbHNlCi0JCQkJcHJvdF9vcCA9IFNDU0lfUFJPVF9SRUFEX1BBU1M7Ci0JCWVsc2UgaWYgKGRpZiAmJiAhZGl4KQotCQkJcHJvdF9vcCA9IFNDU0lfUFJPVF9SRUFEX1NUUklQOwotCQllbHNlIGlmICghZGlmICYmIGRpeCkKLQkJCXByb3Rfb3AgPSBTQ1NJX1BST1RfUkVBRF9JTlNFUlQ7Ci0KLQkJYnJlYWs7Ci0KLQljYXNlIFdSSVRFXzY6Ci0JY2FzZSBXUklURV8xMDoKLQljYXNlIFdSSVRFXzEyOgotCWNhc2UgV1JJVEVfMTY6Ci0JCWlmIChkaWYgJiYgZGl4KQotCQkJaWYgKGNzdW1fY29udmVydCkKLQkJCQlwcm90X29wID0gU0NTSV9QUk9UX1dSSVRFX0NPTlZFUlQ7Ci0JCQllbHNlCi0JCQkJcHJvdF9vcCA9IFNDU0lfUFJPVF9XUklURV9QQVNTOwotCQllbHNlIGlmIChkaWYgJiYgIWRpeCkKLQkJCXByb3Rfb3AgPSBTQ1NJX1BST1RfV1JJVEVfSU5TRVJUOwotCQllbHNlIGlmICghZGlmICYmIGRpeCkKLQkJCXByb3Rfb3AgPSBTQ1NJX1BST1RfV1JJVEVfU1RSSVA7Ci0KLQkJYnJlYWs7Ci0JfQotCi0Jc2NzaV9zZXRfcHJvdF9vcChzY21kLCBwcm90X29wKTsKLQlpZiAoZGlmKQotCQlzY3NpX3NldF9wcm90X3R5cGUoc2NtZCwgdHlwZSk7Ci19Ci0KLS8qCiAgKiBUaGUgdmlydHVhbCBzdGFydCBzZWN0b3IgaXMgdGhlIG9uZSB0aGF0IHdhcyBvcmlnaW5hbGx5IHN1Ym1pdHRlZAogICogYnkgdGhlIGJsb2NrIGxheWVyLglEdWUgdG8gcGFydGl0aW9uaW5nLCBNRC9ETSBjbG9uaW5nLCBldGMuIHRoZQogICogYWN0dWFsIHBoeXNpY2FsIHN0YXJ0IHNlY3RvciBpcyBsaWtlbHkgdG8gYmUgZGlmZmVyZW50LiAgUmVtYXAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zZy5jIGIvZHJpdmVycy9zY3NpL3NnLmMKaW5kZXggODQ4YjU5NC4uMDQwZjc1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3NnLmMKKysrIGIvZHJpdmVycy9zY3NpL3NnLmMKQEAgLTExODUsNyArMTE4NSw3IEBACiAJcmV0dXJuIFZNX0ZBVUxUX1NJR0JVUzsKIH0KIAotc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBzZ19tbWFwX3ZtX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3Qgc2dfbW1hcF92bV9vcHMgPSB7CiAJLmZhdWx0ID0gc2dfdm1hX2ZhdWx0LAogfTsKIApAQCAtMTMxNyw3ICsxMzE3LDcgQEAKIAl9CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHNnX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzZ19mb3BzID0gewogCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5yZWFkID0gc2dfcmVhZCwKIAkud3JpdGUgPSBzZ193cml0ZSwKQEAgLTE3MDgsMTEgKzE3MDgsNiBAQAogCVNnX3NjYXR0ZXJfaG9sZCAqcmVxX3NjaHAgPSAmc3JwLT5kYXRhOwogCiAJU0NTSV9MT0dfVElNRU9VVCg0LCBwcmludGsoInNnX2ZpbmlzaF9yZW1fcmVxOiByZXNfdXNlZD0lZFxuIiwgKGludCkgc3JwLT5yZXNfdXNlZCkpOwotCWlmIChzcnAtPnJlc191c2VkKQotCQlzZ191bmxpbmtfcmVzZXJ2ZShzZnAsIHNycCk7Ci0JZWxzZQotCQlzZ19yZW1vdmVfc2NhdChyZXFfc2NocCk7Ci0KIAlpZiAoc3JwLT5ycSkgewogCQlpZiAoc3JwLT5iaW8pCiAJCQlyZXQgPSBibGtfcnFfdW5tYXBfdXNlcihzcnAtPmJpbyk7CkBAIC0xNzIwLDYgKzE3MTUsMTEgQEAKIAkJYmxrX3B1dF9yZXF1ZXN0KHNycC0+cnEpOwogCX0KIAorCWlmIChzcnAtPnJlc191c2VkKQorCQlzZ191bmxpbmtfcmVzZXJ2ZShzZnAsIHNycCk7CisJZWxzZQorCQlzZ19yZW1vdmVfc2NhdChyZXFfc2NocCk7CisKIAlzZ19yZW1vdmVfcmVxdWVzdChzZnAsIHNycCk7CiAKIAlyZXR1cm4gcmV0OwpAQCAtMjE5NCw5ICsyMTk0LDExIEBACiBzdGF0aWMgaW50IHNnX3Byb2Nfc2luZ2xlX29wZW5fYWRpbyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSk7CiBzdGF0aWMgc3NpemVfdCBzZ19wcm9jX3dyaXRlX2FkaW8oc3RydWN0IGZpbGUgKmZpbHAsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsCiAJCQkgICAgICAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKm9mZik7Ci1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBhZGlvX2ZvcHMgPSB7Ci0JLyogLm93bmVyLCAucmVhZCBhbmQgLmxsc2VlayBhZGRlZCBpbiBzZ19wcm9jX2luaXQoKSAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYWRpb19mb3BzID0geworCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5vcGVuID0gc2dfcHJvY19zaW5nbGVfb3Blbl9hZGlvLAorCS5yZWFkID0gc2VxX3JlYWQsCisJLmxsc2VlayA9IHNlcV9sc2VlaywKIAkud3JpdGUgPSBzZ19wcm9jX3dyaXRlX2FkaW8sCiAJLnJlbGVhc2UgPSBzaW5nbGVfcmVsZWFzZSwKIH07CkBAIC0yMjA0LDIzICsyMjA2LDMyIEBACiBzdGF0aWMgaW50IHNnX3Byb2Nfc2luZ2xlX29wZW5fZHJlc3N6KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKTsKIHN0YXRpYyBzc2l6ZV90IHNnX3Byb2Nfd3JpdGVfZHJlc3N6KHN0cnVjdCBmaWxlICpmaWxwLCAKIAkJY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKm9mZik7Ci1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkcmVzc3pfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRyZXNzel9mb3BzID0geworCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5vcGVuID0gc2dfcHJvY19zaW5nbGVfb3Blbl9kcmVzc3osCisJLnJlYWQgPSBzZXFfcmVhZCwKKwkubGxzZWVrID0gc2VxX2xzZWVrLAogCS53cml0ZSA9IHNnX3Byb2Nfd3JpdGVfZHJlc3N6LAogCS5yZWxlYXNlID0gc2luZ2xlX3JlbGVhc2UsCiB9OwogCiBzdGF0aWMgaW50IHNnX3Byb2Nfc2VxX3Nob3dfdmVyc2lvbihzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKnYpOwogc3RhdGljIGludCBzZ19wcm9jX3NpbmdsZV9vcGVuX3ZlcnNpb24oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpOwotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdmVyc2lvbl9mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdmVyc2lvbl9mb3BzID0geworCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5vcGVuID0gc2dfcHJvY19zaW5nbGVfb3Blbl92ZXJzaW9uLAorCS5yZWFkID0gc2VxX3JlYWQsCisJLmxsc2VlayA9IHNlcV9sc2VlaywKIAkucmVsZWFzZSA9IHNpbmdsZV9yZWxlYXNlLAogfTsKIAogc3RhdGljIGludCBzZ19wcm9jX3NlcV9zaG93X2RldmhkcihzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKnYpOwogc3RhdGljIGludCBzZ19wcm9jX3NpbmdsZV9vcGVuX2RldmhkcihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSk7Ci1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkZXZoZHJfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRldmhkcl9mb3BzID0geworCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5vcGVuID0gc2dfcHJvY19zaW5nbGVfb3Blbl9kZXZoZHIsCisJLnJlYWQgPSBzZXFfcmVhZCwKKwkubGxzZWVrID0gc2VxX2xzZWVrLAogCS5yZWxlYXNlID0gc2luZ2xlX3JlbGVhc2UsCiB9OwogCkBAIC0yMjI5LDggKzIyNDAsMTEgQEAKIHN0YXRpYyB2b2lkICogZGV2X3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIGxvZmZfdCAqcG9zKTsKIHN0YXRpYyB2b2lkICogZGV2X3NlcV9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqdiwgbG9mZl90ICpwb3MpOwogc3RhdGljIHZvaWQgZGV2X3NlcV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqdik7Ci1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkZXZfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRldl9mb3BzID0geworCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5vcGVuID0gc2dfcHJvY19vcGVuX2RldiwKKwkucmVhZCA9IHNlcV9yZWFkLAorCS5sbHNlZWsgPSBzZXFfbHNlZWssCiAJLnJlbGVhc2UgPSBzZXFfcmVsZWFzZSwKIH07CiBzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIGRldl9zZXFfb3BzID0gewpAQCAtMjI0Miw4ICsyMjU2LDExIEBACiAKIHN0YXRpYyBpbnQgc2dfcHJvY19zZXFfc2hvd19kZXZzdHJzKHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqdik7CiBzdGF0aWMgaW50IHNnX3Byb2Nfb3Blbl9kZXZzdHJzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKTsKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRldnN0cnNfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRldnN0cnNfZm9wcyA9IHsKKwkub3duZXIgPSBUSElTX01PRFVMRSwKIAkub3BlbiA9IHNnX3Byb2Nfb3Blbl9kZXZzdHJzLAorCS5yZWFkID0gc2VxX3JlYWQsCisJLmxsc2VlayA9IHNlcV9sc2VlaywKIAkucmVsZWFzZSA9IHNlcV9yZWxlYXNlLAogfTsKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgZGV2c3Ryc19zZXFfb3BzID0gewpAQCAtMjI1NSw4ICsyMjcyLDExIEBACiAKIHN0YXRpYyBpbnQgc2dfcHJvY19zZXFfc2hvd19kZWJ1ZyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKnYpOwogc3RhdGljIGludCBzZ19wcm9jX29wZW5fZGVidWcoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpOwotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZGVidWdfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRlYnVnX2ZvcHMgPSB7CisJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLm9wZW4gPSBzZ19wcm9jX29wZW5fZGVidWcsCisJLnJlYWQgPSBzZXFfcmVhZCwKKwkubGxzZWVrID0gc2VxX2xzZWVrLAogCS5yZWxlYXNlID0gc2VxX3JlbGVhc2UsCiB9Owogc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBkZWJ1Z19zZXFfb3BzID0gewpAQCAtMjI2OSw3ICsyMjg5LDcgQEAKIAogc3RydWN0IHNnX3Byb2NfbGVhZiB7CiAJY29uc3QgY2hhciAqIG5hbWU7Ci0Jc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqIGZvcHM7CisJY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqIGZvcHM7CiB9OwogCiBzdGF0aWMgc3RydWN0IHNnX3Byb2NfbGVhZiBzZ19wcm9jX2xlYWZfYXJyW10gPSB7CkBAIC0yMjk1LDkgKzIzMTUsNiBAQAogCWZvciAoayA9IDA7IGsgPCBudW1fbGVhdmVzOyArK2spIHsKIAkJbGVhZiA9ICZzZ19wcm9jX2xlYWZfYXJyW2tdOwogCQltYXNrID0gbGVhZi0+Zm9wcy0+d3JpdGUgPyBTX0lSVUdPIHwgU19JV1VTUiA6IFNfSVJVR087Ci0JCWxlYWYtPmZvcHMtPm93bmVyID0gVEhJU19NT0RVTEU7Ci0JCWxlYWYtPmZvcHMtPnJlYWQgPSBzZXFfcmVhZDsKLQkJbGVhZi0+Zm9wcy0+bGxzZWVrID0gc2VxX2xzZWVrOwogCQlwcm9jX2NyZWF0ZShsZWFmLT5uYW1lLCBtYXNrLCBzZ19wcm9jX3NncCwgbGVhZi0+Zm9wcyk7CiAJfQogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3NyLmMgYi9kcml2ZXJzL3Njc2kvc3IuYwppbmRleCBlYjYxZjdhLi5kNmYzNDBmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc3IuYworKysgYi9kcml2ZXJzL3Njc2kvc3IuYwpAQCAtNjg0LDE0ICs2ODQsMjAgQEAKIAkJY2QtPmNhcGFjaXR5ID0gMHgxZmZmZmY7CiAJCXNlY3Rvcl9zaXplID0gMjA0ODsJLyogQSBndWVzcywganVzdCBpbiBjYXNlICovCiAJfSBlbHNlIHsKLSNpZiAwCi0JCWlmIChjZHJvbV9nZXRfbGFzdF93cml0dGVuKCZjZC0+Y2RpLAotCQkJCQkgICAmY2QtPmNhcGFjaXR5KSkKLSNlbmRpZgotCQkJY2QtPmNhcGFjaXR5ID0gMSArICgoYnVmZmVyWzBdIDw8IDI0KSB8Ci0JCQkJCQkgICAgKGJ1ZmZlclsxXSA8PCAxNikgfAotCQkJCQkJICAgIChidWZmZXJbMl0gPDwgOCkgfAotCQkJCQkJICAgIGJ1ZmZlclszXSk7CisJCWxvbmcgbGFzdF93cml0dGVuOworCisJCWNkLT5jYXBhY2l0eSA9IDEgKyAoKGJ1ZmZlclswXSA8PCAyNCkgfCAoYnVmZmVyWzFdIDw8IDE2KSB8CisJCQkJICAgIChidWZmZXJbMl0gPDwgOCkgfCBidWZmZXJbM10pOworCQkvKgorCQkgKiBSRUFEX0NBUEFDSVRZIGRvZXNuJ3QgcmV0dXJuIHRoZSBjb3JyZWN0IHNpemUgb24KKwkJICogY2VydGFpbiBVREYgbWVkaWEuICBJZiBsYXN0X3dyaXR0ZW4gaXMgbGFyZ2VyLCB1c2UKKwkJICogaXQgaW5zdGVhZC4KKwkJICoKKwkJICogaHR0cDovL2J1Z3ppbGxhLmtlcm5lbC5vcmcvc2hvd19idWcuY2dpP2lkPTk2NjgKKwkJICovCisJCWlmICghY2Ryb21fZ2V0X2xhc3Rfd3JpdHRlbigmY2QtPmNkaSwgJmxhc3Rfd3JpdHRlbikpCisJCQljZC0+Y2FwYWNpdHkgPSBtYXhfdChsb25nLCBjZC0+Y2FwYWNpdHksIGxhc3Rfd3JpdHRlbik7CisKIAkJc2VjdG9yX3NpemUgPSAoYnVmZmVyWzRdIDw8IDI0KSB8CiAJCSAgICAoYnVmZmVyWzVdIDw8IDE2KSB8IChidWZmZXJbNl0gPDwgOCkgfCBidWZmZXJbN107CiAJCXN3aXRjaCAoc2VjdG9yX3NpemUpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zdC5jIGIvZHJpdmVycy9zY3NpL3N0LmMKaW5kZXggYjMzZDA0Mi4uMTJkNThhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3N0LmMKKysrIGIvZHJpdmVycy9zY3NpL3N0LmMKQEAgLTI4NTksMTEgKzI4NTksOCBAQAogCQkJaW9jdGxfcmVzdWx0ID0gc3RfaW50X2lvY3RsKFNUcCwgTVRCU0YsIDEpOwogCiAJCWlmIChjbWRfaW4gPT0gTVRTRVRCTEsgfHwgY21kX2luID09IFNFVF9ERU5TX0FORF9CTEspIHsKLQkJCWludCBvbGRfYmxvY2tfc2l6ZSA9IFNUcC0+YmxvY2tfc2l6ZTsKIAkJCVNUcC0+YmxvY2tfc2l6ZSA9IGFyZyAmIE1UX1NUX0JMS1NJWkVfTUFTSzsKIAkJCWlmIChTVHAtPmJsb2NrX3NpemUgIT0gMCkgewotCQkJCWlmIChvbGRfYmxvY2tfc2l6ZSA9PSAwKQotCQkJCQlub3JtYWxpemVfYnVmZmVyKFNUcC0+YnVmZmVyKTsKIAkJCQkoU1RwLT5idWZmZXIpLT5idWZmZXJfYmxvY2tzID0KIAkJCQkgICAgKFNUcC0+YnVmZmVyKS0+YnVmZmVyX3NpemUgLyBTVHAtPmJsb2NrX3NpemU7CiAJCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC84MjUwLmMgYi9kcml2ZXJzL3NlcmlhbC84MjUwLmMKaW5kZXggMjIwOTYyMC4uYjFhZTc3NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvODI1MC5jCisrKyBiL2RyaXZlcnMvc2VyaWFsLzgyNTAuYwpAQCAtNjQsNiArNjQsOCBAQAogCXJldHVybiAoc2VyaWFsODI1MF9yZWcubWlub3IgLSA2NCkgKyBwb3J0LT5saW5lOwogfQogCitzdGF0aWMgdW5zaWduZWQgaW50IHNraXBfdHhlbl90ZXN0OyAvKiBmb3JjZSBza2lwIG9mIHR4ZW4gdGVzdCBhdCBpbml0IHRpbWUgKi8KKwogLyoKICAqIERlYnVnZ2luZy4KICAqLwpAQCAtMjEwOCw3ICsyMTEwLDcgQEAKIAkgICBpcyB2YXJpYWJsZS4gU28sIGxldCdzIGp1c3QgZG9uJ3QgdGVzdCBpZiB3ZSByZWNlaXZlCiAJICAgVFggaXJxLiBUaGlzIHdheSwgd2UnbGwgbmV2ZXIgZW5hYmxlIFVBUlRfQlVHX1RYRU4uCiAJICovCi0JaWYgKHVwLT5wb3J0LmZsYWdzICYgVVBGX05PX1RYRU5fVEVTVCkKKwlpZiAoc2tpcF90eGVuX3Rlc3QgfHwgdXAtPnBvcnQuZmxhZ3MgJiBVUEZfTk9fVFhFTl9URVNUKQogCQlnb3RvIGRvbnRfdGVzdF90eF9lbjsKIAogCS8qCkBAIC0zMjQ4LDYgKzMyNTAsOSBAQAogbW9kdWxlX3BhcmFtKG5yX3VhcnRzLCB1aW50LCAwNjQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MobnJfdWFydHMsICJNYXhpbXVtIG51bWJlciBvZiBVQVJUcyBzdXBwb3J0ZWQuICgxLSIgX19NT0RVTEVfU1RSSU5HKENPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUykgIikiKTsKIAorbW9kdWxlX3BhcmFtKHNraXBfdHhlbl90ZXN0LCB1aW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0Moc2tpcF90eGVuX3Rlc3QsICJTa2lwIGNoZWNraW5nIGZvciB0aGUgVFhFTiBidWcgYXQgaW5pdCB0aW1lIik7CisKICNpZmRlZiBDT05GSUdfU0VSSUFMXzgyNTBfUlNBCiBtb2R1bGVfcGFyYW1fYXJyYXkocHJvYmVfcnNhLCB1bG9uZywgJnByb2JlX3JzYV9jb3VudCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKHByb2JlX3JzYSwgIlByb2JlIEkvTyBwb3J0cyBmb3IgUlNBIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC84MjUwX3BjaS5jIGIvZHJpdmVycy9zZXJpYWwvODI1MF9wY2kuYwppbmRleCBlNzEwOGU3Li40MmU4NTUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC84MjUwX3BjaS5jCisrKyBiL2RyaXZlcnMvc2VyaWFsLzgyNTBfcGNpLmMKQEAgLTE1NjEsMTEgKzE1NjEsMTYgQEAKIAlwYm5fZXhhcl9YUjE3QzE1MiwKIAlwYm5fZXhhcl9YUjE3QzE1NCwKIAlwYm5fZXhhcl9YUjE3QzE1OCwKKwlwYm5fZXhhcl9pYm1fc2F0dXJuLAogCXBibl9wYXNlbWlfMTY4Mk0sCiAJcGJuX25pODQzMF8yLAogCXBibl9uaTg0MzBfNCwKIAlwYm5fbmk4NDMwXzgsCiAJcGJuX25pODQzMF8xNiwKKwlwYm5fQURESURBVEFfUENJZV8xXzM5MDYyNTAsCisJcGJuX0FERElEQVRBX1BDSWVfMl8zOTA2MjUwLAorCXBibl9BRERJREFUQV9QQ0llXzRfMzkwNjI1MCwKKwlwYm5fQURESURBVEFfUENJZV84XzM5MDYyNTAsCiB9OwogCiAvKgpAQCAtMjE0Niw2ICsyMTUxLDEzIEBACiAJCS5iYXNlX2JhdWQJPSA5MjE2MDAsCiAJCS51YXJ0X29mZnNldAk9IDB4MjAwLAogCX0sCisJW3Bibl9leGFyX2libV9zYXR1cm5dID0geworCQkuZmxhZ3MJCT0gRkxfQkFTRTAsCisJCS5udW1fcG9ydHMJPSAxLAorCQkuYmFzZV9iYXVkCT0gOTIxNjAwLAorCQkudWFydF9vZmZzZXQJPSAweDIwMCwKKwl9LAorCiAJLyoKIAkgKiBQQSBTZW1pIFBXUmZpY2llbnQgUEE2VC0xNjgyTSBvbi1jaGlwIFVBUlQKIAkgKi8KQEAgLTIxODUsNiArMjE5NywzNyBAQAogCQkudWFydF9vZmZzZXQJPSAweDEwLAogCQkuZmlyc3Rfb2Zmc2V0CT0gMHg4MDAsCiAJfSwKKwkvKgorCSAqIEFEREktREFUQSBHbWJIIFBDSS1FeHByZXNzIGNvbW11bmljYXRpb24gY2FyZHMgPGluZm9AYWRkaS1kYXRhLmNvbT4KKwkgKi8KKwlbcGJuX0FERElEQVRBX1BDSWVfMV8zOTA2MjUwXSA9IHsKKwkJLmZsYWdzCQk9IEZMX0JBU0UwLAorCQkubnVtX3BvcnRzCT0gMSwKKwkJLmJhc2VfYmF1ZAk9IDM5MDYyNTAsCisJCS51YXJ0X29mZnNldAk9IDB4MjAwLAorCQkuZmlyc3Rfb2Zmc2V0CT0gMHgxMDAwLAorCX0sCisJW3Bibl9BRERJREFUQV9QQ0llXzJfMzkwNjI1MF0gPSB7CisJCS5mbGFncwkJPSBGTF9CQVNFMCwKKwkJLm51bV9wb3J0cwk9IDIsCisJCS5iYXNlX2JhdWQJPSAzOTA2MjUwLAorCQkudWFydF9vZmZzZXQJPSAweDIwMCwKKwkJLmZpcnN0X29mZnNldAk9IDB4MTAwMCwKKwl9LAorCVtwYm5fQURESURBVEFfUENJZV80XzM5MDYyNTBdID0geworCQkuZmxhZ3MJCT0gRkxfQkFTRTAsCisJCS5udW1fcG9ydHMJPSA0LAorCQkuYmFzZV9iYXVkCT0gMzkwNjI1MCwKKwkJLnVhcnRfb2Zmc2V0CT0gMHgyMDAsCisJCS5maXJzdF9vZmZzZXQJPSAweDEwMDAsCisJfSwKKwlbcGJuX0FERElEQVRBX1BDSWVfOF8zOTA2MjUwXSA9IHsKKwkJLmZsYWdzCQk9IEZMX0JBU0UwLAorCQkubnVtX3BvcnRzCT0gOCwKKwkJLmJhc2VfYmF1ZAk9IDM5MDYyNTAsCisJCS51YXJ0X29mZnNldAk9IDB4MjAwLAorCQkuZmlyc3Rfb2Zmc2V0CT0gMHgxMDAwLAorCX0sCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgc29mdG1vZGVtX2JsYWNrbGlzdFtdID0gewpAQCAtMjY0OSw2ICsyNjkyLDkgQEAKIAkJUENJX1NVQlZFTkRPUl9JRF9DT05ORUNUX1RFQ0gsCiAJCVBDSV9TVUJERVZJQ0VfSURfQ09OTkVDVF9URUNIX1BDSV9VQVJUXzhfNDg1LCAwLCAwLAogCQlwYm5fYjBfOF8xODQzMjAwXzIwMCB9LAorCXsJUENJX1ZFTkRPUl9JRF9FWEFSLCBQQ0lfREVWSUNFX0lEX0VYQVJfWFIxN0MxNTIsCisJCVBDSV9WRU5ET1JfSURfSUJNLCBQQ0lfU1VCREVWSUNFX0lEX0lCTV9TQVRVUk5fU0VSSUFMX09ORV9QT1JULAorCQkwLCAwLCBwYm5fZXhhcl9pYm1fc2F0dXJuIH0sCiAKIAl7CVBDSV9WRU5ET1JfSURfU0VBTEVWRUwsIFBDSV9ERVZJQ0VfSURfU0VBTEVWRUxfVTUzMCwKIAkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwKQEAgLTM1NTYsNiArMzYwMiwzOCBAQAogCQkwLAogCQlwYm5fYjBfOF8xMTUyMDAgfSwKIAorCXsJUENJX1ZFTkRPUl9JRF9BRERJREFUQSwKKwkJUENJX0RFVklDRV9JRF9BRERJREFUQV9BUENJZTc1MDAsCisJCVBDSV9BTllfSUQsCisJCVBDSV9BTllfSUQsCisJCTAsCisJCTAsCisJCXBibl9BRERJREFUQV9QQ0llXzRfMzkwNjI1MCB9LAorCisJewlQQ0lfVkVORE9SX0lEX0FERElEQVRBLAorCQlQQ0lfREVWSUNFX0lEX0FERElEQVRBX0FQQ0llNzQyMCwKKwkJUENJX0FOWV9JRCwKKwkJUENJX0FOWV9JRCwKKwkJMCwKKwkJMCwKKwkJcGJuX0FERElEQVRBX1BDSWVfMl8zOTA2MjUwIH0sCisKKwl7CVBDSV9WRU5ET1JfSURfQURESURBVEEsCisJCVBDSV9ERVZJQ0VfSURfQURESURBVEFfQVBDSWU3MzAwLAorCQlQQ0lfQU5ZX0lELAorCQlQQ0lfQU5ZX0lELAorCQkwLAorCQkwLAorCQlwYm5fQURESURBVEFfUENJZV8xXzM5MDYyNTAgfSwKKworCXsJUENJX1ZFTkRPUl9JRF9BRERJREFUQSwKKwkJUENJX0RFVklDRV9JRF9BRERJREFUQV9BUENJZTc4MDAsCisJCVBDSV9BTllfSUQsCisJCVBDSV9BTllfSUQsCisJCTAsCisJCTAsCisJCXBibl9BRERJREFUQV9QQ0llXzhfMzkwNjI1MCB9LAorCiAJewlQQ0lfVkVORE9SX0lEX05FVE1PUywgUENJX0RFVklDRV9JRF9ORVRNT1NfOTgzNSwKIAkJUENJX1ZFTkRPUl9JRF9JQk0sIDB4MDI5OSwKIAkJMCwgMCwgcGJuX2IwX2J0XzJfMTE1MjAwIH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9LY29uZmlnIGIvZHJpdmVycy9zZXJpYWwvS2NvbmZpZwppbmRleCAwMzQyMmNlLi5lNTIyNTcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9LY29uZmlnCisrKyBiL2RyaXZlcnMvc2VyaWFsL0tjb25maWcKQEAgLTg2Miw3ICs4NjIsNyBAQAogCiBjb25maWcgU0VSSUFMX1VBUlRMSVRFCiAJdHJpc3RhdGUgIlhpbGlueCB1YXJ0bGl0ZSBzZXJpYWwgcG9ydCBzdXBwb3J0IgotCWRlcGVuZHMgb24gUFBDMzIgfHwgTUlDUk9CTEFaRQorCWRlcGVuZHMgb24gUFBDMzIgfHwgTUlDUk9CTEFaRSB8fCBNRkRfVElNQkVSREFMRQogCXNlbGVjdCBTRVJJQUxfQ09SRQogCWhlbHAKIAkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIHRoZSBYaWxpbnggdWFydGxpdGUgc2VyaWFsIGNvbnRyb2xsZXIuCkBAIC0xNDU4LDQgKzE0NTgsMjMgQEAKIAktLS1oZWxwLS0tCiAJQWRkIHN1cHBvcnQgZm9yIFVBUlQgY29udHJvbGxlciBvbiB0aW1iZXJkYWxlLgogCitjb25maWcgU0VSSUFMX0JDTTYzWFgKKwl0cmlzdGF0ZSAiYmNtNjN4eCBzZXJpYWwgcG9ydCBzdXBwb3J0IgorCXNlbGVjdCBTRVJJQUxfQ09SRQorCWRlcGVuZHMgb24gQkNNNjNYWAorCWhlbHAKKwkgIElmIHlvdSBoYXZlIGEgYmNtNjN4eCBDUFUsIHlvdSBjYW4gZW5hYmxlIGl0cyBvbmJvYXJkCisJICBzZXJpYWwgcG9ydCBieSBlbmFibGluZyB0aGlzIG9wdGlvbnMuCisKKyAgICAgICAgICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKyAgICAgICAgICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgYmNtOTYzeHhfdWFydC4KKworY29uZmlnIFNFUklBTF9CQ002M1hYX0NPTlNPTEUKKwlib29sICJDb25zb2xlIG9uIGJjbTYzeHggc2VyaWFsIHBvcnQiCisJZGVwZW5kcyBvbiBTRVJJQUxfQkNNNjNYWD15CisJc2VsZWN0IFNFUklBTF9DT1JFX0NPTlNPTEUKKwloZWxwCisJICBJZiB5b3UgaGF2ZSBlbmFibGVkIHRoZSBzZXJpYWwgcG9ydCBvbiB0aGUgYmNtNjN4eCBDUFUKKwkgIHlvdSBjYW4gbWFrZSBpdCB0aGUgY29uc29sZSBieSBhbnN3ZXJpbmcgWSB0byB0aGlzIG9wdGlvbi4KKwogZW5kbWVudQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvTWFrZWZpbGUgYi9kcml2ZXJzL3NlcmlhbC9NYWtlZmlsZQppbmRleCA5N2Y2ZmNjLi5kMjFkNWRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3NlcmlhbC9NYWtlZmlsZQpAQCAtMzQsNiArMzQsNyBAQAogb2JqLSQoQ09ORklHX1NFUklBTF9QWEEpICs9IHB4YS5vCiBvYmotJChDT05GSUdfU0VSSUFMX1BOWDhYWFgpICs9IHBueDh4eHhfdWFydC5vCiBvYmotJChDT05GSUdfU0VSSUFMX1NBMTEwMCkgKz0gc2ExMTAwLm8KK29iai0kKENPTkZJR19TRVJJQUxfQkNNNjNYWCkgKz0gYmNtNjN4eF91YXJ0Lm8KIG9iai0kKENPTkZJR19TRVJJQUxfQkZJTikgKz0gYmZpbl81eHgubwogb2JqLSQoQ09ORklHX1NFUklBTF9CRklOX1NQT1JUKSArPSBiZmluX3Nwb3J0X3VhcnQubwogb2JqLSQoQ09ORklHX1NFUklBTF9TQU1TVU5HKSArPSBzYW1zdW5nLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL2F0bWVsX3NlcmlhbC5jIGIvZHJpdmVycy9zZXJpYWwvYXRtZWxfc2VyaWFsLmMKaW5kZXggMzU1MWM1Yy4uOWQ5NDhiYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvYXRtZWxfc2VyaWFsLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvYXRtZWxfc2VyaWFsLmMKQEAgLTE1MzEsNyArMTUzMSw3IEBACiAJdm9pZCAqZGF0YTsKIAlpbnQgcmV0OwogCi0JQlVJTERfQlVHX09OKCFpc19wb3dlcl9vZl8yKEFUTUVMX1NFUklBTF9SSU5HU0laRSkpOworCUJVSUxEX0JVR19PTihBVE1FTF9TRVJJQUxfUklOR1NJWkUgJiAoQVRNRUxfU0VSSUFMX1JJTkdTSVpFIC0gMSkpOwogCiAJcG9ydCA9ICZhdG1lbF9wb3J0c1twZGV2LT5pZF07CiAJcG9ydC0+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+c3RvcF9yeCh1cG9ydCk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnQtPmxvY2ssIGZsYWdzKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdXBvcnQtPmxvY2ssIGZsYWdzKTsKIAkJLyoKIAkJICogQmVmb3JlIHdlIGRyb3AgRFRSLCBtYWtlIHN1cmUgdGhlIFVBUlQgdHJhbnNtaXR0ZXIKIAkJICogaGFzIGNvbXBsZXRlbHkgZHJhaW5lZDsgdGhpcyBpcyBlc3BlY2lhbGx5CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9zZXJpYWxfdHh4OS5jIGIvZHJpdmVycy9zZXJpYWwvc2VyaWFsX3R4eDkuYwppbmRleCAwZjdjZjRjLi5jNTBlOWZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9zZXJpYWxfdHh4OS5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL3NlcmlhbF90eHg5LmMKQEAgLTIyMSwyMSArMjIxLDI2IEBACiAJCXNpb19vdXQodXAsIFRYWDlfU0lCR1IsIDB4ZmYgfCBUWFg5X1NJQkdSX0JDTEtfVDYpOwogfQogCitzdGF0aWMgc3RydWN0IHVhcnRfdHh4OV9wb3J0ICp0b191YXJ0X3R4eDlfcG9ydChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQoreworCXJldHVybiBjb250YWluZXJfb2YocG9ydCwgc3RydWN0IHVhcnRfdHh4OV9wb3J0LCBwb3J0KTsKK30KKwogc3RhdGljIHZvaWQgc2VyaWFsX3R4eDlfc3RvcF90eChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQogewotCXN0cnVjdCB1YXJ0X3R4eDlfcG9ydCAqdXAgPSAoc3RydWN0IHVhcnRfdHh4OV9wb3J0ICopcG9ydDsKKwlzdHJ1Y3QgdWFydF90eHg5X3BvcnQgKnVwID0gdG9fdWFydF90eHg5X3BvcnQocG9ydCk7CiAJc2lvX21hc2sodXAsIFRYWDlfU0lESUNSLCBUWFg5X1NJRElDUl9USUUpOwogfQogCiBzdGF0aWMgdm9pZCBzZXJpYWxfdHh4OV9zdGFydF90eChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQogewotCXN0cnVjdCB1YXJ0X3R4eDlfcG9ydCAqdXAgPSAoc3RydWN0IHVhcnRfdHh4OV9wb3J0ICopcG9ydDsKKwlzdHJ1Y3QgdWFydF90eHg5X3BvcnQgKnVwID0gdG9fdWFydF90eHg5X3BvcnQocG9ydCk7CiAJc2lvX3NldCh1cCwgVFhYOV9TSURJQ1IsIFRYWDlfU0lESUNSX1RJRSk7CiB9CiAKIHN0YXRpYyB2b2lkIHNlcmlhbF90eHg5X3N0b3Bfcngoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKIHsKLQlzdHJ1Y3QgdWFydF90eHg5X3BvcnQgKnVwID0gKHN0cnVjdCB1YXJ0X3R4eDlfcG9ydCAqKXBvcnQ7CisJc3RydWN0IHVhcnRfdHh4OV9wb3J0ICp1cCA9IHRvX3VhcnRfdHh4OV9wb3J0KHBvcnQpOwogCXVwLT5wb3J0LnJlYWRfc3RhdHVzX21hc2sgJj0gflRYWDlfU0lESVNSX1JESVM7CiB9CiAKQEAgLTI0Niw3ICsyNTEsNyBAQAogCiBzdGF0aWMgdm9pZCBzZXJpYWxfdHh4OV9pbml0aWFsaXplKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCiB7Ci0Jc3RydWN0IHVhcnRfdHh4OV9wb3J0ICp1cCA9IChzdHJ1Y3QgdWFydF90eHg5X3BvcnQgKilwb3J0OworCXN0cnVjdCB1YXJ0X3R4eDlfcG9ydCAqdXAgPSB0b191YXJ0X3R4eDlfcG9ydChwb3J0KTsKIAl1bnNpZ25lZCBpbnQgdG1vdXQgPSAxMDAwMDsKIAogCXNpb19vdXQodXAsIFRYWDlfU0lGQ1IsIFRYWDlfU0lGQ1JfU1dSU1QpOwpAQCAtNDE0LDcgKzQxOSw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgc2VyaWFsX3R4eDlfdHhfZW1wdHkoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKIHsKLQlzdHJ1Y3QgdWFydF90eHg5X3BvcnQgKnVwID0gKHN0cnVjdCB1YXJ0X3R4eDlfcG9ydCAqKXBvcnQ7CisJc3RydWN0IHVhcnRfdHh4OV9wb3J0ICp1cCA9IHRvX3VhcnRfdHh4OV9wb3J0KHBvcnQpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5zaWduZWQgaW50IHJldDsKIApAQCAtNDI3LDcgKzQzMiw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgc2VyaWFsX3R4eDlfZ2V0X21jdHJsKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCiB7Ci0Jc3RydWN0IHVhcnRfdHh4OV9wb3J0ICp1cCA9IChzdHJ1Y3QgdWFydF90eHg5X3BvcnQgKilwb3J0OworCXN0cnVjdCB1YXJ0X3R4eDlfcG9ydCAqdXAgPSB0b191YXJ0X3R4eDlfcG9ydChwb3J0KTsKIAl1bnNpZ25lZCBpbnQgcmV0OwogCiAJLyogbm8gbW9kZW0gY29udHJvbCBsaW5lcyAqLwpAQCAtNDQwLDcgKzQ0NSw3IEBACiAKIHN0YXRpYyB2b2lkIHNlcmlhbF90eHg5X3NldF9tY3RybChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCB1bnNpZ25lZCBpbnQgbWN0cmwpCiB7Ci0Jc3RydWN0IHVhcnRfdHh4OV9wb3J0ICp1cCA9IChzdHJ1Y3QgdWFydF90eHg5X3BvcnQgKilwb3J0OworCXN0cnVjdCB1YXJ0X3R4eDlfcG9ydCAqdXAgPSB0b191YXJ0X3R4eDlfcG9ydChwb3J0KTsKIAogCWlmIChtY3RybCAmIFRJT0NNX1JUUykKIAkJc2lvX21hc2sodXAsIFRYWDlfU0lGTENSLCBUWFg5X1NJRkxDUl9SVFNTQyk7CkBAIC00NTAsNyArNDU1LDcgQEAKIAogc3RhdGljIHZvaWQgc2VyaWFsX3R4eDlfYnJlYWtfY3RsKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIGludCBicmVha19zdGF0ZSkKIHsKLQlzdHJ1Y3QgdWFydF90eHg5X3BvcnQgKnVwID0gKHN0cnVjdCB1YXJ0X3R4eDlfcG9ydCAqKXBvcnQ7CisJc3RydWN0IHVhcnRfdHh4OV9wb3J0ICp1cCA9IHRvX3VhcnRfdHh4OV9wb3J0KHBvcnQpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmdXAtPnBvcnQubG9jaywgZmxhZ3MpOwpAQCAtNDk0LDcgKzQ5OSw3IEBACiB7CiAJdW5zaWduZWQgaW50IGllcjsKIAl1bnNpZ25lZCBjaGFyIGM7Ci0Jc3RydWN0IHVhcnRfdHh4OV9wb3J0ICp1cCA9IChzdHJ1Y3QgdWFydF90eHg5X3BvcnQgKilwb3J0OworCXN0cnVjdCB1YXJ0X3R4eDlfcG9ydCAqdXAgPSB0b191YXJ0X3R4eDlfcG9ydChwb3J0KTsKIAogCS8qCiAJICoJRmlyc3Qgc2F2ZSB0aGUgSUVSIHRoZW4gZGlzYWJsZSB0aGUgaW50ZXJydXB0cwpAQCAtNTIwLDcgKzUyNSw3IEBACiBzdGF0aWMgdm9pZCBzZXJpYWxfdHh4OV9wdXRfcG9sbF9jaGFyKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIHVuc2lnbmVkIGNoYXIgYykKIHsKIAl1bnNpZ25lZCBpbnQgaWVyOwotCXN0cnVjdCB1YXJ0X3R4eDlfcG9ydCAqdXAgPSAoc3RydWN0IHVhcnRfdHh4OV9wb3J0ICopcG9ydDsKKwlzdHJ1Y3QgdWFydF90eHg5X3BvcnQgKnVwID0gdG9fdWFydF90eHg5X3BvcnQocG9ydCk7CiAKIAkvKgogCSAqCUZpcnN0IHNhdmUgdGhlIElFUiB0aGVuIGRpc2FibGUgdGhlIGludGVycnVwdHMKQEAgLTU1MSw3ICs1NTYsNyBAQAogCiBzdGF0aWMgaW50IHNlcmlhbF90eHg5X3N0YXJ0dXAoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKIHsKLQlzdHJ1Y3QgdWFydF90eHg5X3BvcnQgKnVwID0gKHN0cnVjdCB1YXJ0X3R4eDlfcG9ydCAqKXBvcnQ7CisJc3RydWN0IHVhcnRfdHh4OV9wb3J0ICp1cCA9IHRvX3VhcnRfdHh4OV9wb3J0KHBvcnQpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHJldHZhbDsKIApAQCAtNTk2LDcgKzYwMSw3IEBACiAKIHN0YXRpYyB2b2lkIHNlcmlhbF90eHg5X3NodXRkb3duKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCiB7Ci0Jc3RydWN0IHVhcnRfdHh4OV9wb3J0ICp1cCA9IChzdHJ1Y3QgdWFydF90eHg5X3BvcnQgKilwb3J0OworCXN0cnVjdCB1YXJ0X3R4eDlfcG9ydCAqdXAgPSB0b191YXJ0X3R4eDlfcG9ydChwb3J0KTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJLyoKQEAgLTYzNiw3ICs2NDEsNyBAQAogc2VyaWFsX3R4eDlfc2V0X3Rlcm1pb3Moc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgc3RydWN0IGt0ZXJtaW9zICp0ZXJtaW9zLAogCQkgICAgICAgc3RydWN0IGt0ZXJtaW9zICpvbGQpCiB7Ci0Jc3RydWN0IHVhcnRfdHh4OV9wb3J0ICp1cCA9IChzdHJ1Y3QgdWFydF90eHg5X3BvcnQgKilwb3J0OworCXN0cnVjdCB1YXJ0X3R4eDlfcG9ydCAqdXAgPSB0b191YXJ0X3R4eDlfcG9ydChwb3J0KTsKIAl1bnNpZ25lZCBpbnQgY3ZhbCwgZmNyID0gMDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVuc2lnbmVkIGludCBiYXVkLCBxdW90OwpAQCAtODE0LDE5ICs4MTksMTkgQEAKIAogc3RhdGljIHZvaWQgc2VyaWFsX3R4eDlfcmVsZWFzZV9wb3J0KHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCiB7Ci0Jc3RydWN0IHVhcnRfdHh4OV9wb3J0ICp1cCA9IChzdHJ1Y3QgdWFydF90eHg5X3BvcnQgKilwb3J0OworCXN0cnVjdCB1YXJ0X3R4eDlfcG9ydCAqdXAgPSB0b191YXJ0X3R4eDlfcG9ydChwb3J0KTsKIAlzZXJpYWxfdHh4OV9yZWxlYXNlX3Jlc291cmNlKHVwKTsKIH0KIAogc3RhdGljIGludCBzZXJpYWxfdHh4OV9yZXF1ZXN0X3BvcnQoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKIHsKLQlzdHJ1Y3QgdWFydF90eHg5X3BvcnQgKnVwID0gKHN0cnVjdCB1YXJ0X3R4eDlfcG9ydCAqKXBvcnQ7CisJc3RydWN0IHVhcnRfdHh4OV9wb3J0ICp1cCA9IHRvX3VhcnRfdHh4OV9wb3J0KHBvcnQpOwogCXJldHVybiBzZXJpYWxfdHh4OV9yZXF1ZXN0X3Jlc291cmNlKHVwKTsKIH0KIAogc3RhdGljIHZvaWQgc2VyaWFsX3R4eDlfY29uZmlnX3BvcnQoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgaW50IHVmbGFncykKIHsKLQlzdHJ1Y3QgdWFydF90eHg5X3BvcnQgKnVwID0gKHN0cnVjdCB1YXJ0X3R4eDlfcG9ydCAqKXBvcnQ7CisJc3RydWN0IHVhcnRfdHh4OV9wb3J0ICp1cCA9IHRvX3VhcnRfdHh4OV9wb3J0KHBvcnQpOwogCWludCByZXQ7CiAKIAkvKgpAQCAtODk3LDcgKzkwMiw3IEBACiAKIHN0YXRpYyB2b2lkIHNlcmlhbF90eHg5X2NvbnNvbGVfcHV0Y2hhcihzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCBpbnQgY2gpCiB7Ci0Jc3RydWN0IHVhcnRfdHh4OV9wb3J0ICp1cCA9IChzdHJ1Y3QgdWFydF90eHg5X3BvcnQgKilwb3J0OworCXN0cnVjdCB1YXJ0X3R4eDlfcG9ydCAqdXAgPSB0b191YXJ0X3R4eDlfcG9ydChwb3J0KTsKIAogCXdhaXRfZm9yX3htaXRyKHVwKTsKIAlzaW9fb3V0KHVwLCBUWFg5X1NJVEZJRk8sIGNoKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2ZpL3NmaV9jb3JlLmMgYi9kcml2ZXJzL3NmaS9zZmlfY29yZS5jCmluZGV4IGQzYjQ5NjguLmIyMDRhMDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2ZpL3NmaV9jb3JlLmMKKysrIGIvZHJpdmVycy9zZmkvc2ZpX2NvcmUuYwpAQCAtOTAsNyArOTAsMTEgQEAKICAqLwogc3RhdGljIHUzMiBzZmlfdXNlX2lvcmVtYXAgX19yZWFkX21vc3RseTsKIAotc3RhdGljIHZvaWQgX19pb21lbSAqc2ZpX21hcF9tZW1vcnkodTY0IHBoeXMsIHUzMiBzaXplKQorLyoKKyAqIHNmaV91bi9tYXBfbWVtb3J5IGNhbGxzIGVhcmx5X2lvcmVtYXAvaW91bm1hcCB3aGljaCBpcyBhIF9faW5pdCBmdW5jdGlvbgorICogYW5kIGludHJvZHVjZXMgc2VjdGlvbiBtaXNtYXRjaC4gU28gdXNlIF9fcmVmIHRvIG1ha2UgaXQgY2FsbS4KKyAqLworc3RhdGljIHZvaWQgX19pb21lbSAqIF9fcmVmIHNmaV9tYXBfbWVtb3J5KHU2NCBwaHlzLCB1MzIgc2l6ZSkKIHsKIAlpZiAoIXBoeXMgfHwgIXNpemUpCiAJCXJldHVybiBOVUxMOwpAQCAtMTAxLDcgKzEwNSw3IEBACiAJCXJldHVybiBlYXJseV9pb3JlbWFwKHBoeXMsIHNpemUpOwogfQogCi1zdGF0aWMgdm9pZCBzZmlfdW5tYXBfbWVtb3J5KHZvaWQgX19pb21lbSAqdmlydCwgdTMyIHNpemUpCitzdGF0aWMgdm9pZCBfX3JlZiBzZmlfdW5tYXBfbWVtb3J5KHZvaWQgX19pb21lbSAqdmlydCwgdTMyIHNpemUpCiB7CiAJaWYgKCF2aXJ0IHx8ICFzaXplKQogCQlyZXR1cm47CkBAIC0xMjUsNyArMTI5LDcgQEAKICAqIHNmaV92ZXJpZnlfdGFibGUoKQogICogU2FuaXR5IGNoZWNrIHRhYmxlIGxlbmdoLCBjYWxjdWxhdGUgY2hlY2tzdW0KICAqLwotc3RhdGljIF9faW5pdCBpbnQgc2ZpX3ZlcmlmeV90YWJsZShzdHJ1Y3Qgc2ZpX3RhYmxlX2hlYWRlciAqdGFibGUpCitzdGF0aWMgaW50IHNmaV92ZXJpZnlfdGFibGUoc3RydWN0IHNmaV90YWJsZV9oZWFkZXIgKnRhYmxlKQogewogCiAJdTggY2hlY2tzdW0gPSAwOwpAQCAtMjEzLDEyICsyMTcsMTcgQEAKICAqICAgIHRoZSBtYXBwZWQgdmlydCBhZGRyZXNzIHdpbGwgYmUgcmV0dXJuZWQsIGFuZCB0aGUgdmlydCBzcGFjZQogICogICAgd2lsbCBiZSByZWxlYXNlZCBieSBjYWxsIHNmaV9wdXRfdGFibGUoKSBsYXRlcgogICoKKyAqIFRoaXMgdHdvIGNhc2VzIGFyZSBmcm9tIHR3byBkaWZmZXJlbnQgZnVuY3Rpb25zIHdpdGggdHdvIGRpZmZlcmVudAorICogc2VjdGlvbnMgYW5kIGNhdXNlcyBzZWN0aW9uIG1pc21hdGNoIHdhcm5pbmcuIFNvIHVzZSBfX3JlZiB0byB0ZWxsCisgKiBtb2Rwb3N0IG5vdCB0byBtYWtlIGFueSBub2lzZS4KKyAqCiAgKiBSZXR1cm4gdmFsdWU6CiAgKglOVUxMOgkJCXdoZW4gY2FuJ3QgZmluZCBhIHRhYmxlIG1hdGNoaW5nIHRoZSBrZXkKICAqCUVSUl9QVFIoZXJyb3IpOgkJZXJyb3IgdmFsdWUKICAqCXZpcnQgdGFibGUgYWRkcmVzczoJd2hlbiBhIG1hdGNoZWQgdGFibGUgaXMgZm91bmQKICAqLwotc3RydWN0IHNmaV90YWJsZV9oZWFkZXIgKnNmaV9jaGVja190YWJsZSh1NjQgcGEsIHN0cnVjdCBzZmlfdGFibGVfa2V5ICprZXkpCitzdHJ1Y3Qgc2ZpX3RhYmxlX2hlYWRlciAqCisgX19yZWYgc2ZpX2NoZWNrX3RhYmxlKHU2NCBwYSwgc3RydWN0IHNmaV90YWJsZV9rZXkgKmtleSkKIHsKIAlzdHJ1Y3Qgc2ZpX3RhYmxlX2hlYWRlciAqdGg7CiAJdm9pZCAqcmV0ID0gTlVMTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL01ha2VmaWxlIGIvZHJpdmVycy9zcGkvTWFrZWZpbGUKaW5kZXggNmQ3YTNmOC4uMjFhMTE4MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9zcGkvTWFrZWZpbGUKQEAgLTE3LDcgKzE3LDcgQEAKIG9iai0kKENPTkZJR19TUElfQVUxNTUwKQkJKz0gYXUxNTUwX3NwaS5vCiBvYmotJChDT05GSUdfU1BJX0JVVFRFUkZMWSkJCSs9IHNwaV9idXR0ZXJmbHkubwogb2JqLSQoQ09ORklHX1NQSV9HUElPKQkJCSs9IHNwaV9ncGlvLm8KLW9iai0kKENPTkZJR19TUElfSU1YKQkJCSs9IG14Y19zcGkubworb2JqLSQoQ09ORklHX1NQSV9JTVgpCQkJKz0gc3BpX2lteC5vCiBvYmotJChDT05GSUdfU1BJX0xNNzBfTExQKQkJKz0gc3BpX2xtNzBsbHAubwogb2JqLSQoQ09ORklHX1NQSV9QWEEyWFgpCQkrPSBweGEyeHhfc3BpLm8KIG9iai0kKENPTkZJR19TUElfT01BUF9VV0lSRSkJCSs9IG9tYXBfdXdpcmUubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvYW1iYS1wbDAyMi5jIGIvZHJpdmVycy9zcGkvYW1iYS1wbDAyMi5jCmluZGV4IGMwZjk1MGEuLmZmNWJiYjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL2FtYmEtcGwwMjIuYworKysgYi9kcml2ZXJzL3NwaS9hbWJhLXBsMDIyLmMKQEAgLTUzMiw3ICs1MzIsNyBAQAogCUdFTl9NQVNLX0JJVFMoU1NQX0RBVEFfQklUU18xMiwgU1NQX0NSMF9NQVNLX0RTUywgMCkJfCBcCiAJR0VOX01BU0tfQklUUyhTU1BfTUlDUk9XSVJFX0NIQU5ORUxfRlVMTF9EVVBMRVgsIFNTUF9DUjBfTUFTS19IQUxGRFVQLCA1KSB8IFwKIAlHRU5fTUFTS19CSVRTKFNTUF9DTEtfUE9MX0lETEVfTE9XLCBTU1BfQ1IwX01BU0tfU1BPLCA2KSB8IFwKLQlHRU5fTUFTS19CSVRTKFNTUF9DTEtfRkFMTElOR19FREdFLCBTU1BfQ1IwX01BU0tfU1BILCA3KSB8IFwKKwlHRU5fTUFTS19CSVRTKFNTUF9DTEtfU0VDT05EX0VER0UsIFNTUF9DUjBfTUFTS19TUEgsIDcpIHwgXAogCUdFTl9NQVNLX0JJVFMoTk1ES19TU1BfREVGQVVMVF9DTEtSQVRFLCBTU1BfQ1IwX01BU0tfU0NSLCA4KSB8IFwKIAlHRU5fTUFTS19CSVRTKFNTUF9CSVRTXzgsIFNTUF9DUjBfTUFTS19DU1MsIDE2KQl8IFwKIAlHRU5fTUFTS19CSVRTKFNTUF9JTlRFUkZBQ0VfTU9UT1JPTEFfU1BJLCBTU1BfQ1IwX01BU0tfRlJGLCAyMSkgXApAQCAtMTI0Nyw4ICsxMjQ3LDggQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCWlmIChjaGlwX2luZm8tPmlmYWNlID09IFNTUF9JTlRFUkZBQ0VfTU9UT1JPTEFfU1BJKSB7Ci0JCWlmICgoY2hpcF9pbmZvLT5jbGtfcGhhc2UgIT0gU1NQX0NMS19SSVNJTkdfRURHRSkKLQkJICAgICYmIChjaGlwX2luZm8tPmNsa19waGFzZSAhPSBTU1BfQ0xLX0ZBTExJTkdfRURHRSkpIHsKKwkJaWYgKChjaGlwX2luZm8tPmNsa19waGFzZSAhPSBTU1BfQ0xLX0ZJUlNUX0VER0UpCisJCSAgICAmJiAoY2hpcF9pbmZvLT5jbGtfcGhhc2UgIT0gU1NQX0NMS19TRUNPTkRfRURHRSkpIHsKIAkJCWRldl9lcnIoY2hpcF9pbmZvLT5kZXYsCiAJCQkJIkNsb2NrIFBoYXNlIGlzIGNvbmZpZ3VyZWQgaW5jb3JyZWN0bHlcbiIpOwogCQkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xNDg1LDcgKzE0ODUsNyBAQAogCQljaGlwX2luZm8tPmRhdGFfc2l6ZSA9IFNTUF9EQVRBX0JJVFNfMTI7CiAJCWNoaXBfaW5mby0+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+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzcGlfaW14X2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkgICAubmFtZSA9IERSSVZFUl9OQU1FLAorCQkgICAub3duZXIgPSBUSElTX01PRFVMRSwKKwkJICAgfSwKKwkucHJvYmUgPSBzcGlfaW14X3Byb2JlLAorCS5yZW1vdmUgPSBfX2V4aXRfcChzcGlfaW14X3JlbW92ZSksCit9OworCitzdGF0aWMgaW50IF9faW5pdCBzcGlfaW14X2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZzcGlfaW14X2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBzcGlfaW14X2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigmc3BpX2lteF9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChzcGlfaW14X2luaXQpOworbW9kdWxlX2V4aXQoc3BpX2lteF9leGl0KTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJTUEkgTWFzdGVyIENvbnRyb2xsZXIgZHJpdmVyIik7CitNT0RVTEVfQVVUSE9SKCJTYXNjaGEgSGF1ZXIsIFBlbmd1dHJvbml4Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9zcGlkZXYuYyBiL2RyaXZlcnMvc3BpL3NwaWRldi5jCmluZGV4IGY5MjFiZDEuLjVkMjM5ODMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL3NwaWRldi5jCisrKyBiL2RyaXZlcnMvc3BpL3NwaWRldi5jCkBAIC01MzcsNyArNTM3LDcgQEAKIAlyZXR1cm4gc3RhdHVzOwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzcGlkZXZfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHNwaWRldl9mb3BzID0gewogCS5vd25lciA9CVRISVNfTU9EVUxFLAogCS8qIFJFVklTSVQgc3dpdGNoIHRvIGFpbyBwcmltaXRpdmVzLCBzbyB0aGF0IHVzZXJzcGFjZQogCSAqIGdldHMgbW9yZSBjb21wbGV0ZSBBUEkgY292ZXJhZ2UuICBJdCdsbCBzaW1wbGlmeSB0aGluZ3MKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL0tjb25maWcKaW5kZXggOWE0ZGQ1OS4uZDIxYjM0NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL0tjb25maWcKKysrIGIvZHJpdmVycy9zdGFnaW5nL0tjb25maWcKQEAgLTU5LDggKzU5LDYgQEAKIAogc291cmNlICJkcml2ZXJzL3N0YWdpbmcvcG9jaC9LY29uZmlnIgogCi1zb3VyY2UgImRyaXZlcnMvc3RhZ2luZy9hZ254L0tjb25maWciCi0KIHNvdXJjZSAiZHJpdmVycy9zdGFnaW5nL290dXMvS2NvbmZpZyIKIAogc291cmNlICJkcml2ZXJzL3N0YWdpbmcvcnQyODYwL0tjb25maWciCkBAIC05NSw4ICs5Myw2IEBACiAKIHNvdXJjZSAiZHJpdmVycy9zdGFnaW5nL3BvaG1lbGZzL0tjb25maWciCiAKLXNvdXJjZSAiZHJpdmVycy9zdGFnaW5nL3N0bGM0NXh4L0tjb25maWciCi0KIHNvdXJjZSAiZHJpdmVycy9zdGFnaW5nL2IzZGZnL0tjb25maWciCiAKIHNvdXJjZSAiZHJpdmVycy9zdGFnaW5nL3BoaXNvbi9LY29uZmlnIgpAQCAtMTI5LDcgKzEyNSw1IEBACiAKIHNvdXJjZSAiZHJpdmVycy9zdGFnaW5nL2lpby9LY29uZmlnIgogCi1zb3VyY2UgImRyaXZlcnMvc3RhZ2luZy9jb3dsb29wL0tjb25maWciCi0KIGVuZGlmICMgIVNUQUdJTkdfRVhDTFVERV9CVUlMRAogZW5kaWYgIyBTVEFHSU5HCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvTWFrZWZpbGUgYi9kcml2ZXJzL3N0YWdpbmcvTWFrZWZpbGUKaW5kZXggMTA0ZjJmOC4uOGNiZjFhZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9NYWtlZmlsZQpAQCAtMTIsNyArMTIsNiBAQAogb2JqLSQoQ09ORklHX1BSSVNNMl9VU0IpCSs9IHdsYW4tbmcvCiBvYmotJChDT05GSUdfRUNITykJCSs9IGVjaG8vCiBvYmotJChDT05GSUdfUE9DSCkJCSs9IHBvY2gvCi1vYmotJChDT05GSUdfQUdOWCkJCSs9IGFnbngvCiBvYmotJChDT05GSUdfT1RVUykJCSs9IG90dXMvCiBvYmotJChDT05GSUdfUlQyODYwKQkJKz0gcnQyODYwLwogb2JqLSQoQ09ORklHX1JUMjg3MCkJCSs9IHJ0Mjg3MC8KQEAgLTMwLDcgKzI5LDYgQEAKIG9iai0kKENPTkZJR19BTkRST0lEKQkJKz0gZHJlYW0vCiBvYmotJChDT05GSUdfRFNUKQkJKz0gZHN0Lwogb2JqLSQoQ09ORklHX1BPSE1FTEZTKQkJKz0gcG9obWVsZnMvCi1vYmotJChDT05GSUdfU1RMQzQ1WFgpCQkrPSBzdGxjNDV4eC8KIG9iai0kKENPTkZJR19CM0RGRykJCSs9IGIzZGZnLwogb2JqLSQoQ09ORklHX0lERV9QSElTT04pCSs9IHBoaXNvbi8KIG9iai0kKENPTkZJR19QTEFOOUFVVEgpCQkrPSBwOWF1dGgvCkBAIC00Niw0ICs0NCwzIEBACiBvYmotJChDT05GSUdfUkFSX1JFR0lTVEVSKQkrPSByYXIvCiBvYmotJChDT05GSUdfRFhfU0VQKQkJKz0gc2VwLwogb2JqLSQoQ09ORklHX0lJTykJCSs9IGlpby8KLW9iai0kKENPTkZJR19DT1dMT09QKQkJKz0gY293bG9vcC8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9hZ254L0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvYWdueC9LY29uZmlnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZjQzNTQ5Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9hZ254L0tjb25maWcKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLWNvbmZpZyBBR05YCi0JdHJpc3RhdGUgIldpcmVsZXNzIEFpcmdvIEFHTlggc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFdMQU5fODAyMTEgJiYgTUFDODAyMTEKLQktLS1oZWxwLS0tCi0JICBUaGlzIGlzIGFuIGV4cGVyaW1lbnRhbCBkcml2ZXIgZm9yIEFpcmdvIEFHTlgwMCB3aXJlbGVzcyBjaGlwLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2FnbngvTWFrZWZpbGUgYi9kcml2ZXJzL3N0YWdpbmcvYWdueC9NYWtlZmlsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTIxNjU2NC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYWdueC9NYWtlZmlsZQorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotb2JqLSQoQ09ORklHX0FHTlgpCSs9IGFnbngubwotCi1hZ254LW9ianMgOj0JcmYubwlcCi0JCXBjaS5vCVwKLQkJeG1pdC5vCVwKLQkJdGFibGUubwlcCi0JCXN0YS5vCVwKLQkJcGh5Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9hZ254L1RPRE8gYi9kcml2ZXJzL3N0YWdpbmcvYWdueC9UT0RPCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OWJlYzc0Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9hZ254L1RPRE8KKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi0yMDA4IDcvMTgKLQotVGhlIFJYIGhhcyBjYW4ndCByZWNlaXZlIE9GRE0gcGFja2V0IGNvcnJlY3RseSwKLUd1ZXNzIGl0IG5lZWQgYmUgZG8gUlggY2FsaWJyYXRlLgotCi0KLWJlZm9yZSAyMDA4IDMvMQotCi0xOiBUaGUgUlggZ2V0IHRvbyBtdWNoICJDUkMgZmFpbGVkIiBwYWtldHMsIGl0IG1ha2UgdGhlIGNhcmQgd29yayB2ZXJ5IHVuc3RhYmxlLAotMjogQWZ0ZXIgcnVubmluZyBhIHdoaWxlLCB0aGUgY2FyZCB3aWxsIGdldCBpbmZpbml0eSAiUlggRnJhbWUiIGFuZCAiRXJyb3IiCi1pbnRlcnJ1cHQsIG5vdCBrbm93IHRoZSByb290IHJlYXNvbiBzbyBmYXIsIHRyeSB0byBmaXggaXQKLTM6IFVzaW5nIHR3byB0eCBxdWV1ZSB0eGQgYW5kIHR4bSBidXQgbm90IG9ubHkgdHhtLgotNDogU2V0IHRoZSBoZHIgY29ycmVjdGx5LgotNTogVHJ5IHRvIGRvIHJlY2FsaWJyYXRlIGNvcnJldnRseQotNjogVG8gc3VwcG9ydCBHIG1vZGUgaW4gZnV0dXJlCi03OiBGaXggdGhlIG1hYyBhZGRyZXNzIGNhbid0IGJlIHJlYWRlZCBhbmQgc2V0IGNvcnJlY3RseSBpbiBCRSBtYWNoaW5lLgotODogRml4IGluY2x1ZGUgYW5kIGV4Y2x1ZGUgRkNTIGluIHByb21pc291cyBtb2RlIGFuZCBtYW5hZ2UgbW9kZQotOTogVXNpbmcgc3RhX25vdGlmeSB0byBub3RpY2Ugc3RhIGNoYW5nZQotMTA6IFR1cm4gb24gZnJhbWUgcmVjZXB0aW9uIGF0IHRoZSBlbmQgb2Ygc3RhcnQKLTExOiBHdWVzcyB0aGUgY2FyZCBzdXBwb3J0IEhXX01VTFRJQ0FTVF9GSUxURVIKLTEyOiBUaGUgdHggcHJvY2VzcyBzaG91bGQgYmUgaW1wbG1lbnQgYXRvbWljPwotMTM6IFVzaW5nIG1hYzgwMjExIGZ1bmN0aW9uIHRvIGNvbnRyb2wgdGhlIFRYJlJYIExFRC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9hZ254L2FnbnguaCBiL2RyaXZlcnMvc3RhZ2luZy9hZ254L2FnbnguaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzk2M2QyNS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYWdueC9hZ254LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNTYgKzAsMCBAQAotI2lmbmRlZiBBR05YX0hfCi0jZGVmaW5lIEFHTlhfSF8KLQotI2luY2x1ZGUgPGxpbnV4L2lvLmg+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+bGVuKTsgKi8KLQotCWZjdGwgPSBsZTE2X3RvX2NwdSgqKChfX2xlMTYgKilza2ItPmRhdGEpKTsKLQotCWlmICgoZmN0bCAmIElFRUU4MDIxMV9GQ1RMX0ZUWVBFKSA9PSBJRUVFODAyMTFfRlRZUEVfREFUQSkKLQkJcmV0dXJuIF9fYWdueF90eChwcml2LCBza2IsICZwcml2LT50eGQpOwotCWVsc2UKLQkJcmV0dXJuIF9fYWdueF90eChwcml2LCBza2IsICZwcml2LT50eG0pOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2FnbngveG1pdC5oIGIvZHJpdmVycy9zdGFnaW5nL2FnbngveG1pdC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5M2FjNDE1Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9hZ254L3htaXQuaAorKysgL2Rldi9udWxsCkBAIC0xLDI1MCArMCwwIEBACi0jaWZuZGVmIEFHTlhfWE1JVF9IXwotI2RlZmluZSBBR05YX1hNSVRfSF8KLQotI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5oPgotCi1zdHJ1Y3QgYWdueF9wcml2OwotCi1zdGF0aWMgaW5saW5lIHUzMiBhZ254X3NldF9iaXRzKHUzMiBtYXNrLCB1OCBzaGlmdCwgdTMyIHZhbHVlKQotewotCXJldHVybiAodmFsdWUgPDwgc2hpZnQpICYgbWFzazsKLX0KLQotc3RhdGljIGlubGluZSB1MzIgYWdueF9nZXRfYml0cyh1MzIgbWFzaywgdTggc2hpZnQsIHUzMiB2YWx1ZSkKLXsKLQlyZXR1cm4gKHZhbHVlICYgbWFzaykgPj4gc2hpZnQ7Ci19Ci0KLQotc3RydWN0IGFnbnhfcnggewotCV9fYmUxNiByeF9wYWNrZXRfZHVyYXRpb247IC8qICBSWCBQYWNrZXQgRHVyYXRpb24gKi8KLQlfX2JlMTYgcmVwbGF5X2NudDsJLyogUmVwbGF5IENvdW50ICovCi19IF9fYXR0cmlidXRlX18oKF9fcGFja2VkX18pKTsKLQotCi1zdHJ1Y3QgYWdueF90eCB7Ci0JdTggbG9uZ19yZXRyeV9saW1pdDsgLyogTG9uZyBSZXRyeSBMaW1pdCAqLwotCXU4IHNob3J0X3JldHJ5X2xpbWl0OyAvKiBTaG9ydCBSZXRyeSBMaW1pdCAqLwotCXU4IGxvbmdfcmV0cnlfY250OwkvKiBMb25nIFJldHJ5IENvdW50ICovCi0JdTggc2hvcnRfcmV0cnlfY250OyAvKiBTaG9ydCBSZXRyeSBDb3VudCAqLwotfSBfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fKSk7Ci0KLQotLyogQ29weSBmcm9tIGJjbTQzeHggKi8KLSNkZWZpbmUgUDREX0JZVDNTKG1hZ2ljLCBucl9ieXRlcykgICAgICB1OCBfX3A0ZGRpbmcjI21hZ2ljW25yX2J5dGVzXQotI2RlZmluZSBQNERfQllURVMobGluZSwgbnJfYnl0ZXMpICAgICAgIFA0RF9CWVQzUyhsaW5lLCBucl9ieXRlcykKLSNkZWZpbmUgUEFEX0JZVEVTKG5yX2J5dGVzKSAgICAgICAgICAgICBQNERfQllURVMoX19MSU5FX18sIG5yX2J5dGVzKQotCi0jZGVmaW5lIFA0RF9CSVQzUyhtYWdpYywgbnJfYml0cykgICAgICAgX19iZTMyIF9fcGFkZGluZyMjbWFnaWM6bnJfYml0cwotI2RlZmluZSBQNERfQklUUyhsaW5lLCBucl9iaXRzKSAgICAgICAgIFA0RF9CSVQzUyhsaW5lLCBucl9iaXRzKQotI2RlZmluZSBQQURfQklUUyhucl9iaXRzKQkgICAgICAgIFA0RF9CSVRTKF9fTElORV9fLCBucl9iaXRzKQotCi0KLXN0cnVjdCBhZ254X2hkciB7Ci0JX19iZTMyIHJlZzA7Ci0jZGVmaW5lIFJUUwkJICAgICAgICAweDgwMDAwMDAwIC8qIFJUUyAqLwotI2RlZmluZSBSVFNfU0hJRlQJCTMxCi0jZGVmaW5lIE1VTFRJQ0FTVAkgICAgICAgIDB4NDAwMDAwMDAgLyogbXVsdGljYXN0ICovCi0jZGVmaW5lIE1VTFRJQ0FTVF9TSElGVAkJMzAKLSNkZWZpbmUgQUNLCQkJMHgzMDAwMDAwMCAvKiBBQ0sgKi8KLSNkZWZpbmUgQUNLX1NISUZUCQkyOAotI2RlZmluZSBUTQkJCTB4MDgwMDAwMDAgLyogVE0gKi8KLSNkZWZpbmUgVE1fU0hJRlQJCTI3Ci0jZGVmaW5lIFJFTEFZCQkJMHgwNDAwMDAwMCAvKiBSZWxheSAqLwotI2RlZmluZSBSRUxBWV9TSElGVAkJMjYKLS8qIAlQQURfQklUUyg0KTsgKi8KLSNkZWZpbmUgUkVWSVNFRF9GQ1MJCTB4MDAzODAwMDAgLyogcmV2aXNlZCBGQ1MgKi8KLSNkZWZpbmUgUkVWSVNFRF9GQ1NfU0hJRlQJMTkKLSNkZWZpbmUgTkVYVF9CVUZGRVJfQUREUgkweDAwMDdGRkZGIC8qIE5leHQgQnVmZmVyIEFkZHJlc3MgKi8KLSNkZWZpbmUgTkVYVF9CVUZGRVJfQUREUl9TSElGVAkwCi0KLQlfX2JlMzIgcmVnMTsKLSNkZWZpbmUgTUFDX0hEUl9MRU4JCTB4RkMwMDAwMDAgLyogTUFDIEhlYWRlciBMZW5ndGggICovCi0jZGVmaW5lIE1BQ19IRFJfTEVOX1NISUZUCTI2Ci0jZGVmaW5lIERVUkFUSU9OX09WRVJJREUJMHgwMjAwMDAwMCAvKiBEdXJhdGlvbiBPdmVycmlkZSAqLwotI2RlZmluZSBEVVJBVElPTl9PVkVSSURFX1NISUZUCTI1Ci0jZGVmaW5lIFBIWV9IRFJfT1ZFUklERQkJMHgwMTAwMDAwMCAvKiBQSFkgSGVhZGVyIE92ZXJyaWRlICovCi0jZGVmaW5lIFBIWV9IRFJfT1ZFUklERV9TSElGVAkyNAotI2RlZmluZSBDUkNfRkFJTAkJMHgwMDgwMDAwMCAvKiBDUkMgZmFpbCAqLwotI2RlZmluZSBDUkNfRkFJTF9TSElGVAkJMjMKLS8qCVBBRF9CSVRTKDEpOyAqLwotI2RlZmluZSBTRVFVRU5DRV9OVU1CRVIJCTB4MDAyMDAwMDAgLyogU2VxdWVuY2UgTnVtYmVyICovCi0jZGVmaW5lIFNFUVVFTkNFX05VTUJFUl9TSElGVAkyMQotLyoJUEFEX0JJVFMoMik7ICovCi0jZGVmaW5lIEJVRkZfSEVBRF9BRERSCQkweDAwMDdGRkZGIC8qIEJ1ZmZlciBIZWFkIEFkZHJlc3MgKi8KLSNkZWZpbmUgQlVGRl9IRUFEX0FERFJfU0hJRlQJMAotCi0JX19iZTMyIHJlZzI7Ci0jZGVmaW5lIFBEVV9DT1VOVAkJMHhGQzAwMDAwMCAvKiBQRFUgQ291bnQgKi8KLSNkZWZpbmUgUERVX0NPVU5UX1NISUZUCQkyNgotLyogCVBBRF9CSVRTKDMpOyAqLwotI2RlZmluZSBXRVBfS0VZCQkJMHgwMDYwMDAwMCAvKiBXRVAgS2V5ICMgKi8KLSNkZWZpbmUgV0VQX0tFWV9TSElGVAkJMjEKLSNkZWZpbmUgVVNFU19XRVBfS0VZCQkweDAwMTAwMDAwIC8qIFVzZXMgV0VQIEtleSAqLwotI2RlZmluZSBVU0VTX1dFUF9LRVlfU0hJRlQJMjAKLSNkZWZpbmUgS0VFUF9BTElWRQkJMHgwMDA4MDAwMCAvKiBLZWVwIGFsaXZlICovCi0jZGVmaW5lIEtFRVBfQUxJVkVfU0hJRlQJMTkKLSNkZWZpbmUgQlVGRl9UQUlMX0FERFIJCTB4MDAwN0ZGRkYgLyogQnVmZmVyIFRhaWwgQWRkcmVzcyAqLwotI2RlZmluZSBCVUZGX1RBSUxfQUREUl9TSElGVAkwCi0KLQlfX2JlMzIgcmVnMzsKLSNkZWZpbmUgQ1RTXzExRwkJCTB4ODAwMDAwMDAJLyogQ1RTIGluIDExZyAqLwotI2RlZmluZSBDVFNfMTFHX1NISUZUCQkzMQotI2RlZmluZSBSVFNfMTFHCQkJMHg0MDAwMDAwMAkvKiBSVFMgaW4gMTFnICovCi0jZGVmaW5lIFJUU18xMUdfU0hJRlQJCTMwCi0vKiBQQURfQklUUygyKTsgKi8KLSNkZWZpbmUgRlJBR19TSVpFCQkweDBGRkYwMDAwCS8qIGZyYWdtZW50IHNpemUgKi8KLSNkZWZpbmUgRlJBR19TSVpFX1NISUZUCQkxNgotI2RlZmluZSBQQVlMT0FEX0xFTgkJMHgwMDAwRkZGMAkvKiBwYXlsb2FkIGxlbmd0aCAqLwotI2RlZmluZSBQQVlMT0FEX0xFTl9TSElGVAk0Ci0jZGVmaW5lIEZSQUdfTlVNCQkweDAwMDAwMDBGCS8qIG51bWJlciBvZiBmcmFncyAqLwotI2RlZmluZSBGUkFHX05VTV9TSElGVAkJMAotCi0JX19iZTMyIHJlZzQ7Ci0vKiAJUEFEX0JJVFMoNCk7ICovCi0jZGVmaW5lIFJFTEFZX1NUQUlECQkweDBGRkYwMDAwIC8qIHJlbGF5U3RhbGQgKi8KLSNkZWZpbmUgUkVMQVlfU1RBSURfU0hJRlQJMTYKLSNkZWZpbmUgU1RBVElPTl9JRAkJMHgwMDAwRkZGMCAvKiBTdGF0aW9uIElEICovCi0jZGVmaW5lIFNUQVRJT05fSURfU0hJRlQJNAotI2RlZmluZSBXT1JLUVVFVUVfSUQJCTB4MDAwMDAwMEYgLyogV29ya3F1ZXVlIElEICovCi0jZGVmaW5lIFdPUktRVUVVRV9JRF9TSElGVAkwCi0KLQkvKiBGSVhNRSB0aGlzIHJlZ2lzdGVyIG1heWJlIGlzIExFPyAqLwotCV9fYmUzMiByZWc1OwotLyogCVBBRF9CSVRTKDQpOyAqLwotI2RlZmluZSBST1VURV9IT1NUCQkweDBGMDAwMDAwCi0jZGVmaW5lIFJPVVRFX0hPU1RfU0hJRlQJMjQKLSNkZWZpbmUgUk9VVEVfQ0FSRF9DUFUJCTB4MDBGMDAwMDAKLSNkZWZpbmUgUk9VVEVfQ0FSRF9DUFVfU0hJRlQJMjAKLSNkZWZpbmUgUk9VVEVfRU5DUllQVElPTgkweDAwMEYwMDAwCi0jZGVmaW5lIFJPVVRFX0VOQ1JZUFRJT05fU0hJRlQJMTYKLSNkZWZpbmUgUk9VVEVfVFgJCTB4MDAwMEYwMDAKLSNkZWZpbmUgUk9VVEVfVFhfU0hJRlQJCTEyCi0jZGVmaW5lIFJPVVRFX1JYMQkJMHgwMDAwMEYwMAotI2RlZmluZSBST1VURV9SWDFfU0hJRlQJCTgKLSNkZWZpbmUgUk9VVEVfUlgyCQkweDAwMDAwMEYwCi0jZGVmaW5lIFJPVVRFX1JYMl9TSElGVAkJNAotI2RlZmluZSBST1VURV9DT01QUkVTU0lPTgkweDAwMDAwMDBGCi0jZGVmaW5lIFJPVVRFX0NPTVBSRVNTSU9OX1NISUZUIDAKLQotCV9fYmUzMiBfMTFnMDsJCQkvKiAxMWcgKi8KLQlfX2JlMzIgXzExZzE7CQkJLyogMTFnICovCi0JX19iZTMyIF8xMWIwOwkJCS8qIDExYiAqLwotCV9fYmUzMiBfMTFiMTsJCQkvKiAxMWIgKi8KLQl1OCBtYWNfaGRyWzMyXTsJCQkvKiBNQUMgaGVhZGVyICovCi0KLQlfX2JlMTYgcnRzX2R1cmF0aW9uOwkJLyogUlRTIGR1cmF0aW9uICovCi0JX19iZTE2IGxhc3RfZHVyYXRpb247CQkvKiBMYXN0IGR1cmF0aW9uICovCi0JX19iZTE2IHNlY19sYXN0X2R1cmF0aW9uOwkvKiBTZWNvbmQgdG8gTGFzdCBkdXJhdGlvbiAqLwotCV9fYmUxNiBvdGhlcl9kdXJhdGlvbjsJCS8qIE90aGVyIGR1cmF0aW9uICovCi0JX19iZTE2IHR4X2xhc3RfZHVyYXRpb247CS8qIFRYIExhc3QgZHVyYXRpb24gKi8KLQlfX2JlMTYgdHhfb3RoZXJfZHVyYXRpb247CS8qIFRYIE90aGVyIER1cmF0aW9uICovCi0JX19iZTE2IGxhc3RfMTFnX2xlbjsJCS8qIExlbmd0aCBvZiBsYXN0IDExZyAqLwotCV9fYmUxNiBvdGhlcl8xMWdfbGVuOwkJLyogTGVuZ2h0IG9mIG90aGVyIDExZyAqLwotCi0JX19iZTE2IGxhc3RfMTFiX2xlbjsJCS8qIExlbmd0aCBvZiBsYXN0IDExYiAqLwotCV9fYmUxNiBvdGhlcl8xMWJfbGVuOwkJLyogTGVuZ2h0IG9mIG90aGVyIDExYiAqLwotCi0KLQlfX2JlMTYgcmVnNjsKLSNkZWZpbmUgTUJGCQkJMHhGMDAwIC8qIG1iZiAqLwotI2RlZmluZSBNQkZfU0hJRlQJCTEyCi0jZGVmaW5lIFJTVkQ0CQkJMHgwRkZGIC8qIHJzdmQ0ICovCi0jZGVmaW5lIFJTVkQ0X1NISUZUCQkwCi0KLQlfX2JlMTYgcnhfZnJhZ19zdGF0OwkvKiBSWCBmcmFnbWVudGF0aW9uIHN0YXR1cyAqLwotCi0JX19iZTMyIHRpbWVfc3RhbXA7CS8qIFRpbWVTdGFtcCAqLwotCV9fYmUzMiBwaHlfc3RhdHNfaGk7CS8qIFBIWSBzdGF0cyBoaSAqLwotCV9fYmUzMiBwaHlfc3RhdHNfbG87CS8qIFBIWSBzdGF0cyBsbyAqLwotCV9fYmUzMiBtaWNfa2V5MDsJLyogTUlDIGtleSAwICovCi0JX19iZTMyIG1pY19rZXkxOwkvKiBNSUMga2V5IDEgKi8KLQotCXVuaW9uIHsJCQkvKiBSWC9UWCBVbmlvbiAqLwotCQlzdHJ1Y3QgYWdueF9yeCByeDsKLQkJc3RydWN0IGFnbnhfdHggdHg7Ci0JfTsKLQotCXU4IHJ4X2NoYW5uZWw7CQkvKiBSZWNpZXZlIENoYW5uZWwgKi8KLQlQQURfQllURVMoMyk7Ci0KLQl1OCByZXNlcnZlZFs0XTsKLX0gX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXykpOwotCi0KLXN0cnVjdCBhZ254X2Rlc2MgewotI2RlZmluZSBQQUNLRVRfTEVOCQkweEZGRjAwMDAwCi0jZGVmaW5lIFBBQ0tFVF9MRU5fU0hJRlQJMjAKLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotI2RlZmluZSBGSVJTVF9QQUNLRVRfTUFTSwkweDAwMDgwMDAwCi0jZGVmaW5lIEZJUlNUX1BBQ0tFVF9NQVNLX1NISUZUCTE5Ci0jZGVmaW5lIEZJUlNUX1JFU0VSVjIJCTB4MDAwNDAwMDAKLSNkZWZpbmUgRklSU1RfUkVTRVJWMl9TSElGVAkxOAotI2RlZmluZSBGSVJTVF9US0lQX0VSUk9SCTB4MDAwMjAwMDAKLSNkZWZpbmUgRklSU1RfVEtJUF9FUlJPUl9TSElGVAkxNwotI2RlZmluZSBGSVJTVF9US0lQX1BBQ0tFVAkweDAwMDEwMDAwCi0jZGVmaW5lIEZJUlNUX1RLSVBfUEFDS0VUX1NISUZUCTE2Ci0jZGVmaW5lIEZJUlNUX1JFU0VSVjEJCTB4MDAwMEYwMDAKLSNkZWZpbmUgRklSU1RfUkVTRVJWMV9TSElGVAkxMgotI2RlZmluZSBGSVJTVF9GUkFHX0xFTgkJMHgwMDAwMEZGOAotI2RlZmluZSBGSVJTVF9GUkFHX0xFTl9TSElGVAkzCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLSNkZWZpbmUgU1VCX1JFU0VSVjIJCTB4MDAwYzAwMDAKLSNkZWZpbmUgU1VCX1JFU0VSVjJfU0hJRlQJMTgKLSNkZWZpbmUgU1VCX1RLSVBfRVJST1IJCTB4MDAwMjAwMDAKLSNkZWZpbmUgU1VCX1RLSVBfRVJST1JfU0hJRlQJMTcKLSNkZWZpbmUgU1VCX1RLSVBfUEFDS0VUCQkweDAwMDEwMDAwCi0jZGVmaW5lIFNVQl9US0lQX1BBQ0tFVF9TSElGVAkxNgotI2RlZmluZSBTVUJfUkVTRVJWMQkJMHgwMDAwODAwMAotI2RlZmluZSBTVUJfUkVTRVJWMV9TSElGVAkxNQotI2RlZmluZSBTVUJfRlJBR19MRU4JCTB4MDAwMDdGRjgKLSNkZWZpbmUgU1VCX0ZSQUdfTEVOX1NISUZUCTMKLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotI2RlZmluZSBGSVJTVF9GUkFHCQkweDAwMDAwMDA0Ci0jZGVmaW5lIEZJUlNUX0ZSQUdfU0hJRlQJMgotI2RlZmluZSBMQVNUX0ZSQUcJCTB4MDAwMDAwMDIKLSNkZWZpbmUgTEFTVF9GUkFHX1NISUZUCQkxCi0jZGVmaW5lIE9XTkVSCQkJMHgwMDAwMDAwMQotI2RlZmluZSBPV05FUl9TSElGVAkJMAotCV9fYmUzMiBmcmFnOwotCV9fYmUzMiBkbWFfYWRkcjsKLX0gX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXykpOwotCi1lbnVtIHtIRUFERVIsIFBBQ0tFVH07Ci0KLXN0cnVjdCBhZ254X2luZm8gewotICAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotICAgICAgICBkbWFfYWRkcl90IG1hcHBpbmc7Ci0JdTMyIGRtYV9sZW47CQkvKiBkbWEgYnVmZmVyIGxlbiAgKi8KLQkvKiBCZWxvdyBmaWVsZHMgb25seSB1c2Z1bCBmb3IgdHggKi8KLQl1MzIgaGRyX2xlbjsJCS8qIGllZWU4MDIxMSBoZWFkZXIgbGVuZ3RoICovCi0JdW5zaWduZWQgaW50IHR5cGU7Ci0gICAgICAgIHN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqdHhpOwotICAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2hkciBoZHI7Ci19OwotCi0KLXN0cnVjdCBhZ254X3JpbmcgewotCXN0cnVjdCBhZ254X2Rlc2MgKmRlc2M7Ci0JZG1hX2FkZHJfdCBkbWE7Ci0Jc3RydWN0IGFnbnhfaW5mbyAqaW5mbzsKLQkvKiBXaWxsIGxlYWQgdG8gb3ZlcmZsb3cgd2hlbiBzZW50IHBhY2tldCBudW1iZXIgZW5vdWdoPyAqLwotCXVuc2lnbmVkIGludCBpZHg7Ci0JdW5zaWduZWQgaW50IGlkeF9zZW50OwkJLyogb25seSB1c2Z1bCBmb3IgdHhkIGFuZCB0eG0gKi8KLQl1bnNpZ25lZCBpbnQgc2l6ZTsKLX07Ci0KLSNkZWZpbmUgQUdOWF9SWF9SSU5HX1NJWkUJMTI4Ci0jZGVmaW5lIEFHTlhfVFhEX1JJTkdfU0laRQkyNTYKLSNkZWZpbmUgQUdOWF9UWE1fUklOR19TSVpFCTEyOAotCi12b2lkIGRpc2FibGVfcnhfaW50ZXJydXB0KHN0cnVjdCBhZ254X3ByaXYgKnByaXYpOwotdm9pZCBlbmFibGVfcnhfaW50ZXJydXB0KHN0cnVjdCBhZ254X3ByaXYgKnByaXYpOwotaW50IGZpbGxfcmluZ3Moc3RydWN0IGFnbnhfcHJpdiAqcHJpdik7Ci12b2lkIHVuZmlsbF9yaW5ncyhzdHJ1Y3QgYWdueF9wcml2ICpwcml2KTsKLXZvaWQgaGFuZGxlX3J4X2lycShzdHJ1Y3QgYWdueF9wcml2ICpwcml2KTsKLXZvaWQgaGFuZGxlX3R4ZF9pcnEoc3RydWN0IGFnbnhfcHJpdiAqcHJpdik7Ci12b2lkIGhhbmRsZV90eG1faXJxKHN0cnVjdCBhZ254X3ByaXYgKnByaXYpOwotdm9pZCBoYW5kbGVfb3RoZXJfaXJxKHN0cnVjdCBhZ254X3ByaXYgKnByaXYpOwotaW50IF9hZ254X3R4KHN0cnVjdCBhZ254X3ByaXYgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IpOwotI2VuZGlmIC8qIEFHTlhfWE1JVF9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2FuZHJvaWQvS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy9hbmRyb2lkL0tjb25maWcKaW5kZXggMjQ3MTk0OS4uZWI2NzU2MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2FuZHJvaWQvS2NvbmZpZworKysgYi9kcml2ZXJzL3N0YWdpbmcvYW5kcm9pZC9LY29uZmlnCkBAIC0yLDYgKzIsNyBAQAogCiBjb25maWcgQU5EUk9JRAogCWJvb2wgIkFuZHJvaWQgRHJpdmVycyIKKwlkZXBlbmRzIG9uIEJST0tFTgogCWRlZmF1bHQgTgogCS0tLWhlbHAtLS0KIAkgIEVuYWJsZSBzdXBwb3J0IGZvciB2YXJpb3VzIGRyaXZlcnMgbmVlZGVkIG9uIHRoZSBBbmRyb2lkIHBsYXRmb3JtCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYjNkZmcvYjNkZmcuYyBiL2RyaXZlcnMvc3RhZ2luZy9iM2RmZy9iM2RmZy5jCmluZGV4IDk0YzVkMjcuLmNkYTI2YmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9iM2RmZy9iM2RmZy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9iM2RmZy9iM2RmZy5jCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSA8bGludXgvd2FpdC5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgYjNkZmdfbmJ1ZiA9IDI7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvS2NvbmZpZwppbmRleCBhZjcyM2NiLi5kNjNjODg5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL0tjb25maWcKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9LY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogY29uZmlnIENPTUVESQogCXRyaXN0YXRlICJEYXRhIGFjcXVpc2l0aW9uIHN1cHBvcnQgKGNvbWVkaSkiCiAJZGVmYXVsdCBOCi0JZGVwZW5kcyBvbiBtCisJZGVwZW5kcyBvbiBtICYmIChQQ0kgfHwgUENNQ0lBIHx8IFBDQ0FSRCB8fCBVU0IpCiAJLS0taGVscC0tLQogCSAgRW5hYmxlIHN1cHBvcnQgYSB3aWRlIHJhbmdlIG9mIGRhdGEgYWNxdWlzaXRpb24gZGV2aWNlcwogCSAgZm9yIExpbnV4LgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9jb21lZGlfZm9wcy5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9jb21lZGlfZm9wcy5jCmluZGV4IGY1NGJiOWIuLmFhYWQ3NmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvY29tZWRpX2ZvcHMuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2NvbWVkaV9mb3BzLmMKQEAgLTIzMzcsNyArMjMzNyw3IEBACiAJfQogCiAJRFBSSU5USygiY29tZWRpJWkgc3ViZCAlZCBidWZmZXIgcmVzaXplZCB0byAlaSBieXRlc1xuIiwKLQkJZGV2LT5taW5vciwgcyAtIGRldi0+c3ViZGV2aWNlcywgYXN5bmMtPnByZWFsbG9jX2J1ZnN6KTsKKwkJZGV2LT5taW5vciwgKGludCkocyAtIGRldi0+c3ViZGV2aWNlcyksIGFzeW5jLT5wcmVhbGxvY19idWZzeik7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9jYl9kYXMxNl9jcy5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NiX2RhczE2X2NzLmMKaW5kZXggMTJkMTJiNC4uODBjMGRmOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NiX2RhczE2X2NzLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NiX2RhczE2X2NzLmMKQEAgLTc0NCw3ICs3NDQsNyBAQAogCiAJLyogSW5pdGlhbGl6ZSB0aGUgcGNtY2lhX2RldmljZSBzdHJ1Y3R1cmUgKi8KIAkvKiBJbnRlcnJ1cHQgc2V0dXAgKi8KLQlsaW5rLT5pcnEuQXR0cmlidXRlcyA9IElSUV9UWVBFX0VYQ0xVU0lWRTsKKwlsaW5rLT5pcnEuQXR0cmlidXRlcyA9IElSUV9UWVBFX0RZTkFNSUNfU0hBUklORzsKIAlsaW5rLT5pcnEuSVJRSW5mbzEgPSBJUlFfTEVWRUxfSUQ7CiAJbGluay0+aXJxLkhhbmRsZXIgPSBOVUxMOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvY2JfcGNpZGlvLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvY2JfcGNpZGlvLmMKaW5kZXggNGQxMGJjMy4uMDllNmUzYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NiX3BjaWRpby5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9jYl9wY2lkaW8uYwpAQCAtNTMsNyArNTMsOCBAQAogICogU29tZSBkcml2ZXJzIHVzZSBhcnJheXMgc3VjaCBhcyB0aGlzLCBvdGhlciBkbyBub3QuCiAgKi8KIHN0cnVjdCBwY2lkaW9fYm9hcmQgewotCWNvbnN0IGNoYXIgKm5hbWU7CS8qICBhbm1lIG9mIHRoZSBib2FyZCAqLworCWNvbnN0IGNoYXIgKm5hbWU7CS8qICBuYW1lIG9mIHRoZSBib2FyZCAqLworCWludCBkZXZfaWQ7CiAJaW50IG5fODI1NTsJCS8qICBudW1iZXIgb2YgODI1NSBjaGlwcyBvbiBib2FyZCAqLwogCiAJLyogIGluZGljZXMgb2YgYmFzZSBhZGRyZXNzIHJlZ2lvbnMgKi8KQEAgLTY0LDE4ICs2NSwyMSBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lkaW9fYm9hcmQgcGNpZGlvX2JvYXJkc1tdID0gewogCXsKIAkgLm5hbWUgPSAicGNpLWRpbzI0IiwKKwkgLmRldl9pZCA9IDB4MDAyOCwKIAkgLm5fODI1NSA9IDEsCiAJIC5wY2ljb250cm9sZXJfYmFkcmluZGV4ID0gMSwKIAkgLmRpb3JlZ3NfYmFkcmluZGV4ID0gMiwKIAkgfSwKIAl7CiAJIC5uYW1lID0gInBjaS1kaW8yNGgiLAorCSAuZGV2X2lkID0gMHgwMDE0LAogCSAubl84MjU1ID0gMSwKIAkgLnBjaWNvbnRyb2xlcl9iYWRyaW5kZXggPSAxLAogCSAuZGlvcmVnc19iYWRyaW5kZXggPSAyLAogCSB9LAogCXsKIAkgLm5hbWUgPSAicGNpLWRpbzQ4aCIsCisJIC5kZXZfaWQgPSAweDAwMGIsCiAJIC5uXzgyNTUgPSAyLAogCSAucGNpY29udHJvbGVyX2JhZHJpbmRleCA9IDAsCiAJIC5kaW9yZWdzX2JhZHJpbmRleCA9IDEsCkBAIC0yMDYsNyArMjEwLDcgQEAKIAkJCWNvbnRpbnVlOwogCQkvKiAgbG9vcCB0aHJvdWdoIGNhcmRzIHN1cHBvcnRlZCBieSB0aGlzIGRyaXZlciAqLwogCQlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBBUlJBWV9TSVpFKHBjaWRpb19ib2FyZHMpOyBpbmRleCsrKSB7Ci0JCQlpZiAocGNpZGlvX3BjaV90YWJsZVtpbmRleF0uZGV2aWNlICE9IHBjaWRldi0+ZGV2aWNlKQorCQkJaWYgKHBjaWRpb19ib2FyZHNbaW5kZXhdLmRldl9pZCAhPSBwY2lkZXYtPmRldmljZSkKIAkJCQljb250aW51ZTsKIAogCQkJLyogIHdhcyBhIHBhcnRpY3VsYXIgYnVzL3Nsb3QgcmVxdWVzdGVkPyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2pyM19wY2kuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9qcjNfcGNpLmMKaW5kZXggMTRiZjI5Yi4uMGQyYzJlYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2pyM19wY2kuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvanIzX3BjaS5jCkBAIC01MTUsNiArNTE1LDcgQEAKIHsKIAlzdHJ1Y3QgcG9sbF9kZWxheV90IHJlc3VsdCA9IHBvbGxfZGVsYXlfbWluX21heCgxMDAwLCAyMDAwKTsKIAlzdHJ1Y3QganIzX3BjaV9zdWJkZXZfcHJpdmF0ZSAqcCA9IHMtPnByaXZhdGU7CisJaW50IGk7CiAKIAlpZiAocCkgewogCQl2b2xhdGlsZSBzdHJ1Y3QganIzX2NoYW5uZWwgKmNoYW5uZWwgPSBwLT5jaGFubmVsOwpAQCAtNTcwLDE4ICs1NzEsMTEgQEAKIAkJCQkJICAgICAgIHAtPnNlcmlhbF9ubyk7CiAKIAkJCQkJLyogIFRyYW5zZm9ybWF0aW9uIGFsbCB6ZXJvcyAqLwotCQkJCQl0cmFuc2YubGlua1swXS5saW5rX3R5cGUgPQotCQkJCQkgICAgKGVudW0gbGlua190eXBlcykwOwotCQkJCQl0cmFuc2YubGlua1swXS5saW5rX2Ftb3VudCA9IDA7Ci0JCQkJCXRyYW5zZi5saW5rWzFdLmxpbmtfdHlwZSA9Ci0JCQkJCSAgICAoZW51bSBsaW5rX3R5cGVzKTA7Ci0JCQkJCXRyYW5zZi5saW5rWzFdLmxpbmtfYW1vdW50ID0gMDsKLQkJCQkJdHJhbnNmLmxpbmtbMl0ubGlua190eXBlID0KLQkJCQkJICAgIChlbnVtIGxpbmtfdHlwZXMpMDsKLQkJCQkJdHJhbnNmLmxpbmtbMl0ubGlua19hbW91bnQgPSAwOwotCQkJCQl0cmFuc2YubGlua1szXS5saW5rX3R5cGUgPQotCQkJCQkgICAgKGVudW0gbGlua190eXBlcykwOwotCQkJCQl0cmFuc2YubGlua1szXS5saW5rX2Ftb3VudCA9IDA7CisJCQkJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHRyYW5zZi5saW5rKTsgaSsrKSB7CisJCQkJCQl0cmFuc2YubGlua1tpXS5saW5rX3R5cGUgPQorCQkJCQkJCShlbnVtIGxpbmtfdHlwZXMpMDsKKwkJCQkJCXRyYW5zZi5saW5rW2ldLmxpbmtfYW1vdW50ID0gMDsKKwkJCQkJfQogCiAJCQkJCXNldF90cmFuc2Zvcm1zKGNoYW5uZWwsIHRyYW5zZiwgMCk7CiAJCQkJCXVzZV90cmFuc2Zvcm0oY2hhbm5lbCwgMCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbWVfZGFxLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbWVfZGFxLmMKaW5kZXggMmNkYTdhZC4uODBlMTkyZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL21lX2RhcS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9tZV9kYXEuYwpAQCAtNTEsNiArNTEsNyBAQAogKi8KIAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSAiLi4vY29tZWRpZGV2LmgiCiAKICNpbmNsdWRlICJjb21lZGlfcGNpLmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfNjV4eC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pXzY1eHguYwppbmRleCA2YjExOGMxLi5iYmY3NWViIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfNjV4eC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV82NXh4LmMKQEAgLTQxOCwxNSArNDE4LDE1IEBACiAJCXJldHVybiAtRUlOVkFMOwogCWJhc2VfYml0ZmllbGRfY2hhbm5lbCA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOwogCWZvciAoaiA9IDA7IGogPCBtYXhfcG9ydHNfcGVyX2JpdGZpZWxkOyArK2opIHsKKwkJY29uc3QgdW5zaWduZWQgcG9ydF9vZmZzZXQgPSBuaV82NXh4X3BvcnRfYnlfY2hhbm5lbChiYXNlX2JpdGZpZWxkX2NoYW5uZWwpICsgajsKIAkJY29uc3QgdW5zaWduZWQgcG9ydCA9Ci0JCSAgICBzcHJpdmF0ZShzKS0+YmFzZV9wb3J0ICsKLQkJICAgIG5pXzY1eHhfcG9ydF9ieV9jaGFubmVsKGJhc2VfYml0ZmllbGRfY2hhbm5lbCkgKyBqOworCQkgICAgc3ByaXZhdGUocyktPmJhc2VfcG9ydCArIHBvcnRfb2Zmc2V0OwogCQl1bnNpZ25lZCBiYXNlX3BvcnRfY2hhbm5lbDsKIAkJdW5zaWduZWQgcG9ydF9tYXNrLCBwb3J0X2RhdGEsIHBvcnRfcmVhZF9iaXRzOwogCQlpbnQgYml0c2hpZnQ7CiAJCWlmIChwb3J0ID49IG5pXzY1eHhfdG90YWxfbnVtX3BvcnRzKGJvYXJkKGRldikpKQogCQkJYnJlYWs7Ci0JCWJhc2VfcG9ydF9jaGFubmVsID0gcG9ydCAqIG5pXzY1eHhfY2hhbm5lbHNfcGVyX3BvcnQ7CisJCWJhc2VfcG9ydF9jaGFubmVsID0gcG9ydF9vZmZzZXQgKiBuaV82NXh4X2NoYW5uZWxzX3Blcl9wb3J0OwogCQlwb3J0X21hc2sgPSBkYXRhWzBdOwogCQlwb3J0X2RhdGEgPSBkYXRhWzFdOwogCQliaXRzaGlmdCA9IGJhc2VfcG9ydF9jaGFubmVsIC0gYmFzZV9iaXRmaWVsZF9jaGFubmVsOwpAQCAtNDU3LDYgKzQ1NywxMiBAQAogCQlwb3J0X3JlYWRfYml0cyA9CiAJCSAgICByZWFkYihwcml2YXRlKGRldiktPm1pdGUtPmRhcV9pb19hZGRyICsgUG9ydF9EYXRhKHBvcnQpKTsKIC8qIHByaW50aygicmVhZCAweCV4IGZyb20gcG9ydCAlaVxuIiwgcG9ydF9yZWFkX2JpdHMsIHBvcnQpOyAqLworCQlpZiAocy0+dHlwZSA9PSBDT01FRElfU1VCRF9ETyAmJiBib2FyZChkZXYpLT5pbnZlcnRfb3V0cHV0cykgeworCQkJLyogT3V0cHV0cyBpbnZlcnRlZCwgc28gaW52ZXJ0IHZhbHVlIHJlYWQgYmFjayBmcm9tCisJCQkgKiBETyBzdWJkZXZpY2UuICAoRG9lcyBub3QgYXBwbHkgdG8gYm9hcmRzIHdpdGggRElPCisJCQkgKiBzdWJkZXZpY2UuKSAqLworCQkJcG9ydF9yZWFkX2JpdHMgXj0gMHhGRjsKKwkJfQogCQlpZiAoYml0c2hpZnQgPiAwKSB7CiAJCQlwb3J0X3JlYWRfYml0cyA8PD0gYml0c2hpZnQ7CiAJCX0gZWxzZSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfZGFxXzcwMC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX2RhcV83MDAuYwppbmRleCA2YTc3OTc2Li5lYzMxYTM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfZGFxXzcwMC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9kYXFfNzAwLmMKQEAgLTUyMCw3ICs1MjAsNyBAQAogCWxpbmstPnByaXYgPSBsb2NhbDsKIAogCS8qIEludGVycnVwdCBzZXR1cCAqLwotCWxpbmstPmlycS5BdHRyaWJ1dGVzID0gSVJRX1RZUEVfRVhDTFVTSVZFOworCWxpbmstPmlycS5BdHRyaWJ1dGVzID0gSVJRX1RZUEVfRFlOQU1JQ19TSEFSSU5HOwogCWxpbmstPmlycS5JUlFJbmZvMSA9IElSUV9MRVZFTF9JRDsKIAlsaW5rLT5pcnEuSGFuZGxlciA9IE5VTEw7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9kYXFfZGlvMjQuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9kYXFfZGlvMjQuYwppbmRleCBiMDZlODFjLi4wNzAwYThiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfZGFxX2RpbzI0LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX2RhcV9kaW8yNC5jCkBAIC0yNzEsNyArMjcxLDcgQEAKIAlsaW5rLT5wcml2ID0gbG9jYWw7CiAKIAkvKiBJbnRlcnJ1cHQgc2V0dXAgKi8KLQlsaW5rLT5pcnEuQXR0cmlidXRlcyA9IElSUV9UWVBFX0VYQ0xVU0lWRTsKKwlsaW5rLT5pcnEuQXR0cmlidXRlcyA9IElSUV9UWVBFX0RZTkFNSUNfU0hBUklORzsKIAlsaW5rLT5pcnEuSVJRSW5mbzEgPSBJUlFfTEVWRUxfSUQ7CiAJbGluay0+aXJxLkhhbmRsZXIgPSBOVUxMOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfbGFicGNfY3MuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9sYWJwY19jcy5jCmluZGV4IDU3YWVjZmEuLmEzMDUzYjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9sYWJwY19jcy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9sYWJwY19jcy5jCkBAIC0yNDYsNyArMjQ2LDcgQEAKIAlsaW5rLT5wcml2ID0gbG9jYWw7CiAKIAkvKiBJbnRlcnJ1cHQgc2V0dXAgKi8KLQlsaW5rLT5pcnEuQXR0cmlidXRlcyA9IElSUV9UWVBFX0VYQ0xVU0lWRSB8IElSUV9GT1JDRURfUFVMU0U7CisJbGluay0+aXJxLkF0dHJpYnV0ZXMgPSBJUlFfVFlQRV9EWU5BTUlDX1NIQVJJTkcgfCBJUlFfRk9SQ0VEX1BVTFNFOwogCWxpbmstPmlycS5JUlFJbmZvMSA9IElSUV9JTkZPMl9WQUxJRCB8IElSUV9QVUxTRV9JRDsKIAlsaW5rLT5pcnEuSGFuZGxlciA9IE5VTEw7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9taW9fY29tbW9uLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfbWlvX2NvbW1vbi5jCmluZGV4IGUzZmZiMDYuLjc1M2VlMDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9taW9fY29tbW9uLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX21pb19jb21tb24uYwpAQCAtNjIsNiArNjIsNyBAQAogLyogI2RlZmluZSBERUJVR19TVEFUVVNfQiAqLwogCiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlICI4MjU1LmgiCiAjaW5jbHVkZSAibWl0ZS5oIgogI2luY2x1ZGUgImNvbWVkaV9mYy5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX21pb19jcy5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX21pb19jcy5jCmluZGV4IGI3MzIyOTYuLjlhZWY4N2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9taW9fY3MuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfbWlvX2NzLmMKQEAgLTI3Myw3ICsyNzMsNyBAQAogewogCWxpbmstPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIXzE2OwogCWxpbmstPmlvLk51bVBvcnRzMSA9IDE2OwotCWxpbmstPmlycS5BdHRyaWJ1dGVzID0gSVJRX1RZUEVfRVhDTFVTSVZFOworCWxpbmstPmlycS5BdHRyaWJ1dGVzID0gSVJRX1RZUEVfRFlOQU1JQ19TSEFSSU5HOwogCWxpbmstPmlycS5JUlFJbmZvMSA9IElSUV9MRVZFTF9JRDsKIAlsaW5rLT5jb25mLkF0dHJpYnV0ZXMgPSBDT05GX0VOQUJMRV9JUlE7CiAJbGluay0+Y29uZi5JbnRUeXBlID0gSU5UX01FTU9SWV9BTkRfSU87CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfcGNpZGlvLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfcGNpZGlvLmMKaW5kZXggNTJiMmVjYS4uZDU0NDY5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX3BjaWRpby5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9wY2lkaW8uYwpAQCAtNzAsNiArNzAsNyBAQAogLyogI2RlZmluZSBERUJVR19GTEFHUyAqLwogCiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlICIuLi9jb21lZGlkZXYuaCIKIAogI2luY2x1ZGUgIm1pdGUuaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9wY2ltaW8uYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9wY2ltaW8uYwppbmRleCAxOWQ4NzU1Li4yNGM4YjhlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfcGNpbWlvLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX3BjaW1pby5jCkBAIC0yOSw3ICsyOSw3IEBACiAgIFBDSS1NSU8tMTZYRS0xMCwgUFhJLTYwMzBFLCBQQ0ktTUlPLTE2RS0xLCBQQ0ktTUlPLTE2RS00LCBQQ0ktNjAxNCwgUENJLTYwNDBFLAogICBQWEktNjA0MEUsIFBDSS02MDMwRSwgUENJLTYwMzFFLCBQQ0ktNjAzMkUsIFBDSS02MDMzRSwgUENJLTYwNzFFLCBQQ0ktNjAyM0UsCiAgIFBDSS02MDI0RSwgUENJLTYwMjVFLCBQWEktNjAyNUUsIFBDSS02MDM0RSwgUENJLTYwMzVFLCBQQ0ktNjA1MkUsCi0gIFBDSS02MTEwLCBQQ0ktNjExMSwgUENJLTYyMjAsIFBDSS02MjIxLCBQQ0ktNjIyNCwgUFhJLTYyMjQsIFBDSS02MjI1LAorICBQQ0ktNjExMCwgUENJLTYxMTEsIFBDSS02MjIwLCBQQ0ktNjIyMSwgUENJLTYyMjQsIFBYSS02MjI0LCBQQ0ktNjIyNSwgUFhJLTYyMjUsCiAgIFBDSS02MjI5LCBQQ0ktNjI1MCwgUENJLTYyNTEsIFBDSWUtNjI1MSwgUENJLTYyNTQsIFBDSS02MjU5LCBQQ0llLTYyNTksCiAgIFBDSS02MjgwLCBQQ0ktNjI4MSwgUFhJLTYyODEsIFBDSS02Mjg0LCBQQ0ktNjI4OSwKICAgUENJLTY3MTEsIFBYSS02NzExLCBQQ0ktNjcxMywgUFhJLTY3MTMsCkBAIC0xNzksNiArMTc5LDcgQEAKIAlQQ0lfVkVORE9SX0lEX05BVElOU1QsIDB4NzBmMiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sIHsKIAlQQ0lfVkVORE9SX0lEX05BVElOU1QsIDB4NzEwZCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sIHsKIAlQQ0lfVkVORE9SX0lEX05BVElOU1QsIDB4NzE2YywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sIHsKKwlQQ0lfVkVORE9SX0lEX05BVElOU1QsIDB4NzE2ZCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sIHsKIAlQQ0lfVkVORE9SX0lEX05BVElOU1QsIDB4NzE3ZiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sIHsKIAlQQ0lfVkVORE9SX0lEX05BVElOU1QsIDB4NzFiYywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sIHsKIAlQQ0lfVkVORE9SX0lEX05BVElOU1QsIDB4NzE3ZCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sIHsKQEAgLTk1Myw2ICs5NTQsMjUgQEAKIAkgLmhhc184MjU1ID0gMCwKIAkgfSwKIAl7CisJIC5kZXZpY2VfaWQgPSAweDcxNmQsCisJIC5uYW1lID0gInB4aS02MjI1IiwKKwkgLm5fYWRjaGFuID0gODAsCisJIC5hZGJpdHMgPSAxNiwKKwkgLmFpX2ZpZm9fZGVwdGggPSA0MDk1LAorCSAuZ2FpbmxrdXAgPSBhaV9nYWluXzYyMngsCisJIC5haV9zcGVlZCA9IDQwMDAsCisJIC5uX2FvY2hhbiA9IDIsCisJIC5hb2JpdHMgPSAxNiwKKwkgLmFvX2ZpZm9fZGVwdGggPSA4MTkxLAorCSAuYW9fcmFuZ2VfdGFibGUgPSAmcmFuZ2VfbmlfTV82MjJ4X2FvLAorCSAucmVnX3R5cGUgPSBuaV9yZWdfNjIyeCwKKwkgLmFvX3VuaXBvbGFyID0gMCwKKwkgLmFvX3NwZWVkID0gMTIwMCwKKwkgLm51bV9wMF9kaW9fY2hhbm5lbHMgPSAzMiwKKwkgLmNhbGRhYyA9IHtjYWxkYWNfbm9uZX0sCisJIC5oYXNfODI1NSA9IDAsCisJfSwKKwl7CiAJIC5kZXZpY2VfaWQgPSAweDcwYWEsCiAJIC5uYW1lID0gInBjaS02MjI5IiwKIAkgLm5fYWRjaGFuID0gMzIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcXVhdGVjaF9kYXFwX2NzLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcXVhdGVjaF9kYXFwX2NzLmMKaW5kZXggZjYzYmRjMy4uMzQ0YjgyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3F1YXRlY2hfZGFxcF9jcy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9xdWF0ZWNoX2RhcXBfY3MuYwpAQCAtMTA3OSw3ICsxMDc5LDcgQEAKIAlsaW5rLT5wcml2ID0gbG9jYWw7CiAKIAkvKiBJbnRlcnJ1cHQgc2V0dXAgKi8KLQlsaW5rLT5pcnEuQXR0cmlidXRlcyA9IElSUV9UWVBFX0VYQ0xVU0lWRSB8IElSUV9IQU5ETEVfUFJFU0VOVDsKKwlsaW5rLT5pcnEuQXR0cmlidXRlcyA9IElSUV9UWVBFX0RZTkFNSUNfU0hBUklORyB8IElSUV9IQU5ETEVfUFJFU0VOVDsKIAlsaW5rLT5pcnEuSVJRSW5mbzEgPSBJUlFfTEVWRUxfSUQ7CiAJbGluay0+aXJxLkhhbmRsZXIgPSBkYXFwX2ludGVycnVwdDsKIAlsaW5rLT5pcnEuSW5zdGFuY2UgPSBsb2NhbDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9zNTI2LmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvczUyNi5jCmluZGV4IGI4OWUxZWMuLjA3YzIxZTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9zNTI2LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3M1MjYuYwpAQCAtNDMsNiArNDMsNyBAQAogCiAjaW5jbHVkZSAiLi4vY29tZWRpZGV2LmgiCiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgogCiAjZGVmaW5lIFM1MjZfU0laRSA2NAogCkBAIC0xMTMsNiArMTE0LDcgQEAKIH07CiAKIHN0cnVjdCBjb3VudGVyX21vZGVfcmVnaXN0ZXJfdCB7CisjaWYgZGVmaW5lZCAoX19MSVRUTEVfRU5ESUFOX0JJVEZJRUxEKQogCXVuc2lnbmVkIHNob3J0IGNvdXRTb3VyY2U6MTsKIAl1bnNpZ25lZCBzaG9ydCBjb3V0UG9sYXJpdHk6MTsKIAl1bnNpZ25lZCBzaG9ydCBhdXRvTG9hZFJlc2V0UmNhcDozOwpAQCAtMTI0LDEyICsxMjYsMjcgQEAKIAl1bnNpZ25lZCBzaG9ydCBvdXRwdXRSZWdMYXRjaEN0cmw6MTsKIAl1bnNpZ25lZCBzaG9ydCBwcmVsb2FkUmVnU2VsOjE7CiAJdW5zaWduZWQgc2hvcnQgcmVzZXJ2ZWQ6MTsKKyAjZWxpZiBkZWZpbmVkKF9fQklHX0VORElBTl9CSVRGSUVMRCkKKwl1bnNpZ25lZCBzaG9ydCByZXNlcnZlZDoxOworCXVuc2lnbmVkIHNob3J0IHByZWxvYWRSZWdTZWw6MTsKKwl1bnNpZ25lZCBzaG9ydCBvdXRwdXRSZWdMYXRjaEN0cmw6MTsKKwl1bnNpZ25lZCBzaG9ydCBjb3VudERpckN0cmw6MTsKKwl1bnNpZ25lZCBzaG9ydCBjb3VudERpcjoxOworCXVuc2lnbmVkIHNob3J0IGNsb2NrU291cmNlOjI7CisJdW5zaWduZWQgc2hvcnQgY3RFbmFibGVDdHJsOjI7CisJdW5zaWduZWQgc2hvcnQgaHdDdEVuYWJsZVNvdXJjZToyOworCXVuc2lnbmVkIHNob3J0IGF1dG9Mb2FkUmVzZXRSY2FwOjM7CisJdW5zaWduZWQgc2hvcnQgY291dFBvbGFyaXR5OjE7CisJdW5zaWduZWQgc2hvcnQgY291dFNvdXJjZToxOworI2Vsc2UKKyNlcnJvciBVbmtub3duIGJpdCBmaWVsZCBvcmRlcgorI2VuZGlmCiB9OwogCi11bmlvbiB7Cit1bmlvbiBjbVJlZyB7CiAJc3RydWN0IGNvdW50ZXJfbW9kZV9yZWdpc3Rlcl90IHJlZzsKIAl1bnNpZ25lZCBzaG9ydCB2YWx1ZTsKLX0gY21SZWc7Cit9OwogCiAjZGVmaW5lIE1BWF9HUENUX0NPTkZJR19EQVRBIDYKIApAQCAtMjg1LDYgKzMwMiw3IEBACiAJaW50IGksIG47CiAvKiBzaG9ydCB2YWx1ZTsgKi8KIC8qIGludCBzdWJkZXZfY2hhbm5lbCA9IDA7ICovCisJdW5pb24gY21SZWcgY21SZWc7CiAKIAlwcmludGsoImNvbWVkaSVkOiBzNTI2OiAiLCBkZXYtPm1pbm9yKTsKIApAQCAtMzc1LDcgKzM5Myw3IEBACiAJaWYgKHRoaXNib2FyZC0+aGF2ZV9kaW8pIHsKIAkJcy0+dHlwZSA9IENPTUVESV9TVUJEX0RJTzsKIAkJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFIHwgU0RGX1dSSVRBQkxFOwotCQlzLT5uX2NoYW4gPSAyOworCQlzLT5uX2NoYW4gPSA4OwogCQlzLT5tYXhkYXRhID0gMTsKIAkJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfZGlnaXRhbDsKIAkJcy0+aW5zbl9iaXRzID0gczUyNl9kaW9faW5zbl9iaXRzOwpAQCAtNDM1LDExICs0NTMsMTEgQEAKIAl1ZGVsYXkoMTAwMCk7CiAJcHJpbnRrKCJSZWFkIGJhY2sgbW9kZSByZWc9MHglMDR4XG4iLCBpbncoQUREUl9DSEFOX1JFRyhSRUdfQzBNLCBuKSkpOwogCi0JLyogIExvYWQgdGhlIHByZS1sYW9kIHJlZ2lzdGVyIGhpZ2ggd29yZCAqLworCS8qICBMb2FkIHRoZSBwcmUtbG9hZCByZWdpc3RlciBoaWdoIHdvcmQgKi8KIC8qIHZhbHVlID0gKHNob3J0KSAoMHg1NSk7ICovCiAvKiBvdXR3KHZhbHVlLCBBRERSX0NIQU5fUkVHKFJFR19DMEgsIG4pKTsgKi8KIAotCS8qICBMb2FkIHRoZSBwcmUtbGFvZCByZWdpc3RlciBsb3cgd29yZCAqLworCS8qICBMb2FkIHRoZSBwcmUtbG9hZCByZWdpc3RlciBsb3cgd29yZCAqLwogLyogdmFsdWUgPSAoc2hvcnQpKDB4YWE1NSk7ICovCiAvKiBvdXR3KHZhbHVlLCBBRERSX0NIQU5fUkVHKFJFR19DMEwsIG4pKTsgKi8KIApAQCAtNTE2LDYgKzUzNCw3IEBACiAJaW50IHN1YmRldl9jaGFubmVsID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CS8qICBVbnBhY2sgY2hhbnNwZWMgKi8KIAlpbnQgaTsKIAlzaG9ydCB2YWx1ZTsKKwl1bmlvbiBjbVJlZyBjbVJlZzsKIAogLyogcHJpbnRrKCJzNTI2OiBHUENUX0lOU05fQ09ORklHOiBDb25maWd1cmluZyBDaGFubmVsICVkXG4iLCBzdWJkZXZfY2hhbm5lbCk7ICovCiAKQEAgLTU2OCwxOSArNTg3LDggQEAKIAogI2lmIDEKIAkJLyogIFNldCBDb3VudGVyIE1vZGUgUmVnaXN0ZXIgKi8KLQkJY21SZWcucmVnLmNvdXRTb3VyY2UgPSAwOwkvKiAgb3V0IFJDQVAgKi8KLQkJY21SZWcucmVnLmNvdXRQb2xhcml0eSA9IDA7CS8qICBQb2xhcml0eSBpbnZlcnRlZCAqLwotCQljbVJlZy5yZWcuYXV0b0xvYWRSZXNldFJjYXAgPSAwOwkvKiAgQXV0byBsb2FkIGRpc2FibGVkICovCi0JCWNtUmVnLnJlZy5od0N0RW5hYmxlU291cmNlID0gMjsJLyogIE5PVCBSQ0FQICovCi0JCWNtUmVnLnJlZy5jdEVuYWJsZUN0cmwgPSAxOwkvKiAgMTogU29mdHdhcmUsICA+MSA6IEhhcmR3YXJlICovCi0JCWNtUmVnLnJlZy5jbG9ja1NvdXJjZSA9IDM7CS8qICB4NCAqLwotCQljbVJlZy5yZWcuY291bnREaXIgPSAwOwkvKiAgdXAgKi8KLQkJY21SZWcucmVnLmNvdW50RGlyQ3RybCA9IDA7CS8qICBxdWFkcmF0dXJlICovCi0JCWNtUmVnLnJlZy5vdXRwdXRSZWdMYXRjaEN0cmwgPSAwOwkvKiAgbGF0Y2ggb24gcmVhZCAqLwotCQljbVJlZy5yZWcucHJlbG9hZFJlZ1NlbCA9IDA7CS8qICBQUjAgKi8KLQkJY21SZWcucmVnLnJlc2VydmVkID0gMDsKKwkJY21SZWcudmFsdWUgPSBpbnNuLT5kYXRhWzFdICYgMHhGRkZGOwogCi0JCS8qICBTZXQgQ291bnRlciBNb2RlIFJlZ2lzdGVyICovCiAvKiBwcmludGsoInM1MjY6IENvdW50ZXIgTW9kZSByZWdpc3Rlcj0leFxuIiwgY21SZWcudmFsdWUpOyAqLwogCQlvdXR3KGNtUmVnLnZhbHVlLCBBRERSX0NIQU5fUkVHKFJFR19DME0sIHN1YmRldl9jaGFubmVsKSk7CiAKQEAgLTYxNSwxMSArNjIzLDExIEBACiAJCWNtUmVnLnZhbHVlID0gKHNob3J0KShpbnNuLT5kYXRhWzFdICYgMHhGRkZGKTsKIAkJb3V0dyhjbVJlZy52YWx1ZSwgQUREUl9DSEFOX1JFRyhSRUdfQzBNLCBzdWJkZXZfY2hhbm5lbCkpOwogCi0JCS8qICBMb2FkIHRoZSBwcmUtbGFvZCByZWdpc3RlciBoaWdoIHdvcmQgKi8KKwkJLyogIExvYWQgdGhlIHByZS1sb2FkIHJlZ2lzdGVyIGhpZ2ggd29yZCAqLwogCQl2YWx1ZSA9IChzaG9ydCkoKGluc24tPmRhdGFbMl0gPj4gMTYpICYgMHhGRkZGKTsKIAkJb3V0dyh2YWx1ZSwgQUREUl9DSEFOX1JFRyhSRUdfQzBILCBzdWJkZXZfY2hhbm5lbCkpOwogCi0JCS8qICBMb2FkIHRoZSBwcmUtbGFvZCByZWdpc3RlciBsb3cgd29yZCAqLworCQkvKiAgTG9hZCB0aGUgcHJlLWxvYWQgcmVnaXN0ZXIgbG93IHdvcmQgKi8KIAkJdmFsdWUgPSAoc2hvcnQpKGluc24tPmRhdGFbMl0gJiAweEZGRkYpOwogCQlvdXR3KHZhbHVlLCBBRERSX0NIQU5fUkVHKFJFR19DMEwsIHN1YmRldl9jaGFubmVsKSk7CiAKQEAgLTY1MywxMSArNjYxLDExIEBACiAJCWNtUmVnLnJlZy5wcmVsb2FkUmVnU2VsID0gMDsJLyogIFBSMCAqLwogCQlvdXR3KGNtUmVnLnZhbHVlLCBBRERSX0NIQU5fUkVHKFJFR19DME0sIHN1YmRldl9jaGFubmVsKSk7CiAKLQkJLyogIExvYWQgdGhlIHByZS1sYW9kIHJlZ2lzdGVyIDAgaGlnaCB3b3JkICovCisJCS8qICBMb2FkIHRoZSBwcmUtbG9hZCByZWdpc3RlciAwIGhpZ2ggd29yZCAqLwogCQl2YWx1ZSA9IChzaG9ydCkoKGluc24tPmRhdGFbMl0gPj4gMTYpICYgMHhGRkZGKTsKIAkJb3V0dyh2YWx1ZSwgQUREUl9DSEFOX1JFRyhSRUdfQzBILCBzdWJkZXZfY2hhbm5lbCkpOwogCi0JCS8qICBMb2FkIHRoZSBwcmUtbGFvZCByZWdpc3RlciAwIGxvdyB3b3JkICovCisJCS8qICBMb2FkIHRoZSBwcmUtbG9hZCByZWdpc3RlciAwIGxvdyB3b3JkICovCiAJCXZhbHVlID0gKHNob3J0KShpbnNuLT5kYXRhWzJdICYgMHhGRkZGKTsKIAkJb3V0dyh2YWx1ZSwgQUREUl9DSEFOX1JFRyhSRUdfQzBMLCBzdWJkZXZfY2hhbm5lbCkpOwogCkBAIC02NjYsMTcgKzY3NCwxNyBAQAogCQljbVJlZy5yZWcucHJlbG9hZFJlZ1NlbCA9IDE7CS8qICBQUjEgKi8KIAkJb3V0dyhjbVJlZy52YWx1ZSwgQUREUl9DSEFOX1JFRyhSRUdfQzBNLCBzdWJkZXZfY2hhbm5lbCkpOwogCi0JCS8qICBMb2FkIHRoZSBwcmUtbGFvZCByZWdpc3RlciAxIGhpZ2ggd29yZCAqLworCQkvKiAgTG9hZCB0aGUgcHJlLWxvYWQgcmVnaXN0ZXIgMSBoaWdoIHdvcmQgKi8KIAkJdmFsdWUgPSAoc2hvcnQpKChpbnNuLT5kYXRhWzNdID4+IDE2KSAmIDB4RkZGRik7CiAJCW91dHcodmFsdWUsIEFERFJfQ0hBTl9SRUcoUkVHX0MwSCwgc3ViZGV2X2NoYW5uZWwpKTsKIAotCQkvKiAgTG9hZCB0aGUgcHJlLWxhb2QgcmVnaXN0ZXIgMSBsb3cgd29yZCAqLworCQkvKiAgTG9hZCB0aGUgcHJlLWxvYWQgcmVnaXN0ZXIgMSBsb3cgd29yZCAqLwogCQl2YWx1ZSA9IChzaG9ydCkoaW5zbi0+ZGF0YVszXSAmIDB4RkZGRik7CiAJCW91dHcodmFsdWUsIEFERFJfQ0hBTl9SRUcoUkVHX0MwTCwgc3ViZGV2X2NoYW5uZWwpKTsKIAogCQkvKiAgV3JpdGUgdGhlIENvdW50ZXIgQ29udHJvbCBSZWdpc3RlciAqLwotCQlpZiAoaW5zbi0+ZGF0YVszXSAhPSAwKSB7Ci0JCQl2YWx1ZSA9IChzaG9ydCkoaW5zbi0+ZGF0YVszXSAmIDB4RkZGRik7CisJCWlmIChpbnNuLT5kYXRhWzRdICE9IDApIHsKKwkJCXZhbHVlID0gKHNob3J0KShpbnNuLT5kYXRhWzRdICYgMHhGRkZGKTsKIAkJCW91dHcodmFsdWUsIEFERFJfQ0hBTl9SRUcoUkVHX0MwQywgc3ViZGV2X2NoYW5uZWwpKTsKIAkJfQogCQlicmVhazsKQEAgLTY5OCwxMSArNzA2LDExIEBACiAJCWNtUmVnLnJlZy5wcmVsb2FkUmVnU2VsID0gMDsJLyogIFBSMCAqLwogCQlvdXR3KGNtUmVnLnZhbHVlLCBBRERSX0NIQU5fUkVHKFJFR19DME0sIHN1YmRldl9jaGFubmVsKSk7CiAKLQkJLyogIExvYWQgdGhlIHByZS1sYW9kIHJlZ2lzdGVyIDAgaGlnaCB3b3JkICovCisJCS8qICBMb2FkIHRoZSBwcmUtbG9hZCByZWdpc3RlciAwIGhpZ2ggd29yZCAqLwogCQl2YWx1ZSA9IChzaG9ydCkoKGluc24tPmRhdGFbMl0gPj4gMTYpICYgMHhGRkZGKTsKIAkJb3V0dyh2YWx1ZSwgQUREUl9DSEFOX1JFRyhSRUdfQzBILCBzdWJkZXZfY2hhbm5lbCkpOwogCi0JCS8qICBMb2FkIHRoZSBwcmUtbGFvZCByZWdpc3RlciAwIGxvdyB3b3JkICovCisJCS8qICBMb2FkIHRoZSBwcmUtbG9hZCByZWdpc3RlciAwIGxvdyB3b3JkICovCiAJCXZhbHVlID0gKHNob3J0KShpbnNuLT5kYXRhWzJdICYgMHhGRkZGKTsKIAkJb3V0dyh2YWx1ZSwgQUREUl9DSEFOX1JFRyhSRUdfQzBMLCBzdWJkZXZfY2hhbm5lbCkpOwogCkBAIC03MTEsMTcgKzcxOSwxNyBAQAogCQljbVJlZy5yZWcucHJlbG9hZFJlZ1NlbCA9IDE7CS8qICBQUjEgKi8KIAkJb3V0dyhjbVJlZy52YWx1ZSwgQUREUl9DSEFOX1JFRyhSRUdfQzBNLCBzdWJkZXZfY2hhbm5lbCkpOwogCi0JCS8qICBMb2FkIHRoZSBwcmUtbGFvZCByZWdpc3RlciAxIGhpZ2ggd29yZCAqLworCQkvKiAgTG9hZCB0aGUgcHJlLWxvYWQgcmVnaXN0ZXIgMSBoaWdoIHdvcmQgKi8KIAkJdmFsdWUgPSAoc2hvcnQpKChpbnNuLT5kYXRhWzNdID4+IDE2KSAmIDB4RkZGRik7CiAJCW91dHcodmFsdWUsIEFERFJfQ0hBTl9SRUcoUkVHX0MwSCwgc3ViZGV2X2NoYW5uZWwpKTsKIAotCQkvKiAgTG9hZCB0aGUgcHJlLWxhb2QgcmVnaXN0ZXIgMSBsb3cgd29yZCAqLworCQkvKiAgTG9hZCB0aGUgcHJlLWxvYWQgcmVnaXN0ZXIgMSBsb3cgd29yZCAqLwogCQl2YWx1ZSA9IChzaG9ydCkoaW5zbi0+ZGF0YVszXSAmIDB4RkZGRik7CiAJCW91dHcodmFsdWUsIEFERFJfQ0hBTl9SRUcoUkVHX0MwTCwgc3ViZGV2X2NoYW5uZWwpKTsKIAogCQkvKiAgV3JpdGUgdGhlIENvdW50ZXIgQ29udHJvbCBSZWdpc3RlciAqLwotCQlpZiAoaW5zbi0+ZGF0YVszXSAhPSAwKSB7Ci0JCQl2YWx1ZSA9IChzaG9ydCkoaW5zbi0+ZGF0YVszXSAmIDB4RkZGRik7CisJCWlmIChpbnNuLT5kYXRhWzRdICE9IDApIHsKKwkJCXZhbHVlID0gKHNob3J0KShpbnNuLT5kYXRhWzRdICYgMHhGRkZGKTsKIAkJCW91dHcodmFsdWUsIEFERFJfQ0hBTl9SRUcoUkVHX0MwQywgc3ViZGV2X2NoYW5uZWwpKTsKIAkJfQogCQlicmVhazsKQEAgLTc0MSw2ICs3NDksNyBAQAogewogCWludCBzdWJkZXZfY2hhbm5lbCA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOwkvKiAgVW5wYWNrIGNoYW5zcGVjICovCiAJc2hvcnQgdmFsdWU7CisJdW5pb24gY21SZWcgY21SZWc7CiAKIAlwcmludGsoInM1MjY6IEdQQ1RfSU5TTl9XUklURSBvbiBjaGFubmVsICVkXG4iLCBzdWJkZXZfY2hhbm5lbCk7CiAJY21SZWcudmFsdWUgPSBpbncoQUREUl9DSEFOX1JFRyhSRUdfQzBNLCBzdWJkZXZfY2hhbm5lbCkpOwpAQCAtNzc1LDkgKzc4NCw4IEBACiAJCQkoZGV2cHJpdi0+czUyNl9ncGN0X2NvbmZpZ1tzdWJkZXZfY2hhbm5lbF0pLmRhdGFbMV0gPQogCQkJICAgIGluc24tPmRhdGFbMV07CiAJCX0gZWxzZSB7Ci0JCQlwcmludGsoIiVkIFx0ICVkXG4iLCBpbnNuLT5kYXRhWzFdLCBpbnNuLT5kYXRhWzJdKTsKLQkJCXByaW50awotCQkJICAgICgiczUyNjogSU5TTl9XUklURTogUFRHOiBQcm9ibGVtIHdpdGggUHVsc2UgcGFyYW1zXG4iKTsKKwkJCXByaW50aygiczUyNjogSU5TTl9XUklURTogUFRHOiBQcm9ibGVtIHdpdGggUHVsc2UgcGFyYW1zIC0+ICVkICVkXG4iLAorCQkJCWluc24tPmRhdGFbMF0sIGluc24tPmRhdGFbMV0pOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIApAQCAtOTQ5LDcgKzk1Nyw3IEBACiAJZGF0YVsxXSA9IGludyhBRERSX1JFRyhSRUdfRElPKSkgJiAweEZGOwkvKiAgbG93IDggYml0cyBhcmUgdGhlIGRhdGEgKi8KIAkvKiBvciB3ZSBjb3VsZCBqdXN0IHJldHVybiB0aGUgc29mdHdhcmUgY29weSBvZiB0aGUgb3V0cHV0IHZhbHVlcyBpZgogCSAqIGl0IHdhcyBhIHB1cmVseSBkaWdpdGFsIG91dHB1dCBzdWJkZXZpY2UgKi8KLQkvKiBkYXRhWzFdPXMtPnN0YXRlOyAqLworCS8qIGRhdGFbMV09cy0+c3RhdGUgJiAweEZGOyAqLwogCiAJcmV0dXJuIDI7CiB9CkBAIC05NTksMjggKzk2NywzMyBAQAogCQkJCXN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKQogewogCWludCBjaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7Ci0Jc2hvcnQgdmFsdWU7CisJaW50IGdyb3VwLCBtYXNrOwogCiAJcHJpbnRrKCJTNTI2IERJTyBpbnNuX2NvbmZpZ1xuIik7CiAKLQlpZiAoaW5zbi0+biAhPSAxKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXZhbHVlID0gaW53KEFERFJfUkVHKFJFR19ESU8pKTsKLQogCS8qIFRoZSBpbnB1dCBvciBvdXRwdXQgY29uZmlndXJhdGlvbiBvZiBlYWNoIGRpZ2l0YWwgbGluZSBpcwogCSAqIGNvbmZpZ3VyZWQgYnkgYSBzcGVjaWFsIGluc25fY29uZmlnIGluc3RydWN0aW9uLiAgY2hhbnNwZWMKIAkgKiBjb250YWlucyB0aGUgY2hhbm5lbCB0byBiZSBjaGFuZ2VkLCBhbmQgZGF0YVswXSBjb250YWlucyB0aGUKIAkgKiB2YWx1ZSBDT01FRElfSU5QVVQgb3IgQ09NRURJX09VVFBVVC4gKi8KIAotCWlmIChkYXRhWzBdID09IENPTUVESV9PVVRQVVQpIHsKLQkJdmFsdWUgfD0gMSA8PCAoY2hhbiArIDEwKTsJLyogIGJpdCAxMC8xMSBzZXQgdGhlIGdyb3VwIDEvMidzIG1vZGUgKi8KLQkJcy0+aW9fYml0cyB8PSAoMHhGIDw8IGNoYW4pOwotCX0gZWxzZSB7Ci0JCXZhbHVlICY9IH4oMSA8PCAoY2hhbiArIDEwKSk7CS8qICAxIGlzIG91dHB1dCwgMCBpcyBpbnB1dC4gKi8KLQkJcy0+aW9fYml0cyAmPSB+KDB4RiA8PCBjaGFuKTsKKwlncm91cCA9IGNoYW4gPj4gMjsKKwltYXNrID0gMHhGIDw8IChncm91cCA8PCAyKTsKKwlzd2l0Y2ggKGRhdGFbMF0pIHsKKwljYXNlIElOU05fQ09ORklHX0RJT19PVVRQVVQ6CisJCXMtPnN0YXRlIHw9IDEgPDwgKGdyb3VwICsgMTApOyAgLy8gYml0IDEwLzExIHNldCB0aGUgZ3JvdXAgMS8yJ3MgbW9kZQorCQlzLT5pb19iaXRzIHw9IG1hc2s7CisJCWJyZWFrOworCWNhc2UgSU5TTl9DT05GSUdfRElPX0lOUFVUOgorCQlzLT5zdGF0ZSAmPSB+KDEgPDwgKGdyb3VwICsgMTApKTsvLyAxIGlzIG91dHB1dCwgMCBpcyBpbnB1dC4KKwkJcy0+aW9fYml0cyAmPSB+bWFzazsKKwkJYnJlYWs7CisJY2FzZSBJTlNOX0NPTkZJR19ESU9fUVVFUlk6CisJCWRhdGFbMV0gPSAocy0+aW9fYml0cyAmIG1hc2spID8gQ09NRURJX09VVFBVVCA6IENPTUVESV9JTlBVVDsKKwkJcmV0dXJuIGluc24tPm47CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCW91dHcodmFsdWUsIEFERFJfUkVHKFJFR19ESU8pKTsKKwlvdXR3KHMtPnN0YXRlLCBBRERSX1JFRyhSRUdfRElPKSk7CiAKIAlyZXR1cm4gMTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9zZXJpYWwyMDAyLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvc2VyaWFsMjAwMi5jCmluZGV4IGEyMTk2NzkuLjgyYWE4NmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9zZXJpYWwyMDAyLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3NlcmlhbDIwMDIuYwpAQCAtMzUsNiArMzUsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogCiAjaW5jbHVkZSA8YXNtL3Rlcm1pb3MuaD4KICNpbmNsdWRlIDxhc20vaW9jdGxzLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY293bG9vcC9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL2Nvd2xvb3AvS2NvbmZpZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNThkMmEyMy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY293bG9vcC9LY29uZmlnCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotY29uZmlnIENPV0xPT1AKLQl0cmlzdGF0ZSAiY29weS1vbi13cml0ZSBwc2V1ZG8gQmxvY2sgRHJpdmVyIgotCWRlcGVuZHMgb24gQkxPQ0sKLQlkZWZhdWx0IG4KLQktLS1oZWxwLS0tCi0JICBDb3dsb29wIGlzIGEgImNvcHktb24td3JpdGUiIHBzZXVkbyBibG9jayBkcml2ZXIuIEl0IGNhbiBiZQotCSAgc3RhY2tlZCBvbiB0b3Agb2YgYSAicmVhbCIgYmxvY2sgZHJpdmVyLCBhbmQgY2F0Y2hlcyBhbGwgd3JpdGUKLQkgIG9wZXJhdGlvbnMgb24gdGhlaXIgd2F5IGZyb20gdGhlIGZpbGUgc3lzdGVtcyBsYXllciBhYm92ZSB0bwotCSAgdGhlIHJlYWwgZHJpdmVyIGJlbG93LCBlZmZlY3RpdmVseSBzaGllbGRpbmcgdGhlIGxvd2VyIGRyaXZlcgotCSAgZnJvbSB0aG9zZSB3cml0ZSBhY2Nlc3Nlcy4gVGhlIHJlcXVlc3RzIGFyZSB0aGVuIGRpdmVydGVkIHRvCi0JICBhbiBvcmRpbmFyeSBmaWxlLCBsb2NhdGVkIHNvbWV3aGVyZSBlbHNlIChjb25maWd1cmFibGUpLiBMYXRlcgotCSAgcmVhZCByZXF1ZXN0cyBhcmUgY2hlY2tlZCB0byBzZWUgd2hldGhlciB0aGV5IGNhbiBiZSBzZXJ2aWNlZAotCSAgYnkgdGhlICJyZWFsIiBibG9jayBkcml2ZXIgYmVsb3csIG9yIG11c3QgYmUgcHVsbGVkIGluIGZyb20KLQkgIHRoZSBkaXZlcnRlZCBsb2NhdGlvbi4gTW9yZSBpbmZvcm1hdGlvbiBhbmQgdXNlcnNwYWNlIHRvb2xzIHRvCi0JICB1c2UgdGhlIGRyaXZlciBhcmUgb24gdGhlIHByb2plY3QncyB3ZWJzaXRlCi0JICBodHRwOi8vd3d3LkFUQ29tcHV0aW5nLm5sL2Nvd2xvb3AvCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY293bG9vcC9NYWtlZmlsZSBiL2RyaXZlcnMvc3RhZ2luZy9jb3dsb29wL01ha2VmaWxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYjZiODFhLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb3dsb29wL01ha2VmaWxlCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotb2JqLSQoQ09ORklHX0NPV0xPT1ApCSs9IGNvd2xvb3AubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2Nvd2xvb3AvVE9ETyBiL2RyaXZlcnMvc3RhZ2luZy9jb3dsb29wL1RPRE8KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkzOTlkMWMuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2Nvd2xvb3AvVE9ETworKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLVRPRE86Ci0JLSBjaGVja3BhdGNoLnBsIGNsZWFudXBzCi0JLSBydW4gc3BhcnNlIHRvIGVuc3VyZSBjbGVhbgotCS0gZml4IHVwIDMyLzY0Yml0IGlvY3RsIGlzc3VlcwotCS0gbW92ZSBwcm9jIGZpbGUgdXNhZ2UgdG8gZGVidWdmcwotCS0gYXVkaXQgaW9jdGxzCi0JLSBhZGQgZG9jdW1lbnRhdGlvbgotCS0gZ2V0IGxpbnV4LWZzZGV2ZWwgdG8gcmV2aWV3IGl0Ci0KLVBsZWFzZSBzZW5kIHBhdGNoZXMgdG8gIkguSi4gVGhvbWFzc2VuIiA8aGp0QEFUQ29tcHV0aW5nLm5sPiBhbmQKLUdyZWcgS3JvYWgtSGFydG1hbiA8Z3JlZ2toQHN1c2UuZGU+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY293bG9vcC9jb3dsb29wLmMgYi9kcml2ZXJzL3N0YWdpbmcvY293bG9vcC9jb3dsb29wLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE3MWM3NDMuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2Nvd2xvb3AvY293bG9vcC5jCisrKyAvZGV2L251bGwKQEAgLTEsMjg0MiArMCwwIEBACi0vKgotKiogICAgICAgQ09XTE9PUCBibG9jayBkZXZpY2UgZHJpdmVyICgyLjYga2VybmVsIGNvbXBsaWFudCkKLSoqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qKiBSZWFkLXdyaXRlIGxvb3AtZHJpdmVyIHdpdGggY29weS1vbi13cml0ZSBmdW5jdGlvbmFsaXR5LgotKioKLSoqIFN5bm9wc2lzOgotKioKLSoqICAgICBtb2Rwcm9iZSBjb3dsb29wIFttYXhjb3dzPS4uXSBbcmRvZmlsZT0uLi4uLiBjb3dmaWxlPS4uLi4gW29wdGlvbj1yXV0KLSoqCi0qKiBEZWZpbml0aW9uIG9mIG51bWJlciBvZiBjb25maWd1cmVkIGNvd2RldmljZXM6Ci0qKiAgIG1heGNvd3M9CW51bWJlciBvZiBjb25maWd1cmVkIGNvd2RldmljZXMgKGRlZmF1bHQ6IDE2KQotKiogKGRvIG5vdCBjb25mdXNlIHRoaXMgd2l0aCBNQVhDT1dTOiBhYnNvbHV0ZSBtYXhpbXVtIGFzIGNvbXBpbGVkKQotKioKLSoqIE9uZSBwYWlyIG9mIGZpbGVuYW1lcyBjYW4gYmUgc3VwcGxpZWQgZHVyaW5nIGluc21vZC9tb2Rwcm9iZSB0byBvcGVuCi0qKiB0aGUgZmlyc3QgY293ZGV2aWNlOgotKiogICByZG9maWxlPQlyZWFkLW9ubHkgZmlsZSAob3IgZmlsZXN5c3RlbSkKLSoqICAgY293ZmlsZT0Jc3RvcmFnZS1zcGFjZSBmb3IgbW9kaWZpZWQgYmxvY2tzIG9mIHJlYWQtb25seSBmaWxlKHN5c3RlbSkKLSoqICAgb3B0aW9uPXIJcmVwYWlyIGNvd2ZpbGUgYXV0b21hdGljYWxseSBpZiBpdCBhcHBlYXJzIHRvIGJlIGRpcnR5Ci0qKgotKiogT3RoZXIgY293ZGV2aWNlcyBjYW4gYmUgYWN0aXZhdGVkIHZpYSB0aGUgY29tbWFuZCAiY293ZGV2IgotKiogd2hlbmV2ZXIgdGhlIGNvd2xvb3AtZHJpdmVyIGlzIGxvYWRlZC4KLSoqCi0qKiBUaGUgcmVhZC1vbmx5IGZpbGUgbWF5IGJlIG9mIHR5cGUgJ3JlZ3VsYXInIG9yICdibG9jay1kZXZpY2UnLgotKioKLSoqIFRoZSBjb3dmaWxlIG11c3QgYmUgb2YgdHlwZSAncmVndWxhcicuCi0qKiBJZiBhbiBleGlzdGluZyByZWd1bGFyIGZpbGUgaXMgdXNlZCBhcyBjb3dmaWxlLCBpdHMgY29udGVudHMgd2lsbCBiZQotKiogdXNlZCBhZ2FpbiBmb3IgdGhlIGN1cnJlbnQgcmVhZC1vbmx5IGZpbGUuIFdoZW4gdGhlIGNvd2ZpbGUgaGFzIG5vdCBiZWVuCi0qKiBjbG9zZWQgcHJvcGVybHkgZHVyaW5nIGEgcHJldmlvdXMgc2Vzc2lvbiAoaS5lLiBybW1vZCBjb3dsb29wKSwgdGhlCi0qKiBjb3dsb29wLWRyaXZlciByZWZ1c2VzIHRvIG9wZW4gaXQgdW5sZXNzIHRoZSBwYXJhbWV0ZXIgIm9wdGlvbj1yIiBpcwotKiogc3BlY2lmaWVkLgotKioKLSoqIExheW91dCBvZiBjb3dmaWxlOgotKioKLSoqIAkrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0qKgl8ICAgICAgIGNvdyBoZWFkIGJsb2NrICAgICAgICB8ICAgTUFQVU5JVCBieXRlcwotKioJfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAotKioJfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIE1BUFVOSVQgYnl0ZXMKLSoqCXwtLS0gICAgICAgICAgICAgICAgICAgICAgIC0tLXwKLSoqCXwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICBNQVBVTklUIGJ5dGVzCi0qKgl8LS0tICAgICAgICAgICAgICAgICAgICAgICAtLS18Ci0qKgl8ICAgICAgdXNlZC1ibG9jayBiaXRtYXAgICAgICB8ICAgTUFQVU5JVCBieXRlcwotKioJfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAotKioJfCAgZ2FwIHRvIGFsaWduIHN0YXJ0LW9mZnNldCAgfAotKioJfCAgICAgICAgdG8gNEsgbXVsdGlwbGUgICAgICAgfAotKioJfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCAgPC0tLS0gc3RhcnQtb2Zmc2V0IGNvdyBibG9ja3MKLSoqCXwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSoqICAgICAgfCAgICB3cml0dGVuIGNvdyBibG9ja3MgICAgICAgfCAgIE1BUFVOSVQgYnl0ZXMKLSoqICAgICAgfCAgICAgICAgICAuLi4uLiAgICAgICAgICAgICAgfAotKioKLSoqIAljb3doZWFkIGJsb2NrOgotKiogICAJICAtIGNvbnRhaW5zIGdlbmVyYWwgaW5mbyBhYm91dCB0aGUgcmRvZmlsZSB3aGljaCBpcyByZWxhdGVkCi0qKiAJICAgIHRvIHRoaXMgY293ZmlsZQotKioKLSoqIAl1c2VkLWJsb2NrIGJpdG1hcDoKLSoqIAkgIC0gY29udGFpbnMgb25lIGJpdCBwZXIgYmxvY2sgd2l0aCBhIHNpemUgb2YgTUFQVU5JVCBieXRlcwotKiogCSAgLSBiaXQtdmFsdWUgJzEnID0gYmxvY2sgaGFzIGJlZW4gd3JpdHRlbiBvbiBjb3cKLSoqIAkgICAgICAgICAgICAgICcwJyA9IGJsb2NrIHVudXNlZCBvbiBjb3cKLSoqIAkgIC0gdG90YWwgYml0bWFwIHJvdW5kZWQgdG8gbXVsdGlwbGVzIG9mIE1BUFVOSVQKLSoqCi0qKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qKiBBdXRob3I6ICAgICAgICAgICAgIEdlcmxvZiBMYW5nZXZlbGQgLSBBVCBDb21wdXRpbmcgKE1hcmNoIDIwMDMpCi0qKiBDdXJyZW50IG1haW50YWluZXI6IEhlbmRyaWstSmFuIFRob21hc3NlbiAtIEFUIENvbXB1dGluZyAoU3VtbWVyIDIwMDYpCi0qKiBFbWFpbDogICAgICAgICAgICAgIGhqdEBBVENvbXB1dGluZy5ubAotKiogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKiogQ29weXJpZ2h0IChDKSAyMDAzLTIwMDkgQVQgQ29uc3VsdGFuY3kKLSoqCi0qKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotKiogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCi0qKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55Ci0qKiBsYXRlciB2ZXJzaW9uLgotKioKLSoqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKLSoqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSoqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KLSoqIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSoqCi0qKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotKiogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSoqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKLSoqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSoqCi0qKiBNYWpvciBtb2RpZmljYXRpb25zOgotKioKLSoqIAkyMDA0MDUJUG9ydGVkIHRvIGtlcm5lbC12ZXJzaW9uIDIuNgkJSGVuZHJpay1KYW4gVGhvbWFzc2VuCi0qKgkyMDA0MDUJQWRkZWQgY293aGVhZCB0byBjb3dmaWxlIHRvIGdhcmFudGVlCi0qKgkJY29uc2lzdGVuY3kgd2l0aCByZWFkLW9ubHkgZmlsZQkJR2VybG9mIExhbmdldmVsZAotKioJMjAwNDA1CVBvc3Rwb25lZCBmbHVzaGluZyBvZiBiaXRtYXBzIHRvIGltcHJvdmUKLSoqCQlwZXJmb3JtYW5jZS4gCQkJCUdlcmxvZiBMYW5nZXZlbGQKLSoqCTIwMDQwNQlJbmxpbmUgcmVjb3ZlcnkgZm9yIGRpcnR5IGNvd2ZpbGVzLglHZXJsb2YgTGFuZ2V2ZWxkCi0qKgkyMDA1MDIJUmVkZXNpZ24gdG8gc3VwcG9ydCBtb3JlIGNvd2RldmljZXMuCUdlcmxvZiBMYW5nZXZlbGQKLSoqCTIwMDUwMglTdXBwb3J0IGRldmljZXMvZmlsZSA+IDIgR2J5dGVzLglHZXJsb2YgTGFuZ2V2ZWxkCi0qKgkyMDA1MDcJQ2hlY2sgZm9yIGZyZWUgc3BhY2UgdG8gZXhwYW5kIGNvd2ZpbGUuCUdlcmxvZiBMYW5nZXZlbGQKLSoqCTIwMDkwMiAgVXBncmFkZSBmb3Iga2VybmVsIDIuNi4yOCAgICAgICAgICAgICAgIEhlbmRyaWstSmFuIFRob21hc3NlbgotKioKLSoqIEluc3BpcmVkIGJ5Ci0qKiAgICBsb29wLmMgIGJ5IFRoZW9kb3JlIFRzJ28gYW5kCi0qKiAgICBjbG9vcC5jIGJ5IFBhdWwgYFJ1c3R5JyBSdXNzZWxsICYgS2xhdXMgS25vcHBlci4KLSoqCi0qKiBEZXNpZ24tY29uc2lkZXJhdGlvbnM6Ci0qKgotKiogICBGb3IgdGhlIGZpcnN0IGV4cGVyaW1lbnRzIHdpdGggdGhlIGNvd2xvb3AtZHJpdmVyLCB0aGUgcmVxdWVzdC1xdWV1ZQotKiogICBtYWRlIHVzZSBvZiB0aGUgZG9fZ2VuZXJpY19maWxlX3JlYWQoKSB3aGljaCB3b3JrZWQgZmluZSBleGNlcHQKLSoqICAgaW4gY29tYmluYXRpb24gd2l0aCB0aGUgY2xvb3AtZHJpdmVyOyB0aGF0IGNvbWJpbmF0aW9uCi0qKiAgIHJlc3VsdGVkIGluIGEgbm9uLWludGVycnVwdGlibGUgaGFuZ3VwIG9mIHRoZSBzeXN0ZW0gZHVyaW5nCi0qKiAgIGhlYXZ5IGxvYWQuIE90aGVyIGV4cGVyaW1lbnRzIHVzaW5nIHRoZSBgbWFrZV9yZXF1ZXN0JyBpbnRlcmZhY2UgYWxzbwotKiogICByZXN1bHRlZCBpbiB1bnByZWRpY3RhYmxlIHN5c3RlbSBoYW5ndXBzICh3aXRoIHByb3BlciB1c2Ugb2Ygc3BpbmxvY2tzKS4KLSoqCi0qKiAgIFRvIG92ZXJjb21lIHRoZXNlIHByb2JsZW1zLCB0aGUgY293bG9vcC1kcml2ZXIgc3RhcnRzIGEga2VybmVsLXRocmVhZAotKiogICBmb3IgZXZlcnkgYWN0aXZlIGNvd2RldmljZS4KLSoqICAgQWxsIHJlYWQtIGFuZCB3cml0ZS1yZXF1ZXN0IG9uIHRoZSByZWFkLW9ubHkgZmlsZSBhbmQgY29weS1vbi13cml0ZSBmaWxlCi0qKiAgIGFyZSBoYW5kbGVkIGluIHRoZSBjb250ZXh0IG9mIHRoYXQgdGhyZWFkLgotKiogICBBIHNjaGVtZSBoYXMgYmVlbiBkZXNpZ25lZCB0byB3YWtldXAgdGhlIGtlcm5lbC10aHJlYWQgYXMKLSoqICAgc29vbiBhcyBJL08tcmVxdWVzdHMgYXJlIGF2YWlsYWJsZSBpbiB0aGUgcmVxdWVzdC1xdWV1ZTsgdGhpcyB0aHJlYWQKLSoqICAgaGFuZGxlcyB0aGUgcmVxdWVzdHMgb25lLWJ5LW9uZSBieSBjYWxsaW5nIHRoZSBwcm9wZXIgcmVhZC0gb3IKLSoqICAgd3JpdGUtZnVuY3Rpb24gcmVsYXRlZCB0byB0aGUgb3BlbiByZWFkLW9ubHkgZmlsZSBvciBjb3B5LW9uLXdyaXRlIGZpbGUuCi0qKiAgIFdoZW4gYWxsIHBlbmRpbmcgcmVxdWVzdHMgaGF2ZSBiZWVuIGhhbmRsZWQsIHRoZSBrZXJuZWwtdGhyZWFkIGdvZXMKLSoqICAgYmFjayB0byBzbGVlcC1zdGF0ZS4KLSoqICAgVGhpcyBhcHByb2FjaCByZXF1aXJlcyBzb21lIGFkZGl0aW9uYWwgY29udGV4dC1zd2l0Y2hlczsgaG93ZXZlciB0aGUKLSoqICAgcGVyZm9ybWFuY2UgbG9zcyBkdXJpbmcgaGVhdnkgSS9PIGlzIGxlc3MgdGhhbiAzJS4KLSoqCi0qKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8qIFRoZSBmb2xsb3dpbmcgaXMgdGhlIGNvd2xvb3AgcGFja2FnZSB2ZXJzaW9uIG51bWJlci4gSXQgbXVzdCBiZQotICAgaWRlbnRpY2FsIHRvIHRoZSBjb250ZW50IG9mIHRoZSBpbmNsdWRlLWZpbGUgInZlcnNpb24uaCIgdGhhdCBpcwotICAgdXNlZCBpbiBhbGwgc3VwcG9ydGluZyB1dGlsaXRpZXM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi1jaGFyIHJldmlzaW9uW10gPSAiJFJldmlzaW9uOiAzLjEgJCI7IC8qIGNvd2xvX2luaXRfbW9kdWxlKCkgaGFzCi0JCQkgICAgIGFzc3VtcHRpb25zIGFib3V0IHRoaXMgc3RyaW5nJ3MgZm9ybWF0ICAgKi8KLQotLyogTm90ZSB0aGF0IHRoZSBmb2xsb3dpbmcgbnVtYmVycyBhcmUgKm5vdCogdGhlIGNvd2xvb3AgcGFja2FnZSB2ZXJzaW9uCi0gICBudW1iZXJzLCBidXQgc2VwYXJhdGUgcmV2aXNpb24gaGlzdG9yeSBudW1iZXJzIHRvIHRyYWNrIHRoZQotICAgbW9kaWZpY2F0aW9ucyBvZiB0aGlzIHBhcnRpY3VsYXIgc291cmNlIGZpbGU6ICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAkTG9nOiBjb3dsb29wLmMsdiAkCi0qKgotKiogUmV2aXNpb24gMS4zMCAgMjAwOS8wMi8wOCBoanQKLSoqIEludGVncmF0ZWQgZWFybGllciBmaXhlcwotKiogVXBncmFkZWQgdG8ga2VybmVsIDIuNi4yOCAodGhhbmtzIEplcm9tZSBQb3VsaW4pCi0qKgotKiogUmV2aXNpb24gMS4yOSAgMjAwNi8xMi8wMyAyMjoxMjowMCAgaGp0Ci0qKiBjaGFuZ2VkICdjb3dkZXZsb2NrJyBmcm9tIHNwaW5sb2NrIHRvIHNlbWFwaG9yZSwgdG8gYXZvaWQKLSoqICJzY2hlZHVsaW5nIHdoaWxlIGF0b21pYyIuIENvbnRyaWJ1dGVkIGJ5IEp1ZXJnZW4gQ2hyaXN0LgotKiogQWRkZWQgdmVyc2lvbi5oIGFnYWluCi0qKgotKiogUmV2aXNpb24gMS4yOCAgMjAwNi8wOC8xNiAxNjowMDowMCAgaGp0Ci0qKiBtYWxsb2MgZWFjaCBpbmRpdmlkdWFsIGNvd2xvb3BkZXZpY2Ugc3RydWN0IHNlcGFyYXRlbHkKLSoqCi0qKiBSZXZpc2lvbiAxLjI3ICAyMDA2LzAzLzE0IDE0OjU3OjAzICByb290Ci0qKiBSZW1vdmVkIGluY2x1ZGUgdmVyc2lvbi5oCi0qKgotKiogUmV2aXNpb24gMS4yNiAgMjAwNS8wOC8wOCAxMToyMjo0OCAgcm9vdAotKiogSW1wbGVtZW50IHBvc3NpYmlsaXR5IHRvIGNsb3NlIGEgY293IGZpbGUgb3IgcmVvcGVuIGEgY293ZmlsZSByZWFkLW9ubHkuCi0qKgotKiogUmV2aXNpb24gMS4yNSAgMjAwNS8wOC8wMyAxNDowMDozOSAgcm9vdAotKiogQWRkZWQgbW9kaW5mbyBpbmZvIHRvIGRyaXZlci4KLSoqCi0qKiBSZXZpc2lvbiAxLjI0ICAyMDA1LzA3LzIxIDA2OjE0OjUzICByb290Ci0qKiBDb3NtZXRpYyBjaGFuZ2VzIHNvdXJjZSBjb2RlLgotKioKLSoqIFJldmlzaW9uIDEuMjMgIDIwMDUvMDcvMjAgMTM6MDc6MzIgIHJvb3QKLSoqIFN1cHBseSBpb2N0bCB0byB3cml0ZSB3YXRjaGRvZyBwcm9ncmFtIHRvIHJlYWN0IG9uIGxhY2sgb2YgY293ZmlsZSBzcGFjZS4KLSoqCi0qKiBSZXZpc2lvbiAxLjIyICAyMDA1LzA3LzIwIDA3OjUzOjM0ICByb290Ci0qKiBSZWd1bGFyIHZlcmlmaWNhdGlvbiBvZiBmcmVlIHNwYWNlIGluIGZpbGVzeXN0ZW0gaG9sZGluZyB0aGUgY293ZmlsZQotKiogKGdpdmUgd2FybmluZ3Mgd2hlbmV2ZXIgc3BhY2UgaXMgYWxtb3N0IGV4aGF1c3RlZCkuCi0qKiBUZXJtaW5vbG9neSBjaGFuZ2U6IGNoZWNrc3VtIHJlbmFtZWQgdG8gZmluZ2VycHJpbnQuCi0qKgotKiogUmV2aXNpb24gMS4yMSAgMjAwNS8wNy8xOSAwOToyMTo1MiAgcm9vdAotKiogUmVtb3ZpbmcgbWF4aW11bSBsaW1pdCBvZiAxNiBHYiBwZXIgY293ZGV2aWNlLgotKioKLSoqIFJldmlzaW9uIDEuMjAgIDIwMDUvMDcvMTkgMDc6NTA6MzMgIHJvb3QKLSoqIE1pbm9yIGJ1Z2ZpeGVzIGFuZCBjb3NtZXRpYyBjaGFuZ2VzLgotKioKLSoqIFJldmlzaW9uIDEuMTkgIDIwMDUvMDYvMTAgMTI6Mjk6NTUgIHJvb3QKLSoqIFJlbW92ZWQgbG9jay91bmxvY2sgb3BlcmF0aW9uIGZyb20gY293bG9fb3BlbigpLgotKioKLSoqIFJldmlzaW9uIDEuMTggIDIwMDUvMDUvMDkgMTI6NTY6MjYgIHJvb3QKLSoqIEFsbG93IGEgY293ZGV2aWNlIHRvIGJlIG9wZW4gbW9yZSB0aGFuIG9uY2UKLSoqIChuZWVkZWQgZm9yIHN1cHBvcnQgb2YgUmVpc2VyRlMgYW5kIFhGUykuCi0qKgotKiogUmV2aXNpb24gMS4xNyAgMjAwNS8wMy8xNyAxNDozNjoxNiAgcm9vdAotKiogRml4ZWQgc29tZSBsaWNlbnNlIGlzc3Vlcy4KLSoqCi0qKiBSZXZpc2lvbiAxLjE2ICAyMDA1LzAzLzA3IDE0OjQyOjA1ICByb290Ci0qKiBPbmx5IGFsbG93IG9uZSBwYXJhbGxlbCBvcGVuIHBlciBjb3dkZXZpY2UuCi0qKgotKiogUmV2aXNpb24gMS4xNSAgMjAwNS8wMi8xOCAxMTo1MjowNCAgZ2VybG9mCi0qKiBSZWRlc2lnbiB0byBzdXBwb3J0IG1vcmUgdGhhbiBvbmUgY293ZGV2aWNlID4gMiBHYiBzcGFjZS4KLSoqCi0qKiBSZXZpc2lvbiAxLjE0ICAyMDA0LzA4LzE3IDE0OjE5OjE2ICBnZXJsb2YKLSoqIE1vZGlmaWVkIG91dHB1dCBvZiAvcHJvYy9jb3dsb29wLgotKioKLSoqIFJldmlzaW9uIDEuMTMgIDIwMDQvMDgvMTYgMDc6MjE6MTAgIGdlcmxvZgotKiogU2VwYXJhdGUgc3RhdGlzdGljYWwgY291bnRlciBmb3IgcmVhZCBvbiByZG9maWxlIGFuZCBjb3dmaWxlLgotKioKLSoqIFJldmlzaW9uIDEuMTIgIDIwMDQvMDgvMTEgMDY6NTI6MTEgIGdlcmxvZgotKiogTW9kaWZpZWQgbWVzc2FnZXMuCi0qKgotKiogUmV2aXNpb24gMS4xMSAgMjAwNC8wOC8xMSAwNjo0NDoxMSAgZ2VybG9mCi0qKiBNb2RpZmllZCBsb2cgbWVzc2FnZXMuCi0qKgotKiogUmV2aXNpb24gMS4xMCAgMjAwNC8wOC8xMCAxMjoyNzoyNyAgZ2VybG9mCi0qKiBDb3NtZXRpYyBjaGFuZ2VzLgotKioKLSoqIFJldmlzaW9uIDEuOSAgMjAwNC8wOC8wOSAxMTo0MzozNyAgZ2VybG9mCi0qKiBSZW1vdmVkIGRvdWJsZSBkZWZpbml0aW9uIG9mIG1ham9yIG51bWJlciAoQ09XTUFKT1IpLgotKioKLSoqIFJldmlzaW9uIDEuOCAgMjAwNC8wOC8wOSAwODowMzozOSAgZ2VybG9mCi0qKiBDbGVhbnVwIG9mIG1lc3NhZ2VzLgotKioKLSoqIFJldmlzaW9uIDEuNyAgMjAwNC8wNS8yNyAwNjozNzozMyAgZ2VybG9mCi0qKiBNb2RpZmllZCAvcHJvYyBtZXNzYWdlLgotKioKLSoqIFJldmlzaW9uIDEuNiAgMjAwNC8wNS8yNiAyMToyMzoyOCAgZ2VybG9mCi0qKiBNb2RpZmllZCAvcHJvYyBvdXRwdXQuCi0qKgotKiogUmV2aXNpb24gMS41ICAyMDA0LzA1LzI2IDEzOjIzOjM0ICBnZXJsb2YKLSoqIFN1cHBvcnQgY293c3luYyB0byBmb3JjZSBmbHVzaGluZyB0aGUgYml0bWFwcyBhbmQgY293aGVhZC4KLSoqCi0qKiBSZXZpc2lvbiAxLjQgIDIwMDQvMDUvMjYgMTE6MTE6MTAgIGdlcmxvZgotKiogVXBkYXRlZCB0aGUgY29tbWVudCB0byB0aGUgYWN0dWFsIHNpdHVhdGlvbi4KLSoqCi0qKiBSZXZpc2lvbiAxLjMgIDIwMDQvMDUvMjYgMTA6NTA6MDAgIGdlcmxvZgotKiogSW1wbGVtZW50ZWQgcmVjb3Zlcnktb3B0aW9uLgotKioKLSoqIFJldmlzaW9uIDEuMiAgMjAwNC8wNS8yNSAxNToxNDo0MSAgZ2VybG9mCi0qKiBNb2RpZmllZCBiaXRtYXAgZmx1c2hpbmcgc3RyYXRlZ3kuCi0qKgotKi8KLQotI2RlZmluZSBDT1dNQUpPUgkyNDEKLQotLy8gI2RlZmluZSBDT1dERUJVRwotCi0jaWZkZWYgCUNPV0RFQlVHCi0jZGVmaW5lIERFQlVHUAkJcHJpbnRrCi0jZGVmaW5lIERDT1cJCUtFUk5fQUxFUlQKLSNlbHNlCi0jZGVmaW5lIERFQlVHUChmb3JtYXQsIHguLi4pCi0jZW5kaWYKLQotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvYXV0b2NvbmYuaD4KLSNpZm5kZWYgQVVUT0NPTkZfSU5DTFVERUQKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KLSNlbmRpZgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L21ham9yLmg+Ci0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC9mcy5oPgotI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KLSNpbmNsdWRlIDxsaW51eC9zdGF0Lmg+Ci0jaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9zZW1hcGhvcmUuaD4KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgotI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KLSNpbmNsdWRlIDxsaW51eC9idWZmZXJfaGVhZC5oPgotI2luY2x1ZGUgPGxpbnV4L2hkcmVnLmg+Ci0jaW5jbHVkZSA8bGludXgvZ2VuaGQuaD4KLSNpbmNsdWRlIDxsaW51eC9zdGF0ZnMuaD4KLQotI2luY2x1ZGUgImNvd2xvb3AuaCIKLQotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotLyogTU9EVUxFX0FVVEhPUigiR2VybG9mIExhbmdldmVsZCA8Z2VybG9mQEFUQ29tcHV0aW5nLm5sPiIpOyAgICAgb2Jzb2xldGUgYWRkcmVzcyAqLwotTU9EVUxFX0FVVEhPUigiSGVuZHJpay1KYW4gVGhvbWFzc2VuIDxoanRAQVRDb21wdXRpbmcubmw+Iik7IC8qIGN1cnJlbnQgbWFpbnRhaW5lciAqLwotTU9EVUxFX0RFU0NSSVBUSU9OKCJDb3B5LW9uLXdyaXRlIGxvb3AgZHJpdmVyIik7Ci1NT0RVTEVfUEFSTV9ERVNDKG1heGNvd3MsICIgTnVtYmVyIG9mIGNvbmZpZ3VyZWQgY293ZGV2aWNlcyAoZGVmYXVsdCAxNikiKTsKLU1PRFVMRV9QQVJNX0RFU0MocmRvZmlsZSwgIiBSZWFkLW9ubHkgZmlsZSBmb3IgL2Rldi9jb3cvMCIpOwotTU9EVUxFX1BBUk1fREVTQyhjb3dmaWxlLCAiIENvd2ZpbGUgZm9yIC9kZXYvY293LzAiKTsKLU1PRFVMRV9QQVJNX0RFU0Mob3B0aW9uLCAiICBSZXBhaXIgY293ZmlsZSBpZiBpbmNvbnNpc3RlbnQ6IG9wdGlvbj1yIik7Ci0KLSNkZWZpbmUgREVWSUNFX05BTUUJImNvdyIKLQotI2RlZmluZQlERkxDT1dTCQkxNgkJLyogZGVmYXVsdCBjb3dsb29wIGRldmljZXMJKi8KLQotc3RhdGljIGludCBtYXhjb3dzID0gREZMQ09XUzsKLW1vZHVsZV9wYXJhbShtYXhjb3dzLCBpbnQsIDApOwotc3RhdGljIGNoYXIgKnJkb2ZpbGUgPSAiIjsKLW1vZHVsZV9wYXJhbShyZG9maWxlLCBjaGFycCwgMCk7Ci1zdGF0aWMgY2hhciAqY293ZmlsZSA9ICIiOwotbW9kdWxlX3BhcmFtKGNvd2ZpbGUsIGNoYXJwLCAwKTsKLXN0YXRpYyBjaGFyICpvcHRpb24gPSAiIjsKLW1vZHVsZV9wYXJhbShvcHRpb24sIGNoYXJwLCAwKTsKLQotLyoKLSoqIHBlciBjb3dkZXZpY2Ugc2V2ZXJhbCBiaXRtYXAgY2h1bmtzIGFyZSBhbGxvd2VkIG9mIE1BUENIVU5LU1ogZWFjaAotKioKLSoqIGVhY2ggYml0bWFwIGNodW5rIGNhbiBkZXNjcmliZSBNQVBDSFVOS1NaICogOCAqIE1BUFVOSVQgYnl0ZXMgb2YgZGF0YQotKiogc3VwcG9zZToKLSoqCU1BUENIVU5LU1ogNDA5NiBhbmQgTUFQVU5JVCAxMDI0IC0tPiA0MDk2ICogOCAqIDEwMjQgPSAzMiBNYiBwZXIgY2h1bmsKLSovCi0jZGVmaW5lCU1BUENIVU5LU1oJNDA5NgkvKiAjYnl0ZXMgcGVyIGJpdG1hcCBjaHVuayAgKGRvIG5vdCBjaGFuZ2UpICAqLwotCi0jZGVmaW5lIFNQQ01JTkJMSwkxMDAJLyogc3BhY2UgdGhyZXNob2xkIHRvIGdpdmUgd2FybmluZyBtZXNzYWdlcyAgKi8KLSNkZWZpbmUgU1BDREZMSU5UVkwJMTYJLyogb25jZSBldmVyeSBTUENERkxJTlRWTCB3cml0ZXMgdG8gY293ZmlsZSwgKi8KLQkJCQkvKiBhdmFpbGFibGUgc3BhY2UgaW4gZmlsZXN5c3RlbSBpcyBjaGVja2VkICAqLwotCi0jZGVmaW5lCUNBTENNQVAoeCkJKCh4KS8oTUFQQ0hVTktTWio4KSkKLSNkZWZpbmUJQ0FMQ0JZVEUoeCkJKCgoeCklKE1BUENIVU5LU1oqOCkpPj4zKQotI2RlZmluZQlDQUxDQklUKHgpCSgoeCkmNykKLQotI2RlZmluZSBBTExDT1cJCTEKLSNkZWZpbmUgQUxMUkRPCQkyCi0jZGVmaW5lIE1JWEVEVVAJCTMKLQotc3RhdGljIGNoYXIJYWxsemVyb2VzW01BUFVOSVRdOwotCi0vKgotKiogYWRtaW5pc3RyYXRpb24gcGVyIGNvd2RldmljZSAocGFpciBvZiBjb3dmaWxlL3Jkb2ZpbGUpCi0qLwotCi0vKiBiaXQtdmFsdWVzIGZvciBzdGF0ZSAqLwotI2RlZmluZQlDT1dERVZPUEVOCTB4MDEJLyogY293ZGV2aWNlIG9wZW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUJQ09XUldDT1dPUEVOCTB4MDIJLyogY293ZmlsZSBvcGVuZWQgcmVhZC13cml0ZSAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUJQ09XUkRDT1dPUEVOCTB4MDQJLyogY293ZmlsZSBvcGVuZWQgcmVhZC1vbmx5ICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUJQ09XV0FUQ0hET0cJMHgwOCAJLyogaW9jdGwgZm9yIHdhdGNoZG9nIGNvd2ZpbGUgc3BhY2UgYWN0aXZlICAgKi8KLQotI2RlZmluZQlDT1dDT1dPUEVOCShDT1dSV0NPV09QRU58Q09XUkRDT1dPUEVOKQotCi1zdHJ1Y3QgY293bG9vcF9kZXZpY2UKLXsKLQkvKgotCSoqIGN1cnJlbnQgc3RhdHVzCi0JKi8KLQlpbnQJCXN0YXRlOwkJCS8qIGJpdC12YWx1ZXMgKHNlZSBhYm92ZSkgICAgKi8KLQlpbnQJCW9wZW5jbnQ7CQkvKiAjIG9wZW5zIGZvciBjb3dkZXZpY2UgICAgICovCi0KLSAgICAgICAgLyoKLQkqKiBvcGVuIGZpbGUgcG9pbnRlcnMKLQkqLwotICAgICAgICBzdHJ1Y3QgZmlsZSAgCSpyZG9mcCwgICAqY293ZnA7CS8qIG9wZW4gZmlsZSBwb2ludGVycyAgICAgICAgKi8KLQljaGFyCQkqcmRvbmFtZSwgKmNvd25hbWU7CS8qIGZpbGUgbmFtZXMgICAgICAgICAgICAgICAgKi8KLQotCS8qCi0JKiogcmVxdWVzdCBxdWV1ZSBhZG1pbmlzdHJhdGlvbgotCSovCi0Jc3RydWN0IHJlcXVlc3RfcXVldWUJKnJxdWV1ZTsKLQlzcGlubG9ja190CQlycWxvY2s7Ci0Jc3RydWN0IGdlbmRpc2sJCSpnZDsKLQotCS8qCi0JKiogYWRtaW5pc3RyYXRpb24gYWJvdXQgcmVhZC1vbmx5IGZpbGUKLQkqLwotCXVuc2lnbmVkIGludAkgICAgIG51bWJsb2NrczsJLyogIyBibG9ja3MgaW5wdXQgZmlsZSBpbiBNQVBVTklUICAgICovCi0JdW5zaWduZWQgaW50CSAgICAgYmxvY2tzejsgICAvKiBtaW5pbXVtIHVuaXQgdG8gYWNjZXNzIHRoaXMgZGV2ICAgKi8KLQl1bnNpZ25lZCBsb25nCSAgICAgZmluZ2VycHJpbnQ7IC8qIGZpbmdlcnByaW50IG9mIGN1cnJlbnQgcmRvZmlsZSAgKi8KLQlzdHJ1Y3QgYmxvY2tfZGV2aWNlICAqYmVsb3dkZXY7CS8qIGJsb2NrIGRldmljZSBiZWxvdyB1cyAgICAgICAgICAgICAqLwotCXN0cnVjdCBnZW5kaXNrICAgICAgICpiZWxvd2dkOyAgLyogZ2VuZGlzayBmb3IgYmxrIGRldiBiZWxvdyB1cyAgICAgICovCi0Jc3RydWN0IHJlcXVlc3RfcXVldWUgKmJlbG93cTsJLyogcmVxLiBxdWV1ZSBvZiBibGsgZGV2IGJlbG93IHVzICAgICovCi0KLQkvKgotCSoqIGJpdG1hcCBhZG1pbmlzdHJhdGlvbiB0byByZWdpc3RlciB3aGljaCBibG9ja3MgYXJlIG1vZGlmaWVkCi0JKi8KLQlsb25nIGludAltYXBzaXplOwkvKiB0b3RhbCBzaXplIG9mIGJpdG1hcCAoYnl0ZXMpICAgICAgKi8KLQlsb25nIGludAltYXByZW1haW47CS8qIHJlbWFpbmluZyBieXRlcyBpbiBsYXN0IGJpdG1hcCAgICAqLwotCWludAkJbWFwY291bnQ7ICAgICAgIC8qIG51bWJlciBvZiBiaXRtYXBzIGluIHVzZSAgICAgICAgICAqLwotCWNoYXIgCQkqKm1hcGNhY2hlOwkvKiBhcmVhIHdpdGggcG9pbnRlcnMgdG8gYml0bWFwcyAgICAgKi8KLQotCWNoYXIJCSppb2J1ZjsJCS8qIGRhdGFidWZmZXIgb2YgTUFQVU5JVCBieXRlcyAgICAgICAqLwotCXN0cnVjdCBjb3doZWFkCSpjb3doZWFkOwkvKiBidWZmZXIgY29udGFpbmluZyBjb3doZWFkICAgICAgICAgKi8KLQotCS8qCi0JKiogYWRtaW5pc3RyYXRpb24gZm9yIGludGVyZmFjZSB3aXRoIHRoZSBrZXJuZWwtdGhyZWFkCi0JKi8KLQlpbnQJCXBpZDsJCS8qIHBpZD09MDogbm8gdGhyZWFkIGF2YWlsYWJsZSAgICAgICAqLwotCXN0cnVjdCByZXF1ZXN0CSpyZXE7CQkvKiByZXF1ZXN0IHRvIGJlIGhhbmRsZWQgbm93ICAgICAgICAgKi8KLQl3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0cTsJLyogd2FpdC1ROiB0aHJlYWQgd2FpdHMgZm9yIHdvcmsgICAgICovCi0JY2hhcgkJY2xvc2Vkb3duOwkvKiBib29sZWFuOiB0aHJlYWQgZXhpdCByZXF1aXJlZCAgICAgKi8KLQljaGFyCQlxZmlsbGVkOwkvKiBib29sZWFuOiBJL08gcmVxdWVzdCBwZW5kaW5nICAgICAgKi8KLQljaGFyCQlpb2J1c3k7CQkvKiBib29sZWFuOiByZXEgdW5kZXIgdHJlYXRtZW50ICAgICAgKi8KLQotCS8qCi0JKiogYWRtaW5pc3RyYXRpb24gdG8ga2VlcCB0cmFjayBvZiBmcmVlIHNwYWNlIGluIGNvd2ZpbGUgZmlsZXN5c3RlbQotCSovCi0JdW5zaWduZWQgbG9uZwlibGtzaXplOwkvKiBibG9jayBzaXplIG9mIGZzIChieXRlcykgICAgICAgICAgKi8KLQl1bnNpZ25lZCBsb25nCWJsa3RvdGFsOwkvKiByZWNlbnQgdG90YWwgc3BhY2UgaW4gZnMgKGJsb2NrcykgKi8KLQl1bnNpZ25lZCBsb25nCWJsa2F2YWlsOwkvKiByZWNlbnQgZnJlZSAgc3BhY2UgaW4gZnMgKGJsb2NrcykgKi8KLQotCXdhaXRfcXVldWVfaGVhZF90IHdhdGNocTsJLyogd2FpdC1ROiB3YXRjaGVyIGF3YWl0cyB0aHJlc2hvbGQgICovCi0JdW5zaWduZWQgbG9uZwl3YXRjaHRocmVzaDsJLyogdGhyZXNob2xkIG9mIHdhdGNoZXIgKGJsb2NrcykgICAgICovCi0KLQkvKgotCSoqIHN0YXRpc3RpY2FsIGNvdW50ZXJzCi0JKi8KLQl1bnNpZ25lZCBsb25nCXJkb3JlYWRzOwkvKiBudW1iZXIgb2YgIHJlYWQtYWN0aW9ucyByZG8gICAgICAgKi8KLQl1bnNpZ25lZCBsb25nCWNvd3JlYWRzOwkvKiBudW1iZXIgb2YgIHJlYWQtYWN0aW9ucyBjb3cgICAgICAgKi8KLQl1bnNpZ25lZCBsb25nCWNvd3dyaXRlczsJLyogbnVtYmVyIG9mIHdyaXRlLWFjdGlvbnMgICAgICAgICAgICovCi0JdW5zaWduZWQgbG9uZwlucmNvd2Jsb2NrczsJLyogbnVtYmVyIG9mIGJsb2NrcyBpbiB1c2Ugb24gY293ICAgICovCi19OwotCi1zdGF0aWMgc3RydWN0IGNvd2xvb3BfZGV2aWNlCSoqY293ZGV2YWxsOwkvKiBwdHIgdG8gcHRycyB0byBhbGwgY293ZGV2aWNlcyAqLwotc3RhdGljIHN0cnVjdCBzZW1hcGhvcmUgCWNvd2RldmxvY2s7CS8qIGdlbmVyaWMgbG9jayBmb3IgY293ZGV2cyAgICAgICovCi0KLXN0YXRpYyBzdHJ1Y3QgZ2VuZGlzawkJKmNvd2N0bGdkOwkvKiBnZW5kaXNrIGNvbnRyb2wgY2hhbm5lbCAgICAgICAqLwotc3RhdGljIHNwaW5sb2NrX3QJCWNvd2N0bHJxbG9jazsgICAvKiBmb3IgcmVxLnEuIG9mIGN0cmwuIGNoYW5uZWwgICAqLwotCi0vKgotKiogcHJpdmF0ZSBkaXJlY3RvcnkgL3Byb2MvY293Ci0qLwotc3RydWN0IHByb2NfZGlyX2VudHJ5CSpjb3dsb19wcm9jZGlyOwotCi0vKgotKiogZnVuY3Rpb24gcHJvdG90eXBlcwotKi8KLXN0YXRpYyBsb25nIGludCBjb3dsb19kb19yZXF1ZXN0IChzdHJ1Y3QgcmVxdWVzdCAqcmVxKTsKLXN0YXRpYyB2b2lkCWNvd2xvX3N5bmMgICAgICAgKHZvaWQpOwotc3RhdGljIGludAljb3dsb19jaGVja2lvICAgIChzdHJ1Y3QgY293bG9vcF9kZXZpY2UgKiwgICAgICAgICBpbnQsIGxvZmZfdCk7Ci1zdGF0aWMgaW50CWNvd2xvX3JlYWRtaXggICAgKHN0cnVjdCBjb3dsb29wX2RldmljZSAqLCB2b2lkICosIGludCwgbG9mZl90KTsKLXN0YXRpYyBpbnQJY293bG9fd3JpdGVtaXggICAoc3RydWN0IGNvd2xvb3BfZGV2aWNlICosIHZvaWQgKiwgaW50LCBsb2ZmX3QpOwotc3RhdGljIGxvbmcgaW50IGNvd2xvX3JlYWRyZG8gICAgKHN0cnVjdCBjb3dsb29wX2RldmljZSAqLCB2b2lkICosIGludCwgbG9mZl90KTsKLXN0YXRpYyBsb25nIGludCBjb3dsb19yZWFkY293ICAgIChzdHJ1Y3QgY293bG9vcF9kZXZpY2UgKiwgdm9pZCAqLCBpbnQsIGxvZmZfdCk7Ci1zdGF0aWMgbG9uZyBpbnQgY293bG9fcmVhZGNvd3JhdyAoc3RydWN0IGNvd2xvb3BfZGV2aWNlICosIHZvaWQgKiwgaW50LCBsb2ZmX3QpOwotc3RhdGljIGxvbmcgaW50IGNvd2xvX3dyaXRlY293ICAgKHN0cnVjdCBjb3dsb29wX2RldmljZSAqLCB2b2lkICosIGludCwgbG9mZl90KTsKLXN0YXRpYyBsb25nIGludCBjb3dsb193cml0ZWNvd3JhdyhzdHJ1Y3QgY293bG9vcF9kZXZpY2UgKiwgdm9pZCAqLCBpbnQsIGxvZmZfdCk7Ci1zdGF0aWMgaW50ICAgICAgY293bG9faW9jdGwgICAgICAoc3RydWN0IGJsb2NrX2RldmljZSAqLCBmbW9kZV90LAotICAgICAgICAgICAJCQkgCQl1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGxvbmcpOwotc3RhdGljIGludAljb3dsb19tYWtlcGFpciAgICAoc3RydWN0IGNvd3BhaXIgX191c2VyICopOwotc3RhdGljIGludAljb3dsb19yZW1vdmVwYWlyICAodW5zaWduZWQgbG9uZyAgX191c2VyICopOwotc3RhdGljIGludAljb3dsb193YXRjaCAgICAgICAoc3RydWN0IGNvd3BhaXIgX191c2VyICopOwotc3RhdGljIGludAljb3dsb19jb3djdGwgICAgICAodW5zaWduZWQgbG9uZyAgX191c2VyICosIGludCk7Ci1zdGF0aWMgaW50CWNvd2xvX29wZW5wYWlyICAgIChjaGFyICosIGNoYXIgKiwgaW50LCBpbnQpOwotc3RhdGljIGludCAJY293bG9fY2xvc2VwYWlyICAgKHN0cnVjdCBjb3dsb29wX2RldmljZSAqKTsKLXN0YXRpYyBpbnQJY293bG9fb3BlbnJkbyAgICAgKHN0cnVjdCBjb3dsb29wX2RldmljZSAqLCBjaGFyICopOwotc3RhdGljIGludAljb3dsb19vcGVuY293ICAgICAoc3RydWN0IGNvd2xvb3BfZGV2aWNlICosIGNoYXIgKiwgaW50KTsKLXN0YXRpYyB2b2lkCWNvd2xvX3VuZG9fb3BlbnJkbyhzdHJ1Y3QgY293bG9vcF9kZXZpY2UgKik7Ci1zdGF0aWMgdm9pZAljb3dsb191bmRvX29wZW5jb3coc3RydWN0IGNvd2xvb3BfZGV2aWNlICopOwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiBTeXN0ZW0gY2FsbCBoYW5kbGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qCi0qKiBoYW5kbGUgc3lzdGVtIGNhbGwgb3BlbigpL21vdW50KCkKLSoqCi0qKiByZXR1cm5zOgotKiogCTAgICAtIG9rYXkKLSoqICAgIDwgMCAgIC0gZXJyb3IgdmFsdWUKLSovCi1zdGF0aWMgaW50IGNvd2xvX29wZW4oc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgZm1vZGVfdCBtb2RlKQotewotCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBiZGV2LT5iZF9pbm9kZTsKLQotCWlmICghaW5vZGUpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKGltYWpvcihpbm9kZSkgIT0gQ09XTUFKT1IpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkgICAgICAgImNvd2xvb3AgLSB1bmV4cGVjdGVkIG1ham9yICVkXG4iLCBpbWFqb3IoaW5vZGUpKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCi0Jc3dpdGNoIChpbWlub3IoaW5vZGUpKSB7Ci0JICAgY2FzZSBDT1dDVEw6Ci0JCURFQlVHUChEQ09XImNvd2xvb3AgLSBvcGVuICVkIGNvbnRyb2xcbiIsIENPV0NUTCk7Ci0JCWJyZWFrOwotCi0JICAgZGVmYXVsdDoKLQkJREVCVUdQKERDT1ciY293bG9vcCAtIG9wZW4gbWlub3IgJWRcbiIsIGltaW5vcihpbm9kZSkpOwotCi0JCWlmICggaW1pbm9yKGlub2RlKSA+PSBtYXhjb3dzICkKLQkJCXJldHVybiAtRU5PREVWOwotCi0JCWlmICggISgoY293ZGV2YWxsW2ltaW5vcihpbm9kZSldKS0+c3RhdGUgJiBDT1dERVZPUEVOKSApCi0JCQlyZXR1cm4gLUVOT0RFVjsKLQotCQkoY293ZGV2YWxsW2ltaW5vcihpbm9kZSldKS0+b3BlbmNudCsrOwotCX0KLQotCXJldHVybiAwOwotfQotCi0vKgotKiogaGFuZGxlIHN5c3RlbSBjYWxsIGNsb3NlKCkvdW1vdW50KCkKLSoqCi0qKiByZXR1cm5zOgotKiogCTAgICAtIG9rYXkKLSovCi1zdGF0aWMgaW50IGNvd2xvX3JlbGVhc2Uoc3RydWN0IGdlbmRpc2sgKmdkLCBmbW9kZV90IG1vZGUpCi17Ci0Jc3RydWN0IGJsb2NrX2RldmljZSAqYmRldjsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlOwotCi0JYmRldiA9IGJkZ2V0X2Rpc2soZ2QsIDApOwotCWlub2RlID0gYmRldi0+YmRfaW5vZGU7Ci0JaWYgKCFpbm9kZSkKLQkJcmV0dXJuIDA7Ci0KLQlERUJVR1AoRENPVyJjb3dsb29wIC0gcmVsZWFzZSAoY2xvc2UpIG1pbm9yICVkXG4iLCBpbWlub3IoaW5vZGUpKTsKLQotCWlmICggaW1pbm9yKGlub2RlKSAhPSBDT1dDVEwpCi0JCShjb3dkZXZhbGxbaW1pbm9yKGlub2RlKV0pLT5vcGVuY250LS07Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSoqIGhhbmRsZSBzeXN0ZW0gY2FsbCBpb2N0bCgpCi0qKgotKiogcmV0dXJuczoKLSoqIAkwICAgLSBva2F5Ci0qKiAgICA8IDAgICAtIGVycm9yIHZhbHVlCi0qLwotc3RhdGljIGludCBjb3dsb19pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBmbW9kZV90IG1vZGUsCi0JCSAgICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKLXsKLQlzdHJ1Y3QgaGRfZ2VvbWV0cnkJZ2VvOwotCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBiZGV2LT5iZF9pbm9kZTsKLQotCURFQlVHUChEQ09XICJjb3dsb29wIC0gaW9jdGwgY21kICV4XG4iLCBjbWQpOwotCi0Jc3dpdGNoICggaW1pbm9yKGlub2RlKSApIHsKLQotCSAgIC8qCi0JICAgKiogYWxsb3dlZCB2aWEgY29udHJvbCBkZXZpY2Ugb25seQotCSAgICovCi0JICAgY2FzZSBDT1dDVEw6Ci0JCXN3aXRjaCAoY21kKSB7Ci0JCSAgIC8qCi0JCSAgICoqIHdyaXRlIGFsbCBiaXRtYXAgY2h1bmtzIGFuZCBjb3doZWFkZXJzIHRvIGNvd2ZpbGVzCi0JCSAgICovCi0JCSAgIGNhc2UgQ09XU1lOQzoKLQkJCWRvd24oJmNvd2RldmxvY2spOwotCQkJY293bG9fc3luYygpOwotCQkJdXAoJmNvd2RldmxvY2spOwotCQkJcmV0dXJuIDA7Ci0KLQkJICAgLyoKLQkJICAgKiogb3BlbiBhIG5ldyBjb3dkZXZpY2UgKHBhaXIgb2YgcmRvZmlsZS9jb3dmaWxlKQotCQkgICAqLwotCQkgICBjYXNlIENPV01LUEFJUjoKLQkJCXJldHVybiBjb3dsb19tYWtlcGFpcigodm9pZCBfX3VzZXIgKilhcmcpOwotCi0JCSAgIC8qCi0JCSAgICoqIGNsb3NlIGEgY293ZGV2aWNlIChwYWlyIG9mIHJkb2ZpbGUvY293ZmlsZSkKLQkJICAgKi8KLQkJICAgY2FzZSBDT1dSTVBBSVI6Ci0JCQlyZXR1cm4gY293bG9fcmVtb3ZlcGFpcigodm9pZCBfX3VzZXIgKilhcmcpOwotCi0JCSAgIC8qCi0JCSAgICoqIHdhdGNoIGZyZWUgc3BhY2Ugb2YgZmlsZXN5c3RlbSBjb250YWluaW5nIGNvd2ZpbGUKLQkJICAgKi8KLQkJICAgY2FzZSBDT1dXQVRDSDoKLQkJCXJldHVybiBjb3dsb193YXRjaCgodm9pZCBfX3VzZXIgKilhcmcpOwotCi0JCSAgIC8qCi0JCSAgICoqIGNsb3NlIGNvd2ZpbGUgZm9yIGFjdGl2ZSBkZXZpY2UKLQkJICAgKi8KLQkJICAgY2FzZSBDT1dDTE9TRToKLQkJCXJldHVybiBjb3dsb19jb3djdGwoKHZvaWQgX191c2VyICopYXJnLCBDT1dDTE9TRSk7Ci0KLQkJICAgLyoKLQkJICAgKiogcmVvcGVuIGNvd2ZpbGUgcmVhZC1vbmx5IGZvciBhY3RpdmUgZGV2aWNlCi0JCSAgICovCi0JCSAgIGNhc2UgQ09XUkRPUEVOOgotCQkJcmV0dXJuIGNvd2xvX2Nvd2N0bCgodm9pZCBfX3VzZXIgKilhcmcsIENPV1JET1BFTik7Ci0KLQkJICAgZGVmYXVsdDoKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9IC8qIGVuZCBvZiBzd2l0Y2ggb24gY29tbWFuZCAqLwotCi0JICAgLyoKLQkgICAqKiBhbGxvd2VkIGZvciBhbnkgb3RoZXIgY293ZGV2aWNlCi0JICAgKi8KLQkgICBkZWZhdWx0OgotCQlzd2l0Y2ggKGNtZCkgewotCQkgICAvKgotCQkgICAqKiBIRElPX0dFVEdFTyBtdXN0IGJlIHN1cHBvcnRlZCBmb3IgZmRpc2ssIGV0YwotCQkgICAqLwotCQkgICBjYXNlIEhESU9fR0VUR0VPOgotCQkJZ2VvLmN5bGluZGVycyA9IDA7Ci0JCQlnZW8uaGVhZHMgICAgID0gMDsKLQkJCWdlby5zZWN0b3JzICAgPSAwOwotCi0JCQlpZiAoY29weV90b191c2VyKCh2b2lkIF9fdXNlciAqKWFyZywgJmdlbywgc2l6ZW9mIGdlbykpCi0JCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCQlyZXR1cm4gMDsKLQotCQkgICBkZWZhdWx0OgotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0gLyogZW5kIG9mIHN3aXRjaCBvbiBpb2N0bC1jbWQgY29kZSBwYXJhbWV0ZXIgKi8KLQl9IC8qIGVuZCBvZiBzd2l0Y2ggb24gbWlub3IgbnVtYmVyICovCi19Ci0KLXN0YXRpYyBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgY293bG9fZm9wcyA9Ci17Ci0JLm93bmVyCSA9ICAgICBUSElTX01PRFVMRSwKLSAgICAgICAgLm9wZW4gICAgPSAgICAgY293bG9fb3BlbiwJLyogY2FsbGVkIHVwb24gb3BlbiAgKi8KLSAgICAgICAgLnJlbGVhc2UgPSAgICAgY293bG9fcmVsZWFzZSwJLyogY2FsbGVkIHVwb24gY2xvc2UgKi8KLSAgICAgICAgLmlvY3RsICAgPSAgICAgY293bG9faW9jdGwsICAgICAvKiBjYWxsZWQgdXBvbiBpb2N0bCAqLwotfTsKLQotLyoKLSoqIGhhbmRsZSBpb2N0bC1jb21tYW5kIENPV01LUEFJUjoKLSoqCW9wZW4gYSBuZXcgY293ZGV2aWNlIChwYWlyIG9mIHJkb2ZpbGUvY293ZmlsZSkgb24tdGhlLWZseQotKioKLSoqIHJldHVybnM6Ci0qKiAJMCAgIC0gb2theQotKiogICAgPCAwICAgLSBlcnJvciB2YWx1ZQotKi8KLXN0YXRpYyBpbnQKLWNvd2xvX21ha2VwYWlyKHN0cnVjdCBjb3dwYWlyIF9fdXNlciAqYXJnKQotewotCWludAkJaSwgcnY9MDsKLQlzdHJ1Y3QgY293cGFpcgljb3dwYWlyOwotCXVuc2lnbmVkIGNoYXIJKmNvd3BhdGg7Ci0JdW5zaWduZWQgY2hhcgkqcmRvcGF0aDsKLQotCS8qCi0JKiogcmV0cmlldmUgaW5mbyBhYm91dCBwYXRobmFtZXMKLQkqLwotCWlmICggY29weV9mcm9tX3VzZXIoJmNvd3BhaXIsIGFyZywgc2l6ZW9mIGNvd3BhaXIpICkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQlpZiAoIChNQUpPUihjb3dwYWlyLmRldmljZSkgIT0gQ09XTUFKT1IpICYmIChjb3dwYWlyLmRldmljZSAhPSBBTllERVYpICkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoIChNSU5PUihjb3dwYWlyLmRldmljZSkgPj0gbWF4Y293cykgICYmIChjb3dwYWlyLmRldmljZSAhPSBBTllERVYpICkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkvKgotCSoqIHJldHJpZXZlIHBhdGhuYW1lIHN0cmluZ3MKLQkqLwotCWlmICggKGNvd3BhaXIuY293ZmxlbiA+IFBBVEhfTUFYKSB8fCAoY293cGFpci5yZG9mbGVuID4gUEFUSF9NQVgpICkKLQkJcmV0dXJuIC1FTkFNRVRPT0xPTkc7Ci0KLQlpZiAoICEoY293cGF0aCA9IGttYWxsb2MoY293cGFpci5jb3dmbGVuKzEsIEdGUF9LRVJORUwpKSApCi0JCXJldHVybiAtRU5PTUVNOwotCi0JaWYgKCBjb3B5X2Zyb21fdXNlcihjb3dwYXRoLCAodm9pZCBfX3VzZXIgKiljb3dwYWlyLmNvd2ZpbGUsCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3dwYWlyLmNvd2ZsZW4pICkgewotCQlrZnJlZShjb3dwYXRoKTsKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JfQotCSooY293cGF0aCtjb3dwYWlyLmNvd2ZsZW4pID0gMDsKLQotCWlmICggIShyZG9wYXRoID0ga21hbGxvYyhjb3dwYWlyLnJkb2ZsZW4rMSwgR0ZQX0tFUk5FTCkpICkgewotCQlrZnJlZShjb3dwYXRoKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JaWYgKCBjb3B5X2Zyb21fdXNlcihyZG9wYXRoLCAodm9pZCBfX3VzZXIgKiljb3dwYWlyLnJkb2ZpbGUsCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3dwYWlyLnJkb2ZsZW4pICkgewotCQlrZnJlZShyZG9wYXRoKTsKLQkJa2ZyZWUoY293cGF0aCk7Ci0JCXJldHVybiAtRUZBVUxUOwotCX0KLQkqKHJkb3BhdGgrY293cGFpci5yZG9mbGVuKSA9IDA7Ci0KLQkvKgotCSoqIG9wZW4gbmV3IGNvd2RldmljZQotCSovCi0JaWYgKCBjb3dwYWlyLmRldmljZSA9PSBBTllERVYpIHsKLQkJLyoKLQkJKiogc2VhcmNoIGZpcnN0IHVudXNlZCBtaW5vcgotCQkqLwotCQlmb3IgKGk9MCwgcnY9LUVCVVNZOyBpIDwgbWF4Y293czsgaSsrKSB7Ci0JCQlpZiAoICEoKGNvd2RldmFsbFtpXSktPnN0YXRlICYgQ09XREVWT1BFTikgKSB7Ci0JCQkJcnYgPSBjb3dsb19vcGVucGFpcihyZG9wYXRoLCBjb3dwYXRoLCAwLCBpKTsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCi0JCWlmIChydikgeyAJCS8qIG9wZW4gZmFpbGVkPyAqLwotCQkJa2ZyZWUocmRvcGF0aCk7Ci0JCQlrZnJlZShjb3dwYXRoKTsKLQkJCXJldHVybiBydjsKLQkJfQotCi0JCS8qCi0JCSoqIHJldHVybiBuZXdseSBhbGxvY2F0ZWQgY293ZGV2aWNlIHRvIHVzZXIgc3BhY2UKLQkJKi8KLQkJY293cGFpci5kZXZpY2UgPSBNS0RFVihDT1dNQUpPUiwgaSk7Ci0KLQkJaWYgKCBjb3B5X3RvX3VzZXIoYXJnLCAmY293cGFpciwgc2l6ZW9mIGNvd3BhaXIpKSB7Ci0JCQlrZnJlZShyZG9wYXRoKTsKLQkJCWtmcmVlKGNvd3BhdGgpOwotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCX0KLQl9IGVsc2UgeyAJCS8qIHNwZWNpZmljIG1pbm9yIHJlcXVlc3RlZCAqLwotCQlpZiAoIChydiA9IGNvd2xvX29wZW5wYWlyKHJkb3BhdGgsIGNvd3BhdGgsIDAsCi0JCQkJCQlNSU5PUihjb3dwYWlyLmRldmljZSkpKSkgewotCQkJa2ZyZWUocmRvcGF0aCk7Ci0JCQlrZnJlZShjb3dwYXRoKTsKLQkJCXJldHVybiBydjsKLQkJfQotCX0KLQotCXJldHVybiAwOwotfQotCi0vKgotKiogaGFuZGxlIGlvY3RsLWNvbW1hbmQgQ09XUk1QQUlSOgotKiogCWRlYWN0aXZhdGUgYW4gZXhpc3RpbmcgY293ZGV2aWNlIChwYWlyIG9mIHJkb2ZpbGUvY293ZmlsZSkgb24tdGhlLWZseQotKioKLSoqIHJldHVybnM6Ci0qKiAJMCAgIC0gb2theQotKiogICAgPCAwICAgLSBlcnJvciB2YWx1ZQotKi8KLXN0YXRpYyBpbnQKLWNvd2xvX3JlbW92ZXBhaXIodW5zaWduZWQgbG9uZyBfX3VzZXIgKmFyZykKLXsKLQl1bnNpZ25lZCBsb25nCQljb3dkZXZpY2U7Ci0Jc3RydWN0IGNvd2xvb3BfZGV2aWNlCSpjb3dkZXY7Ci0KLQkvKgotCSoqIHJldHJpZXZlIGluZm8gYWJvdXQgZGV2aWNlIHRvIGJlIHJlbW92ZWQKLQkqLwotCWlmICggY29weV9mcm9tX3VzZXIoJmNvd2RldmljZSwgYXJnLCBzaXplb2YgY293ZGV2aWNlKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQkvKgotCSoqIHZlcmlmeSBtYWpvci1taW5vciBudW1iZXIKLQkqLwotCWlmICggTUFKT1IoY293ZGV2aWNlKSAhPSBDT1dNQUpPUikKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoIE1JTk9SKGNvd2RldmljZSkgPj0gbWF4Y293cykKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQljb3dkZXYgPSBjb3dkZXZhbGxbTUlOT1IoY293ZGV2aWNlKV07Ci0KLQlpZiAoICEoY293ZGV2LT5zdGF0ZSAmIENPV0RFVk9QRU4pICkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQkvKgotCSoqIHN5bmNocm9uaXplIGJpdG1hcHMgYW5kIGNsb3NlIGNvd2RldmljZQotCSovCi0JaWYgKGNvd2Rldi0+c3RhdGUgJiBDT1dSV0NPV09QRU4pIHsKLQkJZG93bigmY293ZGV2bG9jayk7Ci0JCWNvd2xvX3N5bmMoKTsKLQkJdXAoJmNvd2RldmxvY2spOwotCX0KLQotCXJldHVybiBjb3dsb19jbG9zZXBhaXIoY293ZGV2KTsKLX0KLQotLyoKLSoqIGhhbmRsZSBpb2N0bC1jb21tYW5kIENPV1dBVENIOgotKioJd2F0Y2ggdGhlIGZyZWUgc3BhY2Ugb2YgdGhlIGZpbGVzeXN0ZW0gY29udGFpbmluZyBhIGNvd2ZpbGUKLSoqICAgICAgb2YgYW4gb3BlbiBjb3dkZXZpY2UKLSoqCi0qKiByZXR1cm5zOgotKiogCTAgICAtIG9rYXkKLSoqICAgIDwgMCAgIC0gZXJyb3IgdmFsdWUKLSovCi1zdGF0aWMgaW50Ci1jb3dsb193YXRjaChzdHJ1Y3QgY293cGFpciBfX3VzZXIgKmFyZykKLXsKLQlzdHJ1Y3QgY293bG9vcF9kZXZpY2UJKmNvd2RldjsKLQlzdHJ1Y3QgY293d2F0Y2gJCWNvd3dhdGNoOwotCi0JLyoKLQkqKiByZXRyaWV2ZSBzdHJ1Y3R1cmUgaG9sZGluZyBpbmZvCi0JKi8KLQlpZiAoIGNvcHlfZnJvbV91c2VyKCZjb3d3YXRjaCwgYXJnLCBzaXplb2YgY293d2F0Y2gpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQotCS8qCi0JKiogdmVyaWZ5IGlmIGNvd2RldmljZSBleGlzdHMgYW5kIGlzIGN1cnJlbnRseSBvcGVuCi0JKi8KLQlpZiAoIE1JTk9SKGNvd3dhdGNoLmRldmljZSkgPj0gbWF4Y293cykKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQljb3dkZXYgPSBjb3dkZXZhbGxbTUlOT1IoY293d2F0Y2guZGV2aWNlKV07Ci0KLQlpZiAoICEoY293ZGV2LT5zdGF0ZSAmIENPV0RFVk9QRU4pICkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQkvKgotCSoqIGlmIHRoZSBXQVRDSFdBSVQtb3B0aW9uIGlzIHNldCwgd2FpdCB1bnRpbCB0aGUgaW5kaWNhdGVkCi0JKiogdGhyZXNob2xkIGlzIHJlYWNoZWQgKG9ubHkgb25lIHdhaXRlciBhbGxvd2VkKQotCSovCi0JaWYgKGNvd3dhdGNoLmZsYWdzICYgV0FUQ0hXQUlUKSB7Ci0JCS8qCi0JCSoqIGNoZWNrIGlmIGFscmVhZHkgYW5vdGhlciB3YWl0ZXIgYWN0aXZlCi0JCSoqIGZvciB0aGlzIGNvd2RldmljZQotCQkqLwotCQlpZiAoY293ZGV2LT5zdGF0ZSAmIENPV1dBVENIRE9HKQotCQkJcmV0dXJuIC1FQUdBSU47Ci0KLQkJY293ZGV2LT5zdGF0ZSB8PSBDT1dXQVRDSERPRzsKLQotCQljb3dkZXYtPndhdGNodGhyZXNoID0gKHVuc2lnbmVkIGxvbmcgbG9uZykKLQkJICAgICAgICAgICAgICAgICAgICAgIGNvd3dhdGNoLnRocmVzaG9sZCAvCi0JCQkJICAgICAgKGNvd2Rldi0+Ymxrc2l6ZSAvIDEwMjQpOwotCi0JCWlmICh3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoY293ZGV2LT53YXRjaHEsCi0JCSAgICAgICAgICAgICAgICAgICAgY293ZGV2LT53YXRjaHRocmVzaCA+PSBjb3dkZXYtPmJsa2F2YWlsKSkgewotCQkJY293ZGV2LT5zdGF0ZSAmPSB+Q09XV0FUQ0hET0c7Ci0JCQlyZXR1cm4gRUlOVFI7Ci0JCX0KLQotCQljb3dkZXYtPnN0YXRlICY9IH5DT1dXQVRDSERPRzsKLQl9Ci0KLQljb3d3YXRjaC50b3RhbGtiID0gKHVuc2lnbmVkIGxvbmcgbG9uZyljb3dkZXYtPmJsa3RvdGFsICoKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3dkZXYtPmJsa3NpemUgLyAxMDI0OwotCWNvd3dhdGNoLmF2YWlsa2IgPSAodW5zaWduZWQgbG9uZyBsb25nKWNvd2Rldi0+YmxrYXZhaWwgKgotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvd2Rldi0+Ymxrc2l6ZSAvIDEwMjQ7Ci0KLQlpZiAoIGNvcHlfdG9fdXNlcihhcmcsICZjb3d3YXRjaCwgc2l6ZW9mIGNvd3dhdGNoKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSoqIGhhbmRsZSBpb2N0bC1jb21tYW5kcyBDT1dDTE9TRSBhbmQgQ09XUkRPUEVOOgotKioJQ09XQ0xPU0UgIC0gY2xvc2UgdGhlIGNvd2ZpbGUgd2hpbGUgdGhlIGNvd2RldmljZSByZW1haW5zIG9wZW47Ci0qKiAgICAgICAgICAgICAgICAgIHRoaXMgYWxsb3dzIGFuIHVubW91bnQgb2YgdGhlIGZpbGVzeXN0ZW0gb24gd2hpY2gKLSoqICAgICAgICAgICAgICAgICAgdGhlIGNvd2ZpbGUgcmVzaWRlcwotKioJQ09XUkRPUEVOIC0gY2xvc2UgdGhlIGNvd2ZpbGUgYW5kIHJlb3BlbiBpdCBmb3IgcmVhZC1vbmx5OwotKiogICAgICAgICAgICAgICAgICB0aGlzIGFsbG93cyBhIHJlbW91bnQgcmVhZC1vbnkgb2YgdGhlIGZpbGVzeXN0ZW0KLSoqICAgICAgICAgICAgICAgICAgb24gd2hpY2ggdGhlIGNvd2ZpbGUgcmVzaWRlcwotKioKLSoqIHJldHVybnM6Ci0qKiAJMCAgIC0gb2theQotKiogICAgPCAwICAgLSBlcnJvciB2YWx1ZQotKi8KLXN0YXRpYyBpbnQKLWNvd2xvX2Nvd2N0bCh1bnNpZ25lZCBsb25nIF9fdXNlciAqYXJnLCBpbnQgY21kKQotewotCXN0cnVjdCBjb3dsb29wX2RldmljZQkqY293ZGV2OwotCXVuc2lnbmVkIGxvbmcJCWNvd2RldmljZTsKLQotCS8qCi0JKiogcmV0cmlldmUgaW5mbyBhYm91dCBkZXZpY2UgdG8gYmUgcmVtb3ZlZAotCSovCi0JaWYgKCBjb3B5X2Zyb21fdXNlcigmY293ZGV2aWNlLCBhcmcsIHNpemVvZiBjb3dkZXZpY2UpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQotCS8qCi0JKiogdmVyaWZ5IG1ham9yLW1pbm9yIG51bWJlcgotCSovCi0JaWYgKCBNQUpPUihjb3dkZXZpY2UpICE9IENPV01BSk9SKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmICggTUlOT1IoY293ZGV2aWNlKSA+PSBtYXhjb3dzKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWNvd2RldiA9IGNvd2RldmFsbFtNSU5PUihjb3dkZXZpY2UpXTsKLQotCWlmICggIShjb3dkZXYtPnN0YXRlICYgQ09XREVWT1BFTikgKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCS8qCi0JKiogc3luY2hyb25pemUgYml0bWFwcyBhbmQgY2xvc2UgY293ZmlsZQotCSovCi0JaWYgKGNvd2Rldi0+c3RhdGUgJiBDT1dSV0NPV09QRU4pIHsKLQkJZG93bigmY293ZGV2bG9jayk7Ci0JCWNvd2xvX3N5bmMoKTsKLQkJdXAoJmNvd2RldmxvY2spOwotCX0KLQotCS8qCi0JKiogaGFuZGxlIHNwZWNpZmljIGlvY3RsLWNvbW1hbmQKLQkqLwotCXN3aXRjaCAoY21kKSB7Ci0JICAgY2FzZSBDT1dSRE9QRU46Ci0JCS8qCi0JCSoqIGlmIHRoZSBjb3dmaWxlIGlzIHN0aWxsIG9wZW5lZCByZWFkLXdyaXRlCi0JCSovCi0JCWlmIChjb3dkZXYtPnN0YXRlICYgQ09XUldDT1dPUEVOKSB7Ci0JCQkvKgotCQkJKiogY2xvc2UgdGhlIGNvd2ZpbGUKLQkJCSovCi0gIAkJCWlmIChjb3dkZXYtPmNvd2ZwKQotCQkgIAkJZmlscF9jbG9zZShjb3dkZXYtPmNvd2ZwLCAwKTsKLQotCQkJY293ZGV2LT5zdGF0ZSAmPSB+Q09XUldDT1dPUEVOOwotCi0JCQkvKgotCQkJKiogb3BlbiBhZ2FpbiBmb3IgcmVhZC1vbmx5Ci0JCQkqLwotCQkJY293ZGV2LT5jb3dmcCA9IGZpbHBfb3Blbihjb3dkZXYtPmNvd25hbWUsCi0JCSAgICAgICAgICAgICAgICAgICAgICAgICAgT19SRE9OTFl8T19MQVJHRUZJTEUsIDA2MDApOwotCi0JCQlpZiAoIChjb3dkZXYtPmNvd2ZwID09IE5VTEwpIHx8IElTX0VSUihjb3dkZXYtPmNvd2ZwKSApIHsKLQkJCQlwcmludGsoS0VSTl9FUlIKLQkJCQkgICAgICJjb3dsb29wIC0gZmFpbGVkIHRvIHJlb3BlbiBjb3dmaWxlICVzXG4iLAotCQkJCSAgICAgY293ZGV2LT5jb3duYW1lKTsKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCX0KLQotCQkJLyoKLQkJCSoqIG1hcmsgY293ZmlsZSBvcGVuIGZvciByZWFkLW9ubHkKLQkJCSovCi0JCQljb3dkZXYtPnN0YXRlIHw9IENPV1JEQ09XT1BFTjsKLQkJfSBlbHNlIHsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JCWJyZWFrOwotCi0JICAgY2FzZSBDT1dDTE9TRToKLQkJLyoKLQkJKiogaWYgdGhlIGNvd2ZpbGUgaXMgc3RpbGwgb3BlbgotCQkqLwotCQlpZiAoY293ZGV2LT5zdGF0ZSAmIENPV0NPV09QRU4pIHsKLQkJCS8qCi0JCQkqKiBjbG9zZSB0aGUgY293ZmlsZQotCQkJKi8KLSAgCQkJaWYgKGNvd2Rldi0+Y293ZnApCi0JCSAgCQlmaWxwX2Nsb3NlKGNvd2Rldi0+Y293ZnAsIDApOwotCi0JCQljb3dkZXYtPnN0YXRlICY9IH5DT1dDT1dPUEVOOwotCQl9Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogSGFuZGxpbmcgb2YgSS9PLXJlcXVlc3RzIGZvciBhIGNvd2RldmljZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKgotKiogZnVuY3Rpb24gdG8gYmUgY2FsbGVkIGJ5IGNvcmUta2VybmVsIHRvIGhhbmRsZSB0aGUgSS9PLXJlcXVlc3RzCi0qKiBpbiB0aGUgcXVldWUKLSovCi1zdGF0aWMgdm9pZCBjb3dsb19yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKQotewotCXN0cnVjdCByZXF1ZXN0CQkqcmVxOwotCXN0cnVjdCBjb3dsb29wX2RldmljZQkqY293ZGV2OwotCi0JREVCVUdQKERDT1cgImNvd2xvb3AgLSByZXF1ZXN0IGZ1bmN0aW9uIGNhbGxlZC4uLi5cbiIpOwotCi0Jd2hpbGUoKHJlcSA9IGJsa19wZWVrX3JlcXVlc3QocSkpICE9IE5VTEwpIHsKLQkJREVCVUdQKERDT1cgImNvd2xvb3AgLSBnb3QgbmV4dCByZXF1ZXN0XG4iKTsKLQotCQlpZiAoISBibGtfZnNfcmVxdWVzdChyZXEpKSB7Ci0gICAgICAgICAgICAgICAJCSAvKiB0aGlzIGlzIG5vdCBhIG5vcm1hbCBmaWxlIHN5c3RlbSByZXF1ZXN0ICovCi0gICAgICAgICAgICAgICAgCV9fYmxrX2VuZF9yZXF1ZXN0X2N1cihyZXEsIC1FSU8pOwotICAgICAgICAgICAgICAgIAljb250aW51ZTsKLSAgICAgICAgCX0KLQkJY293ZGV2ID0gcmVxLT5ycV9kaXNrLT5wcml2YXRlX2RhdGE7Ci0KLQkJaWYgKGNvd2Rldi0+aW9idXN5KQotCQkJcmV0dXJuOwotCQllbHNlCi0JCQljb3dkZXYtPmlvYnVzeSA9IDE7Ci0KLQkJLyoKLQkJKiogd2hlbiBubyBrZXJuZWwtdGhyZWFkIGlzIGF2YWlsYWJsZSwgdGhlIHJlcXVlc3Qgd2lsbAotCQkqKiBwcm9kdWNlIGFuIEkvTy1lcnJvcgotCQkqLwotCQlpZiAoIWNvd2Rldi0+cGlkKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIiY293bG9vcCAtIG5vIHRocmVhZCBhdmFpbGFibGVcbiIpOwotCQkJX19ibGtfZW5kX3JlcXVlc3RfY3VyKHJlcSwgLUVJTyk7CS8qIHJlcXVlc3QgZmFpbGVkICovCi0JCQljb3dkZXYtPmlvYnVzeQk9IDA7Ci0JCQljb250aW51ZTsKLQkJfQotCi0JCS8qCi0JCSoqIGhhbmRsZSBJL08tcmVxdWVzdCBpbiB0aGUgY29udGV4dCBvZiB0aGUga2VybmVsLXRocmVhZAotCQkqLwotCQljb3dkZXYtPnJlcSAJPSByZXE7Ci0JCWNvd2Rldi0+cWZpbGxlZAk9IDE7Ci0KLQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlX3N5bmMoJmNvd2Rldi0+d2FpdHEpOwotCi0JCS8qCi0JCSoqIGdldCBvdXQgb2YgdGhpcyBmdW5jdGlvbiBub3cgd2hpbGUgdGhlIEkvTy1yZXF1ZXN0IGlzCi0JCSoqIHVuZGVyIHRyZWF0bWVudCBvZiB0aGUga2VybmVsLXRocmVhZDsgdGhpcyBmdW5jdGlvbgotCQkqKiB3aWxsIGJlIGNhbGxlZCBhZ2FpbiBhZnRlciB0aGUgY3VycmVudCBJL08tcmVxdWVzdCBoYXMKLQkJKiogYmVlbiBmaW5pc2hlZCBieSB0aGUgdGhyZWFkCi0JCSovCi0JCXJldHVybjsKLQl9Ci19Ci0KLS8qCi0qKiBkYWVtb24tcHJvY2VzcyAoa2VybmVsLXRocmVhZCkgZXhlY3V0ZXMgdGhpcyBmdW5jdGlvbgotKi8KLXN0YXRpYyBpbnQKLWNvd2xvX2RhZW1vbihzdHJ1Y3QgY293bG9vcF9kZXZpY2UgKmNvd2RldikKLXsKLQlpbnQJcnY7Ci0JaW50ICAgICBtaW5vcjsKLQljaGFyCW15bmFtZVsxNl07Ci0KLQlmb3IgKG1pbm9yID0gMDsgbWlub3IgPCBtYXhjb3dzOyBtaW5vcisrKSB7Ci0JCWlmIChjb3dkZXYgPT0gY293ZGV2YWxsW21pbm9yXSkgYnJlYWs7Ci0JfQotCXNwcmludGYobXluYW1lLCAiY293bG9vcGQlZCIsIG1pbm9yKTsKLQotICAgICAgICBkYWVtb25pemUobXluYW1lKTsKLQotCXdoaWxlICghY293ZGV2LT5jbG9zZWRvd24pIHsKLQkJLyoKLQkJKiogc2xlZXAgd2hpbGUgd2FpdGluZyBmb3IgYW4gSS9PIHJlcXVlc3Q7Ci0JCSoqIG5vdGUgdGhhdCBubyBub24taW50ZXJydXB0aWJsZSB3YWl0IGhhcyBiZWVuIHVzZWQKLQkJKiogYmVjYXVzZSB0aGUgbm9uLWludGVycnVwdGlibGUgdmVyc2lvbiBvZgotCQkqKiBhICpzeW5jaHJvbm91cyogd2FrZV91cCBkb2VzIG5vdCBleGlzdCAoYW55IG1vcmUpCi0JCSovCi0JCWlmICh3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoY293ZGV2LT53YWl0cSwgY293ZGV2LT5xZmlsbGVkKSl7Ci0JCQlmbHVzaF9zaWduYWxzKGN1cnJlbnQpOyAvKiBpZ25vcmUgc2lnbmFsLWJhc2VkIHdha2V1cCAqLwotCQkJY29udGludWU7Ci0JCX0KLQotCQlpZiAoY293ZGV2LT5jbG9zZWRvd24pCQkvKiBtb2R1bGUgd2lsbCBiZSB1bmxvYWRlZCA/ICovewotCQkJY293ZGV2LT5waWQgPSAwOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQotCQkvKgotCQkqKiB3b2tlbiB1cCBieSB0aGUgSS9PLXJlcXVlc3QgaGFuZGxlcjoJdHJlYXQgcmVxdWVzdGVkIEkvTwotCQkqLwotCQljb3dkZXYtPnFmaWxsZWQgPSAwOwotCi0JCXJ2ID0gY293bG9fZG9fcmVxdWVzdChjb3dkZXYtPnJlcSk7Ci0KLQkJLyoKLQkJKiogcmVhY3F1aXJlIHRoZSBxdWV1ZS1zcGlubG9jayBmb3IgbWFuaXB1bGF0aW5nCi0JCSoqIHRoZSByZXF1ZXN0LXF1ZXVlIGFuZCBkZXF1ZXVlIHRoZSByZXF1ZXN0Ci0JCSovCi0JCXNwaW5fbG9ja19pcnEoJmNvd2Rldi0+cnFsb2NrKTsKLQotCQlfX2Jsa19lbmRfcmVxdWVzdF9jdXIoY293ZGV2LT5yZXEsIHJ2KTsKLQkJY293ZGV2LT5pb2J1c3kgPSAwOwotCi0JCS8qCi0JCSoqIGluaXRpYXRlIHRoZSBuZXh0IHJlcXVlc3QgZnJvbSB0aGUgcXVldWUKLQkJKi8KLQkJY293bG9fcmVxdWVzdChjb3dkZXYtPnJxdWV1ZSk7Ci0KLQkJc3Bpbl91bmxvY2tfaXJxKCZjb3dkZXYtPnJxbG9jayk7Ci0JfQotCXJldHVybiAwOwotfQotCi0vKgotKiogZnVuY3Rpb24gdG8gYmUgY2FsbGVkIGluIHRoZSBjb250ZXh0IG9mIHRoZSBrZXJuZWwgdGhyZWFkCi0qKiB0byBoYW5kbGUgdGhlIHF1ZXVlZCBJL08tcmVxdWVzdHMKLSoqCi0qKiByZXR1cm5zOgotKiogCTAgICAtIGZhaWwKLSoqICAgICAgMSAgIC0gc3VjY2VzcwotKi8KLXN0YXRpYyBsb25nIGludAotY293bG9fZG9fcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdCAqcmVxKQotewotCXVuc2lnbmVkIGxvbmcJCWxlbjsKLQlsb25nIGludAkJcnY7Ci0JbG9mZl90IAkJCW9mZnNldDsKLQlzdHJ1Y3QgY293bG9vcF9kZXZpY2UJKmNvd2RldiA9IHJlcS0+cnFfZGlzay0+cHJpdmF0ZV9kYXRhOwotCi0JLyoKLQkqKiBjYWxjdWxhdGUgc29tZSB2YXJpYWJsZXMgd2hpY2ggYXJlIG5lZWRlZCBsYXRlciBvbgotCSovCi0JbGVuICAgICA9ICAgICAgICAgIGJsa19ycV9jdXJfc2VjdG9ycyhyZXEpIDw8IDk7Ci0Jb2Zmc2V0ICA9IChsb2ZmX3QpIGJsa19ycV9wb3MocmVxKSAgICAgICAgIDw8IDk7Ci0KLQlERUJVR1AoRENPVyJjb3dsb29wIC0gcmVxIGNtZD0lZCBvZmZzZXQ9JWxsZCBsZW49JWx1IGFkZHI9JXBcbiIsCi0JCQkJKihyZXEtPmNtZCksIG9mZnNldCwgbGVuLCByZXEtPmJ1ZmZlcik7Ci0KLQkvKgotCSoqIGhhbmRsZSBSRUFELSBvciBXUklURS1yZXF1ZXN0Ci0JKi8KLQlzd2l0Y2ggKHJxX2RhdGFfZGlyKHJlcSkpIHsKLQkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQkgICBjYXNlIFJFQUQ6Ci0JCXN3aXRjaCAoIGNvd2xvX2NoZWNraW8oY293ZGV2LCBsZW4sIG9mZnNldCkgKSB7Ci0JCSAgIGNhc2UgQUxMQ09XOgotCQkJcnYgPSBjb3dsb19yZWFkY293KGNvd2RldiwgcmVxLT5idWZmZXIsIGxlbiwgb2Zmc2V0KTsKLQkJCWJyZWFrOwotCi0JCSAgIGNhc2UgQUxMUkRPOgotCQkJcnYgPSBjb3dsb19yZWFkcmRvKGNvd2RldiwgcmVxLT5idWZmZXIsIGxlbiwgb2Zmc2V0KTsKLQkJCWJyZWFrOwotCi0JICAgCSAgIGNhc2UgTUlYRURVUDoKLQkJCXJ2ID0gY293bG9fcmVhZG1peChjb3dkZXYsIHJlcS0+YnVmZmVyLCBsZW4sIG9mZnNldCk7Ci0JCQlicmVhazsKLQotCQkgICBkZWZhdWx0OgotCQkJcnYgPSAwOwkvKiBuZXZlciBoYXBwZW5zICovCi0JCX0KLQkJYnJlYWs7Ci0KLQkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQkgICBjYXNlIFdSSVRFOgotCQlzd2l0Y2ggKCBjb3dsb19jaGVja2lvKGNvd2RldiwgbGVuLCBvZmZzZXQpICkgewotCQkgICBjYXNlIEFMTENPVzoKLQkJCS8qCi0JCQkqKiBzdHJhaWdodC1mb3J3YXJkIHdyaXRlIHdpbGwgZG8uLi4KLQkJCSovCi0JCQlERUJVR1AoRENPVyJjb3dsb29wIC0gd3JpdGUgc3RyYWlnaHQgIik7Ci0KLQkJCXJ2ID0gY293bG9fd3JpdGVjb3coY293ZGV2LCByZXEtPmJ1ZmZlciwgbGVuLCBvZmZzZXQpOwotCQkJYnJlYWs7CS8qIGZyb20gc3dpdGNoICovCi0KLQkJICAgY2FzZSBBTExSRE86Ci0JCQlpZiAoIChsZW4gJiBNVU1BU0spID09IDApIHsKLQkJCQlERUJVR1AoRENPVyJjb3dsb29wIC0gd3JpdGUgc3RyYWlnaHQgIik7Ci0KLQkJCQlydiA9IGNvd2xvX3dyaXRlY293KGNvd2RldiwgcmVxLT5idWZmZXIsCi0JCQkJCQkJCWxlbiwgb2Zmc2V0KTsKLQkJCQlicmVhazsKLQkJCX0KLQotCSAgIAkgICBjYXNlIE1JWEVEVVA6Ci0JCQlydiA9IGNvd2xvX3dyaXRlbWl4KGNvd2RldiwgcmVxLT5idWZmZXIsIGxlbiwgb2Zmc2V0KTsKLQkJCWJyZWFrOwotCi0JCSAgIGRlZmF1bHQ6Ci0JCQlydiA9IDA7CS8qIG5ldmVyIGhhcHBlbnMgKi8KLQkJfQotCQlicmVhazsKLQotCSAgIGRlZmF1bHQ6Ci0JCXByaW50ayhLRVJOX0VSUgotCQkgICAgICAgImNvd2xvb3AgLSB1bnJlY29nbml6ZWQgY29tbWFuZCAlZFxuIiwgKihyZXEtPmNtZCkpOwotCQlydiA9IDA7Ci0JfQotCi0JcmV0dXJuIChydiA8PSAwID8gMCA6IDEpOwotfQotCi0vKgotKiogY2hlY2sgZm9yIGEgZ2l2ZW4gSS9PLXJlcXVlc3QgaWYgYWxsIHVuZGVybHlpbmcgYmxvY2tzCi0qKiAod2l0aCBzaXplIE1BUFVOSVQpIGFyZSBlaXRoZXIgaW4gdGhlIHJlYWQtb25seSBmaWxlIG9yIGluCi0qKiB0aGUgY293ZmlsZSAob3IgYSBjb21iaW5hdGlvbiBvZiB0aGUgdHdvKQotKioKLSoqIHJldHVybnM6Ci0qKiAJQUxMUkRPICAtIGFsbCB1bmRlcmx5aW5nIGJsb2NrcyBpbiByZG9maWxlCi0qKiAgICAgIEFMTENPVyAgLSBhbGwgdW5kZXJseWluZyBibG9ja3MgaW4gY293ZmlsZQotKiogICAgICBNSVhFRFVQIC0gdW5kZXJseWluZyBibG9ja3MgcGFydGx5IGluIHJkb2ZpbGUgYW5kIHBhcnRseSBpbiBjb3dmaWxlCi0qLwotc3RhdGljIGludAotY293bG9fY2hlY2tpbyhzdHJ1Y3QgY293bG9vcF9kZXZpY2UgKmNvd2RldiwgaW50IGxlbiwgbG9mZl90IG9mZnNldCkKLXsKLQl1bnNpZ25lZCBsb25nCW1hcG51bSwgYnl0ZW51bSwgYml0bnVtLCBibG9ja25yLCBwYXJ0bGVuOwotCWxvbmcgaW50CXRvdGNudCwgY293Y250OwotCWNoYXIJCSptYzsKLQotCS8qCi0JKiogbm90aWNlIHRoYXQgdGhlIHJlcXVlc3RlZCBibG9jayBtaWdodCBjcm9zcwotCSoqIGEgYmxvY2tzaXplIGJvdW5kYXJ5IHdoaWxlIG9uZSBvZiB0aGUgY29uY2VybmVkCi0JKiogYmxvY2tzIHJlc2lkZXMgaW4gdGhlIHJlYWQtb25seSBmaWxlIGFuZCBhbm90aGVyCi0JKiogb25lIGluIHRoZSBjb3B5LW9uLXdyaXRlIGZpbGU7IGluIHRoYXQgY2FzZSB0aGUKLSAgICAgICAgKiogcmVxdWVzdCB3aWxsIGJlIGJyb2tlbiB1cCBpbnRvIHBpZWNlcwotCSovCi0JaWYgKCAobGVuIDw9IE1BUFVOSVQpICYmCi0JICAgICAoTUFQVU5JVCAtIChvZmZzZXQgJiBNVU1BU0spIDw9IGxlbikgKSB7Ci0JCS8qCi0JCSoqIGVhc3kgc2l0dWF0aW9uOgotCQkqKiByZXF1ZXN0ZWQgZGF0YS1ibG9jayBlbnRpcmVseSBmaXRzIHdpdGhpbgotCQkqKiB0aGUgbWFwdW5pdCB1c2VkIGZvciB0aGUgYml0bWFwCi0JCSoqIGNoZWNrIGlmIHRoYXQgYmxvY2sgaXMgbG9jYXRlZCBpbiByZG9maWxlIG9yCi0JCSoqIGNvd2ZpbGUKLQkJKi8KLQkJYmxvY2tuciA9IG9mZnNldCA+PiBNVVNISUZUOwotCi0JCW1hcG51bSAgPSBDQUxDTUFQIChibG9ja25yKTsKLQkJYnl0ZW51bSA9IENBTENCWVRFKGJsb2NrbnIpOwotCQliaXRudW0gID0gQ0FMQ0JJVCAoYmxvY2tucik7Ci0KLQkJaWYgKCooKihjb3dkZXYtPm1hcGNhY2hlK21hcG51bSkrYnl0ZW51bSkmKDE8PGJpdG51bSkpCi0JCQlyZXR1cm4gQUxMQ09XOwotCQllbHNlCi0JCQlyZXR1cm4gQUxMUkRPOwotCX0KLQotCS8qCi0JKiogbGVzcyBlYXN5IHNpdHVhdGlvbjoKLQkqKiB0aGUgcmVxdWVzdGVkIGRhdGEtYmxvY2sgZG9lcyBub3QgZml0IHdpdGhpbiB0aGUgbWFwdW5pdAotCSoqIHVzZWQgZm9yIHRoZSBiaXRtYXAKLQkqKiBjaGVjayBpZiAqYWxsKiB1bmRlcmx5aW5nIGJsb2NrcyBpbnZvbHZlZCByZXNpZGUgb24gdGhlIHJkb2ZpbGUKLSAgICAgICAJKiogb3IgdGhlIGNvd2ZpbGUgKHNvIHN0aWxsIG5vIGJyZWFrdXAgcmVxdWlyZWQpCi0JKi8KLQlmb3IgKGNvd2NudD10b3RjbnQ9MDsgbGVuID4gMDsgbGVuLT1wYXJ0bGVuLCBvZmZzZXQrPXBhcnRsZW4sIHRvdGNudCsrKXsKLQkJLyoKLQkJKiogY2FsY3VsYXRlIGJsb2NrbnIgb2YgaW52b2x2ZWQgYmxvY2sKLQkJKi8KLQkJYmxvY2tuciA9IG9mZnNldCA+PiBNVVNISUZUOwotCi0JCS8qCi0JCSoqIGNhbGN1bGF0ZSBwYXJ0aWFsIGxlbmd0aCBmb3IgdGhpcyB0cmFuc2ZlcgotCQkqLwotCQlwYXJ0bGVuID0gTUFQVU5JVCAtIChvZmZzZXQgJiBNVU1BU0spOwotCQlpZiAocGFydGxlbiA+IGxlbikKLQkJCXBhcnRsZW4gPSBsZW47Ci0KLQkJLyoKLQkJKiogaXMgdGhpcyBibG9jayBsb2NhdGVkIGluIHRoZSBjb3dmaWxlCi0JCSovCi0JCW1hcG51bSAgPSBDQUxDTUFQIChibG9ja25yKTsKLQkJYnl0ZW51bSA9IENBTENCWVRFKGJsb2NrbnIpOwotCQliaXRudW0gID0gQ0FMQ0JJVCAoYmxvY2tucik7Ci0KLQkJbWMJPSAqKGNvd2Rldi0+bWFwY2FjaGUrbWFwbnVtKTsKLQotCQlpZiAoKihtYytieXRlbnVtKSYoMTw8Yml0bnVtKSkKLQkJCWNvd2NudCsrOzsKLQotCQlERUJVR1AoRENPVwotCQkgICAgICAgImNvd2xvb3AgLSBjaGVjayAlbHUgLSBtYXAgJWx1LCBieXRlICVsdSwgYml0ICVsdSwgIgotCQkgICAgICAgImNvd2NudCAlbGQsIHRvdGNudCAlbGQgJTAyeCAlcFxuIiwKLQkJCWJsb2NrbnIsIG1hcG51bSwgYnl0ZW51bSwgYml0bnVtLCBjb3djbnQsIHRvdGNudCwKLQkJCSoobWMrYnl0ZW51bSksIG1jKTsKLQl9Ci0KLQlpZiAoY293Y250ID09IDApCS8qIGFsbCBpbnZvbHZlZCBibG9ja3Mgb24gcmRvZmlsZT8gKi8KLQkJcmV0dXJuIEFMTFJETzsKLQotCWlmIChjb3djbnQgPT0gdG90Y250KQkvKiBhbGwgaW52b2x2ZWQgYmxvY2tzIG9uIGNvd2ZpbGU/ICovCi0JCXJldHVybiBBTExDT1c7Ci0KLQkvKgotCSoqIHNpdHVhdGlvbiBzb21ld2hhdCBtb3JlIGNvbXBsaWNhdGVkOgotCSoqIGludm9sdmVkIHVuZGVybHlpbmcgYmxvY2tzIHNwcmVhZCBvdmVyIGJvdGggZmlsZXMKLQkqLwotCXJldHVybiBNSVhFRFVQOwotfQotCi0vKgotKiogcmVhZCByZXF1ZXN0ZWQgY2h1bmsgcGFydGx5IGZyb20gcmRvZmlsZSBhbmQgcGFydGx5IGZyb20gY293ZmlsZQotKioKLSoqIHJldHVybnM6Ci0qKiAJMCAgIC0gZmFpbAotKiogICAgICAxICAgLSBzdWNjZXNzCi0qLwotc3RhdGljIGludAotY293bG9fcmVhZG1peChzdHJ1Y3QgY293bG9vcF9kZXZpY2UgKmNvd2Rldiwgdm9pZCAqYnVmLCBpbnQgbGVuLCBsb2ZmX3Qgb2Zmc2V0KQotewotCXVuc2lnbmVkIGxvbmcJbWFwbnVtLCBieXRlbnVtLCBiaXRudW0sIGJsb2NrbnIsIHBhcnRsZW47Ci0JbG9uZyBpbnQJcnY7Ci0JY2hhcgkJKm1jOwotCi0JLyoKLQkqKiBjb21wbGljYXRlZCBhcHByb2FjaDogYnJlYWt1cCByZXF1aXJlZCBvZiByZWFkLXJlcXVlc3QKLQkqLwotCWZvciAocnY9MTsgbGVuID4gMDsgbGVuLT1wYXJ0bGVuLCBidWYrPXBhcnRsZW4sIG9mZnNldCs9cGFydGxlbikgewotCQkvKgotCQkqKiBjYWxjdWxhdGUgYmxvY2tuciBvZiBlbnRpcmUgYmxvY2sKLQkJKi8KLQkJYmxvY2tuciA9IG9mZnNldCA+PiBNVVNISUZUOwotCi0JCS8qCi0JCSoqIGNhbGN1bGF0ZSBwYXJ0aWFsIGxlbmd0aCBmb3IgdGhpcyB0cmFuc2ZlcgotCQkqLwotCQlwYXJ0bGVuID0gTUFQVU5JVCAtIChvZmZzZXQgJiBNVU1BU0spOwotCQlpZiAocGFydGxlbiA+IGxlbikKLQkJCXBhcnRsZW4gPSBsZW47Ci0KLQkJLyoKLQkJKiogaXMgdGhpcyBibG9jayBsb2NhdGVkIGluIHRoZSBjb3dmaWxlCi0JCSovCi0JCW1hcG51bSAgPSBDQUxDTUFQIChibG9ja25yKTsKLQkJYnl0ZW51bSA9IENBTENCWVRFKGJsb2NrbnIpOwotCQliaXRudW0gID0gQ0FMQ0JJVCAoYmxvY2tucik7Ci0JCW1jCT0gKihjb3dkZXYtPm1hcGNhY2hlK21hcG51bSk7Ci0KLQkJaWYgKCoobWMrYnl0ZW51bSkmKDE8PGJpdG51bSkpIHsKLQkJCS8qCi0JCQkqKiByZWFkIChwYXJ0aWFsKSBibG9jayBmcm9tIGNvd2ZpbGUKLQkJCSovCi0JCQlERUJVR1AoRENPVyJjb3dsb29wIC0gc3BsaXQgcmVhZCAiCi0JCQkJImNvdyBwYXJ0bGVuPSVsZCBvZmY9JWxsZFxuIiwgcGFydGxlbiwgb2Zmc2V0KTsKLQotCQkJaWYgKGNvd2xvX3JlYWRjb3coY293ZGV2LCBidWYsIHBhcnRsZW4sIG9mZnNldCkgPD0gMCkKLQkJCQlydiA9IDA7Ci0JCX0gZWxzZSB7Ci0JCQkvKgotCQkJKiogcmVhZCAocGFydGlhbCkgYmxvY2sgZnJvbSByZG9maWxlCi0JCQkqLwotCQkJREVCVUdQKERDT1ciY293bG9vcCAtIHNwbGl0IHJlYWQgIgotCQkJCSJyZG8gcGFydGxlbj0lbGQgb2ZmPSVsbGRcbiIsIHBhcnRsZW4sIG9mZnNldCk7Ci0KLQkJCWlmIChjb3dsb19yZWFkcmRvKGNvd2RldiwgYnVmLCBwYXJ0bGVuLCBvZmZzZXQpIDw9IDApCi0JCQkJcnYgPSAwOwotCQl9Ci0JfQotCi0JcmV0dXJuIHJ2OwotfQotCi0vKgotKiogY2h1bmsgdG8gYmUgd3JpdHRlbiB0byB0aGUgY293ZmlsZSBuZWVkcyBwaWVjZXMgdG8gYmUKLSoqIHJlYWQgZnJvbSB0aGUgcmRvZmlsZQotKioKLSoqIHJldHVybnM6Ci0qKiAJMCAgIC0gZmFpbAotKiogICAgICAxICAgLSBzdWNjZXNzCi0qLwotc3RhdGljIGludAotY293bG9fd3JpdGVtaXgoc3RydWN0IGNvd2xvb3BfZGV2aWNlICpjb3dkZXYsIHZvaWQgKmJ1ZiwgaW50IGxlbiwgbG9mZl90IG9mZnNldCkKLXsKLQl1bnNpZ25lZCBsb25nCW1hcG51bSwgYnl0ZW51bSwgYml0bnVtLCBibG9ja25yLCBwYXJ0bGVuOwotCWxvbmcgaW50CXJ2OwotCWNoYXIJCSptYzsKLQotCS8qCi0JKiogc29tZXdoYXQgbW9yZSBjb21wbGljYXRlZCBzdHVmZiBpcyByZXF1aXJlZDoKLQkqKiBpZiB0aGUgcmVxdWVzdCBpcyBsYXJnZXIgdGhhbiBvbmUgdW5kZXJseWluZwotCSoqIGJsb2NrIG9yIGlzIHNwcmVhZCBvdmVyIHR3byB1bmRlcmx5aW5nIGJsb2NrcywKLQkqKiBzcGxpdCB0aGUgcmVxdWVzdCBpbnRvIHBpZWNlczsgaWYgYSBibG9jayBkb2VzIG5vdAotCSoqIHN0YXJ0IGF0IGEgYmxvY2sgYm91bmRhcnksIHRha2UgY2FyZSB0aGF0Ci0JKiogc3Vycm91bmRpbmcgZGF0YSBpcyByZWFkIGZpcnN0IChpZiBuZWVkZWQpLAotCSoqIGZpdCB0aGUgbmV3IGRhdGEgaW4gYW5kIHdyaXRlIGl0IGFzIGEgZnVsbCBibG9jawotCSovCi0JZm9yIChydj0xOyBsZW4gPiAwOyBsZW4tPXBhcnRsZW4sIGJ1Zis9cGFydGxlbiwgb2Zmc2V0Kz1wYXJ0bGVuKSB7Ci0JCS8qCi0JCSoqIGNhbGN1bGF0ZSBwYXJ0aWFsIGxlbmd0aCBmb3IgdGhpcyB0cmFuc2ZlcgotCQkqLwotCQlwYXJ0bGVuID0gTUFQVU5JVCAtIChvZmZzZXQgJiBNVU1BU0spOwotCQlpZiAocGFydGxlbiA+IGxlbikKLQkJCXBhcnRsZW4gPSBsZW47Ci0KLQkJLyoKLQkJKiogY2FsY3VsYXRlIGJsb2NrbnIgb2YgZW50aXJlIGJsb2NrCi0JCSovCi0JCWJsb2NrbnIgPSBvZmZzZXQgPj4gTVVTSElGVDsKLQotCQkvKgotCQkqKiBoYXMgdGhpcyBibG9jayBiZWVuIHdyaXR0ZW4gYmVmb3JlPwotCQkqLwotCQltYXBudW0gID0gQ0FMQ01BUCAoYmxvY2tucik7Ci0JCWJ5dGVudW0gPSBDQUxDQllURShibG9ja25yKTsKLQkJYml0bnVtICA9IENBTENCSVQgKGJsb2NrbnIpOwotCQltYwk9ICooY293ZGV2LT5tYXBjYWNoZSttYXBudW0pOwotCi0JCWlmICgqKG1jK2J5dGVudW0pJigxPDxiaXRudW0pKSB7Ci0JCQkvKgotCQkJKiogYmxvY2sgaGFzIGJlZW4gd3JpdHRlbiBiZWZvcmU7Ci0JCQkqKiB3cml0ZSB0cmFuc3BhcmFudGx5IHRvIGNvd2ZpbGUKLQkJCSovCi0JCQlERUJVR1AoRENPVwotCQkJICAgICAgICJjb3dsb29wIC0gc3BsaXR3ciB0cmFuc3BcbiIpOwotCi0JCQlpZiAoY293bG9fd3JpdGVjb3coY293ZGV2LCBidWYsIHBhcnRsZW4sIG9mZnNldCkgPD0gMCkKLQkJCQlydiA9IDA7Ci0JCX0gZWxzZSB7Ci0JCQkvKgotCQkJKiogYmxvY2sgaGFzIG5ldmVyIGJlZW4gd3JpdHRlbiBiZWZvcmUsCi0JCQkqKiBzbyByZWFkIGVudGlyZSBibG9jayBmcm9tCi0JCQkqKiByZWFkLW9ubHkgZmlsZSBmaXJzdCwgdW5sZXNzCi0JCQkqKiBhIGZ1bGwgYmxvY2sgaXMgcmVxdWVzdGVkIHRvCi0JCQkqKiBiZSB3cml0dGVuCi0JCQkqLwotCQkJaWYgKHBhcnRsZW4gPCBNQVBVTklUKSB7Ci0JCQkJaWYgKGNvd2xvX3JlYWRyZG8oY293ZGV2LCBjb3dkZXYtPmlvYnVmLAotCQkJCSAgICAgIE1BUFVOSVQsIChsb2ZmX3QpYmxvY2tuciA8PCBNVVNISUZUKSA8PSAwKQotCQkJCQlydiA9IDA7Ci0JCQl9Ci0KLQkJCS8qCi0JCQkqKiB0cmFuc2ZlciBtb2RpZmllZCBwYXJ0IGludG8KLQkJCSoqIHRoZSBibG9jayBqdXN0IHJlYWQKLQkJCSovCi0JCQltZW1jcHkoY293ZGV2LT5pb2J1ZiArIChvZmZzZXQgJiBNVU1BU0spLCBidWYsIHBhcnRsZW4pOwotCi0JCQkvKgotCQkJKiogd3JpdGUgZW50aXJlIGJsb2NrIHRvIGNvd2ZpbGUKLQkJCSovCi0JCQlERUJVR1AoRENPVyJjb3dsb29wIC0gc3BsaXQgIgotCQkJCSJwYXJ0bGVuPSVsZCBvZmY9JWxsZFxuIiwKLQkJCQlwYXJ0bGVuLCAobG9mZl90KWJsb2NrbnIgPDwgTVVTSElGVCk7Ci0KLQkJCWlmIChjb3dsb193cml0ZWNvdyhjb3dkZXYsIGNvd2Rldi0+aW9idWYsIE1BUFVOSVQsCi0JCQkJCSAgICAgKGxvZmZfdClibG9ja25yIDw8IE1VU0hJRlQpIDw9IDApCi0JCQkJcnYgPSAwOwotCQl9Ci0JfQotCi0JcmV0dXJuIHJ2OwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiBJL08tc3VwcG9ydCBmb3IgcmVhZC1vbmx5IGZpbGUgYW5kIGNvcHktb24td3JpdGUgZmlsZSAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qCi0qKiByZWFkIGRhdGEgZnJvbSB0aGUgcmVhZC1vbmx5IGZpbGUKLSoqCi0qKiByZXR1cm4tdmFsdWU6IHNpbWlsYXIgdG8gdXNlci1tb2RlIHJlYWQKLSovCi1zdGF0aWMgbG9uZyBpbnQKLWNvd2xvX3JlYWRyZG8oc3RydWN0IGNvd2xvb3BfZGV2aWNlICpjb3dkZXYsIHZvaWQgKmJ1ZiwgaW50IGxlbiwgbG9mZl90IG9mZnNldCkKLXsKLQlsb25nIGludAlydjsKLQltbV9zZWdtZW50X3QJb2xkX2ZzOwotCWxvZmZfdAkJc2F2ZW9mZnNldCA9IG9mZnNldDsKLQotCURFQlVHUChEQ09XImNvd2xvb3AgLSByZWFkcmRvIGNhbGxlZFxuIik7Ci0KLSAgICAgICAgb2xkX2ZzID0gZ2V0X2ZzKCk7Ci0Jc2V0X2ZzKCBnZXRfZHMoKSApOwotCXJ2ID0gY293ZGV2LT5yZG9mcC0+Zl9vcC0+cmVhZChjb3dkZXYtPnJkb2ZwLCBidWYsIGxlbiwgJm9mZnNldCk7Ci0gICAgICAgIHNldF9mcyhvbGRfZnMpOwotCi0JaWYgKHJ2IDwgbGVuKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgImNvd2xvb3AgLSByZWFkLWZhaWx1cmUgJWxkIG9uIHJkb2ZpbGUiCi0JCSAgICAgICAgICAgICAgICAgICAgIi0gb2Zmc2V0PSVsbGQgbGVuPSVkXG4iLAotCQkJCQlydiwgc2F2ZW9mZnNldCwgbGVuKTsKLQl9Ci0KLQljb3dkZXYtPnJkb3JlYWRzKys7Ci0JcmV0dXJuIHJ2OwotfQotCi0vKgotKiogcmVhZCBjb3dmaWxlIGZyb20gYSBtb2RpZmllZCBvZmZzZXQsIGkuZS4gc2tpcHBpbmcgdGhlIGJpdG1hcCBhbmQgY293aGVhZAotKioKLSoqIHJldHVybi12YWx1ZTogc2ltaWxhciB0byB1c2VyLW1vZGUgcmVhZAotKi8KLXN0YXRpYyBsb25nIGludAotY293bG9fcmVhZGNvdyhzdHJ1Y3QgY293bG9vcF9kZXZpY2UgKmNvd2Rldiwgdm9pZCAqYnVmLCBpbnQgbGVuLCBsb2ZmX3Qgb2Zmc2V0KQotewotCURFQlVHUChEQ09XImNvd2xvb3AgLSByZWFkY293IGNhbGxlZFxuIik7Ci0KLQlvZmZzZXQgKz0gY293ZGV2LT5jb3doZWFkLT5kb2Zmc2V0OwotCi0JcmV0dXJuIGNvd2xvX3JlYWRjb3dyYXcoY293ZGV2LCBidWYsIGxlbiwgb2Zmc2V0KTsKLX0KLQotLyoKLSoqIHJlYWQgY293ZmlsZSBmcm9tIGFuIGFic29sdXRlIG9mZnNldAotKioKLSoqIHJldHVybi12YWx1ZTogc2ltaWxhciB0byB1c2VyLW1vZGUgcmVhZAotKi8KLXN0YXRpYyBsb25nIGludAotY293bG9fcmVhZGNvd3JhdyhzdHJ1Y3QgY293bG9vcF9kZXZpY2UgKmNvd2RldiwKLQkJCQkJdm9pZCAqYnVmLCBpbnQgbGVuLCBsb2ZmX3Qgb2Zmc2V0KQotewotCWxvbmcgaW50CXJ2OwotCW1tX3NlZ21lbnRfdAlvbGRfZnM7Ci0JbG9mZl90CQlzYXZlb2Zmc2V0ID0gb2Zmc2V0OwotCi0JREVCVUdQKERDT1ciY293bG9vcCAtIHJlYWRjb3dyYXcgY2FsbGVkXG4iKTsKLQotCS8qCi0JKiogYmUgc3VyZSB0aGF0IGNvd2ZpbGUgaXMgb3BlbmVkIGZvciByZWFkLXdyaXRlCi0JKi8KLQlpZiAoICEoY293ZGV2LT5zdGF0ZSAmIENPV0NPV09QRU4pICkgewotCQkgcHJpbnRrKEtFUk5fV0FSTklORwotCQkgICAgICAgICJjb3dsb29wIC0gcmVhZCByZXF1ZXN0IGZyb20gY293ZmlsZSByZWZ1c2VkXG4iKTsKLQotCQlyZXR1cm4gLUVCQURGOwotCX0KLQotCS8qCi0JKiogaXNzdWUgbG93IGxldmVsIHJlYWQKLQkqLwotICAgICAgICBvbGRfZnMgPSBnZXRfZnMoKTsKLQlzZXRfZnMoIGdldF9kcygpICk7Ci0JcnYgPSBjb3dkZXYtPmNvd2ZwLT5mX29wLT5yZWFkKGNvd2Rldi0+Y293ZnAsIGJ1ZiwgbGVuLCAmb2Zmc2V0KTsKLSAgICAgICAgc2V0X2ZzKG9sZF9mcyk7Ci0KLQlpZiAocnYgPCBsZW4pIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkgICAgICAgImNvd2xvb3AgLSByZWFkLWZhaWx1cmUgJWxkIG9uIGNvd2ZpbGUiCi0JCSAgICAgICAiLSBvZmZzZXQ9JWxsZCBsZW49JWRcbiIsIHJ2LCBzYXZlb2Zmc2V0LCBsZW4pOwotCX0KLQotCWNvd2Rldi0+Y293cmVhZHMrKzsKLQlyZXR1cm4gcnY7Ci19Ci0KLS8qCi0qKiB3cml0ZSBjb3dmaWxlIGZyb20gYSBtb2RpZmllZCBvZmZzZXQsIGkuZS4gc2tpcHBpbmcgdGhlIGJpdG1hcCBhbmQgY293aGVhZAotKioKLSoqIGlmIGEgYmxvY2sgaXMgd3JpdHRlbiBmb3IgdGhlIGZpcnN0IHRpbWUgd2hpbGUgaXRzIGNvbnRlbnRzIGNvbnNpc3RzCi0qKiBvZiBiaW5hcnkgemVyb2VzIG9ubHksIHRoZSBjb25jZXJuaW5nIGJpdG1hcCBpcyBmbHVzaGVkIHRvIHRoZSBjb3dmaWxlCi0qKgotKiogcmV0dXJuLXZhbHVlOiBzaW1pbGFyIHRvIHVzZXItbW9kZSB3cml0ZQotKi8KLXN0YXRpYyBsb25nIGludAotY293bG9fd3JpdGVjb3coc3RydWN0IGNvd2xvb3BfZGV2aWNlICpjb3dkZXYsIHZvaWQgKmJ1ZiwgaW50IGxlbiwgbG9mZl90IG9mZnNldCkKLXsKLQlsb25nIGludAlydjsKLQl1bnNpZ25lZCBsb25nCW1hcG51bT0wLCBtYXBieXRlPTAsIG1hcGJpdD0wLCBjb3dibG9jaz0wLCBwYXJ0bGVuOwotCWNoYXIJCSp0bXBwdHIsICAqbWFwcHRyID0gTlVMTDsKLQlsb2ZmX3QJCXRtcG9mZnNldCwgbWFwb2Zmc2V0ID0gMDsKLQotCURFQlVHUChEQ09XImNvd2xvb3AgLSB3cml0ZWNvdyBjYWxsZWRcbiIpOwotCi0JLyoKLQkqKiBiZSBzdXJlIHRoYXQgY293ZmlsZSBpcyBvcGVuZWQgZm9yIHJlYWQtd3JpdGUKLQkqLwotCWlmICggIShjb3dkZXYtPnN0YXRlICYgQ09XUldDT1dPUEVOKSApIHsKLQkJIHByaW50ayhLRVJOX1dBUk5JTkcKLQkJICAgICAgICAiY293bG9vcCAtIFdyaXRlIHJlcXVlc3QgdG8gY293ZmlsZSByZWZ1c2VkXG4iKTsKLQotCQlyZXR1cm4gLUVCQURGOwotCX0KLQotCS8qCi0JKiogd3JpdGUgdGhlIGVudGlyZSBibG9jayB0byB0aGUgY293ZmlsZQotCSovCi0JdG1wb2Zmc2V0ID0gb2Zmc2V0ICsgY293ZGV2LT5jb3doZWFkLT5kb2Zmc2V0OwotCi0JcnYgPSBjb3dsb193cml0ZWNvd3Jhdyhjb3dkZXYsIGJ1ZiwgbGVuLCB0bXBvZmZzZXQpOwotCi0JLyoKLQkqKiB2ZXJpZnkgaWYgZW5vdWdoIHNwYWNlIGF2YWlsYWJsZSBvbiBmaWxlc3lzdGVtIGhvbGRpbmcKLQkqKiB0aGUgY293ZmlsZQotCSoqICAgLSB3aGVuIHRoZSBsYXN0IHdyaXRlIGZhaWxlZCAobWlnaHQgYmUgY2F1c2VkIGJ5IGxhY2sgb2Ygc3BhY2UpCi0JKiogICAtIHdoZW4gYSB3YXRjaGVyIGlzIGFjdGl2ZSAodG8gcmVhY3QgYWRlcXVhdGx5KQotCSoqICAgLSB3aGVuIHRoZSBwcmV2aW91cyBjaGVjayBpbmRpY2F0ZWQgZnMgd2FzIGFsbW9zdCBmdWxsCi0JKiogICAtIHdpdGggcmVndWxhciBpbnRlcnZhbHMKLQkqLwotCWlmICggKHJ2IDw9IDApCQkJCSAgICAgICB8fAotCSAgICAgKGNvd2Rldi0+c3RhdGUgICAgICAgICYgQ09XV0FUQ0hET0cpICAgICAgfHwKLQkgICAgIChjb3dkZXYtPmJsa2F2YWlsIC8gMiA8IFNQQ0RGTElOVFZMKSAgICAgIHx8Ci0JICAgICAoY293ZGV2LT5jb3d3cml0ZXMgICAgJSBTUENERkxJTlRWTCA9PSAwKSApIHsKLQkJc3RydWN0IGtzdGF0ZnMJCWtzOwotCi0JCWlmICh2ZnNfc3RhdGZzKGNvd2Rldi0+Y293ZnAtPmZfZGVudHJ5LCAma3MpPT0wKXsKLQkJCWlmIChrcy5mX2JhdmFpbCA8PSBTUENNSU5CTEspIHsKLQkJCQlzd2l0Y2ggKGtzLmZfYmF2YWlsKSB7Ci0JCQkJICAgY2FzZSAwOgotCQkJCSAgIGNhc2UgMToKLQkJCQkgICBjYXNlIDI6Ci0JCQkJICAgY2FzZSAzOgotCQkJCQlwcmludGsoS0VSTl9BTEVSVAotCQkJCQkgICAgICAgImNvd2xvb3AgLSAiCi0JCQkJCSAgICAgICAiQUxFUlQ6IGNvd2ZpbGUgZnVsbCFcbiIpOwotCQkJCQlicmVhazsKLQotCQkJCSAgIGRlZmF1bHQ6Ci0JCQkJCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJCQkJICAgICAgICJjb3dsb29wIC0gY293ZmlsZSBhbG1vc3QgIgotCQkJCQkgICAgICAgImZ1bGwgKG9ubHkgJWxsdSBLYiBmcmVlKVxuIiwKLQkJCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrcy5mX2JzaXplICoga3MuZl9iYXZhaWwgLzEwMjQpOwotCQkJCX0KLQkJCX0KLQotCQkJY293ZGV2LT5ibGt0b3RhbCA9IGtzLmZfYmxvY2tzOwotCQkJY293ZGV2LT5ibGthdmFpbCA9IGtzLmZfYmF2YWlsOwotCi0JCQkvKgotCQkJKiogd2FrZXVwIHdhdGNoZXIgaWYgdGhyZXNob2xkIGhhcyBiZWVuIHJlYWNoZWQKLQkJCSovCi0JCQlpZiAoIChjb3dkZXYtPnN0YXRlICYgQ09XV0FUQ0hET0cpICYmCi0JCQkgICAgKGNvd2Rldi0+d2F0Y2h0aHJlc2ggPj0gY293ZGV2LT5ibGthdmFpbCkgKSB7Ci0JCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZjb3dkZXYtPndhdGNocSk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlpZiAocnYgPD0gMCkKLQkJcmV0dXJuIHJ2OwotCi0JREVCVUdQKERDT1ciY293bG9vcCAtIGJsb2NrIHdyaXR0ZW5cbiIpOwotCi0JLyoKLQkqKiBjaGVjayBpZiBibG9jayhzKSBpcy9hcmUgd3JpdHRlbiB0byB0aGUgY293ZmlsZQotCSoqIGZvciB0aGUgZmlyc3QgdGltZTsgaWYgc28sIGFkYXB0IHRoZSBiaXRtYXAKLQkqLwotCWZvciAoOyBsZW4gPiAwOyBsZW4tPXBhcnRsZW4sIG9mZnNldCs9cGFydGxlbiwgYnVmKz1wYXJ0bGVuKSB7Ci0JCS8qCi0JCSoqIGNhbGN1bGF0ZSBwYXJ0aWFsIGxlbmd0aCBmb3IgdGhpcyB0cmFuc2ZlcgotCQkqLwotCQlwYXJ0bGVuID0gTUFQVU5JVCAtIChvZmZzZXQgJiBNVU1BU0spOwotCQlpZiAocGFydGxlbiA+IGxlbikKLQkJCXBhcnRsZW4gPSBsZW47Ci0KLQkJLyoKLQkJKiogY2FsY3VsYXRlIGJpdG5yIG9mIHdyaXR0ZW4gY2h1bmsgb2YgY293YmxvY2sKLQkJKi8KLQkJY293YmxvY2sgPSBvZmZzZXQgPj4gTVVTSElGVDsKLQotCQltYXBudW0gICA9IENBTENNQVAgKGNvd2Jsb2NrKTsKLQkJbWFwYnl0ZSAgPSBDQUxDQllURShjb3dibG9jayk7Ci0JCW1hcGJpdCAgID0gQ0FMQ0JJVCAoY293YmxvY2spOwotCi0JCWlmICgqKCooY293ZGV2LT5tYXBjYWNoZSttYXBudW0pK21hcGJ5dGUpICYgKDE8PG1hcGJpdCkpCi0JCQljb250aW51ZTsJLyogYWxyZWFkeSB3cml0dGVuIGJlZm9yZSAqLwotCi0JICAgICAgIAkvKgotCQkqKiBpZiB0aGUgYmxvY2sgaXMgd3JpdHRlbiBmb3IgdGhlIGZpcnN0IHRpbWUsCi0JCSoqIHRoZSBjb3JyZXNwb25kaW5nIGJpdCBzaG91bGQgYmUgc2V0IGluIHRoZSBiaXRtYXAKLQkJKi8KLQkJKigqKGNvd2Rldi0+bWFwY2FjaGUrbWFwbnVtKSttYXBieXRlKSB8PSAoMTw8bWFwYml0KTsKLQotCQljb3dkZXYtPm5yY293YmxvY2tzKys7Ci0KLQkJREVCVUdQKERDT1ciY293bG9vcCAtIGJpdHVwZGF0ZSBibGs9JWxkIG1hcD0lbGQgIgotCQkgICAgICAgICJieXRlPSVsZCBiaXQ9JWxkXG4iLAotCQkJY293YmxvY2ssIG1hcG51bSwgbWFwYnl0ZSwgbWFwYml0KTsKLQotCQkvKgotCQkqKiBjaGVjayBpZiB0aGUgY293aGVhZCBpbiB0aGUgY293ZmlsZSBpcyBjdXJyZW50bHkKLQkJKiogbWFya2VkIGNsZWFuOyBpZiBzbywgbWFyayBpdCBkaXJ0eSBhbmQgZmx1c2ggaXQKLQkJKi8KLQkJaWYgKCAhKGNvd2Rldi0+Y293aGVhZC0+ZmxhZ3MgJj0gQ09XRElSVFkpKSB7Ci0JCQljb3dkZXYtPmNvd2hlYWQtPmZsYWdzCXw9IENPV0RJUlRZOwotCi0JCQljb3dsb193cml0ZWNvd3Jhdyhjb3dkZXYsIGNvd2Rldi0+Y293aGVhZCwKLQkJCQkJCQlNQVBVTklULCAobG9mZl90KTApOwotCQl9Ci0KLQkJLyoKLQkJKiogaWYgdGhlIHdyaXR0ZW4gZGF0YWJsb2NrIGNvbnRhaW5lZCBiaW5hcnkgemVyb2VzLAotCQkqKiB0aGUgYml0bWFwIGJsb2NrIHNob3VsZCBiZSBtYXJrZWQgdG8gYmUgZmx1c2hlZCB0byBkaXNrCi0JCSoqIChibG9ja3MgY29udGFpbmluZyBhbGwgemVyb2VzIGNhbm5vdCBiZSByZWNvdmVyZWQgYnkKLQkJKiogdGhlIGNvd3JlcGFpci1wcm9ncmFtIGxhdGVyIG9uIGlmIGNvd2xvb3AgaXMgbm90IHByb3Blcmx5Ci0JCSoqIHJlbW92ZWQgdmlhIHJtbW9kKQotCQkqLwotCQlpZiAoIG1lbWNtcChidWYsIGFsbHplcm9lcywgcGFydGxlbikgKSAvKiBub3QgYWxsIHplcm9lcz8gKi8KLQkJCWNvbnRpbnVlOyAgICAgICAgICAgICAgICAgICAgICAvKiBubyBmbHVzaCBuZWVkZWQgKi8KLQotCQkvKgotCQkqKiBjYWxjdWxhdGUgcG9zaXRpb25zIG9mIGJpdG1hcCBibG9jayB0byBiZSBmbHVzaGVkCi0JCSoqIC0gcG9pbnRlciBvZiBiaXRtYXAgYmxvY2sgaW4gbWVtb3J5Ci0JCSoqIC0gb2Zmc2V0ICBvZiBiaXRtYXAgYmxvY2sgaW4gY293ZmlsZQotCQkqLwotCQl0bXBwdHIgICAgPSAqKGNvd2Rldi0+bWFwY2FjaGUrbWFwbnVtKSArIChtYXBieXRlICYgKH5NVU1BU0spKTsKLQkJdG1wb2Zmc2V0ID0gKGxvZmZfdCkgTUFQVU5JVCArIG1hcG51bSAqIE1BUENIVU5LU1ogKwotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobWFwYnl0ZSAmICh+TVVNQVNLKSk7Ci0KLQkJLyoKLQkJKiogZmx1c2ggYSBiaXRtYXAgYmxvY2sgYXQgdGhlIG1vbWVudCB0aGF0IGFsbCBiaXRzIGhhdmUKLQkJKiogYmVlbiBzZXQgaW4gdGhhdCBibG9jaywgaS5lLiBhdCB0aGUgbW9tZW50IHRoYXQgd2UKLQkJKiogc3dpdGNoIHRvIGFub3RoZXIgYml0bWFwIGJsb2NrCi0JCSovCi0JCWlmICggKG1hcG9mZnNldCAhPSAwKSAmJiAobWFwb2Zmc2V0ICE9IHRtcG9mZnNldCkgKSB7Ci0JCQlpZiAoY293bG9fd3JpdGVjb3dyYXcoY293ZGV2LCBtYXBwdHIsIE1BUFVOSVQsCi0JCQkJCQkJbWFwb2Zmc2V0KSA8IDApIHsKLQkJCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCQkJICAgICAgICJjb3dsb29wIC0gd3JpdGUtZmFpbHVyZSBvbiBiaXRtYXAgLSAiCi0JCQkJICAgICAgICJibGs9JWxkIG1hcD0lbGQgYnl0ZT0lbGQgYml0PSVsZFxuIiwKLQkJCQkgIAljb3dibG9jaywgbWFwbnVtLCBtYXBieXRlLCBtYXBiaXQpOwotCQkJfQotCi0JCQlERUJVR1AoRENPVyJjb3dsb29wIC0gYml0bWFwIGJsayB3cml0dGVuICVsbGRcbiIsCi0JCQkJCQkJCW1hcG9mZnNldCk7Ci0JCX0KLQotCQkvKgotCQkqKiByZW1lbWJlciBvZmZzZXQgaW4gY293ZmlsZSBhbmQgb2Zmc2V0IGluIG1lbW9yeQotCQkqKiBmb3IgYml0bWFwIHRvIGJlIGZsdXNoZWQ7IGZsdXNoaW5nIHdpbGwgYmUgZG9uZQotCQkqKiBhcyBzb29uIGFzIGFsbCB1cGRhdGVzIGluIHRoaXMgYml0bWFwIGJsb2NrIGhhdmUKLQkJKiogYmVlbiBkb25lCi0JCSovCi0JCW1hcG9mZnNldCA9IHRtcG9mZnNldDsKLQkJbWFwcHRyICAgID0gdG1wcHRyOwotCX0KLQotCS8qCi0JKiogYW55IG5ldyBibG9jayB3cml0dGVuIGNvbnRhaW5pbmcgYmluYXJ5IHplcm9lcz8KLQkqLwotCWlmIChtYXBvZmZzZXQpIHsKLQkJaWYgKGNvd2xvX3dyaXRlY293cmF3KGNvd2RldiwgbWFwcHRyLCBNQVBVTklULCBtYXBvZmZzZXQpIDwgMCkgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkJICAgICAgICJjb3dsb29wIC0gd3JpdGUtZmFpbHVyZSBvbiBiaXRtYXAgLSAiCi0JCQkgICAgICAgImJsaz0lbGQgbWFwPSVsZCBieXRlPSVsZCBiaXQ9JWxkXG4iLAotCQkJICAgICAgIGNvd2Jsb2NrLCBtYXBudW0sIG1hcGJ5dGUsIG1hcGJpdCk7Ci0JCX0KLQotCQlERUJVR1AoRENPVyJjb3dsb29wIC0gYml0bWFwIGJsb2NrIHdyaXR0ZW4gJWxsZFxuIiwgbWFwb2Zmc2V0KTsKLQl9Ci0KLQlyZXR1cm4gcnY7Ci19Ci0KLS8qCi0qKiB3cml0ZSBjb3dmaWxlIGZyb20gYW4gYWJzb2x1dGUgb2Zmc2V0Ci0qKgotKiogcmV0dXJuLXZhbHVlOiBzaW1pbGFyIHRvIHVzZXItbW9kZSB3cml0ZQotKi8KLXN0YXRpYyBsb25nIGludAotY293bG9fd3JpdGVjb3dyYXcoc3RydWN0IGNvd2xvb3BfZGV2aWNlICpjb3dkZXYsCi0JCQkJCXZvaWQgKmJ1ZiwgaW50IGxlbiwgbG9mZl90IG9mZnNldCkKLXsKLQlsb25nIGludAlydjsKLQltbV9zZWdtZW50X3QJb2xkX2ZzOwotCWxvZmZfdAkJc2F2ZW9mZnNldCA9IG9mZnNldDsKLQotCURFQlVHUChEQ09XImNvd2xvb3AgLSB3cml0ZWNvd3JhdyBjYWxsZWRcbiIpOwotCi0JLyoKLQkqKiBiZSBzdXJlIHRoYXQgY293ZmlsZSBpcyBvcGVuZWQgZm9yIHJlYWQtd3JpdGUKLQkqLwotCWlmICggIShjb3dkZXYtPnN0YXRlICYgQ09XUldDT1dPUEVOKSApIHsKLQkJIHByaW50ayhLRVJOX1dBUk5JTkcKLQkJICAgICAgICAiY293bG9vcCAtIHdyaXRlIHJlcXVlc3QgdG8gY293ZmlsZSByZWZ1c2VkXG4iKTsKLQotCQlyZXR1cm4gLUVCQURGOwotCX0KLQotCS8qCi0JKiogaXNzdWUgbG93IGxldmVsIHdyaXRlCi0JKi8KLSAgICAgICAgb2xkX2ZzID0gZ2V0X2ZzKCk7Ci0Jc2V0X2ZzKCBnZXRfZHMoKSApOwotCXJ2ID0gY293ZGV2LT5jb3dmcC0+Zl9vcC0+d3JpdGUoY293ZGV2LT5jb3dmcCwgYnVmLCBsZW4sICZvZmZzZXQpOwotICAgICAgICBzZXRfZnMob2xkX2ZzKTsKLQotCWlmIChydiA8IGxlbikgewotCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCSAgICAgICAiY293bG9vcCAtIHdyaXRlLWZhaWx1cmUgJWxkIG9uIGNvd2ZpbGUiCi0JCSAgICAgICAiLSBvZmZzZXQ9JWxsZCBsZW49JWRcbiIsIHJ2LCBzYXZlb2Zmc2V0LCBsZW4pOwotCX0KLQotCWNvd2Rldi0+Y293d3JpdGVzKys7Ci0JcmV0dXJuIHJ2OwotfQotCi0KLS8qCi0qKiByZWFkcHJvYy1mdW5jdGlvbjogY2FsbGVkIHdoZW4gdGhlIGNvcnJlc3BvbmRpbmcgL3Byb2MtZmlsZSBpcyByZWFkCi0qLwotc3RhdGljIGludAotY293bG9fcmVhZHByb2MoY2hhciAqYnVmLCBjaGFyICoqc3RhcnQsIG9mZl90IHBvcywgaW50IGNudCwgaW50ICplb2YsIHZvaWQgKnApCi17Ci0Jc3RydWN0IGNvd2xvb3BfZGV2aWNlICpjb3dkZXYgPSBwOwotCi0JcmV2aXNpb25bc2l6ZW9mIHJldmlzaW9uIC0gM10gPSAnXDAnOwotCi0JcmV0dXJuIHNwcmludGYoYnVmLAotCQkiICAgY293bG9vcCB2ZXJzaW9uOiAlOXNcblxuIgotCQkiICAgICAgZGV2aWNlIHN0YXRlOiAlcyVzJXMlc1xuIgotCQkiICAgbnVtYmVyIG9mIG9wZW5zOiAlOWRcbiIKLQkJIiAgICAgcGlkIG9mIHRocmVhZDogJTlkXG5cbiIKLQkJIiAgICByZWFkLW9ubHkgZmlsZTogJTlzXG4iCi0JCSIgICAgICAgICAgcmRvcmVhZHM6ICU5bHVcblxuIgotCQkiY29weS1vbi13cml0ZSBmaWxlOiAlOXNcbiIKLQkJIiAgICAgc3RhdGUgY293ZmlsZTogJTlzXG4iCi0JCSIgICAgIGJpdG1hcC1ibG9ja3M6ICU5bHUgKG9mICVkIGJ5dGVzKVxuIgotCQkiICBjb3dibG9ja3MgaW4gdXNlOiAlOWx1IChvZiAlZCBieXRlcylcbiIKLQkJIiAgICAgICAgICBjb3dyZWFkczogJTlsdVxuIgotCQkiICAgICAgICAgY293d3JpdGVzOiAlOWx1XG4iLAotCQkJJnJldmlzaW9uWzExXSwKLQotCQkJY293ZGV2LT5zdGF0ZSAmIENPV0RFVk9QRU4gICA/ICJkZXZvcGVuICIgICA6ICIiLAotCQkJY293ZGV2LT5zdGF0ZSAmIENPV1JXQ09XT1BFTiA/ICJjb3dvcGVucncgIiA6ICIiLAotCQkJY293ZGV2LT5zdGF0ZSAmIENPV1JEQ09XT1BFTiA/ICJjb3dvcGVucm8gIiA6ICIiLAotCQkJY293ZGV2LT5zdGF0ZSAmIENPV1dBVENIRE9HICA/ICJ3YXRjaGRvZyAiICA6ICIiLAotCi0JCQljb3dkZXYtPm9wZW5jbnQsCi0JCQljb3dkZXYtPnBpZCwKLQkJCWNvd2Rldi0+cmRvbmFtZSwKLQkJCWNvd2Rldi0+cmRvcmVhZHMsCi0JCQljb3dkZXYtPmNvd25hbWUsCi0JCQljb3dkZXYtPmNvd2hlYWQtPmZsYWdzICYgQ09XRElSVFkgPyAiZGlydHkiOiJjbGVhbiIsCi0JCQljb3dkZXYtPm1hcHNpemUgPj4gTVVTSElGVCwgTUFQVU5JVCwKLQkJCWNvd2Rldi0+bnJjb3dibG9ja3MsIE1BUFVOSVQsCi0JCQljb3dkZXYtPmNvd3JlYWRzLAotCQkJY293ZGV2LT5jb3d3cml0ZXMpOwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiBTZXR1cCBhbmQgZGVzdHJveSBjb3dkZXZpY2VzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qCi0qKiBvcGVuIGFuZCBwcmVwYXJlIGEgY293ZGV2aWNlIChyZG9maWxlIGFuZCBjb3dmaWxlKSBhbmQgYWxsb2NhdGUgYml0bWFwcwotKioKLSoqIHJldHVybnM6Ci0qKiAJMCAgIC0gb2theQotKiogICAgPCAwICAgLSBlcnJvciB2YWx1ZQotKi8KLXN0YXRpYyBpbnQKLWNvd2xvX29wZW5wYWlyKGNoYXIgKnJkb2YsIGNoYXIgKmNvd2YsIGludCBhdXRvcmVjb3ZlciwgaW50IG1pbm9yKQotewotCWxvbmcgaW50CQlydjsKLQlzdHJ1Y3QgY293bG9vcF9kZXZpY2UJKmNvd2RldiA9IGNvd2RldmFsbFttaW5vcl07Ci0Jc3RydWN0IGtzdGF0ZnMJCWtzOwotCi0JZG93bigmY293ZGV2bG9jayk7Ci0KLQkvKgotCSoqIHJlcXVlc3RlZCBkZXZpY2UgZXhpc3RzPwotCSovCi0JaWYgKG1pbm9yID49IG1heGNvd3MpIHsKLQkJdXAoJmNvd2RldmxvY2spOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0KLQkvKgotCSoqIHJlcXVlc3RlZCBkZXZpY2UgYWxyZWFkeSBhc3NpZ25lZCB0byBjb3dkZXZpY2U/Ci0JKi8KLQlpZiAoY293ZGV2LT5zdGF0ZSAmIENPV0RFVk9QRU4pIHsKLQkJdXAoJmNvd2RldmxvY2spOwotCQlyZXR1cm4gLUVCVVNZOwotCX0KLQotCS8qCi0JKiogaW5pdGlhbGl6ZSBhZG1pbmlzdHJhdGlvbgotCSovCi0JbWVtc2V0KGNvd2RldiwgMCwgc2l6ZW9mICpjb3dkZXYpOwotCi0Jc3Bpbl9sb2NrX2luaXQgICAgICgmY293ZGV2LT5ycWxvY2spOwotCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmNvd2Rldi0+d2FpdHEpOwotCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmNvd2Rldi0+d2F0Y2hxKTsKLQotCS8qCi0JKiogb3BlbiB0aGUgcmVhZC1vbmx5IGZpbGUKLQkqLwotCURFQlVHUChEQ09XImNvd2xvb3AgLSBjYWxsIG9wZW5yZG8uLi4uXG4iKTsKLQotCWlmICggKHJ2ID0gY293bG9fb3BlbnJkbyhjb3dkZXYsIHJkb2YpKSApIHsKLQkJY293bG9fdW5kb19vcGVucmRvKGNvd2Rldik7Ci0JCXVwKCZjb3dkZXZsb2NrKTsKLQkJcmV0dXJuIHJ2OwotCX0KLQotCS8qCi0JKiogb3BlbiB0aGUgY293ZmlsZQotCSovCi0JREVCVUdQKERDT1ciY293bG9vcCAtIGNhbGwgb3BlbmNvdy4uLi5cbiIpOwotCi0JaWYgKCAocnYgPSBjb3dsb19vcGVuY293KGNvd2RldiwgY293ZiwgYXV0b3JlY292ZXIpKSApIHsKLQkJY293bG9fdW5kb19vcGVucmRvKGNvd2Rldik7Ci0JCWNvd2xvX3VuZG9fb3BlbmNvdyhjb3dkZXYpOwotCQl1cCgmY293ZGV2bG9jayk7Ci0JCXJldHVybiBydjsKLQl9Ci0KLQkvKgotCSoqIGFkbWluaXN0ZXIgdG90YWwgYW5kIGF2YWlsYWJsZSBzaXplIG9mIGZpbGVzeXN0ZW0gaG9sZGluZyBjb3dmaWxlCi0JKi8KLQlpZiAodmZzX3N0YXRmcyhjb3dkZXYtPmNvd2ZwLT5mX2RlbnRyeSwgJmtzKT09MCkgewotCQljb3dkZXYtPmJsa3NpemUgID0ga3MuZl9ic2l6ZTsKLQkJY293ZGV2LT5ibGt0b3RhbCA9IGtzLmZfYmxvY2tzOwotCQljb3dkZXYtPmJsa2F2YWlsID0ga3MuZl9iYXZhaWw7Ci0JfSBlbHNlIHsKLQkJY293ZGV2LT5ibGtzaXplICA9IDEwMjQ7CS8qIGF2b2lkIGRpdmlzaW9uIGJ5IHplcm8gKi8KLQl9Ci0KLQkvKgotCSoqIGZsdXNoIHRoZSAocmVjb3ZlcmVkKSBiaXRtYXBzIGFuZCBjb3doZWFkIHRvIHRoZSBjb3dmaWxlCi0JKi8KLQlERUJVR1AoRENPVyJjb3dsb29wIC0gY2FsbCBjb3dzeW5jLi4uLlxuIik7Ci0KLQljb3dsb19zeW5jKCk7Ci0KLQkvKgotCSoqIGFsbG9jYXRlIGdlbmRpc2sgZm9yIHRoZSBjb3cgZGV2aWNlCi0JKi8KLQlERUJVR1AoRENPVyJjb3dsb29wIC0gYWxsb2MgZGlzay4uLi5cbiIpOwotCi0JaWYgKChjb3dkZXYtPmdkID0gYWxsb2NfZGlzaygxKSkgPT0gTlVMTCkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCSAgICAgICAiY293bG9vcCAtIHVuYWJsZSB0byBhbGxvY19kaXNrIGZvciBjb3dsb29wXG4iKTsKLQotCQljb3dsb191bmRvX29wZW5yZG8oY293ZGV2KTsKLQkJY293bG9fdW5kb19vcGVuY293KGNvd2Rldik7Ci0JCXVwKCZjb3dkZXZsb2NrKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JY293ZGV2LT5nZC0+bWFqb3IgICAgICAgID0gQ09XTUFKT1I7Ci0JY293ZGV2LT5nZC0+Zmlyc3RfbWlub3IgID0gbWlub3I7Ci0JY293ZGV2LT5nZC0+bWlub3JzICAgICAgID0gMTsKLQljb3dkZXYtPmdkLT5mb3BzICAgICAgICAgPSAmY293bG9fZm9wczsKLQljb3dkZXYtPmdkLT5wcml2YXRlX2RhdGEgPSBjb3dkZXY7Ci0Jc3ByaW50Zihjb3dkZXYtPmdkLT5kaXNrX25hbWUsICIlcyVkIiwgREVWSUNFX05BTUUsIG1pbm9yKTsKLQotCS8qIGluIC41IEtiIHVuaXRzICovCi0Jc2V0X2NhcGFjaXR5KGNvd2Rldi0+Z2QsIChjb3dkZXYtPm51bWJsb2NrcyooTUFQVU5JVC81MTIpKSk7Ci0KLQlERUJVR1AoRENPVyJjb3dsb29wIC0gaW5pdCByZXF1ZXN0IHF1ZXVlLi4uLlxuIik7Ci0KLQlpZiAoKGNvd2Rldi0+cnF1ZXVlID0gYmxrX2luaXRfcXVldWUoY293bG9fcmVxdWVzdCwgJmNvd2Rldi0+cnFsb2NrKSkKLQkJCQkJCQkJPT0gTlVMTCkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCSAgICAgICAiY293bG9vcCAtIHVuYWJsZSB0byBnZXQgcmVxdWVzdCBxdWV1ZSBmb3IgY293bG9vcFxuIik7Ci0KLQkJZGVsX2dlbmRpc2soY293ZGV2LT5nZCk7Ci0JCWNvd2xvX3VuZG9fb3BlbnJkbyhjb3dkZXYpOwotCQljb3dsb191bmRvX29wZW5jb3coY293ZGV2KTsKLQkJdXAoJmNvd2RldmxvY2spOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlibGtfcXVldWVfbG9naWNhbF9ibG9ja19zaXplKGNvd2Rldi0+cnF1ZXVlLCBjb3dkZXYtPmJsb2Nrc3opOwotCWNvd2Rldi0+Z2QtPnF1ZXVlID0gY293ZGV2LT5ycXVldWU7Ci0KLQkvKgotCSoqIHN0YXJ0IGtlcm5lbCB0aHJlYWQgdG8gaGFuZGxlIHJlcXVlc3RzCi0JKi8KLQlERUJVR1AoRENPVyJjb3dsb29wIC0ga2lja29mZiBkYWVtb24uLi4uXG4iKTsKLQotCWNvd2Rldi0+cGlkID0ga2VybmVsX3RocmVhZCgoaW50ICgqKSh2b2lkICopKWNvd2xvX2RhZW1vbiwgY293ZGV2LCAwKTsKLQotCS8qCi0JKiogY3JlYXRlIGEgZmlsZSBiZWxvdyBkaXJlY3RvcnkgL3Byb2MvY293IGZvciB0aGlzIG5ldyBjb3dkZXZpY2UKLQkqLwotCWlmIChjb3dsb19wcm9jZGlyKSB7Ci0JCWNoYXIgCXRtcG5hbWVbNjRdOwotCi0JCXNwcmludGYodG1wbmFtZSwgIiVkIiwgbWlub3IpOwotCi0JCWNyZWF0ZV9wcm9jX3JlYWRfZW50cnkodG1wbmFtZSwgMCAsIGNvd2xvX3Byb2NkaXIsCi0JCQkJCQljb3dsb19yZWFkcHJvYywgY293ZGV2KTsKLQl9Ci0KLQljb3dkZXYtPnN0YXRlCXw9IENPV0RFVk9QRU47Ci0KLQljb3dkZXYtPnJkb25hbWUgPSByZG9mOwotCWNvd2Rldi0+Y293bmFtZSA9IGNvd2Y7Ci0KLQkvKgotCSoqIGVuYWJsZSB0aGUgbmV3IGRpc2s7IHRoaXMgdHJpZ2dlcnMgdGhlIGZpcnN0IHJlcXVlc3QhCi0JKi8KLQlERUJVR1AoRENPVyJjb3dsb29wIC0gY2FsbCBhZGRfZGlzay4uLi5cbiIpOwotCi0JYWRkX2Rpc2soY293ZGV2LT5nZCk7Ci0KLQl1cCgmY293ZGV2bG9jayk7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0qKiBjbG9zZSBhIGNvd2RldmljZSAocGFpciBvZiByZG9maWxlL2Nvd2ZpbGUpIGFuZCByZWxlYXNlIG1lbW9yeQotKioKLSoqIHJldHVybnM6Ci0qKiAJMCAgIC0gb2theQotKiogICAgPCAwICAgLSBlcnJvciB2YWx1ZQotKi8KLXN0YXRpYyBpbnQKLWNvd2xvX2Nsb3NlcGFpcihzdHJ1Y3QgY293bG9vcF9kZXZpY2UgKmNvd2RldikKLXsKLQlpbnQgbWlub3I7Ci0KLQlkb3duKCZjb3dkZXZsb2NrKTsKLQotCS8qCi0JKiogaWYgY293ZGV2aWNlIGlzIG5vdCBhY3RpdmF0ZWQgYXQgYWxsLCByZWZ1c2UKLQkqLwotCWlmICggIShjb3dkZXYtPnN0YXRlICYgQ09XREVWT1BFTikgKSB7Ci0JCXVwKCZjb3dkZXZsb2NrKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCi0JLyoKLQkqKiBpZiB0aGlzIGNvd2RldmljZSBpcyBzdGlsbCBvcGVuLCByZWZ1c2UKLQkqLwotCWlmIChjb3dkZXYtPm9wZW5jbnQgPiAwKSB7Ci0JCXVwKCZjb3dkZXZsb2NrKTsKLQkJcmV0dXJuIC1FQlVTWTsKLQl9Ci0KLQl1cCgmY293ZGV2bG9jayk7Ci0KLQkvKgotCSoqIHdha2V1cCB3YXRjaGVyIChpZiBhbnkpCi0JKi8KLQlpZiAoY293ZGV2LT5zdGF0ZSAmIENPV1dBVENIRE9HKSB7Ci0JCWNvd2Rldi0+d2F0Y2h0aHJlc2ggPSBjb3dkZXYtPmJsa2F2YWlsOwotCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmNvd2Rldi0+d2F0Y2hxKTsKLQl9Ci0KLQkvKgotCSoqIHdha2V1cCBrZXJuZWwtdGhyZWFkIHRvIGJlIGFibGUgdG8gZXhpdAotCSoqIGFuZCB3YWl0IHVudGlsIGl0IGhhcyBleGl0ZWQKLQkqLwotCWNvd2Rldi0+Y2xvc2Vkb3duID0gMTsKLQljb3dkZXYtPnFmaWxsZWQgICA9IDE7Ci0Jd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZjb3dkZXYtPndhaXRxKTsKLQotICAgICAgIAl3aGlsZSAoY293ZGV2LT5waWQpCi0gICAgICAgICAgICAgICAJc2NoZWR1bGUoKTsKLQotCWRlbF9nZW5kaXNrKGNvd2Rldi0+Z2QpOyAgLyogcmV2ZXJ0IHRoZSBhbGxvY19kaXNrKCkgKi8KLQlwdXRfZGlzayhjb3dkZXYtPmdkKTsgICAgIC8qIHJldmVydCB0aGUgYWRkX2Rpc2soKSAgICovCi0KLQlpZiAoY293bG9fcHJvY2RpcikgewotCQljaGFyIAl0bXBuYW1lWzY0XTsKLQotCQlmb3IgKG1pbm9yID0gMDsgbWlub3IgPCBtYXhjb3dzOyBtaW5vcisrKSB7Ci0JCQlpZiAoY293ZGV2ID09IGNvd2RldmFsbFttaW5vcl0pIGJyZWFrOwotCQl9Ci0JCXNwcmludGYodG1wbmFtZSwgIiVkIiwgbWlub3IpOwotCi0JCXJlbW92ZV9wcm9jX2VudHJ5KHRtcG5hbWUsIGNvd2xvX3Byb2NkaXIpOwotCX0KLQotCWJsa19jbGVhbnVwX3F1ZXVlKGNvd2Rldi0+cnF1ZXVlKTsKLQotCS8qCi0JKiogcmVsZWFzZSBtZW1vcnkgZm9yIGZpbGVuYW1lcyBpZiB0aGVzZSBuYW1lcyBoYXZlCi0JKiogYmVlbiBhbGxvY2F0ZWQgZHluYW1pY2FsbHkKLQkqLwotCWlmICggKGNvd2Rldi0+Y293bmFtZSkgJiYgKGNvd2Rldi0+Y293bmFtZSAhPSBjb3dmaWxlKSkKLQkJa2ZyZWUoY293ZGV2LT5jb3duYW1lKTsKLQotCWlmICggKGNvd2Rldi0+cmRvbmFtZSkgJiYgKGNvd2Rldi0+cmRvbmFtZSAhPSByZG9maWxlKSkKLQkJa2ZyZWUoY293ZGV2LT5yZG9uYW1lKTsKLQotCWNvd2xvX3VuZG9fb3BlbnJkbyhjb3dkZXYpOwotCWNvd2xvX3VuZG9fb3BlbmNvdyhjb3dkZXYpOwotCi0JY293ZGV2LT5zdGF0ZSAmPSB+Q09XREVWT1BFTjsKLQotCXJldHVybiAwOwotfQotCi0vKgotKiogb3BlbiB0aGUgcmVhZC1vbmx5IGZpbGUKLSoqCi0qKiByZXR1cm5zOgotKiogCTAgICAtIG9rYXkKLSoqICAgIDwgMCAgIC0gZXJyb3IgdmFsdWUKLSovCi1zdGF0aWMgaW50Ci1jb3dsb19vcGVucmRvKHN0cnVjdCBjb3dsb29wX2RldmljZSAqY293ZGV2LCBjaGFyICpyZG9mKQotewotCXN0cnVjdCBmaWxlCSpmOwotCXN0cnVjdCBpbm9kZQkqaW5vZGU7Ci0JbG9uZyBpbnQJaSwgbnJ2YWw7Ci0KLQlERUJVR1AoRENPVyJjb3dsb29wIC0gb3BlbnJkbyBjYWxsZWRcbiIpOwotCi0JLyoKLQkqKiBvcGVuIHRoZSByZWFkLW9ubHkgZmlsZQotCSovCi0gICAgICAgIGlmKCpyZG9mID09ICdcMCcpIHsKLSAgICAgCSAgICAgCXByaW50ayhLRVJOX0VSUgotCQkgICAgICAgImNvd2xvb3AgLSBzcGVjaWZ5IG5hbWUgZm9yIHJlYWQtb25seSBmaWxlXG5cbiIpOwotICAgICAgICAgCXJldHVybiAtRUlOVkFMOwotICAgICAgICB9Ci0KLQlmID0gZmlscF9vcGVuKHJkb2YsIE9fUkRPTkxZfE9fTEFSR0VGSUxFLCAwKTsKLQotCWlmICggKGYgPT0gTlVMTCkgfHwgSVNfRVJSKGYpICkgewotCQlwcmludGsoS0VSTl9FUlIKLQkJICAgICAgICJjb3dsb29wIC0gb3BlbiBvZiByZG9maWxlICVzIGZhaWxlZFxuIiwgcmRvZik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWNvd2Rldi0+cmRvZnAgPSBmOwotCi0JaW5vZGUgPSBmLT5mX2RlbnRyeS0+ZF9pbm9kZTsKLQotCWlmICggIVNfSVNSRUcoaW5vZGUtPmlfbW9kZSkgJiYgIVNfSVNCTEsoaW5vZGUtPmlfbW9kZSkgKSB7Ci0JCXByaW50ayhLRVJOX0VSUgotCQkgICAgICAgImNvd2xvb3AgLSAlcyBub3QgcmVndWxhciBmaWxlIG9yIGJsb2NrZGV2XG4iLCByZG9mKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JREVCVUdQKERDT1ciY293bG9vcCAtIGRldGVybWluZSBzaXplIHJkby4uLi5cbiIpOwotCi0JLyoKLQkqKiBkZXRlcm1pbmUgYmxvY2stc2l6ZSBhbmQgdG90YWwgc2l6ZSBvZiByZWFkLW9ubHkgZmlsZQotCSovCi0JaWYgKFNfSVNSRUcoaW5vZGUtPmlfbW9kZSkpIHsKLQkJLyoKLQkJKiogcmVhZC1vbmx5IGZpbGUgaXMgYSByZWd1bGFyIGZpbGUKLQkJKi8KLQkJY293ZGV2LT5ibG9ja3N6ICAgPSA1MTI7CS8qIG90aGVyIHZhbHVlIGZhaWxzICovCi0JCWNvd2Rldi0+bnVtYmxvY2tzID0gaW5vZGUtPmlfc2l6ZSA+PiBNVVNISUZUOwotCi0JCWlmIChpbm9kZS0+aV9zaXplICYgTVVNQVNLKSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCQkgICAgICAgImNvd2xvb3AgLSByZG9maWxlICVzIHRydW5jYXRlZCB0byBtdWx0aXBsZSAiCi0JCQkgICAgICAgIm9mICVkIGJ5dGVzXG4iLCByZG9mLCBNQVBVTklUKTsKLQkJfQotCi0JCURFQlVHUChEQ09XImNvd2xvb3AgLSBSTz1yZWd1bGFyOiBudW1ibG9ja3M9JWQsIGJsb2Nrc3o9JWRcbiIsCi0JCQljb3dkZXYtPm51bWJsb2NrcywgY293ZGV2LT5ibG9ja3N6KTsKLQl9IGVsc2UgewotCQkvKgotCQkqKiByZWFkLW9ubHkgZmlsZSBpcyBhIGJsb2NrIGRldmljZQotCQkqLwotCQljb3dkZXYtPmJlbG93ZGV2ICA9IGlub2RlLT5pX2JkZXY7Ci0JCWNvd2Rldi0+YmVsb3dnZCAgID0gY293ZGV2LT5iZWxvd2Rldi0+YmRfZGlzazsgLyogZ2VuZGlzayAqLwotCi0JCWlmIChjb3dkZXYtPmJlbG93ZGV2LT5iZF9wYXJ0KSB7Ci0JCQljb3dkZXYtPm51bWJsb2NrcyA9IGNvd2Rldi0+YmVsb3dkZXYtPmJkX3BhcnQtPm5yX3NlY3RzCi0JCQkJCQkJCS8gKE1BUFVOSVQvNTEyKTsKLQkJfQotCi0JCWlmIChjb3dkZXYtPmJlbG93Z2QpIHsKLQkJCWNvd2Rldi0+YmVsb3dxID0gY293ZGV2LT5iZWxvd2dkLT5xdWV1ZTsKLQotCQkJaWYgKGNvd2Rldi0+bnVtYmxvY2tzID09IDApIHsKLQkJCQljb3dkZXYtPm51bWJsb2NrcyA9IGdldF9jYXBhY2l0eShjb3dkZXYtPmJlbG93Z2QpCi0gICAgICAgICAgICAgICAgICAgICAgICAgCQkJCQkvIChNQVBVTklULzUxMik7Ci0JCQl9Ci0JCX0KLQotCi0JCWlmIChjb3dkZXYtPmJlbG93cSkKLQkJCWNvd2Rldi0+YmxvY2tzeiA9IHF1ZXVlX2xvZ2ljYWxfYmxvY2tfc2l6ZShjb3dkZXYtPmJlbG93cSk7Ci0KLQkJaWYgKGNvd2Rldi0+YmxvY2tzeiA9PSAwKQotCQkJY293ZGV2LT5ibG9ja3N6ID0gQkxPQ0tfU0laRTsgLyogZGVmYXVsdCAyXjEwICovCi0KLQkJREVCVUdQKERDT1ciY293bG9vcCAtIG51bWJsb2Nrcz0lZCwgIgotCQkgICAgICAgICAgICJibG9ja3N6PSVkLCBiZWxvd2dkPSVwLCBiZWxvd3E9JXBcbiIsCi0JCSAgCWNvd2Rldi0+bnVtYmxvY2tzLCBjb3dkZXYtPmJsb2Nrc3osCi0JCQljb3dkZXYtPmJlbG93Z2QsIGNvd2Rldi0+YmVsb3dxKTsKLQotCQlERUJVR1AoRENPVyJjb3dsb29wIC0gYmVsb3dkZXYuYmRfYmxvY2tfc2l6ZT0lZFxuIiwKLQkJICAJY293ZGV2LT5iZWxvd2Rldi0+YmRfYmxvY2tfc2l6ZSk7Ci0JfQotCi0JaWYgKGNvd2Rldi0+bnVtYmxvY2tzID09IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJjb3dsb29wIC0gJXMgaGFzIG5vIGNvbnRlbnRzXG4iLCByZG9mKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JLyoKLQkqKiByZXNlcnZlIHNwYWNlIGluIG1lbW9yeSBhcyBnZW5lcmljIEkvTyBidWZmZXIKLQkqLwotCWNvd2Rldi0+aW9idWYgID0ga21hbGxvYyhNQVBVTklULCBHRlBfS0VSTkVMKTsKLQotCWlmICghY293ZGV2LT5pb2J1ZikgewotCQlwcmludGsoS0VSTl9FUlIKLQkJICAgICAgICJjb3dsb29wIC0gY2Fubm90IGdldCBzcGFjZSBmb3IgYnVmZmVyICVkXG4iLCBNQVBVTklUKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JREVCVUdQKERDT1ciY293bG9vcCAtIGRldGVybWluZSBmaW5nZXJwcmludCByZG8uLi4uXG4iKTsKLQotCS8qCi0JKiogZGV0ZXJtaW5lIGZpbmdlcnByaW50IGZvciByZWFkLW9ubHkgZmlsZQotCSoqIAljYWxjdWxhdGUgZmluZ2VycHJpbnQgZnJvbSBmaXJzdCBmb3VyIGRhdGFibG9ja3MKLQkqKgl3aGljaCBkbyBub3QgY29udGFpbiBiaW5hcnkgemVyb2VzCi0JKi8KLQlmb3IgKGk9MCwgY293ZGV2LT5maW5nZXJwcmludD0wLCBucnZhbD0wOwotCQkJKG5ydmFsIDwgNCkmJihpIDwgY293ZGV2LT5udW1ibG9ja3MpOyBpKyspIHsKLQkJaW50IAkJajsKLQkJdW5zaWduZWQgY2hhcgljczsKLQotCQkvKgotCQkqKiByZWFkIG5leHQgYmxvY2sKLQkJKi8KLQkJaWYgKGNvd2xvX3JlYWRyZG8oY293ZGV2LCBjb3dkZXYtPmlvYnVmLCBNQVBVTklULAotCQkJCQkJKGxvZmZfdClpIDw8IE1VU0hJRlQpIDwgMSkKLQkJCWJyZWFrOwotCi0JCS8qCi0JCSoqIGNhbGN1bGF0ZSBmaW5nZXJwcmludCBieSBhZGRpbmcgYWxsIGJ5dGUtdmFsdWVzCi0JCSovCi0JCWZvciAoaj0wLCBjcz0wOyBqIDwgTUFQVU5JVDsgaisrKQotCQkJY3MgKz0gKihjb3dkZXYtPmlvYnVmK2opOwotCi0JCWlmIChjcyA9PSAwKQkvKiBibG9jayBwcm9iYWJseSBjb250YWluZWQgemVyb2VzICovCi0JCQljb250aW51ZTsKLQotCQkvKgotCQkqKiBzaGlmdCBieXRlLXZhbHVlIHRvIHByb3BlciBwbGFjZSBpbiBmaW5hbCBmaW5nZXJwcmludAotCQkqLwotCQljb3dkZXYtPmZpbmdlcnByaW50IHw9IGNzIDw8IChucnZhbCo4KTsKLQkJbnJ2YWwrKzsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSoqIHVuZG8gbWVtb3J5IGFsbG9jcyBhbmQgZmlsZSBvcGVucyBpc3N1ZWQgc28gZmFyCi0qKiByZWxhdGVkIHRvIHRoZSByZWFkLW9ubHkgZmlsZQotKi8KLXN0YXRpYyB2b2lkCi1jb3dsb191bmRvX29wZW5yZG8oc3RydWN0IGNvd2xvb3BfZGV2aWNlICpjb3dkZXYpCi17Ci0JaWYoY293ZGV2LT5pb2J1Zik7Ci0JCWtmcmVlKGNvd2Rldi0+aW9idWYpOwotCi0JaWYgKGNvd2Rldi0+cmRvZnApCi0gIAkJZmlscF9jbG9zZShjb3dkZXYtPnJkb2ZwLCAwKTsKLX0KLQotLyoKLSoqIG9wZW4gdGhlIGNvd2ZpbGUKLSoqCi0qKiByZXR1cm5zOgotKiogCTAgICAtIG9rYXkKLSoqICAgIDwgMCAgIC0gZXJyb3IgdmFsdWUKLSovCi1zdGF0aWMgaW50Ci1jb3dsb19vcGVuY293KHN0cnVjdCBjb3dsb29wX2RldmljZSAqY293ZGV2LCBjaGFyICpjb3dmLCBpbnQgYXV0b3JlY292ZXIpCi17Ci0JbG9uZyBpbnQJCWksIHJ2OwotCWludAkJCW1pbm9yOwotCXVuc2lnbmVkIGxvbmcJCW5iOwotCXN0cnVjdCBmaWxlCQkqZjsKLQlzdHJ1Y3QgaW5vZGUJCSppbm9kZTsKLQlsb2ZmX3QJCQlvZmZzZXQ7Ci0Jc3RydWN0IGNvd2xvb3BfZGV2aWNlCSpjb3d0bXA7Ci0KLQlERUJVR1AoRENPVyJjb3dsb29wIC0gb3BlbmNvdyBjYWxsZWRcbiIpOwotCi0JLyoKLQkqKiBvcGVuIGNvcHktb24td3JpdGUgZmlsZSAocmVhZC13cml0ZSkKLQkqLwotICAgICAgICBpZiAoY293ZlswXSA9PSAnXDAnKSB7Ci0gICAgICAgICAgCXByaW50ayhLRVJOX0VSUgotICAgICAgICAgICAgICAgICAiY293bG9vcCAtIHNwZWNpZnkgbmFtZSBvZiBjb3B5LW9uLXdyaXRlIGZpbGVcblxuIik7Ci0gICAgICAgICAJcmV0dXJuIC1FSU5WQUw7Ci0gICAgICAgIH0KLQotCWYgPSBmaWxwX29wZW4oY293ZiwgT19SRFdSfE9fTEFSR0VGSUxFLCAwNjAwKTsKLQotCWlmICggKGYgPT0gTlVMTCkgfHwgSVNfRVJSKGYpICkgewotCQkvKgotCQkqKiBub24tZXhpc3RpbmcgY293ZmlsZTogdHJ5IHRvIGNyZWF0ZQotCQkqLwotCQlmID0gZmlscF9vcGVuKGNvd2YsIE9fUkRXUnxPX0NSRUFUfE9fTEFSR0VGSUxFLCAwNjAwKTsKLQotCQlpZiAoIChmID09IE5VTEwpIHx8IElTX0VSUihmKSApIHsKLQkJCXByaW50ayhLRVJOX0VSUgotCQkgICAgICAgCSAgImNvd2xvb3AgLSBmYWlsZWQgdG8gb3BlbiBmaWxlICVzIGZvciByZWFkLXdyaXRlXG5cbiIsCi0JCSAgICAgICAJCQkJCQljb3dmKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCSAJfQotCX0KLQotCWNvd2Rldi0+Y293ZnAgPSBmOwotCi0JaW5vZGUgPSBmLT5mX2RlbnRyeS0+ZF9pbm9kZTsKLQotCWlmICghU19JU1JFRyhpbm9kZS0+aV9tb2RlKSkgewotCQlwcmludGsoS0VSTl9FUlIgImNvd2xvb3AgLSAlcyBpcyBub3QgcmVndWxhciBmaWxlXG4iLCBjb3dmKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JLyoKLQkqKiBjaGVjayBpZiB0aGlzIGNvd2ZpbGUgaXMgYWxyZWFkeSBpbiB1c2UgZm9yIGFub3RoZXIgY293ZGV2aWNlCi0JKi8KLQlmb3IgKG1pbm9yID0gMDsgbWlub3IgPCBtYXhjb3dzOyBtaW5vcisrKSB7Ci0KLQkJY293dG1wID0gY293ZGV2YWxsW21pbm9yXTsKLQotCQlpZiAoICEoY293dG1wLT5zdGF0ZSAmIENPV0RFVk9QRU4pICkKLQkJCWNvbnRpbnVlOwotCi0JCWlmIChjb3d0bXAgPT0gY293ZGV2KQotCQkJY29udGludWU7Ci0KLQkJaWYgKGNvd3RtcC0+Y293ZnAtPmZfZGVudHJ5LT5kX2lub2RlID09IGYtPmZfZGVudHJ5LT5kX2lub2RlKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIKLQkJCSAgICAgICAiY293bG9vcCAtICVzOiBhbHJlYWR5IGluIHVzZSBhcyBjb3dcbiIsIGNvd2YpOwotCQkJcmV0dXJuIC1FQlVTWTsKLQkJfQotCX0KLQotCS8qCi0JKiogbWFyayBjb3dmaWxlIG9wZW4gZm9yIHJlYWQtd3JpdGUKLQkqLwotCWNvd2Rldi0+c3RhdGUgfD0gQ09XUldDT1dPUEVOOwotCi0JLyoKLQkqKiBjYWxjdWxhdGUgc2l6ZSAoaW4gYnl0ZXMpIGZvciB0b3RhbCBiaXRtYXAgaW4gY293ZmlsZTsKLQkqKiB3aGVuIHRoZSBzaXplIG9mIHRoZSBjb3doZWFkIGJsb2NrIGlzIGFkZGVkLCB0aGUgc3RhcnQtb2Zmc2V0Ci0JKiogZm9yIHRoZSBtb2RpZmllZCBkYXRhIGJsb2NrcyBjYW4gYmUgZm91bmQKLQkqLwotCW5iID0gY293ZGV2LT5udW1ibG9ja3M7Ci0KLQlpZiAobmIlOCkJCS8qIHRyYW5zZm9ybSAjYml0cyB0byAjYnl0ZXMgKi8KLQkJbmIrPTg7ICAJLyogcm91bmRlZCBpZiBuZWNlc3NhcnkgICAgICAqLwotCW5iIC89IDg7Ci0KLQlpZiAobmIgJiBNVU1BU0spCS8qIHJvdW5kIHVwICNieXRlcyB0byBNQVBVTklUIGNodW5rcyAqLwotCQljb3dkZXYtPm1hcHNpemUgPSAoIChuYj4+TVVTSElGVCkgKzEpIDw8IE1VU0hJRlQ7Ci0JZWxzZQotCQljb3dkZXYtPm1hcHNpemUgPSBuYjsKLQotCS8qCi0JKiogcmVzZXJ2ZSBzcGFjZSBpbiBtZW1vcnkgZm9yIHRoZSBjb3doZWFkCi0JKi8KLQljb3dkZXYtPmNvd2hlYWQgPSBrbWFsbG9jKE1BUFVOSVQsIEdGUF9LRVJORUwpOwotCi0JaWYgKCFjb3dkZXYtPmNvd2hlYWQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJjb3dsb29wIC0gY2Fubm90IGdldCBzcGFjZSBmb3IgY293aGVhZCAlZFxuIiwKLQkJCQkJCQkJICAgICBNQVBVTklUKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JbWVtc2V0KGNvd2Rldi0+Y293aGVhZCwgMCwgTUFQVU5JVCk7Ci0KLQlERUJVR1AoRENPVyJjb3dsb29wIC0gcHJlcGFyZSBjb3doZWFkLi4uLlxuIik7Ci0KLQkvKgotCSoqIGNoZWNrIGlmIHRoZSBjb3dmaWxlIGV4aXN0cyBvciBzaG91bGQgYmUgY3JlYXRlZAotCSovCi0JaWYgKGlub2RlLT5pX3NpemUgIT0gMCkgewotCQkvKgotCQkqKiBleGlzdGluZyBjb3dmaWxlOiByZWFkIHRoZSBjb3cgaGVhZAotCQkqLwotCQlpZiAoaW5vZGUtPmlfc2l6ZSA8IE1BUFVOSVQpIHsKLQkJCXByaW50ayhLRVJOX0VSUgotCQkJICAgICAgICJjb3dsb29wIC0gZXhpc3RpbmcgY293ZmlsZSAlcyB0b28gc21hbGxcbiIsCi0JCQkJY293Zik7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCi0JCWNvd2xvX3JlYWRjb3dyYXcoY293ZGV2LCBjb3dkZXYtPmNvd2hlYWQsIE1BUFVOSVQsIChsb2ZmX3QpIDApOwotCi0JCS8qCi0JCSoqIHZlcmlmeSBpZiB0aGUgZXhpc3RpbmcgZmlsZSBpcyByZWFsbHkgYSBjb3dmaWxlCi0JCSovCi0JCWlmIChjb3dkZXYtPmNvd2hlYWQtPm1hZ2ljICE9IENPV01BR0lDKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIKLQkJCSAgICAgICAiY293bG9vcCAtIGNvd2ZpbGUgJXMgaGFzIGluY29ycmVjdCBmb3JtYXRcbiIsCi0JCQkJY293Zik7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCi0JCS8qCi0JCSoqIHZlcmlmeSB0aGUgY293aGVhZCB2ZXJzaW9uIG9mIHRoZSBjb3dmaWxlCi0JCSovCi0JCWlmIChjb3dkZXYtPmNvd2hlYWQtPnZlcnNpb24gPiBDT1dWRVJTSU9OKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIKLQkJCSAgICAgICAiY293bG9vcCAtIGNvd2ZpbGUgJXMgbmV3ZXIgdGhhbiB0aGlzIGRyaXZlclxuIiwKLQkJCQljb3dmKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0KLQkJLyoKLQkJKiogbWFrZSBzdXJlIHRoYXQgdGhpcyBpcyBub3QgYSBwYWNrZWQgY293ZmlsZQotCQkqLwotCQlpZiAoY293ZGV2LT5jb3doZWFkLT5mbGFncyAmIENPV1BBQ0tFRCkgewotCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkgICAgImNvd2xvb3AgLSBwYWNrZWQgY293ZmlsZSAlcyBub3QgYWNjZXB0ZWRcbiIsIGNvd2YpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQotCQkvKgotCQkqKiB2ZXJpZnkgaWYgdGhlIGNvd2ZpbGUgaGFzIGJlZW4gcHJvcGVybHkgY2xvc2VkCi0JCSovCi0JCWlmIChjb3dkZXYtPmNvd2hlYWQtPmZsYWdzICYgQ09XRElSVFkpIHsKLQkJCS8qCi0JCQkqKiBjb3dmaWxlIHdhcyBub3QgcHJvcGVybHkgY2xvc2VkOwotCQkJKiogY2hlY2sgaWYgYXV0b21hdGljIHJlY292ZXJ5IGlzIHJlcXVpcmVkCi0JCQkqKiAoYWN0dWFsIHJlY292ZXJ5IHdpbGwgYmUgZG9uZSBsYXRlciBvbikKLQkJCSovCi0JCQlpZiAoIWF1dG9yZWNvdmVyKSB7Ci0JCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkJICAgICAgICJjb3dsb29wIC0gY293ZmlsZSAlcyBpcyBkaXJ0eSAiCi0JCQkJICAgICAgICIobm90IHByb3Blcmx5IGNsb3NlZCBieSBybW1vZD8pXG4iLAotCQkJCQljb3dmKTsKLQkJCQlwcmludGsoS0VSTl9FUlIKLQkJCQkgICAgICAgImNvd2xvb3AgLSBydW4gY293cmVwYWlyIG9yIHNwZWNpZnkgIgotCQkJCSAgICAgICAiJ29wdGlvbj1yJyB0byByZWNvdmVyXG4iKTsKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCX0KLQkJfQotCi0JCS8qCi0JCSoqIHZlcmlmeSBpZiB0aGUgY293ZmlsZSBpcyByZWFsbHkgcmVsYXRlZCB0byB0aGlzIHJkb2ZpbGUKLQkJKi8KLQkJaWYgKGNvd2Rldi0+Y293aGVhZC0+cmRvYmxvY2tzICE9IGNvd2Rldi0+bnVtYmxvY2tzKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIKLQkJICAgICAgIAkgICAgICAgImNvd2xvb3AgLSBjb3dmaWxlICVzIChzaXplICVsbGQpIG5vdCByZWxhdGVkICIKLQkJICAgICAgIAkgICAgICAgInRvIHJkb2ZpbGUgKHNpemUgJWxsZClcbiIsCi0JCQkJY293ZiwKLQkJCQkobG9uZyBsb25nKWNvd2Rldi0+Y293aGVhZC0+cmRvYmxvY2tzIDw8TVVTSElGVCwKLQkJCQkobG9uZyBsb25nKWNvd2Rldi0+bnVtYmxvY2tzIDw8TVVTSElGVCk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCi0JCWlmIChjb3dkZXYtPmNvd2hlYWQtPnJkb2ZpbmdlcnByaW50ICE9IGNvd2Rldi0+ZmluZ2VycHJpbnQpIHsKLQkJCXByaW50ayhLRVJOX0VSUgotCQkgICAgICAgCSAgICAgImNvd2xvb3AgLSBjb3dmaWxlICVzIG5vdCByZWxhdGVkIHRvIHJkb2ZpbGUgIgotCQkJICAgICAiIChmaW5nZXJwcmludCBlcnIgLSByZG9maWxlIG1vZGlmaWVkPylcbiIsIGNvd2YpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQl9IGVsc2UgewotCQkvKgotCQkqKiBuZXcgY293ZmlsZTogZGV0ZXJtaW5lIHRoZSBtaW5pbWFsIHNpemUgKGNvd2hlYWQrYml0bWFwKQotCQkqLwotCQlvZmZzZXQgPSAobG9mZl90KSBNQVBVTklUICsgY293ZGV2LT5tYXBzaXplIC0gMTsKLQotCQlpZiAoIGNvd2xvX3dyaXRlY293cmF3KGNvd2RldiwgIiIsIDEsIG9mZnNldCkgPCAxKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIKLQkJCSAgICAgICAiY293bG9vcCAtIGNhbm5vdCBzZXQgY293ZmlsZSB0byBzaXplICVsbGRcbiIsCi0JCQkJb2Zmc2V0KzEpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQotCQkvKgotCQkqKiBwcmVwYXJlIG5ldyBjb3doZWFkCi0JCSovCi0JCWNvd2Rldi0+Y293aGVhZC0+bWFnaWMJCT0gQ09XTUFHSUM7Ci0JCWNvd2Rldi0+Y293aGVhZC0+dmVyc2lvbgk9IENPV1ZFUlNJT047Ci0JCWNvd2Rldi0+Y293aGVhZC0+bWFwdW5pdAk9IE1BUFVOSVQ7Ci0JCWNvd2Rldi0+Y293aGVhZC0+bWFwc2l6ZQk9IGNvd2Rldi0+bWFwc2l6ZTsKLQkJY293ZGV2LT5jb3doZWFkLT5yZG9ibG9ja3MJPSBjb3dkZXYtPm51bWJsb2NrczsKLQkJY293ZGV2LT5jb3doZWFkLT5yZG9maW5nZXJwcmludAk9IGNvd2Rldi0+ZmluZ2VycHJpbnQ7Ci0JCWNvd2Rldi0+Y293aGVhZC0+Y293dXNlZAk9IDA7Ci0KLQkJLyoKLQkJKiogY2FsY3VsYXRlIHN0YXJ0IG9mZnNldCBvZiBkYXRhIGluIGNvd2ZpbGUsCi0JCSoqIHJvdW5kZWQgdXAgdG8gbXVsdGlwbGUgb2YgNEsgdG8gYXZvaWQKLQkJKiogdW5uZWNlc3NhcnkgZGlzay11c2FnZSBmb3Igd3JpdHRlbiBkYXRhYmxvY2tzIGluCi0JCSoqIHRoZSBzcGFyc2VkIGNvd2ZpbGUgb24gZS5nLiA0SyBmaWxlc3lzdGVtcwotCQkqLwotCQljb3dkZXYtPmNvd2hlYWQtPmRvZmZzZXQgPQotCQkJKChNQVBVTklUK2Nvd2Rldi0+bWFwc2l6ZSs0MDk1KT4+MTIpPDwxMjsKLQl9Ci0KLQljb3dkZXYtPmNvd2hlYWQtPmZsYWdzCT0gMDsKLQotCURFQlVHUChEQ09XImNvd2xvb3AgLSByZXNlcnZlIHNwYWNlIGJpdG1hcC4uLi5cbiIpOwotCi0JLyoKLQkqKiByZXNlcnZlIHNwYWNlIGluIG1lbW9yeSBmb3IgdGhlIGVudGlyZSBiaXRtYXAgYW5kCi0JKiogZmlsbCBpdCB3aXRoIHRoZSBiaXRtYXAtZGF0YSBmcm9tIGRpc2s7IHRoZSBlbnRpcmUKLQkqKiBiaXRtYXAgaXMgYWxsb2NhdGVkIGluIHNldmVyYWwgY2h1bmtzIGJlY2F1c2Uga21hbGxvYwotCSoqIGhhcyByZXN0cmljdGlvbnMgcmVnYXJkaW5nIHRoZSBhbGxvd2VkIHNpemUgcGVyIGttYWxsb2MKLQkqLwotCWNvd2Rldi0+bWFwY291bnQgPSAoY293ZGV2LT5tYXBzaXplK01BUENIVU5LU1otMSkvTUFQQ0hVTktTWjsKLQotCS8qCi0JKiogdGhlIHNpemUgb2YgZXZlcnkgYml0bWFwIGNodW5rIHdpbGwgYmUgTUFQQ0hVTktTWiBieXRlcywgZXhjZXB0IGZvcgotCSoqIHRoZSBsYXN0IGJpdG1hcCBjaHVuazogY2FsY3VsYXRlIHJlbWFpbmluZyBzaXplIGZvciB0aGlzIGNodW5rCi0JKi8KLQlpZiAoY293ZGV2LT5tYXBzaXplICUgTUFQQ0hVTktTWiA9PSAwKQotCQljb3dkZXYtPm1hcHJlbWFpbiA9IE1BUENIVU5LU1o7Ci0JZWxzZQotCQljb3dkZXYtPm1hcHJlbWFpbiA9IGNvd2Rldi0+bWFwc2l6ZSAlIE1BUENIVU5LU1o7Ci0KLQkvKgotCSoqIGFsbG9jYXRlIHNwYWNlIHRvIHN0b3JlIGFsbCBwb2ludGVycyBmb3IgdGhlIGJpdG1hcC1jaHVua3MKLQkqKiAoaW5pdGlhbGl6ZSBhcmVhIHdpdGggemVyb2VzIHRvIGFsbG93IHByb3BlciB1bmRvKQotCSovCi0JY293ZGV2LT5tYXBjYWNoZSA9IGttYWxsb2MoY293ZGV2LT5tYXBjb3VudCAqIHNpemVvZihjaGFyICopLAotCQkJCQkJCQlHRlBfS0VSTkVMKTsKLQlpZiAoIWNvd2Rldi0+bWFwY2FjaGUpIHsKLQkJcHJpbnRrKEtFUk5fRVJSCi0JCSAgICAgICAiY293bG9vcCAtIGNhbiBub3QgYWxsb2NhdGUgc3BhY2UgZm9yIGJpdG1hcCBwdHJzXG4iKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JbWVtc2V0KGNvd2Rldi0+bWFwY2FjaGUsIDAsIGNvd2Rldi0+bWFwY291bnQgKiBzaXplb2YoY2hhciAqKSk7Ci0KLQkvKgotCSoqIGFsbG9jYXRlIHNwYWNlIHRvIHN0b3JlIHRoZSBiaXRtYXAtY2h1bmtzIHRoZW1zZWx2ZXMKLQkqLwotCWZvciAoaT0wOyBpIDwgY293ZGV2LT5tYXBjb3VudDsgaSsrKSB7Ci0JCWlmIChpIDwgKGNvd2Rldi0+bWFwY291bnQtMSkpCi0JCQkqKGNvd2Rldi0+bWFwY2FjaGUraSkgPSBrbWFsbG9jKE1BUENIVU5LU1osIEdGUF9LRVJORUwpOwotCQllbHNlCi0JCQkqKGNvd2Rldi0+bWFwY2FjaGUraSkgPSBrbWFsbG9jKGNvd2Rldi0+bWFwcmVtYWluLAotCQkJCQkJICAgICAgICAgICAgICAgICAgR0ZQX0tFUk5FTCk7Ci0KLQkJaWYgKCooY293ZGV2LT5tYXBjYWNoZStpKSA9PSBOVUxMKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgImNvd2xvb3AgLSBubyBzcGFjZSBmb3IgYml0bWFwY2h1bmsgJWxkIgotCQkJCQkiIHRvdG1hcHN6PSVsZCwgbWFwY250PSVkIG1hcHVuaXQ9JWRcbiIsCi0JCQkJCWksIGNvd2Rldi0+bWFwc2l6ZSwgY293ZGV2LT5tYXBjb3VudCwKLQkJCQkJTUFQVU5JVCk7Ci0JCQlyZXR1cm4gLUVOT01FTTsKLQkJfQotCX0KLQotCURFQlVHUChEQ09XImNvd2xvb3AgLSByZWFkIGJpdG1hcCBmcm9tIGNvdy4uLi5cbiIpOwotCi0JLyoKLQkqKiByZWFkIHRoZSBlbnRpcmUgYml0bWFwIGZyb20gdGhlIGNvd2ZpbGUgaW50byB0aGUgaW4tbWVtb3J5IGNhY2hlOwotCSoqIGNvdW50IHRoZSBudW1iZXIgb2YgYmxvY2tzIHRoYXQgYXJlIGluIHVzZSBhbHJlYWR5Ci0JKiogKHN0YXRpc3RpY2FsIHB1cnBvc2VzKQotCSovCi0JZm9yIChpPTAsIG9mZnNldD1NQVBVTklUOyBpIDwgY293ZGV2LT5tYXBjb3VudDsKLQkJCQkJaSsrLCBvZmZzZXQrPU1BUENIVU5LU1opIHsKLQkJdW5zaWduZWQgbG9uZwludW1ieXRlczsKLQotCQlpZiAoaSA8IChjb3dkZXYtPm1hcGNvdW50LTEpKQotCQkJLyoKLQkJCSoqIGZ1bGwgYml0bWFwIGNodW5rCi0JCQkqLwotCQkJbnVtYnl0ZXMgPSBNQVBDSFVOS1NaOwotCQllbHNlCi0JCQkvKgotCQkJKiogbGFzdCBiaXRtYXAgY2h1bms6IG1pZ2h0IGJlIHBhcnRseSBmaWxsZWQKLQkJCSovCi0JCQludW1ieXRlcyA9IGNvd2Rldi0+bWFwcmVtYWluOwotCi0JCWNvd2xvX3JlYWRjb3dyYXcoY293ZGV2LCAqKGNvd2Rldi0+bWFwY2FjaGUraSksCi0JCQkJCQkJbnVtYnl0ZXMsIG9mZnNldCk7Ci0JfQotCi0JLyoKLQkqKiBpZiB0aGUgY293ZmlsZSB3YXMgZGlydHkgYW5kIGF1dG9tYXRpYyByZWNvdmVyeSBpcyByZXF1aXJlZCwKLQkqKiByZWNvbnN0cnVjdCBhIHByb3BlciBiaXRtYXAgaW4gbWVtb3J5IG5vdwotCSovCi0JaWYgKGNvd2Rldi0+Y293aGVhZC0+ZmxhZ3MgJiBDT1dESVJUWSkgewotCQl1bnNpZ25lZCBsb25nIGxvbmcJYmxvY2tudW07Ci0JCWNoYXIJCQlkYXRhYnVmW01BUFVOSVRdOwotCQl1bnNpZ25lZCBsb25nCQltYXBudW0sIG1hcGJ5dGUsIG1hcGJpdDsKLQotCQlwcmludGsoS0VSTl9OT1RJQ0UgImNvd2xvb3AgLSByZWNvdmVyIGRpcnR5IGNvd2ZpbGUgJXMuLi4uXG4iLAotCQkJCQkJCWNvd2YpOwotCi0JCS8qCi0JCSoqIHJlYWQgYWxsIGRhdGEgYmxvY2tzCi0JCSovCi0JCWZvciAoYmxvY2tudW09MCwgcnY9MSwgb2Zmc2V0PTA7Ci0JCQljb3dsb19yZWFkY293KGNvd2RldiwgZGF0YWJ1ZiwgTUFQVU5JVCwgb2Zmc2V0KSA+IDA7Ci0JCQlibG9ja251bSsrLCBvZmZzZXQgKz0gTUFQVU5JVCkgewotCi0JCQkvKgotCQkJKiogaWYgdGhpcyBkYXRhYmxvY2sgY29udGFpbnMgcmVhbCBkYXRhIChub3QgYmluYXJ5Ci0JCQkqKiB6ZXJvZXMpLCBzZXQgdGhlIGNvcnJlc3BvbmRpbmcgYml0IGluIHRoZSBiaXRtYXAKLQkJCSovCi0JCQlpZiAoIG1lbWNtcChkYXRhYnVmLCBhbGx6ZXJvZXMsIE1BUFVOSVQpID09IDApCi0JCQkJY29udGludWU7Ci0KLQkJCW1hcG51bSAgPSBDQUxDTUFQIChibG9ja251bSk7Ci0JCQltYXBieXRlID0gQ0FMQ0JZVEUoYmxvY2tudW0pOwotCQkJbWFwYml0ICA9IENBTENCSVQgKGJsb2NrbnVtKTsKLQotCQkJKigqKGNvd2Rldi0+bWFwY2FjaGUrbWFwbnVtKSttYXBieXRlKSB8PSAoMTw8bWFwYml0KTsKLQkJfQotCi0JCXByaW50ayhLRVJOX05PVElDRSAiY293bG9vcCAtIGNvd2ZpbGUgcmVjb3ZlcnkgY29tcGxldGVkXG4iKTsKLQl9Ci0KLQkvKgotCSoqIGNvdW50IGFsbCBiaXRzIHNldCBpbiB0aGUgYml0bWFwcyBmb3Igc3RhdGlzdGljYWwgcHVycG9zZXMKLQkqLwotCWZvciAoaT0wLCBjb3dkZXYtPm5yY293YmxvY2tzID0gMDsgaSA8IGNvd2Rldi0+bWFwY291bnQ7IGkrKykgewotCQlsb25nCW51bWJ5dGVzOwotCQljaGFyCSpwOwotCi0JCWlmIChpIDwgKGNvd2Rldi0+bWFwY291bnQtMSkpCi0JCQludW1ieXRlcyA9IE1BUENIVU5LU1o7Ci0JCWVsc2UKLQkJCW51bWJ5dGVzID0gY293ZGV2LT5tYXByZW1haW47Ci0KLQkJcCA9ICooY293ZGV2LT5tYXBjYWNoZStpKTsKLQotCQlmb3IgKG51bWJ5dGVzLS07IG51bWJ5dGVzID49IDA7IG51bWJ5dGVzLS0sIHArKykgewotCQkJLyoKLQkJCSoqIGZvciBvbmx5IGVpZ2h0IGNoZWNrcyB0aGUgZm9sbG93aW5nIGNvbnN0cnVjdGlvbgotCQkJKiogaXMgZmFzdGVyIHRoYW4gYSBsb29wLWNvbnN0cnVjdGlvbgotCQkJKi8KLQkJCWlmICgoKnApICYgMHgwMSkJY293ZGV2LT5ucmNvd2Jsb2NrcysrOwotCQkJaWYgKCgqcCkgJiAweDAyKQljb3dkZXYtPm5yY293YmxvY2tzKys7Ci0JCQlpZiAoKCpwKSAmIDB4MDQpCWNvd2Rldi0+bnJjb3dibG9ja3MrKzsKLQkJCWlmICgoKnApICYgMHgwOCkJY293ZGV2LT5ucmNvd2Jsb2NrcysrOwotCQkJaWYgKCgqcCkgJiAweDEwKQljb3dkZXYtPm5yY293YmxvY2tzKys7Ci0JCQlpZiAoKCpwKSAmIDB4MjApCWNvd2Rldi0+bnJjb3dibG9ja3MrKzsKLQkJCWlmICgoKnApICYgMHg0MCkJY293ZGV2LT5ucmNvd2Jsb2NrcysrOwotCQkJaWYgKCgqcCkgJiAweDgwKQljb3dkZXYtPm5yY293YmxvY2tzKys7Ci0JCX0KLQl9Ci0KLQkvKgotCSoqIGNvbnNpc3RlbmN5LWNoZWNrIGZvciBudW1iZXIgb2YgYml0cyBzZXQgaW4gYml0bWFwCi0JKi8KLQlpZiAoICEoY293ZGV2LT5jb3doZWFkLT5mbGFncyAmIENPV0RJUlRZKSAmJgotCSAgICAoY293ZGV2LT5jb3doZWFkLT5jb3d1c2VkICE9IGNvd2Rldi0+bnJjb3dibG9ja3MpICkgewotCQlwcmludGsoS0VSTl9FUlIgImNvd2xvb3AgLSBpbmNvbnNpc3RlbnQgY293ZmlsZSBhZG1pXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0qKiB1bmRvIG1lbW9yeSBhbGxvY3MgYW5kIGZpbGUgb3BlbnMgaXNzdWVkIHNvIGZhcgotKiogcmVsYXRlZCB0byB0aGUgY293ZmlsZQotKi8KLXN0YXRpYyB2b2lkCi1jb3dsb191bmRvX29wZW5jb3coc3RydWN0IGNvd2xvb3BfZGV2aWNlICpjb3dkZXYpCi17Ci0JaW50CWk7Ci0KLQlpZiAoY293ZGV2LT5tYXBjYWNoZSkgewotCQlmb3IgKGk9MDsgaSA8IGNvd2Rldi0+bWFwY291bnQ7IGkrKykgewotCQkJaWYgKCooY293ZGV2LT5tYXBjYWNoZStpKSAhPSBOVUxMKQotCQkJCWtmcmVlKCAqKGNvd2Rldi0+bWFwY2FjaGUraSkgKTsKLQkJfQotCi0JCWtmcmVlKGNvd2Rldi0+bWFwY2FjaGUpOwotCX0KLQotCWlmIChjb3dkZXYtPmNvd2hlYWQpCi0JCWtmcmVlKGNvd2Rldi0+Y293aGVhZCk7Ci0KLQlpZiAoIChjb3dkZXYtPnN0YXRlICYgQ09XQ09XT1BFTikgJiYgKGNvd2Rldi0+Y293ZnApICkKLSAgCQlmaWxwX2Nsb3NlKGNvd2Rldi0+Y293ZnAsIDApOwotCi0JLyoKLQkqKiBtYXJrIGNvd2ZpbGUgY2xvc2VkCi0JKi8KLQljb3dkZXYtPnN0YXRlICY9IH5DT1dDT1dPUEVOOwotfQotCi0vKgotKiogZmx1c2ggdGhlIGVudGlyZSBiaXRtYXAgYW5kIHRoZSBjb3doZWFkIChjbGVhbikgdG8gdGhlIGNvd2ZpbGUKLSoqCi0qKiBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBjb3dkZXZpY2VzLWxvY2sgc2V0Ci0qLwotc3RhdGljIHZvaWQKLWNvd2xvX3N5bmModm9pZCkKLXsKLQlpbnQJCQlpLCBtaW5vcjsKLQlsb2ZmX3QJCQlvZmZzZXQ7Ci0Jc3RydWN0IGNvd2xvb3BfZGV2aWNlCSpjb3dkZXY7Ci0KLQlmb3IgKG1pbm9yPTA7IG1pbm9yIDwgbWF4Y293czsgIG1pbm9yKyspIHsKLQkJY293ZGV2ID0gY293ZGV2YWxsW21pbm9yXTsKLQkJaWYgKCAhIChjb3dkZXYtPnN0YXRlICYgQ09XUldDT1dPUEVOKSApCi0JCQljb250aW51ZTsKLQotCQlmb3IgKGk9MCwgb2Zmc2V0PU1BUFVOSVQ7IGkgPCBjb3dkZXYtPm1hcGNvdW50OwotCQkJCQlpKyssIG9mZnNldCArPSBNQVBDSFVOS1NaKSB7Ci0JCQl1bnNpZ25lZCBsb25nCW51bWJ5dGVzOwotCi0JCQlpZiAoaSA8IChjb3dkZXYtPm1hcGNvdW50LTEpKQotCQkJCS8qCi0JCQkJKiogZnVsbCBiaXRtYXAgY2h1bmsKLQkJCQkqLwotCQkJCW51bWJ5dGVzID0gTUFQQ0hVTktTWjsKLQkJCWVsc2UKLQkJCQkvKgotCQkJCSoqIGxhc3QgYml0bWFwIGNodW5rOiBtaWdodCBiZSBwYXJ0bHkgZmlsbGVkCi0JCQkJKi8KLQkJCQludW1ieXRlcyA9IGNvd2Rldi0+bWFwcmVtYWluOwotCi0JCQlERUJVR1AoRENPVwotCQkJICAgICAgICJjb3dsb29wIC0gZmx1c2hpbmcgYml0bWFwICUyZCAoJTNsZCBLYilcbiIsCi0JCQkJCQkJaSwgbnVtYnl0ZXMvMTAyNCk7Ci0KLQkJCWlmIChjb3dsb193cml0ZWNvd3Jhdyhjb3dkZXYsICooY293ZGV2LT5tYXBjYWNoZStpKSwKLQkJCQkJCW51bWJ5dGVzLCBvZmZzZXQpIDwgbnVtYnl0ZXMpIHsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCi0JCS8qCi0JCSoqIGZsdXNoIGNsZWFuIHVwLXRvLWRhdGUgY293aGVhZCB0byBjb3dmaWxlCi0JCSovCi0JCWNvd2Rldi0+Y293aGVhZC0+Y293dXNlZAkgPSBjb3dkZXYtPm5yY293YmxvY2tzOwotCQljb3dkZXYtPmNvd2hlYWQtPmZsYWdzCQkmPSB+Q09XRElSVFk7Ci0KLQkJREVCVUdQKERDT1cgImNvd2xvb3AgLSBmbHVzaGluZyBjb3doZWFkICglM2QgS2IpXG4iLAotCQkJCQkJCU1BUFVOSVQvMTAyNCk7Ci0KLQkJY293bG9fd3JpdGVjb3dyYXcoY293ZGV2LCBjb3dkZXYtPmNvd2hlYWQsIE1BUFVOSVQsIChsb2ZmX3QpIDApOwotCX0KLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogTW9kdWxlIGxvYWRpbmcvdW5sb2FkaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKgotKiogY2FsbGVkIGR1cmluZyBpbnNtb2QvbW9kcHJvYmUKLSovCi1zdGF0aWMgaW50IF9faW5pdAotY293bG9faW5pdF9tb2R1bGUodm9pZCkKLXsKLQlpbnQJcnY7Ci0JaW50CW1pbm9yLCB1cHRvY293czsKLQotICAgICAgICByZXZpc2lvbltzaXplb2YgcmV2aXNpb24gLSAzXSA9ICdcMCc7Ci0KLSAgICAgICAgcHJpbnRrKEtFUk5fTk9USUNFICJjb3dsb29wIC0gKEMpIDIwMDkgQVRDb21wdXRpbmcubmwgLSB2ZXJzaW9uOiAlc1xuIiwgJnJldmlzaW9uWzExXSk7Ci0gICAgICAgIHByaW50ayhLRVJOX05PVElDRSAiY293bG9vcCAtIGluZm86IHd3dy5BVENvbXB1dGluZy5ubC9jb3dsb29wXG4iKTsKLQotCW1lbXNldChhbGx6ZXJvZXMsIDAsIE1BUFVOSVQpOwotCi0JLyoKLQkqKiBTZXR1cCBhZG1pbmlzdHJhdGlvbiBmb3IgYWxsIHBvc3NpYmxlIGNvd2RldmljZXMuCi0gICAgICAgICoqIE5vdGUgdGhhdCB0aGVpciBtaW5vciBudW1iZXJzIGdvIGZyb20gMCB0byBNQVhDT1dTLTEgaW5jbHVzaXZlCi0gICAgICAgICoqIGFuZCBtaW5vciA9PSBNQVhDT1dTLTEgaXMgcmVzZXJ2ZWQgZm9yIHRoZSBjb250cm9sIGRldmljZS4KLQkqLwotCWlmICgobWF4Y293cyA8IDEpIHx8IChtYXhjb3dzID4gTUFYQ09XUykpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkgICAgICAgImNvd2xvb3AgLSBtYXhjb3dzIGV4Y2VlZHMgbWF4aW11bSBvZiAlZFxuIiwgTUFYQ09XUyk7Ci0KLSAgICAgICAgICAgICAgICBtYXhjb3dzID0gREZMQ09XUzsKLSAgICAgICAgfQotCi0JLyogYWxsb2NhdGUgcm9vbSBmb3IgYSB0YWJsZSB3aXRoIGEgcG9pbnRlciB0byBlYWNoIGNvd2xvb3BfZGV2aWNlOiAqLwotICAgICAgICBpZiAoIChjb3dkZXZhbGwgPSBrbWFsbG9jKG1heGNvd3MgKiBzaXplb2Yoc3RydWN0IGNvd2xvb3BfZGV2aWNlICopLAotCQkJCQkJCUdGUF9LRVJORUwpKSA9PSBOVUxMKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJICAgICAgICAiY293bG9vcCAtIGNhbiBub3QgYWxsb2MgdGFibGUgZm9yICVkIGRldnNcbiIsIG1heGNvd3MpOwotCQl1cHRvY293cyA9IDA7Ci0JCXJ2ID0gLUVOT01FTTsKLQkJZ290byBlcnJvcl9vdXQ7Ci0JfQotCW1lbXNldChjb3dkZXZhbGwsIDAsIG1heGNvd3MgKiBzaXplb2Yoc3RydWN0IGNvd2xvb3BfZGV2aWNlICopKTsKLQkvKiB0aGVuIGhvb2sgYW4gYWN0dWFsIGNvd2xvb3BfZGV2aWNlIHN0cnVjdCB0byBlYWNoIHBvaW50ZXI6ICovCi0JZm9yIChtaW5vcj0wOyBtaW5vciA8IG1heGNvd3M7IG1pbm9yKyspIHsKLQkJaWYgKChjb3dkZXZhbGxbbWlub3JdID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGNvd2xvb3BfZGV2aWNlKSwKLQkJCQkJCUdGUF9LRVJORUwpKSA9PSBOVUxMKSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCSAgICAgICAgICAgImNvd2xvb3AgLSBjYW4gbm90IGFsbG9jIGFkbWluLXN0cnVjdCBmb3IgZGV2IG5vICVkXG4iLCBtaW5vcik7Ci0KLQkJCXVwdG9jb3dzID0gbWlub3I7IC8qIHRoaXMgaXMgaG93IGZhciB3ZSBnb3QuLi4uICovCi0JCQlydiA9IC1FTk9NRU07Ci0JCQlnb3RvIGVycm9yX291dDsKLQkJfQotICAgICAgICAJbWVtc2V0KGNvd2RldmFsbFttaW5vcl0sIDAsIHNpemVvZihzdHJ1Y3QgY293bG9vcF9kZXZpY2UpKTsKLQl9Ci0JdXB0b2Nvd3MgPSBtYXhjb3dzOyAvKiB3ZSBnb3QgYWxsIGRldmljZXMgKi8KLQotCXNlbWFfaW5pdCgmY293ZGV2bG9jaywgMSk7Ci0KLQkvKgotCSoqIHJlZ2lzdGVyIGNvd2xvb3AgbW9kdWxlCi0JKi8KLQlpZiAoIHJlZ2lzdGVyX2Jsa2RldihDT1dNQUpPUiwgREVWSUNFX05BTUUpIDwgMCkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCSAgICAiY293bG9vcCAtIHVuYWJsZSB0byBnZXQgbWFqb3IgJWQgZm9yIGNvd2xvb3BcbiIsIENPV01BSk9SKTsKLQkJcnYgPSAtRUlPOwotCQlnb3RvIGVycm9yX291dDsKLQl9Ci0KLQkvKgotCSoqIGNyZWF0ZSBhIGRpcmVjdG9yeSBiZWxvdyAvcHJvYyB0byBhbGxvY2F0ZSBhIGZpbGUKLQkqKiBmb3IgZWFjaCBjb3dkZXZpY2UgdGhhdCBpcyBhbGxvY2F0ZWQgbGF0ZXIgb24KLQkqLwotCWNvd2xvX3Byb2NkaXIgPSBwcm9jX21rZGlyKCJjb3ciLCBOVUxMKTsKLQotCS8qCi0JKiogY2hlY2sgaWYgYSBjb3dkZXZpY2UgaGFzIHRvIGJlIG9wZW5lZCBkdXJpbmcgaW5zbW9kL21vZHByb2JlOwotCSoqIHR3byBwYXJhbWV0ZXJzIHNob3VsZCBiZSBzcGVjaWZpZWQgdGhlbjogcmRvZmlsZT0gYW5kIGNvd2ZpbGU9Ci0JKi8KLQlpZiggKHJkb2ZpbGVbMF0gIT0gJ1wwJykgJiYgKGNvd2ZpbGVbMF0gIT0gJ1wwJykgKSB7Ci0JCWNoYXIJKnBvID0gb3B0aW9uOwotCQlpbnQJd2FudHJlY292ZXIgPSAwOwotCi0JCS8qCi0JCSoqIGNoZWNrIGlmIGF1dG9tYXRpYyByZWNvdmVyeSBpcyB3YW50ZWQKLQkJKi8KLQkJd2hpbGUgKCpwbykgewotCQkJaWYgKCpwbyA9PSAncicpIHsKLQkJCQl3YW50cmVjb3ZlciA9IDE7Ci0JCQkJYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0JCQlwbysrOwotCQl9Ci0KLQkJLyoKLQkJKiogb3BlbiBuZXcgY293ZGV2aWNlIHdpdGggbWlub3IgbnVtYmVyIDAKLQkJKi8KLQkJaWYgKCAocnYgPSBjb3dsb19vcGVucGFpcihyZG9maWxlLCBjb3dmaWxlLCB3YW50cmVjb3ZlciwgMCkpKSB7Ci0JCQlyZW1vdmVfcHJvY19lbnRyeSgiY293IiwgTlVMTCk7Ci0JCQl1bnJlZ2lzdGVyX2Jsa2RldihDT1dNQUpPUiwgREVWSUNFX05BTUUpOwotCQkJZ290byBlcnJvcl9vdXQ7Ci0JCX0KLSAgICAgICAgfSBlbHNlIHsKLQkJLyoKLQkJKiogY2hlY2sgaWYgb25seSBvbmUgcGFyYW1ldGVyIGhhcyBiZWVuIHNwZWNpZmllZAotCQkqLwotCQlpZiggKHJkb2ZpbGVbMF0gIT0gJ1wwJykgfHwgKGNvd2ZpbGVbMF0gIT0gJ1wwJykgKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIKLQkJCSAgICAgICAiY293bG9vcCAtIG9ubHkgb25lIGZpbGVuYW1lIHNwZWNpZmllZFxuIik7Ci0JCQlyZW1vdmVfcHJvY19lbnRyeSgiY293IiwgTlVMTCk7Ci0JCQl1bnJlZ2lzdGVyX2Jsa2RldihDT1dNQUpPUiwgREVWSUNFX05BTUUpOwotCQkJcnYgPSAtRUlOVkFMOwotCQkJZ290byBlcnJvcl9vdXQ7Ci0JCX0KLQl9Ci0KLQkvKgotCSoqIGFsbG9jYXRlIGZha2UgZGlzayBhcyBjb250cm9sIGNoYW5uZWwgdG8gaGFuZGxlIHRoZSByZXF1ZXN0cwotCSoqIHRvIGFjdGl2YXRlIGFuZCBkZWFjdGl2YXRlIGNvd2RldmljZXMgZHluYW1pY2FsbHkKLQkqLwotCWlmICghKGNvd2N0bGdkID0gYWxsb2NfZGlzaygxKSkpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkgICAgICAgImNvd2xvb3AgLSB1bmFibGUgdG8gYWxsb2NfZGlzayBmb3IgY293Y3RsXG4iKTsKLQotCQlyZW1vdmVfcHJvY19lbnRyeSgiY293IiwgTlVMTCk7Ci0JCSh2b2lkKSBjb3dsb19jbG9zZXBhaXIoY293ZGV2YWxsWzBdKTsKLQkJdW5yZWdpc3Rlcl9ibGtkZXYoQ09XTUFKT1IsIERFVklDRV9OQU1FKTsKLQkJcnYgPSAtRU5PTUVNOwotCQlnb3RvIGVycm9yX291dDsKLQl9Ci0KLQlzcGluX2xvY2tfaW5pdCgmY293Y3RscnFsb2NrKTsKLQljb3djdGxnZC0+bWFqb3IgICAgICAgID0gQ09XTUFKT1I7Ci0JY293Y3RsZ2QtPmZpcnN0X21pbm9yICA9IENPV0NUTDsKLQljb3djdGxnZC0+bWlub3JzICAgICAgID0gMTsKLQljb3djdGxnZC0+Zm9wcyAgICAgICAgID0gJmNvd2xvX2ZvcHM7Ci0JY293Y3RsZ2QtPnByaXZhdGVfZGF0YSA9IE5VTEw7Ci0JLyogdGhlIGRldmljZSBoYXMgY2FwYWNpdHkgMCwgc28gdGhlcmUgd2lsbCBiZSBubyBxLXJlcXVlc3RzICovCi0JY293Y3RsZ2QtPnF1ZXVlID0gYmxrX2luaXRfcXVldWUoTlVMTCwgJmNvd2N0bHJxbG9jayk7Ci0Jc3ByaW50Zihjb3djdGxnZC0+ZGlza19uYW1lLCAiY293Y3RsIik7Ci0Jc2V0X2NhcGFjaXR5KGNvd2N0bGdkLCAwKTsKLQotCWFkZF9kaXNrKGNvd2N0bGdkKTsKLQotICAgICAgICBwcmludGsoS0VSTl9OT1RJQ0UgImNvd2xvb3AgLSBudW1iZXIgb2YgY29uZmlndXJlZCBjb3dkZXZpY2VzOiAlZFxuIiwKLQkJCQkJCQkJbWF4Y293cyk7Ci0JaWYgKHJkb2ZpbGVbMF0gIT0gJ1wwJykgewotCSAgICBwcmludGsoS0VSTl9OT1RJQ0UgImNvd2xvb3AgLSBpbml0aWFsaXplZCBvbiByZG9maWxlPSVzXG4iLAotCQkJCQkJCQlyZG9maWxlKTsKLQl9IGVsc2UgewotCSAgICBwcmludGsoS0VSTl9OT1RJQ0UgImNvd2xvb3AgLSBpbml0aWFsaXplZCB3aXRob3V0IHJkb2ZpbGUgeWV0XG4iKTsKLQl9Ci0JcmV0dXJuIDA7Ci0KLWVycm9yX291dDoKLQlmb3IgKG1pbm9yPTA7IG1pbm9yIDwgdXB0b2Nvd3MgOyBtaW5vcisrKSB7Ci0JCWtmcmVlKGNvd2RldmFsbFttaW5vcl0pOwotCX0KLQlrZnJlZShjb3dkZXZhbGwpOwotCXJldHVybiBydjsKLX0KLQotLyoKLSoqIGNhbGxlZCBkdXJpbmcgcm1tb2QKLSovCi1zdGF0aWMgdm9pZCBfX2V4aXQKLWNvd2xvX2NsZWFudXBfbW9kdWxlKHZvaWQpCi17Ci0JaW50CW1pbm9yOwotCi0JLyoKLQkqKiBmbHVzaCBiaXRtYXBzIGFuZCBjb3doZWFkcyB0byB0aGUgY293ZmlsZXMKLQkqLwotCWRvd24oJmNvd2RldmxvY2spOwotCWNvd2xvX3N5bmMoKTsKLQl1cCgmY293ZGV2bG9jayk7Ci0KLQkvKgotCSoqIGNsb3NlIGFsbCBjb3dkZXZpY2VzCi0JKi8KLQlmb3IgKG1pbm9yPTA7IG1pbm9yIDwgbWF4Y293czsgIG1pbm9yKyspCi0JCSh2b2lkKSBjb3dsb19jbG9zZXBhaXIoY293ZGV2YWxsW21pbm9yXSk7Ci0KLQl1bnJlZ2lzdGVyX2Jsa2RldihDT1dNQUpPUiwgREVWSUNFX05BTUUpOwotCi0JLyoKLQkqKiBnZXQgcmlkIG9mIC9wcm9jL2NvdyBhbmQgdW5yZWdpc3RlciB0aGUgZHJpdmVyCi0JKi8KLQlyZW1vdmVfcHJvY19lbnRyeSgiY293IiwgTlVMTCk7Ci0KLQlmb3IgKG1pbm9yID0gMDsgbWlub3IgPCBtYXhjb3dzOyBtaW5vcisrKSB7Ci0JCWtmcmVlKGNvd2RldmFsbFttaW5vcl0pOwotCX0KLQlrZnJlZShjb3dkZXZhbGwpOwotCi0JZGVsX2dlbmRpc2soY293Y3RsZ2QpOyAgLyogcmV2ZXJ0IHRoZSBhbGxvY19kaXNrKCkgKi8KLQlwdXRfZGlzayAgIChjb3djdGxnZCk7ICAvKiByZXZlcnQgdGhlIGFkZF9kaXNrKCkgICAqLwotCWJsa19jbGVhbnVwX3F1ZXVlKGNvd2N0bGdkLT5xdWV1ZSk7IC8qIGNsZWFudXAgdGhlIGVtcHR5IHF1ZXVlICovCi0KLQlwcmludGsoS0VSTl9OT1RJQ0UgImNvd2xvb3AgLSB1bmxvYWRlZFxuIik7Ci19Ci0KLW1vZHVsZV9pbml0KGNvd2xvX2luaXRfbW9kdWxlKTsKLW1vZHVsZV9leGl0KGNvd2xvX2NsZWFudXBfbW9kdWxlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb3dsb29wL2Nvd2xvb3AuaCBiL2RyaXZlcnMvc3RhZ2luZy9jb3dsb29wL2Nvd2xvb3AuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmJkNGEzNS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY293bG9vcC9jb3dsb29wLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2NiArMCwwIEBACi0vKgotKiogRE8gTk9UIE1PRElGWSBUSEVTRSBWQUxVRVMgKHdvdWxkIG1ha2Ugb2xkIGNvd2ZpbGVzIHVudXNhYmxlKQotKi8KLSNkZWZpbmUJTUFQVU5JVAkJMTAyNAkJLyogYmxvY2tzaXplIGZvciBiaXQgaW4gYml0bWFwICAgICAgICovCi0jZGVmaW5lCU1VU0hJRlQJCTEwCQkvKiBiaXRzaGlmdCAgZm9yIGJpdCBpbiBiaXRtYXAgICAgICAgKi8KLSNkZWZpbmUJTVVNQVNLCQkweDNmZgkJLyogYml0bWFzayAgIGZvciBiaXQgaW4gYml0bWFwICAgICAgICovCi0KLSNkZWZpbmUJQ09XTUFHSUMJMHg1NzRmNDM3ZgkvKiBieXRlLXN3YXBwZWQgJzdmIEMgTyBXJyAgICAgICAgICAgKi8KLSNkZWZpbmUJQ09XRElSVFkJMHgwMQotI2RlZmluZQlDT1dQQUNLRUQJMHgwMgotI2RlZmluZQlDT1dWRVJTSU9OCTEKLQotc3RydWN0IGNvd2hlYWQKLXsKLQlpbnQJCW1hZ2ljOwkJLyogaWRlbnRpZmllcyBhIGNvd2ZpbGUgICAgICAgICAgICAgICovCi0Jc2hvcnQJCXZlcnNpb247CS8qIHZlcnNpb24gb2YgY293aGVhZCAgICAgICAgICAgICAgICAqLwotCXNob3J0CQlmbGFnczsgICAgCS8qIGZsYWdzIGluZGljYXRpbmcgc3RhdHVzICAgICAgICAgICAqLwotCXVuc2lnbmVkIGxvbmcJbWFwdW5pdDsJLyogYmxvY2tzaXplIHBlciBiaXQgaW4gYml0bWFwICAgICAgICovCi0JdW5zaWduZWQgbG9uZwltYXBzaXplOwkvKiB0b3RhbCBzaXplIG9mIGJpdG1hcCAoYnl0ZXMpICAgICAgKi8KLQl1bnNpZ25lZCBsb25nCWRvZmZzZXQ7CS8qIHN0YXJ0LW9mZnNldCBkYXRhYmxvY2tzIGluIGNvdyAgICAqLwotCXVuc2lnbmVkIGxvbmcJcmRvYmxvY2tzOwkvKiBzaXplIG9mIHJlbGF0ZWQgcmVhZC1vbmx5IGZpbGUgICAgKi8KLQl1bnNpZ25lZCBsb25nCXJkb2ZpbmdlcnByaW50OwkvKiBmaW5nZXJwcmludCBvZiByZWFkLW9ubHkgZmlsZSAgICAgKi8KLQl1bnNpZ25lZCBsb25nCWNvd3VzZWQ7CS8qIG51bWJlciBvZiBkYXRhYmxvY2tzIHVzZWQgaW4gY293ICAqLwotfTsKLQotI2RlZmluZSBDT1dERVZESVIJIi9kZXYvY293LyIKLSNkZWZpbmUgQ09XREVWSUNFCUNPV0RFVkRJUiAiJWxkIgotI2RlZmluZSBDT1dDT05UUk9MCUNPV0RFVkRJUiAiY3RsIgotCi0jZGVmaW5lIE1BWENPV1MJCTEwMjQKLSNkZWZpbmUgQ09XQ1RMCQkoTUFYQ09XUy0xKQkvKiBtaW5vciBudW1iZXIgb2YgL2Rldi9jb3cvY3RsICAgICAqLwotCi0jZGVmaW5lIENPV1BST0NESVIJIi9wcm9jL2Nvdy8iCi0jZGVmaW5lIENPV1BST0NGSUxFCUNPV1BST0NESVIgIiVkIgotCi0vKgotKiogaW9jdGwgcmVsYXRlZCBzdHVmZgotKi8KLSNkZWZpbmUgQU5ZREVWCQkoKHVuc2lnbmVkIGxvbmcpLTEpCi0KLXN0cnVjdCBjb3dwYWlyCi17Ci0JdW5zaWduZWQgY2hhcgkqcmRvZmlsZTsJLyogcGF0aG5hbWUgb2YgdGhlIHJkb2ZpbGUgICAgICAgICAgICovCi0JdW5zaWduZWQgY2hhcgkqY293ZmlsZTsJLyogcGF0aG5hbWUgb2YgdGhlIGNvd2ZpbGUgICAgICAgICAgICovCi0JdW5zaWduZWQgc2hvcnQJcmRvZmxlbjsJLyogbGVuZ3RoIG9mIHJkb2ZpbGUgcGF0aG5hbWUgICAgICAgICovCi0JdW5zaWduZWQgc2hvcnQJY293ZmxlbjsJLyogbGVuZ3RoIG9mIGNvd2ZpbGUgcGF0aG5hbWUgICAgICAgICovCi0JdW5zaWduZWQgbG9uZwlkZXZpY2U7CQkvKiByZXF1ZXN0ZWQvcmV0dXJuZWQgZGV2aWNlIG51bWJlciAgKi8KLX07Ci0KLXN0cnVjdCBjb3d3YXRjaAotewotCWludCAgICAgIAlmbGFnczsJCS8qIHJlcXVlc3QgZmxhZ3MgICAgICAgICAgICAgICAgICAgICAqLwotCXVuc2lnbmVkIGxvbmcJZGV2aWNlOwkJLyogcmVxdWVzdGVkIGRldmljZSBudW1iZXIgICAgICAgICAgICovCi0JdW5zaWduZWQgbG9uZwl0aHJlc2hvbGQ7CS8qIGNvbnRpbnVlIGlmIGZyZWUgS2IgPCB0aHJlc2hvbGQgICAqLwotCXVuc2lnbmVkIGxvbmcJdG90YWxrYjsJLyogcmV0OiB0b3RhbCBmaWxlc3lzdGVtIHNpemUgKEtiKSAgICovCi0JdW5zaWduZWQgbG9uZwlhdmFpbGtiOwkvKiByZXQ6IGZyZWUgIGZpbGVzeXN0ZW0gc2l6ZSAoS2IpICAgKi8KLX07Ci0KLSNkZWZpbmUJV0FUQ0hXQUlUCTB4MDEJCS8qIGJsb2NrIHVudGlsIHRocmVzaG9sZCByZWFjaGVkICAgICAqLwotCi0jZGVmaW5lCUNPV1NZTkMJCV9JTyAgKCdDJywgMSkKLSNkZWZpbmUJQ09XTUtQQUlSCV9JT1cgKCdDJywgMiwgc3RydWN0IGNvd3BhaXIpCi0jZGVmaW5lCUNPV1JNUEFJUglfSU9XICgnQycsIDMsIHVuc2lnbmVkIGxvbmcpCi0jZGVmaW5lCUNPV1dBVENICV9JT1cgKCdDJywgNCwgc3RydWN0IGNvd3dhdGNoKQotI2RlZmluZQlDT1dDTE9TRQlfSU9XICgnQycsIDUsIHVuc2lnbmVkIGxvbmcpCi0jZGVmaW5lCUNPV1JET1BFTglfSU9XICgnQycsIDYsIHVuc2lnbmVkIGxvbmcpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZHN0L2Rjb3JlLmMgYi9kcml2ZXJzL3N0YWdpbmcvZHN0L2Rjb3JlLmMKaW5kZXggZWUxNjAxMC4uYzI0ZTRlMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2RzdC9kY29yZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9kc3QvZGNvcmUuYwpAQCAtMTAyLDcgKzEwMiw3IEBACiAJc3RydWN0IGRzdF9ub2RlICpuID0gcS0+cXVldWVkYXRhOwogCWludCBlcnIgPSAtRUlPOwogCi0JaWYgKGJpb19lbXB0eV9iYXJyaWVyKGJpbykgJiYgIXEtPnByZXBhcmVfZGlzY2FyZF9mbikgeworCWlmIChiaW9fZW1wdHlfYmFycmllcihiaW8pICYmICFibGtfcXVldWVfZGlzY2FyZChxKSkgewogCQkvKgogCQkgKiBUaGlzIGlzIGEgZGlydHleV25pY2UgaGFjaywgYnV0IGlmIHdlIGNvbXBsZXRlIHRoaXMKIAkJICogb3BlcmF0aW9uIHdpdGggLUVPUE5PVFNVUFAgbGlrZSBpbnRlbmRlZCwgWEZTCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF9hZGRyZXNzX21hcC5oIGIvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMTBfYWRkcmVzc19tYXAuaAppbmRleCA2Mjk0ZDM4Li4yYzNkNjVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF9hZGRyZXNzX21hcC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzEwX2FkZHJlc3NfbWFwLmgKQEAgLTIyMyw3ICsyMjMsNyBAQAogCiBleHRlcm4gaW5saW5lIHZvaWQgYWRkXzEwYml0KHUzMiAqdiwgaW50IG4pCiB7Ci0JKnYgPSBJTkRFWDEwKCp2ICsgbik7CisJKnYgPSBJTkRFWDEwKCp2ICsgbikgfCAoKnYgJiBFVF9ETUExMF9XUkFQKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzEwX3J4LmMgYi9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF9yeC5jCmluZGV4IDhmMmU5MWYuLjEwZTIxZGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzEwX3J4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMTBfcnguYwpAQCAtMTE3NywxMiArMTE3NywyMCBAQAogCiBzdGF0aWMgaW5saW5lIHUzMiBidW1wX2Zicih1MzIgKmZiciwgdTMyIGxpbWl0KQogewotCXUzMiB2ID0gKmZicjsKLQlhZGRfMTBiaXQoJnYsIDEpOwotCWlmICh2ID4gbGltaXQpCi0JCXYgPSAoKmZiciAmIH5FVF9ETUExMF9NQVNLKSBeIEVUX0RNQTEwX1dSQVA7Ci0JKmZiciA9IHY7Ci0JcmV0dXJuIHY7CisgICAgICAgIHUzMiB2ID0gKmZicjsKKyAgICAgICAgdisrOworICAgICAgICAvKiBUaGlzIHdvcmtzIGZvciBhbGwgY2FzZXMgd2hlcmUgbGltaXQgPCAxMDI0LiBUaGUgMTAyMyBjYXNlCisgICAgICAgICAgIHdvcmtzIGJlY2F1c2UgMTAyMysrIGlzIDEwMjQgd2hpY2ggbWVhbnMgdGhlIGlmIGNvbmRpdGlvbiBpcyBub3QKKyAgICAgICAgICAgdGFrZW4gYnV0IHRoZSBjYXJyeSBvZiB0aGUgYml0IGludG8gdGhlIHdyYXAgYml0IHRvZ2dsZXMgdGhlIHdyYXAKKyAgICAgICAgICAgdmFsdWUgY29ycmVjdGx5ICovCisgICAgICAgIGlmICgodiAmIEVUX0RNQTEwX01BU0spID4gbGltaXQpIHsKKyAgICAgICAgICAgICAgICB2ICY9IH5FVF9ETUExMF9NQVNLOworICAgICAgICAgICAgICAgIHYgXj0gRVRfRE1BMTBfV1JBUDsKKyAgICAgICAgfQorICAgICAgICAvKiBGb3IgdGhlIDEwMjMgY2FzZSAqLworICAgICAgICB2ICY9IChFVF9ETUExMF9NQVNLfEVUX0RNQTEwX1dSQVApOworICAgICAgICAqZmJyID0gdjsKKyAgICAgICAgcmV0dXJuIHY7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2h2L0NoYW5uZWxNZ210LmggYi9kcml2ZXJzL3N0YWdpbmcvaHYvQ2hhbm5lbE1nbXQuaAppbmRleCBhODM5ZDhmLi5mYTk3M2Q4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaHYvQ2hhbm5lbE1nbXQuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvaHYvQ2hhbm5lbE1nbXQuaApAQCAtMjYsNiArMjYsNyBAQAogI2RlZmluZSBfQ0hBTk5FTF9NR01UX0hfCiAKICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KICNpbmNsdWRlICJSaW5nQnVmZmVyLmgiCiAjaW5jbHVkZSAiVm1idXNDaGFubmVsSW50ZXJmYWNlLmgiCiAjaW5jbHVkZSAiVm1idXNQYWNrZXRGb3JtYXQuaCIKQEAgLTU0LDcgKzU1LDcgQEAKIAlDaGFubmVsTWVzc2FnZVZpZXdSYW5nZVJlbW92ZQkJPSAxOCwKICNlbmRpZgogCUNoYW5uZWxNZXNzYWdlQ291bnQKLX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Cit9OwogCiBzdHJ1Y3Qgdm1idXNfY2hhbm5lbF9tZXNzYWdlX2hlYWRlciB7CiAJZW51bSB2bWJ1c19jaGFubmVsX21lc3NhZ2VfdHlwZSBNZXNzYWdlVHlwZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9odi9OZXRWc2MuYyBiL2RyaXZlcnMvc3RhZ2luZy9odi9OZXRWc2MuYwppbmRleCAxNjEwYjg0Li5kMzg0YzBkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaHYvTmV0VnNjLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2h2L05ldFZzYy5jCkBAIC0xMDUyLDcgKzEwNTIsNyBAQAogCSAqLwogCXNwaW5fbG9ja19pcnFzYXZlKCZuZXREZXZpY2UtPnJlY2VpdmVfcGFja2V0X2xpc3RfbG9jaywgZmxhZ3MpOwogCXdoaWxlICghbGlzdF9lbXB0eSgmbmV0RGV2aWNlLT5SZWNlaXZlUGFja2V0TGlzdCkpIHsKLQkJbGlzdF9tb3ZlX3RhaWwoJm5ldERldmljZS0+UmVjZWl2ZVBhY2tldExpc3QsICZsaXN0SGVhZCk7CisJCWxpc3RfbW92ZV90YWlsKG5ldERldmljZS0+UmVjZWl2ZVBhY2tldExpc3QubmV4dCwgJmxpc3RIZWFkKTsKIAkJaWYgKCsrY291bnQgPT0gdm14ZmVycGFnZVBhY2tldC0+UmFuZ2VDb3VudCArIDEpCiAJCQlicmVhazsKIAl9CkBAIC0xMDcxLDcgKzEwNzEsNyBAQAogCQkvKiBSZXR1cm4gaXQgdG8gdGhlIGZyZWVsaXN0ICovCiAJCXNwaW5fbG9ja19pcnFzYXZlKCZuZXREZXZpY2UtPnJlY2VpdmVfcGFja2V0X2xpc3RfbG9jaywgZmxhZ3MpOwogCQlmb3IgKGkgPSBjb3VudDsgaSAhPSAwOyBpLS0pIHsKLQkJCWxpc3RfbW92ZV90YWlsKCZsaXN0SGVhZCwKKwkJCWxpc3RfbW92ZV90YWlsKGxpc3RIZWFkLm5leHQsCiAJCQkJICAgICAgICZuZXREZXZpY2UtPlJlY2VpdmVQYWNrZXRMaXN0KTsKIAkJfQogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZuZXREZXZpY2UtPnJlY2VpdmVfcGFja2V0X2xpc3RfbG9jaywKQEAgLTEwODUsOCArMTA4NSw3IEBACiAJfQogCiAJLyogUmVtb3ZlIHRoZSAxc3QgcGFja2V0IHRvIHJlcHJlc2VudCB0aGUgeGZlciBwYWdlIHBhY2tldCBpdHNlbGYgKi8KLQl4ZmVycGFnZVBhY2tldCA9IGxpc3RfZW50cnkoJmxpc3RIZWFkLCBzdHJ1Y3QgeGZlcnBhZ2VfcGFja2V0LAotCQkJCSAgICBMaXN0RW50cnkpOworCXhmZXJwYWdlUGFja2V0ID0gKHN0cnVjdCB4ZmVycGFnZV9wYWNrZXQqKWxpc3RIZWFkLm5leHQ7CiAJbGlzdF9kZWwoJnhmZXJwYWdlUGFja2V0LT5MaXN0RW50cnkpOwogCiAJLyogVGhpcyBpcyBob3cgbXVjaCB3ZSBjYW4gc2F0aXNmeSAqLwpAQCAtMTEwMiw4ICsxMTAxLDcgQEAKIAogCS8qIEVhY2ggcmFuZ2UgcmVwcmVzZW50cyAxIFJORElTIHBrdCB0aGF0IGNvbnRhaW5zIDEgZXRoZXJuZXQgZnJhbWUgKi8KIAlmb3IgKGkgPSAwOyBpIDwgKGNvdW50IC0gMSk7IGkrKykgewotCQluZXR2c2NQYWNrZXQgPSBsaXN0X2VudHJ5KCZsaXN0SGVhZCwgc3RydWN0IGh2X25ldHZzY19wYWNrZXQsCi0JCQkJCSAgTGlzdEVudHJ5KTsKKwkJbmV0dnNjUGFja2V0ID0gKHN0cnVjdCBodl9uZXR2c2NfcGFja2V0KilsaXN0SGVhZC5uZXh0OwogCQlsaXN0X2RlbCgmbmV0dnNjUGFja2V0LT5MaXN0RW50cnkpOwogCiAJCS8qIEluaXRpYWxpemUgdGhlIG5ldHZzYyBwYWNrZXQgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9odi9UT0RPIGIvZHJpdmVycy9zdGFnaW5nL2h2L1RPRE8KaW5kZXggNGQzOTBiMi4uZGJmYmRlOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2h2L1RPRE8KKysrIGIvZHJpdmVycy9zdGFnaW5nL2h2L1RPRE8KQEAgLTEsMTEgKzEsMTcgQEAKIFRPRE86CiAJLSBmaXggcmVtYWluaW5nIGNoZWNrcGF0Y2ggd2FybmluZ3MgYW5kIGVycm9ycworCS0gdXNlIG9mIC8qKiB3aGVuIGl0IGlzIG5vdCBhIGtlcm5lbGRvYyBoZWFkZXIKIAktIHJlbW92ZSBSaW5nQnVmZmVyLmMgdG8gdXMgaW4ta2VybmVsIHJpbmdidWZmZXIgZnVuY3Rpb25zIGluc3RlYWQuCiAJLSBhdWRpdCB0aGUgdm1idXMgdG8gdmVyaWZ5IGl0IGlzIHdvcmtpbmcgcHJvcGVybHkgd2l0aCB0aGUKIAkgIGRyaXZlciBtb2RlbAorCS0gY29udmVydCB2bWJ1cyBkcml2ZXIgaW50ZXJmYWNlIGZ1bmN0aW9uIHBvaW50ZXIgdGFibGVzCisgICAgICAgICAgdG8gY29uc3RhbnQsIGEuay5hIHZtYnVzX29wcwogCS0gc2VlIGlmIHRoZSB2bWJ1cyBjYW4gYmUgbWVyZ2VkIHdpdGggdGhlIG90aGVyIHZpcnR1YWwgYnVzc2VzCiAJICBpbiB0aGUga2VybmVsCiAJLSBhdWRpdCB0aGUgbmV0d29yayBkcml2ZXIKKwkgIC0gdXNlIGV4aXN0aW5nIG5ldF9kZXZpY2Vfc3RhdHMgc3RydWN0IGluIG5ldHdvcmsgZGV2aWNlCisJICAtIGNoZWNraW5nIGZvciBjYXJyaWVyIGluc2lkZSBvcGVuIGlzIHdyb25nLCBuZXR3b3JrIGRldmljZSBBUEkKKyAgICAgICAgICAgIGNvbmZ1c2lvbj8/CiAJLSBhdWRpdCB0aGUgYmxvY2sgZHJpdmVyCiAJLSBhdWRpdCB0aGUgc2NzaSBkcml2ZXIKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2h2L29zZC5jIGIvZHJpdmVycy9zdGFnaW5nL2h2L29zZC5jCmluZGV4IDhmZTU0M2IuLjNhNDc5M2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9odi9vc2QuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaHYvb3NkLmMKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2h2L29zZC5oIGIvZHJpdmVycy9zdGFnaW5nL2h2L29zZC5oCmluZGV4IDk1MDQ2MDQuLmNlMDY0ZTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9odi9vc2QuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvaHYvb3NkLmgKQEAgLTI1LDYgKzI1LDcgQEAKICNpZm5kZWYgX09TRF9IXwogI2RlZmluZSBfT1NEX0hfCiAKKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KIAogLyogRGVmaW5lcyAqLwogI2RlZmluZSBBTElHTl9VUCh2YWx1ZSwgYWxpZ24pCSgoKHZhbHVlKSAmIChhbGlnbi0xKSkgPwkJXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2h2L3ZtYnVzX2Rydi5jIGIvZHJpdmVycy9zdGFnaW5nL2h2L3ZtYnVzX2Rydi5jCmluZGV4IDU4MjMxOGYuLjg5NGVlY2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9odi92bWJ1c19kcnYuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaHYvdm1idXNfZHJ2LmMKQEAgLTUwNywxMiArNTA3LDEyIEBACiAKIAljaGlsZF9kZXZpY2Vfb2JqID0gJmNoaWxkX2RldmljZV9jdHgtPmRldmljZV9vYmo7CiAJY2hpbGRfZGV2aWNlX29iai0+Y29udGV4dCA9IGNvbnRleHQ7Ci0JbWVtY3B5KCZjaGlsZF9kZXZpY2Vfb2JqLT5kZXZpY2VUeXBlLCAmdHlwZSwgc2l6ZW9mKHN0cnVjdCBodl9ndWlkKSk7Ci0JbWVtY3B5KCZjaGlsZF9kZXZpY2Vfb2JqLT5kZXZpY2VJbnN0YW5jZSwgJmluc3RhbmNlLAorCW1lbWNweSgmY2hpbGRfZGV2aWNlX29iai0+ZGV2aWNlVHlwZSwgdHlwZSwgc2l6ZW9mKHN0cnVjdCBodl9ndWlkKSk7CisJbWVtY3B5KCZjaGlsZF9kZXZpY2Vfb2JqLT5kZXZpY2VJbnN0YW5jZSwgaW5zdGFuY2UsCiAJICAgICAgIHNpemVvZihzdHJ1Y3QgaHZfZ3VpZCkpOwogCi0JbWVtY3B5KCZjaGlsZF9kZXZpY2VfY3R4LT5jbGFzc19pZCwgJnR5cGUsIHNpemVvZihzdHJ1Y3QgaHZfZ3VpZCkpOwotCW1lbWNweSgmY2hpbGRfZGV2aWNlX2N0eC0+ZGV2aWNlX2lkLCAmaW5zdGFuY2UsIHNpemVvZihzdHJ1Y3QgaHZfZ3VpZCkpOworCW1lbWNweSgmY2hpbGRfZGV2aWNlX2N0eC0+Y2xhc3NfaWQsIHR5cGUsIHNpemVvZihzdHJ1Y3QgaHZfZ3VpZCkpOworCW1lbWNweSgmY2hpbGRfZGV2aWNlX2N0eC0+ZGV2aWNlX2lkLCBpbnN0YW5jZSwgc2l6ZW9mKHN0cnVjdCBodl9ndWlkKSk7CiAKIAlEUFJJTlRfRVhJVChWTUJVU19EUlYpOwogCkBAIC01MzcsMTggKzUzNyw3IEBACiAJRFBSSU5UX0RCRyhWTUJVU19EUlYsICJjaGlsZCBkZXZpY2UgKCVwKSByZWdpc3RlcmluZyIsCiAJCSAgIGNoaWxkX2RldmljZV9jdHgpOwogCi0JLyogTWFrZSBzdXJlIHdlIGFyZSBub3QgcmVnaXN0ZXJlZCBhbHJlYWR5ICovCi0JaWYgKHN0cmxlbihkZXZfbmFtZSgmY2hpbGRfZGV2aWNlX2N0eC0+ZGV2aWNlKSkgIT0gMCkgewotCQlEUFJJTlRfRVJSKFZNQlVTX0RSViwKLQkJCSAgICJjaGlsZCBkZXZpY2UgKCVwKSBhbHJlYWR5IHJlZ2lzdGVyZWQgLSBidXNpZCAlcyIsCi0JCQkgICBjaGlsZF9kZXZpY2VfY3R4LAotCQkJICAgZGV2X25hbWUoJmNoaWxkX2RldmljZV9jdHgtPmRldmljZSkpOwotCi0JCXJldCA9IC0xOwotCQlnb3RvIENsZWFudXA7Ci0JfQotCi0JLyogU2V0IHRoZSBkZXZpY2UgYnVzIGlkLiBPdGhlcndpc2UsIGRldmljZV9yZWdpc3Rlcigpd2lsbCBmYWlsLiAqLworCS8qIFNldCB0aGUgZGV2aWNlIG5hbWUuIE90aGVyd2lzZSwgZGV2aWNlX3JlZ2lzdGVyKCkgd2lsbCBmYWlsLiAqLwogCWRldl9zZXRfbmFtZSgmY2hpbGRfZGV2aWNlX2N0eC0+ZGV2aWNlLCAidm1idXNfMF8lZCIsCiAJCSAgICAgYXRvbWljX2luY19yZXR1cm4oJmRldmljZV9udW0pKTsKIApAQCAtNTczLDcgKzU2Miw2IEBACiAJCURQUklOVF9JTkZPKFZNQlVTX0RSViwgImNoaWxkIGRldmljZSAoJXApIHJlZ2lzdGVyZWQiLAogCQkJICAgICZjaGlsZF9kZXZpY2VfY3R4LT5kZXZpY2UpOwogCi1DbGVhbnVwOgogCURQUklOVF9FWElUKFZNQlVTX0RSVik7CiAKIAlyZXR1cm4gcmV0OwpAQCAtNjIzLDggKzYxMSw2IEBACiBzdGF0aWMgaW50IHZtYnVzX3VldmVudChzdHJ1Y3QgZGV2aWNlICpkZXZpY2UsIHN0cnVjdCBrb2JqX3VldmVudF9lbnYgKmVudikKIHsKIAlzdHJ1Y3QgZGV2aWNlX2NvbnRleHQgKmRldmljZV9jdHggPSBkZXZpY2VfdG9fZGV2aWNlX2NvbnRleHQoZGV2aWNlKTsKLQlpbnQgaSA9IDA7Ci0JaW50IGxlbiA9IDA7CiAJaW50IHJldDsKIAogCURQUklOVF9FTlRFUihWTUJVU19EUlYpOwpAQCAtNjQ0LDggKzYzMCw2IEBACiAJCSAgICBkZXZpY2VfY3R4LT5jbGFzc19pZC5kYXRhWzE0XSwKIAkJICAgIGRldmljZV9jdHgtPmNsYXNzX2lkLmRhdGFbMTVdKTsKIAotCWVudi0+ZW52cF9pZHggPSBpOwotCWVudi0+YnVmbGVuID0gbGVuOwogCXJldCA9IGFkZF91ZXZlbnRfdmFyKGVudiwgIlZNQlVTX0RFVklDRV9DTEFTU19HVUlEPXsiCiAJCQkgICAgICIlMDJ4JTAyeCUwMnglMDJ4LSUwMnglMDJ4LSUwMnglMDJ4LSIKIAkJCSAgICAgIiUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4fSIsCkBAIC02OTEsOCArNjc1LDYgQEAKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JZW52LT5lbnZwW2Vudi0+ZW52cF9pZHhdID0gTlVMTDsKLQogCURQUklOVF9FWElUKFZNQlVTX0RSVik7CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vS2NvbmZpZwppbmRleCBiZWI5OWE1Li40NTg2NjUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL0tjb25maWcKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9LY29uZmlnCkBAIC00LDYgKzQsNyBAQAogCiBtZW51Y29uZmlnIElJTwogCXRyaXN0YXRlICJJbmR1c3RyaWFsIEkvTyBzdXBwb3J0IgorCWRlcGVuZHMgb24gIVMzOTAKIAktLS1oZWxwLS0tCiAJICBUaGUgaW5kdXN0cmlhbCBJL08gc3Vic3lzdGVtIHByb3ZpZGVzIGEgdW5pZmllZCBmcmFtZXdvcmsgZm9yCiAJICBkcml2ZXJzIGZvciBtYW55IGRpZmZlcmVudCB0eXBlcyBvZiBlbWJlZGRlZCBzZW5zb3JzIHVzaW5nIGEKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vaW5kdXN0cmlhbGlvLWNvcmUuYyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vaW5kdXN0cmlhbGlvLWNvcmUuYwppbmRleCAxZmExOGYyLi43NjhmNDQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2luZHVzdHJpYWxpby1jb3JlLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9pbmR1c3RyaWFsaW8tY29yZS5jCkBAIC0xOCw2ICsxOCw4IEBACiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CiAjaW5jbHVkZSA8bGludXgvY2Rldi5oPgogI2luY2x1ZGUgImlpby5oIgogI2luY2x1ZGUgInRyaWdnZXJfY29uc3VtZXIuaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vbGlnaHQvdHNsMjU2MS5jIGIvZHJpdmVycy9zdGFnaW5nL2lpby9saWdodC90c2wyNTYxLmMKaW5kZXggZWE4YTVlZi4uZmMyMTA3ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby9saWdodC90c2wyNTYxLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9saWdodC90c2wyNTYxLmMKQEAgLTIzOSwxMCArMjM5LDYgQEAKIAlyZXR1cm4gdHNsMjU2MV9wb3dlcmRvd24oY2xpZW50KTsKIH0KIAotc3RhdGljIHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsgMHgyOSwgMHgzOSwgMHg0OSwgSTJDX0NMSUVOVF9FTkQgfTsKLQotSTJDX0NMSUVOVF9JTlNNT0Q7Ci0KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCB0c2wyNTYxX2lkW10gPSB7CiAJeyAidHNsMjU2MSIsIDAgfSwKIAl7IH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9vdHVzL0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvb3R1cy9LY29uZmlnCmluZGV4IGQ1NDlkMDguLmY2Y2MyNjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9vdHVzL0tjb25maWcKKysrIGIvZHJpdmVycy9zdGFnaW5nL290dXMvS2NvbmZpZwpAQCAtMSw2ICsxLDYgQEAKIGNvbmZpZyBPVFVTCiAJdHJpc3RhdGUgIkF0aGVyb3MgT1RVUyA4MDIuMTFuIFVTQiB3aXJlbGVzcyBzdXBwb3J0IgotCWRlcGVuZHMgb24gVVNCICYmIFdMQU5fODAyMTEgJiYgTUFDODAyMTEKKwlkZXBlbmRzIG9uIFVTQiAmJiBXTEFOICYmIE1BQzgwMjExCiAJZGVmYXVsdCBOCiAJLS0taGVscC0tLQogCSAgRW5hYmxlIHN1cHBvcnQgZm9yIEF0aGVyb3MgODAyLjExbiBVU0IgaGFyZHdhcmU6CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcDlhdXRoL3A5YXV0aC5jIGIvZHJpdmVycy9zdGFnaW5nL3A5YXV0aC9wOWF1dGguYwppbmRleCA5MTExZGNiLi44Y2NmZmY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcDlhdXRoL3A5YXV0aC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9wOWF1dGgvcDlhdXRoLmMKQEAgLTE4Myw3ICsxODMsNyBAQAogCXVzZXJfYnVmX3J1bm5pbmcgPSBOVUxMOwogCWhhc2hfc3RyID0gTlVMTDsKIAlub2RlX3B0ciA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBjYXBfbm9kZSksIEdGUF9LRVJORUwpOwotCXVzZXJfYnVmID0ga3phbGxvYyhjb3VudCwgR0ZQX0tFUk5FTCk7CisJdXNlcl9idWYgPSBremFsbG9jKGNvdW50KzEsIEdGUF9LRVJORUwpOwogCWlmICghbm9kZV9wdHIgfHwgIXVzZXJfYnVmKQogCQlnb3RvIG91dDsKIApAQCAtMjA3LDYgKzIwNyw3IEBACiAJCWxpc3RfYWRkKCYobm9kZV9wdHItPmxpc3QpLCAmKGRldi0+aGVhZC0+bGlzdCkpOwogCQlub2RlX3B0ciA9IE5VTEw7CiAJfSBlbHNlIHsKKwkJY2hhciAqdG1wdTsKIAkJaWYgKCFjYXBfZGV2aWNlc1swXS5oZWFkIHx8CiAJCQkJbGlzdF9lbXB0eSgmKGNhcF9kZXZpY2VzWzBdLmhlYWQtPmxpc3QpKSkgewogCQkJcmV0dmFsID0gLUVJTlZBTDsKQEAgLTIxOCwxMCArMjE5LDEwIEBACiAJCSAqIG5lZWQgdG8gc3BsaXQgaXQgYW5kIGhhc2ggJ3VzZXIxQHVzZXIyJyB1c2luZyAncmFuZG9tc3RyaW5nJwogCQkgKiBhcyB0aGUga2V5LgogCQkgKi8KLQkJdXNlcl9idWZfcnVubmluZyA9IGtzdHJkdXAodXNlcl9idWYsIEdGUF9LRVJORUwpOwotCQlzb3VyY2VfdXNlciA9IHN0cnNlcCgmdXNlcl9idWZfcnVubmluZywgIkAiKTsKLQkJdGFyZ2V0X3VzZXIgPSBzdHJzZXAoJnVzZXJfYnVmX3J1bm5pbmcsICJAIik7Ci0JCXJhbmRfc3RyID0gc3Ryc2VwKCZ1c2VyX2J1Zl9ydW5uaW5nLCAiQCIpOworCQl0bXB1ID0gdXNlcl9idWZfcnVubmluZyA9IGtzdHJkdXAodXNlcl9idWYsIEdGUF9LRVJORUwpOworCQlzb3VyY2VfdXNlciA9IHN0cnNlcCgmdG1wdSwgIkAiKTsKKwkJdGFyZ2V0X3VzZXIgPSBzdHJzZXAoJnRtcHUsICJAIik7CisJCXJhbmRfc3RyID0gdG1wdTsKIAkJaWYgKCFzb3VyY2VfdXNlciB8fCAhdGFyZ2V0X3VzZXIgfHwgIXJhbmRfc3RyKSB7CiAJCQlyZXR2YWwgPSAtRUlOVkFMOwogCQkJZ290byBvdXQ7CkBAIC0yMjksNyArMjMwLDggQEAKIAogCQkvKiBoYXNoIHRoZSBzdHJpbmcgdXNlcjFAdXNlcjIgd2l0aCByYW5kX3N0ciBhcyB0aGUga2V5ICovCiAJCWxlbiA9IHN0cmxlbihzb3VyY2VfdXNlcikgKyBzdHJsZW4odGFyZ2V0X3VzZXIpICsgMTsKLQkJaGFzaF9zdHIgPSBremFsbG9jKGxlbiwgR0ZQX0tFUk5FTCk7CisJCS8qIHNyYywgQCwgbGVuLCBcMCAqLworCQloYXNoX3N0ciA9IGt6YWxsb2MobGVuKzEsIEdGUF9LRVJORUwpOwogCQlzdHJjYXQoaGFzaF9zdHIsIHNvdXJjZV91c2VyKTsKIAkJc3RyY2F0KGhhc2hfc3RyLCAiQCIpOwogCQlzdHJjYXQoaGFzaF9zdHIsIHRhcmdldF91c2VyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9wYW5lbC9wYW5lbC5jIGIvZHJpdmVycy9zdGFnaW5nL3BhbmVsL3BhbmVsLmMKaW5kZXggZGQ3ZDNmZC4uNGNlMzk5YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3BhbmVsL3BhbmVsLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3BhbmVsL3BhbmVsLmMKQEAgLTIwNzEsMTEgKzIwNzEsMTUgQEAKIAkJcmV0dXJuOwogCX0KIAotCWlmIChrZXlwYWRfZW5hYmxlZCAmJiBrZXlwYWRfaW5pdGlhbGl6ZWQpCisJaWYgKGtleXBhZF9lbmFibGVkICYmIGtleXBhZF9pbml0aWFsaXplZCkgewogCQltaXNjX2RlcmVnaXN0ZXIoJmtleXBhZF9kZXYpOworCQlrZXlwYWRfaW5pdGlhbGl6ZWQgPSAwOworCX0KIAotCWlmIChsY2RfZW5hYmxlZCAmJiBsY2RfaW5pdGlhbGl6ZWQpCisJaWYgKGxjZF9lbmFibGVkICYmIGxjZF9pbml0aWFsaXplZCkgewogCQltaXNjX2RlcmVnaXN0ZXIoJmxjZF9kZXYpOworCQlsY2RfaW5pdGlhbGl6ZWQgPSAwOworCX0KIAogCXBhcnBvcnRfcmVsZWFzZShwcHJ0KTsKIAlwYXJwb3J0X3VucmVnaXN0ZXJfZGV2aWNlKHBwcnQpOwpAQCAtMjIxMSwxMyArMjIxNSwxNiBAQAogCQlkZWxfdGltZXIoJnNjYW5fdGltZXIpOwogCiAJaWYgKHBwcnQgIT0gTlVMTCkgewotCQlpZiAoa2V5cGFkX2VuYWJsZWQpCisJCWlmIChrZXlwYWRfZW5hYmxlZCkgewogCQkJbWlzY19kZXJlZ2lzdGVyKCZrZXlwYWRfZGV2KTsKKwkJCWtleXBhZF9pbml0aWFsaXplZCA9IDA7CisJCX0KIAogCQlpZiAobGNkX2VuYWJsZWQpIHsKIAkJCXBhbmVsX2xjZF9wcmludCgiXHgwY0xDRCBkcml2ZXIgIiBQQU5FTF9WRVJTSU9OCiAJCQkJCSJcbnVubG9hZGVkLlx4MWJbTGNceDFiW0xiXHgxYltMLSIpOwogCQkJbWlzY19kZXJlZ2lzdGVyKCZsY2RfZGV2KTsKKwkJCWxjZF9pbml0aWFsaXplZCA9IDA7CiAJCX0KIAogCQkvKiBUT0RPOiBmcmVlIGFsbCBpbnB1dCBzaWduYWxzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcG9jaC9wb2NoLmMgYi9kcml2ZXJzL3N0YWdpbmcvcG9jaC9wb2NoLmMKaW5kZXggMGQxMTFkZC4uMmViOGUzZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3BvY2gvcG9jaC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9wb2NoL3BvY2guYwpAQCAtMjAsNiArMjAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KIAogI2luY2x1ZGUgInBvY2guaCIKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9LY29uZmlnCmluZGV4IDdmNDRlNWUuLmVmZTM4ZTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvS2NvbmZpZworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL0tjb25maWcKQEAgLTEsNSArMSw1IEBACiBjb25maWcgUlQyODYwCiAJdHJpc3RhdGUgIlJhbGluayAyODYwIHdpcmVsZXNzIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBQQ0kgJiYgWDg2ICYmIFdMQU5fODAyMTEKKwlkZXBlbmRzIG9uIFBDSSAmJiBYODYgJiYgV0xBTgogCS0tLWhlbHAtLS0KIAkgIFRoaXMgaXMgYW4gZXhwZXJpbWVudGFsIGRyaXZlciBmb3IgdGhlIFJhbGluayAyODYwIHdpcmVsZXNzIGNoaXAuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9jbW1fZGF0YV8yODYwLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9jbW1fZGF0YV8yODYwLmMKaW5kZXggZmIxNzM1NS4uODU3ZmY0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jb21tb24vY21tX2RhdGFfMjg2MC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL2NtbV9kYXRhXzI4NjAuYwpAQCAtMzYzLDYgKzM2Myw4IEBACiAJVUxPTkcJCQlTd0lkeCA9IHBBZC0+TWdtdFJpbmcuVHhDcHVJZHg7CiAKIAlwVHhEICA9IChQVFhEX1NUUlVDKSBwQWQtPk1nbXRSaW5nLkNlbGxbU3dJZHhdLkFsbG9jVmE7CisJaWYgKCFwVHhEKQorCQlyZXR1cm4gMDsKIAogCXBBZC0+TWdtdFJpbmcuQ2VsbFtTd0lkeF0ucE5kaXNQYWNrZXQgPSBwUGFja2V0OwogCXBBZC0+TWdtdFJpbmcuQ2VsbFtTd0lkeF0ucE5leHROZGlzUGFja2V0ID0gTlVMTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL2NtbV9pbmZvLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9jbW1faW5mby5jCmluZGV4IDlkNTg5YzIuLjAxOWNjNDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL2NtbV9pbmZvLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jb21tb24vY21tX2luZm8uYwpAQCAtMjUsNiArMjUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICovCiAKKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgIi4uL3J0X2NvbmZpZy5oIgogCiBJTlQJU2hvd19TU0lEX1Byb2MoCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3J0X2xpbnV4LmMgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3J0X2xpbnV4LmMKaW5kZXggYjM5NmE5Yi4uZWQyN2I4NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9ydF9saW51eC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvcnRfbGludXguYwpAQCAtMjUsNiArMjUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqLwogCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlICJydF9jb25maWcuaCIKIAogVUxPTkcJUlREZWJ1Z0xldmVsID0gUlRfREVCVUdfRVJST1I7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL0tjb25maWcKaW5kZXggNzY4NDFmNi4uYWVhNWM4MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC9LY29uZmlnCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NzAvS2NvbmZpZwpAQCAtMSw1ICsxLDUgQEAKIGNvbmZpZyBSVDI4NzAKIAl0cmlzdGF0ZSAiUmFsaW5rIDI4NzAvMzA3MCB3aXJlbGVzcyBzdXBwb3J0IgotCWRlcGVuZHMgb24gVVNCICYmIFg4NiAmJiBXTEFOXzgwMjExCisJZGVwZW5kcyBvbiBVU0IgJiYgWDg2ICYmIFdMQU4KIAktLS1oZWxwLS0tCiAJICBUaGlzIGlzIGFuIGV4cGVyaW1lbnRhbCBkcml2ZXIgZm9yIHRoZSBSYWxpbmsgeHg3MCB3aXJlbGVzcyBjaGlwcy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDMwOTAvS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwOTAvS2NvbmZpZwppbmRleCAyNTVlOGVhLi4yYjNmNzQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQzMDkwL0tjb25maWcKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA5MC9LY29uZmlnCkBAIC0xLDUgKzEsNSBAQAogY29uZmlnIFJUMzA5MAogCXRyaXN0YXRlICJSYWxpbmsgMzA5MCB3aXJlbGVzcyBzdXBwb3J0IgotCWRlcGVuZHMgb24gUENJICYmIFg4NiAmJiBXTEFOXzgwMjExCisJZGVwZW5kcyBvbiBQQ0kgJiYgWDg2ICYmIFdMQU4KIAktLS1oZWxwLS0tCiAJICBUaGlzIGlzIGFuIGV4cGVyaW1lbnRhbCBkcml2ZXIgZm9yIHRoZSBSYWxpbmsgMzA5MCB3aXJlbGVzcyBjaGlwLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0MzA5MC9jb21tb24vY21tX2luZm8uYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwOTAvY29tbW9uL2NtbV9pbmZvLmMKaW5kZXggNWJlMDcxNC4uM2U1MWU5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0MzA5MC9jb21tb24vY21tX2luZm8uYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDkwL2NvbW1vbi9jbW1faW5mby5jCkBAIC0zNCw2ICszNCw3IEBACiAgICAgLS0tLS0tLS0tICAgIC0tLS0tLS0tLS0gICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCiAKKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgIi4uL3J0X2NvbmZpZy5oIgogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDMwOTAvcnRfbGludXguYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwOTAvcnRfbGludXguYwppbmRleCBkMjI0MWVjLi45Yjk0YWE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQzMDkwL3J0X2xpbnV4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA5MC9ydF9saW51eC5jCkBAIC0yNSw2ICsyNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICovCiAKKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgInJ0X2NvbmZpZy5oIgogCiBVTE9ORwlSVERlYnVnTGV2ZWwgPSBSVF9ERUJVR19FUlJPUjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvS2NvbmZpZwppbmRleCAyMzZlNDI3Li4yMDNjNzliIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL0tjb25maWcKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9LY29uZmlnCkBAIC0xLDYgKzEsNiBAQAogY29uZmlnIFJUTDgxODdTRQogCXRyaXN0YXRlICJSZWFsVGVrIFJUTDgxODdTRSBXaXJlbGVzcyBMQU4gTklDIGRyaXZlciIKLQlkZXBlbmRzIG9uIFBDSQorCWRlcGVuZHMgb24gUENJICYmIFdMQU4KIAlkZXBlbmRzIG9uIFdJUkVMRVNTX0VYVAogCWRlZmF1bHQgTgogCS0tLWhlbHAtLS0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvaWVlZTgwMjExL2llZWU4MDIxMV9jcnlwdC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9pZWVlODAyMTEvaWVlZTgwMjExX2NyeXB0LmMKaW5kZXggMDEzYzNlMS4uNGM1ZDYzZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9pZWVlODAyMTEvaWVlZTgwMjExX2NyeXB0LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9pZWVlODAyMTEvaWVlZTgwMjExX2NyeXB0LmMKQEAgLTUzLDEwICs1Myw4IEBACiAKIAkJbGlzdF9kZWwocHRyKTsKIAotCQlpZiAoZW50cnktPm9wcykgeworCQlpZiAoZW50cnktPm9wcykKIAkJCWVudHJ5LT5vcHMtPmRlaW5pdChlbnRyeS0+cHJpdik7Ci0JCQltb2R1bGVfcHV0KGVudHJ5LT5vcHMtPm93bmVyKTsKLQkJfQogCQlrZnJlZShlbnRyeSk7CiAJfQogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9pZWVlODAyMTEvaWVlZTgwMjExX21vZHVsZS5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9pZWVlODAyMTEvaWVlZTgwMjExX21vZHVsZS5jCmluZGV4IDZmYmU0ODkuLjE4MzkyZmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvaWVlZTgwMjExL2llZWU4MDIxMV9tb2R1bGUuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL2llZWU4MDIxMS9pZWVlODAyMTFfbW9kdWxlLmMKQEAgLTE4OSwxMCArMTg5LDggQEAKIAlmb3IgKGkgPSAwOyBpIDwgV0VQX0tFWVM7IGkrKykgewogCQlzdHJ1Y3QgaWVlZTgwMjExX2NyeXB0X2RhdGEgKmNyeXB0ID0gaWVlZS0+Y3J5cHRbaV07CiAJCWlmIChjcnlwdCkgewotCQkJaWYgKGNyeXB0LT5vcHMpIHsKKwkJCWlmIChjcnlwdC0+b3BzKQogCQkJCWNyeXB0LT5vcHMtPmRlaW5pdChjcnlwdC0+cHJpdik7Ci0JCQkJbW9kdWxlX3B1dChjcnlwdC0+b3BzLT5vd25lcik7Ci0JCQl9CiAJCQlrZnJlZShjcnlwdCk7CiAJCQlpZWVlLT5jcnlwdFtpXSA9IE5VTEw7CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvaWVlZTgwMjExL2llZWU4MDIxMV9zb2Z0bWFjLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL2llZWU4MDIxMS9pZWVlODAyMTFfc29mdG1hYy5jCmluZGV4IDU5YjJhYjQuLjMzNGU0YzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvaWVlZTgwMjExL2llZWU4MDIxMV9zb2Z0bWFjLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9pZWVlODAyMTEvaWVlZTgwMjExX3NvZnRtYWMuYwpAQCAtMjgzOSwxNiArMjgzOSwxMiBAQAogCQlnb3RvIHNraXBfaG9zdF9jcnlwdDsKIAogCW9wcyA9IGllZWU4MDIxMV9nZXRfY3J5cHRvX29wcyhwYXJhbS0+dS5jcnlwdC5hbGcpOwotCWlmIChvcHMgPT0gTlVMTCAmJiBzdHJjbXAocGFyYW0tPnUuY3J5cHQuYWxnLCAiV0VQIikgPT0gMCkgewotCQlyZXF1ZXN0X21vZHVsZSgiaWVlZTgwMjExX2NyeXB0X3dlcCIpOworCWlmIChvcHMgPT0gTlVMTCAmJiBzdHJjbXAocGFyYW0tPnUuY3J5cHQuYWxnLCAiV0VQIikgPT0gMCkKIAkJb3BzID0gaWVlZTgwMjExX2dldF9jcnlwdG9fb3BzKHBhcmFtLT51LmNyeXB0LmFsZyk7Ci0JfSBlbHNlIGlmIChvcHMgPT0gTlVMTCAmJiBzdHJjbXAocGFyYW0tPnUuY3J5cHQuYWxnLCAiVEtJUCIpID09IDApIHsKLQkJcmVxdWVzdF9tb2R1bGUoImllZWU4MDIxMV9jcnlwdF90a2lwIik7CisJZWxzZSBpZiAob3BzID09IE5VTEwgJiYgc3RyY21wKHBhcmFtLT51LmNyeXB0LmFsZywgIlRLSVAiKSA9PSAwKQogCQlvcHMgPSBpZWVlODAyMTFfZ2V0X2NyeXB0b19vcHMocGFyYW0tPnUuY3J5cHQuYWxnKTsKLQl9IGVsc2UgaWYgKG9wcyA9PSBOVUxMICYmIHN0cmNtcChwYXJhbS0+dS5jcnlwdC5hbGcsICJDQ01QIikgPT0gMCkgewotCQlyZXF1ZXN0X21vZHVsZSgiaWVlZTgwMjExX2NyeXB0X2NjbXAiKTsKKwllbHNlIGlmIChvcHMgPT0gTlVMTCAmJiBzdHJjbXAocGFyYW0tPnUuY3J5cHQuYWxnLCAiQ0NNUCIpID09IDApCiAJCW9wcyA9IGllZWU4MDIxMV9nZXRfY3J5cHRvX29wcyhwYXJhbS0+dS5jcnlwdC5hbGcpOwotCX0KIAlpZiAob3BzID09IE5VTEwpIHsKIAkJcHJpbnRrKCJ1bmtub3duIGNyeXB0byBhbGcgJyVzJ1xuIiwgcGFyYW0tPnUuY3J5cHQuYWxnKTsKIAkJcGFyYW0tPnUuY3J5cHQuZXJyID0gSUVFRV9DUllQVF9FUlJfVU5LTk9XTl9BTEc7CkBAIC0yODY5LDcgKzI4NjUsNyBAQAogCQl9CiAJCW1lbXNldChuZXdfY3J5cHQsIDAsIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2NyeXB0X2RhdGEpKTsKIAkJbmV3X2NyeXB0LT5vcHMgPSBvcHM7Ci0JCWlmIChuZXdfY3J5cHQtPm9wcyAmJiB0cnlfbW9kdWxlX2dldChuZXdfY3J5cHQtPm9wcy0+b3duZXIpKQorCQlpZiAobmV3X2NyeXB0LT5vcHMpCiAJCQluZXdfY3J5cHQtPnByaXYgPQogCQkJCW5ld19jcnlwdC0+b3BzLT5pbml0KHBhcmFtLT51LmNyeXB0LmlkeCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvaWVlZTgwMjExL2llZWU4MDIxMV93eC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9pZWVlODAyMTEvaWVlZTgwMjExX3d4LmMKaW5kZXggOGQ4YmRkMC4uYTA4Yjk3YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9pZWVlODAyMTEvaWVlZTgwMjExX3d4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9pZWVlODAyMTEvaWVlZTgwMjExX3d4LmMKQEAgLTMzMSwxMiArMzMxLDEwIEBACiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJbWVtc2V0KG5ld19jcnlwdCwgMCwgc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfY3J5cHRfZGF0YSkpOwogCQluZXdfY3J5cHQtPm9wcyA9IGllZWU4MDIxMV9nZXRfY3J5cHRvX29wcygiV0VQIik7Ci0JCWlmICghbmV3X2NyeXB0LT5vcHMpIHsKLQkJCXJlcXVlc3RfbW9kdWxlKCJpZWVlODAyMTFfY3J5cHRfd2VwIik7CisJCWlmICghbmV3X2NyeXB0LT5vcHMpCiAJCQluZXdfY3J5cHQtPm9wcyA9IGllZWU4MDIxMV9nZXRfY3J5cHRvX29wcygiV0VQIik7Ci0JCX0KIAotCQlpZiAobmV3X2NyeXB0LT5vcHMgJiYgdHJ5X21vZHVsZV9nZXQobmV3X2NyeXB0LT5vcHMtPm93bmVyKSkKKwkJaWYgKG5ld19jcnlwdC0+b3BzKQogCQkJbmV3X2NyeXB0LT5wcml2ID0gbmV3X2NyeXB0LT5vcHMtPmluaXQoa2V5KTsKIAogCQlpZiAoIW5ld19jcnlwdC0+b3BzIHx8ICFuZXdfY3J5cHQtPnByaXYpIHsKQEAgLTQ4Myw3ICs0ODEsNyBAQAogICAgICAgICBzdHJ1Y3QgaXdfZW5jb2RlX2V4dCAqZXh0ID0gKHN0cnVjdCBpd19lbmNvZGVfZXh0ICopZXh0cmE7CiAgICAgICAgIGludCBpLCBpZHgsIHJldCA9IDA7CiAgICAgICAgIGludCBncm91cF9rZXkgPSAwOwotICAgICAgICBjb25zdCBjaGFyICphbGcsICptb2R1bGU7CisgICAgICAgIGNvbnN0IGNoYXIgKmFsZzsKICAgICAgICAgc3RydWN0IGllZWU4MDIxMV9jcnlwdG9fb3BzICpvcHM7CiAgICAgICAgIHN0cnVjdCBpZWVlODAyMTFfY3J5cHRfZGF0YSAqKmNyeXB0OwogCkBAIC01MzksMTUgKzUzNywxMiBAQAogICAgICAgICBzd2l0Y2ggKGV4dC0+YWxnKSB7CiAgICAgICAgIGNhc2UgSVdfRU5DT0RFX0FMR19XRVA6CiAgICAgICAgICAgICAgICAgYWxnID0gIldFUCI7Ci0gICAgICAgICAgICAgICAgbW9kdWxlID0gImllZWU4MDIxMV9jcnlwdF93ZXAiOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIElXX0VOQ09ERV9BTEdfVEtJUDoKICAgICAgICAgICAgICAgICBhbGcgPSAiVEtJUCI7Ci0gICAgICAgICAgICAgICAgbW9kdWxlID0gImllZWU4MDIxMV9jcnlwdF90a2lwIjsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBJV19FTkNPREVfQUxHX0NDTVA6CiAgICAgICAgICAgICAgICAgYWxnID0gIkNDTVAiOwotICAgICAgICAgICAgICAgIG1vZHVsZSA9ICJpZWVlODAyMTFfY3J5cHRfY2NtcCI7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgSUVFRTgwMjExX0RFQlVHX1dYKCIlczogdW5rbm93biBjcnlwdG8gYWxnICVkXG4iLApAQCAtNTU4LDEwICs1NTMsOCBAQAogLy8JcHJpbnRrKCI4LTA5LTA4LTk9PT09PT4lcywgYWxnIG5hbWU6JXNcbiIsX19mdW5jX18sIGFsZyk7CiAKIAkgb3BzID0gaWVlZTgwMjExX2dldF9jcnlwdG9fb3BzKGFsZyk7Ci0gICAgICAgIGlmIChvcHMgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgIHJlcXVlc3RfbW9kdWxlKG1vZHVsZSk7CisgICAgICAgIGlmIChvcHMgPT0gTlVMTCkKICAgICAgICAgICAgICAgICBvcHMgPSBpZWVlODAyMTFfZ2V0X2NyeXB0b19vcHMoYWxnKTsKLSAgICAgICAgfQogICAgICAgICBpZiAob3BzID09IE5VTEwpIHsKICAgICAgICAgICAgICAgICBJRUVFODAyMTFfREVCVUdfV1goIiVzOiB1bmtub3duIGNyeXB0byBhbGcgJWRcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldi0+bmFtZSwgZXh0LT5hbGcpOwpAQCAtNTgxLDcgKzU3NCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGRvbmU7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIG5ld19jcnlwdC0+b3BzID0gb3BzOwotICAgICAgICAgICAgICAgIGlmIChuZXdfY3J5cHQtPm9wcyAmJiB0cnlfbW9kdWxlX2dldChuZXdfY3J5cHQtPm9wcy0+b3duZXIpKQorICAgICAgICAgICAgICAgIGlmIChuZXdfY3J5cHQtPm9wcykKICAgICAgICAgICAgICAgICAgICAgICAgIG5ld19jcnlwdC0+cHJpdiA9IG5ld19jcnlwdC0+b3BzLT5pbml0KGlkeCk7CiAgICAgICAgICAgICAgICAgaWYgKG5ld19jcnlwdC0+cHJpdiA9PSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBrZnJlZShuZXdfY3J5cHQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvS2NvbmZpZwppbmRleCAzMTAwYWE1Li4zN2U0ZmRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvS2NvbmZpZworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvS2NvbmZpZwpAQCAtMSw2ICsxLDYgQEAKIGNvbmZpZyBSVEw4MTkyRQogCXRyaXN0YXRlICJSZWFsVGVrIFJUTDgxOTJFIFdpcmVsZXNzIExBTiBOSUMgZHJpdmVyIgotCWRlcGVuZHMgb24gUENJCisJZGVwZW5kcyBvbiBQQ0kgJiYgV0xBTgogCWRlcGVuZHMgb24gV0lSRUxFU1NfRVhUCiAJZGVmYXVsdCBOCiAJLS0taGVscC0tLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfY3J5cHQuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvaWVlZTgwMjExX2NyeXB0LmMKaW5kZXggMWE4ZWE4YS4uYjFjNTQ5MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfY3J5cHQuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL2llZWU4MDIxMV9jcnlwdC5jCkBAIC01MywxNCArNTMsOCBAQAogCiAJCWxpc3RfZGVsKHB0cik7CiAKLQkJaWYgKGVudHJ5LT5vcHMpIHsKKwkJaWYgKGVudHJ5LT5vcHMpCiAJCQllbnRyeS0+b3BzLT5kZWluaXQoZW50cnktPnByaXYpOwotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDUsMCkKLQkJCW1vZHVsZV9wdXQoZW50cnktPm9wcy0+b3duZXIpOwotI2Vsc2UKLQkJCV9fTU9EX0RFQ19VU0VfQ09VTlQoZW50cnktPm9wcy0+b3duZXIpOwotI2VuZGlmCi0JCX0KIAkJa2ZyZWUoZW50cnkpOwogCX0KIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvaWVlZTgwMjExX21vZHVsZS5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfbW9kdWxlLmMKaW5kZXggMTYyNTZhMy4uMTJjMmExOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfbW9kdWxlLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfbW9kdWxlLmMKQEAgLTI0MiwxNCArMjQyLDggQEAKIAlmb3IgKGkgPSAwOyBpIDwgV0VQX0tFWVM7IGkrKykgewogCQlzdHJ1Y3QgaWVlZTgwMjExX2NyeXB0X2RhdGEgKmNyeXB0ID0gaWVlZS0+Y3J5cHRbaV07CiAJCWlmIChjcnlwdCkgewotCQkJaWYgKGNyeXB0LT5vcHMpIHsKKwkJCWlmIChjcnlwdC0+b3BzKQogCQkJCWNyeXB0LT5vcHMtPmRlaW5pdChjcnlwdC0+cHJpdik7Ci0jaWYgTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNSwwKQotCQkJCW1vZHVsZV9wdXQoY3J5cHQtPm9wcy0+b3duZXIpOwotI2Vsc2UKLQkJCQlfX01PRF9ERUNfVVNFX0NPVU5UKGNyeXB0LT5vcHMtPm93bmVyKTsKLSNlbmRpZgotCQkJfQogCQkJa2ZyZWUoY3J5cHQpOwogCQkJaWVlZS0+Y3J5cHRbaV0gPSBOVUxMOwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL2llZWU4MDIxMV9zb2Z0bWFjLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL2llZWU4MDIxMV9zb2Z0bWFjLmMKaW5kZXggMmZjMDRkZi4uZWFlN2M0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfc29mdG1hYy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvaWVlZTgwMjExX3NvZnRtYWMuYwpAQCAtMzI4NCwxNyArMzI4NCwxNCBAQAogCQlnb3RvIHNraXBfaG9zdF9jcnlwdDsKIAogCW9wcyA9IGllZWU4MDIxMV9nZXRfY3J5cHRvX29wcyhwYXJhbS0+dS5jcnlwdC5hbGcpOwotCWlmIChvcHMgPT0gTlVMTCAmJiBzdHJjbXAocGFyYW0tPnUuY3J5cHQuYWxnLCAiV0VQIikgPT0gMCkgewotCQlyZXF1ZXN0X21vZHVsZSgiaWVlZTgwMjExX2NyeXB0X3dlcCIpOworCWlmIChvcHMgPT0gTlVMTCAmJiBzdHJjbXAocGFyYW0tPnUuY3J5cHQuYWxnLCAiV0VQIikgPT0gMCkKIAkJb3BzID0gaWVlZTgwMjExX2dldF9jcnlwdG9fb3BzKHBhcmFtLT51LmNyeXB0LmFsZyk7Ci0JCS8vc2V0IFdFUDQwIGZpcnN0LCBpdCB3aWxsIGJlIG1vZGlmaWVkIGFjY29yZGluZyB0byBXRVAxMDQgb3IgV0VQNDAgYXQgb3RoZXIgcGxhY2UKLQl9IGVsc2UgaWYgKG9wcyA9PSBOVUxMICYmIHN0cmNtcChwYXJhbS0+dS5jcnlwdC5hbGcsICJUS0lQIikgPT0gMCkgewotCQlyZXF1ZXN0X21vZHVsZSgiaWVlZTgwMjExX2NyeXB0X3RraXAiKTsKKwkJLyogc2V0IFdFUDQwIGZpcnN0LCBpdCB3aWxsIGJlIG1vZGlmaWVkIGFjY29yZGluZyB0byBXRVAxMDQgb3IKKwkJICogV0VQNDAgYXQgb3RoZXIgcGxhY2UgKi8KKwllbHNlIGlmIChvcHMgPT0gTlVMTCAmJiBzdHJjbXAocGFyYW0tPnUuY3J5cHQuYWxnLCAiVEtJUCIpID09IDApCiAJCW9wcyA9IGllZWU4MDIxMV9nZXRfY3J5cHRvX29wcyhwYXJhbS0+dS5jcnlwdC5hbGcpOwotCX0gZWxzZSBpZiAob3BzID09IE5VTEwgJiYgc3RyY21wKHBhcmFtLT51LmNyeXB0LmFsZywgIkNDTVAiKSA9PSAwKSB7Ci0JCXJlcXVlc3RfbW9kdWxlKCJpZWVlODAyMTFfY3J5cHRfY2NtcCIpOworCWVsc2UgaWYgKG9wcyA9PSBOVUxMICYmIHN0cmNtcChwYXJhbS0+dS5jcnlwdC5hbGcsICJDQ01QIikgPT0gMCkKIAkJb3BzID0gaWVlZTgwMjExX2dldF9jcnlwdG9fb3BzKHBhcmFtLT51LmNyeXB0LmFsZyk7Ci0JfQogCWlmIChvcHMgPT0gTlVMTCkgewogCQlwcmludGsoInVua25vd24gY3J5cHRvIGFsZyAnJXMnXG4iLCBwYXJhbS0+dS5jcnlwdC5hbGcpOwogCQlwYXJhbS0+dS5jcnlwdC5lcnIgPSBJRUVFX0NSWVBUX0VSUl9VTktOT1dOX0FMRzsKQEAgLTMzMTUsMTEgKzMzMTIsNyBAQAogCQl9CiAJCW1lbXNldChuZXdfY3J5cHQsIDAsIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2NyeXB0X2RhdGEpKTsKIAkJbmV3X2NyeXB0LT5vcHMgPSBvcHM7Ci0jaWYgTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNSwwKQotCQlpZiAobmV3X2NyeXB0LT5vcHMgJiYgdHJ5X21vZHVsZV9nZXQobmV3X2NyeXB0LT5vcHMtPm93bmVyKSkKLSNlbHNlCi0JCWlmIChuZXdfY3J5cHQtPm9wcyAmJiB0cnlfaW5jX21vZF9jb3VudChuZXdfY3J5cHQtPm9wcy0+b3duZXIpKQotI2VuZGlmCisJCWlmIChuZXdfY3J5cHQtPm9wcykKIAkJCW5ld19jcnlwdC0+cHJpdiA9CiAJCQkJbmV3X2NyeXB0LT5vcHMtPmluaXQocGFyYW0tPnUuY3J5cHQuaWR4KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfd3guYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvaWVlZTgwMjExX3d4LmMKaW5kZXggMjIzNDgzMS4uNGUzNGExZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfd3guYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL2llZWU4MDIxMV93eC5jCkBAIC00ODIsMTUgKzQ4Miw5IEBACiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJbWVtc2V0KG5ld19jcnlwdCwgMCwgc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfY3J5cHRfZGF0YSkpOwogCQluZXdfY3J5cHQtPm9wcyA9IGllZWU4MDIxMV9nZXRfY3J5cHRvX29wcygiV0VQIik7Ci0JCWlmICghbmV3X2NyeXB0LT5vcHMpIHsKLQkJCXJlcXVlc3RfbW9kdWxlKCJpZWVlODAyMTFfY3J5cHRfd2VwIik7CisJCWlmICghbmV3X2NyeXB0LT5vcHMpCiAJCQluZXdfY3J5cHQtPm9wcyA9IGllZWU4MDIxMV9nZXRfY3J5cHRvX29wcygiV0VQIik7Ci0JCX0KLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw1LDApCi0JCWlmIChuZXdfY3J5cHQtPm9wcyAmJiB0cnlfbW9kdWxlX2dldChuZXdfY3J5cHQtPm9wcy0+b3duZXIpKQotI2Vsc2UKLQkJaWYgKG5ld19jcnlwdC0+b3BzICYmIHRyeV9pbmNfbW9kX2NvdW50KG5ld19jcnlwdC0+b3BzLT5vd25lcikpCi0jZW5kaWYKKwkJaWYgKG5ld19jcnlwdC0+b3BzKQogCQkJbmV3X2NyeXB0LT5wcml2ID0gbmV3X2NyeXB0LT5vcHMtPmluaXQoa2V5KTsKIAogCQlpZiAoIW5ld19jcnlwdC0+b3BzIHx8ICFuZXdfY3J5cHQtPnByaXYpIHsKQEAgLTY0NCw3ICs2MzgsNyBAQAogICAgICAgICBzdHJ1Y3QgaXdfZW5jb2RlX2V4dCAqZXh0ID0gKHN0cnVjdCBpd19lbmNvZGVfZXh0ICopZXh0cmE7CiAgICAgICAgIGludCBpLCBpZHg7CiAgICAgICAgIGludCBncm91cF9rZXkgPSAwOwotICAgICAgICBjb25zdCBjaGFyICphbGcsICptb2R1bGU7CisgICAgICAgIGNvbnN0IGNoYXIgKmFsZzsKICAgICAgICAgc3RydWN0IGllZWU4MDIxMV9jcnlwdG9fb3BzICpvcHM7CiAgICAgICAgIHN0cnVjdCBpZWVlODAyMTFfY3J5cHRfZGF0YSAqKmNyeXB0OwogCkBAIC03MTEsMTUgKzcwNSwxMiBAQAogICAgICAgICBzd2l0Y2ggKGV4dC0+YWxnKSB7CiAgICAgICAgIGNhc2UgSVdfRU5DT0RFX0FMR19XRVA6CiAgICAgICAgICAgICAgICAgYWxnID0gIldFUCI7Ci0gICAgICAgICAgICAgICAgbW9kdWxlID0gImllZWU4MDIxMV9jcnlwdF93ZXAiOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIElXX0VOQ09ERV9BTEdfVEtJUDoKICAgICAgICAgICAgICAgICBhbGcgPSAiVEtJUCI7Ci0gICAgICAgICAgICAgICAgbW9kdWxlID0gImllZWU4MDIxMV9jcnlwdF90a2lwIjsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBJV19FTkNPREVfQUxHX0NDTVA6CiAgICAgICAgICAgICAgICAgYWxnID0gIkNDTVAiOwotICAgICAgICAgICAgICAgIG1vZHVsZSA9ICJpZWVlODAyMTFfY3J5cHRfY2NtcCI7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgSUVFRTgwMjExX0RFQlVHX1dYKCIlczogdW5rbm93biBjcnlwdG8gYWxnICVkXG4iLApAQCAtNzMwLDEwICs3MjEsOCBAQAogCXByaW50aygiYWxnIG5hbWU6JXNcbiIsYWxnKTsKIAogCSBvcHMgPSBpZWVlODAyMTFfZ2V0X2NyeXB0b19vcHMoYWxnKTsKLSAgICAgICAgaWYgKG9wcyA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgcmVxdWVzdF9tb2R1bGUobW9kdWxlKTsKKyAgICAgICAgaWYgKG9wcyA9PSBOVUxMKQogICAgICAgICAgICAgICAgIG9wcyA9IGllZWU4MDIxMV9nZXRfY3J5cHRvX29wcyhhbGcpOwotICAgICAgICB9CiAgICAgICAgIGlmIChvcHMgPT0gTlVMTCkgewogICAgICAgICAgICAgICAgIElFRUU4MDIxMV9ERUJVR19XWCgiJXM6IHVua25vd24gY3J5cHRvIGFsZyAlZFxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2LT5uYW1lLCBleHQtPmFsZyk7CkBAIC03NTgsNyArNzQ3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZG9uZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgbmV3X2NyeXB0LT5vcHMgPSBvcHM7Ci0gICAgICAgICAgICAgICAgaWYgKG5ld19jcnlwdC0+b3BzICYmIHRyeV9tb2R1bGVfZ2V0KG5ld19jcnlwdC0+b3BzLT5vd25lcikpCisgICAgICAgICAgICAgICAgaWYgKG5ld19jcnlwdC0+b3BzKQogICAgICAgICAgICAgICAgICAgICAgICAgbmV3X2NyeXB0LT5wcml2ID0gbmV3X2NyeXB0LT5vcHMtPmluaXQoaWR4KTsKICAgICAgICAgICAgICAgICBpZiAobmV3X2NyeXB0LT5wcml2ID09IE5VTEwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGtmcmVlKG5ld19jcnlwdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvcjgxOTJFX2NvcmUuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9yODE5MkVfY29yZS5jCmluZGV4IGQ0ZmE2NTQuLmIwODAyYTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9yODE5MkVfY29yZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9yODE5MkVfY29yZS5jCkBAIC00Niw2ICs0Niw3IEBACiAjdW5kZWYgREVCVUdfVFhfREVTQwogCiAvLyNkZWZpbmUgQ09ORklHX1JUTDgxOTJfSU9fTUFQCisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSAicjgxOTJFX2h3LmgiCiAjaW5jbHVkZSAicjgxOTJFLmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L0tjb25maWcKaW5kZXggNzcwZjQxMi4uYjhjOTVmOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9LY29uZmlnCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvS2NvbmZpZwpAQCAtMSw2ICsxLDYgQEAKIGNvbmZpZyBSVEw4MTkyU1UKIAl0cmlzdGF0ZSAiUmVhbFRlayBSVEw4MTkyU1UgV2lyZWxlc3MgTEFOIE5JQyBkcml2ZXIiCi0JZGVwZW5kcyBvbiBQQ0kKKwlkZXBlbmRzIG9uIFBDSSAmJiBXTEFOCiAJZGVwZW5kcyBvbiBXSVJFTEVTU19FWFQKIAlkZWZhdWx0IE4KIAktLS1oZWxwLS0tCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9pZWVlODAyMTFfY3J5cHQuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL2llZWU4MDIxMV9jcnlwdC5jCmluZGV4IGQ3NmE1NGQuLjUyMWU3YjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL2llZWU4MDIxMV9jcnlwdC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL2llZWU4MDIxMV9jcnlwdC5jCkBAIC01MywxMCArNTMsOCBAQAogCiAJCWxpc3RfZGVsKHB0cik7CiAKLQkJaWYgKGVudHJ5LT5vcHMpIHsKKwkJaWYgKGVudHJ5LT5vcHMpCiAJCQllbnRyeS0+b3BzLT5kZWluaXQoZW50cnktPnByaXYpOwotCQkJbW9kdWxlX3B1dChlbnRyeS0+b3BzLT5vd25lcik7Ci0JCX0KIAkJa2ZyZWUoZW50cnkpOwogCX0KIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL2llZWU4MDIxMV9tb2R1bGUuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL2llZWU4MDIxMV9tb2R1bGUuYwppbmRleCA2OGRjOGZhLi5jMzM4M2JiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9pZWVlODAyMTFfbW9kdWxlLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvaWVlZTgwMjExX21vZHVsZS5jCkBAIC0yMTYsMTAgKzIxNiw4IEBACiAJZm9yIChpID0gMDsgaSA8IFdFUF9LRVlTOyBpKyspIHsKIAkJc3RydWN0IGllZWU4MDIxMV9jcnlwdF9kYXRhICpjcnlwdCA9IGllZWUtPmNyeXB0W2ldOwogCQlpZiAoY3J5cHQpIHsKLQkJCWlmIChjcnlwdC0+b3BzKSB7CisJCQlpZiAoY3J5cHQtPm9wcykKIAkJCQljcnlwdC0+b3BzLT5kZWluaXQoY3J5cHQtPnByaXYpOwotCQkJCW1vZHVsZV9wdXQoY3J5cHQtPm9wcy0+b3duZXIpOwotCQkJfQogCQkJa2ZyZWUoY3J5cHQpOwogCQkJaWVlZS0+Y3J5cHRbaV0gPSBOVUxMOwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9pZWVlODAyMTFfc29mdG1hYy5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvaWVlZTgwMjExX3NvZnRtYWMuYwppbmRleCBjNjRhZTAzLi5mZDhlMTEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9pZWVlODAyMTFfc29mdG1hYy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL2llZWU4MDIxMV9zb2Z0bWFjLmMKQEAgLTMwMjYsMTcgKzMwMjYsMTQgQEAKIAkJZ290byBza2lwX2hvc3RfY3J5cHQ7CiAKIAlvcHMgPSBpZWVlODAyMTFfZ2V0X2NyeXB0b19vcHMocGFyYW0tPnUuY3J5cHQuYWxnKTsKLQlpZiAob3BzID09IE5VTEwgJiYgc3RyY21wKHBhcmFtLT51LmNyeXB0LmFsZywgIldFUCIpID09IDApIHsKLQkJcmVxdWVzdF9tb2R1bGUoImllZWU4MDIxMV9jcnlwdF93ZXAiKTsKKwlpZiAob3BzID09IE5VTEwgJiYgc3RyY21wKHBhcmFtLT51LmNyeXB0LmFsZywgIldFUCIpID09IDApCiAJCW9wcyA9IGllZWU4MDIxMV9nZXRfY3J5cHRvX29wcyhwYXJhbS0+dS5jcnlwdC5hbGcpOwotCQkvL3NldCBXRVA0MCBmaXJzdCwgaXQgd2lsbCBiZSBtb2RpZmllZCBhY2NvcmRpbmcgdG8gV0VQMTA0IG9yIFdFUDQwIGF0IG90aGVyIHBsYWNlCi0JfSBlbHNlIGlmIChvcHMgPT0gTlVMTCAmJiBzdHJjbXAocGFyYW0tPnUuY3J5cHQuYWxnLCAiVEtJUCIpID09IDApIHsKLQkJcmVxdWVzdF9tb2R1bGUoImllZWU4MDIxMV9jcnlwdF90a2lwIik7CisJCS8qIHNldCBXRVA0MCBmaXJzdCwgaXQgd2lsbCBiZSBtb2RpZmllZCBhY2NvcmRpbmcgdG8gV0VQMTA0IG9yCisJCSAqIFdFUDQwIGF0IG90aGVyIHBsYWNlICovCisJZWxzZSBpZiAob3BzID09IE5VTEwgJiYgc3RyY21wKHBhcmFtLT51LmNyeXB0LmFsZywgIlRLSVAiKSA9PSAwKQogCQlvcHMgPSBpZWVlODAyMTFfZ2V0X2NyeXB0b19vcHMocGFyYW0tPnUuY3J5cHQuYWxnKTsKLQl9IGVsc2UgaWYgKG9wcyA9PSBOVUxMICYmIHN0cmNtcChwYXJhbS0+dS5jcnlwdC5hbGcsICJDQ01QIikgPT0gMCkgewotCQlyZXF1ZXN0X21vZHVsZSgiaWVlZTgwMjExX2NyeXB0X2NjbXAiKTsKKwllbHNlIGlmIChvcHMgPT0gTlVMTCAmJiBzdHJjbXAocGFyYW0tPnUuY3J5cHQuYWxnLCAiQ0NNUCIpID09IDApCiAJCW9wcyA9IGllZWU4MDIxMV9nZXRfY3J5cHRvX29wcyhwYXJhbS0+dS5jcnlwdC5hbGcpOwotCX0KIAlpZiAob3BzID09IE5VTEwpIHsKIAkJcHJpbnRrKCJ1bmtub3duIGNyeXB0byBhbGcgJyVzJ1xuIiwgcGFyYW0tPnUuY3J5cHQuYWxnKTsKIAkJcGFyYW0tPnUuY3J5cHQuZXJyID0gSUVFRV9DUllQVF9FUlJfVU5LTk9XTl9BTEc7CkBAIC0zMDU4LDcgKzMwNTUsNyBAQAogCQltZW1zZXQobmV3X2NyeXB0LCAwLCBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9jcnlwdF9kYXRhKSk7CiAJCW5ld19jcnlwdC0+b3BzID0gb3BzOwogCi0JCWlmIChuZXdfY3J5cHQtPm9wcyAmJiB0cnlfbW9kdWxlX2dldChuZXdfY3J5cHQtPm9wcy0+b3duZXIpKQorCQlpZiAobmV3X2NyeXB0LT5vcHMpCiAJCQluZXdfY3J5cHQtPnByaXYgPQogCQkJCW5ld19jcnlwdC0+b3BzLT5pbml0KHBhcmFtLT51LmNyeXB0LmlkeCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL2llZWU4MDIxMV93eC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvaWVlZTgwMjExX3d4LmMKaW5kZXggMTA3NzU5MC4uNjE0NmM2NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvaWVlZTgwMjExX3d4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvaWVlZTgwMjExX3d4LmMKQEAgLTM1OCwxMSArMzU4LDkgQEAKIAkJCXJldHVybiAtRU5PTUVNOwogCQltZW1zZXQobmV3X2NyeXB0LCAwLCBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9jcnlwdF9kYXRhKSk7CiAJCW5ld19jcnlwdC0+b3BzID0gaWVlZTgwMjExX2dldF9jcnlwdG9fb3BzKCJXRVAiKTsKLQkJaWYgKCFuZXdfY3J5cHQtPm9wcykgewotCQkJcmVxdWVzdF9tb2R1bGUoImllZWU4MDIxMV9jcnlwdF93ZXAiKTsKKwkJaWYgKCFuZXdfY3J5cHQtPm9wcykKIAkJCW5ld19jcnlwdC0+b3BzID0gaWVlZTgwMjExX2dldF9jcnlwdG9fb3BzKCJXRVAiKTsKLQkJfQotCQlpZiAobmV3X2NyeXB0LT5vcHMgJiYgdHJ5X21vZHVsZV9nZXQobmV3X2NyeXB0LT5vcHMtPm93bmVyKSkKKwkJaWYgKG5ld19jcnlwdC0+b3BzKQogCQkJbmV3X2NyeXB0LT5wcml2ID0gbmV3X2NyeXB0LT5vcHMtPmluaXQoa2V5KTsKIAogCQlpZiAoIW5ld19jcnlwdC0+b3BzIHx8ICFuZXdfY3J5cHQtPnByaXYpIHsKQEAgLTUwNyw3ICs1MDUsNyBAQAogICAgICAgICBzdHJ1Y3QgaXdfZW5jb2RlX2V4dCAqZXh0ID0gKHN0cnVjdCBpd19lbmNvZGVfZXh0ICopZXh0cmE7CiAgICAgICAgIGludCBpLCBpZHg7CiAgICAgICAgIGludCBncm91cF9rZXkgPSAwOwotICAgICAgICBjb25zdCBjaGFyICphbGcsICptb2R1bGU7CisgICAgICAgIGNvbnN0IGNoYXIgKmFsZzsKICAgICAgICAgc3RydWN0IGllZWU4MDIxMV9jcnlwdG9fb3BzICpvcHM7CiAgICAgICAgIHN0cnVjdCBpZWVlODAyMTFfY3J5cHRfZGF0YSAqKmNyeXB0OwogCkBAIC01NzAsMTUgKzU2OCwxMiBAQAogICAgICAgICBzd2l0Y2ggKGV4dC0+YWxnKSB7CiAgICAgICAgIGNhc2UgSVdfRU5DT0RFX0FMR19XRVA6CiAgICAgICAgICAgICAgICAgYWxnID0gIldFUCI7Ci0gICAgICAgICAgICAgICAgbW9kdWxlID0gImllZWU4MDIxMV9jcnlwdF93ZXAiOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIElXX0VOQ09ERV9BTEdfVEtJUDoKICAgICAgICAgICAgICAgICBhbGcgPSAiVEtJUCI7Ci0gICAgICAgICAgICAgICAgbW9kdWxlID0gImllZWU4MDIxMV9jcnlwdF90a2lwIjsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBJV19FTkNPREVfQUxHX0NDTVA6CiAgICAgICAgICAgICAgICAgYWxnID0gIkNDTVAiOwotICAgICAgICAgICAgICAgIG1vZHVsZSA9ICJpZWVlODAyMTFfY3J5cHRfY2NtcCI7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgSUVFRTgwMjExX0RFQlVHX1dYKCIlczogdW5rbm93biBjcnlwdG8gYWxnICVkXG4iLApAQCAtNTg5LDEwICs1ODQsOCBAQAogCXByaW50aygiYWxnIG5hbWU6JXNcbiIsYWxnKTsKIAogCSBvcHMgPSBpZWVlODAyMTFfZ2V0X2NyeXB0b19vcHMoYWxnKTsKLSAgICAgICAgaWYgKG9wcyA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgcmVxdWVzdF9tb2R1bGUoIiVzIiwgbW9kdWxlKTsKKyAgICAgICAgaWYgKG9wcyA9PSBOVUxMKQogICAgICAgICAgICAgICAgIG9wcyA9IGllZWU4MDIxMV9nZXRfY3J5cHRvX29wcyhhbGcpOwotICAgICAgICB9CiAgICAgICAgIGlmIChvcHMgPT0gTlVMTCkgewogICAgICAgICAgICAgICAgIElFRUU4MDIxMV9ERUJVR19XWCgiJXM6IHVua25vd24gY3J5cHRvIGFsZyAlZFxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2LT5uYW1lLCBleHQtPmFsZyk7CkBAIC02MTIsNyArNjA1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZG9uZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgbmV3X2NyeXB0LT5vcHMgPSBvcHM7Ci0gICAgICAgICAgICAgICAgaWYgKG5ld19jcnlwdC0+b3BzICYmIHRyeV9tb2R1bGVfZ2V0KG5ld19jcnlwdC0+b3BzLT5vd25lcikpCisgICAgICAgICAgICAgICAgaWYgKG5ld19jcnlwdC0+b3BzKQogICAgICAgICAgICAgICAgICAgICAgICAgbmV3X2NyeXB0LT5wcml2ID0gbmV3X2NyeXB0LT5vcHMtPmluaXQoaWR4KTsKICAgICAgICAgICAgICAgICBpZiAobmV3X2NyeXB0LT5wcml2ID09IE5VTEwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGtmcmVlKG5ld19jcnlwdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc2VwL3NlcF9kcml2ZXIuYyBiL2RyaXZlcnMvc3RhZ2luZy9zZXAvc2VwX2RyaXZlci5jCmluZGV4IDg3ZjhhMTEuLmY4OTBhMTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9zZXAvc2VwX2RyaXZlci5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9zZXAvc2VwX2RyaXZlci5jCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CiAjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KICNpbmNsdWRlIDxhc20vaW9jdGwuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zdGxjNDV4eC9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL3N0bGM0NXh4L0tjb25maWcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk0N2ZiNzUuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3N0bGM0NXh4L0tjb25maWcKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLWNvbmZpZyBTVExDNDVYWAotCXRyaXN0YXRlICJzdGxjNDU1MC80NTYwIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBNQUM4MDIxMSAmJiBXTEFOXzgwMjExICYmIFNQSV9NQVNURVIgJiYgR0VORVJJQ19IQVJESVJRUwotCS0tLWhlbHAtLS0KLQkgIFRoaXMgaXMgYSBkcml2ZXIgZm9yIHN0bGM0NTUwIGFuZCBzdGxjNDU2MCBjaGlwc2V0cy4KLQotCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlCi0JICBjYWxsZWQgc3RsYzQ1eHguICBJZiB1bnN1cmUsIHNheSBOLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3N0bGM0NXh4L01ha2VmaWxlIGIvZHJpdmVycy9zdGFnaW5nL3N0bGM0NXh4L01ha2VmaWxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZWUzMjkwLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9zdGxjNDV4eC9NYWtlZmlsZQorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLW9iai0kKENPTkZJR19TVExDNDVYWCkJKz0gc3RsYzQ1eHgubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3N0bGM0NXh4L3N0bGM0NXh4LmMgYi9kcml2ZXJzL3N0YWdpbmcvc3RsYzQ1eHgvc3RsYzQ1eHguYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmU5OWViMy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvc3RsYzQ1eHgvc3RsYzQ1eHguYworKysgL2Rldi9udWxsCkBAIC0xLDI1OTQgKzAsMCBAQAotLyoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHN0bGM0NXh4Ci0gKgotICogQ29weXJpZ2h0IChDKSAyMDA4IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KLSAqCi0gKiBDb250YWN0OiBLYWxsZSBWYWxvIDxrYWxsZS52YWxvQG5va2lhLmNvbT4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKLSAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKLSAqIDAyMTEwLTEzMDEgVVNBCi0gKgotICovCi0KLSNpbmNsdWRlICJzdGxjNDV4eC5oIgotCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L2lycS5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KLSNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgotCi0jaW5jbHVkZSAic3RsYzQ1eHhfbG1hYy5oIgotCi0vKgotICogZ3Bpb3Mgc2hvdWxkIGJlIGhhbmRsZWQgaW4gYm9hcmQgZmlsZXMgYW5kIHByb3ZpZGVkIHZpYSBwbGF0Zm9ybSBkYXRhLAotICogYnV0IGJlY2F1c2UgaXQncyBjdXJyZW50bHkgaW1wb3NzaWJsZSBmb3Igc3RsYzQ1eHggdG8gaGF2ZSBhIGhlYWRlciBmaWxlCi0gKiBpbiBpbmNsdWRlL2xpbnV4LCBsZXQncyB1c2UgbW9kdWxlIHBhcmFtYXRlcnMgZm9yIG5vdwotICovCi1zdGF0aWMgaW50IHN0bGM0NXh4X2dwaW9fcG93ZXIgPSA5NzsKLW1vZHVsZV9wYXJhbShzdGxjNDV4eF9ncGlvX3Bvd2VyLCBpbnQsIDA0NDQpOwotTU9EVUxFX1BBUk1fREVTQyhzdGxjNDV4eF9ncGlvX3Bvd2VyLCAic3RsYzQ1eHggZ3BpbyBudW1iZXIgZm9yIHBvd2VyIGxpbmUiKTsKLQotc3RhdGljIGludCBzdGxjNDV4eF9ncGlvX2lycSA9IDg3OwotbW9kdWxlX3BhcmFtKHN0bGM0NXh4X2dwaW9faXJxLCBpbnQsIDA0NDQpOwotTU9EVUxFX1BBUk1fREVTQyhzdGxjNDV4eF9ncGlvX2lycSwgInN0bGM0NXh4IGdwaW8gbnVtYmVyIGZvciBpcnEgbGluZSIpOwotCi1zdGF0aWMgY29uc3QgdTggZGVmYXVsdF9jYWxfY2hhbm5lbHNbXSA9IHsKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NmMsIDB4MDksCi0JMHgwMCwgMHgwMCwgMHhjOSwgMHhmZiwgMHhkOCwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgxMCwKLQkweDAxLCAweDEwLCAweDAxLCAweDEwLCAweDAxLCAweDEwLCAweDAxLCAweGUwLCAweDAwLCAweGUwLCAweDAwLAotCTB4ZTAsIDB4MDAsIDB4ZTAsIDB4MDAsIDB4ZDAsIDB4MDAsIDB4ZDAsIDB4MDAsIDB4ZDAsIDB4MDAsIDB4ZDAsCi0JMHgwMCwgMHg1NCwgMHgwMSwgMHhhYiwgMHhmNiwgMHhjMCwgMHg0MiwgMHhjMCwgMHg0MiwgMHhjMCwgMHg0MiwKLQkweGMwLCAweDQyLCAweDAwLCAweGNiLCAweDAwLCAweGNiLCAweDAwLCAweGNiLCAweDAwLCAweGNiLCAweDAwLAotCTB4Y2IsIDB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsIDB4MjIsIDB4MDEsIDB4MzcsIDB4YTksCi0JMHhjMCwgMHgzMywgMHhjMCwgMHgzMywgMHhjMCwgMHgzMywgMHhjMCwgMHgzMywgMHgwMCwgMHhiYywgMHgwMCwKLQkweGJjLCAweDAwLCAweGJjLCAweDAwLCAweGJjLCAweDAwLCAweGJjLCAweDAwLCAweGJjLCAweDAwLCAweGJjLAotCTB4MDAsIDB4YmMsIDB4ZmIsIDB4MDAsIDB4Y2EsIDB4NzksIDB4YzAsIDB4MmIsIDB4YzAsIDB4MmIsIDB4YzAsCi0JMHgyYiwgMHhjMCwgMHgyYiwgMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwKLQkweDAwLCAweGI0LCAweDAwLCAweGI0LCAweDAwLCAweGI0LCAweDAwLCAweGI0LCAweGQwLCAweDAwLCAweDVkLAotCTB4NTQsIDB4YzAsIDB4MjEsIDB4YzAsIDB4MjEsIDB4YzAsIDB4MjEsIDB4YzAsIDB4MjEsIDB4MDAsIDB4YWEsCi0JMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwgMHgwMCwKLQkweGFhLCAweDAwLCAweGFhLCAweGE3LCAweDAwLCAweGE5LCAweDNkLCAweGMwLCAweDE3LCAweGMwLCAweDE3LAotCTB4YzAsIDB4MTcsIDB4YzAsIDB4MTcsIDB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4MDAsCi0JMHhhMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHg3YSwgMHgwMCwKLQkweDA2LCAweDJjLCAweGMwLCAweDBkLCAweGMwLCAweDBkLCAweGMwLCAweDBkLCAweGMwLCAweDBkLCAweDAwLAotCTB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsCi0JMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwNiwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzEsIDB4MDksIDB4MDAsIDB4MDAsIDB4YzksIDB4ZmYsIDB4ZDgsCi0JMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgxMCwgMHgwMSwgMHgxMCwgMHgwMSwgMHgxMCwgMHgwMSwKLQkweDEwLCAweDAxLCAweGYwLCAweDAwLCAweGYwLCAweDAwLCAweGYwLCAweDAwLCAweGYwLCAweDAwLCAweGQwLAotCTB4MDAsIDB4ZDAsIDB4MDAsIDB4ZDAsIDB4MDAsIDB4ZDAsIDB4MDAsIDB4NTQsIDB4MDEsIDB4YWIsIDB4ZjYsCi0JMHhjMCwgMHg0MiwgMHhjMCwgMHg0MiwgMHhjMCwgMHg0MiwgMHhjMCwgMHg0MiwgMHgwMCwgMHhjYiwgMHgwMCwKLQkweGNiLCAweDAwLCAweGNiLCAweDAwLCAweGNiLCAweDAwLCAweGNiLCAweDAwLCAweGNiLCAweDAwLCAweGNiLAotCTB4MDAsIDB4Y2IsIDB4MjIsIDB4MDEsIDB4MzcsIDB4YTksIDB4YzAsIDB4MzMsIDB4YzAsIDB4MzMsIDB4YzAsCi0JMHgzMywgMHhjMCwgMHgzMywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywKLQkweDAwLCAweGJjLCAweDAwLCAweGJjLCAweDAwLCAweGJjLCAweDAwLCAweGJjLCAweGZiLCAweDAwLCAweGNhLAotCTB4NzksIDB4YzAsIDB4MmIsIDB4YzAsIDB4MmIsIDB4YzAsIDB4MmIsIDB4YzAsIDB4MmIsIDB4MDAsIDB4YjQsCi0JMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwgMHgwMCwKLQkweGI0LCAweDAwLCAweGI0LCAweGQwLCAweDAwLCAweDVkLCAweDU0LCAweGMwLCAweDIxLCAweGMwLCAweDIxLAotCTB4YzAsIDB4MjEsIDB4YzAsIDB4MjEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsCi0JMHhhYSwgMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwgMHhhNywgMHgwMCwKLQkweGE5LCAweDNkLCAweGMwLCAweDE3LCAweGMwLCAweDE3LCAweGMwLCAweDE3LCAweGMwLCAweDE3LCAweDAwLAotCTB4YTAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsCi0JMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHg3YSwgMHgwMCwgMHgwNiwgMHgyYywgMHhjMCwgMHgwZCwgMHhjMCwKLQkweDBkLCAweGMwLCAweDBkLCAweGMwLCAweDBkLCAweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDk2LAotCTB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4ODAsIDB4ODAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc2LAotCTB4MDksIDB4MDAsIDB4MDAsIDB4YzksIDB4ZmYsIDB4ZDgsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsCi0JMHgxMCwgMHgwMSwgMHgxMCwgMHgwMSwgMHgxMCwgMHgwMSwgMHgxMCwgMHgwMSwgMHhmMCwgMHgwMCwgMHhmMCwKLQkweDAwLCAweGYwLCAweDAwLCAweGYwLCAweDAwLCAweGQwLCAweDAwLCAweGQwLCAweDAwLCAweGQwLCAweDAwLAotCTB4ZDAsIDB4MDAsIDB4NTQsIDB4MDEsIDB4YWIsIDB4ZjYsIDB4YzAsIDB4NDIsIDB4YzAsIDB4NDIsIDB4YzAsCi0JMHg0MiwgMHhjMCwgMHg0MiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwKLQkweDAwLCAweGNiLCAweDAwLCAweGNiLCAweDAwLCAweGNiLCAweDAwLCAweGNiLCAweDIyLCAweDAxLCAweDM3LAotCTB4YTksIDB4YzAsIDB4MzMsIDB4YzAsIDB4MzMsIDB4YzAsIDB4MzMsIDB4YzAsIDB4MzMsIDB4MDAsIDB4YmMsCi0JMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHgwMCwKLQkweGJjLCAweDAwLCAweGJjLCAweGZiLCAweDAwLCAweGNhLCAweDc5LCAweGMwLCAweDJiLCAweGMwLCAweDJiLAotCTB4YzAsIDB4MmIsIDB4YzAsIDB4MmIsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsCi0JMHhiNCwgMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwgMHhkMCwgMHgwMCwKLQkweDVkLCAweDU0LCAweGMwLCAweDIxLCAweGMwLCAweDIxLCAweGMwLCAweDIxLCAweGMwLCAweDIxLCAweDAwLAotCTB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsCi0JMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwgMHhhNywgMHgwMCwgMHhhOSwgMHgzZCwgMHhjMCwgMHgxNywgMHhjMCwKLQkweDE3LCAweGMwLCAweDE3LCAweGMwLCAweDE3LCAweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDAwLCAweGEwLAotCTB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4N2EsCi0JMHgwMCwgMHgwNiwgMHgyYywgMHhjMCwgMHgwZCwgMHhjMCwgMHgwZCwgMHhjMCwgMHgwZCwgMHhjMCwgMHgwZCwKLQkweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLAotCTB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDdiLCAweDA5LCAweDAwLCAweDAwLCAweGM5LCAweGZmLAotCTB4ZDgsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MTAsIDB4MDEsIDB4MTAsIDB4MDEsIDB4MTAsCi0JMHgwMSwgMHgxMCwgMHgwMSwgMHhmMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHhmMCwgMHgwMCwKLQkweGQwLCAweDAwLCAweGQwLCAweDAwLCAweGQwLCAweDAwLCAweGQwLCAweDAwLCAweDU0LCAweDAxLCAweGFiLAotCTB4ZjYsIDB4YzAsIDB4NDIsIDB4YzAsIDB4NDIsIDB4YzAsIDB4NDIsIDB4YzAsIDB4NDIsIDB4MDAsIDB4Y2IsCi0JMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwKLQkweGNiLCAweDAwLCAweGNiLCAweDIyLCAweDAxLCAweDM3LCAweGE5LCAweGMwLCAweDMzLCAweGMwLCAweDMzLAotCTB4YzAsIDB4MzMsIDB4YzAsIDB4MzMsIDB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4MDAsCi0JMHhiYywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHhmYiwgMHgwMCwKLQkweGNhLCAweDc5LCAweGMwLCAweDJiLCAweGMwLCAweDJiLCAweGMwLCAweDJiLCAweGMwLCAweDJiLCAweDAwLAotCTB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsCi0JMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwgMHhkMCwgMHgwMCwgMHg1ZCwgMHg1NCwgMHhjMCwgMHgyMSwgMHhjMCwKLQkweDIxLCAweGMwLCAweDIxLCAweGMwLCAweDIxLCAweDAwLCAweGFhLCAweDAwLCAweGFhLCAweDAwLCAweGFhLAotCTB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4YTcsCi0JMHgwMCwgMHhhOSwgMHgzZCwgMHhjMCwgMHgxNywgMHhjMCwgMHgxNywgMHhjMCwgMHgxNywgMHhjMCwgMHgxNywKLQkweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDAwLAotCTB4YTAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4N2EsIDB4MDAsIDB4MDYsIDB4MmMsIDB4YzAsIDB4MGQsCi0JMHhjMCwgMHgwZCwgMHhjMCwgMHgwZCwgMHhjMCwgMHgwZCwgMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwKLQkweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDk2LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDgwLAotCTB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDgwLCAweDA5LCAweDAwLCAweDAwLCAweGM5LCAweGZmLCAweGQ4LCAweGZmLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDEsIDB4MTAsIDB4MDEsIDB4MTAsIDB4MDEsIDB4MTAsIDB4MDEsIDB4MTAsIDB4MDEsIDB4ZjAsIDB4MDAsCi0JMHhmMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHhkMCwgMHgwMCwgMHhkMCwgMHgwMCwgMHhkMCwKLQkweDAwLCAweGQwLCAweDAwLCAweDU0LCAweDAxLCAweGFiLCAweGY2LCAweGMwLCAweDQyLCAweGMwLCAweDQyLAotCTB4YzAsIDB4NDIsIDB4YzAsIDB4NDIsIDB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsIDB4MDAsCi0JMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgyMiwgMHgwMSwKLQkweDM3LCAweGE5LCAweGMwLCAweDMzLCAweGMwLCAweDMzLCAweGMwLCAweDMzLCAweGMwLCAweDMzLCAweDAwLAotCTB4YmMsIDB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsCi0JMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHhmYiwgMHgwMCwgMHhjYSwgMHg3OSwgMHhjMCwgMHgyYiwgMHhjMCwKLQkweDJiLCAweGMwLCAweDJiLCAweGMwLCAweDJiLCAweDAwLCAweGI0LCAweDAwLCAweGI0LCAweDAwLCAweGI0LAotCTB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4ZDAsCi0JMHgwMCwgMHg1ZCwgMHg1NCwgMHhjMCwgMHgyMSwgMHhjMCwgMHgyMSwgMHhjMCwgMHgyMSwgMHhjMCwgMHgyMSwKLQkweDAwLCAweGFhLCAweDAwLCAweGFhLCAweDAwLCAweGFhLCAweDAwLCAweGFhLCAweDAwLCAweGFhLCAweDAwLAotCTB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4YTcsIDB4MDAsIDB4YTksIDB4M2QsIDB4YzAsIDB4MTcsCi0JMHhjMCwgMHgxNywgMHhjMCwgMHgxNywgMHhjMCwgMHgxNywgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHgwMCwKLQkweGEwLCAweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDAwLCAweGEwLAotCTB4N2EsIDB4MDAsIDB4MDYsIDB4MmMsIDB4YzAsIDB4MGQsIDB4YzAsIDB4MGQsIDB4YzAsIDB4MGQsIDB4YzAsCi0JMHgwZCwgMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwKLQkweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDgwLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4NSwgMHgwOSwgMHgwMCwgMHgwMCwgMHhjOSwKLQkweGZmLCAweGQ4LCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDEwLCAweDAxLCAweDEwLCAweDAxLAotCTB4MTAsIDB4MDEsIDB4MTAsIDB4MDEsIDB4ZjAsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4ZjAsCi0JMHgwMCwgMHhkMCwgMHgwMCwgMHhkMCwgMHgwMCwgMHhkMCwgMHgwMCwgMHhkMCwgMHgwMCwgMHg1NCwgMHgwMSwKLQkweGFiLCAweGY2LCAweGMwLCAweDQyLCAweGMwLCAweDQyLCAweGMwLCAweDQyLCAweGMwLCAweDQyLCAweDAwLAotCTB4Y2IsIDB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsCi0JMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgyMiwgMHgwMSwgMHgzNywgMHhhOSwgMHhjMCwgMHgzMywgMHhjMCwKLQkweDMzLCAweGMwLCAweDMzLCAweGMwLCAweDMzLCAweDAwLCAweGJjLCAweDAwLCAweGJjLCAweDAwLCAweGJjLAotCTB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4ZmIsCi0JMHgwMCwgMHhjYSwgMHg3OSwgMHhjMCwgMHgyYiwgMHhjMCwgMHgyYiwgMHhjMCwgMHgyYiwgMHhjMCwgMHgyYiwKLQkweDAwLCAweGI0LCAweDAwLCAweGI0LCAweDAwLCAweGI0LCAweDAwLCAweGI0LCAweDAwLCAweGI0LCAweDAwLAotCTB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4ZDAsIDB4MDAsIDB4NWQsIDB4NTQsIDB4YzAsIDB4MjEsCi0JMHhjMCwgMHgyMSwgMHhjMCwgMHgyMSwgMHhjMCwgMHgyMSwgMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwgMHgwMCwKLQkweGFhLCAweDAwLCAweGFhLCAweDAwLCAweGFhLCAweDAwLCAweGFhLCAweDAwLCAweGFhLCAweDAwLCAweGFhLAotCTB4YTcsIDB4MDAsIDB4YTksIDB4M2QsIDB4YzAsIDB4MTcsIDB4YzAsIDB4MTcsIDB4YzAsIDB4MTcsIDB4YzAsCi0JMHgxNywgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwKLQkweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDdhLCAweDAwLCAweDA2LCAweDJjLCAweGMwLAotCTB4MGQsIDB4YzAsIDB4MGQsIDB4YzAsIDB4MGQsIDB4YzAsIDB4MGQsIDB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsCi0JMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwKLQkweDk2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwKLQkweDgwLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHg4YSwgMHgwOSwgMHgwMCwgMHgwMCwgMHhjOSwgMHhmZiwgMHhkOCwgMHhmZiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAxLCAweDEwLCAweDAxLCAweDEwLCAweDAxLCAweDEwLCAweDAxLCAweDEwLCAweDAxLCAweGYwLAotCTB4MDAsIDB4ZjAsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4ZDAsIDB4MDAsIDB4ZDAsIDB4MDAsCi0JMHhkMCwgMHgwMCwgMHhkMCwgMHgwMCwgMHg1NCwgMHgwMSwgMHhhYiwgMHhmNiwgMHhjMCwgMHg0MiwgMHhjMCwKLQkweDQyLCAweGMwLCAweDQyLCAweGMwLCAweDQyLCAweDAwLCAweGNiLCAweDAwLCAweGNiLCAweDAwLCAweGNiLAotCTB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsIDB4MjIsCi0JMHgwMSwgMHgzNywgMHhhOSwgMHhjMCwgMHgzMywgMHhjMCwgMHgzMywgMHhjMCwgMHgzMywgMHhjMCwgMHgzMywKLQkweDAwLCAweGJjLCAweDAwLCAweGJjLCAweDAwLCAweGJjLCAweDAwLCAweGJjLCAweDAwLCAweGJjLCAweDAwLAotCTB4YmMsIDB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4ZmIsIDB4MDAsIDB4Y2EsIDB4NzksIDB4YzAsIDB4MmIsCi0JMHhjMCwgMHgyYiwgMHhjMCwgMHgyYiwgMHhjMCwgMHgyYiwgMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwgMHgwMCwKLQkweGI0LCAweDAwLCAweGI0LCAweDAwLCAweGI0LCAweDAwLCAweGI0LCAweDAwLCAweGI0LCAweDAwLCAweGI0LAotCTB4ZDAsIDB4MDAsIDB4NWQsIDB4NTQsIDB4YzAsIDB4MjEsIDB4YzAsIDB4MjEsIDB4YzAsIDB4MjEsIDB4YzAsCi0JMHgyMSwgMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwKLQkweDAwLCAweGFhLCAweDAwLCAweGFhLCAweDAwLCAweGFhLCAweGE3LCAweDAwLCAweGE5LCAweDNkLCAweGMwLAotCTB4MTcsIDB4YzAsIDB4MTcsIDB4YzAsIDB4MTcsIDB4YzAsIDB4MTcsIDB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsCi0JMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHgwMCwKLQkweGEwLCAweDdhLCAweDAwLCAweDA2LCAweDJjLCAweGMwLCAweDBkLCAweGMwLCAweDBkLCAweGMwLCAweDBkLAotCTB4YzAsIDB4MGQsIDB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsCi0JMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OGYsIDB4MDksIDB4MDAsIDB4MDAsCi0JMHhjOSwgMHhmZiwgMHhkOCwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgxMCwgMHgwMSwgMHgxMCwKLQkweDAxLCAweDEwLCAweDAxLCAweDEwLCAweDAxLCAweGYwLCAweDAwLCAweGYwLCAweDAwLCAweGYwLCAweDAwLAotCTB4ZjAsIDB4MDAsIDB4ZDAsIDB4MDAsIDB4ZDAsIDB4MDAsIDB4ZDAsIDB4MDAsIDB4ZDAsIDB4MDAsIDB4NTQsCi0JMHgwMSwgMHhhYiwgMHhmNiwgMHhjMCwgMHg0MiwgMHhjMCwgMHg0MiwgMHhjMCwgMHg0MiwgMHhjMCwgMHg0MiwKLQkweDAwLCAweGNiLCAweDAwLCAweGNiLCAweDAwLCAweGNiLCAweDAwLCAweGNiLCAweDAwLCAweGNiLCAweDAwLAotCTB4Y2IsIDB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsIDB4MjIsIDB4MDEsIDB4MzcsIDB4YTksIDB4YzAsIDB4MzMsCi0JMHhjMCwgMHgzMywgMHhjMCwgMHgzMywgMHhjMCwgMHgzMywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHgwMCwKLQkweGJjLCAweDAwLCAweGJjLCAweDAwLCAweGJjLCAweDAwLCAweGJjLCAweDAwLCAweGJjLCAweDAwLCAweGJjLAotCTB4ZmIsIDB4MDAsIDB4Y2EsIDB4NzksIDB4YzAsIDB4MmIsIDB4YzAsIDB4MmIsIDB4YzAsIDB4MmIsIDB4YzAsCi0JMHgyYiwgMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwKLQkweDAwLCAweGI0LCAweDAwLCAweGI0LCAweDAwLCAweGI0LCAweGQwLCAweDAwLCAweDVkLCAweDU0LCAweGMwLAotCTB4MjEsIDB4YzAsIDB4MjEsIDB4YzAsIDB4MjEsIDB4YzAsIDB4MjEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsCi0JMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwgMHgwMCwKLQkweGFhLCAweGE3LCAweDAwLCAweGE5LCAweDNkLCAweGMwLCAweDE3LCAweGMwLCAweDE3LCAweGMwLCAweDE3LAotCTB4YzAsIDB4MTcsIDB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4MDAsCi0JMHhhMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHg3YSwgMHgwMCwgMHgwNiwgMHgyYywKLQkweGMwLCAweDBkLCAweGMwLCAweDBkLCAweGMwLCAweDBkLCAweGMwLCAweDBkLCAweDAwLCAweDk2LCAweDAwLAotCTB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsCi0JMHgwMCwgMHg5NiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwNiwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4OTQsIDB4MDksIDB4MDAsIDB4MDAsIDB4YzksIDB4ZmYsIDB4ZDgsIDB4ZmYsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMSwgMHgxMCwgMHgwMSwgMHgxMCwgMHgwMSwgMHgxMCwgMHgwMSwgMHgxMCwgMHgwMSwKLQkweGYwLCAweDAwLCAweGYwLCAweDAwLCAweGYwLCAweDAwLCAweGYwLCAweDAwLCAweGQwLCAweDAwLCAweGQwLAotCTB4MDAsIDB4ZDAsIDB4MDAsIDB4ZDAsIDB4MDAsIDB4NTQsIDB4MDEsIDB4YWIsIDB4ZjYsIDB4YzAsIDB4NDIsCi0JMHhjMCwgMHg0MiwgMHhjMCwgMHg0MiwgMHhjMCwgMHg0MiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwKLQkweGNiLCAweDAwLCAweGNiLCAweDAwLCAweGNiLCAweDAwLCAweGNiLCAweDAwLCAweGNiLCAweDAwLCAweGNiLAotCTB4MjIsIDB4MDEsIDB4MzcsIDB4YTksIDB4YzAsIDB4MzMsIDB4YzAsIDB4MzMsIDB4YzAsIDB4MzMsIDB4YzAsCi0JMHgzMywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywKLQkweDAwLCAweGJjLCAweDAwLCAweGJjLCAweDAwLCAweGJjLCAweGZiLCAweDAwLCAweGNhLCAweDc5LCAweGMwLAotCTB4MmIsIDB4YzAsIDB4MmIsIDB4YzAsIDB4MmIsIDB4YzAsIDB4MmIsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsCi0JMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwgMHgwMCwKLQkweGI0LCAweGQwLCAweDAwLCAweDVkLCAweDU0LCAweGMwLCAweDIxLCAweGMwLCAweDIxLCAweGMwLCAweDIxLAotCTB4YzAsIDB4MjEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsCi0JMHhhYSwgMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwgMHhhNywgMHgwMCwgMHhhOSwgMHgzZCwKLQkweGMwLCAweDE3LCAweGMwLCAweDE3LCAweGMwLCAweDE3LCAweGMwLCAweDE3LCAweDAwLCAweGEwLCAweDAwLAotCTB4YTAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsCi0JMHgwMCwgMHhhMCwgMHg3YSwgMHgwMCwgMHgwNiwgMHgyYywgMHhjMCwgMHgwZCwgMHhjMCwgMHgwZCwgMHhjMCwKLQkweDBkLCAweGMwLCAweDBkLCAweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDk2LAotCTB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDk5LCAweDA5LCAweDAwLAotCTB4MDAsIDB4YzksIDB4ZmYsIDB4ZDgsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MTAsIDB4MDEsCi0JMHgxMCwgMHgwMSwgMHgxMCwgMHgwMSwgMHgxMCwgMHgwMSwgMHhmMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHhmMCwKLQkweDAwLCAweGYwLCAweDAwLCAweGQwLCAweDAwLCAweGQwLCAweDAwLCAweGQwLCAweDAwLCAweGQwLCAweDAwLAotCTB4NTQsIDB4MDEsIDB4YWIsIDB4ZjYsIDB4YzAsIDB4NDIsIDB4YzAsIDB4NDIsIDB4YzAsIDB4NDIsIDB4YzAsCi0JMHg0MiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwKLQkweDAwLCAweGNiLCAweDAwLCAweGNiLCAweDAwLCAweGNiLCAweDIyLCAweDAxLCAweDM3LCAweGE5LCAweGMwLAotCTB4MzMsIDB4YzAsIDB4MzMsIDB4YzAsIDB4MzMsIDB4YzAsIDB4MzMsIDB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsCi0JMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHgwMCwKLQkweGJjLCAweGZiLCAweDAwLCAweGNhLCAweDc5LCAweGMwLCAweDJiLCAweGMwLCAweDJiLCAweGMwLCAweDJiLAotCTB4YzAsIDB4MmIsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsCi0JMHhiNCwgMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwgMHhkMCwgMHgwMCwgMHg1ZCwgMHg1NCwKLQkweGMwLCAweDIxLCAweGMwLCAweDIxLCAweGMwLCAweDIxLCAweGMwLCAweDIxLCAweDAwLCAweGFhLCAweDAwLAotCTB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsCi0JMHgwMCwgMHhhYSwgMHhhNywgMHgwMCwgMHhhOSwgMHgzZCwgMHhjMCwgMHgxNywgMHhjMCwgMHgxNywgMHhjMCwKLQkweDE3LCAweGMwLCAweDE3LCAweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDAwLCAweGEwLAotCTB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4N2EsIDB4MDAsIDB4MDYsCi0JMHgyYywgMHhjMCwgMHgwZCwgMHhjMCwgMHgwZCwgMHhjMCwgMHgwZCwgMHhjMCwgMHgwZCwgMHgwMCwgMHg5NiwKLQkweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLAotCTB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDYsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDllLCAweDA5LCAweDAwLCAweDAwLCAweGM5LCAweGZmLCAweGQ4LCAweGZmLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MTAsIDB4MDEsIDB4MTAsIDB4MDEsIDB4MTAsIDB4MDEsIDB4MTAsCi0JMHgwMSwgMHhmMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHhkMCwgMHgwMCwKLQkweGQwLCAweDAwLCAweGQwLCAweDAwLCAweGQwLCAweDAwLCAweDU0LCAweDAxLCAweGFiLCAweGY2LCAweGMwLAotCTB4NDIsIDB4YzAsIDB4NDIsIDB4YzAsIDB4NDIsIDB4YzAsIDB4NDIsIDB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsCi0JMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwKLQkweGNiLCAweDIyLCAweDAxLCAweDM3LCAweGE5LCAweGMwLCAweDMzLCAweGMwLCAweDMzLCAweGMwLCAweDMzLAotCTB4YzAsIDB4MzMsIDB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4MDAsCi0JMHhiYywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHhmYiwgMHgwMCwgMHhjYSwgMHg3OSwKLQkweGMwLCAweDJiLCAweGMwLCAweDJiLCAweGMwLCAweDJiLCAweGMwLCAweDJiLCAweDAwLCAweGI0LCAweDAwLAotCTB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsCi0JMHgwMCwgMHhiNCwgMHhkMCwgMHgwMCwgMHg1ZCwgMHg1NCwgMHhjMCwgMHgyMSwgMHhjMCwgMHgyMSwgMHhjMCwKLQkweDIxLCAweGMwLCAweDIxLCAweDAwLCAweGFhLCAweDAwLCAweGFhLCAweDAwLCAweGFhLCAweDAwLCAweGFhLAotCTB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4YTcsIDB4MDAsIDB4YTksCi0JMHgzZCwgMHhjMCwgMHgxNywgMHhjMCwgMHgxNywgMHhjMCwgMHgxNywgMHhjMCwgMHgxNywgMHgwMCwgMHhhMCwKLQkweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDAwLAotCTB4YTAsIDB4MDAsIDB4YTAsIDB4N2EsIDB4MDAsIDB4MDYsIDB4MmMsIDB4YzAsIDB4MGQsIDB4YzAsIDB4MGQsCi0JMHhjMCwgMHgwZCwgMHhjMCwgMHgwZCwgMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwKLQkweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDgwLCAweDgwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwIH07Ci0KLXN0YXRpYyBjb25zdCB1OCBkZWZhdWx0X2NhbF9yc3NpW10gPSB7Ci0JMHgwYSwgMHgwMSwgMHg3MiwgMHhmZSwgMHgxYSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYSwgMHgwMSwgMHg3MiwKLQkweGZlLCAweDFhLCAweDAwLCAweDAwLCAweDAwLCAweDBhLCAweDAxLCAweDcyLCAweGZlLCAweDFhLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MGEsIDB4MDEsIDB4NzIsIDB4ZmUsIDB4MWEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsCi0JMHgwMSwgMHg3MiwgMHhmZSwgMHgxYSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYSwgMHgwMSwgMHg3MiwgMHhmZSwKLQkweDFhLCAweDAwLCAweDAwLCAweDAwLCAweDBhLCAweDAxLCAweDcyLCAweGZlLCAweDFhLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MGEsIDB4MDEsIDB4NzIsIDB4ZmUsIDB4MWEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsIDB4MDEsCi0JMHg3MiwgMHhmZSwgMHgxYSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYSwgMHgwMSwgMHg3MiwgMHhmZSwgMHgxYSwKLQkweDAwLCAweDAwLCAweDAwLCAweDBhLCAweDAxLCAweDcyLCAweGZlLCAweDFhLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9OwotCi1zdGF0aWMgdm9pZCBzdGxjNDV4eF90eF9lZGNmKHN0cnVjdCBzdGxjNDV4eCAqc3RsYyk7Ci1zdGF0aWMgdm9pZCBzdGxjNDV4eF90eF9zZXR1cChzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMpOwotc3RhdGljIHZvaWQgc3RsYzQ1eHhfdHhfc2NhbihzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMpOwotc3RhdGljIHZvaWQgc3RsYzQ1eHhfdHhfcHNtKHN0cnVjdCBzdGxjNDV4eCAqc3RsYywgYm9vbCBlbmFibGUpOwotc3RhdGljIGludCBzdGxjNDV4eF90eF9udWxsZnVuYyhzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMsIGJvb2wgcG93ZXJzYXZlKTsKLXN0YXRpYyBpbnQgc3RsYzQ1eHhfdHhfcHNwb2xsKHN0cnVjdCBzdGxjNDV4eCAqc3RsYywgYm9vbCBwb3dlcnNhdmUpOwotCi1zdGF0aWMgc3NpemVfdCBzdGxjNDV4eF9zeXNmc19zaG93X2NhbF9yc3NpKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCQkJICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAotCQkJCQkgICAgY2hhciAqYnVmKQotewotCXN0cnVjdCBzdGxjNDV4eCAqc3RsYyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCXNzaXplX3QgbGVuOwotCi0Jc3RsYzQ1eHhfZGVidWcoREVCVUdfRlVOQywgIiVzIiwgX19mdW5jX18pOwotCi0JbGVuID0gUEFHRV9TSVpFOwotCi0JbXV0ZXhfbG9jaygmc3RsYy0+bXV0ZXgpOwotCi0JaWYgKHN0bGMtPmNhbF9yc3NpKQotCQloZXhfZHVtcF90b19idWZmZXIoc3RsYy0+Y2FsX3Jzc2ksIFJTU0lfQ0FMX0FSUkFZX0xFTiwgMTYsCi0JCQkJICAgMiwgYnVmLCBsZW4sIDApOwotCW11dGV4X3VubG9jaygmc3RsYy0+bXV0ZXgpOwotCi0JbGVuID0gc3RybGVuKGJ1Zik7Ci0KLQlyZXR1cm4gbGVuOwotfQotCi1zdGF0aWMgc3NpemVfdCBzdGxjNDV4eF9zeXNmc19zdG9yZV9jYWxfcnNzaShzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkJCSAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCi0JCQkJCSAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCi17Ci0Jc3RydWN0IHN0bGM0NXh4ICpzdGxjID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0KLQlzdGxjNDV4eF9kZWJ1ZyhERUJVR19GVU5DLCAiJXMiLCBfX2Z1bmNfXyk7Ci0KLQltdXRleF9sb2NrKCZzdGxjLT5tdXRleCk7Ci0KLQlpZiAoY291bnQgIT0gUlNTSV9DQUxfQVJSQVlfTEVOKSB7Ci0JCXN0bGM0NXh4X2Vycm9yKCJpbnZhbGlkIGNhbF9yc3NpIGxlbmd0aDogJXp1IiwgY291bnQpOwotCQljb3VudCA9IDA7Ci0JCWdvdG8gb3V0X3VubG9jazsKLQl9Ci0KLQlrZnJlZShzdGxjLT5jYWxfcnNzaSk7Ci0KLQlzdGxjLT5jYWxfcnNzaSA9IGttZW1kdXAoYnVmLCBSU1NJX0NBTF9BUlJBWV9MRU4sIEdGUF9LRVJORUwpOwotCi0JaWYgKCFzdGxjLT5jYWxfcnNzaSkgewotCQlzdGxjNDV4eF9lcnJvcigiZmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgY2FsX3Jzc2kiKTsKLQkJY291bnQgPSAwOwotCQlnb3RvIG91dF91bmxvY2s7Ci0JfQotCi0gb3V0X3VubG9jazoKLQltdXRleF91bmxvY2soJnN0bGMtPm11dGV4KTsKLQotCXJldHVybiBjb3VudDsKLX0KLQotc3RhdGljIHNzaXplX3Qgc3RsYzQ1eHhfc3lzZnNfc2hvd19jYWxfY2hhbm5lbHMoc3RydWN0IGRldmljZSAqZGV2LAotCQkJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCi0JCQkJCQljaGFyICpidWYpCi17Ci0Jc3RydWN0IHN0bGM0NXh4ICpzdGxjID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0Jc3NpemVfdCBsZW47Ci0KLQlzdGxjNDV4eF9kZWJ1ZyhERUJVR19GVU5DLCAiJXMiLCBfX2Z1bmNfXyk7Ci0KLQlsZW4gPSBQQUdFX1NJWkU7Ci0KLQltdXRleF9sb2NrKCZzdGxjLT5tdXRleCk7Ci0KLQlpZiAoc3RsYy0+Y2FsX2NoYW5uZWxzKQotCQloZXhfZHVtcF90b19idWZmZXIoc3RsYy0+Y2FsX2NoYW5uZWxzLCBDSEFOTkVMX0NBTF9BUlJBWV9MRU4sCi0JCQkJICAgMTYsIDIsIGJ1ZiwgbGVuLCAwKTsKLQotCW11dGV4X3VubG9jaygmc3RsYy0+bXV0ZXgpOwotCi0JbGVuID0gc3RybGVuKGJ1Zik7Ci0KLQlyZXR1cm4gbGVuOwotfQotCi1zdGF0aWMgc3NpemVfdCBzdGxjNDV4eF9zeXNmc19zdG9yZV9jYWxfY2hhbm5lbHMoc3RydWN0IGRldmljZSAqZGV2LAotCQkJCQkJIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAotCQkJCQkJIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQotewotCXN0cnVjdCBzdGxjNDV4eCAqc3RsYyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCi0Jc3RsYzQ1eHhfZGVidWcoREVCVUdfRlVOQywgIiVzIiwgX19mdW5jX18pOwotCi0JbXV0ZXhfbG9jaygmc3RsYy0+bXV0ZXgpOwotCi0JaWYgKGNvdW50ICE9IENIQU5ORUxfQ0FMX0FSUkFZX0xFTikgewotCQlzdGxjNDV4eF9lcnJvcigiaW52YWxpZCBjYWxfY2hhbm5lbHMgc2l6ZTogJXp1ICIsIGNvdW50KTsKLQkJY291bnQgPSAwOwotCQlnb3RvIG91dF91bmxvY2s7Ci0JfQotCi0Ja2ZyZWUoc3RsYy0+Y2FsX2NoYW5uZWxzKTsKLQotCXN0bGMtPmNhbF9jaGFubmVscyA9IGttZW1kdXAoYnVmLCBjb3VudCwgR0ZQX0tFUk5FTCk7Ci0KLQlpZiAoIXN0bGMtPmNhbF9jaGFubmVscykgewotCQlzdGxjNDV4eF9lcnJvcigiZmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgY2FsX2NoYW5uZWxzIik7Ci0JCWNvdW50ID0gMDsKLQkJZ290byBvdXRfdW5sb2NrOwotCX0KLQotb3V0X3VubG9jazoKLQltdXRleF91bmxvY2soJnN0bGMtPm11dGV4KTsKLQotCXJldHVybiBjb3VudDsKLX0KLQotc3RhdGljIHNzaXplX3Qgc3RsYzQ1eHhfc3lzZnNfc2hvd190eF9idWYoc3RydWN0IGRldmljZSAqZGV2LAotCQkJCQkgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAotCQkJCQkgIGNoYXIgKmJ1ZikKLXsKLQlzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlzdHJ1Y3QgdHhidWZmZXIgKmVudHJ5OwotCXNzaXplX3QgbGVuID0gMDsKLQotCXN0bGM0NXh4X2RlYnVnKERFQlVHX0ZVTkMsICIlcygpIiwgX19mdW5jX18pOwotCi0JbXV0ZXhfbG9jaygmc3RsYy0+bXV0ZXgpOwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgJnN0bGMtPnR4X3NlbnQsIHR4X2xpc3QpIHsKLQkJbGVuICs9IHNwcmludGYoYnVmICsgbGVuLCAiMHgleDogMHgleC0weCV4XG4iLAotCQkJICAgICAgIGVudHJ5LT5oYW5kbGUsIGVudHJ5LT5zdGFydCwKLQkJCSAgICAgICBlbnRyeS0+ZW5kKTsKLQl9Ci0KLQltdXRleF91bmxvY2soJnN0bGMtPm11dGV4KTsKLQotCXJldHVybiBsZW47Ci19Ci0KLXN0YXRpYyBERVZJQ0VfQVRUUihjYWxfcnNzaSwgU19JUlVHTyB8IFNfSVdVU1IsCi0JCSAgIHN0bGM0NXh4X3N5c2ZzX3Nob3dfY2FsX3Jzc2ksCi0JCSAgIHN0bGM0NXh4X3N5c2ZzX3N0b3JlX2NhbF9yc3NpKTsKLXN0YXRpYyBERVZJQ0VfQVRUUihjYWxfY2hhbm5lbHMsIFNfSVJVR08gfCBTX0lXVVNSLAotCQkgICBzdGxjNDV4eF9zeXNmc19zaG93X2NhbF9jaGFubmVscywKLQkJICAgc3RsYzQ1eHhfc3lzZnNfc3RvcmVfY2FsX2NoYW5uZWxzKTsKLXN0YXRpYyBERVZJQ0VfQVRUUih0eF9idWYsIFNfSVJVR08sIHN0bGM0NXh4X3N5c2ZzX3Nob3dfdHhfYnVmLCBOVUxMKTsKLQotc3RhdGljIHZvaWQgc3RsYzQ1eHhfc3BpX3JlYWQoc3RydWN0IHN0bGM0NXh4ICpzdGxjLCB1bnNpZ25lZCBsb25nIGFkZHIsCi0JCQkgICAgICB2b2lkICpidWYsIHNpemVfdCBsZW4pCi17Ci0Jc3RydWN0IHNwaV90cmFuc2ZlciB0WzJdOwotCXN0cnVjdCBzcGlfbWVzc2FnZSBtOwotCi0JLyogV2UgZmlyc3QgcHVzaCB0aGUgYWRkcmVzcyAqLwotCWFkZHIgPSAoYWRkciA8PCA4KSB8IEFERFJfUkVBRF9CSVRfMTU7Ci0KLQlzcGlfbWVzc2FnZV9pbml0KCZtKTsKLQltZW1zZXQodCwgMCwgc2l6ZW9mKHQpKTsKLQotCXRbMF0udHhfYnVmID0gJmFkZHI7Ci0JdFswXS5sZW4gPSAyOwotCXNwaV9tZXNzYWdlX2FkZF90YWlsKCZ0WzBdLCAmbSk7Ci0KLQl0WzFdLnJ4X2J1ZiA9IGJ1ZjsKLQl0WzFdLmxlbiA9IGxlbjsKLQlzcGlfbWVzc2FnZV9hZGRfdGFpbCgmdFsxXSwgJm0pOwotCi0Jc3BpX3N5bmMoc3RsYy0+c3BpLCAmbSk7Ci19Ci0KLQotc3RhdGljIHZvaWQgc3RsYzQ1eHhfc3BpX3dyaXRlKHN0cnVjdCBzdGxjNDV4eCAqc3RsYywgdW5zaWduZWQgbG9uZyBhZGRyLAotCQkJICAgICAgIHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbikKLXsKLQlzdHJ1Y3Qgc3BpX3RyYW5zZmVyIHRbM107Ci0Jc3RydWN0IHNwaV9tZXNzYWdlIG07Ci0JdTE2IGxhc3Rfd29yZDsKLQotCS8qIFdlIGZpcnN0IHB1c2ggdGhlIGFkZHJlc3MgKi8KLQlhZGRyID0gYWRkciA8PCA4OwotCi0Jc3BpX21lc3NhZ2VfaW5pdCgmbSk7Ci0JbWVtc2V0KHQsIDAsIHNpemVvZih0KSk7Ci0KLQl0WzBdLnR4X2J1ZiA9ICZhZGRyOwotCXRbMF0ubGVuID0gMjsKLQlzcGlfbWVzc2FnZV9hZGRfdGFpbCgmdFswXSwgJm0pOwotCi0JdFsxXS50eF9idWYgPSBidWY7Ci0JdFsxXS5sZW4gPSBsZW47Ci0Jc3BpX21lc3NhZ2VfYWRkX3RhaWwoJnRbMV0sICZtKTsKLQotCWlmIChsZW4gJSAyKSB7Ci0JCWxhc3Rfd29yZCA9ICgodTggKilidWYpW2xlbiAtIDFdOwotCi0JCXRbMl0udHhfYnVmID0gJmxhc3Rfd29yZDsKLQkJdFsyXS5sZW4gPSAyOwotCQlzcGlfbWVzc2FnZV9hZGRfdGFpbCgmdFsyXSwgJm0pOwotCX0KLQotCXNwaV9zeW5jKHN0bGMtPnNwaSwgJm0pOwotfQotCi1zdGF0aWMgdTE2IHN0bGM0NXh4X3JlYWQxNihzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMsIHVuc2lnbmVkIGxvbmcgYWRkcikKLXsKLQl1MTYgdmFsOwotCi0Jc3RsYzQ1eHhfc3BpX3JlYWQoc3RsYywgYWRkciwgJnZhbCwgc2l6ZW9mKHZhbCkpOwotCi0JcmV0dXJuIHZhbDsKLX0KLQotc3RhdGljIHUzMiBzdGxjNDV4eF9yZWFkMzIoc3RydWN0IHN0bGM0NXh4ICpzdGxjLCB1bnNpZ25lZCBsb25nIGFkZHIpCi17Ci0JdTMyIHZhbDsKLQotCXN0bGM0NXh4X3NwaV9yZWFkKHN0bGMsIGFkZHIsICZ2YWwsIHNpemVvZih2YWwpKTsKLQotCXJldHVybiB2YWw7Ci19Ci0KLXN0YXRpYyB2b2lkIHN0bGM0NXh4X3dyaXRlMTYoc3RydWN0IHN0bGM0NXh4ICpzdGxjLCB1bnNpZ25lZCBsb25nIGFkZHIsIHUxNiB2YWwpCi17Ci0Jc3RsYzQ1eHhfc3BpX3dyaXRlKHN0bGMsIGFkZHIsICZ2YWwsIHNpemVvZih2YWwpKTsKLX0KLQotc3RhdGljIHZvaWQgc3RsYzQ1eHhfd3JpdGUzMihzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMsIHVuc2lnbmVkIGxvbmcgYWRkciwgdTMyIHZhbCkKLXsKLQlzdGxjNDV4eF9zcGlfd3JpdGUoc3RsYywgYWRkciwgJnZhbCwgc2l6ZW9mKHZhbCkpOwotfQotCi1zdHJ1Y3Qgc3RsYzQ1eHhfc3BpX3JlZyB7Ci0JdTE2IGFkZHJlc3M7Ci0JdTE2IGxlbmd0aDsKLQljaGFyICpuYW1lOwotfTsKLQotLyogY2FsbGVyIG11c3QgaG9sZCB0eF9sb2NrICovCi1zdGF0aWMgdm9pZCBzdGxjNDV4eF90eGJ1ZmZlcl9kdW1wKHN0cnVjdCBzdGxjNDV4eCAqc3RsYykKLXsKLQlzdHJ1Y3QgdHhidWZmZXIgKnR4YnVmZmVyOwotCWNoYXIgKmJ1ZiwgKnBvczsKLQlpbnQgYnVmX2xlbiwgbCwgY291bnQ7Ci0KLQlpZiAoIShERUJVR19MRVZFTCAmIERFQlVHX1RYQlVGRkVSKSkKLQkJcmV0dXJuOwotCi0Jc3RsYzQ1eHhfZGVidWcoREVCVUdfRlVOQywgIiVzKCkiLCBfX2Z1bmNfXyk7Ci0KLQlidWZfbGVuID0gNTAwOwotCWJ1ZiA9IGttYWxsb2MoYnVmX2xlbiwgR0ZQX0FUT01JQyk7Ci0JaWYgKCFidWYpCi0JCXJldHVybjsKLQotCXBvcyA9IGJ1ZjsKLQljb3VudCA9IDA7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHR4YnVmZmVyLCAmc3RsYy0+dHhidWZmZXIsIGJ1ZmZlcl9saXN0KSB7Ci0JCWwgPSBzbnByaW50Zihwb3MsIGJ1Zl9sZW4sICIweCV4LTB4JXgsIiwKLQkJCSAgICAgdHhidWZmZXItPnN0YXJ0LCB0eGJ1ZmZlci0+ZW5kKTsKLQkJLyogZHJvcCB0aGUgbnVsbCBieXRlICovCi0JCXBvcyArPSBsOwotCQlidWZfbGVuIC09IGw7Ci0JCWNvdW50Kys7Ci0JfQotCi0JaWYgKGNvdW50ID09IDApCi0JCSpwb3MgPSAnXDAnOwotCWVsc2UKLQkJKi0tcG9zID0gJ1wwJzsKLQotCXN0bGM0NXh4X2RlYnVnKERFQlVHX1RYQlVGRkVSLCAidHhidWZmZXI6IGluIGJ1ZmZlciAlZCByZWdpb25zOiAlcyIsCi0JCSAgICAgICBjb3VudCwgYnVmKTsKLQotCWtmcmVlKGJ1Zik7Ci19Ci0KLS8qIGNhbGxlciBtdXN0IGhvbGQgdHhfbG9jayAqLwotc3RhdGljIGludCBzdGxjNDV4eF90eGJ1ZmZlcl9maW5kKHN0cnVjdCBzdGxjNDV4eCAqc3RsYywgc2l6ZV90IGxlbikKLXsKLQlzdHJ1Y3QgdHhidWZmZXIgKnR4YnVmZmVyOwotCWludCBwb3M7Ci0KLQlzdGxjNDV4eF9kZWJ1ZyhERUJVR19GVU5DLCAiJXMoKSIsIF9fZnVuY19fKTsKLQotCXBvcyA9IEZJUk1XQVJFX1RYQlVGRkVSX1NUQVJUOwotCi0JaWYgKGxpc3RfZW1wdHkoJnN0bGMtPnR4YnVmZmVyKSkKLQkJZ290byBvdXQ7Ci0KLQkvKgotCSAqIHRoZSBlbnRyaWVzIGluIHR4YnVmZmVyIG11c3QgYmUgaW4gdGhlIHNhbWUgb3JkZXIgYXMgdGhleSBhcmUgaW4KLQkgKiB0aGUgcmVhbCBidWZmZXIKLQkgKi8KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHR4YnVmZmVyLCAmc3RsYy0+dHhidWZmZXIsIGJ1ZmZlcl9saXN0KSB7Ci0JCWlmIChwb3MgKyBsZW4gPCB0eGJ1ZmZlci0+c3RhcnQpCi0JCQlicmVhazsKLQkJcG9zID0gQUxJR04odHhidWZmZXItPmVuZCArIDEsIDQpOwotCX0KLQotCWlmIChwb3MgKyBsZW4gPiBGSVJNV0FSRV9UWEJVRkZFUl9FTkQpCi0JCS8qIG5vdCBlbm91Z2ggcm9vbSAqLwotCQlwb3MgPSAtMTsKLQotCXN0bGM0NXh4X2RlYnVnKERFQlVHX1RYQlVGRkVSLCAidHhidWZmZXI6IGZpbmQgJXp1IEI6IDB4JXgiLCBsZW4sIHBvcyk7Ci0KLW91dDoKLQlyZXR1cm4gcG9zOwotfQotCi1zdGF0aWMgaW50IHN0bGM0NXh4X3R4YnVmZmVyX2FkZChzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMsCi0JCQkJIHN0cnVjdCB0eGJ1ZmZlciAqdHhidWZmZXIpCi17Ci0Jc3RydWN0IHR4YnVmZmVyICpyLCAqcHJldiA9IE5VTEw7Ci0KLQlpZiAobGlzdF9lbXB0eSgmc3RsYy0+dHhidWZmZXIpKSB7Ci0JCWxpc3RfYWRkKCZ0eGJ1ZmZlci0+YnVmZmVyX2xpc3QsICZzdGxjLT50eGJ1ZmZlcik7Ci0JCXJldHVybiAwOwotCX0KLQotCXIgPSBsaXN0X2ZpcnN0X2VudHJ5KCZzdGxjLT50eGJ1ZmZlciwgc3RydWN0IHR4YnVmZmVyLCBidWZmZXJfbGlzdCk7Ci0KLQlpZiAodHhidWZmZXItPnN0YXJ0IDwgci0+c3RhcnQpIHsKLQkJLyogYWRkIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxpc3QgKi8KLQkJbGlzdF9hZGQoJnR4YnVmZmVyLT5idWZmZXJfbGlzdCwgJnN0bGMtPnR4YnVmZmVyKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JcHJldiA9IE5VTEw7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShyLCAmc3RsYy0+dHhidWZmZXIsIGJ1ZmZlcl9saXN0KSB7Ci0JCS8qIHNraXAgZmlyc3QgZW50cnksIHdlIGNoZWNrZWQgZm9yIHRoYXQgYWJvdmUgKi8KLQkJaWYgKCFwcmV2KSB7Ci0JCQlwcmV2ID0gcjsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJLyogZG91YmxlLWNoZWNrIG92ZXJsYXBzICovCi0JCVdBUk5fT05fT05DRSh0eGJ1ZmZlci0+c3RhcnQgPj0gci0+c3RhcnQgJiYKLQkJCSAgICAgdHhidWZmZXItPnN0YXJ0IDw9IHItPmVuZCk7Ci0JCVdBUk5fT05fT05DRSh0eGJ1ZmZlci0+ZW5kID49IHItPnN0YXJ0ICYmCi0JCQkgICAgIHR4YnVmZmVyLT5lbmQgPD0gci0+ZW5kKTsKLQotCQlpZiAocHJldi0+ZW5kIDwgdHhidWZmZXItPnN0YXJ0ICYmCi0JCSAgICB0eGJ1ZmZlci0+ZW5kIDwgci0+c3RhcnQpIHsKLQkJCS8qIGluc2VydCBhdCB0aGlzIHNwb3QgKi8KLQkJCWxpc3RfYWRkX3RhaWwoJnR4YnVmZmVyLT5idWZmZXJfbGlzdCwgJnItPmJ1ZmZlcl9saXN0KTsKLQkJCXJldHVybiAwOwotCQl9Ci0KLQkJcHJldiA9IHI7Ci0JfQotCi0JLyogbm90IGZvdW5kICovCi0JbGlzdF9hZGRfdGFpbCgmdHhidWZmZXItPmJ1ZmZlcl9saXN0LCAmc3RsYy0+dHhidWZmZXIpOwotCi0JcmV0dXJuIDA7Ci0KLX0KLQotLyogY2FsbGVyIG11c3QgaG9sZCB0eF9sb2NrICovCi1zdGF0aWMgc3RydWN0IHR4YnVmZmVyICpzdGxjNDV4eF90eGJ1ZmZlcl9hbGxvYyhzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMsCi0JCQkJCQkgc2l6ZV90IGZyYW1lX2xlbikKLXsKLQlzdHJ1Y3QgdHhidWZmZXIgKmVudHJ5ID0gTlVMTDsKLQlzaXplX3QgbGVuOwotCWludCBwb3M7Ci0KLQlzdGxjNDV4eF9kZWJ1ZyhERUJVR19GVU5DLCAiJXMoKSIsIF9fZnVuY19fKTsKLQotCWxlbiA9IEZJUk1XQVJFX1RYQlVGRkVSX0hFQURFUiArIGZyYW1lX2xlbiArIEZJUk1XQVJFX1RYQlVGRkVSX1RSQUlMRVI7Ci0JcG9zID0gc3RsYzQ1eHhfdHhidWZmZXJfZmluZChzdGxjLCBsZW4pOwotCi0JaWYgKHBvcyA8IDApCi0JCXJldHVybiBOVUxMOwotCi0JV0FSTl9PTl9PTkNFKHBvcyArIGxlbiA+IEZJUk1XQVJFX1RYQlVGRkVSX0VORCk7Ci0JV0FSTl9PTl9PTkNFKHBvcyA8IEZJUk1XQVJFX1RYQlVGRkVSX1NUQVJUKTsKLQotCWVudHJ5ID0ga21hbGxvYyhzaXplb2YoKmVudHJ5KSwgR0ZQX0FUT01JQyk7Ci0JZW50cnktPnN0YXJ0ID0gcG9zOwotCWVudHJ5LT5mcmFtZV9zdGFydCA9IHBvcyArIEZJUk1XQVJFX1RYQlVGRkVSX0hFQURFUjsKLQllbnRyeS0+ZW5kID0gZW50cnktPnN0YXJ0ICsgbGVuIC0gMTsKLQotCXN0bGM0NXh4X2RlYnVnKERFQlVHX1RYQlVGRkVSLCAidHhidWZmZXI6IGFsbG9jYXRlZCAweCV4LTB4JXgiLAotCQkgICAgICAgZW50cnktPnN0YXJ0LCBlbnRyeS0+ZW5kKTsKLQotCXN0bGM0NXh4X3R4YnVmZmVyX2FkZChzdGxjLCBlbnRyeSk7Ci0KLQlzdGxjNDV4eF90eGJ1ZmZlcl9kdW1wKHN0bGMpOwotCi0JcmV0dXJuIGVudHJ5OwotfQotCi0vKiBjYWxsZXIgbXVzdCBob2xkIHR4X2xvY2sgKi8KLXN0YXRpYyB2b2lkIHN0bGM0NXh4X3R4YnVmZmVyX2ZyZWUoc3RydWN0IHN0bGM0NXh4ICpzdGxjLAotCQkJCSAgIHN0cnVjdCB0eGJ1ZmZlciAqdHhidWZmZXIpCi17Ci0Jc3RsYzQ1eHhfZGVidWcoREVCVUdfRlVOQywgIiVzKCkiLCBfX2Z1bmNfXyk7Ci0KLQlzdGxjNDV4eF9kZWJ1ZyhERUJVR19UWEJVRkZFUiwgInR4YnVmZmVyOiBmcmVlZCAweCV4LTB4JXgiLAotCQkgICAgICAgdHhidWZmZXItPnN0YXJ0LCB0eGJ1ZmZlci0+ZW5kKTsKLQotCWxpc3RfZGVsKCZ0eGJ1ZmZlci0+YnVmZmVyX2xpc3QpOwotCWtmcmVlKHR4YnVmZmVyKTsKLX0KLQotCi1zdGF0aWMgaW50IHN0bGM0NXh4X3dhaXRfYml0KHN0cnVjdCBzdGxjNDV4eCAqc3RsYywgdTE2IHJlZywgdTMyIG1hc2ssCi0JCQkgICAgIHUzMiBleHBlY3RlZCkKLXsKLQlpbnQgaTsKLQljaGFyIGJ1ZmZlcls0XTsKLQotCWZvciAoaSA9IDA7IGkgPCAyMDAwOyBpKyspIHsKLQkJc3RsYzQ1eHhfc3BpX3JlYWQoc3RsYywgcmVnLCBidWZmZXIsIHNpemVvZihidWZmZXIpKTsKLQkJaWYgKCgoKih1MzIgKilidWZmZXIpICYgbWFzaykgPT0gZXhwZWN0ZWQpCi0JCQlyZXR1cm4gMTsKLQkJbXNsZWVwKDEpOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHN0bGM0NXh4X3JlcXVlc3RfZmlybXdhcmUoc3RydWN0IHN0bGM0NXh4ICpzdGxjKQotewotCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZnc7Ci0JaW50IHJldDsKLQotCS8qIEZJWE1FOiBzaG91bGQgZHJpdmVyIHVzZSBpdCdzIG93biBzdHJ1Y3QgZGV2aWNlPyAqLwotCXJldCA9IHJlcXVlc3RfZmlybXdhcmUoJmZ3LCAiMzgyNi5hcm0iLCAmc3RsYy0+c3BpLT5kZXYpOwotCi0JaWYgKHJldCA8IDApIHsKLQkJc3RsYzQ1eHhfZXJyb3IoInJlcXVlc3RfZmlybXdhcmUoKSBmYWlsZWQ6ICVkIiwgcmV0KTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQlpZiAoZnctPnNpemUgJSA0KSB7Ci0JCXN0bGM0NXh4X2Vycm9yKCJmaXJtd2FyZSBzaXplIGlzIG5vdCBtdWx0aXBsZSBvZiAzMmJpdDogJXp1IiwKLQkJCSAgICAgICBmdy0+c2l6ZSk7Ci0JCXJldHVybiAtRUlMU0VROyAvKiBJbGxlZ2FsIGJ5dGUgc2VxdWVuY2UgICovOwotCX0KLQotCWlmIChmdy0+c2l6ZSA8IDEwMDApIHsKLQkJc3RsYzQ1eHhfZXJyb3IoImZpcm13YXJlIGlzIHRvbyBzbWFsbDogJXp1IiwgZnctPnNpemUpOwotCQlyZXR1cm4gLUVJTFNFUTsKLQl9Ci0KLQlzdGxjLT5mdyA9IGttZW1kdXAoZnctPmRhdGEsIGZ3LT5zaXplLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXN0bGMtPmZ3KSB7Ci0JCXN0bGM0NXh4X2Vycm9yKCJjb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5IGZvciBmaXJtd2FyZSIpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQlzdGxjLT5md19sZW4gPSBmdy0+c2l6ZTsKLQotCXJlbGVhc2VfZmlybXdhcmUoZncpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgc3RsYzQ1eHhfdXBsb2FkX2Zpcm13YXJlKHN0cnVjdCBzdGxjNDV4eCAqc3RsYykKLXsKLQlzdHJ1Y3Qgc19kbWFfcmVncyBkbWFfcmVnczsKLQl1bnNpZ25lZCBsb25nIGZ3X2xlbiwgZndfYWRkcjsKLQlsb25nIF9md19sZW47Ci0JaW50IHJldDsKLQotCXN0bGM0NXh4X2RlYnVnKERFQlVHX0ZVTkMsICIlcyIsIF9fZnVuY19fKTsKLQotCWlmICghc3RsYy0+ZncpIHsKLQkJcmV0ID0gc3RsYzQ1eHhfcmVxdWVzdF9maXJtd2FyZShzdGxjKTsKLQkJaWYgKHJldCA8IDApCi0JCQlyZXR1cm4gcmV0OwotCX0KLQotCS8qIHN0b3AgdGhlIGRldmljZSAqLwotCXN0bGM0NXh4X3dyaXRlMTYoc3RsYywgU1BJX0FEUlNfREVWX0NUUkxfU1RBVCwKLQkJCSBTUElfQ1RSTF9TVEFUX0hPU1RfT1ZFUlJJREUgfCBTUElfQ1RSTF9TVEFUX0hPU1RfUkVTRVQKLQkJCSB8IFNQSV9DVFJMX1NUQVRfU1RBUlRfSEFMVEVEKTsKLQotCW1zbGVlcChUQVJHRVRfQk9PVF9TTEVFUCk7Ci0KLQlzdGxjNDV4eF93cml0ZTE2KHN0bGMsIFNQSV9BRFJTX0RFVl9DVFJMX1NUQVQsCi0JCQkgU1BJX0NUUkxfU1RBVF9IT1NUX09WRVJSSURFCi0JCQkgfCBTUElfQ1RSTF9TVEFUX1NUQVJUX0hBTFRFRCk7Ci0KLQltc2xlZXAoVEFSR0VUX0JPT1RfU0xFRVApOwotCi0JZndfYWRkciA9IEZJUk1XQVJFX0FERFJFU1M7Ci0JZndfbGVuID0gc3RsYy0+ZndfbGVuOwotCi0Jd2hpbGUgKGZ3X2xlbiA+IDApIHsKLQkJX2Z3X2xlbiA9IChmd19sZW4gPiBTUElfTUFYX1BBQ0tFVF9TSVpFKQotCQkJPyBTUElfTUFYX1BBQ0tFVF9TSVpFIDogZndfbGVuOwotCQlkbWFfcmVncy5jbWQgPSBTUElfRE1BX1dSSVRFX0NUUkxfRU5BQkxFOwotCQlkbWFfcmVncy5sZW4gPSBjcHVfdG9fbGUxNihfZndfbGVuKTsKLQkJZG1hX3JlZ3MuYWRkciA9IGNwdV90b19sZTMyKGZ3X2FkZHIpOwotCi0JCWZ3X2xlbiAtPSBfZndfbGVuOwotCQlmd19hZGRyICs9IF9md19sZW47Ci0KLQkJc3RsYzQ1eHhfd3JpdGUxNihzdGxjLCBTUElfQURSU19ETUFfV1JJVEVfQ1RSTCwgZG1hX3JlZ3MuY21kKTsKLQotCQlpZiAoc3RsYzQ1eHhfd2FpdF9iaXQoc3RsYywgU1BJX0FEUlNfRE1BX1dSSVRFX0NUUkwsCi0JCQkJICAgICAgSE9TVF9BTExPV0VELCBIT1NUX0FMTE9XRUQpID09IDApIHsKLQkJCXN0bGM0NXh4X2Vycm9yKCJmd191cGxvYWQgbm90IGFsbG93ZWQgdG8gRE1BIHdyaXRlIik7Ci0JCQlyZXR1cm4gLUVBR0FJTjsKLQkJfQotCi0JCXN0bGM0NXh4X3dyaXRlMTYoc3RsYywgU1BJX0FEUlNfRE1BX1dSSVRFX0xFTiwgZG1hX3JlZ3MubGVuKTsKLQkJc3RsYzQ1eHhfd3JpdGUzMihzdGxjLCBTUElfQURSU19ETUFfV1JJVEVfQkFTRSwgZG1hX3JlZ3MuYWRkcik7Ci0KLQkJc3RsYzQ1eHhfc3BpX3dyaXRlKHN0bGMsIFNQSV9BRFJTX0RNQV9EQVRBLCBzdGxjLT5mdywgX2Z3X2xlbik7Ci0KLQkJLyogRklYTUU6IEkgdGhpbmsgdGhpcyBkb2Vzbid0IHdvcmsgaWYgZmlybXdhcmUgaXMgbGFyZ2UsCi0JCSAqIHRoaXMgbG9vcCBnb2VzIHRvIHNlY29uZCByb3VuZC4gZnctPmRhdGEgaXMgbm90Ci0JCSAqIGluY3JlYXNlZCBhdCBhbGwhICovCi0JfQotCi0JQlVHX09OKGZ3X2xlbiAhPSAwKTsKLQotCS8qIGVuYWJsZSBob3N0IGludGVycnVwdHMgKi8KLQlzdGxjNDV4eF93cml0ZTMyKHN0bGMsIFNQSV9BRFJTX0hPU1RfSU5UX0VOLCBTUElfSE9TVF9JTlRTX0RFRkFVTFQpOwotCi0JLyogYm9vdCB0aGUgZGV2aWNlICovCi0Jc3RsYzQ1eHhfd3JpdGUxNihzdGxjLCBTUElfQURSU19ERVZfQ1RSTF9TVEFULAotCQkJIFNQSV9DVFJMX1NUQVRfSE9TVF9PVkVSUklERSB8IFNQSV9DVFJMX1NUQVRfSE9TVF9SRVNFVAotCQkJIHwgU1BJX0NUUkxfU1RBVF9SQU1fQk9PVCk7Ci0KLQltc2xlZXAoVEFSR0VUX0JPT1RfU0xFRVApOwotCi0Jc3RsYzQ1eHhfd3JpdGUxNihzdGxjLCBTUElfQURSU19ERVZfQ1RSTF9TVEFULAotCQkJIFNQSV9DVFJMX1NUQVRfSE9TVF9PVkVSUklERSB8IFNQSV9DVFJMX1NUQVRfUkFNX0JPT1QpOwotCW1zbGVlcChUQVJHRVRfQk9PVF9TTEVFUCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyogY2FsbGVyIG11c3QgaG9sZCB0eF9sb2NrICovCi1zdGF0aWMgdm9pZCBzdGxjNDV4eF9jaGVja190eHNlbnQoc3RydWN0IHN0bGM0NXh4ICpzdGxjKQotewotCXN0cnVjdCB0eGJ1ZmZlciAqZW50cnksICpuOwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGVudHJ5LCBuLCAmc3RsYy0+dHhfc2VudCwgdHhfbGlzdCkgewotCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBlbnRyeS0+bGlmZXRpbWUpKSB7Ci0JCQlpZiAobmV0X3JhdGVsaW1pdCgpKQotCQkJCXN0bGM0NXh4X3dhcm5pbmcoImZyYW1lIDB4JXggbGlmZXRpbWUgZXhjZWVkZWQiLAotCQkJCQkJIGVudHJ5LT5zdGFydCk7Ci0JCQlsaXN0X2RlbCgmZW50cnktPnR4X2xpc3QpOwotCQkJc2tiX3B1bGwoZW50cnktPnNrYiwgZW50cnktPmhlYWRlcl9sZW4pOwotCQkJaWVlZTgwMjExX3R4X3N0YXR1cyhzdGxjLT5odywgZW50cnktPnNrYik7Ci0JCQlzdGxjNDV4eF90eGJ1ZmZlcl9mcmVlKHN0bGMsIGVudHJ5KTsKLQkJfQotCX0KLX0KLQotc3RhdGljIHZvaWQgc3RsYzQ1eHhfcG93ZXJfb2ZmKHN0cnVjdCBzdGxjNDV4eCAqc3RsYykKLXsKLQlkaXNhYmxlX2lycShncGlvX3RvX2lycShzdGxjNDV4eF9ncGlvX2lycSkpOwotCWdwaW9fc2V0X3ZhbHVlKHN0bGM0NXh4X2dwaW9fcG93ZXIsIDApOwotfQotCi1zdGF0aWMgdm9pZCBzdGxjNDV4eF9wb3dlcl9vbihzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMpCi17Ci0JZ3Bpb19zZXRfdmFsdWUoc3RsYzQ1eHhfZ3Bpb19wb3dlciwgMSk7Ci0JZW5hYmxlX2lycShncGlvX3RvX2lycShzdGxjNDV4eF9ncGlvX2lycSkpOwotCi0JLyoKLQkgKiBuZWVkIHRvIHdhaXQgYSB3aGlsZSBiZWZvcmUgZGV2aWNlIGNhbiBiZSBhY2Nlc3NlZCwgdGhlIGxlbmd0aAotCSAqIGlzIGp1c3QgYSBndWVzcwotCSAqLwotCW1zbGVlcCgxMCk7Ci19Ci0KLS8qIGNhbGxlciBtdXN0IGhvbGQgdHhfbG9jayAqLwotc3RhdGljIHZvaWQgc3RsYzQ1eHhfZmx1c2hfcXVldWVzKHN0cnVjdCBzdGxjNDV4eCAqc3RsYykKLXsKLQlzdHJ1Y3QgdHhidWZmZXIgKmVudHJ5OwotCi0Jd2hpbGUgKCFsaXN0X2VtcHR5KCZzdGxjLT50eF9zZW50KSkgewotCQllbnRyeSA9IGxpc3RfZmlyc3RfZW50cnkoJnN0bGMtPnR4X3NlbnQsCi0JCQkJCSBzdHJ1Y3QgdHhidWZmZXIsIHR4X2xpc3QpOwotCQlsaXN0X2RlbCgmZW50cnktPnR4X2xpc3QpOwotCQlkZXZfa2ZyZWVfc2tiKGVudHJ5LT5za2IpOwotCQlzdGxjNDV4eF90eGJ1ZmZlcl9mcmVlKHN0bGMsIGVudHJ5KTsKLQl9Ci0KLQlXQVJOX09OKCFsaXN0X2VtcHR5KCZzdGxjLT50eF9zZW50KSk7Ci0KLQl3aGlsZSAoIWxpc3RfZW1wdHkoJnN0bGMtPnR4X3BlbmRpbmcpKSB7Ci0JCWVudHJ5ID0gbGlzdF9maXJzdF9lbnRyeSgmc3RsYy0+dHhfcGVuZGluZywKLQkJCQkJIHN0cnVjdCB0eGJ1ZmZlciwgdHhfbGlzdCk7Ci0JCWxpc3RfZGVsKCZlbnRyeS0+dHhfbGlzdCk7Ci0JCWRldl9rZnJlZV9za2IoZW50cnktPnNrYik7Ci0JCXN0bGM0NXh4X3R4YnVmZmVyX2ZyZWUoc3RsYywgZW50cnkpOwotCX0KLQotCVdBUk5fT04oIWxpc3RfZW1wdHkoJnN0bGMtPnR4X3BlbmRpbmcpKTsKLQlXQVJOX09OKCFsaXN0X2VtcHR5KCZzdGxjLT50eGJ1ZmZlcikpOwotfQotCi1zdGF0aWMgdm9pZCBzdGxjNDV4eF93b3JrX3Jlc2V0KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKLXsKLQlzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHN0bGM0NXh4LAotCQkJCQkgICAgIHdvcmtfcmVzZXQpOwotCi0JbXV0ZXhfbG9jaygmc3RsYy0+bXV0ZXgpOwotCi0JaWYgKHN0bGMtPmZ3X3N0YXRlICE9IEZXX1NUQVRFX1JFU0VUKQotCQlnb3RvIG91dDsKLQotCXN0bGM0NXh4X3Bvd2VyX29mZihzdGxjKTsKLQotCW11dGV4X3VubG9jaygmc3RsYy0+bXV0ZXgpOwotCi0JLyogd2FpdCB0aGF0IGFsbCB3b3JrX3N0cnVjdHMgaGF2ZSBmaW5pc2hlZCwgd2UgY2FuJ3QgaG9sZAotCSAqIHN0bGMtPm11dGV4IHRvIGF2b2lkIGRlYWRsb2NrICovCi0JY2FuY2VsX3dvcmtfc3luYygmc3RsYy0+d29yayk7Ci0KLQkvKiBGSVhNRTogZmluZCBvdXQgZ29vZCB2YWx1ZSB0byB3YWl0IGZvciBjaGlwIHBvd2VyIGRvd24gKi8KLQltc2xlZXAoMTAwKTsKLQotCW11dGV4X2xvY2soJnN0bGMtPm11dGV4KTsKLQotCS8qIEZJWE1FOiB3ZSBzaG91bGQgZ3JhY2VmdWxseSBoYW5kbGUgaWYgdGhlIHN0YXRlIGhhcyBjaGFuZ2VkCi0JICogYWZ0ZXIgcmUtYWNxdWlyaW5nIG11dGV4ICovCi0JV0FSTl9PTihzdGxjLT5md19zdGF0ZSAhPSBGV19TVEFURV9SRVNFVCk7Ci0KLQlzcGluX2xvY2tfYmgoJnN0bGMtPnR4X2xvY2spOwotCXN0bGM0NXh4X2ZsdXNoX3F1ZXVlcyhzdGxjKTsKLQlzcGluX3VubG9ja19iaCgmc3RsYy0+dHhfbG9jayk7Ci0KLQlzdGxjLT5md19zdGF0ZSA9IEZXX1NUQVRFX1JFU0VUVElORzsKLQotCXN0bGM0NXh4X3Bvd2VyX29uKHN0bGMpOwotCXN0bGM0NXh4X3VwbG9hZF9maXJtd2FyZShzdGxjKTsKLQotb3V0OgotCW11dGV4X3VubG9jaygmc3RsYy0+bXV0ZXgpOwotfQotCi0vKiBjYWxsZXIgbXVzdCBob2xkIG11dGV4ICovCi1zdGF0aWMgdm9pZCBzdGxjNDV4eF9yZXNldChzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMpCi17Ci0Jc3RsYzQ1eHhfd2FybmluZygicmVzZXR0aW5nIGZpcm13YXJlIik7Ci0Jc3RsYy0+Zndfc3RhdGUgPSBGV19TVEFURV9SRVNFVDsKLQlpZWVlODAyMTFfc3RvcF9xdWV1ZXMoc3RsYy0+aHcpOwotCXF1ZXVlX3dvcmsoc3RsYy0+aHctPndvcmtxdWV1ZSwgJnN0bGMtPndvcmtfcmVzZXQpOwotfQotCi1zdGF0aWMgdm9pZCBzdGxjNDV4eF93b3JrX3R4X3RpbWVvdXQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQotewotCXN0cnVjdCBzdGxjNDV4eCAqc3RsYyA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgc3RsYzQ1eHgsCi0JCQkJCSAgICAgd29ya190eF90aW1lb3V0LndvcmspOwotCi0Jc3RsYzQ1eHhfd2FybmluZygidHggdGltZW91dCIpOwotCi0JbXV0ZXhfbG9jaygmc3RsYy0+bXV0ZXgpOwotCi0JaWYgKHN0bGMtPmZ3X3N0YXRlICE9IEZXX1NUQVRFX1JFQURZKQotCQlnb3RvIG91dDsKLQotCXN0bGM0NXh4X3Jlc2V0KHN0bGMpOwotCi1vdXQ6Ci0JbXV0ZXhfdW5sb2NrKCZzdGxjLT5tdXRleCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHN0bGM0NXh4X2ludF9hY2soc3RydWN0IHN0bGM0NXh4ICpzdGxjLCB1MzIgdmFsKQotewotCXN0bGM0NXh4X2RlYnVnKERFQlVHX0ZVTkMsICIlcyIsIF9fZnVuY19fKTsKLQotCXN0bGM0NXh4X3dyaXRlMzIoc3RsYywgU1BJX0FEUlNfSE9TVF9JTlRfQUNLLCB2YWwpOwotfQotCi1zdGF0aWMgdm9pZCBzdGxjNDV4eF93YWtldXAoc3RydWN0IHN0bGM0NXh4ICpzdGxjKQotewotCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKLQl1MzIgaW50czsKLQotCXN0bGM0NXh4X2RlYnVnKERFQlVHX0ZVTkMsICIlcyIsIF9fZnVuY19fKTsKLQotCS8qIHdha2UgdGhlIGNoaXAgKi8KLQlzdGxjNDV4eF93cml0ZTMyKHN0bGMsIFNQSV9BRFJTX0FSTV9JTlRFUlJVUFRTLCBTUElfVEFSR0VUX0lOVF9XQUtFVVApOwotCi0JLyogQW5kIHdhaXQgZm9yIHRoZSBSRUFEWSBpbnRlcnJ1cHQgKi8KLQl0aW1lb3V0ID0gamlmZmllcyArIEhaOwotCi0JaW50cyA9IHN0bGM0NXh4X3JlYWQzMihzdGxjLCBTUElfQURSU19IT1NUX0lOVEVSUlVQVFMpOwotCXdoaWxlICghKGludHMgJiBTUElfSE9TVF9JTlRfUkVBRFkpKSB7Ci0JCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQpKQotCQkJCWdvdG8gb3V0OwotCQlpbnRzID0gc3RsYzQ1eHhfcmVhZDMyKHN0bGMsIFNQSV9BRFJTX0hPU1RfSU5URVJSVVBUUyk7Ci0JfQotCi0Jc3RsYzQ1eHhfaW50X2FjayhzdGxjLCBTUElfSE9TVF9JTlRfUkVBRFkpOwotCi1vdXQ6Ci0JcmV0dXJuOwotfQotCi1zdGF0aWMgdm9pZCBzdGxjNDV4eF9zbGVlcChzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMpCi17Ci0Jc3RsYzQ1eHhfZGVidWcoREVCVUdfRlVOQywgIiVzIiwgX19mdW5jX18pOwotCi0Jc3RsYzQ1eHhfd3JpdGUzMihzdGxjLCBTUElfQURSU19BUk1fSU5URVJSVVBUUywgU1BJX1RBUkdFVF9JTlRfU0xFRVApOwotfQotCi1zdGF0aWMgdm9pZCBzdGxjNDV4eF9pbnRfcmVhZHkoc3RydWN0IHN0bGM0NXh4ICpzdGxjKQotewotCXN0bGM0NXh4X2RlYnVnKERFQlVHX0ZVTkMsICIlcyIsIF9fZnVuY19fKTsKLQotCXN0bGM0NXh4X3dyaXRlMzIoc3RsYywgU1BJX0FEUlNfSE9TVF9JTlRfRU4sCi0JCQkgU1BJX0hPU1RfSU5UX1VQREFURSB8IFNQSV9IT1NUX0lOVF9TV19VUERBVEUpOwotCi0Jc3dpdGNoIChzdGxjLT5md19zdGF0ZSkgewotCWNhc2UgRldfU1RBVEVfQk9PVElORzoKLQkJc3RsYy0+Zndfc3RhdGUgPSBGV19TVEFURV9SRUFEWTsKLQkJY29tcGxldGUoJnN0bGMtPmZ3X2NvbXApOwotCQlicmVhazsKLQljYXNlIEZXX1NUQVRFX1JFU0VUVElORzoKLQkJc3RsYy0+Zndfc3RhdGUgPSBGV19TVEFURV9SRUFEWTsKLQotCQlzdGxjNDV4eF90eF9zY2FuKHN0bGMpOwotCQlzdGxjNDV4eF90eF9zZXR1cChzdGxjKTsKLQkJc3RsYzQ1eHhfdHhfZWRjZihzdGxjKTsKLQotCQlpZWVlODAyMTFfd2FrZV9xdWV1ZXMoc3RsYy0+aHcpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlicmVhazsKLQl9Ci19Ci0KLXN0YXRpYyBpbnQgc3RsYzQ1eHhfcnhfdHhhY2soc3RydWN0IHN0bGM0NXh4ICpzdGxjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbzsKLQlzdHJ1Y3Qgc19sbV9jb250cm9sICpjb250cm9sOwotCXN0cnVjdCBzX2xtb190eCAqdHg7Ci0Jc3RydWN0IHR4YnVmZmVyICplbnRyeTsKLQlpbnQgZm91bmQgPSAwOwotCi0Jc3RsYzQ1eHhfZGVidWcoREVCVUdfRlVOQywgIiVzIiwgX19mdW5jX18pOwotCi0JY29udHJvbCA9IChzdHJ1Y3Qgc19sbV9jb250cm9sICopIHNrYi0+ZGF0YTsKLQl0eCA9IChzdHJ1Y3Qgc19sbW9fdHggKikgKGNvbnRyb2wgKyAxKTsKLQotCWlmIChsaXN0X2VtcHR5KCZzdGxjLT50eF9zZW50KSkgewotCQlpZiAobmV0X3JhdGVsaW1pdCgpKQotCQkJc3RsYzQ1eHhfd2FybmluZygibm8gZnJhbWVzIHdhaXRpbmcgZm9yICIKLQkJCQkJICJhY2tub3dsZWRnZW1lbnQiKTsKLQkJcmV0dXJuIC0xOwotCX0KLQotCWxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksICZzdGxjLT50eF9zZW50LCB0eF9saXN0KSB7Ci0JCWlmIChjb250cm9sLT5oYW5kbGUgPT0gZW50cnktPmhhbmRsZSkgewotCQkJZm91bmQgPSAxOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQlpZiAoIWZvdW5kKSB7Ci0JCWlmIChuZXRfcmF0ZWxpbWl0KCkpCi0JCQlzdGxjNDV4eF93YXJuaW5nKCJjb3VsZG4ndCBmaW5kIGZyYW1lIGZvciB0eCBhY2sgMHgleCIsCi0JCQkJCSBjb250cm9sLT5oYW5kbGUpOwotCQlyZXR1cm4gLTE7Ci0JfQotCi0Jc3RsYzQ1eHhfZGVidWcoREVCVUdfVFgsICJUWCBBQ0sgMHgleCIsIGVudHJ5LT5oYW5kbGUpOwotCi0JaWYgKGVudHJ5LT5zdGF0dXNfbmVlZGVkKSB7Ci0JCWluZm8gPSBJRUVFODAyMTFfU0tCX0NCKGVudHJ5LT5za2IpOwotCi0JCWlmICghKHR4LT5mbGFncyAmIExNX1RYX0ZBSUxFRCkpIHsKLQkJCS8qIGZyYW1lIHdhcyBhY2tlZCAqLwotCQkJaW5mby0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX1NUQVRfQUNLOwotCQkJaW5mby0+c3RhdHVzLmFja19zaWduYWwgPSB0eC0+cmNwaSAvIDIgLSAxMTA7Ci0JCX0KLQotCQlza2JfcHVsbChlbnRyeS0+c2tiLCBlbnRyeS0+aGVhZGVyX2xlbik7Ci0KLQkJaWVlZTgwMjExX3R4X3N0YXR1cyhzdGxjLT5odywgZW50cnktPnNrYik7Ci0JfQotCi0JbGlzdF9kZWwoJmVudHJ5LT50eF9saXN0KTsKLQotCXN0bGM0NXh4X2NoZWNrX3R4c2VudChzdGxjKTsKLQlpZiAobGlzdF9lbXB0eSgmc3RsYy0+dHhfc2VudCkpCi0JCS8qIHRoZXJlIGFyZSBubyBwZW5kaW5nIGZyYW1lcywgd2UgY2FuIHN0b3AgdGhlIHR4IHRpbWVvdXQKLQkJICogdGltZXIgKi8KLQkJY2FuY2VsX2RlbGF5ZWRfd29yaygmc3RsYy0+d29ya190eF90aW1lb3V0KTsKLQotCXNwaW5fbG9ja19iaCgmc3RsYy0+dHhfbG9jayk7Ci0KLQlzdGxjNDV4eF90eGJ1ZmZlcl9mcmVlKHN0bGMsIGVudHJ5KTsKLQotCWlmIChzdGxjLT50eF9xdWV1ZV9zdG9wcGVkICYmCi0JICAgIHN0bGM0NXh4X3R4YnVmZmVyX2ZpbmQoc3RsYywgTUFYX0ZSQU1FX0xFTikgIT0gLTEpIHsKLQkJc3RsYzQ1eHhfZGVidWcoREVCVUdfUVVFVUUsICJyb29tIGluIHR4IGJ1ZmZlciwgd2FraW5nIHF1ZXVlcyIpOwotCQlpZWVlODAyMTFfd2FrZV9xdWV1ZXMoc3RsYy0+aHcpOwotCQlzdGxjLT50eF9xdWV1ZV9zdG9wcGVkID0gMDsKLQl9Ci0KLQlzcGluX3VubG9ja19iaCgmc3RsYy0+dHhfbG9jayk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBzdGxjNDV4eF9yeF9jb250cm9sKHN0cnVjdCBzdGxjNDV4eCAqc3RsYywgc3RydWN0IHNrX2J1ZmYgKnNrYikKLXsKLQlzdHJ1Y3Qgc19sbV9jb250cm9sICpjb250cm9sOwotCWludCByZXQgPSAwOwotCi0Jc3RsYzQ1eHhfZGVidWcoREVCVUdfRlVOQywgIiVzIiwgX19mdW5jX18pOwotCi0JY29udHJvbCA9IChzdHJ1Y3Qgc19sbV9jb250cm9sICopIHNrYi0+ZGF0YTsKLQotCXN3aXRjaCAoY29udHJvbC0+b2lkKSB7Ci0JY2FzZSBMTV9PSURfVFg6Ci0JCXJldCA9IHN0bGM0NXh4X3J4X3R4YWNrKHN0bGMsIHNrYik7Ci0JCWJyZWFrOwotCWNhc2UgTE1fT0lEX1NFVFVQOgotCWNhc2UgTE1fT0lEX1NDQU46Ci0JY2FzZSBMTV9PSURfVFJBUDoKLQljYXNlIExNX09JRF9FRENGOgotCWNhc2UgTE1fT0lEX0tFWUNBQ0hFOgotCWNhc2UgTE1fT0lEX1BTTToKLQljYXNlIExNX09JRF9TVEFUUzoKLQljYXNlIExNX09JRF9MRUQ6Ci0JZGVmYXVsdDoKLQkJc3RsYzQ1eHhfd2FybmluZygidW5oYW5kbGVkIHJ4IGNvbnRyb2wgb2lkICVkXG4iLAotCQkJCSBjb250cm9sLT5vaWQpOwotCQlicmVhazsKLQl9Ci0KLQlkZXZfa2ZyZWVfc2tiKHNrYik7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi0vKiBjb3BpZWQgZnJvbSBtYWM4MDIxMSAqLwotc3RhdGljIHZvaWQgc3RsYzQ1eHhfcGFyc2VfZWxlbXModTggKnN0YXJ0LCBzaXplX3QgbGVuLAotCQkJCSBzdHJ1Y3Qgc3RsYzQ1eHhfaWVfdGltICoqdGltLAotCQkJCSBzaXplX3QgKnRpbV9sZW4pCi17Ci0Jc2l6ZV90IGxlZnQgPSBsZW47Ci0JdTggKnBvcyA9IHN0YXJ0OwotCi0Jd2hpbGUgKGxlZnQgPj0gMikgewotCQl1OCBpZCwgZWxlbjsKLQotCQlpZCA9ICpwb3MrKzsKLQkJZWxlbiA9ICpwb3MrKzsKLQkJbGVmdCAtPSAyOwotCi0JCWlmIChlbGVuID4gbGVmdCkKLQkJCXJldHVybjsKLQotCQlzd2l0Y2ggKGlkKSB7Ci0JCWNhc2UgV0xBTl9FSURfVElNOgotCQkJKnRpbSA9IChzdHJ1Y3Qgc3RsYzQ1eHhfaWVfdGltICopIHBvczsKLQkJCSp0aW1fbGVuID0gZWxlbjsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJYnJlYWs7Ci0JCX0KLQotCQlsZWZ0IC09IGVsZW47Ci0JCXBvcyArPSBlbGVuOwotCX0KLX0KLQotLyoKLSAqIG1hYzgwMjExIGRvZXNuJ3QgaGF2ZSBzdXBwb3J0IGZvciBhc2tpbmcgZnJhbWVzIHdpdGggUFMtUG9sbCwgc28gbGV0J3MKLSAqIGltcGxlbWVudCBpbiB0aGUgZHJpdmVyIGZvciBub3cuIFdlIGhhdmUgdG8gYWRkIHN1cHBvcnQgdG8gbWFjODAyMTEKLSAqIGxhdGVyLgotICovCi1zdGF0aWMgaW50IHN0bGM0NXh4X2NoZWNrX21vcmVfZGF0YShzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMsIHN0cnVjdCBza19idWZmICpza2IpCi17Ci0Jc3RydWN0IHNfbG1fZGF0YV9pbiAqZGF0YSA9IChzdHJ1Y3Qgc19sbV9kYXRhX2luICopIHNrYi0+ZGF0YTsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOwotCXNpemVfdCBsZW47Ci0JdTE2IGZjOwotCi0JaGRyID0gKHZvaWQgKikgc2tiLT5kYXRhICsgc2l6ZW9mKCpkYXRhKTsKLQlsZW4gPSBza2ItPmxlbiAtIHNpemVvZigqZGF0YSk7Ci0KLQkvKiBtaW5pbXVtIGZyYW1lIGxlbmd0aCBpcyB0aGUgbnVsbCBmcmFtZSBsZW5ndGggMjQgYnl0ZXMgKi8KLQlpZiAobGVuIDwgMjQpIHsKLQkJc3RsYzQ1eHhfd2FybmluZygiaW52YWxpZCBmcmFtZSBsZW5ndGggd2hlbiBjaGVja2luZyBmb3IgIgotCQkJCSAibW9yZSBkYXRhIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWZjID0gbGUxNl90b19jcHUoaGRyLT5mcmFtZV9jb250cm9sKTsKLQlpZiAoIShmYyAmIElFRUU4MDIxMV9GQ1RMX0ZST01EUykpCi0JCS8qIHRoaXMgaXMgbm90IGZyb20gRFMgKi8KLQkJcmV0dXJuIDA7Ci0KLQlpZiAoY29tcGFyZV9ldGhlcl9hZGRyKGhkci0+YWRkcjEsIHN0bGMtPm1hY19hZGRyKSAhPSAwKQotCQkvKiB0aGUgZnJhbWUgd2FzIG5vdCBmb3IgdXMgKi8KLQkJcmV0dXJuIDA7Ci0KLQlpZiAoIShmYyAmIElFRUU4MDIxMV9GQ1RMX01PUkVEQVRBKSkgewotCQkvKiBBUCBoYXMgbm8gbW9yZSBmcmFtZXMgYnVmZmVyZWQgZm9yIHVzICovCi0JCXN0bGM0NXh4X2RlYnVnKERFQlVHX1BTTSwgImFsbCBidWZmZXJlZCBmcmFtZXMgcmV0cmlldmVkIik7Ci0JCXN0bGMtPnBzcG9sbGluZyA9IGZhbHNlOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQkvKiBNT1JFREFUQSBiaXQgaXMgc2V0LCBsZXQncyBhc2sgZm9yIGEgbmV3IGZyYW1lIGZyb20gdGhlIEFQICovCi0Jc3RsYzQ1eHhfdHhfcHNwb2xsKHN0bGMsIHN0bGMtPnBzbSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIG1hYzgwMjExIGNhbm5vdCByZWFkIFRJTSBmcm9tIGJlYWNvbnMsIHNvIGxldCdzIGFkZCBhIGhhY2sgdG8gdGhlCi0gKiBkcml2ZXIuIFdlIGhhdmUgdG8gYWRkIHN1cHBvcnQgdG8gbWFjODAyMTEgbGF0ZXIuCi0gKi8KLXN0YXRpYyBpbnQgc3RsYzQ1eHhfcnhfZGF0YV9iZWFjb24oc3RydWN0IHN0bGM0NXh4ICpzdGxjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCXN0cnVjdCBzX2xtX2RhdGFfaW4gKmRhdGEgPSAoc3RydWN0IHNfbG1fZGF0YV9pbiAqKSBza2ItPmRhdGE7Ci0Jc2l6ZV90IGxlbiA9IHNrYi0+bGVuLCB0aW1fbGVuID0gMCwgYmFzZWxlbiwgcHZibWFwX2xlbjsKLQlzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQ7Ci0Jc3RydWN0IHN0bGM0NXh4X2llX3RpbSAqdGltID0gTlVMTDsKLQlpbnQgYm1hcF9vZmZzZXQsIGluZGV4LCBhaWRfYml0OwotCi0JbWdtdCA9ICh2b2lkICopIHNrYi0+ZGF0YSArIHNpemVvZigqZGF0YSk7Ci0KLQliYXNlbGVuID0gKHU4ICopIG1nbXQtPnUuYmVhY29uLnZhcmlhYmxlIC0gKHU4ICopIG1nbXQ7Ci0JaWYgKGJhc2VsZW4gPiBsZW4pIHsKLQkJc3RsYzQ1eHhfd2FybmluZygiaW52YWxpZCBiYXNlbGVuIGluIGJlYWNvbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlzdGxjNDV4eF9wYXJzZV9lbGVtcyhtZ210LT51LmJlYWNvbi52YXJpYWJsZSwgbGVuIC0gYmFzZWxlbiwgJnRpbSwKLQkJCSAgICAgJnRpbV9sZW4pOwotCi0JaWYgKCF0aW0pIHsKLQkJc3RsYzQ1eHhfd2FybmluZygiZGlkbid0IGZpbmQgdGltIGZyb20gYSBiZWFjb24iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JYm1hcF9vZmZzZXQgPSB0aW0tPmJtYXBfY29udHJvbCAmIDB4ZmU7Ci0JaW5kZXggPSBzdGxjLT5haWQgLyA4IC0gYm1hcF9vZmZzZXQ7Ci0KLQlwdmJtYXBfbGVuID0gdGltX2xlbiAtIDM7Ci0JaWYgKGluZGV4ID4gcHZibWFwX2xlbikKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlhaWRfYml0ID0gISEodGltLT5wdmJtYXBbaW5kZXhdICYgKDEgPDwgc3RsYy0+YWlkICUgOCkpOwotCi0Jc3RsYzQ1eHhfZGVidWcoREVCVUdfUFNNLCAiZmMgMHgleCBkdXJhdGlvbiAlZCBzZXEgJWQgZHRpbSAldSAiCi0JCSAgICAgICAiYm1hcF9jb250cm9sIDB4JXggYWlkX2JpdCAlZCIsCi0JCSAgICAgICBtZ210LT5mcmFtZV9jb250cm9sLCBtZ210LT5kdXJhdGlvbiwgbWdtdC0+c2VxX2N0cmwgPj4gNCwKLQkJICAgICAgIHRpbS0+ZHRpbV9jb3VudCwgdGltLT5ibWFwX2NvbnRyb2wsIGFpZF9iaXQpOwotCi0JaWYgKCFhaWRfYml0KQotCQlyZXR1cm4gMDsKLQotCXN0bGMtPnBzcG9sbGluZyA9IHRydWU7Ci0Jc3RsYzQ1eHhfdHhfcHNwb2xsKHN0bGMsIHN0bGMtPnBzbSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBzdGxjNDV4eF9yeF9kYXRhKHN0cnVjdCBzdGxjNDV4eCAqc3RsYywgc3RydWN0IHNrX2J1ZmYgKnNrYikKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyBzdGF0dXM7Ci0Jc3RydWN0IHNfbG1fZGF0YV9pbiAqZGF0YSA9IChzdHJ1Y3Qgc19sbV9kYXRhX2luICopIHNrYi0+ZGF0YTsKLQlpbnQgYWxpZ24gPSAwOwotCXU4ICpwLCBhbGlnbl9sZW47Ci0JdTE2IGxlbjsKLQotCXN0bGM0NXh4X2RlYnVnKERFQlVHX0ZVTkMsICIlcyIsIF9fZnVuY19fKTsKLQotCWlmIChzdGxjLT5wc20pIHsKLQkJaWYgKGRhdGEtPmZsYWdzICYgTE1fSU5fQkVBQ09OKQotCQkJc3RsYzQ1eHhfcnhfZGF0YV9iZWFjb24oc3RsYywgc2tiKTsKLQkJZWxzZSBpZiAoc3RsYy0+cHNwb2xsaW5nICYmIChkYXRhLT5mbGFncyAmIExNX0lOX0RBVEEpKQotCQkJc3RsYzQ1eHhfY2hlY2tfbW9yZV9kYXRhKHN0bGMsIHNrYik7Ci0JfQotCi0JbWVtc2V0KCZzdGF0dXMsIDAsIHNpemVvZihzdGF0dXMpKTsKLQotCXN0YXR1cy5mcmVxID0gZGF0YS0+ZnJlcXVlbmN5OwotCXN0YXR1cy5zaWduYWwgPSBkYXRhLT5yY3BpIC8gMiAtIDExMDsKLQotCS8qIGxldCdzIGFzc3VtZSB0aGF0IG1heGltdW0gcmNwaSB2YWx1ZSBpcyAxNDAgKD0gMzUgZEJtKSAqLwotCXN0YXR1cy5xdWFsID0gZGF0YS0+cmNwaSAqIDEwMCAvIDE0MDsKLQotCXN0YXR1cy5iYW5kID0gSUVFRTgwMjExX0JBTkRfMkdIWjsKLQotCS8qCi0JICogRklYTUU6IHRoaXMgZ2l2ZXMgd2FybmluZyBmcm9tIF9faWVlZTgwMjExX3J4KCkKLQkgKgotCSAqIHN0YXR1cy5yYXRlX2lkeCA9IGRhdGEtPnJhdGU7Ci0JICovCi0KLQlsZW4gPSBkYXRhLT5sZW5ndGg7Ci0KLQlpZiAoZGF0YS0+ZmxhZ3MgJiBMTV9GTEFHX0FMSUdOKQotCQlhbGlnbiA9IDE7Ci0KLQlza2JfcHVsbChza2IsIHNpemVvZigqZGF0YSkpOwotCi0JaWYgKGFsaWduKSB7Ci0JCXAgPSBza2ItPmRhdGE7Ci0JCWFsaWduX2xlbiA9ICpwOwotCQlza2JfcHVsbChza2IsIGFsaWduX2xlbik7Ci0JfQotCi0Jc2tiX3RyaW0oc2tiLCBsZW4pOwotCi0Jc3RsYzQ1eHhfZGVidWcoREVCVUdfUlgsICJyeCBkYXRhIDB4JXAgJWQgQiIsIHNrYi0+ZGF0YSwgc2tiLT5sZW4pOwotCXN0bGM0NXh4X2R1bXAoREVCVUdfUlhfQ09OVEVOVCwgc2tiLT5kYXRhLCBza2ItPmxlbik7Ci0KLQltZW1jcHkoSUVFRTgwMjExX1NLQl9SWENCKHNrYiksICZzdGF0dXMsIHNpemVvZihzdGF0dXMpKTsKLQlpZWVlODAyMTFfcngoc3RsYy0+aHcsIHNrYik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotCi0KLXN0YXRpYyBpbnQgc3RsYzQ1eHhfcngoc3RydWN0IHN0bGM0NXh4ICpzdGxjKQotewotCXN0cnVjdCBzX2xtX2NvbnRyb2wgKmNvbnRyb2w7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQlpbnQgcmV0OwotCXUxNiBsZW47Ci0KLQlzdGxjNDV4eF9kZWJ1ZyhERUJVR19GVU5DLCAiJXMiLCBfX2Z1bmNfXyk7Ci0KLQlzdGxjNDV4eF93YWtldXAoc3RsYyk7Ci0KLQkvKiBkdW1teSByZWFkIHRvIGZsdXNoIFNQSSBETUEgY29udHJvbGxlciBidWcgKi8KLQlzdGxjNDV4eF9yZWFkMTYoc3RsYywgU1BJX0FEUlNfR0VOX1BVUlBfMSk7Ci0KLQlsZW4gPSBzdGxjNDV4eF9yZWFkMTYoc3RsYywgU1BJX0FEUlNfRE1BX0RBVEEpOwotCi0JaWYgKGxlbiA9PSAwKSB7Ci0JCXN0bGM0NXh4X3dhcm5pbmcoInJ4IHJlcXVlc3Qgb2YgemVybyBieXRlcyIpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlza2IgPSBkZXZfYWxsb2Nfc2tiKGxlbik7Ci0JaWYgKCFza2IpIHsKLQkJc3RsYzQ1eHhfd2FybmluZygiY291bGQgbm90IGFsbG9jIHNrYiIpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlzdGxjNDV4eF9zcGlfcmVhZChzdGxjLCBTUElfQURSU19ETUFfREFUQSwgc2tiX3B1dChza2IsIGxlbiksIGxlbik7Ci0KLQlzdGxjNDV4eF9zbGVlcChzdGxjKTsKLQotCXN0bGM0NXh4X2RlYnVnKERFQlVHX1JYLCAicnggZnJhbWUgMHglcCAlZCBCIiwgc2tiLT5kYXRhLCBza2ItPmxlbik7Ci0Jc3RsYzQ1eHhfZHVtcChERUJVR19SWF9DT05URU5ULCBza2ItPmRhdGEsIHNrYi0+bGVuKTsKLQotCWNvbnRyb2wgPSAoc3RydWN0IHNfbG1fY29udHJvbCAqKSBza2ItPmRhdGE7Ci0KLQlpZiAoY29udHJvbC0+ZmxhZ3MgJiBMTV9GTEFHX0NPTlRST0wpCi0JCXJldCA9IHN0bGM0NXh4X3J4X2NvbnRyb2woc3RsYywgc2tiKTsKLQllbHNlCi0JCXJldCA9IHN0bGM0NXh4X3J4X2RhdGEoc3RsYywgc2tiKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLQotc3RhdGljIGlycXJldHVybl90IHN0bGM0NXh4X2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpjb25maWcpCi17Ci0Jc3RydWN0IHNwaV9kZXZpY2UgKnNwaSA9IGNvbmZpZzsKLQlzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMgPSBkZXZfZ2V0X2RydmRhdGEoJnNwaS0+ZGV2KTsKLQotCXN0bGM0NXh4X2RlYnVnKERFQlVHX0lSUSwgIklSUSIpOwotCi0JcXVldWVfd29yayhzdGxjLT5ody0+d29ya3F1ZXVlLCAmc3RsYy0+d29yayk7Ci0KLQlyZXR1cm4gSVJRX0hBTkRMRUQ7Ci19Ci0KLXN0YXRpYyBpbnQgc3RsYzQ1eHhfdHhfZnJhbWUoc3RydWN0IHN0bGM0NXh4ICpzdGxjLCB1MzIgYWRkcmVzcywKLQkJCSAgICAgdm9pZCAqYnVmLCBzaXplX3QgbGVuKQotewotCXN0cnVjdCBzX2RtYV9yZWdzIGRtYV9yZWdzOwotCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKLQlpbnQgcmV0ID0gMDsKLQl1MzIgaW50czsKLQotCXN0bGMtPnR4X2ZyYW1lcysrOwotCi0Jc3RsYzQ1eHhfZGVidWcoREVCVUdfRlVOQywgIiVzIiwgX19mdW5jX18pOwotCi0Jc3RsYzQ1eHhfZGVidWcoREVCVUdfVFgsICJ0eCBmcmFtZSAweCVwICV6dSBCIiwgYnVmLCBsZW4pOwotCXN0bGM0NXh4X2R1bXAoREVCVUdfVFhfQ09OVEVOVCwgYnVmLCBsZW4pOwotCi0Jc3RsYzQ1eHhfd2FrZXVwKHN0bGMpOwotCi0JZG1hX3JlZ3MuY21kICA9IFNQSV9ETUFfV1JJVEVfQ1RSTF9FTkFCTEU7Ci0JZG1hX3JlZ3MubGVuICA9IGNwdV90b19sZTE2KGxlbik7Ci0JZG1hX3JlZ3MuYWRkciA9IGNwdV90b19sZTMyKGFkZHJlc3MpOwotCi0Jc3RsYzQ1eHhfc3BpX3dyaXRlKHN0bGMsIFNQSV9BRFJTX0RNQV9XUklURV9DVFJMLCAmZG1hX3JlZ3MsCi0JCQkgICBzaXplb2YoZG1hX3JlZ3MpKTsKLQotCXN0bGM0NXh4X3NwaV93cml0ZShzdGxjLCBTUElfQURSU19ETUFfREFUQSwgYnVmLCBsZW4pOwotCi0JdGltZW91dCA9IGppZmZpZXMgKyAyICogSFo7Ci0JaW50cyA9IHN0bGM0NXh4X3JlYWQzMihzdGxjLCBTUElfQURSU19IT1NUX0lOVEVSUlVQVFMpOwotCXdoaWxlICghKGludHMgJiBTUElfSE9TVF9JTlRfV1JfUkVBRFkpKSB7Ci0JCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQpKSB7Ci0JCQlzdGxjNDV4eF93YXJuaW5nKCJXUl9SRUFEWSB0aW1lb3V0Iik7Ci0JCQlyZXQgPSAtMTsKLQkJCWdvdG8gb3V0OwotCQl9Ci0JCWludHMgPSBzdGxjNDV4eF9yZWFkMzIoc3RsYywgU1BJX0FEUlNfSE9TVF9JTlRFUlJVUFRTKTsKLQl9Ci0KLQlzdGxjNDV4eF9pbnRfYWNrKHN0bGMsIFNQSV9IT1NUX0lOVF9XUl9SRUFEWSk7Ci0KLQlzdGxjNDV4eF9zbGVlcChzdGxjKTsKLQotb3V0OgotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgc3RsYzQ1eHhfd3FfdHgoc3RydWN0IHN0bGM0NXh4ICpzdGxjKQotewotCXN0cnVjdCB0eGJ1ZmZlciAqZW50cnk7Ci0JaW50IHJldCA9IDA7Ci0KLQlzcGluX2xvY2tfYmgoJnN0bGMtPnR4X2xvY2spOwotCi0Jd2hpbGUgKCFsaXN0X2VtcHR5KCZzdGxjLT50eF9wZW5kaW5nKSkgewotCQllbnRyeSA9IGxpc3RfZW50cnkoc3RsYy0+dHhfcGVuZGluZy5uZXh0LAotCQkJCSAgIHN0cnVjdCB0eGJ1ZmZlciwgdHhfbGlzdCk7Ci0KLQkJbGlzdF9kZWxfaW5pdCgmZW50cnktPnR4X2xpc3QpOwotCi0JCXNwaW5fdW5sb2NrX2JoKCZzdGxjLT50eF9sb2NrKTsKLQotCQlyZXQgPSBzdGxjNDV4eF90eF9mcmFtZShzdGxjLCBlbnRyeS0+ZnJhbWVfc3RhcnQsCi0JCQkJCWVudHJ5LT5za2ItPmRhdGEsIGVudHJ5LT5za2ItPmxlbik7Ci0KLQkJc3Bpbl9sb2NrX2JoKCZzdGxjLT50eF9sb2NrKTsKLQotCQlpZiAocmV0IDwgMCkgewotCQkJLyogZnJhbWUgdHJhbnNmZXIgdG8gZmlybXdhcmUgYnVmZmVyIGZhaWxlZCAqLwotCQkJLyogRklYTUU6IHJlcG9ydCB0aGlzIHRvIG1hYzgwMjExICovCi0JCQlkZXZfa2ZyZWVfc2tiKGVudHJ5LT5za2IpOwotCQkJc3RsYzQ1eHhfdHhidWZmZXJfZnJlZShzdGxjLCBlbnRyeSk7Ci0JCQlnb3RvIG91dDsKLQkJfQotCi0JCWxpc3RfYWRkKCZlbnRyeS0+dHhfbGlzdCwgJnN0bGMtPnR4X3NlbnQpOwotCQlxdWV1ZV9kZWxheWVkX3dvcmsoc3RsYy0+aHctPndvcmtxdWV1ZSwKLQkJCQkgICAmc3RsYy0+d29ya190eF90aW1lb3V0LAotCQkJCSAgIG1zZWNzX3RvX2ppZmZpZXMoVFhfVElNRU9VVCkpOwotCX0KLQotb3V0OgotCXNwaW5fdW5sb2NrX2JoKCZzdGxjLT50eF9sb2NrKTsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdm9pZCBzdGxjNDV4eF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKLXsKLQlzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHN0bGM0NXh4LCB3b3JrKTsKLQl1MzIgaW50czsKLQlpbnQgcmV0OwotCi0Jc3RsYzQ1eHhfZGVidWcoREVCVUdfRlVOQywgIiVzIiwgX19mdW5jX18pOwotCi0JbXV0ZXhfbG9jaygmc3RsYy0+bXV0ZXgpOwotCi0JaWYgKHN0bGMtPmZ3X3N0YXRlID09IEZXX1NUQVRFX09GRiAmJgotCSAgICBzdGxjLT5md19zdGF0ZSA9PSBGV19TVEFURV9SRVNFVCkKLQkJZ290byBvdXQ7Ci0KLQlpbnRzID0gc3RsYzQ1eHhfcmVhZDMyKHN0bGMsIFNQSV9BRFJTX0hPU1RfSU5URVJSVVBUUyk7Ci0Jc3RsYzQ1eHhfZGVidWcoREVCVUdfQkgsICJiZWdpbiBob3N0X2ludHMgMHglMDh4IiwgaW50cyk7Ci0KLQlpZiAoaW50cyAmIFNQSV9IT1NUX0lOVF9SRUFEWSkgewotCQlzdGxjNDV4eF9pbnRfcmVhZHkoc3RsYyk7Ci0JCXN0bGM0NXh4X2ludF9hY2soc3RsYywgU1BJX0hPU1RfSU5UX1JFQURZKTsKLQl9Ci0KLQlpZiAoc3RsYy0+Zndfc3RhdGUgIT0gRldfU1RBVEVfUkVBRFkpCi0JCWdvdG8gb3V0OwotCi0JaWYgKGludHMgJiBTUElfSE9TVF9JTlRfVVBEQVRFKSB7Ci0JCXN0bGM0NXh4X2ludF9hY2soc3RsYywgU1BJX0hPU1RfSU5UX1VQREFURSk7Ci0JCXJldCA9IHN0bGM0NXh4X3J4KHN0bGMpOwotCQlpZiAocmV0IDwgMCkgewotCQkJc3RsYzQ1eHhfcmVzZXQoc3RsYyk7Ci0JCQlnb3RvIG91dDsKLQkJfQotCX0KLQlpZiAoaW50cyAmIFNQSV9IT1NUX0lOVF9TV19VUERBVEUpIHsKLQkJc3RsYzQ1eHhfaW50X2FjayhzdGxjLCBTUElfSE9TVF9JTlRfU1dfVVBEQVRFKTsKLQkJcmV0ID0gc3RsYzQ1eHhfcngoc3RsYyk7Ci0JCWlmIChyZXQgPCAwKSB7Ci0JCQlzdGxjNDV4eF9yZXNldChzdGxjKTsKLQkJCWdvdG8gb3V0OwotCQl9Ci0JfQotCi0JcmV0ID0gc3RsYzQ1eHhfd3FfdHgoc3RsYyk7Ci0JaWYgKHJldCA8IDApIHsKLQkJc3RsYzQ1eHhfcmVzZXQoc3RsYyk7Ci0JCWdvdG8gb3V0OwotCX0KLQotCWludHMgPSBzdGxjNDV4eF9yZWFkMzIoc3RsYywgU1BJX0FEUlNfSE9TVF9JTlRFUlJVUFRTKTsKLQlzdGxjNDV4eF9kZWJ1ZyhERUJVR19CSCwgImVuZCBob3N0X2ludHMgMHglMDh4IiwgaW50cyk7Ci0KLW91dDoKLQltdXRleF91bmxvY2soJnN0bGMtPm11dGV4KTsKLX0KLQotc3RhdGljIHZvaWQgc3RsYzQ1eHhfdHhfZWRjZihzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMpCi17Ci0Jc3RydWN0IHNfbG1fY29udHJvbCAqY29udHJvbDsKLQlzdHJ1Y3Qgc19sbW9fZWRjZiAqZWRjZjsKLQlzaXplX3QgbGVuLCBlZGNmX2xlbjsKLQotCXN0bGM0NXh4X2RlYnVnKERFQlVHX0ZVTkMsICIlcyIsIF9fZnVuY19fKTsKLQotCWVkY2ZfbGVuID0gc2l6ZW9mKCplZGNmKTsKLQlsZW4gPSBzaXplb2YoKmNvbnRyb2wpICsgZWRjZl9sZW47Ci0JY29udHJvbCA9IGt6YWxsb2MobGVuLCBHRlBfS0VSTkVMKTsKLQllZGNmID0gKHN0cnVjdCBzX2xtb19lZGNmICopIChjb250cm9sICsgMSk7Ci0KLQljb250cm9sLT5mbGFncyA9IExNX0ZMQUdfQ09OVFJPTCB8IExNX0NUUkxfT1BTRVQ7Ci0JY29udHJvbC0+bGVuZ3RoID0gZWRjZl9sZW47Ci0JY29udHJvbC0+b2lkID0gTE1fT0lEX0VEQ0Y7Ci0KLQllZGNmLT5zbG90dGltZSA9IDB4MTQ7Ci0JZWRjZi0+c2lmcyA9IDEwOwotCWVkY2YtPmVvZnBhZCA9IDY7Ci0JZWRjZi0+bWF4YnVyc3QgPSAxNTAwOwotCi0JZWRjZi0+cXVldWVzWzBdLmFpZnMgPSAyOwotCWVkY2YtPnF1ZXVlc1swXS5wYWQwID0gMTsKLQllZGNmLT5xdWV1ZXNbMF0uY3dtaW4gPSAzOwotCWVkY2YtPnF1ZXVlc1swXS5jd21heCA9IDc7Ci0JZWRjZi0+cXVldWVzWzBdLnR4b3AgPSA0NzsKLQllZGNmLT5xdWV1ZXNbMV0uYWlmcyA9IDI7Ci0JZWRjZi0+cXVldWVzWzFdLnBhZDAgPSAwOwotCWVkY2YtPnF1ZXVlc1sxXS5jd21pbiA9IDc7Ci0JZWRjZi0+cXVldWVzWzFdLmN3bWF4ID0gMTU7Ci0JZWRjZi0+cXVldWVzWzFdLnR4b3AgPSA5NDsKLQllZGNmLT5xdWV1ZXNbMl0uYWlmcyA9IDM7Ci0JZWRjZi0+cXVldWVzWzJdLnBhZDAgPSAwOwotCWVkY2YtPnF1ZXVlc1syXS5jd21pbiA9IDE1OwotCWVkY2YtPnF1ZXVlc1syXS5jd21heCA9IDEwMjM7Ci0JZWRjZi0+cXVldWVzWzJdLnR4b3AgPSAwOwotCWVkY2YtPnF1ZXVlc1szXS5haWZzID0gNzsKLQllZGNmLT5xdWV1ZXNbM10ucGFkMCA9IDA7Ci0JZWRjZi0+cXVldWVzWzNdLmN3bWluID0gMTU7Ci0JZWRjZi0+cXVldWVzWzNdLmN3bWF4ID0gMTAyMzsKLQllZGNmLT5xdWV1ZXNbM10udHhvcCA9IDA7Ci0JZWRjZi0+cXVldWVzWzRdLmFpZnMgPSAxMzsKLQllZGNmLT5xdWV1ZXNbNF0ucGFkMCA9IDk5OwotCWVkY2YtPnF1ZXVlc1s0XS5jd21pbiA9IDM0Mzc7Ci0JZWRjZi0+cXVldWVzWzRdLmN3bWF4ID0gNTEyOwotCWVkY2YtPnF1ZXVlc1s0XS50eG9wID0gMTI7Ci0JZWRjZi0+cXVldWVzWzVdLmFpZnMgPSAxNDI7Ci0JZWRjZi0+cXVldWVzWzVdLnBhZDAgPSAxMDk7Ci0JZWRjZi0+cXVldWVzWzVdLmN3bWluID0gODc1NjsKLQllZGNmLT5xdWV1ZXNbNV0uY3dtYXggPSA2OwotCWVkY2YtPnF1ZXVlc1s1XS50eG9wID0gMDsKLQllZGNmLT5xdWV1ZXNbNl0uYWlmcyA9IDQ7Ci0JZWRjZi0+cXVldWVzWzZdLnBhZDAgPSAwOwotCWVkY2YtPnF1ZXVlc1s2XS5jd21pbiA9IDA7Ci0JZWRjZi0+cXVldWVzWzZdLmN3bWF4ID0gNTg3MDU7Ci0JZWRjZi0+cXVldWVzWzZdLnR4b3AgPSAyNTcxNjsKLQllZGNmLT5xdWV1ZXNbN10uYWlmcyA9IDA7Ci0JZWRjZi0+cXVldWVzWzddLnBhZDAgPSAwOwotCWVkY2YtPnF1ZXVlc1s3XS5jd21pbiA9IDA7Ci0JZWRjZi0+cXVldWVzWzddLmN3bWF4ID0gMDsKLQllZGNmLT5xdWV1ZXNbN10udHhvcCA9IDA7Ci0KLQlzdGxjNDV4eF90eF9mcmFtZShzdGxjLCBGSVJNV0FSRV9DT05GSUdfU1RBUlQsIGNvbnRyb2wsIGxlbik7Ci0KLQlrZnJlZShjb250cm9sKTsKLX0KLQotc3RhdGljIHZvaWQgc3RsYzQ1eHhfdHhfc2V0dXAoc3RydWN0IHN0bGM0NXh4ICpzdGxjKQotewotCXN0cnVjdCBzX2xtX2NvbnRyb2wgKmNvbnRyb2w7Ci0Jc3RydWN0IHNfbG1vX3NldHVwICpzZXR1cDsKLQlzaXplX3QgbGVuLCBzZXR1cF9sZW47Ci0KLQlzdGxjNDV4eF9kZWJ1ZyhERUJVR19GVU5DLCAiJXMiLCBfX2Z1bmNfXyk7Ci0KLQlzZXR1cF9sZW4gPSBzaXplb2YoKnNldHVwKTsKLQlsZW4gPSBzaXplb2YoKmNvbnRyb2wpICsgc2V0dXBfbGVuOwotCWNvbnRyb2wgPSBremFsbG9jKGxlbiwgR0ZQX0tFUk5FTCk7Ci0Jc2V0dXAgPSAoc3RydWN0IHNfbG1vX3NldHVwICopIChjb250cm9sICsgMSk7Ci0KLQljb250cm9sLT5mbGFncyA9IExNX0ZMQUdfQ09OVFJPTCB8IExNX0NUUkxfT1BTRVQ7Ci0JY29udHJvbC0+bGVuZ3RoID0gc2V0dXBfbGVuOwotCWNvbnRyb2wtPm9pZCA9IExNX09JRF9TRVRVUDsKLQotCXNldHVwLT5mbGFncyA9IExNX1NFVFVQX0lORlJBOwotCXNldHVwLT5hbnRlbm5hID0gMjsKLQlzZXR1cC0+cnhfYWxpZ24gPSAwOwotCXNldHVwLT5yeF9idWZmZXIgPSBGSVJNV0FSRV9SWEJVRkZFUl9TVEFSVDsKLQlzZXR1cC0+cnhfbXR1ID0gRklSTVdBUkVfTVRVOwotCXNldHVwLT5mcm9udGVuZCA9IDU7Ci0Jc2V0dXAtPnRpbWVvdXQgPSAwOwotCXNldHVwLT50cnVuY2F0ZSA9IDQ4ODk2OwotCXNldHVwLT5icmF0ZW1hc2sgPSAweGZmZmZmZmZmOwotCXNldHVwLT5yZWZfY2xvY2sgPSA2NDQyNDUwOTQ7Ci0Jc2V0dXAtPmxwZl9iYW5kd2lkdGggPSA2NTUzNTsKLQlzZXR1cC0+b3NjX3N0YXJ0X2RlbGF5ID0gNjU1MzU7Ci0KLQltZW1jcHkoc2V0dXAtPm1hY2FkZHIsIHN0bGMtPm1hY19hZGRyLCBFVEhfQUxFTik7Ci0JbWVtY3B5KHNldHVwLT5ic3NpZCwgc3RsYy0+YnNzaWQsIEVUSF9BTEVOKTsKLQotCXN0bGM0NXh4X3R4X2ZyYW1lKHN0bGMsIEZJUk1XQVJFX0NPTkZJR19TVEFSVCwgY29udHJvbCwgbGVuKTsKLQotCWtmcmVlKGNvbnRyb2wpOwotfQotCi1zdGF0aWMgdm9pZCBzdGxjNDV4eF90eF9zY2FuKHN0cnVjdCBzdGxjNDV4eCAqc3RsYykKLXsKLQlzdHJ1Y3Qgc19sbV9jb250cm9sICpjb250cm9sOwotCXN0cnVjdCBzX2xtb19zY2FuICpzY2FuOwotCXNpemVfdCBsZW4sIHNjYW5fbGVuOwotCi0Jc3RsYzQ1eHhfZGVidWcoREVCVUdfRlVOQywgIiVzIiwgX19mdW5jX18pOwotCi0Jc2Nhbl9sZW4gPSBzaXplb2YoKnNjYW4pOwotCWxlbiA9IHNpemVvZigqY29udHJvbCkgKyBzY2FuX2xlbjsKLQljb250cm9sID0ga3phbGxvYyhsZW4sIEdGUF9LRVJORUwpOwotCXNjYW4gPSAoc3RydWN0IHNfbG1vX3NjYW4gKikgKGNvbnRyb2wgKyAxKTsKLQotCWNvbnRyb2wtPmZsYWdzID0gTE1fRkxBR19DT05UUk9MIHwgTE1fQ1RSTF9PUFNFVDsKLQljb250cm9sLT5sZW5ndGggPSBzY2FuX2xlbjsKLQljb250cm9sLT5vaWQgPSBMTV9PSURfU0NBTjsKLQotCXNjYW4tPmZsYWdzID0gTE1fU0NBTl9FWElUOwotCXNjYW4tPmJyYXRlbWFzayA9IDB4MTVmOwotCXNjYW4tPmFsb2Z0WzBdID0gMzsKLQlzY2FuLT5hbG9mdFsxXSA9IDM7Ci0Jc2Nhbi0+YWxvZnRbMl0gPSAxOwotCXNjYW4tPmFsb2Z0WzNdID0gMDsKLQlzY2FuLT5hbG9mdFs0XSA9IDA7Ci0Jc2Nhbi0+YWxvZnRbNV0gPSAwOwotCXNjYW4tPmFsb2Z0WzZdID0gMDsKLQlzY2FuLT5hbG9mdFs3XSA9IDA7Ci0KLQltZW1jcHkoJnNjYW4tPnJzc2ljYWwsICZzdGxjLT5jYWxfcnNzaVsoc3RsYy0+Y2hhbm5lbCAtIDEpICoKLQkJCQkJICAgICAgIFJTU0lfQ0FMX0xFTl0sCi0JICAgICAgIFJTU0lfQ0FMX0xFTik7Ci0JbWVtY3B5KCZzY2FuLT5jaGFubmVsLCAmc3RsYy0+Y2FsX2NoYW5uZWxzWyhzdGxjLT5jaGFubmVsIC0gMSkgKgotCQkJCQkJICAgQ0hBTk5FTF9DQUxfTEVOXSwKLQkgICAgICAgQ0hBTk5FTF9DQUxfTEVOKTsKLQotCXN0bGM0NXh4X3R4X2ZyYW1lKHN0bGMsIEZJUk1XQVJFX0NPTkZJR19TVEFSVCwgY29udHJvbCwgbGVuKTsKLQotCWtmcmVlKGNvbnRyb2wpOwotfQotCi0vKgotICogY2FsbGVyIG11c3QgaG9sZCBtdXRleAotICovCi1zdGF0aWMgaW50IHN0bGM0NXh4X3R4X3BzcG9sbChzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMsIGJvb2wgcG93ZXJzYXZlKQotewotCXN0cnVjdCBpZWVlODAyMTFfaGRyICpwc3BvbGw7Ci0JaW50IHBheWxvYWRfbGVuLCBwYWRkaW5nLCBpOwotCXN0cnVjdCBzX2xtX2RhdGFfb3V0ICpkYXRhOwotCXN0cnVjdCB0eGJ1ZmZlciAqZW50cnk7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQljaGFyICpwYXlsb2FkOwotCXUxNiBmYzsKLQotCXNrYiA9IGRldl9hbGxvY19za2Ioc3RsYy0+aHctPmV4dHJhX3R4X2hlYWRyb29tICsgMTYpOwotCWlmICghc2tiKSB7Ci0JCXN0bGM0NXh4X3dhcm5pbmcoImZhaWxlZCB0byBhbGxvY2F0ZSBwc3BvbGwgZnJhbWUiKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCXNrYl9yZXNlcnZlKHNrYiwgc3RsYy0+aHctPmV4dHJhX3R4X2hlYWRyb29tKTsKLQotCXBzcG9sbCA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSBza2JfcHV0KHNrYiwgMTYpOwotCW1lbXNldChwc3BvbGwsIDAsIDE2KTsKLQlmYyA9IElFRUU4MDIxMV9GVFlQRV9DVEwgfCBJRUVFODAyMTFfU1RZUEVfUFNQT0xMOwotCWlmIChwb3dlcnNhdmUpCi0JCWZjIHw9IElFRUU4MDIxMV9GQ1RMX1BNOwotCXBzcG9sbC0+ZnJhbWVfY29udHJvbCA9IGNwdV90b19sZTE2KGZjKTsKLQlwc3BvbGwtPmR1cmF0aW9uX2lkID0gY3B1X3RvX2xlMTYoc3RsYy0+YWlkKTsKLQotCS8qIGFpZCBpbiBQUy1Qb2xsIGhhcyBpdHMgdHdvIE1TQnMgZWFjaCBzZXQgdG8gMSAqLwotCXBzcG9sbC0+ZHVyYXRpb25faWQgfD0gY3B1X3RvX2xlMTYoMSA8PCAxNSkgfCBjcHVfdG9fbGUxNigxIDw8IDE0KTsKLQotCW1lbWNweShwc3BvbGwtPmFkZHIxLCBzdGxjLT5ic3NpZCwgRVRIX0FMRU4pOwotCW1lbWNweShwc3BvbGwtPmFkZHIyLCBzdGxjLT5tYWNfYWRkciwgRVRIX0FMRU4pOwotCi0Jc3RsYzQ1eHhfZGVidWcoREVCVUdfUFNNLCAic2VuZGluZyBQUy1Qb2xsIGZyYW1lIHRvICVwTSAocG93ZXJzYXZlICVkLCAiCi0JCSAgICAgICAiZmMgMHgleCwgYWlkICVkKSIsIHBzcG9sbC0+YWRkcjEsCi0JCSAgICAgICBwb3dlcnNhdmUsIGZjLCBzdGxjLT5haWQpOwotCi0Jc3Bpbl9sb2NrX2JoKCZzdGxjLT50eF9sb2NrKTsKLQotCWVudHJ5ID0gc3RsYzQ1eHhfdHhidWZmZXJfYWxsb2Moc3RsYywgc2tiLT5sZW4pOwotCi0Jc3Bpbl91bmxvY2tfYmgoJnN0bGMtPnR4X2xvY2spOwotCi0JaWYgKCFlbnRyeSkgewotCQkvKgotCQkgKiBUaGUgcXVldWUgc2hvdWxkIGJlIHN0b3BwZWQgYmVmb3JlIHRoZSBmaXJtd2FyZSBidWZmZXIKLQkJICogaXMgZnVsbCwgc28gZmlybXdhcmUgYnVmZmVyIHNob3VsZCBhbHdheXMgaGF2ZSBlbm91Z2gKLQkJICogc3BhY2UuCi0JCSAqCi0JCSAqIEJ1dCBJJ20gdG9vIGxhenkgYW5kIG9taXQgaXQgZm9yIG5vdy4KLQkJICovCi0JCWlmIChuZXRfcmF0ZWxpbWl0KCkpCi0JCQlzdGxjNDV4eF93YXJuaW5nKCJmaXJtd2FyZSB0eCBidWZmZXIgZnVsbCBpcyBmdWxsICIKLQkJCQkJICJmb3IgbnVsbCBmcmFtZSIpOwotCQlyZXR1cm4gLUVOT1NQQzsKLQl9Ci0KLQlwYXlsb2FkID0gc2tiLT5kYXRhOwotCXBheWxvYWRfbGVuID0gc2tiLT5sZW47Ci0JcGFkZGluZyA9IChpbnQpIChza2ItPmRhdGEgLSBzaXplb2YoKmRhdGEpKSAmIDM7Ci0JZW50cnktPmhlYWRlcl9sZW4gPSBzaXplb2YoKmRhdGEpICsgcGFkZGluZzsKLQotCWVudHJ5LT5za2IgPSBza2I7Ci0JZW50cnktPnN0YXR1c19uZWVkZWQgPSBmYWxzZTsKLQllbnRyeS0+aGFuZGxlID0gKHUzMikgc2tiOwotCWVudHJ5LT5saWZldGltZSA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKFRYX0ZSQU1FX0xJRkVUSU1FKTsKLQotCXN0bGM0NXh4X2RlYnVnKERFQlVHX1RYLCAidHggZGF0YSAweCV4ICgweCVwIHBheWxvYWQgJWQgQiAiCi0JCSAgICAgICAicGFkZGluZyAlZCBoZWFkZXJfbGVuICVkKSIsCi0JCSAgICAgICBlbnRyeS0+aGFuZGxlLCBwYXlsb2FkLCBwYXlsb2FkX2xlbiwgcGFkZGluZywKLQkJICAgICAgIGVudHJ5LT5oZWFkZXJfbGVuKTsKLQlzdGxjNDV4eF9kdW1wKERFQlVHX1RYX0NPTlRFTlQsIHBheWxvYWQsIHBheWxvYWRfbGVuKTsKLQotCWRhdGEgPSAoc3RydWN0IHNfbG1fZGF0YV9vdXQgKikgc2tiX3B1c2goc2tiLCBlbnRyeS0+aGVhZGVyX2xlbik7Ci0KLQltZW1zZXQoZGF0YSwgMCwgZW50cnktPmhlYWRlcl9sZW4pOwotCi0JaWYgKHBhZGRpbmcpCi0JCWRhdGEtPmZsYWdzID0gTE1fRkxBR19BTElHTjsKLQotCWRhdGEtPmZsYWdzID0gTE1fT1VUX0JVUlNUOwotCWRhdGEtPmxlbmd0aCA9IHBheWxvYWRfbGVuOwotCWRhdGEtPmhhbmRsZSA9IGVudHJ5LT5oYW5kbGU7Ci0JZGF0YS0+YWlkID0gMTsKLQlkYXRhLT5ydHNfcmV0cmllcyA9IDc7Ci0JZGF0YS0+cmV0cmllcyA9IDc7Ci0JZGF0YS0+YWxvZnRfY3RybCA9IDA7Ci0JZGF0YS0+Y3J5cHRfb2Zmc2V0ID0gNTg7Ci0JZGF0YS0+a2V5dHlwZSA9IDA7Ci0JZGF0YS0+a2V5bGVuID0gMDsKLQlkYXRhLT5xdWV1ZSA9IExNX1FVRVVFX0RBVEEzOwotCWRhdGEtPmJhY2tsb2cgPSAzMjsKLQlkYXRhLT5hbnRlbm5hID0gMjsKLQlkYXRhLT5jdHMgPSAzOwotCWRhdGEtPnBvd2VyID0gMTI3OwotCi0JZm9yIChpID0gMDsgaSA8IDg7IGkrKykKLQkJZGF0YS0+YWxvZnRbaV0gPSAwOwotCi0JLyoKLQkgKiBjaGVjayBpZiB0aGVyZSdzIGVub3VnaCBzcGFjZSBpbiB0eCBidWZmZXIKLQkgKgotCSAqIEZJWE1FOiBpZ25vcmVkIGZvciBub3cKLQkgKi8KLQotCXN0bGM0NXh4X3R4X2ZyYW1lKHN0bGMsIGVudHJ5LT5zdGFydCwgc2tiLT5kYXRhLCBza2ItPmxlbik7Ci0KLQlsaXN0X2FkZCgmZW50cnktPnR4X2xpc3QsICZzdGxjLT50eF9zZW50KTsKLQotCXJldHVybiAwOwotfQotCi0vKgotICogY2FsbGVyIG11c3QgaG9sZCBtdXRleAotICoKLSAqIHNoYW1lbGVzc2x5IHN0b2xlbiBmcm9tIG1hYzgwMjExL2llZWU4MDIxMV9zZW5kX251bGxmdW5jCi0gKi8KLXN0YXRpYyBpbnQgc3RsYzQ1eHhfdHhfbnVsbGZ1bmMoc3RydWN0IHN0bGM0NXh4ICpzdGxjLCBib29sIHBvd2Vyc2F2ZSkKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqbnVsbGZ1bmM7Ci0JaW50IHBheWxvYWRfbGVuLCBwYWRkaW5nLCBpOwotCXN0cnVjdCBzX2xtX2RhdGFfb3V0ICpkYXRhOwotCXN0cnVjdCB0eGJ1ZmZlciAqZW50cnk7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQljaGFyICpwYXlsb2FkOwotCXUxNiBmYzsKLQotCXNrYiA9IGRldl9hbGxvY19za2Ioc3RsYy0+aHctPmV4dHJhX3R4X2hlYWRyb29tICsgMjQpOwotCWlmICghc2tiKSB7Ci0JCXN0bGM0NXh4X3dhcm5pbmcoImZhaWxlZCB0byBhbGxvY2F0ZSBidWZmZXIgZm9yIG51bGwgZnJhbWVcbiIpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0Jc2tiX3Jlc2VydmUoc2tiLCBzdGxjLT5ody0+ZXh0cmFfdHhfaGVhZHJvb20pOwotCi0JbnVsbGZ1bmMgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiX3B1dChza2IsIDI0KTsKLQltZW1zZXQobnVsbGZ1bmMsIDAsIDI0KTsKLQlmYyA9IElFRUU4MDIxMV9GVFlQRV9EQVRBIHwgSUVFRTgwMjExX1NUWVBFX05VTExGVU5DIHwKLQkgICAgIElFRUU4MDIxMV9GQ1RMX1RPRFM7Ci0KLQlpZiAocG93ZXJzYXZlKQotCQlmYyB8PSBJRUVFODAyMTFfRkNUTF9QTTsKLQotCW51bGxmdW5jLT5mcmFtZV9jb250cm9sID0gY3B1X3RvX2xlMTYoZmMpOwotCW1lbWNweShudWxsZnVuYy0+YWRkcjEsIHN0bGMtPmJzc2lkLCBFVEhfQUxFTik7Ci0JbWVtY3B5KG51bGxmdW5jLT5hZGRyMiwgc3RsYy0+bWFjX2FkZHIsIEVUSF9BTEVOKTsKLQltZW1jcHkobnVsbGZ1bmMtPmFkZHIzLCBzdGxjLT5ic3NpZCwgRVRIX0FMRU4pOwotCi0Jc3RsYzQ1eHhfZGVidWcoREVCVUdfUFNNLCAic2VuZGluZyBOdWxsIGZyYW1lIHRvICVwTSAocG93ZXJzYXZlICVkLCAiCi0JCSAgICAgICAiZmMgMHgleCkiLCBudWxsZnVuYy0+YWRkcjEsIHBvd2Vyc2F2ZSwgZmMpOwotCi0Jc3Bpbl9sb2NrX2JoKCZzdGxjLT50eF9sb2NrKTsKLQotCWVudHJ5ID0gc3RsYzQ1eHhfdHhidWZmZXJfYWxsb2Moc3RsYywgc2tiLT5sZW4pOwotCi0Jc3Bpbl91bmxvY2tfYmgoJnN0bGMtPnR4X2xvY2spOwotCi0JaWYgKCFlbnRyeSkgewotCQkvKgotCQkgKiBUaGUgcXVldWUgc2hvdWxkIGJlIHN0b3BwZWQgYmVmb3JlIHRoZSBmaXJtd2FyZSBidWZmZXIKLQkJICogaXMgZnVsbCwgc28gZmlybXdhcmUgYnVmZmVyIHNob3VsZCBhbHdheXMgaGF2ZSBlbm91Z2gKLQkJICogc3BhY2UuCi0JCSAqCi0JCSAqIEJ1dCBJJ20gdG9vIGxhenkgYW5kIG9taXQgaXQgZm9yIG5vdy4KLQkJICovCi0JCWlmIChuZXRfcmF0ZWxpbWl0KCkpCi0JCQlzdGxjNDV4eF93YXJuaW5nKCJmaXJtd2FyZSB0eCBidWZmZXIgZnVsbCBpcyBmdWxsICIKLQkJCQkJICJmb3IgbnVsbCBmcmFtZSIpOwotCQlyZXR1cm4gLUVOT1NQQzsKLQl9Ci0KLQlwYXlsb2FkID0gc2tiLT5kYXRhOwotCXBheWxvYWRfbGVuID0gc2tiLT5sZW47Ci0JcGFkZGluZyA9IChpbnQpIChza2ItPmRhdGEgLSBzaXplb2YoKmRhdGEpKSAmIDM7Ci0JZW50cnktPmhlYWRlcl9sZW4gPSBzaXplb2YoKmRhdGEpICsgcGFkZGluZzsKLQotCWVudHJ5LT5za2IgPSBza2I7Ci0JZW50cnktPnN0YXR1c19uZWVkZWQgPSBmYWxzZTsKLQllbnRyeS0+aGFuZGxlID0gKHUzMikgc2tiOwotCWVudHJ5LT5saWZldGltZSA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKFRYX0ZSQU1FX0xJRkVUSU1FKTsKLQotCXN0bGM0NXh4X2RlYnVnKERFQlVHX1RYLCAidHggZGF0YSAweCV4ICgweCVwIHBheWxvYWQgJWQgQiAiCi0JCSAgICAgICAicGFkZGluZyAlZCBoZWFkZXJfbGVuICVkKSIsCi0JCSAgICAgICBlbnRyeS0+aGFuZGxlLCBwYXlsb2FkLCBwYXlsb2FkX2xlbiwgcGFkZGluZywKLQkJICAgICAgIGVudHJ5LT5oZWFkZXJfbGVuKTsKLQlzdGxjNDV4eF9kdW1wKERFQlVHX1RYX0NPTlRFTlQsIHBheWxvYWQsIHBheWxvYWRfbGVuKTsKLQotCWRhdGEgPSAoc3RydWN0IHNfbG1fZGF0YV9vdXQgKikgc2tiX3B1c2goc2tiLCBlbnRyeS0+aGVhZGVyX2xlbik7Ci0KLQltZW1zZXQoZGF0YSwgMCwgZW50cnktPmhlYWRlcl9sZW4pOwotCi0JaWYgKHBhZGRpbmcpCi0JCWRhdGEtPmZsYWdzID0gTE1fRkxBR19BTElHTjsKLQotCWRhdGEtPmZsYWdzID0gTE1fT1VUX0JVUlNUOwotCWRhdGEtPmxlbmd0aCA9IHBheWxvYWRfbGVuOwotCWRhdGEtPmhhbmRsZSA9IGVudHJ5LT5oYW5kbGU7Ci0JZGF0YS0+YWlkID0gMTsKLQlkYXRhLT5ydHNfcmV0cmllcyA9IDc7Ci0JZGF0YS0+cmV0cmllcyA9IDc7Ci0JZGF0YS0+YWxvZnRfY3RybCA9IDA7Ci0JZGF0YS0+Y3J5cHRfb2Zmc2V0ID0gNTg7Ci0JZGF0YS0+a2V5dHlwZSA9IDA7Ci0JZGF0YS0+a2V5bGVuID0gMDsKLQlkYXRhLT5xdWV1ZSA9IExNX1FVRVVFX0RBVEEzOwotCWRhdGEtPmJhY2tsb2cgPSAzMjsKLQlkYXRhLT5hbnRlbm5hID0gMjsKLQlkYXRhLT5jdHMgPSAzOwotCWRhdGEtPnBvd2VyID0gMTI3OwotCi0JZm9yIChpID0gMDsgaSA8IDg7IGkrKykKLQkJZGF0YS0+YWxvZnRbaV0gPSAwOwotCi0JLyoKLQkgKiBjaGVjayBpZiB0aGVyZSdzIGVub3VnaCBzcGFjZSBpbiB0eCBidWZmZXIKLQkgKgotCSAqIEZJWE1FOiBpZ25vcmVkIGZvciBub3cKLQkgKi8KLQotCXN0bGM0NXh4X3R4X2ZyYW1lKHN0bGMsIGVudHJ5LT5zdGFydCwgc2tiLT5kYXRhLCBza2ItPmxlbik7Ci0KLQlsaXN0X2FkZCgmZW50cnktPnR4X2xpc3QsICZzdGxjLT50eF9zZW50KTsKLQotCXJldHVybiAwOwotfQotCi0vKiBjYWxsZXIgbXVzdCBob2xkIG11dGV4ICovCi1zdGF0aWMgdm9pZCBzdGxjNDV4eF90eF9wc20oc3RydWN0IHN0bGM0NXh4ICpzdGxjLCBib29sIGVuYWJsZSkKLXsKLQlzdHJ1Y3Qgc19sbV9jb250cm9sICpjb250cm9sOwotCXN0cnVjdCBzX2xtb19wc20gKnBzbTsKLQlzaXplX3QgbGVuLCBwc21fbGVuOwotCi0JV0FSTl9PTighc3RsYy0+YXNzb2NpYXRlZCk7Ci0JV0FSTl9PTihzdGxjLT5haWQgPCAxKTsKLQlXQVJOX09OKHN0bGMtPmFpZCA+IDIwMDcpOwotCi0JcHNtX2xlbiA9IHNpemVvZigqcHNtKTsKLQlsZW4gPSBzaXplb2YoKmNvbnRyb2wpICsgcHNtX2xlbjsKLQljb250cm9sID0ga3phbGxvYyhsZW4sIEdGUF9LRVJORUwpOwotCXBzbSA9IChzdHJ1Y3Qgc19sbW9fcHNtICopIChjb250cm9sICsgMSk7Ci0KLQljb250cm9sLT5mbGFncyA9IExNX0ZMQUdfQ09OVFJPTCB8IExNX0NUUkxfT1BTRVQ7Ci0JY29udHJvbC0+bGVuZ3RoID0gcHNtX2xlbjsKLQljb250cm9sLT5vaWQgPSBMTV9PSURfUFNNOwotCi0JaWYgKGVuYWJsZSkKLQkJcHNtLT5mbGFncyB8PSBMTV9QU007Ci0KLQlwc20tPmFpZCA9IHN0bGMtPmFpZDsKLQotCXBzbS0+YmVhY29uX3JjcGlfc2tpcF9tYXggPSA2MDsKLQotCXBzbS0+aW50ZXJ2YWxzWzBdLmludGVydmFsID0gMTsKLQlwc20tPmludGVydmFsc1swXS5wZXJpb2RzID0gMTsKLQlwc20tPmludGVydmFsc1sxXS5pbnRlcnZhbCA9IDE7Ci0JcHNtLT5pbnRlcnZhbHNbMV0ucGVyaW9kcyA9IDE7Ci0JcHNtLT5pbnRlcnZhbHNbMl0uaW50ZXJ2YWwgPSAxOwotCXBzbS0+aW50ZXJ2YWxzWzJdLnBlcmlvZHMgPSAxOwotCXBzbS0+aW50ZXJ2YWxzWzNdLmludGVydmFsID0gMTsKLQlwc20tPmludGVydmFsc1szXS5wZXJpb2RzID0gMTsKLQotCXBzbS0+bnIgPSAwOwotCXBzbS0+ZXhjbHVkZVswXSA9IDA7Ci0KLQlzdGxjNDV4eF9kZWJ1ZyhERUJVR19QU00sICJzZW5kaW5nIExNX09JRF9QU00gKGFpZCAlZCwgaW50ZXJ2YWwgJWQpIiwKLQkJICAgICAgIHBzbS0+YWlkLCBwc20tPmludGVydmFsc1swXS5pbnRlcnZhbCk7Ci0KLQlzdGxjNDV4eF90eF9mcmFtZShzdGxjLCBGSVJNV0FSRV9DT05GSUdfU1RBUlQsIGNvbnRyb2wsIGxlbik7Ci0KLQlrZnJlZShjb250cm9sKTsKLX0KLQotc3RhdGljIGludCBzdGxjNDV4eF9vcF90eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IHNrX2J1ZmYgKnNrYikKLXsKLQlzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMgPSBody0+cHJpdjsKLQlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm87Ci0Jc3RydWN0IGllZWU4MDIxMV9yYXRlICpyYXRlOwotCWludCBwYXlsb2FkX2xlbiwgcGFkZGluZywgaTsKLQlzdHJ1Y3Qgc19sbV9kYXRhX291dCAqZGF0YTsKLQlzdHJ1Y3QgdHhidWZmZXIgKmVudHJ5OwotCWNoYXIgKnBheWxvYWQ7Ci0KLQlzdGxjNDV4eF9kZWJ1ZyhERUJVR19GVU5DLCAiJXMiLCBfX2Z1bmNfXyk7Ci0KLQlzcGluX2xvY2tfYmgoJnN0bGMtPnR4X2xvY2spOwotCi0JZW50cnkgPSBzdGxjNDV4eF90eGJ1ZmZlcl9hbGxvYyhzdGxjLCBza2ItPmxlbik7Ci0JaWYgKCFlbnRyeSkgewotCQkvKiB0aGUgcXVldWUgc2hvdWxkIGJlIHN0b3BwZWQgYmVmb3JlIHRoZSBmaXJtd2FyZSBidWZmZXIKLQkJICogaXMgZnVsbCwgc28gZmlybXdhcmUgYnVmZmVyIHNob3VsZCBhbHdheXMgaGF2ZSBlbm91Z2gKLQkJICogc3BhY2UgKi8KLQkJaWYgKG5ldF9yYXRlbGltaXQoKSkKLQkJCXN0bGM0NXh4X3dhcm5pbmcoImZpcm13YXJlIGJ1ZmZlciBmdWxsIik7Ci0JCXNwaW5fdW5sb2NrX2JoKCZzdGxjLT50eF9sb2NrKTsKLQkJcmV0dXJuIE5FVERFVl9UWF9CVVNZOwotCX0KLQotCWluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7Ci0KLQlwYXlsb2FkID0gc2tiLT5kYXRhOwotCXBheWxvYWRfbGVuID0gc2tiLT5sZW47Ci0JcGFkZGluZyA9IChpbnQpIChza2ItPmRhdGEgLSBzaXplb2YoKmRhdGEpKSAmIDM7Ci0JZW50cnktPmhlYWRlcl9sZW4gPSBzaXplb2YoKmRhdGEpICsgcGFkZGluZzsKLQotCWVudHJ5LT5za2IgPSBza2I7Ci0JZW50cnktPnN0YXR1c19uZWVkZWQgPSB0cnVlOwotCWVudHJ5LT5oYW5kbGUgPSAodTMyKSBza2I7Ci0JZW50cnktPmxpZmV0aW1lID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoVFhfRlJBTUVfTElGRVRJTUUpOwotCi0Jc3RsYzQ1eHhfZGVidWcoREVCVUdfVFgsICJ0eCBkYXRhIDB4JXggKDB4JXAgcGF5bG9hZCAlZCBCICIKLQkJICAgICAgICJwYWRkaW5nICVkIGhlYWRlcl9sZW4gJWQpIiwKLQkJICAgICAgIGVudHJ5LT5oYW5kbGUsIHBheWxvYWQsIHBheWxvYWRfbGVuLCBwYWRkaW5nLAotCQkgICAgICAgZW50cnktPmhlYWRlcl9sZW4pOwotCXN0bGM0NXh4X2R1bXAoREVCVUdfVFhfQ09OVEVOVCwgcGF5bG9hZCwgcGF5bG9hZF9sZW4pOwotCi0JZGF0YSA9IChzdHJ1Y3Qgc19sbV9kYXRhX291dCAqKSBza2JfcHVzaChza2IsIGVudHJ5LT5oZWFkZXJfbGVuKTsKLQotCW1lbXNldChkYXRhLCAwLCBlbnRyeS0+aGVhZGVyX2xlbik7Ci0KLQlpZiAocGFkZGluZykKLQkJZGF0YS0+ZmxhZ3MgPSBMTV9GTEFHX0FMSUdOOwotCi0JZGF0YS0+ZmxhZ3MgPSBMTV9PVVRfQlVSU1Q7Ci0JZGF0YS0+bGVuZ3RoID0gcGF5bG9hZF9sZW47Ci0JZGF0YS0+aGFuZGxlID0gZW50cnktPmhhbmRsZTsKLQlkYXRhLT5haWQgPSAxOwotCWRhdGEtPnJ0c19yZXRyaWVzID0gNzsKLQlkYXRhLT5yZXRyaWVzID0gNzsKLQlkYXRhLT5hbG9mdF9jdHJsID0gMDsKLQlkYXRhLT5jcnlwdF9vZmZzZXQgPSA1ODsKLQlkYXRhLT5rZXl0eXBlID0gMDsKLQlkYXRhLT5rZXlsZW4gPSAwOwotCWRhdGEtPnF1ZXVlID0gMjsKLQlkYXRhLT5iYWNrbG9nID0gMzI7Ci0JZGF0YS0+YW50ZW5uYSA9IDI7Ci0JZGF0YS0+Y3RzID0gMzsKLQlkYXRhLT5wb3dlciA9IDEyNzsKLQotCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKLQkJcmF0ZSA9IGllZWU4MDIxMV9nZXRfdHhfcmF0ZShzdGxjLT5odywgaW5mbyk7Ci0JCWRhdGEtPmFsb2Z0W2ldID0gcmF0ZS0+aHdfdmFsdWU7Ci0JfQotCi0JbGlzdF9hZGRfdGFpbCgmZW50cnktPnR4X2xpc3QsICZzdGxjLT50eF9wZW5kaW5nKTsKLQotCS8qIGNoZWNrIGlmIHRoZXJlJ3MgZW5vdWdoIHNwYWNlIGluIHR4IGJ1ZmZlciAqLwotCWlmIChzdGxjNDV4eF90eGJ1ZmZlcl9maW5kKHN0bGMsIE1BWF9GUkFNRV9MRU4pID09IC0xKSB7Ci0JCXN0bGM0NXh4X2RlYnVnKERFQlVHX1FVRVVFLCAidHggYnVmZmVyIGZ1bGwsIHN0b3BwaW5nIHF1ZXVlcyIpOwotCQlzdGxjLT50eF9xdWV1ZV9zdG9wcGVkID0gMTsKLQkJaWVlZTgwMjExX3N0b3BfcXVldWVzKHN0bGMtPmh3KTsKLQl9Ci0KLQlxdWV1ZV93b3JrKHN0bGMtPmh3LT53b3JrcXVldWUsICZzdGxjLT53b3JrKTsKLQotCXNwaW5fdW5sb2NrX2JoKCZzdGxjLT50eF9sb2NrKTsKLQotCXJldHVybiBORVRERVZfVFhfT0s7Ci19Ci0KLXN0YXRpYyBpbnQgc3RsYzQ1eHhfb3Bfc3RhcnQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCi17Ci0Jc3RydWN0IHN0bGM0NXh4ICpzdGxjID0gaHctPnByaXY7Ci0JdW5zaWduZWQgbG9uZyB0aW1lb3V0OwotCWludCByZXQgPSAwOwotCi0Jc3RsYzQ1eHhfZGVidWcoREVCVUdfRlVOQywgIiVzIiwgX19mdW5jX18pOwotCi0JbXV0ZXhfbG9jaygmc3RsYy0+bXV0ZXgpOwotCi0Jc3RsYy0+Zndfc3RhdGUgPSBGV19TVEFURV9CT09USU5HOwotCXN0bGMtPmNoYW5uZWwgPSAxOwotCi0Jc3RsYzQ1eHhfcG93ZXJfb24oc3RsYyk7Ci0KLQlyZXQgPSBzdGxjNDV4eF91cGxvYWRfZmlybXdhcmUoc3RsYyk7Ci0JaWYgKHJldCA8IDApIHsKLQkJc3RsYzQ1eHhfcG93ZXJfb2ZmKHN0bGMpOwotCQlnb3RvIG91dF91bmxvY2s7Ci0JfQotCi0Jc3RsYy0+dHhfcXVldWVfc3RvcHBlZCA9IDA7Ci0KLQltdXRleF91bmxvY2soJnN0bGMtPm11dGV4KTsKLQotCXRpbWVvdXQgPSBtc2Vjc190b19qaWZmaWVzKDIwMDApOwotCXRpbWVvdXQgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX2ludGVycnVwdGlibGVfdGltZW91dCgmc3RsYy0+ZndfY29tcCwKLQkJCQkJCQkgICAgdGltZW91dCk7Ci0JaWYgKCF0aW1lb3V0KSB7Ci0JCXN0bGM0NXh4X2Vycm9yKCJmaXJtd2FyZSBib290IGZhaWxlZCIpOwotCQlzdGxjNDV4eF9wb3dlcl9vZmYoc3RsYyk7Ci0JCXJldCA9IC0xOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlzdGxjNDV4eF9kZWJ1ZyhERUJVR19CT09ULCAiZmlybXdhcmUgYm9vdGVkIik7Ci0KLQkvKiBGSVhNRTogc2hvdWxkIHdlIHRha2UgbXV0ZXgganVzdCBhZnRlciB3YWl0X2Zvcl9jb21wbGV0aW9uKCk/ICovCi0JbXV0ZXhfbG9jaygmc3RsYy0+bXV0ZXgpOwotCi0JV0FSTl9PTihzdGxjLT5md19zdGF0ZSAhPSBGV19TVEFURV9SRUFEWSk7Ci0KLW91dF91bmxvY2s6Ci0JbXV0ZXhfdW5sb2NrKCZzdGxjLT5tdXRleCk7Ci0KLW91dDoKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdm9pZCBzdGxjNDV4eF9vcF9zdG9wKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQotewotCXN0cnVjdCBzdGxjNDV4eCAqc3RsYyA9IGh3LT5wcml2OwotCi0Jc3RsYzQ1eHhfZGVidWcoREVCVUdfRlVOQywgIiVzIiwgX19mdW5jX18pOwotCi0JbXV0ZXhfbG9jaygmc3RsYy0+bXV0ZXgpOwotCi0JV0FSTl9PTihzdGxjLT5md19zdGF0ZSAhPSBGV19TVEFURV9SRUFEWSk7Ci0KLQlzdGxjNDV4eF9wb3dlcl9vZmYoc3RsYyk7Ci0KLQkvKiBGSVhNRTogbWFrZSBzdXJlIHRoYXQgYWxsIHdvcmtfc3RydWN0cyBoYXZlIGNvbXBsZXRlZCAqLwotCi0Jc3Bpbl9sb2NrX2JoKCZzdGxjLT50eF9sb2NrKTsKLQlzdGxjNDV4eF9mbHVzaF9xdWV1ZXMoc3RsYyk7Ci0Jc3Bpbl91bmxvY2tfYmgoJnN0bGMtPnR4X2xvY2spOwotCi0Jc3RsYy0+Zndfc3RhdGUgPSBGV19TVEFURV9PRkY7Ci0KLQltdXRleF91bmxvY2soJnN0bGMtPm11dGV4KTsKLX0KLQotc3RhdGljIGludCBzdGxjNDV4eF9vcF9hZGRfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9pZl9pbml0X2NvbmYgKmNvbmYpCi17Ci0Jc3RydWN0IHN0bGM0NXh4ICpzdGxjID0gaHctPnByaXY7Ci0KLQlzdGxjNDV4eF9kZWJ1ZyhERUJVR19GVU5DLCAiJXMiLCBfX2Z1bmNfXyk7Ci0KLQlzd2l0Y2ggKGNvbmYtPnR5cGUpIHsKLQljYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRU9QTk9UU1VQUDsKLQl9Ci0KLQltZW1jcHkoc3RsYy0+bWFjX2FkZHIsIGNvbmYtPm1hY19hZGRyLCBFVEhfQUxFTik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgc3RsYzQ1eHhfb3BfcmVtb3ZlX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCQkJIHN0cnVjdCBpZWVlODAyMTFfaWZfaW5pdF9jb25mICpjb25mKQotewotCXN0bGM0NXh4X2RlYnVnKERFQlVHX0ZVTkMsICIlcyIsIF9fZnVuY19fKTsKLX0KLQotc3RhdGljIGludCBzdGxjNDV4eF9vcF9jb25maWcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUzMiBjaGFuZ2VkKQotewotCXN0cnVjdCBzdGxjNDV4eCAqc3RsYyA9IGh3LT5wcml2OwotCi0Jc3RsYzQ1eHhfZGVidWcoREVCVUdfRlVOQywgIiVzIiwgX19mdW5jX18pOwotCi0JbXV0ZXhfbG9jaygmc3RsYy0+bXV0ZXgpOwotCi0Jc3RsYy0+Y2hhbm5lbCA9IGh3LT5jb25mLmNoYW5uZWwtPmh3X3ZhbHVlOwotCXN0bGM0NXh4X3R4X3NjYW4oc3RsYyk7Ci0Jc3RsYzQ1eHhfdHhfc2V0dXAoc3RsYyk7Ci0Jc3RsYzQ1eHhfdHhfZWRjZihzdGxjKTsKLQotCWlmICgoaHctPmNvbmYuZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9QUykgIT0gc3RsYy0+cHNtKSB7Ci0JCXN0bGMtPnBzbSA9IGh3LT5jb25mLmZsYWdzICYgSUVFRTgwMjExX0NPTkZfUFM7Ci0JCWlmIChzdGxjLT5hc3NvY2lhdGVkKSB7Ci0JCQlzdGxjNDV4eF90eF9wc20oc3RsYywgc3RsYy0+cHNtKTsKLQkJCXN0bGM0NXh4X3R4X251bGxmdW5jKHN0bGMsIHN0bGMtPnBzbSk7Ci0JCX0KLQl9Ci0KLQltdXRleF91bmxvY2soJnN0bGMtPm11dGV4KTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBzdGxjNDV4eF9vcF9jb25maWd1cmVfZmlsdGVyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJCSAgICAgIHVuc2lnbmVkIGludCBjaGFuZ2VkX2ZsYWdzLAotCQkJCSAgICAgIHVuc2lnbmVkIGludCAqdG90YWxfZmxhZ3MsCi0JCQkJICAgICAgaW50IG1jX2NvdW50LAotCQkJCSAgICAgIHN0cnVjdCBkZXZfYWRkcl9saXN0ICptY19saXN0KQotewotCSp0b3RhbF9mbGFncyA9IDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHN0bGM0NXh4X29wX2Jzc19pbmZvX2NoYW5nZWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAotCQkJCQkgc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiAqaW5mbywKLQkJCQkJIHUzMiBjaGFuZ2VkKQotewotCXN0cnVjdCBzdGxjNDV4eCAqc3RsYyA9IGh3LT5wcml2OwotCi0Jc3RsYzQ1eHhfZGVidWcoREVCVUdfRlVOQywgIiVzIiwgX19mdW5jX18pOwotCW11dGV4X2xvY2soJnN0bGMtPm11dGV4KTsKLQotCW1lbWNweShzdGxjLT5ic3NpZCwgaW5mby0+YnNzaWQsIEVUSF9BTEVOKTsKLQlzdGxjNDV4eF90eF9zZXR1cChzdGxjKTsKLQotCW11dGV4X3VubG9jaygmc3RsYy0+bXV0ZXgpOwotCi0JaWYgKGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9BU1NPQykgewotCQlzdGxjLT5hc3NvY2lhdGVkID0gaW5mby0+YXNzb2M7Ci0JCWlmIChpbmZvLT5hc3NvYykKLQkJCXN0bGMtPmFpZCA9IGluZm8tPmFpZDsKLQkJZWxzZQotCQkJc3RsYy0+YWlkID0gLTE7Ci0KLQkJaWYgKHN0bGMtPnBzbSkgewotCQkJc3RsYzQ1eHhfdHhfcHNtKHN0bGMsIHN0bGMtPnBzbSk7Ci0JCQlzdGxjNDV4eF90eF9udWxsZnVuYyhzdGxjLCBzdGxjLT5wc20pOwotCQl9Ci0JfQotfQotCi0KLS8qIGNhbid0IGJlIGNvbnN0LCBtYWM4MDIxMSB3cml0ZXMgdG8gdGhpcyAqLwotc3RhdGljIHN0cnVjdCBpZWVlODAyMTFfcmF0ZSBzdGxjNDV4eF9yYXRlc1tdID0gewotCXsgLmJpdHJhdGUgPSAxMCwgIC5od192YWx1ZSA9IDAsICAgIC5od192YWx1ZV9zaG9ydCA9IDAsIH0sCi0JeyAuYml0cmF0ZSA9IDIwLCAgLmh3X3ZhbHVlID0gMSwgICAgLmh3X3ZhbHVlX3Nob3J0ID0gMSwgfSwKLQl7IC5iaXRyYXRlID0gNTUsICAuaHdfdmFsdWUgPSAyLCAgICAuaHdfdmFsdWVfc2hvcnQgPSAyLCB9LAotCXsgLmJpdHJhdGUgPSAxMTAsIC5od192YWx1ZSA9IDMsICAgIC5od192YWx1ZV9zaG9ydCA9IDMsIH0sCi0JeyAuYml0cmF0ZSA9IDYwLCAgLmh3X3ZhbHVlID0gNCwgICAgLmh3X3ZhbHVlX3Nob3J0ID0gNCwgfSwKLQl7IC5iaXRyYXRlID0gOTAsICAuaHdfdmFsdWUgPSA1LCAgICAuaHdfdmFsdWVfc2hvcnQgPSA1LCB9LAotCXsgLmJpdHJhdGUgPSAxMjAsIC5od192YWx1ZSA9IDYsICAgIC5od192YWx1ZV9zaG9ydCA9IDYsIH0sCi0JeyAuYml0cmF0ZSA9IDE4MCwgLmh3X3ZhbHVlID0gNywgICAgLmh3X3ZhbHVlX3Nob3J0ID0gNywgfSwKLQl7IC5iaXRyYXRlID0gMjQwLCAuaHdfdmFsdWUgPSA4LCAgICAuaHdfdmFsdWVfc2hvcnQgPSA4LCB9LAotCXsgLmJpdHJhdGUgPSAzNjAsIC5od192YWx1ZSA9IDksICAgIC5od192YWx1ZV9zaG9ydCA9IDksIH0sCi0JeyAuYml0cmF0ZSA9IDQ4MCwgLmh3X3ZhbHVlID0gMTAsICAgLmh3X3ZhbHVlX3Nob3J0ID0gMTAsIH0sCi0JeyAuYml0cmF0ZSA9IDU0MCwgLmh3X3ZhbHVlID0gMTEsICAgLmh3X3ZhbHVlX3Nob3J0ID0gMTEsIH0sCi19OwotCi0vKiBjYW4ndCBiZSBjb25zdCwgbWFjODAyMTEgd3JpdGVzIHRvIHRoaXMgKi8KLXN0YXRpYyBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgc3RsYzQ1eHhfY2hhbm5lbHNbXSA9IHsKLQl7IC5od192YWx1ZSA9IDEsIC5jZW50ZXJfZnJlcSA9IDI0MTJ9LAotCXsgLmh3X3ZhbHVlID0gMiwgLmNlbnRlcl9mcmVxID0gMjQxN30sCi0JeyAuaHdfdmFsdWUgPSAzLCAuY2VudGVyX2ZyZXEgPSAyNDIyfSwKLQl7IC5od192YWx1ZSA9IDQsIC5jZW50ZXJfZnJlcSA9IDI0Mjd9LAotCXsgLmh3X3ZhbHVlID0gNSwgLmNlbnRlcl9mcmVxID0gMjQzMn0sCi0JeyAuaHdfdmFsdWUgPSA2LCAuY2VudGVyX2ZyZXEgPSAyNDM3fSwKLQl7IC5od192YWx1ZSA9IDcsIC5jZW50ZXJfZnJlcSA9IDI0NDJ9LAotCXsgLmh3X3ZhbHVlID0gOCwgLmNlbnRlcl9mcmVxID0gMjQ0N30sCi0JeyAuaHdfdmFsdWUgPSA5LCAuY2VudGVyX2ZyZXEgPSAyNDUyfSwKLQl7IC5od192YWx1ZSA9IDEwLCAuY2VudGVyX2ZyZXEgPSAyNDU3fSwKLQl7IC5od192YWx1ZSA9IDExLCAuY2VudGVyX2ZyZXEgPSAyNDYyfSwKLQl7IC5od192YWx1ZSA9IDEyLCAuY2VudGVyX2ZyZXEgPSAyNDY3fSwKLQl7IC5od192YWx1ZSA9IDEzLCAuY2VudGVyX2ZyZXEgPSAyNDcyfSwKLX07Ci0KLS8qIGNhbid0IGJlIGNvbnN0LCBtYWM4MDIxMSB3cml0ZXMgdG8gdGhpcyAqLwotc3RhdGljIHN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgc3RsYzQ1eHhfYmFuZF8yZ2h6ID0gewotCS5jaGFubmVscyA9IHN0bGM0NXh4X2NoYW5uZWxzLAotCS5uX2NoYW5uZWxzID0gQVJSQVlfU0laRShzdGxjNDV4eF9jaGFubmVscyksCi0JLmJpdHJhdGVzID0gc3RsYzQ1eHhfcmF0ZXMsCi0JLm5fYml0cmF0ZXMgPSBBUlJBWV9TSVpFKHN0bGM0NXh4X3JhdGVzKSwKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX29wcyBzdGxjNDV4eF9vcHMgPSB7Ci0JLnN0YXJ0ID0gc3RsYzQ1eHhfb3Bfc3RhcnQsCi0JLnN0b3AgPSBzdGxjNDV4eF9vcF9zdG9wLAotCS5hZGRfaW50ZXJmYWNlID0gc3RsYzQ1eHhfb3BfYWRkX2ludGVyZmFjZSwKLQkucmVtb3ZlX2ludGVyZmFjZSA9IHN0bGM0NXh4X29wX3JlbW92ZV9pbnRlcmZhY2UsCi0JLmNvbmZpZyA9IHN0bGM0NXh4X29wX2NvbmZpZywKLQkuY29uZmlndXJlX2ZpbHRlciA9IHN0bGM0NXh4X29wX2NvbmZpZ3VyZV9maWx0ZXIsCi0JLnR4ID0gc3RsYzQ1eHhfb3BfdHgsCi0JLmJzc19pbmZvX2NoYW5nZWQgPSBzdGxjNDV4eF9vcF9ic3NfaW5mb19jaGFuZ2VkLAotfTsKLQotc3RhdGljIGludCBzdGxjNDV4eF9yZWdpc3Rlcl9tYWM4MDIxMShzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMpCi17Ci0JLyogRklYTUU6IFNFVF9JRUVFODAyMTFfUEVSTV9BRERSKCkgcmVxdWlyZXMgZGVmYXVsdF9tYWNfYWRkcgotCSAgIHRvIGJlIG5vbi1jb25zdCBmb3Igc29tZSBzdHJhbmdlIHJlYXNvbiAqLwotCXN0YXRpYyB1OCBkZWZhdWx0X21hY19hZGRyW0VUSF9BTEVOXSA9IHsKLQkJMHgwMCwgMHgwMiwgMHhlZSwgMHhjMCwgMHhmZiwgMHhlZQotCX07Ci0JaW50IHJldDsKLQotCVNFVF9JRUVFODAyMTFfUEVSTV9BRERSKHN0bGMtPmh3LCBkZWZhdWx0X21hY19hZGRyKTsKLQotCXJldCA9IGllZWU4MDIxMV9yZWdpc3Rlcl9odyhzdGxjLT5odyk7Ci0JaWYgKHJldCkgewotCQlzdGxjNDV4eF9lcnJvcigidW5hYmxlIHRvIHJlZ2lzdGVyIG1hYzgwMjExIGh3OiAlZCIsIHJldCk7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHN0bGM0NXh4X2RldmljZV9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQotfQotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzdGxjNDV4eF9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gInN0bGM0NXh4IiwKLQkuaWQJCT0gLTEsCi0KLQkvKiBkZXZpY2UgbW9kZWwgaW5zaXN0cyB0byBoYXZlIGEgcmVsZWFzZSBmdW5jdGlvbiAqLwotCS5kZXYgICAgICAgICAgICA9IHsKLQkJLnJlbGVhc2UgPSBzdGxjNDV4eF9kZXZpY2VfcmVsZWFzZSwKLQl9LAotfTsKLQotc3RhdGljIGludCBfX2RldmluaXQgc3RsYzQ1eHhfcHJvYmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKLXsKLQlzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGM7Ci0Jc3RydWN0IGllZWU4MDIxMV9odyAqaHc7Ci0JaW50IHJldDsKLQotCXN0bGM0NXh4X2RlYnVnKERFQlVHX0ZVTkMsICIlcyIsIF9fZnVuY19fKTsKLQotCS8qIG1hYzgwMjExIGFsbG9jICovCi0JaHcgPSBpZWVlODAyMTFfYWxsb2NfaHcoc2l6ZW9mKCpzdGxjKSwgJnN0bGM0NXh4X29wcyk7Ci0JaWYgKCFodykgewotCQlzdGxjNDV4eF9lcnJvcigiY291bGQgbm90IGFsbG9jIGllZWU4MDIxMV9odyIpOwotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIG91dDsKLQl9Ci0KLQkvKiBtYWM4MDIxMSBjbGVhcnMgaHctPnByaXYgKi8KLQlzdGxjID0gaHctPnByaXY7Ci0KLQlzdGxjLT5odyA9IGh3OwotCWRldl9zZXRfZHJ2ZGF0YSgmc3BpLT5kZXYsIHN0bGMpOwotCXN0bGMtPnNwaSA9IHNwaTsKLQotCXNwaS0+Yml0c19wZXJfd29yZCA9IDE2OwotCXNwaS0+bWF4X3NwZWVkX2h6ID0gMjQwMDAwMDA7Ci0KLQlyZXQgPSBzcGlfc2V0dXAoc3BpKTsKLQlpZiAocmV0IDwgMCkKLQkJc3RsYzQ1eHhfZXJyb3IoInNwaV9zZXR1cCBmYWlsZWQiKTsKLQotCXJldCA9IGdwaW9fcmVxdWVzdChzdGxjNDV4eF9ncGlvX3Bvd2VyLCAic3RsYzQ1eHggcG93ZXIiKTsKLQlpZiAocmV0IDwgMCkgewotCQlzdGxjNDV4eF9lcnJvcigicG93ZXIgR1BJTyByZXF1ZXN0IGZhaWxlZDogJWQiLCByZXQpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCXJldCA9IGdwaW9fcmVxdWVzdChzdGxjNDV4eF9ncGlvX2lycSwgInN0bGM0NXh4IGlycSIpOwotCWlmIChyZXQgPCAwKSB7Ci0JCXN0bGM0NXh4X2Vycm9yKCJpcnEgR1BJTyByZXF1ZXN0IGZhaWxlZDogJWQiLCByZXQpOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlncGlvX2RpcmVjdGlvbl9vdXRwdXQoc3RsYzQ1eHhfZ3Bpb19wb3dlciwgMCk7Ci0JZ3Bpb19kaXJlY3Rpb25faW5wdXQoc3RsYzQ1eHhfZ3Bpb19pcnEpOwotCi0JcmV0ID0gcmVxdWVzdF9pcnEoZ3Bpb190b19pcnEoc3RsYzQ1eHhfZ3Bpb19pcnEpLAotCQkJICBzdGxjNDV4eF9pbnRlcnJ1cHQsIElSUUZfRElTQUJMRUQsICJzdGxjNDV4eCIsCi0JCQkgIHN0bGMtPnNwaSk7Ci0JaWYgKHJldCA8IDApCi0JCS8qIEZJWE1FOiBoYW5kbGUgdGhlIGVycm9yICovCi0JCXN0bGM0NXh4X2Vycm9yKCJyZXF1ZXN0X2lycSgpIGZhaWxlZCIpOwotCi0Jc2V0X2lycV90eXBlKGdwaW9fdG9faXJxKHN0bGM0NXh4X2dwaW9faXJxKSwKLQkJICAgICBJUlFfVFlQRV9FREdFX1JJU0lORyk7Ci0KLQlkaXNhYmxlX2lycShncGlvX3RvX2lycShzdGxjNDV4eF9ncGlvX2lycSkpOwotCi0JcmV0ID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZzdGxjNDV4eF9kZXZpY2UpOwotCWlmIChyZXQpIHsKLQkJc3RsYzQ1eHhfZXJyb3IoIkNvdWxkbid0IHJlZ2lzdGVyIHdsYW5fb21hcCBkZXZpY2UuIik7Ci0JCXJldHVybiByZXQ7Ci0JfQotCWRldl9zZXRfZHJ2ZGF0YSgmc3RsYzQ1eHhfZGV2aWNlLmRldiwgc3RsYyk7Ci0KLQlJTklUX1dPUksoJnN0bGMtPndvcmssIHN0bGM0NXh4X3dvcmspOwotCUlOSVRfV09SSygmc3RsYy0+d29ya19yZXNldCwgc3RsYzQ1eHhfd29ya19yZXNldCk7Ci0JSU5JVF9ERUxBWUVEX1dPUksoJnN0bGMtPndvcmtfdHhfdGltZW91dCwgc3RsYzQ1eHhfd29ya190eF90aW1lb3V0KTsKLQltdXRleF9pbml0KCZzdGxjLT5tdXRleCk7Ci0JaW5pdF9jb21wbGV0aW9uKCZzdGxjLT5md19jb21wKTsKLQlzcGluX2xvY2tfaW5pdCgmc3RsYy0+dHhfbG9jayk7Ci0JSU5JVF9MSVNUX0hFQUQoJnN0bGMtPnR4YnVmZmVyKTsKLQlJTklUX0xJU1RfSEVBRCgmc3RsYy0+dHhfcGVuZGluZyk7Ci0JSU5JVF9MSVNUX0hFQUQoJnN0bGMtPnR4X3NlbnQpOwotCi0JaHctPmZsYWdzID0gSUVFRTgwMjExX0hXX1JYX0lOQ0xVREVTX0ZDUyB8Ci0JCUlFRUU4MDIxMV9IV19TSUdOQUxfREJNIHwKLQkJSUVFRTgwMjExX0hXX05PSVNFX0RCTTsKLQkvKiBmb3VyIGJ5dGVzIGZvciBwYWRkaW5nICovCi0JaHctPmV4dHJhX3R4X2hlYWRyb29tID0gc2l6ZW9mKHN0cnVjdCBzX2xtX2RhdGFfb3V0KSArIDQ7Ci0KLQkvKiB1bml0IHVzICovCi0JaHctPmNoYW5uZWxfY2hhbmdlX3RpbWUgPSAxMDAwOwotCi0JaHctPndpcGh5LT5pbnRlcmZhY2VfbW9kZXMgPSBCSVQoTkw4MDIxMV9JRlRZUEVfU1RBVElPTik7Ci0JaHctPndpcGh5LT5iYW5kc1tJRUVFODAyMTFfQkFORF8yR0haXSA9ICZzdGxjNDV4eF9iYW5kXzJnaHo7Ci0KLQlTRVRfSUVFRTgwMjExX0RFVihodywgJnNwaS0+ZGV2KTsKLQotCUJVSUxEX0JVR19PTihzaXplb2YoZGVmYXVsdF9jYWxfcnNzaSkgIT0gUlNTSV9DQUxfQVJSQVlfTEVOKTsKLQlCVUlMRF9CVUdfT04oc2l6ZW9mKGRlZmF1bHRfY2FsX2NoYW5uZWxzKSAhPSBDSEFOTkVMX0NBTF9BUlJBWV9MRU4pOwotCi0Jc3RsYy0+Y2FsX3Jzc2kgPSBrbWVtZHVwKGRlZmF1bHRfY2FsX3Jzc2ksIFJTU0lfQ0FMX0FSUkFZX0xFTiwKLQkJCQkgR0ZQX0tFUk5FTCk7Ci0Jc3RsYy0+Y2FsX2NoYW5uZWxzID0ga21lbWR1cChkZWZhdWx0X2NhbF9jaGFubmVscywKLQkJCQkgICAgIENIQU5ORUxfQ0FMX0FSUkFZX0xFTiwKLQkJCQkgICAgIEdGUF9LRVJORUwpOwotCi0JcmV0ID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZzdGxjNDV4eF9kZXZpY2UuZGV2LCAmZGV2X2F0dHJfY2FsX3Jzc2kpOwotCWlmIChyZXQgPCAwKSB7Ci0JCXN0bGM0NXh4X2Vycm9yKCJmYWlsZWQgdG8gY3JlYXRlIHN5c2ZzIGZpbGUgY2FsX3Jzc2kiKTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JcmV0ID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZzdGxjNDV4eF9kZXZpY2UuZGV2LCAmZGV2X2F0dHJfY2FsX2NoYW5uZWxzKTsKLQlpZiAocmV0IDwgMCkgewotCQlzdGxjNDV4eF9lcnJvcigiZmFpbGVkIHRvIGNyZWF0ZSBzeXNmcyBmaWxlIGNhbF9jaGFubmVscyIpOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlyZXQgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJnN0bGM0NXh4X2RldmljZS5kZXYsICZkZXZfYXR0cl90eF9idWYpOwotCWlmIChyZXQgPCAwKSB7Ci0JCXN0bGM0NXh4X2Vycm9yKCJmYWlsZWQgdG8gY3JlYXRlIHN5c2ZzIGZpbGUgdHhfYnVmIik7Ci0JCWdvdG8gb3V0OwotCX0KLQotCXJldCA9IHN0bGM0NXh4X3JlZ2lzdGVyX21hYzgwMjExKHN0bGMpOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIG91dDsKLQotCXN0bGM0NXh4X2luZm8oInYiIERSSVZFUl9WRVJTSU9OICIgbG9hZGVkIik7Ci0KLQlzdGxjNDV4eF9pbmZvKCJjb25maWcgYnVmZmVyIDB4JXgtMHgleCIsCi0JCSAgICAgIEZJUk1XQVJFX0NPTkZJR19TVEFSVCwgRklSTVdBUkVfQ09ORklHX0VORCk7Ci0Jc3RsYzQ1eHhfaW5mbygidHggMHgleC0weCV4LCByeCAweCV4LTB4JXgiLAotCQkgICAgICBGSVJNV0FSRV9UWEJVRkZFUl9TVEFSVCwgRklSTVdBUkVfVFhCVUZGRVJfRU5ELAotCQkgICAgICBGSVJNV0FSRV9SWEJVRkZFUl9TVEFSVCwgRklSTVdBUkVfUlhCVUZGRVJfRU5EKTsKLQotb3V0OgotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgX19kZXZleGl0IHN0bGM0NXh4X3JlbW92ZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQotewotCXN0cnVjdCBzdGxjNDV4eCAqc3RsYyA9IGRldl9nZXRfZHJ2ZGF0YSgmc3BpLT5kZXYpOwotCi0Jc3RsYzQ1eHhfZGVidWcoREVCVUdfRlVOQywgIiVzIiwgX19mdW5jX18pOwotCi0JcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoJnN0bGM0NXh4X2RldmljZSk7Ci0KLQlpZWVlODAyMTFfdW5yZWdpc3Rlcl9odyhzdGxjLT5odyk7Ci0KLQlmcmVlX2lycShncGlvX3RvX2lycShzdGxjNDV4eF9ncGlvX2lycSksIHNwaSk7Ci0KLQlncGlvX2ZyZWUoc3RsYzQ1eHhfZ3Bpb19wb3dlcik7Ci0JZ3Bpb19mcmVlKHN0bGM0NXh4X2dwaW9faXJxKTsKLQotCS8qIEZJWE1FOiBmcmVlIGNhbF9jaGFubmVscyBhbmQgY2FsX3Jzc2k/ICovCi0KLQlrZnJlZShzdGxjLT5mdyk7Ci0KLQltdXRleF9kZXN0cm95KCZzdGxjLT5tdXRleCk7Ci0KLQkvKiBmcmVlcyBhbHNvIHN0bGMgKi8KLQlpZWVlODAyMTFfZnJlZV9odyhzdGxjLT5odyk7Ci0Jc3RsYyA9IE5VTEw7Ci0KLQlyZXR1cm4gMDsKLX0KLQotCi1zdGF0aWMgc3RydWN0IHNwaV9kcml2ZXIgc3RsYzQ1eHhfc3BpX2RyaXZlciA9IHsKLQkuZHJpdmVyID0gewotCQkvKiB1c2UgY3gzMTEweCBuYW1lIGJlY2F1c2UgYm9hcmQtbjgwMC5jIHVzZXMgdGhhdCBmb3IgdGhlCi0JCSAqIFNQSSBwb3J0ICovCi0JCS5uYW1lCQk9ICJjeDMxMTB4IiwKLQkJLmJ1cwkJPSAmc3BpX2J1c190eXBlLAotCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JfSwKLQotCS5wcm9iZQkJPSBzdGxjNDV4eF9wcm9iZSwKLQkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHN0bGM0NXh4X3JlbW92ZSksCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBzdGxjNDV4eF9pbml0KHZvaWQpCi17Ci0JaW50IHJldDsKLQotCXN0bGM0NXh4X2RlYnVnKERFQlVHX0ZVTkMsICIlcyIsIF9fZnVuY19fKTsKLQotCXJldCA9IHNwaV9yZWdpc3Rlcl9kcml2ZXIoJnN0bGM0NXh4X3NwaV9kcml2ZXIpOwotCWlmIChyZXQgPCAwKSB7Ci0JCXN0bGM0NXh4X2Vycm9yKCJmYWlsZWQgdG8gcmVnaXN0ZXIgU1BJIGRyaXZlcjogJWQiLCByZXQpOwotCQlnb3RvIG91dDsKLQl9Ci0KLW91dDoKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgc3RsYzQ1eHhfZXhpdCh2b2lkKQotewotCXN0bGM0NXh4X2RlYnVnKERFQlVHX0ZVTkMsICIlcyIsIF9fZnVuY19fKTsKLQotCXNwaV91bnJlZ2lzdGVyX2RyaXZlcigmc3RsYzQ1eHhfc3BpX2RyaXZlcik7Ci0KLQlzdGxjNDV4eF9pbmZvKCJ1bmxvYWRlZCIpOwotfQotCi1tb2R1bGVfaW5pdChzdGxjNDV4eF9pbml0KTsKLW1vZHVsZV9leGl0KHN0bGM0NXh4X2V4aXQpOwotCi1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci1NT0RVTEVfQVVUSE9SKCJLYWxsZSBWYWxvIDxrYWxsZS52YWxvQG5va2lhLmNvbT4iKTsKLU1PRFVMRV9BTElBUygic3BpOmN4MzExMHgiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zdGxjNDV4eC9zdGxjNDV4eC5oIGIvZHJpdmVycy9zdGFnaW5nL3N0bGM0NXh4L3N0bGM0NXh4LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFjOTZiYmIuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3N0bGM0NXh4L3N0bGM0NXh4LmgKKysrIC9kZXYvbnVsbApAQCAtMSwyODMgKzAsMCBAQAotLyoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHN0bGM0NXh4Ci0gKgotICogQ29weXJpZ2h0IChDKSAyMDA4IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KLSAqCi0gKiBDb250YWN0OiBLYWxsZSBWYWxvIDxrYWxsZS52YWxvQG5va2lhLmNvbT4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKLSAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKLSAqIDAyMTEwLTEzMDEgVVNBCi0gKgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgotI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KLSNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KLQotI2luY2x1ZGUgInN0bGM0NXh4X2xtYWMuaCIKLQotI2RlZmluZSBEUklWRVJfTkFNRSAic3RsYzQ1eHgiCi0jZGVmaW5lIERSSVZFUl9WRVJTSU9OICIwLjEuMyIKLQotI2RlZmluZSBEUklWRVJfUFJFRklYIERSSVZFUl9OQU1FICI6ICIKLQotZW51bSB7Ci0JREVCVUdfTk9ORSA9IDAsCi0JREVCVUdfRlVOQyA9IDEgPDwgMCwKLQlERUJVR19JUlEgPSAxIDw8IDEsCi0JREVCVUdfQkggPSAxIDw8IDIsCi0JREVCVUdfUlggPSAxIDw8IDMsCi0JREVCVUdfUlhfQ09OVEVOVCA9IDEgPDwgNSwKLQlERUJVR19UWCA9IDEgPDwgNiwKLQlERUJVR19UWF9DT05URU5UID0gMSA8PCA4LAotCURFQlVHX1RYQlVGRkVSID0gMSA8PCA5LAotCURFQlVHX1FVRVVFID0gMSA8PCAxMCwKLQlERUJVR19CT09UID0gMSA8PCAxMSwKLQlERUJVR19QU00gPSAxIDw8IDEyLAotCURFQlVHX0FMTCA9IH4wLAotfTsKLQotI2RlZmluZSBERUJVR19MRVZFTCBERUJVR19OT05FCi0vKiAjZGVmaW5lIERFQlVHX0xFVkVMIERFQlVHX0FMTCAqLwotLyogI2RlZmluZSBERUJVR19MRVZFTCAoREVCVUdfVFggfCBERUJVR19SWCB8IERFQlVHX0lSUSkgKi8KLS8qICNkZWZpbmUgREVCVUdfTEVWRUwgKERFQlVHX1RYIHwgREVCVUdfTUVNUkVHSU9OIHwgREVCVUdfUVVFVUUpICovCi0vKiAjZGVmaW5lIERFQlVHX0xFVkVMIChERUJVR19NRU1SRUdJT04gfCBERUJVR19RVUVVRSkgKi8KLQotI2RlZmluZSBzdGxjNDV4eF9lcnJvcihmbXQsIGFyZy4uLikgXAotCXByaW50ayhLRVJOX0VSUiBEUklWRVJfUFJFRklYICJFUlJPUiAiIGZtdCAiXG4iLCAjI2FyZykKLQotI2RlZmluZSBzdGxjNDV4eF93YXJuaW5nKGZtdCwgYXJnLi4uKSBcCi0JcHJpbnRrKEtFUk5fV0FSTklORyBEUklWRVJfUFJFRklYICJXQVJOSU5HICIgZm10ICJcbiIsICMjYXJnKQotCi0jZGVmaW5lIHN0bGM0NXh4X2luZm8oZm10LCBhcmcuLi4pIFwKLQlwcmludGsoS0VSTl9JTkZPIERSSVZFUl9QUkVGSVggZm10ICJcbiIsICMjYXJnKQotCi0jZGVmaW5lIHN0bGM0NXh4X2RlYnVnKGxldmVsLCBmbXQsIGFyZy4uLikgXAotCWRvIHsgXAotCQlpZiAobGV2ZWwgJiBERUJVR19MRVZFTCkgXAotCQkJcHJpbnRrKEtFUk5fREVCVUcgRFJJVkVSX1BSRUZJWCBmbXQgIlxuIiwgIyNhcmcpOyBcCi0JfSB3aGlsZSAoMCkKLQotI2RlZmluZSBzdGxjNDV4eF9kdW1wKGxldmVsLCBidWYsIGxlbikJCVwKLQlkbyB7IFwKLQkJaWYgKGxldmVsICYgREVCVUdfTEVWRUwpIFwKLQkJCXByaW50X2hleF9kdW1wKEtFUk5fREVCVUcsICIiLCBEVU1QX1BSRUZJWF9PRkZTRVQsIFwKLQkJCQkgICAgICAgMTYsIDEsIGJ1ZiwgbGVuLCAxKTsJCVwKLQl9IHdoaWxlICgwKQotCi0jZGVmaW5lIE1BQzJTVFIoYSkgKChhKVswXSwgKGEpWzFdLCAoYSlbMl0sIChhKVszXSwgKGEpWzRdLCAoYSlbNV0pCi0jZGVmaW5lIE1BQ1NUUiAiJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMngiCi0KLS8qIEJpdCAxNSBpcyByZWFkL3dyaXRlIGJpdDsgT04gPSBSRUFELCBPRkYgPSBXUklURSAqLwotI2RlZmluZSBBRERSX1JFQURfQklUXzE1ICAweDgwMDAKLQotI2RlZmluZSBTUElfQURSU19BUk1fSU5URVJSVVBUUyAgICAgMHgwMAotI2RlZmluZSBTUElfQURSU19BUk1fSU5UX0VOCSAgICAweDA0Ci0KLSNkZWZpbmUgU1BJX0FEUlNfSE9TVF9JTlRFUlJVUFRTICAgIDB4MDgKLSNkZWZpbmUgU1BJX0FEUlNfSE9TVF9JTlRfRU4JICAgIDB4MGMKLSNkZWZpbmUgU1BJX0FEUlNfSE9TVF9JTlRfQUNLCSAgICAweDEwCi0KLSNkZWZpbmUgU1BJX0FEUlNfR0VOX1BVUlBfMSAgIAkgICAgMHgxNAotI2RlZmluZSBTUElfQURSU19HRU5fUFVSUF8yICAgCSAgICAweDE4Ci0KLS8qIGhpZ2ggd29yZCAqLwotI2RlZmluZSBTUElfQURSU19ERVZfQ1RSTF9TVEFUICAgICAgMHgyNgotCi0jZGVmaW5lIFNQSV9BRFJTX0RNQV9EQVRBICAgICAgCSAgICAweDI4Ci0KLSNkZWZpbmUgU1BJX0FEUlNfRE1BX1dSSVRFX0NUUkwgICAgIDB4MmMKLSNkZWZpbmUgU1BJX0FEUlNfRE1BX1dSSVRFX0xFTiAgICAgIDB4MmUKLSNkZWZpbmUgU1BJX0FEUlNfRE1BX1dSSVRFX0JBU0UgICAgIDB4MzAKLQotI2RlZmluZSBTUElfQURSU19ETUFfUkVBRF9DVFJMICAgICAgMHgzNAotI2RlZmluZSBTUElfQURSU19ETUFfUkVBRF9MRU4gICAgICAgMHgzNgotI2RlZmluZSBTUElfQURSU19ETUFfUkVBRF9CQVNFICAgICAgMHgzOAotCi0jZGVmaW5lIFNQSV9DVFJMX1NUQVRfSE9TVF9PVkVSUklERSAweDgwMDAKLSNkZWZpbmUgU1BJX0NUUkxfU1RBVF9TVEFSVF9IQUxURUQgIDB4NDAwMAotI2RlZmluZSBTUElfQ1RSTF9TVEFUX1JBTV9CT09UICAgICAgMHgyMDAwCi0jZGVmaW5lIFNQSV9DVFJMX1NUQVRfSE9TVF9SRVNFVCAgICAweDEwMDAKLSNkZWZpbmUgU1BJX0NUUkxfU1RBVF9IT1NUX0NQVV9FTiAgIDB4MDgwMAotCi0jZGVmaW5lIFNQSV9ETUFfV1JJVEVfQ1RSTF9FTkFCTEUgICAweDAwMDEKLSNkZWZpbmUgU1BJX0RNQV9SRUFEX0NUUkxfRU5BQkxFICAgIDB4MDAwMQotI2RlZmluZSBIT1NUX0FMTE9XRUQgICAgICAgICAgICAgICAgKDEgPDwgNykKLQotI2RlZmluZSBGSVJNV0FSRV9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwMAotCi0jZGVmaW5lIFNQSV9USU1FT1VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDAgICAgICAgICAvKiBtc2VjICovCi0KLSNkZWZpbmUgU1BJX01BWF9UWF9QQUNLRVRTICAgICAgICAgICAgICAgICAgICAgIDMyCi0KLSNkZWZpbmUgU1BJX01BWF9QQUNLRVRfU0laRSAgICAgICAgICAgICAgICAgICAgIDMyNzY3Ci0KLSNkZWZpbmUgU1BJX1RBUkdFVF9JTlRfV0FLRVVQICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgU1BJX1RBUkdFVF9JTlRfU0xFRVAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKLSNkZWZpbmUgU1BJX1RBUkdFVF9JTlRfUkRET05FICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKLQotI2RlZmluZSBTUElfVEFSR0VUX0lOVF9DVFMgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNDAwMAotI2RlZmluZSBTUElfVEFSR0VUX0lOVF9EUiAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwODAwMAotCi0jZGVmaW5lIFNQSV9IT1NUX0lOVF9SRUFEWSAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCi0jZGVmaW5lIFNQSV9IT1NUX0lOVF9XUl9SRUFEWSAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCi0jZGVmaW5lIFNQSV9IT1NUX0lOVF9TV19VUERBVEUgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0Ci0jZGVmaW5lIFNQSV9IT1NUX0lOVF9VUERBVEUgICAgICAgICAgICAgICAgICAgICAweDEwMDAwMDAwCi0KLS8qIGNsZWFyIHRvIHNlbmQgKi8KLSNkZWZpbmUgU1BJX0hPU1RfSU5UX0NUUwkgICAgICAgICAgICAgICAgMHgwMDAwNDAwMAotCi0vKiBkYXRhIHJlYWR5ICovCi0jZGVmaW5lIFNQSV9IT1NUX0lOVF9EUgkgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA4MDAwCi0KLSNkZWZpbmUgU1BJX0hPU1RfSU5UU19ERUZBVUxUIFwKLQkoU1BJX0hPU1RfSU5UX1JFQURZIHwgU1BJX0hPU1RfSU5UX1VQREFURSB8IFNQSV9IT1NUX0lOVF9TV19VUERBVEUpCi0KLSNkZWZpbmUgVEFSR0VUX0JPT1RfU0xFRVAgNTAKLQotLyogVGhlIGZpcm13YXJlIGJ1ZmZlciBpcyBkaXZpZGVkIGludG8gdGhyZWUgYXJlYXM6Ci0gKgotICogbyBjb25maWcgYXJlYSAoZm9yIGNvbnRyb2wgY29tbWFuZHMpCi0gKiBvIHR4IGJ1ZmZlcgotICogbyByeCBidWZmZXIKLSAqLwotI2RlZmluZSBGSVJNV0FSRV9CVUZGRVJfU1RBUlQgMHgyMDIwMAotI2RlZmluZSBGSVJNV0FSRV9CVUZGRVJfRU5EIDB4MjdjNjAKLSNkZWZpbmUgRklSTVdBUkVfQlVGRkVSX0xFTiAoRklSTVdBUkVfQlVGRkVSX0VORCAtIEZJUk1XQVJFX0JVRkZFUl9TVEFSVCkKLSNkZWZpbmUgRklSTVdBUkVfTVRVIDMyNDAKLSNkZWZpbmUgRklSTVdBUkVfQ09ORklHX1BBWUxPQURfTEVOIDEwMjQKLSNkZWZpbmUgRklSTVdBUkVfQ09ORklHX1NUQVJUIEZJUk1XQVJFX0JVRkZFUl9TVEFSVAotI2RlZmluZSBGSVJNV0FSRV9DT05GSUdfTEVOIChzaXplb2Yoc3RydWN0IHNfbG1fY29udHJvbCkgKyBcCi0JCQkgICAgIEZJUk1XQVJFX0NPTkZJR19QQVlMT0FEX0xFTikKLSNkZWZpbmUgRklSTVdBUkVfQ09ORklHX0VORCAoRklSTVdBUkVfQ09ORklHX1NUQVJUICsgRklSTVdBUkVfQ09ORklHX0xFTiAtIDEpCi0jZGVmaW5lIEZJUk1XQVJFX1JYQlVGRkVSX0xFTiAoNSAqIEZJUk1XQVJFX01UVSArIDEwMjQpCi0jZGVmaW5lIEZJUk1XQVJFX1JYQlVGRkVSX1NUQVJUIChGSVJNV0FSRV9CVUZGRVJfRU5EIC0gRklSTVdBUkVfUlhCVUZGRVJfTEVOKQotI2RlZmluZSBGSVJNV0FSRV9SWEJVRkZFUl9FTkQgKEZJUk1XQVJFX1JYQlVGRkVSX1NUQVJUICsgXAotCQkJICAgICAgIEZJUk1XQVJFX1JYQlVGRkVSX0xFTiAtIDEpCi0jZGVmaW5lIEZJUk1XQVJFX1RYQlVGRkVSX1NUQVJUIChGSVJNV0FSRV9CVUZGRVJfU1RBUlQgKyBGSVJNV0FSRV9DT05GSUdfTEVOKQotI2RlZmluZSBGSVJNV0FSRV9UWEJVRkZFUl9MRU4gKEZJUk1XQVJFX0JVRkZFUl9MRU4gLSBGSVJNV0FSRV9DT05GSUdfTEVOIC0gXAotCQkJICAgICAgIEZJUk1XQVJFX1JYQlVGRkVSX0xFTikKLSNkZWZpbmUgRklSTVdBUkVfVFhCVUZGRVJfRU5EIChGSVJNV0FSRV9UWEJVRkZFUl9TVEFSVCArIFwKLQkJCSAgICAgICBGSVJNV0FSRV9UWEJVRkZFUl9MRU4gLSAxKQotCi0jZGVmaW5lIEZJUk1XQVJFX1RYQlVGRkVSX0hFQURFUiAxMDAKLSNkZWZpbmUgRklSTVdBUkVfVFhCVUZGRVJfVFJBSUxFUiA0Ci0KLS8qIEZJWE1FOiBjb21lIHVwIHdpdGggYSBwcm9wZXIgdmFsdWUgKi8KLSNkZWZpbmUgTUFYX0ZSQU1FX0xFTiAyNTAwCi0KLS8qIHVuaXQgaXMgbXMgKi8KLSNkZWZpbmUgVFhfRlJBTUVfTElGRVRJTUUgMjAwMAotI2RlZmluZSBUWF9USU1FT1VUIDQwMDAKLQotI2RlZmluZSBTVVBQT1JURURfQ0hBTk5FTFMgMTMKLQotLyogRklYTUUgKi8KLS8qICNkZWZpbmUgQ0hBTk5FTF9DQUxfTEVOIG9mZnNldG9mKHN0cnVjdCBzX2xtb19zY2FuLCBicmF0ZW1hc2spIC0gXCAqLwotLyogCW9mZnNldG9mKHN0cnVjdCBzX2xtb19zY2FuLCBjaGFubmVsKSAqLwotI2RlZmluZSBDSEFOTkVMX0NBTF9MRU4gMjkyCi0jZGVmaW5lIENIQU5ORUxfQ0FMX0FSUkFZX0xFTiAoU1VQUE9SVEVEX0NIQU5ORUxTICogQ0hBTk5FTF9DQUxfTEVOKQotLyogRklYTUUgKi8KLS8qICNkZWZpbmUgUlNTSV9DQUxfTEVOIHNpemVvZihzdHJ1Y3Qgc19sbW9fc2NhbikgLSBcICovCi0vKiAJb2Zmc2V0b2Yoc3RydWN0IHNfbG1vX3NjYW4sIHJzc2ljYWwpICovCi0jZGVmaW5lIFJTU0lfQ0FMX0xFTiA4Ci0jZGVmaW5lIFJTU0lfQ0FMX0FSUkFZX0xFTiAoU1VQUE9SVEVEX0NIQU5ORUxTICogUlNTSV9DQUxfTEVOKQotCi1zdHJ1Y3Qgc19kbWFfcmVncyB7Ci0JdW5zaWduZWQgc2hvcnQgY21kOwotCXVuc2lnbmVkIHNob3J0IGxlbjsKLQl1bnNpZ25lZCBsb25nIGFkZHI7Ci19OwotCi1zdHJ1Y3Qgc3RsYzQ1eHhfaWVfdGltIHsKLQl1OCBkdGltX2NvdW50OwotCXU4IGR0aW1fcGVyaW9kOwotCXU4IGJtYXBfY29udHJvbDsKLQl1OCBwdmJtYXBbMjUxXTsKLX07Ci0KLXN0cnVjdCB0eGJ1ZmZlciB7Ci0JLyogY2FuIGJlIHJlbW92ZWQgd2hlbiBzd2l0Y2hlZCB0byBza2IgcXVldWUgKi8KLQlzdHJ1Y3QgbGlzdF9oZWFkIHR4X2xpc3Q7Ci0KLQlzdHJ1Y3QgbGlzdF9oZWFkIGJ1ZmZlcl9saXN0OwotCi0JaW50IHN0YXJ0OwotCWludCBmcmFtZV9zdGFydDsKLQlpbnQgZW5kOwotCi0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQl1MzIgaGFuZGxlOwotCi0JYm9vbCBzdGF0dXNfbmVlZGVkOwotCi0JaW50IGhlYWRlcl9sZW47Ci0KLQkvKiB1bml0IGppZmZpZXMgKi8KLQl1bnNpZ25lZCBsb25nIGxpZmV0aW1lOwotfTsKLQotZW51bSBmd19zdGF0ZSB7Ci0JRldfU1RBVEVfT0ZGLAotCUZXX1NUQVRFX0JPT1RJTkcsCi0JRldfU1RBVEVfUkVBRFksCi0JRldfU1RBVEVfUkVTRVQsCi0JRldfU1RBVEVfUkVTRVRUSU5HLAotfTsKLQotc3RydWN0IHN0bGM0NXh4IHsKLQlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodzsKLQlzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpOwotCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOwotCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrX3Jlc2V0OwotCXN0cnVjdCBkZWxheWVkX3dvcmsgd29ya190eF90aW1lb3V0OwotCXN0cnVjdCBtdXRleCBtdXRleDsKLQlzdHJ1Y3QgY29tcGxldGlvbiBmd19jb21wOwotCi0KLQl1OCBic3NpZFtFVEhfQUxFTl07Ci0JdTggbWFjX2FkZHJbRVRIX0FMRU5dOwotCWludCBjaGFubmVsOwotCi0JdTggKmNhbF9yc3NpOwotCXU4ICpjYWxfY2hhbm5lbHM7Ci0KLQllbnVtIGZ3X3N0YXRlIGZ3X3N0YXRlOwotCi0Jc3BpbmxvY2tfdCB0eF9sb2NrOwotCi0JLyogcHJvdGVjdGVkIGJ5IHR4X2xvY2sgKi8KLQlzdHJ1Y3QgbGlzdF9oZWFkIHR4YnVmZmVyOwotCi0JLyogcHJvdGVjdGVkIGJ5IHR4X2xvY2sgKi8KLQlzdHJ1Y3QgbGlzdF9oZWFkIHR4X3BlbmRpbmc7Ci0KLQkvKiBwcm90ZWN0ZWQgYnkgdHhfbG9jayAqLwotCWludCB0eF9xdWV1ZV9zdG9wcGVkOwotCi0JLyogcHJvdGVjdGVkIGJ5IG11dGV4ICovCi0Jc3RydWN0IGxpc3RfaGVhZCB0eF9zZW50OwotCi0JaW50IHR4X2ZyYW1lczsKLQotCXU4ICpmdzsKLQlpbnQgZndfbGVuOwotCi0JYm9vbCBwc207Ci0JYm9vbCBhc3NvY2lhdGVkOwotCWludCBhaWQ7Ci0JYm9vbCBwc3BvbGxpbmc7Ci19OwotCi0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zdGxjNDV4eC9zdGxjNDV4eF9sbWFjLmggYi9kcml2ZXJzL3N0YWdpbmcvc3RsYzQ1eHgvc3RsYzQ1eHhfbG1hYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZjVkYjgwLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9zdGxjNDV4eC9zdGxjNDV4eF9sbWFjLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0MzQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKiAgVGhpcyBpcyB0aGUgTE1BQyBBUEkgaW50ZXJmYWNlIGhlYWRlciBmaWxlIGZvciBTVExDNDU2MC4gICAgICAgIAkqCi0qICBDb3B5cmlnaHQgKEMpIDIwMDcgQ29uZXhhbnQgU3lzdGVtcywgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0qICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yICAgICAgICAqCi0qICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAgICAgICAqCi0qICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgkqCi0qICBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAqCi0qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0qICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAgICAqCi0qICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgkqCi0qICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlICAgICAgICAqCi0qICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAqCi0qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0qICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAqCi0qICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4qCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jaWZuZGVmIF9fbG1hY19oX18KLSNkZWZpbmUgX19sbWFjX2hfXwotCi0jZGVmaW5lIExNX1RPUF9WQVJJQU5UICAgICAgMHgwNTA2Ci0jZGVmaW5lIExNX0JPVFRPTV9WQVJJQU5UICAgMHgwNTA2Ci0KLS8qCi0gKiBMTUFDIC0gVU1BQyBpbnRlcmZhY2UgZGVmaW5pdGlvbjoKLSAqLwotCi0jZGVmaW5lIExNX0ZMQUdfQ09OVFJPTCAgICAgMHg4MDAwCi0jZGVmaW5lIExNX0ZMQUdfQUxJR04gICAgICAgMHg0MDAwCi0KLSNkZWZpbmUgTE1fQ1RSTF9PUFNFVCAgICAgICAweDAwMDEKLQotI2RlZmluZSBMTV9PVVRfUFJPTUlTQyAgICAgIDB4MDAwMQotI2RlZmluZSBMTV9PVVRfVElNRVNUQU1QICAgIDB4MDAwMgotI2RlZmluZSBMTV9PVVRfU0VRTlIgICAgICAgIDB4MDAwNAotI2RlZmluZSBMTV9PVVRfQlVSU1QgICAgICAgIDB4MDAxMAotI2RlZmluZSBMTV9PVVRfTk9DQU5DRUwgICAgIDB4MDAyMAotI2RlZmluZSBMTV9PVVRfQ0xFQVJUSU0gICAgIDB4MDA0MAotI2RlZmluZSBMTV9PVVRfSElUQ0hISUtFICAgIDB4MDA4MAotI2RlZmluZSBMTV9PVVRfQ09NUFJFU1MgICAgIDB4MDEwMAotI2RlZmluZSBMTV9PVVRfQ09OQ0FUICAgICAgIDB4MDIwMAotI2RlZmluZSBMTV9PVVRfUENTX0FDQ0VQVCAgIDB4MDQwMAotI2RlZmluZSBMTV9PVVRfV0FJVEVPU1AgICAgIDB4MDgwMAotCi0KLSNkZWZpbmUgTE1fQUxPRlRfU1AgICAgICAgICAweDEwCi0jZGVmaW5lIExNX0FMT0ZUX0NUUyAgICAgICAgMHgyMAotI2RlZmluZSBMTV9BTE9GVF9SVFMgICAgICAgIDB4NDAKLSNkZWZpbmUgTE1fQUxPRlRfTUFTSyAgICAgICAweDFmCi0jZGVmaW5lIExNX0FMT0ZUX1JBVEUgICAgICAgMHgwZgotCi0jZGVmaW5lIExNX0lOX0ZDU19HT09EICAgICAgMHgwMDAxCi0jZGVmaW5lIExNX0lOX01BVENIX01BQyAgICAgMHgwMDAyCi0jZGVmaW5lIExNX0lOX01DQkMgICAgICAgICAgMHgwMDA0Ci0jZGVmaW5lIExNX0lOX0JFQUNPTiAgICAgICAgMHgwMDA4Ci0jZGVmaW5lIExNX0lOX01BVENIX0JTUyAgICAgMHgwMDEwCi0jZGVmaW5lIExNX0lOX0JDQVNUX0JTUyAgICAgMHgwMDIwCi0jZGVmaW5lIExNX0lOX0RBVEEgICAgICAgICAgMHgwMDQwCi0jZGVmaW5lIExNX0lOX1RSVU5DQVRFRCAgICAgMHgwMDgwCi0KLSNkZWZpbmUgTE1fSU5fVFJBTlNQQVJFTlQgICAweDAyMDAKLQotI2RlZmluZSBMTV9RVUVVRV9CRUFDT04gICAgIDAKLSNkZWZpbmUgTE1fUVVFVUVfU0NBTiAgICAgICAxCi0jZGVmaW5lIExNX1FVRVVFX01HVCAgICAgICAgMgotI2RlZmluZSBMTV9RVUVVRV9NQ0JDICAgICAgIDMKLSNkZWZpbmUgTE1fUVVFVUVfREFUQSAgICAgICA0Ci0jZGVmaW5lIExNX1FVRVVFX0RBVEEwICAgICAgNAotI2RlZmluZSBMTV9RVUVVRV9EQVRBMSAgICAgIDUKLSNkZWZpbmUgTE1fUVVFVUVfREFUQTIgICAgICA2Ci0jZGVmaW5lIExNX1FVRVVFX0RBVEEzICAgICAgNwotCi0jZGVmaW5lIExNX1NFVFVQX0lORlJBICAgICAgICAgIDB4MDAwMQotI2RlZmluZSBMTV9TRVRVUF9JQlNTICAgICAgICAgICAweDAwMDIKLSNkZWZpbmUgTE1fU0VUVVBfVFJBTlNQQVJFTlQgICAgMHgwMDA4Ci0jZGVmaW5lIExNX1NFVFVQX1BST01JU0NVT1VTICAgIDB4MDAxMAotI2RlZmluZSBMTV9TRVRVUF9ISUJFUk5BVEUgICAgICAweDAwMjAKLSNkZWZpbmUgTE1fU0VUVVBfTk9BQ0sgICAgICAgICAgMHgwMDQwCi0jZGVmaW5lIExNX1NFVFVQX1JYX0RJU0FCTEVEICAgIDB4MDA4MAotCi0jZGVmaW5lIExNX0FOVEVOTkFfMCAgICAgICAgICAgIDAKLSNkZWZpbmUgTE1fQU5URU5OQV8xICAgICAgICAgICAgMQotI2RlZmluZSBMTV9BTlRFTk5BX0RJVkVSU0lUWSAgICAyCi0KLSNkZWZpbmUgTE1fVFhfRkFJTEVEICAgICAgICAgICAgMHgwMDAxCi0jZGVmaW5lIExNX1RYX1BTTSAgICAgICAgICAgICAgIDB4MDAwMgotI2RlZmluZSBMTV9UWF9QU01fQ0FOQ0VMTEVECTB4MDAwNAotCi0jZGVmaW5lIExNX1NDQU5fRVhJVCAgICAgICAgICAgIDB4MDAwMQotI2RlZmluZSBMTV9TQ0FOX1RSQVAgICAgICAgICAgICAweDAwMDIKLSNkZWZpbmUgTE1fU0NBTl9BQ1RJVkUgICAgICAgICAgMHgwMDA0Ci0jZGVmaW5lIExNX1NDQU5fRklMVEVSICAgICAgICAgIDB4MDAwOAotCi0jZGVmaW5lIExNX1BTTSAgICAgICAgICAgICAgICAgIDB4MDAwMQotI2RlZmluZSBMTV9QU01fRFRJTSAgICAgICAgICAgICAweDAwMDIKLSNkZWZpbmUgTE1fUFNNX01DQkMgICAgICAgICAgICAgMHgwMDA0Ci0jZGVmaW5lIExNX1BTTV9DSEVDS1NVTSAgICAgICAgIDB4MDAwOAotI2RlZmluZSBMTV9QU01fU0tJUF9NT1JFX0RBVEEgICAweDAwMTAKLSNkZWZpbmUgTE1fUFNNX0JFQUNPTl9USU1FT1VUICAgMHgwMDIwCi0jZGVmaW5lIExNX1BTTV9IRk9TTEVFUCAgICAgICAgIDB4MDA0MAotI2RlZmluZSBMTV9QU01fQVVUT1NXSVRDSF9TTEVFUCAweDAwODAKLSNkZWZpbmUJTE1fUFNNX0xQSVQJCTB4MDEwMAotI2RlZmluZSBMTV9QU01fQkZfVUNBU1RfU0tJUCAgICAweDAyMDAKLSNkZWZpbmUgTE1fUFNNX0JGX01DQVNUX1NLSVAgICAgMHgwNDAwCi0KLS8qIGhmb3NsZWVwICovCi0jZGVmaW5lIExNX1BTTV9TTEVFUF9PUFRJT05fTUFTSyAoTE1fUFNNX0FVVE9TV0lUQ0hfU0xFRVAgfCBMTV9QU01fSEZPU0xFRVApCi0jZGVmaW5lIExNX1BTTV9TTEVFUF9PUFRJT05fU0hJRlQgICAgICAgNgotLyogaGZvc2xlZXBlbmQgKi8KLSNkZWZpbmUgTE1fUFNNX0JGX09QVElPTl9NQVNLIChMTV9QU01fQkZfTUNBU1RfU0tJUCB8IExNX1BTTV9CRl9VQ0FTVF9TS0lQKQotI2RlZmluZSBMTV9QU01fQkZfT1BUSU9OX1NISUZUICA5Ci0KLQotI2RlZmluZSBMTV9QUklWQUNDX1dFUCAgICAgICAgICAweDAxCi0jZGVmaW5lIExNX1BSSVZBQ0NfVEtJUCAgICAgICAgIDB4MDIKLSNkZWZpbmUgTE1fUFJJVkFDQ19NSUNIQUVMICAgICAgMHgwNAotI2RlZmluZSBMTV9QUklWQUNDX0NDWF9LUCAgICAgICAweDA4Ci0jZGVmaW5lIExNX1BSSVZBQ0NfQ0NYX01JQyAgICAgIDB4MTAKLSNkZWZpbmUgTE1fUFJJVkFDQ19BRVNfQ0NNUCAgICAgMHgyMAotCi0vKiBzaXplIG9mIHNfbG1fZGVzY3IgaW4gd29yZHMgKi8KLSNkZWZpbmUgTE1fREVTQ1JfU0laRV9XT1JEUyAgICAgMTEKLQotI2lmbmRlZiBfX0FTU0VNQkxFUl9fCi0KLWVudW0gewotICAgIExNX01PREVfQ0xJRU5UID0gMCwKLSAgICBMTV9NT0RFX0FQCi19OwotCi1zdHJ1Y3Qgc19sbV9kZXNjciB7Ci0gICAgdWludDE2X3QgbW9kZXM7Ci0gICAgdWludDE2X3QgZmxhZ3M7Ci0gICAgdWludDMyX3QgYnVmZmVyX3N0YXJ0OwotICAgIHVpbnQzMl90IGJ1ZmZlcl9lbmQ7Ci0gICAgdWludDhfdCBoZWFkZXI7Ci0gICAgdWludDhfdCB0cmFpbGVyOwotICAgIHVpbnQ4X3QgdHhfcXVldWVzOwotICAgIHVpbnQ4X3QgdHhfZGVwdGg7Ci0gICAgdWludDhfdCBwcml2YWN5OwotICAgIHVpbnQ4X3Qgcnhfa2V5Y2FjaGU7Ci0gICAgdWludDhfdCB0aW1fc2l6ZTsKLSAgICB1aW50OF90IHBhZDE7Ci0gICAgdWludDhfdCByYXRlc1sxNl07Ci0gICAgdWludDMyX3QgbGluazsKLQl1aW50MTZfdCBtdHU7Ci19OwotCi0KLXN0cnVjdCBzX2xtX2NvbnRyb2wgewotICAgIHVpbnQxNl90IGZsYWdzOwotICAgIHVpbnQxNl90IGxlbmd0aDsKLSAgICB1aW50MzJfdCBoYW5kbGU7Ci0gICAgdWludDE2X3Qgb2lkOwotICAgIHVpbnQxNl90IHBhZDsKLSAgICAvKiB1aW50OF90IGRhdGFbXTsgKi8KLX07Ci0KLWVudW0gewotICAgIExNX1BSSVZfTk9ORSA9IDAsCi0gICAgTE1fUFJJVl9XRVAsCi0gICAgTE1fUFJJVl9US0lQLAotICAgIExNX1BSSVZfVEtJUE1JQ0hBRUwsCi0gICAgTE1fUFJJVl9DQ1hfV0VQTUlDLAotICAgIExNX1BSSVZfQ0NYX0tQTUlDLAotICAgIExNX1BSSVZfQ0NYX0tQLAotICAgIExNX1BSSVZfQUVTX0NDTVAKLX07Ci0KLWVudW0gewotICAgIExNX0RFQ1JZUFRfTk9ORSwKLSAgICBMTV9ERUNSWVBUX09LLAotICAgIExNX0RFQ1JZUFRfTk9LRVksCi0gICAgTE1fREVDUllQVF9OT01JQ0hBRUwsCi0gICAgTE1fREVDUllQVF9OT0NLSVBNSUMsCi0gICAgTE1fREVDUllQVF9GQUlMX1dFUCwKLSAgICBMTV9ERUNSWVBUX0ZBSUxfVEtJUCwKLSAgICBMTV9ERUNSWVBUX0ZBSUxfTUlDSEFFTCwKLSAgICBMTV9ERUNSWVBUX0ZBSUxfQ0tJUEtQLAotICAgIExNX0RFQ1JZUFRfRkFJTF9DS0lQTUlDLAotICAgIExNX0RFQ1JZUFRfRkFJTF9BRVNDQ01QCi19OwotCi1zdHJ1Y3Qgc19sbV9kYXRhX291dCB7Ci0gICAgdWludDE2X3QgZmxhZ3M7Ci0gICAgdWludDE2X3QgbGVuZ3RoOwotICAgIHVpbnQzMl90IGhhbmRsZTsKLSAgICB1aW50MTZfdCBhaWQ7Ci0gICAgdWludDhfdCBydHNfcmV0cmllczsKLSAgICB1aW50OF90IHJldHJpZXM7Ci0gICAgdWludDhfdCBhbG9mdFs4XTsKLSAgICB1aW50OF90IGFsb2Z0X2N0cmw7Ci0gICAgdWludDhfdCBjcnlwdF9vZmZzZXQ7Ci0gICAgdWludDhfdCBrZXl0eXBlOwotICAgIHVpbnQ4X3Qga2V5bGVuOwotICAgIHVpbnQ4X3Qga2V5WzE2XTsKLSAgICB1aW50OF90IHF1ZXVlOwotICAgIHVpbnQ4X3QgYmFja2xvZzsKLSAgICB1aW50MTZfdCBkdXJhdGlvbnNbNF07Ci0gICAgdWludDhfdCBhbnRlbm5hOwotICAgIHVpbnQ4X3QgY3RzOwotICAgIGludDE2X3QgcG93ZXI7Ci0gICAgdWludDhfdCBwYWRbMl07Ci0gICAgLyp1aW50OF90IGRhdGFbXTsqLwotfTsKLQotI2RlZmluZSBMTV9SQ1BJX0lOVkFMSUQgICAgICAgICAoMHhmZikKLQotc3RydWN0IHNfbG1fZGF0YV9pbiB7Ci0gICAgdWludDE2X3QgZmxhZ3M7Ci0gICAgdWludDE2X3QgbGVuZ3RoOwotICAgIHVpbnQxNl90IGZyZXF1ZW5jeTsKLSAgICB1aW50OF90IGFudGVubmE7Ci0gICAgdWludDhfdCByYXRlOwotICAgIHVpbnQ4X3QgcmNwaTsKLSAgICB1aW50OF90IHNxOwotICAgIHVpbnQ4X3QgZGVjcnlwdDsKLSAgICB1aW50OF90IHJzc2lfcmF3OwotICAgIHVpbnQzMl90IGNsb2NrWzJdOwotICAgIC8qdWludDhfdCBkYXRhW107Ki8KLX07Ci0KLXVuaW9uIHVfbG1fZGF0YSB7Ci0gICAgc3RydWN0IHNfbG1fZGF0YV9vdXQgb3V0OwotICAgIHN0cnVjdCBzX2xtX2RhdGFfaW4gaW47Ci19OwotCi1lbnVtIHsKLSAgICBMTV9PSURfU0VUVVAJPSAwLAotICAgIExNX09JRF9TQ0FOCQk9IDEsCi0gICAgTE1fT0lEX1RSQVAJCT0gMiwKLSAgICBMTV9PSURfRURDRgkJPSAzLAotICAgIExNX09JRF9LRVlDQUNIRQk9IDQsCi0gICAgTE1fT0lEX1BTTQkJPSA2LAotICAgIExNX09JRF9UWENBTkNFTAk9IDcsCi0gICAgTE1fT0lEX1RYCQk9IDgsCi0gICAgTE1fT0lEX0JVUlNUCT0gOSwKLSAgICBMTV9PSURfU1RBVFMJPSAxMCwKLSAgICBMTV9PSURfTEVECQk9IDEzLAotICAgIExNX09JRF9USU1FUgk9IDE1LAotICAgIExNX09JRF9OQVYJCT0gMjAsCi0gICAgTE1fT0lEX1BDUwkJPSAyMiwKLSAgICBMTV9PSURfQlRfQkFMQU5DRVIgID0gMjgsCi0gICAgTE1fT0lEX0dST1VQX0FERFJFU1NfVEFCTEUJPSAzMCwKLSAgICBMTV9PSURfQVJQVEFCTEUgICAgID0gMzEsCi0gICAgTE1fT0lEX0JUX09QVElPTlMgPSAzNQotfTsKLQotZW51bSB7Ci0gICAgTE1fRlJPTlRFTkRfVU5LTk9XTiA9IDAsCi0gICAgTE1fRlJPTlRFTkRfRFVFVFRFMywKLSAgICBMTV9GUk9OVEVORF9EVUVUVEUyLAotICAgIExNX0ZST05URU5EX0ZSSVNCRUUsCi0gICAgTE1fRlJPTlRFTkRfQ1JPU1NCT1csCi0gICAgTE1fRlJPTlRFTkRfTE9OR0JPVwotfTsKLQotCi0jZGVmaW5lIElOVkFMSURfTFBGX0JBTkRXSURUSCAgIDB4ZmZmZgotI2RlZmluZSBJTlZBTElEX09TQ19TVEFSVF9ERUxBWSAweGZmZmYKLQotc3RydWN0IHNfbG1vX3NldHVwIHsKLSAgICB1aW50MTZfdCBmbGFnczsKLSAgICB1aW50OF90ICBtYWNhZGRyWzZdOwotICAgIHVpbnQ4X3QgIGJzc2lkWzZdOwotICAgIHVpbnQ4X3QgIGFudGVubmE7Ci0gICAgdWludDhfdCAgcnhfYWxpZ247Ci0gICAgdWludDMyX3QgcnhfYnVmZmVyOwotICAgIHVpbnQxNl90IHJ4X210dTsKLSAgICB1aW50MTZfdCBmcm9udGVuZDsKLSAgICB1aW50MTZfdCB0aW1lb3V0OwotICAgIHVpbnQxNl90IHRydW5jYXRlOwotICAgIHVpbnQzMl90IGJyYXRlbWFzazsKLSAgICB1aW50OF90ICBzYnNzX29mZnNldDsKLSAgICB1aW50OF90ICBtY2FzdF93aW5kb3c7Ci0gICAgdWludDhfdCAgcnhfcnNzaV90aHJlc2hvbGQ7Ci0gICAgdWludDhfdCAgcnhfZWRfdGhyZXNob2xkOwotICAgIHVpbnQzMl90IHJlZl9jbG9jazsKLSAgICB1aW50MTZfdCBscGZfYmFuZHdpZHRoOwotICAgIHVpbnQxNl90IG9zY19zdGFydF9kZWxheTsKLX07Ci0KLQotc3RydWN0IHNfbG1vX3NjYW4gewotICAgIHVpbnQxNl90IGZsYWdzOwotICAgIHVpbnQxNl90IGR3ZWxsOwotICAgIHVpbnQ4X3QgY2hhbm5lbFsyOTJdOwotICAgIHVpbnQzMl90IGJyYXRlbWFzazsKLSAgICB1aW50OF90ICBhbG9mdFs4XTsKLSAgICB1aW50OF90ICByc3NpY2FsWzhdOwotfTsKLQotCi1lbnVtIHsKLSAgICBMTV9UUkFQX1NDQU4gPSAwLAotICAgIExNX1RSQVBfVElNRVIsCi0gICAgTE1fVFJBUF9CRUFDT05fVFgsCi0gICAgTE1fVFJBUF9GQUFfUkFESU9fT04sCi0gICAgTE1fVFJBUF9GQUFfUkFESU9fT0ZGLAotICAgIExNX1RSQVBfUkFEQVIsCi0gICAgTE1fVFJBUF9OT19CRUFDT04sCi0gICAgTE1fVFJBUF9UQlRULAotICAgIExNX1RSQVBfU0NPX0VOVEVSLAotICAgIExNX1RSQVBfU0NPX0VYSVQKLX07Ci0KLXN0cnVjdCBzX2xtb190cmFwIHsKLSAgICB1aW50MTZfdCBldmVudDsKLSAgICB1aW50MTZfdCBmcmVxdWVuY3k7Ci19OwotCi1zdHJ1Y3Qgc19sbW9fdGltZXIgewotICAgIHVpbnQzMl90IGludGVydmFsOwotfTsKLQotc3RydWN0IHNfbG1vX25hdiB7Ci0gICAgdWludDMyX3QgcGVyaW9kOwotfTsKLQotCi1zdHJ1Y3Qgc19sbW9fZWRjZl9xdWV1ZTsKLQotc3RydWN0IHNfbG1vX2VkY2YgewotICAgIHVpbnQ4X3QgIGZsYWdzOwotICAgIHVpbnQ4X3QgIHNsb3R0aW1lOwotICAgIHVpbnQ4X3QgIHNpZnM7Ci0gICAgdWludDhfdCAgZW9mcGFkOwotICAgIHN0cnVjdCBzX2xtb19lZGNmX3F1ZXVlIHsKLQkgICAgdWludDhfdCAgYWlmczsKLQkgICAgdWludDhfdCAgcGFkMDsKLQkgICAgdWludDE2X3QgY3dtaW47Ci0JICAgIHVpbnQxNl90IGN3bWF4OwotCSAgICB1aW50MTZfdCB0eG9wOwotICAgIH0gcXVldWVzWzhdOwotICAgIHVpbnQ4X3QgIG1hcHBpbmdbNF07Ci0gICAgdWludDE2X3QgbWF4YnVyc3Q7Ci0gICAgdWludDE2X3Qgcm91bmRfdHJpcF9kZWxheTsKLX07Ci0KLXN0cnVjdCBzX2xtb19rZXljYWNoZSB7Ci0gICAgdWludDhfdCBlbnRyeTsKLSAgICB1aW50OF90IGtleWlkOwotICAgIHVpbnQ4X3QgYWRkcmVzc1s2XTsKLSAgICB1aW50OF90IHBhZFsyXTsKLSAgICB1aW50OF90IGtleXR5cGU7Ci0gICAgdWludDhfdCBrZXlsZW47Ci0gICAgdWludDhfdCBrZXlbMjRdOwotfTsKLQotCi1zdHJ1Y3Qgc19sbV9pbnRlcnZhbDsKLQotc3RydWN0IHNfbG1vX3BzbSB7Ci0gICAgdWludDE2X3QgICAgZmxhZ3M7Ci0gICAgdWludDE2X3QgICAgYWlkOwotICAgIHN0cnVjdCBzX2xtX2ludGVydmFsIHsKLQkgICAgdWludDE2X3QgaW50ZXJ2YWw7Ci0JICAgIHVpbnQxNl90IHBlcmlvZHM7Ci0gICAgfSBpbnRlcnZhbHNbNF07Ci0gICAgLyogdWludDE2X3QgICAgcGFkOyAqLwotICAgIHVpbnQ4X3QgICAgIGJlYWNvbl9yY3BpX3NraXBfbWF4OwotICAgIHVpbnQ4X3QgICAgIHJjcGlfZGVsdGFfdGhyZXNob2xkOwotICAgIHVpbnQ4X3QgICAgIG5yOwotICAgIHVpbnQ4X3QgICAgIGV4Y2x1ZGVbMV07Ci19OwotCi0jZGVmaW5lIE1DX0ZJTFRFUl9BRERSRVNTX05VTSAgIDQKLQotc3RydWN0IHNfbG1vX2dyb3VwX2FkZHJlc3NfdGFibGUgewotICAgIHVpbnQxNl90ICAgIGZpbHRlcl9lbmFibGU7Ci0gICAgdWludDE2X3QgICAgbnVtX2FkZHJlc3M7Ci0gICAgdWludDhfdCAgICAgbWFjYWRkcl9saXN0W01DX0ZJTFRFUl9BRERSRVNTX05VTV1bNl07Ci19OwotCi1zdHJ1Y3Qgc19sbW9fdHhjYW5jZWwgewotICAgIHVpbnQzMl90IGFkZHJlc3NbMV07Ci19OwotCi0KLXN0cnVjdCBzX2xtb190eCB7Ci0gICAgdWludDhfdCAgZmxhZ3M7Ci0gICAgdWludDhfdCAgcmV0cmllczsKLSAgICB1aW50OF90ICByY3BpOwotICAgIHVpbnQ4X3QgIHNxOwotICAgIHVpbnQxNl90IHNlcWN0cmw7Ci0gICAgdWludDhfdCAgYW50ZW5uYTsKLSAgICB1aW50OF90ICBwYWQ7Ci19OwotCi1zdHJ1Y3Qgc19sbW9fYnVyc3QgewotICAgIHVpbnQ4X3QgIGZsYWdzOwotICAgIHVpbnQ4X3QgIHF1ZXVlOwotICAgIHVpbnQ4X3QgIGJhY2tsb2c7Ci0gICAgdWludDhfdCAgcGFkOwotICAgIHVpbnQxNl90IGR1cmF0aW9uc1szMl07Ci19OwotCi1zdHJ1Y3Qgc19sbW9fc3RhdHMgewotICAgIHVpbnQzMl90IHZhbGlkOwotICAgIHVpbnQzMl90IGZjczsKLSAgICB1aW50MzJfdCBhYm9ydDsKLSAgICB1aW50MzJfdCBwaHlhYm9ydDsKLSAgICB1aW50MzJfdCBydHNfc3VjY2VzczsKLSAgICB1aW50MzJfdCBydHNfZmFpbDsKLSAgICB1aW50MzJfdCB0aW1lc3RhbXA7Ci0gICAgdWludDMyX3QgdGltZV90eDsKLSAgICB1aW50MzJfdCBub2lzZWZsb29yOwotICAgIHVpbnQzMl90IHNhbXBsZV9ub2lzZVs4XTsKLSAgICB1aW50MzJfdCBzYW1wbGVfY2NhOwotICAgIHVpbnQzMl90IHNhbXBsZV90eDsKLX07Ci0KLQotc3RydWN0IHNfbG1vX2xlZCB7Ci0gICAgdWludDE2X3QgZmxhZ3M7Ci0gICAgdWludDE2X3QgbWFza1syXTsKLSAgICB1aW50MTZfdCBkZWxheS8qWzJdKi87Ci19OwotCi0KLXN0cnVjdCBzX2xtb19idF9iYWxhbmNlciB7Ci0gICAgdWludDE2X3QgcHJpb190aHJlc2g7Ci0gICAgdWludDE2X3QgYWNsX3RocmVzaDsKLX07Ci0KLQotc3RydWN0IHNfbG1vX2FycF90YWJsZSB7Ci0gICAgdWludDE2X3QgICAgZmlsdGVyX2VuYWJsZTsKLSAgICB1aW50MzJfdCAgICBpcGFkZHI7Ci19OwotCi0jZW5kaWYgLyogX19BU1NFTUJMRVJfXyAqLwotCi0jZW5kaWYgLyogX19sbWFjX2hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3ZtZS9icmlkZ2VzL3ZtZV9jYTkxY3g0Mi5jIGIvZHJpdmVycy9zdGFnaW5nL3ZtZS9icmlkZ2VzL3ZtZV9jYTkxY3g0Mi5jCmluZGV4IDNkMmE4NGMuLmUxMzllYWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92bWUvYnJpZGdlcy92bWVfY2E5MWN4NDIuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdm1lL2JyaWRnZXMvdm1lX2NhOTFjeDQyLmMKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGFzbS90aW1lLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92bWUvYnJpZGdlcy92bWVfdHNpMTQ4LmMgYi9kcml2ZXJzL3N0YWdpbmcvdm1lL2JyaWRnZXMvdm1lX3RzaTE0OC5jCmluZGV4IDg5NjBmYTkuLjAwZmUwODAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92bWUvYnJpZGdlcy92bWVfdHNpMTQ4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3ZtZS9icmlkZ2VzL3ZtZV90c2kxNDguYwpAQCAtMjUsNiArMjUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGFzbS90aW1lLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvbWFpbl91c2IuYyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvbWFpbl91c2IuYwppbmRleCA3Zjk2YmNhLi4wNTE4NjExIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L21haW5fdXNiLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9tYWluX3VzYi5jCkBAIC0xMzMyLDcgKzEzMzIsNiBAQAogICAgICAgICBmcmVlX25ldGRldihwRGV2aWNlLT5kZXYpOwogICAgIH0KIAotCWtmcmVlKHBEZXZpY2UpOwogICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gImRldmljZV9kaXNjb25uZWN0My4uIFxuIik7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9LY29uZmlnCmluZGV4IDk0MDQ2MGMuLjEzMjY3MWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL0tjb25maWcKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvS2NvbmZpZwpAQCAtMSw2ICsxLDYgQEAKIGNvbmZpZyBXMzVVTkQKIAl0cmlzdGF0ZSAiSVM4OUMzNSBXTEFOIFVTQiBkcml2ZXIiCi0JZGVwZW5kcyBvbiBNQUM4MDIxMSAmJiBXTEFOXzgwMjExICYmIFVTQiAmJiBFWFBFUklNRU5UQUwKKwlkZXBlbmRzIG9uIE1BQzgwMjExICYmIFdMQU4gJiYgVVNCICYmIEVYUEVSSU1FTlRBTAogCWRlZmF1bHQgbgogCS0tLWhlbHAtLS0KIAkgIFRoaXMgaXMgaGlnaGx5IGV4cGVyaW1lbnRhbCBkcml2ZXIgZm9yIFdpbmJvbmQgV0lGSSBjYXJkLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvd2J1c2IuYyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3didXNiLmMKaW5kZXggODk1MDcyNC4uMDY3MDgyYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvd2J1c2IuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC93YnVzYi5jCkBAIC01MSwxMCArNTEsMjYgQEAKIAkubl9iaXRyYXRlcwk9IEFSUkFZX1NJWkUod2Jzb2Z0X3JhdGVzKSwKIH07CiAKK3N0YXRpYyB2b2lkIGhhbF9zZXRfYmVhY29uX3BlcmlvZChzdHJ1Y3QgaHdfZGF0YSAqcEh3RGF0YSwgdTE2IGJlYWNvbl9wZXJpb2QpCit7CisJdTMyIHRtcDsKKworCWlmIChwSHdEYXRhLT5TdXJwcmlzZVJlbW92ZSkKKwkJcmV0dXJuOworCisJcEh3RGF0YS0+QmVhY29uUGVyaW9kID0gYmVhY29uX3BlcmlvZDsKKwl0bXAgPSBwSHdEYXRhLT5CZWFjb25QZXJpb2QgPDwgMTY7CisJdG1wIHw9IHBId0RhdGEtPlByb2JlRGVsYXk7CisJV2IzNVJlZ19Xcml0ZShwSHdEYXRhLCAweDA4NDgsIHRtcCk7Cit9CisKIHN0YXRpYyBpbnQgd2Jzb2Z0X2FkZF9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LAogCQkJCXN0cnVjdCBpZWVlODAyMTFfaWZfaW5pdF9jb25mICpjb25mKQogewotCXByaW50aygid2Jzb2Z0X2FkZCBpbnRlcmZhY2UgY2FsbGVkXG4iKTsKKwlzdHJ1Y3Qgd2Jzb2Z0X3ByaXYgKnByaXYgPSBkZXYtPnByaXY7CisKKwloYWxfc2V0X2JlYWNvbl9wZXJpb2QoJnByaXYtPnNId0RhdGEsIGNvbmYtPnZpZi0+YnNzX2NvbmYuYmVhY29uX2ludCk7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtODMsMTAgKzk5LDE2IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB1NjQgd2Jzb2Z0X3ByZXBhcmVfbXVsdGljYXN0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBpbnQgbWNfY291bnQsCisJCQkJICAgIHN0cnVjdCBkZXZfYWRkcl9saXN0ICptY19saXN0KQoreworCXJldHVybiBtY19jb3VudDsKK30KKwogc3RhdGljIHZvaWQgd2Jzb2Z0X2NvbmZpZ3VyZV9maWx0ZXIoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LAogCQkJCSAgICB1bnNpZ25lZCBpbnQgY2hhbmdlZF9mbGFncywKIAkJCQkgICAgdW5zaWduZWQgaW50ICp0b3RhbF9mbGFncywKLQkJCQkgICAgaW50IG1jX2NvdW50LCBzdHJ1Y3QgZGV2X21jX2xpc3QgKm1jbGlzdCkKKwkJCQkgICAgdTY0IG11bHRpY2FzdCkKIHsKIAl1bnNpZ25lZCBpbnQgbmV3X2ZsYWdzOwogCkBAIC05NCw3ICsxMTYsNyBAQAogCiAJaWYgKCp0b3RhbF9mbGFncyAmIEZJRl9QUk9NSVNDX0lOX0JTUykKIAkJbmV3X2ZsYWdzIHw9IEZJRl9QUk9NSVNDX0lOX0JTUzsKLQllbHNlIGlmICgoKnRvdGFsX2ZsYWdzICYgRklGX0FMTE1VTFRJKSB8fCAobWNfY291bnQgPiAzMikpCisJZWxzZSBpZiAoKCp0b3RhbF9mbGFncyAmIEZJRl9BTExNVUxUSSkgfHwgKG11bHRpY2FzdCA+IDMyKSkKIAkJbmV3X2ZsYWdzIHw9IEZJRl9BTExNVUxUSTsKIAogCWRldi0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9IV19SWF9JTkNMVURFU19GQ1M7CkBAIC0xMzgsMTkgKzE2MCw2IEBACiAJV2IzNVJlZ19Xcml0ZShwSHdEYXRhLCAweDA4MjQsIHJlZy0+TTI0X01hY0NvbnRyb2wpOwogfQogCi1zdGF0aWMgdm9pZCBoYWxfc2V0X2JlYWNvbl9wZXJpb2Qoc3RydWN0IGh3X2RhdGEgKnBId0RhdGEsIHUxNiBiZWFjb25fcGVyaW9kKQotewotCXUzMiB0bXA7Ci0KLQlpZiAocEh3RGF0YS0+U3VycHJpc2VSZW1vdmUpCi0JCXJldHVybjsKLQotCXBId0RhdGEtPkJlYWNvblBlcmlvZCA9IGJlYWNvbl9wZXJpb2Q7Ci0JdG1wID0gcEh3RGF0YS0+QmVhY29uUGVyaW9kIDw8IDE2OwotCXRtcCB8PSBwSHdEYXRhLT5Qcm9iZURlbGF5OwotCVdiMzVSZWdfV3JpdGUocEh3RGF0YSwgMHgwODQ4LCB0bXApOwotfQotCiBzdGF0aWMgdm9pZAogaGFsX3NldF9jdXJyZW50X2NoYW5uZWxfZXgoc3RydWN0IGh3X2RhdGEgKnBId0RhdGEsIENoYW5JbmZvIGNoYW5uZWwpCiB7CkBAIC0yNDQsNyArMjUzLDYgQEAKIHN0YXRpYyBpbnQgd2Jzb2Z0X2NvbmZpZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHUzMiBjaGFuZ2VkKQogewogCXN0cnVjdCB3YnNvZnRfcHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKLQlzdHJ1Y3QgaWVlZTgwMjExX2NvbmYgKmNvbmYgPSAmZGV2LT5jb25mOwogCUNoYW5JbmZvIGNoOwogCiAJcHJpbnRrKCJ3YnNvZnRfY29uZmlnIGNhbGxlZFxuIik7CkBAIC0yNTQsNyArMjYyLDYgQEAKIAljaC5DaGFuTm8gPSAxOwogCiAJaGFsX3NldF9jdXJyZW50X2NoYW5uZWwoJnByaXYtPnNId0RhdGEsIGNoKTsKLQloYWxfc2V0X2JlYWNvbl9wZXJpb2QoJnByaXYtPnNId0RhdGEsIGNvbmYtPmJlYWNvbl9pbnQpOwogCWhhbF9zZXRfYWNjZXB0X2Jyb2FkY2FzdCgmcHJpdi0+c0h3RGF0YSwgMSk7CiAJaGFsX3NldF9hY2NlcHRfcHJvbWlzY3VvdXMoJnByaXYtPnNId0RhdGEsIDEpOwogCWhhbF9zZXRfYWNjZXB0X211bHRpY2FzdCgmcHJpdi0+c0h3RGF0YSwgMSk7CkBAIC0yNzcsNiArMjg0LDcgQEAKIAkuYWRkX2ludGVyZmFjZQkJPSB3YnNvZnRfYWRkX2ludGVyZmFjZSwKIAkucmVtb3ZlX2ludGVyZmFjZQk9IHdic29mdF9yZW1vdmVfaW50ZXJmYWNlLAogCS5jb25maWcJCQk9IHdic29mdF9jb25maWcsCisJLnByZXBhcmVfbXVsdGljYXN0CT0gd2Jzb2Z0X3ByZXBhcmVfbXVsdGljYXN0LAogCS5jb25maWd1cmVfZmlsdGVyCT0gd2Jzb2Z0X2NvbmZpZ3VyZV9maWx0ZXIsCiAJLmdldF9zdGF0cwkJPSB3YnNvZnRfZ2V0X3N0YXRzLAogCS5nZXRfdHhfc3RhdHMJCT0gd2Jzb2Z0X2dldF90eF9zdGF0cywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9LY29uZmlnCmluZGV4IDk5NTliNjUuLmY0NDI5NGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL0tjb25maWcKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvS2NvbmZpZwpAQCAtMSw2ICsxLDYgQEAKIGNvbmZpZyBQUklTTTJfVVNCCiAJdHJpc3RhdGUgIlByaXNtMi41LzMgVVNCIGRyaXZlciIKLQlkZXBlbmRzIG9uIFdMQU5fODAyMTEgJiYgVVNCICYmIFdJUkVMRVNTX0VYVAorCWRlcGVuZHMgb24gV0xBTiAmJiBVU0IgJiYgV0lSRUxFU1NfRVhUCiAJZGVmYXVsdCBuCiAJLS0taGVscC0tLQogCSAgVGhpcyBpcyB0aGUgd2xhbi1uZyBwcmlzbSAyLjUvMyBVU0IgZHJpdmVyIGZvciBhIHdpZGUgcmFuZ2Ugb2YKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdWlvL3Vpby5jIGIvZHJpdmVycy91aW8vdWlvLmMKaW5kZXggMDNlZmIwNi4uZTk0MTM2NyAxMDA2NDQKLS0tIGEvZHJpdmVycy91aW8vdWlvLmMKKysrIGIvZHJpdmVycy91aW8vdWlvLmMKQEAgLTE5LDYgKzE5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L2lkci5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgva29iamVjdC5oPgogI2luY2x1ZGUgPGxpbnV4L3Vpb19kcml2ZXIuaD4KQEAgLTY1OCw3ICs2NTksNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHVpb192bV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHVpb192bV9vcHMgPSB7CiAJLm9wZW4gPSB1aW9fdm1hX29wZW4sCiAJLmNsb3NlID0gdWlvX3ZtYV9jbG9zZSwKIAkuZmF1bHQgPSB1aW9fdm1hX2ZhdWx0LApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY2xhc3MvdXNidG1jLmMgYi9kcml2ZXJzL3VzYi9jbGFzcy91c2J0bWMuYwppbmRleCAzMzNlZTAyLi4yNDczY2YwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jbGFzcy91c2J0bWMuYworKysgYi9kcml2ZXJzL3VzYi9jbGFzcy91c2J0bWMuYwpAQCAtMzksNyArMzksNyBAQAogI2RlZmluZSBVU0JUTUNfU0laRV9JT0JVRkZFUgkyMDQ4CiAKIC8qIERlZmF1bHQgVVNCIHRpbWVvdXQgKGluIG1pbGxpc2Vjb25kcykgKi8KLSNkZWZpbmUgVVNCVE1DX1RJTUVPVVQJCTEwCisjZGVmaW5lIFVTQlRNQ19USU1FT1VUCQk1MDAwCiAKIC8qCiAgKiBNYXhpbXVtIG51bWJlciBvZiByZWFkIGN5Y2xlcyB0byBlbXB0eSBidWxrIGluIGVuZHBvaW50IGR1cmluZyBDTEVBUiBhbmQKQEAgLTk5Myw3ICs5OTMsNyBAQAogCXJldHVybiByZXR2YWw7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmb3BzID0gewogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkucmVhZAkJPSB1c2J0bWNfcmVhZCwKIAkud3JpdGUJCT0gdXNidG1jX3dyaXRlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWcgYi9kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZwppbmRleCAzMzM1MTMxLi5hMThlM2M1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZwpAQCAtMjIzLDYgKzIyMyw3IEBACiBjb25maWcgVVNCX0dBREdFVF9QWEEyNVgKIAlib29sZWFuICJQWEEgMjV4IG9yIElYUCA0eHgiCiAJZGVwZW5kcyBvbiAoQVJDSF9QWEEgJiYgUFhBMjV4KSB8fCBBUkNIX0lYUDRYWAorCXNlbGVjdCBVU0JfT1RHX1VUSUxTCiAJaGVscAogCSAgIEludGVsJ3MgUFhBIDI1eCBzZXJpZXMgWFNjYWxlIEFSTS01VEUgcHJvY2Vzc29ycyBpbmNsdWRlCiAJICAgYW4gaW50ZWdyYXRlZCBmdWxsIHNwZWVkIFVTQiAxLjEgZGV2aWNlIGNvbnRyb2xsZXIuICBUaGUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9ldGhlci5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2V0aGVyLmMKaW5kZXggZjM3ZGUyOC4uMTY3Y2IyYSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2V0aGVyLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2V0aGVyLmMKQEAgLTYxLDExICs2MSw2IEBACiAgKiBzaW1wbGVyLCBNaWNyb3NvZnQgcHVzaGVzIHRoZWlyIG93biBhcHByb2FjaDogUk5ESVMuICBUaGUgcHVibGlzaGVkCiAgKiBSTkRJUyBzcGVjcyBhcmUgYW1iaWd1b3VzIGFuZCBhcHBlYXIgdG8gYmUgaW5jb21wbGV0ZSwgYW5kIGFyZSBhbHNvCiAgKiBuZWVkbGVzc2x5IGNvbXBsZXguICBUaGV5IGJvcnJvdyBtb3JlIGZyb20gQ0RDIEFDTSB0aGFuIENEQyBFQ00uCi0gKgotICogV2hpbGUgQ0RDIEVDTSwgQ0RDIFN1YnNldCwgYW5kIFJORElTIGFyZSBkZXNpZ25lZCB0byBleHRlbmQgdGhlIGV0aGVybmV0Ci0gKiBpbnRlcmZhY2UgdG8gdGhlIHRhcmdldCwgQ0RDIEVFTSB3YXMgZGVzaWduZWQgdG8gdXNlIGV0aGVybmV0IG92ZXIgdGhlIFVTQgotICogbGluayBiZXR3ZWVuIHRoZSBob3N0IGFuZCB0YXJnZXQuICBDREMgRUVNIGlzIGltcGxlbWVudGVkIGFzIGFuIGFsdGVybmF0aXZlCi0gKiB0byB0aG9zZSBvdGhlciBwcm90b2NvbHMgd2hlbiB0aGF0IGNvbW11bmljYXRpb24gbW9kZWwgaXMgbW9yZSBhcHByb3ByaWF0ZQogICovCiAKICNkZWZpbmUgRFJJVkVSX0RFU0MJCSJFdGhlcm5ldCBHYWRnZXQiCkBAIC0xNTcsOCArMTUyLDggQEAKICNkZWZpbmUgUk5ESVNfUFJPRFVDVF9OVU0JMHhhNGEyCS8qIEV0aGVybmV0L1JORElTIEdhZGdldCAqLwogCiAvKiBGb3IgRUVNIGdhZGdldHMgKi8KLSNkZWZpbmUgRUVNX1ZFTkRPUl9OVU0JMHgwNTI1CS8qIElOVkFMSUQgLSBORUVEUyBUTyBCRSBBTExPQ0FURUQgKi8KLSNkZWZpbmUgRUVNX1BST0RVQ1RfTlVNCTB4YTRhMQkvKiBJTlZBTElEIC0gTkVFRFMgVE8gQkUgQUxMT0NBVEVEICovCisjZGVmaW5lIEVFTV9WRU5ET1JfTlVNCQkweDFkNmIJLyogTGludXggRm91bmRhdGlvbiAqLworI2RlZmluZSBFRU1fUFJPRFVDVF9OVU0JCTB4MDEwMgkvKiBFRU0gR2FkZ2V0ICovCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9mc2xfdWRjX2NvcmUuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mc2xfdWRjX2NvcmUuYwppbmRleCA0MmE3NGI4Li5mYTNkMTQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZnNsX3VkY19jb3JlLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2ZzbF91ZGNfY29yZS5jCkBAIC0yMTM5LDcgKzIxMzksNyBAQAogc3RhdGljIHZvaWQgZnNsX3VkY19yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAljb21wbGV0ZSh1ZGNfY29udHJvbGxlci0+ZG9uZSk7Ci0JZG1hX2ZyZWVfY29oZXJlbnQoZGV2LCB1ZGNfY29udHJvbGxlci0+ZXBfcWhfc2l6ZSwKKwlkbWFfZnJlZV9jb2hlcmVudChkZXYtPnBhcmVudCwgdWRjX2NvbnRyb2xsZXItPmVwX3FoX3NpemUsCiAJCQl1ZGNfY29udHJvbGxlci0+ZXBfcWgsIHVkY19jb250cm9sbGVyLT5lcF9xaF9kbWEpOwogCWtmcmVlKHVkY19jb250cm9sbGVyKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9pbXhfdWRjLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvaW14X3VkYy5jCmluZGV4IGM1MmE2ODEuLjAxZWUwYjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9pbXhfdWRjLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2lteF91ZGMuYwpAQCAtMTQwMiw3ICsxNDAyLDggQEAKIAlzdHJ1Y3QgY2xrICpjbGs7CiAJdm9pZCBfX2lvbWVtICpiYXNlOwogCWludCByZXQgPSAwOwotCWludCBpLCByZXNfc2l6ZTsKKwlpbnQgaTsKKwlyZXNvdXJjZV9zaXplX3QgcmVzX3NpemU7CiAKIAlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwogCWlmICghcmVzKSB7CkBAIC0xNDE2LDcgKzE0MTcsNyBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQlyZXNfc2l6ZSA9IHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDE7CisJcmVzX3NpemUgPSByZXNvdXJjZV9zaXplKHJlcyk7CiAJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzX3NpemUsIHJlcy0+bmFtZSkpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2FuJ3QgYWxsb2NhdGUgJWQgYnl0ZXMgYXQgJWQgYWRkcmVzc1xuIiwKIAkJCXJlc19zaXplLCByZXMtPnN0YXJ0KTsKQEAgLTE1MjcsOCArMTUyOCw3IEBACiAJY2xrX2Rpc2FibGUoaW14X3VzYi0+Y2xrKTsKIAlpb3VubWFwKGlteF91c2ItPmJhc2UpOwogCi0JcmVsZWFzZV9tZW1fcmVnaW9uKGlteF91c2ItPnJlcy0+c3RhcnQsCi0JCWlteF91c2ItPnJlcy0+ZW5kIC0gaW14X3VzYi0+cmVzLT5zdGFydCArIDEpOworCXJlbGVhc2VfbWVtX3JlZ2lvbihpbXhfdXNiLT5yZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKGlteF91c2ItPnJlcykpOwogCiAJaWYgKHBkYXRhLT5leGl0KQogCQlwZGF0YS0+ZXhpdCgmcGRldi0+ZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9pbm9kZS5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2lub2RlLmMKaW5kZXggYzQ0MzY3Zi4uYmYwZjY1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2lub2RlLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2lub2RlLmMKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KICNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L3ByaW50ZXIuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9wcmludGVyLmMKaW5kZXggMjk1MDAxNS4uMmQ4NjdmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L3ByaW50ZXIuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvcHJpbnRlci5jCkBAIC04NzUsNyArODc1LDcgQEAKIH0KIAogLyogdXNlZCBhZnRlciBlbmRwb2ludCBjb25maWd1cmF0aW9uICovCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwcmludGVyX2lvX29wZXJhdGlvbnMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwcmludGVyX2lvX29wZXJhdGlvbnMgPSB7CiAJLm93bmVyID0JVEhJU19NT0RVTEUsCiAJLm9wZW4gPQkJcHJpbnRlcl9vcGVuLAogCS5yZWFkID0JCXByaW50ZXJfcmVhZCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9yOGE2NjU5Ny11ZGMuaCBiL2RyaXZlcnMvdXNiL2dhZGdldC9yOGE2NjU5Ny11ZGMuaAppbmRleCAwMzA4N2U3Li45YTUzN2FhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvcjhhNjY1OTctdWRjLmgKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3I4YTY2NTk3LXVkYy5oCkBAIC0xMzEsMzEgKzEzMSw0OCBAQAogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgcjhhNjY1OTdfcmVhZF9maWZvKHN0cnVjdCByOGE2NjU5NyAqcjhhNjY1OTcsCi0JCQkJICAgICAgdW5zaWduZWQgbG9uZyBvZmZzZXQsIHUxNiAqYnVmLAorCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LAorCQkJCSAgICAgIHVuc2lnbmVkIGNoYXIgKmJ1ZiwKIAkJCQkgICAgICBpbnQgbGVuKQogeworCXVuc2lnbmVkIGxvbmcgZmlmb2FkZHIgPSByOGE2NjU5Ny0+cmVnICsgb2Zmc2V0OworCXVuc2lnbmVkIGludCBkYXRhOworCWludCBpOworCiAJaWYgKHI4YTY2NTk3LT5wZGF0YS0+b25fY2hpcCkgewotCQl1bnNpZ25lZCBsb25nIGZpZm9hZGRyID0gcjhhNjY1OTctPnJlZyArIG9mZnNldDsKLQkJdW5zaWduZWQgbG9uZyBjb3VudDsKLQkJdW5pb24gewotCQkJdW5zaWduZWQgbG9uZyBkd29yZDsKLQkJCXVuc2lnbmVkIGNoYXIgYnl0ZVs0XTsKLQkJfSBkYXRhOwotCQl1bnNpZ25lZCBjaGFyICpwYjsKLQkJaW50IGk7CisJCS8qIDMyLWJpdCBhY2Nlc3NlcyBmb3Igb25fY2hpcCBjb250cm9sbGVycyAqLwogCi0JCWNvdW50ID0gbGVuIC8gNDsKLQkJaW5zbChmaWZvYWRkciwgYnVmLCBjb3VudCk7CisJCS8qIGFsaWduZWQgYnVmIGNhc2UgKi8KKwkJaWYgKGxlbiA+PSA0ICYmICEoKHVuc2lnbmVkIGxvbmcpYnVmICYgMHgwMykpIHsKKwkJCWluc2woZmlmb2FkZHIsIGJ1ZiwgbGVuIC8gNCk7CisJCQlidWYgKz0gbGVuICYgfjB4MDM7CisJCQlsZW4gJj0gMHgwMzsKKwkJfQogCi0JCWlmIChsZW4gJiAweDAwMDAwMDAzKSB7Ci0JCQlkYXRhLmR3b3JkID0gaW5sKGZpZm9hZGRyKTsKLQkJCXBiID0gKHVuc2lnbmVkIGNoYXIgKilidWYgKyBjb3VudCAqIDQ7Ci0JCQlmb3IgKGkgPSAwOyBpIDwgKGxlbiAmIDB4MDAwMDAwMDMpOyBpKyspCi0JCQkJcGJbaV0gPSBkYXRhLmJ5dGVbaV07CisJCS8qIHVuYWxpZ25lZCBidWYgY2FzZSAqLworCQlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKwkJCWlmICghKGkgJiAweDAzKSkKKwkJCQlkYXRhID0gaW5sKGZpZm9hZGRyKTsKKworCQkJYnVmW2ldID0gKGRhdGEgPj4gKChpICYgMHgwMykgKiA4KSkgJiAweGZmOwogCQl9CiAJfSBlbHNlIHsKLQkJbGVuID0gKGxlbiArIDEpIC8gMjsKLQkJaW5zdyhyOGE2NjU5Ny0+cmVnICsgb2Zmc2V0LCBidWYsIGxlbik7CisJCS8qIDE2LWJpdCBhY2Nlc3NlcyBmb3IgZXh0ZXJuYWwgY29udHJvbGxlcnMgKi8KKworCQkvKiBhbGlnbmVkIGJ1ZiBjYXNlICovCisJCWlmIChsZW4gPj0gMiAmJiAhKCh1bnNpZ25lZCBsb25nKWJ1ZiAmIDB4MDEpKSB7CisJCQlpbnN3KGZpZm9hZGRyLCBidWYsIGxlbiAvIDIpOworCQkJYnVmICs9IGxlbiAmIH4weDAxOworCQkJbGVuICY9IDB4MDE7CisJCX0KKworCQkvKiB1bmFsaWduZWQgYnVmIGNhc2UgKi8KKwkJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisJCQlpZiAoIShpICYgMHgwMSkpCisJCQkJZGF0YSA9IGludyhmaWZvYWRkcik7CisKKwkJCWJ1ZltpXSA9IChkYXRhID4+ICgoaSAmIDB4MDEpICogOCkpICYgMHhmZjsKKwkJfQogCX0KIH0KIApAQCAtMTY2LDM4ICsxODMsNDAgQEAKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHI4YTY2NTk3X3dyaXRlX2ZpZm8oc3RydWN0IHI4YTY2NTk3ICpyOGE2NjU5NywKLQkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBvZmZzZXQsIHUxNiAqYnVmLAorCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIG9mZnNldCwKKwkJCQkgICAgICAgdW5zaWduZWQgY2hhciAqYnVmLAogCQkJCSAgICAgICBpbnQgbGVuKQogewogCXVuc2lnbmVkIGxvbmcgZmlmb2FkZHIgPSByOGE2NjU5Ny0+cmVnICsgb2Zmc2V0OworCWludCBhZGogPSAwOworCWludCBpOwogCiAJaWYgKHI4YTY2NTk3LT5wZGF0YS0+b25fY2hpcCkgewotCQl1bnNpZ25lZCBsb25nIGNvdW50OwotCQl1bnNpZ25lZCBjaGFyICpwYjsKLQkJaW50IGk7Ci0KLQkJY291bnQgPSBsZW4gLyA0OwotCQlvdXRzbChmaWZvYWRkciwgYnVmLCBjb3VudCk7Ci0KLQkJaWYgKGxlbiAmIDB4MDAwMDAwMDMpIHsKLQkJCXBiID0gKHVuc2lnbmVkIGNoYXIgKilidWYgKyBjb3VudCAqIDQ7Ci0JCQlmb3IgKGkgPSAwOyBpIDwgKGxlbiAmIDB4MDAwMDAwMDMpOyBpKyspIHsKLQkJCQlpZiAocjhhNjY1OTdfcmVhZChyOGE2NjU5NywgQ0ZJRk9TRUwpICYgQklHRU5EKQotCQkJCQlvdXRiKHBiW2ldLCBmaWZvYWRkciArIGkpOwotCQkJCWVsc2UKLQkJCQkJb3V0YihwYltpXSwgZmlmb2FkZHIgKyAzIC0gaSk7Ci0JCQl9CisJCS8qIDMyLWJpdCBhY2Nlc3Mgb25seSBpZiBidWYgaXMgMzItYml0IGFsaWduZWQgKi8KKwkJaWYgKGxlbiA+PSA0ICYmICEoKHVuc2lnbmVkIGxvbmcpYnVmICYgMHgwMykpIHsKKwkJCW91dHNsKGZpZm9hZGRyLCBidWYsIGxlbiAvIDQpOworCQkJYnVmICs9IGxlbiAmIH4weDAzOworCQkJbGVuICY9IDB4MDM7CiAJCX0KIAl9IGVsc2UgewotCQlpbnQgb2RkID0gbGVuICYgMHgwMDAxOwotCi0JCWxlbiA9IGxlbiAvIDI7Ci0JCW91dHN3KGZpZm9hZGRyLCBidWYsIGxlbik7Ci0JCWlmICh1bmxpa2VseShvZGQpKSB7Ci0JCQlidWYgPSAmYnVmW2xlbl07Ci0JCQlvdXRiKCh1bnNpZ25lZCBjaGFyKSpidWYsIGZpZm9hZGRyKTsKKwkJLyogMTYtYml0IGFjY2VzcyBvbmx5IGlmIGJ1ZiBpcyAxNi1iaXQgYWxpZ25lZCAqLworCQlpZiAobGVuID49IDIgJiYgISgodW5zaWduZWQgbG9uZylidWYgJiAweDAxKSkgeworCQkJb3V0c3coZmlmb2FkZHIsIGJ1ZiwgbGVuIC8gMik7CisJCQlidWYgKz0gbGVuICYgfjB4MDE7CisJCQlsZW4gJj0gMHgwMTsKIAkJfQogCX0KKworCS8qIGFkanVzdCBmaWZvIGFkZHJlc3MgaW4gdGhlIGxpdHRsZSBlbmRpYW4gY2FzZSAqLworCWlmICghKHI4YTY2NTk3X3JlYWQocjhhNjY1OTcsIENGSUZPU0VMKSAmIEJJR0VORCkpIHsKKwkJaWYgKHI4YTY2NTk3LT5wZGF0YS0+b25fY2hpcCkKKwkJCWFkaiA9IDB4MDM7IC8qIDMyLWJpdCB3aWRlICovCisJCWVsc2UKKwkJCWFkaiA9IDB4MDE7IC8qIDE2LWJpdCB3aWRlICovCisJfQorCisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQorCQlvdXRiKGJ1ZltpXSwgZmlmb2FkZHIgKyBhZGogLSAoaSAmIGFkaikpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgcjhhNjY1OTdfbWRmeShzdHJ1Y3QgcjhhNjY1OTcgKnI4YTY2NTk3LApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9laGNpLXNjaGVkLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktc2NoZWQuYwppbmRleCAzZWEwNTkzLi5iMjVjZGVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktc2NoZWQuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktc2NoZWQuYwpAQCAtMTQwMCw2ICsxNDAwLDEwIEBACiAJCWdvdG8gZmFpbDsKIAl9CiAKKwlwZXJpb2QgPSB1cmItPmludGVydmFsOworCWlmICghc3RyZWFtLT5oaWdoc3BlZWQpCisJCXBlcmlvZCA8PD0gMzsKKwogCW5vdyA9IGVoY2lfcmVhZGwoZWhjaSwgJmVoY2ktPnJlZ3MtPmZyYW1lX2luZGV4KSAlIG1vZDsKIAogCS8qIHdoZW4ncyB0aGUgbGFzdCB1ZnJhbWUgdGhpcyB1cmIgY291bGQgc3RhcnQ/ICovCkBAIC0xNDE3LDE0ICsxNDIxLDE1IEBACiAKIAkJLyogRmVsbCBiZWhpbmQgKGJ5IHVwIHRvIHR3aWNlIHRoZSBzbG9wIGFtb3VudCk/ICovCiAJCWlmIChzdGFydCA+PSBtYXggLSAyICogOCAqIFNDSEVEVUxFX1NMT1ApCi0JCQlzdGFydCArPSBzdHJlYW0tPmludGVydmFsICogRElWX1JPVU5EX1VQKAotCQkJCQltYXggLSBzdGFydCwgc3RyZWFtLT5pbnRlcnZhbCkgLSBtb2Q7CisJCQlzdGFydCArPSBwZXJpb2QgKiBESVZfUk9VTkRfVVAoCisJCQkJCW1heCAtIHN0YXJ0LCBwZXJpb2QpIC0gbW9kOwogCiAJCS8qIFRyaWVkIHRvIHNjaGVkdWxlIHRvbyBmYXIgaW50byB0aGUgZnV0dXJlPyAqLwogCQlpZiAodW5saWtlbHkoKHN0YXJ0ICsgc2NoZWQtPnNwYW4pID49IG1heCkpIHsKIAkJCXN0YXR1cyA9IC1FRkJJRzsKIAkJCWdvdG8gZmFpbDsKIAkJfQorCQlzdHJlYW0tPm5leHRfdWZyYW1lID0gc3RhcnQ7CiAJCWdvdG8gcmVhZHk7CiAJfQogCkBAIC0xNDQwLDEwICsxNDQ1LDYgQEAKIAogCS8qIE5PVEU6ICBhc3N1bWVzIFVSQl9JU09fQVNBUCwgdG8gbGltaXQgY29tcGxleGl0eS9idWdzICovCiAKLQlwZXJpb2QgPSB1cmItPmludGVydmFsOwotCWlmICghc3RyZWFtLT5oaWdoc3BlZWQpCi0JCXBlcmlvZCA8PD0gMzsKLQogCS8qIGZpbmQgYSB1ZnJhbWUgc2xvdCB3aXRoIGVub3VnaCBiYW5kd2lkdGggKi8KIAlmb3IgKDsgc3RhcnQgPCAoc3RyZWFtLT5uZXh0X3VmcmFtZSArIHBlcmlvZCk7IHN0YXJ0KyspIHsKIAkJaW50CQllbm91Z2hfc3BhY2U7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2lzcDEzNjItaGNkLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2lzcDEzNjItaGNkLmMKaW5kZXggZTM1ZDgyOC4uNWM3NzRhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9pc3AxMzYyLWhjZC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvaXNwMTM2Mi1oY2QuYwpAQCAtMjI4NCwxMCArMjI4NCwxMCBAQAogCWRldl9pbmZvKGhjZC0+c2VsZi5jb250cm9sbGVyLCAiSVNQMTM2MiBNZW1vcnkgdXNhZ2U6XG4iKTsKIAlkZXZfaW5mbyhoY2QtPnNlbGYuY29udHJvbGxlciwgIiAgSVNUTDogICAgMiAqICU0ZDogICAgICU0ZCBAICQlMDR4OiQlMDR4XG4iLAogCQkgaXN0bF9zaXplIC8gMiwgaXN0bF9zaXplLCAwLCBpc3RsX3NpemUgLyAyKTsKLQlkZXZfaW5mbyhoY2QtPnNlbGYuY29udHJvbGxlciwgIiAgSU5UTDogJTRkICogKCUzdSs4KTogICU0ZCBAICQlMDR4XG4iLAorCWRldl9pbmZvKGhjZC0+c2VsZi5jb250cm9sbGVyLCAiICBJTlRMOiAlNGQgKiAoJTNsdSs4KTogICU0ZCBAICQlMDR4XG4iLAogCQkgSVNQMTM2Ml9JTlRMX0JVRkZFUlMsIGludGxfYmxrc2l6ZSAtIFBURF9IRUFERVJfU0laRSwKIAkJIGludGxfc2l6ZSwgaXN0bF9zaXplKTsKLQlkZXZfaW5mbyhoY2QtPnNlbGYuY29udHJvbGxlciwgIiAgQVRMIDogJTRkICogKCUzdSs4KTogICU0ZCBAICQlMDR4XG4iLAorCWRldl9pbmZvKGhjZC0+c2VsZi5jb250cm9sbGVyLCAiICBBVEwgOiAlNGQgKiAoJTNsdSs4KTogICU0ZCBAICQlMDR4XG4iLAogCQkgYXRsX2J1ZmZlcnMsIGF0bF9ibGtzaXplIC0gUFREX0hFQURFUl9TSVpFLAogCQkgYXRsX3NpemUsIGlzdGxfc2l6ZSArIGludGxfc2l6ZSk7CiAJZGV2X2luZm8oaGNkLT5zZWxmLmNvbnRyb2xsZXIsICIgIFVTRUQvRlJFRTogICAlNGQgICAgICAlNGRcbiIsIHRvdGFsLApAQCAtMjY3NywxMiArMjY3NywxMiBAQAogCURCRygwLCAiJXM6IFJlbW92aW5nIEhDRFxuIiwgX19mdW5jX18pOwogCXVzYl9yZW1vdmVfaGNkKGhjZCk7CiAKLQlEQkcoMCwgIiVzOiBVbm1hcHBpbmcgZGF0YV9yZWcgQCAlMDh4XG4iLCBfX2Z1bmNfXywKLQkgICAgKHUzMilpc3AxMzYyX2hjZC0+ZGF0YV9yZWcpOworCURCRygwLCAiJXM6IFVubWFwcGluZyBkYXRhX3JlZyBAICVwXG4iLCBfX2Z1bmNfXywKKwkgICAgaXNwMTM2Ml9oY2QtPmRhdGFfcmVnKTsKIAlpb3VubWFwKGlzcDEzNjJfaGNkLT5kYXRhX3JlZyk7CiAKLQlEQkcoMCwgIiVzOiBVbm1hcHBpbmcgYWRkcl9yZWcgQCAlMDh4XG4iLCBfX2Z1bmNfXywKLQkgICAgKHUzMilpc3AxMzYyX2hjZC0+YWRkcl9yZWcpOworCURCRygwLCAiJXM6IFVubWFwcGluZyBhZGRyX3JlZyBAICVwXG4iLCBfX2Z1bmNfXywKKwkgICAgaXNwMTM2Ml9oY2QtPmFkZHJfcmVnKTsKIAlpb3VubWFwKGlzcDEzNjJfaGNkLT5hZGRyX3JlZyk7CiAKIAlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDEpOwpAQCAtMjgxMCwxNiArMjgxMCwxNiBAQAogCXJldHVybiAwOwogCiAgZXJyNjoKLQlEQkcoMCwgIiVzOiBGcmVlaW5nIGRldiAlMDh4XG4iLCBfX2Z1bmNfXywgKHUzMilpc3AxMzYyX2hjZCk7CisJREJHKDAsICIlczogRnJlZWluZyBkZXYgJXBcbiIsIF9fZnVuY19fLCBpc3AxMzYyX2hjZCk7CiAJdXNiX3B1dF9oY2QoaGNkKTsKICBlcnI1OgotCURCRygwLCAiJXM6IFVubWFwcGluZyBkYXRhX3JlZyBAICUwOHhcbiIsIF9fZnVuY19fLCAodTMyKWRhdGFfcmVnKTsKKwlEQkcoMCwgIiVzOiBVbm1hcHBpbmcgZGF0YV9yZWcgQCAlcFxuIiwgX19mdW5jX18sIGRhdGFfcmVnKTsKIAlpb3VubWFwKGRhdGFfcmVnKTsKICBlcnI0OgogCURCRygwLCAiJXM6IFJlbGVhc2luZyBtZW0gcmVnaW9uICUwOGx4XG4iLCBfX2Z1bmNfXywgKGxvbmcgdW5zaWduZWQgaW50KWRhdGEtPnN0YXJ0KTsKIAlyZWxlYXNlX21lbV9yZWdpb24oZGF0YS0+c3RhcnQsIHJlc291cmNlX2xlbihkYXRhKSk7CiAgZXJyMzoKLQlEQkcoMCwgIiVzOiBVbm1hcHBpbmcgYWRkcl9yZWcgQCAlMDh4XG4iLCBfX2Z1bmNfXywgKHUzMilhZGRyX3JlZyk7CisJREJHKDAsICIlczogVW5tYXBwaW5nIGFkZHJfcmVnIEAgJXBcbiIsIF9fZnVuY19fLCBhZGRyX3JlZyk7CiAJaW91bm1hcChhZGRyX3JlZyk7CiAgZXJyMjoKIAlEQkcoMCwgIiVzOiBSZWxlYXNpbmcgbWVtIHJlZ2lvbiAlMDhseFxuIiwgX19mdW5jX18sIChsb25nIHVuc2lnbmVkIGludClhZGRyLT5zdGFydCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2lzcDEzNjIuaCBiL2RyaXZlcnMvdXNiL2hvc3QvaXNwMTM2Mi5oCmluZGV4IGZlNjBmNjIuLjFhMjUzZWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvaXNwMTM2Mi5oCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvaXNwMTM2Mi5oCkBAIC01ODAsNyArNTgwLDcgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIEFMSUdOU1RBVChzdHJ1Y3QgaXNwMTM2Ml9oY2QgKmlzcDEzNjJfaGNkLCB2b2lkICpwdHIpCiB7Ci0JdW5zaWduZWQgcCA9ICh1bnNpZ25lZClwdHI7CisJdW5zaWduZWQgbG9uZyBwID0gKHVuc2lnbmVkIGxvbmcpcHRyOwogCWlmICghKHAgJiAweGYpKQogCQlpc3AxMzYyX2hjZC0+c3RhdDE2Kys7CiAJZWxzZSBpZiAoIShwICYgMHg3KSkKQEAgLTc3MCw3ICs3NzAsNyBAQAogCWlmICghbGVuKQogCQlyZXR1cm47CiAKLQlpZiAoKHVuc2lnbmVkKWRwICYgMHgxKSB7CisJaWYgKCh1bnNpZ25lZCBsb25nKWRwICYgMHgxKSB7CiAJCS8qIG5vdCBhbGlnbmVkICovCiAJCWZvciAoOyBsZW4gPiAxOyBsZW4gLT0gMikgewogCQkJZGF0YSA9ICpkcCsrOwpAQCAtOTYyLDggKzk2Miw4IEBACiAKIAlpc3AxMzYyX3dyaXRlX2RpcmFkZHIoaXNwMTM2Ml9oY2QsIG9mZnNldCwgbGVuKTsKIAotCURCRygzLCAiJXM6IFJlYWRpbmcgJWQgYnl0ZSBmcm9tIGJ1ZmZlciBAJTA0eCB0byBtZW1vcnkgQCAlMDh4XG4iLCBfX2Z1bmNfXywKLQkgICAgbGVuLCBvZmZzZXQsICh1MzIpYnVmKTsKKwlEQkcoMywgIiVzOiBSZWFkaW5nICVkIGJ5dGUgZnJvbSBidWZmZXIgQCUwNHggdG8gbWVtb3J5IEAgJXBcbiIsCisJICAgIF9fZnVuY19fLCBsZW4sIG9mZnNldCwgYnVmKTsKIAogCWlzcDEzNjJfd3JpdGVfcmVnMTYoaXNwMTM2Ml9oY2QsIEhDdVBJTlQsIEhDdVBJTlRfRU9UKTsKIAlfV0FSTl9PTigoaXNwMTM2Ml9yZWFkX3JlZzE2KGlzcDEzNjJfaGNkLCBIQ3VQSU5UKSAmIEhDdVBJTlRfRU9UKSk7CkBAIC05ODIsOCArOTgyLDggQEAKIAogCWlzcDEzNjJfd3JpdGVfZGlyYWRkcihpc3AxMzYyX2hjZCwgb2Zmc2V0LCBsZW4pOwogCi0JREJHKDMsICIlczogV3JpdGluZyAlZCBieXRlIHRvIGJ1ZmZlciBAJTA0eCBmcm9tIG1lbW9yeSBAICUwOHhcbiIsIF9fZnVuY19fLAotCSAgICBsZW4sIG9mZnNldCwgKHUzMilidWYpOworCURCRygzLCAiJXM6IFdyaXRpbmcgJWQgYnl0ZSB0byBidWZmZXIgQCUwNHggZnJvbSBtZW1vcnkgQCAlcFxuIiwKKwkgICAgX19mdW5jX18sIGxlbiwgb2Zmc2V0LCBidWYpOwogCiAJaXNwMTM2Ml93cml0ZV9yZWcxNihpc3AxMzYyX2hjZCwgSEN1UElOVCwgSEN1UElOVF9FT1QpOwogCV9XQVJOX09OKChpc3AxMzYyX3JlYWRfcmVnMTYoaXNwMTM2Ml9oY2QsIEhDdVBJTlQpICYgSEN1UElOVF9FT1QpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1weGEyN3guYyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1weGEyN3guYwppbmRleCBiNTI5NGE5Li5mMWMwNjIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktcHhhMjd4LmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLXB4YTI3eC5jCkBAIC00ODEsMzggKzQ4MSw0NyBAQAogCXJldHVybiAwOwogfQogCi0jaWZkZWYJQ09ORklHX1BNCi1zdGF0aWMgaW50IG9oY2lfaGNkX3B4YTI3eF9kcnZfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IG9oY2lfaGNkX3B4YTI3eF9kcnZfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHVzYl9oY2QgKmhjZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCB1c2JfaGNkICpoY2QgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAlzdHJ1Y3QgcHhhMjd4X29oY2kgKm9oY2kgPSB0b19weGEyN3hfb2hjaShoY2QpOwogCiAJaWYgKHRpbWVfYmVmb3JlKGppZmZpZXMsIG9oY2ktPm9oY2kubmV4dF9zdGF0ZWNoYW5nZSkpCiAJCW1zbGVlcCg1KTsKIAlvaGNpLT5vaGNpLm5leHRfc3RhdGVjaGFuZ2UgPSBqaWZmaWVzOwogCi0JcHhhMjd4X3N0b3BfaGMob2hjaSwgJnBkZXYtPmRldik7CisJcHhhMjd4X3N0b3BfaGMob2hjaSwgZGV2KTsKIAloY2QtPnN0YXRlID0gSENfU1RBVEVfU1VTUEVOREVEOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgb2hjaV9oY2RfcHhhMjd4X2Rydl9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3N0YXRpYyBpbnQgb2hjaV9oY2RfcHhhMjd4X2Rydl9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQogewotCXN0cnVjdCB1c2JfaGNkICpoY2QgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgdXNiX2hjZCAqaGNkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAJc3RydWN0IHB4YTI3eF9vaGNpICpvaGNpID0gdG9fcHhhMjd4X29oY2koaGNkKTsKKwlzdHJ1Y3QgcHhhb2hjaV9wbGF0Zm9ybV9kYXRhICppbmYgPSBkZXYtPnBsYXRmb3JtX2RhdGE7CiAJaW50IHN0YXR1czsKIAogCWlmICh0aW1lX2JlZm9yZShqaWZmaWVzLCBvaGNpLT5vaGNpLm5leHRfc3RhdGVjaGFuZ2UpKQogCQltc2xlZXAoNSk7CiAJb2hjaS0+b2hjaS5uZXh0X3N0YXRlY2hhbmdlID0gamlmZmllczsKIAotCWlmICgoc3RhdHVzID0gcHhhMjd4X3N0YXJ0X2hjKG9oY2ksICZwZGV2LT5kZXYpKSA8IDApCisJaWYgKChzdGF0dXMgPSBweGEyN3hfc3RhcnRfaGMob2hjaSwgZGV2KSkgPCAwKQogCQlyZXR1cm4gc3RhdHVzOwogCisJLyogU2VsZWN0IFBvd2VyIE1hbmFnZW1lbnQgTW9kZSAqLworCXB4YTI3eF9vaGNpX3NlbGVjdF9wbW0ob2hjaSwgaW5mLT5wb3J0X21vZGUpOworCiAJb2hjaV9maW5pc2hfY29udHJvbGxlcl9yZXN1bWUoaGNkKTsKIAlyZXR1cm4gMDsKIH0KKworc3RhdGljIHN0cnVjdCBkZXZfcG1fb3BzIG9oY2lfaGNkX3B4YTI3eF9wbV9vcHMgPSB7CisJLnN1c3BlbmQJPSBvaGNpX2hjZF9weGEyN3hfZHJ2X3N1c3BlbmQsCisJLnJlc3VtZQkJPSBvaGNpX2hjZF9weGEyN3hfZHJ2X3Jlc3VtZSwKK307CiAjZW5kaWYKIAogLyogd29yayB3aXRoIGhvdHBsdWcgYW5kIGNvbGRwbHVnICovCkBAIC01MjIsMTMgKzUzMSwxMiBAQAogCS5wcm9iZQkJPSBvaGNpX2hjZF9weGEyN3hfZHJ2X3Byb2JlLAogCS5yZW1vdmUJCT0gb2hjaV9oY2RfcHhhMjd4X2Rydl9yZW1vdmUsCiAJLnNodXRkb3duCT0gdXNiX2hjZF9wbGF0Zm9ybV9zaHV0ZG93biwKLSNpZmRlZiBDT05GSUdfUE0KLQkuc3VzcGVuZAk9IG9oY2lfaGNkX3B4YTI3eF9kcnZfc3VzcGVuZCwKLQkucmVzdW1lCQk9IG9oY2lfaGNkX3B4YTI3eF9kcnZfcmVzdW1lLAotI2VuZGlmCiAJLmRyaXZlcgkJPSB7CiAJCS5uYW1lCT0gInB4YTI3eC1vaGNpIiwKIAkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisjaWZkZWYgQ09ORklHX1BNCisJCS5wbQk9ICZvaGNpX2hjZF9weGEyN3hfcG1fb3BzLAorI2VuZGlmCiAJfSwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvcGNpLXF1aXJrcy5jIGIvZHJpdmVycy91c2IvaG9zdC9wY2ktcXVpcmtzLmMKaW5kZXggMjNjZjNiZC4uODNiNWY5YyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9wY2ktcXVpcmtzLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9wY2ktcXVpcmtzLmMKQEAgLTQ3NSw0ICs0NzUsNCBAQAogCWVsc2UgaWYgKHBkZXYtPmNsYXNzID09IFBDSV9DTEFTU19TRVJJQUxfVVNCX1hIQ0kpCiAJCXF1aXJrX3VzYl9oYW5kb2ZmX3hoY2kocGRldik7CiB9Ci1ERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgcXVpcmtfdXNiX2Vhcmx5X2hhbmRvZmYpOworREVDTEFSRV9QQ0lfRklYVVBfRklOQUwoUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgcXVpcmtfdXNiX2Vhcmx5X2hhbmRvZmYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9yOGE2NjU5Ny1oY2QuYyBiL2RyaXZlcnMvdXNiL2hvc3QvcjhhNjY1OTctaGNkLmMKaW5kZXggNzQ5YjUzNy4uZTMzZDM2MiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9yOGE2NjU5Ny1oY2QuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L3I4YTY2NTk3LWhjZC5jCkBAIC0xMDAzLDE5ICsxMDAzLDIwIEBACiAJaWYgKHN5c3N0cyA9PSBTRTApIHsKIAkJcjhhNjY1OTdfd3JpdGUocjhhNjY1OTcsIH5BVFRDSCwgZ2V0X2ludHN0c19yZWcocG9ydCkpOwogCQlyOGE2NjU5N19ic2V0KHI4YTY2NTk3LCBBVFRDSEUsIGdldF9pbnRlbmJfcmVnKHBvcnQpKTsKLQkJcmV0dXJuOworCX0gZWxzZSB7CisJCWlmIChzeXNzdHMgPT0gRlNfSlNUUykKKwkJCXI4YTY2NTk3X2JzZXQocjhhNjY1OTcsIEhTRSwgZ2V0X3N5c2NmZ19yZWcocG9ydCkpOworCQllbHNlIGlmIChzeXNzdHMgPT0gTFNfSlNUUykKKwkJCXI4YTY2NTk3X2JjbHIocjhhNjY1OTcsIEhTRSwgZ2V0X3N5c2NmZ19yZWcocG9ydCkpOworCisJCXI4YTY2NTk3X3dyaXRlKHI4YTY2NTk3LCB+RFRDSCwgZ2V0X2ludHN0c19yZWcocG9ydCkpOworCQlyOGE2NjU5N19ic2V0KHI4YTY2NTk3LCBEVENIRSwgZ2V0X2ludGVuYl9yZWcocG9ydCkpOworCisJCWlmIChyOGE2NjU5Ny0+YnVzX3N1c3BlbmRlZCkKKwkJCXVzYl9oY2RfcmVzdW1lX3Jvb3RfaHViKHI4YTY2NTk3X3RvX2hjZChyOGE2NjU5NykpOwogCX0KIAotCWlmIChzeXNzdHMgPT0gRlNfSlNUUykKLQkJcjhhNjY1OTdfYnNldChyOGE2NjU5NywgSFNFLCBnZXRfc3lzY2ZnX3JlZyhwb3J0KSk7Ci0JZWxzZSBpZiAoc3lzc3RzID09IExTX0pTVFMpCi0JCXI4YTY2NTk3X2JjbHIocjhhNjY1OTcsIEhTRSwgZ2V0X3N5c2NmZ19yZWcocG9ydCkpOwotCi0JcjhhNjY1OTdfd3JpdGUocjhhNjY1OTcsIH5EVENILCBnZXRfaW50c3RzX3JlZyhwb3J0KSk7Ci0JcjhhNjY1OTdfYnNldChyOGE2NjU5NywgRFRDSEUsIGdldF9pbnRlbmJfcmVnKHBvcnQpKTsKLQotCWlmIChyOGE2NjU5Ny0+YnVzX3N1c3BlbmRlZCkKLQkJdXNiX2hjZF9yZXN1bWVfcm9vdF9odWIocjhhNjY1OTdfdG9faGNkKHI4YTY2NTk3KSk7CisJdXNiX2hjZF9wb2xsX3JoX3N0YXR1cyhyOGE2NjU5N190b19oY2QocjhhNjY1OTcpKTsKIH0KIAogLyogdGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCB3aXRoIGludGVycnVwdCBkaXNhYmxlZCAqLwpAQCAtMTAyNCw2ICsxMDI1LDggQEAKIAl1MTYgc3BlZWQgPSBnZXRfcmhfdXNiX3NwZWVkKHI4YTY2NTk3LCBwb3J0KTsKIAlzdHJ1Y3QgcjhhNjY1OTdfcm9vdF9odWIgKnJoID0gJnI4YTY2NTk3LT5yb290X2h1Yltwb3J0XTsKIAorCXJoLT5wb3J0ICY9IH4oKDEgPDwgVVNCX1BPUlRfRkVBVF9ISUdIU1BFRUQpIHwKKwkJICAgICAgKDEgPDwgVVNCX1BPUlRfRkVBVF9MT1dTUEVFRCkpOwogCWlmIChzcGVlZCA9PSBIU01PREUpCiAJCXJoLT5wb3J0IHw9ICgxIDw8IFVTQl9QT1JUX0ZFQVRfSElHSFNQRUVEKTsKIAllbHNlIGlmIChzcGVlZCA9PSBMU01PREUpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3doY2kvYXNsLmMgYi9kcml2ZXJzL3VzYi9ob3N0L3doY2kvYXNsLmMKaW5kZXggYzYzMjQzNy4uNTYyZWJhMSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC93aGNpL2FzbC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvd2hjaS9hc2wuYwpAQCAtMTE1LDYgKzExNSwxMCBAQAogCQlpZiAoc3RhdHVzICYgUVREX1NUU19IQUxURUQpIHsKIAkJCS8qIFVnLCBhbiBlcnJvci4gKi8KIAkJCXByb2Nlc3NfaGFsdGVkX3F0ZCh3aGMsIHFzZXQsIHRkKTsKKwkJCS8qIEEgaGFsdGVkIHFURCBhbHdheXMgdHJpZ2dlcnMgYW4gdXBkYXRlCisJCQkgICBiZWNhdXNlIHRoZSBxc2V0IHdhcyBlaXRoZXIgcmVtb3ZlZCBvcgorCQkJICAgcmVhY3RpdmF0ZWQuICovCisJCQl1cGRhdGUgfD0gV0hDX1VQREFURV9VUERBVEVEOwogCQkJZ290byBkb25lOwogCQl9CiAKQEAgLTMwNSw2ICszMDksNyBAQAogCXN0cnVjdCB3aGNfdXJiICp3dXJiID0gdXJiLT5oY3ByaXY7CiAJc3RydWN0IHdoY19xc2V0ICpxc2V0ID0gd3VyYi0+cXNldDsKIAlzdHJ1Y3Qgd2hjX3N0ZCAqc3RkLCAqdDsKKwlib29sIGhhc19xdGQgPSBmYWxzZTsKIAlpbnQgcmV0OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKQEAgLTMxNSwxNyArMzIwLDIxIEBACiAJCWdvdG8gb3V0OwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHN0ZCwgdCwgJnFzZXQtPnN0ZHMsIGxpc3Rfbm9kZSkgewotCQlpZiAoc3RkLT51cmIgPT0gdXJiKQorCQlpZiAoc3RkLT51cmIgPT0gdXJiKSB7CisJCQlpZiAoc3RkLT5xdGQpCisJCQkJaGFzX3F0ZCA9IHRydWU7CiAJCQlxc2V0X2ZyZWVfc3RkKHdoYywgc3RkKTsKLQkJZWxzZQorCQl9IGVsc2UKIAkJCXN0ZC0+cXRkID0gTlVMTDsgLyogc28gdGhpcyBzdGQgaXMgcmUtYWRkZWQgd2hlbiB0aGUgcXNldCBpcyAqLwogCX0KIAotCWFzbF9xc2V0X3JlbW92ZSh3aGMsIHFzZXQpOwotCXd1cmItPnN0YXR1cyA9IHN0YXR1czsKLQl3dXJiLT5pc19hc3luYyA9IHRydWU7Ci0JcXVldWVfd29yayh3aGMtPndvcmtxdWV1ZSwgJnd1cmItPmRlcXVldWVfd29yayk7Ci0KKwlpZiAoaGFzX3F0ZCkgeworCQlhc2xfcXNldF9yZW1vdmUod2hjLCBxc2V0KTsKKwkJd3VyYi0+c3RhdHVzID0gc3RhdHVzOworCQl3dXJiLT5pc19hc3luYyA9IHRydWU7CisJCXF1ZXVlX3dvcmsod2hjLT53b3JrcXVldWUsICZ3dXJiLT5kZXF1ZXVlX3dvcmspOworCX0gZWxzZQorCQlxc2V0X3JlbW92ZV91cmIod2hjLCBxc2V0LCB1cmIsIHN0YXR1cyk7CiBvdXQ6CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmd2hjLT5sb2NrLCBmbGFncyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvd2hjaS9kZWJ1Zy5jIGIvZHJpdmVycy91c2IvaG9zdC93aGNpL2RlYnVnLmMKaW5kZXggY2YyZDQ1OS4uMjI3M2M4MSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC93aGNpL2RlYnVnLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC93aGNpL2RlYnVnLmMKQEAgLTEzNCw3ICsxMzQsNyBAQAogCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBwemxfcHJpbnQsIGlub2RlLT5pX3ByaXZhdGUpOwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkaV9mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZGlfZm9wcyA9IHsKIAkub3BlbiAgICA9IGRpX29wZW4sCiAJLnJlYWQgICAgPSBzZXFfcmVhZCwKIAkubGxzZWVrICA9IHNlcV9sc2VlaywKQEAgLTE0Miw3ICsxNDIsNyBAQAogCS5vd25lciAgID0gVEhJU19NT0RVTEUsCiB9OwogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBhc2xfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGFzbF9mb3BzID0gewogCS5vcGVuICAgID0gYXNsX29wZW4sCiAJLnJlYWQgICAgPSBzZXFfcmVhZCwKIAkubGxzZWVrICA9IHNlcV9sc2VlaywKQEAgLTE1MCw3ICsxNTAsNyBAQAogCS5vd25lciAgID0gVEhJU19NT0RVTEUsCiB9OwogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwemxfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHB6bF9mb3BzID0gewogCS5vcGVuICAgID0gcHpsX29wZW4sCiAJLnJlYWQgICAgPSBzZXFfcmVhZCwKIAkubGxzZWVrICA9IHNlcV9sc2VlaywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvd2hjaS9wemwuYyBiL2RyaXZlcnMvdXNiL2hvc3Qvd2hjaS9wemwuYwppbmRleCBhOWUwNWJhLi4wZGIzZmIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3doY2kvcHpsLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC93aGNpL3B6bC5jCkBAIC0xMjEsNiArMTIxLDEwIEBACiAJCWlmIChzdGF0dXMgJiBRVERfU1RTX0hBTFRFRCkgewogCQkJLyogVWcsIGFuIGVycm9yLiAqLwogCQkJcHJvY2Vzc19oYWx0ZWRfcXRkKHdoYywgcXNldCwgdGQpOworCQkJLyogQSBoYWx0ZWQgcVREIGFsd2F5cyB0cmlnZ2VycyBhbiB1cGRhdGUKKwkJCSAgIGJlY2F1c2UgdGhlIHFzZXQgd2FzIGVpdGhlciByZW1vdmVkIG9yCisJCQkgICByZWFjdGl2YXRlZC4gKi8KKwkJCXVwZGF0ZSB8PSBXSENfVVBEQVRFX1VQREFURUQ7CiAJCQlnb3RvIGRvbmU7CiAJCX0KIApAQCAtMzMzLDYgKzMzNyw3IEBACiAJc3RydWN0IHdoY191cmIgKnd1cmIgPSB1cmItPmhjcHJpdjsKIAlzdHJ1Y3Qgd2hjX3FzZXQgKnFzZXQgPSB3dXJiLT5xc2V0OwogCXN0cnVjdCB3aGNfc3RkICpzdGQsICp0OworCWJvb2wgaGFzX3F0ZCA9IGZhbHNlOwogCWludCByZXQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIApAQCAtMzQzLDE3ICszNDgsMjIgQEAKIAkJZ290byBvdXQ7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc3RkLCB0LCAmcXNldC0+c3RkcywgbGlzdF9ub2RlKSB7Ci0JCWlmIChzdGQtPnVyYiA9PSB1cmIpCisJCWlmIChzdGQtPnVyYiA9PSB1cmIpIHsKKwkJCWlmIChzdGQtPnF0ZCkKKwkJCQloYXNfcXRkID0gdHJ1ZTsKIAkJCXFzZXRfZnJlZV9zdGQod2hjLCBzdGQpOwotCQllbHNlCisJCX0gZWxzZQogCQkJc3RkLT5xdGQgPSBOVUxMOyAvKiBzbyB0aGlzIHN0ZCBpcyByZS1hZGRlZCB3aGVuIHRoZSBxc2V0IGlzICovCiAJfQogCi0JcHpsX3FzZXRfcmVtb3ZlKHdoYywgcXNldCk7Ci0Jd3VyYi0+c3RhdHVzID0gc3RhdHVzOwotCXd1cmItPmlzX2FzeW5jID0gZmFsc2U7Ci0JcXVldWVfd29yayh3aGMtPndvcmtxdWV1ZSwgJnd1cmItPmRlcXVldWVfd29yayk7Ci0KKwlpZiAoaGFzX3F0ZCkgeworCQlwemxfcXNldF9yZW1vdmUod2hjLCBxc2V0KTsKKwkJdXBkYXRlX3B6bF9od192aWV3KHdoYyk7CisJCXd1cmItPnN0YXR1cyA9IHN0YXR1czsKKwkJd3VyYi0+aXNfYXN5bmMgPSBmYWxzZTsKKwkJcXVldWVfd29yayh3aGMtPndvcmtxdWV1ZSwgJnd1cmItPmRlcXVldWVfd29yayk7CisJfSBlbHNlCisJCXFzZXRfcmVtb3ZlX3VyYih3aGMsIHFzZXQsIHVyYiwgc3RhdHVzKTsKIG91dDoKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ3aGMtPmxvY2ssIGZsYWdzKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC94aGNpLWhjZC5jIGIvZHJpdmVycy91c2IvaG9zdC94aGNpLWhjZC5jCmluZGV4IDk5OTExZTcuLjkzMmY5OTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1oY2QuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktaGNkLmMKQEAgLTMzNSw2ICszMzUsMTIgQEAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmeGhjaS0+bG9jaywgZmxhZ3MpOwogCXRlbXAgPSB4aGNpX3JlYWRsKHhoY2ksICZ4aGNpLT5vcF9yZWdzLT5zdGF0dXMpOwogCXhoY2lfZGJnKHhoY2ksICJvcCByZWcgc3RhdHVzID0gMHgleFxuIiwgdGVtcCk7CisJaWYgKHRlbXAgPT0gMHhmZmZmZmZmZikgeworCQl4aGNpX2RiZyh4aGNpLCAiSFcgZGllZCwgcG9sbGluZyBzdG9wcGVkLlxuIik7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnhoY2ktPmxvY2ssIGZsYWdzKTsKKwkJcmV0dXJuOworCX0KKwogCXRlbXAgPSB4aGNpX3JlYWRsKHhoY2ksICZ4aGNpLT5pcl9zZXQtPmlycV9wZW5kaW5nKTsKIAl4aGNpX2RiZyh4aGNpLCAiaXJfc2V0IDAgcGVuZGluZyA9IDB4JXhcbiIsIHRlbXApOwogCXhoY2lfZGJnKHhoY2ksICJOby1vcCBjb21tYW5kcyBoYW5kbGVkID0gJWRcbiIsIHhoY2ktPm5vb3BzX2hhbmRsZWQpOwpAQCAtNzc2LDYgKzc4Miw3IEBACiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmV0OworCXUzMiB0ZW1wOwogCXN0cnVjdCB4aGNpX2hjZCAqeGhjaTsKIAlzdHJ1Y3QgeGhjaV90ZCAqdGQ7CiAJdW5zaWduZWQgaW50IGVwX2luZGV4OwpAQCAtNzg4LDYgKzc5NSwxNyBAQAogCXJldCA9IHVzYl9oY2RfY2hlY2tfdW5saW5rX3VyYihoY2QsIHVyYiwgc3RhdHVzKTsKIAlpZiAocmV0IHx8ICF1cmItPmhjcHJpdikKIAkJZ290byBkb25lOworCXRlbXAgPSB4aGNpX3JlYWRsKHhoY2ksICZ4aGNpLT5vcF9yZWdzLT5zdGF0dXMpOworCWlmICh0ZW1wID09IDB4ZmZmZmZmZmYpIHsKKwkJeGhjaV9kYmcoeGhjaSwgIkhXIGRpZWQsIGZyZWVpbmcgVEQuXG4iKTsKKwkJdGQgPSAoc3RydWN0IHhoY2lfdGQgKikgdXJiLT5oY3ByaXY7CisKKwkJdXNiX2hjZF91bmxpbmtfdXJiX2Zyb21fZXAoaGNkLCB1cmIpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ4aGNpLT5sb2NrLCBmbGFncyk7CisJCXVzYl9oY2RfZ2l2ZWJhY2tfdXJiKHhoY2lfdG9faGNkKHhoY2kpLCB1cmIsIC1FU0hVVERPV04pOworCQlrZnJlZSh0ZCk7CisJCXJldHVybiByZXQ7CisJfQogCiAJeGhjaV9kYmcoeGhjaSwgIkNhbmNlbCBVUkIgJXBcbiIsIHVyYik7CiAJeGhjaV9kYmcoeGhjaSwgIkV2ZW50IHJpbmc6XG4iKTsKQEAgLTg3Nyw3ICs4OTUsNyBAQAogCWN0cmxfY3R4LT5kcm9wX2ZsYWdzIHw9IGRyb3BfZmxhZzsKIAluZXdfZHJvcF9mbGFncyA9IGN0cmxfY3R4LT5kcm9wX2ZsYWdzOwogCi0JY3RybF9jdHgtPmFkZF9mbGFncyA9IH5kcm9wX2ZsYWc7CisJY3RybF9jdHgtPmFkZF9mbGFncyAmPSB+ZHJvcF9mbGFnOwogCW5ld19hZGRfZmxhZ3MgPSBjdHJsX2N0eC0+YWRkX2ZsYWdzOwogCiAJbGFzdF9jdHggPSB4aGNpX2xhc3RfdmFsaWRfZW5kcG9pbnQoY3RybF9jdHgtPmFkZF9mbGFncyk7CkBAIC0xNDEwLDExICsxNDI4LDIwIEBACiB7CiAJc3RydWN0IHhoY2lfaGNkICp4aGNpID0gaGNkX3RvX3hoY2koaGNkKTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUzMiBzdGF0ZTsKIAogCWlmICh1ZGV2LT5zbG90X2lkID09IDApCiAJCXJldHVybjsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZ4aGNpLT5sb2NrLCBmbGFncyk7CisJLyogRG9uJ3QgZGlzYWJsZSB0aGUgc2xvdCBpZiB0aGUgaG9zdCBjb250cm9sbGVyIGlzIGRlYWQuICovCisJc3RhdGUgPSB4aGNpX3JlYWRsKHhoY2ksICZ4aGNpLT5vcF9yZWdzLT5zdGF0dXMpOworCWlmIChzdGF0ZSA9PSAweGZmZmZmZmZmKSB7CisJCXhoY2lfZnJlZV92aXJ0X2RldmljZSh4aGNpLCB1ZGV2LT5zbG90X2lkKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmeGhjaS0+bG9jaywgZmxhZ3MpOworCQlyZXR1cm47CisJfQorCiAJaWYgKHhoY2lfcXVldWVfc2xvdF9jb250cm9sKHhoY2ksIFRSQl9ESVNBQkxFX1NMT1QsIHVkZXYtPnNsb3RfaWQpKSB7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnhoY2ktPmxvY2ssIGZsYWdzKTsKIAkJeGhjaV9kYmcoeGhjaSwgIkZJWE1FOiBhbGxvY2F0ZSBhIGNvbW1hbmQgcmluZyBzZWdtZW50XG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2MvcmlvNTAwLmMgYi9kcml2ZXJzL3VzYi9taXNjL3JpbzUwMC5jCmluZGV4IGQ2NDVmMzguLjMyZDAxOTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL21pc2MvcmlvNTAwLmMKKysrIGIvZHJpdmVycy91c2IvbWlzYy9yaW81MDAuYwpAQCAtNDI5LDggKzQyOSw3IEBACiAJcmV0dXJuIHJlYWRfY291bnQ7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QKLWZpbGVfb3BlcmF0aW9ucyB1c2JfcmlvX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB1c2JfcmlvX2ZvcHMgPSB7CiAJLm93bmVyID0JVEhJU19NT0RVTEUsCiAJLnJlYWQgPQkJcmVhZF9yaW8sCiAJLndyaXRlID0Jd3JpdGVfcmlvLApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy9zaXN1c2J2Z2Evc2lzdXNiX2luaXQuYyBiL2RyaXZlcnMvdXNiL21pc2Mvc2lzdXNidmdhL3Npc3VzYl9pbml0LmMKaW5kZXggMjczZGU1ZC4uMGFiOTkwNyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWlzYy9zaXN1c2J2Z2Evc2lzdXNiX2luaXQuYworKysgYi9kcml2ZXJzL3VzYi9taXNjL3Npc3VzYnZnYS9zaXN1c2JfaW5pdC5jCkBAIC00Myw3ICs0Myw2IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotI2luY2x1ZGUgPGxpbnV4L2tyZWYuaD4KIAogI2luY2x1ZGUgInNpc3VzYi5oIgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL3VzYmxjZC5jIGIvZHJpdmVycy91c2IvbWlzYy91c2JsY2QuYwppbmRleCAyOTA5MmI4Li40ZmIxMjAzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9taXNjL3VzYmxjZC5jCisrKyBiL2RyaXZlcnMvdXNiL21pc2MvdXNibGNkLmMKQEAgLTMxMyw3ICszMTMsOCBAQAogCiAJaWYgKGxlMTZfdG9fY3B1KGRldi0+dWRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpICE9IDB4MDAwMSkgewogCQlkZXZfd2FybigmaW50ZXJmYWNlLT5kZXYsICJVU0JMQ0QgbW9kZWwgbm90IHN1cHBvcnRlZC5cbiIpOwotCQlyZXR1cm4gLUVOT0RFVjsKKwkJcmV0dmFsID0gLUVOT0RFVjsKKwkJZ290byBlcnJvcjsKIAl9CiAJCiAJLyogc2V0IHVwIHRoZSBlbmRwb2ludCBpbmZvcm1hdGlvbiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbW9uL21vbl9iaW4uYyBiL2RyaXZlcnMvdXNiL21vbi9tb25fYmluLmMKaW5kZXggZGZkYzQzZS4uOWVkM2U3NCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbW9uL21vbl9iaW4uYworKysgYi9kcml2ZXJzL3VzYi9tb24vbW9uX2Jpbi5jCkBAIC0xMTc0LDcgKzExNzQsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IG1vbl9iaW5fdm1fb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBtb25fYmluX3ZtX29wcyA9IHsKIAkub3BlbiA9ICAgICBtb25fYmluX3ZtYV9vcGVuLAogCS5jbG9zZSA9ICAgIG1vbl9iaW5fdm1hX2Nsb3NlLAogCS5mYXVsdCA9ICAgIG1vbl9iaW5fdm1hX2ZhdWx0LApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbXVzYi9LY29uZmlnIGIvZHJpdmVycy91c2IvbXVzYi9LY29uZmlnCmluZGV4IDgwM2FkY2IuLmI4NGFiZDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL211c2IvS2NvbmZpZworKysgYi9kcml2ZXJzL3VzYi9tdXNiL0tjb25maWcKQEAgLTgsOCArOCw4IEBACiAKICMgKE0pSERSQyA9IChNdWx0aXBvaW50KSBIaWdoc3BlZWQgRHVhbC1Sb2xlIENvbnRyb2xsZXIKIGNvbmZpZyBVU0JfTVVTQl9IRFJDCi0JZGVwZW5kcyBvbiAoVVNCIHx8IFVTQl9HQURHRVQpICYmIEhBVkVfQ0xLCi0JZGVwZW5kcyBvbiAhU1VQRVJICisJZGVwZW5kcyBvbiAoVVNCIHx8IFVTQl9HQURHRVQpCisJZGVwZW5kcyBvbiAoQVJNIHx8IEJMQUNLRklOKQogCXNlbGVjdCBOT1BfVVNCX1hDRUlWIGlmIEFSQ0hfREFWSU5DSQogCXNlbGVjdCBUV0w0MDMwX1VTQiBpZiBNQUNIX09NQVBfMzQzMFNEUAogCXNlbGVjdCBOT1BfVVNCX1hDRUlWIGlmIE1BQ0hfT01BUDNFVk0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL211c2IvYmxhY2tmaW4uYyBiL2RyaXZlcnMvdXNiL211c2IvYmxhY2tmaW4uYwppbmRleCBmMmY2NmViLi5mY2VjODdlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tdXNiL2JsYWNrZmluLmMKKysrIGIvZHJpdmVycy91c2IvbXVzYi9ibGFja2Zpbi5jCkBAIC0xNCw3ICsxNCw2IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+Ci0jaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL211c2IvbXVzYl9jb3JlLmggYi9kcml2ZXJzL3VzYi9tdXNiL211c2JfY29yZS5oCmluZGV4IDM4MWQ2NDguLjZhYTVmMjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL211c2IvbXVzYl9jb3JlLmgKKysrIGIvZHJpdmVycy91c2IvbXVzYi9tdXNiX2NvcmUuaApAQCAtOTUsNiArOTUsMTMgQEAKICNlbmRpZgogI2VuZGlmCS8qIG5lZWQgTVVTQiBnYWRnZXQgc2VsZWN0aW9uICovCiAKKyNpZm5kZWYgQ09ORklHX0hBVkVfQ0xLCisvKiBEdW1teSBzdHViIGZvciBjbGsgZnJhbWV3b3JrICovCisjZGVmaW5lIGNsa19nZXQoZGV2LCBpZCkJTlVMTAorI2RlZmluZSBjbGtfcHV0KGNsb2NrKQkJZG8ge30gd2hpbGUgKDApCisjZGVmaW5lIGNsa19lbmFibGUoY2xvY2spCWRvIHt9IHdoaWxlICgwKQorI2RlZmluZSBjbGtfZGlzYWJsZShjbG9jaykJZG8ge30gd2hpbGUgKDApCisjZW5kaWYKIAogI2lmZGVmIENPTkZJR19QUk9DX0ZTCiAjaW5jbHVkZSA8bGludXgvZnMuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL211c2IvbXVzYl9yZWdzLmggYi9kcml2ZXJzL3VzYi9tdXNiL211c2JfcmVncy5oCmluZGV4IGZiZmQzZmQuLmNjMWQ3MWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL211c2IvbXVzYl9yZWdzLmgKKysrIGIvZHJpdmVycy91c2IvbXVzYi9tdXNiX3JlZ3MuaApAQCAtNDM5LDE1ICs0MzksNiBAQAogLyogTm90IGltcGxlbWVudGVkIC0gSFcgaGFzIHNlcGVyYXRlIFR4L1J4IEZJRk8gKi8KICNkZWZpbmUgTVVTQl9UWENTUl9NT0RFCQkJMHgwMDAwCiAKLS8qCi0gKiBEdW1teSBzdHViIGZvciBjbGsgZnJhbWV3b3JrLCBpdCB3aWxsIGJlIHJlbW92ZWQKLSAqIHVudGlsIEJsYWNrZmluIHN1cHBvcnRzIGNsayBmcmFtZXdvcmsKLSAqLwotI2RlZmluZSBjbGtfZ2V0KGRldiwgaWQpCU5VTEwKLSNkZWZpbmUgY2xrX3B1dChjbG9jaykJCWRvIHt9IHdoaWxlICgwKQotI2RlZmluZSBjbGtfZW5hYmxlKGNsb2NrKQlkbyB7fSB3aGlsZSAoMCkKLSNkZWZpbmUgY2xrX2Rpc2FibGUoY2xvY2spCWRvIHt9IHdoaWxlICgwKQotCiBzdGF0aWMgaW5saW5lIHZvaWQgbXVzYl93cml0ZV90eGZpZm9zeih2b2lkIF9faW9tZW0gKm1iYXNlLCB1OCBjX3NpemUpCiB7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvYWlyY2FibGUuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9haXJjYWJsZS5jCmluZGV4IDJjYmZhYjMuLmIxMGFjODQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9haXJjYWJsZS5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9haXJjYWJsZS5jCkBAIC01NTQsMTMgKzU1NCwxMiBAQAogewogCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOwogCXN0cnVjdCBhaXJjYWJsZV9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnJ4X2xvY2ssIGZsYWdzKTsKKwlzcGluX2xvY2tfaXJxKCZwcml2LT5yeF9sb2NrKTsKIAlwcml2LT5yeF9mbGFncyB8PSBUSFJPVFRMRUQ7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+cnhfbG9jaywgZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycSgmcHJpdi0+cnhfbG9jayk7CiB9CiAKIC8qIEJhc2VkIG9uIGZ0ZGlfc2lvLmMgdW50aHJvdHRsZSAqLwpAQCAtNTY5LDE0ICs1NjgsMTMgQEAKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKIAlzdHJ1Y3QgYWlyY2FibGVfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKIAlpbnQgYWN0dWFsbHlfdGhyb3R0bGVkOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnJ4X2xvY2ssIGZsYWdzKTsKKwlzcGluX2xvY2tfaXJxKCZwcml2LT5yeF9sb2NrKTsKIAlhY3R1YWxseV90aHJvdHRsZWQgPSBwcml2LT5yeF9mbGFncyAmIEFDVFVBTExZX1RIUk9UVExFRDsKIAlwcml2LT5yeF9mbGFncyAmPSB+KFRIUk9UVExFRCB8IEFDVFVBTExZX1RIUk9UVExFRCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+cnhfbG9jaywgZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycSgmcHJpdi0+cnhfbG9jayk7CiAKIAlpZiAoYWN0dWFsbHlfdGhyb3R0bGVkKQogCQlzY2hlZHVsZV93b3JrKCZwcml2LT5yeF93b3JrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9jcDIxMHguYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9jcDIxMHguYwppbmRleCA0YTIwOGZlLi42OTgyNTJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvY3AyMTB4LmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2NwMjEweC5jCkBAIC0xMTMsNiArMTEzLDcgQEAKIAl7IFVTQl9ERVZJQ0UoMHgxNjZBLCAweDAzMDMpIH0sIC8qIENsaXBzYWwgNTUwMFBDVSBDLUJ1cyBVU0IgaW50ZXJmYWNlICovCiAJeyBVU0JfREVWSUNFKDB4MTZENiwgMHgwMDAxKSB9LCAvKiBKYWJsb3Ryb24gc2VyaWFsIGludGVyZmFjZSAqLwogCXsgVVNCX0RFVklDRSgweDE4RUYsIDB4RTAwRikgfSwgLyogRUxWIFVTQi1JMkMtSW50ZXJmYWNlICovCisJeyBVU0JfREVWSUNFKDB4NDEzQywgMHg5NTAwKSB9LCAvKiBEVzcwMCBHUFMgVVNCIGludGVyZmFjZSAqLwogCXsgfSAvKiBUZXJtaW5hdGluZyBFbnRyeSAqLwogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2N5cHJlc3NfbTguYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9jeXByZXNzX204LmMKaW5kZXggZTBhOGI3MS4uYTU5MWViZSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2N5cHJlc3NfbTguYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvY3lwcmVzc19tOC5jCkBAIC0xMTU1LDEzICsxMTU1LDEyIEBACiB7CiAJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CiAJc3RydWN0IGN5cHJlc3NfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrX2lycSgmcHJpdi0+bG9jayk7CiAJcHJpdi0+cnhfZmxhZ3MgPSBUSFJPVFRMRUQ7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycSgmcHJpdi0+bG9jayk7CiB9CiAKIApAQCAtMTE3MCwxNCArMTE2OSwxMyBAQAogCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOwogCXN0cnVjdCBjeXByZXNzX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CiAJaW50IGFjdHVhbGx5X3Rocm90dGxlZCwgcmVzdWx0OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlzcGluX2xvY2tfaXJxKCZwcml2LT5sb2NrKTsKIAlhY3R1YWxseV90aHJvdHRsZWQgPSBwcml2LT5yeF9mbGFncyAmIEFDVFVBTExZX1RIUk9UVExFRDsKIAlwcml2LT5yeF9mbGFncyA9IDA7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycSgmcHJpdi0+bG9jayk7CiAKIAlpZiAoIXByaXYtPmNvbW1faXNfb2spCiAJCXJldHVybjsKQEAgLTExODUsNyArMTE4Myw3IEBACiAJaWYgKGFjdHVhbGx5X3Rocm90dGxlZCkgewogCQlwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiLT5kZXYgPSBwb3J0LT5zZXJpYWwtPmRldjsKIAotCQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiLCBHRlBfQVRPTUlDKTsKKwkJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+aW50ZXJydXB0X2luX3VyYiwgR0ZQX0tFUk5FTCk7CiAJCWlmIChyZXN1bHQpIHsKIAkJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgcmVhZCB1cmIsICIKIAkJCQkJImVycm9yICVkXG4iLCBfX2Z1bmNfXywgcmVzdWx0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9kaWdpX2FjY2VsZXBvcnQuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9kaWdpX2FjY2VsZXBvcnQuYwppbmRleCBhYjNkZDk5Li42OGU4MGJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvZGlnaV9hY2NlbGVwb3J0LmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2RpZ2lfYWNjZWxlcG9ydC5jCkBAIC04OTgsMTYgKzg5OCwxNiBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmRwX3BvcnRfbG9jaywgZmxhZ3MpOwogCi0JLyogdHVybiB0aHJvdHRsZSBvZmYgKi8KLQlwcml2LT5kcF90aHJvdHRsZWQgPSAwOwotCXByaXYtPmRwX3Rocm90dGxlX3Jlc3RhcnQgPSAwOwotCiAJLyogcmVzdGFydCByZWFkIGNoYWluICovCiAJaWYgKHByaXYtPmRwX3Rocm90dGxlX3Jlc3RhcnQpIHsKIAkJcG9ydC0+cmVhZF91cmItPmRldiA9IHBvcnQtPnNlcmlhbC0+ZGV2OwogCQlyZXQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5yZWFkX3VyYiwgR0ZQX0FUT01JQyk7CiAJfQogCisJLyogdHVybiB0aHJvdHRsZSBvZmYgKi8KKwlwcml2LT5kcF90aHJvdHRsZWQgPSAwOworCXByaXYtPmRwX3Rocm90dGxlX3Jlc3RhcnQgPSAwOworCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+ZHBfcG9ydF9sb2NrLCBmbGFncyk7CiAKIAlpZiAocmV0KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2VtcGVnLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZW1wZWcuYwppbmRleCAzM2M5ZTljLi43ZGQwZTNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvZW1wZWcuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZW1wZWcuYwpAQCAtMzkxLDcgKzM5MSw3IEBACiAJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKIAogCXBvcnQtPnJlYWRfdXJiLT5kZXYgPSBwb3J0LT5zZXJpYWwtPmRldjsKLQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5yZWFkX3VyYiwgR0ZQX0FUT01JQyk7CisJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+cmVhZF91cmIsIEdGUF9LRVJORUwpOwogCWlmIChyZXN1bHQpCiAJCWRldl9lcnIoJnBvcnQtPmRldiwKIAkJCSIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZFxuIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npby5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvLmMKaW5kZXggNGY4ODNiMS4uOWM2MGQ2ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvLmMKQEAgLTc2LDEzICs3Niw3IEBACiAJdW5zaWduZWQgbG9uZyBsYXN0X2R0cl9ydHM7CS8qIHNhdmVkIG1vZGVtIGNvbnRyb2wgb3V0cHV0cyAqLwogCXdhaXRfcXVldWVfaGVhZF90IGRlbHRhX21zcl93YWl0OyAvKiBVc2VkIGZvciBUSU9DTUlXQUlUICovCiAJY2hhciBwcmV2X3N0YXR1cywgZGlmZl9zdGF0dXM7ICAgICAgICAvKiBVc2VkIGZvciBUSU9DTUlXQUlUICovCi0JX191OCByeF9mbGFnczsJCS8qIHJlY2VpdmUgc3RhdGUgZmxhZ3MgKHRocm90dGxpbmcpICovCi0Jc3BpbmxvY2tfdCByeF9sb2NrOwkvKiBzcGlubG9jayBmb3IgcmVjZWl2ZSBzdGF0ZSAqLwotCXN0cnVjdCBkZWxheWVkX3dvcmsgcnhfd29yazsKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0OwotCWludCByeF9wcm9jZXNzZWQ7Ci0JdW5zaWduZWQgbG9uZyByeF9ieXRlczsKLQogCV9fdTE2IGludGVyZmFjZTsJLyogRlQyMjMyQywgRlQyMjMySCBvciBGVDQyMzJIIHBvcnQgaW50ZXJmYWNlCiAJCQkJICAgKDAgZm9yIEZUMjMyLzI0NSkgKi8KIApAQCAtNzM3LDEwICs3MzEsNiBAQAogLyogQ29uc3RhbnRzIGZvciByZWFkIHVyYiBhbmQgd3JpdGUgdXJiICovCiAjZGVmaW5lIEJVRlNaIDUxMgogCi0vKiByeF9mbGFncyAqLwotI2RlZmluZSBUSFJPVFRMRUQJCTB4MDEKLSNkZWZpbmUgQUNUVUFMTFlfVEhST1RUTEVECTB4MDIKLQogLyogVXNlZCBmb3IgVElPQ01JV0FJVCAqLwogI2RlZmluZSBGVERJX1NUQVRVU19CMF9NQVNLCShGVERJX1JTMF9DVFMgfCBGVERJX1JTMF9EU1IgfCBGVERJX1JTMF9SSSB8IEZURElfUlMwX1JMU0QpCiAjZGVmaW5lIEZURElfU1RBVFVTX0IxX01BU0sJKEZURElfUlNfQkkpCkBAIC03NjMsNyArNzUzLDcgQEAKIHN0YXRpYyBpbnQgIGZ0ZGlfY2hhcnNfaW5fYnVmZmVyKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOwogc3RhdGljIHZvaWQgZnRkaV93cml0ZV9idWxrX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYik7CiBzdGF0aWMgdm9pZCBmdGRpX3JlYWRfYnVsa19jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpOwotc3RhdGljIHZvaWQgZnRkaV9wcm9jZXNzX3JlYWQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKK3N0YXRpYyB2b2lkIGZ0ZGlfcHJvY2Vzc19yZWFkKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOwogc3RhdGljIHZvaWQgZnRkaV9zZXRfdGVybWlvcyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAogCQkJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGt0ZXJtaW9zICpvbGQpOwogc3RhdGljIGludCAgZnRkaV90aW9jbWdldChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSk7CkBAIC0xMjM0LDcgKzEyMjQsNiBAQAogCQkJCQkobmV3X3NlcmlhbC5mbGFncyAmIEFTWU5DX0ZMQUdTKSk7CiAJcHJpdi0+Y3VzdG9tX2Rpdmlzb3IgPSBuZXdfc2VyaWFsLmN1c3RvbV9kaXZpc29yOwogCi0JdHR5LT5sb3dfbGF0ZW5jeSA9IChwcml2LT5mbGFncyAmIEFTWU5DX0xPV19MQVRFTkNZKSA/IDEgOiAwOwogCXdyaXRlX2xhdGVuY3lfdGltZXIocG9ydCk7CiAKIGNoZWNrX2FuZF9leGl0OgpAQCAtMTUyNyw3ICsxNTE2LDYgQEAKIAl9CiAKIAlrcmVmX2luaXQoJnByaXYtPmtyZWYpOwotCXNwaW5fbG9ja19pbml0KCZwcml2LT5yeF9sb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmcHJpdi0+dHhfbG9jayk7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmcHJpdi0+ZGVsdGFfbXNyX3dhaXQpOwogCS8qIFRoaXMgd2lsbCBwdXNoIHRoZSBjaGFyYWN0ZXJzIHRocm91Z2ggaW1tZWRpYXRlbHkgcmF0aGVyCkBAIC0xNTQ5LDcgKzE1MzcsNiBAQAogCQlwb3J0LT5yZWFkX3VyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IEJVRlNaOwogCX0KIAotCUlOSVRfREVMQVlFRF9XT1JLKCZwcml2LT5yeF93b3JrLCBmdGRpX3Byb2Nlc3NfcmVhZCk7CiAJcHJpdi0+cG9ydCA9IHBvcnQ7CiAKIAkvKiBGcmVlIHBvcnQncyBleGlzdGluZyB3cml0ZSB1cmIgYW5kIHRyYW5zZmVyIGJ1ZmZlci4gKi8KQEAgLTE2ODYsNiArMTY3MywyNiBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGZ0ZGlfc3VibWl0X3JlYWRfdXJiKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIGdmcF90IG1lbV9mbGFncykKK3sKKwlzdHJ1Y3QgdXJiICp1cmIgPSBwb3J0LT5yZWFkX3VyYjsKKwlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gcG9ydC0+c2VyaWFsOworCWludCByZXN1bHQ7CisKKwl1c2JfZmlsbF9idWxrX3VyYih1cmIsIHNlcmlhbC0+ZGV2LAorCQkJICAgdXNiX3JjdmJ1bGtwaXBlKHNlcmlhbC0+ZGV2LAorCQkJCQlwb3J0LT5idWxrX2luX2VuZHBvaW50QWRkcmVzcyksCisJCQkgICB1cmItPnRyYW5zZmVyX2J1ZmZlciwKKwkJCSAgIHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwKKwkJCSAgIGZ0ZGlfcmVhZF9idWxrX2NhbGxiYWNrLCBwb3J0KTsKKwlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYih1cmIsIG1lbV9mbGFncyk7CisJaWYgKHJlc3VsdCkKKwkJZGV2X2VycigmcG9ydC0+ZGV2LAorCQkJIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkXG4iLAorCQkJCQkJCV9fZnVuY19fLCByZXN1bHQpOworCXJldHVybiByZXN1bHQ7Cit9CisKIHN0YXRpYyBpbnQgZnRkaV9vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCiB7IC8qIGZ0ZGlfb3BlbiAqLwogCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBwb3J0LT5zZXJpYWwtPmRldjsKQEAgLTE3MDAsMTIgKzE3MDcsNiBAQAogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT50eF9sb2NrLCBmbGFncyk7CiAJcHJpdi0+dHhfYnl0ZXMgPSAwOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnR4X2xvY2ssIGZsYWdzKTsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+cnhfbG9jaywgZmxhZ3MpOwotCXByaXYtPnJ4X2J5dGVzID0gMDsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5yeF9sb2NrLCBmbGFncyk7Ci0KLQlpZiAodHR5KQotCQl0dHktPmxvd19sYXRlbmN5ID0gKHByaXYtPmZsYWdzICYgQVNZTkNfTE9XX0xBVEVOQ1kpID8gMSA6IDA7CiAKIAl3cml0ZV9sYXRlbmN5X3RpbWVyKHBvcnQpOwogCkBAIC0xNzI1LDIzICsxNzI2LDE0IEBACiAJCWZ0ZGlfc2V0X3Rlcm1pb3ModHR5LCBwb3J0LCB0dHktPnRlcm1pb3MpOwogCiAJLyogTm90IHRocm90dGxlZCAqLwotCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5yeF9sb2NrLCBmbGFncyk7Ci0JcHJpdi0+cnhfZmxhZ3MgJj0gfihUSFJPVFRMRUQgfCBBQ1RVQUxMWV9USFJPVFRMRUQpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnJ4X2xvY2ssIGZsYWdzKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcG9ydC0+bG9jaywgZmxhZ3MpOworCXBvcnQtPnRocm90dGxlZCA9IDA7CisJcG9ydC0+dGhyb3R0bGVfcmVxID0gMDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb3J0LT5sb2NrLCBmbGFncyk7CiAKIAkvKiBTdGFydCByZWFkaW5nIGZyb20gdGhlIGRldmljZSAqLwotCXByaXYtPnJ4X3Byb2Nlc3NlZCA9IDA7Ci0JdXNiX2ZpbGxfYnVsa191cmIocG9ydC0+cmVhZF91cmIsIGRldiwKLQkJCXVzYl9yY3ZidWxrcGlwZShkZXYsIHBvcnQtPmJ1bGtfaW5fZW5kcG9pbnRBZGRyZXNzKSwKLQkJCXBvcnQtPnJlYWRfdXJiLT50cmFuc2Zlcl9idWZmZXIsCi0JCQkJcG9ydC0+cmVhZF91cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsCi0JCQlmdGRpX3JlYWRfYnVsa19jYWxsYmFjaywgcG9ydCk7Ci0JcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+cmVhZF91cmIsIEdGUF9LRVJORUwpOwotCWlmIChyZXN1bHQpCi0JCWRldl9lcnIoJnBvcnQtPmRldiwKLQkJCSIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZFxuIiwKLQkJCV9fZnVuY19fLCByZXN1bHQpOwotCWVsc2UKKwlyZXN1bHQgPSBmdGRpX3N1Ym1pdF9yZWFkX3VyYihwb3J0LCBHRlBfS0VSTkVMKTsKKwlpZiAoIXJlc3VsdCkKIAkJa3JlZl9nZXQoJnByaXYtPmtyZWYpOwogCiAJcmV0dXJuIHJlc3VsdDsKQEAgLTE3ODcsMTAgKzE3NzksNiBAQAogCiAJZGJnKCIlcyIsIF9fZnVuY19fKTsKIAotCi0JLyogY2FuY2VsIGFueSBzY2hlZHVsZWQgcmVhZGluZyAqLwotCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmcHJpdi0+cnhfd29yayk7Ci0KIAkvKiBzaHV0ZG93biBvdXIgYnVsayByZWFkICovCiAJdXNiX2tpbGxfdXJiKHBvcnQtPnJlYWRfdXJiKTsKIAlrcmVmX3B1dCgmcHJpdi0+a3JlZiwgZnRkaV9zaW9fcHJpdl9yZWxlYXNlKTsKQEAgLTIwMTMsMjcxICsyMDAxLDEyMSBAQAogCXJldHVybiBidWZmZXJlZDsKIH0KIAorc3RhdGljIGludCBmdGRpX3Byb2Nlc3NfcGFja2V0KHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCisJCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmdGRpX3ByaXZhdGUgKnByaXYsCisJCWNoYXIgKnBhY2tldCwgaW50IGxlbikKK3sKKwlpbnQgaTsKKwljaGFyIHN0YXR1czsKKwljaGFyIGZsYWc7CisJY2hhciAqY2g7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOworCisJaWYgKGxlbiA8IDIpIHsKKwkJZGJnKCJtYWxmb3JtZWQgcGFja2V0Iik7CisJCXJldHVybiAwOworCX0KKworCS8qIENvbXBhcmUgbmV3IGxpbmUgc3RhdHVzIHRvIHRoZSBvbGQgb25lLCBzaWduYWwgaWYgZGlmZmVyZW50LworCSAgIE4uQi4gcGFja2V0IG1heSBiZSBwcm9jZXNzZWQgbW9yZSB0aGFuIG9uY2UsIGJ1dCBkaWZmZXJlbmNlcworCSAgIGFyZSBvbmx5IHByb2Nlc3NlZCBvbmNlLiAgKi8KKwlzdGF0dXMgPSBwYWNrZXRbMF0gJiBGVERJX1NUQVRVU19CMF9NQVNLOworCWlmIChzdGF0dXMgIT0gcHJpdi0+cHJldl9zdGF0dXMpIHsKKwkJcHJpdi0+ZGlmZl9zdGF0dXMgfD0gc3RhdHVzIF4gcHJpdi0+cHJldl9zdGF0dXM7CisJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcHJpdi0+ZGVsdGFfbXNyX3dhaXQpOworCQlwcml2LT5wcmV2X3N0YXR1cyA9IHN0YXR1czsKKwl9CisKKwkvKgorCSAqIEFsdGhvdWdoIHRoZSBkZXZpY2UgdXNlcyBhIGJpdG1hc2sgYW5kIGhlbmNlIGNhbiBoYXZlIG11bHRpcGxlCisJICogZXJyb3JzIG9uIGEgcGFja2V0IC0gdGhlIG9yZGVyIGhlcmUgc2V0cyB0aGUgcHJpb3JpdHkgdGhlIGVycm9yIGlzCisJICogcmV0dXJuZWQgdG8gdGhlIHR0eSBsYXllci4KKwkgKi8KKwlmbGFnID0gVFRZX05PUk1BTDsKKwlpZiAocGFja2V0WzFdICYgRlRESV9SU19PRSkgeworCQlmbGFnID0gVFRZX09WRVJSVU47CisJCWRiZygiT1ZFUlJSVU4gZXJyb3IiKTsKKwl9CisJaWYgKHBhY2tldFsxXSAmIEZURElfUlNfQkkpIHsKKwkJZmxhZyA9IFRUWV9CUkVBSzsKKwkJZGJnKCJCUkVBSyByZWNlaXZlZCIpOworCQl1c2Jfc2VyaWFsX2hhbmRsZV9icmVhayhwb3J0KTsKKwl9CisJaWYgKHBhY2tldFsxXSAmIEZURElfUlNfUEUpIHsKKwkJZmxhZyA9IFRUWV9QQVJJVFk7CisJCWRiZygiUEFSSVRZIGVycm9yIik7CisJfQorCWlmIChwYWNrZXRbMV0gJiBGVERJX1JTX0ZFKSB7CisJCWZsYWcgPSBUVFlfRlJBTUU7CisJCWRiZygiRlJBTUlORyBlcnJvciIpOworCX0KKworCWxlbiAtPSAyOworCWlmICghbGVuKQorCQlyZXR1cm4gMDsJLyogc3RhdHVzIG9ubHkgKi8KKwljaCA9IHBhY2tldCArIDI7CisKKwlpZiAoIShwb3J0LT5jb25zb2xlICYmIHBvcnQtPnN5c3JxKSAmJiBmbGFnID09IFRUWV9OT1JNQUwpCisJCXR0eV9pbnNlcnRfZmxpcF9zdHJpbmcodHR5LCBjaCwgbGVuKTsKKwllbHNlIHsKKwkJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrLCBjaCsrKSB7CisJCQlpZiAoIXVzYl9zZXJpYWxfaGFuZGxlX3N5c3JxX2NoYXIodHR5LCBwb3J0LCAqY2gpKQorCQkJCXR0eV9pbnNlcnRfZmxpcF9jaGFyKHR0eSwgKmNoLCBmbGFnKTsKKwkJfQorCX0KKwlyZXR1cm4gbGVuOworfQorCitzdGF0aWMgdm9pZCBmdGRpX3Byb2Nlc3NfcmVhZChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQoreworCXN0cnVjdCB1cmIgKnVyYiA9IHBvcnQtPnJlYWRfdXJiOworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7CisJc3RydWN0IGZ0ZGlfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwljaGFyICpkYXRhID0gKGNoYXIgKil1cmItPnRyYW5zZmVyX2J1ZmZlcjsKKwlpbnQgaTsKKwlpbnQgbGVuOworCWludCBjb3VudCA9IDA7CisKKwl0dHkgPSB0dHlfcG9ydF90dHlfZ2V0KCZwb3J0LT5wb3J0KTsKKwlpZiAoIXR0eSkKKwkJcmV0dXJuOworCisJZm9yIChpID0gMDsgaSA8IHVyYi0+YWN0dWFsX2xlbmd0aDsgaSArPSBwcml2LT5tYXhfcGFja2V0X3NpemUpIHsKKwkJbGVuID0gbWluX3QoaW50LCB1cmItPmFjdHVhbF9sZW5ndGggLSBpLCBwcml2LT5tYXhfcGFja2V0X3NpemUpOworCQljb3VudCArPSBmdGRpX3Byb2Nlc3NfcGFja2V0KHR0eSwgcG9ydCwgcHJpdiwgJmRhdGFbaV0sIGxlbik7CisJfQorCisJaWYgKGNvdW50KQorCQl0dHlfZmxpcF9idWZmZXJfcHVzaCh0dHkpOworCXR0eV9rcmVmX3B1dCh0dHkpOworfQorCiBzdGF0aWMgdm9pZCBmdGRpX3JlYWRfYnVsa19jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpCiB7CiAJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHVyYi0+Y29udGV4dDsKLQlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OwotCXN0cnVjdCBmdGRpX3ByaXZhdGUgKnByaXY7Ci0JdW5zaWduZWQgbG9uZyBjb3VudHJlYWQ7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgc3RhdHVzID0gdXJiLT5zdGF0dXM7Ci0KLQlpZiAodXJiLT5udW1iZXJfb2ZfcGFja2V0cyA+IDApIHsKLQkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgdHJhbnNmZXJfYnVmZmVyX2xlbmd0aCAlZCAiCi0JCQkiYWN0dWFsX2xlbmd0aCAlZCBudW1iZXIgb2YgcGFja2V0cyAlZFxuIiwgX19mdW5jX18sCi0JCQl1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsCi0JCQl1cmItPmFjdHVhbF9sZW5ndGgsIHVyYi0+bnVtYmVyX29mX3BhY2tldHMpOwotCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyB0cmFuc2Zlcl9mbGFncyAleFxuIiwgX19mdW5jX18sCi0JCQl1cmItPnRyYW5zZmVyX2ZsYWdzKTsKLQl9Ci0KLQlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOwotCi0JaWYgKHBvcnQtPnBvcnQuY291bnQgPD0gMCkKLQkJcmV0dXJuOwotCi0JdHR5ID0gdHR5X3BvcnRfdHR5X2dldCgmcG9ydC0+cG9ydCk7Ci0JaWYgKCF0dHkpIHsKLQkJZGJnKCIlcyAtIGJhZCB0dHkgcG9pbnRlciAtIGV4aXRpbmciLCBfX2Z1bmNfXyk7Ci0JCXJldHVybjsKLQl9Ci0KLQlwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwotCWlmICghcHJpdikgewotCQlkYmcoIiVzIC0gYmFkIHBvcnQgcHJpdmF0ZSBkYXRhIHBvaW50ZXIgLSBleGl0aW5nIiwgX19mdW5jX18pOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlpZiAodXJiICE9IHBvcnQtPnJlYWRfdXJiKQotCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIE5vdCBteSB1cmIhXG4iLCBfX2Z1bmNfXyk7Ci0KLQlpZiAoc3RhdHVzKSB7Ci0JCS8qIFRoaXMgd2lsbCBoYXBwZW4gYXQgY2xvc2UgZXZlcnkgdGltZSBzbyBpdCBpcyBhIGRiZyBub3QgYW4KLQkJICAgZXJyICovCi0JCWRiZygiKHRoaXMgaXMgb2sgb24gY2xvc2UpIG5vbnplcm8gcmVhZCBidWxrIHN0YXR1cyByZWNlaXZlZDogJWQiLCBzdGF0dXMpOwotCQlnb3RvIG91dDsKLQl9Ci0KLQkvKiBjb3VudCBkYXRhIGJ5dGVzLCBidXQgbm90IHN0YXR1cyBieXRlcyAqLwotCWNvdW50cmVhZCA9IHVyYi0+YWN0dWFsX2xlbmd0aDsKLQljb3VudHJlYWQgLT0gMiAqIERJVl9ST1VORF9VUChjb3VudHJlYWQsIHByaXYtPm1heF9wYWNrZXRfc2l6ZSk7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnJ4X2xvY2ssIGZsYWdzKTsKLQlwcml2LT5yeF9ieXRlcyArPSBjb3VudHJlYWQ7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+cnhfbG9jaywgZmxhZ3MpOwotCi0JZnRkaV9wcm9jZXNzX3JlYWQoJnByaXYtPnJ4X3dvcmsud29yayk7Ci1vdXQ6Ci0JdHR5X2tyZWZfcHV0KHR0eSk7Ci19IC8qIGZ0ZGlfcmVhZF9idWxrX2NhbGxiYWNrICovCi0KLQotc3RhdGljIHZvaWQgZnRkaV9wcm9jZXNzX3JlYWQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoteyAvKiBmdGRpX3Byb2Nlc3NfcmVhZCAqLwotCXN0cnVjdCBmdGRpX3ByaXZhdGUgKnByaXYgPQotCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGZ0ZGlfcHJpdmF0ZSwgcnhfd29yay53b3JrKTsKLQlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gcHJpdi0+cG9ydDsKLQlzdHJ1Y3QgdXJiICp1cmI7Ci0Jc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKLQljaGFyIGVycm9yX2ZsYWc7Ci0JdW5zaWduZWQgY2hhciAqZGF0YTsKLQotCWludCBpOwotCWludCByZXN1bHQ7Ci0JaW50IG5lZWRfZmxpcDsKLQlpbnQgcGFja2V0X29mZnNldDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKIAotCWlmIChwb3J0LT5wb3J0LmNvdW50IDw9IDApCi0JCXJldHVybjsKLQotCXR0eSA9IHR0eV9wb3J0X3R0eV9nZXQoJnBvcnQtPnBvcnQpOwotCWlmICghdHR5KSB7Ci0JCWRiZygiJXMgLSBiYWQgdHR5IHBvaW50ZXIgLSBleGl0aW5nIiwgX19mdW5jX18pOworCWlmICh1cmItPnN0YXR1cykgeworCQlkYmcoIiVzIC0gbm9uemVybyByZWFkIGJ1bGsgc3RhdHVzIHJlY2VpdmVkOiAlZCIsCisJCQkJCQlfX2Z1bmNfXywgdXJiLT5zdGF0dXMpOwogCQlyZXR1cm47CiAJfQogCi0JcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKLQlpZiAoIXByaXYpIHsKLQkJZGJnKCIlcyAtIGJhZCBwb3J0IHByaXZhdGUgZGF0YSBwb2ludGVyIC0gZXhpdGluZyIsIF9fZnVuY19fKTsKLQkJZ290byBvdXQ7Ci0JfQorCXVzYl9zZXJpYWxfZGVidWdfZGF0YShkZWJ1ZywgJnBvcnQtPmRldiwgX19mdW5jX18sCisJCQkJdXJiLT5hY3R1YWxfbGVuZ3RoLCB1cmItPnRyYW5zZmVyX2J1ZmZlcik7CisJZnRkaV9wcm9jZXNzX3JlYWQocG9ydCk7CiAKLQl1cmIgPSBwb3J0LT5yZWFkX3VyYjsKLQlpZiAoIXVyYikgewotCQlkYmcoIiVzIC0gYmFkIHJlYWRfdXJiIHBvaW50ZXIgLSBleGl0aW5nIiwgX19mdW5jX18pOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlkYXRhID0gdXJiLT50cmFuc2Zlcl9idWZmZXI7Ci0KLQlpZiAocHJpdi0+cnhfcHJvY2Vzc2VkKSB7Ci0JCWRiZygiJXMgLSBhbHJlYWR5IHByb2Nlc3NlZDogJWQgYnl0ZXMsICVkIHJlbWFpbiIsIF9fZnVuY19fLAotCQkJCXByaXYtPnJ4X3Byb2Nlc3NlZCwKLQkJCQl1cmItPmFjdHVhbF9sZW5ndGggLSBwcml2LT5yeF9wcm9jZXNzZWQpOwotCX0gZWxzZSB7Ci0JCS8qIFRoZSBmaXJzdCB0d28gYnl0ZXMgb2YgZXZlcnkgcmVhZCBwYWNrZXQgYXJlIHN0YXR1cyAqLwotCQlpZiAodXJiLT5hY3R1YWxfbGVuZ3RoID4gMikKLQkJCXVzYl9zZXJpYWxfZGVidWdfZGF0YShkZWJ1ZywgJnBvcnQtPmRldiwgX19mdW5jX18sCi0JCQkJCQl1cmItPmFjdHVhbF9sZW5ndGgsIGRhdGEpOwotCQllbHNlCi0JCQlkYmcoIlN0YXR1cyBvbmx5OiAlMDNvbyAlMDNvbyIsIGRhdGFbMF0sIGRhdGFbMV0pOwotCX0KLQotCi0JLyogVE8gRE8gLS0gY2hlY2sgZm9yIGh1bmcgdXAgbGluZSBhbmQgaGFuZGxlIGFwcHJvcHJpYXRlbHk6ICovCi0JLyogICBzZW5kIGhhbmd1cCAgKi8KLQkvKiBTZWUgYWNtLmMgLSB5b3UgZG8gYSB0dHlfaGFuZ3VwICAtIGVnIHR0eV9oYW5ndXAodHR5KSAqLwotCS8qIGlmIENEIGlzIGRyb3BwZWQgYW5kIHRoZSBsaW5lIGlzIG5vdCBDTE9DQUwgdGhlbiB3ZSBzaG91bGQgaGFuZ3VwICovCi0KLQluZWVkX2ZsaXAgPSAwOwotCWZvciAocGFja2V0X29mZnNldCA9IHByaXYtPnJ4X3Byb2Nlc3NlZDsKLQkJcGFja2V0X29mZnNldCA8IHVyYi0+YWN0dWFsX2xlbmd0aDsgcGFja2V0X29mZnNldCArPSBwcml2LT5tYXhfcGFja2V0X3NpemUpIHsKLQkJaW50IGxlbmd0aDsKLQotCQkvKiBDb21wYXJlIG5ldyBsaW5lIHN0YXR1cyB0byB0aGUgb2xkIG9uZSwgc2lnbmFsIGlmIGRpZmZlcmVudC8KLQkJICAgTi5CLiBwYWNrZXQgbWF5IGJlIHByb2Nlc3NlZCBtb3JlIHRoYW4gb25jZSwgYnV0IGRpZmZlcmVuY2VzCi0JCSAgIGFyZSBvbmx5IHByb2Nlc3NlZCBvbmNlLiAgKi8KLQkJY2hhciBuZXdfc3RhdHVzID0gZGF0YVtwYWNrZXRfb2Zmc2V0ICsgMF0gJgotCQkJCQkJRlRESV9TVEFUVVNfQjBfTUFTSzsKLQkJaWYgKG5ld19zdGF0dXMgIT0gcHJpdi0+cHJldl9zdGF0dXMpIHsKLQkJCXByaXYtPmRpZmZfc3RhdHVzIHw9Ci0JCQkJbmV3X3N0YXR1cyBeIHByaXYtPnByZXZfc3RhdHVzOwotCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwcml2LT5kZWx0YV9tc3Jfd2FpdCk7Ci0JCQlwcml2LT5wcmV2X3N0YXR1cyA9IG5ld19zdGF0dXM7Ci0JCX0KLQotCQlsZW5ndGggPSBtaW5fdCh1MzIsIHByaXYtPm1heF9wYWNrZXRfc2l6ZSwgdXJiLT5hY3R1YWxfbGVuZ3RoLXBhY2tldF9vZmZzZXQpLTI7Ci0JCWlmIChsZW5ndGggPCAwKSB7Ci0JCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIGJhZCBwYWNrZXQgbGVuZ3RoOiAlZFxuIiwKLQkJCQlfX2Z1bmNfXywgbGVuZ3RoKzIpOwotCQkJbGVuZ3RoID0gMDsKLQkJfQotCi0JCWlmIChwcml2LT5yeF9mbGFncyAmIFRIUk9UVExFRCkgewotCQkJZGJnKCIlcyAtIHRocm90dGxlZCIsIF9fZnVuY19fKTsKLQkJCWJyZWFrOwotCQl9Ci0JCWlmICh0dHlfYnVmZmVyX3JlcXVlc3Rfcm9vbSh0dHksIGxlbmd0aCkgPCBsZW5ndGgpIHsKLQkJCS8qIGJyZWFrIG91dCAmIHdhaXQgZm9yIHRocm90dGxpbmcvdW50aHJvdHRsaW5nIHRvCi0JCQkgICBoYXBwZW4gKi8KLQkJCWRiZygiJXMgLSByZWNlaXZlIHJvb20gbG93IiwgX19mdW5jX18pOwotCQkJYnJlYWs7Ci0JCX0KLQotCQkvKiBIYW5kbGUgZXJyb3JzIGFuZCBicmVhayAqLwotCQllcnJvcl9mbGFnID0gVFRZX05PUk1BTDsKLQkJLyogQWx0aG91Z2ggdGhlIGRldmljZSB1c2VzIGEgYml0bWFzayBhbmQgaGVuY2UgY2FuIGhhdmUKLQkJICAgbXVsdGlwbGUgZXJyb3JzIG9uIGEgcGFja2V0IC0gdGhlIG9yZGVyIGhlcmUgc2V0cyB0aGUKLQkJICAgcHJpb3JpdHkgdGhlIGVycm9yIGlzIHJldHVybmVkIHRvIHRoZSB0dHkgbGF5ZXIgICovCi0KLQkJaWYgKGRhdGFbcGFja2V0X29mZnNldCsxXSAmIEZURElfUlNfT0UpIHsKLQkJCWVycm9yX2ZsYWcgPSBUVFlfT1ZFUlJVTjsKLQkJCWRiZygiT1ZFUlJSVU4gZXJyb3IiKTsKLQkJfQotCQlpZiAoZGF0YVtwYWNrZXRfb2Zmc2V0KzFdICYgRlRESV9SU19CSSkgewotCQkJZXJyb3JfZmxhZyA9IFRUWV9CUkVBSzsKLQkJCWRiZygiQlJFQUsgcmVjZWl2ZWQiKTsKLQkJCXVzYl9zZXJpYWxfaGFuZGxlX2JyZWFrKHBvcnQpOwotCQl9Ci0JCWlmIChkYXRhW3BhY2tldF9vZmZzZXQrMV0gJiBGVERJX1JTX1BFKSB7Ci0JCQllcnJvcl9mbGFnID0gVFRZX1BBUklUWTsKLQkJCWRiZygiUEFSSVRZIGVycm9yIik7Ci0JCX0KLQkJaWYgKGRhdGFbcGFja2V0X29mZnNldCsxXSAmIEZURElfUlNfRkUpIHsKLQkJCWVycm9yX2ZsYWcgPSBUVFlfRlJBTUU7Ci0JCQlkYmcoIkZSQU1JTkcgZXJyb3IiKTsKLQkJfQotCQlpZiAobGVuZ3RoID4gMCkgewotCQkJZm9yIChpID0gMjsgaSA8IGxlbmd0aCsyOyBpKyspIHsKLQkJCQkvKiBOb3RlIHRoYXQgdGhlIGVycm9yIGZsYWcgaXMgZHVwbGljYXRlZCBmb3IKLQkJCQkgICBldmVyeSBjaGFyYWN0ZXIgcmVjZWl2ZWQgc2luY2Ugd2UgZG9uJ3Qga25vdwotCQkJCSAgIHdoaWNoIGNoYXJhY3RlciBpdCBhcHBsaWVkIHRvICovCi0JCQkJaWYgKCF1c2Jfc2VyaWFsX2hhbmRsZV9zeXNycV9jaGFyKHR0eSwgcG9ydCwKLQkJCQkJCWRhdGFbcGFja2V0X29mZnNldCArIGldKSkKLQkJCQkJdHR5X2luc2VydF9mbGlwX2NoYXIodHR5LAotCQkJCQkJZGF0YVtwYWNrZXRfb2Zmc2V0ICsgaV0sCi0JCQkJCQllcnJvcl9mbGFnKTsKLQkJCX0KLQkJCW5lZWRfZmxpcCA9IDE7Ci0JCX0KLQotI2lmZGVmIE5PVF9DT1JSRUNUX0JVVF9LRUVQSU5HX0lUX0ZPUl9OT1cKLQkJLyogaWYgYSBwYXJpdHkgZXJyb3IgaXMgZGV0ZWN0ZWQgeW91IGdldCBzdGF0dXMgcGFja2V0cyBmb3JldmVyCi0JCSAgIHVudGlsIGEgY2hhcmFjdGVyIGlzIHNlbnQgd2l0aG91dCBhIHBhcml0eSBlcnJvci4KLQkJICAgVGhpcyBkb2Vzbid0IHdvcmsgd2VsbCBzaW5jZSB0aGUgYXBwbGljYXRpb24gcmVjZWl2ZXMgYQotCQkgICBuZXZlciBlbmRpbmcgc3RyZWFtIG9mIGJhZCBkYXRhIC0gZXZlbiB0aG91Z2ggbmV3IGRhdGEKLQkJICAgaGFzbid0IGJlZW4gc2VudC4gVGhlcmVmb3JlIEkgKGJpbGwpIGhhdmUgdGFrZW4gdGhpcyBvdXQuCi0JCSAgIEhvd2V2ZXIgLSB0aGlzIG1pZ2h0IG1ha2Ugc2Vuc2UgZm9yIGZyYW1pbmcgZXJyb3JzIGFuZCBzbyBvbgotCQkgICBzbyBJIGFtIGxlYXZpbmcgdGhlIGNvZGUgaW4gZm9yIG5vdy4KLQkJKi8KLQkJZWxzZSB7Ci0JCQlpZiAoZXJyb3JfZmxhZyAhPSBUVFlfTk9STUFMKSB7Ci0JCQkJZGJnKCJlcnJvcl9mbGFnIGlzIG5vdCBub3JtYWwiKTsKLQkJCQkvKiBJbiB0aGlzIGNhc2UgaXQgaXMganVzdCBzdGF0dXMgLSBpZiB0aGF0IGlzCi0JCQkJICAgYW4gZXJyb3Igc2VuZCBhIGJhZCBjaGFyYWN0ZXIgKi8KLQkJCQlpZiAodHR5LT5mbGlwLmNvdW50ID49IFRUWV9GTElQQlVGX1NJWkUpCi0JCQkJCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHR0eSk7Ci0JCQkJdHR5X2luc2VydF9mbGlwX2NoYXIodHR5LCAweGZmLCBlcnJvcl9mbGFnKTsKLQkJCQluZWVkX2ZsaXAgPSAxOwotCQkJfQotCQl9Ci0jZW5kaWYKLQl9IC8qICJmb3IocGFja2V0X29mZnNldD0wLi4uIiAqLwotCi0JLyogTG93IGxhdGVuY3kgKi8KLQlpZiAobmVlZF9mbGlwKQotCQl0dHlfZmxpcF9idWZmZXJfcHVzaCh0dHkpOwotCi0JaWYgKHBhY2tldF9vZmZzZXQgPCB1cmItPmFjdHVhbF9sZW5ndGgpIHsKLQkJLyogbm90IGNvbXBsZXRlbHkgcHJvY2Vzc2VkIC0gcmVjb3JkIHByb2dyZXNzICovCi0JCXByaXYtPnJ4X3Byb2Nlc3NlZCA9IHBhY2tldF9vZmZzZXQ7Ci0JCWRiZygiJXMgLSBpbmNvbXBsZXRlLCAlZCBieXRlcyBwcm9jZXNzZWQsICVkIHJlbWFpbiIsCi0JCQkJX19mdW5jX18sIHBhY2tldF9vZmZzZXQsCi0JCQkJdXJiLT5hY3R1YWxfbGVuZ3RoIC0gcGFja2V0X29mZnNldCk7Ci0JCS8qIGNoZWNrIGlmIHdlIHdlcmUgdGhyb3R0bGVkIHdoaWxlIHByb2Nlc3NpbmcgKi8KLQkJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnJ4X2xvY2ssIGZsYWdzKTsKLQkJaWYgKHByaXYtPnJ4X2ZsYWdzICYgVEhST1RUTEVEKSB7Ci0JCQlwcml2LT5yeF9mbGFncyB8PSBBQ1RVQUxMWV9USFJPVFRMRUQ7Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5yeF9sb2NrLCBmbGFncyk7Ci0JCQlkYmcoIiVzIC0gZGVmZXJyaW5nIHJlbWFpbmRlciB1bnRpbCB1bnRocm90dGxlZCIsCi0JCQkJCV9fZnVuY19fKTsKLQkJCWdvdG8gb3V0OwotCQl9Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnJ4X2xvY2ssIGZsYWdzKTsKLQkJLyogaWYgdGhlIHBvcnQgaXMgY2xvc2VkIHN0b3AgdHJ5aW5nIHRvIHJlYWQgKi8KLQkJaWYgKHBvcnQtPnBvcnQuY291bnQgPiAwKQotCQkJLyogZGVsYXkgcHJvY2Vzc2luZyBvZiByZW1haW5kZXIgKi8KLQkJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmcHJpdi0+cnhfd29yaywgMSk7Ci0JCWVsc2UKLQkJCWRiZygiJXMgLSBwb3J0IGlzIGNsb3NlZCIsIF9fZnVuY19fKTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JLyogdXJiIGlzIGNvbXBsZXRlbHkgcHJvY2Vzc2VkICovCi0JcHJpdi0+cnhfcHJvY2Vzc2VkID0gMDsKLQotCS8qIGlmIHRoZSBwb3J0IGlzIGNsb3NlZCBzdG9wIHRyeWluZyB0byByZWFkICovCi0JaWYgKHBvcnQtPnBvcnQuY291bnQgPiAwKSB7Ci0JCS8qIENvbnRpbnVlIHRyeWluZyB0byBhbHdheXMgcmVhZCAgKi8KLQkJdXNiX2ZpbGxfYnVsa191cmIocG9ydC0+cmVhZF91cmIsIHBvcnQtPnNlcmlhbC0+ZGV2LAotCQkJdXNiX3JjdmJ1bGtwaXBlKHBvcnQtPnNlcmlhbC0+ZGV2LAotCQkJCQlwb3J0LT5idWxrX2luX2VuZHBvaW50QWRkcmVzcyksCi0JCQlwb3J0LT5yZWFkX3VyYi0+dHJhbnNmZXJfYnVmZmVyLAotCQkJcG9ydC0+cmVhZF91cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsCi0JCQlmdGRpX3JlYWRfYnVsa19jYWxsYmFjaywgcG9ydCk7Ci0KLQkJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+cmVhZF91cmIsIEdGUF9BVE9NSUMpOwotCQlpZiAocmVzdWx0KQotCQkJZGV2X2VycigmcG9ydC0+ZGV2LAotCQkJCSIlcyAtIGZhaWxlZCByZXN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkXG4iLAotCQkJCV9fZnVuY19fLCByZXN1bHQpOwotCX0KLW91dDoKLQl0dHlfa3JlZl9wdXQodHR5KTsKLX0gLyogZnRkaV9wcm9jZXNzX3JlYWQgKi8KLQorCXNwaW5fbG9ja19pcnFzYXZlKCZwb3J0LT5sb2NrLCBmbGFncyk7CisJcG9ydC0+dGhyb3R0bGVkID0gcG9ydC0+dGhyb3R0bGVfcmVxOworCWlmICghcG9ydC0+dGhyb3R0bGVkKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnQtPmxvY2ssIGZsYWdzKTsKKwkJZnRkaV9zdWJtaXRfcmVhZF91cmIocG9ydCwgR0ZQX0FUT01JQyk7CisJfSBlbHNlCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnQtPmxvY2ssIGZsYWdzKTsKK30KIAogc3RhdGljIHZvaWQgZnRkaV9icmVha19jdGwoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgaW50IGJyZWFrX3N0YXRlKQogewpAQCAtMjYwOSwzMyArMjQ0NywzMSBAQAogc3RhdGljIHZvaWQgZnRkaV90aHJvdHRsZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQogewogCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOwotCXN0cnVjdCBmdGRpX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWRiZygiJXMgLSBwb3J0ICVkIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+cnhfbG9jaywgZmxhZ3MpOwotCXByaXYtPnJ4X2ZsYWdzIHw9IFRIUk9UVExFRDsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5yeF9sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnBvcnQtPmxvY2ssIGZsYWdzKTsKKwlwb3J0LT50aHJvdHRsZV9yZXEgPSAxOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnQtPmxvY2ssIGZsYWdzKTsKIH0KIAotCi1zdGF0aWMgdm9pZCBmdGRpX3VudGhyb3R0bGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKK3ZvaWQgZnRkaV91bnRocm90dGxlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiB7CiAJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7Ci0Jc3RydWN0IGZ0ZGlfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKLQlpbnQgYWN0dWFsbHlfdGhyb3R0bGVkOworCWludCB3YXNfdGhyb3R0bGVkOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnJ4X2xvY2ssIGZsYWdzKTsKLQlhY3R1YWxseV90aHJvdHRsZWQgPSBwcml2LT5yeF9mbGFncyAmIEFDVFVBTExZX1RIUk9UVExFRDsKLQlwcml2LT5yeF9mbGFncyAmPSB+KFRIUk9UVExFRCB8IEFDVFVBTExZX1RIUk9UVExFRCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+cnhfbG9jaywgZmxhZ3MpOworCXNwaW5fbG9ja19pcnFzYXZlKCZwb3J0LT5sb2NrLCBmbGFncyk7CisJd2FzX3Rocm90dGxlZCA9IHBvcnQtPnRocm90dGxlZDsKKwlwb3J0LT50aHJvdHRsZWQgPSBwb3J0LT50aHJvdHRsZV9yZXEgPSAwOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnQtPmxvY2ssIGZsYWdzKTsKIAotCWlmIChhY3R1YWxseV90aHJvdHRsZWQpCi0JCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmcHJpdi0+cnhfd29yaywgMCk7CisJLyogUmVzdWJtaXQgdXJiIGlmIHRocm90dGxlZCBhbmQgb3Blbi4gKi8KKwlpZiAod2FzX3Rocm90dGxlZCAmJiB0ZXN0X2JpdChBU1lOQ0JfSU5JVElBTElaRUQsICZwb3J0LT5wb3J0LmZsYWdzKSkKKwkJZnRkaV9zdWJtaXRfcmVhZF91cmIocG9ydCwgR0ZQX0tFUk5FTCk7CiB9CiAKIHN0YXRpYyBpbnQgX19pbml0IGZ0ZGlfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2dhcm1pbl9ncHMuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9nYXJtaW5fZ3BzLmMKaW5kZXggMjA0MzJkMy4uNWFjOTAwZSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2dhcm1pbl9ncHMuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZ2FybWluX2dwcy5jCkBAIC0xMzkwLDE0ICsxMzkwLDEzIEBACiB7CiAJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CiAJc3RydWN0IGdhcm1pbl9kYXRhICpnYXJtaW5fZGF0YV9wID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOwogCS8qIHNldCBmbGFnLCBkYXRhIHJlY2VpdmVkIHdpbGwgYmUgcHV0IGludG8gYSBxdWV1ZQogCSAgIGZvciBsYXRlciBwcm9jZXNzaW5nICovCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmdhcm1pbl9kYXRhX3AtPmxvY2ssIGZsYWdzKTsKKwlzcGluX2xvY2tfaXJxKCZnYXJtaW5fZGF0YV9wLT5sb2NrKTsKIAlnYXJtaW5fZGF0YV9wLT5mbGFncyB8PSBGTEFHU19RVUVVSU5HfEZMQUdTX1RIUk9UVExFRDsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZnYXJtaW5fZGF0YV9wLT5sb2NrLCBmbGFncyk7CisJc3Bpbl91bmxvY2tfaXJxKCZnYXJtaW5fZGF0YV9wLT5sb2NrKTsKIH0KIAogCkBAIC0xNDA1LDEzICsxNDA0LDEyIEBACiB7CiAJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CiAJc3RydWN0IGdhcm1pbl9kYXRhICpnYXJtaW5fZGF0YV9wID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHN0YXR1czsKIAogCWRiZygiJXMgLSBwb3J0ICVkIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJmdhcm1pbl9kYXRhX3AtPmxvY2ssIGZsYWdzKTsKKwlzcGluX2xvY2tfaXJxKCZnYXJtaW5fZGF0YV9wLT5sb2NrKTsKIAlnYXJtaW5fZGF0YV9wLT5mbGFncyAmPSB+RkxBR1NfVEhST1RUTEVEOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdhcm1pbl9kYXRhX3AtPmxvY2ssIGZsYWdzKTsKKwlzcGluX3VubG9ja19pcnEoJmdhcm1pbl9kYXRhX3AtPmxvY2spOwogCiAJLyogaW4gbmF0aXZlIG1vZGUgc2VuZCBxdWV1ZWQgZGF0YSB0byB0dHksIGluCiAJICAgc2VyaWFsIG1vZGUgbm90aGluZyBuZWVkcyB0byBiZSBkb25lIGhlcmUgKi8KQEAgLTE0MTksNyArMTQxNyw3IEBACiAJCWdhcm1pbl9mbHVzaF9xdWV1ZShnYXJtaW5fZGF0YV9wKTsKIAogCWlmICgwICE9IChnYXJtaW5fZGF0YV9wLT5mbGFncyAmIEZMQUdTX0JVTEtfSU5fQUNUSVZFKSkgewotCQlzdGF0dXMgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5yZWFkX3VyYiwgR0ZQX0FUT01JQyk7CisJCXN0YXR1cyA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPnJlYWRfdXJiLCBHRlBfS0VSTkVMKTsKIAkJaWYgKHN0YXR1cykKIAkJCWRldl9lcnIoJnBvcnQtPmRldiwKIAkJCQkiJXMgLSBmYWlsZWQgcmVzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZFxuIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9nZW5lcmljLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZ2VuZXJpYy5jCmluZGV4IGRlYmEwOGMuLmJiZTAwNWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9nZW5lcmljLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2dlbmVyaWMuYwpAQCAtNTQ2LDcgKzU0Niw3IEBACiAKIAlpZiAod2FzX3Rocm90dGxlZCkgewogCQkvKiBSZXN1bWUgcmVhZGluZyBmcm9tIGRldmljZSAqLwotCQl1c2Jfc2VyaWFsX2dlbmVyaWNfcmVzdWJtaXRfcmVhZF91cmIocG9ydCwgR0ZQX0tFUk5FTCk7CisJCWZsdXNoX2FuZF9yZXN1Ym1pdF9yZWFkX3VyYihwb3J0KTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9pcGFxLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvaXBhcS5jCmluZGV4IDI0ZmNjNjQuLmQ2MjMxYzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9pcGFxLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2lwYXEuYwpAQCAtOTY2LDYgKzk2NiwxNSBAQAogc3RhdGljIGludCBpcGFxX3N0YXJ0dXAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKIHsKIAlkYmcoIiVzIiwgX19mdW5jX18pOworCisJLyogU29tZSBvZiB0aGUgZGV2aWNlcyBpbiBpcGFxX2lkX3RhYmxlW10gYXJlIGNvbXBvc2l0ZSwgYW5kIHdlCisJICogc2hvdWxkbid0IGJpbmQgdG8gYWxsIHRoZSBpbnRlcmZhY2VzLiAgVGhpcyB0ZXN0IHdpbGwgcnVsZSBvdXQKKwkgKiBzb21lIG9idmlvdXNseSBpbnZhbGlkIHBvc3NpYmlsaXRpZXMuCisJICovCisJaWYgKHNlcmlhbC0+bnVtX2J1bGtfaW4gPCBzZXJpYWwtPm51bV9wb3J0cyB8fAorCQkJc2VyaWFsLT5udW1fYnVsa19vdXQgPCBzZXJpYWwtPm51bV9wb3J0cykKKwkJcmV0dXJuIC1FTk9ERVY7CisKIAlpZiAoc2VyaWFsLT5kZXYtPmFjdGNvbmZpZy0+ZGVzYy5iQ29uZmlndXJhdGlvblZhbHVlICE9IDEpIHsKIAkJLyoKIAkJICogRklYTUU6IEhQIGlQYXEgcngzNzE1LCBwb3NzaWJseSBvdGhlcnMsIGhhdmUgMSBjb25maWcgdGhhdApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW5fcGRhLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbl9wZGEuYwppbmRleCAyNTdjMTZjLi4xMjk2YTA5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbl9wZGEuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbl9wZGEuYwpAQCAtMjkwLDcgKzI5MCw3IEBACiAJLyoganVzdCByZXN0YXJ0IHRoZSByZWNlaXZlIGludGVycnVwdCBVUkIgKi8KIAlkYmcoImtleXNwYW5fcGRhX3J4X3VudGhyb3R0bGUgcG9ydCAlZCIsIHBvcnQtPm51bWJlcik7CiAJcG9ydC0+aW50ZXJydXB0X2luX3VyYi0+ZGV2ID0gcG9ydC0+c2VyaWFsLT5kZXY7Ci0JaWYgKHVzYl9zdWJtaXRfdXJiKHBvcnQtPmludGVycnVwdF9pbl91cmIsIEdGUF9BVE9NSUMpKQorCWlmICh1c2Jfc3VibWl0X3VyYihwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiLCBHRlBfS0VSTkVMKSkKIAkJZGJnKCIgdXNiX3N1Ym1pdF91cmIocmVhZCB1cmIpIGZhaWxlZCIpOwogCXJldHVybjsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9rbDVrdXNiMTA1LmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwva2w1a3VzYjEwNS5jCmluZGV4IGY3MzczMzcuLjNhNzg3MzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9rbDVrdXNiMTA1LmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2tsNWt1c2IxMDUuYwpAQCAtOTUxLDcgKzk1MSw3IEBACiAJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKIAogCXBvcnQtPnJlYWRfdXJiLT5kZXYgPSBwb3J0LT5zZXJpYWwtPmRldjsKLQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5yZWFkX3VyYiwgR0ZQX0FUT01JQyk7CisJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+cmVhZF91cmIsIEdGUF9LRVJORUwpOwogCWlmIChyZXN1bHQpCiAJCWRldl9lcnIoJnBvcnQtPmRldiwKIAkJCSIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZFxuIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9tY3RfdTIzMi5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL21jdF91MjMyLmMKaW5kZXggYWQ0OTk4Yi4uY2QwMDljYiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL21jdF91MjMyLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL21jdF91MjMyLmMKQEAgLTc3NywyMCArNzc3LDE5IEBACiB7CiAJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CiAJc3RydWN0IG1jdF91MjMyX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBpbnQgY29udHJvbF9zdGF0ZTsKIAogCWRiZygiJXMgLSBwb3J0ICVkIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCXNwaW5fbG9ja19pcnEoJnByaXYtPmxvY2spOwogCXByaXYtPnJ4X2ZsYWdzIHw9IFRIUk9UVExFRDsKIAlpZiAoQ19DUlRTQ1RTKHR0eSkpIHsKIAkJcHJpdi0+Y29udHJvbF9zdGF0ZSAmPSB+VElPQ01fUlRTOwogCQljb250cm9sX3N0YXRlID0gcHJpdi0+Y29udHJvbF9zdGF0ZTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCQlzcGluX3VubG9ja19pcnEoJnByaXYtPmxvY2spOwogCQkodm9pZCkgbWN0X3UyMzJfc2V0X21vZGVtX2N0cmwocG9ydC0+c2VyaWFsLCBjb250cm9sX3N0YXRlKTsKIAl9IGVsc2UgewotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJCXNwaW5fdW5sb2NrX2lycSgmcHJpdi0+bG9jayk7CiAJfQogfQogCkBAIC03OTksMjAgKzc5OCwxOSBAQAogewogCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOwogCXN0cnVjdCBtY3RfdTIzMl9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5zaWduZWQgaW50IGNvbnRyb2xfc3RhdGU7CiAKIAlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlzcGluX2xvY2tfaXJxKCZwcml2LT5sb2NrKTsKIAlpZiAoKHByaXYtPnJ4X2ZsYWdzICYgVEhST1RUTEVEKSAmJiBDX0NSVFNDVFModHR5KSkgewogCQlwcml2LT5yeF9mbGFncyAmPSB+VEhST1RUTEVEOwogCQlwcml2LT5jb250cm9sX3N0YXRlIHw9IFRJT0NNX1JUUzsKIAkJY29udHJvbF9zdGF0ZSA9IHByaXYtPmNvbnRyb2xfc3RhdGU7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwkJc3Bpbl91bmxvY2tfaXJxKCZwcml2LT5sb2NrKTsKIAkJKHZvaWQpIG1jdF91MjMyX3NldF9tb2RlbV9jdHJsKHBvcnQtPnNlcmlhbCwgY29udHJvbF9zdGF0ZSk7CiAJfSBlbHNlIHsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCQlzcGluX3VubG9ja19pcnEoJnByaXYtPmxvY2spOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL29wdGljb24uYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9vcHRpY29uLmMKaW5kZXggMTA4NWE1Ny4uODBmNTliNiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL29wdGljb24uYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvb3B0aWNvbi5jCkBAIC0zMTQsMjEgKzMxNCwyNCBAQAogCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOwogCXN0cnVjdCBvcHRpY29uX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9kYXRhKHBvcnQtPnNlcmlhbCk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgcmVzdWx0OworCWludCByZXN1bHQsIHdhc190aHJvdHRsZWQ7CiAKIAlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAlwcml2LT50aHJvdHRsZWQgPSBmYWxzZTsKKwl3YXNfdGhyb3R0bGVkID0gcHJpdi0+YWN0dWFsbHlfdGhyb3R0bGVkOwogCXByaXYtPmFjdHVhbGx5X3Rocm90dGxlZCA9IGZhbHNlOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAogCXByaXYtPmJ1bGtfcmVhZF91cmItPmRldiA9IHBvcnQtPnNlcmlhbC0+ZGV2OwotCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHByaXYtPmJ1bGtfcmVhZF91cmIsIEdGUF9BVE9NSUMpOwotCWlmIChyZXN1bHQpCi0JCWRldl9lcnIoJnBvcnQtPmRldiwKLQkJCSIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZFxuIiwKKwlpZiAod2FzX3Rocm90dGxlZCkgeworCQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwcml2LT5idWxrX3JlYWRfdXJiLCBHRlBfQVRPTUlDKTsKKwkJaWYgKHJlc3VsdCkKKwkJCWRldl9lcnIoJnBvcnQtPmRldiwKKwkJCQkiJXMgLSBmYWlsZWQgc3VibWl0dGluZyByZWFkIHVyYiwgZXJyb3IgJWRcbiIsCiAJCQkJCQkJX19mdW5jX18sIHJlc3VsdCk7CisJfQogfQogCiBzdGF0aWMgaW50IG9wdGljb25fdGlvY21nZXQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvb3B0aW9uLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvb3B0aW9uLmMKaW5kZXggZjY2ZTM5OC4uY2Q0NGM2OCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL29wdGlvbi5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9vcHRpb24uYwpAQCAtMTY1LDYgKzE2NSw3IEBACiAjZGVmaW5lIEhVQVdFSV9QUk9EVUNUX0UxNDNECQkJMHgxNDNECiAjZGVmaW5lIEhVQVdFSV9QUk9EVUNUX0UxNDNFCQkJMHgxNDNFCiAjZGVmaW5lIEhVQVdFSV9QUk9EVUNUX0UxNDNGCQkJMHgxNDNGCisjZGVmaW5lIEhVQVdFSV9QUk9EVUNUX0UxNEFDCQkJMHgxNEFDCiAKICNkZWZpbmUgUVVBTlRBX1ZFTkRPUl9JRAkJCTB4MDQwOAogI2RlZmluZSBRVUFOVEFfUFJPRFVDVF9RMTAxCQkJMHhFQTAyCkBAIC0zMTQsMTAgKzMxNSwxNCBAQAogI2RlZmluZSBRSVNEQV9QUk9EVUNUX0gyMF80NTE1CQkJMHg0NTE1CiAjZGVmaW5lIFFJU0RBX1BST0RVQ1RfSDIwXzQ1MTkJCQkweDQ1MTkKIAorLyogVExBWVRFQ0ggUFJPRFVDVFMgKi8KKyNkZWZpbmUgVExBWVRFQ0hfVkVORE9SX0lECQkJMHgyMEI5CisjZGVmaW5lIFRMQVlURUNIX1BST0RVQ1RfVEVVODAwCQkJMHgxNjgyCiAKIC8qIFRPU0hJQkEgUFJPRFVDVFMgKi8KICNkZWZpbmUgVE9TSElCQV9WRU5ET1JfSUQJCQkweDA5MzAKICNkZWZpbmUgVE9TSElCQV9QUk9EVUNUX0hTRFBBX01JTklDQVJECQkweDEzMDIKKyNkZWZpbmUgVE9TSElCQV9QUk9EVUNUX0c0NTAJCQkweDBkNDUKIAogI2RlZmluZSBBTElOS19WRU5ET1JfSUQJCQkJMHgxZTBlCiAjZGVmaW5lIEFMSU5LX1BST0RVQ1RfM0dVCQkJMHg5MjAwCkBAIC0zMjYsNiArMzMxLDkgQEAKICNkZWZpbmUgQUxDQVRFTF9WRU5ET1JfSUQJCQkweDFiYmIKICNkZWZpbmUgQUxDQVRFTF9QUk9EVUNUX1gwNjBTCQkJMHgwMDAwCiAKKy8qIEFpcnBsdXMgcHJvZHVjdHMgKi8KKyNkZWZpbmUgQUlSUExVU19WRU5ET1JfSUQJCQkweDEwMTEKKyNkZWZpbmUgQUlSUExVU19QUk9EVUNUX01DRDY1MAkJCTB4MzE5OAogCiBzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgb3B0aW9uX2lkc1tdID0gewogCXsgVVNCX0RFVklDRShPUFRJT05fVkVORE9SX0lELCBPUFRJT05fUFJPRFVDVF9DT0xUKSB9LApAQCAtNDI0LDYgKzQzMiw3IEBACiAJeyBVU0JfREVWSUNFX0FORF9JTlRFUkZBQ0VfSU5GTyhIVUFXRUlfVkVORE9SX0lELCBIVUFXRUlfUFJPRFVDVF9FMTQzRCwgMHhmZiwgMHhmZiwgMHhmZikgfSwKIAl7IFVTQl9ERVZJQ0VfQU5EX0lOVEVSRkFDRV9JTkZPKEhVQVdFSV9WRU5ET1JfSUQsIEhVQVdFSV9QUk9EVUNUX0UxNDNFLCAweGZmLCAweGZmLCAweGZmKSB9LAogCXsgVVNCX0RFVklDRV9BTkRfSU5URVJGQUNFX0lORk8oSFVBV0VJX1ZFTkRPUl9JRCwgSFVBV0VJX1BST0RVQ1RfRTE0M0YsIDB4ZmYsIDB4ZmYsIDB4ZmYpIH0sCisJeyBVU0JfREVWSUNFKEhVQVdFSV9WRU5ET1JfSUQsIEhVQVdFSV9QUk9EVUNUX0UxNEFDKSB9LAogCXsgVVNCX0RFVklDRShBTU9JX1ZFTkRPUl9JRCwgQU1PSV9QUk9EVUNUXzk1MDgpIH0sCiAJeyBVU0JfREVWSUNFKE5PVkFURUxXSVJFTEVTU19WRU5ET1JfSUQsIE5PVkFURUxXSVJFTEVTU19QUk9EVUNUX1Y2NDApIH0sIC8qIE5vdmF0ZWwgTWVybGluIFY2NDAvWFY2MjAgKi8KIAl7IFVTQl9ERVZJQ0UoTk9WQVRFTFdJUkVMRVNTX1ZFTkRPUl9JRCwgTk9WQVRFTFdJUkVMRVNTX1BST0RVQ1RfVjYyMCkgfSwgLyogTm92YXRlbCBNZXJsaW4gVjYyMC9TNjIwICovCkBAIC01ODEsMTAgKzU5MCwxMyBAQAogCXsgVVNCX0RFVklDRShRSVNEQV9WRU5ET1JfSUQsIFFJU0RBX1BST0RVQ1RfSDIxXzQ1MjMpIH0sCiAJeyBVU0JfREVWSUNFKFFJU0RBX1ZFTkRPUl9JRCwgUUlTREFfUFJPRFVDVF9IMjBfNDUxNSkgfSwKIAl7IFVTQl9ERVZJQ0UoUUlTREFfVkVORE9SX0lELCBRSVNEQV9QUk9EVUNUX0gyMF80NTE5KSB9LAorCXsgVVNCX0RFVklDRShUT1NISUJBX1ZFTkRPUl9JRCwgVE9TSElCQV9QUk9EVUNUX0c0NTApIH0sCiAJeyBVU0JfREVWSUNFKFRPU0hJQkFfVkVORE9SX0lELCBUT1NISUJBX1BST0RVQ1RfSFNEUEFfTUlOSUNBUkQgKSB9LCAvKiBUb3NoaWJhIDNHIEhTRFBBID09IE5vdmF0ZWwgRXhwZWRpdGUgRVU4NzBEIE1pbmlDYXJkICovCiAJeyBVU0JfREVWSUNFKEFMSU5LX1ZFTkRPUl9JRCwgMHg5MDAwKSB9LAogCXsgVVNCX0RFVklDRV9BTkRfSU5URVJGQUNFX0lORk8oQUxJTktfVkVORE9SX0lELCBBTElOS19QUk9EVUNUXzNHVSwgMHhmZiwgMHhmZiwgMHhmZikgfSwKIAl7IFVTQl9ERVZJQ0UoQUxDQVRFTF9WRU5ET1JfSUQsIEFMQ0FURUxfUFJPRFVDVF9YMDYwUykgfSwKKwl7IFVTQl9ERVZJQ0UoQUlSUExVU19WRU5ET1JfSUQsIEFJUlBMVVNfUFJPRFVDVF9NQ0Q2NTApIH0sCisJeyBVU0JfREVWSUNFKFRMQVlURUNIX1ZFTkRPUl9JRCwgVExBWVRFQ0hfUFJPRFVDVF9URVU4MDApIH0sCiAJeyB9IC8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIG9wdGlvbl9pZHMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL290aTY4NTguYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9vdGk2ODU4LmMKaW5kZXggMGY0YTcwY2UuLmM2NDRlMjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9vdGk2ODU4LmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL290aTY4NTguYwpAQCAtMjg4LDcgKzI4OCw3IEBACiAKIAlkYmcoIiVzKCk6IHN1Ym1pdHRpbmcgaW50ZXJydXB0IHVyYiIsIF9fZnVuY19fKTsKIAlwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiLT5kZXYgPSBwb3J0LT5zZXJpYWwtPmRldjsKLQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiLCBHRlBfQVRPTUlDKTsKKwlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiLCBHRlBfS0VSTkVMKTsKIAlpZiAocmVzdWx0ICE9IDApIHsKIAkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMoKTogdXNiX3N1Ym1pdF91cmIoKSBmYWlsZWQiCiAJCQkJIiB3aXRoIGVycm9yICVkXG4iLCBfX2Z1bmNfXywgcmVzdWx0KTsKQEAgLTMzNSw3ICszMzUsNyBAQAogCiAJCWRiZygiJXMoKTogc3VibWl0dGluZyBpbnRlcnJ1cHQgdXJiIiwgX19mdW5jX18pOwogCQlwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiLT5kZXYgPSBwb3J0LT5zZXJpYWwtPmRldjsKLQkJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+aW50ZXJydXB0X2luX3VyYiwgR0ZQX0FUT01JQyk7CisJCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPmludGVycnVwdF9pbl91cmIsIEdGUF9OT0lPKTsKIAkJaWYgKHJlc3VsdCAhPSAwKSB7CiAJCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcygpOiB1c2Jfc3VibWl0X3VyYigpIGZhaWxlZCIKIAkJCQkiIHdpdGggZXJyb3IgJWRcbiIsIF9fZnVuY19fLCByZXN1bHQpOwpAQCAtMzQ5LDcgKzM0OSw3IEBACiAKIAlwb3J0LT53cml0ZV91cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSBjb3VudDsKIAlwb3J0LT53cml0ZV91cmItPmRldiA9IHBvcnQtPnNlcmlhbC0+ZGV2OwotCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPndyaXRlX3VyYiwgR0ZQX0FUT01JQyk7CisJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+d3JpdGVfdXJiLCBHRlBfTk9JTyk7CiAJaWYgKHJlc3VsdCAhPSAwKSB7CiAJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzKCk6IHVzYl9zdWJtaXRfdXJiKCkgZmFpbGVkIgogCQkJICAgICAgICIgd2l0aCBlcnJvciAlZFxuIiwgX19mdW5jX18sIHJlc3VsdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvcGwyMzAzLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvcGwyMzAzLmMKaW5kZXggMTEyOGUwMS4uOWVjMWE0OSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL3BsMjMwMy5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9wbDIzMDMuYwpAQCAtMTA0NiwxMyArMTA0NiwxNSBAQAogCS8qIG92ZXJydW4gaXMgc3BlY2lhbCwgbm90IGFzc29jaWF0ZWQgd2l0aCBhIGNoYXIgKi8KIAlpZiAobGluZV9zdGF0dXMgJiBVQVJUX09WRVJSVU5fRVJST1IpCiAJCXR0eV9pbnNlcnRfZmxpcF9jaGFyKHR0eSwgMCwgVFRZX09WRVJSVU4pOwotCWlmIChwb3J0LT5jb25zb2xlICYmIHBvcnQtPnN5c3JxKSB7CisKKwlpZiAodHR5X2ZsYWcgPT0gVFRZX05PUk1BTCAmJiAhKHBvcnQtPmNvbnNvbGUgJiYgcG9ydC0+c3lzcnEpKQorCQl0dHlfaW5zZXJ0X2ZsaXBfc3RyaW5nKHR0eSwgZGF0YSwgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKKwllbHNlIHsKIAkJaW50IGk7CiAJCWZvciAoaSA9IDA7IGkgPCB1cmItPmFjdHVhbF9sZW5ndGg7ICsraSkKIAkJCWlmICghdXNiX3NlcmlhbF9oYW5kbGVfc3lzcnFfY2hhcih0dHksIHBvcnQsIGRhdGFbaV0pKQogCQkJCXR0eV9pbnNlcnRfZmxpcF9jaGFyKHR0eSwgZGF0YVtpXSwgdHR5X2ZsYWcpOwotCX0gZWxzZQotCQl0dHlfaW5zZXJ0X2ZsaXBfc3RyaW5nKHR0eSwgZGF0YSwgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKKwl9CiAJdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL3NpZXJyYS5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL3NpZXJyYS5jCmluZGV4IDhjMDc1YjIuLjUwMTkzMjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9zaWVycmEuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvc2llcnJhLmMKQEAgLTE3LDcgKzE3LDcgQEAKICAgV2hvbSBiYXNlZCBoaXMgb24gdGhlIEtleXNwYW4gZHJpdmVyIGJ5IEh1Z2ggQmxlbWluZ3MgPGh1Z2hAYmxlbWluZ3Mub3JnPgogKi8KIAotI2RlZmluZSBEUklWRVJfVkVSU0lPTiAidi4xLjMuNyIKKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gInYuMS4zLjgiCiAjZGVmaW5lIERSSVZFUl9BVVRIT1IgIktldmluIExsb3lkLCBFbGluYSBQYXNoZXZhLCBNYXR0aGV3IFNhZmFyLCBSb3J5IEZpbGVyIgogI2RlZmluZSBEUklWRVJfREVTQyAiVVNCIERyaXZlciBmb3IgU2llcnJhIFdpcmVsZXNzIFVTQiBtb2RlbXMiCiAKQEAgLTI5Niw3ICsyOTYsNiBAQAogCWludCBkc3Jfc3RhdGU7CiAJaW50IGRjZF9zdGF0ZTsKIAlpbnQgcmlfc3RhdGU7Ci0KIAl1bnNpZ25lZCBpbnQgb3BlbmVkOjE7CiB9OwogCkBAIC0zMDYsNiArMzA1LDggQEAKIAlzdHJ1Y3Qgc2llcnJhX3BvcnRfcHJpdmF0ZSAqcG9ydGRhdGE7CiAJX191MTYgaW50ZXJmYWNlID0gMDsKIAlpbnQgdmFsID0gMDsKKwlpbnQgZG9fc2VuZCA9IDA7CisJaW50IHJldHZhbDsKIAogCWRldl9kYmcoJnBvcnQtPmRldiwgIiVzXG4iLCBfX2Z1bmNfXyk7CiAKQEAgLTMyNCwxMCArMzI1LDcgQEAKIAkJICovCiAJCWlmIChwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiKSB7CiAJCQkvKiBzZW5kIGNvbnRyb2wgbWVzc2FnZSAqLwotCQkJcmV0dXJuIHVzYl9jb250cm9sX21zZyhzZXJpYWwtPmRldiwKLQkJCQl1c2JfcmN2Y3RybHBpcGUoc2VyaWFsLT5kZXYsIDApLAotCQkJCTB4MjIsIDB4MjEsIHZhbCwgaW50ZXJmYWNlLAotCQkJCU5VTEwsIDAsIFVTQl9DVFJMX1NFVF9USU1FT1VUKTsKKwkJCWRvX3NlbmQgPSAxOwogCQl9CiAJfQogCkBAIC0zMzksMTIgKzMzNywxOCBAQAogCQkJaW50ZXJmYWNlID0gMTsKIAkJZWxzZSBpZiAocG9ydC0+YnVsa19vdXRfZW5kcG9pbnRBZGRyZXNzID09IDUpCiAJCQlpbnRlcmZhY2UgPSAyOwotCQlyZXR1cm4gdXNiX2NvbnRyb2xfbXNnKHNlcmlhbC0+ZGV2LAotCQkJdXNiX3JjdmN0cmxwaXBlKHNlcmlhbC0+ZGV2LCAwKSwKLQkJCTB4MjIsIDB4MjEsIHZhbCwgaW50ZXJmYWNlLAotCQkJTlVMTCwgMCwgVVNCX0NUUkxfU0VUX1RJTUVPVVQpOworCisJCWRvX3NlbmQgPSAxOwogCX0KLQlyZXR1cm4gMDsKKwlpZiAoIWRvX3NlbmQpCisJCXJldHVybiAwOworCisJdXNiX2F1dG9wbV9nZXRfaW50ZXJmYWNlKHNlcmlhbC0+aW50ZXJmYWNlKTsKKwlyZXR2YWwgPSB1c2JfY29udHJvbF9tc2coc2VyaWFsLT5kZXYsIHVzYl9yY3ZjdHJscGlwZShzZXJpYWwtPmRldiwgMCksCisJCTB4MjIsIDB4MjEsIHZhbCwgaW50ZXJmYWNlLCBOVUxMLCAwLCBVU0JfQ1RSTF9TRVRfVElNRU9VVCk7CisJdXNiX2F1dG9wbV9wdXRfaW50ZXJmYWNlKHNlcmlhbC0+aW50ZXJmYWNlKTsKKworCXJldHVybiByZXR2YWw7CiB9CiAKIHN0YXRpYyB2b2lkIHNpZXJyYV9zZXRfdGVybWlvcyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LApAQCAtNzczLDggKzc3NywxMSBAQAogCiAJaWYgKHNlcmlhbC0+ZGV2KSB7CiAJCW11dGV4X2xvY2soJnNlcmlhbC0+ZGlzY19tdXRleCk7Ci0JCWlmICghc2VyaWFsLT5kaXNjb25uZWN0ZWQpCisJCWlmICghc2VyaWFsLT5kaXNjb25uZWN0ZWQpIHsKKwkJCXNlcmlhbC0+aW50ZXJmYWNlLT5uZWVkc19yZW1vdGVfd2FrZXVwID0gMDsKKwkJCXVzYl9hdXRvcG1fZ2V0X2ludGVyZmFjZShzZXJpYWwtPmludGVyZmFjZSk7CiAJCQlzaWVycmFfc2VuZF9zZXR1cChwb3J0KTsKKwkJfQogCQltdXRleF91bmxvY2soJnNlcmlhbC0+ZGlzY19tdXRleCk7CiAJCXNwaW5fbG9ja19pcnEoJmludGZkYXRhLT5zdXNwX2xvY2spOwogCQlwb3J0ZGF0YS0+b3BlbmVkID0gMDsKQEAgLTc4OCw4ICs3OTUsNiBAQAogCQkJc2llcnJhX3JlbGVhc2VfdXJiKHBvcnRkYXRhLT5pbl91cmJzW2ldKTsKIAkJCXBvcnRkYXRhLT5pbl91cmJzW2ldID0gTlVMTDsKIAkJfQotCQl1c2JfYXV0b3BtX2dldF9pbnRlcmZhY2Uoc2VyaWFsLT5pbnRlcmZhY2UpOwotCQlzZXJpYWwtPmludGVyZmFjZS0+bmVlZHNfcmVtb3RlX3dha2V1cCA9IDA7CiAJfQogfQogCkBAIC04MjcsNiArODMyLDggQEAKIAlpZiAoZXJyKSB7CiAJCS8qIGdldCByaWQgb2YgZXZlcnl0aGluZyBhcyBpbiBjbG9zZSAqLwogCQlzaWVycmFfY2xvc2UocG9ydCk7CisJCS8qIHJlc3RvcmUgYmFsYW5jZSBmb3IgYXV0b3BtICovCisJCXVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZShzZXJpYWwtPmludGVyZmFjZSk7CiAJCXJldHVybiBlcnI7CiAJfQogCXNpZXJyYV9zZW5kX3NldHVwKHBvcnQpOwpAQCAtOTE1LDcgKzkyMiw3IEBACiAjaWZkZWYgQ09ORklHX1BNCiBzdGF0aWMgdm9pZCBzdG9wX3JlYWRfd3JpdGVfdXJicyhzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQogewotCWludCBpLCBqOworCWludCBpOwogCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQ7CiAJc3RydWN0IHNpZXJyYV9wb3J0X3ByaXZhdGUgKnBvcnRkYXRhOwogCkBAIC05MjMsOCArOTMwLDcgQEAKIAlmb3IgKGkgPSAwOyBpIDwgc2VyaWFsLT5udW1fcG9ydHM7ICsraSkgewogCQlwb3J0ID0gc2VyaWFsLT5wb3J0W2ldOwogCQlwb3J0ZGF0YSA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKLQkJZm9yIChqID0gMDsgaiA8IE5fSU5fVVJCOyBqKyspCi0JCQl1c2Jfa2lsbF91cmIocG9ydGRhdGEtPmluX3VyYnNbal0pOworCQlzaWVycmFfc3RvcF9yeF91cmJzKHBvcnQpOwogCQl1c2Jfa2lsbF9hbmNob3JlZF91cmJzKCZwb3J0ZGF0YS0+YWN0aXZlKTsKIAl9CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvc3ltYm9sc2VyaWFsLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvc3ltYm9sc2VyaWFsLmMKaW5kZXggY2I3ZTk1Zi4uYjI4MmMwZiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL3N5bWJvbHNlcmlhbC5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9zeW1ib2xzZXJpYWwuYwpAQCAtMTY1LDM0ICsxNjUsMzYgQEAKIHsKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKIAlzdHJ1Y3Qgc3ltYm9sX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9kYXRhKHBvcnQtPnNlcmlhbCk7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWRiZygiJXMgLSBwb3J0ICVkIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlzcGluX2xvY2tfaXJxKCZwcml2LT5sb2NrKTsKIAlwcml2LT50aHJvdHRsZWQgPSB0cnVlOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlzcGluX3VubG9ja19pcnEoJnByaXYtPmxvY2spOwogfQogCiBzdGF0aWMgdm9pZCBzeW1ib2xfdW50aHJvdHRsZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQogewogCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOwogCXN0cnVjdCBzeW1ib2xfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX2RhdGEocG9ydC0+c2VyaWFsKTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCByZXN1bHQ7CisJYm9vbCB3YXNfdGhyb3R0bGVkOwogCiAJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrX2lycSgmcHJpdi0+bG9jayk7CiAJcHJpdi0+dGhyb3R0bGVkID0gZmFsc2U7CisJd2FzX3Rocm90dGxlZCA9IHByaXYtPmFjdHVhbGx5X3Rocm90dGxlZDsKIAlwcml2LT5hY3R1YWxseV90aHJvdHRsZWQgPSBmYWxzZTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJc3Bpbl91bmxvY2tfaXJxKCZwcml2LT5sb2NrKTsKIAogCXByaXYtPmludF91cmItPmRldiA9IHBvcnQtPnNlcmlhbC0+ZGV2OwotCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHByaXYtPmludF91cmIsIEdGUF9BVE9NSUMpOwotCWlmIChyZXN1bHQpCi0JCWRldl9lcnIoJnBvcnQtPmRldiwKLQkJCSIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZFxuIiwKKwlpZiAod2FzX3Rocm90dGxlZCkgeworCQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwcml2LT5pbnRfdXJiLCBHRlBfS0VSTkVMKTsKKwkJaWYgKHJlc3VsdCkKKwkJCWRldl9lcnIoJnBvcnQtPmRldiwKKwkJCQkiJXMgLSBmYWlsZWQgc3VibWl0dGluZyByZWFkIHVyYiwgZXJyb3IgJWRcbiIsCiAJCQkJCQkJX19mdW5jX18sIHJlc3VsdCk7CisJfQogfQogCiBzdGF0aWMgaW50IHN5bWJvbF9zdGFydHVwKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvdXNiLXNlcmlhbC5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL3VzYi1zZXJpYWwuYwppbmRleCBmZjc1YTM1Li5iZDNmYTdmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvdXNiLXNlcmlhbC5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC91c2Itc2VyaWFsLmMKQEAgLTE1Niw3ICsxNTYsOCBAQAogCWlmIChzZXJpYWwtPm1pbm9yICE9IFNFUklBTF9UVFlfTk9fTUlOT1IpCiAJCXJldHVybl9zZXJpYWwoc2VyaWFsKTsKIAotCXNlcmlhbC0+dHlwZS0+cmVsZWFzZShzZXJpYWwpOworCWlmIChzZXJpYWwtPmF0dGFjaGVkKQorCQlzZXJpYWwtPnR5cGUtPnJlbGVhc2Uoc2VyaWFsKTsKIAogCS8qIE5vdyB0aGF0IG5vdGhpbmcgaXMgdXNpbmcgdGhlIHBvcnRzLCB0aGV5IGNhbiBiZSBmcmVlZCAqLwogCWZvciAoaSA9IDA7IGkgPCBzZXJpYWwtPm51bV9wb3J0X3BvaW50ZXJzOyArK2kpIHsKQEAgLTE5Miw3ICsxOTMsNyBAQAogICogVGhpcyBpcyB0aGUgZmlyc3QgcGxhY2UgYSBuZXcgdHR5IGdldHMgdXNlZC4gIEhlbmNlIHRoaXMgaXMgd2hlcmUgd2UKICAqIGFjcXVpcmUgcmVmZXJlbmNlcyB0byB0aGUgdXNiX3NlcmlhbCBzdHJ1Y3R1cmUgYW5kIHRoZSBkcml2ZXIgbW9kdWxlLAogICogd2hlcmUgd2Ugc3RvcmUgYSBwb2ludGVyIHRvIHRoZSBwb3J0LCBhbmQgd2hlcmUgd2UgZG8gYW4gYXV0b3Jlc3VtZS4KLSAqIEFsbCB0aGVzZSBhY3Rpb25zIGFyZSByZXZlcnNlZCBpbiBzZXJpYWxfcmVsZWFzZSgpLgorICogQWxsIHRoZXNlIGFjdGlvbnMgYXJlIHJldmVyc2VkIGluIHNlcmlhbF9jbGVhbnVwKCkuCiAgKi8KIHN0YXRpYyBpbnQgc2VyaWFsX2luc3RhbGwoc3RydWN0IHR0eV9kcml2ZXIgKmRyaXZlciwgc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKQEAgLTMzOSwxNSArMzQwLDE2IEBACiB9CiAKIC8qKgotICogc2VyaWFsX3JlbGVhc2UgLSBmcmVlIHJlc291cmNlcyBwb3N0IGNsb3NlL2hhbmd1cAorICogc2VyaWFsX2NsZWFudXAgLSBmcmVlIHJlc291cmNlcyBwb3N0IGNsb3NlL2hhbmd1cAogICogQHBvcnQ6IHBvcnQgdG8gZnJlZSB1cAogICoKICAqIERvIHRoZSByZXNvdXJjZSBmcmVlaW5nIGFuZCByZWZjb3VudCBkcm9wcGluZyBmb3IgdGhlIHBvcnQuCiAgKiBBdm9pZCBmcmVlaW5nIHRoZSBjb25zb2xlLgogICoKLSAqIENhbGxlZCB3aGVuIHRoZSBsYXN0IHR0eSBrcmVmIGlzIGRyb3BwZWQuCisgKiBDYWxsZWQgYXN5bmNocm9ub3VzbHkgYWZ0ZXIgdGhlIGxhc3QgdHR5IGtyZWYgaXMgZHJvcHBlZCwKKyAqIGFuZCB0aGUgdHR5IGxheWVyIGhhcyBhbHJlYWR5IGRvbmUgdGhlIHR0eV9zaHV0ZG93bih0dHkpOwogICovCi1zdGF0aWMgdm9pZCBzZXJpYWxfcmVsZWFzZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQorc3RhdGljIHZvaWQgc2VyaWFsX2NsZWFudXAoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKIAlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsOwpAQCAtMzYxLDkgKzM2Myw2IEBACiAKIAlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOwogCi0JLyogU3RhbmRhcmQgc2h1dGRvd24gcHJvY2Vzc2luZyAqLwotCXR0eV9zaHV0ZG93bih0dHkpOwotCiAJdHR5LT5kcml2ZXJfZGF0YSA9IE5VTEw7CiAKIAlzZXJpYWwgPSBwb3J0LT5zZXJpYWw7CkBAIC0xMDYxLDEyICsxMDYwLDE1IEBACiAJCW1vZHVsZV9wdXQodHlwZS0+ZHJpdmVyLm93bmVyKTsKIAkJaWYgKHJldHZhbCA8IDApCiAJCQlnb3RvIHByb2JlX2Vycm9yOworCQlzZXJpYWwtPmF0dGFjaGVkID0gMTsKIAkJaWYgKHJldHZhbCA+IDApIHsKIAkJCS8qIHF1aWV0bHkgYWNjZXB0IHRoaXMgZGV2aWNlLCBidXQgZG9uJ3QgYmluZCB0byBhCiAJCQkgICBzZXJpYWwgcG9ydCBhcyBpdCdzIGFib3V0IHRvIGRpc2FwcGVhciAqLwogCQkJc2VyaWFsLT5udW1fcG9ydHMgPSAwOwogCQkJZ290byBleGl0OwogCQl9CisJfSBlbHNlIHsKKwkJc2VyaWFsLT5hdHRhY2hlZCA9IDE7CiAJfQogCiAJaWYgKGdldF9mcmVlX3NlcmlhbChzZXJpYWwsIG51bV9wb3J0cywgJm1pbm9yKSA9PSBOVUxMKSB7CkBAIC0xMTY2LDggKzExNjgsMTAgQEAKIAogCWlmIChzZXJpYWwtPnR5cGUtPnN1c3BlbmQpIHsKIAkJciA9IHNlcmlhbC0+dHlwZS0+c3VzcGVuZChzZXJpYWwsIG1lc3NhZ2UpOwotCQlpZiAociA8IDApCisJCWlmIChyIDwgMCkgeworCQkJc2VyaWFsLT5zdXNwZW5kaW5nID0gMDsKIAkJCWdvdG8gZXJyX291dDsKKwkJfQogCX0KIAogCWZvciAoaSA9IDA7IGkgPCBzZXJpYWwtPm51bV9wb3J0czsgKytpKSB7CkBAIC0xMjEwLDcgKzEyMTQsNyBAQAogCS5jaGFyc19pbl9idWZmZXIgPQlzZXJpYWxfY2hhcnNfaW5fYnVmZmVyLAogCS50aW9jbWdldCA9CQlzZXJpYWxfdGlvY21nZXQsCiAJLnRpb2Ntc2V0ID0JCXNlcmlhbF90aW9jbXNldCwKLQkuc2h1dGRvd24gPSAJCXNlcmlhbF9yZWxlYXNlLAorCS5jbGVhbnVwID0gCQlzZXJpYWxfY2xlYW51cCwKIAkuaW5zdGFsbCA9IAkJc2VyaWFsX2luc3RhbGwsCiAJLnByb2NfZm9wcyA9CQkmc2VyaWFsX3Byb2NfZm9wcywKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvdmlzb3IuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC92aXNvci5jCmluZGV4IDFhYTVkMjAuLmFkMWY5MjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC92aXNvci5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC92aXNvci5jCkBAIC01MTMsNyArNTEzLDggQEAKIAkJCXR0eV9rcmVmX3B1dCh0dHkpOwogCQl9CiAJCXNwaW5fbG9jaygmcHJpdi0+bG9jayk7Ci0JCXByaXYtPmJ5dGVzX2luICs9IGF2YWlsYWJsZV9yb29tOworCQlpZiAodHR5KQorCQkJcHJpdi0+Ynl0ZXNfaW4gKz0gYXZhaWxhYmxlX3Jvb207CiAKIAl9IGVsc2UgewogCQlzcGluX2xvY2soJnByaXYtPmxvY2spOwpAQCAtNTgyLDEyICs1ODMsMTEgQEAKIHsKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKIAlzdHJ1Y3Qgdmlzb3JfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCXNwaW5fbG9ja19pcnEoJnByaXYtPmxvY2spOwogCXByaXYtPnRocm90dGxlZCA9IDE7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycSgmcHJpdi0+bG9jayk7CiB9CiAKIApAQCAtNTk1LDIxICs1OTUsMjMgQEAKIHsKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKIAlzdHJ1Y3Qgdmlzb3JfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCByZXN1bHQ7CisJaW50IHJlc3VsdCwgd2FzX3Rocm90dGxlZDsKIAogCWRiZygiJXMgLSBwb3J0ICVkIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlzcGluX2xvY2tfaXJxKCZwcml2LT5sb2NrKTsKIAlwcml2LT50aHJvdHRsZWQgPSAwOworCXdhc190aHJvdHRsZWQgPSBwcml2LT5hY3R1YWxseV90aHJvdHRsZWQ7CiAJcHJpdi0+YWN0dWFsbHlfdGhyb3R0bGVkID0gMDsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJc3Bpbl91bmxvY2tfaXJxKCZwcml2LT5sb2NrKTsKIAotCXBvcnQtPnJlYWRfdXJiLT5kZXYgPSBwb3J0LT5zZXJpYWwtPmRldjsKLQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5yZWFkX3VyYiwgR0ZQX0FUT01JQyk7Ci0JaWYgKHJlc3VsdCkKLQkJZGV2X2VycigmcG9ydC0+ZGV2LAotCQkJIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkXG4iLAorCWlmICh3YXNfdGhyb3R0bGVkKSB7CisJCXBvcnQtPnJlYWRfdXJiLT5kZXYgPSBwb3J0LT5zZXJpYWwtPmRldjsKKwkJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+cmVhZF91cmIsIEdGUF9LRVJORUwpOworCQlpZiAocmVzdWx0KQorCQkJZGV2X2VycigmcG9ydC0+ZGV2LAorCQkJCSIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZFxuIiwKIAkJCQkJCQlfX2Z1bmNfXywgcmVzdWx0KTsKKwl9CiB9CiAKIHN0YXRpYyBpbnQgcGFsbV9vc18zX3Byb2JlKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvd2hpdGVoZWF0LmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvd2hpdGVoZWF0LmMKaW5kZXggNjI0MjRlZS4uMTA5M2QyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL3doaXRlaGVhdC5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC93aGl0ZWhlYXQuYwpAQCAtOTQ5LDEzICs5NDksMTIgQEAKIHsKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKIAlzdHJ1Y3Qgd2hpdGVoZWF0X3ByaXZhdGUgKmluZm8gPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWRiZygiJXMgLSBwb3J0ICVkIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmaW5mby0+bG9jaywgZmxhZ3MpOworCXNwaW5fbG9ja19pcnEoJmluZm8tPmxvY2spOwogCWluZm8tPmZsYWdzIHw9IFRIUk9UVExFRDsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbmZvLT5sb2NrLCBmbGFncyk7CisJc3Bpbl91bmxvY2tfaXJxKCZpbmZvLT5sb2NrKTsKIAogCXJldHVybjsKIH0KQEAgLTk2NiwxNCArOTY1LDEzIEBACiAJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CiAJc3RydWN0IHdoaXRlaGVhdF9wcml2YXRlICppbmZvID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwogCWludCBhY3R1YWxseV90aHJvdHRsZWQ7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWRiZygiJXMgLSBwb3J0ICVkIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmaW5mby0+bG9jaywgZmxhZ3MpOworCXNwaW5fbG9ja19pcnEoJmluZm8tPmxvY2spOwogCWFjdHVhbGx5X3Rocm90dGxlZCA9IGluZm8tPmZsYWdzICYgQUNUVUFMTFlfVEhST1RUTEVEOwogCWluZm8tPmZsYWdzICY9IH4oVEhST1RUTEVEIHwgQUNUVUFMTFlfVEhST1RUTEVEKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbmZvLT5sb2NrLCBmbGFncyk7CisJc3Bpbl91bmxvY2tfaXJxKCZpbmZvLT5sb2NrKTsKIAogCWlmIChhY3R1YWxseV90aHJvdHRsZWQpCiAJCXJ4X2RhdGFfc29mdGludCgmaW5mby0+cnhfd29yayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3RyYW5zcG9ydC5jIGIvZHJpdmVycy91c2Ivc3RvcmFnZS90cmFuc3BvcnQuYwppbmRleCBlMjBkYzUyLi41ODlmNmI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3RyYW5zcG9ydC5jCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdHJhbnNwb3J0LmMKQEAgLTY5Niw3ICs2OTYsNyBAQAogCQkvKiBkZXZpY2Ugc3VwcG9ydHMgYW5kIG5lZWRzIGJpZ2dlciBzZW5zZSBidWZmZXIgKi8KIAkJaWYgKHVzLT5mZmxhZ3MgJiBVU19GTF9TQU5FX1NFTlNFKQogCQkJc2Vuc2Vfc2l6ZSA9IH4wOwotCitSZXRyeV9TZW5zZToKIAkJVVNfREVCVUdQKCJJc3N1aW5nIGF1dG8tUkVRVUVTVF9TRU5TRVxuIik7CiAKIAkJc2NzaV9laF9wcmVwX2NtbmQoc3JiLCAmc2VzLCBOVUxMLCAwLCBzZW5zZV9zaXplKTsKQEAgLTcyMCw2ICs3MjAsMjEgQEAKIAkJCXNyYi0+cmVzdWx0ID0gRElEX0FCT1JUIDw8IDE2OwogCQkJZ290byBIYW5kbGVfRXJyb3JzOwogCQl9CisKKwkJLyogU29tZSBkZXZpY2VzIGNsYWltIHRvIHN1cHBvcnQgbGFyZ2VyIHNlbnNlIGJ1dCBmYWlsIHdoZW4KKwkJICogdHJ5aW5nIHRvIHJlcXVlc3QgaXQuIFdoZW4gYSB0cmFuc3BvcnQgZmFpbHVyZSBoYXBwZW5zCisJCSAqIHVzaW5nIFVTX0ZTX1NBTkVfU0VOU0UsIHdlIGFsd2F5cyByZXRyeSB3aXRoIGEgc3RhbmRhcmQKKwkJICogKHNtYWxsKSBzZW5zZSByZXF1ZXN0LiBUaGlzIGZpeGVzIHNvbWUgVVNCIEdTTSBtb2RlbXMKKwkJICovCisJCWlmICh0ZW1wX3Jlc3VsdCA9PSBVU0JfU1RPUl9UUkFOU1BPUlRfRkFJTEVEICYmCisJCSAgICAodXMtPmZmbGFncyAmIFVTX0ZMX1NBTkVfU0VOU0UpICYmCisJCSAgICBzZW5zZV9zaXplICE9IFVTX1NFTlNFX1NJWkUpIHsKKwkJCVVTX0RFQlVHUCgiLS0gYXV0by1zZW5zZSBmYWlsdXJlLCByZXRyeSBzbWFsbCBzZW5zZVxuIik7CisJCQlzZW5zZV9zaXplID0gVVNfU0VOU0VfU0laRTsKKwkJCWdvdG8gUmV0cnlfU2Vuc2U7CisJCX0KKworCQkvKiBPdGhlciBmYWlsdXJlcyAqLwogCQlpZiAodGVtcF9yZXN1bHQgIT0gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0QpIHsKIAkJCVVTX0RFQlVHUCgiLS0gYXV0by1zZW5zZSBmYWlsdXJlXG4iKTsKIApAQCAtNzY4LDE3ICs3ODMsMzIgQEAKIAkJLyogc2V0IHRoZSByZXN1bHQgc28gdGhlIGhpZ2hlciBsYXllcnMgZXhwZWN0IHRoaXMgZGF0YSAqLwogCQlzcmItPnJlc3VsdCA9IFNBTV9TVEFUX0NIRUNLX0NPTkRJVElPTjsKIAotCQkvKiBJZiB0aGluZ3MgYXJlIHJlYWxseSBva2F5LCB0aGVuIGxldCdzIHNob3cgdGhhdC4gIFplcm8KLQkJICogb3V0IHRoZSBzZW5zZSBidWZmZXIgc28gdGhlIGhpZ2hlciBsYXllcnMgd29uJ3QgcmVhbGl6ZQotCQkgKiB3ZSBkaWQgYW4gdW5zb2xpY2l0ZWQgYXV0by1zZW5zZS4gKi8KLQkJaWYgKHJlc3VsdCA9PSBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRCAmJgotCQkJLyogRmlsZW1hcmsgMCwgaWdub3JlIEVPTSwgSUxJIDAsIG5vIHNlbnNlICovCisJCS8qIFdlIG9mdGVuIGdldCBlbXB0eSBzZW5zZSBkYXRhLiAgVGhpcyBjb3VsZCBpbmRpY2F0ZSB0aGF0CisJCSAqIGV2ZXJ5dGhpbmcgd29ya2VkIG9yIHRoYXQgdGhlcmUgd2FzIGFuIHVuc3BlY2lmaWVkCisJCSAqIHByb2JsZW0uICBXZSBoYXZlIHRvIGRlY2lkZSB3aGljaC4KKwkJICovCisJCWlmICgJLyogRmlsZW1hcmsgMCwgaWdub3JlIEVPTSwgSUxJIDAsIG5vIHNlbnNlICovCiAJCQkJKHNyYi0+c2Vuc2VfYnVmZmVyWzJdICYgMHhhZikgPT0gMCAmJgogCQkJLyogTm8gQVNDIG9yIEFTQ1EgKi8KIAkJCQlzcmItPnNlbnNlX2J1ZmZlclsxMl0gPT0gMCAmJgogCQkJCXNyYi0+c2Vuc2VfYnVmZmVyWzEzXSA9PSAwKSB7Ci0JCQlzcmItPnJlc3VsdCA9IFNBTV9TVEFUX0dPT0Q7Ci0JCQlzcmItPnNlbnNlX2J1ZmZlclswXSA9IDB4MDsKKworCQkJLyogSWYgdGhpbmdzIGFyZSByZWFsbHkgb2theSwgdGhlbiBsZXQncyBzaG93IHRoYXQuCisJCQkgKiBaZXJvIG91dCB0aGUgc2Vuc2UgYnVmZmVyIHNvIHRoZSBoaWdoZXIgbGF5ZXJzCisJCQkgKiB3b24ndCByZWFsaXplIHdlIGRpZCBhbiB1bnNvbGljaXRlZCBhdXRvLXNlbnNlLgorCQkJICovCisJCQlpZiAocmVzdWx0ID09IFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EKSB7CisJCQkJc3JiLT5yZXN1bHQgPSBTQU1fU1RBVF9HT09EOworCQkJCXNyYi0+c2Vuc2VfYnVmZmVyWzBdID0gMHgwOworCisJCQkvKiBJZiB0aGVyZSB3YXMgYSBwcm9ibGVtLCByZXBvcnQgYW4gdW5zcGVjaWZpZWQKKwkJCSAqIGhhcmR3YXJlIGVycm9yIHRvIHByZXZlbnQgdGhlIGhpZ2hlciBsYXllcnMgZnJvbQorCQkJICogZW50ZXJpbmcgYW4gaW5maW5pdGUgcmV0cnkgbG9vcC4KKwkJCSAqLworCQkJfSBlbHNlIHsKKwkJCQlzcmItPnJlc3VsdCA9IERJRF9FUlJPUiA8PCAxNjsKKwkJCQlzcmItPnNlbnNlX2J1ZmZlclsyXSA9IEhBUkRXQVJFX0VSUk9SOworCQkJfQogCQl9CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfZGV2cy5oIGIvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX2RldnMuaAppbmRleCAwNzlhZTBmLi5kNGYwMzRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfZGV2cy5oCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9kZXZzLmgKQEAgLTE4MjMsNiArMTgyMywxMyBAQAogCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgTlVMTCwKIAkJVVNfRkxfSUdOT1JFX1JFU0lEVUUgKSwKIAorLyogUmVwb3J0ZWQgYnkgU2VyZ2V5IFBpbmFldiA8ZGZvQGFudGV4LnJ1PiAqLworVU5VU1VBTF9ERVYoICAweDQxMDIsIDB4MTA1OSwgMHgwMDAwLCAgMHgwMDAwLAorICAgICAgICAgICAgICAgImlSaXZlciIsCisgICAgICAgICAgICAgICAiUDdLIiwKKyAgICAgICAgICAgICAgIFVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCBOVUxMLAorICAgICAgICAgICAgICAgVVNfRkxfTUFYX1NFQ1RPUlNfNjQgKSwKKwogLyoKICAqIERhdmlkIEjDpHJkZW1hbiA8ZGF2aWRAMmdlbi5jb20+CiAgKiBUaGUga2V5IG1ha2VzIHRoZSBTQ1NJIHN0YWNrIHByaW50IGNvbmZ1c2luZyAoYnV0IGhhcm1sZXNzKSBtZXNzYWdlcwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivd3VzYmNvcmUvc2VjdXJpdHkuYyBiL2RyaXZlcnMvdXNiL3d1c2Jjb3JlL3NlY3VyaXR5LmMKaW5kZXggYjJmMTQ5Zi4uNDUxNmMzNiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivd3VzYmNvcmUvc2VjdXJpdHkuYworKysgYi9kcml2ZXJzL3VzYi93dXNiY29yZS9zZWN1cml0eS5jCkBAIC0yMDAsMzUgKzIwMCw0MCBAQAogewogCWludCByZXN1bHQsIGJ5dGVzLCBzZWNkX3NpemU7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gJnVzYl9kZXYtPmRldjsKLQlzdHJ1Y3QgdXNiX3NlY3VyaXR5X2Rlc2NyaXB0b3Igc2VjZDsKKwlzdHJ1Y3QgdXNiX3NlY3VyaXR5X2Rlc2NyaXB0b3IgKnNlY2Q7CiAJY29uc3Qgc3RydWN0IHVzYl9lbmNyeXB0aW9uX2Rlc2NyaXB0b3IgKmV0ZCwgKmNjbTFfZXRkID0gTlVMTDsKLQl2b2lkICpzZWNkX2J1ZjsKIAljb25zdCB2b2lkICppdHIsICp0b3A7CiAJY2hhciBidWZbNjRdOwogCisJc2VjZCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB1c2Jfc2VjdXJpdHlfZGVzY3JpcHRvciksIEdGUF9LRVJORUwpOworCWlmIChzZWNkID09IE5VTEwpIHsKKwkJcmVzdWx0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCiAJcmVzdWx0ID0gdXNiX2dldF9kZXNjcmlwdG9yKHVzYl9kZXYsIFVTQl9EVF9TRUNVUklUWSwKLQkJCQkgICAgMCwgJnNlY2QsIHNpemVvZihzZWNkKSk7CisJCQkJICAgIDAsIHNlY2QsIHNpemVvZihzdHJ1Y3QgdXNiX3NlY3VyaXR5X2Rlc2NyaXB0b3IpKTsKIAlpZiAocmVzdWx0IDwgc2l6ZW9mKHNlY2QpKSB7CiAJCWRldl9lcnIoZGV2LCAiQ2FuJ3QgcmVhZCBzZWN1cml0eSBkZXNjcmlwdG9yIG9yICIKIAkJCSJub3QgZW5vdWdoIGRhdGE6ICVkXG4iLCByZXN1bHQpOwotCQlnb3RvIGVycm9yX3NlY2Q7CisJCWdvdG8gb3V0OwogCX0KLQlzZWNkX3NpemUgPSBsZTE2X3RvX2NwdShzZWNkLndUb3RhbExlbmd0aCk7Ci0Jc2VjZF9idWYgPSBrbWFsbG9jKHNlY2Rfc2l6ZSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKHNlY2RfYnVmID09IE5VTEwpIHsKKwlzZWNkX3NpemUgPSBsZTE2X3RvX2NwdShzZWNkLT53VG90YWxMZW5ndGgpOworCXNlY2QgPSBrcmVhbGxvYyhzZWNkLCBzZWNkX3NpemUsIEdGUF9LRVJORUwpOworCWlmIChzZWNkID09IE5VTEwpIHsKIAkJZGV2X2VycihkZXYsICJDYW4ndCBhbGxvY2F0ZSBzcGFjZSBmb3Igc2VjdXJpdHkgZGVzY3JpcHRvcnNcbiIpOwotCQlnb3RvIGVycm9yX3NlY2RfYWxsb2M7CisJCWdvdG8gb3V0OwogCX0KIAlyZXN1bHQgPSB1c2JfZ2V0X2Rlc2NyaXB0b3IodXNiX2RldiwgVVNCX0RUX1NFQ1VSSVRZLAotCQkJCSAgICAwLCBzZWNkX2J1Ziwgc2VjZF9zaXplKTsKKwkJCQkgICAgMCwgc2VjZCwgc2VjZF9zaXplKTsKIAlpZiAocmVzdWx0IDwgc2VjZF9zaXplKSB7CiAJCWRldl9lcnIoZGV2LCAiQ2FuJ3QgcmVhZCBzZWN1cml0eSBkZXNjcmlwdG9yIG9yICIKIAkJCSJub3QgZW5vdWdoIGRhdGE6ICVkXG4iLCByZXN1bHQpOwotCQlnb3RvIGVycm9yX3NlY2RfYWxsOworCQlnb3RvIG91dDsKIAl9CiAJYnl0ZXMgPSAwOwotCWl0ciA9IHNlY2RfYnVmICsgc2l6ZW9mKHNlY2QpOwotCXRvcCA9IHNlY2RfYnVmICsgcmVzdWx0OworCWl0ciA9ICZzZWNkWzFdOworCXRvcCA9ICh2b2lkICopc2VjZCArIHJlc3VsdDsKIAl3aGlsZSAoaXRyIDwgdG9wKSB7CiAJCWV0ZCA9IGl0cjsKIAkJaWYgKHRvcCAtIGl0ciA8IHNpemVvZigqZXRkKSkgewpAQCAtMjU5LDI0ICsyNjQsMTYgQEAKIAkJZGV2X2VycihkZXYsICJXVVNCIGRldmljZSBkb2Vzbid0IHN1cHBvcnQgQ0NNMSBlbmNyeXB0aW9uLCAiCiAJCQkiY2FuJ3QgdXNlIVxuIik7CiAJCXJlc3VsdCA9IC1FSU5WQUw7Ci0JCWdvdG8gZXJyb3Jfbm9fY2NtMTsKKwkJZ290byBvdXQ7CiAJfQogCXd1c2JfZGV2LT5jY20xX2V0ZCA9ICpjY20xX2V0ZDsKIAlkZXZfZGJnKGRldiwgInN1cHBvcnRlZCBlbmNyeXB0aW9uOiAlczsgdXNpbmcgJXMgKDB4JTAyeC8lMDJ4KVxuIiwKIAkJYnVmLCB3dXNiX2V0X25hbWUoY2NtMV9ldGQtPmJFbmNyeXB0aW9uVHlwZSksCiAJCWNjbTFfZXRkLT5iRW5jcnlwdGlvblZhbHVlLCBjY20xX2V0ZC0+YkF1dGhLZXlJbmRleCk7CiAJcmVzdWx0ID0gMDsKLQlrZnJlZShzZWNkX2J1Zik7CiBvdXQ6CisJa2ZyZWUoc2VjZCk7CiAJcmV0dXJuIHJlc3VsdDsKLQotCi1lcnJvcl9ub19jY20xOgotZXJyb3Jfc2VjZF9hbGw6Ci0Ja2ZyZWUoc2VjZF9idWYpOwotZXJyb3Jfc2VjZF9hbGxvYzoKLWVycm9yX3NlY2Q6Ci0JZ290byBvdXQ7CiB9CiAKIHZvaWQgd3VzYl9kZXZfc2VjX3JtKHN0cnVjdCB3dXNiX2RldiAqd3VzYl9kZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3V3Yi91d2ItZGVidWcuYyBiL2RyaXZlcnMvdXdiL3V3Yi1kZWJ1Zy5jCmluZGV4IDRhNDI5OTMuLjJlZWNlYzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXdiL3V3Yi1kZWJ1Zy5jCisrKyBiL2RyaXZlcnMvdXdiL3V3Yi1kZWJ1Zy5jCkBAIC0yMDUsNyArMjA1LDcgQEAKIAlyZXR1cm4gcmV0IDwgMCA/IHJldCA6IGxlbjsKIH0KIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgY29tbWFuZF9mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgY29tbWFuZF9mb3BzID0gewogCS5vcGVuICAgPSBjb21tYW5kX29wZW4sCiAJLndyaXRlICA9IGNvbW1hbmRfd3JpdGUsCiAJLnJlYWQgICA9IE5VTEwsCkBAIC0yNTUsNyArMjU1LDcgQEAKIAlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgcmVzZXJ2YXRpb25zX3ByaW50LCBpbm9kZS0+aV9wcml2YXRlKTsKIH0KIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcmVzZXJ2YXRpb25zX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyByZXNlcnZhdGlvbnNfZm9wcyA9IHsKIAkub3BlbiAgICA9IHJlc2VydmF0aW9uc19vcGVuLAogCS5yZWFkICAgID0gc2VxX3JlYWQsCiAJLmxsc2VlayAgPSBzZXFfbHNlZWssCkBAIC0yODMsNyArMjgzLDcgQEAKIAlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgZHJwX2F2YWlsX3ByaW50LCBpbm9kZS0+aV9wcml2YXRlKTsKIH0KIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZHJwX2F2YWlsX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkcnBfYXZhaWxfZm9wcyA9IHsKIAkub3BlbiAgICA9IGRycF9hdmFpbF9vcGVuLAogCS5yZWFkICAgID0gc2VxX3JlYWQsCiAJLmxsc2VlayAgPSBzZXFfbHNlZWssCmRpZmYgLS1naXQgYS9kcml2ZXJzL3V3Yi93aGMtcmMuYyBiL2RyaXZlcnMvdXdiL3doYy1yYy5jCmluZGV4IDFkOWE2ZjUuLjAxOTUwYzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXdiL3doYy1yYy5jCisrKyBiL2RyaXZlcnMvdXdiL3doYy1yYy5jCkBAIC00Miw2ICs0Miw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L0tjb25maWcgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9LY29uZmlnCmluZGV4IDkwODYxY2QuLjA5YmZhOTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L0tjb25maWcKKysrIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvS2NvbmZpZwpAQCAtMzEsNiArMzEsMTMgQEAKIAkgIFNheSB5IGhlcmUgdG8gc3VwcG9ydCB0aGUgTENEIHBhbmVscyB1c3VhbGx5IGZvdW5kIG9uIFNIQVJQCiAJICBjb3JnaSAoQzd4MCkgYW5kIHNwaXR6IChDeHgwMCkgbW9kZWxzLgogCitjb25maWcgTENEX0xNUzI4M0dGMDUKKwl0cmlzdGF0ZSAiU2Ftc3VuZyBMTVMyODNHRjA1IExDRCIKKwlkZXBlbmRzIG9uIExDRF9DTEFTU19ERVZJQ0UgJiYgU1BJX01BU1RFUiAmJiBHRU5FUklDX0dQSU8KKwloZWxwCisJICBTUEkgZHJpdmVyIGZvciBTYW1zdW5nIExNUzI4M0dGMDUuIFRoaXMgcHJvdmlkZXMgYmFzaWMgc3VwcG9ydAorCSAgZm9yIHBvd2VyaW5nIHRoZSBMQ0QgdXAvZG93biB0aHJvdWdoIGEgc3lzZnMgaW50ZXJmYWNlLgorCiBjb25maWcgTENEX0xUVjM1MFFWCiAJdHJpc3RhdGUgIlNhbXN1bmcgTFRWMzUwUVYgTENEIFBhbmVsIgogCWRlcGVuZHMgb24gTENEX0NMQVNTX0RFVklDRSAmJiBTUElfTUFTVEVSCkBAIC0yMjksMyArMjM2LDI5IEBACiAJaGVscAogCSAgSWYgeW91IGhhdmUgYSBUYWJsZXRraW9zayBTYWhhcmEgVG91Y2gtaVQsIHNheSB5IHRvIGVuYWJsZSB0aGUKIAkgIGJhY2tsaWdodCBkcml2ZXIuCisKK2NvbmZpZyBCQUNLTElHSFRfV004MzFYCisJdHJpc3RhdGUgIldNODMxeCBQTUlDIEJhY2tsaWdodCBEcml2ZXIiCisJZGVwZW5kcyBvbiBCQUNLTElHSFRfQ0xBU1NfREVWSUNFICYmIE1GRF9XTTgzMVgKKwloZWxwCisJICBJZiB5b3UgaGF2ZSBhIGJhY2tsaWdodCBkcml2ZW4gYnkgdGhlIElTSU5LIGFuZCBEQ0RDIG9mIGEKKwkgIFdNODMxeCBQTUlDIHNheSB5IHRvIGVuYWJsZSB0aGUgYmFja2xpZ2h0IGRyaXZlciBmb3IgaXQuCisKK2NvbmZpZyBCQUNLTElHSFRfQURYCisJdHJpc3RhdGUgIkF2aW9uaWMgRGVzaWduIFhhbnRob3MgQmFja2xpZ2h0IERyaXZlciIKKwlkZXBlbmRzIG9uIEJBQ0tMSUdIVF9DTEFTU19ERVZJQ0UgJiYgQVJDSF9QWEFfQURYCisJZGVmYXVsdCB5CisJaGVscAorCSAgU2F5IFkgdG8gZW5hYmxlIHRoZSBiYWNrbGlnaHQgZHJpdmVyIG9uIEF2aW9uaWMgRGVzaWduIFhhbnRob3MtYmFzZWQKKwkgIGJvYXJkcy4KKworY29uZmlnIEJBQ0tMSUdIVF9BRFA1NTIwCisJdHJpc3RhdGUgIkJhY2tsaWdodCBEcml2ZXIgZm9yIEFEUDU1MjAvQURQNTUwMSB1c2luZyBXTEVEIgorCWRlcGVuZHMgb24gQkFDS0xJR0hUX0NMQVNTX0RFVklDRSAmJiBQTUlDX0FEUDU1MjAKKwloZWxwCisJICBJZiB5b3UgaGF2ZSBhIExDRCBiYWNrbGlnaHQgY29ubmVjdGVkIHRvIHRoZSBCU1QvQkxfU05LIG91dHB1dCBvZgorCSAgQURQNTUyMCBvciBBRFA1NTAxLCBzYXkgWSBoZXJlIHRvIGVuYWJsZSB0aGlzIGRyaXZlci4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsCisJICBiZSBjYWxsZWQgYWRwNTUyMF9ibC4KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvTWFrZWZpbGUgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9NYWtlZmlsZQppbmRleCA0ZWIxNzhjLi45YTQwNTU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9NYWtlZmlsZQpAQCAtMyw2ICszLDcgQEAKIG9iai0kKENPTkZJR19MQ0RfQ0xBU1NfREVWSUNFKSAgICAgKz0gbGNkLm8KIG9iai0kKENPTkZJR19MQ0RfQ09SR0kpCQkgICArPSBjb3JnaV9sY2Qubwogb2JqLSQoQ09ORklHX0xDRF9IUDcwMCkJCSAgICs9IGpvcm5hZGE3MjBfbGNkLm8KK29iai0kKENPTkZJR19MQ0RfTE1TMjgzR0YwNSkJICAgKz0gbG1zMjgzZ2YwNS5vCiBvYmotJChDT05GSUdfTENEX0xUVjM1MFFWKQkgICArPSBsdHYzNTBxdi5vCiBvYmotJChDT05GSUdfTENEX0lMSTkzMjApCSAgICs9IGlsaTkzMjAubwogb2JqLSQoQ09ORklHX0xDRF9QTEFURk9STSkJICAgKz0gcGxhdGZvcm1fbGNkLm8KQEAgLTI0LDQgKzI1LDcgQEAKIG9iai0kKENPTkZJR19CQUNLTElHSFRfTUJQX05WSURJQSkgKz0gbWJwX252aWRpYV9ibC5vCiBvYmotJChDT05GSUdfQkFDS0xJR0hUX1RPU0EpCSs9IHRvc2FfYmwubwogb2JqLSQoQ09ORklHX0JBQ0tMSUdIVF9TQUhBUkEpCSs9IGtiMzg4Nl9ibC5vCitvYmotJChDT05GSUdfQkFDS0xJR0hUX1dNODMxWCkJKz0gd204MzF4X2JsLm8KK29iai0kKENPTkZJR19CQUNLTElHSFRfQURYKSAgICArPSBhZHhfYmwubworb2JqLSQoQ09ORklHX0JBQ0tMSUdIVF9BRFA1NTIwKQkrPSBhZHA1NTIwX2JsLm8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvYWRwNTUyMF9ibC5jIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvYWRwNTUyMF9ibC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkMDVkYTUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9hZHA1NTIwX2JsLmMKQEAgLTAsMCArMSwzNzcgQEAKKy8qCisgKiBCYWNrbGlnaHQgZHJpdmVyIGZvciBBbmFsb2cgRGV2aWNlcyBBRFA1NTIwL0FEUDU1MDEgTUZEIFBNSUNzCisgKgorICogQ29weXJpZ2h0IDIwMDkgQW5hbG9nIERldmljZXMgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ZiLmg+CisjaW5jbHVkZSA8bGludXgvYmFja2xpZ2h0Lmg+CisjaW5jbHVkZSA8bGludXgvbWZkL2FkcDU1MjAuaD4KKworc3RydWN0IGFkcDU1MjBfYmwgeworCXN0cnVjdCBkZXZpY2UgKm1hc3RlcjsKKwlzdHJ1Y3QgYWRwNTUyMF9iYWNrbGlnaHRfcGxhdGZyb21fZGF0YSAqcGRhdGE7CisJc3RydWN0IG11dGV4IGxvY2s7CisJdW5zaWduZWQgbG9uZyBjYWNoZWRfZGF5bGlnaHRfbWF4OworCWludCBpZDsKKwlpbnQgY3VycmVudF9icmlnaHRuZXNzOworfTsKKworc3RhdGljIGludCBhZHA1NTIwX2JsX3NldChzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmwsIGludCBicmlnaHRuZXNzKQoreworCXN0cnVjdCBhZHA1NTIwX2JsICpkYXRhID0gYmxfZ2V0X2RhdGEoYmwpOworCXN0cnVjdCBkZXZpY2UgKm1hc3RlciA9IGRhdGEtPm1hc3RlcjsKKwlpbnQgcmV0ID0gMDsKKworCWlmIChkYXRhLT5wZGF0YS0+ZW5fYW1ibF9zZW5zKSB7CisJCWlmICgoYnJpZ2h0bmVzcyA+IDApICYmIChicmlnaHRuZXNzIDwgQURQNTAyMF9NQVhfQlJJR0hUTkVTUykpIHsKKwkJCS8qIERpc2FibGUgQW1iaWVudCBMaWdodCBhdXRvIGFkanVzdCAqLworCQkJcmV0IHw9IGFkcDU1MjBfY2xyX2JpdHMobWFzdGVyLCBCTF9DT05UUk9MLAorCQkJCQlCTF9BVVRPX0FESik7CisJCQlyZXQgfD0gYWRwNTUyMF93cml0ZShtYXN0ZXIsIERBWUxJR0hUX01BWCwgYnJpZ2h0bmVzcyk7CisJCX0gZWxzZSB7CisJCQkvKgorCQkJICogTUFYX0JSSUdIVE5FU1MgLT4gRW5hYmxlIEFtYmllbnQgTGlnaHQgYXV0byBhZGp1c3QKKwkJCSAqIHJlc3RvcmUgZGF5bGlnaHQgbDMgc3lzZnMgYnJpZ2h0bmVzcworCQkJICovCisJCQlyZXQgfD0gYWRwNTUyMF93cml0ZShtYXN0ZXIsIERBWUxJR0hUX01BWCwKKwkJCQkJIGRhdGEtPmNhY2hlZF9kYXlsaWdodF9tYXgpOworCQkJcmV0IHw9IGFkcDU1MjBfc2V0X2JpdHMobWFzdGVyLCBCTF9DT05UUk9MLAorCQkJCQkgQkxfQVVUT19BREopOworCQl9CisJfSBlbHNlIHsKKwkJcmV0IHw9IGFkcDU1MjBfd3JpdGUobWFzdGVyLCBEQVlMSUdIVF9NQVgsIGJyaWdodG5lc3MpOworCX0KKworCWlmIChkYXRhLT5jdXJyZW50X2JyaWdodG5lc3MgJiYgYnJpZ2h0bmVzcyA9PSAwKQorCQlyZXQgfD0gYWRwNTUyMF9zZXRfYml0cyhtYXN0ZXIsCisJCQkJTU9ERV9TVEFUVVMsIERJTV9FTik7CisJZWxzZSBpZiAoZGF0YS0+Y3VycmVudF9icmlnaHRuZXNzID09IDAgJiYgYnJpZ2h0bmVzcykKKwkJcmV0IHw9IGFkcDU1MjBfY2xyX2JpdHMobWFzdGVyLAorCQkJCU1PREVfU1RBVFVTLCBESU1fRU4pOworCisJaWYgKCFyZXQpCisJCWRhdGEtPmN1cnJlbnRfYnJpZ2h0bmVzcyA9IGJyaWdodG5lc3M7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGFkcDU1MjBfYmxfdXBkYXRlX3N0YXR1cyhzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmwpCit7CisJaW50IGJyaWdodG5lc3MgPSBibC0+cHJvcHMuYnJpZ2h0bmVzczsKKwlpZiAoYmwtPnByb3BzLnBvd2VyICE9IEZCX0JMQU5LX1VOQkxBTkspCisJCWJyaWdodG5lc3MgPSAwOworCisJaWYgKGJsLT5wcm9wcy5mYl9ibGFuayAhPSBGQl9CTEFOS19VTkJMQU5LKQorCQlicmlnaHRuZXNzID0gMDsKKworCXJldHVybiBhZHA1NTIwX2JsX3NldChibCwgYnJpZ2h0bmVzcyk7Cit9CisKK3N0YXRpYyBpbnQgYWRwNTUyMF9ibF9nZXRfYnJpZ2h0bmVzcyhzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmwpCit7CisJc3RydWN0IGFkcDU1MjBfYmwgKmRhdGEgPSBibF9nZXRfZGF0YShibCk7CisJaW50IGVycm9yOworCXVpbnQ4X3QgcmVnX3ZhbDsKKworCWVycm9yID0gYWRwNTUyMF9yZWFkKGRhdGEtPm1hc3RlciwgQkxfVkFMVUUsICZyZWdfdmFsKTsKKworCXJldHVybiBlcnJvciA/IGRhdGEtPmN1cnJlbnRfYnJpZ2h0bmVzcyA6IHJlZ192YWw7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYmFja2xpZ2h0X29wcyBhZHA1NTIwX2JsX29wcyA9IHsKKwkudXBkYXRlX3N0YXR1cwk9IGFkcDU1MjBfYmxfdXBkYXRlX3N0YXR1cywKKwkuZ2V0X2JyaWdodG5lc3MJPSBhZHA1NTIwX2JsX2dldF9icmlnaHRuZXNzLAorfTsKKworc3RhdGljIGludCBhZHA1NTIwX2JsX3NldHVwKHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpibCkKK3sKKwlzdHJ1Y3QgYWRwNTUyMF9ibCAqZGF0YSA9IGJsX2dldF9kYXRhKGJsKTsKKwlzdHJ1Y3QgZGV2aWNlICptYXN0ZXIgPSBkYXRhLT5tYXN0ZXI7CisJc3RydWN0IGFkcDU1MjBfYmFja2xpZ2h0X3BsYXRmcm9tX2RhdGEgKnBkYXRhID0gZGF0YS0+cGRhdGE7CisJaW50IHJldCA9IDA7CisKKwlyZXQgfD0gYWRwNTUyMF93cml0ZShtYXN0ZXIsIERBWUxJR0hUX01BWCwgcGRhdGEtPmwxX2RheWxpZ2h0X21heCk7CisJcmV0IHw9IGFkcDU1MjBfd3JpdGUobWFzdGVyLCBEQVlMSUdIVF9ESU0sIHBkYXRhLT5sMV9kYXlsaWdodF9kaW0pOworCisJaWYgKHBkYXRhLT5lbl9hbWJsX3NlbnMpIHsKKwkJZGF0YS0+Y2FjaGVkX2RheWxpZ2h0X21heCA9IHBkYXRhLT5sMV9kYXlsaWdodF9tYXg7CisJCXJldCB8PSBhZHA1NTIwX3dyaXRlKG1hc3RlciwgT0ZGSUNFX01BWCwgcGRhdGEtPmwyX29mZmljZV9tYXgpOworCQlyZXQgfD0gYWRwNTUyMF93cml0ZShtYXN0ZXIsIE9GRklDRV9ESU0sIHBkYXRhLT5sMl9vZmZpY2VfZGltKTsKKwkJcmV0IHw9IGFkcDU1MjBfd3JpdGUobWFzdGVyLCBEQVJLX01BWCwgcGRhdGEtPmwzX2RhcmtfbWF4KTsKKwkJcmV0IHw9IGFkcDU1MjBfd3JpdGUobWFzdGVyLCBEQVJLX0RJTSwgcGRhdGEtPmwzX2RhcmtfZGltKTsKKwkJcmV0IHw9IGFkcDU1MjBfd3JpdGUobWFzdGVyLCBMMl9UUklQLCBwZGF0YS0+bDJfdHJpcCk7CisJCXJldCB8PSBhZHA1NTIwX3dyaXRlKG1hc3RlciwgTDJfSFlTLCBwZGF0YS0+bDJfaHlzdCk7CisJCXJldCB8PSBhZHA1NTIwX3dyaXRlKG1hc3RlciwgTDNfVFJJUCwgcGRhdGEtPmwzX3RyaXApOworCQlyZXQgfD0gYWRwNTUyMF93cml0ZShtYXN0ZXIsIEwzX0hZUywgcGRhdGEtPmwzX2h5c3QpOworCQlyZXQgfD0gYWRwNTUyMF93cml0ZShtYXN0ZXIsIEFMU19DTVBSX0NGRywKKwkJCUFMU19DTVBSX0NGR19WQUwocGRhdGEtPmFibWxfZmlsdCwgTDNfRU4pKTsKKwl9CisKKwlyZXQgfD0gYWRwNTUyMF93cml0ZShtYXN0ZXIsIEJMX0NPTlRST0wsCisJCQlCTF9DVFJMX1ZBTChwZGF0YS0+ZmFkZV9sZWRfbGF3LCBwZGF0YS0+ZW5fYW1ibF9zZW5zKSk7CisKKwlyZXQgfD0gYWRwNTUyMF93cml0ZShtYXN0ZXIsIEJMX0ZBREUsIEZBREVfVkFMKHBkYXRhLT5mYWRlX2luLAorCQkJcGRhdGEtPmZhZGVfb3V0KSk7CisKKwlyZXQgfD0gYWRwNTUyMF9zZXRfYml0cyhtYXN0ZXIsIE1PREVfU1RBVFVTLCBCTF9FTiB8IERJTV9FTik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3NpemVfdCBhZHA1NTIwX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBjaGFyICpidWYsIGludCByZWcpCit7CisJc3RydWN0IGFkcDU1MjBfYmwgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlpbnQgZXJyb3I7CisJdWludDhfdCByZWdfdmFsOworCisJbXV0ZXhfbG9jaygmZGF0YS0+bG9jayk7CisJZXJyb3IgPSBhZHA1NTIwX3JlYWQoZGF0YS0+bWFzdGVyLCByZWcsICZyZWdfdmFsKTsKKwltdXRleF91bmxvY2soJmRhdGEtPmxvY2spOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXVcbiIsIHJlZ192YWwpOworfQorCitzdGF0aWMgc3NpemVfdCBhZHA1NTIwX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqYnVmLAorCQkJIHNpemVfdCBjb3VudCwgaW50IHJlZykKK3sKKwlzdHJ1Y3QgYWRwNTUyMF9ibCAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXVuc2lnbmVkIGxvbmcgdmFsOworCWludCByZXQ7CisKKwlyZXQgPSBzdHJpY3Rfc3RydG91bChidWYsIDEwLCAmdmFsKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJbXV0ZXhfbG9jaygmZGF0YS0+bG9jayk7CisJYWRwNTUyMF93cml0ZShkYXRhLT5tYXN0ZXIsIHJlZywgdmFsKTsKKwltdXRleF91bmxvY2soJmRhdGEtPmxvY2spOworCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgc3NpemVfdCBhZHA1NTIwX2JsX2RhcmtfbWF4X3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXJldHVybiBhZHA1NTIwX3Nob3coZGV2LCBidWYsIERBUktfTUFYKTsKK30KKworc3RhdGljIHNzaXplX3QgYWRwNTUyMF9ibF9kYXJrX21heF9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlyZXR1cm4gYWRwNTUyMF9zdG9yZShkZXYsIGJ1ZiwgY291bnQsIERBUktfTUFYKTsKK30KK3N0YXRpYyBERVZJQ0VfQVRUUihkYXJrX21heCwgMDY2NCwgYWRwNTUyMF9ibF9kYXJrX21heF9zaG93LAorCQkJYWRwNTUyMF9ibF9kYXJrX21heF9zdG9yZSk7CisKK3N0YXRpYyBzc2l6ZV90IGFkcDU1MjBfYmxfb2ZmaWNlX21heF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJcmV0dXJuIGFkcDU1MjBfc2hvdyhkZXYsIGJ1ZiwgT0ZGSUNFX01BWCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGFkcDU1MjBfYmxfb2ZmaWNlX21heF9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlyZXR1cm4gYWRwNTUyMF9zdG9yZShkZXYsIGJ1ZiwgY291bnQsIE9GRklDRV9NQVgpOworfQorc3RhdGljIERFVklDRV9BVFRSKG9mZmljZV9tYXgsIDA2NjQsIGFkcDU1MjBfYmxfb2ZmaWNlX21heF9zaG93LAorCQkJYWRwNTUyMF9ibF9vZmZpY2VfbWF4X3N0b3JlKTsKKworc3RhdGljIHNzaXplX3QgYWRwNTUyMF9ibF9kYXlsaWdodF9tYXhfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXJldHVybiBhZHA1NTIwX3Nob3coZGV2LCBidWYsIERBWUxJR0hUX01BWCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGFkcDU1MjBfYmxfZGF5bGlnaHRfbWF4X3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBhZHA1NTIwX2JsICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlzdHJpY3Rfc3RydG91bChidWYsIDEwLCAmZGF0YS0+Y2FjaGVkX2RheWxpZ2h0X21heCk7CisJcmV0dXJuIGFkcDU1MjBfc3RvcmUoZGV2LCBidWYsIGNvdW50LCBEQVlMSUdIVF9NQVgpOworfQorc3RhdGljIERFVklDRV9BVFRSKGRheWxpZ2h0X21heCwgMDY2NCwgYWRwNTUyMF9ibF9kYXlsaWdodF9tYXhfc2hvdywKKwkJCWFkcDU1MjBfYmxfZGF5bGlnaHRfbWF4X3N0b3JlKTsKKworc3RhdGljIHNzaXplX3QgYWRwNTUyMF9ibF9kYXJrX2RpbV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJcmV0dXJuIGFkcDU1MjBfc2hvdyhkZXYsIGJ1ZiwgREFSS19ESU0pOworfQorCitzdGF0aWMgc3NpemVfdCBhZHA1NTIwX2JsX2RhcmtfZGltX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCSAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJcmV0dXJuIGFkcDU1MjBfc3RvcmUoZGV2LCBidWYsIGNvdW50LCBEQVJLX0RJTSk7Cit9CitzdGF0aWMgREVWSUNFX0FUVFIoZGFya19kaW0sIDA2NjQsIGFkcDU1MjBfYmxfZGFya19kaW1fc2hvdywKKwkJCWFkcDU1MjBfYmxfZGFya19kaW1fc3RvcmUpOworCitzdGF0aWMgc3NpemVfdCBhZHA1NTIwX2JsX29mZmljZV9kaW1fc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXJldHVybiBhZHA1NTIwX3Nob3coZGV2LCBidWYsIE9GRklDRV9ESU0pOworfQorCitzdGF0aWMgc3NpemVfdCBhZHA1NTIwX2JsX29mZmljZV9kaW1fc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlyZXR1cm4gYWRwNTUyMF9zdG9yZShkZXYsIGJ1ZiwgY291bnQsIE9GRklDRV9ESU0pOworfQorc3RhdGljIERFVklDRV9BVFRSKG9mZmljZV9kaW0sIDA2NjQsIGFkcDU1MjBfYmxfb2ZmaWNlX2RpbV9zaG93LAorCQkJYWRwNTUyMF9ibF9vZmZpY2VfZGltX3N0b3JlKTsKKworc3RhdGljIHNzaXplX3QgYWRwNTUyMF9ibF9kYXlsaWdodF9kaW1fc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXJldHVybiBhZHA1NTIwX3Nob3coZGV2LCBidWYsIERBWUxJR0hUX0RJTSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGFkcDU1MjBfYmxfZGF5bGlnaHRfZGltX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCSAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJcmV0dXJuIGFkcDU1MjBfc3RvcmUoZGV2LCBidWYsIGNvdW50LCBEQVlMSUdIVF9ESU0pOworfQorc3RhdGljIERFVklDRV9BVFRSKGRheWxpZ2h0X2RpbSwgMDY2NCwgYWRwNTUyMF9ibF9kYXlsaWdodF9kaW1fc2hvdywKKwkJCWFkcDU1MjBfYmxfZGF5bGlnaHRfZGltX3N0b3JlKTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmFkcDU1MjBfYmxfYXR0cmlidXRlc1tdID0geworCSZkZXZfYXR0cl9kYXJrX21heC5hdHRyLAorCSZkZXZfYXR0cl9kYXJrX2RpbS5hdHRyLAorCSZkZXZfYXR0cl9vZmZpY2VfbWF4LmF0dHIsCisJJmRldl9hdHRyX29mZmljZV9kaW0uYXR0ciwKKwkmZGV2X2F0dHJfZGF5bGlnaHRfbWF4LmF0dHIsCisJJmRldl9hdHRyX2RheWxpZ2h0X2RpbS5hdHRyLAorCU5VTEwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGFkcDU1MjBfYmxfYXR0cl9ncm91cCA9IHsKKwkuYXR0cnMgPSBhZHA1NTIwX2JsX2F0dHJpYnV0ZXMsCit9OworCitzdGF0aWMgaW50IF9fZGV2aW5pdCBhZHA1NTIwX2JsX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJsOworCXN0cnVjdCBhZHA1NTIwX2JsICpkYXRhOworCWludCByZXQgPSAwOworCisJZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKCpkYXRhKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGRhdGEgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlkYXRhLT5tYXN0ZXIgPSBwZGV2LT5kZXYucGFyZW50OworCWRhdGEtPnBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisKKwlpZiAoZGF0YS0+cGRhdGEgID09IE5VTEwpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAibWlzc2luZyBwbGF0Zm9ybSBkYXRhXG4iKTsKKwkJa2ZyZWUoZGF0YSk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWRhdGEtPmlkID0gcGRldi0+aWQ7CisJZGF0YS0+Y3VycmVudF9icmlnaHRuZXNzID0gMDsKKworCW11dGV4X2luaXQoJmRhdGEtPmxvY2spOworCisJYmwgPSBiYWNrbGlnaHRfZGV2aWNlX3JlZ2lzdGVyKHBkZXYtPm5hbWUsIGRhdGEtPm1hc3RlciwKKwkJCWRhdGEsICZhZHA1NTIwX2JsX29wcyk7CisJaWYgKElTX0VSUihibCkpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIHJlZ2lzdGVyIGJhY2tsaWdodFxuIik7CisJCWtmcmVlKGRhdGEpOworCQlyZXR1cm4gUFRSX0VSUihibCk7CisJfQorCisJYmwtPnByb3BzLm1heF9icmlnaHRuZXNzID0KKwkJYmwtPnByb3BzLmJyaWdodG5lc3MgPSBBRFA1MDIwX01BWF9CUklHSFRORVNTOworCisJaWYgKGRhdGEtPnBkYXRhLT5lbl9hbWJsX3NlbnMpCisJCXJldCA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmYmwtPmRldi5rb2JqLAorCQkJJmFkcDU1MjBfYmxfYXR0cl9ncm91cCk7CisKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byByZWdpc3RlciBzeXNmc1xuIik7CisJCWJhY2tsaWdodF9kZXZpY2VfdW5yZWdpc3RlcihibCk7CisJCWtmcmVlKGRhdGEpOworCX0KKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGJsKTsKKwlyZXQgfD0gYWRwNTUyMF9ibF9zZXR1cChibCk7CisJYmFja2xpZ2h0X3VwZGF0ZV9zdGF0dXMoYmwpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgYWRwNTUyMF9ibF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmwgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgYWRwNTUyMF9ibCAqZGF0YSA9IGJsX2dldF9kYXRhKGJsKTsKKworCWFkcDU1MjBfY2xyX2JpdHMoZGF0YS0+bWFzdGVyLCBNT0RFX1NUQVRVUywgQkxfRU4pOworCisJaWYgKGRhdGEtPnBkYXRhLT5lbl9hbWJsX3NlbnMpCisJCXN5c2ZzX3JlbW92ZV9ncm91cCgmYmwtPmRldi5rb2JqLAorCQkJCSZhZHA1NTIwX2JsX2F0dHJfZ3JvdXApOworCisJYmFja2xpZ2h0X2RldmljZV91bnJlZ2lzdGVyKGJsKTsKKwlrZnJlZShkYXRhKTsKKworCXJldHVybiAwOworfQorCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IGFkcDU1MjBfYmxfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAorCQkJCSBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJsID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJcmV0dXJuIGFkcDU1MjBfYmxfc2V0KGJsLCAwKTsKK30KKworc3RhdGljIGludCBhZHA1NTIwX2JsX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpibCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJYmFja2xpZ2h0X3VwZGF0ZV9zdGF0dXMoYmwpOworCXJldHVybiAwOworfQorI2Vsc2UKKyNkZWZpbmUgYWRwNTUyMF9ibF9zdXNwZW5kCU5VTEwKKyNkZWZpbmUgYWRwNTUyMF9ibF9yZXN1bWUJTlVMTAorI2VuZGlmCisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGFkcDU1MjBfYmxfZHJpdmVyID0geworCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJhZHA1NTIwLWJhY2tsaWdodCIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCisJLnByb2JlCQk9IGFkcDU1MjBfYmxfcHJvYmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChhZHA1NTIwX2JsX3JlbW92ZSksCisJLnN1c3BlbmQJPSBhZHA1NTIwX2JsX3N1c3BlbmQsCisJLnJlc3VtZQkJPSBhZHA1NTIwX2JsX3Jlc3VtZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGFkcDU1MjBfYmxfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmFkcDU1MjBfYmxfZHJpdmVyKTsKK30KK21vZHVsZV9pbml0KGFkcDU1MjBfYmxfaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBhZHA1NTIwX2JsX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmYWRwNTUyMF9ibF9kcml2ZXIpOworfQorbW9kdWxlX2V4aXQoYWRwNTUyMF9ibF9leGl0KTsKKworTU9EVUxFX0FVVEhPUigiTWljaGFlbCBIZW5uZXJpY2ggPGhlbm5lcmljaEBibGFja2Zpbi51Y2xpbnV4Lm9yZz4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiQURQNTUyMCgwMSkgQmFja2xpZ2h0IERyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTphZHA1NTIwLWJhY2tsaWdodCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvYWR4X2JsLmMgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9hZHhfYmwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzNiZGZjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvYWR4X2JsLmMKQEAgLTAsMCArMSwxNzggQEAKKy8qCisgKiBsaW51eC9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9hZHguYworICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBdmlvbmljIERlc2lnbiBHbWJICisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBXcml0dGVuIGJ5IFRoaWVycnkgUmVkaW5nIDx0aGllcnJ5LnJlZGluZ0BhdmlvbmljLWRlc2lnbi5kZT4KKyAqLworCisjaW5jbHVkZSA8bGludXgvYmFja2xpZ2h0Lmg+CisjaW5jbHVkZSA8bGludXgvZmIuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorCisvKiByZWdpc3RlciBkZWZpbml0aW9ucyAqLworI2RlZmluZSBBRFhfQkFDS0xJR0hUX0NPTlRST0wJCTB4MDAKKyNkZWZpbmUgQURYX0JBQ0tMSUdIVF9DT05UUk9MX0VOQUJMRQkoMSA8PCAwKQorI2RlZmluZSBBRFhfQkFDS0xJR0hUX0JSSUdIVE5FU1MJMHgwOAorI2RlZmluZSBBRFhfQkFDS0xJR0hUX1NUQVRVUwkJMHgxMAorI2RlZmluZSBBRFhfQkFDS0xJR0hUX0VSUk9SCQkweDE4CisKK3N0cnVjdCBhZHhibCB7CisJdm9pZCBfX2lvbWVtICpiYXNlOworfTsKKworc3RhdGljIGludCBhZHhfYmFja2xpZ2h0X3VwZGF0ZV9zdGF0dXMoc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJsZGV2KQoreworCXN0cnVjdCBhZHhibCAqYmwgPSBibF9nZXRfZGF0YShibGRldik7CisJdTMyIHZhbHVlOworCisJdmFsdWUgPSBibGRldi0+cHJvcHMuYnJpZ2h0bmVzczsKKwl3cml0ZWwodmFsdWUsIGJsLT5iYXNlICsgQURYX0JBQ0tMSUdIVF9CUklHSFRORVNTKTsKKworCXZhbHVlID0gcmVhZGwoYmwtPmJhc2UgKyBBRFhfQkFDS0xJR0hUX0NPTlRST0wpOworCisJaWYgKGJsZGV2LT5wcm9wcy5zdGF0ZSAmIEJMX0NPUkVfRkJCTEFOSykKKwkJdmFsdWUgJj0gfkFEWF9CQUNLTElHSFRfQ09OVFJPTF9FTkFCTEU7CisJZWxzZQorCQl2YWx1ZSB8PSBBRFhfQkFDS0xJR0hUX0NPTlRST0xfRU5BQkxFOworCisJd3JpdGVsKHZhbHVlLCBibC0+YmFzZSArIEFEWF9CQUNLTElHSFRfQ09OVFJPTCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhZHhfYmFja2xpZ2h0X2dldF9icmlnaHRuZXNzKHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpibGRldikKK3sKKwlzdHJ1Y3QgYWR4YmwgKmJsID0gYmxfZ2V0X2RhdGEoYmxkZXYpOworCXUzMiBicmlnaHRuZXNzOworCisJYnJpZ2h0bmVzcyA9IHJlYWRsKGJsLT5iYXNlICsgQURYX0JBQ0tMSUdIVF9CUklHSFRORVNTKTsKKwlyZXR1cm4gYnJpZ2h0bmVzcyAmIDB4ZmY7Cit9CisKK3N0YXRpYyBpbnQgYWR4X2JhY2tsaWdodF9jaGVja19mYihzdHJ1Y3QgZmJfaW5mbyAqZmIpCit7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYmFja2xpZ2h0X29wcyBhZHhfYmFja2xpZ2h0X29wcyA9IHsKKwkub3B0aW9ucyA9IDAsCisJLnVwZGF0ZV9zdGF0dXMgPSBhZHhfYmFja2xpZ2h0X3VwZGF0ZV9zdGF0dXMsCisJLmdldF9icmlnaHRuZXNzID0gYWR4X2JhY2tsaWdodF9nZXRfYnJpZ2h0bmVzcywKKwkuY2hlY2tfZmIgPSBhZHhfYmFja2xpZ2h0X2NoZWNrX2ZiLAorfTsKKworc3RhdGljIGludCBfX2RldmluaXQgYWR4X2JhY2tsaWdodF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpibGRldjsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwlzdHJ1Y3QgYWR4YmwgKmJsOworCWludCByZXQgPSAwOworCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAoIXJlcykgeworCQlyZXQgPSAtRU5YSU87CisJCWdvdG8gb3V0OworCX0KKworCXJlcyA9IGRldm1fcmVxdWVzdF9tZW1fcmVnaW9uKCZwZGV2LT5kZXYsIHJlcy0+c3RhcnQsCisJCQlyZXNvdXJjZV9zaXplKHJlcyksIHJlcy0+bmFtZSk7CisJaWYgKCFyZXMpIHsKKwkJcmV0ID0gLUVOWElPOworCQlnb3RvIG91dDsKKwl9CisKKwlibCA9IGRldm1fa3phbGxvYygmcGRldi0+ZGV2LCBzaXplb2YoKmJsKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFibCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwlibC0+YmFzZSA9IGRldm1faW9yZW1hcF9ub2NhY2hlKCZwZGV2LT5kZXYsIHJlcy0+c3RhcnQsCisJCQlyZXNvdXJjZV9zaXplKHJlcykpOworCWlmICghYmwtPmJhc2UpIHsKKwkJcmV0ID0gLUVOWElPOworCQlnb3RvIG91dDsKKwl9CisKKwlibGRldiA9IGJhY2tsaWdodF9kZXZpY2VfcmVnaXN0ZXIoZGV2X25hbWUoJnBkZXYtPmRldiksICZwZGV2LT5kZXYsIGJsLAorCQkJJmFkeF9iYWNrbGlnaHRfb3BzKTsKKwlpZiAoIWJsZGV2KSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCWJsZGV2LT5wcm9wcy5tYXhfYnJpZ2h0bmVzcyA9IDB4ZmY7CisJYmxkZXYtPnByb3BzLmJyaWdodG5lc3MgPSAweGZmOworCWJsZGV2LT5wcm9wcy5wb3dlciA9IEZCX0JMQU5LX1VOQkxBTks7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBibGRldik7CisKK291dDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBhZHhfYmFja2xpZ2h0X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpibGRldjsKKwlpbnQgcmV0ID0gMDsKKworCWJsZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJYmxkZXYtPnByb3BzLnBvd2VyID0gRkJfQkxBTktfVU5CTEFOSzsKKwlibGRldi0+cHJvcHMuYnJpZ2h0bmVzcyA9IDB4ZmY7CisJYmFja2xpZ2h0X3VwZGF0ZV9zdGF0dXMoYmxkZXYpOworCWJhY2tsaWdodF9kZXZpY2VfdW5yZWdpc3RlcihibGRldik7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisKKwlyZXR1cm4gcmV0OworfQorCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IGFkeF9iYWNrbGlnaHRfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAorCQlwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYWR4X2JhY2tsaWdodF9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlyZXR1cm4gMDsKK30KKyNlbHNlCisjZGVmaW5lIGFkeF9iYWNrbGlnaHRfc3VzcGVuZCBOVUxMCisjZGVmaW5lIGFkeF9iYWNrbGlnaHRfcmVzdW1lIE5VTEwKKyNlbmRpZgorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBhZHhfYmFja2xpZ2h0X2RyaXZlciA9IHsKKwkucHJvYmUgPSBhZHhfYmFja2xpZ2h0X3Byb2JlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcChhZHhfYmFja2xpZ2h0X3JlbW92ZSksCisJLnN1c3BlbmQgPSBhZHhfYmFja2xpZ2h0X3N1c3BlbmQsCisJLnJlc3VtZSA9IGFkeF9iYWNrbGlnaHRfcmVzdW1lLAorCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gImFkeC1iYWNrbGlnaHQiLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgYWR4X2JhY2tsaWdodF9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmYWR4X2JhY2tsaWdodF9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgYWR4X2JhY2tsaWdodF9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmFkeF9iYWNrbGlnaHRfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoYWR4X2JhY2tsaWdodF9pbml0KTsKK21vZHVsZV9leGl0KGFkeF9iYWNrbGlnaHRfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIlRoaWVycnkgUmVkaW5nIDx0aGllcnJ5LnJlZGluZ0BhdmlvbmljLWRlc2lnbi5kZT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiQXZpb25pYyBEZXNpZ24gWGFudGhvcyBCYWNrbGlnaHQgRHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9iYWNrbGlnaHQuYyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2JhY2tsaWdodC5jCmluZGV4IDE1NzA1N2MuLjY2MTVhYzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2JhY2tsaWdodC5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2JhY2tsaWdodC5jCkBAIC03Myw2ICs3MywyNyBAQAogfQogI2VuZGlmIC8qIENPTkZJR19GQiAqLwogCitzdGF0aWMgdm9pZCBiYWNrbGlnaHRfZ2VuZXJhdGVfZXZlbnQoc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJkLAorCQkJCSAgICAgZW51bSBiYWNrbGlnaHRfdXBkYXRlX3JlYXNvbiByZWFzb24pCit7CisJY2hhciAqZW52cFsyXTsKKworCXN3aXRjaCAocmVhc29uKSB7CisJY2FzZSBCQUNLTElHSFRfVVBEQVRFX1NZU0ZTOgorCQllbnZwWzBdID0gIlNPVVJDRT1zeXNmcyI7CisJCWJyZWFrOworCWNhc2UgQkFDS0xJR0hUX1VQREFURV9IT1RLRVk6CisJCWVudnBbMF0gPSAiU09VUkNFPWhvdGtleSI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWVudnBbMF0gPSAiU09VUkNFPXVua25vd24iOworCQlicmVhazsKKwl9CisJZW52cFsxXSA9IE5VTEw7CisJa29iamVjdF91ZXZlbnRfZW52KCZiZC0+ZGV2LmtvYmosIEtPQkpfQ0hBTkdFLCBlbnZwKTsKKwlzeXNmc19ub3RpZnkoJmJkLT5kZXYua29iaiwgTlVMTCwgImFjdHVhbF9icmlnaHRuZXNzIik7Cit9CisKIHN0YXRpYyBzc2l6ZV90IGJhY2tsaWdodF9zaG93X3Bvd2VyKHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsY2hhciAqYnVmKQogewpAQCAtMTQyLDYgKzE2Myw4IEBACiAJfQogCW11dGV4X3VubG9jaygmYmQtPm9wc19sb2NrKTsKIAorCWJhY2tsaWdodF9nZW5lcmF0ZV9ldmVudChiZCwgQkFDS0xJR0hUX1VQREFURV9TWVNGUyk7CisKIAlyZXR1cm4gcmM7CiB9CiAKQEAgLTIxNCw2ICsyMzcsMjUgQEAKIH07CiAKIC8qKgorICogYmFja2xpZ2h0X2ZvcmNlX3VwZGF0ZSAtIHRlbGwgdGhlIGJhY2tsaWdodCBzdWJzeXN0ZW0gdGhhdCBoYXJkd2FyZSBzdGF0ZQorICogICBoYXMgY2hhbmdlZAorICogQGJkOiB0aGUgYmFja2xpZ2h0IGRldmljZSB0byB1cGRhdGUKKyAqCisgKiBVcGRhdGVzIHRoZSBpbnRlcm5hbCBzdGF0ZSBvZiB0aGUgYmFja2xpZ2h0IGluIHJlc3BvbnNlIHRvIGEgaGFyZHdhcmUgZXZlbnQsCisgKiBhbmQgZ2VuZXJhdGUgYSB1ZXZlbnQgdG8gbm90aWZ5IHVzZXJzcGFjZQorICovCit2b2lkIGJhY2tsaWdodF9mb3JjZV91cGRhdGUoc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJkLAorCQkJICAgIGVudW0gYmFja2xpZ2h0X3VwZGF0ZV9yZWFzb24gcmVhc29uKQoreworCW11dGV4X2xvY2soJmJkLT5vcHNfbG9jayk7CisJaWYgKGJkLT5vcHMgJiYgYmQtPm9wcy0+Z2V0X2JyaWdodG5lc3MpCisJCWJkLT5wcm9wcy5icmlnaHRuZXNzID0gYmQtPm9wcy0+Z2V0X2JyaWdodG5lc3MoYmQpOworCW11dGV4X3VubG9jaygmYmQtPm9wc19sb2NrKTsKKwliYWNrbGlnaHRfZ2VuZXJhdGVfZXZlbnQoYmQsIHJlYXNvbik7Cit9CitFWFBPUlRfU1lNQk9MKGJhY2tsaWdodF9mb3JjZV91cGRhdGUpOworCisvKioKICAqIGJhY2tsaWdodF9kZXZpY2VfcmVnaXN0ZXIgLSBjcmVhdGUgYW5kIHJlZ2lzdGVyIGEgbmV3IG9iamVjdCBvZgogICogICBiYWNrbGlnaHRfZGV2aWNlIGNsYXNzLgogICogQG5hbWU6IHRoZSBuYW1lIG9mIHRoZSBuZXcgb2JqZWN0KG11c3QgYmUgdGhlIHNhbWUgYXMgdGhlIG5hbWUgb2YgdGhlCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9kYTkwM3hfYmwuYyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2RhOTAzeF9ibC5jCmluZGV4IDkzYmI0MzQuLjcwMWExMDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2RhOTAzeF9ibC5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2RhOTAzeF9ibC5jCkBAIC0xNTQsMzQgKzE1NCwzOCBAQAogfQogCiAjaWZkZWYgQ09ORklHX1BNCi1zdGF0aWMgaW50IGRhOTAzeF9iYWNrbGlnaHRfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAotCQkJCSBwbV9tZXNzYWdlX3Qgc3RhdGUpCitzdGF0aWMgaW50IGRhOTAzeF9iYWNrbGlnaHRfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwogCXN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpibCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCXJldHVybiBkYTkwM3hfYmFja2xpZ2h0X3NldChibCwgMCk7CiB9CiAKLXN0YXRpYyBpbnQgZGE5MDN4X2JhY2tsaWdodF9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3N0YXRpYyBpbnQgZGE5MDN4X2JhY2tsaWdodF9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQogeworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKIAlzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmwgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAogCWJhY2tsaWdodF91cGRhdGVfc3RhdHVzKGJsKTsKIAlyZXR1cm4gMDsKIH0KLSNlbHNlCi0jZGVmaW5lIGRhOTAzeF9iYWNrbGlnaHRfc3VzcGVuZAlOVUxMCi0jZGVmaW5lIGRhOTAzeF9iYWNrbGlnaHRfcmVzdW1lCQlOVUxMCisKK3N0YXRpYyBzdHJ1Y3QgZGV2X3BtX29wcyBkYTkwM3hfYmFja2xpZ2h0X3BtX29wcyA9IHsKKwkuc3VzcGVuZAk9IGRhOTAzeF9iYWNrbGlnaHRfc3VzcGVuZCwKKwkucmVzdW1lCQk9IGRhOTAzeF9iYWNrbGlnaHRfcmVzdW1lLAorfTsKICNlbmRpZgogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBkYTkwM3hfYmFja2xpZ2h0X2RyaXZlciA9IHsKIAkuZHJpdmVyCQk9IHsKIAkJLm5hbWUJPSAiZGE5MDN4LWJhY2tsaWdodCIsCiAJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorI2lmZGVmIENPTkZJR19QTQorCQkucG0JPSAmZGE5MDN4X2JhY2tsaWdodF9wbV9vcHMsCisjZW5kaWYKIAl9LAogCS5wcm9iZQkJPSBkYTkwM3hfYmFja2xpZ2h0X3Byb2JlLAogCS5yZW1vdmUJCT0gZGE5MDN4X2JhY2tsaWdodF9yZW1vdmUsCi0JLnN1c3BlbmQJPSBkYTkwM3hfYmFja2xpZ2h0X3N1c3BlbmQsCi0JLnJlc3VtZQkJPSBkYTkwM3hfYmFja2xpZ2h0X3Jlc3VtZSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IGRhOTAzeF9iYWNrbGlnaHRfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvaHA2ODBfYmwuYyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2hwNjgwX2JsLmMKaW5kZXggNWJlNTVhMi4uN2ZiNGVlZiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvaHA2ODBfYmwuYworKysgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9ocDY4MF9ibC5jCkBAIC0xMDMsNyArMTAzLDcgQEAKIAkudXBkYXRlX3N0YXR1cyAgPSBocDY4MGJsX3NldF9pbnRlbnNpdHksCiB9OwogCi1zdGF0aWMgaW50IF9faW5pdCBocDY4MGJsX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBocDY4MGJsX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJkOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9sbXMyODNnZjA1LmMgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9sbXMyODNnZjA1LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQ3YjU0MgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2xtczI4M2dmMDUuYwpAQCAtMCwwICsxLDI0MiBAQAorLyoKKyAqIGxtczI4M2dmMDUuYyAtLSBzdXBwb3J0IGZvciBTYW1zdW5nIExNUzI4M0dGMDUgTENECisgKgorICogQ29weXJpZ2h0IChjKSAyMDA5IE1hcmVrIFZhc3V0IDxtYXJlay52YXN1dEBnbWFpbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvbGNkLmg+CisKKyNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CisjaW5jbHVkZSA8bGludXgvc3BpL2xtczI4M2dmMDUuaD4KKworc3RydWN0IGxtczI4M2dmMDVfc3RhdGUgeworCXN0cnVjdCBzcGlfZGV2aWNlCSpzcGk7CisJc3RydWN0IGxjZF9kZXZpY2UJKmxkOworfTsKKworc3RydWN0IGxtczI4M2dmMDVfc2VxIHsKKwl1bnNpZ25lZCBjaGFyCQlyZWc7CisJdW5zaWduZWQgc2hvcnQJCXZhbHVlOworCXVuc2lnbmVkIGNoYXIJCWRlbGF5OworfTsKKworLyogTWFnaWMgc2VxdWVuY2VzIHN1cHBsaWVkIGJ5IG1hbnVmYWN0dXJlciwgZm9yIGRldGFpbHMgcmVmZXIgdG8gZGF0YXNoZWV0ICovCitzdGF0aWMgc3RydWN0IGxtczI4M2dmMDVfc2VxIGRpc3BfaW5pdHNlcVtdID0geworCS8qIFJFRywgVkFMVUUsIERFTEFZICovCisJeyAweDA3LCAweDAwMDAsIDAgfSwKKwl7IDB4MTMsIDB4MDAwMCwgMTAgfSwKKworCXsgMHgxMSwgMHgzMDA0LCAwIH0sCisJeyAweDE0LCAweDIwMEYsIDAgfSwKKwl7IDB4MTAsIDB4MWEyMCwgMCB9LAorCXsgMHgxMywgMHgwMDQwLCA1MCB9LAorCisJeyAweDEzLCAweDAwNjAsIDAgfSwKKwl7IDB4MTMsIDB4MDA3MCwgMjAwIH0sCisKKwl7IDB4MDEsIDB4MDEyNywgMCB9LAorCXsgMHgwMiwJMHgwNzAwLCAwIH0sCisJeyAweDAzLCAweDEwMzAsIDAgfSwKKwl7IDB4MDgsIDB4MDIwOCwgMCB9LAorCXsgMHgwQiwgMHgwNjIwLCAwIH0sCisJeyAweDBDLCAweDAxMTAsIDAgfSwKKwl7IDB4MzAsIDB4MDEyMCwgMCB9LAorCXsgMHgzMSwgMHgwMTI3LCAwIH0sCisJeyAweDMyLCAweDAwMDAsIDAgfSwKKwl7IDB4MzMsIDB4MDUwMywgMCB9LAorCXsgMHgzNCwgMHgwNzI3LCAwIH0sCisJeyAweDM1LCAweDAxMjQsIDAgfSwKKwl7IDB4MzYsIDB4MDcwNiwgMCB9LAorCXsgMHgzNywgMHgwNzAxLCAwIH0sCisJeyAweDM4LCAweDBGMDAsIDAgfSwKKwl7IDB4MzksIDB4MEYwMCwgMCB9LAorCXsgMHg0MCwgMHgwMDAwLCAwIH0sCisJeyAweDQxLCAweDAwMDAsIDAgfSwKKwl7IDB4NDIsIDB4MDEzZiwgMCB9LAorCXsgMHg0MywgMHgwMDAwLCAwIH0sCisJeyAweDQ0LCAweDAxM2YsIDAgfSwKKwl7IDB4NDUsIDB4MDAwMCwgMCB9LAorCXsgMHg0NiwgMHhlZjAwLCAwIH0sCisJeyAweDQ3LCAweDAxM2YsIDAgfSwKKwl7IDB4NDgsIDB4MDAwMCwgMCB9LAorCXsgMHgwNywgMHgwMDE1LCAzMCB9LAorCisJeyAweDA3LCAweDAwMTcsIDAgfSwKKworCXsgMHgyMCwgMHgwMDAwLCAwIH0sCisJeyAweDIxLCAweDAwMDAsIDAgfSwKKwl7IDB4MjIsIDB4MDAwMCwgMCB9Cit9OworCitzdGF0aWMgc3RydWN0IGxtczI4M2dmMDVfc2VxIGRpc3BfcGR3bnNlcVtdID0geworCXsgMHgwNywgMHgwMDE2LCAzMCB9LAorCisJeyAweDA3LCAweDAwMDQsIDAgfSwKKwl7IDB4MTAsIDB4MDIyMCwgMjAgfSwKKworCXsgMHgxMywgMHgwMDYwLCA1MCB9LAorCisJeyAweDEzLCAweDAwNDAsIDUwIH0sCisKKwl7IDB4MTMsIDB4MDAwMCwgMCB9LAorCXsgMHgxMCwgMHgwMDAwLCAwIH0KK307CisKKworc3RhdGljIHZvaWQgbG1zMjgzZ2YwNV9yZXNldCh1bnNpZ25lZCBsb25nIGdwaW8sIGJvb2wgaW52ZXJ0ZWQpCit7CisJZ3Bpb19zZXRfdmFsdWUoZ3BpbywgIWludmVydGVkKTsKKwltZGVsYXkoMTAwKTsKKwlncGlvX3NldF92YWx1ZShncGlvLCBpbnZlcnRlZCk7CisJbWRlbGF5KDIwKTsKKwlncGlvX3NldF92YWx1ZShncGlvLCAhaW52ZXJ0ZWQpOworCW1kZWxheSgyMCk7Cit9CisKK3N0YXRpYyB2b2lkIGxtczI4M2dmMDVfdG9nZ2xlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGksCisJCQlzdHJ1Y3QgbG1zMjgzZ2YwNV9zZXEgKnNlcSwgaW50IHN6KQoreworCWNoYXIgYnVmWzNdOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IHN6OyBpKyspIHsKKwkJYnVmWzBdID0gMHg3NDsKKwkJYnVmWzFdID0gMHgwMDsKKwkJYnVmWzJdID0gc2VxW2ldLnJlZzsKKwkJc3BpX3dyaXRlKHNwaSwgYnVmLCAzKTsKKworCQlidWZbMF0gPSAweDc2OworCQlidWZbMV0gPSBzZXFbaV0udmFsdWUgPj4gODsKKwkJYnVmWzJdID0gc2VxW2ldLnZhbHVlICYgMHhmZjsKKwkJc3BpX3dyaXRlKHNwaSwgYnVmLCAzKTsKKworCQltZGVsYXkoc2VxW2ldLmRlbGF5KTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgbG1zMjgzZ2YwNV9wb3dlcl9zZXQoc3RydWN0IGxjZF9kZXZpY2UgKmxkLCBpbnQgcG93ZXIpCit7CisJc3RydWN0IGxtczI4M2dmMDVfc3RhdGUgKnN0ID0gbGNkX2dldF9kYXRhKGxkKTsKKwlzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpID0gc3QtPnNwaTsKKwlzdHJ1Y3QgbG1zMjgzZ2YwNV9wZGF0YSAqcGRhdGEgPSBzcGktPmRldi5wbGF0Zm9ybV9kYXRhOworCisJaWYgKHBvd2VyKSB7CisJCWlmIChwZGF0YSkKKwkJCWxtczI4M2dmMDVfcmVzZXQocGRhdGEtPnJlc2V0X2dwaW8sCisJCQkJCXBkYXRhLT5yZXNldF9pbnZlcnRlZCk7CisJCWxtczI4M2dmMDVfdG9nZ2xlKHNwaSwgZGlzcF9pbml0c2VxLCBBUlJBWV9TSVpFKGRpc3BfaW5pdHNlcSkpOworCX0gZWxzZSB7CisJCWxtczI4M2dmMDVfdG9nZ2xlKHNwaSwgZGlzcF9wZHduc2VxLCBBUlJBWV9TSVpFKGRpc3BfcGR3bnNlcSkpOworCQlpZiAocGRhdGEpCisJCQlncGlvX3NldF92YWx1ZShwZGF0YS0+cmVzZXRfZ3BpbywKKwkJCQkJcGRhdGEtPnJlc2V0X2ludmVydGVkKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBsY2Rfb3BzIGxtc19vcHMgPSB7CisJLnNldF9wb3dlcgk9IGxtczI4M2dmMDVfcG93ZXJfc2V0LAorCS5nZXRfcG93ZXIJPSBOVUxMLAorfTsKKworc3RhdGljIGludCBfX2RldmluaXQgbG1zMjgzZ2YwNV9wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQoreworCXN0cnVjdCBsbXMyODNnZjA1X3N0YXRlICpzdDsKKwlzdHJ1Y3QgbG1zMjgzZ2YwNV9wZGF0YSAqcGRhdGEgPSBzcGktPmRldi5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCBsY2RfZGV2aWNlICpsZDsKKwlpbnQgcmV0ID0gMDsKKworCWlmIChwZGF0YSAhPSBOVUxMKSB7CisJCXJldCA9IGdwaW9fcmVxdWVzdChwZGF0YS0+cmVzZXRfZ3BpbywgIkxNUzI4NUdGMDUgUkVTRVQiKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisKKwkJcmV0ID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KHBkYXRhLT5yZXNldF9ncGlvLAorCQkJCQkJIXBkYXRhLT5yZXNldF9pbnZlcnRlZCk7CisJCWlmIChyZXQpCisJCQlnb3RvIGVycjsKKwl9CisKKwlzdCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBsbXMyODNnZjA1X3N0YXRlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHN0ID09IE5VTEwpIHsKKwkJZGV2X2Vycigmc3BpLT5kZXYsICJObyBtZW1vcnkgZm9yIGRldmljZSBzdGF0ZVxuIik7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyOworCX0KKworCWxkID0gbGNkX2RldmljZV9yZWdpc3RlcigibG1zMjgzZ2YwNSIsICZzcGktPmRldiwgc3QsICZsbXNfb3BzKTsKKwlpZiAoSVNfRVJSKGxkKSkgeworCQlyZXQgPSBQVFJfRVJSKGxkKTsKKwkJZ290byBlcnIyOworCX0KKworCXN0LT5zcGkgPSBzcGk7CisJc3QtPmxkID0gbGQ7CisKKwlkZXZfc2V0X2RydmRhdGEoJnNwaS0+ZGV2LCBzdCk7CisKKwkvKiBraWNrIGluIHRoZSBMQ0QgKi8KKwlpZiAocGRhdGEpCisJCWxtczI4M2dmMDVfcmVzZXQocGRhdGEtPnJlc2V0X2dwaW8sIHBkYXRhLT5yZXNldF9pbnZlcnRlZCk7CisJbG1zMjgzZ2YwNV90b2dnbGUoc3BpLCBkaXNwX2luaXRzZXEsIEFSUkFZX1NJWkUoZGlzcF9pbml0c2VxKSk7CisKKwlyZXR1cm4gMDsKKworZXJyMjoKKwlrZnJlZShzdCk7CitlcnI6CisJaWYgKHBkYXRhICE9IE5VTEwpCisJCWdwaW9fZnJlZShwZGF0YS0+cmVzZXRfZ3Bpbyk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBsbXMyODNnZjA1X3JlbW92ZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQoreworCXN0cnVjdCBsbXMyODNnZjA1X3N0YXRlICpzdCA9IGRldl9nZXRfZHJ2ZGF0YSgmc3BpLT5kZXYpOworCXN0cnVjdCBsbXMyODNnZjA1X3BkYXRhICpwZGF0YSA9IHN0LT5zcGktPmRldi5wbGF0Zm9ybV9kYXRhOworCisJbGNkX2RldmljZV91bnJlZ2lzdGVyKHN0LT5sZCk7CisKKwlpZiAocGRhdGEgIT0gTlVMTCkKKwkJZ3Bpb19mcmVlKHBkYXRhLT5yZXNldF9ncGlvKTsKKworCWtmcmVlKHN0KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHNwaV9kcml2ZXIgbG1zMjgzZ2YwNV9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUJPSAibG1zMjgzZ2YwNSIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCisJLnByb2JlCQk9IGxtczI4M2dmMDVfcHJvYmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChsbXMyODNnZjA1X3JlbW92ZSksCit9OworCitzdGF0aWMgX19pbml0IGludCBsbXMyODNnZjA1X2luaXQodm9pZCkKK3sKKwlyZXR1cm4gc3BpX3JlZ2lzdGVyX2RyaXZlcigmbG1zMjgzZ2YwNV9kcml2ZXIpOworfQorCitzdGF0aWMgX19leGl0IHZvaWQgbG1zMjgzZ2YwNV9leGl0KHZvaWQpCit7CisJc3BpX3VucmVnaXN0ZXJfZHJpdmVyKCZsbXMyODNnZjA1X2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KGxtczI4M2dmMDVfaW5pdCk7Cittb2R1bGVfZXhpdChsbXMyODNnZjA1X2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJNYXJlayBWYXN1dCA8bWFyZWsudmFzdXRAZ21haWwuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJMQ0QyODNHRjA1IExDRCIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvbWJwX252aWRpYV9ibC5jIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvbWJwX252aWRpYV9ibC5jCmluZGV4IDNiYjRjMGEuLjllZGI4ZDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L21icF9udmlkaWFfYmwuYworKysgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9tYnBfbnZpZGlhX2JsLmMKQEAgLTE2Niw2ICsxNjYsMTUgQEAKIAl9LAogCXsKIAkJLmNhbGxiYWNrCT0gbWJwX2RtaV9tYXRjaCwKKwkJLmlkZW50CQk9ICJNYWNCb29rQWlyIDEsMSIsCisJCS5tYXRjaGVzCT0geworCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiQXBwbGUgSW5jLiIpLAorCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJNYWNCb29rQWlyMSwxIiksCisJCX0sCisJCS5kcml2ZXJfZGF0YQk9ICh2b2lkICopJmludGVsX2NoaXBzZXRfZGF0YSwKKwl9LAorCXsKKwkJLmNhbGxiYWNrCT0gbWJwX2RtaV9tYXRjaCwKIAkJLmlkZW50CQk9ICJNYWNCb29rIDUsMSIsCiAJCS5tYXRjaGVzCT0gewogCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiQXBwbGUgSW5jLiIpLApAQCAtMTc1LDYgKzE4NCwxNSBAQAogCX0sCiAJewogCQkuY2FsbGJhY2sJPSBtYnBfZG1pX21hdGNoLAorCQkuaWRlbnQJCT0gIk1hY0Jvb2sgNSwyIiwKKwkJLm1hdGNoZXMJPSB7CisJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJBcHBsZSBJbmMuIiksCisJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIk1hY0Jvb2s1LDIiKSwKKwkJfSwKKwkJLmRyaXZlcl9kYXRhCT0gKHZvaWQgKikmbnZpZGlhX2NoaXBzZXRfZGF0YSwKKwl9LAorCXsKKwkJLmNhbGxiYWNrCT0gbWJwX2RtaV9tYXRjaCwKIAkJLmlkZW50CQk9ICJNYWNCb29rQWlyIDIsMSIsCiAJCS5tYXRjaGVzCT0gewogCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiQXBwbGUgSW5jLiIpLApAQCAtMTkxLDYgKzIwOSwyNCBAQAogCQl9LAogCQkuZHJpdmVyX2RhdGEJPSAodm9pZCAqKSZudmlkaWFfY2hpcHNldF9kYXRhLAogCX0sCisJeworCQkuY2FsbGJhY2sJPSBtYnBfZG1pX21hdGNoLAorCQkuaWRlbnQJCT0gIk1hY0Jvb2tQcm8gNSwyIiwKKwkJLm1hdGNoZXMJPSB7CisJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJBcHBsZSBJbmMuIiksCisJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIk1hY0Jvb2tQcm81LDIiKSwKKwkJfSwKKwkJLmRyaXZlcl9kYXRhCT0gKHZvaWQgKikmbnZpZGlhX2NoaXBzZXRfZGF0YSwKKwl9LAorCXsKKwkJLmNhbGxiYWNrCT0gbWJwX2RtaV9tYXRjaCwKKwkJLmlkZW50CQk9ICJNYWNCb29rUHJvIDUsNSIsCisJCS5tYXRjaGVzCT0geworCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiQXBwbGUgSW5jLiIpLAorCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJNYWNCb29rUHJvNSw1IiksCisJCX0sCisJCS5kcml2ZXJfZGF0YQk9ICh2b2lkICopJm52aWRpYV9jaGlwc2V0X2RhdGEsCisJfSwKIAl7IH0KIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L3dtODMxeF9ibC5jIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvd204MzF4X2JsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDY3YmRiNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L3dtODMxeF9ibC5jCkBAIC0wLDAgKzEsMjUwIEBACisvKgorICogQmFja2xpZ2h0IGRyaXZlciBmb3IgV29sZnNvbiBNaWNyb2VsZWN0cm9uaWNzIFdNODMxeCBQTUlDcworICoKKyAqIENvcHlyaWdodCAyMDA5IFdvbGZzb24gTWljcm9lbGVjdG9uaWNzIHBsYworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9mYi5oPgorI2luY2x1ZGUgPGxpbnV4L2JhY2tsaWdodC5oPgorCisjaW5jbHVkZSA8bGludXgvbWZkL3dtODMxeC9jb3JlLmg+CisjaW5jbHVkZSA8bGludXgvbWZkL3dtODMxeC9wZGF0YS5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC93bTgzMXgvcmVndWxhdG9yLmg+CisKK3N0cnVjdCB3bTgzMXhfYmFja2xpZ2h0X2RhdGEgeworCXN0cnVjdCB3bTgzMXggKndtODMxeDsKKwlpbnQgaXNpbmtfcmVnOworCWludCBjdXJyZW50X2JyaWdodG5lc3M7Cit9OworCitzdGF0aWMgaW50IHdtODMxeF9iYWNrbGlnaHRfc2V0KHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpibCwgaW50IGJyaWdodG5lc3MpCit7CisJc3RydWN0IHdtODMxeF9iYWNrbGlnaHRfZGF0YSAqZGF0YSA9IGJsX2dldF9kYXRhKGJsKTsKKwlzdHJ1Y3Qgd204MzF4ICp3bTgzMXggPSBkYXRhLT53bTgzMXg7CisJaW50IHBvd2VyX3VwID0gIWRhdGEtPmN1cnJlbnRfYnJpZ2h0bmVzcyAmJiBicmlnaHRuZXNzOworCWludCBwb3dlcl9kb3duID0gZGF0YS0+Y3VycmVudF9icmlnaHRuZXNzICYmICFicmlnaHRuZXNzOworCWludCByZXQ7CisKKwlpZiAocG93ZXJfdXApIHsKKwkJLyogRW5hYmxlIHRoZSBJU0lOSyAqLworCQlyZXQgPSB3bTgzMXhfc2V0X2JpdHMod204MzF4LCBkYXRhLT5pc2lua19yZWcsCisJCQkJICAgICAgV004MzFYX0NTMV9FTkEsIFdNODMxWF9DUzFfRU5BKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIGVycjsKKworCQkvKiBFbmFibGUgdGhlIERDLURDICovCisJCXJldCA9IHdtODMxeF9zZXRfYml0cyh3bTgzMXgsIFdNODMxWF9EQ0RDX0VOQUJMRSwKKwkJCQkgICAgICBXTTgzMVhfREM0X0VOQSwgV004MzFYX0RDNF9FTkEpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gZXJyOworCX0KKworCWlmIChwb3dlcl9kb3duKSB7CisJCS8qIERDREMgZmlyc3QgKi8KKwkJcmV0ID0gd204MzF4X3NldF9iaXRzKHdtODMxeCwgV004MzFYX0RDRENfRU5BQkxFLAorCQkJCSAgICAgIFdNODMxWF9EQzRfRU5BLCAwKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIGVycjsKKworCQkvKiBJU0lOSyAqLworCQlyZXQgPSB3bTgzMXhfc2V0X2JpdHMod204MzF4LCBkYXRhLT5pc2lua19yZWcsCisJCQkJICAgICAgV004MzFYX0NTMV9EUklWRSB8IFdNODMxWF9DUzFfRU5BLCAwKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIGVycjsKKwl9CisKKwkvKiBTZXQgdGhlIG5ldyBicmlnaHRuZXNzICovCisJcmV0ID0gd204MzF4X3NldF9iaXRzKHdtODMxeCwgZGF0YS0+aXNpbmtfcmVnLAorCQkJICAgICAgV004MzFYX0NTMV9JU0VMX01BU0ssIGJyaWdodG5lc3MpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycjsKKworCWlmIChwb3dlcl91cCkgeworCQkvKiBEcml2ZSBjdXJyZW50IHRocm91Z2ggdGhlIElTSU5LICovCisJCXJldCA9IHdtODMxeF9zZXRfYml0cyh3bTgzMXgsIGRhdGEtPmlzaW5rX3JlZywKKwkJCQkgICAgICBXTTgzMVhfQ1MxX0RSSVZFLCBXTTgzMVhfQ1MxX0RSSVZFKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCX0KKworCWRhdGEtPmN1cnJlbnRfYnJpZ2h0bmVzcyA9IGJyaWdodG5lc3M7CisKKwlyZXR1cm4gMDsKKworZXJyOgorCS8qIElmIHdlIHdlcmUgaW4gdGhlIG1pZGRsZSBvZiBhIHBvd2VyIHRyYW5zaXRpb24gYWx3YXlzIHNodXQgZG93bgorCSAqIGZvciBzYWZldHkuCisJICovCisJaWYgKHBvd2VyX3VwIHx8IHBvd2VyX2Rvd24pIHsKKwkJd204MzF4X3NldF9iaXRzKHdtODMxeCwgV004MzFYX0RDRENfRU5BQkxFLCBXTTgzMVhfREM0X0VOQSwgMCk7CisJCXdtODMxeF9zZXRfYml0cyh3bTgzMXgsIGRhdGEtPmlzaW5rX3JlZywgV004MzFYX0NTMV9FTkEsIDApOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgd204MzF4X2JhY2tsaWdodF91cGRhdGVfc3RhdHVzKHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpibCkKK3sKKwlpbnQgYnJpZ2h0bmVzcyA9IGJsLT5wcm9wcy5icmlnaHRuZXNzOworCisJaWYgKGJsLT5wcm9wcy5wb3dlciAhPSBGQl9CTEFOS19VTkJMQU5LKQorCQlicmlnaHRuZXNzID0gMDsKKworCWlmIChibC0+cHJvcHMuZmJfYmxhbmsgIT0gRkJfQkxBTktfVU5CTEFOSykKKwkJYnJpZ2h0bmVzcyA9IDA7CisKKwlpZiAoYmwtPnByb3BzLnN0YXRlICYgQkxfQ09SRV9TVVNQRU5ERUQpCisJCWJyaWdodG5lc3MgPSAwOworCisJcmV0dXJuIHdtODMxeF9iYWNrbGlnaHRfc2V0KGJsLCBicmlnaHRuZXNzKTsKK30KKworc3RhdGljIGludCB3bTgzMXhfYmFja2xpZ2h0X2dldF9icmlnaHRuZXNzKHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpibCkKK3sKKwlzdHJ1Y3Qgd204MzF4X2JhY2tsaWdodF9kYXRhICpkYXRhID0gYmxfZ2V0X2RhdGEoYmwpOworCXJldHVybiBkYXRhLT5jdXJyZW50X2JyaWdodG5lc3M7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYmFja2xpZ2h0X29wcyB3bTgzMXhfYmFja2xpZ2h0X29wcyA9IHsKKwkub3B0aW9ucyA9IEJMX0NPUkVfU1VTUEVORFJFU1VNRSwKKwkudXBkYXRlX3N0YXR1cwk9IHdtODMxeF9iYWNrbGlnaHRfdXBkYXRlX3N0YXR1cywKKwkuZ2V0X2JyaWdodG5lc3MJPSB3bTgzMXhfYmFja2xpZ2h0X2dldF9icmlnaHRuZXNzLAorfTsKKworc3RhdGljIGludCB3bTgzMXhfYmFja2xpZ2h0X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHdtODMxeCAqd204MzF4ID0gZGV2X2dldF9kcnZkYXRhKHBkZXYtPmRldi5wYXJlbnQpOworCXN0cnVjdCB3bTgzMXhfcGRhdGEgKndtODMxeF9wZGF0YTsKKwlzdHJ1Y3Qgd204MzF4X2JhY2tsaWdodF9wZGF0YSAqcGRhdGE7CisJc3RydWN0IHdtODMxeF9iYWNrbGlnaHRfZGF0YSAqZGF0YTsKKwlzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmw7CisJaW50IHJldCwgaSwgbWF4X2lzZWwsIGlzaW5rX3JlZywgZGNkY19jZmc7CisKKwkvKiBXZSBuZWVkIHBsYXRmb3JtIGRhdGEgKi8KKwlpZiAocGRldi0+ZGV2LnBhcmVudC0+cGxhdGZvcm1fZGF0YSkgeworCQl3bTgzMXhfcGRhdGEgPSBwZGV2LT5kZXYucGFyZW50LT5wbGF0Zm9ybV9kYXRhOworCQlwZGF0YSA9IHdtODMxeF9wZGF0YS0+YmFja2xpZ2h0OworCX0gZWxzZSB7CisJCXBkYXRhID0gTlVMTDsKKwl9CisKKwlpZiAoIXBkYXRhKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIk5vIHBsYXRmb3JtIGRhdGEgc3VwcGxpZWRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBGaWd1cmUgb3V0IHRoZSBtYXhpbXVtIGN1cnJlbnQgd2UgY2FuIHVzZSAqLworCWZvciAoaSA9IDA7IGkgPCBXTTgzMVhfSVNJTktfTUFYX0lTRUw7IGkrKykgeworCQlpZiAod204MzF4X2lzaW5rdl92YWx1ZXNbaV0gPiBwZGF0YS0+bWF4X3VBKQorCQkJYnJlYWs7CisJfQorCisJaWYgKGkgPT0gMCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJJbnZhbGlkIG1heF91QTogJWR1QVxuIiwgcGRhdGEtPm1heF91QSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwltYXhfaXNlbCA9IGkgLSAxOworCisJaWYgKHBkYXRhLT5tYXhfdUEgIT0gd204MzF4X2lzaW5rdl92YWx1ZXNbbWF4X2lzZWxdKQorCQlkZXZfd2FybigmcGRldi0+ZGV2LAorCQkJICJNYXhpbXVtIGN1cnJlbnQgaXMgJWR1QSBub3QgJWR1QSBhcyByZXF1ZXN0ZWRcbiIsCisJCQkgd204MzF4X2lzaW5rdl92YWx1ZXNbbWF4X2lzZWxdLCBwZGF0YS0+bWF4X3VBKTsKKworCXN3aXRjaCAocGRhdGEtPmlzaW5rKSB7CisJY2FzZSAxOgorCQlpc2lua19yZWcgPSBXTTgzMVhfQ1VSUkVOVF9TSU5LXzE7CisJCWRjZGNfY2ZnID0gMDsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlpc2lua19yZWcgPSBXTTgzMVhfQ1VSUkVOVF9TSU5LXzI7CisJCWRjZGNfY2ZnID0gV004MzFYX0RDNF9GQlNSQzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiSW52YWxpZCBJU0lOSyAlZFxuIiwgcGRhdGEtPmlzaW5rKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogQ29uZmlndXJlIHRoZSBJU0lOSyB0byB1c2UgZm9yIGZlZWRiYWNrICovCisJcmV0ID0gd204MzF4X3JlZ191bmxvY2sod204MzF4KTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IHdtODMxeF9zZXRfYml0cyh3bTgzMXgsIFdNODMxWF9EQzRfQ09OVFJPTCwgV004MzFYX0RDNF9GQlNSQywKKwkJCSAgICAgIGRjZGNfY2ZnKTsKKworCXdtODMxeF9yZWdfbG9jayh3bTgzMXgpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKCpkYXRhKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGRhdGEgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlkYXRhLT53bTgzMXggPSB3bTgzMXg7CisJZGF0YS0+Y3VycmVudF9icmlnaHRuZXNzID0gMDsKKwlkYXRhLT5pc2lua19yZWcgPSBpc2lua19yZWc7CisKKwlibCA9IGJhY2tsaWdodF9kZXZpY2VfcmVnaXN0ZXIoIndtODMxeCIsICZwZGV2LT5kZXYsCisJCQlkYXRhLCAmd204MzF4X2JhY2tsaWdodF9vcHMpOworCWlmIChJU19FUlIoYmwpKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byByZWdpc3RlciBiYWNrbGlnaHRcbiIpOworCQlrZnJlZShkYXRhKTsKKwkJcmV0dXJuIFBUUl9FUlIoYmwpOworCX0KKworCWJsLT5wcm9wcy5tYXhfYnJpZ2h0bmVzcyA9IG1heF9pc2VsOworCWJsLT5wcm9wcy5icmlnaHRuZXNzID0gbWF4X2lzZWw7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBibCk7CisKKwkvKiBEaXNhYmxlIHRoZSBEQ0RDIGlmIGl0IHdhcyBzdGFydGVkIHNvIHdlIGNhbiBib290c3RyYXAgKi8KKwl3bTgzMXhfc2V0X2JpdHMod204MzF4LCBXTTgzMVhfRENEQ19FTkFCTEUsIFdNODMxWF9EQzRfRU5BLCAwKTsKKworCisJYmFja2xpZ2h0X3VwZGF0ZV9zdGF0dXMoYmwpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd204MzF4X2JhY2tsaWdodF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmwgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3Qgd204MzF4X2JhY2tsaWdodF9kYXRhICpkYXRhID0gYmxfZ2V0X2RhdGEoYmwpOworCisJYmFja2xpZ2h0X2RldmljZV91bnJlZ2lzdGVyKGJsKTsKKwlrZnJlZShkYXRhKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgd204MzF4X2JhY2tsaWdodF9kcml2ZXIgPSB7CisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gIndtODMxeC1iYWNrbGlnaHQiLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwl9LAorCS5wcm9iZQkJPSB3bTgzMXhfYmFja2xpZ2h0X3Byb2JlLAorCS5yZW1vdmUJCT0gd204MzF4X2JhY2tsaWdodF9yZW1vdmUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCB3bTgzMXhfYmFja2xpZ2h0X2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZ3bTgzMXhfYmFja2xpZ2h0X2RyaXZlcik7Cit9Cittb2R1bGVfaW5pdCh3bTgzMXhfYmFja2xpZ2h0X2luaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgd204MzF4X2JhY2tsaWdodF9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJndtODMxeF9iYWNrbGlnaHRfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KHdtODMxeF9iYWNrbGlnaHRfZXhpdCk7CisKK01PRFVMRV9ERVNDUklQVElPTigiQmFja2xpZ2h0IERyaXZlciBmb3IgV004MzF4IFBNSUNzIik7CitNT0RVTEVfQVVUSE9SKCJNYXJrIEJyb3duIDxicm9vbmllQG9wZW5zb3VyY2Uud29sZnNvbm1pY3JvLmNvbSIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTp3bTgzMXgtYmFja2xpZ2h0Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2RhOHh4LWZiLmMgYi9kcml2ZXJzL3ZpZGVvL2RhOHh4LWZiLmMKaW5kZXggNDJlMTAwNS4uZDA2NTg5NCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9kYTh4eC1mYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vZGE4eHgtZmIuYwpAQCAtMjYsNyArMjYsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KLSNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDx2aWRlby9kYTh4eC1mYi5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9mYl9kZWZpby5jIGIvZHJpdmVycy92aWRlby9mYl9kZWZpby5jCmluZGV4IDBhN2E2NjcuLmMyN2FiMWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vZmJfZGVmaW8uYworKysgYi9kcml2ZXJzL3ZpZGVvL2ZiX2RlZmlvLmMKQEAgLTEyNSw3ICsxMjUsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGZiX2RlZmVycmVkX2lvX3ZtX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgZmJfZGVmZXJyZWRfaW9fdm1fb3BzID0gewogCS5mYXVsdAkJPSBmYl9kZWZlcnJlZF9pb19mYXVsdCwKIAkucGFnZV9ta3dyaXRlCT0gZmJfZGVmZXJyZWRfaW9fbWt3cml0ZSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2ZibWVtLmMgYi9kcml2ZXJzL3ZpZGVvL2ZibWVtLmMKaW5kZXggYTFmMmU3Yy4uOTliYmQyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9mYm1lbS5jCisrKyBiL2RyaXZlcnMvdmlkZW8vZmJtZW0uYwpAQCAtMTgwMCw3ICsxODAwLDcgQEAKICAJCWdsb2JhbCA9IDE7CiAgCX0KIAotIAlpZiAoIWdsb2JhbCAmJiAhc3Ryc3RyKG9wdGlvbnMsICJmYjoiKSkgeworIAlpZiAoIWdsb2JhbCAmJiAhc3RyY2hyKG9wdGlvbnMsICc6JykpIHsKICAJCWZiX21vZGVfb3B0aW9uID0gb3B0aW9uczsKICAJCWdsb2JhbCA9IDE7CiAgCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vbXNtL21kZGkuYyBiL2RyaXZlcnMvdmlkZW8vbXNtL21kZGkuYwppbmRleCBmMmRlNWExLi41YzVhMWFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL21zbS9tZGRpLmMKKysrIGIvZHJpdmVycy92aWRlby9tc20vbWRkaS5jCkBAIC0yNyw4ICsyNyw2IEBACiAjaW5jbHVkZSA8bWFjaC9tc21faW9tYXAuaD4KICNpbmNsdWRlIDxtYWNoL2lycXMuaD4KICNpbmNsdWRlIDxtYWNoL2JvYXJkLmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLQogI2luY2x1ZGUgPG1hY2gvbXNtX2ZiLmg+CiAjaW5jbHVkZSAibWRkaV9ody5oIgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL29tYXAvYmxpenphcmQuYyBiL2RyaXZlcnMvdmlkZW8vb21hcC9ibGl6emFyZC5jCmluZGV4IGQ1ZTU5NTUuLjcwZGFkZjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vb21hcC9ibGl6emFyZC5jCisrKyBiL2RyaXZlcnMvdmlkZW8vb21hcC9ibGl6emFyZC5jCkBAIC05Myw3ICs5Myw3IEBACiB9OwogCiAvKiBUaGVzZSBuZWVkIHRvIGJlIHNhdmVkIC8gcmVzdG9yZWQgc2VwYXJhdGVseSBmcm9tIHRoZSByZXN0LiAqLwotc3RhdGljIHN0cnVjdCBibGl6emFyZF9yZWdfbGlzdCBibGl6emFyZF9wbGxfcmVnc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBibGl6emFyZF9yZWdfbGlzdCBibGl6emFyZF9wbGxfcmVnc1tdID0gewogCXsKIAkJLnN0YXJ0CT0gMHgwNCwJCS8qIERvbid0IHNhdmUgUExMIGN0cmwgKDB4MEMpICovCiAJCS5lbmQJPSAweDBhLApAQCAtMTA0LDcgKzEwNCw3IEBACiAJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgYmxpenphcmRfcmVnX2xpc3QgYmxpenphcmRfZ2VuX3JlZ3NbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYmxpenphcmRfcmVnX2xpc3QgYmxpenphcmRfZ2VuX3JlZ3NbXSA9IHsKIAl7CiAJCS5zdGFydAk9IDB4MTgsCQkvKiBTRFJBTSBjb250cm9sICovCiAJCS5lbmQJPSAweDIwLApAQCAtMTkxLDcgKzE5MSw3IEBACiAKIAlzdHJ1Y3Qgb21hcGZiX2RldmljZQkqZmJkZXY7CiAJc3RydWN0IGxjZF9jdHJsX2V4dGlmCSpleHRpZjsKLQlzdHJ1Y3QgbGNkX2N0cmwJCSppbnRfY3RybDsKKwljb25zdCBzdHJ1Y3QgbGNkX2N0cmwJKmludF9jdHJsOwogCiAJdm9pZAkJCSgqcG93ZXJfdXApKHN0cnVjdCBkZXZpY2UgKmRldik7CiAJdm9pZAkJCSgqcG93ZXJfZG93bikoc3RydWN0IGRldmljZSAqZGV2KTsKQEAgLTEzNzIsNyArMTM3Miw3IEBACiAJCQkgICAoMSA8PCBPTUFQRkJfQ09MT1JfWVVWNDIwKTsKIH0KIAotc3RhdGljIHZvaWQgX3NhdmVfcmVncyhzdHJ1Y3QgYmxpenphcmRfcmVnX2xpc3QgKmxpc3QsIGludCBjbnQpCitzdGF0aWMgdm9pZCBfc2F2ZV9yZWdzKGNvbnN0IHN0cnVjdCBibGl6emFyZF9yZWdfbGlzdCAqbGlzdCwgaW50IGNudCkKIHsKIAlpbnQgaTsKIApAQCAtMTM4Myw3ICsxMzgzLDcgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIF9yZXN0b3JlX3JlZ3Moc3RydWN0IGJsaXp6YXJkX3JlZ19saXN0ICpsaXN0LCBpbnQgY250KQorc3RhdGljIHZvaWQgX3Jlc3RvcmVfcmVncyhjb25zdCBzdHJ1Y3QgYmxpenphcmRfcmVnX2xpc3QgKmxpc3QsIGludCBjbnQpCiB7CiAJaW50IGk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vb21hcC9kaXNwYy5jIGIvZHJpdmVycy92aWRlby9vbWFwL2Rpc3BjLmMKaW5kZXggODBhMTFkMC4uZjE2ZTQyMSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9vbWFwL2Rpc3BjLmMKKysrIGIvZHJpdmVycy92aWRlby9vbWFwL2Rpc3BjLmMKQEAgLTEwMzUsNyArMTAzNSw3IEBACiAJYXRvbWljX2RlYygmZGlzcGMubWFwX2NvdW50W3BsYW5lXSk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgbW1hcF91c2VyX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgbW1hcF91c2VyX29wcyA9IHsKIAkub3BlbiA9IG1tYXBfdXNlcl9vcGVuLAogCS5jbG9zZSA9IG1tYXBfdXNlcl9jbG9zZSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL29tYXAvb21hcGZiX21haW4uYyBiL2RyaXZlcnMvdmlkZW8vb21hcC9vbWFwZmJfbWFpbi5jCmluZGV4IDEyNWU2MDUuLjBkMGM4YzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vb21hcC9vbWFwZmJfbWFpbi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vb21hcC9vbWFwZmJfbWFpbi5jCkBAIC0zOTMsNyArMzkzLDcgQEAKICAqIFNldCBmYl9pbmZvLmZpeCBmaWVsZHMgYW5kIGFsc28gdXBkYXRlcyBmYmRldi4KICAqIFdoZW4gY2FsbGluZyB0aGlzIGZiX2luZm8udmFyIG11c3QgYmUgc2V0IHVwIGFscmVhZHkuCiAgKi8KLXN0YXRpYyB2b2lkIHNldF9mYl9maXgoc3RydWN0IGZiX2luZm8gKmZiaSkKK3N0YXRpYyB2b2lkIHNldF9mYl9maXgoc3RydWN0IGZiX2luZm8gKmZiaSwgaW50IGZyb21faW5pdCkKIHsKIAlzdHJ1Y3QgZmJfZml4X3NjcmVlbmluZm8gKmZpeCA9ICZmYmktPmZpeDsKIAlzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhciA9ICZmYmktPnZhcjsKQEAgLTQwMywxMCArNDAzLDE2IEBACiAKIAlyZyA9ICZwbGFuZS0+ZmJkZXYtPm1lbV9kZXNjLnJlZ2lvbltwbGFuZS0+aWR4XTsKIAlmYmktPnNjcmVlbl9iYXNlCT0gcmctPnZhZGRyOwotCW11dGV4X2xvY2soJmZiaS0+bW1fbG9jayk7Ci0JZml4LT5zbWVtX3N0YXJ0CQk9IHJnLT5wYWRkcjsKLQlmaXgtPnNtZW1fbGVuCQk9IHJnLT5zaXplOwotCW11dGV4X3VubG9jaygmZmJpLT5tbV9sb2NrKTsKKworCWlmICghZnJvbV9pbml0KSB7CisJCW11dGV4X2xvY2soJmZiaS0+bW1fbG9jayk7CisJCWZpeC0+c21lbV9zdGFydAkJPSByZy0+cGFkZHI7CisJCWZpeC0+c21lbV9sZW4JCT0gcmctPnNpemU7CisJCW11dGV4X3VubG9jaygmZmJpLT5tbV9sb2NrKTsKKwl9IGVsc2UgeworCQlmaXgtPnNtZW1fc3RhcnQJCT0gcmctPnBhZGRyOworCQlmaXgtPnNtZW1fbGVuCQk9IHJnLT5zaXplOworCX0KIAogCWZpeC0+dHlwZSA9IEZCX1RZUEVfUEFDS0VEX1BJWEVMUzsKIAlicHAgPSB2YXItPmJpdHNfcGVyX3BpeGVsOwpAQCAtNzA0LDcgKzcxMCw3IEBACiAJaW50IHIgPSAwOwogCiAJb21hcGZiX3JxdWV1ZV9sb2NrKGZiZGV2KTsKLQlzZXRfZmJfZml4KGZiaSk7CisJc2V0X2ZiX2ZpeChmYmksIDApOwogCXIgPSBjdHJsX2NoYW5nZV9tb2RlKGZiaSk7CiAJb21hcGZiX3JxdWV1ZV91bmxvY2soZmJkZXYpOwogCkBAIC05MDQsNyArOTEwLDcgQEAKIAkJaWYgKG9sZF9zaXplICE9IHNpemUpIHsKIAkJCWlmIChzaXplKSB7CiAJCQkJbWVtY3B5KCZmYmktPnZhciwgbmV3X3Zhciwgc2l6ZW9mKGZiaS0+dmFyKSk7Ci0JCQkJc2V0X2ZiX2ZpeChmYmkpOworCQkJCXNldF9mYl9maXgoZmJpLCAwKTsKIAkJCX0gZWxzZSB7CiAJCQkJLyoKIAkJCQkgKiBTZXQgdGhlc2UgZXhwbGljaXRseSB0byBpbmRpY2F0ZSB0aGF0IHRoZQpAQCAtMTUwNCw3ICsxNTEwLDcgQEAKIAl2YXItPmJpdHNfcGVyX3BpeGVsID0gZmJkZXYtPnBhbmVsLT5icHA7CiAKIAlzZXRfZmJfdmFyKGluZm8sIHZhcik7Ci0Jc2V0X2ZiX2ZpeChpbmZvKTsKKwlzZXRfZmJfZml4KGluZm8sIDEpOwogCiAJciA9IGZiX2FsbG9jX2NtYXAoJmluZm8tPmNtYXAsIDE2LCAwKTsKIAlpZiAociAhPSAwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9weGFmYi5jIGIvZHJpdmVycy92aWRlby9weGFmYi5jCmluZGV4IDY1MDYxMTcuLjE4MjBjNGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vcHhhZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3B4YWZiLmMKQEAgLTE2MzgsMjQgKzE2MzgsMjYgQEAKICAqIFBvd2VyIG1hbmFnZW1lbnQgaG9va3MuICBOb3RlIHRoYXQgd2Ugd29uJ3QgYmUgY2FsbGVkIGZyb20gSVJRIGNvbnRleHQsCiAgKiB1bmxpa2UgdGhlIGJsYW5rIGZ1bmN0aW9ucyBhYm92ZSwgc28gd2UgbWF5IHNsZWVwLgogICovCi1zdGF0aWMgaW50IHB4YWZiX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitzdGF0aWMgaW50IHB4YWZiX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQogewotCXN0cnVjdCBweGFmYl9pbmZvICpmYmkgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBweGFmYl9pbmZvICpmYmkgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAogCXNldF9jdHJscl9zdGF0ZShmYmksIENfRElTQUJMRV9QTSk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgcHhhZmJfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgcHhhZmJfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgcHhhZmJfaW5mbyAqZmJpID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgcHhhZmJfaW5mbyAqZmJpID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAKIAlzZXRfY3RybHJfc3RhdGUoZmJpLCBDX0VOQUJMRV9QTSk7CiAJcmV0dXJuIDA7CiB9Ci0jZWxzZQotI2RlZmluZSBweGFmYl9zdXNwZW5kCU5VTEwKLSNkZWZpbmUgcHhhZmJfcmVzdW1lCU5VTEwKKworc3RhdGljIHN0cnVjdCBkZXZfcG1fb3BzIHB4YWZiX3BtX29wcyA9IHsKKwkuc3VzcGVuZAk9IHB4YWZiX3N1c3BlbmQsCisJLnJlc3VtZQkJPSBweGFmYl9yZXN1bWUsCit9OwogI2VuZGlmCiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IHB4YWZiX2luaXRfdmlkZW9fbWVtb3J5KHN0cnVjdCBweGFmYl9pbmZvICpmYmkpCkBAIC0yMDgxLDYgKzIwODMsOSBAQAogCQlnb3RvIGZhaWxlZDsKIAl9CiAKKwlpZiAoY3B1X2lzX3B4YTN4eCgpICYmIGluZi0+YWNjZWxlcmF0aW9uX2VuYWJsZWQpCisJCWZiaS0+ZmIuZml4LmFjY2VsID0gRkJfQUNDRUxfUFhBM1hYOworCiAJZmJpLT5iYWNrbGlnaHRfcG93ZXIgPSBpbmYtPnB4YWZiX2JhY2tsaWdodF9wb3dlcjsKIAlmYmktPmxjZF9wb3dlciA9IGluZi0+cHhhZmJfbGNkX3Bvd2VyOwogCkBAIC0yMDkxLDE0ICsyMDk2LDE0IEBACiAJCWdvdG8gZmFpbGVkX2ZiaTsKIAl9CiAKLQlyID0gcmVxdWVzdF9tZW1fcmVnaW9uKHItPnN0YXJ0LCByLT5lbmQgLSByLT5zdGFydCArIDEsIGRldi0+bmFtZSk7CisJciA9IHJlcXVlc3RfbWVtX3JlZ2lvbihyLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyKSwgZGV2LT5uYW1lKTsKIAlpZiAociA9PSBOVUxMKSB7CiAJCWRldl9lcnIoJmRldi0+ZGV2LCAiZmFpbGVkIHRvIHJlcXVlc3QgSS9PIG1lbW9yeVxuIik7CiAJCXJldCA9IC1FQlVTWTsKIAkJZ290byBmYWlsZWRfZmJpOwogCX0KIAotCWZiaS0+bW1pb19iYXNlID0gaW9yZW1hcChyLT5zdGFydCwgci0+ZW5kIC0gci0+c3RhcnQgKyAxKTsKKwlmYmktPm1taW9fYmFzZSA9IGlvcmVtYXAoci0+c3RhcnQsIHJlc291cmNlX3NpemUocikpOwogCWlmIChmYmktPm1taW9fYmFzZSA9PSBOVUxMKSB7CiAJCWRldl9lcnIoJmRldi0+ZGV2LCAiZmFpbGVkIHRvIG1hcCBJL08gbWVtb3J5XG4iKTsKIAkJcmV0ID0gLUVCVVNZOwpAQCAtMjE5Nyw3ICsyMjAyLDcgQEAKIGZhaWxlZF9mcmVlX2lvOgogCWlvdW5tYXAoZmJpLT5tbWlvX2Jhc2UpOwogZmFpbGVkX2ZyZWVfcmVzOgotCXJlbGVhc2VfbWVtX3JlZ2lvbihyLT5zdGFydCwgci0+ZW5kIC0gci0+c3RhcnQgKyAxKTsKKwlyZWxlYXNlX21lbV9yZWdpb24oci0+c3RhcnQsIHJlc291cmNlX3NpemUocikpOwogZmFpbGVkX2ZiaToKIAljbGtfcHV0KGZiaS0+Y2xrKTsKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOwpAQCAtMjIzNyw3ICsyMjQyLDcgQEAKIAlpb3VubWFwKGZiaS0+bW1pb19iYXNlKTsKIAogCXIgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UoZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7Ci0JcmVsZWFzZV9tZW1fcmVnaW9uKHItPnN0YXJ0LCByLT5lbmQgLSByLT5zdGFydCArIDEpOworCXJlbGVhc2VfbWVtX3JlZ2lvbihyLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyKSk7CiAKIAljbGtfcHV0KGZiaS0+Y2xrKTsKIAlrZnJlZShmYmkpOwpAQCAtMjI0OCwxMSArMjI1MywxMiBAQAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgcHhhZmJfZHJpdmVyID0gewogCS5wcm9iZQkJPSBweGFmYl9wcm9iZSwKIAkucmVtb3ZlIAk9IF9fZGV2ZXhpdF9wKHB4YWZiX3JlbW92ZSksCi0JLnN1c3BlbmQJPSBweGFmYl9zdXNwZW5kLAotCS5yZXN1bWUJCT0gcHhhZmJfcmVzdW1lLAogCS5kcml2ZXIJCT0gewogCQkub3duZXIJPSBUSElTX01PRFVMRSwKIAkJLm5hbWUJPSAicHhhMnh4LWZiIiwKKyNpZmRlZiBDT05GSUdfUE0KKwkJLnBtCT0gJnB4YWZiX3BtX29wcywKKyNlbmRpZgogCX0sCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fYmFsbG9vbi5jIGIvZHJpdmVycy92aXJ0aW8vdmlydGlvX2JhbGxvb24uYwppbmRleCAyMDBjMjJmLi45ZGQ1ODgwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fYmFsbG9vbi5jCisrKyBiL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19iYWxsb29uLmMKQEAgLTE5LDcgKzE5LDYgQEAKICAqLwogLy8jZGVmaW5lIERFQlVHCiAjaW5jbHVkZSA8bGludXgvdmlydGlvLmg+Ci0jaW5jbHVkZSA8bGludXgvdmlydGlvX2lkcy5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb19iYWxsb29uLmg+CiAjaW5jbHVkZSA8bGludXgvc3dhcC5oPgogI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KQEAgLTI0OCw3ICsyNDcsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyB2b2lkIHZpcnRiYWxsb29uX3JlbW92ZShzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldikKK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCB2aXJ0YmFsbG9vbl9yZW1vdmUoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpCiB7CiAJc3RydWN0IHZpcnRpb19iYWxsb29uICp2YiA9IHZkZXYtPnByaXY7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19wY2kuYyBiL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19wY2kuYwppbmRleCA0YTFmMWViLi4yOGQ5Y2Y3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcGNpLmMKKysrIGIvZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaS5jCkBAIC01MzAsMTkgKzUzMCwyMiBAQAogCQkJZXJyID0gUFRSX0VSUih2cXNbaV0pOwogCQkJZ290byBlcnJvcl9maW5kOwogCQl9CisKKwkJaWYgKCF2cF9kZXYtPnBlcl92cV92ZWN0b3JzIHx8IG1zaXhfdmVjID09IFZJUlRJT19NU0lfTk9fVkVDVE9SKQorCQkJY29udGludWU7CisKIAkJLyogYWxsb2NhdGUgcGVyLXZxIGlycSBpZiBhdmFpbGFibGUgYW5kIG5lY2Vzc2FyeSAqLwotCQlpZiAodnBfZGV2LT5wZXJfdnFfdmVjdG9ycykgewotCQkJc25wcmludGYodnBfZGV2LT5tc2l4X25hbWVzW21zaXhfdmVjXSwKLQkJCQkgc2l6ZW9mICp2cF9kZXYtPm1zaXhfbmFtZXMsCi0JCQkJICIlcy0lcyIsCi0JCQkJIGRldl9uYW1lKCZ2cF9kZXYtPnZkZXYuZGV2KSwgbmFtZXNbaV0pOwotCQkJZXJyID0gcmVxdWVzdF9pcnEobXNpeF92ZWMsIHZyaW5nX2ludGVycnVwdCwgMCwKLQkJCQkJICB2cF9kZXYtPm1zaXhfbmFtZXNbbXNpeF92ZWNdLAotCQkJCQkgIHZxc1tpXSk7Ci0JCQlpZiAoZXJyKSB7Ci0JCQkJdnBfZGVsX3ZxKHZxc1tpXSk7Ci0JCQkJZ290byBlcnJvcl9maW5kOwotCQkJfQorCQlzbnByaW50Zih2cF9kZXYtPm1zaXhfbmFtZXNbbXNpeF92ZWNdLAorCQkJIHNpemVvZiAqdnBfZGV2LT5tc2l4X25hbWVzLAorCQkJICIlcy0lcyIsCisJCQkgZGV2X25hbWUoJnZwX2Rldi0+dmRldi5kZXYpLCBuYW1lc1tpXSk7CisJCWVyciA9IHJlcXVlc3RfaXJxKHZwX2Rldi0+bXNpeF9lbnRyaWVzW21zaXhfdmVjXS52ZWN0b3IsCisJCQkJICB2cmluZ19pbnRlcnJ1cHQsIDAsCisJCQkJICB2cF9kZXYtPm1zaXhfbmFtZXNbbXNpeF92ZWNdLAorCQkJCSAgdnFzW2ldKTsKKwkJaWYgKGVycikgeworCQkJdnBfZGVsX3ZxKHZxc1tpXSk7CisJCQlnb3RvIGVycm9yX2ZpbmQ7CiAJCX0KIAl9CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcmluZy5jIGIvZHJpdmVycy92aXJ0aW8vdmlydGlvX3JpbmcuYwppbmRleCBmNTM2MDA1Li5mYmQyZWNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcmluZy5jCisrKyBiL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19yaW5nLmMKQEAgLTI4NSw2ICsyODUsOSBAQAogCQlyZXR1cm4gTlVMTDsKIAl9CiAKKwkvKiBPbmx5IGdldCB1c2VkIGFycmF5IGVudHJpZXMgYWZ0ZXIgdGhleSBoYXZlIGJlZW4gZXhwb3NlZCBieSBob3N0LiAqLworCXJtYigpOworCiAJaSA9IHZxLT52cmluZy51c2VkLT5yaW5nW3ZxLT5sYXN0X3VzZWRfaWR4JXZxLT52cmluZy5udW1dLmlkOwogCSpsZW4gPSB2cS0+dnJpbmcudXNlZC0+cmluZ1t2cS0+bGFzdF91c2VkX2lkeCV2cS0+dnJpbmcubnVtXS5sZW47CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdzEvbWFzdGVycy9kczI0ODIuYyBiL2RyaXZlcnMvdzEvbWFzdGVycy9kczI0ODIuYwppbmRleCBkZjUyY2IzLi40MDZjYWE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3cxL21hc3RlcnMvZHMyNDgyLmMKKysrIGIvZHJpdmVycy93MS9tYXN0ZXJzL2RzMjQ4Mi5jCkBAIC0yNCwxOSArMjQsNiBAQAogI2luY2x1ZGUgIi4uL3cxX2ludC5oIgogCiAvKioKLSAqIEFkZHJlc3MgaXMgc2VsZWN0ZWQgdXNpbmcgMiBwaW5zLCByZXN1bHRpbmcgaW4gNCBwb3NzaWJsZSBhZGRyZXNzZXMuCi0gKiAgMHgxOCwgMHgxOSwgMHgxYSwgMHgxYgotICogSG93ZXZlciwgdGhlIGNoaXAgY2Fubm90IGJlIGRldGVjdGVkIHdpdGhvdXQgZG9pbmcgYW4gaTJjIHdyaXRlLAotICogc28gdXNlIHRoZSBmb3JjZSBtb2R1bGUgcGFyYW1ldGVyLgotICovCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geyBJMkNfQ0xJRU5UX0VORCB9OwotCi0vKioKLSAqIEluc21vZCBwYXJhbWV0ZXJzCi0gKi8KLUkyQ19DTElFTlRfSU5TTU9EXzEoZHMyNDgyKTsKLQotLyoqCiAgKiBUaGUgRFMyNDgyIHJlZ2lzdGVycyAtIHRoZXJlIGFyZSAzIHJlZ2lzdGVycyB0aGF0IGFyZSBhZGRyZXNzZWQgYnkgYSByZWFkCiAgKiBwb2ludGVyLiBUaGUgcmVhZCBwb2ludGVyIGlzIHNldCBieSB0aGUgbGFzdCBjb21tYW5kIGV4ZWN1dGVkLgogICoKQEAgLTk2LDggKzgzLDYgQEAKIAogc3RhdGljIGludCBkczI0ODJfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKIAkJCWNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCk7Ci1zdGF0aWMgaW50IGRzMjQ4Ml9kZXRlY3Qoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IGtpbmQsCi0JCQkgc3RydWN0IGkyY19ib2FyZF9pbmZvICppbmZvKTsKIHN0YXRpYyBpbnQgZHMyNDgyX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KTsKIAogCkBAIC0xMTcsOCArMTAyLDYgQEAKIAkucHJvYmUJCT0gZHMyNDgyX3Byb2JlLAogCS5yZW1vdmUJCT0gZHMyNDgyX3JlbW92ZSwKIAkuaWRfdGFibGUJPSBkczI0ODJfaWQsCi0JLmRldGVjdAkJPSBkczI0ODJfZGV0ZWN0LAotCS5hZGRyZXNzX2RhdGEJPSAmYWRkcl9kYXRhLAogfTsKIAogLyoKQEAgLTQyNSwxOSArNDA4LDYgQEAKIH0KIAogCi1zdGF0aWMgaW50IGRzMjQ4Ml9kZXRlY3Qoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IGtpbmQsCi0JCQkgc3RydWN0IGkyY19ib2FyZF9pbmZvICppbmZvKQotewotCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoY2xpZW50LT5hZGFwdGVyLAotCQkJCSAgICAgSTJDX0ZVTkNfU01CVVNfV1JJVEVfQllURV9EQVRBIHwKLQkJCQkgICAgIEkyQ19GVU5DX1NNQlVTX0JZVEUpKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCXN0cmxjcHkoaW5mby0+dHlwZSwgImRzMjQ4MiIsIEkyQ19OQU1FX1NJWkUpOwotCi0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbnQgZHMyNDgyX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCiAJCQljb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCiB7CkBAIC00NDYsNiArNDE2LDExIEBACiAJaW50IHRlbXAxOwogCWludCBpZHg7CiAKKwlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGNsaWVudC0+YWRhcHRlciwKKwkJCQkgICAgIEkyQ19GVU5DX1NNQlVTX1dSSVRFX0JZVEVfREFUQSB8CisJCQkJICAgICBJMkNfRlVOQ19TTUJVU19CWVRFKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKIAlpZiAoIShkYXRhID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGRzMjQ4Ml9kYXRhKSwgR0ZQX0tFUk5FTCkpKSB7CiAJCWVyciA9IC1FTk9NRU07CiAJCWdvdG8gZXhpdDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvS2NvbmZpZyBiL2RyaXZlcnMvd2F0Y2hkb2cvS2NvbmZpZwppbmRleCBmZjNlYjhmLi4zNzExYjg4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL0tjb25maWcKKysrIGIvZHJpdmVycy93YXRjaGRvZy9LY29uZmlnCkBAIC0yODIsNiArMjgyLDEzIEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBudWM5MDBfd2R0LgogCitjb25maWcgQURYX1dBVENIRE9HCisJdHJpc3RhdGUgIkF2aW9uaWMgRGVzaWduIFhhbnRob3Mgd2F0Y2hkb2ciCisJZGVwZW5kcyBvbiBBUkNIX1BYQV9BRFgKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHN1cHBvcnQgZm9yIHRoZSB3YXRjaGRvZyB0aW1lciBvbiBBdmlvbmljCisJICBEZXNpZ24gWGFudGhvcyBib2FyZHMuCisKICMgQVZSMzIgQXJjaGl0ZWN0dXJlCiAKIGNvbmZpZyBBVDMyQVA3MDBYX1dEVApkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9NYWtlZmlsZSBiL2RyaXZlcnMvd2F0Y2hkb2cvTWFrZWZpbGUKaW5kZXggMzQ4YjNiOC4uNjk5MTk5YiAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3dhdGNoZG9nL01ha2VmaWxlCkBAIC00NSw2ICs0NSw3IEBACiBvYmotJChDT05GSUdfQ09IOTAxMzI3X1dBVENIRE9HKSArPSBjb2g5MDEzMjdfd2R0Lm8KIG9iai0kKENPTkZJR19TVE1QM1hYWF9XQVRDSERPRykgKz0gc3RtcDN4eHhfd2R0Lm8KIG9iai0kKENPTkZJR19OVUM5MDBfV0FUQ0hET0cpICs9IG51YzkwMF93ZHQubworb2JqLSQoQ09ORklHX0FEWF9XQVRDSERPRykgKz0gYWR4X3dkdC5vCiAKICMgQVZSMzIgQXJjaGl0ZWN0dXJlCiBvYmotJChDT05GSUdfQVQzMkFQNzAwWF9XRFQpICs9IGF0MzJhcDcwMHhfd2R0Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvYWR4X3dkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9hZHhfd2R0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzdhZmIwYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvYWR4X3dkdC5jCkBAIC0wLDAgKzEsMzU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgQXZpb25pYyBEZXNpZ24gR21iSAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9taXNjZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvd2F0Y2hkb2cuaD4KKworI2RlZmluZSBXQVRDSERPR19OQU1FICJhZHgtd2R0IgorCisvKiByZWdpc3RlciBvZmZzZXRzICovCisjZGVmaW5lCUFEWF9XRFRfQ09OVFJPTAkJMHgwMAorI2RlZmluZQlBRFhfV0RUX0NPTlRST0xfRU5BQkxFCSgxIDw8IDApCisjZGVmaW5lCUFEWF9XRFRfQ09OVFJPTF9uUkVTRVQJKDEgPDwgMSkKKyNkZWZpbmUJQURYX1dEVF9USU1FT1VUCQkweDA4CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICphZHhfd2R0X2RldjsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGRyaXZlcl9vcGVuOworCisjZGVmaW5lCVdEVF9TVEFURV9TVE9QCTAKKyNkZWZpbmUJV0RUX1NUQVRFX1NUQVJUCTEKKworc3RydWN0IGFkeF93ZHQgeworCXZvaWQgX19pb21lbSAqYmFzZTsKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7CisJdW5zaWduZWQgaW50IHN0YXRlOworCXVuc2lnbmVkIGludCB3YWtlOworCXNwaW5sb2NrX3QgbG9jazsKK307CisKK3N0YXRpYyBzdHJ1Y3Qgd2F0Y2hkb2dfaW5mbyBhZHhfd2R0X2luZm8gPSB7CisJLmlkZW50aXR5ID0gIkF2aW9uaWMgRGVzaWduIFhhbnRob3MgV2F0Y2hkb2ciLAorCS5vcHRpb25zID0gV0RJT0ZfU0VUVElNRU9VVCB8IFdESU9GX0tFRVBBTElWRVBJTkcsCit9OworCitzdGF0aWMgdm9pZCBhZHhfd2R0X3N0YXJ0X2xvY2tlZChzdHJ1Y3QgYWR4X3dkdCAqd2R0KQoreworCXUzMiBjdHJsOworCisJY3RybCA9IHJlYWRsKHdkdC0+YmFzZSArIEFEWF9XRFRfQ09OVFJPTCk7CisJY3RybCB8PSBBRFhfV0RUX0NPTlRST0xfRU5BQkxFOworCXdyaXRlbChjdHJsLCB3ZHQtPmJhc2UgKyBBRFhfV0RUX0NPTlRST0wpOworCXdkdC0+c3RhdGUgPSBXRFRfU1RBVEVfU1RBUlQ7Cit9CisKK3N0YXRpYyB2b2lkIGFkeF93ZHRfc3RhcnQoc3RydWN0IGFkeF93ZHQgKndkdCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJndkdC0+bG9jaywgZmxhZ3MpOworCWFkeF93ZHRfc3RhcnRfbG9ja2VkKHdkdCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmd2R0LT5sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIGFkeF93ZHRfc3RvcF9sb2NrZWQoc3RydWN0IGFkeF93ZHQgKndkdCkKK3sKKwl1MzIgY3RybDsKKworCWN0cmwgPSByZWFkbCh3ZHQtPmJhc2UgKyBBRFhfV0RUX0NPTlRST0wpOworCWN0cmwgJj0gfkFEWF9XRFRfQ09OVFJPTF9FTkFCTEU7CisJd3JpdGVsKGN0cmwsIHdkdC0+YmFzZSArIEFEWF9XRFRfQ09OVFJPTCk7CisJd2R0LT5zdGF0ZSA9IFdEVF9TVEFURV9TVE9QOworfQorCitzdGF0aWMgdm9pZCBhZHhfd2R0X3N0b3Aoc3RydWN0IGFkeF93ZHQgKndkdCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJndkdC0+bG9jaywgZmxhZ3MpOworCWFkeF93ZHRfc3RvcF9sb2NrZWQod2R0KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ3ZHQtPmxvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgYWR4X3dkdF9zZXRfdGltZW91dChzdHJ1Y3QgYWR4X3dkdCAqd2R0LCB1bnNpZ25lZCBsb25nIHNlY29uZHMpCit7CisJdW5zaWduZWQgbG9uZyB0aW1lb3V0ID0gc2Vjb25kcyAqIDEwMDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBpbnQgc3RhdGU7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmd2R0LT5sb2NrLCBmbGFncyk7CisJc3RhdGUgPSB3ZHQtPnN0YXRlOworCWFkeF93ZHRfc3RvcF9sb2NrZWQod2R0KTsKKwl3cml0ZWwodGltZW91dCwgd2R0LT5iYXNlICsgQURYX1dEVF9USU1FT1VUKTsKKworCWlmIChzdGF0ZSA9PSBXRFRfU1RBVEVfU1RBUlQpCisJCWFkeF93ZHRfc3RhcnRfbG9ja2VkKHdkdCk7CisKKwl3ZHQtPnRpbWVvdXQgPSB0aW1lb3V0OworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJndkdC0+bG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZCBhZHhfd2R0X2dldF90aW1lb3V0KHN0cnVjdCBhZHhfd2R0ICp3ZHQsIHVuc2lnbmVkIGxvbmcgKnNlY29uZHMpCit7CisJKnNlY29uZHMgPSB3ZHQtPnRpbWVvdXQgLyAxMDAwOworfQorCitzdGF0aWMgdm9pZCBhZHhfd2R0X2tlZXBhbGl2ZShzdHJ1Y3QgYWR4X3dkdCAqd2R0KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmd2R0LT5sb2NrLCBmbGFncyk7CisJd3JpdGVsKHdkdC0+dGltZW91dCwgd2R0LT5iYXNlICsgQURYX1dEVF9USU1FT1VUKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ3ZHQtPmxvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIGludCBhZHhfd2R0X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IGFkeF93ZHQgKndkdCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGFkeF93ZHRfZGV2KTsKKworCWlmICh0ZXN0X2FuZF9zZXRfYml0KDAsICZkcml2ZXJfb3BlbikpCisJCXJldHVybiAtRUJVU1k7CisKKwlmaWxlLT5wcml2YXRlX2RhdGEgPSB3ZHQ7CisJYWR4X3dkdF9zZXRfdGltZW91dCh3ZHQsIDMwKTsKKwlhZHhfd2R0X3N0YXJ0KHdkdCk7CisKKwlyZXR1cm4gbm9uc2Vla2FibGVfb3Blbihpbm9kZSwgZmlsZSk7Cit9CisKK3N0YXRpYyBpbnQgYWR4X3dkdF9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCBhZHhfd2R0ICp3ZHQgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisKKwlhZHhfd2R0X3N0b3Aod2R0KTsKKwljbGVhcl9iaXQoMCwgJmRyaXZlcl9vcGVuKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgbG9uZyBhZHhfd2R0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlzdHJ1Y3QgYWR4X3dkdCAqd2R0ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXZvaWQgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopYXJnOworCXVuc2lnbmVkIGxvbmcgX191c2VyICpwID0gYXJncDsKKwl1bnNpZ25lZCBsb25nIHNlY29uZHMgPSAwOworCXVuc2lnbmVkIGludCBvcHRpb25zOworCWxvbmcgcmV0ID0gLUVJTlZBTDsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBXRElPQ19HRVRTVVBQT1JUOgorCQlpZiAoY29weV90b191c2VyKGFyZ3AsICZhZHhfd2R0X2luZm8sIHNpemVvZihhZHhfd2R0X2luZm8pKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQllbHNlCisJCQlyZXR1cm4gMDsKKworCWNhc2UgV0RJT0NfR0VUU1RBVFVTOgorCWNhc2UgV0RJT0NfR0VUQk9PVFNUQVRVUzoKKwkJcmV0dXJuIHB1dF91c2VyKDAsIHApOworCisJY2FzZSBXRElPQ19LRUVQQUxJVkU6CisJCWFkeF93ZHRfa2VlcGFsaXZlKHdkdCk7CisJCXJldHVybiAwOworCisJY2FzZSBXRElPQ19TRVRUSU1FT1VUOgorCQlpZiAoZ2V0X3VzZXIoc2Vjb25kcywgcCkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKworCQlhZHhfd2R0X3NldF90aW1lb3V0KHdkdCwgc2Vjb25kcyk7CisKKwkJLyogZmFsbHRocm91Z2ggKi8KKwljYXNlIFdESU9DX0dFVFRJTUVPVVQ6CisJCWFkeF93ZHRfZ2V0X3RpbWVvdXQod2R0LCAmc2Vjb25kcyk7CisJCXJldHVybiBwdXRfdXNlcihzZWNvbmRzLCBwKTsKKworCWNhc2UgV0RJT0NfU0VUT1BUSU9OUzoKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZvcHRpb25zLCBhcmdwLCBzaXplb2Yob3B0aW9ucykpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJaWYgKG9wdGlvbnMgJiBXRElPU19ESVNBQkxFQ0FSRCkgeworCQkJYWR4X3dkdF9zdG9wKHdkdCk7CisJCQlyZXQgPSAwOworCQl9CisKKwkJaWYgKG9wdGlvbnMgJiBXRElPU19FTkFCTEVDQVJEKSB7CisJCQlhZHhfd2R0X3N0YXJ0KHdkdCk7CisJCQlyZXQgPSAwOworCQl9CisKKwkJcmV0dXJuIHJldDsKKworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCXJldHVybiAtRU5PVFRZOworfQorCitzdGF0aWMgc3NpemVfdCBhZHhfd2R0X3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqZGF0YSwKKwkJc2l6ZV90IGxlbiwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCBhZHhfd2R0ICp3ZHQgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisKKwlpZiAobGVuKQorCQlhZHhfd2R0X2tlZXBhbGl2ZSh3ZHQpOworCisJcmV0dXJuIGxlbjsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYWR4X3dkdF9mb3BzID0geworCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5sbHNlZWsgPSBub19sbHNlZWssCisJLm9wZW4gPSBhZHhfd2R0X29wZW4sCisJLnJlbGVhc2UgPSBhZHhfd2R0X3JlbGVhc2UsCisJLnVubG9ja2VkX2lvY3RsID0gYWR4X3dkdF9pb2N0bCwKKwkud3JpdGUgPSBhZHhfd2R0X3dyaXRlLAorfTsKKworc3RhdGljIHN0cnVjdCBtaXNjZGV2aWNlIGFkeF93ZHRfbWlzY2RldiA9IHsKKwkubWlub3IgPSBXQVRDSERPR19NSU5PUiwKKwkubmFtZSA9ICJ3YXRjaGRvZyIsCisJLmZvcHMgPSAmYWR4X3dkdF9mb3BzLAorfTsKKworc3RhdGljIGludCBfX2RldmluaXQgYWR4X3dkdF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCXN0cnVjdCBhZHhfd2R0ICp3ZHQ7CisJaW50IHJldCA9IDA7CisJdTMyIGN0cmw7CisKKwl3ZHQgPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwgc2l6ZW9mKCp3ZHQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXdkdCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW5ub3QgYWxsb2NhdGUgV0RUIHN0cnVjdHVyZVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXNwaW5fbG9ja19pbml0KCZ3ZHQtPmxvY2spOworCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAoIXJlcykgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW5ub3Qgb2J0YWluIEkvTyBtZW1vcnkgcmVnaW9uXG4iKTsKKwkJcmV0dXJuIC1FTlhJTzsKKwl9CisKKwlyZXMgPSBkZXZtX3JlcXVlc3RfbWVtX3JlZ2lvbigmcGRldi0+ZGV2LCByZXMtPnN0YXJ0LAorCQkJcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMSwgcmVzLT5uYW1lKTsKKwlpZiAoIXJlcykgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW5ub3QgcmVxdWVzdCBJL08gbWVtb3J5IHJlZ2lvblxuIik7CisJCXJldHVybiAtRU5YSU87CisJfQorCisJd2R0LT5iYXNlID0gZGV2bV9pb3JlbWFwX25vY2FjaGUoJnBkZXYtPmRldiwgcmVzLT5zdGFydCwKKwkJCXJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDEpOworCWlmICghd2R0LT5iYXNlKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbm5vdCByZW1hcCBJL08gbWVtb3J5IHJlZ2lvblxuIik7CisJCXJldHVybiAtRU5YSU87CisJfQorCisJLyogZGlzYWJsZSB3YXRjaGRvZyBhbmQgcmVib290IG9uIHRpbWVvdXQgKi8KKwljdHJsID0gcmVhZGwod2R0LT5iYXNlICsgQURYX1dEVF9DT05UUk9MKTsKKwljdHJsICY9IH5BRFhfV0RUX0NPTlRST0xfRU5BQkxFOworCWN0cmwgJj0gfkFEWF9XRFRfQ09OVFJPTF9uUkVTRVQ7CisJd3JpdGVsKGN0cmwsIHdkdC0+YmFzZSArIEFEWF9XRFRfQ09OVFJPTCk7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCB3ZHQpOworCWFkeF93ZHRfZGV2ID0gcGRldjsKKworCXJldCA9IG1pc2NfcmVnaXN0ZXIoJmFkeF93ZHRfbWlzY2Rldik7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW5ub3QgcmVnaXN0ZXIgbWlzY2RldiBvbiBtaW5vciAlZCAiCisJCQkJIihlcnI9JWQpXG4iLCBXQVRDSERPR19NSU5PUiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgYWR4X3dkdF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgYWR4X3dkdCAqd2R0ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwltaXNjX2RlcmVnaXN0ZXIoJmFkeF93ZHRfbWlzY2Rldik7CisJYWR4X3dkdF9zdG9wKHdkdCk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgYWR4X3dkdF9zaHV0ZG93bihzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBhZHhfd2R0ICp3ZHQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlhZHhfd2R0X3N0b3Aod2R0KTsKK30KKworI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludCBhZHhfd2R0X3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKKwlzdHJ1Y3QgYWR4X3dkdCAqd2R0ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwl3ZHQtPndha2UgPSAod2R0LT5zdGF0ZSA9PSBXRFRfU1RBVEVfU1RBUlQpID8gMSA6IDA7CisJYWR4X3dkdF9zdG9wKHdkdCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhZHhfd2R0X3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOworCXN0cnVjdCBhZHhfd2R0ICp3ZHQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCWlmICh3ZHQtPndha2UpCisJCWFkeF93ZHRfc3RhcnQod2R0KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGRldl9wbV9vcHMgYWR4X3dkdF9wbV9vcHMgPSB7CisJLnN1c3BlbmQgPSBhZHhfd2R0X3N1c3BlbmQsCisJLnJlc3VtZSA9IGFkeF93ZHRfcmVzdW1lLAorfTsKKworIyAgZGVmaW5lIEFEWF9XRFRfUE1fT1BTCSgmYWR4X3dkdF9wbV9vcHMpCisjZWxzZQorIyAgZGVmaW5lIEFEWF9XRFRfUE1fT1BTCU5VTEwKKyNlbmRpZgorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBhZHhfd2R0X2RyaXZlciA9IHsKKwkucHJvYmUgPSBhZHhfd2R0X3Byb2JlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcChhZHhfd2R0X3JlbW92ZSksCisJLnNodXRkb3duID0gYWR4X3dkdF9zaHV0ZG93biwKKwkuZHJpdmVyID0geworCQkubmFtZSA9IFdBVENIRE9HX05BTUUsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCQkucG0gPSBBRFhfV0RUX1BNX09QUywKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgYWR4X3dkdF9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmYWR4X3dkdF9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgYWR4X3dkdF9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmFkeF93ZHRfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoYWR4X3dkdF9pbml0KTsKK21vZHVsZV9leGl0KGFkeF93ZHRfZXhpdCk7CisKK01PRFVMRV9ERVNDUklQVElPTigiQXZpb25pYyBEZXNpZ24gWGFudGhvcyBXYXRjaGRvZyBEcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKK01PRFVMRV9BVVRIT1IoIlRoaWVycnkgUmVkaW5nIDx0aGllcnJ5LnJlZGluZ0BhdmlvbmljLWRlc2lnbi5kZT4iKTsKK01PRFVMRV9BTElBU19NSVNDREVWKFdBVENIRE9HX01JTk9SKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvcmlvd2QuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvcmlvd2QuYwppbmRleCAxZThmMDJmLi5kM2M4MjRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL3Jpb3dkLmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9yaW93ZC5jCkBAIC0yMDYsNyArMjA2LDcgQEAKIAogCWRldl9zZXRfZHJ2ZGF0YSgmb3AtPmRldiwgcCk7CiAJcmlvd2RfZGV2aWNlID0gcDsKLQllcnIgPSAwOworCXJldHVybiAwOwogCiBvdXRfaW91bm1hcDoKIAlvZl9pb3VubWFwKCZvcC0+cmVzb3VyY2VbMF0sIHAtPnJlZ3MsIDIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy94ZW4veGVuZnMveGVuYnVzLmMgYi9kcml2ZXJzL3hlbi94ZW5mcy94ZW5idXMuYwppbmRleCBhOTU5MmQ5Li42YzQyNjliIDEwMDY0NAotLS0gYS9kcml2ZXJzL3hlbi94ZW5mcy94ZW5idXMuYworKysgYi9kcml2ZXJzL3hlbi94ZW5mcy94ZW5idXMuYwpAQCAtNDMsNiArNDMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvcG9sbC5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L21vdW50Lmg+CiAjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgpkaWZmIC0tZ2l0IGEvZnMvOXAvdmZzX2Rpci5jIGIvZnMvOXAvdmZzX2Rpci5jCmluZGV4IDg3M2NkMzEuLjE1Y2NlNTMgMTAwNjQ0Ci0tLSBhL2ZzLzlwL3Zmc19kaXIuYworKysgYi9mcy85cC92ZnNfZGlyLmMKQEAgLTQwLDYgKzQwLDI0IEBACiAjaW5jbHVkZSAiZmlkLmgiCiAKIC8qKgorICogc3RydWN0IHA5X3JkaXIgLSByZWFkZGlyIGFjY291bnRpbmcKKyAqIEBtdXRleDogbXV0ZXggcHJvdGVjdGluZyByZWFkZGlyCisgKiBAaGVhZDogc3RhcnQgb2Zmc2V0IG9mIGN1cnJlbnQgZGlycmVhZCBidWZmZXIKKyAqIEB0YWlsOiBlbmQgb2Zmc2V0IG9mIGN1cnJlbnQgZGlycmVhZCBidWZmZXIKKyAqIEBidWY6IGRpcnJlYWQgYnVmZmVyCisgKgorICogcHJpdmF0ZSBzdHJ1Y3R1cmUgZm9yIGtlZXBpbmcgdHJhY2sgb2YgcmVhZGRpcgorICogYWxsb2NhdGVkIG9uIGRlbWFuZAorICovCisKK3N0cnVjdCBwOV9yZGlyIHsKKwlzdHJ1Y3QgbXV0ZXggbXV0ZXg7CisJaW50IGhlYWQ7CisJaW50IHRhaWw7CisJdWludDhfdCAqYnVmOworfTsKKworLyoqCiAgKiBkdF90eXBlIC0gcmV0dXJuIGZpbGUgdHlwZQogICogQG1pc3RhdDogbWlzdGF0IHN0cnVjdHVyZQogICoKQEAgLTcwLDU2ICs4OCw3OSBAQAogewogCWludCBvdmVyOwogCXN0cnVjdCBwOV93c3RhdCBzdDsKLQlpbnQgZXJyOworCWludCBlcnIgPSAwOwogCXN0cnVjdCBwOV9maWQgKmZpZDsKIAlpbnQgYnVmbGVuOwotCWNoYXIgKnN0YXRidWY7Ci0JaW50IG4sIGkgPSAwOworCWludCByZWNsZW4gPSAwOworCXN0cnVjdCBwOV9yZGlyICpyZGlyOwogCiAJUDlfRFBSSU5USyhQOV9ERUJVR19WRlMsICJuYW1lICVzXG4iLCBmaWxwLT5mX3BhdGguZGVudHJ5LT5kX25hbWUubmFtZSk7CiAJZmlkID0gZmlscC0+cHJpdmF0ZV9kYXRhOwogCiAJYnVmbGVuID0gZmlkLT5jbG50LT5tc2l6ZSAtIFA5X0lPSERSU1o7Ci0Jc3RhdGJ1ZiA9IGttYWxsb2MoYnVmbGVuLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXN0YXRidWYpCi0JCXJldHVybiAtRU5PTUVNOwogCi0Jd2hpbGUgKDEpIHsKLQkJZXJyID0gdjlmc19maWxlX3JlYWRuKGZpbHAsIHN0YXRidWYsIE5VTEwsIGJ1ZmxlbiwKLQkJCQkJCQkJZmlkLT5yZGlyX2Zwb3MpOwotCQlpZiAoZXJyIDw9IDApCi0JCQlicmVhazsKKwkvKiBhbGxvY2F0ZSByZGlyIG9uIGRlbWFuZCAqLworCWlmICghZmlkLT5yZGlyKSB7CisJCXJkaXIgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcDlfcmRpcikgKyBidWZsZW4sIEdGUF9LRVJORUwpOwogCi0JCW4gPSBlcnI7Ci0JCXdoaWxlIChpIDwgbikgewotCQkJZXJyID0gcDlzdGF0X3JlYWQoc3RhdGJ1ZiArIGksIGJ1Zmxlbi1pLCAmc3QsCi0JCQkJCQkJZmlkLT5jbG50LT5kb3R1KTsKKwkJaWYgKHJkaXIgPT0gTlVMTCkgeworCQkJZXJyID0gLUVOT01FTTsKKwkJCWdvdG8gZXhpdDsKKwkJfQorCQlzcGluX2xvY2soJmZpbHAtPmZfZGVudHJ5LT5kX2xvY2spOworCQlpZiAoIWZpZC0+cmRpcikgeworCQkJcmRpci0+YnVmID0gKHVpbnQ4X3QgKilyZGlyICsgc2l6ZW9mKHN0cnVjdCBwOV9yZGlyKTsKKwkJCW11dGV4X2luaXQoJnJkaXItPm11dGV4KTsKKwkJCXJkaXItPmhlYWQgPSByZGlyLT50YWlsID0gMDsKKwkJCWZpZC0+cmRpciA9ICh2b2lkICopIHJkaXI7CisJCQlyZGlyID0gTlVMTDsKKwkJfQorCQlzcGluX3VubG9jaygmZmlscC0+Zl9kZW50cnktPmRfbG9jayk7CisJCWtmcmVlKHJkaXIpOworCX0KKwlyZGlyID0gKHN0cnVjdCBwOV9yZGlyICopIGZpZC0+cmRpcjsKKworCWVyciA9IG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmcmRpci0+bXV0ZXgpOworCXdoaWxlIChlcnIgPT0gMCkgeworCQlpZiAocmRpci0+dGFpbCA9PSByZGlyLT5oZWFkKSB7CisJCQllcnIgPSB2OWZzX2ZpbGVfcmVhZG4oZmlscCwgcmRpci0+YnVmLCBOVUxMLAorCQkJCQkJCWJ1ZmxlbiwgZmlscC0+Zl9wb3MpOworCQkJaWYgKGVyciA8PSAwKQorCQkJCWdvdG8gdW5sb2NrX2FuZF9leGl0OworCisJCQlyZGlyLT5oZWFkID0gMDsKKwkJCXJkaXItPnRhaWwgPSBlcnI7CisJCX0KKworCQl3aGlsZSAocmRpci0+aGVhZCA8IHJkaXItPnRhaWwpIHsKKwkJCWVyciA9IHA5c3RhdF9yZWFkKHJkaXItPmJ1ZiArIHJkaXItPmhlYWQsCisJCQkJCQlidWZsZW4gLSByZGlyLT5oZWFkLCAmc3QsCisJCQkJCQlmaWQtPmNsbnQtPmRvdHUpOwogCQkJaWYgKGVycikgewogCQkJCVA5X0RQUklOVEsoUDlfREVCVUdfVkZTLCAicmV0dXJuZWQgJWRcbiIsIGVycik7CiAJCQkJZXJyID0gLUVJTzsKIAkJCQlwOXN0YXRfZnJlZSgmc3QpOwotCQkJCWdvdG8gZnJlZV9hbmRfZXhpdDsKKwkJCQlnb3RvIHVubG9ja19hbmRfZXhpdDsKIAkJCX0KLQotCQkJaSArPSBzdC5zaXplKzI7Ci0JCQlmaWQtPnJkaXJfZnBvcyArPSBzdC5zaXplKzI7CisJCQlyZWNsZW4gPSBzdC5zaXplKzI7CiAKIAkJCW92ZXIgPSBmaWxsZGlyKGRpcmVudCwgc3QubmFtZSwgc3RybGVuKHN0Lm5hbWUpLAogCQkJICAgIGZpbHAtPmZfcG9zLCB2OWZzX3FpZDJpbm8oJnN0LnFpZCksIGR0X3R5cGUoJnN0KSk7CiAKLQkJCWZpbHAtPmZfcG9zICs9IHN0LnNpemUrMjsKLQogCQkJcDlzdGF0X2ZyZWUoJnN0KTsKIAogCQkJaWYgKG92ZXIpIHsKIAkJCQllcnIgPSAwOwotCQkJCWdvdG8gZnJlZV9hbmRfZXhpdDsKKwkJCQlnb3RvIHVubG9ja19hbmRfZXhpdDsKIAkJCX0KKwkJCXJkaXItPmhlYWQgKz0gcmVjbGVuOworCQkJZmlscC0+Zl9wb3MgKz0gcmVjbGVuOwogCQl9CiAJfQogCi1mcmVlX2FuZF9leGl0OgotCWtmcmVlKHN0YXRidWYpOwordW5sb2NrX2FuZF9leGl0OgorCW11dGV4X3VubG9jaygmcmRpci0+bXV0ZXgpOworZXhpdDoKIAlyZXR1cm4gZXJyOwogfQogCmRpZmYgLS1naXQgYS9mcy85cC92ZnNfaW5vZGUuYyBiL2ZzLzlwL3Zmc19pbm9kZS5jCmluZGV4IDU5NDc2MjguLjE4Zjc0ZWMgMTAwNjQ0Ci0tLSBhL2ZzLzlwL3Zmc19pbm9kZS5jCisrKyBiL2ZzLzlwL3Zmc19pbm9kZS5jCkBAIC05OTQsOCArOTk0LDcgQEAKIAlQOV9EUFJJTlRLKFA5X0RFQlVHX1ZGUywKIAkJIiVzIC0+ICVzICglcylcbiIsIGRlbnRyeS0+ZF9uYW1lLm5hbWUsIHN0LT5leHRlbnNpb24sIGJ1ZmZlcik7CiAKLQlyZXR2YWwgPSBidWZsZW47Ci0KKwlyZXR2YWwgPSBzdHJubGVuKGJ1ZmZlciwgYnVmbGVuKTsKIGRvbmU6CiAJa2ZyZWUoc3QpOwogCXJldHVybiByZXR2YWw7CkBAIC0xMDYyLDcgKzEwNjEsNyBAQAogCQkJX19wdXRuYW1lKGxpbmspOwogCQkJbGluayA9IEVSUl9QVFIobGVuKTsKIAkJfSBlbHNlCi0JCQlsaW5rW2xlbl0gPSAwOworCQkJbGlua1ttaW4obGVuLCBQQVRIX01BWC0xKV0gPSAwOwogCX0KIAluZF9zZXRfbGluayhuZCwgbGluayk7CiAKZGlmZiAtLWdpdCBhL2ZzL0tjb25maWcgYi9mcy9LY29uZmlnCmluZGV4IGQ0YmY4Y2EuLjIxMjYwNzggMTAwNjQ0Ci0tLSBhL2ZzL0tjb25maWcKKysrIGIvZnMvS2NvbmZpZwpAQCAtMTM1LDggKzEzNSw4IEBACiAKIGNvbmZpZyBIVUdFVExCRlMKIAlib29sICJIdWdlVExCIGZpbGUgc3lzdGVtIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBYODYgfHwgSUE2NCB8fCBQUEM2NCB8fCBTUEFSQzY0IHx8IChTVVBFUkggJiYgTU1VKSB8fCBcCi0JCSAgIChTMzkwICYmIDY0QklUKSB8fCBTWVNfU1VQUE9SVFNfSFVHRVRMQkZTIHx8IEJST0tFTgorCWRlcGVuZHMgb24gWDg2IHx8IElBNjQgfHwgUFBDX0JPT0szU182NCB8fCBTUEFSQzY0IHx8IChTMzkwICYmIDY0QklUKSB8fCBcCisJCSAgIFNZU19TVVBQT1JUU19IVUdFVExCRlMgfHwgQlJPS0VOCiAJaGVscAogCSAgaHVnZXRsYmZzIGlzIGEgZmlsZXN5c3RlbSBiYWNraW5nIGZvciBIdWdlVExCIHBhZ2VzLCBiYXNlZCBvbgogCSAgcmFtZnMuIEZvciBhcmNoaXRlY3R1cmVzIHRoYXQgc3VwcG9ydCBpdCwgc2F5IFkgaGVyZSBhbmQgcmVhZApkaWZmIC0tZ2l0IGEvZnMvYWZzL2NhY2hlLmggYi9mcy9hZnMvY2FjaGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWM0ZjZiNC4uMDAwMDAwMAotLS0gYS9mcy9hZnMvY2FjaGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLS8qIEFGUyBsb2NhbCBjYWNoZSBtYW5hZ2VtZW50IGludGVyZmFjZQotICoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBSZWQgSGF0LCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKiBXcml0dGVuIGJ5IERhdmlkIEhvd2VsbHMgKGRob3dlbGxzQHJlZGhhdC5jb20pCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgotICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvZnNjYWNoZS5oPgpkaWZmIC0tZ2l0IGEvZnMvYWZzL2ludGVybmFsLmggYi9mcy9hZnMvaW50ZXJuYWwuaAppbmRleCAxMDZiZTY2Li42ZWNlMmExIDEwMDY0NAotLS0gYS9mcy9hZnMvaW50ZXJuYWwuaAorKysgYi9mcy9hZnMvaW50ZXJuYWwuaApAQCAtMTgsMTAgKzE4LDEwIEBACiAjaW5jbHVkZSA8bGludXgva2V5Lmg+CiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9mc2NhY2hlLmg+CiAKICNpbmNsdWRlICJhZnMuaCIKICNpbmNsdWRlICJhZnNfdmwuaCIKLSNpbmNsdWRlICJjYWNoZS5oIgogCiAjZGVmaW5lIEFGU19DRUxMX01BWF9BRERSUyAxNQogCmRpZmYgLS1naXQgYS9mcy9hbm9uX2lub2Rlcy5jIGIvZnMvYW5vbl9pbm9kZXMuYwppbmRleCBkMTFjNTFmLi4yY2E3YTdjIDEwMDY0NAotLS0gYS9mcy9hbm9uX2lub2Rlcy5jCisrKyBiL2ZzL2Fub25faW5vZGVzLmMKQEAgLTgsOCArOCwxMCBAQAogICoKICAqLwogCisjaW5jbHVkZSA8bGludXgvY3JlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CmRpZmYgLS1naXQgYS9mcy9iaW8uYyBiL2ZzL2Jpby5jCmluZGV4IDc2NzM4MDAuLjQwMmNiODQgMTAwNjQ0Ci0tLSBhL2ZzL2Jpby5jCisrKyBiL2ZzL2Jpby5jCkBAIC0yNDksNiArMjQ5LDcgQEAKIAogCW1lbXBvb2xfZnJlZShwLCBicy0+YmlvX3Bvb2wpOwogfQorRVhQT1JUX1NZTUJPTChiaW9fZnJlZSk7CiAKIHZvaWQgYmlvX2luaXQoc3RydWN0IGJpbyAqYmlvKQogewpAQCAtMjU3LDYgKzI1OCw3IEBACiAJYmlvLT5iaV9jb21wX2NwdSA9IC0xOwogCWF0b21pY19zZXQoJmJpby0+YmlfY250LCAxKTsKIH0KK0VYUE9SVF9TWU1CT0woYmlvX2luaXQpOwogCiAvKioKICAqIGJpb19hbGxvY19iaW9zZXQgLSBhbGxvY2F0ZSBhIGJpbyBmb3IgSS9PCkBAIC0zMTEsNiArMzEzLDcgQEAKIAltZW1wb29sX2ZyZWUocCwgYnMtPmJpb19wb29sKTsKIAlyZXR1cm4gTlVMTDsKIH0KK0VYUE9SVF9TWU1CT0woYmlvX2FsbG9jX2Jpb3NldCk7CiAKIHN0YXRpYyB2b2lkIGJpb19mc19kZXN0cnVjdG9yKHN0cnVjdCBiaW8gKmJpbykKIHsKQEAgLTMzNyw2ICszNDAsNyBAQAogCiAJcmV0dXJuIGJpbzsKIH0KK0VYUE9SVF9TWU1CT0woYmlvX2FsbG9jKTsKIAogc3RhdGljIHZvaWQgYmlvX2ttYWxsb2NfZGVzdHJ1Y3RvcihzdHJ1Y3QgYmlvICpiaW8pCiB7CkBAIC0zODAsNiArMzg0LDcgQEAKIAogCXJldHVybiBiaW87CiB9CitFWFBPUlRfU1lNQk9MKGJpb19rbWFsbG9jKTsKIAogdm9pZCB6ZXJvX2ZpbGxfYmlvKHN0cnVjdCBiaW8gKmJpbykKIHsKQEAgLTQxNiw2ICs0MjEsNyBAQAogCQliaW8tPmJpX2Rlc3RydWN0b3IoYmlvKTsKIAl9CiB9CitFWFBPUlRfU1lNQk9MKGJpb19wdXQpOwogCiBpbmxpbmUgaW50IGJpb19waHlzX3NlZ21lbnRzKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgYmlvICpiaW8pCiB7CkBAIC00MjQsNiArNDMwLDcgQEAKIAogCXJldHVybiBiaW8tPmJpX3BoeXNfc2VnbWVudHM7CiB9CitFWFBPUlRfU1lNQk9MKGJpb19waHlzX3NlZ21lbnRzKTsKIAogLyoqCiAgKiAJX19iaW9fY2xvbmUJLQljbG9uZSBhIGJpbwpAQCAtNDUxLDYgKzQ1OCw3IEBACiAJYmlvLT5iaV9zaXplID0gYmlvX3NyYy0+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+ZnNfZGV2aWNlcyk7CiAJYnRyZnNfbWFwcGluZ190cmVlX2ZyZWUoJmZzX2luZm8tPm1hcHBpbmdfdHJlZSk7CmRpZmYgLS1naXQgYS9mcy9idHJmcy9leHRlbnQtdHJlZS5jIGIvZnMvYnRyZnMvZXh0ZW50LXRyZWUuYwppbmRleCA5OTNmOTNmLi5lMjM4YTBjIDEwMDY0NAotLS0gYS9mcy9idHJmcy9leHRlbnQtdHJlZS5jCisrKyBiL2ZzL2J0cmZzL2V4dGVudC10cmVlLmMKQEAgLTY4LDYgKzY4LDggQEAKIAkJCSAgc3RydWN0IGV4dGVudF9idWZmZXIgKiptdXN0X2NsZWFuKTsKIHN0YXRpYyBpbnQgZmluZF9uZXh0X2tleShzdHJ1Y3QgYnRyZnNfcGF0aCAqcGF0aCwgaW50IGxldmVsLAogCQkJIHN0cnVjdCBidHJmc19rZXkgKmtleSk7CitzdGF0aWMgdm9pZCBkdW1wX3NwYWNlX2luZm8oc3RydWN0IGJ0cmZzX3NwYWNlX2luZm8gKmluZm8sIHU2NCBieXRlcywKKwkJCSAgICBpbnQgZHVtcF9ibG9ja19ncm91cHMpOwogCiBzdGF0aWMgbm9pbmxpbmUgaW50CiBibG9ja19ncm91cF9jYWNoZV9kb25lKHN0cnVjdCBidHJmc19ibG9ja19ncm91cF9jYWNoZSAqY2FjaGUpCkBAIC0xNTY2LDIzICsxNTY4LDIzIEBACiAJcmV0dXJuIHJldDsKIH0KIAotI2lmZGVmIEJJT19SV19ESVNDQVJECiBzdGF0aWMgdm9pZCBidHJmc19pc3N1ZV9kaXNjYXJkKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsCiAJCQkJdTY0IHN0YXJ0LCB1NjQgbGVuKQogewogCWJsa2Rldl9pc3N1ZV9kaXNjYXJkKGJkZXYsIHN0YXJ0ID4+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+Zmx1c2hpbmcgPSAwOworCXNwaW5fdW5sb2NrKCZpbmZvLT5sb2NrKTsKKwl3YWtlX3VwKCZpbmZvLT5mbHVzaF93YWl0KTsKK30KKworc3RhdGljIGludCBtYXliZV9hbGxvY2F0ZV9jaHVuayhzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwKKwkJCQkgc3RydWN0IGJ0cmZzX3NwYWNlX2luZm8gKmluZm8pCit7CisJc3RydWN0IGJ0cmZzX3N1cGVyX2Jsb2NrICpkaXNrX3N1cGVyID0gJnJvb3QtPmZzX2luZm8tPnN1cGVyX2NvcHk7CisJc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnM7CisJYm9vbCB3YWl0ID0gZmFsc2U7CisJaW50IHJldCA9IDA7CisJdTY0IG1pbl9tZXRhZGF0YTsKKwl1NjQgZnJlZV9zcGFjZTsKKworCWZyZWVfc3BhY2UgPSBidHJmc19zdXBlcl90b3RhbF9ieXRlcyhkaXNrX3N1cGVyKTsKKwkvKgorCSAqIHdlIGFsbG93IHRoZSBtZXRhZGF0YSB0byBncm93IHRvIGEgbWF4IG9mIGVpdGhlciA1Z2Igb3IgNSUgb2YgdGhlCisJICogc3BhY2UgaW4gdGhlIHZvbHVtZS4KKwkgKi8KKwltaW5fbWV0YWRhdGEgPSBtaW4oKHU2NCk1ICogMTAyNCAqIDEwMjQgKiAxMDI0LAorCQkJICAgICBkaXY2NF91NjQoZnJlZV9zcGFjZSAqIDUsIDEwMCkpOworCWlmIChpbmZvLT50b3RhbF9ieXRlcyA+PSBtaW5fbWV0YWRhdGEpIHsKKwkJc3Bpbl91bmxvY2soJmluZm8tPmxvY2spOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoaW5mby0+ZnVsbCkgeworCQlzcGluX3VubG9jaygmaW5mby0+bG9jayk7CisJCXJldHVybiAwOworCX0KKworCWlmICghaW5mby0+YWxsb2NhdGluZ19jaHVuaykgeworCQlpbmZvLT5mb3JjZV9hbGxvYyA9IDE7CisJCWluZm8tPmFsbG9jYXRpbmdfY2h1bmsgPSAxOworCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZpbmZvLT5hbGxvY2F0ZV93YWl0KTsKKwl9IGVsc2UgeworCQl3YWl0ID0gdHJ1ZTsKKwl9CisKKwlzcGluX3VubG9jaygmaW5mby0+bG9jayk7CisKKwlpZiAod2FpdCkgeworCQl3YWl0X2V2ZW50KGluZm8tPmFsbG9jYXRlX3dhaXQsCisJCQkgICAhaW5mby0+YWxsb2NhdGluZ19jaHVuayk7CisJCXJldHVybiAxOworCX0KKworCXRyYW5zID0gYnRyZnNfc3RhcnRfdHJhbnNhY3Rpb24ocm9vdCwgMSk7CisJaWYgKCF0cmFucykgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXQgPSBkb19jaHVua19hbGxvYyh0cmFucywgcm9vdC0+ZnNfaW5mby0+ZXh0ZW50X3Jvb3QsCisJCQkgICAgIDQwOTYgKyAyICogMTAyNCAqIDEwMjQsCisJCQkgICAgIGluZm8tPmZsYWdzLCAwKTsKKwlidHJmc19lbmRfdHJhbnNhY3Rpb24odHJhbnMsIHJvb3QpOworCWlmIChyZXQpCisJCWdvdG8gb3V0Oworb3V0OgorCXNwaW5fbG9jaygmaW5mby0+bG9jayk7CisJaW5mby0+YWxsb2NhdGluZ19jaHVuayA9IDA7CisJc3Bpbl91bmxvY2soJmluZm8tPmxvY2spOworCXdha2VfdXAoJmluZm8tPmFsbG9jYXRlX3dhaXQpOworCisJaWYgKHJldCkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIDE7Cit9CisKKy8qCisgKiBSZXNlcnZlIG1ldGFkYXRhIHNwYWNlIGZvciBkZWxhbGxvYy4KKyAqLworaW50IGJ0cmZzX3Jlc2VydmVfbWV0YWRhdGFfZm9yX2RlbGFsbG9jKHN0cnVjdCBidHJmc19yb290ICpyb290LAorCQkJCQlzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbnVtX2l0ZW1zKQoreworCXN0cnVjdCBidHJmc19mc19pbmZvICppbmZvID0gcm9vdC0+ZnNfaW5mbzsKKwlzdHJ1Y3QgYnRyZnNfc3BhY2VfaW5mbyAqbWV0YV9zaW5mbzsKKwl1NjQgbnVtX2J5dGVzOworCXU2NCB1c2VkOworCXU2NCBhbGxvY190YXJnZXQ7CisJaW50IGZsdXNoZWQgPSAwOworCWludCBmb3JjZV9kZWxhbGxvYzsKKworCS8qIGdldCB0aGUgc3BhY2UgaW5mbyBmb3Igd2hlcmUgdGhlIG1ldGFkYXRhIHdpbGwgbGl2ZSAqLworCWFsbG9jX3RhcmdldCA9IGJ0cmZzX2dldF9hbGxvY19wcm9maWxlKHJvb3QsIDApOworCW1ldGFfc2luZm8gPSBfX2ZpbmRfc3BhY2VfaW5mbyhpbmZvLCBhbGxvY190YXJnZXQpOworCisJbnVtX2J5dGVzID0gY2FsY3VsYXRlX2J5dGVzX25lZWRlZChyb290LT5mc19pbmZvLT5leHRlbnRfcm9vdCwKKwkJCQkJICAgbnVtX2l0ZW1zKTsKIGFnYWluOgogCXNwaW5fbG9jaygmbWV0YV9zaW5mby0+bG9jayk7Ci0JaWYgKCFtZXRhX3NpbmZvLT5mdWxsKQotCQl0aHJlc2ggPSBtZXRhX3NpbmZvLT50b3RhbF9ieXRlcyAqIDgwOwotCWVsc2UKLQkJdGhyZXNoID0gbWV0YV9zaW5mby0+dG90YWxfYnl0ZXMgKiA5NTsKIAotCWRvX2Rpdih0aHJlc2gsIDEwMCk7CisJZm9yY2VfZGVsYWxsb2MgPSBtZXRhX3NpbmZvLT5mb3JjZV9kZWxhbGxvYzsKIAotCWlmIChtZXRhX3NpbmZvLT5ieXRlc191c2VkICsgbWV0YV9zaW5mby0+Ynl0ZXNfcmVzZXJ2ZWQgKwotCSAgICBtZXRhX3NpbmZvLT5ieXRlc19waW5uZWQgKyBtZXRhX3NpbmZvLT5ieXRlc19yZWFkb25seSArCi0JICAgIG1ldGFfc2luZm8tPmJ5dGVzX3N1cGVyID4gdGhyZXNoKSB7Ci0JCXN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zOwotCQlpZiAoIW1ldGFfc2luZm8tPmZ1bGwpIHsKLQkJCW1ldGFfc2luZm8tPmZvcmNlX2FsbG9jID0gMTsKKwlpZiAodW5saWtlbHkoIW1ldGFfc2luZm8tPmJ5dGVzX3Jvb3QpKQorCQltZXRhX3NpbmZvLT5ieXRlc19yb290ID0gY2FsY3VsYXRlX2J5dGVzX25lZWRlZChyb290LCA2KTsKKworCWlmICghZmx1c2hlZCkKKwkJbWV0YV9zaW5mby0+Ynl0ZXNfZGVsYWxsb2MgKz0gbnVtX2J5dGVzOworCisJdXNlZCA9IG1ldGFfc2luZm8tPmJ5dGVzX3VzZWQgKyBtZXRhX3NpbmZvLT5ieXRlc19yZXNlcnZlZCArCisJCW1ldGFfc2luZm8tPmJ5dGVzX3Bpbm5lZCArIG1ldGFfc2luZm8tPmJ5dGVzX3JlYWRvbmx5ICsKKwkJbWV0YV9zaW5mby0+Ynl0ZXNfc3VwZXIgKyBtZXRhX3NpbmZvLT5ieXRlc19yb290ICsKKwkJbWV0YV9zaW5mby0+Ynl0ZXNfbWF5X3VzZSArIG1ldGFfc2luZm8tPmJ5dGVzX2RlbGFsbG9jOworCisJaWYgKHVzZWQgPiBtZXRhX3NpbmZvLT50b3RhbF9ieXRlcykgeworCQlmbHVzaGVkKys7CisKKwkJaWYgKGZsdXNoZWQgPT0gMSkgeworCQkJaWYgKG1heWJlX2FsbG9jYXRlX2NodW5rKHJvb3QsIG1ldGFfc2luZm8pKQorCQkJCWdvdG8gYWdhaW47CisJCQlmbHVzaGVkKys7CisJCX0gZWxzZSB7CiAJCQlzcGluX3VubG9jaygmbWV0YV9zaW5mby0+bG9jayk7Ci1hbGxvYzoKLQkJCXRyYW5zID0gYnRyZnNfc3RhcnRfdHJhbnNhY3Rpb24ocm9vdCwgMSk7Ci0JCQlpZiAoIXRyYW5zKQotCQkJCXJldHVybiAtRU5PTUVNOworCQl9CiAKLQkJCXJldCA9IGRvX2NodW5rX2FsbG9jKHRyYW5zLCByb290LT5mc19pbmZvLT5leHRlbnRfcm9vdCwKLQkJCQkJICAgICAyICogMTAyNCAqIDEwMjQsIGFsbG9jX3RhcmdldCwgMCk7Ci0JCQlidHJmc19lbmRfdHJhbnNhY3Rpb24odHJhbnMsIHJvb3QpOwotCQkJaWYgKCFtZXRhX3NpbmZvKSB7Ci0JCQkJbWV0YV9zaW5mbyA9IF9fZmluZF9zcGFjZV9pbmZvKGluZm8sCi0JCQkJCQkJICAgICAgIGFsbG9jX3RhcmdldCk7Ci0JCQl9CisJCWlmIChmbHVzaGVkID09IDIpIHsKKwkJCWZpbGVtYXBfZmx1c2goaW5vZGUtPmlfbWFwcGluZyk7CisJCQlnb3RvIGFnYWluOworCQl9IGVsc2UgaWYgKGZsdXNoZWQgPT0gMykgeworCQkJZmx1c2hfZGVsYWxsb2Mocm9vdCwgbWV0YV9zaW5mbyk7CiAJCQlnb3RvIGFnYWluOwogCQl9CisJCXNwaW5fbG9jaygmbWV0YV9zaW5mby0+bG9jayk7CisJCW1ldGFfc2luZm8tPmJ5dGVzX2RlbGFsbG9jIC09IG51bV9ieXRlczsKIAkJc3Bpbl91bmxvY2soJm1ldGFfc2luZm8tPmxvY2spOwotCi0JCWlmICghY29tbWl0dGVkKSB7Ci0JCQljb21taXR0ZWQgPSAxOwotCQkJdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uKHJvb3QsIDEpOwotCQkJaWYgKCF0cmFucykKLQkJCQlyZXR1cm4gLUVOT01FTTsKLQkJCXJldCA9IGJ0cmZzX2NvbW1pdF90cmFuc2FjdGlvbih0cmFucywgcm9vdCk7Ci0JCQlpZiAocmV0KQotCQkJCXJldHVybiByZXQ7Ci0JCQlnb3RvIGFnYWluOwotCQl9CisJCXByaW50ayhLRVJOX0VSUiAiZW5vc3BjLCBoYXMgJWQsIHJlc2VydmVkICVkXG4iLAorCQkgICAgICAgQlRSRlNfSShpbm9kZSktPm91dHN0YW5kaW5nX2V4dGVudHMsCisJCSAgICAgICBCVFJGU19JKGlub2RlKS0+cmVzZXJ2ZWRfZXh0ZW50cyk7CisJCWR1bXBfc3BhY2VfaW5mbyhtZXRhX3NpbmZvLCAwLCAwKTsKIAkJcmV0dXJuIC1FTk9TUEM7CiAJfQorCisJQlRSRlNfSShpbm9kZSktPnJlc2VydmVkX2V4dGVudHMrKzsKKwljaGVja19mb3JjZV9kZWxhbGxvYyhtZXRhX3NpbmZvKTsKKwlzcGluX3VubG9jaygmbWV0YV9zaW5mby0+bG9jayk7CisKKwlpZiAoIWZsdXNoZWQgJiYgZm9yY2VfZGVsYWxsb2MpCisJCWZpbGVtYXBfZmx1c2goaW5vZGUtPmlfbWFwcGluZyk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIHVucmVzZXJ2ZSBudW1faXRlbXMgbnVtYmVyIG9mIGl0ZW1zIHdvcnRoIG9mIG1ldGFkYXRhIHNwYWNlLiAgVGhpcyBuZWVkcyB0bworICogYmUgcGFpcmVkIHdpdGggYnRyZnNfcmVzZXJ2ZV9tZXRhZGF0YV9zcGFjZS4KKyAqCisgKiBOT1RFOiBpZiB5b3UgaGF2ZSB0aGUgb3B0aW9uLCBydW4gdGhpcyBfQUZURVJfIHlvdSBkbyBhCisgKiBidHJmc19lbmRfdHJhbnNhY3Rpb24sIHNpbmNlIGJ0cmZzX2VuZF90cmFuc2FjdGlvbiB3aWxsIHJ1biBkZWxheWVkIHJlZgorICogb3ByYXRpb25zIHdoaWNoIHdpbGwgcmVzdWx0IGluIG1vcmUgdXNlZCBtZXRhZGF0YSwgc28gd2Ugd2FudCB0byBtYWtlIHN1cmUgd2UKKyAqIGNhbiBkbyB0aGF0IHdpdGhvdXQgaXNzdWUuCisgKi8KK2ludCBidHJmc191bnJlc2VydmVfbWV0YWRhdGFfc3BhY2Uoc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsIGludCBudW1faXRlbXMpCit7CisJc3RydWN0IGJ0cmZzX2ZzX2luZm8gKmluZm8gPSByb290LT5mc19pbmZvOworCXN0cnVjdCBidHJmc19zcGFjZV9pbmZvICptZXRhX3NpbmZvOworCXU2NCBudW1fYnl0ZXM7CisJdTY0IGFsbG9jX3RhcmdldDsKKwlib29sIGJ1ZyA9IGZhbHNlOworCisJLyogZ2V0IHRoZSBzcGFjZSBpbmZvIGZvciB3aGVyZSB0aGUgbWV0YWRhdGEgd2lsbCBsaXZlICovCisJYWxsb2NfdGFyZ2V0ID0gYnRyZnNfZ2V0X2FsbG9jX3Byb2ZpbGUocm9vdCwgMCk7CisJbWV0YV9zaW5mbyA9IF9fZmluZF9zcGFjZV9pbmZvKGluZm8sIGFsbG9jX3RhcmdldCk7CisKKwludW1fYnl0ZXMgPSBjYWxjdWxhdGVfYnl0ZXNfbmVlZGVkKHJvb3QsIG51bV9pdGVtcyk7CisKKwlzcGluX2xvY2soJm1ldGFfc2luZm8tPmxvY2spOworCWlmIChtZXRhX3NpbmZvLT5ieXRlc19tYXlfdXNlIDwgbnVtX2J5dGVzKSB7CisJCWJ1ZyA9IHRydWU7CisJCW1ldGFfc2luZm8tPmJ5dGVzX21heV91c2UgPSAwOworCX0gZWxzZSB7CisJCW1ldGFfc2luZm8tPmJ5dGVzX21heV91c2UgLT0gbnVtX2J5dGVzOworCX0KKwlzcGluX3VubG9jaygmbWV0YV9zaW5mby0+bG9jayk7CisKKwlCVUdfT04oYnVnKTsKKworCXJldHVybiAwOworfQorCisvKgorICogUmVzZXJ2ZSBzb21lIG1ldGFkYXRhIHNwYWNlIGZvciB1c2UuICBXZSdsbCBjYWxjdWxhdGUgdGhlIHdvcnN0ZSBjYXNlIG51bWJlcgorICogb2YgYnl0ZXMgdGhhdCB3b3VsZCBiZSBuZWVkZWQgdG8gbW9kaWZ5IG51bV9pdGVtcyBudW1iZXIgb2YgaXRlbXMuICBJZiB3ZQorICogaGF2ZSBzcGFjZSwgZmFudGFzdGljLCBpZiBub3QsIHlvdSBnZXQgLUVOT1NQQy4gIFBsZWFzZSBjYWxsCisgKiBidHJmc191bnJlc2VydmVfbWV0YWRhdGFfc3BhY2Ugd2hlbiB5b3UgYXJlIGRvbmUgZm9yIHRoZSBfU0FNRV8gbnVtYmVyIG9mCisgKiBpdGVtcyB5b3UgcmVzZXJ2ZWQsIHNpbmNlIHdoYXRldmVyIG1ldGFkYXRhIHlvdSBuZWVkZWQgc2hvdWxkIGhhdmUgYWxyZWFkeQorICogYmVlbiBhbGxvY2F0ZWQuCisgKgorICogVGhpcyB3aWxsIGNvbW1pdCB0aGUgdHJhbnNhY3Rpb24gdG8gbWFrZSBtb3JlIHNwYWNlIGlmIHdlIGRvbid0IGhhdmUgZW5vdWdoCisgKiBtZXRhZGF0YSBzcGFjZS4gIFRIZSBvbmx5IHRpbWUgd2UgZG9uJ3QgZG8gdGhpcyBpcyBpZiB3ZSdyZSByZXNlcnZpbmcgc3BhY2UKKyAqIGluc2lkZSBvZiBhIHRyYW5zYWN0aW9uLCB0aGVuIHdlIHdpbGwganVzdCByZXR1cm4gLUVOT1NQQyBhbmQgaXQgaXMgdGhlCisgKiBjYWxsZXJzIHJlc3BvbnNpYmlsaXR5IHRvIGhhbmRsZSBpdCBwcm9wZXJseS4KKyAqLworaW50IGJ0cmZzX3Jlc2VydmVfbWV0YWRhdGFfc3BhY2Uoc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsIGludCBudW1faXRlbXMpCit7CisJc3RydWN0IGJ0cmZzX2ZzX2luZm8gKmluZm8gPSByb290LT5mc19pbmZvOworCXN0cnVjdCBidHJmc19zcGFjZV9pbmZvICptZXRhX3NpbmZvOworCXU2NCBudW1fYnl0ZXM7CisJdTY0IHVzZWQ7CisJdTY0IGFsbG9jX3RhcmdldDsKKwlpbnQgcmV0cmllcyA9IDA7CisKKwkvKiBnZXQgdGhlIHNwYWNlIGluZm8gZm9yIHdoZXJlIHRoZSBtZXRhZGF0YSB3aWxsIGxpdmUgKi8KKwlhbGxvY190YXJnZXQgPSBidHJmc19nZXRfYWxsb2NfcHJvZmlsZShyb290LCAwKTsKKwltZXRhX3NpbmZvID0gX19maW5kX3NwYWNlX2luZm8oaW5mbywgYWxsb2NfdGFyZ2V0KTsKKworCW51bV9ieXRlcyA9IGNhbGN1bGF0ZV9ieXRlc19uZWVkZWQocm9vdCwgbnVtX2l0ZW1zKTsKK2FnYWluOgorCXNwaW5fbG9jaygmbWV0YV9zaW5mby0+bG9jayk7CisKKwlpZiAodW5saWtlbHkoIW1ldGFfc2luZm8tPmJ5dGVzX3Jvb3QpKQorCQltZXRhX3NpbmZvLT5ieXRlc19yb290ID0gY2FsY3VsYXRlX2J5dGVzX25lZWRlZChyb290LCA2KTsKKworCWlmICghcmV0cmllcykKKwkJbWV0YV9zaW5mby0+Ynl0ZXNfbWF5X3VzZSArPSBudW1fYnl0ZXM7CisKKwl1c2VkID0gbWV0YV9zaW5mby0+Ynl0ZXNfdXNlZCArIG1ldGFfc2luZm8tPmJ5dGVzX3Jlc2VydmVkICsKKwkJbWV0YV9zaW5mby0+Ynl0ZXNfcGlubmVkICsgbWV0YV9zaW5mby0+Ynl0ZXNfcmVhZG9ubHkgKworCQltZXRhX3NpbmZvLT5ieXRlc19zdXBlciArIG1ldGFfc2luZm8tPmJ5dGVzX3Jvb3QgKworCQltZXRhX3NpbmZvLT5ieXRlc19tYXlfdXNlICsgbWV0YV9zaW5mby0+Ynl0ZXNfZGVsYWxsb2M7CisKKwlpZiAodXNlZCA+IG1ldGFfc2luZm8tPnRvdGFsX2J5dGVzKSB7CisJCXJldHJpZXMrKzsKKwkJaWYgKHJldHJpZXMgPT0gMSkgeworCQkJaWYgKG1heWJlX2FsbG9jYXRlX2NodW5rKHJvb3QsIG1ldGFfc2luZm8pKQorCQkJCWdvdG8gYWdhaW47CisJCQlyZXRyaWVzKys7CisJCX0gZWxzZSB7CisJCQlzcGluX3VubG9jaygmbWV0YV9zaW5mby0+bG9jayk7CisJCX0KKworCQlpZiAocmV0cmllcyA9PSAyKSB7CisJCQlmbHVzaF9kZWxhbGxvYyhyb290LCBtZXRhX3NpbmZvKTsKKwkJCWdvdG8gYWdhaW47CisJCX0KKwkJc3Bpbl9sb2NrKCZtZXRhX3NpbmZvLT5sb2NrKTsKKwkJbWV0YV9zaW5mby0+Ynl0ZXNfbWF5X3VzZSAtPSBudW1fYnl0ZXM7CisJCXNwaW5fdW5sb2NrKCZtZXRhX3NpbmZvLT5sb2NrKTsKKworCQlkdW1wX3NwYWNlX2luZm8obWV0YV9zaW5mbywgMCwgMCk7CisJCXJldHVybiAtRU5PU1BDOworCX0KKworCWNoZWNrX2ZvcmNlX2RlbGFsbG9jKG1ldGFfc2luZm8pOwogCXNwaW5fdW5sb2NrKCZtZXRhX3NpbmZvLT5sb2NrKTsKIAogCXJldHVybiAwOwpAQCAtMjg4OCw3ICszMjY4LDcgQEAKIAkJc3Bpbl91bmxvY2soJmRhdGFfc2luZm8tPmxvY2spOwogCiAJCS8qIGNvbW1pdCB0aGUgY3VycmVudCB0cmFuc2FjdGlvbiBhbmQgdHJ5IGFnYWluICovCi0JCWlmICghY29tbWl0dGVkKSB7CisJCWlmICghY29tbWl0dGVkICYmICFyb290LT5mc19pbmZvLT5vcGVuX2lvY3RsX3RyYW5zKSB7CiAJCQljb21taXR0ZWQgPSAxOwogCQkJdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uKHJvb3QsIDEpOwogCQkJaWYgKCF0cmFucykKQEAgLTI5MTYsNyArMzI5Niw3IEBACiAJQlRSRlNfSShpbm9kZSktPnJlc2VydmVkX2J5dGVzICs9IGJ5dGVzOwogCXNwaW5fdW5sb2NrKCZkYXRhX3NpbmZvLT5sb2NrKTsKIAotCXJldHVybiBidHJmc19jaGVja19tZXRhZGF0YV9mcmVlX3NwYWNlKHJvb3QpOworCXJldHVybiAwOwogfQogCiAvKgpAQCAtMzAxNSwxNyArMzM5NSwxNSBAQAogCUJVR19PTighc3BhY2VfaW5mbyk7CiAKIAlzcGluX2xvY2soJnNwYWNlX2luZm8tPmxvY2spOwotCWlmIChzcGFjZV9pbmZvLT5mb3JjZV9hbGxvYykgeworCWlmIChzcGFjZV9pbmZvLT5mb3JjZV9hbGxvYykKIAkJZm9yY2UgPSAxOwotCQlzcGFjZV9pbmZvLT5mb3JjZV9hbGxvYyA9IDA7Ci0JfQogCWlmIChzcGFjZV9pbmZvLT5mdWxsKSB7CiAJCXNwaW5fdW5sb2NrKCZzcGFjZV9pbmZvLT5sb2NrKTsKIAkJZ290byBvdXQ7CiAJfQogCiAJdGhyZXNoID0gc3BhY2VfaW5mby0+dG90YWxfYnl0ZXMgLSBzcGFjZV9pbmZvLT5ieXRlc19yZWFkb25seTsKLQl0aHJlc2ggPSBkaXZfZmFjdG9yKHRocmVzaCwgNik7CisJdGhyZXNoID0gZGl2X2ZhY3Rvcih0aHJlc2gsIDgpOwogCWlmICghZm9yY2UgJiYKIAkgICAoc3BhY2VfaW5mby0+Ynl0ZXNfdXNlZCArIHNwYWNlX2luZm8tPmJ5dGVzX3Bpbm5lZCArCiAJICAgIHNwYWNlX2luZm8tPmJ5dGVzX3Jlc2VydmVkICsgYWxsb2NfYnl0ZXMpIDwgdGhyZXNoKSB7CkBAIC0zMDM5LDcgKzM0MTcsNyBAQAogCSAqIHdlIGtlZXAgYSByZWFzb25hYmxlIG51bWJlciBvZiBtZXRhZGF0YSBjaHVua3MgYWxsb2NhdGVkIGluIHRoZQogCSAqIEZTIGFzIHdlbGwuCiAJICovCi0JaWYgKGZsYWdzICYgQlRSRlNfQkxPQ0tfR1JPVVBfREFUQSkgeworCWlmIChmbGFncyAmIEJUUkZTX0JMT0NLX0dST1VQX0RBVEEgJiYgZnNfaW5mby0+bWV0YWRhdGFfcmF0aW8pIHsKIAkJZnNfaW5mby0+ZGF0YV9jaHVua19hbGxvY2F0aW9ucysrOwogCQlpZiAoIShmc19pbmZvLT5kYXRhX2NodW5rX2FsbG9jYXRpb25zICUKIAkJICAgICAgZnNfaW5mby0+bWV0YWRhdGFfcmF0aW8pKQpAQCAtMzA0Nyw4ICszNDI1LDExIEBACiAJfQogCiAJcmV0ID0gYnRyZnNfYWxsb2NfY2h1bmsodHJhbnMsIGV4dGVudF9yb290LCBmbGFncyk7CisJc3Bpbl9sb2NrKCZzcGFjZV9pbmZvLT5sb2NrKTsKIAlpZiAocmV0KQogCQlzcGFjZV9pbmZvLT5mdWxsID0gMTsKKwlzcGFjZV9pbmZvLT5mb3JjZV9hbGxvYyA9IDA7CisJc3Bpbl91bmxvY2soJnNwYWNlX2luZm8tPmxvY2spOwogb3V0OgogCW11dGV4X3VubG9jaygmZXh0ZW50X3Jvb3QtPmZzX2luZm8tPmNodW5rX211dGV4KTsKIAlyZXR1cm4gcmV0OwpAQCAtMzMwNiw2ICszNjg3LDE0IEBACiAJaWYgKGlzX2RhdGEpCiAJCWdvdG8gcGluaXQ7CiAKKwkvKgorCSAqIGRpc2NhcmQgaXMgc2xvb29vdywgYW5kIHNvIHRyaWdnZXJpbmcgZGlzY2FyZHMgb24KKwkgKiBpbmRpdmlkdWFsIGJ0cmVlIGJsb2NrcyBpc24ndCBhIGdvb2QgcGxhbi4gIEp1c3QKKwkgKiBwaW4gZXZlcnl0aGluZyBpbiBkaXNjYXJkIG1vZGUuCisJICovCisJaWYgKGJ0cmZzX3Rlc3Rfb3B0KHJvb3QsIERJU0NBUkQpKQorCQlnb3RvIHBpbml0OworCiAJYnVmID0gYnRyZnNfZmluZF90cmVlX2Jsb2NrKHJvb3QsIGJ5dGVuciwgbnVtX2J5dGVzKTsKIAlpZiAoIWJ1ZikKIAkJZ290byBwaW5pdDsKQEAgLTM3NDcsNiArNDEzNiw3IEBACiAJaW50IGxvb3AgPSAwOwogCWJvb2wgZm91bmRfdW5jYWNoZWRfYmcgPSBmYWxzZTsKIAlib29sIGZhaWxlZF9jbHVzdGVyX3JlZmlsbCA9IGZhbHNlOworCWJvb2wgZmFpbGVkX2FsbG9jID0gZmFsc2U7CiAKIAlXQVJOX09OKG51bV9ieXRlcyA8IHJvb3QtPnNlY3RvcnNpemUpOwogCWJ0cmZzX3NldF9rZXlfdHlwZShpbnMsIEJUUkZTX0VYVEVOVF9JVEVNX0tFWSk7CkBAIC0zOTUxLDE0ICs0MzQxLDIzIEBACiAKIAkJb2Zmc2V0ID0gYnRyZnNfZmluZF9zcGFjZV9mb3JfYWxsb2MoYmxvY2tfZ3JvdXAsIHNlYXJjaF9zdGFydCwKIAkJCQkJCSAgICBudW1fYnl0ZXMsIGVtcHR5X3NpemUpOwotCQlpZiAoIW9mZnNldCAmJiAoY2FjaGVkIHx8ICghY2FjaGVkICYmCi0JCQkJCSAgIGxvb3AgPT0gTE9PUF9DQUNISU5HX05PV0FJVCkpKSB7Ci0JCQlnb3RvIGxvb3A7Ci0JCX0gZWxzZSBpZiAoIW9mZnNldCAmJiAoIWNhY2hlZCAmJgotCQkJCSAgICAgICBsb29wID4gTE9PUF9DQUNISU5HX05PV0FJVCkpIHsKKwkJLyoKKwkJICogSWYgd2UgZGlkbid0IGZpbmQgYSBjaHVuaywgYW5kIHdlIGhhdmVuJ3QgZmFpbGVkIG9uIHRoaXMKKwkJICogYmxvY2sgZ3JvdXAgYmVmb3JlLCBhbmQgdGhpcyBibG9jayBncm91cCBpcyBpbiB0aGUgbWlkZGxlIG9mCisJCSAqIGNhY2hpbmcgYW5kIHdlIGFyZSBvayB3aXRoIHdhaXRpbmcsIHRoZW4gZ28gYWhlYWQgYW5kIHdhaXQKKwkJICogZm9yIHByb2dyZXNzIHRvIGJlIG1hZGUsIGFuZCBzZXQgZmFpbGVkX2FsbG9jIHRvIHRydWUuCisJCSAqCisJCSAqIElmIGZhaWxlZF9hbGxvYyBpcyB0cnVlIHRoZW4gd2UndmUgYWxyZWFkeSB3YWl0ZWQgb24gdGhpcworCQkgKiBibG9jayBncm91cCBvbmNlIGFuZCBzaG91bGQgbW92ZSBvbiB0byB0aGUgbmV4dCBibG9jayBncm91cC4KKwkJICovCisJCWlmICghb2Zmc2V0ICYmICFmYWlsZWRfYWxsb2MgJiYgIWNhY2hlZCAmJgorCQkgICAgbG9vcCA+IExPT1BfQ0FDSElOR19OT1dBSVQpIHsKIAkJCXdhaXRfYmxvY2tfZ3JvdXBfY2FjaGVfcHJvZ3Jlc3MoYmxvY2tfZ3JvdXAsCi0JCQkJCW51bV9ieXRlcyArIGVtcHR5X3NpemUpOworCQkJCQkJbnVtX2J5dGVzICsgZW1wdHlfc2l6ZSk7CisJCQlmYWlsZWRfYWxsb2MgPSB0cnVlOwogCQkJZ290byBoYXZlX2Jsb2NrX2dyb3VwOworCQl9IGVsc2UgaWYgKCFvZmZzZXQpIHsKKwkJCWdvdG8gbG9vcDsKIAkJfQogY2hlY2tzOgogCQlzZWFyY2hfc3RhcnQgPSBzdHJpcGVfYWxpZ24ocm9vdCwgb2Zmc2V0KTsKQEAgLTQwMDYsNiArNDQwNSw3IEBACiAJCWJyZWFrOwogbG9vcDoKIAkJZmFpbGVkX2NsdXN0ZXJfcmVmaWxsID0gZmFsc2U7CisJCWZhaWxlZF9hbGxvYyA9IGZhbHNlOwogCQlidHJmc19wdXRfYmxvY2tfZ3JvdXAoYmxvY2tfZ3JvdXApOwogCX0KIAl1cF9yZWFkKCZzcGFjZV9pbmZvLT5ncm91cHNfc2VtKTsKQEAgLTQwNjMsMjEgKzQ0NjMsMzIgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgdm9pZCBkdW1wX3NwYWNlX2luZm8oc3RydWN0IGJ0cmZzX3NwYWNlX2luZm8gKmluZm8sIHU2NCBieXRlcykKK3N0YXRpYyB2b2lkIGR1bXBfc3BhY2VfaW5mbyhzdHJ1Y3QgYnRyZnNfc3BhY2VfaW5mbyAqaW5mbywgdTY0IGJ5dGVzLAorCQkJICAgIGludCBkdW1wX2Jsb2NrX2dyb3VwcykKIHsKIAlzdHJ1Y3QgYnRyZnNfYmxvY2tfZ3JvdXBfY2FjaGUgKmNhY2hlOwogCisJc3Bpbl9sb2NrKCZpbmZvLT5sb2NrKTsKIAlwcmludGsoS0VSTl9JTkZPICJzcGFjZV9pbmZvIGhhcyAlbGx1IGZyZWUsIGlzICVzZnVsbFxuIiwKIAkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykoaW5mby0+dG90YWxfYnl0ZXMgLSBpbmZvLT5ieXRlc191c2VkIC0KLQkJCQkgICAgaW5mby0+Ynl0ZXNfcGlubmVkIC0gaW5mby0+Ynl0ZXNfcmVzZXJ2ZWQpLAorCQkJCSAgICBpbmZvLT5ieXRlc19waW5uZWQgLSBpbmZvLT5ieXRlc19yZXNlcnZlZCAtCisJCQkJICAgIGluZm8tPmJ5dGVzX3N1cGVyKSwKIAkgICAgICAgKGluZm8tPmZ1bGwpID8gIiIgOiAibm90ICIpOwogCXByaW50ayhLRVJOX0lORk8gInNwYWNlX2luZm8gdG90YWw9JWxsdSwgcGlubmVkPSVsbHUsIGRlbGFsbG9jPSVsbHUsIgotCSAgICAgICAiIG1heV91c2U9JWxsdSwgdXNlZD0lbGx1XG4iLAorCSAgICAgICAiIG1heV91c2U9JWxsdSwgdXNlZD0lbGx1LCByb290PSVsbHUsIHN1cGVyPSVsbHUsIHJlc2VydmVkPSVsbHUiCisJICAgICAgICJcbiIsCiAJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpaW5mby0+dG90YWxfYnl0ZXMsCiAJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpaW5mby0+Ynl0ZXNfcGlubmVkLAogCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKWluZm8tPmJ5dGVzX2RlbGFsbG9jLAogCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKWluZm8tPmJ5dGVzX21heV91c2UsCi0JICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpaW5mby0+Ynl0ZXNfdXNlZCk7CisJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpaW5mby0+Ynl0ZXNfdXNlZCwKKwkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylpbmZvLT5ieXRlc19yb290LAorCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKWluZm8tPmJ5dGVzX3N1cGVyLAorCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKWluZm8tPmJ5dGVzX3Jlc2VydmVkKTsKKwlzcGluX3VubG9jaygmaW5mby0+bG9jayk7CisKKwlpZiAoIWR1bXBfYmxvY2tfZ3JvdXBzKQorCQlyZXR1cm47CiAKIAlkb3duX3JlYWQoJmluZm8tPmdyb3Vwc19zZW0pOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoY2FjaGUsICZpbmZvLT5ibG9ja19ncm91cHMsIGxpc3QpIHsKQEAgLTQxNDUsNyArNDU1Niw3IEBACiAJCXByaW50ayhLRVJOX0VSUiAiYnRyZnMgYWxsb2NhdGlvbiBmYWlsZWQgZmxhZ3MgJWxsdSwgIgogCQkgICAgICAgIndhbnRlZCAlbGx1XG4iLCAodW5zaWduZWQgbG9uZyBsb25nKWRhdGEsCiAJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKW51bV9ieXRlcyk7Ci0JCWR1bXBfc3BhY2VfaW5mbyhzaW5mbywgbnVtX2J5dGVzKTsKKwkJZHVtcF9zcGFjZV9pbmZvKHNpbmZvLCBudW1fYnl0ZXMsIDEpOwogCX0KIAogCXJldHVybiByZXQ7CkBAIC00NTA2LDYgKzQ5MTcsNyBAQAogCXU2NCBieXRlbnI7CiAJdTY0IGdlbmVyYXRpb247CiAJdTY0IHJlZnM7CisJdTY0IGZsYWdzOwogCXU2NCBsYXN0ID0gMDsKIAl1MzIgbnJpdGVtczsKIAl1MzIgYmxvY2tzaXplOwpAQCAtNDU0MywxNSArNDk1NSwxOSBAQAogCQkgICAgZ2VuZXJhdGlvbiA8PSByb290LT5yb290X2tleS5vZmZzZXQpCiAJCQljb250aW51ZTsKIAorCQkvKiBXZSBkb24ndCBsb2NrIHRoZSB0cmVlIGJsb2NrLCBpdCdzIE9LIHRvIGJlIHJhY3kgaGVyZSAqLworCQlyZXQgPSBidHJmc19sb29rdXBfZXh0ZW50X2luZm8odHJhbnMsIHJvb3QsIGJ5dGVuciwgYmxvY2tzaXplLAorCQkJCQkgICAgICAgJnJlZnMsICZmbGFncyk7CisJCUJVR19PTihyZXQpOworCQlCVUdfT04ocmVmcyA9PSAwKTsKKwogCQlpZiAod2MtPnN0YWdlID09IERST1BfUkVGRVJFTkNFKSB7Ci0JCQlyZXQgPSBidHJmc19sb29rdXBfZXh0ZW50X2luZm8odHJhbnMsIHJvb3QsCi0JCQkJCQlieXRlbnIsIGJsb2Nrc2l6ZSwKLQkJCQkJCSZyZWZzLCBOVUxMKTsKLQkJCUJVR19PTihyZXQpOwotCQkJQlVHX09OKHJlZnMgPT0gMCk7CiAJCQlpZiAocmVmcyA9PSAxKQogCQkJCWdvdG8gcmVhZGE7CiAKKwkJCWlmICh3Yy0+bGV2ZWwgPT0gMSAmJgorCQkJICAgIChmbGFncyAmIEJUUkZTX0JMT0NLX0ZMQUdfRlVMTF9CQUNLUkVGKSkKKwkJCQljb250aW51ZTsKIAkJCWlmICghd2MtPnVwZGF0ZV9yZWYgfHwKIAkJCSAgICBnZW5lcmF0aW9uIDw9IHJvb3QtPnJvb3Rfa2V5Lm9mZnNldCkKIAkJCQljb250aW51ZTsKQEAgLTQ1NjAsNiArNDk3NiwxMCBAQAogCQkJCQkJICAmd2MtPnVwZGF0ZV9wcm9ncmVzcyk7CiAJCQlpZiAocmV0IDwgMCkKIAkJCQljb250aW51ZTsKKwkJfSBlbHNlIHsKKwkJCWlmICh3Yy0+bGV2ZWwgPT0gMSAmJgorCQkJICAgIChmbGFncyAmIEJUUkZTX0JMT0NLX0ZMQUdfRlVMTF9CQUNLUkVGKSkKKwkJCQljb250aW51ZTsKIAkJfQogcmVhZGE6CiAJCXJldCA9IHJlYWRhaGVhZF90cmVlX2Jsb2NrKHJvb3QsIGJ5dGVuciwgYmxvY2tzaXplLApAQCAtNDU4Myw3ICs1MDAzLDcgQEAKIHN0YXRpYyBub2lubGluZSBpbnQgd2Fsa19kb3duX3Byb2Moc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCiAJCQkJICAgc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsCiAJCQkJICAgc3RydWN0IGJ0cmZzX3BhdGggKnBhdGgsCi0JCQkJICAgc3RydWN0IHdhbGtfY29udHJvbCAqd2MpCisJCQkJICAgc3RydWN0IHdhbGtfY29udHJvbCAqd2MsIGludCBsb29rdXBfaW5mbykKIHsKIAlpbnQgbGV2ZWwgPSB3Yy0+bGV2ZWw7CiAJc3RydWN0IGV4dGVudF9idWZmZXIgKmViID0gcGF0aC0+bm9kZXNbbGV2ZWxdOwpAQCAtNDU5OCw4ICs1MDE4LDkgQEAKIAkgKiB3aGVuIHJlZmVyZW5jZSBjb3VudCBvZiB0cmVlIGJsb2NrIGlzIDEsIGl0IHdvbid0IGluY3JlYXNlCiAJICogYWdhaW4uIG9uY2UgZnVsbCBiYWNrcmVmIGZsYWcgaXMgc2V0LCB3ZSBuZXZlciBjbGVhciBpdC4KIAkgKi8KLQlpZiAoKHdjLT5zdGFnZSA9PSBEUk9QX1JFRkVSRU5DRSAmJiB3Yy0+cmVmc1tsZXZlbF0gIT0gMSkgfHwKLQkgICAgKHdjLT5zdGFnZSA9PSBVUERBVEVfQkFDS1JFRiAmJiAhKHdjLT5mbGFnc1tsZXZlbF0gJiBmbGFnKSkpIHsKKwlpZiAobG9va3VwX2luZm8gJiYKKwkgICAgKCh3Yy0+c3RhZ2UgPT0gRFJPUF9SRUZFUkVOQ0UgJiYgd2MtPnJlZnNbbGV2ZWxdICE9IDEpIHx8CisJICAgICAod2MtPnN0YWdlID09IFVQREFURV9CQUNLUkVGICYmICEod2MtPmZsYWdzW2xldmVsXSAmIGZsYWcpKSkpIHsKIAkJQlVHX09OKCFwYXRoLT5sb2Nrc1tsZXZlbF0pOwogCQlyZXQgPSBidHJmc19sb29rdXBfZXh0ZW50X2luZm8odHJhbnMsIHJvb3QsCiAJCQkJCSAgICAgICBlYi0+c3RhcnQsIGViLT5sZW4sCkBAIC00NjYwLDcgKzUwODEsNyBAQAogc3RhdGljIG5vaW5saW5lIGludCBkb193YWxrX2Rvd24oc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCiAJCQkJIHN0cnVjdCBidHJmc19yb290ICpyb290LAogCQkJCSBzdHJ1Y3QgYnRyZnNfcGF0aCAqcGF0aCwKLQkJCQkgc3RydWN0IHdhbGtfY29udHJvbCAqd2MpCisJCQkJIHN0cnVjdCB3YWxrX2NvbnRyb2wgKndjLCBpbnQgKmxvb2t1cF9pbmZvKQogewogCXU2NCBieXRlbnI7CiAJdTY0IGdlbmVyYXRpb247CkBAIC00NjgwLDggKzUxMDEsMTAgQEAKIAkgKiBmb3IgdGhlIHN1YnRyZWUKIAkgKi8KIAlpZiAod2MtPnN0YWdlID09IFVQREFURV9CQUNLUkVGICYmCi0JICAgIGdlbmVyYXRpb24gPD0gcm9vdC0+cm9vdF9rZXkub2Zmc2V0KQorCSAgICBnZW5lcmF0aW9uIDw9IHJvb3QtPnJvb3Rfa2V5Lm9mZnNldCkgeworCQkqbG9va3VwX2luZm8gPSAxOwogCQlyZXR1cm4gMTsKKwl9CiAKIAlieXRlbnIgPSBidHJmc19ub2RlX2Jsb2NrcHRyKHBhdGgtPm5vZGVzW2xldmVsXSwgcGF0aC0+c2xvdHNbbGV2ZWxdKTsKIAlibG9ja3NpemUgPSBidHJmc19sZXZlbF9zaXplKHJvb3QsIGxldmVsIC0gMSk7CkBAIC00Njk0LDE0ICs1MTE3LDE5IEBACiAJYnRyZnNfdHJlZV9sb2NrKG5leHQpOwogCWJ0cmZzX3NldF9sb2NrX2Jsb2NraW5nKG5leHQpOwogCi0JaWYgKHdjLT5zdGFnZSA9PSBEUk9QX1JFRkVSRU5DRSkgewotCQlyZXQgPSBidHJmc19sb29rdXBfZXh0ZW50X2luZm8odHJhbnMsIHJvb3QsIGJ5dGVuciwgYmxvY2tzaXplLAotCQkJCQkgICAgICAgJndjLT5yZWZzW2xldmVsIC0gMV0sCi0JCQkJCSAgICAgICAmd2MtPmZsYWdzW2xldmVsIC0gMV0pOwotCQlCVUdfT04ocmV0KTsKLQkJQlVHX09OKHdjLT5yZWZzW2xldmVsIC0gMV0gPT0gMCk7CisJcmV0ID0gYnRyZnNfbG9va3VwX2V4dGVudF9pbmZvKHRyYW5zLCByb290LCBieXRlbnIsIGJsb2Nrc2l6ZSwKKwkJCQkgICAgICAgJndjLT5yZWZzW2xldmVsIC0gMV0sCisJCQkJICAgICAgICZ3Yy0+ZmxhZ3NbbGV2ZWwgLSAxXSk7CisJQlVHX09OKHJldCk7CisJQlVHX09OKHdjLT5yZWZzW2xldmVsIC0gMV0gPT0gMCk7CisJKmxvb2t1cF9pbmZvID0gMDsKIAorCWlmICh3Yy0+c3RhZ2UgPT0gRFJPUF9SRUZFUkVOQ0UpIHsKIAkJaWYgKHdjLT5yZWZzW2xldmVsIC0gMV0gPiAxKSB7CisJCQlpZiAobGV2ZWwgPT0gMSAmJgorCQkJICAgICh3Yy0+ZmxhZ3NbMF0gJiBCVFJGU19CTE9DS19GTEFHX0ZVTExfQkFDS1JFRikpCisJCQkJZ290byBza2lwOworCiAJCQlpZiAoIXdjLT51cGRhdGVfcmVmIHx8CiAJCQkgICAgZ2VuZXJhdGlvbiA8PSByb290LT5yb290X2tleS5vZmZzZXQpCiAJCQkJZ290byBza2lwOwpAQCAtNDcxNSwxMiArNTE0MywxNyBAQAogCQkJd2MtPnN0YWdlID0gVVBEQVRFX0JBQ0tSRUY7CiAJCQl3Yy0+c2hhcmVkX2xldmVsID0gbGV2ZWwgLSAxOwogCQl9CisJfSBlbHNlIHsKKwkJaWYgKGxldmVsID09IDEgJiYKKwkJICAgICh3Yy0+ZmxhZ3NbMF0gJiBCVFJGU19CTE9DS19GTEFHX0ZVTExfQkFDS1JFRikpCisJCQlnb3RvIHNraXA7CiAJfQogCiAJaWYgKCFidHJmc19idWZmZXJfdXB0b2RhdGUobmV4dCwgZ2VuZXJhdGlvbikpIHsKIAkJYnRyZnNfdHJlZV91bmxvY2sobmV4dCk7CiAJCWZyZWVfZXh0ZW50X2J1ZmZlcihuZXh0KTsKIAkJbmV4dCA9IE5VTEw7CisJCSpsb29rdXBfaW5mbyA9IDE7CiAJfQogCiAJaWYgKCFuZXh0KSB7CkBAIC00NzQzLDIxICs1MTc2LDIyIEBACiBza2lwOgogCXdjLT5yZWZzW2xldmVsIC0gMV0gPSAwOwogCXdjLT5mbGFnc1tsZXZlbCAtIDFdID0gMDsKKwlpZiAod2MtPnN0YWdlID09IERST1BfUkVGRVJFTkNFKSB7CisJCWlmICh3Yy0+ZmxhZ3NbbGV2ZWxdICYgQlRSRlNfQkxPQ0tfRkxBR19GVUxMX0JBQ0tSRUYpIHsKKwkJCXBhcmVudCA9IHBhdGgtPm5vZGVzW2xldmVsXS0+c3RhcnQ7CisJCX0gZWxzZSB7CisJCQlCVUdfT04ocm9vdC0+cm9vdF9rZXkub2JqZWN0aWQgIT0KKwkJCSAgICAgICBidHJmc19oZWFkZXJfb3duZXIocGF0aC0+bm9kZXNbbGV2ZWxdKSk7CisJCQlwYXJlbnQgPSAwOworCQl9CiAKLQlpZiAod2MtPmZsYWdzW2xldmVsXSAmIEJUUkZTX0JMT0NLX0ZMQUdfRlVMTF9CQUNLUkVGKSB7Ci0JCXBhcmVudCA9IHBhdGgtPm5vZGVzW2xldmVsXS0+c3RhcnQ7Ci0JfSBlbHNlIHsKLQkJQlVHX09OKHJvb3QtPnJvb3Rfa2V5Lm9iamVjdGlkICE9Ci0JCSAgICAgICBidHJmc19oZWFkZXJfb3duZXIocGF0aC0+bm9kZXNbbGV2ZWxdKSk7Ci0JCXBhcmVudCA9IDA7CisJCXJldCA9IGJ0cmZzX2ZyZWVfZXh0ZW50KHRyYW5zLCByb290LCBieXRlbnIsIGJsb2Nrc2l6ZSwgcGFyZW50LAorCQkJCQlyb290LT5yb290X2tleS5vYmplY3RpZCwgbGV2ZWwgLSAxLCAwKTsKKwkJQlVHX09OKHJldCk7CiAJfQotCi0JcmV0ID0gYnRyZnNfZnJlZV9leHRlbnQodHJhbnMsIHJvb3QsIGJ5dGVuciwgYmxvY2tzaXplLCBwYXJlbnQsCi0JCQkJcm9vdC0+cm9vdF9rZXkub2JqZWN0aWQsIGxldmVsIC0gMSwgMCk7Ci0JQlVHX09OKHJldCk7Ci0KIAlidHJmc190cmVlX3VubG9jayhuZXh0KTsKIAlmcmVlX2V4dGVudF9idWZmZXIobmV4dCk7CisJKmxvb2t1cF9pbmZvID0gMTsKIAlyZXR1cm4gMTsKIH0KIApAQCAtNDg3MSw2ICs1MzA1LDcgQEAKIAkJCQkgICBzdHJ1Y3Qgd2Fsa19jb250cm9sICp3YykKIHsKIAlpbnQgbGV2ZWwgPSB3Yy0+bGV2ZWw7CisJaW50IGxvb2t1cF9pbmZvID0gMTsKIAlpbnQgcmV0OwogCiAJd2hpbGUgKGxldmVsID49IDApIHsKQEAgLTQ4NzgsMTQgKzUzMTMsMTQgQEAKIAkJICAgIGJ0cmZzX2hlYWRlcl9ucml0ZW1zKHBhdGgtPm5vZGVzW2xldmVsXSkpCiAJCQlicmVhazsKIAotCQlyZXQgPSB3YWxrX2Rvd25fcHJvYyh0cmFucywgcm9vdCwgcGF0aCwgd2MpOworCQlyZXQgPSB3YWxrX2Rvd25fcHJvYyh0cmFucywgcm9vdCwgcGF0aCwgd2MsIGxvb2t1cF9pbmZvKTsKIAkJaWYgKHJldCA+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+ZW5kIDw9IGVuZCkgewotCQkJc2V0IHw9IGNsZWFyX3N0YXRlX2JpdCh0cmVlLCBzdGF0ZSwgYml0cywKLQkJCQkJd2FrZSwgZGVsZXRlKTsKKwkJCXNldCB8PSBjbGVhcl9zdGF0ZV9iaXQodHJlZSwgc3RhdGUsIGJpdHMsIHdha2UsCisJCQkJCSAgICAgICBkZWxldGUpOwogCQkJaWYgKGxhc3RfZW5kID09ICh1NjQpLTEpCiAJCQkJZ290byBvdXQ7CiAJCQlzdGFydCA9IGxhc3RfZW5kICsgMTsKQEAgLTU2MSwxMiArNTkxLDExIEBACiAJCQlwcmVhbGxvYyA9IGFsbG9jX2V4dGVudF9zdGF0ZShHRlBfQVRPTUlDKTsKIAkJZXJyID0gc3BsaXRfc3RhdGUodHJlZSwgc3RhdGUsIHByZWFsbG9jLCBlbmQgKyAxKTsKIAkJQlVHX09OKGVyciA9PSAtRUVYSVNUKTsKLQogCQlpZiAod2FrZSkKIAkJCXdha2VfdXAoJnN0YXRlLT53cSk7CiAKLQkJc2V0IHw9IGNsZWFyX3N0YXRlX2JpdCh0cmVlLCBwcmVhbGxvYywgYml0cywKLQkJCQkgICAgICAgd2FrZSwgZGVsZXRlKTsKKwkJc2V0IHw9IGNsZWFyX3N0YXRlX2JpdCh0cmVlLCBwcmVhbGxvYywgYml0cywgd2FrZSwgZGVsZXRlKTsKKwogCQlwcmVhbGxvYyA9IE5VTEw7CiAJCWdvdG8gb3V0OwogCX0KQEAgLTY2NywxNiArNjk2LDIzIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHNldF9zdGF0ZV9iaXRzKHN0cnVjdCBleHRlbnRfaW9fdHJlZSAqdHJlZSwKK3N0YXRpYyBpbnQgc2V0X3N0YXRlX2JpdHMoc3RydWN0IGV4dGVudF9pb190cmVlICp0cmVlLAogCQkJICAgc3RydWN0IGV4dGVudF9zdGF0ZSAqc3RhdGUsCiAJCQkgICBpbnQgYml0cykKIHsKKwlpbnQgcmV0OworCisJcmV0ID0gc2V0X3N0YXRlX2NiKHRyZWUsIHN0YXRlLCBiaXRzKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCiAJaWYgKChiaXRzICYgRVhURU5UX0RJUlRZKSAmJiAhKHN0YXRlLT5zdGF0ZSAmIEVYVEVOVF9ESVJUWSkpIHsKIAkJdTY0IHJhbmdlID0gc3RhdGUtPmVuZCAtIHN0YXRlLT5zdGFydCArIDE7CiAJCXRyZWUtPmRpcnR5X2J5dGVzICs9IHJhbmdlOwogCX0KLQlzZXRfc3RhdGVfY2IodHJlZSwgc3RhdGUsIGJpdHMpOwogCXN0YXRlLT5zdGF0ZSB8PSBiaXRzOworCisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIGNhY2hlX3N0YXRlKHN0cnVjdCBleHRlbnRfc3RhdGUgKnN0YXRlLApAQCAtNzU4LDcgKzc5NCwxMCBAQAogCQkJZ290byBvdXQ7CiAJCX0KIAotCQlzZXRfc3RhdGVfYml0cyh0cmVlLCBzdGF0ZSwgYml0cyk7CisJCWVyciA9IHNldF9zdGF0ZV9iaXRzKHRyZWUsIHN0YXRlLCBiaXRzKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gb3V0OworCiAJCWNhY2hlX3N0YXRlKHN0YXRlLCBjYWNoZWRfc3RhdGUpOwogCQltZXJnZV9zdGF0ZSh0cmVlLCBzdGF0ZSk7CiAJCWlmIChsYXN0X2VuZCA9PSAodTY0KS0xKQpAQCAtODA1LDcgKzg0NCw5IEBACiAJCWlmIChlcnIpCiAJCQlnb3RvIG91dDsKIAkJaWYgKHN0YXRlLT5lbmQgPD0gZW5kKSB7Ci0JCQlzZXRfc3RhdGVfYml0cyh0cmVlLCBzdGF0ZSwgYml0cyk7CisJCQllcnIgPSBzZXRfc3RhdGVfYml0cyh0cmVlLCBzdGF0ZSwgYml0cyk7CisJCQlpZiAoZXJyKQorCQkJCWdvdG8gb3V0OwogCQkJY2FjaGVfc3RhdGUoc3RhdGUsIGNhY2hlZF9zdGF0ZSk7CiAJCQltZXJnZV9zdGF0ZSh0cmVlLCBzdGF0ZSk7CiAJCQlpZiAobGFzdF9lbmQgPT0gKHU2NCktMSkKQEAgLTgyOSwxMSArODcwLDEzIEBACiAJCQl0aGlzX2VuZCA9IGxhc3Rfc3RhcnQgLSAxOwogCQllcnIgPSBpbnNlcnRfc3RhdGUodHJlZSwgcHJlYWxsb2MsIHN0YXJ0LCB0aGlzX2VuZCwKIAkJCQkgICBiaXRzKTsKKwkJQlVHX09OKGVyciA9PSAtRUVYSVNUKTsKKwkJaWYgKGVycikgeworCQkJcHJlYWxsb2MgPSBOVUxMOworCQkJZ290byBvdXQ7CisJCX0KIAkJY2FjaGVfc3RhdGUocHJlYWxsb2MsIGNhY2hlZF9zdGF0ZSk7CiAJCXByZWFsbG9jID0gTlVMTDsKLQkJQlVHX09OKGVyciA9PSAtRUVYSVNUKTsKLQkJaWYgKGVycikKLQkJCWdvdG8gb3V0OwogCQlzdGFydCA9IHRoaXNfZW5kICsgMTsKIAkJZ290byBzZWFyY2hfYWdhaW47CiAJfQpAQCAtODUyLDcgKzg5NSwxMSBAQAogCQllcnIgPSBzcGxpdF9zdGF0ZSh0cmVlLCBzdGF0ZSwgcHJlYWxsb2MsIGVuZCArIDEpOwogCQlCVUdfT04oZXJyID09IC1FRVhJU1QpOwogCi0JCXNldF9zdGF0ZV9iaXRzKHRyZWUsIHByZWFsbG9jLCBiaXRzKTsKKwkJZXJyID0gc2V0X3N0YXRlX2JpdHModHJlZSwgcHJlYWxsb2MsIGJpdHMpOworCQlpZiAoZXJyKSB7CisJCQlwcmVhbGxvYyA9IE5VTEw7CisJCQlnb3RvIG91dDsKKwkJfQogCQljYWNoZV9zdGF0ZShwcmVhbGxvYywgY2FjaGVkX3N0YXRlKTsKIAkJbWVyZ2Vfc3RhdGUodHJlZSwgcHJlYWxsb2MpOwogCQlwcmVhbGxvYyA9IE5VTEw7CkBAIC05MTAsNyArOTU3LDggQEAKIAkJICAgICAgIGdmcF90IG1hc2spCiB7CiAJcmV0dXJuIGNsZWFyX2V4dGVudF9iaXQodHJlZSwgc3RhcnQsIGVuZCwKLQkJCQlFWFRFTlRfRElSVFkgfCBFWFRFTlRfREVMQUxMT0MsIDAsIDAsCisJCQkJRVhURU5UX0RJUlRZIHwgRVhURU5UX0RFTEFMTE9DIHwKKwkJCQlFWFRFTlRfRE9fQUNDT1VOVElORywgMCwgMCwKIAkJCQlOVUxMLCBtYXNrKTsKIH0KIApAQCAtMTM1NSwxMiArMTQwMyw3IEBACiBpbnQgZXh0ZW50X2NsZWFyX3VubG9ja19kZWxhbGxvYyhzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJCXN0cnVjdCBleHRlbnRfaW9fdHJlZSAqdHJlZSwKIAkJCQl1NjQgc3RhcnQsIHU2NCBlbmQsIHN0cnVjdCBwYWdlICpsb2NrZWRfcGFnZSwKLQkJCQlpbnQgdW5sb2NrX3BhZ2VzLAotCQkJCWludCBjbGVhcl91bmxvY2ssCi0JCQkJaW50IGNsZWFyX2RlbGFsbG9jLCBpbnQgY2xlYXJfZGlydHksCi0JCQkJaW50IHNldF93cml0ZWJhY2ssCi0JCQkJaW50IGVuZF93cml0ZWJhY2ssCi0JCQkJaW50IHNldF9wcml2YXRlMikKKwkJCQl1bnNpZ25lZCBsb25nIG9wKQogewogCWludCByZXQ7CiAJc3RydWN0IHBhZ2UgKnBhZ2VzWzE2XTsKQEAgLTEzNzAsMTcgKzE0MTMsMjEgQEAKIAlpbnQgaTsKIAlpbnQgY2xlYXJfYml0cyA9IDA7CiAKLQlpZiAoY2xlYXJfdW5sb2NrKQorCWlmIChvcCAmIEVYVEVOVF9DTEVBUl9VTkxPQ0spCiAJCWNsZWFyX2JpdHMgfD0gRVhURU5UX0xPQ0tFRDsKLQlpZiAoY2xlYXJfZGlydHkpCisJaWYgKG9wICYgRVhURU5UX0NMRUFSX0RJUlRZKQogCQljbGVhcl9iaXRzIHw9IEVYVEVOVF9ESVJUWTsKIAotCWlmIChjbGVhcl9kZWxhbGxvYykKKwlpZiAob3AgJiBFWFRFTlRfQ0xFQVJfREVMQUxMT0MpCiAJCWNsZWFyX2JpdHMgfD0gRVhURU5UX0RFTEFMTE9DOwogCisJaWYgKG9wICYgRVhURU5UX0NMRUFSX0FDQ09VTlRJTkcpCisJCWNsZWFyX2JpdHMgfD0gRVhURU5UX0RPX0FDQ09VTlRJTkc7CisKIAljbGVhcl9leHRlbnRfYml0KHRyZWUsIHN0YXJ0LCBlbmQsIGNsZWFyX2JpdHMsIDEsIDAsIE5VTEwsIEdGUF9OT0ZTKTsKLQlpZiAoISh1bmxvY2tfcGFnZXMgfHwgY2xlYXJfZGlydHkgfHwgc2V0X3dyaXRlYmFjayB8fCBlbmRfd3JpdGViYWNrIHx8Ci0JICAgICAgc2V0X3ByaXZhdGUyKSkKKwlpZiAoIShvcCAmIChFWFRFTlRfQ0xFQVJfVU5MT0NLX1BBR0UgfCBFWFRFTlRfQ0xFQVJfRElSVFkgfAorCQkgICAgRVhURU5UX1NFVF9XUklURUJBQ0sgfCBFWFRFTlRfRU5EX1dSSVRFQkFDSyB8CisJCSAgICBFWFRFTlRfU0VUX1BSSVZBVEUyKSkpCiAJCXJldHVybiAwOwogCiAJd2hpbGUgKG5yX3BhZ2VzID4gMCkgewpAQCAtMTM4OSwyMCArMTQzNiwyMCBAQAogCQkJCSAgICAgbnJfcGFnZXMsIEFSUkFZX1NJWkUocGFnZXMpKSwgcGFnZXMpOwogCQlmb3IgKGkgPSAwOyBpIDwgcmV0OyBpKyspIHsKIAotCQkJaWYgKHNldF9wcml2YXRlMikKKwkJCWlmIChvcCAmIEVYVEVOVF9TRVRfUFJJVkFURTIpCiAJCQkJU2V0UGFnZVByaXZhdGUyKHBhZ2VzW2ldKTsKIAogCQkJaWYgKHBhZ2VzW2ldID09IGxvY2tlZF9wYWdlKSB7CiAJCQkJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2VzW2ldKTsKIAkJCQljb250aW51ZTsKIAkJCX0KLQkJCWlmIChjbGVhcl9kaXJ0eSkKKwkJCWlmIChvcCAmIEVYVEVOVF9DTEVBUl9ESVJUWSkKIAkJCQljbGVhcl9wYWdlX2RpcnR5X2Zvcl9pbyhwYWdlc1tpXSk7Ci0JCQlpZiAoc2V0X3dyaXRlYmFjaykKKwkJCWlmIChvcCAmIEVYVEVOVF9TRVRfV1JJVEVCQUNLKQogCQkJCXNldF9wYWdlX3dyaXRlYmFjayhwYWdlc1tpXSk7Ci0JCQlpZiAoZW5kX3dyaXRlYmFjaykKKwkJCWlmIChvcCAmIEVYVEVOVF9FTkRfV1JJVEVCQUNLKQogCQkJCWVuZF9wYWdlX3dyaXRlYmFjayhwYWdlc1tpXSk7Ci0JCQlpZiAodW5sb2NrX3BhZ2VzKQorCQkJaWYgKG9wICYgRVhURU5UX0NMRUFSX1VOTE9DS19QQUdFKQogCQkJCXVubG9ja19wYWdlKHBhZ2VzW2ldKTsKIAkJCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlc1tpXSk7CiAJCX0KQEAgLTI2NjgsNyArMjcxNSw4IEBACiAJbG9ja19leHRlbnQodHJlZSwgc3RhcnQsIGVuZCwgR0ZQX05PRlMpOwogCXdhaXRfb25fcGFnZV93cml0ZWJhY2socGFnZSk7CiAJY2xlYXJfZXh0ZW50X2JpdCh0cmVlLCBzdGFydCwgZW5kLAotCQkJIEVYVEVOVF9MT0NLRUQgfCBFWFRFTlRfRElSVFkgfCBFWFRFTlRfREVMQUxMT0MsCisJCQkgRVhURU5UX0xPQ0tFRCB8IEVYVEVOVF9ESVJUWSB8IEVYVEVOVF9ERUxBTExPQyB8CisJCQkgRVhURU5UX0RPX0FDQ09VTlRJTkcsCiAJCQkgMSwgMSwgTlVMTCwgR0ZQX05PRlMpOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvZXh0ZW50X2lvLmggYi9mcy9idHJmcy9leHRlbnRfaW8uaAppbmRleCAxNGVkMTZmLi4zNmRlMjUwIDEwMDY0NAotLS0gYS9mcy9idHJmcy9leHRlbnRfaW8uaAorKysgYi9mcy9idHJmcy9leHRlbnRfaW8uaApAQCAtMTUsNiArMTUsNyBAQAogI2RlZmluZSBFWFRFTlRfQlVGRkVSX0ZJTExFRCAoMSA8PCA4KQogI2RlZmluZSBFWFRFTlRfQk9VTkRBUlkgKDEgPDwgOSkKICNkZWZpbmUgRVhURU5UX05PREFUQVNVTSAoMSA8PCAxMCkKKyNkZWZpbmUgRVhURU5UX0RPX0FDQ09VTlRJTkcgKDEgPDwgMTEpCiAjZGVmaW5lIEVYVEVOVF9JT0JJVFMgKEVYVEVOVF9MT0NLRUQgfCBFWFRFTlRfV1JJVEVCQUNLKQogCiAvKiBmbGFncyBmb3IgYmlvIHN1Ym1pc3Npb24gKi8KQEAgLTI1LDYgKzI2LDE2IEBACiAjZGVmaW5lIEVYVEVOVF9CVUZGRVJfQkxPQ0tJTkcgMQogI2RlZmluZSBFWFRFTlRfQlVGRkVSX0RJUlRZIDIKIAorLyogdGhlc2UgYXJlIGZsYWdzIGZvciBleHRlbnRfY2xlYXJfdW5sb2NrX2RlbGFsbG9jICovCisjZGVmaW5lIEVYVEVOVF9DTEVBUl9VTkxPQ0tfUEFHRSAweDEKKyNkZWZpbmUgRVhURU5UX0NMRUFSX1VOTE9DSwkgMHgyCisjZGVmaW5lIEVYVEVOVF9DTEVBUl9ERUxBTExPQwkgMHg0CisjZGVmaW5lIEVYVEVOVF9DTEVBUl9ESVJUWQkgMHg4CisjZGVmaW5lIEVYVEVOVF9TRVRfV1JJVEVCQUNLCSAweDEwCisjZGVmaW5lIEVYVEVOVF9FTkRfV1JJVEVCQUNLCSAweDIwCisjZGVmaW5lIEVYVEVOVF9TRVRfUFJJVkFURTIJIDB4NDAKKyNkZWZpbmUgRVhURU5UX0NMRUFSX0FDQ09VTlRJTkcgIDB4ODAKKwogLyoKICAqIHBhZ2UtPnByaXZhdGUgdmFsdWVzLiAgRXZlcnkgcGFnZSB0aGF0IGlzIGNvbnRyb2xsZWQgYnkgdGhlIGV4dGVudAogICogbWFwIGhhcyBwYWdlLT5wcml2YXRlIHNldCB0byBvbmUuCkBAIC02MCw4ICs3MSwxMyBAQAogCQkJCSAgICAgIHN0cnVjdCBleHRlbnRfc3RhdGUgKnN0YXRlLCBpbnQgdXB0b2RhdGUpOwogCWludCAoKnNldF9iaXRfaG9vaykoc3RydWN0IGlub2RlICppbm9kZSwgdTY0IHN0YXJ0LCB1NjQgZW5kLAogCQkJICAgIHVuc2lnbmVkIGxvbmcgb2xkLCB1bnNpZ25lZCBsb25nIGJpdHMpOwotCWludCAoKmNsZWFyX2JpdF9ob29rKShzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1NjQgc3RhcnQsIHU2NCBlbmQsCi0JCQkgICAgdW5zaWduZWQgbG9uZyBvbGQsIHVuc2lnbmVkIGxvbmcgYml0cyk7CisJaW50ICgqY2xlYXJfYml0X2hvb2spKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBleHRlbnRfc3RhdGUgKnN0YXRlLAorCQkJICAgICAgdW5zaWduZWQgbG9uZyBiaXRzKTsKKwlpbnQgKCptZXJnZV9leHRlbnRfaG9vaykoc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkgc3RydWN0IGV4dGVudF9zdGF0ZSAqbmV3LAorCQkJCSBzdHJ1Y3QgZXh0ZW50X3N0YXRlICpvdGhlcik7CisJaW50ICgqc3BsaXRfZXh0ZW50X2hvb2spKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJIHN0cnVjdCBleHRlbnRfc3RhdGUgKm9yaWcsIHU2NCBzcGxpdCk7CiAJaW50ICgqd3JpdGVfY2FjaGVfcGFnZXNfbG9ja19ob29rKShzdHJ1Y3QgcGFnZSAqcGFnZSk7CiB9OwogCkBAIC03OSwxMCArOTUsMTQgQEAKIAl1NjQgc3RhcnQ7CiAJdTY0IGVuZDsgLyogaW5jbHVzaXZlICovCiAJc3RydWN0IHJiX25vZGUgcmJfbm9kZTsKKworCS8qIEFERCBORVcgRUxFTUVOVFMgQUZURVIgVEhJUyAqLwogCXN0cnVjdCBleHRlbnRfaW9fdHJlZSAqdHJlZTsKIAl3YWl0X3F1ZXVlX2hlYWRfdCB3cTsKIAlhdG9taWNfdCByZWZzOwogCXVuc2lnbmVkIGxvbmcgc3RhdGU7CisJdTY0IHNwbGl0X3N0YXJ0OworCXU2NCBzcGxpdF9lbmQ7CiAKIAkvKiBmb3IgdXNlIGJ5IHRoZSBGUyAqLwogCXU2NCBwcml2YXRlOwpAQCAtMjc5LDEwICsyOTksNSBAQAogaW50IGV4dGVudF9jbGVhcl91bmxvY2tfZGVsYWxsb2Moc3RydWN0IGlub2RlICppbm9kZSwKIAkJCQlzdHJ1Y3QgZXh0ZW50X2lvX3RyZWUgKnRyZWUsCiAJCQkJdTY0IHN0YXJ0LCB1NjQgZW5kLCBzdHJ1Y3QgcGFnZSAqbG9ja2VkX3BhZ2UsCi0JCQkJaW50IHVubG9ja19wYWdlLAotCQkJCWludCBjbGVhcl91bmxvY2ssCi0JCQkJaW50IGNsZWFyX2RlbGFsbG9jLCBpbnQgY2xlYXJfZGlydHksCi0JCQkJaW50IHNldF93cml0ZWJhY2ssCi0JCQkJaW50IGVuZF93cml0ZWJhY2ssCi0JCQkJaW50IHNldF9wcml2YXRlMik7CisJCQkJdW5zaWduZWQgbG9uZyBvcCk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2ZpbGUuYyBiL2ZzL2J0cmZzL2ZpbGUuYwppbmRleCA1NzFhZDNjLi4wNjU1MGFmIDEwMDY0NAotLS0gYS9mcy9idHJmcy9maWxlLmMKKysrIGIvZnMvYnRyZnMvZmlsZS5jCkBAIC0xMjMsNyArMTIzLDEwIEBACiAJCSAgICByb290LT5zZWN0b3JzaXplIC0gMSkgJiB+KCh1NjQpcm9vdC0+c2VjdG9yc2l6ZSAtIDEpOwogCiAJZW5kX29mX2xhc3RfYmxvY2sgPSBzdGFydF9wb3MgKyBudW1fYnl0ZXMgLSAxOwotCWJ0cmZzX3NldF9leHRlbnRfZGVsYWxsb2MoaW5vZGUsIHN0YXJ0X3BvcywgZW5kX29mX2xhc3RfYmxvY2spOworCWVyciA9IGJ0cmZzX3NldF9leHRlbnRfZGVsYWxsb2MoaW5vZGUsIHN0YXJ0X3BvcywgZW5kX29mX2xhc3RfYmxvY2spOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKIAlmb3IgKGkgPSAwOyBpIDwgbnVtX3BhZ2VzOyBpKyspIHsKIAkJc3RydWN0IHBhZ2UgKnAgPSBwYWdlc1tpXTsKIAkJU2V0UGFnZVVwdG9kYXRlKHApOwpAQCAtODc1LDcgKzg3OCw4IEBACiAJCQlidHJmc19wdXRfb3JkZXJlZF9leHRlbnQob3JkZXJlZCk7CiAKIAkJY2xlYXJfZXh0ZW50X2JpdHMoJkJUUkZTX0koaW5vZGUpLT5pb190cmVlLCBzdGFydF9wb3MsCi0JCQkJICBsYXN0X3BvcyAtIDEsIEVYVEVOVF9ESVJUWSB8IEVYVEVOVF9ERUxBTExPQywKKwkJCQkgIGxhc3RfcG9zIC0gMSwgRVhURU5UX0RJUlRZIHwgRVhURU5UX0RFTEFMTE9DIHwKKwkJCQkgIEVYVEVOVF9ET19BQ0NPVU5USU5HLAogCQkJCSAgR0ZQX05PRlMpOwogCQl1bmxvY2tfZXh0ZW50KCZCVFJGU19JKGlub2RlKS0+aW9fdHJlZSwKIAkJCSAgICAgIHN0YXJ0X3BvcywgbGFzdF9wb3MgLSAxLCBHRlBfTk9GUyk7CkBAIC05MTcsMjEgKzkyMSwzNSBAQAogCXN0YXJ0X3BvcyA9IHBvczsKIAogCXZmc19jaGVja19mcm96ZW4oaW5vZGUtPmlfc2IsIFNCX0ZSRUVaRV9XUklURSk7CisKKwkvKiBkbyB0aGUgcmVzZXJ2ZSBiZWZvcmUgdGhlIG11dGV4IGxvY2sgaW4gY2FzZSB3ZSBoYXZlIHRvIGRvIHNvbWUKKwkgKiBmbHVzaGluZy4gIFdlIHdvdWxkbid0IGRlYWRsb2NrLCBidXQgdGhpcyBpcyBtb3JlIHBvbGl0ZS4KKwkgKi8KKwllcnIgPSBidHJmc19yZXNlcnZlX21ldGFkYXRhX2Zvcl9kZWxhbGxvYyhyb290LCBpbm9kZSwgMSk7CisJaWYgKGVycikKKwkJZ290byBvdXRfbm9sb2NrOworCisJbXV0ZXhfbG9jaygmaW5vZGUtPmlfbXV0ZXgpOworCiAJY3VycmVudC0+YmFja2luZ19kZXZfaW5mbyA9IGlub2RlLT5pX21hcHBpbmctPmJhY2tpbmdfZGV2X2luZm87CiAJZXJyID0gZ2VuZXJpY193cml0ZV9jaGVja3MoZmlsZSwgJnBvcywgJmNvdW50LCBTX0lTQkxLKGlub2RlLT5pX21vZGUpKTsKIAlpZiAoZXJyKQotCQlnb3RvIG91dF9ub2xvY2s7CisJCWdvdG8gb3V0OworCiAJaWYgKGNvdW50ID09IDApCi0JCWdvdG8gb3V0X25vbG9jazsKKwkJZ290byBvdXQ7CiAKIAllcnIgPSBmaWxlX3JlbW92ZV9zdWlkKGZpbGUpOwogCWlmIChlcnIpCi0JCWdvdG8gb3V0X25vbG9jazsKKwkJZ290byBvdXQ7CisKIAlmaWxlX3VwZGF0ZV90aW1lKGZpbGUpOwogCiAJcGFnZXMgPSBrbWFsbG9jKG5ycHRycyAqIHNpemVvZihzdHJ1Y3QgcGFnZSAqKSwgR0ZQX0tFUk5FTCk7CiAKLQltdXRleF9sb2NrKCZpbm9kZS0+aV9tdXRleCk7CisJLyogZ2VuZXJpY193cml0ZV9jaGVja3MgY2FuIGNoYW5nZSBvdXIgcG9zICovCisJc3RhcnRfcG9zID0gcG9zOworCiAJQlRSRlNfSShpbm9kZSktPnNlcXVlbmNlKys7CiAJZmlyc3RfaW5kZXggPSBwb3MgPj4gUEFHRV9DQUNIRV9TSElGVDsKIAlsYXN0X2luZGV4ID0gKHBvcyArIGNvdW50KSA+PiBQQUdFX0NBQ0hFX1NISUZUOwpAQCAtMTAwNSw5ICsxMDIzLDggQEAKIAkJfQogCiAJCWlmICh3aWxsX3dyaXRlKSB7Ci0JCQlidHJmc19mZGF0YXdyaXRlX3JhbmdlKGlub2RlLT5pX21hcHBpbmcsIHBvcywKLQkJCQkJICAgICAgIHBvcyArIHdyaXRlX2J5dGVzIC0gMSwKLQkJCQkJICAgICAgIFdCX1NZTkNfQUxMKTsKKwkJCWZpbGVtYXBfZmRhdGF3cml0ZV9yYW5nZShpbm9kZS0+aV9tYXBwaW5nLCBwb3MsCisJCQkJCQkgcG9zICsgd3JpdGVfYnl0ZXMgLSAxKTsKIAkJfSBlbHNlIHsKIAkJCWJhbGFuY2VfZGlydHlfcGFnZXNfcmF0ZWxpbWl0ZWRfbnIoaW5vZGUtPmlfbWFwcGluZywKIAkJCQkJCQkgICBudW1fcGFnZXMpOwpAQCAtMTAyOCw2ICsxMDQ1LDcgQEAKIAltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKIAlpZiAocmV0KQogCQllcnIgPSByZXQ7CisJYnRyZnNfdW5yZXNlcnZlX21ldGFkYXRhX2Zvcl9kZWxhbGxvYyhyb290LCBpbm9kZSwgMSk7CiAKIG91dF9ub2xvY2s6CiAJa2ZyZWUocGFnZXMpOwpAQCAtMTA2OCw4ICsxMDg2LDEwIEBACiAJCQkJCWJ0cmZzX2VuZF90cmFuc2FjdGlvbih0cmFucywgcm9vdCk7CiAJCQkJZWxzZQogCQkJCQlidHJmc19jb21taXRfdHJhbnNhY3Rpb24odHJhbnMsIHJvb3QpOwotCQkJfSBlbHNlIHsKKwkJCX0gZWxzZSBpZiAocmV0ICE9IEJUUkZTX05PX0xPR19TWU5DKSB7CiAJCQkJYnRyZnNfY29tbWl0X3RyYW5zYWN0aW9uKHRyYW5zLCByb290KTsKKwkJCX0gZWxzZSB7CisJCQkJYnRyZnNfZW5kX3RyYW5zYWN0aW9uKHRyYW5zLCByb290KTsKIAkJCX0KIAkJfQogCQlpZiAoZmlsZS0+Zl9mbGFncyAmIE9fRElSRUNUKSB7CkBAIC0xMTE5LDYgKzExMzksMTMgQEAKIAlpbnQgcmV0ID0gMDsKIAlzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFuczsKIAorCisJLyogd2Ugd2FpdCBmaXJzdCwgc2luY2UgdGhlIHdyaXRlYmFjayBtYXkgY2hhbmdlIHRoZSBpbm9kZSAqLworCXJvb3QtPmxvZ19iYXRjaCsrOworCS8qIHRoZSBWRlMgY2FsbGVkIGZpbGVtYXBfZmRhdGF3cml0ZSBmb3IgdXMgKi8KKwlidHJmc193YWl0X29yZGVyZWRfcmFuZ2UoaW5vZGUsIDAsICh1NjQpLTEpOworCXJvb3QtPmxvZ19iYXRjaCsrOworCiAJLyoKIAkgKiBjaGVjayB0aGUgdHJhbnNhY3Rpb24gdGhhdCBsYXN0IG1vZGlmaWVkIHRoaXMgaW5vZGUKIAkgKiBhbmQgc2VlIGlmIGl0cyBhbHJlYWR5IGJlZW4gY29tbWl0dGVkCkBAIC0xMTI2LDYgKzExNTMsMTEgQEAKIAlpZiAoIUJUUkZTX0koaW5vZGUpLT5sYXN0X3RyYW5zKQogCQlnb3RvIG91dDsKIAorCS8qCisJICogaWYgdGhlIGxhc3QgdHJhbnNhY3Rpb24gdGhhdCBjaGFuZ2VkIHRoaXMgZmlsZSB3YXMgYmVmb3JlCisJICogdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24sIHdlIGNhbiBiYWlsIG91dCBub3cgd2l0aG91dCBhbnkKKwkgKiBzeW5jaW5nCisJICovCiAJbXV0ZXhfbG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbXV0ZXgpOwogCWlmIChCVFJGU19JKGlub2RlKS0+bGFzdF90cmFucyA8PQogCSAgICByb290LT5mc19pbmZvLT5sYXN0X3RyYW5zX2NvbW1pdHRlZCkgewpAQCAtMTEzNSwxMyArMTE2Nyw2IEBACiAJfQogCW11dGV4X3VubG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbXV0ZXgpOwogCi0Jcm9vdC0+bG9nX2JhdGNoKys7Ci0JZmlsZW1hcF9mZGF0YXdyaXRlKGlub2RlLT5pX21hcHBpbmcpOwotCWJ0cmZzX3dhaXRfb3JkZXJlZF9yYW5nZShpbm9kZSwgMCwgKHU2NCktMSk7Ci0Jcm9vdC0+bG9nX2JhdGNoKys7Ci0KLQlpZiAoZGF0YXN5bmMgJiYgIShpbm9kZS0+aV9zdGF0ZSAmIElfRElSVFlfUEFHRVMpKQotCQlnb3RvIG91dDsKIAkvKgogCSAqIG9rIHdlIGhhdmVuJ3QgY29tbWl0dGVkIHRoZSB0cmFuc2FjdGlvbiB5ZXQsIGxldHMgZG8gYSBjb21taXQKIAkgKi8KQEAgLTExNzAsMjEgKzExOTUsMjUgQEAKIAkgKi8KIAltdXRleF91bmxvY2soJmRlbnRyeS0+ZF9pbm9kZS0+aV9tdXRleCk7CiAKLQlpZiAocmV0ID4gMCkgewotCQlyZXQgPSBidHJmc19jb21taXRfdHJhbnNhY3Rpb24odHJhbnMsIHJvb3QpOwotCX0gZWxzZSB7Ci0JCXJldCA9IGJ0cmZzX3N5bmNfbG9nKHRyYW5zLCByb290KTsKLQkJaWYgKHJldCA9PSAwKQotCQkJcmV0ID0gYnRyZnNfZW5kX3RyYW5zYWN0aW9uKHRyYW5zLCByb290KTsKLQkJZWxzZQorCWlmIChyZXQgIT0gQlRSRlNfTk9fTE9HX1NZTkMpIHsKKwkJaWYgKHJldCA+IDApIHsKIAkJCXJldCA9IGJ0cmZzX2NvbW1pdF90cmFuc2FjdGlvbih0cmFucywgcm9vdCk7CisJCX0gZWxzZSB7CisJCQlyZXQgPSBidHJmc19zeW5jX2xvZyh0cmFucywgcm9vdCk7CisJCQlpZiAocmV0ID09IDApCisJCQkJcmV0ID0gYnRyZnNfZW5kX3RyYW5zYWN0aW9uKHRyYW5zLCByb290KTsKKwkJCWVsc2UKKwkJCQlyZXQgPSBidHJmc19jb21taXRfdHJhbnNhY3Rpb24odHJhbnMsIHJvb3QpOworCQl9CisJfSBlbHNlIHsKKwkJcmV0ID0gYnRyZnNfZW5kX3RyYW5zYWN0aW9uKHRyYW5zLCByb290KTsKIAl9CiAJbXV0ZXhfbG9jaygmZGVudHJ5LT5kX2lub2RlLT5pX211dGV4KTsKIG91dDoKIAlyZXR1cm4gcmV0ID4gMCA/IEVJTyA6IHJldDsKIH0KIAotc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBidHJmc19maWxlX3ZtX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgYnRyZnNfZmlsZV92bV9vcHMgPSB7CiAJLmZhdWx0CQk9IGZpbGVtYXBfZmF1bHQsCiAJLnBhZ2VfbWt3cml0ZQk9IGJ0cmZzX3BhZ2VfbWt3cml0ZSwKIH07CkBAIC0xMTk2LDcgKzEyMjUsNyBAQAogCXJldHVybiAwOwogfQogCi1zdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGJ0cmZzX2ZpbGVfb3BlcmF0aW9ucyA9IHsKK2NvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYnRyZnNfZmlsZV9vcGVyYXRpb25zID0gewogCS5sbHNlZWsJCT0gZ2VuZXJpY19maWxlX2xsc2VlaywKIAkucmVhZAkJPSBkb19zeW5jX3JlYWQsCiAJLmFpb19yZWFkICAgICAgID0gZ2VuZXJpY19maWxlX2Fpb19yZWFkLApkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvaW5vZGUuYyBiL2ZzL2J0cmZzL2lub2RlLmMKaW5kZXggZTliNzZiYy4uZGFlMTJkYyAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvaW5vZGUuYworKysgYi9mcy9idHJmcy9pbm9kZS5jCkBAIC02Miw3ICs2Miw3IEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgYnRyZnNfZmlsZV9pbm9kZV9vcGVyYXRpb25zOwogc3RhdGljIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgYnRyZnNfYW9wczsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGJ0cmZzX3N5bWxpbmtfYW9wczsKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGJ0cmZzX2Rpcl9maWxlX29wZXJhdGlvbnM7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBidHJmc19kaXJfZmlsZV9vcGVyYXRpb25zOwogc3RhdGljIHN0cnVjdCBleHRlbnRfaW9fb3BzIGJ0cmZzX2V4dGVudF9pb19vcHM7CiAKIHN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqYnRyZnNfaW5vZGVfY2FjaGVwOwpAQCAtNDI0LDkgKzQyNCwxMiBAQAogCQkJICogYW5kIGZyZWUgdXAgb3VyIHRlbXAgcGFnZXMuCiAJCQkgKi8KIAkJCWV4dGVudF9jbGVhcl91bmxvY2tfZGVsYWxsb2MoaW5vZGUsCi0JCQkJCQkgICAgICZCVFJGU19JKGlub2RlKS0+aW9fdHJlZSwKLQkJCQkJCSAgICAgc3RhcnQsIGVuZCwgTlVMTCwgMSwgMCwKLQkJCQkJCSAgICAgMCwgMSwgMSwgMSwgMCk7CisJCQkgICAgICZCVFJGU19JKGlub2RlKS0+aW9fdHJlZSwKKwkJCSAgICAgc3RhcnQsIGVuZCwgTlVMTCwKKwkJCSAgICAgRVhURU5UX0NMRUFSX1VOTE9DS19QQUdFIHwgRVhURU5UX0NMRUFSX0RJUlRZIHwKKwkJCSAgICAgRVhURU5UX0NMRUFSX0RFTEFMTE9DIHwKKwkJCSAgICAgRVhURU5UX0NMRUFSX0FDQ09VTlRJTkcgfAorCQkJICAgICBFWFRFTlRfU0VUX1dSSVRFQkFDSyB8IEVYVEVOVF9FTkRfV1JJVEVCQUNLKTsKIAkJCXJldCA9IDA7CiAJCQlnb3RvIGZyZWVfcGFnZXNfb3V0OwogCQl9CkBAIC02MzcsMTEgKzY0MCwxNCBAQAogCQkgKiBjbGVhciBkaXJ0eSwgc2V0IHdyaXRlYmFjayBhbmQgdW5sb2NrIHRoZSBwYWdlcy4KIAkJICovCiAJCWV4dGVudF9jbGVhcl91bmxvY2tfZGVsYWxsb2MoaW5vZGUsCi0JCQkJCSAgICAgJkJUUkZTX0koaW5vZGUpLT5pb190cmVlLAotCQkJCQkgICAgIGFzeW5jX2V4dGVudC0+c3RhcnQsCi0JCQkJCSAgICAgYXN5bmNfZXh0ZW50LT5zdGFydCArCi0JCQkJCSAgICAgYXN5bmNfZXh0ZW50LT5yYW1fc2l6ZSAtIDEsCi0JCQkJCSAgICAgTlVMTCwgMSwgMSwgMCwgMSwgMSwgMCwgMCk7CisJCQkJJkJUUkZTX0koaW5vZGUpLT5pb190cmVlLAorCQkJCWFzeW5jX2V4dGVudC0+c3RhcnQsCisJCQkJYXN5bmNfZXh0ZW50LT5zdGFydCArCisJCQkJYXN5bmNfZXh0ZW50LT5yYW1fc2l6ZSAtIDEsCisJCQkJTlVMTCwgRVhURU5UX0NMRUFSX1VOTE9DS19QQUdFIHwKKwkJCQlFWFRFTlRfQ0xFQVJfVU5MT0NLIHwKKwkJCQlFWFRFTlRfQ0xFQVJfREVMQUxMT0MgfAorCQkJCUVYVEVOVF9DTEVBUl9ESVJUWSB8IEVYVEVOVF9TRVRfV1JJVEVCQUNLKTsKIAogCQlyZXQgPSBidHJmc19zdWJtaXRfY29tcHJlc3NlZF93cml0ZShpbm9kZSwKIAkJCQkgICAgYXN5bmNfZXh0ZW50LT5zdGFydCwKQEAgLTcxMiw5ICs3MTgsMTUgQEAKIAkJCQkJICAgIHN0YXJ0LCBlbmQsIDAsIE5VTEwpOwogCQlpZiAocmV0ID09IDApIHsKIAkJCWV4dGVudF9jbGVhcl91bmxvY2tfZGVsYWxsb2MoaW5vZGUsCi0JCQkJCQkgICAgICZCVFJGU19JKGlub2RlKS0+aW9fdHJlZSwKLQkJCQkJCSAgICAgc3RhcnQsIGVuZCwgTlVMTCwgMSwgMSwKLQkJCQkJCSAgICAgMSwgMSwgMSwgMSwgMCk7CisJCQkJICAgICAmQlRSRlNfSShpbm9kZSktPmlvX3RyZWUsCisJCQkJICAgICBzdGFydCwgZW5kLCBOVUxMLAorCQkJCSAgICAgRVhURU5UX0NMRUFSX1VOTE9DS19QQUdFIHwKKwkJCQkgICAgIEVYVEVOVF9DTEVBUl9VTkxPQ0sgfAorCQkJCSAgICAgRVhURU5UX0NMRUFSX0RFTEFMTE9DIHwKKwkJCQkgICAgIEVYVEVOVF9DTEVBUl9BQ0NPVU5USU5HIHwKKwkJCQkgICAgIEVYVEVOVF9DTEVBUl9ESVJUWSB8CisJCQkJICAgICBFWFRFTlRfU0VUX1dSSVRFQkFDSyB8CisJCQkJICAgICBFWFRFTlRfRU5EX1dSSVRFQkFDSyk7CiAJCQkqbnJfd3JpdHRlbiA9ICpucl93cml0dGVuICsKIAkJCSAgICAgKGVuZCAtIHN0YXJ0ICsgUEFHRV9DQUNIRV9TSVpFKSAvIFBBR0VfQ0FDSEVfU0laRTsKIAkJCSpwYWdlX3N0YXJ0ZWQgPSAxOwpAQCAtNzM4LDYgKzc1MCw4IEBACiAJYnRyZnNfZHJvcF9leHRlbnRfY2FjaGUoaW5vZGUsIHN0YXJ0LCBzdGFydCArIG51bV9ieXRlcyAtIDEsIDApOwogCiAJd2hpbGUgKGRpc2tfbnVtX2J5dGVzID4gMCkgeworCQl1bnNpZ25lZCBsb25nIG9wOworCiAJCWN1cl9hbGxvY19zaXplID0gbWluKGRpc2tfbnVtX2J5dGVzLCByb290LT5mc19pbmZvLT5tYXhfZXh0ZW50KTsKIAkJcmV0ID0gYnRyZnNfcmVzZXJ2ZV9leHRlbnQodHJhbnMsIHJvb3QsIGN1cl9hbGxvY19zaXplLAogCQkJCQkgICByb290LT5zZWN0b3JzaXplLCAwLCBhbGxvY19oaW50LApAQCAtNzg5LDEwICs4MDMsMTMgQEAKIAkJICogRG8gc2V0IHRoZSBQcml2YXRlMiBiaXQgc28gd2Uga25vdyB0aGlzIHBhZ2Ugd2FzIHByb3Blcmx5CiAJCSAqIHNldHVwIGZvciB3cml0ZXBhZ2UKIAkJICovCisJCW9wID0gdW5sb2NrID8gRVhURU5UX0NMRUFSX1VOTE9DS19QQUdFIDogMDsKKwkJb3AgfD0gRVhURU5UX0NMRUFSX1VOTE9DSyB8IEVYVEVOVF9DTEVBUl9ERUxBTExPQyB8CisJCQlFWFRFTlRfU0VUX1BSSVZBVEUyOworCiAJCWV4dGVudF9jbGVhcl91bmxvY2tfZGVsYWxsb2MoaW5vZGUsICZCVFJGU19JKGlub2RlKS0+aW9fdHJlZSwKIAkJCQkJICAgICBzdGFydCwgc3RhcnQgKyByYW1fc2l6ZSAtIDEsCi0JCQkJCSAgICAgbG9ja2VkX3BhZ2UsIHVubG9jaywgMSwKLQkJCQkJICAgICAxLCAwLCAwLCAwLCAxKTsKKwkJCQkJICAgICBsb2NrZWRfcGFnZSwgb3ApOwogCQlkaXNrX251bV9ieXRlcyAtPSBjdXJfYWxsb2Nfc2l6ZTsKIAkJbnVtX2J5dGVzIC09IGN1cl9hbGxvY19zaXplOwogCQlhbGxvY19oaW50ID0gaW5zLm9iamVjdGlkICsgaW5zLm9mZnNldDsKQEAgLTg2NCw4ICs4ODEsOCBAQAogCXU2NCBjdXJfZW5kOwogCWludCBsaW1pdCA9IDEwICogMTAyNCAqIDEwNDI7CiAKLQljbGVhcl9leHRlbnRfYml0KCZCVFJGU19JKGlub2RlKS0+aW9fdHJlZSwgc3RhcnQsIGVuZCwgRVhURU5UX0xPQ0tFRCB8Ci0JCQkgRVhURU5UX0RFTEFMTE9DLCAxLCAwLCBOVUxMLCBHRlBfTk9GUyk7CisJY2xlYXJfZXh0ZW50X2JpdCgmQlRSRlNfSShpbm9kZSktPmlvX3RyZWUsIHN0YXJ0LCBlbmQsIEVYVEVOVF9MT0NLRUQsCisJCQkgMSwgMCwgTlVMTCwgR0ZQX05PRlMpOwogCXdoaWxlIChzdGFydCA8IGVuZCkgewogCQlhc3luY19jb3cgPSBrbWFsbG9jKHNpemVvZigqYXN5bmNfY293KSwgR0ZQX05PRlMpOwogCQlhc3luY19jb3ctPmlub2RlID0gaW5vZGU7CkBAIC0xMDA2LDYgKzEwMjMsNyBAQAogCiAJCWlmIChmb3VuZF9rZXkub2Zmc2V0ID4gY3VyX29mZnNldCkgewogCQkJZXh0ZW50X2VuZCA9IGZvdW5kX2tleS5vZmZzZXQ7CisJCQlleHRlbnRfdHlwZSA9IDA7CiAJCQlnb3RvIG91dF9jaGVjazsKIAkJfQogCkBAIC0xMTEyLDggKzExMzAsMTAgQEAKIAkJQlVHX09OKHJldCk7CiAKIAkJZXh0ZW50X2NsZWFyX3VubG9ja19kZWxhbGxvYyhpbm9kZSwgJkJUUkZTX0koaW5vZGUpLT5pb190cmVlLAotCQkJCQljdXJfb2Zmc2V0LCBjdXJfb2Zmc2V0ICsgbnVtX2J5dGVzIC0gMSwKLQkJCQkJbG9ja2VkX3BhZ2UsIDEsIDEsIDEsIDAsIDAsIDAsIDEpOworCQkJCWN1cl9vZmZzZXQsIGN1cl9vZmZzZXQgKyBudW1fYnl0ZXMgLSAxLAorCQkJCWxvY2tlZF9wYWdlLCBFWFRFTlRfQ0xFQVJfVU5MT0NLX1BBR0UgfAorCQkJCUVYVEVOVF9DTEVBUl9VTkxPQ0sgfCBFWFRFTlRfQ0xFQVJfREVMQUxMT0MgfAorCQkJCUVYVEVOVF9TRVRfUFJJVkFURTIpOwogCQljdXJfb2Zmc2V0ID0gZXh0ZW50X2VuZDsKIAkJaWYgKGN1cl9vZmZzZXQgPiBlbmQpCiAJCQlicmVhazsKQEAgLTExNTksNiArMTE3OSw4OSBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBpbnQgYnRyZnNfc3BsaXRfZXh0ZW50X2hvb2soc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkgICAgc3RydWN0IGV4dGVudF9zdGF0ZSAqb3JpZywgdTY0IHNwbGl0KQoreworCXN0cnVjdCBidHJmc19yb290ICpyb290ID0gQlRSRlNfSShpbm9kZSktPnJvb3Q7CisJdTY0IHNpemU7CisKKwlpZiAoIShvcmlnLT5zdGF0ZSAmIEVYVEVOVF9ERUxBTExPQykpCisJCXJldHVybiAwOworCisJc2l6ZSA9IG9yaWctPmVuZCAtIG9yaWctPnN0YXJ0ICsgMTsKKwlpZiAoc2l6ZSA+IHJvb3QtPmZzX2luZm8tPm1heF9leHRlbnQpIHsKKwkJdTY0IG51bV9leHRlbnRzOworCQl1NjQgbmV3X3NpemU7CisKKwkJbmV3X3NpemUgPSBvcmlnLT5lbmQgLSBzcGxpdCArIDE7CisJCW51bV9leHRlbnRzID0gZGl2NjRfdTY0KHNpemUgKyByb290LT5mc19pbmZvLT5tYXhfZXh0ZW50IC0gMSwKKwkJCQkJcm9vdC0+ZnNfaW5mby0+bWF4X2V4dGVudCk7CisKKwkJLyoKKwkJICogaWYgd2UgYnJlYWsgYSBsYXJnZSBleHRlbnQgdXAgdGhlbiBsZWF2ZSBvdXN0YW5kaW5nX2V4dGVudHMKKwkJICogYmUsIHNpbmNlIHdlJ3ZlIGFscmVhZHkgYWNjb3VudGVkIGZvciB0aGUgbGFyZ2UgZXh0ZW50LgorCQkgKi8KKwkJaWYgKGRpdjY0X3U2NChuZXdfc2l6ZSArIHJvb3QtPmZzX2luZm8tPm1heF9leHRlbnQgLSAxLAorCQkJICAgICAgcm9vdC0+ZnNfaW5mby0+bWF4X2V4dGVudCkgPCBudW1fZXh0ZW50cykKKwkJCXJldHVybiAwOworCX0KKworCXNwaW5fbG9jaygmQlRSRlNfSShpbm9kZSktPmFjY291bnRpbmdfbG9jayk7CisJQlRSRlNfSShpbm9kZSktPm91dHN0YW5kaW5nX2V4dGVudHMrKzsKKwlzcGluX3VubG9jaygmQlRSRlNfSShpbm9kZSktPmFjY291bnRpbmdfbG9jayk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIGV4dGVudF9pby5jIG1lcmdlX2V4dGVudF9ob29rLCB1c2VkIHRvIHRyYWNrIG1lcmdlZCBkZWxheWVkIGFsbG9jYXRpb24KKyAqIGV4dGVudHMgc28gd2UgY2FuIGtlZXAgdHJhY2sgb2YgbmV3IGV4dGVudHMgdGhhdCBhcmUganVzdCBtZXJnZWQgb250byBvbGQKKyAqIGV4dGVudHMsIHN1Y2ggYXMgd2hlbiB3ZSBhcmUgZG9pbmcgc2VxdWVudGlhbCB3cml0ZXMsIHNvIHdlIGNhbiBwcm9wZXJseQorICogYWNjb3VudCBmb3IgdGhlIG1ldGFkYXRhIHNwYWNlIHdlJ2xsIG5lZWQuCisgKi8KK3N0YXRpYyBpbnQgYnRyZnNfbWVyZ2VfZXh0ZW50X2hvb2soc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkgICBzdHJ1Y3QgZXh0ZW50X3N0YXRlICpuZXcsCisJCQkJICAgc3RydWN0IGV4dGVudF9zdGF0ZSAqb3RoZXIpCit7CisJc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QgPSBCVFJGU19JKGlub2RlKS0+cm9vdDsKKwl1NjQgbmV3X3NpemUsIG9sZF9zaXplOworCXU2NCBudW1fZXh0ZW50czsKKworCS8qIG5vdCBkZWxhbGxvYywgaWdub3JlIGl0ICovCisJaWYgKCEob3RoZXItPnN0YXRlICYgRVhURU5UX0RFTEFMTE9DKSkKKwkJcmV0dXJuIDA7CisKKwlvbGRfc2l6ZSA9IG90aGVyLT5lbmQgLSBvdGhlci0+c3RhcnQgKyAxOworCWlmIChuZXctPnN0YXJ0IDwgb3RoZXItPnN0YXJ0KQorCQluZXdfc2l6ZSA9IG90aGVyLT5lbmQgLSBuZXctPnN0YXJ0ICsgMTsKKwllbHNlCisJCW5ld19zaXplID0gbmV3LT5lbmQgLSBvdGhlci0+c3RhcnQgKyAxOworCisJLyogd2UncmUgbm90IGJpZ2dlciB0aGFuIHRoZSBtYXgsIHVucmVzZXJ2ZSB0aGUgc3BhY2UgYW5kIGdvICovCisJaWYgKG5ld19zaXplIDw9IHJvb3QtPmZzX2luZm8tPm1heF9leHRlbnQpIHsKKwkJc3Bpbl9sb2NrKCZCVFJGU19JKGlub2RlKS0+YWNjb3VudGluZ19sb2NrKTsKKwkJQlRSRlNfSShpbm9kZSktPm91dHN0YW5kaW5nX2V4dGVudHMtLTsKKwkJc3Bpbl91bmxvY2soJkJUUkZTX0koaW5vZGUpLT5hY2NvdW50aW5nX2xvY2spOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKgorCSAqIElmIHdlIGdyZXcgYnkgYW5vdGhlciBtYXhfZXh0ZW50LCBqdXN0IHJldHVybiwgd2Ugd2FudCB0byBrZWVwIHRoYXQKKwkgKiByZXNlcnZlZCBhbW91bnQuCisJICovCisJbnVtX2V4dGVudHMgPSBkaXY2NF91NjQob2xkX3NpemUgKyByb290LT5mc19pbmZvLT5tYXhfZXh0ZW50IC0gMSwKKwkJCQlyb290LT5mc19pbmZvLT5tYXhfZXh0ZW50KTsKKwlpZiAoZGl2NjRfdTY0KG5ld19zaXplICsgcm9vdC0+ZnNfaW5mby0+bWF4X2V4dGVudCAtIDEsCisJCSAgICAgIHJvb3QtPmZzX2luZm8tPm1heF9leHRlbnQpID4gbnVtX2V4dGVudHMpCisJCXJldHVybiAwOworCisJc3Bpbl9sb2NrKCZCVFJGU19JKGlub2RlKS0+YWNjb3VudGluZ19sb2NrKTsKKwlCVFJGU19JKGlub2RlKS0+b3V0c3RhbmRpbmdfZXh0ZW50cy0tOworCXNwaW5fdW5sb2NrKCZCVFJGU19JKGlub2RlKS0+YWNjb3VudGluZ19sb2NrKTsKKworCXJldHVybiAwOworfQorCiAvKgogICogZXh0ZW50X2lvLmMgc2V0X2JpdF9ob29rLCB1c2VkIHRvIHRyYWNrIGRlbGF5ZWQgYWxsb2NhdGlvbgogICogYnl0ZXMgaW4gdGhpcyBmaWxlLCBhbmQgdG8gbWFpbnRhaW4gdGhlIGxpc3Qgb2YgaW5vZGVzIHRoYXQKQEAgLTExNjcsNiArMTI3MCw3IEBACiBzdGF0aWMgaW50IGJ0cmZzX3NldF9iaXRfaG9vayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1NjQgc3RhcnQsIHU2NCBlbmQsCiAJCSAgICAgICB1bnNpZ25lZCBsb25nIG9sZCwgdW5zaWduZWQgbG9uZyBiaXRzKQogeworCiAJLyoKIAkgKiBzZXRfYml0IGFuZCBjbGVhciBiaXQgaG9va3Mgbm9ybWFsbHkgcmVxdWlyZSBfaXJxc2F2ZS9yZXN0b3JlCiAJICogYnV0IGluIHRoaXMgY2FzZSwgd2UgYXJlIG9ubHkgdGVzdGVpbmcgZm9yIHRoZSBERUxBTExPQwpAQCAtMTE3NCw2ICsxMjc4LDEwIEBACiAJICovCiAJaWYgKCEob2xkICYgRVhURU5UX0RFTEFMTE9DKSAmJiAoYml0cyAmIEVYVEVOVF9ERUxBTExPQykpIHsKIAkJc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QgPSBCVFJGU19JKGlub2RlKS0+cm9vdDsKKworCQlzcGluX2xvY2soJkJUUkZTX0koaW5vZGUpLT5hY2NvdW50aW5nX2xvY2spOworCQlCVFJGU19JKGlub2RlKS0+b3V0c3RhbmRpbmdfZXh0ZW50cysrOworCQlzcGluX3VubG9jaygmQlRSRlNfSShpbm9kZSktPmFjY291bnRpbmdfbG9jayk7CiAJCWJ0cmZzX2RlbGFsbG9jX3Jlc2VydmVfc3BhY2Uocm9vdCwgaW5vZGUsIGVuZCAtIHN0YXJ0ICsgMSk7CiAJCXNwaW5fbG9jaygmcm9vdC0+ZnNfaW5mby0+ZGVsYWxsb2NfbG9jayk7CiAJCUJUUkZTX0koaW5vZGUpLT5kZWxhbGxvY19ieXRlcyArPSBlbmQgLSBzdGFydCArIDE7CkBAIC0xMTkwLDIyICsxMjk4LDMxIEBACiAvKgogICogZXh0ZW50X2lvLmMgY2xlYXJfYml0X2hvb2ssIHNlZSBzZXRfYml0X2hvb2sgZm9yIHdoeQogICovCi1zdGF0aWMgaW50IGJ0cmZzX2NsZWFyX2JpdF9ob29rKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHU2NCBzdGFydCwgdTY0IGVuZCwKLQkJCSB1bnNpZ25lZCBsb25nIG9sZCwgdW5zaWduZWQgbG9uZyBiaXRzKQorc3RhdGljIGludCBidHJmc19jbGVhcl9iaXRfaG9vayhzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCXN0cnVjdCBleHRlbnRfc3RhdGUgKnN0YXRlLCB1bnNpZ25lZCBsb25nIGJpdHMpCiB7CiAJLyoKIAkgKiBzZXRfYml0IGFuZCBjbGVhciBiaXQgaG9va3Mgbm9ybWFsbHkgcmVxdWlyZSBfaXJxc2F2ZS9yZXN0b3JlCiAJICogYnV0IGluIHRoaXMgY2FzZSwgd2UgYXJlIG9ubHkgdGVzdGVpbmcgZm9yIHRoZSBERUxBTExPQwogCSAqIGJpdCwgd2hpY2ggaXMgb25seSBzZXQgb3IgY2xlYXJlZCB3aXRoIGlycXMgb24KIAkgKi8KLQlpZiAoKG9sZCAmIEVYVEVOVF9ERUxBTExPQykgJiYgKGJpdHMgJiBFWFRFTlRfREVMQUxMT0MpKSB7CisJaWYgKChzdGF0ZS0+c3RhdGUgJiBFWFRFTlRfREVMQUxMT0MpICYmIChiaXRzICYgRVhURU5UX0RFTEFMTE9DKSkgewogCQlzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCA9IEJUUkZTX0koaW5vZGUpLT5yb290OwogCisJCWlmIChiaXRzICYgRVhURU5UX0RPX0FDQ09VTlRJTkcpIHsKKwkJCXNwaW5fbG9jaygmQlRSRlNfSShpbm9kZSktPmFjY291bnRpbmdfbG9jayk7CisJCQlCVFJGU19JKGlub2RlKS0+b3V0c3RhbmRpbmdfZXh0ZW50cy0tOworCQkJc3Bpbl91bmxvY2soJkJUUkZTX0koaW5vZGUpLT5hY2NvdW50aW5nX2xvY2spOworCQkJYnRyZnNfdW5yZXNlcnZlX21ldGFkYXRhX2Zvcl9kZWxhbGxvYyhyb290LCBpbm9kZSwgMSk7CisJCX0KKwogCQlzcGluX2xvY2soJnJvb3QtPmZzX2luZm8tPmRlbGFsbG9jX2xvY2spOwotCQlpZiAoZW5kIC0gc3RhcnQgKyAxID4gcm9vdC0+ZnNfaW5mby0+ZGVsYWxsb2NfYnl0ZXMpIHsKKwkJaWYgKHN0YXRlLT5lbmQgLSBzdGF0ZS0+c3RhcnQgKyAxID4KKwkJICAgIHJvb3QtPmZzX2luZm8tPmRlbGFsbG9jX2J5dGVzKSB7CiAJCQlwcmludGsoS0VSTl9JTkZPICJidHJmcyB3YXJuaW5nOiBkZWxhbGxvYyBhY2NvdW50ICIKIAkJCSAgICAgICAiJWxsdSAlbGx1XG4iLAotCQkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpZW5kIC0gc3RhcnQgKyAxLAorCQkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpCisJCQkgICAgICAgc3RhdGUtPmVuZCAtIHN0YXRlLT5zdGFydCArIDEsCiAJCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykKIAkJCSAgICAgICByb290LT5mc19pbmZvLT5kZWxhbGxvY19ieXRlcyk7CiAJCQlidHJmc19kZWxhbGxvY19mcmVlX3NwYWNlKHJvb3QsIGlub2RlLCAodTY0KS0xKTsKQEAgLTEyMTMsOSArMTMzMCwxMiBAQAogCQkJQlRSRlNfSShpbm9kZSktPmRlbGFsbG9jX2J5dGVzID0gMDsKIAkJfSBlbHNlIHsKIAkJCWJ0cmZzX2RlbGFsbG9jX2ZyZWVfc3BhY2Uocm9vdCwgaW5vZGUsCi0JCQkJCQkgIGVuZCAtIHN0YXJ0ICsgMSk7Ci0JCQlyb290LT5mc19pbmZvLT5kZWxhbGxvY19ieXRlcyAtPSBlbmQgLSBzdGFydCArIDE7Ci0JCQlCVFJGU19JKGlub2RlKS0+ZGVsYWxsb2NfYnl0ZXMgLT0gZW5kIC0gc3RhcnQgKyAxOworCQkJCQkJICBzdGF0ZS0+ZW5kIC0KKwkJCQkJCSAgc3RhdGUtPnN0YXJ0ICsgMSk7CisJCQlyb290LT5mc19pbmZvLT5kZWxhbGxvY19ieXRlcyAtPSBzdGF0ZS0+ZW5kIC0KKwkJCQlzdGF0ZS0+c3RhcnQgKyAxOworCQkJQlRSRlNfSShpbm9kZSktPmRlbGFsbG9jX2J5dGVzIC09IHN0YXRlLT5lbmQgLQorCQkJCXN0YXRlLT5zdGFydCArIDE7CiAJCX0KIAkJaWYgKEJUUkZTX0koaW5vZGUpLT5kZWxhbGxvY19ieXRlcyA9PSAwICYmCiAJCSAgICAhbGlzdF9lbXB0eSgmQlRSRlNfSShpbm9kZSktPmRlbGFsbG9jX2lub2RlcykpIHsKQEAgLTI5MTIsMTIgKzMwMzIsMjIgQEAKIAogCWlmICgob2Zmc2V0ICYgKGJsb2Nrc2l6ZSAtIDEpKSA9PSAwKQogCQlnb3RvIG91dDsKKwlyZXQgPSBidHJmc19jaGVja19kYXRhX2ZyZWVfc3BhY2Uocm9vdCwgaW5vZGUsIFBBR0VfQ0FDSEVfU0laRSk7CisJaWYgKHJldCkKKwkJZ290byBvdXQ7CisKKwlyZXQgPSBidHJmc19yZXNlcnZlX21ldGFkYXRhX2Zvcl9kZWxhbGxvYyhyb290LCBpbm9kZSwgMSk7CisJaWYgKHJldCkKKwkJZ290byBvdXQ7CiAKIAlyZXQgPSAtRU5PTUVNOwogYWdhaW46CiAJcGFnZSA9IGdyYWJfY2FjaGVfcGFnZShtYXBwaW5nLCBpbmRleCk7Ci0JaWYgKCFwYWdlKQorCWlmICghcGFnZSkgeworCQlidHJmc19mcmVlX3Jlc2VydmVkX2RhdGFfc3BhY2Uocm9vdCwgaW5vZGUsIFBBR0VfQ0FDSEVfU0laRSk7CisJCWJ0cmZzX3VucmVzZXJ2ZV9tZXRhZGF0YV9mb3JfZGVsYWxsb2Mocm9vdCwgaW5vZGUsIDEpOwogCQlnb3RvIG91dDsKKwl9CiAKIAlwYWdlX3N0YXJ0ID0gcGFnZV9vZmZzZXQocGFnZSk7CiAJcGFnZV9lbmQgPSBwYWdlX3N0YXJ0ICsgUEFHRV9DQUNIRV9TSVpFIC0gMTsKQEAgLTI5NTAsNyArMzA4MCwxNiBAQAogCQlnb3RvIGFnYWluOwogCX0KIAotCWJ0cmZzX3NldF9leHRlbnRfZGVsYWxsb2MoaW5vZGUsIHBhZ2Vfc3RhcnQsIHBhZ2VfZW5kKTsKKwljbGVhcl9leHRlbnRfYml0cygmQlRSRlNfSShpbm9kZSktPmlvX3RyZWUsIHBhZ2Vfc3RhcnQsIHBhZ2VfZW5kLAorCQkJICBFWFRFTlRfRElSVFkgfCBFWFRFTlRfREVMQUxMT0MgfCBFWFRFTlRfRE9fQUNDT1VOVElORywKKwkJCSAgR0ZQX05PRlMpOworCisJcmV0ID0gYnRyZnNfc2V0X2V4dGVudF9kZWxhbGxvYyhpbm9kZSwgcGFnZV9zdGFydCwgcGFnZV9lbmQpOworCWlmIChyZXQpIHsKKwkJdW5sb2NrX2V4dGVudChpb190cmVlLCBwYWdlX3N0YXJ0LCBwYWdlX2VuZCwgR0ZQX05PRlMpOworCQlnb3RvIG91dF91bmxvY2s7CisJfQorCiAJcmV0ID0gMDsKIAlpZiAob2Zmc2V0ICE9IFBBR0VfQ0FDSEVfU0laRSkgewogCQlrYWRkciA9IGttYXAocGFnZSk7CkBAIC0yOTYzLDYgKzMxMDIsOSBAQAogCXVubG9ja19leHRlbnQoaW9fdHJlZSwgcGFnZV9zdGFydCwgcGFnZV9lbmQsIEdGUF9OT0ZTKTsKIAogb3V0X3VubG9jazoKKwlpZiAocmV0KQorCQlidHJmc19mcmVlX3Jlc2VydmVkX2RhdGFfc3BhY2Uocm9vdCwgaW5vZGUsIFBBR0VfQ0FDSEVfU0laRSk7CisJYnRyZnNfdW5yZXNlcnZlX21ldGFkYXRhX2Zvcl9kZWxhbGxvYyhyb290LCBpbm9kZSwgMSk7CiAJdW5sb2NrX3BhZ2UocGFnZSk7CiAJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOwogb3V0OgpAQCAtMjk4MSwxNyArMzEyMywxNSBAQAogCXU2NCBsYXN0X2J5dGU7CiAJdTY0IGN1cl9vZmZzZXQ7CiAJdTY0IGhvbGVfc2l6ZTsKLQlpbnQgZXJyOworCWludCBlcnIgPSAwOwogCiAJaWYgKHNpemUgPD0gaG9sZV9zdGFydCkKIAkJcmV0dXJuIDA7CiAKLQllcnIgPSBidHJmc19jaGVja19tZXRhZGF0YV9mcmVlX3NwYWNlKHJvb3QpOworCWVyciA9IGJ0cmZzX3RydW5jYXRlX3BhZ2UoaW5vZGUtPmlfbWFwcGluZywgaW5vZGUtPmlfc2l6ZSk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAotCWJ0cmZzX3RydW5jYXRlX3BhZ2UoaW5vZGUtPmlfbWFwcGluZywgaW5vZGUtPmlfc2l6ZSk7Ci0KIAl3aGlsZSAoMSkgewogCQlzdHJ1Y3QgYnRyZnNfb3JkZXJlZF9leHRlbnQgKm9yZGVyZWQ7CiAJCWJ0cmZzX3dhaXRfb3JkZXJlZF9yYW5nZShpbm9kZSwgaG9sZV9zdGFydCwKQEAgLTMwMjQsMTIgKzMxNjQsMTggQEAKIAkJCQkJCSBjdXJfb2Zmc2V0LCAmaGludF9ieXRlLCAxKTsKIAkJCWlmIChlcnIpCiAJCQkJYnJlYWs7CisKKwkJCWVyciA9IGJ0cmZzX3Jlc2VydmVfbWV0YWRhdGFfc3BhY2Uocm9vdCwgMSk7CisJCQlpZiAoZXJyKQorCQkJCWJyZWFrOworCiAJCQllcnIgPSBidHJmc19pbnNlcnRfZmlsZV9leHRlbnQodHJhbnMsIHJvb3QsCiAJCQkJCWlub2RlLT5pX2lubywgY3VyX29mZnNldCwgMCwKIAkJCQkJMCwgaG9sZV9zaXplLCAwLCBob2xlX3NpemUsCiAJCQkJCTAsIDAsIDApOwogCQkJYnRyZnNfZHJvcF9leHRlbnRfY2FjaGUoaW5vZGUsIGhvbGVfc3RhcnQsCiAJCQkJCWxhc3RfYnl0ZSAtIDEsIDApOworCQkJYnRyZnNfdW5yZXNlcnZlX21ldGFkYXRhX3NwYWNlKHJvb3QsIDEpOwogCQl9CiAJCWZyZWVfZXh0ZW50X21hcChlbSk7CiAJCWN1cl9vZmZzZXQgPSBsYXN0X2J5dGU7CkBAIC0zMzUzLDYgKzM0OTksNyBAQAogCWJpLT5nZW5lcmF0aW9uID0gMDsKIAliaS0+c2VxdWVuY2UgPSAwOwogCWJpLT5sYXN0X3RyYW5zID0gMDsKKwliaS0+bGFzdF9zdWJfdHJhbnMgPSAwOwogCWJpLT5sb2dnZWRfdHJhbnMgPSAwOwogCWJpLT5kZWxhbGxvY19ieXRlcyA9IDA7CiAJYmktPnJlc2VydmVkX2J5dGVzID0gMDsKQEAgLTM1MDMsMTIgKzM2NTAsMTQgQEAKIHsKIAlzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdDsKIAotCWlmICghZGVudHJ5LT5kX2lub2RlKQotCQlyZXR1cm4gMDsKKwlpZiAoIWRlbnRyeS0+ZF9pbm9kZSAmJiAhSVNfUk9PVChkZW50cnkpKQorCQlkZW50cnkgPSBkZW50cnktPmRfcGFyZW50OwogCi0Jcm9vdCA9IEJUUkZTX0koZGVudHJ5LT5kX2lub2RlKS0+cm9vdDsKLQlpZiAoYnRyZnNfcm9vdF9yZWZzKCZyb290LT5yb290X2l0ZW0pID09IDApCi0JCXJldHVybiAxOworCWlmIChkZW50cnktPmRfaW5vZGUpIHsKKwkJcm9vdCA9IEJUUkZTX0koZGVudHJ5LT5kX2lub2RlKS0+cm9vdDsKKwkJaWYgKGJ0cmZzX3Jvb3RfcmVmcygmcm9vdC0+cm9vdF9pdGVtKSA9PSAwKQorCQkJcmV0dXJuIDE7CisJfQogCXJldHVybiAwOwogfQogCkBAIC0zOTkwLDExICs0MTM5LDE4IEBACiAJaWYgKCFuZXdfdmFsaWRfZGV2KHJkZXYpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWVyciA9IGJ0cmZzX2NoZWNrX21ldGFkYXRhX2ZyZWVfc3BhY2Uocm9vdCk7CisJLyoKKwkgKiAyIGZvciBpbm9kZSBpdGVtIGFuZCByZWYKKwkgKiAyIGZvciBkaXIgaXRlbXMKKwkgKiAxIGZvciB4YXR0ciBpZiBzZWxpbnV4IGlzIG9uCisJICovCisJZXJyID0gYnRyZnNfcmVzZXJ2ZV9tZXRhZGF0YV9zcGFjZShyb290LCA1KTsKIAlpZiAoZXJyKQotCQlnb3RvIGZhaWw7CisJCXJldHVybiBlcnI7CiAKIAl0cmFucyA9IGJ0cmZzX3N0YXJ0X3RyYW5zYWN0aW9uKHJvb3QsIDEpOworCWlmICghdHJhbnMpCisJCWdvdG8gZmFpbDsKIAlidHJmc19zZXRfdHJhbnNfYmxvY2tfZ3JvdXAodHJhbnMsIGRpcik7CiAKIAllcnIgPSBidHJmc19maW5kX2ZyZWVfb2JqZWN0aWQodHJhbnMsIHJvb3QsIGRpci0+aV9pbm8sICZvYmplY3RpZCk7CkBAIC00MDMyLDYgKzQxODgsNyBAQAogCW5yID0gdHJhbnMtPmJsb2Nrc191c2VkOwogCWJ0cmZzX2VuZF90cmFuc2FjdGlvbl90aHJvdHRsZSh0cmFucywgcm9vdCk7CiBmYWlsOgorCWJ0cmZzX3VucmVzZXJ2ZV9tZXRhZGF0YV9zcGFjZShyb290LCA1KTsKIAlpZiAoZHJvcF9pbm9kZSkgewogCQlpbm9kZV9kZWNfbGlua19jb3VudChpbm9kZSk7CiAJCWlwdXQoaW5vZGUpOwpAQCAtNDA1MiwxMCArNDIwOSwxOCBAQAogCXU2NCBvYmplY3RpZDsKIAl1NjQgaW5kZXggPSAwOwogCi0JZXJyID0gYnRyZnNfY2hlY2tfbWV0YWRhdGFfZnJlZV9zcGFjZShyb290KTsKKwkvKgorCSAqIDIgZm9yIGlub2RlIGl0ZW0gYW5kIHJlZgorCSAqIDIgZm9yIGRpciBpdGVtcworCSAqIDEgZm9yIHhhdHRyIGlmIHNlbGludXggaXMgb24KKwkgKi8KKwllcnIgPSBidHJmc19yZXNlcnZlX21ldGFkYXRhX3NwYWNlKHJvb3QsIDUpOwogCWlmIChlcnIpCi0JCWdvdG8gZmFpbDsKKwkJcmV0dXJuIGVycjsKKwogCXRyYW5zID0gYnRyZnNfc3RhcnRfdHJhbnNhY3Rpb24ocm9vdCwgMSk7CisJaWYgKCF0cmFucykKKwkJZ290byBmYWlsOwogCWJ0cmZzX3NldF90cmFuc19ibG9ja19ncm91cCh0cmFucywgZGlyKTsKIAogCWVyciA9IGJ0cmZzX2ZpbmRfZnJlZV9vYmplY3RpZCh0cmFucywgcm9vdCwgZGlyLT5pX2lubywgJm9iamVjdGlkKTsKQEAgLTQwOTYsNiArNDI2MSw3IEBACiAJbnIgPSB0cmFucy0+YmxvY2tzX3VzZWQ7CiAJYnRyZnNfZW5kX3RyYW5zYWN0aW9uX3Rocm90dGxlKHRyYW5zLCByb290KTsKIGZhaWw6CisJYnRyZnNfdW5yZXNlcnZlX21ldGFkYXRhX3NwYWNlKHJvb3QsIDUpOwogCWlmIChkcm9wX2lub2RlKSB7CiAJCWlub2RlX2RlY19saW5rX2NvdW50KGlub2RlKTsKIAkJaXB1dChpbm9kZSk7CkBAIC00MTE4LDEwICs0Mjg0LDE2IEBACiAJaWYgKGlub2RlLT5pX25saW5rID09IDApCiAJCXJldHVybiAtRU5PRU5UOwogCi0JYnRyZnNfaW5jX25saW5rKGlub2RlKTsKLQllcnIgPSBidHJmc19jaGVja19tZXRhZGF0YV9mcmVlX3NwYWNlKHJvb3QpOworCS8qCisJICogMSBpdGVtIGZvciBpbm9kZSByZWYKKwkgKiAyIGl0ZW1zIGZvciBkaXIgaXRlbXMKKwkgKi8KKwllcnIgPSBidHJmc19yZXNlcnZlX21ldGFkYXRhX3NwYWNlKHJvb3QsIDMpOwogCWlmIChlcnIpCi0JCWdvdG8gZmFpbDsKKwkJcmV0dXJuIGVycjsKKworCWJ0cmZzX2luY19ubGluayhpbm9kZSk7CisKIAllcnIgPSBidHJmc19zZXRfaW5vZGVfaW5kZXgoZGlyLCAmaW5kZXgpOwogCWlmIChlcnIpCiAJCWdvdG8gZmFpbDsKQEAgLTQxNDUsNiArNDMxNyw3IEBACiAJbnIgPSB0cmFucy0+YmxvY2tzX3VzZWQ7CiAJYnRyZnNfZW5kX3RyYW5zYWN0aW9uX3Rocm90dGxlKHRyYW5zLCByb290KTsKIGZhaWw6CisJYnRyZnNfdW5yZXNlcnZlX21ldGFkYXRhX3NwYWNlKHJvb3QsIDMpOwogCWlmIChkcm9wX2lub2RlKSB7CiAJCWlub2RlX2RlY19saW5rX2NvdW50KGlub2RlKTsKIAkJaXB1dChpbm9kZSk7CkBAIC00MTY0LDE3ICs0MzM3LDIxIEBACiAJdTY0IGluZGV4ID0gMDsKIAl1bnNpZ25lZCBsb25nIG5yID0gMTsKIAotCWVyciA9IGJ0cmZzX2NoZWNrX21ldGFkYXRhX2ZyZWVfc3BhY2Uocm9vdCk7CisJLyoKKwkgKiAyIGl0ZW1zIGZvciBpbm9kZSBhbmQgcmVmCisJICogMiBpdGVtcyBmb3IgZGlyIGl0ZW1zCisJICogMSBmb3IgeGF0dHIgaWYgc2VsaW51eCBpcyBvbgorCSAqLworCWVyciA9IGJ0cmZzX3Jlc2VydmVfbWV0YWRhdGFfc3BhY2Uocm9vdCwgNSk7CiAJaWYgKGVycikKLQkJZ290byBvdXRfdW5sb2NrOworCQlyZXR1cm4gZXJyOwogCiAJdHJhbnMgPSBidHJmc19zdGFydF90cmFuc2FjdGlvbihyb290LCAxKTsKLQlidHJmc19zZXRfdHJhbnNfYmxvY2tfZ3JvdXAodHJhbnMsIGRpcik7Ci0KLQlpZiAoSVNfRVJSKHRyYW5zKSkgewotCQllcnIgPSBQVFJfRVJSKHRyYW5zKTsKKwlpZiAoIXRyYW5zKSB7CisJCWVyciA9IC1FTk9NRU07CiAJCWdvdG8gb3V0X3VubG9jazsKIAl9CisJYnRyZnNfc2V0X3RyYW5zX2Jsb2NrX2dyb3VwKHRyYW5zLCBkaXIpOwogCiAJZXJyID0gYnRyZnNfZmluZF9mcmVlX29iamVjdGlkKHRyYW5zLCByb290LCBkaXItPmlfaW5vLCAmb2JqZWN0aWQpOwogCWlmIChlcnIpIHsKQEAgLTQyMjMsNiArNDQwMCw3IEBACiAJYnRyZnNfZW5kX3RyYW5zYWN0aW9uX3Rocm90dGxlKHRyYW5zLCByb290KTsKIAogb3V0X3VubG9jazoKKwlidHJmc191bnJlc2VydmVfbWV0YWRhdGFfc3BhY2Uocm9vdCwgNSk7CiAJaWYgKGRyb3Bfb25fZXJyKQogCQlpcHV0KGlub2RlKTsKIAlidHJmc19idHJlZV9iYWxhbmNlX2RpcnR5KHJvb3QsIG5yKTsKQEAgLTQ2ODQsNyArNDg2Miw4IEBACiAJCSAqLwogCQljbGVhcl9leHRlbnRfYml0KHRyZWUsIHBhZ2Vfc3RhcnQsIHBhZ2VfZW5kLAogCQkJCSBFWFRFTlRfRElSVFkgfCBFWFRFTlRfREVMQUxMT0MgfAotCQkJCSBFWFRFTlRfTE9DS0VELCAxLCAwLCBOVUxMLCBHRlBfTk9GUyk7CisJCQkJIEVYVEVOVF9MT0NLRUQgfCBFWFRFTlRfRE9fQUNDT1VOVElORywgMSwgMCwKKwkJCQkgTlVMTCwgR0ZQX05PRlMpOwogCQkvKgogCQkgKiB3aG9ldmVyIGNsZWFyZWQgdGhlIHByaXZhdGUgYml0IGlzIHJlc3BvbnNpYmxlCiAJCSAqIGZvciB0aGUgZmluaXNoX29yZGVyZWRfaW8KQEAgLTQ2OTcsOCArNDg3Niw4IEBACiAJCWxvY2tfZXh0ZW50KHRyZWUsIHBhZ2Vfc3RhcnQsIHBhZ2VfZW5kLCBHRlBfTk9GUyk7CiAJfQogCWNsZWFyX2V4dGVudF9iaXQodHJlZSwgcGFnZV9zdGFydCwgcGFnZV9lbmQsCi0JCSBFWFRFTlRfTE9DS0VEIHwgRVhURU5UX0RJUlRZIHwgRVhURU5UX0RFTEFMTE9DLAotCQkgMSwgMSwgTlVMTCwgR0ZQX05PRlMpOworCQkgRVhURU5UX0xPQ0tFRCB8IEVYVEVOVF9ESVJUWSB8IEVYVEVOVF9ERUxBTExPQyB8CisJCSBFWFRFTlRfRE9fQUNDT1VOVElORywgMSwgMSwgTlVMTCwgR0ZQX05PRlMpOwogCV9fYnRyZnNfcmVsZWFzZXBhZ2UocGFnZSwgR0ZQX05PRlMpOwogCiAJQ2xlYXJQYWdlQ2hlY2tlZChwYWdlKTsKQEAgLTQ3NDcsNiArNDkyNiwxMyBAQAogCQlnb3RvIG91dDsKIAl9CiAKKwlyZXQgPSBidHJmc19yZXNlcnZlX21ldGFkYXRhX2Zvcl9kZWxhbGxvYyhyb290LCBpbm9kZSwgMSk7CisJaWYgKHJldCkgeworCQlidHJmc19mcmVlX3Jlc2VydmVkX2RhdGFfc3BhY2Uocm9vdCwgaW5vZGUsIFBBR0VfQ0FDSEVfU0laRSk7CisJCXJldCA9IFZNX0ZBVUxUX1NJR0JVUzsKKwkJZ290byBvdXQ7CisJfQorCiAJcmV0ID0gVk1fRkFVTFRfTk9QQUdFOyAvKiBtYWtlIHRoZSBWTSByZXRyeSB0aGUgZmF1bHQgKi8KIGFnYWluOgogCWxvY2tfcGFnZShwYWdlKTsKQEAgLTQ3NzgsNyArNDk2NCwyNCBAQAogCQlnb3RvIGFnYWluOwogCX0KIAotCWJ0cmZzX3NldF9leHRlbnRfZGVsYWxsb2MoaW5vZGUsIHBhZ2Vfc3RhcnQsIHBhZ2VfZW5kKTsKKwkvKgorCSAqIFhYWCAtIHBhZ2VfbWt3cml0ZSBnZXRzIGNhbGxlZCBldmVyeSB0aW1lIHRoZSBwYWdlIGlzIGRpcnRpZWQsIGV2ZW4KKwkgKiBpZiBpdCB3YXMgYWxyZWFkeSBkaXJ0eSwgc28gZm9yIHNwYWNlIGFjY291bnRpbmcgcmVhc29ucyB3ZSBuZWVkIHRvCisJICogY2xlYXIgYW55IGRlbGFsbG9jIGJpdHMgZm9yIHRoZSByYW5nZSB3ZSBhcmUgZml4aW5nIHRvIHNhdmUuICBUaGVyZQorCSAqIGlzIHByb2JhYmx5IGEgYmV0dGVyIHdheSB0byBkbyB0aGlzLCBidXQgZm9yIG5vdyBrZWVwIGNvbnNpc3RlbnQgd2l0aAorCSAqIHByZXBhcmVfcGFnZXMgaW4gdGhlIG5vcm1hbCB3cml0ZSBwYXRoLgorCSAqLworCWNsZWFyX2V4dGVudF9iaXRzKCZCVFJGU19JKGlub2RlKS0+aW9fdHJlZSwgcGFnZV9zdGFydCwgcGFnZV9lbmQsCisJCQkgIEVYVEVOVF9ESVJUWSB8IEVYVEVOVF9ERUxBTExPQyB8IEVYVEVOVF9ET19BQ0NPVU5USU5HLAorCQkJICBHRlBfTk9GUyk7CisKKwlyZXQgPSBidHJmc19zZXRfZXh0ZW50X2RlbGFsbG9jKGlub2RlLCBwYWdlX3N0YXJ0LCBwYWdlX2VuZCk7CisJaWYgKHJldCkgeworCQl1bmxvY2tfZXh0ZW50KGlvX3RyZWUsIHBhZ2Vfc3RhcnQsIHBhZ2VfZW5kLCBHRlBfTk9GUyk7CisJCXJldCA9IFZNX0ZBVUxUX1NJR0JVUzsKKwkJYnRyZnNfZnJlZV9yZXNlcnZlZF9kYXRhX3NwYWNlKHJvb3QsIGlub2RlLCBQQUdFX0NBQ0hFX1NJWkUpOworCQlnb3RvIG91dF91bmxvY2s7CisJfQogCXJldCA9IDA7CiAKIAkvKiBwYWdlIGlzIHdob2xseSBvciBwYXJ0aWFsbHkgaW5zaWRlIEVPRiAqLwpAQCAtNDc5NywxMCArNTAwMCwxMyBAQAogCXNldF9wYWdlX2RpcnR5KHBhZ2UpOwogCVNldFBhZ2VVcHRvZGF0ZShwYWdlKTsKIAotCUJUUkZTX0koaW5vZGUpLT5sYXN0X3RyYW5zID0gcm9vdC0+ZnNfaW5mby0+Z2VuZXJhdGlvbiArIDE7CisJQlRSRlNfSShpbm9kZSktPmxhc3RfdHJhbnMgPSByb290LT5mc19pbmZvLT5nZW5lcmF0aW9uOworCUJUUkZTX0koaW5vZGUpLT5sYXN0X3N1Yl90cmFucyA9IEJUUkZTX0koaW5vZGUpLT5yb290LT5sb2dfdHJhbnNpZDsKKwogCXVubG9ja19leHRlbnQoaW9fdHJlZSwgcGFnZV9zdGFydCwgcGFnZV9lbmQsIEdGUF9OT0ZTKTsKIAogb3V0X3VubG9jazoKKwlidHJmc191bnJlc2VydmVfbWV0YWRhdGFfZm9yX2RlbGFsbG9jKHJvb3QsIGlub2RlLCAxKTsKIAlpZiAoIXJldCkKIAkJcmV0dXJuIFZNX0ZBVUxUX0xPQ0tFRDsKIAl1bmxvY2tfcGFnZShwYWdlKTsKQEAgLTQ4MjEsNyArNTAyNyw5IEBACiAJaWYgKElTX0FQUEVORChpbm9kZSkgfHwgSVNfSU1NVVRBQkxFKGlub2RlKSkKIAkJcmV0dXJuOwogCi0JYnRyZnNfdHJ1bmNhdGVfcGFnZShpbm9kZS0+aV9tYXBwaW5nLCBpbm9kZS0+aV9zaXplKTsKKwlyZXQgPSBidHJmc190cnVuY2F0ZV9wYWdlKGlub2RlLT5pX21hcHBpbmcsIGlub2RlLT5pX3NpemUpOworCWlmIChyZXQpCisJCXJldHVybjsKIAlidHJmc193YWl0X29yZGVyZWRfcmFuZ2UoaW5vZGUsIGlub2RlLT5pX3NpemUgJiAofm1hc2spLCAodTY0KS0xKTsKIAogCXRyYW5zID0gYnRyZnNfc3RhcnRfdHJhbnNhY3Rpb24ocm9vdCwgMSk7CkBAIC00OTE2LDcgKzUxMjQsMTEgQEAKIAlpZiAoIWVpKQogCQlyZXR1cm4gTlVMTDsKIAllaS0+bGFzdF90cmFucyA9IDA7CisJZWktPmxhc3Rfc3ViX3RyYW5zID0gMDsKIAllaS0+bG9nZ2VkX3RyYW5zID0gMDsKKwllaS0+b3V0c3RhbmRpbmdfZXh0ZW50cyA9IDA7CisJZWktPnJlc2VydmVkX2V4dGVudHMgPSAwOworCXNwaW5fbG9ja19pbml0KCZlaS0+YWNjb3VudGluZ19sb2NrKTsKIAlidHJmc19vcmRlcmVkX2lub2RlX3RyZWVfaW5pdCgmZWktPm9yZGVyZWRfdHJlZSk7CiAJSU5JVF9MSVNUX0hFQUQoJmVpLT5pX29ycGhhbik7CiAJSU5JVF9MSVNUX0hFQUQoJmVpLT5vcmRlcmVkX29wZXJhdGlvbnMpOwpAQCAtNTA3MCw3ICs1MjgyLDEyIEBACiAJICAgIG5ld19pbm9kZS0+aV9zaXplID4gQlRSRlNfRU1QVFlfRElSX1NJWkUpCiAJCXJldHVybiAtRU5PVEVNUFRZOwogCi0JcmV0ID0gYnRyZnNfY2hlY2tfbWV0YWRhdGFfZnJlZV9zcGFjZShyb290KTsKKwkvKgorCSAqIDIgaXRlbXMgZm9yIGRpciBpdGVtcworCSAqIDEgaXRlbSBmb3Igb3JwaGFuIGVudHJ5CisJICogMSBpdGVtIGZvciByZWYKKwkgKi8KKwlyZXQgPSBidHJmc19yZXNlcnZlX21ldGFkYXRhX3NwYWNlKHJvb3QsIDQpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKQEAgLTUxODUsNiArNTQwMiw4IEBACiAKIAlpZiAob2xkX2lub2RlLT5pX2lubyA9PSBCVFJGU19GSVJTVF9GUkVFX09CSkVDVElEKQogCQl1cF9yZWFkKCZyb290LT5mc19pbmZvLT5zdWJ2b2xfc2VtKTsKKworCWJ0cmZzX3VucmVzZXJ2ZV9tZXRhZGF0YV9zcGFjZShyb290LCA0KTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC01MjU2LDExICs1NDc1LDE4IEBACiAJaWYgKG5hbWVfbGVuID4gQlRSRlNfTUFYX0lOTElORV9EQVRBX1NJWkUocm9vdCkpCiAJCXJldHVybiAtRU5BTUVUT09MT05HOwogCi0JZXJyID0gYnRyZnNfY2hlY2tfbWV0YWRhdGFfZnJlZV9zcGFjZShyb290KTsKKwkvKgorCSAqIDIgaXRlbXMgZm9yIGlub2RlIGl0ZW0gYW5kIHJlZgorCSAqIDIgaXRlbXMgZm9yIGRpciBpdGVtcworCSAqIDEgaXRlbSBmb3IgeGF0dHIgaWYgc2VsaW51eCBpcyBvbgorCSAqLworCWVyciA9IGJ0cmZzX3Jlc2VydmVfbWV0YWRhdGFfc3BhY2Uocm9vdCwgNSk7CiAJaWYgKGVycikKLQkJZ290byBvdXRfZmFpbDsKKwkJcmV0dXJuIGVycjsKIAogCXRyYW5zID0gYnRyZnNfc3RhcnRfdHJhbnNhY3Rpb24ocm9vdCwgMSk7CisJaWYgKCF0cmFucykKKwkJZ290byBvdXRfZmFpbDsKIAlidHJmc19zZXRfdHJhbnNfYmxvY2tfZ3JvdXAodHJhbnMsIGRpcik7CiAKIAllcnIgPSBidHJmc19maW5kX2ZyZWVfb2JqZWN0aWQodHJhbnMsIHJvb3QsIGRpci0+aV9pbm8sICZvYmplY3RpZCk7CkBAIC01MzQxLDYgKzU1NjcsNyBAQAogCW5yID0gdHJhbnMtPmJsb2Nrc191c2VkOwogCWJ0cmZzX2VuZF90cmFuc2FjdGlvbl90aHJvdHRsZSh0cmFucywgcm9vdCk7CiBvdXRfZmFpbDoKKwlidHJmc191bnJlc2VydmVfbWV0YWRhdGFfc3BhY2Uocm9vdCwgNSk7CiAJaWYgKGRyb3BfaW5vZGUpIHsKIAkJaW5vZGVfZGVjX2xpbmtfY291bnQoaW5vZGUpOwogCQlpcHV0KGlub2RlKTsKQEAgLTUzNjIsNiArNTU4OSwxMSBAQAogCiAJd2hpbGUgKG51bV9ieXRlcyA+IDApIHsKIAkJYWxsb2Nfc2l6ZSA9IG1pbihudW1fYnl0ZXMsIHJvb3QtPmZzX2luZm8tPm1heF9leHRlbnQpOworCisJCXJldCA9IGJ0cmZzX3Jlc2VydmVfbWV0YWRhdGFfc3BhY2Uocm9vdCwgMSk7CisJCWlmIChyZXQpCisJCQlnb3RvIG91dDsKKwogCQlyZXQgPSBidHJmc19yZXNlcnZlX2V4dGVudCh0cmFucywgcm9vdCwgYWxsb2Nfc2l6ZSwKIAkJCQkJICAgcm9vdC0+c2VjdG9yc2l6ZSwgMCwgYWxsb2NfaGludCwKIAkJCQkJICAgKHU2NCktMSwgJmlucywgMSk7CkBAIC01MzgxLDYgKzU2MTMsNyBAQAogCQludW1fYnl0ZXMgLT0gaW5zLm9mZnNldDsKIAkJY3VyX29mZnNldCArPSBpbnMub2Zmc2V0OwogCQlhbGxvY19oaW50ID0gaW5zLm9iamVjdGlkICsgaW5zLm9mZnNldDsKKwkJYnRyZnNfdW5yZXNlcnZlX21ldGFkYXRhX3NwYWNlKHJvb3QsIDEpOwogCX0KIG91dDoKIAlpZiAoY3VyX29mZnNldCA+IHN0YXJ0KSB7CkBAIC01NTQ0LDcgKzU3NzcsNyBAQAogCS5wZXJtaXNzaW9uCT0gYnRyZnNfcGVybWlzc2lvbiwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGJ0cmZzX2Rpcl9maWxlX29wZXJhdGlvbnMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBidHJmc19kaXJfZmlsZV9vcGVyYXRpb25zID0gewogCS5sbHNlZWsJCT0gZ2VuZXJpY19maWxlX2xsc2VlaywKIAkucmVhZAkJPSBnZW5lcmljX3JlYWRfZGlyLAogCS5yZWFkZGlyCT0gYnRyZnNfcmVhbF9yZWFkZGlyLApAQCAtNTU2Niw2ICs1Nzk5LDggQEAKIAkucmVhZHBhZ2VfaW9fZmFpbGVkX2hvb2sgPSBidHJmc19pb19mYWlsZWRfaG9vaywKIAkuc2V0X2JpdF9ob29rID0gYnRyZnNfc2V0X2JpdF9ob29rLAogCS5jbGVhcl9iaXRfaG9vayA9IGJ0cmZzX2NsZWFyX2JpdF9ob29rLAorCS5tZXJnZV9leHRlbnRfaG9vayA9IGJ0cmZzX21lcmdlX2V4dGVudF9ob29rLAorCS5zcGxpdF9leHRlbnRfaG9vayA9IGJ0cmZzX3NwbGl0X2V4dGVudF9ob29rLAogfTsKIAogLyoKQEAgLTU2MzIsNiArNTg2Nyw2IEBACiAJLnJlbW92ZXhhdHRyCT0gYnRyZnNfcmVtb3ZleGF0dHIsCiB9OwogCi1zdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgYnRyZnNfZGVudHJ5X29wZXJhdGlvbnMgPSB7Citjb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgYnRyZnNfZGVudHJ5X29wZXJhdGlvbnMgPSB7CiAJLmRfZGVsZXRlCT0gYnRyZnNfZGVudHJ5X2RlbGV0ZSwKIH07CmRpZmYgLS1naXQgYS9mcy9idHJmcy9pb2N0bC5jIGIvZnMvYnRyZnMvaW9jdGwuYwppbmRleCBhODU3N2E3Li5jZGJiMDU0IDEwMDY0NAotLS0gYS9mcy9idHJmcy9pb2N0bC5jCisrKyBiL2ZzL2J0cmZzL2lvY3RsLmMKQEAgLTIzOSw3ICsyMzksMTMgQEAKIAl1NjQgaW5kZXggPSAwOwogCXVuc2lnbmVkIGxvbmcgbnIgPSAxOwogCi0JcmV0ID0gYnRyZnNfY2hlY2tfbWV0YWRhdGFfZnJlZV9zcGFjZShyb290KTsKKwkvKgorCSAqIDEgLSBpbm9kZSBpdGVtCisJICogMiAtIHJlZnMKKwkgKiAxIC0gcm9vdCBpdGVtCisJICogMiAtIGRpciBpdGVtcworCSAqLworCXJldCA9IGJ0cmZzX3Jlc2VydmVfbWV0YWRhdGFfc3BhY2Uocm9vdCwgNik7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIApAQCAtMzQwLDYgKzM0Niw5IEBACiAJZXJyID0gYnRyZnNfY29tbWl0X3RyYW5zYWN0aW9uKHRyYW5zLCByb290KTsKIAlpZiAoZXJyICYmICFyZXQpCiAJCXJldCA9IGVycjsKKworCWJ0cmZzX3VucmVzZXJ2ZV9tZXRhZGF0YV9zcGFjZShyb290LCA2KTsKKwlidHJmc19idHJlZV9iYWxhbmNlX2RpcnR5KHJvb3QsIG5yKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0zNTUsMTkgKzM2NCwyNyBAQAogCWlmICghcm9vdC0+cmVmX2Nvd3MpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JcmV0ID0gYnRyZnNfY2hlY2tfbWV0YWRhdGFfZnJlZV9zcGFjZShyb290KTsKKwkvKgorCSAqIDEgLSBpbm9kZSBpdGVtCisJICogMiAtIHJlZnMKKwkgKiAxIC0gcm9vdCBpdGVtCisJICogMiAtIGRpciBpdGVtcworCSAqLworCXJldCA9IGJ0cmZzX3Jlc2VydmVfbWV0YWRhdGFfc3BhY2Uocm9vdCwgNik7CiAJaWYgKHJldCkKIAkJZ290byBmYWlsX3VubG9jazsKIAogCXBlbmRpbmdfc25hcHNob3QgPSBremFsbG9jKHNpemVvZigqcGVuZGluZ19zbmFwc2hvdCksIEdGUF9OT0ZTKTsKIAlpZiAoIXBlbmRpbmdfc25hcHNob3QpIHsKIAkJcmV0ID0gLUVOT01FTTsKKwkJYnRyZnNfdW5yZXNlcnZlX21ldGFkYXRhX3NwYWNlKHJvb3QsIDYpOwogCQlnb3RvIGZhaWxfdW5sb2NrOwogCX0KIAlwZW5kaW5nX3NuYXBzaG90LT5uYW1lID0ga21hbGxvYyhuYW1lbGVuICsgMSwgR0ZQX05PRlMpOwogCWlmICghcGVuZGluZ19zbmFwc2hvdC0+bmFtZSkgewogCQlyZXQgPSAtRU5PTUVNOwogCQlrZnJlZShwZW5kaW5nX3NuYXBzaG90KTsKKwkJYnRyZnNfdW5yZXNlcnZlX21ldGFkYXRhX3NwYWNlKHJvb3QsIDYpOwogCQlnb3RvIGZhaWxfdW5sb2NrOwogCX0KIAltZW1jcHkocGVuZGluZ19zbmFwc2hvdC0+bmFtZSwgbmFtZSwgbmFtZWxlbik7CkBAIC04MTMsNiArODMwLDcgQEAKIG91dF91bmxvY2s6CiAJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7CiAJaWYgKCFlcnIpIHsKKwkJc2hyaW5rX2RjYWNoZV9zYihyb290LT5mc19pbmZvLT5zYik7CiAJCWJ0cmZzX2ludmFsaWRhdGVfaW5vZGVzKGRlc3QpOwogCQlkX2RlbGV0ZShkZW50cnkpOwogCX0KQEAgLTExMDUsOCArMTEyMywxMCBAQAogCQkJCQlkYXRhbyArPSBvZmYgLSBrZXkub2Zmc2V0OwogCQkJCQlkYXRhbCAtPSBvZmYgLSBrZXkub2Zmc2V0OwogCQkJCX0KLQkJCQlpZiAoa2V5Lm9mZnNldCArIGRhdGFvICsgZGF0YWwgPiBvZmYgKyBsZW4pCi0JCQkJCWRhdGFsID0gb2ZmICsgbGVuIC0ga2V5Lm9mZnNldCAtIGRhdGFvOworCisJCQkJaWYgKGtleS5vZmZzZXQgKyBkYXRhbCA+IG9mZiArIGxlbikKKwkJCQkJZGF0YWwgPSBvZmYgKyBsZW4gLSBrZXkub2Zmc2V0OworCiAJCQkJLyogZGlza28gPT0gMCBtZWFucyBpdCdzIGEgaG9sZSAqLwogCQkJCWlmICghZGlza28pCiAJCQkJCWRhdGFvID0gMDsKQEAgLTEyMTUsMTUgKzEyMzUsMTUgQEAKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmRlbnRyeShmaWxlKS0+ZF9pbm9kZTsKIAlzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCA9IEJUUkZTX0koaW5vZGUpLT5yb290OwogCXN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zOwotCWludCByZXQgPSAwOworCWludCByZXQ7CiAKKwlyZXQgPSAtRVBFUk07CiAJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQotCQlyZXR1cm4gLUVQRVJNOwotCi0JaWYgKGZpbGUtPnByaXZhdGVfZGF0YSkgewotCQlyZXQgPSAtRUlOUFJPR1JFU1M7CiAJCWdvdG8gb3V0OwotCX0KKworCXJldCA9IC1FSU5QUk9HUkVTUzsKKwlpZiAoZmlsZS0+cHJpdmF0ZV9kYXRhKQorCQlnb3RvIG91dDsKIAogCXJldCA9IG1udF93YW50X3dyaXRlKGZpbGUtPmZfcGF0aC5tbnQpOwogCWlmIChyZXQpCkBAIC0xMjMzLDEyICsxMjUzLDE5IEBACiAJcm9vdC0+ZnNfaW5mby0+b3Blbl9pb2N0bF90cmFucysrOwogCW11dGV4X3VubG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbXV0ZXgpOwogCisJcmV0ID0gLUVOT01FTTsKIAl0cmFucyA9IGJ0cmZzX3N0YXJ0X2lvY3RsX3RyYW5zYWN0aW9uKHJvb3QsIDApOwotCWlmICh0cmFucykKLQkJZmlsZS0+cHJpdmF0ZV9kYXRhID0gdHJhbnM7Ci0JZWxzZQotCQlyZXQgPSAtRU5PTUVNOwotCS8qcHJpbnRrKEtFUk5fSU5GTyAiYnRyZnNfaW9jdGxfdHJhbnNfc3RhcnQgb24gJXBcbiIsIGZpbGUpOyovCisJaWYgKCF0cmFucykKKwkJZ290byBvdXRfZHJvcDsKKworCWZpbGUtPnByaXZhdGVfZGF0YSA9IHRyYW5zOworCXJldHVybiAwOworCitvdXRfZHJvcDoKKwltdXRleF9sb2NrKCZyb290LT5mc19pbmZvLT50cmFuc19tdXRleCk7CisJcm9vdC0+ZnNfaW5mby0+b3Blbl9pb2N0bF90cmFucy0tOworCW11dGV4X3VubG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbXV0ZXgpOworCW1udF9kcm9wX3dyaXRlKGZpbGUtPmZfcGF0aC5tbnQpOwogb3V0OgogCXJldHVybiByZXQ7CiB9CkBAIC0xMjU0LDI0ICsxMjgxLDIwIEBACiAJc3RydWN0IGlub2RlICppbm9kZSA9IGZkZW50cnkoZmlsZSktPmRfaW5vZGU7CiAJc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QgPSBCVFJGU19JKGlub2RlKS0+cm9vdDsKIAlzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFuczsKLQlpbnQgcmV0ID0gMDsKIAogCXRyYW5zID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCWlmICghdHJhbnMpIHsKLQkJcmV0ID0gLUVJTlZBTDsKLQkJZ290byBvdXQ7Ci0JfQotCWJ0cmZzX2VuZF90cmFuc2FjdGlvbih0cmFucywgcm9vdCk7CisJaWYgKCF0cmFucykKKwkJcmV0dXJuIC1FSU5WQUw7CiAJZmlsZS0+cHJpdmF0ZV9kYXRhID0gTlVMTDsKIAorCWJ0cmZzX2VuZF90cmFuc2FjdGlvbih0cmFucywgcm9vdCk7CisKIAltdXRleF9sb2NrKCZyb290LT5mc19pbmZvLT50cmFuc19tdXRleCk7CiAJcm9vdC0+ZnNfaW5mby0+b3Blbl9pb2N0bF90cmFucy0tOwogCW11dGV4X3VubG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbXV0ZXgpOwogCiAJbW50X2Ryb3Bfd3JpdGUoZmlsZS0+Zl9wYXRoLm1udCk7Ci0KLW91dDoKLQlyZXR1cm4gcmV0OworCXJldHVybiAwOwogfQogCiBsb25nIGJ0cmZzX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL29yZGVyZWQtZGF0YS5jIGIvZnMvYnRyZnMvb3JkZXJlZC1kYXRhLmMKaW5kZXggYjVkNmQyNC4uNTc5OWJjNCAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvb3JkZXJlZC1kYXRhLmMKKysrIGIvZnMvYnRyZnMvb3JkZXJlZC1kYXRhLmMKQEAgLTMwNiw2ICszMDYsMTIgQEAKIAl0cmVlLT5sYXN0ID0gTlVMTDsKIAlzZXRfYml0KEJUUkZTX09SREVSRURfQ09NUExFVEUsICZlbnRyeS0+ZmxhZ3MpOwogCisJc3Bpbl9sb2NrKCZCVFJGU19JKGlub2RlKS0+YWNjb3VudGluZ19sb2NrKTsKKwlCVFJGU19JKGlub2RlKS0+b3V0c3RhbmRpbmdfZXh0ZW50cy0tOworCXNwaW5fdW5sb2NrKCZCVFJGU19JKGlub2RlKS0+YWNjb3VudGluZ19sb2NrKTsKKwlidHJmc191bnJlc2VydmVfbWV0YWRhdGFfZm9yX2RlbGFsbG9jKEJUUkZTX0koaW5vZGUpLT5yb290LAorCQkJCQkgICAgICBpbm9kZSwgMSk7CisKIAlzcGluX2xvY2soJkJUUkZTX0koaW5vZGUpLT5yb290LT5mc19pbmZvLT5vcmRlcmVkX2V4dGVudF9sb2NrKTsKIAlsaXN0X2RlbF9pbml0KCZlbnRyeS0+cm9vdF9leHRlbnRfbGlzdCk7CiAKQEAgLTQ1OCw3ICs0NjQsNyBAQAogCSAqIHN0YXJ0IElPIG9uIGFueSBkaXJ0eSBvbmVzIHNvIHRoZSB3YWl0IGRvZXNuJ3Qgc3RhbGwgd2FpdGluZwogCSAqIGZvciBwZGZsdXNoIHRvIGZpbmQgdGhlbQogCSAqLwotCWJ0cmZzX2ZkYXRhd3JpdGVfcmFuZ2UoaW5vZGUtPmlfbWFwcGluZywgc3RhcnQsIGVuZCwgV0JfU1lOQ19BTEwpOworCWZpbGVtYXBfZmRhdGF3cml0ZV9yYW5nZShpbm9kZS0+aV9tYXBwaW5nLCBzdGFydCwgZW5kKTsKIAlpZiAod2FpdCkgewogCQl3YWl0X2V2ZW50KGVudHJ5LT53YWl0LCB0ZXN0X2JpdChCVFJGU19PUkRFUkVEX0NPTVBMRVRFLAogCQkJCQkJICZlbnRyeS0+ZmxhZ3MpKTsKQEAgLTQ4OCwxNyArNDk0LDE1IEBACiAJLyogc3RhcnQgSU8gYWNyb3NzIHRoZSByYW5nZSBmaXJzdCB0byBpbnN0YW50aWF0ZSBhbnkgZGVsYWxsb2MKIAkgKiBleHRlbnRzCiAJICovCi0JYnRyZnNfZmRhdGF3cml0ZV9yYW5nZShpbm9kZS0+aV9tYXBwaW5nLCBzdGFydCwgb3JpZ19lbmQsIFdCX1NZTkNfQUxMKTsKKwlmaWxlbWFwX2ZkYXRhd3JpdGVfcmFuZ2UoaW5vZGUtPmlfbWFwcGluZywgc3RhcnQsIG9yaWdfZW5kKTsKIAogCS8qIFRoZSBjb21wcmVzc2lvbiBjb2RlIHdpbGwgbGVhdmUgcGFnZXMgbG9ja2VkIGJ1dCByZXR1cm4gZnJvbQogCSAqIHdyaXRlcGFnZSB3aXRob3V0IHNldHRpbmcgdGhlIHBhZ2Ugd3JpdGViYWNrLiAgU3RhcnRpbmcgYWdhaW4KIAkgKiB3aXRoIFdCX1NZTkNfQUxMIHdpbGwgZW5kIHVwIHdhaXRpbmcgZm9yIHRoZSBJTyB0byBhY3R1YWxseSBzdGFydC4KIAkgKi8KLQlidHJmc19mZGF0YXdyaXRlX3JhbmdlKGlub2RlLT5pX21hcHBpbmcsIHN0YXJ0LCBvcmlnX2VuZCwgV0JfU1lOQ19BTEwpOworCWZpbGVtYXBfZmRhdGF3cml0ZV9yYW5nZShpbm9kZS0+aV9tYXBwaW5nLCBzdGFydCwgb3JpZ19lbmQpOwogCi0JYnRyZnNfd2FpdF9vbl9wYWdlX3dyaXRlYmFja19yYW5nZShpbm9kZS0+aV9tYXBwaW5nLAotCQkJCQkgICBzdGFydCA+PiBQQUdFX0NBQ0hFX1NISUZULAotCQkJCQkgICBvcmlnX2VuZCA+PiBQQUdFX0NBQ0hFX1NISUZUKTsKKwlmaWxlbWFwX2ZkYXRhd2FpdF9yYW5nZShpbm9kZS0+aV9tYXBwaW5nLCBzdGFydCwgb3JpZ19lbmQpOwogCiAJZW5kID0gb3JpZ19lbmQ7CiAJZm91bmQgPSAwOwpAQCAtNzE2LDg5ICs3MjAsNiBAQAogfQogCiAKLS8qKgotICogdGFrZW4gZnJvbSBtbS9maWxlbWFwLmMgYmVjYXVzZSBpdCBpc24ndCBleHBvcnRlZAotICoKLSAqIF9fZmlsZW1hcF9mZGF0YXdyaXRlX3JhbmdlIC0gc3RhcnQgd3JpdGViYWNrIG9uIG1hcHBpbmcgZGlydHkgcGFnZXMgaW4gcmFuZ2UKLSAqIEBtYXBwaW5nOglhZGRyZXNzIHNwYWNlIHN0cnVjdHVyZSB0byB3cml0ZQotICogQHN0YXJ0OglvZmZzZXQgaW4gYnl0ZXMgd2hlcmUgdGhlIHJhbmdlIHN0YXJ0cwotICogQGVuZDoJb2Zmc2V0IGluIGJ5dGVzIHdoZXJlIHRoZSByYW5nZSBlbmRzIChpbmNsdXNpdmUpCi0gKiBAc3luY19tb2RlOgllbmFibGUgc3luY2hyb25vdXMgb3BlcmF0aW9uCi0gKgotICogU3RhcnQgd3JpdGViYWNrIGFnYWluc3QgYWxsIG9mIGEgbWFwcGluZydzIGRpcnR5IHBhZ2VzIHRoYXQgbGllCi0gKiB3aXRoaW4gdGhlIGJ5dGUgb2Zmc2V0cyA8c3RhcnQsIGVuZD4gaW5jbHVzaXZlLgotICoKLSAqIElmIHN5bmNfbW9kZSBpcyBXQl9TWU5DX0FMTCB0aGVuIHRoaXMgaXMgYSAiZGF0YSBpbnRlZ3JpdHkiIG9wZXJhdGlvbiwgYXMKLSAqIG9wcG9zZWQgdG8gYSByZWd1bGFyIG1lbW9yeSBjbGVhbnNpbmcgd3JpdGViYWNrLiAgVGhlIGRpZmZlcmVuY2UgYmV0d2VlbgotICogdGhlc2UgdHdvIG9wZXJhdGlvbnMgaXMgdGhhdCBpZiBhIGRpcnR5IHBhZ2UvYnVmZmVyIGlzIGVuY291bnRlcmVkLCBpdCBtdXN0Ci0gKiBiZSB3YWl0ZWQgdXBvbiwgYW5kIG5vdCBqdXN0IHNraXBwZWQgb3Zlci4KLSAqLwotaW50IGJ0cmZzX2ZkYXRhd3JpdGVfcmFuZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIGxvZmZfdCBzdGFydCwKLQkJCSAgIGxvZmZfdCBlbmQsIGludCBzeW5jX21vZGUpCi17Ci0Jc3RydWN0IHdyaXRlYmFja19jb250cm9sIHdiYyA9IHsKLQkJLnN5bmNfbW9kZSA9IHN5bmNfbW9kZSwKLQkJLm5yX3RvX3dyaXRlID0gbWFwcGluZy0+bnJwYWdlcyAqIDIsCi0JCS5yYW5nZV9zdGFydCA9IHN0YXJ0LAotCQkucmFuZ2VfZW5kID0gZW5kLAotCX07Ci0JcmV0dXJuIGJ0cmZzX3dyaXRlcGFnZXMobWFwcGluZywgJndiYyk7Ci19Ci0KLS8qKgotICogdGFrZW4gZnJvbSBtbS9maWxlbWFwLmMgYmVjYXVzZSBpdCBpc24ndCBleHBvcnRlZAotICoKLSAqIHdhaXRfb25fcGFnZV93cml0ZWJhY2tfcmFuZ2UgLSB3YWl0IGZvciB3cml0ZWJhY2sgdG8gY29tcGxldGUKLSAqIEBtYXBwaW5nOgl0YXJnZXQgYWRkcmVzc19zcGFjZQotICogQHN0YXJ0OgliZWdpbm5pbmcgcGFnZSBpbmRleAotICogQGVuZDoJZW5kaW5nIHBhZ2UgaW5kZXgKLSAqCi0gKiBXYWl0IGZvciB3cml0ZWJhY2sgdG8gY29tcGxldGUgYWdhaW5zdCBwYWdlcyBpbmRleGVkIGJ5IHN0YXJ0LT5lbmQKLSAqIGluY2x1c2l2ZQotICovCi1pbnQgYnRyZnNfd2FpdF9vbl9wYWdlX3dyaXRlYmFja19yYW5nZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKLQkJCQkgICAgICAgcGdvZmZfdCBzdGFydCwgcGdvZmZfdCBlbmQpCi17Ci0Jc3RydWN0IHBhZ2V2ZWMgcHZlYzsKLQlpbnQgbnJfcGFnZXM7Ci0JaW50IHJldCA9IDA7Ci0JcGdvZmZfdCBpbmRleDsKLQotCWlmIChlbmQgPCBzdGFydCkKLQkJcmV0dXJuIDA7Ci0KLQlwYWdldmVjX2luaXQoJnB2ZWMsIDApOwotCWluZGV4ID0gc3RhcnQ7Ci0Jd2hpbGUgKChpbmRleCA8PSBlbmQpICYmCi0JCQkobnJfcGFnZXMgPSBwYWdldmVjX2xvb2t1cF90YWcoJnB2ZWMsIG1hcHBpbmcsICZpbmRleCwKLQkJCVBBR0VDQUNIRV9UQUdfV1JJVEVCQUNLLAotCQkJbWluKGVuZCAtIGluZGV4LCAocGdvZmZfdClQQUdFVkVDX1NJWkUtMSkgKyAxKSkgIT0gMCkgewotCQl1bnNpZ25lZCBpOwotCi0JCWZvciAoaSA9IDA7IGkgPCBucl9wYWdlczsgaSsrKSB7Ci0JCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHB2ZWMucGFnZXNbaV07Ci0KLQkJCS8qIHVudGlsIHJhZGl4IHRyZWUgbG9va3VwIGFjY2VwdHMgZW5kX2luZGV4ICovCi0JCQlpZiAocGFnZS0+aW5kZXggPiBlbmQpCi0JCQkJY29udGludWU7Ci0KLQkJCXdhaXRfb25fcGFnZV93cml0ZWJhY2socGFnZSk7Ci0JCQlpZiAoUGFnZUVycm9yKHBhZ2UpKQotCQkJCXJldCA9IC1FSU87Ci0JCX0KLQkJcGFnZXZlY19yZWxlYXNlKCZwdmVjKTsKLQkJY29uZF9yZXNjaGVkKCk7Ci0JfQotCi0JLyogQ2hlY2sgZm9yIG91dHN0YW5kaW5nIHdyaXRlIGVycm9ycyAqLwotCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoQVNfRU5PU1BDLCAmbWFwcGluZy0+ZmxhZ3MpKQotCQlyZXQgPSAtRU5PU1BDOwotCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoQVNfRUlPLCAmbWFwcGluZy0+ZmxhZ3MpKQotCQlyZXQgPSAtRUlPOwotCi0JcmV0dXJuIHJldDsKLX0KLQogLyoKICAqIGFkZCBhIGdpdmVuIGlub2RlIHRvIHRoZSBsaXN0IG9mIGlub2RlcyB0aGF0IG11c3QgYmUgZnVsbHkgb24KICAqIGRpc2sgYmVmb3JlIGEgdHJhbnNhY3Rpb24gY29tbWl0IGZpbmlzaGVzLgpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvb3JkZXJlZC1kYXRhLmggYi9mcy9idHJmcy9vcmRlcmVkLWRhdGEuaAppbmRleCA5OTNhN2VhLi5mODJlODc0IDEwMDY0NAotLS0gYS9mcy9idHJmcy9vcmRlcmVkLWRhdGEuaAorKysgYi9mcy9idHJmcy9vcmRlcmVkLWRhdGEuaApAQCAtMTUzLDEwICsxNTMsNiBAQAogaW50IGJ0cmZzX29yZGVyZWRfdXBkYXRlX2lfc2l6ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJCXN0cnVjdCBidHJmc19vcmRlcmVkX2V4dGVudCAqb3JkZXJlZCk7CiBpbnQgYnRyZnNfZmluZF9vcmRlcmVkX3N1bShzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1NjQgb2Zmc2V0LCB1NjQgZGlza19ieXRlbnIsIHUzMiAqc3VtKTsKLWludCBidHJmc193YWl0X29uX3BhZ2Vfd3JpdGViYWNrX3JhbmdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAotCQkJCSAgICAgICBwZ29mZl90IHN0YXJ0LCBwZ29mZl90IGVuZCk7Ci1pbnQgYnRyZnNfZmRhdGF3cml0ZV9yYW5nZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgbG9mZl90IHN0YXJ0LAotCQkJICAgbG9mZl90IGVuZCwgaW50IHN5bmNfbW9kZSk7CiBpbnQgYnRyZnNfd2FpdF9vcmRlcmVkX2V4dGVudHMoc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsIGludCBub2Nvd19vbmx5KTsKIGludCBidHJmc19ydW5fb3JkZXJlZF9vcGVyYXRpb25zKHN0cnVjdCBidHJmc19yb290ICpyb290LCBpbnQgd2FpdCk7CiBpbnQgYnRyZnNfYWRkX29yZGVyZWRfb3BlcmF0aW9uKHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLApkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvcmVsb2NhdGlvbi5jIGIvZnMvYnRyZnMvcmVsb2NhdGlvbi5jCmluZGV4IDM2MWFkMzIuLmNmY2M5M2MgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL3JlbG9jYXRpb24uYworKysgYi9mcy9idHJmcy9yZWxvY2F0aW9uLmMKQEAgLTM1MTgsNyArMzUxOCw3IEBACiAJQlVHX09OKCFyYy0+YmxvY2tfZ3JvdXApOwogCiAJYnRyZnNfaW5pdF93b3JrZXJzKCZyYy0+d29ya2VycywgInJlbG9jYXRlIiwKLQkJCSAgIGZzX2luZm8tPnRocmVhZF9wb29sX3NpemUpOworCQkJICAgZnNfaW5mby0+dGhyZWFkX3Bvb2xfc2l6ZSwgTlVMTCk7CiAKIAlyYy0+ZXh0ZW50X3Jvb3QgPSBleHRlbnRfcm9vdDsKIAlidHJmc19wcmVwYXJlX2Jsb2NrX2dyb3VwX3JlbG9jYXRpb24oZXh0ZW50X3Jvb3QsIHJjLT5ibG9ja19ncm91cCk7CkBAIC0zNzAxLDcgKzM3MDEsNyBAQAogCW1hcHBpbmdfdHJlZV9pbml0KCZyYy0+cmVsb2Nfcm9vdF90cmVlKTsKIAlJTklUX0xJU1RfSEVBRCgmcmMtPnJlbG9jX3Jvb3RzKTsKIAlidHJmc19pbml0X3dvcmtlcnMoJnJjLT53b3JrZXJzLCAicmVsb2NhdGUiLAotCQkJICAgcm9vdC0+ZnNfaW5mby0+dGhyZWFkX3Bvb2xfc2l6ZSk7CisJCQkgICByb290LT5mc19pbmZvLT50aHJlYWRfcG9vbF9zaXplLCBOVUxMKTsKIAlyYy0+ZXh0ZW50X3Jvb3QgPSByb290LT5mc19pbmZvLT5leHRlbnRfcm9vdDsKIAogCXNldF9yZWxvY19jb250cm9sKHJjKTsKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL3N1cGVyLmMgYi9mcy9idHJmcy9zdXBlci5jCmluZGV4IDY3MDM1MzguLjc1MmE1NDYgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL3N1cGVyLmMKKysrIGIvZnMvYnRyZnMvc3VwZXIuYwpAQCAtNjYsNyArNjYsOCBAQAogCU9wdF9kZWdyYWRlZCwgT3B0X3N1YnZvbCwgT3B0X2RldmljZSwgT3B0X25vZGF0YXN1bSwgT3B0X25vZGF0YWNvdywKIAlPcHRfbWF4X2V4dGVudCwgT3B0X21heF9pbmxpbmUsIE9wdF9hbGxvY19zdGFydCwgT3B0X25vYmFycmllciwKIAlPcHRfc3NkLCBPcHRfbm9zc2QsIE9wdF9zc2Rfc3ByZWFkLCBPcHRfdGhyZWFkX3Bvb2wsIE9wdF9ub2FjbCwKLQlPcHRfY29tcHJlc3MsIE9wdF9ub3RyZWVsb2csIE9wdF9yYXRpbywgT3B0X2ZsdXNob25jb21taXQsIE9wdF9lcnIsCisJT3B0X2NvbXByZXNzLCBPcHRfbm90cmVlbG9nLCBPcHRfcmF0aW8sIE9wdF9mbHVzaG9uY29tbWl0LAorCU9wdF9kaXNjYXJkLCBPcHRfZXJyLAogfTsKIAogc3RhdGljIG1hdGNoX3RhYmxlX3QgdG9rZW5zID0gewpAQCAtODgsNiArODksNyBAQAogCXtPcHRfbm90cmVlbG9nLCAibm90cmVlbG9nIn0sCiAJe09wdF9mbHVzaG9uY29tbWl0LCAiZmx1c2hvbmNvbW1pdCJ9LAogCXtPcHRfcmF0aW8sICJtZXRhZGF0YV9yYXRpbz0lZCJ9LAorCXtPcHRfZGlzY2FyZCwgImRpc2NhcmQifSwKIAl7T3B0X2VyciwgTlVMTH0sCiB9OwogCkBAIC0yNTcsNiArMjU5LDkgQEAKIAkJCQkgICAgICAgaW5mby0+bWV0YWRhdGFfcmF0aW8pOwogCQkJfQogCQkJYnJlYWs7CisJCWNhc2UgT3B0X2Rpc2NhcmQ6CisJCQlidHJmc19zZXRfb3B0KGluZm8tPm1vdW50X29wdCwgRElTQ0FSRCk7CisJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCWJyZWFrOwogCQl9CkBAIC0zNDQsNyArMzQ5LDkgQEAKIAlzYi0+c19leHBvcnRfb3AgPSAmYnRyZnNfZXhwb3J0X29wczsKIAlzYi0+c194YXR0ciA9IGJ0cmZzX3hhdHRyX2hhbmRsZXJzOwogCXNiLT5zX3RpbWVfZ3JhbiA9IDE7CisjaWZkZWYgQ09ORklHX0JUUkZTX0ZTX1BPU0lYX0FDTAogCXNiLT5zX2ZsYWdzIHw9IE1TX1BPU0lYQUNMOworI2VuZGlmCiAKIAl0cmVlX3Jvb3QgPSBvcGVuX2N0cmVlKHNiLCBmc19kZXZpY2VzLCAoY2hhciAqKWRhdGEpOwogCmRpZmYgLS1naXQgYS9mcy9idHJmcy90cmFuc2FjdGlvbi5jIGIvZnMvYnRyZnMvdHJhbnNhY3Rpb24uYwppbmRleCA4OGY4NjZmLi5iY2E4MmE0IDEwMDY0NAotLS0gYS9mcy9idHJmcy90cmFuc2FjdGlvbi5jCisrKyBiL2ZzL2J0cmZzL3RyYW5zYWN0aW9uLmMKQEAgLTE4Niw2ICsxODYsOSBAQAogCWgtPmFsbG9jX2V4Y2x1ZGVfc3RhcnQgPSAwOwogCWgtPmRlbGF5ZWRfcmVmX3VwZGF0ZXMgPSAwOwogCisJaWYgKCFjdXJyZW50LT5qb3VybmFsX2luZm8pCisJCWN1cnJlbnQtPmpvdXJuYWxfaW5mbyA9IGg7CisKIAlyb290LT5mc19pbmZvLT5ydW5uaW5nX3RyYW5zYWN0aW9uLT51c2VfY291bnQrKzsKIAlyZWNvcmRfcm9vdF9pbl90cmFucyhoLCByb290KTsKIAltdXRleF91bmxvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX211dGV4KTsKQEAgLTMxNyw2ICszMjAsOSBAQAogCQl3YWtlX3VwKCZjdXJfdHJhbnMtPndyaXRlcl93YWl0KTsKIAlwdXRfdHJhbnNhY3Rpb24oY3VyX3RyYW5zKTsKIAltdXRleF91bmxvY2soJmluZm8tPnRyYW5zX211dGV4KTsKKworCWlmIChjdXJyZW50LT5qb3VybmFsX2luZm8gPT0gdHJhbnMpCisJCWN1cnJlbnQtPmpvdXJuYWxfaW5mbyA9IE5VTEw7CiAJbWVtc2V0KHRyYW5zLCAwLCBzaXplb2YoKnRyYW5zKSk7CiAJa21lbV9jYWNoZV9mcmVlKGJ0cmZzX3RyYW5zX2hhbmRsZV9jYWNoZXAsIHRyYW5zKTsKIApAQCAtMzM4LDEwICszNDQsMTAgQEAKIC8qCiAgKiB3aGVuIGJ0cmVlIGJsb2NrcyBhcmUgYWxsb2NhdGVkLCB0aGV5IGhhdmUgc29tZSBjb3JyZXNwb25kaW5nIGJpdHMgc2V0IGZvcgogICogdGhlbSBpbiBvbmUgb2YgdHdvIGV4dGVudF9pbyB0cmVlcy4gIFRoaXMgaXMgdXNlZCB0byBtYWtlIHN1cmUgYWxsIG9mCi0gKiB0aG9zZSBleHRlbnRzIGFyZSBvbiBkaXNrIGZvciB0cmFuc2FjdGlvbiBvciBsb2cgY29tbWl0CisgKiB0aG9zZSBleHRlbnRzIGFyZSBzZW50IHRvIGRpc2sgYnV0IGRvZXMgbm90IHdhaXQgb24gdGhlbQogICovCi1pbnQgYnRyZnNfd3JpdGVfYW5kX3dhaXRfbWFya2VkX2V4dGVudHMoc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsCi0JCQkJCXN0cnVjdCBleHRlbnRfaW9fdHJlZSAqZGlydHlfcGFnZXMpCitpbnQgYnRyZnNfd3JpdGVfbWFya2VkX2V4dGVudHMoc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsCisJCQkgICAgICAgc3RydWN0IGV4dGVudF9pb190cmVlICpkaXJ0eV9wYWdlcykKIHsKIAlpbnQgcmV0OwogCWludCBlcnIgPSAwOwpAQCAtMzg4LDYgKzM5NCwyOSBAQAogCQkJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOwogCQl9CiAJfQorCWlmIChlcnIpCisJCXdlcnIgPSBlcnI7CisJcmV0dXJuIHdlcnI7Cit9CisKKy8qCisgKiB3aGVuIGJ0cmVlIGJsb2NrcyBhcmUgYWxsb2NhdGVkLCB0aGV5IGhhdmUgc29tZSBjb3JyZXNwb25kaW5nIGJpdHMgc2V0IGZvcgorICogdGhlbSBpbiBvbmUgb2YgdHdvIGV4dGVudF9pbyB0cmVlcy4gIFRoaXMgaXMgdXNlZCB0byBtYWtlIHN1cmUgYWxsIG9mCisgKiB0aG9zZSBleHRlbnRzIGFyZSBvbiBkaXNrIGZvciB0cmFuc2FjdGlvbiBvciBsb2cgY29tbWl0LiAgV2Ugd2FpdAorICogb24gYWxsIHRoZSBwYWdlcyBhbmQgY2xlYXIgdGhlbSBmcm9tIHRoZSBkaXJ0eSBwYWdlcyBzdGF0ZSB0cmVlCisgKi8KK2ludCBidHJmc193YWl0X21hcmtlZF9leHRlbnRzKHN0cnVjdCBidHJmc19yb290ICpyb290LAorCQkJICAgICAgc3RydWN0IGV4dGVudF9pb190cmVlICpkaXJ0eV9wYWdlcykKK3sKKwlpbnQgcmV0OworCWludCBlcnIgPSAwOworCWludCB3ZXJyID0gMDsKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKKwlzdHJ1Y3QgaW5vZGUgKmJ0cmVlX2lub2RlID0gcm9vdC0+ZnNfaW5mby0+YnRyZWVfaW5vZGU7CisJdTY0IHN0YXJ0ID0gMDsKKwl1NjQgZW5kOworCXVuc2lnbmVkIGxvbmcgaW5kZXg7CisKIAl3aGlsZSAoMSkgewogCQlyZXQgPSBmaW5kX2ZpcnN0X2V4dGVudF9iaXQoZGlydHlfcGFnZXMsIDAsICZzdGFydCwgJmVuZCwKIAkJCQkJICAgIEVYVEVOVF9ESVJUWSk7CkBAIC00MTgsNiArNDQ3LDIyIEBACiAJcmV0dXJuIHdlcnI7CiB9CiAKKy8qCisgKiB3aGVuIGJ0cmVlIGJsb2NrcyBhcmUgYWxsb2NhdGVkLCB0aGV5IGhhdmUgc29tZSBjb3JyZXNwb25kaW5nIGJpdHMgc2V0IGZvcgorICogdGhlbSBpbiBvbmUgb2YgdHdvIGV4dGVudF9pbyB0cmVlcy4gIFRoaXMgaXMgdXNlZCB0byBtYWtlIHN1cmUgYWxsIG9mCisgKiB0aG9zZSBleHRlbnRzIGFyZSBvbiBkaXNrIGZvciB0cmFuc2FjdGlvbiBvciBsb2cgY29tbWl0CisgKi8KK2ludCBidHJmc193cml0ZV9hbmRfd2FpdF9tYXJrZWRfZXh0ZW50cyhzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwKKwkJCQkJc3RydWN0IGV4dGVudF9pb190cmVlICpkaXJ0eV9wYWdlcykKK3sKKwlpbnQgcmV0OworCWludCByZXQyOworCisJcmV0ID0gYnRyZnNfd3JpdGVfbWFya2VkX2V4dGVudHMocm9vdCwgZGlydHlfcGFnZXMpOworCXJldDIgPSBidHJmc193YWl0X21hcmtlZF9leHRlbnRzKHJvb3QsIGRpcnR5X3BhZ2VzKTsKKwlyZXR1cm4gcmV0IHx8IHJldDI7Cit9CisKIGludCBidHJmc193cml0ZV9hbmRfd2FpdF90cmFuc2FjdGlvbihzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucywKIAkJCQkgICAgIHN0cnVjdCBidHJmc19yb290ICpyb290KQogewpAQCAtNzQzLDYgKzc4OCw3IEBACiAJbWVtY3B5KCZwZW5kaW5nLT5yb290X2tleSwgJmtleSwgc2l6ZW9mKGtleSkpOwogZmFpbDoKIAlrZnJlZShuZXdfcm9vdF9pdGVtKTsKKwlidHJmc191bnJlc2VydmVfbWV0YWRhdGFfc3BhY2Uocm9vdCwgNik7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTA1OSw2ICsxMTA1LDkgQEAKIAogCW11dGV4X3VubG9jaygmcm9vdC0+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+Y291bnQpKSB7CisJCWlwdXQoY2lmc19maWxlLT5wSW5vZGUpOwogCQlrZnJlZShjaWZzX2ZpbGUpOworCX0KIH0KIAogLyoKQEAgLTM4Miw3ICszODcsNiBAQAogCXVuc2lnbmVkIGxvbmcgdGltZTsJLyogamlmZmllcyBvZiBsYXN0IHVwZGF0ZS9jaGVjayBvZiBpbm9kZSAqLwogCWJvb2wgY2xpZW50Q2FuQ2FjaGVSZWFkOjE7CS8qIHJlYWQgb3Bsb2NrICovCiAJYm9vbCBjbGllbnRDYW5DYWNoZUFsbDoxOwkvKiByZWFkIGFuZCB3cml0ZWJlaGluZCBvcGxvY2sgKi8KLQlib29sIG9wbG9ja1BlbmRpbmc6MTsKIAlib29sIGRlbGV0ZV9wZW5kaW5nOjE7CQkvKiBERUxFVEVfT05fQ0xPU0UgaXMgc2V0ICovCiAJdTY0ICBzZXJ2ZXJfZW9mOwkJLyogY3VycmVudCBmaWxlIHNpemUgb24gc2VydmVyICovCiAJdTY0ICB1bmlxdWVpZDsJCQkvKiBzZXJ2ZXIgaW5vZGUgbnVtYmVyICovCkBAIC01ODUsOSArNTg5LDkgQEAKICNkZWZpbmUgICBDSUZTU0VDX01VU1RfTEFOTUFOCTB4MTAwMTAKICNkZWZpbmUgICBDSUZTU0VDX01VU1RfUExOVFhUCTB4MjAwMjAKICNpZmRlZiBDT05GSUdfQ0lGU19VUENBTEwKLSNkZWZpbmUgICBDSUZTU0VDX01BU0sgICAgICAgICAgMHhBRjBBRiAvKiBhbGxvd3Mgd2VhayBzZWN1cml0eSBidXQgYWxzbyBrcmI1ICovCisjZGVmaW5lICAgQ0lGU1NFQ19NQVNLICAgICAgICAgIDB4QkYwQkYgLyogYWxsb3dzIHdlYWsgc2VjdXJpdHkgYnV0IGFsc28ga3JiNSAqLwogI2Vsc2UKLSNkZWZpbmUgICBDSUZTU0VDX01BU0sgICAgICAgICAgMHhBNzBBNyAvKiBjdXJyZW50IGZsYWdzIHN1cHBvcnRlZCBpZiB3ZWFrICovCisjZGVmaW5lICAgQ0lGU1NFQ19NQVNLICAgICAgICAgIDB4QjcwQjcgLyogY3VycmVudCBmbGFncyBzdXBwb3J0ZWQgaWYgd2VhayAqLwogI2VuZGlmIC8qIFVQQ0FMTCAqLwogI2Vsc2UgLyogZG8gbm90IGFsbG93IHdlYWsgcHcgaGFzaCAqLwogI2lmZGVmIENPTkZJR19DSUZTX1VQQ0FMTApAQCAtNjY5LDEyICs2NzMsNiBAQAogICovCiBHTE9CQUxfRVhURVJOIHJ3bG9ja190IEdsb2JhbFNNQlNlc2xvY2s7CiAKLS8qIEdsb2JhbCBsaXN0IG9mIG9wbG9ja3MgKi8KLUdMT0JBTF9FWFRFUk4gc3RydWN0IGxpc3RfaGVhZCBjaWZzX29wbG9ja19saXN0OwotCi0vKiBQcm90ZWN0cyB0aGUgY2lmc19vcGxvY2tfbGlzdCAqLwotR0xPQkFMX0VYVEVSTiBzcGlubG9ja190IGNpZnNfb3Bsb2NrX2xvY2s7Ci0KIC8qIE91dHN0YW5kaW5nIGRpciBub3RpZnkgcmVxdWVzdHMgKi8KIEdMT0JBTF9FWFRFUk4gc3RydWN0IGxpc3RfaGVhZCBHbG9iYWxEbm90aWZ5UmVxTGlzdDsKIC8qIERpck5vdGlmeSByZXNwb25zZSBxdWV1ZSAqLwpAQCAtNzI1LDMgKzcyMyw0IEBACiBHTE9CQUxfRVhURVJOIHVuc2lnbmVkIGludCBjaWZzX21pbl9zbWFsbDsgIC8qIG1pbiBzaXplIG9mIHNtYWxsIGJ1ZiBwb29sICovCiBHTE9CQUxfRVhURVJOIHVuc2lnbmVkIGludCBjaWZzX21heF9wZW5kaW5nOyAvKiBNQVggcmVxdWVzdHMgYXQgb25jZSB0byBzZXJ2ZXIqLwogCitleHRlcm4gY29uc3Qgc3RydWN0IHNsb3dfd29ya19vcHMgY2lmc19vcGxvY2tfYnJlYWtfb3BzOwpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jaWZzcHJvdG8uaCBiL2ZzL2NpZnMvY2lmc3Byb3RvLmgKaW5kZXggZGE4ZmJmNS4uNjkyOGMyNCAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jaWZzcHJvdG8uaAorKysgYi9mcy9jaWZzL2NpZnNwcm90by5oCkBAIC04NiwxOCArODYsMTcgQEAKIAkJCSAgICAgY29uc3QgaW50IHN0YWdlLAogCQkJICAgICBjb25zdCBzdHJ1Y3QgbmxzX3RhYmxlICpubHNfY3ApOwogZXh0ZXJuIF9fdTE2IEdldE5leHRNaWQoc3RydWN0IFRDUF9TZXJ2ZXJfSW5mbyAqc2VydmVyKTsKLWV4dGVybiBzdHJ1Y3Qgb3Bsb2NrX3FfZW50cnkgKkFsbG9jT3Bsb2NrUUVudHJ5KHN0cnVjdCBpbm9kZSAqLCB1MTYsCi0JCQkJCQkgc3RydWN0IGNpZnNUY29uSW5mbyAqKTsKLWV4dGVybiB2b2lkIERlbGV0ZU9wbG9ja1FFbnRyeShzdHJ1Y3Qgb3Bsb2NrX3FfZW50cnkgKik7Ci1leHRlcm4gdm9pZCBEZWxldGVUY29uT3Bsb2NrUUVudHJpZXMoc3RydWN0IGNpZnNUY29uSW5mbyAqKTsKIGV4dGVybiBzdHJ1Y3QgdGltZXNwZWMgY2lmc19OVHRpbWVUb1VuaXgoX19sZTY0IHV0Y19uYW5vc2Vjb25kc19zaW5jZV8xNjAxKTsKIGV4dGVybiB1NjQgY2lmc19Vbml4VGltZVRvTlQoc3RydWN0IHRpbWVzcGVjKTsKIGV4dGVybiBzdHJ1Y3QgdGltZXNwZWMgY252cnREb3NVbml4VG0oX19sZTE2IGxlX2RhdGUsIF9fbGUxNiBsZV90aW1lLAogCQkJCSAgICAgIGludCBvZmZzZXQpOwogCitleHRlcm4gc3RydWN0IGNpZnNGaWxlSW5mbyAqY2lmc19uZXdfZmlsZWluZm8oc3RydWN0IGlub2RlICpuZXdpbm9kZSwKKwkJCQlfX3UxNiBmaWxlSGFuZGxlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCQlzdHJ1Y3QgdmZzbW91bnQgKm1udCwgdW5zaWduZWQgaW50IG9mbGFncyk7CiBleHRlcm4gaW50IGNpZnNfcG9zaXhfb3BlbihjaGFyICpmdWxsX3BhdGgsIHN0cnVjdCBpbm9kZSAqKnBpbm9kZSwKLQkJCSAgIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCBtb2RlLCBpbnQgb2ZsYWdzLAotCQkJICAgaW50ICpwb3Bsb2NrLCBfX3UxNiAqcG5ldGZpZCwgaW50IHhpZCk7CisJCQkgICBzdHJ1Y3QgdmZzbW91bnQgKm1udCwgaW50IG1vZGUsIGludCBvZmxhZ3MsCisJCQkgICBfX3UzMiAqcG9wbG9jaywgX191MTYgKnBuZXRmaWQsIGludCB4aWQpOwogZXh0ZXJuIHZvaWQgY2lmc191bml4X2Jhc2ljX3RvX2ZhdHRyKHN0cnVjdCBjaWZzX2ZhdHRyICpmYXR0ciwKIAkJCQkgICAgIEZJTEVfVU5JWF9CQVNJQ19JTkZPICppbmZvLAogCQkJCSAgICAgc3RydWN0IGNpZnNfc2JfaW5mbyAqY2lmc19zYik7CmRpZmYgLS1naXQgYS9mcy9jaWZzL2NpZnNzbWIuYyBiL2ZzL2NpZnMvY2lmc3NtYi5jCmluZGV4IDMwMWUzMDcuLjk0MTQ0MWQgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvY2lmc3NtYi5jCisrKyBiL2ZzL2NpZnMvY2lmc3NtYi5jCkBAIC05NCw2ICs5NCw3IEBACiAJbGlzdF9mb3JfZWFjaF9zYWZlKHRtcCwgdG1wMSwgJnBUY29uLT5vcGVuRmlsZUxpc3QpIHsKIAkJb3Blbl9maWxlID0gbGlzdF9lbnRyeSh0bXAsIHN0cnVjdCBjaWZzRmlsZUluZm8sIHRsaXN0KTsKIAkJb3Blbl9maWxlLT5pbnZhbGlkSGFuZGxlID0gdHJ1ZTsKKwkJb3Blbl9maWxlLT5vcGxvY2tfYnJlYWtfY2FuY2VsbGVkID0gdHJ1ZTsKIAl9CiAJd3JpdGVfdW5sb2NrKCZHbG9iYWxTTUJTZXNsb2NrKTsKIAkvKiBCQiBBZGQgY2FsbCB0byBpbnZhbGlkYXRlX2lub2RlcyhzYikgZm9yIGFsbCBzdXBlcmJsb2NrcyBtb3VudGVkCmRpZmYgLS1naXQgYS9mcy9jaWZzL2Nvbm5lY3QuYyBiL2ZzL2NpZnMvY29ubmVjdC5jCmluZGV4IGQ0OTY4MjQuLmIwOTA5ODAgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvY29ubmVjdC5jCisrKyBiL2ZzL2NpZnMvY29ubmVjdC5jCkBAIC0xNTc3LDcgKzE1NzcsOCBAQAogCiBvdXRfZXJyOgogCWlmICh0Y3Bfc2VzKSB7Ci0JCWtmcmVlKHRjcF9zZXMtPmhvc3RuYW1lKTsKKwkJaWYgKCFJU19FUlIodGNwX3Nlcy0+aG9zdG5hbWUpKQorCQkJa2ZyZWUodGNwX3Nlcy0+aG9zdG5hbWUpOwogCQlpZiAodGNwX3Nlcy0+c3NvY2tldCkKIAkJCXNvY2tfcmVsZWFzZSh0Y3Bfc2VzLT5zc29ja2V0KTsKIAkJa2ZyZWUodGNwX3Nlcyk7CkBAIC0xNjcwLDcgKzE2NzEsNiBAQAogCUNJRlNTTUJURGlzKHhpZCwgdGNvbik7CiAJX0ZyZWVYaWQoeGlkKTsKIAotCURlbGV0ZVRjb25PcGxvY2tRRW50cmllcyh0Y29uKTsKIAl0Y29uSW5mb0ZyZWUodGNvbik7CiAJY2lmc19wdXRfc21iX3NlcyhzZXMpOwogfQpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9kaXIuYyBiL2ZzL2NpZnMvZGlyLmMKaW5kZXggYTY0MjRjZi4uNjI3YTYwYSAxMDA2NDQKLS0tIGEvZnMvY2lmcy9kaXIuYworKysgYi9mcy9jaWZzL2Rpci5jCkBAIC0yNCw2ICsyNCw3IEBACiAjaW5jbHVkZSA8bGludXgvc3RhdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9uYW1laS5oPgorI2luY2x1ZGUgPGxpbnV4L21vdW50Lmg+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+dGNvbiwgY2ZpbGUtPm5ldGZpZCwgMCwgMCwgMCwgMCwKKwkJCQkgTE9DS0lOR19BTkRYX09QTE9DS19SRUxFQVNFLCBmYWxzZSk7CisJCWNGWUkoMSwgKCJPcGxvY2sgcmVsZWFzZSByYyA9ICVkIiwgcmMpKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQKK2NpZnNfb3Bsb2NrX2JyZWFrX2dldChzdHJ1Y3Qgc2xvd193b3JrICp3b3JrKQoreworCXN0cnVjdCBjaWZzRmlsZUluZm8gKmNmaWxlID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBjaWZzRmlsZUluZm8sCisJCQkJCQkgIG9wbG9ja19icmVhayk7CisJbW50Z2V0KGNmaWxlLT5tbnQpOworCWNpZnNGaWxlSW5mb19nZXQoY2ZpbGUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAorY2lmc19vcGxvY2tfYnJlYWtfcHV0KHN0cnVjdCBzbG93X3dvcmsgKndvcmspCit7CisJc3RydWN0IGNpZnNGaWxlSW5mbyAqY2ZpbGUgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGNpZnNGaWxlSW5mbywKKwkJCQkJCSAgb3Bsb2NrX2JyZWFrKTsKKwltbnRwdXQoY2ZpbGUtPm1udCk7CisJY2lmc0ZpbGVJbmZvX3B1dChjZmlsZSk7Cit9CisKK2NvbnN0IHN0cnVjdCBzbG93X3dvcmtfb3BzIGNpZnNfb3Bsb2NrX2JyZWFrX29wcyA9IHsKKwkuZ2V0X3JlZgk9IGNpZnNfb3Bsb2NrX2JyZWFrX2dldCwKKwkucHV0X3JlZgk9IGNpZnNfb3Bsb2NrX2JyZWFrX3B1dCwKKwkuZXhlY3V0ZQk9IGNpZnNfb3Bsb2NrX2JyZWFrLAorfTsKKwogY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBjaWZzX2FkZHJfb3BzID0gewogCS5yZWFkcGFnZSA9IGNpZnNfcmVhZHBhZ2UsCiAJLnJlYWRwYWdlcyA9IGNpZnNfcmVhZHBhZ2VzLApkaWZmIC0tZ2l0IGEvZnMvY2lmcy9taXNjLmMgYi9mcy9jaWZzL21pc2MuYwppbmRleCBlMDc5YTkxLi4wMjQxYjI1IDEwMDY0NAotLS0gYS9mcy9jaWZzL21pc2MuYworKysgYi9mcy9jaWZzL21pc2MuYwpAQCAtMzIsNyArMzIsNiBAQAogCiBleHRlcm4gbWVtcG9vbF90ICpjaWZzX3NtX3JlcV9wb29scDsKIGV4dGVybiBtZW1wb29sX3QgKmNpZnNfcmVxX3Bvb2xwOwotZXh0ZXJuIHN0cnVjdCB0YXNrX3N0cnVjdCAqb3Bsb2NrVGhyZWFkOwogCiAvKiBUaGUgeGlkIHNlcnZlcyBhcyBhIHVzZWZ1bCBpZGVudGlmaWVyIGZvciBlYWNoIGluY29taW5nIHZmcyByZXF1ZXN0LAogICAgaW4gYSBzaW1pbGFyIHdheSB0byB0aGUgbWlkIHdoaWNoIGlzIHVzZWZ1bCB0byB0cmFjayBlYWNoIHNlbnQgc21iLApAQCAtNTAwLDYgKzQ5OSw3IEBACiAJc3RydWN0IGNpZnNUY29uSW5mbyAqdGNvbjsKIAlzdHJ1Y3QgY2lmc0lub2RlSW5mbyAqcENpZnNJbm9kZTsKIAlzdHJ1Y3QgY2lmc0ZpbGVJbmZvICpuZXRmaWxlOworCWludCByYzsKIAogCWNGWUkoMSwgKCJDaGVja2luZyBmb3Igb3Bsb2NrIGJyZWFrIG9yIGRub3RpZnkgcmVzcG9uc2UiKSk7CiAJaWYgKChwU01CLT5oZHIuQ29tbWFuZCA9PSBTTUJfQ09NX05UX1RSQU5TQUNUKSAmJgpAQCAtNTYyLDMwICs1NjIsNDAgQEAKIAkJCQljb250aW51ZTsKIAogCQkJY2lmc19zdGF0c19pbmMoJnRjb24tPm51bV9vcGxvY2tfYnJrcyk7Ci0JCQl3cml0ZV9sb2NrKCZHbG9iYWxTTUJTZXNsb2NrKTsKKwkJCXJlYWRfbG9jaygmR2xvYmFsU01CU2VzbG9jayk7CiAJCQlsaXN0X2Zvcl9lYWNoKHRtcDIsICZ0Y29uLT5vcGVuRmlsZUxpc3QpIHsKIAkJCQluZXRmaWxlID0gbGlzdF9lbnRyeSh0bXAyLCBzdHJ1Y3QgY2lmc0ZpbGVJbmZvLAogCQkJCQkJICAgICB0bGlzdCk7CiAJCQkJaWYgKHBTTUItPkZpZCAhPSBuZXRmaWxlLT5uZXRmaWQpCiAJCQkJCWNvbnRpbnVlOwogCi0JCQkJd3JpdGVfdW5sb2NrKCZHbG9iYWxTTUJTZXNsb2NrKTsKLQkJCQlyZWFkX3VubG9jaygmY2lmc190Y3Bfc2VzX2xvY2spOworCQkJCS8qCisJCQkJICogZG9uJ3QgZG8gYW55dGhpbmcgaWYgZmlsZSBpcyBhYm91dCB0byBiZQorCQkJCSAqIGNsb3NlZCBhbnl3YXkuCisJCQkJICovCisJCQkJaWYgKG5ldGZpbGUtPmNsb3NlUGVuZCkgeworCQkJCQlyZWFkX3VubG9jaygmR2xvYmFsU01CU2VzbG9jayk7CisJCQkJCXJlYWRfdW5sb2NrKCZjaWZzX3RjcF9zZXNfbG9jayk7CisJCQkJCXJldHVybiB0cnVlOworCQkJCX0KKwogCQkJCWNGWUkoMSwgKCJmaWxlIGlkIG1hdGNoLCBvcGxvY2sgYnJlYWsiKSk7CiAJCQkJcENpZnNJbm9kZSA9IENJRlNfSShuZXRmaWxlLT5wSW5vZGUpOwogCQkJCXBDaWZzSW5vZGUtPmNsaWVudENhbkNhY2hlQWxsID0gZmFsc2U7CiAJCQkJaWYgKHBTTUItPk9wbG9ja0xldmVsID09IDApCiAJCQkJCXBDaWZzSW5vZGUtPmNsaWVudENhbkNhY2hlUmVhZCA9IGZhbHNlOwotCQkJCXBDaWZzSW5vZGUtPm9wbG9ja1BlbmRpbmcgPSB0cnVlOwotCQkJCUFsbG9jT3Bsb2NrUUVudHJ5KG5ldGZpbGUtPnBJbm9kZSwKLQkJCQkJCSAgbmV0ZmlsZS0+bmV0ZmlkLCB0Y29uKTsKLQkJCQljRllJKDEsICgiYWJvdXQgdG8gd2FrZSB1cCBvcGxvY2sgdGhyZWFkIikpOwotCQkJCWlmIChvcGxvY2tUaHJlYWQpCi0JCQkJCXdha2VfdXBfcHJvY2VzcyhvcGxvY2tUaHJlYWQpOwotCisJCQkJcmMgPSBzbG93X3dvcmtfZW5xdWV1ZSgmbmV0ZmlsZS0+b3Bsb2NrX2JyZWFrKTsKKwkJCQlpZiAocmMpIHsKKwkJCQkJY0VSUk9SKDEsICgiZmFpbGVkIHRvIGVucXVldWUgb3Bsb2NrICIKKwkJCQkJCSAgICJicmVhazogJWRcbiIsIHJjKSk7CisJCQkJfSBlbHNlIHsKKwkJCQkJbmV0ZmlsZS0+b3Bsb2NrX2JyZWFrX2NhbmNlbGxlZCA9IGZhbHNlOworCQkJCX0KKwkJCQlyZWFkX3VubG9jaygmR2xvYmFsU01CU2VzbG9jayk7CisJCQkJcmVhZF91bmxvY2soJmNpZnNfdGNwX3Nlc19sb2NrKTsKIAkJCQlyZXR1cm4gdHJ1ZTsKIAkJCX0KLQkJCXdyaXRlX3VubG9jaygmR2xvYmFsU01CU2VzbG9jayk7CisJCQlyZWFkX3VubG9jaygmR2xvYmFsU01CU2VzbG9jayk7CiAJCQlyZWFkX3VubG9jaygmY2lmc190Y3Bfc2VzX2xvY2spOwogCQkJY0ZZSSgxLCAoIk5vIG1hdGNoaW5nIGZpbGUgZm9yIG9wbG9jayBicmVhayIpKTsKIAkJCXJldHVybiB0cnVlOwpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9yZWFkZGlyLmMgYi9mcy9jaWZzL3JlYWRkaXIuYwppbmRleCBmODIzYTRhLi4xZjA5OGNhIDEwMDY0NAotLS0gYS9mcy9jaWZzL3JlYWRkaXIuYworKysgYi9mcy9jaWZzL3JlYWRkaXIuYwpAQCAtMTQ2LDcgKzE0Niw3IEBACiAJfQogfQogCi12b2lkCitzdGF0aWMgdm9pZAogY2lmc19kaXJfaW5mb190b19mYXR0cihzdHJ1Y3QgY2lmc19mYXR0ciAqZmF0dHIsIEZJTEVfRElSRUNUT1JZX0lORk8gKmluZm8sCiAJCSAgICAgICBzdHJ1Y3QgY2lmc19zYl9pbmZvICpjaWZzX3NiKQogewpAQCAtMTYxLDcgKzE2MSw3IEBACiAJY2lmc19maWxsX2NvbW1vbl9pbmZvKGZhdHRyLCBjaWZzX3NiKTsKIH0KIAotdm9pZAorc3RhdGljIHZvaWQKIGNpZnNfc3RkX2luZm9fdG9fZmF0dHIoc3RydWN0IGNpZnNfZmF0dHIgKmZhdHRyLCBGSU5EX0ZJTEVfU1RBTkRBUkRfSU5GTyAqaW5mbywKIAkJICAgICAgIHN0cnVjdCBjaWZzX3NiX2luZm8gKmNpZnNfc2IpCiB7CmRpZmYgLS1naXQgYS9mcy9jaWZzL3RyYW5zcG9ydC5jIGIvZnMvY2lmcy90cmFuc3BvcnQuYwppbmRleCAxZGE0YWIyLi4wN2I4ZTcxIDEwMDY0NAotLS0gYS9mcy9jaWZzL3RyYW5zcG9ydC5jCisrKyBiL2ZzL2NpZnMvdHJhbnNwb3J0LmMKQEAgLTEwMyw1NiArMTAzLDYgQEAKIAltZW1wb29sX2ZyZWUobWlkRW50cnksIGNpZnNfbWlkX3Bvb2xwKTsKIH0KIAotc3RydWN0IG9wbG9ja19xX2VudHJ5ICoKLUFsbG9jT3Bsb2NrUUVudHJ5KHN0cnVjdCBpbm9kZSAqcGlub2RlLCBfX3UxNiBmaWQsIHN0cnVjdCBjaWZzVGNvbkluZm8gKnRjb24pCi17Ci0Jc3RydWN0IG9wbG9ja19xX2VudHJ5ICp0ZW1wOwotCWlmICgocGlub2RlID09IE5VTEwpIHx8ICh0Y29uID09IE5VTEwpKSB7Ci0JCWNFUlJPUigxLCAoIk51bGwgcGFybXMgcGFzc2VkIHRvIEFsbG9jT3Bsb2NrUUVudHJ5IikpOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0JdGVtcCA9IChzdHJ1Y3Qgb3Bsb2NrX3FfZW50cnkgKikga21lbV9jYWNoZV9hbGxvYyhjaWZzX29wbG9ja19jYWNoZXAsCi0JCQkJCQkgICAgICAgR0ZQX0tFUk5FTCk7Ci0JaWYgKHRlbXAgPT0gTlVMTCkKLQkJcmV0dXJuIHRlbXA7Ci0JZWxzZSB7Ci0JCXRlbXAtPnBpbm9kZSA9IHBpbm9kZTsKLQkJdGVtcC0+dGNvbiA9IHRjb247Ci0JCXRlbXAtPm5ldGZpZCA9IGZpZDsKLQkJc3Bpbl9sb2NrKCZjaWZzX29wbG9ja19sb2NrKTsKLQkJbGlzdF9hZGRfdGFpbCgmdGVtcC0+cWhlYWQsICZjaWZzX29wbG9ja19saXN0KTsKLQkJc3Bpbl91bmxvY2soJmNpZnNfb3Bsb2NrX2xvY2spOwotCX0KLQlyZXR1cm4gdGVtcDsKLX0KLQotdm9pZCBEZWxldGVPcGxvY2tRRW50cnkoc3RydWN0IG9wbG9ja19xX2VudHJ5ICpvcGxvY2tFbnRyeSkKLXsKLQlzcGluX2xvY2soJmNpZnNfb3Bsb2NrX2xvY2spOwotICAgIC8qIHNob3VsZCB3ZSBjaGVjayBpZiBsaXN0IGVtcHR5IGZpcnN0PyAqLwotCWxpc3RfZGVsKCZvcGxvY2tFbnRyeS0+cWhlYWQpOwotCXNwaW5fdW5sb2NrKCZjaWZzX29wbG9ja19sb2NrKTsKLQlrbWVtX2NhY2hlX2ZyZWUoY2lmc19vcGxvY2tfY2FjaGVwLCBvcGxvY2tFbnRyeSk7Ci19Ci0KLQotdm9pZCBEZWxldGVUY29uT3Bsb2NrUUVudHJpZXMoc3RydWN0IGNpZnNUY29uSW5mbyAqdGNvbikKLXsKLQlzdHJ1Y3Qgb3Bsb2NrX3FfZW50cnkgKnRlbXA7Ci0KLQlpZiAodGNvbiA9PSBOVUxMKQotCQlyZXR1cm47Ci0KLQlzcGluX2xvY2soJmNpZnNfb3Bsb2NrX2xvY2spOwotCWxpc3RfZm9yX2VhY2hfZW50cnkodGVtcCwgJmNpZnNfb3Bsb2NrX2xpc3QsIHFoZWFkKSB7Ci0JCWlmICgodGVtcC0+dGNvbikgJiYgKHRlbXAtPnRjb24gPT0gdGNvbikpIHsKLQkJCWxpc3RfZGVsKCZ0ZW1wLT5xaGVhZCk7Ci0JCQlrbWVtX2NhY2hlX2ZyZWUoY2lmc19vcGxvY2tfY2FjaGVwLCB0ZW1wKTsKLQkJfQotCX0KLQlzcGluX3VubG9jaygmY2lmc19vcGxvY2tfbG9jayk7Ci19Ci0KIHN0YXRpYyBpbnQKIHNtYl9zZW5kdihzdHJ1Y3QgVENQX1NlcnZlcl9JbmZvICpzZXJ2ZXIsIHN0cnVjdCBrdmVjICppb3YsIGludCBuX3ZlYykKIHsKZGlmZiAtLWdpdCBhL2ZzL2NvZGEvcHNkZXYuYyBiL2ZzL2NvZGEvcHNkZXYuYwppbmRleCAwMzc2YWM2Li5iZTQzOTJjIDEwMDY0NAotLS0gYS9mcy9jb2RhL3BzZGV2LmMKKysrIGIvZnMvY29kYS9wc2Rldi5jCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbWFqb3IuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgvZmNudGwuaD4KZGlmZiAtLWdpdCBhL2ZzL2RsbS9sb3djb21tcy5jIGIvZnMvZGxtL2xvd2NvbW1zLmMKaW5kZXggMjQwY2VmMS4uNzA3MzZlYiAxMDA2NDQKLS0tIGEvZnMvZGxtL2xvd2NvbW1zLmMKKysrIGIvZnMvZGxtL2xvd2NvbW1zLmMKQEAgLTMxNiw2ICszMTYsMTAgQEAKIHsKIAlzdHJ1Y3QgY29ubmVjdGlvbiAqY29uOwogCisJLyogd2l0aCBzY3RwIHRoZXJlJ3Mgbm8gY29ubmVjdGluZyB3aXRob3V0IHNlbmRpbmcgKi8KKwlpZiAoZGxtX2NvbmZpZy5jaV9wcm90b2NvbCAhPSAwKQorCQlyZXR1cm4gMDsKKwogCWlmIChub2RlaWQgPT0gZGxtX291cl9ub2RlaWQoKSkKIAkJcmV0dXJuIDA7CiAKQEAgLTQ1NSw5ICs0NTksOSBAQAogCQkJaW50IHByaW1fbGVuLCByZXQ7CiAJCQlpbnQgYWRkcl9sZW47CiAJCQlzdHJ1Y3QgY29ubmVjdGlvbiAqbmV3X2NvbjsKLQkJCXN0cnVjdCBmaWxlICpmaWxlOwogCQkJc2N0cF9wZWVsb2ZmX2FyZ190IHBhcmc7CiAJCQlpbnQgcGFyZ2xlbiA9IHNpemVvZihwYXJnKTsKKwkJCWludCBlcnI7CiAKIAkJCS8qCiAJCQkgKiBXZSBnZXQgdGhpcyBiZWZvcmUgYW55IGRhdGEgZm9yIGFuIGFzc29jaWF0aW9uLgpAQCAtNTEyLDE5ICs1MTYsMjIgQEAKIAkJCXJldCA9IGtlcm5lbF9nZXRzb2Nrb3B0KGNvbi0+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+Y3J5cHRfc3RhdCk7CiAJa21lbV9jYWNoZV9mcmVlKGVjcnlwdGZzX2lub2RlX2luZm9fY2FjaGUsIGlub2RlX2luZm8pOwogfQpkaWZmIC0tZ2l0IGEvZnMvZXh0My9zdXBlci5jIGIvZnMvZXh0My9zdXBlci5jCmluZGV4IDcyNzQzZDMuLjdhNTIwYTggMTAwNjQ0Ci0tLSBhL2ZzL2V4dDMvc3VwZXIuYworKysgYi9mcy9leHQzL3N1cGVyLmMKQEAgLTIzMjEsNyArMjMyMSwxOCBAQAogCiAJaWYgKCFzYmgpCiAJCXJldHVybiBlcnJvcjsKLQllcy0+c193dGltZSA9IGNwdV90b19sZTMyKGdldF9zZWNvbmRzKCkpOworCS8qCisJICogSWYgdGhlIGZpbGUgc3lzdGVtIGlzIG1vdW50ZWQgcmVhZC1vbmx5LCBkb24ndCB1cGRhdGUgdGhlCisJICogc3VwZXJibG9jayB3cml0ZSB0aW1lLiAgVGhpcyBhdm9pZHMgdXBkYXRpbmcgdGhlIHN1cGVyYmxvY2sKKwkgKiB3cml0ZSB0aW1lIHdoZW4gd2UgYXJlIG1vdW50aW5nIHRoZSByb290IGZpbGUgc3lzdGVtCisJICogcmVhZC9vbmx5IGJ1dCB3ZSBuZWVkIHRvIHJlcGxheSB0aGUgam91cm5hbDsgYXQgdGhhdCBwb2ludCwKKwkgKiBmb3IgcGVvcGxlIHdobyBhcmUgZWFzdCBvZiBHTVQgYW5kIHdobyBtYWtlIHRoZWlyIGNsb2NrCisJICogdGljayBpbiBsb2NhbHRpbWUgZm9yIFdpbmRvd3MgYnVnLWZvci1idWcgY29tcGF0aWJpbGl0eSwKKwkgKiB0aGUgY2xvY2sgaXMgc2V0IGluIHRoZSBmdXR1cmUsIGFuZCB0aGlzIHdpbGwgY2F1c2UgZTJmc2NrCisJICogdG8gY29tcGxhaW4gYW5kIGZvcmNlIGEgZnVsbCBmaWxlIHN5c3RlbSBjaGVjay4KKwkgKi8KKwlpZiAoIShzYi0+c19mbGFncyAmIE1TX1JET05MWSkpCisJCWVzLT5zX3d0aW1lID0gY3B1X3RvX2xlMzIoZ2V0X3NlY29uZHMoKSk7CiAJZXMtPnNfZnJlZV9ibG9ja3NfY291bnQgPSBjcHVfdG9fbGUzMihleHQzX2NvdW50X2ZyZWVfYmxvY2tzKHNiKSk7CiAJZXMtPnNfZnJlZV9pbm9kZXNfY291bnQgPSBjcHVfdG9fbGUzMihleHQzX2NvdW50X2ZyZWVfaW5vZGVzKHNiKSk7CiAJQlVGRkVSX1RSQUNFKHNiaCwgIm1hcmtpbmcgZGlydHkiKTsKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvS2NvbmZpZyBiL2ZzL2V4dDQvS2NvbmZpZwppbmRleCBkNWMwZWEyLi45ZjJkNDVkIDEwMDY0NAotLS0gYS9mcy9leHQ0L0tjb25maWcKKysrIGIvZnMvZXh0NC9LY29uZmlnCkBAIC0yNiwyMCArMjYsNiBAQAogCiAJICBJZiB1bnN1cmUsIHNheSBOLgogCi1jb25maWcgRVhUNERFVl9DT01QQVQKLQlib29sICJFbmFibGUgZXh0NGRldiBjb21wYXRpYmlsaXR5IgotCWRlcGVuZHMgb24gRVhUNF9GUwotCWhlbHAKLQkgIFN0YXJ0aW5nIHdpdGggMi42LjI4LCB0aGUgbmFtZSBvZiB0aGUgZXh0NCBmaWxlc3lzdGVtIHdhcwotCSAgcmVuYW1lZCBmcm9tIGV4dDRkZXYgdG8gZXh0NC4gIFVuZm9ydHVuYXRlbHkgdGhlcmUgYXJlIHNvbWUKLQkgIGxlZ2FjeSB1c2Vyc3BhY2UgcHJvZ3JhbXMgKHN1Y2ggYXMga2xpYmMncyBmc3R5cGUpIGhhdmUKLQkgICJleHQ0ZGV2IiBoYXJkY29kZWQuCi0KLQkgIFRvIGVuYWJsZSBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBzbyB0aGF0IHN5c3RlbXMgdGhhdCBhcmUKLQkgIHN0aWxsIGV4cGVjdGluZyB0byBtb3VudCBleHQ0IGZpbGVzeXN0ZW1zIHVzaW5nIGV4dDRkZXYsCi0JICBjaG9vc2UgWSBoZXJlLiAgIFRoaXMgZmVhdHVyZSB3aWxsIGdvIGF3YXkgYnkgMi42LjMxLCBzbwotCSAgcGxlYXNlIGFycmFuZ2UgdG8gZ2V0IHlvdXIgdXNlcnNwYWNlIHByb2dyYW1zIGZpeGVkIQotCiBjb25maWcgRVhUNF9GU19YQVRUUgogCWJvb2wgIkV4dDQgZXh0ZW5kZWQgYXR0cmlidXRlcyIKIAlkZXBlbmRzIG9uIEVYVDRfRlMKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZXh0NC5oIGIvZnMvZXh0NC9leHQ0LmgKaW5kZXggZTIyN2VlYS4uMDBkMTUzZiAxMDA2NDQKLS0tIGEvZnMvZXh0NC9leHQ0LmgKKysrIGIvZnMvZXh0NC9leHQ0LmgKQEAgLTY1LDYgKzY1LDEyIEBACiAvKiBkYXRhIHR5cGUgZm9yIGJsb2NrIGdyb3VwIG51bWJlciAqLwogdHlwZWRlZiB1bnNpZ25lZCBpbnQgZXh0NF9ncm91cF90OwogCisvKgorICogRmxhZ3MgdXNlZCBpbiBtYmFsbG9jJ3MgYWxsb2NhdGlvbl9jb250ZXh0IGZsYWdzIGZpZWxkLiAgCisgKgorICogQWxzbyB1c2VkIHRvIHNob3cgd2hhdCdzIGdvaW5nIG9uIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMgd2hlbiB0aGUKKyAqIGZsYWcgZmllbGQgaXMgZXhwb3J0ZWQgdmlhIHRoZSB0cmFjZXBvcnQgaW50ZXJmYWNlCisgKi8KIAogLyogcHJlZmVyIGdvYWwgYWdhaW4uIGxlbmd0aCAqLwogI2RlZmluZSBFWFQ0X01CX0hJTlRfTUVSR0UJCTB4MDAwMQpAQCAtMTI3LDYgKzEzMywxNiBAQAogCWludCBwYWdlc193cml0dGVuOwogCWludCByZXR2YWw7CiB9OworI2RlZmluZQlESU9fQUlPX1VOV1JJVFRFTgkweDEKK3R5cGVkZWYgc3RydWN0IGV4dDRfaW9fZW5kIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWxpc3Q7CQkvKiBwZXItZmlsZSBmaW5pc2hlZCBBSU8gbGlzdCAqLworCXN0cnVjdCBpbm9kZQkJKmlub2RlOwkJLyogZmlsZSBiZWluZyB3cml0dGVuIHRvICovCisJdW5zaWduZWQgaW50CQlmbGFnOwkJLyogdW53cml0dGVuIG9yIG5vdCAqLworCWludAkJCWVycm9yOwkJLyogSS9PIGVycm9yIGNvZGUgKi8KKwlleHQ0X2xibGtfdAkJb2Zmc2V0OwkJLyogb2Zmc2V0IGluIHRoZSBmaWxlICovCisJc2l6ZV90CQkJc2l6ZTsJCS8qIHNpemUgb2YgdGhlIGV4dGVudCAqLworCXN0cnVjdCB3b3JrX3N0cnVjdAl3b3JrOwkJLyogZGF0YSB3b3JrIHF1ZXVlICovCit9IGV4dDRfaW9fZW5kX3Q7CiAKIC8qCiAgKiBTcGVjaWFsIGlub2RlcyBudW1iZXJzCkBAIC0zNDcsNyArMzYzLDE2IEBACiAJLyogQ2FsbCBleHQ0X2RhX3VwZGF0ZV9yZXNlcnZlX3NwYWNlKCkgYWZ0ZXIgc3VjY2Vzc2Z1bGx5IAogCSAgIGFsbG9jYXRpbmcgdGhlIGJsb2NrcyAqLwogI2RlZmluZSBFWFQ0X0dFVF9CTE9DS1NfVVBEQVRFX1JFU0VSVkVfU1BBQ0UJMHgwMDA4Ci0KKwkvKiBjYWxsZXIgaXMgZnJvbSB0aGUgZGlyZWN0IElPIHBhdGgsIHJlcXVlc3QgdG8gY3JlYXRpb24gb2YgYW4KKwl1bml0aWFsaXplZCBleHRlbnRzIGlmIG5vdCBhbGxvY2F0ZWQsIHNwbGl0IHRoZSB1bmluaXRpYWxpemVkCisJZXh0ZW50IGlmIGJsb2NrcyBoYXMgYmVlbiBwcmVhbGxvY2F0ZWQgYWxyZWFkeSovCisjZGVmaW5lIEVYVDRfR0VUX0JMT0NLU19ESU8JCQkweDAwMTAKKyNkZWZpbmUgRVhUNF9HRVRfQkxPQ0tTX0NPTlZFUlQJCQkweDAwMjAKKyNkZWZpbmUgRVhUNF9HRVRfQkxPQ0tTX0RJT19DUkVBVEVfRVhUCQkoRVhUNF9HRVRfQkxPQ0tTX0RJT3xcCisJCQkJCSBFWFQ0X0dFVF9CTE9DS1NfQ1JFQVRFX1VOSU5JVF9FWFQpCisJLyogQ29udmVydCBleHRlbnQgdG8gaW5pdGlhbGl6ZWQgYWZ0ZXIgZGlyZWN0IElPIGNvbXBsZXRlICovCisjZGVmaW5lIEVYVDRfR0VUX0JMT0NLU19ESU9fQ09OVkVSVF9FWFQJCShFWFQ0X0dFVF9CTE9DS1NfQ09OVkVSVHxcCisJCQkJCSBFWFQ0X0dFVF9CTE9DS1NfRElPX0NSRUFURV9FWFQpCiAKIC8qCiAgKiBpb2N0bCBjb21tYW5kcwpAQCAtNTAwLDggKzUyNSw4IEBACiBzdGF0aWMgaW5saW5lIF9fbGUzMiBleHQ0X2VuY29kZV9leHRyYV90aW1lKHN0cnVjdCB0aW1lc3BlYyAqdGltZSkKIHsKICAgICAgICByZXR1cm4gY3B1X3RvX2xlMzIoKHNpemVvZih0aW1lLT50dl9zZWMpID4gNCA/Ci0JCQkgICB0aW1lLT50dl9zZWMgPj4gMzIgOiAwKSB8Ci0JCQkgICAoKHRpbWUtPnR2X25zZWMgPDwgMikgJiBFWFQ0X05TRUNfTUFTSykpOworCQkJICAgKHRpbWUtPnR2X3NlYyA+PiAzMikgJiBFWFQ0X0VQT0NIX01BU0sgOiAwKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICgodGltZS0+dHZfbnNlYyA8PCBFWFQ0X0VQT0NIX0JJVFMpICYgRVhUNF9OU0VDX01BU0spKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGV4dDRfZGVjb2RlX2V4dHJhX3RpbWUoc3RydWN0IHRpbWVzcGVjICp0aW1lLCBfX2xlMzIgZXh0cmEpCkBAIC01MDksNyArNTM0LDcgQEAKICAgICAgICBpZiAoc2l6ZW9mKHRpbWUtPnR2X3NlYykgPiA0KQogCSAgICAgICB0aW1lLT50dl9zZWMgfD0gKF9fdTY0KShsZTMyX3RvX2NwdShleHRyYSkgJiBFWFQ0X0VQT0NIX01BU0spCiAJCQkgICAgICAgPDwgMzI7Ci0gICAgICAgdGltZS0+dHZfbnNlYyA9IChsZTMyX3RvX2NwdShleHRyYSkgJiBFWFQ0X05TRUNfTUFTSykgPj4gMjsKKyAgICAgICB0aW1lLT50dl9uc2VjID0gKGxlMzJfdG9fY3B1KGV4dHJhKSAmIEVYVDRfTlNFQ19NQVNLKSA+PiBFWFQ0X0VQT0NIX0JJVFM7CiB9CiAKICNkZWZpbmUgRVhUNF9JTk9ERV9TRVRfWFRJTUUoeHRpbWUsIGlub2RlLCByYXdfaW5vZGUpCQkJICAgICAgIFwKQEAgLTY3Miw2ICs2OTcsMTEgQEAKIAlfX3UxNiBpX2V4dHJhX2lzaXplOwogCiAJc3BpbmxvY2tfdCBpX2Jsb2NrX3Jlc2VydmF0aW9uX2xvY2s7CisKKwkvKiBjb21wbGV0ZWQgYXN5bmMgRElPcyB0aGF0IG1pZ2h0IG5lZWQgdW53cml0dGVuIGV4dGVudHMgaGFuZGxpbmcgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIGlfYWlvX2Rpb19jb21wbGV0ZV9saXN0OworCS8qIGN1cnJlbnQgaW9fZW5kIHN0cnVjdHVyZSBmb3IgYXN5bmMgRElPIHdyaXRlKi8KKwlleHQ0X2lvX2VuZF90ICpjdXJfYWlvX2RpbzsKIH07CiAKIC8qCkBAIC03MTMsNiArNzQzLDcgQEAKICNkZWZpbmUgRVhUNF9NT1VOVF9RVU9UQQkJMHg4MDAwMCAvKiBTb21lIHF1b3RhIG9wdGlvbiBzZXQgKi8KICNkZWZpbmUgRVhUNF9NT1VOVF9VU1JRVU9UQQkJMHgxMDAwMDAgLyogIm9sZCIgdXNlciBxdW90YSAqLwogI2RlZmluZSBFWFQ0X01PVU5UX0dSUFFVT1RBCQkweDIwMDAwMCAvKiAib2xkIiBncm91cCBxdW90YSAqLworI2RlZmluZSBFWFQ0X01PVU5UX0pPVVJOQUxfQ0hFQ0tTVU0JMHg4MDAwMDAgLyogSm91cm5hbCBjaGVja3N1bXMgKi8KICNkZWZpbmUgRVhUNF9NT1VOVF9KT1VSTkFMX0FTWU5DX0NPTU1JVAkweDEwMDAwMDAgLyogSm91cm5hbCBBc3luYyBDb21taXQgKi8KICNkZWZpbmUgRVhUNF9NT1VOVF9JX1ZFUlNJT04gICAgICAgICAgICAweDIwMDAwMDAgLyogaV92ZXJzaW9uIHN1cHBvcnQgKi8KICNkZWZpbmUgRVhUNF9NT1VOVF9ERUxBTExPQwkJMHg4MDAwMDAwIC8qIERlbGFsbG9jIHN1cHBvcnQgKi8KQEAgLTk0MiwxOCArOTczLDExIEBACiAJdW5zaWduZWQgaW50IHNfbWJfc3RhdHM7CiAJdW5zaWduZWQgaW50IHNfbWJfb3JkZXIyX3JlcXM7CiAJdW5zaWduZWQgaW50IHNfbWJfZ3JvdXBfcHJlYWxsb2M7CisJdW5zaWduZWQgaW50IHNfbWF4X3dyaXRlYmFja19tYl9idW1wOwogCS8qIHdoZXJlIGxhc3QgYWxsb2NhdGlvbiB3YXMgZG9uZSAtIGZvciBzdHJlYW0gYWxsb2NhdGlvbiAqLwogCXVuc2lnbmVkIGxvbmcgc19tYl9sYXN0X2dyb3VwOwogCXVuc2lnbmVkIGxvbmcgc19tYl9sYXN0X3N0YXJ0OwogCi0JLyogaGlzdG9yeSB0byBkZWJ1ZyBwb2xpY3kgKi8KLQlzdHJ1Y3QgZXh0NF9tYl9oaXN0b3J5ICpzX21iX2hpc3Rvcnk7Ci0JaW50IHNfbWJfaGlzdG9yeV9jdXI7Ci0JaW50IHNfbWJfaGlzdG9yeV9tYXg7Ci0JaW50IHNfbWJfaGlzdG9yeV9udW07Ci0Jc3BpbmxvY2tfdCBzX21iX2hpc3RvcnlfbG9jazsKLQlpbnQgc19tYl9oaXN0b3J5X2ZpbHRlcjsKLQogCS8qIHN0YXRzIGZvciBidWRkeSBhbGxvY2F0b3IgKi8KIAlzcGlubG9ja190IHNfbWJfcGFfbG9jazsKIAlhdG9taWNfdCBzX2JhbF9yZXFzOwkvKiBudW1iZXIgb2YgcmVxcyB3aXRoIGxlbiA+IDEgKi8KQEAgLTk4MCw2ICsxMDA0LDkgQEAKIAogCXVuc2lnbmVkIGludCBzX2xvZ19ncm91cHNfcGVyX2ZsZXg7CiAJc3RydWN0IGZsZXhfZ3JvdXBzICpzX2ZsZXhfZ3JvdXBzOworCisJLyogd29ya3F1ZXVlIGZvciBkaW8gdW53cml0dGVuICovCisJc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmRpb191bndyaXR0ZW5fd3E7CiB9OwogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBleHQ0X3NiX2luZm8gKkVYVDRfU0Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKQEAgLTEzOTcsNyArMTQyNCw3IEBACiAJCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBsb2ZmX3QgZnJvbSk7CiBleHRlcm4gaW50IGV4dDRfcGFnZV9ta3dyaXRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZik7CiBleHRlcm4gcXNpemVfdCBleHQ0X2dldF9yZXNlcnZlZF9zcGFjZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKLQorZXh0ZXJuIGludCBmbHVzaF9haW9fZGlvX2NvbXBsZXRlZF9JTyhzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKIC8qIGlvY3RsLmMgKi8KIGV4dGVybiBsb25nIGV4dDRfaW9jdGwoc3RydWN0IGZpbGUgKiwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBsb25nKTsKIGV4dGVybiBsb25nIGV4dDRfY29tcGF0X2lvY3RsKHN0cnVjdCBmaWxlICosIHVuc2lnbmVkIGludCwgdW5zaWduZWQgbG9uZyk7CkBAIC0xNjk5LDYgKzE3MjYsOCBAQAogZXh0ZXJuIHZvaWQgZXh0NF9leHRfcmVsZWFzZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKik7CiBleHRlcm4gbG9uZyBleHQ0X2ZhbGxvY2F0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbW9kZSwgbG9mZl90IG9mZnNldCwKIAkJCSAgbG9mZl90IGxlbik7CitleHRlcm4gaW50IGV4dDRfY29udmVydF91bndyaXR0ZW5fZXh0ZW50cyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LAorCQkJICBsb2ZmX3QgbGVuKTsKIGV4dGVybiBpbnQgZXh0NF9nZXRfYmxvY2tzKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQkgICBzZWN0b3JfdCBibG9jaywgdW5zaWduZWQgaW50IG1heF9ibG9ja3MsCiAJCQkgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCBpbnQgZmxhZ3MpOwpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9leHQ0X2V4dGVudHMuaCBiL2ZzL2V4dDQvZXh0NF9leHRlbnRzLmgKaW5kZXggNjE2NTJmMS4uMmNhNjg2NCAxMDA2NDQKLS0tIGEvZnMvZXh0NC9leHQ0X2V4dGVudHMuaAorKysgYi9mcy9leHQ0L2V4dDRfZXh0ZW50cy5oCkBAIC0yMjAsNiArMjIwLDExIEBACiAJCShsZTE2X3RvX2NwdShleHQtPmVlX2xlbikgLSBFWFRfSU5JVF9NQVhfTEVOKSk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBleHQ0X2V4dF9tYXJrX2luaXRpYWxpemVkKHN0cnVjdCBleHQ0X2V4dGVudCAqZXh0KQoreworCWV4dC0+ZWVfbGVuID0gY3B1X3RvX2xlMTYoZXh0NF9leHRfZ2V0X2FjdHVhbF9sZW4oZXh0KSk7Cit9CisKIGV4dGVybiBpbnQgZXh0NF9leHRfY2FsY19tZXRhZGF0YV9hbW91bnQoc3RydWN0IGlub2RlICppbm9kZSwgaW50IGJsb2Nrcyk7CiBleHRlcm4gZXh0NF9mc2Jsa190IGV4dF9wYmxvY2soc3RydWN0IGV4dDRfZXh0ZW50ICpleCk7CiBleHRlcm4gZXh0NF9mc2Jsa190IGlkeF9wYmxvY2soc3RydWN0IGV4dDRfZXh0ZW50X2lkeCAqKTsKQEAgLTIzNSw3ICsyNDAsNyBAQAogCQkJCSBzdHJ1Y3QgZXh0NF9leHRfcGF0aCAqcGF0aCwKIAkJCQkgc3RydWN0IGV4dDRfZXh0ZW50ICopOwogZXh0ZXJuIHVuc2lnbmVkIGludCBleHQ0X2V4dF9jaGVja19vdmVybGFwKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZXh0NF9leHRlbnQgKiwgc3RydWN0IGV4dDRfZXh0X3BhdGggKik7Ci1leHRlcm4gaW50IGV4dDRfZXh0X2luc2VydF9leHRlbnQoaGFuZGxlX3QgKiwgc3RydWN0IGlub2RlICosIHN0cnVjdCBleHQ0X2V4dF9wYXRoICosIHN0cnVjdCBleHQ0X2V4dGVudCAqKTsKK2V4dGVybiBpbnQgZXh0NF9leHRfaW5zZXJ0X2V4dGVudChoYW5kbGVfdCAqLCBzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGV4dDRfZXh0X3BhdGggKiwgc3RydWN0IGV4dDRfZXh0ZW50ICosIGludCk7CiBleHRlcm4gaW50IGV4dDRfZXh0X3dhbGtfc3BhY2Uoc3RydWN0IGlub2RlICosIGV4dDRfbGJsa190LCBleHQ0X2xibGtfdCwKIAkJCQkJCQlleHRfcHJlcGFyZV9jYWxsYmFjaywgdm9pZCAqKTsKIGV4dGVybiBzdHJ1Y3QgZXh0NF9leHRfcGF0aCAqZXh0NF9leHRfZmluZF9leHRlbnQoc3RydWN0IGlub2RlICosIGV4dDRfbGJsa190LApkaWZmIC0tZ2l0IGEvZnMvZXh0NC9leHQ0X2piZDIuaCBiL2ZzL2V4dDQvZXh0NF9qYmQyLmgKaW5kZXggMTM5ZmI4Yy4uYTI4NjU5OCAxMDA2NDQKLS0tIGEvZnMvZXh0NC9leHQ0X2piZDIuaAorKysgYi9mcy9leHQ0L2V4dDRfamJkMi5oCkBAIC0xNjEsMTEgKzE2MSwxMyBAQAogaGFuZGxlX3QgKmV4dDRfam91cm5hbF9zdGFydF9zYihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgbmJsb2Nrcyk7CiBpbnQgX19leHQ0X2pvdXJuYWxfc3RvcChjb25zdCBjaGFyICp3aGVyZSwgaGFuZGxlX3QgKmhhbmRsZSk7CiAKLSNkZWZpbmUgRVhUNF9OT0pPVVJOQUxfSEFORExFCSgoaGFuZGxlX3QgKikgMHgxKQorI2RlZmluZSBFWFQ0X05PSk9VUk5BTF9NQVhfUkVGX0NPVU5UICgodW5zaWduZWQgbG9uZykgNDA5NikKIAorLyogTm90ZTogIERvIG5vdCB1c2UgdGhpcyBmb3IgTlVMTCBoYW5kbGVzLiAgVGhpcyBpcyBvbmx5IHRvIGRldGVybWluZSBpZgorICogYSBwcm9wZXJseSBhbGxvY2F0ZWQgaGFuZGxlIGlzIHVzaW5nIGEgam91cm5hbCBvciBub3QuICovCiBzdGF0aWMgaW5saW5lIGludCBleHQ0X2hhbmRsZV92YWxpZChoYW5kbGVfdCAqaGFuZGxlKQogewotCWlmIChoYW5kbGUgPT0gRVhUNF9OT0pPVVJOQUxfSEFORExFKQorCWlmICgodW5zaWduZWQgbG9uZyloYW5kbGUgPCBFWFQ0X05PSk9VUk5BTF9NQVhfUkVGX0NPVU5UKQogCQlyZXR1cm4gMDsKIAlyZXR1cm4gMTsKIH0KZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZXh0ZW50cy5jIGIvZnMvZXh0NC9leHRlbnRzLmMKaW5kZXggN2EzODMyNS4uMTA1MzllMyAxMDA2NDQKLS0tIGEvZnMvZXh0NC9leHRlbnRzLmMKKysrIGIvZnMvZXh0NC9leHRlbnRzLmMKQEAgLTcyMyw3ICs3MjMsNyBAQAogICogaW5zZXJ0IG5ldyBpbmRleCBbQGxvZ2ljYWw7QHB0cl0gaW50byB0aGUgYmxvY2sgYXQgQGN1cnA7CiAgKiBjaGVjayB3aGVyZSB0byBpbnNlcnQ6IGJlZm9yZSBAY3VycCBvciBhZnRlciBAY3VycAogICovCi1zdGF0aWMgaW50IGV4dDRfZXh0X2luc2VydF9pbmRleChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAoraW50IGV4dDRfZXh0X2luc2VydF9pbmRleChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJCXN0cnVjdCBleHQ0X2V4dF9wYXRoICpjdXJwLAogCQkJCWludCBsb2dpY2FsLCBleHQ0X2ZzYmxrX3QgcHRyKQogewpAQCAtMTU4Niw3ICsxNTg2LDcgQEAKICAqLwogaW50IGV4dDRfZXh0X2luc2VydF9leHRlbnQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwKIAkJCQlzdHJ1Y3QgZXh0NF9leHRfcGF0aCAqcGF0aCwKLQkJCQlzdHJ1Y3QgZXh0NF9leHRlbnQgKm5ld2V4dCkKKwkJCQlzdHJ1Y3QgZXh0NF9leHRlbnQgKm5ld2V4dCwgaW50IGZsYWcpCiB7CiAJc3RydWN0IGV4dDRfZXh0ZW50X2hlYWRlciAqZWg7CiAJc3RydWN0IGV4dDRfZXh0ZW50ICpleCwgKmZleDsKQEAgLTE2MDIsNyArMTYwMiw4IEBACiAJQlVHX09OKHBhdGhbZGVwdGhdLnBfaGRyID09IE5VTEwpOwogCiAJLyogdHJ5IHRvIGluc2VydCBibG9jayBpbnRvIGZvdW5kIGV4dGVudCBhbmQgcmV0dXJuICovCi0JaWYgKGV4ICYmIGV4dDRfY2FuX2V4dGVudHNfYmVfbWVyZ2VkKGlub2RlLCBleCwgbmV3ZXh0KSkgeworCWlmIChleCAmJiAoZmxhZyAhPSBFWFQ0X0dFVF9CTE9DS1NfRElPX0NSRUFURV9FWFQpCisJCSYmIGV4dDRfY2FuX2V4dGVudHNfYmVfbWVyZ2VkKGlub2RlLCBleCwgbmV3ZXh0KSkgewogCQlleHRfZGVidWcoImFwcGVuZCBbJWRdJWQgYmxvY2sgdG8gJWQ6WyVkXSVkIChmcm9tICVsbHUpXG4iLAogCQkJCWV4dDRfZXh0X2lzX3VuaW5pdGlhbGl6ZWQobmV3ZXh0KSwKIAkJCQlleHQ0X2V4dF9nZXRfYWN0dWFsX2xlbihuZXdleHQpLApAQCAtMTcyMiw3ICsxNzIzLDggQEAKIAogbWVyZ2U6CiAJLyogdHJ5IHRvIG1lcmdlIGV4dGVudHMgdG8gdGhlIHJpZ2h0ICovCi0JZXh0NF9leHRfdHJ5X3RvX21lcmdlKGlub2RlLCBwYXRoLCBuZWFyZXgpOworCWlmIChmbGFnICE9IEVYVDRfR0VUX0JMT0NLU19ESU9fQ1JFQVRFX0VYVCkKKwkJZXh0NF9leHRfdHJ5X3RvX21lcmdlKGlub2RlLCBwYXRoLCBuZWFyZXgpOwogCiAJLyogdHJ5IHRvIG1lcmdlIGV4dGVudHMgdG8gdGhlIGxlZnQgKi8KIApAQCAtMjM3OCw2ICsyMzgwLDcgQEAKIAkgKi8KIAogCWlmIChFWFQ0X0hBU19JTkNPTVBBVF9GRUFUVVJFKHNiLCBFWFQ0X0ZFQVRVUkVfSU5DT01QQVRfRVhURU5UUykpIHsKKyNpZiBkZWZpbmVkKEFHR1JFU1NJVkVfVEVTVCkgfHwgZGVmaW5lZChDSEVDS19CSU5TRUFSQ0gpIHx8IGRlZmluZWQoRVhURU5UU19TVEFUUykKIAkJcHJpbnRrKEtFUk5fSU5GTyAiRVhUNC1mczogZmlsZSBleHRlbnRzIGVuYWJsZWQiKTsKICNpZmRlZiBBR0dSRVNTSVZFX1RFU1QKIAkJcHJpbnRrKCIsIGFnZ3Jlc3NpdmUgdGVzdHMiKTsKQEAgLTIzODksNiArMjM5Miw3IEBACiAJCXByaW50aygiLCBzdGF0cyIpOwogI2VuZGlmCiAJCXByaW50aygiXG4iKTsKKyNlbmRpZgogI2lmZGVmIEVYVEVOVFNfU1RBVFMKIAkJc3Bpbl9sb2NrX2luaXQoJkVYVDRfU0Ioc2IpLT5zX2V4dF9zdGF0c19sb2NrKTsKIAkJRVhUNF9TQihzYiktPnNfZXh0X21pbiA9IDEgPDwgMzA7CkBAIC0yNDkwLDcgKzI0OTQsNiBAQAogfQogCiAjZGVmaW5lIEVYVDRfRVhUX1pFUk9fTEVOIDcKLQogLyoKICAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IGV4dDRfZXh0X2dldF9ibG9ja3MoKSBpZiBzb21lb25lIHRyaWVzIHRvIHdyaXRlCiAgKiB0byBhbiB1bmluaXRpYWxpemVkIGV4dGVudC4gSXQgbWF5IHJlc3VsdCBpbiBzcGxpdHRpbmcgdGhlIHVuaW5pdGlhbGl6ZWQKQEAgLTI1ODMsNyArMjU4Niw4IEBACiAJCQlleDMtPmVlX2Jsb2NrID0gY3B1X3RvX2xlMzIoaWJsb2NrKTsKIAkJCWV4dDRfZXh0X3N0b3JlX3BibG9jayhleDMsIG5ld2Jsb2NrKTsKIAkJCWV4My0+ZWVfbGVuID0gY3B1X3RvX2xlMTYoYWxsb2NhdGVkKTsKLQkJCWVyciA9IGV4dDRfZXh0X2luc2VydF9leHRlbnQoaGFuZGxlLCBpbm9kZSwgcGF0aCwgZXgzKTsKKwkJCWVyciA9IGV4dDRfZXh0X2luc2VydF9leHRlbnQoaGFuZGxlLCBpbm9kZSwgcGF0aCwKKwkJCQkJCQlleDMsIDApOwogCQkJaWYgKGVyciA9PSAtRU5PU1BDKSB7CiAJCQkJZXJyID0gIGV4dDRfZXh0X3plcm9vdXQoaW5vZGUsICZvcmlnX2V4KTsKIAkJCQlpZiAoZXJyKQpAQCAtMjYzOSw3ICsyNjQzLDcgQEAKIAkJZXh0NF9leHRfc3RvcmVfcGJsb2NrKGV4MywgbmV3YmxvY2sgKyBtYXhfYmxvY2tzKTsKIAkJZXgzLT5lZV9sZW4gPSBjcHVfdG9fbGUxNihhbGxvY2F0ZWQgLSBtYXhfYmxvY2tzKTsKIAkJZXh0NF9leHRfbWFya191bmluaXRpYWxpemVkKGV4Myk7Ci0JCWVyciA9IGV4dDRfZXh0X2luc2VydF9leHRlbnQoaGFuZGxlLCBpbm9kZSwgcGF0aCwgZXgzKTsKKwkJZXJyID0gZXh0NF9leHRfaW5zZXJ0X2V4dGVudChoYW5kbGUsIGlub2RlLCBwYXRoLCBleDMsIDApOwogCQlpZiAoZXJyID09IC1FTk9TUEMpIHsKIAkJCWVyciA9ICBleHQ0X2V4dF96ZXJvb3V0KGlub2RlLCAmb3JpZ19leCk7CiAJCQlpZiAoZXJyKQpAQCAtMjc1Nyw3ICsyNzYxLDcgQEAKIAllcnIgPSBleHQ0X2V4dF9kaXJ0eShoYW5kbGUsIGlub2RlLCBwYXRoICsgZGVwdGgpOwogCWdvdG8gb3V0OwogaW5zZXJ0OgotCWVyciA9IGV4dDRfZXh0X2luc2VydF9leHRlbnQoaGFuZGxlLCBpbm9kZSwgcGF0aCwgJm5ld2V4KTsKKwllcnIgPSBleHQ0X2V4dF9pbnNlcnRfZXh0ZW50KGhhbmRsZSwgaW5vZGUsIHBhdGgsICZuZXdleCwgMCk7CiAJaWYgKGVyciA9PSAtRU5PU1BDKSB7CiAJCWVyciA9ICBleHQ0X2V4dF96ZXJvb3V0KGlub2RlLCAmb3JpZ19leCk7CiAJCWlmIChlcnIpCkBAIC0yNzg1LDYgKzI3ODksMzI0IEBACiB9CiAKIC8qCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSBleHQ0X2V4dF9nZXRfYmxvY2tzKCkgZnJvbQorICogZXh0NF9nZXRfYmxvY2tzX2Rpb193cml0ZSgpIHdoZW4gRElPIHRvIHdyaXRlCisgKiB0byBhbiB1bmluaXRpYWxpemVkIGV4dGVudC4KKyAqCisgKiBXcml0aW5nIHRvIGFuIHVuaW5pdGl6ZWQgZXh0ZW50IG1heSByZXN1bHQgaW4gc3BsaXR0aW5nIHRoZSB1bmluaXRpYWxpemVkCisgKiBleHRlbnQgaW50byBtdWx0aXBsZSAvaW50aWFsaXplZCB1bmludGlhbGl6ZWQgZXh0ZW50cyAodXAgdG8gdGhyZWUpCisgKiBUaGVyZSBhcmUgdGhyZWUgcG9zc2liaWxpdGllczoKKyAqICAgYT4gVGhlcmUgaXMgbm8gc3BsaXQgcmVxdWlyZWQ6IEVudGlyZSBleHRlbnQgc2hvdWxkIGJlIHVuaW5pdGlhbGl6ZWQKKyAqICAgYj4gU3BsaXRzIGluIHR3byBleHRlbnRzOiBXcml0ZSBpcyBoYXBwZW5pbmcgYXQgZWl0aGVyIGVuZCBvZiB0aGUgZXh0ZW50CisgKiAgIGM+IFNwbGl0cyBpbiB0aHJlZSBleHRlbnRzOiBTb21vbmUgaXMgd3JpdGluZyBpbiBtaWRkbGUgb2YgdGhlIGV4dGVudAorICoKKyAqIE9uZSBvZiBtb3JlIGluZGV4IGJsb2NrcyBtYXliZSBuZWVkZWQgaWYgdGhlIGV4dGVudCB0cmVlIGdyb3cgYWZ0ZXIKKyAqIHRoZSB1bmludGlhbGl6ZWQgZXh0ZW50IHNwbGl0LiBUbyBwcmV2ZW50IEVOT1NQQyBvY2N1ciBhdCB0aGUgSU8KKyAqIGNvbXBsZXRlLCB3ZSBuZWVkIHRvIHNwbGl0IHRoZSB1bmluaXRpYWxpemVkIGV4dGVudCBiZWZvcmUgRElPIHN1Ym1pdAorICogdGhlIElPLiBUaGUgdW5pbml0aWxpemVkIGV4dGVudCBjYWxsZWQgYXQgdGhpcyB0aW1lIHdpbGwgYmUgc3BsaXQKKyAqIGludG8gdGhyZWUgdW5pbml0aWFsaXplZCBleHRlbnQoYXQgbW9zdCkuIEFmdGVyIElPIGNvbXBsZXRlLCB0aGUgcGFydAorICogYmVpbmcgZmlsbGVkIHdpbGwgYmUgY29udmVydCB0byBpbml0aWFsaXplZCBieSB0aGUgZW5kX2lvIGNhbGxiYWNrIGZ1bmN0aW9uCisgKiB2aWEgZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9leHRlbnRzKCkuCisgKi8KK3N0YXRpYyBpbnQgZXh0NF9zcGxpdF91bndyaXR0ZW5fZXh0ZW50cyhoYW5kbGVfdCAqaGFuZGxlLAorCQkJCQlzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCQlzdHJ1Y3QgZXh0NF9leHRfcGF0aCAqcGF0aCwKKwkJCQkJZXh0NF9sYmxrX3QgaWJsb2NrLAorCQkJCQl1bnNpZ25lZCBpbnQgbWF4X2Jsb2NrcywKKwkJCQkJaW50IGZsYWdzKQoreworCXN0cnVjdCBleHQ0X2V4dGVudCAqZXgsIG5ld2V4LCBvcmlnX2V4OworCXN0cnVjdCBleHQ0X2V4dGVudCAqZXgxID0gTlVMTDsKKwlzdHJ1Y3QgZXh0NF9leHRlbnQgKmV4MiA9IE5VTEw7CisJc3RydWN0IGV4dDRfZXh0ZW50ICpleDMgPSBOVUxMOworCXN0cnVjdCBleHQ0X2V4dGVudF9oZWFkZXIgKmVoOworCWV4dDRfbGJsa190IGVlX2Jsb2NrOworCXVuc2lnbmVkIGludCBhbGxvY2F0ZWQsIGVlX2xlbiwgZGVwdGg7CisJZXh0NF9mc2Jsa190IG5ld2Jsb2NrOworCWludCBlcnIgPSAwOworCWludCByZXQgPSAwOworCisJZXh0X2RlYnVnKCJleHQ0X3NwbGl0X3Vud3JpdHRlbl9leHRlbnRzOiBpbm9kZSAlbHUsIgorCQkgICJpYmxvY2sgJWxsdSwgbWF4X2Jsb2NrcyAldVxuIiwgaW5vZGUtPmlfaW5vLAorCQkgICh1bnNpZ25lZCBsb25nIGxvbmcpaWJsb2NrLCBtYXhfYmxvY2tzKTsKKwlkZXB0aCA9IGV4dF9kZXB0aChpbm9kZSk7CisJZWggPSBwYXRoW2RlcHRoXS5wX2hkcjsKKwlleCA9IHBhdGhbZGVwdGhdLnBfZXh0OworCWVlX2Jsb2NrID0gbGUzMl90b19jcHUoZXgtPmVlX2Jsb2NrKTsKKwllZV9sZW4gPSBleHQ0X2V4dF9nZXRfYWN0dWFsX2xlbihleCk7CisJYWxsb2NhdGVkID0gZWVfbGVuIC0gKGlibG9jayAtIGVlX2Jsb2NrKTsKKwluZXdibG9jayA9IGlibG9jayAtIGVlX2Jsb2NrICsgZXh0X3BibG9jayhleCk7CisJZXgyID0gZXg7CisJb3JpZ19leC5lZV9ibG9jayA9IGV4LT5lZV9ibG9jazsKKwlvcmlnX2V4LmVlX2xlbiAgID0gY3B1X3RvX2xlMTYoZWVfbGVuKTsKKwlleHQ0X2V4dF9zdG9yZV9wYmxvY2soJm9yaWdfZXgsIGV4dF9wYmxvY2soZXgpKTsKKworCS8qCisgCSAqIGlmIHRoZSBlbnRpcmUgdW5pbnRpYWxpemVkIGV4dGVudCBsZW5ndGggbGVzcyB0aGFuCisgCSAqIHRoZSBzaXplIG9mIGV4dGVudCB0byB3cml0ZSwgdGhlcmUgaXMgbm8gbmVlZCB0byBzcGxpdAorIAkgKiB1bmluaXRpYWxpemVkIGV4dGVudAorIAkgKi8KKyAJaWYgKGFsbG9jYXRlZCA8PSBtYXhfYmxvY2tzKQorCQlyZXR1cm4gcmV0OworCisJZXJyID0gZXh0NF9leHRfZ2V0X2FjY2VzcyhoYW5kbGUsIGlub2RlLCBwYXRoICsgZGVwdGgpOworCWlmIChlcnIpCisJCWdvdG8gb3V0OworCS8qIGV4MTogZWVfYmxvY2sgdG8gaWJsb2NrIC0gMSA6IHVuaW5pdGlhbGl6ZWQgKi8KKwlpZiAoaWJsb2NrID4gZWVfYmxvY2spIHsKKwkJZXgxID0gZXg7CisJCWV4MS0+ZWVfbGVuID0gY3B1X3RvX2xlMTYoaWJsb2NrIC0gZWVfYmxvY2spOworCQlleHQ0X2V4dF9tYXJrX3VuaW5pdGlhbGl6ZWQoZXgxKTsKKwkJZXgyID0gJm5ld2V4OworCX0KKwkvKgorCSAqIGZvciBzYW5pdHksIHVwZGF0ZSB0aGUgbGVuZ3RoIG9mIHRoZSBleDIgZXh0ZW50IGJlZm9yZQorCSAqIHdlIGluc2VydCBleDMsIGlmIGV4MSBpcyBOVUxMLiBUaGlzIGlzIHRvIGF2b2lkIHRlbXBvcmFyeQorCSAqIG92ZXJsYXAgb2YgYmxvY2tzLgorCSAqLworCWlmICghZXgxICYmIGFsbG9jYXRlZCA+IG1heF9ibG9ja3MpCisJCWV4Mi0+ZWVfbGVuID0gY3B1X3RvX2xlMTYobWF4X2Jsb2Nrcyk7CisJLyogZXgzOiB0byBlZV9ibG9jayArIGVlX2xlbiA6IHVuaW5pdGlhbGlzZWQgKi8KKwlpZiAoYWxsb2NhdGVkID4gbWF4X2Jsb2NrcykgeworCQl1bnNpZ25lZCBpbnQgbmV3ZGVwdGg7CisJCWV4MyA9ICZuZXdleDsKKwkJZXgzLT5lZV9ibG9jayA9IGNwdV90b19sZTMyKGlibG9jayArIG1heF9ibG9ja3MpOworCQlleHQ0X2V4dF9zdG9yZV9wYmxvY2soZXgzLCBuZXdibG9jayArIG1heF9ibG9ja3MpOworCQlleDMtPmVlX2xlbiA9IGNwdV90b19sZTE2KGFsbG9jYXRlZCAtIG1heF9ibG9ja3MpOworCQlleHQ0X2V4dF9tYXJrX3VuaW5pdGlhbGl6ZWQoZXgzKTsKKwkJZXJyID0gZXh0NF9leHRfaW5zZXJ0X2V4dGVudChoYW5kbGUsIGlub2RlLCBwYXRoLCBleDMsIGZsYWdzKTsKKwkJaWYgKGVyciA9PSAtRU5PU1BDKSB7CisJCQllcnIgPSAgZXh0NF9leHRfemVyb291dChpbm9kZSwgJm9yaWdfZXgpOworCQkJaWYgKGVycikKKwkJCQlnb3RvIGZpeF9leHRlbnRfbGVuOworCQkJLyogdXBkYXRlIHRoZSBleHRlbnQgbGVuZ3RoIGFuZCBtYXJrIGFzIGluaXRpYWxpemVkICovCisJCQlleC0+ZWVfYmxvY2sgPSBvcmlnX2V4LmVlX2Jsb2NrOworCQkJZXgtPmVlX2xlbiAgID0gb3JpZ19leC5lZV9sZW47CisJCQlleHQ0X2V4dF9zdG9yZV9wYmxvY2soZXgsIGV4dF9wYmxvY2soJm9yaWdfZXgpKTsKKwkJCWV4dDRfZXh0X2RpcnR5KGhhbmRsZSwgaW5vZGUsIHBhdGggKyBkZXB0aCk7CisJCQkvKiB6ZXJvZWQgdGhlIGZ1bGwgZXh0ZW50ICovCisJCQkvKiBibG9ja3MgYXZhaWxhYmxlIGZyb20gaWJsb2NrICovCisJCQlyZXR1cm4gYWxsb2NhdGVkOworCisJCX0gZWxzZSBpZiAoZXJyKQorCQkJZ290byBmaXhfZXh0ZW50X2xlbjsKKwkJLyoKKwkJICogVGhlIGRlcHRoLCBhbmQgaGVuY2UgZWggJiBleCBtaWdodCBjaGFuZ2UKKwkJICogYXMgcGFydCBvZiB0aGUgaW5zZXJ0IGFib3ZlLgorCQkgKi8KKwkJbmV3ZGVwdGggPSBleHRfZGVwdGgoaW5vZGUpOworCQkvKgorCQkgKiB1cGRhdGUgdGhlIGV4dGVudCBsZW5ndGggYWZ0ZXIgc3VjY2Vzc2Z1bCBpbnNlcnQgb2YgdGhlCisJCSAqIHNwbGl0IGV4dGVudAorCQkgKi8KKwkJb3JpZ19leC5lZV9sZW4gPSBjcHVfdG9fbGUxNihlZV9sZW4gLQorCQkJCQkJZXh0NF9leHRfZ2V0X2FjdHVhbF9sZW4oZXgzKSk7CisJCWRlcHRoID0gbmV3ZGVwdGg7CisJCWV4dDRfZXh0X2Ryb3BfcmVmcyhwYXRoKTsKKwkJcGF0aCA9IGV4dDRfZXh0X2ZpbmRfZXh0ZW50KGlub2RlLCBpYmxvY2ssIHBhdGgpOworCQlpZiAoSVNfRVJSKHBhdGgpKSB7CisJCQllcnIgPSBQVFJfRVJSKHBhdGgpOworCQkJZ290byBvdXQ7CisJCX0KKwkJZWggPSBwYXRoW2RlcHRoXS5wX2hkcjsKKwkJZXggPSBwYXRoW2RlcHRoXS5wX2V4dDsKKwkJaWYgKGV4MiAhPSAmbmV3ZXgpCisJCQlleDIgPSBleDsKKworCQllcnIgPSBleHQ0X2V4dF9nZXRfYWNjZXNzKGhhbmRsZSwgaW5vZGUsIHBhdGggKyBkZXB0aCk7CisJCWlmIChlcnIpCisJCQlnb3RvIG91dDsKKworCQlhbGxvY2F0ZWQgPSBtYXhfYmxvY2tzOworCX0KKwkvKgorCSAqIElmIHRoZXJlIHdhcyBhIGNoYW5nZSBvZiBkZXB0aCBhcyBwYXJ0IG9mIHRoZQorCSAqIGluc2VydGlvbiBvZiBleDMgYWJvdmUsIHdlIG5lZWQgdG8gdXBkYXRlIHRoZSBsZW5ndGgKKwkgKiBvZiB0aGUgZXgxIGV4dGVudCBhZ2FpbiBoZXJlCisJICovCisJaWYgKGV4MSAmJiBleDEgIT0gZXgpIHsKKwkJZXgxID0gZXg7CisJCWV4MS0+ZWVfbGVuID0gY3B1X3RvX2xlMTYoaWJsb2NrIC0gZWVfYmxvY2spOworCQlleHQ0X2V4dF9tYXJrX3VuaW5pdGlhbGl6ZWQoZXgxKTsKKwkJZXgyID0gJm5ld2V4OworCX0KKwkvKgorCSAqIGV4MjogaWJsb2NrIHRvIGlibG9jayArIG1heGJsb2Nrcy0xIDogdG8gYmUgZGlyZWN0IElPIHdyaXR0ZW4sCisJICogdW5pbml0aWFsaXNlZCBzdGlsbC4KKwkgKi8KKwlleDItPmVlX2Jsb2NrID0gY3B1X3RvX2xlMzIoaWJsb2NrKTsKKwlleHQ0X2V4dF9zdG9yZV9wYmxvY2soZXgyLCBuZXdibG9jayk7CisJZXgyLT5lZV9sZW4gPSBjcHVfdG9fbGUxNihhbGxvY2F0ZWQpOworCWV4dDRfZXh0X21hcmtfdW5pbml0aWFsaXplZChleDIpOworCWlmIChleDIgIT0gZXgpCisJCWdvdG8gaW5zZXJ0OworCS8qIE1hcmsgbW9kaWZpZWQgZXh0ZW50IGFzIGRpcnR5ICovCisJZXJyID0gZXh0NF9leHRfZGlydHkoaGFuZGxlLCBpbm9kZSwgcGF0aCArIGRlcHRoKTsKKwlleHRfZGVidWcoIm91dCBoZXJlXG4iKTsKKwlnb3RvIG91dDsKK2luc2VydDoKKwllcnIgPSBleHQ0X2V4dF9pbnNlcnRfZXh0ZW50KGhhbmRsZSwgaW5vZGUsIHBhdGgsICZuZXdleCwgZmxhZ3MpOworCWlmIChlcnIgPT0gLUVOT1NQQykgeworCQllcnIgPSAgZXh0NF9leHRfemVyb291dChpbm9kZSwgJm9yaWdfZXgpOworCQlpZiAoZXJyKQorCQkJZ290byBmaXhfZXh0ZW50X2xlbjsKKwkJLyogdXBkYXRlIHRoZSBleHRlbnQgbGVuZ3RoIGFuZCBtYXJrIGFzIGluaXRpYWxpemVkICovCisJCWV4LT5lZV9ibG9jayA9IG9yaWdfZXguZWVfYmxvY2s7CisJCWV4LT5lZV9sZW4gICA9IG9yaWdfZXguZWVfbGVuOworCQlleHQ0X2V4dF9zdG9yZV9wYmxvY2soZXgsIGV4dF9wYmxvY2soJm9yaWdfZXgpKTsKKwkJZXh0NF9leHRfZGlydHkoaGFuZGxlLCBpbm9kZSwgcGF0aCArIGRlcHRoKTsKKwkJLyogemVybyBvdXQgdGhlIGZpcnN0IGhhbGYgKi8KKwkJcmV0dXJuIGFsbG9jYXRlZDsKKwl9IGVsc2UgaWYgKGVycikKKwkJZ290byBmaXhfZXh0ZW50X2xlbjsKK291dDoKKwlleHQ0X2V4dF9zaG93X2xlYWYoaW5vZGUsIHBhdGgpOworCXJldHVybiBlcnIgPyBlcnIgOiBhbGxvY2F0ZWQ7CisKK2ZpeF9leHRlbnRfbGVuOgorCWV4LT5lZV9ibG9jayA9IG9yaWdfZXguZWVfYmxvY2s7CisJZXgtPmVlX2xlbiAgID0gb3JpZ19leC5lZV9sZW47CisJZXh0NF9leHRfc3RvcmVfcGJsb2NrKGV4LCBleHRfcGJsb2NrKCZvcmlnX2V4KSk7CisJZXh0NF9leHRfbWFya191bmluaXRpYWxpemVkKGV4KTsKKwlleHQ0X2V4dF9kaXJ0eShoYW5kbGUsIGlub2RlLCBwYXRoICsgZGVwdGgpOworCXJldHVybiBlcnI7Cit9CitzdGF0aWMgaW50IGV4dDRfY29udmVydF91bndyaXR0ZW5fZXh0ZW50c19kaW8oaGFuZGxlX3QgKmhhbmRsZSwKKwkJCQkJICAgICAgc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkJICAgICAgc3RydWN0IGV4dDRfZXh0X3BhdGggKnBhdGgpCit7CisJc3RydWN0IGV4dDRfZXh0ZW50ICpleDsKKwlzdHJ1Y3QgZXh0NF9leHRlbnRfaGVhZGVyICplaDsKKwlpbnQgZGVwdGg7CisJaW50IGVyciA9IDA7CisJaW50IHJldCA9IDA7CisKKwlkZXB0aCA9IGV4dF9kZXB0aChpbm9kZSk7CisJZWggPSBwYXRoW2RlcHRoXS5wX2hkcjsKKwlleCA9IHBhdGhbZGVwdGhdLnBfZXh0OworCisJZXJyID0gZXh0NF9leHRfZ2V0X2FjY2VzcyhoYW5kbGUsIGlub2RlLCBwYXRoICsgZGVwdGgpOworCWlmIChlcnIpCisJCWdvdG8gb3V0OworCS8qIGZpcnN0IG1hcmsgdGhlIGV4dGVudCBhcyBpbml0aWFsaXplZCAqLworCWV4dDRfZXh0X21hcmtfaW5pdGlhbGl6ZWQoZXgpOworCisJLyoKKwkgKiBXZSBoYXZlIHRvIHNlZSBpZiBpdCBjYW4gYmUgbWVyZ2VkIHdpdGggdGhlIGV4dGVudAorCSAqIG9uIHRoZSBsZWZ0LgorCSAqLworCWlmIChleCA+IEVYVF9GSVJTVF9FWFRFTlQoZWgpKSB7CisJCS8qCisJCSAqIFRvIG1lcmdlIGxlZnQsIHBhc3MgImV4IC0gMSIgdG8gdHJ5X3RvX21lcmdlKCksCisJCSAqIHNpbmNlIGl0IG1lcmdlcyB0b3dhcmRzIHJpZ2h0IF9vbmx5Xy4KKwkJICovCisJCXJldCA9IGV4dDRfZXh0X3RyeV90b19tZXJnZShpbm9kZSwgcGF0aCwgZXggLSAxKTsKKwkJaWYgKHJldCkgeworCQkJZXJyID0gZXh0NF9leHRfY29ycmVjdF9pbmRleGVzKGhhbmRsZSwgaW5vZGUsIHBhdGgpOworCQkJaWYgKGVycikKKwkJCQlnb3RvIG91dDsKKwkJCWRlcHRoID0gZXh0X2RlcHRoKGlub2RlKTsKKwkJCWV4LS07CisJCX0KKwl9CisJLyoKKwkgKiBUcnkgdG8gTWVyZ2UgdG93YXJkcyByaWdodC4KKwkgKi8KKwlyZXQgPSBleHQ0X2V4dF90cnlfdG9fbWVyZ2UoaW5vZGUsIHBhdGgsIGV4KTsKKwlpZiAocmV0KSB7CisJCWVyciA9IGV4dDRfZXh0X2NvcnJlY3RfaW5kZXhlcyhoYW5kbGUsIGlub2RlLCBwYXRoKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gb3V0OworCQlkZXB0aCA9IGV4dF9kZXB0aChpbm9kZSk7CisJfQorCS8qIE1hcmsgbW9kaWZpZWQgZXh0ZW50IGFzIGRpcnR5ICovCisJZXJyID0gZXh0NF9leHRfZGlydHkoaGFuZGxlLCBpbm9kZSwgcGF0aCArIGRlcHRoKTsKK291dDoKKwlleHQ0X2V4dF9zaG93X2xlYWYoaW5vZGUsIHBhdGgpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQKK2V4dDRfZXh0X2hhbmRsZV91bmluaXRpYWxpemVkX2V4dGVudHMoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwKKwkJCWV4dDRfbGJsa190IGlibG9jaywgdW5zaWduZWQgaW50IG1heF9ibG9ja3MsCisJCQlzdHJ1Y3QgZXh0NF9leHRfcGF0aCAqcGF0aCwgaW50IGZsYWdzLAorCQkJdW5zaWduZWQgaW50IGFsbG9jYXRlZCwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaF9yZXN1bHQsCisJCQlleHQ0X2ZzYmxrX3QgbmV3YmxvY2spCit7CisJaW50IHJldCA9IDA7CisJaW50IGVyciA9IDA7CisJZXh0NF9pb19lbmRfdCAqaW8gPSBFWFQ0X0koaW5vZGUpLT5jdXJfYWlvX2RpbzsKKworCWV4dF9kZWJ1ZygiZXh0NF9leHRfaGFuZGxlX3VuaW5pdGlhbGl6ZWRfZXh0ZW50czogaW5vZGUgJWx1LCBsb2dpY2FsIgorCQkgICJibG9jayAlbGx1LCBtYXhfYmxvY2tzICV1LCBmbGFncyAlZCwgYWxsb2NhdGVkICV1IiwKKwkJICBpbm9kZS0+aV9pbm8sICh1bnNpZ25lZCBsb25nIGxvbmcpaWJsb2NrLCBtYXhfYmxvY2tzLAorCQkgIGZsYWdzLCBhbGxvY2F0ZWQpOworCWV4dDRfZXh0X3Nob3dfbGVhZihpbm9kZSwgcGF0aCk7CisKKwkvKiBESU8gZ2V0X2Jsb2NrKCkgYmVmb3JlIHN1Ym1pdCB0aGUgSU8sIHNwbGl0IHRoZSBleHRlbnQgKi8KKwlpZiAoZmxhZ3MgPT0gRVhUNF9HRVRfQkxPQ0tTX0RJT19DUkVBVEVfRVhUKSB7CisJCXJldCA9IGV4dDRfc3BsaXRfdW53cml0dGVuX2V4dGVudHMoaGFuZGxlLAorCQkJCQkJaW5vZGUsIHBhdGgsIGlibG9jaywKKwkJCQkJCW1heF9ibG9ja3MsIGZsYWdzKTsKKwkJLyogZmxhZyB0aGUgaW9fZW5kIHN0cnVjdCB0aGF0IHdlIG5lZWQgY29udmVydCB3aGVuIElPIGRvbmUgKi8KKwkJaWYgKGlvKQorCQkJaW8tPmZsYWcgPSBESU9fQUlPX1VOV1JJVFRFTjsKKwkJZ290byBvdXQ7CisJfQorCS8qIERJTyBlbmRfaW8gY29tcGxldGUsIGNvbnZlcnQgdGhlIGZpbGxlZCBleHRlbnQgdG8gd3JpdHRlbiAqLworCWlmIChmbGFncyA9PSBFWFQ0X0dFVF9CTE9DS1NfRElPX0NPTlZFUlRfRVhUKSB7CisJCXJldCA9IGV4dDRfY29udmVydF91bndyaXR0ZW5fZXh0ZW50c19kaW8oaGFuZGxlLCBpbm9kZSwKKwkJCQkJCQlwYXRoKTsKKwkJZ290byBvdXQyOworCX0KKwkvKiBidWZmZXJlZCBJTyBjYXNlICovCisJLyoKKwkgKiByZXBlYXQgZmFsbG9jYXRlIGNyZWF0aW9uIHJlcXVlc3QKKwkgKiB3ZSBhbHJlYWR5IGhhdmUgYW4gdW53cml0dGVuIGV4dGVudAorCSAqLworCWlmIChmbGFncyAmIEVYVDRfR0VUX0JMT0NLU19VTklOSVRfRVhUKQorCQlnb3RvIG1hcF9vdXQ7CisKKwkvKiBidWZmZXJlZCBSRUFEIG9yIGJ1ZmZlcmVkIHdyaXRlX2JlZ2luKCkgbG9va3VwICovCisJaWYgKChmbGFncyAmIEVYVDRfR0VUX0JMT0NLU19DUkVBVEUpID09IDApIHsKKwkJLyoKKwkJICogV2UgaGF2ZSBibG9ja3MgcmVzZXJ2ZWQgYWxyZWFkeS4gIFdlCisJCSAqIHJldHVybiBhbGxvY2F0ZWQgYmxvY2tzIHNvIHRoYXQgZGVsYWxsb2MKKwkJICogd29uJ3QgZG8gYmxvY2sgcmVzZXJ2YXRpb24gZm9yIHVzLiAgQnV0CisJCSAqIHRoZSBidWZmZXIgaGVhZCB3aWxsIGJlIHVubWFwcGVkIHNvIHRoYXQKKwkJICogYSByZWFkIGZyb20gdGhlIGJsb2NrIHJldHVybnMgMHMuCisJCSAqLworCQlzZXRfYnVmZmVyX3Vud3JpdHRlbihiaF9yZXN1bHQpOworCQlnb3RvIG91dDE7CisJfQorCisJLyogYnVmZmVyZWQgd3JpdGUsIHdyaXRlcGFnZSB0aW1lLCBjb252ZXJ0Ki8KKwlyZXQgPSBleHQ0X2V4dF9jb252ZXJ0X3RvX2luaXRpYWxpemVkKGhhbmRsZSwgaW5vZGUsCisJCQkJCQlwYXRoLCBpYmxvY2ssCisJCQkJCQltYXhfYmxvY2tzKTsKK291dDoKKwlpZiAocmV0IDw9IDApIHsKKwkJZXJyID0gcmV0OworCQlnb3RvIG91dDI7CisJfSBlbHNlCisJCWFsbG9jYXRlZCA9IHJldDsKKwlzZXRfYnVmZmVyX25ldyhiaF9yZXN1bHQpOworbWFwX291dDoKKwlzZXRfYnVmZmVyX21hcHBlZChiaF9yZXN1bHQpOworb3V0MToKKwlpZiAoYWxsb2NhdGVkID4gbWF4X2Jsb2NrcykKKwkJYWxsb2NhdGVkID0gbWF4X2Jsb2NrczsKKwlleHQ0X2V4dF9zaG93X2xlYWYoaW5vZGUsIHBhdGgpOworCWJoX3Jlc3VsdC0+Yl9iZGV2ID0gaW5vZGUtPmlfc2ItPnNfYmRldjsKKwliaF9yZXN1bHQtPmJfYmxvY2tuciA9IG5ld2Jsb2NrOworb3V0MjoKKwlpZiAocGF0aCkgeworCQlleHQ0X2V4dF9kcm9wX3JlZnMocGF0aCk7CisJCWtmcmVlKHBhdGgpOworCX0KKwlyZXR1cm4gZXJyID8gZXJyIDogYWxsb2NhdGVkOworfQorLyoKICAqIEJsb2NrIGFsbG9jYXRpb24vbWFwL3ByZWFsbG9jYXRpb24gcm91dGluZSBmb3IgZXh0ZW50cyBiYXNlZCBmaWxlcwogICoKICAqCkBAIC0yODE0LDYgKzMxMzYsNyBAQAogCWludCBlcnIgPSAwLCBkZXB0aCwgcmV0LCBjYWNoZV90eXBlOwogCXVuc2lnbmVkIGludCBhbGxvY2F0ZWQgPSAwOwogCXN0cnVjdCBleHQ0X2FsbG9jYXRpb25fcmVxdWVzdCBhcjsKKwlleHQ0X2lvX2VuZF90ICppbyA9IEVYVDRfSShpbm9kZSktPmN1cl9haW9fZGlvOwogCiAJX19jbGVhcl9iaXQoQkhfTmV3LCAmYmhfcmVzdWx0LT5iX3N0YXRlKTsKIAlleHRfZGVidWcoImJsb2NrcyAldS8ldSByZXF1ZXN0ZWQgZm9yIGlub2RlICVsdVxuIiwKQEAgLTI4ODksMzMgKzMyMTIsMTAgQEAKIAkJCQkJCQlFWFQ0X0VYVF9DQUNIRV9FWFRFTlQpOwogCQkJCWdvdG8gb3V0OwogCQkJfQotCQkJaWYgKGZsYWdzICYgRVhUNF9HRVRfQkxPQ0tTX1VOSU5JVF9FWFQpCi0JCQkJZ290byBvdXQ7Ci0JCQlpZiAoKGZsYWdzICYgRVhUNF9HRVRfQkxPQ0tTX0NSRUFURSkgPT0gMCkgewotCQkJCWlmIChhbGxvY2F0ZWQgPiBtYXhfYmxvY2tzKQotCQkJCQlhbGxvY2F0ZWQgPSBtYXhfYmxvY2tzOwotCQkJCS8qCi0JCQkJICogV2UgaGF2ZSBibG9ja3MgcmVzZXJ2ZWQgYWxyZWFkeS4gIFdlCi0JCQkJICogcmV0dXJuIGFsbG9jYXRlZCBibG9ja3Mgc28gdGhhdCBkZWxhbGxvYwotCQkJCSAqIHdvbid0IGRvIGJsb2NrIHJlc2VydmF0aW9uIGZvciB1cy4gIEJ1dAotCQkJCSAqIHRoZSBidWZmZXIgaGVhZCB3aWxsIGJlIHVubWFwcGVkIHNvIHRoYXQKLQkJCQkgKiBhIHJlYWQgZnJvbSB0aGUgYmxvY2sgcmV0dXJucyAwcy4KLQkJCQkgKi8KLQkJCQlzZXRfYnVmZmVyX3Vud3JpdHRlbihiaF9yZXN1bHQpOwotCQkJCWJoX3Jlc3VsdC0+Yl9iZGV2ID0gaW5vZGUtPmlfc2ItPnNfYmRldjsKLQkJCQliaF9yZXN1bHQtPmJfYmxvY2tuciA9IG5ld2Jsb2NrOwotCQkJCWdvdG8gb3V0MjsKLQkJCX0KLQotCQkJcmV0ID0gZXh0NF9leHRfY29udmVydF90b19pbml0aWFsaXplZChoYW5kbGUsIGlub2RlLAotCQkJCQkJCQlwYXRoLCBpYmxvY2ssCi0JCQkJCQkJCW1heF9ibG9ja3MpOwotCQkJaWYgKHJldCA8PSAwKSB7Ci0JCQkJZXJyID0gcmV0OwotCQkJCWdvdG8gb3V0MjsKLQkJCX0gZWxzZQotCQkJCWFsbG9jYXRlZCA9IHJldDsKLQkJCWdvdG8gb3V0bmV3OworCQkJcmV0ID0gZXh0NF9leHRfaGFuZGxlX3VuaW5pdGlhbGl6ZWRfZXh0ZW50cyhoYW5kbGUsCisJCQkJCWlub2RlLCBpYmxvY2ssIG1heF9ibG9ja3MsIHBhdGgsCisJCQkJCWZsYWdzLCBhbGxvY2F0ZWQsIGJoX3Jlc3VsdCwgbmV3YmxvY2spOworCQkJcmV0dXJuIHJldDsKIAkJfQogCX0KIApAQCAtMjk4Niw5ICszMjg2LDIxIEBACiAJLyogdHJ5IHRvIGluc2VydCBuZXcgZXh0ZW50IGludG8gZm91bmQgbGVhZiBhbmQgcmV0dXJuICovCiAJZXh0NF9leHRfc3RvcmVfcGJsb2NrKCZuZXdleCwgbmV3YmxvY2spOwogCW5ld2V4LmVlX2xlbiA9IGNwdV90b19sZTE2KGFyLmxlbik7Ci0JaWYgKGZsYWdzICYgRVhUNF9HRVRfQkxPQ0tTX1VOSU5JVF9FWFQpICAvKiBNYXJrIHVuaW5pdGlhbGl6ZWQgKi8KKwkvKiBNYXJrIHVuaW5pdGlhbGl6ZWQgKi8KKwlpZiAoZmxhZ3MgJiBFWFQ0X0dFVF9CTE9DS1NfVU5JTklUX0VYVCl7CiAJCWV4dDRfZXh0X21hcmtfdW5pbml0aWFsaXplZCgmbmV3ZXgpOwotCWVyciA9IGV4dDRfZXh0X2luc2VydF9leHRlbnQoaGFuZGxlLCBpbm9kZSwgcGF0aCwgJm5ld2V4KTsKKwkJLyoKKwkJICogaW9fZW5kIHN0cnVjdHVyZSB3YXMgY3JlYXRlZCBmb3IgZXZlcnkgYXN5bmMKKwkJICogZGlyZWN0IElPIHdyaXRlIHRvIHRoZSBtaWRkbGUgb2YgdGhlIGZpbGUuCisJCSAqIFRvIGF2b2lkIHVuZWNlc3NhcnkgY29udmVydGlvbiBmb3IgZXZlcnkgYWlvIGRpbyByZXdyaXRlCisJCSAqIHRvIHRoZSBtaWQgb2YgZmlsZSwgaGVyZSB3ZSBmbGFnIHRoZSBJTyB0aGF0IGlzIHJlYWxseQorCQkgKiBuZWVkIHRoZSBjb252ZXJ0aW9uLgorCQkgKgorCQkgKi8KKwkJaWYgKGlvICYmIGZsYWdzID09IEVYVDRfR0VUX0JMT0NLU19ESU9fQ1JFQVRFX0VYVCkKKwkJCWlvLT5mbGFnID0gRElPX0FJT19VTldSSVRURU47CisJfQorCWVyciA9IGV4dDRfZXh0X2luc2VydF9leHRlbnQoaGFuZGxlLCBpbm9kZSwgcGF0aCwgJm5ld2V4LCBmbGFncyk7CiAJaWYgKGVycikgewogCQkvKiBmcmVlIGRhdGEgYmxvY2tzIHdlIGp1c3QgYWxsb2NhdGVkICovCiAJCS8qIG5vdCBhIGdvb2QgaWRlYSB0byBjYWxsIGRpc2NhcmQgaGVyZSBkaXJlY3RseSwKQEAgLTMwMDIsNyArMzMxNCw2IEBACiAJLyogcHJldmlvdXMgcm91dGluZSBjb3VsZCB1c2UgYmxvY2sgd2UgYWxsb2NhdGVkICovCiAJbmV3YmxvY2sgPSBleHRfcGJsb2NrKCZuZXdleCk7CiAJYWxsb2NhdGVkID0gZXh0NF9leHRfZ2V0X2FjdHVhbF9sZW4oJm5ld2V4KTsKLW91dG5ldzoKIAlzZXRfYnVmZmVyX25ldyhiaF9yZXN1bHQpOwogCiAJLyogQ2FjaGUgb25seSB3aGVuIGl0IGlzIF9ub3RfIGFuIHVuaW5pdGlhbGl6ZWQgZXh0ZW50ICovCkBAIC0zMjAxLDYgKzM1MTIsNjMgQEAKIH0KIAogLyoKKyAqIFRoaXMgZnVuY3Rpb24gY29udmVydCBhIHJhbmdlIG9mIGJsb2NrcyB0byB3cml0dGVuIGV4dGVudHMKKyAqIFRoZSBjYWxsZXIgb2YgdGhpcyBmdW5jdGlvbiB3aWxsIHBhc3MgdGhlIHN0YXJ0IG9mZnNldCBhbmQgdGhlIHNpemUuCisgKiBhbGwgdW53cml0dGVuIGV4dGVudHMgd2l0aGluIHRoaXMgcmFuZ2Ugd2lsbCBiZSBjb252ZXJ0ZWQgdG8KKyAqIHdyaXR0ZW4gZXh0ZW50cy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIHRoZSBkaXJlY3QgSU8gZW5kIGlvIGNhbGwgYmFjaworICogZnVuY3Rpb24sIHRvIGNvbnZlcnQgdGhlIGZhbGxvY2F0ZWQgZXh0ZW50cyBhZnRlciBJTyBpcyBjb21wbGV0ZWQuCisgKi8KK2ludCBleHQ0X2NvbnZlcnRfdW53cml0dGVuX2V4dGVudHMoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG9mZnNldCwKKwkJCQkgICAgbG9mZl90IGxlbikKK3sKKwloYW5kbGVfdCAqaGFuZGxlOworCWV4dDRfbGJsa190IGJsb2NrOworCXVuc2lnbmVkIGludCBtYXhfYmxvY2tzOworCWludCByZXQgPSAwOworCWludCByZXQyID0gMDsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgbWFwX2JoOworCXVuc2lnbmVkIGludCBjcmVkaXRzLCBibGtiaXRzID0gaW5vZGUtPmlfYmxrYml0czsKKworCWJsb2NrID0gb2Zmc2V0ID4+IGJsa2JpdHM7CisJLyoKKwkgKiBXZSBjYW4ndCBqdXN0IGNvbnZlcnQgbGVuIHRvIG1heF9ibG9ja3MgYmVjYXVzZQorCSAqIElmIGJsb2Nrc2l6ZSA9IDQwOTYgb2Zmc2V0ID0gMzA3MiBhbmQgbGVuID0gMjA0OAorCSAqLworCW1heF9ibG9ja3MgPSAoRVhUNF9CTE9DS19BTElHTihsZW4gKyBvZmZzZXQsIGJsa2JpdHMpID4+IGJsa2JpdHMpCisJCQkJCQkJLSBibG9jazsKKwkvKgorCSAqIGNyZWRpdHMgdG8gaW5zZXJ0IDEgZXh0ZW50IGludG8gZXh0ZW50IHRyZWUKKwkgKi8KKwljcmVkaXRzID0gZXh0NF9jaHVua190cmFuc19ibG9ja3MoaW5vZGUsIG1heF9ibG9ja3MpOworCXdoaWxlIChyZXQgPj0gMCAmJiByZXQgPCBtYXhfYmxvY2tzKSB7CisJCWJsb2NrID0gYmxvY2sgKyByZXQ7CisJCW1heF9ibG9ja3MgPSBtYXhfYmxvY2tzIC0gcmV0OworCQloYW5kbGUgPSBleHQ0X2pvdXJuYWxfc3RhcnQoaW5vZGUsIGNyZWRpdHMpOworCQlpZiAoSVNfRVJSKGhhbmRsZSkpIHsKKwkJCXJldCA9IFBUUl9FUlIoaGFuZGxlKTsKKwkJCWJyZWFrOworCQl9CisJCW1hcF9iaC5iX3N0YXRlID0gMDsKKwkJcmV0ID0gZXh0NF9nZXRfYmxvY2tzKGhhbmRsZSwgaW5vZGUsIGJsb2NrLAorCQkJCSAgICAgIG1heF9ibG9ja3MsICZtYXBfYmgsCisJCQkJICAgICAgRVhUNF9HRVRfQkxPQ0tTX0RJT19DT05WRVJUX0VYVCk7CisJCWlmIChyZXQgPD0gMCkgeworCQkJV0FSTl9PTihyZXQgPD0gMCk7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBleHQ0X2V4dF9nZXRfYmxvY2tzICIKKwkJCQkgICAgInJldHVybmVkIGVycm9yIGlub2RlIyVsdSwgYmxvY2s9JXUsICIKKwkJCQkgICAgIm1heF9ibG9ja3M9JXUiLCBfX2Z1bmNfXywKKwkJCQkgICAgaW5vZGUtPmlfaW5vLCBibG9jaywgbWF4X2Jsb2Nrcyk7CisJCX0KKwkJZXh0NF9tYXJrX2lub2RlX2RpcnR5KGhhbmRsZSwgaW5vZGUpOworCQlyZXQyID0gZXh0NF9qb3VybmFsX3N0b3AoaGFuZGxlKTsKKwkJaWYgKHJldCA8PSAwIHx8IHJldDIgKQorCQkJYnJlYWs7CisJfQorCXJldHVybiByZXQgPiAwID8gcmV0MiA6IHJldDsKK30KKy8qCiAgKiBDYWxsYmFjayBmdW5jdGlvbiBjYWxsZWQgZm9yIGVhY2ggZXh0ZW50IHRvIGdhdGhlciBGSUVNQVAgaW5mb3JtYXRpb24uCiAgKi8KIHN0YXRpYyBpbnQgZXh0NF9leHRfZmllbWFwX2NiKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBleHQ0X2V4dF9wYXRoICpwYXRoLApkaWZmIC0tZ2l0IGEvZnMvZXh0NC9maWxlLmMgYi9mcy9leHQ0L2ZpbGUuYwppbmRleCA1Y2EzZWNhLi45NjMwNTgzIDEwMDY0NAotLS0gYS9mcy9leHQ0L2ZpbGUuYworKysgYi9mcy9leHQ0L2ZpbGUuYwpAQCAtODEsNyArODEsNyBAQAogCXJldHVybiBnZW5lcmljX2ZpbGVfYWlvX3dyaXRlKGlvY2IsIGlvdiwgbnJfc2VncywgcG9zKTsKIH0KIAotc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBleHQ0X2ZpbGVfdm1fb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBleHQ0X2ZpbGVfdm1fb3BzID0gewogCS5mYXVsdAkJPSBmaWxlbWFwX2ZhdWx0LAogCS5wYWdlX21rd3JpdGUgICA9IGV4dDRfcGFnZV9ta3dyaXRlLAogfTsKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZnN5bmMuYyBiL2ZzL2V4dDQvZnN5bmMuYwppbmRleCAwNzQ3NTc0Li4yYjE1MzEyIDEwMDY0NAotLS0gYS9mcy9leHQ0L2ZzeW5jLmMKKysrIGIvZnMvZXh0NC9mc3luYy5jCkBAIC00NCw2ICs0NCw4IEBACiAgKgogICogV2hhdCB3ZSBkbyBpcyBqdXN0IGtpY2sgb2ZmIGEgY29tbWl0IGFuZCB3YWl0IG9uIGl0LiAgVGhpcyB3aWxsIHNuYXBzaG90IHRoZQogICogaW5vZGUgdG8gZGlzay4KKyAqCisgKiBpX211dGV4IGxvY2sgaXMgaGVsZCB3aGVuIGVudGVyaW5nIGFuZCBleGl0aW5nIHRoaXMgZnVuY3Rpb24KICAqLwogCiBpbnQgZXh0NF9zeW5jX2ZpbGUoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgaW50IGRhdGFzeW5jKQpAQCAtNTYsNiArNTgsOSBAQAogCiAJdHJhY2VfZXh0NF9zeW5jX2ZpbGUoZmlsZSwgZGVudHJ5LCBkYXRhc3luYyk7CiAKKwlyZXQgPSBmbHVzaF9haW9fZGlvX2NvbXBsZXRlZF9JTyhpbm9kZSk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OwogCS8qCiAJICogZGF0YT13cml0ZWJhY2s6CiAJICogIFRoZSBjYWxsZXIncyBmaWxlbWFwX2ZkYXRhd3JpdGUoKS93YWl0IHdpbGwgc3luYyB0aGUgZGF0YS4KZGlmZiAtLWdpdCBhL2ZzL2V4dDQvaW5vZGUuYyBiL2ZzL2V4dDQvaW5vZGUuYwppbmRleCAwNjQ3NDZmLi41YzViYzVkIDEwMDY0NAotLS0gYS9mcy9leHQ0L2lub2RlLmMKKysrIGIvZnMvZXh0NC9pbm9kZS5jCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSA8bGludXgvbmFtZWkuaD4KICNpbmNsdWRlIDxsaW51eC91aW8uaD4KICNpbmNsdWRlIDxsaW51eC9iaW8uaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KIAogI2luY2x1ZGUgImV4dDRfamJkMi5oIgogI2luY2x1ZGUgInhhdHRyLmgiCkBAIC0xMTQ1LDYgKzExNDYsNjQgQEAKIH0KIAogLyoKKyAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGNvbnRpZ3VvdXMgZGlydHkgcGFnZXMgaW4gYSBnaXZlbiBpbm9kZQorICogc3RhcnRpbmcgYXQgcGFnZSBmcmFtZSBpZHguCisgKi8KK3N0YXRpYyBwZ29mZl90IGV4dDRfbnVtX2RpcnR5X3BhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3QgaWR4LAorCQkJCSAgICB1bnNpZ25lZCBpbnQgbWF4X3BhZ2VzKQoreworCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gaW5vZGUtPmlfbWFwcGluZzsKKwlwZ29mZl90CWluZGV4OworCXN0cnVjdCBwYWdldmVjIHB2ZWM7CisJcGdvZmZfdCBudW0gPSAwOworCWludCBpLCBucl9wYWdlcywgZG9uZSA9IDA7CisKKwlpZiAobWF4X3BhZ2VzID09IDApCisJCXJldHVybiAwOworCXBhZ2V2ZWNfaW5pdCgmcHZlYywgMCk7CisJd2hpbGUgKCFkb25lKSB7CisJCWluZGV4ID0gaWR4OworCQlucl9wYWdlcyA9IHBhZ2V2ZWNfbG9va3VwX3RhZygmcHZlYywgbWFwcGluZywgJmluZGV4LAorCQkJCQkgICAgICBQQUdFQ0FDSEVfVEFHX0RJUlRZLAorCQkJCQkgICAgICAocGdvZmZfdClQQUdFVkVDX1NJWkUpOworCQlpZiAobnJfcGFnZXMgPT0gMCkKKwkJCWJyZWFrOworCQlmb3IgKGkgPSAwOyBpIDwgbnJfcGFnZXM7IGkrKykgeworCQkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBwdmVjLnBhZ2VzW2ldOworCQkJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgKmhlYWQ7CisKKwkJCWxvY2tfcGFnZShwYWdlKTsKKwkJCWlmICh1bmxpa2VseShwYWdlLT5tYXBwaW5nICE9IG1hcHBpbmcpIHx8CisJCQkgICAgIVBhZ2VEaXJ0eShwYWdlKSB8fAorCQkJICAgIFBhZ2VXcml0ZWJhY2socGFnZSkgfHwKKwkJCSAgICBwYWdlLT5pbmRleCAhPSBpZHgpIHsKKwkJCQlkb25lID0gMTsKKwkJCQl1bmxvY2tfcGFnZShwYWdlKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWlmIChwYWdlX2hhc19idWZmZXJzKHBhZ2UpKSB7CisJCQkJYmggPSBoZWFkID0gcGFnZV9idWZmZXJzKHBhZ2UpOworCQkJCWRvIHsKKwkJCQkJaWYgKCFidWZmZXJfZGVsYXkoYmgpICYmCisJCQkJCSAgICAhYnVmZmVyX3Vud3JpdHRlbihiaCkpCisJCQkJCQlkb25lID0gMTsKKwkJCQkJYmggPSBiaC0+Yl90aGlzX3BhZ2U7CisJCQkJfSB3aGlsZSAoIWRvbmUgJiYgKGJoICE9IGhlYWQpKTsKKwkJCX0KKwkJCXVubG9ja19wYWdlKHBhZ2UpOworCQkJaWYgKGRvbmUpCisJCQkJYnJlYWs7CisJCQlpZHgrKzsKKwkJCW51bSsrOworCQkJaWYgKG51bSA+PSBtYXhfcGFnZXMpCisJCQkJYnJlYWs7CisJCX0KKwkJcGFnZXZlY19yZWxlYXNlKCZwdmVjKTsKKwl9CisJcmV0dXJuIG51bTsKK30KKworLyoKICAqIFRoZSBleHQ0X2dldF9ibG9ja3MoKSBmdW5jdGlvbiB0cmllcyB0byBsb29rIHVwIHRoZSByZXF1ZXN0ZWQgYmxvY2tzLAogICogYW5kIHJldHVybnMgaWYgdGhlIGJsb2NrcyBhcmUgYWxyZWFkeSBtYXBwZWQuCiAgKgpAQCAtMTE3NSw2ICsxMjM0LDkgQEAKIAljbGVhcl9idWZmZXJfbWFwcGVkKGJoKTsKIAljbGVhcl9idWZmZXJfdW53cml0dGVuKGJoKTsKIAorCWV4dF9kZWJ1ZygiZXh0NF9nZXRfYmxvY2tzKCk6IGlub2RlICVsdSwgZmxhZyAlZCwgbWF4X2Jsb2NrcyAldSwiCisJCSAgImxvZ2ljYWwgYmxvY2sgJWx1XG4iLCBpbm9kZS0+aV9pbm8sIGZsYWdzLCBtYXhfYmxvY2tzLAorCQkgICh1bnNpZ25lZCBsb25nKWJsb2NrKTsKIAkvKgogCSAqIFRyeSB0byBzZWUgaWYgd2UgY2FuIGdldCB0aGUgYmxvY2sgd2l0aG91dCByZXF1ZXN0aW5nIGEgbmV3CiAJICogZmlsZSBzeXN0ZW0gYmxvY2suCkBAIC0xNzk2LDExICsxODU4LDExIEBACiAKIAlpZiAoZXh0NF9jbGFpbV9mcmVlX2Jsb2NrcyhzYmksIHRvdGFsKSkgewogCQlzcGluX3VubG9jaygmRVhUNF9JKGlub2RlKS0+aV9ibG9ja19yZXNlcnZhdGlvbl9sb2NrKTsKKwkJdmZzX2RxX3JlbGVhc2VfcmVzZXJ2YXRpb25fYmxvY2soaW5vZGUsIHRvdGFsKTsKIAkJaWYgKGV4dDRfc2hvdWxkX3JldHJ5X2FsbG9jKGlub2RlLT5pX3NiLCAmcmV0cmllcykpIHsKIAkJCXlpZWxkKCk7CiAJCQlnb3RvIHJlcGVhdDsKIAkJfQotCQl2ZnNfZHFfcmVsZWFzZV9yZXNlcnZhdGlvbl9ibG9jayhpbm9kZSwgdG90YWwpOwogCQlyZXR1cm4gLUVOT1NQQzsKIAl9CiAJRVhUNF9JKGlub2RlKS0+aV9yZXNlcnZlZF9kYXRhX2Jsb2NrcyArPSBucmJsb2NrczsKQEAgLTIwOTIsMTggKzIxNTQsMTggQEAKIHN0YXRpYyB2b2lkIGV4dDRfcHJpbnRfZnJlZV9ibG9ja3Moc3RydWN0IGlub2RlICppbm9kZSkKIHsKIAlzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmkgPSBFWFQ0X1NCKGlub2RlLT5pX3NiKTsKLQlwcmludGsoS0VSTl9FTUVSRyAiVG90YWwgZnJlZSBibG9ja3MgY291bnQgJWxsZFxuIiwKLQkJCWV4dDRfY291bnRfZnJlZV9ibG9ja3MoaW5vZGUtPmlfc2IpKTsKLQlwcmludGsoS0VSTl9FTUVSRyAiRnJlZS9EaXJ0eSBibG9jayBkZXRhaWxzXG4iKTsKLQlwcmludGsoS0VSTl9FTUVSRyAiZnJlZV9ibG9ja3M9JWxsZFxuIiwKLQkJCShsb25nIGxvbmcpcGVyY3B1X2NvdW50ZXJfc3VtKCZzYmktPnNfZnJlZWJsb2Nrc19jb3VudGVyKSk7Ci0JcHJpbnRrKEtFUk5fRU1FUkcgImRpcnR5X2Jsb2Nrcz0lbGxkXG4iLAotCQkJKGxvbmcgbG9uZylwZXJjcHVfY291bnRlcl9zdW0oJnNiaS0+c19kaXJ0eWJsb2Nrc19jb3VudGVyKSk7Ci0JcHJpbnRrKEtFUk5fRU1FUkcgIkJsb2NrIHJlc2VydmF0aW9uIGRldGFpbHNcbiIpOwotCXByaW50ayhLRVJOX0VNRVJHICJpX3Jlc2VydmVkX2RhdGFfYmxvY2tzPSV1XG4iLAotCQkJRVhUNF9JKGlub2RlKS0+aV9yZXNlcnZlZF9kYXRhX2Jsb2Nrcyk7Ci0JcHJpbnRrKEtFUk5fRU1FUkcgImlfcmVzZXJ2ZWRfbWV0YV9ibG9ja3M9JXVcbiIsCi0JCQlFWFQ0X0koaW5vZGUpLT5pX3Jlc2VydmVkX21ldGFfYmxvY2tzKTsKKwlwcmludGsoS0VSTl9DUklUICJUb3RhbCBmcmVlIGJsb2NrcyBjb3VudCAlbGxkXG4iLAorCSAgICAgICBleHQ0X2NvdW50X2ZyZWVfYmxvY2tzKGlub2RlLT5pX3NiKSk7CisJcHJpbnRrKEtFUk5fQ1JJVCAiRnJlZS9EaXJ0eSBibG9jayBkZXRhaWxzXG4iKTsKKwlwcmludGsoS0VSTl9DUklUICJmcmVlX2Jsb2Nrcz0lbGxkXG4iLAorCSAgICAgICAobG9uZyBsb25nKSBwZXJjcHVfY291bnRlcl9zdW0oJnNiaS0+c19mcmVlYmxvY2tzX2NvdW50ZXIpKTsKKwlwcmludGsoS0VSTl9DUklUICJkaXJ0eV9ibG9ja3M9JWxsZFxuIiwKKwkgICAgICAgKGxvbmcgbG9uZykgcGVyY3B1X2NvdW50ZXJfc3VtKCZzYmktPnNfZGlydHlibG9ja3NfY291bnRlcikpOworCXByaW50ayhLRVJOX0NSSVQgIkJsb2NrIHJlc2VydmF0aW9uIGRldGFpbHNcbiIpOworCXByaW50ayhLRVJOX0NSSVQgImlfcmVzZXJ2ZWRfZGF0YV9ibG9ja3M9JXVcbiIsCisJICAgICAgIEVYVDRfSShpbm9kZSktPmlfcmVzZXJ2ZWRfZGF0YV9ibG9ja3MpOworCXByaW50ayhLRVJOX0NSSVQgImlfcmVzZXJ2ZWRfbWV0YV9ibG9ja3M9JXVcbiIsCisJICAgICAgIEVYVDRfSShpbm9kZSktPmlfcmVzZXJ2ZWRfbWV0YV9ibG9ja3MpOwogCXJldHVybjsKIH0KIApAQCAtMjE4OSwxNCArMjI1MSwxNCBAQAogCQkgKiB3cml0ZXBhZ2UgYW5kIHdyaXRlcGFnZXMgd2lsbCBhZ2FpbiB0cnkgdG8gd3JpdGUKIAkJICogdGhlIHNhbWUuCiAJCSAqLwotCQlwcmludGsoS0VSTl9FTUVSRyAiJXMgYmxvY2sgYWxsb2NhdGlvbiBmYWlsZWQgZm9yIGlub2RlICVsdSAiCi0JCQkJICAiYXQgbG9naWNhbCBvZmZzZXQgJWxsdSB3aXRoIG1heCBibG9ja3MgIgotCQkJCSAgIiV6ZCB3aXRoIGVycm9yICVkXG4iLAotCQkJCSAgX19mdW5jX18sIG1wZC0+aW5vZGUtPmlfaW5vLAotCQkJCSAgKHVuc2lnbmVkIGxvbmcgbG9uZyluZXh0LAotCQkJCSAgbXBkLT5iX3NpemUgPj4gbXBkLT5pbm9kZS0+aV9ibGtiaXRzLCBlcnIpOwotCQlwcmludGsoS0VSTl9FTUVSRyAiVGhpcyBzaG91bGQgbm90IGhhcHBlbi4hISAiCi0JCQkJCSJEYXRhIHdpbGwgYmUgbG9zdFxuIik7CisJCWV4dDRfbXNnKG1wZC0+aW5vZGUtPmlfc2IsIEtFUk5fQ1JJVCwKKwkJCSAiZGVsYXllZCBibG9jayBhbGxvY2F0aW9uIGZhaWxlZCBmb3IgaW5vZGUgJWx1IGF0ICIKKwkJCSAibG9naWNhbCBvZmZzZXQgJWxsdSB3aXRoIG1heCBibG9ja3MgJXpkIHdpdGggIgorCQkJICJlcnJvciAlZFxuIiwgbXBkLT5pbm9kZS0+aV9pbm8sCisJCQkgKHVuc2lnbmVkIGxvbmcgbG9uZykgbmV4dCwKKwkJCSBtcGQtPmJfc2l6ZSA+PiBtcGQtPmlub2RlLT5pX2Jsa2JpdHMsIGVycik7CisJCXByaW50ayhLRVJOX0NSSVQgIlRoaXMgc2hvdWxkIG5vdCBoYXBwZW4hISAgIgorCQkgICAgICAgIkRhdGEgd2lsbCBiZSBsb3N0XG4iKTsKIAkJaWYgKGVyciA9PSAtRU5PU1BDKSB7CiAJCQlleHQ0X3ByaW50X2ZyZWVfYmxvY2tzKG1wZC0+aW5vZGUpOwogCQl9CkBAIC0yNzQzLDggKzI4MDUsMTAgQEAKIAlpbnQgbm9fbnJ3cml0ZV9pbmRleF91cGRhdGU7CiAJaW50IHBhZ2VzX3dyaXR0ZW4gPSAwOwogCWxvbmcgcGFnZXNfc2tpcHBlZDsKKwl1bnNpZ25lZCBpbnQgbWF4X3BhZ2VzOwogCWludCByYW5nZV9jeWNsaWMsIGN5Y2xlZCA9IDEsIGlvX2RvbmUgPSAwOwotCWludCBuZWVkZWRfYmxvY2tzLCByZXQgPSAwLCBucl90b193cml0ZWJ1bXAgPSAwOworCWludCBuZWVkZWRfYmxvY2tzLCByZXQgPSAwOworCWxvbmcgZGVzaXJlZF9ucl90b193cml0ZSwgbnJfdG9fd3JpdGVidW1wID0gMDsKIAlsb2ZmX3QgcmFuZ2Vfc3RhcnQgPSB3YmMtPnJhbmdlX3N0YXJ0OwogCXN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSA9IEVYVDRfU0IobWFwcGluZy0+aG9zdC0+aV9zYik7CiAKQEAgLTI3NzEsMTYgKzI4MzUsNiBAQAogCWlmICh1bmxpa2VseShzYmktPnNfbW91bnRfZmxhZ3MgJiBFWFQ0X01GX0ZTX0FCT1JURUQpKQogCQlyZXR1cm4gLUVST0ZTOwogCi0JLyoKLQkgKiBNYWtlIHN1cmUgbnJfdG9fd3JpdGUgaXMgPj0gc2JpLT5zX21iX3N0cmVhbV9yZXF1ZXN0Ci0JICogVGhpcyBtYWtlIHN1cmUgc21hbGwgZmlsZXMgYmxvY2tzIGFyZSBhbGxvY2F0ZWQgaW4KLQkgKiBzaW5nbGUgYXR0ZW1wdC4gVGhpcyBlbnN1cmUgdGhhdCBzbWFsbCBmaWxlcwotCSAqIGdldCBsZXNzIGZyYWdtZW50ZWQuCi0JICovCi0JaWYgKHdiYy0+bnJfdG9fd3JpdGUgPCBzYmktPnNfbWJfc3RyZWFtX3JlcXVlc3QpIHsKLQkJbnJfdG9fd3JpdGVidW1wID0gc2JpLT5zX21iX3N0cmVhbV9yZXF1ZXN0IC0gd2JjLT5ucl90b193cml0ZTsKLQkJd2JjLT5ucl90b193cml0ZSA9IHNiaS0+c19tYl9zdHJlYW1fcmVxdWVzdDsKLQl9CiAJaWYgKHdiYy0+cmFuZ2Vfc3RhcnQgPT0gMCAmJiB3YmMtPnJhbmdlX2VuZCA9PSBMTE9OR19NQVgpCiAJCXJhbmdlX3dob2xlID0gMTsKIApAQCAtMjc5NSw2ICsyODQ5LDM2IEBACiAJfSBlbHNlCiAJCWluZGV4ID0gd2JjLT5yYW5nZV9zdGFydCA+PiBQQUdFX0NBQ0hFX1NISUZUOwogCisJLyoKKwkgKiBUaGlzIHdvcmtzIGFyb3VuZCB0d28gZm9ybXMgb2Ygc3R1cGlkaXR5LiAgVGhlIGZpcnN0IGlzIGluCisJICogdGhlIHdyaXRlYmFjayBjb2RlLCB3aGljaCBjYXBzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBwYWdlcworCSAqIHdyaXR0ZW4gdG8gYmUgMTAyNCBwYWdlcy4gIFRoaXMgaXMgd3Jvbmcgb24gbXVsdGlwbGUKKwkgKiBsZXZlbHM7IGRpZmZlcmVudCBhcmNoaXRlY3R1ZXMgaGF2ZSBhIGRpZmZlcmVudCBwYWdlIHNpemUsCisJICogd2hpY2ggY2hhbmdlcyB0aGUgbWF4aW11bSBhbW91bnQgb2YgZGF0YSB3aGljaCBnZXRzCisJICogd3JpdHRlbi4gIFNlY29uZGx5LCA0IG1lZ2FieXRlcyBpcyB3YXkgdG9vIHNtYWxsLiAgWEZTCisJICogZm9yY2VzIHRoaXMgdmFsdWUgdG8gYmUgMTYgbWVnYWJ5dGVzIGJ5IG11bHRpcGx5aW5nCisJICogbnJfdG9fd3JpdGUgcGFyYW1ldGVyIGJ5IGZvdXIsIGFuZCB0aGVuIHJlbGllcyBvbiBpdHMKKwkgKiBhbGxvY2F0b3IgdG8gYWxsb2NhdGUgbGFyZ2VyIGV4dGVudHMgdG8gbWFrZSB0aGVtCisJICogY29udGlndW91cy4gIFVuZm9ydHVuYXRlbHkgdGhpcyBicmluZ3MgdXMgdG8gdGhlIHNlY29uZAorCSAqIHN0dXBpZGl0eSwgd2hpY2ggaXMgdGhhdCBleHQ0J3MgbWJhbGxvYyBjb2RlIG9ubHkgYWxsb2NhdGVzCisJICogYXQgbW9zdCAyMDQ4IGJsb2Nrcy4gIFNvIHdlIGZvcmNlIGNvbnRpZ3VvdXMgd3JpdGVzIHVwIHRvCisJICogdGhlIG51bWJlciBvZiBkaXJ0eSBibG9ja3MgaW4gdGhlIGlub2RlLCBvcgorCSAqIHNiaS0+bWF4X3dyaXRlYmFja19tYl9idW1wIHdoaWNoZXZlciBpcyBzbWFsbGVyLgorCSAqLworCW1heF9wYWdlcyA9IHNiaS0+c19tYXhfd3JpdGViYWNrX21iX2J1bXAgPDwgKDIwIC0gUEFHRV9DQUNIRV9TSElGVCk7CisJaWYgKCFyYW5nZV9jeWNsaWMgJiYgcmFuZ2Vfd2hvbGUpCisJCWRlc2lyZWRfbnJfdG9fd3JpdGUgPSB3YmMtPm5yX3RvX3dyaXRlICogODsKKwllbHNlCisJCWRlc2lyZWRfbnJfdG9fd3JpdGUgPSBleHQ0X251bV9kaXJ0eV9wYWdlcyhpbm9kZSwgaW5kZXgsCisJCQkJCQkJICAgbWF4X3BhZ2VzKTsKKwlpZiAoZGVzaXJlZF9ucl90b193cml0ZSA+IG1heF9wYWdlcykKKwkJZGVzaXJlZF9ucl90b193cml0ZSA9IG1heF9wYWdlczsKKworCWlmICh3YmMtPm5yX3RvX3dyaXRlIDwgZGVzaXJlZF9ucl90b193cml0ZSkgeworCQlucl90b193cml0ZWJ1bXAgPSBkZXNpcmVkX25yX3RvX3dyaXRlIC0gd2JjLT5ucl90b193cml0ZTsKKwkJd2JjLT5ucl90b193cml0ZSA9IGRlc2lyZWRfbnJfdG9fd3JpdGU7CisJfQorCiAJbXBkLndiYyA9IHdiYzsKIAltcGQuaW5vZGUgPSBtYXBwaW5nLT5ob3N0OwogCkBAIC0yODIyLDEwICsyOTA2LDkgQEAKIAkJaGFuZGxlID0gZXh0NF9qb3VybmFsX3N0YXJ0KGlub2RlLCBuZWVkZWRfYmxvY2tzKTsKIAkJaWYgKElTX0VSUihoYW5kbGUpKSB7CiAJCQlyZXQgPSBQVFJfRVJSKGhhbmRsZSk7Ci0JCQlwcmludGsoS0VSTl9DUklUICIlczogamJkMl9zdGFydDogIgorCQkJZXh0NF9tc2coaW5vZGUtPmlfc2IsIEtFUk5fQ1JJVCwgIiVzOiBqYmQyX3N0YXJ0OiAiCiAJCQkgICAgICAgIiVsZCBwYWdlcywgaW5vICVsdTsgZXJyICVkXG4iLCBfX2Z1bmNfXywKIAkJCQl3YmMtPm5yX3RvX3dyaXRlLCBpbm9kZS0+aV9pbm8sIHJldCk7Ci0JCQlkdW1wX3N0YWNrKCk7CiAJCQlnb3RvIG91dF93cml0ZXBhZ2VzOwogCQl9CiAKQEAgLTI4OTcsOSArMjk4MCwxMCBAQAogCQlnb3RvIHJldHJ5OwogCX0KIAlpZiAocGFnZXNfc2tpcHBlZCAhPSB3YmMtPnBhZ2VzX3NraXBwZWQpCi0JCXByaW50ayhLRVJOX0VNRVJHICJUaGlzIHNob3VsZCBub3QgaGFwcGVuIGxlYXZpbmcgJXMgIgotCQkJCSJ3aXRoIG5yX3RvX3dyaXRlID0gJWxkIHJldCA9ICVkXG4iLAotCQkJCV9fZnVuY19fLCB3YmMtPm5yX3RvX3dyaXRlLCByZXQpOworCQlleHQ0X21zZyhpbm9kZS0+aV9zYiwgS0VSTl9DUklULAorCQkJICJUaGlzIHNob3VsZCBub3QgaGFwcGVuIGxlYXZpbmcgJXMgIgorCQkJICJ3aXRoIG5yX3RvX3dyaXRlID0gJWxkIHJldCA9ICVkXG4iLAorCQkJIF9fZnVuY19fLCB3YmMtPm5yX3RvX3dyaXRlLCByZXQpOwogCiAJLyogVXBkYXRlIGluZGV4ICovCiAJaW5kZXggKz0gcGFnZXNfd3JpdHRlbjsKQEAgLTI5MTQsNyArMjk5OCw4IEBACiBvdXRfd3JpdGVwYWdlczoKIAlpZiAoIW5vX25yd3JpdGVfaW5kZXhfdXBkYXRlKQogCQl3YmMtPm5vX25yd3JpdGVfaW5kZXhfdXBkYXRlID0gMDsKLQl3YmMtPm5yX3RvX3dyaXRlIC09IG5yX3RvX3dyaXRlYnVtcDsKKwlpZiAod2JjLT5ucl90b193cml0ZSA+IG5yX3RvX3dyaXRlYnVtcCkKKwkJd2JjLT5ucl90b193cml0ZSAtPSBucl90b193cml0ZWJ1bXA7CiAJd2JjLT5yYW5nZV9zdGFydCA9IHJhbmdlX3N0YXJ0OwogCXRyYWNlX2V4dDRfZGFfd3JpdGVwYWdlc19yZXN1bHQoaW5vZGUsIHdiYywgcmV0LCBwYWdlc193cml0dGVuKTsKIAlyZXR1cm4gcmV0OwpAQCAtMzI3Miw2ICszMzU3LDggQEAKIH0KIAogLyoKKyAqIE9fRElSRUNUIGZvciBleHQzIChvciBpbmRpcmVjdCBtYXApIGJhc2VkIGZpbGVzCisgKgogICogSWYgdGhlIE9fRElSRUNUIHdyaXRlIHdpbGwgZXh0ZW5kIHRoZSBmaWxlIHRoZW4gYWRkIHRoaXMgaW5vZGUgdG8gdGhlCiAgKiBvcnBoYW4gbGlzdC4gIFNvIHJlY292ZXJ5IHdpbGwgdHJ1bmNhdGUgaXQgYmFjayB0byB0aGUgb3JpZ2luYWwgc2l6ZQogICogaWYgdGhlIG1hY2hpbmUgY3Jhc2hlcyBkdXJpbmcgdGhlIHdyaXRlLgpAQCAtMzI4MCw3ICszMzY3LDcgQEAKICAqIGNyYXNoZXMgdGhlbiBzdGFsZSBkaXNrIGRhdGEgX21heV8gYmUgZXhwb3NlZCBpbnNpZGUgdGhlIGZpbGUuIEJ1dCBjdXJyZW50CiAgKiBWRlMgY29kZSBmYWxscyBiYWNrIGludG8gYnVmZmVyZWQgcGF0aCBpbiB0aGF0IGNhc2Ugc28gd2UgYXJlIHNhZmUuCiAgKi8KLXN0YXRpYyBzc2l6ZV90IGV4dDRfZGlyZWN0X0lPKGludCBydywgc3RydWN0IGtpb2NiICppb2NiLAorc3RhdGljIHNzaXplX3QgZXh0NF9pbmRfZGlyZWN0X0lPKGludCBydywgc3RydWN0IGtpb2NiICppb2NiLAogCQkJICAgICAgY29uc3Qgc3RydWN0IGlvdmVjICppb3YsIGxvZmZfdCBvZmZzZXQsCiAJCQkgICAgICB1bnNpZ25lZCBsb25nIG5yX3NlZ3MpCiB7CkBAIC0zMjkxLDYgKzMzNzgsNyBAQAogCXNzaXplX3QgcmV0OwogCWludCBvcnBoYW4gPSAwOwogCXNpemVfdCBjb3VudCA9IGlvdl9sZW5ndGgoaW92LCBucl9zZWdzKTsKKwlpbnQgcmV0cmllcyA9IDA7CiAKIAlpZiAocncgPT0gV1JJVEUpIHsKIAkJbG9mZl90IGZpbmFsX3NpemUgPSBvZmZzZXQgKyBjb3VudDsKQEAgLTMzMTMsOSArMzQwMSwxMiBAQAogCQl9CiAJfQogCityZXRyeToKIAlyZXQgPSBibG9ja2Rldl9kaXJlY3RfSU8ocncsIGlvY2IsIGlub2RlLCBpbm9kZS0+aV9zYi0+c19iZGV2LCBpb3YsCiAJCQkJIG9mZnNldCwgbnJfc2VncywKIAkJCQkgZXh0NF9nZXRfYmxvY2ssIE5VTEwpOworCWlmIChyZXQgPT0gLUVOT1NQQyAmJiBleHQ0X3Nob3VsZF9yZXRyeV9hbGxvYyhpbm9kZS0+aV9zYiwgJnJldHJpZXMpKQorCQlnb3RvIHJldHJ5OwogCiAJaWYgKG9ycGhhbikgewogCQlpbnQgZXJyOwpAQCAtMzM1NCw2ICszNDQ1LDM1OSBAQAogCXJldHVybiByZXQ7CiB9CiAKKy8qIE1heGltdW0gbnVtYmVyIG9mIGJsb2NrcyB3ZSBtYXAgZm9yIGRpcmVjdCBJTyBhdCBvbmNlLiAqLworCitzdGF0aWMgaW50IGV4dDRfZ2V0X2Jsb2NrX2Rpb193cml0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzZWN0b3JfdCBpYmxvY2ssCisJCSAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmhfcmVzdWx0LCBpbnQgY3JlYXRlKQoreworCWhhbmRsZV90ICpoYW5kbGUgPSBOVUxMOworCWludCByZXQgPSAwOworCXVuc2lnbmVkIG1heF9ibG9ja3MgPSBiaF9yZXN1bHQtPmJfc2l6ZSA+PiBpbm9kZS0+aV9ibGtiaXRzOworCWludCBkaW9fY3JlZGl0czsKKworCWV4dDRfZGVidWcoImV4dDRfZ2V0X2Jsb2NrX2Rpb193cml0ZTogaW5vZGUgJWx1LCBjcmVhdGUgZmxhZyAlZFxuIiwKKwkJICAgaW5vZGUtPmlfaW5vLCBjcmVhdGUpOworCS8qCisJICogRElPIFZGUyBjb2RlIHBhc3NlcyBjcmVhdGUgPSAwIGZsYWcgZm9yIHdyaXRlIHRvCisJICogdGhlIG1pZGRsZSBvZiBmaWxlLiBJdCBkb2VzIHRoaXMgdG8gYXZvaWQgYmxvY2sKKwkgKiBhbGxvY2F0aW9uIGZvciBob2xlcywgdG8gcHJldmVudCBleHBvc2Ugc3RhbGUgZGF0YQorCSAqIG91dCB3aGVuIHRoZXJlIGlzIHBhcmFsbGVsIGJ1ZmZlcmVkIHJlYWQgKHdoaWNoIGRvZXMKKwkgKiBub3QgaG9sZCB0aGUgaV9tdXRleCBsb2NrKSB3aGlsZSBkaXJlY3QgSU8gd3JpdGUgaGFzCisJICogbm90IGNvbXBsZXRlZC4gRElPIHJlcXVlc3Qgb24gaG9sZXMgZmluYWxseSBmYWxscyBiYWNrCisJICogdG8gYnVmZmVyZWQgSU8gZm9yIHRoaXMgcmVhc29uLgorCSAqCisJICogRm9yIGV4dDQgZXh0ZW50IGJhc2VkIGZpbGUsIHNpbmNlIHdlIHN1cHBvcnQgZmFsbG9jYXRlLAorCSAqIG5ldyBhbGxvY2F0ZWQgZXh0ZW50IGFzIHVuaW5pdGlhbGl6ZWQsIGZvciBob2xlcywgd2UKKwkgKiBjb3VsZCBmYWxsb2NhdGUgYmxvY2tzIGZvciBob2xlcywgdGh1cyBwYXJhbGxlbAorCSAqIGJ1ZmZlcmVkIElPIHJlYWQgd2lsbCB6ZXJvIG91dCB0aGUgcGFnZSB3aGVuIHJlYWQgb24KKwkgKiBhIGhvbGUgd2hpbGUgcGFyYWxsZWwgRElPIHdyaXRlIHRvIHRoZSBob2xlIGhhcyBub3QgY29tcGxldGVkLgorCSAqCisJICogd2hlbiB3ZSBjb21lIGhlcmUsIHdlIGtub3cgaXQncyBhIGRpcmVjdCBJTyB3cml0ZSB0bworCSAqIHRvIHRoZSBtaWRkbGUgb2YgZmlsZSAoPGlfc2l6ZSkKKwkgKiBzbyBpdCdzIHNhZmUgdG8gb3ZlcnJpZGUgdGhlIGNyZWF0ZSBmbGFnIGZyb20gVkZTLgorCSAqLworCWNyZWF0ZSA9IEVYVDRfR0VUX0JMT0NLU19ESU9fQ1JFQVRFX0VYVDsKKworCWlmIChtYXhfYmxvY2tzID4gRElPX01BWF9CTE9DS1MpCisJCW1heF9ibG9ja3MgPSBESU9fTUFYX0JMT0NLUzsKKwlkaW9fY3JlZGl0cyA9IGV4dDRfY2h1bmtfdHJhbnNfYmxvY2tzKGlub2RlLCBtYXhfYmxvY2tzKTsKKwloYW5kbGUgPSBleHQ0X2pvdXJuYWxfc3RhcnQoaW5vZGUsIGRpb19jcmVkaXRzKTsKKwlpZiAoSVNfRVJSKGhhbmRsZSkpIHsKKwkJcmV0ID0gUFRSX0VSUihoYW5kbGUpOworCQlnb3RvIG91dDsKKwl9CisJcmV0ID0gZXh0NF9nZXRfYmxvY2tzKGhhbmRsZSwgaW5vZGUsIGlibG9jaywgbWF4X2Jsb2NrcywgYmhfcmVzdWx0LAorCQkJICAgICAgY3JlYXRlKTsKKwlpZiAocmV0ID4gMCkgeworCQliaF9yZXN1bHQtPmJfc2l6ZSA9IChyZXQgPDwgaW5vZGUtPmlfYmxrYml0cyk7CisJCXJldCA9IDA7CisJfQorCWV4dDRfam91cm5hbF9zdG9wKGhhbmRsZSk7CitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgZXh0NF9mcmVlX2lvX2VuZChleHQ0X2lvX2VuZF90ICppbykKK3sKKwlCVUdfT04oIWlvKTsKKwlpcHV0KGlvLT5pbm9kZSk7CisJa2ZyZWUoaW8pOworfQorc3RhdGljIHZvaWQgZHVtcF9haW9fZGlvX2xpc3Qoc3RydWN0IGlub2RlICogaW5vZGUpCit7CisjaWZkZWYJRVhUNF9ERUJVRworCXN0cnVjdCBsaXN0X2hlYWQgKmN1ciwgKmJlZm9yZSwgKmFmdGVyOworCWV4dDRfaW9fZW5kX3QgKmlvLCAqaW8wLCAqaW8xOworCisJaWYgKGxpc3RfZW1wdHkoJkVYVDRfSShpbm9kZSktPmlfYWlvX2Rpb19jb21wbGV0ZV9saXN0KSl7CisJCWV4dDRfZGVidWcoImlub2RlICVsdSBhaW8gZGlvIGxpc3QgaXMgZW1wdHlcbiIsIGlub2RlLT5pX2lubyk7CisJCXJldHVybjsKKwl9CisKKwlleHQ0X2RlYnVnKCJEdW1wIGlub2RlICVsdSBhaW9fZGlvX2NvbXBsZXRlZF9JTyBsaXN0IFxuIiwgaW5vZGUtPmlfaW5vKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGlvLCAmRVhUNF9JKGlub2RlKS0+aV9haW9fZGlvX2NvbXBsZXRlX2xpc3QsIGxpc3QpeworCQljdXIgPSAmaW8tPmxpc3Q7CisJCWJlZm9yZSA9IGN1ci0+cHJldjsKKwkJaW8wID0gY29udGFpbmVyX29mKGJlZm9yZSwgZXh0NF9pb19lbmRfdCwgbGlzdCk7CisJCWFmdGVyID0gY3VyLT5uZXh0OworCQlpbzEgPSBjb250YWluZXJfb2YoYWZ0ZXIsIGV4dDRfaW9fZW5kX3QsIGxpc3QpOworCisJCWV4dDRfZGVidWcoImlvIDB4JXAgZnJvbSBpbm9kZSAlbHUscHJldiAweCVwLG5leHQgMHglcFxuIiwKKwkJCSAgICBpbywgaW5vZGUtPmlfaW5vLCBpbzAsIGlvMSk7CisJfQorI2VuZGlmCit9CisKKy8qCisgKiBjaGVjayBhIHJhbmdlIG9mIHNwYWNlIGFuZCBjb252ZXJ0IHVud3JpdHRlbiBleHRlbnRzIHRvIHdyaXR0ZW4uCisgKi8KK3N0YXRpYyBpbnQgZXh0NF9lbmRfYWlvX2Rpb19ub2xvY2soZXh0NF9pb19lbmRfdCAqaW8pCit7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGlvLT5pbm9kZTsKKwlsb2ZmX3Qgb2Zmc2V0ID0gaW8tPm9mZnNldDsKKwlzaXplX3Qgc2l6ZSA9IGlvLT5zaXplOworCWludCByZXQgPSAwOworCisJZXh0NF9kZWJ1ZygiZW5kX2Fpb19kaW9fb25sb2NrOiBpbyAweCVwIGZyb20gaW5vZGUgJWx1LGxpc3QtPm5leHQgMHglcCwiCisJCSAgICJsaXN0LT5wcmV2IDB4JXBcbiIsCisJICAgICAgICAgICBpbywgaW5vZGUtPmlfaW5vLCBpby0+bGlzdC5uZXh0LCBpby0+bGlzdC5wcmV2KTsKKworCWlmIChsaXN0X2VtcHR5KCZpby0+bGlzdCkpCisJCXJldHVybiByZXQ7CisKKwlpZiAoaW8tPmZsYWcgIT0gRElPX0FJT19VTldSSVRURU4pCisJCXJldHVybiByZXQ7CisKKwlpZiAob2Zmc2V0ICsgc2l6ZSA8PSBpX3NpemVfcmVhZChpbm9kZSkpCisJCXJldCA9IGV4dDRfY29udmVydF91bndyaXR0ZW5fZXh0ZW50cyhpbm9kZSwgb2Zmc2V0LCBzaXplKTsKKworCWlmIChyZXQgPCAwKSB7CisJCXByaW50ayhLRVJOX0VNRVJHICIlczogZmFpbGVkIHRvIGNvbnZlcnQgdW53cml0dGVuIgorCQkJImV4dGVudHMgdG8gd3JpdHRlbiBleHRlbnRzLCBlcnJvciBpcyAlZCIKKwkJCSIgaW8gaXMgc3RpbGwgb24gaW5vZGUgJWx1IGFpbyBkaW8gbGlzdFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgX19mdW5jX18sIHJldCwgaW5vZGUtPmlfaW5vKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwkvKiBjbGVhciB0aGUgRElPIEFJTyB1bndyaXR0ZW4gZmxhZyAqLworCWlvLT5mbGFnID0gMDsKKwlyZXR1cm4gcmV0OworfQorLyoKKyAqIHdvcmsgb24gY29tcGxldGVkIGFpbyBkaW8gSU8sIHRvIGNvbnZlcnQgdW53cml0dGVuIGV4dGVudHMgdG8gZXh0ZW50cworICovCitzdGF0aWMgdm9pZCBleHQ0X2VuZF9haW9fZGlvX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCWV4dDRfaW9fZW5kX3QgKmlvICA9IGNvbnRhaW5lcl9vZih3b3JrLCBleHQ0X2lvX2VuZF90LCB3b3JrKTsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gaW8tPmlub2RlOworCWludCByZXQgPSAwOworCisJbXV0ZXhfbG9jaygmaW5vZGUtPmlfbXV0ZXgpOworCXJldCA9IGV4dDRfZW5kX2Fpb19kaW9fbm9sb2NrKGlvKTsKKwlpZiAocmV0ID49IDApIHsKKwkJaWYgKCFsaXN0X2VtcHR5KCZpby0+bGlzdCkpCisJCQlsaXN0X2RlbF9pbml0KCZpby0+bGlzdCk7CisJCWV4dDRfZnJlZV9pb19lbmQoaW8pOworCX0KKwltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKK30KKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIGV4dDRfc3luY19maWxlKCkuCisgKgorICogV2hlbiBBSU8gRElPIElPIGlzIGNvbXBsZXRlZCwgdGhlIHdvcmsgdG8gY29udmVydCB1bndyaXR0ZW4KKyAqIGV4dGVudHMgdG8gd3JpdHRlbiBpcyBxdWV1ZWQgb24gd29ya3F1ZXVlIGJ1dCBtYXkgbm90IGdldCBpbW1lZGlhdGVseQorICogc2NoZWR1bGVkLiBXaGVuIGZzeW5jIGlzIGNhbGxlZCwgd2UgbmVlZCB0byBlbnN1cmUgdGhlCisgKiBjb252ZXJzaW9uIGlzIGNvbXBsZXRlIGJlZm9yZSBmc3luYyByZXR1cm5zLgorICogVGhlIGlub2RlIGtlZXBzIHRyYWNrIG9mIGEgbGlzdCBvZiBjb21wbGV0ZWQgQUlPIGZyb20gRElPIHBhdGgKKyAqIHRoYXQgbWlnaHQgbmVlZHMgdG8gZG8gdGhlIGNvbnZlcnNpb24uIFRoaXMgZnVuY3Rpb24gd2Fsa3MgdGhyb3VnaAorICogdGhlIGxpc3QgYW5kIGNvbnZlcnQgdGhlIHJlbGF0ZWQgdW53cml0dGVuIGV4dGVudHMgdG8gd3JpdHRlbi4KKyAqLworaW50IGZsdXNoX2Fpb19kaW9fY29tcGxldGVkX0lPKHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJZXh0NF9pb19lbmRfdCAqaW87CisJaW50IHJldCA9IDA7CisJaW50IHJldDIgPSAwOworCisJaWYgKGxpc3RfZW1wdHkoJkVYVDRfSShpbm9kZSktPmlfYWlvX2Rpb19jb21wbGV0ZV9saXN0KSkKKwkJcmV0dXJuIHJldDsKKworCWR1bXBfYWlvX2Rpb19saXN0KGlub2RlKTsKKwl3aGlsZSAoIWxpc3RfZW1wdHkoJkVYVDRfSShpbm9kZSktPmlfYWlvX2Rpb19jb21wbGV0ZV9saXN0KSl7CisJCWlvID0gbGlzdF9lbnRyeShFWFQ0X0koaW5vZGUpLT5pX2Fpb19kaW9fY29tcGxldGVfbGlzdC5uZXh0LAorCQkJCWV4dDRfaW9fZW5kX3QsIGxpc3QpOworCQkvKgorCQkgKiBDYWxsaW5nIGV4dDRfZW5kX2Fpb19kaW9fbm9sb2NrKCkgdG8gY29udmVydCBjb21wbGV0ZWQKKwkJICogSU8gdG8gd3JpdHRlbi4KKwkJICoKKwkJICogV2hlbiBleHQ0X3N5bmNfZmlsZSgpIGlzIGNhbGxlZCwgcnVuX3F1ZXVlKCkgbWF5IGFscmVhZHkKKwkJICogYWJvdXQgdG8gZmx1c2ggdGhlIHdvcmsgY29ycmVzcG9uZGluZyB0byB0aGlzIGlvIHN0cnVjdHVyZS4KKwkJICogSXQgd2lsbCBiZSB1cHNldCBpZiBpdCBmb3VuZHMgdGhlIGlvIHN0cnVjdHVyZSByZWxhdGVkCisJCSAqIHRvIHRoZSB3b3JrLXRvLWJlIHNjaGVkdWxlIGlzIGZyZWVkLgorCQkgKgorCQkgKiBUaHVzIHdlIG5lZWQgdG8ga2VlcCB0aGUgaW8gc3RydWN0dXJlIHN0aWxsIHZhbGlkIGhlcmUgYWZ0ZXIKKwkJICogY29udmVydGlvbiBmaW5pc2hlZC4gVGhlIGlvIHN0cnVjdHVyZSBoYXMgYSBmbGFnIHRvCisJCSAqIGF2b2lkIGRvdWJsZSBjb252ZXJ0aW5nIGZyb20gYm90aCBmc3luYyBhbmQgYmFja2dyb3VuZCB3b3JrCisJCSAqIHF1ZXVlIHdvcmsuCisJCSAqLworCQlyZXQgPSBleHQ0X2VuZF9haW9fZGlvX25vbG9jayhpbyk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0MiA9IHJldDsKKwkJZWxzZQorCQkJbGlzdF9kZWxfaW5pdCgmaW8tPmxpc3QpOworCX0KKwlyZXR1cm4gKHJldDIgPCAwKSA/IHJldDIgOiAwOworfQorCitzdGF0aWMgZXh0NF9pb19lbmRfdCAqZXh0NF9pbml0X2lvX2VuZCAoc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlleHQ0X2lvX2VuZF90ICppbyA9IE5VTEw7CisKKwlpbyA9IGttYWxsb2Moc2l6ZW9mKCppbyksIEdGUF9OT0ZTKTsKKworCWlmIChpbykgeworCQlpZ3JhYihpbm9kZSk7CisJCWlvLT5pbm9kZSA9IGlub2RlOworCQlpby0+ZmxhZyA9IDA7CisJCWlvLT5vZmZzZXQgPSAwOworCQlpby0+c2l6ZSA9IDA7CisJCWlvLT5lcnJvciA9IDA7CisJCUlOSVRfV09SSygmaW8tPndvcmssIGV4dDRfZW5kX2Fpb19kaW9fd29yayk7CisJCUlOSVRfTElTVF9IRUFEKCZpby0+bGlzdCk7CisJfQorCisJcmV0dXJuIGlvOworfQorCitzdGF0aWMgdm9pZCBleHQ0X2VuZF9pb19kaW8oc3RydWN0IGtpb2NiICppb2NiLCBsb2ZmX3Qgb2Zmc2V0LAorCQkJICAgIHNzaXplX3Qgc2l6ZSwgdm9pZCAqcHJpdmF0ZSkKK3sKKyAgICAgICAgZXh0NF9pb19lbmRfdCAqaW9fZW5kID0gaW9jYi0+cHJpdmF0ZTsKKwlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqd3E7CisKKwlleHRfZGVidWcoImV4dDRfZW5kX2lvX2RpbygpOiBpb19lbmQgMHglcCIKKwkJICAiZm9yIGlub2RlICVsdSwgaW9jYiAweCVwLCBvZmZzZXQgJWxsdSwgc2l6ZSAlbGx1XG4iLAorIAkJICBpb2NiLT5wcml2YXRlLCBpb19lbmQtPmlub2RlLT5pX2lubywgaW9jYiwgb2Zmc2V0LAorCQkgIHNpemUpOworCS8qIGlmIG5vdCBhc3luYyBkaXJlY3QgSU8gb3IgZGlvIHdpdGggMCBieXRlcyB3cml0ZSwganVzdCByZXR1cm4gKi8KKwlpZiAoIWlvX2VuZCB8fCAhc2l6ZSkKKwkJcmV0dXJuOworCisJLyogaWYgbm90IGFpbyBkaW8gd2l0aCB1bndyaXR0ZW4gZXh0ZW50cywganVzdCBmcmVlIGlvIGFuZCByZXR1cm4gKi8KKwlpZiAoaW9fZW5kLT5mbGFnICE9IERJT19BSU9fVU5XUklUVEVOKXsKKwkJZXh0NF9mcmVlX2lvX2VuZChpb19lbmQpOworCQlpb2NiLT5wcml2YXRlID0gTlVMTDsKKwkJcmV0dXJuOworCX0KKworCWlvX2VuZC0+b2Zmc2V0ID0gb2Zmc2V0OworCWlvX2VuZC0+c2l6ZSA9IHNpemU7CisJd3EgPSBFWFQ0X1NCKGlvX2VuZC0+aW5vZGUtPmlfc2IpLT5kaW9fdW53cml0dGVuX3dxOworCisJLyogcXVldWUgdGhlIHdvcmsgdG8gY29udmVydCB1bndyaXR0ZW4gZXh0ZW50cyB0byB3cml0dGVuICovCisJcXVldWVfd29yayh3cSwgJmlvX2VuZC0+d29yayk7CisKKwkvKiBBZGQgdGhlIGlvX2VuZCB0byBwZXItaW5vZGUgY29tcGxldGVkIGFpbyBkaW8gbGlzdCovCisJbGlzdF9hZGRfdGFpbCgmaW9fZW5kLT5saXN0LAorCQkgJkVYVDRfSShpb19lbmQtPmlub2RlKS0+aV9haW9fZGlvX2NvbXBsZXRlX2xpc3QpOworCWlvY2ItPnByaXZhdGUgPSBOVUxMOworfQorLyoKKyAqIEZvciBleHQ0IGV4dGVudCBmaWxlcywgZXh0NCB3aWxsIGRvIGRpcmVjdC1pbyB3cml0ZSB0byBob2xlcywKKyAqIHByZWFsbG9jYXRlZCBleHRlbnRzLCBhbmQgdGhvc2Ugd3JpdGUgZXh0ZW5kIHRoZSBmaWxlLCBubyBuZWVkIHRvCisgKiBmYWxsIGJhY2sgdG8gYnVmZmVyZWQgSU8uCisgKgorICogRm9yIGhvbGVzLCB3ZSBmYWxsb2NhdGUgdGhvc2UgYmxvY2tzLCBtYXJrIHRoZW0gYXMgdW5pbnRpYWxpemVkCisgKiBJZiB0aG9zZSBibG9ja3Mgd2VyZSBwcmVhbGxvY2F0ZWQsIHdlIG1hcmsgc3VyZSB0aGV5IGFyZSBzcGxpdGVkLCBidXQKKyAqIHN0aWxsIGtlZXAgdGhlIHJhbmdlIHRvIHdyaXRlIGFzIHVuaW50aWFsaXplZC4KKyAqCisgKiBUaGUgdW53cnJpdHRlbiBleHRlbnRzIHdpbGwgYmUgY29udmVydGVkIHRvIHdyaXR0ZW4gd2hlbiBESU8gaXMgY29tcGxldGVkLgorICogRm9yIGFzeW5jIGRpcmVjdCBJTywgc2luY2UgdGhlIElPIG1heSBzdGlsbCBwZW5kaW5nIHdoZW4gcmV0dXJuLCB3ZQorICogc2V0IHVwIGFuIGVuZF9pbyBjYWxsIGJhY2sgZnVuY3Rpb24sIHdoaWNoIHdpbGwgZG8gdGhlIGNvbnZlcnRpb24KKyAqIHdoZW4gYXN5bmMgZGlyZWN0IElPIGNvbXBsZXRlZC4KKyAqCisgKiBJZiB0aGUgT19ESVJFQ1Qgd3JpdGUgd2lsbCBleHRlbmQgdGhlIGZpbGUgdGhlbiBhZGQgdGhpcyBpbm9kZSB0byB0aGUKKyAqIG9ycGhhbiBsaXN0LiAgU28gcmVjb3Zlcnkgd2lsbCB0cnVuY2F0ZSBpdCBiYWNrIHRvIHRoZSBvcmlnaW5hbCBzaXplCisgKiBpZiB0aGUgbWFjaGluZSBjcmFzaGVzIGR1cmluZyB0aGUgd3JpdGUuCisgKgorICovCitzdGF0aWMgc3NpemVfdCBleHQ0X2V4dF9kaXJlY3RfSU8oaW50IHJ3LCBzdHJ1Y3Qga2lvY2IgKmlvY2IsCisJCQkgICAgICBjb25zdCBzdHJ1Y3QgaW92ZWMgKmlvdiwgbG9mZl90IG9mZnNldCwKKwkJCSAgICAgIHVuc2lnbmVkIGxvbmcgbnJfc2VncykKK3sKKwlzdHJ1Y3QgZmlsZSAqZmlsZSA9IGlvY2ItPmtpX2ZpbHA7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtPmZfbWFwcGluZy0+aG9zdDsKKwlzc2l6ZV90IHJldDsKKwlzaXplX3QgY291bnQgPSBpb3ZfbGVuZ3RoKGlvdiwgbnJfc2Vncyk7CisKKwlsb2ZmX3QgZmluYWxfc2l6ZSA9IG9mZnNldCArIGNvdW50OworCWlmIChydyA9PSBXUklURSAmJiBmaW5hbF9zaXplIDw9IGlub2RlLT5pX3NpemUpIHsKKwkJLyoKKyAJCSAqIFdlIGNvdWxkIGRpcmVjdCB3cml0ZSB0byBob2xlcyBhbmQgZmFsbG9jYXRlLgorCQkgKgorIAkJICogQWxsb2NhdGVkIGJsb2NrcyB0byBmaWxsIHRoZSBob2xlIGFyZSBtYXJrZWQgYXMgdW5pbml0aWFsaXplZAorIAkJICogdG8gcHJldmVudCBwYXJhbGVsIGJ1ZmZlcmVkIHJlYWQgdG8gZXhwb3NlIHRoZSBzdGFsZSBkYXRhCisgCQkgKiBiZWZvcmUgRElPIGNvbXBsZXRlIHRoZSBkYXRhIElPLgorCQkgKgorIAkJICogQXMgdG8gcHJldmlvdXNseSBmYWxsb2NhdGVkIGV4dGVudHMsIGV4dDQgZ2V0X2Jsb2NrCisgCQkgKiB3aWxsIGp1c3Qgc2ltcGx5IG1hcmsgdGhlIGJ1ZmZlciBtYXBwZWQgYnV0IHN0aWxsCisgCQkgKiBrZWVwIHRoZSBleHRlbnRzIHVuaW5pdGlhbGl6ZWQuCisgCQkgKgorCQkgKiBmb3Igbm9uIEFJTyBjYXNlLCB3ZSB3aWxsIGNvbnZlcnQgdGhvc2UgdW53cml0dGVuIGV4dGVudHMKKwkJICogdG8gd3JpdHRlbiBhZnRlciByZXR1cm4gYmFjayBmcm9tIGJsb2NrZGV2X2RpcmVjdF9JTy4KKwkJICoKKwkJICogZm9yIGFzeW5jIERJTywgdGhlIGNvbnZlcnNpb24gbmVlZHMgdG8gYmUgZGVmZXJlZCB3aGVuCisJCSAqIHRoZSBJTyBpcyBjb21wbGV0ZWQuIFRoZSBleHQ0IGVuZF9pbyBjYWxsYmFjayBmdW5jdGlvbgorCQkgKiB3aWxsIGJlIGNhbGxlZCB0byB0YWtlIGNhcmUgb2YgdGhlIGNvbnZlcnNpb24gd29yay4KKwkJICogSGVyZSBmb3IgYXN5bmMgY2FzZSwgd2UgYWxsb2NhdGUgYW4gaW9fZW5kIHN0cnVjdHVyZSB0bworCQkgKiBob29rIHRvIHRoZSBpb2NiLgorIAkJICovCisJCWlvY2ItPnByaXZhdGUgPSBOVUxMOworCQlFWFQ0X0koaW5vZGUpLT5jdXJfYWlvX2RpbyA9IE5VTEw7CisJCWlmICghaXNfc3luY19raW9jYihpb2NiKSkgeworCQkJaW9jYi0+cHJpdmF0ZSA9IGV4dDRfaW5pdF9pb19lbmQoaW5vZGUpOworCQkJaWYgKCFpb2NiLT5wcml2YXRlKQorCQkJCXJldHVybiAtRU5PTUVNOworCQkJLyoKKwkJCSAqIHdlIHNhdmUgdGhlIGlvIHN0cnVjdHVyZSBmb3IgY3VycmVudCBhc3luYworCQkJICogZGlyZWN0IElPLCBzbyB0aGF0IGxhdGVyIGV4dDRfZ2V0X2Jsb2NrcygpCisJCQkgKiBjb3VsZCBmbGFnIHRoZSBpbyBzdHJ1Y3R1cmUgd2hldGhlciB0aGVyZQorCQkJICogaXMgYSB1bndyaXR0ZW4gZXh0ZW50cyBuZWVkcyB0byBiZSBjb252ZXJ0ZWQKKwkJCSAqIHdoZW4gSU8gaXMgY29tcGxldGVkLgorCQkJICovCisJCQlFWFQ0X0koaW5vZGUpLT5jdXJfYWlvX2RpbyA9IGlvY2ItPnByaXZhdGU7CisJCX0KKworCQlyZXQgPSBibG9ja2Rldl9kaXJlY3RfSU8ocncsIGlvY2IsIGlub2RlLAorCQkJCQkgaW5vZGUtPmlfc2ItPnNfYmRldiwgaW92LAorCQkJCQkgb2Zmc2V0LCBucl9zZWdzLAorCQkJCQkgZXh0NF9nZXRfYmxvY2tfZGlvX3dyaXRlLAorCQkJCQkgZXh0NF9lbmRfaW9fZGlvKTsKKwkJaWYgKGlvY2ItPnByaXZhdGUpCisJCQlFWFQ0X0koaW5vZGUpLT5jdXJfYWlvX2RpbyA9IE5VTEw7CisJCS8qCisJCSAqIFRoZSBpb19lbmQgc3RydWN0dXJlIHRha2VzIGEgcmVmZXJlbmNlIHRvIHRoZSBpbm9kZSwKKwkJICogdGhhdCBzdHJ1Y3R1cmUgbmVlZHMgdG8gYmUgZGVzdHJveWVkIGFuZCB0aGUKKwkJICogcmVmZXJlbmNlIHRvIHRoZSBpbm9kZSBuZWVkIHRvIGJlIGRyb3BwZWQsIHdoZW4gSU8gaXMKKwkJICogY29tcGxldGUsIGV2ZW4gd2l0aCAwIGJ5dGUgd3JpdGUsIG9yIGZhaWxlZC4KKwkJICoKKwkJICogSW4gdGhlIHN1Y2Nlc3NmdWwgQUlPIERJTyBjYXNlLCB0aGUgaW9fZW5kIHN0cnVjdHVyZSB3aWxsIGJlCisJCSAqIGRlc2N0cm95ZWQgYW5kIHRoZSByZWZlcmVuY2UgdG8gdGhlIGlub2RlIHdpbGwgYmUgZHJvcHBlZAorCQkgKiBhZnRlciB0aGUgZW5kX2lvIGNhbGwgYmFjayBmdW5jdGlvbiBpcyBjYWxsZWQuCisJCSAqCisJCSAqIEluIHRoZSBjYXNlIHRoZXJlIGlzIDAgYnl0ZSB3cml0ZSwgb3IgZXJyb3IgY2FzZSwgc2luY2UKKwkJICogVkZTIGRpcmVjdCBJTyB3b24ndCBpbnZva2UgdGhlIGVuZF9pbyBjYWxsIGJhY2sgZnVuY3Rpb24sCisJCSAqIHdlIG5lZWQgdG8gZnJlZSB0aGUgZW5kX2lvIHN0cnVjdHVyZSBoZXJlLgorCQkgKi8KKwkJaWYgKHJldCAhPSAtRUlPQ0JRVUVVRUQgJiYgcmV0IDw9IDAgJiYgaW9jYi0+cHJpdmF0ZSkgeworCQkJZXh0NF9mcmVlX2lvX2VuZChpb2NiLT5wcml2YXRlKTsKKwkJCWlvY2ItPnByaXZhdGUgPSBOVUxMOworCQl9IGVsc2UgaWYgKHJldCA+IDApCisJCQkvKgorCQkJICogZm9yIG5vbiBBSU8gY2FzZSwgc2luY2UgdGhlIElPIGlzIGFscmVhZHkKKwkJCSAqIGNvbXBsZXRlZCwgd2UgY291bGQgZG8gdGhlIGNvbnZlcnRpb24gcmlnaHQgaGVyZQorCQkJICovCisJCQlyZXQgPSBleHQ0X2NvbnZlcnRfdW53cml0dGVuX2V4dGVudHMoaW5vZGUsCisJCQkJCQkJCW9mZnNldCwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwkvKiBmb3Igd3JpdGUgdGhlIHRoZSBlbmQgb2YgZmlsZSBjYXNlLCB3ZSBmYWxsIGJhY2sgdG8gb2xkIHdheSAqLworCXJldHVybiBleHQ0X2luZF9kaXJlY3RfSU8ocncsIGlvY2IsIGlvdiwgb2Zmc2V0LCBucl9zZWdzKTsKK30KKworc3RhdGljIHNzaXplX3QgZXh0NF9kaXJlY3RfSU8oaW50IHJ3LCBzdHJ1Y3Qga2lvY2IgKmlvY2IsCisJCQkgICAgICBjb25zdCBzdHJ1Y3QgaW92ZWMgKmlvdiwgbG9mZl90IG9mZnNldCwKKwkJCSAgICAgIHVuc2lnbmVkIGxvbmcgbnJfc2VncykKK3sKKwlzdHJ1Y3QgZmlsZSAqZmlsZSA9IGlvY2ItPmtpX2ZpbHA7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtPmZfbWFwcGluZy0+aG9zdDsKKworCWlmIChFWFQ0X0koaW5vZGUpLT5pX2ZsYWdzICYgRVhUNF9FWFRFTlRTX0ZMKQorCQlyZXR1cm4gZXh0NF9leHRfZGlyZWN0X0lPKHJ3LCBpb2NiLCBpb3YsIG9mZnNldCwgbnJfc2Vncyk7CisKKwlyZXR1cm4gZXh0NF9pbmRfZGlyZWN0X0lPKHJ3LCBpb2NiLCBpb3YsIG9mZnNldCwgbnJfc2Vncyk7Cit9CisKIC8qCiAgKiBQYWdlcyBjYW4gYmUgbWFya2VkIGRpcnR5IGNvbXBsZXRlbHkgYXN5bmNocm9ub3VzbHkgZnJvbSBleHQ0J3Mgam91cm5hbGxpbmcKICAqIGFjdGl2aXR5LiAgQnkgZmlsZW1hcF9zeW5jX3B0ZSgpLCB0cnlfdG9fdW5tYXBfb25lKCksIGV0Yy4gIFdlIGNhbm5vdCBkbwpAQCAtNDU1MSw4ICs0OTk1LDcgQEAKICAqLwogc3RhdGljIGludCBleHQ0X2RvX3VwZGF0ZV9pbm9kZShoYW5kbGVfdCAqaGFuZGxlLAogCQkJCXN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCQkJc3RydWN0IGV4dDRfaWxvYyAqaWxvYywKLQkJCQlpbnQgZG9fc3luYykKKwkJCQlzdHJ1Y3QgZXh0NF9pbG9jICppbG9jKQogewogCXN0cnVjdCBleHQ0X2lub2RlICpyYXdfaW5vZGUgPSBleHQ0X3Jhd19pbm9kZShpbG9jKTsKIAlzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvICplaSA9IEVYVDRfSShpbm9kZSk7CkBAIC00NjUzLDIyICs1MDk2LDEwIEBACiAJCXJhd19pbm9kZS0+aV9leHRyYV9pc2l6ZSA9IGNwdV90b19sZTE2KGVpLT5pX2V4dHJhX2lzaXplKTsKIAl9CiAKLQkvKgotCSAqIElmIHdlJ3JlIG5vdCB1c2luZyBhIGpvdXJuYWwgYW5kIHdlIHdlcmUgY2FsbGVkIGZyb20KLQkgKiBleHQ0X3dyaXRlX2lub2RlKCkgdG8gc3luYyB0aGUgaW5vZGUgKG1ha2luZyBkb19zeW5jIHRydWUpLAotCSAqIHdlIGNhbiBqdXN0IHVzZSBzeW5jX2RpcnR5X2J1ZmZlcigpIGRpcmVjdGx5IHRvIGRvIG91ciBkaXJ0eQotCSAqIHdvcmsuICBUZXN0aW5nIHNfam91cm5hbCBoZXJlIGlzIGEgYml0IHJlZHVuZGFudCBidXQgaXQncwotCSAqIHdvcnRoIGl0IHRvIGF2b2lkIHBvdGVudGlhbCBmdXR1cmUgdHJvdWJsZS4KLQkgKi8KLQlpZiAoRVhUNF9TQihpbm9kZS0+aV9zYiktPnNfam91cm5hbCA9PSBOVUxMICYmIGRvX3N5bmMpIHsKLQkJQlVGRkVSX1RSQUNFKGJoLCAiY2FsbCBzeW5jX2RpcnR5X2J1ZmZlciIpOwotCQlzeW5jX2RpcnR5X2J1ZmZlcihiaCk7Ci0JfSBlbHNlIHsKLQkJQlVGRkVSX1RSQUNFKGJoLCAiY2FsbCBleHQ0X2hhbmRsZV9kaXJ0eV9tZXRhZGF0YSIpOwotCQlyYyA9IGV4dDRfaGFuZGxlX2RpcnR5X21ldGFkYXRhKGhhbmRsZSwgaW5vZGUsIGJoKTsKLQkJaWYgKCFlcnIpCi0JCQllcnIgPSByYzsKLQl9CisJQlVGRkVSX1RSQUNFKGJoLCAiY2FsbCBleHQ0X2hhbmRsZV9kaXJ0eV9tZXRhZGF0YSIpOworCXJjID0gZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGEoaGFuZGxlLCBpbm9kZSwgYmgpOworCWlmICghZXJyKQorCQllcnIgPSByYzsKIAllaS0+aV9zdGF0ZSAmPSB+RVhUNF9TVEFURV9ORVc7CiAKIG91dF9icmVsc2U6CkBAIC00NzM2LDggKzUxNjcsMTYgQEAKIAkJZXJyID0gZXh0NF9nZXRfaW5vZGVfbG9jKGlub2RlLCAmaWxvYyk7CiAJCWlmIChlcnIpCiAJCQlyZXR1cm4gZXJyOwotCQllcnIgPSBleHQ0X2RvX3VwZGF0ZV9pbm9kZShFWFQ0X05PSk9VUk5BTF9IQU5ETEUsCi0JCQkJCSAgIGlub2RlLCAmaWxvYywgd2FpdCk7CisJCWlmICh3YWl0KQorCQkJc3luY19kaXJ0eV9idWZmZXIoaWxvYy5iaCk7CisJCWlmIChidWZmZXJfcmVxKGlsb2MuYmgpICYmICFidWZmZXJfdXB0b2RhdGUoaWxvYy5iaCkpIHsKKwkJCWV4dDRfZXJyb3IoaW5vZGUtPmlfc2IsIF9fZnVuY19fLAorCQkJCSAgICJJTyBlcnJvciBzeW5jaW5nIGlub2RlLCAiCisJCQkJICAgImlub2RlPSVsdSwgYmxvY2s9JWxsdSIsCisJCQkJICAgaW5vZGUtPmlfaW5vLAorCQkJCSAgICh1bnNpZ25lZCBsb25nIGxvbmcpaWxvYy5iaC0+Yl9ibG9ja25yKTsKKwkJCWVyciA9IC1FSU87CisJCX0KIAl9CiAJcmV0dXJuIGVycjsKIH0KQEAgLTUwMzMsNyArNTQ3Miw3IEBACiAJZ2V0X2JoKGlsb2MtPmJoKTsKIAogCS8qIGV4dDRfZG9fdXBkYXRlX2lub2RlKCkgZG9lcyBqYmQyX2pvdXJuYWxfZGlydHlfbWV0YWRhdGEgKi8KLQllcnIgPSBleHQ0X2RvX3VwZGF0ZV9pbm9kZShoYW5kbGUsIGlub2RlLCBpbG9jLCAwKTsKKwllcnIgPSBleHQ0X2RvX3VwZGF0ZV9pbm9kZShoYW5kbGUsIGlub2RlLCBpbG9jKTsKIAlwdXRfYmgoaWxvYy0+YmgpOwogCXJldHVybiBlcnI7CiB9CkBAIC01MTc3LDI3ICs1NjE2LDE0IEBACiAgKi8KIHZvaWQgZXh0NF9kaXJ0eV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewotCWhhbmRsZV90ICpjdXJyZW50X2hhbmRsZSA9IGV4dDRfam91cm5hbF9jdXJyZW50X2hhbmRsZSgpOwogCWhhbmRsZV90ICpoYW5kbGU7CiAKLQlpZiAoIWV4dDRfaGFuZGxlX3ZhbGlkKGN1cnJlbnRfaGFuZGxlKSkgewotCQlleHQ0X21hcmtfaW5vZGVfZGlydHkoY3VycmVudF9oYW5kbGUsIGlub2RlKTsKLQkJcmV0dXJuOwotCX0KLQogCWhhbmRsZSA9IGV4dDRfam91cm5hbF9zdGFydChpbm9kZSwgMik7CiAJaWYgKElTX0VSUihoYW5kbGUpKQogCQlnb3RvIG91dDsKLQlpZiAoY3VycmVudF9oYW5kbGUgJiYKLQkJY3VycmVudF9oYW5kbGUtPmhfdHJhbnNhY3Rpb24gIT0gaGFuZGxlLT5oX3RyYW5zYWN0aW9uKSB7Ci0JCS8qIFRoaXMgdGFzayBoYXMgYSB0cmFuc2FjdGlvbiBvcGVuIGFnYWluc3QgYSBkaWZmZXJlbnQgZnMgKi8KLQkJcHJpbnRrKEtFUk5fRU1FUkcgIiVzOiB0cmFuc2FjdGlvbnMgZG8gbm90IG1hdGNoIVxuIiwKLQkJICAgICAgIF9fZnVuY19fKTsKLQl9IGVsc2UgewotCQlqYmRfZGVidWcoNSwgIm1hcmtpbmcgZGlydHkuICBvdXRlciBoYW5kbGU9JXBcbiIsCi0JCQkJY3VycmVudF9oYW5kbGUpOwotCQlleHQ0X21hcmtfaW5vZGVfZGlydHkoaGFuZGxlLCBpbm9kZSk7Ci0JfQorCisJZXh0NF9tYXJrX2lub2RlX2RpcnR5KGhhbmRsZSwgaW5vZGUpOworCiAJZXh0NF9qb3VybmFsX3N0b3AoaGFuZGxlKTsKIG91dDoKIAlyZXR1cm47CmRpZmYgLS1naXQgYS9mcy9leHQ0L21iYWxsb2MuYyBiL2ZzL2V4dDQvbWJhbGxvYy5jCmluZGV4IGU5YzYxODkuLmJiYTEyODIgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvbWJhbGxvYy5jCisrKyBiL2ZzL2V4dDQvbWJhbGxvYy5jCkBAIC0yMDk2LDIwNyArMjA5Niw2IEBACiAJcmV0dXJuIGVycjsKIH0KIAotI2lmZGVmIEVYVDRfTUJfSElTVE9SWQotc3RydWN0IGV4dDRfbWJfcHJvY19zZXNzaW9uIHsKLQlzdHJ1Y3QgZXh0NF9tYl9oaXN0b3J5ICpoaXN0b3J5OwotCXN0cnVjdCBzdXBlcl9ibG9jayAqc2I7Ci0JaW50IHN0YXJ0OwotCWludCBtYXg7Ci19OwotCi1zdGF0aWMgdm9pZCAqZXh0NF9tYl9oaXN0b3J5X3NraXBfZW1wdHkoc3RydWN0IGV4dDRfbWJfcHJvY19zZXNzaW9uICpzLAotCQkJCQlzdHJ1Y3QgZXh0NF9tYl9oaXN0b3J5ICpocywKLQkJCQkJaW50IGZpcnN0KQotewotCWlmIChocyA9PSBzLT5oaXN0b3J5ICsgcy0+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+aV9pbm8sIGRvbm9yX2lub2RlLT5pX2lubyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwogCS8qIHByb3RlY3Qgb3JpZyBhbmQgZG9ub3IgYWdhaW5zdCBhIHRydW5jYXRlICovCiAJcmV0MSA9IG1leHRfaW5vZGVfZG91YmxlX2xvY2sob3JpZ19pbm9kZSwgZG9ub3JfaW5vZGUpOwogCWlmIChyZXQxIDwgMCkKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvbmFtZWkuYyBiL2ZzL2V4dDQvbmFtZWkuYwppbmRleCA0MmY4MWQyLi43YzhmZTgwIDEwMDY0NAotLS0gYS9mcy9leHQ0L25hbWVpLmMKKysrIGIvZnMvZXh0NC9uYW1laS5jCkBAIC0yMDc2LDcgKzIwNzYsOCBAQAogCXN0cnVjdCBleHQ0X2lsb2MgaWxvYzsKIAlpbnQgZXJyID0gMDsKIAotCWlmICghZXh0NF9oYW5kbGVfdmFsaWQoaGFuZGxlKSkKKwkvKiBleHQ0X2hhbmRsZV92YWxpZCgpIGFzc3VtZXMgYSB2YWxpZCBoYW5kbGVfdCBwb2ludGVyICovCisJaWYgKGhhbmRsZSAmJiAhZXh0NF9oYW5kbGVfdmFsaWQoaGFuZGxlKSkKIAkJcmV0dXJuIDA7CiAKIAltdXRleF9sb2NrKCZFWFQ0X1NCKGlub2RlLT5pX3NiKS0+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+IDI1NSkKIAkJCXJldHVybiAtRU5BTUVUT09MT05HOwogCiAJCW9wID0gJm91dG5hbWVbKm91dGxlbiAqIHNpemVvZih3Y2hhcl90KV07CmRpZmYgLS1naXQgYS9mcy9maWxlLmMgYi9mcy9maWxlLmMKaW5kZXggZjMxMzMxNC4uODdlMTI5MCAxMDA2NDQKLS0tIGEvZnMvZmlsZS5jCisrKyBiL2ZzL2ZpbGUuYwpAQCAtMTAsNiArMTAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC90aW1lLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KZGlmZiAtLWdpdCBhL2ZzL2ZzLXdyaXRlYmFjay5jIGIvZnMvZnMtd3JpdGViYWNrLmMKaW5kZXggOGUxZTVlMS4uOWQ1MzYwYyAxMDA2NDQKLS0tIGEvZnMvZnMtd3JpdGViYWNrLmMKKysrIGIvZnMvZnMtd3JpdGViYWNrLmMKQEAgLTQxLDggKzQxLDkgQEAKIAlsb25nIG5yX3BhZ2VzOwogCXN0cnVjdCBzdXBlcl9ibG9jayAqc2I7CiAJZW51bSB3cml0ZWJhY2tfc3luY19tb2RlcyBzeW5jX21vZGU7Ci0JaW50IGZvcl9rdXBkYXRlOwotCWludCByYW5nZV9jeWNsaWM7CisJaW50IGZvcl9rdXBkYXRlOjE7CisJaW50IHJhbmdlX2N5Y2xpYzoxOworCWludCBmb3JfYmFja2dyb3VuZDoxOwogfTsKIAogLyoKQEAgLTI0OSwxNCArMjUwLDI1IEBACiAgKiAgIGNvbXBsZXRpb24uIENhbGxlciBuZWVkIG5vdCBob2xkIHNiIHNfdW1vdW50IHNlbWFwaG9yZS4KICAqCiAgKi8KLXZvaWQgYmRpX3N0YXJ0X3dyaXRlYmFjayhzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyAqYmRpLCBsb25nIG5yX3BhZ2VzKQordm9pZCBiZGlfc3RhcnRfd3JpdGViYWNrKHN0cnVjdCBiYWNraW5nX2Rldl9pbmZvICpiZGksIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCisJCQkgbG9uZyBucl9wYWdlcykKIHsKIAlzdHJ1Y3Qgd2Jfd3JpdGViYWNrX2FyZ3MgYXJncyA9IHsKKwkJLnNiCQk9IHNiLAogCQkuc3luY19tb2RlCT0gV0JfU1lOQ19OT05FLAogCQkubnJfcGFnZXMJPSBucl9wYWdlcywKIAkJLnJhbmdlX2N5Y2xpYwk9IDEsCiAJfTsKIAorCS8qCisJICogV2UgdHJlYXQgQG5yX3BhZ2VzPTAgYXMgdGhlIHNwZWNpYWwgY2FzZSB0byBkbyBiYWNrZ3JvdW5kIHdyaXRlYmFjaywKKwkgKiBpZS4gdG8gc3luYyBwYWdlcyB1bnRpbCB0aGUgYmFja2dyb3VuZCBkaXJ0eSB0aHJlc2hvbGQgaXMgcmVhY2hlZC4KKwkgKi8KKwlpZiAoIW5yX3BhZ2VzKSB7CisJCWFyZ3MubnJfcGFnZXMgPSBMT05HX01BWDsKKwkJYXJncy5mb3JfYmFja2dyb3VuZCA9IDE7CisJfQorCiAJYmRpX2FsbG9jX3F1ZXVlX3dvcmsoYmRpLCAmYXJncyk7CiB9CiAKQEAgLTMxMCw3ICszMjIsNyBAQAogCSAqIEZvciBpbm9kZXMgYmVpbmcgY29uc3RhbnRseSByZWRpcnRpZWQsIGRpcnRpZWRfd2hlbiBjYW4gZ2V0IHN0dWNrLgogCSAqIEl0IF9hcHBlYXJzXyB0byBiZSBpbiB0aGUgZnV0dXJlLCBidXQgaXMgYWN0dWFsbHkgaW4gZGlzdGFudCBwYXN0LgogCSAqIFRoaXMgdGVzdCBpcyBuZWNlc3NhcnkgdG8gcHJldmVudCBzdWNoIHdyYXBwZWQtYXJvdW5kIHJlbGF0aXZlIHRpbWVzCi0JICogZnJvbSBwZXJtYW5lbnRseSBzdG9wcGluZyB0aGUgd2hvbGUgcGRmbHVzaCB3cml0ZWJhY2suCisJICogZnJvbSBwZXJtYW5lbnRseSBzdG9wcGluZyB0aGUgd2hvbGUgYmRpIHdyaXRlYmFjay4KIAkgKi8KIAlyZXQgPSByZXQgJiYgdGltZV9iZWZvcmVfZXEoaW5vZGUtPmRpcnRpZWRfd2hlbiwgamlmZmllcyk7CiAjZW5kaWYKQEAgLTMyNCwxMyArMzM2LDM4IEBACiAJCQkgICAgICAgc3RydWN0IGxpc3RfaGVhZCAqZGlzcGF0Y2hfcXVldWUsCiAJCQkJdW5zaWduZWQgbG9uZyAqb2xkZXJfdGhhbl90aGlzKQogeworCUxJU1RfSEVBRCh0bXApOworCXN0cnVjdCBsaXN0X2hlYWQgKnBvcywgKm5vZGU7CisJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IE5VTEw7CisJc3RydWN0IGlub2RlICppbm9kZTsKKwlpbnQgZG9fc2Jfc29ydCA9IDA7CisKIAl3aGlsZSAoIWxpc3RfZW1wdHkoZGVsYXlpbmdfcXVldWUpKSB7Ci0JCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBsaXN0X2VudHJ5KGRlbGF5aW5nX3F1ZXVlLT5wcmV2LAotCQkJCQkJc3RydWN0IGlub2RlLCBpX2xpc3QpOworCQlpbm9kZSA9IGxpc3RfZW50cnkoZGVsYXlpbmdfcXVldWUtPnByZXYsIHN0cnVjdCBpbm9kZSwgaV9saXN0KTsKIAkJaWYgKG9sZGVyX3RoYW5fdGhpcyAmJgogCQkgICAgaW5vZGVfZGlydGllZF9hZnRlcihpbm9kZSwgKm9sZGVyX3RoYW5fdGhpcykpCiAJCQlicmVhazsKLQkJbGlzdF9tb3ZlKCZpbm9kZS0+aV9saXN0LCBkaXNwYXRjaF9xdWV1ZSk7CisJCWlmIChzYiAmJiBzYiAhPSBpbm9kZS0+aV9zYikKKwkJCWRvX3NiX3NvcnQgPSAxOworCQlzYiA9IGlub2RlLT5pX3NiOworCQlsaXN0X21vdmUoJmlub2RlLT5pX2xpc3QsICZ0bXApOworCX0KKworCS8qIGp1c3Qgb25lIHNiIGluIGxpc3QsIHNwbGljZSB0byBkaXNwYXRjaF9xdWV1ZSBhbmQgd2UncmUgZG9uZSAqLworCWlmICghZG9fc2Jfc29ydCkgeworCQlsaXN0X3NwbGljZSgmdG1wLCBkaXNwYXRjaF9xdWV1ZSk7CisJCXJldHVybjsKKwl9CisKKwkvKiBNb3ZlIGlub2RlcyBmcm9tIG9uZSBzdXBlcmJsb2NrIHRvZ2V0aGVyICovCisJd2hpbGUgKCFsaXN0X2VtcHR5KCZ0bXApKSB7CisJCWlub2RlID0gbGlzdF9lbnRyeSh0bXAucHJldiwgc3RydWN0IGlub2RlLCBpX2xpc3QpOworCQlzYiA9IGlub2RlLT5pX3NiOworCQlsaXN0X2Zvcl9lYWNoX3ByZXZfc2FmZShwb3MsIG5vZGUsICZ0bXApIHsKKwkJCWlub2RlID0gbGlzdF9lbnRyeShwb3MsIHN0cnVjdCBpbm9kZSwgaV9saXN0KTsKKwkJCWlmIChpbm9kZS0+aV9zYiA9PSBzYikKKwkJCQlsaXN0X21vdmUoJmlub2RlLT5pX2xpc3QsIGRpc3BhdGNoX3F1ZXVlKTsKKwkJfQogCX0KIH0KIApAQCAtNDM5LDggKzQ3NiwxOCBAQAogCXNwaW5fbG9jaygmaW5vZGVfbG9jayk7CiAJaW5vZGUtPmlfc3RhdGUgJj0gfklfU1lOQzsKIAlpZiAoIShpbm9kZS0+aV9zdGF0ZSAmIChJX0ZSRUVJTkcgfCBJX0NMRUFSKSkpIHsKLQkJaWYgKCEoaW5vZGUtPmlfc3RhdGUgJiBJX0RJUlRZKSAmJgotCQkgICAgbWFwcGluZ190YWdnZWQobWFwcGluZywgUEFHRUNBQ0hFX1RBR19ESVJUWSkpIHsKKwkJaWYgKChpbm9kZS0+aV9zdGF0ZSAmIElfRElSVFlfUEFHRVMpICYmIHdiYy0+Zm9yX2t1cGRhdGUpIHsKKwkJCS8qCisJCQkgKiBNb3JlIHBhZ2VzIGdldCBkaXJ0aWVkIGJ5IGEgZmFzdCBkaXJ0aWVyLgorCQkJICovCisJCQlnb3RvIHNlbGVjdF9xdWV1ZTsKKwkJfSBlbHNlIGlmIChpbm9kZS0+aV9zdGF0ZSAmIElfRElSVFkpIHsKKwkJCS8qCisJCQkgKiBBdCBsZWFzdCBYRlMgd2lsbCByZWRpcnR5IHRoZSBpbm9kZSBkdXJpbmcgdGhlCisJCQkgKiB3cml0ZWJhY2sgKGRlbGFsbG9jKSBhbmQgb24gaW8gY29tcGxldGlvbiAoaXNpemUpLgorCQkJICovCisJCQlyZWRpcnR5X3RhaWwoaW5vZGUpOworCQl9IGVsc2UgaWYgKG1hcHBpbmdfdGFnZ2VkKG1hcHBpbmcsIFBBR0VDQUNIRV9UQUdfRElSVFkpKSB7CiAJCQkvKgogCQkJICogV2UgZGlkbid0IHdyaXRlIGJhY2sgYWxsIHRoZSBwYWdlcy4gIG5mc193cml0ZXBhZ2VzKCkKIAkJCSAqIHNvbWV0aW1lcyBiYWxlcyBvdXQgd2l0aG91dCBkb2luZyBhbnl0aGluZy4gUmVkaXJ0eQpAQCAtNDYyLDYgKzUwOSw3IEBACiAJCQkJICogc29vbiBhcyB0aGUgcXVldWUgYmVjb21lcyB1bmNvbmdlc3RlZC4KIAkJCQkgKi8KIAkJCQlpbm9kZS0+aV9zdGF0ZSB8PSBJX0RJUlRZX1BBR0VTOworc2VsZWN0X3F1ZXVlOgogCQkJCWlmICh3YmMtPm5yX3RvX3dyaXRlIDw9IDApIHsKIAkJCQkJLyoKIAkJCQkJICogc2xpY2UgdXNlZCB1cDogcXVldWUgZm9yIG5leHQgdHVybgpAQCAtNDg0LDEyICs1MzIsNiBAQAogCQkJCWlub2RlLT5pX3N0YXRlIHw9IElfRElSVFlfUEFHRVM7CiAJCQkJcmVkaXJ0eV90YWlsKGlub2RlKTsKIAkJCX0KLQkJfSBlbHNlIGlmIChpbm9kZS0+aV9zdGF0ZSAmIElfRElSVFkpIHsKLQkJCS8qCi0JCQkgKiBTb21lb25lIHJlZGlydGllZCB0aGUgaW5vZGUgd2hpbGUgd2VyZSB3cml0aW5nIGJhY2sKLQkJCSAqIHRoZSBwYWdlcy4KLQkJCSAqLwotCQkJcmVkaXJ0eV90YWlsKGlub2RlKTsKIAkJfSBlbHNlIGlmIChhdG9taWNfcmVhZCgmaW5vZGUtPmlfY291bnQpKSB7CiAJCQkvKgogCQkJICogVGhlIGlub2RlIGlzIGNsZWFuLCBpbnVzZQpAQCAtNTA2LDYgKzU0OCwxNyBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyB2b2lkIHVucGluX3NiX2Zvcl93cml0ZWJhY2soc3RydWN0IHN1cGVyX2Jsb2NrICoqcHNiKQoreworCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSAqcHNiOworCisJaWYgKHNiKSB7CisJCXVwX3JlYWQoJnNiLT5zX3Vtb3VudCk7CisJCXB1dF9zdXBlcihzYik7CisJCSpwc2IgPSBOVUxMOworCX0KK30KKwogLyoKICAqIEZvciBXQl9TWU5DX05PTkUgd3JpdGViYWNrLCB0aGUgY2FsbGVyIGRvZXMgbm90IGhhdmUgdGhlIHNiIHBpbm5lZAogICogYmVmb3JlIGNhbGxpbmcgd3JpdGViYWNrLiBTbyBtYWtlIHN1cmUgdGhhdCB3ZSBkbyBwaW4gaXQsIHNvIGl0IGRvZXNuJ3QKQEAgLTUxNSwxMSArNTY4LDIwIEBACiAgKiAxIGlmIHdlIGZhaWxlZC4KICAqLwogc3RhdGljIGludCBwaW5fc2JfZm9yX3dyaXRlYmFjayhzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYywKLQkJCQkgICBzdHJ1Y3QgaW5vZGUgKmlub2RlKQorCQkJCXN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBzdXBlcl9ibG9jayAqKnBzYikKIHsKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtPmlfc2I7CiAKIAkvKgorCSAqIElmIHRoaXMgc2IgaXMgYWxyZWFkeSBwaW5uZWQsIG5vdGhpbmcgbW9yZSB0byBkby4gSWYgbm90IGFuZAorCSAqICpwc2IgaXMgbm9uLU5VTEwsIHVucGluIHRoZSBvbGQgb25lIGZpcnN0CisJICovCisJaWYgKHNiID09ICpwc2IpCisJCXJldHVybiAwOworCWVsc2UgaWYgKCpwc2IpCisJCXVucGluX3NiX2Zvcl93cml0ZWJhY2socHNiKTsKKworCS8qCiAJICogQ2FsbGVyIG11c3QgYWxyZWFkeSBob2xkIHRoZSByZWYgZm9yIHRoaXMKIAkgKi8KIAlpZiAod2JjLT5zeW5jX21vZGUgPT0gV0JfU1lOQ19BTEwpIHsKQEAgLTUzMiw3ICs1OTQsNyBAQAogCWlmIChkb3duX3JlYWRfdHJ5bG9jaygmc2ItPnNfdW1vdW50KSkgewogCQlpZiAoc2ItPnNfcm9vdCkgewogCQkJc3Bpbl91bmxvY2soJnNiX2xvY2spOwotCQkJcmV0dXJuIDA7CisJCQlnb3RvIHBpbm5lZDsKIAkJfQogCQkvKgogCQkgKiB1bW91bnRlZCwgZHJvcCByd3NlbSBhZ2FpbiBhbmQgZmFsbCB0aHJvdWdoIHRvIGZhaWx1cmUKQEAgLTU0MywyNCArNjA1LDE1IEBACiAJc2ItPnNfY291bnQtLTsKIAlzcGluX3VubG9jaygmc2JfbG9jayk7CiAJcmV0dXJuIDE7Ci19Ci0KLXN0YXRpYyB2b2lkIHVucGluX3NiX2Zvcl93cml0ZWJhY2soc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMsCi0JCQkJICAgc3RydWN0IGlub2RlICppbm9kZSkKLXsKLQlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtPmlfc2I7Ci0KLQlpZiAod2JjLT5zeW5jX21vZGUgPT0gV0JfU1lOQ19BTEwpCi0JCXJldHVybjsKLQotCXVwX3JlYWQoJnNiLT5zX3Vtb3VudCk7Ci0JcHV0X3N1cGVyKHNiKTsKK3Bpbm5lZDoKKwkqcHNiID0gc2I7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIHdyaXRlYmFja19pbm9kZXNfd2Ioc3RydWN0IGJkaV93cml0ZWJhY2sgKndiLAogCQkJCXN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKQogewotCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSB3YmMtPnNiOworCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSB3YmMtPnNiLCAqcGluX3NiID0gTlVMTDsKIAljb25zdCBpbnQgaXNfYmxrZGV2X3NiID0gc2JfaXNfYmxrZGV2X3NiKHNiKTsKIAljb25zdCB1bnNpZ25lZCBsb25nIHN0YXJ0ID0gamlmZmllczsJLyogbGl2ZWxvY2sgYXZvaWRhbmNlICovCiAKQEAgLTYxOSw3ICs2NzIsNyBAQAogCQlpZiAoaW5vZGVfZGlydGllZF9hZnRlcihpbm9kZSwgc3RhcnQpKQogCQkJYnJlYWs7CiAKLQkJaWYgKHBpbl9zYl9mb3Jfd3JpdGViYWNrKHdiYywgaW5vZGUpKSB7CisJCWlmIChwaW5fc2JfZm9yX3dyaXRlYmFjayh3YmMsIGlub2RlLCAmcGluX3NiKSkgewogCQkJcmVxdWV1ZV9pbyhpbm9kZSk7CiAJCQljb250aW51ZTsKIAkJfQpAQCAtNjI4LDcgKzY4MSw2IEBACiAJCV9faWdldChpbm9kZSk7CiAJCXBhZ2VzX3NraXBwZWQgPSB3YmMtPnBhZ2VzX3NraXBwZWQ7CiAJCXdyaXRlYmFja19zaW5nbGVfaW5vZGUoaW5vZGUsIHdiYyk7Ci0JCXVucGluX3NiX2Zvcl93cml0ZWJhY2sod2JjLCBpbm9kZSk7CiAJCWlmICh3YmMtPnBhZ2VzX3NraXBwZWQgIT0gcGFnZXNfc2tpcHBlZCkgewogCQkJLyoKIAkJCSAqIHdyaXRlYmFjayBpcyBub3QgbWFraW5nIHByb2dyZXNzIGR1ZSB0byBsb2NrZWQKQEAgLTY0OCw2ICs3MDAsOCBAQAogCQkJd2JjLT5tb3JlX2lvID0gMTsKIAl9CiAKKwl1bnBpbl9zYl9mb3Jfd3JpdGViYWNrKCZwaW5fc2IpOworCiAJc3Bpbl91bmxvY2soJmlub2RlX2xvY2spOwogCS8qIExlYXZlIGFueSB1bndyaXR0ZW4gaW5vZGVzIG9uIGJfaW8gKi8KIH0KQEAgLTcwNiw2ICs3NjAsNyBAQAogCX07CiAJdW5zaWduZWQgbG9uZyBvbGRlc3RfamlmOwogCWxvbmcgd3JvdGUgPSAwOworCXN0cnVjdCBpbm9kZSAqaW5vZGU7CiAKIAlpZiAod2JjLmZvcl9rdXBkYXRlKSB7CiAJCXdiYy5vbGRlcl90aGFuX3RoaXMgPSAmb2xkZXN0X2ppZjsKQEAgLTcxOSwyMCArNzc0LDE2IEBACiAKIAlmb3IgKDs7KSB7CiAJCS8qCi0JCSAqIERvbid0IGZsdXNoIGFueXRoaW5nIGZvciBub24taW50ZWdyaXR5IHdyaXRlYmFjayB3aGVyZQotCQkgKiBubyBucl9wYWdlcyB3YXMgZ2l2ZW4KKwkJICogU3RvcCB3cml0ZWJhY2sgd2hlbiBucl9wYWdlcyBoYXMgYmVlbiBjb25zdW1lZAogCQkgKi8KLQkJaWYgKCFhcmdzLT5mb3Jfa3VwZGF0ZSAmJiBhcmdzLT5ucl9wYWdlcyA8PSAwICYmCi0JCSAgICAgYXJncy0+c3luY19tb2RlID09IFdCX1NZTkNfTk9ORSkKKwkJaWYgKGFyZ3MtPm5yX3BhZ2VzIDw9IDApCiAJCQlicmVhazsKIAogCQkvKgotCQkgKiBJZiBubyBzcGVjaWZpYyBwYWdlcyB3ZXJlIGdpdmVuIGFuZCB0aGlzIGlzIGp1c3QgYQotCQkgKiBwZXJpb2RpYyBiYWNrZ3JvdW5kIHdyaXRlb3V0IGFuZCB3ZSBhcmUgYmVsb3cgdGhlCi0JCSAqIGJhY2tncm91bmQgZGlydHkgdGhyZXNob2xkLCBkb24ndCBkbyBhbnl0aGluZworCQkgKiBGb3IgYmFja2dyb3VuZCB3cml0ZW91dCwgc3RvcCB3aGVuIHdlIGFyZSBiZWxvdyB0aGUKKwkJICogYmFja2dyb3VuZCBkaXJ0eSB0aHJlc2hvbGQKIAkJICovCi0JCWlmIChhcmdzLT5mb3Jfa3VwZGF0ZSAmJiBhcmdzLT5ucl9wYWdlcyA8PSAwICYmCi0JCSAgICAhb3Zlcl9iZ3JvdW5kX3RocmVzaCgpKQorCQlpZiAoYXJncy0+Zm9yX2JhY2tncm91bmQgJiYgIW92ZXJfYmdyb3VuZF90aHJlc2goKSkKIAkJCWJyZWFrOwogCiAJCXdiYy5tb3JlX2lvID0gMDsKQEAgLTc0NCwxMyArNzk1LDMyIEBACiAJCXdyb3RlICs9IE1BWF9XUklURUJBQ0tfUEFHRVMgLSB3YmMubnJfdG9fd3JpdGU7CiAKIAkJLyoKLQkJICogSWYgd2UgcmFuIG91dCBvZiBzdHVmZiB0byB3cml0ZSwgYmFpbCB1bmxlc3MgbW9yZV9pbyBnb3Qgc2V0CisJCSAqIElmIHdlIGNvbnN1bWVkIGV2ZXJ5dGhpbmcsIHNlZSBpZiB3ZSBoYXZlIG1vcmUKIAkJICovCi0JCWlmICh3YmMubnJfdG9fd3JpdGUgPiAwIHx8IHdiYy5wYWdlc19za2lwcGVkID4gMCkgewotCQkJaWYgKHdiYy5tb3JlX2lvICYmICF3YmMuZm9yX2t1cGRhdGUpCi0JCQkJY29udGludWU7CisJCWlmICh3YmMubnJfdG9fd3JpdGUgPD0gMCkKKwkJCWNvbnRpbnVlOworCQkvKgorCQkgKiBEaWRuJ3Qgd3JpdGUgZXZlcnl0aGluZyBhbmQgd2UgZG9uJ3QgaGF2ZSBtb3JlIElPLCBiYWlsCisJCSAqLworCQlpZiAoIXdiYy5tb3JlX2lvKQogCQkJYnJlYWs7CisJCS8qCisJCSAqIERpZCB3ZSB3cml0ZSBzb21ldGhpbmc/IFRyeSBmb3IgbW9yZQorCQkgKi8KKwkJaWYgKHdiYy5ucl90b193cml0ZSA8IE1BWF9XUklURUJBQ0tfUEFHRVMpCisJCQljb250aW51ZTsKKwkJLyoKKwkJICogTm90aGluZyB3cml0dGVuLiBXYWl0IGZvciBzb21lIGlub2RlIHRvCisJCSAqIGJlY29tZSBhdmFpbGFibGUgZm9yIHdyaXRlYmFjay4gT3RoZXJ3aXNlCisJCSAqIHdlJ2xsIGp1c3QgYnVzeWxvb3AuCisJCSAqLworCQlzcGluX2xvY2soJmlub2RlX2xvY2spOworCQlpZiAoIWxpc3RfZW1wdHkoJndiLT5iX21vcmVfaW8pKSAgeworCQkJaW5vZGUgPSBsaXN0X2VudHJ5KHdiLT5iX21vcmVfaW8ucHJldiwKKwkJCQkJCXN0cnVjdCBpbm9kZSwgaV9saXN0KTsKKwkJCWlub2RlX3dhaXRfZm9yX3dyaXRlYmFjayhpbm9kZSk7CiAJCX0KKwkJc3Bpbl91bmxvY2soJmlub2RlX2xvY2spOwogCX0KIAogCXJldHVybiB3cm90ZTsKQEAgLTEwNjAsOSArMTEzMCw2IEBACiAgKiBJZiBvbGRlcl90aGFuX3RoaXMgaXMgbm9uLU5VTEwsIHRoZW4gb25seSB3cml0ZSBvdXQgaW5vZGVzIHdoaWNoCiAgKiBoYWQgdGhlaXIgZmlyc3QgZGlydHlpbmcgYXQgYSB0aW1lIGVhcmxpZXIgdGhhbiAqb2xkZXJfdGhhbl90aGlzLgogICoKLSAqIElmIHdlJ3JlIGEgcGRsZnVzaCB0aHJlYWQsIHRoZW4gaW1wbGVtZW50IHBkZmx1c2ggY29sbGlzaW9uIGF2b2lkYW5jZQotICogYWdhaW5zdCB0aGUgZW50aXJlIGxpc3QuCi0gKgogICogSWYgYGJkaScgaXMgbm9uLXplcm8gdGhlbiB3ZSdyZSBiZWluZyBhc2tlZCB0byB3cml0ZWJhY2sgYSBzcGVjaWZpYyBxdWV1ZS4KICAqIFRoaXMgZnVuY3Rpb24gYXNzdW1lcyB0aGF0IHRoZSBibG9ja2RldiBzdXBlcmJsb2NrJ3MgaW5vZGVzIGFyZSBiYWNrZWQgYnkKICAqIGEgdmFyaWV0eSBvZiBxdWV1ZXMsIHNvIGFsbCBpbm9kZXMgYXJlIHNlYXJjaGVkLiAgRm9yIG90aGVyIHN1cGVyYmxvY2tzLApAQCAtMTE0MSw3ICsxMjA4LDcgQEAKIAlucl90b193cml0ZSA9IG5yX2RpcnR5ICsgbnJfdW5zdGFibGUgKwogCQkJKGlub2Rlc19zdGF0Lm5yX2lub2RlcyAtIGlub2Rlc19zdGF0Lm5yX3VudXNlZCk7CiAKLQliZGlfd3JpdGViYWNrX2FsbChzYiwgbnJfdG9fd3JpdGUpOworCWJkaV9zdGFydF93cml0ZWJhY2soc2ItPnNfYmRpLCBzYiwgbnJfdG9fd3JpdGUpOwogfQogRVhQT1JUX1NZTUJPTCh3cml0ZWJhY2tfaW5vZGVzX3NiKTsKIApkaWZmIC0tZ2l0IGEvZnMvZnVzZS9maWxlLmMgYi9mcy9mdXNlL2ZpbGUuYwppbmRleCBjYmM0NjQwLi5hMzQ5MmY3IDEwMDY0NAotLS0gYS9mcy9mdXNlL2ZpbGUuYworKysgYi9mcy9mdXNlL2ZpbGUuYwpAQCAtMTMxMyw3ICsxMzEzLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBmdXNlX2ZpbGVfdm1fb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBmdXNlX2ZpbGVfdm1fb3BzID0gewogCS5jbG9zZQkJPSBmdXNlX3ZtYV9jbG9zZSwKIAkuZmF1bHQJCT0gZmlsZW1hcF9mYXVsdCwKIAkucGFnZV9ta3dyaXRlCT0gZnVzZV9wYWdlX21rd3JpdGUsCmRpZmYgLS1naXQgYS9mcy9nZnMyL2ZpbGUuYyBiL2ZzL2dmczIvZmlsZS5jCmluZGV4IDE2NmYzOGYuLjRlYjMwOGEgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvZmlsZS5jCisrKyBiL2ZzL2dmczIvZmlsZS5jCkBAIC00MTgsNyArNDE4LDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGdmczJfdm1fb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBnZnMyX3ZtX29wcyA9IHsKIAkuZmF1bHQgPSBmaWxlbWFwX2ZhdWx0LAogCS5wYWdlX21rd3JpdGUgPSBnZnMyX3BhZ2VfbWt3cml0ZSwKIH07CmRpZmYgLS1naXQgYS9mcy9oZnMvYnRyZWUuYyBiL2ZzL2hmcy9idHJlZS5jCmluZGV4IDliOWQ2MzkuLjA1MmYyMTQgMTAwNjQ0Ci0tLSBhL2ZzL2hmcy9idHJlZS5jCisrKyBiL2ZzL2hmcy9idHJlZS5jCkBAIC01OCw2ICs1OCwxMSBAQAogCX0KIAl1bmxvY2tfbmV3X2lub2RlKHRyZWUtPmlub2RlKTsKIAorCWlmICghSEZTX0kodHJlZS0+aW5vZGUpLT5maXJzdF9ibG9ja3MpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJoZnM6IGludmFsaWQgYnRyZWUgZXh0ZW50IHJlY29yZHMgKDAgc2l6ZSkuXG4iKTsKKwkJZ290byBmcmVlX2lub2RlOworCX0KKwogCW1hcHBpbmcgPSB0cmVlLT5pbm9kZS0+aV9tYXBwaW5nOwogCXBhZ2UgPSByZWFkX21hcHBpbmdfcGFnZShtYXBwaW5nLCAwLCBOVUxMKTsKIAlpZiAoSVNfRVJSKHBhZ2UpKQpkaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy93cmFwcGVyLmMgYi9mcy9oZnNwbHVzL3dyYXBwZXIuYwppbmRleCAxNzVkMDhlLi5iZWQ3OGFjOCAxMDA2NDQKLS0tIGEvZnMvaGZzcGx1cy93cmFwcGVyLmMKKysrIGIvZnMvaGZzcGx1cy93cmFwcGVyLmMKQEAgLTk5LDYgKzk5LDEwIEBACiAKIAlpZiAoaGZzcGx1c19nZXRfbGFzdF9zZXNzaW9uKHNiLCAmcGFydF9zdGFydCwgJnBhcnRfc2l6ZSkpCiAJCXJldHVybiAtRUlOVkFMOworCWlmICgodTY0KXBhcnRfc3RhcnQgKyBwYXJ0X3NpemUgPiAweDEwMDAwMDAwMFVMTCkgeworCQlwcl9lcnIoImhmczogdm9sdW1lcyBsYXJnZXIgdGhhbiAyVEIgYXJlIG5vdCBzdXBwb3J0ZWQgeWV0XG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQogCXdoaWxlICgxKSB7CiAJCWJoID0gc2JfYnJlYWQ1MTIoc2IsIHBhcnRfc3RhcnQgKyBIRlNQTFVTX1ZPTEhFQURfU0VDVE9SLCB2aGRyKTsKIAkJaWYgKCFiaCkKZGlmZiAtLWdpdCBhL2ZzL2piZDIvY2hlY2twb2ludC5jIGIvZnMvamJkMi9jaGVja3BvaW50LmMKaW5kZXggNWQ3MGIzZS4uY2EwZjVlYiAxMDA2NDQKLS0tIGEvZnMvamJkMi9jaGVja3BvaW50LmMKKysrIGIvZnMvamJkMi9jaGVja3BvaW50LmMKQEAgLTY0Myw2ICs2NDMsNyBAQAogCiBpbnQgX19qYmQyX2pvdXJuYWxfcmVtb3ZlX2NoZWNrcG9pbnQoc3RydWN0IGpvdXJuYWxfaGVhZCAqamgpCiB7CisJc3RydWN0IHRyYW5zYWN0aW9uX2NocF9zdGF0c19zICpzdGF0czsKIAl0cmFuc2FjdGlvbl90ICp0cmFuc2FjdGlvbjsKIAlqb3VybmFsX3QgKmpvdXJuYWw7CiAJaW50IHJldCA9IDA7CkBAIC02NzksNiArNjgwLDEyIEBACiAKIAkvKiBPSywgdGhhdCB3YXMgdGhlIGxhc3QgYnVmZmVyIGZvciB0aGUgdHJhbnNhY3Rpb246IHdlIGNhbiBub3cKIAkgICBzYWZlbHkgcmVtb3ZlIHRoaXMgdHJhbnNhY3Rpb24gZnJvbSB0aGUgbG9nICovCisJc3RhdHMgPSAmdHJhbnNhY3Rpb24tPnRfY2hwX3N0YXRzOworCWlmIChzdGF0cy0+Y3NfY2hwX3RpbWUpCisJCXN0YXRzLT5jc19jaHBfdGltZSA9IGpiZDJfdGltZV9kaWZmKHN0YXRzLT5jc19jaHBfdGltZSwKKwkJCQkJCSAgICBqaWZmaWVzKTsKKwl0cmFjZV9qYmQyX2NoZWNrcG9pbnRfc3RhdHMoam91cm5hbC0+al9mc19kZXYtPmJkX2RldiwKKwkJCQkgICAgdHJhbnNhY3Rpb24tPnRfdGlkLCBzdGF0cyk7CiAKIAlfX2piZDJfam91cm5hbF9kcm9wX3RyYW5zYWN0aW9uKGpvdXJuYWwsIHRyYW5zYWN0aW9uKTsKIAlrZnJlZSh0cmFuc2FjdGlvbik7CmRpZmYgLS1naXQgYS9mcy9qYmQyL2NvbW1pdC5jIGIvZnMvamJkMi9jb21taXQuYwppbmRleCAyNmQ5OTFkLi5kNGNmZDZkIDEwMDY0NAotLS0gYS9mcy9qYmQyL2NvbW1pdC5jCisrKyBiL2ZzL2piZDIvY29tbWl0LmMKQEAgLTQxMCwxMCArNDEwLDEwIEBACiAJaWYgKGNvbW1pdF90cmFuc2FjdGlvbi0+dF9zeW5jaHJvbm91c19jb21taXQpCiAJCXdyaXRlX29wID0gV1JJVEVfU1lOQ19QTFVHOwogCXRyYWNlX2piZDJfY29tbWl0X2xvY2tpbmcoam91cm5hbCwgY29tbWl0X3RyYW5zYWN0aW9uKTsKLQlzdGF0cy51LnJ1bi5yc193YWl0ID0gY29tbWl0X3RyYW5zYWN0aW9uLT50X21heF93YWl0OwotCXN0YXRzLnUucnVuLnJzX2xvY2tlZCA9IGppZmZpZXM7Ci0Jc3RhdHMudS5ydW4ucnNfcnVubmluZyA9IGpiZDJfdGltZV9kaWZmKGNvbW1pdF90cmFuc2FjdGlvbi0+dF9zdGFydCwKLQkJCQkJCXN0YXRzLnUucnVuLnJzX2xvY2tlZCk7CisJc3RhdHMucnVuLnJzX3dhaXQgPSBjb21taXRfdHJhbnNhY3Rpb24tPnRfbWF4X3dhaXQ7CisJc3RhdHMucnVuLnJzX2xvY2tlZCA9IGppZmZpZXM7CisJc3RhdHMucnVuLnJzX3J1bm5pbmcgPSBqYmQyX3RpbWVfZGlmZihjb21taXRfdHJhbnNhY3Rpb24tPnRfc3RhcnQsCisJCQkJCSAgICAgIHN0YXRzLnJ1bi5yc19sb2NrZWQpOwogCiAJc3Bpbl9sb2NrKCZjb21taXRfdHJhbnNhY3Rpb24tPnRfaGFuZGxlX2xvY2spOwogCXdoaWxlIChjb21taXRfdHJhbnNhY3Rpb24tPnRfdXBkYXRlcykgewpAQCAtNDg2LDkgKzQ4Niw5IEBACiAJamJkMl9qb3VybmFsX3N3aXRjaF9yZXZva2VfdGFibGUoam91cm5hbCk7CiAKIAl0cmFjZV9qYmQyX2NvbW1pdF9mbHVzaGluZyhqb3VybmFsLCBjb21taXRfdHJhbnNhY3Rpb24pOwotCXN0YXRzLnUucnVuLnJzX2ZsdXNoaW5nID0gamlmZmllczsKLQlzdGF0cy51LnJ1bi5yc19sb2NrZWQgPSBqYmQyX3RpbWVfZGlmZihzdGF0cy51LnJ1bi5yc19sb2NrZWQsCi0JCQkJCSAgICAgICBzdGF0cy51LnJ1bi5yc19mbHVzaGluZyk7CisJc3RhdHMucnVuLnJzX2ZsdXNoaW5nID0gamlmZmllczsKKwlzdGF0cy5ydW4ucnNfbG9ja2VkID0gamJkMl90aW1lX2RpZmYoc3RhdHMucnVuLnJzX2xvY2tlZCwKKwkJCQkJICAgICBzdGF0cy5ydW4ucnNfZmx1c2hpbmcpOwogCiAJY29tbWl0X3RyYW5zYWN0aW9uLT50X3N0YXRlID0gVF9GTFVTSDsKIAlqb3VybmFsLT5qX2NvbW1pdHRpbmdfdHJhbnNhY3Rpb24gPSBjb21taXRfdHJhbnNhY3Rpb247CkBAIC01MjMsMTEgKzUyMywxMSBAQAogCXNwaW5fdW5sb2NrKCZqb3VybmFsLT5qX3N0YXRlX2xvY2spOwogCiAJdHJhY2VfamJkMl9jb21taXRfbG9nZ2luZyhqb3VybmFsLCBjb21taXRfdHJhbnNhY3Rpb24pOwotCXN0YXRzLnUucnVuLnJzX2xvZ2dpbmcgPSBqaWZmaWVzOwotCXN0YXRzLnUucnVuLnJzX2ZsdXNoaW5nID0gamJkMl90aW1lX2RpZmYoc3RhdHMudS5ydW4ucnNfZmx1c2hpbmcsCi0JCQkJCQkgc3RhdHMudS5ydW4ucnNfbG9nZ2luZyk7Ci0Jc3RhdHMudS5ydW4ucnNfYmxvY2tzID0gY29tbWl0X3RyYW5zYWN0aW9uLT50X291dHN0YW5kaW5nX2NyZWRpdHM7Ci0Jc3RhdHMudS5ydW4ucnNfYmxvY2tzX2xvZ2dlZCA9IDA7CisJc3RhdHMucnVuLnJzX2xvZ2dpbmcgPSBqaWZmaWVzOworCXN0YXRzLnJ1bi5yc19mbHVzaGluZyA9IGpiZDJfdGltZV9kaWZmKHN0YXRzLnJ1bi5yc19mbHVzaGluZywKKwkJCQkJICAgICAgIHN0YXRzLnJ1bi5yc19sb2dnaW5nKTsKKwlzdGF0cy5ydW4ucnNfYmxvY2tzID0gY29tbWl0X3RyYW5zYWN0aW9uLT50X291dHN0YW5kaW5nX2NyZWRpdHM7CisJc3RhdHMucnVuLnJzX2Jsb2Nrc19sb2dnZWQgPSAwOwogCiAJSl9BU1NFUlQoY29tbWl0X3RyYW5zYWN0aW9uLT50X25yX2J1ZmZlcnMgPD0KIAkJIGNvbW1pdF90cmFuc2FjdGlvbi0+dF9vdXRzdGFuZGluZ19jcmVkaXRzKTsKQEAgLTY5NSw3ICs2OTUsNyBAQAogCQkJCXN1Ym1pdF9iaCh3cml0ZV9vcCwgYmgpOwogCQkJfQogCQkJY29uZF9yZXNjaGVkKCk7Ci0JCQlzdGF0cy51LnJ1bi5yc19ibG9ja3NfbG9nZ2VkICs9IGJ1ZnM7CisJCQlzdGF0cy5ydW4ucnNfYmxvY2tzX2xvZ2dlZCArPSBidWZzOwogCiAJCQkvKiBGb3JjZSBhIG5ldyBkZXNjcmlwdG9yIHRvIGJlIGdlbmVyYXRlZCBuZXh0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lIHJvdW5kIHRoZSBsb29wLiAqLwpAQCAtOTg4LDMzICs5ODgsMzAgQEAKIAlKX0FTU0VSVChjb21taXRfdHJhbnNhY3Rpb24tPnRfc3RhdGUgPT0gVF9DT01NSVQpOwogCiAJY29tbWl0X3RyYW5zYWN0aW9uLT50X3N0YXJ0ID0gamlmZmllczsKLQlzdGF0cy51LnJ1bi5yc19sb2dnaW5nID0gamJkMl90aW1lX2RpZmYoc3RhdHMudS5ydW4ucnNfbG9nZ2luZywKLQkJCQkJCWNvbW1pdF90cmFuc2FjdGlvbi0+dF9zdGFydCk7CisJc3RhdHMucnVuLnJzX2xvZ2dpbmcgPSBqYmQyX3RpbWVfZGlmZihzdGF0cy5ydW4ucnNfbG9nZ2luZywKKwkJCQkJICAgICAgY29tbWl0X3RyYW5zYWN0aW9uLT50X3N0YXJ0KTsKIAogCS8qCi0JICogRmlsZSB0aGUgdHJhbnNhY3Rpb24gZm9yIGhpc3RvcnkKKwkgKiBGaWxlIHRoZSB0cmFuc2FjdGlvbiBzdGF0aXN0aWNzCiAJICovCi0Jc3RhdHMudHNfdHlwZSA9IEpCRDJfU1RBVFNfUlVOOwogCXN0YXRzLnRzX3RpZCA9IGNvbW1pdF90cmFuc2FjdGlvbi0+dF90aWQ7Ci0Jc3RhdHMudS5ydW4ucnNfaGFuZGxlX2NvdW50ID0gY29tbWl0X3RyYW5zYWN0aW9uLT50X2hhbmRsZV9jb3VudDsKLQlzcGluX2xvY2soJmpvdXJuYWwtPmpfaGlzdG9yeV9sb2NrKTsKLQltZW1jcHkoam91cm5hbC0+al9oaXN0b3J5ICsgam91cm5hbC0+al9oaXN0b3J5X2N1ciwgJnN0YXRzLAotCQkJc2l6ZW9mKHN0YXRzKSk7Ci0JaWYgKCsram91cm5hbC0+al9oaXN0b3J5X2N1ciA9PSBqb3VybmFsLT5qX2hpc3RvcnlfbWF4KQotCQlqb3VybmFsLT5qX2hpc3RvcnlfY3VyID0gMDsKKwlzdGF0cy5ydW4ucnNfaGFuZGxlX2NvdW50ID0gY29tbWl0X3RyYW5zYWN0aW9uLT50X2hhbmRsZV9jb3VudDsKKwl0cmFjZV9qYmQyX3J1bl9zdGF0cyhqb3VybmFsLT5qX2ZzX2Rldi0+YmRfZGV2LAorCQkJICAgICBjb21taXRfdHJhbnNhY3Rpb24tPnRfdGlkLCAmc3RhdHMucnVuKTsKIAogCS8qCiAJICogQ2FsY3VsYXRlIG92ZXJhbGwgc3RhdHMKIAkgKi8KKwlzcGluX2xvY2soJmpvdXJuYWwtPmpfaGlzdG9yeV9sb2NrKTsKIAlqb3VybmFsLT5qX3N0YXRzLnRzX3RpZCsrOwotCWpvdXJuYWwtPmpfc3RhdHMudS5ydW4ucnNfd2FpdCArPSBzdGF0cy51LnJ1bi5yc193YWl0OwotCWpvdXJuYWwtPmpfc3RhdHMudS5ydW4ucnNfcnVubmluZyArPSBzdGF0cy51LnJ1bi5yc19ydW5uaW5nOwotCWpvdXJuYWwtPmpfc3RhdHMudS5ydW4ucnNfbG9ja2VkICs9IHN0YXRzLnUucnVuLnJzX2xvY2tlZDsKLQlqb3VybmFsLT5qX3N0YXRzLnUucnVuLnJzX2ZsdXNoaW5nICs9IHN0YXRzLnUucnVuLnJzX2ZsdXNoaW5nOwotCWpvdXJuYWwtPmpfc3RhdHMudS5ydW4ucnNfbG9nZ2luZyArPSBzdGF0cy51LnJ1bi5yc19sb2dnaW5nOwotCWpvdXJuYWwtPmpfc3RhdHMudS5ydW4ucnNfaGFuZGxlX2NvdW50ICs9IHN0YXRzLnUucnVuLnJzX2hhbmRsZV9jb3VudDsKLQlqb3VybmFsLT5qX3N0YXRzLnUucnVuLnJzX2Jsb2NrcyArPSBzdGF0cy51LnJ1bi5yc19ibG9ja3M7Ci0Jam91cm5hbC0+al9zdGF0cy51LnJ1bi5yc19ibG9ja3NfbG9nZ2VkICs9IHN0YXRzLnUucnVuLnJzX2Jsb2Nrc19sb2dnZWQ7CisJam91cm5hbC0+al9zdGF0cy5ydW4ucnNfd2FpdCArPSBzdGF0cy5ydW4ucnNfd2FpdDsKKwlqb3VybmFsLT5qX3N0YXRzLnJ1bi5yc19ydW5uaW5nICs9IHN0YXRzLnJ1bi5yc19ydW5uaW5nOworCWpvdXJuYWwtPmpfc3RhdHMucnVuLnJzX2xvY2tlZCArPSBzdGF0cy5ydW4ucnNfbG9ja2VkOworCWpvdXJuYWwtPmpfc3RhdHMucnVuLnJzX2ZsdXNoaW5nICs9IHN0YXRzLnJ1bi5yc19mbHVzaGluZzsKKwlqb3VybmFsLT5qX3N0YXRzLnJ1bi5yc19sb2dnaW5nICs9IHN0YXRzLnJ1bi5yc19sb2dnaW5nOworCWpvdXJuYWwtPmpfc3RhdHMucnVuLnJzX2hhbmRsZV9jb3VudCArPSBzdGF0cy5ydW4ucnNfaGFuZGxlX2NvdW50OworCWpvdXJuYWwtPmpfc3RhdHMucnVuLnJzX2Jsb2NrcyArPSBzdGF0cy5ydW4ucnNfYmxvY2tzOworCWpvdXJuYWwtPmpfc3RhdHMucnVuLnJzX2Jsb2Nrc19sb2dnZWQgKz0gc3RhdHMucnVuLnJzX2Jsb2Nrc19sb2dnZWQ7CiAJc3Bpbl91bmxvY2soJmpvdXJuYWwtPmpfaGlzdG9yeV9sb2NrKTsKIAogCWNvbW1pdF90cmFuc2FjdGlvbi0+dF9zdGF0ZSA9IFRfRklOSVNIRUQ7CmRpZmYgLS1naXQgYS9mcy9qYmQyL2pvdXJuYWwuYyBiL2ZzL2piZDIvam91cm5hbC5jCmluZGV4IDUzYjg2ZTEuLmIwYWI1MjEgMTAwNjQ0Ci0tLSBhL2ZzL2piZDIvam91cm5hbC5jCisrKyBiL2ZzL2piZDIvam91cm5hbC5jCkBAIC0xMzYsMTAgKzEzNiw2IEBACiAJam91cm5hbC0+al90YXNrID0gY3VycmVudDsKIAl3YWtlX3VwKCZqb3VybmFsLT5qX3dhaXRfZG9uZV9jb21taXQpOwogCi0JcHJpbnRrKEtFUk5fSU5GTyAia2pvdXJuYWxkMiBzdGFydGluZzogcGlkICVkLCBkZXYgJXMsICIKLQkgICAgICAgImNvbW1pdCBpbnRlcnZhbCAlbGQgc2Vjb25kc1xuIiwgY3VycmVudC0+cGlkLAotCSAgICAgICBqb3VybmFsLT5qX2Rldm5hbWUsIGpvdXJuYWwtPmpfY29tbWl0X2ludGVydmFsIC8gSFopOwotCiAJLyoKIAkgKiBBbmQgbm93LCB3YWl0IGZvcmV2ZXIgZm9yIGNvbW1pdCB3YWtldXAgZXZlbnRzLgogCSAqLwpAQCAtMjIzLDcgKzIxOSw4IEBACiB7CiAJc3RydWN0IHRhc2tfc3RydWN0ICp0OwogCi0JdCA9IGt0aHJlYWRfcnVuKGtqb3VybmFsZDIsIGpvdXJuYWwsICJram91cm5hbGQyIik7CisJdCA9IGt0aHJlYWRfcnVuKGtqb3VybmFsZDIsIGpvdXJuYWwsICJqYmQyLyVzIiwKKwkJCWpvdXJuYWwtPmpfZGV2bmFtZSk7CiAJaWYgKElTX0VSUih0KSkKIAkJcmV0dXJuIFBUUl9FUlIodCk7CiAKQEAgLTY3OSwxNTMgKzY3Niw2IEBACiAJaW50IG1heDsKIH07CiAKLXN0YXRpYyB2b2lkICpqYmQyX2hpc3Rvcnlfc2tpcF9lbXB0eShzdHJ1Y3QgamJkMl9zdGF0c19wcm9jX3Nlc3Npb24gKnMsCi0JCQkJCXN0cnVjdCB0cmFuc2FjdGlvbl9zdGF0c19zICp0cywKLQkJCQkJaW50IGZpcnN0KQotewotCWlmICh0cyA9PSBzLT5zdGF0cyArIHMtPm1heCkKLQkJdHMgPSBzLT5zdGF0czsKLQlpZiAoIWZpcnN0ICYmIHRzID09IHMtPnN0YXRzICsgcy0+c3RhcnQpCi0JCXJldHVybiBOVUxMOwotCXdoaWxlICh0cy0+dHNfdHlwZSA9PSAwKSB7Ci0JCXRzKys7Ci0JCWlmICh0cyA9PSBzLT5zdGF0cyArIHMtPm1heCkKLQkJCXRzID0gcy0+c3RhdHM7Ci0JCWlmICh0cyA9PSBzLT5zdGF0cyArIHMtPnN0YXJ0KQotCQkJcmV0dXJuIE5VTEw7Ci0JfQotCXJldHVybiB0czsKLQotfQotCi1zdGF0aWMgdm9pZCAqamJkMl9zZXFfaGlzdG9yeV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpCi17Ci0Jc3RydWN0IGpiZDJfc3RhdHNfcHJvY19zZXNzaW9uICpzID0gc2VxLT5wcml2YXRlOwotCXN0cnVjdCB0cmFuc2FjdGlvbl9zdGF0c19zICp0czsKLQlpbnQgbCA9ICpwb3M7Ci0KLQlpZiAobCA9PSAwKQotCQlyZXR1cm4gU0VRX1NUQVJUX1RPS0VOOwotCXRzID0gamJkMl9oaXN0b3J5X3NraXBfZW1wdHkocywgcy0+c3RhdHMgKyBzLT5zdGFydCwgMSk7Ci0JaWYgKCF0cykKLQkJcmV0dXJuIE5VTEw7Ci0JbC0tOwotCXdoaWxlIChsKSB7Ci0JCXRzID0gamJkMl9oaXN0b3J5X3NraXBfZW1wdHkocywgKyt0cywgMCk7Ci0JCWlmICghdHMpCi0JCQlicmVhazsKLQkJbC0tOwotCX0KLQlyZXR1cm4gdHM7Ci19Ci0KLXN0YXRpYyB2b2lkICpqYmQyX3NlcV9oaXN0b3J5X25leHQoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYsIGxvZmZfdCAqcG9zKQotewotCXN0cnVjdCBqYmQyX3N0YXRzX3Byb2Nfc2Vzc2lvbiAqcyA9IHNlcS0+cHJpdmF0ZTsKLQlzdHJ1Y3QgdHJhbnNhY3Rpb25fc3RhdHNfcyAqdHMgPSB2OwotCi0JKysqcG9zOwotCWlmICh2ID09IFNFUV9TVEFSVF9UT0tFTikKLQkJcmV0dXJuIGpiZDJfaGlzdG9yeV9za2lwX2VtcHR5KHMsIHMtPnN0YXRzICsgcy0+c3RhcnQsIDEpOwotCWVsc2UKLQkJcmV0dXJuIGpiZDJfaGlzdG9yeV9za2lwX2VtcHR5KHMsICsrdHMsIDApOwotfQotCi1zdGF0aWMgaW50IGpiZDJfc2VxX2hpc3Rvcnlfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKLXsKLQlzdHJ1Y3QgdHJhbnNhY3Rpb25fc3RhdHNfcyAqdHMgPSB2OwotCWlmICh2ID09IFNFUV9TVEFSVF9UT0tFTikgewotCQlzZXFfcHJpbnRmKHNlcSwgIiUtNHMgJS01cyAlLTVzICUtNXMgJS01cyAlLTVzICUtNXMgJS02cyAlLTVzICIKLQkJCQkiJS01cyAlLTVzICUtNXMgJS01cyAlLTVzXG4iLCAiUi9DIiwgInRpZCIsCi0JCQkJIndhaXQiLCAicnVuIiwgImxvY2siLCAiZmx1c2giLCAibG9nIiwgImhuZGxzIiwKLQkJCQkiYmxvY2siLCAiaW5sb2ciLCAiY3RpbWUiLCAid3JpdGUiLCAiZHJvcCIsCi0JCQkJImNsb3NlIik7Ci0JCXJldHVybiAwOwotCX0KLQlpZiAodHMtPnRzX3R5cGUgPT0gSkJEMl9TVEFUU19SVU4pCi0JCXNlcV9wcmludGYoc2VxLCAiJS00cyAlLTVsdSAlLTV1ICUtNXUgJS01dSAlLTV1ICUtNXUgIgotCQkJCSIlLTZsdSAlLTVsdSAlLTVsdVxuIiwgIlIiLCB0cy0+dHNfdGlkLAotCQkJCWppZmZpZXNfdG9fbXNlY3ModHMtPnUucnVuLnJzX3dhaXQpLAotCQkJCWppZmZpZXNfdG9fbXNlY3ModHMtPnUucnVuLnJzX3J1bm5pbmcpLAotCQkJCWppZmZpZXNfdG9fbXNlY3ModHMtPnUucnVuLnJzX2xvY2tlZCksCi0JCQkJamlmZmllc190b19tc2Vjcyh0cy0+dS5ydW4ucnNfZmx1c2hpbmcpLAotCQkJCWppZmZpZXNfdG9fbXNlY3ModHMtPnUucnVuLnJzX2xvZ2dpbmcpLAotCQkJCXRzLT51LnJ1bi5yc19oYW5kbGVfY291bnQsCi0JCQkJdHMtPnUucnVuLnJzX2Jsb2NrcywKLQkJCQl0cy0+dS5ydW4ucnNfYmxvY2tzX2xvZ2dlZCk7Ci0JZWxzZSBpZiAodHMtPnRzX3R5cGUgPT0gSkJEMl9TVEFUU19DSEVDS1BPSU5UKQotCQlzZXFfcHJpbnRmKHNlcSwgIiUtNHMgJS01bHUgJTQ4cyAlLTV1ICUtNWx1ICUtNWx1ICUtNWx1XG4iLAotCQkJCSJDIiwgdHMtPnRzX3RpZCwgIiAiLAotCQkJCWppZmZpZXNfdG9fbXNlY3ModHMtPnUuY2hwLmNzX2NocF90aW1lKSwKLQkJCQl0cy0+dS5jaHAuY3Nfd3JpdHRlbiwgdHMtPnUuY2hwLmNzX2Ryb3BwZWQsCi0JCQkJdHMtPnUuY2hwLmNzX2ZvcmNlZF90b19jbG9zZSk7Ci0JZWxzZQotCQlKX0FTU0VSVCgwKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgamJkMl9zZXFfaGlzdG9yeV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQotewotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIGpiZDJfc2VxX2hpc3Rvcnlfb3BzID0gewotCS5zdGFydCAgPSBqYmQyX3NlcV9oaXN0b3J5X3N0YXJ0LAotCS5uZXh0ICAgPSBqYmQyX3NlcV9oaXN0b3J5X25leHQsCi0JLnN0b3AgICA9IGpiZDJfc2VxX2hpc3Rvcnlfc3RvcCwKLQkuc2hvdyAgID0gamJkMl9zZXFfaGlzdG9yeV9zaG93LAotfTsKLQotc3RhdGljIGludCBqYmQyX3NlcV9oaXN0b3J5X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0Jam91cm5hbF90ICpqb3VybmFsID0gUERFKGlub2RlKS0+ZGF0YTsKLQlzdHJ1Y3QgamJkMl9zdGF0c19wcm9jX3Nlc3Npb24gKnM7Ci0JaW50IHJjLCBzaXplOwotCi0JcyA9IGttYWxsb2Moc2l6ZW9mKCpzKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKHMgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0Jc2l6ZSA9IHNpemVvZihzdHJ1Y3QgdHJhbnNhY3Rpb25fc3RhdHNfcykgKiBqb3VybmFsLT5qX2hpc3RvcnlfbWF4OwotCXMtPnN0YXRzID0ga21hbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKLQlpZiAocy0+c3RhdHMgPT0gTlVMTCkgewotCQlrZnJlZShzKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCXNwaW5fbG9jaygmam91cm5hbC0+al9oaXN0b3J5X2xvY2spOwotCW1lbWNweShzLT5zdGF0cywgam91cm5hbC0+al9oaXN0b3J5LCBzaXplKTsKLQlzLT5tYXggPSBqb3VybmFsLT5qX2hpc3RvcnlfbWF4OwotCXMtPnN0YXJ0ID0gam91cm5hbC0+al9oaXN0b3J5X2N1ciAlIHMtPm1heDsKLQlzcGluX3VubG9jaygmam91cm5hbC0+al9oaXN0b3J5X2xvY2spOwotCi0JcmMgPSBzZXFfb3BlbihmaWxlLCAmamJkMl9zZXFfaGlzdG9yeV9vcHMpOwotCWlmIChyYyA9PSAwKSB7Ci0JCXN0cnVjdCBzZXFfZmlsZSAqbSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQkJbS0+cHJpdmF0ZSA9IHM7Ci0JfSBlbHNlIHsKLQkJa2ZyZWUocy0+c3RhdHMpOwotCQlrZnJlZShzKTsKLQl9Ci0JcmV0dXJuIHJjOwotCi19Ci0KLXN0YXRpYyBpbnQgamJkMl9zZXFfaGlzdG9yeV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCXN0cnVjdCBzZXFfZmlsZSAqc2VxID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBqYmQyX3N0YXRzX3Byb2Nfc2Vzc2lvbiAqcyA9IHNlcS0+cHJpdmF0ZTsKLQotCWtmcmVlKHMtPnN0YXRzKTsKLQlrZnJlZShzKTsKLQlyZXR1cm4gc2VxX3JlbGVhc2UoaW5vZGUsIGZpbGUpOwotfQotCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBqYmQyX3NlcV9oaXN0b3J5X2ZvcHMgPSB7Ci0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5vcGVuICAgICAgICAgICA9IGpiZDJfc2VxX2hpc3Rvcnlfb3BlbiwKLQkucmVhZCAgICAgICAgICAgPSBzZXFfcmVhZCwKLQkubGxzZWVrICAgICAgICAgPSBzZXFfbHNlZWssCi0JLnJlbGVhc2UgICAgICAgID0gamJkMl9zZXFfaGlzdG9yeV9yZWxlYXNlLAotfTsKLQogc3RhdGljIHZvaWQgKmpiZDJfc2VxX2luZm9fc3RhcnQoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCAqcG9zKQogewogCXJldHVybiAqcG9zID8gTlVMTCA6IFNFUV9TVEFSVF9UT0tFTjsKQEAgLTg0MiwyOSArNjkyLDI5IEBACiAKIAlpZiAodiAhPSBTRVFfU1RBUlRfVE9LRU4pCiAJCXJldHVybiAwOwotCXNlcV9wcmludGYoc2VxLCAiJWx1IHRyYW5zYWN0aW9uLCBlYWNoIHVwdG8gJXUgYmxvY2tzXG4iLAorCXNlcV9wcmludGYoc2VxLCAiJWx1IHRyYW5zYWN0aW9uLCBlYWNoIHVwIHRvICV1IGJsb2Nrc1xuIiwKIAkJCXMtPnN0YXRzLT50c190aWQsCiAJCQlzLT5qb3VybmFsLT5qX21heF90cmFuc2FjdGlvbl9idWZmZXJzKTsKIAlpZiAocy0+c3RhdHMtPnRzX3RpZCA9PSAwKQogCQlyZXR1cm4gMDsKIAlzZXFfcHJpbnRmKHNlcSwgImF2ZXJhZ2U6IFxuICAldW1zIHdhaXRpbmcgZm9yIHRyYW5zYWN0aW9uXG4iLAotCSAgICBqaWZmaWVzX3RvX21zZWNzKHMtPnN0YXRzLT51LnJ1bi5yc193YWl0IC8gcy0+c3RhdHMtPnRzX3RpZCkpOworCSAgICBqaWZmaWVzX3RvX21zZWNzKHMtPnN0YXRzLT5ydW4ucnNfd2FpdCAvIHMtPnN0YXRzLT50c190aWQpKTsKIAlzZXFfcHJpbnRmKHNlcSwgIiAgJXVtcyBydW5uaW5nIHRyYW5zYWN0aW9uXG4iLAotCSAgICBqaWZmaWVzX3RvX21zZWNzKHMtPnN0YXRzLT51LnJ1bi5yc19ydW5uaW5nIC8gcy0+c3RhdHMtPnRzX3RpZCkpOworCSAgICBqaWZmaWVzX3RvX21zZWNzKHMtPnN0YXRzLT5ydW4ucnNfcnVubmluZyAvIHMtPnN0YXRzLT50c190aWQpKTsKIAlzZXFfcHJpbnRmKHNlcSwgIiAgJXVtcyB0cmFuc2FjdGlvbiB3YXMgYmVpbmcgbG9ja2VkXG4iLAotCSAgICBqaWZmaWVzX3RvX21zZWNzKHMtPnN0YXRzLT51LnJ1bi5yc19sb2NrZWQgLyBzLT5zdGF0cy0+dHNfdGlkKSk7CisJICAgIGppZmZpZXNfdG9fbXNlY3Mocy0+c3RhdHMtPnJ1bi5yc19sb2NrZWQgLyBzLT5zdGF0cy0+dHNfdGlkKSk7CiAJc2VxX3ByaW50ZihzZXEsICIgICV1bXMgZmx1c2hpbmcgZGF0YSAoaW4gb3JkZXJlZCBtb2RlKVxuIiwKLQkgICAgamlmZmllc190b19tc2VjcyhzLT5zdGF0cy0+dS5ydW4ucnNfZmx1c2hpbmcgLyBzLT5zdGF0cy0+dHNfdGlkKSk7CisJICAgIGppZmZpZXNfdG9fbXNlY3Mocy0+c3RhdHMtPnJ1bi5yc19mbHVzaGluZyAvIHMtPnN0YXRzLT50c190aWQpKTsKIAlzZXFfcHJpbnRmKHNlcSwgIiAgJXVtcyBsb2dnaW5nIHRyYW5zYWN0aW9uXG4iLAotCSAgICBqaWZmaWVzX3RvX21zZWNzKHMtPnN0YXRzLT51LnJ1bi5yc19sb2dnaW5nIC8gcy0+c3RhdHMtPnRzX3RpZCkpOworCSAgICBqaWZmaWVzX3RvX21zZWNzKHMtPnN0YXRzLT5ydW4ucnNfbG9nZ2luZyAvIHMtPnN0YXRzLT50c190aWQpKTsKIAlzZXFfcHJpbnRmKHNlcSwgIiAgJWxsdXVzIGF2ZXJhZ2UgdHJhbnNhY3Rpb24gY29tbWl0IHRpbWVcbiIsCiAJCSAgIGRpdl91NjQocy0+am91cm5hbC0+al9hdmVyYWdlX2NvbW1pdF90aW1lLCAxMDAwKSk7CiAJc2VxX3ByaW50ZihzZXEsICIgICVsdSBoYW5kbGVzIHBlciB0cmFuc2FjdGlvblxuIiwKLQkgICAgcy0+c3RhdHMtPnUucnVuLnJzX2hhbmRsZV9jb3VudCAvIHMtPnN0YXRzLT50c190aWQpOworCSAgICBzLT5zdGF0cy0+cnVuLnJzX2hhbmRsZV9jb3VudCAvIHMtPnN0YXRzLT50c190aWQpOwogCXNlcV9wcmludGYoc2VxLCAiICAlbHUgYmxvY2tzIHBlciB0cmFuc2FjdGlvblxuIiwKLQkgICAgcy0+c3RhdHMtPnUucnVuLnJzX2Jsb2NrcyAvIHMtPnN0YXRzLT50c190aWQpOworCSAgICBzLT5zdGF0cy0+cnVuLnJzX2Jsb2NrcyAvIHMtPnN0YXRzLT50c190aWQpOwogCXNlcV9wcmludGYoc2VxLCAiICAlbHUgbG9nZ2VkIGJsb2NrcyBwZXIgdHJhbnNhY3Rpb25cbiIsCi0JICAgIHMtPnN0YXRzLT51LnJ1bi5yc19ibG9ja3NfbG9nZ2VkIC8gcy0+c3RhdHMtPnRzX3RpZCk7CisJICAgIHMtPnN0YXRzLT5ydW4ucnNfYmxvY2tzX2xvZ2dlZCAvIHMtPnN0YXRzLT50c190aWQpOwogCXJldHVybiAwOwogfQogCkBAIC05MjAsNyArNzcwLDcgQEAKIAlyZXR1cm4gc2VxX3JlbGVhc2UoaW5vZGUsIGZpbGUpOwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBqYmQyX3NlcV9pbmZvX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBqYmQyX3NlcV9pbmZvX2ZvcHMgPSB7CiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5vcGVuICAgICAgICAgICA9IGpiZDJfc2VxX2luZm9fb3BlbiwKIAkucmVhZCAgICAgICAgICAgPSBzZXFfcmVhZCwKQEAgLTkzNCw4ICs3ODQsNiBAQAogewogCWpvdXJuYWwtPmpfcHJvY19lbnRyeSA9IHByb2NfbWtkaXIoam91cm5hbC0+al9kZXZuYW1lLCBwcm9jX2piZDJfc3RhdHMpOwogCWlmIChqb3VybmFsLT5qX3Byb2NfZW50cnkpIHsKLQkJcHJvY19jcmVhdGVfZGF0YSgiaGlzdG9yeSIsIFNfSVJVR08sIGpvdXJuYWwtPmpfcHJvY19lbnRyeSwKLQkJCQkgJmpiZDJfc2VxX2hpc3RvcnlfZm9wcywgam91cm5hbCk7CiAJCXByb2NfY3JlYXRlX2RhdGEoImluZm8iLCBTX0lSVUdPLCBqb3VybmFsLT5qX3Byb2NfZW50cnksCiAJCQkJICZqYmQyX3NlcV9pbmZvX2ZvcHMsIGpvdXJuYWwpOwogCX0KQEAgLTk0NCwyNyArNzkyLDkgQEAKIHN0YXRpYyB2b2lkIGpiZDJfc3RhdHNfcHJvY19leGl0KGpvdXJuYWxfdCAqam91cm5hbCkKIHsKIAlyZW1vdmVfcHJvY19lbnRyeSgiaW5mbyIsIGpvdXJuYWwtPmpfcHJvY19lbnRyeSk7Ci0JcmVtb3ZlX3Byb2NfZW50cnkoImhpc3RvcnkiLCBqb3VybmFsLT5qX3Byb2NfZW50cnkpOwogCXJlbW92ZV9wcm9jX2VudHJ5KGpvdXJuYWwtPmpfZGV2bmFtZSwgcHJvY19qYmQyX3N0YXRzKTsKIH0KIAotc3RhdGljIHZvaWQgam91cm5hbF9pbml0X3N0YXRzKGpvdXJuYWxfdCAqam91cm5hbCkKLXsKLQlpbnQgc2l6ZTsKLQotCWlmICghcHJvY19qYmQyX3N0YXRzKQotCQlyZXR1cm47Ci0KLQlqb3VybmFsLT5qX2hpc3RvcnlfbWF4ID0gMTAwOwotCXNpemUgPSBzaXplb2Yoc3RydWN0IHRyYW5zYWN0aW9uX3N0YXRzX3MpICogam91cm5hbC0+al9oaXN0b3J5X21heDsKLQlqb3VybmFsLT5qX2hpc3RvcnkgPSBremFsbG9jKHNpemUsIEdGUF9LRVJORUwpOwotCWlmICgham91cm5hbC0+al9oaXN0b3J5KSB7Ci0JCWpvdXJuYWwtPmpfaGlzdG9yeV9tYXggPSAwOwotCQlyZXR1cm47Ci0JfQotCXNwaW5fbG9ja19pbml0KCZqb3VybmFsLT5qX2hpc3RvcnlfbG9jayk7Ci19Ci0KIC8qCiAgKiBNYW5hZ2VtZW50IGZvciBqb3VybmFsIGNvbnRyb2wgYmxvY2tzOiBmdW5jdGlvbnMgdG8gY3JlYXRlIGFuZAogICogZGVzdHJveSBqb3VybmFsX3Qgc3RydWN0dXJlcywgYW5kIHRvIGluaXRpYWxpc2UgYW5kIHJlYWQgZXhpc3RpbmcKQEAgLTEwMDksNyArODM5LDcgQEAKIAkJZ290byBmYWlsOwogCX0KIAotCWpvdXJuYWxfaW5pdF9zdGF0cyhqb3VybmFsKTsKKwlzcGluX2xvY2tfaW5pdCgmam91cm5hbC0+al9oaXN0b3J5X2xvY2spOwogCiAJcmV0dXJuIGpvdXJuYWw7CiBmYWlsOgpAQCAtMTExNSw3ICs5NDUsNyBAQAogCXdoaWxlICgocCA9IHN0cmNocihwLCAnLycpKSkKIAkJKnAgPSAnISc7CiAJcCA9IGpvdXJuYWwtPmpfZGV2bmFtZSArIHN0cmxlbihqb3VybmFsLT5qX2Rldm5hbWUpOwotCXNwcmludGYocCwgIjolbHUiLCBqb3VybmFsLT5qX2lub2RlLT5pX2lubyk7CisJc3ByaW50ZihwLCAiLSVsdSIsIGpvdXJuYWwtPmpfaW5vZGUtPmlfaW5vKTsKIAlqYmRfZGVidWcoMSwKIAkJICAiam91cm5hbCAlcDogaW5vZGUgJXMvJWxkLCBzaXplICVMZCwgYml0cyAlZCwgYmxrc2l6ZSAlbGRcbiIsCiAJCSAgam91cm5hbCwgaW5vZGUtPmlfc2ItPnNfaWQsIGlub2RlLT5pX2lubywKZGlmZiAtLWdpdCBhL2ZzL25jcGZzL21tYXAuYyBiL2ZzL25jcGZzL21tYXAuYwppbmRleCA1ZDhkY2I5Li4xNTQ1OGRlIDEwMDY0NAotLS0gYS9mcy9uY3Bmcy9tbWFwLmMKKysrIGIvZnMvbmNwZnMvbW1hcC5jCkBAIC05NSw3ICs5NSw3IEBACiAJcmV0dXJuIFZNX0ZBVUxUX01BSk9SOwogfQogCi1zdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IG5jcF9maWxlX21tYXAgPQorc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBuY3BfZmlsZV9tbWFwID0KIHsKIAkuZmF1bHQgPSBuY3BfZmlsZV9tbWFwX2ZhdWx0LAogfTsKZGlmZiAtLWdpdCBhL2ZzL25mcy9jbGllbnQuYyBiL2ZzL25mcy9jbGllbnQuYwppbmRleCA2Mzk3NmMwYy4uOTllYTE5NiAxMDA2NDQKLS0tIGEvZnMvbmZzL2NsaWVudC5jCisrKyBiL2ZzL25mcy9jbGllbnQuYwpAQCAtMTE4MCw3ICsxMTgwLDcgQEAKIAkJCQkgICAgICAxLCBmbGFncyAmIE5GU19NT1VOVF9OT1JFU1ZQT1JUKTsKIAlpZiAoZXJyb3IgPCAwKQogCQlnb3RvIGVycm9yOwotCW1lbWNweShjbHAtPmNsX2lwYWRkciwgaXBfYWRkciwgc2l6ZW9mKGNscC0+Y2xfaXBhZGRyKSk7CisJc3RybGNweShjbHAtPmNsX2lwYWRkciwgaXBfYWRkciwgc2l6ZW9mKGNscC0+Y2xfaXBhZGRyKSk7CiAKIAllcnJvciA9IG5mc19pZG1hcF9uZXcoY2xwKTsKIAlpZiAoZXJyb3IgPCAwKSB7CmRpZmYgLS1naXQgYS9mcy9uZnMvZGlyLmMgYi9mcy9uZnMvZGlyLmMKaW5kZXggMzIwNjJjMy4uN2NiMjk4NSAxMDA2NDQKLS0tIGEvZnMvbmZzL2Rpci5jCisrKyBiL2ZzL25mcy9kaXIuYwpAQCAtMTUzNiw2ICsxNTM2LDggQEAKIAkJb2xkX2RlbnRyeS0+ZF9wYXJlbnQtPmRfbmFtZS5uYW1lLCBvbGRfZGVudHJ5LT5kX25hbWUubmFtZSwKIAkJZGVudHJ5LT5kX3BhcmVudC0+ZF9uYW1lLm5hbWUsIGRlbnRyeS0+ZF9uYW1lLm5hbWUpOwogCisJbmZzX2lub2RlX3JldHVybl9kZWxlZ2F0aW9uKGlub2RlKTsKKwogCWRfZHJvcChkZW50cnkpOwogCWVycm9yID0gTkZTX1BST1RPKGRpciktPmxpbmsoaW5vZGUsIGRpciwgJmRlbnRyeS0+ZF9uYW1lKTsKIAlpZiAoZXJyb3IgPT0gMCkgewpkaWZmIC0tZ2l0IGEvZnMvbmZzL2RpcmVjdC5jIGIvZnMvbmZzL2RpcmVjdC5jCmluZGV4IDZjMzIxMDAuLmUxZDQxNWUgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9kaXJlY3QuYworKysgYi9mcy9uZnMvZGlyZWN0LmMKQEAgLTQ1Nyw2ICs0NTcsNyBAQAogCX07CiAJc3RydWN0IHJwY190YXNrX3NldHVwIHRhc2tfc2V0dXBfZGF0YSA9IHsKIAkJLnJwY19jbGllbnQgPSBORlNfQ0xJRU5UKGlub2RlKSwKKwkJLnJwY19tZXNzYWdlID0gJm1zZywKIAkJLmNhbGxiYWNrX29wcyA9ICZuZnNfd3JpdGVfZGlyZWN0X29wcywKIAkJLndvcmtxdWV1ZSA9IG5mc2lvZF93b3JrcXVldWUsCiAJCS5mbGFncyA9IFJQQ19UQVNLX0FTWU5DLApkaWZmIC0tZ2l0IGEvZnMvbmZzL2ZpbGUuYyBiL2ZzL25mcy9maWxlLmMKaW5kZXggODZkNmI0ZC4uZjVmZGQzOSAxMDA2NDQKLS0tIGEvZnMvbmZzL2ZpbGUuYworKysgYi9mcy9uZnMvZmlsZS5jCkBAIC01OSw3ICs1OSw3IEBACiBzdGF0aWMgaW50IG5mc19mbG9jayhzdHJ1Y3QgZmlsZSAqZmlscCwgaW50IGNtZCwgc3RydWN0IGZpbGVfbG9jayAqZmwpOwogc3RhdGljIGludCBuZnNfc2V0bGVhc2Uoc3RydWN0IGZpbGUgKmZpbGUsIGxvbmcgYXJnLCBzdHJ1Y3QgZmlsZV9sb2NrICoqZmwpOwogCi1zdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IG5mc19maWxlX3ZtX29wczsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgbmZzX2ZpbGVfdm1fb3BzOwogCiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG5mc19maWxlX29wZXJhdGlvbnMgPSB7CiAJLmxsc2VlawkJPSBuZnNfZmlsZV9sbHNlZWssCkBAIC01NzIsNyArNTcyLDcgQEAKIAlyZXR1cm4gVk1fRkFVTFRfU0lHQlVTOwogfQogCi1zdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IG5mc19maWxlX3ZtX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgbmZzX2ZpbGVfdm1fb3BzID0gewogCS5mYXVsdCA9IGZpbGVtYXBfZmF1bHQsCiAJLnBhZ2VfbWt3cml0ZSA9IG5mc192bV9wYWdlX21rd3JpdGUsCiB9OwpkaWZmIC0tZ2l0IGEvZnMvbmZzL25mczRuYW1lc3BhY2UuYyBiL2ZzL25mcy9uZnM0bmFtZXNwYWNlLmMKaW5kZXggMjYzNmMyNi4uZmEzNDA4ZiAxMDA2NDQKLS0tIGEvZnMvbmZzL25mczRuYW1lc3BhY2UuYworKysgYi9mcy9uZnMvbmZzNG5hbWVzcGFjZS5jCkBAIC0xMjEsNyArMTIxLDcgQEAKIAogCW1udF9wYXRoID0gbmZzNF9wYXRobmFtZV9zdHJpbmcoJmxvY2F0aW9uLT5yb290cGF0aCwgcGFnZTIsIFBBR0VfU0laRSk7CiAJaWYgKElTX0VSUihtbnRfcGF0aCkpCi0JCXJldHVybiBtbnQ7CisJCXJldHVybiBFUlJfQ0FTVChtbnRfcGF0aCk7CiAJbW91bnRkYXRhLT5tbnRfcGF0aCA9IG1udF9wYXRoOwogCW1heGJ1ZmxlbiA9IG1udF9wYXRoIC0gMSAtIHBhZ2UyOwogCkBAIC0xMzIsMTUgKzEzMiwxNSBAQAogCQlpZiAoYnVmLT5sZW4gPD0gMCB8fCBidWYtPmxlbiA+PSBtYXhidWZsZW4pCiAJCQljb250aW51ZTsKIAotCQltb3VudGRhdGEtPmFkZHIgPSAoc3RydWN0IHNvY2thZGRyICopJmFkZHI7Ci0KIAkJaWYgKG1lbWNocihidWYtPmRhdGEsIElQVjZfU0NPUEVfREVMSU1JVEVSLCBidWYtPmxlbikpCiAJCQljb250aW51ZTsKLQkJbW91bnRkYXRhLT5hZGRybGVuID0gbmZzX3BhcnNlX3NlcnZlcl9uYW1lKGJ1Zi0+ZGF0YSwKLQkJCQlidWYtPmxlbiwKLQkJCQltb3VudGRhdGEtPmFkZHIsIG1vdW50ZGF0YS0+YWRkcmxlbik7CisKKwkJbW91bnRkYXRhLT5hZGRybGVuID0gbmZzX3BhcnNlX3NlcnZlcl9uYW1lKGJ1Zi0+ZGF0YSwgYnVmLT5sZW4sCisJCQkJKHN0cnVjdCBzb2NrYWRkciAqKSZhZGRyLCBzaXplb2YoYWRkcikpOwogCQlpZiAobW91bnRkYXRhLT5hZGRybGVuID09IDApCiAJCQljb250aW51ZTsKKworCQltb3VudGRhdGEtPmFkZHIgPSAoc3RydWN0IHNvY2thZGRyICopJmFkZHI7CiAJCXJwY19zZXRfcG9ydChtb3VudGRhdGEtPmFkZHIsIE5GU19QT1JUKTsKIAogCQltZW1jcHkocGFnZTIsIGJ1Zi0+ZGF0YSwgYnVmLT5sZW4pOwpkaWZmIC0tZ2l0IGEvZnMvbmZzL25mczRwcm9jLmMgYi9mcy9uZnMvbmZzNHByb2MuYwppbmRleCBlZDdjMjY5Li5mZjM3NDU0IDEwMDY0NAotLS0gYS9mcy9uZnMvbmZzNHByb2MuYworKysgYi9mcy9uZnMvbmZzNHByb2MuYwpAQCAtNzIsMTIgKzcyLDE3IEBACiAvKiBQcmV2ZW50IGxlYWtzIG9mIE5GU3Y0IGVycm9ycyBpbnRvIHVzZXJsYW5kICovCiBzdGF0aWMgaW50IG5mczRfbWFwX2Vycm9ycyhpbnQgZXJyKQogewotCWlmIChlcnIgPCAtMTAwMCkgeworCWlmIChlcnIgPj0gLTEwMDApCisJCXJldHVybiBlcnI7CisJc3dpdGNoIChlcnIpIHsKKwljYXNlIC1ORlM0RVJSX1JFU09VUkNFOgorCQlyZXR1cm4gLUVSRU1PVEVJTzsKKwlkZWZhdWx0OgogCQlkcHJpbnRrKCIlcyBjb3VsZCBub3QgaGFuZGxlIE5GU3Y0IGVycm9yICVkXG4iLAogCQkJCV9fZnVuY19fLCAtZXJyKTsKLQkJcmV0dXJuIC1FSU87CisJCWJyZWFrOwogCX0KLQlyZXR1cm4gZXJyOworCXJldHVybiAtRUlPOwogfQogCiAvKgpAQCAtMzA2MCw5ICszMDY1LDYgQEAKIAlpZiAodGltZV9iZWZvcmUoY2xwLT5jbF9sYXN0X3JlbmV3YWwsdGltZXN0YW1wKSkKIAkJY2xwLT5jbF9sYXN0X3JlbmV3YWwgPSB0aW1lc3RhbXA7CiAJc3Bpbl91bmxvY2soJmNscC0+Y2xfbG9jayk7Ci0JZHByaW50aygiJXMgY2FsbGluZyBwdXRfcnBjY3JlZCBvbiBycGNfY3JlZCAlcFxuIiwgX19mdW5jX18sCi0JCQkJdGFzay0+dGtfbXNnLnJwY19jcmVkKTsKLQlwdXRfcnBjY3JlZCh0YXNrLT50a19tc2cucnBjX2NyZWQpOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHJwY19jYWxsX29wcyBuZnM0X3JlbmV3X29wcyA9IHsKQEAgLTQ4NzcsNyArNDg3OSw2IEBACiAJbmZzNDFfc2VxdWVuY2VfZnJlZV9zbG90KGNscCwgdGFzay0+dGtfbXNnLnJwY19yZXNwKTsKIAlkcHJpbnRrKCIlcyBycGNfY3JlZCAlcFxuIiwgX19mdW5jX18sIHRhc2stPnRrX21zZy5ycGNfY3JlZCk7CiAKLQlwdXRfcnBjY3JlZCh0YXNrLT50a19tc2cucnBjX2NyZWQpOwogCWtmcmVlKHRhc2stPnRrX21zZy5ycGNfYXJncCk7CiAJa2ZyZWUodGFzay0+dGtfbXNnLnJwY19yZXNwKTsKIApkaWZmIC0tZ2l0IGEvZnMvbmZzL25mczRyZW5ld2QuYyBiL2ZzL25mcy9uZnM0cmVuZXdkLmMKaW5kZXggZTI3YzZjZS4uMDE1NmMwMSAxMDA2NDQKLS0tIGEvZnMvbmZzL25mczRyZW5ld2QuYworKysgYi9mcy9uZnMvbmZzNHJlbmV3ZC5jCkBAIC0xMjcsMTIgKzEyNyw2IEBACiB9CiAKIHZvaWQKLW5mczRfcmVuZXdkX3ByZXBhcmVfc2h1dGRvd24oc3RydWN0IG5mc19zZXJ2ZXIgKnNlcnZlcikKLXsKLQljYW5jZWxfZGVsYXllZF93b3JrKCZzZXJ2ZXItPm5mc19jbGllbnQtPmNsX3JlbmV3ZCk7Ci19Ci0KLXZvaWQKIG5mczRfa2lsbF9yZW5ld2Qoc3RydWN0IG5mc19jbGllbnQgKmNscCkKIHsKIAljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmNscC0+Y2xfcmVuZXdkKTsKZGlmZiAtLWdpdCBhL2ZzL25mcy9uZnM0eGRyLmMgYi9mcy9uZnMvbmZzNHhkci5jCmluZGV4IDgzYWQ0N2MuLjIwYjRlMzAgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9uZnM0eGRyLmMKKysrIGIvZnMvbmZzL25mczR4ZHIuYwpAQCAtNTY4MSw3ICs1NjgxLDYgQEAKIAl7IE5GUzRFUlJfU0VSVkVSRkFVTFQsCS1FU0VSVkVSRkFVTFQJfSwKIAl7IE5GUzRFUlJfQkFEVFlQRSwJLUVCQURUWVBFCX0sCiAJeyBORlM0RVJSX0xPQ0tFRCwJLUVBR0FJTgkJfSwKLQl7IE5GUzRFUlJfUkVTT1VSQ0UsCS1FUkVNT1RFSU8JfSwKIAl7IE5GUzRFUlJfU1lNTElOSywJLUVMT09QCQl9LAogCXsgTkZTNEVSUl9PUF9JTExFR0FMLAktRU9QTk9UU1VQUAl9LAogCXsgTkZTNEVSUl9ERUFETE9DSywJLUVERUFETEsJfSwKZGlmZiAtLWdpdCBhL2ZzL25mcy9zdXBlci5jIGIvZnMvbmZzL3N1cGVyLmMKaW5kZXggODEwNzcwZi4uOTBiZTU1MSAxMDA2NDQKLS0tIGEvZnMvbmZzL3N1cGVyLmMKKysrIGIvZnMvbmZzL3N1cGVyLmMKQEAgLTcyOCwyMiArNzI4LDI0IEBACiAJdW5sb2NrX2tlcm5lbCgpOwogfQogCi1zdGF0aWMgc3RydWN0IG5mc19wYXJzZWRfbW91bnRfZGF0YSAqbmZzX2FsbG9jX3BhcnNlZF9tb3VudF9kYXRhKGludCBmbGFncykKK3N0YXRpYyBzdHJ1Y3QgbmZzX3BhcnNlZF9tb3VudF9kYXRhICpuZnNfYWxsb2NfcGFyc2VkX21vdW50X2RhdGEodW5zaWduZWQgaW50IHZlcnNpb24pCiB7CiAJc3RydWN0IG5mc19wYXJzZWRfbW91bnRfZGF0YSAqZGF0YTsKIAogCWRhdGEgPSBremFsbG9jKHNpemVvZigqZGF0YSksIEdGUF9LRVJORUwpOwogCWlmIChkYXRhKSB7Ci0JCWRhdGEtPmZsYWdzCQk9IGZsYWdzOwogCQlkYXRhLT5yc2l6ZQkJPSBORlNfTUFYX0ZJTEVfSU9fU0laRTsKIAkJZGF0YS0+d3NpemUJCT0gTkZTX01BWF9GSUxFX0lPX1NJWkU7CiAJCWRhdGEtPmFjcmVnbWluCQk9IE5GU19ERUZfQUNSRUdNSU47CiAJCWRhdGEtPmFjcmVnbWF4CQk9IE5GU19ERUZfQUNSRUdNQVg7CiAJCWRhdGEtPmFjZGlybWluCQk9IE5GU19ERUZfQUNESVJNSU47CiAJCWRhdGEtPmFjZGlybWF4CQk9IE5GU19ERUZfQUNESVJNQVg7CisJCWRhdGEtPm1vdW50X3NlcnZlci5wb3J0CT0gTkZTX1VOU1BFQ19QT1JUOwogCQlkYXRhLT5uZnNfc2VydmVyLnBvcnQJPSBORlNfVU5TUEVDX1BPUlQ7CisJCWRhdGEtPm5mc19zZXJ2ZXIucHJvdG9jb2wgPSBYUFJUX1RSQU5TUE9SVF9UQ1A7CiAJCWRhdGEtPmF1dGhfZmxhdm9yc1swXQk9IFJQQ19BVVRIX1VOSVg7CiAJCWRhdGEtPmF1dGhfZmxhdm9yX2xlbgk9IDE7CisJCWRhdGEtPnZlcnNpb24JCT0gdmVyc2lvbjsKIAkJZGF0YS0+bWlub3J2ZXJzaW9uCT0gMDsKIAl9CiAJcmV0dXJuIGRhdGE7CkBAIC03NzYsMTUgKzc3OCwxMyBAQAogICogU2VsZWN0IGJldHdlZW4gYSBkZWZhdWx0IHBvcnQgdmFsdWUgYW5kIGEgdXNlci1zcGVjaWZpZWQgcG9ydCB2YWx1ZS4KICAqIElmIGEgemVybyB2YWx1ZSBpcyBzZXQsIHRoZW4gYXV0b2JpbmQgd2lsbCBiZSB1c2VkLgogICovCi1zdGF0aWMgdm9pZCBuZnNfc2V0X2RlZmF1bHRfcG9ydChzdHJ1Y3Qgc29ja2FkZHIgKnNhcCwgY29uc3QgaW50IHBhcnNlZF9wb3J0LAorc3RhdGljIHZvaWQgbmZzX3NldF9wb3J0KHN0cnVjdCBzb2NrYWRkciAqc2FwLCBpbnQgKnBvcnQsCiAJCQkJIGNvbnN0IHVuc2lnbmVkIHNob3J0IGRlZmF1bHRfcG9ydCkKIHsKLQl1bnNpZ25lZCBzaG9ydCBwb3J0ID0gZGVmYXVsdF9wb3J0OworCWlmICgqcG9ydCA9PSBORlNfVU5TUEVDX1BPUlQpCisJCSpwb3J0ID0gZGVmYXVsdF9wb3J0OwogCi0JaWYgKHBhcnNlZF9wb3J0ICE9IE5GU19VTlNQRUNfUE9SVCkKLQkJcG9ydCA9IHBhcnNlZF9wb3J0OwotCi0JcnBjX3NldF9wb3J0KHNhcCwgcG9ydCk7CisJcnBjX3NldF9wb3J0KHNhcCwgKnBvcnQpOwogfQogCiAvKgpAQCAtMTI1Myw2ICsxMjUzLDcgQEAKIAkJCWRlZmF1bHQ6CiAJCQkJZGZwcmludGsoTU9VTlQsICJORlM6ICAgdW5yZWNvZ25pemVkICIKIAkJCQkJCSJ0cmFuc3BvcnQgcHJvdG9jb2xcbiIpOworCQkJCWtmcmVlKHN0cmluZyk7CiAJCQkJcmV0dXJuIDA7CiAJCQl9CiAJCQlicmVhazsKQEAgLTE0NzUsNyArMTQ3Niw3IEBACiAJCWFyZ3MtPm1vdW50X3NlcnZlci5hZGRybGVuID0gYXJncy0+bmZzX3NlcnZlci5hZGRybGVuOwogCX0KIAlyZXF1ZXN0LnNhbGVuID0gYXJncy0+bW91bnRfc2VydmVyLmFkZHJsZW47Ci0JbmZzX3NldF9kZWZhdWx0X3BvcnQocmVxdWVzdC5zYXAsIGFyZ3MtPm1vdW50X3NlcnZlci5wb3J0LCAwKTsKKwluZnNfc2V0X3BvcnQocmVxdWVzdC5zYXAsICZhcmdzLT5tb3VudF9zZXJ2ZXIucG9ydCwgMCk7CiAKIAkvKgogCSAqIE5vdyBhc2sgdGhlIG1vdW50IHNlcnZlciB0byBtYXAgb3VyIGV4cG9ydCBwYXRoCkBAIC0xNzY1LDcgKzE3NjYsNyBAQAogCQkJZ290byBvdXRfdjRfbm90X2NvbXBpbGVkOwogI2VuZGlmCiAKLQkJbmZzX3NldF9kZWZhdWx0X3BvcnQoc2FwLCBhcmdzLT5uZnNfc2VydmVyLnBvcnQsIDApOworCQluZnNfc2V0X3BvcnQoc2FwLCAmYXJncy0+bmZzX3NlcnZlci5wb3J0LCAwKTsKIAogCQluZnNfc2V0X21vdW50X3RyYW5zcG9ydF9wcm90b2NvbChhcmdzKTsKIApAQCAtMTg0Niw5ICsxODQ3LDEwIEBACiAJICAgIGRhdGEtPmFjZGlybWluICE9IG5mc3MtPmFjZGlybWluIC8gSFogfHwKIAkgICAgZGF0YS0+YWNkaXJtYXggIT0gbmZzcy0+YWNkaXJtYXggLyBIWiB8fAogCSAgICBkYXRhLT50aW1lbyAhPSAoMTBVICogbmZzcy0+Y2xpZW50LT5jbF90aW1lb3V0LT50b19pbml0dmFsIC8gSFopIHx8CisJICAgIGRhdGEtPm5mc19zZXJ2ZXIucG9ydCAhPSBuZnNzLT5wb3J0IHx8CiAJICAgIGRhdGEtPm5mc19zZXJ2ZXIuYWRkcmxlbiAhPSBuZnNzLT5uZnNfY2xpZW50LT5jbF9hZGRybGVuIHx8Ci0JICAgIG1lbWNtcCgmZGF0YS0+bmZzX3NlcnZlci5hZGRyZXNzLCAmbmZzcy0+bmZzX2NsaWVudC0+Y2xfYWRkciwKLQkJICAgZGF0YS0+bmZzX3NlcnZlci5hZGRybGVuKSAhPSAwKQorCSAgICAhcnBjX2NtcF9hZGRyKChzdHJ1Y3Qgc29ja2FkZHIgKikmZGF0YS0+bmZzX3NlcnZlci5hZGRyZXNzLAorCQkJICAoc3RydWN0IHNvY2thZGRyICopJm5mc3MtPm5mc19jbGllbnQtPmNsX2FkZHIpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXJldHVybiAwOwpAQCAtMTg5MSw2ICsxODkzLDcgQEAKIAlkYXRhLT5hY2Rpcm1pbiA9IG5mc3MtPmFjZGlybWluIC8gSFo7CiAJZGF0YS0+YWNkaXJtYXggPSBuZnNzLT5hY2Rpcm1heCAvIEhaOwogCWRhdGEtPnRpbWVvID0gMTBVICogbmZzcy0+Y2xpZW50LT5jbF90aW1lb3V0LT50b19pbml0dmFsIC8gSFo7CisJZGF0YS0+bmZzX3NlcnZlci5wb3J0ID0gbmZzcy0+cG9ydDsKIAlkYXRhLT5uZnNfc2VydmVyLmFkZHJsZW4gPSBuZnNzLT5uZnNfY2xpZW50LT5jbF9hZGRybGVuOwogCW1lbWNweSgmZGF0YS0+bmZzX3NlcnZlci5hZGRyZXNzLCAmbmZzcy0+bmZzX2NsaWVudC0+Y2xfYWRkciwKIAkJZGF0YS0+bmZzX3NlcnZlci5hZGRybGVuKTsKQEAgLTIxMDQsNyArMjEwNyw3IEBACiAJfTsKIAlpbnQgZXJyb3IgPSAtRU5PTUVNOwogCi0JZGF0YSA9IG5mc19hbGxvY19wYXJzZWRfbW91bnRfZGF0YShORlNfTU9VTlRfVkVSMyB8IE5GU19NT1VOVF9UQ1ApOworCWRhdGEgPSBuZnNfYWxsb2NfcGFyc2VkX21vdW50X2RhdGEoMyk7CiAJbW50ZmggPSBremFsbG9jKHNpemVvZigqbW50ZmgpLCBHRlBfS0VSTkVMKTsKIAlpZiAoZGF0YSA9PSBOVUxMIHx8IG1udGZoID09IE5VTEwpCiAJCWdvdG8gb3V0X2ZyZWVfZmg7CkBAIC0yMzI5LDcgKzIzMzIsNyBAQAogewogCXN0cnVjdCBzb2NrYWRkciAqc2FwID0gKHN0cnVjdCBzb2NrYWRkciAqKSZhcmdzLT5uZnNfc2VydmVyLmFkZHJlc3M7CiAKLQluZnNfc2V0X2RlZmF1bHRfcG9ydChzYXAsIGFyZ3MtPm5mc19zZXJ2ZXIucG9ydCwgTkZTX1BPUlQpOworCW5mc19zZXRfcG9ydChzYXAsICZhcmdzLT5uZnNfc2VydmVyLnBvcnQsIE5GU19QT1JUKTsKIAogCW5mc192YWxpZGF0ZV90cmFuc3BvcnRfcHJvdG9jb2woYXJncyk7CiAKQEAgLTIzNzQsNyArMjM3Nyw2IEBACiAJaWYgKGRhdGEgPT0gTlVMTCkKIAkJZ290byBvdXRfbm9fZGF0YTsKIAotCWFyZ3MtPnZlcnNpb24JCT0gNDsKIAlzd2l0Y2ggKGRhdGEtPnZlcnNpb24pIHsKIAljYXNlIDE6CiAJCWlmIChkYXRhLT5ob3N0X2FkZHJsZW4gPiBzaXplb2YoYXJncy0+bmZzX3NlcnZlci5hZGRyZXNzKSkKQEAgLTI2NTgsNyArMjY2MCw3IEBACiAJc3RydWN0IG5mc19wYXJzZWRfbW91bnRfZGF0YSAqZGF0YTsKIAlpbnQgZXJyb3IgPSAtRU5PTUVNOwogCi0JZGF0YSA9IG5mc19hbGxvY19wYXJzZWRfbW91bnRfZGF0YSgwKTsKKwlkYXRhID0gbmZzX2FsbG9jX3BhcnNlZF9tb3VudF9kYXRhKDQpOwogCWlmIChkYXRhID09IE5VTEwpCiAJCWdvdG8gb3V0X2ZyZWVfZGF0YTsKIApAQCAtMjY4OCw3ICsyNjkwLDYgQEAKIAlkcHJpbnRrKCItLT4gJXNcbiIsIF9fZnVuY19fKTsKIAluZnNfc3VwZXJfcmV0dXJuX2FsbF9kZWxlZ2F0aW9ucyhzYik7CiAJa2lsbF9hbm9uX3N1cGVyKHNiKTsKLQluZnM0X3JlbmV3ZF9wcmVwYXJlX3NodXRkb3duKHNlcnZlcik7CiAJbmZzX2ZzY2FjaGVfcmVsZWFzZV9zdXBlcl9jb29raWUoc2IpOwogCW5mc19mcmVlX3NlcnZlcihzZXJ2ZXIpOwogCWRwcmludGsoIjwtLSAlc1xuIiwgX19mdW5jX18pOwpkaWZmIC0tZ2l0IGEvZnMvbmZzZC9uZnNjdGwuYyBiL2ZzL25mc2QvbmZzY3RsLmMKaW5kZXggMDAzODhkMi4uNWMwMWZjMSAxMDA2NDQKLS0tIGEvZnMvbmZzZC9uZnNjdGwuYworKysgYi9mcy9uZnNkL25mc2N0bC5jCkBAIC0xNzYsNyArMTc2LDcgQEAKIGV4dGVybiBpbnQgbmZzZF9wb29sX3N0YXRzX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpOwogZXh0ZXJuIGludCBuZnNkX3Bvb2xfc3RhdHNfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSk7CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHBvb2xfc3RhdHNfb3BlcmF0aW9ucyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHBvb2xfc3RhdHNfb3BlcmF0aW9ucyA9IHsKIAkub3BlbgkJPSBuZnNkX3Bvb2xfc3RhdHNfb3BlbiwKIAkucmVhZAkJPSBzZXFfcmVhZCwKIAkubGxzZWVrCQk9IHNlcV9sc2VlaywKZGlmZiAtLWdpdCBhL2ZzL25pbGZzMi9idG5vZGUuYyBiL2ZzL25pbGZzMi9idG5vZGUuYwppbmRleCA2YTI3MTFmLi41OTQxOTU4IDEwMDY0NAotLS0gYS9mcy9uaWxmczIvYnRub2RlLmMKKysrIGIvZnMvbmlsZnMyL2J0bm9kZS5jCkBAIC0zNiw2ICszNiw3IEBACiAKIHZvaWQgbmlsZnNfYnRub2RlX2NhY2hlX2luaXRfb25jZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqYnRuYykKIHsKKwltZW1zZXQoYnRuYywgMCwgc2l6ZW9mKCpidG5jKSk7CiAJSU5JVF9SQURJWF9UUkVFKCZidG5jLT5wYWdlX3RyZWUsIEdGUF9BVE9NSUMpOwogCXNwaW5fbG9ja19pbml0KCZidG5jLT50cmVlX2xvY2spOwogCUlOSVRfTElTVF9IRUFEKCZidG5jLT5wcml2YXRlX2xpc3QpOwpkaWZmIC0tZ2l0IGEvZnMvbmlsZnMyL2Rpci5jIGIvZnMvbmlsZnMyL2Rpci5jCmluZGV4IDFhNGZhMDQuLmUwOTcwOTkgMTAwNjQ0Ci0tLSBhL2ZzL25pbGZzMi9kaXIuYworKysgYi9mcy9uaWxmczIvZGlyLmMKQEAgLTY5Nyw3ICs2OTcsNyBAQAogCXJldHVybiAwOwogfQogCi1zdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG5pbGZzX2Rpcl9vcGVyYXRpb25zID0geworY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBuaWxmc19kaXJfb3BlcmF0aW9ucyA9IHsKIAkubGxzZWVrCQk9IGdlbmVyaWNfZmlsZV9sbHNlZWssCiAJLnJlYWQJCT0gZ2VuZXJpY19yZWFkX2RpciwKIAkucmVhZGRpcgk9IG5pbGZzX3JlYWRkaXIsCmRpZmYgLS1naXQgYS9mcy9uaWxmczIvZmlsZS5jIGIvZnMvbmlsZnMyL2ZpbGUuYwppbmRleCBmYzgyNzhjLi4zMDI5MmRmIDEwMDY0NAotLS0gYS9mcy9uaWxmczIvZmlsZS5jCisrKyBiL2ZzL25pbGZzMi9maWxlLmMKQEAgLTExNyw3ICsxMTcsNyBAQAogCXJldHVybiAwOwogfQogCi1zdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgbmlsZnNfZmlsZV92bV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IG5pbGZzX2ZpbGVfdm1fb3BzID0gewogCS5mYXVsdAkJPSBmaWxlbWFwX2ZhdWx0LAogCS5wYWdlX21rd3JpdGUJPSBuaWxmc19wYWdlX21rd3JpdGUsCiB9OwpAQCAtMTM0LDcgKzEzNCw3IEBACiAgKiBXZSBoYXZlIG1vc3RseSBOVUxMJ3MgaGVyZTogdGhlIGN1cnJlbnQgZGVmYXVsdHMgYXJlIG9rIGZvcgogICogdGhlIG5pbGZzIGZpbGVzeXN0ZW0uCiAgKi8KLXN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbmlsZnNfZmlsZV9vcGVyYXRpb25zID0geworY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBuaWxmc19maWxlX29wZXJhdGlvbnMgPSB7CiAJLmxsc2VlawkJPSBnZW5lcmljX2ZpbGVfbGxzZWVrLAogCS5yZWFkCQk9IGRvX3N5bmNfcmVhZCwKIAkud3JpdGUJCT0gZG9fc3luY193cml0ZSwKZGlmZiAtLWdpdCBhL2ZzL25pbGZzMi9pbm9kZS5jIGIvZnMvbmlsZnMyL2lub2RlLmMKaW5kZXggMmQyYzUwMS4uNTA0MDIyMCAxMDA2NDQKLS0tIGEvZnMvbmlsZnMyL2lub2RlLmMKKysrIGIvZnMvbmlsZnMyL2lub2RlLmMKQEAgLTQwMCw2ICs0MDAsNyBAQAogCWlpLT5pX2Rpcl9hY2wgPSBTX0lTUkVHKGlub2RlLT5pX21vZGUpID8KIAkJMCA6IGxlMzJfdG9fY3B1KHJhd19pbm9kZS0+aV9kaXJfYWNsKTsKICNlbmRpZgorCWlpLT5pX2Rpcl9zdGFydF9sb29rdXAgPSAwOwogCWlpLT5pX2NubyA9IDA7CiAJaW5vZGUtPmlfZ2VuZXJhdGlvbiA9IGxlMzJfdG9fY3B1KHJhd19pbm9kZS0+aV9nZW5lcmF0aW9uKTsKIApkaWZmIC0tZ2l0IGEvZnMvbmlsZnMyL21kdC5jIGIvZnMvbmlsZnMyL21kdC5jCmluZGV4IGIxOGM0OTkuLmY2MzI2MTEgMTAwNjQ0Ci0tLSBhL2ZzL25pbGZzMi9tZHQuYworKysgYi9mcy9uaWxmczIvbWR0LmMKQEAgLTQzMyw3ICs0MzMsNyBAQAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGRlZl9tZHRfaW9wczsKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRlZl9tZHRfZm9wczsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRlZl9tZHRfZm9wczsKIAogLyoKICAqIE5JTEZTMiB1c2VzIHBzZXVkbyBpbm9kZXMgZm9yIG1ldGEgZGF0YSBmaWxlcyBzdWNoIGFzIERBVCwgY3BmaWxlLCBzdWZpbGUsCmRpZmYgLS1naXQgYS9mcy9uaWxmczIvbmlsZnMuaCBiL2ZzL25pbGZzMi9uaWxmcy5oCmluZGV4IGJhZDczNjguLjRkYTZmNjcgMTAwNjQ0Ci0tLSBhL2ZzL25pbGZzMi9uaWxmcy5oCisrKyBiL2ZzL25pbGZzMi9uaWxmcy5oCkBAIC0yOTQsOSArMjk0LDkgQEAKIC8qCiAgKiBJbm9kZXMgYW5kIGZpbGVzIG9wZXJhdGlvbnMKICAqLwotZXh0ZXJuIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbmlsZnNfZGlyX29wZXJhdGlvbnM7CitleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBuaWxmc19kaXJfb3BlcmF0aW9uczsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBuaWxmc19maWxlX2lub2RlX29wZXJhdGlvbnM7Ci1leHRlcm4gc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBuaWxmc19maWxlX29wZXJhdGlvbnM7CitleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBuaWxmc19maWxlX29wZXJhdGlvbnM7CiBleHRlcm4gY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBuaWxmc19hb3BzOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG5pbGZzX2Rpcl9pbm9kZV9vcGVyYXRpb25zOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG5pbGZzX3NwZWNpYWxfaW5vZGVfb3BlcmF0aW9uczsKZGlmZiAtLWdpdCBhL2ZzL25scy9ubHNfYmFzZS5jIGIvZnMvbmxzL25sc19iYXNlLmMKaW5kZXggMjIyNGI0ZC4uNDRhODhhOSAxMDA2NDQKLS0tIGEvZnMvbmxzL25sc19iYXNlLmMKKysrIGIvZnMvbmxzL25sc19iYXNlLmMKQEAgLTEyNCwxMCArMTI0LDEwIEBACiAJd2hpbGUgKCpzICYmIGxlbiA+IDApIHsKIAkJaWYgKCpzICYgMHg4MCkgewogCQkJc2l6ZSA9IHV0ZjhfdG9fdXRmMzIocywgbGVuLCAmdSk7Ci0JCQlpZiAoc2l6ZSA8IDApIHsKLQkJCQkvKiBJZ25vcmUgY2hhcmFjdGVyIGFuZCBtb3ZlIG9uICovCi0JCQkJc2l6ZSA9IDE7Ci0JCQl9IGVsc2UgaWYgKHUgPj0gUExBTkVfU0laRSkgeworCQkJaWYgKHNpemUgPCAwKQorCQkJCXJldHVybiAtRUlOVkFMOworCisJCQlpZiAodSA+PSBQTEFORV9TSVpFKSB7CiAJCQkJdSAtPSBQTEFORV9TSVpFOwogCQkJCSpvcCsrID0gKHdjaGFyX3QpIChTVVJST0dBVEVfUEFJUiB8CiAJCQkJCQkoKHUgPj4gMTApICYgU1VSUk9HQVRFX0JJVFMpKTsKZGlmZiAtLWdpdCBhL2ZzL25vdGlmeS9kbm90aWZ5L2Rub3RpZnkuYyBiL2ZzL25vdGlmeS9kbm90aWZ5L2Rub3RpZnkuYwppbmRleCA4MjhhODg5Li43ZTU0ZTUyIDEwMDY0NAotLS0gYS9mcy9ub3RpZnkvZG5vdGlmeS9kbm90aWZ5LmMKKysrIGIvZnMvbm90aWZ5L2Rub3RpZnkvZG5vdGlmeS5jCkBAIC05MSw2ICs5MSw3IEBACiAJc3RydWN0IGRub3RpZnlfc3RydWN0ICpkbjsKIAlzdHJ1Y3QgZG5vdGlmeV9zdHJ1Y3QgKipwcmV2OwogCXN0cnVjdCBmb3duX3N0cnVjdCAqZm93bjsKKwlfX3UzMiB0ZXN0X21hc2sgPSBldmVudC0+bWFzayAmIH5GU19FVkVOVF9PTl9DSElMRDsKIAogCXRvX3RlbGwgPSBldmVudC0+dG9fdGVsbDsKIApAQCAtMTA2LDcgKzEwNyw3IEBACiAJc3Bpbl9sb2NrKCZlbnRyeS0+bG9jayk7CiAJcHJldiA9ICZkbmVudHJ5LT5kbjsKIAl3aGlsZSAoKGRuID0gKnByZXYpICE9IE5VTEwpIHsKLQkJaWYgKChkbi0+ZG5fbWFzayAmIGV2ZW50LT5tYXNrKSA9PSAwKSB7CisJCWlmICgoZG4tPmRuX21hc2sgJiB0ZXN0X21hc2spID09IDApIHsKIAkJCXByZXYgPSAmZG4tPmRuX25leHQ7CiAJCQljb250aW51ZTsKIAkJfQpkaWZmIC0tZ2l0IGEvZnMvbm90aWZ5L2lub2RlX21hcmsuYyBiL2ZzL25vdGlmeS9pbm9kZV9tYXJrLmMKaW5kZXggYzhhMDdjNi4uMzE2NWQ4NSAxMDA2NDQKLS0tIGEvZnMvbm90aWZ5L2lub2RlX21hcmsuYworKysgYi9mcy9ub3RpZnkvaW5vZGVfbWFyay5jCkBAIC0zMjQsMTEgKzMyNCwxMSBAQAogCXNwaW5fbG9jaygmZ3JvdXAtPm1hcmtfbG9jayk7CiAJc3Bpbl9sb2NrKCZpbm9kZS0+aV9sb2NrKTsKIAotCWVudHJ5LT5ncm91cCA9IGdyb3VwOwotCWVudHJ5LT5pbm9kZSA9IGlub2RlOwotCiAJbGVudHJ5ID0gZnNub3RpZnlfZmluZF9tYXJrX2VudHJ5KGdyb3VwLCBpbm9kZSk7CiAJaWYgKCFsZW50cnkpIHsKKwkJZW50cnktPmdyb3VwID0gZ3JvdXA7CisJCWVudHJ5LT5pbm9kZSA9IGlub2RlOworCiAJCWhsaXN0X2FkZF9oZWFkKCZlbnRyeS0+aV9saXN0LCAmaW5vZGUtPmlfZnNub3RpZnlfbWFya19lbnRyaWVzKTsKIAkJbGlzdF9hZGQoJmVudHJ5LT5nX2xpc3QsICZncm91cC0+bWFya19lbnRyaWVzKTsKIApkaWZmIC0tZ2l0IGEvZnMvbm90aWZ5L25vdGlmaWNhdGlvbi5jIGIvZnMvbm90aWZ5L25vdGlmaWNhdGlvbi5jCmluZGV4IDM4MTZkNTcuLmI4YmY1M2IgMTAwNjQ0Ci0tLSBhL2ZzL25vdGlmeS9ub3RpZmljYXRpb24uYworKysgYi9mcy9ub3RpZnkvbm90aWZpY2F0aW9uLmMKQEAgLTE0Myw3ICsxNDMsNyBAQAogCQkJLyogcmVtZW1iZXIsIGFmdGVyIG9sZCB3YXMgcHV0IG9uIHRoZSB3YWl0X3Egd2UgYXJlbid0CiAJCQkgKiBhbGxvd2VkIHRvIGxvb2sgYXQgdGhlIGlub2RlIGFueSBtb3JlLCBvbmx5IHRoaW5nCiAJCQkgKiBsZWZ0IHRvIGNoZWNrIHdhcyBpZiB0aGUgZmlsZV9uYW1lIGlzIHRoZSBzYW1lICovCi0JCQlpZiAob2xkLT5uYW1lX2xlbiAmJgorCQkJaWYgKCFvbGQtPm5hbWVfbGVuIHx8CiAJCQkgICAgIXN0cmNtcChvbGQtPmZpbGVfbmFtZSwgbmV3LT5maWxlX25hbWUpKQogCQkJCXJldHVybiB0cnVlOwogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9jbHVzdGVyL2hlYXJ0YmVhdC5jIGIvZnMvb2NmczIvY2x1c3Rlci9oZWFydGJlYXQuYwppbmRleCAwOWNjMjVkLi5jNDUyZDExIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9jbHVzdGVyL2hlYXJ0YmVhdC5jCisrKyBiL2ZzL29jZnMyL2NsdXN0ZXIvaGVhcnRiZWF0LmMKQEAgLTk2Niw3ICs5NjYsNyBAQAogfQogI2VuZGlmICAvKiBDT05GSUdfREVCVUdfRlMgKi8KIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbzJoYl9kZWJ1Z19mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbzJoYl9kZWJ1Z19mb3BzID0gewogCS5vcGVuID0JCW8yaGJfZGVidWdfb3BlbiwKIAkucmVsZWFzZSA9CW8yaGJfZGVidWdfcmVsZWFzZSwKIAkucmVhZCA9CQlvMmhiX2RlYnVnX3JlYWQsCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9jbHVzdGVyL25ldGRlYnVnLmMgYi9mcy9vY2ZzMi9jbHVzdGVyL25ldGRlYnVnLmMKaW5kZXggY2ZiMmJlNy4uZGE3OTRiYyAxMDA2NDQKLS0tIGEvZnMvb2NmczIvY2x1c3Rlci9uZXRkZWJ1Zy5jCisrKyBiL2ZzL29jZnMyL2NsdXN0ZXIvbmV0ZGVidWcuYwpAQCAtMjA3LDcgKzIwNyw3IEBACiAJcmV0dXJuIHNlcV9yZWxlYXNlX3ByaXZhdGUoaW5vZGUsIGZpbGUpOwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBuc3Rfc2VxX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBuc3Rfc2VxX2ZvcHMgPSB7CiAJLm9wZW4gPSBuc3RfZm9wX29wZW4sCiAJLnJlYWQgPSBzZXFfcmVhZCwKIAkubGxzZWVrID0gc2VxX2xzZWVrLApAQCAtMzg4LDcgKzM4OCw3IEBACiAJcmV0dXJuIHNlcV9yZWxlYXNlX3ByaXZhdGUoaW5vZGUsIGZpbGUpOwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzY19zZXFfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHNjX3NlcV9mb3BzID0gewogCS5vcGVuID0gc2NfZm9wX29wZW4sCiAJLnJlYWQgPSBzZXFfcmVhZCwKIAkubGxzZWVrID0gc2VxX2xzZWVrLApkaWZmIC0tZ2l0IGEvZnMvb2NmczIvZGxtL2RsbWRlYnVnLmMgYi9mcy9vY2ZzMi9kbG0vZGxtZGVidWcuYwppbmRleCBjYTQ2MDAyLi40MmIwYmFkIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9kbG0vZGxtZGVidWcuYworKysgYi9mcy9vY2ZzMi9kbG0vZGxtZGVidWcuYwpAQCAtNDc4LDcgKzQ3OCw3IEBACiAJcmV0dXJuIC1FTk9NRU07CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRlYnVnX3B1cmdlbGlzdF9mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZGVidWdfcHVyZ2VsaXN0X2ZvcHMgPSB7CiAJLm9wZW4gPQkJZGVidWdfcHVyZ2VsaXN0X29wZW4sCiAJLnJlbGVhc2UgPQlkZWJ1Z19idWZmZXJfcmVsZWFzZSwKIAkucmVhZCA9CQlkZWJ1Z19idWZmZXJfcmVhZCwKQEAgLTUzOCw3ICs1MzgsNyBAQAogCXJldHVybiAtRU5PTUVNOwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkZWJ1Z19tbGVfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRlYnVnX21sZV9mb3BzID0gewogCS5vcGVuID0JCWRlYnVnX21sZV9vcGVuLAogCS5yZWxlYXNlID0JZGVidWdfYnVmZmVyX3JlbGVhc2UsCiAJLnJlYWQgPQkJZGVidWdfYnVmZmVyX3JlYWQsCkBAIC03NDEsNyArNzQxLDcgQEAKIAlyZXR1cm4gc2VxX3JlbGVhc2VfcHJpdmF0ZShpbm9kZSwgZmlsZSk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRlYnVnX2xvY2tyZXNfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRlYnVnX2xvY2tyZXNfZm9wcyA9IHsKIAkub3BlbiA9CQlkZWJ1Z19sb2NrcmVzX29wZW4sCiAJLnJlbGVhc2UgPQlkZWJ1Z19sb2NrcmVzX3JlbGVhc2UsCiAJLnJlYWQgPQkJc2VxX3JlYWQsCkBAIC05MjUsNyArOTI1LDcgQEAKIAlyZXR1cm4gLUVOT01FTTsKIH0KIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZGVidWdfc3RhdGVfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRlYnVnX3N0YXRlX2ZvcHMgPSB7CiAJLm9wZW4gPQkJZGVidWdfc3RhdGVfb3BlbiwKIAkucmVsZWFzZSA9CWRlYnVnX2J1ZmZlcl9yZWxlYXNlLAogCS5yZWFkID0JCWRlYnVnX2J1ZmZlcl9yZWFkLApkaWZmIC0tZ2l0IGEvZnMvb2NmczIvbW1hcC5jIGIvZnMvb2NmczIvbW1hcC5jCmluZGV4IGI2MDY0OTYuLjM5NzM3NjEgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL21tYXAuYworKysgYi9mcy9vY2ZzMi9tbWFwLmMKQEAgLTIwMiw3ICsyMDIsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3Qgb2NmczJfZmlsZV92bV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IG9jZnMyX2ZpbGVfdm1fb3BzID0gewogCS5mYXVsdAkJPSBvY2ZzMl9mYXVsdCwKIAkucGFnZV9ta3dyaXRlCT0gb2NmczJfcGFnZV9ta3dyaXRlLAogfTsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL3N1cGVyLmMgYi9mcy9vY2ZzMi9zdXBlci5jCmluZGV4IDRjYzNjODkuLmMwZTQ4YWUgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL3N1cGVyLmMKKysrIGIvZnMvb2NmczIvc3VwZXIuYwpAQCAtMzczLDcgKzM3Myw3IEBACiB9CiAjZW5kaWYJLyogQ09ORklHX0RFQlVHX0ZTICovCiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG9jZnMyX29zYl9kZWJ1Z19mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgb2NmczJfb3NiX2RlYnVnX2ZvcHMgPSB7CiAJLm9wZW4gPQkJb2NmczJfb3NiX2RlYnVnX29wZW4sCiAJLnJlbGVhc2UgPQlvY2ZzMl9kZWJ1Z19yZWxlYXNlLAogCS5yZWFkID0JCW9jZnMyX2RlYnVnX3JlYWQsCmRpZmYgLS1naXQgYS9mcy9vbWZzL2Rpci5jIGIvZnMvb21mcy9kaXIuYwppbmRleCAzNjgwYmFlLi5iNDJkNjI0IDEwMDY0NAotLS0gYS9mcy9vbWZzL2Rpci5jCisrKyBiL2ZzL29tZnMvZGlyLmMKQEAgLTQ5OCw3ICs0OTgsNyBAQAogCS5ybWRpciA9IG9tZnNfcm1kaXIsCiB9OwogCi1zdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG9tZnNfZGlyX29wZXJhdGlvbnMgPSB7Citjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG9tZnNfZGlyX29wZXJhdGlvbnMgPSB7CiAJLnJlYWQgPSBnZW5lcmljX3JlYWRfZGlyLAogCS5yZWFkZGlyID0gb21mc19yZWFkZGlyLAogCS5sbHNlZWsgPSBnZW5lcmljX2ZpbGVfbGxzZWVrLApkaWZmIC0tZ2l0IGEvZnMvb21mcy9maWxlLmMgYi9mcy9vbWZzL2ZpbGUuYwppbmRleCA0ODQ1ZmJiLi4zOTk0ODdjIDEwMDY0NAotLS0gYS9mcy9vbWZzL2ZpbGUuYworKysgYi9mcy9vbWZzL2ZpbGUuYwpAQCAtMzIyLDcgKzMyMiw3IEBACiAJcmV0dXJuIGdlbmVyaWNfYmxvY2tfYm1hcChtYXBwaW5nLCBibG9jaywgb21mc19nZXRfYmxvY2spOwogfQogCi1zdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG9tZnNfZmlsZV9vcGVyYXRpb25zID0geworY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBvbWZzX2ZpbGVfb3BlcmF0aW9ucyA9IHsKIAkubGxzZWVrID0gZ2VuZXJpY19maWxlX2xsc2VlaywKIAkucmVhZCA9IGRvX3N5bmNfcmVhZCwKIAkud3JpdGUgPSBkb19zeW5jX3dyaXRlLApkaWZmIC0tZ2l0IGEvZnMvb21mcy9vbWZzLmggYi9mcy9vbWZzL29tZnMuaAppbmRleCBkZjcxMDM5Li5lYmUyZmRiIDEwMDY0NAotLS0gYS9mcy9vbWZzL29tZnMuaAorKysgYi9mcy9vbWZzL29tZnMuaApAQCAtNDQsMTQgKzQ0LDE0IEBACiBleHRlcm4gaW50IG9tZnNfY2xlYXJfcmFuZ2Uoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTY0IGJsb2NrLCBpbnQgY291bnQpOwogCiAvKiBkaXIuYyAqLwotZXh0ZXJuIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgb21mc19kaXJfb3BlcmF0aW9uczsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG9tZnNfZGlyX29wZXJhdGlvbnM7CiBleHRlcm4gY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgb21mc19kaXJfaW5vcHM7CiBleHRlcm4gaW50IG9tZnNfbWFrZV9lbXB0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTsKIGV4dGVybiBpbnQgb21mc19pc19iYWQoc3RydWN0IG9tZnNfc2JfaW5mbyAqc2JpLCBzdHJ1Y3Qgb21mc19oZWFkZXIgKmhlYWRlciwKIAkJCXU2NCBmc2Jsb2NrKTsKIAogLyogZmlsZS5jICovCi1leHRlcm4gc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBvbWZzX2ZpbGVfb3BlcmF0aW9uczsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG9tZnNfZmlsZV9vcGVyYXRpb25zOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG9tZnNfZmlsZV9pbm9wczsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIG9tZnNfYW9wczsKIGV4dGVybiB2b2lkIG9tZnNfbWFrZV9lbXB0eV90YWJsZShzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCBpbnQgb2Zmc2V0KTsKZGlmZiAtLWdpdCBhL2ZzL3BpcGUuYyBiL2ZzL3BpcGUuYwppbmRleCA1MmM0MTUxLi5hZTE3ZDAyIDEwMDY0NAotLS0gYS9mcy9waXBlLmMKKysrIGIvZnMvcGlwZS5jCkBAIC03NzcsMzYgKzc3Nyw1NSBAQAogc3RhdGljIGludAogcGlwZV9yZWFkX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCiB7Ci0JLyogV2UgY291bGQgaGF2ZSBwZXJoYXBzIHVzZWQgYXRvbWljX3QsIGJ1dCB0aGlzIGFuZCBmcmllbmRzCi0JICAgYmVsb3cgYXJlIHRoZSBvbmx5IHBsYWNlcy4gIFNvIGl0IGRvZXNuJ3Qgc2VlbSB3b3J0aHdoaWxlLiAgKi8KKwlpbnQgcmV0ID0gLUVOT0VOVDsKKwogCW11dGV4X2xvY2soJmlub2RlLT5pX211dGV4KTsKLQlpbm9kZS0+aV9waXBlLT5yZWFkZXJzKys7CisKKwlpZiAoaW5vZGUtPmlfcGlwZSkgeworCQlyZXQgPSAwOworCQlpbm9kZS0+aV9waXBlLT5yZWFkZXJzKys7CisJfQorCiAJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50CiBwaXBlX3dyaXRlX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCiB7CisJaW50IHJldCA9IC1FTk9FTlQ7CisKIAltdXRleF9sb2NrKCZpbm9kZS0+aV9tdXRleCk7Ci0JaW5vZGUtPmlfcGlwZS0+d3JpdGVycysrOworCisJaWYgKGlub2RlLT5pX3BpcGUpIHsKKwkJcmV0ID0gMDsKKwkJaW5vZGUtPmlfcGlwZS0+d3JpdGVycysrOworCX0KKwogCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludAogcGlwZV9yZHdyX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCiB7CisJaW50IHJldCA9IC1FTk9FTlQ7CisKIAltdXRleF9sb2NrKCZpbm9kZS0+aV9tdXRleCk7Ci0JaWYgKGZpbHAtPmZfbW9kZSAmIEZNT0RFX1JFQUQpCi0JCWlub2RlLT5pX3BpcGUtPnJlYWRlcnMrKzsKLQlpZiAoZmlscC0+Zl9tb2RlICYgRk1PREVfV1JJVEUpCi0JCWlub2RlLT5pX3BpcGUtPndyaXRlcnMrKzsKKworCWlmIChpbm9kZS0+aV9waXBlKSB7CisJCXJldCA9IDA7CisJCWlmIChmaWxwLT5mX21vZGUgJiBGTU9ERV9SRUFEKQorCQkJaW5vZGUtPmlfcGlwZS0+cmVhZGVycysrOworCQlpZiAoZmlscC0+Zl9tb2RlICYgRk1PREVfV1JJVEUpCisJCQlpbm9kZS0+aV9waXBlLT53cml0ZXJzKys7CisJfQorCiAJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmV0OwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvZnMvcHJvYy9hcnJheS5jIGIvZnMvcHJvYy9hcnJheS5jCmluZGV4IDBjNmJjNjAuLjA3Zjc3YTcgMTAwNjQ0Ci0tLSBhL2ZzL3Byb2MvYXJyYXkuYworKysgYi9mcy9wcm9jL2FycmF5LmMKQEAgLTMyMiw2ICszMjIsOCBAQAogCQkJcC0+bml2Y3N3KTsKIH0KIAorI2lmZGVmIENPTkZJR19NTVUKKwogc3RydWN0IHN0YWNrX3N0YXRzIHsKIAlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKIAl1bnNpZ25lZCBsb25nCXN0YXJ0cGFnZTsKQEAgLTQwMiw2ICs0MDQsMTEgQEAKIAkJbW1wdXQobW0pOwogCX0KIH0KKyNlbHNlCitzdGF0aWMgdm9pZCB0YXNrX3Nob3dfc3RhY2tfdXNhZ2Uoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCit7Cit9CisjZW5kaWYJCS8qIENPTkZJR19NTVUgKi8KIAogaW50IHByb2NfcGlkX3N0YXR1cyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBwaWRfbmFtZXNwYWNlICpucywKIAkJCXN0cnVjdCBwaWQgKnBpZCwgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQpkaWZmIC0tZ2l0IGEvZnMvcHJvYy9rY29yZS5jIGIvZnMvcHJvYy9rY29yZS5jCmluZGV4IDU2MDEzMzcuLmE0NGE3ODkgMTAwNjQ0Ci0tLSBhL2ZzL3Byb2Mva2NvcmUuYworKysgYi9mcy9wcm9jL2tjb3JlLmMKQEAgLTIzLDcgKzIzLDYgQEAKICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9tZW1vcnkuaD4KICNpbmNsdWRlIDxhc20vc2VjdGlvbnMuaD4KIApkaWZmIC0tZ2l0IGEvZnMvcHJvYy9tZW1pbmZvLmMgYi9mcy9wcm9jL21lbWluZm8uYwppbmRleCBjN2JmZjRmLi5hNjUyMzljIDEwMDY0NAotLS0gYS9mcy9wcm9jL21lbWluZm8uYworKysgYi9mcy9wcm9jL21lbWluZm8uYwpAQCAtOTksNyArOTksNyBAQAogCQkiVm1hbGxvY1VzZWQ6ICAgICU4bHUga0JcbiIKIAkJIlZtYWxsb2NDaHVuazogICAlOGx1IGtCXG4iCiAjaWZkZWYgQ09ORklHX01FTU9SWV9GQUlMVVJFCi0JCSJIYXJkd2FyZUNvcnJ1cHRlZDogJThsdSBrQlxuIgorCQkiSGFyZHdhcmVDb3JydXB0ZWQ6ICU1bHUga0JcbiIKICNlbmRpZgogCQksCiAJCUsoaS50b3RhbHJhbSksCmRpZmYgLS1naXQgYS9mcy9wcm9jL3BhZ2UuYyBiL2ZzL3Byb2MvcGFnZS5jCmluZGV4IDIyODFjMmMuLjUwMzNjZTAgMTAwNjQ0Ci0tLSBhL2ZzL3Byb2MvcGFnZS5jCisrKyBiL2ZzL3Byb2MvcGFnZS5jCkBAIC05NCw2ICs5NCw3IEBACiAjZGVmaW5lIEtQRl9DT01QT1VORF9UQUlMCTE2CiAjZGVmaW5lIEtQRl9IVUdFCQkxNwogI2RlZmluZSBLUEZfVU5FVklDVEFCTEUJCTE4CisjZGVmaW5lIEtQRl9IV1BPSVNPTgkJMTkKICNkZWZpbmUgS1BGX05PUEFHRQkJMjAKIAogI2RlZmluZSBLUEZfS1NNCQkJMjEKQEAgLTE4MCw2ICsxODEsMTAgQEAKIAl1IHw9IGtwZl9jb3B5X2JpdChrLCBLUEZfVU5FVklDVEFCTEUsCVBHX3VuZXZpY3RhYmxlKTsKIAl1IHw9IGtwZl9jb3B5X2JpdChrLCBLUEZfTUxPQ0tFRCwJUEdfbWxvY2tlZCk7CiAKKyNpZmRlZiBDT05GSUdfTUVNT1JZX0ZBSUxVUkUKKwl1IHw9IGtwZl9jb3B5X2JpdChrLCBLUEZfSFdQT0lTT04sCVBHX2h3cG9pc29uKTsKKyNlbmRpZgorCiAjaWZkZWYgQ09ORklHX0lBNjRfVU5DQUNIRURfQUxMT0NBVE9SCiAJdSB8PSBrcGZfY29weV9iaXQoaywgS1BGX1VOQ0FDSEVELAlQR191bmNhY2hlZCk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2ZzL3JvbWZzL3N0b3JhZ2UuYyBiL2ZzL3JvbWZzL3N0b3JhZ2UuYwppbmRleCBiMzIwOGFkLi43MWUyYjRkIDEwMDY0NAotLS0gYS9mcy9yb21mcy9zdG9yYWdlLmMKKysrIGIvZnMvcm9tZnMvc3RvcmFnZS5jCkBAIC0yNTMsMTEgKzI1MywxMSBAQAogCiAjaWZkZWYgQ09ORklHX1JPTUZTX09OX01URAogCWlmIChzYi0+c19tdGQpCi0JCXJldHVybiByb21mc19tdGRfc3RybmxlbihzYiwgcG9zLCBsaW1pdCk7CisJCXJldHVybiByb21mc19tdGRfc3RybmxlbihzYiwgcG9zLCBtYXhsZW4pOwogI2VuZGlmCiAjaWZkZWYgQ09ORklHX1JPTUZTX09OX0JMT0NLCiAJaWYgKHNiLT5zX2JkZXYpCi0JCXJldHVybiByb21mc19ibGtfc3RybmxlbihzYiwgcG9zLCBsaW1pdCk7CisJCXJldHVybiByb21mc19ibGtfc3RybmxlbihzYiwgcG9zLCBtYXhsZW4pOwogI2VuZGlmCiAJcmV0dXJuIC1FSU87CiB9CmRpZmYgLS1naXQgYS9mcy9zZWxlY3QuYyBiL2ZzL3NlbGVjdC5jCmluZGV4IGEyMDFmYzMuLmZkMzhjZTIgMTAwNjQ0Ci0tLSBhL2ZzL3NlbGVjdC5jCisrKyBiL2ZzL3NlbGVjdC5jCkBAIC0xNSw2ICsxNSw3IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzY2FsbHMuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CmRpZmYgLS1naXQgYS9mcy9zeXNmcy9iaW4uYyBiL2ZzL3N5c2ZzL2Jpbi5jCmluZGV4IDI1MjQ3MTQuLjYwYzcwMmIgMTAwNjQ0Ci0tLSBhL2ZzL3N5c2ZzL2Jpbi5jCisrKyBiL2ZzL3N5c2ZzL2Jpbi5jCkBAIC00MCw3ICs0MCw3IEBACiAJc3RydWN0IG11dGV4CQkJbXV0ZXg7CiAJdm9pZAkJCQkqYnVmZmVyOwogCWludAkJCQltbWFwcGVkOwotCXN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCAJKnZtX29wczsKKwljb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgKnZtX29wczsKIAlzdHJ1Y3QgZmlsZQkJCSpmaWxlOwogCXN0cnVjdCBobGlzdF9ub2RlCQlsaXN0OwogfTsKQEAgLTMzMSw3ICszMzEsNyBAQAogfQogI2VuZGlmCiAKLXN0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgYmluX3ZtX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgYmluX3ZtX29wcyA9IHsKIAkub3BlbgkJPSBiaW5fdm1hX29wZW4sCiAJLmNsb3NlCQk9IGJpbl92bWFfY2xvc2UsCiAJLmZhdWx0CQk9IGJpbl9mYXVsdCwKZGlmZiAtLWdpdCBhL2ZzL3N5c2ZzL2Rpci5jIGIvZnMvc3lzZnMvZGlyLmMKaW5kZXggMDA1MGZjNC4uNWZhZDQ4OSAxMDA2NDQKLS0tIGEvZnMvc3lzZnMvZGlyLmMKKysrIGIvZnMvc3lzZnMvZGlyLmMKQEAgLTg5NCw3ICs4OTQsOCBAQAogCiAJbXV0ZXhfbG9jaygmc3lzZnNfcmVuYW1lX211dGV4KTsKIAlCVUdfT04oIXNkLT5zX3BhcmVudCk7Ci0JbmV3X3BhcmVudF9zZCA9IG5ld19wYXJlbnRfa29iai0+c2QgPyBuZXdfcGFyZW50X2tvYmotPnNkIDogJnN5c2ZzX3Jvb3Q7CisJbmV3X3BhcmVudF9zZCA9IChuZXdfcGFyZW50X2tvYmogJiYgbmV3X3BhcmVudF9rb2JqLT5zZCkgPworCQluZXdfcGFyZW50X2tvYmotPnNkIDogJnN5c2ZzX3Jvb3Q7CiAKIAllcnJvciA9IDA7CiAJaWYgKHNkLT5zX3BhcmVudCA9PSBuZXdfcGFyZW50X3NkKQpkaWZmIC0tZ2l0IGEvZnMvc3lzZnMvZmlsZS5jIGIvZnMvc3lzZnMvZmlsZS5jCmluZGV4IDU2MWE5YzAuLmY1ZWE0NjggMTAwNjQ0Ci0tLSBhL2ZzL3N5c2ZzL2ZpbGUuYworKysgYi9mcy9zeXNmcy9maWxlLmMKQEAgLTI2OCw3ICsyNjgsNyBAQAogCXN0cnVjdCBzeXNmc19vcGVuX2RpcmVudCAqb2QsICpuZXdfb2QgPSBOVUxMOwogCiAgcmV0cnk6Ci0Jc3Bpbl9sb2NrKCZzeXNmc19vcGVuX2RpcmVudF9sb2NrKTsKKwlzcGluX2xvY2tfaXJxKCZzeXNmc19vcGVuX2RpcmVudF9sb2NrKTsKIAogCWlmICghc2QtPnNfYXR0ci5vcGVuICYmIG5ld19vZCkgewogCQlzZC0+c19hdHRyLm9wZW4gPSBuZXdfb2Q7CkBAIC0yODEsNyArMjgxLDcgQEAKIAkJbGlzdF9hZGRfdGFpbCgmYnVmZmVyLT5saXN0LCAmb2QtPmJ1ZmZlcnMpOwogCX0KIAotCXNwaW5fdW5sb2NrKCZzeXNmc19vcGVuX2RpcmVudF9sb2NrKTsKKwlzcGluX3VubG9ja19pcnEoJnN5c2ZzX29wZW5fZGlyZW50X2xvY2spOwogCiAJaWYgKG9kKSB7CiAJCWtmcmVlKG5ld19vZCk7CkBAIC0zMTUsOCArMzE1LDkgQEAKIAkJCQkgIHN0cnVjdCBzeXNmc19idWZmZXIgKmJ1ZmZlcikKIHsKIAlzdHJ1Y3Qgc3lzZnNfb3Blbl9kaXJlbnQgKm9kID0gc2QtPnNfYXR0ci5vcGVuOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlzcGluX2xvY2soJnN5c2ZzX29wZW5fZGlyZW50X2xvY2spOworCXNwaW5fbG9ja19pcnFzYXZlKCZzeXNmc19vcGVuX2RpcmVudF9sb2NrLCBmbGFncyk7CiAKIAlsaXN0X2RlbCgmYnVmZmVyLT5saXN0KTsKIAlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmb2QtPnJlZmNudCkpCkBAIC0zMjQsNyArMzI1LDcgQEAKIAllbHNlCiAJCW9kID0gTlVMTDsKIAotCXNwaW5fdW5sb2NrKCZzeXNmc19vcGVuX2RpcmVudF9sb2NrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzeXNmc19vcGVuX2RpcmVudF9sb2NrLCBmbGFncyk7CiAKIAlrZnJlZShvZCk7CiB9CkBAIC00NTYsOCArNDU3LDkgQEAKIHZvaWQgc3lzZnNfbm90aWZ5X2RpcmVudChzdHJ1Y3Qgc3lzZnNfZGlyZW50ICpzZCkKIHsKIAlzdHJ1Y3Qgc3lzZnNfb3Blbl9kaXJlbnQgKm9kOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlzcGluX2xvY2soJnN5c2ZzX29wZW5fZGlyZW50X2xvY2spOworCXNwaW5fbG9ja19pcnFzYXZlKCZzeXNmc19vcGVuX2RpcmVudF9sb2NrLCBmbGFncyk7CiAKIAlvZCA9IHNkLT5zX2F0dHIub3BlbjsKIAlpZiAob2QpIHsKQEAgLTQ2NSw3ICs0NjcsNyBAQAogCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJm9kLT5wb2xsKTsKIAl9CiAKLQlzcGluX3VubG9jaygmc3lzZnNfb3Blbl9kaXJlbnRfbG9jayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3lzZnNfb3Blbl9kaXJlbnRfbG9jaywgZmxhZ3MpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoc3lzZnNfbm90aWZ5X2RpcmVudCk7CiAKZGlmZiAtLWdpdCBhL2ZzL3ViaWZzL2ZpbGUuYyBiL2ZzL3ViaWZzL2ZpbGUuYwppbmRleCAyZTY0ODFhLi4xMDA5YWRjIDEwMDY0NAotLS0gYS9mcy91Ymlmcy9maWxlLmMKKysrIGIvZnMvdWJpZnMvZmlsZS5jCkBAIC0xNTM0LDcgKzE1MzQsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgdWJpZnNfZmlsZV92bV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHViaWZzX2ZpbGVfdm1fb3BzID0gewogCS5mYXVsdCAgICAgICAgPSBmaWxlbWFwX2ZhdWx0LAogCS5wYWdlX21rd3JpdGUgPSB1Ymlmc192bV9wYWdlX21rd3JpdGUsCiB9OwpkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfYW9wcy5jIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfYW9wcy5jCmluZGV4IDM4MTg1NDQuLmMyZTMwZWUgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2FvcHMuYworKysgYi9mcy94ZnMvbGludXgtMi42L3hmc19hb3BzLmMKQEAgLTE4NiwxOSArMTg2LDM3IEBACiB9CiAKIC8qCisgKiBJZiB0aGUgZW5kIG9mIHRoZSBjdXJyZW50IGlvZW5kIGlzIGJleW9uZCB0aGUgY3VycmVudCBFT0YsCisgKiByZXR1cm4gdGhlIG5ldyBFT0YgdmFsdWUsIG90aGVyd2lzZSB6ZXJvLgorICovCitTVEFUSUMgeGZzX2ZzaXplX3QKK3hmc19pb2VuZF9uZXdfZW9mKAorCXhmc19pb2VuZF90CQkqaW9lbmQpCit7CisJeGZzX2lub2RlX3QJCSppcCA9IFhGU19JKGlvZW5kLT5pb19pbm9kZSk7CisJeGZzX2ZzaXplX3QJCWlzaXplOworCXhmc19mc2l6ZV90CQlic2l6ZTsKKworCWJzaXplID0gaW9lbmQtPmlvX29mZnNldCArIGlvZW5kLT5pb19zaXplOworCWlzaXplID0gTUFYKGlwLT5pX3NpemUsIGlwLT5pX25ld19zaXplKTsKKwlpc2l6ZSA9IE1JTihpc2l6ZSwgYnNpemUpOworCXJldHVybiBpc2l6ZSA+IGlwLT5pX2QuZGlfc2l6ZSA/IGlzaXplIDogMDsKK30KKworLyoKICAqIFVwZGF0ZSBvbi1kaXNrIGZpbGUgc2l6ZSBub3cgdGhhdCBkYXRhIGhhcyBiZWVuIHdyaXR0ZW4gdG8gZGlzay4KICAqIFRoZSBjdXJyZW50IGluLW1lbW9yeSBmaWxlIHNpemUgaXMgaV9zaXplLiAgSWYgYSB3cml0ZSBpcyBiZXlvbmQKICAqIGVvZiBpX25ld19zaXplIHdpbGwgYmUgdGhlIGludGVuZGVkIGZpbGUgc2l6ZSB1bnRpbCBpX3NpemUgaXMKICAqIHVwZGF0ZWQuICBJZiB0aGlzIHdyaXRlIGRvZXMgbm90IGV4dGVuZCBhbGwgdGhlIHdheSB0byB0aGUgdmFsaWQKICAqIGZpbGUgc2l6ZSB0aGVuIHJlc3RyaWN0IHRoaXMgdXBkYXRlIHRvIHRoZSBlbmQgb2YgdGhlIHdyaXRlLgogICovCisKIFNUQVRJQyB2b2lkCiB4ZnNfc2V0ZmlsZXNpemUoCiAJeGZzX2lvZW5kX3QJCSppb2VuZCkKIHsKIAl4ZnNfaW5vZGVfdAkJKmlwID0gWEZTX0koaW9lbmQtPmlvX2lub2RlKTsKIAl4ZnNfZnNpemVfdAkJaXNpemU7Ci0JeGZzX2ZzaXplX3QJCWJzaXplOwogCiAJQVNTRVJUKChpcC0+aV9kLmRpX21vZGUgJiBTX0lGTVQpID09IFNfSUZSRUcpOwogCUFTU0VSVChpb2VuZC0+aW9fdHlwZSAhPSBJT01BUF9SRUFEKTsKQEAgLTIwNiwxNiArMjI0LDEwIEBACiAJaWYgKHVubGlrZWx5KGlvZW5kLT5pb19lcnJvcikpCiAJCXJldHVybjsKIAotCWJzaXplID0gaW9lbmQtPmlvX29mZnNldCArIGlvZW5kLT5pb19zaXplOwotCiAJeGZzX2lsb2NrKGlwLCBYRlNfSUxPQ0tfRVhDTCk7Ci0KLQlpc2l6ZSA9IE1BWChpcC0+aV9zaXplLCBpcC0+aV9uZXdfc2l6ZSk7Ci0JaXNpemUgPSBNSU4oaXNpemUsIGJzaXplKTsKLQotCWlmIChpcC0+aV9kLmRpX3NpemUgPCBpc2l6ZSkgeworCWlzaXplID0geGZzX2lvZW5kX25ld19lb2YoaW9lbmQpOworCWlmIChpc2l6ZSkgewogCQlpcC0+aV9kLmRpX3NpemUgPSBpc2l6ZTsKLQkJaXAtPmlfdXBkYXRlX2NvcmUgPSAxOwogCQl4ZnNfbWFya19pbm9kZV9kaXJ0eV9zeW5jKGlwKTsKIAl9CiAKQEAgLTQwNCwxMCArNDE2LDE2IEBACiAJc3RydWN0IGJpbwkqYmlvKQogewogCWF0b21pY19pbmMoJmlvZW5kLT5pb19yZW1haW5pbmcpOwotCiAJYmlvLT5iaV9wcml2YXRlID0gaW9lbmQ7CiAJYmlvLT5iaV9lbmRfaW8gPSB4ZnNfZW5kX2JpbzsKIAorCS8qCisJICogSWYgdGhlIEkvTyBpcyBiZXlvbmQgRU9GIHdlIG1hcmsgdGhlIGlub2RlIGRpcnR5IGltbWVkaWF0ZWx5CisJICogYnV0IGRvbid0IHVwZGF0ZSB0aGUgaW5vZGUgc2l6ZSB1bnRpbCBJL08gY29tcGxldGlvbi4KKwkgKi8KKwlpZiAoeGZzX2lvZW5kX25ld19lb2YoaW9lbmQpKQorCQl4ZnNfbWFya19pbm9kZV9kaXJ0eV9zeW5jKFhGU19JKGlvZW5kLT5pb19pbm9kZSkpOworCiAJc3VibWl0X2JpbyhXUklURSwgYmlvKTsKIAlBU1NFUlQoIWJpb19mbGFnZ2VkKGJpbywgQklPX0VPUE5PVFNVUFApKTsKIAliaW9fcHV0KGJpbyk7CmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19maWxlLmMgYi9mcy94ZnMvbGludXgtMi42L3hmc19maWxlLmMKaW5kZXggOTg4ZDhmOC4uZWZmNjFlMiAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfZmlsZS5jCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2ZpbGUuYwpAQCAtNDIsNyArNDIsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvZGNhY2hlLmg+CiAKLXN0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgeGZzX2ZpbGVfdm1fb3BzOworc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCB4ZnNfZmlsZV92bV9vcHM7CiAKIFNUQVRJQyBzc2l6ZV90CiB4ZnNfZmlsZV9haW9fcmVhZCgKQEAgLTE3NiwxNCArMTc2LDcgQEAKIAlzdHJ1Y3QgZGVudHJ5CQkqZGVudHJ5LAogCWludAkJCWRhdGFzeW5jKQogewotCXN0cnVjdCBpbm9kZQkJKmlub2RlID0gZGVudHJ5LT5kX2lub2RlOwotCXN0cnVjdCB4ZnNfaW5vZGUJKmlwID0gWEZTX0koaW5vZGUpOwotCWludAkJCWVycm9yOwotCi0JLyogY2FwdHVyZSBzaXplIHVwZGF0ZXMgaW4gSS9PIGNvbXBsZXRpb24gYmVmb3JlIHdyaXRpbmcgdGhlIGlub2RlLiAqLwotCWVycm9yID0gZmlsZW1hcF9mZGF0YXdhaXQoaW5vZGUtPmlfbWFwcGluZyk7Ci0JaWYgKGVycm9yKQotCQlyZXR1cm4gZXJyb3I7CisJc3RydWN0IHhmc19pbm9kZQkqaXAgPSBYRlNfSShkZW50cnktPmRfaW5vZGUpOwogCiAJeGZzX2lmbGFnc19jbGVhcihpcCwgWEZTX0lUUlVOQ0FURUQpOwogCXJldHVybiAteGZzX2ZzeW5jKGlwKTsKQEAgLTI4MCw3ICsyNzMsNyBAQAogCS5mc3luYwkJPSB4ZnNfZmlsZV9mc3luYywKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgeGZzX2ZpbGVfdm1fb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCB4ZnNfZmlsZV92bV9vcHMgPSB7CiAJLmZhdWx0CQk9IGZpbGVtYXBfZmF1bHQsCiAJLnBhZ2VfbWt3cml0ZQk9IHhmc192bV9wYWdlX21rd3JpdGUsCiB9OwpkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfaW9wcy5jIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfaW9wcy5jCmluZGV4IGRhMDE1OWQuLmNkNDJlZjcgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2lvcHMuYworKysgYi9mcy94ZnMvbGludXgtMi42L3hmc19pb3BzLmMKQEAgLTU3LDE5ICs1NywyMiBAQAogI2luY2x1ZGUgPGxpbnV4L2ZpZW1hcC5oPgogCiAvKgotICogQnJpbmcgdGhlIGF0aW1lIGluIHRoZSBYRlMgaW5vZGUgdXB0b2RhdGUuCi0gKiBVc2VkIGJlZm9yZSBsb2dnaW5nIHRoZSBpbm9kZSB0byBkaXNrIG9yIHdoZW4gdGhlIExpbnV4IGlub2RlIGdvZXMgYXdheS4KKyAqIEJyaW5nIHRoZSB0aW1lc3RhbXBzIGluIHRoZSBYRlMgaW5vZGUgdXB0b2RhdGUuCisgKgorICogVXNlZCBiZWZvcmUgd3JpdGluZyB0aGUgaW5vZGUgdG8gZGlzay4KICAqLwogdm9pZAoteGZzX3N5bmNocm9uaXplX2F0aW1lKAoreGZzX3N5bmNocm9uaXplX3RpbWVzKAogCXhmc19pbm9kZV90CSppcCkKIHsKIAlzdHJ1Y3QgaW5vZGUJKmlub2RlID0gVkZTX0koaXApOwogCi0JaWYgKCEoaW5vZGUtPmlfc3RhdGUgJiBJX0NMRUFSKSkgewotCQlpcC0+aV9kLmRpX2F0aW1lLnRfc2VjID0gKF9faW50MzJfdClpbm9kZS0+aV9hdGltZS50dl9zZWM7Ci0JCWlwLT5pX2QuZGlfYXRpbWUudF9uc2VjID0gKF9faW50MzJfdClpbm9kZS0+aV9hdGltZS50dl9uc2VjOwotCX0KKwlpcC0+aV9kLmRpX2F0aW1lLnRfc2VjID0gKF9faW50MzJfdClpbm9kZS0+aV9hdGltZS50dl9zZWM7CisJaXAtPmlfZC5kaV9hdGltZS50X25zZWMgPSAoX19pbnQzMl90KWlub2RlLT5pX2F0aW1lLnR2X25zZWM7CisJaXAtPmlfZC5kaV9jdGltZS50X3NlYyA9IChfX2ludDMyX3QpaW5vZGUtPmlfY3RpbWUudHZfc2VjOworCWlwLT5pX2QuZGlfY3RpbWUudF9uc2VjID0gKF9faW50MzJfdClpbm9kZS0+aV9jdGltZS50dl9uc2VjOworCWlwLT5pX2QuZGlfbXRpbWUudF9zZWMgPSAoX19pbnQzMl90KWlub2RlLT5pX210aW1lLnR2X3NlYzsKKwlpcC0+aV9kLmRpX210aW1lLnRfbnNlYyA9IChfX2ludDMyX3QpaW5vZGUtPmlfbXRpbWUudHZfbnNlYzsKIH0KIAogLyoKQEAgLTEwNiwzMiArMTA5LDIwIEBACiAJaWYgKChmbGFncyAmIFhGU19JQ0hHVElNRV9NT0QpICYmCiAJICAgICF0aW1lc3BlY19lcXVhbCgmaW5vZGUtPmlfbXRpbWUsICZ0dikpIHsKIAkJaW5vZGUtPmlfbXRpbWUgPSB0djsKLQkJaXAtPmlfZC5kaV9tdGltZS50X3NlYyA9IChfX2ludDMyX3QpdHYudHZfc2VjOwotCQlpcC0+aV9kLmRpX210aW1lLnRfbnNlYyA9IChfX2ludDMyX3QpdHYudHZfbnNlYzsKIAkJc3luY19pdCA9IDE7CiAJfQogCWlmICgoZmxhZ3MgJiBYRlNfSUNIR1RJTUVfQ0hHKSAmJgogCSAgICAhdGltZXNwZWNfZXF1YWwoJmlub2RlLT5pX2N0aW1lLCAmdHYpKSB7CiAJCWlub2RlLT5pX2N0aW1lID0gdHY7Ci0JCWlwLT5pX2QuZGlfY3RpbWUudF9zZWMgPSAoX19pbnQzMl90KXR2LnR2X3NlYzsKLQkJaXAtPmlfZC5kaV9jdGltZS50X25zZWMgPSAoX19pbnQzMl90KXR2LnR2X25zZWM7CiAJCXN5bmNfaXQgPSAxOwogCX0KIAogCS8qCi0JICogV2UgdXBkYXRlIHRoZSBpX3VwZGF0ZV9jb3JlIGZpZWxkIF9hZnRlcl8gY2hhbmdpbmcKLQkgKiB0aGUgdGltZXN0YW1wcyBpbiBvcmRlciB0byBjb29yZGluYXRlIHByb3Blcmx5IHdpdGgKLQkgKiB4ZnNfaWZsdXNoKCkgc28gdGhhdCB3ZSBkb24ndCBsb3NlIHRpbWVzdGFtcCB1cGRhdGVzLgotCSAqIFRoaXMga2VlcHMgdXMgZnJvbSBoYXZpbmcgdG8gaG9sZCB0aGUgaW5vZGUgbG9jawotCSAqIHdoaWxlIGRvaW5nIHRoaXMuICBXZSB1c2UgdGhlIFNZTkNIUk9OSVpFIG1hY3JvIHRvCi0JICogZW5zdXJlIHRoYXQgdGhlIGNvbXBpbGVyIGRvZXMgbm90IHJlb3JkZXIgdGhlIHVwZGF0ZQotCSAqIG9mIGlfdXBkYXRlX2NvcmUgYWJvdmUgdGhlIHRpbWVzdGFtcCB1cGRhdGVzIGFib3ZlLgorCSAqIFVwZGF0ZSBjb21wbGV0ZSAtIG5vdyBtYWtlIHN1cmUgZXZlcnlvbmUga25vd3MgdGhhdCB0aGUgaW5vZGUKKwkgKiBpcyBkaXJ0eS4KIAkgKi8KLQlpZiAoc3luY19pdCkgewotCQlTWU5DSFJPTklaRSgpOwotCQlpcC0+aV91cGRhdGVfY29yZSA9IDE7CisJaWYgKHN5bmNfaXQpCiAJCXhmc19tYXJrX2lub2RlX2RpcnR5X3N5bmMoaXApOwotCX0KIH0KIAogLyoKQEAgLTUwNiwxMCArNDk3LDggQEAKIAlzdGF0LT5naWQgPSBpcC0+aV9kLmRpX2dpZDsKIAlzdGF0LT5pbm8gPSBpcC0+aV9pbm87CiAJc3RhdC0+YXRpbWUgPSBpbm9kZS0+aV9hdGltZTsKLQlzdGF0LT5tdGltZS50dl9zZWMgPSBpcC0+aV9kLmRpX210aW1lLnRfc2VjOwotCXN0YXQtPm10aW1lLnR2X25zZWMgPSBpcC0+aV9kLmRpX210aW1lLnRfbnNlYzsKLQlzdGF0LT5jdGltZS50dl9zZWMgPSBpcC0+aV9kLmRpX2N0aW1lLnRfc2VjOwotCXN0YXQtPmN0aW1lLnR2X25zZWMgPSBpcC0+aV9kLmRpX2N0aW1lLnRfbnNlYzsKKwlzdGF0LT5tdGltZSA9IGlub2RlLT5pX210aW1lOworCXN0YXQtPmN0aW1lID0gaW5vZGUtPmlfY3RpbWU7CiAJc3RhdC0+YmxvY2tzID0KIAkJWEZTX0ZTQl9UT19CQihtcCwgaXAtPmlfZC5kaV9uYmxvY2tzICsgaXAtPmlfZGVsYXllZF9ibGtzKTsKIApkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfbHJ3LmMgYi9mcy94ZnMvbGludXgtMi42L3hmc19scncuYwppbmRleCA0OWU0YTZhLi4wNzIwNTBmIDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L3hmc19scncuYworKysgYi9mcy94ZnMvbGludXgtMi42L3hmc19scncuYwpAQCAtNjY3LDcgKzY2Nyw3IEBACiAJCXhpcC0+aV9uZXdfc2l6ZSA9IG5ld19zaXplOwogCiAJaWYgKGxpa2VseSghKGlvZmxhZ3MgJiBJT19JTlZJUykpKQotCQl4ZnNfaWNoZ3RpbWUoeGlwLCBYRlNfSUNIR1RJTUVfTU9EIHwgWEZTX0lDSEdUSU1FX0NIRyk7CisJCWZpbGVfdXBkYXRlX3RpbWUoZmlsZSk7CiAKIAkvKgogCSAqIElmIHRoZSBvZmZzZXQgaXMgYmV5b25kIHRoZSBzaXplIG9mIHRoZSBmaWxlLCB3ZSBoYXZlIGEgY291cGxlCmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19xdW90YW9wcy5jIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfcXVvdGFvcHMuYwppbmRleCA5ZTQxZjkxLi4zZDRhMGM4IDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L3hmc19xdW90YW9wcy5jCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX3F1b3Rhb3BzLmMKQEAgLTgwLDcgKzgwLDcgQEAKIAogCWlmIChzYi0+c19mbGFncyAmIE1TX1JET05MWSkKIAkJcmV0dXJuIC1FUk9GUzsKLQlpZiAoIVhGU19JU19RVU9UQV9SVU5OSU5HKG1wKSkKKwlpZiAob3AgIT0gUV9YUVVPVEFSTSAmJiAhWEZTX0lTX1FVT1RBX1JVTk5JTkcobXApKQogCQlyZXR1cm4gLUVOT1NZUzsKIAlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCiAJCXJldHVybiAtRVBFUk07CmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19zdXBlci5jIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfc3VwZXIuYwppbmRleCBiZGQ0MWM4Li4xOGE0YjhlIDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L3hmc19zdXBlci5jCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX3N1cGVyLmMKQEAgLTk3Nyw2ICs5NzcsMjggQEAKIH0KIAogLyoKKyAqIERpcnR5IHRoZSBYRlMgaW5vZGUgd2hlbiBtYXJrX2lub2RlX2RpcnR5X3N5bmMoKSBpcyBjYWxsZWQgc28gdGhhdAorICogd2UgY2F0Y2ggdW5sb2dnZWQgVkZTIGxldmVsIHVwZGF0ZXMgdG8gdGhlIGlub2RlLiBDYXJlIG11c3QgYmUgdGFrZW4KKyAqIGhlcmUgLSB0aGUgdHJhbnNhY3Rpb24gY29kZSBjYWxscyBtYXJrX2lub2RlX2RpcnR5X3N5bmMoKSB0byBtYXJrIHRoZQorICogVkZTIGlub2RlIGRpcnR5IGluIGEgdHJhbnNhY3Rpb24gYW5kIGNsZWFycyB0aGUgaV91cGRhdGVfY29yZSBmaWVsZDsKKyAqIGl0IG11c3QgY2xlYXIgdGhlIGZpZWxkIGFmdGVyIGNhbGxpbmcgbWFya19pbm9kZV9kaXJ0eV9zeW5jKCkgdG8KKyAqIGNvcnJlY3RseSBpbmRpY2F0ZSB0aGF0IHRoZSBkaXJ0eSBzdGF0ZSBoYXMgYmVlbiBwcm9wYWdhdGVkIGludG8gdGhlCisgKiBpbm9kZSBsb2cgaXRlbS4KKyAqCisgKiBXZSBuZWVkIHRoZSBiYXJyaWVyKCkgdG8gbWFpbnRhaW4gY29ycmVjdCBvcmRlcmluZyBiZXR3ZWVuIHVubG9nZ2VkCisgKiB1cGRhdGVzIGFuZCB0aGUgdHJhbnNhY3Rpb24gY29tbWl0IGNvZGUgdGhhdCBjbGVhcnMgdGhlIGlfdXBkYXRlX2NvcmUKKyAqIGZpZWxkLiBUaGlzIHJlcXVpcmVzIGFsbCB1cGRhdGVzIHRvIGJlIGNvbXBsZXRlZCBiZWZvcmUgbWFya2luZyB0aGUKKyAqIGlub2RlIGRpcnR5LgorICovCitTVEFUSUMgdm9pZAoreGZzX2ZzX2RpcnR5X2lub2RlKAorCXN0cnVjdCBpbm9kZQkqaW5vZGUpCit7CisJYmFycmllcigpOworCVhGU19JKGlub2RlKS0+aV91cGRhdGVfY29yZSA9IDE7Cit9CisKKy8qCiAgKiBBdHRlbXB0IHRvIGZsdXNoIHRoZSBpbm9kZSwgdGhpcyB3aWxsIGFjdHVhbGx5IGZhaWwKICAqIGlmIHRoZSBpbm9kZSBpcyBwaW5uZWQsIGJ1dCB3ZSBkaXJ0eSB0aGUgaW5vZGUgYWdhaW4KICAqIGF0IHRoZSBwb2ludCB3aGVuIGl0IGlzIHVucGlubmVkIGFmdGVyIGEgbG9nIHdyaXRlLApAQCAtMTEyNiw3ICsxMTQ4LDcgQEAKIH0KIAogU1RBVElDIGludAoteGZzX2ZzX3N5bmNfc3VwZXIoCit4ZnNfZnNfc3luY19mcygKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sJKnNiLAogCWludAkJCXdhaXQpCiB7CkBAIC0xMTM0LDIzICsxMTU2LDIzIEBACiAJaW50CQkJZXJyb3I7CiAKIAkvKgotCSAqIFRyZWF0IGEgc3luYyBvcGVyYXRpb24gbGlrZSBhIGZyZWV6ZS4gIFRoaXMgaXMgdG8gd29yawotCSAqIGFyb3VuZCBhIHJhY2UgaW4gc3luY19pbm9kZXMoKSB3aGljaCB3b3JrcyBpbiB0d28gcGhhc2VzCi0JICogLSBhbiBhc3luY2hyb25vdXMgZmx1c2gsIHdoaWNoIGNhbiB3cml0ZSBvdXQgYW4gaW5vZGUKLQkgKiB3aXRob3V0IHdhaXRpbmcgZm9yIGZpbGUgc2l6ZSB1cGRhdGVzIHRvIGNvbXBsZXRlLCBhbmQgYQotCSAqIHN5bmNocm9ub3VzIGZsdXNoLCB3aGljaCB3b250IGRvIGFueXRoaW5nIGJlY2F1c2UgdGhlCi0JICogYXN5bmMgZmx1c2ggcmVtb3ZlZCB0aGUgaW5vZGUncyBkaXJ0eSBmbGFnLiAgQWxzbwotCSAqIHN5bmNfaW5vZGVzKCkgd2lsbCBub3Qgc2VlIGFueSBmaWxlcyB0aGF0IGp1c3QgaGF2ZQotCSAqIG91dHN0YW5kaW5nIHRyYW5zYWN0aW9ucyB0byBiZSBmbHVzaGVkIGJlY2F1c2Ugd2UgZG9uJ3QKLQkgKiBkaXJ0eSB0aGUgTGludXggaW5vZGUgdW50aWwgYWZ0ZXIgdGhlIHRyYW5zYWN0aW9uIEkvTwotCSAqIGNvbXBsZXRlcy4KKwkgKiBOb3QgbXVjaCB3ZSBjYW4gZG8gZm9yIHRoZSBmaXJzdCBhc3luYyBwYXNzLiAgV3JpdGluZyBvdXQgdGhlCisJICogc3VwZXJibG9jayB3b3VsZCBiZSBjb3VudGVyLXByb2R1Y3RpdmUgYXMgd2UgYXJlIGdvaW5nIHRvIHJlZGlydHkKKwkgKiB3aGVuIHdyaXRpbmcgb3V0IG90aGVyIGRhdGEgYW5kIG1ldGFkYXRhIChhbmQgd3JpdGluZyBvdXQgYSBzaW5nbGUKKwkgKiBibG9jayBpcyBxdWl0ZSBmYXN0IGFueXdheSkuCisJICoKKwkgKiBUcnkgdG8gYXN5bmNocm9ub3VzbHkga2ljayBvZmYgcXVvdGEgc3luY2luZyBhdCBsZWFzdC4KIAkgKi8KLQlpZiAod2FpdCB8fCB1bmxpa2VseShzYi0+c19mcm96ZW4gPT0gU0JfRlJFRVpFX1dSSVRFKSkKLQkJZXJyb3IgPSB4ZnNfcXVpZXNjZV9kYXRhKG1wKTsKLQllbHNlCi0JCWVycm9yID0geGZzX3N5bmNfZnNkYXRhKG1wLCAwKTsKKwlpZiAoIXdhaXQpIHsKKwkJeGZzX3FtX3N5bmMobXAsIFNZTkNfVFJZTE9DSyk7CisJCXJldHVybiAwOworCX0KIAotCWlmICh1bmxpa2VseShsYXB0b3BfbW9kZSkpIHsKKwllcnJvciA9IHhmc19xdWllc2NlX2RhdGEobXApOworCWlmIChlcnJvcikKKwkJcmV0dXJuIC1lcnJvcjsKKworCWlmIChsYXB0b3BfbW9kZSkgewogCQlpbnQJcHJldl9zeW5jX3NlcSA9IG1wLT5tX3N5bmNfc2VxOwogCiAJCS8qCkBAIC0xMTY5LDcgKzExOTEsNyBAQAogCQkJCW1wLT5tX3N5bmNfc2VxICE9IHByZXZfc3luY19zZXEpOwogCX0KIAotCXJldHVybiAtZXJyb3I7CisJcmV0dXJuIDA7CiB9CiAKIFNUQVRJQyBpbnQKQEAgLTE1MzksMTAgKzE1NjEsMTEgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyB4ZnNfc3VwZXJfb3BlcmF0aW9ucyA9IHsKIAkuYWxsb2NfaW5vZGUJCT0geGZzX2ZzX2FsbG9jX2lub2RlLAogCS5kZXN0cm95X2lub2RlCQk9IHhmc19mc19kZXN0cm95X2lub2RlLAorCS5kaXJ0eV9pbm9kZQkJPSB4ZnNfZnNfZGlydHlfaW5vZGUsCiAJLndyaXRlX2lub2RlCQk9IHhmc19mc193cml0ZV9pbm9kZSwKIAkuY2xlYXJfaW5vZGUJCT0geGZzX2ZzX2NsZWFyX2lub2RlLAogCS5wdXRfc3VwZXIJCT0geGZzX2ZzX3B1dF9zdXBlciwKLQkuc3luY19mcwkJPSB4ZnNfZnNfc3luY19zdXBlciwKKwkuc3luY19mcwkJPSB4ZnNfZnNfc3luY19mcywKIAkuZnJlZXplX2ZzCQk9IHhmc19mc19mcmVlemUsCiAJLnN0YXRmcwkJCT0geGZzX2ZzX3N0YXRmcywKIAkucmVtb3VudF9mcwkJPSB4ZnNfZnNfcmVtb3VudCwKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX3N5bmMuYyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX3N5bmMuYwppbmRleCAzMjBiZTZhLi45NjFkZjBhIDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L3hmc19zeW5jLmMKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfc3luYy5jCkBAIC0zMDksMTEgKzMwOSwxNSBAQAogU1RBVElDIGludAogeGZzX2NvbW1pdF9kdW1teV90cmFucygKIAlzdHJ1Y3QgeGZzX21vdW50CSptcCwKLQl1aW50CQkJbG9nX2ZsYWdzKQorCXVpbnQJCQlmbGFncykKIHsKIAlzdHJ1Y3QgeGZzX2lub2RlCSppcCA9IG1wLT5tX3Jvb3RpcDsKIAlzdHJ1Y3QgeGZzX3RyYW5zCSp0cDsKIAlpbnQJCQllcnJvcjsKKwlpbnQJCQlsb2dfZmxhZ3MgPSBYRlNfTE9HX0ZPUkNFOworCisJaWYgKGZsYWdzICYgU1lOQ19XQUlUKQorCQlsb2dfZmxhZ3MgfD0gWEZTX0xPR19TWU5DOwogCiAJLyoKIAkgKiBQdXQgYSBkdW1teSB0cmFuc2FjdGlvbiBpbiB0aGUgbG9nIHRvIHRlbGwgcmVjb3ZlcnkKQEAgLTMzMSwxMyArMzM1LDEyIEBACiAJeGZzX3RyYW5zX2lqb2luKHRwLCBpcCwgWEZTX0lMT0NLX0VYQ0wpOwogCXhmc190cmFuc19paG9sZCh0cCwgaXApOwogCXhmc190cmFuc19sb2dfaW5vZGUodHAsIGlwLCBYRlNfSUxPR19DT1JFKTsKLQkvKiBYWFgoaGNoKTogaWdub3JpbmcgdGhlIGVycm9yIGhlcmUuLiAqLwogCWVycm9yID0geGZzX3RyYW5zX2NvbW1pdCh0cCwgMCk7Ci0KIAl4ZnNfaXVubG9jayhpcCwgWEZTX0lMT0NLX0VYQ0wpOwogCisJLyogdGhlIGxvZyBmb3JjZSBlbnN1cmVzIHRoaXMgdHJhbnNhY3Rpb24gaXMgcHVzaGVkIHRvIGRpc2sgKi8KIAl4ZnNfbG9nX2ZvcmNlKG1wLCAwLCBsb2dfZmxhZ3MpOwotCXJldHVybiAwOworCXJldHVybiBlcnJvcjsKIH0KIAogaW50CkBAIC0zODUsNyArMzg4LDIwIEBACiAJZWxzZQogCQlYRlNfQlVGX0FTWU5DKGJwKTsKIAotCXJldHVybiB4ZnNfYndyaXRlKG1wLCBicCk7CisJZXJyb3IgPSB4ZnNfYndyaXRlKG1wLCBicCk7CisJaWYgKGVycm9yKQorCQlyZXR1cm4gZXJyb3I7CisKKwkvKgorCSAqIElmIHRoaXMgaXMgYSBkYXRhIGludGVncml0eSBzeW5jIG1ha2Ugc3VyZSBhbGwgcGVuZGluZyBidWZmZXJzCisJICogYXJlIGZsdXNoZWQgb3V0IGZvciB0aGUgbG9nIGNvdmVyYWdlIGNoZWNrIGJlbG93LgorCSAqLworCWlmIChmbGFncyAmIFNZTkNfV0FJVCkKKwkJeGZzX2ZsdXNoX2J1ZnRhcmcobXAtPm1fZGRldl90YXJncCwgMSk7CisKKwlpZiAoeGZzX2xvZ19uZWVkX2NvdmVyZWQobXApKQorCQllcnJvciA9IHhmc19jb21taXRfZHVtbXlfdHJhbnMobXAsIGZsYWdzKTsKKwlyZXR1cm4gZXJyb3I7CiAKICBvdXRfYnJlbHNlOgogCXhmc19idWZfcmVsc2UoYnApOwpAQCAtNDE5LDE0ICs0MzUsMTYgQEAKIAkvKiBwdXNoIG5vbi1ibG9ja2luZyAqLwogCXhmc19zeW5jX2RhdGEobXAsIDApOwogCXhmc19xbV9zeW5jKG1wLCBTWU5DX1RSWUxPQ0spOwotCXhmc19maWxlc3RyZWFtX2ZsdXNoKG1wKTsKIAotCS8qIHB1c2ggYW5kIGJsb2NrICovCisJLyogcHVzaCBhbmQgYmxvY2sgdGlsbCBjb21wbGV0ZSAqLwogCXhmc19zeW5jX2RhdGEobXAsIFNZTkNfV0FJVCk7CiAJeGZzX3FtX3N5bmMobXAsIFNZTkNfV0FJVCk7CiAKKwkvKiBkcm9wIGlub2RlIHJlZmVyZW5jZXMgcGlubmVkIGJ5IGZpbGVzdHJlYW1zICovCisJeGZzX2ZpbGVzdHJlYW1fZmx1c2gobXApOworCiAJLyogd3JpdGUgc3VwZXJibG9jayBhbmQgaG9vdmVyIHVwIHNodXRkb3duIGVycm9ycyAqLwotCWVycm9yID0geGZzX3N5bmNfZnNkYXRhKG1wLCAwKTsKKwllcnJvciA9IHhmc19zeW5jX2ZzZGF0YShtcCwgU1lOQ19XQUlUKTsKIAogCS8qIGZsdXNoIGRhdGEtb25seSBkZXZpY2VzICovCiAJaWYgKG1wLT5tX3J0ZGV2X3RhcmdwKQpAQCAtNTcwLDggKzU4OCw2IEBACiAJCS8qIGRnYzogZXJyb3JzIGlnbm9yZWQgaGVyZSAqLwogCQllcnJvciA9IHhmc19xbV9zeW5jKG1wLCBTWU5DX1RSWUxPQ0spOwogCQllcnJvciA9IHhmc19zeW5jX2ZzZGF0YShtcCwgU1lOQ19UUllMT0NLKTsKLQkJaWYgKHhmc19sb2dfbmVlZF9jb3ZlcmVkKG1wKSkKLQkJCWVycm9yID0geGZzX2NvbW1pdF9kdW1teV90cmFucyhtcCwgWEZTX0xPR19GT1JDRSk7CiAJfQogCW1wLT5tX3N5bmNfc2VxKys7CiAJd2FrZV91cCgmbXAtPm1fd2FpdF9zaW5nbGVfc3luY190YXNrKTsKZGlmZiAtLWdpdCBhL2ZzL3hmcy9xdW90YS94ZnNfcW1fc3lzY2FsbHMuYyBiL2ZzL3hmcy9xdW90YS94ZnNfcW1fc3lzY2FsbHMuYwppbmRleCA0ZTQyNzZiLi41ZDFhM2I5IDEwMDY0NAotLS0gYS9mcy94ZnMvcXVvdGEveGZzX3FtX3N5c2NhbGxzLmMKKysrIGIvZnMveGZzL3F1b3RhL3hmc19xbV9zeXNjYWxscy5jCkBAIC04NzYsNyArODc2LDYgQEAKIAkJaXAtPmlfZ2RxdW90ID0gTlVMTDsKIAl9CiAJeGZzX2lwdXQoaXAsIFhGU19JTE9DS19FWENMKTsKLQlJUkVMRShpcCk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfZGZyYWcuYyBiL2ZzL3hmcy94ZnNfZGZyYWcuYwppbmRleCA3NDY1ZjllLi5hYjg5YTdlIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2RmcmFnLmMKKysrIGIvZnMveGZzL3hmc19kZnJhZy5jCkBAIC0yMDYsMTAgKzIwNiwxMCBAQAogCSAqIHByb2Nlc3MgdGhhdCB0aGUgZmlsZSB3YXMgbm90IGNoYW5nZWQgb3V0IGZyb20KIAkgKiB1bmRlciBpdC4KIAkgKi8KLQlpZiAoKHNicC0+YnNfY3RpbWUudHZfc2VjICE9IGlwLT5pX2QuZGlfY3RpbWUudF9zZWMpIHx8Ci0JICAgIChzYnAtPmJzX2N0aW1lLnR2X25zZWMgIT0gaXAtPmlfZC5kaV9jdGltZS50X25zZWMpIHx8Ci0JICAgIChzYnAtPmJzX210aW1lLnR2X3NlYyAhPSBpcC0+aV9kLmRpX210aW1lLnRfc2VjKSB8fAotCSAgICAoc2JwLT5ic19tdGltZS50dl9uc2VjICE9IGlwLT5pX2QuZGlfbXRpbWUudF9uc2VjKSkgeworCWlmICgoc2JwLT5ic19jdGltZS50dl9zZWMgIT0gVkZTX0koaXApLT5pX2N0aW1lLnR2X3NlYykgfHwKKwkgICAgKHNicC0+YnNfY3RpbWUudHZfbnNlYyAhPSBWRlNfSShpcCktPmlfY3RpbWUudHZfbnNlYykgfHwKKwkgICAgKHNicC0+YnNfbXRpbWUudHZfc2VjICE9IFZGU19JKGlwKS0+aV9tdGltZS50dl9zZWMpIHx8CisJICAgIChzYnAtPmJzX210aW1lLnR2X25zZWMgIT0gVkZTX0koaXApLT5pX210aW1lLnR2X25zZWMpKSB7CiAJCWVycm9yID0gWEZTX0VSUk9SKEVCVVNZKTsKIAkJZ290byBvdXRfdW5sb2NrOwogCX0KZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfZGlyMl9sZWFmLmMgYi9mcy94ZnMveGZzX2RpcjJfbGVhZi5jCmluZGV4IGZhOTEzZTQ1Li40MWFkNTM3IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2RpcjJfbGVhZi5jCisrKyBiL2ZzL3hmcy94ZnNfZGlyMl9sZWFmLmMKQEAgLTg1NCw2ICs4NTQsNyBAQAogCQkJICovCiAJCQlyYV93YW50ID0gaG93bWFueShidWZzaXplICsgbXAtPm1fZGlyYmxrc2l6ZSwKIAkJCQkJICBtcC0+bV9zYi5zYl9ibG9ja3NpemUpIC0gMTsKKwkJCUFTU0VSVChyYV93YW50ID49IDApOwogCiAJCQkvKgogCQkJICogSWYgd2UgZG9uJ3QgaGF2ZSBhcyBtYW55IGFzIHdlIHdhbnQsIGFuZCB3ZSBoYXZlbid0CkBAIC0xMDg4LDcgKzEwODksOCBAQAogCQkgKi8KIAkJcHRyICs9IGxlbmd0aDsKIAkJY3Vyb2ZmICs9IGxlbmd0aDsKLQkJYnVmc2l6ZSAtPSBsZW5ndGg7CisJCS8qIGJ1ZnNpemUgbWF5IGhhdmUganVzdCBiZWVuIGEgZ3Vlc3M7IGRvbid0IGdvIG5lZ2F0aXZlICovCisJCWJ1ZnNpemUgPSBidWZzaXplID4gbGVuZ3RoID8gYnVmc2l6ZSAtIGxlbmd0aCA6IDA7CiAJfQogCiAJLyoKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfaWFsbG9jLmMgYi9mcy94ZnMveGZzX2lhbGxvYy5jCmluZGV4IGFiNjRmM2UuLjA3ODU3OTcgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfaWFsbG9jLmMKKysrIGIvZnMveGZzL3hmc19pYWxsb2MuYwpAQCAtODgwLDYgKzg4MCw3IEBACiAJCQkJICogTm90IGluIHJhbmdlIC0gc2F2ZSBsYXN0IHNlYXJjaAogCQkJCSAqIGxvY2F0aW9uIGFuZCBhbGxvY2F0ZSBhIG5ldyBpbm9kZQogCQkJCSAqLworCQkJCXhmc19idHJlZV9kZWxfY3Vyc29yKHRjdXIsIFhGU19CVFJFRV9OT0VSUk9SKTsKIAkJCQlwYWctPnBhZ2xfbGVmdHJlYyA9IHRyZWMuaXJfc3RhcnRpbm87CiAJCQkJcGFnLT5wYWdsX3JpZ2h0cmVjID0gcmVjLmlyX3N0YXJ0aW5vOwogCQkJCXBhZy0+cGFnbF9wYWdpbm8gPSBwYWdpbm87CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2lub2RlLmMgYi9mcy94ZnMveGZzX2lub2RlLmMKaW5kZXggYzFkYzdlZi4uYjkyYTRmYSAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19pbm9kZS5jCisrKyBiL2ZzL3hmcy94ZnNfaW5vZGUuYwpAQCAtMzA2OCw5ICszMDY4LDkgQEAKIAlTWU5DSFJPTklaRSgpOwogCiAJLyoKLQkgKiBNYWtlIHN1cmUgdG8gZ2V0IHRoZSBsYXRlc3QgYXRpbWUgZnJvbSB0aGUgTGludXggaW5vZGUuCisJICogTWFrZSBzdXJlIHRvIGdldCB0aGUgbGF0ZXN0IHRpbWVzdGFtcHMgZnJvbSB0aGUgTGludXggaW5vZGUuCiAJICovCi0JeGZzX3N5bmNocm9uaXplX2F0aW1lKGlwKTsKKwl4ZnNfc3luY2hyb25pemVfdGltZXMoaXApOwogCiAJaWYgKFhGU19URVNUX0VSUk9SKGJlMTZfdG9fY3B1KGRpcC0+ZGlfbWFnaWMpICE9IFhGU19ESU5PREVfTUFHSUMsCiAJCQkgICAgICAgbXAsIFhGU19FUlJUQUdfSUZMVVNIXzEsIFhGU19SQU5ET01fSUZMVVNIXzEpKSB7CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2lub2RlLmggYi9mcy94ZnMveGZzX2lub2RlLmgKaW5kZXggMGIzOGI5YS4uNDE1NTVkZSAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19pbm9kZS5oCisrKyBiL2ZzL3hmcy94ZnNfaW5vZGUuaApAQCAtNTA0LDcgKzUwNCw3IEBACiB2b2lkCQl4ZnNfbG9ja19pbm9kZXMoeGZzX2lub2RlX3QgKiosIGludCwgdWludCk7CiB2b2lkCQl4ZnNfbG9ja190d29faW5vZGVzKHhmc19pbm9kZV90ICosIHhmc19pbm9kZV90ICosIHVpbnQpOwogCi12b2lkCQl4ZnNfc3luY2hyb25pemVfYXRpbWUoeGZzX2lub2RlX3QgKik7Cit2b2lkCQl4ZnNfc3luY2hyb25pemVfdGltZXMoeGZzX2lub2RlX3QgKik7CiB2b2lkCQl4ZnNfbWFya19pbm9kZV9kaXJ0eV9zeW5jKHhmc19pbm9kZV90ICopOwogCiAjaWYgZGVmaW5lZChYRlNfSU5PREVfVFJBQ0UpCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2lub2RlX2l0ZW0uYyBiL2ZzL3hmcy94ZnNfaW5vZGVfaXRlbS5jCmluZGV4IDQ3ZDViNjYuLjk3OTRiODcgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfaW5vZGVfaXRlbS5jCisrKyBiL2ZzL3hmcy94ZnNfaW5vZGVfaXRlbS5jCkBAIC0yMzIsNiArMjMyLDE1IEBACiAJbnZlY3MJICAgICA9IDE7CiAKIAkvKgorCSAqIE1ha2Ugc3VyZSB0aGUgbGludXggaW5vZGUgaXMgZGlydHkuIFdlIGRvIHRoaXMgYmVmb3JlCisJICogY2xlYXJpbmcgaV91cGRhdGVfY29yZSBhcyB0aGUgVkZTIHdpbGwgY2FsbCBiYWNrIGludG8KKwkgKiBYRlMgaGVyZSBhbmQgc2V0IGlfdXBkYXRlX2NvcmUsIHNvIHdlIG5lZWQgdG8gZGlydHkgdGhlCisJICogaW5vZGUgZmlyc3Qgc28gdGhhdCB0aGUgb3JkZXJpbmcgb2YgaV91cGRhdGVfY29yZSBhbmQKKwkgKiB1bmxvZ2dlZCBtb2RpZmljYXRpb25zIHN0aWxsIHdvcmtzIGFzIGRlc2NyaWJlZCBiZWxvdy4KKwkgKi8KKwl4ZnNfbWFya19pbm9kZV9kaXJ0eV9zeW5jKGlwKTsKKworCS8qCiAJICogQ2xlYXIgaV91cGRhdGVfY29yZSBpZiB0aGUgdGltZXN0YW1wcyAob3IgYW55IG90aGVyCiAJICogbm9uLXRyYW5zYWN0aW9uYWwgbW9kaWZpY2F0aW9uKSBuZWVkIGZsdXNoaW5nL2xvZ2dpbmcKIAkgKiBhbmQgd2UncmUgYWJvdXQgdG8gbG9nIHRoZW0gd2l0aCB0aGUgcmVzdCBvZiB0aGUgY29yZS4KQEAgLTI2MywxNCArMjcyLDkgQEAKIAl9CiAKIAkvKgotCSAqIE1ha2Ugc3VyZSB0byBnZXQgdGhlIGxhdGVzdCBhdGltZSBmcm9tIHRoZSBMaW51eCBpbm9kZS4KKwkgKiBNYWtlIHN1cmUgdG8gZ2V0IHRoZSBsYXRlc3QgdGltZXN0YW1wcyBmcm9tIHRoZSBMaW51eCBpbm9kZS4KIAkgKi8KLQl4ZnNfc3luY2hyb25pemVfYXRpbWUoaXApOwotCi0JLyoKLQkgKiBtYWtlIHN1cmUgdGhlIGxpbnV4IGlub2RlIGlzIGRpcnR5Ci0JICovCi0JeGZzX21hcmtfaW5vZGVfZGlydHlfc3luYyhpcCk7CisJeGZzX3N5bmNocm9uaXplX3RpbWVzKGlwKTsKIAogCXZlY3AtPmlfYWRkciA9ICh4ZnNfY2FkZHJfdCkmaXAtPmlfZDsKIAl2ZWNwLT5pX2xlbiAgPSBzaXplb2Yoc3RydWN0IHhmc19pY2Rpbm9kZSk7CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2l0YWJsZS5jIGIvZnMveGZzL3hmc19pdGFibGUuYwppbmRleCBiNjhmOTEwLi42MmVmYWIyIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2l0YWJsZS5jCisrKyBiL2ZzL3hmcy94ZnNfaXRhYmxlLmMKQEAgLTU5LDYgKzU5LDcgQEAKIHsKIAl4ZnNfaWNkaW5vZGVfdAkqZGljOwkvKiBkaW5vZGUgY29yZSBpbmZvIHBvaW50ZXIgKi8KIAl4ZnNfaW5vZGVfdAkqaXA7CQkvKiBpbmNvcmUgaW5vZGUgcG9pbnRlciAqLworCXN0cnVjdCBpbm9kZQkqaW5vZGU7CiAJaW50CQllcnJvcjsKIAogCWVycm9yID0geGZzX2lnZXQobXAsIE5VTEwsIGlubywKQEAgLTcyLDYgKzczLDcgQEAKIAlBU1NFUlQoaXAtPmlfaW1hcC5pbV9ibGtubyAhPSAwKTsKIAogCWRpYyA9ICZpcC0+aV9kOworCWlub2RlID0gVkZTX0koaXApOwogCiAJLyogeGZzX2lnZXQgcmV0dXJucyB0aGUgZm9sbG93aW5nIHdpdGhvdXQgbmVlZGluZwogCSAqIGZ1cnRoZXIgY2hhbmdlLgpAQCAtODMsMTYgKzg1LDE5IEBACiAJYnVmLT5ic191aWQgPSBkaWMtPmRpX3VpZDsKIAlidWYtPmJzX2dpZCA9IGRpYy0+ZGlfZ2lkOwogCWJ1Zi0+YnNfc2l6ZSA9IGRpYy0+ZGlfc2l6ZTsKKwogCS8qCi0JICogV2UgYXJlIHJlYWRpbmcgdGhlIGF0aW1lIGZyb20gdGhlIExpbnV4IGlub2RlIGJlY2F1c2UgdGhlCi0JICogZGlub2RlIG1pZ2h0IG5vdCBiZSB1cHRvZGF0ZS4KKwkgKiBXZSBuZWVkIHRvIHJlYWQgdGhlIHRpbWVzdGFtcHMgZnJvbSB0aGUgTGludXggaW5vZGUgYmVjYXVzZQorCSAqIHRoZSBWRlMga2VlcHMgd3JpdGluZyBkaXJlY3RseSBpbnRvIHRoZSBpbm9kZSBzdHJ1Y3R1cmUgaW5zdGVhZAorCSAqIG9mIHRlbGxpbmcgdXMgYWJvdXQgdGhlIHVwZGF0ZXMuCiAJICovCi0JYnVmLT5ic19hdGltZS50dl9zZWMgPSBWRlNfSShpcCktPmlfYXRpbWUudHZfc2VjOwotCWJ1Zi0+YnNfYXRpbWUudHZfbnNlYyA9IFZGU19JKGlwKS0+aV9hdGltZS50dl9uc2VjOwotCWJ1Zi0+YnNfbXRpbWUudHZfc2VjID0gZGljLT5kaV9tdGltZS50X3NlYzsKLQlidWYtPmJzX210aW1lLnR2X25zZWMgPSBkaWMtPmRpX210aW1lLnRfbnNlYzsKLQlidWYtPmJzX2N0aW1lLnR2X3NlYyA9IGRpYy0+ZGlfY3RpbWUudF9zZWM7Ci0JYnVmLT5ic19jdGltZS50dl9uc2VjID0gZGljLT5kaV9jdGltZS50X25zZWM7CisJYnVmLT5ic19hdGltZS50dl9zZWMgPSBpbm9kZS0+aV9hdGltZS50dl9zZWM7CisJYnVmLT5ic19hdGltZS50dl9uc2VjID0gaW5vZGUtPmlfYXRpbWUudHZfbnNlYzsKKwlidWYtPmJzX210aW1lLnR2X3NlYyA9IGlub2RlLT5pX210aW1lLnR2X3NlYzsKKwlidWYtPmJzX210aW1lLnR2X25zZWMgPSBpbm9kZS0+aV9tdGltZS50dl9uc2VjOworCWJ1Zi0+YnNfY3RpbWUudHZfc2VjID0gaW5vZGUtPmlfY3RpbWUudHZfc2VjOworCWJ1Zi0+YnNfY3RpbWUudHZfbnNlYyA9IGlub2RlLT5pX2N0aW1lLnR2X25zZWM7CisKIAlidWYtPmJzX3hmbGFncyA9IHhmc19pcDJ4ZmxhZ3MoaXApOwogCWJ1Zi0+YnNfZXh0c2l6ZSA9IGRpYy0+ZGlfZXh0c2l6ZSA8PCBtcC0+bV9zYi5zYl9ibG9ja2xvZzsKIAlidWYtPmJzX2V4dGVudHMgPSBkaWMtPmRpX25leHRlbnRzOwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc192bm9kZW9wcy5jIGIvZnMveGZzL3hmc192bm9kZW9wcy5jCmluZGV4IGE0MzRmMjguLmI1NzJmN2UgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfdm5vZGVvcHMuYworKysgYi9mcy94ZnMveGZzX3Zub2Rlb3BzLmMKQEAgLTI0NzYsMTIgKzI0NzYsNiBAQAogCUFTU0VSVChYRlNfRk9SQ0VEX1NIVVRET1dOKGlwLT5pX21vdW50KSB8fCBpcC0+aV9kZWxheWVkX2Jsa3MgPT0gMCk7CiAKIAkvKgotCSAqIE1ha2Ugc3VyZSB0aGUgYXRpbWUgaW4gdGhlIFhGUyBpbm9kZSBpcyBjb3JyZWN0IGJlZm9yZSBmcmVlaW5nIHRoZQotCSAqIExpbnV4IGlub2RlLgotCSAqLwotCXhmc19zeW5jaHJvbml6ZV9hdGltZShpcCk7Ci0KLQkvKgogCSAqIElmIHdlIGhhdmUgbm90aGluZyB0byBmbHVzaCB3aXRoIHRoaXMgaW5vZGUgdGhlbiBjb21wbGV0ZSB0aGUKIAkgKiB0ZWFyZG93biBub3csIG90aGVyd2lzZSBicmVhayB0aGUgbGluayBiZXR3ZWVuIHRoZSB4ZnMgaW5vZGUgYW5kIHRoZQogCSAqIGxpbnV4IGlub2RlIGFuZCBjbGVhbiB1cCB0aGUgeGZzIGlub2RlIGxhdGVyLiBUaGlzIGF2b2lkcyBmbHVzaGluZwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hY3BpL2FjcGlfYnVzLmggYi9pbmNsdWRlL2FjcGkvYWNwaV9idXMuaAppbmRleCAxY2VmMTM5Li4zY2Q5Y2NkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FjcGkvYWNwaV9idXMuaAorKysgYi9pbmNsdWRlL2FjcGkvYWNwaV9idXMuaApAQCAtNzAsNyArNzAsNiBAQAogCUFDUElfQlVTX1RZUEVfUE9XRVIsCiAJQUNQSV9CVVNfVFlQRV9QUk9DRVNTT1IsCiAJQUNQSV9CVVNfVFlQRV9USEVSTUFMLAotCUFDUElfQlVTX1RZUEVfU1lTVEVNLAogCUFDUElfQlVTX1RZUEVfUE9XRVJfQlVUVE9OLAogCUFDUElfQlVTX1RZUEVfU0xFRVBfQlVUVE9OLAogCUFDUElfQlVTX0RFVklDRV9UWVBFX0NPVU5UCkBAIC0xNDIsMTAgKzE0MSw3IEBACiAKIHN0cnVjdCBhY3BpX2RldmljZV9mbGFncyB7CiAJdTMyIGR5bmFtaWNfc3RhdHVzOjE7Ci0JdTMyIGhhcmR3YXJlX2lkOjE7Ci0JdTMyIGNvbXBhdGlibGVfaWRzOjE7CiAJdTMyIGJ1c19hZGRyZXNzOjE7Ci0JdTMyIHVuaXF1ZV9pZDoxOwogCXUzMiByZW1vdmFibGU6MTsKIAl1MzIgZWplY3RhYmxlOjE7CiAJdTMyIGxvY2thYmxlOjE7CkBAIC0xNTQsNyArMTUwLDcgQEAKIAl1MzIgcGVyZm9ybWFuY2VfbWFuYWdlYWJsZToxOwogCXUzMiB3YWtlX2NhcGFibGU6MTsJLyogV2FrZXVwKF9QUlcpIHN1cHBvcnRlZD8gKi8KIAl1MzIgZm9yY2VfcG93ZXJfc3RhdGU6MTsKLQl1MzIgcmVzZXJ2ZWQ6MTk7CisJdTMyIHJlc2VydmVkOjIyOwogfTsKIAogLyogRmlsZSBTeXN0ZW0gKi8KQEAgLTE3MiwyMCArMTY4LDIzIEBACiB0eXBlZGVmIGNoYXIgYWNwaV9kZXZpY2VfbmFtZVs0MF07CiB0eXBlZGVmIGNoYXIgYWNwaV9kZXZpY2VfY2xhc3NbMjBdOwogCitzdHJ1Y3QgYWNwaV9oYXJkd2FyZV9pZCB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCWNoYXIgKmlkOworfTsKKwogc3RydWN0IGFjcGlfZGV2aWNlX3BucCB7CiAJYWNwaV9idXNfaWQgYnVzX2lkOwkvKiBPYmplY3QgbmFtZSAqLwogCWFjcGlfYnVzX2FkZHJlc3MgYnVzX2FkZHJlc3M7CS8qIF9BRFIgKi8KLQljaGFyICpoYXJkd2FyZV9pZDsJLyogX0hJRCAqLwotCXN0cnVjdCBhY3BpY2FfZGV2aWNlX2lkX2xpc3QgKmNpZF9saXN0OwkvKiBfQ0lEcyAqLwogCWNoYXIgKnVuaXF1ZV9pZDsJLyogX1VJRCAqLworCXN0cnVjdCBsaXN0X2hlYWQgaWRzOwkJLyogX0hJRCBhbmQgX0NJRHMgKi8KIAlhY3BpX2RldmljZV9uYW1lIGRldmljZV9uYW1lOwkvKiBEcml2ZXItZGV0ZXJtaW5lZCAqLwogCWFjcGlfZGV2aWNlX2NsYXNzIGRldmljZV9jbGFzczsJLyogICAgICAgICIgICAgICAgICAgKi8KIH07CiAKICNkZWZpbmUgYWNwaV9kZXZpY2VfYmlkKGQpCSgoZCktPnBucC5idXNfaWQpCiAjZGVmaW5lIGFjcGlfZGV2aWNlX2FkcihkKQkoKGQpLT5wbnAuYnVzX2FkZHJlc3MpCi0jZGVmaW5lIGFjcGlfZGV2aWNlX2hpZChkKQkoKGQpLT5wbnAuaGFyZHdhcmVfaWQpCi0jZGVmaW5lIGFjcGlfZGV2aWNlX3VpZChkKQkoKGQpLT5wbnAudW5pcXVlX2lkKQorY2hhciAqYWNwaV9kZXZpY2VfaGlkKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKTsKICNkZWZpbmUgYWNwaV9kZXZpY2VfbmFtZShkKQkoKGQpLT5wbnAuZGV2aWNlX25hbWUpCiAjZGVmaW5lIGFjcGlfZGV2aWNlX2NsYXNzKGQpCSgoZCktPnBucC5kZXZpY2VfY2xhc3MpCiAKQEAgLTI2Miw3ICsyNjEsOCBAQAogLyogRGV2aWNlICovCiAKIHN0cnVjdCBhY3BpX2RldmljZSB7Ci0JYWNwaV9oYW5kbGUgaGFuZGxlOworCWludCBkZXZpY2VfdHlwZTsKKwlhY3BpX2hhbmRsZSBoYW5kbGU7CQkvKiBubyBoYW5kbGUgZm9yIGZpeGVkIGhhcmR3YXJlICovCiAJc3RydWN0IGFjcGlfZGV2aWNlICpwYXJlbnQ7CiAJc3RydWN0IGxpc3RfaGVhZCBjaGlsZHJlbjsKIAlzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7CkBAIC0zMjIsNiArMzIyLDggQEAKIAogaW50IGFjcGlfYnVzX2dldF9kZXZpY2UoYWNwaV9oYW5kbGUgaGFuZGxlLCBzdHJ1Y3QgYWNwaV9kZXZpY2UgKipkZXZpY2UpOwogdm9pZCBhY3BpX2J1c19kYXRhX2hhbmRsZXIoYWNwaV9oYW5kbGUgaGFuZGxlLCB2b2lkICpjb250ZXh0KTsKK2FjcGlfc3RhdHVzIGFjcGlfYnVzX2dldF9zdGF0dXNfaGFuZGxlKGFjcGlfaGFuZGxlIGhhbmRsZSwKKwkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBsb25nICpzdGEpOwogaW50IGFjcGlfYnVzX2dldF9zdGF0dXMoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UpOwogaW50IGFjcGlfYnVzX2dldF9wb3dlcihhY3BpX2hhbmRsZSBoYW5kbGUsIGludCAqc3RhdGUpOwogaW50IGFjcGlfYnVzX3NldF9wb3dlcihhY3BpX2hhbmRsZSBoYW5kbGUsIGludCBzdGF0ZSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL2dwaW8uaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvZ3Bpby5oCmluZGV4IDljY2EzNzguLjY2ZDYxMDYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvZ3Bpby5oCisrKyBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvZ3Bpby5oCkBAIC0xLDYgKzEsNyBAQAogI2lmbmRlZiBfQVNNX0dFTkVSSUNfR1BJT19ICiAjZGVmaW5lIF9BU01fR0VORVJJQ19HUElPX0gKIAorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9oYXJkaXJxLmggYi9pbmNsdWRlL2FzbS1nZW5lcmljL2hhcmRpcnEuaAppbmRleCAyM2JiNGRhLi42MmY1OTA4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1nZW5lcmljL2hhcmRpcnEuaAorKysgYi9pbmNsdWRlL2FzbS1nZW5lcmljL2hhcmRpcnEuaApAQCAtNiw3ICs2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KIAogdHlwZWRlZiBzdHJ1Y3QgewotCXVuc2lnbmVkIGxvbmcgX19zb2Z0aXJxX3BlbmRpbmc7CisJdW5zaWduZWQgaW50IF9fc29mdGlycV9wZW5kaW5nOwogfSBfX19fY2FjaGVsaW5lX2FsaWduZWQgaXJxX2NwdXN0YXRfdDsKIAogI2luY2x1ZGUgPGxpbnV4L2lycV9jcHVzdGF0Lmg+CS8qIFN0YW5kYXJkIG1hcHBpbmdzIGZvciBpcnFfY3B1c3RhdF90IGFib3ZlICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL3ZtbGludXgubGRzLmggYi9pbmNsdWRlL2FzbS1nZW5lcmljL3ZtbGludXgubGRzLmgKaW5kZXggMjljYThmNS4uYjZlODE4ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZ2VuZXJpYy92bWxpbnV4Lmxkcy5oCisrKyBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvdm1saW51eC5sZHMuaApAQCAtNzIxLDEyICs3MjEsMTIgQEAKIAkuID0gQUxJR04oUEFHRV9TSVpFKTsJCQkJCQlcCiAJLmRhdGEgOiBBVChBRERSKC5kYXRhKSAtIExPQURfT0ZGU0VUKSB7CQkJCVwKIAkJSU5JVF9UQVNLX0RBVEEoaW5pdHRhc2spCQkJCVwKKwkJTk9TQVZFX0RBVEEJCQkJCQlcCisJCVBBR0VfQUxJR05FRF9EQVRBKHBhZ2VhbGlnbmVkKQkJCQlcCiAJCUNBQ0hFTElORV9BTElHTkVEX0RBVEEoY2FjaGVsaW5lKQkJCVwKIAkJUkVBRF9NT1NUTFlfREFUQShjYWNoZWxpbmUpCQkJCVwKIAkJREFUQV9EQVRBCQkJCQkJXAogCQlDT05TVFJVQ1RPUlMJCQkJCQlcCi0JCU5PU0FWRV9EQVRBCQkJCQkJXAotCQlQQUdFX0FMSUdORURfREFUQShwYWdlYWxpZ25lZCkJCQkJXAogCX0KIAogI2RlZmluZSBJTklUX1RFWFRfU0VDVElPTihpbml0dGV4dF9hbGlnbikJCQkJXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtX2NydGMuaCBiL2luY2x1ZGUvZHJtL2RybV9jcnRjLmgKaW5kZXggYWUxZTllMS4uYjY5MzQ3YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kcm0vZHJtX2NydGMuaAorKysgYi9pbmNsdWRlL2RybS9kcm1fY3J0Yy5oCkBAIC0zODcsNiArMzg3LDcgQEAKICAqIEBnZXRfbW9kZXM6IGdldCBtb2RlIGxpc3QgZm9yIHRoaXMgY29ubmVjdG9yCiAgKiBAc2V0X3Byb3BlcnR5OiBwcm9wZXJ0eSBmb3IgdGhpcyBjb25uZWN0b3IgbWF5IG5lZWQgdXBkYXRlCiAgKiBAZGVzdHJveTogbWFrZSBvYmplY3QgZ28gYXdheQorICogQGZvcmNlOiBub3RpZnkgdGhlIGRyaXZlciB0aGUgY29ubmVjdG9yIGlzIGZvcmNlZCBvbgogICoKICAqIEVhY2ggQ1JUQyBtYXkgaGF2ZSBvbmUgb3IgbW9yZSBjb25uZWN0b3JzIGF0dGFjaGVkIHRvIGl0LiAgVGhlIGZ1bmN0aW9ucwogICogYmVsb3cgYWxsb3cgdGhlIGNvcmUgRFJNIGNvZGUgdG8gY29udHJvbCBjb25uZWN0b3JzLCBlbnVtZXJhdGUgYXZhaWxhYmxlIG1vZGVzLApAQCAtNDAxLDYgKzQwMiw3IEBACiAJaW50ICgqc2V0X3Byb3BlcnR5KShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLCBzdHJ1Y3QgZHJtX3Byb3BlcnR5ICpwcm9wZXJ0eSwKIAkJCSAgICAgdWludDY0X3QgdmFsKTsKIAl2b2lkICgqZGVzdHJveSkoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rvcik7CisJdm9pZCAoKmZvcmNlKShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKTsKIH07CiAKIHN0cnVjdCBkcm1fZW5jb2Rlcl9mdW5jcyB7CkBAIC00MjksNiArNDMxLDEzIEBACiAJdm9pZCAqaGVscGVyX3ByaXZhdGU7CiB9OwogCitlbnVtIGRybV9jb25uZWN0b3JfZm9yY2UgeworCURSTV9GT1JDRV9VTlNQRUNJRklFRCwKKwlEUk1fRk9SQ0VfT0ZGLAorCURSTV9GT1JDRV9PTiwgICAgICAgICAvKiBmb3JjZSBvbiBhbmFsb2cgcGFydCBub3JtYWxseSAqLworCURSTV9GT1JDRV9PTl9ESUdJVEFMLCAvKiBmb3IgRFZJLUkgdXNlIGRpZ2l0YWwgY29ubmVjdG9yICovCit9OworCiAvKioKICAqIGRybV9jb25uZWN0b3IgLSBjZW50cmFsIERSTSBjb25uZWN0b3IgY29udHJvbCBzdHJ1Y3R1cmUKICAqIEBjcnRjOiBDUlRDIHRoaXMgY29ubmVjdG9yIGlzIGN1cnJlbnRseSBjb25uZWN0ZWQgdG8sIE5VTEwgaWYgbm9uZQpAQCAtNDc4LDkgKzQ4NywxMiBAQAogCiAJdm9pZCAqaGVscGVyX3ByaXZhdGU7CiAKKwkvKiBmb3JjZWQgb24gY29ubmVjdG9yICovCisJZW51bSBkcm1fY29ubmVjdG9yX2ZvcmNlIGZvcmNlOwogCXVpbnQzMl90IGVuY29kZXJfaWRzW0RSTV9DT05ORUNUT1JfTUFYX0VOQ09ERVJdOwogCXVpbnQzMl90IGZvcmNlX2VuY29kZXJfaWQ7CiAJc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyOyAvKiBjdXJyZW50bHkgYWN0aXZlIGVuY29kZXIgKi8KKwl2b2lkICpmYl9oZWxwZXJfcHJpdmF0ZTsKIH07CiAKIC8qKgpAQCAtNzQ2LDcgKzc1OCw3IEBACiBleHRlcm4gYm9vbCBkcm1fZGV0ZWN0X2hkbWlfbW9uaXRvcihzdHJ1Y3QgZWRpZCAqZWRpZCk7CiBleHRlcm4gc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmRybV9jdnRfbW9kZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCQkJCWludCBoZGlzcGxheSwgaW50IHZkaXNwbGF5LCBpbnQgdnJlZnJlc2gsCi0JCQkJYm9vbCByZWR1Y2VkLCBib29sIGludGVybGFjZWQpOworCQkJCWJvb2wgcmVkdWNlZCwgYm9vbCBpbnRlcmxhY2VkLCBib29sIG1hcmdpbnMpOwogZXh0ZXJuIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpkcm1fZ3RmX21vZGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIAkJCQlpbnQgaGRpc3BsYXksIGludCB2ZGlzcGxheSwgaW50IHZyZWZyZXNoLAogCQkJCWJvb2wgaW50ZXJsYWNlZCwgaW50IG1hcmdpbnMpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtX2NydGNfaGVscGVyLmggYi9pbmNsdWRlL2RybS9kcm1fY3J0Y19oZWxwZXIuaAppbmRleCA0YzhkYWNhLi5iMjllMjAxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2RybS9kcm1fY3J0Y19oZWxwZXIuaAorKysgYi9pbmNsdWRlL2RybS9kcm1fY3J0Y19oZWxwZXIuaApAQCAtMzksNiArMzksNyBAQAogCiAjaW5jbHVkZSA8bGludXgvZmIuaD4KIAorI2luY2x1ZGUgImRybV9mYl9oZWxwZXIuaCIKIHN0cnVjdCBkcm1fY3J0Y19oZWxwZXJfZnVuY3MgewogCS8qCiAJICogQ29udHJvbCBwb3dlciBsZXZlbHMgb24gdGhlIENSVEMuICBJZiB0aGUgbW9kZSBwYXNzZWQgaW4gaXMKQEAgLTYwLDYgKzYxLDkgQEAKIAkvKiBNb3ZlIHRoZSBjcnRjIG9uIHRoZSBjdXJyZW50IGZiIHRvIHRoZSBnaXZlbiBwb3NpdGlvbiAqb3B0aW9uYWwqICovCiAJaW50ICgqbW9kZV9zZXRfYmFzZSkoc3RydWN0IGRybV9jcnRjICpjcnRjLCBpbnQgeCwgaW50IHksCiAJCQkgICAgIHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKm9sZF9mYik7CisKKwkvKiByZWxvYWQgdGhlIGN1cnJlbnQgY3J0YyBMVVQgKi8KKwl2b2lkICgqbG9hZF9sdXQpKHN0cnVjdCBkcm1fY3J0YyAqY3J0Yyk7CiB9OwogCiBzdHJ1Y3QgZHJtX2VuY29kZXJfaGVscGVyX2Z1bmNzIHsKQEAgLTExOSwxMCArMTIzLDExIEBACiAJZW5jb2Rlci0+aGVscGVyX3ByaXZhdGUgPSAodm9pZCAqKWZ1bmNzOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfYWRkKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCitzdGF0aWMgaW5saW5lIGludCBkcm1fY29ubmVjdG9yX2hlbHBlcl9hZGQoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKIAkJCQkJICAgIGNvbnN0IHN0cnVjdCBkcm1fY29ubmVjdG9yX2hlbHBlcl9mdW5jcyAqZnVuY3MpCiB7CiAJY29ubmVjdG9yLT5oZWxwZXJfcHJpdmF0ZSA9ICh2b2lkICopZnVuY3M7CisJcmV0dXJuIGRybV9mYl9oZWxwZXJfYWRkX2Nvbm5lY3Rvcihjb25uZWN0b3IpOwogfQogCiBleHRlcm4gaW50IGRybV9oZWxwZXJfcmVzdW1lX2ZvcmNlX21vZGUoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1fZmJfaGVscGVyLmggYi9pbmNsdWRlL2RybS9kcm1fZmJfaGVscGVyLmgKaW5kZXggODhmZmZiZC4uNThjODkyYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kcm0vZHJtX2ZiX2hlbHBlci5oCisrKyBiL2luY2x1ZGUvZHJtL2RybV9mYl9oZWxwZXIuaApAQCAtMzUsOSArMzUsMzAgQEAKIAlzdHJ1Y3QgZHJtX21vZGVfc2V0IG1vZGVfc2V0OwogfTsKIAorCiBzdHJ1Y3QgZHJtX2ZiX2hlbHBlcl9mdW5jcyB7CiAJdm9pZCAoKmdhbW1hX3NldCkoc3RydWN0IGRybV9jcnRjICpjcnRjLCB1MTYgcmVkLCB1MTYgZ3JlZW4sCiAJCQkgIHUxNiBibHVlLCBpbnQgcmVnbm8pOworCXZvaWQgKCpnYW1tYV9nZXQpKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywgdTE2ICpyZWQsIHUxNiAqZ3JlZW4sCisJCQkgIHUxNiAqYmx1ZSwgaW50IHJlZ25vKTsKK307CisKKy8qIG1vZGUgc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kIGxpbmUgKi8KK3N0cnVjdCBkcm1fZmJfaGVscGVyX2NtZGxpbmVfbW9kZSB7CisJYm9vbCBzcGVjaWZpZWQ7CisJYm9vbCByZWZyZXNoX3NwZWNpZmllZDsKKwlib29sIGJwcF9zcGVjaWZpZWQ7CisJaW50IHhyZXMsIHlyZXM7CisJaW50IGJwcDsKKwlpbnQgcmVmcmVzaDsKKwlib29sIHJiOworCWJvb2wgaW50ZXJsYWNlOworCWJvb2wgY3Z0OworCWJvb2wgbWFyZ2luczsKK307CisKK3N0cnVjdCBkcm1fZmJfaGVscGVyX2Nvbm5lY3RvciB7CisJc3RydWN0IGRybV9mYl9oZWxwZXJfY21kbGluZV9tb2RlIGNtZGxpbmVfbW9kZTsKIH07CiAKIHN0cnVjdCBkcm1fZmJfaGVscGVyIHsKQEAgLTUyLDExICs3MywxNCBAQAogfTsKIAogaW50IGRybV9mYl9oZWxwZXJfc2luZ2xlX2ZiX3Byb2JlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkJICBpbnQgcHJlZmVycmVkX2JwcCwKIAkJCQkgIGludCAoKmZiX2NyZWF0ZSkoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIAkJCQkJCSAgIHVpbnQzMl90IGZiX3dpZHRoLAogCQkJCQkJICAgdWludDMyX3QgZmJfaGVpZ2h0LAogCQkJCQkJICAgdWludDMyX3Qgc3VyZmFjZV93aWR0aCwKIAkJCQkJCSAgIHVpbnQzMl90IHN1cmZhY2VfaGVpZ2h0LAorCQkJCQkJICAgdWludDMyX3Qgc3VyZmFjZV9kZXB0aCwKKwkJCQkJCSAgIHVpbnQzMl90IHN1cmZhY2VfYnBwLAogCQkJCQkJICAgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqKmZiX3B0cikpOwogaW50IGRybV9mYl9oZWxwZXJfaW5pdF9jcnRjX2NvdW50KHN0cnVjdCBkcm1fZmJfaGVscGVyICpoZWxwZXIsIGludCBjcnRjX2NvdW50LAogCQkJCSAgaW50IG1heF9jb25uKTsKQEAgLTc3LDYgKzEwMSwxMSBAQAogdm9pZCBkcm1fZmJfaGVscGVyX3Jlc3RvcmUodm9pZCk7CiB2b2lkIGRybV9mYl9oZWxwZXJfZmlsbF92YXIoc3RydWN0IGZiX2luZm8gKmluZm8sIHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLAogCQkJICAgIHVpbnQzMl90IGZiX3dpZHRoLCB1aW50MzJfdCBmYl9oZWlnaHQpOwotdm9pZCBkcm1fZmJfaGVscGVyX2ZpbGxfZml4KHN0cnVjdCBmYl9pbmZvICppbmZvLCB1aW50MzJfdCBwaXRjaCk7Cit2b2lkIGRybV9mYl9oZWxwZXJfZmlsbF9maXgoc3RydWN0IGZiX2luZm8gKmluZm8sIHVpbnQzMl90IHBpdGNoLAorCQkJICAgIHVpbnQzMl90IGRlcHRoKTsKKworaW50IGRybV9mYl9oZWxwZXJfYWRkX2Nvbm5lY3RvcihzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKTsKK2ludCBkcm1fZmJfaGVscGVyX3BhcnNlX2NvbW1hbmRfbGluZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKK2ludCBkcm1fZmJfaGVscGVyX3NldGNtYXAoc3RydWN0IGZiX2NtYXAgKmNtYXAsIHN0cnVjdCBmYl9pbmZvICppbmZvKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1fcGNpaWRzLmggYi9pbmNsdWRlL2RybS9kcm1fcGNpaWRzLmgKaW5kZXggM2Y2ZTU0NS4uZTZmM2IxMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kcm0vZHJtX3BjaWlkcy5oCisrKyBiL2luY2x1ZGUvZHJtL2RybV9wY2lpZHMuaApAQCAtODAsNyArODAsNyBAQAogCXsweDEwMDIsIDB4NTE1OCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjIwMH0sIFwKIAl7MHgxMDAyLCAweDUxNTksIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlYxMDB9LCBcCiAJezB4MTAwMiwgMHg1MTVBLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWMTAwfSwgXAotCXsweDEwMDIsIDB4NTE1RSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjEwMH0sIFwKKwl7MHgxMDAyLCAweDUxNUUsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlYxMDB8UkFERU9OX1NJTkdMRV9DUlRDfSwgXAogCXsweDEwMDIsIDB4NTQ2MCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjM4MHxSQURFT05fSVNfTU9CSUxJVFl9LCBcCiAJezB4MTAwMiwgMHg1NDYyLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWMzgwfFJBREVPTl9JU19NT0JJTElUWX0sIFwKIAl7MHgxMDAyLCAweDU0NjQsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlYzODB8UkFERU9OX0lTX01PQklMSVRZfSwgXApAQCAtMTEzLDcgKzExMyw3IEBACiAJezB4MTAwMiwgMHg1OTYyLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWMjgwfSwgXAogCXsweDEwMDIsIDB4NTk2NCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjI4MH0sIFwKIAl7MHgxMDAyLCAweDU5NjUsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlYyODB9LCBcCi0JezB4MTAwMiwgMHg1OTY5LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWMTAwfSwgXAorCXsweDEwMDIsIDB4NTk2OSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjEwMHxSQURFT05fU0lOR0xFX0NSVEN9LCBcCiAJezB4MTAwMiwgMHg1YTQxLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JTNDAwfFJBREVPTl9JU19JR1B8UkFERU9OX0lTX0lHUEdBUlR9LCBcCiAJezB4MTAwMiwgMHg1YTQyLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JTNDAwfFJBREVPTl9JU19JR1B8UkFERU9OX0lTX01PQklMSVRZfFJBREVPTl9JU19JR1BHQVJUfSwgXAogCXsweDEwMDIsIDB4NWE2MSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SUzQwMHxSQURFT05fSVNfSUdQfFJBREVPTl9JU19JR1BHQVJUfSwgXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9LYnVpbGQgYi9pbmNsdWRlL2xpbnV4L0tidWlsZAppbmRleCBjZmY0YTEwLi4xZmVlZDcxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L0tidWlsZAorKysgYi9pbmNsdWRlL2xpbnV4L0tidWlsZApAQCAtMTI2LDYgKzEyNiw3IEBACiBoZWFkZXIteSArPSBubDgwMjExLmgKIGhlYWRlci15ICs9IHBhcmFtLmgKIGhlYWRlci15ICs9IHBjaV9yZWdzLmgKK2hlYWRlci15ICs9IHBlcmZfZXZlbnQuaAogaGVhZGVyLXkgKz0gcGZrZXl2Mi5oCiBoZWFkZXIteSArPSBwZy5oCiBoZWFkZXIteSArPSBwaGFudG9tLmgKQEAgLTM2Myw2ICszNjQsNyBAQAogdW5pZmRlZi15ICs9IHZpZGVvZGV2Mi5oCiB1bmlmZGVmLXkgKz0gdmlkZW9kZXYuaAogdW5pZmRlZi15ICs9IHZpcnRpb19jb25maWcuaAordW5pZmRlZi15ICs9IHZpcnRpb19pZHMuaAogdW5pZmRlZi15ICs9IHZpcnRpb19ibGsuaAogdW5pZmRlZi15ICs9IHZpcnRpb19uZXQuaAogdW5pZmRlZi15ICs9IHZpcnRpb185cC5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2FncF9iYWNrZW5kLmggYi9pbmNsdWRlL2xpbnV4L2FncF9iYWNrZW5kLmgKaW5kZXggODgwMTMwZi4uOTEwMWVkNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9hZ3BfYmFja2VuZC5oCisrKyBiL2luY2x1ZGUvbGludXgvYWdwX2JhY2tlbmQuaApAQCAtNTMsNyArNTMsNyBAQAogCWludCBjdXJyZW50X21lbW9yeTsKIAlib29sIGNhbnRfdXNlX2FwZXJ0dXJlOwogCXVuc2lnbmVkIGxvbmcgcGFnZV9tYXNrOwotCXN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCAqdm1fb3BzOworCWNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCAqdm1fb3BzOwogfTsKIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL21hY2gvbW1jLmggYi9pbmNsdWRlL2xpbnV4L2FtYmEvbW1jaS5oCnNpbWlsYXJpdHkgaW5kZXggNjMlCnJlbmFtZSBmcm9tIGFyY2gvYXJtL2luY2x1ZGUvYXNtL21hY2gvbW1jLmgKcmVuYW1lIHRvIGluY2x1ZGUvbGludXgvYW1iYS9tbWNpLmgKaW5kZXggYjQ5MGVjYy4uNmI0MjQxNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vbWFjaC9tbWMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2FtYmEvbW1jaS5oCkBAIC0xLDE3ICsxLDE4IEBACiAvKgotICogIGFyY2gvYXJtL2luY2x1ZGUvYXNtL21hY2gvbW1jLmgKKyAqICBpbmNsdWRlL2xpbnV4L2FtYmEvbW1jaS5oCiAgKi8KLSNpZm5kZWYgQVNNQVJNX01BQ0hfTU1DX0gKLSNkZWZpbmUgQVNNQVJNX01BQ0hfTU1DX0gKKyNpZm5kZWYgQU1CQV9NTUNJX0gKKyNkZWZpbmUgQU1CQV9NTUNJX0gKIAogI2luY2x1ZGUgPGxpbnV4L21tYy9ob3N0Lmg+CiAKLXN0cnVjdCBtbWNfcGxhdGZvcm1fZGF0YSB7CitzdHJ1Y3QgbW1jaV9wbGF0Zm9ybV9kYXRhIHsKIAl1bnNpZ25lZCBpbnQgb2NyX21hc2s7CQkJLyogYXZhaWxhYmxlIHZvbHRhZ2VzICovCiAJdTMyICgqdHJhbnNsYXRlX3ZkZCkoc3RydWN0IGRldmljZSAqLCB1bnNpZ25lZCBpbnQpOwogCXVuc2lnbmVkIGludCAoKnN0YXR1cykoc3RydWN0IGRldmljZSAqKTsKIAlpbnQJZ3Bpb193cDsKIAlpbnQJZ3Bpb19jZDsKKwl1bnNpZ25lZCBsb25nIGNhcGFiaWxpdGllczsKIH07CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9hbWJhL3BsMDIyLmggYi9pbmNsdWRlL2xpbnV4L2FtYmEvcGwwMjIuaAppbmRleCBkY2FkMGZmLi5lNDgzNmM2YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9hbWJhL3BsMDIyLmgKKysrIGIvaW5jbHVkZS9saW51eC9hbWJhL3BsMDIyLmgKQEAgLTEzNiwxMiArMTM2LDEyIEBACiAKIC8qKgogICogZW51bSBTUEkgQ2xvY2sgUGhhc2UgLSBjbG9jayBwaGFzZSAoTW90b3JvbGEgU1BJIGludGVyZmFjZSBvbmx5KQotICogQFNTUF9DTEtfUklTSU5HX0VER0U6IFJlY2VpdmUgZGF0YSBvbiByaXNpbmcgZWRnZQotICogQFNTUF9DTEtfRkFMTElOR19FREdFOiBSZWNlaXZlIGRhdGEgb24gZmFsbGluZyBlZGdlCisgKiBAU1NQX0NMS19GSVJTVF9FREdFOiBSZWNlaXZlIGRhdGEgb24gZmlyc3QgZWRnZSB0cmFuc2l0aW9uIChhY3R1YWwgZGlyZWN0aW9uIGRlcGVuZHMgb24gcG9sYXJpdHkpCisgKiBAU1NQX0NMS19TRUNPTkRfRURHRTogUmVjZWl2ZSBkYXRhIG9uIHNlY29uZCBlZGdlIHRyYW5zaXRpb24gKGFjdHVhbCBkaXJlY3Rpb24gZGVwZW5kcyBvbiBwb2xhcml0eSkKICAqLwogZW51bSBzc3Bfc3BpX2Nsa19waGFzZSB7Ci0JU1NQX0NMS19SSVNJTkdfRURHRSwKLQlTU1BfQ0xLX0ZBTExJTkdfRURHRQorCVNTUF9DTEtfRklSU1RfRURHRSwKKwlTU1BfQ0xLX1NFQ09ORF9FREdFCiB9OwogCiAvKioKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYXRhLmggYi9pbmNsdWRlL2xpbnV4L2F0YS5oCmluZGV4IDYyOTlhMjUuLjRmYjM1NzMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYXRhLmgKKysrIGIvaW5jbHVkZS9saW51eC9hdGEuaApAQCAtMzM0LDkgKzMzNCwxMiBAQAogCVNFVEZFQVRVUkVTX1NBVEFfRElTQUJMRSA9IDB4OTAsIC8qIERpc2FibGUgdXNlIG9mIFNBVEEgZmVhdHVyZSAqLwogCiAJLyogU0VURkVBVFVSRSBTZWN0b3IgY291bnRzIGZvciBTQVRBIGZlYXR1cmVzICovCi0JU0FUQV9BTgkJCT0gMHgwNSwgIC8qIEFzeW5jaHJvbm91cyBOb3RpZmljYXRpb24gKi8KLQlTQVRBX0RJUE0JCT0gMHgwMywgIC8qIERldmljZSBJbml0aWF0ZWQgUG93ZXIgTWFuYWdlbWVudCAqLwotCVNBVEFfRlBETUFfQUEJCT0gMHgwMiwgIC8qIERNQSBTZXR1cCBGSVMgQXV0by1BY3RpdmF0ZSAqLworCVNBVEFfRlBETUFfT0ZGU0VUCT0gMHgwMSwJLyogRlBETUEgbm9uLXplcm8gYnVmZmVyIG9mZnNldHMgKi8KKwlTQVRBX0ZQRE1BX0FBCQk9IDB4MDIsIC8qIEZQRE1BIFNldHVwIEZJUyBBdXRvLUFjdGl2YXRlICovCisJU0FUQV9ESVBNCQk9IDB4MDMsCS8qIERldmljZSBJbml0aWF0ZWQgUG93ZXIgTWFuYWdlbWVudCAqLworCVNBVEFfRlBETUFfSU5fT1JERVIJPSAweDA0LAkvKiBGUERNQSBpbi1vcmRlciBkYXRhIGRlbGl2ZXJ5ICovCisJU0FUQV9BTgkJCT0gMHgwNSwJLyogQXN5bmNocm9ub3VzIE5vdGlmaWNhdGlvbiAqLworCVNBVEFfU1NQCQk9IDB4MDYsCS8qIFNvZnR3YXJlIFNldHRpbmdzIFByZXNlcnZhdGlvbiAqLwogCiAJLyogZmVhdHVyZSB2YWx1ZXMgZm9yIFNFVF9NQVggKi8KIAlBVEFfU0VUX01BWF9BRERSCT0gMHgwMCwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmFja2luZy1kZXYuaCBiL2luY2x1ZGUvbGludXgvYmFja2luZy1kZXYuaAppbmRleCAwZWUzM2MyLi5iNDQ5ZTczIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2JhY2tpbmctZGV2LmgKKysrIGIvaW5jbHVkZS9saW51eC9iYWNraW5nLWRldi5oCkBAIC0xMDEsNyArMTAxLDggQEAKIAkJY29uc3QgY2hhciAqZm10LCAuLi4pOwogaW50IGJkaV9yZWdpc3Rlcl9kZXYoc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gKmJkaSwgZGV2X3QgZGV2KTsKIHZvaWQgYmRpX3VucmVnaXN0ZXIoc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gKmJkaSk7Ci12b2lkIGJkaV9zdGFydF93cml0ZWJhY2soc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gKmJkaSwgbG9uZyBucl9wYWdlcyk7Cit2b2lkIGJkaV9zdGFydF93cml0ZWJhY2soc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gKmJkaSwgc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKKwkJCQlsb25nIG5yX3BhZ2VzKTsKIGludCBiZGlfd3JpdGViYWNrX3Rhc2soc3RydWN0IGJkaV93cml0ZWJhY2sgKndiKTsKIGludCBiZGlfaGFzX2RpcnR5X2lvKHN0cnVjdCBiYWNraW5nX2Rldl9pbmZvICpiZGkpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JhY2tsaWdodC5oIGIvaW5jbHVkZS9saW51eC9iYWNrbGlnaHQuaAppbmRleCA3OWNhMmRhLi4wZjVmNTc4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2JhY2tsaWdodC5oCisrKyBiL2luY2x1ZGUvbGludXgvYmFja2xpZ2h0LmgKQEAgLTI3LDYgKzI3LDExIEBACiAgKiBBbnkgb3RoZXIgdXNlIG9mIHRoZSBsb2NrcyBiZWxvdyBpcyBwcm9iYWJseSB3cm9uZy4KICAqLwogCitlbnVtIGJhY2tsaWdodF91cGRhdGVfcmVhc29uIHsKKwlCQUNLTElHSFRfVVBEQVRFX0hPVEtFWSwKKwlCQUNLTElHSFRfVVBEQVRFX1NZU0ZTLAorfTsKKwogc3RydWN0IGJhY2tsaWdodF9kZXZpY2U7CiBzdHJ1Y3QgZmJfaW5mbzsKIApAQCAtMTAwLDYgKzEwNSw4IEBACiBleHRlcm4gc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJhY2tsaWdodF9kZXZpY2VfcmVnaXN0ZXIoY29uc3QgY2hhciAqbmFtZSwKIAlzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRldmRhdGEsIHN0cnVjdCBiYWNrbGlnaHRfb3BzICpvcHMpOwogZXh0ZXJuIHZvaWQgYmFja2xpZ2h0X2RldmljZV91bnJlZ2lzdGVyKHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiZCk7CitleHRlcm4gdm9pZCBiYWNrbGlnaHRfZm9yY2VfdXBkYXRlKHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiZCwKKwkJCQkgICBlbnVtIGJhY2tsaWdodF91cGRhdGVfcmVhc29uIHJlYXNvbik7CiAKICNkZWZpbmUgdG9fYmFja2xpZ2h0X2RldmljZShvYmopIGNvbnRhaW5lcl9vZihvYmosIHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlLCBkZXYpCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmxrZGV2LmggYi9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oCmluZGV4IGUyM2E4NmMuLjIyMWNlY2QgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYmxrZGV2LmgKKysrIGIvaW5jbHVkZS9saW51eC9ibGtkZXYuaApAQCAtODIsNyArODIsNiBAQAogZW51bSB7CiAJUkVRX0xCX09QX0VKRUNUCT0gMHg0MCwJCS8qIGVqZWN0IHJlcXVlc3QgKi8KIAlSRVFfTEJfT1BfRkxVU0ggPSAweDQxLAkJLyogZmx1c2ggcmVxdWVzdCAqLwotCVJFUV9MQl9PUF9ESVNDQVJEID0gMHg0MiwJLyogZGlzY2FyZCBzZWN0b3JzICovCiB9OwogCiAvKgpAQCAtMjYxLDcgKzI2MCw2IEBACiB0eXBlZGVmIGludCAobWFrZV9yZXF1ZXN0X2ZuKSAoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCBiaW8gKmJpbyk7CiB0eXBlZGVmIGludCAocHJlcF9ycV9mbikgKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICosIHN0cnVjdCByZXF1ZXN0ICopOwogdHlwZWRlZiB2b2lkICh1bnBsdWdfZm4pIChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqKTsKLXR5cGVkZWYgaW50IChwcmVwYXJlX2Rpc2NhcmRfZm4pIChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqLCBzdHJ1Y3QgcmVxdWVzdCAqKTsKIAogc3RydWN0IGJpb192ZWM7CiBzdHJ1Y3QgYnZlY19tZXJnZV9kYXRhIHsKQEAgLTMxMyw2ICszMTEsNyBAQAogCXVuc2lnbmVkIGludAkJYWxpZ25tZW50X29mZnNldDsKIAl1bnNpZ25lZCBpbnQJCWlvX21pbjsKIAl1bnNpZ25lZCBpbnQJCWlvX29wdDsKKwl1bnNpZ25lZCBpbnQJCW1heF9kaXNjYXJkX3NlY3RvcnM7CiAKIAl1bnNpZ25lZCBzaG9ydAkJbG9naWNhbF9ibG9ja19zaXplOwogCXVuc2lnbmVkIHNob3J0CQltYXhfaHdfc2VnbWVudHM7CkBAIC0zNDAsNyArMzM5LDYgQEAKIAltYWtlX3JlcXVlc3RfZm4JCSptYWtlX3JlcXVlc3RfZm47CiAJcHJlcF9ycV9mbgkJKnByZXBfcnFfZm47CiAJdW5wbHVnX2ZuCQkqdW5wbHVnX2ZuOwotCXByZXBhcmVfZGlzY2FyZF9mbgkqcHJlcGFyZV9kaXNjYXJkX2ZuOwogCW1lcmdlX2J2ZWNfZm4JCSptZXJnZV9idmVjX2ZuOwogCXByZXBhcmVfZmx1c2hfZm4JKnByZXBhcmVfZmx1c2hfZm47CiAJc29mdGlycV9kb25lX2ZuCQkqc29mdGlycV9kb25lX2ZuOwpAQCAtNDYwLDYgKzQ1OCw3IEBACiAjZGVmaW5lIFFVRVVFX0ZMQUdfVklSVCAgICAgICAgUVVFVUVfRkxBR19OT05ST1QgLyogcGFyYXZpcnQgZGV2aWNlICovCiAjZGVmaW5lIFFVRVVFX0ZMQUdfSU9fU1RBVCAgICAgMTUJLyogZG8gSU8gc3RhdHMgKi8KICNkZWZpbmUgUVVFVUVfRkxBR19DUQkgICAgICAgMTYJLyogaGFyZHdhcmUgZG9lcyBxdWV1aW5nICovCisjZGVmaW5lIFFVRVVFX0ZMQUdfRElTQ0FSRCAgICAgMTcJLyogc3VwcG9ydHMgRElTQ0FSRCAqLwogCiAjZGVmaW5lIFFVRVVFX0ZMQUdfREVGQVVMVAkoKDEgPDwgUVVFVUVfRkxBR19JT19TVEFUKSB8CQlcCiAJCQkJICgxIDw8IFFVRVVFX0ZMQUdfQ0xVU1RFUikgfAkJXApAQCAtNTkxLDYgKzU5MCw3IEBACiAjZGVmaW5lIGJsa19xdWV1ZV9mbHVzaGluZyhxKQkoKHEpLT5vcmRzZXEpCiAjZGVmaW5lIGJsa19xdWV1ZV9zdGFja2FibGUocSkJXAogCXRlc3RfYml0KFFVRVVFX0ZMQUdfU1RBQ0tBQkxFLCAmKHEpLT5xdWV1ZV9mbGFncykKKyNkZWZpbmUgYmxrX3F1ZXVlX2Rpc2NhcmQocSkJdGVzdF9iaXQoUVVFVUVfRkxBR19ESVNDQVJELCAmKHEpLT5xdWV1ZV9mbGFncykKIAogI2RlZmluZSBibGtfZnNfcmVxdWVzdChycSkJKChycSktPmNtZF90eXBlID09IFJFUV9UWVBFX0ZTKQogI2RlZmluZSBibGtfcGNfcmVxdWVzdChycSkJKChycSktPmNtZF90eXBlID09IFJFUV9UWVBFX0JMT0NLX1BDKQpAQCAtOTI5LDYgKzkyOSw4IEBACiBleHRlcm4gdm9pZCBibGtfcXVldWVfbWF4X3BoeXNfc2VnbWVudHMoc3RydWN0IHJlcXVlc3RfcXVldWUgKiwgdW5zaWduZWQgc2hvcnQpOwogZXh0ZXJuIHZvaWQgYmxrX3F1ZXVlX21heF9od19zZWdtZW50cyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqLCB1bnNpZ25lZCBzaG9ydCk7CiBleHRlcm4gdm9pZCBibGtfcXVldWVfbWF4X3NlZ21lbnRfc2l6ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqLCB1bnNpZ25lZCBpbnQpOworZXh0ZXJuIHZvaWQgYmxrX3F1ZXVlX21heF9kaXNjYXJkX3NlY3RvcnMoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsCisJCXVuc2lnbmVkIGludCBtYXhfZGlzY2FyZF9zZWN0b3JzKTsKIGV4dGVybiB2b2lkIGJsa19xdWV1ZV9sb2dpY2FsX2Jsb2NrX3NpemUoc3RydWN0IHJlcXVlc3RfcXVldWUgKiwgdW5zaWduZWQgc2hvcnQpOwogZXh0ZXJuIHZvaWQgYmxrX3F1ZXVlX3BoeXNpY2FsX2Jsb2NrX3NpemUoc3RydWN0IHJlcXVlc3RfcXVldWUgKiwgdW5zaWduZWQgc2hvcnQpOwogZXh0ZXJuIHZvaWQgYmxrX3F1ZXVlX2FsaWdubWVudF9vZmZzZXQoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsCkBAIC05NTUsNyArOTU3LDYgQEAKIGV4dGVybiB2b2lkIGJsa19xdWV1ZV9kbWFfYWxpZ25tZW50KHN0cnVjdCByZXF1ZXN0X3F1ZXVlICosIGludCk7CiBleHRlcm4gdm9pZCBibGtfcXVldWVfdXBkYXRlX2RtYV9hbGlnbm1lbnQoc3RydWN0IHJlcXVlc3RfcXVldWUgKiwgaW50KTsKIGV4dGVybiB2b2lkIGJsa19xdWV1ZV9zb2Z0aXJxX2RvbmUoc3RydWN0IHJlcXVlc3RfcXVldWUgKiwgc29mdGlycV9kb25lX2ZuICopOwotZXh0ZXJuIHZvaWQgYmxrX3F1ZXVlX3NldF9kaXNjYXJkKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICosIHByZXBhcmVfZGlzY2FyZF9mbiAqKTsKIGV4dGVybiB2b2lkIGJsa19xdWV1ZV9ycV90aW1lZF9vdXQoc3RydWN0IHJlcXVlc3RfcXVldWUgKiwgcnFfdGltZWRfb3V0X2ZuICopOwogZXh0ZXJuIHZvaWQgYmxrX3F1ZXVlX3JxX3RpbWVvdXQoc3RydWN0IHJlcXVlc3RfcXVldWUgKiwgdW5zaWduZWQgaW50KTsKIGV4dGVybiBzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyAqYmxrX2dldF9iYWNraW5nX2Rldl9pbmZvKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpOwpAQCAtMTA4MCwyNSArMTA4MSwzNyBAQAogCXJldHVybiBxLT5saW1pdHMucGh5c2ljYWxfYmxvY2tfc2l6ZTsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgYmRldl9waHlzaWNhbF9ibG9ja19zaXplKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpCit7CisJcmV0dXJuIHF1ZXVlX3BoeXNpY2FsX2Jsb2NrX3NpemUoYmRldl9nZXRfcXVldWUoYmRldikpOworfQorCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBxdWV1ZV9pb19taW4oc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpCiB7CiAJcmV0dXJuIHEtPmxpbWl0cy5pb19taW47CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IGJkZXZfaW9fbWluKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpCit7CisJcmV0dXJuIHF1ZXVlX2lvX21pbihiZGV2X2dldF9xdWV1ZShiZGV2KSk7Cit9CisKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHF1ZXVlX2lvX29wdChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSkKIHsKIAlyZXR1cm4gcS0+bGltaXRzLmlvX29wdDsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgYmRldl9pb19vcHQoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldikKK3sKKwlyZXR1cm4gcXVldWVfaW9fb3B0KGJkZXZfZ2V0X3F1ZXVlKGJkZXYpKTsKK30KKwogc3RhdGljIGlubGluZSBpbnQgcXVldWVfYWxpZ25tZW50X29mZnNldChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSkKIHsKLQlpZiAocSAmJiBxLT5saW1pdHMubWlzYWxpZ25lZCkKKwlpZiAocS0+bGltaXRzLm1pc2FsaWduZWQpCiAJCXJldHVybiAtMTsKIAotCWlmIChxICYmIHEtPmxpbWl0cy5hbGlnbm1lbnRfb2Zmc2V0KQotCQlyZXR1cm4gcS0+bGltaXRzLmFsaWdubWVudF9vZmZzZXQ7Ci0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gcS0+bGltaXRzLmFsaWdubWVudF9vZmZzZXQ7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IHF1ZXVlX3NlY3Rvcl9hbGlnbm1lbnRfb2Zmc2V0KHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLApAQCAtMTEwOCw2ICsxMTIxLDE5IEBACiAJCSYgKHEtPmxpbWl0cy5pb19taW4gLSAxKTsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgYmRldl9hbGlnbm1lbnRfb2Zmc2V0KHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpCit7CisJc3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSBiZGV2X2dldF9xdWV1ZShiZGV2KTsKKworCWlmIChxLT5saW1pdHMubWlzYWxpZ25lZCkKKwkJcmV0dXJuIC0xOworCisJaWYgKGJkZXYgIT0gYmRldi0+YmRfY29udGFpbnMpCisJCXJldHVybiBiZGV2LT5iZF9wYXJ0LT5hbGlnbm1lbnRfb2Zmc2V0OworCisJcmV0dXJuIHEtPmxpbWl0cy5hbGlnbm1lbnRfb2Zmc2V0OworfQorCiBzdGF0aWMgaW5saW5lIGludCBxdWV1ZV9kbWFfYWxpZ25tZW50KHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKQogewogCXJldHVybiBxID8gcS0+ZG1hX2FsaWdubWVudCA6IDUxMTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmxrdHJhY2VfYXBpLmggYi9pbmNsdWRlL2xpbnV4L2Jsa3RyYWNlX2FwaS5oCmluZGV4IDdlNDM1MGUuLjNiNzNiOTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYmxrdHJhY2VfYXBpLmgKKysrIGIvaW5jbHVkZS9saW51eC9ibGt0cmFjZV9hcGkuaApAQCAtMTk4LDYgKzE5OCw3IEBACiAJCQkgICBjaGFyIF9fdXNlciAqYXJnKTsKIGV4dGVybiBpbnQgYmxrX3RyYWNlX3N0YXJ0c3RvcChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgaW50IHN0YXJ0KTsKIGV4dGVybiBpbnQgYmxrX3RyYWNlX3JlbW92ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSk7CitleHRlcm4gdm9pZCBibGtfdHJhY2VfcmVtb3ZlX3N5c2ZzKHN0cnVjdCBkZXZpY2UgKmRldik7CiBleHRlcm4gaW50IGJsa190cmFjZV9pbml0X3N5c2ZzKHN0cnVjdCBkZXZpY2UgKmRldik7CiAKIGV4dGVybiBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGJsa190cmFjZV9hdHRyX2dyb3VwOwpAQCAtMjExLDYgKzIxMiw3IEBACiAjIGRlZmluZSBibGtfdHJhY2Vfc3RhcnRzdG9wKHEsIHN0YXJ0KQkJCSgtRU5PVFRZKQogIyBkZWZpbmUgYmxrX3RyYWNlX3JlbW92ZShxKQkJCQkoLUVOT1RUWSkKICMgZGVmaW5lIGJsa19hZGRfdHJhY2VfbXNnKHEsIGZtdCwgLi4uKQkJCWRvIHsgfSB3aGlsZSAoMCkKKyMgZGVmaW5lIGJsa190cmFjZV9yZW1vdmVfc3lzZnMoZGV2KQkJCWRvIHsgfSB3aGlsZSAoMCkKIHN0YXRpYyBpbmxpbmUgaW50IGJsa190cmFjZV9pbml0X3N5c2ZzKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY2dyb3VwLmggYi9pbmNsdWRlL2xpbnV4L2Nncm91cC5oCmluZGV4IGI2MmJiOTIuLjAwMDhkZWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY2dyb3VwLmgKKysrIGIvaW5jbHVkZS9saW51eC9jZ3JvdXAuaApAQCAtMzcsNyArMzcsNyBAQAogZXh0ZXJuIGludCBjZ3JvdXBzdGF0c19idWlsZChzdHJ1Y3QgY2dyb3Vwc3RhdHMgKnN0YXRzLAogCQkJCXN0cnVjdCBkZW50cnkgKmRlbnRyeSk7CiAKLWV4dGVybiBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByb2NfY2dyb3VwX29wZXJhdGlvbnM7CitleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwcm9jX2Nncm91cF9vcGVyYXRpb25zOwogCiAvKiBEZWZpbmUgdGhlIGVudW1lcmF0aW9uIG9mIGFsbCBjZ3JvdXAgc3Vic3lzdGVtcyAqLwogI2RlZmluZSBTVUJTWVMoX3gpIF94ICMjIF9zdWJzeXNfaWQsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NwdWZyZXEuaCBiL2luY2x1ZGUvbGludXgvY3B1ZnJlcS5oCmluZGV4IDQ0NzE3ZWIuLjc5YTIzNDAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY3B1ZnJlcS5oCisrKyBiL2luY2x1ZGUvbGludXgvY3B1ZnJlcS5oCkBAIC0yOTEsOCArMjkxLDE1IEBACiBpbnQgY3B1ZnJlcV9nZXRfcG9saWN5KHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5LCB1bnNpZ25lZCBpbnQgY3B1KTsKIGludCBjcHVmcmVxX3VwZGF0ZV9wb2xpY3kodW5zaWduZWQgaW50IGNwdSk7CiAKKyNpZmRlZiBDT05GSUdfQ1BVX0ZSRVEKIC8qIHF1ZXJ5IHRoZSBjdXJyZW50IENQVSBmcmVxdWVuY3kgKGluIGtIeikuIElmIHplcm8sIGNwdWZyZXEgY291bGRuJ3QgZGV0ZWN0IGl0ICovCiB1bnNpZ25lZCBpbnQgY3B1ZnJlcV9nZXQodW5zaWduZWQgaW50IGNwdSk7CisjZWxzZQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgY3B1ZnJlcV9nZXQodW5zaWduZWQgaW50IGNwdSkKK3sKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgogCiAvKiBxdWVyeSB0aGUgbGFzdCBrbm93biBDUFUgZnJlcSAoaW4ga0h6KS4gSWYgemVybywgY3B1ZnJlcSBjb3VsZG4ndCBkZXRlY3QgaXQgKi8KICNpZmRlZiBDT05GSUdfQ1BVX0ZSRVEKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L2RldmljZS5oCmluZGV4IGFjYTMxYmYuLjJlYTNlNDkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZGV2aWNlLmgKKysrIGIvaW5jbHVkZS9saW51eC9kZXZpY2UuaApAQCAtMTI0LDcgKzEyNCw5IEBACiAJc3RydWN0IGJ1c190eXBlCQkqYnVzOwogCiAJc3RydWN0IG1vZHVsZQkJKm93bmVyOwotCWNvbnN0IGNoYXIgCQkqbW9kX25hbWU7CS8qIHVzZWQgZm9yIGJ1aWx0LWluIG1vZHVsZXMgKi8KKwljb25zdCBjaGFyCQkqbW9kX25hbWU7CS8qIHVzZWQgZm9yIGJ1aWx0LWluIG1vZHVsZXMgKi8KKworCWJvb2wgc3VwcHJlc3NfYmluZF9hdHRyczsJLyogZGlzYWJsZXMgYmluZC91bmJpbmQgdmlhIHN5c2ZzICovCiAKIAlpbnQgKCpwcm9iZSkgKHN0cnVjdCBkZXZpY2UgKmRldik7CiAJaW50ICgqcmVtb3ZlKSAoc3RydWN0IGRldmljZSAqZGV2KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZWxmLmggYi9pbmNsdWRlL2xpbnV4L2VsZi5oCmluZGV4IDQ1YTkzN2IuLjkwYTRlZDAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZWxmLmgKKysrIGIvaW5jbHVkZS9saW51eC9lbGYuaApAQCAtMzYxLDYgKzM2MSw3IEBACiAjZGVmaW5lIE5UX1BQQ19WU1gJMHgxMDIJCS8qIFBvd2VyUEMgVlNYIHJlZ2lzdGVycyAqLwogI2RlZmluZSBOVF8zODZfVExTCTB4MjAwCQkvKiBpMzg2IFRMUyBzbG90cyAoc3RydWN0IHVzZXJfZGVzYykgKi8KICNkZWZpbmUgTlRfMzg2X0lPUEVSTQkweDIwMQkJLyogeDg2IGlvIHBlcm1pc3Npb24gYml0bWFwICgxPWRlbnkpICovCisjZGVmaW5lIE5UX1BSWFNUQVRVUwkweDMwMAkJLyogczM5MCB1cHBlciByZWdpc3RlciBoYWx2ZXMgKi8KIAogCiAvKiBOb3RlIGhlYWRlciBpbiBhIFBUX05PVEUgc2VjdGlvbiAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mYi5oIGIvaW5jbHVkZS9saW51eC9mYi5oCmluZGV4IGY4NDdkZjkuLmEzNGJkZjUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZmIuaAorKysgYi9pbmNsdWRlL2xpbnV4L2ZiLmgKQEAgLTEzMyw2ICsxMzMsNyBAQAogI2RlZmluZSBGQl9BQ0NFTF9ORU9NQUdJQ19OTTIyMzAgOTYJLyogTmVvTWFnaWMgTk0yMjMwICAgICAgICAgICAgICAqLwogI2RlZmluZSBGQl9BQ0NFTF9ORU9NQUdJQ19OTTIzNjAgOTcJLyogTmVvTWFnaWMgTk0yMzYwICAgICAgICAgICAgICAqLwogI2RlZmluZSBGQl9BQ0NFTF9ORU9NQUdJQ19OTTIzODAgOTgJLyogTmVvTWFnaWMgTk0yMzgwICAgICAgICAgICAgICAqLworI2RlZmluZSBGQl9BQ0NFTF9QWEEzWFgJCSA5OQkvKiBQWEEzeHgJCQkqLwogCiAjZGVmaW5lIEZCX0FDQ0VMX1NBVkFHRTQgICAgICAgIDB4ODAJLyogUzMgU2F2YWdlNCAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBGQl9BQ0NFTF9TQVZBR0UzRCAgICAgICAweDgxCS8qIFMzIFNhdmFnZTNEICAgICAgICAgICAgICAgICAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnMuaCBiL2luY2x1ZGUvbGludXgvZnMuaAppbmRleCAyYWRhYTI1Li4yNjIwYThjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ZzLmgKKysrIGIvaW5jbHVkZS9saW51eC9mcy5oCkBAIC0zMDAsNiArMzAwLDEwIEBACiAjZGVmaW5lIEJMS1RSQUNFU1RPUCBfSU8oMHgxMiwxMTcpCiAjZGVmaW5lIEJMS1RSQUNFVEVBUkRPV04gX0lPKDB4MTIsMTE4KQogI2RlZmluZSBCTEtESVNDQVJEIF9JTygweDEyLDExOSkKKyNkZWZpbmUgQkxLSU9NSU4gX0lPKDB4MTIsMTIwKQorI2RlZmluZSBCTEtJT09QVCBfSU8oMHgxMiwxMjEpCisjZGVmaW5lIEJMS0FMSUdOT0ZGIF9JTygweDEyLDEyMikKKyNkZWZpbmUgQkxLUEJTWkdFVCBfSU8oMHgxMiwxMjMpCiAKICNkZWZpbmUgQk1BUF9JT0NUTCAxCQkvKiBvYnNvbGV0ZSAtIGtlcHQgZm9yIGNvbXBhdGliaWxpdHkgKi8KICNkZWZpbmUgRklCTUFQCSAgIF9JTygweDAwLDEpCS8qIGJtYXAgYWNjZXNzICovCkBAIC0yNDQ2LDcgKzI0NTAsNyBAQAogCV9fc2ltcGxlX2F0dHJfY2hlY2tfZm9ybWF0KF9fZm10LCAwdWxsKTsJCQlcCiAJcmV0dXJuIHNpbXBsZV9hdHRyX29wZW4oaW5vZGUsIGZpbGUsIF9fZ2V0LCBfX3NldCwgX19mbXQpOwlcCiB9CQkJCQkJCQkJXAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgX19mb3BzID0gewkJCQlcCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBfX2ZvcHMgPSB7CQkJCVwKIAkub3duZXIJID0gVEhJU19NT0RVTEUsCQkJCQkJXAogCS5vcGVuCSA9IF9fZm9wcyAjIyBfb3BlbiwJCQkJCVwKIAkucmVsZWFzZSA9IHNpbXBsZV9hdHRyX3JlbGVhc2UsCQkJCQlcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oIGIvaW5jbHVkZS9saW51eC9mdHJhY2UuaAppbmRleCBjZDNkMmFiLi4wYjRmOTdkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oCisrKyBiL2luY2x1ZGUvbGludXgvZnRyYWNlLmgKQEAgLTI0MSw3ICsyNDEsNyBAQAogIyBkZWZpbmUgZnRyYWNlX3NldF9maWx0ZXIoYnVmLCBsZW4sIHJlc2V0KQlkbyB7IH0gd2hpbGUgKDApCiAjIGRlZmluZSBmdHJhY2VfZGlzYWJsZV9kYWVtb24oKQkJZG8geyB9IHdoaWxlICgwKQogIyBkZWZpbmUgZnRyYWNlX2VuYWJsZV9kYWVtb24oKQkJCWRvIHsgfSB3aGlsZSAoMCkKLXN0YXRpYyBpbmxpbmUgdm9pZCBmdHJhY2VfcmVsZWFzZSh2b2lkICpzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplKSB7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBmdHJhY2VfcmVsZWFzZV9tb2Qoc3RydWN0IG1vZHVsZSAqbW9kKSB7fQogc3RhdGljIGlubGluZSBpbnQgcmVnaXN0ZXJfZnRyYWNlX2NvbW1hbmQoc3RydWN0IGZ0cmFjZV9mdW5jX2NvbW1hbmQgKmNtZCkKIHsKIAlyZXR1cm4gLUVJTlZBTDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnV0ZXguaCBiL2luY2x1ZGUvbGludXgvZnV0ZXguaAppbmRleCA4ZWMxNzk5Li4xZTVhMjZkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Z1dGV4LmgKKysrIGIvaW5jbHVkZS9saW51eC9mdXRleC5oCkBAIC0zMyw4ICszMyw4IEBACiAjZGVmaW5lIEZVVEVYX0xPQ0tfUElfUFJJVkFURQkoRlVURVhfTE9DS19QSSB8IEZVVEVYX1BSSVZBVEVfRkxBRykKICNkZWZpbmUgRlVURVhfVU5MT0NLX1BJX1BSSVZBVEUJKEZVVEVYX1VOTE9DS19QSSB8IEZVVEVYX1BSSVZBVEVfRkxBRykKICNkZWZpbmUgRlVURVhfVFJZTE9DS19QSV9QUklWQVRFIChGVVRFWF9UUllMT0NLX1BJIHwgRlVURVhfUFJJVkFURV9GTEFHKQotI2RlZmluZSBGVVRFWF9XQUlUX0JJVFNFVF9QUklWQVRFCShGVVRFWF9XQUlUX0JJVFMgfCBGVVRFWF9QUklWQVRFX0ZMQUcpCi0jZGVmaW5lIEZVVEVYX1dBS0VfQklUU0VUX1BSSVZBVEUJKEZVVEVYX1dBS0VfQklUUyB8IEZVVEVYX1BSSVZBVEVfRkxBRykKKyNkZWZpbmUgRlVURVhfV0FJVF9CSVRTRVRfUFJJVkFURQkoRlVURVhfV0FJVF9CSVRTRVQgfCBGVVRFWF9QUklWQVRFX0ZMQUcpCisjZGVmaW5lIEZVVEVYX1dBS0VfQklUU0VUX1BSSVZBVEUJKEZVVEVYX1dBS0VfQklUU0VUIHwgRlVURVhfUFJJVkFURV9GTEFHKQogI2RlZmluZSBGVVRFWF9XQUlUX1JFUVVFVUVfUElfUFJJVkFURQkoRlVURVhfV0FJVF9SRVFVRVVFX1BJIHwgXAogCQkJCQkgRlVURVhfUFJJVkFURV9GTEFHKQogI2RlZmluZSBGVVRFWF9DTVBfUkVRVUVVRV9QSV9QUklWQVRFCShGVVRFWF9DTVBfUkVRVUVVRV9QSSB8IFwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oIGIvaW5jbHVkZS9saW51eC9odWdldGxiLmgKaW5kZXggMTFhYjE5YS4uNDFhNTlhZmMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oCisrKyBiL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oCkBAIC0zLDE1ICszLDE1IEBACiAKICNpbmNsdWRlIDxsaW51eC9mcy5oPgogCitzdHJ1Y3QgY3RsX3RhYmxlOworc3RydWN0IHVzZXJfc3RydWN0OworCiAjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRQogCiAjaW5jbHVkZSA8bGludXgvbWVtcG9saWN5Lmg+CiAjaW5jbHVkZSA8bGludXgvc2htLmg+CiAjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CiAKLXN0cnVjdCBjdGxfdGFibGU7Ci1zdHJ1Y3QgdXNlcl9zdHJ1Y3Q7Ci0KIGludCBQYWdlSHVnZShzdHJ1Y3QgcGFnZSAqcGFnZSk7CiAKIHN0YXRpYyBpbmxpbmUgaW50IGlzX3ZtX2h1Z2V0bGJfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKQEAgLTE2Myw3ICsxNjMsNyBAQAogfQogCiBleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBodWdldGxiZnNfZmlsZV9vcGVyYXRpb25zOwotZXh0ZXJuIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBodWdldGxiX3ZtX29wczsKK2V4dGVybiBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgaHVnZXRsYl92bV9vcHM7CiBzdHJ1Y3QgZmlsZSAqaHVnZXRsYl9maWxlX3NldHVwKGNvbnN0IGNoYXIgKm5hbWUsIHNpemVfdCBzaXplLCBpbnQgYWNjdCwKIAkJCQlzdHJ1Y3QgdXNlcl9zdHJ1Y3QgKip1c2VyLCBpbnQgY3JlYXRfZmxhZ3MpOwogaW50IGh1Z2V0bGJfZ2V0X3F1b3RhKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBsb25nIGRlbHRhKTsKQEAgLTE4Nyw3ICsxODcsMTEgQEAKIAogI2RlZmluZSBpc19maWxlX2h1Z2VwYWdlcyhmaWxlKQkJCTAKICNkZWZpbmUgc2V0X2ZpbGVfaHVnZXBhZ2VzKGZpbGUpCQlCVUcoKQotI2RlZmluZSBodWdldGxiX2ZpbGVfc2V0dXAobmFtZSxzaXplLGFjY3QsdXNlcixjcmVhdCkJRVJSX1BUUigtRU5PU1lTKQorc3RhdGljIGlubGluZSBzdHJ1Y3QgZmlsZSAqaHVnZXRsYl9maWxlX3NldHVwKGNvbnN0IGNoYXIgKm5hbWUsIHNpemVfdCBzaXplLAorCQlpbnQgYWNjdGZsYWcsIHN0cnVjdCB1c2VyX3N0cnVjdCAqKnVzZXIsIGludCBjcmVhdF9mbGFncykKK3sKKwlyZXR1cm4gRVJSX1BUUigtRU5PU1lTKTsKK30KIAogI2VuZGlmIC8qICFDT05GSUdfSFVHRVRMQkZTICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaTJjL3R3bDQwMzAuaCBiL2luY2x1ZGUvbGludXgvaTJjL3R3bDQwMzAuaAppbmRleCAyZDAyZGZkLi41MDg4MjRlZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pMmMvdHdsNDAzMC5oCisrKyBiL2luY2x1ZGUvbGludXgvaTJjL3R3bDQwMzAuaApAQCAtMzQ5LDExICszNDksMTEgQEAKIAlpbnQJCWlycV9saW5lOwogfTsKIAotLyogQm9hcmRzIGhhdmUgdW5pcWUgbWFwcGluZ3Mgb2Yge2NvbCwgcm93fSAtLT4ga2V5Y29kZS4KLSAqIENvbHVtbiBhbmQgcm93IGFyZSA0IGJpdHMsIGJ1dCByYW5nZSBvbmx5IGZyb20gMC4uNy4KKy8qIEJvYXJkcyBoYXZlIHVuaXFlIG1hcHBpbmdzIG9mIHtyb3csIGNvbH0gLS0+IGtleWNvZGUuCisgKiBDb2x1bW4gYW5kIHJvdyBhcmUgOCBiaXRzIGVhY2gsIGJ1dCByYW5nZSBvbmx5IGZyb20gMC4uNy4KICAqIGEgUEVSU0lTVEVOVF9LRVkgaXMgImFsd2F5cyBvbiIgYW5kIG5ldmVyIHJlcG9ydGVkLgogICovCi0jZGVmaW5lIFBFUlNJU1RFTlRfS0VZKGMsIHIpCUtFWSgoYyksIChyKSwgS0VZX1JFU0VSVkVEKQorI2RlZmluZSBQRVJTSVNURU5UX0tFWShyLCBjKQlLRVkoKHIpLCAoYyksIEtFWV9SRVNFUlZFRCkKIAogc3RydWN0IHR3bDQwMzBfa2V5cGFkX2RhdGEgewogCWNvbnN0IHN0cnVjdCBtYXRyaXhfa2V5bWFwX2RhdGEgKmtleW1hcF9kYXRhOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pbml0LmggYi9pbmNsdWRlL2xpbnV4L2luaXQuaAppbmRleCA0MDBhZGJiLi5mZjhiZGU1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2luaXQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2luaXQuaApAQCAtMjcxLDYgKzI3MSw3IEBACiAjZWxzZSAvKiBNT0RVTEUgKi8KIAogLyogRG9uJ3QgdXNlIHRoZXNlIGluIG1vZHVsZXMsIGJ1dCBzb21lIHBlb3BsZSBkby4uLiAqLworI2RlZmluZSBlYXJseV9pbml0Y2FsbChmbikJCW1vZHVsZV9pbml0KGZuKQogI2RlZmluZSBjb3JlX2luaXRjYWxsKGZuKQkJbW9kdWxlX2luaXQoZm4pCiAjZGVmaW5lIHBvc3Rjb3JlX2luaXRjYWxsKGZuKQkJbW9kdWxlX2luaXQoZm4pCiAjZGVmaW5lIGFyY2hfaW5pdGNhbGwoZm4pCQltb2R1bGVfaW5pdChmbikKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaW50ZXJydXB0LmggYi9pbmNsdWRlL2xpbnV4L2ludGVycnVwdC5oCmluZGV4IGI3OGNmODEuLjdjYTcyYjcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaW50ZXJydXB0LmgKKysrIGIvaW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaApAQCAtMTAsNyArMTAsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2lycXJldHVybi5oPgogI2luY2x1ZGUgPGxpbnV4L2lycW5yLmg+CiAjaW5jbHVkZSA8bGludXgvaGFyZGlycS5oPgotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvaXJxZmxhZ3MuaD4KICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KICNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KQEAgLTYxMCw2ICs2MDksNyBAQAogc3RhdGljIGlubGluZSB2b2lkIGRlYnVnX3BvbGxfYWxsX3NoYXJlZF9pcnFzKHZvaWQpIHsgfQogI2VuZGlmCiAKK3N0cnVjdCBzZXFfZmlsZTsKIGludCBzaG93X2ludGVycnVwdHMoc3RydWN0IHNlcV9maWxlICpwLCB2b2lkICp2KTsKIAogc3RydWN0IGlycV9kZXNjOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pcGMuaCBiL2luY2x1ZGUvbGludXgvaXBjLmgKaW5kZXggYjg4MjYxMC4uM2IxNTk0ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pcGMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lwYy5oCkBAIC03OCw4ICs3OCw2IEBACiAjZGVmaW5lIElQQ0NBTEwodmVyc2lvbixvcCkJKCh2ZXJzaW9uKTw8MTYgfCAob3ApKQogCiAjaWZkZWYgX19LRVJORUxfXwotCi0jaW5jbHVkZSA8bGludXgva3JlZi5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAKICNkZWZpbmUgSVBDTU5JIDMyNzY4ICAvKiA8PSBNQVhfSU5UIGxpbWl0IGZvciBpcGMgYXJyYXlzIChpbmNsdWRpbmcgc3lzY3RsIGNoYW5nZXMpICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2piZDIuaCBiL2luY2x1ZGUvbGludXgvamJkMi5oCmluZGV4IDUyNjk1ZDMuLmYxMDExZjcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvamJkMi5oCisrKyBiL2luY2x1ZGUvbGludXgvamJkMi5oCkBAIC00NjQsOSArNDY0LDkgQEAKICAqLwogc3RydWN0IHRyYW5zYWN0aW9uX2NocF9zdGF0c19zIHsKIAl1bnNpZ25lZCBsb25nCQljc19jaHBfdGltZTsKLQl1bnNpZ25lZCBsb25nCQljc19mb3JjZWRfdG9fY2xvc2U7Ci0JdW5zaWduZWQgbG9uZwkJY3Nfd3JpdHRlbjsKLQl1bnNpZ25lZCBsb25nCQljc19kcm9wcGVkOworCV9fdTMyCQkJY3NfZm9yY2VkX3RvX2Nsb3NlOworCV9fdTMyCQkJY3Nfd3JpdHRlbjsKKwlfX3UzMgkJCWNzX2Ryb3BwZWQ7CiB9OwogCiAvKiBUaGUgdHJhbnNhY3Rpb25fdCB0eXBlIGlzIHRoZSBndXRzIG9mIHRoZSBqb3VybmFsaW5nIG1lY2hhbmlzbS4gIEl0CkBAIC02NjgsMjMgKzY2OCwxNiBAQAogCXVuc2lnbmVkIGxvbmcJCXJzX2ZsdXNoaW5nOwogCXVuc2lnbmVkIGxvbmcJCXJzX2xvZ2dpbmc7CiAKLQl1bnNpZ25lZCBsb25nCQlyc19oYW5kbGVfY291bnQ7Ci0JdW5zaWduZWQgbG9uZwkJcnNfYmxvY2tzOwotCXVuc2lnbmVkIGxvbmcJCXJzX2Jsb2Nrc19sb2dnZWQ7CisJX191MzIJCQlyc19oYW5kbGVfY291bnQ7CisJX191MzIJCQlyc19ibG9ja3M7CisJX191MzIJCQlyc19ibG9ja3NfbG9nZ2VkOwogfTsKIAogc3RydWN0IHRyYW5zYWN0aW9uX3N0YXRzX3MgewotCWludCAJCQl0c190eXBlOwogCXVuc2lnbmVkIGxvbmcJCXRzX3RpZDsKLQl1bmlvbiB7Ci0JCXN0cnVjdCB0cmFuc2FjdGlvbl9ydW5fc3RhdHNfcyBydW47Ci0JCXN0cnVjdCB0cmFuc2FjdGlvbl9jaHBfc3RhdHNfcyBjaHA7Ci0JfSB1OworCXN0cnVjdCB0cmFuc2FjdGlvbl9ydW5fc3RhdHNfcyBydW47CiB9OwogCi0jZGVmaW5lIEpCRDJfU1RBVFNfUlVOCQkxCi0jZGVmaW5lIEpCRDJfU1RBVFNfQ0hFQ0tQT0lOVAkyCi0KIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZwogamJkMl90aW1lX2RpZmYodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCiB7CkBAIC05ODgsMTIgKzk4MSw2IEBACiAJLyoKIAkgKiBKb3VybmFsIHN0YXRpc3RpY3MKIAkgKi8KLQlzdHJ1Y3QgdHJhbnNhY3Rpb25fc3RhdHNfcyAqal9oaXN0b3J5OwotCWludAkJCWpfaGlzdG9yeV9tYXg7Ci0JaW50CQkJal9oaXN0b3J5X2N1cjsKLQkvKgotCSAqIFByb3RlY3QgdGhlIHRyYW5zYWN0aW9ucyBzdGF0aXN0aWNzIGhpc3RvcnkKLQkgKi8KIAlzcGlubG9ja190CQlqX2hpc3RvcnlfbG9jazsKIAlzdHJ1Y3QgcHJvY19kaXJfZW50cnkJKmpfcHJvY19lbnRyeTsKIAlzdHJ1Y3QgdHJhbnNhY3Rpb25fc3RhdHNfcyBqX3N0YXRzOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rZXJuZWwuaCBiL2luY2x1ZGUvbGludXgva2VybmVsLmgKaW5kZXggZDNjZDIzZi4uZjRlMzE4NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9rZXJuZWwuaAorKysgYi9pbmNsdWRlL2xpbnV4L2tlcm5lbC5oCkBAIC02NTksNiArNjU5LDEyIEBACiAKICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAKKyNpZm5kZWYgX19FWFBPUlRFRF9IRUFERVJTX18KKyNpZm5kZWYgX19LRVJORUxfXworI3dhcm5pbmcgQXR0ZW1wdCB0byB1c2Uga2VybmVsIGhlYWRlcnMgZnJvbSB1c2VyIHNwYWNlLCBzZWUgaHR0cDovL2tlcm5lbG5ld2JpZXMub3JnL0tlcm5lbEhlYWRlcnMKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisjZW5kaWYgLyogX19FWFBPUlRFRF9IRUFERVJTX18gKi8KKwogI2RlZmluZSBTSV9MT0FEX1NISUZUCTE2CiBzdHJ1Y3Qgc3lzaW5mbyB7CiAJbG9uZyB1cHRpbWU7CQkJLyogU2Vjb25kcyBzaW5jZSBib290ICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2tyZWYuaCBiL2luY2x1ZGUvbGludXgva3JlZi5oCmluZGV4IDBjZWY2YmEuLmIwY2IwZWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva3JlZi5oCisrKyBiL2luY2x1ZGUvbGludXgva3JlZi5oCkBAIC0xNiw3ICsxNiw2IEBACiAjZGVmaW5lIF9LUkVGX0hfCiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KIAogc3RydWN0IGtyZWYgewogCWF0b21pY190IHJlZmNvdW50OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9saWJhdGEuaCBiL2luY2x1ZGUvbGludXgvbGliYXRhLmgKaW5kZXggNzYzMTliZi4uODc2OTg2NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9saWJhdGEuaAorKysgYi9pbmNsdWRlL2xpbnV4L2xpYmF0YS5oCkBAIC00MTgsNiArNDE4LDE3IEBACiAJCQkJICBBVEFfVElNSU5HX0FDVElWRSB8IEFUQV9USU1JTkdfUkVDT1ZFUiB8CiAJCQkJICBBVEFfVElNSU5HX0RNQUNLX0hPTEQgfCBBVEFfVElNSU5HX0NZQ0xFIHwKIAkJCQkgIEFUQV9USU1JTkdfVURNQSwKKworCS8qIEFDUEkgY29uc3RhbnRzICovCisJQVRBX0FDUElfRklMVEVSX1NFVFhGRVIJPSAxIDw8IDAsCisJQVRBX0FDUElfRklMVEVSX0xPQ0sJPSAxIDw8IDEsCisJQVRBX0FDUElfRklMVEVSX0RJUE0JPSAxIDw8IDIsCisJQVRBX0FDUElfRklMVEVSX0ZQRE1BX09GRlNFVCA9IDEgPDwgMywJLyogRlBETUEgbm9uLXplcm8gb2Zmc2V0ICovCisJQVRBX0FDUElfRklMVEVSX0ZQRE1BX0FBID0gMSA8PCA0LAkvKiBGUERNQSBhdXRvIGFjdGl2YXRlICovCisKKwlBVEFfQUNQSV9GSUxURVJfREVGQVVMVAk9IEFUQV9BQ1BJX0ZJTFRFUl9TRVRYRkVSIHwKKwkJCQkgIEFUQV9BQ1BJX0ZJTFRFUl9MT0NLIHwKKwkJCQkgIEFUQV9BQ1BJX0ZJTFRFUl9ESVBNLAogfTsKIAogZW51bSBhdGFfeGZlcl9tYXNrIHsKQEAgLTU4Nyw2ICs1OTgsNyBAQAogI2lmZGVmIENPTkZJR19BVEFfQUNQSQogCWFjcGlfaGFuZGxlCQlhY3BpX2hhbmRsZTsKIAl1bmlvbiBhY3BpX29iamVjdAkqZ3RmX2NhY2hlOworCXVuc2lnbmVkIGludAkJZ3RmX2ZpbHRlcjsKICNlbmRpZgogCS8qIG5fc2VjdG9yIGlzIENMRUFSX0JFR0lOLCByZWFkIGNvbW1lbnQgYWJvdmUgQ0xFQVJfQkVHSU4gKi8KIAl1NjQJCQluX3NlY3RvcnM7CS8qIHNpemUgb2YgZGV2aWNlLCBpZiBBVEEgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWZkL3dtODMxeC9zdGF0dXMuaCBiL2luY2x1ZGUvbGludXgvbWZkL3dtODMxeC9zdGF0dXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YmMwOTBkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9tZmQvd204MzF4L3N0YXR1cy5oCkBAIC0wLDAgKzEsMzQgQEAKKy8qCisgKiBpbmNsdWRlL2xpbnV4L21mZC93bTgzMXgvc3RhdHVzLmggLS0gU3RhdHVzIExFRHMgZm9yIFdNODMxeAorICoKKyAqIENvcHlyaWdodCAyMDA5IFdvbGZzb24gTWljcm9lbGVjdHJvbmljcyBQTEMuCisgKgorICogQXV0aG9yOiBNYXJrIEJyb3duIDxicm9vbmllQG9wZW5zb3VyY2Uud29sZnNvbm1pY3JvLmNvbT4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKi8KKworI2lmbmRlZiBfX01GRF9XTTgzMVhfU1RBVFVTX0hfXworI2RlZmluZSBfX01GRF9XTTgzMVhfU1RBVFVTX0hfXworCisjZGVmaW5lIFdNODMxWF9MRURfU1JDX01BU0sgICAgICAgICAgICAgICAgICAgIDB4QzAwMCAgLyogTEVEX1NSQyAtIFsxNToxNF0gKi8KKyNkZWZpbmUgV004MzFYX0xFRF9TUkNfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDE0ICAvKiBMRURfU1JDIC0gWzE1OjE0XSAqLworI2RlZmluZSBXTTgzMVhfTEVEX1NSQ19XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDIgIC8qIExFRF9TUkMgLSBbMTU6MTRdICovCisjZGVmaW5lIFdNODMxWF9MRURfTU9ERV9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDMwMCAgLyogTEVEX01PREUgLSBbOTo4XSAqLworI2RlZmluZSBXTTgzMVhfTEVEX01PREVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDggIC8qIExFRF9NT0RFIC0gWzk6OF0gKi8KKyNkZWZpbmUgV004MzFYX0xFRF9NT0RFX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAyICAvKiBMRURfTU9ERSAtIFs5OjhdICovCisjZGVmaW5lIFdNODMxWF9MRURfU0VRX0xFTl9NQVNLICAgICAgICAgICAgICAgIDB4MDAzMCAgLyogTEVEX1NFUV9MRU4gLSBbNTo0XSAqLworI2RlZmluZSBXTTgzMVhfTEVEX1NFUV9MRU5fU0hJRlQgICAgICAgICAgICAgICAgICAgIDQgIC8qIExFRF9TRVFfTEVOIC0gWzU6NF0gKi8KKyNkZWZpbmUgV004MzFYX0xFRF9TRVFfTEVOX1dJRFRIICAgICAgICAgICAgICAgICAgICAyICAvKiBMRURfU0VRX0xFTiAtIFs1OjRdICovCisjZGVmaW5lIFdNODMxWF9MRURfRFVSX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAwQyAgLyogTEVEX0RVUiAtIFszOjJdICovCisjZGVmaW5lIFdNODMxWF9MRURfRFVSX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMiAgLyogTEVEX0RVUiAtIFszOjJdICovCisjZGVmaW5lIFdNODMxWF9MRURfRFVSX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMiAgLyogTEVEX0RVUiAtIFszOjJdICovCisjZGVmaW5lIFdNODMxWF9MRURfRFVUWV9DWUNfTUFTSyAgICAgICAgICAgICAgIDB4MDAwMyAgLyogTEVEX0RVVFlfQ1lDIC0gWzE6MF0gKi8KKyNkZWZpbmUgV004MzFYX0xFRF9EVVRZX0NZQ19TSElGVCAgICAgICAgICAgICAgICAgICAwICAvKiBMRURfRFVUWV9DWUMgLSBbMTowXSAqLworI2RlZmluZSBXTTgzMVhfTEVEX0RVVFlfQ1lDX1dJRFRIICAgICAgICAgICAgICAgICAgIDIgIC8qIExFRF9EVVRZX0NZQyAtIFsxOjBdICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbS5oIGIvaW5jbHVkZS9saW51eC9tbS5oCmluZGV4IGRmMDg1NTEuLjI0YzM5NTYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW0uaAorKysgYi9pbmNsdWRlL2xpbnV4L21tLmgKQEAgLTI4OCw3ICsyODgsNyBAQAogI2lmZGVmIENPTkZJR19NTVUKIGV4dGVybiBpbnQgaXNfdm1hbGxvY19vcl9tb2R1bGVfYWRkcihjb25zdCB2b2lkICp4KTsKICNlbHNlCi1zdGF0aWMgaW50IGlzX3ZtYWxsb2Nfb3JfbW9kdWxlX2FkZHIoY29uc3Qgdm9pZCAqeCkKK3N0YXRpYyBpbmxpbmUgaW50IGlzX3ZtYWxsb2Nfb3JfbW9kdWxlX2FkZHIoY29uc3Qgdm9pZCAqeCkKIHsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaCBiL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaAppbmRleCAyMWQ2YWE0Li44NGE1MjRhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgKKysrIGIvaW5jbHVkZS9saW51eC9tbV90eXBlcy5oCkBAIC0xNzEsNyArMTcxLDcgQEAKIAlzdHJ1Y3QgYW5vbl92bWEgKmFub25fdm1hOwkvKiBTZXJpYWxpemVkIGJ5IHBhZ2VfdGFibGVfbG9jayAqLwogCiAJLyogRnVuY3Rpb24gcG9pbnRlcnMgdG8gZGVhbCB3aXRoIHRoaXMgc3RydWN0LiAqLwotCXN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCAqIHZtX29wczsKKwljb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgKnZtX29wczsKIAogCS8qIEluZm9ybWF0aW9uIGFib3V0IG91ciBiYWNraW5nIHN0b3JlOiAqLwogCXVuc2lnbmVkIGxvbmcgdm1fcGdvZmY7CQkvKiBPZmZzZXQgKHdpdGhpbiB2bV9maWxlKSBpbiBQQUdFX1NJWkUKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW1jL2hvc3QuaCBiL2luY2x1ZGUvbGludXgvbW1jL2hvc3QuaAppbmRleCA4MWJiNDIzLi5lYWYzNjM2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tYy9ob3N0LmgKKysrIGIvaW5jbHVkZS9saW51eC9tbWMvaG9zdC5oCkBAIC0xMSw2ICsxMSw3IEBACiAjZGVmaW5lIExJTlVYX01NQ19IT1NUX0gKIAogI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogCiAjaW5jbHVkZSA8bGludXgvbW1jL2NvcmUuaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tb2R1bGVwYXJhbS5oIGIvaW5jbHVkZS9saW51eC9tb2R1bGVwYXJhbS5oCmluZGV4IDY1NDdjM2MuLjgyYTkxMjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW9kdWxlcGFyYW0uaAorKysgYi9pbmNsdWRlL2xpbnV4L21vZHVsZXBhcmFtLmgKQEAgLTM3LDcgKzM3LDYgQEAKIHR5cGVkZWYgaW50ICgqcGFyYW1fZ2V0X2ZuKShjaGFyICpidWZmZXIsIHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKTsKIAogLyogRmxhZyBiaXRzIGZvciBrZXJuZWxfcGFyYW0uZmxhZ3MgKi8KLSNkZWZpbmUgS1BBUkFNX0tNQUxMT0NFRAkxCiAjZGVmaW5lIEtQQVJBTV9JU0JPT0wJCTIKIAogc3RydWN0IGtlcm5lbF9wYXJhbSB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25mc19mcy5oIGIvaW5jbHVkZS9saW51eC9uZnNfZnMuaAppbmRleCBmNmI5MDI0Li5kMDlkYjFiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25mc19mcy5oCisrKyBiL2luY2x1ZGUvbGludXgvbmZzX2ZzLmgKQEAgLTQwLDcgKzQwLDYgQEAKICNpZmRlZiBfX0tFUk5FTF9fCiAKICNpbmNsdWRlIDxsaW51eC9pbi5oPgotI2luY2x1ZGUgPGxpbnV4L2tyZWYuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9yYnRyZWUuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGNpX2lkcy5oIGIvaW5jbHVkZS9saW51eC9wY2lfaWRzLmgKaW5kZXggZGExZmRhOC4uYjBmMGYzOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wY2lfaWRzLmgKKysrIGIvaW5jbHVkZS9saW51eC9wY2lfaWRzLmgKQEAgLTM3OSw5ICszNzksNiBAQAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9JWFA2MDBfSURFCTB4NDM4YwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9JWFA3MDBfU0FUQQkweDQzOTAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfSVhQNzAwX0lERQkweDQzOWMKLS8qIEFNRCBTQiBDaGlwc2V0ICovCi0jZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1EX1NCOTAwX0lERQkgMHg3ODBjCi0jZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1EX1NCOTAwX1NBVEFfSURFIDB4NzgwMAogCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfVkxTSQkJMHgxMDA0CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVkxTSV84MkM1OTIJMHgwMDA1CkBAIC00ODUsNiArNDgyLDkgQEAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JQk1fSUNPTV9WMl9PTkVfUE9SVF9SVlhfT05FX1BPUlRfTURNX1BDSUUgMHgwMzYxCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSUJNX0lDT01fRk9VUl9QT1JUX01PREVMCTB4MjUyCiAKKyNkZWZpbmUgUENJX1NVQlZFTkRPUl9JRF9JQk0JCTB4MTAxNAorI2RlZmluZSBQQ0lfU1VCREVWSUNFX0lEX0lCTV9TQVRVUk5fU0VSSUFMX09ORV9QT1JUCTB4MDNkNAorCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfVU5JU1lTCQkweDEwMTgKICNkZWZpbmUgUENJX0RFVklDRV9JRF9VTklTWVNfRE1BX0RJUkVDVE9SIDB4MDAxQwogCkBAIC01NTMsOSArNTUzLDEwIEBACiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1EX0NTNTUzNl9VREMgICAgMHgyMDk2CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1EX0NTNTUzNl9VT0MgICAgMHgyMDk3CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1EX0NTNTUzNl9JREUgICAgMHgyMDlBCi0KICNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfTFhfVklERU8gIDB4MjA4MQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF9MWF9BRVMgICAgMHgyMDgyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1EX0hVRFNPTjJfSURFCQkweDc4MGMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfSFVEU09OMl9TQVRBX0lERQkweDc4MDAKIAogI2RlZmluZSBQQ0lfVkVORE9SX0lEX1RSSURFTlQJCTB4MTAyMwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RSSURFTlRfNERXQVZFX0RYCTB4MjAwMApAQCAtNzc2LDYgKzc3Nyw3IEBACiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElfWDUxNQkJMHg4MDM2CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElfWFgxMgkJMHg4MDM5CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElfWFgxMl9GTQkweDgwM2IKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9USV9YSU8yMDAwQQkweDgyMzEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9USV8xMTMwCQkweGFjMTIKICNkZWZpbmUgUENJX0RFVklDRV9JRF9USV8xMDMxCQkweGFjMTMKICNkZWZpbmUgUENJX0RFVklDRV9JRF9USV8xMTMxCQkweGFjMTUKQEAgLTIxNjEsNiArMjE2MywxMCBAQAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FERElEQVRBX0FQQ0k3NDIwXzMgICAgICAweDcwMEQKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BRERJREFUQV9BUENJNzMwMF8zICAgICAgMHg3MDBFCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQURESURBVEFfQVBDSTc4MDBfMyAgICAgIDB4NzAwRgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FERElEQVRBX0FQQ0llNzMwMCAgICAgICAweDcwMTAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BRERJREFUQV9BUENJZTc0MjAgICAgICAgMHg3MDExCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQURESURBVEFfQVBDSWU3NTAwICAgICAgIDB4NzAxMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FERElEQVRBX0FQQ0llNzgwMCAgICAgICAweDcwMTMKIAogI2RlZmluZSBQQ0lfVkVORE9SX0lEX1BEQwkJMHgxNWU5CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGVyZl9jb3VudGVyLmggYi9pbmNsdWRlL2xpbnV4L3BlcmZfY291bnRlci5oCmluZGV4IDM2OGJkNzAuLjdiN2ZiZjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGVyZl9jb3VudGVyLmgKKysrIGIvaW5jbHVkZS9saW51eC9wZXJmX2NvdW50ZXIuaApAQCAtMzYxLDcgKzM2MSw3IEBACiAJICoJc3RydWN0IHBlcmZfZXZlbnRfaGVhZGVyCWhlYWRlcjsKIAkgKgl1MzIJCQkJcGlkLCBwcGlkOwogCSAqCXUzMgkJCQl0aWQsIHB0aWQ7Ci0JICoJeyB1NjQJCQkJdGltZTsgICAgIH0gJiYgUEVSRl9TQU1QTEVfVElNRQorCSAqCXU2NAkJCQl0aW1lOwogCSAqIH07CiAJICovCiAJUEVSRl9FVkVOVF9GT1JLCQkJPSA3LApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wZXJmX2V2ZW50LmggYi9pbmNsdWRlL2xpbnV4L3BlcmZfZXZlbnQuaAppbmRleCBhY2VmYWY3Li45ZTcwMTI2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BlcmZfZXZlbnQuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BlcmZfZXZlbnQuaApAQCAtMzU3LDcgKzM1Nyw3IEBACiAJICoJc3RydWN0IHBlcmZfZXZlbnRfaGVhZGVyCWhlYWRlcjsKIAkgKgl1MzIJCQkJcGlkLCBwcGlkOwogCSAqCXUzMgkJCQl0aWQsIHB0aWQ7Ci0JICoJeyB1NjQJCQkJdGltZTsgICAgIH0gJiYgUEVSRl9TQU1QTEVfVElNRQorCSAqCXU2NAkJCQl0aW1lOwogCSAqIH07CiAJICovCiAJUEVSRl9SRUNPUkRfRk9SSwkJCT0gNywKQEAgLTQ0Miw2ICs0NDIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2hydGltZXIuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3BpZF9uYW1lc3BhY2UuaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAKICNkZWZpbmUgUEVSRl9NQVhfU1RBQ0tfREVQVEgJCTI1NQpAQCAtNDcwLDggKzQ3MSw4IEBACiAJCQl1bnNpZ25lZCBsb25nCWV2ZW50X2Jhc2U7CiAJCQlpbnQJCWlkeDsKIAkJfTsKLQkJdW5pb24geyAvKiBzb2Z0d2FyZSAqLwotCQkJYXRvbWljNjRfdAljb3VudDsKKwkJc3RydWN0IHsgLyogc29mdHdhcmUgKi8KKwkJCXM2NAkJcmVtYWluaW5nOwogCQkJc3RydWN0IGhydGltZXIJaHJ0aW1lcjsKIAkJfTsKIAl9OwpAQCAtNTEzLDYgKzUxNCwxMCBAQAogCiBzdHJ1Y3QgcGVyZl9tbWFwX2RhdGEgewogCXN0cnVjdCByY3VfaGVhZAkJCXJjdV9oZWFkOworI2lmZGVmIENPTkZJR19QRVJGX1VTRV9WTUFMTE9DCisJc3RydWN0IHdvcmtfc3RydWN0CQl3b3JrOworI2VuZGlmCisJaW50CQkJCWRhdGFfb3JkZXI7CiAJaW50CQkJCW5yX3BhZ2VzOwkvKiBuciBvZiBkYXRhIHBhZ2VzICAqLwogCWludAkJCQl3cml0YWJsZTsJLyogYXJlIHdlIHdyaXRhYmxlICAgKi8KIAlpbnQJCQkJbnJfbG9ja2VkOwkvKiBuciBwYWdlcyBtbG9ja2VkICAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wb2xsLmggYi9pbmNsdWRlL2xpbnV4L3BvbGwuaAppbmRleCBmYTI4N2YyLi42NjczNzQzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BvbGwuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BvbGwuaApAQCAtNiwxMCArNiwxMCBAQAogI2lmZGVmIF9fS0VSTkVMX18KIAogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisjaW5jbHVkZSA8bGludXgva3RpbWUuaD4KICNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKIC8qIH44MzIgYnl0ZXMgb2Ygc3RhY2sgc3BhY2UgdXNlZCBtYXggaW4gc3lzX3NlbGVjdC9zeXNfcG9sbCBiZWZvcmUgYWxsb2NhdGluZwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wcmN0bC5oIGIvaW5jbHVkZS9saW51eC9wcmN0bC5oCmluZGV4IDkzMTE1MDUuLmEzYmFlYjIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcHJjdGwuaAorKysgYi9pbmNsdWRlL2xpbnV4L3ByY3RsLmgKQEAgLTg4LDYgKzg4LDE4IEBACiAjZGVmaW5lIFBSX1RBU0tfUEVSRl9FVkVOVFNfRElTQUJMRQkJMzEKICNkZWZpbmUgUFJfVEFTS19QRVJGX0VWRU5UU19FTkFCTEUJCTMyCiAKKy8qCisgKiBTZXQgZWFybHkvbGF0ZSBraWxsIG1vZGUgZm9yIGh3cG9pc29uIG1lbW9yeSBjb3JydXB0aW9uLgorICogVGhpcyBpbmZsdWVuY2VzIHdoZW4gdGhlIHByb2Nlc3MgZ2V0cyBraWxsZWQgb24gYSBtZW1vcnkgY29ycnVwdGlvbi4KKyAqLwogI2RlZmluZSBQUl9NQ0VfS0lMTAkzMworIyBkZWZpbmUgUFJfTUNFX0tJTExfQ0xFQVIgICAwCisjIGRlZmluZSBQUl9NQ0VfS0lMTF9TRVQgICAgIDEKKworIyBkZWZpbmUgUFJfTUNFX0tJTExfTEFURSAgICAwCisjIGRlZmluZSBQUl9NQ0VfS0lMTF9FQVJMWSAgIDEKKyMgZGVmaW5lIFBSX01DRV9LSUxMX0RFRkFVTFQgMgorCisjZGVmaW5lIFBSX01DRV9LSUxMX0dFVCAzNAogCiAjZW5kaWYgLyogX0xJTlVYX1BSQ1RMX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmFtZnMuaCBiL2luY2x1ZGUvbGludXgvcmFtZnMuaAppbmRleCAzN2FhZjJiLi40ZTc2OGRkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3JhbWZzLmgKKysrIGIvaW5jbHVkZS9saW51eC9yYW1mcy5oCkBAIC0xNyw3ICsxNyw3IEBACiAjZW5kaWYKIAogZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcmFtZnNfZmlsZV9vcGVyYXRpb25zOwotZXh0ZXJuIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBnZW5lcmljX2ZpbGVfdm1fb3BzOworZXh0ZXJuIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBnZW5lcmljX2ZpbGVfdm1fb3BzOwogZXh0ZXJuIGludCBfX2luaXQgaW5pdF9yb290ZnModm9pZCk7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oIGIvaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oCmluZGV4IDZmZTAzNjMuLjNlYmQwYjcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcmN1cGRhdGUuaAorKysgYi9pbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmgKQEAgLTc3LDcgKzc3LDcgQEAKICNlcnJvciAiVW5rbm93biBSQ1UgaW1wbGVtZW50YXRpb24gc3BlY2lmaWVkIHRvIGtlcm5lbCBjb25maWd1cmF0aW9uIgogI2VuZGlmCiAKLSNkZWZpbmUgUkNVX0hFQURfSU5JVCAJeyAubmV4dCA9IE5VTEwsIC5mdW5jID0gTlVMTCB9CisjZGVmaW5lIFJDVV9IRUFEX0lOSVQJeyAubmV4dCA9IE5VTEwsIC5mdW5jID0gTlVMTCB9CiAjZGVmaW5lIFJDVV9IRUFEKGhlYWQpIHN0cnVjdCByY3VfaGVhZCBoZWFkID0gUkNVX0hFQURfSU5JVAogI2RlZmluZSBJTklUX1JDVV9IRUFEKHB0cikgZG8geyBcCiAgICAgICAgKHB0ciktPm5leHQgPSBOVUxMOyAocHRyKS0+ZnVuYyA9IE5VTEw7IFwKQEAgLTEyOSwxMiArMTI5LDYgQEAKIAlyY3VfcmVhZF9hY3F1aXJlKCk7CiB9CiAKLS8qKgotICogcmN1X3JlYWRfdW5sb2NrIC0gbWFya3MgdGhlIGVuZCBvZiBhbiBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24uCi0gKgotICogU2VlIHJjdV9yZWFkX2xvY2soKSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KLSAqLwotCiAvKgogICogU28gd2hlcmUgaXMgcmN1X3dyaXRlX2xvY2soKT8gIEl0IGRvZXMgbm90IGV4aXN0LCBhcyB0aGVyZSBpcyBubwogICogd2F5IGZvciB3cml0ZXJzIHRvIGxvY2sgb3V0IFJDVSByZWFkZXJzLiAgVGhpcyBpcyBhIGZlYXR1cmUsIG5vdApAQCAtMTQ0LDYgKzEzOCwxMiBAQAogICogdXNlZCBhcyB3ZWxsLiAgUkNVIGRvZXMgbm90IGNhcmUgaG93IHRoZSB3cml0ZXJzIGtlZXAgb3V0IG9mIGVhY2gKICAqIG90aGVycycgd2F5LCBhcyBsb25nIGFzIHRoZXkgZG8gc28uCiAgKi8KKworLyoqCisgKiByY3VfcmVhZF91bmxvY2sgLSBtYXJrcyB0aGUgZW5kIG9mIGFuIFJDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbi4KKyAqCisgKiBTZWUgcmN1X3JlYWRfbG9jaygpIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICovCiBzdGF0aWMgaW5saW5lIHZvaWQgcmN1X3JlYWRfdW5sb2NrKHZvaWQpCiB7CiAJcmN1X3JlYWRfcmVsZWFzZSgpOwpAQCAtMTk2LDYgKzE5Niw4IEBACiAJX19hY3F1aXJlKFJDVV9TQ0hFRCk7CiAJcmN1X3JlYWRfYWNxdWlyZSgpOwogfQorCisvKiBVc2VkIGJ5IGxvY2tkZXAgYW5kIHRyYWNpbmc6IGNhbm5vdCBiZSB0cmFjZWQsIGNhbm5vdCBjYWxsIGxvY2tkZXAuICovCiBzdGF0aWMgaW5saW5lIG5vdHJhY2Ugdm9pZCByY3VfcmVhZF9sb2NrX3NjaGVkX25vdHJhY2Uodm9pZCkKIHsKIAlwcmVlbXB0X2Rpc2FibGVfbm90cmFjZSgpOwpAQCAtMjEzLDYgKzIxNSw4IEBACiAJX19yZWxlYXNlKFJDVV9TQ0hFRCk7CiAJcHJlZW1wdF9lbmFibGUoKTsKIH0KKworLyogVXNlZCBieSBsb2NrZGVwIGFuZCB0cmFjaW5nOiBjYW5ub3QgYmUgdHJhY2VkLCBjYW5ub3QgY2FsbCBsb2NrZGVwLiAqLwogc3RhdGljIGlubGluZSBub3RyYWNlIHZvaWQgcmN1X3JlYWRfdW5sb2NrX3NjaGVkX25vdHJhY2Uodm9pZCkKIHsKIAlfX3JlbGVhc2UoUkNVX1NDSEVEKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmN1dHJlZS5oIGIvaW5jbHVkZS9saW51eC9yY3V0cmVlLmgKaW5kZXggMzc2ODI3Ny4uOTY0MmM2YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yY3V0cmVlLmgKKysrIGIvaW5jbHVkZS9saW51eC9yY3V0cmVlLmgKQEAgLTMwLDEwICszMCwxNCBAQAogI2lmbmRlZiBfX0xJTlVYX1JDVVRSRUVfSAogI2RlZmluZSBfX0xJTlVYX1JDVVRSRUVfSAogCitzdHJ1Y3Qgbm90aWZpZXJfYmxvY2s7CisKIGV4dGVybiB2b2lkIHJjdV9zY2hlZF9xcyhpbnQgY3B1KTsKIGV4dGVybiB2b2lkIHJjdV9iaF9xcyhpbnQgY3B1KTsKLQorZXh0ZXJuIGludCByY3VfY3B1X25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnNlbGYsCisJCQkgIHVuc2lnbmVkIGxvbmcgYWN0aW9uLCB2b2lkICpoY3B1KTsKIGV4dGVybiBpbnQgcmN1X25lZWRzX2NwdShpbnQgY3B1KTsKK2V4dGVybiBpbnQgcmN1X2V4cGVkaXRlZF90b3J0dXJlX3N0YXRzKGNoYXIgKnBhZ2UpOwogCiAjaWZkZWYgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UKIApAQCAtNzIsMTEgKzc2LDcgQEAKIAogZXh0ZXJuIHZvaWQgY2FsbF9yY3Vfc2NoZWQoc3RydWN0IHJjdV9oZWFkICpoZWFkLAogCQkJICAgdm9pZCAoKmZ1bmMpKHN0cnVjdCByY3VfaGVhZCAqcmN1KSk7Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzeW5jaHJvbml6ZV9yY3VfZXhwZWRpdGVkKHZvaWQpCi17Ci0Jc3luY2hyb25pemVfc2NoZWRfZXhwZWRpdGVkKCk7Ci19CitleHRlcm4gdm9pZCBzeW5jaHJvbml6ZV9yY3VfZXhwZWRpdGVkKHZvaWQpOwogCiBzdGF0aWMgaW5saW5lIHZvaWQgc3luY2hyb25pemVfcmN1X2JoX2V4cGVkaXRlZCh2b2lkKQogewpAQCAtODUsMTYgKzg1LDExIEBACiAKIGV4dGVybiB2b2lkIF9fcmN1X2luaXQodm9pZCk7CiBleHRlcm4gdm9pZCByY3VfY2hlY2tfY2FsbGJhY2tzKGludCBjcHUsIGludCB1c2VyKTsKLWV4dGVybiB2b2lkIHJjdV9yZXN0YXJ0X2NwdShpbnQgY3B1KTsKIAogZXh0ZXJuIGxvbmcgcmN1X2JhdGNoZXNfY29tcGxldGVkKHZvaWQpOwogZXh0ZXJuIGxvbmcgcmN1X2JhdGNoZXNfY29tcGxldGVkX2JoKHZvaWQpOwogZXh0ZXJuIGxvbmcgcmN1X2JhdGNoZXNfY29tcGxldGVkX3NjaGVkKHZvaWQpOwogCi1zdGF0aWMgaW5saW5lIHZvaWQgcmN1X2luaXRfc2NoZWQodm9pZCkKLXsKLX0KLQogI2lmZGVmIENPTkZJR19OT19IWgogdm9pZCByY3VfZW50ZXJfbm9oeih2b2lkKTsKIHZvaWQgcmN1X2V4aXRfbm9oeih2b2lkKTsKQEAgLTEwNyw3ICsxMDIsNyBAQAogfQogI2VuZGlmIC8qIENPTkZJR19OT19IWiAqLwogCi0vKiBBIGNvbnRleHQgc3dpdGNoIGlzIGEgZ3JhY2UgcGVyaW9kIGZvciByY3V0cmVlLiAqLworLyogQSBjb250ZXh0IHN3aXRjaCBpcyBhIGdyYWNlIHBlcmlvZCBmb3IgUkNVLXNjaGVkIGFuZCBSQ1UtYmguICovCiBzdGF0aWMgaW5saW5lIGludCByY3VfYmxvY2tpbmdfaXNfZ3Aodm9pZCkKIHsKIAlyZXR1cm4gbnVtX29ubGluZV9jcHVzKCkgPT0gMTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmVzX2NvdW50ZXIuaCBiL2luY2x1ZGUvbGludXgvcmVzX2NvdW50ZXIuaAppbmRleCA3MzFhZjcxLi5mY2I5ODg0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3Jlc19jb3VudGVyLmgKKysrIGIvaW5jbHVkZS9saW51eC9yZXNfY291bnRlci5oCkBAIC0xMTQsOCArMTE0LDcgQEAKIGludCBfX211c3RfY2hlY2sgcmVzX2NvdW50ZXJfY2hhcmdlX2xvY2tlZChzdHJ1Y3QgcmVzX2NvdW50ZXIgKmNvdW50ZXIsCiAJCXVuc2lnbmVkIGxvbmcgdmFsKTsKIGludCBfX211c3RfY2hlY2sgcmVzX2NvdW50ZXJfY2hhcmdlKHN0cnVjdCByZXNfY291bnRlciAqY291bnRlciwKLQkJdW5zaWduZWQgbG9uZyB2YWwsIHN0cnVjdCByZXNfY291bnRlciAqKmxpbWl0X2ZhaWxfYXQsCi0JCXN0cnVjdCByZXNfY291bnRlciAqKnNvZnRfbGltaXRfYXQpOworCQl1bnNpZ25lZCBsb25nIHZhbCwgc3RydWN0IHJlc19jb3VudGVyICoqbGltaXRfZmFpbF9hdCk7CiAKIC8qCiAgKiB1bmNoYXJnZSAtIHRlbGwgdGhhdCBzb21lIHBvcnRpb24gb2YgdGhlIHJlc291cmNlIGlzIHJlbGVhc2VkCkBAIC0xMjgsOCArMTI3LDcgQEAKICAqLwogCiB2b2lkIHJlc19jb3VudGVyX3VuY2hhcmdlX2xvY2tlZChzdHJ1Y3QgcmVzX2NvdW50ZXIgKmNvdW50ZXIsIHVuc2lnbmVkIGxvbmcgdmFsKTsKLXZvaWQgcmVzX2NvdW50ZXJfdW5jaGFyZ2Uoc3RydWN0IHJlc19jb3VudGVyICpjb3VudGVyLCB1bnNpZ25lZCBsb25nIHZhbCwKLQkJCQlib29sICp3YXNfc29mdF9saW1pdF9leGNlc3MpOwordm9pZCByZXNfY291bnRlcl91bmNoYXJnZShzdHJ1Y3QgcmVzX2NvdW50ZXIgKmNvdW50ZXIsIHVuc2lnbmVkIGxvbmcgdmFsKTsKIAogc3RhdGljIGlubGluZSBib29sIHJlc19jb3VudGVyX2xpbWl0X2NoZWNrX2xvY2tlZChzdHJ1Y3QgcmVzX2NvdW50ZXIgKmNudCkKIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2VyaWFsX2NvcmUuaCBiL2luY2x1ZGUvbGludXgvc2VyaWFsX2NvcmUuaAppbmRleCBmZTY2MWFmLi5kYjUzMmNlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NlcmlhbF9jb3JlLmgKKysrIGIvaW5jbHVkZS9saW51eC9zZXJpYWxfY29yZS5oCkBAIC0xNzYsNiArMTc2LDkgQEAKIC8qIFF1YWxjb21tIE1TTSBTb0NzICovCiAjZGVmaW5lIFBPUlRfTVNNCTg4CiAKKy8qIEJDTTYzeHggZmFtaWx5IFNvQ3MgKi8KKyNkZWZpbmUgUE9SVF9CQ002M1hYCTg5CisKICNpZmRlZiBfX0tFUk5FTF9fCiAKICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zcGkvbG1zMjgzZ2YwNS5oIGIvaW5jbHVkZS9saW51eC9zcGkvbG1zMjgzZ2YwNS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1NWQyNTQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3NwaS9sbXMyODNnZjA1LmgKQEAgLTAsMCArMSwyOCBAQAorLyoKKyAqIGxtczI4M2dmMDUuaCAtIFBsYXRmb3JtIGdsdWUgZm9yIFNhbXN1bmcgTE1TMjgzR0YwNSBMQ0QKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTWFyZWsgVmFzdXQgPG1hcmVrLnZhc3V0QGdtYWlsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisqLworCisjaWZuZGVmIF9JTkNMVURFX0xJTlVYX1NQSV9MTVMyODNHRjA1X0hfCisjZGVmaW5lIF9JTkNMVURFX0xJTlVYX1NQSV9MTVMyODNHRjA1X0hfCisKK3N0cnVjdCBsbXMyODNnZjA1X3BkYXRhIHsKKwl1bnNpZ25lZCBsb25nCXJlc2V0X2dwaW87CisJYm9vbAkJcmVzZXRfaW52ZXJ0ZWQ7Cit9OworCisjZW5kaWYgLyogX0lOQ0xVREVfTElOVVhfU1BJX0xNUzI4M0dGMDVfSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3RyaW5nLmggYi9pbmNsdWRlL2xpbnV4L3N0cmluZy5oCmluZGV4IDQ4OTAxOWUuLmI4NTA4ODYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3RyaW5nLmgKKysrIGIvaW5jbHVkZS9saW51eC9zdHJpbmcuaApAQCAtNjIsNyArNjIsNyBAQAogI2lmbmRlZiBfX0hBVkVfQVJDSF9TVFJSQ0hSCiBleHRlcm4gY2hhciAqIHN0cnJjaHIoY29uc3QgY2hhciAqLGludCk7CiAjZW5kaWYKLWV4dGVybiBjaGFyICogc3Ryc3RyaXAoY2hhciAqKTsKK2V4dGVybiBjaGFyICogX19tdXN0X2NoZWNrIHN0cnN0cmlwKGNoYXIgKik7CiAjaWZuZGVmIF9fSEFWRV9BUkNIX1NUUlNUUgogZXh0ZXJuIGNoYXIgKiBzdHJzdHIoY29uc3QgY2hhciAqLGNvbnN0IGNoYXIgKik7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdG9wb2xvZ3kuaCBiL2luY2x1ZGUvbGludXgvdG9wb2xvZ3kuaAppbmRleCBmYzBiZjNlLi41N2U2MzU3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3RvcG9sb2d5LmgKKysrIGIvaW5jbHVkZS9saW51eC90b3BvbG9neS5oCkBAIC0xMjksNyArMTI5LDcgQEAKIAkJCQl8IDEqU0RfQkFMQU5DRV9GT1JLCQkJXAogCQkJCXwgMCpTRF9CQUxBTkNFX1dBS0UJCQlcCiAJCQkJfCAxKlNEX1dBS0VfQUZGSU5FCQkJXAotCQkJCXwgMSpTRF9QUkVGRVJfTE9DQUwJCQlcCisJCQkJfCAwKlNEX1BSRUZFUl9MT0NBTAkJCVwKIAkJCQl8IDAqU0RfU0hBUkVfQ1BVUE9XRVIJCQlcCiAJCQkJfCAxKlNEX1NIQVJFX1BLR19SRVNPVVJDRVMJCVwKIAkJCQl8IDAqU0RfU0VSSUFMSVpFCQkJXApAQCAtMTYyLDcgKzE2Miw3IEBACiAJCQkJfCAxKlNEX0JBTEFOQ0VfRk9SSwkJCVwKIAkJCQl8IDAqU0RfQkFMQU5DRV9XQUtFCQkJXAogCQkJCXwgMSpTRF9XQUtFX0FGRklORQkJCVwKLQkJCQl8IDEqU0RfUFJFRkVSX0xPQ0FMCQkJXAorCQkJCXwgMCpTRF9QUkVGRVJfTE9DQUwJCQlcCiAJCQkJfCAwKlNEX1NIQVJFX0NQVVBPV0VSCQkJXAogCQkJCXwgMCpTRF9TSEFSRV9QS0dfUkVTT1VSQ0VTCQlcCiAJCQkJfCAwKlNEX1NFUklBTElaRQkJCVwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdHJhY2Vfc2VxLmggYi9pbmNsdWRlL2xpbnV4L3RyYWNlX3NlcS5oCmluZGV4IGMxMzRkZDEuLjA5MDc3ZjYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdHJhY2Vfc2VxLmgKKysrIGIvaW5jbHVkZS9saW51eC90cmFjZV9zZXEuaApAQCAtNyw3ICs3LDcgQEAKIAogLyoKICAqIFRyYWNlIHNlcXVlbmNlcyBhcmUgdXNlZCB0byBhbGxvdyBhIGZ1bmN0aW9uIHRvIGNhbGwgc2V2ZXJhbCBvdGhlciBmdW5jdGlvbnMKLSAqIHRvIGNyZWF0ZSBhIHN0cmluZyBvZiBkYXRhIHRvIHVzZSAodXAgdG8gYSBtYXggb2YgUEFHRV9TSVpFLgorICogdG8gY3JlYXRlIGEgc3RyaW5nIG9mIGRhdGEgdG8gdXNlICh1cCB0byBhIG1heCBvZiBQQUdFX1NJWkUpLgogICovCiAKIHN0cnVjdCB0cmFjZV9zZXEgewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90cmFjZXBvaW50LmggYi9pbmNsdWRlL2xpbnV4L3RyYWNlcG9pbnQuaAppbmRleCA2NjBhOWRlLi4yYWFjOGE4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3RyYWNlcG9pbnQuaAorKysgYi9pbmNsdWRlL2xpbnV4L3RyYWNlcG9pbnQuaApAQCAtMzYsNyArMzYsNyBAQAogI2lmbmRlZiBERUNMQVJFX1RSQUNFCiAKICNkZWZpbmUgVFBfUFJPVE8oYXJncy4uLikJYXJncwotI2RlZmluZSBUUF9BUkdTKGFyZ3MuLi4pCQlhcmdzCisjZGVmaW5lIFRQX0FSR1MoYXJncy4uLikJYXJncwogCiAjaWZkZWYgQ09ORklHX1RSQUNFUE9JTlRTCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdHR5X2RyaXZlci5oIGIvaW5jbHVkZS9saW51eC90dHlfZHJpdmVyLmgKaW5kZXggMzU2NjEyOS4uYjA4Njc3OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC90dHlfZHJpdmVyLmgKKysrIGIvaW5jbHVkZS9saW51eC90dHlfZHJpdmVyLmgKQEAgLTQ1LDggKzQ1LDE2IEBACiAgKgogICogdm9pZCAoKnNodXRkb3duKShzdHJ1Y3QgdHR5X3N0cnVjdCAqIHR0eSk7CiAgKgotICogCVRoaXMgcm91dGluZSBpcyBjYWxsZWQgd2hlbiBhIHBhcnRpY3VsYXIgdHR5IGRldmljZSBpcyBjbG9zZWQgZm9yCi0gKgl0aGUgbGFzdCB0aW1lIGZyZWVpbmcgdXAgdGhlIHJlc291cmNlcy4KKyAqIAlUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIHN5bmNocm9ub3VzbHkgd2hlbiBhIHBhcnRpY3VsYXIgdHR5IGRldmljZQorICoJaXMgY2xvc2VkIGZvciB0aGUgbGFzdCB0aW1lIGZyZWVpbmcgdXAgdGhlIHJlc291cmNlcy4KKyAqCisgKgorICogdm9pZCAoKmNsZWFudXApKHN0cnVjdCB0dHlfc3RydWN0ICogdHR5KTsKKyAqCisgKglUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIGFzeW5jaHJvbm91c2x5IHdoZW4gYSBwYXJ0aWN1bGFyIHR0eSBkZXZpY2UKKyAqCWlzIGNsb3NlZCBmb3IgdGhlIGxhc3QgdGltZSBmcmVlaW5nIHVwIHRoZSByZXNvdXJjZXMuIFRoaXMgaXMKKyAqCWFjdHVhbGx5IHRoZSBzZWNvbmQgcGFydCBvZiBzaHV0ZG93biBmb3Igcm91dGluZXMgdGhhdCBtaWdodCBzbGVlcC4KKyAqCiAgKgogICogaW50ICgqd3JpdGUpKHN0cnVjdCB0dHlfc3RydWN0ICogdHR5LAogICogCQkgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgY291bnQpOwpAQCAtMjMzLDYgKzI0MSw3IEBACiAJaW50ICAoKm9wZW4pKHN0cnVjdCB0dHlfc3RydWN0ICogdHR5LCBzdHJ1Y3QgZmlsZSAqIGZpbHApOwogCXZvaWQgKCpjbG9zZSkoc3RydWN0IHR0eV9zdHJ1Y3QgKiB0dHksIHN0cnVjdCBmaWxlICogZmlscCk7CiAJdm9pZCAoKnNodXRkb3duKShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKKwl2b2lkICgqY2xlYW51cCkoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CiAJaW50ICAoKndyaXRlKShzdHJ1Y3QgdHR5X3N0cnVjdCAqIHR0eSwKIAkJICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgY291bnQpOwogCWludCAgKCpwdXRfY2hhcikoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgdW5zaWduZWQgY2hhciBjaCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VzYi9zZXJpYWwuaCBiL2luY2x1ZGUvbGludXgvdXNiL3NlcmlhbC5oCmluZGV4IGMxN2ViNjQuLmNlOTExZWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdXNiL3NlcmlhbC5oCisrKyBiL2luY2x1ZGUvbGludXgvdXNiL3NlcmlhbC5oCkBAIC0xNTAsNiArMTUwLDcgQEAKIAlzdHJ1Y3QgdXNiX2ludGVyZmFjZQkJKmludGVyZmFjZTsKIAl1bnNpZ25lZCBjaGFyCQkJZGlzY29ubmVjdGVkOjE7CiAJdW5zaWduZWQgY2hhcgkJCXN1c3BlbmRpbmc6MTsKKwl1bnNpZ25lZCBjaGFyCQkJYXR0YWNoZWQ6MTsKIAl1bnNpZ25lZCBjaGFyCQkJbWlub3I7CiAJdW5zaWduZWQgY2hhcgkJCW51bV9wb3J0czsKIAl1bnNpZ25lZCBjaGFyCQkJbnVtX3BvcnRfcG9pbnRlcnM7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ZpcnRpb185cC5oIGIvaW5jbHVkZS9saW51eC92aXJ0aW9fOXAuaAppbmRleCBlYTcyMjZhLi4wOTVlMTBkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3ZpcnRpb185cC5oCisrKyBiL2luY2x1ZGUvbGludXgvdmlydGlvXzlwLmgKQEAgLTIsNiArMiw3IEBACiAjZGVmaW5lIF9MSU5VWF9WSVJUSU9fOVBfSAogLyogVGhpcyBoZWFkZXIgaXMgQlNEIGxpY2Vuc2VkIHNvIGFueW9uZSBjYW4gdXNlIHRoZSBkZWZpbml0aW9ucyB0byBpbXBsZW1lbnQKICAqIGNvbXBhdGlibGUgZHJpdmVycy9zZXJ2ZXJzLiAqLworI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb19pZHMuaD4KICNpbmNsdWRlIDxsaW51eC92aXJ0aW9fY29uZmlnLmg+CiAKIC8qIE1heGltdW0gbnVtYmVyIG9mIHZpcnRpbyBjaGFubmVscyBwZXIgcGFydGl0aW9uICgxIGZvciBub3cpICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ZpcnRpb19iYWxsb29uLmggYi9pbmNsdWRlL2xpbnV4L3ZpcnRpb19iYWxsb29uLmgKaW5kZXggMDlkNzMwMC4uMTQxOGYwNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC92aXJ0aW9fYmFsbG9vbi5oCisrKyBiL2luY2x1ZGUvbGludXgvdmlydGlvX2JhbGxvb24uaApAQCAtMiw2ICsyLDcgQEAKICNkZWZpbmUgX0xJTlVYX1ZJUlRJT19CQUxMT09OX0gKIC8qIFRoaXMgaGVhZGVyIGlzIEJTRCBsaWNlbnNlZCBzbyBhbnlvbmUgY2FuIHVzZSB0aGUgZGVmaW5pdGlvbnMgdG8gaW1wbGVtZW50CiAgKiBjb21wYXRpYmxlIGRyaXZlcnMvc2VydmVycy4gKi8KKyNpbmNsdWRlIDxsaW51eC92aXJ0aW9faWRzLmg+CiAjaW5jbHVkZSA8bGludXgvdmlydGlvX2NvbmZpZy5oPgogCiAvKiBUaGUgZmVhdHVyZSBiaXRtYXAgZm9yIHZpcnRpbyBiYWxsb29uICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ZpcnRpb19ibGsuaCBiL2luY2x1ZGUvbGludXgvdmlydGlvX2Jsay5oCmluZGV4IDE1Y2I2NjYuLmZkMjk0YzUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdmlydGlvX2Jsay5oCisrKyBiL2luY2x1ZGUvbGludXgvdmlydGlvX2Jsay5oCkBAIC0zLDYgKzMsNyBAQAogLyogVGhpcyBoZWFkZXIgaXMgQlNEIGxpY2Vuc2VkIHNvIGFueW9uZSBjYW4gdXNlIHRoZSBkZWZpbml0aW9ucyB0byBpbXBsZW1lbnQKICAqIGNvbXBhdGlibGUgZHJpdmVycy9zZXJ2ZXJzLiAqLwogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvdmlydGlvX2lkcy5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb19jb25maWcuaD4KIAogLyogRmVhdHVyZSBiaXRzICovCkBAIC0xMywxMSArMTQsOCBAQAogI2RlZmluZSBWSVJUSU9fQkxLX0ZfUk8JCTUJLyogRGlzayBpcyByZWFkLW9ubHkgKi8KICNkZWZpbmUgVklSVElPX0JMS19GX0JMS19TSVpFCTYJLyogQmxvY2sgc2l6ZSBvZiBkaXNrIGlzIGF2YWlsYWJsZSovCiAjZGVmaW5lIFZJUlRJT19CTEtfRl9TQ1NJCTcJLyogU3VwcG9ydHMgc2NzaSBjb21tYW5kIHBhc3N0aHJ1ICovCi0jZGVmaW5lIFZJUlRJT19CTEtfRl9JREVOVElGWQk4CS8qIEFUQSBJREVOVElGWSBzdXBwb3J0ZWQgKi8KICNkZWZpbmUgVklSVElPX0JMS19GX0ZMVVNICTkJLyogQ2FjaGUgZmx1c2ggY29tbWFuZCBzdXBwb3J0ICovCiAKLSNkZWZpbmUgVklSVElPX0JMS19JRF9CWVRFUwkoc2l6ZW9mKF9fdTE2WzI1Nl0pKQkvKiBJREVOVElGWSBEQVRBICovCi0KIHN0cnVjdCB2aXJ0aW9fYmxrX2NvbmZpZyB7CiAJLyogVGhlIGNhcGFjaXR5IChpbiA1MTItYnl0ZSBzZWN0b3JzKS4gKi8KIAlfX3U2NCBjYXBhY2l0eTsKQEAgLTMzLDcgKzMxLDYgQEAKIAl9IGdlb21ldHJ5OwogCS8qIGJsb2NrIHNpemUgb2YgZGV2aWNlIChpZiBWSVJUSU9fQkxLX0ZfQkxLX1NJWkUpICovCiAJX191MzIgYmxrX3NpemU7Ci0JX191OCBpZGVudGlmeVtWSVJUSU9fQkxLX0lEX0JZVEVTXTsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ZpcnRpb19jb25zb2xlLmggYi9pbmNsdWRlL2xpbnV4L3ZpcnRpb19jb25zb2xlLmgKaW5kZXggYjVmNTE5OC4uZmU4ODUxNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC92aXJ0aW9fY29uc29sZS5oCisrKyBiL2luY2x1ZGUvbGludXgvdmlydGlvX2NvbnNvbGUuaApAQCAtMSw2ICsxLDcgQEAKICNpZm5kZWYgX0xJTlVYX1ZJUlRJT19DT05TT0xFX0gKICNkZWZpbmUgX0xJTlVYX1ZJUlRJT19DT05TT0xFX0gKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb19pZHMuaD4KICNpbmNsdWRlIDxsaW51eC92aXJ0aW9fY29uZmlnLmg+CiAvKiBUaGlzIGhlYWRlciwgZXhjbHVkaW5nIHRoZSAjaWZkZWYgX19LRVJORUxfXyBwYXJ0LCBpcyBCU0QgbGljZW5zZWQgc28KICAqIGFueW9uZSBjYW4gdXNlIHRoZSBkZWZpbml0aW9ucyB0byBpbXBsZW1lbnQgY29tcGF0aWJsZSBkcml2ZXJzL3NlcnZlcnMuICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ZpcnRpb19uZXQuaCBiL2luY2x1ZGUvbGludXgvdmlydGlvX25ldC5oCmluZGV4IDFmNDE3MzQuLjA4NWU0MjIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdmlydGlvX25ldC5oCisrKyBiL2luY2x1ZGUvbGludXgvdmlydGlvX25ldC5oCkBAIC0zLDYgKzMsNyBAQAogLyogVGhpcyBoZWFkZXIgaXMgQlNEIGxpY2Vuc2VkIHNvIGFueW9uZSBjYW4gdXNlIHRoZSBkZWZpbml0aW9ucyB0byBpbXBsZW1lbnQKICAqIGNvbXBhdGlibGUgZHJpdmVycy9zZXJ2ZXJzLiAqLwogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvdmlydGlvX2lkcy5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb19jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pZl9ldGhlci5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ZpcnRpb19ybmcuaCBiL2luY2x1ZGUvbGludXgvdmlydGlvX3JuZy5oCmluZGV4IDQ4MTIxYzMuLmM0ZDVkZTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdmlydGlvX3JuZy5oCisrKyBiL2luY2x1ZGUvbGludXgvdmlydGlvX3JuZy5oCkBAIC0yLDYgKzIsNyBAQAogI2RlZmluZSBfTElOVVhfVklSVElPX1JOR19ICiAvKiBUaGlzIGhlYWRlciBpcyBCU0QgbGljZW5zZWQgc28gYW55b25lIGNhbiB1c2UgdGhlIGRlZmluaXRpb25zIHRvIGltcGxlbWVudAogICogY29tcGF0aWJsZSBkcml2ZXJzL3NlcnZlcnMuICovCisjaW5jbHVkZSA8bGludXgvdmlydGlvX2lkcy5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb19jb25maWcuaD4KIAogI2VuZGlmIC8qIF9MSU5VWF9WSVJUSU9fUk5HX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvd29ya3F1ZXVlLmggYi9pbmNsdWRlL2xpbnV4L3dvcmtxdWV1ZS5oCmluZGV4IDdlZjBjN2IuLmNmMjRjMjAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvd29ya3F1ZXVlLmgKKysrIGIvaW5jbHVkZS9saW51eC93b3JrcXVldWUuaApAQCAtMjA3LDYgKzIwNyw3IEBACiAKIGV4dGVybiB2b2lkIGZsdXNoX3dvcmtxdWV1ZShzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqd3EpOwogZXh0ZXJuIHZvaWQgZmx1c2hfc2NoZWR1bGVkX3dvcmsodm9pZCk7CitleHRlcm4gdm9pZCBmbHVzaF9kZWxheWVkX3dvcmsoc3RydWN0IGRlbGF5ZWRfd29yayAqd29yayk7CiAKIGV4dGVybiBpbnQgc2NoZWR1bGVfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwogZXh0ZXJuIGludCBzY2hlZHVsZV93b3JrX29uKGludCBjcHUsIHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC85cC9jbGllbnQuaCBiL2luY2x1ZGUvbmV0LzlwL2NsaWVudC5oCmluZGV4IGUyNjgxMjIuLmZiMDBiMzIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0LzlwL2NsaWVudC5oCisrKyBiL2luY2x1ZGUvbmV0LzlwL2NsaWVudC5oCkBAIC0xNTksOCArMTU5LDcgQEAKICAqIEBxaWQ6IHRoZSAmcDlfcWlkIHNlcnZlciBpZGVudGlmaWVyIHRoaXMgaGFuZGxlIHBvaW50cyB0bwogICogQGlvdW5pdDogdGhlIHNlcnZlciByZXBvcnRlZCBtYXhpbXVtIHRyYW5zYWN0aW9uIHNpemUgZm9yIHRoaXMgZmlsZQogICogQHVpZDogdGhlIG51bWVyaWMgdWlkIG9mIHRoZSBsb2NhbCB1c2VyIHdobyBvd25zIHRoaXMgaGFuZGxlCi0gKiBAYXV4OiB0cmFuc3BvcnQgc3BlY2lmaWMgaW5mb3JtYXRpb24gKHVudXNlZD8pCi0gKiBAcmRpcl9mcG9zOiB0cmFja3Mgb2Zmc2V0IG9mIGZpbGUgcG9zaXRpb24gd2hlbiByZWFkaW5nIGRpcmVjdG9yeSBjb250ZW50cworICogQHJkaXI6IHJlYWRkaXIgYWNjb3VudGluZyBzdHJ1Y3R1cmUgKGFsbG9jYXRlZCBvbiBkZW1hbmQpCiAgKiBAZmxpc3Q6IHBlci1jbGllbnQtaW5zdGFuY2UgZmlkIHRyYWNraW5nCiAgKiBAZGxpc3Q6IHBlci1kZW50cnkgZmlkIHRyYWNraW5nCiAgKgpAQCAtMTc0LDkgKzE3Myw5IEBACiAJc3RydWN0IHA5X3FpZCBxaWQ7CiAJdTMyIGlvdW5pdDsKIAl1aWRfdCB1aWQ7Ci0Jdm9pZCAqYXV4OwogCi0JaW50IHJkaXJfZnBvczsKKwl2b2lkICpyZGlyOworCiAJc3RydWN0IGxpc3RfaGVhZCBmbGlzdDsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGRsaXN0OwkvKiBsaXN0IG9mIGFsbCBmaWRzIGF0dGFjaGVkIHRvIGEgZGVudHJ5ICovCiB9OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9wY21jaWEvc3MuaCBiL2luY2x1ZGUvcGNtY2lhL3NzLmgKaW5kZXggOWEzYjQ5OC4uZDY5NmE2OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9wY21jaWEvc3MuaAorKysgYi9pbmNsdWRlL3BjbWNpYS9zcy5oCkBAIC0yNzksNyArMjc5LDcgQEAKIGV4dGVybiBzdHJ1Y3QgcGNjYXJkX3Jlc291cmNlX29wcyBwY2NhcmRfbm9uc3RhdGljX29wczsKIAogLyogc29ja2V0IGRyaXZlcnMgYXJlIGV4cGVjdGVkIHRvIHVzZSB0aGVzZSBjYWxsYmFja3MgaW4gdGhlaXIgLmRydiBzdHJ1Y3QgKi8KLWV4dGVybiBpbnQgcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSk7CitleHRlcm4gaW50IHBjbWNpYV9zb2NrZXRfZGV2X3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KTsKIGV4dGVybiBpbnQgcGNtY2lhX3NvY2tldF9kZXZfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldik7CiAKIC8qIHNvY2tldCBkcml2ZXJzIHVzZSB0aGlzIGNhbGxiYWNrIGluIHRoZWlyIElSUSBoYW5kbGVyICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3Njc2kvbGliaXNjc2kuaCBiL2luY2x1ZGUvc2NzaS9saWJpc2NzaS5oCmluZGV4IDg4N2U1N2UuLmE3MmVkZDQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc2NzaS9saWJpc2NzaS5oCisrKyBiL2luY2x1ZGUvc2NzaS9saWJpc2NzaS5oCkBAIC0zMDMsNiArMzAzLDcgQEAKIAlpbnQJCQljbWRzX21heDsJLyogc2l6ZSBvZiBjbWRzIGFycmF5ICovCiAJc3RydWN0IGlzY3NpX3Rhc2sJKipjbWRzOwkJLyogT3JpZ2luYWwgQ21kcyBhcnIgKi8KIAlzdHJ1Y3QgaXNjc2lfcG9vbAljbWRwb29sOwkvKiBQRFUncyBwb29sICovCisJdm9pZAkJCSpkZF9kYXRhOwkvKiBMTEQgcHJpdmF0ZSBkYXRhICovCiB9OwogCiBlbnVtIHsKQEAgLTM2Myw3ICszNjQsNyBAQAogICovCiBleHRlcm4gc3RydWN0IGlzY3NpX2Nsc19zZXNzaW9uICoKIGlzY3NpX3Nlc3Npb25fc2V0dXAoc3RydWN0IGlzY3NpX3RyYW5zcG9ydCAqLCBzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCwKLQkJICAgIHVpbnQxNl90LCBpbnQsIHVpbnQzMl90LCB1bnNpZ25lZCBpbnQpOworCQkgICAgdWludDE2X3QsIGludCwgaW50LCB1aW50MzJfdCwgdW5zaWduZWQgaW50KTsKIGV4dGVybiB2b2lkIGlzY3NpX3Nlc3Npb25fdGVhcmRvd24oc3RydWN0IGlzY3NpX2Nsc19zZXNzaW9uICopOwogZXh0ZXJuIHZvaWQgaXNjc2lfc2Vzc2lvbl9yZWNvdmVyeV90aW1lZG91dChzdHJ1Y3QgaXNjc2lfY2xzX3Nlc3Npb24gKik7CiBleHRlcm4gaW50IGlzY3NpX3NldF9wYXJhbShzdHJ1Y3QgaXNjc2lfY2xzX2Nvbm4gKmNsc19jb25uLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zY3NpL3Njc2kuaCBiL2luY2x1ZGUvc2NzaS9zY3NpLmgKaW5kZXggMDg0NDc4ZS4uMzRjNDZhYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zY3NpL3Njc2kuaAorKysgYi9pbmNsdWRlL3Njc2kvc2NzaS5oCkBAIC0xMjksNiArMTI5LDkgQEAKICNkZWZpbmUgTUlfUkVQT1JUX1RBUkdFVF9QR1MgIDB4MGEKIC8qIHZhbHVlcyBmb3IgbWFpbnRlbmFuY2Ugb3V0ICovCiAjZGVmaW5lIE1PX1NFVF9UQVJHRVRfUEdTICAgICAweDBhCisvKiB2YWx1ZXMgZm9yIHZhcmlhYmxlIGxlbmd0aCBjb21tYW5kICovCisjZGVmaW5lIFJFQURfMzIJCSAgICAgIDB4MDkKKyNkZWZpbmUgV1JJVEVfMzIJICAgICAgMHgwYgogCiAvKiBWYWx1ZXMgZm9yIFQxMC8wNC0yNjJyNyAqLwogI2RlZmluZQlBVEFfMTYJCSAgICAgIDB4ODUJLyogMTYtYnl0ZSBwYXNzLXRocnUgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvc2NzaS9zY3NpX2NtbmQuaCBiL2luY2x1ZGUvc2NzaS9zY3NpX2NtbmQuaAppbmRleCAzODc4ZDFkLi5hNWU4ODVhIDEwMDY0NAotLS0gYS9pbmNsdWRlL3Njc2kvc2NzaV9jbW5kLmgKKysrIGIvaW5jbHVkZS9zY3NpL3Njc2lfY21uZC5oCkBAIC0yMjksMTAgKzIyOSw2IEBACiAJLyogT1MtSEJBOiBQcm90ZWN0ZWQsIEhCQS1UYXJnZXQ6IFByb3RlY3RlZCAqLwogCVNDU0lfUFJPVF9SRUFEX1BBU1MsCiAJU0NTSV9QUk9UX1dSSVRFX1BBU1MsCi0KLQkvKiBPUy1IQkE6IFByb3RlY3RlZCwgSEJBLVRhcmdldDogUHJvdGVjdGVkLCBjaGVja3N1bSBjb252ZXJzaW9uICovCi0JU0NTSV9QUk9UX1JFQURfQ09OVkVSVCwKLQlTQ1NJX1BST1RfV1JJVEVfQ09OVkVSVCwKIH07CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzY3NpX3NldF9wcm90X29wKHN0cnVjdCBzY3NpX2NtbmQgKnNjbWQsIHVuc2lnbmVkIGNoYXIgb3ApCmRpZmYgLS1naXQgYS9pbmNsdWRlL3Njc2kvc2NzaV9ob3N0LmggYi9pbmNsdWRlL3Njc2kvc2NzaV9ob3N0LmgKaW5kZXggYjYyYTA5Ny4uNmU3MjhiMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zY3NpL3Njc2lfaG9zdC5oCisrKyBiL2luY2x1ZGUvc2NzaS9zY3NpX2hvc3QuaApAQCAtNzk4LDkgKzc5OCwxNSBAQAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgc2NzaV9ob3N0X2RpZl9jYXBhYmxlKHN0cnVjdCBTY3NpX0hvc3QgKnNob3N0LCB1bnNpZ25lZCBpbnQgdGFyZ2V0X3R5cGUpCiB7CiAJc3dpdGNoICh0YXJnZXRfdHlwZSkgewotCWNhc2UgMTogcmV0dXJuIHNob3N0LT5wcm90X2NhcGFiaWxpdGllcyAmIFNIT1NUX0RJRl9UWVBFMV9QUk9URUNUSU9OOwotCWNhc2UgMjogcmV0dXJuIHNob3N0LT5wcm90X2NhcGFiaWxpdGllcyAmIFNIT1NUX0RJRl9UWVBFMl9QUk9URUNUSU9OOwotCWNhc2UgMzogcmV0dXJuIHNob3N0LT5wcm90X2NhcGFiaWxpdGllcyAmIFNIT1NUX0RJRl9UWVBFM19QUk9URUNUSU9OOworCWNhc2UgMToKKwkJaWYgKHNob3N0LT5wcm90X2NhcGFiaWxpdGllcyAmIFNIT1NUX0RJRl9UWVBFMV9QUk9URUNUSU9OKQorCQkJcmV0dXJuIHRhcmdldF90eXBlOworCWNhc2UgMjoKKwkJaWYgKHNob3N0LT5wcm90X2NhcGFiaWxpdGllcyAmIFNIT1NUX0RJRl9UWVBFMl9QUk9URUNUSU9OKQorCQkJcmV0dXJuIHRhcmdldF90eXBlOworCWNhc2UgMzoKKwkJaWYgKHNob3N0LT5wcm90X2NhcGFiaWxpdGllcyAmIFNIT1NUX0RJRl9UWVBFM19QUk9URUNUSU9OKQorCQkJcmV0dXJuIHRhcmdldF90eXBlOwogCX0KIAogCXJldHVybiAwOwpAQCAtODA4LDEzICs4MTQsMTQgQEAKIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgc2NzaV9ob3N0X2RpeF9jYXBhYmxlKHN0cnVjdCBTY3NpX0hvc3QgKnNob3N0LCB1bnNpZ25lZCBpbnQgdGFyZ2V0X3R5cGUpCiB7CisjaWYgZGVmaW5lZChDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkpCiAJc3dpdGNoICh0YXJnZXRfdHlwZSkgewogCWNhc2UgMDogcmV0dXJuIHNob3N0LT5wcm90X2NhcGFiaWxpdGllcyAmIFNIT1NUX0RJWF9UWVBFMF9QUk9URUNUSU9OOwogCWNhc2UgMTogcmV0dXJuIHNob3N0LT5wcm90X2NhcGFiaWxpdGllcyAmIFNIT1NUX0RJWF9UWVBFMV9QUk9URUNUSU9OOwogCWNhc2UgMjogcmV0dXJuIHNob3N0LT5wcm90X2NhcGFiaWxpdGllcyAmIFNIT1NUX0RJWF9UWVBFMl9QUk9URUNUSU9OOwogCWNhc2UgMzogcmV0dXJuIHNob3N0LT5wcm90X2NhcGFiaWxpdGllcyAmIFNIT1NUX0RJWF9UWVBFM19QUk9URUNUSU9OOwogCX0KLQorI2VuZGlmCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2Jsb2NrLmggYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9ibG9jay5oCmluZGV4IGQ4NmFmOTQuLjAwNDA1YjUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2Jsb2NrLmgKKysrIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvYmxvY2suaApAQCAtNDg4LDYgKzQ4OCwzOSBAQAogCQkgICh1bnNpZ25lZCBsb25nIGxvbmcpX19lbnRyeS0+b2xkX3NlY3RvcikKICk7CiAKK1RSQUNFX0VWRU5UKGJsb2NrX3JxX3JlbWFwLAorCisJVFBfUFJPVE8oc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCByZXF1ZXN0ICpycSwgZGV2X3QgZGV2LAorCQkgc2VjdG9yX3QgZnJvbSksCisKKwlUUF9BUkdTKHEsIHJxLCBkZXYsIGZyb20pLAorCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJX19maWVsZCggZGV2X3QsCQlkZXYJCSkKKwkJX19maWVsZCggc2VjdG9yX3QsCXNlY3RvcgkJKQorCQlfX2ZpZWxkKCB1bnNpZ25lZCBpbnQsCW5yX3NlY3RvcgkpCisJCV9fZmllbGQoIGRldl90LAkJb2xkX2RldgkJKQorCQlfX2ZpZWxkKCBzZWN0b3JfdCwJb2xkX3NlY3RvcgkpCisJCV9fYXJyYXkoIGNoYXIsCQlyd2JzLAk2CSkKKwkpLAorCisJVFBfZmFzdF9hc3NpZ24oCisJCV9fZW50cnktPmRldgkJPSBkaXNrX2RldnQocnEtPnJxX2Rpc2spOworCQlfX2VudHJ5LT5zZWN0b3IJCT0gYmxrX3JxX3BvcyhycSk7CisJCV9fZW50cnktPm5yX3NlY3Rvcgk9IGJsa19ycV9zZWN0b3JzKHJxKTsKKwkJX19lbnRyeS0+b2xkX2Rldgk9IGRldjsKKwkJX19lbnRyeS0+b2xkX3NlY3Rvcgk9IGZyb207CisJCWJsa19maWxsX3J3YnNfcnEoX19lbnRyeS0+cndicywgcnEpOworCSksCisKKwlUUF9wcmludGsoIiVkLCVkICVzICVsbHUgKyAldSA8LSAoJWQsJWQpICVsbHUiLAorCQkgIE1BSk9SKF9fZW50cnktPmRldiksIE1JTk9SKF9fZW50cnktPmRldiksIF9fZW50cnktPnJ3YnMsCisJCSAgKHVuc2lnbmVkIGxvbmcgbG9uZylfX2VudHJ5LT5zZWN0b3IsCisJCSAgX19lbnRyeS0+bnJfc2VjdG9yLAorCQkgIE1BSk9SKF9fZW50cnktPm9sZF9kZXYpLCBNSU5PUihfX2VudHJ5LT5vbGRfZGV2KSwKKwkJICAodW5zaWduZWQgbG9uZyBsb25nKV9fZW50cnktPm9sZF9zZWN0b3IpCispOworCiAjZW5kaWYgLyogX1RSQUNFX0JMT0NLX0ggKi8KIAogLyogVGhpcyBwYXJ0IG11c3QgYmUgb3V0c2lkZSBwcm90ZWN0aW9uICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9leHQ0LmggYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9leHQ0LmgKaW5kZXggYzFiZDhmMS4uZDA5NTUwYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS90cmFjZS9ldmVudHMvZXh0NC5oCisrKyBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2V4dDQuaApAQCAtMTEsNiArMTEsNyBAQAogc3RydWN0IGV4dDRfYWxsb2NhdGlvbl9yZXF1ZXN0Owogc3RydWN0IGV4dDRfcHJlYWxsb2Nfc3BhY2U7CiBzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvOworc3RydWN0IG1wYWdlX2RhX2RhdGE7CiAKICNkZWZpbmUgRVhUNF9JKGlub2RlKSAoY29udGFpbmVyX29mKGlub2RlLCBzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvLCB2ZnNfaW5vZGUpKQogCkBAIC0yMzYsNiArMjM3LDcgQEAKIAkJX19maWVsZCgJY2hhciwJZm9yX2t1cGRhdGUJCSkKIAkJX19maWVsZCgJY2hhciwJZm9yX3JlY2xhaW0JCSkKIAkJX19maWVsZCgJY2hhciwJcmFuZ2VfY3ljbGljCQkpCisJCV9fZmllbGQoICAgICAgIHBnb2ZmX3QsCXdyaXRlYmFja19pbmRleAkJKQogCSksCiAKIAlUUF9mYXN0X2Fzc2lnbigKQEAgLTI0OSwxNSArMjUxLDE3IEBACiAJCV9fZW50cnktPmZvcl9rdXBkYXRlCT0gd2JjLT5mb3Jfa3VwZGF0ZTsKIAkJX19lbnRyeS0+Zm9yX3JlY2xhaW0JPSB3YmMtPmZvcl9yZWNsYWltOwogCQlfX2VudHJ5LT5yYW5nZV9jeWNsaWMJPSB3YmMtPnJhbmdlX2N5Y2xpYzsKKwkJX19lbnRyeS0+d3JpdGViYWNrX2luZGV4ID0gaW5vZGUtPmlfbWFwcGluZy0+d3JpdGViYWNrX2luZGV4OwogCSksCiAKLQlUUF9wcmludGsoImRldiAlcyBpbm8gJWx1IG5yX3RvX3dyaXRlICVsZCBwYWdlc19za2lwcGVkICVsZCByYW5nZV9zdGFydCAlbGx1IHJhbmdlX2VuZCAlbGx1IG5vbmJsb2NraW5nICVkIGZvcl9rdXBkYXRlICVkIGZvcl9yZWNsYWltICVkIHJhbmdlX2N5Y2xpYyAlZCIsCisJVFBfcHJpbnRrKCJkZXYgJXMgaW5vICVsdSBucl90b193cml0ZSAlbGQgcGFnZXNfc2tpcHBlZCAlbGQgcmFuZ2Vfc3RhcnQgJWxsdSByYW5nZV9lbmQgJWxsdSBub25ibG9ja2luZyAlZCBmb3Jfa3VwZGF0ZSAlZCBmb3JfcmVjbGFpbSAlZCByYW5nZV9jeWNsaWMgJWQgd3JpdGViYWNrX2luZGV4ICVsdSIsCiAJCSAgamJkMl9kZXZfdG9fbmFtZShfX2VudHJ5LT5kZXYpLAogCQkgICh1bnNpZ25lZCBsb25nKSBfX2VudHJ5LT5pbm8sIF9fZW50cnktPm5yX3RvX3dyaXRlLAogCQkgIF9fZW50cnktPnBhZ2VzX3NraXBwZWQsIF9fZW50cnktPnJhbmdlX3N0YXJ0LAogCQkgIF9fZW50cnktPnJhbmdlX2VuZCwgX19lbnRyeS0+bm9uYmxvY2tpbmcsCiAJCSAgX19lbnRyeS0+Zm9yX2t1cGRhdGUsIF9fZW50cnktPmZvcl9yZWNsYWltLAotCQkgIF9fZW50cnktPnJhbmdlX2N5Y2xpYykKKwkJICBfX2VudHJ5LT5yYW5nZV9jeWNsaWMsCisJCSAgKHVuc2lnbmVkIGxvbmcpIF9fZW50cnktPndyaXRlYmFja19pbmRleCkKICk7CiAKIFRSQUNFX0VWRU5UKGV4dDRfZGFfd3JpdGVfcGFnZXMsCkBAIC0zMDksNiArMzEzLDcgQEAKIAkJX19maWVsZCgJY2hhciwJZW5jb3VudGVyZWRfY29uZ2VzdGlvbgkpCiAJCV9fZmllbGQoCWNoYXIsCW1vcmVfaW8JCQkpCQogCQlfX2ZpZWxkKAljaGFyLAlub19ucndyaXRlX2luZGV4X3VwZGF0ZSApCisJCV9fZmllbGQoICAgICAgIHBnb2ZmX3QsCXdyaXRlYmFja19pbmRleAkJKQogCSksCiAKIAlUUF9mYXN0X2Fzc2lnbigKQEAgLTMyMCwxNCArMzI1LDE2IEBACiAJCV9fZW50cnktPmVuY291bnRlcmVkX2Nvbmdlc3Rpb24JPSB3YmMtPmVuY291bnRlcmVkX2Nvbmdlc3Rpb247CiAJCV9fZW50cnktPm1vcmVfaW8JPSB3YmMtPm1vcmVfaW87CiAJCV9fZW50cnktPm5vX25yd3JpdGVfaW5kZXhfdXBkYXRlID0gd2JjLT5ub19ucndyaXRlX2luZGV4X3VwZGF0ZTsKKwkJX19lbnRyeS0+d3JpdGViYWNrX2luZGV4ID0gaW5vZGUtPmlfbWFwcGluZy0+d3JpdGViYWNrX2luZGV4OwogCSksCiAKLQlUUF9wcmludGsoImRldiAlcyBpbm8gJWx1IHJldCAlZCBwYWdlc193cml0dGVuICVkIHBhZ2VzX3NraXBwZWQgJWxkIGNvbmdlc3Rpb24gJWQgbW9yZV9pbyAlZCBub19ucndyaXRlX2luZGV4X3VwZGF0ZSAlZCIsCisJVFBfcHJpbnRrKCJkZXYgJXMgaW5vICVsdSByZXQgJWQgcGFnZXNfd3JpdHRlbiAlZCBwYWdlc19za2lwcGVkICVsZCBjb25nZXN0aW9uICVkIG1vcmVfaW8gJWQgbm9fbnJ3cml0ZV9pbmRleF91cGRhdGUgJWQgd3JpdGViYWNrX2luZGV4ICVsdSIsCiAJCSAgamJkMl9kZXZfdG9fbmFtZShfX2VudHJ5LT5kZXYpLAogCQkgICh1bnNpZ25lZCBsb25nKSBfX2VudHJ5LT5pbm8sIF9fZW50cnktPnJldCwKIAkJICBfX2VudHJ5LT5wYWdlc193cml0dGVuLCBfX2VudHJ5LT5wYWdlc19za2lwcGVkLAogCQkgIF9fZW50cnktPmVuY291bnRlcmVkX2Nvbmdlc3Rpb24sIF9fZW50cnktPm1vcmVfaW8sCi0JCSAgX19lbnRyeS0+bm9fbnJ3cml0ZV9pbmRleF91cGRhdGUpCisJCSAgX19lbnRyeS0+bm9fbnJ3cml0ZV9pbmRleF91cGRhdGUsCisJCSAgKHVuc2lnbmVkIGxvbmcpIF9fZW50cnktPndyaXRlYmFja19pbmRleCkKICk7CiAKIFRSQUNFX0VWRU5UKGV4dDRfZGFfd3JpdGVfYmVnaW4sCkBAIC03MzcsNiArNzQ0LDE2OSBAQAogCQkgIF9fZW50cnktPmRhdGFfYmxvY2tzLCBfX2VudHJ5LT5tZXRhX2Jsb2NrcykKICk7CiAKK1RSQUNFX0VWRU5UKGV4dDRfbWJhbGxvY19hbGxvYywKKwlUUF9QUk9UTyhzdHJ1Y3QgZXh0NF9hbGxvY2F0aW9uX2NvbnRleHQgKmFjKSwKKworCVRQX0FSR1MoYWMpLAorCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJX19maWVsZCgJZGV2X3QsCWRldgkJCSkKKwkJX19maWVsZCgJaW5vX3QsCWlubwkJCSkKKwkJX19maWVsZCgJX191MTYsCWZvdW5kCQkJKQorCQlfX2ZpZWxkKAlfX3UxNiwJZ3JvdXBzCQkJKQorCQlfX2ZpZWxkKAlfX3UxNiwJYnVkZHkJCQkpCisJCV9fZmllbGQoCV9fdTE2LAlmbGFncwkJCSkKKwkJX19maWVsZCgJX191MTYsCXRhaWwJCQkpCisJCV9fZmllbGQoCV9fdTgsCWNyCQkJKQorCQlfX2ZpZWxkKAlfX3UzMiwgCW9yaWdfbG9naWNhbAkJKQorCQlfX2ZpZWxkKAkgIGludCwJb3JpZ19zdGFydAkJKQorCQlfX2ZpZWxkKAlfX3UzMiwgCW9yaWdfZ3JvdXAJCSkKKwkJX19maWVsZCgJICBpbnQsCW9yaWdfbGVuCQkpCisJCV9fZmllbGQoCV9fdTMyLCAJZ29hbF9sb2dpY2FsCQkpCisJCV9fZmllbGQoCSAgaW50LAlnb2FsX3N0YXJ0CQkpCisJCV9fZmllbGQoCV9fdTMyLCAJZ29hbF9ncm91cAkJKQorCQlfX2ZpZWxkKAkgIGludCwJZ29hbF9sZW4JCSkKKwkJX19maWVsZCgJX191MzIsIAlyZXN1bHRfbG9naWNhbAkJKQorCQlfX2ZpZWxkKAkgIGludCwJcmVzdWx0X3N0YXJ0CQkpCisJCV9fZmllbGQoCV9fdTMyLCAJcmVzdWx0X2dyb3VwCQkpCisJCV9fZmllbGQoCSAgaW50LAlyZXN1bHRfbGVuCQkpCisJKSwKKworCVRQX2Zhc3RfYXNzaWduKAorCQlfX2VudHJ5LT5kZXYJCT0gYWMtPmFjX2lub2RlLT5pX3NiLT5zX2RldjsKKwkJX19lbnRyeS0+aW5vCQk9IGFjLT5hY19pbm9kZS0+aV9pbm87CisJCV9fZW50cnktPmZvdW5kCQk9IGFjLT5hY19mb3VuZDsKKwkJX19lbnRyeS0+ZmxhZ3MJCT0gYWMtPmFjX2ZsYWdzOworCQlfX2VudHJ5LT5ncm91cHMJCT0gYWMtPmFjX2dyb3Vwc19zY2FubmVkOworCQlfX2VudHJ5LT5idWRkeQkJPSBhYy0+YWNfYnVkZHk7CisJCV9fZW50cnktPnRhaWwJCT0gYWMtPmFjX3RhaWw7CisJCV9fZW50cnktPmNyCQk9IGFjLT5hY19jcml0ZXJpYTsKKwkJX19lbnRyeS0+b3JpZ19sb2dpY2FsCT0gYWMtPmFjX29fZXguZmVfbG9naWNhbDsKKwkJX19lbnRyeS0+b3JpZ19zdGFydAk9IGFjLT5hY19vX2V4LmZlX3N0YXJ0OworCQlfX2VudHJ5LT5vcmlnX2dyb3VwCT0gYWMtPmFjX29fZXguZmVfZ3JvdXA7CisJCV9fZW50cnktPm9yaWdfbGVuCT0gYWMtPmFjX29fZXguZmVfbGVuOworCQlfX2VudHJ5LT5nb2FsX2xvZ2ljYWwJPSBhYy0+YWNfZ19leC5mZV9sb2dpY2FsOworCQlfX2VudHJ5LT5nb2FsX3N0YXJ0CT0gYWMtPmFjX2dfZXguZmVfc3RhcnQ7CisJCV9fZW50cnktPmdvYWxfZ3JvdXAJPSBhYy0+YWNfZ19leC5mZV9ncm91cDsKKwkJX19lbnRyeS0+Z29hbF9sZW4JPSBhYy0+YWNfZ19leC5mZV9sZW47CisJCV9fZW50cnktPnJlc3VsdF9sb2dpY2FsCT0gYWMtPmFjX2ZfZXguZmVfbG9naWNhbDsKKwkJX19lbnRyeS0+cmVzdWx0X3N0YXJ0CT0gYWMtPmFjX2ZfZXguZmVfc3RhcnQ7CisJCV9fZW50cnktPnJlc3VsdF9ncm91cAk9IGFjLT5hY19mX2V4LmZlX2dyb3VwOworCQlfX2VudHJ5LT5yZXN1bHRfbGVuCT0gYWMtPmFjX2ZfZXguZmVfbGVuOworCSksCisKKwlUUF9wcmludGsoImRldiAlcyBpbm9kZSAlbHUgb3JpZyAldS8lZC8ldUAldSBnb2FsICV1LyVkLyV1QCV1ICIKKwkJICAicmVzdWx0ICV1LyVkLyV1QCV1IGJsa3MgJXUgZ3JwcyAldSBjciAldSBmbGFncyAweCUwNHggIgorCQkgICJ0YWlsICV1IGJyb2tlbiAldSIsCisJCSAgamJkMl9kZXZfdG9fbmFtZShfX2VudHJ5LT5kZXYpLCAodW5zaWduZWQgbG9uZykgX19lbnRyeS0+aW5vLAorCQkgIF9fZW50cnktPm9yaWdfZ3JvdXAsIF9fZW50cnktPm9yaWdfc3RhcnQsCisJCSAgX19lbnRyeS0+b3JpZ19sZW4sIF9fZW50cnktPm9yaWdfbG9naWNhbCwKKwkJICBfX2VudHJ5LT5nb2FsX2dyb3VwLCBfX2VudHJ5LT5nb2FsX3N0YXJ0LAorCQkgIF9fZW50cnktPmdvYWxfbGVuLCBfX2VudHJ5LT5nb2FsX2xvZ2ljYWwsCisJCSAgX19lbnRyeS0+cmVzdWx0X2dyb3VwLCBfX2VudHJ5LT5yZXN1bHRfc3RhcnQsCisJCSAgX19lbnRyeS0+cmVzdWx0X2xlbiwgX19lbnRyeS0+cmVzdWx0X2xvZ2ljYWwsCisJCSAgX19lbnRyeS0+Zm91bmQsIF9fZW50cnktPmdyb3VwcywgX19lbnRyeS0+Y3IsCisJCSAgX19lbnRyeS0+ZmxhZ3MsIF9fZW50cnktPnRhaWwsCisJCSAgX19lbnRyeS0+YnVkZHkgPyAxIDw8IF9fZW50cnktPmJ1ZGR5IDogMCkKKyk7CisKK1RSQUNFX0VWRU5UKGV4dDRfbWJhbGxvY19wcmVhbGxvYywKKwlUUF9QUk9UTyhzdHJ1Y3QgZXh0NF9hbGxvY2F0aW9uX2NvbnRleHQgKmFjKSwKKworCVRQX0FSR1MoYWMpLAorCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJX19maWVsZCgJZGV2X3QsCWRldgkJCSkKKwkJX19maWVsZCgJaW5vX3QsCWlubwkJCSkKKwkJX19maWVsZCgJX191MzIsIAlvcmlnX2xvZ2ljYWwJCSkKKwkJX19maWVsZCgJICBpbnQsCW9yaWdfc3RhcnQJCSkKKwkJX19maWVsZCgJX191MzIsIAlvcmlnX2dyb3VwCQkpCisJCV9fZmllbGQoCSAgaW50LAlvcmlnX2xlbgkJKQorCQlfX2ZpZWxkKAlfX3UzMiwgCXJlc3VsdF9sb2dpY2FsCQkpCisJCV9fZmllbGQoCSAgaW50LAlyZXN1bHRfc3RhcnQJCSkKKwkJX19maWVsZCgJX191MzIsIAlyZXN1bHRfZ3JvdXAJCSkKKwkJX19maWVsZCgJICBpbnQsCXJlc3VsdF9sZW4JCSkKKwkpLAorCisJVFBfZmFzdF9hc3NpZ24oCisJCV9fZW50cnktPmRldgkJPSBhYy0+YWNfaW5vZGUtPmlfc2ItPnNfZGV2OworCQlfX2VudHJ5LT5pbm8JCT0gYWMtPmFjX2lub2RlLT5pX2lubzsKKwkJX19lbnRyeS0+b3JpZ19sb2dpY2FsCT0gYWMtPmFjX29fZXguZmVfbG9naWNhbDsKKwkJX19lbnRyeS0+b3JpZ19zdGFydAk9IGFjLT5hY19vX2V4LmZlX3N0YXJ0OworCQlfX2VudHJ5LT5vcmlnX2dyb3VwCT0gYWMtPmFjX29fZXguZmVfZ3JvdXA7CisJCV9fZW50cnktPm9yaWdfbGVuCT0gYWMtPmFjX29fZXguZmVfbGVuOworCQlfX2VudHJ5LT5yZXN1bHRfbG9naWNhbAk9IGFjLT5hY19iX2V4LmZlX2xvZ2ljYWw7CisJCV9fZW50cnktPnJlc3VsdF9zdGFydAk9IGFjLT5hY19iX2V4LmZlX3N0YXJ0OworCQlfX2VudHJ5LT5yZXN1bHRfZ3JvdXAJPSBhYy0+YWNfYl9leC5mZV9ncm91cDsKKwkJX19lbnRyeS0+cmVzdWx0X2xlbgk9IGFjLT5hY19iX2V4LmZlX2xlbjsKKwkpLAorCisJVFBfcHJpbnRrKCJkZXYgJXMgaW5vZGUgJWx1IG9yaWcgJXUvJWQvJXVAJXUgcmVzdWx0ICV1LyVkLyV1QCV1IiwKKwkJICBqYmQyX2Rldl90b19uYW1lKF9fZW50cnktPmRldiksICh1bnNpZ25lZCBsb25nKSBfX2VudHJ5LT5pbm8sCisJCSAgX19lbnRyeS0+b3JpZ19ncm91cCwgX19lbnRyeS0+b3JpZ19zdGFydCwKKwkJICBfX2VudHJ5LT5vcmlnX2xlbiwgX19lbnRyeS0+b3JpZ19sb2dpY2FsLAorCQkgIF9fZW50cnktPnJlc3VsdF9ncm91cCwgX19lbnRyeS0+cmVzdWx0X3N0YXJ0LAorCQkgIF9fZW50cnktPnJlc3VsdF9sZW4sIF9fZW50cnktPnJlc3VsdF9sb2dpY2FsKQorKTsKKworVFJBQ0VfRVZFTlQoZXh0NF9tYmFsbG9jX2Rpc2NhcmQsCisJVFBfUFJPVE8oc3RydWN0IGV4dDRfYWxsb2NhdGlvbl9jb250ZXh0ICphYyksCisKKwlUUF9BUkdTKGFjKSwKKworCVRQX1NUUlVDVF9fZW50cnkoCisJCV9fZmllbGQoCWRldl90LAlkZXYJCQkpCisJCV9fZmllbGQoCWlub190LAlpbm8JCQkpCisJCV9fZmllbGQoCV9fdTMyLCAJcmVzdWx0X2xvZ2ljYWwJCSkKKwkJX19maWVsZCgJICBpbnQsCXJlc3VsdF9zdGFydAkJKQorCQlfX2ZpZWxkKAlfX3UzMiwgCXJlc3VsdF9ncm91cAkJKQorCQlfX2ZpZWxkKAkgIGludCwJcmVzdWx0X2xlbgkJKQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJX19lbnRyeS0+ZGV2CQk9IGFjLT5hY19pbm9kZS0+aV9zYi0+c19kZXY7CisJCV9fZW50cnktPmlubwkJPSBhYy0+YWNfaW5vZGUtPmlfaW5vOworCQlfX2VudHJ5LT5yZXN1bHRfbG9naWNhbAk9IGFjLT5hY19iX2V4LmZlX2xvZ2ljYWw7CisJCV9fZW50cnktPnJlc3VsdF9zdGFydAk9IGFjLT5hY19iX2V4LmZlX3N0YXJ0OworCQlfX2VudHJ5LT5yZXN1bHRfZ3JvdXAJPSBhYy0+YWNfYl9leC5mZV9ncm91cDsKKwkJX19lbnRyeS0+cmVzdWx0X2xlbgk9IGFjLT5hY19iX2V4LmZlX2xlbjsKKwkpLAorCisJVFBfcHJpbnRrKCJkZXYgJXMgaW5vZGUgJWx1IGV4dGVudCAldS8lZC8ldUAldSAiLAorCQkgIGpiZDJfZGV2X3RvX25hbWUoX19lbnRyeS0+ZGV2KSwgKHVuc2lnbmVkIGxvbmcpIF9fZW50cnktPmlubywKKwkJICBfX2VudHJ5LT5yZXN1bHRfZ3JvdXAsIF9fZW50cnktPnJlc3VsdF9zdGFydCwKKwkJICBfX2VudHJ5LT5yZXN1bHRfbGVuLCBfX2VudHJ5LT5yZXN1bHRfbG9naWNhbCkKKyk7CisKK1RSQUNFX0VWRU5UKGV4dDRfbWJhbGxvY19mcmVlLAorCVRQX1BST1RPKHN0cnVjdCBleHQ0X2FsbG9jYXRpb25fY29udGV4dCAqYWMpLAorCisJVFBfQVJHUyhhYyksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlfX2ZpZWxkKAlkZXZfdCwJZGV2CQkJKQorCQlfX2ZpZWxkKAlpbm9fdCwJaW5vCQkJKQorCQlfX2ZpZWxkKAlfX3UzMiwgCXJlc3VsdF9sb2dpY2FsCQkpCisJCV9fZmllbGQoCSAgaW50LAlyZXN1bHRfc3RhcnQJCSkKKwkJX19maWVsZCgJX191MzIsIAlyZXN1bHRfZ3JvdXAJCSkKKwkJX19maWVsZCgJICBpbnQsCXJlc3VsdF9sZW4JCSkKKwkpLAorCisJVFBfZmFzdF9hc3NpZ24oCisJCV9fZW50cnktPmRldgkJPSBhYy0+YWNfaW5vZGUtPmlfc2ItPnNfZGV2OworCQlfX2VudHJ5LT5pbm8JCT0gYWMtPmFjX2lub2RlLT5pX2lubzsKKwkJX19lbnRyeS0+cmVzdWx0X2xvZ2ljYWwJPSBhYy0+YWNfYl9leC5mZV9sb2dpY2FsOworCQlfX2VudHJ5LT5yZXN1bHRfc3RhcnQJPSBhYy0+YWNfYl9leC5mZV9zdGFydDsKKwkJX19lbnRyeS0+cmVzdWx0X2dyb3VwCT0gYWMtPmFjX2JfZXguZmVfZ3JvdXA7CisJCV9fZW50cnktPnJlc3VsdF9sZW4JPSBhYy0+YWNfYl9leC5mZV9sZW47CisJKSwKKworCVRQX3ByaW50aygiZGV2ICVzIGlub2RlICVsdSBleHRlbnQgJXUvJWQvJXVAJXUgIiwKKwkJICBqYmQyX2Rldl90b19uYW1lKF9fZW50cnktPmRldiksICh1bnNpZ25lZCBsb25nKSBfX2VudHJ5LT5pbm8sCisJCSAgX19lbnRyeS0+cmVzdWx0X2dyb3VwLCBfX2VudHJ5LT5yZXN1bHRfc3RhcnQsCisJCSAgX19lbnRyeS0+cmVzdWx0X2xlbiwgX19lbnRyeS0+cmVzdWx0X2xvZ2ljYWwpCispOworCiAjZW5kaWYgLyogX1RSQUNFX0VYVDRfSCAqLwogCiAvKiBUaGlzIHBhcnQgbXVzdCBiZSBvdXRzaWRlIHByb3RlY3Rpb24gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2piZDIuaCBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2piZDIuaAppbmRleCBiODUxZjBiLi4zYzYwYjc1IDEwMDY0NAotLS0gYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9qYmQyLmgKKysrIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvamJkMi5oCkBAIC03LDYgKzcsOSBAQAogI2luY2x1ZGUgPGxpbnV4L2piZDIuaD4KICNpbmNsdWRlIDxsaW51eC90cmFjZXBvaW50Lmg+CiAKK3N0cnVjdCB0cmFuc2FjdGlvbl9jaHBfc3RhdHNfczsKK3N0cnVjdCB0cmFuc2FjdGlvbl9ydW5fc3RhdHNfczsKKwogVFJBQ0VfRVZFTlQoamJkMl9jaGVja3BvaW50LAogCiAJVFBfUFJPVE8oam91cm5hbF90ICpqb3VybmFsLCBpbnQgcmVzdWx0KSwKQEAgLTE2Miw2ICsxNjUsODEgQEAKIAkJICBqYmQyX2Rldl90b19uYW1lKF9fZW50cnktPmRldiksICh1bnNpZ25lZCBsb25nKSBfX2VudHJ5LT5pbm8pCiApOwogCitUUkFDRV9FVkVOVChqYmQyX3J1bl9zdGF0cywKKwlUUF9QUk9UTyhkZXZfdCBkZXYsIHVuc2lnbmVkIGxvbmcgdGlkLAorCQkgc3RydWN0IHRyYW5zYWN0aW9uX3J1bl9zdGF0c19zICpzdGF0cyksCisKKwlUUF9BUkdTKGRldiwgdGlkLCBzdGF0cyksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlfX2ZpZWxkKAkJZGV2X3QsCWRldgkJKQorCQlfX2ZpZWxkKAl1bnNpZ25lZCBsb25nLAl0aWQJCSkKKwkJX19maWVsZCgJdW5zaWduZWQgbG9uZywJd2FpdAkJKQorCQlfX2ZpZWxkKAl1bnNpZ25lZCBsb25nLAlydW5uaW5nCQkpCisJCV9fZmllbGQoCXVuc2lnbmVkIGxvbmcsCWxvY2tlZAkJKQorCQlfX2ZpZWxkKAl1bnNpZ25lZCBsb25nLAlmbHVzaGluZwkpCisJCV9fZmllbGQoCXVuc2lnbmVkIGxvbmcsCWxvZ2dpbmcJCSkKKwkJX19maWVsZCgJCV9fdTMyLAloYW5kbGVfY291bnQJKQorCQlfX2ZpZWxkKAkJX191MzIsCWJsb2NrcwkJKQorCQlfX2ZpZWxkKAkJX191MzIsCWJsb2Nrc19sb2dnZWQJKQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJX19lbnRyeS0+ZGV2CQk9IGRldjsKKwkJX19lbnRyeS0+dGlkCQk9IHRpZDsKKwkJX19lbnRyeS0+d2FpdAkJPSBzdGF0cy0+cnNfd2FpdDsKKwkJX19lbnRyeS0+cnVubmluZwk9IHN0YXRzLT5yc19ydW5uaW5nOworCQlfX2VudHJ5LT5sb2NrZWQJCT0gc3RhdHMtPnJzX2xvY2tlZDsKKwkJX19lbnRyeS0+Zmx1c2hpbmcJPSBzdGF0cy0+cnNfZmx1c2hpbmc7CisJCV9fZW50cnktPmxvZ2dpbmcJPSBzdGF0cy0+cnNfbG9nZ2luZzsKKwkJX19lbnRyeS0+aGFuZGxlX2NvdW50CT0gc3RhdHMtPnJzX2hhbmRsZV9jb3VudDsKKwkJX19lbnRyeS0+YmxvY2tzCQk9IHN0YXRzLT5yc19ibG9ja3M7CisJCV9fZW50cnktPmJsb2Nrc19sb2dnZWQJPSBzdGF0cy0+cnNfYmxvY2tzX2xvZ2dlZDsKKwkpLAorCisJVFBfcHJpbnRrKCJkZXYgJXMgdGlkICVsdSB3YWl0ICV1IHJ1bm5pbmcgJXUgbG9ja2VkICV1IGZsdXNoaW5nICV1ICIKKwkJICAibG9nZ2luZyAldSBoYW5kbGVfY291bnQgJXUgYmxvY2tzICV1IGJsb2Nrc19sb2dnZWQgJXUiLAorCQkgIGpiZDJfZGV2X3RvX25hbWUoX19lbnRyeS0+ZGV2KSwgX19lbnRyeS0+dGlkLAorCQkgIGppZmZpZXNfdG9fbXNlY3MoX19lbnRyeS0+d2FpdCksCisJCSAgamlmZmllc190b19tc2VjcyhfX2VudHJ5LT5ydW5uaW5nKSwKKwkJICBqaWZmaWVzX3RvX21zZWNzKF9fZW50cnktPmxvY2tlZCksCisJCSAgamlmZmllc190b19tc2VjcyhfX2VudHJ5LT5mbHVzaGluZyksCisJCSAgamlmZmllc190b19tc2VjcyhfX2VudHJ5LT5sb2dnaW5nKSwKKwkJICBfX2VudHJ5LT5oYW5kbGVfY291bnQsIF9fZW50cnktPmJsb2NrcywKKwkJICBfX2VudHJ5LT5ibG9ja3NfbG9nZ2VkKQorKTsKKworVFJBQ0VfRVZFTlQoamJkMl9jaGVja3BvaW50X3N0YXRzLAorCVRQX1BST1RPKGRldl90IGRldiwgdW5zaWduZWQgbG9uZyB0aWQsCisJCSBzdHJ1Y3QgdHJhbnNhY3Rpb25fY2hwX3N0YXRzX3MgKnN0YXRzKSwKKworCVRQX0FSR1MoZGV2LCB0aWQsIHN0YXRzKSwKKworCVRQX1NUUlVDVF9fZW50cnkoCisJCV9fZmllbGQoCQlkZXZfdCwJZGV2CQkpCisJCV9fZmllbGQoCXVuc2lnbmVkIGxvbmcsCXRpZAkJKQorCQlfX2ZpZWxkKAl1bnNpZ25lZCBsb25nLAljaHBfdGltZQkpCisJCV9fZmllbGQoCQlfX3UzMiwJZm9yY2VkX3RvX2Nsb3NlCSkKKwkJX19maWVsZCgJCV9fdTMyLAl3cml0dGVuCQkpCisJCV9fZmllbGQoCQlfX3UzMiwJZHJvcHBlZAkJKQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJX19lbnRyeS0+ZGV2CQk9IGRldjsKKwkJX19lbnRyeS0+dGlkCQk9IHRpZDsKKwkJX19lbnRyeS0+Y2hwX3RpbWUJPSBzdGF0cy0+Y3NfY2hwX3RpbWU7CisJCV9fZW50cnktPmZvcmNlZF90b19jbG9zZT0gc3RhdHMtPmNzX2ZvcmNlZF90b19jbG9zZTsKKwkJX19lbnRyeS0+d3JpdHRlbgk9IHN0YXRzLT5jc193cml0dGVuOworCQlfX2VudHJ5LT5kcm9wcGVkCT0gc3RhdHMtPmNzX2Ryb3BwZWQ7CisJKSwKKworCVRQX3ByaW50aygiZGV2ICVzIHRpZCAlbHUgY2hwX3RpbWUgJXUgZm9yY2VkX3RvX2Nsb3NlICV1ICIKKwkJICAid3JpdHRlbiAldSBkcm9wcGVkICV1IiwKKwkJICBqYmQyX2Rldl90b19uYW1lKF9fZW50cnktPmRldiksIF9fZW50cnktPnRpZCwKKwkJICBqaWZmaWVzX3RvX21zZWNzKF9fZW50cnktPmNocF90aW1lKSwKKwkJICBfX2VudHJ5LT5mb3JjZWRfdG9fY2xvc2UsIF9fZW50cnktPndyaXR0ZW4sIF9fZW50cnktPmRyb3BwZWQpCispOworCiAjZW5kaWYgLyogX1RSQUNFX0pCRDJfSCAqLwogCiAvKiBUaGlzIHBhcnQgbXVzdCBiZSBvdXRzaWRlIHByb3RlY3Rpb24gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3dvcmtxdWV1ZS5oIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvd29ya3F1ZXVlLmgKaW5kZXggZmNmZDlhMS4uZTQ2MTJkYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS90cmFjZS9ldmVudHMvd29ya3F1ZXVlLmgKKysrIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvd29ya3F1ZXVlLmgKQEAgLTI2LDcgKzI2LDcgQEAKIAkJX19lbnRyeS0+ZnVuYwkJPSB3b3JrLT5mdW5jOwogCSksCiAKLQlUUF9wcmludGsoInRocmVhZD0lczolZCBmdW5jPSVwRiIsIF9fZW50cnktPnRocmVhZF9jb21tLAorCVRQX3ByaW50aygidGhyZWFkPSVzOiVkIGZ1bmM9JXBmIiwgX19lbnRyeS0+dGhyZWFkX2NvbW0sCiAJCV9fZW50cnktPnRocmVhZF9waWQsIF9fZW50cnktPmZ1bmMpCiApOwogCkBAIC00OCw3ICs0OCw3IEBACiAJCV9fZW50cnktPmZ1bmMJCT0gd29yay0+ZnVuYzsKIAkpLAogCi0JVFBfcHJpbnRrKCJ0aHJlYWQ9JXM6JWQgZnVuYz0lcEYiLCBfX2VudHJ5LT50aHJlYWRfY29tbSwKKwlUUF9wcmludGsoInRocmVhZD0lczolZCBmdW5jPSVwZiIsIF9fZW50cnktPnRocmVhZF9jb21tLAogCQlfX2VudHJ5LT50aHJlYWRfcGlkLCBfX2VudHJ5LT5mdW5jKQogKTsKIApkaWZmIC0tZ2l0IGEvaW5pdC9LY29uZmlnIGIvaW5pdC9LY29uZmlnCmluZGV4IGM3YmFjMzkuLmY1MTU4NjQgMTAwNjQ0Ci0tLSBhL2luaXQvS2NvbmZpZworKysgYi9pbml0L0tjb25maWcKQEAgLTI5Nyw3ICsyOTcsNyBAQAogCiBjb25maWcgQVVESVRTWVNDQUxMCiAJYm9vbCAiRW5hYmxlIHN5c3RlbS1jYWxsIGF1ZGl0aW5nIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBBVURJVCAmJiAoWDg2IHx8IFBQQyB8fCBQUEM2NCB8fCBTMzkwIHx8IElBNjQgfHwgVU1MIHx8IFNQQVJDNjR8fCBTVVBFUkgpCisJZGVwZW5kcyBvbiBBVURJVCAmJiAoWDg2IHx8IFBQQyB8fCBTMzkwIHx8IElBNjQgfHwgVU1MIHx8IFNQQVJDNjQgfHwgU1VQRVJIKQogCWRlZmF1bHQgeSBpZiBTRUNVUklUWV9TRUxJTlVYCiAJaGVscAogCSAgRW5hYmxlIGxvdy1vdmVyaGVhZCBzeXN0ZW0tY2FsbCBhdWRpdGluZyBpbmZyYXN0cnVjdHVyZSB0aGF0CkBAIC05MjEsNiArOTIxLDExIEBACiAJaGVscAogCSAgU2VlIHRvb2xzL3BlcmYvZGVzaWduLnR4dCBmb3IgZGV0YWlscy4KIAorY29uZmlnIFBFUkZfVVNFX1ZNQUxMT0MKKwlib29sCisJaGVscAorCSAgU2VlIHRvb2xzL3BlcmYvZGVzaWduLnR4dCBmb3IgZGV0YWlscworCiBtZW51ICJLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycyIKIAogY29uZmlnIFBFUkZfRVZFTlRTCkBAIC05NzYsNiArOTgxLDE5IEBACiAKIAkgIFNheSBOIGlmIHVuc3VyZS4KIAorY29uZmlnIERFQlVHX1BFUkZfVVNFX1ZNQUxMT0MKKwlkZWZhdWx0IG4KKwlib29sICJEZWJ1ZzogdXNlIHZtYWxsb2MgdG8gYmFjayBwZXJmIG1tYXAoKSBidWZmZXJzIgorCWRlcGVuZHMgb24gUEVSRl9FVkVOVFMgJiYgREVCVUdfS0VSTkVMCisJc2VsZWN0IFBFUkZfVVNFX1ZNQUxMT0MKKwloZWxwCisJIFVzZSB2bWFsbG9jIG1lbW9yeSB0byBiYWNrIHBlcmYgbW1hcCgpIGJ1ZmZlcnMuCisKKwkgTW9zdGx5IHVzZWZ1bCBmb3IgZGVidWdnaW5nIHRoZSB2bWFsbG9jIGNvZGUgb24gcGxhdGZvcm1zCisJIHRoYXQgZG9uJ3QgcmVxdWlyZSBpdC4KKworCSBTYXkgTiBpZiB1bnN1cmUuCisKIGVuZG1lbnUKIAogY29uZmlnIFZNX0VWRU5UX0NPVU5URVJTCmRpZmYgLS1naXQgYS9pbml0L21haW4uYyBiL2luaXQvbWFpbi5jCmluZGV4IDc0NDk4MTkuLjU5ODhkZWIgMTAwNjQ0Ci0tLSBhL2luaXQvbWFpbi5jCisrKyBiL2luaXQvbWFpbi5jCkBAIC03NzgsNyArNzc4LDYgQEAKICAqLwogc3RhdGljIHZvaWQgX19pbml0IGRvX2Jhc2ljX3NldHVwKHZvaWQpCiB7Ci0JcmN1X2luaXRfc2NoZWQoKTsgLyogbmVlZGVkIGJ5IG1vZHVsZV9pbml0IHN0YWdlLiAqLwogCWluaXRfd29ya3F1ZXVlcygpOwogCWNwdXNldF9pbml0X3NtcCgpOwogCXVzZXJtb2RlaGVscGVyX2luaXQoKTsKZGlmZiAtLWdpdCBhL2lwYy9zaG0uYyBiL2lwYy9zaG0uYwppbmRleCA5ZWIxNDg4Li40NjQ2OTRlIDEwMDY0NAotLS0gYS9pcGMvc2htLmMKKysrIGIvaXBjL3NobS5jCkBAIC01NSw3ICs1NSw3IEBACiAjZGVmaW5lIHNobV9maWxlX2RhdGEoZmlsZSkgKCooKHN0cnVjdCBzaG1fZmlsZV9kYXRhICoqKSYoZmlsZSktPnByaXZhdGVfZGF0YSkpCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHNobV9maWxlX29wZXJhdGlvbnM7Ci1zdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHNobV92bV9vcHM7CitzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHNobV92bV9vcHM7CiAKICNkZWZpbmUgc2htX2lkcyhucykJKChucyktPmlkc1tJUENfU0hNX0lEU10pCiAKQEAgLTMxMiw3ICszMTIsNyBAQAogCS5nZXRfdW5tYXBwZWRfYXJlYQk9IHNobV9nZXRfdW5tYXBwZWRfYXJlYSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3Qgc2htX3ZtX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3Qgc2htX3ZtX29wcyA9IHsKIAkub3Blbgk9IHNobV9vcGVuLAkvKiBjYWxsYmFjayBmb3IgYSBuZXcgdm0tYXJlYSBvcGVuICovCiAJLmNsb3NlCT0gc2htX2Nsb3NlLAkvKiBjYWxsYmFjayBmb3Igd2hlbiB0aGUgdm0tYXJlYSBpcyByZWxlYXNlZCAqLwogCS5mYXVsdAk9IHNobV9mYXVsdCwKZGlmZiAtLWdpdCBhL2tlcm5lbC9jZ3JvdXAuYyBiL2tlcm5lbC9jZ3JvdXAuYwppbmRleCA3Y2NiYTRiLi4wMjQ5ZjRiIDEwMDY0NAotLS0gYS9rZXJuZWwvY2dyb3VwLmMKKysrIGIva2VybmVsL2Nncm91cC5jCkBAIC03MDMsNyArNzAzLDcgQEAKIHN0YXRpYyBpbnQgY2dyb3VwX3JtZGlyKHN0cnVjdCBpbm9kZSAqdW51c2VkX2Rpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KTsKIHN0YXRpYyBpbnQgY2dyb3VwX3BvcHVsYXRlX2RpcihzdHJ1Y3QgY2dyb3VwICpjZ3JwKTsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBjZ3JvdXBfZGlyX2lub2RlX29wZXJhdGlvbnM7Ci1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwcm9jX2Nncm91cHN0YXRzX29wZXJhdGlvbnM7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwcm9jX2Nncm91cHN0YXRzX29wZXJhdGlvbnM7CiAKIHN0YXRpYyBzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyBjZ3JvdXBfYmFja2luZ19kZXZfaW5mbyA9IHsKIAkubmFtZQkJPSAiY2dyb3VwIiwKQEAgLTE3MTAsMTQgKzE3MTAsMTMgQEAKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKIAlidWZmZXJbbmJ5dGVzXSA9IDA7ICAgICAvKiBudWwtdGVybWluYXRlICovCi0Jc3Ryc3RyaXAoYnVmZmVyKTsKIAlpZiAoY2Z0LT53cml0ZV91NjQpIHsKLQkJdTY0IHZhbCA9IHNpbXBsZV9zdHJ0b3VsbChidWZmZXIsICZlbmQsIDApOworCQl1NjQgdmFsID0gc2ltcGxlX3N0cnRvdWxsKHN0cnN0cmlwKGJ1ZmZlciksICZlbmQsIDApOwogCQlpZiAoKmVuZCkKIAkJCXJldHVybiAtRUlOVkFMOwogCQlyZXR2YWwgPSBjZnQtPndyaXRlX3U2NChjZ3JwLCBjZnQsIHZhbCk7CiAJfSBlbHNlIHsKLQkJczY0IHZhbCA9IHNpbXBsZV9zdHJ0b2xsKGJ1ZmZlciwgJmVuZCwgMCk7CisJCXM2NCB2YWwgPSBzaW1wbGVfc3RydG9sbChzdHJzdHJpcChidWZmZXIpLCAmZW5kLCAwKTsKIAkJaWYgKCplbmQpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJcmV0dmFsID0gY2Z0LT53cml0ZV9zNjQoY2dycCwgY2Z0LCB2YWwpOwpAQCAtMTc1Myw4ICsxNzUyLDcgQEAKIAl9CiAKIAlidWZmZXJbbmJ5dGVzXSA9IDA7ICAgICAvKiBudWwtdGVybWluYXRlICovCi0Jc3Ryc3RyaXAoYnVmZmVyKTsKLQlyZXR2YWwgPSBjZnQtPndyaXRlX3N0cmluZyhjZ3JwLCBjZnQsIGJ1ZmZlcik7CisJcmV0dmFsID0gY2Z0LT53cml0ZV9zdHJpbmcoY2dycCwgY2Z0LCBzdHJzdHJpcChidWZmZXIpKTsKIAlpZiAoIXJldHZhbCkKIAkJcmV0dmFsID0gbmJ5dGVzOwogb3V0OgpAQCAtMTg2Myw3ICsxODYxLDcgQEAKIAlyZXR1cm4gc2luZ2xlX3JlbGVhc2UoaW5vZGUsIGZpbGUpOwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBjZ3JvdXBfc2VxZmlsZV9vcGVyYXRpb25zID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgY2dyb3VwX3NlcWZpbGVfb3BlcmF0aW9ucyA9IHsKIAkucmVhZCA9IHNlcV9yZWFkLAogCS53cml0ZSA9IGNncm91cF9maWxlX3dyaXRlLAogCS5sbHNlZWsgPSBzZXFfbHNlZWssCkBAIC0xOTIyLDcgKzE5MjAsNyBAQAogCXJldHVybiBzaW1wbGVfcmVuYW1lKG9sZF9kaXIsIG9sZF9kZW50cnksIG5ld19kaXIsIG5ld19kZW50cnkpOwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBjZ3JvdXBfZmlsZV9vcGVyYXRpb25zID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgY2dyb3VwX2ZpbGVfb3BlcmF0aW9ucyA9IHsKIAkucmVhZCA9IGNncm91cF9maWxlX3JlYWQsCiAJLndyaXRlID0gY2dyb3VwX2ZpbGVfd3JpdGUsCiAJLmxsc2VlayA9IGdlbmVyaWNfZmlsZV9sbHNlZWssCkBAIC0zMzY5LDcgKzMzNjcsNyBAQAogCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBwcm9jX2Nncm91cF9zaG93LCBwaWQpOwogfQogCi1zdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByb2NfY2dyb3VwX29wZXJhdGlvbnMgPSB7Citjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByb2NfY2dyb3VwX29wZXJhdGlvbnMgPSB7CiAJLm9wZW4JCT0gY2dyb3VwX29wZW4sCiAJLnJlYWQJCT0gc2VxX3JlYWQsCiAJLmxsc2VlawkJPSBzZXFfbHNlZWssCkBAIC0zMzk4LDcgKzMzOTYsNyBAQAogCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBwcm9jX2Nncm91cHN0YXRzX3Nob3csIE5VTEwpOwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwcm9jX2Nncm91cHN0YXRzX29wZXJhdGlvbnMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwcm9jX2Nncm91cHN0YXRzX29wZXJhdGlvbnMgPSB7CiAJLm9wZW4gPSBjZ3JvdXBzdGF0c19vcGVuLAogCS5yZWFkID0gc2VxX3JlYWQsCiAJLmxsc2VlayA9IHNlcV9sc2VlaywKQEAgLTM3MDgsOCArMzcwNiwxMCBAQAogdm9pZCBfX2Nzc19wdXQoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcykKIHsKIAlzdHJ1Y3QgY2dyb3VwICpjZ3JwID0gY3NzLT5jZ3JvdXA7CisJaW50IHZhbDsKIAlyY3VfcmVhZF9sb2NrKCk7Ci0JaWYgKGF0b21pY19kZWNfcmV0dXJuKCZjc3MtPnJlZmNudCkgPT0gMSkgeworCXZhbCA9IGF0b21pY19kZWNfcmV0dXJuKCZjc3MtPnJlZmNudCk7CisJaWYgKHZhbCA9PSAxKSB7CiAJCWlmIChub3RpZnlfb25fcmVsZWFzZShjZ3JwKSkgewogCQkJc2V0X2JpdChDR1JQX1JFTEVBU0FCTEUsICZjZ3JwLT5mbGFncyk7CiAJCQljaGVja19mb3JfcmVsZWFzZShjZ3JwKTsKQEAgLTM3MTcsNiArMzcxNyw3IEBACiAJCWNncm91cF93YWtldXBfcm1kaXJfd2FpdGVyKGNncnApOwogCX0KIAlyY3VfcmVhZF91bmxvY2soKTsKKwlXQVJOX09OX09OQ0UodmFsIDwgMSk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9rZXJuZWwvZXhpdC5jIGIva2VybmVsL2V4aXQuYwppbmRleCA1ODU5ZjU5Li5mNzg2NGFjIDEwMDY0NAotLS0gYS9rZXJuZWwvZXhpdC5jCisrKyBiL2tlcm5lbC9leGl0LmMKQEAgLTM1OSwxMCArMzU5LDggQEAKIHsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cnIgPSBjdXJyZW50LT5ncm91cF9sZWFkZXI7CiAKLQlpZiAodGFza19zZXNzaW9uKGN1cnIpICE9IHBpZCkgeworCWlmICh0YXNrX3Nlc3Npb24oY3VycikgIT0gcGlkKQogCQljaGFuZ2VfcGlkKGN1cnIsIFBJRFRZUEVfU0lELCBwaWQpOwotCQlwcm9jX3NpZF9jb25uZWN0b3IoY3Vycik7Ci0JfQogCiAJaWYgKHRhc2tfcGdycChjdXJyKSAhPSBwaWQpCiAJCWNoYW5nZV9waWQoY3VyciwgUElEVFlQRV9QR0lELCBwaWQpOwpAQCAtOTkxLDggKzk4OSw2IEBACiAJdHNrLT5tZW1wb2xpY3kgPSBOVUxMOwogI2VuZGlmCiAjaWZkZWYgQ09ORklHX0ZVVEVYCi0JaWYgKHVubGlrZWx5KCFsaXN0X2VtcHR5KCZ0c2stPnBpX3N0YXRlX2xpc3QpKSkKLQkJZXhpdF9waV9zdGF0ZV9saXN0KHRzayk7CiAJaWYgKHVubGlrZWx5KGN1cnJlbnQtPnBpX3N0YXRlX2NhY2hlKSkKIAkJa2ZyZWUoY3VycmVudC0+cGlfc3RhdGVfY2FjaGUpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9rZXJuZWwvZm9yay5jIGIva2VybmVsL2ZvcmsuYwppbmRleCAyNjZjNmFmLi40YzIwZmZmIDEwMDY0NAotLS0gYS9rZXJuZWwvZm9yay5jCisrKyBiL2tlcm5lbC9mb3JrLmMKQEAgLTU3MCwxMiArNTcwLDE4IEBACiAKIAkvKiBHZXQgcmlkIG9mIGFueSBmdXRleGVzIHdoZW4gcmVsZWFzaW5nIHRoZSBtbSAqLwogI2lmZGVmIENPTkZJR19GVVRFWAotCWlmICh1bmxpa2VseSh0c2stPnJvYnVzdF9saXN0KSkKKwlpZiAodW5saWtlbHkodHNrLT5yb2J1c3RfbGlzdCkpIHsKIAkJZXhpdF9yb2J1c3RfbGlzdCh0c2spOworCQl0c2stPnJvYnVzdF9saXN0ID0gTlVMTDsKKwl9CiAjaWZkZWYgQ09ORklHX0NPTVBBVAotCWlmICh1bmxpa2VseSh0c2stPmNvbXBhdF9yb2J1c3RfbGlzdCkpCisJaWYgKHVubGlrZWx5KHRzay0+Y29tcGF0X3JvYnVzdF9saXN0KSkgewogCQljb21wYXRfZXhpdF9yb2J1c3RfbGlzdCh0c2spOworCQl0c2stPmNvbXBhdF9yb2J1c3RfbGlzdCA9IE5VTEw7CisJfQogI2VuZGlmCisJaWYgKHVubGlrZWx5KCFsaXN0X2VtcHR5KCZ0c2stPnBpX3N0YXRlX2xpc3QpKSkKKwkJZXhpdF9waV9zdGF0ZV9saXN0KHRzayk7CiAjZW5kaWYKIAogCS8qIEdldCByaWQgb2YgYW55IGNhY2hlZCByZWdpc3RlciBzdGF0ZSAqLwpkaWZmIC0tZ2l0IGEva2VybmVsL2Z1dGV4LmMgYi9rZXJuZWwvZnV0ZXguYwppbmRleCAyNDhkZDExLi5mYjY1ZTgyIDEwMDY0NAotLS0gYS9rZXJuZWwvZnV0ZXguYworKysgYi9rZXJuZWwvZnV0ZXguYwpAQCAtODksMzYgKzg5LDM2IEBACiAJdW5pb24gZnV0ZXhfa2V5IGtleTsKIH07CiAKLS8qCi0gKiBXZSB1c2UgdGhpcyBoYXNoZWQgd2FpdHF1ZXVlIGluc3RlYWQgb2YgYSBub3JtYWwgd2FpdF9xdWV1ZV90LCBzbworLyoqCisgKiBzdHJ1Y3QgZnV0ZXhfcSAtIFRoZSBoYXNoZWQgZnV0ZXggcXVldWUgZW50cnksIG9uZSBwZXIgd2FpdGluZyB0YXNrCisgKiBAdGFzazoJCXRoZSB0YXNrIHdhaXRpbmcgb24gdGhlIGZ1dGV4CisgKiBAbG9ja19wdHI6CQl0aGUgaGFzaCBidWNrZXQgbG9jaworICogQGtleToJCXRoZSBrZXkgdGhlIGZ1dGV4IGlzIGhhc2hlZCBvbgorICogQHBpX3N0YXRlOgkJb3B0aW9uYWwgcHJpb3JpdHkgaW5oZXJpdGFuY2Ugc3RhdGUKKyAqIEBydF93YWl0ZXI6CQlydF93YWl0ZXIgc3RvcmFnZSBmb3IgdXNlIHdpdGggcmVxdWV1ZV9waQorICogQHJlcXVldWVfcGlfa2V5Ogl0aGUgcmVxdWV1ZV9waSB0YXJnZXQgZnV0ZXgga2V5CisgKiBAYml0c2V0OgkJYml0c2V0IGZvciB0aGUgb3B0aW9uYWwgYml0bWFza2VkIHdha2V1cAorICoKKyAqIFdlIHVzZSB0aGlzIGhhc2hlZCB3YWl0cXVldWUsIGluc3RlYWQgb2YgYSBub3JtYWwgd2FpdF9xdWV1ZV90LCBzbwogICogd2UgY2FuIHdha2Ugb25seSB0aGUgcmVsZXZhbnQgb25lcyAoaGFzaGVkIHF1ZXVlcyBtYXkgYmUgc2hhcmVkKS4KICAqCiAgKiBBIGZ1dGV4X3EgaGFzIGEgd29rZW4gc3RhdGUsIGp1c3QgbGlrZSB0YXNrcyBoYXZlIFRBU0tfUlVOTklORy4KICAqIEl0IGlzIGNvbnNpZGVyZWQgd29rZW4gd2hlbiBwbGlzdF9ub2RlX2VtcHR5KCZxLT5saXN0KSB8fCBxLT5sb2NrX3B0ciA9PSAwLgogICogVGhlIG9yZGVyIG9mIHdha3VwIGlzIGFsd2F5cyB0byBtYWtlIHRoZSBmaXJzdCBjb25kaXRpb24gdHJ1ZSwgdGhlbgotICogd2FrZSB1cCBxLT53YWl0ZXIsIHRoZW4gbWFrZSB0aGUgc2Vjb25kIGNvbmRpdGlvbiB0cnVlLgorICogdGhlIHNlY29uZC4KKyAqCisgKiBQSSBmdXRleGVzIGFyZSB0eXBpY2FsbHkgd29rZW4gYmVmb3JlIHRoZXkgYXJlIHJlbW92ZWQgZnJvbSB0aGUgaGFzaCBsaXN0IHZpYQorICogdGhlIHJ0X211dGV4IGNvZGUuIFNlZSB1bnF1ZXVlX21lX3BpKCkuCiAgKi8KIHN0cnVjdCBmdXRleF9xIHsKIAlzdHJ1Y3QgcGxpc3Rfbm9kZSBsaXN0OwotCS8qIFdhaXRlciByZWZlcmVuY2UgKi8KKwogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzazsKLQotCS8qIFdoaWNoIGhhc2ggbGlzdCBsb2NrIHRvIHVzZTogKi8KIAlzcGlubG9ja190ICpsb2NrX3B0cjsKLQotCS8qIEtleSB3aGljaCB0aGUgZnV0ZXggaXMgaGFzaGVkIG9uOiAqLwogCXVuaW9uIGZ1dGV4X2tleSBrZXk7Ci0KLQkvKiBPcHRpb25hbCBwcmlvcml0eSBpbmhlcml0YW5jZSBzdGF0ZTogKi8KIAlzdHJ1Y3QgZnV0ZXhfcGlfc3RhdGUgKnBpX3N0YXRlOwotCi0JLyogcnRfd2FpdGVyIHN0b3JhZ2UgZm9yIHJlcXVldWVfcGk6ICovCiAJc3RydWN0IHJ0X211dGV4X3dhaXRlciAqcnRfd2FpdGVyOwotCi0JLyogVGhlIGV4cGVjdGVkIHJlcXVldWUgcGkgdGFyZ2V0IGZ1dGV4IGtleTogKi8KIAl1bmlvbiBmdXRleF9rZXkgKnJlcXVldWVfcGlfa2V5OwotCi0JLyogQml0c2V0IGZvciB0aGUgb3B0aW9uYWwgYml0bWFza2VkIHdha2V1cCAqLwogCXUzMiBiaXRzZXQ7CiB9OwogCkBAIC0xNTAsNyArMTUwLDggQEAKICAqLwogc3RhdGljIGlubGluZSBpbnQgbWF0Y2hfZnV0ZXgodW5pb24gZnV0ZXhfa2V5ICprZXkxLCB1bmlvbiBmdXRleF9rZXkgKmtleTIpCiB7Ci0JcmV0dXJuIChrZXkxLT5ib3RoLndvcmQgPT0ga2V5Mi0+Ym90aC53b3JkCisJcmV0dXJuIChrZXkxICYmIGtleTIKKwkJJiYga2V5MS0+Ym90aC53b3JkID09IGtleTItPmJvdGgud29yZAogCQkmJiBrZXkxLT5ib3RoLnB0ciA9PSBrZXkyLT5ib3RoLnB0cgogCQkmJiBrZXkxLT5ib3RoLm9mZnNldCA9PSBrZXkyLT5ib3RoLm9mZnNldCk7CiB9CkBAIC0xOTgsMTEgKzE5OSwxMiBAQAogfQogCiAvKioKLSAqIGdldF9mdXRleF9rZXkgLSBHZXQgcGFyYW1ldGVycyB3aGljaCBhcmUgdGhlIGtleXMgZm9yIGEgZnV0ZXguCi0gKiBAdWFkZHI6IHZpcnR1YWwgYWRkcmVzcyBvZiB0aGUgZnV0ZXgKLSAqIEBmc2hhcmVkOiAwIGZvciBhIFBST0NFU1NfUFJJVkFURSBmdXRleCwgMSBmb3IgUFJPQ0VTU19TSEFSRUQKLSAqIEBrZXk6IGFkZHJlc3Mgd2hlcmUgcmVzdWx0IGlzIHN0b3JlZC4KLSAqIEBydzogbWFwcGluZyBuZWVkcyB0byBiZSByZWFkL3dyaXRlICh2YWx1ZXM6IFZFUklGWV9SRUFELCBWRVJJRllfV1JJVEUpCisgKiBnZXRfZnV0ZXhfa2V5KCkgLSBHZXQgcGFyYW1ldGVycyB3aGljaCBhcmUgdGhlIGtleXMgZm9yIGEgZnV0ZXgKKyAqIEB1YWRkcjoJdmlydHVhbCBhZGRyZXNzIG9mIHRoZSBmdXRleAorICogQGZzaGFyZWQ6CTAgZm9yIGEgUFJPQ0VTU19QUklWQVRFIGZ1dGV4LCAxIGZvciBQUk9DRVNTX1NIQVJFRAorICogQGtleToJYWRkcmVzcyB3aGVyZSByZXN1bHQgaXMgc3RvcmVkLgorICogQHJ3OgkJbWFwcGluZyBuZWVkcyB0byBiZSByZWFkL3dyaXRlICh2YWx1ZXM6IFZFUklGWV9SRUFELAorICogCQlWRVJJRllfV1JJVEUpCiAgKgogICogUmV0dXJucyBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb3IgMAogICogVGhlIGtleSB3b3JkcyBhcmUgc3RvcmVkIGluICprZXkgb24gc3VjY2Vzcy4KQEAgLTI4OCw4ICsyOTAsOCBAQAogCWRyb3BfZnV0ZXhfa2V5X3JlZnMoa2V5KTsKIH0KIAotLyoKLSAqIGZhdWx0X2luX3VzZXJfd3JpdGVhYmxlIC0gZmF1bHQgaW4gdXNlciBhZGRyZXNzIGFuZCB2ZXJpZnkgUlcgYWNjZXNzCisvKioKKyAqIGZhdWx0X2luX3VzZXJfd3JpdGVhYmxlKCkgLSBGYXVsdCBpbiB1c2VyIGFkZHJlc3MgYW5kIHZlcmlmeSBSVyBhY2Nlc3MKICAqIEB1YWRkcjoJcG9pbnRlciB0byBmYXVsdGluZyB1c2VyIHNwYWNlIGFkZHJlc3MKICAqCiAgKiBTbG93IHBhdGggdG8gZml4dXAgdGhlIGZhdWx0IHdlIGp1c3QgdG9vayBpbiB0aGUgYXRvbWljIHdyaXRlCkBAIC0zMDksOCArMzExLDggQEAKIAogLyoqCiAgKiBmdXRleF90b3Bfd2FpdGVyKCkgLSBSZXR1cm4gdGhlIGhpZ2hlc3QgcHJpb3JpdHkgd2FpdGVyIG9uIGEgZnV0ZXgKLSAqIEBoYjogICAgIHRoZSBoYXNoIGJ1Y2tldCB0aGUgZnV0ZXhfcSdzIHJlc2lkZSBpbgotICogQGtleTogICAgdGhlIGZ1dGV4IGtleSAodG8gZGlzdGluZ3Vpc2ggaXQgZnJvbSBvdGhlciBmdXRleCBmdXRleF9xJ3MpCisgKiBAaGI6CQl0aGUgaGFzaCBidWNrZXQgdGhlIGZ1dGV4X3EncyByZXNpZGUgaW4KKyAqIEBrZXk6CXRoZSBmdXRleCBrZXkgKHRvIGRpc3Rpbmd1aXNoIGl0IGZyb20gb3RoZXIgZnV0ZXggZnV0ZXhfcSdzKQogICoKICAqIE11c3QgYmUgY2FsbGVkIHdpdGggdGhlIGhiIGxvY2sgaGVsZC4KICAqLwpAQCAtNTg4LDcgKzU5MCw3IEBACiB9CiAKIC8qKgotICogZnV0ZXhfbG9ja19waV9hdG9taWMoKSAtIGF0b21pYyB3b3JrIHJlcXVpcmVkIHRvIGFjcXVpcmUgYSBwaSBhd2FyZSBmdXRleAorICogZnV0ZXhfbG9ja19waV9hdG9taWMoKSAtIEF0b21pYyB3b3JrIHJlcXVpcmVkIHRvIGFjcXVpcmUgYSBwaSBhd2FyZSBmdXRleAogICogQHVhZGRyOgkJdGhlIHBpIGZ1dGV4IHVzZXIgYWRkcmVzcwogICogQGhiOgkJCXRoZSBwaSBmdXRleCBoYXNoIGJ1Y2tldAogICogQGtleToJCXRoZSBmdXRleCBrZXkgYXNzb2NpYXRlZCB3aXRoIHVhZGRyIGFuZCBoYgpAQCAtOTE1LDggKzkxNyw4IEBACiAJaGIxID0gaGFzaF9mdXRleCgma2V5MSk7CiAJaGIyID0gaGFzaF9mdXRleCgma2V5Mik7CiAKLQlkb3VibGVfbG9ja19oYihoYjEsIGhiMik7CiByZXRyeV9wcml2YXRlOgorCWRvdWJsZV9sb2NrX2hiKGhiMSwgaGIyKTsKIAlvcF9yZXQgPSBmdXRleF9hdG9taWNfb3BfaW51c2VyKG9wLCB1YWRkcjIpOwogCWlmICh1bmxpa2VseShvcF9yZXQgPCAwKSkgewogCkBAIC0xMDExLDkgKzEwMTMsOSBAQAogCiAvKioKICAqIHJlcXVldWVfcGlfd2FrZV9mdXRleCgpIC0gV2FrZSBhIHRhc2sgdGhhdCBhY3F1aXJlZCB0aGUgbG9jayBkdXJpbmcgcmVxdWV1ZQotICogcToJdGhlIGZ1dGV4X3EKLSAqIGtleToJdGhlIGtleSBvZiB0aGUgcmVxdWV1ZSB0YXJnZXQgZnV0ZXgKLSAqIGhiOiAgdGhlIGhhc2hfYnVja2V0IG9mIHRoZSByZXF1ZXVlIHRhcmdldCBmdXRleAorICogQHE6CQl0aGUgZnV0ZXhfcQorICogQGtleToJdGhlIGtleSBvZiB0aGUgcmVxdWV1ZSB0YXJnZXQgZnV0ZXgKKyAqIEBoYjoJCXRoZSBoYXNoX2J1Y2tldCBvZiB0aGUgcmVxdWV1ZSB0YXJnZXQgZnV0ZXgKICAqCiAgKiBEdXJpbmcgZnV0ZXhfcmVxdWV1ZSwgd2l0aCByZXF1ZXVlX3BpPTEsIGl0IGlzIHBvc3NpYmxlIHRvIGFjcXVpcmUgdGhlCiAgKiB0YXJnZXQgZnV0ZXggaWYgaXQgaXMgdW5jb250ZW5kZWQgb3IgdmlhIGEgbG9jayBzdGVhbC4gIFNldCB0aGUgZnV0ZXhfcSBrZXkKQEAgLTEwMjcsNyArMTAyOSw2IEBACiB2b2lkIHJlcXVldWVfcGlfd2FrZV9mdXRleChzdHJ1Y3QgZnV0ZXhfcSAqcSwgdW5pb24gZnV0ZXhfa2V5ICprZXksCiAJCQkgICBzdHJ1Y3QgZnV0ZXhfaGFzaF9idWNrZXQgKmhiKQogewotCWRyb3BfZnV0ZXhfa2V5X3JlZnMoJnEtPmtleSk7CiAJZ2V0X2Z1dGV4X2tleV9yZWZzKGtleSk7CiAJcS0+a2V5ID0gKmtleTsKIApAQCAtMTIyNSw2ICsxMjI2LDcgQEAKIAkJICovCiAJCWlmIChyZXQgPT0gMSkgewogCQkJV0FSTl9PTihwaV9zdGF0ZSk7CisJCQlkcm9wX2NvdW50Kys7CiAJCQl0YXNrX2NvdW50Kys7CiAJCQlyZXQgPSBnZXRfZnV0ZXhfdmFsdWVfbG9ja2VkKCZjdXJ2YWwyLCB1YWRkcjIpOwogCQkJaWYgKCFyZXQpCkBAIC0xMzAzLDYgKzEzMDUsNyBAQAogCQkJaWYgKHJldCA9PSAxKSB7CiAJCQkJLyogV2UgZ290IHRoZSBsb2NrLiAqLwogCQkJCXJlcXVldWVfcGlfd2FrZV9mdXRleCh0aGlzLCAma2V5MiwgaGIyKTsKKwkJCQlkcm9wX2NvdW50Kys7CiAJCQkJY29udGludWU7CiAJCQl9IGVsc2UgaWYgKHJldCkgewogCQkJCS8qIC1FREVBRExLICovCkBAIC0xMzUwLDYgKzEzNTMsMjUgQEAKIAlyZXR1cm4gaGI7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZAorcXVldWVfdW5sb2NrKHN0cnVjdCBmdXRleF9xICpxLCBzdHJ1Y3QgZnV0ZXhfaGFzaF9idWNrZXQgKmhiKQoreworCXNwaW5fdW5sb2NrKCZoYi0+bG9jayk7CisJZHJvcF9mdXRleF9rZXlfcmVmcygmcS0+a2V5KTsKK30KKworLyoqCisgKiBxdWV1ZV9tZSgpIC0gRW5xdWV1ZSB0aGUgZnV0ZXhfcSBvbiB0aGUgZnV0ZXhfaGFzaF9idWNrZXQKKyAqIEBxOglUaGUgZnV0ZXhfcSB0byBlbnF1ZXVlCisgKiBAaGI6CVRoZSBkZXN0aW5hdGlvbiBoYXNoIGJ1Y2tldAorICoKKyAqIFRoZSBoYi0+bG9jayBtdXN0IGJlIGhlbGQgYnkgdGhlIGNhbGxlciwgYW5kIGlzIHJlbGVhc2VkIGhlcmUuIEEgY2FsbCB0bworICogcXVldWVfbWUoKSBpcyB0eXBpY2FsbHkgcGFpcmVkIHdpdGggZXhhY3RseSBvbmUgY2FsbCB0byB1bnF1ZXVlX21lKCkuICBUaGUKKyAqIGV4Y2VwdGlvbnMgaW52b2x2ZSB0aGUgUEkgcmVsYXRlZCBvcGVyYXRpb25zLCB3aGljaCBtYXkgdXNlIHVucXVldWVfbWVfcGkoKQorICogb3Igbm90aGluZyBpZiB0aGUgdW5xdWV1ZSBpcyBkb25lIGFzIHBhcnQgb2YgdGhlIHdha2UgcHJvY2VzcyBhbmQgdGhlIHVucXVldWUKKyAqIHN0YXRlIGlzIGltcGxpY2l0IGluIHRoZSBzdGF0ZSBvZiB3b2tlbiB0YXNrIChzZWUgZnV0ZXhfd2FpdF9yZXF1ZXVlX3BpKCkgZm9yCisgKiBhbiBleGFtcGxlKS4KKyAqLwogc3RhdGljIGlubGluZSB2b2lkIHF1ZXVlX21lKHN0cnVjdCBmdXRleF9xICpxLCBzdHJ1Y3QgZnV0ZXhfaGFzaF9idWNrZXQgKmhiKQogewogCWludCBwcmlvOwpAQCAtMTM3MywxOSArMTM5NSwxNyBAQAogCXNwaW5fdW5sb2NrKCZoYi0+bG9jayk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZAotcXVldWVfdW5sb2NrKHN0cnVjdCBmdXRleF9xICpxLCBzdHJ1Y3QgZnV0ZXhfaGFzaF9idWNrZXQgKmhiKQotewotCXNwaW5fdW5sb2NrKCZoYi0+bG9jayk7Ci0JZHJvcF9mdXRleF9rZXlfcmVmcygmcS0+a2V5KTsKLX0KLQotLyoKLSAqIHF1ZXVlX21lIGFuZCB1bnF1ZXVlX21lIG11c3QgYmUgY2FsbGVkIGFzIGEgcGFpciwgZWFjaAotICogZXhhY3RseSBvbmNlLiAgVGhleSBhcmUgY2FsbGVkIHdpdGggdGhlIGhhc2hlZCBzcGlubG9jayBoZWxkLgorLyoqCisgKiB1bnF1ZXVlX21lKCkgLSBSZW1vdmUgdGhlIGZ1dGV4X3EgZnJvbSBpdHMgZnV0ZXhfaGFzaF9idWNrZXQKKyAqIEBxOglUaGUgZnV0ZXhfcSB0byB1bnF1ZXVlCisgKgorICogVGhlIHEtPmxvY2tfcHRyIG11c3Qgbm90IGJlIGhlbGQgYnkgdGhlIGNhbGxlci4gQSBjYWxsIHRvIHVucXVldWVfbWUoKSBtdXN0CisgKiBiZSBwYWlyZWQgd2l0aCBleGFjdGx5IG9uZSBlYXJsaWVyIGNhbGwgdG8gcXVldWVfbWUoKS4KKyAqCisgKiBSZXR1cm5zOgorICogICAxIC0gaWYgdGhlIGZ1dGV4X3Egd2FzIHN0aWxsIHF1ZXVlZCAoYW5kIHdlIHJlbW92ZWQgdW5xdWV1ZWQgaXQpCisgKiAgIDAgLSBpZiB0aGUgZnV0ZXhfcSB3YXMgYWxyZWFkeSByZW1vdmVkIGJ5IHRoZSB3YWtpbmcgdGhyZWFkCiAgKi8KLQotLyogUmV0dXJuIDEgaWYgd2Ugd2VyZSBzdGlsbCBxdWV1ZWQgKGllLiAwIG1lYW5zIHdlIHdlcmUgd29rZW4pICovCiBzdGF0aWMgaW50IHVucXVldWVfbWUoc3RydWN0IGZ1dGV4X3EgKnEpCiB7CiAJc3BpbmxvY2tfdCAqbG9ja19wdHI7CkBAIC0xNjM4LDE3ICsxNjU4LDE0IEBACiBzdGF0aWMgdm9pZCBmdXRleF93YWl0X3F1ZXVlX21lKHN0cnVjdCBmdXRleF9oYXNoX2J1Y2tldCAqaGIsIHN0cnVjdCBmdXRleF9xICpxLAogCQkJCXN0cnVjdCBocnRpbWVyX3NsZWVwZXIgKnRpbWVvdXQpCiB7Ci0JcXVldWVfbWUocSwgaGIpOwotCiAJLyoKLQkgKiBUaGVyZSBtaWdodCBoYXZlIGJlZW4gc2NoZWR1bGluZyBzaW5jZSB0aGUgcXVldWVfbWUoKSwgYXMgd2UKLQkgKiBjYW5ub3QgaG9sZCBhIHNwaW5sb2NrIGFjcm9zcyB0aGUgZ2V0X3VzZXIoKSBpbiBjYXNlIGl0Ci0JICogZmF1bHRzLCBhbmQgd2UgY2Fubm90IGp1c3Qgc2V0IFRBU0tfSU5URVJSVVBUSUJMRSBzdGF0ZSB3aGVuCi0JICogcXVldWVpbmcgb3Vyc2VsdmVzIGludG8gdGhlIGZ1dGV4IGhhc2guIFRoaXMgY29kZSB0aHVzIGhhcyB0bwotCSAqIHJlbHkgb24gdGhlIGZ1dGV4X3dha2UoKSBjb2RlIHJlbW92aW5nIHVzIGZyb20gaGFzaCB3aGVuIGl0Ci0JICogd2FrZXMgdXMgdXAuCisJICogVGhlIHRhc2sgc3RhdGUgaXMgZ3VhcmFudGVlZCB0byBiZSBzZXQgYmVmb3JlIGFub3RoZXIgdGFzayBjYW4KKwkgKiB3YWtlIGl0LiBzZXRfY3VycmVudF9zdGF0ZSgpIGlzIGltcGxlbWVudGVkIHVzaW5nIHNldF9tYigpIGFuZAorCSAqIHF1ZXVlX21lKCkgY2FsbHMgc3Bpbl91bmxvY2soKSB1cG9uIGNvbXBsZXRpb24sIGJvdGggc2VyaWFsaXppbmcKKwkgKiBhY2Nlc3MgdG8gdGhlIGhhc2ggbGlzdCBhbmQgZm9yY2luZyBhbm90aGVyIG1lbW9yeSBiYXJyaWVyLgogCSAqLwogCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CisJcXVldWVfbWUocSwgaGIpOwogCiAJLyogQXJtIHRoZSB0aW1lciAqLwogCWlmICh0aW1lb3V0KSB7CkBAIC0xNjU4LDggKzE2NzUsOCBAQAogCX0KIAogCS8qCi0JICogIXBsaXN0X25vZGVfZW1wdHkoKSBpcyBzYWZlIGhlcmUgd2l0aG91dCBhbnkgbG9jay4KLQkgKiBxLmxvY2tfcHRyICE9IDAgaXMgbm90IHNhZmUsIGJlY2F1c2Ugb2Ygb3JkZXJpbmcgYWdhaW5zdCB3YWtldXAuCisJICogSWYgd2UgaGF2ZSBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgaGFzaCBsaXN0LCB0aGVuIGFub3RoZXIgdGFzaworCSAqIGhhcyB0cmllZCB0byB3YWtlIHVzLCBhbmQgd2UgY2FuIHNraXAgdGhlIGNhbGwgdG8gc2NoZWR1bGUoKS4KIAkgKi8KIAlpZiAobGlrZWx5KCFwbGlzdF9ub2RlX2VtcHR5KCZxLT5saXN0KSkpIHsKIAkJLyoKQEAgLTE3NzYsNiArMTc5Myw3IEBACiAJCQkJCSAgICAgY3VycmVudC0+dGltZXJfc2xhY2tfbnMpOwogCX0KIAorcmV0cnk6CiAJLyogUHJlcGFyZSB0byB3YWl0IG9uIHVhZGRyLiAqLwogCXJldCA9IGZ1dGV4X3dhaXRfc2V0dXAodWFkZHIsIHZhbCwgZnNoYXJlZCwgJnEsICZoYik7CiAJaWYgKHJldCkKQEAgLTE3OTMsOSArMTgxMSwxNCBAQAogCQlnb3RvIG91dF9wdXRfa2V5OwogCiAJLyoKLQkgKiBXZSBleHBlY3Qgc2lnbmFsX3BlbmRpbmcoY3VycmVudCksIGJ1dCBhbm90aGVyIHRocmVhZCBtYXkKLQkgKiBoYXZlIGhhbmRsZWQgaXQgZm9yIHVzIGFscmVhZHkuCisJICogV2UgZXhwZWN0IHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpLCBidXQgd2UgbWlnaHQgYmUgdGhlCisJICogdmljdGltIG9mIGEgc3B1cmlvdXMgd2FrZXVwIGFzIHdlbGwuCiAJICovCisJaWYgKCFzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgeworCQlwdXRfZnV0ZXhfa2V5KGZzaGFyZWQsICZxLmtleSk7CisJCWdvdG8gcmV0cnk7CisJfQorCiAJcmV0ID0gLUVSRVNUQVJUU1lTOwogCWlmICghYWJzX3RpbWUpCiAJCWdvdG8gb3V0X3B1dF9rZXk7CkBAIC0yMTAyLDExICsyMTI1LDEyIEBACiAJCSAqIFVucXVldWUgdGhlIGZ1dGV4X3EgYW5kIGRldGVybWluZSB3aGljaCBpdCB3YXMuCiAJCSAqLwogCQlwbGlzdF9kZWwoJnEtPmxpc3QsICZxLT5saXN0LnBsaXN0KTsKLQkJZHJvcF9mdXRleF9rZXlfcmVmcygmcS0+a2V5KTsKIAorCQkvKiBIYW5kbGUgc3B1cmlvdXMgd2FrZXVwcyBncmFjZWZ1bGx5ICovCisJCXJldCA9IC1FV09VTERCTE9DSzsKIAkJaWYgKHRpbWVvdXQgJiYgIXRpbWVvdXQtPnRhc2spCiAJCQlyZXQgPSAtRVRJTUVET1VUOwotCQllbHNlCisJCWVsc2UgaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQogCQkJcmV0ID0gLUVSRVNUQVJUTk9JTlRSOwogCX0KIAlyZXR1cm4gcmV0OwpAQCAtMjExNCwxMiArMjEzOCwxMiBAQAogCiAvKioKICAqIGZ1dGV4X3dhaXRfcmVxdWV1ZV9waSgpIC0gV2FpdCBvbiB1YWRkciBhbmQgdGFrZSB1YWRkcjIKLSAqIEB1YWRkcjoJdGhlIGZ1dGV4IHdlIGluaXRpYWx5bCB3YWl0IG9uIChub24tcGkpCisgKiBAdWFkZHI6CXRoZSBmdXRleCB3ZSBpbml0aWFsbHkgd2FpdCBvbiAobm9uLXBpKQogICogQGZzaGFyZWQ6CXdoZXRoZXIgdGhlIGZ1dGV4ZXMgYXJlIHNoYXJlZCAoMSkgb3Igbm90ICgwKS4gIFRoZXkgbXVzdCBiZQogICogCQl0aGUgc2FtZSB0eXBlLCBubyByZXF1ZXVlaW5nIGZyb20gcHJpdmF0ZSB0byBzaGFyZWQsIGV0Yy4KICAqIEB2YWw6CXRoZSBleHBlY3RlZCB2YWx1ZSBvZiB1YWRkcgogICogQGFic190aW1lOglhYnNvbHV0ZSB0aW1lb3V0Ci0gKiBAYml0c2V0OgkzMiBiaXQgd2FrZXVwIGJpdHNldCBzZXQgYnkgdXNlcnNwYWNlLCBkZWZhdWx0cyB0byBhbGwuCisgKiBAYml0c2V0OgkzMiBiaXQgd2FrZXVwIGJpdHNldCBzZXQgYnkgdXNlcnNwYWNlLCBkZWZhdWx0cyB0byBhbGwKICAqIEBjbG9ja3J0Ogl3aGV0aGVyIHRvIHVzZSBDTE9DS19SRUFMVElNRSAoMSkgb3IgQ0xPQ0tfTU9OT1RPTklDICgwKQogICogQHVhZGRyMjoJdGhlIHBpIGZ1dGV4IHdlIHdpbGwgdGFrZSBwcmlvciB0byByZXR1cm5pbmcgdG8gdXNlci1zcGFjZQogICoKQEAgLTIyNDYsNyArMjI3MCw3IEBACiAJCXJlcyA9IGZpeHVwX293bmVyKHVhZGRyMiwgZnNoYXJlZCwgJnEsICFyZXQpOwogCQkvKgogCQkgKiBJZiBmaXh1cF9vd25lcigpIHJldHVybmVkIGFuIGVycm9yLCBwcm9wcm9nYXRlIHRoYXQuICBJZiBpdAotCQkgKiBhY3F1aXJlZCB0aGUgbG9jaywgY2xlYXIgb3VyIC1FVElNRURPVVQgb3IgLUVJTlRSLgorCQkgKiBhY3F1aXJlZCB0aGUgbG9jaywgY2xlYXIgLUVUSU1FRE9VVCBvciAtRUlOVFIuCiAJCSAqLwogCQlpZiAocmVzKQogCQkJcmV0ID0gKHJlcyA8IDApID8gcmVzIDogMDsKQEAgLTIzMDIsOSArMjMyNiw5IEBACiAgKi8KIAogLyoqCi0gKiBzeXNfc2V0X3JvYnVzdF9saXN0IC0gc2V0IHRoZSByb2J1c3QtZnV0ZXggbGlzdCBoZWFkIG9mIGEgdGFzawotICogQGhlYWQ6IHBvaW50ZXIgdG8gdGhlIGxpc3QtaGVhZAotICogQGxlbjogbGVuZ3RoIG9mIHRoZSBsaXN0LWhlYWQsIGFzIHVzZXJzcGFjZSBleHBlY3RzCisgKiBzeXNfc2V0X3JvYnVzdF9saXN0KCkgLSBTZXQgdGhlIHJvYnVzdC1mdXRleCBsaXN0IGhlYWQgb2YgYSB0YXNrCisgKiBAaGVhZDoJcG9pbnRlciB0byB0aGUgbGlzdC1oZWFkCisgKiBAbGVuOglsZW5ndGggb2YgdGhlIGxpc3QtaGVhZCwgYXMgdXNlcnNwYWNlIGV4cGVjdHMKICAqLwogU1lTQ0FMTF9ERUZJTkUyKHNldF9yb2J1c3RfbGlzdCwgc3RydWN0IHJvYnVzdF9saXN0X2hlYWQgX191c2VyICosIGhlYWQsCiAJCXNpemVfdCwgbGVuKQpAQCAtMjMyMywxMCArMjM0NywxMCBAQAogfQogCiAvKioKLSAqIHN5c19nZXRfcm9idXN0X2xpc3QgLSBnZXQgdGhlIHJvYnVzdC1mdXRleCBsaXN0IGhlYWQgb2YgYSB0YXNrCi0gKiBAcGlkOiBwaWQgb2YgdGhlIHByb2Nlc3MgW3plcm8gZm9yIGN1cnJlbnQgdGFza10KLSAqIEBoZWFkX3B0cjogcG9pbnRlciB0byBhIGxpc3QtaGVhZCBwb2ludGVyLCB0aGUga2VybmVsIGZpbGxzIGl0IGluCi0gKiBAbGVuX3B0cjogcG9pbnRlciB0byBhIGxlbmd0aCBmaWVsZCwgdGhlIGtlcm5lbCBmaWxscyBpbiB0aGUgaGVhZGVyIHNpemUKKyAqIHN5c19nZXRfcm9idXN0X2xpc3QoKSAtIEdldCB0aGUgcm9idXN0LWZ1dGV4IGxpc3QgaGVhZCBvZiBhIHRhc2sKKyAqIEBwaWQ6CXBpZCBvZiB0aGUgcHJvY2VzcyBbemVybyBmb3IgY3VycmVudCB0YXNrXQorICogQGhlYWRfcHRyOglwb2ludGVyIHRvIGEgbGlzdC1oZWFkIHBvaW50ZXIsIHRoZSBrZXJuZWwgZmlsbHMgaXQgaW4KKyAqIEBsZW5fcHRyOglwb2ludGVyIHRvIGEgbGVuZ3RoIGZpZWxkLCB0aGUga2VybmVsIGZpbGxzIGluIHRoZSBoZWFkZXIgc2l6ZQogICovCiBTWVNDQUxMX0RFRklORTMoZ2V0X3JvYnVzdF9saXN0LCBpbnQsIHBpZCwKIAkJc3RydWN0IHJvYnVzdF9saXN0X2hlYWQgX191c2VyICogX191c2VyICosIGhlYWRfcHRyLApkaWZmIC0tZ2l0IGEva2VybmVsL2hydGltZXIuYyBiL2tlcm5lbC9ocnRpbWVyLmMKaW5kZXggZTVkOThjZS4uM2UxYzM2ZSAxMDA2NDQKLS0tIGEva2VybmVsL2hydGltZXIuYworKysgYi9rZXJuZWwvaHJ0aW1lci5jCkBAIC01MDksMTMgKzUwOSwxNCBAQAogICogbmV4dCBldmVudAogICogQ2FsbGVkIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZCBhbmQgYmFzZS0+bG9jayBoZWxkCiAgKi8KLXN0YXRpYyB2b2lkIGhydGltZXJfZm9yY2VfcmVwcm9ncmFtKHN0cnVjdCBocnRpbWVyX2NwdV9iYXNlICpjcHVfYmFzZSkKK3N0YXRpYyB2b2lkCitocnRpbWVyX2ZvcmNlX3JlcHJvZ3JhbShzdHJ1Y3QgaHJ0aW1lcl9jcHVfYmFzZSAqY3B1X2Jhc2UsIGludCBza2lwX2VxdWFsKQogewogCWludCBpOwogCXN0cnVjdCBocnRpbWVyX2Nsb2NrX2Jhc2UgKmJhc2UgPSBjcHVfYmFzZS0+Y2xvY2tfYmFzZTsKLQlrdGltZV90IGV4cGlyZXM7CisJa3RpbWVfdCBleHBpcmVzLCBleHBpcmVzX25leHQ7CiAKLQljcHVfYmFzZS0+ZXhwaXJlc19uZXh0LnR2NjQgPSBLVElNRV9NQVg7CisJZXhwaXJlc19uZXh0LnR2NjQgPSBLVElNRV9NQVg7CiAKIAlmb3IgKGkgPSAwOyBpIDwgSFJUSU1FUl9NQVhfQ0xPQ0tfQkFTRVM7IGkrKywgYmFzZSsrKSB7CiAJCXN0cnVjdCBocnRpbWVyICp0aW1lcjsKQEAgLTUzMSwxMCArNTMyLDE1IEBACiAJCSAqLwogCQlpZiAoZXhwaXJlcy50djY0IDwgMCkKIAkJCWV4cGlyZXMudHY2NCA9IDA7Ci0JCWlmIChleHBpcmVzLnR2NjQgPCBjcHVfYmFzZS0+ZXhwaXJlc19uZXh0LnR2NjQpCi0JCQljcHVfYmFzZS0+ZXhwaXJlc19uZXh0ID0gZXhwaXJlczsKKwkJaWYgKGV4cGlyZXMudHY2NCA8IGV4cGlyZXNfbmV4dC50djY0KQorCQkJZXhwaXJlc19uZXh0ID0gZXhwaXJlczsKIAl9CiAKKwlpZiAoc2tpcF9lcXVhbCAmJiBleHBpcmVzX25leHQudHY2NCA9PSBjcHVfYmFzZS0+ZXhwaXJlc19uZXh0LnR2NjQpCisJCXJldHVybjsKKworCWNwdV9iYXNlLT5leHBpcmVzX25leHQudHY2NCA9IGV4cGlyZXNfbmV4dC50djY0OworCiAJaWYgKGNwdV9iYXNlLT5leHBpcmVzX25leHQudHY2NCAhPSBLVElNRV9NQVgpCiAJCXRpY2tfcHJvZ3JhbV9ldmVudChjcHVfYmFzZS0+ZXhwaXJlc19uZXh0LCAxKTsKIH0KQEAgLTYxNyw3ICs2MjMsNyBAQAogCWJhc2UtPmNsb2NrX2Jhc2VbQ0xPQ0tfUkVBTFRJTUVdLm9mZnNldCA9CiAJCXRpbWVzcGVjX3RvX2t0aW1lKHJlYWx0aW1lX29mZnNldCk7CiAKLQlocnRpbWVyX2ZvcmNlX3JlcHJvZ3JhbShiYXNlKTsKKwlocnRpbWVyX2ZvcmNlX3JlcHJvZ3JhbShiYXNlLCAwKTsKIAlzcGluX3VubG9jaygmYmFzZS0+bG9jayk7CiB9CiAKQEAgLTcyMCw4ICs3MjYsNiBAQAogCS8qICJSZXRyaWdnZXIiIHRoZSBpbnRlcnJ1cHQgdG8gZ2V0IHRoaW5ncyBnb2luZyAqLwogCXJldHJpZ2dlcl9uZXh0X2V2ZW50KE5VTEwpOwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiU3dpdGNoZWQgdG8gaGlnaCByZXNvbHV0aW9uIG1vZGUgb24gQ1BVICVkXG4iLAotCSAgICAgICBzbXBfcHJvY2Vzc29yX2lkKCkpOwogCXJldHVybiAxOwogfQogCkBAIC03MzAsNyArNzM0LDggQEAKIHN0YXRpYyBpbmxpbmUgaW50IGhydGltZXJfaHJlc19hY3RpdmUodm9pZCkgeyByZXR1cm4gMDsgfQogc3RhdGljIGlubGluZSBpbnQgaHJ0aW1lcl9pc19ocmVzX2VuYWJsZWQodm9pZCkgeyByZXR1cm4gMDsgfQogc3RhdGljIGlubGluZSBpbnQgaHJ0aW1lcl9zd2l0Y2hfdG9faHJlcyh2b2lkKSB7IHJldHVybiAwOyB9Ci1zdGF0aWMgaW5saW5lIHZvaWQgaHJ0aW1lcl9mb3JjZV9yZXByb2dyYW0oc3RydWN0IGhydGltZXJfY3B1X2Jhc2UgKmJhc2UpIHsgfQorc3RhdGljIGlubGluZSB2b2lkCitocnRpbWVyX2ZvcmNlX3JlcHJvZ3JhbShzdHJ1Y3QgaHJ0aW1lcl9jcHVfYmFzZSAqYmFzZSwgaW50IHNraXBfZXF1YWwpIHsgfQogc3RhdGljIGlubGluZSBpbnQgaHJ0aW1lcl9lbnF1ZXVlX3JlcHJvZ3JhbShzdHJ1Y3QgaHJ0aW1lciAqdGltZXIsCiAJCQkJCSAgICBzdHJ1Y3QgaHJ0aW1lcl9jbG9ja19iYXNlICpiYXNlLAogCQkJCQkgICAgaW50IHdha2V1cCkKQEAgLTg3MywxOSArODc4LDI5IEBACiAJCQkgICAgIHN0cnVjdCBocnRpbWVyX2Nsb2NrX2Jhc2UgKmJhc2UsCiAJCQkgICAgIHVuc2lnbmVkIGxvbmcgbmV3c3RhdGUsIGludCByZXByb2dyYW0pCiB7Ci0JaWYgKHRpbWVyLT5zdGF0ZSAmIEhSVElNRVJfU1RBVEVfRU5RVUVVRUQpIHsKLQkJLyoKLQkJICogUmVtb3ZlIHRoZSB0aW1lciBmcm9tIHRoZSByYnRyZWUgYW5kIHJlcGxhY2UgdGhlCi0JCSAqIGZpcnN0IGVudHJ5IHBvaW50ZXIgaWYgbmVjZXNzYXJ5LgotCQkgKi8KLQkJaWYgKGJhc2UtPmZpcnN0ID09ICZ0aW1lci0+bm9kZSkgewotCQkJYmFzZS0+Zmlyc3QgPSByYl9uZXh0KCZ0aW1lci0+bm9kZSk7Ci0JCQkvKiBSZXByb2dyYW0gdGhlIGNsb2NrIGV2ZW50IGRldmljZS4gaWYgZW5hYmxlZCAqLwotCQkJaWYgKHJlcHJvZ3JhbSAmJiBocnRpbWVyX2hyZXNfYWN0aXZlKCkpCi0JCQkJaHJ0aW1lcl9mb3JjZV9yZXByb2dyYW0oYmFzZS0+Y3B1X2Jhc2UpOworCWlmICghKHRpbWVyLT5zdGF0ZSAmIEhSVElNRVJfU1RBVEVfRU5RVUVVRUQpKQorCQlnb3RvIG91dDsKKworCS8qCisJICogUmVtb3ZlIHRoZSB0aW1lciBmcm9tIHRoZSByYnRyZWUgYW5kIHJlcGxhY2UgdGhlIGZpcnN0CisJICogZW50cnkgcG9pbnRlciBpZiBuZWNlc3NhcnkuCisJICovCisJaWYgKGJhc2UtPmZpcnN0ID09ICZ0aW1lci0+bm9kZSkgeworCQliYXNlLT5maXJzdCA9IHJiX25leHQoJnRpbWVyLT5ub2RlKTsKKyNpZmRlZiBDT05GSUdfSElHSF9SRVNfVElNRVJTCisJCS8qIFJlcHJvZ3JhbSB0aGUgY2xvY2sgZXZlbnQgZGV2aWNlLiBpZiBlbmFibGVkICovCisJCWlmIChyZXByb2dyYW0gJiYgaHJ0aW1lcl9ocmVzX2FjdGl2ZSgpKSB7CisJCQlrdGltZV90IGV4cGlyZXM7CisKKwkJCWV4cGlyZXMgPSBrdGltZV9zdWIoaHJ0aW1lcl9nZXRfZXhwaXJlcyh0aW1lciksCisJCQkJCSAgICBiYXNlLT5vZmZzZXQpOworCQkJaWYgKGJhc2UtPmNwdV9iYXNlLT5leHBpcmVzX25leHQudHY2NCA9PSBleHBpcmVzLnR2NjQpCisJCQkJaHJ0aW1lcl9mb3JjZV9yZXByb2dyYW0oYmFzZS0+Y3B1X2Jhc2UsIDEpOwogCQl9Ci0JCXJiX2VyYXNlKCZ0aW1lci0+bm9kZSwgJmJhc2UtPmFjdGl2ZSk7CisjZW5kaWYKIAl9CisJcmJfZXJhc2UoJnRpbWVyLT5ub2RlLCAmYmFzZS0+YWN0aXZlKTsKK291dDoKIAl0aW1lci0+c3RhdGUgPSBuZXdzdGF0ZTsKIH0KIApkaWZmIC0tZ2l0IGEva2VybmVsL2lycS9oYW5kbGUuYyBiL2tlcm5lbC9pcnEvaGFuZGxlLmMKaW5kZXggYTgxY2Y4MC4uMTdjNzFiYiAxMDA2NDQKLS0tIGEva2VybmVsL2lycS9oYW5kbGUuYworKysgYi9rZXJuZWwvaXJxL2hhbmRsZS5jCkBAIC0xMSw2ICsxMSw3IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3JhbmRvbS5oPgpkaWZmIC0tZ2l0IGEva2VybmVsL2twcm9iZXMuYyBiL2tlcm5lbC9rcHJvYmVzLmMKaW5kZXggY2ZhZGMxMi4uNTI0MGQ3NSAxMDA2NDQKLS0tIGEva2VybmVsL2twcm9iZXMuYworKysgYi9rZXJuZWwva3Byb2Jlcy5jCkBAIC0xMzMzLDcgKzEzMzMsNyBAQAogCXJldHVybiBzZXFfb3BlbihmaWxwLCAma3Byb2Jlc19zZXFfb3BzKTsKIH0KIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZGVidWdmc19rcHJvYmVzX29wZXJhdGlvbnMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkZWJ1Z2ZzX2twcm9iZXNfb3BlcmF0aW9ucyA9IHsKIAkub3BlbiAgICAgICAgICAgPSBrcHJvYmVzX29wZW4sCiAJLnJlYWQgICAgICAgICAgID0gc2VxX3JlYWQsCiAJLmxsc2VlayAgICAgICAgID0gc2VxX2xzZWVrLApAQCAtMTUxNSw3ICsxNTE1LDcgQEAKIAlyZXR1cm4gY291bnQ7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGZvcHNfa3AgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmb3BzX2twID0gewogCS5yZWFkID0gICAgICAgICByZWFkX2VuYWJsZWRfZmlsZV9ib29sLAogCS53cml0ZSA9ICAgICAgICB3cml0ZV9lbmFibGVkX2ZpbGVfYm9vbCwKIH07CmRpZmYgLS1naXQgYS9rZXJuZWwvbG9ja2RlcC5jIGIva2VybmVsL2xvY2tkZXAuYwppbmRleCAzODE1YWMxZC4uOWFmNTY3MiAxMDA2NDQKLS0tIGEva2VybmVsL2xvY2tkZXAuYworKysgYi9rZXJuZWwvbG9ja2RlcC5jCkBAIC0xNDIsNiArMTQyLDExIEBACiAjaWZkZWYgQ09ORklHX0xPQ0tfU1RBVAogc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBsb2NrX2NsYXNzX3N0YXRzW01BWF9MT0NLREVQX0tFWVNdLCBsb2NrX3N0YXRzKTsKIAorc3RhdGljIGlubGluZSB1NjQgbG9ja3N0YXRfY2xvY2sodm9pZCkKK3sKKwlyZXR1cm4gY3B1X2Nsb2NrKHNtcF9wcm9jZXNzb3JfaWQoKSk7Cit9CisKIHN0YXRpYyBpbnQgbG9ja19wb2ludCh1bnNpZ25lZCBsb25nIHBvaW50c1tdLCB1bnNpZ25lZCBsb25nIGlwKQogewogCWludCBpOwpAQCAtMTU4LDcgKzE2Myw3IEBACiAJcmV0dXJuIGk7CiB9CiAKLXN0YXRpYyB2b2lkIGxvY2tfdGltZV9pbmMoc3RydWN0IGxvY2tfdGltZSAqbHQsIHM2NCB0aW1lKQorc3RhdGljIHZvaWQgbG9ja190aW1lX2luYyhzdHJ1Y3QgbG9ja190aW1lICpsdCwgdTY0IHRpbWUpCiB7CiAJaWYgKHRpbWUgPiBsdC0+bWF4KQogCQlsdC0+bWF4ID0gdGltZTsKQEAgLTIzNCwxMiArMjM5LDEyIEBACiBzdGF0aWMgdm9pZCBsb2NrX3JlbGVhc2VfaG9sZHRpbWUoc3RydWN0IGhlbGRfbG9jayAqaGxvY2spCiB7CiAJc3RydWN0IGxvY2tfY2xhc3Nfc3RhdHMgKnN0YXRzOwotCXM2NCBob2xkdGltZTsKKwl1NjQgaG9sZHRpbWU7CiAKIAlpZiAoIWxvY2tfc3RhdCkKIAkJcmV0dXJuOwogCi0JaG9sZHRpbWUgPSBzY2hlZF9jbG9jaygpIC0gaGxvY2stPmhvbGR0aW1lX3N0YW1wOworCWhvbGR0aW1lID0gbG9ja3N0YXRfY2xvY2soKSAtIGhsb2NrLT5ob2xkdGltZV9zdGFtcDsKIAogCXN0YXRzID0gZ2V0X2xvY2tfc3RhdHMoaGxvY2tfY2xhc3MoaGxvY2spKTsKIAlpZiAoaGxvY2stPnJlYWQpCkBAIC0yNzkyLDcgKzI3OTcsNyBAQAogCWhsb2NrLT5yZWZlcmVuY2VzID0gcmVmZXJlbmNlczsKICNpZmRlZiBDT05GSUdfTE9DS19TVEFUCiAJaGxvY2stPndhaXR0aW1lX3N0YW1wID0gMDsKLQlobG9jay0+aG9sZHRpbWVfc3RhbXAgPSBzY2hlZF9jbG9jaygpOworCWhsb2NrLT5ob2xkdGltZV9zdGFtcCA9IGxvY2tzdGF0X2Nsb2NrKCk7CiAjZW5kaWYKIAogCWlmIChjaGVjayA9PSAyICYmICFtYXJrX2lycWZsYWdzKGN1cnIsIGhsb2NrKSkKQEAgLTMzMjIsNyArMzMyNyw3IEBACiAJaWYgKGhsb2NrLT5pbnN0YW5jZSAhPSBsb2NrKQogCQlyZXR1cm47CiAKLQlobG9jay0+d2FpdHRpbWVfc3RhbXAgPSBzY2hlZF9jbG9jaygpOworCWhsb2NrLT53YWl0dGltZV9zdGFtcCA9IGxvY2tzdGF0X2Nsb2NrKCk7CiAKIAljb250ZW50aW9uX3BvaW50ID0gbG9ja19wb2ludChobG9ja19jbGFzcyhobG9jayktPmNvbnRlbnRpb25fcG9pbnQsIGlwKTsKIAljb250ZW5kaW5nX3BvaW50ID0gbG9ja19wb2ludChobG9ja19jbGFzcyhobG9jayktPmNvbnRlbmRpbmdfcG9pbnQsCkBAIC0zMzQ1LDggKzMzNTAsNyBAQAogCXN0cnVjdCBoZWxkX2xvY2sgKmhsb2NrLCAqcHJldl9obG9jazsKIAlzdHJ1Y3QgbG9ja19jbGFzc19zdGF0cyAqc3RhdHM7CiAJdW5zaWduZWQgaW50IGRlcHRoOwotCXU2NCBub3c7Ci0JczY0IHdhaXR0aW1lID0gMDsKKwl1NjQgbm93LCB3YWl0dGltZSA9IDA7CiAJaW50IGksIGNwdTsKIAogCWRlcHRoID0gY3Vyci0+bG9ja2RlcF9kZXB0aDsKQEAgLTMzNzQsNyArMzM3OCw3IEBACiAKIAljcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAJaWYgKGhsb2NrLT53YWl0dGltZV9zdGFtcCkgewotCQlub3cgPSBzY2hlZF9jbG9jaygpOworCQlub3cgPSBsb2Nrc3RhdF9jbG9jaygpOwogCQl3YWl0dGltZSA9IG5vdyAtIGhsb2NrLT53YWl0dGltZV9zdGFtcDsKIAkJaGxvY2stPmhvbGR0aW1lX3N0YW1wID0gbm93OwogCX0KZGlmZiAtLWdpdCBhL2tlcm5lbC9tb2R1bGUuYyBiL2tlcm5lbC9tb2R1bGUuYwppbmRleCA1YTI5Mzk3Li44YjdkODgwIDEwMDY0NAotLS0gYS9rZXJuZWwvbW9kdWxlLmMKKysrIGIva2VybmVsL21vZHVsZS5jCkBAIC0xOTkyLDEyICsxOTkyLDE0IEBACiAJCQkJCSAgRWxmX1NoZHIgKnNlY2hkcnMsCiAJCQkJCSAgdW5zaWduZWQgaW50IHN5bWluZGV4LAogCQkJCQkgIHVuc2lnbmVkIGludCBzdHJpbmRleCwKLQkJCQkJICBjb25zdCBFbGZfSGRyICpoZHIsCisJCQkJCSAgY29uc3QgRWxmX0VoZHIgKmhkciwKIAkJCQkJICBjb25zdCBjaGFyICpzZWNzdHJpbmdzLAogCQkJCQkgIHVuc2lnbmVkIGxvbmcgKnBzdHJvZmZzLAogCQkJCQkgIHVuc2lnbmVkIGxvbmcgKnN0cm1hcCkKIHsKKwlyZXR1cm4gMDsKIH0KKwogc3RhdGljIGlubGluZSB2b2lkIGFkZF9rYWxsc3ltcyhzdHJ1Y3QgbW9kdWxlICptb2QsCiAJCQkJRWxmX1NoZHIgKnNlY2hkcnMsCiAJCQkJdW5zaWduZWQgaW50IHNobnVtLApAQCAtMjA4MSw5ICsyMDgzLDggQEAKIAlzdHJ1Y3QgbW9kdWxlICptb2Q7CiAJbG9uZyBlcnIgPSAwOwogCXZvaWQgKnBlcmNwdSA9IE5VTEwsICpwdHIgPSBOVUxMOyAvKiBTdG9wcyBzcHVyaW91cyBnY2Mgd2FybmluZyAqLwotI2lmZGVmIENPTkZJR19LQUxMU1lNUwogCXVuc2lnbmVkIGxvbmcgc3ltb2Zmcywgc3Ryb2ZmcywgKnN0cm1hcDsKLSNlbmRpZgorCiAJbW1fc2VnbWVudF90IG9sZF9mczsKIAogCURFQlVHUCgibG9hZF9tb2R1bGU6IHVtb2Q9JXAsIGxlbj0lbHUsIHVhcmdzPSVwXG4iLApAQCAtMzA5MSw3ICszMDkyLDYgQEAKIAkJICAgc3RydWN0IG1vZHZlcnNpb25faW5mbyAqdmVyLAogCQkgICBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcCwKIAkJICAgc3RydWN0IGtlcm5lbF9zeW1ib2wgKmtzLAotCQkgICBzdHJ1Y3QgbWFya2VyICptYXJrZXIsCiAJCSAgIHN0cnVjdCB0cmFjZXBvaW50ICp0cCkKIHsKIH0KZGlmZiAtLWdpdCBhL2tlcm5lbC9tdXRleC1kZWJ1Zy5jIGIva2VybmVsL211dGV4LWRlYnVnLmMKaW5kZXggNTBkMDIyZS4uZWM4MTVhOSAxMDA2NDQKLS0tIGEva2VybmVsL211dGV4LWRlYnVnLmMKKysrIGIva2VybmVsL211dGV4LWRlYnVnLmMKQEAgLTE2LDYgKzE2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BvaXNvbi5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9rYWxsc3ltcy5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgpkaWZmIC0tZ2l0IGEva2VybmVsL3BhbmljLmMgYi9rZXJuZWwvcGFuaWMuYwppbmRleCBiY2RlZjI2Li45NmI0NWQwIDEwMDY0NAotLS0gYS9rZXJuZWwvcGFuaWMuYworKysgYi9rZXJuZWwvcGFuaWMuYwpAQCAtOTAsNiArOTAsOCBAQAogCiAJYXRvbWljX25vdGlmaWVyX2NhbGxfY2hhaW4oJnBhbmljX25vdGlmaWVyX2xpc3QsIDAsIGJ1Zik7CiAKKwlidXN0X3NwaW5sb2NrcygwKTsKKwogCWlmICghcGFuaWNfYmxpbmspCiAJCXBhbmljX2JsaW5rID0gbm9fYmxpbms7CiAKQEAgLTEzNiw3ICsxMzgsNiBAQAogCQltZGVsYXkoMSk7CiAJCWkrKzsKIAl9Ci0JYnVzdF9zcGlubG9ja3MoMCk7CiB9CiAKIEVYUE9SVF9TWU1CT0wocGFuaWMpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3BhcmFtcy5jIGIva2VybmVsL3BhcmFtcy5jCmluZGV4IDlkYTU4ZWEuLmQ2NTZjMjcgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wYXJhbXMuYworKysgYi9rZXJuZWwvcGFyYW1zLmMKQEAgLTIxOCwxNSArMjE4LDExIEBACiAJCXJldHVybiAtRU5PU1BDOwogCX0KIAotCWlmIChrcC0+ZmxhZ3MgJiBLUEFSQU1fS01BTExPQ0VEKQotCQlrZnJlZSgqKGNoYXIgKiopa3AtPmFyZyk7Ci0KIAkvKiBUaGlzIGlzIGEgaGFjay4gIFdlIGNhbid0IG5lZWQgdG8gc3RyZHVwIGluIGVhcmx5IGJvb3QsIGFuZCB3ZQogCSAqIGRvbid0IG5lZWQgdG87IHRoaXMgbWFuZ2xlZCBjb21tYW5kbGluZSBpcyBwcmVzZXJ2ZWQuICovCiAJaWYgKHNsYWJfaXNfYXZhaWxhYmxlKCkpIHsKLQkJa3AtPmZsYWdzIHw9IEtQQVJBTV9LTUFMTE9DRUQ7CiAJCSooY2hhciAqKilrcC0+YXJnID0ga3N0cmR1cCh2YWwsIEdGUF9LRVJORUwpOwotCQlpZiAoIWtwLT5hcmcpCisJCWlmICghKihjaGFyICoqKWtwLT5hcmcpCiAJCQlyZXR1cm4gLUVOT01FTTsKIAl9IGVsc2UKIAkJKihjb25zdCBjaGFyICoqKWtwLT5hcmcgPSB2YWw7CkBAIC0zMDQsNiArMzAwLDcgQEAKIAkJICAgICAgIHVuc2lnbmVkIGludCBtaW4sIHVuc2lnbmVkIGludCBtYXgsCiAJCSAgICAgICB2b2lkICplbGVtLCBpbnQgZWxlbXNpemUsCiAJCSAgICAgICBpbnQgKCpzZXQpKGNvbnN0IGNoYXIgKiwgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApLAorCQkgICAgICAgdTE2IGZsYWdzLAogCQkgICAgICAgdW5zaWduZWQgaW50ICpudW0pCiB7CiAJaW50IHJldDsKQEAgLTMxMyw2ICszMTAsNyBAQAogCS8qIEdldCB0aGUgbmFtZSByaWdodCBmb3IgZXJyb3JzLiAqLwogCWtwLm5hbWUgPSBuYW1lOwogCWtwLmFyZyA9IGVsZW07CisJa3AuZmxhZ3MgPSBmbGFnczsKIAogCS8qIE5vIGVxdWFscyBzaWduPyAqLwogCWlmICghdmFsKSB7CkBAIC0zNTgsNyArMzU2LDggQEAKIAl1bnNpZ25lZCBpbnQgdGVtcF9udW07CiAKIAlyZXR1cm4gcGFyYW1fYXJyYXkoa3AtPm5hbWUsIHZhbCwgMSwgYXJyLT5tYXgsIGFyci0+ZWxlbSwKLQkJCSAgIGFyci0+ZWxlbXNpemUsIGFyci0+c2V0LCBhcnItPm51bSA/OiAmdGVtcF9udW0pOworCQkJICAgYXJyLT5lbGVtc2l6ZSwgYXJyLT5zZXQsIGtwLT5mbGFncywKKwkJCSAgIGFyci0+bnVtID86ICZ0ZW1wX251bSk7CiB9CiAKIGludCBwYXJhbV9hcnJheV9nZXQoY2hhciAqYnVmZmVyLCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcCkKQEAgLTYwNSwxMSArNjA0LDcgQEAKIAogdm9pZCBkZXN0cm95X3BhcmFtcyhjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICpwYXJhbXMsIHVuc2lnbmVkIG51bSkKIHsKLQl1bnNpZ25lZCBpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBudW07IGkrKykKLQkJaWYgKHBhcmFtc1tpXS5mbGFncyAmIEtQQVJBTV9LTUFMTE9DRUQpCi0JCQlrZnJlZSgqKGNoYXIgKiopcGFyYW1zW2ldLmFyZyk7CisJLyogRklYTUU6IFRoaXMgc2hvdWxkIGZyZWUga21hbGxvY2VkIGNoYXJwIHBhcmFtZXRlcnMuICBJdCBkb2Vzbid0LiAqLwogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQga2VybmVsX2FkZF9zeXNmc19wYXJhbShjb25zdCBjaGFyICpuYW1lLApkaWZmIC0tZ2l0IGEva2VybmVsL3BlcmZfZXZlbnQuYyBiL2tlcm5lbC9wZXJmX2V2ZW50LmMKaW5kZXggNzZhYzRkYi4uN2YyOTY0MyAxMDA2NDQKLS0tIGEva2VybmVsL3BlcmZfZXZlbnQuYworKysgYi9rZXJuZWwvcGVyZl9ldmVudC5jCkBAIC0yMCw2ICsyMCw3IEBACiAjaW5jbHVkZSA8bGludXgvcGVyY3B1Lmg+CiAjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CiAjaW5jbHVkZSA8bGludXgvdm1zdGF0Lmg+CisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogI2luY2x1ZGUgPGxpbnV4L2hhcmRpcnEuaD4KICNpbmNsdWRlIDxsaW51eC9yY3VsaXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgpAQCAtMTAzMCwxNCArMTAzMSwxMCBAQAogCXVwZGF0ZV9jb250ZXh0X3RpbWUoY3R4KTsKIAogCXBlcmZfZGlzYWJsZSgpOwotCWlmIChjdHgtPm5yX2FjdGl2ZSkgewotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGV2ZW50LCAmY3R4LT5ncm91cF9saXN0LCBncm91cF9lbnRyeSkgewotCQkJaWYgKGV2ZW50ICE9IGV2ZW50LT5ncm91cF9sZWFkZXIpCi0JCQkJZXZlbnRfc2NoZWRfb3V0KGV2ZW50LCBjcHVjdHgsIGN0eCk7Ci0JCQllbHNlCi0JCQkJZ3JvdXBfc2NoZWRfb3V0KGV2ZW50LCBjcHVjdHgsIGN0eCk7Ci0JCX0KLQl9CisJaWYgKGN0eC0+bnJfYWN0aXZlKQorCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGV2ZW50LCAmY3R4LT5ncm91cF9saXN0LCBncm91cF9lbnRyeSkKKwkJCWdyb3VwX3NjaGVkX291dChldmVudCwgY3B1Y3R4LCBjdHgpOworCiAJcGVyZl9lbmFibGUoKTsKICBvdXQ6CiAJc3Bpbl91bmxvY2soJmN0eC0+bG9jayk7CkBAIC0xMjU4LDEyICsxMjU1LDggQEAKIAkJaWYgKGV2ZW50LT5jcHUgIT0gLTEgJiYgZXZlbnQtPmNwdSAhPSBjcHUpCiAJCQljb250aW51ZTsKIAotCQlpZiAoZXZlbnQgIT0gZXZlbnQtPmdyb3VwX2xlYWRlcikKLQkJCWV2ZW50X3NjaGVkX2luKGV2ZW50LCBjcHVjdHgsIGN0eCwgY3B1KTsKLQkJZWxzZSB7Ci0JCQlpZiAoZ3JvdXBfY2FuX2dvX29uKGV2ZW50LCBjcHVjdHgsIDEpKQotCQkJCWdyb3VwX3NjaGVkX2luKGV2ZW50LCBjcHVjdHgsIGN0eCwgY3B1KTsKLQkJfQorCQlpZiAoZ3JvdXBfY2FuX2dvX29uKGV2ZW50LCBjcHVjdHgsIDEpKQorCQkJZ3JvdXBfc2NoZWRfaW4oZXZlbnQsIGNwdWN0eCwgY3R4LCBjcHUpOwogCiAJCS8qCiAJCSAqIElmIHRoaXMgcGlubmVkIGdyb3VwIGhhc24ndCBiZWVuIHNjaGVkdWxlZCwKQEAgLTEyOTEsMTUgKzEyODQsOSBAQAogCQlpZiAoZXZlbnQtPmNwdSAhPSAtMSAmJiBldmVudC0+Y3B1ICE9IGNwdSkKIAkJCWNvbnRpbnVlOwogCi0JCWlmIChldmVudCAhPSBldmVudC0+Z3JvdXBfbGVhZGVyKSB7Ci0JCQlpZiAoZXZlbnRfc2NoZWRfaW4oZXZlbnQsIGNwdWN0eCwgY3R4LCBjcHUpKQorCQlpZiAoZ3JvdXBfY2FuX2dvX29uKGV2ZW50LCBjcHVjdHgsIGNhbl9hZGRfaHcpKQorCQkJaWYgKGdyb3VwX3NjaGVkX2luKGV2ZW50LCBjcHVjdHgsIGN0eCwgY3B1KSkKIAkJCQljYW5fYWRkX2h3ID0gMDsKLQkJfSBlbHNlIHsKLQkJCWlmIChncm91cF9jYW5fZ29fb24oZXZlbnQsIGNwdWN0eCwgY2FuX2FkZF9odykpIHsKLQkJCQlpZiAoZ3JvdXBfc2NoZWRfaW4oZXZlbnQsIGNwdWN0eCwgY3R4LCBjcHUpKQotCQkJCQljYW5fYWRkX2h3ID0gMDsKLQkJCX0KLQkJfQogCX0KIAlwZXJmX2VuYWJsZSgpOwogIG91dDoKQEAgLTEzNjgsNyArMTM1NSw3IEBACiAJdTY0IGludGVycnVwdHMsIGZyZXE7CiAKIAlzcGluX2xvY2soJmN0eC0+bG9jayk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShldmVudCwgJmN0eC0+Z3JvdXBfbGlzdCwgZ3JvdXBfZW50cnkpIHsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShldmVudCwgJmN0eC0+ZXZlbnRfbGlzdCwgZXZlbnRfZW50cnkpIHsKIAkJaWYgKGV2ZW50LT5zdGF0ZSAhPSBQRVJGX0VWRU5UX1NUQVRFX0FDVElWRSkKIAkJCWNvbnRpbnVlOwogCkBAIC0yMTA1LDQ5ICsyMDkyLDMxIEBACiAJcmN1X3JlYWRfdW5sb2NrKCk7CiB9CiAKLXN0YXRpYyBpbnQgcGVyZl9tbWFwX2ZhdWx0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZikKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHBlcmZfZGF0YV9zaXplKHN0cnVjdCBwZXJmX21tYXBfZGF0YSAqZGF0YSkKIHsKLQlzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQgPSB2bWEtPnZtX2ZpbGUtPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3QgcGVyZl9tbWFwX2RhdGEgKmRhdGE7Ci0JaW50IHJldCA9IFZNX0ZBVUxUX1NJR0JVUzsKLQotCWlmICh2bWYtPmZsYWdzICYgRkFVTFRfRkxBR19NS1dSSVRFKSB7Ci0JCWlmICh2bWYtPnBnb2ZmID09IDApCi0JCQlyZXQgPSAwOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCXJjdV9yZWFkX2xvY2soKTsKLQlkYXRhID0gcmN1X2RlcmVmZXJlbmNlKGV2ZW50LT5kYXRhKTsKLQlpZiAoIWRhdGEpCi0JCWdvdG8gdW5sb2NrOwotCi0JaWYgKHZtZi0+cGdvZmYgPT0gMCkgewotCQl2bWYtPnBhZ2UgPSB2aXJ0X3RvX3BhZ2UoZGF0YS0+dXNlcl9wYWdlKTsKLQl9IGVsc2UgewotCQlpbnQgbnIgPSB2bWYtPnBnb2ZmIC0gMTsKLQotCQlpZiAoKHVuc2lnbmVkKW5yID4gZGF0YS0+bnJfcGFnZXMpCi0JCQlnb3RvIHVubG9jazsKLQotCQlpZiAodm1mLT5mbGFncyAmIEZBVUxUX0ZMQUdfV1JJVEUpCi0JCQlnb3RvIHVubG9jazsKLQotCQl2bWYtPnBhZ2UgPSB2aXJ0X3RvX3BhZ2UoZGF0YS0+ZGF0YV9wYWdlc1tucl0pOwotCX0KLQotCWdldF9wYWdlKHZtZi0+cGFnZSk7Ci0Jdm1mLT5wYWdlLT5tYXBwaW5nID0gdm1hLT52bV9maWxlLT5mX21hcHBpbmc7Ci0Jdm1mLT5wYWdlLT5pbmRleCAgID0gdm1mLT5wZ29mZjsKLQotCXJldCA9IDA7Ci11bmxvY2s6Ci0JcmN1X3JlYWRfdW5sb2NrKCk7Ci0KLQlyZXR1cm4gcmV0OworCXJldHVybiBkYXRhLT5ucl9wYWdlcyA8PCAoUEFHRV9TSElGVCArIGRhdGEtPmRhdGFfb3JkZXIpOwogfQogCi1zdGF0aWMgaW50IHBlcmZfbW1hcF9kYXRhX2FsbG9jKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgaW50IG5yX3BhZ2VzKQorI2lmbmRlZiBDT05GSUdfUEVSRl9VU0VfVk1BTExPQworCisvKgorICogQmFjayBwZXJmX21tYXAoKSB3aXRoIHJlZ3VsYXIgR0ZQX0tFUk5FTC0wIHBhZ2VzLgorICovCisKK3N0YXRpYyBzdHJ1Y3QgcGFnZSAqCitwZXJmX21tYXBfdG9fcGFnZShzdHJ1Y3QgcGVyZl9tbWFwX2RhdGEgKmRhdGEsIHVuc2lnbmVkIGxvbmcgcGdvZmYpCit7CisJaWYgKHBnb2ZmID4gZGF0YS0+bnJfcGFnZXMpCisJCXJldHVybiBOVUxMOworCisJaWYgKHBnb2ZmID09IDApCisJCXJldHVybiB2aXJ0X3RvX3BhZ2UoZGF0YS0+dXNlcl9wYWdlKTsKKworCXJldHVybiB2aXJ0X3RvX3BhZ2UoZGF0YS0+ZGF0YV9wYWdlc1twZ29mZiAtIDFdKTsKK30KKworc3RhdGljIHN0cnVjdCBwZXJmX21tYXBfZGF0YSAqCitwZXJmX21tYXBfZGF0YV9hbGxvYyhzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIGludCBucl9wYWdlcykKIHsKIAlzdHJ1Y3QgcGVyZl9tbWFwX2RhdGEgKmRhdGE7CiAJdW5zaWduZWQgbG9uZyBzaXplOwpAQCAtMjE3MiwxOSArMjE0MSwxMCBAQAogCQkJZ290byBmYWlsX2RhdGFfcGFnZXM7CiAJfQogCisJZGF0YS0+ZGF0YV9vcmRlciA9IDA7CiAJZGF0YS0+bnJfcGFnZXMgPSBucl9wYWdlczsKLQlhdG9taWNfc2V0KCZkYXRhLT5sb2NrLCAtMSk7CiAKLQlpZiAoZXZlbnQtPmF0dHIud2F0ZXJtYXJrKSB7Ci0JCWRhdGEtPndhdGVybWFyayA9IG1pbl90KGxvbmcsIFBBR0VfU0laRSAqIG5yX3BhZ2VzLAotCQkJCSAgICAgIGV2ZW50LT5hdHRyLndha2V1cF93YXRlcm1hcmspOwotCX0KLQlpZiAoIWRhdGEtPndhdGVybWFyaykKLQkJZGF0YS0+d2F0ZXJtYXJrID0gbWF4KFBBR0VfU0laRSwgUEFHRV9TSVpFICogbnJfcGFnZXMgLyA0KTsKLQotCXJjdV9hc3NpZ25fcG9pbnRlcihldmVudC0+ZGF0YSwgZGF0YSk7Ci0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gZGF0YTsKIAogZmFpbF9kYXRhX3BhZ2VzOgogCWZvciAoaS0tOyBpID49IDA7IGktLSkKQEAgLTIxOTYsNyArMjE1Niw3IEBACiAJa2ZyZWUoZGF0YSk7CiAKIGZhaWw6Ci0JcmV0dXJuIC1FTk9NRU07CisJcmV0dXJuIE5VTEw7CiB9CiAKIHN0YXRpYyB2b2lkIHBlcmZfbW1hcF9mcmVlX3BhZ2UodW5zaWduZWQgbG9uZyBhZGRyKQpAQCAtMjIwNywyOCArMjE2NywxNjkgQEAKIAlfX2ZyZWVfcGFnZShwYWdlKTsKIH0KIAotc3RhdGljIHZvaWQgX19wZXJmX21tYXBfZGF0YV9mcmVlKHN0cnVjdCByY3VfaGVhZCAqcmN1X2hlYWQpCitzdGF0aWMgdm9pZCBwZXJmX21tYXBfZGF0YV9mcmVlKHN0cnVjdCBwZXJmX21tYXBfZGF0YSAqZGF0YSkKIHsKLQlzdHJ1Y3QgcGVyZl9tbWFwX2RhdGEgKmRhdGE7CiAJaW50IGk7CiAKLQlkYXRhID0gY29udGFpbmVyX29mKHJjdV9oZWFkLCBzdHJ1Y3QgcGVyZl9tbWFwX2RhdGEsIHJjdV9oZWFkKTsKLQogCXBlcmZfbW1hcF9mcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpZGF0YS0+dXNlcl9wYWdlKTsKIAlmb3IgKGkgPSAwOyBpIDwgZGF0YS0+bnJfcGFnZXM7IGkrKykKIAkJcGVyZl9tbWFwX2ZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylkYXRhLT5kYXRhX3BhZ2VzW2ldKTsKK30KIAorI2Vsc2UKKworLyoKKyAqIEJhY2sgcGVyZl9tbWFwKCkgd2l0aCB2bWFsbG9jIG1lbW9yeS4KKyAqCisgKiBSZXF1aXJlZCBmb3IgYXJjaGl0ZWN0dXJlcyB0aGF0IGhhdmUgZC1jYWNoZSBhbGlhc2luZyBpc3N1ZXMuCisgKi8KKworc3RhdGljIHN0cnVjdCBwYWdlICoKK3BlcmZfbW1hcF90b19wYWdlKHN0cnVjdCBwZXJmX21tYXBfZGF0YSAqZGF0YSwgdW5zaWduZWQgbG9uZyBwZ29mZikKK3sKKwlpZiAocGdvZmYgPiAoMVVMIDw8IGRhdGEtPmRhdGFfb3JkZXIpKQorCQlyZXR1cm4gTlVMTDsKKworCXJldHVybiB2bWFsbG9jX3RvX3BhZ2UoKHZvaWQgKilkYXRhLT51c2VyX3BhZ2UgKyBwZ29mZiAqIFBBR0VfU0laRSk7Cit9CisKK3N0YXRpYyB2b2lkIHBlcmZfbW1hcF91bm1hcmtfcGFnZSh2b2lkICphZGRyKQoreworCXN0cnVjdCBwYWdlICpwYWdlID0gdm1hbGxvY190b19wYWdlKGFkZHIpOworCisJcGFnZS0+bWFwcGluZyA9IE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIHBlcmZfbW1hcF9kYXRhX2ZyZWVfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IHBlcmZfbW1hcF9kYXRhICpkYXRhOworCXZvaWQgKmJhc2U7CisJaW50IGksIG5yOworCisJZGF0YSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcGVyZl9tbWFwX2RhdGEsIHdvcmspOworCW5yID0gMSA8PCBkYXRhLT5kYXRhX29yZGVyOworCisJYmFzZSA9IGRhdGEtPnVzZXJfcGFnZTsKKwlmb3IgKGkgPSAwOyBpIDwgbnIgKyAxOyBpKyspCisJCXBlcmZfbW1hcF91bm1hcmtfcGFnZShiYXNlICsgKGkgKiBQQUdFX1NJWkUpKTsKKworCXZmcmVlKGJhc2UpOworfQorCitzdGF0aWMgdm9pZCBwZXJmX21tYXBfZGF0YV9mcmVlKHN0cnVjdCBwZXJmX21tYXBfZGF0YSAqZGF0YSkKK3sKKwlzY2hlZHVsZV93b3JrKCZkYXRhLT53b3JrKTsKK30KKworc3RhdGljIHN0cnVjdCBwZXJmX21tYXBfZGF0YSAqCitwZXJmX21tYXBfZGF0YV9hbGxvYyhzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIGludCBucl9wYWdlcykKK3sKKwlzdHJ1Y3QgcGVyZl9tbWFwX2RhdGEgKmRhdGE7CisJdW5zaWduZWQgbG9uZyBzaXplOworCXZvaWQgKmFsbF9idWY7CisKKwlXQVJOX09OKGF0b21pY19yZWFkKCZldmVudC0+bW1hcF9jb3VudCkpOworCisJc2l6ZSA9IHNpemVvZihzdHJ1Y3QgcGVyZl9tbWFwX2RhdGEpOworCXNpemUgKz0gc2l6ZW9mKHZvaWQgKik7CisKKwlkYXRhID0ga3phbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRhdGEpCisJCWdvdG8gZmFpbDsKKworCUlOSVRfV09SSygmZGF0YS0+d29yaywgcGVyZl9tbWFwX2RhdGFfZnJlZV93b3JrKTsKKworCWFsbF9idWYgPSB2bWFsbG9jX3VzZXIoKG5yX3BhZ2VzICsgMSkgKiBQQUdFX1NJWkUpOworCWlmICghYWxsX2J1ZikKKwkJZ290byBmYWlsX2FsbF9idWY7CisKKwlkYXRhLT51c2VyX3BhZ2UgPSBhbGxfYnVmOworCWRhdGEtPmRhdGFfcGFnZXNbMF0gPSBhbGxfYnVmICsgUEFHRV9TSVpFOworCWRhdGEtPmRhdGFfb3JkZXIgPSBpbG9nMihucl9wYWdlcyk7CisJZGF0YS0+bnJfcGFnZXMgPSAxOworCisJcmV0dXJuIGRhdGE7CisKK2ZhaWxfYWxsX2J1ZjoKKwlrZnJlZShkYXRhKTsKKworZmFpbDoKKwlyZXR1cm4gTlVMTDsKK30KKworI2VuZGlmCisKK3N0YXRpYyBpbnQgcGVyZl9tbWFwX2ZhdWx0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZikKK3sKKwlzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQgPSB2bWEtPnZtX2ZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgcGVyZl9tbWFwX2RhdGEgKmRhdGE7CisJaW50IHJldCA9IFZNX0ZBVUxUX1NJR0JVUzsKKworCWlmICh2bWYtPmZsYWdzICYgRkFVTFRfRkxBR19NS1dSSVRFKSB7CisJCWlmICh2bWYtPnBnb2ZmID09IDApCisJCQlyZXQgPSAwOworCQlyZXR1cm4gcmV0OworCX0KKworCXJjdV9yZWFkX2xvY2soKTsKKwlkYXRhID0gcmN1X2RlcmVmZXJlbmNlKGV2ZW50LT5kYXRhKTsKKwlpZiAoIWRhdGEpCisJCWdvdG8gdW5sb2NrOworCisJaWYgKHZtZi0+cGdvZmYgJiYgKHZtZi0+ZmxhZ3MgJiBGQVVMVF9GTEFHX1dSSVRFKSkKKwkJZ290byB1bmxvY2s7CisKKwl2bWYtPnBhZ2UgPSBwZXJmX21tYXBfdG9fcGFnZShkYXRhLCB2bWYtPnBnb2ZmKTsKKwlpZiAoIXZtZi0+cGFnZSkKKwkJZ290byB1bmxvY2s7CisKKwlnZXRfcGFnZSh2bWYtPnBhZ2UpOworCXZtZi0+cGFnZS0+bWFwcGluZyA9IHZtYS0+dm1fZmlsZS0+Zl9tYXBwaW5nOworCXZtZi0+cGFnZS0+aW5kZXggICA9IHZtZi0+cGdvZmY7CisKKwlyZXQgPSAwOwordW5sb2NrOgorCXJjdV9yZWFkX3VubG9jaygpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQKK3BlcmZfbW1hcF9kYXRhX2luaXQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCBzdHJ1Y3QgcGVyZl9tbWFwX2RhdGEgKmRhdGEpCit7CisJbG9uZyBtYXhfc2l6ZSA9IHBlcmZfZGF0YV9zaXplKGRhdGEpOworCisJYXRvbWljX3NldCgmZGF0YS0+bG9jaywgLTEpOworCisJaWYgKGV2ZW50LT5hdHRyLndhdGVybWFyaykgeworCQlkYXRhLT53YXRlcm1hcmsgPSBtaW5fdChsb25nLCBtYXhfc2l6ZSwKKwkJCQkJZXZlbnQtPmF0dHIud2FrZXVwX3dhdGVybWFyayk7CisJfQorCisJaWYgKCFkYXRhLT53YXRlcm1hcmspCisJCWRhdGEtPndhdGVybWFyayA9IG1heF90KGxvbmcsIFBBR0VfU0laRSwgbWF4X3NpemUgLyAyKTsKKworCisJcmN1X2Fzc2lnbl9wb2ludGVyKGV2ZW50LT5kYXRhLCBkYXRhKTsKK30KKworc3RhdGljIHZvaWQgcGVyZl9tbWFwX2RhdGFfZnJlZV9yY3Uoc3RydWN0IHJjdV9oZWFkICpyY3VfaGVhZCkKK3sKKwlzdHJ1Y3QgcGVyZl9tbWFwX2RhdGEgKmRhdGE7CisKKwlkYXRhID0gY29udGFpbmVyX29mKHJjdV9oZWFkLCBzdHJ1Y3QgcGVyZl9tbWFwX2RhdGEsIHJjdV9oZWFkKTsKKwlwZXJmX21tYXBfZGF0YV9mcmVlKGRhdGEpOwogCWtmcmVlKGRhdGEpOwogfQogCi1zdGF0aWMgdm9pZCBwZXJmX21tYXBfZGF0YV9mcmVlKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKK3N0YXRpYyB2b2lkIHBlcmZfbW1hcF9kYXRhX3JlbGVhc2Uoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQogewogCXN0cnVjdCBwZXJmX21tYXBfZGF0YSAqZGF0YSA9IGV2ZW50LT5kYXRhOwogCiAJV0FSTl9PTihhdG9taWNfcmVhZCgmZXZlbnQtPm1tYXBfY291bnQpKTsKIAogCXJjdV9hc3NpZ25fcG9pbnRlcihldmVudC0+ZGF0YSwgTlVMTCk7Ci0JY2FsbF9yY3UoJmRhdGEtPnJjdV9oZWFkLCBfX3BlcmZfbW1hcF9kYXRhX2ZyZWUpOworCWNhbGxfcmN1KCZkYXRhLT5yY3VfaGVhZCwgcGVyZl9tbWFwX2RhdGFfZnJlZV9yY3UpOwogfQogCiBzdGF0aWMgdm9pZCBwZXJmX21tYXBfb3BlbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKQEAgLTIyNDQsMTYgKzIzNDUsMTcgQEAKIAogCVdBUk5fT05fT05DRShldmVudC0+Y3R4LT5wYXJlbnRfY3R4KTsKIAlpZiAoYXRvbWljX2RlY19hbmRfbXV0ZXhfbG9jaygmZXZlbnQtPm1tYXBfY291bnQsICZldmVudC0+bW1hcF9tdXRleCkpIHsKKwkJdW5zaWduZWQgbG9uZyBzaXplID0gcGVyZl9kYXRhX3NpemUoZXZlbnQtPmRhdGEpOwogCQlzdHJ1Y3QgdXNlcl9zdHJ1Y3QgKnVzZXIgPSBjdXJyZW50X3VzZXIoKTsKIAotCQlhdG9taWNfbG9uZ19zdWIoZXZlbnQtPmRhdGEtPm5yX3BhZ2VzICsgMSwgJnVzZXItPmxvY2tlZF92bSk7CisJCWF0b21pY19sb25nX3N1Yigoc2l6ZSA+PiBQQUdFX1NISUZUKSArIDEsICZ1c2VyLT5sb2NrZWRfdm0pOwogCQl2bWEtPnZtX21tLT5sb2NrZWRfdm0gLT0gZXZlbnQtPmRhdGEtPm5yX2xvY2tlZDsKLQkJcGVyZl9tbWFwX2RhdGFfZnJlZShldmVudCk7CisJCXBlcmZfbW1hcF9kYXRhX3JlbGVhc2UoZXZlbnQpOwogCQltdXRleF91bmxvY2soJmV2ZW50LT5tbWFwX211dGV4KTsKIAl9CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgcGVyZl9tbWFwX3Ztb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBwZXJmX21tYXBfdm1vcHMgPSB7CiAJLm9wZW4JCT0gcGVyZl9tbWFwX29wZW4sCiAJLmNsb3NlCQk9IHBlcmZfbW1hcF9jbG9zZSwKIAkuZmF1bHQJCT0gcGVyZl9tbWFwX2ZhdWx0LApAQCAtMjI2Niw2ICsyMzY4LDcgQEAKIAl1bnNpZ25lZCBsb25nIHVzZXJfbG9ja2VkLCB1c2VyX2xvY2tfbGltaXQ7CiAJc3RydWN0IHVzZXJfc3RydWN0ICp1c2VyID0gY3VycmVudF91c2VyKCk7CiAJdW5zaWduZWQgbG9uZyBsb2NrZWQsIGxvY2tfbGltaXQ7CisJc3RydWN0IHBlcmZfbW1hcF9kYXRhICpkYXRhOwogCXVuc2lnbmVkIGxvbmcgdm1hX3NpemU7CiAJdW5zaWduZWQgbG9uZyBucl9wYWdlczsKIAlsb25nIHVzZXJfZXh0cmEsIGV4dHJhOwpAQCAtMjMyOCwxMCArMjQzMSwxNSBAQAogCX0KIAogCVdBUk5fT04oZXZlbnQtPmRhdGEpOwotCXJldCA9IHBlcmZfbW1hcF9kYXRhX2FsbG9jKGV2ZW50LCBucl9wYWdlcyk7Ci0JaWYgKHJldCkKKworCWRhdGEgPSBwZXJmX21tYXBfZGF0YV9hbGxvYyhldmVudCwgbnJfcGFnZXMpOworCXJldCA9IC1FTk9NRU07CisJaWYgKCFkYXRhKQogCQlnb3RvIHVubG9jazsKIAorCXJldCA9IDA7CisJcGVyZl9tbWFwX2RhdGFfaW5pdChldmVudCwgZGF0YSk7CisKIAlhdG9taWNfc2V0KCZldmVudC0+bW1hcF9jb3VudCwgMSk7CiAJYXRvbWljX2xvbmdfYWRkKHVzZXJfZXh0cmEsICZ1c2VyLT5sb2NrZWRfdm0pOwogCXZtYS0+dm1fbW0tPmxvY2tlZF92bSArPSBleHRyYTsKQEAgLTI1MTksNyArMjYyNyw3IEBACiAJaWYgKCFkYXRhLT53cml0YWJsZSkKIAkJcmV0dXJuIHRydWU7CiAKLQltYXNrID0gKGRhdGEtPm5yX3BhZ2VzIDw8IFBBR0VfU0hJRlQpIC0gMTsKKwltYXNrID0gcGVyZl9kYXRhX3NpemUoZGF0YSkgLSAxOwogCiAJb2Zmc2V0ID0gKG9mZnNldCAtIHRhaWwpICYgbWFzazsKIAloZWFkICAgPSAoaGVhZCAgIC0gdGFpbCkgJiBtYXNrOwpAQCAtMjYyNCw3ICsyNzMyLDcgQEAKIAkJICAgICAgY29uc3Qgdm9pZCAqYnVmLCB1bnNpZ25lZCBpbnQgbGVuKQogewogCXVuc2lnbmVkIGludCBwYWdlc19tYXNrOwotCXVuc2lnbmVkIGludCBvZmZzZXQ7CisJdW5zaWduZWQgbG9uZyBvZmZzZXQ7CiAJdW5zaWduZWQgaW50IHNpemU7CiAJdm9pZCAqKnBhZ2VzOwogCkBAIC0yNjMzLDEyICsyNzQxLDE0IEBACiAJcGFnZXMJCT0gaGFuZGxlLT5kYXRhLT5kYXRhX3BhZ2VzOwogCiAJZG8gewotCQl1bnNpZ25lZCBpbnQgcGFnZV9vZmZzZXQ7CisJCXVuc2lnbmVkIGxvbmcgcGFnZV9vZmZzZXQ7CisJCXVuc2lnbmVkIGxvbmcgcGFnZV9zaXplOwogCQlpbnQgbnI7CiAKIAkJbnIJICAgID0gKG9mZnNldCA+PiBQQUdFX1NISUZUKSAmIHBhZ2VzX21hc2s7Ci0JCXBhZ2Vfb2Zmc2V0ID0gb2Zmc2V0ICYgKFBBR0VfU0laRSAtIDEpOwotCQlzaXplCSAgICA9IG1pbl90KHVuc2lnbmVkIGludCwgUEFHRV9TSVpFIC0gcGFnZV9vZmZzZXQsIGxlbik7CisJCXBhZ2Vfc2l6ZSAgID0gMVVMIDw8IChoYW5kbGUtPmRhdGEtPmRhdGFfb3JkZXIgKyBQQUdFX1NISUZUKTsKKwkJcGFnZV9vZmZzZXQgPSBvZmZzZXQgJiAocGFnZV9zaXplIC0gMSk7CisJCXNpemUJICAgID0gbWluX3QodW5zaWduZWQgaW50LCBwYWdlX3NpemUgLSBwYWdlX29mZnNldCwgbGVuKTsKIAogCQltZW1jcHkocGFnZXNbbnJdICsgcGFnZV9vZmZzZXQsIGJ1Ziwgc2l6ZSk7CiAKQEAgLTM4NDksOCArMzk1OSw5IEBACiAJCXJlZ3MgPSB0YXNrX3B0X3JlZ3MoY3VycmVudCk7CiAKIAlpZiAocmVncykgewotCQlpZiAocGVyZl9ldmVudF9vdmVyZmxvdyhldmVudCwgMCwgJmRhdGEsIHJlZ3MpKQotCQkJcmV0ID0gSFJUSU1FUl9OT1JFU1RBUlQ7CisJCWlmICghKGV2ZW50LT5hdHRyLmV4Y2x1ZGVfaWRsZSAmJiBjdXJyZW50LT5waWQgPT0gMCkpCisJCQlpZiAocGVyZl9ldmVudF9vdmVyZmxvdyhldmVudCwgMCwgJmRhdGEsIHJlZ3MpKQorCQkJCXJldCA9IEhSVElNRVJfTk9SRVNUQVJUOwogCX0KIAogCXBlcmlvZCA9IG1heF90KHU2NCwgMTAwMDAsIGV2ZW50LT5ody5zYW1wbGVfcGVyaW9kKTsKQEAgLTM4NTksNiArMzk3MCw0MiBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyB2b2lkIHBlcmZfc3dldmVudF9zdGFydF9ocnRpbWVyKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKK3sKKwlzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjID0gJmV2ZW50LT5odzsKKworCWhydGltZXJfaW5pdCgmaHdjLT5ocnRpbWVyLCBDTE9DS19NT05PVE9OSUMsIEhSVElNRVJfTU9ERV9SRUwpOworCWh3Yy0+aHJ0aW1lci5mdW5jdGlvbiA9IHBlcmZfc3dldmVudF9ocnRpbWVyOworCWlmIChod2MtPnNhbXBsZV9wZXJpb2QpIHsKKwkJdTY0IHBlcmlvZDsKKworCQlpZiAoaHdjLT5yZW1haW5pbmcpIHsKKwkJCWlmIChod2MtPnJlbWFpbmluZyA8IDApCisJCQkJcGVyaW9kID0gMTAwMDA7CisJCQllbHNlCisJCQkJcGVyaW9kID0gaHdjLT5yZW1haW5pbmc7CisJCQlod2MtPnJlbWFpbmluZyA9IDA7CisJCX0gZWxzZSB7CisJCQlwZXJpb2QgPSBtYXhfdCh1NjQsIDEwMDAwLCBod2MtPnNhbXBsZV9wZXJpb2QpOworCQl9CisJCV9faHJ0aW1lcl9zdGFydF9yYW5nZV9ucygmaHdjLT5ocnRpbWVyLAorCQkJCW5zX3RvX2t0aW1lKHBlcmlvZCksIDAsCisJCQkJSFJUSU1FUl9NT0RFX1JFTCwgMCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBwZXJmX3N3ZXZlbnRfY2FuY2VsX2hydGltZXIoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQoreworCXN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MgPSAmZXZlbnQtPmh3OworCisJaWYgKGh3Yy0+c2FtcGxlX3BlcmlvZCkgeworCQlrdGltZV90IHJlbWFpbmluZyA9IGhydGltZXJfZ2V0X3JlbWFpbmluZygmaHdjLT5ocnRpbWVyKTsKKwkJaHdjLT5yZW1haW5pbmcgPSBrdGltZV90b19ucyhyZW1haW5pbmcpOworCisJCWhydGltZXJfY2FuY2VsKCZod2MtPmhydGltZXIpOworCX0KK30KKwogLyoKICAqIFNvZnR3YXJlIGV2ZW50OiBjcHUgd2FsbCB0aW1lIGNsb2NrCiAgKi8KQEAgLTM4ODEsMjIgKzQwMjgsMTQgQEAKIAlpbnQgY3B1ID0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKTsKIAogCWF0b21pYzY0X3NldCgmaHdjLT5wcmV2X2NvdW50LCBjcHVfY2xvY2soY3B1KSk7Ci0JaHJ0aW1lcl9pbml0KCZod2MtPmhydGltZXIsIENMT0NLX01PTk9UT05JQywgSFJUSU1FUl9NT0RFX1JFTCk7Ci0JaHdjLT5ocnRpbWVyLmZ1bmN0aW9uID0gcGVyZl9zd2V2ZW50X2hydGltZXI7Ci0JaWYgKGh3Yy0+c2FtcGxlX3BlcmlvZCkgewotCQl1NjQgcGVyaW9kID0gbWF4X3QodTY0LCAxMDAwMCwgaHdjLT5zYW1wbGVfcGVyaW9kKTsKLQkJX19ocnRpbWVyX3N0YXJ0X3JhbmdlX25zKCZod2MtPmhydGltZXIsCi0JCQkJbnNfdG9fa3RpbWUocGVyaW9kKSwgMCwKLQkJCQlIUlRJTUVSX01PREVfUkVMLCAwKTsKLQl9CisJcGVyZl9zd2V2ZW50X3N0YXJ0X2hydGltZXIoZXZlbnQpOwogCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIGNwdV9jbG9ja19wZXJmX2V2ZW50X2Rpc2FibGUoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQogewotCWlmIChldmVudC0+aHcuc2FtcGxlX3BlcmlvZCkKLQkJaHJ0aW1lcl9jYW5jZWwoJmV2ZW50LT5ody5ocnRpbWVyKTsKKwlwZXJmX3N3ZXZlbnRfY2FuY2VsX2hydGltZXIoZXZlbnQpOwogCWNwdV9jbG9ja19wZXJmX2V2ZW50X3VwZGF0ZShldmVudCk7CiB9CiAKQEAgLTM5MzMsMjIgKzQwNzIsMTUgQEAKIAlub3cgPSBldmVudC0+Y3R4LT50aW1lOwogCiAJYXRvbWljNjRfc2V0KCZod2MtPnByZXZfY291bnQsIG5vdyk7Ci0JaHJ0aW1lcl9pbml0KCZod2MtPmhydGltZXIsIENMT0NLX01PTk9UT05JQywgSFJUSU1FUl9NT0RFX1JFTCk7Ci0JaHdjLT5ocnRpbWVyLmZ1bmN0aW9uID0gcGVyZl9zd2V2ZW50X2hydGltZXI7Ci0JaWYgKGh3Yy0+c2FtcGxlX3BlcmlvZCkgewotCQl1NjQgcGVyaW9kID0gbWF4X3QodTY0LCAxMDAwMCwgaHdjLT5zYW1wbGVfcGVyaW9kKTsKLQkJX19ocnRpbWVyX3N0YXJ0X3JhbmdlX25zKCZod2MtPmhydGltZXIsCi0JCQkJbnNfdG9fa3RpbWUocGVyaW9kKSwgMCwKLQkJCQlIUlRJTUVSX01PREVfUkVMLCAwKTsKLQl9CisKKwlwZXJmX3N3ZXZlbnRfc3RhcnRfaHJ0aW1lcihldmVudCk7CiAKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgdGFza19jbG9ja19wZXJmX2V2ZW50X2Rpc2FibGUoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQogewotCWlmIChldmVudC0+aHcuc2FtcGxlX3BlcmlvZCkKLQkJaHJ0aW1lcl9jYW5jZWwoJmV2ZW50LT5ody5ocnRpbWVyKTsKKwlwZXJmX3N3ZXZlbnRfY2FuY2VsX2hydGltZXIoZXZlbnQpOwogCXRhc2tfY2xvY2tfcGVyZl9ldmVudF91cGRhdGUoZXZlbnQsIGV2ZW50LT5jdHgtPnRpbWUpOwogCiB9CkBAIC00NzgxLDkgKzQ5MTMsNyBAQAogCSAqIFdlIGRvbnQgaGF2ZSB0byBkaXNhYmxlIE5NSXMgLSB3ZSBhcmUgb25seSBsb29raW5nIGF0CiAJICogdGhlIGxpc3QsIG5vdCBtYW5pcHVsYXRpbmcgaXQ6CiAJICovCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoZXZlbnQsICZwYXJlbnRfY3R4LT5ldmVudF9saXN0LCBldmVudF9lbnRyeSkgewotCQlpZiAoZXZlbnQgIT0gZXZlbnQtPmdyb3VwX2xlYWRlcikKLQkJCWNvbnRpbnVlOworCWxpc3RfZm9yX2VhY2hfZW50cnkoZXZlbnQsICZwYXJlbnRfY3R4LT5ncm91cF9saXN0LCBncm91cF9lbnRyeSkgewogCiAJCWlmICghZXZlbnQtPmF0dHIuaW5oZXJpdCkgewogCQkJaW5oZXJpdGVkX2FsbCA9IDA7CmRpZmYgLS1naXQgYS9rZXJuZWwvcG93ZXIvc3VzcGVuZF90ZXN0LmMgYi9rZXJuZWwvcG93ZXIvc3VzcGVuZF90ZXN0LmMKaW5kZXggMTdkOGJiMS4uMjU1OTZlNCAxMDA2NDQKLS0tIGEva2VybmVsL3Bvd2VyL3N1c3BlbmRfdGVzdC5jCisrKyBiL2tlcm5lbC9wb3dlci9zdXNwZW5kX3Rlc3QuYwpAQCAtMTksNyArMTksNyBAQAogICogVGhlIHRpbWUgaXQgdGFrZXMgaXMgc3lzdGVtLXNwZWNpZmljIHRob3VnaCwgc28gd2hlbiB3ZSB0ZXN0IHRoaXMKICAqIGR1cmluZyBzeXN0ZW0gYm9vdHVwIHdlIGFsbG93IGEgTE9UIG9mIHRpbWUuCiAgKi8KLSNkZWZpbmUgVEVTVF9TVVNQRU5EX1NFQ09ORFMJNQorI2RlZmluZSBURVNUX1NVU1BFTkRfU0VDT05EUwkxMAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBzdXNwZW5kX3Rlc3Rfc3RhcnRfdGltZTsKIApAQCAtNDksNyArNDksOCBAQAogCSAqIGhhcyBzb21lIHBlcmZvcm1hbmNlIGlzc3Vlcy4gIFRoZSBzdGFjayBkdW1wIG9mIGEgV0FSTl9PTgogCSAqIGlzIG1vcmUgbGlrZWx5IHRvIGdldCB0aGUgcmlnaHQgYXR0ZW50aW9uIHRoYW4gYSBwcmludGsuLi4KIAkgKi8KLQlXQVJOKG1zZWMgPiAoVEVTVF9TVVNQRU5EX1NFQ09ORFMgKiAxMDAwKSwgIkNvbXBvbmVudDogJXNcbiIsIGxhYmVsKTsKKwlXQVJOKG1zZWMgPiAoVEVTVF9TVVNQRU5EX1NFQ09ORFMgKiAxMDAwKSwKKwkgICAgICJDb21wb25lbnQ6ICVzLCB0aW1lOiAldVxuIiwgbGFiZWwsIG1zZWMpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEva2VybmVsL3JjdXBkYXRlLmMgYi9rZXJuZWwvcmN1cGRhdGUuYwppbmRleCAzN2FjNDU0Li40MDAxODMzIDEwMDY0NAotLS0gYS9rZXJuZWwvcmN1cGRhdGUuYworKysgYi9rZXJuZWwvcmN1cGRhdGUuYwpAQCAtNDYsMjIgKzQ2LDE1IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsX3N0YXQuaD4KIAotZW51bSByY3VfYmFycmllciB7Ci0JUkNVX0JBUlJJRVJfU1RELAotCVJDVV9CQVJSSUVSX0JILAotCVJDVV9CQVJSSUVSX1NDSEVELAotfTsKKyNpZmRlZiBDT05GSUdfREVCVUdfTE9DS19BTExPQworc3RhdGljIHN0cnVjdCBsb2NrX2NsYXNzX2tleSByY3VfbG9ja19rZXk7CitzdHJ1Y3QgbG9ja2RlcF9tYXAgcmN1X2xvY2tfbWFwID0KKwlTVEFUSUNfTE9DS0RFUF9NQVBfSU5JVCgicmN1X3JlYWRfbG9jayIsICZyY3VfbG9ja19rZXkpOworRVhQT1JUX1NZTUJPTF9HUEwocmN1X2xvY2tfbWFwKTsKKyNlbmRpZgogCi1zdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHJjdV9oZWFkLCByY3VfYmFycmllcl9oZWFkKSA9IHtOVUxMfTsKLXN0YXRpYyBhdG9taWNfdCByY3VfYmFycmllcl9jcHVfY291bnQ7Ci1zdGF0aWMgREVGSU5FX01VVEVYKHJjdV9iYXJyaWVyX211dGV4KTsKLXN0YXRpYyBzdHJ1Y3QgY29tcGxldGlvbiByY3VfYmFycmllcl9jb21wbGV0aW9uOwogaW50IHJjdV9zY2hlZHVsZXJfYWN0aXZlIF9fcmVhZF9tb3N0bHk7CiAKLXN0YXRpYyBhdG9taWNfdCByY3VfbWlncmF0ZV90eXBlX2NvdW50ID0gQVRPTUlDX0lOSVQoMCk7Ci1zdGF0aWMgc3RydWN0IHJjdV9oZWFkIHJjdV9taWdyYXRlX2hlYWRbM107Ci1zdGF0aWMgREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQocmN1X21pZ3JhdGVfd3EpOwotCiAvKgogICogQXdha2VuIHRoZSBjb3JyZXNwb25kaW5nIHN5bmNocm9uaXplX3JjdSgpIGluc3RhbmNlIG5vdyB0aGF0IGEKICAqIGdyYWNlIHBlcmlvZCBoYXMgZWxhcHNlZC4KQEAgLTE2NCwxMjkgKzE1NywxMCBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoc3luY2hyb25pemVfcmN1X2JoKTsKIAotc3RhdGljIHZvaWQgcmN1X2JhcnJpZXJfY2FsbGJhY2soc3RydWN0IHJjdV9oZWFkICpub3R1c2VkKQotewotCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZyY3VfYmFycmllcl9jcHVfY291bnQpKQotCQljb21wbGV0ZSgmcmN1X2JhcnJpZXJfY29tcGxldGlvbik7Ci19Ci0KLS8qCi0gKiBDYWxsZWQgd2l0aCBwcmVlbXB0aW9uIGRpc2FibGVkLCBhbmQgZnJvbSBjcm9zcy1jcHUgSVJRIGNvbnRleHQuCi0gKi8KLXN0YXRpYyB2b2lkIHJjdV9iYXJyaWVyX2Z1bmModm9pZCAqdHlwZSkKLXsKLQlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwotCXN0cnVjdCByY3VfaGVhZCAqaGVhZCA9ICZwZXJfY3B1KHJjdV9iYXJyaWVyX2hlYWQsIGNwdSk7Ci0KLQlhdG9taWNfaW5jKCZyY3VfYmFycmllcl9jcHVfY291bnQpOwotCXN3aXRjaCAoKGVudW0gcmN1X2JhcnJpZXIpdHlwZSkgewotCWNhc2UgUkNVX0JBUlJJRVJfU1REOgotCQljYWxsX3JjdShoZWFkLCByY3VfYmFycmllcl9jYWxsYmFjayk7Ci0JCWJyZWFrOwotCWNhc2UgUkNVX0JBUlJJRVJfQkg6Ci0JCWNhbGxfcmN1X2JoKGhlYWQsIHJjdV9iYXJyaWVyX2NhbGxiYWNrKTsKLQkJYnJlYWs7Ci0JY2FzZSBSQ1VfQkFSUklFUl9TQ0hFRDoKLQkJY2FsbF9yY3Vfc2NoZWQoaGVhZCwgcmN1X2JhcnJpZXJfY2FsbGJhY2spOwotCQlicmVhazsKLQl9Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCB3YWl0X21pZ3JhdGVkX2NhbGxiYWNrcyh2b2lkKQotewotCXdhaXRfZXZlbnQocmN1X21pZ3JhdGVfd3EsICFhdG9taWNfcmVhZCgmcmN1X21pZ3JhdGVfdHlwZV9jb3VudCkpOwotCXNtcF9tYigpOyAvKiBJbiBjYXNlIHdlIGRpZG4ndCBzbGVlcC4gKi8KLX0KLQotLyoKLSAqIE9yY2hlc3RyYXRlIHRoZSBzcGVjaWZpZWQgdHlwZSBvZiBSQ1UgYmFycmllciwgd2FpdGluZyBmb3IgYWxsCi0gKiBSQ1UgY2FsbGJhY2tzIG9mIHRoZSBzcGVjaWZpZWQgdHlwZSB0byBjb21wbGV0ZS4KLSAqLwotc3RhdGljIHZvaWQgX3JjdV9iYXJyaWVyKGVudW0gcmN1X2JhcnJpZXIgdHlwZSkKLXsKLQlCVUdfT04oaW5faW50ZXJydXB0KCkpOwotCS8qIFRha2UgY3B1Y29udHJvbCBtdXRleCB0byBwcm90ZWN0IGFnYWluc3QgQ1BVIGhvdHBsdWcgKi8KLQltdXRleF9sb2NrKCZyY3VfYmFycmllcl9tdXRleCk7Ci0JaW5pdF9jb21wbGV0aW9uKCZyY3VfYmFycmllcl9jb21wbGV0aW9uKTsKLQkvKgotCSAqIEluaXRpYWxpemUgcmN1X2JhcnJpZXJfY3B1X2NvdW50IHRvIDEsIHRoZW4gaW52b2tlCi0JICogcmN1X2JhcnJpZXJfZnVuYygpIG9uIGVhY2ggQ1BVLCBzbyB0aGF0IGVhY2ggQ1BVIGFsc28gaGFzCi0JICogaW5jcmVtZW50ZWQgcmN1X2JhcnJpZXJfY3B1X2NvdW50LiAgT25seSB0aGVuIGlzIGl0IHNhZmUgdG8KLQkgKiBkZWNyZW1lbnQgcmN1X2JhcnJpZXJfY3B1X2NvdW50IC0tIG90aGVyd2lzZSB0aGUgZmlyc3QgQ1BVCi0JICogbWlnaHQgY29tcGxldGUgaXRzIGdyYWNlIHBlcmlvZCBiZWZvcmUgYWxsIG9mIHRoZSBvdGhlciBDUFVzCi0JICogZGlkIHRoZWlyIGluY3JlbWVudCwgY2F1c2luZyB0aGlzIGZ1bmN0aW9uIHRvIHJldHVybiB0b28KLQkgKiBlYXJseS4KLQkgKi8KLQlhdG9taWNfc2V0KCZyY3VfYmFycmllcl9jcHVfY291bnQsIDEpOwotCW9uX2VhY2hfY3B1KHJjdV9iYXJyaWVyX2Z1bmMsICh2b2lkICopdHlwZSwgMSk7Ci0JaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJnJjdV9iYXJyaWVyX2NwdV9jb3VudCkpCi0JCWNvbXBsZXRlKCZyY3VfYmFycmllcl9jb21wbGV0aW9uKTsKLQl3YWl0X2Zvcl9jb21wbGV0aW9uKCZyY3VfYmFycmllcl9jb21wbGV0aW9uKTsKLQltdXRleF91bmxvY2soJnJjdV9iYXJyaWVyX211dGV4KTsKLQl3YWl0X21pZ3JhdGVkX2NhbGxiYWNrcygpOwotfQotCi0vKioKLSAqIHJjdV9iYXJyaWVyIC0gV2FpdCB1bnRpbCBhbGwgaW4tZmxpZ2h0IGNhbGxfcmN1KCkgY2FsbGJhY2tzIGNvbXBsZXRlLgotICovCi12b2lkIHJjdV9iYXJyaWVyKHZvaWQpCi17Ci0JX3JjdV9iYXJyaWVyKFJDVV9CQVJSSUVSX1NURCk7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChyY3VfYmFycmllcik7Ci0KLS8qKgotICogcmN1X2JhcnJpZXJfYmggLSBXYWl0IHVudGlsIGFsbCBpbi1mbGlnaHQgY2FsbF9yY3VfYmgoKSBjYWxsYmFja3MgY29tcGxldGUuCi0gKi8KLXZvaWQgcmN1X2JhcnJpZXJfYmgodm9pZCkKLXsKLQlfcmN1X2JhcnJpZXIoUkNVX0JBUlJJRVJfQkgpOwotfQotRVhQT1JUX1NZTUJPTF9HUEwocmN1X2JhcnJpZXJfYmgpOwotCi0vKioKLSAqIHJjdV9iYXJyaWVyX3NjaGVkIC0gV2FpdCBmb3IgaW4tZmxpZ2h0IGNhbGxfcmN1X3NjaGVkKCkgY2FsbGJhY2tzLgotICovCi12b2lkIHJjdV9iYXJyaWVyX3NjaGVkKHZvaWQpCi17Ci0JX3JjdV9iYXJyaWVyKFJDVV9CQVJSSUVSX1NDSEVEKTsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKHJjdV9iYXJyaWVyX3NjaGVkKTsKLQotc3RhdGljIHZvaWQgcmN1X21pZ3JhdGVfY2FsbGJhY2soc3RydWN0IHJjdV9oZWFkICpub3R1c2VkKQotewotCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZyY3VfbWlncmF0ZV90eXBlX2NvdW50KSkKLQkJd2FrZV91cCgmcmN1X21pZ3JhdGVfd3EpOwotfQotCi1leHRlcm4gaW50IHJjdV9jcHVfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqc2VsZiwKLQkJCSAgdW5zaWduZWQgbG9uZyBhY3Rpb24sIHZvaWQgKmhjcHUpOwotCiBzdGF0aWMgaW50IF9fY3B1aW5pdCByY3VfYmFycmllcl9jcHVfaG90cGx1ZyhzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnNlbGYsCiAJCXVuc2lnbmVkIGxvbmcgYWN0aW9uLCB2b2lkICpoY3B1KQogewotCXJjdV9jcHVfbm90aWZ5KHNlbGYsIGFjdGlvbiwgaGNwdSk7Ci0JaWYgKGFjdGlvbiA9PSBDUFVfRFlJTkcpIHsKLQkJLyoKLQkJICogcHJlZW1wdF9kaXNhYmxlKCkgaW4gb25fZWFjaF9jcHUoKSBwcmV2ZW50cyBzdG9wX21hY2hpbmUoKSwKLQkJICogc28gd2hlbiAib25fZWFjaF9jcHUocmN1X2JhcnJpZXJfZnVuYywgKHZvaWQgKil0eXBlLCAxKTsiCi0JCSAqIHJldHVybnMsIGFsbCBvbmxpbmUgY3B1cyBoYXZlIHF1ZXVlZCByY3VfYmFycmllcl9mdW5jKCksCi0JCSAqIGFuZCB0aGUgZGVhZCBjcHUoaWYgaXQgZXhpc3QpIHF1ZXVlcyByY3VfbWlncmF0ZV9jYWxsYmFjaygpcy4KLQkJICoKLQkJICogVGhlc2UgY2FsbGJhY2tzIGVuc3VyZSBfcmN1X2JhcnJpZXIoKSB3YWl0cyBmb3IgYWxsCi0JCSAqIFJDVSBjYWxsYmFja3Mgb2YgdGhlIHNwZWNpZmllZCB0eXBlIHRvIGNvbXBsZXRlLgotCQkgKi8KLQkJYXRvbWljX3NldCgmcmN1X21pZ3JhdGVfdHlwZV9jb3VudCwgMyk7Ci0JCWNhbGxfcmN1X2JoKHJjdV9taWdyYXRlX2hlYWQsIHJjdV9taWdyYXRlX2NhbGxiYWNrKTsKLQkJY2FsbF9yY3Vfc2NoZWQocmN1X21pZ3JhdGVfaGVhZCArIDEsIHJjdV9taWdyYXRlX2NhbGxiYWNrKTsKLQkJY2FsbF9yY3UocmN1X21pZ3JhdGVfaGVhZCArIDIsIHJjdV9taWdyYXRlX2NhbGxiYWNrKTsKLQl9IGVsc2UgaWYgKGFjdGlvbiA9PSBDUFVfRE9XTl9QUkVQQVJFKSB7Ci0JCS8qIERvbid0IG5lZWQgdG8gd2FpdCB1bnRpbCBuZXh0IHJlbW92YWwgb3BlcmF0aW9uLiAqLwotCQkvKiByY3VfbWlncmF0ZV9oZWFkIGlzIHByb3RlY3RlZCBieSBjcHVfYWRkX3JlbW92ZV9sb2NrICovCi0JCXdhaXRfbWlncmF0ZWRfY2FsbGJhY2tzKCk7Ci0JfQotCi0JcmV0dXJuIE5PVElGWV9PSzsKKwlyZXR1cm4gcmN1X2NwdV9ub3RpZnkoc2VsZiwgYWN0aW9uLCBoY3B1KTsKIH0KIAogdm9pZCBfX2luaXQgcmN1X2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3V0b3J0dXJlLmMgYi9rZXJuZWwvcmN1dG9ydHVyZS5jCmluZGV4IDIzMzc2OGYuLjY5N2MwYTAgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9yY3V0b3J0dXJlLmMKKysrIGIva2VybmVsL3JjdXRvcnR1cmUuYwpAQCAtNjA2LDggKzYwNiw2IEBACiAJLm5hbWUJCT0gInNjaGVkX3N5bmMiCiB9OwogCi1leHRlcm4gaW50IHJjdV9leHBlZGl0ZWRfdG9ydHVyZV9zdGF0cyhjaGFyICpwYWdlKTsKLQogc3RhdGljIHN0cnVjdCByY3VfdG9ydHVyZV9vcHMgc2NoZWRfZXhwZWRpdGVkX29wcyA9IHsKIAkuaW5pdAkJPSByY3Vfc3luY190b3J0dXJlX2luaXQsCiAJLmNsZWFudXAJPSBOVUxMLApAQCAtNjUwLDcgKzY0OCw3IEBACiAJCW9sZF9ycCA9IHJjdV90b3J0dXJlX2N1cnJlbnQ7CiAJCXJwLT5ydG9ydF9tYnRlc3QgPSAxOwogCQlyY3VfYXNzaWduX3BvaW50ZXIocmN1X3RvcnR1cmVfY3VycmVudCwgcnApOwotCQlzbXBfd21iKCk7CisJCXNtcF93bWIoKTsgLyogTW9kcyB0byBvbGRfcnAgbXVzdCBmb2xsb3cgcmN1X2Fzc2lnbl9wb2ludGVyKCkgKi8KIAkJaWYgKG9sZF9ycCkgewogCQkJaSA9IG9sZF9ycC0+cnRvcnRfcGlwZV9jb3VudDsKIAkJCWlmIChpID4gUkNVX1RPUlRVUkVfUElQRV9MRU4pCmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1dHJlZS5jIGIva2VybmVsL3JjdXRyZWUuYwppbmRleCA1MmIwNmY2Li4wNTM2MTI1IDEwMDY0NAotLS0gYS9rZXJuZWwvcmN1dHJlZS5jCisrKyBiL2tlcm5lbC9yY3V0cmVlLmMKQEAgLTQ5LDEzICs0OSw2IEBACiAKICNpbmNsdWRlICJyY3V0cmVlLmgiCiAKLSNpZmRlZiBDT05GSUdfREVCVUdfTE9DS19BTExPQwotc3RhdGljIHN0cnVjdCBsb2NrX2NsYXNzX2tleSByY3VfbG9ja19rZXk7Ci1zdHJ1Y3QgbG9ja2RlcF9tYXAgcmN1X2xvY2tfbWFwID0KLQlTVEFUSUNfTE9DS0RFUF9NQVBfSU5JVCgicmN1X3JlYWRfbG9jayIsICZyY3VfbG9ja19rZXkpOwotRVhQT1JUX1NZTUJPTF9HUEwocmN1X2xvY2tfbWFwKTsKLSNlbmRpZgotCiAvKiBEYXRhIHN0cnVjdHVyZXMuICovCiAKICNkZWZpbmUgUkNVX1NUQVRFX0lOSVRJQUxJWkVSKG5hbWUpIHsgXApAQCAtNzAsNiArNjMsOSBAQAogCS5ncG51bSA9IC0zMDAsIFwKIAkuY29tcGxldGVkID0gLTMwMCwgXAogCS5vbm9mZmxvY2sgPSBfX1NQSU5fTE9DS19VTkxPQ0tFRCgmbmFtZS5vbm9mZmxvY2spLCBcCisJLm9ycGhhbl9jYnNfbGlzdCA9IE5VTEwsIFwKKwkub3JwaGFuX2Nic190YWlsID0gJm5hbWUub3JwaGFuX2Nic19saXN0LCBcCisJLm9ycGhhbl9xbGVuID0gMCwgXAogCS5mcXNsb2NrID0gX19TUElOX0xPQ0tfVU5MT0NLRUQoJm5hbWUuZnFzbG9jayksIFwKIAkubl9mb3JjZV9xcyA9IDAsIFwKIAkubl9mb3JjZV9xc19uZ3AgPSAwLCBcCkBAIC04MSwyNCArNzcsMTYgQEAKIHN0cnVjdCByY3Vfc3RhdGUgcmN1X2JoX3N0YXRlID0gUkNVX1NUQVRFX0lOSVRJQUxJWkVSKHJjdV9iaF9zdGF0ZSk7CiBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgcmN1X2RhdGEsIHJjdV9iaF9kYXRhKTsKIAotZXh0ZXJuIGxvbmcgcmN1X2JhdGNoZXNfY29tcGxldGVkX3NjaGVkKHZvaWQpOwotc3RhdGljIHN0cnVjdCByY3Vfbm9kZSAqcmN1X2dldF9yb290KHN0cnVjdCByY3Vfc3RhdGUgKnJzcCk7Ci1zdGF0aWMgdm9pZCBjcHVfcXVpZXRfbXNrKHVuc2lnbmVkIGxvbmcgbWFzaywgc3RydWN0IHJjdV9zdGF0ZSAqcnNwLAotCQkJICBzdHJ1Y3QgcmN1X25vZGUgKnJucCwgdW5zaWduZWQgbG9uZyBmbGFncyk7Ci1zdGF0aWMgdm9pZCBjcHVfcXVpZXRfbXNrX2ZpbmlzaChzdHJ1Y3QgcmN1X3N0YXRlICpyc3AsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpOwotI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQotc3RhdGljIHZvaWQgX19yY3Vfb2ZmbGluZV9jcHUoaW50IGNwdSwgc3RydWN0IHJjdV9zdGF0ZSAqcnNwKTsKLSNlbmRpZiAvKiAjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVICovCi1zdGF0aWMgdm9pZCBfX3JjdV9wcm9jZXNzX2NhbGxiYWNrcyhzdHJ1Y3QgcmN1X3N0YXRlICpyc3AsCi0JCQkJICAgIHN0cnVjdCByY3VfZGF0YSAqcmRwKTsKLXN0YXRpYyB2b2lkIF9fY2FsbF9yY3Uoc3RydWN0IHJjdV9oZWFkICpoZWFkLAotCQkgICAgICAgdm9pZCAoKmZ1bmMpKHN0cnVjdCByY3VfaGVhZCAqcmN1KSwKLQkJICAgICAgIHN0cnVjdCByY3Vfc3RhdGUgKnJzcCk7Ci1zdGF0aWMgaW50IF9fcmN1X3BlbmRpbmcoc3RydWN0IHJjdV9zdGF0ZSAqcnNwLCBzdHJ1Y3QgcmN1X2RhdGEgKnJkcCk7Ci1zdGF0aWMgdm9pZCBfX2NwdWluaXQgcmN1X2luaXRfcGVyY3B1X2RhdGEoaW50IGNwdSwgc3RydWN0IHJjdV9zdGF0ZSAqcnNwLAotCQkJCQkgICBpbnQgcHJlZW1wdGFibGUpOwogCi0jaW5jbHVkZSAicmN1dHJlZV9wbHVnaW4uaCIKKy8qCisgKiBSZXR1cm4gdHJ1ZSBpZiBhbiBSQ1UgZ3JhY2UgcGVyaW9kIGlzIGluIHByb2dyZXNzLiAgVGhlIEFDQ0VTU19PTkNFKClzCisgKiBwZXJtaXQgdGhpcyBmdW5jdGlvbiB0byBiZSBpbnZva2VkIHdpdGhvdXQgaG9sZGluZyB0aGUgcm9vdCByY3Vfbm9kZQorICogc3RydWN0dXJlJ3MgLT5sb2NrLCBidXQgb2YgY291cnNlIHJlc3VsdHMgY2FuIGJlIHN1YmplY3QgdG8gY2hhbmdlLgorICovCitzdGF0aWMgaW50IHJjdV9ncF9pbl9wcm9ncmVzcyhzdHJ1Y3QgcmN1X3N0YXRlICpyc3ApCit7CisJcmV0dXJuIEFDQ0VTU19PTkNFKHJzcC0+Y29tcGxldGVkKSAhPSBBQ0NFU1NfT05DRShyc3AtPmdwbnVtKTsKK30KIAogLyoKICAqIE5vdGUgYSBxdWllc2NlbnQgc3RhdGUuICBCZWNhdXNlIHdlIGRvIG5vdCBuZWVkIHRvIGtub3cKQEAgLTEzNyw2ICsxMjUsMTAgQEAKIHN0YXRpYyBpbnQgcWhpbWFyayA9IDEwMDAwOwkvKiBJZiB0aGlzIG1hbnkgcGVuZGluZywgaWdub3JlIGJsaW1pdC4gKi8KIHN0YXRpYyBpbnQgcWxvd21hcmsgPSAxMDA7CS8qIE9uY2Ugb25seSB0aGlzIG1hbnkgcGVuZGluZywgdXNlIGJsaW1pdC4gKi8KIAorbW9kdWxlX3BhcmFtKGJsaW1pdCwgaW50LCAwKTsKK21vZHVsZV9wYXJhbShxaGltYXJrLCBpbnQsIDApOworbW9kdWxlX3BhcmFtKHFsb3dtYXJrLCBpbnQsIDApOworCiBzdGF0aWMgdm9pZCBmb3JjZV9xdWllc2NlbnRfc3RhdGUoc3RydWN0IHJjdV9zdGF0ZSAqcnNwLCBpbnQgcmVsYXhlZCk7CiBzdGF0aWMgaW50IHJjdV9wZW5kaW5nKGludCBjcHUpOwogCkBAIC0xNzMsOSArMTY1LDcgQEAKIHN0YXRpYyBpbnQKIGNwdV9uZWVkc19hbm90aGVyX2dwKHN0cnVjdCByY3Vfc3RhdGUgKnJzcCwgc3RydWN0IHJjdV9kYXRhICpyZHApCiB7Ci0JLyogQUNDRVNTX09OQ0UoKSBiZWNhdXNlIHdlIGFyZSBhY2Nlc3Npbmcgb3V0c2lkZSBvZiBsb2NrLiAqLwotCXJldHVybiAqcmRwLT5ueHR0YWlsW1JDVV9ET05FX1RBSUxdICYmCi0JICAgICAgIEFDQ0VTU19PTkNFKHJzcC0+Y29tcGxldGVkKSA9PSBBQ0NFU1NfT05DRShyc3AtPmdwbnVtKTsKKwlyZXR1cm4gKnJkcC0+bnh0dGFpbFtSQ1VfRE9ORV9UQUlMXSAmJiAhcmN1X2dwX2luX3Byb2dyZXNzKHJzcCk7CiB9CiAKIC8qCkBAIC0zNjksNyArMzU5LDcgQEAKIC8qCiAgKiBTbmFwc2hvdCB0aGUgc3BlY2lmaWVkIENQVSdzIGR5bnRpY2tzIGNvdW50ZXIgc28gdGhhdCB3ZSBjYW4gbGF0ZXIKICAqIGNyZWRpdCB0aGVtIHdpdGggYW4gaW1wbGljaXQgcXVpZXNjZW50IHN0YXRlLiAgUmV0dXJuIDEgaWYgdGhpcyBDUFUKLSAqIGlzIGFscmVhZHkgaW4gYSBxdWllc2NlbnQgc3RhdGUgY291cnRlc3kgb2YgZHludGlja3MgaWRsZSBtb2RlLgorICogaXMgaW4gZHludGlja3MgaWRsZSBtb2RlLCB3aGljaCBpcyBhbiBleHRlbmRlZCBxdWllc2NlbnQgc3RhdGUuCiAgKi8KIHN0YXRpYyBpbnQgZHludGlja19zYXZlX3Byb2dyZXNzX2NvdW50ZXIoc3RydWN0IHJjdV9kYXRhICpyZHApCiB7CkBAIC00NzUsMzAgKzQ2NSwzNCBAQAogCWxvbmcgZGVsdGE7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgcmN1X25vZGUgKnJucCA9IHJjdV9nZXRfcm9vdChyc3ApOwotCXN0cnVjdCByY3Vfbm9kZSAqcm5wX2N1ciA9IHJzcC0+bGV2ZWxbTlVNX1JDVV9MVkxTIC0gMV07Ci0Jc3RydWN0IHJjdV9ub2RlICpybnBfZW5kID0gJnJzcC0+bm9kZVtOVU1fUkNVX05PREVTXTsKIAogCS8qIE9ubHkgbGV0IG9uZSBDUFUgY29tcGxhaW4gYWJvdXQgb3RoZXJzIHBlciB0aW1lIGludGVydmFsLiAqLwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnJucC0+bG9jaywgZmxhZ3MpOwogCWRlbHRhID0gamlmZmllcyAtIHJzcC0+amlmZmllc19zdGFsbDsKLQlpZiAoZGVsdGEgPCBSQ1VfU1RBTExfUkFUX0RFTEFZIHx8IHJzcC0+Z3BudW0gPT0gcnNwLT5jb21wbGV0ZWQpIHsKKwlpZiAoZGVsdGEgPCBSQ1VfU1RBTExfUkFUX0RFTEFZIHx8ICFyY3VfZ3BfaW5fcHJvZ3Jlc3MocnNwKSkgewogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZybnAtPmxvY2ssIGZsYWdzKTsKIAkJcmV0dXJuOwogCX0KIAlyc3AtPmppZmZpZXNfc3RhbGwgPSBqaWZmaWVzICsgUkNVX1NFQ09ORFNfVElMTF9TVEFMTF9SRUNIRUNLOworCisJLyoKKwkgKiBOb3cgcmF0IG9uIGFueSB0YXNrcyB0aGF0IGdvdCBraWNrZWQgdXAgdG8gdGhlIHJvb3QgcmN1X25vZGUKKwkgKiBkdWUgdG8gQ1BVIG9mZmxpbmluZy4KKwkgKi8KKwlyY3VfcHJpbnRfdGFza19zdGFsbChybnApOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJucC0+bG9jaywgZmxhZ3MpOwogCiAJLyogT0ssIHRpbWUgdG8gcmF0IG9uIG91ciBidWRkeS4uLiAqLwogCiAJcHJpbnRrKEtFUk5fRVJSICJJTkZPOiBSQ1UgZGV0ZWN0ZWQgQ1BVIHN0YWxsczoiKTsKLQlmb3IgKDsgcm5wX2N1ciA8IHJucF9lbmQ7IHJucF9jdXIrKykgeworCXJjdV9mb3JfZWFjaF9sZWFmX25vZGUocnNwLCBybnApIHsKIAkJcmN1X3ByaW50X3Rhc2tfc3RhbGwocm5wKTsKLQkJaWYgKHJucF9jdXItPnFzbWFzayA9PSAwKQorCQlpZiAocm5wLT5xc21hc2sgPT0gMCkKIAkJCWNvbnRpbnVlOwotCQlmb3IgKGNwdSA9IDA7IGNwdSA8PSBybnBfY3VyLT5ncnBoaSAtIHJucF9jdXItPmdycGxvOyBjcHUrKykKLQkJCWlmIChybnBfY3VyLT5xc21hc2sgJiAoMVVMIDw8IGNwdSkpCi0JCQkJcHJpbnRrKCIgJWQiLCBybnBfY3VyLT5ncnBsbyArIGNwdSk7CisJCWZvciAoY3B1ID0gMDsgY3B1IDw9IHJucC0+Z3JwaGkgLSBybnAtPmdycGxvOyBjcHUrKykKKwkJCWlmIChybnAtPnFzbWFzayAmICgxVUwgPDwgY3B1KSkKKwkJCQlwcmludGsoIiAlZCIsIHJucC0+Z3JwbG8gKyBjcHUpOwogCX0KIAlwcmludGsoIiAoZGV0ZWN0ZWQgYnkgJWQsIHQ9JWxkIGppZmZpZXMpXG4iLAogCSAgICAgICBzbXBfcHJvY2Vzc29yX2lkKCksIChsb25nKShqaWZmaWVzIC0gcnNwLT5ncF9zdGFydCkpOwpAQCAtNTM3LDggKzUzMSw3IEBACiAJCS8qIFdlIGhhdmVuJ3QgY2hlY2tlZCBpbiwgc28gZ28gZHVtcCBzdGFjay4gKi8KIAkJcHJpbnRfY3B1X3N0YWxsKHJzcCk7CiAKLQl9IGVsc2UgaWYgKHJzcC0+Z3BudW0gIT0gcnNwLT5jb21wbGV0ZWQgJiYKLQkJICAgZGVsdGEgPj0gUkNVX1NUQUxMX1JBVF9ERUxBWSkgeworCX0gZWxzZSBpZiAocmN1X2dwX2luX3Byb2dyZXNzKHJzcCkgJiYgZGVsdGEgPj0gUkNVX1NUQUxMX1JBVF9ERUxBWSkgewogCiAJCS8qIFRoZXkgaGFkIHR3byB0aW1lIHVuaXRzIHRvIGR1bXAgc3RhY2ssIHNvIGNvbXBsYWluLiAqLwogCQlwcmludF9vdGhlcl9jcHVfc3RhbGwocnNwKTsKQEAgLTYxNyw5ICs2MTAsMTUgQEAKIAlub3RlX25ld19ncG51bShyc3AsIHJkcCk7CiAKIAkvKgotCSAqIEJlY2F1c2Ugd2UgYXJlIGZpcnN0LCB3ZSBrbm93IHRoYXQgYWxsIG91ciBjYWxsYmFja3Mgd2lsbAotCSAqIGJlIGNvdmVyZWQgYnkgdGhpcyB1cGNvbWluZyBncmFjZSBwZXJpb2QsIGV2ZW4gdGhlIG9uZXMKLQkgKiB0aGF0IHdlcmUgcmVnaXN0ZXJlZCBhcmJpdHJhcmlseSByZWNlbnRseS4KKwkgKiBCZWNhdXNlIHRoaXMgQ1BVIGp1c3Qgbm93IHN0YXJ0ZWQgdGhlIG5ldyBncmFjZSBwZXJpb2QsIHdlIGtub3cKKwkgKiB0aGF0IGFsbCBvZiBpdHMgY2FsbGJhY2tzIHdpbGwgYmUgY292ZXJlZCBieSB0aGlzIHVwY29taW5nIGdyYWNlCisJICogcGVyaW9kLCBldmVuIHRoZSBvbmVzIHRoYXQgd2VyZSByZWdpc3RlcmVkIGFyYml0cmFyaWx5IHJlY2VudGx5LgorCSAqIFRoZXJlZm9yZSwgYWR2YW5jZSBhbGwgb3V0c3RhbmRpbmcgY2FsbGJhY2tzIHRvIFJDVV9XQUlUX1RBSUwuCisJICoKKwkgKiBPdGhlciBDUFVzIGNhbm5vdCBiZSBzdXJlIGV4YWN0bHkgd2hlbiB0aGUgZ3JhY2UgcGVyaW9kIHN0YXJ0ZWQuCisJICogVGhlcmVmb3JlLCB0aGVpciByZWNlbnRseSByZWdpc3RlcmVkIGNhbGxiYWNrcyBtdXN0IHBhc3MgdGhyb3VnaAorCSAqIGFuIGFkZGl0aW9uYWwgUkNVX05FWFRfUkVBRFkgc3RhZ2UsIHNvIHRoYXQgdGhleSB3aWxsIGJlIGhhbmRsZWQKKwkgKiBieSB0aGUgbmV4dCBSQ1UgZ3JhY2UgcGVyaW9kLgogCSAqLwogCXJkcC0+bnh0dGFpbFtSQ1VfTkVYVF9SRUFEWV9UQUlMXSA9IHJkcC0+bnh0dGFpbFtSQ1VfTkVYVF9UQUlMXTsKIAlyZHAtPm54dHRhaWxbUkNVX1dBSVRfVEFJTF0gPSByZHAtPm54dHRhaWxbUkNVX05FWFRfVEFJTF07CkBAIC02NTcsNyArNjU2LDcgQEAKIAkgKiBvbmUgY29ycmVzcG9uZGluZyB0byB0aGlzIENQVSwgZHVlIHRvIHRoZSBmYWN0IHRoYXQgd2UgaGF2ZQogCSAqIGlycXMgZGlzYWJsZWQuCiAJICovCi0JZm9yIChybnAgPSAmcnNwLT5ub2RlWzBdOyBybnAgPCAmcnNwLT5ub2RlW05VTV9SQ1VfTk9ERVNdOyBybnArKykgeworCXJjdV9mb3JfZWFjaF9ub2RlX2JyZWFkdGhfZmlyc3QocnNwLCBybnApIHsKIAkJc3Bpbl9sb2NrKCZybnAtPmxvY2spOwkvKiBpcnFzIGFscmVhZHkgZGlzYWJsZWQuICovCiAJCXJjdV9wcmVlbXB0X2NoZWNrX2Jsb2NrZWRfdGFza3Mocm5wKTsKIAkJcm5wLT5xc21hc2sgPSBybnAtPnFzbWFza2luaXQ7CkBAIC03MDMsOSArNzAyLDkgQEAKICAqIGhvbGQgcm5wLT5sb2NrLCBhcyByZXF1aXJlZCBieSByY3Vfc3RhcnRfZ3AoKSwgd2hpY2ggd2lsbCByZWxlYXNlIGl0LgogICovCiBzdGF0aWMgdm9pZCBjcHVfcXVpZXRfbXNrX2ZpbmlzaChzdHJ1Y3QgcmN1X3N0YXRlICpyc3AsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCi0JX19yZWxlYXNlcyhybnAtPmxvY2spCisJX19yZWxlYXNlcyhyY3VfZ2V0X3Jvb3QocnNwKS0+bG9jaykKIHsKLQlXQVJOX09OX09OQ0UocnNwLT5jb21wbGV0ZWQgPT0gcnNwLT5ncG51bSk7CisJV0FSTl9PTl9PTkNFKCFyY3VfZ3BfaW5fcHJvZ3Jlc3MocnNwKSk7CiAJcnNwLT5jb21wbGV0ZWQgPSByc3AtPmdwbnVtOwogCXJjdV9wcm9jZXNzX2dwX2VuZChyc3AsIHJzcC0+cmRhW3NtcF9wcm9jZXNzb3JfaWQoKV0pOwogCXJjdV9zdGFydF9ncChyc3AsIGZsYWdzKTsgIC8qIHJlbGVhc2VzIHJvb3Qgbm9kZSdzIHJucC0+bG9jay4gKi8KQEAgLTg0MiwxNyArODQxLDYzIEBACiAjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCiAKIC8qCisgKiBNb3ZlIGEgZHlpbmcgQ1BVJ3MgUkNVIGNhbGxiYWNrcyB0byB0aGUgLT5vcnBoYW5fY2JzX2xpc3QgZm9yIHRoZQorICogc3BlY2lmaWVkIGZsYXZvciBvZiBSQ1UuICBUaGUgY2FsbGJhY2tzIHdpbGwgYmUgYWRvcHRlZCBieSB0aGUgbmV4dAorICogX3JjdV9iYXJyaWVyKCkgaW52b2NhdGlvbiBvciBieSB0aGUgQ1BVX0RFQUQgbm90aWZpZXIsIHdoaWNoZXZlcgorICogY29tZXMgZmlyc3QuICBCZWNhdXNlIHRoaXMgaXMgaW52b2tlZCBmcm9tIHRoZSBDUFVfRFlJTkcgbm90aWZpZXIsCisgKiBpcnFzIGFyZSBhbHJlYWR5IGRpc2FibGVkLgorICovCitzdGF0aWMgdm9pZCByY3Vfc2VuZF9jYnNfdG9fb3JwaGFuYWdlKHN0cnVjdCByY3Vfc3RhdGUgKnJzcCkKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgcmN1X2RhdGEgKnJkcCA9IHJzcC0+cmRhW3NtcF9wcm9jZXNzb3JfaWQoKV07CisKKwlpZiAocmRwLT5ueHRsaXN0ID09IE5VTEwpCisJCXJldHVybjsgIC8qIGlycXMgZGlzYWJsZWQsIHNvIGNvbXBhcmlzb24gaXMgc3RhYmxlLiAqLworCXNwaW5fbG9jaygmcnNwLT5vbm9mZmxvY2spOyAgLyogaXJxcyBhbHJlYWR5IGRpc2FibGVkLiAqLworCSpyc3AtPm9ycGhhbl9jYnNfdGFpbCA9IHJkcC0+bnh0bGlzdDsKKwlyc3AtPm9ycGhhbl9jYnNfdGFpbCA9IHJkcC0+bnh0dGFpbFtSQ1VfTkVYVF9UQUlMXTsKKwlyZHAtPm54dGxpc3QgPSBOVUxMOworCWZvciAoaSA9IDA7IGkgPCBSQ1VfTkVYVF9TSVpFOyBpKyspCisJCXJkcC0+bnh0dGFpbFtpXSA9ICZyZHAtPm54dGxpc3Q7CisJcnNwLT5vcnBoYW5fcWxlbiArPSByZHAtPnFsZW47CisJcmRwLT5xbGVuID0gMDsKKwlzcGluX3VubG9jaygmcnNwLT5vbm9mZmxvY2spOyAgLyogaXJxcyByZW1haW4gZGlzYWJsZWQuICovCit9CisKKy8qCisgKiBBZG9wdCBwcmV2aW91c2x5IG9ycGhhbmVkIFJDVSBjYWxsYmFja3MuCisgKi8KK3N0YXRpYyB2b2lkIHJjdV9hZG9wdF9vcnBoYW5fY2JzKHN0cnVjdCByY3Vfc3RhdGUgKnJzcCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCByY3VfZGF0YSAqcmRwOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnJzcC0+b25vZmZsb2NrLCBmbGFncyk7CisJcmRwID0gcnNwLT5yZGFbc21wX3Byb2Nlc3Nvcl9pZCgpXTsKKwlpZiAocnNwLT5vcnBoYW5fY2JzX2xpc3QgPT0gTlVMTCkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyc3AtPm9ub2ZmbG9jaywgZmxhZ3MpOworCQlyZXR1cm47CisJfQorCSpyZHAtPm54dHRhaWxbUkNVX05FWFRfVEFJTF0gPSByc3AtPm9ycGhhbl9jYnNfbGlzdDsKKwlyZHAtPm54dHRhaWxbUkNVX05FWFRfVEFJTF0gPSByc3AtPm9ycGhhbl9jYnNfdGFpbDsKKwlyZHAtPnFsZW4gKz0gcnNwLT5vcnBoYW5fcWxlbjsKKwlyc3AtPm9ycGhhbl9jYnNfbGlzdCA9IE5VTEw7CisJcnNwLT5vcnBoYW5fY2JzX3RhaWwgPSAmcnNwLT5vcnBoYW5fY2JzX2xpc3Q7CisJcnNwLT5vcnBoYW5fcWxlbiA9IDA7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnNwLT5vbm9mZmxvY2ssIGZsYWdzKTsKK30KKworLyoKICAqIFJlbW92ZSB0aGUgb3V0Z29pbmcgQ1BVIGZyb20gdGhlIGJpdG1hc2tzIGluIHRoZSByY3Vfbm9kZSBoaWVyYXJjaHkKICAqIGFuZCBtb3ZlIGFsbCBjYWxsYmFja3MgZnJvbSB0aGUgb3V0Z29pbmcgQ1BVIHRvIHRoZSBjdXJyZW50IG9uZS4KICAqLwogc3RhdGljIHZvaWQgX19yY3Vfb2ZmbGluZV9jcHUoaW50IGNwdSwgc3RydWN0IHJjdV9zdGF0ZSAqcnNwKQogewotCWludCBpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJbG9uZyBsYXN0Y29tcDsKIAl1bnNpZ25lZCBsb25nIG1hc2s7CiAJc3RydWN0IHJjdV9kYXRhICpyZHAgPSByc3AtPnJkYVtjcHVdOwotCXN0cnVjdCByY3VfZGF0YSAqcmRwX21lOwogCXN0cnVjdCByY3Vfbm9kZSAqcm5wOwogCiAJLyogRXhjbHVkZSBhbnkgYXR0ZW1wdHMgdG8gc3RhcnQgYSBuZXcgZ3JhY2UgcGVyaW9kLiAqLwpAQCAtODY4LDM5ICs5MTMsMjkgQEAKIAkJCXNwaW5fdW5sb2NrKCZybnAtPmxvY2spOyAvKiBpcnFzIHJlbWFpbiBkaXNhYmxlZC4gKi8KIAkJCWJyZWFrOwogCQl9Ci0JCXJjdV9wcmVlbXB0X29mZmxpbmVfdGFza3MocnNwLCBybnAsIHJkcCk7CisKKwkJLyoKKwkJICogSWYgdGhlcmUgd2FzIGEgdGFzayBibG9ja2luZyB0aGUgY3VycmVudCBncmFjZSBwZXJpb2QsCisJCSAqIGFuZCBpZiBhbGwgQ1BVcyBoYXZlIGNoZWNrZWQgaW4sIHdlIG5lZWQgdG8gcHJvcGFnYXRlCisJCSAqIHRoZSBxdWllc2NlbnQgc3RhdGUgdXAgdGhlIHJjdV9ub2RlIGhpZXJhcmNoeS4gIEJ1dCB0aGF0CisJCSAqIGlzIGluY29udmVuaWVudCBhdCB0aGUgbW9tZW50IGR1ZSB0byBkZWFkbG9jayBpc3N1ZXMgaWYKKwkJICogdGhpcyBzaG91bGQgZW5kIHRoZSBjdXJyZW50IGdyYWNlIHBlcmlvZC4gIFNvIHNldCB0aGUKKwkJICogb2ZmbGluZWQgQ1BVJ3MgYml0IGluIC0+cXNtYXNrIGluIG9yZGVyIHRvIGZvcmNlIHRoZQorCQkgKiBuZXh0IGZvcmNlX3F1aWVzY2VudF9zdGF0ZSgpIGludm9jYXRpb24gdG8gY2xlYW4gdXAgdGhpcworCQkgKiBtZXNzIGluIGEgZGVhZGxvY2stZnJlZSBtYW5uZXIuCisJCSAqLworCQlpZiAocmN1X3ByZWVtcHRfb2ZmbGluZV90YXNrcyhyc3AsIHJucCwgcmRwKSAmJiAhcm5wLT5xc21hc2spCisJCQlybnAtPnFzbWFzayB8PSBtYXNrOworCiAJCW1hc2sgPSBybnAtPmdycG1hc2s7CiAJCXNwaW5fdW5sb2NrKCZybnAtPmxvY2spOwkvKiBpcnFzIHJlbWFpbiBkaXNhYmxlZC4gKi8KIAkJcm5wID0gcm5wLT5wYXJlbnQ7CiAJfSB3aGlsZSAocm5wICE9IE5VTEwpOwogCWxhc3Rjb21wID0gcnNwLT5jb21wbGV0ZWQ7CiAKLQlzcGluX3VubG9jaygmcnNwLT5vbm9mZmxvY2spOwkJLyogaXJxcyByZW1haW4gZGlzYWJsZWQuICovCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnNwLT5vbm9mZmxvY2ssIGZsYWdzKTsKIAotCS8qCi0JICogTW92ZSBjYWxsYmFja3MgZnJvbSB0aGUgb3V0Z29pbmcgQ1BVIHRvIHRoZSBydW5uaW5nIENQVS4KLQkgKiBOb3RlIHRoYXQgdGhlIG91dGdvaW5nIENQVSBpcyBub3cgcXVpc2NlbnQsIHNvIGl0IGlzIG5vdwotCSAqICh1bmNoYXJhY3RlcmlzdGljYWxseSkgc2FmZSB0byBhY2Nlc3MgaXRzIHJjdV9kYXRhIHN0cnVjdHVyZS4KLQkgKiBOb3RlIGFsc28gdGhhdCB3ZSBtdXN0IGNhcmVmdWxseSByZXRhaW4gdGhlIG9yZGVyIG9mIHRoZQotCSAqIG91dGdvaW5nIENQVSdzIGNhbGxiYWNrcyBpbiBvcmRlciBmb3IgcmN1X2JhcnJpZXIoKSB0byB3b3JrCi0JICogY29ycmVjdGx5LiAgRmluYWxseSwgbm90ZSB0aGF0IHdlIHN0YXJ0IGFsbCB0aGUgY2FsbGJhY2tzCi0JICogYWZyZXNoLCBldmVuIHRob3NlIHRoYXQgaGF2ZSBwYXNzZWQgdGhyb3VnaCBhIGdyYWNlIHBlcmlvZAotCSAqIGFuZCBhcmUgdGhlcmVmb3JlIHJlYWR5IHRvIGludm9rZS4gIFRoZSB0aGVvcnkgaXMgdGhhdCBob3RwbHVnCi0JICogZXZlbnRzIGFyZSByYXJlLCBhbmQgdGhhdCBpZiB0aGV5IGFyZSBmcmVxdWVudCBlbm91Z2ggdG8KLQkgKiBpbmRlZmluaXRlbHkgZGVsYXkgY2FsbGJhY2tzLCB5b3UgaGF2ZSBmYXIgd29yc2UgdGhpbmdzIHRvCi0JICogYmUgd29ycnlpbmcgYWJvdXQuCi0JICovCi0JcmRwX21lID0gcnNwLT5yZGFbc21wX3Byb2Nlc3Nvcl9pZCgpXTsKLQlpZiAocmRwLT5ueHRsaXN0ICE9IE5VTEwpIHsKLQkJKnJkcF9tZS0+bnh0dGFpbFtSQ1VfTkVYVF9UQUlMXSA9IHJkcC0+bnh0bGlzdDsKLQkJcmRwX21lLT5ueHR0YWlsW1JDVV9ORVhUX1RBSUxdID0gcmRwLT5ueHR0YWlsW1JDVV9ORVhUX1RBSUxdOwotCQlyZHAtPm54dGxpc3QgPSBOVUxMOwotCQlmb3IgKGkgPSAwOyBpIDwgUkNVX05FWFRfU0laRTsgaSsrKQotCQkJcmRwLT5ueHR0YWlsW2ldID0gJnJkcC0+bnh0bGlzdDsKLQkJcmRwX21lLT5xbGVuICs9IHJkcC0+cWxlbjsKLQkJcmRwLT5xbGVuID0gMDsKLQl9Ci0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCXJjdV9hZG9wdF9vcnBoYW5fY2JzKHJzcCk7CiB9CiAKIC8qCkBAIC05MTgsNiArOTUzLDE0IEBACiAKICNlbHNlIC8qICNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUgKi8KIAorc3RhdGljIHZvaWQgcmN1X3NlbmRfY2JzX3RvX29ycGhhbmFnZShzdHJ1Y3QgcmN1X3N0YXRlICpyc3ApCit7Cit9CisKK3N0YXRpYyB2b2lkIHJjdV9hZG9wdF9vcnBoYW5fY2JzKHN0cnVjdCByY3Vfc3RhdGUgKnJzcCkKK3sKK30KKwogc3RhdGljIHZvaWQgcmN1X29mZmxpbmVfY3B1KGludCBjcHUpCiB7CiB9CkBAIC05MjgsNyArOTcxLDcgQEAKICAqIEludm9rZSBhbnkgUkNVIGNhbGxiYWNrcyB0aGF0IGhhdmUgbWFkZSBpdCB0byB0aGUgZW5kIG9mIHRoZWlyIGdyYWNlCiAgKiBwZXJpb2QuICBUaG90dGxlIGFzIHNwZWNpZmllZCBieSByZHAtPmJsaW1pdC4KICAqLwotc3RhdGljIHZvaWQgcmN1X2RvX2JhdGNoKHN0cnVjdCByY3VfZGF0YSAqcmRwKQorc3RhdGljIHZvaWQgcmN1X2RvX2JhdGNoKHN0cnVjdCByY3Vfc3RhdGUgKnJzcCwgc3RydWN0IHJjdV9kYXRhICpyZHApCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgcmN1X2hlYWQgKm5leHQsICpsaXN0LCAqKnRhaWw7CkBAIC05ODEsNiArMTAyNCwxMyBAQAogCWlmIChyZHAtPmJsaW1pdCA9PSBMT05HX01BWCAmJiByZHAtPnFsZW4gPD0gcWxvd21hcmspCiAJCXJkcC0+YmxpbWl0ID0gYmxpbWl0OwogCisJLyogUmVzZXQgLT5xbGVuX2xhc3RfZnFzX2NoZWNrIHRyaWdnZXIgaWYgZW5vdWdoIENCcyBoYXZlIGRyYWluZWQuICovCisJaWYgKHJkcC0+cWxlbiA9PSAwICYmIHJkcC0+cWxlbl9sYXN0X2Zxc19jaGVjayAhPSAwKSB7CisJCXJkcC0+cWxlbl9sYXN0X2Zxc19jaGVjayA9IDA7CisJCXJkcC0+bl9mb3JjZV9xc19zbmFwID0gcnNwLT5uX2ZvcmNlX3FzOworCX0gZWxzZSBpZiAocmRwLT5xbGVuIDwgcmRwLT5xbGVuX2xhc3RfZnFzX2NoZWNrIC0gcWhpbWFyaykKKwkJcmRwLT5xbGVuX2xhc3RfZnFzX2NoZWNrID0gcmRwLT5xbGVuOworCiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCiAJLyogUmUtcmFpc2UgdGhlIFJDVSBzb2Z0aXJxIGlmIHRoZXJlIGFyZSBjYWxsYmFja3MgcmVtYWluaW5nLiAqLwpAQCAtMTA1MCwzMyArMTEwMCwzMiBAQAogCWludCBjcHU7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBsb25nIG1hc2s7Ci0Jc3RydWN0IHJjdV9ub2RlICpybnBfY3VyID0gcnNwLT5sZXZlbFtOVU1fUkNVX0xWTFMgLSAxXTsKLQlzdHJ1Y3QgcmN1X25vZGUgKnJucF9lbmQgPSAmcnNwLT5ub2RlW05VTV9SQ1VfTk9ERVNdOworCXN0cnVjdCByY3Vfbm9kZSAqcm5wOwogCi0JZm9yICg7IHJucF9jdXIgPCBybnBfZW5kOyBybnBfY3VyKyspIHsKKwlyY3VfZm9yX2VhY2hfbGVhZl9ub2RlKHJzcCwgcm5wKSB7CiAJCW1hc2sgPSAwOwotCQlzcGluX2xvY2tfaXJxc2F2ZSgmcm5wX2N1ci0+bG9jaywgZmxhZ3MpOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmcm5wLT5sb2NrLCBmbGFncyk7CiAJCWlmIChyc3AtPmNvbXBsZXRlZCAhPSBsYXN0Y29tcCkgewotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcm5wX2N1ci0+bG9jaywgZmxhZ3MpOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcm5wLT5sb2NrLCBmbGFncyk7CiAJCQlyZXR1cm4gMTsKIAkJfQotCQlpZiAocm5wX2N1ci0+cXNtYXNrID09IDApIHsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJucF9jdXItPmxvY2ssIGZsYWdzKTsKKwkJaWYgKHJucC0+cXNtYXNrID09IDApIHsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJucC0+bG9jaywgZmxhZ3MpOwogCQkJY29udGludWU7CiAJCX0KLQkJY3B1ID0gcm5wX2N1ci0+Z3JwbG87CisJCWNwdSA9IHJucC0+Z3JwbG87CiAJCWJpdCA9IDE7Ci0JCWZvciAoOyBjcHUgPD0gcm5wX2N1ci0+Z3JwaGk7IGNwdSsrLCBiaXQgPDw9IDEpIHsKLQkJCWlmICgocm5wX2N1ci0+cXNtYXNrICYgYml0KSAhPSAwICYmIGYocnNwLT5yZGFbY3B1XSkpCisJCWZvciAoOyBjcHUgPD0gcm5wLT5ncnBoaTsgY3B1KyssIGJpdCA8PD0gMSkgeworCQkJaWYgKChybnAtPnFzbWFzayAmIGJpdCkgIT0gMCAmJiBmKHJzcC0+cmRhW2NwdV0pKQogCQkJCW1hc2sgfD0gYml0OwogCQl9CiAJCWlmIChtYXNrICE9IDAgJiYgcnNwLT5jb21wbGV0ZWQgPT0gbGFzdGNvbXApIHsKIAotCQkJLyogY3B1X3F1aWV0X21zaygpIHJlbGVhc2VzIHJucF9jdXItPmxvY2suICovCi0JCQljcHVfcXVpZXRfbXNrKG1hc2ssIHJzcCwgcm5wX2N1ciwgZmxhZ3MpOworCQkJLyogY3B1X3F1aWV0X21zaygpIHJlbGVhc2VzIHJucC0+bG9jay4gKi8KKwkJCWNwdV9xdWlldF9tc2sobWFzaywgcnNwLCBybnAsIGZsYWdzKTsKIAkJCWNvbnRpbnVlOwogCQl9Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJucF9jdXItPmxvY2ssIGZsYWdzKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcm5wLT5sb2NrLCBmbGFncyk7CiAJfQogCXJldHVybiAwOwogfQpAQCAtMTA5Miw3ICsxMTQxLDcgQEAKIAlzdHJ1Y3QgcmN1X25vZGUgKnJucCA9IHJjdV9nZXRfcm9vdChyc3ApOwogCXU4IHNpZ25hbGVkOwogCi0JaWYgKEFDQ0VTU19PTkNFKHJzcC0+Y29tcGxldGVkKSA9PSBBQ0NFU1NfT05DRShyc3AtPmdwbnVtKSkKKwlpZiAoIXJjdV9ncF9pbl9wcm9ncmVzcyhyc3ApKQogCQlyZXR1cm47ICAvKiBObyBncmFjZSBwZXJpb2QgaW4gcHJvZ3Jlc3MsIG5vdGhpbmcgdG8gZm9yY2UuICovCiAJaWYgKCFzcGluX3RyeWxvY2tfaXJxc2F2ZSgmcnNwLT5mcXNsb2NrLCBmbGFncykpIHsKIAkJcnNwLT5uX2ZvcmNlX3FzX2xoKys7IC8qIEluZXhhY3QsIGNhbiBsb3NlIGNvdW50cy4gIFRvdWdoISAqLwpAQCAtMTE5NSw3ICsxMjQ0LDcgQEAKIAl9CiAKIAkvKiBJZiB0aGVyZSBhcmUgY2FsbGJhY2tzIHJlYWR5LCBpbnZva2UgdGhlbS4gKi8KLQlyY3VfZG9fYmF0Y2gocmRwKTsKKwlyY3VfZG9fYmF0Y2gocnNwLCByZHApOwogfQogCiAvKgpAQCAtMTI1MSw3ICsxMzAwLDcgQEAKIAlyZHAtPm54dHRhaWxbUkNVX05FWFRfVEFJTF0gPSAmaGVhZC0+bmV4dDsKIAogCS8qIFN0YXJ0IGEgbmV3IGdyYWNlIHBlcmlvZCBpZiBvbmUgbm90IGFscmVhZHkgc3RhcnRlZC4gKi8KLQlpZiAoQUNDRVNTX09OQ0UocnNwLT5jb21wbGV0ZWQpID09IEFDQ0VTU19PTkNFKHJzcC0+Z3BudW0pKSB7CisJaWYgKCFyY3VfZ3BfaW5fcHJvZ3Jlc3MocnNwKSkgewogCQl1bnNpZ25lZCBsb25nIG5lc3RmbGFnOwogCQlzdHJ1Y3QgcmN1X25vZGUgKnJucF9yb290ID0gcmN1X2dldF9yb290KHJzcCk7CiAKQEAgLTEyNTksMTAgKzEzMDgsMjAgQEAKIAkJcmN1X3N0YXJ0X2dwKHJzcCwgbmVzdGZsYWcpOyAgLyogcmVsZWFzZXMgcm5wX3Jvb3QtPmxvY2suICovCiAJfQogCi0JLyogRm9yY2UgdGhlIGdyYWNlIHBlcmlvZCBpZiB0b28gbWFueSBjYWxsYmFja3Mgb3IgdG9vIGxvbmcgd2FpdGluZy4gKi8KLQlpZiAodW5saWtlbHkoKytyZHAtPnFsZW4gPiBxaGltYXJrKSkgeworCS8qCisJICogRm9yY2UgdGhlIGdyYWNlIHBlcmlvZCBpZiB0b28gbWFueSBjYWxsYmFja3Mgb3IgdG9vIGxvbmcgd2FpdGluZy4KKwkgKiBFbmZvcmNlIGh5c3RlcmVzaXMsIGFuZCBkb24ndCBpbnZva2UgZm9yY2VfcXVpZXNjZW50X3N0YXRlKCkKKwkgKiBpZiBzb21lIG90aGVyIENQVSBoYXMgcmVjZW50bHkgZG9uZSBzby4gIEFsc28sIGRvbid0IGJvdGhlcgorCSAqIGludm9raW5nIGZvcmNlX3F1aWVzY2VudF9zdGF0ZSgpIGlmIHRoZSBuZXdseSBlbnF1ZXVlZCBjYWxsYmFjaworCSAqIGlzIHRoZSBvbmx5IG9uZSB3YWl0aW5nIGZvciBhIGdyYWNlIHBlcmlvZCB0byBjb21wbGV0ZS4KKwkgKi8KKwlpZiAodW5saWtlbHkoKytyZHAtPnFsZW4gPiByZHAtPnFsZW5fbGFzdF9mcXNfY2hlY2sgKyBxaGltYXJrKSkgewogCQlyZHAtPmJsaW1pdCA9IExPTkdfTUFYOwotCQlmb3JjZV9xdWllc2NlbnRfc3RhdGUocnNwLCAwKTsKKwkJaWYgKHJzcC0+bl9mb3JjZV9xcyA9PSByZHAtPm5fZm9yY2VfcXNfc25hcCAmJgorCQkgICAgKnJkcC0+bnh0dGFpbFtSQ1VfRE9ORV9UQUlMXSAhPSBoZWFkKQorCQkJZm9yY2VfcXVpZXNjZW50X3N0YXRlKHJzcCwgMCk7CisJCXJkcC0+bl9mb3JjZV9xc19zbmFwID0gcnNwLT5uX2ZvcmNlX3FzOworCQlyZHAtPnFsZW5fbGFzdF9mcXNfY2hlY2sgPSByZHAtPnFsZW47CiAJfSBlbHNlIGlmICgobG9uZykoQUNDRVNTX09OQ0UocnNwLT5qaWZmaWVzX2ZvcmNlX3FzKSAtIGppZmZpZXMpIDwgMCkKIAkJZm9yY2VfcXVpZXNjZW50X3N0YXRlKHJzcCwgMSk7CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwpAQCAtMTMzMSw3ICsxMzkwLDcgQEAKIAl9CiAKIAkvKiBIYXMgYW4gUkNVIEdQIGdvbmUgbG9uZyBlbm91Z2ggdG8gc2VuZCByZXNjaGVkIElQSXMgJmM/ICovCi0JaWYgKEFDQ0VTU19PTkNFKHJzcC0+Y29tcGxldGVkKSAhPSBBQ0NFU1NfT05DRShyc3AtPmdwbnVtKSAmJgorCWlmIChyY3VfZ3BfaW5fcHJvZ3Jlc3MocnNwKSAmJgogCSAgICAoKGxvbmcpKEFDQ0VTU19PTkNFKHJzcC0+amlmZmllc19mb3JjZV9xcykgLSBqaWZmaWVzKSA8IDApKSB7CiAJCXJkcC0+bl9ycF9uZWVkX2ZxcysrOwogCQlyZXR1cm4gMTsKQEAgLTEzNjgsNiArMTQyNyw4MiBAQAogCSAgICAgICByY3VfcHJlZW1wdF9uZWVkc19jcHUoY3B1KTsKIH0KIAorc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCByY3VfaGVhZCwgcmN1X2JhcnJpZXJfaGVhZCkgPSB7TlVMTH07CitzdGF0aWMgYXRvbWljX3QgcmN1X2JhcnJpZXJfY3B1X2NvdW50Oworc3RhdGljIERFRklORV9NVVRFWChyY3VfYmFycmllcl9tdXRleCk7CitzdGF0aWMgc3RydWN0IGNvbXBsZXRpb24gcmN1X2JhcnJpZXJfY29tcGxldGlvbjsKKworc3RhdGljIHZvaWQgcmN1X2JhcnJpZXJfY2FsbGJhY2soc3RydWN0IHJjdV9oZWFkICpub3R1c2VkKQoreworCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZyY3VfYmFycmllcl9jcHVfY291bnQpKQorCQljb21wbGV0ZSgmcmN1X2JhcnJpZXJfY29tcGxldGlvbik7Cit9CisKKy8qCisgKiBDYWxsZWQgd2l0aCBwcmVlbXB0aW9uIGRpc2FibGVkLCBhbmQgZnJvbSBjcm9zcy1jcHUgSVJRIGNvbnRleHQuCisgKi8KK3N0YXRpYyB2b2lkIHJjdV9iYXJyaWVyX2Z1bmModm9pZCAqdHlwZSkKK3sKKwlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCXN0cnVjdCByY3VfaGVhZCAqaGVhZCA9ICZwZXJfY3B1KHJjdV9iYXJyaWVyX2hlYWQsIGNwdSk7CisJdm9pZCAoKmNhbGxfcmN1X2Z1bmMpKHN0cnVjdCByY3VfaGVhZCAqaGVhZCwKKwkJCSAgICAgIHZvaWQgKCpmdW5jKShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpKTsKKworCWF0b21pY19pbmMoJnJjdV9iYXJyaWVyX2NwdV9jb3VudCk7CisJY2FsbF9yY3VfZnVuYyA9IHR5cGU7CisJY2FsbF9yY3VfZnVuYyhoZWFkLCByY3VfYmFycmllcl9jYWxsYmFjayk7Cit9CisKKy8qCisgKiBPcmNoZXN0cmF0ZSB0aGUgc3BlY2lmaWVkIHR5cGUgb2YgUkNVIGJhcnJpZXIsIHdhaXRpbmcgZm9yIGFsbAorICogUkNVIGNhbGxiYWNrcyBvZiB0aGUgc3BlY2lmaWVkIHR5cGUgdG8gY29tcGxldGUuCisgKi8KK3N0YXRpYyB2b2lkIF9yY3VfYmFycmllcihzdHJ1Y3QgcmN1X3N0YXRlICpyc3AsCisJCQkgdm9pZCAoKmNhbGxfcmN1X2Z1bmMpKHN0cnVjdCByY3VfaGVhZCAqaGVhZCwKKwkJCQkJICAgICAgIHZvaWQgKCpmdW5jKShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpKSkKK3sKKwlCVUdfT04oaW5faW50ZXJydXB0KCkpOworCS8qIFRha2UgbXV0ZXggdG8gc2VyaWFsaXplIGNvbmN1cnJlbnQgcmN1X2JhcnJpZXIoKSByZXF1ZXN0cy4gKi8KKwltdXRleF9sb2NrKCZyY3VfYmFycmllcl9tdXRleCk7CisJaW5pdF9jb21wbGV0aW9uKCZyY3VfYmFycmllcl9jb21wbGV0aW9uKTsKKwkvKgorCSAqIEluaXRpYWxpemUgcmN1X2JhcnJpZXJfY3B1X2NvdW50IHRvIDEsIHRoZW4gaW52b2tlCisJICogcmN1X2JhcnJpZXJfZnVuYygpIG9uIGVhY2ggQ1BVLCBzbyB0aGF0IGVhY2ggQ1BVIGFsc28gaGFzCisJICogaW5jcmVtZW50ZWQgcmN1X2JhcnJpZXJfY3B1X2NvdW50LiAgT25seSB0aGVuIGlzIGl0IHNhZmUgdG8KKwkgKiBkZWNyZW1lbnQgcmN1X2JhcnJpZXJfY3B1X2NvdW50IC0tIG90aGVyd2lzZSB0aGUgZmlyc3QgQ1BVCisJICogbWlnaHQgY29tcGxldGUgaXRzIGdyYWNlIHBlcmlvZCBiZWZvcmUgYWxsIG9mIHRoZSBvdGhlciBDUFVzCisJICogZGlkIHRoZWlyIGluY3JlbWVudCwgY2F1c2luZyB0aGlzIGZ1bmN0aW9uIHRvIHJldHVybiB0b28KKwkgKiBlYXJseS4KKwkgKi8KKwlhdG9taWNfc2V0KCZyY3VfYmFycmllcl9jcHVfY291bnQsIDEpOworCXByZWVtcHRfZGlzYWJsZSgpOyAvKiBzdG9wIENQVV9EWUlORyBmcm9tIGZpbGxpbmcgb3JwaGFuX2Nic19saXN0ICovCisJcmN1X2Fkb3B0X29ycGhhbl9jYnMocnNwKTsKKwlvbl9lYWNoX2NwdShyY3VfYmFycmllcl9mdW5jLCAodm9pZCAqKWNhbGxfcmN1X2Z1bmMsIDEpOworCXByZWVtcHRfZW5hYmxlKCk7IC8qIENQVV9EWUlORyBjYW4gYWdhaW4gZmlsbCBvcnBoYW5fY2JzX2xpc3QgKi8KKwlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmcmN1X2JhcnJpZXJfY3B1X2NvdW50KSkKKwkJY29tcGxldGUoJnJjdV9iYXJyaWVyX2NvbXBsZXRpb24pOworCXdhaXRfZm9yX2NvbXBsZXRpb24oJnJjdV9iYXJyaWVyX2NvbXBsZXRpb24pOworCW11dGV4X3VubG9jaygmcmN1X2JhcnJpZXJfbXV0ZXgpOworfQorCisvKioKKyAqIHJjdV9iYXJyaWVyX2JoIC0gV2FpdCB1bnRpbCBhbGwgaW4tZmxpZ2h0IGNhbGxfcmN1X2JoKCkgY2FsbGJhY2tzIGNvbXBsZXRlLgorICovCit2b2lkIHJjdV9iYXJyaWVyX2JoKHZvaWQpCit7CisJX3JjdV9iYXJyaWVyKCZyY3VfYmhfc3RhdGUsIGNhbGxfcmN1X2JoKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHJjdV9iYXJyaWVyX2JoKTsKKworLyoqCisgKiByY3VfYmFycmllcl9zY2hlZCAtIFdhaXQgZm9yIGluLWZsaWdodCBjYWxsX3JjdV9zY2hlZCgpIGNhbGxiYWNrcy4KKyAqLwordm9pZCByY3VfYmFycmllcl9zY2hlZCh2b2lkKQoreworCV9yY3VfYmFycmllcigmcmN1X3NjaGVkX3N0YXRlLCBjYWxsX3JjdV9zY2hlZCk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChyY3VfYmFycmllcl9zY2hlZCk7CisKIC8qCiAgKiBEbyBib290LXRpbWUgaW5pdGlhbGl6YXRpb24gb2YgYSBDUFUncyBwZXItQ1BVIFJDVSBkYXRhLgogICovCkBAIC0xNDE4LDYgKzE1NTMsOCBAQAogCXJkcC0+YmVlbm9ubGluZSA9IDE7CSAvKiBXZSBoYXZlIG5vdyBiZWVuIG9ubGluZS4gKi8KIAlyZHAtPnByZWVtcHRhYmxlID0gcHJlZW1wdGFibGU7CiAJcmRwLT5wYXNzZWRfcXVpZXNjX2NvbXBsZXRlZCA9IGxhc3Rjb21wIC0gMTsKKwlyZHAtPnFsZW5fbGFzdF9mcXNfY2hlY2sgPSAwOworCXJkcC0+bl9mb3JjZV9xc19zbmFwID0gcnNwLT5uX2ZvcmNlX3FzOwogCXJkcC0+YmxpbWl0ID0gYmxpbWl0OwogCXNwaW5fdW5sb2NrKCZybnAtPmxvY2spOwkJLyogaXJxcyByZW1haW4gZGlzYWJsZWQuICovCiAKQEAgLTE0NjQsNiArMTYwMSwyMiBAQAogCWNhc2UgQ1BVX1VQX1BSRVBBUkVfRlJPWkVOOgogCQlyY3Vfb25saW5lX2NwdShjcHUpOwogCQlicmVhazsKKwljYXNlIENQVV9EWUlORzoKKwljYXNlIENQVV9EWUlOR19GUk9aRU46CisJCS8qCisJCSAqIHByZWVtcHRfZGlzYWJsZSgpIGluIF9yY3VfYmFycmllcigpIHByZXZlbnRzIHN0b3BfbWFjaGluZSgpLAorCQkgKiBzbyB3aGVuICJvbl9lYWNoX2NwdShyY3VfYmFycmllcl9mdW5jLCAodm9pZCAqKXR5cGUsIDEpOyIKKwkJICogcmV0dXJucywgYWxsIG9ubGluZSBjcHVzIGhhdmUgcXVldWVkIHJjdV9iYXJyaWVyX2Z1bmMoKS4KKwkJICogVGhlIGR5aW5nIENQVSBjbGVhcnMgaXRzIGNwdV9vbmxpbmVfbWFzayBiaXQgYW5kCisJCSAqIG1vdmVzIGFsbCBvZiBpdHMgUkNVIGNhbGxiYWNrcyB0byAtPm9ycGhhbl9jYnNfbGlzdAorCQkgKiBpbiB0aGUgY29udGV4dCBvZiBzdG9wX21hY2hpbmUoKSwgc28gc3Vic2VxdWVudCBjYWxscworCQkgKiB0byBfcmN1X2JhcnJpZXIoKSB3aWxsIGFkb3B0IHRoZXNlIGNhbGxiYWNrcyBhbmQgb25seQorCQkgKiB0aGVuIHF1ZXVlIHJjdV9iYXJyaWVyX2Z1bmMoKSBvbiBhbGwgcmVtYWluaW5nIENQVXMuCisJCSAqLworCQlyY3Vfc2VuZF9jYnNfdG9fb3JwaGFuYWdlKCZyY3VfYmhfc3RhdGUpOworCQlyY3Vfc2VuZF9jYnNfdG9fb3JwaGFuYWdlKCZyY3Vfc2NoZWRfc3RhdGUpOworCQlyY3VfcHJlZW1wdF9zZW5kX2Nic190b19vcnBoYW5hZ2UoKTsKKwkJYnJlYWs7CiAJY2FzZSBDUFVfREVBRDoKIAljYXNlIENQVV9ERUFEX0ZST1pFTjoKIAljYXNlIENQVV9VUF9DQU5DRUxFRDoKQEAgLTE1MjYsNyArMTY3OSw4IEBACiAJCWNwdXN0cmlkZSAqPSByc3AtPmxldmVsc3ByZWFkW2ldOwogCQlybnAgPSByc3AtPmxldmVsW2ldOwogCQlmb3IgKGogPSAwOyBqIDwgcnNwLT5sZXZlbGNudFtpXTsgaisrLCBybnArKykgewotCQkJc3Bpbl9sb2NrX2luaXQoJnJucC0+bG9jayk7CisJCQlpZiAocm5wICE9IHJjdV9nZXRfcm9vdChyc3ApKQorCQkJCXNwaW5fbG9ja19pbml0KCZybnAtPmxvY2spOwogCQkJcm5wLT5ncG51bSA9IDA7CiAJCQlybnAtPnFzbWFzayA9IDA7CiAJCQlybnAtPnFzbWFza2luaXQgPSAwOwpAQCAtMTU0OSw2ICsxNzAzLDcgQEAKIAkJCUlOSVRfTElTVF9IRUFEKCZybnAtPmJsb2NrZWRfdGFza3NbMV0pOwogCQl9CiAJfQorCXNwaW5fbG9ja19pbml0KCZyY3VfZ2V0X3Jvb3QocnNwKS0+bG9jayk7CiB9CiAKIC8qCkBAIC0xNTU4LDYgKzE3MTMsMTAgQEAKICAqLwogI2RlZmluZSBSQ1VfSU5JVF9GTEFWT1IocnNwLCByY3VfZGF0YSkgXAogZG8geyBcCisJaW50IGk7IFwKKwlpbnQgajsgXAorCXN0cnVjdCByY3Vfbm9kZSAqcm5wOyBcCisJXAogCXJjdV9pbml0X29uZShyc3ApOyBcCiAJcm5wID0gKHJzcCktPmxldmVsW05VTV9SQ1VfTFZMUyAtIDFdOyBcCiAJaiA9IDA7IFwKQEAgLTE1NzAsMzEgKzE3MjksOCBAQAogCX0gXAogfSB3aGlsZSAoMCkKIAotI2lmZGVmIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVCi0KLXZvaWQgX19pbml0IF9fcmN1X2luaXRfcHJlZW1wdCh2b2lkKQotewotCWludCBpOwkJCS8qIEFsbCB1c2VkIGJ5IFJDVV9JTklUX0ZMQVZPUigpLiAqLwotCWludCBqOwotCXN0cnVjdCByY3Vfbm9kZSAqcm5wOwotCi0JUkNVX0lOSVRfRkxBVk9SKCZyY3VfcHJlZW1wdF9zdGF0ZSwgcmN1X3ByZWVtcHRfZGF0YSk7Ci19Ci0KLSNlbHNlIC8qICNpZmRlZiBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSAqLwotCi12b2lkIF9faW5pdCBfX3JjdV9pbml0X3ByZWVtcHQodm9pZCkKLXsKLX0KLQotI2VuZGlmIC8qICNlbHNlICNpZmRlZiBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSAqLwotCiB2b2lkIF9faW5pdCBfX3JjdV9pbml0KHZvaWQpCiB7Ci0JaW50IGk7CQkJLyogQWxsIHVzZWQgYnkgUkNVX0lOSVRfRkxBVk9SKCkuICovCi0JaW50IGo7Ci0Jc3RydWN0IHJjdV9ub2RlICpybnA7Ci0KIAlyY3VfYm9vdHVwX2Fubm91bmNlKCk7CiAjaWZkZWYgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IKIAlwcmludGsoS0VSTl9JTkZPICJSQ1UtYmFzZWQgZGV0ZWN0aW9uIG9mIHN0YWxsZWQgQ1BVcyBpcyBlbmFibGVkLlxuIik7CkBAIC0xNjA1LDYgKzE3NDEsNCBAQAogCW9wZW5fc29mdGlycShSQ1VfU09GVElSUSwgcmN1X3Byb2Nlc3NfY2FsbGJhY2tzKTsKIH0KIAotbW9kdWxlX3BhcmFtKGJsaW1pdCwgaW50LCAwKTsKLW1vZHVsZV9wYXJhbShxaGltYXJrLCBpbnQsIDApOwotbW9kdWxlX3BhcmFtKHFsb3dtYXJrLCBpbnQsIDApOworI2luY2x1ZGUgInJjdXRyZWVfcGx1Z2luLmgiCmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1dHJlZS5oIGIva2VybmVsL3JjdXRyZWUuaAppbmRleCA4ZTgyODdhLi4xODIzYzZlIDEwMDY0NAotLS0gYS9rZXJuZWwvcmN1dHJlZS5oCisrKyBiL2tlcm5lbC9yY3V0cmVlLmgKQEAgLTQ4LDE0ICs0OCwxNCBAQAogI2VsaWYgTlJfQ1BVUyA8PSBSQ1VfRkFOT1VUX1NRCiAjICBkZWZpbmUgTlVNX1JDVV9MVkxTCSAgICAgIDIKICMgIGRlZmluZSBOVU1fUkNVX0xWTF8wCSAgICAgIDEKLSMgIGRlZmluZSBOVU1fUkNVX0xWTF8xCSAgICAgICgoKE5SX0NQVVMpICsgUkNVX0ZBTk9VVCAtIDEpIC8gUkNVX0ZBTk9VVCkKKyMgIGRlZmluZSBOVU1fUkNVX0xWTF8xCSAgICAgIERJVl9ST1VORF9VUChOUl9DUFVTLCBSQ1VfRkFOT1VUKQogIyAgZGVmaW5lIE5VTV9SQ1VfTFZMXzIJICAgICAgKE5SX0NQVVMpCiAjICBkZWZpbmUgTlVNX1JDVV9MVkxfMwkgICAgICAwCiAjZWxpZiBOUl9DUFVTIDw9IFJDVV9GQU5PVVRfQ1VCRQogIyAgZGVmaW5lIE5VTV9SQ1VfTFZMUwkgICAgICAzCiAjICBkZWZpbmUgTlVNX1JDVV9MVkxfMAkgICAgICAxCi0jICBkZWZpbmUgTlVNX1JDVV9MVkxfMQkgICAgICAoKChOUl9DUFVTKSArIFJDVV9GQU5PVVRfU1EgLSAxKSAvIFJDVV9GQU5PVVRfU1EpCi0jICBkZWZpbmUgTlVNX1JDVV9MVkxfMgkgICAgICAoKChOUl9DUFVTKSArIChSQ1VfRkFOT1VUKSAtIDEpIC8gKFJDVV9GQU5PVVQpKQorIyAgZGVmaW5lIE5VTV9SQ1VfTFZMXzEJICAgICAgRElWX1JPVU5EX1VQKE5SX0NQVVMsIFJDVV9GQU5PVVRfU1EpCisjICBkZWZpbmUgTlVNX1JDVV9MVkxfMgkgICAgICBESVZfUk9VTkRfVVAoTlJfQ1BVUywgUkNVX0ZBTk9VVCkKICMgIGRlZmluZSBOVU1fUkNVX0xWTF8zCSAgICAgIE5SX0NQVVMKICNlbHNlCiAjIGVycm9yICJDT05GSUdfUkNVX0ZBTk9VVCBpbnN1ZmZpY2llbnQgZm9yIE5SX0NQVVMiCkBAIC03OSwxNSArNzksMjEgQEAKICAqIERlZmluaXRpb24gZm9yIG5vZGUgd2l0aGluIHRoZSBSQ1UgZ3JhY2UtcGVyaW9kLWRldGVjdGlvbiBoaWVyYXJjaHkuCiAgKi8KIHN0cnVjdCByY3Vfbm9kZSB7Ci0Jc3BpbmxvY2tfdCBsb2NrOworCXNwaW5sb2NrX3QgbG9jazsJLyogUm9vdCByY3Vfbm9kZSdzIGxvY2sgcHJvdGVjdHMgc29tZSAqLworCQkJCS8qICByY3Vfc3RhdGUgZmllbGRzIGFzIHdlbGwgYXMgZm9sbG93aW5nLiAqLwogCWxvbmcJZ3BudW07CQkvKiBDdXJyZW50IGdyYWNlIHBlcmlvZCBmb3IgdGhpcyBub2RlLiAqLwogCQkJCS8qICBUaGlzIHdpbGwgZWl0aGVyIGJlIGVxdWFsIHRvIG9yIG9uZSAqLwogCQkJCS8qICBiZWhpbmQgdGhlIHJvb3QgcmN1X25vZGUncyBncG51bS4gKi8KIAl1bnNpZ25lZCBsb25nIHFzbWFzazsJLyogQ1BVcyBvciBncm91cHMgdGhhdCBuZWVkIHRvIHN3aXRjaCBpbiAqLwogCQkJCS8qICBvcmRlciBmb3IgY3VycmVudCBncmFjZSBwZXJpb2QgdG8gcHJvY2VlZC4qLworCQkJCS8qICBJbiBsZWFmIHJjdV9ub2RlLCBlYWNoIGJpdCBjb3JyZXNwb25kcyB0byAqLworCQkJCS8qICBhbiByY3VfZGF0YSBzdHJ1Y3R1cmUsIG90aGVyd2lzZSwgZWFjaCAqLworCQkJCS8qICBiaXQgY29ycmVzcG9uZHMgdG8gYSBjaGlsZCByY3Vfbm9kZSAqLworCQkJCS8qICBzdHJ1Y3R1cmUuICovCiAJdW5zaWduZWQgbG9uZyBxc21hc2tpbml0OwogCQkJCS8qIFBlci1HUCBpbml0aWFsaXphdGlvbiBmb3IgcXNtYXNrLiAqLwogCXVuc2lnbmVkIGxvbmcgZ3JwbWFzazsJLyogTWFzayB0byBhcHBseSB0byBwYXJlbnQgcXNtYXNrLiAqLworCQkJCS8qICBPbmx5IG9uZSBiaXQgd2lsbCBiZSBzZXQgaW4gdGhpcyBtYXNrLiAqLwogCWludAlncnBsbzsJCS8qIGxvd2VzdC1udW1iZXJlZCBDUFUgb3IgZ3JvdXAgaGVyZS4gKi8KIAlpbnQJZ3JwaGk7CQkvKiBoaWdoZXN0LW51bWJlcmVkIENQVSBvciBncm91cCBoZXJlLiAqLwogCXU4CWdycG51bTsJCS8qIENQVS9ncm91cCBudW1iZXIgZm9yIG5leHQgbGV2ZWwgdXAuICovCkBAIC05NSw4ICsxMDEsMjMgQEAKIAlzdHJ1Y3QgcmN1X25vZGUgKnBhcmVudDsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGJsb2NrZWRfdGFza3NbMl07CiAJCQkJLyogVGFza3MgYmxvY2tlZCBpbiBSQ1UgcmVhZC1zaWRlIGNyaXRzZWN0LiAqLworCQkJCS8qICBHcmFjZSBwZXJpb2QgbnVtYmVyICgtPmdwbnVtKSB4IGJsb2NrZWQgKi8KKwkJCQkvKiAgYnkgdGFza3Mgb24gdGhlICh4ICYgMHgxKSBlbGVtZW50IG9mIHRoZSAqLworCQkJCS8qICBibG9ja2VkX3Rhc2tzW10gYXJyYXkuICovCiB9IF9fX19jYWNoZWxpbmVfaW50ZXJub2RlYWxpZ25lZF9pbl9zbXA7CiAKKy8qCisgKiBEbyBhIGZ1bGwgYnJlYWR0aC1maXJzdCBzY2FuIG9mIHRoZSByY3Vfbm9kZSBzdHJ1Y3R1cmVzIGZvciB0aGUKKyAqIHNwZWNpZmllZCByY3Vfc3RhdGUgc3RydWN0dXJlLgorICovCisjZGVmaW5lIHJjdV9mb3JfZWFjaF9ub2RlX2JyZWFkdGhfZmlyc3QocnNwLCBybnApIFwKKwlmb3IgKChybnApID0gJihyc3ApLT5ub2RlWzBdOyBcCisJICAgICAocm5wKSA8ICYocnNwKS0+bm9kZVtOVU1fUkNVX05PREVTXTsgKHJucCkrKykKKworI2RlZmluZSByY3VfZm9yX2VhY2hfbGVhZl9ub2RlKHJzcCwgcm5wKSBcCisJZm9yICgocm5wKSA9IChyc3ApLT5sZXZlbFtOVU1fUkNVX0xWTFMgLSAxXTsgXAorCSAgICAgKHJucCkgPCAmKHJzcCktPm5vZGVbTlVNX1JDVV9OT0RFU107IChybnApKyspCisKIC8qIEluZGV4IHZhbHVlcyBmb3Igbnh0dGFpbCBhcnJheSBpbiBzdHJ1Y3QgcmN1X2RhdGEuICovCiAjZGVmaW5lIFJDVV9ET05FX1RBSUwJCTAJLyogQWxzbyBSQ1VfV0FJVCBoZWFkLiAqLwogI2RlZmluZSBSQ1VfV0FJVF9UQUlMCQkxCS8qIEFsc28gUkNVX05FWFRfUkVBRFkgaGVhZC4gKi8KQEAgLTEyNiwyMyArMTQ3LDMwIEBACiAJICogQW55IG9mIHRoZSBwYXJ0aXRpb25zIG1pZ2h0IGJlIGVtcHR5LCBpbiB3aGljaCBjYXNlIHRoZQogCSAqIHBvaW50ZXIgdG8gdGhhdCBwYXJ0aXRpb24gd2lsbCBiZSBlcXVhbCB0byB0aGUgcG9pbnRlciBmb3IKIAkgKiB0aGUgZm9sbG93aW5nIHBhcnRpdGlvbi4gIFdoZW4gdGhlIGxpc3QgaXMgZW1wdHksIGFsbCBvZgotCSAqIHRoZSBueHR0YWlsIGVsZW1lbnRzIHBvaW50IHRvIG54dGxpc3QsIHdoaWNoIGlzIE5VTEwuCisJICogdGhlIG54dHRhaWwgZWxlbWVudHMgcG9pbnQgdG8gdGhlIC0+bnh0bGlzdCBwb2ludGVyIGl0c2VsZiwKKwkgKiB3aGljaCBpbiB0aGF0IGNhc2UgaXMgTlVMTC4KIAkgKgotCSAqIFsqbnh0dGFpbFtSQ1VfTkVYVF9SRUFEWV9UQUlMXSwgTlVMTCA9ICpueHR0YWlsW1JDVV9ORVhUX1RBSUxdKToKLQkgKglFbnRyaWVzIHRoYXQgbWlnaHQgaGF2ZSBhcnJpdmVkIGFmdGVyIGN1cnJlbnQgR1AgZW5kZWQKLQkgKiBbKm54dHRhaWxbUkNVX1dBSVRfVEFJTF0sICpueHR0YWlsW1JDVV9ORVhUX1JFQURZX1RBSUxdKToKLQkgKglFbnRyaWVzIGtub3duIHRvIGhhdmUgYXJyaXZlZCBiZWZvcmUgY3VycmVudCBHUCBlbmRlZAotCSAqIFsqbnh0dGFpbFtSQ1VfRE9ORV9UQUlMXSwgKm54dHRhaWxbUkNVX1dBSVRfVEFJTF0pOgotCSAqCUVudHJpZXMgdGhhdCBiYXRjaCAjIDw9IC0+Y29tcGxldGVkIC0gMTogd2FpdGluZyBmb3IgY3VycmVudCBHUAogCSAqIFtueHRsaXN0LCAqbnh0dGFpbFtSQ1VfRE9ORV9UQUlMXSk6CiAJICoJRW50cmllcyB0aGF0IGJhdGNoICMgPD0gLT5jb21wbGV0ZWQKIAkgKglUaGUgZ3JhY2UgcGVyaW9kIGZvciB0aGVzZSBlbnRyaWVzIGhhcyBjb21wbGV0ZWQsIGFuZAogCSAqCXRoZSBvdGhlciBncmFjZS1wZXJpb2QtY29tcGxldGVkIGVudHJpZXMgbWF5IGJlIG1vdmVkCiAJICoJaGVyZSB0ZW1wb3JhcmlseSBpbiByY3VfcHJvY2Vzc19jYWxsYmFja3MoKS4KKwkgKiBbKm54dHRhaWxbUkNVX0RPTkVfVEFJTF0sICpueHR0YWlsW1JDVV9XQUlUX1RBSUxdKToKKwkgKglFbnRyaWVzIHRoYXQgYmF0Y2ggIyA8PSAtPmNvbXBsZXRlZCAtIDE6IHdhaXRpbmcgZm9yIGN1cnJlbnQgR1AKKwkgKiBbKm54dHRhaWxbUkNVX1dBSVRfVEFJTF0sICpueHR0YWlsW1JDVV9ORVhUX1JFQURZX1RBSUxdKToKKwkgKglFbnRyaWVzIGtub3duIHRvIGhhdmUgYXJyaXZlZCBiZWZvcmUgY3VycmVudCBHUCBlbmRlZAorCSAqIFsqbnh0dGFpbFtSQ1VfTkVYVF9SRUFEWV9UQUlMXSwgKm54dHRhaWxbUkNVX05FWFRfVEFJTF0pOgorCSAqCUVudHJpZXMgdGhhdCBtaWdodCBoYXZlIGFycml2ZWQgYWZ0ZXIgY3VycmVudCBHUCBlbmRlZAorCSAqCU5vdGUgdGhhdCB0aGUgdmFsdWUgb2YgKm54dHRhaWxbUkNVX05FWFRfVEFJTF0gd2lsbAorCSAqCWFsd2F5cyBiZSBOVUxMLCBhcyB0aGlzIGlzIHRoZSBlbmQgb2YgdGhlIGxpc3QuCiAJICovCiAJc3RydWN0IHJjdV9oZWFkICpueHRsaXN0OwogCXN0cnVjdCByY3VfaGVhZCAqKm54dHRhaWxbUkNVX05FWFRfU0laRV07CiAJbG9uZwkJcWxlbjsJCS8qICMgb2YgcXVldWVkIGNhbGxiYWNrcyAqLworCWxvbmcJCXFsZW5fbGFzdF9mcXNfY2hlY2s7CisJCQkJCS8qIHFsZW4gYXQgbGFzdCBjaGVjayBmb3IgUVMgZm9yY2luZyAqLworCXVuc2lnbmVkIGxvbmcJbl9mb3JjZV9xc19zbmFwOworCQkJCQkvKiBkaWQgb3RoZXIgQ1BVIGZvcmNlIFFTIHJlY2VudGx5PyAqLwogCWxvbmcJCWJsaW1pdDsJCS8qIFVwcGVyIGxpbWl0IG9uIGEgcHJvY2Vzc2VkIGJhdGNoICovCiAKICNpZmRlZiBDT05GSUdfTk9fSFoKQEAgLTIxNiw4ICsyNDQsMTkgQEAKIAkJCQkJCS8qIEZvcmNlIFFTIHN0YXRlLiAqLwogCWxvbmcJZ3BudW07CQkJCS8qIEN1cnJlbnQgZ3AgbnVtYmVyLiAqLwogCWxvbmcJY29tcGxldGVkOwkJCS8qICMgb2YgbGFzdCBjb21wbGV0ZWQgZ3AuICovCisKKwkvKiBFbmQgIG9mIGZpZWxkcyBndWFyZGVkIGJ5IHJvb3QgcmN1X25vZGUncyBsb2NrLiAqLworCiAJc3BpbmxvY2tfdCBvbm9mZmxvY2s7CQkJLyogZXhjbHVkZSBvbi9vZmZsaW5lIGFuZCAqLwotCQkJCQkJLyogIHN0YXJ0aW5nIG5ldyBHUC4gKi8KKwkJCQkJCS8qICBzdGFydGluZyBuZXcgR1AuICBBbHNvICovCisJCQkJCQkvKiAgcHJvdGVjdHMgdGhlIGZvbGxvd2luZyAqLworCQkJCQkJLyogIG9ycGhhbl9jYnMgZmllbGRzLiAqLworCXN0cnVjdCByY3VfaGVhZCAqb3JwaGFuX2Nic19saXN0OwkvKiBsaXN0IG9mIHJjdV9oZWFkIHN0cnVjdHMgKi8KKwkJCQkJCS8qICBvcnBoYW5lZCBieSBhbGwgQ1BVcyBpbiAqLworCQkJCQkJLyogIGEgZ2l2ZW4gbGVhZiByY3Vfbm9kZSAqLworCQkJCQkJLyogIGdvaW5nIG9mZmxpbmUuICovCisJc3RydWN0IHJjdV9oZWFkICoqb3JwaGFuX2Nic190YWlsOwkvKiBBbmQgdGFpbCBwb2ludGVyLiAqLworCWxvbmcgb3JwaGFuX3FsZW47CQkJLyogTnVtYmVyIG9mIG9ycGhhbmVkIGNicy4gKi8KIAlzcGlubG9ja190IGZxc2xvY2s7CQkJLyogT25seSBvbmUgdGFzayBmb3JjaW5nICovCiAJCQkJCQkvKiAgcXVpZXNjZW50IHN0YXRlcy4gKi8KIAl1bnNpZ25lZCBsb25nIGppZmZpZXNfZm9yY2VfcXM7CQkvKiBUaW1lIGF0IHdoaWNoIHRvIGludm9rZSAqLwpAQCAtMjU1LDUgKzI5NCwzMCBAQAogREVDTEFSRV9QRVJfQ1BVKHN0cnVjdCByY3VfZGF0YSwgcmN1X3ByZWVtcHRfZGF0YSk7CiAjZW5kaWYgLyogI2lmZGVmIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVICovCiAKLSNlbmRpZiAvKiAjaWZkZWYgUkNVX1RSRUVfTk9OQ09SRSAqLworI2Vsc2UgLyogI2lmZGVmIFJDVV9UUkVFX05PTkNPUkUgKi8KIAorLyogRm9yd2FyZCBkZWNsYXJhdGlvbnMgZm9yIHJjdXRyZWVfcGx1Z2luLmggKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCByY3VfYm9vdHVwX2Fubm91bmNlKHZvaWQpOworbG9uZyByY3VfYmF0Y2hlc19jb21wbGV0ZWQodm9pZCk7CitzdGF0aWMgdm9pZCByY3VfcHJlZW1wdF9ub3RlX2NvbnRleHRfc3dpdGNoKGludCBjcHUpOworc3RhdGljIGludCByY3VfcHJlZW1wdGVkX3JlYWRlcnMoc3RydWN0IHJjdV9ub2RlICpybnApOworI2lmZGVmIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SCitzdGF0aWMgdm9pZCByY3VfcHJpbnRfdGFza19zdGFsbChzdHJ1Y3QgcmN1X25vZGUgKnJucCk7CisjZW5kaWYgLyogI2lmZGVmIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SICovCitzdGF0aWMgdm9pZCByY3VfcHJlZW1wdF9jaGVja19ibG9ja2VkX3Rhc2tzKHN0cnVjdCByY3Vfbm9kZSAqcm5wKTsKKyNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKK3N0YXRpYyBpbnQgcmN1X3ByZWVtcHRfb2ZmbGluZV90YXNrcyhzdHJ1Y3QgcmN1X3N0YXRlICpyc3AsCisJCQkJICAgICBzdHJ1Y3QgcmN1X25vZGUgKnJucCwKKwkJCQkgICAgIHN0cnVjdCByY3VfZGF0YSAqcmRwKTsKK3N0YXRpYyB2b2lkIHJjdV9wcmVlbXB0X29mZmxpbmVfY3B1KGludCBjcHUpOworI2VuZGlmIC8qICNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUgKi8KK3N0YXRpYyB2b2lkIHJjdV9wcmVlbXB0X2NoZWNrX2NhbGxiYWNrcyhpbnQgY3B1KTsKK3N0YXRpYyB2b2lkIHJjdV9wcmVlbXB0X3Byb2Nlc3NfY2FsbGJhY2tzKHZvaWQpOwordm9pZCBjYWxsX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQsIHZvaWQgKCpmdW5jKShzdHJ1Y3QgcmN1X2hlYWQgKnJjdSkpOworc3RhdGljIGludCByY3VfcHJlZW1wdF9wZW5kaW5nKGludCBjcHUpOworc3RhdGljIGludCByY3VfcHJlZW1wdF9uZWVkc19jcHUoaW50IGNwdSk7CitzdGF0aWMgdm9pZCBfX2NwdWluaXQgcmN1X3ByZWVtcHRfaW5pdF9wZXJjcHVfZGF0YShpbnQgY3B1KTsKK3N0YXRpYyB2b2lkIHJjdV9wcmVlbXB0X3NlbmRfY2JzX3RvX29ycGhhbmFnZSh2b2lkKTsKK3N0YXRpYyB2b2lkIF9faW5pdCBfX3JjdV9pbml0X3ByZWVtcHQodm9pZCk7CisKKyNlbmRpZiAvKiAjZWxzZSAjaWZkZWYgUkNVX1RSRUVfTk9OQ09SRSAqLwpkaWZmIC0tZ2l0IGEva2VybmVsL3JjdXRyZWVfcGx1Z2luLmggYi9rZXJuZWwvcmN1dHJlZV9wbHVnaW4uaAppbmRleCAxY2VlMDRmLi5lZjJhNThjIDEwMDY0NAotLS0gYS9rZXJuZWwvcmN1dHJlZV9wbHVnaW4uaAorKysgYi9rZXJuZWwvcmN1dHJlZV9wbHVnaW4uaApAQCAtMTUwLDYgKzE1MCwxNiBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoX19yY3VfcmVhZF9sb2NrKTsKIAorLyoKKyAqIENoZWNrIGZvciBwcmVlbXB0ZWQgUkNVIHJlYWRlcnMgYmxvY2tpbmcgdGhlIGN1cnJlbnQgZ3JhY2UgcGVyaW9kCisgKiBmb3IgdGhlIHNwZWNpZmllZCByY3Vfbm9kZSBzdHJ1Y3R1cmUuICBJZiB0aGUgY2FsbGVyIG5lZWRzIGEgcmVsaWFibGUKKyAqIGFuc3dlciwgaXQgbXVzdCBob2xkIHRoZSByY3Vfbm9kZSdzIC0+bG9jay4KKyAqLworc3RhdGljIGludCByY3VfcHJlZW1wdGVkX3JlYWRlcnMoc3RydWN0IHJjdV9ub2RlICpybnApCit7CisJcmV0dXJuICFsaXN0X2VtcHR5KCZybnAtPmJsb2NrZWRfdGFza3Nbcm5wLT5ncG51bSAmIDB4MV0pOworfQorCiBzdGF0aWMgdm9pZCByY3VfcmVhZF91bmxvY2tfc3BlY2lhbChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpCiB7CiAJaW50IGVtcHR5OwpAQCAtMTk2LDcgKzIwNiw3IEBACiAJCQkJYnJlYWs7CiAJCQlzcGluX3VubG9jaygmcm5wLT5sb2NrKTsgIC8qIGlycXMgcmVtYWluIGRpc2FibGVkLiAqLwogCQl9Ci0JCWVtcHR5ID0gbGlzdF9lbXB0eSgmcm5wLT5ibG9ja2VkX3Rhc2tzW3JucC0+Z3BudW0gJiAweDFdKTsKKwkJZW1wdHkgPSAhcmN1X3ByZWVtcHRlZF9yZWFkZXJzKHJucCk7CiAJCWxpc3RfZGVsX2luaXQoJnQtPnJjdV9ub2RlX2VudHJ5KTsKIAkJdC0+cmN1X2Jsb2NrZWRfbm9kZSA9IE5VTEw7CiAKQEAgLTIwNyw3ICsyMTcsNyBAQAogCQkgKiBkcm9wIHJucC0+bG9jayBhbmQgcmVzdG9yZSBpcnEuCiAJCSAqLwogCQlpZiAoIWVtcHR5ICYmIHJucC0+cXNtYXNrID09IDAgJiYKLQkJICAgIGxpc3RfZW1wdHkoJnJucC0+YmxvY2tlZF90YXNrc1tybnAtPmdwbnVtICYgMHgxXSkpIHsKKwkJICAgICFyY3VfcHJlZW1wdGVkX3JlYWRlcnMocm5wKSkgewogCQkJc3RydWN0IHJjdV9ub2RlICpybnBfcDsKIAogCQkJaWYgKHJucC0+cGFyZW50ID09IE5VTEwpIHsKQEAgLTI1NywxMiArMjY3LDEyIEBACiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpscDsKLQlpbnQgcGhhc2UgPSBybnAtPmdwbnVtICYgMHgxOworCWludCBwaGFzZTsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQ7CiAKLQlpZiAoIWxpc3RfZW1wdHkoJnJucC0+YmxvY2tlZF90YXNrc1twaGFzZV0pKSB7CisJaWYgKHJjdV9wcmVlbXB0ZWRfcmVhZGVycyhybnApKSB7CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZybnAtPmxvY2ssIGZsYWdzKTsKLQkJcGhhc2UgPSBybnAtPmdwbnVtICYgMHgxOyAvKiByZS1yZWFkIHVuZGVyIGxvY2suICovCisJCXBoYXNlID0gcm5wLT5ncG51bSAmIDB4MTsKIAkJbHAgPSAmcm5wLT5ibG9ja2VkX3Rhc2tzW3BoYXNlXTsKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeSh0LCBscCwgcmN1X25vZGVfZW50cnkpCiAJCQlwcmludGsoIiBQJWQiLCB0LT5waWQpOwpAQCAtMjgxLDIwICsyOTEsMTAgQEAKICAqLwogc3RhdGljIHZvaWQgcmN1X3ByZWVtcHRfY2hlY2tfYmxvY2tlZF90YXNrcyhzdHJ1Y3QgcmN1X25vZGUgKnJucCkKIHsKLQlXQVJOX09OX09OQ0UoIWxpc3RfZW1wdHkoJnJucC0+YmxvY2tlZF90YXNrc1tybnAtPmdwbnVtICYgMHgxXSkpOworCVdBUk5fT05fT05DRShyY3VfcHJlZW1wdGVkX3JlYWRlcnMocm5wKSk7CiAJV0FSTl9PTl9PTkNFKHJucC0+cXNtYXNrKTsKIH0KIAotLyoKLSAqIENoZWNrIGZvciBwcmVlbXB0ZWQgUkNVIHJlYWRlcnMgZm9yIHRoZSBzcGVjaWZpZWQgcmN1X25vZGUgc3RydWN0dXJlLgotICogSWYgdGhlIGNhbGxlciBuZWVkcyBhIHJlbGlhYmxlIGFuc3dlciwgaXQgbXVzdCBob2xkIHRoZSByY3Vfbm9kZSdzCi0gKiA+bG9jay4KLSAqLwotc3RhdGljIGludCByY3VfcHJlZW1wdGVkX3JlYWRlcnMoc3RydWN0IHJjdV9ub2RlICpybnApCi17Ci0JcmV0dXJuICFsaXN0X2VtcHR5KCZybnAtPmJsb2NrZWRfdGFza3Nbcm5wLT5ncG51bSAmIDB4MV0pOwotfQotCiAjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCiAKIC8qCkBAIC0zMDQsMjEgKzMwNCwyNSBAQAogICogcGFyZW50IGlzIHRvIHJlbW92ZSB0aGUgbmVlZCBmb3IgcmN1X3JlYWRfdW5sb2NrX3NwZWNpYWwoKSB0bwogICogbWFrZSBtb3JlIHRoYW4gdHdvIGF0dGVtcHRzIHRvIGFjcXVpcmUgdGhlIHRhcmdldCByY3Vfbm9kZSdzIGxvY2suCiAgKgorICogUmV0dXJucyAxIGlmIHRoZXJlIHdhcyBwcmV2aW91c2x5IGEgdGFzayBibG9ja2luZyB0aGUgY3VycmVudCBncmFjZQorICogcGVyaW9kIG9uIHRoZSBzcGVjaWZpZWQgcmN1X25vZGUgc3RydWN0dXJlLgorICoKICAqIFRoZSBjYWxsZXIgbXVzdCBob2xkIHJucC0+bG9jayB3aXRoIGlycXMgZGlzYWJsZWQuCiAgKi8KLXN0YXRpYyB2b2lkIHJjdV9wcmVlbXB0X29mZmxpbmVfdGFza3Moc3RydWN0IHJjdV9zdGF0ZSAqcnNwLAotCQkJCSAgICAgIHN0cnVjdCByY3Vfbm9kZSAqcm5wLAotCQkJCSAgICAgIHN0cnVjdCByY3VfZGF0YSAqcmRwKQorc3RhdGljIGludCByY3VfcHJlZW1wdF9vZmZsaW5lX3Rhc2tzKHN0cnVjdCByY3Vfc3RhdGUgKnJzcCwKKwkJCQkgICAgIHN0cnVjdCByY3Vfbm9kZSAqcm5wLAorCQkJCSAgICAgc3RydWN0IHJjdV9kYXRhICpyZHApCiB7CiAJaW50IGk7CiAJc3RydWN0IGxpc3RfaGVhZCAqbHA7CiAJc3RydWN0IGxpc3RfaGVhZCAqbHBfcm9vdDsKKwlpbnQgcmV0dmFsID0gcmN1X3ByZWVtcHRlZF9yZWFkZXJzKHJucCk7CiAJc3RydWN0IHJjdV9ub2RlICpybnBfcm9vdCA9IHJjdV9nZXRfcm9vdChyc3ApOwogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHA7CiAKIAlpZiAocm5wID09IHJucF9yb290KSB7CiAJCVdBUk5fT05DRSgxLCAiTGFzdCBDUFUgdGhvdWdodCB0byBiZSBvZmZsaW5lZD8iKTsKLQkJcmV0dXJuOyAgLyogU2hvdWxkbid0IGhhcHBlbjogYXQgbGVhc3Qgb25lIENQVSBvbmxpbmUuICovCisJCXJldHVybiAwOyAgLyogU2hvdWxkbid0IGhhcHBlbjogYXQgbGVhc3Qgb25lIENQVSBvbmxpbmUuICovCiAJfQogCVdBUk5fT05fT05DRShybnAgIT0gcmRwLT5teW5vZGUgJiYKIAkJICAgICAoIWxpc3RfZW1wdHkoJnJucC0+YmxvY2tlZF90YXNrc1swXSkgfHwKQEAgLTM0Miw2ICszNDYsOCBAQAogCQkJc3Bpbl91bmxvY2soJnJucF9yb290LT5sb2NrKTsgLyogaXJxcyByZW1haW4gZGlzYWJsZWQgKi8KIAkJfQogCX0KKworCXJldHVybiByZXR2YWw7CiB9CiAKIC8qCkBAIC0zOTMsNiArMzk5LDE3IEBACiBFWFBPUlRfU1lNQk9MX0dQTChjYWxsX3JjdSk7CiAKIC8qCisgKiBXYWl0IGZvciBhbiByY3UtcHJlZW1wdCBncmFjZSBwZXJpb2QuICBXZSBhcmUgc3VwcG9zZWQgdG8gZXhwZWRpdGUgdGhlCisgKiBncmFjZSBwZXJpb2QsIGJ1dCB0aGlzIGlzIHRoZSBjcnVkZSBzbG93IGNvbXBhdGFiaWxpdHkgaGFjaywgc28ganVzdAorICogaW52b2tlIHN5bmNocm9uaXplX3JjdSgpLgorICovCit2b2lkIHN5bmNocm9uaXplX3JjdV9leHBlZGl0ZWQodm9pZCkKK3sKKwlzeW5jaHJvbml6ZV9yY3UoKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHN5bmNocm9uaXplX3JjdV9leHBlZGl0ZWQpOworCisvKgogICogQ2hlY2sgdG8gc2VlIGlmIHRoZXJlIGlzIGFueSBpbW1lZGlhdGUgcHJlZW1wdGFibGUtUkNVLXJlbGF0ZWQgd29yawogICogdG8gYmUgZG9uZS4KICAqLwpAQCAtNDEwLDYgKzQyNywxNSBAQAogCXJldHVybiAhIXBlcl9jcHUocmN1X3ByZWVtcHRfZGF0YSwgY3B1KS5ueHRsaXN0OwogfQogCisvKioKKyAqIHJjdV9iYXJyaWVyIC0gV2FpdCB1bnRpbCBhbGwgaW4tZmxpZ2h0IGNhbGxfcmN1KCkgY2FsbGJhY2tzIGNvbXBsZXRlLgorICovCit2b2lkIHJjdV9iYXJyaWVyKHZvaWQpCit7CisJX3JjdV9iYXJyaWVyKCZyY3VfcHJlZW1wdF9zdGF0ZSwgY2FsbF9yY3UpOworfQorRVhQT1JUX1NZTUJPTF9HUEwocmN1X2JhcnJpZXIpOworCiAvKgogICogSW5pdGlhbGl6ZSBwcmVlbXB0YWJsZSBSQ1UncyBwZXItQ1BVIGRhdGEuCiAgKi8KQEAgLTQxOSw2ICs0NDUsMjIgQEAKIH0KIAogLyoKKyAqIE1vdmUgcHJlZW1wdGFibGUgUkNVJ3MgY2FsbGJhY2tzIHRvIC0+b3JwaGFuX2Nic19saXN0LgorICovCitzdGF0aWMgdm9pZCByY3VfcHJlZW1wdF9zZW5kX2Nic190b19vcnBoYW5hZ2Uodm9pZCkKK3sKKwlyY3Vfc2VuZF9jYnNfdG9fb3JwaGFuYWdlKCZyY3VfcHJlZW1wdF9zdGF0ZSk7Cit9CisKKy8qCisgKiBJbml0aWFsaXplIHByZWVtcHRhYmxlIFJDVSdzIHN0YXRlIHN0cnVjdHVyZXMuCisgKi8KK3N0YXRpYyB2b2lkIF9faW5pdCBfX3JjdV9pbml0X3ByZWVtcHQodm9pZCkKK3sKKwlSQ1VfSU5JVF9GTEFWT1IoJnJjdV9wcmVlbXB0X3N0YXRlLCByY3VfcHJlZW1wdF9kYXRhKTsKK30KKworLyoKICAqIENoZWNrIGZvciBhIHRhc2sgZXhpdGluZyB3aGlsZSBpbiBhIHByZWVtcHRhYmxlLVJDVSByZWFkLXNpZGUKICAqIGNyaXRpY2FsIHNlY3Rpb24sIGNsZWFuIHVwIGlmIHNvLiAgTm8gbmVlZCB0byBpc3N1ZSB3YXJuaW5ncywKICAqIGFzIGRlYnVnX2NoZWNrX25vX2xvY2tzX2hlbGQoKSBhbHJlYWR5IGRvZXMgdGhpcyBpZiBsb2NrZGVwCkBAIC00NjEsNiArNTAzLDE1IEBACiB7CiB9CiAKKy8qCisgKiBCZWNhdXNlIHByZWVtcHRhYmxlIFJDVSBkb2VzIG5vdCBleGlzdCwgdGhlcmUgYXJlIG5ldmVyIGFueSBwcmVlbXB0ZWQKKyAqIFJDVSByZWFkZXJzLgorICovCitzdGF0aWMgaW50IHJjdV9wcmVlbXB0ZWRfcmVhZGVycyhzdHJ1Y3QgcmN1X25vZGUgKnJucCkKK3sKKwlyZXR1cm4gMDsKK30KKwogI2lmZGVmIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SCiAKIC8qCkBAIC00ODMsMjUgKzUzNCwxOSBAQAogCVdBUk5fT05fT05DRShybnAtPnFzbWFzayk7CiB9CiAKLS8qCi0gKiBCZWNhdXNlIHByZWVtcHRhYmxlIFJDVSBkb2VzIG5vdCBleGlzdCwgdGhlcmUgYXJlIG5ldmVyIGFueSBwcmVlbXB0ZWQKLSAqIFJDVSByZWFkZXJzLgotICovCi1zdGF0aWMgaW50IHJjdV9wcmVlbXB0ZWRfcmVhZGVycyhzdHJ1Y3QgcmN1X25vZGUgKnJucCkKLXsKLQlyZXR1cm4gMDsKLX0KLQogI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQogCiAvKgogICogQmVjYXVzZSBwcmVlbXB0YWJsZSBSQ1UgZG9lcyBub3QgZXhpc3QsIGl0IG5ldmVyIG5lZWRzIHRvIG1pZ3JhdGUKLSAqIHRhc2tzIHRoYXQgd2VyZSBibG9ja2VkIHdpdGhpbiBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb25zLgorICogdGFza3MgdGhhdCB3ZXJlIGJsb2NrZWQgd2l0aGluIFJDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbnMsIGFuZAorICogc3VjaCBub24tZXhpc3RlbnQgdGFza3MgY2Fubm90IHBvc3NpYmx5IGhhdmUgYmVlbiBibG9ja2luZyB0aGUgY3VycmVudAorICogZ3JhY2UgcGVyaW9kLgogICovCi1zdGF0aWMgdm9pZCByY3VfcHJlZW1wdF9vZmZsaW5lX3Rhc2tzKHN0cnVjdCByY3Vfc3RhdGUgKnJzcCwKLQkJCQkgICAgICBzdHJ1Y3QgcmN1X25vZGUgKnJucCwKLQkJCQkgICAgICBzdHJ1Y3QgcmN1X2RhdGEgKnJkcCkKK3N0YXRpYyBpbnQgcmN1X3ByZWVtcHRfb2ZmbGluZV90YXNrcyhzdHJ1Y3QgcmN1X3N0YXRlICpyc3AsCisJCQkJICAgICBzdHJ1Y3QgcmN1X25vZGUgKnJucCwKKwkJCQkgICAgIHN0cnVjdCByY3VfZGF0YSAqcmRwKQogeworCXJldHVybiAwOwogfQogCiAvKgpAQCAtNTE4LDcgKzU2Myw3IEBACiAgKiBCZWNhdXNlIHByZWVtcHRhYmxlIFJDVSBkb2VzIG5vdCBleGlzdCwgaXQgbmV2ZXIgaGFzIGFueSBjYWxsYmFja3MKICAqIHRvIGNoZWNrLgogICovCi12b2lkIHJjdV9wcmVlbXB0X2NoZWNrX2NhbGxiYWNrcyhpbnQgY3B1KQorc3RhdGljIHZvaWQgcmN1X3ByZWVtcHRfY2hlY2tfY2FsbGJhY2tzKGludCBjcHUpCiB7CiB9CiAKQEAgLTUyNiw3ICs1NzEsNyBAQAogICogQmVjYXVzZSBwcmVlbXB0YWJsZSBSQ1UgZG9lcyBub3QgZXhpc3QsIGl0IG5ldmVyIGhhcyBhbnkgY2FsbGJhY2tzCiAgKiB0byBwcm9jZXNzLgogICovCi12b2lkIHJjdV9wcmVlbXB0X3Byb2Nlc3NfY2FsbGJhY2tzKHZvaWQpCitzdGF0aWMgdm9pZCByY3VfcHJlZW1wdF9wcm9jZXNzX2NhbGxiYWNrcyh2b2lkKQogewogfQogCkBAIC01NDAsNiArNTg1LDE2IEBACiBFWFBPUlRfU1lNQk9MX0dQTChjYWxsX3JjdSk7CiAKIC8qCisgKiBXYWl0IGZvciBhbiByY3UtcHJlZW1wdCBncmFjZSBwZXJpb2QsIGJ1dCBtYWtlIGl0IGhhcHBlbiBxdWlja2x5LgorICogQnV0IGJlY2F1c2UgcHJlZW1wdGFibGUgUkNVIGRvZXMgbm90IGV4aXN0LCBtYXAgdG8gcmN1LXNjaGVkLgorICovCit2b2lkIHN5bmNocm9uaXplX3JjdV9leHBlZGl0ZWQodm9pZCkKK3sKKwlzeW5jaHJvbml6ZV9zY2hlZF9leHBlZGl0ZWQoKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHN5bmNocm9uaXplX3JjdV9leHBlZGl0ZWQpOworCisvKgogICogQmVjYXVzZSBwcmVlbXB0YWJsZSBSQ1UgZG9lcyBub3QgZXhpc3QsIGl0IG5ldmVyIGhhcyBhbnkgd29yayB0byBkby4KICAqLwogc3RhdGljIGludCByY3VfcHJlZW1wdF9wZW5kaW5nKGludCBjcHUpCkBAIC01NTYsNiArNjExLDE2IEBACiB9CiAKIC8qCisgKiBCZWNhdXNlIHByZWVtcHRhYmxlIFJDVSBkb2VzIG5vdCBleGlzdCwgcmN1X2JhcnJpZXIoKSBpcyBqdXN0CisgKiBhbm90aGVyIG5hbWUgZm9yIHJjdV9iYXJyaWVyX3NjaGVkKCkuCisgKi8KK3ZvaWQgcmN1X2JhcnJpZXIodm9pZCkKK3sKKwlyY3VfYmFycmllcl9zY2hlZCgpOworfQorRVhQT1JUX1NZTUJPTF9HUEwocmN1X2JhcnJpZXIpOworCisvKgogICogQmVjYXVzZSBwcmVlbXB0YWJsZSBSQ1UgZG9lcyBub3QgZXhpc3QsIHRoZXJlIGlzIG5vIHBlci1DUFUKICAqIGRhdGEgdG8gaW5pdGlhbGl6ZS4KICAqLwpAQCAtNTYzLDQgKzYyOCwxOCBAQAogewogfQogCisvKgorICogQmVjYXVzZSB0aGVyZSBpcyBubyBwcmVlbXB0YWJsZSBSQ1UsIHRoZXJlIGFyZSBubyBjYWxsYmFja3MgdG8gbW92ZS4KKyAqLworc3RhdGljIHZvaWQgcmN1X3ByZWVtcHRfc2VuZF9jYnNfdG9fb3JwaGFuYWdlKHZvaWQpCit7Cit9CisKKy8qCisgKiBCZWNhdXNlIHByZWVtcHRhYmxlIFJDVSBkb2VzIG5vdCBleGlzdCwgaXQgbmVlZCBub3QgYmUgaW5pdGlhbGl6ZWQuCisgKi8KK3N0YXRpYyB2b2lkIF9faW5pdCBfX3JjdV9pbml0X3ByZWVtcHQodm9pZCkKK3sKK30KKwogI2VuZGlmIC8qICNlbHNlICNpZmRlZiBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSAqLwpkaWZmIC0tZ2l0IGEva2VybmVsL3JjdXRyZWVfdHJhY2UuYyBiL2tlcm5lbC9yY3V0cmVlX3RyYWNlLmMKaW5kZXggYzg5ZjVlOS4uNGIzMWM3NyAxMDA2NDQKLS0tIGEva2VybmVsL3JjdXRyZWVfdHJhY2UuYworKysgYi9rZXJuZWwvcmN1dHJlZV90cmFjZS5jCkBAIC05Myw3ICs5Myw3IEBACiAJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIHNob3dfcmN1ZGF0YSwgTlVMTCk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHJjdWRhdGFfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHJjdWRhdGFfZm9wcyA9IHsKIAkub3duZXIgPSBUSElTX01PRFVMRSwKIAkub3BlbiA9IHJjdWRhdGFfb3BlbiwKIAkucmVhZCA9IHNlcV9yZWFkLApAQCAtMTQ1LDcgKzE0NSw3IEBACiAJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIHNob3dfcmN1ZGF0YV9jc3YsIE5VTEwpOwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyByY3VkYXRhX2Nzdl9mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcmN1ZGF0YV9jc3ZfZm9wcyA9IHsKIAkub3duZXIgPSBUSElTX01PRFVMRSwKIAkub3BlbiA9IHJjdWRhdGFfY3N2X29wZW4sCiAJLnJlYWQgPSBzZXFfcmVhZCwKQEAgLTE1OSwxMyArMTU5LDEzIEBACiAJc3RydWN0IHJjdV9ub2RlICpybnA7CiAKIAlzZXFfcHJpbnRmKG0sICJjPSVsZCBnPSVsZCBzPSVkIGpmcT0lbGQgaj0leCAiCi0JICAgICAgICAgICAgICAibmZxcz0lbHUvbmZxc25nPSVsdSglbHUpIGZxbGg9JWx1XG4iLAorCQkgICAgICAibmZxcz0lbHUvbmZxc25nPSVsdSglbHUpIGZxbGg9JWx1IG9xbGVuPSVsZFxuIiwKIAkJICAgcnNwLT5jb21wbGV0ZWQsIHJzcC0+Z3BudW0sIHJzcC0+c2lnbmFsZWQsCiAJCSAgIChsb25nKShyc3AtPmppZmZpZXNfZm9yY2VfcXMgLSBqaWZmaWVzKSwKIAkJICAgKGludCkoamlmZmllcyAmIDB4ZmZmZiksCiAJCSAgIHJzcC0+bl9mb3JjZV9xcywgcnNwLT5uX2ZvcmNlX3FzX25ncCwKIAkJICAgcnNwLT5uX2ZvcmNlX3FzIC0gcnNwLT5uX2ZvcmNlX3FzX25ncCwKLQkJICAgcnNwLT5uX2ZvcmNlX3FzX2xoKTsKKwkJICAgcnNwLT5uX2ZvcmNlX3FzX2xoLCByc3AtPm9ycGhhbl9xbGVuKTsKIAlmb3IgKHJucCA9ICZyc3AtPm5vZGVbMF07IHJucCAtICZyc3AtPm5vZGVbMF0gPCBOVU1fUkNVX05PREVTOyBybnArKykgewogCQlpZiAocm5wLT5sZXZlbCAhPSBsZXZlbCkgewogCQkJc2VxX3B1dHMobSwgIlxuIik7CkBAIC0xOTYsNyArMTk2LDcgQEAKIAlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgc2hvd19yY3VoaWVyLCBOVUxMKTsKIH0KIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcmN1aGllcl9mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcmN1aGllcl9mb3BzID0gewogCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5vcGVuID0gcmN1aGllcl9vcGVuLAogCS5yZWFkID0gc2VxX3JlYWQsCkBAIC0yMjIsNyArMjIyLDcgQEAKIAlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgc2hvd19yY3VncCwgTlVMTCk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHJjdWdwX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyByY3VncF9mb3BzID0gewogCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5vcGVuID0gcmN1Z3Bfb3BlbiwKIAkucmVhZCA9IHNlcV9yZWFkLApAQCAtMjc2LDcgKzI3Niw3IEBACiAJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIHNob3dfcmN1X3BlbmRpbmcsIE5VTEwpOwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyByY3VfcGVuZGluZ19mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcmN1X3BlbmRpbmdfZm9wcyA9IHsKIAkub3duZXIgPSBUSElTX01PRFVMRSwKIAkub3BlbiA9IHJjdV9wZW5kaW5nX29wZW4sCiAJLnJlYWQgPSBzZXFfcmVhZCwKZGlmZiAtLWdpdCBhL2tlcm5lbC9yZWxheS5jIGIva2VybmVsL3JlbGF5LmMKaW5kZXggYmMxODg1NC4uNzYwYzI2MiAxMDA2NDQKLS0tIGEva2VybmVsL3JlbGF5LmMKKysrIGIva2VybmVsL3JlbGF5LmMKQEAgLTYwLDcgKzYwLDcgQEAKIC8qCiAgKiB2bV9vcHMgZm9yIHJlbGF5IGZpbGUgbWFwcGluZ3MuCiAgKi8KLXN0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgcmVsYXlfZmlsZV9tbWFwX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgcmVsYXlfZmlsZV9tbWFwX29wcyA9IHsKIAkuZmF1bHQgPSByZWxheV9idWZfZmF1bHQsCiAJLmNsb3NlID0gcmVsYXlfZmlsZV9tbWFwX2Nsb3NlLAogfTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9yZXNfY291bnRlci5jIGIva2VybmVsL3Jlc19jb3VudGVyLmMKaW5kZXggODhmYWVjMi4uYmNkYWJmMyAxMDA2NDQKLS0tIGEva2VybmVsL3Jlc19jb3VudGVyLmMKKysrIGIva2VybmVsL3Jlc19jb3VudGVyLmMKQEAgLTM3LDI3ICszNywxNyBAQAogfQogCiBpbnQgcmVzX2NvdW50ZXJfY2hhcmdlKHN0cnVjdCByZXNfY291bnRlciAqY291bnRlciwgdW5zaWduZWQgbG9uZyB2YWwsCi0JCQlzdHJ1Y3QgcmVzX2NvdW50ZXIgKipsaW1pdF9mYWlsX2F0LAotCQkJc3RydWN0IHJlc19jb3VudGVyICoqc29mdF9saW1pdF9mYWlsX2F0KQorCQkJc3RydWN0IHJlc19jb3VudGVyICoqbGltaXRfZmFpbF9hdCkKIHsKIAlpbnQgcmV0OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IHJlc19jb3VudGVyICpjLCAqdTsKIAogCSpsaW1pdF9mYWlsX2F0ID0gTlVMTDsKLQlpZiAoc29mdF9saW1pdF9mYWlsX2F0KQotCQkqc29mdF9saW1pdF9mYWlsX2F0ID0gTlVMTDsKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJZm9yIChjID0gY291bnRlcjsgYyAhPSBOVUxMOyBjID0gYy0+cGFyZW50KSB7CiAJCXNwaW5fbG9jaygmYy0+bG9jayk7CiAJCXJldCA9IHJlc19jb3VudGVyX2NoYXJnZV9sb2NrZWQoYywgdmFsKTsKLQkJLyoKLQkJICogV2l0aCBzb2Z0IGxpbWl0cywgd2UgcmV0dXJuIHRoZSBoaWdoZXN0IGFuY2VzdG9yCi0JCSAqIHRoYXQgZXhjZWVkcyBpdHMgc29mdCBsaW1pdAotCQkgKi8KLQkJaWYgKHNvZnRfbGltaXRfZmFpbF9hdCAmJgotCQkJIXJlc19jb3VudGVyX3NvZnRfbGltaXRfY2hlY2tfbG9ja2VkKGMpKQotCQkJKnNvZnRfbGltaXRfZmFpbF9hdCA9IGM7CiAJCXNwaW5fdW5sb2NrKCZjLT5sb2NrKTsKIAkJaWYgKHJldCA8IDApIHsKIAkJCSpsaW1pdF9mYWlsX2F0ID0gYzsKQEAgLTg1LDggKzc1LDcgQEAKIAljb3VudGVyLT51c2FnZSAtPSB2YWw7CiB9CiAKLXZvaWQgcmVzX2NvdW50ZXJfdW5jaGFyZ2Uoc3RydWN0IHJlc19jb3VudGVyICpjb3VudGVyLCB1bnNpZ25lZCBsb25nIHZhbCwKLQkJCQlib29sICp3YXNfc29mdF9saW1pdF9leGNlc3MpCit2b2lkIHJlc19jb3VudGVyX3VuY2hhcmdlKHN0cnVjdCByZXNfY291bnRlciAqY291bnRlciwgdW5zaWduZWQgbG9uZyB2YWwpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgcmVzX2NvdW50ZXIgKmM7CkBAIC05NCw5ICs4Myw2IEBACiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCWZvciAoYyA9IGNvdW50ZXI7IGMgIT0gTlVMTDsgYyA9IGMtPnBhcmVudCkgewogCQlzcGluX2xvY2soJmMtPmxvY2spOwotCQlpZiAod2FzX3NvZnRfbGltaXRfZXhjZXNzKQotCQkJKndhc19zb2Z0X2xpbWl0X2V4Y2VzcyA9Ci0JCQkJIXJlc19jb3VudGVyX3NvZnRfbGltaXRfY2hlY2tfbG9ja2VkKGMpOwogCQlyZXNfY291bnRlcl91bmNoYXJnZV9sb2NrZWQoYywgdmFsKTsKIAkJc3Bpbl91bmxvY2soJmMtPmxvY2spOwogCX0KZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZC5jIGIva2VybmVsL3NjaGVkLmMKaW5kZXggZWU2MWY0NS4uYTQ1NWRjYSAxMDA2NDQKLS0tIGEva2VybmVsL3NjaGVkLmMKKysrIGIva2VybmVsL3NjaGVkLmMKQEAgLTY3Niw2ICs2NzYsNyBAQAogCiAvKioKICAqIHJ1bnF1ZXVlX2lzX2xvY2tlZAorICogQGNwdTogdGhlIHByb2Nlc3NvciBpbiBxdWVzdGlvbi4KICAqCiAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGN1cnJlbnQgY3B1IHJ1bnF1ZXVlIGlzIGxvY2tlZC4KICAqIFRoaXMgaW50ZXJmYWNlIGFsbG93cyBwcmludGsgdG8gYmUgY2FsbGVkIHdpdGggdGhlIHJ1bnF1ZXVlIGxvY2sKQEAgLTc4MCw3ICs3ODEsNyBAQAogCXJldHVybiBzaW5nbGVfb3BlbihmaWxwLCBzY2hlZF9mZWF0X3Nob3csIE5VTEwpOwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzY2hlZF9mZWF0X2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzY2hlZF9mZWF0X2ZvcHMgPSB7CiAJLm9wZW4JCT0gc2NoZWRfZmVhdF9vcGVuLAogCS53cml0ZQkJPSBzY2hlZF9mZWF0X3dyaXRlLAogCS5yZWFkCQk9IHNlcV9yZWFkLApAQCAtMTU2MywxMSArMTU2NCw3IEBACiAKICNpZmRlZiBDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRAogCi1zdHJ1Y3QgdXBkYXRlX3NoYXJlc19kYXRhIHsKLQl1bnNpZ25lZCBsb25nIHJxX3dlaWdodFtOUl9DUFVTXTsKLX07Ci0KLXN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgdXBkYXRlX3NoYXJlc19kYXRhLCB1cGRhdGVfc2hhcmVzX2RhdGEpOworc3RhdGljIF9fcmVhZF9tb3N0bHkgdW5zaWduZWQgbG9uZyAqdXBkYXRlX3NoYXJlc19kYXRhOwogCiBzdGF0aWMgdm9pZCBfX3NldF9zZV9zaGFyZXMoc3RydWN0IHNjaGVkX2VudGl0eSAqc2UsIHVuc2lnbmVkIGxvbmcgc2hhcmVzKTsKIApAQCAtMTU3NywxMiArMTU3NCwxMiBAQAogc3RhdGljIHZvaWQgdXBkYXRlX2dyb3VwX3NoYXJlc19jcHUoc3RydWN0IHRhc2tfZ3JvdXAgKnRnLCBpbnQgY3B1LAogCQkJCSAgICB1bnNpZ25lZCBsb25nIHNkX3NoYXJlcywKIAkJCQkgICAgdW5zaWduZWQgbG9uZyBzZF9ycV93ZWlnaHQsCi0JCQkJICAgIHN0cnVjdCB1cGRhdGVfc2hhcmVzX2RhdGEgKnVzZCkKKwkJCQkgICAgdW5zaWduZWQgbG9uZyAqdXNkX3JxX3dlaWdodCkKIHsKIAl1bnNpZ25lZCBsb25nIHNoYXJlcywgcnFfd2VpZ2h0OwogCWludCBib29zdCA9IDA7CiAKLQlycV93ZWlnaHQgPSB1c2QtPnJxX3dlaWdodFtjcHVdOworCXJxX3dlaWdodCA9IHVzZF9ycV93ZWlnaHRbY3B1XTsKIAlpZiAoIXJxX3dlaWdodCkgewogCQlib29zdCA9IDE7CiAJCXJxX3dlaWdodCA9IE5JQ0VfMF9MT0FEOwpAQCAtMTYxNyw3ICsxNjE0LDcgQEAKIHN0YXRpYyBpbnQgdGdfc2hhcmVzX3VwKHN0cnVjdCB0YXNrX2dyb3VwICp0Zywgdm9pZCAqZGF0YSkKIHsKIAl1bnNpZ25lZCBsb25nIHdlaWdodCwgcnFfd2VpZ2h0ID0gMCwgc2hhcmVzID0gMDsKLQlzdHJ1Y3QgdXBkYXRlX3NoYXJlc19kYXRhICp1c2Q7CisJdW5zaWduZWQgbG9uZyAqdXNkX3JxX3dlaWdodDsKIAlzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCA9IGRhdGE7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgaTsKQEAgLTE2MjYsMTEgKzE2MjMsMTEgQEAKIAkJcmV0dXJuIDA7CiAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JdXNkID0gJl9fZ2V0X2NwdV92YXIodXBkYXRlX3NoYXJlc19kYXRhKTsKKwl1c2RfcnFfd2VpZ2h0ID0gcGVyX2NwdV9wdHIodXBkYXRlX3NoYXJlc19kYXRhLCBzbXBfcHJvY2Vzc29yX2lkKCkpOwogCiAJZm9yX2VhY2hfY3B1KGksIHNjaGVkX2RvbWFpbl9zcGFuKHNkKSkgewogCQl3ZWlnaHQgPSB0Zy0+Y2ZzX3JxW2ldLT5sb2FkLndlaWdodDsKLQkJdXNkLT5ycV93ZWlnaHRbaV0gPSB3ZWlnaHQ7CisJCXVzZF9ycV93ZWlnaHRbaV0gPSB3ZWlnaHQ7CiAKIAkJLyoKIAkJICogSWYgdGhlcmUgYXJlIGN1cnJlbnRseSBubyB0YXNrcyBvbiB0aGUgY3B1IHByZXRlbmQgdGhlcmUKQEAgLTE2NTEsNyArMTY0OCw3IEBACiAJCXNoYXJlcyA9IHRnLT5zaGFyZXM7CiAKIAlmb3JfZWFjaF9jcHUoaSwgc2NoZWRfZG9tYWluX3NwYW4oc2QpKQotCQl1cGRhdGVfZ3JvdXBfc2hhcmVzX2NwdSh0ZywgaSwgc2hhcmVzLCBycV93ZWlnaHQsIHVzZCk7CisJCXVwZGF0ZV9ncm91cF9zaGFyZXNfY3B1KHRnLCBpLCBzaGFyZXMsIHJxX3dlaWdodCwgdXNkX3JxX3dlaWdodCk7CiAKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAKQEAgLTIzMTEsNyArMjMwOCw3IEBACiB7CiAJaW50IGNwdSwgb3JpZ19jcHUsIHRoaXNfY3B1LCBzdWNjZXNzID0gMDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0cnVjdCBycSAqcnE7CisJc3RydWN0IHJxICpycSwgKm9yaWdfcnE7CiAKIAlpZiAoIXNjaGVkX2ZlYXQoU1lOQ19XQUtFVVBTKSkKIAkJd2FrZV9mbGFncyAmPSB+V0ZfU1lOQzsKQEAgLTIzMTksNyArMjMxNiw3IEBACiAJdGhpc19jcHUgPSBnZXRfY3B1KCk7CiAKIAlzbXBfd21iKCk7Ci0JcnEgPSB0YXNrX3JxX2xvY2socCwgJmZsYWdzKTsKKwlycSA9IG9yaWdfcnEgPSB0YXNrX3JxX2xvY2socCwgJmZsYWdzKTsKIAl1cGRhdGVfcnFfY2xvY2socnEpOwogCWlmICghKHAtPnN0YXRlICYgc3RhdGUpKQogCQlnb3RvIG91dDsKQEAgLTIzNTAsNiArMjM0NywxMCBAQAogCQlzZXRfdGFza19jcHUocCwgY3B1KTsKIAogCXJxID0gdGFza19ycV9sb2NrKHAsICZmbGFncyk7CisKKwlpZiAocnEgIT0gb3JpZ19ycSkKKwkJdXBkYXRlX3JxX2Nsb2NrKHJxKTsKKwogCVdBUk5fT04ocC0+c3RhdGUgIT0gVEFTS19XQUtJTkcpOwogCWNwdSA9IHRhc2tfY3B1KHApOwogCkBAIC0yNTE1LDIyICsyNTE2LDE3IEBACiAJX19zY2hlZF9mb3JrKHApOwogCiAJLyoKLQkgKiBNYWtlIHN1cmUgd2UgZG8gbm90IGxlYWsgUEkgYm9vc3RpbmcgcHJpb3JpdHkgdG8gdGhlIGNoaWxkLgotCSAqLwotCXAtPnByaW8gPSBjdXJyZW50LT5ub3JtYWxfcHJpbzsKLQotCS8qCiAJICogUmV2ZXJ0IHRvIGRlZmF1bHQgcHJpb3JpdHkvcG9saWN5IG9uIGZvcmsgaWYgcmVxdWVzdGVkLgogCSAqLwogCWlmICh1bmxpa2VseShwLT5zY2hlZF9yZXNldF9vbl9mb3JrKSkgewotCQlpZiAocC0+cG9saWN5ID09IFNDSEVEX0ZJRk8gfHwgcC0+cG9saWN5ID09IFNDSEVEX1JSKQorCQlpZiAocC0+cG9saWN5ID09IFNDSEVEX0ZJRk8gfHwgcC0+cG9saWN5ID09IFNDSEVEX1JSKSB7CiAJCQlwLT5wb2xpY3kgPSBTQ0hFRF9OT1JNQUw7Ci0KLQkJaWYgKHAtPm5vcm1hbF9wcmlvIDwgREVGQVVMVF9QUklPKQotCQkJcC0+cHJpbyA9IERFRkFVTFRfUFJJTzsKKwkJCXAtPm5vcm1hbF9wcmlvID0gcC0+c3RhdGljX3ByaW87CisJCX0KIAogCQlpZiAoUFJJT19UT19OSUNFKHAtPnN0YXRpY19wcmlvKSA8IDApIHsKIAkJCXAtPnN0YXRpY19wcmlvID0gTklDRV9UT19QUklPKDApOworCQkJcC0+bm9ybWFsX3ByaW8gPSBwLT5zdGF0aWNfcHJpbzsKIAkJCXNldF9sb2FkX3dlaWdodChwKTsKIAkJfQogCkBAIC0yNTQxLDYgKzI1MzcsMTEgQEAKIAkJcC0+c2NoZWRfcmVzZXRfb25fZm9yayA9IDA7CiAJfQogCisJLyoKKwkgKiBNYWtlIHN1cmUgd2UgZG8gbm90IGxlYWsgUEkgYm9vc3RpbmcgcHJpb3JpdHkgdG8gdGhlIGNoaWxkLgorCSAqLworCXAtPnByaW8gPSBjdXJyZW50LT5ub3JtYWxfcHJpbzsKKwogCWlmICghcnRfcHJpbyhwLT5wcmlvKSkKIAkJcC0+c2NoZWRfY2xhc3MgPSAmZmFpcl9zY2hlZF9jbGFzczsKIApAQCAtMjU4MSw4ICsyNTgyLDYgQEAKIAlCVUdfT04ocC0+c3RhdGUgIT0gVEFTS19SVU5OSU5HKTsKIAl1cGRhdGVfcnFfY2xvY2socnEpOwogCi0JcC0+cHJpbyA9IGVmZmVjdGl2ZV9wcmlvKHApOwotCiAJaWYgKCFwLT5zY2hlZF9jbGFzcy0+dGFza19uZXcgfHwgIWN1cnJlbnQtPnNlLm9uX3JxKSB7CiAJCWFjdGl2YXRlX3Rhc2socnEsIHAsIDApOwogCX0gZWxzZSB7CkBAIC0zNjU4LDYgKzM2NTcsNyBAQAogCiAvKioKICAqIHVwZGF0ZV9zZ19sYl9zdGF0cyAtIFVwZGF0ZSBzY2hlZF9ncm91cCdzIHN0YXRpc3RpY3MgZm9yIGxvYWQgYmFsYW5jaW5nLgorICogQHNkOiBUaGUgc2NoZWRfZG9tYWluIHdob3NlIHN0YXRpc3RpY3MgYXJlIHRvIGJlIHVwZGF0ZWQuCiAgKiBAZ3JvdXA6IHNjaGVkX2dyb3VwIHdob3NlIHN0YXRpc3RpY3MgYXJlIHRvIGJlIHVwZGF0ZWQuCiAgKiBAdGhpc19jcHU6IENwdSBmb3Igd2hpY2ggbG9hZCBiYWxhbmNlIGlzIGN1cnJlbnRseSBwZXJmb3JtZWQuCiAgKiBAaWRsZTogSWRsZSBzdGF0dXMgb2YgdGhpc19jcHUKQEAgLTY3MjAsOSArNjcyMCw2IEBACiAvKgogICogVGhpcyB0YXNrIGlzIGFib3V0IHRvIGdvIHRvIHNsZWVwIG9uIElPLiBJbmNyZW1lbnQgcnEtPm5yX2lvd2FpdCBzbwogICogdGhhdCBwcm9jZXNzIGFjY291bnRpbmcga25vd3MgdGhhdCB0aGlzIGlzIGEgdGFzayBpbiBJTyB3YWl0IHN0YXRlLgotICoKLSAqIEJ1dCBkb24ndCBkbyB0aGF0IGlmIGl0IGlzIGEgZGVsaWJlcmF0ZSwgdGhyb3R0bGluZyBJTyB3YWl0ICh0aGlzIHRhc2sKLSAqIGhhcyBzZXQgaXRzIGJhY2tpbmdfZGV2X2luZm86IHRoZSBxdWV1ZSBhZ2FpbnN0IHdoaWNoIGl0IHNob3VsZCB0aHJvdHRsZSkKICAqLwogdm9pZCBfX3NjaGVkIGlvX3NjaGVkdWxlKHZvaWQpCiB7CkBAIC05NDA2LDYgKzk0MDMsMTAgQEAKICNlbmRpZiAvKiBDT05GSUdfVVNFUl9TQ0hFRCAqLwogI2VuZGlmIC8qIENPTkZJR19HUk9VUF9TQ0hFRCAqLwogCisjaWYgZGVmaW5lZCBDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRCAmJiBkZWZpbmVkIENPTkZJR19TTVAKKwl1cGRhdGVfc2hhcmVzX2RhdGEgPSBfX2FsbG9jX3BlcmNwdShucl9jcHVfaWRzICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpLAorCQkJCQkgICAgX19hbGlnbm9mX18odW5zaWduZWQgbG9uZykpOworI2VuZGlmCiAJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHsKIAkJc3RydWN0IHJxICpycTsKIApkaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkX2Nsb2NrLmMgYi9rZXJuZWwvc2NoZWRfY2xvY2suYwppbmRleCBhYzJlMWRjLi40NzljZTU2IDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWRfY2xvY2suYworKysgYi9rZXJuZWwvc2NoZWRfY2xvY2suYwpAQCAtMTI3LDcgKzEyNyw3IEBACiAJY2xvY2sgPSB3cmFwX21heChjbG9jaywgbWluX2Nsb2NrKTsKIAljbG9jayA9IHdyYXBfbWluKGNsb2NrLCBtYXhfY2xvY2spOwogCi0JaWYgKGNtcHhjaGcoJnNjZC0+Y2xvY2ssIG9sZF9jbG9jaywgY2xvY2spICE9IG9sZF9jbG9jaykKKwlpZiAoY21weGNoZzY0KCZzY2QtPmNsb2NrLCBvbGRfY2xvY2ssIGNsb2NrKSAhPSBvbGRfY2xvY2spCiAJCWdvdG8gYWdhaW47CiAKIAlyZXR1cm4gY2xvY2s7CkBAIC0xNjMsNyArMTYzLDcgQEAKIAkJdmFsID0gcmVtb3RlX2Nsb2NrOwogCX0KIAotCWlmIChjbXB4Y2hnKHB0ciwgb2xkX3ZhbCwgdmFsKSAhPSBvbGRfdmFsKQorCWlmIChjbXB4Y2hnNjQocHRyLCBvbGRfdmFsLCB2YWwpICE9IG9sZF92YWwpCiAJCWdvdG8gYWdhaW47CiAKIAlyZXR1cm4gdmFsOwpkaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkX2ZhaXIuYyBiL2tlcm5lbC9zY2hlZF9mYWlyLmMKaW5kZXggNGU3NzdiNC4uYzMyYzNlNiAxMDA2NDQKLS0tIGEva2VybmVsL3NjaGVkX2ZhaXIuYworKysgYi9rZXJuZWwvc2NoZWRfZmFpci5jCkBAIC04NjEsMTIgKzg2MSwyMSBAQAogc3RhdGljIHN0cnVjdCBzY2hlZF9lbnRpdHkgKnBpY2tfbmV4dF9lbnRpdHkoc3RydWN0IGNmc19ycSAqY2ZzX3JxKQogewogCXN0cnVjdCBzY2hlZF9lbnRpdHkgKnNlID0gX19waWNrX25leHRfZW50aXR5KGNmc19ycSk7CisJc3RydWN0IHNjaGVkX2VudGl0eSAqYnVkZHk7CiAKLQlpZiAoY2ZzX3JxLT5uZXh0ICYmIHdha2V1cF9wcmVlbXB0X2VudGl0eShjZnNfcnEtPm5leHQsIHNlKSA8IDEpCi0JCXJldHVybiBjZnNfcnEtPm5leHQ7CisJaWYgKGNmc19ycS0+bmV4dCkgeworCQlidWRkeSA9IGNmc19ycS0+bmV4dDsKKwkJY2ZzX3JxLT5uZXh0ID0gTlVMTDsKKwkJaWYgKHdha2V1cF9wcmVlbXB0X2VudGl0eShidWRkeSwgc2UpIDwgMSkKKwkJCXJldHVybiBidWRkeTsKKwl9CiAKLQlpZiAoY2ZzX3JxLT5sYXN0ICYmIHdha2V1cF9wcmVlbXB0X2VudGl0eShjZnNfcnEtPmxhc3QsIHNlKSA8IDEpCi0JCXJldHVybiBjZnNfcnEtPmxhc3Q7CisJaWYgKGNmc19ycS0+bGFzdCkgeworCQlidWRkeSA9IGNmc19ycS0+bGFzdDsKKwkJY2ZzX3JxLT5sYXN0ID0gTlVMTDsKKwkJaWYgKHdha2V1cF9wcmVlbXB0X2VudGl0eShidWRkeSwgc2UpIDwgMSkKKwkJCXJldHVybiBidWRkeTsKKwl9CiAKIAlyZXR1cm4gc2U7CiB9CkBAIC0xNjU0LDE2ICsxNjYzLDYgQEAKIAogCWRvIHsKIAkJc2UgPSBwaWNrX25leHRfZW50aXR5KGNmc19ycSk7Ci0JCS8qCi0JCSAqIElmIHNlIHdhcyBhIGJ1ZGR5LCBjbGVhciBpdCBzbyB0aGF0IGl0IHdpbGwgaGF2ZSB0byBlYXJuCi0JCSAqIHRoZSBmYXZvdXIgYWdhaW4uCi0JCSAqCi0JCSAqIElmIHNlIHdhcyBub3QgYSBidWRkeSwgY2xlYXIgdGhlIGJ1ZGRpZXMgYmVjYXVzZSBuZWl0aGVyCi0JCSAqIHdhcyBlbGVnaWJsZSB0byBydW4sIGxldCB0aGVtIGVhcm4gaXQgYWdhaW4uCi0JCSAqCi0JCSAqIElPVy4gdW5jb25kaXRpb25hbGx5IGNsZWFyIGJ1ZGRpZXMuCi0JCSAqLwotCQlfX2NsZWFyX2J1ZGRpZXMoY2ZzX3JxLCBOVUxMKTsKIAkJc2V0X25leHRfZW50aXR5KGNmc19ycSwgc2UpOwogCQljZnNfcnEgPSBncm91cF9jZnNfcnEoc2UpOwogCX0gd2hpbGUgKGNmc19ycSk7CmRpZmYgLS1naXQgYS9rZXJuZWwvc3lzLmMgYi9rZXJuZWwvc3lzLmMKaW5kZXggMjU1NDc1ZC4uY2UxNzc2MCAxMDA2NDQKLS0tIGEva2VybmVsL3N5cy5jCisrKyBiL2tlcm5lbC9zeXMuYwpAQCAtMTExMCw2ICsxMTEwLDggQEAKIAllcnIgPSBzZXNzaW9uOwogb3V0OgogCXdyaXRlX3VubG9ja19pcnEoJnRhc2tsaXN0X2xvY2spOworCWlmIChlcnIgPiAwKQorCQlwcm9jX3NpZF9jb25uZWN0b3IoZ3JvdXBfbGVhZGVyKTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0xNTQ2LDI0ICsxNTQ4LDM3IEBACiAJCQlpZiAoYXJnNCB8IGFyZzUpCiAJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCQlzd2l0Y2ggKGFyZzIpIHsKLQkJCWNhc2UgMDoKKwkJCWNhc2UgUFJfTUNFX0tJTExfQ0xFQVI6CiAJCQkJaWYgKGFyZzMgIT0gMCkKIAkJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCQkJY3VycmVudC0+ZmxhZ3MgJj0gflBGX01DRV9QUk9DRVNTOwogCQkJCWJyZWFrOwotCQkJY2FzZSAxOgorCQkJY2FzZSBQUl9NQ0VfS0lMTF9TRVQ6CiAJCQkJY3VycmVudC0+ZmxhZ3MgfD0gUEZfTUNFX1BST0NFU1M7Ci0JCQkJaWYgKGFyZzMgIT0gMCkKKwkJCQlpZiAoYXJnMyA9PSBQUl9NQ0VfS0lMTF9FQVJMWSkKIAkJCQkJY3VycmVudC0+ZmxhZ3MgfD0gUEZfTUNFX0VBUkxZOwotCQkJCWVsc2UKKwkJCQllbHNlIGlmIChhcmczID09IFBSX01DRV9LSUxMX0xBVEUpCiAJCQkJCWN1cnJlbnQtPmZsYWdzICY9IH5QRl9NQ0VfRUFSTFk7CisJCQkJZWxzZSBpZiAoYXJnMyA9PSBQUl9NQ0VfS0lMTF9ERUZBVUxUKQorCQkJCQljdXJyZW50LT5mbGFncyAmPQorCQkJCQkJfihQRl9NQ0VfRUFSTFl8UEZfTUNFX1BST0NFU1MpOworCQkJCWVsc2UKKwkJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCQkJYnJlYWs7CiAJCQlkZWZhdWx0OgogCQkJCXJldHVybiAtRUlOVkFMOwogCQkJfQogCQkJZXJyb3IgPSAwOwogCQkJYnJlYWs7Ci0KKwkJY2FzZSBQUl9NQ0VfS0lMTF9HRVQ6CisJCQlpZiAoYXJnMiB8IGFyZzMgfCBhcmc0IHwgYXJnNSkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCWlmIChjdXJyZW50LT5mbGFncyAmIFBGX01DRV9QUk9DRVNTKQorCQkJCWVycm9yID0gKGN1cnJlbnQtPmZsYWdzICYgUEZfTUNFX0VBUkxZKSA/CisJCQkJCVBSX01DRV9LSUxMX0VBUkxZIDogUFJfTUNFX0tJTExfTEFURTsKKwkJCWVsc2UKKwkJCQllcnJvciA9IFBSX01DRV9LSUxMX0RFRkFVTFQ7CisJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCWVycm9yID0gLUVJTlZBTDsKIAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEva2VybmVsL3N5c2N0bF9jaGVjay5jIGIva2VybmVsL3N5c2N0bF9jaGVjay5jCmluZGV4IGIzODQyM2MuLmI2ZTdhYWUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zeXNjdGxfY2hlY2suYworKysgYi9rZXJuZWwvc3lzY3RsX2NoZWNrLmMKQEAgLTE1MjEsNyArMTUyMSw3IEBACiAJCQlpZiAoIXRhYmxlLT5jdGxfbmFtZSAmJiB0YWJsZS0+c3RyYXRlZ3kpCiAJCQkJc2V0X2ZhaWwoJmZhaWwsIHRhYmxlLCAiU3RyYXRlZ3kgd2l0aG91dCBjdGxfbmFtZSIpOwogI2VuZGlmCi0jaWZkZWYgQ09ORklHX1BST0NfRlMKKyNpZmRlZiBDT05GSUdfUFJPQ19TWVNDVEwKIAkJCWlmICh0YWJsZS0+cHJvY25hbWUgJiYgIXRhYmxlLT5wcm9jX2hhbmRsZXIpCiAJCQkJc2V0X2ZhaWwoJmZhaWwsIHRhYmxlLCAiTm8gcHJvY19oYW5kbGVyIik7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2tlcm5lbC90aW1lL2Nsb2Nrc291cmNlLmMgYi9rZXJuZWwvdGltZS9jbG9ja3NvdXJjZS5jCmluZGV4IDA5MTEzMzQuLjVlMThjNmEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90aW1lL2Nsb2Nrc291cmNlLmMKKysrIGIva2VybmVsL3RpbWUvY2xvY2tzb3VyY2UuYwpAQCAtMzk0LDE1ICszOTQsMTEgQEAKIHsKIAlzdHJ1Y3QgY2xvY2tzb3VyY2UgKmNzOwogCi0JbXV0ZXhfbG9jaygmY2xvY2tzb3VyY2VfbXV0ZXgpOwotCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShjcywgJmNsb2Nrc291cmNlX2xpc3QsIGxpc3QpCiAJCWlmIChjcy0+cmVzdW1lKQogCQkJY3MtPnJlc3VtZSgpOwogCiAJY2xvY2tzb3VyY2VfcmVzdW1lX3dhdGNoZG9nKCk7Ci0KLQltdXRleF91bmxvY2soJmNsb2Nrc291cmNlX211dGV4KTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9rZXJuZWwvdGltZS90aWNrLXNjaGVkLmMgYi9rZXJuZWwvdGltZS90aWNrLXNjaGVkLmMKaW5kZXggZTBmNTlhMi4uODlhZWQ1OSAxMDA2NDQKLS0tIGEva2VybmVsL3RpbWUvdGljay1zY2hlZC5jCisrKyBiL2tlcm5lbC90aW1lL3RpY2stc2NoZWQuYwpAQCAtMjMxLDYgKzIzMSwxMyBAQAogCWlmICghaW5pZGxlICYmICF0cy0+aW5pZGxlKQogCQlnb3RvIGVuZDsKIAorCS8qCisJICogU2V0IHRzLT5pbmlkbGUgdW5jb25kaXRpb25hbGx5LiBFdmVuIGlmIHRoZSBzeXN0ZW0gZGlkIG5vdAorCSAqIHN3aXRjaCB0byBOT0haIG1vZGUgdGhlIGNwdSBmcmVxdWVuY3kgZ292ZXJuZXJzIHJlbHkgb24gdGhlCisJICogdXBkYXRlIG9mIHRoZSBpZGxlIHRpbWUgYWNjb3VudGluZyBpbiB0aWNrX25vaHpfc3RhcnRfaWRsZSgpLgorCSAqLworCXRzLT5pbmlkbGUgPSAxOworCiAJbm93ID0gdGlja19ub2h6X3N0YXJ0X2lkbGUodHMpOwogCiAJLyoKQEAgLTI0OCw4ICsyNTUsNiBAQAogCWlmICh1bmxpa2VseSh0cy0+bm9oel9tb2RlID09IE5PSFpfTU9ERV9JTkFDVElWRSkpCiAJCWdvdG8gZW5kOwogCi0JdHMtPmluaWRsZSA9IDE7Ci0KIAlpZiAobmVlZF9yZXNjaGVkKCkpCiAJCWdvdG8gZW5kOwogCmRpZmYgLS1naXQgYS9rZXJuZWwvdGltZS90aW1la2VlcGluZy5jIGIva2VybmVsL3RpbWUvdGltZWtlZXBpbmcuYwppbmRleCBmYjBmNDZmLi5jM2E0ZTI5IDEwMDY0NAotLS0gYS9rZXJuZWwvdGltZS90aW1la2VlcGluZy5jCisrKyBiL2tlcm5lbC90aW1lL3RpbWVrZWVwaW5nLmMKQEAgLTEzLDYgKzEzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsb2Nrc291cmNlLmg+CiAjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgpkaWZmIC0tZ2l0IGEva2VybmVsL3RpbWUvdGltZXJfbGlzdC5jIGIva2VybmVsL3RpbWUvdGltZXJfbGlzdC5jCmluZGV4IGZkZGQ2OWQuLjFiNWI3YWEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90aW1lL3RpbWVyX2xpc3QuYworKysgYi9rZXJuZWwvdGltZS90aW1lcl9saXN0LmMKQEAgLTI3NSw3ICsyNzUsNyBAQAogCXJldHVybiBzaW5nbGVfb3BlbihmaWxwLCB0aW1lcl9saXN0X3Nob3csIE5VTEwpOwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB0aW1lcl9saXN0X2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB0aW1lcl9saXN0X2ZvcHMgPSB7CiAJLm9wZW4JCT0gdGltZXJfbGlzdF9vcGVuLAogCS5yZWFkCQk9IHNlcV9yZWFkLAogCS5sbHNlZWsJCT0gc2VxX2xzZWVrLApkaWZmIC0tZ2l0IGEva2VybmVsL3RpbWUvdGltZXJfc3RhdHMuYyBiL2tlcm5lbC90aW1lL3RpbWVyX3N0YXRzLmMKaW5kZXggNGNkZThiOS4uZWU1NjgxZiAxMDA2NDQKLS0tIGEva2VybmVsL3RpbWUvdGltZXJfc3RhdHMuYworKysgYi9rZXJuZWwvdGltZS90aW1lcl9zdGF0cy5jCkBAIC0zOTUsNyArMzk1LDcgQEAKIAlyZXR1cm4gc2luZ2xlX29wZW4oZmlscCwgdHN0YXRzX3Nob3csIE5VTEwpOwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB0c3RhdHNfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHRzdGF0c19mb3BzID0gewogCS5vcGVuCQk9IHRzdGF0c19vcGVuLAogCS5yZWFkCQk9IHNlcV9yZWFkLAogCS53cml0ZQkJPSB0c3RhdHNfd3JpdGUsCmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYyBiL2tlcm5lbC90cmFjZS9ibGt0cmFjZS5jCmluZGV4IDNlYjE1OWMuLmQ5ZDYyMDYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS9ibGt0cmFjZS5jCisrKyBiL2tlcm5lbC90cmFjZS9ibGt0cmFjZS5jCkBAIC04NTYsNiArODU2LDM3IEBACiB9CiAKIC8qKgorICogYmxrX2FkZF90cmFjZV9ycV9yZW1hcCAtIEFkZCBhIHRyYWNlIGZvciBhIHJlcXVlc3QtcmVtYXAgb3BlcmF0aW9uCisgKiBAcToJCXF1ZXVlIHRoZSBpbyBpcyBmb3IKKyAqIEBycToJCXRoZSBzb3VyY2UgcmVxdWVzdAorICogQGRldjoJdGFyZ2V0IGRldmljZQorICogQGZyb206CXNvdXJjZSBzZWN0b3IKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICBEZXZpY2UgbWFwcGVyIHJlbWFwcyByZXF1ZXN0IHRvIG90aGVyIGRldmljZXMuCisgKiAgICAgQWRkIGEgdHJhY2UgZm9yIHRoYXQgYWN0aW9uLgorICoKKyAqKi8KK3N0YXRpYyB2b2lkIGJsa19hZGRfdHJhY2VfcnFfcmVtYXAoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsCisJCQkJICAgc3RydWN0IHJlcXVlc3QgKnJxLCBkZXZfdCBkZXYsCisJCQkJICAgc2VjdG9yX3QgZnJvbSkKK3sKKwlzdHJ1Y3QgYmxrX3RyYWNlICpidCA9IHEtPmJsa190cmFjZTsKKwlzdHJ1Y3QgYmxrX2lvX3RyYWNlX3JlbWFwIHI7CisKKwlpZiAobGlrZWx5KCFidCkpCisJCXJldHVybjsKKworCXIuZGV2aWNlX2Zyb20gPSBjcHVfdG9fYmUzMihkZXYpOworCXIuZGV2aWNlX3RvICAgPSBjcHVfdG9fYmUzMihkaXNrX2RldnQocnEtPnJxX2Rpc2spKTsKKwlyLnNlY3Rvcl9mcm9tID0gY3B1X3RvX2JlNjQoZnJvbSk7CisKKwlfX2Jsa19hZGRfdHJhY2UoYnQsIGJsa19ycV9wb3MocnEpLCBibGtfcnFfYnl0ZXMocnEpLAorCQkJcnFfZGF0YV9kaXIocnEpLCBCTEtfVEFfUkVNQVAsICEhcnEtPmVycm9ycywKKwkJCXNpemVvZihyKSwgJnIpOworfQorCisvKioKICAqIGJsa19hZGRfZHJpdmVyX2RhdGEgLSBBZGQgYmluYXJ5IG1lc3NhZ2Ugd2l0aCBkcml2ZXItc3BlY2lmaWMgZGF0YQogICogQHE6CQlxdWV1ZSB0aGUgaW8gaXMgZm9yCiAgKiBAcnE6CQlpbyByZXF1ZXN0CkBAIC05MjIsMTAgKzk1MywxMyBAQAogCVdBUk5fT04ocmV0KTsKIAlyZXQgPSByZWdpc3Rlcl90cmFjZV9ibG9ja19yZW1hcChibGtfYWRkX3RyYWNlX3JlbWFwKTsKIAlXQVJOX09OKHJldCk7CisJcmV0ID0gcmVnaXN0ZXJfdHJhY2VfYmxvY2tfcnFfcmVtYXAoYmxrX2FkZF90cmFjZV9ycV9yZW1hcCk7CisJV0FSTl9PTihyZXQpOwogfQogCiBzdGF0aWMgdm9pZCBibGtfdW5yZWdpc3Rlcl90cmFjZXBvaW50cyh2b2lkKQogeworCXVucmVnaXN0ZXJfdHJhY2VfYmxvY2tfcnFfcmVtYXAoYmxrX2FkZF90cmFjZV9ycV9yZW1hcCk7CiAJdW5yZWdpc3Rlcl90cmFjZV9ibG9ja19yZW1hcChibGtfYWRkX3RyYWNlX3JlbWFwKTsKIAl1bnJlZ2lzdGVyX3RyYWNlX2Jsb2NrX3NwbGl0KGJsa19hZGRfdHJhY2Vfc3BsaXQpOwogCXVucmVnaXN0ZXJfdHJhY2VfYmxvY2tfdW5wbHVnX2lvKGJsa19hZGRfdHJhY2VfdW5wbHVnX2lvKTsKQEAgLTE2NTcsNiArMTY5MSwxMSBAQAogCXJldHVybiBzeXNmc19jcmVhdGVfZ3JvdXAoJmRldi0+a29iaiwgJmJsa190cmFjZV9hdHRyX2dyb3VwKTsKIH0KIAordm9pZCBibGtfdHJhY2VfcmVtb3ZlX3N5c2ZzKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzeXNmc19yZW1vdmVfZ3JvdXAoJmRldi0+a29iaiwgJmJsa190cmFjZV9hdHRyX2dyb3VwKTsKK30KKwogI2VuZGlmIC8qIENPTkZJR19CTEtfREVWX0lPX1RSQUNFICovCiAKICNpZmRlZiBDT05GSUdfRVZFTlRfVFJBQ0lORwpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL2Z0cmFjZS5jIGIva2VybmVsL3RyYWNlL2Z0cmFjZS5jCmluZGV4IGExNDI1NzkuLjljNDUxYTEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS9mdHJhY2UuYworKysgYi9rZXJuZWwvdHJhY2UvZnRyYWNlLmMKQEAgLTIyNSw3ICsyMjUsMTEgQEAKIAlpZiAoZnRyYWNlX3RyYWNlX2Z1bmN0aW9uID09IGZ0cmFjZV9zdHViKQogCQlyZXR1cm47CiAKKyNpZmRlZiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVAogCWZ1bmMgPSBmdHJhY2VfdHJhY2VfZnVuY3Rpb247CisjZWxzZQorCWZ1bmMgPSBfX2Z0cmFjZV90cmFjZV9mdW5jdGlvbjsKKyNlbmRpZgogCiAJaWYgKGZ0cmFjZV9waWRfdHJhY2UpIHsKIAkJc2V0X2Z0cmFjZV9waWRfZnVuY3Rpb24oZnVuYyk7CkBAIC03MzYsNyArNzQwLDcgQEAKICBvdXQ6CiAJbXV0ZXhfdW5sb2NrKCZmdHJhY2VfcHJvZmlsZV9sb2NrKTsKIAotCWZpbHAtPmZfcG9zICs9IGNudDsKKwkqcHBvcyArPSBjbnQ7CiAKIAlyZXR1cm4gY250OwogfQpAQCAtMTA3NCwxNCArMTA3OCw5IEBACiAJCWZhaWxlZCA9IF9fZnRyYWNlX3JlcGxhY2VfY29kZShyZWMsIGVuYWJsZSk7CiAJCWlmIChmYWlsZWQpIHsKIAkJCXJlYy0+ZmxhZ3MgfD0gRlRSQUNFX0ZMX0ZBSUxFRDsKLQkJCWlmICgoc3lzdGVtX3N0YXRlID09IFNZU1RFTV9CT09USU5HKSB8fAotCQkJICAgICFjb3JlX2tlcm5lbF90ZXh0KHJlYy0+aXApKSB7Ci0JCQkJZnRyYWNlX2ZyZWVfcmVjKHJlYyk7Ci0JCQkJfSBlbHNlIHsKLQkJCQlmdHJhY2VfYnVnKGZhaWxlZCwgcmVjLT5pcCk7Ci0JCQkJCS8qIFN0b3AgcHJvY2Vzc2luZyAqLwotCQkJCQlyZXR1cm47Ci0JCQkJfQorCQkJZnRyYWNlX2J1ZyhmYWlsZWQsIHJlYy0+aXApOworCQkJLyogU3RvcCBwcm9jZXNzaW5nICovCisJCQlyZXR1cm47CiAJCX0KIAl9IHdoaWxlX2Zvcl9lYWNoX2Z0cmFjZV9yZWMoKTsKIH0KQEAgLTE2MjEsOCArMTYyMCwxMCBAQAogCQlpZiAoIXJldCkgewogCQkJc3RydWN0IHNlcV9maWxlICptID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCQkJbS0+cHJpdmF0ZSA9IGl0ZXI7Ci0JCX0gZWxzZQorCQl9IGVsc2UgeworCQkJdHJhY2VfcGFyc2VyX3B1dCgmaXRlci0+cGFyc2VyKTsKIAkJCWtmcmVlKGl0ZXIpOworCQl9CiAJfSBlbHNlCiAJCWZpbGUtPnByaXZhdGVfZGF0YSA9IGl0ZXI7CiAJbXV0ZXhfdW5sb2NrKCZmdHJhY2VfcmVnZXhfbG9jayk7CkBAIC0yMjAyLDcgKzIyMDMsNyBAQAogCXN0cnVjdCB0cmFjZV9wYXJzZXIgKnBhcnNlcjsKIAlzc2l6ZV90IHJldCwgcmVhZDsKIAotCWlmICghY250IHx8IGNudCA8IDApCisJaWYgKCFjbnQpCiAJCXJldHVybiAwOwogCiAJbXV0ZXhfbG9jaygmZnRyYWNlX3JlZ2V4X2xvY2spOwpAQCAtMjIxNiw3ICsyMjE3LDcgQEAKIAlwYXJzZXIgPSAmaXRlci0+cGFyc2VyOwogCXJlYWQgPSB0cmFjZV9nZXRfdXNlcihwYXJzZXIsIHVidWYsIGNudCwgcHBvcyk7CiAKLQlpZiAodHJhY2VfcGFyc2VyX2xvYWRlZChwYXJzZXIpICYmCisJaWYgKHJlYWQgPj0gMCAmJiB0cmFjZV9wYXJzZXJfbG9hZGVkKHBhcnNlcikgJiYKIAkgICAgIXRyYWNlX3BhcnNlcl9jb250KHBhcnNlcikpIHsKIAkJcmV0ID0gZnRyYWNlX3Byb2Nlc3NfcmVnZXgocGFyc2VyLT5idWZmZXIsCiAJCQkJCSAgIHBhcnNlci0+aWR4LCBlbmFibGUpOwpAQCAtMjU1Miw4ICsyNTUzLDcgQEAKIAkJICAgc2l6ZV90IGNudCwgbG9mZl90ICpwcG9zKQogewogCXN0cnVjdCB0cmFjZV9wYXJzZXIgcGFyc2VyOwotCXNpemVfdCByZWFkID0gMDsKLQlzc2l6ZV90IHJldDsKKwlzc2l6ZV90IHJlYWQsIHJldDsKIAogCWlmICghY250IHx8IGNudCA8IDApCiAJCXJldHVybiAwOwpAQCAtMjU2MiwyOSArMjU2MiwzMSBAQAogCiAJaWYgKGZ0cmFjZV9ncmFwaF9jb3VudCA+PSBGVFJBQ0VfR1JBUEhfTUFYX0ZVTkNTKSB7CiAJCXJldCA9IC1FQlVTWTsKLQkJZ290byBvdXQ7CisJCWdvdG8gb3V0X3VubG9jazsKIAl9CiAKIAlpZiAodHJhY2VfcGFyc2VyX2dldF9pbml0KCZwYXJzZXIsIEZUUkFDRV9CVUZGX01BWCkpIHsKIAkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBvdXQ7CisJCWdvdG8gb3V0X3VubG9jazsKIAl9CiAKIAlyZWFkID0gdHJhY2VfZ2V0X3VzZXIoJnBhcnNlciwgdWJ1ZiwgY250LCBwcG9zKTsKIAotCWlmICh0cmFjZV9wYXJzZXJfbG9hZGVkKCgmcGFyc2VyKSkpIHsKKwlpZiAocmVhZCA+PSAwICYmIHRyYWNlX3BhcnNlcl9sb2FkZWQoKCZwYXJzZXIpKSkgewogCQlwYXJzZXIuYnVmZmVyW3BhcnNlci5pZHhdID0gMDsKIAogCQkvKiB3ZSBhbGxvdyBvbmx5IG9uZSBleHByZXNzaW9uIGF0IGEgdGltZSAqLwogCQlyZXQgPSBmdHJhY2Vfc2V0X2Z1bmMoZnRyYWNlX2dyYXBoX2Z1bmNzLCAmZnRyYWNlX2dyYXBoX2NvdW50LAogCQkJCQlwYXJzZXIuYnVmZmVyKTsKIAkJaWYgKHJldCkKLQkJCWdvdG8gb3V0OworCQkJZ290byBvdXRfZnJlZTsKIAl9CiAKIAlyZXQgPSByZWFkOwotIG91dDoKKworb3V0X2ZyZWU6CiAJdHJhY2VfcGFyc2VyX3B1dCgmcGFyc2VyKTsKK291dF91bmxvY2s6CiAJbXV0ZXhfdW5sb2NrKCZncmFwaF9sb2NrKTsKIAogCXJldHVybiByZXQ7CkBAIC0yNjU1LDE5ICsyNjU3LDE3IEBACiB9CiAKICNpZmRlZiBDT05GSUdfTU9EVUxFUwotdm9pZCBmdHJhY2VfcmVsZWFzZSh2b2lkICpzdGFydCwgdm9pZCAqZW5kKQordm9pZCBmdHJhY2VfcmVsZWFzZV9tb2Qoc3RydWN0IG1vZHVsZSAqbW9kKQogewogCXN0cnVjdCBkeW5fZnRyYWNlICpyZWM7CiAJc3RydWN0IGZ0cmFjZV9wYWdlICpwZzsKLQl1bnNpZ25lZCBsb25nIHMgPSAodW5zaWduZWQgbG9uZylzdGFydDsKLQl1bnNpZ25lZCBsb25nIGUgPSAodW5zaWduZWQgbG9uZyllbmQ7CiAKLQlpZiAoZnRyYWNlX2Rpc2FibGVkIHx8ICFzdGFydCB8fCBzdGFydCA9PSBlbmQpCisJaWYgKGZ0cmFjZV9kaXNhYmxlZCkKIAkJcmV0dXJuOwogCiAJbXV0ZXhfbG9jaygmZnRyYWNlX2xvY2spOwogCWRvX2Zvcl9lYWNoX2Z0cmFjZV9yZWMocGcsIHJlYykgewotCQlpZiAoKHJlYy0+aXAgPj0gcykgJiYgKHJlYy0+aXAgPCBlKSkgeworCQlpZiAod2l0aGluX21vZHVsZV9jb3JlKHJlYy0+aXAsIG1vZCkpIHsKIAkJCS8qCiAJCQkgKiByZWMtPmlwIGlzIGNoYW5nZWQgaW4gZnRyYWNlX2ZyZWVfcmVjKCkKIAkJCSAqIEl0IHNob3VsZCBub3QgYmV0d2VlbiBzIGFuZCBlIGlmIHJlY29yZCB3YXMgZnJlZWQuCkBAIC0yNjk5LDkgKzI2OTksNyBAQAogCQkJCSAgIG1vZC0+bnVtX2Z0cmFjZV9jYWxsc2l0ZXMpOwogCQlicmVhazsKIAljYXNlIE1PRFVMRV9TVEFURV9HT0lORzoKLQkJZnRyYWNlX3JlbGVhc2UobW9kLT5mdHJhY2VfY2FsbHNpdGVzLAotCQkJICAgICAgIG1vZC0+ZnRyYWNlX2NhbGxzaXRlcyArCi0JCQkgICAgICAgbW9kLT5udW1fZnRyYWNlX2NhbGxzaXRlcyk7CisJCWZ0cmFjZV9yZWxlYXNlX21vZChtb2QpOwogCQlicmVhazsKIAl9CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS9rbWVtdHJhY2UuYyBiL2tlcm5lbC90cmFjZS9rbWVtdHJhY2UuYwppbmRleCA4MWIxNjQ1Li5hOTFkYTY5IDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2Uva21lbXRyYWNlLmMKKysrIGIva2VybmVsL3RyYWNlL2ttZW10cmFjZS5jCkBAIC01MDEsNyArNTAxLDcgQEAKIAkJcmV0dXJuIDE7CiAJfQogCi0JaWYgKCFyZWdpc3Rlcl90cmFjZXIoJmttZW1fdHJhY2VyKSkgeworCWlmIChyZWdpc3Rlcl90cmFjZXIoJmttZW1fdHJhY2VyKSAhPSAwKSB7CiAJCXByX3dhcm5pbmcoIldhcm5pbmc6IGNvdWxkIG5vdCByZWdpc3RlciB0aGUga21lbSB0cmFjZXJcbiIpOwogCQlyZXR1cm4gMTsKIAl9CmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYyBiL2tlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jCmluZGV4IGQ0ZmYwMTkuLjNmZmE1MDIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jCisrKyBiL2tlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jCkBAIC00ODMsNyArNDgzLDcgQEAKIC8qIFVwIHRoaXMgaWYgeW91IHdhbnQgdG8gdGVzdCB0aGUgVElNRV9FWFRFTlRTIGFuZCBub3JtYWxpemF0aW9uICovCiAjZGVmaW5lIERFQlVHX1NISUZUIDAKIAotc3RhdGljIGlubGluZSB1NjQgcmJfdGltZV9zdGFtcChzdHJ1Y3QgcmluZ19idWZmZXIgKmJ1ZmZlciwgaW50IGNwdSkKK3N0YXRpYyBpbmxpbmUgdTY0IHJiX3RpbWVfc3RhbXAoc3RydWN0IHJpbmdfYnVmZmVyICpidWZmZXIpCiB7CiAJLyogc2hpZnQgdG8gZGVidWcvdGVzdCBub3JtYWxpemF0aW9uIGFuZCBUSU1FX0VYVEVOVFMgKi8KIAlyZXR1cm4gYnVmZmVyLT5jbG9jaygpIDw8IERFQlVHX1NISUZUOwpAQCAtNDk0LDcgKzQ5NCw3IEBACiAJdTY0IHRpbWU7CiAKIAlwcmVlbXB0X2Rpc2FibGVfbm90cmFjZSgpOwotCXRpbWUgPSByYl90aW1lX3N0YW1wKGJ1ZmZlciwgY3B1KTsKKwl0aW1lID0gcmJfdGltZV9zdGFtcChidWZmZXIpOwogCXByZWVtcHRfZW5hYmxlX25vX3Jlc2NoZWRfbm90cmFjZSgpOwogCiAJcmV0dXJuIHRpbWU7CkBAIC01OTksNyArNTk5LDcgQEAKIH0KIAogLyoKLSAqIHJiX2lzX2hlYWRfcGFnZSAtIHRlc3QgaWYgdGhlIGdpdmUgcGFnZSBpcyB0aGUgaGVhZCBwYWdlCisgKiByYl9pc19oZWFkX3BhZ2UgLSB0ZXN0IGlmIHRoZSBnaXZlbiBwYWdlIGlzIHRoZSBoZWFkIHBhZ2UKICAqCiAgKiBCZWNhdXNlIHRoZSByZWFkZXIgbWF5IG1vdmUgdGhlIGhlYWRfcGFnZSBwb2ludGVyLCB3ZSBjYW4KICAqIG5vdCB0cnVzdCB3aGF0IHRoZSBoZWFkIHBhZ2UgaXMgKGl0IG1heSBiZSBwb2ludGluZyB0bwpAQCAtMTg2OCw3ICsxODY4LDcgQEAKIAkJICogTmVzdGVkIGNvbW1pdHMgYWx3YXlzIGhhdmUgemVybyBkZWx0YXMsIHNvCiAJCSAqIGp1c3QgcmVyZWFkIHRoZSB0aW1lIHN0YW1wCiAJCSAqLwotCQkqdHMgPSByYl90aW1lX3N0YW1wKGJ1ZmZlciwgY3B1X2J1ZmZlci0+Y3B1KTsKKwkJKnRzID0gcmJfdGltZV9zdGFtcChidWZmZXIpOwogCQluZXh0X3BhZ2UtPnBhZ2UtPnRpbWVfc3RhbXAgPSAqdHM7CiAJfQogCkBAIC0yMTExLDcgKzIxMTEsNyBAQAogCWlmIChSQl9XQVJOX09OKGNwdV9idWZmZXIsICsrbnJfbG9vcHMgPiAxMDAwKSkKIAkJZ290byBvdXRfZmFpbDsKIAotCXRzID0gcmJfdGltZV9zdGFtcChjcHVfYnVmZmVyLT5idWZmZXIsIGNwdV9idWZmZXItPmNwdSk7CisJdHMgPSByYl90aW1lX3N0YW1wKGNwdV9idWZmZXItPmJ1ZmZlcik7CiAKIAkvKgogCSAqIE9ubHkgdGhlIGZpcnN0IGNvbW1pdCBjYW4gdXBkYXRlIHRoZSB0aW1lc3RhbXAuCkBAIC0yNjgxLDcgKzI2ODEsNyBAQAogRVhQT1JUX1NZTUJPTF9HUEwocmluZ19idWZmZXJfZW50cmllcyk7CiAKIC8qKgotICogcmluZ19idWZmZXJfb3ZlcnJ1bl9jcHUgLSBnZXQgdGhlIG51bWJlciBvZiBvdmVycnVucyBpbiBidWZmZXIKKyAqIHJpbmdfYnVmZmVyX292ZXJydW5zIC0gZ2V0IHRoZSBudW1iZXIgb2Ygb3ZlcnJ1bnMgaW4gYnVmZmVyCiAgKiBAYnVmZmVyOiBUaGUgcmluZyBidWZmZXIKICAqCiAgKiBSZXR1cm5zIHRoZSB0b3RhbCBudW1iZXIgb2Ygb3ZlcnJ1bnMgaW4gdGhlIHJpbmcgYnVmZmVyCmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2UuYyBiL2tlcm5lbC90cmFjZS90cmFjZS5jCmluZGV4IDQxMWFmMzcuLmIyMGQzZWMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS90cmFjZS5jCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZS5jCkBAIC00MTUsNyArNDE1LDcgQEAKIAogCS8qIHJlYWQgdGhlIG5vbi1zcGFjZSBpbnB1dCAqLwogCXdoaWxlIChjbnQgJiYgIWlzc3BhY2UoY2gpKSB7Ci0JCWlmIChwYXJzZXItPmlkeCA8IHBhcnNlci0+c2l6ZSkKKwkJaWYgKHBhcnNlci0+aWR4IDwgcGFyc2VyLT5zaXplIC0gMSkKIAkJCXBhcnNlci0+YnVmZmVyW3BhcnNlci0+aWR4KytdID0gY2g7CiAJCWVsc2UgewogCQkJcmV0ID0gLUVJTlZBTDsKQEAgLTEzOTMsNyArMTM5Myw3IEBACiAKIGludCB0cmFjZV92cHJpbnRrKHVuc2lnbmVkIGxvbmcgaXAsIGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcmdzKQogewotCXJldHVybiB0cmFjZV9hcnJheV9wcmludGsoJmdsb2JhbF90cmFjZSwgaXAsIGZtdCwgYXJncyk7CisJcmV0dXJuIHRyYWNlX2FycmF5X3ZwcmludGsoJmdsb2JhbF90cmFjZSwgaXAsIGZtdCwgYXJncyk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh0cmFjZV92cHJpbnRrKTsKIApAQCAtMjQ0MCw3ICsyNDQwLDcgQEAKIAkJCXJldHVybiByZXQ7CiAJfQogCi0JZmlscC0+Zl9wb3MgKz0gY250OworCSpwcG9zICs9IGNudDsKIAogCXJldHVybiBjbnQ7CiB9CkBAIC0yNTgyLDcgKzI1ODIsNyBAQAogCX0KIAltdXRleF91bmxvY2soJnRyYWNlX3R5cGVzX2xvY2spOwogCi0JZmlscC0+Zl9wb3MgKz0gY250OworCSpwcG9zICs9IGNudDsKIAogCXJldHVybiBjbnQ7CiB9CkBAIC0yNzY0LDcgKzI3NjQsNyBAQAogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKLQlmaWxwLT5mX3BvcyArPSByZXQ7CisJKnBwb3MgKz0gcmV0OwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTMyOTksNyArMzI5OSw3IEBACiAJCX0KIAl9CiAKLQlmaWxwLT5mX3BvcyArPSBjbnQ7CisJKnBwb3MgKz0gY250OwogCiAJLyogSWYgY2hlY2sgcGFnZXMgZmFpbGVkLCByZXR1cm4gRU5PTUVNICovCiAJaWYgKHRyYWNpbmdfZGlzYWJsZWQpCmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2VfYnJhbmNoLmMgYi9rZXJuZWwvdHJhY2UvdHJhY2VfYnJhbmNoLmMKaW5kZXggN2E3YTlmZC4uNGExOTRmMCAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlX2JyYW5jaC5jCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV9icmFuY2guYwpAQCAtMzQsNiArMzQsNyBAQAogCXN0cnVjdCB0cmFjZV9hcnJheSAqdHIgPSBicmFuY2hfdHJhY2VyOwogCXN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqZXZlbnQ7CiAJc3RydWN0IHRyYWNlX2JyYW5jaCAqZW50cnk7CisJc3RydWN0IHJpbmdfYnVmZmVyICpidWZmZXI7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgY3B1LCBwYzsKIAljb25zdCBjaGFyICpwOwpAQCAtNTQsNyArNTUsOCBAQAogCQlnb3RvIG91dDsKIAogCXBjID0gcHJlZW1wdF9jb3VudCgpOwotCWV2ZW50ID0gdHJhY2VfYnVmZmVyX2xvY2tfcmVzZXJ2ZSh0ciwgVFJBQ0VfQlJBTkNILAorCWJ1ZmZlciA9IHRyLT5idWZmZXI7CisJZXZlbnQgPSB0cmFjZV9idWZmZXJfbG9ja19yZXNlcnZlKGJ1ZmZlciwgVFJBQ0VfQlJBTkNILAogCQkJCQkgIHNpemVvZigqZW50cnkpLCBmbGFncywgcGMpOwogCWlmICghZXZlbnQpCiAJCWdvdG8gb3V0OwpAQCAtNzQsOCArNzYsOCBAQAogCWVudHJ5LT5saW5lID0gZi0+bGluZTsKIAllbnRyeS0+Y29ycmVjdCA9IHZhbCA9PSBleHBlY3Q7CiAKLQlpZiAoIWZpbHRlcl9jaGVja19kaXNjYXJkKGNhbGwsIGVudHJ5LCB0ci0+YnVmZmVyLCBldmVudCkpCi0JCXJpbmdfYnVmZmVyX3VubG9ja19jb21taXQodHItPmJ1ZmZlciwgZXZlbnQpOworCWlmICghZmlsdGVyX2NoZWNrX2Rpc2NhcmQoY2FsbCwgZW50cnksIGJ1ZmZlciwgZXZlbnQpKQorCQlyaW5nX2J1ZmZlcl91bmxvY2tfY29tbWl0KGJ1ZmZlciwgZXZlbnQpOwogCiAgb3V0OgogCWF0b21pY19kZWMoJnRyLT5kYXRhW2NwdV0tPmRpc2FibGVkKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZV9ldmVudF9wcm9maWxlLmMgYi9rZXJuZWwvdHJhY2UvdHJhY2VfZXZlbnRfcHJvZmlsZS5jCmluZGV4IGRkNDRiODcuLjhkNWMxNzEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS90cmFjZV9ldmVudF9wcm9maWxlLmMKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlX2V2ZW50X3Byb2ZpbGUuYwpAQCAtMzEsNyArMzEsNyBAQAogCWlmIChhdG9taWNfaW5jX3JldHVybigmZXZlbnQtPnByb2ZpbGVfY291bnQpKQogCQlyZXR1cm4gMDsKIAotCWlmICghdG90YWxfcHJvZmlsZV9jb3VudCsrKSB7CisJaWYgKCF0b3RhbF9wcm9maWxlX2NvdW50KSB7CiAJCWJ1ZiA9IChjaGFyICopYWxsb2NfcGVyY3B1KHByb2ZpbGVfYnVmX3QpOwogCQlpZiAoIWJ1ZikKIAkJCWdvdG8gZmFpbF9idWY7CkBAIC00NiwxNCArNDYsMTkgQEAKIAl9CiAKIAlyZXQgPSBldmVudC0+cHJvZmlsZV9lbmFibGUoKTsKLQlpZiAoIXJldCkKKwlpZiAoIXJldCkgeworCQl0b3RhbF9wcm9maWxlX2NvdW50Kys7CiAJCXJldHVybiAwOworCX0KIAotCWtmcmVlKHRyYWNlX3Byb2ZpbGVfYnVmX25taSk7CiBmYWlsX2J1Zl9ubWk6Ci0Ja2ZyZWUodHJhY2VfcHJvZmlsZV9idWYpOworCWlmICghdG90YWxfcHJvZmlsZV9jb3VudCkgeworCQlmcmVlX3BlcmNwdSh0cmFjZV9wcm9maWxlX2J1Zl9ubWkpOworCQlmcmVlX3BlcmNwdSh0cmFjZV9wcm9maWxlX2J1Zik7CisJCXRyYWNlX3Byb2ZpbGVfYnVmX25taSA9IE5VTEw7CisJCXRyYWNlX3Byb2ZpbGVfYnVmID0gTlVMTDsKKwl9CiBmYWlsX2J1ZjoKLQl0b3RhbF9wcm9maWxlX2NvdW50LS07CiAJYXRvbWljX2RlYygmZXZlbnQtPnByb2ZpbGVfY291bnQpOwogCiAJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZV9ldmVudHMuYyBiL2tlcm5lbC90cmFjZS90cmFjZV9ldmVudHMuYwppbmRleCA2ZjAzYzhhLi5kMTI4ZjY1IDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2VfZXZlbnRzLmMKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlX2V2ZW50cy5jCkBAIC0yMzIsMTAgKzIzMiw5IEBACiAJCSAgIHNpemVfdCBjbnQsIGxvZmZfdCAqcHBvcykKIHsKIAlzdHJ1Y3QgdHJhY2VfcGFyc2VyIHBhcnNlcjsKLQlzaXplX3QgcmVhZCA9IDA7Ci0Jc3NpemVfdCByZXQ7CisJc3NpemVfdCByZWFkLCByZXQ7CiAKLQlpZiAoIWNudCB8fCBjbnQgPCAwKQorCWlmICghY250KQogCQlyZXR1cm4gMDsKIAogCXJldCA9IHRyYWNpbmdfdXBkYXRlX2J1ZmZlcnMoKTsKQEAgLTI0Nyw3ICsyNDYsNyBAQAogCiAJcmVhZCA9IHRyYWNlX2dldF91c2VyKCZwYXJzZXIsIHVidWYsIGNudCwgcHBvcyk7CiAKLQlpZiAodHJhY2VfcGFyc2VyX2xvYWRlZCgoJnBhcnNlcikpKSB7CisJaWYgKHJlYWQgPj0gMCAmJiB0cmFjZV9wYXJzZXJfbG9hZGVkKCgmcGFyc2VyKSkpIHsKIAkJaW50IHNldCA9IDE7CiAKIAkJaWYgKCpwYXJzZXIuYnVmZmVyID09ICchJykKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZV9ldmVudHNfZmlsdGVyLmMgYi9rZXJuZWwvdHJhY2UvdHJhY2VfZXZlbnRzX2ZpbHRlci5jCmluZGV4IDIzMjQ1NzguLjk4YTZjYzUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS90cmFjZV9ldmVudHNfZmlsdGVyLmMKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlX2V2ZW50c19maWx0ZXIuYwpAQCAtOTMzLDggKzkzMyw5IEBACiAKIAl3aGlsZSAoIWxpc3RfZW1wdHkoJnBzLT5wb3N0Zml4KSkgewogCQllbHQgPSBsaXN0X2ZpcnN0X2VudHJ5KCZwcy0+cG9zdGZpeCwgc3RydWN0IHBvc3RmaXhfZWx0LCBsaXN0KTsKLQkJa2ZyZWUoZWx0LT5vcGVyYW5kKTsKIAkJbGlzdF9kZWwoJmVsdC0+bGlzdCk7CisJCWtmcmVlKGVsdC0+b3BlcmFuZCk7CisJCWtmcmVlKGVsdCk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2VfaHdfYnJhbmNoZXMuYyBiL2tlcm5lbC90cmFjZS90cmFjZV9od19icmFuY2hlcy5jCmluZGV4IDIzYjYzODUuLjY5NTQzYTkgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS90cmFjZV9od19icmFuY2hlcy5jCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV9od19icmFuY2hlcy5jCkBAIC0xNjUsNiArMTY1LDcgQEAKIAlzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmNhbGwgPSAmZXZlbnRfaHdfYnJhbmNoOwogCXN0cnVjdCB0cmFjZV9hcnJheSAqdHIgPSBod19icmFuY2hfdHJhY2U7CiAJc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICpldmVudDsKKwlzdHJ1Y3QgcmluZ19idWZmZXIgKmJ1ZjsKIAlzdHJ1Y3QgaHdfYnJhbmNoX2VudHJ5ICplbnRyeTsKIAl1bnNpZ25lZCBsb25nIGlycTE7CiAJaW50IGNwdTsKQEAgLTE4MCw3ICsxODEsOCBAQAogCWlmIChhdG9taWNfaW5jX3JldHVybigmdHItPmRhdGFbY3B1XS0+ZGlzYWJsZWQpICE9IDEpCiAJCWdvdG8gb3V0OwogCi0JZXZlbnQgPSB0cmFjZV9idWZmZXJfbG9ja19yZXNlcnZlKHRyLCBUUkFDRV9IV19CUkFOQ0hFUywKKwlidWYgPSB0ci0+YnVmZmVyOworCWV2ZW50ID0gdHJhY2VfYnVmZmVyX2xvY2tfcmVzZXJ2ZShidWYsIFRSQUNFX0hXX0JSQU5DSEVTLAogCQkJCQkgIHNpemVvZigqZW50cnkpLCAwLCAwKTsKIAlpZiAoIWV2ZW50KQogCQlnb3RvIG91dDsKQEAgLTE4OSw4ICsxOTEsOCBAQAogCWVudHJ5LT5lbnQudHlwZSA9IFRSQUNFX0hXX0JSQU5DSEVTOwogCWVudHJ5LT5mcm9tID0gZnJvbTsKIAllbnRyeS0+dG8gICA9IHRvOwotCWlmICghZmlsdGVyX2NoZWNrX2Rpc2NhcmQoY2FsbCwgZW50cnksIHRyLT5idWZmZXIsIGV2ZW50KSkKLQkJdHJhY2VfYnVmZmVyX3VubG9ja19jb21taXQodHIsIGV2ZW50LCAwLCAwKTsKKwlpZiAoIWZpbHRlcl9jaGVja19kaXNjYXJkKGNhbGwsIGVudHJ5LCBidWYsIGV2ZW50KSkKKwkJdHJhY2VfYnVmZmVyX3VubG9ja19jb21taXQoYnVmLCBldmVudCwgMCwgMCk7CiAKICBvdXQ6CiAJYXRvbWljX2RlYygmdHItPmRhdGFbY3B1XS0+ZGlzYWJsZWQpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX291dHB1dC5jIGIva2VybmVsL3RyYWNlL3RyYWNlX291dHB1dC5jCmluZGV4IGY1NzJmNDQuLmI2YzEyYzYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS90cmFjZV9vdXRwdXQuYworKysgYi9rZXJuZWwvdHJhY2UvdHJhY2Vfb3V0cHV0LmMKQEAgLTY5LDYgKzY5LDkgQEAKICAqIEBzOiB0cmFjZSBzZXF1ZW5jZSBkZXNjcmlwdG9yCiAgKiBAZm10OiBwcmludGYgZm9ybWF0IHN0cmluZwogICoKKyAqIEl0IHJldHVybnMgMCBpZiB0aGUgdHJhY2Ugb3ZlcnNpemVzIHRoZSBidWZmZXIncyBmcmVlCisgKiBzcGFjZSwgMSBvdGhlcndpc2UuCisgKgogICogVGhlIHRyYWNlciBtYXkgdXNlIGVpdGhlciBzZXF1ZW5jZSBvcGVyYXRpb25zIG9yIGl0cyBvd24KICAqIGNvcHkgdG8gdXNlciByb3V0aW5lcy4gVG8gc2ltcGxpZnkgZm9ybWF0aW5nIG9mIGEgdHJhY2UKICAqIHRyYWNlX3NlcV9wcmludGYgaXMgdXNlZCB0byBzdG9yZSBzdHJpbmdzIGludG8gYSBzcGVjaWFsCkBAIC05NSw3ICs5OCw3IEBACiAKIAlzLT5sZW4gKz0gcmV0OwogCi0JcmV0dXJuIGxlbjsKKwlyZXR1cm4gMTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHRyYWNlX3NlcV9wcmludGYpOwogCkBAIC00ODYsMTYgKzQ4OSwxOCBAQAogCQkJCWhhcmRpcnEgPyAnaCcgOiBzb2Z0aXJxID8gJ3MnIDogJy4nKSkKIAkJcmV0dXJuIDA7CiAKLQlpZiAoZW50cnktPmxvY2tfZGVwdGggPCAwKQotCQlyZXQgPSB0cmFjZV9zZXFfcHV0YyhzLCAnLicpOworCWlmIChlbnRyeS0+cHJlZW1wdF9jb3VudCkKKwkJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiJXgiLCBlbnRyeS0+cHJlZW1wdF9jb3VudCk7CiAJZWxzZQotCQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICIlZCIsIGVudHJ5LT5sb2NrX2RlcHRoKTsKKwkJcmV0ID0gdHJhY2Vfc2VxX3B1dGMocywgJy4nKTsKKwogCWlmICghcmV0KQogCQlyZXR1cm4gMDsKIAotCWlmIChlbnRyeS0+cHJlZW1wdF9jb3VudCkKLQkJcmV0dXJuIHRyYWNlX3NlcV9wcmludGYocywgIiV4IiwgZW50cnktPnByZWVtcHRfY291bnQpOwotCXJldHVybiB0cmFjZV9zZXFfcHV0YyhzLCAnLicpOworCWlmIChlbnRyeS0+bG9ja19kZXB0aCA8IDApCisJCXJldHVybiB0cmFjZV9zZXFfcHV0YyhzLCAnLicpOworCisJcmV0dXJuIHRyYWNlX3NlcV9wcmludGYocywgIiVkIiwgZW50cnktPmxvY2tfZGVwdGgpOwogfQogCiBzdGF0aWMgaW50CkBAIC04ODMsNyArODg4LDcgQEAKIAl0cmFjZV9hc3NpZ25fdHlwZShmaWVsZCwgaXRlci0+ZW50KTsKIAogCWlmICghUykKLQkJdGFza19zdGF0ZV9jaGFyKGZpZWxkLT5wcmV2X3N0YXRlKTsKKwkJUyA9IHRhc2tfc3RhdGVfY2hhcihmaWVsZC0+cHJldl9zdGF0ZSk7CiAJVCA9IHRhc2tfc3RhdGVfY2hhcihmaWVsZC0+bmV4dF9zdGF0ZSk7CiAJaWYgKCF0cmFjZV9zZXFfcHJpbnRmKCZpdGVyLT5zZXEsICIlZCAlZCAlYyAlZCAlZCAlZCAlY1xuIiwKIAkJCSAgICAgIGZpZWxkLT5wcmV2X3BpZCwKQEAgLTkxOCw3ICs5MjMsNyBAQAogCXRyYWNlX2Fzc2lnbl90eXBlKGZpZWxkLCBpdGVyLT5lbnQpOwogCiAJaWYgKCFTKQotCQl0YXNrX3N0YXRlX2NoYXIoZmllbGQtPnByZXZfc3RhdGUpOworCQlTID0gdGFza19zdGF0ZV9jaGFyKGZpZWxkLT5wcmV2X3N0YXRlKTsKIAlUID0gdGFza19zdGF0ZV9jaGFyKGZpZWxkLT5uZXh0X3N0YXRlKTsKIAogCVNFUV9QVVRfSEVYX0ZJRUxEX1JFVChzLCBmaWVsZC0+cHJldl9waWQpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX3N5c2NhbGxzLmMgYi9rZXJuZWwvdHJhY2UvdHJhY2Vfc3lzY2FsbHMuYwppbmRleCA5ZmJjZTZjLi41MjdlMTdlIDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2Vfc3lzY2FsbHMuYworKysgYi9rZXJuZWwvdHJhY2UvdHJhY2Vfc3lzY2FsbHMuYwpAQCAtMTY2LDcgKzE2Niw3IEBACiAJCQkgICAgICAgIlx0ZmllbGQ6JXMgJXM7XHRvZmZzZXQ6JXp1O1x0c2l6ZTolenU7XG4iCiAJCQkgICAgICAgIlx0ZmllbGQ6JXMgJXM7XHRvZmZzZXQ6JXp1O1x0c2l6ZTolenU7XG4iLAogCQkJICAgICAgIFNZU0NBTExfRklFTEQoaW50LCBuciksCi0JCQkgICAgICAgU1lTQ0FMTF9GSUVMRCh1bnNpZ25lZCBsb25nLCByZXQpKTsKKwkJCSAgICAgICBTWVNDQUxMX0ZJRUxEKGxvbmcsIHJldCkpOwogCWlmICghcmV0KQogCQlyZXR1cm4gMDsKIApAQCAtMjEyLDcgKzIxMiw3IEBACiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCXJldCA9IHRyYWNlX2RlZmluZV9maWVsZChjYWxsLCBTWVNDQUxMX0ZJRUxEKHVuc2lnbmVkIGxvbmcsIHJldCksIDAsCisJcmV0ID0gdHJhY2VfZGVmaW5lX2ZpZWxkKGNhbGwsIFNZU0NBTExfRklFTEQobG9uZywgcmV0KSwgMCwKIAkJCQkgRklMVEVSX09USEVSKTsKIAogCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9rZXJuZWwvd29ya3F1ZXVlLmMgYi9rZXJuZWwvd29ya3F1ZXVlLmMKaW5kZXggYWRkZmUyZC4uMTIzMjgxNCAxMDA2NDQKLS0tIGEva2VybmVsL3dvcmtxdWV1ZS5jCisrKyBiL2tlcm5lbC93b3JrcXVldWUuYwpAQCAtNjQwLDYgKzY0MCwyNCBAQAogRVhQT1JUX1NZTUJPTChzY2hlZHVsZV9kZWxheWVkX3dvcmspOwogCiAvKioKKyAqIGZsdXNoX2RlbGF5ZWRfd29yayAtIGJsb2NrIHVudGlsIGEgZHdvcmtfc3RydWN0J3MgY2FsbGJhY2sgaGFzIHRlcm1pbmF0ZWQKKyAqIEBkd29yazogdGhlIGRlbGF5ZWQgd29yayB3aGljaCBpcyB0byBiZSBmbHVzaGVkCisgKgorICogQW55IHRpbWVvdXQgaXMgY2FuY2VsbGVkLCBhbmQgYW55IHBlbmRpbmcgd29yayBpcyBydW4gaW1tZWRpYXRlbHkuCisgKi8KK3ZvaWQgZmx1c2hfZGVsYXllZF93b3JrKHN0cnVjdCBkZWxheWVkX3dvcmsgKmR3b3JrKQoreworCWlmIChkZWxfdGltZXJfc3luYygmZHdvcmstPnRpbWVyKSkgeworCQlzdHJ1Y3QgY3B1X3dvcmtxdWV1ZV9zdHJ1Y3QgKmN3cTsKKwkJY3dxID0gd3FfcGVyX2NwdShrZXZlbnRkX3dxLCBnZXRfY3B1KCkpOworCQlfX3F1ZXVlX3dvcmsoY3dxLCAmZHdvcmstPndvcmspOworCQlwdXRfY3B1KCk7CisJfQorCWZsdXNoX3dvcmsoJmR3b3JrLT53b3JrKTsKK30KK0VYUE9SVF9TWU1CT0woZmx1c2hfZGVsYXllZF93b3JrKTsKKworLyoqCiAgKiBzY2hlZHVsZV9kZWxheWVkX3dvcmtfb24gLSBxdWV1ZSB3b3JrIGluIGdsb2JhbCB3b3JrcXVldWUgb24gQ1BVIGFmdGVyIGRlbGF5CiAgKiBAY3B1OiBjcHUgdG8gdXNlCiAgKiBAZHdvcms6IGpvYiB0byBiZSBkb25lCkBAIC02NjcsMjEgKzY4NSwzOCBAQAogaW50IHNjaGVkdWxlX29uX2VhY2hfY3B1KHdvcmtfZnVuY190IGZ1bmMpCiB7CiAJaW50IGNwdTsKKwlpbnQgb3JpZyA9IC0xOwogCXN0cnVjdCB3b3JrX3N0cnVjdCAqd29ya3M7CiAKIAl3b3JrcyA9IGFsbG9jX3BlcmNwdShzdHJ1Y3Qgd29ya19zdHJ1Y3QpOwogCWlmICghd29ya3MpCiAJCXJldHVybiAtRU5PTUVNOwogCisJLyoKKwkgKiB3aGVuIHJ1bm5pbmcgaW4ga2V2ZW50ZCBkb24ndCBzY2hlZHVsZSBhIHdvcmsgaXRlbSBvbiBpdHNlbGYuCisJICogQ2FuIGp1c3QgY2FsbCBkaXJlY3RseSBiZWNhdXNlIHRoZSB3b3JrIHF1ZXVlIGlzIGFscmVhZHkgYm91bmQuCisJICogVGhpcyBhbHNvIGlzIGZhc3Rlci4KKwkgKiBNYWtlIHRoaXMgYSBnZW5lcmljIHBhcmFtZXRlciBmb3Igb3RoZXIgd29ya3F1ZXVlcz8KKwkgKi8KKwlpZiAoY3VycmVudF9pc19rZXZlbnRkKCkpIHsKKwkJb3JpZyA9IHJhd19zbXBfcHJvY2Vzc29yX2lkKCk7CisJCUlOSVRfV09SSyhwZXJfY3B1X3B0cih3b3Jrcywgb3JpZyksIGZ1bmMpOworCQlmdW5jKHBlcl9jcHVfcHRyKHdvcmtzLCBvcmlnKSk7CisJfQorCiAJZ2V0X29ubGluZV9jcHVzKCk7CiAJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKIAkJc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrID0gcGVyX2NwdV9wdHIod29ya3MsIGNwdSk7CiAKKwkJaWYgKGNwdSA9PSBvcmlnKQorCQkJY29udGludWU7CiAJCUlOSVRfV09SSyh3b3JrLCBmdW5jKTsKIAkJc2NoZWR1bGVfd29ya19vbihjcHUsIHdvcmspOwogCX0KLQlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkKLQkJZmx1c2hfd29yayhwZXJfY3B1X3B0cih3b3JrcywgY3B1KSk7CisJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKKwkJaWYgKGNwdSAhPSBvcmlnKQorCQkJZmx1c2hfd29yayhwZXJfY3B1X3B0cih3b3JrcywgY3B1KSk7CisJfQogCXB1dF9vbmxpbmVfY3B1cygpOwogCWZyZWVfcGVyY3B1KHdvcmtzKTsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2xpYi9LY29uZmlnLmRlYnVnIGIvbGliL0tjb25maWcuZGVidWcKaW5kZXggODkxMTU1OC4uMjM0Y2ViMSAxMDA2NDQKLS0tIGEvbGliL0tjb25maWcuZGVidWcKKysrIGIvbGliL0tjb25maWcuZGVidWcKQEAgLTM0Niw4ICszNDYsOSBAQAogCiBjb25maWcgREVCVUdfS01FTUxFQUsKIAlib29sICJLZXJuZWwgbWVtb3J5IGxlYWsgZGV0ZWN0b3IiCi0JZGVwZW5kcyBvbiBERUJVR19LRVJORUwgJiYgRVhQRVJJTUVOVEFMICYmIChYODYgfHwgQVJNIHx8IFBQQykgJiYgXAotCQkhTUVNT1JZX0hPVFBMVUcKKwlkZXBlbmRzIG9uIERFQlVHX0tFUk5FTCAmJiBFWFBFUklNRU5UQUwgJiYgIU1FTU9SWV9IT1RQTFVHICYmIFwKKwkJKFg4NiB8fCBBUk0gfHwgUFBDIHx8IFMzOTApCisKIAlzZWxlY3QgREVCVUdfRlMgaWYgU1lTRlMKIAlzZWxlY3QgU1RBQ0tUUkFDRSBpZiBTVEFDS1RSQUNFX1NVUFBPUlQKIAlzZWxlY3QgS0FMTFNZTVMKQEAgLTM3MCw3ICszNzEsNyBAQAogY29uZmlnIERFQlVHX0tNRU1MRUFLX0VBUkxZX0xPR19TSVpFCiAJaW50ICJNYXhpbXVtIGttZW1sZWFrIGVhcmx5IGxvZyBlbnRyaWVzIgogCWRlcGVuZHMgb24gREVCVUdfS01FTUxFQUsKLQlyYW5nZSAyMDAgMjAwMAorCXJhbmdlIDIwMCA0MDAwMAogCWRlZmF1bHQgNDAwCiAJaGVscAogCSAgS21lbWxlYWsgbXVzdCB0cmFjayBhbGwgdGhlIG1lbW9yeSBhbGxvY2F0aW9ucyB0byBhdm9pZApAQCAtMzkxLDcgKzM5Miw3IEBACiAKIGNvbmZpZyBERUJVR19QUkVFTVBUCiAJYm9vbCAiRGVidWcgcHJlZW1wdGlibGUga2VybmVsIgotCWRlcGVuZHMgb24gREVCVUdfS0VSTkVMICYmIFBSRUVNUFQgJiYgKFRSQUNFX0lSUUZMQUdTX1NVUFBPUlQgfHwgUFBDNjQpCisJZGVwZW5kcyBvbiBERUJVR19LRVJORUwgJiYgUFJFRU1QVCAmJiBUUkFDRV9JUlFGTEFHU19TVVBQT1JUCiAJZGVmYXVsdCB5CiAJaGVscAogCSAgSWYgeW91IHNheSBZIGhlcmUgdGhlbiB0aGUga2VybmVsIHdpbGwgdXNlIGEgZGVidWcgdmFyaWFudCBvZiB0aGUKZGlmZiAtLWdpdCBhL2xpYi9kZWJ1Z29iamVjdHMuYyBiL2xpYi9kZWJ1Z29iamVjdHMuYwppbmRleCAyNzU1YTNiLi5lYWU1NmZkIDEwMDY0NAotLS0gYS9saWIvZGVidWdvYmplY3RzLmMKKysrIGIvbGliL2RlYnVnb2JqZWN0cy5jCkBAIC05LDYgKzksNyBAQAogICovCiAjaW5jbHVkZSA8bGludXgvZGVidWdvYmplY3RzLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KICNpbmNsdWRlIDxsaW51eC9oYXNoLmg+CmRpZmYgLS1naXQgYS9saWIvZmF1bHQtaW5qZWN0LmMgYi9saWIvZmF1bHQtaW5qZWN0LmMKaW5kZXggZjk3YWY1NWIuLjdlNjVhZjcgMTAwNjQ0Ci0tLSBhL2xpYi9mYXVsdC1pbmplY3QuYworKysgYi9saWIvZmF1bHQtaW5qZWN0LmMKQEAgLTEsNiArMSw3IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3JhbmRvbS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc3RhdC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KZGlmZiAtLWdpdCBhL2xpYi92c3ByaW50Zi5jIGIvbGliL3ZzcHJpbnRmLmMKaW5kZXggYjkxODM5ZS4uMzNiZWQ1ZSAxMDA2NDQKLS0tIGEvbGliL3ZzcHJpbnRmLmMKKysrIGIvbGliL3ZzcHJpbnRmLmMKQEAgLTE3NzEsNyArMTc3MSw3IEBACiAJCSAqIGFkdmFuY2UgYm90aCBzdHJpbmdzIHRvIG5leHQgd2hpdGUgc3BhY2UKIAkJICovCiAJCWlmICgqZm10ID09ICcqJykgewotCQkJd2hpbGUgKCFpc3NwYWNlKCpmbXQpICYmICpmbXQpCisJCQl3aGlsZSAoIWlzc3BhY2UoKmZtdCkgJiYgKmZtdCAhPSAnJScgJiYgKmZtdCkKIAkJCQlmbXQrKzsKIAkJCXdoaWxlICghaXNzcGFjZSgqc3RyKSAmJiAqc3RyKQogCQkJCXN0cisrOwpkaWZmIC0tZ2l0IGEvbW0vS2NvbmZpZyBiL21tL0tjb25maWcKaW5kZXggMjQ3NzYwNy4uZmQzMzg2MiAxMDA2NDQKLS0tIGEvbW0vS2NvbmZpZworKysgYi9tbS9LY29uZmlnCkBAIC02Nyw3ICs2Nyw3IEBACiAKIGNvbmZpZyBTUEFSU0VNRU0KIAlkZWZfYm9vbCB5Ci0JZGVwZW5kcyBvbiBTUEFSU0VNRU1fTUFOVUFMCisJZGVwZW5kcyBvbiAoIVNFTEVDVF9NRU1PUllfTU9ERUwgJiYgQVJDSF9TUEFSU0VNRU1fRU5BQkxFKSB8fCBTUEFSU0VNRU1fTUFOVUFMCiAKIGNvbmZpZyBGTEFUTUVNCiAJZGVmX2Jvb2wgeQpAQCAtMTI5LDcgKzEyOSw3IEBACiAJYm9vbCAiQWxsb3cgZm9yIG1lbW9yeSBob3QtYWRkIgogCWRlcGVuZHMgb24gU1BBUlNFTUVNIHx8IFg4Nl82NF9BQ1BJX05VTUEKIAlkZXBlbmRzIG9uIEhPVFBMVUcgJiYgIShISUJFUk5BVElPTiAmJiAhUzM5MCkgJiYgQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUcKLQlkZXBlbmRzIG9uIChJQTY0IHx8IFg4NiB8fCBQUEM2NCB8fCBTVVBFUkggfHwgUzM5MCkKKwlkZXBlbmRzIG9uIChJQTY0IHx8IFg4NiB8fCBQUENfQk9PSzNTXzY0IHx8IFNVUEVSSCB8fCBTMzkwKQogCiBjb21tZW50ICJNZW1vcnkgaG90cGx1ZyBpcyBjdXJyZW50bHkgaW5jb21wYXRpYmxlIHdpdGggU29mdHdhcmUgU3VzcGVuZCIKIAlkZXBlbmRzIG9uIFNQQVJTRU1FTSAmJiBIT1RQTFVHICYmIEhJQkVSTkFUSU9OICYmICFTMzkwCkBAIC0yMjQsNyArMjI0LDkgQEAKIAkgIHRoZSBtYW55IGluc3RhbmNlcyBieSBhIHNpbmdsZSByZXNpZGVudCBwYWdlIHdpdGggdGhhdCBjb250ZW50LCBzbwogCSAgc2F2aW5nIG1lbW9yeSB1bnRpbCBvbmUgb3IgYW5vdGhlciBhcHAgbmVlZHMgdG8gbW9kaWZ5IHRoZSBjb250ZW50LgogCSAgUmVjb21tZW5kZWQgZm9yIHVzZSB3aXRoIEtWTSwgb3Igd2l0aCBvdGhlciBkdXBsaWNhdGl2ZSBhcHBsaWNhdGlvbnMuCi0JICBTZWUgRG9jdW1lbnRhdGlvbi92bS9rc20udHh0IGZvciBtb3JlIGluZm9ybWF0aW9uLgorCSAgU2VlIERvY3VtZW50YXRpb24vdm0va3NtLnR4dCBmb3IgbW9yZSBpbmZvcm1hdGlvbjogS1NNIGlzIGluYWN0aXZlCisJICB1bnRpbCBhIHByb2dyYW0gaGFzIG1hZHZpc2VkIHRoYXQgYW4gYXJlYSBpcyBNQURWX01FUkdFQUJMRSwgYW5kCisJICByb290IGhhcyBzZXQgL3N5cy9rZXJuZWwvbW0va3NtL3J1biB0byAxIChpZiBDT05GSUdfU1lTRlMgaXMgc2V0KS4KIAogY29uZmlnIERFRkFVTFRfTU1BUF9NSU5fQUREUgogICAgICAgICBpbnQgIkxvdyBhZGRyZXNzIHNwYWNlIHRvIHByb3RlY3QgZnJvbSB1c2VyIGFsbG9jYXRpb24iCkBAIC0yNDQsMTAgKzI0NiwxMiBAQAogCSAgVGhpcyB2YWx1ZSBjYW4gYmUgY2hhbmdlZCBhZnRlciBib290IHVzaW5nIHRoZQogCSAgL3Byb2Mvc3lzL3ZtL21tYXBfbWluX2FkZHIgdHVuYWJsZS4KIAorY29uZmlnIEFSQ0hfU1VQUE9SVFNfTUVNT1JZX0ZBSUxVUkUKKwlib29sCiAKIGNvbmZpZyBNRU1PUllfRkFJTFVSRQogCWRlcGVuZHMgb24gTU1VCi0JZGVwZW5kcyBvbiBYODZfTUNFCisJZGVwZW5kcyBvbiBBUkNIX1NVUFBPUlRTX01FTU9SWV9GQUlMVVJFCiAJYm9vbCAiRW5hYmxlIHJlY292ZXJ5IGZyb20gaGFyZHdhcmUgbWVtb3J5IGVycm9ycyIKIAloZWxwCiAJICBFbmFibGVzIGNvZGUgdG8gcmVjb3ZlciBmcm9tIHNvbWUgbWVtb3J5IGZhaWx1cmVzIG9uIHN5c3RlbXMKZGlmZiAtLWdpdCBhL21tL01ha2VmaWxlIGIvbW0vTWFrZWZpbGUKaW5kZXggNTE1ZmQ3OS4uZWJmODQ5MCAxMDA2NDQKLS0tIGEvbW0vTWFrZWZpbGUKKysrIGIvbW0vTWFrZWZpbGUKQEAgLTUsMTQgKzUsMTQgQEAKIG1tdS15CQkJOj0gbm9tbXUubwogbW11LSQoQ09ORklHX01NVSkJOj0gZnJlbWFwLm8gaGlnaG1lbS5vIG1hZHZpc2UubyBtZW1vcnkubyBtaW5jb3JlLm8gXAogCQkJICAgbWxvY2subyBtbWFwLm8gbXByb3RlY3QubyBtcmVtYXAubyBtc3luYy5vIHJtYXAubyBcCi0JCQkgICB2bWFsbG9jLm8KKwkJCSAgIHZtYWxsb2MubyBwYWdld2Fsay5vCiAKIG9iai15CQkJOj0gYm9vdG1lbS5vIGZpbGVtYXAubyBtZW1wb29sLm8gb29tX2tpbGwubyBmYWR2aXNlLm8gXAogCQkJICAgbWFjY2Vzcy5vIHBhZ2VfYWxsb2MubyBwYWdlLXdyaXRlYmFjay5vIFwKIAkJCSAgIHJlYWRhaGVhZC5vIHN3YXAubyB0cnVuY2F0ZS5vIHZtc2Nhbi5vIHNobWVtLm8gXAogCQkJICAgcHJpb190cmVlLm8gdXRpbC5vIG1tem9uZS5vIHZtc3RhdC5vIGJhY2tpbmctZGV2Lm8gXAogCQkJICAgcGFnZV9pc29sYXRpb24ubyBtbV9pbml0Lm8gbW11X2NvbnRleHQubyBcCi0JCQkgICBwYWdld2Fsay5vICQobW11LXkpCisJCQkgICAkKG1tdS15KQogb2JqLXkgKz0gaW5pdC1tbS5vCiAKIG9iai0kKENPTkZJR19CT1VOQ0UpCSs9IGJvdW5jZS5vCmRpZmYgLS1naXQgYS9tbS9iYWNraW5nLWRldi5jIGIvbW0vYmFja2luZy1kZXYuYwppbmRleCAzZDNhY2NiLi4xMDY1YjcxIDEwMDY0NAotLS0gYS9tbS9iYWNraW5nLWRldi5jCisrKyBiL21tL2JhY2tpbmctZGV2LmMKQEAgLTkyLDcgKzkyLDcgQEAKIAkJICAgIkJkaURpcnR5VGhyZXNoOiAgICU4bHUga0JcbiIKIAkJICAgIkRpcnR5VGhyZXNoOiAgICAgICU4bHUga0JcbiIKIAkJICAgIkJhY2tncm91bmRUaHJlc2g6ICU4bHUga0JcbiIKLQkJICAgIldyaXRlQmFjayB0aHJlYWRzOiU4bHVcbiIKKwkJICAgIldyaXRlYmFja1RocmVhZHM6ICU4bHVcbiIKIAkJICAgImJfZGlydHk6ICAgICAgICAgICU4bHVcbiIKIAkJICAgImJfaW86ICAgICAgICAgICAgICU4bHVcbiIKIAkJICAgImJfbW9yZV9pbzogICAgICAgICU4bHVcbiIKQEAgLTYxMCw2ICs2MTAsMjEgQEAKIAkJa3RocmVhZF9zdG9wKHdiLT50YXNrKTsKIH0KIAorLyoKKyAqIFRoaXMgYmRpIGlzIGdvaW5nIGF3YXkgbm93LCBtYWtlIHN1cmUgdGhhdCBubyBzdXBlcl9ibG9ja3MgcG9pbnQgdG8gaXQKKyAqLworc3RhdGljIHZvaWQgYmRpX3BydW5lX3NiKHN0cnVjdCBiYWNraW5nX2Rldl9pbmZvICpiZGkpCit7CisJc3RydWN0IHN1cGVyX2Jsb2NrICpzYjsKKworCXNwaW5fbG9jaygmc2JfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShzYiwgJnN1cGVyX2Jsb2Nrcywgc19saXN0KSB7CisJCWlmIChzYi0+c19iZGkgPT0gYmRpKQorCQkJc2ItPnNfYmRpID0gTlVMTDsKKwl9CisJc3Bpbl91bmxvY2soJnNiX2xvY2spOworfQorCiB2b2lkIGJkaV91bnJlZ2lzdGVyKHN0cnVjdCBiYWNraW5nX2Rldl9pbmZvICpiZGkpCiB7CiAJaWYgKGJkaS0+ZGV2KSB7CkBAIC02ODIsNiArNjk3LDcgQEAKIAkJc3Bpbl91bmxvY2soJmlub2RlX2xvY2spOwogCX0KIAorCWJkaV9wcnVuZV9zYihiZGkpOwogCWJkaV91bnJlZ2lzdGVyKGJkaSk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgTlJfQkRJX1NUQVRfSVRFTVM7IGkrKykKZGlmZiAtLWdpdCBhL21tL2ZpbGVtYXAuYyBiL21tL2ZpbGVtYXAuYwppbmRleCA2Yzg0ZTU5Li5lZjE2OWYzIDEwMDY0NAotLS0gYS9tbS9maWxlbWFwLmMKKysrIGIvbW0vZmlsZW1hcC5jCkBAIC0xNjExLDcgKzE2MTEsNyBAQAogfQogRVhQT1JUX1NZTUJPTChmaWxlbWFwX2ZhdWx0KTsKIAotc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGdlbmVyaWNfZmlsZV92bV9vcHMgPSB7Citjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgZ2VuZXJpY19maWxlX3ZtX29wcyA9IHsKIAkuZmF1bHQJCT0gZmlsZW1hcF9mYXVsdCwKIH07CiAKZGlmZiAtLWdpdCBhL21tL2ZpbGVtYXBfeGlwLmMgYi9tbS9maWxlbWFwX3hpcC5jCmluZGV4IDQyN2RmZTMuLjE4ODhiMmQgMTAwNjQ0Ci0tLSBhL21tL2ZpbGVtYXBfeGlwLmMKKysrIGIvbW0vZmlsZW1hcF94aXAuYwpAQCAtMjk2LDcgKzI5Niw3IEBACiAJfQogfQogCi1zdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHhpcF9maWxlX3ZtX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgeGlwX2ZpbGVfdm1fb3BzID0gewogCS5mYXVsdAk9IHhpcF9maWxlX2ZhdWx0LAogfTsKIApkaWZmIC0tZ2l0IGEvbW0vaHVnZXRsYi5jIGIvbW0vaHVnZXRsYi5jCmluZGV4IDZmMDQ4ZmMuLjVkNzYwMWIgMTAwNjQ0Ci0tLSBhL21tL2h1Z2V0bGIuYworKysgYi9tbS9odWdldGxiLmMKQEAgLTE3MjEsNyArMTcyMSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBodWdldGxiX3ZtX29wcyA9IHsKK2NvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBodWdldGxiX3ZtX29wcyA9IHsKIAkuZmF1bHQgPSBodWdldGxiX3ZtX29wX2ZhdWx0LAogCS5vcGVuID0gaHVnZXRsYl92bV9vcF9vcGVuLAogCS5jbG9zZSA9IGh1Z2V0bGJfdm1fb3BfY2xvc2UsCmRpZmYgLS1naXQgYS9tbS9rbWVtbGVhay5jIGIvbW0va21lbWxlYWsuYwppbmRleCA0ZWE0NTEwLi44YmY3NjVjIDEwMDY0NAotLS0gYS9tbS9rbWVtbGVhay5jCisrKyBiL21tL2ttZW1sZWFrLmMKQEAgLTgzMywxMiArODMzLDE1IEBACiAJICovCiAJcmN1X3JlYWRfbG9jaygpOwogCW9iamVjdCA9IGNyZWF0ZV9vYmplY3QoKHVuc2lnbmVkIGxvbmcpbG9nLT5wdHIsIGxvZy0+c2l6ZSwKLQkJCSAgICAgICBsb2ctPm1pbl9jb3VudCwgR0ZQX0tFUk5FTCk7CisJCQkgICAgICAgbG9nLT5taW5fY291bnQsIEdGUF9BVE9NSUMpOworCWlmICghb2JqZWN0KQorCQlnb3RvIG91dDsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmb2JqZWN0LT5sb2NrLCBmbGFncyk7CiAJZm9yIChpID0gMDsgaSA8IGxvZy0+dHJhY2VfbGVuOyBpKyspCiAJCW9iamVjdC0+dHJhY2VbaV0gPSBsb2ctPnRyYWNlW2ldOwogCW9iamVjdC0+dHJhY2VfbGVuID0gbG9nLT50cmFjZV9sZW47CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmb2JqZWN0LT5sb2NrLCBmbGFncyk7CitvdXQ6CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiB9CiAKZGlmZiAtLWdpdCBhL21tL2tzbS5jIGIvbW0va3NtLmMKaW5kZXggZjdlZGFjMy4uYmVmMWFmNCAxMDA2NDQKLS0tIGEvbW0va3NtLmMKKysrIGIvbW0va3NtLmMKQEAgLTE4NCwxMSArMTg0LDYgQEAKIAkJc2l6ZW9mKHN0cnVjdCBfX3N0cnVjdCksIF9fYWxpZ25vZl9fKHN0cnVjdCBfX3N0cnVjdCksXAogCQkoX19mbGFncyksIE5VTEwpCiAKLXN0YXRpYyB2b2lkIF9faW5pdCBrc21faW5pdF9tYXhfa2VybmVsX3BhZ2VzKHZvaWQpCi17Ci0Ja3NtX21heF9rZXJuZWxfcGFnZXMgPSBucl9mcmVlX2J1ZmZlcl9wYWdlcygpIC8gNDsKLX0KLQogc3RhdGljIGludCBfX2luaXQga3NtX3NsYWJfaW5pdCh2b2lkKQogewogCXJtYXBfaXRlbV9jYWNoZSA9IEtTTV9LTUVNX0NBQ0hFKHJtYXBfaXRlbSwgMCk7CkBAIC0xNjczLDcgKzE2NjgsNyBAQAogCXN0cnVjdCB0YXNrX3N0cnVjdCAqa3NtX3RocmVhZDsKIAlpbnQgZXJyOwogCi0Ja3NtX2luaXRfbWF4X2tlcm5lbF9wYWdlcygpOworCWtzbV9tYXhfa2VybmVsX3BhZ2VzID0gdG90YWxyYW1fcGFnZXMgLyA0OwogCiAJZXJyID0ga3NtX3NsYWJfaW5pdCgpOwogCWlmIChlcnIpCkBAIC0xNjk3LDYgKzE2OTIsOSBAQAogCQlrdGhyZWFkX3N0b3Aoa3NtX3RocmVhZCk7CiAJCWdvdG8gb3V0X2ZyZWUyOwogCX0KKyNlbHNlCisJa3NtX3J1biA9IEtTTV9SVU5fTUVSR0U7CS8qIG5vIHdheSBmb3IgdXNlciB0byBzdGFydCBpdCAqLworCiAjZW5kaWYgLyogQ09ORklHX1NZU0ZTICovCiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuYwppbmRleCBlMmI5OGE2Li5mOTlmNTk5IDEwMDY0NAotLS0gYS9tbS9tZW1jb250cm9sLmMKKysrIGIvbW0vbWVtY29udHJvbC5jCkBAIC0zMTMsNyArMzEzLDggQEAKIHN0YXRpYyB2b2lkCiBfX21lbV9jZ3JvdXBfaW5zZXJ0X2V4Y2VlZGVkKHN0cnVjdCBtZW1fY2dyb3VwICptZW0sCiAJCQkJc3RydWN0IG1lbV9jZ3JvdXBfcGVyX3pvbmUgKm16LAotCQkJCXN0cnVjdCBtZW1fY2dyb3VwX3RyZWVfcGVyX3pvbmUgKm1jdHopCisJCQkJc3RydWN0IG1lbV9jZ3JvdXBfdHJlZV9wZXJfem9uZSAqbWN0eiwKKwkJCQl1bnNpZ25lZCBsb25nIGxvbmcgbmV3X3VzYWdlX2luX2V4Y2VzcykKIHsKIAlzdHJ1Y3QgcmJfbm9kZSAqKnAgPSAmbWN0ei0+cmJfcm9vdC5yYl9ub2RlOwogCXN0cnVjdCByYl9ub2RlICpwYXJlbnQgPSBOVUxMOwpAQCAtMzIyLDcgKzMyMyw5IEBACiAJaWYgKG16LT5vbl90cmVlKQogCQlyZXR1cm47CiAKLQltei0+dXNhZ2VfaW5fZXhjZXNzID0gcmVzX2NvdW50ZXJfc29mdF9saW1pdF9leGNlc3MoJm1lbS0+cmVzKTsKKwltei0+dXNhZ2VfaW5fZXhjZXNzID0gbmV3X3VzYWdlX2luX2V4Y2VzczsKKwlpZiAoIW16LT51c2FnZV9pbl9leGNlc3MpCisJCXJldHVybjsKIAl3aGlsZSAoKnApIHsKIAkJcGFyZW50ID0gKnA7CiAJCW16X25vZGUgPSByYl9lbnRyeShwYXJlbnQsIHN0cnVjdCBtZW1fY2dyb3VwX3Blcl96b25lLApAQCAtMzUzLDE2ICszNTYsNiBAQAogfQogCiBzdGF0aWMgdm9pZAotbWVtX2Nncm91cF9pbnNlcnRfZXhjZWVkZWQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSwKLQkJCQlzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfem9uZSAqbXosCi0JCQkJc3RydWN0IG1lbV9jZ3JvdXBfdHJlZV9wZXJfem9uZSAqbWN0eikKLXsKLQlzcGluX2xvY2soJm1jdHotPmxvY2spOwotCV9fbWVtX2Nncm91cF9pbnNlcnRfZXhjZWVkZWQobWVtLCBteiwgbWN0eik7Ci0Jc3Bpbl91bmxvY2soJm1jdHotPmxvY2spOwotfQotCi1zdGF0aWMgdm9pZAogbWVtX2Nncm91cF9yZW1vdmVfZXhjZWVkZWQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSwKIAkJCQlzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfem9uZSAqbXosCiAJCQkJc3RydWN0IG1lbV9jZ3JvdXBfdHJlZV9wZXJfem9uZSAqbWN0eikKQEAgLTM5MiwzNCArMzg1LDM2IEBACiAKIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfdXBkYXRlX3RyZWUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSwgc3RydWN0IHBhZ2UgKnBhZ2UpCiB7Ci0JdW5zaWduZWQgbG9uZyBsb25nIHByZXZfdXNhZ2VfaW5fZXhjZXNzLCBuZXdfdXNhZ2VfaW5fZXhjZXNzOwotCWJvb2wgdXBkYXRlZF90cmVlID0gZmFsc2U7CisJdW5zaWduZWQgbG9uZyBsb25nIGV4Y2VzczsKIAlzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfem9uZSAqbXo7CiAJc3RydWN0IG1lbV9jZ3JvdXBfdHJlZV9wZXJfem9uZSAqbWN0ejsKLQotCW16ID0gbWVtX2Nncm91cF96b25laW5mbyhtZW0sIHBhZ2VfdG9fbmlkKHBhZ2UpLCBwYWdlX3pvbmVudW0ocGFnZSkpOworCWludCBuaWQgPSBwYWdlX3RvX25pZChwYWdlKTsKKwlpbnQgemlkID0gcGFnZV96b25lbnVtKHBhZ2UpOwogCW1jdHogPSBzb2Z0X2xpbWl0X3RyZWVfZnJvbV9wYWdlKHBhZ2UpOwogCiAJLyoKLQkgKiBXZSBkbyB1cGRhdGVzIGluIGxhenkgbW9kZSwgbWVtJ3MgYXJlIHJlbW92ZWQKLQkgKiBsYXppbHkgZnJvbSB0aGUgcGVyLXpvbmUsIHBlci1ub2RlIHJiIHRyZWUKKwkgKiBOZWNlc3NhcnkgdG8gdXBkYXRlIGFsbCBhbmNlc3RvcnMgd2hlbiBoaWVyYXJjaHkgaXMgdXNlZC4KKwkgKiBiZWNhdXNlIHRoZWlyIGV2ZW50IGNvdW50ZXIgaXMgbm90IHRvdWNoZWQuCiAJICovCi0JcHJldl91c2FnZV9pbl9leGNlc3MgPSBtei0+dXNhZ2VfaW5fZXhjZXNzOwotCi0JbmV3X3VzYWdlX2luX2V4Y2VzcyA9IHJlc19jb3VudGVyX3NvZnRfbGltaXRfZXhjZXNzKCZtZW0tPnJlcyk7Ci0JaWYgKHByZXZfdXNhZ2VfaW5fZXhjZXNzKSB7Ci0JCW1lbV9jZ3JvdXBfcmVtb3ZlX2V4Y2VlZGVkKG1lbSwgbXosIG1jdHopOwotCQl1cGRhdGVkX3RyZWUgPSB0cnVlOwotCX0KLQlpZiAoIW5ld191c2FnZV9pbl9leGNlc3MpCi0JCWdvdG8gZG9uZTsKLQltZW1fY2dyb3VwX2luc2VydF9leGNlZWRlZChtZW0sIG16LCBtY3R6KTsKLQotZG9uZToKLQlpZiAodXBkYXRlZF90cmVlKSB7Ci0JCXNwaW5fbG9jaygmbWN0ei0+bG9jayk7Ci0JCW16LT51c2FnZV9pbl9leGNlc3MgPSBuZXdfdXNhZ2VfaW5fZXhjZXNzOwotCQlzcGluX3VubG9jaygmbWN0ei0+bG9jayk7CisJZm9yICg7IG1lbTsgbWVtID0gcGFyZW50X21lbV9jZ3JvdXAobWVtKSkgeworCQlteiA9IG1lbV9jZ3JvdXBfem9uZWluZm8obWVtLCBuaWQsIHppZCk7CisJCWV4Y2VzcyA9IHJlc19jb3VudGVyX3NvZnRfbGltaXRfZXhjZXNzKCZtZW0tPnJlcyk7CisJCS8qCisJCSAqIFdlIGhhdmUgdG8gdXBkYXRlIHRoZSB0cmVlIGlmIG16IGlzIG9uIFJCLXRyZWUgb3IKKwkJICogbWVtIGlzIG92ZXIgaXRzIHNvZnRsaW1pdC4KKwkJICovCisJCWlmIChleGNlc3MgfHwgbXotPm9uX3RyZWUpIHsKKwkJCXNwaW5fbG9jaygmbWN0ei0+bG9jayk7CisJCQkvKiBpZiBvbi10cmVlLCByZW1vdmUgaXQgKi8KKwkJCWlmIChtei0+b25fdHJlZSkKKwkJCQlfX21lbV9jZ3JvdXBfcmVtb3ZlX2V4Y2VlZGVkKG1lbSwgbXosIG1jdHopOworCQkJLyoKKwkJCSAqIEluc2VydCBhZ2Fpbi4gbXotPnVzYWdlX2luX2V4Y2VzcyB3aWxsIGJlIHVwZGF0ZWQuCisJCQkgKiBJZiBleGNlc3MgaXMgMCwgbm8gdHJlZSBvcHMuCisJCQkgKi8KKwkJCV9fbWVtX2Nncm91cF9pbnNlcnRfZXhjZWVkZWQobWVtLCBteiwgbWN0eiwgZXhjZXNzKTsKKwkJCXNwaW5fdW5sb2NrKCZtY3R6LT5sb2NrKTsKKwkJfQogCX0KIH0KIApAQCAtNDQ3LDkgKzQ0MiwxMCBAQAogX19tZW1fY2dyb3VwX2xhcmdlc3Rfc29mdF9saW1pdF9ub2RlKHN0cnVjdCBtZW1fY2dyb3VwX3RyZWVfcGVyX3pvbmUgKm1jdHopCiB7CiAJc3RydWN0IHJiX25vZGUgKnJpZ2h0bW9zdCA9IE5VTEw7Ci0Jc3RydWN0IG1lbV9jZ3JvdXBfcGVyX3pvbmUgKm16ID0gTlVMTDsKKwlzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfem9uZSAqbXo7CiAKIHJldHJ5OgorCW16ID0gTlVMTDsKIAlyaWdodG1vc3QgPSByYl9sYXN0KCZtY3R6LT5yYl9yb290KTsKIAlpZiAoIXJpZ2h0bW9zdCkKIAkJZ290byBkb25lOwkJLyogTm90aGluZyB0byByZWNsYWltIGZyb20gKi8KQEAgLTEyNzAsOSArMTI2Niw5IEBACiAJCQlnZnBfdCBnZnBfbWFzaywgc3RydWN0IG1lbV9jZ3JvdXAgKiptZW1jZywKIAkJCWJvb2wgb29tLCBzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKLQlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtLCAqbWVtX292ZXJfbGltaXQsICptZW1fb3Zlcl9zb2Z0X2xpbWl0OworCXN0cnVjdCBtZW1fY2dyb3VwICptZW0sICptZW1fb3Zlcl9saW1pdDsKIAlpbnQgbnJfcmV0cmllcyA9IE1FTV9DR1JPVVBfUkVDTEFJTV9SRVRSSUVTOwotCXN0cnVjdCByZXNfY291bnRlciAqZmFpbF9yZXMsICpzb2Z0X2ZhaWxfcmVzID0gTlVMTDsKKwlzdHJ1Y3QgcmVzX2NvdW50ZXIgKmZhaWxfcmVzOwogCiAJaWYgKHVubGlrZWx5KHRlc3RfdGhyZWFkX2ZsYWcoVElGX01FTURJRSkpKSB7CiAJCS8qIERvbid0IGFjY291bnQgdGhpcyEgKi8KQEAgLTEzMDQsMTcgKzEzMDAsMTYgQEAKIAogCQlpZiAobWVtX2Nncm91cF9pc19yb290KG1lbSkpCiAJCQlnb3RvIGRvbmU7Ci0JCXJldCA9IHJlc19jb3VudGVyX2NoYXJnZSgmbWVtLT5yZXMsIFBBR0VfU0laRSwgJmZhaWxfcmVzLAotCQkJCQkJJnNvZnRfZmFpbF9yZXMpOworCQlyZXQgPSByZXNfY291bnRlcl9jaGFyZ2UoJm1lbS0+cmVzLCBQQUdFX1NJWkUsICZmYWlsX3Jlcyk7CiAJCWlmIChsaWtlbHkoIXJldCkpIHsKIAkJCWlmICghZG9fc3dhcF9hY2NvdW50KQogCQkJCWJyZWFrOwogCQkJcmV0ID0gcmVzX2NvdW50ZXJfY2hhcmdlKCZtZW0tPm1lbXN3LCBQQUdFX1NJWkUsCi0JCQkJCQkJJmZhaWxfcmVzLCBOVUxMKTsKKwkJCQkJCQkmZmFpbF9yZXMpOwogCQkJaWYgKGxpa2VseSghcmV0KSkKIAkJCQlicmVhazsKIAkJCS8qIG1lbStzd2FwIGNvdW50ZXIgZmFpbHMgKi8KLQkJCXJlc19jb3VudGVyX3VuY2hhcmdlKCZtZW0tPnJlcywgUEFHRV9TSVpFLCBOVUxMKTsKKwkJCXJlc19jb3VudGVyX3VuY2hhcmdlKCZtZW0tPnJlcywgUEFHRV9TSVpFKTsKIAkJCWZsYWdzIHw9IE1FTV9DR1JPVVBfUkVDTEFJTV9OT1NXQVA7CiAJCQltZW1fb3Zlcl9saW1pdCA9IG1lbV9jZ3JvdXBfZnJvbV9yZXNfY291bnRlcihmYWlsX3JlcywKIAkJCQkJCQkJCW1lbXN3KTsKQEAgLTEzNTMsMTYgKzEzNDgsMTEgQEAKIAkJfQogCX0KIAkvKgotCSAqIEluc2VydCBqdXN0IHRoZSBhbmNlc3Rvciwgd2Ugc2hvdWxkIHRyaWNrbGUgZG93biB0byB0aGUgY29ycmVjdAotCSAqIGNncm91cCBmb3IgcmVjbGFpbSwgc2luY2UgdGhlIG90aGVyIG5vZGVzIHdpbGwgYmUgYmVsb3cgdGhlaXIKLQkgKiBzb2Z0IGxpbWl0CisJICogSW5zZXJ0IGFuY2VzdG9yIChhbmQgYW5jZXN0b3IncyBhbmNlc3RvcnMpLCB0byBzb2Z0bGltaXQgUkItdHJlZS4KKwkgKiBpZiB0aGV5IGV4Y2VlZHMgc29mdGxpbWl0LgogCSAqLwotCWlmIChzb2Z0X2ZhaWxfcmVzKSB7Ci0JCW1lbV9vdmVyX3NvZnRfbGltaXQgPQotCQkJbWVtX2Nncm91cF9mcm9tX3Jlc19jb3VudGVyKHNvZnRfZmFpbF9yZXMsIHJlcyk7Ci0JCWlmIChtZW1fY2dyb3VwX3NvZnRfbGltaXRfY2hlY2sobWVtX292ZXJfc29mdF9saW1pdCkpCi0JCQltZW1fY2dyb3VwX3VwZGF0ZV90cmVlKG1lbV9vdmVyX3NvZnRfbGltaXQsIHBhZ2UpOwotCX0KKwlpZiAobWVtX2Nncm91cF9zb2Z0X2xpbWl0X2NoZWNrKG1lbSkpCisJCW1lbV9jZ3JvdXBfdXBkYXRlX3RyZWUobWVtLCBwYWdlKTsKIGRvbmU6CiAJcmV0dXJuIDA7CiBub21lbToKQEAgLTE0MzcsMTAgKzE0MjcsOSBAQAogCWlmICh1bmxpa2VseShQYWdlQ2dyb3VwVXNlZChwYykpKSB7CiAJCXVubG9ja19wYWdlX2Nncm91cChwYyk7CiAJCWlmICghbWVtX2Nncm91cF9pc19yb290KG1lbSkpIHsKLQkJCXJlc19jb3VudGVyX3VuY2hhcmdlKCZtZW0tPnJlcywgUEFHRV9TSVpFLCBOVUxMKTsKKwkJCXJlc19jb3VudGVyX3VuY2hhcmdlKCZtZW0tPnJlcywgUEFHRV9TSVpFKTsKIAkJCWlmIChkb19zd2FwX2FjY291bnQpCi0JCQkJcmVzX2NvdW50ZXJfdW5jaGFyZ2UoJm1lbS0+bWVtc3csIFBBR0VfU0laRSwKLQkJCQkJCQlOVUxMKTsKKwkJCQlyZXNfY291bnRlcl91bmNoYXJnZSgmbWVtLT5tZW1zdywgUEFHRV9TSVpFKTsKIAkJfQogCQljc3NfcHV0KCZtZW0tPmNzcyk7CiAJCXJldHVybjsKQEAgLTE1MTksNyArMTUwOCw3IEBACiAJCWdvdG8gb3V0OwogCiAJaWYgKCFtZW1fY2dyb3VwX2lzX3Jvb3QoZnJvbSkpCi0JCXJlc19jb3VudGVyX3VuY2hhcmdlKCZmcm9tLT5yZXMsIFBBR0VfU0laRSwgTlVMTCk7CisJCXJlc19jb3VudGVyX3VuY2hhcmdlKCZmcm9tLT5yZXMsIFBBR0VfU0laRSk7CiAJbWVtX2Nncm91cF9jaGFyZ2Vfc3RhdGlzdGljcyhmcm9tLCBwYywgZmFsc2UpOwogCiAJcGFnZSA9IHBjLT5wYWdlOwpAQCAtMTUzOSw3ICsxNTI4LDcgQEAKIAl9CiAKIAlpZiAoZG9fc3dhcF9hY2NvdW50ICYmICFtZW1fY2dyb3VwX2lzX3Jvb3QoZnJvbSkpCi0JCXJlc19jb3VudGVyX3VuY2hhcmdlKCZmcm9tLT5tZW1zdywgUEFHRV9TSVpFLCBOVUxMKTsKKwkJcmVzX2NvdW50ZXJfdW5jaGFyZ2UoJmZyb20tPm1lbXN3LCBQQUdFX1NJWkUpOwogCWNzc19wdXQoJmZyb20tPmNzcyk7CiAKIAljc3NfZ2V0KCZ0by0+Y3NzKTsKQEAgLTE2MTAsOSArMTU5OSw5IEBACiAJY3NzX3B1dCgmcGFyZW50LT5jc3MpOwogCS8qIHVuY2hhcmdlIGlmIG1vdmUgZmFpbHMgKi8KIAlpZiAoIW1lbV9jZ3JvdXBfaXNfcm9vdChwYXJlbnQpKSB7Ci0JCXJlc19jb3VudGVyX3VuY2hhcmdlKCZwYXJlbnQtPnJlcywgUEFHRV9TSVpFLCBOVUxMKTsKKwkJcmVzX2NvdW50ZXJfdW5jaGFyZ2UoJnBhcmVudC0+cmVzLCBQQUdFX1NJWkUpOwogCQlpZiAoZG9fc3dhcF9hY2NvdW50KQotCQkJcmVzX2NvdW50ZXJfdW5jaGFyZ2UoJnBhcmVudC0+bWVtc3csIFBBR0VfU0laRSwgTlVMTCk7CisJCQlyZXNfY291bnRlcl91bmNoYXJnZSgmcGFyZW50LT5tZW1zdywgUEFHRV9TSVpFKTsKIAl9CiAJcmV0dXJuIHJldDsKIH0KQEAgLTE4MDMsOCArMTc5Miw3IEBACiAJCQkgKiBjYWxsaW5nIGNzc190cnlnZXQKIAkJCSAqLwogCQkJaWYgKCFtZW1fY2dyb3VwX2lzX3Jvb3QobWVtY2cpKQotCQkJCXJlc19jb3VudGVyX3VuY2hhcmdlKCZtZW1jZy0+bWVtc3csIFBBR0VfU0laRSwKLQkJCQkJCQlOVUxMKTsKKwkJCQlyZXNfY291bnRlcl91bmNoYXJnZSgmbWVtY2ctPm1lbXN3LCBQQUdFX1NJWkUpOwogCQkJbWVtX2Nncm91cF9zd2FwX3N0YXRpc3RpY3MobWVtY2csIGZhbHNlKTsKIAkJCW1lbV9jZ3JvdXBfcHV0KG1lbWNnKTsKIAkJfQpAQCAtMTgzMSw5ICsxODE5LDkgQEAKIAlpZiAoIW1lbSkKIAkJcmV0dXJuOwogCWlmICghbWVtX2Nncm91cF9pc19yb290KG1lbSkpIHsKLQkJcmVzX2NvdW50ZXJfdW5jaGFyZ2UoJm1lbS0+cmVzLCBQQUdFX1NJWkUsIE5VTEwpOworCQlyZXNfY291bnRlcl91bmNoYXJnZSgmbWVtLT5yZXMsIFBBR0VfU0laRSk7CiAJCWlmIChkb19zd2FwX2FjY291bnQpCi0JCQlyZXNfY291bnRlcl91bmNoYXJnZSgmbWVtLT5tZW1zdywgUEFHRV9TSVpFLCBOVUxMKTsKKwkJCXJlc19jb3VudGVyX3VuY2hhcmdlKCZtZW0tPm1lbXN3LCBQQUdFX1NJWkUpOwogCX0KIAljc3NfcHV0KCZtZW0tPmNzcyk7CiB9CkBAIC0xODQ4LDcgKzE4MzYsNiBAQAogCXN0cnVjdCBwYWdlX2Nncm91cCAqcGM7CiAJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSA9IE5VTEw7CiAJc3RydWN0IG1lbV9jZ3JvdXBfcGVyX3pvbmUgKm16OwotCWJvb2wgc29mdF9saW1pdF9leGNlc3MgPSBmYWxzZTsKIAogCWlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkpCiAJCXJldHVybiBOVUxMOwpAQCAtMTg4OCwxMCArMTg3NSwxMCBAQAogCX0KIAogCWlmICghbWVtX2Nncm91cF9pc19yb290KG1lbSkpIHsKLQkJcmVzX2NvdW50ZXJfdW5jaGFyZ2UoJm1lbS0+cmVzLCBQQUdFX1NJWkUsICZzb2Z0X2xpbWl0X2V4Y2Vzcyk7CisJCXJlc19jb3VudGVyX3VuY2hhcmdlKCZtZW0tPnJlcywgUEFHRV9TSVpFKTsKIAkJaWYgKGRvX3N3YXBfYWNjb3VudCAmJgogCQkJCShjdHlwZSAhPSBNRU1fQ0dST1VQX0NIQVJHRV9UWVBFX1NXQVBPVVQpKQotCQkJcmVzX2NvdW50ZXJfdW5jaGFyZ2UoJm1lbS0+bWVtc3csIFBBR0VfU0laRSwgTlVMTCk7CisJCQlyZXNfY291bnRlcl91bmNoYXJnZSgmbWVtLT5tZW1zdywgUEFHRV9TSVpFKTsKIAl9CiAJaWYgKGN0eXBlID09IE1FTV9DR1JPVVBfQ0hBUkdFX1RZUEVfU1dBUE9VVCkKIAkJbWVtX2Nncm91cF9zd2FwX3N0YXRpc3RpY3MobWVtLCB0cnVlKTsKQEAgLTE5MDgsNyArMTg5NSw3IEBACiAJbXogPSBwYWdlX2Nncm91cF96b25laW5mbyhwYyk7CiAJdW5sb2NrX3BhZ2VfY2dyb3VwKHBjKTsKIAotCWlmIChzb2Z0X2xpbWl0X2V4Y2VzcyAmJiBtZW1fY2dyb3VwX3NvZnRfbGltaXRfY2hlY2sobWVtKSkKKwlpZiAobWVtX2Nncm91cF9zb2Z0X2xpbWl0X2NoZWNrKG1lbSkpCiAJCW1lbV9jZ3JvdXBfdXBkYXRlX3RyZWUobWVtLCBwYWdlKTsKIAkvKiBhdCBzd2Fwb3V0LCB0aGlzIG1lbWNnIHdpbGwgYmUgYWNjZXNzZWQgdG8gcmVjb3JkIHRvIHN3YXAgKi8KIAlpZiAoY3R5cGUgIT0gTUVNX0NHUk9VUF9DSEFSR0VfVFlQRV9TV0FQT1VUKQpAQCAtMTk4Niw3ICsxOTczLDcgQEAKIAkJICogVGhpcyBtZW1jZyBjYW4gYmUgb2Jzb2xldGUgb25lLiBXZSBhdm9pZCBjYWxsaW5nIGNzc190cnlnZXQKIAkJICovCiAJCWlmICghbWVtX2Nncm91cF9pc19yb290KG1lbWNnKSkKLQkJCXJlc19jb3VudGVyX3VuY2hhcmdlKCZtZW1jZy0+bWVtc3csIFBBR0VfU0laRSwgTlVMTCk7CisJCQlyZXNfY291bnRlcl91bmNoYXJnZSgmbWVtY2ctPm1lbXN3LCBQQUdFX1NJWkUpOwogCQltZW1fY2dyb3VwX3N3YXBfc3RhdGlzdGljcyhtZW1jZywgZmFsc2UpOwogCQltZW1fY2dyb3VwX3B1dChtZW1jZyk7CiAJfQpAQCAtMjIzMyw2ICsyMjIwLDcgQEAKIAl1bnNpZ25lZCBsb25nIHJlY2xhaW1lZDsKIAlpbnQgbG9vcCA9IDA7CiAJc3RydWN0IG1lbV9jZ3JvdXBfdHJlZV9wZXJfem9uZSAqbWN0ejsKKwl1bnNpZ25lZCBsb25nIGxvbmcgZXhjZXNzOwogCiAJaWYgKG9yZGVyID4gMCkKIAkJcmV0dXJuIDA7CkBAIC0yMjg0LDkgKzIyNzIsOCBAQAogCQkJCQlicmVhazsKIAkJCX0gd2hpbGUgKDEpOwogCQl9Ci0JCW16LT51c2FnZV9pbl9leGNlc3MgPQotCQkJcmVzX2NvdW50ZXJfc29mdF9saW1pdF9leGNlc3MoJm16LT5tZW0tPnJlcyk7CiAJCV9fbWVtX2Nncm91cF9yZW1vdmVfZXhjZWVkZWQobXotPm1lbSwgbXosIG1jdHopOworCQlleGNlc3MgPSByZXNfY291bnRlcl9zb2Z0X2xpbWl0X2V4Y2VzcygmbXotPm1lbS0+cmVzKTsKIAkJLyoKIAkJICogT25lIHNjaG9vbCBvZiB0aG91Z2h0IHNheXMgdGhhdCB3ZSBzaG91bGQgbm90IGFkZAogCQkgKiBiYWNrIHRoZSBub2RlIHRvIHRoZSB0cmVlIGlmIHJlY2xhaW0gcmV0dXJucyAwLgpAQCAtMjI5NSw4ICsyMjgyLDggQEAKIAkJICogbWVtb3J5IHRvIHJlY2xhaW0gZnJvbS4gQ29uc2lkZXIgdGhpcyBhcyBhIGxvbmdlcgogCQkgKiB0ZXJtIFRPRE8uCiAJCSAqLwotCQlpZiAobXotPnVzYWdlX2luX2V4Y2VzcykKLQkJCV9fbWVtX2Nncm91cF9pbnNlcnRfZXhjZWVkZWQobXotPm1lbSwgbXosIG1jdHopOworCQkvKiBJZiBleGNlc3MgPT0gMCwgbm8gdHJlZSBvcHMgKi8KKwkJX19tZW1fY2dyb3VwX2luc2VydF9leGNlZWRlZChtei0+bWVtLCBteiwgbWN0eiwgZXhjZXNzKTsKIAkJc3Bpbl91bmxvY2soJm1jdHotPmxvY2spOwogCQljc3NfcHV0KCZtei0+bWVtLT5jc3MpOwogCQlsb29wKys7CmRpZmYgLS1naXQgYS9tbS9tZW1vcnktZmFpbHVyZS5jIGIvbW0vbWVtb3J5LWZhaWx1cmUuYwppbmRleCA3MjlkNGIxLi5kYWNjNjQxIDEwMDY0NAotLS0gYS9tbS9tZW1vcnktZmFpbHVyZS5jCisrKyBiL21tL21lbW9yeS1mYWlsdXJlLmMKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3BhZ2UtZmxhZ3MuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2tzbS5oPgogI2luY2x1ZGUgPGxpbnV4L3JtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvc3dhcC5oPgpAQCAtMzcwLDkgKzM3MSw2IEBACiAJaW50IHJldCA9IEZBSUxFRDsKIAlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZzsKIAotCWlmICghaXNvbGF0ZV9scnVfcGFnZShwKSkKLQkJcGFnZV9jYWNoZV9yZWxlYXNlKHApOwotCiAJLyoKIAkgKiBGb3IgYW5vbnltb3VzIHBhZ2VzIHdlJ3JlIGRvbmUgdGhlIG9ubHkgcmVmZXJlbmNlIGxlZnQKIAkgKiBzaG91bGQgYmUgdGhlIG9uZSBtX2YoKSBob2xkcy4KQEAgLTQ5OCwzMCArNDk2LDE4IEBACiAgKi8KIHN0YXRpYyBpbnQgbWVfc3dhcGNhY2hlX2RpcnR5KHN0cnVjdCBwYWdlICpwLCB1bnNpZ25lZCBsb25nIHBmbikKIHsKLQlpbnQgcmV0ID0gRkFJTEVEOwotCiAJQ2xlYXJQYWdlRGlydHkocCk7CiAJLyogVHJpZ2dlciBFSU8gaW4gc2htZW06ICovCiAJQ2xlYXJQYWdlVXB0b2RhdGUocCk7CiAKLQlpZiAoIWlzb2xhdGVfbHJ1X3BhZ2UocCkpIHsKLQkJcGFnZV9jYWNoZV9yZWxlYXNlKHApOwotCQlyZXQgPSBERUxBWUVEOwotCX0KLQotCXJldHVybiByZXQ7CisJcmV0dXJuIERFTEFZRUQ7CiB9CiAKIHN0YXRpYyBpbnQgbWVfc3dhcGNhY2hlX2NsZWFuKHN0cnVjdCBwYWdlICpwLCB1bnNpZ25lZCBsb25nIHBmbikKIHsKLQlpbnQgcmV0ID0gRkFJTEVEOwotCi0JaWYgKCFpc29sYXRlX2xydV9wYWdlKHApKSB7Ci0JCXBhZ2VfY2FjaGVfcmVsZWFzZShwKTsKLQkJcmV0ID0gUkVDT1ZFUkVEOwotCX0KIAlkZWxldGVfZnJvbV9zd2FwX2NhY2hlKHApOwotCXJldHVybiByZXQ7CisKKwlyZXR1cm4gUkVDT1ZFUkVEOwogfQogCiAvKgpAQCAtNjExLDggKzU5Nyw2IEBACiAJeyAwLAkJMCwJCSJ1bmtub3duIHBhZ2Ugc3RhdGUiLAltZV91bmtub3duIH0sCiB9OwogCi0jdW5kZWYgbHJ1Ci0KIHN0YXRpYyB2b2lkIGFjdGlvbl9yZXN1bHQodW5zaWduZWQgbG9uZyBwZm4sIGNoYXIgKm1zZywgaW50IHJlc3VsdCkKIHsKIAlzdHJ1Y3QgcGFnZSAqcGFnZSA9IE5VTEw7CkBAIC02MjksMTMgKzYxMywxNiBAQAogCQkJdW5zaWduZWQgbG9uZyBwZm4sIGludCByZWYpCiB7CiAJaW50IHJlc3VsdDsKKwlpbnQgY291bnQ7CiAKIAlyZXN1bHQgPSBwcy0+YWN0aW9uKHAsIHBmbik7CiAJYWN0aW9uX3Jlc3VsdChwZm4sIHBzLT5tc2csIHJlc3VsdCk7Ci0JaWYgKHBhZ2VfY291bnQocCkgIT0gMSArIHJlZikKKworCWNvdW50ID0gcGFnZV9jb3VudChwKSAtIDEgLSByZWY7CisJaWYgKGNvdW50ICE9IDApCiAJCXByaW50ayhLRVJOX0VSUgogCQkgICAgICAgIk1DRSAlI2x4OiAlcyBwYWdlIHN0aWxsIHJlZmVyZW5jZWQgYnkgJWQgdXNlcnNcbiIsCi0JCSAgICAgICBwZm4sIHBzLT5tc2csIHBhZ2VfY291bnQocCkgLSAxKTsKKwkJICAgICAgIHBmbiwgcHMtPm1zZywgY291bnQpOwogCiAJLyogQ291bGQgZG8gbW9yZSBjaGVja3MgaGVyZSBpZiBwYWdlIGxvb2tzIG9rICovCiAJLyoKQEAgLTY2MSwxMiArNjQ4LDkgQEAKIAlpbnQgaTsKIAlpbnQga2lsbCA9IDE7CiAKLQlpZiAoUGFnZVJlc2VydmVkKHApIHx8IFBhZ2VDb21wb3VuZChwKSB8fCBQYWdlU2xhYihwKSkKKwlpZiAoUGFnZVJlc2VydmVkKHApIHx8IFBhZ2VDb21wb3VuZChwKSB8fCBQYWdlU2xhYihwKSB8fCBQYWdlS3NtKHApKQogCQlyZXR1cm47CiAKLQlpZiAoIVBhZ2VMUlUocCkpCi0JCWxydV9hZGRfZHJhaW5fYWxsKCk7Ci0KIAkvKgogCSAqIFRoaXMgY2hlY2sgaW1wbGllcyB3ZSBkb24ndCBraWxsIHByb2Nlc3NlcyBpZiB0aGVpciBwYWdlcwogCSAqIGFyZSBpbiB0aGUgc3dhcCBjYWNoZSBlYXJseS4gVGhvc2UgYXJlIGFsd2F5cyBsYXRlIGtpbGxzLgpAQCAtNzM4LDYgKzcyMiw3IEBACiAKIGludCBfX21lbW9yeV9mYWlsdXJlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgdHJhcG5vLCBpbnQgcmVmKQogeworCXVuc2lnbmVkIGxvbmcgbHJ1X2ZsYWc7CiAJc3RydWN0IHBhZ2Vfc3RhdGUgKnBzOwogCXN0cnVjdCBwYWdlICpwOwogCWludCByZXM7CkBAIC03NzUsNiArNzYwLDI0IEBACiAJfQogCiAJLyoKKwkgKiBXZSBpZ25vcmUgbm9uLUxSVSBwYWdlcyBmb3IgZ29vZCByZWFzb25zLgorCSAqIC0gUEdfbG9ja2VkIGlzIG9ubHkgd2VsbCBkZWZpbmVkIGZvciBMUlUgcGFnZXMgYW5kIGEgZmV3IG90aGVycworCSAqIC0gdG8gYXZvaWQgcmFjZXMgd2l0aCBfX3NldF9wYWdlX2xvY2tlZCgpCisJICogLSB0byBhdm9pZCByYWNlcyB3aXRoIF9fU2V0UGFnZVNsYWIqKCkgKGFuZCBtb3JlIG5vbi1hdG9taWMgb3BzKQorCSAqIFRoZSBjaGVjayAodW5uZWNlc3NhcmlseSkgaWdub3JlcyBMUlUgcGFnZXMgYmVpbmcgaXNvbGF0ZWQgYW5kCisJICogd2Fsa2VkIGJ5IHRoZSBwYWdlIHJlY2xhaW0gY29kZSwgaG93ZXZlciB0aGF0J3Mgbm90IGEgYmlnIGxvc3MuCisJICovCisJaWYgKCFQYWdlTFJVKHApKQorCQlscnVfYWRkX2RyYWluX2FsbCgpOworCWxydV9mbGFnID0gcC0+ZmxhZ3MgJiBscnU7CisJaWYgKGlzb2xhdGVfbHJ1X3BhZ2UocCkpIHsKKwkJYWN0aW9uX3Jlc3VsdChwZm4sICJub24gTFJVIiwgSUdOT1JFRCk7CisJCXB1dF9wYWdlKHApOworCQlyZXR1cm4gLUVCVVNZOworCX0KKwlwYWdlX2NhY2hlX3JlbGVhc2UocCk7CisKKwkvKgogCSAqIExvY2sgdGhlIHBhZ2UgYW5kIHdhaXQgZm9yIHdyaXRlYmFjayB0byBmaW5pc2guCiAJICogSXQncyB2ZXJ5IGRpZmZpY3VsdCB0byBtZXNzIHdpdGggcGFnZXMgY3VycmVudGx5IHVuZGVyIElPCiAJICogYW5kIGluIG1hbnkgY2FzZXMgaW1wb3NzaWJsZSwgc28gd2UganVzdCBhdm9pZCBpdCBoZXJlLgpAQCAtNzkwLDcgKzc5Myw3IEBACiAJLyoKIAkgKiBUb3JuIGRvd24gYnkgc29tZW9uZSBlbHNlPwogCSAqLwotCWlmIChQYWdlTFJVKHApICYmICFQYWdlU3dhcENhY2hlKHApICYmIHAtPm1hcHBpbmcgPT0gTlVMTCkgeworCWlmICgobHJ1X2ZsYWcgJiBscnUpICYmICFQYWdlU3dhcENhY2hlKHApICYmIHAtPm1hcHBpbmcgPT0gTlVMTCkgewogCQlhY3Rpb25fcmVzdWx0KHBmbiwgImFscmVhZHkgdHJ1bmNhdGVkIExSVSIsIElHTk9SRUQpOwogCQlyZXMgPSAwOwogCQlnb3RvIG91dDsKQEAgLTc5OCw3ICs4MDEsNyBAQAogCiAJcmVzID0gLUVCVVNZOwogCWZvciAocHMgPSBlcnJvcl9zdGF0ZXM7OyBwcysrKSB7Ci0JCWlmICgocC0+ZmxhZ3MgJiBwcy0+bWFzaykgPT0gcHMtPnJlcykgeworCQlpZiAoKChwLT5mbGFncyB8IGxydV9mbGFnKSYgcHMtPm1hc2spID09IHBzLT5yZXMpIHsKIAkJCXJlcyA9IHBhZ2VfYWN0aW9uKHBzLCBwLCBwZm4sIHJlZik7CiAJCQlicmVhazsKIAkJfQpkaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuYwppbmRleCA3ZTkxYjVmLi42YWIxOWRkIDEwMDY0NAotLS0gYS9tbS9tZW1vcnkuYworKysgYi9tbS9tZW1vcnkuYwpAQCAtNjQxLDYgKzY0MSw3IEBACiAJCXBtZF90ICpkc3RfcG1kLCBwbWRfdCAqc3JjX3BtZCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJCXVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQpCiB7CisJcHRlX3QgKm9yaWdfc3JjX3B0ZSwgKm9yaWdfZHN0X3B0ZTsKIAlwdGVfdCAqc3JjX3B0ZSwgKmRzdF9wdGU7CiAJc3BpbmxvY2tfdCAqc3JjX3B0bCwgKmRzdF9wdGw7CiAJaW50IHByb2dyZXNzID0gMDsKQEAgLTY1NCw2ICs2NTUsOCBAQAogCXNyY19wdGUgPSBwdGVfb2Zmc2V0X21hcF9uZXN0ZWQoc3JjX3BtZCwgYWRkcik7CiAJc3JjX3B0bCA9IHB0ZV9sb2NrcHRyKHNyY19tbSwgc3JjX3BtZCk7CiAJc3Bpbl9sb2NrX25lc3RlZChzcmNfcHRsLCBTSU5HTEVfREVQVEhfTkVTVElORyk7CisJb3JpZ19zcmNfcHRlID0gc3JjX3B0ZTsKKwlvcmlnX2RzdF9wdGUgPSBkc3RfcHRlOwogCWFyY2hfZW50ZXJfbGF6eV9tbXVfbW9kZSgpOwogCiAJZG8gewpAQCAtNjc3LDkgKzY4MCw5IEBACiAKIAlhcmNoX2xlYXZlX2xhenlfbW11X21vZGUoKTsKIAlzcGluX3VubG9jayhzcmNfcHRsKTsKLQlwdGVfdW5tYXBfbmVzdGVkKHNyY19wdGUgLSAxKTsKKwlwdGVfdW5tYXBfbmVzdGVkKG9yaWdfc3JjX3B0ZSk7CiAJYWRkX21tX3Jzcyhkc3RfbW0sIHJzc1swXSwgcnNzWzFdKTsKLQlwdGVfdW5tYXBfdW5sb2NrKGRzdF9wdGUgLSAxLCBkc3RfcHRsKTsKKwlwdGVfdW5tYXBfdW5sb2NrKG9yaWdfZHN0X3B0ZSwgZHN0X3B0bCk7CiAJY29uZF9yZXNjaGVkKCk7CiAJaWYgKGFkZHIgIT0gZW5kKQogCQlnb3RvIGFnYWluOwpAQCAtMTgyMCwxMCArMTgyMywxMCBAQAogCXRva2VuID0gcG1kX3BndGFibGUoKnBtZCk7CiAKIAlkbyB7Ci0JCWVyciA9IGZuKHB0ZSwgdG9rZW4sIGFkZHIsIGRhdGEpOworCQllcnIgPSBmbihwdGUrKywgdG9rZW4sIGFkZHIsIGRhdGEpOwogCQlpZiAoZXJyKQogCQkJYnJlYWs7Ci0JfSB3aGlsZSAocHRlKyssIGFkZHIgKz0gUEFHRV9TSVpFLCBhZGRyICE9IGVuZCk7CisJfSB3aGlsZSAoYWRkciArPSBQQUdFX1NJWkUsIGFkZHIgIT0gZW5kKTsKIAogCWFyY2hfbGVhdmVfbGF6eV9tbXVfbW9kZSgpOwogCkBAIC0yNTM5LDcgKzI1NDIsNyBAQAogCX0gZWxzZSBpZiAoUGFnZUhXUG9pc29uKHBhZ2UpKSB7CiAJCXJldCA9IFZNX0ZBVUxUX0hXUE9JU09OOwogCQlkZWxheWFjY3RfY2xlYXJfZmxhZyhERUxBWUFDQ1RfUEZfU1dBUElOKTsKLQkJZ290byBvdXQ7CisJCWdvdG8gb3V0X3JlbGVhc2U7CiAJfQogCiAJbG9ja19wYWdlKHBhZ2UpOwpAQCAtMjYxMSw2ICsyNjE0LDcgQEAKIAlwdGVfdW5tYXBfdW5sb2NrKHBhZ2VfdGFibGUsIHB0bCk7CiBvdXRfcGFnZToKIAl1bmxvY2tfcGFnZShwYWdlKTsKK291dF9yZWxlYXNlOgogCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKIAlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvbW0vbWVtcG9saWN5LmMgYi9tbS9tZW1wb2xpY3kuYwppbmRleCA3ZGQ5ZDlmLi40NTQ1ZDU5IDEwMDY0NAotLS0gYS9tbS9tZW1wb2xpY3kuYworKysgYi9tbS9tZW1wb2xpY3kuYwpAQCAtMTAyNCw3ICsxMDI0LDcgQEAKIAogCQllcnIgPSBtaWdyYXRlX3ByZXAoKTsKIAkJaWYgKGVycikKLQkJCXJldHVybiBlcnI7CisJCQlnb3RvIG1wb2xfb3V0OwogCX0KIAl7CiAJCU5PREVNQVNLX1NDUkFUQ0goc2NyYXRjaCk7CkBAIC0xMDM5LDEwICsxMDM5LDkgQEAKIAkJCWVyciA9IC1FTk9NRU07CiAJCU5PREVNQVNLX1NDUkFUQ0hfRlJFRShzY3JhdGNoKTsKIAl9Ci0JaWYgKGVycikgewotCQltcG9sX3B1dChuZXcpOwotCQlyZXR1cm4gZXJyOwotCX0KKwlpZiAoZXJyKQorCQlnb3RvIG1wb2xfb3V0OworCiAJdm1hID0gY2hlY2tfcmFuZ2UobW0sIHN0YXJ0LCBlbmQsIG5tYXNrLAogCQkJICBmbGFncyB8IE1QT0xfTUZfSU5WRVJULCAmcGFnZWxpc3QpOwogCkBAIC0xMDU4LDkgKzEwNTcsMTEgQEAKIAogCQlpZiAoIWVyciAmJiBucl9mYWlsZWQgJiYgKGZsYWdzICYgTVBPTF9NRl9TVFJJQ1QpKQogCQkJZXJyID0gLUVJTzsKLQl9CisJfSBlbHNlCisJCXB1dGJhY2tfbHJ1X3BhZ2VzKCZwYWdlbGlzdCk7CiAKIAl1cF93cml0ZSgmbW0tPm1tYXBfc2VtKTsKKyBtcG9sX291dDoKIAltcG9sX3B1dChuZXcpOwogCXJldHVybiBlcnI7CiB9CmRpZmYgLS1naXQgYS9tbS9tbWFwLmMgYi9tbS9tbWFwLmMKaW5kZXggMjFkNDAyOS4uNzNmNWU0YiAxMDA2NDQKLS0tIGEvbW0vbW1hcC5jCisrKyBiL21tL21tYXAuYwpAQCAtMjI4Miw3ICsyMjgyLDcgQEAKIHsKIH0KIAotc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBzcGVjaWFsX21hcHBpbmdfdm1vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHNwZWNpYWxfbWFwcGluZ192bW9wcyA9IHsKIAkuY2xvc2UgPSBzcGVjaWFsX21hcHBpbmdfY2xvc2UsCiAJLmZhdWx0ID0gc3BlY2lhbF9tYXBwaW5nX2ZhdWx0LAogfTsKZGlmZiAtLWdpdCBhL21tL25vbW11LmMgYi9tbS9ub21tdS5jCmluZGV4IDU2YTQ0NmYuLjk4NzZmYTAgMTAwNjQ0Ci0tLSBhL21tL25vbW11LmMKKysrIGIvbW0vbm9tbXUuYwpAQCAtNzksNyArNzksNyBAQAogc3RydWN0IHJiX3Jvb3Qgbm9tbXVfcmVnaW9uX3RyZWUgPSBSQl9ST09UOwogREVDTEFSRV9SV1NFTShub21tdV9yZWdpb25fc2VtKTsKIAotc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGdlbmVyaWNfZmlsZV92bV9vcHMgPSB7Citjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgZ2VuZXJpY19maWxlX3ZtX29wcyA9IHsKIH07CiAKIC8qCkBAIC04MjYsNyArODI2LDcgQEAKIAlpbnQgcmV0OwogCiAJLyogZG8gdGhlIHNpbXBsZSBjaGVja3MgZmlyc3QgKi8KLQlpZiAoZmxhZ3MgJiBNQVBfRklYRUQgfHwgYWRkcikgeworCWlmIChmbGFncyAmIE1BUF9GSVhFRCkgewogCQlwcmludGsoS0VSTl9ERUJVRwogCQkgICAgICAgIiVkOiBDYW4ndCBkbyBmaXhlZC1hZGRyZXNzL292ZXJsYXkgbW1hcCBvZiBSQU1cbiIsCiAJCSAgICAgICBjdXJyZW50LT5waWQpOwpAQCAtMTAzNCw3ICsxMDM0LDcgQEAKIAlyZXQgPSB2bWEtPnZtX2ZpbGUtPmZfb3AtPm1tYXAodm1hLT52bV9maWxlLCB2bWEpOwogCWlmIChyZXQgPT0gMCkgewogCQl2bWEtPnZtX3JlZ2lvbi0+dm1fdG9wID0gdm1hLT52bV9yZWdpb24tPnZtX2VuZDsKLQkJcmV0dXJuIHJldDsKKwkJcmV0dXJuIDA7CiAJfQogCWlmIChyZXQgIT0gLUVOT1NZUykKIAkJcmV0dXJuIHJldDsKQEAgLTEwNTEsNyArMTA1MSw4IEBACiAgKi8KIHN0YXRpYyBpbnQgZG9fbW1hcF9wcml2YXRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCQkJICAgc3RydWN0IHZtX3JlZ2lvbiAqcmVnaW9uLAotCQkJICAgdW5zaWduZWQgbG9uZyBsZW4pCisJCQkgICB1bnNpZ25lZCBsb25nIGxlbiwKKwkJCSAgIHVuc2lnbmVkIGxvbmcgY2FwYWJpbGl0aWVzKQogewogCXN0cnVjdCBwYWdlICpwYWdlczsKIAl1bnNpZ25lZCBsb25nIHRvdGFsLCBwb2ludCwgbiwgcmxlbjsKQEAgLTEwNjIsMTMgKzEwNjMsMTMgQEAKIAkgKiBzaGFyZWQgbWFwcGluZ3Mgb24gZGV2aWNlcyBvciBtZW1vcnkKIAkgKiAtIFZNX01BWVNIQVJFIHdpbGwgYmUgc2V0IGlmIGl0IG1heSBhdHRlbXB0IHRvIHNoYXJlCiAJICovCi0JaWYgKHZtYS0+dm1fZmlsZSkgeworCWlmIChjYXBhYmlsaXRpZXMgJiBCRElfQ0FQX01BUF9ESVJFQ1QpIHsKIAkJcmV0ID0gdm1hLT52bV9maWxlLT5mX29wLT5tbWFwKHZtYS0+dm1fZmlsZSwgdm1hKTsKIAkJaWYgKHJldCA9PSAwKSB7CiAJCQkvKiBzaG91bGRuJ3QgcmV0dXJuIHN1Y2Nlc3MgaWYgd2UncmUgbm90IHNoYXJpbmcgKi8KIAkJCUJVR19PTighKHZtYS0+dm1fZmxhZ3MgJiBWTV9NQVlTSEFSRSkpOwogCQkJdm1hLT52bV9yZWdpb24tPnZtX3RvcCA9IHZtYS0+dm1fcmVnaW9uLT52bV9lbmQ7Ci0JCQlyZXR1cm4gcmV0OworCQkJcmV0dXJuIDA7CiAJCX0KIAkJaWYgKHJldCAhPSAtRU5PU1lTKQogCQkJcmV0dXJuIHJldDsKQEAgLTExODEsOSArMTE4Miw2IEBACiAKIAlrZW50ZXIoIiwlbHgsJWx4LCVseCwlbHgsJWx4IiwgYWRkciwgbGVuLCBwcm90LCBmbGFncywgcGdvZmYpOwogCi0JaWYgKCEoZmxhZ3MgJiBNQVBfRklYRUQpKQotCQlhZGRyID0gcm91bmRfaGludF90b19taW4oYWRkcik7Ci0KIAkvKiBkZWNpZGUgd2hldGhlciB3ZSBzaG91bGQgYXR0ZW1wdCB0aGUgbWFwcGluZywgYW5kIGlmIHNvIHdoYXQgc29ydCBvZgogCSAqIG1hcHBpbmcgKi8KIAlyZXQgPSB2YWxpZGF0ZV9tbWFwX3JlcXVlc3QoZmlsZSwgYWRkciwgbGVuLCBwcm90LCBmbGFncywgcGdvZmYsCkBAIC0xMTkzLDYgKzExOTEsOSBAQAogCQlyZXR1cm4gcmV0OwogCX0KIAorCS8qIHdlIGlnbm9yZSB0aGUgYWRkcmVzcyBoaW50ICovCisJYWRkciA9IDA7CisKIAkvKiB3ZSd2ZSBkZXRlcm1pbmVkIHRoYXQgd2UgY2FuIG1ha2UgdGhlIG1hcHBpbmcsIG5vdyB0cmFuc2xhdGUgd2hhdCB3ZQogCSAqIG5vdyBrbm93IGludG8gVk1BIGZsYWdzICovCiAJdm1fZmxhZ3MgPSBkZXRlcm1pbmVfdm1fZmxhZ3MoZmlsZSwgcHJvdCwgZmxhZ3MsIGNhcGFiaWxpdGllcyk7CkBAIC0xMzA2LDcgKzEzMDcsNyBAQAogCQkgKiAtIHRoaXMgaXMgdGhlIGhvb2sgZm9yIHF1YXNpLW1lbW9yeSBjaGFyYWN0ZXIgZGV2aWNlcyB0bwogCQkgKiAgIHRlbGwgdXMgdGhlIGxvY2F0aW9uIG9mIGEgc2hhcmVkIG1hcHBpbmcKIAkJICovCi0JCWlmIChmaWxlICYmIGZpbGUtPmZfb3AtPmdldF91bm1hcHBlZF9hcmVhKSB7CisJCWlmIChjYXBhYmlsaXRpZXMgJiBCRElfQ0FQX01BUF9ESVJFQ1QpIHsKIAkJCWFkZHIgPSBmaWxlLT5mX29wLT5nZXRfdW5tYXBwZWRfYXJlYShmaWxlLCBhZGRyLCBsZW4sCiAJCQkJCQkJICAgICBwZ29mZiwgZmxhZ3MpOwogCQkJaWYgKElTX0VSUigodm9pZCAqKSBhZGRyKSkgewpAQCAtMTMzMCwxNSArMTMzMSwxNyBAQAogCX0KIAogCXZtYS0+dm1fcmVnaW9uID0gcmVnaW9uOwotCWFkZF9ub21tdV9yZWdpb24ocmVnaW9uKTsKIAotCS8qIHNldCB1cCB0aGUgbWFwcGluZyAqLworCS8qIHNldCB1cCB0aGUgbWFwcGluZworCSAqIC0gdGhlIHJlZ2lvbiBpcyBmaWxsZWQgaW4gaWYgQkRJX0NBUF9NQVBfRElSRUNUIGlzIHN0aWxsIHNldAorCSAqLwogCWlmIChmaWxlICYmIHZtYS0+dm1fZmxhZ3MgJiBWTV9TSEFSRUQpCiAJCXJldCA9IGRvX21tYXBfc2hhcmVkX2ZpbGUodm1hKTsKIAllbHNlCi0JCXJldCA9IGRvX21tYXBfcHJpdmF0ZSh2bWEsIHJlZ2lvbiwgbGVuKTsKKwkJcmV0ID0gZG9fbW1hcF9wcml2YXRlKHZtYSwgcmVnaW9uLCBsZW4sIGNhcGFiaWxpdGllcyk7CiAJaWYgKHJldCA8IDApCi0JCWdvdG8gZXJyb3JfcHV0X3JlZ2lvbjsKKwkJZ290byBlcnJvcl9qdXN0X2ZyZWU7CisJYWRkX25vbW11X3JlZ2lvbihyZWdpb24pOwogCiAJLyogb2theS4uLiB3ZSBoYXZlIGEgbWFwcGluZzsgbm93IHdlIGhhdmUgdG8gcmVnaXN0ZXIgaXQgKi8KIAlyZXN1bHQgPSB2bWEtPnZtX3N0YXJ0OwpAQCAtMTM1NiwyNSArMTM1OSwxNCBAQAogCWtsZWF2ZSgiID0gJWx4IiwgcmVzdWx0KTsKIAlyZXR1cm4gcmVzdWx0OwogCi1lcnJvcl9wdXRfcmVnaW9uOgotCV9fcHV0X25vbW11X3JlZ2lvbihyZWdpb24pOwotCWlmICh2bWEpIHsKLQkJaWYgKHZtYS0+dm1fZmlsZSkgewotCQkJZnB1dCh2bWEtPnZtX2ZpbGUpOwotCQkJaWYgKHZtYS0+dm1fZmxhZ3MgJiBWTV9FWEVDVVRBQkxFKQotCQkJCXJlbW92ZWRfZXhlX2ZpbGVfdm1hKHZtYS0+dm1fbW0pOwotCQl9Ci0JCWttZW1fY2FjaGVfZnJlZSh2bV9hcmVhX2NhY2hlcCwgdm1hKTsKLQl9Ci0Ja2xlYXZlKCIgPSAlZCBbcHJdIiwgcmV0KTsKLQlyZXR1cm4gcmV0OwotCiBlcnJvcl9qdXN0X2ZyZWU6CiAJdXBfd3JpdGUoJm5vbW11X3JlZ2lvbl9zZW0pOwogZXJyb3I6Ci0JZnB1dChyZWdpb24tPnZtX2ZpbGUpOworCWlmIChyZWdpb24tPnZtX2ZpbGUpCisJCWZwdXQocmVnaW9uLT52bV9maWxlKTsKIAlrbWVtX2NhY2hlX2ZyZWUodm1fcmVnaW9uX2phciwgcmVnaW9uKTsKLQlmcHV0KHZtYS0+dm1fZmlsZSk7CisJaWYgKHZtYS0+dm1fZmlsZSkKKwkJZnB1dCh2bWEtPnZtX2ZpbGUpOwogCWlmICh2bWEtPnZtX2ZsYWdzICYgVk1fRVhFQ1VUQUJMRSkKIAkJcmVtb3ZlZF9leGVfZmlsZV92bWEodm1hLT52bV9tbSk7CiAJa21lbV9jYWNoZV9mcmVlKHZtX2FyZWFfY2FjaGVwLCB2bWEpOwpkaWZmIC0tZ2l0IGEvbW0vcGFnZS13cml0ZWJhY2suYyBiL21tL3BhZ2Utd3JpdGViYWNrLmMKaW5kZXggZDk5NjY0ZS4uMmM1ZDc5MiAxMDA2NDQKLS0tIGEvbW0vcGFnZS13cml0ZWJhY2suYworKysgYi9tbS9wYWdlLXdyaXRlYmFjay5jCkBAIC00NCwxOCArNDQsMjEgQEAKIC8qCiAgKiBXaGVuIGJhbGFuY2VfZGlydHlfcGFnZXMgZGVjaWRlcyB0aGF0IHRoZSBjYWxsZXIgbmVlZHMgdG8gcGVyZm9ybSBzb21lCiAgKiBub24tYmFja2dyb3VuZCB3cml0ZWJhY2ssIHRoaXMgaXMgaG93IG1hbnkgcGFnZXMgaXQgd2lsbCBhdHRlbXB0IHRvIHdyaXRlLgotICogSXQgc2hvdWxkIGJlIHNvbWV3aGF0IGxhcmdlciB0aGFuIFJBVEVMSU1JVF9QQUdFUyB0byBlbnN1cmUgdGhhdCByZWFzb25hYmx5CisgKiBJdCBzaG91bGQgYmUgc29tZXdoYXQgbGFyZ2VyIHRoYW4gZGlydGllZCBwYWdlcyB0byBlbnN1cmUgdGhhdCByZWFzb25hYmx5CiAgKiBsYXJnZSBhbW91bnRzIG9mIEkvTyBhcmUgc3VibWl0dGVkLgogICovCi1zdGF0aWMgaW5saW5lIGxvbmcgc3luY193cml0ZWJhY2tfcGFnZXModm9pZCkKK3N0YXRpYyBpbmxpbmUgbG9uZyBzeW5jX3dyaXRlYmFja19wYWdlcyh1bnNpZ25lZCBsb25nIGRpcnRpZWQpCiB7Ci0JcmV0dXJuIHJhdGVsaW1pdF9wYWdlcyArIHJhdGVsaW1pdF9wYWdlcyAvIDI7CisJaWYgKGRpcnRpZWQgPCByYXRlbGltaXRfcGFnZXMpCisJCWRpcnRpZWQgPSByYXRlbGltaXRfcGFnZXM7CisKKwlyZXR1cm4gZGlydGllZCArIGRpcnRpZWQgLyAyOwogfQogCiAvKiBUaGUgZm9sbG93aW5nIHBhcmFtZXRlcnMgYXJlIGV4cG9ydGVkIHZpYSAvcHJvYy9zeXMvdm0gKi8KIAogLyoKLSAqIFN0YXJ0IGJhY2tncm91bmQgd3JpdGViYWNrICh2aWEgcGRmbHVzaCkgYXQgdGhpcyBwZXJjZW50YWdlCisgKiBTdGFydCBiYWNrZ3JvdW5kIHdyaXRlYmFjayAodmlhIHdyaXRlYmFjayB0aHJlYWRzKSBhdCB0aGlzIHBlcmNlbnRhZ2UKICAqLwogaW50IGRpcnR5X2JhY2tncm91bmRfcmF0aW8gPSAxMDsKIApAQCAtNDc0LDEwICs0NzcsMTEgQEAKICAqIGJhbGFuY2VfZGlydHlfcGFnZXMoKSBtdXN0IGJlIGNhbGxlZCBieSBwcm9jZXNzZXMgd2hpY2ggYXJlIGdlbmVyYXRpbmcgZGlydHkKICAqIGRhdGEuICBJdCBsb29rcyBhdCB0aGUgbnVtYmVyIG9mIGRpcnR5IHBhZ2VzIGluIHRoZSBtYWNoaW5lIGFuZCB3aWxsIGZvcmNlCiAgKiB0aGUgY2FsbGVyIHRvIHBlcmZvcm0gd3JpdGViYWNrIGlmIHRoZSBzeXN0ZW0gaXMgb3ZlciBgdm1fZGlydHlfcmF0aW8nLgotICogSWYgd2UncmUgb3ZlciBgYmFja2dyb3VuZF90aHJlc2gnIHRoZW4gcGRmbHVzaCBpcyB3b2tlbiB0byBwZXJmb3JtIHNvbWUKLSAqIHdyaXRlb3V0LgorICogSWYgd2UncmUgb3ZlciBgYmFja2dyb3VuZF90aHJlc2gnIHRoZW4gdGhlIHdyaXRlYmFjayB0aHJlYWRzIGFyZSB3b2tlbiB0bworICogcGVyZm9ybSBzb21lIHdyaXRlb3V0LgogICovCi1zdGF0aWMgdm9pZCBiYWxhbmNlX2RpcnR5X3BhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKQorc3RhdGljIHZvaWQgYmFsYW5jZV9kaXJ0eV9wYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKKwkJCQl1bnNpZ25lZCBsb25nIHdyaXRlX2NodW5rKQogewogCWxvbmcgbnJfcmVjbGFpbWFibGUsIGJkaV9ucl9yZWNsYWltYWJsZTsKIAlsb25nIG5yX3dyaXRlYmFjaywgYmRpX25yX3dyaXRlYmFjazsKQEAgLTQ4NSw3ICs0ODksNiBAQAogCXVuc2lnbmVkIGxvbmcgZGlydHlfdGhyZXNoOwogCXVuc2lnbmVkIGxvbmcgYmRpX3RocmVzaDsKIAl1bnNpZ25lZCBsb25nIHBhZ2VzX3dyaXR0ZW4gPSAwOwotCXVuc2lnbmVkIGxvbmcgd3JpdGVfY2h1bmsgPSBzeW5jX3dyaXRlYmFja19wYWdlcygpOwogCXVuc2lnbmVkIGxvbmcgcGF1c2UgPSAxOwogCiAJc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gKmJkaSA9IG1hcHBpbmctPmJhY2tpbmdfZGV2X2luZm87CkBAIC01NjMsNyArNTY2LDggQEAKIAkJaWYgKHBhZ2VzX3dyaXR0ZW4gPj0gd3JpdGVfY2h1bmspCiAJCQlicmVhazsJCS8qIFdlJ3ZlIGRvbmUgb3VyIGR1dHkgKi8KIAotCQlzY2hlZHVsZV90aW1lb3V0X2ludGVycnVwdGlibGUocGF1c2UpOworCQlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CisJCWlvX3NjaGVkdWxlX3RpbWVvdXQocGF1c2UpOwogCiAJCS8qCiAJCSAqIEluY3JlYXNlIHRoZSBkZWxheSBmb3IgZWFjaCBsb29wLCB1cCB0byBvdXIgcHJldmlvdXMKQEAgLTU3OSw3ICs1ODMsNyBAQAogCQliZGktPmRpcnR5X2V4Y2VlZGVkID0gMDsKIAogCWlmICh3cml0ZWJhY2tfaW5fcHJvZ3Jlc3MoYmRpKSkKLQkJcmV0dXJuOwkJLyogcGRmbHVzaCBpcyBhbHJlYWR5IHdvcmtpbmcgdGhpcyBxdWV1ZSAqLworCQlyZXR1cm47CiAKIAkvKgogCSAqIEluIGxhcHRvcCBtb2RlLCB3ZSB3YWl0IHVudGlsIGhpdHRpbmcgdGhlIGhpZ2hlciB0aHJlc2hvbGQgYmVmb3JlCkBAIC01OTAsMTAgKzU5NCwxMCBAQAogCSAqIGJhY2tncm91bmRfdGhyZXNoLCB0byBrZWVwIHRoZSBhbW91bnQgb2YgZGlydHkgbWVtb3J5IGxvdy4KIAkgKi8KIAlpZiAoKGxhcHRvcF9tb2RlICYmIHBhZ2VzX3dyaXR0ZW4pIHx8Ci0JICAgICghbGFwdG9wX21vZGUgJiYgKChucl93cml0ZWJhY2sgPSBnbG9iYWxfcGFnZV9zdGF0ZShOUl9GSUxFX0RJUlRZKQotCQkJCQkgICsgZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfVU5TVEFCTEVfTkZTKSkKKwkgICAgKCFsYXB0b3BfbW9kZSAmJiAoKGdsb2JhbF9wYWdlX3N0YXRlKE5SX0ZJTEVfRElSVFkpCisJCQkgICAgICAgKyBnbG9iYWxfcGFnZV9zdGF0ZShOUl9VTlNUQUJMRV9ORlMpKQogCQkJCQkgID4gYmFja2dyb3VuZF90aHJlc2gpKSkKLQkJYmRpX3N0YXJ0X3dyaXRlYmFjayhiZGksIG5yX3dyaXRlYmFjayk7CisJCWJkaV9zdGFydF93cml0ZWJhY2soYmRpLCBOVUxMLCAwKTsKIH0KIAogdm9pZCBzZXRfcGFnZV9kaXJ0eV9iYWxhbmNlKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgcGFnZV9ta3dyaXRlKQpAQCAtNjQwLDkgKzY0NCwxMCBAQAogCXAgPSAgJl9fZ2V0X2NwdV92YXIoYmRwX3JhdGVsaW1pdHMpOwogCSpwICs9IG5yX3BhZ2VzX2RpcnRpZWQ7CiAJaWYgKHVubGlrZWx5KCpwID49IHJhdGVsaW1pdCkpIHsKKwkJcmF0ZWxpbWl0ID0gc3luY193cml0ZWJhY2tfcGFnZXMoKnApOwogCQkqcCA9IDA7CiAJCXByZWVtcHRfZW5hYmxlKCk7Ci0JCWJhbGFuY2VfZGlydHlfcGFnZXMobWFwcGluZyk7CisJCWJhbGFuY2VfZGlydHlfcGFnZXMobWFwcGluZywgcmF0ZWxpbWl0KTsKIAkJcmV0dXJuOwogCX0KIAlwcmVlbXB0X2VuYWJsZSgpOwpkaWZmIC0tZ2l0IGEvbW0vcGFnZV9hbGxvYy5jIGIvbW0vcGFnZV9hbGxvYy5jCmluZGV4IGJmNzIwNTUuLmNkY2VkZjYgMTAwNjQ0Ci0tLSBhL21tL3BhZ2VfYWxsb2MuYworKysgYi9tbS9wYWdlX2FsbG9jLmMKQEAgLTIxODMsNyArMjE4Myw3IEBACiAJcHJpbnRrKCJhY3RpdmVfYW5vbjolbHUgaW5hY3RpdmVfYW5vbjolbHUgaXNvbGF0ZWRfYW5vbjolbHVcbiIKIAkJIiBhY3RpdmVfZmlsZTolbHUgaW5hY3RpdmVfZmlsZTolbHUgaXNvbGF0ZWRfZmlsZTolbHVcbiIKIAkJIiB1bmV2aWN0YWJsZTolbHUiCi0JCSIgZGlydHk6JWx1IHdyaXRlYmFjazolbHUgdW5zdGFibGU6JWx1IGJ1ZmZlcjolbHVcbiIKKwkJIiBkaXJ0eTolbHUgd3JpdGViYWNrOiVsdSB1bnN0YWJsZTolbHVcbiIKIAkJIiBmcmVlOiVsdSBzbGFiX3JlY2xhaW1hYmxlOiVsdSBzbGFiX3VucmVjbGFpbWFibGU6JWx1XG4iCiAJCSIgbWFwcGVkOiVsdSBzaG1lbTolbHUgcGFnZXRhYmxlczolbHUgYm91bmNlOiVsdVxuIiwKIAkJZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfQUNUSVZFX0FOT04pLApAQCAtMjE5Niw3ICsyMTk2LDYgQEAKIAkJZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfRklMRV9ESVJUWSksCiAJCWdsb2JhbF9wYWdlX3N0YXRlKE5SX1dSSVRFQkFDSyksCiAJCWdsb2JhbF9wYWdlX3N0YXRlKE5SX1VOU1RBQkxFX05GUyksCi0JCW5yX2Jsb2NrZGV2X3BhZ2VzKCksCiAJCWdsb2JhbF9wYWdlX3N0YXRlKE5SX0ZSRUVfUEFHRVMpLAogCQlnbG9iYWxfcGFnZV9zdGF0ZShOUl9TTEFCX1JFQ0xBSU1BQkxFKSwKIAkJZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfU0xBQl9VTlJFQ0xBSU1BQkxFKSwKZGlmZiAtLWdpdCBhL21tL3BlcmNwdS5jIGIvbW0vcGVyY3B1LmMKaW5kZXggNDNkOGNhYy4uZDkwNzk3MSAxMDA2NDQKLS0tIGEvbW0vcGVyY3B1LmMKKysrIGIvbW0vcGVyY3B1LmMKQEAgLTE1Myw3ICsxNTMsMTAgQEAKICAqCiAgKiBEdXJpbmcgYWxsb2NhdGlvbiwgcGNwdV9hbGxvY19tdXRleCBpcyBrZXB0IGxvY2tlZCBhbGwgdGhlIHRpbWUgYW5kCiAgKiBwY3B1X2xvY2sgaXMgZ3JhYmJlZCBhbmQgcmVsZWFzZWQgYXMgbmVjZXNzYXJ5LiAgQWxsIGFjdHVhbCBtZW1vcnkKLSAqIGFsbG9jYXRpb25zIGFyZSBkb25lIHVzaW5nIEdGUF9LRVJORUwgd2l0aCBwY3B1X2xvY2sgcmVsZWFzZWQuCisgKiBhbGxvY2F0aW9ucyBhcmUgZG9uZSB1c2luZyBHRlBfS0VSTkVMIHdpdGggcGNwdV9sb2NrIHJlbGVhc2VkLiAgSW4KKyAqIGdlbmVyYWwsIHBlcmNwdSBtZW1vcnkgY2FuJ3QgYmUgYWxsb2NhdGVkIHdpdGggaXJxIG9mZiBidXQKKyAqIGlycXNhdmUvcmVzdG9yZSBhcmUgc3RpbGwgdXNlZCBpbiBhbGxvYyBwYXRoIHNvIHRoYXQgaXQgY2FuIGJlIHVzZWQKKyAqIGZyb20gZWFybHkgaW5pdCBwYXRoIC0gc2NoZWRfaW5pdCgpIHNwZWNpZmljYWxseS4KICAqCiAgKiBGcmVlIHBhdGggYWNjZXNzZXMgYW5kIGFsdGVycyBvbmx5IHRoZSBpbmRleCBkYXRhIHN0cnVjdHVyZXMsIHNvIGl0CiAgKiBjYW4gYmUgc2FmZWx5IGNhbGxlZCBmcm9tIGF0b21pYyBjb250ZXh0LiAgV2hlbiBtZW1vcnkgbmVlZHMgdG8gYmUKQEAgLTM2Niw3ICszNjksNyBAQAogICogUkVUVVJOUzoKICAqIDAgaWYgbm9vcCwgMSBpZiBzdWNjZXNzZnVsbHkgZXh0ZW5kZWQsIC1lcnJubyBvbiBmYWlsdXJlLgogICovCi1zdGF0aWMgaW50IHBjcHVfZXh0ZW5kX2FyZWFfbWFwKHN0cnVjdCBwY3B1X2NodW5rICpjaHVuaykKK3N0YXRpYyBpbnQgcGNwdV9leHRlbmRfYXJlYV9tYXAoc3RydWN0IHBjcHVfY2h1bmsgKmNodW5rLCB1bnNpZ25lZCBsb25nICpmbGFncykKIHsKIAlpbnQgbmV3X2FsbG9jOwogCWludCAqbmV3OwpAQCAtMzc2LDcgKzM3OSw3IEBACiAJaWYgKGNodW5rLT5tYXBfYWxsb2MgPj0gY2h1bmstPm1hcF91c2VkICsgMikKIAkJcmV0dXJuIDA7CiAKLQlzcGluX3VubG9ja19pcnEoJnBjcHVfbG9jayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGNwdV9sb2NrLCAqZmxhZ3MpOwogCiAJbmV3X2FsbG9jID0gUENQVV9ERkxfTUFQX0FMTE9DOwogCXdoaWxlIChuZXdfYWxsb2MgPCBjaHVuay0+bWFwX3VzZWQgKyAyKQpAQCAtMzg0LDcgKzM4Nyw3IEBACiAKIAluZXcgPSBwY3B1X21lbV9hbGxvYyhuZXdfYWxsb2MgKiBzaXplb2YobmV3WzBdKSk7CiAJaWYgKCFuZXcpIHsKLQkJc3Bpbl9sb2NrX2lycSgmcGNwdV9sb2NrKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnBjcHVfbG9jaywgKmZsYWdzKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCkBAIC0zOTMsNyArMzk2LDcgQEAKIAkgKiBjb3VsZCBoYXZlIGhhcHBlbmVkIGluYmV0d2Vlbiwgc28gbWFwX3VzZWQgY291bGRuJ3QgaGF2ZQogCSAqIGdyb3duLgogCSAqLwotCXNwaW5fbG9ja19pcnEoJnBjcHVfbG9jayk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnBjcHVfbG9jaywgKmZsYWdzKTsKIAlCVUdfT04obmV3X2FsbG9jIDwgY2h1bmstPm1hcF91c2VkICsgMik7CiAKIAlzaXplID0gY2h1bmstPm1hcF9hbGxvYyAqIHNpemVvZihjaHVuay0+bWFwWzBdKTsKQEAgLTEwNDMsOCArMTA0NiwxMSBAQAogICovCiBzdGF0aWMgdm9pZCAqcGNwdV9hbGxvYyhzaXplX3Qgc2l6ZSwgc2l6ZV90IGFsaWduLCBib29sIHJlc2VydmVkKQogeworCXN0YXRpYyBpbnQgd2Fybl9saW1pdCA9IDEwOwogCXN0cnVjdCBwY3B1X2NodW5rICpjaHVuazsKKwljb25zdCBjaGFyICplcnI7CiAJaW50IHNsb3QsIG9mZjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJaWYgKHVubGlrZWx5KCFzaXplIHx8IHNpemUgPiBQQ1BVX01JTl9VTklUX1NJWkUgfHwgYWxpZ24gPiBQQUdFX1NJWkUpKSB7CiAJCVdBUk4odHJ1ZSwgImlsbGVnYWwgc2l6ZSAoJXp1KSBvciBhbGlnbiAoJXp1KSBmb3IgIgpAQCAtMTA1MywxNyArMTA1OSwyMCBAQAogCX0KIAogCW11dGV4X2xvY2soJnBjcHVfYWxsb2NfbXV0ZXgpOwotCXNwaW5fbG9ja19pcnEoJnBjcHVfbG9jayk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnBjcHVfbG9jaywgZmxhZ3MpOwogCiAJLyogc2VydmUgcmVzZXJ2ZWQgYWxsb2NhdGlvbnMgZnJvbSB0aGUgcmVzZXJ2ZWQgY2h1bmsgaWYgYXZhaWxhYmxlICovCiAJaWYgKHJlc2VydmVkICYmIHBjcHVfcmVzZXJ2ZWRfY2h1bmspIHsKIAkJY2h1bmsgPSBwY3B1X3Jlc2VydmVkX2NodW5rOwogCQlpZiAoc2l6ZSA+IGNodW5rLT5jb250aWdfaGludCB8fAotCQkgICAgcGNwdV9leHRlbmRfYXJlYV9tYXAoY2h1bmspIDwgMCkKKwkJICAgIHBjcHVfZXh0ZW5kX2FyZWFfbWFwKGNodW5rLCAmZmxhZ3MpIDwgMCkgeworCQkJZXJyID0gImZhaWxlZCB0byBleHRlbmQgYXJlYSBtYXAgb2YgcmVzZXJ2ZWQgY2h1bmsiOwogCQkJZ290byBmYWlsX3VubG9jazsKKwkJfQogCQlvZmYgPSBwY3B1X2FsbG9jX2FyZWEoY2h1bmssIHNpemUsIGFsaWduKTsKIAkJaWYgKG9mZiA+PSAwKQogCQkJZ290byBhcmVhX2ZvdW5kOworCQllcnIgPSAiYWxsb2MgZnJvbSByZXNlcnZlZCBjaHVuayBmYWlsZWQiOwogCQlnb3RvIGZhaWxfdW5sb2NrOwogCX0KIApAQCAtMTA3NCwxMiArMTA4MywxMyBAQAogCQkJaWYgKHNpemUgPiBjaHVuay0+Y29udGlnX2hpbnQpCiAJCQkJY29udGludWU7CiAKLQkJCXN3aXRjaCAocGNwdV9leHRlbmRfYXJlYV9tYXAoY2h1bmspKSB7CisJCQlzd2l0Y2ggKHBjcHVfZXh0ZW5kX2FyZWFfbWFwKGNodW5rLCAmZmxhZ3MpKSB7CiAJCQljYXNlIDA6CiAJCQkJYnJlYWs7CiAJCQljYXNlIDE6CiAJCQkJZ290byByZXN0YXJ0OwkvKiBwY3B1X2xvY2sgZHJvcHBlZCwgcmVzdGFydCAqLwogCQkJZGVmYXVsdDoKKwkJCQllcnIgPSAiZmFpbGVkIHRvIGV4dGVuZCBhcmVhIG1hcCI7CiAJCQkJZ290byBmYWlsX3VubG9jazsKIAkJCX0KIApAQCAtMTA5MCwyMyArMTEwMCwyNiBAQAogCX0KIAogCS8qIGhtbW0uLi4gbm8gc3BhY2UgbGVmdCwgY3JlYXRlIGEgbmV3IGNodW5rICovCi0Jc3Bpbl91bmxvY2tfaXJxKCZwY3B1X2xvY2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBjcHVfbG9jaywgZmxhZ3MpOwogCiAJY2h1bmsgPSBhbGxvY19wY3B1X2NodW5rKCk7Ci0JaWYgKCFjaHVuaykKKwlpZiAoIWNodW5rKSB7CisJCWVyciA9ICJmYWlsZWQgdG8gYWxsb2NhdGUgbmV3IGNodW5rIjsKIAkJZ290byBmYWlsX3VubG9ja19tdXRleDsKKwl9CiAKLQlzcGluX2xvY2tfaXJxKCZwY3B1X2xvY2spOworCXNwaW5fbG9ja19pcnFzYXZlKCZwY3B1X2xvY2ssIGZsYWdzKTsKIAlwY3B1X2NodW5rX3JlbG9jYXRlKGNodW5rLCAtMSk7CiAJZ290byByZXN0YXJ0OwogCiBhcmVhX2ZvdW5kOgotCXNwaW5fdW5sb2NrX2lycSgmcGNwdV9sb2NrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwY3B1X2xvY2ssIGZsYWdzKTsKIAogCS8qIHBvcHVsYXRlLCBtYXAgYW5kIGNsZWFyIHRoZSBhcmVhICovCiAJaWYgKHBjcHVfcG9wdWxhdGVfY2h1bmsoY2h1bmssIG9mZiwgc2l6ZSkpIHsKLQkJc3Bpbl9sb2NrX2lycSgmcGNwdV9sb2NrKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnBjcHVfbG9jaywgZmxhZ3MpOwogCQlwY3B1X2ZyZWVfYXJlYShjaHVuaywgb2ZmKTsKKwkJZXJyID0gImZhaWxlZCB0byBwb3B1bGF0ZSI7CiAJCWdvdG8gZmFpbF91bmxvY2s7CiAJfQogCkBAIC0xMTE2LDkgKzExMjksMTYgQEAKIAlyZXR1cm4gX19hZGRyX3RvX3BjcHVfcHRyKGNodW5rLT5iYXNlX2FkZHIgKyBvZmYpOwogCiBmYWlsX3VubG9jazoKLQlzcGluX3VubG9ja19pcnEoJnBjcHVfbG9jayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGNwdV9sb2NrLCBmbGFncyk7CiBmYWlsX3VubG9ja19tdXRleDoKIAltdXRleF91bmxvY2soJnBjcHVfYWxsb2NfbXV0ZXgpOworCWlmICh3YXJuX2xpbWl0KSB7CisJCXByX3dhcm5pbmcoIlBFUkNQVTogYWxsb2NhdGlvbiBmYWlsZWQsIHNpemU9JXp1IGFsaWduPSV6dSwgIgorCQkJICAgIiVzXG4iLCBzaXplLCBhbGlnbiwgZXJyKTsKKwkJZHVtcF9zdGFjaygpOworCQlpZiAoIS0td2Fybl9saW1pdCkKKwkJCXByX2luZm8oIlBFUkNQVTogbGltaXQgcmVhY2hlZCwgZGlzYWJsZSB3YXJuaW5nXG4iKTsKKwl9CiAJcmV0dXJuIE5VTEw7CiB9CiAKQEAgLTEzNDcsNiArMTM2NywxMCBAQAogCXN0cnVjdCBwY3B1X2FsbG9jX2luZm8gKmFpOwogCXVuc2lnbmVkIGludCAqY3B1X21hcDsKIAorCS8qIHRoaXMgZnVuY3Rpb24gbWF5IGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyAqLworCW1lbXNldChncm91cF9tYXAsIDAsIHNpemVvZihncm91cF9tYXApKTsKKwltZW1zZXQoZ3JvdXBfY250LCAwLCBzaXplb2YoZ3JvdXBfbWFwKSk7CisKIAkvKgogCSAqIERldGVybWluZSBtaW5fdW5pdF9zaXplLCBhbGxvY19zaXplIGFuZCBtYXhfdXBhIHN1Y2ggdGhhdAogCSAqIGFsbG9jX3NpemUgaXMgbXVsdGlwbGUgb2YgYXRvbV9zaXplIGFuZCBpcyB0aGUgc21hbGxlc3QKQEAgLTE1NzQsNiArMTU5OCw3IEBACiBpbnQgX19pbml0IHBjcHVfc2V0dXBfZmlyc3RfY2h1bmsoY29uc3Qgc3RydWN0IHBjcHVfYWxsb2NfaW5mbyAqYWksCiAJCQkJICB2b2lkICpiYXNlX2FkZHIpCiB7CisJc3RhdGljIGNoYXIgY3B1c19idWZbNDA5Nl0gX19pbml0ZGF0YTsKIAlzdGF0aWMgaW50IHNtYXBbMl0sIGRtYXBbMl07CiAJc2l6ZV90IGR5bl9zaXplID0gYWktPmR5bl9zaXplOwogCXNpemVfdCBzaXplX3N1bSA9IGFpLT5zdGF0aWNfc2l6ZSArIGFpLT5yZXNlcnZlZF9zaXplICsgZHluX3NpemU7CkBAIC0xNTg1LDE3ICsxNjEwLDI2IEBACiAJaW50ICp1bml0X21hcDsKIAlpbnQgZ3JvdXAsIHVuaXQsIGk7CiAKKwljcHVtYXNrX3NjbnByaW50ZihjcHVzX2J1Ziwgc2l6ZW9mKGNwdXNfYnVmKSwgY3B1X3Bvc3NpYmxlX21hc2spOworCisjZGVmaW5lIFBDUFVfU0VUVVBfQlVHX09OKGNvbmQpCWRvIHsJCQkJCVwKKwlpZiAodW5saWtlbHkoY29uZCkpIHsJCQkJCQlcCisJCXByX2VtZXJnKCJQRVJDUFU6IGZhaWxlZCB0byBpbml0aWFsaXplLCAlcyIsICNjb25kKTsJXAorCQlwcl9lbWVyZygiUEVSQ1BVOiBjcHVfcG9zc2libGVfbWFzaz0lc1xuIiwgY3B1c19idWYpOwlcCisJCXBjcHVfZHVtcF9hbGxvY19pbmZvKEtFUk5fRU1FUkcsIGFpKTsJCQlcCisJCUJVRygpOwkJCQkJCQlcCisJfQkJCQkJCQkJXAorfSB3aGlsZSAoMCkKKwogCS8qIHNhbml0eSBjaGVja3MgKi8KIAlCVUlMRF9CVUdfT04oQVJSQVlfU0laRShzbWFwKSA+PSBQQ1BVX0RGTF9NQVBfQUxMT0MgfHwKIAkJICAgICBBUlJBWV9TSVpFKGRtYXApID49IFBDUFVfREZMX01BUF9BTExPQyk7Ci0JQlVHX09OKGFpLT5ucl9ncm91cHMgPD0gMCk7Ci0JQlVHX09OKCFhaS0+c3RhdGljX3NpemUpOwotCUJVR19PTighYmFzZV9hZGRyKTsKLQlCVUdfT04oYWktPnVuaXRfc2l6ZSA8IHNpemVfc3VtKTsKLQlCVUdfT04oYWktPnVuaXRfc2l6ZSAmIH5QQUdFX01BU0spOwotCUJVR19PTihhaS0+dW5pdF9zaXplIDwgUENQVV9NSU5fVU5JVF9TSVpFKTsKLQotCXBjcHVfZHVtcF9hbGxvY19pbmZvKEtFUk5fREVCVUcsIGFpKTsKKwlQQ1BVX1NFVFVQX0JVR19PTihhaS0+bnJfZ3JvdXBzIDw9IDApOworCVBDUFVfU0VUVVBfQlVHX09OKCFhaS0+c3RhdGljX3NpemUpOworCVBDUFVfU0VUVVBfQlVHX09OKCFiYXNlX2FkZHIpOworCVBDUFVfU0VUVVBfQlVHX09OKGFpLT51bml0X3NpemUgPCBzaXplX3N1bSk7CisJUENQVV9TRVRVUF9CVUdfT04oYWktPnVuaXRfc2l6ZSAmIH5QQUdFX01BU0spOworCVBDUFVfU0VUVVBfQlVHX09OKGFpLT51bml0X3NpemUgPCBQQ1BVX01JTl9VTklUX1NJWkUpOwogCiAJLyogcHJvY2VzcyBncm91cCBpbmZvcm1hdGlvbiBhbmQgYnVpbGQgY29uZmlnIHRhYmxlcyBhY2NvcmRpbmdseSAqLwogCWdyb3VwX29mZnNldHMgPSBhbGxvY19ib290bWVtKGFpLT5ucl9ncm91cHMgKiBzaXplb2YoZ3JvdXBfb2Zmc2V0c1swXSkpOwpAQCAtMTYwNCw3ICsxNjM4LDcgQEAKIAl1bml0X29mZiA9IGFsbG9jX2Jvb3RtZW0obnJfY3B1X2lkcyAqIHNpemVvZih1bml0X29mZlswXSkpOwogCiAJZm9yIChjcHUgPSAwOyBjcHUgPCBucl9jcHVfaWRzOyBjcHUrKykKLQkJdW5pdF9tYXBbY3B1XSA9IE5SX0NQVVM7CisJCXVuaXRfbWFwW2NwdV0gPSBVSU5UX01BWDsKIAlwY3B1X2ZpcnN0X3VuaXRfY3B1ID0gTlJfQ1BVUzsKIAogCWZvciAoZ3JvdXAgPSAwLCB1bml0ID0gMDsgZ3JvdXAgPCBhaS0+bnJfZ3JvdXBzOyBncm91cCsrLCB1bml0ICs9IGkpIHsKQEAgLTE2MTgsOCArMTY1Miw5IEBACiAJCQlpZiAoY3B1ID09IE5SX0NQVVMpCiAJCQkJY29udGludWU7CiAKLQkJCUJVR19PTihjcHUgPiBucl9jcHVfaWRzIHx8ICFjcHVfcG9zc2libGUoY3B1KSk7Ci0JCQlCVUdfT04odW5pdF9tYXBbY3B1XSAhPSBOUl9DUFVTKTsKKwkJCVBDUFVfU0VUVVBfQlVHX09OKGNwdSA+IG5yX2NwdV9pZHMpOworCQkJUENQVV9TRVRVUF9CVUdfT04oIWNwdV9wb3NzaWJsZShjcHUpKTsKKwkJCVBDUFVfU0VUVVBfQlVHX09OKHVuaXRfbWFwW2NwdV0gIT0gVUlOVF9NQVgpOwogCiAJCQl1bml0X21hcFtjcHVdID0gdW5pdCArIGk7CiAJCQl1bml0X29mZltjcHVdID0gZ2ktPmJhc2Vfb2Zmc2V0ICsgaSAqIGFpLT51bml0X3NpemU7CkBAIC0xNjMyLDcgKzE2NjcsMTEgQEAKIAlwY3B1X25yX3VuaXRzID0gdW5pdDsKIAogCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpCi0JCUJVR19PTih1bml0X21hcFtjcHVdID09IE5SX0NQVVMpOworCQlQQ1BVX1NFVFVQX0JVR19PTih1bml0X21hcFtjcHVdID09IFVJTlRfTUFYKTsKKworCS8qIHdlJ3JlIGRvbmUgcGFyc2luZyB0aGUgaW5wdXQsIHVuZGVmaW5lIEJVRyBtYWNybyBhbmQgZHVtcCBjb25maWcgKi8KKyN1bmRlZiBQQ1BVX1NFVFVQX0JVR19PTgorCXBjcHVfZHVtcF9hbGxvY19pbmZvKEtFUk5fSU5GTywgYWkpOwogCiAJcGNwdV9ucl9ncm91cHMgPSBhaS0+bnJfZ3JvdXBzOwogCXBjcHVfZ3JvdXBfb2Zmc2V0cyA9IGdyb3VwX29mZnNldHM7CkBAIC0xNzgyLDcgKzE4MjEsNyBAQAogCXZvaWQgKmJhc2UgPSAodm9pZCAqKVVMT05HX01BWDsKIAl2b2lkICoqYXJlYXMgPSBOVUxMOwogCXN0cnVjdCBwY3B1X2FsbG9jX2luZm8gKmFpOwotCXNpemVfdCBzaXplX3N1bSwgYXJlYXNfc2l6ZTsKKwlzaXplX3Qgc2l6ZV9zdW0sIGFyZWFzX3NpemUsIG1heF9kaXN0YW5jZTsKIAlpbnQgZ3JvdXAsIGksIHJjOwogCiAJYWkgPSBwY3B1X2J1aWxkX2FsbG9jX2luZm8ocmVzZXJ2ZWRfc2l6ZSwgZHluX3NpemUsIGF0b21fc2l6ZSwKQEAgLTE4MzIsOCArMTg3MSwyNSBAQAogCX0KIAogCS8qIGJhc2UgYWRkcmVzcyBpcyBub3cga25vd24sIGRldGVybWluZSBncm91cCBiYXNlIG9mZnNldHMgKi8KLQlmb3IgKGdyb3VwID0gMDsgZ3JvdXAgPCBhaS0+bnJfZ3JvdXBzOyBncm91cCsrKQorCW1heF9kaXN0YW5jZSA9IDA7CisJZm9yIChncm91cCA9IDA7IGdyb3VwIDwgYWktPm5yX2dyb3VwczsgZ3JvdXArKykgewogCQlhaS0+Z3JvdXBzW2dyb3VwXS5iYXNlX29mZnNldCA9IGFyZWFzW2dyb3VwXSAtIGJhc2U7CisJCW1heF9kaXN0YW5jZSA9IG1heF90KHNpemVfdCwgbWF4X2Rpc3RhbmNlLAorCQkJCSAgICAgYWktPmdyb3Vwc1tncm91cF0uYmFzZV9vZmZzZXQpOworCX0KKwltYXhfZGlzdGFuY2UgKz0gYWktPnVuaXRfc2l6ZTsKKworCS8qIHdhcm4gaWYgbWF4aW11bSBkaXN0YW5jZSBpcyBmdXJ0aGVyIHRoYW4gNzUlIG9mIHZtYWxsb2Mgc3BhY2UgKi8KKwlpZiAobWF4X2Rpc3RhbmNlID4gKFZNQUxMT0NfRU5EIC0gVk1BTExPQ19TVEFSVCkgKiAzIC8gNCkgeworCQlwcl93YXJuaW5nKCJQRVJDUFU6IG1heF9kaXN0YW5jZT0weCV6eCB0b28gbGFyZ2UgZm9yIHZtYWxsb2MgIgorCQkJICAgInNwYWNlIDB4JWx4XG4iLAorCQkJICAgbWF4X2Rpc3RhbmNlLCBWTUFMTE9DX0VORCAtIFZNQUxMT0NfU1RBUlQpOworI2lmZGVmIENPTkZJR19ORUVEX1BFUl9DUFVfUEFHRV9GSVJTVF9DSFVOSworCQkvKiBhbmQgZmFpbCBpZiB3ZSBoYXZlIGZhbGxiYWNrICovCisJCXJjID0gLUVJTlZBTDsKKwkJZ290byBvdXRfZnJlZTsKKyNlbmRpZgorCX0KIAogCXByX2luZm8oIlBFUkNQVTogRW1iZWRkZWQgJXp1IHBhZ2VzL2NwdSBAJXAgcyV6dSByJXp1IGQlenUgdSV6dVxuIiwKIAkJUEZOX0RPV04oc2l6ZV9zdW0pLCBiYXNlLCBhaS0+c3RhdGljX3NpemUsIGFpLT5yZXNlcnZlZF9zaXplLApkaWZmIC0tZ2l0IGEvbW0vcm1hcC5jIGIvbW0vcm1hcC5jCmluZGV4IDI4YWFmZTIuLmRkNDMzNzMgMTAwNjQ0Ci0tLSBhL21tL3JtYXAuYworKysgYi9tbS9ybWFwLmMKQEAgLTI0Miw4ICsyNDIsOCBAQAogfQogCiAvKgotICogQXQgd2hhdCB1c2VyIHZpcnR1YWwgYWRkcmVzcyBpcyBwYWdlIGV4cGVjdGVkIGluIHZtYT8gY2hlY2tpbmcgdGhhdCB0aGUKLSAqIHBhZ2UgbWF0Y2hlcyB0aGUgdm1hOiBjdXJyZW50bHkgb25seSB1c2VkIG9uIGFub24gcGFnZXMsIGJ5IHVudXNlX3ZtYTsKKyAqIEF0IHdoYXQgdXNlciB2aXJ0dWFsIGFkZHJlc3MgaXMgcGFnZSBleHBlY3RlZCBpbiB2bWE/CisgKiBjaGVja2luZyB0aGF0IHRoZSBwYWdlIG1hdGNoZXMgdGhlIHZtYS4KICAqLwogdW5zaWduZWQgbG9uZyBwYWdlX2FkZHJlc3NfaW5fdm1hKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKIHsKZGlmZiAtLWdpdCBhL21tL3NobWVtLmMgYi9tbS9zaG1lbS5jCmluZGV4IDk4NjMxYzIuLjM1NmRkOTk1IDEwMDY0NAotLS0gYS9tbS9zaG1lbS5jCisrKyBiL21tL3NobWVtLmMKQEAgLTIxOCw3ICsyMTgsNyBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHNobWVtX2lub2RlX29wZXJhdGlvbnM7CiBzdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgc2htZW1fZGlyX2lub2RlX29wZXJhdGlvbnM7CiBzdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgc2htZW1fc3BlY2lhbF9pbm9kZV9vcGVyYXRpb25zOwotc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBzaG1lbV92bV9vcHM7CitzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHNobWVtX3ZtX29wczsKIAogc3RhdGljIHN0cnVjdCBiYWNraW5nX2Rldl9pbmZvIHNobWVtX2JhY2tpbmdfZGV2X2luZm8gIF9fcmVhZF9tb3N0bHkgPSB7CiAJLnJhX3BhZ2VzCT0gMCwJLyogTm8gcmVhZGFoZWFkICovCkBAIC0xMDQ2LDggKzEwNDYsOSBAQAogCSAqIHN5bmMgZnJvbSBldmVyIGNhbGxpbmcgc2htZW1fd3JpdGVwYWdlOyBidXQgYSBzdGFja2luZyBmaWxlc3lzdGVtCiAJICogbWF5IHVzZSB0aGUgLT53cml0ZXBhZ2Ugb2YgaXRzIHVuZGVybHlpbmcgZmlsZXN5c3RlbSwgaW4gd2hpY2ggY2FzZQogCSAqIHRtcGZzIHNob3VsZCB3cml0ZSBvdXQgdG8gc3dhcCBvbmx5IGluIHJlc3BvbnNlIHRvIG1lbW9yeSBwcmVzc3VyZSwKLQkgKiBhbmQgbm90IGZvciBwZGZsdXNoIG9yIHN5bmMuICBIb3dldmVyLCBpbiB0aG9zZSBjYXNlcywgd2UgZG8gc3RpbGwKLQkgKiB3YW50IHRvIGNoZWNrIGlmIHRoZXJlJ3MgYSByZWR1bmRhbnQgc3dhcHBhZ2UgdG8gYmUgZGlzY2FyZGVkLgorCSAqIGFuZCBub3QgZm9yIHRoZSB3cml0ZWJhY2sgdGhyZWFkcyBvciBzeW5jLiAgSG93ZXZlciwgaW4gdGhvc2UgY2FzZXMsCisJICogd2UgZG8gc3RpbGwgd2FudCB0byBjaGVjayBpZiB0aGVyZSdzIGEgcmVkdW5kYW50IHN3YXBwYWdlIHRvIGJlCisJICogZGlzY2FyZGVkLgogCSAqLwogCWlmICh3YmMtPmZvcl9yZWNsYWltKQogCQlzd2FwID0gZ2V0X3N3YXBfcGFnZSgpOwpAQCAtMjQ5Nyw3ICsyNDk4LDcgQEAKIAkucHV0X3N1cGVyCT0gc2htZW1fcHV0X3N1cGVyLAogfTsKIAotc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBzaG1lbV92bV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHNobWVtX3ZtX29wcyA9IHsKIAkuZmF1bHQJCT0gc2htZW1fZmF1bHQsCiAjaWZkZWYgQ09ORklHX05VTUEKIAkuc2V0X3BvbGljeSAgICAgPSBzaG1lbV9zZXRfcG9saWN5LApkaWZmIC0tZ2l0IGEvbW0vc3dhcGZpbGUuYyBiL21tL3N3YXBmaWxlLmMKaW5kZXggNGRlN2YwMi4uOWM1OTBlZSAxMDA2NDQKLS0tIGEvbW0vc3dhcGZpbGUuYworKysgYi9tbS9zd2FwZmlsZS5jCkBAIC0xMTUxLDggKzExNTEsNyBAQAogCQkJCX0gZWxzZQogCQkJCQlyZXR2YWwgPSB1bnVzZV9tbShtbSwgZW50cnksIHBhZ2UpOwogCi0JCQkJaWYgKHNldF9zdGFydF9tbSAmJgotCQkJCSAgICBzd2FwX2NvdW50KCpzd2FwX21hcCkgPCBzd2NvdW50KSB7CisJCQkJaWYgKHNldF9zdGFydF9tbSAmJiAqc3dhcF9tYXAgPCBzd2NvdW50KSB7CiAJCQkJCW1tcHV0KG5ld19zdGFydF9tbSk7CiAJCQkJCWF0b21pY19pbmMoJm1tLT5tbV91c2Vycyk7CiAJCQkJCW5ld19zdGFydF9tbSA9IG1tOwpAQCAtMTk3NCwxMiArMTk3MywxNCBAQAogCQlnb3RvIGJhZF9zd2FwOwogCX0KIAotCWlmIChibGtfcXVldWVfbm9ucm90KGJkZXZfZ2V0X3F1ZXVlKHAtPmJkZXYpKSkgewotCQlwLT5mbGFncyB8PSBTV1BfU09MSURTVEFURTsKLQkJcC0+Y2x1c3Rlcl9uZXh0ID0gMSArIChyYW5kb20zMigpICUgcC0+aGlnaGVzdF9iaXQpOworCWlmIChwLT5iZGV2KSB7CisJCWlmIChibGtfcXVldWVfbm9ucm90KGJkZXZfZ2V0X3F1ZXVlKHAtPmJkZXYpKSkgeworCQkJcC0+ZmxhZ3MgfD0gU1dQX1NPTElEU1RBVEU7CisJCQlwLT5jbHVzdGVyX25leHQgPSAxICsgKHJhbmRvbTMyKCkgJSBwLT5oaWdoZXN0X2JpdCk7CisJCX0KKwkJaWYgKGRpc2NhcmRfc3dhcChwKSA9PSAwKQorCQkJcC0+ZmxhZ3MgfD0gU1dQX0RJU0NBUkRBQkxFOwogCX0KLQlpZiAoZGlzY2FyZF9zd2FwKHApID09IDApCi0JCXAtPmZsYWdzIHw9IFNXUF9ESVNDQVJEQUJMRTsKIAogCW11dGV4X2xvY2soJnN3YXBvbl9tdXRleCk7CiAJc3Bpbl9sb2NrKCZzd2FwX2xvY2spOwpkaWZmIC0tZ2l0IGEvbW0vdm1hbGxvYy5jIGIvbW0vdm1hbGxvYy5jCmluZGV4IDY5NTExZTYuLjBmNTUxYTQgMTAwNjQ0Ci0tLSBhL21tL3ZtYWxsb2MuYworKysgYi9tbS92bWFsbG9jLmMKQEAgLTEyLDYgKzEyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgpAQCAtMjUsMTAgKzI2LDEwIEBACiAjaW5jbHVkZSA8bGludXgvcmN1cGRhdGUuaD4KICNpbmNsdWRlIDxsaW51eC9wZm4uaD4KICNpbmNsdWRlIDxsaW51eC9rbWVtbGVhay5oPgotI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KKyNpbmNsdWRlIDxhc20vc2htcGFyYW0uaD4KIAogCiAvKioqIFBhZ2UgdGFibGUgbWFuaXB1bGF0aW9uIGZ1bmN0aW9ucyAqKiovCkBAIC0xMTU2LDEyICsxMTU3LDExIEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgdm1fc3RydWN0ICpfX2dldF92bV9hcmVhX25vZGUodW5zaWduZWQgbG9uZyBzaXplLAotCQl1bnNpZ25lZCBsb25nIGZsYWdzLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwKLQkJaW50IG5vZGUsIGdmcF90IGdmcF9tYXNrLCB2b2lkICpjYWxsZXIpCisJCXVuc2lnbmVkIGxvbmcgYWxpZ24sIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIHVuc2lnbmVkIGxvbmcgc3RhcnQsCisJCXVuc2lnbmVkIGxvbmcgZW5kLCBpbnQgbm9kZSwgZ2ZwX3QgZ2ZwX21hc2ssIHZvaWQgKmNhbGxlcikKIHsKIAlzdGF0aWMgc3RydWN0IHZtYXBfYXJlYSAqdmE7CiAJc3RydWN0IHZtX3N0cnVjdCAqYXJlYTsKLQl1bnNpZ25lZCBsb25nIGFsaWduID0gMTsKIAogCUJVR19PTihpbl9pbnRlcnJ1cHQoKSk7CiAJaWYgKGZsYWdzICYgVk1fSU9SRU1BUCkgewpAQCAtMTIwMSw3ICsxMjAxLDcgQEAKIHN0cnVjdCB2bV9zdHJ1Y3QgKl9fZ2V0X3ZtX2FyZWEodW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIGZsYWdzLAogCQkJCXVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQogewotCXJldHVybiBfX2dldF92bV9hcmVhX25vZGUoc2l6ZSwgZmxhZ3MsIHN0YXJ0LCBlbmQsIC0xLCBHRlBfS0VSTkVMLAorCXJldHVybiBfX2dldF92bV9hcmVhX25vZGUoc2l6ZSwgMSwgZmxhZ3MsIHN0YXJ0LCBlbmQsIC0xLCBHRlBfS0VSTkVMLAogCQkJCQkJX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKF9fZ2V0X3ZtX2FyZWEpOwpAQCAtMTIxMCw3ICsxMjEwLDcgQEAKIAkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsCiAJCQkJICAgICAgIHZvaWQgKmNhbGxlcikKIHsKLQlyZXR1cm4gX19nZXRfdm1fYXJlYV9ub2RlKHNpemUsIGZsYWdzLCBzdGFydCwgZW5kLCAtMSwgR0ZQX0tFUk5FTCwKKwlyZXR1cm4gX19nZXRfdm1fYXJlYV9ub2RlKHNpemUsIDEsIGZsYWdzLCBzdGFydCwgZW5kLCAtMSwgR0ZQX0tFUk5FTCwKIAkJCQkgIGNhbGxlcik7CiB9CiAKQEAgLTEyMjUsMjIgKzEyMjUsMjIgQEAKICAqLwogc3RydWN0IHZtX3N0cnVjdCAqZ2V0X3ZtX2FyZWEodW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIGZsYWdzKQogewotCXJldHVybiBfX2dldF92bV9hcmVhX25vZGUoc2l6ZSwgZmxhZ3MsIFZNQUxMT0NfU1RBUlQsIFZNQUxMT0NfRU5ELAorCXJldHVybiBfX2dldF92bV9hcmVhX25vZGUoc2l6ZSwgMSwgZmxhZ3MsIFZNQUxMT0NfU1RBUlQsIFZNQUxMT0NfRU5ELAogCQkJCS0xLCBHRlBfS0VSTkVMLCBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpOwogfQogCiBzdHJ1Y3Qgdm1fc3RydWN0ICpnZXRfdm1fYXJlYV9jYWxsZXIodW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIGZsYWdzLAogCQkJCXZvaWQgKmNhbGxlcikKIHsKLQlyZXR1cm4gX19nZXRfdm1fYXJlYV9ub2RlKHNpemUsIGZsYWdzLCBWTUFMTE9DX1NUQVJULCBWTUFMTE9DX0VORCwKKwlyZXR1cm4gX19nZXRfdm1fYXJlYV9ub2RlKHNpemUsIDEsIGZsYWdzLCBWTUFMTE9DX1NUQVJULCBWTUFMTE9DX0VORCwKIAkJCQkJCS0xLCBHRlBfS0VSTkVMLCBjYWxsZXIpOwogfQogCiBzdHJ1Y3Qgdm1fc3RydWN0ICpnZXRfdm1fYXJlYV9ub2RlKHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBmbGFncywKIAkJCQkgICBpbnQgbm9kZSwgZ2ZwX3QgZ2ZwX21hc2spCiB7Ci0JcmV0dXJuIF9fZ2V0X3ZtX2FyZWFfbm9kZShzaXplLCBmbGFncywgVk1BTExPQ19TVEFSVCwgVk1BTExPQ19FTkQsIG5vZGUsCi0JCQkJICBnZnBfbWFzaywgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTsKKwlyZXR1cm4gX19nZXRfdm1fYXJlYV9ub2RlKHNpemUsIDEsIGZsYWdzLCBWTUFMTE9DX1NUQVJULCBWTUFMTE9DX0VORCwKKwkJCQkgIG5vZGUsIGdmcF9tYXNrLCBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpOwogfQogCiBzdGF0aWMgc3RydWN0IHZtX3N0cnVjdCAqZmluZF92bV9hcmVhKGNvbnN0IHZvaWQgKmFkZHIpCkBAIC0xNDAzLDcgKzE0MDMsOCBAQAogfQogRVhQT1JUX1NZTUJPTCh2bWFwKTsKIAotc3RhdGljIHZvaWQgKl9fdm1hbGxvY19ub2RlKHVuc2lnbmVkIGxvbmcgc2l6ZSwgZ2ZwX3QgZ2ZwX21hc2ssIHBncHJvdF90IHByb3QsCitzdGF0aWMgdm9pZCAqX192bWFsbG9jX25vZGUodW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIGFsaWduLAorCQkJICAgIGdmcF90IGdmcF9tYXNrLCBwZ3Byb3RfdCBwcm90LAogCQkJICAgIGludCBub2RlLCB2b2lkICpjYWxsZXIpOwogc3RhdGljIHZvaWQgKl9fdm1hbGxvY19hcmVhX25vZGUoc3RydWN0IHZtX3N0cnVjdCAqYXJlYSwgZ2ZwX3QgZ2ZwX21hc2ssCiAJCQkJIHBncHJvdF90IHByb3QsIGludCBub2RlLCB2b2lkICpjYWxsZXIpCkBAIC0xNDE3LDcgKzE0MTgsNyBAQAogCWFyZWEtPm5yX3BhZ2VzID0gbnJfcGFnZXM7CiAJLyogUGxlYXNlIG5vdGUgdGhhdCB0aGUgcmVjdXJzaW9uIGlzIHN0cmljdGx5IGJvdW5kZWQuICovCiAJaWYgKGFycmF5X3NpemUgPiBQQUdFX1NJWkUpIHsKLQkJcGFnZXMgPSBfX3ZtYWxsb2Nfbm9kZShhcnJheV9zaXplLCBnZnBfbWFzayB8IF9fR0ZQX1pFUk8sCisJCXBhZ2VzID0gX192bWFsbG9jX25vZGUoYXJyYXlfc2l6ZSwgMSwgZ2ZwX21hc2sgfCBfX0dGUF9aRVJPLAogCQkJCVBBR0VfS0VSTkVMLCBub2RlLCBjYWxsZXIpOwogCQlhcmVhLT5mbGFncyB8PSBWTV9WUEFHRVM7CiAJfSBlbHNlIHsKQEAgLTE0NzYsNiArMTQ3Nyw3IEBACiAvKioKICAqCV9fdm1hbGxvY19ub2RlICAtICBhbGxvY2F0ZSB2aXJ0dWFsbHkgY29udGlndW91cyBtZW1vcnkKICAqCUBzaXplOgkJYWxsb2NhdGlvbiBzaXplCisgKglAYWxpZ246CQlkZXNpcmVkIGFsaWdubWVudAogICoJQGdmcF9tYXNrOglmbGFncyBmb3IgdGhlIHBhZ2UgbGV2ZWwgYWxsb2NhdG9yCiAgKglAcHJvdDoJCXByb3RlY3Rpb24gbWFzayBmb3IgdGhlIGFsbG9jYXRlZCBwYWdlcwogICoJQG5vZGU6CQlub2RlIHRvIHVzZSBmb3IgYWxsb2NhdGlvbiBvciAtMQpAQCAtMTQ4NSw4ICsxNDg3LDkgQEAKICAqCWFsbG9jYXRvciB3aXRoIEBnZnBfbWFzayBmbGFncy4gIE1hcCB0aGVtIGludG8gY29udGlndW91cwogICoJa2VybmVsIHZpcnR1YWwgc3BhY2UsIHVzaW5nIGEgcGFnZXRhYmxlIHByb3RlY3Rpb24gb2YgQHByb3QuCiAgKi8KLXN0YXRpYyB2b2lkICpfX3ZtYWxsb2Nfbm9kZSh1bnNpZ25lZCBsb25nIHNpemUsIGdmcF90IGdmcF9tYXNrLCBwZ3Byb3RfdCBwcm90LAotCQkJCQkJaW50IG5vZGUsIHZvaWQgKmNhbGxlcikKK3N0YXRpYyB2b2lkICpfX3ZtYWxsb2Nfbm9kZSh1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgYWxpZ24sCisJCQkgICAgZ2ZwX3QgZ2ZwX21hc2ssIHBncHJvdF90IHByb3QsCisJCQkgICAgaW50IG5vZGUsIHZvaWQgKmNhbGxlcikKIHsKIAlzdHJ1Y3Qgdm1fc3RydWN0ICphcmVhOwogCXZvaWQgKmFkZHI7CkBAIC0xNDk2LDggKzE0OTksOCBAQAogCWlmICghc2l6ZSB8fCAoc2l6ZSA+PiBQQUdFX1NISUZUKSA+IHRvdGFscmFtX3BhZ2VzKQogCQlyZXR1cm4gTlVMTDsKIAotCWFyZWEgPSBfX2dldF92bV9hcmVhX25vZGUoc2l6ZSwgVk1fQUxMT0MsIFZNQUxMT0NfU1RBUlQsIFZNQUxMT0NfRU5ELAotCQkJCQkJbm9kZSwgZ2ZwX21hc2ssIGNhbGxlcik7CisJYXJlYSA9IF9fZ2V0X3ZtX2FyZWFfbm9kZShzaXplLCBhbGlnbiwgVk1fQUxMT0MsIFZNQUxMT0NfU1RBUlQsCisJCQkJICBWTUFMTE9DX0VORCwgbm9kZSwgZ2ZwX21hc2ssIGNhbGxlcik7CiAKIAlpZiAoIWFyZWEpCiAJCXJldHVybiBOVUxMOwpAQCAtMTUxNiw3ICsxNTE5LDcgQEAKIAogdm9pZCAqX192bWFsbG9jKHVuc2lnbmVkIGxvbmcgc2l6ZSwgZ2ZwX3QgZ2ZwX21hc2ssIHBncHJvdF90IHByb3QpCiB7Ci0JcmV0dXJuIF9fdm1hbGxvY19ub2RlKHNpemUsIGdmcF9tYXNrLCBwcm90LCAtMSwKKwlyZXR1cm4gX192bWFsbG9jX25vZGUoc2l6ZSwgMSwgZ2ZwX21hc2ssIHByb3QsIC0xLAogCQkJCV9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7CiB9CiBFWFBPUlRfU1lNQk9MKF9fdm1hbGxvYyk7CkBAIC0xNTMyLDcgKzE1MzUsNyBAQAogICovCiB2b2lkICp2bWFsbG9jKHVuc2lnbmVkIGxvbmcgc2l6ZSkKIHsKLQlyZXR1cm4gX192bWFsbG9jX25vZGUoc2l6ZSwgR0ZQX0tFUk5FTCB8IF9fR0ZQX0hJR0hNRU0sIFBBR0VfS0VSTkVMLAorCXJldHVybiBfX3ZtYWxsb2Nfbm9kZShzaXplLCAxLCBHRlBfS0VSTkVMIHwgX19HRlBfSElHSE1FTSwgUEFHRV9LRVJORUwsCiAJCQkJCS0xLCBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpOwogfQogRVhQT1JUX1NZTUJPTCh2bWFsbG9jKTsKQEAgLTE1NDksNyArMTU1Miw4IEBACiAJc3RydWN0IHZtX3N0cnVjdCAqYXJlYTsKIAl2b2lkICpyZXQ7CiAKLQlyZXQgPSBfX3ZtYWxsb2Nfbm9kZShzaXplLCBHRlBfS0VSTkVMIHwgX19HRlBfSElHSE1FTSB8IF9fR0ZQX1pFUk8sCisJcmV0ID0gX192bWFsbG9jX25vZGUoc2l6ZSwgU0hNTEJBLAorCQkJICAgICBHRlBfS0VSTkVMIHwgX19HRlBfSElHSE1FTSB8IF9fR0ZQX1pFUk8sCiAJCQkgICAgIFBBR0VfS0VSTkVMLCAtMSwgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTsKIAlpZiAocmV0KSB7CiAJCWFyZWEgPSBmaW5kX3ZtX2FyZWEocmV0KTsKQEAgLTE1NzIsNyArMTU3Niw3IEBACiAgKi8KIHZvaWQgKnZtYWxsb2Nfbm9kZSh1bnNpZ25lZCBsb25nIHNpemUsIGludCBub2RlKQogewotCXJldHVybiBfX3ZtYWxsb2Nfbm9kZShzaXplLCBHRlBfS0VSTkVMIHwgX19HRlBfSElHSE1FTSwgUEFHRV9LRVJORUwsCisJcmV0dXJuIF9fdm1hbGxvY19ub2RlKHNpemUsIDEsIEdGUF9LRVJORUwgfCBfX0dGUF9ISUdITUVNLCBQQUdFX0tFUk5FTCwKIAkJCQkJbm9kZSwgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTsKIH0KIEVYUE9SVF9TWU1CT0wodm1hbGxvY19ub2RlKTsKQEAgLTE1OTUsNyArMTU5OSw3IEBACiAKIHZvaWQgKnZtYWxsb2NfZXhlYyh1bnNpZ25lZCBsb25nIHNpemUpCiB7Ci0JcmV0dXJuIF9fdm1hbGxvY19ub2RlKHNpemUsIEdGUF9LRVJORUwgfCBfX0dGUF9ISUdITUVNLCBQQUdFX0tFUk5FTF9FWEVDLAorCXJldHVybiBfX3ZtYWxsb2Nfbm9kZShzaXplLCAxLCBHRlBfS0VSTkVMIHwgX19HRlBfSElHSE1FTSwgUEFHRV9LRVJORUxfRVhFQywKIAkJCSAgICAgIC0xLCBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpOwogfQogCkBAIC0xNjE2LDcgKzE2MjAsNyBAQAogICovCiB2b2lkICp2bWFsbG9jXzMyKHVuc2lnbmVkIGxvbmcgc2l6ZSkKIHsKLQlyZXR1cm4gX192bWFsbG9jX25vZGUoc2l6ZSwgR0ZQX1ZNQUxMT0MzMiwgUEFHRV9LRVJORUwsCisJcmV0dXJuIF9fdm1hbGxvY19ub2RlKHNpemUsIDEsIEdGUF9WTUFMTE9DMzIsIFBBR0VfS0VSTkVMLAogCQkJICAgICAgLTEsIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7CiB9CiBFWFBPUlRfU1lNQk9MKHZtYWxsb2NfMzIpOwpAQCAtMTYzMyw3ICsxNjM3LDcgQEAKIAlzdHJ1Y3Qgdm1fc3RydWN0ICphcmVhOwogCXZvaWQgKnJldDsKIAotCXJldCA9IF9fdm1hbGxvY19ub2RlKHNpemUsIEdGUF9WTUFMTE9DMzIgfCBfX0dGUF9aRVJPLCBQQUdFX0tFUk5FTCwKKwlyZXQgPSBfX3ZtYWxsb2Nfbm9kZShzaXplLCAxLCBHRlBfVk1BTExPQzMyIHwgX19HRlBfWkVSTywgUEFHRV9LRVJORUwsCiAJCQkgICAgIC0xLCBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpOwogCWlmIChyZXQpIHsKIAkJYXJlYSA9IGZpbmRfdm1fYXJlYShyZXQpOwpkaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uYwppbmRleCAxMjE5Y2ViLi43NzdhZjU3IDEwMDY0NAotLS0gYS9tbS92bXNjYW4uYworKysgYi9tbS92bXNjYW4uYwpAQCAtNTQ0LDYgKzU0NCwxNiBAQAogCQkgKi8KIAkJbHJ1ID0gTFJVX1VORVZJQ1RBQkxFOwogCQlhZGRfcGFnZV90b191bmV2aWN0YWJsZV9saXN0KHBhZ2UpOworCQkvKgorCQkgKiBXaGVuIHJhY2luZyB3aXRoIGFuIG1sb2NrIGNsZWFyaW5nIChwYWdlIGlzCisJCSAqIHVubG9ja2VkKSwgbWFrZSBzdXJlIHRoYXQgaWYgdGhlIG90aGVyIHRocmVhZCBkb2VzCisJCSAqIG5vdCBvYnNlcnZlIG91ciBzZXR0aW5nIG9mIFBHX2xydSBhbmQgZmFpbHMKKwkJICogaXNvbGF0aW9uLCB3ZSBzZWUgUEdfbWxvY2tlZCBjbGVhcmVkIGJlbG93IGFuZCBtb3ZlCisJCSAqIHRoZSBwYWdlIGJhY2sgdG8gdGhlIGV2aWN0YWJsZSBsaXN0LgorCQkgKgorCQkgKiBUaGUgb3RoZXIgc2lkZSBpcyBUZXN0Q2xlYXJQYWdlTWxvY2tlZCgpLgorCQkgKi8KKwkJc21wX21iKCk7CiAJfQogCiAJLyoKQEAgLTEwODgsNyArMTA5OCw3IEBACiAJaW50IGx1bXB5X3JlY2xhaW0gPSAwOwogCiAJd2hpbGUgKHVubGlrZWx5KHRvb19tYW55X2lzb2xhdGVkKHpvbmUsIGZpbGUsIHNjKSkpIHsKLQkJY29uZ2VzdGlvbl93YWl0KFdSSVRFLCBIWi8xMCk7CisJCWNvbmdlc3Rpb25fd2FpdChCTEtfUldfQVNZTkMsIEhaLzEwKTsKIAogCQkvKiBXZSBhcmUgYWJvdXQgdG8gZGllIGFuZCBmcmVlIG91ciBtZW1vcnkuIFJldHVybiBub3cuICovCiAJCWlmIChmYXRhbF9zaWduYWxfcGVuZGluZyhjdXJyZW50KSkKQEAgLTEzNTYsNyArMTM2Niw3IEBACiAJCQkgKiBJTywgcGx1cyBKVk0gY2FuIGNyZWF0ZSBsb3RzIG9mIGFub24gVk1fRVhFQyBwYWdlcywKIAkJCSAqIHNvIHdlIGlnbm9yZSB0aGVtIGhlcmUuCiAJCQkgKi8KLQkJCWlmICgodm1fZmxhZ3MgJiBWTV9FWEVDKSAmJiAhUGFnZUFub24ocGFnZSkpIHsKKwkJCWlmICgodm1fZmxhZ3MgJiBWTV9FWEVDKSAmJiBwYWdlX2lzX2ZpbGVfY2FjaGUocGFnZSkpIHsKIAkJCQlsaXN0X2FkZCgmcGFnZS0+bHJ1LCAmbF9hY3RpdmUpOwogCQkJCWNvbnRpbnVlOwogCQkJfQpAQCAtMTcwOSwxMCArMTcxOSwxMCBAQAogICoKICAqIElmIHRoZSBjYWxsZXIgaXMgIV9fR0ZQX0ZTIHRoZW4gdGhlIHByb2JhYmlsaXR5IG9mIGEgZmFpbHVyZSBpcyByZWFzb25hYmx5CiAgKiBoaWdoIC0gdGhlIHpvbmUgbWF5IGJlIGZ1bGwgb2YgZGlydHkgb3IgdW5kZXItd3JpdGViYWNrIHBhZ2VzLCB3aGljaCB0aGlzCi0gKiBjYWxsZXIgY2FuJ3QgZG8gbXVjaCBhYm91dC4gIFdlIGtpY2sgcGRmbHVzaCBhbmQgdGFrZSBleHBsaWNpdCBuYXBzIGluIHRoZQotICogaG9wZSB0aGF0IHNvbWUgb2YgdGhlc2UgcGFnZXMgY2FuIGJlIHdyaXR0ZW4uICBCdXQgaWYgdGhlIGFsbG9jYXRpbmcgdGFzawotICogaG9sZHMgZmlsZXN5c3RlbSBsb2NrcyB3aGljaCBwcmV2ZW50IHdyaXRlb3V0IHRoaXMgbWlnaHQgbm90IHdvcmssIGFuZCB0aGUKLSAqIGFsbG9jYXRpb24gYXR0ZW1wdCB3aWxsIGZhaWwuCisgKiBjYWxsZXIgY2FuJ3QgZG8gbXVjaCBhYm91dC4gIFdlIGtpY2sgdGhlIHdyaXRlYmFjayB0aHJlYWRzIGFuZCB0YWtlIGV4cGxpY2l0CisgKiBuYXBzIGluIHRoZSBob3BlIHRoYXQgc29tZSBvZiB0aGVzZSBwYWdlcyBjYW4gYmUgd3JpdHRlbi4gIEJ1dCBpZiB0aGUKKyAqIGFsbG9jYXRpbmcgdGFzayBob2xkcyBmaWxlc3lzdGVtIGxvY2tzIHdoaWNoIHByZXZlbnQgd3JpdGVvdXQgdGhpcyBtaWdodCBub3QKKyAqIHdvcmssIGFuZCB0aGUgYWxsb2NhdGlvbiBhdHRlbXB0IHdpbGwgZmFpbC4KICAqCiAgKiByZXR1cm5zOgkwLCBpZiBubyBwYWdlcyByZWNsYWltZWQKICAqIAkJZWxzZSwgdGhlIG51bWJlciBvZiBwYWdlcyByZWNsYWltZWQKZGlmZiAtLWdpdCBhL25ldC85cC9jbGllbnQuYyBiL25ldC85cC9jbGllbnQuYwppbmRleCA1YmY1ZjIyLi44YWY5NWIyIDEwMDY0NAotLS0gYS9uZXQvOXAvY2xpZW50LmMKKysrIGIvbmV0LzlwL2NsaWVudC5jCkBAIC01ODIsMTEgKzU4Miw5IEBACiAKIAltZW1zZXQoJmZpZC0+cWlkLCAwLCBzaXplb2Yoc3RydWN0IHA5X3FpZCkpOwogCWZpZC0+bW9kZSA9IC0xOwotCWZpZC0+cmRpcl9mcG9zID0gMDsKIAlmaWQtPnVpZCA9IGN1cnJlbnRfZnN1aWQoKTsKIAlmaWQtPmNsbnQgPSBjbG50OwotCWZpZC0+YXV4ID0gTlVMTDsKLQorCWZpZC0+cmRpciA9IE5VTEw7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNsbnQtPmxvY2ssIGZsYWdzKTsKIAlsaXN0X2FkZCgmZmlkLT5mbGlzdCwgJmNsbnQtPmZpZGxpc3QpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNsbnQtPmxvY2ssIGZsYWdzKTsKQEAgLTYwOSw2ICs2MDcsNyBAQAogCXNwaW5fbG9ja19pcnFzYXZlKCZjbG50LT5sb2NrLCBmbGFncyk7CiAJbGlzdF9kZWwoJmZpZC0+Zmxpc3QpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNsbnQtPmxvY2ssIGZsYWdzKTsKKwlrZnJlZShmaWQtPnJkaXIpOwogCWtmcmVlKGZpZCk7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC85cC90cmFuc192aXJ0aW8uYyBiL25ldC85cC90cmFuc192aXJ0aW8uYwppbmRleCBiMmUwN2YwLi5lYTFlM2RhIDEwMDY0NAotLS0gYS9uZXQvOXAvdHJhbnNfdmlydGlvLmMKKysrIGIvbmV0LzlwL3RyYW5zX3ZpcnRpby5jCkBAIC00Myw3ICs0Myw2IEBACiAjaW5jbHVkZSA8bmV0LzlwL3RyYW5zcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvdmlydGlvLmg+Ci0jaW5jbHVkZSA8bGludXgvdmlydGlvX2lkcy5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb185cC5oPgogCiAjZGVmaW5lIFZJUlRRVUVVRV9OVU0JMTI4CmRpZmYgLS1naXQgYS9uZXQvaXJkYS9pcmNvbW0vaXJjb21tX3R0eV9hdHRhY2guYyBiL25ldC9pcmRhL2lyY29tbS9pcmNvbW1fdHR5X2F0dGFjaC5jCmluZGV4IGVhZmMwMTAuLjNjMTc1NDAgMTAwNjQ0Ci0tLSBhL25ldC9pcmRhL2lyY29tbS9pcmNvbW1fdHR5X2F0dGFjaC5jCisrKyBiL25ldC9pcmRhL2lyY29tbS9pcmNvbW1fdHR5X2F0dGFjaC5jCkBAIC0zMCw2ICszMCw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KIAogI2luY2x1ZGUgPG5ldC9pcmRhL2lyZGEuaD4KICNpbmNsdWRlIDxuZXQvaXJkYS9pcmxtcC5oPgpkaWZmIC0tZ2l0IGEvbmV0L2lyZGEvaXJsYW4vaXJsYW5fY29tbW9uLmMgYi9uZXQvaXJkYS9pcmxhbi9pcmxhbl9jb21tb24uYwppbmRleCA2MjExNjgyLi4zMTVlYWQzIDEwMDY0NAotLS0gYS9uZXQvaXJkYS9pcmxhbi9pcmxhbl9jb21tb24uYworKysgYi9uZXQvaXJkYS9pcmxhbi9pcmxhbl9jb21tb24uYwpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CmRpZmYgLS1naXQgYS9uZXQvaXJkYS9pcmxhbi9pcmxhbl9ldGguYyBiL25ldC9pcmRhL2lybGFuL2lybGFuX2V0aC5jCmluZGV4IDdiNmI2MzEuLmQzNDAxMTAgMTAwNjQ0Ci0tLSBhL25ldC9pcmRhL2lybGFuL2lybGFuX2V0aC5jCisrKyBiL25ldC9pcmRhL2lybGFuL2lybGFuX2V0aC5jCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bmV0L2FycC5oPgogCiAjaW5jbHVkZSA8bmV0L2lyZGEvaXJkYS5oPgpkaWZmIC0tZ2l0IGEvbmV0L2lyZGEvaXJuZXQvaXJuZXRfaXJkYS5jIGIvbmV0L2lyZGEvaXJuZXQvaXJuZXRfaXJkYS5jCmluZGV4IGNmOWE0YjUuLmNjY2MyZTkgMTAwNjQ0Ci0tLSBhL25ldC9pcmRhL2lybmV0L2lybmV0X2lyZGEuYworKysgYi9uZXQvaXJkYS9pcm5ldC9pcm5ldF9pcmRhLmMKQEAgLTksNiArOSw3IEBACiAgKi8KIAogI2luY2x1ZGUgImlybmV0X2lyZGEuaCIJCS8qIFByaXZhdGUgaGVhZGVyICovCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KIApkaWZmIC0tZ2l0IGEvbmV0L2lyZGEvaXJuZXQvaXJuZXRfcHBwLmMgYi9uZXQvaXJkYS9pcm5ldC9pcm5ldF9wcHAuYwppbmRleCA2OGNiY2IxLi43ZGVhODgyIDEwMDY0NAotLS0gYS9uZXQvaXJkYS9pcm5ldC9pcm5ldF9wcHAuYworKysgYi9uZXQvaXJkYS9pcm5ldC9pcm5ldF9wcHAuYwpAQCAtMTMsNiArMTMsNyBAQAogICoJMikgYXMgYSBjb250cm9sIGNoYW5uZWwgKHdyaXRlIGNvbW1hbmRzLCByZWFkIGV2ZW50cykKICAqLwogCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgImlybmV0X3BwcC5oIgkJLyogUHJpdmF0ZSBoZWFkZXIgKi8KIC8qIFBsZWFzZSBwdXQgb3RoZXIgaGVhZGVycyBpbiBpcm5ldC5oIC0gVGhhbmtzICovCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvcmM4MDIxMV9waWRfZGVidWdmcy5jIGIvbmV0L21hYzgwMjExL3JjODAyMTFfcGlkX2RlYnVnZnMuYwppbmRleCBhNTkwNDNmYi4uNDU2NjcwNSAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3JjODAyMTFfcGlkX2RlYnVnZnMuYworKysgYi9uZXQvbWFjODAyMTEvcmM4MDIxMV9waWRfZGVidWdmcy5jCkBAIC02LDYgKzYsNyBAQAogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmMKaW5kZXggN2M5ZWMzZC4uY2E2ZTY4ZCAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYwpAQCAtMTQsNiArMTQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgpkaWZmIC0tZ2l0IGEvbmV0L3BhY2tldC9hZl9wYWNrZXQuYyBiL25ldC9wYWNrZXQvYWZfcGFja2V0LmMKaW5kZXggNDhiMThkYS4uZjJkMTE2YSAxMDA2NDQKLS0tIGEvbmV0L3BhY2tldC9hZl9wYWNrZXQuYworKysgYi9uZXQvcGFja2V0L2FmX3BhY2tldC5jCkBAIC0yMDgxLDcgKzIwODEsNyBAQAogCQlhdG9taWNfZGVjKCZwa3Rfc2soc2spLT5tYXBwZWQpOwogfQogCi1zdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHBhY2tldF9tbWFwX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgcGFja2V0X21tYXBfb3BzID0gewogCS5vcGVuCT0JcGFja2V0X21tX29wZW4sCiAJLmNsb3NlCT0JcGFja2V0X21tX2Nsb3NlLAogfTsKZGlmZiAtLWdpdCBhL25ldC9yZmtpbGwvY29yZS5jIGIvbmV0L3Jma2lsbC9jb3JlLmMKaW5kZXggZGJlYWYyOS4uYmEyZWZiOSAxMDA2NDQKLS0tIGEvbmV0L3Jma2lsbC9jb3JlLmMKKysrIGIvbmV0L3Jma2lsbC9jb3JlLmMKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+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/OlxzKyRNb2RpZmllcikqXHMqPVxzKigwfE5VTEx8ZmFsc2UpXHMqOy8pIHsKZGlmZiAtLWdpdCBhL3NjcmlwdHMvZ2V0X21haW50YWluZXIucGwgYi9zY3JpcHRzL2dldF9tYWludGFpbmVyLnBsCmluZGV4IGNkYjQ0YjYuLjEwMmI3NjYgMTAwNzU1Ci0tLSBhL3NjcmlwdHMvZ2V0X21haW50YWluZXIucGwKKysrIGIvc2NyaXB0cy9nZXRfbWFpbnRhaW5lci5wbApAQCAtMTMsNyArMTMsNyBAQAogdXNlIHN0cmljdDsKIAogbXkgJFAgPSAkMDsKLW15ICRWID0gJzAuMjAnOworbXkgJFYgPSAnMC4yMSc7CiAKIHVzZSBHZXRvcHQ6OkxvbmcgcXcoOmNvbmZpZyBub19hdXRvX2FiYnJldik7CiAKQEAgLTM3LDYgKzM3LDcgQEAKIG15ICR3ZWIgPSAwOwogbXkgJHN1YnN5c3RlbSA9IDA7CiBteSAkc3RhdHVzID0gMDsKK215ICRrZXl3b3JkcyA9IDE7CiBteSAkZnJvbV9maWxlbmFtZSA9IDA7CiBteSAkcGF0dGVybl9kZXB0aCA9IDA7CiBteSAkdmVyc2lvbiA9IDA7CkBAIC04NCw2ICs4NSw3IEBACiAJCSdzY20hJyA9PiBcJHNjbSwKIAkJJ3dlYiEnID0+IFwkd2ViLAogCQkncGF0dGVybi1kZXB0aD1pJyA9PiBcJHBhdHRlcm5fZGVwdGgsCisJCSdrfGtleXdvcmRzIScgPT4gXCRrZXl3b3JkcywKIAkJJ2Z8ZmlsZScgPT4gXCRmcm9tX2ZpbGVuYW1lLAogCQkndnx2ZXJzaW9uJyA9PiBcJHZlcnNpb24sCiAJCSdofGhlbHAnID0+IFwkaGVscCwKQEAgLTEzMiw2ICsxMzQsOCBAQAogIyMgUmVhZCBNQUlOVEFJTkVSUyBmb3IgdHlwZS92YWx1ZSBwYWlycwogCiBteSBAdHlwZXZhbHVlID0gKCk7CitteSAla2V5d29yZF9oYXNoOworCiBvcGVuKE1BSU5ULCAiPCR7bGtfcGF0aH1NQUlOVEFJTkVSUyIpIHx8IGRpZSAiJFA6IENhbid0IG9wZW4gTUFJTlRBSU5FUlNcbiI7CiB3aGlsZSAoPE1BSU5UPikgewogICAgIG15ICRsaW5lID0gJF87CkBAIC0xNDksNiArMTUzLDggQEAKIAkgICAgaWYgKCgtZCAkdmFsdWUpKSB7CiAJCSR2YWx1ZSA9fiBzQChbXi9dKSRAJDEvQDsKIAkgICAgfQorCX0gZWxzaWYgKCR0eXBlIGVxICJLIikgeworCSAgICAka2V5d29yZF9oYXNoe0B0eXBldmFsdWV9ID0gJHZhbHVlOwogCX0KIAlwdXNoKEB0eXBldmFsdWUsICIkdHlwZTokdmFsdWUiKTsKICAgICB9IGVsc2lmICghL14oXHMpKiQvKSB7CkBAIC0xODgsNiArMTk0LDcgQEAKIAogbXkgQGZpbGVzID0gKCk7CiBteSBAcmFuZ2UgPSAoKTsKK215IEBrZXl3b3JkX3R2aSA9ICgpOwogCiBmb3JlYWNoIG15ICRmaWxlIChAQVJHVikgewogICAgICMjaWYgJGZpbGUgaXMgYSBkaXJlY3RvcnkgYW5kIGl0IGxhY2tzIGEgdHJhaWxpbmcgc2xhc2gsIGFkZCBvbmUKQEAgLTE5OCwxMSArMjA1LDI0IEBACiAgICAgfQogICAgIGlmICgkZnJvbV9maWxlbmFtZSkgewogCXB1c2goQGZpbGVzLCAkZmlsZSk7CisJaWYgKC1mICRmaWxlICYmICRrZXl3b3JkcykgeworCSAgICBvcGVuKEZJTEUsICI8JGZpbGUiKSBvciBkaWUgIiRQOiBDYW4ndCBvcGVuICR7ZmlsZX1cbiI7CisJICAgIHdoaWxlICg8RklMRT4pIHsKKwkJbXkgJHBhdGNoX2xpbmUgPSAkXzsKKwkJZm9yZWFjaCBteSAkbGluZSAoa2V5cyAla2V5d29yZF9oYXNoKSB7CisJCSAgICBpZiAoJHBhdGNoX2xpbmUgPX4gbS9eLioka2V5d29yZF9oYXNoeyRsaW5lfS94KSB7CisJCQlwdXNoKEBrZXl3b3JkX3R2aSwgJGxpbmUpOworCQkgICAgfQorCQl9CisJICAgIH0KKwkgICAgY2xvc2UoRklMRSk7CisJfQogICAgIH0gZWxzZSB7CiAJbXkgJGZpbGVfY250ID0gQGZpbGVzOwogCW15ICRsYXN0ZmlsZTsKIAlvcGVuKFBBVENILCAiPCRmaWxlIikgb3IgZGllICIkUDogQ2FuJ3Qgb3BlbiAke2ZpbGV9XG4iOwogCXdoaWxlICg8UEFUQ0g+KSB7CisJICAgIG15ICRwYXRjaF9saW5lID0gJF87CiAJICAgIGlmIChtL15cK1wrXCtccysoXFMrKS8pIHsKIAkJbXkgJGZpbGVuYW1lID0gJDE7CiAJCSRmaWxlbmFtZSA9fiBzQF5bXi9dKi9AQDsKQEAgLTIxMyw2ICsyMzMsMTIgQEAKIAkJaWYgKCRlbWFpbF9naXRfYmxhbWUpIHsKIAkJICAgIHB1c2goQHJhbmdlLCAiJGxhc3RmaWxlOiQxOiQyIik7CiAJCX0KKwkgICAgfSBlbHNpZiAoJGtleXdvcmRzKSB7CisJCWZvcmVhY2ggbXkgJGxpbmUgKGtleXMgJWtleXdvcmRfaGFzaCkgeworCQkgICAgaWYgKCRwYXRjaF9saW5lID1+IG0vXlsrLV0uKiRrZXl3b3JkX2hhc2h7JGxpbmV9L3gpIHsKKwkJCXB1c2goQGtleXdvcmRfdHZpLCAkbGluZSk7CisJCSAgICB9CisJCX0KIAkgICAgfQogCX0KIAljbG9zZShQQVRDSCk7CkBAIC0yODYsNiArMzEyLDEzIEBACiAgICAgfQogfQogCitpZiAoJGtleXdvcmRzKSB7CisgICAgQGtleXdvcmRfdHZpID0gc29ydF9hbmRfdW5pcShAa2V5d29yZF90dmkpOworICAgIGZvcmVhY2ggbXkgJGxpbmUgKEBrZXl3b3JkX3R2aSkgeworCWFkZF9jYXRlZ29yaWVzKCRsaW5lKTsKKyAgICB9Cit9CisKIGlmICgkZW1haWwpIHsKICAgICBmb3JlYWNoIG15ICRjaGllZiAoQHBlbmd1aW5fY2hpZWYpIHsKIAlpZiAoJGNoaWVmID1+IG0vXiguKik6KC4qKS8pIHsKQEAgLTM4NCw2ICs0MTcsNyBAQAogCiBPdGhlciBvcHRpb25zOgogICAtLXBhdHRlcm4tZGVwdGggPT4gTnVtYmVyIG9mIHBhdHRlcm4gZGlyZWN0b3J5IHRyYXZlcnNhbHMgKGRlZmF1bHQ6IDAgKGFsbCkpCisgIC0ta2V5d29yZHMgPT4gc2NhbiBwYXRjaCBmb3Iga2V5d29yZHMgKGRlZmF1bHQ6IDEgKG9uKSkKICAgLS12ZXJzaW9uID0+IHNob3cgdmVyc2lvbgogICAtLWhlbHAgPT4gc2hvdyB0aGlzIGhlbHAgaW5mb3JtYXRpb24KIApAQCAtNDg2LDcgKzUyMCw2IEBACiB9CiAKIHN1YiBmaW5kX3N0YXJ0aW5nX2luZGV4IHsKLQogICAgIG15ICgkaW5kZXgpID0gQF87CiAKICAgICB3aGlsZSAoJGluZGV4ID4gMCkgewpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9oZWFkZXJzX2luc3RhbGwucGwgYi9zY3JpcHRzL2hlYWRlcnNfaW5zdGFsbC5wbAppbmRleCBjNmFlNDA1Li5iODljYTJjIDEwMDY0NAotLS0gYS9zY3JpcHRzL2hlYWRlcnNfaW5zdGFsbC5wbAorKysgYi9zY3JpcHRzL2hlYWRlcnNfaW5zdGFsbC5wbApAQCAtMjAsNyArMjAsNyBAQAogCiBteSAoJHJlYWRkaXIsICRpbnN0YWxsZGlyLCAkYXJjaCwgQGZpbGVzKSA9IEBBUkdWOwogCi1teSAkdW5pZmRlZiA9ICJzY3JpcHRzL3VuaWZkZWYgLVVfX0tFUk5FTF9fIjsKK215ICR1bmlmZGVmID0gInNjcmlwdHMvdW5pZmRlZiAtVV9fS0VSTkVMX18gLURfX0VYUE9SVEVEX0hFQURFUlNfXyI7CiAKIGZvcmVhY2ggbXkgJGZpbGUgKEBmaWxlcykgewogCWxvY2FsICpJTkZJTEU7CmRpZmYgLS1naXQgYS9zY3JpcHRzL21rY29tcGlsZV9oIGIvc2NyaXB0cy9ta2NvbXBpbGVfaAppbmRleCA2YTEyZGQ5Li5iY2UzZDBmIDEwMDc1NQotLS0gYS9zY3JpcHRzL21rY29tcGlsZV9oCisrKyBiL3NjcmlwdHMvbWtjb21waWxlX2gKQEAgLTEsMyArMSw1IEBACisjIS9iaW4vc2gKKwogVEFSR0VUPSQxCiBBUkNIPSQyCiBTTVA9JDMKQEAgLTUwLDcgKzUyLDcgQEAKICMgVHJ1bmNhdGUgdG8gbWF4aW11bSBsZW5ndGgKIAogVVRTX0xFTj02NAotVVRTX1RSVU5DQVRFPSJzZWQgLWUgcy9cKC5cezEsJFVUU19MRU5cfVwpLiovXDEvIgorVVRTX1RSVU5DQVRFPSJjdXQgLWIgLSRVVFNfTEVOIgogCiAjIEdlbmVyYXRlIGEgdGVtcG9yYXJ5IGNvbXBpbGUuaAogCkBAIC02Niw5ICs2OCwxMyBAQAogICBlY2hvIFwjZGVmaW5lIExJTlVYX0NPTVBJTEVfSE9TVCBcImBob3N0bmFtZSB8ICRVVFNfVFJVTkNBVEVgXCIKIAogICBpZiBbIC14IC9iaW4vZG5zZG9tYWlubmFtZSBdOyB0aGVuCi0gICAgZWNobyBcI2RlZmluZSBMSU5VWF9DT01QSUxFX0RPTUFJTiBcImBkbnNkb21haW5uYW1lIHwgJFVUU19UUlVOQ0FURWBcIgorICAgIGRvbWFpbj1gZG5zZG9tYWlubmFtZSAyPiAvZGV2L251bGxgCiAgIGVsaWYgWyAteCAvYmluL2RvbWFpbm5hbWUgXTsgdGhlbgotICAgIGVjaG8gXCNkZWZpbmUgTElOVVhfQ09NUElMRV9ET01BSU4gXCJgZG9tYWlubmFtZSB8ICRVVFNfVFJVTkNBVEVgXCIKKyAgICBkb21haW49YGRvbWFpbm5hbWUgMj4gL2Rldi9udWxsYAorICBmaQorCisgIGlmIFsgLW4gIiRkb21haW4iIF07IHRoZW4KKyAgICBlY2hvIFwjZGVmaW5lIExJTlVYX0NPTVBJTEVfRE9NQUlOIFwiYGVjaG8gJGRvbWFpbiB8ICRVVFNfVFJVTkNBVEVgXCIKICAgZWxzZQogICAgIGVjaG8gXCNkZWZpbmUgTElOVVhfQ09NUElMRV9ET01BSU4KICAgZmkKZGlmZiAtLWdpdCBhL3NjcmlwdHMvcGFja2FnZS9NYWtlZmlsZSBiL3NjcmlwdHMvcGFja2FnZS9NYWtlZmlsZQppbmRleCBmYTRhMGExLi5mNjdjYzg4IDEwMDY0NAotLS0gYS9zY3JpcHRzL3BhY2thZ2UvTWFrZWZpbGUKKysrIGIvc2NyaXB0cy9wYWNrYWdlL01ha2VmaWxlCkBAIC0xOCw2ICsxOCw5IEBACiAjIGUpIGdlbmVyYXRlIHRoZSBycG0gZmlsZXMsIGJhc2VkIG9uIGtlcm5lbC5zcGVjCiAjIC0gVXNlIC8uIHRvIGF2b2lkIHRhciBwYWNraW5nIGp1c3QgdGhlIHN5bWxpbmsKIAorIyBOb3RlIHRoYXQgdGhlIHJwbS1wa2cgdGFyZ2V0IGNhbm5vdCBiZSB1c2VkIHdpdGggS0JVSUxEX09VVFBVVCwKKyMgYnV0IHRoZSBiaW5ycG0tcGtnIHRhcmdldCBjYW47IGZvciBzb21lIHJlYXNvbiBPPSBnZXRzIGlnbm9yZWQuCisKICMgRG8gd2UgaGF2ZSBycG1idWlsZCwgb3RoZXJ3aXNlIGZhbGwgYmFjayB0byB0aGUgb2xkZXIgcnBtCiBSUE0gOj0gJChzaGVsbCBpZiBbIC14ICIvdXNyL2Jpbi9ycG1idWlsZCIgXTsgdGhlbiBlY2hvIHJwbWJ1aWxkOyBcCiAJICAgICAgICAgICBlbHNlIGVjaG8gcnBtOyBmaSkKQEAgLTMzLDYgKzM2LDEyIEBACiAJJChDT05GSUdfU0hFTEwpICQoTUtTUEVDKSA+ICRACiAKIHJwbS1wa2cgcnBtOiAkKG9ianRyZWUpL2tlcm5lbC5zcGVjIEZPUkNFCisJQGlmIHRlc3QgLW4gIiQoS0JVSUxEX09VVFBVVCkiOyB0aGVuIFwKKwkJZWNobyAiQnVpbGRpbmcgc291cmNlICsgYmluYXJ5IFJQTSBpcyBub3QgcG9zc2libGUgb3V0c2lkZSB0aGUiOyBcCisJCWVjaG8gImtlcm5lbCBzb3VyY2UgdHJlZS4gRG9uJ3Qgc2V0IEtCVUlMRF9PVVRQVVQsIG9yIHVzZSB0aGUiOyBcCisJCWVjaG8gImJpbnJwbS1wa2cgdGFyZ2V0IGluc3RlYWQuIjsgXAorCQlmYWxzZTsgXAorCWZpCiAJJChNQUtFKSBjbGVhbgogCSQoUFJFVikgbG4gLXNmICQoc3JjdHJlZSkgJChLRVJORUxQQVRIKQogCSQoQ09ORklHX1NIRUxMKSAkKHNyY3RyZWUpL3NjcmlwdHMvc2V0bG9jYWx2ZXJzaW9uID4gJChvYmp0cmVlKS8uc2NtdmVyc2lvbgpAQCAtNjEsNyArNzAsNyBAQAogCXNldCAtZTsgXAogCW12IC1mICQob2JqdHJlZSkvLnRtcF92ZXJzaW9uICQob2JqdHJlZSkvLnZlcnNpb24KIAotCSQoUlBNKSAkKFJQTU9QVFMpIC0tZGVmaW5lICJfYnVpbGRkaXIgJChzcmN0cmVlKSIgLS10YXJnZXQgXAorCSQoUlBNKSAkKFJQTU9QVFMpIC0tZGVmaW5lICJfYnVpbGRkaXIgJChvYmp0cmVlKSIgLS10YXJnZXQgXAogCQkkKFVUU19NQUNISU5FKSAtYmIgJDwKIAogY2xlYW4tZmlsZXMgKz0gJChvYmp0cmVlKS9iaW5rZXJuZWwuc3BlYwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9wYWNrYWdlL21rc3BlYyBiL3NjcmlwdHMvcGFja2FnZS9ta3NwZWMKaW5kZXggM2Q5M2Y4Yy4uNDdiZGQyZiAxMDA3NTUKLS0tIGEvc2NyaXB0cy9wYWNrYWdlL21rc3BlYworKysgYi9zY3JpcHRzL3BhY2thZ2UvbWtzcGVjCkBAIC03MCw3ICs3MCw3IEBACiBlY2hvICdta2RpciAtcCAkUlBNX0JVSUxEX1JPT1QvbGliL2Zpcm13YXJlJwogZWNobyAiJWVuZGlmIgogCi1lY2hvICdJTlNUQUxMX01PRF9QQVRIPSRSUE1fQlVJTERfUk9PVCBtYWtlICV7X3NtcF9tZmxhZ3N9IG1vZHVsZXNfaW5zdGFsbCcKK2VjaG8gJ0lOU1RBTExfTU9EX1BBVEg9JFJQTV9CVUlMRF9ST09UIG1ha2UgJXtfc21wX21mbGFnc30gS0JVSUxEX1NSQz0gbW9kdWxlc19pbnN0YWxsJwogZWNobyAiJWlmYXJjaCBpYTY0IgogZWNobyAnY3AgJEtCVUlMRF9JTUFHRSAkUlBNX0JVSUxEX1JPT1QnIi9ib290L2VmaS92bWxpbnV6LSRLRVJORUxSRUxFQVNFIgogZWNobyAnbG4gLXMgJyJlZmkvdm1saW51ei0kS0VSTkVMUkVMRUFTRSIgJyRSUE1fQlVJTERfUk9PVCciL2Jvb3QvIgpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9pbWFfZnMuYyBiL3NlY3VyaXR5L2ludGVncml0eS9pbWEvaW1hX2ZzLmMKaW5kZXggOGU5Nzc3Yi4uMGM3MmM5YyAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9pbWFfZnMuYworKysgYi9zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL2ltYV9mcy5jCkBAIC00Myw3ICs0Myw3IEBACiAJcmV0dXJuIGltYV9zaG93X2h0YWJsZV92YWx1ZShidWYsIGNvdW50LCBwcG9zLCAmaW1hX2h0YWJsZS52aW9sYXRpb25zKTsKIH0KIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaW1hX2h0YWJsZV92aW9sYXRpb25zX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGltYV9odGFibGVfdmlvbGF0aW9uc19vcHMgPSB7CiAJLnJlYWQgPSBpbWFfc2hvd19odGFibGVfdmlvbGF0aW9ucwogfTsKIApAQCAtNTUsNyArNTUsNyBAQAogCiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGltYV9tZWFzdXJlbWVudHNfY291bnRfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaW1hX21lYXN1cmVtZW50c19jb3VudF9vcHMgPSB7CiAJLnJlYWQgPSBpbWFfc2hvd19tZWFzdXJlbWVudHNfY291bnQKIH07CiAKQEAgLTE1OCw3ICsxNTgsNyBAQAogCXJldHVybiBzZXFfb3BlbihmaWxlLCAmaW1hX21lYXN1cm1lbnRzX3NlcW9wcyk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGltYV9tZWFzdXJlbWVudHNfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaW1hX21lYXN1cmVtZW50c19vcHMgPSB7CiAJLm9wZW4gPSBpbWFfbWVhc3VyZW1lbnRzX29wZW4sCiAJLnJlYWQgPSBzZXFfcmVhZCwKIAkubGxzZWVrID0gc2VxX2xzZWVrLApAQCAtMjMzLDcgKzIzMyw3IEBACiAJcmV0dXJuIHNlcV9vcGVuKGZpbGUsICZpbWFfYXNjaWlfbWVhc3VyZW1lbnRzX3NlcW9wcyk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGltYV9hc2NpaV9tZWFzdXJlbWVudHNfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaW1hX2FzY2lpX21lYXN1cmVtZW50c19vcHMgPSB7CiAJLm9wZW4gPSBpbWFfYXNjaWlfbWVhc3VyZW1lbnRzX29wZW4sCiAJLnJlYWQgPSBzZXFfcmVhZCwKIAkubGxzZWVrID0gc2VxX2xzZWVrLApAQCAtMzEzLDcgKzMxMyw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGltYV9tZWFzdXJlX3BvbGljeV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBpbWFfbWVhc3VyZV9wb2xpY3lfb3BzID0gewogCS5vcGVuID0gaW1hX29wZW5fcG9saWN5LAogCS53cml0ZSA9IGltYV93cml0ZV9wb2xpY3ksCiAJLnJlbGVhc2UgPSBpbWFfcmVsZWFzZV9wb2xpY3kKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2tleXMva2V5Y3RsLmMgYi9zZWN1cml0eS9rZXlzL2tleWN0bC5jCmluZGV4IDJmYjI4ZWYuLjA2ZWM3MjIgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L2tleXMva2V5Y3RsLmMKKysrIGIvc2VjdXJpdHkva2V5cy9rZXljdGwuYwpAQCAtODczLDcgKzg3Myw3IEBACiAJLyogb3RoZXJ3aXNlIHNwZWNpZnkgdGhlIGRlc3RpbmF0aW9uIGtleXJpbmcgcmVjb3JkZWQgaW4gdGhlCiAJICogYXV0aG9yaXNhdGlvbiBrZXkgKGFueSBLRVlfU1BFQ18qX0tFWVJJTkcpICovCiAJaWYgKHJpbmdpZCA+PSBLRVlfU1BFQ19SRVFVRVNUT1JfS0VZUklORykgewotCQkqX2Rlc3Rfa2V5cmluZyA9IHJrYS0+ZGVzdF9rZXlyaW5nOworCQkqX2Rlc3Rfa2V5cmluZyA9IGtleV9nZXQocmthLT5kZXN0X2tleXJpbmcpOwogCQlyZXR1cm4gMDsKIAl9CiAKZGlmZiAtLWdpdCBhL3NvdW5kL2FvYS9jb2RlY3MvdGFzLmMgYi9zb3VuZC9hb2EvY29kZWNzL3Rhcy5jCmluZGV4IGYwZWJjOTcxLi4xZGQ2NmRkIDEwMDY0NAotLS0gYS9zb3VuZC9hb2EvY29kZWNzL3Rhcy5jCisrKyBiL3NvdW5kL2FvYS9jb2RlY3MvdGFzLmMKQEAgLTg5Nyw2ICs4OTcsMTUgQEAKIAljbGllbnQgPSBpMmNfbmV3X2RldmljZShhZGFwdGVyLCAmaW5mbyk7CiAJaWYgKCFjbGllbnQpCiAJCXJldHVybiAtRU5PREVWOworCS8qCisJICogV2Uga25vdyB0aGUgZHJpdmVyIGlzIGFscmVhZHkgbG9hZGVkLCBzbyB0aGUgZGV2aWNlIHNob3VsZCBiZQorCSAqIGFscmVhZHkgYm91bmQuIElmIG5vdCBpdCBtZWFucyBiaW5kaW5nIGZhaWxlZCwgYW5kIHRoZW4gdGhlcmUKKwkgKiBpcyBubyBwb2ludCBpbiBrZWVwaW5nIHRoZSBkZXZpY2UgaW5zdGFudGlhdGVkLgorCSAqLworCWlmICghY2xpZW50LT5kcml2ZXIpIHsKKwkJaTJjX3VucmVnaXN0ZXJfZGV2aWNlKGNsaWVudCk7CisJCXJldHVybiAtRU5PREVWOworCX0KIAogCS8qCiAJICogTGV0IGkyYy1jb3JlIGRlbGV0ZSB0aGF0IGRldmljZSBvbiBkcml2ZXIgcmVtb3ZhbC4KZGlmZiAtLWdpdCBhL3NvdW5kL2FybS9hYWNpLmMgYi9zb3VuZC9hcm0vYWFjaS5jCmluZGV4IGRjNzgyNzIuLjFmMGY4MjEgMTAwNjQ0Ci0tLSBhL3NvdW5kL2FybS9hYWNpLmMKKysrIGIvc291bmQvYXJtL2FhY2kuYwpAQCAtOTM3LDYgKzkzNyw3IEBACiAJc3RydWN0IHNuZF9hYzk3ICphYzk3OwogCWludCByZXQ7CiAKKwl3cml0ZWwoMCwgYWFjaS0+YmFzZSArIEFDOTdfUE9XRVJET1dOKTsKIAkvKgogCSAqIEFzc2VydCBBQUNJUkVTRVQgZm9yIDJ1cwogCSAqLwpkaWZmIC0tZ2l0IGEvc291bmQvYXJtL3B4YTJ4eC1hYzk3LmMgYi9zb3VuZC9hcm0vcHhhMnh4LWFjOTcuYwppbmRleCA0ZTM0ZDE5Li5iNGI0OGFmIDEwMDY0NAotLS0gYS9zb3VuZC9hcm0vcHhhMnh4LWFjOTcuYworKysgYi9zb3VuZC9hcm0vcHhhMnh4LWFjOTcuYwpAQCAtMTM3LDkgKzEzNyw5IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgcHhhMnh4X2FjOTdfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3N0YXRpYyBpbnQgcHhhMnh4X2FjOTdfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHNuZF9jYXJkICpjYXJkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAlpbnQgcmV0ID0gMDsKIAogCWlmIChjYXJkKQpAQCAtMTQ4LDkgKzE0OCw5IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBweGEyeHhfYWM5N19yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQorc3RhdGljIGludCBweGEyeHhfYWM5N19yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQogewotCXN0cnVjdCBzbmRfY2FyZCAqY2FyZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHNuZF9jYXJkICpjYXJkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAJaW50IHJldCA9IDA7CiAKIAlpZiAoY2FyZCkKQEAgLTE1OSw5ICsxNTksMTAgQEAKIAlyZXR1cm4gcmV0OwogfQogCi0jZWxzZQotI2RlZmluZSBweGEyeHhfYWM5N19zdXNwZW5kCU5VTEwKLSNkZWZpbmUgcHhhMnh4X2FjOTdfcmVzdW1lCU5VTEwKK3N0YXRpYyBzdHJ1Y3QgZGV2X3BtX29wcyBweGEyeHhfYWM5N19wbV9vcHMgPSB7CisJLnN1c3BlbmQJPSBweGEyeHhfYWM5N19zdXNwZW5kLAorCS5yZXN1bWUJCT0gcHhhMnh4X2FjOTdfcmVzdW1lLAorfTsKICNlbmRpZgogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBweGEyeHhfYWM5N19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCkBAIC0yNDEsMTEgKzI0MiwxMiBAQAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgcHhhMnh4X2FjOTdfZHJpdmVyID0gewogCS5wcm9iZQkJPSBweGEyeHhfYWM5N19wcm9iZSwKIAkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHB4YTJ4eF9hYzk3X3JlbW92ZSksCi0JLnN1c3BlbmQJPSBweGEyeHhfYWM5N19zdXNwZW5kLAotCS5yZXN1bWUJCT0gcHhhMnh4X2FjOTdfcmVzdW1lLAogCS5kcml2ZXIJCT0gewogCQkubmFtZQk9ICJweGEyeHgtYWM5NyIsCiAJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorI2lmZGVmIENPTkZJR19QTQorCQkucG0JPSAmcHhhMnh4X2FjOTdfcG1fb3BzLAorI2VuZGlmCiAJfSwKIH07CiAKZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvcGNtLmMgYi9zb3VuZC9jb3JlL3BjbS5jCmluZGV4IDBjMTQ0MDEuLmM2OWM2MGIgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvcGNtLmMKKysrIGIvc291bmQvY29yZS9wY20uYwpAQCAtOTUzLDExICs5NTMsMTIgQEAKIAlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbTsKIAlzdHJ1Y3Qgc25kX3BjbV9ub3RpZnkgKm5vdGlmeTsKIAljaGFyIHN0clsxNl07Ci0Jc3RydWN0IHNuZF9wY20gKnBjbSA9IGRldmljZS0+ZGV2aWNlX2RhdGE7CisJc3RydWN0IHNuZF9wY20gKnBjbTsKIAlzdHJ1Y3QgZGV2aWNlICpkZXY7CiAKLQlpZiAoc25kX0JVR19PTighcGNtIHx8ICFkZXZpY2UpKQorCWlmIChzbmRfQlVHX09OKCFkZXZpY2UgfHwgIWRldmljZS0+ZGV2aWNlX2RhdGEpKQogCQlyZXR1cm4gLUVOWElPOworCXBjbSA9IGRldmljZS0+ZGV2aWNlX2RhdGE7CiAJbXV0ZXhfbG9jaygmcmVnaXN0ZXJfbXV0ZXgpOwogCWVyciA9IHNuZF9wY21fYWRkKHBjbSk7CiAJaWYgKGVycikgewpkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9wY21fbmF0aXZlLmMgYi9zb3VuZC9jb3JlL3BjbV9uYXRpdmUuYwppbmRleCA1NjFkNmQ5Li5hYjczZWRmIDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL3BjbV9uYXRpdmUuYworKysgYi9zb3VuZC9jb3JlL3BjbV9uYXRpdmUuYwpAQCAtMjk4NSw3ICsyOTg1LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBzbmRfcGNtX3ZtX29wc19zdGF0dXMgPQorc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBzbmRfcGNtX3ZtX29wc19zdGF0dXMgPQogewogCS5mYXVsdCA9CXNuZF9wY21fbW1hcF9zdGF0dXNfZmF1bHQsCiB9OwpAQCAtMzAyNCw3ICszMDI0LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBzbmRfcGNtX3ZtX29wc19jb250cm9sID0KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3Qgc25kX3BjbV92bV9vcHNfY29udHJvbCA9CiB7CiAJLmZhdWx0ID0Jc25kX3BjbV9tbWFwX2NvbnRyb2xfZmF1bHQsCiB9OwpAQCAtMzA5NCw3ICszMDk0LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBzbmRfcGNtX3ZtX29wc19kYXRhID0KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3Qgc25kX3BjbV92bV9vcHNfZGF0YSA9CiB7CiAJLm9wZW4gPQkJc25kX3BjbV9tbWFwX2RhdGFfb3BlbiwKIAkuY2xvc2UgPQlzbmRfcGNtX21tYXBfZGF0YV9jbG9zZSwKQEAgLTMxMTgsNyArMzExOCw3IEBACiAgKiBtbWFwIHRoZSBETUEgYnVmZmVyIG9uIEkvTyBtZW1vcnkgYXJlYQogICovCiAjaWYgU05EUlZfUENNX0lORk9fTU1BUF9JT01FTQotc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBzbmRfcGNtX3ZtX29wc19kYXRhX21taW8gPQorc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBzbmRfcGNtX3ZtX29wc19kYXRhX21taW8gPQogewogCS5vcGVuID0JCXNuZF9wY21fbW1hcF9kYXRhX29wZW4sCiAJLmNsb3NlID0Jc25kX3BjbV9tbWFwX2RhdGFfY2xvc2UsCmRpZmYgLS1naXQgYS9zb3VuZC9kcml2ZXJzL2R1bW15LmMgYi9zb3VuZC9kcml2ZXJzL2R1bW15LmMKaW5kZXggNmJhMDY2Yy4uMjUyZTA0YyAxMDA2NDQKLS0tIGEvc291bmQvZHJpdmVycy9kdW1teS5jCisrKyBiL3NvdW5kL2RyaXZlcnMvZHVtbXkuYwpAQCAtMTY1LDcgKzE2NSw3IEBACiBtb2R1bGVfcGFyYW1fYXJyYXkocGNtX2RldnMsIGludCwgTlVMTCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKHBjbV9kZXZzLCAiUENNIGRldmljZXMgIyAoMC00KSBmb3IgZHVtbXkgZHJpdmVyLiIpOwogbW9kdWxlX3BhcmFtX2FycmF5KHBjbV9zdWJzdHJlYW1zLCBpbnQsIE5VTEwsIDA0NDQpOwotTU9EVUxFX1BBUk1fREVTQyhwY21fc3Vic3RyZWFtcywgIlBDTSBzdWJzdHJlYW1zICMgKDEtMTYpIGZvciBkdW1teSBkcml2ZXIuIik7CitNT0RVTEVfUEFSTV9ERVNDKHBjbV9zdWJzdHJlYW1zLCAiUENNIHN1YnN0cmVhbXMgIyAoMS0xMjgpIGZvciBkdW1teSBkcml2ZXIuIik7CiAvL21vZHVsZV9wYXJhbV9hcnJheShtaWRpX2RldnMsIGludCwgTlVMTCwgMDQ0NCk7CiAvL01PRFVMRV9QQVJNX0RFU0MobWlkaV9kZXZzLCAiTUlESSBkZXZpY2VzICMgKDAtMikgZm9yIGR1bW15IGRyaXZlci4iKTsKIG1vZHVsZV9wYXJhbShmYWtlX2J1ZmZlciwgYm9vbCwgMDQ0NCk7CkBAIC04MDgsOCArODA4LDYgQEAKIAl1bnNpZ25lZCBpbnQgaWR4OwogCWludCBlcnI7CiAKLQlpZiAoc25kX0JVR19PTighZHVtbXkpKQotCQlyZXR1cm4gLUVJTlZBTDsKIAlzcGluX2xvY2tfaW5pdCgmZHVtbXktPm1peGVyX2xvY2spOwogCXN0cmNweShjYXJkLT5taXhlcm5hbWUsICJEdW1teSBNaXhlciIpOwogCmRpZmYgLS1naXQgYS9zb3VuZC9kcml2ZXJzL29wbDMvb3BsM19taWRpLmMgYi9zb3VuZC9kcml2ZXJzL29wbDMvb3BsM19taWRpLmMKaW5kZXggNmU3ZDA5YS4uN2Q3MjJhMCAxMDA2NDQKLS0tIGEvc291bmQvZHJpdmVycy9vcGwzL29wbDNfbWlkaS5jCisrKyBiL3NvdW5kL2RyaXZlcnMvb3BsMy9vcGwzX21pZGkuYwpAQCAtMjksNiArMjksOCBAQAogCiBleHRlcm4gaW50IHVzZV9pbnRlcm5hbF9kcnVtczsKIAorc3RhdGljIHZvaWQgc25kX29wbDNfbm90ZV9vZmZfdW5zYWZlKHZvaWQgKnAsIGludCBub3RlLCBpbnQgdmVsLAorCQkJCSAgICAgc3RydWN0IHNuZF9taWRpX2NoYW5uZWwgKmNoYW4pOwogLyoKICAqIFRoZSBuZXh0IHRhYmxlIGxvb2tzIG1hZ2ljYWwsIGJ1dCBpdCBjZXJ0YWlubHkgaXMgbm90LiBJdHMgdmFsdWVzIGhhdmUKICAqIGJlZW4gY2FsY3VsYXRlZCBhcyB0YWJsZVtpXT04KmxvZyhpLzY0KS9sb2coMikgd2l0aCBhbiBvYnZpb3VzIGV4Y2VwdGlvbgpAQCAtMjQyLDE2ICsyNDQsMjAgQEAKIAlpbnQgYWdhaW4gPSAwOwogCWludCBpOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJm9wbDMtPnN5c190aW1lcl9sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJm9wbDMtPnZvaWNlX2xvY2ssIGZsYWdzKTsKIAlmb3IgKGkgPSAwOyBpIDwgb3BsMy0+bWF4X3ZvaWNlczsgaSsrKSB7CiAJCXN0cnVjdCBzbmRfb3BsM192b2ljZSAqdnAgPSAmb3BsMy0+dm9pY2VzW2ldOwogCQlpZiAodnAtPnN0YXRlID4gMCAmJiB2cC0+bm90ZV9vZmZfY2hlY2spIHsKIAkJCWlmICh2cC0+bm90ZV9vZmYgPT0gamlmZmllcykKLQkJCQlzbmRfb3BsM19ub3RlX29mZihvcGwzLCB2cC0+bm90ZSwgMCwgdnAtPmNoYW4pOworCQkJCXNuZF9vcGwzX25vdGVfb2ZmX3Vuc2FmZShvcGwzLCB2cC0+bm90ZSwgMCwKKwkJCQkJCQkgdnAtPmNoYW4pOwogCQkJZWxzZQogCQkJCWFnYWluKys7CiAJCX0KIAl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmb3BsMy0+dm9pY2VfbG9jaywgZmxhZ3MpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJm9wbDMtPnN5c190aW1lcl9sb2NrLCBmbGFncyk7CiAJaWYgKGFnYWluKSB7CiAJCW9wbDMtPnRsaXN0LmV4cGlyZXMgPSBqaWZmaWVzICsgMTsJLyogaW52b2tlIGFnYWluICovCiAJCWFkZF90aW1lcigmb3BsMy0+dGxpc3QpOwpAQCAtNjU4LDE1ICs2NjQsMTQgQEAKIC8qCiAgKiBSZWxlYXNlIGEgbm90ZSBpbiByZXNwb25zZSB0byBhIG1pZGkgbm90ZSBvZmYuCiAgKi8KLXZvaWQgc25kX29wbDNfbm90ZV9vZmYodm9pZCAqcCwgaW50IG5vdGUsIGludCB2ZWwsIHN0cnVjdCBzbmRfbWlkaV9jaGFubmVsICpjaGFuKQorc3RhdGljIHZvaWQgc25kX29wbDNfbm90ZV9vZmZfdW5zYWZlKHZvaWQgKnAsIGludCBub3RlLCBpbnQgdmVsLAorCQkJCSAgICAgc3RydWN0IHNuZF9taWRpX2NoYW5uZWwgKmNoYW4pCiB7CiAgIAlzdHJ1Y3Qgc25kX29wbDMgKm9wbDM7CiAKIAlpbnQgdm9pY2U7CiAJc3RydWN0IHNuZF9vcGwzX3ZvaWNlICp2cDsKIAotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KIAlvcGwzID0gcDsKIAogI2lmZGVmIERFQlVHX01JREkKQEAgLTY3NCwxMiArNjc5LDkgQEAKIAkJICAgY2hhbi0+bnVtYmVyLCBjaGFuLT5taWRpX3Byb2dyYW0sIG5vdGUpOwogI2VuZGlmCiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmb3BsMy0+dm9pY2VfbG9jaywgZmxhZ3MpOwotCiAJaWYgKG9wbDMtPnN5bnRoX21vZGUgPT0gU05EUlZfT1BMM19NT0RFX1NFUSkgewogCQlpZiAoY2hhbi0+ZHJ1bV9jaGFubmVsICYmIHVzZV9pbnRlcm5hbF9kcnVtcykgewogCQkJc25kX29wbDNfZHJ1bV9zd2l0Y2gob3BsMywgbm90ZSwgdmVsLCAwLCBjaGFuKTsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm9wbDMtPnZvaWNlX2xvY2ssIGZsYWdzKTsKIAkJCXJldHVybjsKIAkJfQogCQkvKiB0aGlzIGxvb3Agd2lsbCBob3BlZnVsbHkga2lsbCBhbGwgZXh0cmEgdm9pY2VzLCBiZWNhdXNlCkBAIC02OTcsNiArNjk5LDE2IEBACiAJCQlzbmRfb3BsM19raWxsX3ZvaWNlKG9wbDMsIHZvaWNlKTsKIAkJfQogCX0KK30KKwordm9pZCBzbmRfb3BsM19ub3RlX29mZih2b2lkICpwLCBpbnQgbm90ZSwgaW50IHZlbCwKKwkJICAgICAgIHN0cnVjdCBzbmRfbWlkaV9jaGFubmVsICpjaGFuKQoreworCXN0cnVjdCBzbmRfb3BsMyAqb3BsMyA9IHA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZvcGwzLT52b2ljZV9sb2NrLCBmbGFncyk7CisJc25kX29wbDNfbm90ZV9vZmZfdW5zYWZlKHAsIG5vdGUsIHZlbCwgY2hhbik7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmb3BsMy0+dm9pY2VfbG9jaywgZmxhZ3MpOwogfQogCmRpZmYgLS1naXQgYS9zb3VuZC9kcml2ZXJzL3Bjc3AvcGNzcF9saWIuYyBiL3NvdW5kL2RyaXZlcnMvcGNzcC9wY3NwX2xpYi5jCmluZGV4IDg0Y2MyNjUuLmUxMTQ1YWMgMTAwNjQ0Ci0tLSBhL3NvdW5kL2RyaXZlcnMvcGNzcC9wY3NwX2xpYi5jCisrKyBiL3NvdW5kL2RyaXZlcnMvcGNzcC9wY3NwX2xpYi5jCkBAIC0zOSwyNSArMzksMjAgQEAKIC8qIHdyaXRlIHRoZSBwb3J0IGFuZCByZXR1cm5zIHRoZSBuZXh0IGV4cGlyZSB0aW1lIGluIG5zOwogICogY2FsbGVkIGF0IHRoZSB0cmlnZ2VyLXN0YXJ0IGFuZCBpbiBocnRpbWVyIGNhbGxiYWNrCiAgKi8KLXN0YXRpYyB1bnNpZ25lZCBsb25nIHBjc3BfdGltZXJfdXBkYXRlKHN0cnVjdCBocnRpbWVyICpoYW5kbGUpCitzdGF0aWMgdTY0IHBjc3BfdGltZXJfdXBkYXRlKHN0cnVjdCBzbmRfcGNzcCAqY2hpcCkKIHsKIAl1bnNpZ25lZCBjaGFyIHRpbWVyX2NudCwgdmFsOwogCXU2NCBuczsKIAlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbTsKIAlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lOwotCXN0cnVjdCBzbmRfcGNzcCAqY2hpcCA9IGNvbnRhaW5lcl9vZihoYW5kbGUsIHN0cnVjdCBzbmRfcGNzcCwgdGltZXIpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlpZiAoY2hpcC0+dGhhbGYpIHsKIAkJb3V0YihjaGlwLT52YWw2MSwgMHg2MSk7CiAJCWNoaXAtPnRoYWxmID0gMDsKLQkJaWYgKCFhdG9taWNfcmVhZCgmY2hpcC0+dGltZXJfYWN0aXZlKSkKLQkJCXJldHVybiAwOwogCQlyZXR1cm4gY2hpcC0+bnNfcmVtOwogCX0KIAotCWlmICghYXRvbWljX3JlYWQoJmNoaXAtPnRpbWVyX2FjdGl2ZSkpCi0JCXJldHVybiAwOwogCXN1YnN0cmVhbSA9IGNoaXAtPnBsYXliYWNrX3N1YnN0cmVhbTsKIAlpZiAoIXN1YnN0cmVhbSkKIAkJcmV0dXJuIDA7CkBAIC04OCwyNCArODMsMTcgQEAKIAlyZXR1cm4gbnM7CiB9CiAKLWVudW0gaHJ0aW1lcl9yZXN0YXJ0IHBjc3BfZG9fdGltZXIoc3RydWN0IGhydGltZXIgKmhhbmRsZSkKK3N0YXRpYyB2b2lkIHBjc3BfcG9pbnRlcl91cGRhdGUoc3RydWN0IHNuZF9wY3NwICpjaGlwKQogewotCXN0cnVjdCBzbmRfcGNzcCAqY2hpcCA9IGNvbnRhaW5lcl9vZihoYW5kbGUsIHN0cnVjdCBzbmRfcGNzcCwgdGltZXIpOwogCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtOwotCWludCBwZXJpb2RzX2VsYXBzZWQsIHBvaW50ZXJfdXBkYXRlOwogCXNpemVfdCBwZXJpb2RfYnl0ZXMsIGJ1ZmZlcl9ieXRlczsKLQl1bnNpZ25lZCBsb25nIG5zOworCWludCBwZXJpb2RzX2VsYXBzZWQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXBvaW50ZXJfdXBkYXRlID0gIWNoaXAtPnRoYWxmOwotCW5zID0gcGNzcF90aW1lcl91cGRhdGUoaGFuZGxlKTsKLQlpZiAoIW5zKQotCQlyZXR1cm4gSFJUSU1FUl9OT1JFU1RBUlQ7Ci0KIAkvKiB1cGRhdGUgdGhlIHBsYXliYWNrIHBvc2l0aW9uICovCiAJc3Vic3RyZWFtID0gY2hpcC0+cGxheWJhY2tfc3Vic3RyZWFtOwogCWlmICghc3Vic3RyZWFtKQotCQlyZXR1cm4gSFJUSU1FUl9OT1JFU1RBUlQ7CisJCXJldHVybjsKIAogCXBlcmlvZF9ieXRlcyA9IHNuZF9wY21fbGliX3BlcmlvZF9ieXRlcyhzdWJzdHJlYW0pOwogCWJ1ZmZlcl9ieXRlcyA9IHNuZF9wY21fbGliX2J1ZmZlcl9ieXRlcyhzdWJzdHJlYW0pOwpAQCAtMTM0LDYgKzEyMiwyNiBAQAogCiAJaWYgKHBlcmlvZHNfZWxhcHNlZCkKIAkJdGFza2xldF9zY2hlZHVsZSgmcGNzcF9wY21fdGFza2xldCk7Cit9CisKK2VudW0gaHJ0aW1lcl9yZXN0YXJ0IHBjc3BfZG9fdGltZXIoc3RydWN0IGhydGltZXIgKmhhbmRsZSkKK3sKKwlzdHJ1Y3Qgc25kX3Bjc3AgKmNoaXAgPSBjb250YWluZXJfb2YoaGFuZGxlLCBzdHJ1Y3Qgc25kX3Bjc3AsIHRpbWVyKTsKKwlpbnQgcG9pbnRlcl91cGRhdGU7CisJdTY0IG5zOworCisJaWYgKCFhdG9taWNfcmVhZCgmY2hpcC0+dGltZXJfYWN0aXZlKSB8fCAhY2hpcC0+cGxheWJhY2tfc3Vic3RyZWFtKQorCQlyZXR1cm4gSFJUSU1FUl9OT1JFU1RBUlQ7CisKKwlwb2ludGVyX3VwZGF0ZSA9ICFjaGlwLT50aGFsZjsKKwlucyA9IHBjc3BfdGltZXJfdXBkYXRlKGNoaXApOworCWlmICghbnMpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiUENTUDogdW5leHBlY3RlZCBzdG9wXG4iKTsKKwkJcmV0dXJuIEhSVElNRVJfTk9SRVNUQVJUOworCX0KKworCWlmIChwb2ludGVyX3VwZGF0ZSkKKwkJcGNzcF9wb2ludGVyX3VwZGF0ZShjaGlwKTsKIAogCWhydGltZXJfZm9yd2FyZChoYW5kbGUsIGhydGltZXJfZ2V0X2V4cGlyZXMoaGFuZGxlKSwgbnNfdG9fa3RpbWUobnMpKTsKIApAQCAtMTQyLDggKzE1MCw2IEBACiAKIHN0YXRpYyBpbnQgcGNzcF9zdGFydF9wbGF5aW5nKHN0cnVjdCBzbmRfcGNzcCAqY2hpcCkKIHsKLQl1bnNpZ25lZCBsb25nIG5zOwotCiAjaWYgUENTUF9ERUJVRwogCXByaW50ayhLRVJOX0lORk8gIlBDU1A6IHN0YXJ0X3BsYXlpbmcgY2FsbGVkXG4iKTsKICNlbmRpZgpAQCAtMTU5LDExICsxNjUsNyBAQAogCWF0b21pY19zZXQoJmNoaXAtPnRpbWVyX2FjdGl2ZSwgMSk7CiAJY2hpcC0+dGhhbGYgPSAwOwogCi0JbnMgPSBwY3NwX3RpbWVyX3VwZGF0ZSgmcGNzcF9jaGlwLnRpbWVyKTsKLQlpZiAoIW5zKQotCQlyZXR1cm4gLUVJTzsKLQotCWhydGltZXJfc3RhcnQoJnBjc3BfY2hpcC50aW1lciwga3RpbWVfc2V0KDAsIG5zKSwgSFJUSU1FUl9NT0RFX1JFTCk7CisJaHJ0aW1lcl9zdGFydCgmcGNzcF9jaGlwLnRpbWVyLCBrdGltZV9zZXQoMCwgMCksIEhSVElNRVJfTU9ERV9SRUwpOwogCXJldHVybiAwOwogfQogCkBAIC0yMzIsMjEgKzIzNCwyMiBAQAogc3RhdGljIGludCBzbmRfcGNzcF9wbGF5YmFja19wcmVwYXJlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQogewogCXN0cnVjdCBzbmRfcGNzcCAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKLSNpZiBQQ1NQX0RFQlVHCi0JcHJpbnRrKEtFUk5fSU5GTyAiUENTUDogcHJlcGFyZSBjYWxsZWQsICIKLQkJCSJzaXplPSV6aSBwc2l6ZT0lemkgZj0lemkgZjE9JWlcbiIsCi0JCQlzbmRfcGNtX2xpYl9idWZmZXJfYnl0ZXMoc3Vic3RyZWFtKSwKLQkJCXNuZF9wY21fbGliX3BlcmlvZF9ieXRlcyhzdWJzdHJlYW0pLAotCQkJc25kX3BjbV9saWJfYnVmZmVyX2J5dGVzKHN1YnN0cmVhbSkgLwotCQkJc25kX3BjbV9saWJfcGVyaW9kX2J5dGVzKHN1YnN0cmVhbSksCi0JCQlzdWJzdHJlYW0tPnJ1bnRpbWUtPnBlcmlvZHMpOwotI2VuZGlmCiAJcGNzcF9zeW5jX3N0b3AoY2hpcCk7CiAJY2hpcC0+cGxheWJhY2tfcHRyID0gMDsKIAljaGlwLT5wZXJpb2RfcHRyID0gMDsKIAljaGlwLT5mbXRfc2l6ZSA9CiAJCXNuZF9wY21fZm9ybWF0X3BoeXNpY2FsX3dpZHRoKHN1YnN0cmVhbS0+cnVudGltZS0+Zm9ybWF0KSA+PiAzOwogCWNoaXAtPmlzX3NpZ25lZCA9IHNuZF9wY21fZm9ybWF0X3NpZ25lZChzdWJzdHJlYW0tPnJ1bnRpbWUtPmZvcm1hdCk7CisjaWYgUENTUF9ERUJVRworCXByaW50ayhLRVJOX0lORk8gIlBDU1A6IHByZXBhcmUgY2FsbGVkLCAiCisJCQkic2l6ZT0lemkgcHNpemU9JXppIGY9JXppIGYxPSVpIGZzaXplPSVpXG4iLAorCQkJc25kX3BjbV9saWJfYnVmZmVyX2J5dGVzKHN1YnN0cmVhbSksCisJCQlzbmRfcGNtX2xpYl9wZXJpb2RfYnl0ZXMoc3Vic3RyZWFtKSwKKwkJCXNuZF9wY21fbGliX2J1ZmZlcl9ieXRlcyhzdWJzdHJlYW0pIC8KKwkJCXNuZF9wY21fbGliX3BlcmlvZF9ieXRlcyhzdWJzdHJlYW0pLAorCQkJc3Vic3RyZWFtLT5ydW50aW1lLT5wZXJpb2RzLAorCQkJY2hpcC0+Zm10X3NpemUpOworI2VuZGlmCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL3NvdW5kL2RyaXZlcnMvcGNzcC9wY3NwX21peGVyLmMgYi9zb3VuZC9kcml2ZXJzL3Bjc3AvcGNzcF9taXhlci5jCmluZGV4IDE5OWIwMzMuLjkwM2JjODQgMTAwNjQ0Ci0tLSBhL3NvdW5kL2RyaXZlcnMvcGNzcC9wY3NwX21peGVyLmMKKysrIGIvc291bmQvZHJpdmVycy9wY3NwL3Bjc3BfbWl4ZXIuYwpAQCAtNzIsNyArNzIsNyBAQAogCWlmICh0cmVibGUgIT0gY2hpcC0+dHJlYmxlKSB7CiAJCWNoaXAtPnRyZWJsZSA9IHRyZWJsZTsKICNpZiBQQ1NQX0RFQlVHCi0JCXByaW50ayhLRVJOX0lORk8gIlBDU1A6IHJhdGUgc2V0IHRvICVpXG4iLCBQQ1NQX1JBVEUoKSk7CisJCXByaW50ayhLRVJOX0lORk8gIlBDU1A6IHJhdGUgc2V0IHRvICVsaVxuIiwgUENTUF9SQVRFKCkpOwogI2VuZGlmCiAJCWNoYW5nZWQgPSAxOwogCX0KZGlmZiAtLWdpdCBhL3NvdW5kL21pcHMvaGFsMi5jIGIvc291bmQvbWlwcy9oYWwyLmMKaW5kZXggYzUyNjkxYy4uOWE4OGNkZiAxMDA2NDQKLS0tIGEvc291bmQvbWlwcy9oYWwyLmMKKysrIGIvc291bmQvbWlwcy9oYWwyLmMKQEAgLTkxNSw3ICs5MTUsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IF9fZXhpdCBoYWwyX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorc3RhdGljIGludCBfX2RldmV4aXQgaGFsMl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIApkaWZmIC0tZ2l0IGEvc291bmQvbWlwcy9zZ2lvMmF1ZGlvLmMgYi9zb3VuZC9taXBzL3NnaW8yYXVkaW8uYwppbmRleCBlNDk3NTI1Li44NjkxZjRjIDEwMDY0NAotLS0gYS9zb3VuZC9taXBzL3NnaW8yYXVkaW8uYworKysgYi9zb3VuZC9taXBzL3NnaW8yYXVkaW8uYwpAQCAtOTczLDcgKzk3Myw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgX19leGl0IHNuZF9zZ2lvMmF1ZGlvX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorc3RhdGljIGludCBfX2RldmV4aXQgc25kX3NnaW8yYXVkaW9fcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHNuZF9jYXJkICpjYXJkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3BhcmlzYy9oYXJtb255LmMgYi9zb3VuZC9wYXJpc2MvaGFybW9ueS5jCmluZGV4IGU5MjQ0OTIuLmY0N2Y5ZTIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BhcmlzYy9oYXJtb255LmMKKysrIGIvc291bmQvcGFyaXNjL2hhcm1vbnkuYwpAQCAtNjI0LDYgKzYyNCw5IEBACiAJc3RydWN0IHNuZF9wY20gKnBjbTsKIAlpbnQgZXJyOwogCisJaWYgKHNuZF9CVUdfT04oIWgpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCWhhcm1vbnlfZGlzYWJsZV9pbnRlcnJ1cHRzKGgpOwogCQogICAgCWVyciA9IHNuZF9wY21fbmV3KGgtPmNhcmQsICJoYXJtb255IiwgMCwgMSwgMSwgJnBjbSk7CkBAIC04NjUsMTEgKzg2OCwxMiBAQAogc3RhdGljIGludCBfX2RldmluaXQKIHNuZF9oYXJtb255X21peGVyX2luaXQoc3RydWN0IHNuZF9oYXJtb255ICpoKQogewotCXN0cnVjdCBzbmRfY2FyZCAqY2FyZCA9IGgtPmNhcmQ7CisJc3RydWN0IHNuZF9jYXJkICpjYXJkOwogCWludCBpZHgsIGVycjsKIAogCWlmIChzbmRfQlVHX09OKCFoKSkKIAkJcmV0dXJuIC1FSU5WQUw7CisJY2FyZCA9IGgtPmNhcmQ7CiAJc3RyY3B5KGNhcmQtPm1peGVybmFtZSwgIkhhcm1vbnkgR2FpbiBjb250cm9sIGludGVyZmFjZSIpOwogCiAJZm9yIChpZHggPSAwOyBpZHggPCBIQVJNT05ZX0NPTlRST0xTOyBpZHgrKykgewpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL0tjb25maWcgYi9zb3VuZC9wY2kvS2NvbmZpZwppbmRleCBmYjVlZTNjLi43NWM2MDJiIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvS2NvbmZpZworKysgYi9zb3VuZC9wY2kvS2NvbmZpZwpAQCAtMjU5LDcgKzI1OSw2IEBACiAKIGNvbmZpZyBTTkRfQ1M1NTM1QVVESU8KIAl0cmlzdGF0ZSAiQ1M1NTM1L0NTNTUzNiBBdWRpbyIKLQlkZXBlbmRzIG9uIFg4NiAmJiAhWDg2XzY0CiAJc2VsZWN0IFNORF9QQ00KIAlzZWxlY3QgU05EX0FDOTdfQ09ERUMKIAloZWxwCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYWxpNTQ1MS9hbGk1NDUxLmMgYi9zb3VuZC9wY2kvYWxpNTQ1MS9hbGk1NDUxLmMKaW5kZXggYjQ1OGQyMC4uYWFmNGRhNiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2FsaTU0NTEvYWxpNTQ1MS5jCisrKyBiL3NvdW5kL3BjaS9hbGk1NDUxL2FsaTU0NTEuYwpAQCAtOTczLDcgKzk3Myw3IEBACiAJdm9pZCAqcHJpdmF0ZV9kYXRhOwogCiAJc25kX2FsaV9wcmludGsoImZyZWVfdm9pY2U6IGNoYW5uZWw9JWRcbiIscHZvaWNlLT5udW1iZXIpOwotCWlmIChwdm9pY2UgPT0gTlVMTCB8fCAhcHZvaWNlLT51c2UpCisJaWYgKCFwdm9pY2UtPnVzZSkKIAkJcmV0dXJuOwogCXNuZF9hbGlfY2xlYXJfdm9pY2VzKGNvZGVjLCBwdm9pY2UtPm51bWJlciwgcHZvaWNlLT5udW1iZXIpOwogCXNwaW5fbG9ja19pcnEoJmNvZGVjLT52b2ljZV9hbGxvYyk7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYnQ4N3guYyBiL3NvdW5kL3BjaS9idDg3eC5jCmluZGV4IDI0NTg1YzYuLjRlMmI5MjUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9idDg3eC5jCisrKyBiL3NvdW5kL3BjaS9idDg3eC5jCkBAIC04MDgsNiArODA4LDggQEAKIAlCVF9ERVZJQ0UoUENJX0RFVklDRV9JRF9CUk9PS1RSRUVfODc4LCAweDEwMDIsIDB4MDAwMSwgR0VORVJJQyksCiAJLyogTGVhZHRlayBXaW5mYXN0IHR2IDIwMDB4cCBkZWx1eCAqLwogCUJUX0RFVklDRShQQ0lfREVWSUNFX0lEX0JST09LVFJFRV84NzgsIDB4MTA3ZCwgMHg2NjA2LCBHRU5FUklDKSwKKwkvKiBQaW5uYWNsZSBQQ1RWICovCisJQlRfREVWSUNFKFBDSV9ERVZJQ0VfSURfQlJPT0tUUkVFXzg3OCwgMHgxMWJkLCAweDAwMTIsIEdFTkVSSUMpLAogCS8qIFZvb2RvbyBUViAyMDAgKi8KIAlCVF9ERVZJQ0UoUENJX0RFVklDRV9JRF9CUk9PS1RSRUVfODc4LCAweDEyMWEsIDB4MzAwMCwgR0VORVJJQyksCiAJLyogQXNrZXkgQ29tcHV0ZXIgQ29ycC4gTWFnaWNUVmlldyc5OSAqLwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2N0eGZpL2N0YXRjLmMgYi9zb3VuZC9wY2kvY3R4ZmkvY3RhdGMuYwppbmRleCBiMWIzYTY0Li43NTQ1NDY0IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvY3R4ZmkvY3RhdGMuYworKysgYi9zb3VuZC9wY2kvY3R4ZmkvY3RhdGMuYwpAQCAtMTAzNyw3ICsxMDM3LDcgQEAKIAogc3RhdGljIGludCBhdGNfbGluZV9zdXJyb3VuZF91bm11dGUoc3RydWN0IGN0X2F0YyAqYXRjLCB1bnNpZ25lZCBjaGFyIHN0YXRlKQogewotCXJldHVybiBhdGNfZGFpb191bm11dGUoYXRjLCBzdGF0ZSwgTElORU80KTsKKwlyZXR1cm4gYXRjX2RhaW9fdW5tdXRlKGF0Yywgc3RhdGUsIExJTkVPMik7CiB9CiAKIHN0YXRpYyBpbnQgYXRjX2xpbmVfY2xmZV91bm11dGUoc3RydWN0IGN0X2F0YyAqYXRjLCB1bnNpZ25lZCBjaGFyIHN0YXRlKQpAQCAtMTA0Nyw3ICsxMDQ3LDcgQEAKIAogc3RhdGljIGludCBhdGNfbGluZV9yZWFyX3VubXV0ZShzdHJ1Y3QgY3RfYXRjICphdGMsIHVuc2lnbmVkIGNoYXIgc3RhdGUpCiB7Ci0JcmV0dXJuIGF0Y19kYWlvX3VubXV0ZShhdGMsIHN0YXRlLCBMSU5FTzIpOworCXJldHVybiBhdGNfZGFpb191bm11dGUoYXRjLCBzdGF0ZSwgTElORU80KTsKIH0KIAogc3RhdGljIGludCBhdGNfbGluZV9pbl91bm11dGUoc3RydWN0IGN0X2F0YyAqYXRjLCB1bnNpZ25lZCBjaGFyIHN0YXRlKQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VjaG9hdWRpby9lY2hvYXVkaW8uYyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vZWNob2F1ZGlvLmMKaW5kZXggZGEyMDY1Yy4uMTMwNWY3YyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VjaG9hdWRpby9lY2hvYXVkaW8uYworKysgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2VjaG9hdWRpby5jCkBAIC05NTAsNyArOTUwLDcgQEAKIAlDb250cm9sIGludGVyZmFjZQogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0jaWZuZGVmIEVDSE9DQVJEX0hBU19WTUlYRVIKKyNpZiAhZGVmaW5lZChFQ0hPQ0FSRF9IQVNfVk1JWEVSKSB8fCBkZWZpbmVkKEVDSE9DQVJEX0hBU19MSU5FX09VVF9HQUlOKQogCiAvKioqKioqKioqKioqKioqKioqKiBQQ00gb3V0cHV0IHZvbHVtZSAqKioqKioqKioqKioqKioqKioqLwogc3RhdGljIGludCBzbmRfZWNob19vdXRwdXRfZ2Fpbl9pbmZvKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLApAQCAtMTAwMyw2ICsxMDAzLDE5IEBACiAJcmV0dXJuIGNoYW5nZWQ7CiB9CiAKKyNpZmRlZiBFQ0hPQ0FSRF9IQVNfTElORV9PVVRfR0FJTgorLyogT24gdGhlIE1pYSB0aGlzIG9uZSBjb250cm9scyB0aGUgbGluZS1vdXQgdm9sdW1lICovCitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc25kX2VjaG9fbGluZV9vdXRwdXRfZ2FpbiBfX2RldmluaXRkYXRhID0geworCS5uYW1lID0gIkxpbmUgUGxheWJhY2sgVm9sdW1lIiwKKwkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKKwkuYWNjZXNzID0gU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1JFQURXUklURSB8CisJCSAgU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1RMVl9SRUFELAorCS5pbmZvID0gc25kX2VjaG9fb3V0cHV0X2dhaW5faW5mbywKKwkuZ2V0ID0gc25kX2VjaG9fb3V0cHV0X2dhaW5fZ2V0LAorCS5wdXQgPSBzbmRfZWNob19vdXRwdXRfZ2Fpbl9wdXQsCisJLnRsdiA9IHsucCA9IGRiX3NjYWxlX291dHB1dF9nYWlufSwKK307CisjZWxzZQogc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHNuZF9lY2hvX3BjbV9vdXRwdXRfZ2FpbiBfX2RldmluaXRkYXRhID0gewogCS5uYW1lID0gIlBDTSBQbGF5YmFjayBWb2x1bWUiLAogCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLApAQCAtMTAxMiw5ICsxMDI1LDEwIEBACiAJLnB1dCA9IHNuZF9lY2hvX291dHB1dF9nYWluX3B1dCwKIAkudGx2ID0gey5wID0gZGJfc2NhbGVfb3V0cHV0X2dhaW59LAogfTsKLQogI2VuZGlmCiAKKyNlbmRpZiAvKiAhRUNIT0NBUkRfSEFTX1ZNSVhFUiB8fCBFQ0hPQ0FSRF9IQVNfTElORV9PVVRfR0FJTiAqLworCiAKIAogI2lmZGVmIEVDSE9DQVJEX0hBU19JTlBVVF9HQUlOCkBAIC0yMDMwLDEwICsyMDQ0LDE4IEBACiAJc25kX2VjaG9fdm1peGVyLmNvdW50ID0gbnVtX3BpcGVzX291dChjaGlwKSAqIG51bV9idXNzZXNfb3V0KGNoaXApOwogCWlmICgoZXJyID0gc25kX2N0bF9hZGQoY2hpcC0+Y2FyZCwgc25kX2N0bF9uZXcxKCZzbmRfZWNob192bWl4ZXIsIGNoaXApKSkgPCAwKQogCQlnb3RvIGN0bF9lcnJvcjsKLSNlbHNlCi0JaWYgKChlcnIgPSBzbmRfY3RsX2FkZChjaGlwLT5jYXJkLCBzbmRfY3RsX25ldzEoJnNuZF9lY2hvX3BjbV9vdXRwdXRfZ2FpbiwgY2hpcCkpKSA8IDApCisjaWZkZWYgRUNIT0NBUkRfSEFTX0xJTkVfT1VUX0dBSU4KKwllcnIgPSBzbmRfY3RsX2FkZChjaGlwLT5jYXJkLAorCQkJICBzbmRfY3RsX25ldzEoJnNuZF9lY2hvX2xpbmVfb3V0cHV0X2dhaW4sIGNoaXApKTsKKwlpZiAoZXJyIDwgMCkKIAkJZ290byBjdGxfZXJyb3I7CiAjZW5kaWYKKyNlbHNlIC8qIEVDSE9DQVJEX0hBU19WTUlYRVIgKi8KKwllcnIgPSBzbmRfY3RsX2FkZChjaGlwLT5jYXJkLAorCQkJICBzbmRfY3RsX25ldzEoJnNuZF9lY2hvX3BjbV9vdXRwdXRfZ2FpbiwgY2hpcCkpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIGN0bF9lcnJvcjsKKyNlbmRpZiAvKiBFQ0hPQ0FSRF9IQVNfVk1JWEVSICovCiAKICNpZmRlZiBFQ0hPQ0FSRF9IQVNfSU5QVVRfR0FJTgogCWlmICgoZXJyID0gc25kX2N0bF9hZGQoY2hpcC0+Y2FyZCwgc25kX2N0bF9uZXcxKCZzbmRfZWNob19saW5lX2lucHV0X2dhaW4sIGNoaXApKSkgPCAwKQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VjaG9hdWRpby9taWEuYyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vbWlhLmMKaW5kZXggZjNiOWI0NS4uZjA1YzhjMCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VjaG9hdWRpby9taWEuYworKysgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL21pYS5jCkBAIC0yOSw2ICsyOSw3IEBACiAjZGVmaW5lIEVDSE9DQVJEX0hBU19BREFUCUZBTFNFCiAjZGVmaW5lIEVDSE9DQVJEX0hBU19TVEVSRU9fQklHX0VORElBTjMyCiAjZGVmaW5lIEVDSE9DQVJEX0hBU19NSURJCisjZGVmaW5lIEVDSE9DQVJEX0hBU19MSU5FX09VVF9HQUlOCiAKIC8qIFBpcGUgaW5kZXhlcyAqLwogI2RlZmluZSBQWF9BTkFMT0dfT1VUCTAJLyogOCAqLwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9oZGFfaW50ZWwuYyBiL3NvdW5kL3BjaS9oZGEvaGRhX2ludGVsLmMKaW5kZXggMjBhNjZmOC4uZTM0MDc5MiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9oZGFfaW50ZWwuYworKysgYi9zb3VuZC9wY2kvaGRhL2hkYV9pbnRlbC5jCkBAIC0yMzAzLDYgKzIzMDMsNyBAQAogICogd2hpdGUtbGlzdCBmb3IgZW5hYmxlX21zaQogICovCiBzdGF0aWMgc3RydWN0IHNuZF9wY2lfcXVpcmsgbXNpX3doaXRlX2xpc3RbXSBfX2RldmluaXRkYXRhID0geworCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDMwZjcsICJIUCBQYXZpbGlvbiBkdjR0LTEzMDAiLCAxKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgzNjA3LCAiSFAgQ29tcGEgQ1E0MCIsIDEpLAogCXt9CiB9OwpAQCAtMjY3Myw2ICsyNjc0LDcgQEAKIAl7IFBDSV9ERVZJQ0UoMHgxMGRlLCAweDA0NGIpLCAuZHJpdmVyX2RhdGEgPSBBWlhfRFJJVkVSX05WSURJQSB9LAogCXsgUENJX0RFVklDRSgweDEwZGUsIDB4MDU1YyksIC5kcml2ZXJfZGF0YSA9IEFaWF9EUklWRVJfTlZJRElBIH0sCiAJeyBQQ0lfREVWSUNFKDB4MTBkZSwgMHgwNTVkKSwgLmRyaXZlcl9kYXRhID0gQVpYX0RSSVZFUl9OVklESUEgfSwKKwl7IFBDSV9ERVZJQ0UoMHgxMGRlLCAweDA1OTApLCAuZHJpdmVyX2RhdGEgPSBBWlhfRFJJVkVSX05WSURJQSB9LAogCXsgUENJX0RFVklDRSgweDEwZGUsIDB4MDc3NCksIC5kcml2ZXJfZGF0YSA9IEFaWF9EUklWRVJfTlZJRElBIH0sCiAJeyBQQ0lfREVWSUNFKDB4MTBkZSwgMHgwNzc1KSwgLmRyaXZlcl9kYXRhID0gQVpYX0RSSVZFUl9OVklESUEgfSwKIAl7IFBDSV9ERVZJQ0UoMHgxMGRlLCAweDA3NzYpLCAuZHJpdmVyX2RhdGEgPSBBWlhfRFJJVkVSX05WSURJQSB9LApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9wYXRjaF9hbmFsb2cuYyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfYW5hbG9nLmMKaW5kZXggMjE1ZTcyYS4uMmQ2MDNmNiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9wYXRjaF9hbmFsb2cuYworKysgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX2FuYWxvZy5jCkBAIC00MDMyLDYgKzQwMzIsMTI3IEBACiB9CiAKIC8qCisgKiBIUCBUb3VjaHNtYXJ0CisgKiBwb3J0LUEgKDB4MTEpICAgICAgLSBmcm9udCBocC1vdXQKKyAqIHBvcnQtQiAoMHgxNCkgICAgICAtIHVudXNlZAorICogcG9ydC1DICgweDE1KSAgICAgIC0gdW51c2VkCisgKiBwb3J0LUQgKDB4MTIpICAgICAgLSByZWFyIGxpbmUgb3V0CisgKiBwb3J0LUUgKDB4MWMpICAgICAgLSBmcm9udCBtaWMtaW4KKyAqIHBvcnQtRiAoMHgxNikgICAgICAtIEludGVybmFsIHNwZWFrZXJzCisgKiBkaWdpdGFsLW1pYyAoMHgxNykgLSBJbnRlcm5hbCBtaWMKKyAqLworCitzdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFkMTk4NGFfdG91Y2hzbWFydF92ZXJic1tdID0geworCS8qIERBQ3M7IHVubXV0ZSBhcyBkZWZhdWx0ICovCisJezB4MDMsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIDB4Mjd9LCAvKiAwZEIgKi8KKwl7MHgwNCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgMHgyN30sIC8qIDBkQiAqLworCS8qIFBvcnQtQSAoSFApIG1peGVyIC0gcm91dGUgb25seSBmcm9tIGFuYWxvZyBtaXhlciAqLworCXsweDA3LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgwKX0sCisJezB4MDcsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMSl9LAorCS8qIFBvcnQtQSBwaW4gKi8KKwl7MHgxMSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSFB9LAorCS8qIFBvcnQtQSAoSFApIHBpbiAtIGFsd2F5cyB1bm11dGVkICovCisJezB4MTEsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFfSwKKwkvKiBQb3J0LUUgKGludCBzcGVha2VyKSBtaXhlciAtIHJvdXRlIG9ubHkgZnJvbSBhbmFsb2cgbWl4ZXIgKi8KKwl7MHgyNSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgMHgwM30sCisJLyogUG9ydC1FIHBpbiAqLworCXsweDFjLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9JTn0sCisJezB4MWMsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFfSwKKwl7MHgxYywgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fVlJFRjgwfSwKKwkvKiBQb3J0LUYgKGludCBzcGVha2VyKSBtaXhlciAtIHJvdXRlIG9ubHkgZnJvbSBhbmFsb2cgbWl4ZXIgKi8KKwl7MHgwYiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMCl9LAorCXsweDBiLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDEpfSwKKwkvKiBQb3J0LUYgcGluICovCisJezB4MTYsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0hQfSwKKwl7MHgxNiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFfSwKKwkvKiBBbmFsb2cgbWl4ZXI7IG11dGUgYXMgZGVmYXVsdCAqLworCXsweDIwLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgwKX0sCisJezB4MjAsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDEpfSwKKwl7MHgyMCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMil9LAorCXsweDIwLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgzKX0sCisJezB4MjAsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDQpfSwKKwl7MHgyMCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoNSl9LAorCS8qIEFuYWxvZyBNaXggb3V0cHV0IGFtcCAqLworCXsweDIxLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEV9LAorCS8qIGNhcHR1cmUgc291cmNlcyAqLworCS8qIHsweDBjLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwfSwgKi8gLyogc2V0IHZpYSB1bnNvbCAqLworCXsweDBjLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEV9LAorCXsweDBkLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwfSwKKwl7MHgwZCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFfSwKKwkvKiB1bnNvbGljaXRlZCBldmVudCBmb3IgcGluLXNlbnNlICovCisJezB4MTEsIEFDX1ZFUkJfU0VUX1VOU09MSUNJVEVEX0VOQUJMRSwgQUNfVVNSU1BfRU4gfCBBRDE4ODRBX0hQX0VWRU5UfSwKKwl7MHgxYywgQUNfVkVSQl9TRVRfVU5TT0xJQ0lURURfRU5BQkxFLCBBQ19VU1JTUF9FTiB8IEFEMTg4NEFfTUlDX0VWRU5UfSwKKwkvKiBhbGxvdyB0byB0b3VjaCBHUElPMSAoZm9yIG11dGUgY29udHJvbCkgKi8KKwl7MHgwMSwgQUNfVkVSQl9TRVRfR1BJT19NQVNLLCAweDAyfSwKKwl7MHgwMSwgQUNfVkVSQl9TRVRfR1BJT19ESVJFQ1RJT04sIDB4MDJ9LAorCXsweDAxLCBBQ19WRVJCX1NFVF9HUElPX0RBVEEsIDB4MDJ9LCAvKiBmaXJzdCBtdXRlZCAqLworCS8qIGludGVybmFsIG1pYyAtIGRtaWMgKi8KKwl7MHgxNywgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSU59LAorCS8qIHNldCBtYWdpYyBDT0VGcyBmb3IgZG1pYyAqLworCXsweDAxLCBBQ19WRVJCX1NFVF9DT0VGX0lOREVYLCAweDEzZjd9LAorCXsweDAxLCBBQ19WRVJCX1NFVF9QUk9DX0NPRUYsIDB4MDh9LAorCXsgfSAvKiBlbmQgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhZDE5ODRhX3RvdWNoc21hcnRfbWl4ZXJzW10gPSB7CisJSERBX0NPREVDX1ZPTFVNRSgiTWFzdGVyIFBsYXliYWNrIFZvbHVtZSIsIDB4MjEsIDB4MCwgSERBX09VVFBVVCksCisvKglIREFfQ09ERUNfTVVURSgiTWFzdGVyIFBsYXliYWNrIFN3aXRjaCIsIDB4MjEsIDB4MCwgSERBX09VVFBVVCksKi8KKwl7CisJCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAorCQkubmFtZSA9ICJNYXN0ZXIgUGxheWJhY2sgU3dpdGNoIiwKKwkJLmluZm8gPSBzbmRfaGRhX21peGVyX2FtcF9zd2l0Y2hfaW5mbywKKwkJLmdldCA9IHNuZF9oZGFfbWl4ZXJfYW1wX3N3aXRjaF9nZXQsCisJCS5wdXQgPSBhZDE4ODRhX21vYmlsZV9tYXN0ZXJfc3dfcHV0LAorCQkucHJpdmF0ZV92YWx1ZSA9IEhEQV9DT01QT1NFX0FNUF9WQUwoMHgyMSwgMywgMCwgSERBX09VVFBVVCksCisJfSwKKwlIREFfQ09ERUNfVk9MVU1FKCJQQ00gUGxheWJhY2sgVm9sdW1lIiwgMHgyMCwgMHg1LCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJQQ00gUGxheWJhY2sgU3dpdGNoIiwgMHgyMCwgMHg1LCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIkNhcHR1cmUgVm9sdW1lIiwgMHgwYywgMHgwLCBIREFfT1VUUFVUKSwKKwlIREFfQ09ERUNfTVVURSgiQ2FwdHVyZSBTd2l0Y2giLCAweDBjLCAweDAsIEhEQV9PVVRQVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBCb29zdCIsIDB4MjUsIDB4MCwgSERBX09VVFBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiSW50ZXJuYWwgTWljIEJvb3N0IiwgMHgxNywgMHgwLCBIREFfSU5QVVQpLAorCXsgfSAvKiBlbmQgKi8KK307CisKKy8qIHN3aXRjaCB0byBleHRlcm5hbCBtaWMgaWYgcGx1Z2dlZCAqLworc3RhdGljIHZvaWQgYWQxOTg0YV90b3VjaHNtYXJ0X2F1dG9taWMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCit7CisJaWYgKHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgMHgxYywgMCwKKwkJCQkgICAgIEFDX1ZFUkJfR0VUX1BJTl9TRU5TRSwgMCkgJiAweDgwMDAwMDAwKSB7CisJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIDB4MGMsIDAsCisJCQkJICAgICBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHg0KTsKKwl9IGVsc2UgeworCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCAweDBjLCAwLAorCQkJCSAgICAgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4NSk7CisJfQorfQorCisKKy8qIHVuc29saWNpdGVkIGV2ZW50IGZvciBIUCBqYWNrIHNlbnNpbmcgKi8KK3N0YXRpYyB2b2lkIGFkMTk4NGFfdG91Y2hzbWFydF91bnNvbF9ldmVudChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKKwl1bnNpZ25lZCBpbnQgcmVzKQoreworCXN3aXRjaCAocmVzID4+IDI2KSB7CisJY2FzZSBBRDE4ODRBX0hQX0VWRU5UOgorCQlhZDE4ODRhX2hwX2F1dG9tdXRlKGNvZGVjKTsKKwkJYnJlYWs7CisJY2FzZSBBRDE4ODRBX01JQ19FVkVOVDoKKwkJYWQxOTg0YV90b3VjaHNtYXJ0X2F1dG9taWMoY29kZWMpOworCQlicmVhazsKKwl9Cit9CisKKy8qIGluaXRpYWxpemUgamFjay1zZW5zaW5nLCB0b28gKi8KK3N0YXRpYyBpbnQgYWQxOTg0YV90b3VjaHNtYXJ0X2luaXQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCit7CisJYWQxOTh4X2luaXQoY29kZWMpOworCWFkMTg4NGFfaHBfYXV0b211dGUoY29kZWMpOworCWFkMTk4NGFfdG91Y2hzbWFydF9hdXRvbWljKGNvZGVjKTsKKwlyZXR1cm4gMDsKK30KKworCisvKgogICovCiAKIGVudW0gewpAQCAtNDAzOSw2ICs0MTYwLDcgQEAKIAlBRDE4ODRBX0xBUFRPUCwKIAlBRDE4ODRBX01PQklMRSwKIAlBRDE4ODRBX1RISU5LUEFELAorCUFEMTk4NEFfVE9VQ0hTTUFSVCwKIAlBRDE4ODRBX01PREVMUwogfTsKIApAQCAtNDA0Nyw2ICs0MTY5LDcgQEAKIAlbQUQxODg0QV9MQVBUT1BdCT0gImxhcHRvcCIsCiAJW0FEMTg4NEFfTU9CSUxFXQk9ICJtb2JpbGUiLAogCVtBRDE4ODRBX1RISU5LUEFEXQk9ICJ0aGlua3BhZCIsCisJW0FEMTk4NEFfVE9VQ0hTTUFSVF0JPSAidG91Y2hzbWFydCIsCiB9OwogCiBzdGF0aWMgc3RydWN0IHNuZF9wY2lfcXVpcmsgYWQxODg0YV9jZmdfdGJsW10gPSB7CkBAIC00MDU5LDYgKzQxODIsNyBAQAogCVNORF9QQ0lfUVVJUktfTUFTSygweDEwM2MsIDB4ZmYwMCwgMHgzNjAwLCAiSFAgbGFwdG9wIiwgQUQxODg0QV9MQVBUT1ApLAogCVNORF9QQ0lfUVVJUktfTUFTSygweDEwM2MsIDB4ZmZmMCwgMHg3MDEwLCAiSFAgbGFwdG9wIiwgQUQxODg0QV9NT0JJTEUpLAogCVNORF9QQ0lfUVVJUksoMHgxN2FhLCAweDIwYWMsICJUaGlua3BhZCBYMzAwIiwgQUQxODg0QV9USElOS1BBRCksCisJU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MmE4MiwgIlRvdWNoc21hcnQiLCBBRDE5ODRBX1RPVUNIU01BUlQpLAogCXt9CiB9OwogCkBAIC00MTQyLDYgKzQyNjYsMjEgQEAKIAkJY29kZWMtPnBhdGNoX29wcy51bnNvbF9ldmVudCA9IGFkMTk4NGFfdGhpbmtwYWRfdW5zb2xfZXZlbnQ7CiAJCWNvZGVjLT5wYXRjaF9vcHMuaW5pdCA9IGFkMTk4NGFfdGhpbmtwYWRfaW5pdDsKIAkJYnJlYWs7CisJY2FzZSBBRDE5ODRBX1RPVUNIU01BUlQ6CisJCXNwZWMtPm1peGVyc1swXSA9IGFkMTk4NGFfdG91Y2hzbWFydF9taXhlcnM7CisJCXNwZWMtPmluaXRfdmVyYnNbMF0gPSBhZDE5ODRhX3RvdWNoc21hcnRfdmVyYnM7CisJCXNwZWMtPm11bHRpb3V0LmRpZ19vdXRfbmlkID0gMDsKKwkJY29kZWMtPnBhdGNoX29wcy51bnNvbF9ldmVudCA9IGFkMTk4NGFfdG91Y2hzbWFydF91bnNvbF9ldmVudDsKKwkJY29kZWMtPnBhdGNoX29wcy5pbml0ID0gYWQxOTg0YV90b3VjaHNtYXJ0X2luaXQ7CisJCS8qIHNldCB0aGUgdXBwZXItbGltaXQgZm9yIG1peGVyIGFtcCB0byAwZEIgZm9yIGF2b2lkaW5nIHRoZQorCQkgKiBwb3NzaWJsZSBkYW1hZ2UgYnkgb3ZlcmxvYWRpbmcKKwkJICovCisJCXNuZF9oZGFfb3ZlcnJpZGVfYW1wX2NhcHMoY29kZWMsIDB4MjAsIEhEQV9JTlBVVCwKKwkJCQkJICAoMHgxNyA8PCBBQ19BTVBDQVBfT0ZGU0VUX1NISUZUKSB8CisJCQkJCSAgKDB4MTcgPDwgQUNfQU1QQ0FQX05VTV9TVEVQU19TSElGVCkgfAorCQkJCQkgICgweDA1IDw8IEFDX0FNUENBUF9TVEVQX1NJWkVfU0hJRlQpIHwKKwkJCQkJICAoMSA8PCBBQ19BTVBDQVBfTVVURV9TSElGVCkpOworCQlicmVhazsKIAl9CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfY29uZXhhbnQuYyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfY29uZXhhbnQuYwppbmRleCA5ZDg5OWVkLi4zZmJiYzhjIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL3BhdGNoX2NvbmV4YW50LmMKKysrIGIvc291bmQvcGNpL2hkYS9wYXRjaF9jb25leGFudC5jCkBAIC02ODIsMTEgKzY4MiwxMyBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBoZGFfaW5wdXRfbXV4IGN4dDUwNDVfY2FwdHVyZV9zb3VyY2VfYmVucSA9IHsKLQkubnVtX2l0ZW1zID0gMywKKwkubnVtX2l0ZW1zID0gNSwKIAkuaXRlbXMgPSB7CiAJCXsgIkludE1pYyIsIDB4MSB9LAogCQl7ICJFeHRNaWMiLCAweDIgfSwKIAkJeyAiTGluZUluIiwgMHgzIH0sCisJCXsgIkNEIiwgICAgIDB4NCB9LAorCQl7ICJNaXhlciIsICAweDAgfSwKIAl9CiB9OwogCkBAIC04MTEsMTEgKzgxMywxOSBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGN4dDUwNDVfYmVucV9taXhlcnNbXSA9IHsKKwlIREFfQ09ERUNfVk9MVU1FKCJDRCBDYXB0dXJlIFZvbHVtZSIsIDB4MWEsIDB4MDQsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX01VVEUoIkNEIENhcHR1cmUgU3dpdGNoIiwgMHgxYSwgMHgwNCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJDRCBQbGF5YmFjayBWb2x1bWUiLCAweDE3LCAweDQsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX01VVEUoIkNEIFBsYXliYWNrIFN3aXRjaCIsIDB4MTcsIDB4NCwgSERBX0lOUFVUKSwKKwogCUhEQV9DT0RFQ19WT0xVTUUoIkxpbmUgSW4gQ2FwdHVyZSBWb2x1bWUiLCAweDFhLCAweDAzLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJMaW5lIEluIENhcHR1cmUgU3dpdGNoIiwgMHgxYSwgMHgwMywgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJMaW5lIEluIFBsYXliYWNrIFZvbHVtZSIsIDB4MTcsIDB4MywgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiTGluZSBJbiBQbGF5YmFjayBTd2l0Y2giLCAweDE3LCAweDMsIEhEQV9JTlBVVCksCiAKKwlIREFfQ09ERUNfVk9MVU1FKCJNaXhlciBDYXB0dXJlIFZvbHVtZSIsIDB4MWEsIDB4MCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfTVVURSgiTWl4ZXIgQ2FwdHVyZSBTd2l0Y2giLCAweDFhLCAweDAsIEhEQV9JTlBVVCksCisKIAl7fQogfTsKIApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9wYXRjaF9udmhkbWkuYyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfbnZoZG1pLmMKaW5kZXggYzg0MzVjOS4uOWZiNjAyNyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9wYXRjaF9udmhkbWkuYworKysgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX252aGRtaS5jCkBAIC0yOSw2ICsyOSw5IEBACiAjaW5jbHVkZSAiaGRhX2NvZGVjLmgiCiAjaW5jbHVkZSAiaGRhX2xvY2FsLmgiCiAKKy8qIGRlZmluZSBiZWxvdyB0byByZXN0cmljdCB0aGUgc3VwcG9ydGVkIHJhdGVzIGFuZCBmb3JtYXRzICovCisvKiAjZGVmaW5lIExJTUlURURfUkFURV9GTVRfU1VQUE9SVCAqLworCiBzdHJ1Y3QgbnZoZG1pX3NwZWMgewogCXN0cnVjdCBoZGFfbXVsdGlfb3V0IG11bHRpb3V0OwogCkBAIC02MCw2ICs2MywyMiBAQAogCXt9IC8qIHRlcm1pbmF0b3IgKi8KIH07CiAKKyNpZmRlZiBMSU1JVEVEX1JBVEVfRk1UX1NVUFBPUlQKKy8qIHN1cHBvcnQgb25seSB0aGUgc2FmZSBmb3JtYXQgYW5kIHJhdGUgKi8KKyNkZWZpbmUgU1VQUE9SVEVEX1JBVEVTCQlTTkRSVl9QQ01fUkFURV80ODAwMAorI2RlZmluZSBTVVBQT1JURURfTUFYQlBTCTE2CisjZGVmaW5lIFNVUFBPUlRFRF9GT1JNQVRTCVNORFJWX1BDTV9GTVRCSVRfUzE2X0xFCisjZWxzZQorLyogc3VwcG9ydCBhbGwgcmF0ZXMgYW5kIGZvcm1hdHMgKi8KKyNkZWZpbmUgU1VQUE9SVEVEX1JBVEVTIFwKKwkoU05EUlZfUENNX1JBVEVfMjIwNTAgfCBTTkRSVl9QQ01fUkFURV80NDEwMCB8IFNORFJWX1BDTV9SQVRFXzQ4MDAwIHxcCisJU05EUlZfUENNX1JBVEVfODgyMDAgfCBTTkRSVl9QQ01fUkFURV85NjAwMCB8IFNORFJWX1BDTV9SQVRFXzE3NjQwMCB8XAorCSBTTkRSVl9QQ01fUkFURV8xOTIwMDApCisjZGVmaW5lIFNVUFBPUlRFRF9NQVhCUFMJMjQKKyNkZWZpbmUgU1VQUE9SVEVEX0ZPUk1BVFMgXAorCShTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSB8IFNORFJWX1BDTV9GTVRCSVRfUzMyX0xFKQorI2VuZGlmCisKIC8qCiAgKiBDb250cm9scwogICovCkBAIC0yNTgsOSArMjc3LDkgQEAKIAkuY2hhbm5lbHNfbWluID0gMiwKIAkuY2hhbm5lbHNfbWF4ID0gOCwKIAkubmlkID0gTnZfTWFzdGVyX0NvbnZlcnRfbmlkLAotCS5yYXRlcyA9IFNORFJWX1BDTV9SQVRFXzQ4MDAwLAotCS5tYXhicHMgPSAxNiwKLQkuZm9ybWF0cyA9IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFLAorCS5yYXRlcyA9IFNVUFBPUlRFRF9SQVRFUywKKwkubWF4YnBzID0gU1VQUE9SVEVEX01BWEJQUywKKwkuZm9ybWF0cyA9IFNVUFBPUlRFRF9GT1JNQVRTLAogCS5vcHMgPSB7CiAJCS5vcGVuID0gbnZoZG1pX2RpZ19wbGF5YmFja19wY21fb3BlbiwKIAkJLmNsb3NlID0gbnZoZG1pX2RpZ19wbGF5YmFja19wY21fY2xvc2VfOGNoLApAQCAtMjczLDkgKzI5Miw5IEBACiAJLmNoYW5uZWxzX21pbiA9IDIsCiAJLmNoYW5uZWxzX21heCA9IDIsCiAJLm5pZCA9IE52X01hc3Rlcl9Db252ZXJ0X25pZCwKLQkucmF0ZXMgPSBTTkRSVl9QQ01fUkFURV80ODAwMCwKLQkubWF4YnBzID0gMTYsCi0JLmZvcm1hdHMgPSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSwKKwkucmF0ZXMgPSBTVVBQT1JURURfUkFURVMsCisJLm1heGJwcyA9IFNVUFBPUlRFRF9NQVhCUFMsCisJLmZvcm1hdHMgPSBTVVBQT1JURURfRk9STUFUUywKIAkub3BzID0gewogCQkub3BlbiA9IG52aGRtaV9kaWdfcGxheWJhY2tfcGNtX29wZW4sCiAJCS5jbG9zZSA9IG52aGRtaV9kaWdfcGxheWJhY2tfcGNtX2Nsb3NlXzJjaCwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfcmVhbHRlay5jIGIvc291bmQvcGNpL2hkYS9wYXRjaF9yZWFsdGVrLmMKaW5kZXggMTI5NjA1OC4uZmYyMDA0OCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9wYXRjaF9yZWFsdGVrLmMKKysrIGIvc291bmQvcGNpL2hkYS9wYXRjaF9yZWFsdGVrLmMKQEAgLTI3NSw3ICsyNzUsNyBAQAogCXN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3ICpjYXBfbWl4ZXI7CS8qIGNhcHR1cmUgbWl4ZXIgKi8KIAl1bnNpZ25lZCBpbnQgYmVlcF9hbXA7CS8qIGJlZXAgYW1wIHZhbHVlLCBzZXQgdmlhIHNldF9iZWVwX2FtcCgpICovCiAKLQljb25zdCBzdHJ1Y3QgaGRhX3ZlcmIgKmluaXRfdmVyYnNbNV07CS8qIGluaXRpYWxpemF0aW9uIHZlcmJzCisJY29uc3Qgc3RydWN0IGhkYV92ZXJiICppbml0X3ZlcmJzWzEwXTsJLyogaW5pdGlhbGl6YXRpb24gdmVyYnMKIAkJCQkJCSAqIGRvbid0IGZvcmdldCBOVUxMCiAJCQkJCQkgKiB0ZXJtaW5hdGlvbiEKIAkJCQkJCSAqLwpAQCAtOTY1LDYgKzk2NSw4IEBACiAJdW5zaWduZWQgaW50IG5pZCA9IHNwZWMtPmF1dG9jZmcuaHBfcGluc1swXTsKIAlpbnQgaTsKIAorCWlmICghbmlkKQorCQlyZXR1cm47CiAJcGluY2FwID0gc25kX2hkYV9xdWVyeV9waW5fY2Fwcyhjb2RlYywgbmlkKTsKIAlpZiAocGluY2FwICYgQUNfUElOQ0FQX1RSSUdfUkVRKSAvKiBuZWVkIHRyaWdnZXI/ICovCiAJCXNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgbmlkLCAwLCBBQ19WRVJCX1NFVF9QSU5fU0VOU0UsIDApOwpAQCAtMTMzMiwxNSArMTMzNCwyMCBAQAogCSAqCSAgICAgICAgd2hlbiB0aGUgZXh0ZXJuYWwgaGVhZHBob25lIG91dCBqYWNrIGlzIHBsdWdnZWQiCiAJICovCiAJaWYgKCFzcGVjLT5hdXRvY2ZnLmhwX3BpbnNbMF0pIHsKKwkJaGRhX25pZF90IG5pZDsKIAkJdG1wID0gKGFzcyA+PiAxMSkgJiAweDM7CS8qIEhQIHRvIGNoYXNzaXMgKi8KIAkJaWYgKHRtcCA9PSAwKQotCQkJc3BlYy0+YXV0b2NmZy5ocF9waW5zWzBdID0gcG9ydGE7CisJCQluaWQgPSBwb3J0YTsKIAkJZWxzZSBpZiAodG1wID09IDEpCi0JCQlzcGVjLT5hdXRvY2ZnLmhwX3BpbnNbMF0gPSBwb3J0ZTsKKwkJCW5pZCA9IHBvcnRlOwogCQllbHNlIGlmICh0bXAgPT0gMikKLQkJCXNwZWMtPmF1dG9jZmcuaHBfcGluc1swXSA9IHBvcnRkOworCQkJbmlkID0gcG9ydGQ7CiAJCWVsc2UKIAkJCXJldHVybiAxOworCQlmb3IgKGkgPSAwOyBpIDwgc3BlYy0+YXV0b2NmZy5saW5lX291dHM7IGkrKykKKwkJCWlmIChzcGVjLT5hdXRvY2ZnLmxpbmVfb3V0X3BpbnNbaV0gPT0gbmlkKQorCQkJCXJldHVybiAxOworCQlzcGVjLT5hdXRvY2ZnLmhwX3BpbnNbMF0gPSBuaWQ7CiAJfQogCiAJYWxjX2luaXRfYXV0b19ocChjb2RlYyk7CkBAIC0xMzYyLDcgKzEzNjksNyBAQAogfQogCiAvKgotICogRml4LXVwIHBpbiBkZWZhdWx0IGNvbmZpZ3VyYXRpb25zCisgKiBGaXgtdXAgcGluIGRlZmF1bHQgY29uZmlndXJhdGlvbnMgYW5kIGFkZCBkZWZhdWx0IHZlcmJzCiAgKi8KIAogc3RydWN0IGFsY19waW5jZmcgewpAQCAtMTM3MCw5ICsxMzc3LDE0IEBACiAJdTMyIHZhbDsKIH07CiAKLXN0YXRpYyB2b2lkIGFsY19maXhfcGluY2ZnKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAorc3RydWN0IGFsY19maXh1cCB7CisJY29uc3Qgc3RydWN0IGFsY19waW5jZmcgKnBpbnM7CisJY29uc3Qgc3RydWN0IGhkYV92ZXJiICp2ZXJiczsKK307CisKK3N0YXRpYyB2b2lkIGFsY19waWNrX2ZpeHVwKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAogCQkJICAgY29uc3Qgc3RydWN0IHNuZF9wY2lfcXVpcmsgKnF1aXJrLAotCQkJICAgY29uc3Qgc3RydWN0IGFsY19waW5jZmcgKipwaW5maXgpCisJCQkgICBjb25zdCBzdHJ1Y3QgYWxjX2ZpeHVwICpmaXgpCiB7CiAJY29uc3Qgc3RydWN0IGFsY19waW5jZmcgKmNmZzsKIApAQCAtMTM4MCw5ICsxMzkyLDE0IEBACiAJaWYgKCFxdWlyaykKIAkJcmV0dXJuOwogCi0JY2ZnID0gcGluZml4W3F1aXJrLT52YWx1ZV07Ci0JZm9yICg7IGNmZy0+bmlkOyBjZmcrKykKLQkJc25kX2hkYV9jb2RlY19zZXRfcGluY2ZnKGNvZGVjLCBjZmctPm5pZCwgY2ZnLT52YWwpOworCWZpeCArPSBxdWlyay0+dmFsdWU7CisJY2ZnID0gZml4LT5waW5zOworCWlmIChjZmcpIHsKKwkJZm9yICg7IGNmZy0+bmlkOyBjZmcrKykKKwkJCXNuZF9oZGFfY29kZWNfc2V0X3BpbmNmZyhjb2RlYywgY2ZnLT5uaWQsIGNmZy0+dmFsKTsKKwl9CisJaWYgKGZpeC0+dmVyYnMpCisJCWFkZF92ZXJiKGNvZGVjLT5zcGVjLCBmaXgtPnZlcmJzKTsKIH0KIAogLyoKQEAgLTk1OTMsMTEgKzk2MTAsMTMgQEAKIAl7IH0KIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgYWxjX3BpbmNmZyAqYWxjODgyX3Bpbl9maXhlc1tdID0gewotCVtQSU5GSVhfQUJJVF9BVzlEX01BWF0gPSBhbGM4ODJfYWJpdF9hdzlkX3BpbmZpeCwKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYWxjX2ZpeHVwIGFsYzg4Ml9maXh1cHNbXSA9IHsKKwlbUElORklYX0FCSVRfQVc5RF9NQVhdID0geworCQkucGlucyA9IGFsYzg4Ml9hYml0X2F3OWRfcGluZml4CisJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX3BjaV9xdWlyayBhbGM4ODJfcGluZml4X3RibFtdID0geworc3RhdGljIHN0cnVjdCBzbmRfcGNpX3F1aXJrIGFsYzg4Ml9maXh1cF90YmxbXSA9IHsKIAlTTkRfUENJX1FVSVJLKDB4MTQ3YiwgMHgxMDdhLCAiQWJpdCBBVzlELU1BWCIsIFBJTkZJWF9BQklUX0FXOURfTUFYKSwKIAl7fQogfTsKQEAgLTk4NjksNyArOTg4OCw3IEBACiAJCWJvYXJkX2NvbmZpZyA9IEFMQzg4Ml9BVVRPOwogCX0KIAotCWFsY19maXhfcGluY2ZnKGNvZGVjLCBhbGM4ODJfcGluZml4X3RibCwgYWxjODgyX3Bpbl9maXhlcyk7CisJYWxjX3BpY2tfZml4dXAoY29kZWMsIGFsYzg4Ml9maXh1cF90YmwsIGFsYzg4Ml9maXh1cHMpOwogCiAJaWYgKGJvYXJkX2NvbmZpZyA9PSBBTEM4ODJfQVVUTykgewogCQkvKiBhdXRvbWF0aWMgcGFyc2UgZnJvbSB0aGUgQklPUyBjb25maWcgKi8KQEAgLTEyNTg1LDcgKzEyNjA0LDggQEAKIAlTTkRfUENJX1FVSVJLKDB4MTAyNSwgMHgwMTViLCAiQWNlciBBc3BpcmUgT25lIiwKIAkJCQkJCUFMQzI2OF9BQ0VSX0FTUElSRV9PTkUpLAogCVNORF9QQ0lfUVVJUksoMHgxMDI4LCAweDAyNTMsICJEZWxsIE9FTSIsIEFMQzI2OF9ERUxMKSwKLQlTTkRfUENJX1FVSVJLKDB4MTAyOCwgMHgwMmIwLCAiRGVsbCBJbnNwaXJvbiBNaW5pOSIsIEFMQzI2OF9ERUxMKSwKKwlTTkRfUENJX1FVSVJLX01BU0soMHgxMDI4LCAweGZmZjAsIDB4MDJiMCwKKwkJCSJEZWxsIEluc3Bpcm9uIE1pbmk5L1Zvc3RybyBBOTAiLCBBTEMyNjhfREVMTCksCiAJLyogYWxtb3N0IGNvbXBhdGlibGUgd2l0aCB0b3NoaWJhIGJ1dCB3aXRoIG9wdGlvbmFsIGRpZ2l0YWwgb3V0czsKIAkgKiBhdXRvLXByb2Jpbmcgc2VlbXMgd29ya2luZyBmaW5lCiAJICovCkBAIC0xMjY2MCw3ICsxMjY4MCw3IEBACiAJCS5pbml0X2hvb2sgPSBhbGMyNjhfdG9zaGliYV9hdXRvbXV0ZSwKIAl9LAogCVtBTEMyNjhfQUNFUl0gPSB7Ci0JCS5taXhlcnMgPSB7IGFsYzI2OF9hY2VyX21peGVyLCBhbGMyNjhfY2FwdHVyZV9ub3NyY19taXhlciwKKwkJLm1peGVycyA9IHsgYWxjMjY4X2FjZXJfbWl4ZXIsIGFsYzI2OF9jYXB0dXJlX2FsdF9taXhlciwKIAkJCSAgICBhbGMyNjhfYmVlcF9taXhlciB9LAogCQkuaW5pdF92ZXJicyA9IHsgYWxjMjY4X2Jhc2VfaW5pdF92ZXJicywgYWxjMjY4X2VhcGRfdmVyYnMsCiAJCQkJYWxjMjY4X2FjZXJfdmVyYnMgfSwKQEAgLTEyODQyLDEyICsxMjg2MiwxNSBAQAogCQl1bnNpZ25lZCBpbnQgd2NhcCA9IGdldF93Y2Fwcyhjb2RlYywgMHgwNyk7CiAJCWludCBpOwogCisJCXNwZWMtPmNhcHNyY19uaWRzID0gYWxjMjY4X2NhcHNyY19uaWRzOwogCQkvKiBnZXQgdHlwZSAqLwogCQl3Y2FwID0gZ2V0X3djYXBzX3R5cGUod2NhcCk7CiAJCWlmIChzcGVjLT5hdXRvX21pYyB8fAogCQkgICAgd2NhcCAhPSBBQ19XSURfQVVEX0lOIHx8IHNwZWMtPmlucHV0X211eC0+bnVtX2l0ZW1zID09IDEpIHsKIAkJCXNwZWMtPmFkY19uaWRzID0gYWxjMjY4X2FkY19uaWRzX2FsdDsKIAkJCXNwZWMtPm51bV9hZGNfbmlkcyA9IEFSUkFZX1NJWkUoYWxjMjY4X2FkY19uaWRzX2FsdCk7CisJCQlpZiAoc3BlYy0+YXV0b19taWMpCisJCQkJZml4dXBfYXV0b21pY19hZGMoY29kZWMpOwogCQkJaWYgKHNwZWMtPmF1dG9fbWljIHx8IHNwZWMtPmlucHV0X211eC0+bnVtX2l0ZW1zID09IDEpCiAJCQkJYWRkX21peGVyKHNwZWMsIGFsYzI2OF9jYXB0dXJlX25vc3JjX21peGVyKTsKIAkJCWVsc2UKQEAgLTEyODU3LDcgKzEyODgwLDYgQEAKIAkJCXNwZWMtPm51bV9hZGNfbmlkcyA9IEFSUkFZX1NJWkUoYWxjMjY4X2FkY19uaWRzKTsKIAkJCWFkZF9taXhlcihzcGVjLCBhbGMyNjhfY2FwdHVyZV9taXhlcik7CiAJCX0KLQkJc3BlYy0+Y2Fwc3JjX25pZHMgPSBhbGMyNjhfY2Fwc3JjX25pZHM7CiAJCS8qIHNldCBkZWZhdWx0IGlucHV0IHNvdXJjZSAqLwogCQlmb3IgKGkgPSAwOyBpIDwgc3BlYy0+bnVtX2FkY19uaWRzOyBpKyspCiAJCQlzbmRfaGRhX2NvZGVjX3dyaXRlX2NhY2hlKGNvZGVjLCBhbGMyNjhfY2Fwc3JjX25pZHNbaV0sCkBAIC0xNDM1NywxNSArMTQzNzksMTYgQEAKIHN0YXRpYyB2b2lkIGFsYzg2MV9hdXRvX2luaXRfaHBfb3V0KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwotCWhkYV9uaWRfdCBwaW47CiAKLQlwaW4gPSBzcGVjLT5hdXRvY2ZnLmhwX3BpbnNbMF07Ci0JaWYgKHBpbikKLQkJYWxjODYxX2F1dG9fc2V0X291dHB1dF9hbmRfdW5tdXRlKGNvZGVjLCBwaW4sIFBJTl9IUCwKKwlpZiAoc3BlYy0+YXV0b2NmZy5ocF9vdXRzKQorCQlhbGM4NjFfYXV0b19zZXRfb3V0cHV0X2FuZF91bm11dGUoY29kZWMsCisJCQkJCQkgIHNwZWMtPmF1dG9jZmcuaHBfcGluc1swXSwKKwkJCQkJCSAgUElOX0hQLAogCQkJCQkJICBzcGVjLT5tdWx0aW91dC5ocF9uaWQpOwotCXBpbiA9IHNwZWMtPmF1dG9jZmcuc3BlYWtlcl9waW5zWzBdOwotCWlmIChwaW4pCi0JCWFsYzg2MV9hdXRvX3NldF9vdXRwdXRfYW5kX3VubXV0ZShjb2RlYywgcGluLCBQSU5fT1VULAorCWlmIChzcGVjLT5hdXRvY2ZnLnNwZWFrZXJfb3V0cykKKwkJYWxjODYxX2F1dG9fc2V0X291dHB1dF9hbmRfdW5tdXRlKGNvZGVjLAorCQkJCQkJICBzcGVjLT5hdXRvY2ZnLnNwZWFrZXJfcGluc1swXSwKKwkJCQkJCSAgUElOX09VVCwKIAkJCQkJCSAgc3BlYy0+bXVsdGlvdXQuZGFjX25pZHNbMF0pOwogfQogCkBAIC0xNTE1OCw3ICsxNTE4MSw3IEBACiAJU05EX1BDSV9RVUlSSygweDEwMTksIDB4YTg4ZCwgIlJlYWx0ZWsgQUxDNjYwIGRlbW8iLCBBTEM2NjBWRF8zU1QpLAogCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDMwYmYsICJIUCBUWDEwMDAiLCBBTEM4NjFWRF9IUCksCiAJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTJlMiwgIkFzdXMgejM1bSIsIEFMQzY2MFZEXzNTVCksCi0JU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTMzOSwgIkFzdXMgRzEiLCBBTEM2NjBWRF8zU1QpLAorCS8qU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTMzOSwgIkFzdXMgRzEiLCBBTEM2NjBWRF8zU1QpLCovIC8qIGF1dG8gKi8KIAlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxNjMzLCAiQXN1cyBWMVNuIiwgQUxDNjYwVkRfQVNVU19WMVMpLAogCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDgxZTcsICJBU1VTIiwgQUxDNjYwVkRfM1NUX0RJRyksCiAJU05EX1BDSV9RVUlSSygweDEwZGUsIDB4MDNmMCwgIlJlYWx0ZWsgQUxDNjYwIGRlbW8iLCBBTEM2NjBWRF8zU1QpLApAQCAtMTU1NTEsNiArMTU1NzQsMjkgQEAKIAkJYWxjX2luaXRob29rKGNvZGVjKTsKIH0KIAorZW51bSB7CisJQUxDNjYwVkRfRklYX0FTVVNfR1BJTzEKK307CisKKy8qIHJlc2V0IEdQSU8xICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV92ZXJiIGFsYzY2MHZkX2ZpeF9hc3VzX2dwaW8xX3ZlcmJzW10gPSB7CisJezB4MDEsIEFDX1ZFUkJfU0VUX0dQSU9fTUFTSywgMHgwM30sCisJezB4MDEsIEFDX1ZFUkJfU0VUX0dQSU9fRElSRUNUSU9OLCAweDAxfSwKKwl7MHgwMSwgQUNfVkVSQl9TRVRfR1BJT19EQVRBLCAweDAxfSwKKwl7IH0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYWxjX2ZpeHVwIGFsYzg2MXZkX2ZpeHVwc1tdID0geworCVtBTEM2NjBWRF9GSVhfQVNVU19HUElPMV0gPSB7CisJCS52ZXJicyA9IGFsYzY2MHZkX2ZpeF9hc3VzX2dwaW8xX3ZlcmJzLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHNuZF9wY2lfcXVpcmsgYWxjODYxdmRfZml4dXBfdGJsW10gPSB7CisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTMzOSwgIkFTVVMgQTctSyIsIEFMQzY2MFZEX0ZJWF9BU1VTX0dQSU8xKSwKKwl7fQorfTsKKwogc3RhdGljIGludCBwYXRjaF9hbGM4NjF2ZChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKIAlzdHJ1Y3QgYWxjX3NwZWMgKnNwZWM7CkBAIC0xNTU3Miw2ICsxNTYxOCw4IEBACiAJCWJvYXJkX2NvbmZpZyA9IEFMQzg2MVZEX0FVVE87CiAJfQogCisJYWxjX3BpY2tfZml4dXAoY29kZWMsIGFsYzg2MXZkX2ZpeHVwX3RibCwgYWxjODYxdmRfZml4dXBzKTsKKwogCWlmIChib2FyZF9jb25maWcgPT0gQUxDODYxVkRfQVVUTykgewogCQkvKiBhdXRvbWF0aWMgcGFyc2UgZnJvbSB0aGUgQklPUyBjb25maWcgKi8KIAkJZXJyID0gYWxjODYxdmRfcGFyc2VfYXV0b19jb25maWcoY29kZWMpOwpAQCAtMTY4NTIsNiArMTY5MDAsNyBAQAogCVNORF9QQ0lfUVVJUksoMHgxMDViLCAweDBjZDYsICJGb3hjb25uIiwgQUxDNjYyX0VDUyksCiAJU05EX1BDSV9RVUlSSygweDEwNWIsIDB4MGQ0NywgIkZveGNvbm4gNDVDTVgvNDVHTVgvNDVDTVgtSyIsCiAJCSAgICAgIEFMQzY2Ml8zU1RfNmNoX0RJRyksCisJU05EX1BDSV9RVUlSSygweDExNzksIDB4ZmY2ZSwgIlRvc2hpYmEgTkIyMDAiLCBBTEM2NjNfQVNVU19NT0RFNCksCiAJU05EX1BDSV9RVUlSSygweDE0NGQsIDB4Y2EwMCwgIlNhbXN1bmcgTkMxMCIsIEFMQzI3Ml9TQU1TVU5HX05DMTApLAogCVNORF9QQ0lfUVVJUksoMHgxNDU4LCAweGEwMDIsICJHaWdhYnl0ZSA5NDVHQ00tUzJMIiwKIAkJICAgICAgQUxDNjYyXzNTVF82Y2hfRElHKSwKQEAgLTE3MTQ1LDcwICsxNzE5NCwxNDUgQEAKICAqIEJJT1MgYXV0byBjb25maWd1cmF0aW9uCiAgKi8KIAotLyogYWRkIHBsYXliYWNrIGNvbnRyb2xzIGZyb20gdGhlIHBhcnNlZCBEQUMgdGFibGUgKi8KLXN0YXRpYyBpbnQgYWxjNjYyX2F1dG9fY3JlYXRlX211bHRpX291dF9jdGxzKHN0cnVjdCBhbGNfc3BlYyAqc3BlYywKLQkJCQkJICAgICBjb25zdCBzdHJ1Y3QgYXV0b19waW5fY2ZnICpjZmcpCisvKiBjb252ZXJ0IGZyb20gTUlYIG5pZCB0byBEQUMgKi8KK3N0YXRpYyBpbmxpbmUgaGRhX25pZF90IGFsYzY2Ml9taXhfdG9fZGFjKGhkYV9uaWRfdCBuaWQpCit7CisJaWYgKG5pZCA9PSAweDBmKQorCQlyZXR1cm4gMHgwMjsKKwllbHNlIGlmIChuaWQgPj0gMHgwYyAmJiBuaWQgPD0gMHgwZSkKKwkJcmV0dXJuIG5pZCAtIDB4MGMgKyAweDAyOworCWVsc2UKKwkJcmV0dXJuIDA7Cit9CisKKy8qIGdldCBNSVggbmlkIGNvbm5lY3RlZCB0byB0aGUgZ2l2ZW4gcGluIHRhcmdldGVkIHRvIERBQyAqLworc3RhdGljIGhkYV9uaWRfdCBhbGM2NjJfZGFjX3RvX21peChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IHBpbiwKKwkJCQkgICBoZGFfbmlkX3QgZGFjKQoreworCWhkYV9uaWRfdCBtaXhbNF07CisJaW50IGksIG51bTsKKworCW51bSA9IHNuZF9oZGFfZ2V0X2Nvbm5lY3Rpb25zKGNvZGVjLCBwaW4sIG1peCwgQVJSQVlfU0laRShtaXgpKTsKKwlmb3IgKGkgPSAwOyBpIDwgbnVtOyBpKyspIHsKKwkJaWYgKGFsYzY2Ml9taXhfdG9fZGFjKG1peFtpXSkgPT0gZGFjKQorCQkJcmV0dXJuIG1peFtpXTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qIGxvb2sgZm9yIGFuIGVtcHR5IERBQyBzbG90ICovCitzdGF0aWMgaGRhX25pZF90IGFsYzY2Ml9sb29rX2Zvcl9kYWMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBwaW4pCit7CisJc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisJaGRhX25pZF90IHNyY3NbNV07CisJaW50IGksIGosIG51bTsKKworCW51bSA9IHNuZF9oZGFfZ2V0X2Nvbm5lY3Rpb25zKGNvZGVjLCBwaW4sIHNyY3MsIEFSUkFZX1NJWkUoc3JjcykpOworCWlmIChudW0gPCAwKQorCQlyZXR1cm4gMDsKKwlmb3IgKGkgPSAwOyBpIDwgbnVtOyBpKyspIHsKKwkJaGRhX25pZF90IG5pZCA9IGFsYzY2Ml9taXhfdG9fZGFjKHNyY3NbaV0pOworCQlpZiAoIW5pZCkKKwkJCWNvbnRpbnVlOworCQlmb3IgKGogPSAwOyBqIDwgc3BlYy0+bXVsdGlvdXQubnVtX2RhY3M7IGorKykKKwkJCWlmIChzcGVjLT5tdWx0aW91dC5kYWNfbmlkc1tqXSA9PSBuaWQpCisJCQkJYnJlYWs7CisJCWlmIChqID49IHNwZWMtPm11bHRpb3V0Lm51bV9kYWNzKQorCQkJcmV0dXJuIG5pZDsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qIGZpbGwgaW4gdGhlIGRhY19uaWRzIHRhYmxlIGZyb20gdGhlIHBhcnNlZCBwaW4gY29uZmlndXJhdGlvbiAqLworc3RhdGljIGludCBhbGM2NjJfYXV0b19maWxsX2RhY19uaWRzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAorCQkJCSAgICAgY29uc3Qgc3RydWN0IGF1dG9fcGluX2NmZyAqY2ZnKQoreworCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCWludCBpOworCWhkYV9uaWRfdCBkYWM7CisKKwlzcGVjLT5tdWx0aW91dC5kYWNfbmlkcyA9IHNwZWMtPnByaXZhdGVfZGFjX25pZHM7CisJZm9yIChpID0gMDsgaSA8IGNmZy0+bGluZV9vdXRzOyBpKyspIHsKKwkJZGFjID0gYWxjNjYyX2xvb2tfZm9yX2RhYyhjb2RlYywgY2ZnLT5saW5lX291dF9waW5zW2ldKTsKKwkJaWYgKCFkYWMpCisJCQljb250aW51ZTsKKwkJc3BlYy0+bXVsdGlvdXQuZGFjX25pZHNbc3BlYy0+bXVsdGlvdXQubnVtX2RhY3MrK10gPSBkYWM7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFsYzY2Ml9hZGRfdm9sX2N0bChzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMsIGNvbnN0IGNoYXIgKnBmeCwKKwkJCSAgICAgIGhkYV9uaWRfdCBuaWQsIHVuc2lnbmVkIGludCBjaHMpCiB7CiAJY2hhciBuYW1lWzMyXTsKKwlzcHJpbnRmKG5hbWUsICIlcyBQbGF5YmFjayBWb2x1bWUiLCBwZngpOworCXJldHVybiBhZGRfY29udHJvbChzcGVjLCBBTENfQ1RMX1dJREdFVF9WT0wsIG5hbWUsCisJCQkgICBIREFfQ09NUE9TRV9BTVBfVkFMKG5pZCwgY2hzLCAwLCBIREFfT1VUUFVUKSk7Cit9CisKK3N0YXRpYyBpbnQgYWxjNjYyX2FkZF9zd19jdGwoc3RydWN0IGFsY19zcGVjICpzcGVjLCBjb25zdCBjaGFyICpwZngsCisJCQkgICAgIGhkYV9uaWRfdCBuaWQsIHVuc2lnbmVkIGludCBjaHMpCit7CisJY2hhciBuYW1lWzMyXTsKKwlzcHJpbnRmKG5hbWUsICIlcyBQbGF5YmFjayBTd2l0Y2giLCBwZngpOworCXJldHVybiBhZGRfY29udHJvbChzcGVjLCBBTENfQ1RMX1dJREdFVF9NVVRFLCBuYW1lLAorCQkJICAgSERBX0NPTVBPU0VfQU1QX1ZBTChuaWQsIGNocywgMCwgSERBX0lOUFVUKSk7Cit9CisKKyNkZWZpbmUgYWxjNjYyX2FkZF9zdGVyZW9fdm9sKHNwZWMsIHBmeCwgbmlkKSBcCisJYWxjNjYyX2FkZF92b2xfY3RsKHNwZWMsIHBmeCwgbmlkLCAzKQorI2RlZmluZSBhbGM2NjJfYWRkX3N0ZXJlb19zdyhzcGVjLCBwZngsIG5pZCkgXAorCWFsYzY2Ml9hZGRfc3dfY3RsKHNwZWMsIHBmeCwgbmlkLCAzKQorCisvKiBhZGQgcGxheWJhY2sgY29udHJvbHMgZnJvbSB0aGUgcGFyc2VkIERBQyB0YWJsZSAqLworc3RhdGljIGludCBhbGM2NjJfYXV0b19jcmVhdGVfbXVsdGlfb3V0X2N0bHMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCisJCQkJCSAgICAgY29uc3Qgc3RydWN0IGF1dG9fcGluX2NmZyAqY2ZnKQoreworCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwogCXN0YXRpYyBjb25zdCBjaGFyICpjaG5hbWVbNF0gPSB7CiAJCSJGcm9udCIsICJTdXJyb3VuZCIsIE5VTEwgLypDTEZFKi8sICJTaWRlIgogCX07Ci0JaGRhX25pZF90IG5pZDsKKwloZGFfbmlkX3QgbmlkLCBtaXg7CiAJaW50IGksIGVycjsKIAogCWZvciAoaSA9IDA7IGkgPCBjZmctPmxpbmVfb3V0czsgaSsrKSB7Ci0JCWlmICghc3BlYy0+bXVsdGlvdXQuZGFjX25pZHNbaV0pCisJCW5pZCA9IHNwZWMtPm11bHRpb3V0LmRhY19uaWRzW2ldOworCQlpZiAoIW5pZCkKIAkJCWNvbnRpbnVlOwotCQluaWQgPSBhbGM4ODBfaWR4X3RvX2RhYyhpKTsKKwkJbWl4ID0gYWxjNjYyX2RhY190b19taXgoY29kZWMsIGNmZy0+bGluZV9vdXRfcGluc1tpXSwgbmlkKTsKKwkJaWYgKCFtaXgpCisJCQljb250aW51ZTsKIAkJaWYgKGkgPT0gMikgewogCQkJLyogQ2VudGVyL0xGRSAqLwotCQkJZXJyID0gYWRkX2NvbnRyb2woc3BlYywgQUxDX0NUTF9XSURHRVRfVk9MLAotCQkJCQkgICJDZW50ZXIgUGxheWJhY2sgVm9sdW1lIiwKLQkJCQkJICBIREFfQ09NUE9TRV9BTVBfVkFMKG5pZCwgMSwgMCwKLQkJCQkJCQkgICAgICBIREFfT1VUUFVUKSk7CisJCQllcnIgPSBhbGM2NjJfYWRkX3ZvbF9jdGwoc3BlYywgIkNlbnRlciIsIG5pZCwgMSk7CiAJCQlpZiAoZXJyIDwgMCkKIAkJCQlyZXR1cm4gZXJyOwotCQkJZXJyID0gYWRkX2NvbnRyb2woc3BlYywgQUxDX0NUTF9XSURHRVRfVk9MLAotCQkJCQkgICJMRkUgUGxheWJhY2sgVm9sdW1lIiwKLQkJCQkJICBIREFfQ09NUE9TRV9BTVBfVkFMKG5pZCwgMiwgMCwKLQkJCQkJCQkgICAgICBIREFfT1VUUFVUKSk7CisJCQllcnIgPSBhbGM2NjJfYWRkX3ZvbF9jdGwoc3BlYywgIkxGRSIsIG5pZCwgMik7CiAJCQlpZiAoZXJyIDwgMCkKIAkJCQlyZXR1cm4gZXJyOwotCQkJZXJyID0gYWRkX2NvbnRyb2woc3BlYywgQUxDX0NUTF9XSURHRVRfTVVURSwKLQkJCQkJICAiQ2VudGVyIFBsYXliYWNrIFN3aXRjaCIsCi0JCQkJCSAgSERBX0NPTVBPU0VfQU1QX1ZBTCgweDBlLCAxLCAwLAotCQkJCQkJCSAgICAgIEhEQV9JTlBVVCkpOworCQkJZXJyID0gYWxjNjYyX2FkZF9zd19jdGwoc3BlYywgIkNlbnRlciIsIG1peCwgMSk7CiAJCQlpZiAoZXJyIDwgMCkKIAkJCQlyZXR1cm4gZXJyOwotCQkJZXJyID0gYWRkX2NvbnRyb2woc3BlYywgQUxDX0NUTF9XSURHRVRfTVVURSwKLQkJCQkJICAiTEZFIFBsYXliYWNrIFN3aXRjaCIsCi0JCQkJCSAgSERBX0NPTVBPU0VfQU1QX1ZBTCgweDBlLCAyLCAwLAotCQkJCQkJCSAgICAgIEhEQV9JTlBVVCkpOworCQkJZXJyID0gYWxjNjYyX2FkZF9zd19jdGwoc3BlYywgIkxGRSIsIG1peCwgMik7CiAJCQlpZiAoZXJyIDwgMCkKIAkJCQlyZXR1cm4gZXJyOwogCQl9IGVsc2UgewogCQkJY29uc3QgY2hhciAqcGZ4OwogCQkJaWYgKGNmZy0+bGluZV9vdXRzID09IDEgJiYKIAkJCSAgICBjZmctPmxpbmVfb3V0X3R5cGUgPT0gQVVUT19QSU5fU1BFQUtFUl9PVVQpIHsKLQkJCQlpZiAoIWNmZy0+aHBfcGlucykKKwkJCQlpZiAoY2ZnLT5ocF9vdXRzKQogCQkJCQlwZnggPSAiU3BlYWtlciI7CiAJCQkJZWxzZQogCQkJCQlwZnggPSAiUENNIjsKIAkJCX0gZWxzZQogCQkJCXBmeCA9IGNobmFtZVtpXTsKLQkJCXNwcmludGYobmFtZSwgIiVzIFBsYXliYWNrIFZvbHVtZSIsIHBmeCk7Ci0JCQllcnIgPSBhZGRfY29udHJvbChzcGVjLCBBTENfQ1RMX1dJREdFVF9WT0wsIG5hbWUsCi0JCQkJCSAgSERBX0NPTVBPU0VfQU1QX1ZBTChuaWQsIDMsIDAsCi0JCQkJCQkJICAgICAgSERBX09VVFBVVCkpOworCQkJZXJyID0gYWxjNjYyX2FkZF92b2xfY3RsKHNwZWMsIHBmeCwgbmlkLCAzKTsKIAkJCWlmIChlcnIgPCAwKQogCQkJCXJldHVybiBlcnI7CiAJCQlpZiAoY2ZnLT5saW5lX291dHMgPT0gMSAmJgogCQkJICAgIGNmZy0+bGluZV9vdXRfdHlwZSA9PSBBVVRPX1BJTl9TUEVBS0VSX09VVCkKIAkJCQlwZnggPSAiU3BlYWtlciI7Ci0JCQlzcHJpbnRmKG5hbWUsICIlcyBQbGF5YmFjayBTd2l0Y2giLCBwZngpOwotCQkJZXJyID0gYWRkX2NvbnRyb2woc3BlYywgQUxDX0NUTF9XSURHRVRfTVVURSwgbmFtZSwKLQkJCQlIREFfQ09NUE9TRV9BTVBfVkFMKGFsYzg4MF9pZHhfdG9fbWl4ZXIoaSksCi0JCQkJCQkgICAgMywgMCwgSERBX0lOUFVUKSk7CisJCQllcnIgPSBhbGM2NjJfYWRkX3N3X2N0bChzcGVjLCBwZngsIG1peCwgMyk7CiAJCQlpZiAoZXJyIDwgMCkKIAkJCQlyZXR1cm4gZXJyOwogCQl9CkBAIC0xNzIxNyw4NiArMTczNDEsNzUgQEAKIH0KIAogLyogYWRkIHBsYXliYWNrIGNvbnRyb2xzIGZvciBzcGVha2VyIGFuZCBIUCBvdXRwdXRzICovCi1zdGF0aWMgaW50IGFsYzY2Ml9hdXRvX2NyZWF0ZV9leHRyYV9vdXQoc3RydWN0IGFsY19zcGVjICpzcGVjLCBoZGFfbmlkX3QgcGluLAorLyogcmV0dXJuIERBQyBuaWQgaWYgYW55IG5ldyBEQUMgaXMgYXNzaWduZWQgKi8KK3N0YXRpYyBpbnQgYWxjNjYyX2F1dG9fY3JlYXRlX2V4dHJhX291dChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IHBpbiwKIAkJCQkJY29uc3QgY2hhciAqcGZ4KQogewotCWhkYV9uaWRfdCBuaWQ7CisJc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisJaGRhX25pZF90IG5pZCwgbWl4OwogCWludCBlcnI7Ci0JY2hhciBuYW1lWzMyXTsKIAogCWlmICghcGluKQogCQlyZXR1cm4gMDsKLQotCWlmIChwaW4gPT0gMHgxNykgewotCQkvKiBBTEM2NjMgaGFzIGEgbW9ubyBvdXRwdXQgcGluIG9uIDB4MTcgKi8KKwluaWQgPSBhbGM2NjJfbG9va19mb3JfZGFjKGNvZGVjLCBwaW4pOworCWlmICghbmlkKSB7CisJCWNoYXIgbmFtZVszMl07CisJCS8qIHRoZSBjb3JyZXNwb25kaW5nIERBQyBpcyBhbHJlYWR5IG9jY3VwaWVkICovCisJCWlmICghKGdldF93Y2Fwcyhjb2RlYywgcGluKSAmIEFDX1dDQVBfT1VUX0FNUCkpCisJCQlyZXR1cm4gMDsgLyogbm8gd2F5ICovCisJCS8qIGNyZWF0ZSBhIHN3aXRjaCBvbmx5ICovCiAJCXNwcmludGYobmFtZSwgIiVzIFBsYXliYWNrIFN3aXRjaCIsIHBmeCk7Ci0JCWVyciA9IGFkZF9jb250cm9sKHNwZWMsIEFMQ19DVExfV0lER0VUX01VVEUsIG5hbWUsCi0JCQkJICBIREFfQ09NUE9TRV9BTVBfVkFMKHBpbiwgMiwgMCwgSERBX09VVFBVVCkpOworCQlyZXR1cm4gYWRkX2NvbnRyb2woc3BlYywgQUxDX0NUTF9XSURHRVRfTVVURSwgbmFtZSwKKwkJCQkgICBIREFfQ09NUE9TRV9BTVBfVkFMKHBpbiwgMywgMCwgSERBX09VVFBVVCkpOworCX0KKworCW1peCA9IGFsYzY2Ml9kYWNfdG9fbWl4KGNvZGVjLCBwaW4sIG5pZCk7CisJaWYgKCFtaXgpCisJCXJldHVybiAwOworCWVyciA9IGFsYzY2Ml9hZGRfdm9sX2N0bChzcGVjLCBwZngsIG5pZCwgMyk7CisJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7Ci0JfQotCi0JaWYgKGFsYzg4MF9pc19maXhlZF9waW4ocGluKSkgewotCQluaWQgPSBhbGM4ODBfaWR4X3RvX2RhYyhhbGM4ODBfZml4ZWRfcGluX2lkeChwaW4pKTsKLQkJLyogcHJpbnRrKEtFUk5fREVCVUcgIkRBQyBuaWQ9JXhcbiIsbmlkKTsgKi8KLQkJLyogc3BlY2lmeSB0aGUgREFDIGFzIHRoZSBleHRyYSBvdXRwdXQgKi8KLQkJaWYgKCFzcGVjLT5tdWx0aW91dC5ocF9uaWQpCi0JCQlzcGVjLT5tdWx0aW91dC5ocF9uaWQgPSBuaWQ7Ci0JCWVsc2UKLQkJCXNwZWMtPm11bHRpb3V0LmV4dHJhX291dF9uaWRbMF0gPSBuaWQ7Ci0JCS8qIGNvbnRyb2wgSFAgdm9sdW1lL3N3aXRjaCBvbiB0aGUgb3V0cHV0IG1peGVyIGFtcCAqLwotCQluaWQgPSBhbGM4ODBfaWR4X3RvX2RhYyhhbGM4ODBfZml4ZWRfcGluX2lkeChwaW4pKTsKLQkJc3ByaW50ZihuYW1lLCAiJXMgUGxheWJhY2sgVm9sdW1lIiwgcGZ4KTsKLQkJZXJyID0gYWRkX2NvbnRyb2woc3BlYywgQUxDX0NUTF9XSURHRVRfVk9MLCBuYW1lLAotCQkJCSAgSERBX0NPTVBPU0VfQU1QX1ZBTChuaWQsIDMsIDAsIEhEQV9PVVRQVVQpKTsKLQkJaWYgKGVyciA8IDApCi0JCQlyZXR1cm4gZXJyOwotCQlzcHJpbnRmKG5hbWUsICIlcyBQbGF5YmFjayBTd2l0Y2giLCBwZngpOwotCQllcnIgPSBhZGRfY29udHJvbChzcGVjLCBBTENfQ1RMX0JJTkRfTVVURSwgbmFtZSwKLQkJCQkgIEhEQV9DT01QT1NFX0FNUF9WQUwobmlkLCAzLCAyLCBIREFfSU5QVVQpKTsKLQkJaWYgKGVyciA8IDApCi0JCQlyZXR1cm4gZXJyOwotCX0gZWxzZSBpZiAoYWxjODgwX2lzX211bHRpX3BpbihwaW4pKSB7Ci0JCS8qIHNldCBtYW51YWwgY29ubmVjdGlvbiAqLwotCQkvKiB3ZSBoYXZlIG9ubHkgYSBzd2l0Y2ggb24gSFAtb3V0IFBJTiAqLwotCQlzcHJpbnRmKG5hbWUsICIlcyBQbGF5YmFjayBTd2l0Y2giLCBwZngpOwotCQllcnIgPSBhZGRfY29udHJvbChzcGVjLCBBTENfQ1RMX1dJREdFVF9NVVRFLCBuYW1lLAotCQkJCSAgSERBX0NPTVBPU0VfQU1QX1ZBTChwaW4sIDMsIDAsIEhEQV9PVVRQVVQpKTsKLQkJaWYgKGVyciA8IDApCi0JCQlyZXR1cm4gZXJyOwotCX0KLQlyZXR1cm4gMDsKKwllcnIgPSBhbGM2NjJfYWRkX3N3X2N0bChzcGVjLCBwZngsIG1peCwgMyk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisJcmV0dXJuIG5pZDsKIH0KIAogLyogY3JlYXRlIHBsYXliYWNrL2NhcHR1cmUgY29udHJvbHMgZm9yIGlucHV0IHBpbnMgKi8KICNkZWZpbmUgYWxjNjYyX2F1dG9fY3JlYXRlX2lucHV0X2N0bHMgXAotCWFsYzg4MF9hdXRvX2NyZWF0ZV9pbnB1dF9jdGxzCisJYWxjODgyX2F1dG9fY3JlYXRlX2lucHV0X2N0bHMKIAogc3RhdGljIHZvaWQgYWxjNjYyX2F1dG9fc2V0X291dHB1dF9hbmRfdW5tdXRlKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAogCQkJCQkgICAgICBoZGFfbmlkX3QgbmlkLCBpbnQgcGluX3R5cGUsCi0JCQkJCSAgICAgIGludCBkYWNfaWR4KQorCQkJCQkgICAgICBoZGFfbmlkX3QgZGFjKQogeworCWludCBpLCBudW07CisJaGRhX25pZF90IHNyY3NbNF07CisKIAlhbGNfc2V0X3Bpbl9vdXRwdXQoY29kZWMsIG5pZCwgcGluX3R5cGUpOwogCS8qIG5lZWQgdGhlIG1hbnVhbCBjb25uZWN0aW9uPyAqLwotCWlmIChhbGM4ODBfaXNfbXVsdGlfcGluKG5pZCkpIHsKLQkJc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7Ci0JCWludCBpZHggPSBhbGM4ODBfbXVsdGlfcGluX2lkeChuaWQpOwotCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBhbGM4ODBfaWR4X3RvX3NlbGVjdG9yKGlkeCksIDAsCi0JCQkJICAgIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLAotCQkJCSAgICBhbGM4ODBfZGFjX3RvX2lkeChzcGVjLT5tdWx0aW91dC5kYWNfbmlkc1tkYWNfaWR4XSkpOworCW51bSA9IHNuZF9oZGFfZ2V0X2Nvbm5lY3Rpb25zKGNvZGVjLCBuaWQsIHNyY3MsIEFSUkFZX1NJWkUoc3JjcykpOworCWlmIChudW0gPD0gMSkKKwkJcmV0dXJuOworCWZvciAoaSA9IDA7IGkgPCBudW07IGkrKykgeworCQlpZiAoYWxjNjYyX21peF90b19kYWMoc3Jjc1tpXSkgIT0gZGFjKQorCQkJY29udGludWU7CisJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIG5pZCwgMCwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIGkpOworCQlyZXR1cm47CiAJfQogfQogCiBzdGF0aWMgdm9pZCBhbGM2NjJfYXV0b19pbml0X211bHRpX291dChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKIAlzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKwlpbnQgcGluX3R5cGUgPSBnZXRfcGluX3R5cGUoc3BlYy0+YXV0b2NmZy5saW5lX291dF90eXBlKTsKIAlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPD0gSERBX1NJREU7IGkrKykgewogCQloZGFfbmlkX3QgbmlkID0gc3BlYy0+YXV0b2NmZy5saW5lX291dF9waW5zW2ldOwotCQlpbnQgcGluX3R5cGUgPSBnZXRfcGluX3R5cGUoc3BlYy0+YXV0b2NmZy5saW5lX291dF90eXBlKTsKIAkJaWYgKG5pZCkKIAkJCWFsYzY2Ml9hdXRvX3NldF9vdXRwdXRfYW5kX3VubXV0ZShjb2RlYywgbmlkLCBwaW5fdHlwZSwKLQkJCQkJCQkgIGkpOworCQkJCQlzcGVjLT5tdWx0aW91dC5kYWNfbmlkc1tpXSk7CiAJfQogfQogCkBAIC0xNzMwNiwxMiArMTc0MTksMTMgQEAKIAloZGFfbmlkX3QgcGluOwogCiAJcGluID0gc3BlYy0+YXV0b2NmZy5ocF9waW5zWzBdOwotCWlmIChwaW4pIC8qIGNvbm5lY3QgdG8gZnJvbnQgKi8KLQkJLyogdXNlIGRhYyAwICovCi0JCWFsYzY2Ml9hdXRvX3NldF9vdXRwdXRfYW5kX3VubXV0ZShjb2RlYywgcGluLCBQSU5fSFAsIDApOworCWlmIChwaW4pCisJCWFsYzY2Ml9hdXRvX3NldF9vdXRwdXRfYW5kX3VubXV0ZShjb2RlYywgcGluLCBQSU5fSFAsCisJCQkJCQkgIHNwZWMtPm11bHRpb3V0LmhwX25pZCk7CiAJcGluID0gc3BlYy0+YXV0b2NmZy5zcGVha2VyX3BpbnNbMF07CiAJaWYgKHBpbikKLQkJYWxjNjYyX2F1dG9fc2V0X291dHB1dF9hbmRfdW5tdXRlKGNvZGVjLCBwaW4sIFBJTl9PVVQsIDApOworCQlhbGM2NjJfYXV0b19zZXRfb3V0cHV0X2FuZF91bm11dGUoY29kZWMsIHBpbiwgUElOX09VVCwKKwkJCQkJc3BlYy0+bXVsdGlvdXQuZXh0cmFfb3V0X25pZFswXSk7CiB9CiAKICNkZWZpbmUgQUxDNjYyX1BJTl9DRF9OSUQJCUFMQzg4MF9QSU5fQ0RfTklECkBAIC0xNzM0OSwyMSArMTc0NjMsMjUgQEAKIAlpZiAoIXNwZWMtPmF1dG9jZmcubGluZV9vdXRzKQogCQlyZXR1cm4gMDsgLyogY2FuJ3QgZmluZCB2YWxpZCBCSU9TIHBpbiBjb25maWcgKi8KIAotCWVyciA9IGFsYzg4MF9hdXRvX2ZpbGxfZGFjX25pZHMoc3BlYywgJnNwZWMtPmF1dG9jZmcpOworCWVyciA9IGFsYzY2Ml9hdXRvX2ZpbGxfZGFjX25pZHMoY29kZWMsICZzcGVjLT5hdXRvY2ZnKTsKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKLQllcnIgPSBhbGM2NjJfYXV0b19jcmVhdGVfbXVsdGlfb3V0X2N0bHMoc3BlYywgJnNwZWMtPmF1dG9jZmcpOworCWVyciA9IGFsYzY2Ml9hdXRvX2NyZWF0ZV9tdWx0aV9vdXRfY3Rscyhjb2RlYywgJnNwZWMtPmF1dG9jZmcpOwogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwotCWVyciA9IGFsYzY2Ml9hdXRvX2NyZWF0ZV9leHRyYV9vdXQoc3BlYywKKwllcnIgPSBhbGM2NjJfYXV0b19jcmVhdGVfZXh0cmFfb3V0KGNvZGVjLAogCQkJCQkgICBzcGVjLT5hdXRvY2ZnLnNwZWFrZXJfcGluc1swXSwKIAkJCQkJICAgIlNwZWFrZXIiKTsKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKLQllcnIgPSBhbGM2NjJfYXV0b19jcmVhdGVfZXh0cmFfb3V0KHNwZWMsIHNwZWMtPmF1dG9jZmcuaHBfcGluc1swXSwKKwlpZiAoZXJyKQorCQlzcGVjLT5tdWx0aW91dC5leHRyYV9vdXRfbmlkWzBdID0gZXJyOworCWVyciA9IGFsYzY2Ml9hdXRvX2NyZWF0ZV9leHRyYV9vdXQoY29kZWMsIHNwZWMtPmF1dG9jZmcuaHBfcGluc1swXSwKIAkJCQkJICAgIkhlYWRwaG9uZSIpOwogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOworCWlmIChlcnIpCisJCXNwZWMtPm11bHRpb3V0LmhwX25pZCA9IGVycjsKIAllcnIgPSBhbGM2NjJfYXV0b19jcmVhdGVfaW5wdXRfY3Rscyhjb2RlYywgJnNwZWMtPmF1dG9jZmcpOwogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9wYXRjaF9zaWdtYXRlbC5jIGIvc291bmQvcGNpL2hkYS9wYXRjaF9zaWdtYXRlbC5jCmluZGV4IDgyNjEzN2UuLjY2YzA4NzYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfc2lnbWF0ZWwuYworKysgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX3NpZ21hdGVsLmMKQEAgLTE1OCw2ICsxNTgsNyBAQAogCVNUQUNfRDk2NV81U1RfTk9fRlAsCiAJU1RBQ19ERUxMXzNTVCwKIAlTVEFDX0RFTExfQklPUywKKwlTVEFDXzkyN1hfVk9MS05PQiwKIAlTVEFDXzkyN1hfTU9ERUxTCiB9OwogCkBAIC0xODIsOCArMTgzLDggQEAKIAogc3RydWN0IHNpZ21hdGVsX21pY19yb3V0ZSB7CiAJaGRhX25pZF90IHBpbjsKLQl1bnNpZ25lZCBjaGFyIG11eF9pZHg7Ci0JdW5zaWduZWQgY2hhciBkbXV4X2lkeDsKKwlzaWduZWQgY2hhciBtdXhfaWR4OworCXNpZ25lZCBjaGFyIGRtdXhfaWR4OwogfTsKIAogc3RydWN0IHNpZ21hdGVsX3NwZWMgewpAQCAtOTA3LDYgKzkwOCwxNiBAQAogCXt9CiB9OwogCitzdGF0aWMgc3RydWN0IGhkYV92ZXJiIGRlbGxfM3N0X2NvcmVfaW5pdFtdID0geworCS8qIGRvbid0IHNldCBkZWx0YSBiaXQgKi8KKwl7MHgyNCwgQUNfVkVSQl9TRVRfVk9MVU1FX0tOT0JfQ09OVFJPTCwgMHg3Zn0sCisJLyogdW5tdXRlIG5vZGUgMHgxYiAqLworCXsweDFiLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCAweGIwMDB9LAorCS8qIHNlbGVjdCBub2RlIDB4MDMgYXMgREFDICovCisJezB4MGIsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAxfSwKKwl7fQorfTsKKwogc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBzdGFjOTI3eF9jb3JlX2luaXRbXSA9IHsKIAkvKiBzZXQgbWFzdGVyIHZvbHVtZSBhbmQgZGlyZWN0IGNvbnRyb2wgKi8JCiAJeyAweDI0LCBBQ19WRVJCX1NFVF9WT0xVTUVfS05PQl9DT05UUk9MLCAweGZmfSwKQEAgLTkxNSw2ICs5MjYsMTQgQEAKIAl7fQogfTsKIAorc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBzdGFjOTI3eF92b2xrbm9iX2NvcmVfaW5pdFtdID0geworCS8qIGRvbid0IHNldCBkZWx0YSBiaXQgKi8KKwl7MHgyNCwgQUNfVkVSQl9TRVRfVk9MVU1FX0tOT0JfQ09OVFJPTCwgMHg3Zn0sCisJLyogZW5hYmxlIGFuYWxvZyBwYyBiZWVwIHBhdGggKi8KKwl7MHgwMSwgQUNfVkVSQl9TRVRfRElHSV9DT05WRVJUXzIsIDEgPDwgNX0sCisJe30KK307CisKIHN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgc3RhYzkyMDVfY29yZV9pbml0W10gPSB7CiAJLyogc2V0IG1hc3RlciB2b2x1bWUgYW5kIGRpcmVjdCBjb250cm9sICovCQogCXsgMHgyNCwgQUNfVkVSQl9TRVRfVk9MVU1FX0tOT0JfQ09OVFJPTCwgMHhmZn0sCkBAIC0xOTk5LDYgKzIwMTgsNyBAQAogCVtTVEFDX0Q5NjVfNVNUX05PX0ZQXSAgPSBkOTY1XzVzdF9ub19mcF9waW5fY29uZmlncywKIAlbU1RBQ19ERUxMXzNTVF0gID0gZGVsbF8zc3RfcGluX2NvbmZpZ3MsCiAJW1NUQUNfREVMTF9CSU9TXSA9IE5VTEwsCisJW1NUQUNfOTI3WF9WT0xLTk9CXSA9IE5VTEwsCiB9OwogCiBzdGF0aWMgY29uc3QgY2hhciAqc3RhYzkyN3hfbW9kZWxzW1NUQUNfOTI3WF9NT0RFTFNdID0gewpAQCAtMjAxMCw2ICsyMDMwLDcgQEAKIAlbU1RBQ19EOTY1XzVTVF9OT19GUF0JPSAiNXN0YWNrLW5vLWZwIiwKIAlbU1RBQ19ERUxMXzNTVF0JCT0gImRlbGwtM3N0YWNrIiwKIAlbU1RBQ19ERUxMX0JJT1NdCT0gImRlbGwtYmlvcyIsCisJW1NUQUNfOTI3WF9WT0xLTk9CXQk9ICJ2b2xrbm9iIiwKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX3BjaV9xdWlyayBzdGFjOTI3eF9jZmdfdGJsW10gPSB7CkBAIC0yMDQ1LDYgKzIwNjYsOCBAQAogCQkJICAgIkludGVsIEQ5NjUiLCBTVEFDX0Q5NjVfNVNUKSwKIAlTTkRfUENJX1FVSVJLX01BU0soUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHhmZjAwLCAweDI1MDAsCiAJCQkgICAiSW50ZWwgRDk2NSIsIFNUQUNfRDk2NV81U1QpLAorCS8qIHZvbHVtZS1rbm9iIGZpeGVzICovCisJU05EX1BDSV9RVUlSS19WRU5ET1IoMHgxMGNmLCAiRlNDIiwgU1RBQ185MjdYX1ZPTEtOT0IpLAogCXt9IC8qIHRlcm1pbmF0b3IgKi8KIH07CiAKQEAgLTM0NjksMTggKzM0OTIsMjYgQEAKIAkJCWJyZWFrOwogCWlmIChpIDw9IEFVVE9fUElOX0ZST05UX01JQykgewogCQkvKiBhbmFsb2cgcGluICovCi0JCW1pYy0+ZG11eF9pZHggPSAwOwogCQlpID0gZ2V0X2Nvbm5lY3Rpb25faW5kZXgoY29kZWMsIHNwZWMtPm11eF9uaWRzWzBdLCBwaW4pOwogCQlpZiAoaSA8IDApCiAJCQlyZXR1cm4gLTE7CiAJCW1pYy0+bXV4X2lkeCA9IGk7CisJCW1pYy0+ZG11eF9pZHggPSAtMTsKKwkJaWYgKHNwZWMtPmRtdXhfbmlkcykKKwkJCW1pYy0+ZG11eF9pZHggPSBnZXRfY29ubmVjdGlvbl9pbmRleChjb2RlYywKKwkJCQkJCQkgICAgIHNwZWMtPmRtdXhfbmlkc1swXSwKKwkJCQkJCQkgICAgIHNwZWMtPm11eF9uaWRzWzBdKTsKIAl9ICBlbHNlIGlmIChzcGVjLT5kbXV4X25pZHMpIHsKIAkJLyogZGlnaXRhbCBwaW4gKi8KLQkJbWljLT5tdXhfaWR4ID0gMDsKIAkJaSA9IGdldF9jb25uZWN0aW9uX2luZGV4KGNvZGVjLCBzcGVjLT5kbXV4X25pZHNbMF0sIHBpbik7CiAJCWlmIChpIDwgMCkKIAkJCXJldHVybiAtMTsKIAkJbWljLT5kbXV4X2lkeCA9IGk7CisJCW1pYy0+bXV4X2lkeCA9IC0xOworCQlpZiAoc3BlYy0+bXV4X25pZHMpCisJCQltaWMtPm11eF9pZHggPSBnZXRfY29ubmVjdGlvbl9pbmRleChjb2RlYywKKwkJCQkJCQkgICAgc3BlYy0+bXV4X25pZHNbMF0sCisJCQkJCQkJICAgIHNwZWMtPmRtdXhfbmlkc1swXSk7CiAJfQogCXJldHVybiAwOwogfQpAQCAtNDU1NywxMSArNDU4OCwxMSBAQAogCQltaWMgPSAmc3BlYy0+ZXh0X21pYzsKIAllbHNlCiAJCW1pYyA9ICZzcGVjLT5pbnRfbWljOwotCWlmIChtaWMtPmRtdXhfaWR4KQorCWlmIChtaWMtPmRtdXhfaWR4ID49IDApCiAJCXNuZF9oZGFfY29kZWNfd3JpdGVfY2FjaGUoY29kZWMsIHNwZWMtPmRtdXhfbmlkc1swXSwgMCwKIAkJCQkJICBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwKIAkJCQkJICBtaWMtPmRtdXhfaWR4KTsKLQllbHNlCisJaWYgKG1pYy0+bXV4X2lkeCA+PSAwKQogCQlzbmRfaGRhX2NvZGVjX3dyaXRlX2NhY2hlKGNvZGVjLCBzcGVjLT5tdXhfbmlkc1swXSwgMCwKIAkJCQkJICBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwKIAkJCQkJICBtaWMtPm11eF9pZHgpOwpAQCAtNTYwNCwxMCArNTYzNSwxNCBAQAogCQlzcGVjLT5kbWljX25pZHMgPSBzdGFjOTI3eF9kbWljX25pZHM7CiAJCXNwZWMtPm51bV9kbWljcyA9IFNUQUM5MjdYX05VTV9ETUlDUzsKIAotCQlzcGVjLT5pbml0ID0gZDk2NV9jb3JlX2luaXQ7CisJCXNwZWMtPmluaXQgPSBkZWxsXzNzdF9jb3JlX2luaXQ7CiAJCXNwZWMtPmRtdXhfbmlkcyA9IHN0YWM5Mjd4X2RtdXhfbmlkczsKIAkJc3BlYy0+bnVtX2RtdXhlcyA9IEFSUkFZX1NJWkUoc3RhYzkyN3hfZG11eF9uaWRzKTsKIAkJYnJlYWs7CisJY2FzZSBTVEFDXzkyN1hfVk9MS05PQjoKKwkJc3BlYy0+bnVtX2RtaWNzID0gMDsKKwkJc3BlYy0+aW5pdCA9IHN0YWM5Mjd4X3ZvbGtub2JfY29yZV9pbml0OworCQlicmVhazsKIAlkZWZhdWx0OgogCQlzcGVjLT5udW1fZG1pY3MgPSAwOwogCQlzcGVjLT5pbml0ID0gc3RhYzkyN3hfY29yZV9pbml0OwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2ljZTE3MTIvYW1wLmMgYi9zb3VuZC9wY2kvaWNlMTcxMi9hbXAuYwppbmRleCAzNzU2NDMwLi42ZGEyMWEyIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaWNlMTcxMi9hbXAuYworKysgYi9zb3VuZC9wY2kvaWNlMTcxMi9hbXAuYwpAQCAtNTIsMTEgKzUyLDEzIEBACiAKIAkvKiBvbmx5IHVzZSBiYXNpYyBmdW5jdGlvbmFsaXR5IGZvciBub3cgKi8KIAotCWljZS0+bnVtX3RvdGFsX2RhY3MgPSAyOwkvKiBvbmx5IFBTRE9VVDAgaXMgY29ubmVjdGVkICovCisJLyogVlQxNjE2IDZjaCBjb2RlYyBjb25uZWN0ZWQgdG8gUFNET1VUMCB1c2luZyBwYWNrZWQgbW9kZSAqLworCWljZS0+bnVtX3RvdGFsX2RhY3MgPSA2OwogCWljZS0+bnVtX3RvdGFsX2FkY3MgPSAyOwogCi0JLyogQ2hhaW50ZWNoIEFWLTcxMCBoYXMgYW5vdGhlciBjb2RlY3MsIHdoaWNoIG5lZWQgaW5pdGlhbGl6YXRpb24gKi8KLQkvKiBpbml0aWFsaXplIFdNODcyOCBjb2RlYyAqLworCS8qIENoYWludGVjaCBBVi03MTAgaGFzIGFub3RoZXIgV004NzI4IGNvZGVjIGNvbm5lY3RlZCB0byBQU0RPVVQ0CisJICAgKHNoYXJlZCB3aXRoIHRoZSBTUERJRiBvdXRwdXQpLiBNaXhlciBjb250cm9sIGZvciB0aGlzIGNvZGVjCisJICAgaXMgbm90IHlldCBzdXBwb3J0ZWQuICovCiAJaWYgKGljZS0+ZWVwcm9tLnN1YnZlbmRvciA9PSBWVDE3MjRfU1VCREVWSUNFX0FWNzEwKSB7CiAJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHdtX2luaXRzKTsgaSArPSAyKQogCQkJd21fcHV0KGljZSwgd21faW5pdHNbaV0sIHdtX2luaXRzW2krMV0pOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2ljZTE3MTIvaWNlMTcxMi5jIGIvc291bmQvcGNpL2ljZTE3MTIvaWNlMTcxMi5jCmluZGV4IGNlY2YxZmYuLmQ3NDAzM2EgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MTIuYworKysgYi9zb3VuZC9wY2kvaWNlMTcxMi9pY2UxNzEyLmMKQEAgLTIyNTksNyArMjI1OSw3IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzbmRfaWNlMTcxMl9taXhlcl9wcm9fcGVhayBfX2RldmluaXRkYXRhID0gewotCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAorCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX1BDTSwKIAkubmFtZSA9ICJNdWx0aSBUcmFjayBQZWFrIiwKIAkuYWNjZXNzID0gU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1JFQUQgfCBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfVk9MQVRJTEUsCiAJLmluZm8gPSBzbmRfaWNlMTcxMl9wcm9fcGVha19pbmZvLApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2ljZTE3MTIvaWNlMTcyNC5jIGIvc291bmQvcGNpL2ljZTE3MTIvaWNlMTcyNC5jCmluZGV4IGFmNmUwMDEuLjEwZmM5MmMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MjQuYworKysgYi9zb3VuZC9wY2kvaWNlMTcxMi9pY2UxNzI0LmMKQEAgLTY0OCw3ICs2NDgsNyBAQAogCSAgICAoaW5iKElDRU1UMTcyNChpY2UsIERNQV9QQVVTRSkpICYgRE1BX1BBVVNFUykpIHsKIAkJLyogcnVubmluZz8gd2UgY2Fubm90IGNoYW5nZSB0aGUgcmF0ZSBub3cuLi4gKi8KIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaWNlLT5yZWdfbG9jaywgZmxhZ3MpOwotCQlyZXR1cm4gLUVCVVNZOworCQlyZXR1cm4gKChyYXRlID09IGljZS0+Y3VyX3JhdGUpICYmICFmb3JjZSkgPyAwIDogLUVCVVNZOwogCX0KIAlpZiAoIWZvcmNlICYmIGlzX3Byb19yYXRlX2xvY2tlZChpY2UpKSB7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmljZS0+cmVnX2xvY2ssIGZsYWdzKTsKQEAgLTEyOTQsNyArMTI5NCw3IEBACiAKIAlzbmRfcGNtX2xpYl9wcmVhbGxvY2F0ZV9wYWdlc19mb3JfYWxsKHBjbSwgU05EUlZfRE1BX1RZUEVfREVWLAogCQkJCQkgICAgICBzbmRfZG1hX3BjaV9kYXRhKGljZS0+cGNpKSwKLQkJCQkJICAgICAgNjQqMTAyNCwgNjQqMTAyNCk7CisJCQkJCSAgICAgIDI1NioxMDI0LCAyNTYqMTAyNCk7CiAKIAlpY2UtPnBjbSA9IHBjbTsKIApAQCAtMTQwOCw3ICsxNDA4LDcgQEAKIAogCXNuZF9wY21fbGliX3ByZWFsbG9jYXRlX3BhZ2VzX2Zvcl9hbGwocGNtLCBTTkRSVl9ETUFfVFlQRV9ERVYsCiAJCQkJCSAgICAgIHNuZF9kbWFfcGNpX2RhdGEoaWNlLT5wY2kpLAotCQkJCQkgICAgICA2NCoxMDI0LCA2NCoxMDI0KTsKKwkJCQkJICAgICAgMjU2KjEwMjQsIDI1NioxMDI0KTsKIAogCWljZS0+cGNtX2RzID0gcGNtOwogCkBAIC0yMTEwLDcgKzIxMTAsNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc25kX3Z0MTcyNF9taXhlcl9wcm9fcGVhayBfX2RldmluaXRkYXRhID0gewotCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAorCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX1BDTSwKIAkubmFtZSA9ICJNdWx0aSBUcmFjayBQZWFrIiwKIAkuYWNjZXNzID0gU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1JFQUQgfCBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfVk9MQVRJTEUsCiAJLmluZm8gPSBzbmRfdnQxNzI0X3Byb19wZWFrX2luZm8sCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaW50ZWw4eDAuYyBiL3NvdW5kL3BjaS9pbnRlbDh4MC5jCmluZGV4IDE3MWFkYTUuLjc1NDg2N2UgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9pbnRlbDh4MC5jCisrKyBiL3NvdW5kL3BjaS9pbnRlbDh4MC5jCkBAIC0xOTU0LDYgKzE5NTQsMTggQEAKIAkJLm5hbWUgPSAiU29ueSBTMVhQIiwKIAkJLnR5cGUgPSBBQzk3X1RVTkVfSU5WX0VBUEQKIAl9LAorCXsKKwkJLnN1YnZlbmRvciA9IDB4MTA0ZCwKKwkJLnN1YmRldmljZSA9IDB4ODFjMCwKKwkJLm5hbWUgPSAiU29ueSBWQUlPIFZHTi1UMzUwUCIsIC8qQUQxOTgxQiovCisJCS50eXBlID0gQUM5N19UVU5FX0lOVl9FQVBECisJfSwKKwl7CisJCS5zdWJ2ZW5kb3IgPSAweDEwNGQsCisJCS5zdWJkZXZpY2UgPSAweDgxYzUsCisJCS5uYW1lID0gIlNvbnkgVkFJTyBWR04tQjFWUCIsIC8qQUQxOTgxQiovCisJCS50eXBlID0gQUM5N19UVU5FX0lOVl9FQVBECisJfSwKICAJewogCQkuc3VidmVuZG9yID0gMHgxMDQzLAogCQkuc3ViZGV2aWNlID0gMHg4MGYzLApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3ZpYTgyeHguYyBiL3NvdW5kL3BjaS92aWE4Mnh4LmMKaW5kZXggYWNmYTQ3Ni4uOGEzMzJkMiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL3ZpYTgyeHguYworKysgYi9zb3VuZC9wY2kvdmlhODJ4eC5jCkBAIC0zODYsNiArMzg2LDcgQEAKIAogCXN0cnVjdCBzbmRfcGNtICpwY21zWzJdOwogCXN0cnVjdCBzbmRfcmF3bWlkaSAqcm1pZGk7CisJc3RydWN0IHNuZF9rY29udHJvbCAqZHhzX2NvbnRyb2xzWzRdOwogCiAJc3RydWN0IHNuZF9hYzk3X2J1cyAqYWM5N19idXM7CiAJc3RydWN0IHNuZF9hYzk3ICphYzk3OwpAQCAtMTIxNiw5ICsxMjE3LDkgQEAKIAogCiAvKgotICogb3BlbiBjYWxsYmFjayBmb3IgcGxheWJhY2sgb24gdmlhNjg2IGFuZCB2aWE4MjN4IERTWAorICogb3BlbiBjYWxsYmFjayBmb3IgcGxheWJhY2sgb24gdmlhNjg2CiAgKi8KLXN0YXRpYyBpbnQgc25kX3ZpYTgyeHhfcGxheWJhY2tfb3BlbihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3N0YXRpYyBpbnQgc25kX3ZpYTY4Nl9wbGF5YmFja19vcGVuKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQogewogCXN0cnVjdCB2aWE4Mnh4ICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOwogCXN0cnVjdCB2aWFkZXYgKnZpYWRldiA9ICZjaGlwLT5kZXZzW2NoaXAtPnBsYXliYWNrX2Rldm5vICsgc3Vic3RyZWFtLT5udW1iZXJdOwpAQCAtMTIzMCw2ICsxMjMxLDMyIEBACiB9CiAKIC8qCisgKiBvcGVuIGNhbGxiYWNrIGZvciBwbGF5YmFjayBvbiB2aWE4MjN4IERYUworICovCitzdGF0aWMgaW50IHNuZF92aWE4MjMzX3BsYXliYWNrX29wZW4oc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IHZpYTgyeHggKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisJc3RydWN0IHZpYWRldiAqdmlhZGV2OworCXVuc2lnbmVkIGludCBzdHJlYW07CisJaW50IGVycjsKKworCXZpYWRldiA9ICZjaGlwLT5kZXZzW2NoaXAtPnBsYXliYWNrX2Rldm5vICsgc3Vic3RyZWFtLT5udW1iZXJdOworCWlmICgoZXJyID0gc25kX3ZpYTgyeHhfcGNtX29wZW4oY2hpcCwgdmlhZGV2LCBzdWJzdHJlYW0pKSA8IDApCisJCXJldHVybiBlcnI7CisJc3RyZWFtID0gdmlhZGV2LT5yZWdfb2Zmc2V0IC8gMHgxMDsKKwlpZiAoY2hpcC0+ZHhzX2NvbnRyb2xzW3N0cmVhbV0pIHsKKwkJY2hpcC0+cGxheWJhY2tfdm9sdW1lW3N0cmVhbV1bMF0gPSAwOworCQljaGlwLT5wbGF5YmFja192b2x1bWVbc3RyZWFtXVsxXSA9IDA7CisJCWNoaXAtPmR4c19jb250cm9sc1tzdHJlYW1dLT52ZFswXS5hY2Nlc3MgJj0KKwkJCX5TTkRSVl9DVExfRUxFTV9BQ0NFU1NfSU5BQ1RJVkU7CisJCXNuZF9jdGxfbm90aWZ5KGNoaXAtPmNhcmQsIFNORFJWX0NUTF9FVkVOVF9NQVNLX1ZBTFVFIHwKKwkJCSAgICAgICBTTkRSVl9DVExfRVZFTlRfTUFTS19JTkZPLAorCQkJICAgICAgICZjaGlwLT5keHNfY29udHJvbHNbc3RyZWFtXS0+aWQpOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoKICAqIG9wZW4gY2FsbGJhY2sgZm9yIHBsYXliYWNrIG9uIHZpYTgyM3ggbXVsdGktY2hhbm5lbAogICovCiBzdGF0aWMgaW50IHNuZF92aWE4MjMzX211bHRpX29wZW4oc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCkBAIC0xMzAyLDEwICsxMzI5LDI2IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgc25kX3ZpYTgyMzNfcGxheWJhY2tfY2xvc2Uoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IHZpYTgyeHggKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisJc3RydWN0IHZpYWRldiAqdmlhZGV2ID0gc3Vic3RyZWFtLT5ydW50aW1lLT5wcml2YXRlX2RhdGE7CisJdW5zaWduZWQgaW50IHN0cmVhbTsKKworCXN0cmVhbSA9IHZpYWRldi0+cmVnX29mZnNldCAvIDB4MTA7CisJaWYgKGNoaXAtPmR4c19jb250cm9sc1tzdHJlYW1dKSB7CisJCWNoaXAtPmR4c19jb250cm9sc1tzdHJlYW1dLT52ZFswXS5hY2Nlc3MgfD0KKwkJCVNORFJWX0NUTF9FTEVNX0FDQ0VTU19JTkFDVElWRTsKKwkJc25kX2N0bF9ub3RpZnkoY2hpcC0+Y2FyZCwgU05EUlZfQ1RMX0VWRU5UX01BU0tfSU5GTywKKwkJCSAgICAgICAmY2hpcC0+ZHhzX2NvbnRyb2xzW3N0cmVhbV0tPmlkKTsKKwl9CisJcmV0dXJuIHNuZF92aWE4Mnh4X3BjbV9jbG9zZShzdWJzdHJlYW0pOworfQorCiAKIC8qIHZpYTY4NiBwbGF5YmFjayBjYWxsYmFja3MgKi8KIHN0YXRpYyBzdHJ1Y3Qgc25kX3BjbV9vcHMgc25kX3ZpYTY4Nl9wbGF5YmFja19vcHMgPSB7Ci0JLm9wZW4gPQkJc25kX3ZpYTgyeHhfcGxheWJhY2tfb3BlbiwKKwkub3BlbiA9CQlzbmRfdmlhNjg2X3BsYXliYWNrX29wZW4sCiAJLmNsb3NlID0Jc25kX3ZpYTgyeHhfcGNtX2Nsb3NlLAogCS5pb2N0bCA9CXNuZF9wY21fbGliX2lvY3RsLAogCS5od19wYXJhbXMgPQlzbmRfdmlhODJ4eF9od19wYXJhbXMsCkBAIC0xMzMxLDggKzEzNzQsOCBAQAogCiAvKiB2aWE4MjN4IERTWCBwbGF5YmFjayBjYWxsYmFja3MgKi8KIHN0YXRpYyBzdHJ1Y3Qgc25kX3BjbV9vcHMgc25kX3ZpYTgyMzNfcGxheWJhY2tfb3BzID0gewotCS5vcGVuID0JCXNuZF92aWE4Mnh4X3BsYXliYWNrX29wZW4sCi0JLmNsb3NlID0Jc25kX3ZpYTgyeHhfcGNtX2Nsb3NlLAorCS5vcGVuID0JCXNuZF92aWE4MjMzX3BsYXliYWNrX29wZW4sCisJLmNsb3NlID0Jc25kX3ZpYTgyMzNfcGxheWJhY2tfY2xvc2UsCiAJLmlvY3RsID0Jc25kX3BjbV9saWJfaW9jdGwsCiAJLmh3X3BhcmFtcyA9CXNuZF92aWE4Mnh4X2h3X3BhcmFtcywKIAkuaHdfZnJlZSA9CXNuZF92aWE4Mnh4X2h3X2ZyZWUsCkBAIC0xNjI2LDcgKzE2NjksNyBAQAogCQkJCSAgICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQogewogCXN0cnVjdCB2aWE4Mnh4ICpjaGlwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwotCXVuc2lnbmVkIGludCBpZHggPSBzbmRfY3RsX2dldF9pb2ZmKGtjb250cm9sLCAmdWNvbnRyb2wtPmlkKTsKKwl1bnNpZ25lZCBpbnQgaWR4ID0ga2NvbnRyb2wtPmlkLnN1YmRldmljZTsKIAogCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID0gVklBX0RYU19NQVhfVk9MVU1FIC0gY2hpcC0+cGxheWJhY2tfdm9sdW1lW2lkeF1bMF07CiAJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMV0gPSBWSUFfRFhTX01BWF9WT0xVTUUgLSBjaGlwLT5wbGF5YmFja192b2x1bWVbaWR4XVsxXTsKQEAgLTE2NDYsNyArMTY4OSw3IEBACiAJCQkJICAgICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCiB7CiAJc3RydWN0IHZpYTgyeHggKmNoaXAgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7Ci0JdW5zaWduZWQgaW50IGlkeCA9IHNuZF9jdGxfZ2V0X2lvZmYoa2NvbnRyb2wsICZ1Y29udHJvbC0+aWQpOworCXVuc2lnbmVkIGludCBpZHggPSBrY29udHJvbC0+aWQuc3ViZGV2aWNlOwogCXVuc2lnbmVkIGxvbmcgcG9ydCA9IGNoaXAtPnBvcnQgKyAweDEwICogaWR4OwogCXVuc2lnbmVkIGNoYXIgdmFsOwogCWludCBpLCBjaGFuZ2UgPSAwOwpAQCAtMTcwNSwxMSArMTc0OCwxMyBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHNuZF92aWE4MjMzX2R4c192b2x1bWVfY29udHJvbCBfX2RldmluaXRkYXRhID0gewotCS5uYW1lID0gIlZJQSBEWFMgUGxheWJhY2sgVm9sdW1lIiwKLQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKLQkuYWNjZXNzID0gKFNORFJWX0NUTF9FTEVNX0FDQ0VTU19SRUFEV1JJVEUgfAotCQkgICBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfVExWX1JFQUQpLAotCS5jb3VudCA9IDQsCisJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfUENNLAorCS5kZXZpY2UgPSAwLAorCS8qIC5zdWJkZXZpY2Ugc2V0IGxhdGVyICovCisJLm5hbWUgPSAiUENNIFBsYXliYWNrIFZvbHVtZSIsCisJLmFjY2VzcyA9IFNORFJWX0NUTF9FTEVNX0FDQ0VTU19SRUFEV1JJVEUgfAorCQkgIFNORFJWX0NUTF9FTEVNX0FDQ0VTU19UTFZfUkVBRCB8CisJCSAgU05EUlZfQ1RMX0VMRU1fQUNDRVNTX0lOQUNUSVZFLAogCS5pbmZvID0gc25kX3ZpYTgyMzNfZHhzX3ZvbHVtZV9pbmZvLAogCS5nZXQgPSBzbmRfdmlhODIzM19keHNfdm9sdW1lX2dldCwKIAkucHV0ID0gc25kX3ZpYTgyMzNfZHhzX3ZvbHVtZV9wdXQsCkBAIC0xOTM2LDEwICsxOTgxLDE5IEBACiAJCX0KIAkJZWxzZSAvKiBVc2luZyBEWFMgd2hlbiBQQ00gZW11bGF0aW9uIGlzIGVuYWJsZWQgaXMgcmVhbGx5IHdlaXJkICovCiAJCXsKLQkJCS8qIFN0YW5kYWxvbmUgRFhTIGNvbnRyb2xzICovCi0JCQllcnIgPSBzbmRfY3RsX2FkZChjaGlwLT5jYXJkLCBzbmRfY3RsX25ldzEoJnNuZF92aWE4MjMzX2R4c192b2x1bWVfY29udHJvbCwgY2hpcCkpOwotCQkJaWYgKGVyciA8IDApCi0JCQkJcmV0dXJuIGVycjsKKwkJCWZvciAoaSA9IDA7IGkgPCA0OyArK2kpIHsKKwkJCQlzdHJ1Y3Qgc25kX2tjb250cm9sICprY3RsOworCisJCQkJa2N0bCA9IHNuZF9jdGxfbmV3MSgKKwkJCQkJJnNuZF92aWE4MjMzX2R4c192b2x1bWVfY29udHJvbCwgY2hpcCk7CisJCQkJaWYgKCFrY3RsKQorCQkJCQlyZXR1cm4gLUVOT01FTTsKKwkJCQlrY3RsLT5pZC5zdWJkZXZpY2UgPSBpOworCQkJCWVyciA9IHNuZF9jdGxfYWRkKGNoaXAtPmNhcmQsIGtjdGwpOworCQkJCWlmIChlcnIgPCAwKQorCQkJCQlyZXR1cm4gZXJyOworCQkJCWNoaXAtPmR4c19jb250cm9sc1tpXSA9IGtjdGw7CisJCQl9CiAJCX0KIAl9CiAJLyogc2VsZWN0IHNwZGlmIGRhdGEgc2xvdCAxMC8xMSAqLwpkaWZmIC0tZ2l0IGEvc291bmQvcGNtY2lhL3BkYXVkaW9jZi9wZGF1ZGlvY2YuYyBiL3NvdW5kL3BjbWNpYS9wZGF1ZGlvY2YvcGRhdWRpb2NmLmMKaW5kZXggN2RlYTc0Yi4uNjRiODU5OSAxMDA2NDQKLS0tIGEvc291bmQvcGNtY2lhL3BkYXVkaW9jZi9wZGF1ZGlvY2YuYworKysgYi9zb3VuZC9wY21jaWEvcGRhdWRpb2NmL3BkYXVkaW9jZi5jCkBAIC0yMTcsMjAgKzIxNywyNSBAQAogICogY29uZmlndXJhdGlvbiBjYWxsYmFjawogICovCiAKLSNkZWZpbmUgQ1NfQ0hFQ0soZm4sIHJldCkgXAotZG8geyBsYXN0X2ZuID0gKGZuKTsgaWYgKChsYXN0X3JldCA9IChyZXQpKSAhPSAwKSBnb3RvIGNzX2ZhaWxlZDsgfSB3aGlsZSAoMCkKLQogc3RhdGljIGludCBwZGFjZl9jb25maWcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7CiAJc3RydWN0IHNuZF9wZGFjZiAqcGRhY2YgPSBsaW5rLT5wcml2OwotCWludCBsYXN0X2ZuLCBsYXN0X3JldDsKKwlpbnQgcmV0OwogCiAJc25kX3ByaW50ZGQoS0VSTl9ERUJVRyAicGRhY2ZfY29uZmlnIGNhbGxlZFxuIik7CiAJbGluay0+Y29uZi5Db25maWdJbmRleCA9IDB4NTsKIAotCUNTX0NIRUNLKFJlcXVlc3RJTywgcGNtY2lhX3JlcXVlc3RfaW8obGluaywgJmxpbmstPmlvKSk7Ci0JQ1NfQ0hFQ0soUmVxdWVzdElSUSwgcGNtY2lhX3JlcXVlc3RfaXJxKGxpbmssICZsaW5rLT5pcnEpKTsKLQlDU19DSEVDSyhSZXF1ZXN0Q29uZmlndXJhdGlvbiwgcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLCAmbGluay0+Y29uZikpOworCXJldCA9IHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmssICZsaW5rLT5pbyk7CisJaWYgKHJldCkKKwkJZ290byBmYWlsZWQ7CisKKwlyZXQgPSBwY21jaWFfcmVxdWVzdF9pcnEobGluaywgJmxpbmstPmlycSk7CisJaWYgKHJldCkKKwkJZ290byBmYWlsZWQ7CisKKwlyZXQgPSBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmssICZsaW5rLT5jb25mKTsKKwlpZiAocmV0KQorCQlnb3RvIGZhaWxlZDsKIAogCWlmIChzbmRfcGRhY2ZfYXNzaWduX3Jlc291cmNlcyhwZGFjZiwgbGluay0+aW8uQmFzZVBvcnQxLCBsaW5rLT5pcnEuQXNzaWduZWRJUlEpIDwgMCkKIAkJZ290byBmYWlsZWQ7CkBAIC0yMzgsOCArMjQzLDYgQEAKIAlsaW5rLT5kZXZfbm9kZSA9ICZwZGFjZi0+bm9kZTsKIAlyZXR1cm4gMDsKIAotY3NfZmFpbGVkOgotCWNzX2Vycm9yKGxpbmssIGxhc3RfZm4sIGxhc3RfcmV0KTsKIGZhaWxlZDoKIAlwY21jaWFfZGlzYWJsZV9kZXZpY2UobGluayk7CiAJcmV0dXJuIC1FTk9ERVY7CmRpZmYgLS1naXQgYS9zb3VuZC9wY21jaWEvdngvdnhwb2NrZXQuYyBiL3NvdW5kL3BjbWNpYS92eC92eHBvY2tldC5jCmluZGV4IDc0NDVjYzguLjE0OTI3NDQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjbWNpYS92eC92eHBvY2tldC5jCisrKyBiL3NvdW5kL3BjbWNpYS92eC92eHBvY2tldC5jCkBAIC0yMTMsMTQgKzIxMywxMSBAQAogICogY29uZmlndXJhdGlvbiBjYWxsYmFjawogICovCiAKLSNkZWZpbmUgQ1NfQ0hFQ0soZm4sIHJldCkgXAotZG8geyBsYXN0X2ZuID0gKGZuKTsgaWYgKChsYXN0X3JldCA9IChyZXQpKSAhPSAwKSBnb3RvIGNzX2ZhaWxlZDsgfSB3aGlsZSAoMCkKLQogc3RhdGljIGludCB2eHBvY2tldF9jb25maWcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7CiAJc3RydWN0IHZ4X2NvcmUgKmNoaXAgPSBsaW5rLT5wcml2OwogCXN0cnVjdCBzbmRfdnhwb2NrZXQgKnZ4cCA9IChzdHJ1Y3Qgc25kX3Z4cG9ja2V0ICopY2hpcDsKLQlpbnQgbGFzdF9mbiwgbGFzdF9yZXQ7CisJaW50IHJldDsKIAogCXNuZF9wcmludGRkKEtFUk5fREVCVUcgInZ4cG9ja2V0X2NvbmZpZyBjYWxsZWRcbiIpOwogCkBAIC0yMzUsOSArMjMyLDE3IEBACiAJCXN0cmNweShjaGlwLT5jYXJkLT5kcml2ZXIsIHZ4cDQ0MF9ody5uYW1lKTsKIAl9CiAKLQlDU19DSEVDSyhSZXF1ZXN0SU8sIHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmssICZsaW5rLT5pbykpOwotCUNTX0NIRUNLKFJlcXVlc3RJUlEsIHBjbWNpYV9yZXF1ZXN0X2lycShsaW5rLCAmbGluay0+aXJxKSk7Ci0JQ1NfQ0hFQ0soUmVxdWVzdENvbmZpZ3VyYXRpb24sIHBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluaywgJmxpbmstPmNvbmYpKTsKKwlyZXQgPSBwY21jaWFfcmVxdWVzdF9pbyhsaW5rLCAmbGluay0+aW8pOworCWlmIChyZXQpCisJCWdvdG8gZmFpbGVkOworCisJcmV0ID0gcGNtY2lhX3JlcXVlc3RfaXJxKGxpbmssICZsaW5rLT5pcnEpOworCWlmIChyZXQpCisJCWdvdG8gZmFpbGVkOworCisJcmV0ID0gcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLCAmbGluay0+Y29uZik7CisJaWYgKHJldCkKKwkJZ290byBmYWlsZWQ7CiAKIAljaGlwLT5kZXYgPSAmaGFuZGxlX3RvX2RldihsaW5rKTsKIAlzbmRfY2FyZF9zZXRfZGV2KGNoaXAtPmNhcmQsIGNoaXAtPmRldik7CkBAIC0yNDgsOCArMjUzLDYgQEAKIAlsaW5rLT5kZXZfbm9kZSA9ICZ2eHAtPm5vZGU7CiAJcmV0dXJuIDA7CiAKLWNzX2ZhaWxlZDoKLQljc19lcnJvcihsaW5rLCBsYXN0X2ZuLCBsYXN0X3JldCk7CiBmYWlsZWQ6CiAJcGNtY2lhX2Rpc2FibGVfZGV2aWNlKGxpbmspOwogCXJldHVybiAtRU5PREVWOwpkaWZmIC0tZ2l0IGEvc291bmQvcHBjL0tjb25maWcgYi9zb3VuZC9wcGMvS2NvbmZpZwppbmRleCBiZDIzMzhhLi4wNTE5YzYwIDEwMDY0NAotLS0gYS9zb3VuZC9wcGMvS2NvbmZpZworKysgYi9zb3VuZC9wcGMvS2NvbmZpZwpAQCAtMiw3ICsyLDcgQEAKIAogbWVudWNvbmZpZyBTTkRfUFBDCiAJYm9vbCAiUG93ZXJQQyBzb3VuZCBkZXZpY2VzIgotCWRlcGVuZHMgb24gUFBDNjQgfHwgUFBDMzIKKwlkZXBlbmRzIG9uIFBQQwogCWRlZmF1bHQgeQogCWhlbHAKIAkgIFN1cHBvcnQgZm9yIHNvdW5kIGRldmljZXMgc3BlY2lmaWMgdG8gUG93ZXJQQyBhcmNoaXRlY3R1cmVzLgpkaWZmIC0tZ2l0IGEvc291bmQvcHBjL2tleXdlc3QuYyBiL3NvdW5kL3BwYy9rZXl3ZXN0LmMKaW5kZXggODM1ZmExOS4uZDA2Zjc4MCAxMDA2NDQKLS0tIGEvc291bmQvcHBjL2tleXdlc3QuYworKysgYi9zb3VuZC9wcGMva2V5d2VzdC5jCkBAIC01OSw2ICs1OSwxOCBAQAogCXN0cmxjcHkoaW5mby50eXBlLCAia2V5d2VzdCIsIEkyQ19OQU1FX1NJWkUpOwogCWluZm8uYWRkciA9IGtleXdlc3RfY3R4LT5hZGRyOwogCWtleXdlc3RfY3R4LT5jbGllbnQgPSBpMmNfbmV3X2RldmljZShhZGFwdGVyLCAmaW5mbyk7CisJaWYgKCFrZXl3ZXN0X2N0eC0+Y2xpZW50KQorCQlyZXR1cm4gLUVOT0RFVjsKKwkvKgorCSAqIFdlIGtub3cgdGhlIGRyaXZlciBpcyBhbHJlYWR5IGxvYWRlZCwgc28gdGhlIGRldmljZSBzaG91bGQgYmUKKwkgKiBhbHJlYWR5IGJvdW5kLiBJZiBub3QgaXQgbWVhbnMgYmluZGluZyBmYWlsZWQsIGFuZCB0aGVuIHRoZXJlCisJICogaXMgbm8gcG9pbnQgaW4ga2VlcGluZyB0aGUgZGV2aWNlIGluc3RhbnRpYXRlZC4KKwkgKi8KKwlpZiAoIWtleXdlc3RfY3R4LT5jbGllbnQtPmRyaXZlcikgeworCQlpMmNfdW5yZWdpc3Rlcl9kZXZpY2Uoa2V5d2VzdF9jdHgtPmNsaWVudCk7CisJCWtleXdlc3RfY3R4LT5jbGllbnQgPSBOVUxMOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CiAJCiAJLyoKIAkgKiBMZXQgaTJjLWNvcmUgZGVsZXRlIHRoYXQgZGV2aWNlIG9uIGRyaXZlciByZW1vdmFsLgpAQCAtODYsNyArOTgsNyBAQAogCXsgfQogfTsKIAotc3RydWN0IGkyY19kcml2ZXIga2V5d2VzdF9kcml2ZXIgPSB7CitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIga2V5d2VzdF9kcml2ZXIgPSB7CiAJLmRyaXZlciA9IHsKIAkJLm5hbWUgPSAiUE1hYyBLZXl3ZXN0IEF1ZGlvIiwKIAl9LApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2JsYWNrZmluL0tjb25maWcgYi9zb3VuZC9zb2MvYmxhY2tmaW4vS2NvbmZpZwppbmRleCBhYzkyN2ZmLi45N2YxYTI1IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvYmxhY2tmaW4vS2NvbmZpZworKysgYi9zb3VuZC9zb2MvYmxhY2tmaW4vS2NvbmZpZwpAQCAtNywxNSArNyw2IEBACiAJICBtb2RlIChzdXBwb3J0cyBzaW5nbGUgc3RlcmVvIEluL091dCkuCiAJICBZb3Ugd2lsbCBhbHNvIG5lZWQgdG8gc2VsZWN0IHRoZSBhdWRpbyBpbnRlcmZhY2VzIHRvIHN1cHBvcnQgYmVsb3cuCiAKLWNvbmZpZyBTTkRfQkY1WFhfVERNCi0JdHJpc3RhdGUgIlNvQyBJMlMoVERNIG1vZGUpIEF1ZGlvIGZvciB0aGUgQURJIEJGNXh4IGNoaXAiCi0JZGVwZW5kcyBvbiAoQkxBQ0tGSU4gJiYgU05EX1NPQykKLQloZWxwCi0JICBTYXkgWSBvciBNIGlmIHlvdSB3YW50IHRvIGFkZCBzdXBwb3J0IGZvciBjb2RlY3MgYXR0YWNoZWQgdG8KLQkgIHRoZSBCbGFja2ZpbiBTUE9SVCAoc3luY2hyb25vdXMgc2VyaWFsIHBvcnRzKSBpbnRlcmZhY2UgaW4gVERNCi0JICBtb2RlLgotCSAgWW91IHdpbGwgYWxzbyBuZWVkIHRvIHNlbGVjdCB0aGUgYXVkaW8gaW50ZXJmYWNlcyB0byBzdXBwb3J0IGJlbG93LgotCiBjb25maWcgU05EX0JGNVhYX1NPQ19TU00yNjAyCiAJdHJpc3RhdGUgIlNvQyBTU00yNjAyIEF1ZGlvIHN1cHBvcnQgZm9yIEJGNTJ4IGV6a2l0IgogCWRlcGVuZHMgb24gU05EX0JGNVhYX0kyUwpAQCAtNDEsNiArMzIsMzEgQEAKIAkgIEVudGVyIHRoZSBHUElPIHVzZWQgdG8gY29udHJvbCBBRDczMzExJ3MgU0UgcGluLiBBY2NlcHRhYmxlCiAJICB2YWx1ZXMgYXJlIDAgdG8gNwogCitjb25maWcgU05EX0JGNVhYX1RETQorCXRyaXN0YXRlICJTb0MgSTJTKFRETSBtb2RlKSBBdWRpbyBmb3IgdGhlIEFESSBCRjV4eCBjaGlwIgorCWRlcGVuZHMgb24gKEJMQUNLRklOICYmIFNORF9TT0MpCisJaGVscAorCSAgU2F5IFkgb3IgTSBpZiB5b3Ugd2FudCB0byBhZGQgc3VwcG9ydCBmb3IgY29kZWNzIGF0dGFjaGVkIHRvCisJICB0aGUgQmxhY2tmaW4gU1BPUlQgKHN5bmNocm9ub3VzIHNlcmlhbCBwb3J0cykgaW50ZXJmYWNlIGluIFRETQorCSAgbW9kZS4KKwkgIFlvdSB3aWxsIGFsc28gbmVlZCB0byBzZWxlY3QgdGhlIGF1ZGlvIGludGVyZmFjZXMgdG8gc3VwcG9ydCBiZWxvdy4KKworY29uZmlnIFNORF9CRjVYWF9TT0NfQUQxODM2CisJdHJpc3RhdGUgIlNvQyBBRDE4MzYgQXVkaW8gc3VwcG9ydCBmb3IgQkY1eHgiCisJZGVwZW5kcyBvbiBTTkRfQkY1WFhfVERNCisJc2VsZWN0IFNORF9CRjVYWF9TT0NfVERNCisJc2VsZWN0IFNORF9TT0NfQUQxODM2CisJaGVscAorCSAgU2F5IFkgaWYgeW91IHdhbnQgdG8gYWRkIHN1cHBvcnQgZm9yIFNvQyBhdWRpbyBvbiBCRjV4eCBTVEFNUC9FWktJVC4KKworY29uZmlnIFNORF9CRjVYWF9TT0NfQUQxOTM4CisJdHJpc3RhdGUgIlNvQyBBRDE5MzggQXVkaW8gc3VwcG9ydCBmb3IgQmxhY2tmaW4iCisJZGVwZW5kcyBvbiBTTkRfQkY1WFhfVERNCisJc2VsZWN0IFNORF9CRjVYWF9TT0NfVERNCisJc2VsZWN0IFNORF9TT0NfQUQxOTM4CisJaGVscAorCSAgU2F5IFkgaWYgeW91IHdhbnQgdG8gYWRkIHN1cHBvcnQgZm9yIEFEMTkzOCBjb2RlYyBvbiBCbGFja2Zpbi4KKwogY29uZmlnIFNORF9CRjVYWF9BQzk3CiAJdHJpc3RhdGUgIlNvQyBBQzk3IEF1ZGlvIGZvciB0aGUgQURJIEJGNXh4IGNoaXAiCiAJZGVwZW5kcyBvbiBCTEFDS0ZJTgpAQCAtNzEsNiArODcsMzAgQEAKIAkgIFNheSB5IGlmIHlvdSB3YW50IEFDOTcgZHJpdmVyIHRvIHN1cHBvcnQgdXAgdG8gNS4xIGNoYW5uZWwgYXVkaW8uCiAJICB0aGlzIG1vZGUgd2lsbCBjb25zdW1lIG11Y2ggbW9yZSBtZW1vcnkgZm9yIERNQS4KIAorY29uZmlnIFNORF9CRjVYWF9IQVZFX0NPTERfUkVTRVQKKwlib29sICJCT0FSRCBoYXMgQ09MRCBSZXNldCBHUElPIgorCWRlcGVuZHMgb24gU05EX0JGNVhYX0FDOTcKKwlkZWZhdWx0IHkgaWYgQkZJTjU0OF9FWktJVAorCWRlZmF1bHQgbiBpZiAhQkZJTjU0OF9FWktJVAorCitjb25maWcgU05EX0JGNVhYX1JFU0VUX0dQSU9fTlVNCisJaW50ICJTZXQgYSBHUElPIGZvciBjb2xkIHJlc2V0IgorCWRlcGVuZHMgb24gU05EX0JGNVhYX0hBVkVfQ09MRF9SRVNFVAorCXJhbmdlIDAgMTU5CisJZGVmYXVsdCAxOSBpZiBCRklONTQ4X0VaS0lUCisJZGVmYXVsdCA1IGlmIEJGSU41MzdfU1RBTVAKKwlkZWZhdWx0IDAKKwloZWxwCisJICBTZXQgdGhlIGNvcnJlY3QgR1BJTyBmb3IgUkVTRVQgdGhlIHNvdW5kIGNoaXAuCisKK2NvbmZpZyBTTkRfQkY1WFhfU09DX0FEMTk4MAorCXRyaXN0YXRlICJTb0MgQUQxOTgwLzEgQXVkaW8gc3VwcG9ydCBmb3IgQkY1eHgiCisJZGVwZW5kcyBvbiBTTkRfQkY1WFhfQUM5NworCXNlbGVjdCBTTkRfQkY1WFhfU09DX0FDOTcKKwlzZWxlY3QgU05EX1NPQ19BRDE5ODAKKwloZWxwCisJICBTYXkgWSBpZiB5b3Ugd2FudCB0byBhZGQgc3VwcG9ydCBmb3IgU29DIGF1ZGlvIG9uIEJGNXh4IFNUQU1QL0VaS0lULgorCiBjb25maWcgU05EX0JGNVhYX1NPQ19TUE9SVAogCXRyaXN0YXRlCiAKQEAgLTg4LDMwICsxMjgsNiBAQAogCXNlbGVjdCBTTkRfU09DX0FDOTdfQlVTCiAJc2VsZWN0IFNORF9CRjVYWF9TT0NfU1BPUlQKIAotY29uZmlnIFNORF9CRjVYWF9TT0NfQUQxODM2Ci0JdHJpc3RhdGUgIlNvQyBBRDE4MzYgQXVkaW8gc3VwcG9ydCBmb3IgQkY1eHgiCi0JZGVwZW5kcyBvbiBTTkRfQkY1WFhfVERNCi0Jc2VsZWN0IFNORF9CRjVYWF9TT0NfVERNCi0Jc2VsZWN0IFNORF9TT0NfQUQxODM2Ci0JaGVscAotCSAgU2F5IFkgaWYgeW91IHdhbnQgdG8gYWRkIHN1cHBvcnQgZm9yIFNvQyBhdWRpbyBvbiBCRjV4eCBTVEFNUC9FWktJVC4KLQotY29uZmlnIFNORF9CRjVYWF9TT0NfQUQxOTgwCi0JdHJpc3RhdGUgIlNvQyBBRDE5ODAvMSBBdWRpbyBzdXBwb3J0IGZvciBCRjV4eCIKLQlkZXBlbmRzIG9uIFNORF9CRjVYWF9BQzk3Ci0Jc2VsZWN0IFNORF9CRjVYWF9TT0NfQUM5NwotCXNlbGVjdCBTTkRfU09DX0FEMTk4MAotCWhlbHAKLQkgIFNheSBZIGlmIHlvdSB3YW50IHRvIGFkZCBzdXBwb3J0IGZvciBTb0MgYXVkaW8gb24gQkY1eHggU1RBTVAvRVpLSVQuCi0KLWNvbmZpZyBTTkRfQkY1WFhfU09DX0FEMTkzOAotICAgICAgICB0cmlzdGF0ZSAiU29DIEFEMTkzOCBBdWRpbyBzdXBwb3J0IGZvciBCbGFja2ZpbiIKLSAgICAgICAgZGVwZW5kcyBvbiBTTkRfQkY1WFhfVERNCi0gICAgICAgIHNlbGVjdCBTTkRfQkY1WFhfU09DX1RETQotICAgICAgICBzZWxlY3QgU05EX1NPQ19BRDE5MzgKLSAgICAgICAgaGVscAotICAgICAgICAgIFNheSBZIGlmIHlvdSB3YW50IHRvIGFkZCBzdXBwb3J0IGZvciBBRDE5MzggY29kZWMgb24gQmxhY2tmaW4uCi0KIGNvbmZpZyBTTkRfQkY1WFhfU1BPUlRfTlVNCiAJaW50ICJTZXQgYSBTUE9SVCBmb3IgU291bmQgY2hpcCIKIAlkZXBlbmRzIG9uIChTTkRfQkY1WFhfSTJTIHx8IFNORF9CRjVYWF9BQzk3IHx8IFNORF9CRjVYWF9URE0pCkBAIC0xMjAsMTkgKzEzNiwzIEBACiAJZGVmYXVsdCAwCiAJaGVscAogCSAgU2V0IHRoZSBjb3JyZWN0IFNQT1JUIGZvciBzb3VuZCBjaGlwLgotCi1jb25maWcgU05EX0JGNVhYX0hBVkVfQ09MRF9SRVNFVAotCWJvb2wgIkJPQVJEIGhhcyBDT0xEIFJlc2V0IEdQSU8iCi0JZGVwZW5kcyBvbiBTTkRfQkY1WFhfQUM5NwotCWRlZmF1bHQgeSBpZiBCRklONTQ4X0VaS0lUCi0JZGVmYXVsdCBuIGlmICFCRklONTQ4X0VaS0lUCi0KLWNvbmZpZyBTTkRfQkY1WFhfUkVTRVRfR1BJT19OVU0KLQlpbnQgIlNldCBhIEdQSU8gZm9yIGNvbGQgcmVzZXQiCi0JZGVwZW5kcyBvbiBTTkRfQkY1WFhfSEFWRV9DT0xEX1JFU0VUCi0JcmFuZ2UgMCAxNTkKLQlkZWZhdWx0IDE5IGlmIEJGSU41NDhfRVpLSVQKLQlkZWZhdWx0IDUgaWYgQkZJTjUzN19TVEFNUAotCWRlZmF1bHQgMAotCWhlbHAKLQkgIFNldCB0aGUgY29ycmVjdCBHUElPIGZvciBSRVNFVCB0aGUgc291bmQgY2hpcC4KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1pMnMuYyBiL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1pMnMuYwppbmRleCAxZTlkMTYxLi4wODRiNjg4IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtaTJzLmMKKysrIGIvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LWkycy5jCkBAIC03NywxMiArNzcsMTIgQEAKICAqIFRGUy4gV2hlbiBQb3J0IEcgaXMgc2VsZWN0ZWQgYW5kIEVNQUMgdGhlbiB0aGVyZSBpcyBhIGNvbmZsaWN0IGJldHdlZW4KICAqIHRoZSBQSFkgaW50ZXJydXB0IGxpbmUgYW5kIFRGUy4gIEN1cnJlbnQgc2V0dGluZ3MgcHJldmVudCB0aGUgY29uZmxpY3QKICAqIGJ5IGlnbm9yaW5nIHRoZSBURlMgcGluIHdoZW4gUG9ydCBHIGlzIHNlbGVjdGVkLiBUaGlzIGFsbG93cyBib3RoCi0gKiBzc20yNjAyIHVzaW5nIFBvcnQgRyBhbmQgRU1BQyBjb25jdXJyZW50bHkuCisgKiBjb2RlY3MgYW5kIEVNQUMgdXNpbmcgUG9ydCBHIGNvbmN1cnJlbnRseS4KICAqLwotI2lmZGVmIENPTkZJR19CRjUyN19TUE9SVDBfUE9SVEYKLSNkZWZpbmUgTE9DQUxfU1BPUlQwX1RGUyAoUF9TUE9SVDBfVEZTKQotI2Vsc2UKKyNpZmRlZiBDT05GSUdfQkY1MjdfU1BPUlQwX1BPUlRHCiAjZGVmaW5lIExPQ0FMX1NQT1JUMF9URlMgKDApCisjZWxzZQorI2RlZmluZSBMT0NBTF9TUE9SVDBfVEZTIChQX1NQT1JUMF9URlMpCiAjZW5kaWYKIAogc3RhdGljIHUxNiBzcG9ydF9yZXFbXVs3XSA9IHsge1BfU1BPUlQwX0RUUFJJLCBQX1NQT1JUMF9UU0NMSywgUF9TUE9SVDBfUkZTLApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LXRkbS5jIGIvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LXRkbS5jCmluZGV4IDMwOTZiYWQuLmZmNTQ2ZTkgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC10ZG0uYworKysgYi9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtdGRtLmMKQEAgLTc4LDEyICs3OCwxMiBAQAogICogVEZTLiBXaGVuIFBvcnQgRyBpcyBzZWxlY3RlZCBhbmQgRU1BQyB0aGVuIHRoZXJlIGlzIGEgY29uZmxpY3QgYmV0d2VlbgogICogdGhlIFBIWSBpbnRlcnJ1cHQgbGluZSBhbmQgVEZTLiAgQ3VycmVudCBzZXR0aW5ncyBwcmV2ZW50IHRoZSBjb25mbGljdAogICogYnkgaWdub3JpbmcgdGhlIFRGUyBwaW4gd2hlbiBQb3J0IEcgaXMgc2VsZWN0ZWQuIFRoaXMgYWxsb3dzIGJvdGgKLSAqIHNzbTI2MDIgdXNpbmcgUG9ydCBHIGFuZCBFTUFDIGNvbmN1cnJlbnRseS4KKyAqIGNvZGVjcyBhbmQgRU1BQyB1c2luZyBQb3J0IEcgY29uY3VycmVudGx5LgogICovCi0jaWZkZWYgQ09ORklHX0JGNTI3X1NQT1JUMF9QT1JURgotI2RlZmluZSBMT0NBTF9TUE9SVDBfVEZTIChQX1NQT1JUMF9URlMpCi0jZWxzZQorI2lmZGVmIENPTkZJR19CRjUyN19TUE9SVDBfUE9SVEcKICNkZWZpbmUgTE9DQUxfU1BPUlQwX1RGUyAoMCkKKyNlbHNlCisjZGVmaW5lIExPQ0FMX1NQT1JUMF9URlMgKFBfU1BPUlQwX1RGUykKICNlbmRpZgogCiBzdGF0aWMgdTE2IHNwb3J0X3JlcVtdWzddID0geyB7UF9TUE9SVDBfRFRQUkksIFBfU1BPUlQwX1RTQ0xLLCBQX1NQT1JUMF9SRlMsCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODM1MC5jIGIvc291bmQvc29jL2NvZGVjcy93bTgzNTAuYwppbmRleCAzZmYwMzczLi41OTNkNWI5IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtODM1MC5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204MzUwLmMKQEAgLTU3OSw3ICs1NzksNyBAQAogCVNPQ19EQVBNX1NJTkdMRV9UTFYoIkwzIENhcHR1cmUgVm9sdW1lIiwKIAkJCSAgICBXTTgzNTBfSU5QVVRfTUlYRVJfVk9MVU1FX0wsIDksIDcsIDAsIG91dF9taXhfdGx2KSwKIAlTT0NfREFQTV9TSU5HTEUoIlBHQSBDYXB0dXJlIFN3aXRjaCIsCi0JCQlXTTgzNTBfTEVGVF9JTlBVVF9WT0xVTUUsIDE0LCAxLCAwKSwKKwkJCVdNODM1MF9MRUZUX0lOUFVUX1ZPTFVNRSwgMTQsIDEsIDEpLAogfTsKIAogLyogUmlnaHQgSW5wdXQgTWl4ZXIgKi8KQEAgLTU4OSw3ICs1ODksNyBAQAogCVNPQ19EQVBNX1NJTkdMRV9UTFYoIkwzIENhcHR1cmUgVm9sdW1lIiwKIAkJCSAgICBXTTgzNTBfSU5QVVRfTUlYRVJfVk9MVU1FX1IsIDEzLCA3LCAwLCBvdXRfbWl4X3RsdiksCiAJU09DX0RBUE1fU0lOR0xFKCJQR0EgQ2FwdHVyZSBTd2l0Y2giLAotCQkJV004MzUwX1JJR0hUX0lOUFVUX1ZPTFVNRSwgMTQsIDEsIDApLAorCQkJV004MzUwX1JJR0hUX0lOUFVUX1ZPTFVNRSwgMTQsIDEsIDEpLAogfTsKIAogLyogTGVmdCBNaWMgTWl4ZXIgKi8KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTQwLmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtODk0MC5jCmluZGV4IGRhOTdhYWUuLjFlZjI0NTQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTQwLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg5NDAuYwpAQCAtNzkwLDcgKzc5MCw3IEBACiAJY29kZWMtPnJlZ19jYWNoZSA9ICZ3bTg5NDAtPnJlZ19jYWNoZTsKIAogCXJldCA9IHNuZF9zb2NfY29kZWNfc2V0X2NhY2hlX2lvKGNvZGVjLCA4LCAxNiwgY29udHJvbCk7Ci0JaWYgKHJldCA9PSAwKSB7CisJaWYgKHJldCA8IDApIHsKIAkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRmFpbGVkIHRvIHNldCBjYWNoZSBJL086ICVkXG4iLCByZXQpOwogCQlyZXR1cm4gcmV0OwogCX0KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9kYXZpbmNpL2RhdmluY2ktaTJzLmMgYi9zb3VuZC9zb2MvZGF2aW5jaS9kYXZpbmNpLWkycy5jCmluZGV4IDEyYTZjNTQuLjRhZTcwNzAgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9kYXZpbmNpL2RhdmluY2ktaTJzLmMKKysrIGIvc291bmQvc29jL2RhdmluY2kvZGF2aW5jaS1pMnMuYwpAQCAtOTcsMjIgKzk3LDE5IEBACiAJREFWSU5DSV9NQ0JTUF9XT1JEXzMyLAogfTsKIAotc3RhdGljIHN0cnVjdCBkYXZpbmNpX3BjbV9kbWFfcGFyYW1zIGRhdmluY2lfaTJzX3BjbV9vdXQgPSB7Ci0JLm5hbWUgPSAiSTJTIFBDTSBTdGVyZW8gb3V0IiwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgZGF2aW5jaV9wY21fZG1hX3BhcmFtcyBkYXZpbmNpX2kyc19wY21faW4gPSB7Ci0JLm5hbWUgPSAiSTJTIFBDTSBTdGVyZW8gaW4iLAotfTsKLQogc3RydWN0IGRhdmluY2lfbWNic3BfZGV2IHsKKwkvKgorCSAqIGRtYV9wYXJhbXMgbXVzdCBiZSBmaXJzdCBiZWNhdXNlIHJ0ZC0+ZGFpLT5jcHVfZGFpLT5wcml2YXRlX2RhdGEKKwkgKiBpcyBjYXN0IHRvIGEgcG9pbnRlciBvZiBhbiBhcnJheSBvZiBzdHJ1Y3QgZGF2aW5jaV9wY21fZG1hX3BhcmFtcyBpbgorCSAqIGRhdmluY2lfcGNtX29wZW4uCisJICovCisJc3RydWN0IGRhdmluY2lfcGNtX2RtYV9wYXJhbXMJZG1hX3BhcmFtc1syXTsKIAl2b2lkIF9faW9tZW0JCQkqYmFzZTsKICNkZWZpbmUgTU9EX0RTUF9BCTAKICNkZWZpbmUgTU9EX0RTUF9CCTEKIAlpbnQJCQkJbW9kZTsKIAl1MzIJCQkJcGNyOwogCXN0cnVjdCBjbGsJCQkqY2xrOwotCXN0cnVjdCBkYXZpbmNpX3BjbV9kbWFfcGFyYW1zCSpkbWFfcGFyYW1zWzJdOwogfTsKIAogc3RhdGljIGlubGluZSB2b2lkIGRhdmluY2lfbWNic3Bfd3JpdGVfcmVnKHN0cnVjdCBkYXZpbmNpX21jYnNwX2RldiAqZGV2LApAQCAtMjE1LDE0ICsyMTIsNiBAQAogCXRvZ2dsZV9jbG9jayhkZXYsIHBsYXliYWNrKTsKIH0KIAotc3RhdGljIGludCBkYXZpbmNpX2kyc19zdGFydHVwKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAotCQkJICAgICAgIHN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSkKLXsKLQlzdHJ1Y3QgZGF2aW5jaV9tY2JzcF9kZXYgKmRldiA9IGNwdV9kYWktPnByaXZhdGVfZGF0YTsKLQljcHVfZGFpLT5kbWFfZGF0YSA9IGRldi0+ZG1hX3BhcmFtc1tzdWJzdHJlYW0tPnN0cmVhbV07Ci0JcmV0dXJuIDA7Ci19Ci0KICNkZWZpbmUgREVGQVVMVF9CSVRQRVJTQU1QTEUJMTYKIAogc3RhdGljIGludCBkYXZpbmNpX2kyc19zZXRfZGFpX2ZtdChzdHJ1Y3Qgc25kX3NvY19kYWkgKmNwdV9kYWksCkBAIC0zNTMsOCArMzQyLDkgQEAKIAkJCQkgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMsCiAJCQkJIHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQogewotCXN0cnVjdCBkYXZpbmNpX3BjbV9kbWFfcGFyYW1zICpkbWFfcGFyYW1zID0gZGFpLT5kbWFfZGF0YTsKIAlzdHJ1Y3QgZGF2aW5jaV9tY2JzcF9kZXYgKmRldiA9IGRhaS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBkYXZpbmNpX3BjbV9kbWFfcGFyYW1zICpkbWFfcGFyYW1zID0KKwkJCQkJJmRldi0+ZG1hX3BhcmFtc1tzdWJzdHJlYW0tPnN0cmVhbV07CiAJc3RydWN0IHNuZF9pbnRlcnZhbCAqaSA9IE5VTEw7CiAJaW50IG1jYnNwX3dvcmRfbGVuZ3RoOwogCXVuc2lnbmVkIGludCByY3IsIHhjciwgc3JncjsKQEAgLTQ3Miw3ICs0NjIsNiBAQAogI2RlZmluZSBEQVZJTkNJX0kyU19SQVRFUwlTTkRSVl9QQ01fUkFURV84MDAwXzk2MDAwCiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIGRhdmluY2lfaTJzX2RhaV9vcHMgPSB7Ci0JLnN0YXJ0dXAgCT0gZGF2aW5jaV9pMnNfc3RhcnR1cCwKIAkuc2h1dGRvd24JPSBkYXZpbmNpX2kyc19zaHV0ZG93biwKIAkucHJlcGFyZQk9IGRhdmluY2lfaTJzX3ByZXBhcmUsCiAJLnRyaWdnZXIJPSBkYXZpbmNpX2kyc190cmlnZ2VyLApAQCAtNTM0LDEyICs1MjMsMTAgQEAKIAogCWRldi0+YmFzZSA9ICh2b2lkIF9faW9tZW0gKilJT19BRERSRVNTKG1lbS0+c3RhcnQpOwogCi0JZGV2LT5kbWFfcGFyYW1zW1NORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0tdID0gJmRhdmluY2lfaTJzX3BjbV9vdXQ7Ci0JZGV2LT5kbWFfcGFyYW1zW1NORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0tdLT5kbWFfYWRkciA9CisJZGV2LT5kbWFfcGFyYW1zW1NORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0tdLmRtYV9hZGRyID0KIAkgICAgKGRtYV9hZGRyX3QpKGlvX3YycChkZXYtPmJhc2UpICsgREFWSU5DSV9NQ0JTUF9EWFJfUkVHKTsKIAotCWRldi0+ZG1hX3BhcmFtc1tTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkVdID0gJmRhdmluY2lfaTJzX3BjbV9pbjsKLQlkZXYtPmRtYV9wYXJhbXNbU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFXS0+ZG1hX2FkZHIgPQorCWRldi0+ZG1hX3BhcmFtc1tTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkVdLmRtYV9hZGRyID0KIAkgICAgKGRtYV9hZGRyX3QpKGlvX3YycChkZXYtPmJhc2UpICsgREFWSU5DSV9NQ0JTUF9EUlJfUkVHKTsKIAogCS8qIGZpcnN0IFRYLCB0aGVuIFJYICovCkBAIC01NDksNyArNTM2LDcgQEAKIAkJcmV0ID0gLUVOWElPOwogCQlnb3RvIGVycl9mcmVlX21lbTsKIAl9Ci0JZGV2LT5kbWFfcGFyYW1zW1NORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0tdLT5jaGFubmVsID0gcmVzLT5zdGFydDsKKwlkZXYtPmRtYV9wYXJhbXNbU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDS10uY2hhbm5lbCA9IHJlcy0+c3RhcnQ7CiAKIAlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9ETUEsIDEpOwogCWlmICghcmVzKSB7CkBAIC01NTcsNyArNTQ0LDcgQEAKIAkJcmV0ID0gLUVOWElPOwogCQlnb3RvIGVycl9mcmVlX21lbTsKIAl9Ci0JZGV2LT5kbWFfcGFyYW1zW1NORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRV0tPmNoYW5uZWwgPSByZXMtPnN0YXJ0OworCWRldi0+ZG1hX3BhcmFtc1tTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkVdLmNoYW5uZWwgPSByZXMtPnN0YXJ0OwogCiAJZGF2aW5jaV9pMnNfZGFpLnByaXZhdGVfZGF0YSA9IGRldjsKIAlyZXQgPSBzbmRfc29jX3JlZ2lzdGVyX2RhaSgmZGF2aW5jaV9pMnNfZGFpKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9kYXZpbmNpL2RhdmluY2ktbWNhc3AuYyBiL3NvdW5kL3NvYy9kYXZpbmNpL2RhdmluY2ktbWNhc3AuYwppbmRleCA3YTA2YzBhLi41ZDFmOThhIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvZGF2aW5jaS9kYXZpbmNpLW1jYXNwLmMKKysrIGIvc291bmQvc29jL2RhdmluY2kvZGF2aW5jaS1tY2FzcC5jCkBAIC0zMzIsMTQgKzMzMiw2IEBACiAJCXByaW50ayhLRVJOX0VSUiAiR0JMQ1RMIHdyaXRlIGVycm9yXG4iKTsKIH0KIAotc3RhdGljIGludCBkYXZpbmNpX21jYXNwX3N0YXJ0dXAoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCi0JCQkJCQlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNwdV9kYWkpCi17Ci0Jc3RydWN0IGRhdmluY2lfYXVkaW9fZGV2ICpkZXYgPSBjcHVfZGFpLT5wcml2YXRlX2RhdGE7Ci0JY3B1X2RhaS0+ZG1hX2RhdGEgPSBkZXYtPmRtYV9wYXJhbXNbc3Vic3RyZWFtLT5zdHJlYW1dOwotCXJldHVybiAwOwotfQotCiBzdGF0aWMgdm9pZCBtY2FzcF9zdGFydF9yeChzdHJ1Y3QgZGF2aW5jaV9hdWRpb19kZXYgKmRldikKIHsKIAltY2FzcF9zZXRfY3RsX3JlZyhkZXYtPmJhc2UgKyBEQVZJTkNJX01DQVNQX0dCTENUTFJfUkVHLCBSWEhDTEtSU1QpOwpAQCAtMzg2LDE3ICszNzgsMTcgQEAKIAogc3RhdGljIHZvaWQgZGF2aW5jaV9tY2FzcF9zdGFydChzdHJ1Y3QgZGF2aW5jaV9hdWRpb19kZXYgKmRldiwgaW50IHN0cmVhbSkKIHsKLQlpZiAoc3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spCisJaWYgKHN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKSB7CisJCWlmIChkZXYtPnR4bnVtZXZ0KQkvKiBlbmFibGUgRklGTyAqLworCQkJbWNhc3Bfc2V0X2JpdHMoZGV2LT5iYXNlICsgREFWSU5DSV9NQ0FTUF9XRklGT0NUTCwKKwkJCQkJCQkJRklGT19FTkFCTEUpOwogCQltY2FzcF9zdGFydF90eChkZXYpOwotCWVsc2UKKwl9IGVsc2UgeworCQlpZiAoZGV2LT5yeG51bWV2dCkJLyogZW5hYmxlIEZJRk8gKi8KKwkJCW1jYXNwX3NldF9iaXRzKGRldi0+YmFzZSArIERBVklOQ0lfTUNBU1BfUkZJRk9DVEwsCisJCQkJCQkJCUZJRk9fRU5BQkxFKTsKIAkJbWNhc3Bfc3RhcnRfcngoZGV2KTsKLQotCS8qIGVuYWJsZSBGSUZPICovCi0JaWYgKGRldi0+dHhudW1ldnQpCi0JCW1jYXNwX3NldF9iaXRzKGRldi0+YmFzZSArIERBVklOQ0lfTUNBU1BfV0ZJRk9DVEwsIEZJRk9fRU5BQkxFKTsKLQotCWlmIChkZXYtPnJ4bnVtZXZ0KQotCQltY2FzcF9zZXRfYml0cyhkZXYtPmJhc2UgKyBEQVZJTkNJX01DQVNQX1JGSUZPQ1RMLCBGSUZPX0VOQUJMRSk7CisJfQogfQogCiBzdGF0aWMgdm9pZCBtY2FzcF9zdG9wX3J4KHN0cnVjdCBkYXZpbmNpX2F1ZGlvX2RldiAqZGV2KQpAQCAtNDEzLDE3ICs0MDUsMTcgQEAKIAogc3RhdGljIHZvaWQgZGF2aW5jaV9tY2FzcF9zdG9wKHN0cnVjdCBkYXZpbmNpX2F1ZGlvX2RldiAqZGV2LCBpbnQgc3RyZWFtKQogewotCWlmIChzdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykKKwlpZiAoc3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spIHsKKwkJaWYgKGRldi0+dHhudW1ldnQpCS8qIGRpc2FibGUgRklGTyAqLworCQkJbWNhc3BfY2xyX2JpdHMoZGV2LT5iYXNlICsgREFWSU5DSV9NQ0FTUF9XRklGT0NUTCwKKwkJCQkJCQkJRklGT19FTkFCTEUpOwogCQltY2FzcF9zdG9wX3R4KGRldik7Ci0JZWxzZQorCX0gZWxzZSB7CisJCWlmIChkZXYtPnJ4bnVtZXZ0KQkvKiBkaXNhYmxlIEZJRk8gKi8KKwkJCW1jYXNwX2Nscl9iaXRzKGRldi0+YmFzZSArIERBVklOQ0lfTUNBU1BfUkZJRk9DVEwsCisJCQkJCQkJCUZJRk9fRU5BQkxFKTsKIAkJbWNhc3Bfc3RvcF9yeChkZXYpOwotCi0JLyogZGlzYWJsZSBGSUZPICovCi0JaWYgKGRldi0+dHhudW1ldnQpCi0JCW1jYXNwX2Nscl9iaXRzKGRldi0+YmFzZSArIERBVklOQ0lfTUNBU1BfV0ZJRk9DVEwsIEZJRk9fRU5BQkxFKTsKLQotCWlmIChkZXYtPnJ4bnVtZXZ0KQotCQltY2FzcF9jbHJfYml0cyhkZXYtPmJhc2UgKyBEQVZJTkNJX01DQVNQX1JGSUZPQ1RMLCBGSUZPX0VOQUJMRSk7CisJfQogfQogCiBzdGF0aWMgaW50IGRhdmluY2lfbWNhc3Bfc2V0X2RhaV9mbXQoc3RydWN0IHNuZF9zb2NfZGFpICpjcHVfZGFpLApAQCAtNzIwLDcgKzcxMiw3IEBACiB7CiAJc3RydWN0IGRhdmluY2lfYXVkaW9fZGV2ICpkZXYgPSBjcHVfZGFpLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IGRhdmluY2lfcGNtX2RtYV9wYXJhbXMgKmRtYV9wYXJhbXMgPQotCQkJCQlkZXYtPmRtYV9wYXJhbXNbc3Vic3RyZWFtLT5zdHJlYW1dOworCQkJCQkmZGV2LT5kbWFfcGFyYW1zW3N1YnN0cmVhbS0+c3RyZWFtXTsKIAlpbnQgd29yZF9sZW5ndGg7CiAJdTggbnVtZXZ0OwogCkBAIC03OTgsNyArNzkwLDYgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgZGF2aW5jaV9tY2FzcF9kYWlfb3BzID0gewotCS5zdGFydHVwIAk9IGRhdmluY2lfbWNhc3Bfc3RhcnR1cCwKIAkudHJpZ2dlcgk9IGRhdmluY2lfbWNhc3BfdHJpZ2dlciwKIAkuaHdfcGFyYW1zCT0gZGF2aW5jaV9tY2FzcF9od19wYXJhbXMsCiAJLnNldF9mbXQJPSBkYXZpbmNpX21jYXNwX3NldF9kYWlfZm10LApAQCAtODQ5LDIwICs4NDAsMTIgQEAKIAlzdHJ1Y3QgcmVzb3VyY2UgKm1lbSwgKmlvYXJlYSwgKnJlczsKIAlzdHJ1Y3Qgc25kX3BsYXRmb3JtX2RhdGEgKnBkYXRhOwogCXN0cnVjdCBkYXZpbmNpX2F1ZGlvX2RldiAqZGV2OwotCWludCBjb3VudCA9IDA7CiAJaW50IHJldCA9IDA7CiAKIAlkZXYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZGF2aW5jaV9hdWRpb19kZXYpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWRldikKIAkJcmV0dXJuCS1FTk9NRU07CiAKLQlkbWFfZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBkYXZpbmNpX3BjbV9kbWFfcGFyYW1zKSAqIDIsCi0JCQkJCQkJCUdGUF9LRVJORUwpOwotCWlmICghZG1hX2RhdGEpIHsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBlcnJfcmVsZWFzZV9kZXY7Ci0JfQotCiAJbWVtID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKIAlpZiAoIW1lbSkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJubyBtZW0gcmVzb3VyY2U/XG4iKTsKQEAgLTg5NywxMSArODgwLDEwIEBACiAJZGV2LT50eG51bWV2dCA9IHBkYXRhLT50eG51bWV2dDsKIAlkZXYtPnJ4bnVtZXZ0ID0gcGRhdGEtPnJ4bnVtZXZ0OwogCi0JZG1hX2RhdGFbY291bnRdLm5hbWUgPSAiSTJTIFBDTSBTdGVyZW8gb3V0IjsKLQlkbWFfZGF0YVtjb3VudF0uZXZlbnRxX25vID0gcGRhdGEtPmV2ZW50cV9ubzsKLQlkbWFfZGF0YVtjb3VudF0uZG1hX2FkZHIgPSAoZG1hX2FkZHJfdCkgKHBkYXRhLT50eF9kbWFfb2Zmc2V0ICsKKwlkbWFfZGF0YSA9ICZkZXYtPmRtYV9wYXJhbXNbU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDS107CisJZG1hX2RhdGEtPmV2ZW50cV9ubyA9IHBkYXRhLT5ldmVudHFfbm87CisJZG1hX2RhdGEtPmRtYV9hZGRyID0gKGRtYV9hZGRyX3QpIChwZGF0YS0+dHhfZG1hX29mZnNldCArCiAJCQkJCQkJaW9fdjJwKGRldi0+YmFzZSkpOwotCWRldi0+ZG1hX3BhcmFtc1tTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLXSA9ICZkbWFfZGF0YVtjb3VudF07CiAKIAkvKiBmaXJzdCBUWCwgdGhlbiBSWCAqLwogCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0RNQSwgMCk7CkBAIC05MTAsMTMgKzg5MiwxMiBAQAogCQlnb3RvIGVycl9yZWxlYXNlX3JlZ2lvbjsKIAl9CiAKLQlkbWFfZGF0YVtjb3VudF0uY2hhbm5lbCA9IHJlcy0+c3RhcnQ7Ci0JY291bnQrKzsKLQlkbWFfZGF0YVtjb3VudF0ubmFtZSA9ICJJMlMgUENNIFN0ZXJlbyBpbiI7Ci0JZG1hX2RhdGFbY291bnRdLmV2ZW50cV9ubyA9IHBkYXRhLT5ldmVudHFfbm87Ci0JZG1hX2RhdGFbY291bnRdLmRtYV9hZGRyID0gKGRtYV9hZGRyX3QpKHBkYXRhLT5yeF9kbWFfb2Zmc2V0ICsKKwlkbWFfZGF0YS0+Y2hhbm5lbCA9IHJlcy0+c3RhcnQ7CisKKwlkbWFfZGF0YSA9ICZkZXYtPmRtYV9wYXJhbXNbU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFXTsKKwlkbWFfZGF0YS0+ZXZlbnRxX25vID0gcGRhdGEtPmV2ZW50cV9ubzsKKwlkbWFfZGF0YS0+ZG1hX2FkZHIgPSAoZG1hX2FkZHJfdCkocGRhdGEtPnJ4X2RtYV9vZmZzZXQgKwogCQkJCQkJCWlvX3YycChkZXYtPmJhc2UpKTsKLQlkZXYtPmRtYV9wYXJhbXNbU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFXSA9ICZkbWFfZGF0YVtjb3VudF07CiAKIAlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9ETUEsIDEpOwogCWlmICghcmVzKSB7CkBAIC05MjQsNyArOTA1LDcgQEAKIAkJZ290byBlcnJfcmVsZWFzZV9yZWdpb247CiAJfQogCi0JZG1hX2RhdGFbY291bnRdLmNoYW5uZWwgPSByZXMtPnN0YXJ0OworCWRtYV9kYXRhLT5jaGFubmVsID0gcmVzLT5zdGFydDsKIAlkYXZpbmNpX21jYXNwX2RhaVtwZGF0YS0+b3BfbW9kZV0ucHJpdmF0ZV9kYXRhID0gZGV2OwogCWRhdmluY2lfbWNhc3BfZGFpW3BkYXRhLT5vcF9tb2RlXS5kZXYgPSAmcGRldi0+ZGV2OwogCXJldCA9IHNuZF9zb2NfcmVnaXN0ZXJfZGFpKCZkYXZpbmNpX21jYXNwX2RhaVtwZGF0YS0+b3BfbW9kZV0pOwpAQCAtOTM2LDggKzkxNyw2IEBACiBlcnJfcmVsZWFzZV9yZWdpb246CiAJcmVsZWFzZV9tZW1fcmVnaW9uKG1lbS0+c3RhcnQsIChtZW0tPmVuZCAtIG1lbS0+c3RhcnQpICsgMSk7CiBlcnJfcmVsZWFzZV9kYXRhOgotCWtmcmVlKGRtYV9kYXRhKTsKLWVycl9yZWxlYXNlX2RldjoKIAlrZnJlZShkZXYpOwogCiAJcmV0dXJuIHJldDsKQEAgLTk0Niw3ICs5MjUsNiBAQAogc3RhdGljIGludCBkYXZpbmNpX21jYXNwX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBzbmRfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKLQlzdHJ1Y3QgZGF2aW5jaV9wY21fZG1hX3BhcmFtcyAqZG1hX2RhdGE7CiAJc3RydWN0IGRhdmluY2lfYXVkaW9fZGV2ICpkZXY7CiAJc3RydWN0IHJlc291cmNlICptZW07CiAKQEAgLTk1OSw4ICs5MzcsNiBAQAogCW1lbSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CiAJcmVsZWFzZV9tZW1fcmVnaW9uKG1lbS0+c3RhcnQsIChtZW0tPmVuZCAtIG1lbS0+c3RhcnQpICsgMSk7CiAKLQlkbWFfZGF0YSA9IGRldi0+ZG1hX3BhcmFtc1tTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLXTsKLQlrZnJlZShkbWFfZGF0YSk7CiAJa2ZyZWUoZGV2KTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2RhdmluY2kvZGF2aW5jaS1tY2FzcC5oIGIvc291bmQvc29jL2RhdmluY2kvZGF2aW5jaS1tY2FzcC5oCmluZGV4IDU1NDM1NGMuLjlkMTc5Y2MgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9kYXZpbmNpL2RhdmluY2ktbWNhc3AuaAorKysgYi9zb3VuZC9zb2MvZGF2aW5jaS9kYXZpbmNpLW1jYXNwLmgKQEAgLTM5LDEwICszOSwxNSBAQAogfTsKIAogc3RydWN0IGRhdmluY2lfYXVkaW9fZGV2IHsKKwkvKgorCSAqIGRtYV9wYXJhbXMgbXVzdCBiZSBmaXJzdCBiZWNhdXNlIHJ0ZC0+ZGFpLT5jcHVfZGFpLT5wcml2YXRlX2RhdGEKKwkgKiBpcyBjYXN0IHRvIGEgcG9pbnRlciBvZiBhbiBhcnJheSBvZiBzdHJ1Y3QgZGF2aW5jaV9wY21fZG1hX3BhcmFtcyBpbgorCSAqIGRhdmluY2lfcGNtX29wZW4uCisJICovCisJc3RydWN0IGRhdmluY2lfcGNtX2RtYV9wYXJhbXMgZG1hX3BhcmFtc1syXTsKIAl2b2lkIF9faW9tZW0gKmJhc2U7CiAJaW50IHNhbXBsZV9yYXRlOwogCXN0cnVjdCBjbGsgKmNsazsKLQlzdHJ1Y3QgZGF2aW5jaV9wY21fZG1hX3BhcmFtcyAqZG1hX3BhcmFtc1syXTsKIAl1bnNpZ25lZCBpbnQgY29kZWNfZm10OwogCiAJLyogTWNBU1Agc3BlY2lmaWMgZGF0YSAqLwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2RhdmluY2kvZGF2aW5jaS1wY20uYyBiL3NvdW5kL3NvYy9kYXZpbmNpL2RhdmluY2ktcGNtLmMKaW5kZXggMmY3ZGE0OS4uYzczYTkxNSAxMDA2NDQKLS0tIGEvc291bmQvc29jL2RhdmluY2kvZGF2aW5jaS1wY20uYworKysgYi9zb3VuZC9zb2MvZGF2aW5jaS9kYXZpbmNpLXBjbS5jCkBAIC0xMjYsMTYgKzEyNiw5IEBACiBzdGF0aWMgaW50IGRhdmluY2lfcGNtX2RtYV9yZXF1ZXN0KHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQogewogCXN0cnVjdCBkYXZpbmNpX3J1bnRpbWVfZGF0YSAqcHJ0ZCA9IHN1YnN0cmVhbS0+cnVudGltZS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3QgZGF2aW5jaV9wY21fZG1hX3BhcmFtcyAqZG1hX2RhdGEgPSBydGQtPmRhaS0+Y3B1X2RhaS0+ZG1hX2RhdGE7CiAJc3RydWN0IGVkbWFjY19wYXJhbSBwX3JhbTsKIAlpbnQgcmV0OwogCi0JaWYgKCFkbWFfZGF0YSkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQlwcnRkLT5wYXJhbXMgPSBkbWFfZGF0YTsKLQogCS8qIFJlcXVlc3QgbWFzdGVyIERNQSBjaGFubmVsICovCiAJcmV0ID0gZWRtYV9hbGxvY19jaGFubmVsKHBydGQtPnBhcmFtcy0+Y2hhbm5lbCwKIAkJCQkgIGRhdmluY2lfcGNtX2RtYV9pcnEsIHN1YnN0cmVhbSwKQEAgLTI0NCw2ICsyMzcsMTEgQEAKIAlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOwogCXN0cnVjdCBkYXZpbmNpX3J1bnRpbWVfZGF0YSAqcHJ0ZDsKIAlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGRhdmluY2lfcGNtX2RtYV9wYXJhbXMgKnBhID0gcnRkLT5kYWktPmNwdV9kYWktPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgZGF2aW5jaV9wY21fZG1hX3BhcmFtcyAqcGFyYW1zID0gJnBhW3N1YnN0cmVhbS0+c3RyZWFtXTsKKwlpZiAoIXBhcmFtcykKKwkJcmV0dXJuIC1FTk9ERVY7CiAKIAlzbmRfc29jX3NldF9ydW50aW1lX2h3cGFyYW1zKHN1YnN0cmVhbSwgJmRhdmluY2lfcGNtX2hhcmR3YXJlKTsKIAkvKiBlbnN1cmUgdGhhdCBidWZmZXIgc2l6ZSBpcyBhIG11bHRpcGxlIG9mIHBlcmlvZCBzaXplICovCkBAIC0yNTcsNiArMjU1LDcgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlzcGluX2xvY2tfaW5pdCgmcHJ0ZC0+bG9jayk7CisJcHJ0ZC0+cGFyYW1zID0gcGFyYW1zOwogCiAJcnVudGltZS0+cHJpdmF0ZV9kYXRhID0gcHJ0ZDsKIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2RhdmluY2kvZGF2aW5jaS1wY20uaCBiL3NvdW5kL3NvYy9kYXZpbmNpL2RhdmluY2ktcGNtLmgKaW5kZXggNjNkOTYyNS4uODc0NjYwNiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2RhdmluY2kvZGF2aW5jaS1wY20uaAorKysgYi9zb3VuZC9zb2MvZGF2aW5jaS9kYXZpbmNpLXBjbS5oCkBAIC0xNyw3ICsxNyw2IEBACiAKIAogc3RydWN0IGRhdmluY2lfcGNtX2RtYV9wYXJhbXMgewotCWNoYXIgKm5hbWU7CQkJLyogc3RyZWFtIGlkZW50aWZpZXIgKi8KIAlpbnQgY2hhbm5lbDsJCQkvKiBzeW5jIGRtYSBjaGFubmVsIElEICovCiAJdW5zaWduZWQgc2hvcnQgYWNudDsKIAlkbWFfYWRkcl90IGRtYV9hZGRyOwkJLyogZGV2aWNlIHBoeXNpY2FsIGFkZHJlc3MgZm9yIERNQSAqLwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2lteC9teGMtc3NpLmMgYi9zb3VuZC9zb2MvaW14L214Yy1zc2kuYwppbmRleCAzODA2ZmYyLi5jY2RlZmU2IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvaW14L214Yy1zc2kuYworKysgYi9zb3VuZC9zb2MvaW14L214Yy1zc2kuYwpAQCAtMzk3LDE0ICszOTcsNiBAQAogCQlicmVhazsKIAl9CiAKLQkvKiBzeW5jICovCi0JaWYgKCEoZm10ICYgU05EX1NPQ19EQUlGTVRfQVNZTkMpKQotCQlzY3IgfD0gU1NJX1NDUl9TWU47Ci0KLQkvKiB0ZG0gLSBvbmx5IGZvciBzdGVyZW8gYXRtICovCi0JaWYgKGZtdCAmIFNORF9TT0NfREFJRk1UX1RETSkKLQkJc2NyIHw9IFNTSV9TQ1JfTkVUOwotCiAJaWYgKGNwdV9kYWktPmlkID09IElNWF9EQUlfU1NJMCB8fCBjcHVfZGFpLT5pZCA9PSBJTVhfREFJX1NTSTIpIHsKIAkJU1NJMV9TVENSID0gc3RjcjsKIAkJU1NJMV9TUkNSID0gc3JjcjsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9vbWFwL0tjb25maWcgYi9zb3VuZC9zb2Mvb21hcC9LY29uZmlnCmluZGV4IDJkZWU5ODMuLjY1M2EzNjIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9vbWFwL0tjb25maWcKKysrIGIvc291bmQvc29jL29tYXAvS2NvbmZpZwpAQCAtMjEsNyArMjEsMTggQEAKIAlzZWxlY3QgU05EX09NQVBfU09DX01DQlNQCiAJc2VsZWN0IFNORF9TT0NfQ1gyMDQ0MgogCWhlbHAKLQkgIFNheSBZIGlmIHlvdSB3YW50IHRvIGFkZCBzdXBwb3J0IGZvciBTb0MgYXVkaW8gb24gQW1zdHJhZCBEZWx0YS4KKwkgIFNheSBZICBpZiB5b3Ugd2FudCB0byBhZGQgc3VwcG9ydCAgZm9yIFNvQyBhdWRpbyBkZXZpY2UgIGNvbm5lY3RlZCB0bworCSAgYSBoYW5kc2V0IGFuZCBhIHNwZWFrZXJwaG9uZSBmb3VuZCBvbiBBbXN0cmFkIEUzIChEZWx0YSkgdmlkZW9waG9uZS4KKworCSAgTm90ZSB0aGF0IGluIG9yZGVyIHRvIGdldCB0aG9zZSBkZXZpY2VzIGZ1bGx5IHN1cHBvcnRlZCwgIHlvdSBoYXZlIHRvCisJICBidWlsZCAgdGhlIGtlcm5lbCAgd2l0aCAgc3RhbmRhcmQgIHNlcmlhbCBwb3J0ICBkcml2ZXIgIGluY2x1ZGVkICBhbmQKKwkgIGNvbmZpZ3VyZWQgZm9yIGF0IGxlYXN0IDQgcG9ydHMuICBUaGVuLCBmcm9tIHVzZXJzcGFjZSwgeW91IG11c3QgbG9hZAorCSAgYSBsaW5lIGRpc2NpcGxpbmUgIzE5IG9uIHRoZSBtb2RlbSAodHR5UzMpIHNlcmlhbCBsaW5lLiAgVGhlIHNpbXBsZXN0CisJICB3YXkgdG8gYWNoaWV2ZSB0aGlzIGlzIHRvIGluc3RhbGwgdXRpbC1saW51eC1uZyAgYW5kIHVzZSB0aGUgaW5jbHVkZWQKKwkgIGxkYXR0YWNoICB1dGlsaXR5LiAgVGhpcyAgY2FuIGJlICBzdGFydGVkICBhdXRvbWF0aWNhbGx5ICBmcm9tICB1ZGV2LAorCSAgYSBzaW1wbGUgcnVsZSBsaWtlIHRoaXMgb25lIHNob3VsZCBkbyB0aGUgdHJpY2sgKGl0IGRvZXMgZm9yIG1lKToKKwkgIAlBQ1RJT049PSJhZGQiLCBLRVJORUw9PSJjb250cm9sQzAiLCBcCisJCQkJUlVOKz0iL3Vzci9zYmluL2xkYXR0YWNoIDE5IC9kZXYvdHR5UzMiCiAKIGNvbmZpZyBTTkRfT01BUF9TT0NfT1NLNTkxMgogCXRyaXN0YXRlICJTb0MgQXVkaW8gc3VwcG9ydCBmb3Igb21hcCBvc2s1OTEyIgpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3B4YS9LY29uZmlnIGIvc291bmQvc29jL3B4YS9LY29uZmlnCmluZGV4IDYzNzViNGUuLmRjYjMxODEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9weGEvS2NvbmZpZworKysgYi9zb3VuZC9zb2MvcHhhL0tjb25maWcKQEAgLTEzOCw3ICsxMzgsNyBAQAogCiBjb25maWcgU05EX1BYQTJYWF9TT0NfSU1PVEUyCiAgICAgICAgdHJpc3RhdGUgIlNvQyBBdWRpbyBzdXBwb3J0IGZvciBJTW90ZSAyIgotICAgICAgIGRlcGVuZHMgb24gU05EX1BYQTJYWF9TT0MgJiYgTUFDSF9JTlRFTE1PVEUyCisgICAgICAgZGVwZW5kcyBvbiBTTkRfUFhBMlhYX1NPQyAmJiBNQUNIX0lOVEVMTU9URTIgJiYgSTJDCiAgICAgICAgc2VsZWN0IFNORF9QWEEyWFhfU09DX0kyUwogICAgICAgIHNlbGVjdCBTTkRfU09DX1dNODk0MAogICAgICAgIGhlbHAKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zb2MtY29yZS5jIGIvc291bmQvc29jL3NvYy1jb3JlLmMKaW5kZXggN2ZmMDRhZC4uMGExYjJmNiAxMDA2NDQKLS0tIGEvc291bmQvc29jL3NvYy1jb3JlLmMKKysrIGIvc291bmQvc29jL3NvYy1jb3JlLmMKQEAgLTgzNCw2ICs4MzQsOSBAQAogI2RlZmluZSBzb2NfcmVzdW1lCU5VTEwKICNlbmRpZgogCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyBudWxsX2RhaV9vcHMgPSB7Cit9OworCiBzdGF0aWMgdm9pZCBzbmRfc29jX2luc3RhbnRpYXRlX2NhcmQoc3RydWN0IHNuZF9zb2NfY2FyZCAqY2FyZCkKIHsKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gY29udGFpbmVyX29mKGNhcmQtPmRldiwKQEAgLTg3Nyw2ICs4ODAsMTEgQEAKIAkJCWFjOTcgPSAxOwogCX0KIAorCWZvciAoaSA9IDA7IGkgPCBjYXJkLT5udW1fbGlua3M7IGkrKykgeworCQlpZiAoIWNhcmQtPmRhaV9saW5rW2ldLmNvZGVjX2RhaS0+b3BzKQorCQkJY2FyZC0+ZGFpX2xpbmtbaV0uY29kZWNfZGFpLT5vcHMgPSAmbnVsbF9kYWlfb3BzOworCX0KKwogCS8qIElmIHdlIGhhdmUgQUM5NyBpbiB0aGUgc3lzdGVtIHRoZW4gZG9uJ3Qgd2FpdCBmb3IgdGhlCiAJICogY29kZWMuICBUaGlzIHdpbGwgbmVlZCByZXZpc2l0aW5nIGlmIHdlIGhhdmUgdG8gaGFuZGxlCiAJICogc3lzdGVtcyB3aXRoIG1peGVkIEFDOTcgYW5kIG5vbi1BQzk3IHBhcnRzLiAgT25seSBjaGVjayBmb3IKQEAgLTIzMjksOSArMjMzNyw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIG51bGxfZGFpX29wcyA9IHsKLX07Ci0KIC8qKgogICogc25kX3NvY19yZWdpc3Rlcl9kYWkgLSBSZWdpc3RlciBhIERBSSB3aXRoIHRoZSBBU29DIGNvcmUKICAqCmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvc29jLWRhcG0uYyBiL3NvdW5kL3NvYy9zb2MtZGFwbS5jCmluZGV4IGY3OTcxMWIuLmQ4OWY2ZGMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zb2MtZGFwbS5jCisrKyBiL3NvdW5kL3NvYy9zb2MtZGFwbS5jCkBAIC01MjQsNyArNTI0LDcgQEAKIAogCQkvKiBjb25uZWN0ZWQgamFjayBvciBzcGsgPyAqLwogCQlpZiAod2lkZ2V0LT5pZCA9PSBzbmRfc29jX2RhcG1faHAgfHwgd2lkZ2V0LT5pZCA9PSBzbmRfc29jX2RhcG1fc3BrIHx8Ci0JCQl3aWRnZXQtPmlkID09IHNuZF9zb2NfZGFwbV9saW5lKQorCQkgICAgKHdpZGdldC0+aWQgPT0gc25kX3NvY19kYXBtX2xpbmUgJiYgIWxpc3RfZW1wdHkoJndpZGdldC0+c291cmNlcykpKQogCQkJcmV0dXJuIDE7CiAJfQogCkBAIC01NzMsNyArNTczLDggQEAKIAkJCXJldHVybiAxOwogCiAJCS8qIGNvbm5lY3RlZCBqYWNrID8gKi8KLQkJaWYgKHdpZGdldC0+aWQgPT0gc25kX3NvY19kYXBtX21pYyB8fCB3aWRnZXQtPmlkID09IHNuZF9zb2NfZGFwbV9saW5lKQorCQlpZiAod2lkZ2V0LT5pZCA9PSBzbmRfc29jX2RhcG1fbWljIHx8CisJCSAgICAod2lkZ2V0LT5pZCA9PSBzbmRfc29jX2RhcG1fbGluZSAmJiAhbGlzdF9lbXB0eSgmd2lkZ2V0LT5zaW5rcykpKQogCQkJcmV0dXJuIDE7CiAJfQogCkBAIC0yMDcxLDkgKzIwNzIsOSBAQAogCQkJfQogCQl9CiAJfQotCW11dGV4X3VubG9jaygmY29kZWMtPm11dGV4KTsKIAogCWRhcG1fcG93ZXJfd2lkZ2V0cyhjb2RlYywgZXZlbnQpOworCW11dGV4X3VubG9jaygmY29kZWMtPm11dGV4KTsKIAlkdW1wX2RhcG0oY29kZWMsIF9fZnVuY19fKTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi9jYWlhcS9hdWRpby5jIGIvc291bmQvdXNiL2NhaWFxL2F1ZGlvLmMKaW5kZXggMTIxYWYwNi4uODZiMmMzYiAxMDA2NDQKLS0tIGEvc291bmQvdXNiL2NhaWFxL2F1ZGlvLmMKKysrIGIvc291bmQvdXNiL2NhaWFxL2F1ZGlvLmMKQEAgLTYyLDEwICs2MiwxNCBAQAogYWN0aXZhdGVfc3Vic3RyZWFtKHN0cnVjdCBzbmRfdXNiX2NhaWFxZGV2ICpkZXYsCiAJICAgICAgICAgICBzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YikKIHsKKwlzcGluX2xvY2soJmRldi0+c3BpbmxvY2spOworCiAJaWYgKHN1Yi0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spCiAJCWRldi0+c3ViX3BsYXliYWNrW3N1Yi0+bnVtYmVyXSA9IHN1YjsKIAllbHNlCiAJCWRldi0+c3ViX2NhcHR1cmVbc3ViLT5udW1iZXJdID0gc3ViOworCisJc3Bpbl91bmxvY2soJmRldi0+c3BpbmxvY2spOwogfQogCiBzdGF0aWMgdm9pZApAQCAtMjY5LDE2ICsyNzMsMjIgQEAKIHsKIAlpbnQgaW5kZXggPSBzdWItPm51bWJlcjsKIAlzdHJ1Y3Qgc25kX3VzYl9jYWlhcWRldiAqZGV2ID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWIpOworCXNuZF9wY21fdWZyYW1lc190IHB0cjsKKworCXNwaW5fbG9jaygmZGV2LT5zcGlubG9jayk7CiAKIAlpZiAoZGV2LT5pbnB1dF9wYW5pYyB8fCBkZXYtPm91dHB1dF9wYW5pYykKLQkJcmV0dXJuIFNORFJWX1BDTV9QT1NfWFJVTjsKKwkJcHRyID0gU05EUlZfUENNX1BPU19YUlVOOwogCiAJaWYgKHN1Yi0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spCi0JCXJldHVybiBieXRlc190b19mcmFtZXMoc3ViLT5ydW50aW1lLAorCQlwdHIgPSBieXRlc190b19mcmFtZXMoc3ViLT5ydW50aW1lLAogCQkJCQlkZXYtPmF1ZGlvX291dF9idWZfcG9zW2luZGV4XSk7CiAJZWxzZQotCQlyZXR1cm4gYnl0ZXNfdG9fZnJhbWVzKHN1Yi0+cnVudGltZSwKKwkJcHRyID0gYnl0ZXNfdG9fZnJhbWVzKHN1Yi0+cnVudGltZSwKIAkJCQkJZGV2LT5hdWRpb19pbl9idWZfcG9zW2luZGV4XSk7CisKKwlzcGluX3VubG9jaygmZGV2LT5zcGlubG9jayk7CisJcmV0dXJuIHB0cjsKIH0KIAogLyogb3BlcmF0b3JzIGZvciBib3RoIHBsYXliYWNrIGFuZCBjYXB0dXJlICovCmRpZmYgLS1naXQgYS9zb3VuZC91c2IvY2FpYXEvZGV2aWNlLmMgYi9zb3VuZC91c2IvY2FpYXEvZGV2aWNlLmMKaW5kZXggODNlNmMxMy4uYTNmMDJkZCAxMDA2NDQKLS0tIGEvc291bmQvdXNiL2NhaWFxL2RldmljZS5jCisrKyBiL3NvdW5kL3VzYi9jYWlhcS9kZXZpY2UuYwpAQCAtMzUsNyArMzUsNyBAQAogI2luY2x1ZGUgImlucHV0LmgiCiAKIE1PRFVMRV9BVVRIT1IoIkRhbmllbCBNYWNrIDxkYW5pZWxAY2FpYXEuZGU+Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oImNhaWFxIFVTQiBhdWRpbywgdmVyc2lvbiAxLjMuMTkiKTsKK01PRFVMRV9ERVNDUklQVElPTigiY2FpYXEgVVNCIGF1ZGlvLCB2ZXJzaW9uIDEuMy4yMCIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX1NVUFBPUlRFRF9ERVZJQ0UoInt7TmF0aXZlIEluc3RydW1lbnRzLCBSaWdLb250cm9sMn0sIgogCQkJICJ7TmF0aXZlIEluc3RydW1lbnRzLCBSaWdLb250cm9sM30sIgpkaWZmIC0tZ2l0IGEvc291bmQvdXNiL3VzYm1peGVyLmMgYi9zb3VuZC91c2IvdXNibWl4ZXIuYwppbmRleCBhYjVhM2FjLi45ZWZjZmQwIDEwMDY0NAotLS0gYS9zb3VuZC91c2IvdXNibWl4ZXIuYworKysgYi9zb3VuZC91c2IvdXNibWl4ZXIuYwpAQCAtODk4LDYgKzg5OCwxMSBAQAogICogYnVpbGQgYSBmZWF0dXJlIGNvbnRyb2wKICAqLwogCitzdGF0aWMgc2l6ZV90IGFwcGVuZF9jdGxfbmFtZShzdHJ1Y3Qgc25kX2tjb250cm9sICprY3RsLCBjb25zdCBjaGFyICpzdHIpCit7CisJcmV0dXJuIHN0cmxjYXQoa2N0bC0+aWQubmFtZSwgc3RyLCBzaXplb2Yoa2N0bC0+aWQubmFtZSkpOworfQorCiBzdGF0aWMgdm9pZCBidWlsZF9mZWF0dXJlX2N0bChzdHJ1Y3QgbWl4ZXJfYnVpbGQgKnN0YXRlLCB1bnNpZ25lZCBjaGFyICpkZXNjLAogCQkJICAgICAgdW5zaWduZWQgaW50IGN0bF9tYXNrLCBpbnQgY29udHJvbCwKIAkJCSAgICAgIHN0cnVjdCB1c2JfYXVkaW9fdGVybSAqaXRlcm0sIGludCB1bml0aWQpCkBAIC05NzgsMTMgKzk4MywxMyBAQAogCQkgKi8KIAkJaWYgKCEgbWFwcGVkX25hbWUgJiYgISAoc3RhdGUtPm90ZXJtLnR5cGUgPj4gMTYpKSB7CiAJCQlpZiAoKHN0YXRlLT5vdGVybS50eXBlICYgMHhmZjAwKSA9PSAweDAxMDApIHsKLQkJCQlsZW4gPSBzdHJsY2F0KGtjdGwtPmlkLm5hbWUsICIgQ2FwdHVyZSIsIHNpemVvZihrY3RsLT5pZC5uYW1lKSk7CisJCQkJbGVuID0gYXBwZW5kX2N0bF9uYW1lKGtjdGwsICIgQ2FwdHVyZSIpOwogCQkJfSBlbHNlIHsKLQkJCQlsZW4gPSBzdHJsY2F0KGtjdGwtPmlkLm5hbWUgKyBsZW4sICIgUGxheWJhY2siLCBzaXplb2Yoa2N0bC0+aWQubmFtZSkpOworCQkJCWxlbiA9IGFwcGVuZF9jdGxfbmFtZShrY3RsLCAiIFBsYXliYWNrIik7CiAJCQl9CiAJCX0KLQkJc3RybGNhdChrY3RsLT5pZC5uYW1lICsgbGVuLCBjb250cm9sID09IFVTQl9GRUFUVVJFX01VVEUgPyAiIFN3aXRjaCIgOiAiIFZvbHVtZSIsCi0JCQlzaXplb2Yoa2N0bC0+aWQubmFtZSkpOworCQlhcHBlbmRfY3RsX25hbWUoa2N0bCwgY29udHJvbCA9PSBVU0JfRkVBVFVSRV9NVVRFID8KKwkJCQkiIFN3aXRjaCIgOiAiIFZvbHVtZSIpOwogCQlpZiAoY29udHJvbCA9PSBVU0JfRkVBVFVSRV9WT0xVTUUpIHsKIAkJCWtjdGwtPnRsdi5jID0gbWl4ZXJfdm9sX3RsdjsKIAkJCWtjdGwtPnZkWzBdLmFjY2VzcyB8PSAKQEAgLTExNDMsNyArMTE0OCw3IEBACiAJCWxlbiA9IGdldF90ZXJtX25hbWUoc3RhdGUsIGl0ZXJtLCBrY3RsLT5pZC5uYW1lLCBzaXplb2Yoa2N0bC0+aWQubmFtZSksIDApOwogCWlmICghIGxlbikKIAkJbGVuID0gc3ByaW50ZihrY3RsLT5pZC5uYW1lLCAiTWl4ZXIgU291cmNlICVkIiwgaW5fY2ggKyAxKTsKLQlzdHJsY2F0KGtjdGwtPmlkLm5hbWUgKyBsZW4sICIgVm9sdW1lIiwgc2l6ZW9mKGtjdGwtPmlkLm5hbWUpKTsKKwlhcHBlbmRfY3RsX25hbWUoa2N0bCwgIiBWb2x1bWUiKTsKIAogCXNuZF9wcmludGRkKEtFUk5fSU5GTyAiWyVkXSBNVSBbJXNdIGNoID0gJWQsIHZhbCA9ICVkLyVkXG4iLAogCQkgICAgY3ZhbC0+aWQsIGtjdGwtPmlkLm5hbWUsIGN2YWwtPmNoYW5uZWxzLCBjdmFsLT5taW4sIGN2YWwtPm1heCk7CkBAIC0xNDAwLDggKzE0MDUsOCBAQAogCQkJaWYgKCEgbGVuKQogCQkJCXN0cmxjcHkoa2N0bC0+aWQubmFtZSwgbmFtZSwgc2l6ZW9mKGtjdGwtPmlkLm5hbWUpKTsKIAkJfQotCQlzdHJsY2F0KGtjdGwtPmlkLm5hbWUsICIgIiwgc2l6ZW9mKGtjdGwtPmlkLm5hbWUpKTsKLQkJc3RybGNhdChrY3RsLT5pZC5uYW1lLCB2YWxpbmZvLT5zdWZmaXgsIHNpemVvZihrY3RsLT5pZC5uYW1lKSk7CisJCWFwcGVuZF9jdGxfbmFtZShrY3RsLCAiICIpOworCQlhcHBlbmRfY3RsX25hbWUoa2N0bCwgdmFsaW5mby0+c3VmZml4KTsKIAogCQlzbmRfcHJpbnRkZChLRVJOX0lORk8gIlslZF0gUFUgWyVzXSBjaCA9ICVkLCB2YWwgPSAlZC8lZFxuIiwKIAkJCSAgICBjdmFsLT5pZCwga2N0bC0+aWQubmFtZSwgY3ZhbC0+Y2hhbm5lbHMsIGN2YWwtPm1pbiwgY3ZhbC0+bWF4KTsKQEAgLTE2MTAsOSArMTYxNSw5IEBACiAJCQlzdHJsY3B5KGtjdGwtPmlkLm5hbWUsICJVU0IiLCBzaXplb2Yoa2N0bC0+aWQubmFtZSkpOwogCiAJCWlmICgoc3RhdGUtPm90ZXJtLnR5cGUgJiAweGZmMDApID09IDB4MDEwMCkKLQkJCXN0cmxjYXQoa2N0bC0+aWQubmFtZSwgIiBDYXB0dXJlIFNvdXJjZSIsIHNpemVvZihrY3RsLT5pZC5uYW1lKSk7CisJCQlhcHBlbmRfY3RsX25hbWUoa2N0bCwgIiBDYXB0dXJlIFNvdXJjZSIpOwogCQllbHNlCi0JCQlzdHJsY2F0KGtjdGwtPmlkLm5hbWUsICIgUGxheWJhY2sgU291cmNlIiwgc2l6ZW9mKGtjdGwtPmlkLm5hbWUpKTsKKwkJCWFwcGVuZF9jdGxfbmFtZShrY3RsLCAiIFBsYXliYWNrIFNvdXJjZSIpOwogCX0KIAogCXNuZF9wcmludGRkKEtFUk5fSU5GTyAiWyVkXSBTVSBbJXNdIGl0ZW1zID0gJWRcbiIsCmRpZmYgLS1naXQgYS9zb3VuZC91c2IvdXN4MnkvdXMxMjJsLmMgYi9zb3VuZC91c2IvdXN4MnkvdXMxMjJsLmMKaW5kZXggZmQ0NDk0Ni4uOTlmMzM3NiAxMDA2NDQKLS0tIGEvc291bmQvdXNiL3VzeDJ5L3VzMTIybC5jCisrKyBiL3NvdW5kL3VzYi91c3gyeS91czEyMmwuYwpAQCAtMTU0LDcgKzE1NCw3IEBACiAJc25kX3ByaW50ZGQoS0VSTl9ERUJVRyAiJWlcbiIsIGF0b21pY19yZWFkKCZ1czEyMmwtPm1tYXBfY291bnQpKTsKIH0KIAotc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCB1c2Jfc3RyZWFtX2h3ZGVwX3ZtX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgdXNiX3N0cmVhbV9od2RlcF92bV9vcHMgPSB7CiAJLm9wZW4gPSB1c2Jfc3RyZWFtX2h3ZGVwX3ZtX29wZW4sCiAJLmZhdWx0ID0gdXNiX3N0cmVhbV9od2RlcF92bV9mYXVsdCwKIAkuY2xvc2UgPSB1c2Jfc3RyZWFtX2h3ZGVwX3ZtX2Nsb3NlLApkaWZmIC0tZ2l0IGEvc291bmQvdXNiL3VzeDJ5L3VzWDJZaHdkZXAuYyBiL3NvdW5kL3VzYi91c3gyeS91c1gyWWh3ZGVwLmMKaW5kZXggZjNkOGY3MS4uNTJlMDRiMiAxMDA2NDQKLS0tIGEvc291bmQvdXNiL3VzeDJ5L3VzWDJZaHdkZXAuYworKysgYi9zb3VuZC91c2IvdXN4MnkvdXNYMllod2RlcC5jCkBAIC01Myw3ICs1Myw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgdXM0MjhjdGxzX3ZtX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgdXM0MjhjdGxzX3ZtX29wcyA9IHsKIAkuZmF1bHQgPSBzbmRfdXM0MjhjdGxzX3ZtX2ZhdWx0LAogfTsKIApkaWZmIC0tZ2l0IGEvc291bmQvdXNiL3VzeDJ5L3VzeDJ5aHdkZXBwY20uYyBiL3NvdW5kL3VzYi91c3gyeS91c3gyeWh3ZGVwcGNtLmMKaW5kZXggMTE3OTQ2Zi4uNGIyMzA0YyAxMDA2NDQKLS0tIGEvc291bmQvdXNiL3VzeDJ5L3VzeDJ5aHdkZXBwY20uYworKysgYi9zb3VuZC91c2IvdXN4MnkvdXN4Mnlod2RlcHBjbS5jCkBAIC02OTcsNyArNjk3LDcgQEAKIH0KIAogCi1zdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHNuZF91c1gyWV9od2RlcF9wY21fdm1fb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBzbmRfdXNYMllfaHdkZXBfcGNtX3ZtX29wcyA9IHsKIAkub3BlbiA9IHNuZF91c1gyWV9od2RlcF9wY21fdm1fb3BlbiwKIAkuY2xvc2UgPSBzbmRfdXNYMllfaHdkZXBfcGNtX3ZtX2Nsb3NlLAogCS5mYXVsdCA9IHNuZF91c1gyWV9od2RlcF9wY21fdm1fZmF1bHQsCmRpZmYgLS1naXQgYS90b29scy9wZXJmLy5naXRpZ25vcmUgYi90b29scy9wZXJmLy5naXRpZ25vcmUKaW5kZXggZDY5YTc1OS4uMDg1NGYxMSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi8uZ2l0aWdub3JlCisrKyBiL3Rvb2xzL3BlcmYvLmdpdGlnbm9yZQpAQCAtMTAsNiArMTAsNyBAQAogcGVyZi10b3AKIHBlcmYqLjEKIHBlcmYqLnhtbAorcGVyZiouaHRtbAogY29tbW9uLWNtZHMuaAogdGFncwogVEFHUwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtdGltZWNoYXJ0LnR4dCBiL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLXRpbWVjaGFydC50eHQKaW5kZXggMWMyZWQzMC4uYTc5MTAwOSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtdGltZWNoYXJ0LnR4dAorKysgYi90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi10aW1lY2hhcnQudHh0CkBAIC0zMSw2ICszMSw5IEBACiAtdzo6CiAtLXdpZHRoPTo6CiAgICAgICAgIFNlbGVjdCB0aGUgd2lkdGggb2YgdGhlIFNWRyBmaWxlIChkZWZhdWx0OiAxMDAwKQorLXA6OgorLS1wb3dlci1vbmx5OjoKKyAgICAgICAgT25seSBvdXRwdXQgdGhlIENQVSBwb3dlciBzZWN0aW9uIG9mIHRoZSBkaWFncmFtCiAKIAogU0VFIEFMU08KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvTWFrZWZpbGUgYi90b29scy9wZXJmL01ha2VmaWxlCmluZGV4IGI1ZjE5NTMuLjdlMTkwZDUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvTWFrZWZpbGUKKysrIGIvdG9vbHMvcGVyZi9NYWtlZmlsZQpAQCAtMTU3LDExICsxNTcsMTggQEAKIHVuYW1lX1AgOj0gJChzaGVsbCBzaCAtYyAndW5hbWUgLXAgMj4vZGV2L251bGwgfHwgZWNobyBub3QnKQogdW5hbWVfViA6PSAkKHNoZWxsIHNoIC1jICd1bmFtZSAtdiAyPi9kZXYvbnVsbCB8fCBlY2hvIG5vdCcpCiAKLSMgSWYgd2UncmUgb24gYSA2NC1iaXQga2VybmVsLCB1c2UgLW02NAotaWZuZGVmIE5PXzY0QklUCi0JaWZuZXEgKCQocGF0c3Vic3QgJTY0LCUsJCh1bmFtZV9NKSksJCh1bmFtZV9NKSkKLQkgIE02NCA6PSAtbTY0Ci0JZW5kaWYKKyMKKyMgQWRkIC1tMzIgZm9yIGNyb3NzLWJ1aWxkczoKKyMKK2lmZGVmIE5PXzY0QklUCisgIE1CSVRTIDo9IC1tMzIKK2Vsc2UKKyAgIworICAjIElmIHdlJ3JlIG9uIGEgNjQtYml0IGtlcm5lbCwgdXNlIC1tNjQ6CisgICMKKyAgaWZuZXEgKCQocGF0c3Vic3QgJTY0LCUsJCh1bmFtZV9NKSksJCh1bmFtZV9NKSkKKyAgICBNQklUUyA6PSAtbTY0CisgIGVuZGlmCiBlbmRpZgogCiAjIENGTEFHUyBhbmQgTERGTEFHUyBhcmUgZm9yIHRoZSB1c2VycyB0byBvdmVycmlkZSBmcm9tIHRoZSBjb21tYW5kIGxpbmUuCkBAIC0xNzAsOCArMTc3LDcgQEAKICMgSW5jbHVkZSBzYW5lciB3YXJuaW5ncyBoZXJlLCB3aGljaCBjYW4gY2F0Y2ggYnVnczoKICMKIAotRVhUUkFfV0FSTklOR1MgOj0gLVdjYXN0LWFsaWduCi1FWFRSQV9XQVJOSU5HUyA6PSAkKEVYVFJBX1dBUk5JTkdTKSAtV2Zvcm1hdAorRVhUUkFfV0FSTklOR1MgOj0gLVdmb3JtYXQKIEVYVFJBX1dBUk5JTkdTIDo9ICQoRVhUUkFfV0FSTklOR1MpIC1XZm9ybWF0LXNlY3VyaXR5CiBFWFRSQV9XQVJOSU5HUyA6PSAkKEVYVFJBX1dBUk5JTkdTKSAtV2Zvcm1hdC15MmsKIEVYVFJBX1dBUk5JTkdTIDo9ICQoRVhUUkFfV0FSTklOR1MpIC1Xc2hhZG93CkBAIC0xOTQsNyArMjAwLDcgQEAKIEVYVFJBX1dBUk5JTkdTIDo9ICQoRVhUUkFfV0FSTklOR1MpIC1Xc3RyaWN0LXByb3RvdHlwZXMKIEVYVFJBX1dBUk5JTkdTIDo9ICQoRVhUUkFfV0FSTklOR1MpIC1XZGVjbGFyYXRpb24tYWZ0ZXItc3RhdGVtZW50CiAKLUNGTEFHUyA9ICQoTTY0KSAtZ2dkYjMgLVdhbGwgLVdleHRyYSAtc3RkPWdudTk5IC1XZXJyb3IgLU82IC1mc3RhY2stcHJvdGVjdG9yLWFsbCAtRF9GT1JUSUZZX1NPVVJDRT0yICQoRVhUUkFfV0FSTklOR1MpCitDRkxBR1MgPSAkKE1CSVRTKSAtZ2dkYjMgLVdhbGwgLVdleHRyYSAtc3RkPWdudTk5IC1XZXJyb3IgLU82IC1mc3RhY2stcHJvdGVjdG9yLWFsbCAtRF9GT1JUSUZZX1NPVVJDRT0yICQoRVhUUkFfV0FSTklOR1MpCiBMREZMQUdTID0gLWxwdGhyZWFkIC1scnQgLWxlbGYgLWxtCiBBTExfQ0ZMQUdTID0gJChDRkxBR1MpCiBBTExfTERGTEFHUyA9ICQoTERGTEFHUykKQEAgLTQxNSw4ICs0MjEsMTIgQEAKIAlQVEhSRUFEX0xJQlMgPQogZW5kaWYKIAotaWZuZXEgKCQoc2hlbGwgc2ggLWMgIihlY2hvICdcI2luY2x1ZGUgPGxpYmVsZi5oPic7IGVjaG8gJ2ludCBtYWluKHZvaWQpIHsgRWxmICogZWxmID0gZWxmX2JlZ2luKDAsIEVMRl9DX1JFQURfTU1BUCwgMCk7IHJldHVybiAobG9uZyllbGY7IH0nKSB8ICQoQ0MpIC14IGMgLSAkKEFMTF9DRkxBR1MpIC1EX0xBUkdFRklMRTY0X1NPVVJDRSAtRF9GSUxFX09GRlNFVF9CSVRTPTY0IC1vIC9kZXYvbnVsbCAkKEFMTF9MREZMQUdTKSA+IC9kZXYvbnVsbCAyPiYxICYmIGVjaG8geSIpLCB5KQotCW1zZyA6PSAkKGVycm9yIE5vIGxpYmVsZi5oL2xpYmVsZiBmb3VuZCwgcGxlYXNlIGluc3RhbGwgbGliZWxmLWRldi9lbGZ1dGlscy1saWJlbGYtZGV2ZWwpOworaWZlcSAoJChzaGVsbCBzaCAtYyAiKGVjaG8gJ1wjaW5jbHVkZSA8bGliZWxmLmg+JzsgZWNobyAnaW50IG1haW4odm9pZCkgeyBFbGYgKiBlbGYgPSBlbGZfYmVnaW4oMCwgRUxGX0NfUkVBRCwgMCk7IHJldHVybiAobG9uZyllbGY7IH0nKSB8ICQoQ0MpIC14IGMgLSAkKEFMTF9DRkxBR1MpIC1EX0xBUkdFRklMRTY0X1NPVVJDRSAtRF9GSUxFX09GRlNFVF9CSVRTPTY0IC1vIC9kZXYvbnVsbCAkKEFMTF9MREZMQUdTKSA+IC9kZXYvbnVsbCAyPiYxICYmIGVjaG8geSIpLCB5KQorCWlmbmVxICgkKHNoZWxsIHNoIC1jICIoZWNobyAnXCNpbmNsdWRlIDxsaWJlbGYuaD4nOyBlY2hvICdpbnQgbWFpbih2b2lkKSB7IEVsZiAqIGVsZiA9IGVsZl9iZWdpbigwLCBFTEZfQ19SRUFEX01NQVAsIDApOyByZXR1cm4gKGxvbmcpZWxmOyB9JykgfCAkKENDKSAteCBjIC0gJChBTExfQ0ZMQUdTKSAtRF9MQVJHRUZJTEU2NF9TT1VSQ0UgLURfRklMRV9PRkZTRVRfQklUUz02NCAtbyAvZGV2L251bGwgJChBTExfTERGTEFHUykgPiAvZGV2L251bGwgMj4mMSAmJiBlY2hvIHkiKSwgeSkKKwkJQkFTSUNfQ0ZMQUdTICs9IC1ETElCRUxGX05PX01NQVAKKwllbmRpZgorZWxzZQorCW1zZyA6PSAkKGVycm9yIE5vIGxpYmVsZi5oL2xpYmVsZiBmb3VuZCwgcGxlYXNlIGluc3RhbGwgbGliZWxmLWRldi9lbGZ1dGlscy1saWJlbGYtZGV2ZWwgYW5kIGdsaWJjLWRldltlbF0pOwogZW5kaWYKIAogaWZkZWYgTk9fREVNQU5HTEUKQEAgLTcyOCw3ICs3MzgsNyBAQAogY29tbW9uLWNtZHMuaDogdXRpbC9nZW5lcmF0ZS1jbWRsaXN0LnNoIGNvbW1hbmQtbGlzdC50eHQKIAogY29tbW9uLWNtZHMuaDogJCh3aWxkY2FyZCBEb2N1bWVudGF0aW9uL3BlcmYtKi50eHQpCi0JJChRVUlFVF9HRU4pdXRpbC9nZW5lcmF0ZS1jbWRsaXN0LnNoID4gJEArICYmIG12ICRAKyAkQAorCSQoUVVJRVRfR0VOKS4gdXRpbC9nZW5lcmF0ZS1jbWRsaXN0LnNoID4gJEArICYmIG12ICRAKyAkQAogCiAkKHBhdHN1YnN0ICUuc2gsJSwkKFNDUklQVF9TSCkpIDogJSA6ICUuc2gKIAkkKFFVSUVUX0dFTikkKFJNKSAkQCAkQCsgJiYgXApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLXJlY29yZC5jIGIvdG9vbHMvcGVyZi9idWlsdGluLXJlY29yZC5jCmluZGV4IGE1YTA1MGEuLjNlZWVmMzMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1yZWNvcmQuYworKysgYi90b29scy9wZXJmL2J1aWx0aW4tcmVjb3JkLmMKQEAgLTQxLDYgKzQxLDcgQEAKIHN0YXRpYyBpbnQJCQlzeXN0ZW1fd2lkZQkJCT0gMDsKIHN0YXRpYyBpbnQJCQlwcm9maWxlX2NwdQkJCT0gLTE7CiBzdGF0aWMgcGlkX3QJCQl0YXJnZXRfcGlkCQkJPSAtMTsKK3N0YXRpYyBwaWRfdAkJCWNoaWxkX3BpZAkJCT0gLTE7CiBzdGF0aWMgaW50CQkJaW5oZXJpdAkJCQk9IDE7CiBzdGF0aWMgaW50CQkJZm9yY2UJCQkJPSAwOwogc3RhdGljIGludAkJCWFwcGVuZF9maWxlCQkJPSAwOwpAQCAtMTg0LDYgKzE4NSw5IEBACiAKIHN0YXRpYyB2b2lkIHNpZ19hdGV4aXQodm9pZCkKIHsKKwlpZiAoY2hpbGRfcGlkICE9IC0xKQorCQlraWxsKGNoaWxkX3BpZCwgU0lHVEVSTSk7CisKIAlpZiAoc2lnbnIgPT0gLTEpCiAJCXJldHVybjsKIApAQCAtNjEwLDYgKzYxNCw4IEBACiAJCQkJZXhpdCgtMSk7CiAJCQl9CiAJCX0KKworCQljaGlsZF9waWQgPSBwaWQ7CiAJfQogCiAJaWYgKHJlYWx0aW1lX3ByaW8pIHsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1zY2hlZC5jIGIvdG9vbHMvcGVyZi9idWlsdGluLXNjaGVkLmMKaW5kZXggZWE5YzE1Yy4uY2UyZDViZSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9idWlsdGluLXNjaGVkLmMKKysrIGIvdG9vbHMvcGVyZi9idWlsdGluLXNjaGVkLmMKQEAgLTEyODcsNyArMTI4Nyw3IEBACiAKIHN0YXRpYyBMSVNUX0hFQUQoc29ydF9saXN0KTsKIAotc3RhdGljIGludCBzb3J0X2RpbWVuc2lvbl9fYWRkKGNoYXIgKnRvaywgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCkKK3N0YXRpYyBpbnQgc29ydF9kaW1lbnNpb25fX2FkZChjb25zdCBjaGFyICp0b2ssIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpCiB7CiAJaW50IGk7CiAKQEAgLTE5MTcsNyArMTkxNyw3IEBACiAKIAlmcmVlKHN0cik7CiAKLQlzb3J0X2RpbWVuc2lvbl9fYWRkKChjaGFyICopInBpZCIsICZjbXBfcGlkKTsKKwlzb3J0X2RpbWVuc2lvbl9fYWRkKCJwaWQiLCAmY21wX3BpZCk7CiB9CiAKIHN0YXRpYyBjb25zdCBjaGFyICpyZWNvcmRfYXJnc1tdID0gewpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLXN0YXQuYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1zdGF0LmMKaW5kZXggMTZhZjJkOC4uM2RiMzFlNyAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9idWlsdGluLXN0YXQuYworKysgYi90b29scy9wZXJmL2J1aWx0aW4tc3RhdC5jCkBAIC02OSw3ICs2OSw4IEBACiBzdGF0aWMgaW50CQkJcnVuX2NvdW50CQkJPSAgMTsKIHN0YXRpYyBpbnQJCQlpbmhlcml0CQkJCT0gIDE7CiBzdGF0aWMgaW50CQkJc2NhbGUJCQkJPSAgMTsKLXN0YXRpYyBpbnQJCQl0YXJnZXRfcGlkCQkJPSAtMTsKK3N0YXRpYyBwaWRfdAkJCXRhcmdldF9waWQJCQk9IC0xOworc3RhdGljIHBpZF90CQkJY2hpbGRfcGlkCQkJPSAtMTsKIHN0YXRpYyBpbnQJCQludWxsX3J1bgkJCT0gIDA7CiAKIHN0YXRpYyBpbnQJCQlmZFtNQVhfTlJfQ1BVU11bTUFYX0NPVU5URVJTXTsKQEAgLTI4NSw2ICsyODYsOCBAQAogCQlleGl0KC0xKTsKIAl9CiAKKwljaGlsZF9waWQgPSBwaWQ7CisKIAkvKgogCSAqIFdhaXQgZm9yIHRoZSBjaGlsZCB0byBiZSByZWFkeSB0byBleGVjLgogCSAqLwpAQCAtMzM4LDE0ICszNDEsMjQgQEAKIAogc3RhdGljIHZvaWQgYWJzX3ByaW50b3V0KGludCBjb3VudGVyLCBkb3VibGUgYXZnKQogeworCWRvdWJsZSB0b3RhbCwgcmF0aW8gPSAwLjA7CisKIAlmcHJpbnRmKHN0ZGVyciwgIiAlMTQuMGYgICUtMjRzIiwgYXZnLCBldmVudF9uYW1lKGNvdW50ZXIpKTsKIAogCWlmIChNQVRDSF9FVkVOVChIQVJEV0FSRSwgSFdfSU5TVFJVQ1RJT05TLCBjb3VudGVyKSkgewotCQlmcHJpbnRmKHN0ZGVyciwgIiAjICUxMC4zZiBJUEMgICIsCi0JCQkJYXZnIC8gYXZnX3N0YXRzKCZydW50aW1lX2N5Y2xlc19zdGF0cykpOworCQl0b3RhbCA9IGF2Z19zdGF0cygmcnVudGltZV9jeWNsZXNfc3RhdHMpOworCisJCWlmICh0b3RhbCkKKwkJCXJhdGlvID0gYXZnIC8gdG90YWw7CisKKwkJZnByaW50ZihzdGRlcnIsICIgIyAlMTAuM2YgSVBDICAiLCByYXRpbyk7CiAJfSBlbHNlIHsKLQkJZnByaW50ZihzdGRlcnIsICIgIyAlMTAuM2YgTS9zZWMiLAotCQkJCTEwMDAuMCAqIGF2ZyAvIGF2Z19zdGF0cygmcnVudGltZV9uc2Vjc19zdGF0cykpOworCQl0b3RhbCA9IGF2Z19zdGF0cygmcnVudGltZV9uc2Vjc19zdGF0cyk7CisKKwkJaWYgKHRvdGFsKQorCQkJcmF0aW8gPSAxMDAwLjAgKiBhdmcgLyB0b3RhbDsKKworCQlmcHJpbnRmKHN0ZGVyciwgIiAjICUxMC4zZiBNL3NlYyIsIHJhdGlvKTsKIAl9CiB9CiAKQEAgLTQyMyw2ICs0MzYsOSBAQAogCiBzdGF0aWMgdm9pZCBzaWdfYXRleGl0KHZvaWQpCiB7CisJaWYgKGNoaWxkX3BpZCAhPSAtMSkKKwkJa2lsbChjaGlsZF9waWQsIFNJR1RFUk0pOworCiAJaWYgKHNpZ25yID09IC0xKQogCQlyZXR1cm47CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYnVpbHRpbi10aW1lY2hhcnQuYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi10aW1lY2hhcnQuYwppbmRleCA0NDA1NjgxLi5lOGE1MTBkOSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9idWlsdGluLXRpbWVjaGFydC5jCisrKyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi10aW1lY2hhcnQuYwpAQCAtNDYsNiArNDYsOCBAQAogCiBzdGF0aWMgdTY0CQlmaXJzdF90aW1lLCBsYXN0X3RpbWU7CiAKK3N0YXRpYyBpbnQJCXBvd2VyX29ubHk7CisKIAogc3RhdGljIHN0cnVjdCBwZXJmX2hlYWRlcgkqaGVhZGVyOwogCkBAIC01NDcsNyArNTQ5LDcgQEAKIAl1NjQgY3B1OwogCXN0cnVjdCBwb3dlcl9ldmVudCAqcHdyOwogCi0JZm9yIChjcHUgPSAwOyBjcHUgPCBudW1jcHVzOyBjcHUrKykgeworCWZvciAoY3B1ID0gMDsgY3B1IDw9IG51bWNwdXM7IGNwdSsrKSB7CiAJCXB3ciA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IHBvd2VyX2V2ZW50KSk7CiAJCWlmICghcHdyKQogCQkJcmV0dXJuOwpAQCAtNzYzLDE5ICs3NjUsNDAgQEAKIAkJCQkJaWYgKGMtPlkgJiYgYy0+c3RhcnRfdGltZSA8PSB3ZS0+dGltZSAmJiBjLT5lbmRfdGltZSA+PSB3ZS0+dGltZSkgewogCQkJCQkJaWYgKHAtPnBpZCA9PSB3ZS0+d2FrZXIpIHsKIAkJCQkJCQlmcm9tID0gYy0+WTsKLQkJCQkJCQl0YXNrX2Zyb20gPSBjLT5jb21tOworCQkJCQkJCXRhc2tfZnJvbSA9IHN0cmR1cChjLT5jb21tKTsKIAkJCQkJCX0KIAkJCQkJCWlmIChwLT5waWQgPT0gd2UtPndha2VlKSB7CiAJCQkJCQkJdG8gPSBjLT5ZOwotCQkJCQkJCXRhc2tfdG8gPSBjLT5jb21tOworCQkJCQkJCXRhc2tfdG8gPSBzdHJkdXAoYy0+Y29tbSk7CiAJCQkJCQl9CiAJCQkJCX0KIAkJCQkJYyA9IGMtPm5leHQ7CiAJCQkJfQorCQkJCWMgPSBwLT5hbGw7CisJCQkJd2hpbGUgKGMpIHsKKwkJCQkJaWYgKHAtPnBpZCA9PSB3ZS0+d2FrZXIgJiYgIWZyb20pIHsKKwkJCQkJCWZyb20gPSBjLT5ZOworCQkJCQkJdGFza19mcm9tID0gc3RyZHVwKGMtPmNvbW0pOworCQkJCQl9CisJCQkJCWlmIChwLT5waWQgPT0gd2UtPndha2VlICYmICF0bykgeworCQkJCQkJdG8gPSBjLT5ZOworCQkJCQkJdGFza190byA9IHN0cmR1cChjLT5jb21tKTsKKwkJCQkJfQorCQkJCQljID0gYy0+bmV4dDsKKwkJCQl9CiAJCQl9CiAJCQlwID0gcC0+bmV4dDsKIAkJfQogCisJCWlmICghdGFza19mcm9tKSB7CisJCQl0YXNrX2Zyb20gPSBtYWxsb2MoNDApOworCQkJc3ByaW50Zih0YXNrX2Zyb20sICJbJWldIiwgd2UtPndha2VyKTsKKwkJfQorCQlpZiAoIXRhc2tfdG8pIHsKKwkJCXRhc2tfdG8gPSBtYWxsb2MoNDApOworCQkJc3ByaW50Zih0YXNrX3RvLCAiWyVpXSIsIHdlLT53YWtlZSk7CisJCX0KKwogCQlpZiAod2UtPndha2VyID09IC0xKQogCQkJc3ZnX2ludGVycnVwdCh3ZS0+dGltZSwgdG8pOwogCQllbHNlIGlmIChmcm9tICYmIHRvICYmIGFicyhmcm9tIC0gdG8pID09IDEpCkBAIC03ODMsNiArODA2LDkgQEAKIAkJZWxzZQogCQkJc3ZnX3BhcnRpYWxfd2FrZWxpbmUod2UtPnRpbWUsIGZyb20sIHRhc2tfZnJvbSwgdG8sIHRhc2tfdG8pOwogCQl3ZSA9IHdlLT5uZXh0OworCisJCWZyZWUodGFza19mcm9tKTsKKwkJZnJlZSh0YXNrX3RvKTsKIAl9CiB9CiAKQEAgLTg3MSw3ICs4OTcsNyBAQAogCQkvKiBubyBleGl0IG1hcmtlciwgdGFzayBrZXB0IHJ1bm5pbmcgdG8gdGhlIGVuZCAqLwogCQlpZiAocC0+ZW5kX3RpbWUgPT0gMCkKIAkJCXAtPmVuZF90aW1lID0gbGFzdF90aW1lOwotCQlpZiAocC0+dG90YWxfdGltZSA+PSB0aHJlc2hvbGQpCisJCWlmIChwLT50b3RhbF90aW1lID49IHRocmVzaG9sZCAmJiAhcG93ZXJfb25seSkKIAkJCXAtPmRpc3BsYXkgPSAxOwogCiAJCWMgPSBwLT5hbGw7CkBAIC04ODIsNyArOTA4LDcgQEAKIAkJCWlmIChjLT5zdGFydF90aW1lID09IDEpCiAJCQkJYy0+c3RhcnRfdGltZSA9IGZpcnN0X3RpbWU7CiAKLQkJCWlmIChjLT50b3RhbF90aW1lID49IHRocmVzaG9sZCkgeworCQkJaWYgKGMtPnRvdGFsX3RpbWUgPj0gdGhyZXNob2xkICYmICFwb3dlcl9vbmx5KSB7CiAJCQkJYy0+ZGlzcGxheSA9IDE7CiAJCQkJY291bnQrKzsKIAkJCX0KQEAgLTExMzQsNiArMTE2MCw4IEBACiAJCSAgICAib3V0cHV0IGZpbGUgbmFtZSIpLAogCU9QVF9JTlRFR0VSKCd3JywgIndpZHRoIiwgJnN2Z19wYWdlX3dpZHRoLAogCQkgICAgInBhZ2Ugd2lkdGgiKSwKKwlPUFRfQk9PTEVBTigncCcsICJwb3dlci1vbmx5IiwgJnBvd2VyX29ubHksCisJCSAgICAib3V0cHV0IHBvd2VyIGRhdGEgb25seSIpLAogCU9QVF9FTkQoKQogfTsKIApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLXRvcC5jIGIvdG9vbHMvcGVyZi9idWlsdGluLXRvcC5jCmluZGV4IDFjYTg4ODkuLmExYjFkMTAgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi10b3AuYworKysgYi90b29scy9wZXJmL2J1aWx0aW4tdG9wLmMKQEAgLTY4Niw2ICs2ODYsOCBAQAogCXN3aXRjaCAoYykgewogCQljYXNlICdkJzoKIAkJCXByb21wdF9pbnRlZ2VyKCZkZWxheV9zZWNzLCAiRW50ZXIgZGlzcGxheSBkZWxheSIpOworCQkJaWYgKGRlbGF5X3NlY3MgPCAxKQorCQkJCWRlbGF5X3NlY3MgPSAxOwogCQkJYnJlYWs7CiAJCWNhc2UgJ2UnOgogCQkJcHJvbXB0X2ludGVnZXIoJnByaW50X2VudHJpZXMsICJFbnRlciBkaXNwbGF5IGVudHJpZXMgKGxpbmVzKSIpOwpAQCAtNzgyLDYgKzc4NCw3IEBACiAJImV4aXRfaWRsZSIsCiAJIm13YWl0X2lkbGUiLAogCSJtd2FpdF9pZGxlX3dpdGhfaGludHMiLAorCSJwb2xsX2lkbGUiLAogCSJwcGM2NF9ydW5sYXRjaF9vZmYiLAogCSJwc2VyaWVzX2RlZGljYXRlZF9pZGxlX3NsZWVwIiwKIAlOVUxMCmRpZmYgLS1naXQgYS90b29scy9wZXJmL2J1aWx0aW4tdHJhY2UuYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi10cmFjZS5jCmluZGV4IGU5ZDI1NmUuLjBjNWU0ZjcgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi10cmFjZS5jCisrKyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi10cmFjZS5jCkBAIC0yMTksMTAgKzIxOSw2IEBACiBtb3JlOgogCWV2ZW50ID0gKGV2ZW50X3QgKikoYnVmICsgaGVhZCk7CiAKLQlzaXplID0gZXZlbnQtPmhlYWRlci5zaXplOwotCWlmICghc2l6ZSkKLQkJc2l6ZSA9IDg7Ci0KIAlpZiAoaGVhZCArIGV2ZW50LT5oZWFkZXIuc2l6ZSA+PSBwYWdlX3NpemUgKiBtbWFwX3dpbmRvdykgewogCQl1bnNpZ25lZCBsb25nIHNoaWZ0ID0gcGFnZV9zaXplICogKGhlYWQgLyBwYWdlX3NpemUpOwogCQlpbnQgcmVzOwpAQCAtMjM3LDcgKzIzMyw2IEBACiAKIAlzaXplID0gZXZlbnQtPmhlYWRlci5zaXplOwogCi0KIAlpZiAoIXNpemUgfHwgcHJvY2Vzc19ldmVudChldmVudCwgb2Zmc2V0LCBoZWFkKSA8IDApIHsKIAogCQkvKgpAQCAtMjkwLDcgKzI4NSw2IEBACiAJCQl1c2FnZV93aXRoX29wdGlvbnMoYW5ub3RhdGVfdXNhZ2UsIG9wdGlvbnMpOwogCX0KIAotCiAJc2V0dXBfcGFnZXIoKTsKIAogCXJldHVybiBfX2NtZF90cmFjZSgpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9kZXNpZ24udHh0IGIvdG9vbHMvcGVyZi9kZXNpZ24udHh0CmluZGV4IGYxOTQ2ZDEuLmZkZDQyYTggMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvZGVzaWduLnR4dAorKysgYi90b29scy9wZXJmL2Rlc2lnbi50eHQKQEAgLTQ1NSwzICs0NTUsNiBAQAogCiBJZiB5b3VyIGFyY2hpdGVjdHVyZSBkb2VzIGhhdmUgaGFyZHdhcmUgY2FwYWJpbGl0aWVzLCB5b3UgY2FuIG92ZXJyaWRlIHRoZQogd2VhayBzdHViIGh3X3BlcmZfZXZlbnRfaW5pdCgpIHRvIHJlZ2lzdGVyIGhhcmR3YXJlIGNvdW50ZXJzLgorCitBcmNoaXRlY3R1cmVzIHRoYXQgaGF2ZSBkLWNhY2hlIGFsaWFzc2luZyBpc3N1ZXMsIHN1Y2ggYXMgU3BhcmMgYW5kIEFSTSwKK3Nob3VsZCBzZWxlY3QgUEVSRl9VU0VfVk1BTExPQyBpbiBvcmRlciB0byBhdm9pZCB0aGVzZSBmb3IgcGVyZiBtbWFwKCkuCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvUEVSRi1WRVJTSU9OLUdFTiBiL3Rvb2xzL3BlcmYvdXRpbC9QRVJGLVZFUlNJT04tR0VOCmluZGV4IGM1NjFkMTUuLjU0NTUyYTAgMTAwNzU1Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9QRVJGLVZFUlNJT04tR0VOCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9QRVJGLVZFUlNJT04tR0VOCkBAIC0xLDcgKzEsNyBAQAogIyEvYmluL3NoCiAKIEdWRj1QRVJGLVZFUlNJT04tRklMRQotREVGX1ZFUj12MC4wLjEuUEVSRgorREVGX1ZFUj12MC4wLjIuUEVSRgogCiBMRj0nCiAnCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvbW9kdWxlLmMgYi90b29scy9wZXJmL3V0aWwvbW9kdWxlLmMKaW5kZXggM2Q1NjdmZS4uMGQ4Yzg1ZCAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL21vZHVsZS5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9tb2R1bGUuYwpAQCAtNCw2ICs0LDcgQEAKICNpbmNsdWRlICJtb2R1bGUuaCIKIAogI2luY2x1ZGUgPGxpYmVsZi5oPgorI2luY2x1ZGUgPGxpYmdlbi5oPgogI2luY2x1ZGUgPGdlbGYuaD4KICNpbmNsdWRlIDxlbGYuaD4KICNpbmNsdWRlIDxkaXJlbnQuaD4KQEAgLTQwOSwzNSArNDEwLDQwIEBACiBzdGF0aWMgaW50IG1vZF9kc29fX2xvYWRfbW9kdWxlX3BhdGhzKHN0cnVjdCBtb2RfZHNvICpzZWxmKQogewogCXN0cnVjdCB1dHNuYW1lIHV0czsKLQlpbnQgY291bnQgPSAwLCBsZW47CisJaW50IGNvdW50ID0gMCwgbGVuLCBlcnIgPSAtMTsKIAljaGFyICpsaW5lID0gTlVMTDsKIAlGSUxFICpmaWxlOwotCWNoYXIgKnBhdGg7CisJY2hhciAqZHBhdGgsICpkaXI7CiAJc2l6ZV90IG47CiAKIAlpZiAodW5hbWUoJnV0cykgPCAwKQotCQlnb3RvIG91dF9mYWlsdXJlOworCQlyZXR1cm4gZXJyOwogCiAJbGVuID0gc3RybGVuKCIvbGliL21vZHVsZXMvIik7CiAJbGVuICs9IHN0cmxlbih1dHMucmVsZWFzZSk7CiAJbGVuICs9IHN0cmxlbigiL21vZHVsZXMuZGVwIik7CiAKLQlwYXRoID0gY2FsbG9jKDEsIGxlbik7Ci0JaWYgKHBhdGggPT0gTlVMTCkKLQkJZ290byBvdXRfZmFpbHVyZTsKKwlkcGF0aCA9IGNhbGxvYygxLCBsZW4gKyAxKTsKKwlpZiAoZHBhdGggPT0gTlVMTCkKKwkJcmV0dXJuIGVycjsKIAotCXN0cmNhdChwYXRoLCAiL2xpYi9tb2R1bGVzLyIpOwotCXN0cmNhdChwYXRoLCB1dHMucmVsZWFzZSk7Ci0Jc3RyY2F0KHBhdGgsICIvbW9kdWxlcy5kZXAiKTsKKwlzdHJjYXQoZHBhdGgsICIvbGliL21vZHVsZXMvIik7CisJc3RyY2F0KGRwYXRoLCB1dHMucmVsZWFzZSk7CisJc3RyY2F0KGRwYXRoLCAiL21vZHVsZXMuZGVwIik7CiAKLQlmaWxlID0gZm9wZW4ocGF0aCwgInIiKTsKLQlmcmVlKHBhdGgpOworCWZpbGUgPSBmb3BlbihkcGF0aCwgInIiKTsKIAlpZiAoZmlsZSA9PSBOVUxMKQogCQlnb3RvIG91dF9mYWlsdXJlOwogCisJZGlyID0gZGlybmFtZShkcGF0aCk7CisJaWYgKCFkaXIpCisJCWdvdG8gb3V0X2ZhaWx1cmU7CisJc3RyY2F0KGRpciwgIi8iKTsKKwogCXdoaWxlICghZmVvZihmaWxlKSkgewotCQljaGFyICpuYW1lLCAqdG1wOwogCQlzdHJ1Y3QgbW9kdWxlICptb2R1bGU7CisJCWNoYXIgKm5hbWUsICpwYXRoLCAqdG1wOworCQlGSUxFICptb2RmaWxlOwogCQlpbnQgbGluZV9sZW47CiAKIAkJbGluZV9sZW4gPSBnZXRsaW5lKCZsaW5lLCAmbiwgZmlsZSk7CkBAIC00NDUsMTcgKzQ1MSw0MSBAQAogCQkJYnJlYWs7CiAKIAkJaWYgKCFsaW5lKQotCQkJZ290byBvdXRfZmFpbHVyZTsKKwkJCWJyZWFrOwogCiAJCWxpbmVbLS1saW5lX2xlbl0gPSAnXDAnOyAvKiBcbiAqLwogCi0JCXBhdGggPSBzdHJ0b2sobGluZSwgIjoiKTsKKwkJcGF0aCA9IHN0cmNocihsaW5lLCAnOicpOwogCQlpZiAoIXBhdGgpCi0JCQlnb3RvIG91dF9mYWlsdXJlOworCQkJYnJlYWs7CisJCSpwYXRoID0gJ1wwJzsKKworCQlwYXRoID0gc3RyZHVwKGxpbmUpOworCQlpZiAoIXBhdGgpCisJCQlicmVhazsKKworCQlpZiAoIXN0cnN0cihwYXRoLCBkaXIpKSB7CisJCQlpZiAoc3RybmNtcChwYXRoLCAia2VybmVsLyIsIDcpKQorCQkJCWJyZWFrOworCisJCQlmcmVlKHBhdGgpOworCQkJcGF0aCA9IGNhbGxvYygxLCBzdHJsZW4oZGlyKSArIHN0cmxlbihsaW5lKSArIDEpOworCQkJaWYgKCFwYXRoKQorCQkJCWJyZWFrOworCQkJc3RyY2F0KHBhdGgsIGRpcik7CisJCQlzdHJjYXQocGF0aCwgbGluZSk7CisJCX0KKworCQltb2RmaWxlID0gZm9wZW4ocGF0aCwgInIiKTsKKwkJaWYgKG1vZGZpbGUgPT0gTlVMTCkKKwkJCWJyZWFrOworCQlmY2xvc2UobW9kZmlsZSk7CiAKIAkJbmFtZSA9IHN0cmR1cChwYXRoKTsKLQkJbmFtZSA9IHN0cnRvayhuYW1lLCAiLyIpOworCQlpZiAoIW5hbWUpCisJCQlicmVhazsKIAorCQluYW1lID0gc3RydG9rKG5hbWUsICIvIik7CiAJCXRtcCA9IG5hbWU7CiAKIAkJd2hpbGUgKHRtcCkgewpAQCAtNDYzLDI2ICs0OTMsMjUgQEAKIAkJCWlmICh0bXApCiAJCQkJbmFtZSA9IHRtcDsKIAkJfQotCQluYW1lID0gc3Ryc2VwKCZuYW1lLCAiLiIpOwogCi0JCS8qIFF1aXJrOiByZXBsYWNlICctJyB3aXRoICdfJyBpbiBzb3VuZCBtb2R1bGVzICovCisJCW5hbWUgPSBzdHJzZXAoJm5hbWUsICIuIik7CisJCWlmICghbmFtZSkKKwkJCWJyZWFrOworCisJCS8qIFF1aXJrOiByZXBsYWNlICctJyB3aXRoICdfJyBpbiBhbGwgbW9kdWxlcyAqLwogCQlmb3IgKGxlbiA9IHN0cmxlbihuYW1lKTsgbGVuOyBsZW4tLSkgewogCQkJaWYgKCoobmFtZStsZW4pID09ICctJykKIAkJCQkqKG5hbWUrbGVuKSA9ICdfJzsKIAkJfQogCiAJCW1vZHVsZSA9IG1vZHVsZV9fbmV3KG5hbWUsIHBhdGgpOwotCQlpZiAoIW1vZHVsZSkgewotCQkJZnByaW50ZihzdGRlcnIsICJsb2FkX21vZHVsZV9wYXRoczogYWxsb2NhdGlvbiBlcnJvclxuIik7Ci0JCQlnb3RvIG91dF9mYWlsdXJlOwotCQl9CisJCWlmICghbW9kdWxlKQorCQkJYnJlYWs7CiAJCW1vZF9kc29fX2luc2VydF9tb2R1bGUoc2VsZiwgbW9kdWxlKTsKIAogCQltb2R1bGUtPnNlY3Rpb25zID0gc2VjX2Rzb19fbmV3X2Rzbygic2VjdGlvbnMiKTsKLQkJaWYgKCFtb2R1bGUtPnNlY3Rpb25zKSB7Ci0JCQlmcHJpbnRmKHN0ZGVyciwgImxvYWRfbW9kdWxlX3BhdGhzOiBhbGxvY2F0aW9uIGVycm9yXG4iKTsKLQkJCWdvdG8gb3V0X2ZhaWx1cmU7Ci0JCX0KKwkJaWYgKCFtb2R1bGUtPnNlY3Rpb25zKQorCQkJYnJlYWs7CiAKIAkJbW9kdWxlLT5hY3RpdmUgPSBtb2RfZHNvX19sb2FkX3NlY3Rpb25zKG1vZHVsZSk7CiAKQEAgLTQ5MCwxMyArNTE5LDIwIEBACiAJCQljb3VudCsrOwogCX0KIAotCWZyZWUobGluZSk7Ci0JZmNsb3NlKGZpbGUpOwotCi0JcmV0dXJuIGNvdW50OworCWlmIChmZW9mKGZpbGUpKQorCQllcnIgPSBjb3VudDsKKwllbHNlCisJCWZwcmludGYoc3RkZXJyLCAibG9hZF9tb2R1bGVfcGF0aHM6IG1vZHVsZXMuZGVwIHBhcnNpbmcgZmFpbHVyZSFcbiIpOwogCiBvdXRfZmFpbHVyZToKLQlyZXR1cm4gLTE7CisJaWYgKGRwYXRoKQorCQlmcmVlKGRwYXRoKTsKKwlpZiAoZmlsZSkKKwkJZmNsb3NlKGZpbGUpOworCWlmIChsaW5lKQorCQlmcmVlKGxpbmUpOworCisJcmV0dXJuIGVycjsKIH0KIAogaW50IG1vZF9kc29fX2xvYWRfbW9kdWxlcyhzdHJ1Y3QgbW9kX2RzbyAqZHNvKQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3BhcnNlLWV2ZW50cy5jIGIvdG9vbHMvcGVyZi91dGlsL3BhcnNlLWV2ZW50cy5jCmluZGV4IDEzYWI0YjguLjhjZmI0OGMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9wYXJzZS1ldmVudHMuYworKysgYi90b29scy9wZXJmL3V0aWwvcGFyc2UtZXZlbnRzLmMKQEAgLTE2NSwzMyArMTY1LDMxIEBACiAJRElSICpzeXNfZGlyLCAqZXZ0X2RpcjsKIAlzdHJ1Y3QgZGlyZW50ICpzeXNfbmV4dCwgKmV2dF9uZXh0LCBzeXNfZGlyZW50LCBldnRfZGlyZW50OwogCWNoYXIgaWRfYnVmWzRdOwotCWludCBzeXNfZGlyX2ZkLCBmZDsKKwlpbnQgZmQ7CiAJdTY0IGlkOwogCWNoYXIgZXZ0X3BhdGhbTUFYUEFUSExFTl07CisJY2hhciBkaXJfcGF0aFtNQVhQQVRITEVOXTsKIAogCWlmICh2YWxpZF9kZWJ1Z2ZzX21vdW50KGRlYnVnZnNfcGF0aCkpCiAJCXJldHVybiBOVUxMOwogCiAJc3lzX2RpciA9IG9wZW5kaXIoZGVidWdmc19wYXRoKTsKIAlpZiAoIXN5c19kaXIpCi0JCWdvdG8gY2xlYW51cDsKLQlzeXNfZGlyX2ZkID0gZGlyZmQoc3lzX2Rpcik7CisJCXJldHVybiBOVUxMOwogCiAJZm9yX2VhY2hfc3Vic3lzdGVtKHN5c19kaXIsIHN5c19kaXJlbnQsIHN5c19uZXh0KSB7Ci0JCWludCBkZmQgPSBvcGVuYXQoc3lzX2Rpcl9mZCwgc3lzX2RpcmVudC5kX25hbWUsCi0JCQkJIE9fUkRPTkxZfE9fRElSRUNUT1JZKSwgZXZ0X2Rpcl9mZDsKLQkJaWYgKGRmZCA9PSAtMSkKKworCQlzbnByaW50ZihkaXJfcGF0aCwgTUFYUEFUSExFTiwgIiVzLyVzIiwgZGVidWdmc19wYXRoLAorCQkJIHN5c19kaXJlbnQuZF9uYW1lKTsKKwkJZXZ0X2RpciA9IG9wZW5kaXIoZGlyX3BhdGgpOworCQlpZiAoIWV2dF9kaXIpCiAJCQljb250aW51ZTsKLQkJZXZ0X2RpciA9IGZkb3BlbmRpcihkZmQpOwotCQlpZiAoIWV2dF9kaXIpIHsKLQkJCWNsb3NlKGRmZCk7Ci0JCQljb250aW51ZTsKLQkJfQotCQlldnRfZGlyX2ZkID0gZGlyZmQoZXZ0X2Rpcik7CisKIAkJZm9yX2VhY2hfZXZlbnQoc3lzX2RpcmVudCwgZXZ0X2RpciwgZXZ0X2RpcmVudCwgZXZ0X25leHQpIHsKLQkJCXNucHJpbnRmKGV2dF9wYXRoLCBNQVhQQVRITEVOLCAiJXMvaWQiLAorCisJCQlzbnByaW50ZihldnRfcGF0aCwgTUFYUEFUSExFTiwgIiVzLyVzL2lkIiwgZGlyX3BhdGgsCiAJCQkJIGV2dF9kaXJlbnQuZF9uYW1lKTsKLQkJCWZkID0gb3BlbmF0KGV2dF9kaXJfZmQsIGV2dF9wYXRoLCBPX1JET05MWSk7CisJCQlmZCA9IG9wZW4oZXZ0X3BhdGgsIE9fUkRPTkxZKTsKIAkJCWlmIChmZCA8IDApCiAJCQkJY29udGludWU7CiAJCQlpZiAocmVhZChmZCwgaWRfYnVmLCBzaXplb2YoaWRfYnVmKSkgPCAwKSB7CkBAIC0yMjUsNyArMjIzLDYgQEAKIAkJY2xvc2VkaXIoZXZ0X2Rpcik7CiAJfQogCi1jbGVhbnVwOgogCWNsb3NlZGlyKHN5c19kaXIpOwogCXJldHVybiBOVUxMOwogfQpAQCAtNjk0LDcgKzY5MSwxMCBAQAogCUZJTEUgKmZpbGU7CiAJaW50IGlkOwogCi0Jc3ByaW50ZihmaWxlbmFtZSwgIi9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcvZXZlbnRzLyVzL2lkIiwgb3JnbmFtZSk7CisJc3ByaW50ZihmaWxlbmFtZSwgIiVzLyIsIGRlYnVnZnNfcGF0aCk7CisJc3RybmNhdChmaWxlbmFtZSwgb3JnbmFtZSwgc3RybGVuKG9yZ25hbWUpKTsKKwlzdHJjYXQoZmlsZW5hbWUsICIvaWQiKTsKKwogCWMgPSBzdHJjaHIoZmlsZW5hbWUsICc6Jyk7CiAJaWYgKGMpCiAJCSpjID0gJy8nOwpAQCAtNzYxLDI4ICs3NjEsMjQgQEAKIHsKIAlESVIgKnN5c19kaXIsICpldnRfZGlyOwogCXN0cnVjdCBkaXJlbnQgKnN5c19uZXh0LCAqZXZ0X25leHQsIHN5c19kaXJlbnQsIGV2dF9kaXJlbnQ7Ci0JaW50IHN5c19kaXJfZmQ7CiAJY2hhciBldnRfcGF0aFtNQVhQQVRITEVOXTsKKwljaGFyIGRpcl9wYXRoW01BWFBBVEhMRU5dOwogCiAJaWYgKHZhbGlkX2RlYnVnZnNfbW91bnQoZGVidWdmc19wYXRoKSkKIAkJcmV0dXJuOwogCiAJc3lzX2RpciA9IG9wZW5kaXIoZGVidWdmc19wYXRoKTsKIAlpZiAoIXN5c19kaXIpCi0JCWdvdG8gY2xlYW51cDsKLQlzeXNfZGlyX2ZkID0gZGlyZmQoc3lzX2Rpcik7CisJCXJldHVybjsKIAogCWZvcl9lYWNoX3N1YnN5c3RlbShzeXNfZGlyLCBzeXNfZGlyZW50LCBzeXNfbmV4dCkgewotCQlpbnQgZGZkID0gb3BlbmF0KHN5c19kaXJfZmQsIHN5c19kaXJlbnQuZF9uYW1lLAotCQkJCSBPX1JET05MWXxPX0RJUkVDVE9SWSksIGV2dF9kaXJfZmQ7Ci0JCWlmIChkZmQgPT0gLTEpCisKKwkJc25wcmludGYoZGlyX3BhdGgsIE1BWFBBVEhMRU4sICIlcy8lcyIsIGRlYnVnZnNfcGF0aCwKKwkJCSBzeXNfZGlyZW50LmRfbmFtZSk7CisJCWV2dF9kaXIgPSBvcGVuZGlyKGRpcl9wYXRoKTsKKwkJaWYgKCFldnRfZGlyKQogCQkJY29udGludWU7Ci0JCWV2dF9kaXIgPSBmZG9wZW5kaXIoZGZkKTsKLQkJaWYgKCFldnRfZGlyKSB7Ci0JCQljbG9zZShkZmQpOwotCQkJY29udGludWU7Ci0JCX0KLQkJZXZ0X2Rpcl9mZCA9IGRpcmZkKGV2dF9kaXIpOworCiAJCWZvcl9lYWNoX2V2ZW50KHN5c19kaXJlbnQsIGV2dF9kaXIsIGV2dF9kaXJlbnQsIGV2dF9uZXh0KSB7CiAJCQlzbnByaW50ZihldnRfcGF0aCwgTUFYUEFUSExFTiwgIiVzOiVzIiwKIAkJCQkgc3lzX2RpcmVudC5kX25hbWUsIGV2dF9kaXJlbnQuZF9uYW1lKTsKQEAgLTc5MSw4ICs3ODcsNiBAQAogCQl9CiAJCWNsb3NlZGlyKGV2dF9kaXIpOwogCX0KLQotY2xlYW51cDoKIAljbG9zZWRpcihzeXNfZGlyKTsKIH0KIApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3N2Z2hlbHBlci5jIGIvdG9vbHMvcGVyZi91dGlsL3N2Z2hlbHBlci5jCmluZGV4IGE3NzhmZDAuLmIzNjM3ZGIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9zdmdoZWxwZXIuYworKysgYi90b29scy9wZXJmL3V0aWwvc3ZnaGVscGVyLmMKQEAgLTI4LDcgKzI4LDcgQEAKIAogaW50IHN2Z19wYWdlX3dpZHRoID0gMTAwMDsKIAotI2RlZmluZSBNSU5fVEVYVF9TSVpFIDAuMDAxCisjZGVmaW5lIE1JTl9URVhUX1NJWkUgMC4wMQogCiBzdGF0aWMgdTY0IHRvdGFsX2hlaWdodDsKIHN0YXRpYyBGSUxFICpzdmdmaWxlOwpAQCAtMTAzLDcgKzEwMyw3IEBACiAJZnByaW50ZihzdmdmaWxlLCAiICAgICAgcmVjdC5wcm9jZXNzMiB7IGZpbGw6cmdiKDE4MCwxODAsMTgwKTsgZmlsbC1vcGFjaXR5OjAuOTsgc3Ryb2tlLXdpZHRoOjA7ICAgc3Ryb2tlOnJnYiggIDAsICAwLCAgMCk7IH0gXG4iKTsKIAlmcHJpbnRmKHN2Z2ZpbGUsICIgICAgICByZWN0LnNhbXBsZSAgIHsgZmlsbDpyZ2IoICAwLCAgMCwyNTUpOyBmaWxsLW9wYWNpdHk6MC44OyBzdHJva2Utd2lkdGg6MDsgICBzdHJva2U6cmdiKCAgMCwgIDAsICAwKTsgfSBcbiIpOwogCWZwcmludGYoc3ZnZmlsZSwgIiAgICAgIHJlY3QuYmxvY2tlZCAgeyBmaWxsOnJnYigyNTUsICAwLCAgMCk7IGZpbGwtb3BhY2l0eTowLjU7IHN0cm9rZS13aWR0aDowOyAgIHN0cm9rZTpyZ2IoICAwLCAgMCwgIDApOyB9IFxuIik7Ci0JZnByaW50ZihzdmdmaWxlLCAiICAgICAgcmVjdC53YWl0aW5nICB7IGZpbGw6cmdiKDIxNCwyMTQsICAwKTsgZmlsbC1vcGFjaXR5OjAuMzsgc3Ryb2tlLXdpZHRoOjA7ICAgc3Ryb2tlOnJnYiggIDAsICAwLCAgMCk7IH0gXG4iKTsKKwlmcHJpbnRmKHN2Z2ZpbGUsICIgICAgICByZWN0LndhaXRpbmcgIHsgZmlsbDpyZ2IoMjI0LDIxNCwgIDApOyBmaWxsLW9wYWNpdHk6MC44OyBzdHJva2Utd2lkdGg6MDsgICBzdHJva2U6cmdiKCAgMCwgIDAsICAwKTsgfSBcbiIpOwogCWZwcmludGYoc3ZnZmlsZSwgIiAgICAgIHJlY3QuV0FJVElORyAgeyBmaWxsOnJnYigyNTUsMjE0LCA0OCk7IGZpbGwtb3BhY2l0eTowLjY7IHN0cm9rZS13aWR0aDowOyAgIHN0cm9rZTpyZ2IoICAwLCAgMCwgIDApOyB9IFxuIik7CiAJZnByaW50ZihzdmdmaWxlLCAiICAgICAgcmVjdC5jcHUgICAgICB7IGZpbGw6cmdiKDE5MiwxOTIsMTkyKTsgZmlsbC1vcGFjaXR5OjAuMjsgc3Ryb2tlLXdpZHRoOjAuNTsgc3Ryb2tlOnJnYigxMjgsMTI4LDEyOCk7IH0gXG4iKTsKIAlmcHJpbnRmKHN2Z2ZpbGUsICIgICAgICByZWN0LnBzdGF0ZSAgIHsgZmlsbDpyZ2IoMTI4LDEyOCwxMjgpOyBmaWxsLW9wYWNpdHk6MC44OyBzdHJva2Utd2lkdGg6MDsgfSBcbiIpOwpAQCAtMjE3LDYgKzIxNywxOCBAQAogCQl9CiAJCWZjbG9zZShmaWxlKTsKIAl9CisKKwkvKiBDUFUgdHlwZSAqLworCWZpbGUgPSBmb3BlbigiL3N5cy9kZXZpY2VzL3N5c3RlbS9jcHUvY3B1MC9jcHVmcmVxL3NjYWxpbmdfYXZhaWxhYmxlX2ZyZXF1ZW5jaWVzIiwgInIiKTsKKwlpZiAoZmlsZSkgeworCQl3aGlsZSAoZmdldHMoYnVmLCAyNTUsIGZpbGUpKSB7CisJCQl1bnNpZ25lZCBpbnQgZnJlcTsKKwkJCWZyZXEgPSBzdHJ0b3VsbChidWYsIE5VTEwsIDEwKTsKKwkJCWlmIChmcmVxID4gbWF4X2ZyZXEpCisJCQkJbWF4X2ZyZXEgPSBmcmVxOworCQl9CisJCWZjbG9zZShmaWxlKTsKKwl9CiAJcmV0dXJuIGNwdV9tOwogfQogCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvc3ltYm9sLmMgYi90b29scy9wZXJmL3V0aWwvc3ltYm9sLmMKaW5kZXggZmQzZDljOC4uMjI2ZjQ0YSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3N5bWJvbC5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9zeW1ib2wuYwpAQCAtMzI0LDggKzMyNCw3IEBACiB7CiAJcmV0dXJuIGVsZl9zeW1fX3R5cGUoc3ltKSA9PSBTVFRfRlVOQyAmJgogCSAgICAgICBzeW0tPnN0X25hbWUgIT0gMCAmJgotCSAgICAgICBzeW0tPnN0X3NobmR4ICE9IFNITl9VTkRFRiAmJgotCSAgICAgICBzeW0tPnN0X3NpemUgIT0gMDsKKwkgICAgICAgc3ltLT5zdF9zaG5keCAhPSBTSE5fVU5ERUY7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IGVsZl9zeW1fX2lzX2xhYmVsKGNvbnN0IEdFbGZfU3ltICpzeW0pCkBAIC00MTQsNyArNDEzLDcgQEAKIAlpZiAoZmQgPCAwKQogCQlnb3RvIG91dDsKIAotCWVsZiA9IGVsZl9iZWdpbihmZCwgRUxGX0NfUkVBRF9NTUFQLCBOVUxMKTsKKwllbGYgPSBlbGZfYmVnaW4oZmQsIFBFUkZfRUxGX0NfUkVBRF9NTUFQLCBOVUxMKTsKIAlpZiAoZWxmID09IE5VTEwpCiAJCWdvdG8gb3V0X2Nsb3NlOwogCkBAIC01MzQsNyArNTMzLDcgQEAKIAlFbGYgKmVsZjsKIAlpbnQgbnIgPSAwLCBrZXJuZWwgPSAhc3RyY21wKCJba2VybmVsXSIsIHNlbGYtPm5hbWUpOwogCi0JZWxmID0gZWxmX2JlZ2luKGZkLCBFTEZfQ19SRUFEX01NQVAsIE5VTEwpOworCWVsZiA9IGVsZl9iZWdpbihmZCwgUEVSRl9FTEZfQ19SRUFEX01NQVAsIE5VTEwpOwogCWlmIChlbGYgPT0gTlVMTCkgewogCQlpZiAodikKIAkJCWZwcmludGYoc3RkZXJyLCAiJXM6IGNhbm5vdCByZWFkICVzIEVMRiBmaWxlLlxuIiwKQEAgLTY3Niw3ICs2NzUsNyBAQAogCWlmIChmZCA8IDApCiAJCWdvdG8gb3V0OwogCi0JZWxmID0gZWxmX2JlZ2luKGZkLCBFTEZfQ19SRUFEX01NQVAsIE5VTEwpOworCWVsZiA9IGVsZl9iZWdpbihmZCwgUEVSRl9FTEZfQ19SRUFEX01NQVAsIE5VTEwpOwogCWlmIChlbGYgPT0gTlVMTCkgewogCQlpZiAodikKIAkJCWZwcmludGYoc3RkZXJyLCAiJXM6IGNhbm5vdCByZWFkICVzIEVMRiBmaWxlLlxuIiwKQEAgLTgzMyw3ICs4MzIsNyBAQAogCXN0cnVjdCBtb2RfZHNvICptb2RzID0gbW9kX2Rzb19fbmV3X2RzbygibW9kdWxlcyIpOwogCXN0cnVjdCBtb2R1bGUgKnBvczsKIAlzdHJ1Y3QgcmJfbm9kZSAqbmV4dDsKLQlpbnQgZXJyOworCWludCBlcnIsIGNvdW50ID0gMDsKIAogCWVyciA9IG1vZF9kc29fX2xvYWRfbW9kdWxlcyhtb2RzKTsKIApAQCAtODUyLDE0ICs4NTEsMTYgQEAKIAkJCWJyZWFrOwogCiAJCW5leHQgPSByYl9uZXh0KCZwb3MtPnJiX25vZGUpOworCQljb3VudCArPSBlcnI7CiAJfQogCiAJaWYgKGVyciA8IDApIHsKIAkJbW9kX2Rzb19fZGVsZXRlX21vZHVsZXMobW9kcyk7CiAJCW1vZF9kc29fX2RlbGV0ZV9zZWxmKG1vZHMpOworCQlyZXR1cm4gZXJyOwogCX0KIAotCXJldHVybiBlcnI7CisJcmV0dXJuIGNvdW50OwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgZHNvX19maWxsX3N5bWJvbF9ob2xlcyhzdHJ1Y3QgZHNvICpzZWxmKQpAQCAtOTEzLDggKzkxNCwxNSBAQAogCiAJaWYgKHZtbGludXgpIHsKIAkJZXJyID0gZHNvX19sb2FkX3ZtbGludXgoc2VsZiwgdm1saW51eCwgZmlsdGVyLCB2KTsKLQkJaWYgKGVyciA+IDAgJiYgdXNlX21vZHVsZXMpCi0JCQllcnIgPSBkc29fX2xvYWRfbW9kdWxlcyhzZWxmLCBmaWx0ZXIsIHYpOworCQlpZiAoZXJyID4gMCAmJiB1c2VfbW9kdWxlcykgeworCQkJaW50IHN5bXMgPSBkc29fX2xvYWRfbW9kdWxlcyhzZWxmLCBmaWx0ZXIsIHYpOworCisJCQlpZiAoc3ltcyA8IDApIHsKKwkJCQlmcHJpbnRmKHN0ZGVyciwgImRzb19fbG9hZF9tb2R1bGVzIGZhaWxlZCFcbiIpOworCQkJCXJldHVybiBzeW1zOworCQkJfQorCQkJZXJyICs9IHN5bXM7CisJCX0KIAl9CiAKIAlpZiAoZXJyIDw9IDApCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvc3ltYm9sLmggYi90b29scy9wZXJmL3V0aWwvc3ltYm9sLmgKaW5kZXggNmU4NDkwNy4uODI5ZGE5ZSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3N5bWJvbC5oCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9zeW1ib2wuaApAQCAtMjcsNiArMjcsMTYgQEAKICNlbmRpZgogI2VuZGlmCiAKKy8qCisgKiBsaWJlbGYgMC44LnggYW5kIGVhcmxpZXIgZG8gbm90IHN1cHBvcnQgRUxGX0NfUkVBRF9NTUFQOworICogZm9yIG5ld2VyIHZlcnNpb25zIHdlIGNhbiB1c2UgbW1hcCB0byByZWR1Y2UgbWVtb3J5IHVzYWdlOgorICovCisjaWZkZWYgTElCRUxGX05PX01NQVAKKyMgZGVmaW5lIFBFUkZfRUxGX0NfUkVBRF9NTUFQIEVMRl9DX1JFQUQKKyNlbHNlCisjIGRlZmluZSBQRVJGX0VMRl9DX1JFQURfTU1BUCBFTEZfQ19SRUFEX01NQVAKKyNlbmRpZgorCiAjaWZuZGVmIERNR0xfUEFSQU1TCiAjZGVmaW5lIERNR0xfUEFSQU1TICAgICAgKDEgPDwgMCkgICAgICAgLyogSW5jbHVkZSBmdW5jdGlvbiBhcmdzICovCiAjZGVmaW5lIERNR0xfQU5TSSAgICAgICAgKDEgPDwgMSkgICAgICAgLyogSW5jbHVkZSBjb25zdCwgdm9sYXRpbGUsIGV0YyAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3RyYWNlLWV2ZW50LXBhcnNlLmMgYi90b29scy9wZXJmL3V0aWwvdHJhY2UtZXZlbnQtcGFyc2UuYwppbmRleCBmNmE4NDM3Li41NWM5NjU5IDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvdHJhY2UtZXZlbnQtcGFyc2UuYworKysgYi90b29scy9wZXJmL3V0aWwvdHJhY2UtZXZlbnQtcGFyc2UuYwpAQCAtNjE4LDcgKzYxOCw3IEBACiB9CiAKIHN0YXRpYyBpbnQgdGVzdF90eXBlX3Rva2VuKGVudW0gZXZlbnRfdHlwZSB0eXBlLCBjaGFyICp0b2tlbiwKLQkJICAgIGVudW0gZXZlbnRfdHlwZSBleHBlY3QsIGNoYXIgKmV4cGVjdF90b2spCisJCSAgICBlbnVtIGV2ZW50X3R5cGUgZXhwZWN0LCBjb25zdCBjaGFyICpleHBlY3RfdG9rKQogewogCWlmICh0eXBlICE9IGV4cGVjdCkgewogCQlkaWUoIkVycm9yOiBleHBlY3RlZCB0eXBlICVkIGJ1dCByZWFkICVkIiwKQEAgLTY1MCw3ICs2NTAsNyBAQAogCXJldHVybiBfX3JlYWRfZXhwZWN0X3R5cGUoZXhwZWN0LCB0b2ssIDEpOwogfQogCi1zdGF0aWMgaW50IF9fcmVhZF9leHBlY3RlZChlbnVtIGV2ZW50X3R5cGUgZXhwZWN0LCBjaGFyICpzdHIsIGludCBuZXdsaW5lX29rKQorc3RhdGljIGludCBfX3JlYWRfZXhwZWN0ZWQoZW51bSBldmVudF90eXBlIGV4cGVjdCwgY29uc3QgY2hhciAqc3RyLCBpbnQgbmV3bGluZV9vaykKIHsKIAllbnVtIGV2ZW50X3R5cGUgdHlwZTsKIAljaGFyICp0b2tlbjsKQEAgLTY2OCwxMiArNjY4LDEyIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgcmVhZF9leHBlY3RlZChlbnVtIGV2ZW50X3R5cGUgZXhwZWN0LCBjaGFyICpzdHIpCitzdGF0aWMgaW50IHJlYWRfZXhwZWN0ZWQoZW51bSBldmVudF90eXBlIGV4cGVjdCwgY29uc3QgY2hhciAqc3RyKQogewogCXJldHVybiBfX3JlYWRfZXhwZWN0ZWQoZXhwZWN0LCBzdHIsIDEpOwogfQogCi1zdGF0aWMgaW50IHJlYWRfZXhwZWN0ZWRfaXRlbShlbnVtIGV2ZW50X3R5cGUgZXhwZWN0LCBjaGFyICpzdHIpCitzdGF0aWMgaW50IHJlYWRfZXhwZWN0ZWRfaXRlbShlbnVtIGV2ZW50X3R5cGUgZXhwZWN0LCBjb25zdCBjaGFyICpzdHIpCiB7CiAJcmV0dXJuIF9fcmVhZF9leHBlY3RlZChleHBlY3QsIHN0ciwgMCk7CiB9CkBAIC0xOTY4LDEwICsxOTY4LDExIEBACiAJeyAiTkVUX1RYX1NPRlRJUlEiLCAyIH0sCiAJeyAiTkVUX1JYX1NPRlRJUlEiLCAzIH0sCiAJeyAiQkxPQ0tfU09GVElSUSIsIDQgfSwKLQl7ICJUQVNLTEVUX1NPRlRJUlEiLCA1IH0sCi0JeyAiU0NIRURfU09GVElSUSIsIDYgfSwKLQl7ICJIUlRJTUVSX1NPRlRJUlEiLCA3IH0sCi0JeyAiUkNVX1NPRlRJUlEiLCA4IH0sCisJeyAiQkxPQ0tfSU9QT0xMX1NPRlRJUlEiLCA1IH0sCisJeyAiVEFTS0xFVF9TT0ZUSVJRIiwgNiB9LAorCXsgIlNDSEVEX1NPRlRJUlEiLCA3IH0sCisJeyAiSFJUSU1FUl9TT0ZUSVJRIiwgOCB9LAorCXsgIlJDVV9TT0ZUSVJRIiwgOSB9LAogCiAJeyAiSFJUSU1FUl9OT1JFU1RBUlQiLCAwIH0sCiAJeyAiSFJUSU1FUl9SRVNUQVJUIiwgMSB9LApkaWZmIC0tZ2l0IGEvdmlydC9rdm0va3ZtX21haW4uYyBiL3ZpcnQva3ZtL2t2bV9tYWluLmMKaW5kZXggMDM0YTc5OC4uNzQ5NWNlMyAxMDA2NDQKLS0tIGEvdmlydC9rdm0va3ZtX21haW4uYworKysgYi92aXJ0L2t2bS9rdm1fbWFpbi5jCkBAIC04NTAsNiArODUwLDE5IEBACiAKIH0KIAorc3RhdGljIHZvaWQga3ZtX21tdV9ub3RpZmllcl9jaGFuZ2VfcHRlKHN0cnVjdCBtbXVfbm90aWZpZXIgKm1uLAorCQkJCQlzdHJ1Y3QgbW1fc3RydWN0ICptbSwKKwkJCQkJdW5zaWduZWQgbG9uZyBhZGRyZXNzLAorCQkJCQlwdGVfdCBwdGUpCit7CisJc3RydWN0IGt2bSAqa3ZtID0gbW11X25vdGlmaWVyX3RvX2t2bShtbik7CisKKwlzcGluX2xvY2soJmt2bS0+bW11X2xvY2spOworCWt2bS0+bW11X25vdGlmaWVyX3NlcSsrOworCWt2bV9zZXRfc3B0ZV9odmEoa3ZtLCBhZGRyZXNzLCBwdGUpOworCXNwaW5fdW5sb2NrKCZrdm0tPm1tdV9sb2NrKTsKK30KKwogc3RhdGljIHZvaWQga3ZtX21tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0KHN0cnVjdCBtbXVfbm90aWZpZXIgKm1uLAogCQkJCQkJICAgIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAogCQkJCQkJICAgIHVuc2lnbmVkIGxvbmcgc3RhcnQsCkBAIC05MjksNiArOTQyLDcgQEAKIAkuaW52YWxpZGF0ZV9yYW5nZV9zdGFydAk9IGt2bV9tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFydCwKIAkuaW52YWxpZGF0ZV9yYW5nZV9lbmQJPSBrdm1fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kLAogCS5jbGVhcl9mbHVzaF95b3VuZwk9IGt2bV9tbXVfbm90aWZpZXJfY2xlYXJfZmx1c2hfeW91bmcsCisJLmNoYW5nZV9wdGUJCT0ga3ZtX21tdV9ub3RpZmllcl9jaGFuZ2VfcHRlLAogCS5yZWxlYXNlCQk9IGt2bV9tbXVfbm90aWZpZXJfcmVsZWFzZSwKIH07CiAjZW5kaWYgLyogQ09ORklHX01NVV9OT1RJRklFUiAmJiBLVk1fQVJDSF9XQU5UX01NVV9OT1RJRklFUiAqLwpAQCAtMTcxMyw3ICsxNzI3LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBrdm1fdmNwdV92bV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGt2bV92Y3B1X3ZtX29wcyA9IHsKIAkuZmF1bHQgPSBrdm1fdmNwdV9mYXVsdCwKIH07CiAKQEAgLTIzMTcsNyArMjMzMSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3Qga3ZtX3ZtX3ZtX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3Qga3ZtX3ZtX3ZtX29wcyA9IHsKIAkuZmF1bHQgPSBrdm1fdm1fZmF1bHQsCiB9OwogCkBAIC0yNjI1LDcgKzI2MzksNyBAQAogCiBERUZJTkVfU0lNUExFX0FUVFJJQlVURSh2Y3B1X3N0YXRfZm9wcywgdmNwdV9zdGF0X2dldCwgTlVMTCwgIiVsbHVcbiIpOwogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqc3RhdF9mb3BzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqc3RhdF9mb3BzW10gPSB7CiAJW0tWTV9TVEFUX1ZDUFVdID0gJnZjcHVfc3RhdF9mb3BzLAogCVtLVk1fU1RBVF9WTV0gICA9ICZ2bV9zdGF0X2ZvcHMsCiB9OwpAQCAtMjcwMyw4ICsyNzE3LDYgQEAKIAlpbnQgcjsKIAlpbnQgY3B1OwogCi0Ja3ZtX2luaXRfZGVidWcoKTsKLQogCXIgPSBrdm1fYXJjaF9pbml0KG9wYXF1ZSk7CiAJaWYgKHIpCiAJCWdvdG8gb3V0X2ZhaWw7CkBAIC0yNzcxLDYgKzI3ODMsOCBAQAogCWt2bV9wcmVlbXB0X29wcy5zY2hlZF9pbiA9IGt2bV9zY2hlZF9pbjsKIAlrdm1fcHJlZW1wdF9vcHMuc2NoZWRfb3V0ID0ga3ZtX3NjaGVkX291dDsKIAorCWt2bV9pbml0X2RlYnVnKCk7CisKIAlyZXR1cm4gMDsKIAogb3V0X2ZyZWU6CkBAIC0yNzkzLDcgKzI4MDcsNiBAQAogb3V0OgogCWt2bV9hcmNoX2V4aXQoKTsKIG91dF9mYWlsOgotCWt2bV9leGl0X2RlYnVnKCk7CiAJcmV0dXJuIHI7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChrdm1faW5pdCk7CkBAIC0yODAxLDYgKzI4MTQsNyBAQAogdm9pZCBrdm1fZXhpdCh2b2lkKQogewogCXRyYWNlcG9pbnRfc3luY2hyb25pemVfdW5yZWdpc3RlcigpOworCWt2bV9leGl0X2RlYnVnKCk7CiAJbWlzY19kZXJlZ2lzdGVyKCZrdm1fZGV2KTsKIAlrbWVtX2NhY2hlX2Rlc3Ryb3koa3ZtX3ZjcHVfY2FjaGUpOwogCXN5c2Rldl91bnJlZ2lzdGVyKCZrdm1fc3lzZGV2KTsKQEAgLTI4MTAsNyArMjgyNCw2IEBACiAJb25fZWFjaF9jcHUoaGFyZHdhcmVfZGlzYWJsZSwgTlVMTCwgMSk7CiAJa3ZtX2FyY2hfaGFyZHdhcmVfdW5zZXR1cCgpOwogCWt2bV9hcmNoX2V4aXQoKTsKLQlrdm1fZXhpdF9kZWJ1ZygpOwogCWZyZWVfY3B1bWFza192YXIoY3B1c19oYXJkd2FyZV9lbmFibGVkKTsKIAlfX2ZyZWVfcGFnZShiYWRfcGFnZSk7CiB9Cg==